/*!
 * Copyright (c) 2023 Acoustic, L.P. All rights reserved.
 *
 * NOTICE: This file contains material that is confidential and proprietary to
 * Acoustic, L.P. and/or other developers. No license is granted under any intellectual or
 * industrial property rights of Acoustic, L.P. except as may be provided in an agreement with
 * Acoustic, L.P. Any unauthorized copying or distribution of content from this file is
 * prohibited.
 *
 * @version 6.4.72
 * @flags NDEBUG
 */
if (window.TLT) throw new Error("Attempting to recreate TLT. Library may be included more than once on the page."); window.TLT = function () { "use strict"; let e, t, n, r, i, o, a, s, l, c, u, d, f, p = !1; const h = 6e5; function g(e) { window.TLT && e.persisted && (TLT.terminationReason = "", TLT.init()) } function m(e, t, n, r) { let i = null, a = null, l = null; const c = d.getOriginAndPath(), u = TLT.getModule("replay"), f = TLT.getModule("TLCookie"), p = TLT.getModule("performance"); t && "string" == typeof t && (n && "string" == typeof n || (n = ""), a = { type: 2, screenview: { type: e, name: t, originalUrl: c.path, url: TLT.normalizeUrl("", c.path, 2), host: c.origin, referrer: n, title: document.title, queryParams: c.queryParams } }, "LOAD" === e ? l = { type: "screenview_load", name: t } : "UNLOAD" === e && (l = { type: "screenview_unload", name: t }), l && u && (i = u.onevent(l)), i && (a.dcid = i), "LOAD" !== e && "UNLOAD" !== e || o.post("", a), l && f && f.onevent(l), l && p && p.onevent(l), l && s && s.onevent(l)) } const y = (new Date).getTime(); let v, w; const b = {}, T = {}, S = {}; let _ = !1, x = null; const E = function () { let e, t = []; function r(r) { return d.indexOf(t, r) < 0 && function (r) { const i = l.framesBlacklist; let o, a; if (e = e || [], r = r || null, void 0 !== i && i.length > 0) { for (a = 0; a < i.length; a += 1)o = n.queryAll(i[a], r), o && o.length > 0 && (e = e.concat(o)); t = t.concat(n.queryAll("iframe", r)) } }(r.ownerDocument), d.indexOf(e, r) > -1 } return r.clearCache = function () { e = null }, r }(); let C = null; const O = { config: ["getConfig", "getDefaultConfig", "updateConfig", "getCoreConfig", "updateCoreConfig", "getModuleConfig", "updateModuleConfig", "getServiceConfig", "updateServiceConfig"], queue: ["post", "setAutoFlush", "flushAll", "setXHRLog"], browserBase: ["getXPathFromNode", "processDOMEvent"] }, k = function () { const e = {}; return { normalizeModuleEvents: function (t, n, r, i) { const o = e[t]; let a = !1, s = !1; r = r || H._getLocalTop(), o || (e[t] = { loadFired: !1, pageHideFired: !1 }, d.forEach(n, (function (e) { switch (e.name) { case "load": a = !0, n.push(d.mixin(d.mixin({}, e), { name: "pageshow" })); break; case "unload": s = !0, n.push(d.mixin(d.mixin({}, e), { name: "pagehide" })), n.push(d.mixin(d.mixin({}, e), { name: "beforeunload" })); break; case "change": d.isLegacyIE && n.push(d.mixin(d.mixin({}, e), { name: "propertychange" })) } })), a || s ? (e[t].silentLoad = !a, e[t].silentUnload = !s, a || n.push({ name: "load", target: r }), s || n.push({ name: "unload", target: r })) : delete e[t]) }, canPublish: function (t, n) { if (!1 === Object.prototype.hasOwnProperty.call(e, t)) return !0; const r = e[t]; switch (n.type) { case "load": return r.pageHideFired = !1, r.loadFired = !0, !r.silentLoad; case "pageshow": return r.pageHideFired = !1, n.type = "load", !r.loadFired && !r.silentLoad; case "pagehide": return n.type = "unload", r.loadFired = !1, r.pageHideFired = !0, !r.silentUnload; case "unload": case "beforeunload": return n.type = "unload", r.loadFired = !1, !r.pageHideFired && !r.silentUnload }return !0 }, isUnload: function (e) { return "object" == typeof e && ("unload" === e.type || "beforeunload" === e.type || "pagehide" === e.type) } } }(); let L = {}, D = {}, M = {}, I = [], P = function () { }, R = null, A = !0, N = function () { }, j = !1; const z = function () { const e = window.location; let t = e.pathname, n = e.hash, r = ""; return function () { let i = r; const o = e.pathname, a = e.hash; o !== t ? i = TLT.normalizeUrl("", o + a, 2) : a !== n && (i = TLT.normalizeUrl("", a, 2)), i !== r && (r && m("UNLOAD", r), m("LOAD", i), r = i, t = o, n = a) } }(); let V = function (e, t) { let r, i, o, a, s, c, u = !1; const f = l.blockedElements; if (!f || !f.length) return V = function () { return !1 }, u; if (!e || !e.nodeType) return u; for (t = t || d.getDocument(e), r = 0, o = f.length; r < o && !u; r += 1)for (s = n.queryAll(f[r], t), i = 0, c = s.length; i < c && !u; i += 1)a = s[i], u = a.contains ? a.contains(e) : a === e; return u }; const H = { getTLTSessionCookieInfo: function () { return b }, _loadGlobalsForUnitTesting: function (c) { d = c.utils, e = c.getService("ajax"), t = c.getService("browserBase"), n = c.getService("browser"), r = c.getService("config"), i = c.getService("domCapture"), o = c.getService("queue"), a = c.getService("serializer"), s = c.getModule("dataLayer"), l = r ? r.getCoreConfig() : null }, getStartTime: function () { return y }, getPageId: function () { return v || "#" }, getTabId: function () { return w }, isMousemovementDetected: function () { return p }, setSessionCookieInfo: function (e, t, n) { b.tltCookieName = t, b.tltCookieValue = n }, getLibraryVersion: function () { return "6.4.72" }, getCurrentWebEvent: function () { return L }, normalizeUrl: function (e, t, n) { let r; const i = this.getCoreConfig(); if (i.normalization && i.normalization.urlFunction) { r = i.normalization.urlFunction, "string" == typeof r && (r = d.access(r)); try { t = r(t, n) } catch (e) { } } return t }, getCurrentOffset: function () { return this.getService("message").getCurrentOffset() }, initLib: function (e, t, n) { return this.initLibAdv(e, t, {}, !0, !0, !0, !0, !0, n) }, initLibAdv: function (e, t, n, r, i, o, a, s, l) { return "object" == typeof pako && void 0 !== pako && void 0 !== pako.deflate && void 0 !== pako.Deflate ? console && console.info("Pako is already loaded.") : !0 === r && (window.pako = function e(t, n, r) { function i(a, s) { if (!n[a]) { if (!t[a]) { var l = "function" == typeof require && require; if (!s && l) return l(a, !0); if (o) return o(a, !0); var c = new Error("Cannot find module '" + a + "'"); throw c.code = "MODULE_NOT_FOUND", c } var u = n[a] = { exports: {} }; t[a][0].call(u.exports, (function (e) { return i(t[a][1][e] || e) }), u, u.exports, e, t, n, r) } return n[a].exports } for (var o = "function" == typeof require && require, a = 0; a < r.length; a++)i(r[a]); return i }({ 1: [function (e, t, n) { var r = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array; n.assign = function (e) { for (var t, n, r = Array.prototype.slice.call(arguments, 1); r.length;) { var i = r.shift(); if (i) { if ("object" != typeof i) throw new TypeError(i + "must be non-object"); for (var o in i) t = i, n = o, Object.prototype.hasOwnProperty.call(t, n) && (e[o] = i[o]) } } return e }, n.shrinkBuf = function (e, t) { return e.length === t ? e : e.subarray ? e.subarray(0, t) : (e.length = t, e) }; var i = { arraySet: function (e, t, n, r, i) { if (t.subarray && e.subarray) e.set(t.subarray(n, n + r), i); else for (var o = 0; o < r; o++)e[i + o] = t[n + o] }, flattenChunks: function (e) { var t, n, r, i, o, a; for (t = r = 0, n = e.length; t < n; t++)r += e[t].length; for (a = new Uint8Array(r), t = i = 0, n = e.length; t < n; t++)o = e[t], a.set(o, i), i += o.length; return a } }, o = { arraySet: function (e, t, n, r, i) { for (var o = 0; o < r; o++)e[i + o] = t[n + o] }, flattenChunks: function (e) { return [].concat.apply([], e) } }; n.setTyped = function (e) { e ? (n.Buf8 = Uint8Array, n.Buf16 = Uint16Array, n.Buf32 = Int32Array, n.assign(n, i)) : (n.Buf8 = Array, n.Buf16 = Array, n.Buf32 = Array, n.assign(n, o)) }, n.setTyped(r) }, {}], 2: [function (e, t, n) { var r = e("./common"), i = !0, o = !0; try { String.fromCharCode.apply(null, [0]) } catch (e) { i = !1 } try { String.fromCharCode.apply(null, new Uint8Array(1)) } catch (e) { o = !1 } for (var a = new r.Buf8(256), s = 0; s < 256; s++)a[s] = 252 <= s ? 6 : 248 <= s ? 5 : 240 <= s ? 4 : 224 <= s ? 3 : 192 <= s ? 2 : 1; function l(e, t) { if (t < 65534 && (e.subarray && o || !e.subarray && i)) return String.fromCharCode.apply(null, r.shrinkBuf(e, t)); for (var n = "", a = 0; a < t; a++)n += String.fromCharCode(e[a]); return n } a[254] = a[254] = 1, n.string2buf = function (e) { var t, n, i, o, a, s = e.length, l = 0; for (o = 0; o < s; o++)55296 == (64512 & (n = e.charCodeAt(o))) && o + 1 < s && 56320 == (64512 & (i = e.charCodeAt(o + 1))) && (n = 65536 + (n - 55296 << 10) + (i - 56320), o++), l += n < 128 ? 1 : n < 2048 ? 2 : n < 65536 ? 3 : 4; for (t = new r.Buf8(l), o = a = 0; a < l; o++)55296 == (64512 & (n = e.charCodeAt(o))) && o + 1 < s && 56320 == (64512 & (i = e.charCodeAt(o + 1))) && (n = 65536 + (n - 55296 << 10) + (i - 56320), o++), n < 128 ? t[a++] = n : (n < 2048 ? t[a++] = 192 | n >>> 6 : (n < 65536 ? t[a++] = 224 | n >>> 12 : (t[a++] = 240 | n >>> 18, t[a++] = 128 | n >>> 12 & 63), t[a++] = 128 | n >>> 6 & 63), t[a++] = 128 | 63 & n); return t }, n.buf2binstring = function (e) { return l(e, e.length) }, n.binstring2buf = function (e) { for (var t = new r.Buf8(e.length), n = 0, i = t.length; n < i; n++)t[n] = e.charCodeAt(n); return t }, n.buf2string = function (e, t) { var n, r, i, o, s = t || e.length, c = new Array(2 * s); for (n = r = 0; n < s;)if ((i = e[n++]) < 128) c[r++] = i; else if (4 < (o = a[i])) c[r++] = 65533, n += o - 1; else { for (i &= 2 === o ? 31 : 3 === o ? 15 : 7; 1 < o && n < s;)i = i << 6 | 63 & e[n++], o--; 1 < o ? c[r++] = 65533 : i < 65536 ? c[r++] = i : (i -= 65536, c[r++] = 55296 | i >> 10 & 1023, c[r++] = 56320 | 1023 & i) } return l(c, r) }, n.utf8border = function (e, t) { var n; for ((t = t || e.length) > e.length && (t = e.length), n = t - 1; 0 <= n && 128 == (192 & e[n]);)n--; return n < 0 || 0 === n ? t : n + a[e[n]] > t ? n : t } }, { "./common": 1 }], 3: [function (e, t, n) { t.exports = function (e, t, n, r) { for (var i = 65535 & e | 0, o = e >>> 16 & 65535 | 0, a = 0; 0 !== n;) { for (n -= a = 2e3 < n ? 2e3 : n; o = o + (i = i + t[r++] | 0) | 0, --a;); i %= 65521, o %= 65521 } return i | o << 16 | 0 } }, {}], 4: [function (e, t, n) { var r = function () { for (var e, t = [], n = 0; n < 256; n++) { e = n; for (var r = 0; r < 8; r++)e = 1 & e ? 3988292384 ^ e >>> 1 : e >>> 1; t[n] = e } return t }(); t.exports = function (e, t, n, i) { var o = r, a = i + n; e ^= -1; for (var s = i; s < a; s++)e = e >>> 8 ^ o[255 & (e ^ t[s])]; return -1 ^ e } }, {}], 5: [function (e, t, n) { var r, i = e("../utils/common"), o = e("./trees"), a = e("./adler32"), s = e("./crc32"), l = e("./messages"), c = 0, u = 4, d = 0, f = -2, p = -1, h = 4, g = 2, m = 8, y = 9, v = 286, w = 30, b = 19, T = 2 * v + 1, S = 15, _ = 3, x = 258, E = x + _ + 1, C = 42, O = 113, k = 1, L = 2, D = 3, M = 4; function I(e, t) { return e.msg = l[t], t } function P(e) { return (e << 1) - (4 < e ? 9 : 0) } function R(e) { for (var t = e.length; 0 <= --t;)e[t] = 0 } function A(e) { var t = e.state, n = t.pending; n > e.avail_out && (n = e.avail_out), 0 !== n && (i.arraySet(e.output, t.pending_buf, t.pending_out, n, e.next_out), e.next_out += n, t.pending_out += n, e.total_out += n, e.avail_out -= n, t.pending -= n, 0 === t.pending && (t.pending_out = 0)) } function N(e, t) { o._tr_flush_block(e, 0 <= e.block_start ? e.block_start : -1, e.strstart - e.block_start, t), e.block_start = e.strstart, A(e.strm) } function j(e, t) { e.pending_buf[e.pending++] = t } function z(e, t) { e.pending_buf[e.pending++] = t >>> 8 & 255, e.pending_buf[e.pending++] = 255 & t } function V(e, t) { var n, r, i = e.max_chain_length, o = e.strstart, a = e.prev_length, s = e.nice_match, l = e.strstart > e.w_size - E ? e.strstart - (e.w_size - E) : 0, c = e.window, u = e.w_mask, d = e.prev, f = e.strstart + x, p = c[o + a - 1], h = c[o + a]; e.prev_length >= e.good_match && (i >>= 2), s > e.lookahead && (s = e.lookahead); do { if (c[(n = t) + a] === h && c[n + a - 1] === p && c[n] === c[o] && c[++n] === c[o + 1]) { o += 2, n++; do { } while (c[++o] === c[++n] && c[++o] === c[++n] && c[++o] === c[++n] && c[++o] === c[++n] && c[++o] === c[++n] && c[++o] === c[++n] && c[++o] === c[++n] && c[++o] === c[++n] && o < f); if (r = x - (f - o), o = f - x, a < r) { if (e.match_start = t, s <= (a = r)) break; p = c[o + a - 1], h = c[o + a] } } } while ((t = d[t & u]) > l && 0 != --i); return a <= e.lookahead ? a : e.lookahead } function H(e) { var t, n, r, o, l, c, u, d, f, p, h = e.w_size; do { if (o = e.window_size - e.lookahead - e.strstart, e.strstart >= h + (h - E)) { for (i.arraySet(e.window, e.window, h, h, 0), e.match_start -= h, e.strstart -= h, e.block_start -= h, t = n = e.hash_size; r = e.head[--t], e.head[t] = h <= r ? r - h : 0, --n;); for (t = n = h; r = e.prev[--t], e.prev[t] = h <= r ? r - h : 0, --n;); o += h } if (0 === e.strm.avail_in) break; if (c = e.strm, u = e.window, d = e.strstart + e.lookahead, p = void 0, (f = o) < (p = c.avail_in) && (p = f), n = 0 === p ? 0 : (c.avail_in -= p, i.arraySet(u, c.input, c.next_in, p, d), 1 === c.state.wrap ? c.adler = a(c.adler, u, p, d) : 2 === c.state.wrap && (c.adler = s(c.adler, u, p, d)), c.next_in += p, c.total_in += p, p), e.lookahead += n, e.lookahead + e.insert >= _) for (l = e.strstart - e.insert, e.ins_h = e.window[l], e.ins_h = (e.ins_h << e.hash_shift ^ e.window[l + 1]) & e.hash_mask; e.insert && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[l + _ - 1]) & e.hash_mask, e.prev[l & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = l, l++, e.insert--, !(e.lookahead + e.insert < _));); } while (e.lookahead < E && 0 !== e.strm.avail_in) } function F(e, t) { for (var n, r; ;) { if (e.lookahead < E) { if (H(e), e.lookahead < E && t === c) return k; if (0 === e.lookahead) break } if (n = 0, e.lookahead >= _ && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + _ - 1]) & e.hash_mask, n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 !== n && e.strstart - n <= e.w_size - E && (e.match_length = V(e, n)), e.match_length >= _) if (r = o._tr_tally(e, e.strstart - e.match_start, e.match_length - _), e.lookahead -= e.match_length, e.match_length <= e.max_lazy_match && e.lookahead >= _) { for (e.match_length--; e.strstart++, e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + _ - 1]) & e.hash_mask, n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart, 0 != --e.match_length;); e.strstart++ } else e.strstart += e.match_length, e.match_length = 0, e.ins_h = e.window[e.strstart], e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + 1]) & e.hash_mask; else r = o._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++; if (r && (N(e, !1), 0 === e.strm.avail_out)) return k } return e.insert = e.strstart < _ - 1 ? e.strstart : _ - 1, t === u ? (N(e, !0), 0 === e.strm.avail_out ? D : M) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? k : L } function U(e, t) { for (var n, r, i; ;) { if (e.lookahead < E) { if (H(e), e.lookahead < E && t === c) return k; if (0 === e.lookahead) break } if (n = 0, e.lookahead >= _ && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + _ - 1]) & e.hash_mask, n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), e.prev_length = e.match_length, e.prev_match = e.match_start, e.match_length = _ - 1, 0 !== n && e.prev_length < e.max_lazy_match && e.strstart - n <= e.w_size - E && (e.match_length = V(e, n), e.match_length <= 5 && (1 === e.strategy || e.match_length === _ && 4096 < e.strstart - e.match_start) && (e.match_length = _ - 1)), e.prev_length >= _ && e.match_length <= e.prev_length) { for (i = e.strstart + e.lookahead - _, r = o._tr_tally(e, e.strstart - 1 - e.prev_match, e.prev_length - _), e.lookahead -= e.prev_length - 1, e.prev_length -= 2; ++e.strstart <= i && (e.ins_h = (e.ins_h << e.hash_shift ^ e.window[e.strstart + _ - 1]) & e.hash_mask, n = e.prev[e.strstart & e.w_mask] = e.head[e.ins_h], e.head[e.ins_h] = e.strstart), 0 != --e.prev_length;); if (e.match_available = 0, e.match_length = _ - 1, e.strstart++, r && (N(e, !1), 0 === e.strm.avail_out)) return k } else if (e.match_available) { if ((r = o._tr_tally(e, 0, e.window[e.strstart - 1])) && N(e, !1), e.strstart++, e.lookahead--, 0 === e.strm.avail_out) return k } else e.match_available = 1, e.strstart++, e.lookahead-- } return e.match_available && (r = o._tr_tally(e, 0, e.window[e.strstart - 1]), e.match_available = 0), e.insert = e.strstart < _ - 1 ? e.strstart : _ - 1, t === u ? (N(e, !0), 0 === e.strm.avail_out ? D : M) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? k : L } function X(e, t, n, r, i) { this.good_length = e, this.max_lazy = t, this.nice_length = n, this.max_chain = r, this.func = i } function q() { this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = m, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new i.Buf16(2 * T), this.dyn_dtree = new i.Buf16(2 * (2 * w + 1)), this.bl_tree = new i.Buf16(2 * (2 * b + 1)), R(this.dyn_ltree), R(this.dyn_dtree), R(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new i.Buf16(S + 1), this.heap = new i.Buf16(2 * v + 1), R(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new i.Buf16(2 * v + 1), R(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0 } function B(e) { var t; return e && e.state ? (e.total_in = e.total_out = 0, e.data_type = g, (t = e.state).pending = 0, t.pending_out = 0, t.wrap < 0 && (t.wrap = -t.wrap), t.status = t.wrap ? C : O, e.adler = 2 === t.wrap ? 0 : 1, t.last_flush = c, o._tr_init(t), d) : I(e, f) } function Y(e) { var t, n = B(e); return n === d && ((t = e.state).window_size = 2 * t.w_size, R(t.head), t.max_lazy_match = r[t.level].max_lazy, t.good_match = r[t.level].good_length, t.nice_match = r[t.level].nice_length, t.max_chain_length = r[t.level].max_chain, t.strstart = 0, t.block_start = 0, t.lookahead = 0, t.insert = 0, t.match_length = t.prev_length = _ - 1, t.match_available = 0, t.ins_h = 0), n } function W(e, t, n, r, o, a) { if (!e) return f; var s = 1; if (t === p && (t = 6), r < 0 ? (s = 0, r = -r) : 15 < r && (s = 2, r -= 16), o < 1 || y < o || n !== m || r < 8 || 15 < r || t < 0 || 9 < t || a < 0 || h < a) return I(e, f); 8 === r && (r = 9); var l = new q; return (e.state = l).strm = e, l.wrap = s, l.gzhead = null, l.w_bits = r, l.w_size = 1 << l.w_bits, l.w_mask = l.w_size - 1, l.hash_bits = o + 7, l.hash_size = 1 << l.hash_bits, l.hash_mask = l.hash_size - 1, l.hash_shift = ~~((l.hash_bits + _ - 1) / _), l.window = new i.Buf8(2 * l.w_size), l.head = new i.Buf16(l.hash_size), l.prev = new i.Buf16(l.w_size), l.lit_bufsize = 1 << o + 6, l.pending_buf_size = 4 * l.lit_bufsize, l.pending_buf = new i.Buf8(l.pending_buf_size), l.d_buf = 1 * l.lit_bufsize, l.l_buf = 3 * l.lit_bufsize, l.level = t, l.strategy = a, l.method = n, Y(e) } r = [new X(0, 0, 0, 0, (function (e, t) { var n = 65535; for (n > e.pending_buf_size - 5 && (n = e.pending_buf_size - 5); ;) { if (e.lookahead <= 1) { if (H(e), 0 === e.lookahead && t === c) return k; if (0 === e.lookahead) break } e.strstart += e.lookahead, e.lookahead = 0; var r = e.block_start + n; if ((0 === e.strstart || e.strstart >= r) && (e.lookahead = e.strstart - r, e.strstart = r, N(e, !1), 0 === e.strm.avail_out)) return k; if (e.strstart - e.block_start >= e.w_size - E && (N(e, !1), 0 === e.strm.avail_out)) return k } return e.insert = 0, t === u ? (N(e, !0), 0 === e.strm.avail_out ? D : M) : (e.strstart > e.block_start && (N(e, !1), e.strm.avail_out), k) })), new X(4, 4, 8, 4, F), new X(4, 5, 16, 8, F), new X(4, 6, 32, 32, F), new X(4, 4, 16, 16, U), new X(8, 16, 32, 32, U), new X(8, 16, 128, 128, U), new X(8, 32, 128, 256, U), new X(32, 128, 258, 1024, U), new X(32, 258, 258, 4096, U)], n.deflateInit = function (e, t) { return W(e, t, m, 15, 8, 0) }, n.deflateInit2 = W, n.deflateReset = Y, n.deflateResetKeep = B, n.deflateSetHeader = function (e, t) { return e && e.state ? 2 !== e.state.wrap ? f : (e.state.gzhead = t, d) : f }, n.deflate = function (e, t) { var n, i, a, l; if (!e || !e.state || 5 < t || t < 0) return e ? I(e, f) : f; if (i = e.state, !e.output || !e.input && 0 !== e.avail_in || 666 === i.status && t !== u) return I(e, 0 === e.avail_out ? -5 : f); if (i.strm = e, n = i.last_flush, i.last_flush = t, i.status === C) if (2 === i.wrap) e.adler = 0, j(i, 31), j(i, 139), j(i, 8), i.gzhead ? (j(i, (i.gzhead.text ? 1 : 0) + (i.gzhead.hcrc ? 2 : 0) + (i.gzhead.extra ? 4 : 0) + (i.gzhead.name ? 8 : 0) + (i.gzhead.comment ? 16 : 0)), j(i, 255 & i.gzhead.time), j(i, i.gzhead.time >> 8 & 255), j(i, i.gzhead.time >> 16 & 255), j(i, i.gzhead.time >> 24 & 255), j(i, 9 === i.level ? 2 : 2 <= i.strategy || i.level < 2 ? 4 : 0), j(i, 255 & i.gzhead.os), i.gzhead.extra && i.gzhead.extra.length && (j(i, 255 & i.gzhead.extra.length), j(i, i.gzhead.extra.length >> 8 & 255)), i.gzhead.hcrc && (e.adler = s(e.adler, i.pending_buf, i.pending, 0)), i.gzindex = 0, i.status = 69) : (j(i, 0), j(i, 0), j(i, 0), j(i, 0), j(i, 0), j(i, 9 === i.level ? 2 : 2 <= i.strategy || i.level < 2 ? 4 : 0), j(i, 3), i.status = O); else { var p = m + (i.w_bits - 8 << 4) << 8; p |= (2 <= i.strategy || i.level < 2 ? 0 : i.level < 6 ? 1 : 6 === i.level ? 2 : 3) << 6, 0 !== i.strstart && (p |= 32), p += 31 - p % 31, i.status = O, z(i, p), 0 !== i.strstart && (z(i, e.adler >>> 16), z(i, 65535 & e.adler)), e.adler = 1 } if (69 === i.status) if (i.gzhead.extra) { for (a = i.pending; i.gzindex < (65535 & i.gzhead.extra.length) && (i.pending !== i.pending_buf_size || (i.gzhead.hcrc && i.pending > a && (e.adler = s(e.adler, i.pending_buf, i.pending - a, a)), A(e), a = i.pending, i.pending !== i.pending_buf_size));)j(i, 255 & i.gzhead.extra[i.gzindex]), i.gzindex++; i.gzhead.hcrc && i.pending > a && (e.adler = s(e.adler, i.pending_buf, i.pending - a, a)), i.gzindex === i.gzhead.extra.length && (i.gzindex = 0, i.status = 73) } else i.status = 73; if (73 === i.status) if (i.gzhead.name) { a = i.pending; do { if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > a && (e.adler = s(e.adler, i.pending_buf, i.pending - a, a)), A(e), a = i.pending, i.pending === i.pending_buf_size)) { l = 1; break } j(i, l = i.gzindex < i.gzhead.name.length ? 255 & i.gzhead.name.charCodeAt(i.gzindex++) : 0) } while (0 !== l); i.gzhead.hcrc && i.pending > a && (e.adler = s(e.adler, i.pending_buf, i.pending - a, a)), 0 === l && (i.gzindex = 0, i.status = 91) } else i.status = 91; if (91 === i.status) if (i.gzhead.comment) { a = i.pending; do { if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > a && (e.adler = s(e.adler, i.pending_buf, i.pending - a, a)), A(e), a = i.pending, i.pending === i.pending_buf_size)) { l = 1; break } j(i, l = i.gzindex < i.gzhead.comment.length ? 255 & i.gzhead.comment.charCodeAt(i.gzindex++) : 0) } while (0 !== l); i.gzhead.hcrc && i.pending > a && (e.adler = s(e.adler, i.pending_buf, i.pending - a, a)), 0 === l && (i.status = 103) } else i.status = 103; if (103 === i.status && (i.gzhead.hcrc ? (i.pending + 2 > i.pending_buf_size && A(e), i.pending + 2 <= i.pending_buf_size && (j(i, 255 & e.adler), j(i, e.adler >> 8 & 255), e.adler = 0, i.status = O)) : i.status = O), 0 !== i.pending) { if (A(e), 0 === e.avail_out) return i.last_flush = -1, d } else if (0 === e.avail_in && P(t) <= P(n) && t !== u) return I(e, -5); if (666 === i.status && 0 !== e.avail_in) return I(e, -5); if (0 !== e.avail_in || 0 !== i.lookahead || t !== c && 666 !== i.status) { var h = 2 === i.strategy ? function (e, t) { for (var n; ;) { if (0 === e.lookahead && (H(e), 0 === e.lookahead)) { if (t === c) return k; break } if (e.match_length = 0, n = o._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++, n && (N(e, !1), 0 === e.strm.avail_out)) return k } return e.insert = 0, t === u ? (N(e, !0), 0 === e.strm.avail_out ? D : M) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? k : L }(i, t) : 3 === i.strategy ? function (e, t) { for (var n, r, i, a, s = e.window; ;) { if (e.lookahead <= x) { if (H(e), e.lookahead <= x && t === c) return k; if (0 === e.lookahead) break } if (e.match_length = 0, e.lookahead >= _ && 0 < e.strstart && (r = s[i = e.strstart - 1]) === s[++i] && r === s[++i] && r === s[++i]) { a = e.strstart + x; do { } while (r === s[++i] && r === s[++i] && r === s[++i] && r === s[++i] && r === s[++i] && r === s[++i] && r === s[++i] && r === s[++i] && i < a); e.match_length = x - (a - i), e.match_length > e.lookahead && (e.match_length = e.lookahead) } if (e.match_length >= _ ? (n = o._tr_tally(e, 1, e.match_length - _), e.lookahead -= e.match_length, e.strstart += e.match_length, e.match_length = 0) : (n = o._tr_tally(e, 0, e.window[e.strstart]), e.lookahead--, e.strstart++), n && (N(e, !1), 0 === e.strm.avail_out)) return k } return e.insert = 0, t === u ? (N(e, !0), 0 === e.strm.avail_out ? D : M) : e.last_lit && (N(e, !1), 0 === e.strm.avail_out) ? k : L }(i, t) : r[i.level].func(i, t); if (h !== D && h !== M || (i.status = 666), h === k || h === D) return 0 === e.avail_out && (i.last_flush = -1), d; if (h === L && (1 === t ? o._tr_align(i) : 5 !== t && (o._tr_stored_block(i, 0, 0, !1), 3 === t && (R(i.head), 0 === i.lookahead && (i.strstart = 0, i.block_start = 0, i.insert = 0))), A(e), 0 === e.avail_out)) return i.last_flush = -1, d } return t !== u ? d : i.wrap <= 0 ? 1 : (2 === i.wrap ? (j(i, 255 & e.adler), j(i, e.adler >> 8 & 255), j(i, e.adler >> 16 & 255), j(i, e.adler >> 24 & 255), j(i, 255 & e.total_in), j(i, e.total_in >> 8 & 255), j(i, e.total_in >> 16 & 255), j(i, e.total_in >> 24 & 255)) : (z(i, e.adler >>> 16), z(i, 65535 & e.adler)), A(e), 0 < i.wrap && (i.wrap = -i.wrap), 0 !== i.pending ? d : 1) }, n.deflateEnd = function (e) { var t; return e && e.state ? (t = e.state.status) !== C && 69 !== t && 73 !== t && 91 !== t && 103 !== t && t !== O && 666 !== t ? I(e, f) : (e.state = null, t === O ? I(e, -3) : d) : f }, n.deflateSetDictionary = function (e, t) { var n, r, o, s, l, c, u, p, h = t.length; if (!e || !e.state) return f; if (2 === (s = (n = e.state).wrap) || 1 === s && n.status !== C || n.lookahead) return f; for (1 === s && (e.adler = a(e.adler, t, h, 0)), n.wrap = 0, h >= n.w_size && (0 === s && (R(n.head), n.strstart = 0, n.block_start = 0, n.insert = 0), p = new i.Buf8(n.w_size), i.arraySet(p, t, h - n.w_size, n.w_size, 0), t = p, h = n.w_size), l = e.avail_in, c = e.next_in, u = e.input, e.avail_in = h, e.next_in = 0, e.input = t, H(n); n.lookahead >= _;) { for (r = n.strstart, o = n.lookahead - (_ - 1); n.ins_h = (n.ins_h << n.hash_shift ^ n.window[r + _ - 1]) & n.hash_mask, n.prev[r & n.w_mask] = n.head[n.ins_h], n.head[n.ins_h] = r, r++, --o;); n.strstart = r, n.lookahead = _ - 1, H(n) } return n.strstart += n.lookahead, n.block_start = n.strstart, n.insert = n.lookahead, n.lookahead = 0, n.match_length = n.prev_length = _ - 1, n.match_available = 0, e.next_in = c, e.input = u, e.avail_in = l, n.wrap = s, d }, n.deflateInfo = "pako deflate (from Nodeca project)" }, { "../utils/common": 1, "./adler32": 3, "./crc32": 4, "./messages": 6, "./trees": 7 }], 6: [function (e, t, n) { t.exports = { 2: "need dictionary", 1: "stream end", 0: "", "-1": "file error", "-2": "stream error", "-3": "data error", "-4": "insufficient memory", "-5": "buffer error", "-6": "incompatible version" } }, {}], 7: [function (e, t, n) { var r = e("../utils/common"), i = 0, o = 1; function a(e) { for (var t = e.length; 0 <= --t;)e[t] = 0 } var s = 0, l = 29, c = 256, u = c + 1 + l, d = 30, f = 19, p = 2 * u + 1, h = 15, g = 16, m = 7, y = 256, v = 16, w = 17, b = 18, T = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], S = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], _ = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], x = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], E = new Array(2 * (u + 2)); a(E); var C = new Array(2 * d); a(C); var O = new Array(512); a(O); var k = new Array(256); a(k); var L = new Array(l); a(L); var D, M, I, P = new Array(d); function R(e, t, n, r, i) { this.static_tree = e, this.extra_bits = t, this.extra_base = n, this.elems = r, this.max_length = i, this.has_stree = e && e.length } function A(e, t) { this.dyn_tree = e, this.max_code = 0, this.stat_desc = t } function N(e) { return e < 256 ? O[e] : O[256 + (e >>> 7)] } function j(e, t) { e.pending_buf[e.pending++] = 255 & t, e.pending_buf[e.pending++] = t >>> 8 & 255 } function z(e, t, n) { e.bi_valid > g - n ? (e.bi_buf |= t << e.bi_valid & 65535, j(e, e.bi_buf), e.bi_buf = t >> g - e.bi_valid, e.bi_valid += n - g) : (e.bi_buf |= t << e.bi_valid & 65535, e.bi_valid += n) } function V(e, t, n) { z(e, n[2 * t], n[2 * t + 1]) } function H(e, t) { for (var n = 0; n |= 1 & e, e >>>= 1, n <<= 1, 0 < --t;); return n >>> 1 } function F(e, t, n) { var r, i, o = new Array(h + 1), a = 0; for (r = 1; r <= h; r++)o[r] = a = a + n[r - 1] << 1; for (i = 0; i <= t; i++) { var s = e[2 * i + 1]; 0 !== s && (e[2 * i] = H(o[s]++, s)) } } function U(e) { var t; for (t = 0; t < u; t++)e.dyn_ltree[2 * t] = 0; for (t = 0; t < d; t++)e.dyn_dtree[2 * t] = 0; for (t = 0; t < f; t++)e.bl_tree[2 * t] = 0; e.dyn_ltree[2 * y] = 1, e.opt_len = e.static_len = 0, e.last_lit = e.matches = 0 } function X(e) { 8 < e.bi_valid ? j(e, e.bi_buf) : 0 < e.bi_valid && (e.pending_buf[e.pending++] = e.bi_buf), e.bi_buf = 0, e.bi_valid = 0 } function q(e, t, n, r) { var i = 2 * t, o = 2 * n; return e[i] < e[o] || e[i] === e[o] && r[t] <= r[n] } function B(e, t, n) { for (var r = e.heap[n], i = n << 1; i <= e.heap_len && (i < e.heap_len && q(t, e.heap[i + 1], e.heap[i], e.depth) && i++, !q(t, r, e.heap[i], e.depth));)e.heap[n] = e.heap[i], n = i, i <<= 1; e.heap[n] = r } function Y(e, t, n) { var r, i, o, a, s = 0; if (0 !== e.last_lit) for (; r = e.pending_buf[e.d_buf + 2 * s] << 8 | e.pending_buf[e.d_buf + 2 * s + 1], i = e.pending_buf[e.l_buf + s], s++, 0 === r ? V(e, i, t) : (V(e, (o = k[i]) + c + 1, t), 0 !== (a = T[o]) && z(e, i -= L[o], a), V(e, o = N(--r), n), 0 !== (a = S[o]) && z(e, r -= P[o], a)), s < e.last_lit;); V(e, y, t) } function W(e, t) { var n, r, i, o = t.dyn_tree, a = t.stat_desc.static_tree, s = t.stat_desc.has_stree, l = t.stat_desc.elems, c = -1; for (e.heap_len = 0, e.heap_max = p, n = 0; n < l; n++)0 !== o[2 * n] ? (e.heap[++e.heap_len] = c = n, e.depth[n] = 0) : o[2 * n + 1] = 0; for (; e.heap_len < 2;)o[2 * (i = e.heap[++e.heap_len] = c < 2 ? ++c : 0)] = 1, e.depth[i] = 0, e.opt_len--, s && (e.static_len -= a[2 * i + 1]); for (t.max_code = c, n = e.heap_len >> 1; 1 <= n; n--)B(e, o, n); for (i = l; n = e.heap[1], e.heap[1] = e.heap[e.heap_len--], B(e, o, 1), r = e.heap[1], e.heap[--e.heap_max] = n, e.heap[--e.heap_max] = r, o[2 * i] = o[2 * n] + o[2 * r], e.depth[i] = (e.depth[n] >= e.depth[r] ? e.depth[n] : e.depth[r]) + 1, o[2 * n + 1] = o[2 * r + 1] = i, e.heap[1] = i++, B(e, o, 1), 2 <= e.heap_len;); e.heap[--e.heap_max] = e.heap[1], function (e, t) { var n, r, i, o, a, s, l = t.dyn_tree, c = t.max_code, u = t.stat_desc.static_tree, d = t.stat_desc.has_stree, f = t.stat_desc.extra_bits, g = t.stat_desc.extra_base, m = t.stat_desc.max_length, y = 0; for (o = 0; o <= h; o++)e.bl_count[o] = 0; for (l[2 * e.heap[e.heap_max] + 1] = 0, n = e.heap_max + 1; n < p; n++)m < (o = l[2 * l[2 * (r = e.heap[n]) + 1] + 1] + 1) && (o = m, y++), l[2 * r + 1] = o, c < r || (e.bl_count[o]++, a = 0, g <= r && (a = f[r - g]), s = l[2 * r], e.opt_len += s * (o + a), d && (e.static_len += s * (u[2 * r + 1] + a))); if (0 !== y) { do { for (o = m - 1; 0 === e.bl_count[o];)o--; e.bl_count[o]--, e.bl_count[o + 1] += 2, e.bl_count[m]--, y -= 2 } while (0 < y); for (o = m; 0 !== o; o--)for (r = e.bl_count[o]; 0 !== r;)c < (i = e.heap[--n]) || (l[2 * i + 1] !== o && (e.opt_len += (o - l[2 * i + 1]) * l[2 * i], l[2 * i + 1] = o), r--) } }(e, t), F(o, c, e.bl_count) } function K(e, t, n) { var r, i, o = -1, a = t[1], s = 0, l = 7, c = 4; for (0 === a && (l = 138, c = 3), t[2 * (n + 1) + 1] = 65535, r = 0; r <= n; r++)i = a, a = t[2 * (r + 1) + 1], ++s < l && i === a || (s < c ? e.bl_tree[2 * i] += s : 0 !== i ? (i !== o && e.bl_tree[2 * i]++, e.bl_tree[2 * v]++) : s <= 10 ? e.bl_tree[2 * w]++ : e.bl_tree[2 * b]++, o = i, (s = 0) === a ? (l = 138, c = 3) : i === a ? (l = 6, c = 3) : (l = 7, c = 4)) } function Q(e, t, n) { var r, i, o = -1, a = t[1], s = 0, l = 7, c = 4; for (0 === a && (l = 138, c = 3), r = 0; r <= n; r++)if (i = a, a = t[2 * (r + 1) + 1], !(++s < l && i === a)) { if (s < c) for (; V(e, i, e.bl_tree), 0 != --s;); else 0 !== i ? (i !== o && (V(e, i, e.bl_tree), s--), V(e, v, e.bl_tree), z(e, s - 3, 2)) : s <= 10 ? (V(e, w, e.bl_tree), z(e, s - 3, 3)) : (V(e, b, e.bl_tree), z(e, s - 11, 7)); o = i, (s = 0) === a ? (l = 138, c = 3) : i === a ? (l = 6, c = 3) : (l = 7, c = 4) } } a(P); var J = !1; function G(e, t, n, i) { var o, a, l, c; z(e, (s << 1) + (i ? 1 : 0), 3), a = t, l = n, c = !0, X(o = e), c && (j(o, l), j(o, ~l)), r.arraySet(o.pending_buf, o.window, a, l, o.pending), o.pending += l } n._tr_init = function (e) { J || (function () { var e, t, n, r, i, o = new Array(h + 1); for (r = n = 0; r < l - 1; r++)for (L[r] = n, e = 0; e < 1 << T[r]; e++)k[n++] = r; for (k[n - 1] = r, r = i = 0; r < 16; r++)for (P[r] = i, e = 0; e < 1 << S[r]; e++)O[i++] = r; for (i >>= 7; r < d; r++)for (P[r] = i << 7, e = 0; e < 1 << S[r] - 7; e++)O[256 + i++] = r; for (t = 0; t <= h; t++)o[t] = 0; for (e = 0; e <= 143;)E[2 * e + 1] = 8, e++, o[8]++; for (; e <= 255;)E[2 * e + 1] = 9, e++, o[9]++; for (; e <= 279;)E[2 * e + 1] = 7, e++, o[7]++; for (; e <= 287;)E[2 * e + 1] = 8, e++, o[8]++; for (F(E, u + 1, o), e = 0; e < d; e++)C[2 * e + 1] = 5, C[2 * e] = H(e, 5); D = new R(E, T, c + 1, u, h), M = new R(C, S, 0, d, h), I = new R(new Array(0), _, 0, f, m) }(), J = !0), e.l_desc = new A(e.dyn_ltree, D), e.d_desc = new A(e.dyn_dtree, M), e.bl_desc = new A(e.bl_tree, I), e.bi_buf = 0, e.bi_valid = 0, U(e) }, n._tr_stored_block = G, n._tr_flush_block = function (e, t, n, r) { var a, s, l = 0; 0 < e.level ? (2 === e.strm.data_type && (e.strm.data_type = function (e) { var t, n = 4093624447; for (t = 0; t <= 31; t++, n >>>= 1)if (1 & n && 0 !== e.dyn_ltree[2 * t]) return i; if (0 !== e.dyn_ltree[18] || 0 !== e.dyn_ltree[20] || 0 !== e.dyn_ltree[26]) return o; for (t = 32; t < c; t++)if (0 !== e.dyn_ltree[2 * t]) return o; return i }(e)), W(e, e.l_desc), W(e, e.d_desc), l = function (e) { var t; for (K(e, e.dyn_ltree, e.l_desc.max_code), K(e, e.dyn_dtree, e.d_desc.max_code), W(e, e.bl_desc), t = f - 1; 3 <= t && 0 === e.bl_tree[2 * x[t] + 1]; t--); return e.opt_len += 3 * (t + 1) + 5 + 5 + 4, t }(e), a = e.opt_len + 3 + 7 >>> 3, (s = e.static_len + 3 + 7 >>> 3) <= a && (a = s)) : a = s = n + 5, n + 4 <= a && -1 !== t ? G(e, t, n, r) : 4 === e.strategy || s === a ? (z(e, 2 + (r ? 1 : 0), 3), Y(e, E, C)) : (z(e, 4 + (r ? 1 : 0), 3), function (e, t, n, r) { var i; for (z(e, t - 257, 5), z(e, n - 1, 5), z(e, r - 4, 4), i = 0; i < r; i++)z(e, e.bl_tree[2 * x[i] + 1], 3); Q(e, e.dyn_ltree, t - 1), Q(e, e.dyn_dtree, n - 1) }(e, e.l_desc.max_code + 1, e.d_desc.max_code + 1, l + 1), Y(e, e.dyn_ltree, e.dyn_dtree)), U(e), r && X(e) }, n._tr_tally = function (e, t, n) { return e.pending_buf[e.d_buf + 2 * e.last_lit] = t >>> 8 & 255, e.pending_buf[e.d_buf + 2 * e.last_lit + 1] = 255 & t, e.pending_buf[e.l_buf + e.last_lit] = 255 & n, e.last_lit++, 0 === t ? e.dyn_ltree[2 * n]++ : (e.matches++, t--, e.dyn_ltree[2 * (k[n] + c + 1)]++, e.dyn_dtree[2 * N(t)]++), e.last_lit === e.lit_bufsize - 1 }, n._tr_align = function (e) { var t; z(e, 2, 3), V(e, y, E), 16 === (t = e).bi_valid ? (j(t, t.bi_buf), t.bi_buf = 0, t.bi_valid = 0) : 8 <= t.bi_valid && (t.pending_buf[t.pending++] = 255 & t.bi_buf, t.bi_buf >>= 8, t.bi_valid -= 8) } }, { "../utils/common": 1 }], 8: [function (e, t, n) { t.exports = function () { this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0 } }, {}], "/lib/deflate.js": [function (e, t, n) { var r = e("./zlib/deflate"), i = e("./utils/common"), o = e("./utils/strings"), a = e("./zlib/messages"), s = e("./zlib/zstream"), l = Object.prototype.toString, c = 0, u = -1, d = 0, f = 8; function p(e) { if (!(this instanceof p)) return new p(e); this.options = i.assign({ level: u, method: f, chunkSize: 16384, windowBits: 15, memLevel: 8, strategy: d, to: "" }, e || {}); var t = this.options; t.raw && 0 < t.windowBits ? t.windowBits = -t.windowBits : t.gzip && 0 < t.windowBits && t.windowBits < 16 && (t.windowBits += 16), this.err = 0, this.msg = "", this.ended = !1, this.chunks = [], this.strm = new s, this.strm.avail_out = 0; var n = r.deflateInit2(this.strm, t.level, t.method, t.windowBits, t.memLevel, t.strategy); if (n !== c) throw new Error(a[n]); if (t.header && r.deflateSetHeader(this.strm, t.header), t.dictionary) { var h; if (h = "string" == typeof t.dictionary ? o.string2buf(t.dictionary) : "[object ArrayBuffer]" === l.call(t.dictionary) ? new Uint8Array(t.dictionary) : t.dictionary, (n = r.deflateSetDictionary(this.strm, h)) !== c) throw new Error(a[n]); this._dict_set = !0 } } function h(e, t) { var n = new p(t); if (n.push(e, !0), n.err) throw n.msg || a[n.err]; return n.result } p.prototype.push = function (e, t) { var n, a, s = this.strm, u = this.options.chunkSize; if (this.ended) return !1; a = t === ~~t ? t : !0 === t ? 4 : 0, "string" == typeof e ? s.input = o.string2buf(e) : "[object ArrayBuffer]" === l.call(e) ? s.input = new Uint8Array(e) : s.input = e, s.next_in = 0, s.avail_in = s.input.length; do { if (0 === s.avail_out && (s.output = new i.Buf8(u), s.next_out = 0, s.avail_out = u), 1 !== (n = r.deflate(s, a)) && n !== c) return this.onEnd(n), !(this.ended = !0); 0 !== s.avail_out && (0 !== s.avail_in || 4 !== a && 2 !== a) || ("string" === this.options.to ? this.onData(o.buf2binstring(i.shrinkBuf(s.output, s.next_out))) : this.onData(i.shrinkBuf(s.output, s.next_out))) } while ((0 < s.avail_in || 0 === s.avail_out) && 1 !== n); return 4 === a ? (n = r.deflateEnd(this.strm), this.onEnd(n), this.ended = !0, n === c) : 2 !== a || (this.onEnd(c), !(s.avail_out = 0)) }, p.prototype.onData = function (e) { this.chunks.push(e) }, p.prototype.onEnd = function (e) { e === c && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = i.flattenChunks(this.chunks)), this.chunks = [], this.err = e, this.msg = this.strm.msg }, n.Deflate = p, n.deflate = h, n.deflateRaw = function (e, t) { return (t = t || {}).raw = !0, h(e, t) }, n.gzip = function (e, t) { return (t = t || {}).gzip = !0, h(e, t) } }, { "./utils/common": 1, "./utils/strings": 2, "./zlib/deflate": 5, "./zlib/messages": 6, "./zlib/zstream": 8 }] }, {}, [])("/lib/deflate.js")), "function" == typeof Hammer && void 0 !== Hammer ? console && console.info("Hammer:" + Hammer.VERSION + " is already loaded. But you need 1.1.3.") : !0 === i && function (e, t) { var n = function e(t, n) { return new e.Instance(t, n || {}) }; n.VERSION = "1.1.3", n.defaults = { behavior: { userSelect: "none", touchAction: "pan-y", touchCallout: "none", contentZooming: "none", userDrag: "none", tapHighlightColor: "rgba(0,0,0,0)" } }, n.DOCUMENT = document, n.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled, n.HAS_TOUCHEVENTS = "ontouchstart" in e, n.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent), n.NO_MOUSEEVENTS = n.HAS_TOUCHEVENTS && n.IS_MOBILE || n.HAS_POINTEREVENTS, n.CALCULATE_INTERVAL = 25; var r = {}, i = n.DIRECTION_DOWN = "down", o = n.DIRECTION_LEFT = "left", a = n.DIRECTION_UP = "up", s = n.DIRECTION_RIGHT = "right", l = n.POINTER_MOUSE = "mouse", c = n.POINTER_TOUCH = "touch", u = n.POINTER_PEN = "pen", d = n.EVENT_START = "start", f = n.EVENT_MOVE = "move", p = n.EVENT_END = "end", h = n.EVENT_RELEASE = "release", g = n.EVENT_TOUCH = "touch"; n.READY = !1, n.plugins = n.plugins || {}, n.gestures = n.gestures || {}; var m = n.utils = { extend: function (e, n, r) { for (var i in n) !n.hasOwnProperty(i) || e[i] !== t && r || (e[i] = n[i]); return e }, on: function (e, t, n) { e.addEventListener(t, n, !1) }, off: function (e, t, n) { e.removeEventListener(t, n, !1) }, each: function (e, n, r) { var i, o; if ("forEach" in e) e.forEach(n, r); else if (e.length !== t) { for (i = 0, o = e.length; o > i; i++)if (!1 === n.call(r, e[i], i, e)) return } else for (i in e) if (e.hasOwnProperty(i) && !1 === n.call(r, e[i], i, e)) return }, inStr: function (e, t) { return e.indexOf(t) > -1 }, inArray: function (e, t) { if (e.indexOf) { var n = e.indexOf(t); return -1 !== n && n } for (var r = 0, i = e.length; i > r; r++)if (e[r] === t) return r; return !1 }, toArray: function (e) { return Array.prototype.slice.call(e, 0) }, hasParent: function (e, t) { for (; e;) { if (e == t) return !0; e = e.parentNode } return !1 }, getCenter: function (e) { var t = [], n = [], r = [], i = [], o = Math.min, a = Math.max; return 1 === e.length ? { pageX: e[0].pageX, pageY: e[0].pageY, clientX: e[0].clientX, clientY: e[0].clientY } : (m.each(e, (function (e) { t.push(e.pageX), n.push(e.pageY), r.push(e.clientX), i.push(e.clientY) })), { pageX: (o.apply(Math, t) + a.apply(Math, t)) / 2, pageY: (o.apply(Math, n) + a.apply(Math, n)) / 2, clientX: (o.apply(Math, r) + a.apply(Math, r)) / 2, clientY: (o.apply(Math, i) + a.apply(Math, i)) / 2 }) }, getVelocity: function (e, t, n) { return { x: Math.abs(t / e) || 0, y: Math.abs(n / e) || 0 } }, getAngle: function (e, t) { var n = t.clientX - e.clientX, r = t.clientY - e.clientY; return 180 * Math.atan2(r, n) / Math.PI }, getDirection: function (e, t) { return Math.abs(e.clientX - t.clientX) >= Math.abs(e.clientY - t.clientY) ? e.clientX - t.clientX > 0 ? o : s : e.clientY - t.clientY > 0 ? a : i }, getDistance: function (e, t) { var n = t.clientX - e.clientX, r = t.clientY - e.clientY; return Math.sqrt(n * n + r * r) }, getScale: function (e, t) { return e.length >= 2 && t.length >= 2 ? this.getDistance(t[0], t[1]) / this.getDistance(e[0], e[1]) : 1 }, getRotation: function (e, t) { return e.length >= 2 && t.length >= 2 ? this.getAngle(t[1], t[0]) - this.getAngle(e[1], e[0]) : 0 }, isVertical: function (e) { return e == a || e == i }, setPrefixedCss: function (e, t, n, r) { var i = ["", "Webkit", "Moz", "O", "ms"]; t = m.toCamelCase(t); for (var o = 0; o < i.length; o++) { var a = t; if (i[o] && (a = i[o] + a.slice(0, 1).toUpperCase() + a.slice(1)), a in e.style) { e.style[a] = (null == r || r) && n || ""; break } } }, toggleBehavior: function (e, t, n) { if (t && e && e.style) { m.each(t, (function (t, r) { m.setPrefixedCss(e, r, t, n) })); var r = n && function () { return !1 }; "none" == t.userSelect && (e.onselectstart = r), "none" == t.userDrag && (e.ondragstart = r) } }, toCamelCase: function (e) { return e.replace(/[_-]([a-z])/g, (function (e) { return e[1].toUpperCase() })) } }, y = n.event = { preventMouseEvents: !1, started: !1, shouldDetect: !1, on: function (e, t, n, r) { var i = t.split(" "); m.each(i, (function (t) { m.on(e, t, n), r && r(t) })) }, off: function (e, t, n, r) { var i = t.split(" "); m.each(i, (function (t) { m.off(e, t, n), r && r(t) })) }, onTouch: function (e, t, i) { var o = this, a = function (r) { var a, s = r.type.toLowerCase(), l = n.HAS_POINTEREVENTS, u = m.inStr(s, "mouse"); u && o.preventMouseEvents || (u && t == d && 0 === r.button ? (o.preventMouseEvents = !1, o.shouldDetect = !0) : l && t == d ? o.shouldDetect = 1 === r.buttons || v.matchType(c, r) : u || t != d || (o.preventMouseEvents = !0, o.shouldDetect = !0), l && t != p && v.updatePointer(t, r), o.shouldDetect && (a = o.doDetect.call(o, r, t, e, i)), a == p && (o.preventMouseEvents = !1, o.shouldDetect = !1, v.reset()), l && t == p && v.updatePointer(t, r)) }; return this.on(e, r[t], a), a }, doDetect: function (e, t, n, r) { var i = this.getTouchList(e, t), o = i.length, a = t, s = i.trigger, l = o; t == d ? s = g : t == p && (s = h, l = i.length - (e.changedTouches ? e.changedTouches.length : 1)), l > 0 && this.started && (a = f), this.started = !0; var c = this.collectEventData(n, a, i, e); return t != p && r.call(w, c), s && (c.changedLength = l, c.eventType = s, r.call(w, c), c.eventType = a, delete c.changedLength), a == p && (r.call(w, c), this.started = !1), a }, determineEventTypes: function () { var t; return t = n.HAS_POINTEREVENTS ? e.PointerEvent ? ["pointerdown", "pointermove", "pointerup pointercancel lostpointercapture"] : ["MSPointerDown", "MSPointerMove", "MSPointerUp MSPointerCancel MSLostPointerCapture"] : n.NO_MOUSEEVENTS ? ["touchstart", "touchmove", "touchend touchcancel"] : ["touchstart mousedown", "touchmove mousemove", "touchend touchcancel mouseup"], r[d] = t[0], r[f] = t[1], r[p] = t[2], r }, getTouchList: function (e, t) { if (n.HAS_POINTEREVENTS) return v.getTouchList(); if (e.touches) { if (t == f) return e.touches; var r = [], i = [].concat(m.toArray(e.touches), m.toArray(e.changedTouches)), o = []; return m.each(i, (function (e) { !1 === m.inArray(r, e.identifier) && o.push(e), r.push(e.identifier) })), o } return e.identifier = 1, [e] }, collectEventData: function (e, t, n, r) { var i = c; return m.inStr(r.type, "mouse") || v.matchType(l, r) ? i = l : v.matchType(u, r) && (i = u), { center: m.getCenter(n), timeStamp: Date.now(), target: r.target, touches: n, eventType: t, pointerType: i, srcEvent: r, preventDefault: function () { var e = this.srcEvent; e.preventManipulation && e.preventManipulation(), e.preventDefault && e.preventDefault() }, stopPropagation: function () { this.srcEvent.stopPropagation() }, stopDetect: function () { return w.stopDetect() } } } }, v = n.PointerEvent = { pointers: {}, getTouchList: function () { var e = []; return m.each(this.pointers, (function (t) { e.push(t) })), e }, updatePointer: function (e, t) { e == p ? delete this.pointers[t.pointerId] : (t.identifier = t.pointerId, this.pointers[t.pointerId] = t) }, matchType: function (e, t) { if (!t.pointerType) return !1; var n = t.pointerType, r = {}; return r[l] = n === (t.MSPOINTER_TYPE_MOUSE || l), r[c] = n === (t.MSPOINTER_TYPE_TOUCH || c), r[u] = n === (t.MSPOINTER_TYPE_PEN || u), r[e] }, reset: function () { this.pointers = {} } }, w = n.detection = { gestures: [], current: null, previous: null, stopped: !1, startDetect: function (e, t) { this.current || (this.stopped = !1, this.current = { inst: e, startEvent: m.extend({}, t), lastEvent: !1, lastCalcEvent: !1, futureCalcEvent: !1, lastCalcData: {}, name: "" }, this.detect(t)) }, detect: function (e) { if (this.current && !this.stopped) { e = this.extendEventData(e); var t = this.current.inst, n = t.options; return m.each(this.gestures, (function (r) { !this.stopped && t.enabled && n[r.name] && r.handler.call(r, e, t) }), this), this.current && (this.current.lastEvent = e), e.eventType == p && this.stopDetect(), e } }, stopDetect: function () { this.previous = m.extend({}, this.current), this.current = null, this.stopped = !0 }, getCalculatedData: function (e, t, r, i, o) { var a = this.current, s = !1, l = a.lastCalcEvent, c = a.lastCalcData; l && e.timeStamp - l.timeStamp > n.CALCULATE_INTERVAL && (t = l.center, r = e.timeStamp - l.timeStamp, i = e.center.clientX - l.center.clientX, o = e.center.clientY - l.center.clientY, s = !0), (e.eventType == g || e.eventType == h) && (a.futureCalcEvent = e), (!a.lastCalcEvent || s) && (c.velocity = m.getVelocity(r, i, o), c.angle = m.getAngle(t, e.center), c.direction = m.getDirection(t, e.center), a.lastCalcEvent = a.futureCalcEvent || e, a.futureCalcEvent = e), e.velocityX = c.velocity.x, e.velocityY = c.velocity.y, e.interimAngle = c.angle, e.interimDirection = c.direction }, extendEventData: function (e) { var t = this.current, n = t.startEvent, r = t.lastEvent || n; (e.eventType == g || e.eventType == h) && (n.touches = [], m.each(e.touches, (function (e) { n.touches.push({ clientX: e.clientX, clientY: e.clientY }) }))); var i = e.timeStamp - n.timeStamp, o = e.center.clientX - n.center.clientX, a = e.center.clientY - n.center.clientY; return this.getCalculatedData(e, r.center, i, o, a), m.extend(e, { startEvent: n, deltaTime: i, deltaX: o, deltaY: a, distance: m.getDistance(n.center, e.center), angle: m.getAngle(n.center, e.center), direction: m.getDirection(n.center, e.center), scale: m.getScale(n.touches, e.touches), rotation: m.getRotation(n.touches, e.touches) }), e }, register: function (e) { var r = e.defaults || {}; return r[e.name] === t && (r[e.name] = !0), m.extend(n.defaults, r, !0), e.index = e.index || 1e3, this.gestures.push(e), this.gestures.sort((function (e, t) { return e.index < t.index ? -1 : e.index > t.index ? 1 : 0 })), this.gestures } }; n.Instance = function (e, t) { var r = this; n.READY || (y.determineEventTypes(), m.each(n.gestures, (function (e) { w.register(e) })), y.onTouch(n.DOCUMENT, f, w.detect), y.onTouch(n.DOCUMENT, p, w.detect), n.READY = !0), this.element = e, this.enabled = !0, m.each(t, (function (e, n) { delete t[n], t[m.toCamelCase(n)] = e })), this.options = m.extend(m.extend({}, n.defaults), t || {}), this.options.behavior && m.toggleBehavior(this.element, this.options.behavior, !0), this.eventStartHandler = y.onTouch(e, d, (function (e) { r.enabled && e.eventType == d ? w.startDetect(r, e) : e.eventType == g && w.detect(e) })), this.eventHandlers = [] }, n.Instance.prototype = { on: function (e, t) { var n = this; return y.on(n.element, e, t, (function (e) { n.eventHandlers.push({ gesture: e, handler: t }) })), n }, off: function (e, t) { var n = this; return y.off(n.element, e, t, (function (e) { var r = m.inArray({ gesture: e, handler: t }); !1 !== r && n.eventHandlers.splice(r, 1) })), n }, trigger: function (e, t) { t || (t = {}); var r = n.DOCUMENT.createEvent("Event"); r.initEvent(e, !0, !0), r.gesture = t; var i = this.element; return m.hasParent(t.target, i) && (i = t.target), i.dispatchEvent(r), this }, enable: function (e) { return this.enabled = e, this }, dispose: function () { var e, t; for (m.toggleBehavior(this.element, this.options.behavior, !1), e = -1; t = this.eventHandlers[++e];)m.off(this.element, t.gesture, t.handler); return this.eventHandlers = [], y.off(this.element, r[d], this.eventStartHandler), null } }, function (e) { var t = !1; n.gestures.Drag = { name: e, index: 50, handler: function (n, r) { var l = w.current; if (!(r.options.dragMaxTouches > 0 && n.touches.length > r.options.dragMaxTouches)) switch (n.eventType) { case d: t = !1; break; case f: if (n.distance < r.options.dragMinDistance && l.name != e) return; var c = l.startEvent.center; if (l.name != e && (l.name = e, r.options.dragDistanceCorrection && n.distance > 0)) { var u = Math.abs(r.options.dragMinDistance / n.distance); c.pageX += n.deltaX * u, c.pageY += n.deltaY * u, c.clientX += n.deltaX * u, c.clientY += n.deltaY * u, n = w.extendEventData(n) } (l.lastEvent.dragLockToAxis || r.options.dragLockToAxis && r.options.dragLockMinDistance <= n.distance) && (n.dragLockToAxis = !0); var g = l.lastEvent.direction; n.dragLockToAxis && g !== n.direction && (n.direction = m.isVertical(g) ? n.deltaY < 0 ? a : i : n.deltaX < 0 ? o : s), t || (r.trigger(e + "start", n), t = !0), r.trigger(e, n), r.trigger(e + n.direction, n); var y = m.isVertical(n.direction); (r.options.dragBlockVertical && y || r.options.dragBlockHorizontal && !y) && n.preventDefault(); break; case h: t && n.changedLength <= r.options.dragMaxTouches && (r.trigger(e + "end", n), t = !1); break; case p: t = !1 } }, defaults: { dragMinDistance: 10, dragDistanceCorrection: !0, dragMaxTouches: 1, dragBlockHorizontal: !1, dragBlockVertical: !1, dragLockToAxis: !1, dragLockMinDistance: 25 } } }("drag"), n.gestures.Gesture = { name: "gesture", index: 1337, handler: function (e, t) { t.trigger(this.name, e) } }, function (e) { var t; n.gestures.Hold = { name: e, index: 10, defaults: { holdTimeout: 500, holdThreshold: 2 }, handler: function (n, r) { var i = r.options, o = w.current; switch (n.eventType) { case d: clearTimeout(t), o.name = e, t = setTimeout((function () { o && o.name == e && r.trigger(e, n) }), i.holdTimeout); break; case f: n.distance > i.holdThreshold && clearTimeout(t); break; case h: clearTimeout(t) } } } }("hold"), n.gestures.Release = { name: "release", index: 1 / 0, handler: function (e, t) { e.eventType == h && t.trigger(this.name, e) } }, n.gestures.Swipe = { name: "swipe", index: 40, defaults: { swipeMinTouches: 1, swipeMaxTouches: 1, swipeVelocityX: .6, swipeVelocityY: .6 }, handler: function (e, t) { if (e.eventType == h) { var n = e.touches.length, r = t.options; if (n < r.swipeMinTouches || n > r.swipeMaxTouches) return; (e.velocityX > r.swipeVelocityX || e.velocityY > r.swipeVelocityY) && (t.trigger(this.name, e), t.trigger(this.name + e.direction, e)) } } }, function (e) { var t = !1; n.gestures.Tap = { name: e, index: 100, handler: function (n, r) { var i, o, a = r.options, s = w.current, l = w.previous; switch (n.eventType) { case d: t = !1; break; case f: t = t || n.distance > a.tapMaxDistance; break; case p: !m.inStr(n.srcEvent.type, "cancel") && n.deltaTime < a.tapMaxTime && !t && (i = l && l.lastEvent && n.timeStamp - l.lastEvent.timeStamp, o = !1, l && l.name == e && i && i < a.doubleTapInterval && n.distance < a.doubleTapDistance && (r.trigger("doubletap", n), o = !0), (!o || a.tapAlways) && (s.name = e, r.trigger(s.name, n))) } }, defaults: { tapMaxTime: 250, tapMaxDistance: 10, tapAlways: !0, doubleTapDistance: 20, doubleTapInterval: 300 } } }("tap"), n.gestures.Touch = { name: "touch", index: -1 / 0, defaults: { preventDefault: !1, preventMouse: !1 }, handler: function (e, t) { return t.options.preventMouse && e.pointerType == l ? void e.stopDetect() : (t.options.preventDefault && e.preventDefault(), void (e.eventType == g && t.trigger("touch", e))) } }, function (e) { var t = !1; n.gestures.Transform = { name: e, index: 45, defaults: { transformMinScale: .01, transformMinRotation: 1 }, handler: function (n, r) { switch (n.eventType) { case d: t = !1; break; case f: if (n.touches.length < 2) return; var i = Math.abs(1 - n.scale), o = Math.abs(n.rotation); if (i < r.options.transformMinScale && o < r.options.transformMinRotation) return; w.current.name = e, t || (r.trigger(e + "start", n), t = !0), r.trigger(e, n), o > r.options.transformMinRotation && r.trigger("rotate", n), i > r.options.transformMinScale && (r.trigger("pinch", n), r.trigger("pinch" + (n.scale < 1 ? "in" : "out"), n)); break; case h: t && n.changedLength < 2 && (r.trigger(e + "end", n), t = !1) } } } }("transform"), "function" == typeof define && define.amd ? define((function () { return n })) : "undefined" != typeof module && module.exports ? module.exports = n : e.Hammer = n }(window), "function" == typeof Hammer && void 0 !== Hammer && Hammer && "1.1.3" == Hammer.VERSION ? TLT.addModule("gestures", (function (e) { const t = { "input:radio": "radioButton", "input:checkbox": "checkBox", "input:text": "textBox", "input:password": "textBox", "input:file": "fileInput", "input:button": "button", "input:submit": "submitButton", "input:reset": "resetButton", "input:image": "image", "input:color": "color", "input:date": "date", "input:datetime": "datetime", "input:datetime-local": "datetime-local", "input:number": "number", "input:email": "email", "input:tel": "tel", "input:search": "search", "input:url": "url", "input:time": "time", "input:week": "week", "input:month": "month", "textarea:": "textBox", "select:": "selectList", "select:select-one": "selectList", "button:": "button", "a:": "link" }, n = e.utils; let r, i = [], o = 0, a = !0, s = function () { }; const l = { swipeAfterPinchInterval: 300, doubleTapInterval: 300, preventMouse: !0, dragMinDistance: 10 }; let c, u, d, f = [], p = []; function h(t) { e.post(t) } function g(e) { let t = e.gesture.srcEvent.target, n = 0, r = 0; for (; t && "BODY" !== t.tagName;)n += t.offsetTop, r += t.offsetLeft, t = t.offsetParent; return { topLeftX: r, topLeftY: n } } function m(e, t) { "radioButton" === t && delete e.control.position.relXY, null !== e.control.name && void 0 !== e.control.name && "" !== e.control.name || delete e.control.name, null !== e.control.subType && void 0 !== e.control.subType && "" !== e.control.subType || delete e.control.subType } function y(r) { const o = function (e) { let t; return t = "drag" === e.type ? "swipe" : "hold" === e.type ? "tapHold" : e.type, t = "string" == typeof t ? t.toLowerCase() : "unknown", t }(n.getValue(r, "webEvent")), a = n.getValue(r, "webEvent.gesture.srcEvent.target", document.body), s = n.getTagName(a) || "body", l = n.getValue(a, "type", ""), d = t[s.toLowerCase() + ":" + l.toLowerCase()] || s, f = n.getValue(r, "webEvent.target.subtype"), p = []; let h, y, v, w, b, T; for ("1" === u ? (h = r.webEvent.gesture.touches, y = "webEvent.gesture.touches.", v = "swipe" === o && !(void 0 !== c && "swipe" === c.event.tlEvent) || "pinch" === o && !(void 0 !== c && "pinch" === c.event.tlEvent), w = "swipe" === o || "pinch" === o) : (h = r.webEvent.gesture.pointers, y = "webEvent.gesture.pointers.", v = "first" === n.getValue(r, "webEvent.gesture.firstOrLastSwipeEvent") || "first" === n.getValue(r, "webEvent.gesture.firstOrLastPinchEvent"), w = "last" === n.getValue(r, "webEvent.gesture.firstOrLastSwipeEvent") || "last" === n.getValue(r, "webEvent.gesture.firstOrLastPinchEvent")), T = 0; T < h.length; T += 1)b = { x: n.getValue(r, y + T + ".pageX") - g(r.webEvent).topLeftX, y: n.getValue(r, y + T + ".pageY") - g(r.webEvent).topLeftY, width: n.getValue(r, "webEvent.gesture.srcEvent.target.offsetWidth"), height: n.getValue(r, "webEvent.gesture.srcEvent.target.offsetHeight") }, p.push([{ position: { y: Math.round(n.getValue(r, y + T + ".pageY")), x: Math.round(n.getValue(r, y + T + ".pageX")) }, control: { position: { width: Math.round(n.getValue(r, y + T + ".target.offsetWidth")), height: Math.round(n.getValue(r, y + T + ".target.offsetHeight")), relXY: n.calculateRelativeXY(b), scrollX: Math.round(document.documentElement.scrollLeft || document.body.scrollLeft), scrollY: Math.round(document.documentElement.scrollTop || document.body.scrollTop) }, id: n.getValue(r, y + T + ".target.id") || e.getXPathFromNode(n.getValue(r, y + T + ".target")), idType: n.getValue(r, "webEvent.gesture.idType"), name: n.getValue(r, y + T + ".target.name"), tlType: d, type: s, subType: l } }]), m(p[T][0], d); if (v) for (T = 0; T < h.length; T += 1)i.push(p[T][0]); if (w) for (T = 0; T < h.length; T += 1)p[T].unshift(i[T]); const S = { type: 11, event: { tlEvent: o, type: o }, touches: p }; return "swipe" === o && (S.velocityX = r.webEvent.gesture.velocityX, S.velocityY = r.webEvent.gesture.velocityY), "swipe" === o && (S.direction = r.webEvent.gesture.direction, 2 === S.direction && (S.direction = "left"), 4 === S.direction && (S.direction = "right"), 8 === S.direction && (S.direction = "up"), 16 === S.direction && (S.direction = "down")), "pinch" === o && (r.webEvent.gesture.scale > 1 ? S.direction = "open" : r.webEvent.gesture.scale < 1 && (S.direction = "close")), null != f && (S.event.subType = f), S } function v(e, t) { "1" === u ? "doubletap" === t.type || "hold" === t.type || "tap" === t.type ? h(y({ webEvent: t, id: e, currState: n.getValue(t, "target.state") })) : "release" !== t.type || void 0 === c || "swipe" !== c.event.tlEvent && "pinch" !== c.event.tlEvent ? "drag" !== t.type && "pinch" !== t.type || (c = y({ webEvent: t, id: e, currState: n.getValue(t, "target.state") })) : (h(c), c = void 0, i = []) : "doubletap" === t.type || "tapHold" === t.type || "tap" === t.type ? h(y({ webEvent: t, id: e, currState: n.getValue(t, "target.state") })) : "last" === t.gesture.firstOrLastSwipeEvent || "last" === t.gesture.firstOrLastPinchEvent ? (h(y({ webEvent: t, id: e, currState: n.getValue(t, "target.state") })), i = []) : "first" !== t.gesture.firstOrLastSwipeEvent && "first" !== t.gesture.firstOrLastPinchEvent || y({ webEvent: t, id: e, currState: n.getValue(t, "target.state") }) } function w(e, t) { const n = l.doubleTapInterval; o += 1, 1 === o ? (s = function (e, t) { const n = e, r = t; return function () { v(n, r), o = 0 } }(e, t), r = setTimeout((function () { s(), s = function () { } }), n)) : (clearTimeout(r), t.type = "doubletap", v(e, t), s = function () { }, o = 0) } function b(e, t) { const n = l.swipeAfterPinchInterval; !a || "swipe" !== t.type && "drag" !== t.type || v(e, t), "pinch" === t.type && (v(e, t), a = !1, r = setTimeout((function () { a = !0 }), n)) } function T(e) { let t; return document.createEvent ? (t = document.createEvent("HTMLEvents"), t.initEvent(e.type, !0, !0), t.gesture = e) : (t = document.createEventObject(), t.eventType = e.type, t.gesture = e), t } function S(e, t) { void 0 !== t && (document.createEvent ? t.dispatchEvent(e) : t.fireEvent("on" + e.eventType, e)) } function _(e) { const t = e.type, n = e.target; "tap" === t ? (S(T(e), n), d = void 0) : "press" === t ? (e.type = "tapHold", S(T(e), n), d = void 0) : "panstart" === t ? (e.type = "swipe", e.firstOrLastSwipeEvent = "first", S(T(e), n), d = n) : "panend" === t ? (e.type = "swipe", e.firstOrLastSwipeEvent = "last", S(T(e), d), d = void 0) : "pinchstart" === t ? (e.type = "pinch", e.firstOrLastPinchEvent = "first", S(T(e), n), d = n) : "pinchend" === t && (e.type = "pinch", e.firstOrLastPinchEvent = "last", S(T(e), d), d = void 0) } return { init: function () { let t, r, i, o, a, s, c, h, g = [], m = "", y = 0; const v = TLT.getCoreConfig().modules.gestures.events; if ("function" == typeof Hammer) { for (u = Hammer.VERSION.split(".")[0], "1" === u && (Hammer.defaults.behavior.userSelect = "auto", Hammer.defaults.behavior.userDrag = "auto", Hammer.defaults.behavior.contentZooming = "auto", Hammer.defaults.behavior.touchCallout = "default", Hammer.defaults.behavior.touchAction = "auto"), e.getConfig() && e.getConfig().options && n.extend(!0, l, e.getConfig().options), t = 0; t < v.length; t += 1)if (h = v[t].name, "tap" === h && (m += "tap "), "swipe" === h && (m += "panstart panend "), "tapHold" === h && (m += "press "), "pinch" === h && (m += "pinchstart pinchend"), o = v[t].target, o === window || "window" === o) "1" === u && f.push(new Hammer(window, l)); else if (null != a) for (a = o.split(", "), r = 0; r < a.length; r += 1)for (g = TLT.getService("browser").queryAll(a[r], document), i = 0; i < g.length; i += 1)s = n.indexOf(p, g[i]), -1 === s && (p.push(g[i]), y += 1); if ("1" === u) for (t = 0; t < p.length; t += 1)f.push(new Hammer(p[t], l)); else if (0 !== p.length) for (t = 0; t < p.length; t += 1)c = new Hammer.Manager(p[t]), c.add(new Hammer.Tap({ event: "tap" })), c.add(new Hammer.Pan({ direction: Hammer.DIRECTION_ALL })), c.add(new Hammer.Press), c.add(new Hammer.Pinch({ enable: !0 })), c.on(m, (function (e) { (("panend" === e.type || "pinchend" === e.type) && p.indexOf(d) > -1 || p.indexOf(e.target) > -1) && _(e) })), f.push(c); else void 0 === window.style && (window.style = []), c = new Hammer.Manager(window), c.add(new Hammer.Tap({ event: "tap" })), c.add(new Hammer.Pan({ direction: Hammer.DIRECTION_ALL })), c.add(new Hammer.Press), c.add(new Hammer.Pinch({ enable: !0 })), c.on(m, (function (e) { _(e) })), f.push(c) } }, destroy: function () { let e; if (null != f) for (e = 0; e < f.length; e += 1)f[e].off("tap press pinchstart pinchend panstart panend"), f[e].enabled = !1; f = [], p = [] }, onevent: function (e) { if ("object" != typeof e || !e.type || !e.gesture && "unload" !== e.type || !e.target) return; if ("unload" !== e.type && "mouse" === e.gesture.pointerType && l.preventMouse) return; const t = n.getValue(e, "target.id"); switch (e.type) { case "tap": w(t, e); break; case "swipe": case "pinch": case "drag": b(t, e); break; case "tapHold": case "hold": case "release": v(t, e); break; case "unload": clearTimeout(r), s() } } } })) : console && console.info("Could not load TL.Gestures."), window.TLT.utils.isiOS && o && function () { if ("undefined" != typeof document && !("adoptedStyleSheets" in document)) { var e = "ShadyCSS" in window && !ShadyCSS.nativeShadow, t = document.implementation.createHTMLDocument(""), n = new WeakMap, r = "object" == typeof DOMException ? Error : DOMException, i = Object.defineProperty, o = Array.prototype.forEach, a = /@import.+?;?$/gm, s = CSSStyleSheet.prototype; s.replace = function () { return Promise.reject(new r("Can't call replace on non-constructed CSSStyleSheets.")) }, s.replaceSync = function () { throw new r("Failed to execute 'replaceSync' on 'CSSStyleSheet': Can't call replaceSync on non-constructed CSSStyleSheets.") }; var l = new WeakMap, c = new WeakMap, u = new WeakMap, d = new WeakMap, f = O.prototype; f.replace = function (e) { try { return this.replaceSync(e), Promise.resolve(this) } catch (e) { return Promise.reject(e) } }, f.replaceSync = function (e) { if (C(this), "string" == typeof e) { var t = this; l.get(t).textContent = function (e) { var t = e.replace(a, ""); return t !== e && console.warn("@import rules are not allowed here. See https://github.com/WICG/construct-stylesheets/issues/119#issuecomment-588352418"), t.trim() }(e), d.set(t, []), c.get(t).forEach((function (e) { e.isConnected() && E(t, x(t, e)) })) } }, i(f, "cssRules", { configurable: !0, enumerable: !0, get: function () { return C(this), l.get(this).sheet.cssRules } }), i(f, "media", { configurable: !0, enumerable: !0, get: function () { return C(this), l.get(this).sheet.media } }), ["addRule", "deleteRule", "insertRule", "removeRule"].forEach((function (e) { f[e] = function () { var t = this; C(t); var n = arguments; d.get(t).push({ method: e, args: n }), c.get(t).forEach((function (r) { if (r.isConnected()) { var i = x(t, r).sheet; i[e].apply(i, n) } })); var r = l.get(t).sheet; return r[e].apply(r, n) } })), i(O, Symbol.hasInstance, { configurable: !0, value: S }); var p = { childList: !0, subtree: !0 }, h = new WeakMap, g = new WeakMap, m = new WeakMap, y = new WeakMap; if (P.prototype = { isConnected: function () { var e = g.get(this); return e instanceof Document ? "loading" !== e.readyState : function (e) { return "isConnected" in e ? e.isConnected : document.contains(e) }(e.host) }, connect: function () { var e = M(this); y.get(this).observe(e, p), m.get(this).length > 0 && I(this), D(e, (function (e) { k(e).connect() })) }, disconnect: function () { y.get(this).disconnect() }, update: function (e) { var t = this, n = g.get(t) === document ? "Document" : "ShadowRoot"; if (!Array.isArray(e)) throw new TypeError("Failed to set the 'adoptedStyleSheets' property on " + n + ": Iterator getter is not callable."); if (!e.every(S)) throw new TypeError("Failed to set the 'adoptedStyleSheets' property on " + n + ": Failed to convert value to 'CSSStyleSheet'"); if (e.some(_)) throw new TypeError("Failed to set the 'adoptedStyleSheets' property on " + n + ": Can't adopt non-constructed stylesheets"); t.sheets = e; var r, i, o = m.get(t), a = (r = e).filter((function (e, t) { return r.indexOf(e) === t })); (i = a, o.filter((function (e) { return -1 === i.indexOf(e) }))).forEach((function (e) { var n; (n = x(e, t)).parentNode.removeChild(n), function (e, t) { u.get(e).delete(t), c.set(e, c.get(e).filter((function (e) { return e !== t }))) }(e, t) })), m.set(t, a), t.isConnected() && a.length > 0 && I(t) } }, window.CSSStyleSheet = O, L(Document), "ShadowRoot" in window) { L(ShadowRoot); var v = Element.prototype, w = v.attachShadow; v.attachShadow = function (e) { var t = w.call(this, e); return "closed" === e.mode && n.set(this, t), t } } var b = k(document); b.isConnected() ? b.connect() : document.addEventListener("DOMContentLoaded", b.connect.bind(b)) } function T(e) { return e.shadowRoot || n.get(e) } function S(e) { return "object" == typeof e && (f.isPrototypeOf(e) || s.isPrototypeOf(e)) } function _(e) { return "object" == typeof e && s.isPrototypeOf(e) } function x(e, t) { return u.get(e).get(t) } function E(e, t) { requestAnimationFrame((function () { t.textContent = l.get(e).textContent, d.get(e).forEach((function (e) { return t.sheet[e.method].apply(t.sheet, e.args) })) })) } function C(e) { if (!l.has(e)) throw new TypeError("Illegal invocation") } function O() { var e = document.createElement("style"); t.body.appendChild(e), l.set(this, e), c.set(this, []), u.set(this, new WeakMap), d.set(this, []) } function k(e) { var t = h.get(e); return t || (t = new P(e), h.set(e, t)), t } function L(e) { i(e.prototype, "adoptedStyleSheets", { configurable: !0, enumerable: !0, get: function () { return k(this).sheets }, set: function (e) { k(this).update(e) } }) } function D(e, t) { for (var n = document.createNodeIterator(e, NodeFilter.SHOW_ELEMENT, (function (e) { return T(e) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT }), null, !1), r = void 0; r = n.nextNode();)t(T(r)) } function M(e) { var t = g.get(e); return t instanceof Document ? t.body : t } function I(e) { var t = document.createDocumentFragment(), n = m.get(e), r = y.get(e), i = M(e); r.disconnect(), n.forEach((function (n) { t.appendChild(x(n, e) || function (e, t) { var n = document.createElement("style"); return u.get(e).set(t, n), c.get(e).push(t), n }(n, e)) })), i.insertBefore(t, null), r.observe(i, p), n.forEach((function (t) { E(t, x(t, e)) })) } function P(t) { var n = this; n.sheets = [], g.set(n, t), m.set(n, []), y.set(n, new MutationObserver((function (t, r) { document ? t.forEach((function (t) { e || o.call(t.addedNodes, (function (e) { e instanceof Element && D(e, (function (e) { k(e).connect() })) })), o.call(t.removedNodes, (function (t) { t instanceof Element && (function (e, t) { return t instanceof HTMLStyleElement && m.get(e).some((function (t) { return x(t, e) })) }(n, t) && I(n), e || D(t, (function (e) { k(e).disconnect() }))) })) })) : r.disconnect() }))) } }(), !0 === a && TLT.addModule("ajaxListener", (function (e) { var t, n, r, i, o = {}, a = !1, s = e.utils; function l(e) { var t, n, r = !1, i = o.urlBlocklist; if (!e || !i) return r; for (t = 0, n = i.length; !r && t < n; t += 1)r = i[t].cRegex.test(e); return r } function c(e, t, n) { var r, i, a, s = {}, l = o.filters; if (!l || !l.length) return s; for (r = 0, i = l.length, a = !1; !a && r < i; r += 1)a = !0, (s = l[r]).url && (a = s.url.cRegex.test(e)), a && s.method && (a = s.method.cRegex.test(t)), a && s.status && (a = s.status.cRegex.test(n)); return a || (s = null), s } function u(t, n) { var r, i, o = { type: 5, customEvent: { name: "ajaxListener", data: { interfaceType: "XHR" } } }, a = o.customEvent.data; if (t) { if ((r = document.createElement("a")).href = t.tListener.url, a.originalURL = r.host + ("/" === r.pathname[0] ? "" : "/") + r.pathname, a.requestURL = e.normalizeUrl ? e.normalizeUrl(a.originalURL, 3) : a.originalURL, a.description = "Full Ajax Monitor " + a.requestURL, a.method = t.tListener.method, a.status = t.status, a.statusText = t.statusText || "", a.async = t.tListener.async, a.ajaxResponseTime = t.tListener.end - t.tListener.start, a.locationHref = e.normalizeUrl(document.location.href, 3), a.queryParams = p(t.tListener.url), n.requestHeaders && (a.requestHeaders = t.tListener.reqHeaders), n.requestData && "string" == typeof t.tListener.reqData && !t.tListener.isSystemXHR) try { a.request = JSON.parse(t.tListener.reqData) } catch (e) { a.request = t.tListener.reqData } if (n.responseHeaders && (a.responseHeaders = function (e) { var t, n, r, i, o, a = {}; for (t = 0, n = (e = e.split(/[\r\n]+/)).length; t < n; t += 1)i = (r = e[t].split(": "))[0], o = s.rtrim(r[1]), i && i.length && (a[i] = o); return a }(t.getAllResponseHeaders())), n.responseData) { if (void 0 === t.responseType ? i = t.responseText : "" === t.responseType || "text" === t.responseType ? i = t.response : "json" === t.responseType ? a.response = t.response : a.response = typeof t.response, i) try { a.response = JSON.parse(i) } catch (e) { a.response = i } t.responseType && (a.responseType = t.responseType) } e.post(o) } } function d(e) { for (var t, n = {}, r = e.entries(), i = r.next(); !i.done;)n[(t = i.value)[0]] = t[1], i = r.next(); return n } function f(e) { return d(e) } function p(e) { var t = e.indexOf("?"); if (t < 0) return {}; var n = e.substring(t + 1), r = {}, i = new URLSearchParams(n).entries(); for (var o in i) r[i[o][0]] = i[o][1]; return r } function h(t, n, r) { var i, o, a = { type: 5, customEvent: { name: "ajaxListener", data: { interfaceType: "fetch" } } }, s = a.customEvent.data; if ((i = document.createElement("a")).href = t.url, s.originalURL = i.host + ("/" === i.pathname[0] ? "" : "/") + i.pathname, s.requestURL = e.normalizeUrl ? e.normalizeUrl(s.originalURL, 3) : s.originalURL, s.description = "Full Ajax Monitor " + s.requestURL, s.method = t.initData.method, s.status = n.status, s.statusText = n.statusText || "", s.async = !0, s.ajaxResponseTime = t.end - t.start, s.responseType = n.type, s.locationHref = e.normalizeUrl(document.location.href, 3), s.queryParams = p(t.url), r.requestHeaders && (t.initData.headers && -1 !== t.initData.headers.toString().indexOf("Headers") ? s.requestHeaders = f(t.initData.headers) : s.requestHeaders = t.initData.headers || ""), r.requestData && void 0 !== t.body && !t.isSystemXHR && (s.request = function (e) { var t = e; if (!e) return t; if ("object" == typeof e && -1 !== e.toString().indexOf("FormData")) t = d(e); else if ("string" == typeof e) try { t = JSON.parse(e) } catch (n) { t = e } return t }(t.body)), r.responseHeaders && (s.responseHeaders = f(n.headers)), r.responseData) { if ((o = n.headers.get("content-type")) && -1 !== o.indexOf("application/json")) return void n.clone().json().then((function (t) { s.response = t, e.post(a) })); if (o && (-1 !== o.indexOf("text") || -1 !== o.indexOf("xml"))) return void n.clone().text().then((function (t) { s.response = t, e.post(a) })); s.response = "Not logging unsupported response content: " + o } e.post(a) } function g(e) { var t; e && e.target && 4 === (t = e.target).readyState && (t.removeEventListener("readystatechange", g), t.tListener.end = Date.now(), function (e) { var t, n = { requestHeaders: !1, requestData: !1, responseHeaders: !1, responseData: !1 }; (t = c(e.tListener.url, e.tListener.method, e.status.toString())) && (t.log && (n = t.log), u(e, n)) }(t)) } function m(e) { var t, n; for (n = TLT.getServiceConfig("queue").queues || [], t = 0; t < n.length; t += 1)if (n[t].endpoint && -1 !== e.indexOf(n[t].endpoint)) return !0; return !1 } function y(e, n, r) { var i = this; return a && !l(n) && (i.addEventListener("readystatechange", g), i.tListener = { method: e, url: n, async: void 0 === r || !!r, reqHeaders: {}, isSystemXHR: m(n) }, function (e) { var t = e.setRequestHeader; e.setRequestHeader = function (e, n) { var r = this.tListener; return e && e.length && (r.reqHeaders[e] = n), t.apply(this, arguments) } }(i), function (e) { var t = e.send; e.send = function (e) { var n = this.tListener; return e && (n.reqData = e), n.start = Date.now(), t.apply(this, arguments) } }(i)), t.apply(i, arguments) } function v() { n = window.fetch, window.fetch = function (e, t) { var r = {}; return e instanceof Request ? (r.initData = e, r.url = e.url, r.initData.clone().text().then((function (e) { e.length > 0 && (r.body = e) }))) : (r.initData = t || {}, r.url = e.toString(), t && t.body && (r.body = t.body)), r.isSystemXHR = m(r.url), r.start = Date.now(), n.apply(this, arguments).then((function (e) { return r.end = Date.now(), function (e, t) { var n, r = e.url, i = e.initData.method, o = t.status.toString(), a = { requestHeaders: !1, requestData: !1, responseHeaders: !1, responseData: !1 }; l(r) || (n = c(r, i, o)) && (n.log && (a = n.log), h(e, t, a)) }(r, e), e })) } } function w(e) { e && e.regex && (e.cRegex = new RegExp(e.regex, e.flags)) } return { init: function () { !function (e) { var t, n, o, a = [], l = s.getValue(e, "skipSafetyCheck", !1); for (e && e.filters && (a = e.filters), t = 0, n = a.length; t < n; t += 1)o = a[t], s.forEach([o.url, o.method, o.status], w); e && e.urlBlocklist && s.forEach(e.urlBlocklist, w), !(r = s.getValue(e, "xhrEnabled", !0) && window.XMLHttpRequest) || l || -1 !== XMLHttpRequest.toString().indexOf("[native code]") && -1 !== XMLHttpRequest.toString().indexOf("XMLHttpRequest") || (r = !1), (i = s.getValue(e, "fetchEnabled", !0) && window.fetch) && !l && -1 === window.fetch.toString().indexOf("[native code]") && (i = !1) }(o = e.getConfig()) }, destroy: function () { a = !1 }, onevent: function (e) { switch (e.type) { case "load": r && XMLHttpRequest && (t = XMLHttpRequest.prototype.open, XMLHttpRequest.prototype.open = y), i && v(), a = !0; break; case "unload": a = !1 } }, version: "1.3.0" } })), f = n ? n && 0 === Object.keys(n).length && Object.getPrototypeOf(n) === Object.prototype ? window.TLT.getDefaultConfig() : n : window.TLT.getDefaultConfig(), void 0 !== f && void 0 !== f.services && void 0 !== f.services.queue && void 0 !== f.services.queue.queues[0] ? (f.services.queue.queues[0].endpoint = t, void 0 === f.services.queue.queues[0].killswitchURL && void 0 !== l && (f.services.queue.queues[0].killswitchURL = l)) : console && console.warn("Not able to update defaultConfig.services.queue.queues[0].endpoint"), void 0 !== f && void 0 !== f.modules && void 0 !== f.modules.TLCookie ? f.modules.TLCookie.tlAppKey = e : console && console.warn("Not able to update defaultConfig.modules.TLCookie.tlAppKey"), window.TLT.utils.isLegacyIE ? (console && (console.warn("This version of the UIC does not support Internet Explorer 10 or below."), console.info("Applications requiring Internet Explorer 8 (or below) support should use UIC 5.2.0")), void (window.TLT.terminationReason = "Unsupported browser")) : (window.TLT.init(f, (function (e) { console && (console.info("TLT.initLib has " + e + " with the following settings below:"), console.info("Original configuration:"), console.info(f), console.info("Updated after init:"), window.TLT ? console.info(window.TLT.getConfig()) : console.info("window.TLT.getConfig() is undefined")) })), !0 === s && function () { const e = window.TLT.destroy; let t; function n() { "visible" === document.visibilityState && document.hasFocus() && (t && window.TLT && !TLT.isInitialized() && (console.log("Restarting TLT"), TLT.init(t), t = null), window.removeEventListener("visibilitychange", n), window.removeEventListener("focus", n)) } window.TLT.destroy = function (r, i) { "inactivity" === i && (t = TLT.getConfig(), window.addEventListener("visibilitychange", n), window.addEventListener("focus", n)), e.call(window.TLT, r, i) } }(), f) }, updatePageId: function () { v = "P." + d.getRandomString(28) }, init: function (e, t) { if (d = this.utils, d.isLegacyIE) return; if (R = t, !A) throw new Error("init must only be called once!"); if (!e && !this.config) throw new Error("missing configuration."); e = e || this.config, this.config = e, A = !1, v = "P." + d.getRandomString(28), w = function () { let e = null; const t = "tltTabId"; try { e = sessionStorage.getItem(t), e || (e = d.getRandomString(4), sessionStorage.setItem(t, e)) } catch (e) { } return e }(); const n = function (r) { "load" !== (r = r || window.event || {}).type && "loading" === document.readyState || (document.removeEventListener ? (document.removeEventListener("DOMContentLoaded", n, !1), window.removeEventListener("load", n, !1)) : (document.detachEvent("onreadystatechange", n), window.detachEvent("onload", n)), P(e, t)) }; "complete" === document.readyState || "interactive" === document.readyState && !d.isIE ? setTimeout(n) : document.addEventListener ? (document.addEventListener("DOMContentLoaded", n, !1), window.addEventListener("load", n, !1)) : (document.attachEvent("onreadystatechange", n), window.attachEvent("onload", n)) }, isInitialized: function () { return _ }, getState: function () { return x }, destroy: function (e, t) { let r = "", i = "", o = null, a = null, s = null, l = !1; if (A) return !1; if (this.stopAll(), !e) { for (r in D) Object.prototype.hasOwnProperty.call(D, r) && (i = r.split("|")[0], o = D[r].target, l = D[r].delegateTarget || void 0, n && n.unsubscribe(i, o, this._publishEvent, l)); u && (n.unsubscribe("mousemove", document, u), u = null) } for (a in S) Object.prototype.hasOwnProperty.call(S, a) && (s = S[a].instance, s && "function" == typeof s.destroy && s.destroy(), S[a].instance = null); E.clearCache(), D = {}, L = {}, I = [], _ = !1, A = !0, x = "destroyed", TLT.terminationReason = t || x; try { sessionStorage.setItem("tl.TR", TLT.terminationReason), sessionStorage.setItem("tl.PU", this.normalizeUrl("", location.href)) } catch (e) { } if ("function" == typeof R) try { R("destroyed") } catch (e) { } c || (window.addEventListener("pageshow", g), c = !0) }, _updateModules: function (e) { let t = null, n = null, r = !0; if (l && l.modules) try { for (n in l.modules) if (Object.prototype.hasOwnProperty.call(l.modules, n) && (t = l.modules[n], Object.prototype.hasOwnProperty.call(T, n))) { if (!1 === t.enabled) { this.stop(n); continue } this.start(n), t.events && this._registerModuleEvents(n, t.events, e) } this._registerModuleEvents.clearCache() } catch (e) { H.destroy(!1, "_updateModules: " + e.message), r = !1 } else r = !1; return r }, rebind: function (e) { H._updateModules(e) }, getSessionData: function () { if (!H.isInitialized()) return; let e, t, n, r = null, i = null; return l && l.sessionDataEnabled ? (i = l.sessionData || {}, e = i.sessionQueryName, e ? t = d.getQueryStringValue(e, i.sessionQueryDelim) : (e = i.sessionCookieName, e ? t = d.getCookieValue(e) : (n = TLT.getTLTSessionCookieInfo(), e = n.tltCookieName, t = n.tltCookieValue)), e && t && (r = r || {}, r.tltSCN = e, r.tltSCV = t, r.tltSCVNeedsHashing = !!i.sessionValueNeedsHashing), r) : null }, logGeolocation: function (e) { if (!H.isInitialized()) return; if (!e || !e.coords) return; const t = { type: 13, geolocation: { lat: d.getValue(e, "coords.latitude", 0), long: d.getValue(e, "coords.longitude", 0), accuracy: Math.ceil(d.getValue(e, "coords.accuracy", 0)) } }; o.post("", t) }, logCustomEvent: function (e, t) { if (!H.isInitialized()) return; let n = null; e && "string" == typeof e || (e = "CUSTOM"), n = { type: 5, customEvent: { name: e, data: t = t || {} } }, o.post("", n) }, logExceptionEvent: function (e, t, n) { if (!H.isInitialized()) return; let r = null; e && "string" == typeof e && (t && (t = H.normalizeUrl("", t, 6)), r = { type: 6, exception: { description: e, url: t = t || "", line: n = n || -1 } }, o.post("", r)) }, logFormCompletion: function (e, t) { if (!H.isInitialized()) return; const n = { type: 15, formCompletion: { submitted: !!e, valid: "boolean" == typeof t ? t : null } }; o.post("", n) }, logDataLayer: function (e) { let t; H.isInitialized() && s && (e && "object" != typeof e || (t = { type: "logDataLayer", data: e }, s.onevent(t))) }, logScreenviewLoad: function (e, t, n) { H.isInitialized() && m("LOAD", e, t) }, logScreenviewUnload: function (e) { H.isInitialized() && m("UNLOAD", e) }, logDOMCapture: function (e, t) { let n, r, a, s = null; return this.isInitialized() ? (d.isLegacyIE || i && (e = e || window.document, r = this.getServiceConfig("domCapture"), t = d.mixin({}, r.options, t), n = i.captureDOM(e, t), n && (s = t.dcid || "dcid-" + d.getSerialNumber() + "." + (new Date).getTime(), n.dcid = s, n.eventOn = !!t.eventOn, a = { type: 12, domCapture: n }, t.timeoutExpired && (a.domCapture.timeout = !0), o.post("", a), !1 !== t.qffd && !j && a.domCapture.fullDOM && (o.flush(), j = !0))), s) : s }, performDOMCapture: function (e, t, n) { return this.logDOMCapture(t, n) }, performFormCompletion: function (e, t, n) { return this.logFormCompletion(t, n) }, _bridgeCallback: function (e) { const t = M[e]; return t && t.enabled ? t : null }, logScreenCapture: function () { if (!H.isInitialized()) return; const e = H._bridgeCallback("screenCapture"); null !== e && e.cbFunction() }, enableTealeafFramework: function () { if (!H.isInitialized()) return; const e = H._bridgeCallback("enableTealeafFramework"); null !== e && e.cbFunction() }, disableTealeafFramework: function () { if (!H.isInitialized()) return; const e = H._bridgeCallback("disableTealeafFramework"); null !== e && e.cbFunction() }, startNewTLFSession: function () { if (!H.isInitialized()) return; const e = H._bridgeCallback("startNewTLFSession"); null !== e && e.cbFunction() }, currentSessionId: function () { if (!H.isInitialized()) return; let e; const t = H._bridgeCallback("currentSessionId"); return null !== t && (e = t.cbFunction()), e }, defaultValueForConfigurableItem: function (e) { if (!H.isInitialized()) return; let t; const n = H._bridgeCallback("defaultValueForConfigurableItem"); return null !== n && (t = n.cbFunction(e)), t }, valueForConfigurableItem: function (e) { if (!H.isInitialized()) return; let t; const n = H._bridgeCallback("valueForConfigurableItem"); return null !== n && (t = n.cbFunction(e)), t }, setConfigurableItem: function (e, t) { if (!H.isInitialized()) return; let n = !1; const r = H._bridgeCallback("setConfigurableItem"); return null !== r && (n = r.cbFunction(e, t)), n }, addAdditionalHttpHeader: function (e, t) { if (!H.isInitialized()) return; let n = !1; const r = H._bridgeCallback("addAdditionalHttpHeader"); return null !== r && (n = r.cbFunction(e, t)), n }, logCustomEventBridge: function (e, t, n) { if (!H.isInitialized()) return; let r = !1; const i = H._bridgeCallback("logCustomEventBridge"); return null !== i && (r = i.cbFunction(e, t, n)), r }, registerBridgeCallbacks: function (e) { let t, n, r, i, o, a, s, l = null; const c = TLT.utils; if (!e) return !1; if (0 === e.length) return M = {}, !1; try { for (t = 0, r = e.length; t < r; t += 1)if (l = e[t], "object" == typeof l && l.cbType && l.cbFunction) if (i = { enabled: l.enabled, cbFunction: l.cbFunction, cbOrder: l.order || 0 }, c.isUndefOrNull(M[l.cbType])) i.enabled && (M[l.cbType] = i); else { for (c.isArray(M[l.cbType]) || (M[l.cbType] = [M[l.cbType]]), o = M[l.cbType], n = 0, s = !1, a = o.length; n < a; n += 1)if (o[n].cbOrder === i.cbOrder && o[n].cbFunction === i.cbFunction) s = !0, i.enabled || (o.splice(n, 1), o.length || delete M[l.cbType]); else if (o[n].cbOrder > i.cbOrder) break; s || i.enabled && o.splice(n, 0, i) } } catch (e) { return !1 } return !0 }, registerMutationCallback: function (e, t) { let n; return !(!e || "function" != typeof e) && (t ? (n = I.indexOf(e), -1 === n && I.push(e)) : (n = I.indexOf(e), -1 !== n && I.splice(n, 1)), !0) }, invokeMutationCallbacks: function (e) { let t, n, r, i, o; const a = [], s = []; if (0 !== I.length) { for (o = Map ? new Map : new d.WeakMap, t = 0; t < e.length; t++)i = e[t].target, i && (r = d.getDocument(i), void 0 === o.get(r) && (r.host ? s.push(r) : a.push(r), o.set(r, !0))); for (o.clear(), t = 0; t < I.length; t++)n = I[t], n(e, a, s) } }, redirectQueue: function (e) { let t, n, r, i, o, s, l; if (!e || !e.length) return e; if (i = M.messageRedirect, !i) return e; for (o = d.isArray(i) ? i : [i], n = 0, s = o.length; n < s; n += 1)if (i = o[n], i && i.enabled) for (t = 0, r = e.length; t < r; t += 1)l = i.cbFunction(a.serialize(e[t]), e[t]), l && "object" == typeof l ? e[t] = l : (e.splice(t, 1), t -= 1, r = e.length); return e }, _hasSameOrigin: function (e) { let t = !1; try { return t = e.document.location.host === document.location.host && e.document.location.protocol === document.location.protocol, t || (t = e.document.domain === document.domain), t } catch (e) { } return !1 }, provideRequestHeaders: function () { let e = null; const t = M.addRequestHeaders; return t && t.enabled && (e = t.cbFunction()), e }, _registerModuleEvents: function () { let e, r = 0; const o = function (e, t, n) { return "window" === e ? t : "document" === e ? n : e }; function a(e) { const t = d.getIFrameWindow(e); return null !== t && H._hasSameOrigin(t) && null !== t.document && "complete" === t.document.readyState && "" !== t.document.body.innerHTML } function s(s, l, c) { if (c = c || H._getLocalTop().document, e = e || new d.WeakMap, function (r, i, a) { let s, l, c; const u = d.getDocument(a), f = H._getLocalTop(), p = d.isIFrameDescendant(a); if (a = a || u, k.normalizeModuleEvents(r, i, f, u), p && (s = t.ElementData.prototype.examineID(a).id, "string" == typeof s)) for (l in s = s.slice(0, s.length - 1), D) if (Object.prototype.hasOwnProperty.call(D, l)) for (c = 0; c < D[l].length; c += 1)if (r === D[l][c] && -1 !== l.indexOf(s)) { delete D[l]; break } d.forEach(i, (function (i) { let s = ""; const l = o(i.target, f, u) || u; !0 !== i.recurseFrames && p || ("string" == typeof l ? d.forEach(n.queryAll(l, a), (function (o) { let a = e.get(o); a || (a = t.ElementData.prototype.examineID(o), e.set(o, a)), s = i.name + "|" + a.id + a.idType, -1 === d.indexOf(D[s], r) && (D[s] = D[s] || [], D[s].push(r), D[s].target = o, n.subscribe(i.name, o, H._publishEvent)) })) : (s = H._buildToken4bubbleTarget(i.name, l, void 0 === i.target), Object.prototype.hasOwnProperty.call(D, s) ? -1 === d.indexOf(D[s], r) && D[s].push(r) : (D[s] = [r], n.subscribe(i.name, l, H._publishEvent))), "" !== s && "string" != typeof l && (D[s].target = l)) })) }(s, l, c), "performance" !== s) { let e, t, o = null, u = null; const f = n.queryAll("iframe, frame", c); for (e = 0, t = f.length; e < t; e += 1)o = f[e], E(o) || (a(o) ? (u = d.getIFrameWindow(o), H._registerModuleEvents(s, l, u.document), i.observeWindow(u)) : (r += 1, function (e, t, n) { let o = null; const s = function () { let o = null; E(n) || (o = d.getIFrameWindow(n), H._hasSameOrigin(o) && (H._registerModuleEvents(e, t, o.document), i.observeWindow(o))), r -= 1, r || H._publishEvent({ type: "loadWithFrames", custom: !0 }) }; d.addEventListener(n, "load", (function () { s() })), d.isLegacyIE && a(n) && (o = d.getIFrameWindow(n), d.addEventListener(o.document, "readystatechange", (function () { s() }))) }(s, l, o))) } } return s.clearCache = function () { e && (e.clear(), e = null) }, s }(), _buildToken4currentTarget: function (e) { const n = e.nativeEvent ? e.nativeEvent.currentTarget : null, r = n ? t.ElementData.prototype.examineID(n) : { id: e.target ? e.target.id : null, idType: e.target ? e.target.idType : -1 }; return e.type + "|" + r.id + r.idType }, _buildToken4delegateTarget: function (e, t, n) { return e + "|" + t + "|" + n }, _buildToken4bubbleTarget: function (e, r, i, o) { let a; const s = H._getLocalTop(), l = d.getDocument(r); let c, u = null, f = e; return l && (a = l.defaultView || l.parentWindow), r === window || r === window.window ? f += "|null-2|window" : i && a && H._hasSameOrigin(a.parent) && void 0 !== l && s.document !== l ? (u = function (e) { let t = null; return H._hasSameOrigin(a.parent) && d.forEach(n.queryAll("iframe, frame", a.parent.document), (function (n) { let r = null; E(n) || (r = d.getIFrameWindow(n), H._hasSameOrigin(r) && r.document === e && (t = n)) })), t }(l), u && (c = t.ElementData.prototype.examineID(u), f += "|" + c.xPath + "-2")) : f += "|null-2|document", f }, _reinitConfig: function () { H._updateModules() }, _publishEvent: function (e) { let t, r, i, a, s = null, c = null, u = e.delegateTarget && e.data ? e.data : H._buildToken4currentTarget(e), f = null, p = null, g = !1, m = !1; const y = e.delegateTarget || null; L = e, e.type.match(/^(click|change|blur|mouse|touch)/) && (N(h), o.resetFlushTimer()); if (d.getValue(l, "screenviewAutoDetect", !0) && z(), "load" !== e.type && "pageshow" !== e.type || e.nativeEvent.customLoad) if ("click" === e.type && (C = e.target.element), "beforeunload" === e.type && (g = !1, a = "a" === d.getTagName(C) ? C : document.activeElement, a && (!function (e) { let t = !1; return e && "a" === d.getTagName(e) && -1 !== ["intent:", "mailto:", "sms:", "tel:"].indexOf(e.protocol) && (t = !0), t }(a) ? d.forEach(l.ieExcludedLinks, (function (e) { let t, r; const i = n.queryAll(e); for (t = 0, r = i ? i.length : 0; t < r; t += 1)if (i[t] && i[t] === C) { g = !0; break } })) : g = !0), g)) L = {}; else if (k.isUnload(e) && (x = "unloading"), "change" !== e.type || !d.isLegacyIE || "checkbox" !== e.target.element.type && "radio" !== e.target.element.type) { if ("propertychange" === e.type) { if ("checked" !== e.nativeEvent.propertyName || !("checkbox" === e.target.element.type || "radio" === e.target.element.type && e.target.element.checked)) return void (L = {}); e.type = "change", e.target.type = "INPUT" } if (e.target && V(e.target.element)) L = {}; else { if (Object.prototype.hasOwnProperty.call(D, u) || (Object.prototype.hasOwnProperty.call(e, "nativeEvent") && (i = e.nativeEvent.currentTarget || e.nativeEvent.target), u = H._buildToken4bubbleTarget(e.type, i, !0, y)), Object.prototype.hasOwnProperty.call(D, u)) for (f = D[u], t = 0, r = f.length; t < r; t += 1)if (s = f[t], c = H.getModule(s), p = d.mixin({}, e), c && H.isStarted(s) && "function" == typeof c.onevent && (m = k.canPublish(s, p), m)) try { c.onevent(p) } catch (e) { } p && "unload" === p.type && m && H.destroy(!1, p.type), L = {} } } else L = {}; else L = {} }, _getLocalTop: function () { return window.window }, addModule: function (e, t) { T[e] = { creator: t, instance: null, context: null, messages: [] }, this.isInitialized() && this.start(e) }, getModule: function (e) { return T[e] && T[e].instance ? T[e].instance : null }, removeModule: function (e) { this.stop(e), delete T[e] }, isStarted: function (e) { return Object.prototype.hasOwnProperty.call(T, e) && null !== T[e].instance }, start: function (e) { let t = null; const n = T[e]; n && null === n.instance && (n.context = new TLT.ModuleContext(e, this), t = n.instance = n.creator(n.context), "function" == typeof t.init && t.init()) }, startAll: function () { let e = null; for (e in T) Object.prototype.hasOwnProperty.call(T, e) && this.start(e) }, stop: function (e) { let t = null; const n = T[e]; n && null !== n.instance && (t = n.instance, "function" == typeof t.destroy && t.destroy(), n.instance = n.context = null) }, stopAll: function () { let e = null; for (e in T) Object.prototype.hasOwnProperty.call(T, e) && this.stop(e) }, addService: function (e, t) { S[e] = { creator: t, instance: null } }, getService: function (e) { if (Object.prototype.hasOwnProperty.call(S, e)) { if (!S[e].instance) { try { S[e].instance = S[e].creator(this), "function" == typeof S[e].instance.init && S[e].instance.init() } catch (t) { throw d.clog("UIC terminated due to error when instanciating the " + e + " service."), new Error(t) } "function" != typeof S[e].instance.getServiceName && (S[e].instance.getServiceName = function () { return e }) } return S[e].instance } return null }, removeService: function (e) { delete S[e] }, broadcast: function (e) { let t, n; if (e && "object" == typeof e) for (t in T) Object.prototype.hasOwnProperty.call(T, t) && (n = T[t], d.indexOf(n.messages, e.type) > -1 && "function" == typeof n.instance.onmessage && n.instance.onmessage(e)) }, listen: function (e, t) { let n = null; this.isStarted(e) && (n = T[e], -1 === d.indexOf(n.messages, t) && n.messages.push(t)) }, fail: function (e, t, n) { e = "UIC FAILED. " + e; try { H.destroy(!!n, e) } catch (t) { d.clog(e) } throw new H.UICError(e, t) }, UICError: function () { function e(e, t) { this.message = e, this.code = t } return e.prototype = new Error, e.prototype.name = "UICError", e.prototype.constructor = e, e }(), isCrossOrigin: function (e, t) { let n, r = !1; if (t = t || window.location.origin, !e || !t) return r; const i = e.match(/^\/\//); return e.match(/^\//) && !i || (i || -1 !== e.indexOf("://")) && (i && (n = t.indexOf("://"), -1 !== n && (t = t.substring(n + 1))), r = e.length < t.length || (t !== e.substring(0, t.length) || e.length > t.length && "/" !== e.charAt(t.length))), r } }; function F(t, n, r, i) { let o = !0; t && n && n.match("GetRemoteConfig") ? o = !1 : t && t.match("collectorPost") && (n = t.replace("collectorPost", "switch/" + r.tlAppKey)), n && o ? function (t, n) { e.sendRequest({ type: "GET", url: t, async: !0, timeout: 5e3, oncomplete: function (e) { !function (e) { "0" !== e.responseText && 0 !== e.data || (H.setAutoFlush(!1), d.setCookie("TLTSID", "DND"), H.destroy(!1, "killswitch")) }(e), n && "function" == typeof n && n(e, t) } }) }(n, i) : n && !o ? function (t, n, r) { const i = { appKey: n.tlAppKey, osVersion: "N/A", platform: "web", appVersion: "N/A", tealeafSDKVersion: H.getLibraryVersion(), connection: "N/A", signalStrength: "N/A", deviceId: d.getCookieValue("TLTDID"), cellularConnectionType: "N/A" }, o = { "X-Tealeaf-SaaS-AppKey": n.tlAppKey, "Content-Type": "application/json", "Access-Control-Allow-Headers": "*" }; e.sendRequest({ url: t, async: !0, timeout: 5e3, data: JSON.stringify(i), headers: o, oncomplete: function (e) { !function (e, t) { let n = !0; if (e && 200 === e.statusCode && e.responseText) { const r = JSON.parse(e.responseText); if (r && r.appWebConfig && r.appWebConfig.UIC) { let i = r.appWebConfig.UIC; i = function (e, t) { e && e.modules && e.modules.dataLayer && e.modules.dataLayer.dataObjects && t && t.length > 0 ? e.modules.dataLayer.dataObjects.push.apply(e.modules.dataLayer.dataObjects, t) : (e ? e.modules ? e.modules.dataLayer || (e.modules.dataLayer = { dataObjects: {} }) : e.modules = { dataLayer: { dataObjects: {} } } : e = { modules: { dataLayer: { dataObjects: {} } } }, e.modules.dataLayer.dataObjects = t); e.core ? e.core.modules ? e.core.modules.dataLayer || (e.core.modules.dataLayer = { enabled: !1, events: [{ name: "load", target: window }, { name: "unload", target: window }] }) : e.core.modules = { dataLayer: { enabled: !1, events: [{ name: "load", target: window }, { name: "unload", target: window }] } } : e.core = { modules: { dataLayer: { enabled: !1, events: [{ name: "load", target: window }, { name: "unload", target: window }] } } }; return e.core.modules.dataLayer.enabled = !0, e }(i, function (e) { const t = []; if (!e || 0 == Object.keys(e).length) return t; const n = {}; e.forEach((e => { n[e.object] || (n[e.object] = { permittedProperties: [] }), e.property && n[e.object].permittedProperties.push(e.property), n[e.object].filter || (n[e.object].filter = []), e.matchProperty && e.matchValue && n[e.object].filter.push({ matchProperty: e.matchProperty, matchValue: e.matchValue }) })); return Object.keys(n).forEach(((e, r) => { const i = { dataObject: e, rules: { includeEverything: !0, permittedProperties: n[e].permittedProperties, propertyBlocklist: [], screenviewBlocklist: [], filter: n[e].filter } }; t.push(i) })), t }(r.appWebDataLayer)), e.updatedRemoteConfigWebObj = i, window.TLT.destroy(), P(i, t), n = !1 } } n && t && "function" == typeof t && t("bad remote config") }(e, void 0), r && "function" == typeof r && r(e, t) } }) }(n, r, i) : i && "function" == typeof i && i(void 0, n) } return N = function (e) { let t = null; const n = d.getValue(l, "inactivityTimeout", e); function r() { H.destroy(!1, "inactivity") } n ? (N = function () { t && (clearTimeout(t), t = null), t = setTimeout(r, n) }, N()) : N = function () { } }, P = function (c, f) { let g, m, y, w, b, T = null; if (_) return; if (TLT && TLT.replay) return; r = H.getService("config"), r.updateConfig(c), l = r.getCoreConfig(); const S = function (e, t) { let n, r, i, o, a, s = null; if (!e || !t) return s; for (n = 0, r = e.length; n < r; n += 1)switch (i = e[n], typeof i) { case "object": o = new RegExp(i.regex, i.flags), a = o.exec(t), a && (s = a[0]); break; case "string": -1 !== t.indexOf(i) && (s = i) }return s }(l.blockedUserAgents, navigator.userAgent); if (S) return void (TLT.terminationReason = "blockedUA: " + S); e = H.getService("ajax"), d.browserBaseService = t = H.getService("browserBase"), d.browserService = n = H.getService("browser"), i = H.getService("domCapture"), o = H.getService("queue"), a = H.getService("serializer"); const E = r.getModuleConfig("TLCookie") || {}; if (g = E.sessionizationCookieName || "TLTSID", m = d.getCookieValue("TLTSID"), "DND" === m) return void ("destroyed" !== x && H.destroy(!1, "killswitch")); if (m = d.getCookieValue(g) || function (e) { let t, n, r; if (!localStorage || !e) return; const i = localStorage.getItem(e); return i && (n = i.split("|"), t = parseInt(n[0], 10), Date.now() > t ? localStorage.removeItem(e) : r = n[1]), r }(g), m || (g = E.wcxCookieName || "WCXSID", m = d.getCookieValue(g)), !H._updateModules()) return void ("destroyed" !== x && H.destroy(!1, "modules init")); s = H.getModule("dataLayer"), r.subscribe && r.subscribe("configupdated", H._reinitConfig), _ = !0, x = "loaded"; try { "function" == typeof TLFExtensionNotify && TLFExtensionNotify("Initialized") } catch (e) { } const C = H.getServiceConfig("queue"), O = C.queues || []; for ((d.isLegacyIE || d.isIE11) && (T = d.getOriginAndPath().origin), y = 0; y < O.length; y += 1) { if (T && H.isCrossOrigin(O[y].endpoint, T)) return H.setAutoFlush(!1), void H.destroy(!1, "CORS not supported"); !m && E.tlAppKey && F(O[y].endpoint, O[y].killswitchURL, E), O[y].checkEndpoint && !C.asyncReqOnUnload && (C.asyncReqOnUnload = !0, e.sendRequest({ oncomplete: function (e) { e.success && (C.asyncReqOnUnload = !1) }, timeout: O[y].endpointCheckTimeout || 3e3, url: O[y].endpoint, headers: { "X-PageId": v, "X-Tealeaf-SaaS-AppKey": E.tlAppKey, "X-Tealeaf-EndpointCheck": !0 }, async: !0, error: function (e) { e.success || (C.endpointCheckFailed = !0) } })) } const k = function (e) { const r = { type: "load", target: window.window, srcElement: window.window, currentTarget: window.window, bubbles: !0, cancelBubble: !1, cancelable: !0, timeStamp: +new Date, customLoad: !0 }, i = new t.WebEvent(r); H._publishEvent(i), e && n.unsubscribe(w, b, k) }; if (l.screenviewLoadEvent ? (w = l.screenviewLoadEvent.name, b = l.screenviewLoadEvent.target || window, n.subscribe(w, b, k)) : k(), H.isInitialized() && (x = "initialized", N(h), u = function (e) { "mousemove" === e.type && (p = !0), n.unsubscribe("mousemove", document, u), u = null }, n.subscribe("mousemove", document, u, { once: !0 })), "function" == typeof R) try { "function" == typeof f ? f(x) : R(x) } catch (e) { d.clog("Error in callback.", e) } }, function () { let e, t, n = null; for (n in O) if (Object.prototype.hasOwnProperty.call(O, n)) for (e = 0, t = O[n].length; e < t; e += 1)!function (e, t) { H[t] = function () { const n = this.getService(e); if (n) return n[t].apply(n, arguments) } }(n, O[n][e]) }(), H }(), function () { "use strict"; const e = window.navigator.userAgent.toLowerCase(), t = -1 !== e.indexOf("msie") || -1 !== e.indexOf("trident"), n = function () { const e = !!window.performance; return t && (!e || document.documentMode < 11) }(), r = t && 11 === document.documentMode, i = -1 !== e.indexOf("android"), o = /(ipad|iphone|ipod)/.test(e), a = -1 !== e.indexOf("opera mini"), s = -1 === e.indexOf("chrome") && -1 !== e.indexOf("safari"), l = { "a:": "link", "button:button": "button", "button:submit": "button", "input:button": "button", "input:checkbox": "checkBox", "input:color": "colorPicker", "input:date": "datePicker", "input:datetime": "datetimePicker", "input:datetime-local": "datetime-local", "input:email": "emailInput", "input:file": "fileInput", "input:image": "button", "input:month": "month", "input:number": "numberPicker", "input:password": "textBox", "input:radio": "radioButton", "input:range": "slider", "input:reset": "button", "input:search": "searchBox", "input:submit": "button", "input:tel": "tel", "input:text": "textBox", "input:time": "timePicker", "input:url": "urlBox", "input:week": "week", "select:": "selectList", "select:select-one": "selectList", "textarea:": "textBox", "textarea:textarea": "textBox" }, c = { isIE: t, isLegacyIE: n, isIE11: r, isAndroid: i, isLandscapeZeroDegrees: !1, isiOS: o, isOperaMini: a, isSafari: s, isUndefOrNull: function (e) { return null == e }, isArray: function (e) { return !(!e || "[object Array]" !== Object.prototype.toString.call(e)) }, getSerialNumber: function () { const e = u; return u += 1, e }, getRandomString: function (e, t) { let n, r, i = ""; if (!e) return i; for ("string" != typeof t && (t = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"), n = 0, r = t.length; n < e; n += 1)i += t.charAt(Math.floor(Math.random() * r)); return i }, getValue: function (e, t, n) { let r, i; if (n = void 0 === n ? null : n, !e || "object" != typeof e || "string" != typeof t) return n; const o = t.split("."); for (r = 0, i = o.length; r < i; r += 1) { if (!e || void 0 === e[o[r]]) return n; e = e[o[r]] } return e }, indexOf: function (e, t) { return e && e.indexOf ? e.indexOf(t) : -1 }, forEach: function (e, t, n) { let r; if (!(e && e.length && t && t.call)) return 0; for (r = 0; r < e.length; r += 1)t.call(n, e[r], r, e); return 1 }, some: function (e, t) { let n, r, i = !1; for (n = 0, r = e.length; n < r; n += 1)if (i = t(e[n], n, e), i) return i; return i }, convertToArray: function (e) { let t = 0; const n = []; for (; t < e.length;)n.push(e[t]), t += 1; return n }, mixin: function (e) { let t, n, r, i; for (r = 1, i = arguments.length; r < i; r += 1)for (t in n = arguments[r], n) Object.prototype.hasOwnProperty.call(n, t) && (e[t] = n[t]); return e }, extend: function (e, t, n) { let r = ""; for (r in n) Object.prototype.hasOwnProperty.call(n, r) && (e && "[object Object]" === Object.prototype.toString.call(n[r]) ? (void 0 === t[r] && (t[r] = {}), this.extend(e, t[r], n[r])) : t[r] = n[r]); return t }, clone: function (e) { let t, n; if (null === e || "object" != typeof e) return e; if (e instanceof Object) { for (n in t = "[object Array]" === Object.prototype.toString.call(e) ? [] : {}, e) Object.prototype.hasOwnProperty.call(e, n) && (t[n] = this.clone(e[n])); return t } }, parseVersion: function (e) { let t, n, r = []; if (!e || !e.length) return r; for (r = e.split("."), t = 0, n = r.length; t < n; t += 1)r[t] = /^\d+$/.test(r[t]) ? parseInt(r[t], 10) : r[t]; return r }, isEqual: function (e, t) { let n, r, i, o, a; if (e === t) return !0; if (typeof e != typeof t) return !1; if (e instanceof Object && t instanceof Object) { if ("[object Array]" === Object.prototype.toString.call(e) && "[object Array]" === Object.prototype.toString.call(t)) { if (e.length !== t.length) return !1; for (n = 0, a = e.length; n < a; n += 1)if (!this.isEqual(e[n], t[n])) return !1; return !0 } if ("[object Object]" === Object.prototype.toString.call(e) && "[object Object]" === Object.prototype.toString.call(t)) { for (n = 0; n < 2; n += 1) { for (i in e) if (Object.prototype.hasOwnProperty.call(e, i)) { if (!Object.prototype.hasOwnProperty.call(t, i)) return !1; if (r = this.isEqual(e[i], t[i]), !r) return !1 } o = e, e = t, t = o } return !0 } } return !1 }, calculateRelativeXY: function (e) { if (c.isUndefOrNull(e) || c.isUndefOrNull(e.x) || c.isUndefOrNull(e.y) || c.isUndefOrNull(e.width) || c.isUndefOrNull(e.height)) return "0.5,0.5"; let t = Math.abs(e.x / e.width).toFixed(4), n = Math.abs(e.y / e.height).toFixed(4); return t = t > 1 || t < 0 ? .5 : t, n = n > 1 || n < 0 ? .5 : n, t + "," + n }, createObject: function () { let e = null, t = null; return "function" == typeof Object.create ? e = Object.create : (t = function () { }, e = function (e) { if ("object" != typeof e && "function" != typeof e) throw new TypeError("Object prototype need to be an object!"); return t.prototype = e, new t }), e }(), access: function (e, t) { let n, r = t || window; if ("string" != typeof e || "object" != typeof r) return; const i = e.split("."), o = i.length; for (n = 0; n < o; n += 1)if (0 !== n || "window" !== i[n]) { if (!Object.prototype.hasOwnProperty.call(r, i[n])) return; if (r = r[i[n]], n < o - 1 && !(r instanceof Object)) return } return r }, isNumeric: function (e) { let t = !1; return c.isUndefOrNull(e) || !/\S/.test(e) || (t = !isNaN(2 * e)), t }, isUpperCase: function (e) { return e === e.toUpperCase() && e !== e.toLowerCase() }, isLowerCase: function (e) { return e === e.toLowerCase() && e !== e.toUpperCase() }, extractResponseHeaders: function (e) { let t, n = null; const r = {}, i = (e = e && e.length ? e.split("\n") : []).length; for (t = 0; t < i; t += 1)n = e[t].split(": "), 2 === n.length && (r[n[0]] = n[1]); return r }, getTargetState: function (e) { let t = null, n = null, r = null, i = ""; const o = this.getTagName(e); let a = { a: ["innerText", "href"], input: { range: ["maxValue:max", "value"], checkbox: ["value", "checked"], radio: ["value", "checked"], image: ["src"] }, select: ["value"], button: ["value", "innerText"], textarea: ["value"] }[o] || null; if (null !== a) for (i in "[object Object]" === Object.prototype.toString.call(a) && (a = a[e.type] || ["value"]), n = {}, a) Object.prototype.hasOwnProperty.call(a, i) && (-1 !== a[i].indexOf(":") ? (r = a[i].split(":"), n[r[0]] = e[r[1]]) : "innerText" === a[i] ? n[a[i]] = this.trim(e.innerText || e.textContent) : n[a[i]] = e[a[i]]); return "select" === o && e.options && !isNaN(e.selectedIndex) && (n = n || {}, n.index = e.selectedIndex, n.index >= 0 && n.index < e.options.length && (t = e.options[e.selectedIndex], n.value = t.getAttribute("value") || t.getAttribute("label") || t.text || t.innerText, n.text = t.text || t.innerText)), n && e.disabled && (n.disabled = !0), n }, getDocument: function (e) { let t = e; return e && 9 !== e.nodeType && (t = e.getRootNode ? e.getRootNode() : e.ownerDocument || e.document), t }, getWindow: function (e) { try { if (e.self !== e) { const t = c.getDocument(e); return c.isUndefOrNull(t.defaultView) ? t.parentWindow : t.defaultView } } catch (t) { e = null } return e }, getOriginAndPath: function (e) { let t, n, r, i, o, a, s = []; const l = {}, u = {}; (e = e || window.location).origin ? l.origin = e.origin : l.origin = (e.protocol || "") + "//" + (e.host || ""), l.path = (e.pathname || "").split(";", 1)[0], (l.origin.indexOf("file://") > -1 || c.isiOS && window.Ionic) && (t = l.path.match(/(.*)(\/.*app.*)/), null !== t && (l.path = t[2], l.origin = "file://")); const d = e.search || ""; try { n = new URLSearchParams(d), n.forEach((function (e, t) { u[t] = e })) } catch (e) { for (d.length > 1 && "?" === d.charAt(0) && (s = decodeURIComponent(d).substring(1).split("&")), o = 0; o < s.length; o += 1)a = s[o].indexOf("="), a > -1 && (r = s[o].substring(0, a), i = s[o].substring(a + 1), u[r] = i) } return l.queryParams = u, l }, getIFrameWindow: function (e) { let t = null; if (!e) return t; try { t = e.contentWindow || (e.contentDocument ? e.contentDocument.parentWindow : null) } catch (e) { } return t }, getTagName: function (e) { let t = ""; return c.isUndefOrNull(e) || (t = e == document || 9 === e.nodeType ? "document" : e == window || e == window.window ? "window" : "string" == typeof e ? e.toLowerCase() : (e.tagName || e.nodeName || "").toLowerCase()), t }, getTlType: function (e) { let t, n = ""; if (c.isUndefOrNull(e) || !e.type) return n; const r = e.type.toLowerCase(); return t = r + ":", e.subType && (t += e.subType.toLowerCase()), n = l[t] || r, n }, isIFrameDescendant: function (e) { const t = c.getWindow(e); return !!t && t != TLT._getLocalTop() }, getOrientationMode: function (e) { let t = "INVALID"; if ("number" != typeof e) return t; switch (e) { case 0: case 180: case 360: t = "PORTRAIT"; break; case 90: case -90: case 270: t = "LANDSCAPE"; break; default: t = "UNKNOWN" }return t }, getOrientationAngle: function () { if ("number" == typeof window.orientation) return window.orientation; let e = (screen.orientation || {}).angle; if ("number" != typeof e) switch (screen.mozOrientation || screen.msOrientation) { case "landscape-primary": case "landscape-secondary": e = 90; break; default: e = 0 }return e }, clog: (window, function () { }), trim: function (e) { return e && e.toString ? e.trim ? e.trim() : e.toString().replace(/^\s+|\s+$/g, "") : e }, ltrim: function (e) { return e && e.toString ? e.trimStart ? e.trimStart() : e.toString().replace(/^\s+/, "") : e }, rtrim: function (e) { return e && e.toString ? e.trimEnd ? e.trimEnd() : e.toString().replace(/\s+$/, "") : e }, setCookie: function (e, t, n, r, i, o, a) { let s, l, c, u = ""; "None" === a ? o = !0 : "Lax" !== a && (a = "Strict"); const d = ";SameSite=" + a, f = o ? ";Secure" : ""; if (!e) return; e = encodeURIComponent(e), t = encodeURIComponent(t); const p = (i || location.hostname).split("."), h = ";Path=" + (r || "/"); for ("number" == typeof n && (this.isIE ? (c = new Date, c.setTime(c.getTime() + 1e3 * n), u = ";Expires=" + c.toUTCString()) : u = ";Max-Age=" + n), l = p.length, s = 1 === l ? 1 : 2; s <= l && (document.cookie = e + "=" + t + ";Domain=" + p.slice(-s).join(".") + h + u + f + d, this.getCookieValue(e) !== t); s += 1)1 === l && (document.cookie = e + "=" + t + h + u + f + d) }, getCookieValue: function (e, t) { let n, r, i, o, a, s = null; try { if (t = t || document.cookie, !e || !e.toString) return null; for (a = (e += "=").length, o = t.split(";"), n = 0, r = o.length; n < r; n += 1)if (i = o[n], i = c.ltrim(i), 0 === i.indexOf(e)) { s = i.substring(a, i.length); break } } catch (e) { s = null } return s }, getQueryStringValue: function (e, t, n) { let r, i, o, a, s = null; try { if (o = (n = n || window.location.search).length, !e || !e.toString || !o) return null; n = (t = t || "&") + n.substring(1), e = t + e + "=", r = n.indexOf(e), -1 !== r && (a = r + e.length, i = n.indexOf(t, a), -1 === i && (i = o), s = decodeURIComponent(n.substring(a, i))) } catch (e) { } return s }, addEventListener: window.addEventListener ? function (e, t, n) { e.addEventListener(t, n, !1) } : function (e, t, n) { e.attachEvent("on" + t, n) }, matchTarget: function (e, t) { let n, r, i, o, a, s, l, c, u = -1, d = document; if (!e || !t) return u; for (this.browserService && this.browserBaseService || (this.browserService = TLT.getService("browser"), this.browserBaseService = TLT.getService("browserBase")), -2 === t.idType && (i = this.browserBaseService.getNodeFromID(t.id, t.idType), d = this.getDocument(i)), n = 0, l = e.length; n < l && -1 === u; n += 1)if (c = e[n], "string" == typeof c) { for (o = this.browserService.queryAll(c, d), r = 0, a = o ? o.length : 0; r < a; r += 1)if (o[r] && (s = this.browserBaseService.ElementData.prototype.examineID(o[r]), s.idType === t.idType && s.id === t.id)) { u = n; break } } else if (c && c.id && c.idType && t.idType && t.idType.toString() === c.idType.toString()) switch (typeof c.id) { case "string": c.id === t.id && (u = n); break; case "object": c.cRegex || (c.cRegex = new RegExp(c.id.regex, c.id.flags)), c.cRegex.lastIndex = 0, c.cRegex.test(t.id) && (u = n) }return u }, applyPrivacyPatterns: function (e, t) { let n, r, i; if (!e) return ""; if ("number" == typeof e) return e; for (n = 0, r = (t = t || []).length; n < r; n += 1)i = t[n], i.cRegex.lastIndex = 0, e = e.replace(i.cRegex, i.replacement); return e }, WeakMap: function () { function e(e, t) { let n, r; for (n = 0, r = (e = e || []).length; n < r; n += 1)if (e[n][0] === t) return n; return -1 } return function () { let t = []; this.set = function (n, r) { const i = e(t, n); t[i > -1 ? i : t.length] = [n, r] }, this.get = function (n) { const r = t[e(t, n)]; return r ? r[1] : void 0 }, this.clear = function () { t = [] }, this.has = function (n) { return e(t, n) >= 0 }, this.remove = function (n) { const r = e(t, n); r >= 0 && t.splice(r, 1) }, this.delete = this.remove } }() }; let u = 1; "undefined" != typeof TLT && TLT || (window.TLT = {}), TLT.utils = c }(), function () { "use strict"; TLT.EventTarget = function () { this._handlers = {} }, TLT.EventTarget.prototype = { constructor: TLT.EventTarget, publish: function (e, t) { let n = 0, r = 0; const i = this._handlers[e], o = { type: e, data: t }; if (void 0 !== i) for (r = i.length; n < r; n += 1)i[n](o) }, subscribe: function (e, t) { Object.prototype.hasOwnProperty.call(this._handlers, e) || (this._handlers[e] = []), this._handlers[e].push(t) }, unsubscribe: function (e, t) { let n = 0, r = 0; const i = this._handlers[e]; if (i) for (r = i.length; n < r; n += 1)if (i[n] === t) return void i.splice(n, 1) } } }(), TLT.ModuleContext = function () { "use strict"; const e = ["broadcast", "getConfig:getModuleConfig", "listen", "post", "getXPathFromNode", "performDOMCapture", "performFormCompletion", "isInitialized", "getStartTime", "normalizeUrl", "getCurrentOffset", "getTabId", "setSessionCookieInfo"]; return function (t, n) { let r, i, o = null, a = null, s = null; const l = {}; for (r = 0, i = e.length; r < i; r += 1)o = e[r].split(":"), o.length > 1 ? (s = o[0], a = o[1]) : (s = o[0], a = o[0]), l[s] = function (e) { return function () { const r = n.utils.convertToArray(arguments); return r.unshift(t), n[e].apply(n, r) } }(a); return l.utils = n.utils, l } }(), TLT.addService("config", (function (e) { "use strict"; function t(t, n) { e.utils.extend(!0, t, n), r.publish("configupdated", r.getConfig()) } let n = { core: {}, modules: {}, services: {} }, r = e.utils.extend(!1, e.utils.createObject(new TLT.EventTarget), { getConfig: function () { return n }, getDefaultConfig: function () { function e(e, t) { let n; if (t.length > 0) return n = e.replace(t, "xxxxxx"), n } const t = { core: { buildNote: "Acoustic Tealeaf UIC " + window.TLT.getLibraryVersion(), blockedElements: [], ieExcludedLinks: ['a[href*="javascript:void"]', "input[onclick*='javascript:']"], blockedUserAgents: [{ regex: "(Google|Bing|Face|DuckDuck|Yandex|Exa)bot|spider|archiver", flags: "i" }, "PhantomJS"], inactivityTimeout: 174e4, modules: { replay: { events: [{ name: "change", attachToShadows: !0, recurseFrames: !0 }, { name: "click", recurseFrames: !0 }, { name: "dblclick", recurseFrames: !0 }, { name: "contextmenu", recurseFrames: !0 }, { name: "pointerdown", recurseFrames: !0 }, { name: "pointerup", recurseFrames: !0 }, { name: "hashchange", target: window }, { name: "focus", recurseFrames: !0 }, { name: "blur", recurseFrames: !0 }, { name: "load", target: window }, { name: "unload", target: window }, { name: "resize", target: window }, { name: "scroll", target: window }, { name: "mousemove", recurseFrames: !0 }, { name: "orientationchange", target: window }, { name: "touchend" }, { name: "touchstart" }, { name: "error", target: window }, { name: "visibilitychange" }] }, flushQueue: { events: [] }, overstat: { enabled: !0, events: [{ name: "click", recurseFrames: !0 }, { name: "mousemove", recurseFrames: !0 }, { name: "mouseout", recurseFrames: !0 }, { name: "submit", recurseFrames: !0 }] }, performance: { enabled: !0, events: [{ name: "load", target: window }, { name: "unload", target: window }] }, ajaxListener: { enabled: !0, events: [{ name: "load", target: window }, { name: "unload", target: window }] }, gestures: { enabled: !0, events: [{ name: "tap", target: window }, { name: "hold", target: window }, { name: "drag", target: window }, { name: "release", target: window }, { name: "pinch", target: window }] }, dataLayer: { enabled: !1, events: [{ name: "load", target: window }, { name: "unload", target: window }] }, TLCookie: { enabled: !0 } }, screenviewAutoDetect: !0, framesBlacklist: [] }, services: { queue: { asyncReqOnUnload: !0, useBeacon: !0, useFetch: !0, xhrEnabled: !0, queues: [{ qid: "DEFAULT", endpoint: "", maxEvents: 30, timerInterval: 6e4, maxSize: 3e5, checkEndpoint: !0, endpointCheckTimeout: 4e3, encoder: "gzip" }] }, message: { privacy: [{ targets: ["input[type=password]"], maskType: 2 }, { targets: ["input[id*=phone]", "input[name*=phone]"], maskType: 4, maskFunction: function (e) { return e.slice(0, -3).replace(/\d/g, "X") + e.slice(-3) } }, { exclude: !0, targets: ["input[type=hidden]", "input[type=radio]", "input[type=checkbox]", "input[type=submit]", "input[type=button]", "input[type=search]"], maskType: 4, maskFunction: function (e) { return e.replace(/[a-z]/gi, "X").replace(/\d/g, "9") } }], privacyPatterns: [{ pattern: { regex: "\\d{3}-\\d{2}-\\d{4}", flags: "g" }, replacement: "XXX-XX-XXXX" }, { pattern: { regex: "<div[^<]*tlPrivate[^<]*>(.+?)</div>", flags: "g" }, replacement: function (e, t) { let n; if (t.length > 0) return n = e.replace(t, "xxxxxx"), n } }, { pattern: { regex: "<span[^<]*tlPrivate[^<]*>(.+?)</span>", flags: "g" }, replacement: e }, { pattern: { regex: "<p[^<]*tlPrivate[^<]*>(.+?)</p>", flags: "g" }, replacement: e }] }, encoder: { gzip: { encode: "window.pako.gzip", defaultEncoding: "gzip" } }, domCapture: { diffEnabled: !0, options: { maxLength: 1e7, captureShadowDOM: !0, captureDynamicStyles: !0, captureFrames: !0 } }, browser: { normalizeTargetToParentLink: !0 } }, modules: { overstat: { hoverThreshold: 3e3 }, performance: { calculateRenderTime: !0, renderTimeThreshold: 6e5, performanceAlert: { enabled: !0, threshold: 3e3, maxAlerts: 100, blacklist: [] } }, replay: { tab: !1, domCapture: { enabled: !0, screenviewBlacklist: [], triggers: [{ event: "change" }, { event: "click" }, { event: "dblclick" }, { event: "contextmenu" }, { event: "visibilitychange" }, { event: "load", fullDOMCapture: !0, delay: 300 }] }, mousemove: { enabled: !0, sampleRate: 200, ignoreRadius: 3 } }, ajaxListener: { urlBlocklist: [{ regex: "brilliantcollector\\.com" }], filters: [{ log: { requestHeaders: !0, requestData: !1, responseHeaders: !0, responseData: !1 } }] }, dataLayer: { dataObjects: [{ dataObject: "window.dataLayer", rules: { screenviewBlocklist: [], propertyBlocklist: [], permittedProperties: [], includeEverything: !0 } }] }, TLCookie: { appCookieWhitelist: [{ regex: ".*" }], tlAppKey: "", disableTLTDID: !1 } } }; return (window.TLT.utils.isiOS || window.TLT.utils.isAndroid) && function () { let e; t.services.queue.queues[0].maxEvents = 10, t.services.queue.queues[0].maxSize = 1e4, t.services.queue.queues[0].timerInterval = 1e4, t.services.queue.queues[0].endpointCheckTimeout = 1e4, window.TLT.utils.isiOS && (e = window.navigator.userAgent.match(/OS (\d+)_/), e && e[1] < 13 && (t.services.queue.useBeacon = !1), t.core.modules.flushQueue && t.core.modules.flushQueue.events ? t.core.modules.flushQueue.events.push({ name: "visibilitychange" }) : console.log("Tealeaf Error: include the flushQueue module!")) }(), t }, updateConfig: function (e) { t(n, e) }, getCoreConfig: function () { return n.core }, updateCoreConfig: function (e) { t(n.core, e) }, getServiceConfig: function (e) { return n.services[e] || {} }, updateServiceConfig: function (e, r) { void 0 === n.services[e] && (n.services[e] = {}), t(n.services[e], r) }, getModuleConfig: function (e) { return n.modules[e] || {} }, updateModuleConfig: function (e, r) { void 0 === n.modules[e] && (n.modules[e] = {}), t(n.modules[e], r) }, destroy: function () { n = { core: {}, modules: {}, services: {} } } }); return r })), TLT.addService("queue", (function (e) { "use strict"; const t = e.utils; let n = null, r = {}, i = 6e5; const o = e.getService("ajax"), a = e.getService("browser"), s = e.getService("encoder"), l = e.getService("serializer"), c = e.getService("config"), u = e.getService("message"); let d = null, f = {}, p = !0, h = !0; const g = { 5: { limit: 300, count: 0 }, 6: { limit: 400, count: 0 } }, m = []; let y = !0, v = !1, w = !0, b = !0; const T = function () { let t = {}; function n(e) { return void 0 !== t[e] } function r(e) { return n(e) ? t[e] : null } function i(e) { const t = r(e); null !== t && (t.data = []) } return { exists: n, add: function (e, r) { return n(e) || (t[e] = { lastOffset: 0, data: [], queueId: e, url: r.url, eventThreshold: r.eventThreshold, sizeThreshold: r.sizeThreshold || 0, timerInterval: r.timerInterval, size: -1, serializer: r.serializer, encoder: r.encoder, crossDomainEnabled: !!r.crossDomainEnabled, crossDomainIFrame: r.crossDomainIFrame }), t[e] }, remove: function (e) { n(e) && delete t[e] }, reset: function () { t = {} }, get: r, clear: i, flush: function (e) { let t = null; return n(e) && (t = r(e).data, i(e)), t }, push: function (t, i) { let o = null, a = null; const s = window.tlBridge, c = window.iOSJSONShuttle; try { a = l.serialize(i) } catch (e) { a = "Serialization failed: " + (e.name ? e.name + " - " : "") + e.message, i = { error: a } } if (void 0 !== s && "function" == typeof s.addMessage) s.addMessage(a); else if (void 0 !== c && "function" == typeof c) c(a); else if (n(t)) return o = r(t), o.data.push(i), o.data = e.redirectQueue(o.data), o.sizeThreshold && (a = l.serialize(o.data), o.size = a.length), o.data.length; return 0 } } }(); function S(e) { w && (b = !0), e && e.id && t.extend(!0, m[e.id - 1], { rspEnd: u.getCurrentOffset(), success: e.success, statusCode: e.statusCode, statusText: e.statusText }) } function _() { const n = t.getOriginAndPath(window.location); return e.normalizeUrl("", n.path) } function x(e, t, n, r) { const i = T.get(e), o = { name: t, value: n }; let a = null; "string" == typeof t && "string" == typeof n && (i.headers || (i.headers = { once: [], always: [] }), a = r ? i.headers.always : i.headers.once, a.push(o)) } function E(r, a) { const c = T.get(r); if (!c) return; let d = c.url ? T.flush(r) : null; const f = d ? d.length : 0, p = { "Content-Type": "application/json", "X-PageId": e.getPageId(), "X-Tealeaf": "device (UIC) Lib/6.4.72", "X-TealeafType": "GUI", "X-TeaLeaf-Page-Url": _(), "X-Tealeaf-SyncXHR": (!!a).toString() }; let h = null; const g = u.getCurrentOffset(), v = c.serializer || "json", w = c.encoder; let E, C; const O = n.tltWorker, k = "unloading" === e.getState(), L = t.getOriginAndPath().origin, D = e.isCrossOrigin(c.url, L); let M, I = null; if (!f || !c) return; const P = g - d[f - 1].offset; if (!(i && P > i + 6e4)) { if (b = !1, c.lastOffset = d[f - 1].offset, p["X-Tealeaf-MessageTypes"] = function (e) { let t, n, r = ""; const i = []; if (!e || !e.length) return r; for (t = 0, n = e.length; t < n; t += 1)i[e[t].type] = !0; for (t = 0, n = i.length; t < n; t += 1)i[t] && (r && (r += ","), r += t); return r }(d), d = u.wrapMessages(d), h = d.serialNumber, m[h - 1] = { serialNumber: h, reqStart: g }, y && (d.log = { requests: m }), n.endpointCheckFailed && (d.log.endpointCheckFailed = !0), function () { let t, n, r = 0; const i = e.provideRequestHeaders(); if (i && i.length) for (t = i.length; r < t; r += 1)n = i[r], x("DEFAULT", n.name, n.value, n.recurring) }(), function (e, t) { let n, r; const i = T.get(e).headers; let o = null; function a(e, t) { let n, r, i = null; for (n = 0, r = e.length; n < r; n += 1)i = e[n], t[i.name] = i.value } if (t = t || {}, i) for (o = [i.always, i.once], n = 0, r = o.length; n < r; n += 1)a(o[n], t) }(r, p), !O || a || k) if (v && (d = l.serialize(d, v)), w && (C = s.encode(d, w), C && (C.data && !C.error && (C.data instanceof window.ArrayBuffer ? C.data.byteLength < d.length ? (d = C.data, p["Content-Encoding"] = C.encoding) : C.error = w + " encoder did not reduce payload (" + C.data.byteLength + ") compared to original data (" + d.length + ")" : C.error = "Encoder did not apply " + w + " encoding."), C.error && e.logExceptionEvent("EncoderError: " + C.error, "UIC", -1))), c.crossDomainEnabled) { if (I = t.getIFrameWindow(c.crossDomainIFrame), !I) return; if (E = { request: { id: h, url: c.url, async: !a, headers: p, data: d } }, "function" == typeof window.postMessage) I.postMessage(E, c.crossDomainIFrame.src); else try { I.sendMessage(E) } catch (e) { return } b = !0 } else o.sendRequest({ id: h, oncomplete: S, url: c.url, async: !a, isUnloading: k, isCrossOrigin: D, headers: p, data: d }); else O.onmessage = function (e) { S(e.data) }, M = { id: h, url: c.url, headers: p, data: d, isUnloading: k, isCrossOrigin: D }, O.postMessage(M); !function (e) { let t = null; if (!T.exists(e)) throw new Error("Queue: " + e + " does not exist!"); const n = T.get(e); t = n ? n.headers : null, t && (t.once = []) }(r) } } function C(e) { let t, r = null; const i = n.queues; for (t = 0; t < i.length; t += 1)r = i[t], E(r.qid, e); return !0 } function O(t, r) { let o, a, s; const l = u.createMessage(r), c = T.get(t); if (a = c.data.length, a && (s = l.offset - c.data[a - 1].offset, i && s > i)) return e.setAutoFlush(!1), void e.destroy(!1, "inactivity(2)"); a = T.push(t, l); const d = c.size; w && !b || (a >= c.eventThreshold || d >= c.sizeThreshold) && p && "unloading" !== e.getState() && (o = e.getCurrentWebEvent(), "click" !== o.type || n.ddfoc ? E(t) : h && (h = !1, window.setTimeout((function () { T.exists(t) && (E(t), h = !0) }), 500))) } function k(e, t) { f[e] = window.setTimeout((function n() { p && (!w || w && b) && E(e), f[e] = window.setTimeout(n, t) }), t) } function L(e) { let t = !1; return e && f[e] && (window.clearTimeout(f[e]), delete f[e], t = !0), t } function D(e) { } function M() { p && C(!n.asyncReqOnUnload), c.unsubscribe("configupdated", D), function () { let e = 0; for (e in f) Object.prototype.hasOwnProperty.call(f, e) && L(e); f = {} }(), T.reset(), n = null, d = null, v = !1 } return { init: function () { var o; v || (o = c.getServiceConfig("queue") || {}, n = o, r = e.getCoreConfig(), i = t.getValue(r, "inactivityTimeout", 6e5), w = t.getValue(n, "serializePost", !0), t.forEach(n.queues, (function (t, n) { let r = null; "DEFAULT" === t.qid && (d = t), t.crossDomainEnabled && (r = a.query(t.crossDomainFrameSelector), r || e.fail("Cross domain iframe not found")), T.add(t.qid, { url: t.endpoint, eventThreshold: t.maxEvents, sizeThreshold: t.maxSize || 0, serializer: t.serializer, encoder: t.encoder, timerInterval: t.timerInterval || 0, crossDomainEnabled: t.crossDomainEnabled || !1, crossDomainIFrame: r }), void 0 !== t.timerInterval && t.timerInterval > 0 && k(t.qid, t.timerInterval) })), c.subscribe("configupdated", D), v = !0) }, destroy: function () { M() }, _getQueue: function (e) { return T.get(e).data }, setAutoFlush: function (e) { p = !0 === e }, flush: function (e) { if (e = e || d.qid, !T.exists(e)) throw new Error("Queue: " + e + " does not exist!"); E(e) }, flushAll: function (e) { return C(!!e) }, post: function (t, r, i) { e.isInitialized() && (i = i || function (e) { let t, r, i, o, a = null, s = ""; const l = n.queues; for (t = 0, i = l.length; t < i; t += 1)if (a = l[t], a && a.modules) for (r = 0, o = a.modules.length; r < o; r += 1)if (s = a.modules[r], s === e) return a.qid; return d.qid }(t), T.exists(i) && (function (e) { let t = !1; if (!e || !e.type) return !0; const n = g[e.type]; return n && (n.count += 1, n.count > n.limit && (t = !0, n.count === n.limit + 1 && O("DEFAULT", { type: 16, dataLimit: { messageType: e.type, maxCount: n.limit } }))), t }(r) || O(i, r))) }, resetFlushTimer: function (e) { e = e || d.qid, T.exists(e) && function (e) { let t; e && L(e) && (t = T.get(e), t.timerInterval && k(e, t.timerInterval)) }(e) }, setXHRLog: function () { y = !y } } })), TLT.addService("browserBase", (function (e) { "use strict"; let t; const n = e.utils, r = { optgroup: !0, option: !0, nobr: !0 }, i = {}; let o, a, s, l, c, u, d = null, f = !1; const p = 5, h = 60; function g() { o = e.getService("config"), d = e.getService("serializer"), a = o ? o.getServiceConfig("browser") : {}, s = a.blacklist || [], l = a.customid || [], c = n.getValue(a, "normalizeTargetToParentLink", !0), u = n.getValue(a, "logAttributes", []) } function m(e, t) { let n, r, i; if (!e) return null; if (i = void 0 !== t ? t : e.id, !i || "string" != typeof i) return null; for (n = 0, r = s.length; n < r; n += 1)if ("string" == typeof s[n]) { if (i === s[n]) return null } else if ("object" == typeof s[n] && (s[n].cRegex || (s[n].cRegex = new RegExp(s[n].regex, s[n].flags)), s[n].cRegex.lastIndex = 0, s[n].cRegex.test(i))) return null; return i } const y = function () { const t = { nobr: !0 }; return function (r, i, o, a) { let s, l, c, u, d = null, f = null, p = null, h = !0, g = "", y = !1; const v = document.documentElement, w = [], b = e._getLocalTop(); if (!r || !r.nodeType) return w; if (11 === r.nodeType) { if (!(r = r.host)) return w; y = !0 } for (; h;)if (h = !1, g = n.getTagName(r), "window" !== g) if (g && !y && t[g]) r = r.parentNode, h = !0; else { for (l = m(r, a); r && (1 === r.nodeType || 9 === r.nodeType) && r != document && (i || !l); l = m(r))if (p = r.parentNode, p) { if (d = p.firstChild, !d) { w.push(["XPath Error(1)"]), r = null; break } for (s = 0; d; d = d.nextSibling)if (1 === d.nodeType && n.getTagName(d) === g) { if (d === r) { c = [g, s], y && (c.push("h"), y = !1), w[w.length] = c; break } s += 1 } 11 === p.nodeType ? (r = p.host, y = !0) : r = p, g = n.getTagName(r) } else { if (f = n.getWindow(r), !f || o) return c = [g, 0], w[w.length] = c, w.reverse(); if (f === b) return w.reverse(); r = f.frameElement, g = n.getTagName(r), p = r.parentNode } l && !i && (c = [l], y && (c.push("h"), y = !1), w[w.length] = c, n.isIFrameDescendant(r) ? (h = !0, r = n.getWindow(r).frameElement) : o || v.contains(r) || r.getRootNode && (u = r.getRootNode(), u && (r = u.host, y = !0, h = !0))), a = void 0 } return w.reverse() } }(); function v(e) { let t = "null"; return e && e.length ? (t = d.serialize(e, "json"), t) : t } function w(e, t, n, r) { let i; const o = y(e, !!t, !!r); return i = n ? o : v(o), i } function b(e) { return e && void 0 !== e.originalEvent && void 0 !== e.isDefaultPrevented && !e.isSimulated } function T(e) { return e ? (e.type && 0 === e.type.indexOf("touch") && (b(e) && (e = e.originalEvent), "touchstart" === e.type ? e = e.touches[e.touches.length - 1] : "touchend" === e.type && (e = e.changedTouches[0])), e) : null } function S(e) { let t = 0, n = 0; const r = document.documentElement, i = document.body; return (e = T(e)) && (e.pageX || e.pageY ? (t = e.pageX, n = e.pageY) : (e.clientX || e.clientY) && (t = e.clientX, n = e.clientY, r ? (t = e.clientX + r.scrollLeft - r.clientLeft, n = e.clientY + r.scrollTop - r.clientTop) : i && (t = e.clientX + i.scrollLeft - i.clientLeft, n = e.clientY + i.scrollTop - i.clientTop))), { x: t, y: n } } function _(e, t) { this.x = Math.round(e || 0), this.y = Math.round(t || 0) } function x(e, t) { this.width = Math.round(e || 0), this.height = Math.round(t || 0) } function E(e, t) { t = function (e) { let t, i, o, a = null; if (!e || !e.type) return null; if (0 === e.type.indexOf("touch")) a = T(e).target; else if ("function" == typeof e.composedPath) if (o = e.composedPath(), o && o.length) { if (a = o[0], c) for (t = 0, i = o.length; t < i; t += 1)if ("a" === n.getTagName(o[t])) { a = o[t]; break } } else a = e.target || window.window; else a = e.srcElement ? e.srcElement : e.target; for (; a && r[n.getTagName(a)] && a.parentElement;)a = a.parentElement; return 9 === a.nodeType && a.documentElement && (a = a.documentElement), a }(e); const i = this.examineID(t), o = function (e) { const t = { type: null, subType: null }; return e ? (t.type = n.getTagName(e), t.subType = e.type || null, t) : t }(t), a = this.examinePosition(e, t), s = t && t.getAttribute ? t.getAttribute("aria-label") : null; s && (this.accessibility = { id: s }), this.attributes = function (e) { let t, n, r, i, o; const a = {}; if (!e || !e.hasAttribute) return a; for (t = 0, n = u.length, o = 0; t < n && o < p; t += 1)r = u[t], e.hasAttribute(r) && (i = e.getAttribute(r) || "", a[r] = i.slice(0, h), o += 1); return a }(t), t && t.innerText && (this.attributes.innerText = n.trim(t.innerText).slice(0, h)), this.element = t, this.id = i.id, this.idType = i.idType, this.type = o.type, this.subType = o.subType, this.state = this.examineState(t), this.position = new _(a.x, a.y), this.position.relXY = a.relXY, this.size = new x(a.width, a.height), this.xPath = i.xPath, this.name = i.name } function C(e) { let t, r, i; if (!e || !e.getBoundingClientRect) return { x: 0, y: 0, width: 0, height: 0 }; try { t = e.getBoundingClientRect(), i = function (e) { const t = { left: -1, top: -1 }, n = (e = e || document).documentElement || e.body.parentNode || e.body; return t.left = Math.round("number" == typeof window.pageXOffset ? window.pageXOffset : n.scrollLeft), t.top = Math.round("number" == typeof window.pageYOffset ? window.pageYOffset : n.scrollTop), t }(document) } catch (e) { return { x: 0, y: 0, width: 0, height: 0 } } const o = { x: t.left + i.left, y: t.top + i.top, width: t.right - t.left, height: t.bottom - t.top }; return n.isIE && (o.x -= document.documentElement.clientLeft, o.y -= document.documentElement.clientTop, r = function () { let e, t, n, r = 1; if (document.body.getBoundingClientRect) { try { e = document.body.getBoundingClientRect() } catch (e) { return r } t = e.right - e.left, n = document.body.offsetWidth, r = Math.round(t / n * 100) / 100 } return r }(), 1 !== r && (o.x = Math.round(o.x / r), o.y = Math.round(o.y / r), o.width = Math.round(o.width / r), o.height = Math.round(o.height / r))), o } function O() { let e = n.getOrientationAngle(); return n.isLandscapeZeroDegrees && (180 === Math.abs(e) || 0 === Math.abs(e) ? e = 90 : 90 !== Math.abs(e) && 270 !== Math.abs(e) || (e = 0)), e } function k(r) { let i; return t = function (t) { let n, r, i, o; if (t) return t; const a = (e.getCoreConfig() || {}).modules; for (o in t = {}, a) if (Object.prototype.hasOwnProperty.call(a, o) && a[o].events) for (n = 0, r = a[o].events.length; n < r; n += 1)i = a[o].events[n], i.state && (t[i.name] = i.state); return t }(t), t[r.type] && (i = n.getValue(r, t[r.type], null)), i } function L(e) { this.data = e.data || null, this.delegateTarget = e.delegateTarget || null, (e.gesture || e.originalEvent && e.originalEvent.gesture) && (this.gesture = e.gesture || e.originalEvent.gesture, this.gesture.idType = new E(this.gesture, this.gesture.target).idType); const t = S(e = function (e) { let t, r, i, o = e || window.event, a = !1, s = null; const l = document.documentElement, c = document.body; if (b(o) && (o = o.originalEvent), void 0 !== e && void 0 !== o.target || (o.target = o.srcElement || window.window, o.timeStamp = Number(new Date), null !== o.pageX && void 0 !== o.pageX || (o.pageX = o.clientX + (l && l.scrollLeft || c && c.scrollLeft || 0) - (l && l.clientLeft || c && c.clientLeft || 0), o.pageY = o.clientY + (l && l.scrollTop || c && c.scrollTop || 0) - (l && l.clientTop || c && c.clientTop || 0)), o.preventDefault = function () { this.returnValue = !1 }, o.stopPropagation = function () { this.cancelBubble = !0 }), "click" === o.type) { for (t = o.composedPath ? o.composedPath() : [], i = 0; i < t.length; i += 1)if (r = n.getTagName(t[i]), "button" === r) { a = !0, s = t[i]; break } if (a) return { originalEvent: o, target: s, srcElement: s, type: o.type, pageX: o.pageX, pageY: o.pageY } } return o }(e)); this.custom = !1, this.nativeEvent = !0 === this.custom ? null : e, this.position = new _(t.x, t.y), this.target = new E(e, e.target), this.orientation = O(); const r = k(e); r && (this.target.state = r), this.timestamp = (new Date).getTime(); const i = function (e, t) { const n = { type: null, subType: null }; if (!e) return n; let r = e.type; switch (r) { case "focusin": r = "focus"; break; case "focusout": r = "blur" }return n.type = r, n }(e, this.target); this.type = i.type, this.subType = i.subType } function D(e, t, r) { let i = [], o = []; if (!(this instanceof D)) return null; if (!e || !e.nodeType) return this.fullXpath = "", this.xpath = "", this.fullXpathList = [], void (this.xpathList = []); 3 === e.nodeType && (e = e.parentElement), o = y(e, !1, t, r); const a = o[0]; i = o.length && (1 === a.length || 2 === a.length && "h" === a[1]) ? y(e, !0, t) : n.clone(o), this.xpath = v(o), this.xpathList = o, this.fullXpath = v(i), this.fullXpathList = i; const s = i[i.length - 1]; this.isShadowHost = !!s && "h" === s[s.length - 1], this.applyPrefix = function (e) { let t; if (!(e instanceof D && e.fullXpathList.length)) return; const r = e.fullXpathList[e.fullXpathList.length - 1]; t = this.fullXpathList.shift(), n.isEqual(t[0], r[0]) ? (this.fullXpathList = e.fullXpathList.concat(this.fullXpathList), this.fullXpath = v(this.fullXpathList), t = this.xpathList.shift(), 1 !== t.length ? (this.xpathList = e.xpathList.concat(this.xpathList), this.xpath = v(this.xpathList)) : this.xpathList.unshift(t)) : this.fullXpathList.unshift(t) }, this.compare = function (e) { return e instanceof D ? this.fullXpathList.length - e.fullXpathList.length : 0 }, this.isSame = function (e) { let t = !1; return e instanceof D ? (0 === this.compare(e) && (t = this.fullXpath === e.fullXpath), t) : t }, this.containedIn = function (e, t) { let r, i, o, a; if (!(e instanceof D)) return !1; if (e.fullXpathList.length > this.fullXpathList.length) return !1; for (r = 0, o = e.fullXpathList.length; r < o; r += 1)if (!n.isEqual(e.fullXpathList[r], this.fullXpathList[r])) return !1; if (!t) for (i = r, o = this.fullXpathList.length; i < o; i += 1)if (a = this.fullXpathList[i], "h" === a[a.length - 1]) return !1; return !0 } } return i.xpath = function (e, t) { let r, i, o, a, s, l, c, u = null, f = null, p = !1; if (!e) return null; if (u = d.parse(e), r = t = t || document, !u) return null; for (o = 0, l = u.length; o < l && r; o += 1) { if (f = u[o], p = f.length > 1 && "h" === f[f.length - 1], 1 === f.length || 2 === f.length && p) r = t.getElementById ? t.getElementById(f[0]) : t.querySelector ? t.querySelector("#" + f[0]) : null; else { for (a = 0, s = -1, c = r.childNodes.length; a < c; a += 1)if (1 === r.childNodes[a].nodeType && n.getTagName(r.childNodes[a]) === f[0].toLowerCase() && (s += 1, s === f[1])) { r = r.childNodes[a]; break } if (s !== f[1]) return null } if (!r) return null; if (p && o < l - 1) { if (!r.shadowRoot) return null; r = r.shadowRoot, t = r } i = n.getTagName(r), ("frame" === i || "iframe" === i) && o < l - 1 && (r = n.getIFrameWindow(r).document, t = r) } return r !== t && r ? r : null }, E.HTML_ID = -1, E.XPATH_ID = -2, E.ATTRIBUTE_ID = -3, E.prototype.examineID = function (e, t) { const r = { id: "", idType: 0, xPath: "", name: "" }; let i, o, a = l.length; const s = document.documentElement; if (!e) return r; r.xPath = w(e, !1, !1, t), r.name = e.name; try { if (o = "function" != typeof s.contains || s.contains(e), (t || o) && (!n.getWindow(e) || !n.isIFrameDescendant(e))) if (m(e)) r.id = e.id, r.idType = E.HTML_ID; else if (l.length && e.attributes) for (; a;)a -= 1, i = e.attributes[l[a]], void 0 !== i && (r.id = l[a] + "=" + (i.value || i), r.idType = E.ATTRIBUTE_ID) } catch (e) { } return r.id || (r.id = r.xPath, "null" !== r.id && (r.idType = E.XPATH_ID)), r }, E.prototype.examineState = function (e) { return n.getTargetState(e) }, E.prototype.examinePosition = function (e, t) { const r = S(e), i = C(t); return i.x = r.x || r.y ? Math.round(Math.abs(r.x - i.x)) : i.width / 2, i.y = r.x || r.y ? Math.round(Math.abs(r.y - i.y)) : i.height / 2, i.relXY = n.calculateRelativeXY(i), i }, D.prototype = {}, { init: function () { f || (g(), o && o.subscribe("configupdated", g), f = !0) }, destroy: function () { o && o.unsubscribe("configupdated", g), f = !1 }, WebEvent: L, ElementData: E, Xpath: D, processDOMEvent: function (t) { e.isInitialized() && e._publishEvent(new L(t)) }, getNormalizedOrientation: O, getXPathFromNode: function (e, t, n, r, i) { return w(t, n, r, i) }, getNodeFromID: function (e, t, n) { const r = "-1", o = "-2", a = "-3"; let s, l = null; if (!e || !t) return l; const c = n || window.document; return (t = t.toString()) == r ? c.getElementById ? l = c.getElementById(e) : c.querySelector && (l = c.querySelector("#" + e)) : t == a ? (s = e.split("="), c.querySelector && (l = c.querySelector("[" + s[0] + '="' + s[1] + '"]'))) : t == o && (l = i.xpath(e, c)), l }, queryDom: i } })), TLT.addService("browser", (function (e) { "use strict"; const t = e.utils, n = e.getService("config"), r = e.getService("browserBase"); let i = null, o = null; const a = n ? n.getServiceConfig("browser") : {}, s = t.getValue(a, "useCapture", !0), l = t.getValue(a, "usePassive", !0); let c = !1; const u = { NO_QUERY_SELECTOR: "NOQUERYSELECTOR" }, d = { list2Array: function (e) { const t = e.length, n = []; if (void 0 === e.length) return [e]; for (let r = 0; r < t; r += 1)n[r] = e[r]; return n }, find: function (e, t, n) { return n = n || "css", this.list2Array(this[n](e, t)) }, css: function (e, t) { return (t = t || document).querySelectorAll(e) } }, f = function () { const e = new t.WeakMap; return { add: function (t) { const n = e.get(t) || [(i = t, function (e) { const t = new r.WebEvent(e); "resize" === e.type || "hashchange" === e.type ? setTimeout((function () { i(t) }), 5) : i(t) }), 0]; var i; return n[1] += 1, e.set(t, n), n[0] }, find: function (t) { const n = e.get(t); return n ? n[0] : null }, remove: function (t) { const n = e.get(t); n && (n[1] -= 1, n[1] <= 0 && e.remove(t)) } } }(); function p(e) { const n = { capture: s, passive: l }; return t.isIE ? s : t.mixin(n, e) } function h() { if (d.xpath = r.queryDom.xpath, document.querySelectorAll || e.fail("querySelectorAll does not exist!", u.NO_QUERY_SELECTOR), "function" == typeof document.addEventListener) i = function (e, t, n, r) { r = p(r), e.addEventListener(t, n, r) }, o = function (e, t, n, r) { r = p(r), e.removeEventListener(t, n, r) }; else { if (void 0 === document.attachEvent) throw new Error("Unsupported browser"); i = function (e, t, n) { e.attachEvent("on" + t, n) }, o = function (e, t, n) { e.detachEvent("on" + t, n) } } c = !0 } return { init: function () { c || h() }, destroy: function () { c = !1 }, getServiceName: function () { return "W3C" }, query: function (e, t, n) { try { return d.find(e, t, n)[0] || null } catch (e) { return [] } }, queryAll: function (e, t, n) { try { return d.find(e, t, n) } catch (e) { return [] } }, matches: function (e, t) { let n = !1; try { t && e && (t.matches ? n = t.matches(e) : t.msMatchesSelector && (n = t.msMatchesSelector(e))) } catch (e) { } return n }, subscribe: function (e, t, n, r) { const o = f.add(n); i(t, e, o, r) }, unsubscribe: function (e, t, n, r) { const i = f.find(n); if (i) { try { o(t, e, i, r) } catch (e) { } f.remove(n) } } } })), TLT.addService("ajax", (function (e) { "use strict"; const t = e.utils; let n, r = !1, i = !1, o = !1; function a(e) { let t, n = !1; const r = function (e) { let t = "", n = "?"; for (t in e) Object.prototype.hasOwnProperty.call(e, t) && (n += encodeURIComponent(t) + "=" + encodeURIComponent(e[t]) + "&"); return n.slice(0, -1) }(e.headers); return t = "string" == typeof e.data ? e.data : e.data ? new Uint8Array(e.data) : "", n = navigator.sendBeacon(e.url + r, t), n } function s(e) { let r, i, o = n(), a = [["X-Requested-With", "XMLHttpRequest"]], s = 0, l = "", c = null; const u = "boolean" != typeof e.async || e.async; for (e.headers && (a = a.concat(function (e) { let t = ""; const n = []; for (t in e) Object.prototype.hasOwnProperty.call(e, t) && n.push([t, e[t]]); return n }(e.headers))), e.contentType && a.push(["Content-Type", e.contentType]), o.open(e.type.toUpperCase(), e.url, u), r = 0, i = a.length; r < i; r += 1)l = a[r], l[0] && l[1] && o.setRequestHeader(l[0], l[1]); e.error && (e.error = function (e) { if ("function" == typeof e) return function (n) { let r = !1; if (!n) return; const i = n.target; if (!i) return e(n); const o = i.status; o >= 200 && o < 300 && (r = !0), e({ headers: t.extractResponseHeaders(i.getAllResponseHeaders()), responseText: i.responseText, statusCode: o, statusText: i.statusText, id: i.id, success: r }) } }(e.error), o.addEventListener("error", e.error)), o.onreadystatechange = c = function () { 4 === o.readyState && (o.onreadystatechange = c = function () { }, e.timeout && window.clearTimeout(s), e.oncomplete({ id: e.id, headers: t.extractResponseHeaders(o.getAllResponseHeaders()), responseText: o.responseText || null, statusCode: o.status, statusText: o.statusText, success: o.status >= 200 && o.status < 300 }), o = null) }, o.send(e.data || null), c(), e.timeout && (s = window.setTimeout((function () { o && (o.onreadystatechange = function () { }, 4 !== o.readyState && (o.abort(), "function" == typeof e.error && e.error({ id: e.id, statusCode: o.status, statusText: "timeout", success: !1 })), e.oncomplete({ id: e.id, headers: t.extractResponseHeaders(o.getAllResponseHeaders()), responseText: o.responseText || null, statusCode: o.status, statusText: "timeout", success: !1 }), o = null) }), e.timeout)) } return { init: function () { o || function () { const a = e.getServiceConfig("queue"); n = void 0 !== window.XMLHttpRequest ? function () { return new XMLHttpRequest } : function () { return new ActiveXObject("Microsoft.XMLHTTP") }, a && (r = t.getValue(a, "useBeacon", !0) && "function" == typeof navigator.sendBeacon, i = t.getValue(a, "useFetch", !0) && "function" == typeof window.fetch), o = !0 }() }, destroy: function () { o = !1 }, sendRequest: function (e) { let t, n = !0; e.type = e.type || "POST", !e.isUnloading && e.async || !r || (n = !1, t = a(e), t || (n = !0)), n && (e.async && i && !e.timeout ? function (e) { const t = e.headers || {}, n = e.id || 0, r = { method: e.type, headers: t, body: e.data, mode: e.isCrossOrigin ? "cors" : "same-origin", credentials: e.isCrossOrigin ? "omit" : "same-origin", keepalive: !e.isCrossOrigin && e.isUnloading, cache: "no-store" }, i = e.oncomplete || function () { }; t["X-Requested-With"] = "fetch", window.fetch(e.url, r).then((function (e) { const t = { success: e.ok, statusCode: e.status, statusText: e.statusText, id: n }; t.success ? e.text().then((function (e) { try { t.data = JSON.parse(e) } catch (n) { t.data = e } i(t) })).catch((function (e) { t.statusCode = 1, t.statusText = e.message, i(t) })) : i(t) })).catch((function (e) { const t = { success: !1, statusCode: 2, statusText: e.message, id: n }; i(t) })) }(e) : s(e)) } } })), TLT.addService("domCapture", (function (e) { "use strict"; let t = e.getService("config"); const n = e.getService("browserBase"), r = e.getService("browser"); let i, o = e.getService("message"); const a = { maxMutations: 100, maxLength: 1e6, captureShadowDOM: !1, captureDynamicStyles: !1, captureHREFStyles: !1, captureFrames: !1, removeScripts: !0, removeComments: !0, captureStyle: !0 }, s = { childList: !0, attributes: !0, attributeOldValue: !0, characterData: !0, subtree: !0 }; let l, c = void 0 !== window.MutationObserver, u = s; const d = [], f = []; let p; const h = []; let g = [], m = [], y = [], v = 0, w = 100, b = !1, T = !1, S = !1, _ = function () { }, x = function () { }, E = function () { }; const C = e._publishEvent; let O = !1; const k = e.utils; let L, D; const M = Object.getOwnPropertyDescriptor(Document.prototype, "styleSheets"), I = Object.getOwnPropertyDescriptor(Document.prototype, "adoptedStyleSheets"), P = {}, R = {}, A = {}; let N; function j(e) { let t, n; if (e) for (t = 0, n = e.length; t < n; t += 1)delete e[t].oldValue; return e } function z(e, t) { let n, r, i = -1; if (!e || !t) return i; for (n = 0, r = e.length; n < r; n += 1)if (e[n].name === t) { i = n; break } return i } function V(e, t) { let n, r, i, o; for (n = 0, r = e.length, o = !1; n < r; n += 1)if (i = e[n], i.name === t.name) { i.oldValue === t.value ? e.splice(n, 1) : i.value = t.value, o = !0; break } return o || e.push(t), e } function H(e, t) { let n, r, i, o, a, s, l, c = 0; for (e.removedNodes = t.removedNodes.length, e.addedNodes = k.convertToArray(t.addedNodes), n = 0, o = g.length; n < o; n += 1)if (s = g[n], e.isSame(s)) { if (e.removedNodes) for (r = 0; r < t.removedNodes.length; r += 1)i = s.addedNodes.indexOf(t.removedNodes[r]), -1 !== i && (s.addedNodes.splice(i, 1), e.removedNodes -= 1); if (s.removedNodes += e.removedNodes, s.addedNodes.concat(e.addedNodes), !s.removedNodes && !s.addedNodes.length) { for (l = !1, r = 0; r < g.length; r += 1)if (s !== g[r] && g[r].containedIn(s)) { l = !0; break } l || (g.splice(n, 1), c = -1) } a = !0; break } return a || (g.push(e), c = 1), c } function F(e, t) { let n, r, i, o, a, s = !1; for (n = 0, i = g.length; !s && n < i; n += 1)if (a = g[n], e.containedIn(a)) for (o = a.addedNodes, r = 0; r < o.length; r += 1)if (o[r].contains && o[r].contains(t)) { s = !0; break } return s } function U(e, t) { let r, i, a, s = null, l = 0; const c = t.attributeName; if ("checked" === c || "selected" === c) { if (s = n.ElementData.prototype.examineID(t.target), o.isPrivacyMatched(s)) return l; s = null } "value" === c && (s = n.ElementData.prototype.examineID(t.target), s.currState = k.getTargetState(t.target) || {}, s.currState.value ? o.applyPrivacyToTarget(s) : s = null), e.attributes = [{ name: c, oldValue: t.oldValue, value: s ? s.currState.value : t.target.getAttribute(c) }]; const u = e.attributes[0]; if (u.oldValue === u.value) return l; for (r = 0, i = y.length, a = !1; r < i; r += 1)if (s = y[r], e.isSame(s)) { s.attributes = V(s.attributes, u), s.attributes.length ? F(e, t.target) && (y.splice(r, 1), l = -1) : (y.splice(r, 1), l = -1), a = !0; break } return a || F(e, t.target) || (y.push(e), l = 1), l } function X() { return new window.MutationObserver((function (t) { t && (!function (e) { let t, r, i, o, a; if (e && e.length) if (b) v += e.length; else { for (t = 0, r = e.length; t < r && v < w; t += 1)if (o = e[t], a = new n.Xpath(o.target), a && (i = a.fullXpathList, i.length && "html" === i[0][0])) switch (o.type) { case "characterData": case "childList": v += H(a, o); break; case "attributes": v += U(a, o); break; default: k.clog("Unknown mutation type: " + o.type) }v >= w && (b = !0, v += r - t) } }(t), k.clog("Processed [" + t.length + "] mutation records."), e.invokeMutationCallbacks(t)) })) } function q(e) { const t = p.call(this, e); return l && t && l.observe(t, u), t } function B(e, t) { return this.updateOwner(), this.insertRuleOriginal(e, t) } function Y(e) { this.deleteRuleOriginal(e), this.updateOwner() } function W(e) { this.updateOwner(), this.replaceSyncOriginal(e) } function K(e) { return this.updateOwner(), this.replaceOriginal(e) } function Q() { if (this.ownersReference) { const e = Object.keys(this.ownersReference); for (let t = 0; t < e.length; t += 1) { const n = e[t]; P[n] || (m.push(n), P[n] = !0) } } } function J(e) { this.ownersReference || (this.ownersReference = {}), this.ownersReference[e] = !0, P[e] = !0 } function G(e) { this.ownersReference && delete this.ownersReference[e] } function Z(e) { e.domId = Math.random().toString(16).slice(2), R[e.domId] = e, P[e.domId] = !0; let t = [].concat.apply([], e.adoptedStyleSheets); if (t = t.concat.apply(t, e.styleSheets), t) for (let n = 0; n < t.length; n += 1) { const r = t[n]; r.ownersReference || (r.ownersReference = {}), r.ownersReference[e.domId] = !0 } } function $(e) { if (e && e.alreadyModified) return; e.alreadyModified = !0; const t = Object.getOwnPropertyDescriptor(e.Document.prototype, "adoptedStyleSheets"), n = Object.getOwnPropertyDescriptor(e.Document.prototype, "styleSheets"); return Object.defineProperty(e.Document.prototype, "adoptedStyleSheets", { set: function (e) { let n, r; this.domId || Z(this); const i = this.adoptedStyleSheets; if (i.length > 0) for (n = 0; n < i.length; n += 1)r = i[n], r.removeOwnership(this.domId); for (n = 0; n < e.length; n += 1)r = e[n], r.publishOwnership(this.domId); t.set.call(this, e) } }), Object.defineProperty(e.Document.prototype, "styleSheets", { get: function () { let e, t; const r = n.get.call(this); for (this.domId || Z(this), e = 0; e < r.length; e += 1)t = r[e], t.publishOwnership(this.domId); return r } }), e.CSSStyleSheet.prototype.insertRuleOriginal = e.CSSStyleSheet.prototype.insertRule, e.CSSStyleSheet.prototype.deleteRuleOriginal = e.CSSStyleSheet.prototype.deleteRule, e.CSSStyleSheet.prototype.insertRule = B, e.CSSStyleSheet.prototype.deleteRule = Y, e.CSSStyleSheet.prototype.replaceSyncOriginal = e.CSSStyleSheet.prototype.replaceSync, e.CSSStyleSheet.prototype.replaceOriginal = e.CSSStyleSheet.prototype.replace, e.CSSStyleSheet.prototype.replaceSync = W, e.CSSStyleSheet.prototype.replace = K, e.CSSStyleSheet.prototype.publishOwnership = J, e.CSSStyleSheet.prototype.removeOwnership = G, void (e.CSSStyleSheet.prototype.updateOwner = Q) } function ee(n) { let r, f, g, m, y, v; const b = t.getCoreConfig(); if (t.subscribe("configupdated", E), o = e.getService("message"), i = n, i.options = k.mixin({}, a, i.options), N = k.getValue(i.options, "removeInnerHTMLRegex"), c = c && k.getValue(i, "diffEnabled", !0), w = k.getValue(i.options, "maxMutations", 100), c && (u = k.getValue(i, "diffObserverConfig", s), l = X(), d.push(window)), v = i.options.captureShadowDOM && Element.prototype.attachShadow, v && window.ShadyDOM && window.ShadyDOM.inUse && (i.options.captureShadowDOM = !1, v = !1), v) for (g in b.modules) if (Object.prototype.hasOwnProperty.call(b.modules, g)) for (y = b.modules[g].events || [], r = 0, f = y.length; r < f; r += 1)y[r].attachToShadows && (m = y[r].name, -1 === k.indexOf(h, m) && h.push(m)); i.options.captureDynamicStyles && document.adoptedStyleSheets && ($(window), v && (L = Object.getOwnPropertyDescriptor(ShadowRoot.prototype, "adoptedStyleSheets"), D = Object.getOwnPropertyDescriptor(ShadowRoot.prototype, "styleSheets"), Object.defineProperty(ShadowRoot.prototype, "adoptedStyleSheets", { set: function (e) { let t, n; this.domId || Z(this); const r = this.adoptedStyleSheets; if (r.length > 0) for (t = 0; t < r.length; t += 1)n = r[t], n.removeOwnership(this.domId); for (t = 0; t < e.length; t += 1)n = e[t], n.publishOwnership(this.domId); L.set.call(this, e) } }), Object.defineProperty(ShadowRoot.prototype, "styleSheets", { get: function () { let e, t; const n = D.get.call(this); for (this.domId || Z(this), e = 0; e < n.length; e += 1)t = n[e], t.publishOwnership(this.domId); return n } })), Z(document)), l && (l.observe(window.document, u), !p && k.getValue(i, "options.captureShadowDOM", !1) && (p = Element.prototype.attachShadow, Element.prototype.attachShadow = q), O = !0), S = !0 } function te(e, t, n) { let r, i, o, a; const s = []; if (!e || !t) return s; n && 2 === n.length && (i = n[0], o = n[1]); const l = e.querySelectorAll(t); if (l && l.length) for (r = l.length - 1; r >= 0; r -= 1)a = l[r], i ? a[i] === o && s.push(a) : s.push(a); return s } function ne(e, t, n) { let r, i; const o = te(e, t, n); for (r = o.length - 1; r >= 0; r -= 1)i = o[r], i.parentNode.removeChild(i); return e } function re(e, t) { let n, r; for (n = 0; e.hasChildNodes() && n < e.childNodes.length; n += 1)r = e.childNodes[n], r.nodeType === t ? (e.removeChild(r), n -= 1) : r.hasChildNodes() && re(r, t); return e } function ie(e, t) { let n, r, o; i.options.captureShadowDOM && console.warn("Please disable the captureShadoDOM flag in the configuration file as this website is most likely using a synthetic Shadow DOM polyfill"); const a = e && e.querySelectorAll("*"), s = a && a.length || 0; for (n = 0; n < s; n += 1)r = a[n], o = r.shadowRoot, o ? o.children.length > 0 && ie(o, t) : "INPUT" === r.tagName && (t[t.length] = r) } function oe(e, t, n) { let r, i, o; const a = t.length; if (e.length === a || (ie(n, e = []), e.length === a)) for (r = 0; r < a; r += 1)switch (i = e[r], o = t[r], o.type) { case "checkbox": case "radio": i.checked ? o.setAttribute("checked", "checked") : o.removeAttribute("checked"); break; default: o.setAttribute("value", i.value), o.getAttribute("type") || o.setAttribute("type", "text") } } function ae(e, t) { let n, r = null; if (e) switch (n = e.nodeType || -1, n) { case 11: r = e.innerHTML; break; case 9: r = e.documentElement ? e.documentElement.outerHTML : ""; break; case 1: r = t ? e.innerHTML : e.outerHTML }return r } function se(e) { let t, n, i; for (e.TLTListeners = e.TLTListeners || {}, t = 0, n = h.length; t < n; t += 1)i = h[t], e.TLTListeners[i] || (r.subscribe(i, e, C), e.TLTListeners[i] = !0) } function le(e, t, r, i) { let o, a, s, d, p, h; const g = { shadows: [] }; if (!e || !i && !e.children) return g; for (p = i ? [e] : e.children, o = 0, a = p.length; o < a; o += 1) { if (d = p[o], d.shadowRoot) { h = new n.Xpath(d), s = x(d.ownerDocument, d.shadowRoot, "", r); const e = { root: s.root, originalSize: s.originalSize, xpath: h.xpath }; if (s.frames && s.frames.length > 0 && (e.frames = s.frames), g.shadows.push(e), g.shadows = g.shadows.concat(s.shadows), se(d.shadowRoot), c) try { l.observe(d.shadowRoot, u), d.shadowRoot.TLTListeners.mutation = !0, -1 === k.indexOf(f, d) && f.push(d) } catch (e) { k.clog("Failed to observe shadow root.", e, d) } } s = le(d, null, r), g.shadows = g.shadows.concat(s.shadows) } return g } function ce(e) { let t, n, r, i = []; if (!e || !e.children) return i; const o = e.children; for (t = 0, n = o.length; t < n; t += 1)r = o[t], r.shadowRoot && (r.shadowRoot.TLTListeners || i.push([r, r.shadowRoot]), i = i.concat(ce(r.shadowRoot))), i = i.concat(ce(r)); return i } function ue(e, t) { let n, r, i, o; if (!e || !t) return; if (!t.captureShadowDOM) return; const a = ce(e); for (n = 0, r = a.length, i = []; n < r; n += 1)o = le(a[n][0], 0, t, !0), i = i.concat(o.shadows); return i } function de(t, n) { let r; r = x(t, t, null, n), r || (r = {}), r.charset = t.characterSet || t.charset; const i = k.getOriginAndPath(t.location); return r.host = i.origin, r.url = e.normalizeUrl("", i.path, 12), r } function fe(e) { let t, r, i, o, a, s, l, c, u, d, f; const p = new RegExp("^data:image/(.*?);base64"), h = { fullDOM: !1, diffs: [], attributeDiffs: {} }; !function (e) { let t, n, r; if (e && e.length) for (e = e.sort((function (e, t) { return e.compare(t) })), t = 0; t < e.length; t += 1)for (r = e[t], n = t + 1; n < e.length; n += 0)e[n].containedIn(r) ? e.splice(n, 1) : n += 1 }(g), function () { let e, t, n, r; for (e = 0, n = g.length; e < n && y.length; e += 1)for (r = g[e], t = 0; t < y.length; t += 1)y[t].containedIn(r) && (y.splice(t, 1), t -= 1) }(); const v = e.captureShadowDOM; for (e.captureShadowDOM = !1, t = 0, r = g.length; t < r; t += 1)if (d = g[t], u = n.getNodeFromID(d.xpath, -2), u && (!d.isShadowHost || (u = u.shadowRoot, u.TLTListeners))) { if (u === window.document.body || u === window.document.documentElement) return e.captureShadowDOM = v, de(window.document, e); i = x(window.document, u, d, e), delete i.originalSize, i.shadows && 0 === i.shadows.length && delete i.shadows, i.frames && 0 === i.frames.length && delete i.frames, i.xpath = d.xpath, h.diffs.push(i) } for (t = 0; t < m.length; t += 1)a = m[t], s = R[a], c = pe(s), l = new n.Xpath(s), l && "null" !== l.xpath ? (l = l.xpath.slice(0, -1), l += ',["' + a + '"]]') : l = '[["' + a + '"]]', i = { root: c, xpath: l }, P[a] = !1, h.diffs.push(i); function w(e, t) { e && e.name && (h.attributeDiffs[i.xpath][e.name] = { value: e.value }) } function b(t) { let n, r, i; for (n = 0, i = t.length; n < i; n += 1)if (r = t[n], "src" === r.name && p.test(r.value) && r.value.length > e.discardBase64) { r.value = "", t.push({ name: "removedByUIC", value: !0 }); break } return t } for (t = 0, r = y.length; t < r; t += 1)d = y[t], o = z(d.attributes, "id"), o > -1 && (u = n.getNodeFromID(d.fullXpath, -2), u && (d.xpath = d.fullXpath)), f = j(d.attributes), Object.prototype.hasOwnProperty.call(e, "discardBase64") && (u = n.getNodeFromID(d.xpath, -2), u || (u = n.getNodeFromID(d.fullXpath, -2)), u && "img" === u.tagName.toLowerCase() && f && (f = b(f))), i = { xpath: d.xpath, attributes: f }, h.diffs.push(i), h.attributeDiffs[i.xpath] = {}, k.forEach(i.attributes, w); e.captureShadowDOM = v; const T = ue(window.document, e); return T && T.length && (h.shadows = T), h } function pe(e) { let t, n, r, o, a, s, l; const c = i.options.captureHREFStyles; if (!P[e.domId]) return A[e.domId]; if (o = [].concat.apply([], e.adoptedStyleSheets), o = o.concat.apply(o, e.styleSheets), o && o.length > 0) { for (t = [], s = 0; s < o.length; s += 1)if (a = o[s], !(!c && !e.isDocumentFromIframe && a.href || a.ownerNode && a.ownerNode.textContent)) { try { r = a.cssRules } catch (e) { continue } for (l = 0; l < r.length; l += 1)t.push(r[l].cssText) } t.length > 0 && (n = '<style id="' + e.domId + '">' + t.join(" ") + "</style>", A[e.domId] = n) } return P[e.domId] = !1, n } return _ = function (e) { let t = null; return function (e) { let t, n = !1; if (e && "object" == typeof e) switch (t = e.nodeType || -1, t) { case 9: case 1: n = !0 }return n }(e) && (t = e.cloneNode(!0), !t && e.documentElement && (t = e.documentElement.cloneNode(!0))), t }, x = function (t, n, r, a) { let s, l, c, u, d, f, p = !0, h = {}; const g = i.options.captureDynamicStyles; if (!t || !n) return h; const m = ae(n); if (m && (h.originalSize = m.length), s = _(n), !s && n.host) p = !1, u = document.createElement("div"), u.id = "srph-" + Date.now(), f = ae(n), N && (f = f.replace(N, "")), u.innerHTML = f, s = u; else if (!s) return h; s && (a.removeScripts && (ne(s, "script"), ne(s, "noscript")), a.keepImports || ne(s, "link", ["rel", "import"]), a.removeComments && re(s, 8), a.captureStyle ? a.useACS && function (e, t) { let n, r, i, o, a, s, l; if (!e || !t || !t.querySelectorAll) return; const c = e.querySelectorAll("style"), u = t.querySelectorAll("style"); for (n = 0, l = c.length; n < l; n += 1)if (s = c[n], s.sheet) { for (i = s.sheet.cssRules, r = 0, o = i.length, a = []; r < o; r += 1)a.push(i[r].cssText); a.length && (u[n].innerHTML = a.join("\n")) } }(n, s) : ne(s, "style"), Object.prototype.hasOwnProperty.call(a, "discardBase64") && function (e, t) { let n, r; const i = te(e, "img"), o = new RegExp("^data:image/(.*?);base64"); for (n = 0; n < i.length; n++)r = i[n], o.test(r.src) && r.src.length > t && (r.src = "", r.setAttribute("removedByUIC", !0)) }(s, a.discardBase64), function (e, t) { let n, r, i, o, a; if (!e || !t) return; const s = e.querySelectorAll("select"), l = t.querySelectorAll("select"); if (s) for (i = 0, a = s.length; i < a; i += 1)for (n = s[i], r = l[i], o = 0; o < n.options.length; o += 1)o === n.selectedIndex || n.options[o].selected ? r.options[o].setAttribute("selected", "selected") : r.options[o].removeAttribute("selected") }(n, s), function (e, t) { if (!t) return; const n = e.querySelectorAll("input"), r = t.querySelectorAll("input"); r && oe(n, r, e) }(n, s), function (e, t) { let n, r, i, o; if (!e || !t) return; const a = e.querySelectorAll("textarea"), s = t.querySelectorAll("textarea"); if (a && s) for (n = 0, r = a.length; n < r; n += 1)i = a[n], o = s[n], o.setAttribute("value", i.value), o.value = o.textContent = i.value }(n, s), s = o.applyPrivacyToNode(s, r, t), a.captureFrames && (l = function (t, n, r) { let i, o, a, s, l, c, u, d, f, p, h, g, m; const y = { frames: [] }, v = ["iframe", "frame"]; for (o = 0; o < v.length; o += 1)if (s = v[o], h = t.querySelectorAll(s), g = n.querySelectorAll(s), h) for (i = 0, a = h.length; i < a; i += 1)try { l = h[i], c = k.getIFrameWindow(l), c && c.document && (r.captureAboutBlankFrames || "about:blank" !== c.location.href) && (u = c.document, u.isDocumentFromIframe || ($(c), u.isDocumentFromIframe = !0), d = x(u, u, "", r), f = "tlt-" + k.getSerialNumber(), g[i].setAttribute("tltid", f), d.tltid = f, g[i].removeAttribute("srcdoc"), m = k.getOriginAndPath(u.location), d.host = m.origin, d.url = e.normalizeUrl("", m.path, 12), d.charset = u.characterSet || u.charset, p = g[i].getAttribute("src"), p || (p = c.location.href, g[i].setAttribute("src", p)), d.root || (d.root = "<html></html>"), y.frames = y.frames.concat(d.frames), delete d.frames, y.frames.push(d)) } catch (e) { } return y }(n, s, a))), a.captureShadowDOM && (c = le(n, 0, a)), l && (h = k.mixin(h, l)), c && (h = k.mixin(h, c)); const y = (function (e) { let t, n, r = null; if (!e) return r; switch (e.nodeType) { case 1: t = e.ownerDocument, t && t.documentElement === e && (n = t.doctype); break; case 9: n = e.doctype }return n && (r = "<!DOCTYPE " + n.name + (n.publicId ? ' PUBLIC "' + n.publicId + '"' : "") + (!n.publicId && n.systemId ? " SYSTEM" : "") + (n.systemId ? ' "' + n.systemId + '"' : "") + ">"), r }(n) || "") + ae(s || n, !p); return h.root = o.applyPrivacyPatterns(y), g && document.adoptedStyleSheets && (n instanceof Document || n instanceof ShadowRoot || n.isDocumentFromIframe || "BODY" === n.nodeName && n.ownerDocument.isDocumentFromIframe) && ("BODY" === n.nodeName && (n = n.ownerDocument), n.domId || Z(n), d = pe(n), d && (n instanceof ShadowRoot ? h.root += d : h.root = h.root.replace("</body>", d + "</body>"))), h }, E = function () { t = e.getService("config"), ee(t.getServiceConfig("domCapture") || {}) }, { init: function () { t = e.getService("config"), S || ee(t.getServiceConfig("domCapture") || {}) }, destroy: function () { t.unsubscribe("configupdated", E), l && (l.disconnect(), l = null), p && Element.prototype.attachShadow === q && (Element.prototype.attachShadow = p, p = null), S = !1, I && Object.defineProperty(Document.prototype, "adoptedStyleSheets", I), M && Object.defineProperty(Document.prototype, "styleSheets", M), L && Object.defineProperty(ShadowRoot.prototype, "adoptedStyleSheets", L), D && Object.defineProperty(ShadowRoot.prototype, "styleSheets", D), CSSStyleSheet.prototype.insertRuleOriginal && (CSSStyleSheet.prototype.insertRule = CSSStyleSheet.prototype.insertRuleOriginal), CSSStyleSheet.prototype.deleteRuleOriginal && (CSSStyleSheet.prototype.deleteRule = CSSStyleSheet.prototype.deleteRuleOriginal), CSSStyleSheet.prototype.replaceSyncOriginal && (CSSStyleSheet.prototype.replaceSync = CSSStyleSheet.prototype.replaceSyncOriginal), CSSStyleSheet.prototype.replaceOriginal && (CSSStyleSheet.prototype.replace = CSSStyleSheet.prototype.replaceOriginal), CSSStyleSheet.prototype.publishOwnership && delete CSSStyleSheet.prototype.publishOwnership, CSSStyleSheet.prototype.removeOwnership && delete CSSStyleSheet.prototype.removeOwnership, CSSStyleSheet.prototype.updateOwner && delete CSSStyleSheet.prototype.updateOwner }, observeWindow: function (e) { e && (k.getValue(i, "options.captureFrames", !1) || e === window) && -1 === k.indexOf(d, e) && (d.push(e), l && O && l.observe(e.document, u)) }, captureDOM: function (e, t) { let n, r, o, a = null, s = 0; if (!S || k.isIE && document.documentMode < 11) return a; if (t = k.mixin({}, i.options, t), e = e || window.document, !T || !c || b || t.forceFullDOM) { if (l && l.disconnect(), a = de(e, t), a.fullDOM = !0, a.forced = !(!b && !t.forceFullDOM), T = !0, l) for (n = 0, r = d.length; n < r; n += 1) { o = d[n]; try { l.observe(o.document, u) } catch (e) { d.splice(n, 1), r = d.length, n -= 1 } } } else a = fe(t), a.fullDOM = !a.diffs; return c && (a.mutationCount = v), g = [], y = [], m = [], v = 0, b = !1, t.maxLength && (s = function (e) { let t, n, r, i, o, a, s, l, c = 0; if (!e) return c; if (e.root) { if (c += e.root.length, e.frames) for (s = e.frames, t = 0, r = s.length; t < r; t += 1)s[t].root && (c += s[t].root.length) } else if (e.diffs) for (t = 0, r = e.diffs.length; t < r; t += 1)if (a = e.diffs[t], c += a.xpath.length, a.root) c += a.root.length; else if (a.attributes) for (n = 0, i = a.attributes.length; n < i; n += 1)o = a.attributes[n], c += o.name.length, o.value && (c += o.value.length); if (e.shadows) for (l = e.shadows, t = 0, r = l.length; t < r; t += 1)l[t].root && (c += l[t].root.length); return c }(a), s > t.maxLength && (a = { errorCode: 101, error: "Captured length (" + s + ") exceeded limit (" + t.maxLength + ")." })), a } } })), TLT.addService("encoder", (function (e) { "use strict"; let t = {}, n = null, r = null, i = !1; function o(e) { t = e, n.subscribe("configupdated", r), i = !0 } return r = function () { n = e.getService("config"), o(n.getServiceConfig("encoder") || {}) }, { init: function () { n = e.getService("config"), i || o(n.getServiceConfig("encoder") || {}) }, destroy: function () { n.unsubscribe("configupdated", r), i = !1 }, encode: function (n, r) { let i; const o = { data: null, encoding: null, error: null }; if ("string" != typeof n && !n || !r) return o.error = "Invalid " + (n ? "type" : "data") + " parameter.", o; const a = function (n) { let r = null; return n ? (r = t[n], r && "string" == typeof r.encode && (r.encode = e.utils.access(r.encode)), r) : r }(r); if (!a) return o.error = "Specified encoder (" + r + ") not found.", o; if ("function" != typeof a.encode) return o.error = "Configured encoder (" + r + ") 'encode' method is not a function.", o; try { i = a.encode(n) } catch (e) { return o.error = "Exception " + (e.name ? e.name + " - " : "") + (e.message || e), o } return i && null !== e.utils.getValue(i, "buffer", null) ? (o.data = i.buffer, o.encoding = a.defaultEncoding, o) : (o.error = "Encoder (" + r + ") returned an invalid result.", o) } } })), TLT.addService("message", (function (e) { "use strict"; const t = e.utils, n = e.getTabId(), r = []; let i = 0, o = 0; const a = e.getStartTime(), s = window.performance && performance.timeOrigin && performance.timeOrigin < a ? Math.round(performance.timeOrigin) : a, l = Date.now() - s + 10, c = (new Date).getTimezoneOffset(), u = e.getService("browserBase"), d = e.getService("browser"); let f = e.getService("config"), p = f.getCoreConfig(), h = f.getServiceConfig("message") || {}; const g = e.normalizeUrl("", window.location.href), m = window.location.hostname; let y, v, w = Object.prototype.hasOwnProperty.call(h, "privacy") ? h.privacy : [], b = Object.prototype.hasOwnProperty.call(h, "privacyPatterns") ? h.privacyPatterns : []; const T = {}, S = "x", _ = "X", x = "9", E = "@", C = parseFloat((window.devicePixelRatio || 1).toFixed(2)), O = window.screen || {}, k = O.width || 0, L = O.height || 0, D = u.getNormalizedOrientation(); let M = k, I = L; const P = window.screen ? window.screen.height - window.screen.availHeight : 0, R = window.innerWidth || document.documentElement.clientWidth, A = window.innerHeight || document.documentElement.clientHeight; let N = !1; const j = {}; let z = !1; function V() { const e = Date.now() - s; let t = window.performance && performance.now ? Math.round(performance.now()) : e; return e - t > l && (t = e), t } function H(e) { let t = ""; if (delete e.timestamp, this.type = e.type, this.offset = V(), 2 === e.type && "LOAD" === e.screenview.type ? (r.push(V()), this.screenviewOffset = 0) : r.length ? (this.screenviewOffset = V() - r[r.length - 1], 2 === e.type && "UNLOAD" === e.screenview.type && r.pop()) : this.screenviewOffset = 0, this.type) for (t in this.count = o += 1, this.fromWeb = !0, e) Object.prototype.hasOwnProperty.call(e, t) && (this[t] = e[t]) } function F(e, n, r) { let i = T.PVC_MASK_BASIC; return "string" != typeof n ? n : (e ? e.maskType === T.PVC_MASK_EMPTY.maskType ? i = T.PVC_MASK_EMPTY : e.maskType === T.PVC_MASK_BASIC.maskType ? i = T.PVC_MASK_BASIC : e.maskType === T.PVC_MASK_TYPE.maskType ? i = T.PVC_MASK_TYPE : e.maskType === T.PVC_MASK_CUSTOM.maskType && (i = "string" == typeof e.maskFunction ? t.access(e.maskFunction) : e.maskFunction, "function" != typeof i && (i = T.PVC_MASK_BASIC)) : i = T.PVC_MASK_BASIC, i(n, r)) } function U(e, t) { let n; if (e && t) for (n in t) Object.prototype.hasOwnProperty.call(t, n) && ("value" === n ? t[n] = F(e, t[n]) : delete t[n]) } function X(e, n) { return -1 !== t.matchTarget(e, n) } function q(e, t) { let n, r = null; if (!(e && e.maskAttributes && t && t.attributes)) return r; if ("function" == typeof e.maskAttributes) try { r = e.maskAttributes(t.id, t.attributes) } catch (e) { } else for (n in r = t.attributes, t.attributes) Object.prototype.hasOwnProperty.call(t.attributes, n) && (r[n] = F(e, t.attributes[n])); return r } function B(e) { let n, r, i, o, a = !1; if (!e || !e.currState && !e.prevState && !e.attributes || !e.id) return e; const s = e.prevState, l = e.currState; for (n = 0, r = w.length; n < r; n += 1)if (o = w[n], i = t.getValue(o, "exclude", !1), X(o.targets, e) !== i) { s && Object.prototype.hasOwnProperty.call(s, "value") && U(o, s), l && Object.prototype.hasOwnProperty.call(l, "value") && U(o, l), s && Object.prototype.hasOwnProperty.call(s, "innerText") && (s.innerText = F(o, s.innerText)), l && Object.prototype.hasOwnProperty.call(l, "innerText") && (l.innerText = F(o, l.innerText)), o.maskAttributes && e.attributes && (e.attributes = q(o, e)), a = !0; break } return a || (s && s.value && (s.value = t.applyPrivacyPatterns(s.value, b)), l && l.value && (l.value = t.applyPrivacyPatterns(l.value, b))), e } function Y(e) { return e && e.target ? (B(e.target), e) : e } function W(e, n) { let r, i, o, a; if (n && e) if (e.value ? (o = F(n, e.value, e), e.setAttribute("value", o), e.value = o) : n.maskType === T.PVC_MASK_CUSTOM.maskType && F(n, "", e), e.checked && e.removeAttribute("checked"), "select" === t.getTagName(e)) for (e.selectedIndex = -1, r = 0, i = e.options.length; r < i; r += 1)a = e.options[r], a.removeAttribute("selected"), a.selected = !1; else "textarea" === t.getTagName(e) && (e.textContent = e.value) } function K() { let n, r, i, o, a, s, l, c; for (f = e.getService("config"), h = f.getServiceConfig("message") || {}, p = f.getCoreConfig(), w = h.privacy || [], b = h.privacyPatterns || [], z = t.getValue(h, "shadowDOMCacheEnabled", !0), n = 0, a = w.length; n < a; n += 1)for (o = w[n], l = o.targets, r = 0, c = l.length; r < c; r += 1)s = l[r], "object" == typeof s && ("string" == typeof s.idType && (s.idType = +s.idType), "object" == typeof s.id && (s.cRegex = new RegExp(s.id.regex, s.id.flags))); for (i = b.length, n = i - 1; n >= 0; n -= 1)o = b[n], "object" == typeof o.pattern ? o.cRegex = new RegExp(o.pattern.regex, o.pattern.flags) : b.splice(n, 1) } return t.isiOS ? 90 === Math.abs(D) && (M = L, M = k) : (M = k, I = L), T.PVC_MASK_EMPTY = function (e) { return "" }, T.PVC_MASK_BASIC = function (e) { return "string" != typeof e ? "" : e.length ? "XXXXX" : "" }, T.PVC_MASK_TYPE = function (e) { let n, r, i = ""; if ("string" != typeof e) return i; const o = e.split(""); for (n = 0, r = o.length; n < r; n += 1)t.isNumeric(o[n]) ? i += x : t.isUpperCase(o[n]) ? i += _ : t.isLowerCase(o[n]) ? i += S : i += E; return i }, T.PVC_MASK_EMPTY.maskType = 1, T.PVC_MASK_BASIC.maskType = 2, T.PVC_MASK_TYPE.maskType = 3, T.PVC_MASK_CUSTOM = { maskType: 4 }, { init: function () { if (!N) { f.subscribe && f.subscribe("configupdated", K), K(), N = !0; try { y = sessionStorage.getItem("tl.TR"), v = sessionStorage.getItem("tl.PU"), sessionStorage.removeItem("tl.TR"), sessionStorage.removeItem("tl.PU") } catch (e) { y = null } } }, destroy: function () { f.unsubscribe("configupdated", K), N = !1 }, applyPrivacyToNode: function (e, n, r) { let i, o, a, s, l, c, f, p, h, g, m, y, v, b = []; const T = []; if (!e || !r) return null; for (i = 0, f = w.length; i < f; i += 1)for (p = w[i], l = t.getValue(p, "exclude", !1), l && (c = p), y = p.targets, o = 0, v = y.length; o < v; o += 1)if (m = y[o], "string" == typeof m) if (e.id && /srph-\d{13}/.test(e.id) || !d.matches(m, e) || (l ? b.push(e) : W(e, p)), h = d.queryAll(m, e), l) b = b.concat(h); else for (a = 0, g = h.length; a < g; a += 1)s = h[a], W(s, p); else if ("string" == typeof m.id) switch (m.idType) { case -1: case -3: s = u.getNodeFromID(m.id, m.idType, e), l ? b.push(s) : W(s, p); break; case -2: T.push({ ruleIndex: i, targetIndex: o, exclude: l }) } else T.push({ ruleIndex: i, targetIndex: o, exclude: l }); return function (e, n, r, i, o, a) { let s, l, c, f, p, h, g, m, y, v, b = []; if (!e.length && !o.length && !a) return []; const T = d.queryAll("input, select, textarea", n); if (!T || !T.length) return []; for (s = 0, f = o.length; s < f; s += 1)l = T.indexOf(o[s]), -1 !== l && T.splice(l, 1); if (e.length) for (s = 0, f = T.length, b = []; s < f; s += 1)T[s].value && (h = u.ElementData.prototype.examineID(T[s], !0), -2 === h.idType && (g = new u.Xpath(T[s], !0), g.applyPrefix(r), h.id = g.xpath), b.push({ id: h.id, idType: h.idType, element: T[s] })); for (s = 0, f = e.length; s < f; s += 1)if (y = w[e[s].ruleIndex], m = t.getValue(y, "exclude", !1), v = y.targets[e[s].targetIndex], "string" == typeof v.id && -2 === v.idType) for (l = 0; l < b.length; l += 1)b[l].idType === v.idType && b[l].id === v.id && (m ? (c = T.indexOf(p), T.splice(c, 1)) : (p = b[l].element, W(p, y))); else for (l = 0; l < b.length; l += 1)v.cRegex.lastIndex = 0, b[l].idType === v.idType && v.cRegex.test(b[l].id) && (p = b[l].element, m ? (c = T.indexOf(p), T.splice(c, 1)) : W(p, y)); if (a) for (s = 0, f = T.length; s < f; s += 1)W(T[s], a) }(T, e, n, 0, b, c), e }, applyPrivacyToMessage: Y, applyPrivacyToTarget: B, applyPrivacyPatterns: function (e) { return t.applyPrivacyPatterns(e, b) }, isPrivacyMatched: function (e) { let t, n, r, i = !1; if (!e) return i; for (t = 0, n = w.length; t < n; t += 1)if (r = w[t], X(r.targets, e)) { i = !0; break } return i }, createMessage: function (e) { if (void 0 === e.type) throw new TypeError("Invalid queueEvent given!"); return 12 === e.type && z && function (e) { const t = e.dcid, n = e.shadows || [], r = e.fullDOM; let i, o, a, s, l; if (0 !== n.length && r) { for (a in j) Object.prototype.hasOwnProperty.call(j, a) && (j[a].age += 1); for (i = 0, o = n.length; i < o; i += 1)s = n[i], l = j[s.xpath], l && l.root === s.root ? (l.hitCount += 1, l.age -= 1, s.cacheDCID = l.dcid, delete s.root) : j[s.xpath] = { root: s.root, dcid: t, hitCount: 0, age: 0 }; for (a in j) Object.prototype.hasOwnProperty.call(j, a) && (l = j[a], l.age > l.hitCount + 1 && delete j[a]) } }(e.domCapture), Y(new H(e)) }, wrapMessages: function (r) { i += 1; const o = { messageVersion: "13.0.0.0", serialNumber: i, sessions: [{ id: e.getPageId(), tabId: n, startTime: s, timezoneOffset: c, messages: r, clientEnvironment: { webEnvironment: { libVersion: "6.4.72", buildNote: p.buildNote || "", domain: m, page: g, referrer: document.referrer, mouseMovement: e.isMousemovementDetected(), screen: { devicePixelRatio: C, deviceWidth: M, deviceHeight: I, deviceToolbarHeight: P, width: R, height: A, orientation: D } } } }] }, a = o.sessions[0].clientEnvironment.webEnvironment; return a.screen.orientationMode = t.getOrientationMode(a.screen.orientation), y && (a.priorPage = { page: v, terminationReason: y }), o }, getCurrentOffset: V } })), TLT.addService("serializer", (function (e) { "use strict"; let t = e.getService("config"), n = {}, r = {}, i = null, o = !1; const a = { json: void 0 !== window.JSON ? { serialize: window.JSON.stringify, parse: window.JSON.parse } : {} }; function s(t, n, r) { let i, o, a; for (i = 0, o = (t = t || []).length; i < o; i += 1)if (a = t[i], "string" == typeof a && (a = e.utils.access(a)), "function" == typeof a) { n[r] = a; break } } function l(l) { let c; for (c in l) Object.prototype.hasOwnProperty.call(l, c) && (s(l[c].stringifiers, n, c), s(l[c].parsers, r, c)); n.json = n.json || a.json.serialize, r.json = r.json || a.json.parse, "function" == typeof n.json && "function" == typeof r.json || e.fail("JSON parser and/or serializer not provided in the UIC config. Can't continue."), function () { let e; return "function" != typeof n.json || "function" != typeof r.json ? e = !0 : (e = void 0 === r.json('{"foo": "bar"}') || "bar" !== r.json('{"foo": "bar"}').foo, void 0 === r.json("[1, 2]") ? e = !0 : (e = e || 1 !== r.json("[1, 2]")[0], e = e || 2 !== r.json("[1,2]")[1]), e = e || '{"foo":"bar"}' !== n.json({ foo: "bar" }), e = e || "[1,2]" !== n.json([1, 2])), e }() && e.fail("JSON stringification and parsing are not working as expected"), t && t.subscribe("configupdated", i), o = !0 } return i = function () { t = e.getService("config"), l(t.getServiceConfig("serializer")) }, { init: function () { let e; o || (e = t ? t.getServiceConfig("serializer") : {}, l(e)) }, destroy: function () { n = {}, r = {}, t && t.unsubscribe("configupdated", i), o = !1 }, parse: function (e, t) { return r[t = t || "json"](e) }, serialize: function (e, t) { return n[t = t || "json"](e) } } })), TLT.addModule("TLCookie", (function (e) { "use strict"; let t, n, r, i, o = {}, a = [], s = 0, l = !0, c = !1, u = null, d = "CoreID6", f = "WCXSID", p = "TLTSID"; const h = "TLTDID", g = e.utils; function m() { const e = "123456789"; return g.getRandomString(1, e) + g.getRandomString(31, e + "0") } function y() { if (!u && window.cmRetrieveUserID) try { window.cmRetrieveUserID((function (e) { u = e })) } catch (e) { u = null } } function v(e) { let t, n, r; if (!localStorage || !e) return; const i = localStorage.getItem(e); return i && (n = i.split("|"), t = parseInt(n[0], 10), Date.now() > t ? localStorage.removeItem(e) : r = n[1]), r } function w(e, t) { if (!localStorage || !e) return; t = t || m(); const n = Date.now() + s; return localStorage.setItem(e, n + "|" + t), v(e) } function b() { return a } function T(u) { if (a = [], l = g.getValue(u, "sessionIDUsesCookie", !0), c = g.getValue(u, "sessionIDUsesStorage", !1), u.tlAppKey && (r = u.tlAppKey, a.push({ name: "X-Tealeaf-SaaS-AppKey", value: r })), u.visitorCookieName && (d = u.visitorCookieName), u.wcxCookieName && (f = u.wcxCookieName), t = g.getCookieValue(f), t && a.push({ name: "X-WCXSID", value: t }), u.sessionizationCookieName && (p = u.sessionizationCookieName), c) { s = g.getValue(u, "sessionIDStorageTTL", 6e5); try { n = v(p) } catch (e) { c = !1 } } if (!n && l && (n = g.getCookieValue(p)), !n) if (t) p = f, n = t; else { if (c) try { n = w(p) } catch (e) { c = !1 } !n && l && (n = function () { const e = m(), t = !!o.secureTLTSID, n = o.samesite; return g.setCookie(p, e, void 0, void 0, void 0, t, n), g.getCookieValue(p) }()) } e.setSessionCookieInfo(p, n); const y = void 0 !== u?.disableTLTDID && u.disableTLTDID; !1 === y && (i = g.getCookieValue(h), i && void 0 !== i || (i = m()), g.setCookie(h, i, 31536e3, void 0, void 0, false, "Lax")), n || (n = "Check7UIC7Cookie7Configuration77"), a.push({ name: "X-Tealeaf-SaaS-TLTSID", value: n }), !1 === y && a.push({ name: "X-Tealeaf-TLTDID", value: i }), a.length && TLT.registerBridgeCallbacks([{ enabled: !0, cbType: "addRequestHeaders", cbFunction: b }]) } function S(e) { let t, n, r, i = !1; const a = o.appCookieWhitelist; if (!a || !a.length) return i; for (t = 0, n = a.length; t < n && !i; t += 1)r = a[t], r.regex ? (r.cRegex || (r.cRegex = new RegExp(r.regex, r.flags)), r.cRegex.lastIndex = 0, i = r.cRegex.test(e)) : i = r === e; return i } return { init: function () { o = e.getConfig() || {}, T(o), y() }, destroy: function () { c && w(p, n), window.setTimeout((function () { TLT.registerBridgeCallbacks([{ enabled: !1, cbType: "addRequestHeaders", cbFunction: b }]) })) }, onevent: function (t) { if ("screenview_load" === t.type) g.getValue(o, "appCookieWhitelist.length", 0) && (y(), function () { let t, n, r, i, o = [], a = "", s = ""; const l = document.cookie, c = {}; if (l) { for (o = l.split("; "), t = 0, r = o.length; t < r; t += 1) { if (i = o[t], n = i.indexOf("="), n >= 0) try { a = decodeURIComponent(i.substring(0, n)) } catch (e) { a = i.substring(0, n) } if (s = i.substring(n + 1), S(a)) try { c[a] = decodeURIComponent(s) } catch (e) { c[a] = s } } u && !c[d] && (c[d] = u), e.post({ type: 14, cookies: c }) } }()) } } })), TLT && "function" == typeof TLT.addModule && TLT.addModule("dataLayer", (function (e) { "use strict"; let t, n, r = !1, i = !0, o = "", a = [], s = 0, l = 0; const c = e.utils, u = 10, d = 25, f = 300, p = new Set; function h(e, t) { let n, r, i, o = -1; if (!e || !t) return o; for (n = 0, r = t.length; n < r && -1 === o; n += 1)switch (i = t[n], typeof i) { case "string": e === i && (o = n); break; case "object": i.cRegex || (i.cRegex = new RegExp(i.regex, i.flags)), i.cRegex.lastIndex = 0, i.cRegex.test(e) && (o = n) }return o } function g(e, t, n, r) { let o, a; const s = {}, l = n && n.propertyBlocklist ? n.propertyBlocklist : [], d = n && n.rootProperties ? n.rootProperties : {}; if (!e) return null; if (t) { if ((t += 1) > 5 && !r || t > u) return "Serialization error: Exceeds nesting limit (5) or (10) for a permitted property." } else t = 1; for (o in e) if (Object.prototype.hasOwnProperty.call(e, o) && !(h(o, l) >= 0)) { if (1 === t && (r = "", o in d && (r = o)), !i && !r || t > 5 && r && o !== d[r][t - 1] && n.rootProperties[r][t - 1]) continue; switch (a = e[o], typeof a) { case "object": if (a instanceof Node) a.nodeName ? (s[o] = a.nodeName.toLowerCase(), a.id && (s[o] += "#" + a.id)) : s[o] = "DOMNode: unknown"; else if (a instanceof Window) s[o] = "DOMWindow: " + a.location.href; else try { s[o] = g(a, t, n, r) } catch (e) { s[o] = "Serialization error: " + e.message } break; case "function": case "undefined": break; default: n && n.privacyPatterns && (a = c.applyPrivacyPatterns(a, n.privacyPatterns)), s[o] = a } } return s } function m(e) { let t = null; if (!e) return t; switch (typeof e) { case "string": t = c.access(e); break; case "object": t = e; break; case "function": try { t = e() } catch (e) { } }return t } function y() { let e, t; if (r) for (t = 0; t < a.length; t += 1)if (e = a[t].rules ? a[t].rules.screenviewBlocklist : [], !(h(o, e) >= 0)) { let e = m(a[t].dataObject); if (!e) return; const n = a[t].rules; if (n && (i = void 0 === n.includeEverything || n.includeEverything, n.privacyPatterns)) for (let e = n.privacyPatterns.length - 1; e >= 0; e -= 1) { const t = n.privacyPatterns[e]; "object" == typeof t.pattern ? t.cRegex = new RegExp(t.pattern.regex, t.pattern.flags) : n.privacyPatterns.splice(e, 1) } e instanceof Array ? (e = e.filter((e => { if (n && n.filter) for (const t of n.filter) { let n, r; const i = t.matchProperty, o = t.matchValue; let a = !1; return "[object Arguments]" === Object.prototype.toString.call(e) ? (n = e[0], r = e[1], a = !0) : (n = e[t.matchProperty], r = t.matchValue), v(e, n, r, i, o, a) } return !0 })).map((e => g(e, 0, n))), e.forEach((function (e) { w(e) }))) : w(g(e, 0, n)), i = !0 } } function v(e, t, n, r, i, o) { if (o) { if ("string" == typeof t && "string" == typeof r && "string" == typeof n && "string" == typeof i && t === r && n === i) return !0; if ("string" == typeof t && "string" == typeof r && "object" == typeof n && (null === i || "" === i || void 0 === i) && t === r) return !0; if ("string" == typeof t && "string" == typeof r && "string" == typeof n && "object" == typeof i && "object" == typeof i) { return new RegExp(i).test(n) } if ("string" == typeof t && "object" == typeof r && "string" == typeof t && (null === i || "" === i || void 0 === i)) { return new RegExp(r).test(t) } } else { if ("string" == typeof t && "string" == typeof n && t === n) return !0; if (!("string" != typeof t || "string" != typeof r || "object" != typeof e || null !== n && "" !== n && void 0 !== n || null !== i && "" !== i && void 0 !== i) && Object.prototype.hasOwnProperty.call(e, r)) return !0; if ("string" == typeof t && "string" == typeof r && "object" == typeof e && "object" == typeof i) { return new RegExp(i).test(e[r]) } if ("object" == typeof r && "object" == typeof e && (null === i || "" === i || void 0 === i)) { const t = Object.keys(e); for (const e of t) { if (new RegExp(r).test(e)) return !0 } } } return !1 } function w(t) { if (!t) return; let n; try { n = JSON.stringify(t) } catch (e) { n = Object.keys(t).map((e => `${e}=${t[e]}`)).join("_") } if (p.has(n)) return; n && p.add(n); const r = { type: 19, dataLayer: t }; e.post(r) } function b(e, t) { return setTimeout((function () { l >= t.length - 1 ? y() : (l = t.length, b(e, t)) }), e) } function T(e) { let t; if (e && e.dataObject && "string" == typeof e.dataObject) { t = e.dataObject.replace(/\window\./, ""); const n = window[t]; if (n) S(n, "window['" + e + "']"); else { if (s += f, s > 5e4) return; setTimeout((function () { T(e) }), f) } } else { if (!e || !Array.isArray(e.dataObject) && "object" != typeof e.dataObject) return; S(e, "trackObj as object") } } function S(e, t) { if (e) if (Array.isArray(e)) e.oldPush = Array.prototype.push, e.push = function (t) { e.onPush(t), e.oldPush(t) }, e.onPush = function (t) { l = e.length - 1, n && clearTimeout(n), n = setTimeout((function () { b(d, e) }), f) }; else if ("object" == typeof e && !Array.isArray(e) && null !== e) { new Proxy(e, { set: function (e, t, n) { return y(), !0 } }) && y() } } return { init: function () { if (t = e.getConfig(), r = !0, a = [], t.dataObjects) { a = t.dataObjects; for (const e of a) if (e.rules && e.rules.permittedProperties) { const t = e.rules.permittedProperties; e.rules.rootProperties = {}; for (let n = 0; n < t.length; n += 1)"string" == typeof t[n] && (t[n] = t[n].split("."), e.rules.rootProperties[t[n][0]] = t[n]) } } }, destroy: function () { t = null, r = !1 }, onevent: function (e) { if (e && "object" == typeof e && e.type) switch (e.type) { case "load": o = ""; break; case "screenview_load": o = e.name, a && a.forEach((function (e) { T(e) })); break; case "click": case "pointerdown": case "unload": break; case "logDataLayers": e.data && "object" != typeof e.data || y() } }, onmessage: function (e) { } } })), TLT && "function" == typeof TLT.addModule && TLT.addModule("overstat", (function (e) { "use strict"; const t = e.utils, n = {}, r = { updateInterval: 250, hoverThreshold: 1e3, hoverThresholdMax: 12e4, gridCellMaxX: 10, gridCellMaxY: 10, gridCellMinWidth: 20, gridCellMinHeight: 20 }, i = 50; function o(t) { const n = (e.getConfig() || {})[t]; return "number" == typeof n ? n : r[t] } function a(e) { return e && !e.nodeType && e.element && (e = e.element), e } function s(e) { return !(e = a(e)) || e === document.body || e === document.html || e === document } function l(e) { return (e = a(e)) ? e.parentNode : null } function c(e) { return (e = a(e)) ? e.offsetParent || e.parentElement || l(e) : null } function u(e) { const t = function (e) { return (e = a(e)) && e.tagName ? e.tagName.toUpperCase() : "" }(e); return 1 !== function (e) { return (e = a(e)) && e.nodeType || -1 }(e) || "TR" === t || "TBODY" === t || "THEAD" === t } function d(r, s, l, c) { var u; this.xPath = null !== r ? (u = r) ? u.xPath ? u.xPath : (u = a(u), e.getXPathFromNode(u)) : "" : "", this.domNode = r, this.hoverDuration = 0, this.hoverUpdateTime = 0, this.gridX = Math.max(s, 0), this.gridY = Math.max(l, 0), this.parentKey = "", this.updateTimer = -1, this.disposed = !1, this.childKeys = {}, this.webEvent = c, this.getKey = function () { return this.xPath + ":" + this.gridX + "," + this.gridY }, this.update = function () { const e = (new Date).getTime(), t = this.getKey(); 0 !== this.hoverUpdateTime && (this.hoverDuration += e - this.hoverUpdateTime), this.hoverUpdateTime = e, clearTimeout(this.updateTimer), this.updateTimer = setTimeout((function () { !function (e, t) { const r = n[e]; if (r && r[t]) r[t]() }(t, "update") }), o("updateInterval")) }, this.dispose = function (e) { if (clearTimeout(this.updateTimer), delete n[this.getKey()], this.disposed = !0, e) { const e = this.clone(); n[e.getKey()] = e, e.update() } }, this.process = function (r) { if (clearTimeout(this.updateTimer), this.disposed) return !1; let a = !1, s = this, l = 0; if (this.hoverDuration >= o("hoverThreshold")) { for (this.hoverDuration = Math.min(this.hoverDuration, o("hoverThresholdMax")), a = !0, function (n, r) { const i = t.getValue(n, "webEvent.target", {}), o = t.getValue(i, "element.tagName") || "", a = "input" === o.toLowerCase() ? t.getValue(i, "element.type") : "", s = t.getTlType(i), l = { type: 9, event: { hoverDuration: n.hoverDuration, hoverToClick: t.getValue(r, "hoverToClick") }, target: { id: i.id || "", idType: i.idType || "", name: i.name || "", tlType: s, type: o, subType: a, position: { width: t.getValue(i, "element.offsetWidth", 0), height: t.getValue(i, "element.offsetHeight", 0), relXY: n.relXY } } }; l.target.id && (i.accessibility && (l.target.accessibility = i.accessibility), i.attributes && (l.target.attributes = i.attributes), e.post(l)) }(this, { hoverToClick: !!r }); void 0 !== s && l++ < i;)s.dispose(r), s = n[s.parentKey]; l >= i && t.clog("Overstat process() hit iterations limit") } else this.dispose(r); return a }, this.clone = function () { const e = new d(this.domNode, this.gridX, this.gridY); return e.parentKey = this.parentKey, e } } function f(e, n, r) { const o = function (e) { if (e && e.position) return { x: e.position.x, y: e.position.y }; const n = (e = a(e)) && e.getBoundingClientRect ? e.getBoundingClientRect() : null; let r = 0, o = 0, l = r, u = o, d = 0, f = 0, p = c(e), h = 0; for (n ? (r = n.left, o = n.top) : e && (r = e.offsetLeft, o = e.offsetHeight); p && h++ < i && !s(p);)d = p.offsetLeft - (p.scrollLeft || 0), f = p.offsetTop - (p.scrollTop || 0), d === l && f === u || (r += d, o += f, l = d, u = f), p = c(p); return h >= i && t.clog("Overstat calculateNodeOffset() hit iterations limit"), isNaN(r) && (r = 0), isNaN(o) && (o = 0), { x: r, y: o } }(e = a(e)); let l = n - o.x, u = r - o.y; return isFinite(l) || (l = 0), isFinite(u) || (u = 0), { x: l, y: u } } function p(e, t, n) { const r = (e = a(e)).getBoundingClientRect ? e.getBoundingClientRect() : null, i = r ? r.width : e.offsetWidth, s = r ? r.height : e.offsetHeight, l = i && i > 0 ? Math.max(i / o("gridCellMaxX"), o("gridCellMinWidth")) : o("gridCellMinWidth"), c = s && s > 0 ? Math.max(s / o("gridCellMaxY"), o("gridCellMinHeight")) : o("gridCellMinHeight"); let u = Math.min(Math.floor(t / l), o("gridCellMaxX")), d = Math.min(Math.floor(n / c), o("gridCellMaxY")); const f = i > 0 ? t / i : 0, p = s > 0 ? n / s : 0; let h = ""; var g, m; return isFinite(u) || (u = 0), isFinite(d) || (d = 0), g = f, m = p, h = (g = Math.floor(1e4 * Math.min(Math.max(g, 0), 1)) / 1e4) + "," + Math.floor(1e4 * Math.min(Math.max(m, 0), 1)) / 1e4, { x: u, y: d, relXY: h } } function h(e) { let r = e; let o = null, a = !1, s = 0; const l = {}; for (l[e.getKey()] = !0; void 0 !== r && s++ < i && (l[r.parentKey] = !0, "" !== r.parentKey && r.parentKey !== r.getKey());)s >= i && t.clog("Overstat cleanupHoverEvents() hit iterations limit"), r = n[r.parentKey]; for (o in n) Object.prototype.hasOwnProperty.call(n, o) && !l[o] && (r = n[o], r && (a ? r.dispose() : a = r.process())) } function g(e, r, i) { if (r || (r = e.target), s(r)) return null; if (t.isiOS || t.isAndroid) return null; let o, a, l, m, y, v, w; return u(r) ? l = g(e, c(r), i) : (o = f(r, e.position.x, e.position.y), a = p(r, o.x, o.y), l = new d(r, a.x, a.y, e), l.relXY = a.relXY, m = l.getKey(), n[m] ? l = n[m] : n[m] = l, l.update(), i || (w = c(r), w && (v = g(e, w, !0), null !== v && (y = v.getKey(), m = l.getKey(), m !== y && (l.parentKey = y))), h(l))), l } function m(e) { (function (e, n) { let r = 0; if (!n || n === e) return !1; for (n = l(n); !s(n) && r++ < i;) { if (n === e) return !0; n = l(n) } return r >= i && t.clog("Overstat isChildOf() hit iterations limit"), !1 })((e = function (e) { return e.nativeEvent && (e = e.nativeEvent), e }(e)).target, e.relatedTarget) || function (e, t) { let r = null, i = null, o = !1; for (i in n) Object.prototype.hasOwnProperty.call(n, i) && (r = n[i], r && r.domNode === e && r.getKey() !== t && (o ? r.dispose() : o = r.process())) }(e.target) } function y(r) { if (t.getValue(r, "target.id")) switch (r.type) { case "mousemove": g(r); break; case "mouseout": m(r); break; case "click": !function (e) { let t = null, r = null, i = !1; for (r in n) Object.prototype.hasOwnProperty.call(n, r) && (t = n[r], t && (i ? t.dispose() : i = t.process(!0))) }(); break; case "submit": e.performFormCompletion(!0) } } return { init: function () { }, destroy: function () { let e; for (e in n) Object.prototype.hasOwnProperty.call(n, e) && (n[e].dispose(), delete n[e]) }, onevent: function (e) { "object" == typeof e && e.type && y(e) }, onmessage: function (e) { }, createHoverEvent: function (e, t, n, r) { return new d(e, t, n, r) }, cleanupHoverEvents: h, eventMap: n } })), TLT && "function" == typeof TLT.addModule && TLT.addModule("performance", (function (e) { "use strict"; const t = { loadReceived: !1, unloadReceived: !1, perfEventSent: !1 }; let n, r = null, i = null, o = {}, a = 0; const s = e.utils, l = "https:" === window.location.protocol; let c, u, d = [], f = 0; const p = { enabled: !1, resourceTypes: [], blacklist: [] }; function h(i, o) { let l, c, u; const d = { type: 7, performance: {} }; let f, p; if (!i || t.perfEventSent) return; const h = i.performance || {}, g = h.timing, m = h.navigation; if (g) { if (!g.loadEventStart && !o) return; d.performance.timing = function (e) { let t = 0, n = "", r = 0; const i = {}; if (!e || "object" != typeof e || !e.navigationStart) return {}; for (n in t = e.navigationStart, e) (Object.prototype.hasOwnProperty.call(e, n) || "number" == typeof e[n]) && (r = e[n], i[n] = "number" == typeof r && r && "navigationStart" !== n ? r - t : r); return i }(g), d.performance.timing.renderTime = function (e) { let t, n, r = 0; return e && (t = e.responseEnd > 0 && e.responseEnd < e.domLoading ? e.responseEnd : e.domLoading, n = e.loadEventStart, s.isNumeric(t) && s.isNumeric(n) && n > t && (r = n - t)), r }(g) } else { if (!n.calculateRenderTime) return; d.performance.timing = { renderTime: a, calculated: !0 } } const y = d.performance.timing; if (n.renderTimeThreshold && y.renderTime > n.renderTimeThreshold && (y.invalidRenderTime = y.renderTime, delete y.renderTime), h.getEntriesByType) for (f = h.getEntriesByType("paint"), l = 0, c = f.length; l < c; l += 1)p = f[l], p.startTime > 0 && (y[p.name] = Math.round(p.startTime)); if (!y["first-paint"] && y.msFirstPaint && (y["first-paint"] = y.msFirstPaint, delete y.msFirstPaint), m) { switch (m.type) { case 0: u = "NAVIGATE"; break; case 1: u = "RELOAD"; break; case 2: u = "BACKFORWARD"; break; default: u = "UNKNOWN" }d.performance.navigation = { type: u, redirectCount: m.redirectCount } } e.post(d), t.perfEventSent = !0, r && (clearInterval(r), r = null) } function g(t) { let n; const r = u.blacklist; let i, o, a; if (!t || !t.name) return; const s = t.name, c = t.initiatorType; if (l && 0 === s.indexOf("http:") && d.push(s), !(Object.prototype.hasOwnProperty.call(u, "maxAlerts") && f >= u.maxAlerts || Object.prototype.hasOwnProperty.call(u, "threshold") && t.duration < u.threshold || t.transferSize && t.transferSize < t.encodedBodySize || t.responseStart === t.responseEnd || u.resourceTypes.length > 0 && -1 === u.resourceTypes.indexOf(c))) { for (o = !1, n = 0; n < r.length; n += 1)switch (i = r[n], typeof i) { case "object": i.cRegex || (i.cRegex = new RegExp(i.regex, i.flags)), i.cRegex.lastIndex = 0, i.cRegex.test(s) && (o = !0); break; case "string": -1 !== s.indexOf(i) && (o = !0) }o || (f += 1, a = { urlNormalized: e.normalizeUrl(s, 17), url: s, initiator: c, duration: Math.round(t.duration), responseEnd: Math.round(t.responseEnd) }, void 0 !== t.transferSize && (a.transferSize = t.transferSize, t.duration && (a.bps = Math.round(t.transferSize / t.duration * 1e3))), e.post({ type: 17, resourceData: a })) } } function m() { o = {}, i && (clearTimeout(i), i = null) } function y() { const t = { type: 20, pageExperience: s.clone(o) }; (o.fid || o.lcp || o.cls) && (t.pageExperience.https = "https:" === window.location.protocol, e.post(t), m()) } function v(e) { if (e && e.name) { switch (e.name) { case "FID": o.fid = Math.round(e.value); break; case "LCP": o.lcp = Math.round(e.value); break; case "CLS": o.cls = Number(e.value.toFixed(2)) }void 0 !== o.fid && void 0 !== o.lcp && void 0 !== o.cls && y() } } return { init: function () { n = e.getConfig(), u = s.mixin({}, p, n.performanceAlert), function () { if (!n || !s.getValue(n, "pageExperience.enabled", !0)) return; n.pageExperience = n.pageExperience || {}; const e = n.pageExperience; !e.api && window.webVitals && (e.api = { getCLS: webVitals.getCLS, getLCP: webVitals.getLCP, getFID: webVitals.getFID }), e.api ? e.enabled = !0 : e.enabled = !1 }() }, destroy: function () { y(), r && (clearInterval(r), r = null, h(window, !0)), c && c.disconnect(), l && (!function (t) { const n = { type: 20, violations: {} }, r = n.violations; t && t.length && (r.total = t.length, t.splice(10), r.urls = t, e.post(n)) }(d), d = []), n = null }, onevent: function (o) { if ("object" == typeof o && o.type) switch (o.type) { case "load": t.loadReceived = !0, function (t) { const n = e.getStartTime(); t.timestamp > n && !a && (a = t.timestamp - n) }(o), t.perfEventSent || r || (r = setInterval((function () { e.isInitialized() && h(window) }), s.getValue(n, "delay", 2e3))), function () { if (!u.enabled || "function" != typeof window.PerformanceObserver) return; c = new window.PerformanceObserver((function (e, t) { s.forEach(e.getEntries(), g) })); const e = window.performance.getEntriesByType("resource"); setTimeout((function () { s.forEach(e, g) })), c.observe({ entryTypes: ["resource"] }) }(); break; case "screenview_load": !function () { if (!n || !n.pageExperience || !n.pageExperience.enabled) return; m(); const e = n.pageExperience.api; e.getCLS(v), e.getLCP(v), e.getFID(v), i = setTimeout(y, 3e5) }(), t.perfEventSent || h(window); break; case "screenview_unload": default: break; case "unload": t.unloadReceived = !0, y(), t.perfEventSent || h(window) } }, onmessage: function (e) { } } })), TLT.addModule("replay", (function (e) { "use strict"; const t = e.utils; let n = 0; let r = {}, i = null, o = [], a = !0, s = null, l = null, c = 0, u = null; const d = (new Date).getTime(); let f = null; const p = "root"; let h, g = null, m = null, y = null, v = null, w = { inFocus: !1 }, b = null, T = e.getConfig() || {}; const S = t.getValue(T, "viewPortWidthHeightLimit", 1e4); let _ = 1, x = 1; const E = {}, C = t.getValue(T, "mousemove") || {}, O = t.getValue(T, "tab", !1), k = C.sampleRate, L = C.ignoreRadius; let D = null, M = {}, I = 0; const P = 1e3; let R = 0, A = [], N = "visible" === document.visibilityState; const j = [], z = [], V = []; function H(e) { let t = !1, n = null; if ("object" != typeof e || !e.type) return t; switch (e.type.toLowerCase()) { case "input": n = "|" + (e.subType || "") + "|", t = -1 !== "|button|image|submit|reset|".indexOf(n.toLowerCase()); break; case "select": case "textarea": break; default: t = !0 }return t } function F(e) { let t = e.type; const n = e.target; if (t = "string" == typeof t ? t.toLowerCase() : "unknown", "blur" === t && (t = "focusout"), "change" === t) if ("INPUT" === n.type) switch (n.subType) { case "text": case "date": case "time": t = n.subType + "Change"; break; default: t = "valueChange" } else t = "TEXTAREA" === n.type ? "textChange" : "valueChange"; return t } function U(e, t, n) { let r, i, o; if (document.querySelector(e)) return !0; for (r = 0; r < t.length; r++)if (o = t[r], o.querySelector(e)) return !0; for (r = 0; r < n.length; r++)if (i = n[r], i.querySelector(e)) return !0; return !1 } function X(n, r, i) { let o, a, s, l, c, u, d, f, p; for (o = 0; o < j.length; o++)d = j[o], a = d.delayUntil.selector, s = t.getValue(d.delayUntil, "exists", !0), l = d.delayUntil.dualSnapshot || !1, c = U(a, r, i), u = d.lastStatus || !1, f = d.config || {}, p = d.timerId, (!0 === s && !0 === c && !1 === u || !1 === s && !1 === c && !0 === u || !0 === l && !0 === c && !1 === u || !0 === l && !1 === c && !0 === u) && (e.performDOMCapture(document, f), l && !1 !== c || (j.splice(o--, 1), 0 === j.length && TLT.registerMutationCallback(X, !1), p && clearTimeout(p))), d.lastStatus = c } function q(n, r, i) { let o, s = null; return n ? ((r = r || {}).eventOn = a, a = !1, i ? (s = "dcid-" + t.getSerialNumber() + "." + (new Date).getTime() + "s", "object" == typeof i ? (r.dcid = s, o = { config: r, delayUntil: i, lastStatus: !1 }, j.push(o), TLT.registerMutationCallback(X, !0), void 0 !== i.timeout && i.timeout >= 0 && (o.timerId = window.setTimeout((function () { !function (t) { let n, r, i; for (n = 0; n < j.length; n += 1)r = j[n], i = r.config || {}, i.dcid === t && (i.timeoutExpired = !0, e.performDOMCapture(document, i), j.splice(n--, 1), 0 === j.length && TLT.registerMutationCallback(X, !1)) }(s) }), i.timeout))) : window.setTimeout((function () { r.dcid = s, e.performDOMCapture(n, r) }), i)) : (delete r.dcid, s = e.performDOMCapture(n, r)), s) : s } function B(n, r, i) { let o, a, s = !1; const l = {}; let c, u, d, f, h, g = !1, m = null, y = 0; if (!n || !r && !i) return m; if (!r && "load" !== n && "unload" !== n) return m; if (T = e.getConfig() || {}, g = t.getValue(T, "domCapture.enabled", !1), !g || t.isLegacyIE) return m; if (function (t, n) { let r, i, o, a; for (r = 0, i = t.length; r < i; r += 1)switch (o = t[r], a = n && 0 === n.indexOf("#") ? location.pathname + n : void 0 === n || n === p ? location.pathname + location.hash : n, a = e.normalizeUrl(a, 2), typeof o) { case "object": if (o.cRegex || (o.cRegex = new RegExp(o.regex, o.flags)), o.cRegex.lastIndex = 0, o.cRegex.test(a)) return !0; break; case "string": if (o === a) return !0 }return !1 }(t.getValue(T, "domCapture.screenviewBlacklist", []), i)) return m; const v = t.getValue(T, "domCapture.triggers") || []; for (o = 0, u = v.length; !s && o < u; o += 1) { if (c = v[o], c.event === n) if ("load" === n || "unload" === n) if (c.screenviews) for (f = c.screenviews, a = 0, h = f.length; !s && a < h; a += 1)switch (d = f[a], typeof d) { case "object": d.cRegex || (d.cRegex = new RegExp(d.regex, d.flags)), d.cRegex.lastIndex = 0, s = d.cRegex.test(i); break; case "string": s = d === i } else s = !0; else s = !c.targets || -1 !== t.matchTarget(c.targets, r); "change" === c.event && c.delayUntil && (A = A.concat(c.targets)) } return s && (y = c.delay || c.delayUntil || ("load" === c.event ? 7 : 0), l.forceFullDOM = !!c.fullDOMCapture, m = q(window.document, l, y), m && function () { let t = !1; if (!C.enabled || Object.prototype.hasOwnProperty.call(window, "ontouchstart")) return; if (0 === z.length) return; I >= P && (t = !0); const n = { type: 18, mousemove: { elements: V.slice(0), data: z.slice(0), config: { ignoreRadius: C.ignoreRadius, sampleRate: C.sampleRate }, limitReached: t, maxInactivity: R } }; e.post(n), V.length = 0, z.length = 0, M = {}, R = 0 }()), m } function Y(e) { let n = null; const r = t.getValue(e, "webEvent.target", {}), i = r.type, o = r.subType || "", a = t.getTlType(r), s = function (e) { const t = []; for (e = e.parentNode; e;)t.push(e), e = e.parentNode; return t }(t.getValue(r, "element")), l = t.getValue(e, "webEvent.subType", null), c = { timestamp: t.getValue(e, "webEvent.timestamp", 0), type: 4, target: { id: r.id || "", idType: r.idType, name: r.name, tlType: a, type: i, position: { width: t.getValue(r, "size.width"), height: t.getValue(r, "size.height") }, currState: e.currState || null }, event: { tlEvent: F(t.getValue(e, "webEvent")), type: t.getValue(e, "webEvent.type", "UNKNOWN") } }; return r.accessibility && (c.target.accessibility = r.accessibility), r.attributes && (c.target.attributes = r.attributes), o && (c.target.subType = o), "number" == typeof e.dwell && e.dwell > 0 && (c.target.dwell = e.dwell), "number" == typeof e.visitedCount && (c.target.visitedCount = e.visitedCount), void 0 !== e.prevState && (c.prevState = e.prevState), l && (c.event.subType = l), n = function (e) { return t.some(e, (function (e) { const n = t.getTagName(e); return "a" === n || "button" === n ? e : null })) }(s), c.target.isParentLink = !!n, n && (n.href && (c.target.currState = c.target.currState || {}, c.target.currState.href = c.target.currState.href || n.href), n.value && (c.target.currState = c.target.currState || {}, c.target.currState.value = c.target.currState.value || n.value), (n.innerText || n.textContent) && (c.target.currState = c.target.currState || {}, c.target.currState.innerText = t.trim(c.target.currState.innerText || n.innerText || n.textContent))), t.isUndefOrNull(c.target.currState) && delete c.target.currState, t.isUndefOrNull(c.target.name) && delete c.target.name, c } function W(t) { e.post(t) } function K(t) { let n, r, i, o, a; const s = { mouseout: !0, mouseover: !0 }, l = [], c = t.length; for (n = 0; n < c; n += 1)if (i = t[n], i) if (s[i.event.type]) l.push(i); else { for (r = n + 1; r < c && t[r] && s[t[r].event.type]; r += 1); r < c && (o = t[r], o && i.target.id === o.target.id && i.event.type !== o.event.type && ("click" === i.event.type && (a = i, i = o, o = a), "click" === o.event.type ? (i.target.position = o.target.position, n += 1) : "blur" === o.event.type && (i.target.dwell = o.target.dwell, i.target.visitedCount = o.target.visitedCount, i.focusInOffset = o.focusInOffset, i.target.position = o.target.position, n += 1), t[r] = null, t[n] = i)), l.push(t[n]) } for (i = l.shift(); i; i = l.shift())e.post(i); t.splice(0, t.length) } function Q(e, n) { o.push(Y({ webEvent: e, id: n, currState: t.getValue(e, "target.state") })) } function J(e, n, i) { let a, s, l = !1; if (!e) return; if (0 === o.length) return; if (!(n = n || (r[e] ? r[e].webEvent : {}))) return; s = "blur" === n.type || "change" === n.type ? t.getValue(n, "target.state", {}) : n.target && t.getTargetState(n.target.element) || {}, s && s.disabled && (i = !0); const c = o[o.length - 1]; r[e] ? (c.focusInOffset = r[e].focusInOffset, c.target.visitedCount = r[e].visitedCount, r[e].focus && (r[e].dwell = Number(new Date) - r[e].focus, c.target.dwell = r[e].dwell), r[e].processedChange || !r[e].prevState || i || t.isEqual(r[e].prevState, s) || (n.type = "change", c.event.type = n.type, c.event.tlEvent = F(n), c.target.prevState = r[e].prevState, c.target.currState = s)) : r[e] = {}, "click" === c.event.type ? H(c.target) || (c.target.currState = s, l = !0) : "focus" === c.event.type && (l = !0), l && !i && (c.event.type = "blur", c.event.tlEvent = "focusout"), c.dcid || (a = B(c.event.type, n.target), a && (c.dcid = a)), i || (w.inFocus = !1), r[e].prevState = s ? t.mixin({}, s) : s, K(o) } function G(e, n) { const i = o.length, a = i ? o[i - 1] : null; w.inFocus && w.target.id === e ? a && a.target.id === e || (Q(n, e), r[e].processedChange = !1, r[e].processedClick = !1) : (w.inFocus && J(w.target.id, w), w = n, w.inFocus = !0, r[e] || (r[e] = {}), r[e].focus = w.dwellStart = Number(new Date), r[e].focusInOffset = g ? w.dwellStart - Number(g) : -1, "focus" === n.type ? r[e].prevState = t.getValue(n, "target.state") : "click" !== n.type || r[e].prevState || (r[e].prevState = t.getValue(n, "target.state"), !r[e].prevState || "checkbox" !== n.target.subType && "radio" !== n.target.subType || (r[e].prevState.checked = !r[e].prevState.checked)), r[e].visitedCount = r[e].visitedCount + 1 || 1, r[e].webEvent = n, r[e].processedChange = !1, r[e].processedClick = !1, Q(n, e)) } function Z(e, n) { if ("select" === n.target.type && b && b.target.id === e) return void (b = null); G(e, n); const i = o[o.length - 1]; "focus" === i.event.type && (i.event.type = "click", i.event.tlEvent = F(n)); const a = n.nativeEvent; a && (!window.MouseEvent || !(a instanceof MouseEvent && 0 === a.detail) || window.PointerEvent && a instanceof PointerEvent && "" !== a.pointerType) && (i.target.position.relXY = t.getValue(n, "target.position.relXY")), r[e].processedChange || (r[e].webEvent = n), r[e].processedClick = !0, H(n.target) && J(e, n, !0), b = n } function $(e, n) { const r = e; if (t.getValue(n, "target.element.disabled", !1)) switch (n.type) { case "pointerdown": u = r; break; case "pointerup": r === u && (n.type = "click", Z(e, n)), u = null } } function ee() { let e; s && (e = s.clientState, e.viewPortHeight > 0 && e.viewPortHeight < S && e.viewPortWidth > 0 && e.viewPortWidth < S && W(s), l = s, s = null, m = v || m, y = null), ee.timeoutId = 0 } function te(e) { let n = null; if (!t.isOperaMini) return s = function (e) { const n = document.documentElement || {}, r = document.body || {}, i = window.screen, o = i.width, a = i.height, s = t.getValue(e, "orientation", 0); let c; const u = { type: 1, clientState: { pageWidth: Math.max(r.clientWidth || 0, n.offsetWidth || 0, n.scrollWidth || 0), pageHeight: Math.max(r.clientHeight || 0, n.offsetHeight || 0, n.scrollHeight || 0), viewPortWidth: window.innerWidth || n.clientWidth, viewPortHeight: window.innerHeight || n.clientHeight, viewPortX: Math.round(window.pageXOffset || (n || r).scrollLeft || 0), viewPortY: Math.round(window.pageYOffset || (n || r).scrollTop || 0), deviceOrientation: s, event: t.getValue(e, "type") } }, d = u.clientState; c = t.isiOS && 90 === Math.abs(s) ? a : o, l = l || u, "unload" === d.event && d.viewPortHeight === d.pageHeight && d.viewPortWidth === d.pageWidth && l.clientState.viewPortHeight < d.viewPortHeight && (d.viewPortHeight = l.clientState.viewPortHeight, d.viewPortWidth = l.clientState.viewPortWidth), d.viewPortY + d.viewPortHeight > d.pageHeight && (d.viewPortY = d.pageHeight - d.viewPortHeight), d.viewPortY < 0 && (d.viewPortY = 0); const f = d.viewPortWidth ? c / d.viewPortWidth : 1; return d.deviceScale = f.toFixed(3), d.viewTime = 0, m && y && (d.viewTime = y.getTime() - m.getTime()), "scroll" === e.type && (d.viewPortXStart = l.clientState.viewPortX, d.viewPortYStart = l.clientState.viewPortY), u }(e), "scroll" === e.type || "resize" === e.type ? (ee.timeoutId && window.clearTimeout(ee.timeoutId), ee.timeoutId = window.setTimeout(ee, t.getValue(T, "scrollTimeout", 2e3))) : "touchstart" === e.type || "load" === e.type ? s && (x = parseFloat(s.clientState.deviceScale)) : "touchend" === e.type && s && (_ = parseFloat(s.clientState.deviceScale), ee()), "load" !== e.type && "unload" !== e.type || ("unload" === e.type && d && (n = t.clone(s), n.clientState.event = "attention", n.clientState.viewTime = (new Date).getTime() - d), ee(), n && (s = n, ee())), s } function ne(e) { const n = {}, r = t.getValue(e, "nativeEvent.rotation", 0) || t.getValue(e, "nativeEvent.touches[0].webkitRotationAngle", 0); let i = null; const o = { type: 4, event: { type: "touchend" }, target: { id: t.getValue(e, "target.id"), idType: t.getValue(e, "target.idType") } }; 2 === t.getValue(e, "nativeEvent.changedTouches.length", 0) + t.getValue(e, "nativeEvent.touches.length", 0) && (te(e), i = { rotation: r ? r.toFixed(2) : 0, scale: _ ? _.toFixed(2) : 1 }, i.pinch = function () { let e; const t = _ - x; return e = isNaN(t) ? "INVALID" : t < 0 ? "CLOSE" : t > 0 ? "OPEN" : "NONE", e }(), n.scale = x ? x.toFixed(2) : 1, o.target.prevState = n, o.target.currState = i, W(o)) } function re(t) { let n, r, i = null; for (n in E) Object.prototype.hasOwnProperty.call(E, n) && (r = E[n].exception, r.repeats > 1 && (i = { type: 6, exception: r }, e.post(i))); o && K(o), y = new Date, te(t), h !== p && e.normalizeUrl(location.hash, 2) !== h || TLT.logScreenviewUnload(h) } function ie() { h = t.getValue(T, "forceRootScreenview", !1) ? p : e.normalizeUrl(location.hash, 2) || p } return { init: function () { o = [] }, destroy: function () { J(i), o = [], ee.timeoutId && (window.clearTimeout(ee.timeoutId), ee.timeoutId = 0) }, onevent: function (a) { let s, l, u = null, d = null; if ("object" == typeof a && a.type) { if (!function (e, n) { const r = ["type", "name", "target.id"]; let i, o, a = null, s = !0, l = 0, c = 0, u = 0; if (!e || !n || "object" != typeof e || "object" != typeof n) return !1; for (i = 0, o = r.length; s && i < o; i += 1)if (a = r[i], t.getValue(e, a) !== t.getValue(n, a)) { s = !1; break } return s && (c = t.getValue(e, "timestamp"), u = t.getValue(n, "timestamp"), isNaN(c) && isNaN(u) || (l = Math.abs(t.getValue(e, "timestamp") - t.getValue(n, "timestamp")), (isNaN(l) || l > 10) && (s = !1))), s }(a, f)) { switch (f = a, u = t.getValue(a, "target.id"), r[u] || (r[u] = {}), function (e, n) { let i = !1; const a = o.length, s = a ? o[a - 1] : null; if (!s) return i; const l = s.target.id; l !== e && "selectList" !== s.target.tltype && ("focus" !== n.type && "click" !== n.type && "change" !== n.type && "blur" !== n.type && "unload" !== n.type || (J(l), i = !0)), l === e && ("click" === n.type && r[e].processedClick || "change" === n.type && r[e].processedChange || "pointerup" === n.type && r[e].processedClick && t.getValue(n.target, "state.disabled", !1)) && (J(l, null, !0), i = !0) }(u, a), a.type) { case "hashchange": break; case "focus": G(u, a); break; case "blur": J(u, a); break; case "pointerdown": case "pointerup": $(u, a); break; case "click": Z(u, a); break; case "change": !function (e, n) { G(e, n); const i = o[o.length - 1]; i.event.type = "change", i.event.tlEvent = F(n), i.target.currState = n.target.state, r[e].prevState && (i.target.prevState = r[e].prevState, "boolean" == typeof i.target.currState.checked && (i.target.prevState.checked = !i.target.currState.checked)), r[e].webEvent = n, r[e].processedChange = !0, -1 !== t.matchTarget(A, n.target) && J(e, n) }(u, a); break; case "orientationchange": !function (e) { const r = e.orientation; W({ type: 4, event: { type: "orientationchange" }, target: { prevState: { orientation: n, orientationMode: t.getOrientationMode(n) }, currState: { orientation: r, orientationMode: t.getOrientationMode(r) } } }), n = r }(a); break; case "touchstart": !function (e) { 2 === t.getValue(e, "nativeEvent.touches.length", 0) && te(e) }(a); break; case "touchend": ne(a); break; case "loadWithFrames": TLT.logScreenviewLoad("rootWithFrames"); break; case "load": n = a.orientation, m = new Date, ("number" != typeof t.getOrientationAngle() || t.isAndroid) && (l = window.screen.width > window.screen.height ? 90 : 0, s = t.getOrientationAngle(), Math.abs(s) === l || 180 === s && 0 === l || 270 === s && 90 === l || (t.isLandscapeZeroDegrees = !0, 180 === Math.abs(s) || 0 === Math.abs(s) ? n = 90 : 90 !== Math.abs(s) && 270 !== Math.abs(s) || (n = 0))), setTimeout((function () { e.isInitialized() && te(a) }), 100), ie(), TLT.logScreenviewLoad(h); break; case "screenview_load": g = new Date, function () { let e; for (e in r) Object.prototype.hasOwnProperty.call(r, e) && (r[e].visitedCount = 0) }(), d = B("load", null, a.name); break; case "screenview_unload": d = B("unload", null, a.name); break; case "resize": case "scroll": y || (y = new Date), v = new Date, te(a); break; case "unload": re(a); break; case "mousemove": !function (n) { let r, i, o, a = 0, s = 0; if (!C.enabled || Object.prototype.hasOwnProperty.call(window, "ontouchstart")) return; if (I >= P) return; const l = { element: { id: n.target.id, idType: n.target.idType }, x: n.position.x, y: n.position.y, offset: e.getCurrentOffset() }; if (null !== D) { if (a = l.offset - D.offset, k && a < k) return; if (i = Math.abs(l.x - D.x), o = Math.abs(l.y - D.y), s = i > o ? i : o, L && s < L) return; a > R && (R = a) } const c = JSON.stringify(l.element); r = M[c], void 0 === r && (V.push(l.element), r = V.length - 1, M[c] = r); const u = t.getValue(n, "target.position.relXY").split(","); z.push([r, u[0], u[1], l.offset]), I += 1, D = l }(a); break; case "error": !function (n) { let r; const i = t.getValue(n, "nativeEvent.message"); let o = t.getValue(n, "nativeEvent.filename", ""); const a = t.getValue(n, "nativeEvent.lineno", -1), s = t.getValue(n, "nativeEvent.error"); if ("string" == typeof i) { if (o && (o = e.normalizeUrl(o, 6)), r = s && s.stack ? s.stack.toString() : (i + " " + o + " " + a).toString(), E[r]) E[r].exception.repeats = E[r].exception.repeats + 1; else { const t = { type: 6, exception: { description: i, url: o, line: a } }; e.post(t), E[r] = { exception: { description: i, url: o, line: a, repeats: 1 } } } c += 1 } }(a); break; case "visibilitychange": !function (e) { const t = "visible" === document.visibilityState, n = { type: 4, event: { type: "visibilitychange" }, target: { prevState: { visible: N }, currState: { visible: t } } }, r = B(e.type, e.target); r && (n.dcid = r), W(n), N = t }(a), O && (!1 === N && TLT ? (re(a), TLT.flushAll(), TLT.updatePageId()) : (h || ie(), h !== p && e.normalizeUrl(location.hash, 2) !== h || TLT.logScreenviewLoad(h))); break; default: !function (e) { const n = { type: 4, event: { tlEvent: F(e), type: e.type }, target: { id: t.getValue(e, "target.id"), idType: t.getValue(e, "target.idType"), currState: t.getValue(e, "target.state") } }, r = B(e.type, e.target); r && (n.dcid = r), W(n) }(a) }return i = u, d } f = a } }, onmessage: function () { } } }));
// UIC Configuration
if (window.location.hostname.indexOf("spie.org") > -1)
{
    if ((window.location.hostname == "www.spie.org")
        || (window.location.hostname == "spie.org"))
    {  // SPIE production site
        appKeyValue = "3435395890ed4b548b8f9e825f95816c"
    } else
    {  // SPIE TEST
        appKeyValue = "9faca9c7703147e5a6b42e4f9155d269"
    }
} else if (window.location.hostname.indexOf("spiedigitallibrary.org") > -1)
{
    if (window.location.hostname == "www.spiedigitallibrary.org")
    { // SPDL production site
        appKeyValue = "087e9dc9211e4bd2b01b1bf77b2d503e"
    } else
    {  // SPDL TEST
        appKeyValue = "ac3700103a974af4ad1b854bf1bd992e"
    }
} else
{ // unknown site
    appKeyValue = "373b350821df4c7d8b96d989ffe5aaff"  // TEST
}
var intTLTCheck3 = 0;
TLTCheck3 = setInterval(function ()
{
    ++intTLTCheck3;
    if (intTLTCheck3 > 6) { clearInterval(TLTCheck3) };
    if (typeof TLT == "object")
    {
        var myConfig = TLT.getDefaultConfig();  // replace const with var to support GTM (no ECMASCRIPT6)
        myConfig.core.buildNote = "Tealeaf6.4.72-20240611"
        myConfig.services.message.privacy = [{ exclude: true, targets: [".tlCollect"], maskType: 3 }]
        myConfig.services.message.privacyPatterns = []
        myConfig.services.domCapture.diffEnabled = false
        myConfig.modules.performance.performanceAlert = { enabled: false, threshold: 3000, maxAlerts: 100, blacklist: [] }
        myConfig.modules.replay.domCapture.enabled = false
        myConfig.modules.replay.mousemove.enabled = false
        myConfig.core.modules.overstat.enabled = false
        myConfig.core.modules.gestures.enabled = false
        myConfig.core.modules.ajaxListener.enabled = false
        TLT.initLibAdv(appKeyValue, "https://lib-us-1.brilliantcollector.com/collector/collectorPost", myConfig, true, false, false, false, false)
        clearInterval(TLTCheck3);
    }
}, 200);
// DAtoTealeafForwarder
if (typeof cmSetClientID !== "function")
{
    var cmSetClientID = function (h, b, d, l, c) { return };  // declare function as var to support GTM (no ECMASCRIPT6)
}

if (!cm_AttributeDelimiter)
{
    var cm_AttributeDelimiter = "-_-"
}
if (typeof cmSetupOther !== "function")
{
    var cmSetupOther = function (b)
    {  // declare function as var to support GTM (no ECMASCRIPT6)
        for (var a in b)
        {
            window[a] = b[a]
        }
    }
}
if (typeof cmDisplayShops !== "function")
{
    var cmDisplayShops = function () { return }  // declare function as var to support GTM (no ECMASCRIPT6)
    var cmDisplayShop5s = cmDisplayShop9s = cmDisplayShops;
}

function cmCreatePageviewTag(b, f, d, e, c, a)
{
    if (typeof cmMakeTag === "function")
    {
        cmMakeTag(["tid", "1", "pi", b, "cg", f, "se", d, "sr", e, "cmAttributes", c, "cmExtraFields", a])
    }
    var intTLTCheck,
        attrArray = new Array();
    if (c !== null && typeof c !== "undefined" && c !== "")
    {
        attrArray = c.split(cm_AttributeDelimiter);
        var x;
        for (x = 0; x < attrArray.length; ++x)
        {
            if (attrArray[x] == "")
            {
                attrArray[x] = null;
            }
        }
    }
    var TLTCheck = setInterval(function ()
    {  // polling needed on landing pages
        ++intTLTCheck;
        if (intTLTCheck > 6) { clearInterval(TLTCheck); return; }
        if (d > "")
        {
            if (TLT.isInitialized())
            {
                TLT.logCustomEvent("ibmsearchedSite", {
                    description: "ibmsearchedSite",
                    pageID: b,
                    category: f,
                    searchTerms: d,
                    searchResultCount: e,
                    PageURL: window.location.href,
                    RefURL: document.referrer,
                    at1: attrArray[0],
                    at2: attrArray[1],
                    at3: attrArray[2],
                    at4: attrArray[3],
                    at5: attrArray[4],
                    at6: attrArray[5],
                    at7: attrArray[6],
                    at8: attrArray[7],
                    at9: attrArray[8],
                    at10: attrArray[9],
                    at11: attrArray[10],
                    at12: attrArray[11],
                    at13: attrArray[12],
                    at14: attrArray[13],
                    at15: attrArray[14],
                    at16: attrArray[15],
                    at17: attrArray[16],
                    at18: attrArray[17],
                    at19: attrArray[18],
                    at20: attrArray[19],
                    at21: attrArray[20],
                    at22: attrArray[21],
                    at23: attrArray[22],
                    at24: attrArray[23],
                    at25: attrArray[24],
                    at26: attrArray[25],
                    at27: attrArray[26],
                    at28: attrArray[27],
                    at29: attrArray[28],
                    at30: attrArray[29],
                    at31: attrArray[30],
                    at32: attrArray[31],
                    at33: attrArray[32],
                    at34: attrArray[33],
                    at35: attrArray[34],
                    at36: attrArray[35],
                    at37: attrArray[36],
                    at38: attrArray[37],
                    at39: attrArray[38],
                    at40: attrArray[39],
                    at41: attrArray[40],
                    at42: attrArray[41],
                    at43: attrArray[42],
                    at44: attrArray[43],
                    at45: attrArray[44],
                    at46: attrArray[45],
                    at47: attrArray[46],
                    at48: attrArray[47],
                    at49: attrArray[48],
                    at50: attrArray[49]
                });
                // also send pageview event for each onsite search event
                TLT.logCustomEvent("ibmpageView", {
                    description: "ibmpageView",
                    pageID: b,
                    category: f,
                    PageURL: window.location.href,
                    RefURL: document.referrer,
                    at1: attrArray[0],
                    at2: attrArray[1],
                    at3: attrArray[2],
                    at4: attrArray[3],
                    at5: attrArray[4],
                    at6: attrArray[5],
                    at7: attrArray[6],
                    at8: attrArray[7],
                    at9: attrArray[8],
                    at10: attrArray[9],
                    at11: attrArray[10],
                    at12: attrArray[11],
                    at13: attrArray[12],
                    at14: attrArray[13],
                    at15: attrArray[14],
                    at16: attrArray[15],
                    at17: attrArray[16],
                    at18: attrArray[17],
                    at19: attrArray[18],
                    at20: attrArray[19],
                    at21: attrArray[20],
                    at22: attrArray[21],
                    at23: attrArray[22],
                    at24: attrArray[23],
                    at25: attrArray[24],
                    at26: attrArray[25],
                    at27: attrArray[26],
                    at28: attrArray[27],
                    at29: attrArray[28],
                    at30: attrArray[29],
                    at31: attrArray[30],
                    at32: attrArray[31],
                    at33: attrArray[32],
                    at34: attrArray[33],
                    at35: attrArray[34],
                    at36: attrArray[35],
                    at37: attrArray[36],
                    at38: attrArray[37],
                    at39: attrArray[38],
                    at40: attrArray[39],
                    at41: attrArray[40],
                    at42: attrArray[41],
                    at43: attrArray[42],
                    at44: attrArray[43],
                    at45: attrArray[44],
                    at46: attrArray[45],
                    at47: attrArray[46],
                    at48: attrArray[47],
                    at49: attrArray[48],
                    at50: attrArray[49]
                });
                clearInterval(TLTCheck);
            }
        } else
        {
            if (TLT.isInitialized())
            {
                TLT.logCustomEvent("ibmpageView", {
                    description: "ibmpageView",
                    pageID: b,
                    category: f,
                    PageURL: window.location.href,
                    RefURL: document.referrer,
                    at1: attrArray[0],
                    at2: attrArray[1],
                    at3: attrArray[2],
                    at4: attrArray[3],
                    at5: attrArray[4],
                    at6: attrArray[5],
                    at7: attrArray[6],
                    at8: attrArray[7],
                    at9: attrArray[8],
                    at10: attrArray[9],
                    at11: attrArray[10],
                    at12: attrArray[11],
                    at13: attrArray[12],
                    at14: attrArray[13],
                    at15: attrArray[14],
                    at16: attrArray[15],
                    at17: attrArray[16],
                    at18: attrArray[17],
                    at19: attrArray[18],
                    at20: attrArray[19],
                    at21: attrArray[20],
                    at22: attrArray[21],
                    at23: attrArray[22],
                    at24: attrArray[23],
                    at25: attrArray[24],
                    at26: attrArray[25],
                    at27: attrArray[26],
                    at28: attrArray[27],
                    at29: attrArray[28],
                    at30: attrArray[29],
                    at31: attrArray[30],
                    at32: attrArray[31],
                    at33: attrArray[32],
                    at34: attrArray[33],
                    at35: attrArray[34],
                    at36: attrArray[35],
                    at37: attrArray[36],
                    at38: attrArray[37],
                    at39: attrArray[38],
                    at40: attrArray[39],
                    at41: attrArray[40],
                    at42: attrArray[41],
                    at43: attrArray[42],
                    at44: attrArray[43],
                    at45: attrArray[44],
                    at46: attrArray[45],
                    at47: attrArray[46],
                    at48: attrArray[47],
                    at49: attrArray[48],
                    at50: attrArray[49]
                });
                clearInterval(TLTCheck);
            }
        }
    }, 200);

}

function cmCreateManualPageviewTag(a, c, d, e, f, g, h, m)
{
    if (typeof cmMakeTag === "function")
    {
        cmMakeTag(["tid", "1", "pi", a, "cg", c, "ul", d, "rf", e, "se", g, "sr", h, "cmAttributes", f, "cmExtraFields", m])
    }
    var intTLTCheck,
        attrArray = new Array();
    if (f !== null && typeof f !== "undefined" && f !== "")
    {
        attrArray = f.split(cm_AttributeDelimiter);
        var x;
        for (x = 0; x < attrArray.length; ++x)
        {
            if (attrArray[x] == "")
            {
                attrArray[x] = null;
            }
        }
    }
    var TLTCheck = setInterval(function ()
    {  // polling needed on landing pages
        ++intTLTCheck;
        if (intTLTCheck > 6) { clearInterval(TLTCheck); return; }
        if (g > "")
        {
            if (TLT.isInitialized())
            {
                TLT.logCustomEvent("ibmsearchedSite", {
                    description: "ibmsearchedSite",
                    pageID: a,
                    category: c,
                    searchTerms: g,
                    searchResultCount: h,
                    pageURL: d,
                    referringURL: e,
                    at1: attrArray[0],
                    at2: attrArray[1],
                    at3: attrArray[2],
                    at4: attrArray[3],
                    at5: attrArray[4],
                    at6: attrArray[5],
                    at7: attrArray[6],
                    at8: attrArray[7],
                    at9: attrArray[8],
                    at10: attrArray[9],
                    at11: attrArray[10],
                    at12: attrArray[11],
                    at13: attrArray[12],
                    at14: attrArray[13],
                    at15: attrArray[14],
                    at16: attrArray[15],
                    at17: attrArray[16],
                    at18: attrArray[17],
                    at19: attrArray[18],
                    at20: attrArray[19],
                    at21: attrArray[20],
                    at22: attrArray[21],
                    at23: attrArray[22],
                    at24: attrArray[23],
                    at25: attrArray[24],
                    at26: attrArray[25],
                    at27: attrArray[26],
                    at28: attrArray[27],
                    at29: attrArray[28],
                    at30: attrArray[29],
                    at31: attrArray[30],
                    at32: attrArray[31],
                    at33: attrArray[32],
                    at34: attrArray[33],
                    at35: attrArray[34],
                    at36: attrArray[35],
                    at37: attrArray[36],
                    at38: attrArray[37],
                    at39: attrArray[38],
                    at40: attrArray[39],
                    at41: attrArray[40],
                    at42: attrArray[41],
                    at43: attrArray[42],
                    at44: attrArray[43],
                    at45: attrArray[44],
                    at46: attrArray[45],
                    at47: attrArray[46],
                    at48: attrArray[47],
                    at49: attrArray[48],
                    at50: attrArray[49]
                });
                clearInterval(TLTCheck);
            }
        } else
        {
            if (TLT.isInitialized())
            {
                TLT.logCustomEvent("ibmpageView", {
                    description: "ibmpageView",
                    pageID: a,
                    category: c,
                    pageURL: d,
                    referringURL: e,
                    at1: attrArray[0],
                    at2: attrArray[1],
                    at3: attrArray[2],
                    at4: attrArray[3],
                    at5: attrArray[4],
                    at6: attrArray[5],
                    at7: attrArray[6],
                    at8: attrArray[7],
                    at9: attrArray[8],
                    at10: attrArray[9],
                    at11: attrArray[10],
                    at12: attrArray[11],
                    at13: attrArray[12],
                    at14: attrArray[13],
                    at15: attrArray[14],
                    at16: attrArray[15],
                    at17: attrArray[16],
                    at18: attrArray[17],
                    at19: attrArray[18],
                    at20: attrArray[19],
                    at21: attrArray[20],
                    at22: attrArray[21],
                    at23: attrArray[22],
                    at24: attrArray[23],
                    at25: attrArray[24],
                    at26: attrArray[25],
                    at27: attrArray[26],
                    at28: attrArray[27],
                    at29: attrArray[28],
                    at30: attrArray[29],
                    at31: attrArray[30],
                    at32: attrArray[31],
                    at33: attrArray[32],
                    at34: attrArray[33],
                    at35: attrArray[34],
                    at36: attrArray[35],
                    at37: attrArray[36],
                    at38: attrArray[37],
                    at39: attrArray[38],
                    at40: attrArray[39],
                    at41: attrArray[40],
                    at42: attrArray[41],
                    at43: attrArray[42],
                    at44: attrArray[43],
                    at45: attrArray[44],
                    at46: attrArray[45],
                    at47: attrArray[46],
                    at48: attrArray[47],
                    at49: attrArray[48],
                    at50: attrArray[49]
                });
                clearInterval(TLTCheck);
            }
        }
    }, 200);

}

function cmCreateManualLinkClickTag(b, c, a)
{
    if (typeof cmMakeTag === "function")
    {
        if (cM != null)
        {
            var d = new Date();
            cGK = d.getTime();
            b = cG7.normalizeURL(b, true);
            cM(cm_ClientTS, cGK, c, b, false, a)
        }
    }
    if (TLT.isInitialized())
    {
        TLT.logCustomEvent("DA manual linkclick", {
            description: "DA manual linkclick",
            href: b,
            linkName: c,
            pageID: a
        });
    }

}

function cmCreateManualImpressionTag(a, e, b, d, c)
{
    if (typeof cmMakeTag === "function")
    {
        if (!a) { a = c1(cm_ClientID) }	// unless customer function call provides pageID, pageID will be empty
        cmMakeTag(["tid", "9", "pi", a, "cm_sp", e, "cm_re", b, "cm_cr", d, "cm_me", c, "st", cm_ClientTS])
    }
    if (TLT.isInitialized())
    {
        TLT.logCustomEvent("DA manual impression", {
            description: "DA manual impression",
            pageID: a,
            site_promotion: e,
            real_estate: b
        });
    }

}

function cmCreateConversionEventTag(e, d, g, f, c, b, a)
{
    if (typeof cmMakeTag === "function")
    {
        if (!a)
        {
            if (typeof (cG7.cM0[cm_ClientID]) != "undefined")
            {
                a = cG7.cM0[cm_ClientID]
            }
        }
        cmMakeTag(["tid", "14", "cid", e, "cat", d, "ccid", g, "cpt", f, "cmAttributes", c, "cmExtraFields", b, "pi", a])
    }
    var intTLTCheck,
        attrArray = new Array();
    if (c !== null && typeof c !== "undefined" && c !== "")
    {
        attrArray = c.split(cm_AttributeDelimiter);
        var x;
        for (x = 0; x < attrArray.length; ++x)
        {
            if (attrArray[x] == "")
            {
                attrArray[x] = null;
            }
        }
    }
    var TLTCheck = setInterval(function ()
    {  // polling needed on landing pages
        ++intTLTCheck;
        if (intTLTCheck > 6) { clearInterval(TLTCheck); return; }
        if (TLT.isInitialized())
        {
            TLT.logCustomEvent("ibmconversion", {
                description: "ibmconversion",
                eventName: e,
                actionType: d,
                category: g,
                points: f,
                at1: attrArray[0],
                at2: attrArray[1],
                at3: attrArray[2],
                at4: attrArray[3],
                at5: attrArray[4],
                at6: attrArray[5],
                at7: attrArray[6],
                at8: attrArray[7],
                at9: attrArray[8],
                at10: attrArray[9],
                at11: attrArray[10],
                at12: attrArray[11],
                at13: attrArray[12],
                at14: attrArray[13],
                at15: attrArray[14],
                at16: attrArray[15],
                at17: attrArray[16],
                at18: attrArray[17],
                at19: attrArray[18],
                at20: attrArray[19],
                at21: attrArray[20],
                at22: attrArray[21],
                at23: attrArray[22],
                at24: attrArray[23],
                at25: attrArray[24],
                at26: attrArray[25],
                at27: attrArray[26],
                at28: attrArray[27],
                at29: attrArray[28],
                at30: attrArray[29],
                at31: attrArray[30],
                at32: attrArray[31],
                at33: attrArray[32],
                at34: attrArray[33],
                at35: attrArray[34],
                at36: attrArray[35],
                at37: attrArray[36],
                at38: attrArray[37],
                at39: attrArray[38],
                at40: attrArray[39],
                at41: attrArray[40],
                at42: attrArray[41],
                at43: attrArray[42],
                at44: attrArray[43],
                at45: attrArray[44],
                at46: attrArray[45],
                at47: attrArray[46],
                at48: attrArray[47],
                at49: attrArray[48],
                at50: attrArray[49]
            });
            clearInterval(TLTCheck);
        }
    }, 200);

}

function cmCreateElementTag(d, c, e, b, a)
{
    if (typeof cmMakeTag === "function")
    {
        if (!b)
        {
            if (typeof (cG7.cM0[cm_ClientID]) != "undefined")
            {
                b = cG7.cM0[cm_ClientID]
            }
        }
        cmMakeTag(["tid", "15", "eid", d, "ecat", c, "cmAttributes", e, "pi", b, "cmExtraFields", a])
    }
    var attrArray = new Array(),
        eventName = "ibmelement";
    if (e !== null && typeof e !== "undefined" && e !== "")
    {
        attrArray = e.split(cm_AttributeDelimiter);
        var x;
        for (x = 0; x < attrArray.length; ++x)
        {
            if (attrArray[x] == "")
            {
                attrArray[x] = null;
            }
        }
        if (attrArray[12])
        {
            interaction = attrArray[12].toString(); // remove 'let' to support GTM (no ECMASCRIPT6)
            switch (interaction)
            {
                case "0":
                    eventName = "ibmelementVideoLaunched";
                    break;
                case "1":
                    eventName = "ibmelementVideoPaused";
                    break;
                case "2":
                    eventName = "ibmelementVideoPlayed";
                    break;
                case "3":
                    eventName = "ibmelementVideoCompleted";
                    break;
                default:
                    eventName = "ibmelement";
                    break;
            }
        }
    }
    if (TLT.isInitialized())
    {
        TLT.logCustomEvent(eventName, {
            description: eventName,
            elementId: d,
            elementCategory: c,
            pageID: b,
            at1: attrArray[0],
            at2: attrArray[1],
            at3: attrArray[2],
            at4: attrArray[3],
            at5: attrArray[4],
            at6: attrArray[5],
            at7: attrArray[6],
            at8: attrArray[7],
            at9: attrArray[8],
            at10: attrArray[9],
            at11: attrArray[10],
            at12: attrArray[11],
            videoInteraction: attrArray[12],
            videoTimestamp: attrArray[13],
            videoTotalLength: attrArray[14],
            at16: attrArray[15],
            at17: attrArray[16],
            at18: attrArray[17],
            at19: attrArray[18],
            at20: attrArray[19],
            at21: attrArray[20],
            at22: attrArray[21],
            at23: attrArray[22],
            at24: attrArray[23],
            at25: attrArray[24],
            at26: attrArray[25],
            at27: attrArray[26],
            at28: attrArray[27],
            at29: attrArray[28],
            at30: attrArray[29],
            at31: attrArray[30],
            at32: attrArray[31],
            at33: attrArray[32],
            at34: attrArray[33],
            at35: attrArray[34],
            at36: attrArray[35],
            at37: attrArray[36],
            at38: attrArray[37],
            at39: attrArray[38],
            at40: attrArray[39],
            at41: attrArray[40],
            at42: attrArray[41],
            at43: attrArray[42],
            at44: attrArray[43],
            at45: attrArray[44],
            at46: attrArray[45],
            at47: attrArray[46],
            at48: attrArray[47],
            at49: attrArray[48],
            at50: attrArray[49]
        });
    }

}

function cmCreateRegistrationTag(e, f, g, a, d, c, b)
{
    if (typeof cmMakeTag === "function")
    {
        cmMakeTag(["tid", "2", "cd", e, "em", f, "ct", g, "sa", a, "zp", d, "cy", c, "cmAttributes", b])
    }
    var intTLTCheck,
        attrArray = new Array();
    if (b !== null && typeof b !== "undefined" && b !== "")
    {
        attrArray = b.split(cm_AttributeDelimiter);
        var x;
        for (x = 0; x < attrArray.length; ++x)
        {
            if (attrArray[x] == "")
            {
                attrArray[x] = null;
            }
        }
    }
    if (TLT.isInitialized())
    {
        TLT.logCustomEvent("ibmregistration", {
            description: "ibmregistration",
            registrationid: e,
            email_address: f,
            recipientID: "",  // optional, for Campaign.  Populate from datalayer, var, cookie, query string, etc.
            registeredCity: g,
            registeredState: a,
            registeredZipCode: d,
            registeredCountry: c,
            // only include contactConsent if Campaign Contact records should be created when contact is not found in database
            // dont send contactConsent if new contacts are imported from another CRM like salesforce, or duplicate contacts could result
            //			contactConsent: "email,opt-in",
            at1: attrArray[0],
            at2: attrArray[1],
            at3: attrArray[2],
            at4: attrArray[3],
            at5: attrArray[4],
            at6: attrArray[5],
            at7: attrArray[6],
            at8: attrArray[7],
            at9: attrArray[8],
            at10: attrArray[9],
            at11: attrArray[10],
            at12: attrArray[11],
            at13: attrArray[12],
            at14: attrArray[13],
            at15: attrArray[14],
            at16: attrArray[15],
            at17: attrArray[16],
            at18: attrArray[17],
            at19: attrArray[18],
            at20: attrArray[19],
            at21: attrArray[20],
            at22: attrArray[21],
            at23: attrArray[22],
            at24: attrArray[23],
            at25: attrArray[24],
            at26: attrArray[25],
            at27: attrArray[26],
            at28: attrArray[27],
            at29: attrArray[28],
            at30: attrArray[29],
            at31: attrArray[30],
            at32: attrArray[31],
            at33: attrArray[32],
            at34: attrArray[33],
            at35: attrArray[34],
            at36: attrArray[35],
            at37: attrArray[36],
            at38: attrArray[37],
            at39: attrArray[38],
            at40: attrArray[39],
            at41: attrArray[40],
            at42: attrArray[41],
            at43: attrArray[42],
            at44: attrArray[43],
            at45: attrArray[44],
            at46: attrArray[45],
            at47: attrArray[46],
            at48: attrArray[47],
            at49: attrArray[48],
            at50: attrArray[49]
        });
    }
}

function cmCreateProductviewTag(e, g, f, d, c, h, b)
{
    h = h ? h : location.href;
    if (typeof cmMakeTag === "function")
    {
        var a = c1(cm_ClientID);
        cmMakeTag(["tid", "5", "pi", a ? a : "Product: " + g + " (" + e + ")", "pr", e, "pm", g, "cg", f, "pc", "N", "cm_vc", c ? c : cmExtractParameter("cm_vc", document.location.href), "cmAttributes", d, "cmPageURL", h, "cmExtraFields", b])
    }
    var intTLTCheck,
        attrArray = new Array();
    if (d !== null && typeof d !== "undefined" && d !== "")
    {
        attrArray = d.split(cm_AttributeDelimiter);
        var x;
        for (x = 0; x < attrArray.length; ++x)
        {
            if (attrArray[x] == "")
            {
                attrArray[x] = null;
            }
        }
    }
    var TLTCheck = setInterval(function ()
    {  // polling needed on landing pages
        ++intTLTCheck;
        if (intTLTCheck > 6) { clearInterval(TLTCheck); return; }
        if (TLT.isInitialized())
        {
            TLT.logCustomEvent("ibmproductView", {
                description: "ibmproductView",
                itemProductId: e,
                itemProductName: g,
                itemCategory: f,
                productURL: h,
                at1: attrArray[0],
                at2: attrArray[1],
                at3: attrArray[2],
                at4: attrArray[3],
                at5: attrArray[4],
                at6: attrArray[5],
                at7: attrArray[6],
                at8: attrArray[7],
                at9: attrArray[8],
                at10: attrArray[9],
                at11: attrArray[10],
                at12: attrArray[11],
                at13: attrArray[12],
                at14: attrArray[13],
                at15: attrArray[14],
                at16: attrArray[15],
                at17: attrArray[16],
                at18: attrArray[17],
                at19: attrArray[18],
                at20: attrArray[19],
                at21: attrArray[20],
                at22: attrArray[21],
                at23: attrArray[22],
                at24: attrArray[23],
                at25: attrArray[24],
                at26: attrArray[25],
                at27: attrArray[26],
                at28: attrArray[27],
                at29: attrArray[28],
                at30: attrArray[29],
                at31: attrArray[30],
                at32: attrArray[31],
                at33: attrArray[32],
                at34: attrArray[33],
                at35: attrArray[34],
                at36: attrArray[35],
                at37: attrArray[36],
                at38: attrArray[37],
                at39: attrArray[38],
                at40: attrArray[39],
                at41: attrArray[40],
                at42: attrArray[41],
                at43: attrArray[42],
                at44: attrArray[43],
                at45: attrArray[44],
                at46: attrArray[45],
                at47: attrArray[46],
                at48: attrArray[47],
                at49: attrArray[48],
                at50: attrArray[49]
            });
            clearInterval(TLTCheck);
        }
    }, 200);

}

if (typeof cmMakeTag === "function")
{
    (function (b)
    {
        function c(d)
        {
            if (d && typeof d !== "string")
            {
                d = d.join(cm_AttributeDelimiter)
            }
            return d
        }
        b.cmAddShop = function (d)
        {
            var e = d.concat();

            function f(o, k, l, g)
            {
                var h = l[o],
                    p, m, n, i;
                if (typeof (h) !== "undefined")
                {
                    p = g[h];
                    if (p)
                    {
                        m = p[5];
                        n = p[7];
                        i = k[5];
                        k[5] = parseInt(m) + parseInt(k[5]);
                        k[7] = (((k[7] * i) + (n * m)) / k[5]);
                        g[h] = k
                    }
                } else
                {
                    l[o] = g.length;
                    g[g.length] = k
                }
            }
            f(d[1] + "|" + d[9] + "|" + c(d[11]) + "|" + c(d[13]), d, __sRefArray, __sArray);
            f(e[1], e, __sRefSkuArray, __sSkuArray)
        };

        function a(g, l, n, e, m, k, h, o, f)
        {
            if ((typeof (cm_currencyCode) == "undefined") || (!cm_currencyCode))
            {
                cm_currencyCode = ""
            }
            m = m.toString().replace(cmPricePattern, "");
            l = l.toString().replace(cmSpacePattern, "");
            var i = c(h),
                d = c(o);
            return ["pr", l, "pm", n, "qt", e, "bp", m, "cg", k, "cmAttributes", h, "cmExtraFields", o, "ha1", cm_hex_sha1("" + (i ? i + "|||" : "") + (d ? "extra" + d : "")), "cc", cm_currencyCode, "at", g, "tid", "4", "pc", "N", "cm_vc", f]
        }
        b.cmCreateShopAction5Tag = function (h, k, g, l, i, f, e, d)
        {
            d ? d : cmExtractParameter("cm_vc", document.location.href);
            cmAddShop(a("5", h, k, g, l, i, f, e, d))

            var intTLTCheck,
                attrArray = new Array();
            if ((typeof (cm_currencyCode) == "undefined") || (!cm_currencyCode))
            {
                cm_currencyCode = ""
            }
            if (f !== null && typeof f !== "undefined" && f !== "")
            {
                attrArray = f.split(cm_AttributeDelimiter);
                var x;
                for (x = 0; x < attrArray.length; ++x)
                {
                    if (attrArray[x] == "")
                    {
                        attrArray[x] = null;
                    }
                }
            }
            //		var TLTCheck=setInterval(function () {     // depending on DA tag implementation, delay can cause cartAdds for multi-shop-call pages to have last shop tag attributes (attrArray overwritten by last shop call)
            //			++intTLTCheck;
            //			if (intTLTCheck>6){clearInterval(TLTCheck);return;}
            if (TLT.isInitialized())
            {
                TLT.logCustomEvent("cartAdd", {
                    description: "cartAdd",
                    currency: cm_currencyCode,
                    itemProductId: h,
                    itemProductName: k,
                    itemQuantity: g,
                    itemBasePrice: l,
                    itemCategory: i,
                    at1: attrArray[0],
                    at2: attrArray[1],
                    at3: attrArray[2],
                    at4: attrArray[3],
                    at5: attrArray[4],
                    at6: attrArray[5],
                    at7: attrArray[6],
                    at8: attrArray[7],
                    at9: attrArray[8],
                    at10: attrArray[9],
                    at11: attrArray[10],
                    at12: attrArray[11],
                    at13: attrArray[12],
                    at14: attrArray[13],
                    at15: attrArray[14],
                    at16: attrArray[15],
                    at17: attrArray[16],
                    at18: attrArray[17],
                    at19: attrArray[18],
                    at20: attrArray[19],
                    at21: attrArray[20],
                    at22: attrArray[21],
                    at23: attrArray[22],
                    at24: attrArray[23],
                    at25: attrArray[24],
                    at26: attrArray[25],
                    at27: attrArray[26],
                    at28: attrArray[27],
                    at29: attrArray[28],
                    at30: attrArray[29],
                    at31: attrArray[30],
                    at32: attrArray[31],
                    at33: attrArray[32],
                    at34: attrArray[33],
                    at35: attrArray[34],
                    at36: attrArray[35],
                    at37: attrArray[36],
                    at38: attrArray[37],
                    at39: attrArray[38],
                    at40: attrArray[39],
                    at41: attrArray[40],
                    at42: attrArray[41],
                    at43: attrArray[42],
                    at44: attrArray[43],
                    at45: attrArray[44],
                    itemDescription: attrArray[45],
                    itemColor: attrArray[46],
                    itemSize: attrArray[47],
                    productImageURL: attrArray[48],
                    productURL: attrArray[49]
                });
                //				clearInterval(TLTCheck);
            }
            //		},200);

        };
        b.cmCreateShopAction9Tag = function (k, m, d, l, f, h, e, i, g, n)
        {
            e = e.toString().replace(cmPricePattern, "");
            cmAddShop(a("9", k, m, d, l, i, g, n).concat(["cd", f, "on", h, "tr", e]))

            var intTLTCheck,
                attrArray = new Array();
            if ((typeof (cm_currencyCode) == "undefined") || (!cm_currencyCode))
            {
                cm_currencyCode = ""
            }
            if (g !== null && typeof g !== "undefined" && g !== "")
            {
                attrArray = g.split(cm_AttributeDelimiter);
                var x;
                for (x = 0; x < attrArray.length; ++x)
                {
                    if (attrArray[x] == "")
                    {
                        attrArray[x] = null;
                    }
                }
            }
            //		var TLTCheck=setInterval(function () {     // depending on DA tag implementation, delay can cause ibmcartPurchaseItem for multi-shop-call pages to have last shop tag attributes (attrArray overwritten by last shop call)
            //			++intTLTCheck;
            //			if (intTLTCheck>6){clearInterval(TLTCheck);return;}
            if (TLT.isInitialized())
            {
                TLT.logCustomEvent("ibmcartPurchaseItem", {
                    description: "ibmcartPurchaseItem",
                    orderID: h,
                    orderTotal: e,
                    registrationid: f,
                    currency: cm_currencyCode,
                    itemProductId: k,
                    itemProductName: m,
                    itemQuantity: d,
                    itemBasePrice: l,
                    itemCategory: i,
                    at1: attrArray[0],
                    at2: attrArray[1],
                    at3: attrArray[2],
                    at4: attrArray[3],
                    at5: attrArray[4],
                    at6: attrArray[5],
                    at7: attrArray[6],
                    at8: attrArray[7],
                    at9: attrArray[8],
                    at10: attrArray[9],
                    at11: attrArray[10],
                    at12: attrArray[11],
                    at13: attrArray[12],
                    at14: attrArray[13],
                    at15: attrArray[14],
                    at16: attrArray[15],
                    at17: attrArray[16],
                    at18: attrArray[17],
                    at19: attrArray[18],
                    at20: attrArray[19],
                    at21: attrArray[20],
                    at22: attrArray[21],
                    at23: attrArray[22],
                    at24: attrArray[23],
                    at25: attrArray[24],
                    at26: attrArray[25],
                    at27: attrArray[26],
                    at28: attrArray[27],
                    at29: attrArray[28],
                    at30: attrArray[29],
                    at31: attrArray[30],
                    at32: attrArray[31],
                    at33: attrArray[32],
                    at34: attrArray[33],
                    at35: attrArray[34],
                    at36: attrArray[35],
                    at37: attrArray[36],
                    at38: attrArray[37],
                    at39: attrArray[38],
                    at40: attrArray[39],
                    at41: attrArray[40],
                    at42: attrArray[41],
                    at43: attrArray[42],
                    at44: attrArray[43],
                    at45: attrArray[44],
                    itemDescription: attrArray[45],
                    itemColor: attrArray[46],
                    itemSize: attrArray[47],
                    productImageURL: attrArray[48],
                    productURL: attrArray[49]
                });
                //				clearInterval(TLTCheck);
            }
            //		},200);

        }
    }(window));

} else
{

    cmCreateShopAction5Tag = function (h, k, g, l, i, f, e, d)
    {

        var intTLTCheck,
            attrArray = new Array();
        if ((typeof (cm_currencyCode) == "undefined") || (!cm_currencyCode))
        {
            cm_currencyCode = ""
        }
        if (f !== null && typeof f !== "undefined" && f !== "")
        {
            attrArray = f.split(cm_AttributeDelimiter);
            var x;
            for (x = 0; x < attrArray.length; ++x)
            {
                if (attrArray[x] == "")
                {
                    attrArray[x] = null;
                }
            }
        }
        //		var TLTCheck=setInterval(function () {     // depending on DA tag implementation, delay can cause cartAdds for multi-shop-call pages to have last shop tag attributes (attrArray overwritten by last shop call)
        //			++intTLTCheck;
        //			if (intTLTCheck>6){clearInterval(TLTCheck);return;}
        if (TLT.isInitialized())
        {
            TLT.logCustomEvent("cartAdd", {
                description: "cartAdd",
                orderID: "",
                orderTotal: "",
                currency: cm_currencyCode,
                itemProductId: h,
                itemProductName: k,
                itemQuantity: g,
                itemBasePrice: l,
                itemCategory: i,
                at1: attrArray[0],
                at2: attrArray[1],
                at3: attrArray[2],
                at4: attrArray[3],
                at5: attrArray[4],
                at6: attrArray[5],
                at7: attrArray[6],
                at8: attrArray[7],
                at9: attrArray[8],
                at10: attrArray[9],
                at11: attrArray[10],
                at12: attrArray[11],
                at13: attrArray[12],
                at14: attrArray[13],
                at15: attrArray[14],
                at16: attrArray[15],
                at17: attrArray[16],
                at18: attrArray[17],
                at19: attrArray[18],
                at20: attrArray[19],
                at21: attrArray[20],
                at22: attrArray[21],
                at23: attrArray[22],
                at24: attrArray[23],
                at25: attrArray[24],
                at26: attrArray[25],
                at27: attrArray[26],
                at28: attrArray[27],
                at29: attrArray[28],
                at30: attrArray[29],
                at31: attrArray[30],
                at32: attrArray[31],
                at33: attrArray[32],
                at34: attrArray[33],
                at35: attrArray[34],
                at36: attrArray[35],
                at37: attrArray[36],
                at38: attrArray[37],
                at39: attrArray[38],
                at40: attrArray[39],
                at41: attrArray[40],
                at42: attrArray[41],
                at43: attrArray[42],
                at44: attrArray[43],
                at45: attrArray[44],
                itemDescription: attrArray[45],
                itemColor: attrArray[46],
                itemSize: attrArray[47],
                productImageURL: attrArray[48],
                productURL: attrArray[49]
            });
            //				clearInterval(TLTCheck);
        }
        //		},200);

    };

    cmCreateShopAction9Tag = function (k, m, d, l, f, h, e, i, g, n)
    {

        var intTLTCheck,
            attrArray = new Array();
        if ((typeof (cm_currencyCode) == "undefined") || (!cm_currencyCode))
        {
            cm_currencyCode = ""
        }
        if (g !== null && typeof g !== "undefined" && g !== "")
        {
            attrArray = g.split(cm_AttributeDelimiter);
            var x;
            for (x = 0; x < attrArray.length; ++x)
            {
                if (attrArray[x] == "")
                {
                    attrArray[x] = null;
                }
            }
        }
        //		var TLTCheck=setInterval(function () {     // depending on DA tag implementation, delay can cause ibmcartPurchaseItem for multi-shop-call pages to have last shop tag attributes (attrArray overwritten by last shop call)
        //			++intTLTCheck;
        //			if (intTLTCheck>6){clearInterval(TLTCheck);return;}
        if (TLT.isInitialized())
        {
            TLT.logCustomEvent("ibmcartPurchaseItem", {
                description: "ibmcartPurchaseItem",
                orderID: h,
                orderTotal: e,
                registrationid: f,
                currency: cm_currencyCode,
                itemProductId: k,
                itemProductName: m,
                itemQuantity: d,
                itemBasePrice: l,
                itemCategory: i,
                at1: attrArray[0],
                at2: attrArray[1],
                at3: attrArray[2],
                at4: attrArray[3],
                at5: attrArray[4],
                at6: attrArray[5],
                at7: attrArray[6],
                at8: attrArray[7],
                at9: attrArray[8],
                at10: attrArray[9],
                at11: attrArray[10],
                at12: attrArray[11],
                at13: attrArray[12],
                at14: attrArray[13],
                at15: attrArray[14],
                at16: attrArray[15],
                at17: attrArray[16],
                at18: attrArray[17],
                at19: attrArray[18],
                at20: attrArray[19],
                at21: attrArray[20],
                at22: attrArray[21],
                at23: attrArray[22],
                at24: attrArray[23],
                at25: attrArray[24],
                at26: attrArray[25],
                at27: attrArray[26],
                at28: attrArray[27],
                at29: attrArray[28],
                at30: attrArray[29],
                at31: attrArray[30],
                at32: attrArray[31],
                at33: attrArray[32],
                at34: attrArray[33],
                at35: attrArray[34],
                at36: attrArray[35],
                at37: attrArray[36],
                at38: attrArray[37],
                at39: attrArray[38],
                at40: attrArray[39],
                at41: attrArray[40],
                at42: attrArray[41],
                at43: attrArray[42],
                at44: attrArray[43],
                at45: attrArray[44],
                itemDescription: attrArray[45],
                itemColor: attrArray[46],
                itemSize: attrArray[47],
                productImageURL: attrArray[48],
                productURL: attrArray[49]
            });
            //				clearInterval(TLTCheck);
        }
        //		},200);

    }
}

function cmCreateOrderTag(f, a, e, b, d, h, i, c, g)
{
    if ((typeof (cm_currencyCode) == "undefined") || (!cm_currencyCode))
    {
        cm_currencyCode = ""
    }
    if (typeof cmMakeTag === "function")
    {
        if (e)
        {
            e = e.toString().replace(cmPricePattern, "")
        }
        a = a.toString().replace(cmPricePattern, "");
        cmMakeTag(["tid", "3", "on", f, "tr", a, "sg", e, "cd", b, "ct", d, "sa", h, "zp", i, "cc", cm_currencyCode, "cmAttributes", c, "cmExtraFields", g])
    }

    var intTLTCheck,
        attrArray = new Array();

    if (c !== null && typeof c !== "undefined" && c !== "")
    {
        attrArray = c.split(cm_AttributeDelimiter);
        var x;
        for (x = 0; x < attrArray.length; ++x)
        {
            if (attrArray[x] == "")
            {
                attrArray[x] = null;
            }
        }
    }
    var TLTCheck = setInterval(function ()
    {
        ++intTLTCheck;
        if (intTLTCheck > 6) { clearInterval(TLTCheck); return; }
        if (TLT.isInitialized())
        {
            TLT.logCustomEvent("ibmcartPurchase", {
                description: "ibmcartPurchase",
                orderID: f,
                orderTotal: a,
                currency: cm_currencyCode,
                orderShipping: e,
                registrationid: b,
                billingCity: d,
                billingState: h,
                billingZipCode: i,
                at1: attrArray[0],
                at2: attrArray[1],
                at3: attrArray[2],
                at4: attrArray[3],
                at5: attrArray[4],
                at6: attrArray[5],
                at7: attrArray[6],
                at8: attrArray[7],
                at9: attrArray[8],
                at10: attrArray[9],
                at11: attrArray[10],
                at12: attrArray[11],
                at13: attrArray[12],
                at14: attrArray[13],
                at15: attrArray[14],
                at16: attrArray[15],
                at17: attrArray[16],
                at18: attrArray[17],
                at19: attrArray[18],
                at20: attrArray[19],
                at21: attrArray[20],
                at22: attrArray[21],
                at23: attrArray[22],
                at24: attrArray[23],
                at25: attrArray[24],
                at26: attrArray[25],
                at27: attrArray[26],
                at28: attrArray[27],
                at29: attrArray[28],
                at30: attrArray[29],
                at31: attrArray[30],
                at32: attrArray[31],
                at33: attrArray[32],
                at34: attrArray[33],
                at35: attrArray[34],
                at36: attrArray[35],
                at37: attrArray[36],
                at38: attrArray[37],
                at39: attrArray[38],
                at40: attrArray[39],
                at41: attrArray[40],
                at42: attrArray[41],
                at43: attrArray[42],
                at44: attrArray[43],
                at45: attrArray[44],
                at46: attrArray[45],
                at47: attrArray[46],
                at48: attrArray[47],
                at49: attrArray[48],
                at50: attrArray[49]
            });
            clearInterval(TLTCheck);
        }
    }, 200);

}

// START SPIE custom script

function cmGetCustomPageID()
{
    if (window.location.pathname == "/")
    {
        var pageName = "HOMEPAGE";
    } else
    {
        var pageName = window.location.pathname;
    }
    //	remove any ?/#/; parameter/hash/sessionid values
    var tempIndex1 = pageName.indexOf("?");
    if (tempIndex1 != -1)
    {
        var pageName = pageName.substr(0, tempIndex1);
    }
    var tempIndex2 = pageName.indexOf("#");
    if (tempIndex2 != -1)
    {
        var pageName = pageName.substr(0, tempIndex2);
    }
    var tempIndex3 = pageName.indexOf(";");
    if (tempIndex3 != -1)
    {
        var pageName = pageName.substr(0, tempIndex3);
    }
    return (pageName);
}

if (window.location.hostname.indexOf("spie.org") > -1)
{
    if ((window.location.hostname == "www.spie.org")
        || (window.location.hostname == "spie.org"))
    {  // SP production site
        var cmSiteID = "SPIE";
    } else
    {  // SP test site
        var cmSiteID = "SPIE"; var cmDCD = "testdata.coremetrics.com"; var cmCookieDomain = "spie.org";
    }
} else if (window.location.hostname.indexOf("spiedigitallibrary.org") > -1)
{
    if (window.location.hostname == "www.spiedigitallibrary.org")
    { // SPDL production site
        var cmSiteID = "SPDL";
    } else
    {  // SPDL test site
        var cmSiteID = "SPDL";
    }
} else
{ // unknown site
    var cmSiteID = "SPDL";
}

function sendAllTags()
{

    cmCreatePageviewTag(cmSiteID + ":" + cmGetCustomPageID(), cmSiteID);
    // check acousticRegistrationPayload is defined
    if (typeof (acousticRegistrationPayload) == "object")
    {
        var RegistrationID = acousticRegistrationPayload.RegistrationID;
        var Email = acousticRegistrationPayload.Email;
    }
    // check RegistrationID and Email are populated before calling cmCreate...
    var cmRgSent = sessionStorage.getItem("cmRgSent");
    var exEventEmail = "";
    if ((RegistrationID > "") && (Email > "") && (cmRgSent != "true"))
    {
        if (Email > "")
        {
            exEventEmail = Email;
        }
        cmCreateRegistrationTag(RegistrationID, exEventEmail);
        sessionStorage.setItem("cmRgSent", "true"); // only send reg data once per session
    }
    var tltPathname = window.location.pathname;
    var tltPathname = tltPathname.toLowerCase();
    var detailData = "", itemProductId = "", itemProductName = "", productImageURL = "";

    // PRODUCT VIEWS for /publications/book/*
    if (tltPathname.indexOf("/publications/book/") > -1)
    {
        var intTLTCheck4 = 0;
        var TLTCheck4 = setInterval(function ()
        {  // polling for appearance of product data object
            ++intTLTCheck4;
            if (intTLTCheck4 > 8) { clearInterval(TLTCheck4); return; }
            if (document.querySelector("#bookDetails"))
            {
                try
                {
                    productImageURL = document.querySelector("#pressDetail > div.row.my30 > div.col-12.col-lg-4 > div > img").src
                }
                catch (error) { }
                var itemProductId = window.location.pathname.split("/")[3];
                var itemProductName = document.title.split(" |")[0];
                TLT.logCustomEvent("ibmproductView", {
                    description: "ibmproductView",
                    Email: exEventEmail,
                    itemProductId: itemProductId,
                    itemProductName: itemProductName,
                    itemCategory: "book",  // book, merchandise, or courses
                    productImageURL: productImageURL,
                    productURL: window.location.href
                });
                clearInterval(TLTCheck4);
            }
        }, 500);
    }

    // PRODUCT VIEWS for /merchandise/*
    if (tltPathname.indexOf("/merchandise/") > -1)
    {
        var intTLTCheck4 = 0;
        var TLTCheck4 = setInterval(function ()
        {  // polling for appearance of product data object
            ++intTLTCheck4;
            if (intTLTCheck4 > 8) { clearInterval(TLTCheck4); return; }
            if (document.querySelector("#merchandiseDetail"))
            {
                var detailData = document.querySelector("#merchandiseDetail");
                if (detailData)
                {
                    try
                    {
                        var detailDataImage = JSON.parse(detailData.dataset.defaultimage);
                        var productImageURL = detailDataImage.ThumbnailUrl;
                    }
                    catch (error) { }
                    var itemProductId = detailData.dataset.name;
                    var itemProductName = detailData.dataset.name;
                    TLT.logCustomEvent("ibmproductView", {
                        description: "ibmproductView",
                        Email: exEventEmail,
                        itemProductId: itemProductId,
                        itemProductName: itemProductName,
                        itemCategory: "merchandise",  // book, merchandise, or courses
                        productImageURL: productImageURL,
                        productURL: window.location.href
                    });
                }
                clearInterval(TLTCheck4);
            }
        }, 500);
    }

    // PRODUCT VIEWS for /courses/*
    if (tltPathname.indexOf("/courses/") > -1)
    {
        var intTLTCheck4 = 0;
        var TLTCheck4 = setInterval(function ()
        {  // polling for appearance of product data object
            ++intTLTCheck4;
            if (intTLTCheck4 > 8) { clearInterval(TLTCheck4); return; }
            if (document.querySelector("#educationCourseDetail"))
            {
                var detailData = document.querySelector("#educationCourseDetail");
                if (detailData)
                {
                    var itemProductId = detailData.dataset.coursecode;
                    var itemProductName = detailData.dataset.coursetitle;
                    TLT.logCustomEvent("ibmproductView", {
                        description: "ibmproductView",
                        Email: exEventEmail,
                        itemProductId: itemProductId,
                        itemProductName: itemProductName,
                        itemCategory: "courses",  // book, merchandise, or courses
                        productImageURL: productImageURL,
                        productURL: window.location.href
                    });
                }
                clearInterval(TLTCheck4);
            }
        }, 500);
    }

}

var intTLTCheck2 = 0;
var TLTCheck2 = setInterval(function ()
{  // polling for TLT load
    ++intTLTCheck2;
    if (intTLTCheck2 > 6) { clearInterval(TLTCheck2); return; }
    if (typeof (TLT) === "object")
    {
        sendAllTags()
        clearInterval(TLTCheck2);
    }
}, 200);
// END SPIE custom script
