@amplitude/analytics-browser 2.33.0 → 2.33.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"amplitude-min.js","sources":["../../../../node_modules/tslib/tslib.es6.js","../../../analytics-core/lib/esm/types/event/event.js","../../../analytics-core/lib/esm/types/constants.js","../../../analytics-core/lib/esm/identify.js","../../../analytics-core/lib/esm/utils/valid-properties.js","../../../analytics-core/lib/esm/types/status.js","../../../analytics-core/lib/esm/utils/result-builder.js","../../../analytics-core/lib/esm/revenue.js","../../../analytics-core/lib/esm/global-scope.js","../../../analytics-core/lib/esm/utils/uuid.js","../../../analytics-core/lib/esm/timeline.js","../../../analytics-core/lib/esm/utils/event-builder.js","../../../analytics-core/lib/esm/utils/return-wrapper.js","../../../analytics-core/lib/esm/core-client.js","../../../analytics-core/lib/esm/types/messages.js","../../../analytics-core/lib/esm/utils/chunk.js","../../../analytics-core/lib/esm/types/loglevel.js","../../../analytics-core/lib/esm/logger.js","../../../analytics-core/lib/esm/config.js","../../../analytics-core/lib/esm/utils/status-code.js","../../../analytics-core/lib/esm/utils/debug.js","../../../analytics-core/lib/esm/plugins/destination.js","../../../../node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","../../../analytics-core/lib/esm/types/server-zone.js","../../../analytics-core/lib/esm/analytics-connector.js","../../../analytics-core/lib/esm/plugins/identity.js","../../../analytics-core/lib/esm/session.js","../../../analytics-core/lib/esm/cookie-name.js","../../../analytics-core/lib/esm/language.js","../../../analytics-core/lib/esm/query-params.js","../../../analytics-core/lib/esm/utils/url-utils.js","../../../analytics-core/lib/esm/utils/sampling.js","../../../analytics-core/lib/esm/storage/memory.js","../../../analytics-core/lib/esm/storage/cookie.js","../../../analytics-core/lib/esm/storage/helpers.js","../../../analytics-core/lib/esm/storage/browser-storage.js","../../../analytics-core/lib/esm/diagnostics/diagnostics-storage.js","../../../analytics-core/lib/esm/diagnostics/uncaught-sdk-errors.js","../../../analytics-core/lib/esm/diagnostics/diagnostics-client.js","../../../analytics-core/lib/esm/transports/base.js","../../../analytics-core/lib/esm/transports/fetch.js","../../../analytics-core/lib/esm/remote-config/remote-config-localstorage.js","../../../analytics-core/lib/esm/remote-config/remote-config.js","../../../analytics-core/lib/esm/types/offline.js","../../../analytics-core/lib/esm/types/element-interactions.js","../../../analytics-core/lib/esm/types/frustration-interactions.js","../../../analytics-core/lib/esm/utils/json-query.js","../../../analytics-core/lib/esm/network-request-event.js","../../../analytics-core/lib/esm/network-observer.js","../../../analytics-core/lib/esm/campaign/campaign-parser.js","../../../analytics-core/lib/esm/plugins/helpers.js","../../../../node_modules/zen-observable-ts/module.js","../../../analytics-core/lib/esm/utils/observable.js","../../../src/default-tracking.ts","../../../src/utils/snippet-helper.ts","../../../src/version.ts","../../../src/lib-prefix.ts","../../../src/plugins/context.ts","../../../src/storage/local-storage.ts","../../../src/storage/session-storage.ts","../../../src/transports/xhr.ts","../../../src/transports/send-beacon.ts","../../../src/cookie-migration/index.ts","../../../src/constants.ts","../../../src/config.ts","../../../plugin-page-view-tracking-browser/lib/esm/utils.js","../../../plugin-page-view-tracking-browser/lib/esm/page-view-tracking.js","../../../src/plugins/form-interaction-tracking.ts","../../../src/plugins/file-download-tracking.ts","../../../src/det-notification.ts","../../../src/plugins/network-connectivity-checker.ts","../../../src/config/joined-config.ts","../../../plugin-autocapture-browser/lib/esm/version.js","../../../plugin-autocapture-browser/lib/esm/constants.js","../../../plugin-autocapture-browser/lib/esm/helpers.js","../../../plugin-autocapture-browser/lib/esm/hierarchy.js","../../../plugin-autocapture-browser/lib/esm/pageActions/actions.js","../../../plugin-autocapture-browser/lib/esm/data-extractor.js","../../../plugin-autocapture-browser/lib/esm/libs/messenger.js","../../../plugin-autocapture-browser/lib/esm/observables.js","../../../plugin-autocapture-browser/lib/esm/autocapture-plugin.js","../../../plugin-autocapture-browser/lib/esm/pageActions/triggers.js","../../../plugin-autocapture-browser/lib/esm/pageActions/matchEventToFilter.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-click.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-change.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-action-click.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-dead-click.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-rage-click.js","../../../plugin-autocapture-browser/lib/esm/frustration-plugin.js","../../../plugin-network-capture-browser/lib/esm/network-capture-plugin.js","../../../plugin-network-capture-browser/lib/esm/constants.js","../../../plugin-network-capture-browser/lib/esm/track-network-event.js","../../../../node_modules/web-vitals/dist/web-vitals.js","../../../plugin-web-vitals-browser/lib/esm/web-vitals-plugin.js","../../../plugin-page-url-enrichment-browser/lib/esm/page-url-enrichment.js","../../../plugin-web-vitals-browser/lib/esm/constants.js","../../../src/attribution/helpers.ts","../../../src/attribution/web-attribution.ts","../../../src/browser-client.ts","../../../src/browser-client-factory.ts","../../../src/index.ts","../../../src/snippet-index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","export var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport var SpecialEventType;\n(function (SpecialEventType) {\n SpecialEventType[\"IDENTIFY\"] = \"$identify\";\n SpecialEventType[\"GROUP_IDENTIFY\"] = \"$groupidentify\";\n SpecialEventType[\"REVENUE\"] = \"revenue_amount\";\n})(SpecialEventType || (SpecialEventType = {}));\n//# sourceMappingURL=event.js.map","export var UNSET_VALUE = '-';\nexport var AMPLITUDE_PREFIX = 'AMP';\nexport var STORAGE_PREFIX = \"\".concat(AMPLITUDE_PREFIX, \"_unsent\");\nexport var DEFAULT_INSTANCE_NAME = '$default_instance';\nexport var AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport var EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport var AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport var EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n// Campaign constants\nexport var UTM_CAMPAIGN = 'utm_campaign';\nexport var UTM_CONTENT = 'utm_content';\nexport var UTM_ID = 'utm_id';\nexport var UTM_MEDIUM = 'utm_medium';\nexport var UTM_SOURCE = 'utm_source';\nexport var UTM_TERM = 'utm_term';\nexport var DCLID = 'dclid';\nexport var FBCLID = 'fbclid';\nexport var GBRAID = 'gbraid';\nexport var GCLID = 'gclid';\nexport var KO_CLICK_ID = 'ko_click_id';\nexport var LI_FAT_ID = 'li_fat_id';\nexport var MSCLKID = 'msclkid';\nexport var RDT_CID = 'rdt_cid';\nexport var TTCLID = 'ttclid';\nexport var TWCLID = 'twclid';\nexport var WBRAID = 'wbraid';\nexport var EMPTY_VALUE = 'EMPTY';\nexport var BASE_CAMPAIGN = {\n utm_campaign: undefined,\n utm_content: undefined,\n utm_id: undefined,\n utm_medium: undefined,\n utm_source: undefined,\n utm_term: undefined,\n referrer: undefined,\n referring_domain: undefined,\n dclid: undefined,\n gbraid: undefined,\n gclid: undefined,\n fbclid: undefined,\n ko_click_id: undefined,\n li_fat_id: undefined,\n msclkid: undefined,\n rdt_cid: undefined,\n ttclid: undefined,\n twclid: undefined,\n wbraid: undefined,\n};\nexport var MKTG = 'MKTG';\n// list of Network headers that are safe to capture\nexport var SAFE_HEADERS = [\n 'access-control-allow-origin',\n 'access-control-allow-credentials',\n 'access-control-expose-headers',\n 'access-control-max-age',\n 'access-control-allow-methods',\n 'access-control-allow-headers',\n 'accept-patch',\n 'accept-ranges',\n 'age',\n 'allow',\n 'alt-svc',\n 'cache-control',\n 'connection',\n 'content-disposition',\n 'content-encoding',\n 'content-language',\n 'content-length',\n 'content-location',\n 'content-md5',\n 'content-range',\n 'content-type',\n 'date',\n 'delta-base',\n 'etag',\n 'expires',\n 'im',\n 'last-modified',\n 'link',\n 'location',\n 'permanent',\n 'p3p',\n 'pragma',\n 'proxy-authenticate',\n 'public-key-pins',\n 'retry-after',\n 'server',\n 'status',\n 'strict-transport-security',\n 'trailer',\n 'transfer-encoding',\n 'tk',\n 'upgrade',\n 'vary',\n 'via',\n 'warning',\n 'www-authenticate',\n 'x-b3-traceid',\n 'x-frame-options',\n];\n// list of Network headers to never capture\nexport var FORBIDDEN_HEADERS = ['authorization', 'cookie', 'set-cookie'];\n//# sourceMappingURL=constants.js.map","import { __assign } from \"tslib\";\nimport { UNSET_VALUE } from './types/constants';\nimport { isValidProperties } from './utils/valid-properties';\nvar Identify = /** @class */ (function () {\n function Identify() {\n this._propertySet = new Set();\n this._properties = {};\n }\n Identify.prototype.getUserProperties = function () {\n return __assign({}, this._properties);\n };\n Identify.prototype.set = function (property, value) {\n this._safeSet(IdentifyOperation.SET, property, value);\n return this;\n };\n Identify.prototype.setOnce = function (property, value) {\n this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n return this;\n };\n Identify.prototype.append = function (property, value) {\n this._safeSet(IdentifyOperation.APPEND, property, value);\n return this;\n };\n Identify.prototype.prepend = function (property, value) {\n this._safeSet(IdentifyOperation.PREPEND, property, value);\n return this;\n };\n Identify.prototype.postInsert = function (property, value) {\n this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n return this;\n };\n Identify.prototype.preInsert = function (property, value) {\n this._safeSet(IdentifyOperation.PREINSERT, property, value);\n return this;\n };\n Identify.prototype.remove = function (property, value) {\n this._safeSet(IdentifyOperation.REMOVE, property, value);\n return this;\n };\n Identify.prototype.add = function (property, value) {\n this._safeSet(IdentifyOperation.ADD, property, value);\n return this;\n };\n Identify.prototype.unset = function (property) {\n this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n return this;\n };\n Identify.prototype.clearAll = function () {\n // When clear all happens, all properties are unset. Reset the entire object.\n this._properties = {};\n this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n return this;\n };\n // Returns whether or not this set actually worked.\n Identify.prototype._safeSet = function (operation, property, value) {\n if (this._validate(operation, property, value)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var userPropertyMap = this._properties[operation];\n if (userPropertyMap === undefined) {\n userPropertyMap = {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this._properties[operation] = userPropertyMap;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n userPropertyMap[property] = value;\n this._propertySet.add(property);\n return true;\n }\n return false;\n };\n Identify.prototype._validate = function (operation, property, value) {\n if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n // clear all already set. Skipping operation;\n return false;\n }\n if (this._propertySet.has(property)) {\n // Property already used. Skipping operation\n return false;\n }\n if (operation === IdentifyOperation.ADD) {\n return typeof value === 'number';\n }\n if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n return isValidProperties(property, value);\n }\n return true;\n };\n return Identify;\n}());\nexport { Identify };\nexport var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n/**\n * Note that the order of operations should align with https://github.com/amplitude/nova/blob/7701b5986b565d4b2fb53b99a9f2175df055dea8/src/main/java/com/amplitude/ingestion/core/UserPropertyUtils.java#L210\n */\nexport var OrderedIdentifyOperations = [\n IdentifyOperation.CLEAR_ALL,\n IdentifyOperation.UNSET,\n IdentifyOperation.SET,\n IdentifyOperation.SET_ONCE,\n IdentifyOperation.ADD,\n IdentifyOperation.APPEND,\n IdentifyOperation.PREPEND,\n IdentifyOperation.PREINSERT,\n IdentifyOperation.POSTINSERT,\n IdentifyOperation.REMOVE,\n];\n//# sourceMappingURL=identify.js.map","import { __values } from \"tslib\";\nvar MAX_PROPERTY_KEYS = 1000;\nexport var isValidObject = function (properties) {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n return false;\n }\n for (var key in properties) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var value = properties[key];\n if (!isValidProperties(key, value))\n return false;\n }\n return true;\n};\nexport var isValidProperties = function (property, value) {\n var e_1, _a;\n if (typeof property !== 'string')\n return false;\n if (Array.isArray(value)) {\n var isValid = true;\n try {\n for (var value_1 = __values(value), value_1_1 = value_1.next(); !value_1_1.done; value_1_1 = value_1.next()) {\n var valueElement = value_1_1.value;\n if (Array.isArray(valueElement)) {\n return false;\n }\n else if (typeof valueElement === 'object') {\n isValid = isValid && isValidObject(valueElement);\n }\n else if (!['number', 'string'].includes(typeof valueElement)) {\n return false;\n }\n if (!isValid) {\n return false;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (value_1_1 && !value_1_1.done && (_a = value_1.return)) _a.call(value_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else if (value === null || value === undefined) {\n return false;\n }\n else if (typeof value === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return isValidObject(value);\n }\n else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n return false;\n }\n return true;\n};\n//# sourceMappingURL=valid-properties.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","import { Status } from '../types/status';\nexport var buildResult = function (event, code, message) {\n if (code === void 0) { code = 0; }\n if (message === void 0) { message = Status.Unknown; }\n return { event: event, code: code, message: message };\n};\n//# sourceMappingURL=result-builder.js.map","import { __assign } from \"tslib\";\nimport { isValidObject } from './utils/valid-properties';\nvar Revenue = /** @class */ (function () {\n function Revenue() {\n this.productId = '';\n this.quantity = 1;\n this.price = 0.0;\n }\n Revenue.prototype.setProductId = function (productId) {\n this.productId = productId;\n return this;\n };\n Revenue.prototype.setQuantity = function (quantity) {\n if (quantity > 0) {\n this.quantity = quantity;\n }\n return this;\n };\n Revenue.prototype.setPrice = function (price) {\n this.price = price;\n return this;\n };\n Revenue.prototype.setRevenueType = function (revenueType) {\n this.revenueType = revenueType;\n return this;\n };\n Revenue.prototype.setCurrency = function (currency) {\n this.currency = currency;\n return this;\n };\n Revenue.prototype.setRevenue = function (revenue) {\n this.revenue = revenue;\n return this;\n };\n Revenue.prototype.setReceipt = function (receipt) {\n this.receipt = receipt;\n return this;\n };\n Revenue.prototype.setReceiptSig = function (receiptSig) {\n this.receiptSig = receiptSig;\n return this;\n };\n Revenue.prototype.setEventProperties = function (properties) {\n if (isValidObject(properties)) {\n this.properties = properties;\n }\n return this;\n };\n Revenue.prototype.getEventProperties = function () {\n var eventProperties = this.properties ? __assign({}, this.properties) : {};\n eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n eventProperties[RevenueProperty.REVENUE_CURRENCY] = this.currency;\n eventProperties[RevenueProperty.REVENUE] = this.revenue;\n eventProperties[RevenueProperty.RECEIPT] = this.receipt;\n eventProperties[RevenueProperty.RECEIPT_SIG] = this.receiptSig;\n return eventProperties;\n };\n return Revenue;\n}());\nexport { Revenue };\nexport var RevenueProperty;\n(function (RevenueProperty) {\n RevenueProperty[\"REVENUE_PRODUCT_ID\"] = \"$productId\";\n RevenueProperty[\"REVENUE_QUANTITY\"] = \"$quantity\";\n RevenueProperty[\"REVENUE_PRICE\"] = \"$price\";\n RevenueProperty[\"REVENUE_TYPE\"] = \"$revenueType\";\n RevenueProperty[\"REVENUE_CURRENCY\"] = \"$currency\";\n RevenueProperty[\"REVENUE\"] = \"$revenue\";\n RevenueProperty[\"RECEIPT\"] = \"$receipt\";\n RevenueProperty[\"RECEIPT_SIG\"] = \"$receiptSig\";\n})(RevenueProperty || (RevenueProperty = {}));\n//# sourceMappingURL=revenue.js.map","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\nexport var getGlobalScope = function () {\n // This should only be used for integrations with Amplitude that are not running in a browser environment\n // We need to specify the name of the global variable as a string to prevent it from being minified\n var ampIntegrationContextName = 'ampIntegrationContext';\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName];\n }\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n};\n//# sourceMappingURL=global-scope.js.map","/**\n * Source: [jed's gist's comment]{@link https://gist.github.com/jed/982883?permalink_comment_id=3223002#gistcomment-3223002}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nimport { __read, __spreadArray } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar legacyUUID = function (a) {\n return a // if the placeholder was passed, return\n ? // a random number from 0 to 15\n (a ^ // unless b is 8,\n ((Math.random() * // in which case\n 16) >> // a random number from\n (a / 4))) // 8 to 11\n .toString(16) // in hexadecimal\n : // or otherwise a concatenated string:\n (String(1e7) + // 10000000 +\n String(-1e3) + // -1000 +\n String(-4e3) + // -4000 +\n String(-8e3) + // -80000000 +\n String(-1e11)) // -100000000000,\n .replace(\n // replacing\n /[018]/g, // zeroes, ones, and eights with\n UUID);\n};\nvar hex = __spreadArray([], __read(Array(256).keys()), false).map(function (index) { return index.toString(16).padStart(2, '0'); });\nexport var UUID = function (a) {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore next */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.crypto) === null || _a === void 0 ? void 0 : _a.getRandomValues)) {\n // Fallback to legacy UUID generation if crypto is not available\n return legacyUUID(a);\n }\n var r = globalScope.crypto.getRandomValues(new Uint8Array(16));\n r[6] = (r[6] & 0x0f) | 0x40;\n r[8] = (r[8] & 0x3f) | 0x80;\n return __spreadArray([], __read(r.entries()), false).map(function (_a) {\n var _b = __read(_a, 2), index = _b[0], int = _b[1];\n return ([4, 6, 8, 10].includes(index) ? \"-\".concat(hex[int]) : hex[int]);\n }).join('');\n};\n//# sourceMappingURL=uuid.js.map","import { __assign, __awaiter, __generator, __read, __values } from \"tslib\";\nimport { buildResult } from './utils/result-builder';\nimport { UUID } from './utils/uuid';\nvar Timeline = /** @class */ (function () {\n function Timeline(client) {\n this.client = client;\n this.queue = [];\n // Flag to guarantee one schedule apply is running\n this.applying = false;\n // Flag indicates whether timeline is ready to process event\n // Events collected before timeline is ready will stay in the queue to be processed later\n this.plugins = [];\n }\n Timeline.prototype.register = function (plugin, config) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (this.plugins.some(function (existingPlugin) { return existingPlugin.name === plugin.name; })) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n this.loggerProvider.warn(\"Plugin with name \".concat(plugin.name, \" already exists, skipping registration\"));\n return [2 /*return*/];\n }\n if (plugin.name === undefined) {\n plugin.name = UUID();\n this.loggerProvider.warn(\"Plugin name is undefined. \\n Generating a random UUID for plugin name: \".concat(plugin.name, \". \\n Set a name for the plugin to prevent it from being added multiple times.\"));\n }\n plugin.type = (_a = plugin.type) !== null && _a !== void 0 ? _a : 'enrichment';\n return [4 /*yield*/, ((_b = plugin.setup) === null || _b === void 0 ? void 0 : _b.call(plugin, config, this.client))];\n case 1:\n _c.sent();\n this.plugins.push(plugin);\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.deregister = function (pluginName, config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var index, plugin;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n index = this.plugins.findIndex(function (plugin) { return plugin.name === pluginName; });\n if (index === -1) {\n config.loggerProvider.warn(\"Plugin with name \".concat(pluginName, \" does not exist, skipping deregistration\"));\n return [2 /*return*/];\n }\n plugin = this.plugins[index];\n this.plugins.splice(index, 1);\n return [4 /*yield*/, ((_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin))];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.reset = function (client) {\n this.applying = false;\n var plugins = this.plugins;\n plugins.map(function (plugin) { var _a; return (_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin); });\n this.plugins = [];\n this.client = client;\n };\n Timeline.prototype.push = function (event) {\n var _this = this;\n return new Promise(function (resolve) {\n _this.queue.push([event, resolve]);\n _this.scheduleApply(0);\n });\n };\n Timeline.prototype.scheduleApply = function (timeout) {\n var _this = this;\n if (this.applying)\n return;\n this.applying = true;\n setTimeout(function () {\n void _this.apply(_this.queue.shift()).then(function () {\n _this.applying = false;\n if (_this.queue.length > 0) {\n _this.scheduleApply(0);\n }\n });\n }, timeout);\n };\n Timeline.prototype.apply = function (item) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, event, _b, resolve, before, before_1, before_1_1, plugin, e, e_1_1, enrichment, enrichment_1, enrichment_1_1, plugin, e, e_2_1, destination, executeDestinations;\n var e_1, _c, e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (!item) {\n return [2 /*return*/];\n }\n _a = __read(item, 1), event = _a[0];\n _b = __read(item, 2), resolve = _b[1];\n // Log initial event\n this.loggerProvider.log('Timeline.apply: Initial event', event);\n before = this.plugins.filter(function (plugin) { return plugin.type === 'before'; });\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n before_1 = __values(before), before_1_1 = before_1.next();\n _e.label = 2;\n case 2:\n if (!!before_1_1.done) return [3 /*break*/, 5];\n plugin = before_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 4];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 3:\n e = _e.sent();\n if (e === null) {\n this.loggerProvider.log(\"Timeline.apply: Event filtered out by before plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n this.loggerProvider.log(\"Timeline.apply: Event after before plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n }\n _e.label = 4;\n case 4:\n before_1_1 = before_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (before_1_1 && !before_1_1.done && (_c = before_1.return)) _c.call(before_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8:\n enrichment = this.plugins.filter(function (plugin) { return plugin.type === 'enrichment' || plugin.type === undefined; });\n _e.label = 9;\n case 9:\n _e.trys.push([9, 14, 15, 16]);\n enrichment_1 = __values(enrichment), enrichment_1_1 = enrichment_1.next();\n _e.label = 10;\n case 10:\n if (!!enrichment_1_1.done) return [3 /*break*/, 13];\n plugin = enrichment_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 12];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 11:\n e = _e.sent();\n if (e === null) {\n this.loggerProvider.log(\"Timeline.apply: Event filtered out by enrichment plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n this.loggerProvider.log(\"Timeline.apply: Event after enrichment plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n }\n _e.label = 12;\n case 12:\n enrichment_1_1 = enrichment_1.next();\n return [3 /*break*/, 10];\n case 13: return [3 /*break*/, 16];\n case 14:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 16];\n case 15:\n try {\n if (enrichment_1_1 && !enrichment_1_1.done && (_d = enrichment_1.return)) _d.call(enrichment_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 16:\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n // Log final event before sending to destinations\n this.loggerProvider.log(\"Timeline.apply: Final event before destinations, event: \".concat(JSON.stringify(event)));\n executeDestinations = destination.map(function (plugin) {\n var eventClone = __assign({}, event);\n return plugin.execute(eventClone).catch(function (e) { return buildResult(eventClone, 0, String(e)); });\n });\n void Promise.all(executeDestinations).then(function (_a) {\n var _b = __read(_a, 1), result = _b[0];\n var resolveResult = result || buildResult(event, 100, 'Event not tracked, no destination plugins on the instance');\n resolve(resolveResult);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.flush = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queue, destination, executeDestinations;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queue = this.queue;\n this.queue = [];\n return [4 /*yield*/, Promise.all(queue.map(function (item) { return _this.apply(item); }))];\n case 1:\n _a.sent();\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n executeDestinations = destination.map(function (plugin) {\n return plugin.flush && plugin.flush();\n });\n return [4 /*yield*/, Promise.all(executeDestinations)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.onIdentityChanged = function (identity) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onIdentityChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onIdentityChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, identity));\n });\n };\n Timeline.prototype.onSessionIdChanged = function (sessionId) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onSessionIdChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onSessionIdChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, sessionId));\n });\n };\n Timeline.prototype.onOptOutChanged = function (optOut) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onOptOutChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onOptOutChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, optOut));\n });\n };\n Timeline.prototype.onReset = function () {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onReset() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onReset) === null || _a === void 0 ? void 0 : _a.call(plugin));\n });\n };\n return Timeline;\n}());\nexport { Timeline };\n//# sourceMappingURL=timeline.js.map","import { __assign } from \"tslib\";\nimport { Identify } from '../identify';\nimport { SpecialEventType } from '../types/event/event';\nexport var createTrackEvent = function (eventInput, eventProperties, eventOptions) {\n var baseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n return __assign(__assign(__assign({}, baseEvent), eventOptions), (eventProperties && { event_properties: eventProperties }));\n};\nexport var createIdentifyEvent = function (identify, eventOptions) {\n var identifyEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties() });\n return identifyEvent;\n};\nexport var createGroupIdentifyEvent = function (groupType, groupName, identify, eventOptions) {\n var _a;\n var groupIdentify = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.GROUP_IDENTIFY, group_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupIdentify;\n};\nexport var createGroupEvent = function (groupType, groupName, eventOptions) {\n var _a;\n var identify = new Identify();\n identify.set(groupType, groupName);\n var groupEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupEvent;\n};\nexport var createRevenueEvent = function (revenue, eventOptions) {\n return __assign(__assign({}, eventOptions), { event_type: SpecialEventType.REVENUE, event_properties: revenue.getEventProperties() });\n};\n//# sourceMappingURL=event-builder.js.map","export var returnWrapper = function (awaitable) { return ({\n promise: awaitable || Promise.resolve(),\n}); };\n//# sourceMappingURL=return-wrapper.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { IdentifyOperation, SpecialEventType, } from './types/event/event';\nimport { OrderedIdentifyOperations } from './identify';\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './types/messages';\nimport { Timeline } from './timeline';\nimport { createGroupEvent, createGroupIdentifyEvent, createIdentifyEvent, createRevenueEvent, createTrackEvent, } from './utils/event-builder';\nimport { buildResult } from './utils/result-builder';\nimport { returnWrapper } from './utils/return-wrapper';\nvar AmplitudeCore = /** @class */ (function () {\n function AmplitudeCore(name) {\n if (name === void 0) { name = '$default'; }\n this.initializing = false;\n this.isReady = false;\n this.q = [];\n this.dispatchQ = [];\n this.logEvent = this.track.bind(this);\n this.timeline = new Timeline(this);\n this.name = name;\n }\n AmplitudeCore.prototype._init = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.config = config;\n this.timeline.reset(this);\n this.timeline.loggerProvider = this.config.loggerProvider;\n return [4 /*yield*/, this.runQueuedFunctions('q')];\n case 1:\n _a.sent();\n this.isReady = true;\n return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.runQueuedFunctions = function (queueName) {\n return __awaiter(this, void 0, void 0, function () {\n var queuedFunctions, queuedFunctions_1, queuedFunctions_1_1, queuedFunction, val, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queuedFunctions = this[queueName];\n this[queueName] = [];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 8, 9, 10]);\n queuedFunctions_1 = __values(queuedFunctions), queuedFunctions_1_1 = queuedFunctions_1.next();\n _b.label = 2;\n case 2:\n if (!!queuedFunctions_1_1.done) return [3 /*break*/, 7];\n queuedFunction = queuedFunctions_1_1.value;\n val = queuedFunction();\n if (!(val && 'promise' in val)) return [3 /*break*/, 4];\n return [4 /*yield*/, val.promise];\n case 3:\n _b.sent();\n return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, val];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n queuedFunctions_1_1 = queuedFunctions_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (queuedFunctions_1_1 && !queuedFunctions_1_1.done && (_a = queuedFunctions_1.return)) _a.call(queuedFunctions_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n if (!this[queueName].length) return [3 /*break*/, 12];\n return [4 /*yield*/, this.runQueuedFunctions(queueName)];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.track = function (eventInput, eventProperties, eventOptions) {\n var event = createTrackEvent(eventInput, eventProperties, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.identify = function (identify, eventOptions) {\n var event = createIdentifyEvent(identify, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.groupIdentify = function (groupType, groupName, identify, eventOptions) {\n var event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.setGroup = function (groupType, groupName, eventOptions) {\n var event = createGroupEvent(groupType, groupName, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.revenue = function (revenue, eventOptions) {\n var event = createRevenueEvent(revenue, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.add = function (plugin) {\n if (!this.isReady) {\n this.q.push(this._addPlugin.bind(this, plugin));\n return returnWrapper();\n }\n return this._addPlugin(plugin);\n };\n AmplitudeCore.prototype._addPlugin = function (plugin) {\n return returnWrapper(this.timeline.register(plugin, this.config));\n };\n AmplitudeCore.prototype.remove = function (pluginName) {\n if (!this.isReady) {\n this.q.push(this._removePlugin.bind(this, pluginName));\n return returnWrapper();\n }\n return this._removePlugin(pluginName);\n };\n AmplitudeCore.prototype._removePlugin = function (pluginName) {\n return returnWrapper(this.timeline.deregister(pluginName, this.config));\n };\n AmplitudeCore.prototype.dispatchWithCallback = function (event, callback) {\n if (!this.isReady) {\n return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n }\n void this.process(event).then(callback);\n };\n AmplitudeCore.prototype.dispatch = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n if (!this.isReady) {\n return [2 /*return*/, new Promise(function (resolve) {\n _this.dispatchQ.push(_this.dispatchWithCallback.bind(_this, event, resolve));\n })];\n }\n return [2 /*return*/, this.process(event)];\n });\n });\n };\n /**\n *\n * This method applies identify operations to user properties and\n * returns a single object representing the final user property state.\n *\n * This is a best-effort api that only supports $set, $clearAll, and $unset.\n * Other operations are not supported and are ignored.\n *\n *\n * @param userProperties The `event.userProperties` object from an Identify event.\n * @returns A key-value object user properties without operations.\n *\n * @example\n * Input:\n * {\n * $set: { plan: 'premium' },\n * custom_flag: true\n * }\n *\n * Output:\n * {\n * plan: 'premium',\n * custom_flag: true\n * }\n */\n AmplitudeCore.prototype.getOperationAppliedUserProperties = function (userProperties) {\n var updatedProperties = {};\n if (userProperties === undefined) {\n return updatedProperties;\n }\n // Keep non-operation keys for later merge\n var nonOpProperties = {};\n Object.keys(userProperties).forEach(function (key) {\n if (!Object.values(IdentifyOperation).includes(key)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n nonOpProperties[key] = userProperties[key];\n }\n });\n OrderedIdentifyOperations.forEach(function (operation) {\n // Skip when key is an operation.\n if (!Object.keys(userProperties).includes(operation))\n return;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var opProperties = userProperties[operation];\n switch (operation) {\n case IdentifyOperation.CLEAR_ALL:\n // Due to operation order, the following line will never execute.\n /* istanbul ignore next */\n Object.keys(updatedProperties).forEach(function (prop) {\n delete updatedProperties[prop];\n });\n break;\n case IdentifyOperation.UNSET:\n Object.keys(opProperties).forEach(function (prop) {\n delete updatedProperties[prop];\n });\n break;\n case IdentifyOperation.SET:\n Object.assign(updatedProperties, opProperties);\n break;\n }\n });\n // Merge non-operation properties.\n // Custom properties should not be affected by operations.\n // https://github.com/amplitude/nova/blob/343f678ded83c032e83b189796b3c2be161b48f5/src/main/java/com/amplitude/userproperty/model/ModifyUserPropertiesIdent.java#L79-L83\n Object.assign(updatedProperties, nonOpProperties);\n return updatedProperties;\n };\n AmplitudeCore.prototype.process = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var userProperties, result, e_2, message, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n // skip event processing if opt out\n if (this.config.optOut) {\n return [2 /*return*/, buildResult(event, 0, OPT_OUT_MESSAGE)];\n }\n if (event.event_type === SpecialEventType.IDENTIFY) {\n userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n this.timeline.onIdentityChanged({ userProperties: userProperties });\n }\n return [4 /*yield*/, this.timeline.push(event)];\n case 1:\n result = _a.sent();\n result.code === 200\n ? this.config.loggerProvider.log(result.message)\n : result.code === 100\n ? this.config.loggerProvider.warn(result.message)\n : this.config.loggerProvider.error(result.message);\n return [2 /*return*/, result];\n case 2:\n e_2 = _a.sent();\n message = String(e_2);\n this.config.loggerProvider.error(message);\n result = buildResult(event, 0, message);\n return [2 /*return*/, result];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.setOptOut = function (optOut) {\n if (!this.isReady) {\n this.q.push(this._setOptOut.bind(this, Boolean(optOut)));\n return;\n }\n this._setOptOut(optOut);\n };\n AmplitudeCore.prototype._setOptOut = function (optOut) {\n if (this.config.optOut !== optOut) {\n this.timeline.onOptOutChanged(optOut);\n this.config.optOut = Boolean(optOut);\n }\n };\n AmplitudeCore.prototype.flush = function () {\n return returnWrapper(this.timeline.flush());\n };\n AmplitudeCore.prototype.plugin = function (name) {\n var plugin = this.timeline.plugins.find(function (plugin) { return plugin.name === name; });\n if (plugin === undefined) {\n this.config.loggerProvider.debug(\"Cannot find plugin with name \".concat(name));\n return undefined;\n }\n return plugin;\n };\n AmplitudeCore.prototype.plugins = function (pluginClass) {\n return this.timeline.plugins.filter(function (plugin) { return plugin instanceof pluginClass; });\n };\n return AmplitudeCore;\n}());\nexport { AmplitudeCore };\n//# sourceMappingURL=core-client.js.map","export var SUCCESS_MESSAGE = 'Event tracked successfully';\nexport var UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport var MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport var OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport var MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport var INVALID_API_KEY = 'Invalid API key';\nexport var CLIENT_NOT_INITIALIZED = 'Client not initialized';\n//# sourceMappingURL=messages.js.map","// Creates an array of elements split into groups the length of size.\n// If array can't be split evenly, the final chunk will be the remaining elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\nexport var chunk = function (arr, size) {\n var chunkSize = Math.max(size, 1);\n return arr.reduce(function (chunks, element, index) {\n var chunkIndex = Math.floor(index / chunkSize);\n if (!chunks[chunkIndex]) {\n chunks[chunkIndex] = [];\n }\n chunks[chunkIndex].push(element);\n return chunks;\n }, []);\n};\n//# sourceMappingURL=chunk.js.map","export var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n LogLevel[LogLevel[\"Debug\"] = 4] = \"Debug\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=loglevel.js.map","import { LogLevel } from './types/loglevel';\nvar PREFIX = 'Amplitude Logger ';\nvar Logger = /** @class */ (function () {\n function Logger() {\n this.logLevel = LogLevel.None;\n }\n Logger.prototype.disable = function () {\n this.logLevel = LogLevel.None;\n };\n Logger.prototype.enable = function (logLevel) {\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n this.logLevel = logLevel;\n };\n Logger.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Verbose) {\n return;\n }\n console.log(\"\".concat(PREFIX, \"[Log]: \").concat(args.join(' ')));\n };\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Warn) {\n return;\n }\n console.warn(\"\".concat(PREFIX, \"[Warn]: \").concat(args.join(' ')));\n };\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Error) {\n return;\n }\n console.error(\"\".concat(PREFIX, \"[Error]: \").concat(args.join(' ')));\n };\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Debug) {\n return;\n }\n // console.debug output is hidden by default in chrome\n console.log(\"\".concat(PREFIX, \"[Debug]: \").concat(args.join(' ')));\n };\n return Logger;\n}());\nexport { Logger };\n//# sourceMappingURL=logger.js.map","import { AMPLITUDE_SERVER_URL, AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, DEFAULT_INSTANCE_NAME, } from './types/constants';\nimport { Logger } from './logger';\nimport { LogLevel } from './types/loglevel';\nexport var getDefaultConfig = function () { return ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n instanceName: DEFAULT_INSTANCE_NAME,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n offline: false,\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: 'US',\n useBatch: false,\n}); };\nvar Config = /** @class */ (function () {\n function Config(options) {\n var _a, _b, _c, _d;\n this._optOut = false;\n var defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = (_a = options.flushIntervalMillis) !== null && _a !== void 0 ? _a : defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.instanceName = options.instanceName || defaultConfig.instanceName;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = (_b = options.logLevel) !== null && _b !== void 0 ? _b : defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.ingestionMetadata = options.ingestionMetadata;\n this.offline = options.offline !== undefined ? options.offline : defaultConfig.offline;\n this.optOut = (_c = options.optOut) !== null && _c !== void 0 ? _c : defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = (_d = options.useBatch) !== null && _d !== void 0 ? _d : defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n var serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n Object.defineProperty(Config.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n this._optOut = optOut;\n },\n enumerable: false,\n configurable: true\n });\n return Config;\n}());\nexport { Config };\nexport var getServerUrl = function (serverZone, useBatch) {\n if (serverZone === 'EU') {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\nexport var createServerConfig = function (serverUrl, serverZone, useBatch) {\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = getDefaultConfig().serverZone; }\n if (useBatch === void 0) { useBatch = getDefaultConfig().useBatch; }\n if (serverUrl) {\n return { serverUrl: serverUrl, serverZone: undefined };\n }\n var _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\nvar RequestMetadata = /** @class */ (function () {\n function RequestMetadata() {\n this.sdk = {\n metrics: {\n histogram: {},\n },\n };\n }\n RequestMetadata.prototype.recordHistogram = function (key, value) {\n this.sdk.metrics.histogram[key] = value;\n };\n return RequestMetadata;\n}());\nexport { RequestMetadata };\nvar HistogramOptions = /** @class */ (function () {\n function HistogramOptions() {\n }\n return HistogramOptions;\n}());\n//# sourceMappingURL=config.js.map","/**\n * Checks if an HTTP status code indicates success (2xx range)\n * @param code - The HTTP status code to check\n * @returns true if the status code is in the 2xx range, false otherwise\n */\nexport function isSuccessStatusCode(code) {\n return code >= 200 && code < 300;\n}\n//# sourceMappingURL=status-code.js.map","import { __assign, __values } from \"tslib\";\nimport { LogLevel } from '../types/loglevel';\nexport var getStacktrace = function (ignoreDepth) {\n if (ignoreDepth === void 0) { ignoreDepth = 0; }\n var trace = new Error().stack || '';\n return trace\n .split('\\n')\n .slice(2 + ignoreDepth)\n .map(function (text) { return text.trim(); });\n};\n// This hook makes sure we always get the latest logger and logLevel.\nexport var getClientLogConfig = function (client) { return function () {\n var _a = __assign({}, client.config), logger = _a.loggerProvider, logLevel = _a.logLevel;\n return {\n logger: logger,\n logLevel: logLevel,\n };\n}; };\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport var getValueByStringPath = function (obj, path) {\n var e_1, _a;\n path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n path = path.replace(/^\\./, ''); // strip a leading dot\n try {\n for (var _b = __values(path.split('.')), _c = _b.next(); !_c.done; _c = _b.next()) {\n var attr = _c.value;\n if (attr in obj) {\n obj = obj[attr];\n }\n else {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return obj;\n};\nexport var getClientStates = function (client, paths) { return function () {\n var e_2, _a;\n var res = {};\n try {\n for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n var path = paths_1_1.value;\n res[path] = getValueByStringPath(client, path);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return res;\n}; };\nexport var debugWrapper = function (fn, fnName, getLogConfig, getStates, fnContext) {\n if (fnContext === void 0) { fnContext = null; }\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a = getLogConfig(), logger = _a.logger, logLevel = _a.logLevel;\n // return early if possible to reduce overhead\n if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n return fn.apply(fnContext, args);\n }\n var debugContext = {\n type: 'invoke public method',\n name: fnName,\n args: args,\n stacktrace: getStacktrace(1),\n time: {\n start: new Date().toISOString(),\n },\n states: {},\n };\n if (getStates && debugContext.states) {\n debugContext.states.before = getStates();\n }\n var result = fn.apply(fnContext, args);\n if (result && result.promise) {\n // if result is a promise, add the callback\n result.promise.then(function () {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n });\n }\n else {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n }\n return result;\n };\n};\n//# sourceMappingURL=debug.js.map","import { __awaiter, __generator, __read, __rest, __spreadArray } from \"tslib\";\nimport { Status } from '../types/status';\nimport { INVALID_API_KEY, MAX_RETRIES_EXCEEDED_MESSAGE, MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE, } from '../types/messages';\nimport { STORAGE_PREFIX } from '../types/constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig, RequestMetadata } from '../config';\nimport { UUID } from '../utils/uuid';\nimport { isSuccessStatusCode } from '../utils/status-code';\nimport { getStacktrace } from '../utils/debug';\nfunction getErrorMessage(error) {\n if (error instanceof Error)\n return error.message;\n return String(error);\n}\nexport function getResponseBodyString(res) {\n var responseBodyString = '';\n try {\n if ('body' in res) {\n responseBodyString = JSON.stringify(res.body, null, 2);\n }\n }\n catch (_a) {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n return responseBodyString;\n}\nvar Destination = /** @class */ (function () {\n function Destination(context) {\n this.name = 'amplitude';\n this.type = 'destination';\n this.retryTimeout = 1000;\n this.throttleTimeout = 30000;\n this.storageKey = '';\n // Indicator of whether events that are scheduled (but not flushed yet).\n // When flush:\n // 1. assign `scheduleId` to `flushId`\n // 2. set `scheduleId` to null\n this.scheduleId = null;\n // Timeout in milliseconds of current schedule\n this.scheduledTimeout = 0;\n // Indicator of whether current flush resolves.\n // When flush resolves, set `flushId` to null\n this.flushId = null;\n this.queue = [];\n this.diagnosticsClient = context === null || context === void 0 ? void 0 : context.diagnosticsClient;\n }\n Destination.prototype.setup = function (config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var unsent;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.config = config;\n this.storageKey = \"\".concat(STORAGE_PREFIX, \"_\").concat(this.config.apiKey.substring(0, 10));\n return [4 /*yield*/, ((_a = this.config.storageProvider) === null || _a === void 0 ? void 0 : _a.get(this.storageKey))];\n case 1:\n unsent = _b.sent();\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map(function (event) { return _this.execute(event); })).catch();\n }\n return [2 /*return*/, Promise.resolve(undefined)];\n }\n });\n });\n };\n Destination.prototype.execute = function (event) {\n var _this = this;\n // Assign insert_id for dropping invalid event later\n if (!event.insert_id) {\n event.insert_id = UUID();\n }\n return new Promise(function (resolve) {\n var context = {\n event: event,\n attempts: 0,\n callback: function (result) { return resolve(result); },\n timeout: 0,\n };\n _this.queue.push(context);\n _this.schedule(_this.config.flushIntervalMillis);\n _this.saveEvents();\n });\n };\n Destination.prototype.removeEventsExceedFlushMaxRetries = function (list) {\n var _this = this;\n return list.filter(function (context) {\n context.attempts += 1;\n if (context.attempts < _this.config.flushMaxRetries) {\n return true;\n }\n void _this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n return false;\n });\n };\n Destination.prototype.scheduleEvents = function (list) {\n var _this = this;\n list.forEach(function (context) {\n _this.schedule(context.timeout === 0 ? _this.config.flushIntervalMillis : context.timeout);\n });\n };\n // Schedule a flush in timeout when\n // 1. No schedule\n // 2. Timeout greater than existing timeout.\n // This makes sure that when throttled, no flush when throttle timeout expires.\n Destination.prototype.schedule = function (timeout) {\n var _this = this;\n if (this.config.offline) {\n return;\n }\n if (this.scheduleId === null || (this.scheduleId && timeout > this.scheduledTimeout)) {\n if (this.scheduleId) {\n clearTimeout(this.scheduleId);\n }\n this.scheduledTimeout = timeout;\n this.scheduleId = setTimeout(function () {\n _this.queue = _this.queue.map(function (context) {\n context.timeout = 0;\n return context;\n });\n void _this.flush(true);\n }, timeout);\n return;\n }\n };\n // Mark current schedule is flushed.\n Destination.prototype.resetSchedule = function () {\n this.scheduleId = null;\n this.scheduledTimeout = 0;\n };\n // Flush all events regardless of their timeout\n Destination.prototype.flush = function (useRetry) {\n if (useRetry === void 0) { useRetry = false; }\n return __awaiter(this, void 0, void 0, function () {\n var list, later, batches;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Skip flush if offline\n if (this.config.offline) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush while offline.');\n return [2 /*return*/];\n }\n if (this.flushId) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush because previous flush has not resolved.');\n return [2 /*return*/];\n }\n this.flushId = this.scheduleId;\n this.resetSchedule();\n list = [];\n later = [];\n this.queue.forEach(function (context) { return (context.timeout === 0 ? list.push(context) : later.push(context)); });\n batches = chunk(list, this.config.flushQueueSize);\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n return [4 /*yield*/, batches.reduce(function (promise, batch) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, promise];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.send(batch, useRetry)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); }, Promise.resolve())];\n case 1:\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n _a.sent();\n // Mark current flush is done\n this.flushId = null;\n this.scheduleEvents(this.queue);\n return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.send = function (list, useRetry) {\n var _a;\n if (useRetry === void 0) { useRetry = true; }\n return __awaiter(this, void 0, void 0, function () {\n var payload, serverUrl, res, e_1, errorMessage;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.config.apiKey) {\n return [2 /*return*/, this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE)];\n }\n payload = {\n api_key: this.config.apiKey,\n events: list.map(function (context) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _a = context.event, extra = _a.extra, eventWithoutExtra = __rest(_a, [\"extra\"]);\n return eventWithoutExtra;\n }),\n options: {\n min_id_length: this.config.minIdLength,\n },\n client_upload_time: new Date().toISOString(),\n request_metadata: this.config.requestMetadata,\n };\n this.config.requestMetadata = new RequestMetadata();\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n serverUrl = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch).serverUrl;\n return [4 /*yield*/, this.config.transportProvider.send(serverUrl, payload)];\n case 2:\n res = _b.sent();\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return [2 /*return*/];\n }\n if (!useRetry) {\n if ('body' in res) {\n this.fulfillRequest(list, res.statusCode, \"\".concat(res.status, \": \").concat(getResponseBodyString(res)));\n }\n else {\n this.fulfillRequest(list, res.statusCode, res.status);\n }\n return [2 /*return*/];\n }\n this.handleResponse(res, list);\n return [3 /*break*/, 4];\n case 3:\n e_1 = _b.sent();\n errorMessage = getErrorMessage(e_1);\n this.config.loggerProvider.error(errorMessage);\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('analytics.events.unsuccessful.from.catch.error', {\n events: list.map(function (context) { return context.event.event_type; }),\n message: errorMessage,\n stack_trace: getStacktrace(),\n });\n this.handleResponse({ status: Status.Failed, statusCode: 0 }, list);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.handleResponse = function (res, list) {\n var _a;\n if (!isSuccessStatusCode(res.statusCode)) {\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('analytics.events.unsuccessful', {\n events: list.map(function (context) { return context.event.event_type; }),\n code: res.statusCode,\n status: res.status,\n body: getResponseBodyString(res),\n stack_trace: getStacktrace(),\n });\n }\n var status = res.status;\n switch (status) {\n case Status.Success: {\n this.handleSuccessResponse(res, list);\n break;\n }\n case Status.Invalid: {\n this.handleInvalidResponse(res, list);\n break;\n }\n case Status.PayloadTooLarge: {\n this.handlePayloadTooLargeResponse(res, list);\n break;\n }\n case Status.RateLimit: {\n this.handleRateLimitResponse(res, list);\n break;\n }\n default: {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(\"{code: 0, error: \\\"Status '\".concat(status, \"' provided for \").concat(list.length, \" events\\\"}\"));\n this.handleOtherResponse(list);\n break;\n }\n }\n };\n Destination.prototype.handleSuccessResponse = function (res, list) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n };\n Destination.prototype.handleInvalidResponse = function (res, list) {\n var _this = this;\n if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n var dropIndex = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(Object.values(res.body.eventsWithInvalidFields)), false), __read(Object.values(res.body.eventsWithMissingFields)), false), __read(Object.values(res.body.eventsWithInvalidIdLengths)), false), __read(res.body.silencedEvents), false).flat();\n var dropIndexSet = new Set(dropIndex);\n var retry = list.filter(function (context, index) {\n if (dropIndexSet.has(index)) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handlePayloadTooLargeResponse = function (res, list) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n this.config.flushQueueSize /= 2;\n var tryable = this.removeEventsExceedFlushMaxRetries(list);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleRateLimitResponse = function (res, list) {\n var _this = this;\n var dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n var dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n var throttledIndex = res.body.throttledEvents;\n var dropUserIdsSet = new Set(dropUserIds);\n var dropDeviceIdsSet = new Set(dropDeviceIds);\n var throttledIndexSet = new Set(throttledIndex);\n var retry = list.filter(function (context, index) {\n if ((context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = _this.throttleTimeout;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleOtherResponse = function (list) {\n var _this = this;\n var later = list.map(function (context) {\n context.timeout = context.attempts * _this.retryTimeout;\n return context;\n });\n var tryable = this.removeEventsExceedFlushMaxRetries(later);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.fulfillRequest = function (list, code, message) {\n var _a, _b, _c;\n // Record diagnostics for dropped events (non-success status codes)\n if (!isSuccessStatusCode(code)) {\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.increment('analytics.events.dropped', list.length);\n (_b = this.diagnosticsClient) === null || _b === void 0 ? void 0 : _b.recordEvent('analytics.events.dropped', {\n events: list.map(function (context) { return context.event.event_type; }),\n code: code,\n message: message,\n stack_trace: getStacktrace(),\n });\n }\n else {\n (_c = this.diagnosticsClient) === null || _c === void 0 ? void 0 : _c.increment('analytics.events.sent', list.length);\n }\n this.removeEvents(list);\n list.forEach(function (context) { return context.callback(buildResult(context.event, code, message)); });\n };\n /**\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n *\n * Update the event storage based on the queue\n */\n Destination.prototype.saveEvents = function () {\n if (!this.config.storageProvider) {\n return;\n }\n var updatedEvents = this.queue.map(function (context) { return context.event; });\n void this.config.storageProvider.set(this.storageKey, updatedEvents);\n };\n /**\n * This is called on response comes back for a request\n */\n Destination.prototype.removeEvents = function (eventsToRemove) {\n this.queue = this.queue.filter(function (queuedContext) { return !eventsToRemove.some(function (context) { return context.event.insert_id === queuedContext.event.insert_id; }); });\n this.saveEvents();\n };\n return Destination;\n}());\nexport { Destination };\n//# sourceMappingURL=destination.js.map","var ApplicationContextProviderImpl = /** @class */ (function () {\n function ApplicationContextProviderImpl() {\n }\n ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n return {\n versionName: this.versionName,\n language: getLanguage(),\n platform: 'Web',\n os: undefined,\n deviceModel: undefined,\n };\n };\n return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n return ((typeof navigator !== 'undefined' &&\n ((navigator.languages && navigator.languages[0]) ||\n navigator.language)) ||\n '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n function EventBridgeImpl() {\n this.queue = [];\n }\n EventBridgeImpl.prototype.logEvent = function (event) {\n if (!this.receiver) {\n if (this.queue.length < 512) {\n this.queue.push(event);\n }\n }\n else {\n this.receiver(event);\n }\n };\n EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n this.receiver = receiver;\n if (this.queue.length > 0) {\n this.queue.forEach(function (event) {\n receiver(event);\n });\n this.queue = [];\n }\n };\n return EventBridgeImpl;\n}());\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n var e_1, _a;\n var primitive = ['string', 'number', 'boolean', 'undefined'];\n var typeA = typeof obj1;\n var typeB = typeof obj2;\n if (typeA !== typeB) {\n return false;\n }\n try {\n for (var primitive_1 = __values(primitive), primitive_1_1 = primitive_1.next(); !primitive_1_1.done; primitive_1_1 = primitive_1.next()) {\n var p = primitive_1_1.value;\n if (p === typeA) {\n return obj1 === obj2;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (primitive_1_1 && !primitive_1_1.done && (_a = primitive_1.return)) _a.call(primitive_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // check null\n if (obj1 == null && obj2 == null) {\n return true;\n }\n else if (obj1 == null || obj2 == null) {\n return false;\n }\n // if got here - objects\n if (obj1.length !== obj2.length) {\n return false;\n }\n //check if arrays\n var isArrayA = Array.isArray(obj1);\n var isArrayB = Array.isArray(obj2);\n if (isArrayA !== isArrayB) {\n return false;\n }\n if (isArrayA && isArrayB) {\n //arrays\n for (var i = 0; i < obj1.length; i++) {\n if (!isEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n }\n else {\n //objects\n var sorted1 = Object.keys(obj1).sort();\n var sorted2 = Object.keys(obj2).sort();\n if (!isEqual(sorted1, sorted2)) {\n return false;\n }\n //compare object values\n var result_1 = true;\n Object.keys(obj1).forEach(function (key) {\n if (!isEqual(obj1[key], obj2[key])) {\n result_1 = false;\n }\n });\n return result_1;\n }\n return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj);\n var i = ownProps.length;\n var resArray = new Array(i);\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n return resArray;\n };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n function IdentityStoreImpl() {\n this.identity = { userProperties: {} };\n this.listeners = new Set();\n }\n IdentityStoreImpl.prototype.editIdentity = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var actingUserProperties = __assign({}, this.identity.userProperties);\n var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n return {\n setUserId: function (userId) {\n actingIdentity.userId = userId;\n return this;\n },\n setDeviceId: function (deviceId) {\n actingIdentity.deviceId = deviceId;\n return this;\n },\n setUserProperties: function (userProperties) {\n actingIdentity.userProperties = userProperties;\n return this;\n },\n setOptOut: function (optOut) {\n actingIdentity.optOut = optOut;\n return this;\n },\n updateUserProperties: function (actions) {\n var e_1, _a, e_2, _b, e_3, _c;\n var actingProperties = actingIdentity.userProperties || {};\n try {\n for (var _d = __values(Object.entries(actions)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var _f = __read(_e.value, 2), action = _f[0], properties = _f[1];\n switch (action) {\n case ID_OP_SET:\n try {\n for (var _g = (e_2 = void 0, __values(Object.entries(properties))), _h = _g.next(); !_h.done; _h = _g.next()) {\n var _j = __read(_h.value, 2), key = _j[0], value = _j[1];\n actingProperties[key] = value;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n break;\n case ID_OP_UNSET:\n try {\n for (var _k = (e_3 = void 0, __values(Object.keys(properties))), _l = _k.next(); !_l.done; _l = _k.next()) {\n var key = _l.value;\n delete actingProperties[key];\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n }\n finally { if (e_3) throw e_3.error; }\n }\n break;\n case ID_OP_CLEAR_ALL:\n actingProperties = {};\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n actingIdentity.userProperties = actingProperties;\n return this;\n },\n commit: function () {\n self.setIdentity(actingIdentity);\n return this;\n },\n };\n };\n IdentityStoreImpl.prototype.getIdentity = function () {\n return __assign({}, this.identity);\n };\n IdentityStoreImpl.prototype.setIdentity = function (identity) {\n var originalIdentity = __assign({}, this.identity);\n this.identity = __assign({}, identity);\n if (!isEqual(originalIdentity, this.identity)) {\n this.listeners.forEach(function (listener) {\n listener(identity);\n });\n }\n };\n IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n this.listeners.add(listener);\n };\n IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n this.listeners.delete(listener);\n };\n return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n ? globalThis\n : typeof global !== 'undefined'\n ? global\n : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n function AnalyticsConnector() {\n this.identityStore = new IdentityStoreImpl();\n this.eventBridge = new EventBridgeImpl();\n this.applicationContextProvider = new ApplicationContextProviderImpl();\n }\n AnalyticsConnector.getInstance = function (instanceName) {\n if (!safeGlobal['analyticsConnectorInstances']) {\n safeGlobal['analyticsConnectorInstances'] = {};\n }\n if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n safeGlobal['analyticsConnectorInstances'][instanceName] =\n new AnalyticsConnector();\n }\n return safeGlobal['analyticsConnectorInstances'][instanceName];\n };\n return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","/**\n * @deprecated use ServerZoneType instead\n */\nexport var ServerZone;\n(function (ServerZone) {\n ServerZone[\"US\"] = \"US\";\n ServerZone[\"EU\"] = \"EU\";\n /**\n * Add for session-replay-browser migration from analytics-type v1.x.\n */\n ServerZone[\"STAGING\"] = \"STAGING\";\n})(ServerZone || (ServerZone = {}));\n//# sourceMappingURL=server-zone.js.map","import { AnalyticsConnector } from '@amplitude/analytics-connector';\nimport { DEFAULT_INSTANCE_NAME } from './types/constants';\nexport var getAnalyticsConnector = function (instanceName) {\n if (instanceName === void 0) { instanceName = DEFAULT_INSTANCE_NAME; }\n return AnalyticsConnector.getInstance(instanceName);\n};\nexport var setConnectorUserId = function (userId, instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\nexport var setConnectorDeviceId = function (deviceId, instanceName) {\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n//# sourceMappingURL=analytics-connector.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { getAnalyticsConnector } from '../analytics-connector';\nvar IdentityEventSender = /** @class */ (function () {\n function IdentityEventSender() {\n this.name = 'identity';\n this.type = 'before';\n this.identityStore = getAnalyticsConnector().identityStore;\n }\n IdentityEventSender.prototype.execute = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var userProperties;\n return __generator(this, function (_a) {\n userProperties = context.user_properties;\n if (userProperties) {\n this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n }\n return [2 /*return*/, context];\n });\n });\n };\n IdentityEventSender.prototype.setup = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (config.instanceName) {\n this.identityStore = getAnalyticsConnector(config.instanceName).identityStore;\n }\n return [2 /*return*/];\n });\n });\n };\n return IdentityEventSender;\n}());\nexport { IdentityEventSender };\n//# sourceMappingURL=identity.js.map","export var isNewSession = function (sessionTimeout, lastEventTime) {\n if (lastEventTime === void 0) { lastEventTime = Date.now(); }\n var currentTime = Date.now();\n var timeSinceLastEvent = currentTime - lastEventTime;\n return timeSinceLastEvent > sessionTimeout;\n};\n//# sourceMappingURL=session.js.map","import { AMPLITUDE_PREFIX } from './types/constants';\nexport var getCookieName = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\nexport var getOldCookieName = function (apiKey) {\n return \"\".concat(AMPLITUDE_PREFIX.toLowerCase(), \"_\").concat(apiKey.substring(0, 6));\n};\n//# sourceMappingURL=cookie-name.js.map","export var getLanguage = function () {\n var _a, _b, _c, _d;\n if (typeof navigator === 'undefined')\n return '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n var userLanguage = navigator.userLanguage;\n return (_d = (_c = (_b = (_a = navigator.languages) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : navigator.language) !== null && _c !== void 0 ? _c : userLanguage) !== null && _d !== void 0 ? _d : '';\n};\n//# sourceMappingURL=language.js.map","import { getGlobalScope } from './global-scope';\nexport var getQueryParams = function () {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) === null || _a === void 0 ? void 0 : _a.search)) {\n return {};\n }\n var pairs = globalScope.location.search.substring(1).split('&').filter(Boolean);\n var params = pairs.reduce(function (acc, curr) {\n var query = curr.split('=', 2);\n var key = tryDecodeURIComponent(query[0]);\n var value = tryDecodeURIComponent(query[1]);\n if (!value) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n return params;\n};\nexport var tryDecodeURIComponent = function (value) {\n if (value === void 0) { value = ''; }\n try {\n return decodeURIComponent(value);\n }\n catch (_a) {\n return '';\n }\n};\n//# sourceMappingURL=query-params.js.map","/**\n * Checks if a given URL matches any pattern in an allowlist of URLs or regex patterns.\n * @param url - The URL to check\n * @param allowlist - Array of allowed URLs (strings) or regex patterns\n * @returns true if the URL matches any pattern in the allowlist, false otherwise\n */\nexport var isUrlMatchAllowlist = function (url, allowlist) {\n if (!allowlist || !allowlist.length) {\n return true;\n }\n return allowlist.some(function (allowedUrl) {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\nexport var getDecodeURI = function (locationStr, loggerProvider) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n};\n//# sourceMappingURL=url-utils.js.map","export var generateHashCode = function (str) {\n var hash = 0;\n if (str.length === 0)\n return hash;\n for (var i = 0; i < str.length; i++) {\n var chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0;\n }\n return hash;\n};\nexport var isTimestampInSample = function (timestamp, sampleRate) {\n var hashNumber = generateHashCode(timestamp.toString());\n var absHash = Math.abs(hashNumber);\n var absHashMultiply = absHash * 31;\n var mod = absHashMultiply % 1000000;\n return mod / 1000000 < sampleRate;\n};\n// TODO(xinyi): replace the temp one in diagnostics client after the fix\n// istanbul ignore next\nexport var isTimestampInSampleTemp = function (timestamp, sampleRate) {\n var hashNumber = generateHashCode(timestamp.toString());\n var absHash = Math.abs(hashNumber);\n var absHashMultiply = absHash * 31;\n var mod = absHashMultiply % 100000;\n return mod / 100000 < sampleRate;\n};\n//# sourceMappingURL=sampling.js.map","import { __awaiter, __generator } from \"tslib\";\nvar MemoryStorage = /** @class */ (function () {\n function MemoryStorage() {\n this.memoryStorage = new Map();\n }\n MemoryStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, true];\n });\n });\n };\n MemoryStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.memoryStorage.get(key)];\n });\n });\n };\n MemoryStorage.prototype.getRaw = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.get(key)];\n case 1:\n value = _a.sent();\n return [2 /*return*/, value ? JSON.stringify(value) : undefined];\n }\n });\n });\n };\n MemoryStorage.prototype.set = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.set(key, value);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.delete(key);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.clear();\n return [2 /*return*/];\n });\n });\n };\n return MemoryStorage;\n}());\nexport { MemoryStorage };\n//# sourceMappingURL=memory.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar CookieStorage = /** @class */ (function () {\n function CookieStorage(options) {\n this.options = __assign({}, options);\n }\n CookieStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var testStorage, testKey, value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n /* istanbul ignore if */\n if (!getGlobalScope()) {\n return [2 /*return*/, false];\n }\n CookieStorage.testValue = String(Date.now());\n testStorage = new CookieStorage(this.options);\n testKey = 'AMP_TEST';\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, 5, 7]);\n return [4 /*yield*/, testStorage.set(testKey, CookieStorage.testValue)];\n case 2:\n _b.sent();\n return [4 /*yield*/, testStorage.get(testKey)];\n case 3:\n value = _b.sent();\n return [2 /*return*/, value === CookieStorage.testValue];\n case 4:\n _a = _b.sent();\n /* istanbul ignore next */\n return [2 /*return*/, false];\n case 5: return [4 /*yield*/, testStorage.remove(testKey)];\n case 6:\n _b.sent();\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.get = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, decodedValue;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _b.sent();\n if (!value) {\n return [2 /*return*/, undefined];\n }\n try {\n decodedValue = (_a = decodeCookiesAsDefault(value)) !== null && _a !== void 0 ? _a : decodeCookiesWithDoubleUrlEncoding(value);\n if (decodedValue === undefined) {\n console.error(\"Amplitude Logger [Error]: Failed to decode cookie value for key: \".concat(key, \", value: \").concat(value));\n return [2 /*return*/, undefined];\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [2 /*return*/, JSON.parse(decodedValue)];\n }\n catch (_c) {\n console.error(\"Amplitude Logger [Error]: Failed to parse cookie value for key: \".concat(key, \", value: \").concat(value));\n return [2 /*return*/, undefined];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.getRaw = function (key) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var globalScope, cookie, match;\n return __generator(this, function (_c) {\n globalScope = getGlobalScope();\n cookie = (_b = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document) === null || _a === void 0 ? void 0 : _a.cookie.split('; ')) !== null && _b !== void 0 ? _b : [];\n match = cookie.find(function (c) { return c.indexOf(key + '=') === 0; });\n if (!match) {\n return [2 /*return*/, undefined];\n }\n return [2 /*return*/, match.substring(key.length + 1)];\n });\n });\n };\n CookieStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var expirationDays, expires, expireDate, date, str, globalScope, errorMessage;\n return __generator(this, function (_b) {\n try {\n expirationDays = (_a = this.options.expirationDays) !== null && _a !== void 0 ? _a : 0;\n expires = value !== null ? expirationDays : -1;\n expireDate = undefined;\n if (expires) {\n date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expireDate = date;\n }\n str = \"\".concat(key, \"=\").concat(btoa(encodeURIComponent(JSON.stringify(value))));\n if (expireDate) {\n str += \"; expires=\".concat(expireDate.toUTCString());\n }\n str += '; path=/';\n if (this.options.domain) {\n str += \"; domain=\".concat(this.options.domain);\n }\n if (this.options.secure) {\n str += '; Secure';\n }\n if (this.options.sameSite) {\n str += \"; SameSite=\".concat(this.options.sameSite);\n }\n globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.document.cookie = str;\n }\n }\n catch (error) {\n errorMessage = error instanceof Error ? error.message : String(error);\n console.error(\"Amplitude Logger [Error]: Failed to set cookie for key: \".concat(key, \". Error: \").concat(errorMessage));\n }\n return [2 /*return*/];\n });\n });\n };\n CookieStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.set(key, null)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n return CookieStorage;\n}());\nexport { CookieStorage };\nvar decodeCookiesAsDefault = function (value) {\n try {\n return decodeURIComponent(atob(value));\n }\n catch (_a) {\n return undefined;\n }\n};\nvar decodeCookiesWithDoubleUrlEncoding = function (value) {\n // Modern Ruby (v7+) automatically encodes cookies with URL encoding by\n // https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html\n try {\n return decodeURIComponent(atob(decodeURIComponent(value)));\n }\n catch (_a) {\n return undefined;\n }\n};\n//# sourceMappingURL=cookie.js.map","import { AMPLITUDE_PREFIX } from '../types/constants';\nexport var getStorageKey = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n//# sourceMappingURL=helpers.js.map","import { __awaiter, __generator } from \"tslib\";\nvar BrowserStorage = /** @class */ (function () {\n function BrowserStorage(storage) {\n this.storage = storage;\n }\n BrowserStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var random, testStorage, testKey, value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n /* istanbul ignore if */\n if (!this.storage) {\n return [2 /*return*/, false];\n }\n random = String(Date.now());\n testStorage = new BrowserStorage(this.storage);\n testKey = 'AMP_TEST';\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, 5, 7]);\n return [4 /*yield*/, testStorage.set(testKey, random)];\n case 2:\n _b.sent();\n return [4 /*yield*/, testStorage.get(testKey)];\n case 3:\n value = _b.sent();\n return [2 /*return*/, value === random];\n case 4:\n _a = _b.sent();\n /* istanbul ignore next */\n return [2 /*return*/, false];\n case 5: return [4 /*yield*/, testStorage.remove(testKey)];\n case 6:\n _b.sent();\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _b.sent();\n if (!value) {\n return [2 /*return*/, undefined];\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [2 /*return*/, JSON.parse(value)];\n case 2:\n _a = _b.sent();\n console.error(\"[Amplitude] Error: Could not get value from storage\");\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.getRaw = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n return [2 /*return*/, ((_a = this.storage) === null || _a === void 0 ? void 0 : _a.getItem(key)) || undefined];\n });\n });\n };\n BrowserStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.setItem(key, JSON.stringify(value));\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.remove = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.removeItem(key);\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.reset = function () {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.clear();\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n return BrowserStorage;\n}());\nexport { BrowserStorage };\n//# sourceMappingURL=browser-storage.js.map","import { __awaiter, __generator, __read } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar MAX_PERSISTENT_STORAGE_EVENTS_COUNT = 10;\n// Database configuration\nvar DB_VERSION = 1;\n// Table names for different diagnostics types\nexport var TABLE_NAMES = {\n TAGS: 'tags',\n COUNTERS: 'counters',\n HISTOGRAMS: 'histograms',\n EVENTS: 'events',\n INTERNAL: 'internal', // New table for internal storage like flush timestamps\n};\n// Keys for internal storage table\nexport var INTERNAL_KEYS = {\n LAST_FLUSH_TIMESTAMP: 'last_flush_timestamp',\n};\n/**\n * Purpose-specific IndexedDB storage for diagnostics data\n * Provides optimized methods for each type of diagnostics data\n */\nvar DiagnosticsStorage = /** @class */ (function () {\n function DiagnosticsStorage(apiKey, logger) {\n this.dbPromise = null;\n this.logger = logger;\n this.dbName = \"AMP_diagnostics_\".concat(apiKey.substring(0, 10));\n }\n /**\n * Check if IndexedDB is supported in the current environment\n * @returns true if IndexedDB is available, false otherwise\n */\n DiagnosticsStorage.isSupported = function () {\n var _a;\n return ((_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.indexedDB) !== undefined;\n };\n DiagnosticsStorage.prototype.getDB = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this.dbPromise) {\n this.dbPromise = this.openDB();\n }\n return [2 /*return*/, this.dbPromise];\n });\n });\n };\n DiagnosticsStorage.prototype.openDB = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var request = indexedDB.open(_this.dbName, DB_VERSION);\n request.onerror = function () {\n // Clear dbPromise when it rejects for the first time\n _this.dbPromise = null;\n reject(new Error('Failed to open IndexedDB'));\n };\n request.onsuccess = function () {\n var db = request.result;\n // Clear dbPromise when connection was on but went off later\n db.onclose = function () {\n _this.dbPromise = null;\n _this.logger.debug('DiagnosticsStorage: DB connection closed.');\n };\n db.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: A global database error occurred.', event);\n db.close();\n };\n resolve(db);\n };\n request.onupgradeneeded = function (event) {\n var db = event.target.result;\n _this.createTables(db);\n };\n });\n };\n DiagnosticsStorage.prototype.createTables = function (db) {\n // Create tags table\n if (!db.objectStoreNames.contains(TABLE_NAMES.TAGS)) {\n db.createObjectStore(TABLE_NAMES.TAGS, { keyPath: 'key' });\n }\n // Create counters table\n if (!db.objectStoreNames.contains(TABLE_NAMES.COUNTERS)) {\n db.createObjectStore(TABLE_NAMES.COUNTERS, { keyPath: 'key' });\n }\n // Create histograms table for storing histogram stats (count, min, max, sum)\n if (!db.objectStoreNames.contains(TABLE_NAMES.HISTOGRAMS)) {\n db.createObjectStore(TABLE_NAMES.HISTOGRAMS, {\n keyPath: 'key',\n });\n }\n // Create events table\n if (!db.objectStoreNames.contains(TABLE_NAMES.EVENTS)) {\n var eventsStore = db.createObjectStore(TABLE_NAMES.EVENTS, {\n keyPath: 'id',\n autoIncrement: true,\n });\n // Create index on time for chronological queries\n eventsStore.createIndex('time_idx', 'time', { unique: false });\n }\n // Create internal table for storing internal data like flush timestamps\n if (!db.objectStoreNames.contains(TABLE_NAMES.INTERNAL)) {\n db.createObjectStore(TABLE_NAMES.INTERNAL, { keyPath: 'key' });\n }\n };\n DiagnosticsStorage.prototype.setTags = function (tags) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_1, store_1, error_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(tags).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_1 = db.transaction([TABLE_NAMES.TAGS], 'readwrite');\n store_1 = transaction_1.objectStore(TABLE_NAMES.TAGS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(tags);\n transaction_1.oncomplete = function () {\n resolve();\n };\n transaction_1.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set tags', event);\n resolve();\n };\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n var putRequest = store_1.put({ key: key, value: value });\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set tag', key, value, event);\n };\n });\n })];\n case 2:\n error_1 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to set tags', error_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.incrementCounters = function (counters) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_2, store_2, error_2;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(counters).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_2 = db.transaction([TABLE_NAMES.COUNTERS], 'readwrite');\n store_2 = transaction_2.objectStore(TABLE_NAMES.COUNTERS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(counters);\n transaction_2.oncomplete = function () {\n resolve();\n };\n transaction_2.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to increment counters', event);\n resolve();\n };\n // Read existing values and update them\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], incrementValue = _b[1];\n var getRequest = store_2.get(key);\n getRequest.onsuccess = function () {\n var existingRecord = getRequest.result;\n /* istanbul ignore next */\n var existingValue = existingRecord ? existingRecord.value : 0;\n var putRequest = store_2.put({ key: key, value: existingValue + incrementValue });\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to update counter', key, event);\n };\n };\n getRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to read existing counter', key, event);\n };\n });\n })];\n case 2:\n error_2 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to increment counters', error_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setHistogramStats = function (histogramStats) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_3, store_3, error_3;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(histogramStats).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_3 = db.transaction([TABLE_NAMES.HISTOGRAMS], 'readwrite');\n store_3 = transaction_3.objectStore(TABLE_NAMES.HISTOGRAMS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(histogramStats);\n transaction_3.oncomplete = function () {\n resolve();\n };\n transaction_3.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', event);\n resolve();\n };\n // Read existing values and update them\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], newStats = _b[1];\n var getRequest = store_3.get(key);\n getRequest.onsuccess = function () {\n var existingRecord = getRequest.result;\n var updatedStats;\n /* istanbul ignore next */\n if (existingRecord) {\n // Accumulate with existing stats\n updatedStats = {\n key: key,\n count: existingRecord.count + newStats.count,\n min: Math.min(existingRecord.min, newStats.min),\n max: Math.max(existingRecord.max, newStats.max),\n sum: existingRecord.sum + newStats.sum,\n };\n }\n else {\n // Create new stats\n updatedStats = {\n key: key,\n count: newStats.count,\n min: newStats.min,\n max: newStats.max,\n sum: newStats.sum,\n };\n }\n var putRequest = store_3.put(updatedStats);\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', key, event);\n };\n };\n getRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to read existing histogram stats', key, event);\n };\n });\n })];\n case 2:\n error_3 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', error_3);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.addEventRecords = function (events) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_4, store_4, error_4;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (events.length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_4 = db.transaction([TABLE_NAMES.EVENTS], 'readwrite');\n store_4 = transaction_4.objectStore(TABLE_NAMES.EVENTS);\n return [2 /*return*/, new Promise(function (resolve) {\n transaction_4.oncomplete = function () {\n resolve();\n };\n /* istanbul ignore next */\n transaction_4.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to add event records', event);\n resolve();\n };\n // First, check how many events are currently stored\n var countRequest = store_4.count();\n countRequest.onsuccess = function () {\n var currentCount = countRequest.result;\n // Calculate how many events we can add\n var availableSlots = Math.max(0, MAX_PERSISTENT_STORAGE_EVENTS_COUNT - currentCount);\n if (availableSlots < events.length) {\n _this.logger.debug(\"DiagnosticsStorage: Only added \".concat(availableSlots, \" of \").concat(events.length, \" events due to storage limit\"));\n }\n // Only add events up to the available slots (take the least recent ones)\n events.slice(0, availableSlots).forEach(function (event) {\n var request = store_4.add(event);\n request.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to add event record', event);\n };\n });\n };\n countRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to count existing events', event);\n };\n })];\n case 2:\n error_4 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to add event records', error_4);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setInternal = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_5, store_5, error_5;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_5 = db.transaction([TABLE_NAMES.INTERNAL], 'readwrite');\n store_5 = transaction_5.objectStore(TABLE_NAMES.INTERNAL);\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore next */\n transaction_5.onabort = function () { return reject(new Error('Failed to set internal value')); };\n var request = store_5.put({ key: key, value: value });\n request.onsuccess = function () { return resolve(); };\n /* istanbul ignore next */\n request.onerror = function () { return reject(new Error('Failed to set internal value')); };\n })];\n case 2:\n error_5 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set internal value', error_5);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.getInternal = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_6, store_6, error_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_6 = db.transaction([TABLE_NAMES.INTERNAL], 'readonly');\n store_6 = transaction_6.objectStore(TABLE_NAMES.INTERNAL);\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore next */\n transaction_6.onabort = function () { return reject(new Error('Failed to get internal value')); };\n var request = store_6.get(key);\n request.onsuccess = function () { return resolve(request.result); };\n /* istanbul ignore next */\n request.onerror = function () { return reject(new Error('Failed to get internal value')); };\n })];\n case 2:\n error_6 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to get internal value', error_6);\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.getLastFlushTimestamp = function () {\n return __awaiter(this, void 0, void 0, function () {\n var record, error_7;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP)];\n case 1:\n record = _a.sent();\n return [2 /*return*/, record ? parseInt(record.value, 10) : undefined];\n case 2:\n error_7 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to get last flush timestamp', error_7);\n /* istanbul ignore next */\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setLastFlushTimestamp = function (timestamp) {\n return __awaiter(this, void 0, void 0, function () {\n var error_8;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.setInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP, timestamp.toString())];\n case 1:\n _a.sent();\n return [3 /*break*/, 3];\n case 2:\n error_8 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set last flush timestamp', error_8);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.clearTable = function (transaction, tableName) {\n return new Promise(function (resolve, reject) {\n var store = transaction.objectStore(tableName);\n var request = store.clear();\n request.onsuccess = function () { return resolve(); };\n request.onerror = function () { return reject(new Error(\"Failed to clear table \".concat(tableName))); };\n });\n };\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.getAllAndClear = function () {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction, _a, tags, counters, histogramStats, events, error_9;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 4, , 5]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _b.sent();\n transaction = db.transaction([TABLE_NAMES.TAGS, TABLE_NAMES.COUNTERS, TABLE_NAMES.HISTOGRAMS, TABLE_NAMES.EVENTS], 'readwrite');\n return [4 /*yield*/, Promise.all([\n this.getAllFromStore(transaction, TABLE_NAMES.TAGS),\n this.getAllFromStore(transaction, TABLE_NAMES.COUNTERS),\n this.getAllFromStore(transaction, TABLE_NAMES.HISTOGRAMS),\n this.getAllFromStore(transaction, TABLE_NAMES.EVENTS),\n ])];\n case 2:\n _a = __read.apply(void 0, [_b.sent(), 4]), tags = _a[0], counters = _a[1], histogramStats = _a[2], events = _a[3];\n // Clear all data in the same transaction\n return [4 /*yield*/, Promise.all([\n this.clearTable(transaction, TABLE_NAMES.COUNTERS),\n this.clearTable(transaction, TABLE_NAMES.HISTOGRAMS),\n this.clearTable(transaction, TABLE_NAMES.EVENTS),\n ])];\n case 3:\n // Clear all data in the same transaction\n _b.sent();\n return [2 /*return*/, { tags: tags, counters: counters, histogramStats: histogramStats, events: events }];\n case 4:\n error_9 = _b.sent();\n this.logger.debug('DiagnosticsStorage: Failed to get all and clear data', error_9);\n return [2 /*return*/, { tags: [], counters: [], histogramStats: [], events: [] }];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Helper method to get all records from a store within a transaction\n */\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.getAllFromStore = function (transaction, tableName) {\n return new Promise(function (resolve, reject) {\n var store = transaction.objectStore(tableName);\n var request = store.getAll();\n request.onsuccess = function () { return resolve(request.result); };\n request.onerror = function () { return reject(new Error(\"Failed to get all from \".concat(tableName))); };\n });\n };\n return DiagnosticsStorage;\n}());\nexport { DiagnosticsStorage };\n//# sourceMappingURL=diagnostics-storage.js.map","import { __assign } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nexport var GLOBAL_KEY = '__AMPLITUDE_SCRIPT_URL__';\nexport var EVENT_NAME_ERROR_UNCAUGHT = 'sdk.error.uncaught';\nvar getNormalizedScriptUrl = function () {\n var scope = getGlobalScope();\n /* istanbul ignore next */\n return scope === null || scope === void 0 ? void 0 : scope[GLOBAL_KEY];\n};\nvar setNormalizedScriptUrl = function (url) {\n var scope = getGlobalScope();\n if (scope) {\n scope[GLOBAL_KEY] = url;\n }\n};\nexport var registerSdkLoaderMetadata = function (metadata) {\n if (metadata.scriptUrl) {\n var normalized = normalizeUrl(metadata.scriptUrl);\n if (normalized) {\n setNormalizedScriptUrl(normalized);\n }\n }\n};\nexport var enableSdkErrorListeners = function (client) {\n var scope = getGlobalScope();\n if (!scope || typeof scope.addEventListener !== 'function') {\n return;\n }\n var handleError = function (event) {\n var error = event.error instanceof Error ? event.error : undefined;\n var stack = error === null || error === void 0 ? void 0 : error.stack;\n var match = detectSdkOrigin({ filename: event.filename, stack: stack });\n if (!match) {\n return;\n }\n capture({\n type: 'error',\n message: event.message,\n stack: stack,\n filename: event.filename,\n errorName: error === null || error === void 0 ? void 0 : error.name,\n metadata: {\n colno: event.colno,\n lineno: event.lineno,\n isTrusted: event.isTrusted,\n matchReason: match,\n },\n });\n };\n var handleRejection = function (event) {\n var _a;\n var error = event.reason instanceof Error ? event.reason : undefined;\n var stack = error === null || error === void 0 ? void 0 : error.stack;\n var filename = extractFilenameFromStack(stack);\n var match = detectSdkOrigin({ filename: filename, stack: stack });\n if (!match) {\n return;\n }\n /* istanbul ignore next */\n capture({\n type: 'unhandledrejection',\n message: (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : stringifyReason(event.reason),\n stack: stack,\n filename: filename,\n errorName: error === null || error === void 0 ? void 0 : error.name,\n metadata: {\n isTrusted: event.isTrusted,\n matchReason: match,\n },\n });\n };\n var capture = function (context) {\n client.recordEvent(EVENT_NAME_ERROR_UNCAUGHT, __assign({ type: context.type, message: context.message, filename: context.filename, error_name: context.errorName, stack: context.stack }, context.metadata));\n };\n scope.addEventListener('error', handleError, true);\n scope.addEventListener('unhandledrejection', handleRejection, true);\n};\nvar detectSdkOrigin = function (payload) {\n var normalizedScriptUrl = getNormalizedScriptUrl();\n if (!normalizedScriptUrl) {\n return undefined;\n }\n if (payload.filename && payload.filename.includes(normalizedScriptUrl)) {\n return 'filename';\n }\n if (payload.stack && payload.stack.includes(normalizedScriptUrl)) {\n return 'stack';\n }\n return undefined;\n};\nvar normalizeUrl = function (value) {\n var _a, _b;\n try {\n /* istanbul ignore next */\n var url = new URL(value, (_b = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.origin);\n return url.origin + url.pathname;\n }\n catch (_c) {\n return undefined;\n }\n};\nvar extractFilenameFromStack = function (stack) {\n if (!stack) {\n return undefined;\n }\n var match = stack.match(/(https?:\\/\\/\\S+?)(?=[)\\s]|$)/);\n /* istanbul ignore next */\n return match ? match[1] : undefined;\n};\n/* istanbul ignore next */\nvar stringifyReason = function (reason) {\n if (typeof reason === 'string') {\n return reason;\n }\n try {\n return JSON.stringify(reason);\n }\n catch (_a) {\n return '[object Object]';\n }\n};\n//# sourceMappingURL=uncaught-sdk-errors.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { DiagnosticsStorage } from './diagnostics-storage';\nimport { getGlobalScope } from '../global-scope';\nimport { isTimestampInSampleTemp } from '../utils/sampling';\nimport { enableSdkErrorListeners } from './uncaught-sdk-errors';\nexport var SAVE_INTERVAL_MS = 1000; // 1 second\nexport var FLUSH_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes\nexport var DIAGNOSTICS_US_SERVER_URL = 'https://diagnostics.prod.us-west-2.amplitude.com/v1/capture';\nexport var DIAGNOSTICS_EU_SERVER_URL = 'https://diagnostics.prod.eu-central-1.amplitude.com/v1/capture';\n// In-memory storage limits\nexport var MAX_MEMORY_STORAGE_COUNT = 10000; // for tags, counters, histograms separately\nexport var MAX_MEMORY_STORAGE_EVENTS_COUNT = 10;\nvar DiagnosticsClient = /** @class */ (function () {\n function DiagnosticsClient(apiKey, logger, serverZone, options) {\n if (serverZone === void 0) { serverZone = 'US'; }\n // In-memory storages\n this.inMemoryTags = {};\n this.inMemoryCounters = {};\n this.inMemoryHistograms = {};\n this.inMemoryEvents = [];\n // Timer for 1-second persistence\n this.saveTimer = null;\n // Timer for flush interval\n this.flushTimer = null;\n this.apiKey = apiKey;\n this.logger = logger;\n this.serverUrl = serverZone === 'US' ? DIAGNOSTICS_US_SERVER_URL : DIAGNOSTICS_EU_SERVER_URL;\n this.logger.debug('DiagnosticsClient: Initializing with options', JSON.stringify(options, null, 2));\n // Diagnostics is enabled by default with sample rate of 0 (no sampling)\n this.config = __assign({ enabled: true, sampleRate: 0 }, options);\n this.startTimestamp = Date.now();\n this.shouldTrack = isTimestampInSampleTemp(this.startTimestamp, this.config.sampleRate) && this.config.enabled;\n if (DiagnosticsStorage.isSupported()) {\n this.storage = new DiagnosticsStorage(apiKey, logger);\n }\n else {\n this.logger.debug('DiagnosticsClient: IndexedDB is not supported');\n }\n void this.initializeFlushInterval();\n // Track internal diagnostics metrics for sampling\n if (this.shouldTrack) {\n this.increment('sdk.diagnostics.sampled.in.and.enabled');\n enableSdkErrorListeners(this);\n }\n }\n /**\n * Check if storage is available and tracking is enabled\n */\n DiagnosticsClient.prototype.isStorageAndTrackEnabled = function () {\n return Boolean(this.storage) && Boolean(this.shouldTrack);\n };\n DiagnosticsClient.prototype.setTag = function (name, value) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryTags).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return setTags as reaching memory limit');\n return;\n }\n this.inMemoryTags[name] = value;\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.increment = function (name, size) {\n if (size === void 0) { size = 1; }\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryCounters).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return increment as reaching memory limit');\n return;\n }\n this.inMemoryCounters[name] = (this.inMemoryCounters[name] || 0) + size;\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.recordHistogram = function (name, value) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryHistograms).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return recordHistogram as reaching memory limit');\n return;\n }\n var existing = this.inMemoryHistograms[name];\n if (existing) {\n // Update existing stats incrementally\n existing.count += 1;\n existing.min = Math.min(existing.min, value);\n existing.max = Math.max(existing.max, value);\n existing.sum += value;\n }\n else {\n // Create new stats\n this.inMemoryHistograms[name] = {\n count: 1,\n min: value,\n max: value,\n sum: value,\n };\n }\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.recordEvent = function (name, properties) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (this.inMemoryEvents.length >= MAX_MEMORY_STORAGE_EVENTS_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return recordEvent as reaching memory limit');\n return;\n }\n this.inMemoryEvents.push({\n event_name: name,\n time: Date.now(),\n event_properties: properties,\n });\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.startTimersIfNeeded = function () {\n var _this = this;\n if (!this.saveTimer) {\n this.saveTimer = setTimeout(function () {\n _this.saveAllDataToStorage()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to save all data to storage', error);\n })\n .finally(function () {\n _this.saveTimer = null;\n });\n }, SAVE_INTERVAL_MS);\n }\n if (!this.flushTimer) {\n this.flushTimer = setTimeout(function () {\n _this._flush()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to flush', error);\n })\n .finally(function () {\n _this.flushTimer = null;\n });\n }, FLUSH_INTERVAL_MS);\n }\n };\n DiagnosticsClient.prototype.saveAllDataToStorage = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tagsToSave, countersToSave, histogramsToSave, eventsToSave;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n tagsToSave = __assign({}, this.inMemoryTags);\n countersToSave = __assign({}, this.inMemoryCounters);\n histogramsToSave = __assign({}, this.inMemoryHistograms);\n eventsToSave = __spreadArray([], __read(this.inMemoryEvents), false);\n this.inMemoryEvents = [];\n this.inMemoryTags = {};\n this.inMemoryCounters = {};\n this.inMemoryHistograms = {};\n return [4 /*yield*/, Promise.all([\n this.storage.setTags(tagsToSave),\n this.storage.incrementCounters(countersToSave),\n this.storage.setHistogramStats(histogramsToSave),\n this.storage.addEventRecords(eventsToSave),\n ])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsClient.prototype._flush = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, tagRecords, counterRecords, histogramStatsRecords, eventRecords, tags, counters, histogram, events, payload;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.saveAllDataToStorage()];\n case 1:\n _b.sent();\n this.saveTimer = null;\n this.flushTimer = null;\n return [4 /*yield*/, this.storage.getAllAndClear()];\n case 2:\n _a = _b.sent(), tagRecords = _a.tags, counterRecords = _a.counters, histogramStatsRecords = _a.histogramStats, eventRecords = _a.events;\n // Update the last flush timestamp\n void this.storage.setLastFlushTimestamp(Date.now());\n tags = {};\n tagRecords.forEach(function (record) {\n tags[record.key] = record.value;\n });\n counters = {};\n counterRecords.forEach(function (record) {\n counters[record.key] = record.value;\n });\n histogram = {};\n histogramStatsRecords.forEach(function (stats) {\n histogram[stats.key] = {\n count: stats.count,\n min: stats.min,\n max: stats.max,\n avg: Math.round((stats.sum / stats.count) * 100) / 100, // round the average to 2 decimal places.\n };\n });\n events = eventRecords.map(function (record) { return ({\n event_name: record.event_name,\n time: record.time,\n event_properties: record.event_properties,\n }); });\n // Early return if all data collections are empty\n if (Object.keys(counters).length === 0 && Object.keys(histogram).length === 0 && events.length === 0) {\n return [2 /*return*/];\n }\n payload = {\n tags: tags,\n histogram: histogram,\n counters: counters,\n events: events,\n };\n // Send payload to diagnostics server\n void this.fetch(payload);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Send diagnostics data to the server\n */\n DiagnosticsClient.prototype.fetch = function (payload) {\n return __awaiter(this, void 0, void 0, function () {\n var response, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (!getGlobalScope()) {\n throw new Error('DiagnosticsClient: Fetch is not supported');\n }\n return [4 /*yield*/, fetch(this.serverUrl, {\n method: 'POST',\n headers: {\n 'X-ApiKey': this.apiKey,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n })];\n case 1:\n response = _a.sent();\n if (!response.ok) {\n this.logger.debug('DiagnosticsClient: Failed to send diagnostics data.');\n return [2 /*return*/];\n }\n this.logger.debug('DiagnosticsClient: Successfully sent diagnostics data');\n return [3 /*break*/, 3];\n case 2:\n error_1 = _a.sent();\n this.logger.debug('DiagnosticsClient: Failed to send diagnostics data. ', error_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Initialize flush interval logic.\n * Check if 5 minutes has passed since last flush, if so flush immediately.\n * Otherwise set a timer to flush when the interval is reached.\n */\n DiagnosticsClient.prototype.initializeFlushInterval = function () {\n return __awaiter(this, void 0, void 0, function () {\n var now, lastFlushTimestamp, timeSinceLastFlush;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n now = Date.now();\n return [4 /*yield*/, this.storage.getLastFlushTimestamp()];\n case 1:\n lastFlushTimestamp = (_a.sent()) || -1;\n // If last flush timestamp is -1, it means this is a new client\n // Save current timestamp as the initial \"last flush timestamp\"\n // and schedule the flush timer\n if (lastFlushTimestamp === -1) {\n void this.storage.setLastFlushTimestamp(now);\n this._setFlushTimer(FLUSH_INTERVAL_MS);\n return [2 /*return*/];\n }\n timeSinceLastFlush = now - lastFlushTimestamp;\n if (timeSinceLastFlush >= FLUSH_INTERVAL_MS) {\n // More than 5 minutes has passed, flush immediately\n void this._flush();\n return [2 /*return*/];\n }\n else {\n // Set timer for remaining time\n this._setFlushTimer(FLUSH_INTERVAL_MS - timeSinceLastFlush);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Helper method to set flush timer with consistent error handling\n */\n DiagnosticsClient.prototype._setFlushTimer = function (delay) {\n var _this = this;\n this.flushTimer = setTimeout(function () {\n _this._flush()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to flush', error);\n })\n .finally(function () {\n _this.flushTimer = null;\n });\n }, delay);\n };\n DiagnosticsClient.prototype._setSampleRate = function (sampleRate) {\n this.logger.debug('DiagnosticsClient: Setting sample rate to', sampleRate);\n this.config.sampleRate = sampleRate;\n this.shouldTrack = isTimestampInSampleTemp(this.startTimestamp, this.config.sampleRate) && this.config.enabled;\n this.logger.debug('DiagnosticsClient: Should track is', this.shouldTrack);\n };\n return DiagnosticsClient;\n}());\nexport { DiagnosticsClient };\n//# sourceMappingURL=diagnostics-client.js.map","import { Status } from '../types/status';\nimport { isSuccessStatusCode } from '../utils/status-code';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (isSuccessStatusCode(code)) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport } from './base';\nvar FetchTransport = /** @class */ (function (_super) {\n __extends(FetchTransport, _super);\n function FetchTransport(customHeaders) {\n if (customHeaders === void 0) { customHeaders = {}; }\n var _this = _super.call(this) || this;\n _this.customHeaders = customHeaders;\n return _this;\n }\n FetchTransport.prototype.send = function (serverUrl, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var options, response, responseText;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n /* istanbul ignore if */\n if (typeof fetch === 'undefined') {\n throw new Error('FetchTransport is not supported');\n }\n options = {\n headers: __assign({ 'Content-Type': 'application/json', Accept: '*/*' }, this.customHeaders),\n body: JSON.stringify(payload),\n method: 'POST',\n };\n return [4 /*yield*/, fetch(serverUrl, options)];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.text()];\n case 2:\n responseText = _a.sent();\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return [2 /*return*/, this.buildResponse(JSON.parse(responseText))];\n }\n catch (_b) {\n return [2 /*return*/, this.buildResponse({ code: response.status })];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return FetchTransport;\n}(BaseTransport));\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","var RemoteConfigLocalStorage = /** @class */ (function () {\n function RemoteConfigLocalStorage(apiKey, logger) {\n this.key = \"AMP_remote_config_\".concat(apiKey.substring(0, 10));\n this.logger = logger;\n }\n RemoteConfigLocalStorage.prototype.fetchConfig = function () {\n var result = null;\n var failedRemoteConfigInfo = {\n remoteConfig: null,\n lastFetch: new Date(),\n };\n try {\n result = localStorage.getItem(this.key);\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to access: ', error);\n return Promise.resolve(failedRemoteConfigInfo);\n }\n if (result === null) {\n this.logger.debug('Remote config localstorage gets null because the key does not exist');\n return Promise.resolve(failedRemoteConfigInfo);\n }\n try {\n var remoteConfigInfo = JSON.parse(result);\n this.logger.debug(\"Remote config localstorage parsed successfully: \".concat(JSON.stringify(remoteConfigInfo)));\n return Promise.resolve({\n remoteConfig: remoteConfigInfo.remoteConfig,\n lastFetch: new Date(remoteConfigInfo.lastFetch),\n });\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to parse: ', error);\n localStorage.removeItem(this.key);\n return Promise.resolve(failedRemoteConfigInfo);\n }\n };\n RemoteConfigLocalStorage.prototype.setConfig = function (config) {\n try {\n localStorage.setItem(this.key, JSON.stringify(config));\n this.logger.debug('Remote config localstorage set successfully.');\n return Promise.resolve(true);\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to set: ', error);\n }\n return Promise.resolve(false);\n };\n return RemoteConfigLocalStorage;\n}());\nexport { RemoteConfigLocalStorage };\n//# sourceMappingURL=remote-config-localstorage.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { RemoteConfigLocalStorage } from './remote-config-localstorage';\nimport { UUID } from '../utils/uuid';\nexport var US_SERVER_URL = 'https://sr-client-cfg.amplitude.com/config';\nexport var EU_SERVER_URL = 'https://sr-client-cfg.eu.amplitude.com/config';\nexport var DEFAULT_MAX_RETRIES = 3;\n/**\n * The default timeout for fetch in milliseconds.\n * Linear backoff policy: timeout / retry times is the interval between fetch retry.\n */\nvar DEFAULT_TIMEOUT = 1000;\n/**\n * The minimum time between fetches in milliseconds.\n * This prevents too many requests from being sent in a short period of time.\n */\nvar DEFAULT_MIN_TIME_BETWEEN_FETCHES = 5 * 60 * 1000; // 5 minutes\nvar RemoteConfigClient = /** @class */ (function () {\n function RemoteConfigClient(apiKey, logger, serverZone, serverUrl) {\n if (serverZone === void 0) { serverZone = 'US'; }\n // Registered callbackInfos by subscribe().\n this.callbackInfos = [];\n // Track the last successful fetch time for throttling (timestamp in milliseconds).\n this.lastSuccessfulFetch = null;\n // Store the in-flight fetch promise for deduplication.\n this.fetchPromise = null;\n this.apiKey = apiKey;\n this.serverUrl = serverUrl || (serverZone === 'US' ? US_SERVER_URL : EU_SERVER_URL);\n this.logger = logger;\n this.storage = new RemoteConfigLocalStorage(apiKey, logger);\n }\n RemoteConfigClient.prototype.subscribe = function (key, deliveryMode, callback) {\n var id = UUID();\n var callbackInfo = {\n id: id,\n key: key,\n deliveryMode: deliveryMode,\n callback: callback,\n };\n this.callbackInfos.push(callbackInfo);\n if (deliveryMode === 'all') {\n void this.subscribeAll(callbackInfo);\n }\n else {\n void this.subscribeWaitForRemote(callbackInfo, deliveryMode.timeout);\n }\n return id;\n };\n RemoteConfigClient.prototype.unsubscribe = function (id) {\n var index = this.callbackInfos.findIndex(function (callbackInfo) { return callbackInfo.id === id; });\n if (index === -1) {\n this.logger.debug(\"Remote config client unsubscribe failed because callback with id \".concat(id, \" doesn't exist.\"));\n return false;\n }\n this.callbackInfos.splice(index, 1);\n this.logger.debug(\"Remote config client unsubscribe succeeded removing callback with id \".concat(id, \".\"));\n return true;\n };\n RemoteConfigClient.prototype.updateConfigs = function () {\n return __awaiter(this, void 0, void 0, function () {\n var timeSinceLastFetch, result;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Check if we need to throttle based on last successful fetch time\n if (this.lastSuccessfulFetch) {\n timeSinceLastFetch = Date.now() - this.lastSuccessfulFetch;\n if (timeSinceLastFetch < DEFAULT_MIN_TIME_BETWEEN_FETCHES) {\n this.logger.debug('Remote config client skipping updateConfigs: Too recent');\n return [2 /*return*/];\n }\n }\n return [4 /*yield*/, this.getOrCreateFetchPromise()];\n case 1:\n result = _a.sent();\n void this.storage.setConfig(result);\n this.callbackInfos.forEach(function (callbackInfo) {\n _this.sendCallback(callbackInfo, result, 'remote');\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Get the in-flight fetch promise or create a new one.\n * This ensures multiple subscribe calls share the same network request.\n */\n RemoteConfigClient.prototype.getOrCreateFetchPromise = function () {\n var _this = this;\n if (this.fetchPromise) {\n return this.fetchPromise;\n }\n this.fetchPromise = this.fetch()\n .then(function (result) {\n // Update last successful fetch time if we got a valid config\n if (result.remoteConfig !== null) {\n _this.lastSuccessfulFetch = Date.now();\n }\n return result;\n })\n .finally(function () {\n // Clear the promise after it settles (success or failure)\n _this.fetchPromise = null;\n });\n return this.fetchPromise;\n };\n /**\n * Send remote first. If it's already complete, we can skip the cached response.\n * - if remote is fetched first, no cache fetch.\n * - if cache is fetched first, still fetching remote.\n */\n RemoteConfigClient.prototype.subscribeAll = function (callbackInfo) {\n return __awaiter(this, void 0, void 0, function () {\n var remotePromise, cachePromise, result;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n remotePromise = this.getOrCreateFetchPromise().then(function (result) {\n _this.logger.debug(\"Remote config client subscription all mode fetched from remote: \".concat(JSON.stringify(result)));\n _this.sendCallback(callbackInfo, result, 'remote');\n void _this.storage.setConfig(result);\n });\n cachePromise = this.storage.fetchConfig().then(function (result) {\n return result;\n });\n return [4 /*yield*/, Promise.race([remotePromise, cachePromise])];\n case 1:\n result = _a.sent();\n // If cache is fetched first, wait for remote.\n if (result !== undefined) {\n this.logger.debug(\"Remote config client subscription all mode fetched from cache: \".concat(JSON.stringify(result)));\n // Skip sending callback if cache is empty (first time user).\n if (result.remoteConfig !== null) {\n this.sendCallback(callbackInfo, result, 'cache');\n }\n else {\n this.logger.debug('Remote config client skips sending callback because cache is empty (first time user).');\n }\n }\n return [4 /*yield*/, remotePromise];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Waits for a remote response until the given timeout, then return a cached copy, if available.\n */\n RemoteConfigClient.prototype.subscribeWaitForRemote = function (callbackInfo, timeout) {\n return __awaiter(this, void 0, void 0, function () {\n var timeoutPromise, result, error_1, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n timeoutPromise = new Promise(function (_, reject) {\n setTimeout(function () {\n reject('Timeout exceeded');\n }, timeout);\n });\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 5]);\n return [4 /*yield*/, Promise.race([\n this.getOrCreateFetchPromise(),\n timeoutPromise,\n ])];\n case 2:\n result = (_a.sent());\n this.logger.debug('Remote config client subscription wait for remote mode returns from remote.');\n this.sendCallback(callbackInfo, result, 'remote');\n void this.storage.setConfig(result);\n return [3 /*break*/, 5];\n case 3:\n error_1 = _a.sent();\n this.logger.debug('Remote config client subscription wait for remote mode exceeded timeout. Try to fetch from cache.');\n return [4 /*yield*/, this.storage.fetchConfig()];\n case 4:\n result = _a.sent();\n if (result.remoteConfig !== null) {\n this.logger.debug('Remote config client subscription wait for remote mode returns a cached copy.');\n this.sendCallback(callbackInfo, result, 'cache');\n }\n else {\n this.logger.debug('Remote config client subscription wait for remote mode failed to fetch cache.');\n this.sendCallback(callbackInfo, result, 'remote');\n }\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Call the callback with filtered remote config based on key.\n * @param remoteConfigInfo - the whole remote config object without filtering by key.\n */\n RemoteConfigClient.prototype.sendCallback = function (callbackInfo, remoteConfigInfo, source) {\n callbackInfo.lastCallback = new Date();\n var filteredConfig;\n if (callbackInfo.key) {\n // Filter remote config by key.\n // For example, if remote config is {a: {b: {c: 1}}},\n // if key = 'a', filter result is {b: {c: 1}};\n // if key = 'a.b', filter result is {c: 1}\n filteredConfig = callbackInfo.key.split('.').reduce(function (config, key) {\n if (config === null) {\n return config;\n }\n return key in config ? config[key] : null;\n }, remoteConfigInfo.remoteConfig);\n }\n else {\n filteredConfig = remoteConfigInfo.remoteConfig;\n }\n callbackInfo.callback(filteredConfig, source, remoteConfigInfo.lastFetch);\n };\n /**\n * Fetch remote config from remote.\n * @param retries - the number of retries. default is 3.\n * @param timeout - the timeout in milliseconds. Default is 1000.\n * This timeout serves two purposes:\n * 1. It determines how long to wait for each remote config fetch request before aborting it.\n * If the fetch does not complete within the specified timeout, the request is cancelled using AbortController,\n * and the attempt is considered failed (and may be retried if retries remain).\n * 2. It is also used to calculate the interval between retries. The total timeout is divided by the number of retries,\n * so each retry waits for (timeout / retries) milliseconds before the next attempt (linear backoff).\n * @returns the remote config info. null if failed to fetch or the response is not valid JSON.\n */\n RemoteConfigClient.prototype.fetch = function (retries, timeout) {\n if (retries === void 0) { retries = DEFAULT_MAX_RETRIES; }\n if (timeout === void 0) { timeout = DEFAULT_TIMEOUT; }\n return __awaiter(this, void 0, void 0, function () {\n var interval, failedRemoteConfigInfo, _loop_1, this_1, attempt, state_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n interval = timeout / retries;\n failedRemoteConfigInfo = {\n remoteConfig: null,\n lastFetch: new Date(),\n };\n _loop_1 = function (attempt) {\n var abortController, timeoutId, res, body, remoteConfig, error_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n abortController = new AbortController();\n timeoutId = setTimeout(function () { return abortController.abort(); }, timeout);\n _b.label = 1;\n case 1:\n _b.trys.push([1, 7, 8, 9]);\n return [4 /*yield*/, fetch(this_1.getUrlParams(), {\n method: 'GET',\n headers: {\n Accept: '*/*',\n },\n signal: abortController.signal,\n })];\n case 2:\n res = _b.sent();\n if (!!res.ok) return [3 /*break*/, 4];\n return [4 /*yield*/, res.text()];\n case 3:\n body = _b.sent();\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" failed with \").concat(res.status, \": \").concat(body));\n return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, res.json()];\n case 5:\n remoteConfig = (_b.sent());\n return [2 /*return*/, { value: {\n remoteConfig: remoteConfig,\n lastFetch: new Date(),\n } }];\n case 6: return [3 /*break*/, 9];\n case 7:\n error_2 = _b.sent();\n // Handle rejects when the request fails, for example, a network error or timeout\n if (error_2 instanceof Error && error_2.name === 'AbortError') {\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" timed out after \").concat(timeout, \"ms\"));\n }\n else {\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" is rejected because: \"), error_2);\n }\n return [3 /*break*/, 9];\n case 8:\n // Clear the timeout since request completed or failed\n clearTimeout(timeoutId);\n return [7 /*endfinally*/];\n case 9:\n if (!(attempt < retries - 1)) return [3 /*break*/, 11];\n return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, _this.getJitterDelay(interval)); })];\n case 10:\n _b.sent();\n _b.label = 11;\n case 11: return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n attempt = 0;\n _a.label = 1;\n case 1:\n if (!(attempt < retries)) return [3 /*break*/, 4];\n return [5 /*yield**/, _loop_1(attempt)];\n case 2:\n state_1 = _a.sent();\n if (typeof state_1 === \"object\")\n return [2 /*return*/, state_1.value];\n _a.label = 3;\n case 3:\n attempt++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/, failedRemoteConfigInfo];\n }\n });\n });\n };\n /**\n * Return jitter in the bound of [0,baseDelay) and then floor round.\n */\n RemoteConfigClient.prototype.getJitterDelay = function (baseDelay) {\n return Math.floor(Math.random() * baseDelay);\n };\n RemoteConfigClient.prototype.getUrlParams = function () {\n // URL encode the API key to handle special characters\n var encodedApiKey = encodeURIComponent(this.apiKey);\n var urlParams = new URLSearchParams();\n urlParams.append('config_group', RemoteConfigClient.CONFIG_GROUP);\n return \"\".concat(this.serverUrl, \"/\").concat(encodedApiKey, \"?\").concat(urlParams.toString());\n };\n RemoteConfigClient.CONFIG_GROUP = 'browser';\n return RemoteConfigClient;\n}());\nexport { RemoteConfigClient };\n//# sourceMappingURL=remote-config.js.map","export var OfflineDisabled = null;\n//# sourceMappingURL=offline.js.map","/**\n * Default CSS selectors to define which elements on the page to track.\n * Extend this list to include additional elements to track. For example:\n * ```\n * autocapturePlugin({\n * cssSelectorAllowlist: [...DEFAULT_CSS_SELECTOR_ALLOWLIST, \".my-class\"],\n * })\n * ```\n */\nexport var DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n 'video',\n 'audio',\n '[contenteditable=\"true\" i]',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\n/**\n * Default prefix to allow the plugin to capture data attributes as an event property.\n */\nexport var DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n/**\n * Default list of elements on the page should be tracked when the page changes.\n */\nexport var DEFAULT_ACTION_CLICK_ALLOWLIST = ['div', 'span', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n//# sourceMappingURL=element-interactions.js.map","import { __read, __spreadArray } from \"tslib\";\nvar CLICKABLE_ELEMENT_SELECTORS = [\n 'a',\n 'button',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"option\"]',\n '[role=\"tab\"]',\n '[role=\"treeitem\"]',\n '[contenteditable=\"true\" i]',\n];\n/**\n * Default CSS selectors for dead clicks tracking\n */\nexport var DEFAULT_DEAD_CLICK_ALLOWLIST = __spreadArray([\n 'input[type=\"button\"]',\n 'input[type=\"submit\"]',\n 'input[type=\"reset\"]',\n 'input[type=\"image\"]',\n 'input[type=\"file\"]'\n], __read(CLICKABLE_ELEMENT_SELECTORS), false);\n/**\n * Default CSS selectors for rage clicks tracking\n */\nexport var DEFAULT_RAGE_CLICK_ALLOWLIST = ['*'];\n/**\n * Default time window for dead clicks (3 seconds)\n */\nexport var DEFAULT_DEAD_CLICK_WINDOW_MS = 3000;\n/**\n * Default time window for rage clicks (1 second)\n */\nexport var DEFAULT_RAGE_CLICK_WINDOW_MS = 1000;\n/**\n * Default threshold for rage clicks (4 clicks)\n */\nexport var DEFAULT_RAGE_CLICK_THRESHOLD = 4;\n/**\n * Default threshold for rage clicks to be considered out of bounds (50 pixels)\n */\nexport var DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD = 50; // pixels\n//# sourceMappingURL=frustration-interactions.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nfunction isJsonPrimitive(json) {\n return (typeof json === 'string' ||\n typeof json === 'number' ||\n typeof json === 'boolean' ||\n json === null ||\n json === undefined);\n}\n/**\n * Prune a JSON object to only include the keys in the allowlist and excludes the keys\n * in the exclude list.\n *\n * This function is a mutative function that will modify the original JSON object.\n * This is done to avoid creating a new JSON object and copying the data.\n *\n * @param json - The JSON object to prune.\n * @param allowlist - The keys to include in the pruned JSON object.\n * @param excludelist - The keys to exclude from the pruned JSON object.\n */\nexport function pruneJson(json, allowlist, excludelist) {\n if (!json)\n return;\n // tokenize the allowlist and excludelist\n var allowlistTokens = allowlist.map(tokenizeJsonPath);\n var excludelistTokens = excludelist.map(tokenizeJsonPath);\n _pruneJson({\n json: json,\n allowlist: allowlistTokens,\n excludelist: excludelistTokens,\n ancestors: [],\n });\n}\nexport function _pruneJson(_a) {\n var e_1, _b;\n var json = _a.json, targetObject = _a.targetObject, allowlist = _a.allowlist, excludelist = _a.excludelist, ancestors = _a.ancestors, parentObject = _a.parentObject, targetKey = _a.targetKey;\n if (!targetObject) {\n targetObject = json;\n }\n var keys = Object.keys(targetObject);\n try {\n for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {\n var key = keys_1_1.value;\n var path = __spreadArray(__spreadArray([], __read(ancestors), false), [key], false);\n if (isJsonPrimitive(targetObject[key])) {\n // if the value does not match allowlist or matches exclude list, delete it\n if (!hasPathMatchInList(path, allowlist) || hasPathMatchInList(path, excludelist)) {\n delete targetObject[key];\n }\n }\n else {\n _pruneJson({\n json: json,\n targetObject: targetObject[key],\n allowlist: allowlist,\n excludelist: excludelist,\n ancestors: path,\n parentObject: targetObject,\n targetKey: key,\n });\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (keys_1_1 && !keys_1_1.done && (_b = keys_1.return)) _b.call(keys_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // if this object is empty now, delete the whole object\n if (Object.keys(targetObject).length === 0 && parentObject && targetKey) {\n delete parentObject[targetKey];\n }\n}\n/**\n * Tokenize a JSON path string into an array of strings.\n * Escapes ~0 and ~1 to ~ and / respectively.\n *\n * e.g.) turns string \"a/b/c\" into [\"a\", \"b\", \"c\"]\n *\n * @param path - The JSON path to tokenize.\n * @returns The tokenized JSON path.\n */\nexport function tokenizeJsonPath(path) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return path.split('/').map(function (token) { return token.replace(/~0/g, '~').replace(/~1/g, '/'); });\n}\n/**\n * Check if a JSON path matches a path matcher.\n *\n * Rules:\n * 1. If a key in a path and a matcher are the same, then they match, move to the next\n * 2. If the matcher is a *, then it matches the key, move to the next\n * 3. If the matcher is a **, then it matches >=0 keys\n *\n * @param path - The path to check.\n * @param pathMatcher - The path matcher to check against.\n * @param i - The current index of the path.\n * @param j - The current index of the path matcher.\n * @returns True if the path matches the path matcher, false otherwise.\n */\nexport function isPathMatch(path, pathMatcher, i, j) {\n if (i === void 0) { i = 0; }\n if (j === void 0) { j = 0; }\n if (j === pathMatcher.length) {\n return i === path.length;\n }\n if (i === path.length) {\n while (j < pathMatcher.length && pathMatcher[j] === '**') {\n j++;\n }\n return j === pathMatcher.length;\n }\n var currentMatcher = pathMatcher[j];\n if (currentMatcher === '**') {\n if (j + 1 === pathMatcher.length) {\n return true;\n }\n for (var k = i; k <= path.length; k++) {\n if (isPathMatch(path, pathMatcher, k, j + 1)) {\n return true;\n }\n }\n return false;\n }\n else if (currentMatcher === '*' || currentMatcher === path[i]) {\n return isPathMatch(path, pathMatcher, i + 1, j + 1);\n }\n else {\n return false;\n }\n}\n/**\n * Check if a JSON path matches any of the path matchers in the allow or exclude list.\n *\n * @param path - The JSON path to check.\n * @param allowOrExcludeList - The allow or exclude list to check against.\n * @returns True if the path matches any of the path matchers in the allow or exclude list, false otherwise.\n */\nfunction hasPathMatchInList(path, allowOrExcludeList) {\n return allowOrExcludeList.some(function (l) { return isPathMatch(path, l); });\n}\n//# sourceMappingURL=json-query.js.map","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getGlobalScope } from './global-scope';\nimport { pruneJson } from './utils/json-query';\nimport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './';\nvar TEXT_READ_TIMEOUT = 500;\nexport var MAXIMUM_ENTRIES = 100;\n/**\n * This class encapsulates the RequestInit (https://developer.mozilla.org/en-US/docs/Web/API/RequestInit)\n * object so that the consumer can only get access to the headers, method and body size.\n *\n * This is to prevent consumers from directly accessing the Request object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * request.\n * * NEVER .clone() the RequestInit object. This will 2x's the memory overhead of the request\n * * NEVER: call .arrayBuffer(), text(), json() or any other method on the body that\n * consumes the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar RequestWrapperFetch = /** @class */ (function () {\n function RequestWrapperFetch(request) {\n this.request = request;\n }\n RequestWrapperFetch.prototype.headers = function (allow) {\n var e_1, _a;\n if (allow === void 0) { allow = []; }\n var headersUnsafe = this.request.headers;\n // copy the headers into a new object\n var headersSafeCopy = {};\n if (Array.isArray(headersUnsafe)) {\n headersUnsafe.forEach(function (_a) {\n var _b = __read(_a, 2), headerName = _b[0], headerValue = _b[1];\n headersSafeCopy[headerName] = headerValue;\n });\n }\n else if (headersUnsafe instanceof Headers) {\n headersUnsafe.forEach(function (value, key) {\n headersSafeCopy[key] = value;\n });\n }\n else if (typeof headersUnsafe === 'object' && headersUnsafe !== null) {\n try {\n for (var _b = __values(Object.entries(headersUnsafe)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n headersSafeCopy[key] = value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n return pruneHeaders(headersSafeCopy, { allow: allow });\n };\n Object.defineProperty(RequestWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n if (typeof this._bodySize === 'number')\n return this._bodySize;\n var global = getGlobalScope();\n /* istanbul ignore if */\n if (!(global === null || global === void 0 ? void 0 : global.TextEncoder)) {\n return;\n }\n var body = this.request.body;\n this._bodySize = getBodySize(body, MAXIMUM_ENTRIES);\n return this._bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"method\", {\n get: function () {\n return this.request.method;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"body\", {\n get: function () {\n if (typeof this.request.body === 'string') {\n return this.request.body;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperFetch;\n}());\nexport { RequestWrapperFetch };\nvar RequestWrapperXhr = /** @class */ (function () {\n function RequestWrapperXhr(bodyRaw, requestHeaders) {\n this.bodyRaw = bodyRaw;\n this.requestHeaders = requestHeaders;\n }\n RequestWrapperXhr.prototype.headers = function (allow) {\n if (allow === void 0) { allow = []; }\n return pruneHeaders(this.requestHeaders, { allow: allow });\n };\n Object.defineProperty(RequestWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return getBodySize(this.bodyRaw, MAXIMUM_ENTRIES);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperXhr.prototype, \"body\", {\n get: function () {\n if (typeof this.bodyRaw === 'string') {\n return this.bodyRaw;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperXhr;\n}());\nexport { RequestWrapperXhr };\nfunction getBodySize(bodyUnsafe, maxEntries) {\n var e_2, _a;\n var bodySize;\n var global = getGlobalScope();\n /* istanbul ignore next */\n var TextEncoder = global === null || global === void 0 ? void 0 : global.TextEncoder;\n /* istanbul ignore next */\n if (!TextEncoder) {\n return;\n }\n var bodySafe;\n if (typeof bodyUnsafe === 'string') {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe).length;\n }\n else if (bodyUnsafe instanceof Blob) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.size;\n }\n else if (bodyUnsafe instanceof URLSearchParams) {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe.toString()).length;\n }\n else if (ArrayBuffer.isView(bodyUnsafe)) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof ArrayBuffer) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof FormData) {\n // Estimating only for text parts; not accurate for files\n var formData = bodyUnsafe;\n var total = 0;\n var count = 0;\n try {\n for (var _b = __values(formData.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n total += key.length;\n if (typeof value === 'string') {\n total += new TextEncoder().encode(value).length;\n }\n else if (value instanceof Blob) {\n total += value.size;\n }\n else {\n // encountered an unknown type\n // we can't estimate the size of this entry\n return;\n }\n // terminate if we reach the maximum number of entries\n // to avoid performance issues in case of very large FormData\n if (++count >= maxEntries) {\n return;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n bodySize = total;\n }\n else if (bodyUnsafe instanceof ReadableStream) {\n // If bodyUnsafe is an instanceof ReadableStream, we can't determine the size,\n // without consuming it, so we return undefined.\n // Never ever consume ReadableStream! DO NOT DO IT!!!\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bodySafe = bodyUnsafe;\n return;\n }\n return bodySize;\n}\n/**\n * This class encapsulates the Fetch API Response object\n * (https://developer.mozilla.org/en-US/docs/Web/API/Response) so that the consumer can\n * only get access to the headers and body size.\n *\n * This is to prevent consumers from directly accessing the Response object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * response.\n * * Do not .clone() the Response object unless you need to access the body.\n * Cloning will 2x the memory overhead of the response.\n * * NEVER consume the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar ResponseWrapperFetch = /** @class */ (function () {\n function ResponseWrapperFetch(response) {\n this.response = response;\n }\n ResponseWrapperFetch.prototype.headers = function (allow) {\n var _a;\n if (allow === void 0) { allow = []; }\n if (this.response.headers instanceof Headers) {\n var headersSafe = this.response.headers;\n var headersOut_1 = {};\n /* istanbul ignore next */\n (_a = headersSafe === null || headersSafe === void 0 ? void 0 : headersSafe.forEach) === null || _a === void 0 ? void 0 : _a.call(headersSafe, function (value, key) {\n headersOut_1[key] = value;\n });\n return pruneHeaders(headersOut_1, { allow: allow });\n }\n return;\n };\n Object.defineProperty(ResponseWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n var _a, _b;\n if (this._bodySize !== undefined)\n return this._bodySize;\n /* istanbul ignore next */\n var contentLength = (_b = (_a = this.response.headers) === null || _a === void 0 ? void 0 : _a.get) === null || _b === void 0 ? void 0 : _b.call(_a, 'content-length');\n var bodySize = contentLength ? parseInt(contentLength, 10) : undefined;\n this._bodySize = bodySize;\n return bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperFetch.prototype, \"status\", {\n get: function () {\n return this.response.status;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperFetch.prototype.text = function () {\n return __awaiter(this, void 0, void 0, function () {\n var textPromise, timer, text, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // !!!IMPORTANT: we clone the response to avoid mutating the original response\n // never call .text(), .json(), etc.. on the original response always clone it first\n if (!this.clonedResponse) {\n this.clonedResponse = this.response.clone();\n }\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n textPromise = this.clonedResponse.text();\n timer = new Promise(function (resolve) {\n return setTimeout(\n /* istanbul ignore next */\n function () { return resolve(null); }, TEXT_READ_TIMEOUT);\n });\n return [4 /*yield*/, Promise.race([textPromise, timer])];\n case 2:\n text = _a.sent();\n return [2 /*return*/, text];\n case 3:\n error_1 = _a.sent();\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n ResponseWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n return [4 /*yield*/, this.text()];\n case 1:\n text = _a.sent();\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n }\n });\n });\n };\n return ResponseWrapperFetch;\n}());\nexport { ResponseWrapperFetch };\nvar ResponseWrapperXhr = /** @class */ (function () {\n function ResponseWrapperXhr(statusCode, headersString, size, getJson) {\n this.statusCode = statusCode;\n this.headersString = headersString;\n this.size = size;\n this.getJson = getJson;\n }\n Object.defineProperty(ResponseWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return this.size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperXhr.prototype, \"status\", {\n get: function () {\n return this.statusCode;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperXhr.prototype.headers = function (allow) {\n var e_3, _a;\n if (allow === void 0) { allow = []; }\n if (!this.headersString) {\n return {};\n }\n var headers = {};\n var headerLines = this.headersString.split('\\r\\n');\n try {\n for (var headerLines_1 = __values(headerLines), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {\n var line = headerLines_1_1.value;\n var _b = __read(line.split(': '), 2), key = _b[0], value = _b[1];\n if (key && value) {\n headers[key] = value;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return pruneHeaders(headers, { allow: allow });\n };\n ResponseWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var jsonBody;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n jsonBody = this.getJson();\n if (jsonBody) {\n pruneJson(jsonBody, allow, exclude);\n return [2 /*return*/, jsonBody];\n }\n return [2 /*return*/, null];\n });\n });\n };\n return ResponseWrapperXhr;\n}());\nexport { ResponseWrapperXhr };\nfunction safeParseAndPruneBody(text, allow, exclude) {\n if (!text)\n return null;\n try {\n var json = JSON.parse(text);\n pruneJson(json, allow, exclude);\n return json;\n }\n catch (error) {\n return null;\n }\n}\nexport var PRUNE_STRATEGY;\n(function (PRUNE_STRATEGY) {\n PRUNE_STRATEGY[\"REDACT\"] = \"redact\";\n PRUNE_STRATEGY[\"REMOVE\"] = \"remove\";\n})(PRUNE_STRATEGY || (PRUNE_STRATEGY = {}));\nvar REDACTED_VALUE = '[REDACTED]';\n/**\n * Prune headers from a headers record object.\n * @param headers - The headers to prune.\n * @param options - The options to prune the headers.\n * @param options.exclude - List of headers to delete from headers\n * @param options.include - List of headers to keep in headers, if not provided, all headers are kept by default\n * @returns The pruned headers.\n */\nexport var pruneHeaders = function (headers, options) {\n var e_4, _a;\n var _b = options.allow, allow = _b === void 0 ? [] : _b, _c = options.strategy, strategy = _c === void 0 ? PRUNE_STRATEGY.REMOVE : _c;\n var exclude = __spreadArray([], __read(FORBIDDEN_HEADERS), false);\n var headersPruned = {};\n var _loop_1 = function (key) {\n var lowerKey = key.toLowerCase();\n if (exclude.find(function (e) { return e.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else if (!allow.find(function (i) { return i.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else {\n headersPruned[key] = headers[key];\n }\n };\n try {\n for (var _d = __values(Object.keys(headers)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var key = _e.value;\n _loop_1(key);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_4) throw e_4.error; }\n }\n return headersPruned;\n};\nvar NetworkRequestEvent = /** @class */ (function () {\n function NetworkRequestEvent(type, method, timestamp, startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime) {\n if (status === void 0) { status = 0; }\n this.type = type;\n this.method = method;\n this.timestamp = timestamp;\n this.startTime = startTime;\n this.url = url;\n this.requestWrapper = requestWrapper;\n this.status = status;\n this.duration = duration;\n this.responseWrapper = responseWrapper;\n this.error = error;\n this.endTime = endTime;\n }\n NetworkRequestEvent.prototype.toSerializable = function () {\n var _a, _b, _c, _d;\n var serialized = {\n type: this.type,\n method: this.method,\n url: this.url,\n timestamp: this.timestamp,\n status: this.status,\n duration: this.duration,\n error: this.error,\n startTime: this.startTime,\n endTime: this.endTime,\n requestHeaders: (_a = this.requestWrapper) === null || _a === void 0 ? void 0 : _a.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n requestBodySize: (_b = this.requestWrapper) === null || _b === void 0 ? void 0 : _b.bodySize,\n responseHeaders: (_c = this.responseWrapper) === null || _c === void 0 ? void 0 : _c.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n responseBodySize: (_d = this.responseWrapper) === null || _d === void 0 ? void 0 : _d.bodySize,\n };\n return Object.fromEntries(Object.entries(serialized).filter(function (_a) {\n var _b = __read(_a, 2), _ = _b[0], v = _b[1];\n return v !== undefined;\n }));\n };\n return NetworkRequestEvent;\n}());\nexport { NetworkRequestEvent };\n//# sourceMappingURL=network-request-event.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { getGlobalScope } from './';\nimport { UUID } from './utils/uuid';\nimport { NetworkRequestEvent, RequestWrapperFetch, ResponseWrapperFetch, RequestWrapperXhr, ResponseWrapperXhr, } from './network-request-event';\n/**\n * Typeguard function checks if an input is a Request object.\n */\nfunction isRequest(requestInfo) {\n return typeof requestInfo === 'object' && requestInfo !== null && 'url' in requestInfo && 'method' in requestInfo;\n}\nvar NetworkEventCallback = /** @class */ (function () {\n function NetworkEventCallback(callback, id) {\n if (id === void 0) { id = UUID(); }\n this.callback = callback;\n this.id = id;\n }\n return NetworkEventCallback;\n}());\nexport { NetworkEventCallback };\nvar NetworkObserver = /** @class */ (function () {\n function NetworkObserver(logger) {\n this.eventCallbacks = new Map();\n this.isObserving = false;\n this.logger = logger;\n var globalScope = getGlobalScope();\n if (!NetworkObserver.isSupported()) {\n /* istanbul ignore next */\n return;\n }\n this.globalScope = globalScope;\n }\n NetworkObserver.isSupported = function () {\n var globalScope = getGlobalScope();\n return !!globalScope && !!globalScope.fetch;\n };\n NetworkObserver.prototype.subscribe = function (eventCallback, logger) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n if (!this.logger) {\n this.logger = logger;\n }\n this.eventCallbacks.set(eventCallback.id, eventCallback);\n if (!this.isObserving) {\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrOpen = (_c = (_b = (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.XMLHttpRequest) === null || _b === void 0 ? void 0 : _b.prototype) === null || _c === void 0 ? void 0 : _c.open;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSend = (_f = (_e = (_d = this.globalScope) === null || _d === void 0 ? void 0 : _d.XMLHttpRequest) === null || _e === void 0 ? void 0 : _e.prototype) === null || _f === void 0 ? void 0 : _f.send;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSetRequestHeader = (_j = (_h = (_g = this.globalScope) === null || _g === void 0 ? void 0 : _g.XMLHttpRequest) === null || _h === void 0 ? void 0 : _h.prototype) === null || _j === void 0 ? void 0 : _j.setRequestHeader;\n if (originalXhrOpen && originalXhrSend && originalXhrSetRequestHeader) {\n this.observeXhr(originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader);\n }\n /* istanbul ignore next */\n var originalFetch = (_k = this.globalScope) === null || _k === void 0 ? void 0 : _k.fetch;\n /* istanbul ignore next */\n if (originalFetch) {\n this.observeFetch(originalFetch);\n }\n /* istanbul ignore next */\n this.isObserving = true;\n }\n };\n NetworkObserver.prototype.unsubscribe = function (eventCallback) {\n this.eventCallbacks.delete(eventCallback.id);\n };\n NetworkObserver.prototype.triggerEventCallbacks = function (event) {\n var _this = this;\n this.eventCallbacks.forEach(function (callback) {\n var _a;\n try {\n callback.callback(event);\n }\n catch (err) {\n // if the callback throws an error, we should catch it\n // to avoid breaking the fetch promise chain\n /* istanbul ignore next */\n (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while triggering event callbacks', err);\n }\n });\n };\n NetworkObserver.prototype.handleNetworkRequestEvent = function (requestType, requestInfo, requestWrapper, responseWrapper, typedError, startTime, durationStart) {\n var _a;\n /* istanbul ignore next */\n if (startTime === undefined || durationStart === undefined) {\n // if we reach this point, it means that the performance API is not supported\n // so we can't construct a NetworkRequestEvent\n return;\n }\n // parse the URL and Method\n var url;\n var method = 'GET';\n if (isRequest(requestInfo)) {\n url = requestInfo['url'];\n method = requestInfo['method'];\n }\n else {\n url = (_a = requestInfo === null || requestInfo === void 0 ? void 0 : requestInfo.toString) === null || _a === void 0 ? void 0 : _a.call(requestInfo);\n }\n // strip basic auth from the URL\n if (url) {\n try {\n var parsedUrl = new URL(url);\n // reconstruct the URL without the basic auth\n url = \"\".concat(parsedUrl.protocol, \"//\").concat(parsedUrl.host).concat(parsedUrl.pathname).concat(parsedUrl.search).concat(parsedUrl.hash);\n // eslint-disable-next-line no-empty\n }\n catch (err) { }\n }\n method = (requestWrapper === null || requestWrapper === void 0 ? void 0 : requestWrapper.method) || method;\n var status, error;\n if (responseWrapper) {\n status = responseWrapper.status;\n }\n if (typedError) {\n error = {\n name: typedError.name || 'UnknownError',\n message: typedError.message || 'An unknown error occurred',\n };\n status = 0;\n }\n var duration = Math.floor(performance.now() - durationStart);\n var endTime = Math.floor(startTime + duration);\n var requestEvent = new NetworkRequestEvent(requestType, method, startTime, // timestamp and startTime are aliases\n startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime);\n this.triggerEventCallbacks(requestEvent);\n };\n NetworkObserver.prototype.getTimestamps = function () {\n var _a, _b;\n /* istanbul ignore next */\n return {\n startTime: (_a = Date.now) === null || _a === void 0 ? void 0 : _a.call(Date),\n durationStart: (_b = performance === null || performance === void 0 ? void 0 : performance.now) === null || _b === void 0 ? void 0 : _b.call(performance),\n };\n };\n NetworkObserver.prototype.observeFetch = function (originalFetch) {\n var _this = this;\n /* istanbul ignore next */\n if (!this.globalScope || !originalFetch) {\n return;\n }\n /**\n * IMPORTANT: This overrides window.fetch in browsers.\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of fetch\n * and make sure another developer who is an expert reviews this change throughly\n */\n this.globalScope.fetch = function (requestInfo, requestInit) { return __awaiter(_this, void 0, void 0, function () {\n var timestamps, originalResponse, originalError, err_1;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n try {\n timestamps = this.getTimestamps();\n }\n catch (error) {\n /* istanbul ignore next */\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while retrieving timestamps', error);\n }\n _c.label = 1;\n case 1:\n _c.trys.push([1, 3, , 4]);\n return [4 /*yield*/, originalFetch(requestInfo, requestInit)];\n case 2:\n originalResponse = _c.sent();\n return [3 /*break*/, 4];\n case 3:\n err_1 = _c.sent();\n // Capture error information\n originalError = err_1;\n return [3 /*break*/, 4];\n case 4:\n // 3. call the handler after the fetch call is done\n try {\n this.handleNetworkRequestEvent('fetch', requestInfo, requestInit ? new RequestWrapperFetch(requestInit) : undefined, originalResponse ? new ResponseWrapperFetch(originalResponse) : undefined, originalError, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.startTime, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.durationStart);\n }\n catch (err) {\n // this catch shouldn't be reachable, but keep it here for safety\n // because we're overriding the fetch function and better to be safe than sorry\n /* istanbul ignore next */\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug('an unexpected error occurred while handling fetch', err);\n }\n // 4. return the original response or throw the original error\n if (originalResponse) {\n // if the response is not undefined, return it\n return [2 /*return*/, originalResponse];\n }\n else {\n throw originalError;\n }\n return [2 /*return*/];\n }\n });\n }); };\n };\n /**\n * Creates a function that parses the response of an XMLHttpRequest as JSON.\n *\n * Returns function instead of JSON object to avoid unnecessary parsing if the\n * body is not being captured.\n *\n * @param xhrSafe - The XMLHttpRequest object.\n * @param context - The NetworkObserver instance.\n * @returns A function that parses the response of an XMLHttpRequest as JSON.\n */\n NetworkObserver.createXhrJsonParser = function (xhrUnsafe, context) {\n return function () {\n var _a, _b;\n try {\n if (xhrUnsafe.responseType === 'json') {\n // if response is a JS object, clone it so that subscribers can't mutate it\n if ((_a = context.globalScope) === null || _a === void 0 ? void 0 : _a.structuredClone) {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return context.globalScope.structuredClone(xhrUnsafe.response);\n }\n }\n else if (['text', ''].includes(xhrUnsafe.responseType)) {\n // if response is a string, parse it as JSON\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return JSON.parse(xhrUnsafe.responseText);\n }\n }\n catch (err) {\n /* istanbul ignore if */\n if (err instanceof Error && err.name === 'InvalidStateError') {\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText#exceptions\n // if we reach here, it means we don't handle responseType correctly\n (_b = context.logger) === null || _b === void 0 ? void 0 : _b.error(\"unexpected error when retrieving responseText. responseType='\".concat(xhrUnsafe.responseType, \"'\"));\n }\n // the other possible error is Json Parse error which we fail silently\n return null;\n }\n return null;\n };\n };\n NetworkObserver.prototype.observeXhr = function (originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader) {\n /* istanbul ignore next */\n if (!this.globalScope || !originalXhrOpen || !originalXhrSend) {\n return;\n }\n var xhrProto = this.globalScope.XMLHttpRequest.prototype;\n var networkObserverContext = this;\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.open\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.open\n * and make sure another developer who is an expert reviews this change throughly\n */\n xhrProto.open = function () {\n var _a, _b;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var xhrSafe = this;\n var _c = __read(args, 2), method = _c[0], url = _c[1];\n try {\n /* istanbul ignore next */\n xhrSafe.$$AmplitudeAnalyticsEvent = __assign({ method: method, url: (_a = url === null || url === void 0 ? void 0 : url.toString) === null || _a === void 0 ? void 0 : _a.call(url), headers: {} }, networkObserverContext.getTimestamps());\n }\n catch (err) {\n /* istanbul ignore next */\n (_b = networkObserverContext.logger) === null || _b === void 0 ? void 0 : _b.error('an unexpected error occurred while calling xhr open', err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return originalXhrOpen.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.send\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.send\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.send = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var xhrUnsafe = this;\n var xhrSafe = xhrUnsafe;\n var getJson = NetworkObserver.createXhrJsonParser(xhrUnsafe, networkObserverContext);\n var body = args[0];\n var requestEvent = xhrSafe.$$AmplitudeAnalyticsEvent;\n xhrSafe.addEventListener('loadend', function () {\n var _a;\n try {\n var responseHeaders = xhrSafe.getAllResponseHeaders();\n var responseBodySize = xhrSafe.getResponseHeader('content-length');\n var responseWrapper = new ResponseWrapperXhr(xhrSafe.status, responseHeaders, \n /* istanbul ignore next */\n responseBodySize ? parseInt(responseBodySize, 10) : undefined, getJson);\n var requestHeaders = xhrSafe.$$AmplitudeAnalyticsEvent.headers;\n var requestWrapper = new RequestWrapperXhr(body, requestHeaders);\n requestEvent.status = xhrSafe.status;\n networkObserverContext.handleNetworkRequestEvent('xhr', { url: requestEvent.url, method: requestEvent.method }, requestWrapper, responseWrapper, undefined, requestEvent.startTime, requestEvent.durationStart);\n }\n catch (err) {\n /* istanbul ignore next */\n (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.error('an unexpected error occurred while handling xhr send', err);\n }\n });\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n return originalXhrSend.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.setRequestHeader\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.setRequestHeader\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.setRequestHeader = function (headerName, headerValue) {\n var _a;\n var xhrSafe = this;\n try {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */\n xhrSafe.$$AmplitudeAnalyticsEvent.headers[headerName] = headerValue;\n }\n catch (err) {\n /* istanbul ignore next */\n (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.error('an unexpected error occurred while calling xhr setRequestHeader', err);\n }\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n originalXhrSetRequestHeader.apply(xhrSafe, [headerName, headerValue]);\n };\n };\n return NetworkObserver;\n}());\nexport { NetworkObserver };\n// singleton instance of NetworkObserver\nexport var networkObserver = new NetworkObserver();\n//# sourceMappingURL=network-observer.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getQueryParams } from '../query-params';\nimport { UTM_CAMPAIGN, UTM_CONTENT, UTM_MEDIUM, UTM_SOURCE, UTM_TERM, GCLID, FBCLID, BASE_CAMPAIGN, DCLID, MSCLKID, RDT_CID, TWCLID, TTCLID, KO_CLICK_ID, LI_FAT_ID, GBRAID, WBRAID, UTM_ID, } from '../types/constants';\nvar CampaignParser = /** @class */ (function () {\n function CampaignParser() {\n }\n CampaignParser.prototype.parse = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, __assign(__assign(__assign(__assign({}, BASE_CAMPAIGN), this.getUtmParam()), this.getReferrer()), this.getClickIds())];\n });\n });\n };\n CampaignParser.prototype.getUtmParam = function () {\n var params = getQueryParams();\n var utmCampaign = params[UTM_CAMPAIGN];\n var utmContent = params[UTM_CONTENT];\n var utmId = params[UTM_ID];\n var utmMedium = params[UTM_MEDIUM];\n var utmSource = params[UTM_SOURCE];\n var utmTerm = params[UTM_TERM];\n return {\n utm_campaign: utmCampaign,\n utm_content: utmContent,\n utm_id: utmId,\n utm_medium: utmMedium,\n utm_source: utmSource,\n utm_term: utmTerm,\n };\n };\n CampaignParser.prototype.getReferrer = function () {\n var _a, _b;\n var data = {\n referrer: undefined,\n referring_domain: undefined,\n };\n try {\n data.referrer = document.referrer || undefined;\n data.referring_domain = (_b = (_a = data.referrer) === null || _a === void 0 ? void 0 : _a.split('/')[2]) !== null && _b !== void 0 ? _b : undefined;\n }\n catch (_c) {\n // nothing to track\n }\n return data;\n };\n CampaignParser.prototype.getClickIds = function () {\n var _a;\n var params = getQueryParams();\n return _a = {},\n _a[DCLID] = params[DCLID],\n _a[FBCLID] = params[FBCLID],\n _a[GBRAID] = params[GBRAID],\n _a[GCLID] = params[GCLID],\n _a[KO_CLICK_ID] = params[KO_CLICK_ID],\n _a[LI_FAT_ID] = params[LI_FAT_ID],\n _a[MSCLKID] = params[MSCLKID],\n _a[RDT_CID] = params[RDT_CID],\n _a[TTCLID] = params[TTCLID],\n _a[TWCLID] = params[TWCLID],\n _a[WBRAID] = params[WBRAID],\n _a;\n };\n return CampaignParser;\n}());\nexport { CampaignParser };\n//# sourceMappingURL=campaign-parser.js.map","import { __values } from \"tslib\";\nexport var TEXT_MASK_ATTRIBUTE = 'data-amp-mask';\nexport var MASKED_TEXT_VALUE = '*****';\n// Regex patterns for sensitive data\nexport var CC_REGEX = /\\b(?:\\d[ -]*?){13,16}\\b/;\nexport var SSN_REGEX = /(\\d{3}-?\\d{2}-?\\d{4})/g;\nexport var EMAIL_REGEX = /[^\\s@]+@[^\\s@.]+\\.[^\\s@]+/g;\n/**\n * Replaces sensitive strings (credit cards, SSNs, emails) and custom patterns with masked text\n * @param text - The text to search for sensitive data\n * @param additionalMaskTextPatterns - Optional array of additional regex patterns to mask\n * @returns The text with sensitive data replaced by masked text\n */\nexport var replaceSensitiveString = function (text, additionalMaskTextPatterns) {\n var e_1, _a;\n if (additionalMaskTextPatterns === void 0) { additionalMaskTextPatterns = []; }\n if (typeof text !== 'string') {\n return '';\n }\n var result = text;\n // Check for credit card number (with or without spaces/dashes)\n result = result.replace(CC_REGEX, MASKED_TEXT_VALUE);\n // Check for social security number\n result = result.replace(SSN_REGEX, MASKED_TEXT_VALUE);\n // Check for email\n result = result.replace(EMAIL_REGEX, MASKED_TEXT_VALUE);\n try {\n // Check for additional mask text patterns\n for (var additionalMaskTextPatterns_1 = __values(additionalMaskTextPatterns), additionalMaskTextPatterns_1_1 = additionalMaskTextPatterns_1.next(); !additionalMaskTextPatterns_1_1.done; additionalMaskTextPatterns_1_1 = additionalMaskTextPatterns_1.next()) {\n var pattern = additionalMaskTextPatterns_1_1.value;\n try {\n result = result.replace(pattern, MASKED_TEXT_VALUE);\n }\n catch (_b) {\n // ignore invalid pattern\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (additionalMaskTextPatterns_1_1 && !additionalMaskTextPatterns_1_1.done && (_a = additionalMaskTextPatterns_1.return)) _a.call(additionalMaskTextPatterns_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return result;\n};\n/**\n * Gets the page title, checking if the title element has data-amp-mask attribute\n * @returns The page title, masked if the title element has data-amp-mask attribute\n */\nexport var getPageTitle = function (parseTitleFunction) {\n if (typeof document === 'undefined' || !document.title) {\n return '';\n }\n var titleElement = document.querySelector('title');\n if (titleElement && titleElement.hasAttribute(TEXT_MASK_ATTRIBUTE)) {\n return MASKED_TEXT_VALUE;\n }\n return parseTitleFunction ? parseTitleFunction(document.title) : document.title; // document.title is always synced to the first title element\n};\n//# sourceMappingURL=helpers.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","import { __values } from \"tslib\";\nexport { Observable } from 'zen-observable-ts';\nimport { Observable as ZenObservable } from 'zen-observable-ts';\n/**\n * asyncMap operator for Zen Observable\n *\n * Maps each value emitted by the source Observable using an async function,\n * emitting the resolved values in the same order they arrive.\n */\nfunction asyncMap(observable, fn) {\n return new ZenObservable(function (observer) {\n observable.subscribe({\n next: function (value) {\n fn(value)\n .then(function (result) {\n return observer.next(result);\n })\n .catch(function (error) { return observer.error(error); });\n },\n error: function (error) {\n observer.error(error);\n },\n complete: function () {\n observer.complete();\n },\n });\n });\n}\n/**\n * merge operator for Zen Observable\n *\n * Merges two observables into a single observable, emitting values from both sources in the order they arrive.\n * @param sourceA Observable to merge\n * @param sourceB Observable to merge\n * @returns Unsubscribable cleanup function\n */\nfunction merge(sourceA, sourceB) {\n return new ZenObservable(function (observer) {\n var closed = false;\n var subscriptions = new Set();\n var cleanup = function () {\n var e_1, _a;\n closed = true;\n try {\n for (var subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n var sub = subscriptions_1_1.value;\n try {\n sub.unsubscribe();\n }\n catch (_b) {\n /* do nothing */\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriptions.clear();\n };\n var subscribeTo = function (source) {\n var sub = source.subscribe({\n next: function (value) {\n if (!closed)\n observer.next(value);\n },\n error: function (err) {\n if (!closed) {\n closed = true;\n observer.error(err);\n cleanup();\n }\n },\n complete: function () {\n subscriptions.delete(sub);\n if (!closed && subscriptions.size === 0) {\n observer.complete();\n cleanup();\n closed = true;\n }\n },\n });\n subscriptions.add(sub);\n };\n subscribeTo(sourceA);\n subscribeTo(sourceB);\n return cleanup;\n });\n}\n// function share() {\nfunction multicast(source) {\n var observers = new Set();\n var subscription = null;\n function cleanup() {\n /* istanbul ignore next */\n subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();\n subscription = null;\n observers.clear();\n }\n return new ZenObservable(function (observer) {\n observers.add(observer);\n if (subscription === null) {\n subscription = source.subscribe({\n next: function (value) {\n var e_2, _a;\n var _b;\n try {\n for (var observers_1 = __values(observers), observers_1_1 = observers_1.next(); !observers_1_1.done; observers_1_1 = observers_1.next()) {\n var obs = observers_1_1.value;\n /* istanbul ignore next */\n (_b = obs.next) === null || _b === void 0 ? void 0 : _b.call(obs, value);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (observers_1_1 && !observers_1_1.done && (_a = observers_1.return)) _a.call(observers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n },\n error: function (err) {\n var e_3, _a;\n var _b;\n try {\n for (var observers_2 = __values(observers), observers_2_1 = observers_2.next(); !observers_2_1.done; observers_2_1 = observers_2.next()) {\n var obs = observers_2_1.value;\n /* istanbul ignore next */\n (_b = obs.error) === null || _b === void 0 ? void 0 : _b.call(obs, err);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (observers_2_1 && !observers_2_1.done && (_a = observers_2.return)) _a.call(observers_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n cleanup();\n },\n complete: function () {\n var e_4, _a;\n var _b;\n try {\n for (var observers_3 = __values(observers), observers_3_1 = observers_3.next(); !observers_3_1.done; observers_3_1 = observers_3.next()) {\n var obs = observers_3_1.value;\n /* istanbul ignore next */\n (_b = obs.complete) === null || _b === void 0 ? void 0 : _b.call(obs);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (observers_3_1 && !observers_3_1.done && (_a = observers_3.return)) _a.call(observers_3);\n }\n finally { if (e_4) throw e_4.error; }\n }\n cleanup();\n },\n });\n }\n // Return unsubscribe function for this observer\n return function () {\n observers.delete(observer);\n // If no observers left, unsubscribe from the source\n if (observers.size === 0 && subscription) {\n subscription.unsubscribe();\n subscription = null;\n }\n };\n });\n}\nexport { asyncMap, multicast, merge };\n//# sourceMappingURL=observable.js.map","import {\n PageTrackingHistoryChanges,\n PageTrackingOptions,\n PageTrackingTrackOn,\n ElementInteractionsOptions,\n BrowserOptions,\n AutocaptureOptions,\n AttributionOptions,\n NetworkTrackingOptions,\n FrustrationInteractionsOptions,\n} from '@amplitude/analytics-core';\n\n/**\n * A subset of AutocaptureOptions that includes the autocapture features that\n * are made available to users by default (even if \"config.autocapture === undefined\")\n */\ntype AutocaptureOptionsDefaultAvailable = Pick<\n AutocaptureOptions,\n 'pageViews' | 'sessions' | 'fileDownloads' | 'formInteractions' | 'attribution' | 'pageUrlEnrichment'\n>;\n\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true (even if \"config.autocapture === undefined\")\n */\nconst isTrackingEnabled = (\n autocapture: AutocaptureOptionsDefaultAvailable | boolean | undefined,\n event: keyof AutocaptureOptionsDefaultAvailable,\n) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (autocapture?.[event] === false) {\n return false;\n }\n\n return true;\n};\n\nexport const isAttributionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'attribution');\n\nexport const isFileDownloadTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'fileDownloads');\n\nexport const isFormInteractionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'formInteractions');\n\nexport const isPageViewTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageViews');\n\nexport const isSessionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'sessions');\n\nexport const isPageUrlEnrichmentEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageUrlEnrichment');\n\n/**\n * Returns true if\n * 1. if autocapture.networkTracking === true\n * 2. if autocapture.networkTracking === object\n * otherwise returns false\n */\nexport const isNetworkTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.networkTracking === true || typeof autocapture.networkTracking === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport const isElementInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.webVitals === true\n * otherwise returns false\n */\nexport const isWebVitalsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (typeof autocapture === 'object' && autocapture.webVitals === true) {\n return true;\n }\n\n return false;\n};\n\nexport const isFrustrationInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.frustrationInteractions === true || typeof autocapture.frustrationInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getElementInteractionsConfig = (config: BrowserOptions): ElementInteractionsOptions | undefined => {\n if (\n isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object'\n ) {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\n\nexport const getFrustrationInteractionsConfig = (\n config: BrowserOptions,\n): FrustrationInteractionsOptions | undefined => {\n if (\n isFrustrationInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.frustrationInteractions === 'object'\n ) {\n return config.autocapture.frustrationInteractions;\n }\n return undefined;\n};\n\nexport const getNetworkTrackingConfig = (config: BrowserOptions): NetworkTrackingOptions | undefined => {\n if (isNetworkTrackingEnabled(config.autocapture)) {\n let networkTrackingConfig;\n if (typeof config.autocapture === 'object' && typeof config.autocapture.networkTracking === 'object') {\n networkTrackingConfig = config.autocapture.networkTracking;\n } else if (config.networkTrackingOptions) {\n networkTrackingConfig = config.networkTrackingOptions;\n }\n return {\n ...networkTrackingConfig,\n captureRules: networkTrackingConfig?.captureRules?.map((rule) => {\n // if URLs and hosts are both set, URLs take precedence over hosts\n if (rule.urls?.length && rule.hosts?.length) {\n const hostsString = JSON.stringify(rule.hosts);\n const urlsString = JSON.stringify(rule.urls);\n /* istanbul ignore next */\n config.loggerProvider?.warn(\n `Found network capture rule with both urls='${urlsString}' and hosts='${hostsString}' set. ` +\n `Definition of urls takes precedence over hosts, so ignoring hosts.`,\n );\n return { ...rule, hosts: undefined };\n }\n return rule;\n }),\n };\n }\n return;\n};\n\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n let trackOn: PageTrackingTrackOn | undefined = () => false;\n let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n let eventType: string | undefined;\n const pageCounter = config.pageCounter;\n\n const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n\n if (\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object'\n ) {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n\n return {\n trackOn,\n trackHistoryChanges,\n eventType,\n pageCounter,\n };\n};\n\nexport const getAttributionTrackingConfig = (config: BrowserOptions): AttributionOptions => {\n if (\n isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object'\n ) {\n return {\n ...config.defaultTracking.attribution,\n };\n }\n\n return {};\n};\n","import { Result, AmplitudeReturn } from '@amplitude/analytics-core';\n\ninterface ProxyItem {\n name: string;\n args: any[];\n resolve?: (promise: Promise<Result>) => void;\n}\n\ntype QueueProxy = Array<ProxyItem>;\n\ninterface InstanceProxy {\n _q: QueueProxy;\n _iq: Record<string, InstanceProxy>;\n}\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n for (let i = 0; i < queue.length; i++) {\n const { name, args, resolve } = queue[i];\n const fn = instance && instance[name as keyof T];\n if (typeof fn === 'function') {\n const result = fn.apply(instance, args) as AmplitudeReturn<Result>;\n if (typeof resolve === 'function') {\n resolve(result?.promise);\n }\n }\n }\n return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n const instanceProxy = instance as InstanceProxy;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n","export const VERSION = '2.33.0';\n","export const LIBPREFIX = 'amplitude-ts-sdk-script';\n","import { UUID, getLanguage, Event, BeforePlugin, BrowserConfig } from '@amplitude/analytics-core';\nimport { VERSION } from '../version';\nimport { LIBPREFIX } from '../lib-prefix';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\nexport class Context implements BeforePlugin {\n name = '@amplitude/plugin-context-browser';\n type = 'before' as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n userAgent: string | undefined;\n library = `${LIBPREFIX}/${VERSION}`;\n\n constructor() {\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n this.userAgent = navigator.userAgent;\n }\n }\n\n setup(config: BrowserConfig): Promise<undefined> {\n this.config = config;\n\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n const time = new Date().getTime();\n const lastEventId = this.config.lastEventId ?? -1;\n const nextEventId = context.event_id ?? lastEventId + 1;\n this.config.lastEventId = nextEventId;\n if (!context.time) {\n this.config.lastEventTime = time;\n }\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: this.config.appVersion }),\n ...(this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM }),\n ...(this.config.trackingOptions.language && { language: getLanguage() }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...(this.config.ingestionMetadata && {\n ingestion_metadata: {\n source_name: this.config.ingestionMetadata.sourceName,\n source_version: this.config.ingestionMetadata.sourceVersion,\n },\n }),\n ...context,\n event_id: nextEventId,\n library: this.library,\n user_agent: this.userAgent,\n };\n return event;\n }\n}\n","import { getGlobalScope, ILogger, BrowserStorage } from '@amplitude/analytics-core';\n\nconst MAX_ARRAY_LENGTH = 1000;\n\ninterface LocalStorageOptions {\n loggerProvider?: ILogger;\n}\nexport class LocalStorage<T> extends BrowserStorage<T> {\n loggerProvider?: ILogger;\n\n constructor(config?: LocalStorageOptions) {\n let localStorage;\n\n try {\n localStorage = getGlobalScope()?.localStorage;\n } catch (e) {\n config?.loggerProvider?.debug(`Failed to access localStorage. error=${JSON.stringify(e)}`);\n localStorage = undefined;\n }\n super(localStorage);\n this.loggerProvider = config?.loggerProvider;\n }\n\n async set(key: string, value: T): Promise<void> {\n if (Array.isArray(value) && value.length > MAX_ARRAY_LENGTH) {\n const droppedEventsCount = value.length - MAX_ARRAY_LENGTH;\n await super.set(key, value.slice(0, MAX_ARRAY_LENGTH) as T);\n this.loggerProvider?.error(\n `Failed to save ${droppedEventsCount} events because the queue length exceeded ${MAX_ARRAY_LENGTH}.`,\n );\n } else {\n await super.set(key, value);\n }\n }\n}\n","import { getGlobalScope, BrowserStorage } from '@amplitude/analytics-core';\n\nexport class SessionStorage<T> extends BrowserStorage<T> {\n constructor() {\n super(getGlobalScope()?.sessionStorage);\n }\n}\n","import { BaseTransport, Payload, Response, Transport } from '@amplitude/analytics-core';\n\nexport class XHRTransport extends BaseTransport implements Transport {\n private state = {\n done: 4,\n };\n private customHeaders: Record<string, string>;\n\n constructor(customHeaders: Record<string, string> = {}) {\n super();\n this.customHeaders = customHeaders;\n }\n\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n /* istanbul ignore if */\n if (typeof XMLHttpRequest === 'undefined') {\n reject(new Error('XHRTransport is not supported.'));\n }\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', serverUrl, true);\n xhr.onreadystatechange = () => {\n if (xhr.readyState === this.state.done) {\n const responseText = xhr.responseText;\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n resolve(this.buildResponse(JSON.parse(responseText)));\n } catch {\n resolve(this.buildResponse({ code: xhr.status }));\n }\n }\n };\n // Merge headers: custom headers override defaults (consistent with FetchTransport)\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n ...this.customHeaders,\n };\n for (const [key, value] of Object.entries(headers)) {\n xhr.setRequestHeader(key, value);\n }\n xhr.send(JSON.stringify(payload));\n });\n }\n}\n","import { BaseTransport, getGlobalScope, Payload, Response, Transport } from '@amplitude/analytics-core';\n\nexport class SendBeaconTransport extends BaseTransport implements Transport {\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n const globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!globalScope?.navigator.sendBeacon) {\n throw new Error('SendBeaconTransport is not supported');\n }\n try {\n const data = JSON.stringify(payload);\n const success = globalScope.navigator.sendBeacon(serverUrl, JSON.stringify(payload));\n if (success) {\n return resolve(\n this.buildResponse({\n code: 200,\n events_ingested: payload.events.length,\n payload_size_bytes: data.length,\n server_upload_time: Date.now(),\n }),\n );\n }\n return resolve(this.buildResponse({ code: 500 }));\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n","import { getOldCookieName, Storage, UserSession } from '@amplitude/analytics-core';\n\nexport const parseLegacyCookies = async (\n apiKey: string,\n cookieStorage: Storage<UserSession>,\n deleteLegacyCookies = true,\n): Promise<UserSession> => {\n const cookieName = getOldCookieName(apiKey);\n const cookies = await cookieStorage.getRaw(cookieName);\n if (!cookies) {\n return {\n optOut: false,\n };\n }\n if (deleteLegacyCookies) {\n await cookieStorage.remove(cookieName);\n }\n const [deviceId, userId, optOut, sessionId, lastEventTime, lastEventId] = cookies.split('.');\n return {\n deviceId,\n userId: decode(userId),\n sessionId: parseTime(sessionId),\n lastEventId: parseTime(lastEventId),\n lastEventTime: parseTime(lastEventTime),\n optOut: Boolean(optOut),\n };\n};\n\nexport const parseTime = (num: string) => {\n const integer = parseInt(num, 32);\n if (isNaN(integer)) {\n return undefined;\n }\n return integer;\n};\n\nexport const decode = (value?: string): string | undefined => {\n if (!atob || !escape || !value) {\n return undefined;\n }\n try {\n return decodeURIComponent(escape(atob(value)));\n } catch {\n return undefined;\n }\n};\n","import { IdentityStorageType, ServerZoneType } from '@amplitude/analytics-core';\n\nexport const DEFAULT_EVENT_PREFIX = '[Amplitude]';\n\nexport const DEFAULT_PAGE_VIEW_EVENT = `${DEFAULT_EVENT_PREFIX} Page Viewed`;\nexport const DEFAULT_FORM_START_EVENT = `${DEFAULT_EVENT_PREFIX} Form Started`;\nexport const DEFAULT_FORM_SUBMIT_EVENT = `${DEFAULT_EVENT_PREFIX} Form Submitted`;\nexport const DEFAULT_FILE_DOWNLOAD_EVENT = `${DEFAULT_EVENT_PREFIX} File Downloaded`;\nexport const DEFAULT_SESSION_START_EVENT = 'session_start';\nexport const DEFAULT_SESSION_END_EVENT = 'session_end';\n\nexport const FILE_EXTENSION = `${DEFAULT_EVENT_PREFIX} File Extension`;\nexport const FILE_NAME = `${DEFAULT_EVENT_PREFIX} File Name`;\nexport const LINK_ID = `${DEFAULT_EVENT_PREFIX} Link ID`;\nexport const LINK_TEXT = `${DEFAULT_EVENT_PREFIX} Link Text`;\nexport const LINK_URL = `${DEFAULT_EVENT_PREFIX} Link URL`;\n\nexport const FORM_ID = `${DEFAULT_EVENT_PREFIX} Form ID`;\nexport const FORM_NAME = `${DEFAULT_EVENT_PREFIX} Form Name`;\nexport const FORM_DESTINATION = `${DEFAULT_EVENT_PREFIX} Form Destination`;\n\nexport const DEFAULT_IDENTITY_STORAGE: IdentityStorageType = 'cookie';\nexport const DEFAULT_SERVER_ZONE: ServerZoneType = 'US';\n","import {\n Config,\n Logger,\n ILogger,\n LogLevel,\n Event,\n Storage,\n IngestionMetadata,\n ServerZoneType,\n OfflineDisabled,\n Plan,\n IdentityStorageType,\n TransportTypeOrOptions,\n MemoryStorage,\n UUID,\n CookieStorage,\n getCookieName,\n FetchTransport,\n getQueryParams,\n UserSession,\n BrowserOptions,\n BrowserConfig as IBrowserConfig,\n DefaultTrackingOptions,\n TrackingOptions,\n AutocaptureOptions,\n CookieOptions,\n RemoteConfigOptions,\n NetworkTrackingOptions,\n IIdentify,\n IDiagnosticsClient,\n} from '@amplitude/analytics-core';\n\nimport { LocalStorage } from './storage/local-storage';\nimport { SessionStorage } from './storage/session-storage';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { DEFAULT_IDENTITY_STORAGE, DEFAULT_SERVER_ZONE } from './constants';\nimport { AmplitudeBrowser } from './browser-client';\nimport { VERSION } from './version';\n\n// Exported for testing purposes only. Do not expose to public interface.\nexport class BrowserConfig extends Config implements IBrowserConfig {\n public readonly version = VERSION;\n protected _cookieStorage: Storage<UserSession>;\n protected _deviceId?: string;\n protected _lastEventId?: number;\n protected _lastEventTime?: number;\n protected _optOut = false;\n protected _sessionId?: number;\n protected _userId?: string;\n protected _pageCounter?: number;\n protected _debugLogsEnabled?: boolean;\n constructor(\n public apiKey: string,\n public appVersion?: string,\n cookieStorage: Storage<UserSession> = new MemoryStorage(),\n public cookieOptions: CookieOptions = {\n domain: '',\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n },\n public defaultTracking?: boolean | DefaultTrackingOptions,\n public autocapture?: boolean | AutocaptureOptions,\n deviceId?: string,\n public flushIntervalMillis: number = 1000,\n public flushMaxRetries: number = 5,\n public flushQueueSize: number = 30,\n public identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n public ingestionMetadata?: IngestionMetadata,\n public instanceName?: string,\n lastEventId?: number,\n lastEventTime?: number,\n public loggerProvider: ILogger = new Logger(),\n public logLevel: LogLevel = LogLevel.Warn,\n public minIdLength?: number,\n public offline: boolean | typeof OfflineDisabled = false,\n optOut = false,\n public partnerId?: string,\n public plan?: Plan,\n public serverUrl: string = '',\n public serverZone: ServerZoneType = DEFAULT_SERVER_ZONE,\n sessionId?: number,\n public sessionTimeout: number = 30 * 60 * 1000,\n public storageProvider: Storage<Event[]> = new LocalStorage({ loggerProvider }),\n public trackingOptions: Required<TrackingOptions> = {\n ipAddress: true,\n language: true,\n platform: true,\n },\n public transport: TransportTypeOrOptions = 'fetch',\n public useBatch: boolean = false,\n public fetchRemoteConfig: boolean = true,\n userId?: string,\n pageCounter?: number,\n debugLogsEnabled?: boolean,\n public networkTrackingOptions?: NetworkTrackingOptions,\n public identify?: IIdentify,\n public enableDiagnostics: boolean = true,\n public diagnosticsSampleRate: number = 0,\n public diagnosticsClient?: IDiagnosticsClient,\n public remoteConfig?: RemoteConfigOptions,\n ) {\n super({ apiKey, storageProvider, transportProvider: createTransport(transport) });\n this._cookieStorage = cookieStorage;\n this.deviceId = deviceId;\n this.lastEventId = lastEventId;\n this.lastEventTime = lastEventTime;\n this.optOut = optOut;\n this.sessionId = sessionId;\n this.pageCounter = pageCounter;\n this.userId = userId;\n this.debugLogsEnabled = debugLogsEnabled;\n this.loggerProvider.enable(debugLogsEnabled ? LogLevel.Debug : this.logLevel);\n this.networkTrackingOptions = networkTrackingOptions;\n this.identify = identify;\n this.enableDiagnostics = enableDiagnostics;\n this.diagnosticsSampleRate = diagnosticsSampleRate;\n this.diagnosticsClient = diagnosticsClient;\n\n // Backward compatibility for fetchRemoteConfig\n let _fetchRemoteConfig;\n if (remoteConfig?.fetchRemoteConfig === true) {\n // set to true if remoteConfig explicitly set to true\n _fetchRemoteConfig = true;\n } else if (remoteConfig?.fetchRemoteConfig === false || fetchRemoteConfig === false) {\n // set to false if either are set to false explicitly\n _fetchRemoteConfig = false;\n } else {\n // default to true if both undefined\n _fetchRemoteConfig = true;\n }\n this.remoteConfig = this.remoteConfig || {};\n this.remoteConfig.fetchRemoteConfig = _fetchRemoteConfig;\n this.fetchRemoteConfig = _fetchRemoteConfig;\n }\n\n get cookieStorage() {\n return this._cookieStorage;\n }\n\n set cookieStorage(cookieStorage: Storage<UserSession>) {\n if (this._cookieStorage !== cookieStorage) {\n this._cookieStorage = cookieStorage;\n this.updateStorage();\n }\n }\n\n get deviceId() {\n return this._deviceId;\n }\n\n set deviceId(deviceId: string | undefined) {\n if (this._deviceId !== deviceId) {\n this._deviceId = deviceId;\n this.updateStorage();\n }\n }\n\n get userId() {\n return this._userId;\n }\n\n set userId(userId: string | undefined) {\n if (this._userId !== userId) {\n this._userId = userId;\n this.updateStorage();\n }\n }\n\n get sessionId() {\n return this._sessionId;\n }\n\n set sessionId(sessionId: number | undefined) {\n if (this._sessionId !== sessionId) {\n this._sessionId = sessionId;\n this.updateStorage();\n }\n }\n\n get optOut() {\n return this._optOut;\n }\n\n set optOut(optOut: boolean) {\n if (this._optOut !== optOut) {\n this._optOut = optOut;\n this.updateStorage();\n }\n }\n\n get lastEventTime() {\n return this._lastEventTime;\n }\n\n set lastEventTime(lastEventTime: number | undefined) {\n if (this._lastEventTime !== lastEventTime) {\n this._lastEventTime = lastEventTime;\n this.updateStorage();\n }\n }\n\n get lastEventId() {\n return this._lastEventId;\n }\n\n set lastEventId(lastEventId: number | undefined) {\n if (this._lastEventId !== lastEventId) {\n this._lastEventId = lastEventId;\n this.updateStorage();\n }\n }\n\n get pageCounter() {\n return this._pageCounter;\n }\n\n set pageCounter(pageCounter: number | undefined) {\n if (this._pageCounter !== pageCounter) {\n this._pageCounter = pageCounter;\n this.updateStorage();\n }\n }\n\n set debugLogsEnabled(debugLogsEnabled: boolean | undefined) {\n if (this._debugLogsEnabled !== debugLogsEnabled) {\n this._debugLogsEnabled = debugLogsEnabled;\n this.updateStorage();\n }\n }\n\n private updateStorage() {\n const cache = {\n deviceId: this._deviceId,\n userId: this._userId,\n sessionId: this._sessionId,\n optOut: this._optOut,\n lastEventTime: this._lastEventTime,\n lastEventId: this._lastEventId,\n pageCounter: this._pageCounter,\n debugLogsEnabled: this._debugLogsEnabled,\n };\n void this.cookieStorage.set(getCookieName(this.apiKey), cache);\n }\n}\n\nexport const useBrowserConfig = async (\n apiKey: string,\n options: BrowserOptions = {},\n amplitudeInstance: AmplitudeBrowser,\n): Promise<IBrowserConfig> => {\n // Step 1: Create identity storage instance\n const identityStorage = options.identityStorage || DEFAULT_IDENTITY_STORAGE;\n const cookieOptions = {\n domain:\n identityStorage !== DEFAULT_IDENTITY_STORAGE ? '' : options.cookieOptions?.domain ?? (await getTopLevelDomain()),\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n ...options.cookieOptions,\n };\n const cookieStorage = createCookieStorage<UserSession>(options.identityStorage, cookieOptions);\n\n // Step 1: Parse cookies using identity storage instance\n const legacyCookies = await parseLegacyCookies(apiKey, cookieStorage, options.cookieOptions?.upgrade ?? true);\n const previousCookies = await cookieStorage.get(getCookieName(apiKey));\n const queryParams = getQueryParams();\n\n // Check if ampTimestamp is present and valid\n const ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n const isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n\n // Step 3: Reconcile user identity\n const deviceId =\n options.deviceId ??\n (isWithinTimeLimit ? queryParams.ampDeviceId ?? queryParams.deviceId : undefined) ??\n previousCookies?.deviceId ??\n legacyCookies.deviceId ??\n UUID();\n const lastEventId = previousCookies?.lastEventId ?? legacyCookies.lastEventId;\n const lastEventTime = previousCookies?.lastEventTime ?? legacyCookies.lastEventTime;\n const optOut = options.optOut ?? previousCookies?.optOut ?? legacyCookies.optOut;\n const sessionId = previousCookies?.sessionId ?? legacyCookies.sessionId;\n const userId = options.userId ?? previousCookies?.userId ?? legacyCookies.userId;\n amplitudeInstance.previousSessionDeviceId = previousCookies?.deviceId ?? legacyCookies.deviceId;\n amplitudeInstance.previousSessionUserId = previousCookies?.userId ?? legacyCookies.userId;\n\n const trackingOptions = {\n ipAddress: options.trackingOptions?.ipAddress ?? true,\n language: options.trackingOptions?.language ?? true,\n platform: options.trackingOptions?.platform ?? true,\n };\n const pageCounter = previousCookies?.pageCounter;\n const debugLogsEnabled = previousCookies?.debugLogsEnabled;\n\n // Override default tracking options if autocapture is set\n if (options.autocapture !== undefined) {\n options.defaultTracking = options.autocapture;\n }\n\n const browserConfig = new BrowserConfig(\n apiKey,\n options.appVersion,\n cookieStorage,\n cookieOptions,\n options.defaultTracking,\n options.autocapture,\n deviceId,\n options.flushIntervalMillis,\n options.flushMaxRetries,\n options.flushQueueSize,\n identityStorage,\n options.ingestionMetadata,\n options.instanceName,\n lastEventId,\n lastEventTime,\n options.loggerProvider,\n options.logLevel,\n options.minIdLength,\n options.offline,\n optOut,\n options.partnerId,\n options.plan,\n options.serverUrl,\n options.serverZone,\n sessionId,\n options.sessionTimeout,\n options.storageProvider,\n trackingOptions,\n options.transport,\n options.useBatch,\n options.fetchRemoteConfig,\n userId,\n pageCounter,\n debugLogsEnabled,\n options.networkTrackingOptions,\n options.identify,\n options.enableDiagnostics,\n amplitudeInstance._diagnosticsSampleRate, // Use _diagnosticsSampleRate set via _setDiagnosticsSampleRate() or defaults to 0\n undefined, // diagnosticsClient - set after config creation\n options.remoteConfig,\n );\n\n if (!(await browserConfig.storageProvider.isEnabled())) {\n browserConfig.loggerProvider.warn(\n `Storage provider ${browserConfig.storageProvider.constructor.name} is not enabled. Falling back to MemoryStorage.`,\n );\n browserConfig.storageProvider = new MemoryStorage();\n }\n\n return browserConfig;\n};\n\nexport const createCookieStorage = <T>(\n identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n cookieOptions: CookieOptions = {},\n) => {\n switch (identityStorage) {\n case 'localStorage':\n return new LocalStorage<T>();\n case 'sessionStorage':\n return new SessionStorage<T>();\n case 'none':\n return new MemoryStorage<T>();\n case 'cookie':\n default:\n return new CookieStorage<T>({\n ...cookieOptions,\n expirationDays: cookieOptions.expiration,\n });\n }\n};\n\nexport const createTransport = (transport?: TransportTypeOrOptions) => {\n const type = typeof transport === 'object' ? transport.type : transport;\n const headers = typeof transport === 'object' ? transport.headers : undefined;\n\n if (type === 'xhr') {\n return new XHRTransport(headers);\n }\n if (type === 'beacon') {\n // SendBeacon does not support custom headers\n return new SendBeaconTransport();\n }\n return new FetchTransport(headers);\n};\n\nexport const getTopLevelDomain = async (url?: string) => {\n if (\n !(await new CookieStorage<number>().isEnabled()) ||\n (!url && (typeof location === 'undefined' || !location.hostname))\n ) {\n return '';\n }\n\n const host = url ?? location.hostname;\n const parts = host.split('.');\n const levels = [];\n const storageKey = 'AMP_TLDTEST';\n\n for (let i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n for (let i = 0; i < levels.length; i++) {\n const domain = levels[i];\n const options = { domain: '.' + domain };\n const storage = new CookieStorage<number>(options);\n await storage.set(storageKey, 1);\n const value = await storage.get(storageKey);\n if (value) {\n await storage.remove(storageKey);\n return '.' + domain;\n }\n }\n\n return '';\n};\n","export var omitUndefined = function (input) {\n var obj = {};\n for (var key in input) {\n var val = input[key];\n if (val) {\n obj[key] = val;\n }\n }\n return obj;\n};\n//# sourceMappingURL=utils.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { getPageTitle, replaceSensitiveString, IdentifyOperation, CampaignParser, getGlobalScope, BASE_CAMPAIGN, } from '@amplitude/analytics-core';\nimport { omitUndefined } from './utils';\nexport var defaultPageViewEvent = '[Amplitude] Page Viewed';\nexport var pageViewTrackingPlugin = function (options) {\n if (options === void 0) { options = {}; }\n var amplitude;\n var globalScope = getGlobalScope();\n var loggerProvider = undefined;\n var isTracking = false;\n var localConfig;\n var trackOn = options.trackOn, trackHistoryChanges = options.trackHistoryChanges, _a = options.eventType, eventType = _a === void 0 ? defaultPageViewEvent : _a;\n var getDecodeURI = function (locationStr) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n };\n var createPageViewEvent = function () { return __awaiter(void 0, void 0, void 0, function () {\n var locationHREF, _a;\n var _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n _b = {\n event_type: eventType\n };\n _a = [{}];\n return [4 /*yield*/, getCampaignParams()];\n case 1: return [2 /*return*/, (_b.event_properties = __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { '[Amplitude] Page Domain': \n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '', '[Amplitude] Page Location': locationHREF, '[Amplitude] Page Path': \n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0] }]),\n _b)];\n }\n });\n }); };\n var shouldTrackOnPageLoad = function () { return typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn()); };\n /* istanbul ignore next */\n var previousURL = typeof location !== 'undefined' ? location.href : null;\n var trackHistoryPageView = function () { return __awaiter(void 0, void 0, void 0, function () {\n var newURL, shouldTrackPageView, _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n newURL = location.href;\n shouldTrackPageView = shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n if (!shouldTrackPageView) return [3 /*break*/, 4];\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');\n if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];\n _a = void 0;\n return [3 /*break*/, 3];\n case 1:\n _c = (_b = amplitude).track;\n return [4 /*yield*/, createPageViewEvent()];\n case 2:\n _a = _c.apply(_b, [_d.sent()]);\n _d.label = 3;\n case 3:\n _a;\n _d.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n /* istanbul ignore next */\n var trackHistoryPageViewWrapper = function () {\n void trackHistoryPageView();\n };\n var plugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n setup: function (config, client) { return __awaiter(void 0, void 0, void 0, function () {\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n amplitude = client;\n localConfig = config;\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n isTracking = true;\n if (globalScope) {\n globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n void trackHistoryPageView();\n }\n },\n });\n }\n if (!shouldTrackOnPageLoad()) return [3 /*break*/, 2];\n loggerProvider.log('Tracking page view event');\n _b = (_a = amplitude).track;\n return [4 /*yield*/, createPageViewEvent()];\n case 1:\n _b.apply(_a, [_c.sent()]);\n _c.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var pageViewEvent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/, 2];\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Enriching campaign event to page view event with campaign parameters');\n return [4 /*yield*/, createPageViewEvent()];\n case 1:\n pageViewEvent = _a.sent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = __assign(__assign({}, event.event_properties), pageViewEvent.event_properties);\n _a.label = 2;\n case 2:\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = __assign(__assign({}, event.event_properties), { '[Amplitude] Page Counter': localConfig.pageCounter });\n }\n return [2 /*return*/, event];\n }\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (globalScope) {\n globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n isTracking = false;\n }\n return [2 /*return*/];\n });\n }); },\n };\n return plugin;\n};\nvar getCampaignParams = function () { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = omitUndefined;\n return [4 /*yield*/, new CampaignParser().parse()];\n case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];\n }\n}); }); };\nvar isCampaignEvent = function (event) {\n if (event.event_type === '$identify' && event.user_properties) {\n var properties = event.user_properties;\n var $set = properties[IdentifyOperation.SET] || {};\n var $unset = properties[IdentifyOperation.UNSET] || {};\n var userProperties_1 = __spreadArray(__spreadArray([], __read(Object.keys($set)), false), __read(Object.keys($unset)), false);\n return Object.keys(BASE_CAMPAIGN).every(function (value) { return userProperties_1.includes(value); });\n }\n return false;\n};\nexport var shouldTrackHistoryPageView = function (trackingOption, newURLStr, oldURLStr) {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '')\n return true;\n var newURL = new URL(newURLStr);\n var oldURL = new URL(oldURLStr);\n var newBaseStr = newURL.origin + newURL.pathname;\n var oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n//# sourceMappingURL=page-view-tracking.js.map","import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: Event) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n","import { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'click';\n handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const name = '@amplitude/plugin-file-download-tracking-browser';\n const type = 'enrichment';\n\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFileDownloadTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n let url: URL;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n } catch {\n /* istanbul ignore next */\n return;\n }\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n addEventListener(a, 'click', () => {\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n [FILE_EXTENSION]: fileExtension,\n [FILE_NAME]: url.pathname,\n [LINK_ID]: a.id,\n [LINK_TEXT]: a.text,\n [LINK_URL]: a.href,\n });\n }\n });\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\\?.+)?$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n /* istanbul ignore else*/\n if (document.readyState === 'complete') {\n initializeFileDownloadTracking();\n } else {\n // Otherwise, wait for the load event.\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFileDownloadTracking);\n } else {\n config.loggerProvider.debug('File download tracking is not installed because global is undefined.');\n }\n }\n };\n\n const execute = async (event: Event) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n","import { BrowserConfig } from '@amplitude/analytics-core';\n\nlet notified = false;\n\nexport const detNotify = (config: BrowserConfig): void => {\n if (notified || config.defaultTracking !== undefined) {\n return;\n }\n\n const message = `\\`options.defaultTracking\\` is set to undefined. This implicitly configures your Amplitude instance to track Page Views, Sessions, File Downloads, and Form Interactions. You can suppress this warning by explicitly setting a value to \\`options.defaultTracking\\`. The value must either be a boolean, to enable and disable all default events, or an object, for advanced configuration. For example:\n\namplitude.init(<YOUR_API_KEY>, {\n defaultTracking: true,\n});\n\nVisit https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events for more details.`;\n config.loggerProvider.warn(message);\n notified = true;\n};\n\n/**\n * @private\n * This function is meant for testing purposes only\n */\nexport const resetNotify = () => {\n notified = false;\n};\n","import { getGlobalScope, BeforePlugin, BrowserClient, BrowserConfig } from '@amplitude/analytics-core';\n\ninterface EventListener {\n type: 'online' | 'offline';\n handler: () => void;\n}\n\nexport const networkConnectivityCheckerPlugin = (): BeforePlugin => {\n const name = '@amplitude/plugin-network-checker-browser';\n const type = 'before' as const;\n const globalScope = getGlobalScope();\n let eventListeners: EventListener[] = [];\n\n const addNetworkListener = (type: 'online' | 'offline', handler: () => void) => {\n /* istanbul ignore next */\n if (globalScope?.addEventListener) {\n globalScope?.addEventListener(type, handler);\n eventListeners.push({\n type,\n handler,\n });\n }\n };\n\n const removeNetworkListeners = () => {\n eventListeners.forEach(({ type, handler }) => {\n /* istanbul ignore next */\n globalScope?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n if (typeof navigator === 'undefined') {\n config.loggerProvider.debug(\n 'Network connectivity checker plugin is disabled because navigator is not available.',\n );\n config.offline = false;\n return;\n }\n\n config.offline = !navigator.onLine;\n\n addNetworkListener('online', () => {\n config.loggerProvider.debug('Network connectivity changed to online.');\n config.offline = false;\n // Flush immediately will cause ERR_NETWORK_CHANGED\n setTimeout(() => {\n amplitude.flush();\n }, config.flushIntervalMillis);\n });\n\n addNetworkListener('offline', () => {\n config.loggerProvider.debug('Network connectivity changed to offline.');\n config.offline = true;\n });\n };\n\n const teardown = async () => {\n removeNetworkListeners();\n };\n\n return {\n name,\n type,\n setup,\n teardown,\n };\n};\n","import {\n AutocaptureOptions,\n type ElementInteractionsOptions,\n BrowserConfig,\n RemoteConfig,\n NetworkTrackingOptions,\n NetworkCaptureRule,\n SAFE_HEADERS,\n} from '@amplitude/analytics-core';\n\nexport interface AutocaptureOptionsRemoteConfig extends AutocaptureOptions {\n elementInteractions?: boolean | ElementInteractionsOptionsRemoteConfig;\n networkTracking?: boolean | NetworkTrackingOptionsRemoteConfig;\n}\nexport interface ElementInteractionsOptionsRemoteConfig extends ElementInteractionsOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n pageUrlAllowlistRegex?: string[];\n}\n\nexport interface NetworkCaptureRuleRemoteConfig extends NetworkCaptureRule {\n /**\n * Related to urls but holds regex strings which will be initialized and appended to urls\n */\n urlsRegex?: string[];\n}\n\nexport interface NetworkTrackingOptionsRemoteConfig extends NetworkTrackingOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n captureRules?: NetworkCaptureRuleRemoteConfig[];\n}\n\n// Type alias for the remote config structure we expect (this is what comes from the filtered browserSDK config)\ntype RemoteConfigBrowserSDK = {\n autocapture?: AutocaptureOptionsRemoteConfig | boolean;\n};\n\n/**\n * Performs a deep transformation of a remote config object so that\n * it matches the expected schema of the local config.\n *\n * Specifically, it normalizes nested `enabled` flags into concise union types.\n *\n * ### Transformation Rules:\n * - If an object has `enabled: true`, it is replaced by the same object without the `enabled` field.\n * - If it has only `enabled: true`, it is replaced with `true`.\n * - If it has `enabled: false`, it is replaced with `false` regardless of other fields.\n *\n * ### Examples:\n * Input: { prop: { enabled: true, hello: 'world' }}\n * Output: { prop: { hello: 'world' } }\n *\n * Input: { prop: { enabled: true }}\n * Output: { prop: true }\n *\n * Input: { prop: { enabled: false, hello: 'world' }}\n * Output: { prop: false }\n *\n * Input: { prop: { hello: 'world' }}\n * Output: { prop: { hello: 'world' } } // No change\n *\n * @param config Remote config object to be transformed\n * @returns Transformed config object compatible with local schema\n */\nexport function translateRemoteConfigToLocal(config?: Record<string, any>) {\n // Disabling type checking rules because remote config comes from a remote source\n // and this function needs to handle any unexpected values\n /* eslint-disable @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-argument\n */\n if (typeof config !== 'object' || config === null) {\n return;\n }\n\n // translations are not applied on array properties\n if (Array.isArray(config)) {\n return;\n }\n\n const propertyNames = Object.keys(config);\n for (const propertyName of propertyNames) {\n try {\n const value = config[propertyName];\n // transform objects with { enabled } property to boolean | object\n if (typeof value?.enabled === 'boolean') {\n if (value.enabled) {\n // if enabled is true, set the value to the rest of the object\n // or true if the object has no other properties\n delete value.enabled;\n if (Object.keys(value).length === 0) {\n (config as any)[propertyName] = true;\n }\n } else {\n // If enabled is false, set the value to false\n (config as any)[propertyName] = false;\n }\n }\n\n // recursively translate properties of the value\n translateRemoteConfigToLocal(value as Record<string, any>);\n } catch (e) {\n // a failure here means that an accessor threw an error\n // so don't translate it\n // TODO(diagnostics): add a diagnostic event for this\n }\n }\n\n // translate remote responseHeaders and requestHeaders to local responseHeaders and requestHeaders\n try {\n if (config.autocapture?.networkTracking?.captureRules?.length) {\n for (const rule of config.autocapture.networkTracking.captureRules) {\n for (const header of ['responseHeaders', 'requestHeaders']) {\n const { captureSafeHeaders, allowlist } = rule[header] ?? {};\n if (!captureSafeHeaders && !allowlist) {\n continue;\n }\n // if allowlist is not an array, remote config contract is violated, remove it\n if (allowlist !== undefined && !Array.isArray(allowlist)) {\n delete rule[header];\n continue;\n }\n rule[header] = [...(captureSafeHeaders ? SAFE_HEADERS : []), ...(allowlist ?? [])];\n }\n }\n }\n } catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n\n // translate frustrationInteractions pluralization\n const frustrationInteractions = config.autocapture?.frustrationInteractions;\n if (frustrationInteractions) {\n if (frustrationInteractions.rageClick) {\n frustrationInteractions.rageClicks = frustrationInteractions.rageClick;\n delete frustrationInteractions.rageClick;\n }\n if (frustrationInteractions.deadClick) {\n frustrationInteractions.deadClicks = frustrationInteractions.deadClick;\n delete frustrationInteractions.deadClick;\n }\n }\n}\n\nfunction mergeUrls(urlsExact: (string | RegExp)[], urlsRegex: string[] | undefined, browserConfig: BrowserConfig) {\n // Convert string patterns to RegExp objects, warn on invalid patterns and skip them\n const regexList = [];\n for (const pattern of urlsRegex ?? []) {\n try {\n regexList.push(new RegExp(pattern));\n } catch (regexError) {\n browserConfig.loggerProvider.warn(`Invalid regex pattern: ${pattern}`, regexError);\n }\n }\n\n return urlsExact.concat(regexList);\n}\n\n/**\n * Updates the browser config in place by applying remote configuration settings.\n * Primarily merges autocapture settings from the remote config into the browser config.\n *\n * @param remoteConfig - The remote configuration to apply, or null if none available\n * @param browserConfig - The browser config object to update (modified in place)\n */\nexport function updateBrowserConfigWithRemoteConfig(\n remoteConfig: RemoteConfig | null,\n browserConfig: BrowserConfig,\n): void {\n if (!remoteConfig) {\n return;\n }\n\n // translate remote config to local compatible format\n translateRemoteConfigToLocal(remoteConfig);\n\n try {\n browserConfig.loggerProvider.debug(\n 'Update browser config with remote configuration:',\n JSON.stringify(remoteConfig),\n );\n\n // type cast error will be thrown if remoteConfig is not a valid RemoteConfigBrowserSDK\n // and it will be caught by the try-catch block\n const typedRemoteConfig = remoteConfig as RemoteConfigBrowserSDK;\n\n // merge remoteConfig.autocapture and browserConfig.autocapture\n // if a field is in remoteConfig.autocapture, use that value\n // if a field is not in remoteConfig.autocapture, use the value from browserConfig.autocapture\n if (typedRemoteConfig && 'autocapture' in typedRemoteConfig) {\n if (typeof typedRemoteConfig.autocapture === 'boolean') {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n if (typeof typedRemoteConfig.autocapture === 'object' && typedRemoteConfig.autocapture !== null) {\n const transformedAutocaptureRemoteConfig = { ...typedRemoteConfig.autocapture };\n\n if (browserConfig.autocapture === undefined) {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n // Handle Element Interactions config initialization\n if (\n typeof typedRemoteConfig.autocapture.elementInteractions === 'object' &&\n typedRemoteConfig.autocapture.elementInteractions !== null &&\n typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex?.length\n ) {\n transformedAutocaptureRemoteConfig.elementInteractions = {\n ...typedRemoteConfig.autocapture.elementInteractions,\n };\n const transformedRcElementInteractions = transformedAutocaptureRemoteConfig.elementInteractions;\n\n // combine exact allow list and regex allow list into just 'pageUrlAllowlist'\n const exactAllowList = transformedRcElementInteractions.pageUrlAllowlist ?? [];\n const urlsRegex = typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex;\n transformedRcElementInteractions.pageUrlAllowlist = mergeUrls(exactAllowList, urlsRegex, browserConfig);\n\n // clean up the regex allow list\n delete transformedRcElementInteractions.pageUrlAllowlistRegex;\n }\n\n // Handle Network Tracking config initialization\n if (\n typeof typedRemoteConfig.autocapture.networkTracking === 'object' &&\n typedRemoteConfig.autocapture.networkTracking !== null &&\n typedRemoteConfig.autocapture.networkTracking.captureRules?.length\n ) {\n transformedAutocaptureRemoteConfig.networkTracking = {\n ...typedRemoteConfig.autocapture.networkTracking,\n };\n const transformedRcNetworkTracking = transformedAutocaptureRemoteConfig.networkTracking;\n /* istanbul ignore next */\n const captureRules = transformedRcNetworkTracking.captureRules ?? [];\n for (const rule of captureRules) {\n rule.urls = mergeUrls(rule.urls ?? [], rule.urlsRegex, browserConfig);\n delete rule.urlsRegex;\n }\n }\n\n if (typeof browserConfig.autocapture === 'boolean') {\n browserConfig.autocapture = {\n attribution: browserConfig.autocapture,\n fileDownloads: browserConfig.autocapture,\n formInteractions: browserConfig.autocapture,\n pageViews: browserConfig.autocapture,\n sessions: browserConfig.autocapture,\n elementInteractions: browserConfig.autocapture,\n webVitals: browserConfig.autocapture,\n frustrationInteractions: browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n\n if (typeof browserConfig.autocapture === 'object') {\n browserConfig.autocapture = {\n ...browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n }\n\n // Override default tracking options if autocapture is updated by remote config\n browserConfig.defaultTracking = browserConfig.autocapture;\n }\n\n browserConfig.loggerProvider.debug('Browser config after remote config update:', JSON.stringify(browserConfig));\n } catch (e) {\n browserConfig.loggerProvider.error('Failed to apply remote configuration because of error: ', e);\n }\n}\n","export var VERSION = '1.18.3';\n//# sourceMappingURL=version.js.map","export var PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\nexport var FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';\nexport var AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport var AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';\nexport var AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';\nexport var AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport var AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport var AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\n// Visual Tagging related constants\nexport var AMPLITUDE_ORIGIN = 'https://app.amplitude.com';\nexport var AMPLITUDE_ORIGIN_EU = 'https://app.eu.amplitude.com';\nexport var AMPLITUDE_ORIGIN_STAGING = 'https://apps.stag2.amplitude.com';\nexport var AMPLITUDE_ORIGINS_MAP = {\n US: AMPLITUDE_ORIGIN,\n EU: AMPLITUDE_ORIGIN_EU,\n STAGING: AMPLITUDE_ORIGIN_STAGING,\n};\nexport var AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport var AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n// Data attribute for specifying which attributes should be redacted from autocapture\nexport var DATA_AMP_MASK_ATTRIBUTES = 'data-amp-mask-attributes';\nexport var MAX_MASK_TEXT_PATTERNS = 25;\nexport var MAX_ATTRIBUTE_LENGTH = 128;\n//# sourceMappingURL=constants.js.map","import { __read } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { isUrlMatchAllowlist } from '@amplitude/analytics-core';\nvar SENSITIVE_TAGS = ['input', 'select', 'textarea'];\nexport var isElementPointerCursor = function (element, actionType) {\n var _a;\n /* istanbul ignore next */\n var computedStyle = (_a = window === null || window === void 0 ? void 0 : window.getComputedStyle) === null || _a === void 0 ? void 0 : _a.call(window, element);\n /* istanbul ignore next */\n return (computedStyle === null || computedStyle === void 0 ? void 0 : computedStyle.getPropertyValue('cursor')) === 'pointer' && actionType === 'click';\n};\nexport var createShouldTrackEvent = function (autocaptureOptions, allowlist, // this can be any type of css selector allow list\nisAlwaysCaptureCursorPointer) {\n if (isAlwaysCaptureCursorPointer === void 0) { isAlwaysCaptureCursorPointer = false; }\n return function (actionType, element) {\n var _a, _b;\n var pageUrlAllowlist = autocaptureOptions.pageUrlAllowlist, pageUrlExcludelist = autocaptureOptions.pageUrlExcludelist, shouldTrackEventResolver = autocaptureOptions.shouldTrackEventResolver;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n // window, document, and Text nodes have no tag\n if (!tag) {\n return false;\n }\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n // check if the URL is in the allow list\n if (!isUrlMatchAllowlist(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n // check if the URL is in the excludelist\n if (pageUrlExcludelist &&\n pageUrlExcludelist.length > 0 &&\n isUrlMatchAllowlist(window.location.href, pageUrlExcludelist)) {\n return false;\n }\n /* istanbul ignore next */\n var elementType = String(element === null || element === void 0 ? void 0 : element.getAttribute('type')) || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n var isCursorPointer = isElementPointerCursor(element, actionType);\n if (isAlwaysCaptureCursorPointer && isCursorPointer) {\n return true;\n }\n /* istanbul ignore if */\n if (allowlist) {\n var hasMatchAnyAllowedSelector = allowlist.some(function (selector) { var _a; return !!((_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector)); });\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n /* istanbul ignore next */\n if (isCursorPointer) {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n};\nexport var isTextNode = function (node) {\n return !!node && node.nodeType === 3;\n};\nexport var isNonSensitiveElement = function (element) {\n var _a, _b, _c;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n var isContentEditable = element instanceof HTMLElement ? ((_c = element.getAttribute('contenteditable')) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'true' : false;\n return !SENSITIVE_TAGS.includes(tag) && !isContentEditable;\n};\n/**\n * Collects redacted attribute names from element and ancestor elements with data-amp-mask-attributes\n * The 'id' and 'class' attributes cannot be redacted as they're critical for element identification\n * @param element - The target element to check for redaction attributes\n * @returns Set of attribute names that should be redacted\n */\n/**\n * Parses a comma-separated string of attribute names and filters out protected attributes\n * @param attributeString - Comma-separated string of attribute names\n * @returns Array of valid attribute names, excluding 'id' and 'class'\n */\nexport var parseAttributesToMask = function (attributeString) {\n return attributeString\n ? attributeString\n .split(',')\n .map(function (attr) { return attr.trim(); })\n .filter(function (attr) { return attr.length > 0 && attr !== 'id' && attr !== 'class'; }) // Prevent 'id' and 'class' from being redacted as they're critical for element identification\n : [];\n};\nexport var extractPrefixedAttributes = function (attrs, prefix) {\n return Object.entries(attrs).reduce(function (attributes, _a) {\n var _b = __read(_a, 2), attributeName = _b[0], attributeValue = _b[1];\n if (attributeName.startsWith(prefix)) {\n var attributeKey = attributeName.replace(prefix, '');\n if (attributeKey) {\n attributes[attributeKey] = attributeValue || '';\n }\n }\n return attributes;\n }, {});\n};\nexport var isEmpty = function (value) {\n return (value === undefined ||\n value === null ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0));\n};\nexport var removeEmptyProperties = function (properties) {\n return Object.keys(properties).reduce(function (filteredProperties, key) {\n var value = properties[key];\n if (!isEmpty(value)) {\n filteredProperties[key] = value;\n }\n return filteredProperties;\n }, {});\n};\nexport var querySelectUniqueElements = function (root, selectors) {\n if (root && 'querySelectorAll' in root && typeof root.querySelectorAll === 'function') {\n var elementSet = selectors.reduce(function (elements, selector) {\n if (selector) {\n var selectedElements = Array.from(root.querySelectorAll(selector));\n selectedElements.forEach(function (element) {\n elements.add(element);\n });\n }\n return elements;\n }, new Set());\n return Array.from(elementSet);\n }\n return [];\n};\n// Similar as element.closest, but works with multiple selectors\nexport var getClosestElement = function (element, selectors) {\n if (!element) {\n return null;\n }\n /* istanbul ignore next */\n if (selectors.some(function (selector) { var _a; return (_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector); })) {\n return element;\n }\n /* istanbul ignore next */\n return getClosestElement(element === null || element === void 0 ? void 0 : element.parentElement, selectors);\n};\nexport var asyncLoadScript = function (url) {\n return new Promise(function (resolve, reject) {\n var _a;\n try {\n var scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.src = url;\n scriptElement.addEventListener('load', function () {\n resolve({ status: true });\n }, { once: true });\n scriptElement.addEventListener('error', function () {\n reject({\n status: false,\n message: \"Failed to load the script \".concat(url),\n });\n });\n /* istanbul ignore next */\n (_a = document.head) === null || _a === void 0 ? void 0 : _a.appendChild(scriptElement);\n }\n catch (error) {\n /* istanbul ignore next */\n reject(error);\n }\n });\n};\nexport function generateUniqueId() {\n return \"\".concat(Date.now(), \"-\").concat(Math.random().toString(36).substr(2, 9));\n}\nexport var filterOutNonTrackableEvents = function (event) {\n // Filter out changeEvent events with no target\n // This could happen when change events are triggered programmatically\n if (event.event.target === null || !event.closestTrackedAncestor) {\n return false;\n }\n return true;\n};\n// Type predicate\nexport function isElementBasedEvent(event) {\n return event.type === 'click' || event.type === 'change';\n}\n//# sourceMappingURL=helpers.js.map","import { __values } from \"tslib\";\nimport { isNonSensitiveElement } from './helpers';\nimport { DATA_AMP_MASK_ATTRIBUTES } from './constants';\nimport * as constants from './constants';\nimport { MASKED_TEXT_VALUE, TEXT_MASK_ATTRIBUTE } from '@amplitude/analytics-core';\nvar BLOCKED_ATTRIBUTES = new Set([\n // Already captured elsewhere in the hierarchy object\n 'id',\n 'class',\n // non-useful and potentially large attribute\n 'style',\n // sensitive as prefilled form data may populate this attribute\n 'value',\n // DOM events\n 'onclick',\n 'onchange',\n 'oninput',\n 'onblur',\n 'onsubmit',\n 'onfocus',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n // React specific\n 'data-reactid',\n 'data-react-checksum',\n 'data-reactroot',\n // Amplitude specific - used for redaction but should not be included in getElementProperties\n DATA_AMP_MASK_ATTRIBUTES,\n TEXT_MASK_ATTRIBUTE,\n]);\nvar SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST = ['type'];\nvar SVG_TAGS = ['svg', 'path', 'g'];\nvar HIGHLY_SENSITIVE_INPUT_TYPES = ['password', 'hidden'];\nexport var MAX_HIERARCHY_LENGTH = 1024;\nexport function getElementProperties(element, userMaskedAttributeNames) {\n var e_1, _a;\n var _b, _c, _d, _e;\n if (element === null) {\n return null;\n }\n var tagName = String(element.tagName).toLowerCase();\n var properties = {\n tag: tagName,\n };\n var siblings = Array.from((_c = (_b = element.parentElement) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : []);\n if (siblings.length) {\n properties.index = siblings.indexOf(element);\n properties.indexOfType = siblings.filter(function (el) { return el.tagName === element.tagName; }).indexOf(element);\n }\n var prevSiblingTag = (_e = (_d = element.previousElementSibling) === null || _d === void 0 ? void 0 : _d.tagName) === null || _e === void 0 ? void 0 : _e.toLowerCase();\n if (prevSiblingTag) {\n properties.prevSib = String(prevSiblingTag);\n }\n var id = element.getAttribute('id');\n if (id) {\n properties.id = String(id);\n }\n var classes = Array.from(element.classList);\n if (classes.length) {\n properties.classes = classes;\n }\n var attributes = {};\n var attributesArray = Array.from(element.attributes);\n var filteredAttributes = attributesArray.filter(function (attr) { return !BLOCKED_ATTRIBUTES.has(attr.name); });\n var isSensitiveElement = !isNonSensitiveElement(element);\n // if input is hidden or password or for SVGs, skip attribute collection entirely\n if (!HIGHLY_SENSITIVE_INPUT_TYPES.includes(String(element.getAttribute('type'))) && !SVG_TAGS.includes(tagName)) {\n try {\n for (var filteredAttributes_1 = __values(filteredAttributes), filteredAttributes_1_1 = filteredAttributes_1.next(); !filteredAttributes_1_1.done; filteredAttributes_1_1 = filteredAttributes_1.next()) {\n var attr = filteredAttributes_1_1.value;\n // If sensitive element, only allow certain attributes\n if (isSensitiveElement && !SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST.includes(attr.name)) {\n continue;\n }\n if (userMaskedAttributeNames.has(attr.name)) {\n attributes[attr.name] = MASKED_TEXT_VALUE;\n continue;\n }\n // Finally cast attribute value to string and limit attribute value length\n attributes[attr.name] = String(attr.value).substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (filteredAttributes_1_1 && !filteredAttributes_1_1.done && (_a = filteredAttributes_1.return)) _a.call(filteredAttributes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n if (Object.keys(attributes).length) {\n properties.attrs = attributes;\n }\n return properties;\n}\nexport function getAncestors(targetEl) {\n var ancestors = [];\n if (!targetEl) {\n return ancestors;\n }\n // Add self to the list of ancestors\n ancestors.push(targetEl);\n var current = targetEl.parentElement;\n while (current && current.tagName !== 'HTML') {\n ancestors.push(current);\n current = current.parentElement;\n }\n return ancestors;\n}\n//# sourceMappingURL=hierarchy.js.map","// Get DataSource\n/**\n * Gets the DOM element specified by the data source configuration\n * @param dataSource - Configuration for finding the target element\n * @param contextElement - The element to start searching from\n * @returns The matching DOM element or undefined if not found\n */\nexport var getDataSource = function (dataSource, contextElement) {\n // Only process DOM_ELEMENT type data sources\n try {\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n // If scope is specified, find the closest ancestor matching the scope rather than using documentElement (html) as the scope\n var scopingElement = document.documentElement;\n if (dataSource.scope && contextElement) {\n scopingElement = contextElement.closest(dataSource.scope);\n }\n // If we have both a scope and selector, find the matching element\n if (scopingElement && dataSource.selector) {\n return scopingElement.querySelector(dataSource.selector);\n }\n // Return scopingElement if no selector was specified\n return scopingElement;\n }\n }\n catch (error) {\n return undefined;\n }\n // Return undefined for non-DOM_ELEMENT data sources\n return undefined;\n};\n// Execute actions for a condition and attach event properties to the event if needed\nexport var executeActions = function (actions, ev, dataExtractor) {\n actions.forEach(function (action) {\n // Skip if actions is string until action set is implemented\n if (typeof action === 'string') {\n return;\n }\n if (action.actionType === 'ATTACH_EVENT_PROPERTY') {\n var data = dataExtractor.extractDataFromDataSource(action.dataSource, ev.closestTrackedAncestor);\n // Attach data to event\n ev.targetElementProperties[action.destinationKey] = data;\n }\n });\n};\n//# sourceMappingURL=actions.js.map","import { __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { getDecodeURI, MASKED_TEXT_VALUE, TEXT_MASK_ATTRIBUTE, getPageTitle, replaceSensitiveString, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { removeEmptyProperties, extractPrefixedAttributes, isElementPointerCursor, getClosestElement, isElementBasedEvent, parseAttributesToMask, } from './helpers';\nimport { getAncestors, getElementProperties } from './hierarchy';\nimport { getDataSource } from './pageActions/actions';\nvar DataExtractor = /** @class */ (function () {\n function DataExtractor(options, context) {\n var e_1, _a;\n var _this = this;\n var _b;\n /**\n * Wrapper method to replace sensitive strings using the helper function\n * @param text - The text to search for sensitive data\n * @returns The text with sensitive data replaced by masked text\n */\n this.replaceSensitiveString = function (text) {\n return replaceSensitiveString(text, _this.additionalMaskTextPatterns);\n };\n // Get the DOM hierarchy of the element, starting from the target element to the root element.\n this.getHierarchy = function (element) {\n var e_2, _a;\n var _b, _c;\n var startTime = performance.now();\n var hierarchy = [];\n if (!element) {\n return [];\n }\n // Get list of ancestors including itself and get properties at each level in the hierarchy\n var ancestors = getAncestors(element);\n // Build attributes to mask map\n var elementToAttributesToMaskMap = new Map();\n for (var i = ancestors.length - 1; i >= 0; i--) {\n var node = ancestors[i];\n if (node) {\n var attributesToMask = parseAttributesToMask(node.getAttribute(constants.DATA_AMP_MASK_ATTRIBUTES));\n var ancestorAttributesToMask = i === ancestors.length - 1 ? [] : (_b = elementToAttributesToMaskMap.get(ancestors[i + 1])) !== null && _b !== void 0 ? _b : new Set();\n var combinedAttributesToMask = new Set(__spreadArray(__spreadArray([], __read(ancestorAttributesToMask), false), __read(attributesToMask), false));\n elementToAttributesToMaskMap.set(node, combinedAttributesToMask);\n }\n }\n hierarchy = ancestors.map(function (el) { var _a; return getElementProperties(el, (_a = elementToAttributesToMaskMap.get(el)) !== null && _a !== void 0 ? _a : new Set()); });\n var _loop_1 = function (hierarchyNode) {\n if (hierarchyNode === null || hierarchyNode === void 0 ? void 0 : hierarchyNode.attrs) {\n Object.entries(hierarchyNode.attrs).forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n if (hierarchyNode.attrs) {\n hierarchyNode.attrs[key] = _this.replaceSensitiveString(value);\n }\n });\n }\n };\n try {\n // Search for and mask any sensitive attribute values\n for (var hierarchy_1 = __values(hierarchy), hierarchy_1_1 = hierarchy_1.next(); !hierarchy_1_1.done; hierarchy_1_1 = hierarchy_1.next()) {\n var hierarchyNode = hierarchy_1_1.value;\n _loop_1(hierarchyNode);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (hierarchy_1_1 && !hierarchy_1_1.done && (_a = hierarchy_1.return)) _a.call(hierarchy_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n var endTime = performance.now();\n (_c = _this.diagnosticsClient) === null || _c === void 0 ? void 0 : _c.recordHistogram('autocapturePlugin.getHierarchy', endTime - startTime);\n return hierarchy;\n };\n this.getNearestLabel = function (element) {\n var parent = element.parentElement;\n if (!parent) {\n return '';\n }\n var labelElement;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n }\n catch (_a) {\n /* istanbul ignore next */\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n return _this.getText(labelElement);\n }\n return _this.getNearestLabel(parent);\n };\n // Returns the Amplitude event properties for the given element.\n this.getEventProperties = function (actionType, element, dataAttributePrefix) {\n var _a;\n var _b, _c, _d;\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n /* istanbul ignore next */\n var rect = typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n var hierarchy = _this.getHierarchy(element);\n var currentElementAttributes = (_d = hierarchy[0]) === null || _d === void 0 ? void 0 : _d.attrs;\n var nearestLabel = _this.getNearestLabel(element);\n var attributes = extractPrefixedAttributes(currentElementAttributes !== null && currentElementAttributes !== void 0 ? currentElementAttributes : {}, dataAttributePrefix);\n /* istanbul ignore next */\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY] = hierarchy,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = _this.getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT] = rect.left == null ? null : Math.round(rect.left),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP] = rect.top == null ? null : Math.round(rect.top),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES] = attributes,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL] = nearestLabel,\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = getDecodeURI(window.location.href.split('?')[0]),\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE] = getPageTitle(_this.replaceSensitiveString),\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT] = window.innerHeight,\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH] = window.innerWidth,\n _a);\n // id is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '';\n // class is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.getAttribute('class');\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL] = currentElementAttributes === null || currentElementAttributes === void 0 ? void 0 : currentElementAttributes['aria-label'];\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n var href = element.href.substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = _this.replaceSensitiveString(href); // we don't use hierarchy here because we don't want href value to be changed\n }\n return removeEmptyProperties(properties);\n };\n this.addAdditionalEventProperties = function (event, type, selectorAllowlist, dataAttributePrefix, \n // capture the event if the cursor is a \"pointer\" when this element is clicked on\n // reason: a \"pointer\" cursor indicates that an element should be interactable\n // regardless of the element's tag name\n isCapturingCursorPointer) {\n if (isCapturingCursorPointer === void 0) { isCapturingCursorPointer = false; }\n var baseEvent = {\n event: event,\n timestamp: Date.now(),\n type: type,\n };\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n if (isCapturingCursorPointer) {\n var isCursorPointer = isElementPointerCursor(baseEvent.event.target, baseEvent.type);\n if (isCursorPointer) {\n baseEvent.closestTrackedAncestor = baseEvent.event.target;\n baseEvent.targetElementProperties = _this.getEventProperties(baseEvent.type, baseEvent.closestTrackedAncestor, dataAttributePrefix);\n return baseEvent;\n }\n }\n // Retrieve additional event properties from the target element\n var closestTrackedAncestor = getClosestElement(baseEvent.event.target, selectorAllowlist);\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = _this.getEventProperties(baseEvent.type, closestTrackedAncestor, dataAttributePrefix);\n }\n return baseEvent;\n }\n return baseEvent;\n };\n this.extractDataFromDataSource = function (dataSource, contextElement) {\n // Extract from DOM Element\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n var sourceElement = getDataSource(dataSource, contextElement);\n if (!sourceElement) {\n return undefined;\n }\n if (dataSource.elementExtractType === 'TEXT') {\n return _this.getText(sourceElement);\n }\n else if (dataSource.elementExtractType === 'ATTRIBUTE' && dataSource.attribute) {\n return sourceElement.getAttribute(dataSource.attribute);\n }\n return undefined;\n }\n // TODO: Extract from other source types\n return undefined;\n };\n this.getText = function (element) {\n // Check if element or any parent has data-amp-mask attribute\n var hasMaskAttribute = element.closest(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"]\")) !== null;\n if (hasMaskAttribute) {\n return MASKED_TEXT_VALUE;\n }\n var output = '';\n if (!element.querySelector(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"], [contenteditable]\"))) {\n output = element.innerText || '';\n }\n else {\n var clonedTree = element.cloneNode(true);\n // replace all elements with TEXT_MASK_ATTRIBUTE attribute and contenteditable with the text MASKED_TEXT_VALUE\n clonedTree.querySelectorAll(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"], [contenteditable]\")).forEach(function (node) {\n node.innerText = MASKED_TEXT_VALUE;\n });\n output = clonedTree.innerText || '';\n }\n return _this.replaceSensitiveString(output.substring(0, 255)).replace(/\\s+/g, ' ').trim();\n };\n // Returns the element properties for the given element in Visual Labeling.\n this.getEventTagProps = function (element) {\n var _a;\n var _b, _c;\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = _this.getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = window.location.href.split('?')[0],\n _a);\n return removeEmptyProperties(properties);\n };\n this.diagnosticsClient = context === null || context === void 0 ? void 0 : context.diagnosticsClient;\n var rawPatterns = (_b = options.maskTextRegex) !== null && _b !== void 0 ? _b : [];\n var compiled = [];\n try {\n for (var rawPatterns_1 = __values(rawPatterns), rawPatterns_1_1 = rawPatterns_1.next(); !rawPatterns_1_1.done; rawPatterns_1_1 = rawPatterns_1.next()) {\n var entry = rawPatterns_1_1.value;\n if (compiled.length >= constants.MAX_MASK_TEXT_PATTERNS) {\n break;\n }\n if (entry instanceof RegExp) {\n compiled.push(entry);\n }\n else if ('pattern' in entry && typeof entry.pattern === 'string') {\n try {\n compiled.push(new RegExp(entry.pattern, 'i'));\n }\n catch (_c) {\n // ignore invalid pattern strings\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (rawPatterns_1_1 && !rawPatterns_1_1.done && (_a = rawPatterns_1.return)) _a.call(rawPatterns_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.additionalMaskTextPatterns = compiled;\n }\n return DataExtractor;\n}());\nexport { DataExtractor };\n//# sourceMappingURL=data-extractor.js.map","/* istanbul ignore file */\n/* eslint-disable no-restricted-globals */\nimport { AMPLITUDE_ORIGIN, AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL, AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS, } from '../constants';\nimport { asyncLoadScript, generateUniqueId } from '../helpers';\nimport { VERSION } from '../version';\nimport { DataExtractor } from '../data-extractor';\n// TODO: use MessageChannel instead of window.postMessage\nvar WindowMessenger = /** @class */ (function () {\n function WindowMessenger(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.origin, origin = _c === void 0 ? AMPLITUDE_ORIGIN : _c;\n var _this = this;\n this.endpoint = AMPLITUDE_ORIGIN;\n this.requestCallbacks = {};\n this.onSelect = function (data) {\n _this.notify({ action: 'element-selected', data: data });\n };\n this.onTrack = function (type, properties) {\n if (type === 'selector-mode-changed') {\n _this.notify({ action: 'track-selector-mode-changed', data: properties });\n }\n else if (type === 'selector-moved') {\n _this.notify({ action: 'track-selector-moved', data: properties });\n }\n };\n this.endpoint = origin;\n }\n WindowMessenger.prototype.notify = function (message) {\n var _a, _b, _c, _d;\n (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Message sent: ', JSON.stringify(message));\n (_d = (_c = window.opener) === null || _c === void 0 ? void 0 : _c.postMessage) === null || _d === void 0 ? void 0 : _d.call(_c, message, this.endpoint);\n };\n // Send an async request to the parent window\n WindowMessenger.prototype.sendRequest = function (action, args, options) {\n var _this = this;\n if (options === void 0) { options = { timeout: 15000 }; }\n // Create Request ID\n var id = generateUniqueId();\n var request = {\n id: id,\n action: action,\n args: args,\n };\n // Create a Promise that will be resolved when the response is received\n var promise = new Promise(function (resolve, reject) {\n _this.requestCallbacks[id] = { resolve: resolve, reject: reject };\n // Send the request\n _this.notify(request);\n // Handle request timeouts\n if ((options === null || options === void 0 ? void 0 : options.timeout) > 0) {\n setTimeout(function () {\n reject(new Error(\"\".concat(action, \" timed out (id: \").concat(id, \")\")));\n delete _this.requestCallbacks[id];\n }, options.timeout);\n }\n });\n return promise;\n };\n // Handle messages from the parent window\n WindowMessenger.prototype.handleResponse = function (response) {\n var _a;\n if (!this.requestCallbacks[response.id]) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(\"No callback found for request id: \".concat(response.id));\n return;\n }\n this.requestCallbacks[response.id].resolve(response.responseData);\n delete this.requestCallbacks[response.id];\n };\n WindowMessenger.prototype.setup = function (_a) {\n var _this = this;\n var _b = _a === void 0 ? { dataExtractor: new DataExtractor({}) } : _a, logger = _b.logger, endpoint = _b.endpoint, isElementSelectable = _b.isElementSelectable, cssSelectorAllowlist = _b.cssSelectorAllowlist, actionClickAllowlist = _b.actionClickAllowlist, dataExtractor = _b.dataExtractor;\n this.logger = logger;\n // If endpoint is customized, don't override it.\n if (endpoint && this.endpoint === AMPLITUDE_ORIGIN) {\n this.endpoint = endpoint;\n }\n var amplitudeVisualTaggingSelectorInstance = null;\n // Attach Event Listener to listen for messages from the parent window\n window.addEventListener('message', function (event) {\n var _a, _b, _c, _d, _e;\n (_b = (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Message received: ', JSON.stringify(event));\n // Only accept messages from the specified origin\n if (_this.endpoint !== event.origin) {\n return;\n }\n var eventData = event === null || event === void 0 ? void 0 : event.data;\n var action = eventData === null || eventData === void 0 ? void 0 : eventData.action;\n // Ignore messages without action\n if (!action) {\n return;\n }\n // If id exists, handle responses to previous requests\n if ('id' in eventData) {\n (_d = (_c = _this.logger) === null || _c === void 0 ? void 0 : _c.debug) === null || _d === void 0 ? void 0 : _d.call(_c, 'Received Response to previous request: ', JSON.stringify(event));\n _this.handleResponse(eventData);\n // If action exists, handle the action using existing handlers\n }\n else {\n if (action === 'ping') {\n _this.notify({ action: 'pong' });\n }\n else if (action === 'initialize-visual-tagging-selector') {\n var actionData_1 = eventData === null || eventData === void 0 ? void 0 : eventData.data;\n asyncLoadScript(AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL)\n .then(function () {\n var _a;\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance = (_a = window === null || window === void 0 ? void 0 : window.amplitudeVisualTaggingSelector) === null || _a === void 0 ? void 0 : _a.call(window, {\n getEventTagProps: dataExtractor.getEventTagProps,\n isElementSelectable: function (element) {\n if (isElementSelectable) {\n return isElementSelectable((actionData_1 === null || actionData_1 === void 0 ? void 0 : actionData_1.actionType) || 'click', element);\n }\n return true;\n },\n onTrack: _this.onTrack,\n onSelect: _this.onSelect,\n visualHighlightClass: AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n messenger: _this,\n cssSelectorAllowlist: cssSelectorAllowlist,\n actionClickAllowlist: actionClickAllowlist,\n extractDataFromDataSource: dataExtractor.extractDataFromDataSource,\n dataExtractor: dataExtractor,\n diagnostics: {\n autocapture: {\n version: VERSION,\n },\n },\n });\n _this.notify({ action: 'selector-loaded' });\n })\n .catch(function () {\n var _a;\n (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.warn('Failed to initialize visual tagging selector');\n });\n }\n else if (action === 'close-visual-tagging-selector') {\n // eslint-disable-next-line\n (_e = amplitudeVisualTaggingSelectorInstance === null || amplitudeVisualTaggingSelectorInstance === void 0 ? void 0 : amplitudeVisualTaggingSelectorInstance.close) === null || _e === void 0 ? void 0 : _e.call(amplitudeVisualTaggingSelectorInstance);\n }\n }\n });\n // Notify the parent window that the page has loaded\n this.notify({ action: 'page-loaded' });\n };\n return WindowMessenger;\n}());\nexport { WindowMessenger };\n//# sourceMappingURL=messenger.js.map","import { Observable, getGlobalScope } from '@amplitude/analytics-core';\nexport var createMutationObservable = function () {\n return new Observable(function (observer) {\n var mutationObserver = new MutationObserver(function (mutations) {\n observer.next(mutations);\n });\n if (document.body) {\n mutationObserver.observe(document.body, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n });\n }\n return function () { return mutationObserver.disconnect(); };\n });\n};\n/**\n * Creates an observable that tracks click events on the document.\n * @param clickType - The type of click event to track (click or pointerdown)\n */\nexport var createClickObservable = function (clickType) {\n if (clickType === void 0) { clickType = 'click'; }\n return new Observable(function (observer) {\n var _a;\n var handler = function (event) {\n observer.next(event);\n };\n /* istanbul ignore next */\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.addEventListener(clickType, handler, { capture: true });\n return function () {\n var _a;\n /* istanbul ignore next */\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.removeEventListener(clickType, handler, { capture: true });\n };\n });\n};\n//# sourceMappingURL=observables.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_ACTION_CLICK_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, getGlobalScope, multicast, } from '@amplitude/analytics-core';\nimport { VERSION } from './version';\nimport * as constants from './constants';\nimport { createShouldTrackEvent, } from './helpers';\nimport { WindowMessenger } from './libs/messenger';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { createLabeledEventToTriggerMap, createTriggerEvaluator, groupLabeledEventIdsByEventType, } from './pageActions/triggers';\nimport { DataExtractor } from './data-extractor';\nimport { Observable } from '@amplitude/analytics-core';\nexport var ObservablesEnum;\n(function (ObservablesEnum) {\n ObservablesEnum[\"ClickObservable\"] = \"clickObservable\";\n ObservablesEnum[\"ChangeObservable\"] = \"changeObservable\";\n // ErrorObservable = 'errorObservable',\n ObservablesEnum[\"NavigateObservable\"] = \"navigateObservable\";\n ObservablesEnum[\"MutationObservable\"] = \"mutationObservable\";\n})(ObservablesEnum || (ObservablesEnum = {}));\nexport var autocapturePlugin = function (options, context) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if (options === void 0) { options = {}; }\n // Set the plugin version tag\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n context === null || context === void 0 ? void 0 : context.diagnosticsClient.setTag('plugin.autocapture.version', VERSION);\n var _j = options.dataAttributePrefix, dataAttributePrefix = _j === void 0 ? DEFAULT_DATA_ATTRIBUTE_PREFIX : _j, _k = options.visualTaggingOptions, visualTaggingOptions = _k === void 0 ? {\n enabled: true,\n messenger: new WindowMessenger(),\n } : _k;\n options.cssSelectorAllowlist = (_a = options.cssSelectorAllowlist) !== null && _a !== void 0 ? _a : DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = (_b = options.actionClickAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = (_c = options.debounceTime) !== null && _c !== void 0 ? _c : 0;\n options.pageUrlExcludelist = (_d = options.pageUrlExcludelist) === null || _d === void 0 ? void 0 : _d.reduce(function (acc, excludePattern) {\n if (typeof excludePattern === 'string') {\n acc.push(excludePattern);\n }\n if (excludePattern instanceof RegExp) {\n acc.push(excludePattern);\n }\n if (typeof excludePattern === 'object' && excludePattern !== null && 'pattern' in excludePattern) {\n try {\n acc.push(new RegExp(excludePattern.pattern));\n }\n catch (regexError) {\n console.warn(\"Invalid regex pattern: \".concat(excludePattern.pattern), regexError);\n return acc;\n }\n }\n return acc;\n }, []);\n var name = constants.PLUGIN_NAME;\n var type = 'enrichment';\n var subscriptions = [];\n // Create data extractor based on options\n var dataExtractor = new DataExtractor(options, context);\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var clickObservable = multicast(createClickObservable().map(function (click) {\n return dataExtractor.addAdditionalEventProperties(click, 'click', options.cssSelectorAllowlist, dataAttributePrefix);\n }));\n var changeObservable = multicast(new Observable(function (observer) {\n var _a;\n var handler = function (changeEvent) {\n var enrichedChangeEvent = dataExtractor.addAdditionalEventProperties(changeEvent, 'change', options.cssSelectorAllowlist, dataAttributePrefix);\n observer.next(enrichedChangeEvent);\n };\n /* istanbul ignore next */\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.addEventListener('change', handler, { capture: true });\n /* istanbul ignore next */\n return function () { var _a; return (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.removeEventListener('change', handler); };\n }));\n // Create Observable from unhandled errors\n // const errorObservable = fromEvent<ErrorEvent>(window, 'error').pipe(\n // map((error) => addAdditionalEventProperties(error, 'error')),\n // );\n // Create observable for URL changes\n var navigateObservable;\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = multicast(new Observable(function (observer) {\n var handler = function (navigateEvent) {\n var enrichedNavigateEvent = dataExtractor.addAdditionalEventProperties(navigateEvent, 'navigate', options.cssSelectorAllowlist, dataAttributePrefix);\n observer.next(enrichedNavigateEvent);\n };\n window.navigation.addEventListener('navigate', handler);\n return function () {\n window.navigation.removeEventListener('navigate', handler);\n };\n }));\n }\n var mutationObservable = multicast(createMutationObservable().map(function (mutation) {\n return dataExtractor.addAdditionalEventProperties(mutation, 'mutation', options.cssSelectorAllowlist, dataAttributePrefix);\n }));\n return _a = {},\n _a[ObservablesEnum.ChangeObservable] = changeObservable,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n _a[ObservablesEnum.ClickObservable] = clickObservable,\n _a[ObservablesEnum.MutationObservable] = mutationObservable,\n _a[ObservablesEnum.NavigateObservable] = navigateObservable,\n _a;\n };\n // Group labeled events by event type (eg. click, change)\n var groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((_f = (_e = options.pageActions) === null || _e === void 0 ? void 0 : _e.labeledEvents) !== null && _f !== void 0 ? _f : {}));\n var labeledEventToTriggerMap = createLabeledEventToTriggerMap((_h = (_g = options.pageActions) === null || _g === void 0 ? void 0 : _g.triggers) !== null && _h !== void 0 ? _h : []);\n // Evaluate triggers for the given event by running the actions associated with the matching triggers\n var evaluateTriggers = createTriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options);\n // Function to recalculate internal variables when remote config is updated\n var recomputePageActionsData = function (remotePageActions) {\n var _a, _b;\n if (remotePageActions) {\n // Merge remote config with local options\n options.pageActions = __assign(__assign({}, options.pageActions), remotePageActions);\n // Recalculate internal variables\n groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((_a = options.pageActions.labeledEvents) !== null && _a !== void 0 ? _a : {}));\n labeledEventToTriggerMap = createLabeledEventToTriggerMap((_b = options.pageActions.triggers) !== null && _b !== void 0 ? _b : []);\n // Update evaluateTriggers function\n evaluateTriggers.update(groupedLabeledEvents, labeledEventToTriggerMap, options);\n }\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist;\n var _a, _b;\n return __generator(this, function (_c) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n // Fetch remote config for pageActions in a non-blocking manner\n if (config.fetchRemoteConfig) {\n if (!config.remoteConfigClient) {\n // TODO(xinyi): Diagnostics.recordEvent\n config.loggerProvider.debug('Remote config client is not provided, skipping remote config fetch');\n }\n else {\n config.remoteConfigClient.subscribe('analyticsSDK.pageActions', 'all', function (remoteConfig) {\n recomputePageActionsData(remoteConfig);\n });\n }\n }\n shouldTrackEvent = createShouldTrackEvent(options, options.cssSelectorAllowlist);\n shouldTrackActionClick = createShouldTrackEvent(options, options.actionClickAllowlist);\n allObservables = createObservables();\n clickTrackingSubscription = trackClicks({\n allObservables: allObservables,\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(clickTrackingSubscription);\n changeSubscription = trackChange({\n allObservables: allObservables,\n getEventProperties: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return dataExtractor.getEventProperties.apply(dataExtractor, __spreadArray(__spreadArray([], __read(args), false), [dataAttributePrefix], false));\n },\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(changeSubscription);\n actionClickSubscription = trackActionClick({\n allObservables: allObservables,\n options: options,\n getEventProperties: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return dataExtractor.getEventProperties.apply(dataExtractor, __spreadArray(__spreadArray([], __read(args), false), [dataAttributePrefix], false));\n },\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n if (actionClickSubscription) {\n subscriptions.push(actionClickSubscription);\n }\n /* istanbul ignore next */\n (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log(\"\".concat(name, \" has been successfully added.\"));\n // Setup visual tagging selector\n if (window.opener && visualTaggingOptions.enabled) {\n allowlist = options.cssSelectorAllowlist;\n actionClickAllowlist = options.actionClickAllowlist;\n /* istanbul ignore next */\n (_b = visualTaggingOptions.messenger) === null || _b === void 0 ? void 0 : _b.setup(__assign(__assign({ dataExtractor: dataExtractor, logger: config === null || config === void 0 ? void 0 : config.loggerProvider }, ((config === null || config === void 0 ? void 0 : config.serverZone) && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] })), { isElementSelectable: createShouldTrackEvent(options, __spreadArray(__spreadArray([], __read(allowlist), false), __read(actionClickAllowlist), false)), cssSelectorAllowlist: allowlist, actionClickAllowlist: actionClickAllowlist }));\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptions_1, subscriptions_1_1, subscription;\n var e_1, _a;\n return __generator(this, function (_b) {\n try {\n for (subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n subscription = subscriptions_1_1.value;\n subscription.unsubscribe();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=autocapture-plugin.js.map","import { __values } from \"tslib\";\nimport { matchEventToFilter } from './matchEventToFilter';\nimport { executeActions } from './actions';\nvar eventTypeToBrowserEventMap = {\n '[Amplitude] Element Clicked': 'click',\n '[Amplitude] Element Changed': 'change',\n};\n// groups labeled events by event type\n// skips any labeled events with malformed definitions or unexpected event_type\nexport var groupLabeledEventIdsByEventType = function (labeledEvents) {\n var e_1, _a, e_2, _b;\n // Initialize all event types with empty sets\n var groupedLabeledEvents = Object.values(eventTypeToBrowserEventMap).reduce(function (acc, browserEvent) {\n acc[browserEvent] = new Set();\n return acc;\n }, {});\n // If there are no labeled events, return the initialized groupedLabeledEvents\n if (!labeledEvents) {\n return groupedLabeledEvents;\n }\n try {\n // Group labeled events by event type\n for (var labeledEvents_1 = __values(labeledEvents), labeledEvents_1_1 = labeledEvents_1.next(); !labeledEvents_1_1.done; labeledEvents_1_1 = labeledEvents_1.next()) {\n var le = labeledEvents_1_1.value;\n try {\n try {\n for (var _c = (e_2 = void 0, __values(le.definition)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var def = _d.value;\n var browserEvent = eventTypeToBrowserEventMap[def.event_type];\n if (browserEvent) {\n groupedLabeledEvents[browserEvent].add(le.id);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n catch (e) {\n // Skip this labeled event if there is an error\n console.warn('Skipping Labeled Event due to malformed definition', le === null || le === void 0 ? void 0 : le.id, e);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (labeledEvents_1_1 && !labeledEvents_1_1.done && (_a = labeledEvents_1.return)) _a.call(labeledEvents_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return groupedLabeledEvents;\n};\n// TODO: add tests\nexport var createLabeledEventToTriggerMap = function (triggers) {\n var e_3, _a, e_4, _b;\n var labeledEventToTriggerMap = new Map();\n try {\n for (var triggers_1 = __values(triggers), triggers_1_1 = triggers_1.next(); !triggers_1_1.done; triggers_1_1 = triggers_1.next()) {\n var trigger = triggers_1_1.value;\n try {\n for (var _c = (e_4 = void 0, __values(trigger.conditions)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var condition = _d.value;\n if (condition.type === 'LABELED_EVENT') {\n var eventId = condition.match.eventId;\n // Get existing triggers for this event ID or initialize empty array\n var existingTriggers = labeledEventToTriggerMap.get(eventId);\n if (!existingTriggers) {\n existingTriggers = [];\n labeledEventToTriggerMap.set(eventId, existingTriggers);\n }\n // Add current trigger to the list of triggers for this event ID\n existingTriggers.push(trigger);\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (triggers_1_1 && !triggers_1_1.done && (_a = triggers_1.return)) _a.call(triggers_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return labeledEventToTriggerMap;\n};\n/**\n * Matches an event to labeled events based on the event's properties.\n * The logic matches exactly what is supported by the query backend.\n * TODO: later pre-filter the labeled events based on URL first\n *\n * @param event - The event to match against labeled events\n * @param labeledEvents - Array of labeled events to match against\n * @returns Array of matching labeled events\n */\nexport var matchEventToLabeledEvents = function (event, labeledEvents) {\n return labeledEvents.filter(function (le) {\n return le.definition.some(function (def) {\n return (eventTypeToBrowserEventMap[def.event_type] === event.type &&\n def.filters.every(function (filter) { return matchEventToFilter(event, filter); }));\n });\n });\n};\nexport var matchLabeledEventsToTriggers = function (labeledEvents, leToTriggerMap) {\n var e_5, _a, e_6, _b;\n var matchingTriggers = new Set();\n try {\n for (var labeledEvents_2 = __values(labeledEvents), labeledEvents_2_1 = labeledEvents_2.next(); !labeledEvents_2_1.done; labeledEvents_2_1 = labeledEvents_2.next()) {\n var le = labeledEvents_2_1.value;\n var triggers = leToTriggerMap.get(le.id);\n if (triggers) {\n try {\n for (var triggers_2 = (e_6 = void 0, __values(triggers)), triggers_2_1 = triggers_2.next(); !triggers_2_1.done; triggers_2_1 = triggers_2.next()) {\n var trigger = triggers_2_1.value;\n matchingTriggers.add(trigger);\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (triggers_2_1 && !triggers_2_1.done && (_b = triggers_2.return)) _b.call(triggers_2);\n }\n finally { if (e_6) throw e_6.error; }\n }\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (labeledEvents_2_1 && !labeledEvents_2_1.done && (_a = labeledEvents_2.return)) _a.call(labeledEvents_2);\n }\n finally { if (e_5) throw e_5.error; }\n }\n return Array.from(matchingTriggers);\n};\nvar TriggerEvaluator = /** @class */ (function () {\n function TriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options) {\n this.groupedLabeledEvents = groupedLabeledEvents;\n this.labeledEventToTriggerMap = labeledEventToTriggerMap;\n this.dataExtractor = dataExtractor;\n this.options = options;\n }\n TriggerEvaluator.prototype.evaluate = function (event) {\n var e_7, _a;\n // If there is no pageActions, return the event as is\n var pageActions = this.options.pageActions;\n if (!pageActions) {\n return event;\n }\n // Find matching labeled events\n var matchingLabeledEvents = matchEventToLabeledEvents(event, Array.from(this.groupedLabeledEvents[event.type]).map(function (id) { return pageActions.labeledEvents[id]; }));\n // Find matching conditions\n var matchingTriggers = matchLabeledEventsToTriggers(matchingLabeledEvents, this.labeledEventToTriggerMap);\n try {\n for (var matchingTriggers_1 = __values(matchingTriggers), matchingTriggers_1_1 = matchingTriggers_1.next(); !matchingTriggers_1_1.done; matchingTriggers_1_1 = matchingTriggers_1.next()) {\n var trigger = matchingTriggers_1_1.value;\n executeActions(trigger.actions, event, this.dataExtractor);\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (matchingTriggers_1_1 && !matchingTriggers_1_1.done && (_a = matchingTriggers_1.return)) _a.call(matchingTriggers_1);\n }\n finally { if (e_7) throw e_7.error; }\n }\n return event;\n };\n TriggerEvaluator.prototype.update = function (groupedLabeledEvents, labeledEventToTriggerMap, options) {\n this.groupedLabeledEvents = groupedLabeledEvents;\n this.labeledEventToTriggerMap = labeledEventToTriggerMap;\n this.options = options;\n };\n return TriggerEvaluator;\n}());\nexport { TriggerEvaluator };\nexport var createTriggerEvaluator = function (groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options) {\n return new TriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options);\n};\n//# sourceMappingURL=triggers.js.map","/**\n * Matches an event to a single filter\n * @param event - The event to match\n * @param filter - The filter to match against\n * @returns boolean indicating if the event matches the filter\n */\nexport var matchEventToFilter = function (event, filter) {\n try {\n if (filter.subprop_key === '[Amplitude] Element Text') {\n // TODO: add support for the other operators\n return (filter.subprop_op === 'is' &&\n filter.subprop_value.includes(event.targetElementProperties['[Amplitude] Element Text']));\n }\n else if (filter.subprop_key === '[Amplitude] Element Hierarchy') {\n // Check if the element ancestory matches the CSS selector, always check this last since it is the most expensive\n return (filter.subprop_op === 'autotrack css match' &&\n !!event.closestTrackedAncestor.closest(filter.subprop_value.toString()));\n }\n }\n catch (error) {\n console.error('Error matching event to filter', error);\n return false;\n }\n return false;\n};\n//# sourceMappingURL=matchEventToFilter.js.map","import { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nexport function trackClicks(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;\n var clickObservable = allObservables.clickObservable;\n var clickObservableFiltered = clickObservable\n .filter(filterOutNonTrackableEvents)\n .filter(function (click) {\n // Only track clicks on elements that should be tracked,\n return shouldTrackEvent('click', click.closestTrackedAncestor);\n })\n .map(function (click) { return evaluateTriggers(click); });\n var clicks = clickObservableFiltered;\n return clicks.subscribe(function (click) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, click.targetElementProperties);\n });\n}\n//# sourceMappingURL=track-click.js.map","import { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants';\nexport function trackChange(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;\n var changeObservable = allObservables.changeObservable;\n var filteredChangeObservable = changeObservable\n .filter(filterOutNonTrackableEvents)\n .filter(function (changeEvent) {\n // Only track change on elements that should be tracked,\n return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);\n })\n .map(function (changeEvent) { return evaluateTriggers(changeEvent); });\n return filteredChangeObservable.subscribe(function (changeEvent) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-change.js.map","import { merge, asyncMap } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, getClosestElement, } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nexport function trackActionClick(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, options = _a.options, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, shouldTrackActionClick = _a.shouldTrackActionClick;\n var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;\n var filteredClickObservable = clickObservable\n .filter(function (click) {\n return !shouldTrackEvent('click', click.closestTrackedAncestor);\n })\n .map(function (click) {\n // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist\n var closestActionClickEl = getClosestElement(click.event.target, options.actionClickAllowlist);\n click.closestTrackedAncestor = closestActionClickEl;\n // overwrite the targetElementProperties with the properties of the closestActionClickEl\n if (click.closestTrackedAncestor !== null) {\n click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);\n }\n return click;\n })\n .filter(filterOutNonTrackableEvents)\n .filter(function (clickEvent) {\n // Only track change on elements that should be tracked\n return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);\n });\n var mutationOrNavigate = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable;\n var clickMutationNavigateObservable = merge(filteredClickObservable, mutationOrNavigate);\n var actionClickTimer = null;\n var lastClickEvent = null;\n var actionClickObservable = asyncMap(clickMutationNavigateObservable, function (event) {\n // clear any previous timer\n if (actionClickTimer) {\n clearTimeout(actionClickTimer);\n actionClickTimer = null;\n }\n if (event.type === 'click') {\n // mark the 'last click event'\n lastClickEvent = event;\n // set a timer to clear last click event if no mutation event between now and 500ms\n actionClickTimer = setTimeout(function () {\n actionClickTimer = null;\n lastClickEvent = null;\n }, 500);\n return Promise.resolve(null);\n }\n else {\n // if mutation/navigation + last click event, then it's an action click\n if (lastClickEvent) {\n var event_1 = lastClickEvent;\n lastClickEvent = null;\n return Promise.resolve(event_1);\n }\n }\n return Promise.resolve(null);\n });\n return actionClickObservable.subscribe(function (actionClick) {\n if (!actionClick)\n return;\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', actionClick.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-action-click.js.map","import { __assign } from \"tslib\";\nimport { merge, asyncMap } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT } from '../constants';\nvar DEAD_CLICK_TIMEOUT = 3000; // 3 seconds to wait for an activity to happen\nvar CHANGE_EVENTS = ['mutation', 'navigate'];\nexport function trackDeadClick(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackDeadClick = _a.shouldTrackDeadClick;\n var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;\n var filteredClickObservable = clickObservable.filter(function (click) {\n return (filterOutNonTrackableEvents(click) &&\n shouldTrackDeadClick('click', click.closestTrackedAncestor) &&\n click.event.target instanceof Element &&\n click.event.target.closest('a[target=\"_blank\"]') === null);\n });\n /* istanbul ignore next */\n var changeObservables = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable;\n var clicksAndChangeObservable = merge(filteredClickObservable, changeObservables);\n var deadClickTimer = null;\n var deadClickObservable = asyncMap(clicksAndChangeObservable, function (event) {\n if (deadClickTimer && CHANGE_EVENTS.includes(event.type)) {\n // a mutation or navigation means it's not a dead click, so clear the timer\n clearTimeout(deadClickTimer);\n deadClickTimer = null;\n return Promise.resolve(null);\n }\n else if (event.type === 'click') {\n // if a dead click is already on-deck, return null.\n // this throttles dead clicks events so no more than one dead click event\n // is tracked per every DEAD_CLICK_TIMEOUT ms.\n if (deadClickTimer) {\n return Promise.resolve(null);\n }\n return new Promise(function (resolve) {\n deadClickTimer = setTimeout(function () {\n resolve(event);\n deadClickTimer = null;\n }, DEAD_CLICK_TIMEOUT);\n });\n }\n // unreachable code, but needed to satisfy the type checker\n return Promise.resolve(null);\n });\n return deadClickObservable.subscribe(function (actionClick) {\n if (!actionClick)\n return;\n var deadClickEvent = {\n '[Amplitude] X': actionClick.event.clientX,\n '[Amplitude] Y': actionClick.event.clientY,\n };\n amplitude.track(AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT, __assign(__assign({}, getEventProperties('click', actionClick.closestTrackedAncestor)), deadClickEvent), { time: actionClick.timestamp });\n });\n}\n//# sourceMappingURL=track-dead-click.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { asyncMap, DEFAULT_RAGE_CLICK_THRESHOLD, DEFAULT_RAGE_CLICK_WINDOW_MS, DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD, } from '@amplitude/analytics-core';\nimport { AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT } from '../constants';\nvar RAGE_CLICK_THRESHOLD = DEFAULT_RAGE_CLICK_THRESHOLD;\nvar RAGE_CLICK_WINDOW_MS = DEFAULT_RAGE_CLICK_WINDOW_MS;\nvar RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD = DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD;\nfunction addCoordinates(regionBox, click) {\n var _a, _b, _c, _d;\n var _e = click.event, clientX = _e.clientX, clientY = _e.clientY;\n regionBox.yMin = Math.min((_a = regionBox.yMin) !== null && _a !== void 0 ? _a : clientY, clientY);\n regionBox.yMax = Math.max((_b = regionBox.yMax) !== null && _b !== void 0 ? _b : clientY, clientY);\n regionBox.xMin = Math.min((_c = regionBox.xMin) !== null && _c !== void 0 ? _c : clientX, clientX);\n regionBox.xMax = Math.max((_d = regionBox.xMax) !== null && _d !== void 0 ? _d : clientX, clientX);\n regionBox.isOutOfBounds =\n regionBox.yMax - regionBox.yMin > RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD ||\n regionBox.xMax - regionBox.xMin > RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD;\n}\nfunction getRageClickAnalyticsEvent(clickWindow) {\n /* istanbul ignore if */\n if (clickWindow.length === 0) {\n return null;\n }\n var firstClick = clickWindow[0];\n var lastClick = clickWindow[clickWindow.length - 1];\n var rageClickEvent = __assign({ '[Amplitude] Begin Time': new Date(firstClick.timestamp).toISOString(), '[Amplitude] End Time': new Date(lastClick.timestamp).toISOString(), '[Amplitude] Duration': lastClick.timestamp - firstClick.timestamp, '[Amplitude] Clicks': clickWindow.map(function (click) { return ({\n X: click.event.clientX,\n Y: click.event.clientY,\n Time: click.timestamp,\n }); }), '[Amplitude] Click Count': clickWindow.length }, firstClick.targetElementProperties);\n return { rageClickEvent: rageClickEvent, time: firstClick.timestamp };\n}\nfunction isClickOutsideRageClickWindow(clickWindow, click) {\n var firstIndex = Math.max(0, clickWindow.length - RAGE_CLICK_THRESHOLD + 1);\n var firstClick = clickWindow[firstIndex];\n return click.timestamp - firstClick.timestamp >= RAGE_CLICK_WINDOW_MS;\n}\nfunction isNewElement(clickWindow, click) {\n return (clickWindow.length > 0 &&\n clickWindow[clickWindow.length - 1].closestTrackedAncestor !== click.closestTrackedAncestor);\n}\nexport function trackRageClicks(_a) {\n var _this = this;\n var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackRageClick = _a.shouldTrackRageClick;\n var clickObservable = allObservables.clickObservable;\n // Keep track of all clicks within the sliding window\n var clickWindow = [];\n // Keep track of the region box for all clicks, to determine when a rage click is out of bounds\n var clickBoundingBox = {};\n var pendingRageClick = null;\n // helper function to reset the click window and region box\n function resetClickWindow(click) {\n clickWindow = [];\n clickBoundingBox = {};\n if (click) {\n addCoordinates(clickBoundingBox, click);\n clickWindow.push(click);\n }\n }\n var rageClickObservable = asyncMap(clickObservable.filter(function (click) { return shouldTrackRageClick('click', click.closestTrackedAncestor); }), function (click) { return __awaiter(_this, void 0, void 0, function () {\n var resolutionValue;\n return __generator(this, function (_a) {\n // add this click's coordinates to the bounding box\n addCoordinates(clickBoundingBox, click);\n resolutionValue = null;\n // if current click is:\n // 1. first click in the window\n // 2. on a new element\n // 3. outside the rage click time window\n // 4. out of bounds\n // then start a new click window\n if (clickWindow.length === 0 ||\n isNewElement(clickWindow, click) ||\n isClickOutsideRageClickWindow(clickWindow, click) ||\n clickBoundingBox.isOutOfBounds) {\n // if there was a previous Rage Click Event on deck, then send it\n if (pendingRageClick) {\n resolutionValue = getRageClickAnalyticsEvent(clickWindow);\n }\n resetClickWindow(click);\n }\n else {\n clickWindow.push(click);\n }\n // if there was a previous Rage Click Event on deck, then resolve it\n if (pendingRageClick) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n clearTimeout(pendingRageClick.timerId);\n pendingRageClick.resolve(resolutionValue);\n pendingRageClick = null;\n }\n // if we have enough clicks to be a rage click, set a timout to trigger the rage\n // click event after the time threshold is reached.\n // This will be cancelled if a new click is tracked within the time threshold.\n if (clickWindow.length >= RAGE_CLICK_THRESHOLD) {\n return [2 /*return*/, new Promise(function (resolve) {\n pendingRageClick = {\n resolve: resolve,\n timerId: setTimeout(function () {\n resolve(getRageClickAnalyticsEvent(clickWindow));\n }, RAGE_CLICK_WINDOW_MS),\n };\n })];\n }\n return [2 /*return*/, null];\n });\n }); });\n return rageClickObservable.subscribe(function (data) {\n /* istanbul ignore if */\n if (data === null) {\n return;\n }\n amplitude.track(AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, data.rageClickEvent, { time: data.time });\n });\n}\n//# sourceMappingURL=track-rage-click.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_RAGE_CLICK_ALLOWLIST, DEFAULT_DEAD_CLICK_ALLOWLIST, multicast, Observable, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { createShouldTrackEvent } from './helpers';\nimport { trackDeadClick } from './autocapture/track-dead-click';\nimport { trackRageClicks } from './autocapture/track-rage-click';\nimport { ObservablesEnum } from './autocapture-plugin';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { DataExtractor } from './data-extractor';\nexport var frustrationPlugin = function (options) {\n var _a, _b, _c, _d, _e;\n if (options === void 0) { options = {}; }\n var name = constants.FRUSTRATION_PLUGIN_NAME;\n var type = 'enrichment';\n var subscriptions = [];\n var rageCssSelectors = (_b = (_a = options.rageClicks) === null || _a === void 0 ? void 0 : _a.cssSelectorAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_RAGE_CLICK_ALLOWLIST;\n var deadCssSelectors = (_d = (_c = options.deadClicks) === null || _c === void 0 ? void 0 : _c.cssSelectorAllowlist) !== null && _d !== void 0 ? _d : DEFAULT_DEAD_CLICK_ALLOWLIST;\n var dataAttributePrefix = (_e = options.dataAttributePrefix) !== null && _e !== void 0 ? _e : DEFAULT_DATA_ATTRIBUTE_PREFIX;\n var dataExtractor = new DataExtractor(options);\n // combine the two selector lists to determine which clicked elements should be filtered\n var combinedCssSelectors = __spreadArray([], __read(new Set(__spreadArray(__spreadArray([], __read(rageCssSelectors), false), __read(deadCssSelectors), false))), false);\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var clickObservable = multicast(createClickObservable('pointerdown').map(function (click) {\n return dataExtractor.addAdditionalEventProperties(click, 'click', combinedCssSelectors, dataAttributePrefix, true);\n }));\n var enrichedMutationObservable = multicast(createMutationObservable().map(function (mutation) {\n return dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix);\n }));\n var enrichedNavigateObservable;\n if (window.navigation) {\n var navigateObservable = new Observable(function (observer) {\n var handler = function (event) {\n observer.next(__assign(__assign({}, event), { type: 'navigate' }));\n };\n window.navigation.addEventListener('navigate', handler);\n return function () {\n window.navigation.removeEventListener('navigate', handler);\n };\n });\n enrichedNavigateObservable = multicast(navigateObservable.map(function (navigate) {\n return dataExtractor.addAdditionalEventProperties(navigate, 'navigate', combinedCssSelectors, dataAttributePrefix);\n }));\n }\n return _a = {},\n _a[ObservablesEnum.ClickObservable] = clickObservable,\n _a[ObservablesEnum.MutationObservable] = enrichedMutationObservable,\n _a[ObservablesEnum.NavigateObservable] = enrichedNavigateObservable,\n _a;\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var shouldTrackRageClick, shouldTrackDeadClick, allObservables, rageClickSubscription, deadClickSubscription;\n var _a;\n return __generator(this, function (_b) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);\n shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);\n allObservables = createObservables();\n rageClickSubscription = trackRageClicks({\n allObservables: allObservables,\n amplitude: amplitude,\n shouldTrackRageClick: shouldTrackRageClick,\n });\n subscriptions.push(rageClickSubscription);\n deadClickSubscription = trackDeadClick({\n amplitude: amplitude,\n allObservables: allObservables,\n getEventProperties: function (actionType, element) {\n return dataExtractor.getEventProperties(actionType, element, dataAttributePrefix);\n },\n shouldTrackDeadClick: shouldTrackDeadClick,\n });\n subscriptions.push(deadClickSubscription);\n /* istanbul ignore next */\n (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log(\"\".concat(name, \" has been successfully added.\"));\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptions_1, subscriptions_1_1, subscription;\n var e_1, _a;\n return __generator(this, function (_b) {\n try {\n for (subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n subscription = subscriptions_1_1.value;\n subscription.unsubscribe();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=frustration-plugin.js.map","import { __awaiter, __generator } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { networkObserver, NetworkEventCallback, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { Observable } from '@amplitude/analytics-core';\nimport { trackNetworkEvents } from './track-network-event';\nexport var ObservablesEnum;\n(function (ObservablesEnum) {\n ObservablesEnum[\"NetworkObservable\"] = \"networkObservable\";\n})(ObservablesEnum || (ObservablesEnum = {}));\nvar subscription;\nexport var networkCapturePlugin = function (options) {\n if (options === void 0) { options = {}; }\n var name = constants.PLUGIN_NAME;\n var type = 'enrichment';\n var logger;\n var addAdditionalEventProperties = function (event, type) {\n var baseEvent = {\n event: event,\n timestamp: Date.now(),\n type: type,\n };\n return baseEvent;\n };\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var networkObservable = new Observable(function (observer) {\n var callback = new NetworkEventCallback(function (event) {\n var eventWithProperties = addAdditionalEventProperties(event, 'network');\n observer.next(eventWithProperties);\n });\n networkObserver.subscribe(callback, logger);\n return function () {\n networkObserver.unsubscribe(callback);\n };\n });\n return _a = {},\n _a[ObservablesEnum.NetworkObservable] = networkObservable,\n _a;\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var allObservables;\n return __generator(this, function (_a) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n allObservables = createObservables();\n /* istanbul ignore next */\n logger = config === null || config === void 0 ? void 0 : config.loggerProvider;\n subscription = trackNetworkEvents({\n allObservables: allObservables,\n networkTrackingOptions: options,\n amplitude: amplitude,\n loggerProvider: logger,\n });\n /* istanbul ignore next */\n logger === null || logger === void 0 ? void 0 : logger.log(\"\".concat(name, \" has been successfully added.\"));\n return [2 /*return*/];\n });\n }); };\n /* istanbul ignore next */\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n subscription.unsubscribe();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=network-capture-plugin.js.map","export var PLUGIN_NAME = '@amplitude/plugin-network-capture-browser';\nexport var AMPLITUDE_NETWORK_REQUEST_EVENT = '[Amplitude] Network Request';\n// TODO: when @experimental is removed from responseHeaders and requestHeaders,\n// remove this constant or set it to false\nexport var IS_HEADER_CAPTURE_EXPERIMENTAL = true;\n//# sourceMappingURL=constants.js.map","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getGlobalScope, isUrlMatchAllowlist, SAFE_HEADERS, } from '@amplitude/analytics-core';\nimport { AMPLITUDE_NETWORK_REQUEST_EVENT, IS_HEADER_CAPTURE_EXPERIMENTAL } from './constants';\nvar DEFAULT_STATUS_CODE_RANGE = '500-599';\nfunction wildcardMatch(str, pattern) {\n // Escape all regex special characters except for *\n var escapedPattern = pattern.replace(/[-[\\]{}()+?.,\\\\^$|#\\s]/g, '\\\\$&');\n // Replace * with .*\n var regexPattern = '^' + escapedPattern.replace(/\\*/g, '.*') + '$';\n var regex = new RegExp(regexPattern);\n return regex.test(str);\n}\nfunction isStatusCodeInRange(statusCode, range) {\n var e_1, _a;\n var ranges = range.split(',');\n try {\n for (var ranges_1 = __values(ranges), ranges_1_1 = ranges_1.next(); !ranges_1_1.done; ranges_1_1 = ranges_1.next()) {\n var r = ranges_1_1.value;\n var _b = __read(r.split('-').map(Number), 2), start = _b[0], end = _b[1];\n if (statusCode === start && end === undefined) {\n return true;\n }\n if (statusCode >= start && statusCode <= end) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ranges_1_1 && !ranges_1_1.done && (_a = ranges_1.return)) _a.call(ranges_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction isCaptureRuleMatch(rule, hostname, status, url, method) {\n // check if the host is in the allowed hosts\n if (rule.hosts && !rule.hosts.find(function (host) { return wildcardMatch(hostname, host); })) {\n return;\n }\n // check if the URL is in the allowed URL patterns\n if (url && rule.urls && !isUrlMatchAllowlist(url, rule.urls)) {\n return;\n }\n // check if the method is in the allowed methods\n if (method &&\n rule.methods &&\n !rule.methods.find(function (allowedMethod) { return method.toLowerCase() === allowedMethod.toLowerCase() || allowedMethod === '*'; })) {\n return;\n }\n // check if the status code is in the allowed range\n if (status || status === 0) {\n var statusCodeRange = rule.statusCodeRange || DEFAULT_STATUS_CODE_RANGE;\n if (!isStatusCodeInRange(status, statusCodeRange)) {\n return false;\n }\n }\n return true;\n}\nfunction parseUrl(url) {\n var _a;\n if (!url) {\n return;\n }\n try {\n /* istanbul ignore next */\n var currentHref = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.location.href;\n var urlObj = new URL(url, currentHref);\n var query = urlObj.searchParams.toString();\n var fragment = urlObj.hash.replace('#', '');\n var href = urlObj.href;\n var host = urlObj.host;\n urlObj.hash = '';\n urlObj.search = '';\n var hrefWithoutQueryOrHash = urlObj.href;\n return { query: query, fragment: fragment, href: href, hrefWithoutQueryOrHash: hrefWithoutQueryOrHash, host: host };\n }\n catch (e) {\n /* istanbul ignore next */\n return;\n }\n}\nfunction isAmplitudeNetworkRequestEvent(host, requestWrapper) {\n if (host.includes('amplitude.com')) {\n try {\n var body = requestWrapper.body;\n if (typeof body !== 'string') {\n return false;\n }\n var bodyObj = JSON.parse(body);\n var events = bodyObj.events;\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n if (events.find(function (event) { return event.event_type === AMPLITUDE_NETWORK_REQUEST_EVENT; })) {\n return true;\n }\n }\n catch (e) {\n // do nothing\n }\n }\n return false;\n}\n/**\n * Takes a user provided header capture rule and returns a\n * HeaderCaptureRule object that sets proper default values.\n *\n * @param rule - The header capture rule to parse.\n * @returns A HeaderCaptureRule object.\n */\nexport function parseHeaderCaptureRule(rule) {\n if (typeof rule !== 'object' || rule === null) {\n // if rule is truthy or undefined, return SAFE_HEADERS\n if (rule) {\n return __spreadArray([], __read(SAFE_HEADERS), false);\n }\n else if (rule === undefined) {\n /* istanbul ignore next */\n var res = IS_HEADER_CAPTURE_EXPERIMENTAL ? undefined : __spreadArray([], __read(SAFE_HEADERS), false);\n return res;\n }\n return;\n }\n // if the rule is defined but empty, return undefined\n if (rule.length === 0) {\n return;\n }\n return rule;\n}\nfunction isBodyCaptureRuleEmpty(rule) {\n var _a, _b;\n /* istanbul ignore next */\n return !((_a = rule === null || rule === void 0 ? void 0 : rule.allowlist) === null || _a === void 0 ? void 0 : _a.length) && !((_b = rule === null || rule === void 0 ? void 0 : rule.blocklist) === null || _b === void 0 ? void 0 : _b.length);\n}\nexport function shouldTrackNetworkEvent(networkEvent, options) {\n var _a;\n if (options === void 0) { options = {}; }\n var urlObj = parseUrl(networkEvent.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a probably impossible case that would only happen if the URL is malformed\n /* istanbul ignore next */\n return false;\n }\n var host = urlObj.host;\n // false if is amplitude request and not configured to track amplitude requests\n if (options.ignoreAmplitudeRequests !== false &&\n (wildcardMatch(host, '*.amplitude.com') || wildcardMatch(host, 'amplitude.com'))) {\n return false;\n }\n // false if the host is in the ignore list\n if ((_a = options.ignoreHosts) === null || _a === void 0 ? void 0 : _a.find(function (ignoreHost) { return wildcardMatch(host, ignoreHost); })) {\n return false;\n }\n // false if the status code is not 500-599 and there are no captureRules\n if (!options.captureRules &&\n networkEvent.status !== undefined &&\n !isStatusCodeInRange(networkEvent.status, DEFAULT_STATUS_CODE_RANGE)) {\n return false;\n }\n if (options.captureRules) {\n // find the first capture rule, in reverse-order,\n // that is a match (true) or a miss (false)\n var isMatch_1;\n __spreadArray([], __read(options.captureRules), false).reverse().find(function (rule) {\n isMatch_1 = isCaptureRuleMatch(rule, host, networkEvent.status, networkEvent.url, networkEvent.method);\n if (isMatch_1) {\n var responseHeadersRule = parseHeaderCaptureRule(rule.responseHeaders);\n if (networkEvent.responseWrapper && responseHeadersRule) {\n var responseHeaders = networkEvent.responseWrapper.headers(responseHeadersRule);\n if (responseHeaders) {\n networkEvent.responseHeaders = responseHeaders;\n }\n }\n // if requestHeaders rule is specified, enrich the event with the request headers\n var requestHeadersRule = parseHeaderCaptureRule(rule.requestHeaders);\n if (networkEvent.requestWrapper && requestHeadersRule) {\n var requestHeaders = networkEvent.requestWrapper.headers(requestHeadersRule);\n if (requestHeaders) {\n networkEvent.requestHeaders = requestHeaders;\n }\n }\n // if responseBody rule is specified, enrich the event with the response body\n if (networkEvent.responseWrapper && rule.responseBody && !isBodyCaptureRuleEmpty(rule.responseBody)) {\n networkEvent.responseBodyJson = networkEvent.responseWrapper.json(rule.responseBody.allowlist, rule.responseBody.blocklist);\n }\n // if requestBody rule is specified, enrich the event with the request body\n if (networkEvent.requestWrapper && rule.requestBody && !isBodyCaptureRuleEmpty(rule.requestBody)) {\n networkEvent.requestBodyJson = networkEvent.requestWrapper.json(rule.requestBody.allowlist, rule.requestBody.blocklist);\n }\n }\n return isMatch_1 !== undefined;\n });\n // if we found a miss (false) or no match (undefined),\n // then do not track the event\n if (!isMatch_1) {\n return false;\n }\n }\n // skip Amplitude network requests to \"[Amplitude] Network Request\" to avoid infinite loop\n if (networkEvent.requestWrapper && isAmplitudeNetworkRequestEvent(host, networkEvent.requestWrapper)) {\n return false;\n }\n return true;\n}\nexport function logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, requestBody, responseBody;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(request.requestBodyJson || request.responseBodyJson)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all([request.requestBodyJson, request.responseBodyJson])];\n case 1:\n _a = __read.apply(void 0, [_b.sent(), 2]), requestBody = _a[0], responseBody = _a[1];\n if (requestBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Request Body'] = JSON.stringify(requestBody);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('Failed to stringify request body', e);\n }\n }\n if (responseBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Response Body'] = JSON.stringify(responseBody);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('Failed to stringify response body');\n }\n }\n _b.label = 2;\n case 2:\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_NETWORK_REQUEST_EVENT, networkAnalyticsEvent);\n return [2 /*return*/];\n }\n });\n });\n}\nexport function trackNetworkEvents(_a) {\n var allObservables = _a.allObservables, networkTrackingOptions = _a.networkTrackingOptions, amplitude = _a.amplitude, loggerProvider = _a.loggerProvider;\n var networkObservable = allObservables.networkObservable;\n var filteredNetworkObservable = networkObservable.filter(function (event) {\n // Only track network events that should be tracked\n return shouldTrackNetworkEvent(event.event, networkTrackingOptions);\n });\n return filteredNetworkObservable.subscribe(function (networkEvent) {\n var _a;\n var _b, _c;\n var request = networkEvent.event;\n // convert to NetworkAnalyticsEvent\n var urlObj = parseUrl(request.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a very unlikely case, because URL() shouldn't throw an exception\n // when the URL is a valid URL\n /* istanbul ignore next */\n return;\n }\n var responseBodySize = (_b = request.responseWrapper) === null || _b === void 0 ? void 0 : _b.bodySize;\n /* istanbul ignore next */\n var requestBodySize = (_c = request.requestWrapper) === null || _c === void 0 ? void 0 : _c.bodySize;\n var networkAnalyticsEvent = (_a = {},\n _a['[Amplitude] URL'] = urlObj.hrefWithoutQueryOrHash,\n _a['[Amplitude] URL Query'] = urlObj.query,\n _a['[Amplitude] URL Fragment'] = urlObj.fragment,\n _a['[Amplitude] Request Method'] = request.method,\n _a['[Amplitude] Status Code'] = request.status,\n _a['[Amplitude] Start Time'] = request.startTime,\n _a['[Amplitude] Completion Time'] = request.endTime,\n _a['[Amplitude] Duration'] = request.duration,\n _a['[Amplitude] Request Body Size'] = requestBodySize,\n _a['[Amplitude] Response Body Size'] = responseBodySize,\n _a['[Amplitude] Request Type'] = request.type,\n _a['[Amplitude] Request Headers'] = request.requestHeaders,\n _a['[Amplitude] Response Headers'] = request.responseHeaders,\n _a);\n // fire-and-forget promise that tracks the event\n void logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider);\n });\n}\n//# sourceMappingURL=track-network-event.js.map","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let o,s;return r=>{t.value>=0&&(r||i)&&(s=t.value-(o??0),(s||void 0===o)&&(o=t.value,t.delta=s,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},o=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},s=()=>{const e=o();return e?.activationStart??0},r=(t,n=-1)=>{const i=o();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||s()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,m=e=>{\"hidden\"===document.visibilityState&&u>-1&&(u=\"visibilitychange\"===e.type?e.timeStamp:0,p())},g=()=>{addEventListener(\"visibilitychange\",m,!0),addEventListener(\"prerenderingchange\",m,!0)},p=()=>{removeEventListener(\"visibilitychange\",m,!0),removeEventListener(\"prerenderingchange\",m,!0)},v=()=>{if(u<0){const e=s(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??l(),g(),t((()=>{setTimeout((()=>{u=l(),g()}))}))}return{get firstHiddenTime(){return u}}},y=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},b=[1800,3e3],P=(e,o={})=>{y((()=>{const c=v();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-s(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,b,o.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,b,o.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},T=[.1,.25],E=(e,o={})=>{P(f((()=>{let s,c=r(\"CLS\",0);const f=a(o,d),u=e=>{for(const t of e)f.h(t);f.i>c.value&&(c.value=f.i,c.entries=f.o,s())},l=h(\"layout-shift\",u);l&&(s=n(e,c,T,o.reportAllChanges),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(u(l.takeRecords()),s(!0))})),t((()=>{f.i=0,c=r(\"CLS\",0),s=n(e,c,T,o.reportAllChanges),i((()=>s()))})),setTimeout(s))})))};let _=0,L=1/0,M=0;const C=e=>{for(const t of e)t.interactionId&&(L=Math.min(L,t.interactionId),M=Math.max(M,t.interactionId),_=M?(M-L)/7+1:0)};let I;const w=()=>I?_:performance.interactionCount??0,F=()=>{\"interactionCount\"in performance||I||(I=h(\"event\",C,{type:\"event\",buffered:!0,durationThreshold:0}))};let k=0;class A{u=[];l=new Map;m;p;v(){k=w(),this.u.length=0,this.l.clear()}P(){const e=Math.min(this.u.length-1,Math.floor((w()-k)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.T){if(n?e.duration>n.T?(n.entries=[e],n.T=e.duration):e.duration===n.T&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],T:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.T-e.T)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.p?.(n)}}}const B=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(t(e=f(e)),document.addEventListener(\"visibilitychange\",e,{once:!0}))},N=[200,500],S=(e,i={})=>{globalThis.PerformanceEventTiming&&\"interactionId\"in PerformanceEventTiming.prototype&&y((()=>{F();let o,s=r(\"INP\");const c=a(i,A),d=e=>{B((()=>{for(const t of e)c.h(t);const t=c.P();t&&t.T!==s.value&&(s.value=t.T,s.entries=t.entries,o())}))},f=h(\"event\",d,{durationThreshold:i.durationThreshold??40});o=n(e,s,N,i.reportAllChanges),f&&(f.observe({type:\"first-input\",buffered:!0}),document.addEventListener(\"visibilitychange\",(()=>{\"hidden\"===document.visibilityState&&(d(f.takeRecords()),o(!0))})),t((()=>{c.v(),s=r(\"INP\"),o=n(e,s,N,i.reportAllChanges)})))}))};class q{m;h(e){this.m?.(e)}}const x=[2500,4e3],O=(e,o={})=>{y((()=>{const c=v();let d,u=r(\"LCP\");const l=a(o,q),m=e=>{o.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-s(),0),u.entries=[t],d())},g=h(\"largest-contentful-paint\",m);if(g){d=n(e,u,x,o.reportAllChanges);const s=f((()=>{m(g.takeRecords()),g.disconnect(),d(!0)}));for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,(()=>B(s)),{capture:!0,once:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,x,o.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},$=[800,1800],D=e=>{document.prerendering?y((()=>D(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>D(e)),!0):setTimeout(e)},H=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,$,i.reportAllChanges);D((()=>{const d=o();d&&(c.value=Math.max(d.responseStart-s(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,$,i.reportAllChanges),a(!0)})))}))};export{T as CLSThresholds,b as FCPThresholds,N as INPThresholds,x as LCPThresholds,$ as TTFBThresholds,E as onCLS,P as onFCP,S as onINP,O as onLCP,H as onTTFB};\n","import { __awaiter, __generator } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { getGlobalScope, getDecodeURI, } from '@amplitude/analytics-core';\nimport { PLUGIN_NAME, WEB_VITALS_EVENT_NAME } from './constants';\nimport { onLCP, onINP, onCLS, onFCP, onTTFB } from 'web-vitals';\nfunction getMetricStartTime(metric) {\n var _a;\n /* istanbul ignore next */\n var startTime = ((_a = metric.entries[0]) === null || _a === void 0 ? void 0 : _a.startTime) || 0;\n return performance.timeOrigin + startTime;\n}\nfunction processMetric(metric) {\n return {\n value: metric.value,\n rating: metric.rating,\n delta: metric.delta,\n navigationType: metric.navigationType,\n id: metric.id,\n timestamp: Math.floor(getMetricStartTime(metric)),\n navigationStart: Math.floor(performance.timeOrigin),\n };\n}\nexport var webVitalsPlugin = function () {\n var visibilityListener = null;\n var globalScope = getGlobalScope();\n var doc = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document;\n var location = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location;\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var locationHref, webVitalsPayload;\n return __generator(this, function (_a) {\n if (doc === undefined) {\n return [2 /*return*/];\n }\n locationHref = getDecodeURI(/* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.href) || '', config.loggerProvider);\n webVitalsPayload = {\n '[Amplitude] Page Domain': /* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.hostname) || '',\n '[Amplitude] Page Location': locationHref,\n '[Amplitude] Page Path': getDecodeURI(/* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.pathname) || '', config.loggerProvider),\n '[Amplitude] Page Title': /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n '[Amplitude] Page URL': getDecodeURI(locationHref.split('?')[0], config.loggerProvider),\n };\n onLCP(function (metric) {\n webVitalsPayload['[Amplitude] LCP'] = processMetric(metric);\n });\n onFCP(function (metric) {\n webVitalsPayload['[Amplitude] FCP'] = processMetric(metric);\n });\n onINP(function (metric) {\n webVitalsPayload['[Amplitude] INP'] = processMetric(metric);\n });\n onCLS(function (metric) {\n webVitalsPayload['[Amplitude] CLS'] = processMetric(metric);\n });\n onTTFB(function (metric) {\n webVitalsPayload['[Amplitude] TTFB'] = processMetric(metric);\n });\n visibilityListener = function () {\n if (doc.visibilityState === 'hidden' && visibilityListener) {\n amplitude.track(WEB_VITALS_EVENT_NAME, webVitalsPayload);\n doc.removeEventListener('visibilitychange', visibilityListener);\n visibilityListener = null;\n }\n };\n doc.addEventListener('visibilitychange', visibilityListener);\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (visibilityListener) {\n /* istanbul ignore next */\n doc === null || doc === void 0 ? void 0 : doc.removeEventListener('visibilitychange', visibilityListener);\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: PLUGIN_NAME,\n type: 'enrichment',\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=web-vitals-plugin.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { BrowserStorage, getDecodeURI, getGlobalScope, getPageTitle, replaceSensitiveString, SpecialEventType, } from '@amplitude/analytics-core';\nexport var CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';\nexport var PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';\nexport var URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';\nvar PreviousPageType;\n(function (PreviousPageType) {\n PreviousPageType[\"Direct\"] = \"direct\";\n PreviousPageType[\"Internal\"] = \"internal\";\n PreviousPageType[\"External\"] = \"external\";\n})(PreviousPageType || (PreviousPageType = {}));\nexport var EXCLUDED_DEFAULT_EVENT_TYPES = new Set([\n SpecialEventType.IDENTIFY,\n SpecialEventType.GROUP_IDENTIFY,\n SpecialEventType.REVENUE,\n]);\nexport var isPageUrlEnrichmentEnabled = function (option) {\n if (typeof option === 'boolean') {\n return option;\n }\n if (typeof option === 'object' && option !== null && 'pageUrlEnrichment' in option) {\n return Boolean(option.pageUrlEnrichment);\n }\n return false;\n};\nexport var pageUrlEnrichmentPlugin = function (_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.internalDomains, internalDomains = _c === void 0 ? [] : _c;\n var globalScope = getGlobalScope();\n var sessionStorage = undefined;\n var isStorageEnabled = false;\n var loggerProvider = undefined;\n var isProxied = false;\n var isTracking = false;\n var getHostname = function (url) {\n var hostname;\n try {\n var decodedUrl = getDecodeURI(url, loggerProvider);\n hostname = new URL(decodedUrl).hostname;\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Could not parse URL: ', e);\n }\n return hostname;\n };\n var getPrevPageType = function (previousPage) {\n var currentDomain = (typeof location !== 'undefined' && location.hostname) || '';\n var previousPageDomain = previousPage ? getHostname(previousPage) : undefined;\n if (!previousPageDomain) {\n return PreviousPageType.Direct;\n }\n var isCurrentInternal = internalDomains.some(function (domain) { return currentDomain.indexOf(domain) !== -1; });\n var isPrevInternal = internalDomains.some(function (domain) { return previousPageDomain.indexOf(domain) !== -1; });\n if (currentDomain === previousPageDomain || (isPrevInternal && isCurrentInternal)) {\n return PreviousPageType.Internal;\n }\n return PreviousPageType.External;\n };\n var saveURLInfo = function () { return __awaiter(void 0, void 0, void 0, function () {\n var URLInfo, currentURL, storedCurrentURL, previousURL;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 3];\n return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 1:\n URLInfo = _b.sent();\n currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n storedCurrentURL = (URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[CURRENT_PAGE_STORAGE_KEY]) || '';\n previousURL = void 0;\n if (currentURL === storedCurrentURL) {\n previousURL = (URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[PREVIOUS_PAGE_STORAGE_KEY]) || '';\n }\n else if (storedCurrentURL) {\n previousURL = storedCurrentURL;\n }\n else {\n previousURL = document.referrer || '';\n }\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, (_a = {},\n _a[CURRENT_PAGE_STORAGE_KEY] = currentURL,\n _a[PREVIOUS_PAGE_STORAGE_KEY] = previousURL,\n _a))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n var saveUrlInfoWrapper = function () {\n void saveURLInfo();\n };\n var plugin = {\n name: '@amplitude/plugin-page-url-enrichment-browser',\n type: 'enrichment',\n setup: function (config, _) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-url-enrichment-browser');\n isTracking = true;\n if (!globalScope) return [3 /*break*/, 2];\n sessionStorage = new BrowserStorage(globalScope.sessionStorage);\n return [4 /*yield*/, sessionStorage.isEnabled()];\n case 1:\n isStorageEnabled = _a.sent();\n globalScope.addEventListener('popstate', saveUrlInfoWrapper);\n if (!isProxied) {\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState and replaceState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.replaceState = new Proxy(globalScope.history.replaceState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n isProxied = true;\n }\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var locationHREF, URLInfo, updatedURLInfo, previousPage;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 5];\n return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 1:\n URLInfo = _b.sent();\n if (!!(URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[CURRENT_PAGE_STORAGE_KEY])) return [3 /*break*/, 3];\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, (_a = {},\n _a[CURRENT_PAGE_STORAGE_KEY] = locationHREF,\n _a[PREVIOUS_PAGE_STORAGE_KEY] = document.referrer || '',\n _a))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 4:\n updatedURLInfo = _b.sent();\n previousPage = '';\n if (updatedURLInfo) {\n previousPage = updatedURLInfo[PREVIOUS_PAGE_STORAGE_KEY] || '';\n }\n // no need to proceed to add additional properties if the event is one of the default event types to be excluded\n if (EXCLUDED_DEFAULT_EVENT_TYPES.has(event.event_type)) {\n return [2 /*return*/, event];\n }\n event.event_properties = __assign(__assign({}, (event.event_properties || {})), { '[Amplitude] Page Domain': addIfNotExist(event, '[Amplitude] Page Domain', (typeof location !== 'undefined' && location.hostname) || ''), '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF), '[Amplitude] Page Path': addIfNotExist(event, '[Amplitude] Page Path', (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || ''), '[Amplitude] Page Title': addIfNotExist(event, '[Amplitude] Page Title', getPageTitle(replaceSensitiveString)), '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]), '[Amplitude] Previous Page Location': previousPage, '[Amplitude] Previous Page Type': getPrevPageType(previousPage) });\n _b.label = 5;\n case 5: return [2 /*return*/, event];\n }\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (globalScope) {\n globalScope.removeEventListener('popstate', saveUrlInfoWrapper);\n isTracking = false;\n }\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 2];\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, {})];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n };\n return plugin;\n};\nfunction addIfNotExist(event, key, value) {\n if (!event.event_properties) {\n event.event_properties = {};\n }\n if (event.event_properties[key] === undefined) {\n return value;\n }\n return event.event_properties[key];\n}\n//# sourceMappingURL=page-url-enrichment.js.map","export var PLUGIN_NAME = 'web-vitals-browser';\nexport var WEB_VITALS_EVENT_NAME = '[Amplitude] Web Vitals';\n//# sourceMappingURL=constants.js.map","import { createIdentifyEvent, Identify, ILogger, Campaign, BASE_CAMPAIGN } from '@amplitude/analytics-core';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n}\n\nconst domainWithoutSubdomain = (domain: string) => {\n const parts = domain.split('.');\n\n if (parts.length <= 2) {\n return domain;\n }\n\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nconst isDirectTraffic = (current: Campaign) => {\n return Object.values(current).every((value) => !value);\n};\n\nexport const isNewCampaign = (\n current: Campaign,\n previous: Campaign | undefined,\n options: Options,\n logger: ILogger,\n isNewSession = true,\n) => {\n const { referrer, referring_domain, ...currentCampaign } = current;\n const { referrer: _previous_referrer, referring_domain: prevReferringDomain, ...previousCampaign } = previous || {};\n\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(`This is not a new campaign because ${current.referring_domain} is in the exclude referrer list.`);\n return false;\n }\n\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n logger.debug('This is not a new campaign because this is a direct traffic in the same session.');\n return false;\n }\n\n const hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n const hasNewDomain =\n domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n\n const result = !previous || hasNewCampaign || hasNewDomain;\n\n if (!result) {\n logger.debug(\"This is not a new campaign because it's the same as the previous one.\");\n } else {\n logger.debug(`This is a new campaign. An $identify event will be sent.`);\n }\n\n return result;\n};\n\nexport const isExcludedReferrer = (excludeReferrers: (string | RegExp)[] = [], referringDomain = '') => {\n return excludeReferrers.some((value) =>\n value instanceof RegExp ? value.test(referringDomain) : value === referringDomain,\n );\n};\n\nexport const createCampaignEvent = (campaign: Campaign, options: Options) => {\n const campaignParameters: Campaign = {\n // This object definition allows undefined keys to be iterated on\n // in .reduce() to build indentify object\n ...BASE_CAMPAIGN,\n ...campaign,\n };\n const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n identify.setOnce(`initial_${key}`, value ?? options.initialEmptyValue ?? 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n\n return createIdentifyEvent(identifyEvent);\n};\n\nexport const getDefaultExcludedReferrers = (cookieDomain: string | undefined) => {\n let domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(`${domain.replace('.', '\\\\.')}$`)];\n }\n return [];\n};\n","import {\n BrowserConfig,\n ILogger,\n Storage,\n getStorageKey,\n isNewSession,\n Campaign,\n BASE_CAMPAIGN,\n CampaignParser,\n} from '@amplitude/analytics-core';\nimport { Options, getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\n\nexport class WebAttribution {\n options: Options;\n storage: Storage<Campaign>;\n storageKey: string;\n webExpStorageKey: string;\n previousCampaign?: Campaign;\n currentCampaign: Campaign;\n shouldTrackNewCampaign = false;\n sessionTimeout: number;\n lastEventTime?: number;\n logger: ILogger;\n\n constructor(options: Options, config: BrowserConfig) {\n this.options = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n ...options,\n };\n this.storage = config.cookieStorage as unknown as Storage<Campaign>;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.webExpStorageKey = getStorageKey(config.apiKey, 'MKTG_ORIGINAL');\n this.currentCampaign = BASE_CAMPAIGN;\n this.sessionTimeout = config.sessionTimeout;\n this.lastEventTime = config.lastEventTime;\n this.logger = config.loggerProvider;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n\n async init() {\n [this.currentCampaign, this.previousCampaign] = await this.fetchCampaign();\n const isEventInNewSession = !this.lastEventTime ? true : isNewSession(this.sessionTimeout, this.lastEventTime);\n\n if (isNewCampaign(this.currentCampaign, this.previousCampaign, this.options, this.logger, isEventInNewSession)) {\n this.shouldTrackNewCampaign = true;\n await this.storage.set(this.storageKey, this.currentCampaign);\n }\n }\n\n async fetchCampaign() {\n const originalCampaign = await this.storage.get(this.webExpStorageKey);\n if (originalCampaign) {\n await this.storage.remove(this.webExpStorageKey);\n }\n return await Promise.all([originalCampaign || new CampaignParser().parse(), this.storage.get(this.storageKey)]);\n }\n\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n generateCampaignEvent(event_id?: number) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n const campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n }\n\n shouldSetSessionIdOnNewCampaign() {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n }\n}\n","import {\n AmplitudeCore,\n Destination,\n Identify,\n returnWrapper,\n Revenue,\n UUID,\n getAnalyticsConnector,\n setConnectorDeviceId,\n setConnectorUserId,\n isNewSession,\n IdentityEventSender,\n getQueryParams,\n Event,\n EventOptions,\n IIdentify,\n IRevenue,\n TransportTypeOrOptions,\n OfflineDisabled,\n Result,\n BrowserOptions,\n BrowserConfig,\n BrowserClient,\n SpecialEventType,\n AnalyticsClient,\n IRemoteConfigClient,\n RemoteConfigClient,\n RemoteConfig,\n Source,\n DiagnosticsClient,\n createIdentifyEvent,\n} from '@amplitude/analytics-core';\nimport {\n getAttributionTrackingConfig,\n getPageViewTrackingConfig,\n getElementInteractionsConfig,\n getNetworkTrackingConfig,\n isAttributionTrackingEnabled,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n isElementInteractionsEnabled,\n isPageViewTrackingEnabled,\n isNetworkTrackingEnabled,\n isWebVitalsEnabled,\n isFrustrationInteractionsEnabled,\n getFrustrationInteractionsConfig,\n isPageUrlEnrichmentEnabled,\n} from './default-tracking';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\nimport { networkConnectivityCheckerPlugin } from './plugins/network-connectivity-checker';\nimport { updateBrowserConfigWithRemoteConfig } from './config/joined-config';\nimport { autocapturePlugin, frustrationPlugin } from '@amplitude/plugin-autocapture-browser';\nimport { plugin as networkCapturePlugin } from '@amplitude/plugin-network-capture-browser';\nimport { webVitalsPlugin } from '@amplitude/plugin-web-vitals-browser';\nimport { WebAttribution } from './attribution/web-attribution';\nimport { LIBPREFIX } from './lib-prefix';\nimport { VERSION } from './version';\nimport { pageUrlEnrichmentPlugin } from '@amplitude/plugin-page-url-enrichment-browser';\n\n/**\n * Exported for `@amplitude/unified` or integration with blade plugins.\n * If you only use `@amplitude/analytics-browser`, use `amplitude.init()` or `amplitude.createInstance()` instead.\n */\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient, AnalyticsClient {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n previousSessionDeviceId: string | undefined;\n previousSessionUserId: string | undefined;\n webAttribution: WebAttribution | undefined;\n userProperties: { [key: string]: any } | undefined;\n\n // Backdoor to set diagnostics sample rate\n // by calling amplitude._setDiagnosticsSampleRate(1); before amplitude.init()\n _diagnosticsSampleRate = 0;\n\n init(apiKey = '', userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions) {\n let userId: string | undefined;\n let options: BrowserOptions | undefined;\n if (arguments.length > 2) {\n userId = userIdOrOptions as string | undefined;\n options = maybeOptions;\n } else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n } else {\n userId = userIdOrOptions?.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 2: Create browser config\n // Get default browser config based on browser options\n const browserOptions = await useBrowserConfig(options.apiKey, options, this);\n\n let remoteConfigClient: IRemoteConfigClient | undefined;\n // Create remote config client and subscribe to analytics configs\n /* istanbul ignore next */\n const fetchRemoteConfig = browserOptions.remoteConfig && browserOptions.remoteConfig.fetchRemoteConfig;\n if (fetchRemoteConfig) {\n remoteConfigClient = new RemoteConfigClient(\n browserOptions.apiKey,\n browserOptions.loggerProvider,\n browserOptions.serverZone,\n /* istanbul ignore next */ browserOptions.remoteConfig?.serverUrl, // Disable coverage for this line as remoteConfig will always be set by BrowserConfig constructor\n );\n\n // Wait for initial remote config before proceeding.\n // Delivery mode is all, meaning it calls the callback with whoever (cache or remote) returns first.\n await new Promise<void>((resolve) => {\n // Disable coverage for this line because remote config client will always be defined in this case.\n // istanbul ignore next\n remoteConfigClient?.subscribe(\n 'configs.analyticsSDK.browserSDK',\n 'all',\n (remoteConfig: RemoteConfig | null, source: Source, lastFetch: Date) => {\n browserOptions.loggerProvider.debug(\n 'Remote configuration received:',\n JSON.stringify(\n {\n remoteConfig,\n source,\n lastFetch,\n },\n null,\n 2,\n ),\n );\n if (remoteConfig) {\n updateBrowserConfigWithRemoteConfig(remoteConfig, browserOptions);\n }\n // Resolve the promise on first callback (initial config)\n resolve();\n },\n );\n });\n\n await new Promise<void>((resolve) => {\n // Disable coverage for this line because remote config client will always be defined in this case.\n // istanbul ignore next\n remoteConfigClient?.subscribe(\n 'configs.diagnostics.browserSDK',\n 'all',\n (remoteConfig: RemoteConfig | null, source: Source, lastFetch: Date) => {\n browserOptions.loggerProvider.debug(\n 'Diagnostics remote configuration received:',\n JSON.stringify(\n {\n remoteConfig,\n source,\n lastFetch,\n },\n null,\n 2,\n ),\n );\n if (remoteConfig) {\n // Validate and set sampleRate (must be a valid number)\n const sampleRate = remoteConfig.sampleRate as number;\n if (typeof sampleRate === 'number' && !isNaN(sampleRate)) {\n browserOptions.diagnosticsSampleRate = sampleRate;\n }\n\n // Validate and set enabled (must be a boolean)\n const enabled = remoteConfig.enabled as boolean;\n if (typeof enabled === 'boolean') {\n browserOptions.enableDiagnostics = enabled;\n }\n }\n resolve();\n },\n );\n });\n }\n\n // Initialize diagnostics client and set library tag\n const diagnosticsClient = new DiagnosticsClient(\n browserOptions.apiKey,\n browserOptions.loggerProvider,\n browserOptions.serverZone,\n {\n enabled: browserOptions.enableDiagnostics,\n sampleRate: browserOptions.diagnosticsSampleRate,\n },\n );\n diagnosticsClient.setTag('library', `${LIBPREFIX}/${VERSION}`);\n diagnosticsClient.setTag('user_agent', navigator.userAgent);\n\n await super._init(browserOptions);\n this.logBrowserOptions(browserOptions);\n\n this.config.diagnosticsClient = diagnosticsClient;\n this.config.remoteConfigClient = remoteConfigClient;\n\n // Add web attribution plugin\n if (isAttributionTrackingEnabled(this.config.defaultTracking)) {\n const attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n this.webAttribution = new WebAttribution(attributionTrackingOptions, this.config);\n // Fetch the current campaign, check if need to track web attribution later\n await this.webAttribution.init();\n }\n\n // Step 3: Set session ID\n // Priority 1: `options.sessionId`\n // Priority 2: sessionId from url if it's Number and ampTimestamp is valid\n // Priority 3: last known sessionId from user identity storage\n // Default: `Date.now()`\n // Session ID is handled differently than device ID and user ID due to session events\n const queryParams = getQueryParams();\n\n // Check if ampTimestamp is present and valid\n const ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n const isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n\n // check if we need to set the sessionId\n const querySessionId =\n isWithinTimeLimit && !Number.isNaN(Number(queryParams.ampSessionId))\n ? Number(queryParams.ampSessionId)\n : undefined;\n this.setSessionId(options.sessionId ?? querySessionId ?? this.config.sessionId ?? Date.now());\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n if (this.config.offline !== OfflineDisabled) {\n await this.add(networkConnectivityCheckerPlugin()).promise;\n }\n await this.add(new Destination({ diagnosticsClient })).promise;\n await this.add(new Context()).promise;\n await this.add(new IdentityEventSender()).promise;\n\n // Notify if DET is enabled\n detNotify(this.config);\n\n if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n this.config.loggerProvider.debug('Adding file download tracking plugin');\n await this.add(fileDownloadTracking()).promise;\n }\n\n if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n this.config.loggerProvider.debug('Adding form interaction plugin');\n await this.add(formInteractionTracking()).promise;\n }\n\n // Add page view plugin\n if (isPageViewTrackingEnabled(this.config.defaultTracking)) {\n this.config.loggerProvider.debug('Adding page view tracking plugin');\n await this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise;\n }\n\n if (isElementInteractionsEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding user interactions plugin (autocapture plugin)');\n await this.add(autocapturePlugin(getElementInteractionsConfig(this.config), { diagnosticsClient })).promise;\n }\n\n if (isFrustrationInteractionsEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding frustration interactions plugin');\n await this.add(frustrationPlugin(getFrustrationInteractionsConfig(this.config))).promise;\n }\n\n if (isNetworkTrackingEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding network tracking plugin');\n await this.add(networkCapturePlugin(getNetworkTrackingConfig(this.config))).promise;\n }\n\n if (isWebVitalsEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding web vitals plugin');\n await this.add(webVitalsPlugin()).promise;\n }\n\n if (isPageUrlEnrichmentEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding referrer page url plugin');\n await this.add(pageUrlEnrichmentPlugin()).promise;\n }\n\n this.initializing = false;\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver((event) => {\n const { time, ...cleanEventProperties } = event.eventProperties || {};\n const eventOptions = typeof time === 'number' ? { time } : undefined;\n void this.track(event.eventType, cleanEventProperties, eventOptions);\n });\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.loggerProvider.debug('function setUserId: ', userId);\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onIdentityChanged({ userId: userId });\n setConnectorUserId(userId, this.config.instanceName);\n }\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.loggerProvider.debug('function setDeviceId: ', deviceId);\n if (deviceId !== this.config.deviceId) {\n this.config.deviceId = deviceId;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onIdentityChanged({ deviceId: deviceId });\n setConnectorDeviceId(deviceId, this.config.instanceName);\n }\n }\n\n reset() {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n this.timeline.onReset();\n }\n\n getIdentity() {\n return {\n deviceId: this.config?.deviceId,\n userId: this.config?.userId,\n userProperties: this.userProperties,\n };\n }\n\n getOptOut(): boolean | undefined {\n return this.config?.optOut;\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n const promises: Promise<Result>[] = [];\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return returnWrapper(Promise.resolve());\n }\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return returnWrapper(Promise.resolve());\n }\n\n this.config.loggerProvider.debug('function setSessionId: ', sessionId);\n\n const previousSessionId = this.getSessionId();\n if (previousSessionId !== sessionId) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onSessionIdChanged(sessionId);\n }\n\n const lastEventTime = this.config.lastEventTime;\n let lastEventId = this.config.lastEventId ?? -1;\n\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n this.config.pageCounter = 0;\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n promises.push(\n this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n }).promise,\n );\n }\n this.config.lastEventTime = this.config.sessionId;\n }\n\n // Fire web attribution event when enable webAttribution tracking\n // 1. has new campaign (call setSessionId from init function)\n // 2. or shouldTrackNewCampaign (call setSessionId from async process(event) when there has new campaign and resetSessionOnNewCampaign = true )\n const isCampaignEventTracked = this.trackCampaignEventIfNeeded(++lastEventId, promises);\n\n // track the identify event if an Identify object is provided in the config\n if (this.config.identify) {\n promises.push(this.track(createIdentifyEvent(this.config.identify)).promise);\n }\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n promises.push(\n this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: isCampaignEventTracked ? ++lastEventId : lastEventId,\n session_id: this.config.sessionId,\n time: this.config.lastEventTime,\n }).promise,\n );\n }\n\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n return returnWrapper(Promise.all(promises));\n }\n\n extendSession() {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n }\n\n setTransport(transport: TransportTypeOrOptions) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n private trackCampaignEventIfNeeded(lastEventId?: number, promises?: Promise<Result>[]) {\n if (!this.webAttribution || !this.webAttribution.shouldTrackNewCampaign) {\n return false;\n }\n\n const campaignEvent = this.webAttribution.generateCampaignEvent(lastEventId);\n if (promises) {\n promises.push(this.track(campaignEvent).promise);\n } else {\n this.track(campaignEvent);\n }\n this.config.loggerProvider.log('Tracking attribution.');\n return true;\n }\n\n async process(event: Event) {\n const currentTime = Date.now();\n const isEventInNewSession = isNewSession(this.config.sessionTimeout, this.config.lastEventTime);\n const shouldSetSessionIdOnNewCampaign =\n this.webAttribution && this.webAttribution.shouldSetSessionIdOnNewCampaign();\n\n if (\n event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId())\n ) {\n if (isEventInNewSession || shouldSetSessionIdOnNewCampaign) {\n this.setSessionId(currentTime);\n if (shouldSetSessionIdOnNewCampaign) {\n this.config.loggerProvider.log('Created a new session for new campaign.');\n }\n } else if (!isEventInNewSession) {\n // Web attribution should be tracked during the middle of a session\n // if there has been a chance in the campaign information.\n this.trackCampaignEventIfNeeded();\n }\n }\n\n // Set user properties\n if (event.event_type === SpecialEventType.IDENTIFY && event.user_properties) {\n this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n }\n\n return super.process(event);\n }\n\n private logBrowserOptions(browserConfig: BrowserOptions & { apiKey: string }) {\n try {\n const browserConfigCopy = {\n ...browserConfig,\n apiKey: browserConfig.apiKey.substring(0, 10) + '********',\n };\n this.config.loggerProvider.debug('Initialized Amplitude with BrowserConfig:', JSON.stringify(browserConfigCopy));\n } catch (e) {\n /* istanbul ignore next */\n this.config.loggerProvider.error('Error logging browser config', e);\n }\n }\n\n /**\n * @experimental\n * WARNING: This method is for internal testing only and is not part of the public API.\n * It may be changed or removed at any time without notice.\n *\n * Sets the diagnostics sample rate before amplitude.init()\n * @param sampleRate - The sample rate to set\n */\n _setDiagnosticsSampleRate(sampleRate: number): void {\n if (sampleRate > 1 || sampleRate < 0) {\n return;\n }\n // Set diagnostics sample rate before initializing the config\n if (!this.config) {\n this._diagnosticsSampleRate = sampleRate;\n return;\n }\n }\n}\n","import { debugWrapper, getClientLogConfig, getClientStates, BrowserClient } from '@amplitude/analytics-core';\nimport { AmplitudeBrowser } from './browser-client';\n\nexport const createInstance = (): BrowserClient => {\n const client = new AmplitudeBrowser();\n return {\n init: debugWrapper(\n client.init.bind(client),\n 'init',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n add: debugWrapper(\n client.add.bind(client),\n 'add',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n ),\n remove: debugWrapper(\n client.remove.bind(client),\n 'remove',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n ),\n track: debugWrapper(\n client.track.bind(client),\n 'track',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n logEvent: debugWrapper(\n client.logEvent.bind(client),\n 'logEvent',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n identify: debugWrapper(\n client.identify.bind(client),\n 'identify',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n groupIdentify: debugWrapper(\n client.groupIdentify.bind(client),\n 'groupIdentify',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n setGroup: debugWrapper(\n client.setGroup.bind(client),\n 'setGroup',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n revenue: debugWrapper(\n client.revenue.bind(client),\n 'revenue',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n flush: debugWrapper(\n client.flush.bind(client),\n 'flush',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n getUserId: debugWrapper(\n client.getUserId.bind(client),\n 'getUserId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.userId']),\n ),\n setUserId: debugWrapper(\n client.setUserId.bind(client),\n 'setUserId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.userId']),\n ),\n getDeviceId: debugWrapper(\n client.getDeviceId.bind(client),\n 'getDeviceId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.deviceId']),\n ),\n setDeviceId: debugWrapper(\n client.setDeviceId.bind(client),\n 'setDeviceId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.deviceId']),\n ),\n reset: debugWrapper(\n client.reset.bind(client),\n 'reset',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.userId', 'config.deviceId']),\n ),\n getSessionId: debugWrapper(\n client.getSessionId.bind(client),\n 'getSessionId',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n setSessionId: debugWrapper(\n client.setSessionId.bind(client),\n 'setSessionId',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n extendSession: debugWrapper(\n client.extendSession.bind(client),\n 'extendSession',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n setOptOut: debugWrapper(\n client.setOptOut.bind(client),\n 'setOptOut',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n setTransport: debugWrapper(\n client.setTransport.bind(client),\n 'setTransport',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n getIdentity: debugWrapper(\n client.getIdentity.bind(client),\n 'getIdentity',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n getOptOut: debugWrapper(\n client.getOptOut.bind(client),\n 'getOptOut',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n _setDiagnosticsSampleRate: debugWrapper(\n client._setDiagnosticsSampleRate.bind(client),\n '_setDiagnosticsSampleRate',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n };\n};\n\nexport default createInstance();\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport client from './browser-client-factory';\nexport { createInstance } from './browser-client-factory';\nexport const {\n add,\n extendSession,\n flush,\n getDeviceId,\n getIdentity,\n getOptOut,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n reset,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n _setDiagnosticsSampleRate,\n} = client;\nexport { AmplitudeBrowser } from './browser-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n\n// Export types to maintain backward compatibility with `analytics-types`.\n// In the next major version, only export customer-facing types to reduce the public API surface.\nexport * as Types from './types';\n","import { getGlobalScope, registerSdkLoaderMetadata } from '@amplitude/analytics-core';\nimport * as amplitude from './index';\nimport { createInstance } from './browser-client-factory';\nimport { runQueuedFunctions } from './utils/snippet-helper';\n\nregisterSdkLoaderMetadata({\n scriptUrl: resolveCurrentScriptUrl(),\n});\n\nfunction resolveCurrentScriptUrl(): string | undefined {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n const currentScript = document.currentScript as HTMLScriptElement | null;\n if (currentScript?.src) {\n return currentScript.src;\n }\n\n return undefined;\n}\n\n// https://developer.mozilla.org/en-US/docs/Glossary/IIFE\n(function () {\n const GlobalScope = getGlobalScope();\n\n if (!GlobalScope) {\n console.error('[Amplitude] Error: GlobalScope is not defined');\n return;\n }\n\n const createNamedInstance = (instanceName?: string) => {\n const instance = createInstance();\n const GlobalScope = getGlobalScope();\n if (GlobalScope && GlobalScope.amplitude && GlobalScope.amplitude._iq && instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n GlobalScope.amplitude._iq[instanceName] = instance;\n }\n return instance;\n };\n\n GlobalScope.amplitude = Object.assign(GlobalScope.amplitude || {}, amplitude, {\n createInstance: createNamedInstance,\n });\n\n if (GlobalScope.amplitude.invoked) {\n const queue = GlobalScope.amplitude._q;\n GlobalScope.amplitude._q = [];\n runQueuedFunctions(amplitude, queue);\n\n const instanceNames = Object.keys(GlobalScope.amplitude._iq) || [];\n for (let i = 0; i < instanceNames.length; i++) {\n const instanceName = instanceNames[i];\n const instance = Object.assign(GlobalScope.amplitude._iq[instanceName], createNamedInstance(instanceName));\n const queue = instance._q;\n instance._q = [];\n runQueuedFunctions(instance, queue);\n }\n }\n})();\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","IdentifyOperation","SpecialEventType","__assign","assign","t","s","i","n","arguments","length","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","Iterator","verb","Symbol","iterator","v","op","pop","push","__values","o","m","__read","r","ar","error","__spreadArray","to","from","pack","l","slice","concat","SuppressedError","AMPLITUDE_PREFIX","STORAGE_PREFIX","DEFAULT_INSTANCE_NAME","AMPLITUDE_SERVER_URL","DCLID","FBCLID","GBRAID","GCLID","KO_CLICK_ID","LI_FAT_ID","MSCLKID","RDT_CID","TTCLID","TWCLID","WBRAID","BASE_CAMPAIGN","utm_campaign","undefined","utm_content","utm_id","utm_medium","utm_source","utm_term","referrer","referring_domain","dclid","gbraid","gclid","fbclid","ko_click_id","li_fat_id","msclkid","rdt_cid","ttclid","twclid","wbraid","SAFE_HEADERS","FORBIDDEN_HEADERS","isValidObject","properties","keys","key","isValidProperties","property","e_1","_a","isArray","isValid","value_1","value_1_1","valueElement","includes","e_1_1","return","Identify","_propertySet","Set","_properties","getUserProperties","set","_safeSet","SET","setOnce","SET_ONCE","append","APPEND","prepend","PREPEND","postInsert","POSTINSERT","preInsert","PREINSERT","remove","REMOVE","add","ADD","unset","UNSET","clearAll","CLEAR_ALL","operation","_validate","userPropertyMap","has","Status","OrderedIdentifyOperations","RevenueProperty","buildResult","event","code","message","Unknown","getGlobalScope","ampIntegrationContextName","globalThis","window","self","global","hex","map","index","toString","padStart","UUID","a","globalScope","crypto","getRandomValues","Math","random","replace","legacyUUID","Uint8Array","entries","_b","int","join","Timeline","client","queue","applying","plugins","register","plugin","config","_c","some","existingPlugin","name","loggerProvider","warn","type","setup","deregister","pluginName","findIndex","splice","teardown","reset","_this","scheduleApply","timeout","setTimeout","shift","item","before","before_1","before_1_1","enrichment","enrichment_1","enrichment_1_1","e_2_1","destination","executeDestinations","e_2","_d","_e","log","filter","execute","JSON","stringify","eventClone","catch","all","resolveResult","flush","onIdentityChanged","identity","forEach","onSessionIdChanged","sessionId","onOptOutChanged","optOut","onReset","createIdentifyEvent","identify","eventOptions","event_type","IDENTIFY","user_properties","returnWrapper","awaitable","promise","AmplitudeCore","initializing","isReady","q","dispatchQ","logEvent","track","bind","timeline","_init","runQueuedFunctions","queueName","queuedFunctions","queuedFunctions_1","queuedFunctions_1_1","queuedFunction","val","eventInput","eventProperties","event_properties","createTrackEvent","dispatch","groupIdentify","groupType","groupName","GROUP_IDENTIFY","group_properties","groups","createGroupIdentifyEvent","setGroup","createGroupEvent","revenue","REVENUE","getEventProperties","createRevenueEvent","_addPlugin","_removePlugin","dispatchWithCallback","callback","process","getOperationAppliedUserProperties","userProperties","updatedProperties","nonOpProperties","values","opProperties","prop","setOptOut","_setOptOut","Boolean","find","debug","pluginClass","Revenue","productId","quantity","price","setProductId","setQuantity","setPrice","setRevenueType","revenueType","setCurrency","currency","setRevenue","setReceipt","receipt","setReceiptSig","receiptSig","setEventProperties","REVENUE_PRODUCT_ID","REVENUE_QUANTITY","REVENUE_PRICE","REVENUE_TYPE","REVENUE_CURRENCY","RECEIPT","RECEIPT_SIG","LogLevel","PREFIX","Logger","logLevel","None","disable","enable","Warn","args","_i","Verbose","console","Error","Debug","getDefaultConfig","flushMaxRetries","flushQueueSize","flushIntervalMillis","instanceName","offline","serverUrl","serverZone","useBatch","Config","options","_optOut","defaultConfig","apiKey","minIdLength","plan","ingestionMetadata","storageProvider","transportProvider","serverConfig","createServerConfig","defineProperty","get","enumerable","configurable","getServerUrl","_serverZone","RequestMetadata","sdk","metrics","histogram","recordHistogram","isSuccessStatusCode","getStacktrace","ignoreDepth","stack","split","text","trim","getClientLogConfig","logger","getValueByStringPath","obj","path","attr","getClientStates","paths","res","paths_1","paths_1_1","debugWrapper","fn","fnName","getLogConfig","getStates","fnContext","debugContext","stacktrace","time","start","Date","toISOString","states","after","end","getResponseBodyString","responseBodyString","Destination","context","retryTimeout","throttleTimeout","storageKey","scheduleId","scheduledTimeout","flushId","diagnosticsClient","unsent","substring","insert_id","attempts","schedule","saveEvents","removeEventsExceedFlushMaxRetries","list","fulfillRequest","scheduleEvents","clearTimeout","resetSchedule","useRetry","later","arr","size","chunkSize","max","reduce","chunks","element","chunkIndex","floor","batch","send","payload","errorMessage","api_key","events","extra","min_id_length","client_upload_time","request_metadata","requestMetadata","handleResponse","statusCode","status","recordEvent","stack_trace","Failed","Success","handleSuccessResponse","Invalid","handleInvalidResponse","PayloadTooLarge","handlePayloadTooLargeResponse","RateLimit","handleRateLimitResponse","handleOtherResponse","missingField","startsWith","dropIndex","eventsWithInvalidFields","eventsWithMissingFields","eventsWithInvalidIdLengths","silencedEvents","flat","dropIndexSet","retry","tryable","dropUserIds","exceededDailyQuotaUsers","dropDeviceIds","exceededDailyQuotaDevices","throttledIndex","throttledEvents","dropUserIdsSet","dropDeviceIdsSet","throttledIndexSet","user_id","device_id","increment","removeEvents","updatedEvents","eventsToRemove","queuedContext","ApplicationContextProviderImpl","getApplicationContext","versionName","language","getLanguage","platform","os","deviceModel","navigator","languages","EventBridgeImpl","receiver","setEventReceiver","isEqual","obj1","obj2","typeA","primitive_1","primitive_1_1","isArrayA","isArrayB","sorted1","sort","sorted2","result_1","ownProps","resArray","ServerZone","IdentityStoreImpl","listeners","editIdentity","actingUserProperties","actingIdentity","setUserId","userId","setDeviceId","deviceId","setUserProperties","updateUserProperties","actions","e_3","actingProperties","_f","action","_g","_h","_j","_k","_l","e_3_1","commit","setIdentity","getIdentity","originalIdentity","listener","addIdentityListener","removeIdentityListener","delete","safeGlobal","AnalyticsConnector","identityStore","eventBridge","applicationContextProvider","getInstance","getAnalyticsConnector","IdentityEventSender","isNewSession","sessionTimeout","lastEventTime","now","getCookieName","postKey","limit","userLanguage","getQueryParams","location","search","acc","curr","query","tryDecodeURIComponent","decodeURIComponent","isUrlMatchAllowlist","url","allowlist","allowedUrl","match","getDecodeURI","locationStr","decodedLocationStr","decodeURI","isTimestampInSampleTemp","timestamp","sampleRate","hashNumber","str","hash","charCodeAt","generateHashCode","abs","MemoryStorage","memoryStorage","Map","isEnabled","getRaw","clear","CookieStorage","testStorage","testKey","testValue","decodedValue","decodeCookiesAsDefault","decodeCookiesWithDoubleUrlEncoding","parse","cookie","document","c","expirationDays","expires","expireDate","date","setTime","getTime","btoa","encodeURIComponent","toUTCString","domain","secure","sameSite","atob","getStorageKey","BrowserStorage","storage","getItem","setItem","removeItem","TABLE_NAMES","INTERNAL_KEYS","DiagnosticsStorage","dbPromise","dbName","isSupported","indexedDB","getDB","openDB","request","open","onerror","onsuccess","db","onclose","close","onupgradeneeded","target","createTables","objectStoreNames","contains","createObjectStore","keyPath","autoIncrement","createIndex","unique","setTags","tags","transaction_1","store_1","error_1","transaction","objectStore","oncomplete","onabort","put","incrementCounters","counters","transaction_2","store_2","error_2","incrementValue","getRequest","existingRecord","existingValue","setHistogramStats","histogramStats","transaction_3","store_3","error_3","newStats","updatedStats","count","min","sum","addEventRecords","transaction_4","store_4","error_4","countRequest","currentCount","availableSlots","setInternal","transaction_5","store_5","error_5","getInternal","transaction_6","store_6","error_6","getLastFlushTimestamp","record","error_7","parseInt","setLastFlushTimestamp","error_8","clearTable","tableName","getAllAndClear","error_9","getAllFromStore","getAll","GLOBAL_KEY","detectSdkOrigin","scope","normalizedScriptUrl","filename","normalizeUrl","URL","origin","pathname","extractFilenameFromStack","stringifyReason","reason","FLUSH_INTERVAL_MS","MAX_MEMORY_STORAGE_COUNT","DiagnosticsClient","inMemoryTags","inMemoryCounters","inMemoryHistograms","inMemoryEvents","saveTimer","flushTimer","enabled","startTimestamp","shouldTrack","initializeFlushInterval","addEventListener","capture","error_name","errorName","metadata","colno","lineno","isTrusted","matchReason","enableSdkErrorListeners","isStorageAndTrackEnabled","setTag","startTimersIfNeeded","existing","event_name","saveAllDataToStorage","finally","_flush","tagsToSave","countersToSave","histogramsToSave","eventsToSave","tagRecords","counterRecords","histogramStatsRecords","eventRecords","stats","avg","round","fetch","method","headers","ok","lastFlushTimestamp","timeSinceLastFlush","_setFlushTimer","delay","_setSampleRate","BaseTransport","_serverUrl","_payload","buildResponse","responseJSON","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","buildStatus","eventsIngested","events_ingested","payloadSizeBytes","payload_size_bytes","serverUploadTime","server_upload_time","missing_field","events_with_invalid_fields","events_with_missing_fields","events_with_invalid_id_lengths","epsThreshold","eps_threshold","exceeded_daily_quota_devices","silencedDevices","silenced_devices","silenced_events","throttledDevices","throttled_devices","throttled_events","throttledUsers","throttled_users","exceeded_daily_quota_users","Timeout","FetchTransport","_super","customHeaders","response","responseText","Accept","RemoteConfigLocalStorage","fetchConfig","failedRemoteConfigInfo","remoteConfig","lastFetch","localStorage","remoteConfigInfo","setConfig","RemoteConfigClient","callbackInfos","lastSuccessfulFetch","fetchPromise","subscribe","deliveryMode","id","callbackInfo","subscribeAll","subscribeWaitForRemote","unsubscribe","updateConfigs","getOrCreateFetchPromise","sendCallback","remotePromise","cachePromise","race","timeoutPromise","source","filteredConfig","lastCallback","retries","interval","_loop_1","this_1","attempt","state_1","abortController","timeoutId","AbortController","abort","getUrlParams","signal","json","getJitterDelay","baseDelay","encodedApiKey","urlParams","URLSearchParams","CONFIG_GROUP","DEFAULT_CSS_SELECTOR_ALLOWLIST","DEFAULT_DATA_ATTRIBUTE_PREFIX","DEFAULT_ACTION_CLICK_ALLOWLIST","DEFAULT_DEAD_CLICK_ALLOWLIST","DEFAULT_RAGE_CLICK_ALLOWLIST","isJsonPrimitive","pruneJson","excludelist","_pruneJson","tokenizeJsonPath","ancestors","targetObject","parentObject","targetKey","keys_1","keys_1_1","hasPathMatchInList","token","isPathMatch","pathMatcher","j","currentMatcher","k","allowOrExcludeList","RequestWrapperFetch","allow","headersUnsafe","headersSafeCopy","headerName","headerValue","Headers","pruneHeaders","_bodySize","TextEncoder","getBodySize","exclude","safeParseAndPruneBody","RequestWrapperXhr","bodyRaw","requestHeaders","bodyUnsafe","maxEntries","bodySize","bodySafe","encode","Blob","ArrayBuffer","isView","byteLength","FormData","formData","total","ReadableStream","PRUNE_STRATEGY","ResponseWrapperFetch","headersSafe","headersOut_1","contentLength","textPromise","timer","clonedResponse","clone","ResponseWrapperXhr","headersString","getJson","headerLines","headerLines_1","headerLines_1_1","jsonBody","REDACTED_VALUE","e_4","strategy","headersPruned","lowerKey","toLowerCase","REDACT","e_4_1","NetworkRequestEvent","startTime","requestWrapper","duration","responseWrapper","endTime","toSerializable","serialized","requestBodySize","responseHeaders","responseBodySize","fromEntries","NetworkEventCallback","NetworkObserver","eventCallbacks","isObserving","eventCallback","originalXhrOpen","XMLHttpRequest","originalXhrSend","originalXhrSetRequestHeader","setRequestHeader","observeXhr","originalFetch","observeFetch","triggerEventCallbacks","err","handleNetworkRequestEvent","requestType","requestInfo","typedError","durationStart","isRequest","parsedUrl","protocol","host","performance","requestEvent","getTimestamps","requestInit","timestamps","originalResponse","originalError","err_1","createXhrJsonParser","xhrUnsafe","responseType","structuredClone","xhrProto","networkObserverContext","$$AmplitudeAnalyticsEvent","xhrSafe","getAllResponseHeaders","getResponseHeader","networkObserver","CampaignParser","getUtmParam","getReferrer","getClickIds","params","data","TEXT_MASK_ATTRIBUTE","MASKED_TEXT_VALUE","CC_REGEX","SSN_REGEX","EMAIL_REGEX","replaceSensitiveString","additionalMaskTextPatterns","additionalMaskTextPatterns_1","additionalMaskTextPatterns_1_1","pattern","getPageTitle","parseTitleFunction","title","titleElement","querySelector","hasAttribute","_createForOfIteratorHelperLoose","allowArrayLike","it","minLen","_arrayLikeToArray","test","_unsupportedIterableToArray","len","arr2","_defineProperties","props","descriptor","writable","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","observable","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","ctor","Observable","isObservable","x","hostReportError","enqueue","cleanupSubscription","subscription","cleanup","_cleanup","closeSubscription","_observer","_queue","_state","notifySubscription","observer","onNotify","flushSubscription","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_subscription","_proto2","complete","_subscriber","_proto3","_this2","_this3","_this4","C","hasSeed","hasValue","first","_this5","_len","sources","_key","startNext","flatMap","_this6","subscriptions","outer","inner","completeIfDone","closed","_step","_iterator","of","_len2","items","_key2","asyncMap","ZenObservable","merge","sourceA","sourceB","subscriptions_1","subscriptions_1_1","sub","subscribeTo","multicast","observers","observers_1","observers_1_1","obs","observers_2","observers_2_1","observers_3","observers_3_1","symbol","isTrackingEnabled","autocapture","isAttributionTrackingEnabled","isPageViewTrackingEnabled","isSessionTrackingEnabled","isNetworkTrackingEnabled","networkTracking","isElementInteractionsEnabled","elementInteractions","isFrustrationInteractionsEnabled","frustrationInteractions","getElementInteractionsConfig","getFrustrationInteractionsConfig","getNetworkTrackingConfig","networkTrackingConfig","networkTrackingOptions","captureRules","rule","urls","hosts","hostsString","urlsString","getPageViewTrackingConfig","eventType","trackOn","trackHistoryChanges","pageCounter","defaultTracking","pageViews","instance","convertProxyObjectToRealObject","name_1","isInstanceProxy","VERSION","LIBPREFIX","Context","library","userAgent","lastEventId","nextEventId","event_id","session_id","appVersion","app_version","trackingOptions","ipAddress","ip","partner_id","partnerId","ingestion_metadata","source_name","sourceName","source_version","sourceVersion","user_agent","MAX_ARRAY_LENGTH","LocalStorage","droppedEventsCount","SessionStorage","sessionStorage","XHRTransport","state","xhr","onreadystatechange","readyState","SendBeaconTransport","sendBeacon","parseLegacyCookies","cookieStorage","deleteLegacyCookies","cookieName","getOldCookieName","cookies","decode","parseTime","num","integer","isNaN","escape","DEFAULT_EVENT_PREFIX","DEFAULT_FORM_START_EVENT","DEFAULT_FORM_SUBMIT_EVENT","DEFAULT_FILE_DOWNLOAD_EVENT","DEFAULT_SESSION_START_EVENT","DEFAULT_SESSION_END_EVENT","FILE_EXTENSION","FILE_NAME","LINK_ID","LINK_TEXT","LINK_URL","FORM_ID","FORM_NAME","FORM_DESTINATION","DEFAULT_IDENTITY_STORAGE","BrowserConfig","cookieOptions","identityStorage","transport","fetchRemoteConfig","debugLogsEnabled","enableDiagnostics","diagnosticsSampleRate","expiration","upgrade","_fetchRemoteConfig","createTransport","version","_cookieStorage","updateStorage","_deviceId","_userId","_sessionId","_lastEventTime","_lastEventId","_pageCounter","_debugLogsEnabled","cache","useBrowserConfig","amplitudeInstance","getTopLevelDomain","_3","createCookieStorage","legacyCookies","previousCookies","queryParams","ampTimestamp","Number","isWithinTimeLimit","ampDeviceId","previousSessionDeviceId","previousSessionUserId","_y","_z","_0","_1","_2","browserConfig","_diagnosticsSampleRate","hostname","parts","levels","omitUndefined","input","pageViewTrackingPlugin","amplitude","localConfig","isTracking","createPageViewEvent","locationHREF","href","getCampaignParams","shouldTrackOnPageLoad","previousURL","trackHistoryPageView","newURL","shouldTrackPageView","shouldTrackHistoryPageView","trackHistoryPageViewWrapper","history","pushState","Proxy","unused","pageViewEvent","isCampaignEvent","removeEventListener","$set","$unset","userProperties_1","every","trackingOption","newURLStr","oldURLStr","oldURL","formInteractionTracking","eventListeners","handler","initializeFormTracking","addFormInteractionListener","form","hasFormChanged","formDestination","extractFormAction","stringOrUndefined","getElementsByTagName","MutationObserver","mutations","mutation","addedNodes","node","nodeName","querySelectorAll","observe","subtree","childList","window_1","disconnect","getAttribute","encodeURI","fileDownloadTracking","initializeFileDownloadTracking","addFileDownloadListener","ext","exec","fileExtension","notified","networkConnectivityCheckerPlugin","addNetworkListener","onLine","translateRemoteConfigToLocal","propertyNames","propertyNames_1","propertyNames_1_1","propertyName","header","captureSafeHeaders","rageClick","rageClicks","deadClick","deadClicks","mergeUrls","urlsExact","urlsRegex","regexList","RegExp","regexError","updateBrowserConfigWithRemoteConfig","typedRemoteConfig","transformedAutocaptureRemoteConfig","pageUrlAllowlistRegex","transformedRcElementInteractions","exactAllowList","pageUrlAllowlist","captureRules_1","captureRules_1_1","attribution","fileDownloads","formInteractions","sessions","webVitals","AMPLITUDE_ELEMENT_CLICKED_EVENT","AMPLITUDE_EVENT_PROP_ELEMENT_TAG","AMPLITUDE_EVENT_PROP_ELEMENT_TEXT","AMPLITUDE_EVENT_PROP_PAGE_URL","AMPLITUDE_ORIGIN","AMPLITUDE_ORIGINS_MAP","US","EU","STAGING","DATA_AMP_MASK_ATTRIBUTES","SENSITIVE_TAGS","isElementPointerCursor","actionType","computedStyle","getComputedStyle","getPropertyValue","createShouldTrackEvent","autocaptureOptions","isAlwaysCaptureCursorPointer","pageUrlExcludelist","shouldTrackEventResolver","tag","tagName","elementType","isCursorPointer","hasMatchAnyAllowedSelector","selector","matches","parseAttributesToMask","attributeString","removeEmptyProperties","filteredProperties","isEmpty","getClosestElement","selectors","parentElement","filterOutNonTrackableEvents","closestTrackedAncestor","BLOCKED_ATTRIBUTES","SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST","SVG_TAGS","HIGHLY_SENSITIVE_INPUT_TYPES","getElementProperties","userMaskedAttributeNames","siblings","children","indexOfType","el","prevSiblingTag","previousElementSibling","prevSib","classes","classList","attributes","filteredAttributes","isSensitiveElement","isContentEditable","HTMLElement","isNonSensitiveElement","filteredAttributes_1","filteredAttributes_1_1","attrs","executeActions","ev","dataExtractor","extractDataFromDataSource","dataSource","targetElementProperties","destinationKey","DataExtractor","getHierarchy","hierarchy","targetEl","current","getAncestors","elementToAttributesToMaskMap","attributesToMask","constants.DATA_AMP_MASK_ATTRIBUTES","ancestorAttributesToMask","combinedAttributesToMask","hierarchyNode","hierarchy_1","hierarchy_1_1","getNearestLabel","labelElement","parent","getText","dataAttributePrefix","prefix","rect","getBoundingClientRect","left","top","currentElementAttributes","nearestLabel","attributeName","attributeValue","attributeKey","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT","constants.AMPLITUDE_EVENT_PROP_PAGE_URL","innerHeight","innerWidth","HTMLAnchorElement","addAdditionalEventProperties","selectorAllowlist","isCapturingCursorPointer","baseEvent","isElementBasedEvent","contextElement","sourceType","sourceElement","scopingElement","documentElement","closest","getDataSource","elementExtractType","attribute","output","clonedTree","cloneNode","innerText","getEventTagProps","rawPatterns","maskTextRegex","compiled","rawPatterns_1","rawPatterns_1_1","entry","WindowMessenger","endpoint","requestCallbacks","onSelect","notify","onTrack","opener","postMessage","sendRequest","substr","responseData","isElementSelectable","cssSelectorAllowlist","actionClickAllowlist","amplitudeVisualTaggingSelectorInstance","eventData","actionData_1","scriptElement","createElement","async","src","once","head","appendChild","amplitudeVisualTaggingSelector","visualHighlightClass","messenger","diagnostics","ObservablesEnum","createMutationObservable","mutationObserver","characterData","createClickObservable","clickType","eventTypeToBrowserEventMap","groupLabeledEventIdsByEventType","labeledEvents","groupedLabeledEvents","browserEvent","labeledEvents_1","labeledEvents_1_1","le","definition","def","createLabeledEventToTriggerMap","triggers","labeledEventToTriggerMap","triggers_1","triggers_1_1","trigger","conditions","condition","eventId","existingTriggers","matchEventToLabeledEvents","filters","subprop_key","subprop_op","subprop_value","matchEventToFilter","TriggerEvaluator","evaluate","e_7","pageActions","matchingTriggers","leToTriggerMap","e_5","e_6","labeledEvents_2","labeledEvents_2_1","triggers_2","triggers_2_1","e_6_1","e_5_1","matchLabeledEventsToTriggers","matchingTriggers_1","matchingTriggers_1_1","e_7_1","update","autocapturePlugin","visualTaggingOptions","debounceTime","excludePattern","evaluateTriggers","createTriggerEvaluator","shouldTrackEvent","shouldTrackActionClick","allObservables","clickTrackingSubscription","changeSubscription","actionClickSubscription","remoteConfigClient","remotePageActions","recomputePageActionsData","navigateObservable","clickObservable","click","changeObservable","changeEvent","enrichedChangeEvent","navigation","navigateEvent","enrichedNavigateEvent","mutationObservable","ChangeObservable","ClickObservable","MutationObservable","NavigateObservable","createObservables","trackClicks","trackChange","filteredClickObservable","closestActionClickEl","clickEvent","mutationOrNavigate","clickMutationNavigateObservable","actionClickTimer","lastClickEvent","event_1","actionClick","trackActionClick","constants.AMPLITUDE_ORIGINS_MAP","CHANGE_EVENTS","addCoordinates","regionBox","clientX","clientY","yMin","yMax","xMin","xMax","isOutOfBounds","getRageClickAnalyticsEvent","clickWindow","firstClick","lastClick","rageClickEvent","X","Y","Time","trackRageClicks","shouldTrackRageClick","clickBoundingBox","pendingRageClick","resolutionValue","isNewElement","isClickOutsideRageClickWindow","resetClickWindow","timerId","frustrationPlugin","rageCssSelectors","deadCssSelectors","combinedCssSelectors","shouldTrackDeadClick","rageClickSubscription","deadClickSubscription","enrichedNavigateObservable","enrichedMutationObservable","navigate","Element","changeObservables","clicksAndChangeObservable","deadClickTimer","deadClickEvent","trackDeadClick","AMPLITUDE_NETWORK_REQUEST_EVENT","DEFAULT_STATUS_CODE_RANGE","wildcardMatch","regexPattern","isStatusCodeInRange","range","ranges","ranges_1","ranges_1_1","parseUrl","currentHref","urlObj","searchParams","fragment","hrefWithoutQueryOrHash","parseHeaderCaptureRule","isBodyCaptureRuleEmpty","blocklist","shouldTrackNetworkEvent","networkEvent","isMatch_1","ignoreAmplitudeRequests","ignoreHosts","ignoreHost","reverse","methods","allowedMethod","statusCodeRange","isCaptureRuleMatch","responseHeadersRule","requestHeadersRule","responseBody","responseBodyJson","requestBody","requestBodyJson","isAmplitudeNetworkRequestEvent","trackNetworkEvents","networkObservable","networkAnalyticsEvent","logNetworkAnalyticsEvent","networkCapturePlugin","eventWithProperties","NetworkObservable","persisted","timeStamp","delta","rating","requestAnimationFrame","getEntriesByType","responseStart","activationStart","prerendering","wasDiscarded","navigationType","WeakMap","h","hadRecentInput","at","PerformanceObserver","supportedEntryTypes","getEntries","buffered","u","visibilityState","firstHiddenTime","reportAllChanges","T","L","M","interactionId","I","w","interactionCount","A","entryType","B","requestIdleCallback","N","S","PerformanceEventTiming","durationThreshold","takeRecords","$","D","getMetricStartTime","metric","timeOrigin","processMetric","navigationStart","PreviousPageType","webVitalsPlugin","visibilityListener","doc","locationHref","webVitalsPayload","onLCP","onFCP","onINP","onCLS","onTTFB","domainWithoutSubdomain","isNewCampaign","previous","currentCampaign","prevReferringDomain","previousCampaign","isExcludedReferrer","excludeReferrers","isDirectTraffic","hasNewCampaign","hasNewDomain","referringDomain","WebAttribution","cookieDomain","shouldTrackNewCampaign","initialEmptyValue","resetSessionOnNewCampaign","webExpStorageKey","init","fetchCampaign","isEventInNewSession","originalCampaign","generateCampaignEvent","campaign","campaignParameters","identifyEvent","campaignEvent","shouldSetSessionIdOnNewCampaign","CURRENT_PAGE_STORAGE_KEY","PREVIOUS_PAGE_STORAGE_KEY","URL_INFO_STORAGE_KEY","EXCLUDED_DEFAULT_EVENT_TYPES","pageUrlEnrichmentPlugin","internalDomains","isStorageEnabled","isProxied","getPrevPageType","previousPage","currentDomain","previousPageDomain","decodedUrl","getHostname","Direct","isCurrentInternal","isPrevInternal","Internal","External","saveUrlInfoWrapper","URLInfo","currentURL","storedCurrentURL","replaceState","updatedURLInfo","addIfNotExist","AmplitudeBrowser","userIdOrOptions","maybeOptions","browserOptions","logBrowserOptions","attributionTrackingOptions","webAttribution","querySessionId","ampSessionId","setSessionId","connector","detNotify","isFormInteractionTrackingEnabled","isWebVitalsEnabled","isPageUrlEnrichmentEnabled","cleanEventProperties","getUserId","setConnectorUserId","getDeviceId","setConnectorDeviceId","getOptOut","getSessionId","promises","previousSessionId","isCampaignEventTracked","trackCampaignEventIfNeeded","extendSession","setTransport","currentTime","browserConfigCopy","_setDiagnosticsSampleRate","createInstance","scriptUrl","normalized","registerSdkLoaderMetadata","currentScript","resolveCurrentScriptUrl","GlobalScope","createNamedInstance","_iq","invoked","instanceNames","queue_1"],"mappings":"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"}
1
+ {"version":3,"file":"amplitude-min.js","sources":["../../../../node_modules/tslib/tslib.es6.js","../../../analytics-core/lib/esm/types/event/event.js","../../../analytics-core/lib/esm/types/constants.js","../../../analytics-core/lib/esm/identify.js","../../../analytics-core/lib/esm/utils/valid-properties.js","../../../analytics-core/lib/esm/types/status.js","../../../analytics-core/lib/esm/utils/result-builder.js","../../../analytics-core/lib/esm/revenue.js","../../../analytics-core/lib/esm/global-scope.js","../../../analytics-core/lib/esm/utils/uuid.js","../../../analytics-core/lib/esm/timeline.js","../../../analytics-core/lib/esm/utils/event-builder.js","../../../analytics-core/lib/esm/utils/return-wrapper.js","../../../analytics-core/lib/esm/core-client.js","../../../analytics-core/lib/esm/types/messages.js","../../../analytics-core/lib/esm/utils/chunk.js","../../../analytics-core/lib/esm/types/loglevel.js","../../../analytics-core/lib/esm/logger.js","../../../analytics-core/lib/esm/config.js","../../../analytics-core/lib/esm/utils/status-code.js","../../../analytics-core/lib/esm/utils/debug.js","../../../analytics-core/lib/esm/plugins/destination.js","../../../../node_modules/@amplitude/analytics-connector/dist/analytics-connector.esm.js","../../../analytics-core/lib/esm/types/server-zone.js","../../../analytics-core/lib/esm/analytics-connector.js","../../../analytics-core/lib/esm/plugins/identity.js","../../../analytics-core/lib/esm/session.js","../../../analytics-core/lib/esm/cookie-name.js","../../../analytics-core/lib/esm/language.js","../../../analytics-core/lib/esm/query-params.js","../../../analytics-core/lib/esm/utils/url-utils.js","../../../analytics-core/lib/esm/utils/sampling.js","../../../analytics-core/lib/esm/storage/memory.js","../../../analytics-core/lib/esm/storage/cookie.js","../../../analytics-core/lib/esm/storage/helpers.js","../../../analytics-core/lib/esm/storage/browser-storage.js","../../../analytics-core/lib/esm/diagnostics/diagnostics-storage.js","../../../analytics-core/lib/esm/diagnostics/uncaught-sdk-errors.js","../../../analytics-core/lib/esm/diagnostics/diagnostics-client.js","../../../analytics-core/lib/esm/transports/base.js","../../../analytics-core/lib/esm/transports/fetch.js","../../../analytics-core/lib/esm/remote-config/remote-config-localstorage.js","../../../analytics-core/lib/esm/remote-config/remote-config.js","../../../analytics-core/lib/esm/types/offline.js","../../../analytics-core/lib/esm/types/element-interactions.js","../../../analytics-core/lib/esm/types/frustration-interactions.js","../../../analytics-core/lib/esm/utils/json-query.js","../../../analytics-core/lib/esm/network-request-event.js","../../../analytics-core/lib/esm/network-observer.js","../../../analytics-core/lib/esm/campaign/campaign-parser.js","../../../analytics-core/lib/esm/plugins/helpers.js","../../../../node_modules/zen-observable-ts/module.js","../../../analytics-core/lib/esm/utils/observable.js","../../../src/default-tracking.ts","../../../src/utils/snippet-helper.ts","../../../src/version.ts","../../../src/lib-prefix.ts","../../../src/plugins/context.ts","../../../src/storage/local-storage.ts","../../../src/storage/session-storage.ts","../../../src/transports/xhr.ts","../../../src/transports/send-beacon.ts","../../../src/cookie-migration/index.ts","../../../src/constants.ts","../../../src/config.ts","../../../plugin-page-view-tracking-browser/lib/esm/utils.js","../../../plugin-page-view-tracking-browser/lib/esm/page-view-tracking.js","../../../src/plugins/form-interaction-tracking.ts","../../../src/plugins/file-download-tracking.ts","../../../src/det-notification.ts","../../../src/plugins/network-connectivity-checker.ts","../../../src/config/joined-config.ts","../../../plugin-autocapture-browser/lib/esm/version.js","../../../plugin-autocapture-browser/lib/esm/constants.js","../../../plugin-autocapture-browser/lib/esm/helpers.js","../../../plugin-autocapture-browser/lib/esm/hierarchy.js","../../../plugin-autocapture-browser/lib/esm/pageActions/actions.js","../../../plugin-autocapture-browser/lib/esm/data-extractor.js","../../../plugin-autocapture-browser/lib/esm/libs/messenger.js","../../../plugin-autocapture-browser/lib/esm/observables.js","../../../plugin-autocapture-browser/lib/esm/autocapture-plugin.js","../../../plugin-autocapture-browser/lib/esm/pageActions/triggers.js","../../../plugin-autocapture-browser/lib/esm/pageActions/matchEventToFilter.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-click.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-change.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-action-click.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-dead-click.js","../../../plugin-autocapture-browser/lib/esm/autocapture/track-rage-click.js","../../../plugin-autocapture-browser/lib/esm/frustration-plugin.js","../../../plugin-network-capture-browser/lib/esm/network-capture-plugin.js","../../../plugin-network-capture-browser/lib/esm/constants.js","../../../plugin-network-capture-browser/lib/esm/track-network-event.js","../../../../node_modules/web-vitals/dist/web-vitals.js","../../../plugin-web-vitals-browser/lib/esm/web-vitals-plugin.js","../../../plugin-page-url-enrichment-browser/lib/esm/page-url-enrichment.js","../../../plugin-web-vitals-browser/lib/esm/constants.js","../../../src/attribution/helpers.ts","../../../src/attribution/web-attribution.ts","../../../src/browser-client.ts","../../../src/browser-client-factory.ts","../../../src/index.ts","../../../src/snippet-index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","export var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n/**\n * Strings that have special meaning when used as an event's type\n * and have different specifications.\n */\nexport var SpecialEventType;\n(function (SpecialEventType) {\n SpecialEventType[\"IDENTIFY\"] = \"$identify\";\n SpecialEventType[\"GROUP_IDENTIFY\"] = \"$groupidentify\";\n SpecialEventType[\"REVENUE\"] = \"revenue_amount\";\n})(SpecialEventType || (SpecialEventType = {}));\n//# sourceMappingURL=event.js.map","export var UNSET_VALUE = '-';\nexport var AMPLITUDE_PREFIX = 'AMP';\nexport var STORAGE_PREFIX = \"\".concat(AMPLITUDE_PREFIX, \"_unsent\");\nexport var DEFAULT_INSTANCE_NAME = '$default_instance';\nexport var AMPLITUDE_SERVER_URL = 'https://api2.amplitude.com/2/httpapi';\nexport var EU_AMPLITUDE_SERVER_URL = 'https://api.eu.amplitude.com/2/httpapi';\nexport var AMPLITUDE_BATCH_SERVER_URL = 'https://api2.amplitude.com/batch';\nexport var EU_AMPLITUDE_BATCH_SERVER_URL = 'https://api.eu.amplitude.com/batch';\n// Campaign constants\nexport var UTM_CAMPAIGN = 'utm_campaign';\nexport var UTM_CONTENT = 'utm_content';\nexport var UTM_ID = 'utm_id';\nexport var UTM_MEDIUM = 'utm_medium';\nexport var UTM_SOURCE = 'utm_source';\nexport var UTM_TERM = 'utm_term';\nexport var DCLID = 'dclid';\nexport var FBCLID = 'fbclid';\nexport var GBRAID = 'gbraid';\nexport var GCLID = 'gclid';\nexport var KO_CLICK_ID = 'ko_click_id';\nexport var LI_FAT_ID = 'li_fat_id';\nexport var MSCLKID = 'msclkid';\nexport var RDT_CID = 'rdt_cid';\nexport var TTCLID = 'ttclid';\nexport var TWCLID = 'twclid';\nexport var WBRAID = 'wbraid';\nexport var EMPTY_VALUE = 'EMPTY';\nexport var BASE_CAMPAIGN = {\n utm_campaign: undefined,\n utm_content: undefined,\n utm_id: undefined,\n utm_medium: undefined,\n utm_source: undefined,\n utm_term: undefined,\n referrer: undefined,\n referring_domain: undefined,\n dclid: undefined,\n gbraid: undefined,\n gclid: undefined,\n fbclid: undefined,\n ko_click_id: undefined,\n li_fat_id: undefined,\n msclkid: undefined,\n rdt_cid: undefined,\n ttclid: undefined,\n twclid: undefined,\n wbraid: undefined,\n};\nexport var MKTG = 'MKTG';\n// list of Network headers that are safe to capture\nexport var SAFE_HEADERS = [\n 'access-control-allow-origin',\n 'access-control-allow-credentials',\n 'access-control-expose-headers',\n 'access-control-max-age',\n 'access-control-allow-methods',\n 'access-control-allow-headers',\n 'accept-patch',\n 'accept-ranges',\n 'age',\n 'allow',\n 'alt-svc',\n 'cache-control',\n 'connection',\n 'content-disposition',\n 'content-encoding',\n 'content-language',\n 'content-length',\n 'content-location',\n 'content-md5',\n 'content-range',\n 'content-type',\n 'date',\n 'delta-base',\n 'etag',\n 'expires',\n 'im',\n 'last-modified',\n 'link',\n 'location',\n 'permanent',\n 'p3p',\n 'pragma',\n 'proxy-authenticate',\n 'public-key-pins',\n 'retry-after',\n 'server',\n 'status',\n 'strict-transport-security',\n 'trailer',\n 'transfer-encoding',\n 'tk',\n 'upgrade',\n 'vary',\n 'via',\n 'warning',\n 'www-authenticate',\n 'x-b3-traceid',\n 'x-frame-options',\n];\n// list of Network headers to never capture\nexport var FORBIDDEN_HEADERS = ['authorization', 'cookie', 'set-cookie'];\n//# sourceMappingURL=constants.js.map","import { __assign } from \"tslib\";\nimport { UNSET_VALUE } from './types/constants';\nimport { isValidProperties } from './utils/valid-properties';\nvar Identify = /** @class */ (function () {\n function Identify() {\n this._propertySet = new Set();\n this._properties = {};\n }\n Identify.prototype.getUserProperties = function () {\n return __assign({}, this._properties);\n };\n Identify.prototype.set = function (property, value) {\n this._safeSet(IdentifyOperation.SET, property, value);\n return this;\n };\n Identify.prototype.setOnce = function (property, value) {\n this._safeSet(IdentifyOperation.SET_ONCE, property, value);\n return this;\n };\n Identify.prototype.append = function (property, value) {\n this._safeSet(IdentifyOperation.APPEND, property, value);\n return this;\n };\n Identify.prototype.prepend = function (property, value) {\n this._safeSet(IdentifyOperation.PREPEND, property, value);\n return this;\n };\n Identify.prototype.postInsert = function (property, value) {\n this._safeSet(IdentifyOperation.POSTINSERT, property, value);\n return this;\n };\n Identify.prototype.preInsert = function (property, value) {\n this._safeSet(IdentifyOperation.PREINSERT, property, value);\n return this;\n };\n Identify.prototype.remove = function (property, value) {\n this._safeSet(IdentifyOperation.REMOVE, property, value);\n return this;\n };\n Identify.prototype.add = function (property, value) {\n this._safeSet(IdentifyOperation.ADD, property, value);\n return this;\n };\n Identify.prototype.unset = function (property) {\n this._safeSet(IdentifyOperation.UNSET, property, UNSET_VALUE);\n return this;\n };\n Identify.prototype.clearAll = function () {\n // When clear all happens, all properties are unset. Reset the entire object.\n this._properties = {};\n this._properties[IdentifyOperation.CLEAR_ALL] = UNSET_VALUE;\n return this;\n };\n // Returns whether or not this set actually worked.\n Identify.prototype._safeSet = function (operation, property, value) {\n if (this._validate(operation, property, value)) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var userPropertyMap = this._properties[operation];\n if (userPropertyMap === undefined) {\n userPropertyMap = {};\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this._properties[operation] = userPropertyMap;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n userPropertyMap[property] = value;\n this._propertySet.add(property);\n return true;\n }\n return false;\n };\n Identify.prototype._validate = function (operation, property, value) {\n if (this._properties[IdentifyOperation.CLEAR_ALL] !== undefined) {\n // clear all already set. Skipping operation;\n return false;\n }\n if (this._propertySet.has(property)) {\n // Property already used. Skipping operation\n return false;\n }\n if (operation === IdentifyOperation.ADD) {\n return typeof value === 'number';\n }\n if (operation !== IdentifyOperation.UNSET && operation !== IdentifyOperation.REMOVE) {\n return isValidProperties(property, value);\n }\n return true;\n };\n return Identify;\n}());\nexport { Identify };\nexport var IdentifyOperation;\n(function (IdentifyOperation) {\n // Base Operations to set values\n IdentifyOperation[\"SET\"] = \"$set\";\n IdentifyOperation[\"SET_ONCE\"] = \"$setOnce\";\n // Operations around modifying existing values\n IdentifyOperation[\"ADD\"] = \"$add\";\n IdentifyOperation[\"APPEND\"] = \"$append\";\n IdentifyOperation[\"PREPEND\"] = \"$prepend\";\n IdentifyOperation[\"REMOVE\"] = \"$remove\";\n // Operations around appending values *if* they aren't present\n IdentifyOperation[\"PREINSERT\"] = \"$preInsert\";\n IdentifyOperation[\"POSTINSERT\"] = \"$postInsert\";\n // Operations around removing properties/values\n IdentifyOperation[\"UNSET\"] = \"$unset\";\n IdentifyOperation[\"CLEAR_ALL\"] = \"$clearAll\";\n})(IdentifyOperation || (IdentifyOperation = {}));\n/**\n * Note that the order of operations should align with https://github.com/amplitude/nova/blob/7701b5986b565d4b2fb53b99a9f2175df055dea8/src/main/java/com/amplitude/ingestion/core/UserPropertyUtils.java#L210\n */\nexport var OrderedIdentifyOperations = [\n IdentifyOperation.CLEAR_ALL,\n IdentifyOperation.UNSET,\n IdentifyOperation.SET,\n IdentifyOperation.SET_ONCE,\n IdentifyOperation.ADD,\n IdentifyOperation.APPEND,\n IdentifyOperation.PREPEND,\n IdentifyOperation.PREINSERT,\n IdentifyOperation.POSTINSERT,\n IdentifyOperation.REMOVE,\n];\n//# sourceMappingURL=identify.js.map","import { __values } from \"tslib\";\nvar MAX_PROPERTY_KEYS = 1000;\nexport var isValidObject = function (properties) {\n if (Object.keys(properties).length > MAX_PROPERTY_KEYS) {\n return false;\n }\n for (var key in properties) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var value = properties[key];\n if (!isValidProperties(key, value))\n return false;\n }\n return true;\n};\nexport var isValidProperties = function (property, value) {\n var e_1, _a;\n if (typeof property !== 'string')\n return false;\n if (Array.isArray(value)) {\n var isValid = true;\n try {\n for (var value_1 = __values(value), value_1_1 = value_1.next(); !value_1_1.done; value_1_1 = value_1.next()) {\n var valueElement = value_1_1.value;\n if (Array.isArray(valueElement)) {\n return false;\n }\n else if (typeof valueElement === 'object') {\n isValid = isValid && isValidObject(valueElement);\n }\n else if (!['number', 'string'].includes(typeof valueElement)) {\n return false;\n }\n if (!isValid) {\n return false;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (value_1_1 && !value_1_1.done && (_a = value_1.return)) _a.call(value_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n else if (value === null || value === undefined) {\n return false;\n }\n else if (typeof value === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return isValidObject(value);\n }\n else if (!['number', 'string', 'boolean'].includes(typeof value)) {\n return false;\n }\n return true;\n};\n//# sourceMappingURL=valid-properties.js.map","/** The status of an event. */\nexport var Status;\n(function (Status) {\n /** The status could not be determined. */\n Status[\"Unknown\"] = \"unknown\";\n /** The event was skipped due to configuration or callbacks. */\n Status[\"Skipped\"] = \"skipped\";\n /** The event was sent successfully. */\n Status[\"Success\"] = \"success\";\n /** A user or device in the payload is currently rate limited and should try again later. */\n Status[\"RateLimit\"] = \"rate_limit\";\n /** The sent payload was too large to be processed. */\n Status[\"PayloadTooLarge\"] = \"payload_too_large\";\n /** The event could not be processed. */\n Status[\"Invalid\"] = \"invalid\";\n /** A server-side error ocurred during submission. */\n Status[\"Failed\"] = \"failed\";\n /** a server or client side error occuring when a request takes too long and is cancelled */\n Status[\"Timeout\"] = \"Timeout\";\n /** NodeJS runtime environment error.. E.g. disconnected from network */\n Status[\"SystemError\"] = \"SystemError\";\n})(Status || (Status = {}));\n//# sourceMappingURL=status.js.map","import { Status } from '../types/status';\nexport var buildResult = function (event, code, message) {\n if (code === void 0) { code = 0; }\n if (message === void 0) { message = Status.Unknown; }\n return { event: event, code: code, message: message };\n};\n//# sourceMappingURL=result-builder.js.map","import { __assign } from \"tslib\";\nimport { isValidObject } from './utils/valid-properties';\nvar Revenue = /** @class */ (function () {\n function Revenue() {\n this.productId = '';\n this.quantity = 1;\n this.price = 0.0;\n }\n Revenue.prototype.setProductId = function (productId) {\n this.productId = productId;\n return this;\n };\n Revenue.prototype.setQuantity = function (quantity) {\n if (quantity > 0) {\n this.quantity = quantity;\n }\n return this;\n };\n Revenue.prototype.setPrice = function (price) {\n this.price = price;\n return this;\n };\n Revenue.prototype.setRevenueType = function (revenueType) {\n this.revenueType = revenueType;\n return this;\n };\n Revenue.prototype.setCurrency = function (currency) {\n this.currency = currency;\n return this;\n };\n Revenue.prototype.setRevenue = function (revenue) {\n this.revenue = revenue;\n return this;\n };\n Revenue.prototype.setReceipt = function (receipt) {\n this.receipt = receipt;\n return this;\n };\n Revenue.prototype.setReceiptSig = function (receiptSig) {\n this.receiptSig = receiptSig;\n return this;\n };\n Revenue.prototype.setEventProperties = function (properties) {\n if (isValidObject(properties)) {\n this.properties = properties;\n }\n return this;\n };\n Revenue.prototype.getEventProperties = function () {\n var eventProperties = this.properties ? __assign({}, this.properties) : {};\n eventProperties[RevenueProperty.REVENUE_PRODUCT_ID] = this.productId;\n eventProperties[RevenueProperty.REVENUE_QUANTITY] = this.quantity;\n eventProperties[RevenueProperty.REVENUE_PRICE] = this.price;\n eventProperties[RevenueProperty.REVENUE_TYPE] = this.revenueType;\n eventProperties[RevenueProperty.REVENUE_CURRENCY] = this.currency;\n eventProperties[RevenueProperty.REVENUE] = this.revenue;\n eventProperties[RevenueProperty.RECEIPT] = this.receipt;\n eventProperties[RevenueProperty.RECEIPT_SIG] = this.receiptSig;\n return eventProperties;\n };\n return Revenue;\n}());\nexport { Revenue };\nexport var RevenueProperty;\n(function (RevenueProperty) {\n RevenueProperty[\"REVENUE_PRODUCT_ID\"] = \"$productId\";\n RevenueProperty[\"REVENUE_QUANTITY\"] = \"$quantity\";\n RevenueProperty[\"REVENUE_PRICE\"] = \"$price\";\n RevenueProperty[\"REVENUE_TYPE\"] = \"$revenueType\";\n RevenueProperty[\"REVENUE_CURRENCY\"] = \"$currency\";\n RevenueProperty[\"REVENUE\"] = \"$revenue\";\n RevenueProperty[\"RECEIPT\"] = \"$receipt\";\n RevenueProperty[\"RECEIPT_SIG\"] = \"$receiptSig\";\n})(RevenueProperty || (RevenueProperty = {}));\n//# sourceMappingURL=revenue.js.map","/* eslint-disable no-restricted-globals */\n/* Only file allowed to access to globalThis, window, self */\nexport var getGlobalScope = function () {\n // This should only be used for integrations with Amplitude that are not running in a browser environment\n // We need to specify the name of the global variable as a string to prevent it from being minified\n var ampIntegrationContextName = 'ampIntegrationContext';\n if (typeof globalThis !== 'undefined' && typeof globalThis[ampIntegrationContextName] !== 'undefined') {\n return globalThis[ampIntegrationContextName];\n }\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n};\n//# sourceMappingURL=global-scope.js.map","/**\n * Source: [jed's gist's comment]{@link https://gist.github.com/jed/982883?permalink_comment_id=3223002#gistcomment-3223002}.\n * Returns a random v4 UUID of the form xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,\n * where each x is replaced with a random hexadecimal digit from 0 to f, and\n * y is replaced with a random hexadecimal digit from 8 to b.\n * Used to generate UUIDs for deviceIds.\n * @private\n */\nimport { __read, __spreadArray } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar legacyUUID = function (a) {\n return a // if the placeholder was passed, return\n ? // a random number from 0 to 15\n (a ^ // unless b is 8,\n ((Math.random() * // in which case\n 16) >> // a random number from\n (a / 4))) // 8 to 11\n .toString(16) // in hexadecimal\n : // or otherwise a concatenated string:\n (String(1e7) + // 10000000 +\n String(-1e3) + // -1000 +\n String(-4e3) + // -4000 +\n String(-8e3) + // -80000000 +\n String(-1e11)) // -100000000000,\n .replace(\n // replacing\n /[018]/g, // zeroes, ones, and eights with\n UUID);\n};\nvar hex = __spreadArray([], __read(Array(256).keys()), false).map(function (index) { return index.toString(16).padStart(2, '0'); });\nexport var UUID = function (a) {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore next */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.crypto) === null || _a === void 0 ? void 0 : _a.getRandomValues)) {\n // Fallback to legacy UUID generation if crypto is not available\n return legacyUUID(a);\n }\n var r = globalScope.crypto.getRandomValues(new Uint8Array(16));\n r[6] = (r[6] & 0x0f) | 0x40;\n r[8] = (r[8] & 0x3f) | 0x80;\n return __spreadArray([], __read(r.entries()), false).map(function (_a) {\n var _b = __read(_a, 2), index = _b[0], int = _b[1];\n return ([4, 6, 8, 10].includes(index) ? \"-\".concat(hex[int]) : hex[int]);\n }).join('');\n};\n//# sourceMappingURL=uuid.js.map","import { __assign, __awaiter, __generator, __read, __values } from \"tslib\";\nimport { buildResult } from './utils/result-builder';\nimport { UUID } from './utils/uuid';\nvar Timeline = /** @class */ (function () {\n function Timeline(client) {\n this.client = client;\n this.queue = [];\n // Flag to guarantee one schedule apply is running\n this.applying = false;\n // Flag indicates whether timeline is ready to process event\n // Events collected before timeline is ready will stay in the queue to be processed later\n this.plugins = [];\n }\n Timeline.prototype.register = function (plugin, config) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (this.plugins.some(function (existingPlugin) { return existingPlugin.name === plugin.name; })) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n this.loggerProvider.warn(\"Plugin with name \".concat(plugin.name, \" already exists, skipping registration\"));\n return [2 /*return*/];\n }\n if (plugin.name === undefined) {\n plugin.name = UUID();\n this.loggerProvider.warn(\"Plugin name is undefined. \\n Generating a random UUID for plugin name: \".concat(plugin.name, \". \\n Set a name for the plugin to prevent it from being added multiple times.\"));\n }\n plugin.type = (_a = plugin.type) !== null && _a !== void 0 ? _a : 'enrichment';\n return [4 /*yield*/, ((_b = plugin.setup) === null || _b === void 0 ? void 0 : _b.call(plugin, config, this.client))];\n case 1:\n _c.sent();\n this.plugins.push(plugin);\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.deregister = function (pluginName, config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var index, plugin;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n index = this.plugins.findIndex(function (plugin) { return plugin.name === pluginName; });\n if (index === -1) {\n config.loggerProvider.warn(\"Plugin with name \".concat(pluginName, \" does not exist, skipping deregistration\"));\n return [2 /*return*/];\n }\n plugin = this.plugins[index];\n this.plugins.splice(index, 1);\n return [4 /*yield*/, ((_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin))];\n case 1:\n _b.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.reset = function (client) {\n this.applying = false;\n var plugins = this.plugins;\n plugins.map(function (plugin) { var _a; return (_a = plugin.teardown) === null || _a === void 0 ? void 0 : _a.call(plugin); });\n this.plugins = [];\n this.client = client;\n };\n Timeline.prototype.push = function (event) {\n var _this = this;\n return new Promise(function (resolve) {\n _this.queue.push([event, resolve]);\n _this.scheduleApply(0);\n });\n };\n Timeline.prototype.scheduleApply = function (timeout) {\n var _this = this;\n if (this.applying)\n return;\n this.applying = true;\n setTimeout(function () {\n void _this.apply(_this.queue.shift()).then(function () {\n _this.applying = false;\n if (_this.queue.length > 0) {\n _this.scheduleApply(0);\n }\n });\n }, timeout);\n };\n Timeline.prototype.apply = function (item) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, event, _b, resolve, before, before_1, before_1_1, plugin, e, e_1_1, enrichment, enrichment_1, enrichment_1_1, plugin, e, e_2_1, destination, executeDestinations;\n var e_1, _c, e_2, _d;\n return __generator(this, function (_e) {\n switch (_e.label) {\n case 0:\n if (!item) {\n return [2 /*return*/];\n }\n _a = __read(item, 1), event = _a[0];\n _b = __read(item, 2), resolve = _b[1];\n // Log initial event\n this.loggerProvider.log('Timeline.apply: Initial event', event);\n before = this.plugins.filter(function (plugin) { return plugin.type === 'before'; });\n _e.label = 1;\n case 1:\n _e.trys.push([1, 6, 7, 8]);\n before_1 = __values(before), before_1_1 = before_1.next();\n _e.label = 2;\n case 2:\n if (!!before_1_1.done) return [3 /*break*/, 5];\n plugin = before_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 4];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 3:\n e = _e.sent();\n if (e === null) {\n this.loggerProvider.log(\"Timeline.apply: Event filtered out by before plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n this.loggerProvider.log(\"Timeline.apply: Event after before plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n }\n _e.label = 4;\n case 4:\n before_1_1 = before_1.next();\n return [3 /*break*/, 2];\n case 5: return [3 /*break*/, 8];\n case 6:\n e_1_1 = _e.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 8];\n case 7:\n try {\n if (before_1_1 && !before_1_1.done && (_c = before_1.return)) _c.call(before_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 8:\n enrichment = this.plugins.filter(function (plugin) { return plugin.type === 'enrichment' || plugin.type === undefined; });\n _e.label = 9;\n case 9:\n _e.trys.push([9, 14, 15, 16]);\n enrichment_1 = __values(enrichment), enrichment_1_1 = enrichment_1.next();\n _e.label = 10;\n case 10:\n if (!!enrichment_1_1.done) return [3 /*break*/, 13];\n plugin = enrichment_1_1.value;\n /* istanbul ignore if */\n if (!plugin.execute) {\n // do nothing\n return [3 /*break*/, 12];\n }\n return [4 /*yield*/, plugin.execute(__assign({}, event))];\n case 11:\n e = _e.sent();\n if (e === null) {\n this.loggerProvider.log(\"Timeline.apply: Event filtered out by enrichment plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n resolve({ event: event, code: 0, message: '' });\n return [2 /*return*/];\n }\n else {\n event = e;\n this.loggerProvider.log(\"Timeline.apply: Event after enrichment plugin '\".concat(String(plugin.name), \"', event: \").concat(JSON.stringify(event)));\n }\n _e.label = 12;\n case 12:\n enrichment_1_1 = enrichment_1.next();\n return [3 /*break*/, 10];\n case 13: return [3 /*break*/, 16];\n case 14:\n e_2_1 = _e.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 16];\n case 15:\n try {\n if (enrichment_1_1 && !enrichment_1_1.done && (_d = enrichment_1.return)) _d.call(enrichment_1);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 16:\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n // Log final event before sending to destinations\n this.loggerProvider.log(\"Timeline.apply: Final event before destinations, event: \".concat(JSON.stringify(event)));\n executeDestinations = destination.map(function (plugin) {\n var eventClone = __assign({}, event);\n return plugin.execute(eventClone).catch(function (e) { return buildResult(eventClone, 0, String(e)); });\n });\n void Promise.all(executeDestinations).then(function (_a) {\n var _b = __read(_a, 1), result = _b[0];\n var resolveResult = result || buildResult(event, 100, 'Event not tracked, no destination plugins on the instance');\n resolve(resolveResult);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.flush = function () {\n return __awaiter(this, void 0, void 0, function () {\n var queue, destination, executeDestinations;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n queue = this.queue;\n this.queue = [];\n return [4 /*yield*/, Promise.all(queue.map(function (item) { return _this.apply(item); }))];\n case 1:\n _a.sent();\n destination = this.plugins.filter(function (plugin) { return plugin.type === 'destination'; });\n executeDestinations = destination.map(function (plugin) {\n return plugin.flush && plugin.flush();\n });\n return [4 /*yield*/, Promise.all(executeDestinations)];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Timeline.prototype.onIdentityChanged = function (identity) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onIdentityChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onIdentityChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, identity));\n });\n };\n Timeline.prototype.onSessionIdChanged = function (sessionId) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onSessionIdChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onSessionIdChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, sessionId));\n });\n };\n Timeline.prototype.onOptOutChanged = function (optOut) {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onOptOutChanged() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onOptOutChanged) === null || _a === void 0 ? void 0 : _a.call(plugin, optOut));\n });\n };\n Timeline.prototype.onReset = function () {\n this.plugins.forEach(function (plugin) {\n var _a;\n // Intentionally to not await plugin.onReset() for non-blocking.\n // Ignore optional channing next line for test coverage.\n // If the plugin doesn't implement it, it won't be called.\n /* istanbul ignore next */\n void ((_a = plugin.onReset) === null || _a === void 0 ? void 0 : _a.call(plugin));\n });\n };\n return Timeline;\n}());\nexport { Timeline };\n//# sourceMappingURL=timeline.js.map","import { __assign } from \"tslib\";\nimport { Identify } from '../identify';\nimport { SpecialEventType } from '../types/event/event';\nexport var createTrackEvent = function (eventInput, eventProperties, eventOptions) {\n var baseEvent = typeof eventInput === 'string' ? { event_type: eventInput } : eventInput;\n return __assign(__assign(__assign({}, baseEvent), eventOptions), (eventProperties && { event_properties: eventProperties }));\n};\nexport var createIdentifyEvent = function (identify, eventOptions) {\n var identifyEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties() });\n return identifyEvent;\n};\nexport var createGroupIdentifyEvent = function (groupType, groupName, identify, eventOptions) {\n var _a;\n var groupIdentify = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.GROUP_IDENTIFY, group_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupIdentify;\n};\nexport var createGroupEvent = function (groupType, groupName, eventOptions) {\n var _a;\n var identify = new Identify();\n identify.set(groupType, groupName);\n var groupEvent = __assign(__assign({}, eventOptions), { event_type: SpecialEventType.IDENTIFY, user_properties: identify.getUserProperties(), groups: (_a = {},\n _a[groupType] = groupName,\n _a) });\n return groupEvent;\n};\nexport var createRevenueEvent = function (revenue, eventOptions) {\n return __assign(__assign({}, eventOptions), { event_type: SpecialEventType.REVENUE, event_properties: revenue.getEventProperties() });\n};\n//# sourceMappingURL=event-builder.js.map","export var returnWrapper = function (awaitable) { return ({\n promise: awaitable || Promise.resolve(),\n}); };\n//# sourceMappingURL=return-wrapper.js.map","import { __awaiter, __generator, __values } from \"tslib\";\nimport { IdentifyOperation, SpecialEventType, } from './types/event/event';\nimport { OrderedIdentifyOperations } from './identify';\nimport { CLIENT_NOT_INITIALIZED, OPT_OUT_MESSAGE } from './types/messages';\nimport { Timeline } from './timeline';\nimport { createGroupEvent, createGroupIdentifyEvent, createIdentifyEvent, createRevenueEvent, createTrackEvent, } from './utils/event-builder';\nimport { buildResult } from './utils/result-builder';\nimport { returnWrapper } from './utils/return-wrapper';\nvar AmplitudeCore = /** @class */ (function () {\n function AmplitudeCore(name) {\n if (name === void 0) { name = '$default'; }\n this.initializing = false;\n this.isReady = false;\n this.q = [];\n this.dispatchQ = [];\n this.logEvent = this.track.bind(this);\n this.timeline = new Timeline(this);\n this.name = name;\n }\n AmplitudeCore.prototype._init = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.config = config;\n this.timeline.reset(this);\n this.timeline.loggerProvider = this.config.loggerProvider;\n return [4 /*yield*/, this.runQueuedFunctions('q')];\n case 1:\n _a.sent();\n this.isReady = true;\n return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.runQueuedFunctions = function (queueName) {\n return __awaiter(this, void 0, void 0, function () {\n var queuedFunctions, queuedFunctions_1, queuedFunctions_1_1, queuedFunction, val, e_1_1;\n var e_1, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n queuedFunctions = this[queueName];\n this[queueName] = [];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 8, 9, 10]);\n queuedFunctions_1 = __values(queuedFunctions), queuedFunctions_1_1 = queuedFunctions_1.next();\n _b.label = 2;\n case 2:\n if (!!queuedFunctions_1_1.done) return [3 /*break*/, 7];\n queuedFunction = queuedFunctions_1_1.value;\n val = queuedFunction();\n if (!(val && 'promise' in val)) return [3 /*break*/, 4];\n return [4 /*yield*/, val.promise];\n case 3:\n _b.sent();\n return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, val];\n case 5:\n _b.sent();\n _b.label = 6;\n case 6:\n queuedFunctions_1_1 = queuedFunctions_1.next();\n return [3 /*break*/, 2];\n case 7: return [3 /*break*/, 10];\n case 8:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 10];\n case 9:\n try {\n if (queuedFunctions_1_1 && !queuedFunctions_1_1.done && (_a = queuedFunctions_1.return)) _a.call(queuedFunctions_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 10:\n if (!this[queueName].length) return [3 /*break*/, 12];\n return [4 /*yield*/, this.runQueuedFunctions(queueName)];\n case 11:\n _b.sent();\n _b.label = 12;\n case 12: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.track = function (eventInput, eventProperties, eventOptions) {\n var event = createTrackEvent(eventInput, eventProperties, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.identify = function (identify, eventOptions) {\n var event = createIdentifyEvent(identify, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.groupIdentify = function (groupType, groupName, identify, eventOptions) {\n var event = createGroupIdentifyEvent(groupType, groupName, identify, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.setGroup = function (groupType, groupName, eventOptions) {\n var event = createGroupEvent(groupType, groupName, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.revenue = function (revenue, eventOptions) {\n var event = createRevenueEvent(revenue, eventOptions);\n return returnWrapper(this.dispatch(event));\n };\n AmplitudeCore.prototype.add = function (plugin) {\n if (!this.isReady) {\n this.q.push(this._addPlugin.bind(this, plugin));\n return returnWrapper();\n }\n return this._addPlugin(plugin);\n };\n AmplitudeCore.prototype._addPlugin = function (plugin) {\n return returnWrapper(this.timeline.register(plugin, this.config));\n };\n AmplitudeCore.prototype.remove = function (pluginName) {\n if (!this.isReady) {\n this.q.push(this._removePlugin.bind(this, pluginName));\n return returnWrapper();\n }\n return this._removePlugin(pluginName);\n };\n AmplitudeCore.prototype._removePlugin = function (pluginName) {\n return returnWrapper(this.timeline.deregister(pluginName, this.config));\n };\n AmplitudeCore.prototype.dispatchWithCallback = function (event, callback) {\n if (!this.isReady) {\n return callback(buildResult(event, 0, CLIENT_NOT_INITIALIZED));\n }\n void this.process(event).then(callback);\n };\n AmplitudeCore.prototype.dispatch = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n if (!this.isReady) {\n return [2 /*return*/, new Promise(function (resolve) {\n _this.dispatchQ.push(_this.dispatchWithCallback.bind(_this, event, resolve));\n })];\n }\n return [2 /*return*/, this.process(event)];\n });\n });\n };\n /**\n *\n * This method applies identify operations to user properties and\n * returns a single object representing the final user property state.\n *\n * This is a best-effort api that only supports $set, $clearAll, and $unset.\n * Other operations are not supported and are ignored.\n *\n *\n * @param userProperties The `event.userProperties` object from an Identify event.\n * @returns A key-value object user properties without operations.\n *\n * @example\n * Input:\n * {\n * $set: { plan: 'premium' },\n * custom_flag: true\n * }\n *\n * Output:\n * {\n * plan: 'premium',\n * custom_flag: true\n * }\n */\n AmplitudeCore.prototype.getOperationAppliedUserProperties = function (userProperties) {\n var updatedProperties = {};\n if (userProperties === undefined) {\n return updatedProperties;\n }\n // Keep non-operation keys for later merge\n var nonOpProperties = {};\n Object.keys(userProperties).forEach(function (key) {\n if (!Object.values(IdentifyOperation).includes(key)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n nonOpProperties[key] = userProperties[key];\n }\n });\n OrderedIdentifyOperations.forEach(function (operation) {\n // Skip when key is an operation.\n if (!Object.keys(userProperties).includes(operation))\n return;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n var opProperties = userProperties[operation];\n switch (operation) {\n case IdentifyOperation.CLEAR_ALL:\n // Due to operation order, the following line will never execute.\n /* istanbul ignore next */\n Object.keys(updatedProperties).forEach(function (prop) {\n delete updatedProperties[prop];\n });\n break;\n case IdentifyOperation.UNSET:\n Object.keys(opProperties).forEach(function (prop) {\n delete updatedProperties[prop];\n });\n break;\n case IdentifyOperation.SET:\n Object.assign(updatedProperties, opProperties);\n break;\n }\n });\n // Merge non-operation properties.\n // Custom properties should not be affected by operations.\n // https://github.com/amplitude/nova/blob/343f678ded83c032e83b189796b3c2be161b48f5/src/main/java/com/amplitude/userproperty/model/ModifyUserPropertiesIdent.java#L79-L83\n Object.assign(updatedProperties, nonOpProperties);\n return updatedProperties;\n };\n AmplitudeCore.prototype.process = function (event) {\n return __awaiter(this, void 0, void 0, function () {\n var userProperties, result, e_2, message, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n // skip event processing if opt out\n if (this.config.optOut) {\n return [2 /*return*/, buildResult(event, 0, OPT_OUT_MESSAGE)];\n }\n if (event.event_type === SpecialEventType.IDENTIFY) {\n userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n this.timeline.onIdentityChanged({ userProperties: userProperties });\n }\n return [4 /*yield*/, this.timeline.push(event)];\n case 1:\n result = _a.sent();\n result.code === 200\n ? this.config.loggerProvider.log(result.message)\n : result.code === 100\n ? this.config.loggerProvider.warn(result.message)\n : this.config.loggerProvider.error(result.message);\n return [2 /*return*/, result];\n case 2:\n e_2 = _a.sent();\n message = String(e_2);\n this.config.loggerProvider.error(message);\n result = buildResult(event, 0, message);\n return [2 /*return*/, result];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n AmplitudeCore.prototype.setOptOut = function (optOut) {\n if (!this.isReady) {\n this.q.push(this._setOptOut.bind(this, Boolean(optOut)));\n return;\n }\n this._setOptOut(optOut);\n };\n AmplitudeCore.prototype._setOptOut = function (optOut) {\n if (this.config.optOut !== optOut) {\n this.timeline.onOptOutChanged(optOut);\n this.config.optOut = Boolean(optOut);\n }\n };\n AmplitudeCore.prototype.flush = function () {\n return returnWrapper(this.timeline.flush());\n };\n AmplitudeCore.prototype.plugin = function (name) {\n var plugin = this.timeline.plugins.find(function (plugin) { return plugin.name === name; });\n if (plugin === undefined) {\n this.config.loggerProvider.debug(\"Cannot find plugin with name \".concat(name));\n return undefined;\n }\n return plugin;\n };\n AmplitudeCore.prototype.plugins = function (pluginClass) {\n return this.timeline.plugins.filter(function (plugin) { return plugin instanceof pluginClass; });\n };\n return AmplitudeCore;\n}());\nexport { AmplitudeCore };\n//# sourceMappingURL=core-client.js.map","export var SUCCESS_MESSAGE = 'Event tracked successfully';\nexport var UNEXPECTED_ERROR_MESSAGE = 'Unexpected error occurred';\nexport var MAX_RETRIES_EXCEEDED_MESSAGE = 'Event rejected due to exceeded retry count';\nexport var OPT_OUT_MESSAGE = 'Event skipped due to optOut config';\nexport var MISSING_API_KEY_MESSAGE = 'Event rejected due to missing API key';\nexport var INVALID_API_KEY = 'Invalid API key';\nexport var CLIENT_NOT_INITIALIZED = 'Client not initialized';\n//# sourceMappingURL=messages.js.map","// Creates an array of elements split into groups the length of size.\n// If array can't be split evenly, the final chunk will be the remaining elements.\n// Works similary as https://lodash.com/docs/4.17.15#chunk\nexport var chunk = function (arr, size) {\n var chunkSize = Math.max(size, 1);\n return arr.reduce(function (chunks, element, index) {\n var chunkIndex = Math.floor(index / chunkSize);\n if (!chunks[chunkIndex]) {\n chunks[chunkIndex] = [];\n }\n chunks[chunkIndex].push(element);\n return chunks;\n }, []);\n};\n//# sourceMappingURL=chunk.js.map","export var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"None\"] = 0] = \"None\";\n LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n LogLevel[LogLevel[\"Debug\"] = 4] = \"Debug\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=loglevel.js.map","import { LogLevel } from './types/loglevel';\nvar PREFIX = 'Amplitude Logger ';\nvar Logger = /** @class */ (function () {\n function Logger() {\n this.logLevel = LogLevel.None;\n }\n Logger.prototype.disable = function () {\n this.logLevel = LogLevel.None;\n };\n Logger.prototype.enable = function (logLevel) {\n if (logLevel === void 0) { logLevel = LogLevel.Warn; }\n this.logLevel = logLevel;\n };\n Logger.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Verbose) {\n return;\n }\n console.log(\"\".concat(PREFIX, \"[Log]: \").concat(args.join(' ')));\n };\n Logger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Warn) {\n return;\n }\n console.warn(\"\".concat(PREFIX, \"[Warn]: \").concat(args.join(' ')));\n };\n Logger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Error) {\n return;\n }\n console.error(\"\".concat(PREFIX, \"[Error]: \").concat(args.join(' ')));\n };\n Logger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.logLevel < LogLevel.Debug) {\n return;\n }\n // console.debug output is hidden by default in chrome\n console.log(\"\".concat(PREFIX, \"[Debug]: \").concat(args.join(' ')));\n };\n return Logger;\n}());\nexport { Logger };\n//# sourceMappingURL=logger.js.map","import { AMPLITUDE_SERVER_URL, AMPLITUDE_BATCH_SERVER_URL, EU_AMPLITUDE_SERVER_URL, EU_AMPLITUDE_BATCH_SERVER_URL, DEFAULT_INSTANCE_NAME, } from './types/constants';\nimport { Logger } from './logger';\nimport { LogLevel } from './types/loglevel';\nexport var getDefaultConfig = function () { return ({\n flushMaxRetries: 12,\n flushQueueSize: 200,\n flushIntervalMillis: 10000,\n instanceName: DEFAULT_INSTANCE_NAME,\n logLevel: LogLevel.Warn,\n loggerProvider: new Logger(),\n offline: false,\n optOut: false,\n serverUrl: AMPLITUDE_SERVER_URL,\n serverZone: 'US',\n useBatch: false,\n}); };\nvar Config = /** @class */ (function () {\n function Config(options) {\n var _a, _b, _c, _d;\n this._optOut = false;\n var defaultConfig = getDefaultConfig();\n this.apiKey = options.apiKey;\n this.flushIntervalMillis = (_a = options.flushIntervalMillis) !== null && _a !== void 0 ? _a : defaultConfig.flushIntervalMillis;\n this.flushMaxRetries = options.flushMaxRetries || defaultConfig.flushMaxRetries;\n this.flushQueueSize = options.flushQueueSize || defaultConfig.flushQueueSize;\n this.instanceName = options.instanceName || defaultConfig.instanceName;\n this.loggerProvider = options.loggerProvider || defaultConfig.loggerProvider;\n this.logLevel = (_b = options.logLevel) !== null && _b !== void 0 ? _b : defaultConfig.logLevel;\n this.minIdLength = options.minIdLength;\n this.plan = options.plan;\n this.ingestionMetadata = options.ingestionMetadata;\n this.offline = options.offline !== undefined ? options.offline : defaultConfig.offline;\n this.optOut = (_c = options.optOut) !== null && _c !== void 0 ? _c : defaultConfig.optOut;\n this.serverUrl = options.serverUrl;\n this.serverZone = options.serverZone || defaultConfig.serverZone;\n this.storageProvider = options.storageProvider;\n this.transportProvider = options.transportProvider;\n this.useBatch = (_d = options.useBatch) !== null && _d !== void 0 ? _d : defaultConfig.useBatch;\n this.loggerProvider.enable(this.logLevel);\n var serverConfig = createServerConfig(options.serverUrl, options.serverZone, options.useBatch);\n this.serverZone = serverConfig.serverZone;\n this.serverUrl = serverConfig.serverUrl;\n }\n Object.defineProperty(Config.prototype, \"optOut\", {\n get: function () {\n return this._optOut;\n },\n set: function (optOut) {\n this._optOut = optOut;\n },\n enumerable: false,\n configurable: true\n });\n return Config;\n}());\nexport { Config };\nexport var getServerUrl = function (serverZone, useBatch) {\n if (serverZone === 'EU') {\n return useBatch ? EU_AMPLITUDE_BATCH_SERVER_URL : EU_AMPLITUDE_SERVER_URL;\n }\n return useBatch ? AMPLITUDE_BATCH_SERVER_URL : AMPLITUDE_SERVER_URL;\n};\nexport var createServerConfig = function (serverUrl, serverZone, useBatch) {\n if (serverUrl === void 0) { serverUrl = ''; }\n if (serverZone === void 0) { serverZone = getDefaultConfig().serverZone; }\n if (useBatch === void 0) { useBatch = getDefaultConfig().useBatch; }\n if (serverUrl) {\n return { serverUrl: serverUrl, serverZone: undefined };\n }\n var _serverZone = ['US', 'EU'].includes(serverZone) ? serverZone : getDefaultConfig().serverZone;\n return {\n serverZone: _serverZone,\n serverUrl: getServerUrl(_serverZone, useBatch),\n };\n};\nvar RequestMetadata = /** @class */ (function () {\n function RequestMetadata() {\n this.sdk = {\n metrics: {\n histogram: {},\n },\n };\n }\n RequestMetadata.prototype.recordHistogram = function (key, value) {\n this.sdk.metrics.histogram[key] = value;\n };\n return RequestMetadata;\n}());\nexport { RequestMetadata };\nvar HistogramOptions = /** @class */ (function () {\n function HistogramOptions() {\n }\n return HistogramOptions;\n}());\n//# sourceMappingURL=config.js.map","/**\n * Checks if an HTTP status code indicates success (2xx range)\n * @param code - The HTTP status code to check\n * @returns true if the status code is in the 2xx range, false otherwise\n */\nexport function isSuccessStatusCode(code) {\n return code >= 200 && code < 300;\n}\n//# sourceMappingURL=status-code.js.map","import { __assign, __values } from \"tslib\";\nimport { LogLevel } from '../types/loglevel';\nexport var getStacktrace = function (ignoreDepth) {\n if (ignoreDepth === void 0) { ignoreDepth = 0; }\n var trace = new Error().stack || '';\n return trace\n .split('\\n')\n .slice(2 + ignoreDepth)\n .map(function (text) { return text.trim(); });\n};\n// This hook makes sure we always get the latest logger and logLevel.\nexport var getClientLogConfig = function (client) { return function () {\n var _a = __assign({}, client.config), logger = _a.loggerProvider, logLevel = _a.logLevel;\n return {\n logger: logger,\n logLevel: logLevel,\n };\n}; };\n// This is a convenient function to get the attribute from object with string path, similar to lodash '#get'.\nexport var getValueByStringPath = function (obj, path) {\n var e_1, _a;\n path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\n path = path.replace(/^\\./, ''); // strip a leading dot\n try {\n for (var _b = __values(path.split('.')), _c = _b.next(); !_c.done; _c = _b.next()) {\n var attr = _c.value;\n if (attr in obj) {\n obj = obj[attr];\n }\n else {\n return;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return obj;\n};\nexport var getClientStates = function (client, paths) { return function () {\n var e_2, _a;\n var res = {};\n try {\n for (var paths_1 = __values(paths), paths_1_1 = paths_1.next(); !paths_1_1.done; paths_1_1 = paths_1.next()) {\n var path = paths_1_1.value;\n res[path] = getValueByStringPath(client, path);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (paths_1_1 && !paths_1_1.done && (_a = paths_1.return)) _a.call(paths_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n return res;\n}; };\nexport var debugWrapper = function (fn, fnName, getLogConfig, getStates, fnContext) {\n if (fnContext === void 0) { fnContext = null; }\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var _a = getLogConfig(), logger = _a.logger, logLevel = _a.logLevel;\n // return early if possible to reduce overhead\n if ((logLevel && logLevel < LogLevel.Debug) || !logLevel || !logger) {\n return fn.apply(fnContext, args);\n }\n var debugContext = {\n type: 'invoke public method',\n name: fnName,\n args: args,\n stacktrace: getStacktrace(1),\n time: {\n start: new Date().toISOString(),\n },\n states: {},\n };\n if (getStates && debugContext.states) {\n debugContext.states.before = getStates();\n }\n var result = fn.apply(fnContext, args);\n if (result && result.promise) {\n // if result is a promise, add the callback\n result.promise.then(function () {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n });\n }\n else {\n if (getStates && debugContext.states) {\n debugContext.states.after = getStates();\n }\n if (debugContext.time) {\n debugContext.time.end = new Date().toISOString();\n }\n logger.debug(JSON.stringify(debugContext, null, 2));\n }\n return result;\n };\n};\n//# sourceMappingURL=debug.js.map","import { __awaiter, __generator, __read, __rest, __spreadArray } from \"tslib\";\nimport { Status } from '../types/status';\nimport { INVALID_API_KEY, MAX_RETRIES_EXCEEDED_MESSAGE, MISSING_API_KEY_MESSAGE, SUCCESS_MESSAGE, UNEXPECTED_ERROR_MESSAGE, } from '../types/messages';\nimport { STORAGE_PREFIX } from '../types/constants';\nimport { chunk } from '../utils/chunk';\nimport { buildResult } from '../utils/result-builder';\nimport { createServerConfig, RequestMetadata } from '../config';\nimport { UUID } from '../utils/uuid';\nimport { isSuccessStatusCode } from '../utils/status-code';\nimport { getStacktrace } from '../utils/debug';\nfunction getErrorMessage(error) {\n if (error instanceof Error)\n return error.message;\n return String(error);\n}\nexport function getResponseBodyString(res) {\n var responseBodyString = '';\n try {\n if ('body' in res) {\n responseBodyString = JSON.stringify(res.body, null, 2);\n }\n }\n catch (_a) {\n // to avoid crash, but don't care about the error, add comment to avoid empty block lint error\n }\n return responseBodyString;\n}\nvar Destination = /** @class */ (function () {\n function Destination(context) {\n this.name = 'amplitude';\n this.type = 'destination';\n this.retryTimeout = 1000;\n this.throttleTimeout = 30000;\n this.storageKey = '';\n // Indicator of whether events that are scheduled (but not flushed yet).\n // When flush:\n // 1. assign `scheduleId` to `flushId`\n // 2. set `scheduleId` to null\n this.scheduleId = null;\n // Timeout in milliseconds of current schedule\n this.scheduledTimeout = 0;\n // Indicator of whether current flush resolves.\n // When flush resolves, set `flushId` to null\n this.flushId = null;\n this.queue = [];\n this.diagnosticsClient = context === null || context === void 0 ? void 0 : context.diagnosticsClient;\n }\n Destination.prototype.setup = function (config) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var unsent;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.config = config;\n this.storageKey = \"\".concat(STORAGE_PREFIX, \"_\").concat(this.config.apiKey.substring(0, 10));\n return [4 /*yield*/, ((_a = this.config.storageProvider) === null || _a === void 0 ? void 0 : _a.get(this.storageKey))];\n case 1:\n unsent = _b.sent();\n if (unsent && unsent.length > 0) {\n void Promise.all(unsent.map(function (event) { return _this.execute(event); })).catch();\n }\n return [2 /*return*/, Promise.resolve(undefined)];\n }\n });\n });\n };\n Destination.prototype.execute = function (event) {\n var _this = this;\n // Assign insert_id for dropping invalid event later\n if (!event.insert_id) {\n event.insert_id = UUID();\n }\n return new Promise(function (resolve) {\n var context = {\n event: event,\n attempts: 0,\n callback: function (result) { return resolve(result); },\n timeout: 0,\n };\n _this.queue.push(context);\n _this.schedule(_this.config.flushIntervalMillis);\n _this.saveEvents();\n });\n };\n Destination.prototype.removeEventsExceedFlushMaxRetries = function (list) {\n var _this = this;\n return list.filter(function (context) {\n context.attempts += 1;\n if (context.attempts < _this.config.flushMaxRetries) {\n return true;\n }\n void _this.fulfillRequest([context], 500, MAX_RETRIES_EXCEEDED_MESSAGE);\n return false;\n });\n };\n Destination.prototype.scheduleEvents = function (list) {\n var _this = this;\n list.forEach(function (context) {\n _this.schedule(context.timeout === 0 ? _this.config.flushIntervalMillis : context.timeout);\n });\n };\n // Schedule a flush in timeout when\n // 1. No schedule\n // 2. Timeout greater than existing timeout.\n // This makes sure that when throttled, no flush when throttle timeout expires.\n Destination.prototype.schedule = function (timeout) {\n var _this = this;\n if (this.config.offline) {\n return;\n }\n if (this.scheduleId === null || (this.scheduleId && timeout > this.scheduledTimeout)) {\n if (this.scheduleId) {\n clearTimeout(this.scheduleId);\n }\n this.scheduledTimeout = timeout;\n this.scheduleId = setTimeout(function () {\n _this.queue = _this.queue.map(function (context) {\n context.timeout = 0;\n return context;\n });\n void _this.flush(true);\n }, timeout);\n return;\n }\n };\n // Mark current schedule is flushed.\n Destination.prototype.resetSchedule = function () {\n this.scheduleId = null;\n this.scheduledTimeout = 0;\n };\n // Flush all events regardless of their timeout\n Destination.prototype.flush = function (useRetry) {\n if (useRetry === void 0) { useRetry = false; }\n return __awaiter(this, void 0, void 0, function () {\n var list, later, batches;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Skip flush if offline\n if (this.config.offline) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush while offline.');\n return [2 /*return*/];\n }\n if (this.flushId) {\n this.resetSchedule();\n this.config.loggerProvider.debug('Skipping flush because previous flush has not resolved.');\n return [2 /*return*/];\n }\n this.flushId = this.scheduleId;\n this.resetSchedule();\n list = [];\n later = [];\n this.queue.forEach(function (context) { return (context.timeout === 0 ? list.push(context) : later.push(context)); });\n batches = chunk(list, this.config.flushQueueSize);\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n return [4 /*yield*/, batches.reduce(function (promise, batch) { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, promise];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.send(batch, useRetry)];\n case 2: return [2 /*return*/, _a.sent()];\n }\n });\n }); }, Promise.resolve())];\n case 1:\n // Promise.all() doesn't guarantee resolve order.\n // Sequentially resolve to make sure backend receives events in order\n _a.sent();\n // Mark current flush is done\n this.flushId = null;\n this.scheduleEvents(this.queue);\n return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.send = function (list, useRetry) {\n var _a;\n if (useRetry === void 0) { useRetry = true; }\n return __awaiter(this, void 0, void 0, function () {\n var payload, serverUrl, res, e_1, errorMessage;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.config.apiKey) {\n return [2 /*return*/, this.fulfillRequest(list, 400, MISSING_API_KEY_MESSAGE)];\n }\n payload = {\n api_key: this.config.apiKey,\n events: list.map(function (context) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _a = context.event, extra = _a.extra, eventWithoutExtra = __rest(_a, [\"extra\"]);\n return eventWithoutExtra;\n }),\n options: {\n min_id_length: this.config.minIdLength,\n },\n client_upload_time: new Date().toISOString(),\n request_metadata: this.config.requestMetadata,\n };\n this.config.requestMetadata = new RequestMetadata();\n _b.label = 1;\n case 1:\n _b.trys.push([1, 3, , 4]);\n serverUrl = createServerConfig(this.config.serverUrl, this.config.serverZone, this.config.useBatch).serverUrl;\n return [4 /*yield*/, this.config.transportProvider.send(serverUrl, payload)];\n case 2:\n res = _b.sent();\n if (res === null) {\n this.fulfillRequest(list, 0, UNEXPECTED_ERROR_MESSAGE);\n return [2 /*return*/];\n }\n if (!useRetry) {\n if ('body' in res) {\n this.fulfillRequest(list, res.statusCode, \"\".concat(res.status, \": \").concat(getResponseBodyString(res)));\n }\n else {\n this.fulfillRequest(list, res.statusCode, res.status);\n }\n return [2 /*return*/];\n }\n this.handleResponse(res, list);\n return [3 /*break*/, 4];\n case 3:\n e_1 = _b.sent();\n errorMessage = getErrorMessage(e_1);\n this.config.loggerProvider.error(errorMessage);\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('analytics.events.unsuccessful.from.catch.error', {\n events: list.map(function (context) { return context.event.event_type; }),\n message: errorMessage,\n stack_trace: getStacktrace(),\n });\n this.handleResponse({ status: Status.Failed, statusCode: 0 }, list);\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n Destination.prototype.handleResponse = function (res, list) {\n var _a;\n if (!isSuccessStatusCode(res.statusCode)) {\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.recordEvent('analytics.events.unsuccessful', {\n events: list.map(function (context) { return context.event.event_type; }),\n code: res.statusCode,\n status: res.status,\n body: getResponseBodyString(res),\n stack_trace: getStacktrace(),\n });\n }\n var status = res.status;\n switch (status) {\n case Status.Success: {\n this.handleSuccessResponse(res, list);\n break;\n }\n case Status.Invalid: {\n this.handleInvalidResponse(res, list);\n break;\n }\n case Status.PayloadTooLarge: {\n this.handlePayloadTooLargeResponse(res, list);\n break;\n }\n case Status.RateLimit: {\n this.handleRateLimitResponse(res, list);\n break;\n }\n default: {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(\"{code: 0, error: \\\"Status '\".concat(status, \"' provided for \").concat(list.length, \" events\\\"}\"));\n this.handleOtherResponse(list);\n break;\n }\n }\n };\n Destination.prototype.handleSuccessResponse = function (res, list) {\n this.fulfillRequest(list, res.statusCode, SUCCESS_MESSAGE);\n };\n Destination.prototype.handleInvalidResponse = function (res, list) {\n var _this = this;\n if (res.body.missingField || res.body.error.startsWith(INVALID_API_KEY)) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n var dropIndex = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(Object.values(res.body.eventsWithInvalidFields)), false), __read(Object.values(res.body.eventsWithMissingFields)), false), __read(Object.values(res.body.eventsWithInvalidIdLengths)), false), __read(res.body.silencedEvents), false).flat();\n var dropIndexSet = new Set(dropIndex);\n var retry = list.filter(function (context, index) {\n if (dropIndexSet.has(index)) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handlePayloadTooLargeResponse = function (res, list) {\n if (list.length === 1) {\n this.fulfillRequest(list, res.statusCode, res.body.error);\n return;\n }\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n this.config.flushQueueSize /= 2;\n var tryable = this.removeEventsExceedFlushMaxRetries(list);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleRateLimitResponse = function (res, list) {\n var _this = this;\n var dropUserIds = Object.keys(res.body.exceededDailyQuotaUsers);\n var dropDeviceIds = Object.keys(res.body.exceededDailyQuotaDevices);\n var throttledIndex = res.body.throttledEvents;\n var dropUserIdsSet = new Set(dropUserIds);\n var dropDeviceIdsSet = new Set(dropDeviceIds);\n var throttledIndexSet = new Set(throttledIndex);\n var retry = list.filter(function (context, index) {\n if ((context.event.user_id && dropUserIdsSet.has(context.event.user_id)) ||\n (context.event.device_id && dropDeviceIdsSet.has(context.event.device_id))) {\n _this.fulfillRequest([context], res.statusCode, res.body.error);\n return;\n }\n if (throttledIndexSet.has(index)) {\n context.timeout = _this.throttleTimeout;\n }\n return true;\n });\n if (retry.length > 0) {\n // log intermediate event status before retry\n this.config.loggerProvider.warn(getResponseBodyString(res));\n }\n var tryable = this.removeEventsExceedFlushMaxRetries(retry);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.handleOtherResponse = function (list) {\n var _this = this;\n var later = list.map(function (context) {\n context.timeout = context.attempts * _this.retryTimeout;\n return context;\n });\n var tryable = this.removeEventsExceedFlushMaxRetries(later);\n this.scheduleEvents(tryable);\n };\n Destination.prototype.fulfillRequest = function (list, code, message) {\n var _a, _b, _c;\n // Record diagnostics for dropped events (non-success status codes)\n if (!isSuccessStatusCode(code)) {\n (_a = this.diagnosticsClient) === null || _a === void 0 ? void 0 : _a.increment('analytics.events.dropped', list.length);\n (_b = this.diagnosticsClient) === null || _b === void 0 ? void 0 : _b.recordEvent('analytics.events.dropped', {\n events: list.map(function (context) { return context.event.event_type; }),\n code: code,\n message: message,\n stack_trace: getStacktrace(),\n });\n }\n else {\n (_c = this.diagnosticsClient) === null || _c === void 0 ? void 0 : _c.increment('analytics.events.sent', list.length);\n }\n this.removeEvents(list);\n list.forEach(function (context) { return context.callback(buildResult(context.event, code, message)); });\n };\n /**\n * This is called on\n * 1) new events are added to queue; or\n * 2) response comes back for a request\n *\n * Update the event storage based on the queue\n */\n Destination.prototype.saveEvents = function () {\n if (!this.config.storageProvider) {\n return;\n }\n var updatedEvents = this.queue.map(function (context) { return context.event; });\n void this.config.storageProvider.set(this.storageKey, updatedEvents);\n };\n /**\n * This is called on response comes back for a request\n */\n Destination.prototype.removeEvents = function (eventsToRemove) {\n this.queue = this.queue.filter(function (queuedContext) { return !eventsToRemove.some(function (context) { return context.event.insert_id === queuedContext.event.insert_id; }); });\n this.saveEvents();\n };\n return Destination;\n}());\nexport { Destination };\n//# sourceMappingURL=destination.js.map","var ApplicationContextProviderImpl = /** @class */ (function () {\n function ApplicationContextProviderImpl() {\n }\n ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n return {\n versionName: this.versionName,\n language: getLanguage(),\n platform: 'Web',\n os: undefined,\n deviceModel: undefined,\n };\n };\n return ApplicationContextProviderImpl;\n}());\nvar getLanguage = function () {\n return ((typeof navigator !== 'undefined' &&\n ((navigator.languages && navigator.languages[0]) ||\n navigator.language)) ||\n '');\n};\n\nvar EventBridgeImpl = /** @class */ (function () {\n function EventBridgeImpl() {\n this.queue = [];\n }\n EventBridgeImpl.prototype.logEvent = function (event) {\n if (!this.receiver) {\n if (this.queue.length < 512) {\n this.queue.push(event);\n }\n }\n else {\n this.receiver(event);\n }\n };\n EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n this.receiver = receiver;\n if (this.queue.length > 0) {\n this.queue.forEach(function (event) {\n receiver(event);\n });\n this.queue = [];\n }\n };\n return EventBridgeImpl;\n}());\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator,\n m = s && o[s],\n i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return {\n value: o && o[i++],\n done: !o\n };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o),\n r,\n ar = [],\n e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n } catch (error) {\n e = {\n error: error\n };\n } finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n } finally {\n if (e) throw e.error;\n }\n }\n return ar;\n}\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar isEqual = function (obj1, obj2) {\n var e_1, _a;\n var primitive = ['string', 'number', 'boolean', 'undefined'];\n var typeA = typeof obj1;\n var typeB = typeof obj2;\n if (typeA !== typeB) {\n return false;\n }\n try {\n for (var primitive_1 = __values(primitive), primitive_1_1 = primitive_1.next(); !primitive_1_1.done; primitive_1_1 = primitive_1.next()) {\n var p = primitive_1_1.value;\n if (p === typeA) {\n return obj1 === obj2;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (primitive_1_1 && !primitive_1_1.done && (_a = primitive_1.return)) _a.call(primitive_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // check null\n if (obj1 == null && obj2 == null) {\n return true;\n }\n else if (obj1 == null || obj2 == null) {\n return false;\n }\n // if got here - objects\n if (obj1.length !== obj2.length) {\n return false;\n }\n //check if arrays\n var isArrayA = Array.isArray(obj1);\n var isArrayB = Array.isArray(obj2);\n if (isArrayA !== isArrayB) {\n return false;\n }\n if (isArrayA && isArrayB) {\n //arrays\n for (var i = 0; i < obj1.length; i++) {\n if (!isEqual(obj1[i], obj2[i])) {\n return false;\n }\n }\n }\n else {\n //objects\n var sorted1 = Object.keys(obj1).sort();\n var sorted2 = Object.keys(obj2).sort();\n if (!isEqual(sorted1, sorted2)) {\n return false;\n }\n //compare object values\n var result_1 = true;\n Object.keys(obj1).forEach(function (key) {\n if (!isEqual(obj1[key], obj2[key])) {\n result_1 = false;\n }\n });\n return result_1;\n }\n return true;\n};\n\nvar ID_OP_SET = '$set';\nvar ID_OP_UNSET = '$unset';\nvar ID_OP_CLEAR_ALL = '$clearAll';\n// Polyfill for Object.entries\nif (!Object.entries) {\n Object.entries = function (obj) {\n var ownProps = Object.keys(obj);\n var i = ownProps.length;\n var resArray = new Array(i);\n while (i--) {\n resArray[i] = [ownProps[i], obj[ownProps[i]]];\n }\n return resArray;\n };\n}\nvar IdentityStoreImpl = /** @class */ (function () {\n function IdentityStoreImpl() {\n this.identity = { userProperties: {} };\n this.listeners = new Set();\n }\n IdentityStoreImpl.prototype.editIdentity = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var self = this;\n var actingUserProperties = __assign({}, this.identity.userProperties);\n var actingIdentity = __assign(__assign({}, this.identity), { userProperties: actingUserProperties });\n return {\n setUserId: function (userId) {\n actingIdentity.userId = userId;\n return this;\n },\n setDeviceId: function (deviceId) {\n actingIdentity.deviceId = deviceId;\n return this;\n },\n setUserProperties: function (userProperties) {\n actingIdentity.userProperties = userProperties;\n return this;\n },\n setOptOut: function (optOut) {\n actingIdentity.optOut = optOut;\n return this;\n },\n updateUserProperties: function (actions) {\n var e_1, _a, e_2, _b, e_3, _c;\n var actingProperties = actingIdentity.userProperties || {};\n try {\n for (var _d = __values(Object.entries(actions)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var _f = __read(_e.value, 2), action = _f[0], properties = _f[1];\n switch (action) {\n case ID_OP_SET:\n try {\n for (var _g = (e_2 = void 0, __values(Object.entries(properties))), _h = _g.next(); !_h.done; _h = _g.next()) {\n var _j = __read(_h.value, 2), key = _j[0], value = _j[1];\n actingProperties[key] = value;\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n }\n finally { if (e_2) throw e_2.error; }\n }\n break;\n case ID_OP_UNSET:\n try {\n for (var _k = (e_3 = void 0, __values(Object.keys(properties))), _l = _k.next(); !_l.done; _l = _k.next()) {\n var key = _l.value;\n delete actingProperties[key];\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n }\n finally { if (e_3) throw e_3.error; }\n }\n break;\n case ID_OP_CLEAR_ALL:\n actingProperties = {};\n break;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_1) throw e_1.error; }\n }\n actingIdentity.userProperties = actingProperties;\n return this;\n },\n commit: function () {\n self.setIdentity(actingIdentity);\n return this;\n },\n };\n };\n IdentityStoreImpl.prototype.getIdentity = function () {\n return __assign({}, this.identity);\n };\n IdentityStoreImpl.prototype.setIdentity = function (identity) {\n var originalIdentity = __assign({}, this.identity);\n this.identity = __assign({}, identity);\n if (!isEqual(originalIdentity, this.identity)) {\n this.listeners.forEach(function (listener) {\n listener(identity);\n });\n }\n };\n IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n this.listeners.add(listener);\n };\n IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n this.listeners.delete(listener);\n };\n return IdentityStoreImpl;\n}());\n\nvar safeGlobal = typeof globalThis !== 'undefined'\n ? globalThis\n : typeof global !== 'undefined'\n ? global\n : self;\n\nvar AnalyticsConnector = /** @class */ (function () {\n function AnalyticsConnector() {\n this.identityStore = new IdentityStoreImpl();\n this.eventBridge = new EventBridgeImpl();\n this.applicationContextProvider = new ApplicationContextProviderImpl();\n }\n AnalyticsConnector.getInstance = function (instanceName) {\n if (!safeGlobal['analyticsConnectorInstances']) {\n safeGlobal['analyticsConnectorInstances'] = {};\n }\n if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n safeGlobal['analyticsConnectorInstances'][instanceName] =\n new AnalyticsConnector();\n }\n return safeGlobal['analyticsConnectorInstances'][instanceName];\n };\n return AnalyticsConnector;\n}());\n\nexport { AnalyticsConnector };\n","/**\n * @deprecated use ServerZoneType instead\n */\nexport var ServerZone;\n(function (ServerZone) {\n ServerZone[\"US\"] = \"US\";\n ServerZone[\"EU\"] = \"EU\";\n /**\n * Add for session-replay-browser migration from analytics-type v1.x.\n */\n ServerZone[\"STAGING\"] = \"STAGING\";\n})(ServerZone || (ServerZone = {}));\n//# sourceMappingURL=server-zone.js.map","import { AnalyticsConnector } from '@amplitude/analytics-connector';\nimport { DEFAULT_INSTANCE_NAME } from './types/constants';\nexport var getAnalyticsConnector = function (instanceName) {\n if (instanceName === void 0) { instanceName = DEFAULT_INSTANCE_NAME; }\n return AnalyticsConnector.getInstance(instanceName);\n};\nexport var setConnectorUserId = function (userId, instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setUserId(userId).commit();\n};\nexport var setConnectorDeviceId = function (deviceId, instanceName) {\n getAnalyticsConnector(instanceName).identityStore.editIdentity().setDeviceId(deviceId).commit();\n};\n//# sourceMappingURL=analytics-connector.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { getAnalyticsConnector } from '../analytics-connector';\nvar IdentityEventSender = /** @class */ (function () {\n function IdentityEventSender() {\n this.name = 'identity';\n this.type = 'before';\n this.identityStore = getAnalyticsConnector().identityStore;\n }\n IdentityEventSender.prototype.execute = function (context) {\n return __awaiter(this, void 0, void 0, function () {\n var userProperties;\n return __generator(this, function (_a) {\n userProperties = context.user_properties;\n if (userProperties) {\n this.identityStore.editIdentity().updateUserProperties(userProperties).commit();\n }\n return [2 /*return*/, context];\n });\n });\n };\n IdentityEventSender.prototype.setup = function (config) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (config.instanceName) {\n this.identityStore = getAnalyticsConnector(config.instanceName).identityStore;\n }\n return [2 /*return*/];\n });\n });\n };\n return IdentityEventSender;\n}());\nexport { IdentityEventSender };\n//# sourceMappingURL=identity.js.map","export var isNewSession = function (sessionTimeout, lastEventTime) {\n if (lastEventTime === void 0) { lastEventTime = Date.now(); }\n var currentTime = Date.now();\n var timeSinceLastEvent = currentTime - lastEventTime;\n return timeSinceLastEvent > sessionTimeout;\n};\n//# sourceMappingURL=session.js.map","import { AMPLITUDE_PREFIX } from './types/constants';\nexport var getCookieName = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\nexport var getOldCookieName = function (apiKey) {\n return \"\".concat(AMPLITUDE_PREFIX.toLowerCase(), \"_\").concat(apiKey.substring(0, 6));\n};\n//# sourceMappingURL=cookie-name.js.map","export var getLanguage = function () {\n var _a, _b, _c, _d;\n if (typeof navigator === 'undefined')\n return '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n var userLanguage = navigator.userLanguage;\n return (_d = (_c = (_b = (_a = navigator.languages) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : navigator.language) !== null && _c !== void 0 ? _c : userLanguage) !== null && _d !== void 0 ? _d : '';\n};\n//# sourceMappingURL=language.js.map","import { getGlobalScope } from './global-scope';\nexport var getQueryParams = function () {\n var _a;\n var globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!((_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) === null || _a === void 0 ? void 0 : _a.search)) {\n return {};\n }\n var pairs = globalScope.location.search.substring(1).split('&').filter(Boolean);\n var params = pairs.reduce(function (acc, curr) {\n var query = curr.split('=', 2);\n var key = tryDecodeURIComponent(query[0]);\n var value = tryDecodeURIComponent(query[1]);\n if (!value) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n return params;\n};\nexport var tryDecodeURIComponent = function (value) {\n if (value === void 0) { value = ''; }\n try {\n return decodeURIComponent(value);\n }\n catch (_a) {\n return '';\n }\n};\n//# sourceMappingURL=query-params.js.map","/**\n * Checks if a given URL matches any pattern in an allowlist of URLs or regex patterns.\n * @param url - The URL to check\n * @param allowlist - Array of allowed URLs (strings) or regex patterns\n * @returns true if the URL matches any pattern in the allowlist, false otherwise\n */\nexport var isUrlMatchAllowlist = function (url, allowlist) {\n if (!allowlist || !allowlist.length) {\n return true;\n }\n return allowlist.some(function (allowedUrl) {\n if (typeof allowedUrl === 'string') {\n return url === allowedUrl;\n }\n return url.match(allowedUrl);\n });\n};\nexport var getDecodeURI = function (locationStr, loggerProvider) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n};\n//# sourceMappingURL=url-utils.js.map","export var generateHashCode = function (str) {\n var hash = 0;\n if (str.length === 0)\n return hash;\n for (var i = 0; i < str.length; i++) {\n var chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0;\n }\n return hash;\n};\nexport var isTimestampInSample = function (timestamp, sampleRate) {\n var hashNumber = generateHashCode(timestamp.toString());\n var absHash = Math.abs(hashNumber);\n var absHashMultiply = absHash * 31;\n var mod = absHashMultiply % 1000000;\n return mod / 1000000 < sampleRate;\n};\n// TODO(xinyi): replace the temp one in diagnostics client after the fix\n// istanbul ignore next\nexport var isTimestampInSampleTemp = function (timestamp, sampleRate) {\n var hashNumber = generateHashCode(timestamp.toString());\n var absHash = Math.abs(hashNumber);\n var absHashMultiply = absHash * 31;\n var mod = absHashMultiply % 100000;\n return mod / 100000 < sampleRate;\n};\n//# sourceMappingURL=sampling.js.map","import { __awaiter, __generator } from \"tslib\";\nvar MemoryStorage = /** @class */ (function () {\n function MemoryStorage() {\n this.memoryStorage = new Map();\n }\n MemoryStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, true];\n });\n });\n };\n MemoryStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this.memoryStorage.get(key)];\n });\n });\n };\n MemoryStorage.prototype.getRaw = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.get(key)];\n case 1:\n value = _a.sent();\n return [2 /*return*/, value ? JSON.stringify(value) : undefined];\n }\n });\n });\n };\n MemoryStorage.prototype.set = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.set(key, value);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.delete(key);\n return [2 /*return*/];\n });\n });\n };\n MemoryStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.memoryStorage.clear();\n return [2 /*return*/];\n });\n });\n };\n return MemoryStorage;\n}());\nexport { MemoryStorage };\n//# sourceMappingURL=memory.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar CookieStorage = /** @class */ (function () {\n function CookieStorage(options) {\n this.options = __assign({}, options);\n }\n CookieStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var testStorage, testKey, value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n /* istanbul ignore if */\n if (!getGlobalScope()) {\n return [2 /*return*/, false];\n }\n CookieStorage.testValue = String(Date.now());\n testStorage = new CookieStorage(this.options);\n testKey = 'AMP_TEST';\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, 5, 7]);\n return [4 /*yield*/, testStorage.set(testKey, CookieStorage.testValue)];\n case 2:\n _b.sent();\n return [4 /*yield*/, testStorage.get(testKey)];\n case 3:\n value = _b.sent();\n return [2 /*return*/, value === CookieStorage.testValue];\n case 4:\n _a = _b.sent();\n /* istanbul ignore next */\n return [2 /*return*/, false];\n case 5: return [4 /*yield*/, testStorage.remove(testKey)];\n case 6:\n _b.sent();\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.get = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var value, decodedValue;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _b.sent();\n if (!value) {\n return [2 /*return*/, undefined];\n }\n try {\n decodedValue = (_a = decodeCookiesAsDefault(value)) !== null && _a !== void 0 ? _a : decodeCookiesWithDoubleUrlEncoding(value);\n if (decodedValue === undefined) {\n console.error(\"Amplitude Logger [Error]: Failed to decode cookie value for key: \".concat(key, \", value: \").concat(value));\n return [2 /*return*/, undefined];\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [2 /*return*/, JSON.parse(decodedValue)];\n }\n catch (_c) {\n console.error(\"Amplitude Logger [Error]: Failed to parse cookie value for key: \".concat(key, \", value: \").concat(value));\n return [2 /*return*/, undefined];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.getRaw = function (key) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function () {\n var globalScope, cookie, match;\n return __generator(this, function (_c) {\n globalScope = getGlobalScope();\n cookie = (_b = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document) === null || _a === void 0 ? void 0 : _a.cookie.split('; ')) !== null && _b !== void 0 ? _b : [];\n match = cookie.find(function (c) { return c.indexOf(key + '=') === 0; });\n if (!match) {\n return [2 /*return*/, undefined];\n }\n return [2 /*return*/, match.substring(key.length + 1)];\n });\n });\n };\n CookieStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n var expirationDays, expires, expireDate, date, str, globalScope, errorMessage;\n return __generator(this, function (_b) {\n try {\n expirationDays = (_a = this.options.expirationDays) !== null && _a !== void 0 ? _a : 0;\n expires = value !== null ? expirationDays : -1;\n expireDate = undefined;\n if (expires) {\n date = new Date();\n date.setTime(date.getTime() + expires * 24 * 60 * 60 * 1000);\n expireDate = date;\n }\n str = \"\".concat(key, \"=\").concat(btoa(encodeURIComponent(JSON.stringify(value))));\n if (expireDate) {\n str += \"; expires=\".concat(expireDate.toUTCString());\n }\n str += '; path=/';\n if (this.options.domain) {\n str += \"; domain=\".concat(this.options.domain);\n }\n if (this.options.secure) {\n str += '; Secure';\n }\n if (this.options.sameSite) {\n str += \"; SameSite=\".concat(this.options.sameSite);\n }\n globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.document.cookie = str;\n }\n }\n catch (error) {\n errorMessage = error instanceof Error ? error.message : String(error);\n console.error(\"Amplitude Logger [Error]: Failed to set cookie for key: \".concat(key, \". Error: \").concat(errorMessage));\n }\n return [2 /*return*/];\n });\n });\n };\n CookieStorage.prototype.remove = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.set(key, null)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n CookieStorage.prototype.reset = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/];\n });\n });\n };\n return CookieStorage;\n}());\nexport { CookieStorage };\nvar decodeCookiesAsDefault = function (value) {\n try {\n return decodeURIComponent(atob(value));\n }\n catch (_a) {\n return undefined;\n }\n};\nvar decodeCookiesWithDoubleUrlEncoding = function (value) {\n // Modern Ruby (v7+) automatically encodes cookies with URL encoding by\n // https://api.rubyonrails.org/classes/ActionDispatch/Cookies.html\n try {\n return decodeURIComponent(atob(decodeURIComponent(value)));\n }\n catch (_a) {\n return undefined;\n }\n};\n//# sourceMappingURL=cookie.js.map","import { AMPLITUDE_PREFIX } from '../types/constants';\nexport var getStorageKey = function (apiKey, postKey, limit) {\n if (postKey === void 0) { postKey = ''; }\n if (limit === void 0) { limit = 10; }\n return [AMPLITUDE_PREFIX, postKey, apiKey.substring(0, limit)].filter(Boolean).join('_');\n};\n//# sourceMappingURL=helpers.js.map","import { __awaiter, __generator } from \"tslib\";\nvar BrowserStorage = /** @class */ (function () {\n function BrowserStorage(storage) {\n this.storage = storage;\n }\n BrowserStorage.prototype.isEnabled = function () {\n return __awaiter(this, void 0, void 0, function () {\n var random, testStorage, testKey, value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n /* istanbul ignore if */\n if (!this.storage) {\n return [2 /*return*/, false];\n }\n random = String(Date.now());\n testStorage = new BrowserStorage(this.storage);\n testKey = 'AMP_TEST';\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, 5, 7]);\n return [4 /*yield*/, testStorage.set(testKey, random)];\n case 2:\n _b.sent();\n return [4 /*yield*/, testStorage.get(testKey)];\n case 3:\n value = _b.sent();\n return [2 /*return*/, value === random];\n case 4:\n _a = _b.sent();\n /* istanbul ignore next */\n return [2 /*return*/, false];\n case 5: return [4 /*yield*/, testStorage.remove(testKey)];\n case 6:\n _b.sent();\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.get = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var value, _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getRaw(key)];\n case 1:\n value = _b.sent();\n if (!value) {\n return [2 /*return*/, undefined];\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return [2 /*return*/, JSON.parse(value)];\n case 2:\n _a = _b.sent();\n console.error(\"[Amplitude] Error: Could not get value from storage\");\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n BrowserStorage.prototype.getRaw = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n return [2 /*return*/, ((_a = this.storage) === null || _a === void 0 ? void 0 : _a.getItem(key)) || undefined];\n });\n });\n };\n BrowserStorage.prototype.set = function (key, value) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.setItem(key, JSON.stringify(value));\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.remove = function (key) {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.removeItem(key);\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n BrowserStorage.prototype.reset = function () {\n var _a;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n try {\n (_a = this.storage) === null || _a === void 0 ? void 0 : _a.clear();\n }\n catch (_c) {\n //\n }\n return [2 /*return*/];\n });\n });\n };\n return BrowserStorage;\n}());\nexport { BrowserStorage };\n//# sourceMappingURL=browser-storage.js.map","import { __awaiter, __generator, __read } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nvar MAX_PERSISTENT_STORAGE_EVENTS_COUNT = 10;\n// Database configuration\nvar DB_VERSION = 1;\n// Table names for different diagnostics types\nexport var TABLE_NAMES = {\n TAGS: 'tags',\n COUNTERS: 'counters',\n HISTOGRAMS: 'histograms',\n EVENTS: 'events',\n INTERNAL: 'internal', // New table for internal storage like flush timestamps\n};\n// Keys for internal storage table\nexport var INTERNAL_KEYS = {\n LAST_FLUSH_TIMESTAMP: 'last_flush_timestamp',\n};\n/**\n * Purpose-specific IndexedDB storage for diagnostics data\n * Provides optimized methods for each type of diagnostics data\n */\nvar DiagnosticsStorage = /** @class */ (function () {\n function DiagnosticsStorage(apiKey, logger) {\n this.dbPromise = null;\n this.logger = logger;\n this.dbName = \"AMP_diagnostics_\".concat(apiKey.substring(0, 10));\n }\n /**\n * Check if IndexedDB is supported in the current environment\n * @returns true if IndexedDB is available, false otherwise\n */\n DiagnosticsStorage.isSupported = function () {\n var _a;\n return ((_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.indexedDB) !== undefined;\n };\n DiagnosticsStorage.prototype.getDB = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (!this.dbPromise) {\n this.dbPromise = this.openDB();\n }\n return [2 /*return*/, this.dbPromise];\n });\n });\n };\n DiagnosticsStorage.prototype.openDB = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var request = indexedDB.open(_this.dbName, DB_VERSION);\n request.onerror = function () {\n // Clear dbPromise when it rejects for the first time\n _this.dbPromise = null;\n reject(new Error('Failed to open IndexedDB'));\n };\n request.onsuccess = function () {\n var db = request.result;\n // Clear dbPromise when connection was on but went off later\n db.onclose = function () {\n _this.dbPromise = null;\n _this.logger.debug('DiagnosticsStorage: DB connection closed.');\n };\n db.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: A global database error occurred.', event);\n db.close();\n };\n resolve(db);\n };\n request.onupgradeneeded = function (event) {\n var db = event.target.result;\n _this.createTables(db);\n };\n });\n };\n DiagnosticsStorage.prototype.createTables = function (db) {\n // Create tags table\n if (!db.objectStoreNames.contains(TABLE_NAMES.TAGS)) {\n db.createObjectStore(TABLE_NAMES.TAGS, { keyPath: 'key' });\n }\n // Create counters table\n if (!db.objectStoreNames.contains(TABLE_NAMES.COUNTERS)) {\n db.createObjectStore(TABLE_NAMES.COUNTERS, { keyPath: 'key' });\n }\n // Create histograms table for storing histogram stats (count, min, max, sum)\n if (!db.objectStoreNames.contains(TABLE_NAMES.HISTOGRAMS)) {\n db.createObjectStore(TABLE_NAMES.HISTOGRAMS, {\n keyPath: 'key',\n });\n }\n // Create events table\n if (!db.objectStoreNames.contains(TABLE_NAMES.EVENTS)) {\n var eventsStore = db.createObjectStore(TABLE_NAMES.EVENTS, {\n keyPath: 'id',\n autoIncrement: true,\n });\n // Create index on time for chronological queries\n eventsStore.createIndex('time_idx', 'time', { unique: false });\n }\n // Create internal table for storing internal data like flush timestamps\n if (!db.objectStoreNames.contains(TABLE_NAMES.INTERNAL)) {\n db.createObjectStore(TABLE_NAMES.INTERNAL, { keyPath: 'key' });\n }\n };\n DiagnosticsStorage.prototype.setTags = function (tags) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_1, store_1, error_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(tags).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_1 = db.transaction([TABLE_NAMES.TAGS], 'readwrite');\n store_1 = transaction_1.objectStore(TABLE_NAMES.TAGS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(tags);\n transaction_1.oncomplete = function () {\n resolve();\n };\n transaction_1.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set tags', event);\n resolve();\n };\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n var putRequest = store_1.put({ key: key, value: value });\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set tag', key, value, event);\n };\n });\n })];\n case 2:\n error_1 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to set tags', error_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.incrementCounters = function (counters) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_2, store_2, error_2;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(counters).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_2 = db.transaction([TABLE_NAMES.COUNTERS], 'readwrite');\n store_2 = transaction_2.objectStore(TABLE_NAMES.COUNTERS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(counters);\n transaction_2.oncomplete = function () {\n resolve();\n };\n transaction_2.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to increment counters', event);\n resolve();\n };\n // Read existing values and update them\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], incrementValue = _b[1];\n var getRequest = store_2.get(key);\n getRequest.onsuccess = function () {\n var existingRecord = getRequest.result;\n /* istanbul ignore next */\n var existingValue = existingRecord ? existingRecord.value : 0;\n var putRequest = store_2.put({ key: key, value: existingValue + incrementValue });\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to update counter', key, event);\n };\n };\n getRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to read existing counter', key, event);\n };\n });\n })];\n case 2:\n error_2 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to increment counters', error_2);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setHistogramStats = function (histogramStats) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_3, store_3, error_3;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (Object.entries(histogramStats).length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_3 = db.transaction([TABLE_NAMES.HISTOGRAMS], 'readwrite');\n store_3 = transaction_3.objectStore(TABLE_NAMES.HISTOGRAMS);\n return [2 /*return*/, new Promise(function (resolve) {\n var entries = Object.entries(histogramStats);\n transaction_3.oncomplete = function () {\n resolve();\n };\n transaction_3.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', event);\n resolve();\n };\n // Read existing values and update them\n entries.forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], newStats = _b[1];\n var getRequest = store_3.get(key);\n getRequest.onsuccess = function () {\n var existingRecord = getRequest.result;\n var updatedStats;\n /* istanbul ignore next */\n if (existingRecord) {\n // Accumulate with existing stats\n updatedStats = {\n key: key,\n count: existingRecord.count + newStats.count,\n min: Math.min(existingRecord.min, newStats.min),\n max: Math.max(existingRecord.max, newStats.max),\n sum: existingRecord.sum + newStats.sum,\n };\n }\n else {\n // Create new stats\n updatedStats = {\n key: key,\n count: newStats.count,\n min: newStats.min,\n max: newStats.max,\n sum: newStats.sum,\n };\n }\n var putRequest = store_3.put(updatedStats);\n putRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', key, event);\n };\n };\n getRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to read existing histogram stats', key, event);\n };\n });\n })];\n case 2:\n error_3 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to set histogram stats', error_3);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.addEventRecords = function (events) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_4, store_4, error_4;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (events.length === 0) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_4 = db.transaction([TABLE_NAMES.EVENTS], 'readwrite');\n store_4 = transaction_4.objectStore(TABLE_NAMES.EVENTS);\n return [2 /*return*/, new Promise(function (resolve) {\n transaction_4.oncomplete = function () {\n resolve();\n };\n /* istanbul ignore next */\n transaction_4.onabort = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to add event records', event);\n resolve();\n };\n // First, check how many events are currently stored\n var countRequest = store_4.count();\n countRequest.onsuccess = function () {\n var currentCount = countRequest.result;\n // Calculate how many events we can add\n var availableSlots = Math.max(0, MAX_PERSISTENT_STORAGE_EVENTS_COUNT - currentCount);\n if (availableSlots < events.length) {\n _this.logger.debug(\"DiagnosticsStorage: Only added \".concat(availableSlots, \" of \").concat(events.length, \" events due to storage limit\"));\n }\n // Only add events up to the available slots (take the least recent ones)\n events.slice(0, availableSlots).forEach(function (event) {\n var request = store_4.add(event);\n request.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to add event record', event);\n };\n });\n };\n countRequest.onerror = function (event) {\n _this.logger.debug('DiagnosticsStorage: Failed to count existing events', event);\n };\n })];\n case 2:\n error_4 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to add event records', error_4);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setInternal = function (key, value) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_5, store_5, error_5;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_5 = db.transaction([TABLE_NAMES.INTERNAL], 'readwrite');\n store_5 = transaction_5.objectStore(TABLE_NAMES.INTERNAL);\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore next */\n transaction_5.onabort = function () { return reject(new Error('Failed to set internal value')); };\n var request = store_5.put({ key: key, value: value });\n request.onsuccess = function () { return resolve(); };\n /* istanbul ignore next */\n request.onerror = function () { return reject(new Error('Failed to set internal value')); };\n })];\n case 2:\n error_5 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set internal value', error_5);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.getInternal = function (key) {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction_6, store_6, error_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _a.sent();\n transaction_6 = db.transaction([TABLE_NAMES.INTERNAL], 'readonly');\n store_6 = transaction_6.objectStore(TABLE_NAMES.INTERNAL);\n return [2 /*return*/, new Promise(function (resolve, reject) {\n /* istanbul ignore next */\n transaction_6.onabort = function () { return reject(new Error('Failed to get internal value')); };\n var request = store_6.get(key);\n request.onsuccess = function () { return resolve(request.result); };\n /* istanbul ignore next */\n request.onerror = function () { return reject(new Error('Failed to get internal value')); };\n })];\n case 2:\n error_6 = _a.sent();\n this.logger.debug('DiagnosticsStorage: Failed to get internal value', error_6);\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.getLastFlushTimestamp = function () {\n return __awaiter(this, void 0, void 0, function () {\n var record, error_7;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.getInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP)];\n case 1:\n record = _a.sent();\n return [2 /*return*/, record ? parseInt(record.value, 10) : undefined];\n case 2:\n error_7 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to get last flush timestamp', error_7);\n /* istanbul ignore next */\n return [2 /*return*/, undefined];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsStorage.prototype.setLastFlushTimestamp = function (timestamp) {\n return __awaiter(this, void 0, void 0, function () {\n var error_8;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.setInternal(INTERNAL_KEYS.LAST_FLUSH_TIMESTAMP, timestamp.toString())];\n case 1:\n _a.sent();\n return [3 /*break*/, 3];\n case 2:\n error_8 = _a.sent();\n /* istanbul ignore next */\n this.logger.debug('DiagnosticsStorage: Failed to set last flush timestamp', error_8);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.clearTable = function (transaction, tableName) {\n return new Promise(function (resolve, reject) {\n var store = transaction.objectStore(tableName);\n var request = store.clear();\n request.onsuccess = function () { return resolve(); };\n request.onerror = function () { return reject(new Error(\"Failed to clear table \".concat(tableName))); };\n });\n };\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.getAllAndClear = function () {\n return __awaiter(this, void 0, void 0, function () {\n var db, transaction, _a, tags, counters, histogramStats, events, error_9;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _b.trys.push([0, 4, , 5]);\n return [4 /*yield*/, this.getDB()];\n case 1:\n db = _b.sent();\n transaction = db.transaction([TABLE_NAMES.TAGS, TABLE_NAMES.COUNTERS, TABLE_NAMES.HISTOGRAMS, TABLE_NAMES.EVENTS], 'readwrite');\n return [4 /*yield*/, Promise.all([\n this.getAllFromStore(transaction, TABLE_NAMES.TAGS),\n this.getAllFromStore(transaction, TABLE_NAMES.COUNTERS),\n this.getAllFromStore(transaction, TABLE_NAMES.HISTOGRAMS),\n this.getAllFromStore(transaction, TABLE_NAMES.EVENTS),\n ])];\n case 2:\n _a = __read.apply(void 0, [_b.sent(), 4]), tags = _a[0], counters = _a[1], histogramStats = _a[2], events = _a[3];\n // Clear all data in the same transaction\n return [4 /*yield*/, Promise.all([\n this.clearTable(transaction, TABLE_NAMES.COUNTERS),\n this.clearTable(transaction, TABLE_NAMES.HISTOGRAMS),\n this.clearTable(transaction, TABLE_NAMES.EVENTS),\n ])];\n case 3:\n // Clear all data in the same transaction\n _b.sent();\n return [2 /*return*/, { tags: tags, counters: counters, histogramStats: histogramStats, events: events }];\n case 4:\n error_9 = _b.sent();\n this.logger.debug('DiagnosticsStorage: Failed to get all and clear data', error_9);\n return [2 /*return*/, { tags: [], counters: [], histogramStats: [], events: [] }];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Helper method to get all records from a store within a transaction\n */\n /* istanbul ignore next */\n DiagnosticsStorage.prototype.getAllFromStore = function (transaction, tableName) {\n return new Promise(function (resolve, reject) {\n var store = transaction.objectStore(tableName);\n var request = store.getAll();\n request.onsuccess = function () { return resolve(request.result); };\n request.onerror = function () { return reject(new Error(\"Failed to get all from \".concat(tableName))); };\n });\n };\n return DiagnosticsStorage;\n}());\nexport { DiagnosticsStorage };\n//# sourceMappingURL=diagnostics-storage.js.map","import { __assign } from \"tslib\";\nimport { getGlobalScope } from '../global-scope';\nexport var GLOBAL_KEY = '__AMPLITUDE_SCRIPT_URL__';\nexport var EVENT_NAME_ERROR_UNCAUGHT = 'sdk.error.uncaught';\nvar getNormalizedScriptUrl = function () {\n var scope = getGlobalScope();\n /* istanbul ignore next */\n return scope === null || scope === void 0 ? void 0 : scope[GLOBAL_KEY];\n};\nvar setNormalizedScriptUrl = function (url) {\n var scope = getGlobalScope();\n if (scope) {\n scope[GLOBAL_KEY] = url;\n }\n};\nexport var registerSdkLoaderMetadata = function (metadata) {\n if (metadata.scriptUrl) {\n var normalized = normalizeUrl(metadata.scriptUrl);\n if (normalized) {\n setNormalizedScriptUrl(normalized);\n }\n }\n};\nexport var enableSdkErrorListeners = function (client) {\n var scope = getGlobalScope();\n if (!scope || typeof scope.addEventListener !== 'function') {\n return;\n }\n var handleError = function (event) {\n var error = event.error instanceof Error ? event.error : undefined;\n var stack = error === null || error === void 0 ? void 0 : error.stack;\n var match = detectSdkOrigin({ filename: event.filename, stack: stack });\n if (!match) {\n return;\n }\n capture({\n type: 'error',\n message: event.message,\n stack: stack,\n filename: event.filename,\n errorName: error === null || error === void 0 ? void 0 : error.name,\n metadata: {\n colno: event.colno,\n lineno: event.lineno,\n isTrusted: event.isTrusted,\n matchReason: match,\n },\n });\n };\n var handleRejection = function (event) {\n var _a;\n var error = event.reason instanceof Error ? event.reason : undefined;\n var stack = error === null || error === void 0 ? void 0 : error.stack;\n var filename = extractFilenameFromStack(stack);\n var match = detectSdkOrigin({ filename: filename, stack: stack });\n if (!match) {\n return;\n }\n /* istanbul ignore next */\n capture({\n type: 'unhandledrejection',\n message: (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : stringifyReason(event.reason),\n stack: stack,\n filename: filename,\n errorName: error === null || error === void 0 ? void 0 : error.name,\n metadata: {\n isTrusted: event.isTrusted,\n matchReason: match,\n },\n });\n };\n var capture = function (context) {\n client.recordEvent(EVENT_NAME_ERROR_UNCAUGHT, __assign({ type: context.type, message: context.message, filename: context.filename, error_name: context.errorName, stack: context.stack }, context.metadata));\n };\n scope.addEventListener('error', handleError, true);\n scope.addEventListener('unhandledrejection', handleRejection, true);\n};\nvar detectSdkOrigin = function (payload) {\n var normalizedScriptUrl = getNormalizedScriptUrl();\n if (!normalizedScriptUrl) {\n return undefined;\n }\n if (payload.filename && payload.filename.includes(normalizedScriptUrl)) {\n return 'filename';\n }\n if (payload.stack && payload.stack.includes(normalizedScriptUrl)) {\n return 'stack';\n }\n return undefined;\n};\nvar normalizeUrl = function (value) {\n var _a, _b;\n try {\n /* istanbul ignore next */\n var url = new URL(value, (_b = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.origin);\n return url.origin + url.pathname;\n }\n catch (_c) {\n return undefined;\n }\n};\nvar extractFilenameFromStack = function (stack) {\n if (!stack) {\n return undefined;\n }\n var match = stack.match(/(https?:\\/\\/\\S+?)(?=[)\\s]|$)/);\n /* istanbul ignore next */\n return match ? match[1] : undefined;\n};\n/* istanbul ignore next */\nvar stringifyReason = function (reason) {\n if (typeof reason === 'string') {\n return reason;\n }\n try {\n return JSON.stringify(reason);\n }\n catch (_a) {\n return '[object Object]';\n }\n};\n//# sourceMappingURL=uncaught-sdk-errors.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { DiagnosticsStorage } from './diagnostics-storage';\nimport { getGlobalScope } from '../global-scope';\nimport { isTimestampInSampleTemp } from '../utils/sampling';\nimport { enableSdkErrorListeners } from './uncaught-sdk-errors';\nexport var SAVE_INTERVAL_MS = 1000; // 1 second\nexport var FLUSH_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes\nexport var DIAGNOSTICS_US_SERVER_URL = 'https://diagnostics.prod.us-west-2.amplitude.com/v1/capture';\nexport var DIAGNOSTICS_EU_SERVER_URL = 'https://diagnostics.prod.eu-central-1.amplitude.com/v1/capture';\n// In-memory storage limits\nexport var MAX_MEMORY_STORAGE_COUNT = 10000; // for tags, counters, histograms separately\nexport var MAX_MEMORY_STORAGE_EVENTS_COUNT = 10;\nvar DiagnosticsClient = /** @class */ (function () {\n function DiagnosticsClient(apiKey, logger, serverZone, options) {\n if (serverZone === void 0) { serverZone = 'US'; }\n // In-memory storages\n this.inMemoryTags = {};\n this.inMemoryCounters = {};\n this.inMemoryHistograms = {};\n this.inMemoryEvents = [];\n // Timer for 1-second persistence\n this.saveTimer = null;\n // Timer for flush interval\n this.flushTimer = null;\n this.apiKey = apiKey;\n this.logger = logger;\n this.serverUrl = serverZone === 'US' ? DIAGNOSTICS_US_SERVER_URL : DIAGNOSTICS_EU_SERVER_URL;\n this.logger.debug('DiagnosticsClient: Initializing with options', JSON.stringify(options, null, 2));\n // Diagnostics is enabled by default with sample rate of 0 (no sampling)\n this.config = __assign({ enabled: true, sampleRate: 0 }, options);\n this.startTimestamp = Date.now();\n this.shouldTrack = isTimestampInSampleTemp(this.startTimestamp, this.config.sampleRate) && this.config.enabled;\n if (DiagnosticsStorage.isSupported()) {\n this.storage = new DiagnosticsStorage(apiKey, logger);\n }\n else {\n this.logger.debug('DiagnosticsClient: IndexedDB is not supported');\n }\n void this.initializeFlushInterval();\n // Track internal diagnostics metrics for sampling\n if (this.shouldTrack) {\n this.increment('sdk.diagnostics.sampled.in.and.enabled');\n enableSdkErrorListeners(this);\n }\n }\n /**\n * Check if storage is available and tracking is enabled\n */\n DiagnosticsClient.prototype.isStorageAndTrackEnabled = function () {\n return Boolean(this.storage) && Boolean(this.shouldTrack);\n };\n DiagnosticsClient.prototype.setTag = function (name, value) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryTags).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return setTags as reaching memory limit');\n return;\n }\n this.inMemoryTags[name] = value;\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.increment = function (name, size) {\n if (size === void 0) { size = 1; }\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryCounters).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return increment as reaching memory limit');\n return;\n }\n this.inMemoryCounters[name] = (this.inMemoryCounters[name] || 0) + size;\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.recordHistogram = function (name, value) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (Object.keys(this.inMemoryHistograms).length >= MAX_MEMORY_STORAGE_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return recordHistogram as reaching memory limit');\n return;\n }\n var existing = this.inMemoryHistograms[name];\n if (existing) {\n // Update existing stats incrementally\n existing.count += 1;\n existing.min = Math.min(existing.min, value);\n existing.max = Math.max(existing.max, value);\n existing.sum += value;\n }\n else {\n // Create new stats\n this.inMemoryHistograms[name] = {\n count: 1,\n min: value,\n max: value,\n sum: value,\n };\n }\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.recordEvent = function (name, properties) {\n if (!this.isStorageAndTrackEnabled()) {\n return;\n }\n if (this.inMemoryEvents.length >= MAX_MEMORY_STORAGE_EVENTS_COUNT) {\n this.logger.debug('DiagnosticsClient: Early return recordEvent as reaching memory limit');\n return;\n }\n this.inMemoryEvents.push({\n event_name: name,\n time: Date.now(),\n event_properties: properties,\n });\n this.startTimersIfNeeded();\n };\n DiagnosticsClient.prototype.startTimersIfNeeded = function () {\n var _this = this;\n if (!this.saveTimer) {\n this.saveTimer = setTimeout(function () {\n _this.saveAllDataToStorage()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to save all data to storage', error);\n })\n .finally(function () {\n _this.saveTimer = null;\n });\n }, SAVE_INTERVAL_MS);\n }\n if (!this.flushTimer) {\n this.flushTimer = setTimeout(function () {\n _this._flush()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to flush', error);\n })\n .finally(function () {\n _this.flushTimer = null;\n });\n }, FLUSH_INTERVAL_MS);\n }\n };\n DiagnosticsClient.prototype.saveAllDataToStorage = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tagsToSave, countersToSave, histogramsToSave, eventsToSave;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n tagsToSave = __assign({}, this.inMemoryTags);\n countersToSave = __assign({}, this.inMemoryCounters);\n histogramsToSave = __assign({}, this.inMemoryHistograms);\n eventsToSave = __spreadArray([], __read(this.inMemoryEvents), false);\n this.inMemoryEvents = [];\n this.inMemoryTags = {};\n this.inMemoryCounters = {};\n this.inMemoryHistograms = {};\n return [4 /*yield*/, Promise.all([\n this.storage.setTags(tagsToSave),\n this.storage.incrementCounters(countersToSave),\n this.storage.setHistogramStats(histogramsToSave),\n this.storage.addEventRecords(eventsToSave),\n ])];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n DiagnosticsClient.prototype._flush = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, tagRecords, counterRecords, histogramStatsRecords, eventRecords, tags, counters, histogram, events, payload;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n return [4 /*yield*/, this.saveAllDataToStorage()];\n case 1:\n _b.sent();\n this.saveTimer = null;\n this.flushTimer = null;\n return [4 /*yield*/, this.storage.getAllAndClear()];\n case 2:\n _a = _b.sent(), tagRecords = _a.tags, counterRecords = _a.counters, histogramStatsRecords = _a.histogramStats, eventRecords = _a.events;\n // Update the last flush timestamp\n void this.storage.setLastFlushTimestamp(Date.now());\n tags = {};\n tagRecords.forEach(function (record) {\n tags[record.key] = record.value;\n });\n counters = {};\n counterRecords.forEach(function (record) {\n counters[record.key] = record.value;\n });\n histogram = {};\n histogramStatsRecords.forEach(function (stats) {\n histogram[stats.key] = {\n count: stats.count,\n min: stats.min,\n max: stats.max,\n avg: Math.round((stats.sum / stats.count) * 100) / 100, // round the average to 2 decimal places.\n };\n });\n events = eventRecords.map(function (record) { return ({\n event_name: record.event_name,\n time: record.time,\n event_properties: record.event_properties,\n }); });\n // Early return if all data collections are empty\n if (Object.keys(counters).length === 0 && Object.keys(histogram).length === 0 && events.length === 0) {\n return [2 /*return*/];\n }\n payload = {\n tags: tags,\n histogram: histogram,\n counters: counters,\n events: events,\n };\n // Send payload to diagnostics server\n void this.fetch(payload);\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Send diagnostics data to the server\n */\n DiagnosticsClient.prototype.fetch = function (payload) {\n return __awaiter(this, void 0, void 0, function () {\n var response, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n if (!getGlobalScope()) {\n throw new Error('DiagnosticsClient: Fetch is not supported');\n }\n return [4 /*yield*/, fetch(this.serverUrl, {\n method: 'POST',\n headers: {\n 'X-ApiKey': this.apiKey,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n })];\n case 1:\n response = _a.sent();\n if (!response.ok) {\n this.logger.debug('DiagnosticsClient: Failed to send diagnostics data.');\n return [2 /*return*/];\n }\n this.logger.debug('DiagnosticsClient: Successfully sent diagnostics data');\n return [3 /*break*/, 3];\n case 2:\n error_1 = _a.sent();\n this.logger.debug('DiagnosticsClient: Failed to send diagnostics data. ', error_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Initialize flush interval logic.\n * Check if 5 minutes has passed since last flush, if so flush immediately.\n * Otherwise set a timer to flush when the interval is reached.\n */\n DiagnosticsClient.prototype.initializeFlushInterval = function () {\n return __awaiter(this, void 0, void 0, function () {\n var now, lastFlushTimestamp, timeSinceLastFlush;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.storage) {\n return [2 /*return*/];\n }\n now = Date.now();\n return [4 /*yield*/, this.storage.getLastFlushTimestamp()];\n case 1:\n lastFlushTimestamp = (_a.sent()) || -1;\n // If last flush timestamp is -1, it means this is a new client\n // Save current timestamp as the initial \"last flush timestamp\"\n // and schedule the flush timer\n if (lastFlushTimestamp === -1) {\n void this.storage.setLastFlushTimestamp(now);\n this._setFlushTimer(FLUSH_INTERVAL_MS);\n return [2 /*return*/];\n }\n timeSinceLastFlush = now - lastFlushTimestamp;\n if (timeSinceLastFlush >= FLUSH_INTERVAL_MS) {\n // More than 5 minutes has passed, flush immediately\n void this._flush();\n return [2 /*return*/];\n }\n else {\n // Set timer for remaining time\n this._setFlushTimer(FLUSH_INTERVAL_MS - timeSinceLastFlush);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Helper method to set flush timer with consistent error handling\n */\n DiagnosticsClient.prototype._setFlushTimer = function (delay) {\n var _this = this;\n this.flushTimer = setTimeout(function () {\n _this._flush()\n .catch(function (error) {\n _this.logger.debug('DiagnosticsClient: Failed to flush', error);\n })\n .finally(function () {\n _this.flushTimer = null;\n });\n }, delay);\n };\n DiagnosticsClient.prototype._setSampleRate = function (sampleRate) {\n this.logger.debug('DiagnosticsClient: Setting sample rate to', sampleRate);\n this.config.sampleRate = sampleRate;\n this.shouldTrack = isTimestampInSampleTemp(this.startTimestamp, this.config.sampleRate) && this.config.enabled;\n this.logger.debug('DiagnosticsClient: Should track is', this.shouldTrack);\n };\n return DiagnosticsClient;\n}());\nexport { DiagnosticsClient };\n//# sourceMappingURL=diagnostics-client.js.map","import { Status } from '../types/status';\nimport { isSuccessStatusCode } from '../utils/status-code';\nvar BaseTransport = /** @class */ (function () {\n function BaseTransport() {\n }\n BaseTransport.prototype.send = function (_serverUrl, _payload) {\n return Promise.resolve(null);\n };\n BaseTransport.prototype.buildResponse = function (responseJSON) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n if (typeof responseJSON !== 'object') {\n return null;\n }\n var statusCode = responseJSON.code || 0;\n var status = this.buildStatus(statusCode);\n switch (status) {\n case Status.Success:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n eventsIngested: (_a = responseJSON.events_ingested) !== null && _a !== void 0 ? _a : 0,\n payloadSizeBytes: (_b = responseJSON.payload_size_bytes) !== null && _b !== void 0 ? _b : 0,\n serverUploadTime: (_c = responseJSON.server_upload_time) !== null && _c !== void 0 ? _c : 0,\n },\n };\n case Status.Invalid:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_d = responseJSON.error) !== null && _d !== void 0 ? _d : '',\n missingField: (_e = responseJSON.missing_field) !== null && _e !== void 0 ? _e : '',\n eventsWithInvalidFields: (_f = responseJSON.events_with_invalid_fields) !== null && _f !== void 0 ? _f : {},\n eventsWithMissingFields: (_g = responseJSON.events_with_missing_fields) !== null && _g !== void 0 ? _g : {},\n eventsWithInvalidIdLengths: (_h = responseJSON.events_with_invalid_id_lengths) !== null && _h !== void 0 ? _h : {},\n epsThreshold: (_j = responseJSON.eps_threshold) !== null && _j !== void 0 ? _j : 0,\n exceededDailyQuotaDevices: (_k = responseJSON.exceeded_daily_quota_devices) !== null && _k !== void 0 ? _k : {},\n silencedDevices: (_l = responseJSON.silenced_devices) !== null && _l !== void 0 ? _l : [],\n silencedEvents: (_m = responseJSON.silenced_events) !== null && _m !== void 0 ? _m : [],\n throttledDevices: (_o = responseJSON.throttled_devices) !== null && _o !== void 0 ? _o : {},\n throttledEvents: (_p = responseJSON.throttled_events) !== null && _p !== void 0 ? _p : [],\n },\n };\n case Status.PayloadTooLarge:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_q = responseJSON.error) !== null && _q !== void 0 ? _q : '',\n },\n };\n case Status.RateLimit:\n return {\n status: status,\n statusCode: statusCode,\n body: {\n error: (_r = responseJSON.error) !== null && _r !== void 0 ? _r : '',\n epsThreshold: (_s = responseJSON.eps_threshold) !== null && _s !== void 0 ? _s : 0,\n throttledDevices: (_t = responseJSON.throttled_devices) !== null && _t !== void 0 ? _t : {},\n throttledUsers: (_u = responseJSON.throttled_users) !== null && _u !== void 0 ? _u : {},\n exceededDailyQuotaDevices: (_v = responseJSON.exceeded_daily_quota_devices) !== null && _v !== void 0 ? _v : {},\n exceededDailyQuotaUsers: (_w = responseJSON.exceeded_daily_quota_users) !== null && _w !== void 0 ? _w : {},\n throttledEvents: (_x = responseJSON.throttled_events) !== null && _x !== void 0 ? _x : [],\n },\n };\n case Status.Timeout:\n default:\n return {\n status: status,\n statusCode: statusCode,\n };\n }\n };\n BaseTransport.prototype.buildStatus = function (code) {\n if (isSuccessStatusCode(code)) {\n return Status.Success;\n }\n if (code === 429) {\n return Status.RateLimit;\n }\n if (code === 413) {\n return Status.PayloadTooLarge;\n }\n if (code === 408) {\n return Status.Timeout;\n }\n if (code >= 400 && code < 500) {\n return Status.Invalid;\n }\n if (code >= 500) {\n return Status.Failed;\n }\n return Status.Unknown;\n };\n return BaseTransport;\n}());\nexport { BaseTransport };\n//# sourceMappingURL=base.js.map","import { __assign, __awaiter, __extends, __generator } from \"tslib\";\nimport { BaseTransport } from './base';\nvar FetchTransport = /** @class */ (function (_super) {\n __extends(FetchTransport, _super);\n function FetchTransport(customHeaders) {\n if (customHeaders === void 0) { customHeaders = {}; }\n var _this = _super.call(this) || this;\n _this.customHeaders = customHeaders;\n return _this;\n }\n FetchTransport.prototype.send = function (serverUrl, payload) {\n return __awaiter(this, void 0, void 0, function () {\n var options, response, responseText;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n /* istanbul ignore if */\n if (typeof fetch === 'undefined') {\n throw new Error('FetchTransport is not supported');\n }\n options = {\n headers: __assign({ 'Content-Type': 'application/json', Accept: '*/*' }, this.customHeaders),\n body: JSON.stringify(payload),\n method: 'POST',\n };\n return [4 /*yield*/, fetch(serverUrl, options)];\n case 1:\n response = _a.sent();\n return [4 /*yield*/, response.text()];\n case 2:\n responseText = _a.sent();\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return [2 /*return*/, this.buildResponse(JSON.parse(responseText))];\n }\n catch (_b) {\n return [2 /*return*/, this.buildResponse({ code: response.status })];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n return FetchTransport;\n}(BaseTransport));\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","var RemoteConfigLocalStorage = /** @class */ (function () {\n function RemoteConfigLocalStorage(apiKey, logger) {\n this.key = \"AMP_remote_config_\".concat(apiKey.substring(0, 10));\n this.logger = logger;\n }\n RemoteConfigLocalStorage.prototype.fetchConfig = function () {\n var result = null;\n var failedRemoteConfigInfo = {\n remoteConfig: null,\n lastFetch: new Date(),\n };\n try {\n result = localStorage.getItem(this.key);\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to access: ', error);\n return Promise.resolve(failedRemoteConfigInfo);\n }\n if (result === null) {\n this.logger.debug('Remote config localstorage gets null because the key does not exist');\n return Promise.resolve(failedRemoteConfigInfo);\n }\n try {\n var remoteConfigInfo = JSON.parse(result);\n this.logger.debug(\"Remote config localstorage parsed successfully: \".concat(JSON.stringify(remoteConfigInfo)));\n return Promise.resolve({\n remoteConfig: remoteConfigInfo.remoteConfig,\n lastFetch: new Date(remoteConfigInfo.lastFetch),\n });\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to parse: ', error);\n localStorage.removeItem(this.key);\n return Promise.resolve(failedRemoteConfigInfo);\n }\n };\n RemoteConfigLocalStorage.prototype.setConfig = function (config) {\n try {\n localStorage.setItem(this.key, JSON.stringify(config));\n this.logger.debug('Remote config localstorage set successfully.');\n return Promise.resolve(true);\n }\n catch (error) {\n this.logger.debug('Remote config localstorage failed to set: ', error);\n }\n return Promise.resolve(false);\n };\n return RemoteConfigLocalStorage;\n}());\nexport { RemoteConfigLocalStorage };\n//# sourceMappingURL=remote-config-localstorage.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { RemoteConfigLocalStorage } from './remote-config-localstorage';\nimport { UUID } from '../utils/uuid';\nexport var US_SERVER_URL = 'https://sr-client-cfg.amplitude.com/config';\nexport var EU_SERVER_URL = 'https://sr-client-cfg.eu.amplitude.com/config';\nexport var DEFAULT_MAX_RETRIES = 3;\n/**\n * The default timeout for fetch in milliseconds.\n * Linear backoff policy: timeout / retry times is the interval between fetch retry.\n */\nvar DEFAULT_TIMEOUT = 1000;\n/**\n * The minimum time between fetches in milliseconds.\n * This prevents too many requests from being sent in a short period of time.\n */\nvar DEFAULT_MIN_TIME_BETWEEN_FETCHES = 5 * 60 * 1000; // 5 minutes\nvar RemoteConfigClient = /** @class */ (function () {\n function RemoteConfigClient(apiKey, logger, serverZone, serverUrl) {\n if (serverZone === void 0) { serverZone = 'US'; }\n // Registered callbackInfos by subscribe().\n this.callbackInfos = [];\n // Track the last successful fetch time for throttling (timestamp in milliseconds).\n this.lastSuccessfulFetch = null;\n // Store the in-flight fetch promise for deduplication.\n this.fetchPromise = null;\n this.apiKey = apiKey;\n this.serverUrl = serverUrl || (serverZone === 'US' ? US_SERVER_URL : EU_SERVER_URL);\n this.logger = logger;\n this.storage = new RemoteConfigLocalStorage(apiKey, logger);\n }\n RemoteConfigClient.prototype.subscribe = function (key, deliveryMode, callback) {\n var id = UUID();\n var callbackInfo = {\n id: id,\n key: key,\n deliveryMode: deliveryMode,\n callback: callback,\n };\n this.callbackInfos.push(callbackInfo);\n if (deliveryMode === 'all') {\n void this.subscribeAll(callbackInfo);\n }\n else {\n void this.subscribeWaitForRemote(callbackInfo, deliveryMode.timeout);\n }\n return id;\n };\n RemoteConfigClient.prototype.unsubscribe = function (id) {\n var index = this.callbackInfos.findIndex(function (callbackInfo) { return callbackInfo.id === id; });\n if (index === -1) {\n this.logger.debug(\"Remote config client unsubscribe failed because callback with id \".concat(id, \" doesn't exist.\"));\n return false;\n }\n this.callbackInfos.splice(index, 1);\n this.logger.debug(\"Remote config client unsubscribe succeeded removing callback with id \".concat(id, \".\"));\n return true;\n };\n RemoteConfigClient.prototype.updateConfigs = function () {\n return __awaiter(this, void 0, void 0, function () {\n var timeSinceLastFetch, result;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Check if we need to throttle based on last successful fetch time\n if (this.lastSuccessfulFetch) {\n timeSinceLastFetch = Date.now() - this.lastSuccessfulFetch;\n if (timeSinceLastFetch < DEFAULT_MIN_TIME_BETWEEN_FETCHES) {\n this.logger.debug('Remote config client skipping updateConfigs: Too recent');\n return [2 /*return*/];\n }\n }\n return [4 /*yield*/, this.getOrCreateFetchPromise()];\n case 1:\n result = _a.sent();\n void this.storage.setConfig(result);\n this.callbackInfos.forEach(function (callbackInfo) {\n _this.sendCallback(callbackInfo, result, 'remote');\n });\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Get the in-flight fetch promise or create a new one.\n * This ensures multiple subscribe calls share the same network request.\n */\n RemoteConfigClient.prototype.getOrCreateFetchPromise = function () {\n var _this = this;\n if (this.fetchPromise) {\n return this.fetchPromise;\n }\n this.fetchPromise = this.fetch()\n .then(function (result) {\n // Update last successful fetch time if we got a valid config\n if (result.remoteConfig !== null) {\n _this.lastSuccessfulFetch = Date.now();\n }\n return result;\n })\n .finally(function () {\n // Clear the promise after it settles (success or failure)\n _this.fetchPromise = null;\n });\n return this.fetchPromise;\n };\n /**\n * Send remote first. If it's already complete, we can skip the cached response.\n * - if remote is fetched first, no cache fetch.\n * - if cache is fetched first, still fetching remote.\n */\n RemoteConfigClient.prototype.subscribeAll = function (callbackInfo) {\n return __awaiter(this, void 0, void 0, function () {\n var remotePromise, cachePromise, result;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n remotePromise = this.getOrCreateFetchPromise().then(function (result) {\n _this.logger.debug(\"Remote config client subscription all mode fetched from remote: \".concat(JSON.stringify(result)));\n _this.sendCallback(callbackInfo, result, 'remote');\n void _this.storage.setConfig(result);\n });\n cachePromise = this.storage.fetchConfig().then(function (result) {\n return result;\n });\n return [4 /*yield*/, Promise.race([remotePromise, cachePromise])];\n case 1:\n result = _a.sent();\n // If cache is fetched first, wait for remote.\n if (result !== undefined) {\n this.logger.debug(\"Remote config client subscription all mode fetched from cache: \".concat(JSON.stringify(result)));\n // Skip sending callback if cache is empty (first time user).\n if (result.remoteConfig !== null) {\n this.sendCallback(callbackInfo, result, 'cache');\n }\n else {\n this.logger.debug('Remote config client skips sending callback because cache is empty (first time user).');\n }\n }\n return [4 /*yield*/, remotePromise];\n case 2:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Waits for a remote response until the given timeout, then return a cached copy, if available.\n */\n RemoteConfigClient.prototype.subscribeWaitForRemote = function (callbackInfo, timeout) {\n return __awaiter(this, void 0, void 0, function () {\n var timeoutPromise, result, error_1, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n timeoutPromise = new Promise(function (_, reject) {\n setTimeout(function () {\n reject('Timeout exceeded');\n }, timeout);\n });\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 5]);\n return [4 /*yield*/, Promise.race([\n this.getOrCreateFetchPromise(),\n timeoutPromise,\n ])];\n case 2:\n result = (_a.sent());\n this.logger.debug('Remote config client subscription wait for remote mode returns from remote.');\n this.sendCallback(callbackInfo, result, 'remote');\n void this.storage.setConfig(result);\n return [3 /*break*/, 5];\n case 3:\n error_1 = _a.sent();\n this.logger.debug('Remote config client subscription wait for remote mode exceeded timeout. Try to fetch from cache.');\n return [4 /*yield*/, this.storage.fetchConfig()];\n case 4:\n result = _a.sent();\n if (result.remoteConfig !== null) {\n this.logger.debug('Remote config client subscription wait for remote mode returns a cached copy.');\n this.sendCallback(callbackInfo, result, 'cache');\n }\n else {\n this.logger.debug('Remote config client subscription wait for remote mode failed to fetch cache.');\n this.sendCallback(callbackInfo, result, 'remote');\n }\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Call the callback with filtered remote config based on key.\n * @param remoteConfigInfo - the whole remote config object without filtering by key.\n */\n RemoteConfigClient.prototype.sendCallback = function (callbackInfo, remoteConfigInfo, source) {\n callbackInfo.lastCallback = new Date();\n var filteredConfig;\n if (callbackInfo.key) {\n // Filter remote config by key.\n // For example, if remote config is {a: {b: {c: 1}}},\n // if key = 'a', filter result is {b: {c: 1}};\n // if key = 'a.b', filter result is {c: 1}\n filteredConfig = callbackInfo.key.split('.').reduce(function (config, key) {\n if (config === null) {\n return config;\n }\n return key in config ? config[key] : null;\n }, remoteConfigInfo.remoteConfig);\n }\n else {\n filteredConfig = remoteConfigInfo.remoteConfig;\n }\n callbackInfo.callback(filteredConfig, source, remoteConfigInfo.lastFetch);\n };\n /**\n * Fetch remote config from remote.\n * @param retries - the number of retries. default is 3.\n * @param timeout - the timeout in milliseconds. Default is 1000.\n * This timeout serves two purposes:\n * 1. It determines how long to wait for each remote config fetch request before aborting it.\n * If the fetch does not complete within the specified timeout, the request is cancelled using AbortController,\n * and the attempt is considered failed (and may be retried if retries remain).\n * 2. It is also used to calculate the interval between retries. The total timeout is divided by the number of retries,\n * so each retry waits for (timeout / retries) milliseconds before the next attempt (linear backoff).\n * @returns the remote config info. null if failed to fetch or the response is not valid JSON.\n */\n RemoteConfigClient.prototype.fetch = function (retries, timeout) {\n if (retries === void 0) { retries = DEFAULT_MAX_RETRIES; }\n if (timeout === void 0) { timeout = DEFAULT_TIMEOUT; }\n return __awaiter(this, void 0, void 0, function () {\n var interval, failedRemoteConfigInfo, _loop_1, this_1, attempt, state_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n interval = timeout / retries;\n failedRemoteConfigInfo = {\n remoteConfig: null,\n lastFetch: new Date(),\n };\n _loop_1 = function (attempt) {\n var abortController, timeoutId, res, body, remoteConfig, error_2;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n abortController = new AbortController();\n timeoutId = setTimeout(function () { return abortController.abort(); }, timeout);\n _b.label = 1;\n case 1:\n _b.trys.push([1, 7, 8, 9]);\n return [4 /*yield*/, fetch(this_1.getUrlParams(), {\n method: 'GET',\n headers: {\n Accept: '*/*',\n },\n signal: abortController.signal,\n })];\n case 2:\n res = _b.sent();\n if (!!res.ok) return [3 /*break*/, 4];\n return [4 /*yield*/, res.text()];\n case 3:\n body = _b.sent();\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" failed with \").concat(res.status, \": \").concat(body));\n return [3 /*break*/, 6];\n case 4: return [4 /*yield*/, res.json()];\n case 5:\n remoteConfig = (_b.sent());\n return [2 /*return*/, { value: {\n remoteConfig: remoteConfig,\n lastFetch: new Date(),\n } }];\n case 6: return [3 /*break*/, 9];\n case 7:\n error_2 = _b.sent();\n // Handle rejects when the request fails, for example, a network error or timeout\n if (error_2 instanceof Error && error_2.name === 'AbortError') {\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" timed out after \").concat(timeout, \"ms\"));\n }\n else {\n this_1.logger.debug(\"Remote config client fetch with retry time \".concat(retries, \" is rejected because: \"), error_2);\n }\n return [3 /*break*/, 9];\n case 8:\n // Clear the timeout since request completed or failed\n clearTimeout(timeoutId);\n return [7 /*endfinally*/];\n case 9:\n if (!(attempt < retries - 1)) return [3 /*break*/, 11];\n return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, _this.getJitterDelay(interval)); })];\n case 10:\n _b.sent();\n _b.label = 11;\n case 11: return [2 /*return*/];\n }\n });\n };\n this_1 = this;\n attempt = 0;\n _a.label = 1;\n case 1:\n if (!(attempt < retries)) return [3 /*break*/, 4];\n return [5 /*yield**/, _loop_1(attempt)];\n case 2:\n state_1 = _a.sent();\n if (typeof state_1 === \"object\")\n return [2 /*return*/, state_1.value];\n _a.label = 3;\n case 3:\n attempt++;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/, failedRemoteConfigInfo];\n }\n });\n });\n };\n /**\n * Return jitter in the bound of [0,baseDelay) and then floor round.\n */\n RemoteConfigClient.prototype.getJitterDelay = function (baseDelay) {\n return Math.floor(Math.random() * baseDelay);\n };\n RemoteConfigClient.prototype.getUrlParams = function () {\n // URL encode the API key to handle special characters\n var encodedApiKey = encodeURIComponent(this.apiKey);\n var urlParams = new URLSearchParams();\n urlParams.append('config_group', RemoteConfigClient.CONFIG_GROUP);\n return \"\".concat(this.serverUrl, \"/\").concat(encodedApiKey, \"?\").concat(urlParams.toString());\n };\n RemoteConfigClient.CONFIG_GROUP = 'browser';\n return RemoteConfigClient;\n}());\nexport { RemoteConfigClient };\n//# sourceMappingURL=remote-config.js.map","export var OfflineDisabled = null;\n//# sourceMappingURL=offline.js.map","/**\n * Default CSS selectors to define which elements on the page to track.\n * Extend this list to include additional elements to track. For example:\n * ```\n * autocapturePlugin({\n * cssSelectorAllowlist: [...DEFAULT_CSS_SELECTOR_ALLOWLIST, \".my-class\"],\n * })\n * ```\n */\nexport var DEFAULT_CSS_SELECTOR_ALLOWLIST = [\n 'a',\n 'button',\n 'input',\n 'select',\n 'textarea',\n 'label',\n 'video',\n 'audio',\n '[contenteditable=\"true\" i]',\n '[data-amp-default-track]',\n '.amp-default-track',\n];\n/**\n * Default prefix to allow the plugin to capture data attributes as an event property.\n */\nexport var DEFAULT_DATA_ATTRIBUTE_PREFIX = 'data-amp-track-';\n/**\n * Default list of elements on the page should be tracked when the page changes.\n */\nexport var DEFAULT_ACTION_CLICK_ALLOWLIST = ['div', 'span', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n//# sourceMappingURL=element-interactions.js.map","import { __read, __spreadArray } from \"tslib\";\nvar CLICKABLE_ELEMENT_SELECTORS = [\n 'a',\n 'button',\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]',\n '[role=\"option\"]',\n '[role=\"tab\"]',\n '[role=\"treeitem\"]',\n '[contenteditable=\"true\" i]',\n];\n/**\n * Default CSS selectors for dead clicks tracking\n */\nexport var DEFAULT_DEAD_CLICK_ALLOWLIST = __spreadArray([\n 'input[type=\"button\"]',\n 'input[type=\"submit\"]',\n 'input[type=\"reset\"]',\n 'input[type=\"image\"]',\n 'input[type=\"file\"]'\n], __read(CLICKABLE_ELEMENT_SELECTORS), false);\n/**\n * Default CSS selectors for rage clicks tracking\n */\nexport var DEFAULT_RAGE_CLICK_ALLOWLIST = ['*'];\n/**\n * Default time window for dead clicks (3 seconds)\n */\nexport var DEFAULT_DEAD_CLICK_WINDOW_MS = 3000;\n/**\n * Default time window for rage clicks (1 second)\n */\nexport var DEFAULT_RAGE_CLICK_WINDOW_MS = 1000;\n/**\n * Default threshold for rage clicks (4 clicks)\n */\nexport var DEFAULT_RAGE_CLICK_THRESHOLD = 4;\n/**\n * Default threshold for rage clicks to be considered out of bounds (50 pixels)\n */\nexport var DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD = 50; // pixels\n//# sourceMappingURL=frustration-interactions.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nfunction isJsonPrimitive(json) {\n return (typeof json === 'string' ||\n typeof json === 'number' ||\n typeof json === 'boolean' ||\n json === null ||\n json === undefined);\n}\n/**\n * Prune a JSON object to only include the keys in the allowlist and excludes the keys\n * in the exclude list.\n *\n * This function is a mutative function that will modify the original JSON object.\n * This is done to avoid creating a new JSON object and copying the data.\n *\n * @param json - The JSON object to prune.\n * @param allowlist - The keys to include in the pruned JSON object.\n * @param excludelist - The keys to exclude from the pruned JSON object.\n */\nexport function pruneJson(json, allowlist, excludelist) {\n if (!json)\n return;\n // tokenize the allowlist and excludelist\n var allowlistTokens = allowlist.map(tokenizeJsonPath);\n var excludelistTokens = excludelist.map(tokenizeJsonPath);\n _pruneJson({\n json: json,\n allowlist: allowlistTokens,\n excludelist: excludelistTokens,\n ancestors: [],\n });\n}\nexport function _pruneJson(_a) {\n var e_1, _b;\n var json = _a.json, targetObject = _a.targetObject, allowlist = _a.allowlist, excludelist = _a.excludelist, ancestors = _a.ancestors, parentObject = _a.parentObject, targetKey = _a.targetKey;\n if (!targetObject) {\n targetObject = json;\n }\n var keys = Object.keys(targetObject);\n try {\n for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {\n var key = keys_1_1.value;\n var path = __spreadArray(__spreadArray([], __read(ancestors), false), [key], false);\n if (isJsonPrimitive(targetObject[key])) {\n // if the value does not match allowlist or matches exclude list, delete it\n if (!hasPathMatchInList(path, allowlist) || hasPathMatchInList(path, excludelist)) {\n delete targetObject[key];\n }\n }\n else {\n _pruneJson({\n json: json,\n targetObject: targetObject[key],\n allowlist: allowlist,\n excludelist: excludelist,\n ancestors: path,\n parentObject: targetObject,\n targetKey: key,\n });\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (keys_1_1 && !keys_1_1.done && (_b = keys_1.return)) _b.call(keys_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n // if this object is empty now, delete the whole object\n if (Object.keys(targetObject).length === 0 && parentObject && targetKey) {\n delete parentObject[targetKey];\n }\n}\n/**\n * Tokenize a JSON path string into an array of strings.\n * Escapes ~0 and ~1 to ~ and / respectively.\n *\n * e.g.) turns string \"a/b/c\" into [\"a\", \"b\", \"c\"]\n *\n * @param path - The JSON path to tokenize.\n * @returns The tokenized JSON path.\n */\nexport function tokenizeJsonPath(path) {\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n return path.split('/').map(function (token) { return token.replace(/~0/g, '~').replace(/~1/g, '/'); });\n}\n/**\n * Check if a JSON path matches a path matcher.\n *\n * Rules:\n * 1. If a key in a path and a matcher are the same, then they match, move to the next\n * 2. If the matcher is a *, then it matches the key, move to the next\n * 3. If the matcher is a **, then it matches >=0 keys\n *\n * @param path - The path to check.\n * @param pathMatcher - The path matcher to check against.\n * @param i - The current index of the path.\n * @param j - The current index of the path matcher.\n * @returns True if the path matches the path matcher, false otherwise.\n */\nexport function isPathMatch(path, pathMatcher, i, j) {\n if (i === void 0) { i = 0; }\n if (j === void 0) { j = 0; }\n if (j === pathMatcher.length) {\n return i === path.length;\n }\n if (i === path.length) {\n while (j < pathMatcher.length && pathMatcher[j] === '**') {\n j++;\n }\n return j === pathMatcher.length;\n }\n var currentMatcher = pathMatcher[j];\n if (currentMatcher === '**') {\n if (j + 1 === pathMatcher.length) {\n return true;\n }\n for (var k = i; k <= path.length; k++) {\n if (isPathMatch(path, pathMatcher, k, j + 1)) {\n return true;\n }\n }\n return false;\n }\n else if (currentMatcher === '*' || currentMatcher === path[i]) {\n return isPathMatch(path, pathMatcher, i + 1, j + 1);\n }\n else {\n return false;\n }\n}\n/**\n * Check if a JSON path matches any of the path matchers in the allow or exclude list.\n *\n * @param path - The JSON path to check.\n * @param allowOrExcludeList - The allow or exclude list to check against.\n * @returns True if the path matches any of the path matchers in the allow or exclude list, false otherwise.\n */\nfunction hasPathMatchInList(path, allowOrExcludeList) {\n return allowOrExcludeList.some(function (l) { return isPathMatch(path, l); });\n}\n//# sourceMappingURL=json-query.js.map","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getGlobalScope } from './global-scope';\nimport { pruneJson } from './utils/json-query';\nimport { SAFE_HEADERS, FORBIDDEN_HEADERS } from './';\nvar TEXT_READ_TIMEOUT = 500;\nexport var MAXIMUM_ENTRIES = 100;\n/**\n * This class encapsulates the RequestInit (https://developer.mozilla.org/en-US/docs/Web/API/RequestInit)\n * object so that the consumer can only get access to the headers, method and body size.\n *\n * This is to prevent consumers from directly accessing the Request object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * request.\n * * NEVER .clone() the RequestInit object. This will 2x's the memory overhead of the request\n * * NEVER: call .arrayBuffer(), text(), json() or any other method on the body that\n * consumes the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar RequestWrapperFetch = /** @class */ (function () {\n function RequestWrapperFetch(request) {\n this.request = request;\n }\n RequestWrapperFetch.prototype.headers = function (allow) {\n var e_1, _a;\n if (allow === void 0) { allow = []; }\n var headersUnsafe = this.request.headers;\n // copy the headers into a new object\n var headersSafeCopy = {};\n if (Array.isArray(headersUnsafe)) {\n headersUnsafe.forEach(function (_a) {\n var _b = __read(_a, 2), headerName = _b[0], headerValue = _b[1];\n headersSafeCopy[headerName] = headerValue;\n });\n }\n else if (headersUnsafe instanceof Headers) {\n headersUnsafe.forEach(function (value, key) {\n headersSafeCopy[key] = value;\n });\n }\n else if (typeof headersUnsafe === 'object' && headersUnsafe !== null) {\n try {\n for (var _b = __values(Object.entries(headersUnsafe)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n headersSafeCopy[key] = value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n return pruneHeaders(headersSafeCopy, { allow: allow });\n };\n Object.defineProperty(RequestWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n if (typeof this._bodySize === 'number')\n return this._bodySize;\n var global = getGlobalScope();\n /* istanbul ignore if */\n if (!(global === null || global === void 0 ? void 0 : global.TextEncoder)) {\n return;\n }\n var body = this.request.body;\n this._bodySize = getBodySize(body, MAXIMUM_ENTRIES);\n return this._bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"method\", {\n get: function () {\n return this.request.method;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperFetch.prototype, \"body\", {\n get: function () {\n if (typeof this.request.body === 'string') {\n return this.request.body;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperFetch;\n}());\nexport { RequestWrapperFetch };\nvar RequestWrapperXhr = /** @class */ (function () {\n function RequestWrapperXhr(bodyRaw, requestHeaders) {\n this.bodyRaw = bodyRaw;\n this.requestHeaders = requestHeaders;\n }\n RequestWrapperXhr.prototype.headers = function (allow) {\n if (allow === void 0) { allow = []; }\n return pruneHeaders(this.requestHeaders, { allow: allow });\n };\n Object.defineProperty(RequestWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return getBodySize(this.bodyRaw, MAXIMUM_ENTRIES);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(RequestWrapperXhr.prototype, \"body\", {\n get: function () {\n if (typeof this.bodyRaw === 'string') {\n return this.bodyRaw;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n RequestWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n text = this.body;\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n });\n });\n };\n return RequestWrapperXhr;\n}());\nexport { RequestWrapperXhr };\nfunction getBodySize(bodyUnsafe, maxEntries) {\n var e_2, _a;\n var bodySize;\n var global = getGlobalScope();\n /* istanbul ignore next */\n var TextEncoder = global === null || global === void 0 ? void 0 : global.TextEncoder;\n /* istanbul ignore next */\n if (!TextEncoder) {\n return;\n }\n var bodySafe;\n if (typeof bodyUnsafe === 'string') {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe).length;\n }\n else if (bodyUnsafe instanceof Blob) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.size;\n }\n else if (bodyUnsafe instanceof URLSearchParams) {\n bodySafe = bodyUnsafe;\n bodySize = new TextEncoder().encode(bodySafe.toString()).length;\n }\n else if (ArrayBuffer.isView(bodyUnsafe)) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof ArrayBuffer) {\n bodySafe = bodyUnsafe;\n bodySize = bodySafe.byteLength;\n }\n else if (bodyUnsafe instanceof FormData) {\n // Estimating only for text parts; not accurate for files\n var formData = bodyUnsafe;\n var total = 0;\n var count = 0;\n try {\n for (var _b = __values(formData.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n total += key.length;\n if (typeof value === 'string') {\n total += new TextEncoder().encode(value).length;\n }\n else if (value instanceof Blob) {\n total += value.size;\n }\n else {\n // encountered an unknown type\n // we can't estimate the size of this entry\n return;\n }\n // terminate if we reach the maximum number of entries\n // to avoid performance issues in case of very large FormData\n if (++count >= maxEntries) {\n return;\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_2) throw e_2.error; }\n }\n bodySize = total;\n }\n else if (bodyUnsafe instanceof ReadableStream) {\n // If bodyUnsafe is an instanceof ReadableStream, we can't determine the size,\n // without consuming it, so we return undefined.\n // Never ever consume ReadableStream! DO NOT DO IT!!!\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n bodySafe = bodyUnsafe;\n return;\n }\n return bodySize;\n}\n/**\n * This class encapsulates the Fetch API Response object\n * (https://developer.mozilla.org/en-US/docs/Web/API/Response) so that the consumer can\n * only get access to the headers and body size.\n *\n * This is to prevent consumers from directly accessing the Response object\n * and mutating it or running costly operations on it.\n *\n * IMPORTANT:\n * * Do not make changes to this class without careful consideration\n * of performance implications, memory usage and potential to mutate the customer's\n * response.\n * * Do not .clone() the Response object unless you need to access the body.\n * Cloning will 2x the memory overhead of the response.\n * * NEVER consume the body's stream. This will cause the response to be consumed\n * meaning the body will be empty when the customer tries to access it.\n * (ie: if the body is an instanceof https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * never call any of the methods on it)\n */\nvar ResponseWrapperFetch = /** @class */ (function () {\n function ResponseWrapperFetch(response) {\n this.response = response;\n }\n ResponseWrapperFetch.prototype.headers = function (allow) {\n var _a;\n if (allow === void 0) { allow = []; }\n if (this.response.headers instanceof Headers) {\n var headersSafe = this.response.headers;\n var headersOut_1 = {};\n /* istanbul ignore next */\n (_a = headersSafe === null || headersSafe === void 0 ? void 0 : headersSafe.forEach) === null || _a === void 0 ? void 0 : _a.call(headersSafe, function (value, key) {\n headersOut_1[key] = value;\n });\n return pruneHeaders(headersOut_1, { allow: allow });\n }\n return;\n };\n Object.defineProperty(ResponseWrapperFetch.prototype, \"bodySize\", {\n get: function () {\n var _a, _b;\n if (this._bodySize !== undefined)\n return this._bodySize;\n /* istanbul ignore next */\n var contentLength = (_b = (_a = this.response.headers) === null || _a === void 0 ? void 0 : _a.get) === null || _b === void 0 ? void 0 : _b.call(_a, 'content-length');\n var bodySize = contentLength ? parseInt(contentLength, 10) : undefined;\n this._bodySize = bodySize;\n return bodySize;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperFetch.prototype, \"status\", {\n get: function () {\n return this.response.status;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperFetch.prototype.text = function () {\n return __awaiter(this, void 0, void 0, function () {\n var textPromise, timer, text, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // !!!IMPORTANT: we clone the response to avoid mutating the original response\n // never call .text(), .json(), etc.. on the original response always clone it first\n if (!this.clonedResponse) {\n this.clonedResponse = this.response.clone();\n }\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n textPromise = this.clonedResponse.text();\n timer = new Promise(function (resolve) {\n return setTimeout(\n /* istanbul ignore next */\n function () { return resolve(null); }, TEXT_READ_TIMEOUT);\n });\n return [4 /*yield*/, Promise.race([textPromise, timer])];\n case 2:\n text = _a.sent();\n return [2 /*return*/, text];\n case 3:\n error_1 = _a.sent();\n return [2 /*return*/, null];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n ResponseWrapperFetch.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var text;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n return [4 /*yield*/, this.text()];\n case 1:\n text = _a.sent();\n return [2 /*return*/, safeParseAndPruneBody(text, allow, exclude)];\n }\n });\n });\n };\n return ResponseWrapperFetch;\n}());\nexport { ResponseWrapperFetch };\nvar ResponseWrapperXhr = /** @class */ (function () {\n function ResponseWrapperXhr(statusCode, headersString, size, getJson) {\n this.statusCode = statusCode;\n this.headersString = headersString;\n this.size = size;\n this.getJson = getJson;\n }\n Object.defineProperty(ResponseWrapperXhr.prototype, \"bodySize\", {\n get: function () {\n return this.size;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ResponseWrapperXhr.prototype, \"status\", {\n get: function () {\n return this.statusCode;\n },\n enumerable: false,\n configurable: true\n });\n ResponseWrapperXhr.prototype.headers = function (allow) {\n var e_3, _a;\n if (allow === void 0) { allow = []; }\n if (!this.headersString) {\n return {};\n }\n var headers = {};\n var headerLines = this.headersString.split('\\r\\n');\n try {\n for (var headerLines_1 = __values(headerLines), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {\n var line = headerLines_1_1.value;\n var _b = __read(line.split(': '), 2), key = _b[0], value = _b[1];\n if (key && value) {\n headers[key] = value;\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return pruneHeaders(headers, { allow: allow });\n };\n ResponseWrapperXhr.prototype.json = function (allow, exclude) {\n if (allow === void 0) { allow = []; }\n if (exclude === void 0) { exclude = []; }\n return __awaiter(this, void 0, void 0, function () {\n var jsonBody;\n return __generator(this, function (_a) {\n if (allow.length === 0) {\n return [2 /*return*/, null];\n }\n jsonBody = this.getJson();\n if (jsonBody) {\n pruneJson(jsonBody, allow, exclude);\n return [2 /*return*/, jsonBody];\n }\n return [2 /*return*/, null];\n });\n });\n };\n return ResponseWrapperXhr;\n}());\nexport { ResponseWrapperXhr };\nfunction safeParseAndPruneBody(text, allow, exclude) {\n if (!text)\n return null;\n try {\n var json = JSON.parse(text);\n pruneJson(json, allow, exclude);\n return json;\n }\n catch (error) {\n return null;\n }\n}\nexport var PRUNE_STRATEGY;\n(function (PRUNE_STRATEGY) {\n PRUNE_STRATEGY[\"REDACT\"] = \"redact\";\n PRUNE_STRATEGY[\"REMOVE\"] = \"remove\";\n})(PRUNE_STRATEGY || (PRUNE_STRATEGY = {}));\nvar REDACTED_VALUE = '[REDACTED]';\n/**\n * Prune headers from a headers record object.\n * @param headers - The headers to prune.\n * @param options - The options to prune the headers.\n * @param options.exclude - List of headers to delete from headers\n * @param options.include - List of headers to keep in headers, if not provided, all headers are kept by default\n * @returns The pruned headers.\n */\nexport var pruneHeaders = function (headers, options) {\n var e_4, _a;\n var _b = options.allow, allow = _b === void 0 ? [] : _b, _c = options.strategy, strategy = _c === void 0 ? PRUNE_STRATEGY.REMOVE : _c;\n var exclude = __spreadArray([], __read(FORBIDDEN_HEADERS), false);\n var headersPruned = {};\n var _loop_1 = function (key) {\n var lowerKey = key.toLowerCase();\n if (exclude.find(function (e) { return e.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else if (!allow.find(function (i) { return i.toLowerCase() === lowerKey; })) {\n if (strategy === PRUNE_STRATEGY.REDACT) {\n headersPruned[key] = REDACTED_VALUE;\n }\n }\n else {\n headersPruned[key] = headers[key];\n }\n };\n try {\n for (var _d = __values(Object.keys(headers)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var key = _e.value;\n _loop_1(key);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n }\n finally { if (e_4) throw e_4.error; }\n }\n return headersPruned;\n};\nvar NetworkRequestEvent = /** @class */ (function () {\n function NetworkRequestEvent(type, method, timestamp, startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime) {\n if (status === void 0) { status = 0; }\n this.type = type;\n this.method = method;\n this.timestamp = timestamp;\n this.startTime = startTime;\n this.url = url;\n this.requestWrapper = requestWrapper;\n this.status = status;\n this.duration = duration;\n this.responseWrapper = responseWrapper;\n this.error = error;\n this.endTime = endTime;\n }\n NetworkRequestEvent.prototype.toSerializable = function () {\n var _a, _b, _c, _d;\n var serialized = {\n type: this.type,\n method: this.method,\n url: this.url,\n timestamp: this.timestamp,\n status: this.status,\n duration: this.duration,\n error: this.error,\n startTime: this.startTime,\n endTime: this.endTime,\n requestHeaders: (_a = this.requestWrapper) === null || _a === void 0 ? void 0 : _a.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n requestBodySize: (_b = this.requestWrapper) === null || _b === void 0 ? void 0 : _b.bodySize,\n responseHeaders: (_c = this.responseWrapper) === null || _c === void 0 ? void 0 : _c.headers(__spreadArray([], __read(SAFE_HEADERS), false)),\n responseBodySize: (_d = this.responseWrapper) === null || _d === void 0 ? void 0 : _d.bodySize,\n };\n return Object.fromEntries(Object.entries(serialized).filter(function (_a) {\n var _b = __read(_a, 2), _ = _b[0], v = _b[1];\n return v !== undefined;\n }));\n };\n return NetworkRequestEvent;\n}());\nexport { NetworkRequestEvent };\n//# sourceMappingURL=network-request-event.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { getGlobalScope } from './';\nimport { UUID } from './utils/uuid';\nimport { NetworkRequestEvent, RequestWrapperFetch, ResponseWrapperFetch, RequestWrapperXhr, ResponseWrapperXhr, } from './network-request-event';\n/**\n * Typeguard function checks if an input is a Request object.\n */\nfunction isRequest(requestInfo) {\n return typeof requestInfo === 'object' && requestInfo !== null && 'url' in requestInfo && 'method' in requestInfo;\n}\nvar NetworkEventCallback = /** @class */ (function () {\n function NetworkEventCallback(callback, id) {\n if (id === void 0) { id = UUID(); }\n this.callback = callback;\n this.id = id;\n }\n return NetworkEventCallback;\n}());\nexport { NetworkEventCallback };\nvar NetworkObserver = /** @class */ (function () {\n function NetworkObserver(logger) {\n this.eventCallbacks = new Map();\n this.isObserving = false;\n this.logger = logger;\n var globalScope = getGlobalScope();\n if (!NetworkObserver.isSupported()) {\n /* istanbul ignore next */\n return;\n }\n this.globalScope = globalScope;\n }\n NetworkObserver.isSupported = function () {\n var globalScope = getGlobalScope();\n return !!globalScope && !!globalScope.fetch;\n };\n NetworkObserver.prototype.subscribe = function (eventCallback, logger) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n if (!this.logger) {\n this.logger = logger;\n }\n this.eventCallbacks.set(eventCallback.id, eventCallback);\n if (!this.isObserving) {\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrOpen = (_c = (_b = (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.XMLHttpRequest) === null || _b === void 0 ? void 0 : _b.prototype) === null || _c === void 0 ? void 0 : _c.open;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSend = (_f = (_e = (_d = this.globalScope) === null || _d === void 0 ? void 0 : _d.XMLHttpRequest) === null || _e === void 0 ? void 0 : _e.prototype) === null || _f === void 0 ? void 0 : _f.send;\n /* istanbul ignore next */\n // eslint-disable-next-line @typescript-eslint/unbound-method\n var originalXhrSetRequestHeader = (_j = (_h = (_g = this.globalScope) === null || _g === void 0 ? void 0 : _g.XMLHttpRequest) === null || _h === void 0 ? void 0 : _h.prototype) === null || _j === void 0 ? void 0 : _j.setRequestHeader;\n if (originalXhrOpen && originalXhrSend && originalXhrSetRequestHeader) {\n this.observeXhr(originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader);\n }\n /* istanbul ignore next */\n var originalFetch = (_k = this.globalScope) === null || _k === void 0 ? void 0 : _k.fetch;\n /* istanbul ignore next */\n if (originalFetch) {\n this.observeFetch(originalFetch);\n }\n /* istanbul ignore next */\n this.isObserving = true;\n }\n };\n NetworkObserver.prototype.unsubscribe = function (eventCallback) {\n this.eventCallbacks.delete(eventCallback.id);\n };\n NetworkObserver.prototype.triggerEventCallbacks = function (event) {\n var _this = this;\n this.eventCallbacks.forEach(function (callback) {\n var _a;\n try {\n callback.callback(event);\n }\n catch (err) {\n // if the callback throws an error, we should catch it\n // to avoid breaking the fetch promise chain\n /* istanbul ignore next */\n (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while triggering event callbacks', err);\n }\n });\n };\n NetworkObserver.prototype.handleNetworkRequestEvent = function (requestType, requestInfo, requestWrapper, responseWrapper, typedError, startTime, durationStart) {\n var _a;\n /* istanbul ignore next */\n if (startTime === undefined || durationStart === undefined) {\n // if we reach this point, it means that the performance API is not supported\n // so we can't construct a NetworkRequestEvent\n return;\n }\n // parse the URL and Method\n var url;\n var method = 'GET';\n if (isRequest(requestInfo)) {\n url = requestInfo['url'];\n method = requestInfo['method'];\n }\n else {\n url = (_a = requestInfo === null || requestInfo === void 0 ? void 0 : requestInfo.toString) === null || _a === void 0 ? void 0 : _a.call(requestInfo);\n }\n // strip basic auth from the URL\n if (url) {\n try {\n var parsedUrl = new URL(url);\n // reconstruct the URL without the basic auth\n url = \"\".concat(parsedUrl.protocol, \"//\").concat(parsedUrl.host).concat(parsedUrl.pathname).concat(parsedUrl.search).concat(parsedUrl.hash);\n // eslint-disable-next-line no-empty\n }\n catch (err) { }\n }\n method = (requestWrapper === null || requestWrapper === void 0 ? void 0 : requestWrapper.method) || method;\n var status, error;\n if (responseWrapper) {\n status = responseWrapper.status;\n }\n if (typedError) {\n error = {\n name: typedError.name || 'UnknownError',\n message: typedError.message || 'An unknown error occurred',\n };\n status = 0;\n }\n var duration = Math.floor(performance.now() - durationStart);\n var endTime = Math.floor(startTime + duration);\n var requestEvent = new NetworkRequestEvent(requestType, method, startTime, // timestamp and startTime are aliases\n startTime, url, requestWrapper, status, duration, responseWrapper, error, endTime);\n this.triggerEventCallbacks(requestEvent);\n };\n NetworkObserver.prototype.getTimestamps = function () {\n var _a, _b;\n /* istanbul ignore next */\n return {\n startTime: (_a = Date.now) === null || _a === void 0 ? void 0 : _a.call(Date),\n durationStart: (_b = performance === null || performance === void 0 ? void 0 : performance.now) === null || _b === void 0 ? void 0 : _b.call(performance),\n };\n };\n NetworkObserver.prototype.observeFetch = function (originalFetch) {\n var _this = this;\n /* istanbul ignore next */\n if (!this.globalScope || !originalFetch) {\n return;\n }\n /**\n * IMPORTANT: This overrides window.fetch in browsers.\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of fetch\n * and make sure another developer who is an expert reviews this change throughly\n */\n this.globalScope.fetch = function (requestInfo, requestInit) { return __awaiter(_this, void 0, void 0, function () {\n var timestamps, originalResponse, originalError, err_1;\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n try {\n timestamps = this.getTimestamps();\n }\n catch (error) {\n /* istanbul ignore next */\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('an unexpected error occurred while retrieving timestamps', error);\n }\n _c.label = 1;\n case 1:\n _c.trys.push([1, 3, , 4]);\n return [4 /*yield*/, originalFetch(requestInfo, requestInit)];\n case 2:\n originalResponse = _c.sent();\n return [3 /*break*/, 4];\n case 3:\n err_1 = _c.sent();\n // Capture error information\n originalError = err_1;\n return [3 /*break*/, 4];\n case 4:\n // 3. call the handler after the fetch call is done\n try {\n this.handleNetworkRequestEvent('fetch', requestInfo, requestInit ? new RequestWrapperFetch(requestInit) : undefined, originalResponse ? new ResponseWrapperFetch(originalResponse) : undefined, originalError, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.startTime, \n /* istanbul ignore next */\n timestamps === null || timestamps === void 0 ? void 0 : timestamps.durationStart);\n }\n catch (err) {\n // this catch shouldn't be reachable, but keep it here for safety\n // because we're overriding the fetch function and better to be safe than sorry\n /* istanbul ignore next */\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.debug('an unexpected error occurred while handling fetch', err);\n }\n // 4. return the original response or throw the original error\n if (originalResponse) {\n // if the response is not undefined, return it\n return [2 /*return*/, originalResponse];\n }\n else {\n throw originalError;\n }\n return [2 /*return*/];\n }\n });\n }); };\n };\n /**\n * Creates a function that parses the response of an XMLHttpRequest as JSON.\n *\n * Returns function instead of JSON object to avoid unnecessary parsing if the\n * body is not being captured.\n *\n * @param xhrSafe - The XMLHttpRequest object.\n * @param context - The NetworkObserver instance.\n * @returns A function that parses the response of an XMLHttpRequest as JSON.\n */\n NetworkObserver.createXhrJsonParser = function (xhrUnsafe, context) {\n return function () {\n var _a, _b;\n try {\n if (xhrUnsafe.responseType === 'json') {\n // if response is a JS object, clone it so that subscribers can't mutate it\n if ((_a = context.globalScope) === null || _a === void 0 ? void 0 : _a.structuredClone) {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return context.globalScope.structuredClone(xhrUnsafe.response);\n }\n }\n else if (['text', ''].includes(xhrUnsafe.responseType)) {\n // if response is a string, parse it as JSON\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return */\n return JSON.parse(xhrUnsafe.responseText);\n }\n }\n catch (err) {\n /* istanbul ignore if */\n if (err instanceof Error && err.name === 'InvalidStateError') {\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseText#exceptions\n // if we reach here, it means we don't handle responseType correctly\n (_b = context.logger) === null || _b === void 0 ? void 0 : _b.error(\"unexpected error when retrieving responseText. responseType='\".concat(xhrUnsafe.responseType, \"'\"));\n }\n // the other possible error is Json Parse error which we fail silently\n return null;\n }\n return null;\n };\n };\n NetworkObserver.prototype.observeXhr = function (originalXhrOpen, originalXhrSend, originalXhrSetRequestHeader) {\n /* istanbul ignore next */\n if (!this.globalScope || !originalXhrOpen || !originalXhrSend) {\n return;\n }\n var xhrProto = this.globalScope.XMLHttpRequest.prototype;\n var networkObserverContext = this;\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.open\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.open\n * and make sure another developer who is an expert reviews this change throughly\n */\n xhrProto.open = function () {\n var _a, _b;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var xhrSafe = this;\n var _c = __read(args, 2), method = _c[0], url = _c[1];\n try {\n /* istanbul ignore next */\n xhrSafe.$$AmplitudeAnalyticsEvent = __assign({ method: method, url: (_a = url === null || url === void 0 ? void 0 : url.toString) === null || _a === void 0 ? void 0 : _a.call(url), headers: {} }, networkObserverContext.getTimestamps());\n }\n catch (err) {\n /* istanbul ignore next */\n (_b = networkObserverContext.logger) === null || _b === void 0 ? void 0 : _b.error('an unexpected error occurred while calling xhr open', err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return originalXhrOpen.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.send\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.send\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.send = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var xhrUnsafe = this;\n var xhrSafe = xhrUnsafe;\n var getJson = NetworkObserver.createXhrJsonParser(xhrUnsafe, networkObserverContext);\n var body = args[0];\n var requestEvent = xhrSafe.$$AmplitudeAnalyticsEvent;\n xhrSafe.addEventListener('loadend', function () {\n var _a;\n try {\n var responseHeaders = xhrSafe.getAllResponseHeaders();\n var responseBodySize = xhrSafe.getResponseHeader('content-length');\n var responseWrapper = new ResponseWrapperXhr(xhrSafe.status, responseHeaders, \n /* istanbul ignore next */\n responseBodySize ? parseInt(responseBodySize, 10) : undefined, getJson);\n var requestHeaders = xhrSafe.$$AmplitudeAnalyticsEvent.headers;\n var requestWrapper = new RequestWrapperXhr(body, requestHeaders);\n requestEvent.status = xhrSafe.status;\n networkObserverContext.handleNetworkRequestEvent('xhr', { url: requestEvent.url, method: requestEvent.method }, requestWrapper, responseWrapper, undefined, requestEvent.startTime, requestEvent.durationStart);\n }\n catch (err) {\n /* istanbul ignore next */\n (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.error('an unexpected error occurred while handling xhr send', err);\n }\n });\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n return originalXhrSend.apply(xhrSafe, args);\n };\n /**\n * IMPORTANT: This overrides window.XMLHttpRequest.prototype.setRequestHeader\n * You probably never need to make changes to this function.\n * If you do, please be careful to preserve the original functionality of xhr.setRequestHeader\n * and make sure another developer who is an expert reviews this change throughly\n */\n // allow \"any\" type for args to reflect how it's used in the browser\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n xhrProto.setRequestHeader = function (headerName, headerValue) {\n var _a;\n var xhrSafe = this;\n try {\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment */\n xhrSafe.$$AmplitudeAnalyticsEvent.headers[headerName] = headerValue;\n }\n catch (err) {\n /* istanbul ignore next */\n (_a = networkObserverContext.logger) === null || _a === void 0 ? void 0 : _a.error('an unexpected error occurred while calling xhr setRequestHeader', err);\n }\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-argument */\n originalXhrSetRequestHeader.apply(xhrSafe, [headerName, headerValue]);\n };\n };\n return NetworkObserver;\n}());\nexport { NetworkObserver };\n// singleton instance of NetworkObserver\nexport var networkObserver = new NetworkObserver();\n//# sourceMappingURL=network-observer.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { getQueryParams } from '../query-params';\nimport { UTM_CAMPAIGN, UTM_CONTENT, UTM_MEDIUM, UTM_SOURCE, UTM_TERM, GCLID, FBCLID, BASE_CAMPAIGN, DCLID, MSCLKID, RDT_CID, TWCLID, TTCLID, KO_CLICK_ID, LI_FAT_ID, GBRAID, WBRAID, UTM_ID, } from '../types/constants';\nvar CampaignParser = /** @class */ (function () {\n function CampaignParser() {\n }\n CampaignParser.prototype.parse = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, __assign(__assign(__assign(__assign({}, BASE_CAMPAIGN), this.getUtmParam()), this.getReferrer()), this.getClickIds())];\n });\n });\n };\n CampaignParser.prototype.getUtmParam = function () {\n var params = getQueryParams();\n var utmCampaign = params[UTM_CAMPAIGN];\n var utmContent = params[UTM_CONTENT];\n var utmId = params[UTM_ID];\n var utmMedium = params[UTM_MEDIUM];\n var utmSource = params[UTM_SOURCE];\n var utmTerm = params[UTM_TERM];\n return {\n utm_campaign: utmCampaign,\n utm_content: utmContent,\n utm_id: utmId,\n utm_medium: utmMedium,\n utm_source: utmSource,\n utm_term: utmTerm,\n };\n };\n CampaignParser.prototype.getReferrer = function () {\n var _a, _b;\n var data = {\n referrer: undefined,\n referring_domain: undefined,\n };\n try {\n data.referrer = document.referrer || undefined;\n data.referring_domain = (_b = (_a = data.referrer) === null || _a === void 0 ? void 0 : _a.split('/')[2]) !== null && _b !== void 0 ? _b : undefined;\n }\n catch (_c) {\n // nothing to track\n }\n return data;\n };\n CampaignParser.prototype.getClickIds = function () {\n var _a;\n var params = getQueryParams();\n return _a = {},\n _a[DCLID] = params[DCLID],\n _a[FBCLID] = params[FBCLID],\n _a[GBRAID] = params[GBRAID],\n _a[GCLID] = params[GCLID],\n _a[KO_CLICK_ID] = params[KO_CLICK_ID],\n _a[LI_FAT_ID] = params[LI_FAT_ID],\n _a[MSCLKID] = params[MSCLKID],\n _a[RDT_CID] = params[RDT_CID],\n _a[TTCLID] = params[TTCLID],\n _a[TWCLID] = params[TWCLID],\n _a[WBRAID] = params[WBRAID],\n _a;\n };\n return CampaignParser;\n}());\nexport { CampaignParser };\n//# sourceMappingURL=campaign-parser.js.map","import { __values } from \"tslib\";\nexport var TEXT_MASK_ATTRIBUTE = 'data-amp-mask';\nexport var MASKED_TEXT_VALUE = '*****';\n// Regex patterns for sensitive data\nexport var CC_REGEX = /\\b(?:\\d[ -]*?){13,16}\\b/;\nexport var SSN_REGEX = /(\\d{3}-?\\d{2}-?\\d{4})/g;\nexport var EMAIL_REGEX = /[^\\s@]+@[^\\s@.]+\\.[^\\s@]+/g;\n/**\n * Replaces sensitive strings (credit cards, SSNs, emails) and custom patterns with masked text\n * @param text - The text to search for sensitive data\n * @param additionalMaskTextPatterns - Optional array of additional regex patterns to mask\n * @returns The text with sensitive data replaced by masked text\n */\nexport var replaceSensitiveString = function (text, additionalMaskTextPatterns) {\n var e_1, _a;\n if (additionalMaskTextPatterns === void 0) { additionalMaskTextPatterns = []; }\n if (typeof text !== 'string') {\n return '';\n }\n var result = text;\n // Check for credit card number (with or without spaces/dashes)\n result = result.replace(CC_REGEX, MASKED_TEXT_VALUE);\n // Check for social security number\n result = result.replace(SSN_REGEX, MASKED_TEXT_VALUE);\n // Check for email\n result = result.replace(EMAIL_REGEX, MASKED_TEXT_VALUE);\n try {\n // Check for additional mask text patterns\n for (var additionalMaskTextPatterns_1 = __values(additionalMaskTextPatterns), additionalMaskTextPatterns_1_1 = additionalMaskTextPatterns_1.next(); !additionalMaskTextPatterns_1_1.done; additionalMaskTextPatterns_1_1 = additionalMaskTextPatterns_1.next()) {\n var pattern = additionalMaskTextPatterns_1_1.value;\n try {\n result = result.replace(pattern, MASKED_TEXT_VALUE);\n }\n catch (_b) {\n // ignore invalid pattern\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (additionalMaskTextPatterns_1_1 && !additionalMaskTextPatterns_1_1.done && (_a = additionalMaskTextPatterns_1.return)) _a.call(additionalMaskTextPatterns_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return result;\n};\n/**\n * Gets the page title, checking if the title element has data-amp-mask attribute\n * @returns The page title, masked if the title element has data-amp-mask attribute\n */\nexport var getPageTitle = function (parseTitleFunction) {\n if (typeof document === 'undefined' || !document.title) {\n return '';\n }\n var titleElement = document.querySelector('title');\n if (titleElement && titleElement.hasAttribute(TEXT_MASK_ATTRIBUTE)) {\n return MASKED_TEXT_VALUE;\n }\n return parseTitleFunction ? parseTitleFunction(document.title) : document.title; // document.title is always synced to the first title element\n};\n//# sourceMappingURL=helpers.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","import { __values } from \"tslib\";\nexport { Observable } from 'zen-observable-ts';\nimport { Observable as ZenObservable } from 'zen-observable-ts';\n/**\n * asyncMap operator for Zen Observable\n *\n * Maps each value emitted by the source Observable using an async function,\n * emitting the resolved values in the same order they arrive.\n */\nfunction asyncMap(observable, fn) {\n return new ZenObservable(function (observer) {\n observable.subscribe({\n next: function (value) {\n fn(value)\n .then(function (result) {\n return observer.next(result);\n })\n .catch(function (error) { return observer.error(error); });\n },\n error: function (error) {\n observer.error(error);\n },\n complete: function () {\n observer.complete();\n },\n });\n });\n}\n/**\n * merge operator for Zen Observable\n *\n * Merges two observables into a single observable, emitting values from both sources in the order they arrive.\n * @param sourceA Observable to merge\n * @param sourceB Observable to merge\n * @returns Unsubscribable cleanup function\n */\nfunction merge(sourceA, sourceB) {\n return new ZenObservable(function (observer) {\n var closed = false;\n var subscriptions = new Set();\n var cleanup = function () {\n var e_1, _a;\n closed = true;\n try {\n for (var subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n var sub = subscriptions_1_1.value;\n try {\n sub.unsubscribe();\n }\n catch (_b) {\n /* do nothing */\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n subscriptions.clear();\n };\n var subscribeTo = function (source) {\n var sub = source.subscribe({\n next: function (value) {\n if (!closed)\n observer.next(value);\n },\n error: function (err) {\n if (!closed) {\n closed = true;\n observer.error(err);\n cleanup();\n }\n },\n complete: function () {\n subscriptions.delete(sub);\n if (!closed && subscriptions.size === 0) {\n observer.complete();\n cleanup();\n closed = true;\n }\n },\n });\n subscriptions.add(sub);\n };\n subscribeTo(sourceA);\n subscribeTo(sourceB);\n return cleanup;\n });\n}\n// function share() {\nfunction multicast(source) {\n var observers = new Set();\n var subscription = null;\n function cleanup() {\n /* istanbul ignore next */\n subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();\n subscription = null;\n observers.clear();\n }\n return new ZenObservable(function (observer) {\n observers.add(observer);\n if (subscription === null) {\n subscription = source.subscribe({\n next: function (value) {\n var e_2, _a;\n var _b;\n try {\n for (var observers_1 = __values(observers), observers_1_1 = observers_1.next(); !observers_1_1.done; observers_1_1 = observers_1.next()) {\n var obs = observers_1_1.value;\n /* istanbul ignore next */\n (_b = obs.next) === null || _b === void 0 ? void 0 : _b.call(obs, value);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (observers_1_1 && !observers_1_1.done && (_a = observers_1.return)) _a.call(observers_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n },\n error: function (err) {\n var e_3, _a;\n var _b;\n try {\n for (var observers_2 = __values(observers), observers_2_1 = observers_2.next(); !observers_2_1.done; observers_2_1 = observers_2.next()) {\n var obs = observers_2_1.value;\n /* istanbul ignore next */\n (_b = obs.error) === null || _b === void 0 ? void 0 : _b.call(obs, err);\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (observers_2_1 && !observers_2_1.done && (_a = observers_2.return)) _a.call(observers_2);\n }\n finally { if (e_3) throw e_3.error; }\n }\n cleanup();\n },\n complete: function () {\n var e_4, _a;\n var _b;\n try {\n for (var observers_3 = __values(observers), observers_3_1 = observers_3.next(); !observers_3_1.done; observers_3_1 = observers_3.next()) {\n var obs = observers_3_1.value;\n /* istanbul ignore next */\n (_b = obs.complete) === null || _b === void 0 ? void 0 : _b.call(obs);\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (observers_3_1 && !observers_3_1.done && (_a = observers_3.return)) _a.call(observers_3);\n }\n finally { if (e_4) throw e_4.error; }\n }\n cleanup();\n },\n });\n }\n // Return unsubscribe function for this observer\n return function () {\n observers.delete(observer);\n // If no observers left, unsubscribe from the source\n if (observers.size === 0 && subscription) {\n subscription.unsubscribe();\n subscription = null;\n }\n };\n });\n}\nexport { asyncMap, multicast, merge };\n//# sourceMappingURL=observable.js.map","import {\n PageTrackingHistoryChanges,\n PageTrackingOptions,\n PageTrackingTrackOn,\n ElementInteractionsOptions,\n BrowserOptions,\n AutocaptureOptions,\n AttributionOptions,\n NetworkTrackingOptions,\n FrustrationInteractionsOptions,\n} from '@amplitude/analytics-core';\n\n/**\n * A subset of AutocaptureOptions that includes the autocapture features that\n * are made available to users by default (even if \"config.autocapture === undefined\")\n */\ntype AutocaptureOptionsDefaultAvailable = Pick<\n AutocaptureOptions,\n 'pageViews' | 'sessions' | 'fileDownloads' | 'formInteractions' | 'attribution' | 'pageUrlEnrichment'\n>;\n\n/**\n * Returns false if autocapture === false or if autocapture[event],\n * otherwise returns true (even if \"config.autocapture === undefined\")\n */\nconst isTrackingEnabled = (\n autocapture: AutocaptureOptionsDefaultAvailable | boolean | undefined,\n event: keyof AutocaptureOptionsDefaultAvailable,\n) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (autocapture?.[event] === false) {\n return false;\n }\n\n return true;\n};\n\nexport const isAttributionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'attribution');\n\nexport const isFileDownloadTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'fileDownloads');\n\nexport const isFormInteractionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'formInteractions');\n\nexport const isPageViewTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageViews');\n\nexport const isSessionTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'sessions');\n\nexport const isPageUrlEnrichmentEnabled = (autocapture: AutocaptureOptions | boolean | undefined) =>\n isTrackingEnabled(autocapture, 'pageUrlEnrichment');\n\n/**\n * Returns true if\n * 1. if autocapture.networkTracking === true\n * 2. if autocapture.networkTracking === object\n * otherwise returns false\n */\nexport const isNetworkTrackingEnabled = (autocapture: AutocaptureOptions | boolean | undefined) => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.networkTracking === true || typeof autocapture.networkTracking === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.elementInteractions === true\n * 3. if autocapture.elementInteractions === object\n * otherwise returns false\n */\nexport const isElementInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.elementInteractions === true || typeof autocapture.elementInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\n/**\n * Returns true if\n * 1. autocapture === true\n * 2. if autocapture.webVitals === true\n * otherwise returns false\n */\nexport const isWebVitalsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (typeof autocapture === 'object' && autocapture.webVitals === true) {\n return true;\n }\n\n return false;\n};\n\nexport const isFrustrationInteractionsEnabled = (autocapture: AutocaptureOptions | boolean | undefined): boolean => {\n if (typeof autocapture === 'boolean') {\n return autocapture;\n }\n\n if (\n typeof autocapture === 'object' &&\n (autocapture.frustrationInteractions === true || typeof autocapture.frustrationInteractions === 'object')\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getElementInteractionsConfig = (config: BrowserOptions): ElementInteractionsOptions | undefined => {\n if (\n isElementInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.elementInteractions === 'object'\n ) {\n return config.autocapture.elementInteractions;\n }\n return undefined;\n};\n\nexport const getFrustrationInteractionsConfig = (\n config: BrowserOptions,\n): FrustrationInteractionsOptions | undefined => {\n if (\n isFrustrationInteractionsEnabled(config.autocapture) &&\n typeof config.autocapture === 'object' &&\n typeof config.autocapture.frustrationInteractions === 'object'\n ) {\n return config.autocapture.frustrationInteractions;\n }\n return undefined;\n};\n\nexport const getNetworkTrackingConfig = (config: BrowserOptions): NetworkTrackingOptions | undefined => {\n if (isNetworkTrackingEnabled(config.autocapture)) {\n let networkTrackingConfig;\n if (typeof config.autocapture === 'object' && typeof config.autocapture.networkTracking === 'object') {\n networkTrackingConfig = config.autocapture.networkTracking;\n } else if (config.networkTrackingOptions) {\n networkTrackingConfig = config.networkTrackingOptions;\n }\n return {\n ...networkTrackingConfig,\n captureRules: networkTrackingConfig?.captureRules?.map((rule) => {\n // if URLs and hosts are both set, URLs take precedence over hosts\n if (rule.urls?.length && rule.hosts?.length) {\n const hostsString = JSON.stringify(rule.hosts);\n const urlsString = JSON.stringify(rule.urls);\n /* istanbul ignore next */\n config.loggerProvider?.warn(\n `Found network capture rule with both urls='${urlsString}' and hosts='${hostsString}' set. ` +\n `Definition of urls takes precedence over hosts, so ignoring hosts.`,\n );\n return { ...rule, hosts: undefined };\n }\n return rule;\n }),\n };\n }\n return;\n};\n\nexport const getPageViewTrackingConfig = (config: BrowserOptions): PageTrackingOptions => {\n let trackOn: PageTrackingTrackOn | undefined = () => false;\n let trackHistoryChanges: PageTrackingHistoryChanges | undefined = undefined;\n let eventType: string | undefined;\n const pageCounter = config.pageCounter;\n\n const isDefaultPageViewTrackingEnabled = isPageViewTrackingEnabled(config.defaultTracking);\n if (isDefaultPageViewTrackingEnabled) {\n trackOn = undefined;\n eventType = undefined;\n\n if (\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.pageViews &&\n typeof config.defaultTracking.pageViews === 'object'\n ) {\n if ('trackOn' in config.defaultTracking.pageViews) {\n trackOn = config.defaultTracking.pageViews.trackOn;\n }\n\n if ('trackHistoryChanges' in config.defaultTracking.pageViews) {\n trackHistoryChanges = config.defaultTracking.pageViews.trackHistoryChanges;\n }\n\n if ('eventType' in config.defaultTracking.pageViews && config.defaultTracking.pageViews.eventType) {\n eventType = config.defaultTracking.pageViews.eventType;\n }\n }\n }\n\n return {\n trackOn,\n trackHistoryChanges,\n eventType,\n pageCounter,\n };\n};\n\nexport const getAttributionTrackingConfig = (config: BrowserOptions): AttributionOptions => {\n if (\n isAttributionTrackingEnabled(config.defaultTracking) &&\n config.defaultTracking &&\n typeof config.defaultTracking === 'object' &&\n config.defaultTracking.attribution &&\n typeof config.defaultTracking.attribution === 'object'\n ) {\n return {\n ...config.defaultTracking.attribution,\n };\n }\n\n return {};\n};\n","import { Result, AmplitudeReturn } from '@amplitude/analytics-core';\n\ninterface ProxyItem {\n name: string;\n args: any[];\n resolve?: (promise: Promise<Result>) => void;\n}\n\ntype QueueProxy = Array<ProxyItem>;\n\ninterface InstanceProxy {\n _q: QueueProxy;\n _iq: Record<string, InstanceProxy>;\n}\n\n/**\n * Applies the proxied functions on the proxied amplitude snippet to an instance of the real object.\n * @ignore\n */\nexport const runQueuedFunctions = (instance: object, queue: QueueProxy) => {\n convertProxyObjectToRealObject(instance, queue);\n};\n\n/**\n * Applies the proxied functions on the proxied object to an instance of the real object.\n * Used to convert proxied Identify and Revenue objects.\n */\nexport const convertProxyObjectToRealObject = <T>(instance: T, queue: QueueProxy): T => {\n for (let i = 0; i < queue.length; i++) {\n const { name, args, resolve } = queue[i];\n const fn = instance && instance[name as keyof T];\n if (typeof fn === 'function') {\n const result = fn.apply(instance, args) as AmplitudeReturn<Result>;\n if (typeof resolve === 'function') {\n resolve(result?.promise);\n }\n }\n }\n return instance;\n};\n\n/**\n * Check if the param is snippet proxy\n */\nexport const isInstanceProxy = (instance: unknown): instance is InstanceProxy => {\n const instanceProxy = instance as InstanceProxy;\n return instanceProxy && instanceProxy._q !== undefined;\n};\n","export const VERSION = '2.33.1';\n","export const LIBPREFIX = 'amplitude-ts-sdk-script';\n","import { UUID, getLanguage, Event, BeforePlugin, BrowserConfig } from '@amplitude/analytics-core';\nimport { VERSION } from '../version';\nimport { LIBPREFIX } from '../lib-prefix';\n\nconst BROWSER_PLATFORM = 'Web';\nconst IP_ADDRESS = '$remote';\nexport class Context implements BeforePlugin {\n name = '@amplitude/plugin-context-browser';\n type = 'before' as const;\n\n // this.config is defined in setup() which will always be called first\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n userAgent: string | undefined;\n library = `${LIBPREFIX}/${VERSION}`;\n\n constructor() {\n /* istanbul ignore else */\n if (typeof navigator !== 'undefined') {\n this.userAgent = navigator.userAgent;\n }\n }\n\n setup(config: BrowserConfig): Promise<undefined> {\n this.config = config;\n\n return Promise.resolve(undefined);\n }\n\n async execute(context: Event): Promise<Event> {\n const time = new Date().getTime();\n const lastEventId = this.config.lastEventId ?? -1;\n const nextEventId = context.event_id ?? lastEventId + 1;\n this.config.lastEventId = nextEventId;\n if (!context.time) {\n this.config.lastEventTime = time;\n }\n\n const event: Event = {\n user_id: this.config.userId,\n device_id: this.config.deviceId,\n session_id: this.config.sessionId,\n time,\n ...(this.config.appVersion && { app_version: this.config.appVersion }),\n ...(this.config.trackingOptions.platform && { platform: BROWSER_PLATFORM }),\n ...(this.config.trackingOptions.language && { language: getLanguage() }),\n ...(this.config.trackingOptions.ipAddress && { ip: IP_ADDRESS }),\n insert_id: UUID(),\n partner_id: this.config.partnerId,\n plan: this.config.plan,\n ...(this.config.ingestionMetadata && {\n ingestion_metadata: {\n source_name: this.config.ingestionMetadata.sourceName,\n source_version: this.config.ingestionMetadata.sourceVersion,\n },\n }),\n ...context,\n event_id: nextEventId,\n library: this.library,\n user_agent: this.userAgent,\n };\n return event;\n }\n}\n","import { getGlobalScope, ILogger, BrowserStorage } from '@amplitude/analytics-core';\n\nconst MAX_ARRAY_LENGTH = 1000;\n\ninterface LocalStorageOptions {\n loggerProvider?: ILogger;\n}\nexport class LocalStorage<T> extends BrowserStorage<T> {\n loggerProvider?: ILogger;\n\n constructor(config?: LocalStorageOptions) {\n let localStorage;\n\n try {\n localStorage = getGlobalScope()?.localStorage;\n } catch (e) {\n config?.loggerProvider?.debug(`Failed to access localStorage. error=${JSON.stringify(e)}`);\n localStorage = undefined;\n }\n super(localStorage);\n this.loggerProvider = config?.loggerProvider;\n }\n\n async set(key: string, value: T): Promise<void> {\n if (Array.isArray(value) && value.length > MAX_ARRAY_LENGTH) {\n const droppedEventsCount = value.length - MAX_ARRAY_LENGTH;\n await super.set(key, value.slice(0, MAX_ARRAY_LENGTH) as T);\n this.loggerProvider?.error(\n `Failed to save ${droppedEventsCount} events because the queue length exceeded ${MAX_ARRAY_LENGTH}.`,\n );\n } else {\n await super.set(key, value);\n }\n }\n}\n","import { getGlobalScope, BrowserStorage } from '@amplitude/analytics-core';\n\nexport class SessionStorage<T> extends BrowserStorage<T> {\n constructor() {\n super(getGlobalScope()?.sessionStorage);\n }\n}\n","import { BaseTransport, Payload, Response, Transport } from '@amplitude/analytics-core';\n\nexport class XHRTransport extends BaseTransport implements Transport {\n private state = {\n done: 4,\n };\n private customHeaders: Record<string, string>;\n\n constructor(customHeaders: Record<string, string> = {}) {\n super();\n this.customHeaders = customHeaders;\n }\n\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n /* istanbul ignore if */\n if (typeof XMLHttpRequest === 'undefined') {\n reject(new Error('XHRTransport is not supported.'));\n }\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', serverUrl, true);\n xhr.onreadystatechange = () => {\n if (xhr.readyState === this.state.done) {\n const responseText = xhr.responseText;\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n resolve(this.buildResponse(JSON.parse(responseText)));\n } catch {\n resolve(this.buildResponse({ code: xhr.status }));\n }\n }\n };\n // Merge headers: custom headers override defaults (consistent with FetchTransport)\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: '*/*',\n ...this.customHeaders,\n };\n for (const [key, value] of Object.entries(headers)) {\n xhr.setRequestHeader(key, value);\n }\n xhr.send(JSON.stringify(payload));\n });\n }\n}\n","import { BaseTransport, getGlobalScope, Payload, Response, Transport } from '@amplitude/analytics-core';\n\nexport class SendBeaconTransport extends BaseTransport implements Transport {\n async send(serverUrl: string, payload: Payload): Promise<Response | null> {\n return new Promise((resolve, reject) => {\n const globalScope = getGlobalScope();\n /* istanbul ignore if */\n if (!globalScope?.navigator.sendBeacon) {\n throw new Error('SendBeaconTransport is not supported');\n }\n try {\n const data = JSON.stringify(payload);\n const success = globalScope.navigator.sendBeacon(serverUrl, JSON.stringify(payload));\n if (success) {\n return resolve(\n this.buildResponse({\n code: 200,\n events_ingested: payload.events.length,\n payload_size_bytes: data.length,\n server_upload_time: Date.now(),\n }),\n );\n }\n return resolve(this.buildResponse({ code: 500 }));\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n","import { getOldCookieName, Storage, UserSession } from '@amplitude/analytics-core';\n\nexport const parseLegacyCookies = async (\n apiKey: string,\n cookieStorage: Storage<UserSession>,\n deleteLegacyCookies = true,\n): Promise<UserSession> => {\n const cookieName = getOldCookieName(apiKey);\n const cookies = await cookieStorage.getRaw(cookieName);\n if (!cookies) {\n return {\n optOut: false,\n };\n }\n if (deleteLegacyCookies) {\n await cookieStorage.remove(cookieName);\n }\n const [deviceId, userId, optOut, sessionId, lastEventTime, lastEventId] = cookies.split('.');\n return {\n deviceId,\n userId: decode(userId),\n sessionId: parseTime(sessionId),\n lastEventId: parseTime(lastEventId),\n lastEventTime: parseTime(lastEventTime),\n optOut: Boolean(optOut),\n };\n};\n\nexport const parseTime = (num: string) => {\n const integer = parseInt(num, 32);\n if (isNaN(integer)) {\n return undefined;\n }\n return integer;\n};\n\nexport const decode = (value?: string): string | undefined => {\n if (!atob || !escape || !value) {\n return undefined;\n }\n try {\n return decodeURIComponent(escape(atob(value)));\n } catch {\n return undefined;\n }\n};\n","import { IdentityStorageType, ServerZoneType } from '@amplitude/analytics-core';\n\nexport const DEFAULT_EVENT_PREFIX = '[Amplitude]';\n\nexport const DEFAULT_PAGE_VIEW_EVENT = `${DEFAULT_EVENT_PREFIX} Page Viewed`;\nexport const DEFAULT_FORM_START_EVENT = `${DEFAULT_EVENT_PREFIX} Form Started`;\nexport const DEFAULT_FORM_SUBMIT_EVENT = `${DEFAULT_EVENT_PREFIX} Form Submitted`;\nexport const DEFAULT_FILE_DOWNLOAD_EVENT = `${DEFAULT_EVENT_PREFIX} File Downloaded`;\nexport const DEFAULT_SESSION_START_EVENT = 'session_start';\nexport const DEFAULT_SESSION_END_EVENT = 'session_end';\n\nexport const FILE_EXTENSION = `${DEFAULT_EVENT_PREFIX} File Extension`;\nexport const FILE_NAME = `${DEFAULT_EVENT_PREFIX} File Name`;\nexport const LINK_ID = `${DEFAULT_EVENT_PREFIX} Link ID`;\nexport const LINK_TEXT = `${DEFAULT_EVENT_PREFIX} Link Text`;\nexport const LINK_URL = `${DEFAULT_EVENT_PREFIX} Link URL`;\n\nexport const FORM_ID = `${DEFAULT_EVENT_PREFIX} Form ID`;\nexport const FORM_NAME = `${DEFAULT_EVENT_PREFIX} Form Name`;\nexport const FORM_DESTINATION = `${DEFAULT_EVENT_PREFIX} Form Destination`;\n\nexport const DEFAULT_IDENTITY_STORAGE: IdentityStorageType = 'cookie';\nexport const DEFAULT_SERVER_ZONE: ServerZoneType = 'US';\n","import {\n Config,\n Logger,\n ILogger,\n LogLevel,\n Event,\n Storage,\n IngestionMetadata,\n ServerZoneType,\n OfflineDisabled,\n Plan,\n IdentityStorageType,\n TransportTypeOrOptions,\n MemoryStorage,\n UUID,\n CookieStorage,\n getCookieName,\n FetchTransport,\n getQueryParams,\n UserSession,\n BrowserOptions,\n BrowserConfig as IBrowserConfig,\n DefaultTrackingOptions,\n TrackingOptions,\n AutocaptureOptions,\n CookieOptions,\n RemoteConfigOptions,\n NetworkTrackingOptions,\n IIdentify,\n IDiagnosticsClient,\n} from '@amplitude/analytics-core';\n\nimport { LocalStorage } from './storage/local-storage';\nimport { SessionStorage } from './storage/session-storage';\nimport { XHRTransport } from './transports/xhr';\nimport { SendBeaconTransport } from './transports/send-beacon';\nimport { parseLegacyCookies } from './cookie-migration';\nimport { DEFAULT_IDENTITY_STORAGE, DEFAULT_SERVER_ZONE } from './constants';\nimport { AmplitudeBrowser } from './browser-client';\nimport { VERSION } from './version';\n\n// Exported for testing purposes only. Do not expose to public interface.\nexport class BrowserConfig extends Config implements IBrowserConfig {\n public readonly version = VERSION;\n protected _cookieStorage: Storage<UserSession>;\n protected _deviceId?: string;\n protected _lastEventId?: number;\n protected _lastEventTime?: number;\n protected _optOut = false;\n protected _sessionId?: number;\n protected _userId?: string;\n protected _pageCounter?: number;\n protected _debugLogsEnabled?: boolean;\n constructor(\n public apiKey: string,\n public appVersion?: string,\n cookieStorage: Storage<UserSession> = new MemoryStorage(),\n public cookieOptions: CookieOptions = {\n domain: '',\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n },\n public defaultTracking?: boolean | DefaultTrackingOptions,\n public autocapture?: boolean | AutocaptureOptions,\n deviceId?: string,\n public flushIntervalMillis: number = 1000,\n public flushMaxRetries: number = 5,\n public flushQueueSize: number = 30,\n public identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n public ingestionMetadata?: IngestionMetadata,\n public instanceName?: string,\n lastEventId?: number,\n lastEventTime?: number,\n public loggerProvider: ILogger = new Logger(),\n public logLevel: LogLevel = LogLevel.Warn,\n public minIdLength?: number,\n public offline: boolean | typeof OfflineDisabled = false,\n optOut = false,\n public partnerId?: string,\n public plan?: Plan,\n public serverUrl: string = '',\n public serverZone: ServerZoneType = DEFAULT_SERVER_ZONE,\n sessionId?: number,\n public sessionTimeout: number = 30 * 60 * 1000,\n public storageProvider: Storage<Event[]> = new LocalStorage({ loggerProvider }),\n public trackingOptions: Required<TrackingOptions> = {\n ipAddress: true,\n language: true,\n platform: true,\n },\n public transport: TransportTypeOrOptions = 'fetch',\n public useBatch: boolean = false,\n public fetchRemoteConfig: boolean = true,\n userId?: string,\n pageCounter?: number,\n debugLogsEnabled?: boolean,\n public networkTrackingOptions?: NetworkTrackingOptions,\n public identify?: IIdentify,\n public enableDiagnostics: boolean = true,\n public diagnosticsSampleRate: number = 0,\n public diagnosticsClient?: IDiagnosticsClient,\n public remoteConfig?: RemoteConfigOptions,\n ) {\n super({ apiKey, storageProvider, transportProvider: createTransport(transport) });\n this._cookieStorage = cookieStorage;\n this.deviceId = deviceId;\n this.lastEventId = lastEventId;\n this.lastEventTime = lastEventTime;\n this.optOut = optOut;\n this.sessionId = sessionId;\n this.pageCounter = pageCounter;\n this.userId = userId;\n this.debugLogsEnabled = debugLogsEnabled;\n this.loggerProvider.enable(debugLogsEnabled ? LogLevel.Debug : this.logLevel);\n this.networkTrackingOptions = networkTrackingOptions;\n this.identify = identify;\n this.enableDiagnostics = enableDiagnostics;\n this.diagnosticsSampleRate = diagnosticsSampleRate;\n this.diagnosticsClient = diagnosticsClient;\n\n // Backward compatibility for fetchRemoteConfig\n let _fetchRemoteConfig;\n if (remoteConfig?.fetchRemoteConfig === true) {\n // set to true if remoteConfig explicitly set to true\n _fetchRemoteConfig = true;\n } else if (remoteConfig?.fetchRemoteConfig === false || fetchRemoteConfig === false) {\n // set to false if either are set to false explicitly\n _fetchRemoteConfig = false;\n } else {\n // default to true if both undefined\n _fetchRemoteConfig = true;\n }\n this.remoteConfig = this.remoteConfig || {};\n this.remoteConfig.fetchRemoteConfig = _fetchRemoteConfig;\n this.fetchRemoteConfig = _fetchRemoteConfig;\n }\n\n get cookieStorage() {\n return this._cookieStorage;\n }\n\n set cookieStorage(cookieStorage: Storage<UserSession>) {\n if (this._cookieStorage !== cookieStorage) {\n this._cookieStorage = cookieStorage;\n this.updateStorage();\n }\n }\n\n get deviceId() {\n return this._deviceId;\n }\n\n set deviceId(deviceId: string | undefined) {\n if (this._deviceId !== deviceId) {\n this._deviceId = deviceId;\n this.updateStorage();\n }\n }\n\n get userId() {\n return this._userId;\n }\n\n set userId(userId: string | undefined) {\n if (this._userId !== userId) {\n this._userId = userId;\n this.updateStorage();\n }\n }\n\n get sessionId() {\n return this._sessionId;\n }\n\n set sessionId(sessionId: number | undefined) {\n if (this._sessionId !== sessionId) {\n this._sessionId = sessionId;\n this.updateStorage();\n }\n }\n\n get optOut() {\n return this._optOut;\n }\n\n set optOut(optOut: boolean) {\n if (this._optOut !== optOut) {\n this._optOut = optOut;\n this.updateStorage();\n }\n }\n\n get lastEventTime() {\n return this._lastEventTime;\n }\n\n set lastEventTime(lastEventTime: number | undefined) {\n if (this._lastEventTime !== lastEventTime) {\n this._lastEventTime = lastEventTime;\n this.updateStorage();\n }\n }\n\n get lastEventId() {\n return this._lastEventId;\n }\n\n set lastEventId(lastEventId: number | undefined) {\n if (this._lastEventId !== lastEventId) {\n this._lastEventId = lastEventId;\n this.updateStorage();\n }\n }\n\n get pageCounter() {\n return this._pageCounter;\n }\n\n set pageCounter(pageCounter: number | undefined) {\n if (this._pageCounter !== pageCounter) {\n this._pageCounter = pageCounter;\n this.updateStorage();\n }\n }\n\n set debugLogsEnabled(debugLogsEnabled: boolean | undefined) {\n if (this._debugLogsEnabled !== debugLogsEnabled) {\n this._debugLogsEnabled = debugLogsEnabled;\n this.updateStorage();\n }\n }\n\n private updateStorage() {\n const cache = {\n deviceId: this._deviceId,\n userId: this._userId,\n sessionId: this._sessionId,\n optOut: this._optOut,\n lastEventTime: this._lastEventTime,\n lastEventId: this._lastEventId,\n pageCounter: this._pageCounter,\n debugLogsEnabled: this._debugLogsEnabled,\n };\n void this.cookieStorage.set(getCookieName(this.apiKey), cache);\n }\n}\n\nexport const useBrowserConfig = async (\n apiKey: string,\n options: BrowserOptions = {},\n amplitudeInstance: AmplitudeBrowser,\n): Promise<IBrowserConfig> => {\n // Step 1: Create identity storage instance\n const identityStorage = options.identityStorage || DEFAULT_IDENTITY_STORAGE;\n const cookieOptions = {\n domain:\n identityStorage !== DEFAULT_IDENTITY_STORAGE ? '' : options.cookieOptions?.domain ?? (await getTopLevelDomain()),\n expiration: 365,\n sameSite: 'Lax' as const,\n secure: false,\n upgrade: true,\n ...options.cookieOptions,\n };\n const cookieStorage = createCookieStorage<UserSession>(options.identityStorage, cookieOptions);\n\n // Step 1: Parse cookies using identity storage instance\n const legacyCookies = await parseLegacyCookies(apiKey, cookieStorage, options.cookieOptions?.upgrade ?? true);\n const previousCookies = await cookieStorage.get(getCookieName(apiKey));\n const queryParams = getQueryParams();\n\n // Check if ampTimestamp is present and valid\n const ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n const isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n\n // Step 3: Reconcile user identity\n const deviceId =\n options.deviceId ??\n (isWithinTimeLimit ? queryParams.ampDeviceId ?? queryParams.deviceId : undefined) ??\n previousCookies?.deviceId ??\n legacyCookies.deviceId ??\n UUID();\n const lastEventId = previousCookies?.lastEventId ?? legacyCookies.lastEventId;\n const lastEventTime = previousCookies?.lastEventTime ?? legacyCookies.lastEventTime;\n const optOut = options.optOut ?? previousCookies?.optOut ?? legacyCookies.optOut;\n const sessionId = previousCookies?.sessionId ?? legacyCookies.sessionId;\n const userId = options.userId ?? previousCookies?.userId ?? legacyCookies.userId;\n amplitudeInstance.previousSessionDeviceId = previousCookies?.deviceId ?? legacyCookies.deviceId;\n amplitudeInstance.previousSessionUserId = previousCookies?.userId ?? legacyCookies.userId;\n\n const trackingOptions = {\n ipAddress: options.trackingOptions?.ipAddress ?? true,\n language: options.trackingOptions?.language ?? true,\n platform: options.trackingOptions?.platform ?? true,\n };\n const pageCounter = previousCookies?.pageCounter;\n const debugLogsEnabled = previousCookies?.debugLogsEnabled;\n\n // Override default tracking options if autocapture is set\n if (options.autocapture !== undefined) {\n options.defaultTracking = options.autocapture;\n }\n\n const browserConfig = new BrowserConfig(\n apiKey,\n options.appVersion,\n cookieStorage,\n cookieOptions,\n options.defaultTracking,\n options.autocapture,\n deviceId,\n options.flushIntervalMillis,\n options.flushMaxRetries,\n options.flushQueueSize,\n identityStorage,\n options.ingestionMetadata,\n options.instanceName,\n lastEventId,\n lastEventTime,\n options.loggerProvider,\n options.logLevel,\n options.minIdLength,\n options.offline,\n optOut,\n options.partnerId,\n options.plan,\n options.serverUrl,\n options.serverZone,\n sessionId,\n options.sessionTimeout,\n options.storageProvider,\n trackingOptions,\n options.transport,\n options.useBatch,\n options.fetchRemoteConfig,\n userId,\n pageCounter,\n debugLogsEnabled,\n options.networkTrackingOptions,\n options.identify,\n options.enableDiagnostics,\n amplitudeInstance._diagnosticsSampleRate, // Use _diagnosticsSampleRate set via _setDiagnosticsSampleRate() or defaults to 0\n undefined, // diagnosticsClient - set after config creation\n options.remoteConfig,\n );\n\n if (!(await browserConfig.storageProvider.isEnabled())) {\n browserConfig.loggerProvider.warn(\n `Storage provider ${browserConfig.storageProvider.constructor.name} is not enabled. Falling back to MemoryStorage.`,\n );\n browserConfig.storageProvider = new MemoryStorage();\n }\n\n return browserConfig;\n};\n\nexport const createCookieStorage = <T>(\n identityStorage: IdentityStorageType = DEFAULT_IDENTITY_STORAGE,\n cookieOptions: CookieOptions = {},\n) => {\n switch (identityStorage) {\n case 'localStorage':\n return new LocalStorage<T>();\n case 'sessionStorage':\n return new SessionStorage<T>();\n case 'none':\n return new MemoryStorage<T>();\n case 'cookie':\n default:\n return new CookieStorage<T>({\n ...cookieOptions,\n expirationDays: cookieOptions.expiration,\n });\n }\n};\n\nexport const createTransport = (transport?: TransportTypeOrOptions) => {\n const type = typeof transport === 'object' ? transport.type : transport;\n const headers = typeof transport === 'object' ? transport.headers : undefined;\n\n if (type === 'xhr') {\n return new XHRTransport(headers);\n }\n if (type === 'beacon') {\n // SendBeacon does not support custom headers\n return new SendBeaconTransport();\n }\n return new FetchTransport(headers);\n};\n\nexport const getTopLevelDomain = async (url?: string) => {\n if (\n !(await new CookieStorage<number>().isEnabled()) ||\n (!url && (typeof location === 'undefined' || !location.hostname))\n ) {\n return '';\n }\n\n const host = url ?? location.hostname;\n const parts = host.split('.');\n const levels = [];\n const storageKey = 'AMP_TLDTEST';\n\n for (let i = parts.length - 2; i >= 0; --i) {\n levels.push(parts.slice(i).join('.'));\n }\n for (let i = 0; i < levels.length; i++) {\n const domain = levels[i];\n const options = { domain: '.' + domain };\n const storage = new CookieStorage<number>(options);\n await storage.set(storageKey, 1);\n const value = await storage.get(storageKey);\n if (value) {\n await storage.remove(storageKey);\n return '.' + domain;\n }\n }\n\n return '';\n};\n","export var omitUndefined = function (input) {\n var obj = {};\n for (var key in input) {\n var val = input[key];\n if (val) {\n obj[key] = val;\n }\n }\n return obj;\n};\n//# sourceMappingURL=utils.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { getPageTitle, replaceSensitiveString, IdentifyOperation, CampaignParser, getGlobalScope, BASE_CAMPAIGN, } from '@amplitude/analytics-core';\nimport { omitUndefined } from './utils';\nexport var defaultPageViewEvent = '[Amplitude] Page Viewed';\nexport var pageViewTrackingPlugin = function (options) {\n if (options === void 0) { options = {}; }\n var amplitude;\n var globalScope = getGlobalScope();\n var loggerProvider = undefined;\n var isTracking = false;\n var localConfig;\n var trackOn = options.trackOn, trackHistoryChanges = options.trackHistoryChanges, _a = options.eventType, eventType = _a === void 0 ? defaultPageViewEvent : _a;\n var getDecodeURI = function (locationStr) {\n var decodedLocationStr = locationStr;\n try {\n decodedLocationStr = decodeURI(locationStr);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Malformed URI sequence: ', e);\n }\n return decodedLocationStr;\n };\n var createPageViewEvent = function () { return __awaiter(void 0, void 0, void 0, function () {\n var locationHREF, _a;\n var _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n _b = {\n event_type: eventType\n };\n _a = [{}];\n return [4 /*yield*/, getCampaignParams()];\n case 1: return [2 /*return*/, (_b.event_properties = __assign.apply(void 0, [__assign.apply(void 0, _a.concat([(_c.sent())])), { '[Amplitude] Page Domain': \n /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '', '[Amplitude] Page Location': locationHREF, '[Amplitude] Page Path': \n /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0] }]),\n _b)];\n }\n });\n }); };\n var shouldTrackOnPageLoad = function () { return typeof trackOn === 'undefined' || (typeof trackOn === 'function' && trackOn()); };\n /* istanbul ignore next */\n var previousURL = typeof location !== 'undefined' ? location.href : null;\n var trackHistoryPageView = function () { return __awaiter(void 0, void 0, void 0, function () {\n var newURL, shouldTrackPageView, _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n newURL = location.href;\n shouldTrackPageView = shouldTrackHistoryPageView(trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n if (!shouldTrackPageView) return [3 /*break*/, 4];\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');\n if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];\n _a = void 0;\n return [3 /*break*/, 3];\n case 1:\n _c = (_b = amplitude).track;\n return [4 /*yield*/, createPageViewEvent()];\n case 2:\n _a = _c.apply(_b, [_d.sent()]);\n _d.label = 3;\n case 3:\n _a;\n _d.label = 4;\n case 4: return [2 /*return*/];\n }\n });\n }); };\n /* istanbul ignore next */\n var trackHistoryPageViewWrapper = function () {\n void trackHistoryPageView();\n };\n var plugin = {\n name: '@amplitude/plugin-page-view-tracking-browser',\n type: 'enrichment',\n setup: function (config, client) { return __awaiter(void 0, void 0, void 0, function () {\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n amplitude = client;\n localConfig = config;\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n isTracking = true;\n if (globalScope) {\n globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n void trackHistoryPageView();\n }\n },\n });\n }\n if (!shouldTrackOnPageLoad()) return [3 /*break*/, 2];\n loggerProvider.log('Tracking page view event');\n _b = (_a = amplitude).track;\n return [4 /*yield*/, createPageViewEvent()];\n case 1:\n _b.apply(_a, [_c.sent()]);\n _c.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var pageViewEvent;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(trackOn === 'attribution' && isCampaignEvent(event))) return [3 /*break*/, 2];\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Enriching campaign event to page view event with campaign parameters');\n return [4 /*yield*/, createPageViewEvent()];\n case 1:\n pageViewEvent = _a.sent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = __assign(__assign({}, event.event_properties), pageViewEvent.event_properties);\n _a.label = 2;\n case 2:\n // Update the pageCounter for the page view event\n if (localConfig && event.event_type === eventType) {\n localConfig.pageCounter = !localConfig.pageCounter ? 1 : localConfig.pageCounter + 1;\n event.event_properties = __assign(__assign({}, event.event_properties), { '[Amplitude] Page Counter': localConfig.pageCounter });\n }\n return [2 /*return*/, event];\n }\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (globalScope) {\n globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n isTracking = false;\n }\n return [2 /*return*/];\n });\n }); },\n };\n return plugin;\n};\nvar getCampaignParams = function () { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = omitUndefined;\n return [4 /*yield*/, new CampaignParser().parse()];\n case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];\n }\n}); }); };\nvar isCampaignEvent = function (event) {\n if (event.event_type === '$identify' && event.user_properties) {\n var properties = event.user_properties;\n var $set = properties[IdentifyOperation.SET] || {};\n var $unset = properties[IdentifyOperation.UNSET] || {};\n var userProperties_1 = __spreadArray(__spreadArray([], __read(Object.keys($set)), false), __read(Object.keys($unset)), false);\n return Object.keys(BASE_CAMPAIGN).every(function (value) { return userProperties_1.includes(value); });\n }\n return false;\n};\nexport var shouldTrackHistoryPageView = function (trackingOption, newURLStr, oldURLStr) {\n switch (trackingOption) {\n case 'pathOnly': {\n if (oldURLStr == '')\n return true;\n var newURL = new URL(newURLStr);\n var oldURL = new URL(oldURLStr);\n var newBaseStr = newURL.origin + newURL.pathname;\n var oldBaseStr = oldURL.origin + oldURL.pathname;\n return newBaseStr !== oldBaseStr;\n }\n default:\n return newURLStr !== oldURLStr;\n }\n};\n//# sourceMappingURL=page-view-tracking.js.map","import {\n DEFAULT_FORM_START_EVENT,\n DEFAULT_FORM_SUBMIT_EVENT,\n FORM_ID,\n FORM_NAME,\n FORM_DESTINATION,\n} from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'change' | 'submit';\n handler: () => void;\n}\n\nexport const formInteractionTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n\n const addEventListener = (element: Element, type: 'change' | 'submit', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const name = '@amplitude/plugin-form-interaction-tracking-browser';\n const type = 'enrichment';\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFormTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'Form interaction tracking requires a later version of @amplitude/analytics-browser. Form interaction events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFormInteractionListener = (form: HTMLFormElement) => {\n let hasFormChanged = false;\n\n addEventListener(form, 'change', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n hasFormChanged = true;\n });\n\n addEventListener(form, 'submit', () => {\n const formDestination = extractFormAction(form);\n if (!hasFormChanged) {\n amplitude.track(DEFAULT_FORM_START_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n }\n\n amplitude.track(DEFAULT_FORM_SUBMIT_EVENT, {\n [FORM_ID]: stringOrUndefined(form.id),\n [FORM_NAME]: stringOrUndefined(form.name),\n [FORM_DESTINATION]: formDestination,\n });\n hasFormChanged = false;\n });\n };\n\n // Adds listener to existing anchor tags\n const forms = Array.from(document.getElementsByTagName('form'));\n forms.forEach(addFormInteractionListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'FORM') {\n addFormInteractionListener(node as HTMLFormElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('form') as HTMLFormElement[]).map(addFormInteractionListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n if (document.readyState === 'complete') {\n initializeFormTracking();\n } else {\n // Otherwise, wait for the load event.\n // The form interaction plugin observes changes in the dom. For this to work correctly, the observer can only be setup\n // after the body is built. When Amplitude gets initialized in a script tag, the body tag is still unavailable. So register this\n // only after the window is loaded\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFormTracking);\n } else {\n config.loggerProvider.debug('Form interaction tracking is not installed because global is undefined.');\n }\n }\n };\n const execute = async (event: Event) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n\nexport const stringOrUndefined = <T>(name: T): T extends string ? string : undefined => {\n /* istanbul ignore if */\n if (typeof name !== 'string') {\n // We found instances where the value of `name` is an Element and not a string.\n // Elements may have circular references and would throw an error when passed to `JSON.stringify(...)`.\n // If a non-string value is seen, assume there is no value.\n return undefined as T extends string ? string : undefined;\n }\n\n return name as T extends string ? string : undefined;\n};\n\n// Extracts the form action attribute, and normalizes it to a valid URL to preserve the previous behavior of accessing the action property directly.\nexport const extractFormAction = (form: HTMLFormElement): string | null => {\n let formDestination = form.getAttribute('action');\n try {\n // eslint-disable-next-line no-restricted-globals\n formDestination = new URL(encodeURI(formDestination ?? ''), window.location.href).href;\n } catch {\n //\n }\n return formDestination;\n};\n","import { DEFAULT_FILE_DOWNLOAD_EVENT, FILE_EXTENSION, FILE_NAME, LINK_ID, LINK_TEXT, LINK_URL } from '../constants';\nimport { BrowserConfig } from '../config';\nimport { getGlobalScope, Event, EnrichmentPlugin, BrowserClient } from '@amplitude/analytics-core';\n\ninterface EventListener {\n element: Element;\n type: 'click';\n handler: () => void;\n}\n\nexport const fileDownloadTracking = (): EnrichmentPlugin => {\n let observer: MutationObserver | undefined;\n let eventListeners: EventListener[] = [];\n const addEventListener = (element: Element, type: 'click', handler: () => void) => {\n element.addEventListener(type, handler);\n eventListeners.push({\n element,\n type,\n handler,\n });\n };\n const removeClickListeners = () => {\n eventListeners.forEach(({ element, type, handler }) => {\n /* istanbul ignore next */\n element?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const name = '@amplitude/plugin-file-download-tracking-browser';\n const type = 'enrichment';\n\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n const initializeFileDownloadTracking = () => {\n /* istanbul ignore if */\n if (!amplitude) {\n // TODO: Add required minimum version of @amplitude/analytics-browser\n config.loggerProvider.warn(\n 'File download tracking requires a later version of @amplitude/analytics-browser. File download events are not tracked.',\n );\n return;\n }\n\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return;\n }\n\n const addFileDownloadListener = (a: HTMLAnchorElement) => {\n let url: URL;\n try {\n // eslint-disable-next-line no-restricted-globals\n url = new URL(a.href, window.location.href);\n } catch {\n /* istanbul ignore next */\n return;\n }\n const result = ext.exec(url.href);\n const fileExtension = result?.[1];\n\n if (fileExtension) {\n addEventListener(a, 'click', () => {\n if (fileExtension) {\n amplitude.track(DEFAULT_FILE_DOWNLOAD_EVENT, {\n [FILE_EXTENSION]: fileExtension,\n [FILE_NAME]: url.pathname,\n [LINK_ID]: a.id,\n [LINK_TEXT]: a.text,\n [LINK_URL]: a.href,\n });\n }\n });\n }\n };\n\n const ext =\n /\\.(pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma)(\\?.+)?$/;\n\n // Adds listener to existing anchor tags\n const links = Array.from(document.getElementsByTagName('a'));\n links.forEach(addFileDownloadListener);\n\n // Adds listener to anchor tags added after initial load\n /* istanbul ignore else */\n if (typeof MutationObserver !== 'undefined') {\n observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeName === 'A') {\n addFileDownloadListener(node as HTMLAnchorElement);\n }\n if ('querySelectorAll' in node && typeof node.querySelectorAll === 'function') {\n Array.from(node.querySelectorAll('a') as HTMLAnchorElement[]).map(addFileDownloadListener);\n }\n });\n });\n });\n\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n });\n }\n };\n\n // If the document is already loaded, initialize immediately.\n /* istanbul ignore else*/\n if (document.readyState === 'complete') {\n initializeFileDownloadTracking();\n } else {\n // Otherwise, wait for the load event.\n const window = getGlobalScope();\n /* istanbul ignore else*/\n if (window) {\n window.addEventListener('load', initializeFileDownloadTracking);\n } else {\n config.loggerProvider.debug('File download tracking is not installed because global is undefined.');\n }\n }\n };\n\n const execute = async (event: Event) => event;\n const teardown = async () => {\n observer?.disconnect();\n removeClickListeners();\n };\n\n return {\n name,\n type,\n setup,\n execute,\n teardown,\n };\n};\n","import { BrowserConfig } from '@amplitude/analytics-core';\n\nlet notified = false;\n\nexport const detNotify = (config: BrowserConfig): void => {\n if (notified || config.defaultTracking !== undefined) {\n return;\n }\n\n const message = `\\`options.defaultTracking\\` is set to undefined. This implicitly configures your Amplitude instance to track Page Views, Sessions, File Downloads, and Form Interactions. You can suppress this warning by explicitly setting a value to \\`options.defaultTracking\\`. The value must either be a boolean, to enable and disable all default events, or an object, for advanced configuration. For example:\n\namplitude.init(<YOUR_API_KEY>, {\n defaultTracking: true,\n});\n\nVisit https://www.docs.developers.amplitude.com/data/sdks/browser-2/#tracking-default-events for more details.`;\n config.loggerProvider.warn(message);\n notified = true;\n};\n\n/**\n * @private\n * This function is meant for testing purposes only\n */\nexport const resetNotify = () => {\n notified = false;\n};\n","import { getGlobalScope, BeforePlugin, BrowserClient, BrowserConfig } from '@amplitude/analytics-core';\n\ninterface EventListener {\n type: 'online' | 'offline';\n handler: () => void;\n}\n\nexport const networkConnectivityCheckerPlugin = (): BeforePlugin => {\n const name = '@amplitude/plugin-network-checker-browser';\n const type = 'before' as const;\n const globalScope = getGlobalScope();\n let eventListeners: EventListener[] = [];\n\n const addNetworkListener = (type: 'online' | 'offline', handler: () => void) => {\n /* istanbul ignore next */\n if (globalScope?.addEventListener) {\n globalScope?.addEventListener(type, handler);\n eventListeners.push({\n type,\n handler,\n });\n }\n };\n\n const removeNetworkListeners = () => {\n eventListeners.forEach(({ type, handler }) => {\n /* istanbul ignore next */\n globalScope?.removeEventListener(type, handler);\n });\n eventListeners = [];\n };\n\n const setup = async (config: BrowserConfig, amplitude: BrowserClient) => {\n if (typeof navigator === 'undefined') {\n config.loggerProvider.debug(\n 'Network connectivity checker plugin is disabled because navigator is not available.',\n );\n config.offline = false;\n return;\n }\n\n config.offline = !navigator.onLine;\n\n addNetworkListener('online', () => {\n config.loggerProvider.debug('Network connectivity changed to online.');\n config.offline = false;\n // Flush immediately will cause ERR_NETWORK_CHANGED\n setTimeout(() => {\n amplitude.flush();\n }, config.flushIntervalMillis);\n });\n\n addNetworkListener('offline', () => {\n config.loggerProvider.debug('Network connectivity changed to offline.');\n config.offline = true;\n });\n };\n\n const teardown = async () => {\n removeNetworkListeners();\n };\n\n return {\n name,\n type,\n setup,\n teardown,\n };\n};\n","import {\n AutocaptureOptions,\n type ElementInteractionsOptions,\n BrowserConfig,\n RemoteConfig,\n NetworkTrackingOptions,\n NetworkCaptureRule,\n SAFE_HEADERS,\n} from '@amplitude/analytics-core';\n\nexport interface AutocaptureOptionsRemoteConfig extends AutocaptureOptions {\n elementInteractions?: boolean | ElementInteractionsOptionsRemoteConfig;\n networkTracking?: boolean | NetworkTrackingOptionsRemoteConfig;\n}\nexport interface ElementInteractionsOptionsRemoteConfig extends ElementInteractionsOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n pageUrlAllowlistRegex?: string[];\n}\n\nexport interface NetworkCaptureRuleRemoteConfig extends NetworkCaptureRule {\n /**\n * Related to urls but holds regex strings which will be initialized and appended to urls\n */\n urlsRegex?: string[];\n}\n\nexport interface NetworkTrackingOptionsRemoteConfig extends NetworkTrackingOptions {\n /**\n * Related to pageUrlAllowlist but holds regex strings which will be initialized and appended to pageUrlAllowlist\n */\n captureRules?: NetworkCaptureRuleRemoteConfig[];\n}\n\n// Type alias for the remote config structure we expect (this is what comes from the filtered browserSDK config)\ntype RemoteConfigBrowserSDK = {\n autocapture?: AutocaptureOptionsRemoteConfig | boolean;\n};\n\n/**\n * Performs a deep transformation of a remote config object so that\n * it matches the expected schema of the local config.\n *\n * Specifically, it normalizes nested `enabled` flags into concise union types.\n *\n * ### Transformation Rules:\n * - If an object has `enabled: true`, it is replaced by the same object without the `enabled` field.\n * - If it has only `enabled: true`, it is replaced with `true`.\n * - If it has `enabled: false`, it is replaced with `false` regardless of other fields.\n *\n * ### Examples:\n * Input: { prop: { enabled: true, hello: 'world' }}\n * Output: { prop: { hello: 'world' } }\n *\n * Input: { prop: { enabled: true }}\n * Output: { prop: true }\n *\n * Input: { prop: { enabled: false, hello: 'world' }}\n * Output: { prop: false }\n *\n * Input: { prop: { hello: 'world' }}\n * Output: { prop: { hello: 'world' } } // No change\n *\n * @param config Remote config object to be transformed\n * @returns Transformed config object compatible with local schema\n */\nexport function translateRemoteConfigToLocal(config?: Record<string, any>) {\n // Disabling type checking rules because remote config comes from a remote source\n // and this function needs to handle any unexpected values\n /* eslint-disable @typescript-eslint/no-unsafe-member-access,\n @typescript-eslint/no-unsafe-assignment,\n @typescript-eslint/no-unsafe-argument\n */\n if (typeof config !== 'object' || config === null) {\n return;\n }\n\n // translations are not applied on array properties\n if (Array.isArray(config)) {\n return;\n }\n\n const propertyNames = Object.keys(config);\n for (const propertyName of propertyNames) {\n try {\n const value = config[propertyName];\n // transform objects with { enabled } property to boolean | object\n if (typeof value?.enabled === 'boolean') {\n if (value.enabled) {\n // if enabled is true, set the value to the rest of the object\n // or true if the object has no other properties\n delete value.enabled;\n if (Object.keys(value).length === 0) {\n (config as any)[propertyName] = true;\n }\n } else {\n // If enabled is false, set the value to false\n (config as any)[propertyName] = false;\n }\n }\n\n // recursively translate properties of the value\n translateRemoteConfigToLocal(value as Record<string, any>);\n } catch (e) {\n // a failure here means that an accessor threw an error\n // so don't translate it\n // TODO(diagnostics): add a diagnostic event for this\n }\n }\n\n // translate remote responseHeaders and requestHeaders to local responseHeaders and requestHeaders\n try {\n if (config.autocapture?.networkTracking?.captureRules?.length) {\n for (const rule of config.autocapture.networkTracking.captureRules) {\n for (const header of ['responseHeaders', 'requestHeaders']) {\n const { captureSafeHeaders, allowlist } = rule[header] ?? {};\n if (!captureSafeHeaders && !allowlist) {\n continue;\n }\n // if allowlist is not an array, remote config contract is violated, remove it\n if (allowlist !== undefined && !Array.isArray(allowlist)) {\n delete rule[header];\n continue;\n }\n rule[header] = [...(captureSafeHeaders ? SAFE_HEADERS : []), ...(allowlist ?? [])];\n }\n }\n }\n } catch (e) {\n /* istanbul ignore next */\n // surprise exception, so don't translate it\n }\n\n // translate frustrationInteractions pluralization\n const frustrationInteractions = config.autocapture?.frustrationInteractions;\n if (frustrationInteractions) {\n if (frustrationInteractions.rageClick) {\n frustrationInteractions.rageClicks = frustrationInteractions.rageClick;\n delete frustrationInteractions.rageClick;\n }\n if (frustrationInteractions.deadClick) {\n frustrationInteractions.deadClicks = frustrationInteractions.deadClick;\n delete frustrationInteractions.deadClick;\n }\n }\n}\n\nfunction mergeUrls(urlsExact: (string | RegExp)[], urlsRegex: string[] | undefined, browserConfig: BrowserConfig) {\n // Convert string patterns to RegExp objects, warn on invalid patterns and skip them\n const regexList = [];\n for (const pattern of urlsRegex ?? []) {\n try {\n regexList.push(new RegExp(pattern));\n } catch (regexError) {\n browserConfig.loggerProvider.warn(`Invalid regex pattern: ${pattern}`, regexError);\n }\n }\n\n return urlsExact.concat(regexList);\n}\n\n/**\n * Updates the browser config in place by applying remote configuration settings.\n * Primarily merges autocapture settings from the remote config into the browser config.\n *\n * @param remoteConfig - The remote configuration to apply, or null if none available\n * @param browserConfig - The browser config object to update (modified in place)\n */\nexport function updateBrowserConfigWithRemoteConfig(\n remoteConfig: RemoteConfig | null,\n browserConfig: BrowserConfig,\n): void {\n if (!remoteConfig) {\n return;\n }\n\n // translate remote config to local compatible format\n translateRemoteConfigToLocal(remoteConfig);\n\n try {\n browserConfig.loggerProvider.debug(\n 'Update browser config with remote configuration:',\n JSON.stringify(remoteConfig),\n );\n\n // type cast error will be thrown if remoteConfig is not a valid RemoteConfigBrowserSDK\n // and it will be caught by the try-catch block\n const typedRemoteConfig = remoteConfig as RemoteConfigBrowserSDK;\n\n // merge remoteConfig.autocapture and browserConfig.autocapture\n // if a field is in remoteConfig.autocapture, use that value\n // if a field is not in remoteConfig.autocapture, use the value from browserConfig.autocapture\n if (typedRemoteConfig && 'autocapture' in typedRemoteConfig) {\n if (typeof typedRemoteConfig.autocapture === 'boolean') {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n if (typeof typedRemoteConfig.autocapture === 'object' && typedRemoteConfig.autocapture !== null) {\n const transformedAutocaptureRemoteConfig = { ...typedRemoteConfig.autocapture };\n\n if (browserConfig.autocapture === undefined) {\n browserConfig.autocapture = typedRemoteConfig.autocapture;\n }\n\n // Handle Element Interactions config initialization\n if (\n typeof typedRemoteConfig.autocapture.elementInteractions === 'object' &&\n typedRemoteConfig.autocapture.elementInteractions !== null &&\n typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex?.length\n ) {\n transformedAutocaptureRemoteConfig.elementInteractions = {\n ...typedRemoteConfig.autocapture.elementInteractions,\n };\n const transformedRcElementInteractions = transformedAutocaptureRemoteConfig.elementInteractions;\n\n // combine exact allow list and regex allow list into just 'pageUrlAllowlist'\n const exactAllowList = transformedRcElementInteractions.pageUrlAllowlist ?? [];\n const urlsRegex = typedRemoteConfig.autocapture.elementInteractions.pageUrlAllowlistRegex;\n transformedRcElementInteractions.pageUrlAllowlist = mergeUrls(exactAllowList, urlsRegex, browserConfig);\n\n // clean up the regex allow list\n delete transformedRcElementInteractions.pageUrlAllowlistRegex;\n }\n\n // Handle Network Tracking config initialization\n if (\n typeof typedRemoteConfig.autocapture.networkTracking === 'object' &&\n typedRemoteConfig.autocapture.networkTracking !== null &&\n typedRemoteConfig.autocapture.networkTracking.captureRules?.length\n ) {\n transformedAutocaptureRemoteConfig.networkTracking = {\n ...typedRemoteConfig.autocapture.networkTracking,\n };\n const transformedRcNetworkTracking = transformedAutocaptureRemoteConfig.networkTracking;\n /* istanbul ignore next */\n const captureRules = transformedRcNetworkTracking.captureRules ?? [];\n for (const rule of captureRules) {\n rule.urls = mergeUrls(rule.urls ?? [], rule.urlsRegex, browserConfig);\n delete rule.urlsRegex;\n }\n }\n\n if (typeof browserConfig.autocapture === 'boolean') {\n browserConfig.autocapture = {\n attribution: browserConfig.autocapture,\n fileDownloads: browserConfig.autocapture,\n formInteractions: browserConfig.autocapture,\n pageViews: browserConfig.autocapture,\n sessions: browserConfig.autocapture,\n elementInteractions: browserConfig.autocapture,\n webVitals: browserConfig.autocapture,\n frustrationInteractions: browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n\n if (typeof browserConfig.autocapture === 'object') {\n browserConfig.autocapture = {\n ...browserConfig.autocapture,\n ...transformedAutocaptureRemoteConfig,\n };\n }\n }\n\n // Override default tracking options if autocapture is updated by remote config\n browserConfig.defaultTracking = browserConfig.autocapture;\n }\n\n browserConfig.loggerProvider.debug('Browser config after remote config update:', JSON.stringify(browserConfig));\n } catch (e) {\n browserConfig.loggerProvider.error('Failed to apply remote configuration because of error: ', e);\n }\n}\n","export var VERSION = '1.18.3';\n//# sourceMappingURL=version.js.map","export var PLUGIN_NAME = '@amplitude/plugin-autocapture-browser';\nexport var FRUSTRATION_PLUGIN_NAME = '@amplitude/plugin-frustration-browser';\nexport var AMPLITUDE_ELEMENT_CLICKED_EVENT = '[Amplitude] Element Clicked';\nexport var AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT = '[Amplitude] Dead Click';\nexport var AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT = '[Amplitude] Rage Click';\nexport var AMPLITUDE_ELEMENT_CHANGED_EVENT = '[Amplitude] Element Changed';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ID = '[Amplitude] Element ID';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_CLASS = '[Amplitude] Element Class';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TAG = '[Amplitude] Element Tag';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_TEXT = '[Amplitude] Element Text';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY = '[Amplitude] Element Hierarchy';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_HREF = '[Amplitude] Element Href';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element Position Left';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes';\nexport var AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label';\nexport var AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL';\nexport var AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height';\nexport var AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width';\n// Visual Tagging related constants\nexport var AMPLITUDE_ORIGIN = 'https://app.amplitude.com';\nexport var AMPLITUDE_ORIGIN_EU = 'https://app.eu.amplitude.com';\nexport var AMPLITUDE_ORIGIN_STAGING = 'https://apps.stag2.amplitude.com';\nexport var AMPLITUDE_ORIGINS_MAP = {\n US: AMPLITUDE_ORIGIN,\n EU: AMPLITUDE_ORIGIN_EU,\n STAGING: AMPLITUDE_ORIGIN_STAGING,\n};\nexport var AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL = 'https://cdn.amplitude.com/libs/visual-tagging-selector-1.0.0-alpha.js.gz';\n// This is the class name used by the visual tagging selector to highlight the selected element.\n// Should not use this class in the selector.\nexport var AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-selector-highlight';\n// Data attribute for specifying which attributes should be redacted from autocapture\nexport var DATA_AMP_MASK_ATTRIBUTES = 'data-amp-mask-attributes';\nexport var MAX_MASK_TEXT_PATTERNS = 25;\nexport var MAX_ATTRIBUTE_LENGTH = 128;\n//# sourceMappingURL=constants.js.map","import { __read } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { isUrlMatchAllowlist } from '@amplitude/analytics-core';\nvar SENSITIVE_TAGS = ['input', 'select', 'textarea'];\nexport var isElementPointerCursor = function (element, actionType) {\n var _a;\n /* istanbul ignore next */\n var computedStyle = (_a = window === null || window === void 0 ? void 0 : window.getComputedStyle) === null || _a === void 0 ? void 0 : _a.call(window, element);\n /* istanbul ignore next */\n return (computedStyle === null || computedStyle === void 0 ? void 0 : computedStyle.getPropertyValue('cursor')) === 'pointer' && actionType === 'click';\n};\nexport var createShouldTrackEvent = function (autocaptureOptions, allowlist, // this can be any type of css selector allow list\nisAlwaysCaptureCursorPointer) {\n if (isAlwaysCaptureCursorPointer === void 0) { isAlwaysCaptureCursorPointer = false; }\n return function (actionType, element) {\n var _a, _b;\n var pageUrlAllowlist = autocaptureOptions.pageUrlAllowlist, pageUrlExcludelist = autocaptureOptions.pageUrlExcludelist, shouldTrackEventResolver = autocaptureOptions.shouldTrackEventResolver;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n // window, document, and Text nodes have no tag\n if (!tag) {\n return false;\n }\n if (shouldTrackEventResolver) {\n return shouldTrackEventResolver(actionType, element);\n }\n // check if the URL is in the allow list\n if (!isUrlMatchAllowlist(window.location.href, pageUrlAllowlist)) {\n return false;\n }\n // check if the URL is in the excludelist\n if (pageUrlExcludelist &&\n pageUrlExcludelist.length > 0 &&\n isUrlMatchAllowlist(window.location.href, pageUrlExcludelist)) {\n return false;\n }\n /* istanbul ignore next */\n var elementType = String(element === null || element === void 0 ? void 0 : element.getAttribute('type')) || '';\n if (typeof elementType === 'string') {\n switch (elementType.toLowerCase()) {\n case 'hidden':\n return false;\n case 'password':\n return false;\n }\n }\n var isCursorPointer = isElementPointerCursor(element, actionType);\n if (isAlwaysCaptureCursorPointer && isCursorPointer) {\n return true;\n }\n /* istanbul ignore if */\n if (allowlist) {\n var hasMatchAnyAllowedSelector = allowlist.some(function (selector) { var _a; return !!((_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector)); });\n if (!hasMatchAnyAllowedSelector) {\n return false;\n }\n }\n switch (tag) {\n case 'input':\n case 'select':\n case 'textarea':\n return actionType === 'change' || actionType === 'click';\n default: {\n /* istanbul ignore next */\n /* istanbul ignore next */\n if (isCursorPointer) {\n return true;\n }\n return actionType === 'click';\n }\n }\n };\n};\nexport var isTextNode = function (node) {\n return !!node && node.nodeType === 3;\n};\nexport var isNonSensitiveElement = function (element) {\n var _a, _b, _c;\n /* istanbul ignore next */\n var tag = (_b = (_a = element === null || element === void 0 ? void 0 : element.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a);\n var isContentEditable = element instanceof HTMLElement ? ((_c = element.getAttribute('contenteditable')) === null || _c === void 0 ? void 0 : _c.toLowerCase()) === 'true' : false;\n return !SENSITIVE_TAGS.includes(tag) && !isContentEditable;\n};\n/**\n * Collects redacted attribute names from element and ancestor elements with data-amp-mask-attributes\n * The 'id' and 'class' attributes cannot be redacted as they're critical for element identification\n * @param element - The target element to check for redaction attributes\n * @returns Set of attribute names that should be redacted\n */\n/**\n * Parses a comma-separated string of attribute names and filters out protected attributes\n * @param attributeString - Comma-separated string of attribute names\n * @returns Array of valid attribute names, excluding 'id' and 'class'\n */\nexport var parseAttributesToMask = function (attributeString) {\n return attributeString\n ? attributeString\n .split(',')\n .map(function (attr) { return attr.trim(); })\n .filter(function (attr) { return attr.length > 0 && attr !== 'id' && attr !== 'class'; }) // Prevent 'id' and 'class' from being redacted as they're critical for element identification\n : [];\n};\nexport var extractPrefixedAttributes = function (attrs, prefix) {\n return Object.entries(attrs).reduce(function (attributes, _a) {\n var _b = __read(_a, 2), attributeName = _b[0], attributeValue = _b[1];\n if (attributeName.startsWith(prefix)) {\n var attributeKey = attributeName.replace(prefix, '');\n if (attributeKey) {\n attributes[attributeKey] = attributeValue || '';\n }\n }\n return attributes;\n }, {});\n};\nexport var isEmpty = function (value) {\n return (value === undefined ||\n value === null ||\n (typeof value === 'object' && Object.keys(value).length === 0) ||\n (typeof value === 'string' && value.trim().length === 0));\n};\nexport var removeEmptyProperties = function (properties) {\n return Object.keys(properties).reduce(function (filteredProperties, key) {\n var value = properties[key];\n if (!isEmpty(value)) {\n filteredProperties[key] = value;\n }\n return filteredProperties;\n }, {});\n};\nexport var querySelectUniqueElements = function (root, selectors) {\n if (root && 'querySelectorAll' in root && typeof root.querySelectorAll === 'function') {\n var elementSet = selectors.reduce(function (elements, selector) {\n if (selector) {\n var selectedElements = Array.from(root.querySelectorAll(selector));\n selectedElements.forEach(function (element) {\n elements.add(element);\n });\n }\n return elements;\n }, new Set());\n return Array.from(elementSet);\n }\n return [];\n};\n// Similar as element.closest, but works with multiple selectors\nexport var getClosestElement = function (element, selectors) {\n if (!element) {\n return null;\n }\n /* istanbul ignore next */\n if (selectors.some(function (selector) { var _a; return (_a = element === null || element === void 0 ? void 0 : element.matches) === null || _a === void 0 ? void 0 : _a.call(element, selector); })) {\n return element;\n }\n /* istanbul ignore next */\n return getClosestElement(element === null || element === void 0 ? void 0 : element.parentElement, selectors);\n};\nexport var asyncLoadScript = function (url) {\n return new Promise(function (resolve, reject) {\n var _a;\n try {\n var scriptElement = document.createElement('script');\n scriptElement.type = 'text/javascript';\n scriptElement.async = true;\n scriptElement.src = url;\n scriptElement.addEventListener('load', function () {\n resolve({ status: true });\n }, { once: true });\n scriptElement.addEventListener('error', function () {\n reject({\n status: false,\n message: \"Failed to load the script \".concat(url),\n });\n });\n /* istanbul ignore next */\n (_a = document.head) === null || _a === void 0 ? void 0 : _a.appendChild(scriptElement);\n }\n catch (error) {\n /* istanbul ignore next */\n reject(error);\n }\n });\n};\nexport function generateUniqueId() {\n return \"\".concat(Date.now(), \"-\").concat(Math.random().toString(36).substr(2, 9));\n}\nexport var filterOutNonTrackableEvents = function (event) {\n // Filter out changeEvent events with no target\n // This could happen when change events are triggered programmatically\n if (event.event.target === null || !event.closestTrackedAncestor) {\n return false;\n }\n return true;\n};\n// Type predicate\nexport function isElementBasedEvent(event) {\n return event.type === 'click' || event.type === 'change';\n}\n//# sourceMappingURL=helpers.js.map","import { __values } from \"tslib\";\nimport { isNonSensitiveElement } from './helpers';\nimport { DATA_AMP_MASK_ATTRIBUTES } from './constants';\nimport * as constants from './constants';\nimport { MASKED_TEXT_VALUE, TEXT_MASK_ATTRIBUTE } from '@amplitude/analytics-core';\nvar BLOCKED_ATTRIBUTES = new Set([\n // Already captured elsewhere in the hierarchy object\n 'id',\n 'class',\n // non-useful and potentially large attribute\n 'style',\n // sensitive as prefilled form data may populate this attribute\n 'value',\n // DOM events\n 'onclick',\n 'onchange',\n 'oninput',\n 'onblur',\n 'onsubmit',\n 'onfocus',\n 'onkeydown',\n 'onkeyup',\n 'onkeypress',\n // React specific\n 'data-reactid',\n 'data-react-checksum',\n 'data-reactroot',\n // Amplitude specific - used for redaction but should not be included in getElementProperties\n DATA_AMP_MASK_ATTRIBUTES,\n TEXT_MASK_ATTRIBUTE,\n]);\nvar SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST = ['type'];\nvar SVG_TAGS = ['svg', 'path', 'g'];\nvar HIGHLY_SENSITIVE_INPUT_TYPES = ['password', 'hidden'];\nexport var MAX_HIERARCHY_LENGTH = 1024;\nexport function getElementProperties(element, userMaskedAttributeNames) {\n var e_1, _a;\n var _b, _c, _d, _e;\n if (element === null) {\n return null;\n }\n var tagName = String(element.tagName).toLowerCase();\n var properties = {\n tag: tagName,\n };\n var siblings = Array.from((_c = (_b = element.parentElement) === null || _b === void 0 ? void 0 : _b.children) !== null && _c !== void 0 ? _c : []);\n if (siblings.length) {\n properties.index = siblings.indexOf(element);\n properties.indexOfType = siblings.filter(function (el) { return el.tagName === element.tagName; }).indexOf(element);\n }\n var prevSiblingTag = (_e = (_d = element.previousElementSibling) === null || _d === void 0 ? void 0 : _d.tagName) === null || _e === void 0 ? void 0 : _e.toLowerCase();\n if (prevSiblingTag) {\n properties.prevSib = String(prevSiblingTag);\n }\n var id = element.getAttribute('id');\n if (id) {\n properties.id = String(id);\n }\n var classes = Array.from(element.classList);\n if (classes.length) {\n properties.classes = classes;\n }\n var attributes = {};\n var attributesArray = Array.from(element.attributes);\n var filteredAttributes = attributesArray.filter(function (attr) { return !BLOCKED_ATTRIBUTES.has(attr.name); });\n var isSensitiveElement = !isNonSensitiveElement(element);\n // if input is hidden or password or for SVGs, skip attribute collection entirely\n if (!HIGHLY_SENSITIVE_INPUT_TYPES.includes(String(element.getAttribute('type'))) && !SVG_TAGS.includes(tagName)) {\n try {\n for (var filteredAttributes_1 = __values(filteredAttributes), filteredAttributes_1_1 = filteredAttributes_1.next(); !filteredAttributes_1_1.done; filteredAttributes_1_1 = filteredAttributes_1.next()) {\n var attr = filteredAttributes_1_1.value;\n // If sensitive element, only allow certain attributes\n if (isSensitiveElement && !SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST.includes(attr.name)) {\n continue;\n }\n if (userMaskedAttributeNames.has(attr.name)) {\n attributes[attr.name] = MASKED_TEXT_VALUE;\n continue;\n }\n // Finally cast attribute value to string and limit attribute value length\n attributes[attr.name] = String(attr.value).substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (filteredAttributes_1_1 && !filteredAttributes_1_1.done && (_a = filteredAttributes_1.return)) _a.call(filteredAttributes_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n if (Object.keys(attributes).length) {\n properties.attrs = attributes;\n }\n return properties;\n}\nexport function getAncestors(targetEl) {\n var ancestors = [];\n if (!targetEl) {\n return ancestors;\n }\n // Add self to the list of ancestors\n ancestors.push(targetEl);\n var current = targetEl.parentElement;\n while (current && current.tagName !== 'HTML') {\n ancestors.push(current);\n current = current.parentElement;\n }\n return ancestors;\n}\n//# sourceMappingURL=hierarchy.js.map","// Get DataSource\n/**\n * Gets the DOM element specified by the data source configuration\n * @param dataSource - Configuration for finding the target element\n * @param contextElement - The element to start searching from\n * @returns The matching DOM element or undefined if not found\n */\nexport var getDataSource = function (dataSource, contextElement) {\n // Only process DOM_ELEMENT type data sources\n try {\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n // If scope is specified, find the closest ancestor matching the scope rather than using documentElement (html) as the scope\n var scopingElement = document.documentElement;\n if (dataSource.scope && contextElement) {\n scopingElement = contextElement.closest(dataSource.scope);\n }\n // If we have both a scope and selector, find the matching element\n if (scopingElement && dataSource.selector) {\n return scopingElement.querySelector(dataSource.selector);\n }\n // Return scopingElement if no selector was specified\n return scopingElement;\n }\n }\n catch (error) {\n return undefined;\n }\n // Return undefined for non-DOM_ELEMENT data sources\n return undefined;\n};\n// Execute actions for a condition and attach event properties to the event if needed\nexport var executeActions = function (actions, ev, dataExtractor) {\n actions.forEach(function (action) {\n // Skip if actions is string until action set is implemented\n if (typeof action === 'string') {\n return;\n }\n if (action.actionType === 'ATTACH_EVENT_PROPERTY') {\n var data = dataExtractor.extractDataFromDataSource(action.dataSource, ev.closestTrackedAncestor);\n // Attach data to event\n ev.targetElementProperties[action.destinationKey] = data;\n }\n });\n};\n//# sourceMappingURL=actions.js.map","import { __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { getDecodeURI, MASKED_TEXT_VALUE, TEXT_MASK_ATTRIBUTE, getPageTitle, replaceSensitiveString, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { removeEmptyProperties, extractPrefixedAttributes, isElementPointerCursor, getClosestElement, isElementBasedEvent, parseAttributesToMask, } from './helpers';\nimport { getAncestors, getElementProperties } from './hierarchy';\nimport { getDataSource } from './pageActions/actions';\nvar DataExtractor = /** @class */ (function () {\n function DataExtractor(options, context) {\n var e_1, _a;\n var _this = this;\n var _b;\n /**\n * Wrapper method to replace sensitive strings using the helper function\n * @param text - The text to search for sensitive data\n * @returns The text with sensitive data replaced by masked text\n */\n this.replaceSensitiveString = function (text) {\n return replaceSensitiveString(text, _this.additionalMaskTextPatterns);\n };\n // Get the DOM hierarchy of the element, starting from the target element to the root element.\n this.getHierarchy = function (element) {\n var e_2, _a;\n var _b, _c;\n var startTime = performance.now();\n var hierarchy = [];\n if (!element) {\n return [];\n }\n // Get list of ancestors including itself and get properties at each level in the hierarchy\n var ancestors = getAncestors(element);\n // Build attributes to mask map\n var elementToAttributesToMaskMap = new Map();\n for (var i = ancestors.length - 1; i >= 0; i--) {\n var node = ancestors[i];\n if (node) {\n var attributesToMask = parseAttributesToMask(node.getAttribute(constants.DATA_AMP_MASK_ATTRIBUTES));\n var ancestorAttributesToMask = i === ancestors.length - 1 ? [] : (_b = elementToAttributesToMaskMap.get(ancestors[i + 1])) !== null && _b !== void 0 ? _b : new Set();\n var combinedAttributesToMask = new Set(__spreadArray(__spreadArray([], __read(ancestorAttributesToMask), false), __read(attributesToMask), false));\n elementToAttributesToMaskMap.set(node, combinedAttributesToMask);\n }\n }\n hierarchy = ancestors.map(function (el) { var _a; return getElementProperties(el, (_a = elementToAttributesToMaskMap.get(el)) !== null && _a !== void 0 ? _a : new Set()); });\n var _loop_1 = function (hierarchyNode) {\n if (hierarchyNode === null || hierarchyNode === void 0 ? void 0 : hierarchyNode.attrs) {\n Object.entries(hierarchyNode.attrs).forEach(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n if (hierarchyNode.attrs) {\n hierarchyNode.attrs[key] = _this.replaceSensitiveString(value);\n }\n });\n }\n };\n try {\n // Search for and mask any sensitive attribute values\n for (var hierarchy_1 = __values(hierarchy), hierarchy_1_1 = hierarchy_1.next(); !hierarchy_1_1.done; hierarchy_1_1 = hierarchy_1.next()) {\n var hierarchyNode = hierarchy_1_1.value;\n _loop_1(hierarchyNode);\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (hierarchy_1_1 && !hierarchy_1_1.done && (_a = hierarchy_1.return)) _a.call(hierarchy_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n var endTime = performance.now();\n (_c = _this.diagnosticsClient) === null || _c === void 0 ? void 0 : _c.recordHistogram('autocapturePlugin.getHierarchy', endTime - startTime);\n return hierarchy;\n };\n this.getNearestLabel = function (element) {\n var parent = element.parentElement;\n if (!parent) {\n return '';\n }\n var labelElement;\n try {\n labelElement = parent.querySelector(':scope>span,h1,h2,h3,h4,h5,h6');\n }\n catch (_a) {\n /* istanbul ignore next */\n labelElement = null;\n }\n if (labelElement) {\n /* istanbul ignore next */\n return _this.getText(labelElement);\n }\n return _this.getNearestLabel(parent);\n };\n // Returns the Amplitude event properties for the given element.\n this.getEventProperties = function (actionType, element, dataAttributePrefix) {\n var _a;\n var _b, _c, _d;\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n /* istanbul ignore next */\n var rect = typeof element.getBoundingClientRect === 'function' ? element.getBoundingClientRect() : { left: null, top: null };\n var hierarchy = _this.getHierarchy(element);\n var currentElementAttributes = (_d = hierarchy[0]) === null || _d === void 0 ? void 0 : _d.attrs;\n var nearestLabel = _this.getNearestLabel(element);\n var attributes = extractPrefixedAttributes(currentElementAttributes !== null && currentElementAttributes !== void 0 ? currentElementAttributes : {}, dataAttributePrefix);\n /* istanbul ignore next */\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HIERARCHY] = hierarchy,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = _this.getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT] = rect.left == null ? null : Math.round(rect.left),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP] = rect.top == null ? null : Math.round(rect.top),\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES] = attributes,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL] = nearestLabel,\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = getDecodeURI(window.location.href.split('?')[0]),\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE] = getPageTitle(_this.replaceSensitiveString),\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT] = window.innerHeight,\n _a[constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH] = window.innerWidth,\n _a);\n // id is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || '';\n // class is never masked, so always include it\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_CLASS] = element.getAttribute('class');\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL] = currentElementAttributes === null || currentElementAttributes === void 0 ? void 0 : currentElementAttributes['aria-label'];\n if (tag === 'a' && actionType === 'click' && element instanceof HTMLAnchorElement) {\n var href = element.href.substring(0, constants.MAX_ATTRIBUTE_LENGTH);\n properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_HREF] = _this.replaceSensitiveString(href); // we don't use hierarchy here because we don't want href value to be changed\n }\n return removeEmptyProperties(properties);\n };\n this.addAdditionalEventProperties = function (event, type, selectorAllowlist, dataAttributePrefix, \n // capture the event if the cursor is a \"pointer\" when this element is clicked on\n // reason: a \"pointer\" cursor indicates that an element should be interactable\n // regardless of the element's tag name\n isCapturingCursorPointer) {\n if (isCapturingCursorPointer === void 0) { isCapturingCursorPointer = false; }\n var baseEvent = {\n event: event,\n timestamp: Date.now(),\n type: type,\n };\n if (isElementBasedEvent(baseEvent) && baseEvent.event.target !== null) {\n if (isCapturingCursorPointer) {\n var isCursorPointer = isElementPointerCursor(baseEvent.event.target, baseEvent.type);\n if (isCursorPointer) {\n baseEvent.closestTrackedAncestor = baseEvent.event.target;\n baseEvent.targetElementProperties = _this.getEventProperties(baseEvent.type, baseEvent.closestTrackedAncestor, dataAttributePrefix);\n return baseEvent;\n }\n }\n // Retrieve additional event properties from the target element\n var closestTrackedAncestor = getClosestElement(baseEvent.event.target, selectorAllowlist);\n if (closestTrackedAncestor) {\n baseEvent.closestTrackedAncestor = closestTrackedAncestor;\n baseEvent.targetElementProperties = _this.getEventProperties(baseEvent.type, closestTrackedAncestor, dataAttributePrefix);\n }\n return baseEvent;\n }\n return baseEvent;\n };\n this.extractDataFromDataSource = function (dataSource, contextElement) {\n // Extract from DOM Element\n if (dataSource.sourceType === 'DOM_ELEMENT') {\n var sourceElement = getDataSource(dataSource, contextElement);\n if (!sourceElement) {\n return undefined;\n }\n if (dataSource.elementExtractType === 'TEXT') {\n return _this.getText(sourceElement);\n }\n else if (dataSource.elementExtractType === 'ATTRIBUTE' && dataSource.attribute) {\n return sourceElement.getAttribute(dataSource.attribute);\n }\n return undefined;\n }\n // TODO: Extract from other source types\n return undefined;\n };\n this.getText = function (element) {\n // Check if element or any parent has data-amp-mask attribute\n var hasMaskAttribute = element.closest(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"]\")) !== null;\n if (hasMaskAttribute) {\n return MASKED_TEXT_VALUE;\n }\n var output = '';\n if (!element.querySelector(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"], [contenteditable]\"))) {\n output = element.innerText || '';\n }\n else {\n var clonedTree = element.cloneNode(true);\n // replace all elements with TEXT_MASK_ATTRIBUTE attribute and contenteditable with the text MASKED_TEXT_VALUE\n clonedTree.querySelectorAll(\"[\".concat(TEXT_MASK_ATTRIBUTE, \"], [contenteditable]\")).forEach(function (node) {\n node.innerText = MASKED_TEXT_VALUE;\n });\n output = clonedTree.innerText || '';\n }\n return _this.replaceSensitiveString(output.substring(0, 255)).replace(/\\s+/g, ' ').trim();\n };\n // Returns the element properties for the given element in Visual Labeling.\n this.getEventTagProps = function (element) {\n var _a;\n var _b, _c;\n if (!element) {\n return {};\n }\n /* istanbul ignore next */\n var tag = (_c = (_b = element === null || element === void 0 ? void 0 : element.tagName) === null || _b === void 0 ? void 0 : _b.toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b);\n var properties = (_a = {},\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG] = tag,\n _a[constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT] = _this.getText(element),\n _a[constants.AMPLITUDE_EVENT_PROP_PAGE_URL] = window.location.href.split('?')[0],\n _a);\n return removeEmptyProperties(properties);\n };\n this.diagnosticsClient = context === null || context === void 0 ? void 0 : context.diagnosticsClient;\n var rawPatterns = (_b = options.maskTextRegex) !== null && _b !== void 0 ? _b : [];\n var compiled = [];\n try {\n for (var rawPatterns_1 = __values(rawPatterns), rawPatterns_1_1 = rawPatterns_1.next(); !rawPatterns_1_1.done; rawPatterns_1_1 = rawPatterns_1.next()) {\n var entry = rawPatterns_1_1.value;\n if (compiled.length >= constants.MAX_MASK_TEXT_PATTERNS) {\n break;\n }\n if (entry instanceof RegExp) {\n compiled.push(entry);\n }\n else if ('pattern' in entry && typeof entry.pattern === 'string') {\n try {\n compiled.push(new RegExp(entry.pattern, 'i'));\n }\n catch (_c) {\n // ignore invalid pattern strings\n }\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (rawPatterns_1_1 && !rawPatterns_1_1.done && (_a = rawPatterns_1.return)) _a.call(rawPatterns_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n this.additionalMaskTextPatterns = compiled;\n }\n return DataExtractor;\n}());\nexport { DataExtractor };\n//# sourceMappingURL=data-extractor.js.map","/* istanbul ignore file */\n/* eslint-disable no-restricted-globals */\nimport { AMPLITUDE_ORIGIN, AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL, AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS, } from '../constants';\nimport { asyncLoadScript, generateUniqueId } from '../helpers';\nimport { VERSION } from '../version';\nimport { DataExtractor } from '../data-extractor';\n// TODO: use MessageChannel instead of window.postMessage\nvar WindowMessenger = /** @class */ (function () {\n function WindowMessenger(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.origin, origin = _c === void 0 ? AMPLITUDE_ORIGIN : _c;\n var _this = this;\n this.endpoint = AMPLITUDE_ORIGIN;\n this.requestCallbacks = {};\n this.onSelect = function (data) {\n _this.notify({ action: 'element-selected', data: data });\n };\n this.onTrack = function (type, properties) {\n if (type === 'selector-mode-changed') {\n _this.notify({ action: 'track-selector-mode-changed', data: properties });\n }\n else if (type === 'selector-moved') {\n _this.notify({ action: 'track-selector-moved', data: properties });\n }\n };\n this.endpoint = origin;\n }\n WindowMessenger.prototype.notify = function (message) {\n var _a, _b, _c, _d;\n (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Message sent: ', JSON.stringify(message));\n (_d = (_c = window.opener) === null || _c === void 0 ? void 0 : _c.postMessage) === null || _d === void 0 ? void 0 : _d.call(_c, message, this.endpoint);\n };\n // Send an async request to the parent window\n WindowMessenger.prototype.sendRequest = function (action, args, options) {\n var _this = this;\n if (options === void 0) { options = { timeout: 15000 }; }\n // Create Request ID\n var id = generateUniqueId();\n var request = {\n id: id,\n action: action,\n args: args,\n };\n // Create a Promise that will be resolved when the response is received\n var promise = new Promise(function (resolve, reject) {\n _this.requestCallbacks[id] = { resolve: resolve, reject: reject };\n // Send the request\n _this.notify(request);\n // Handle request timeouts\n if ((options === null || options === void 0 ? void 0 : options.timeout) > 0) {\n setTimeout(function () {\n reject(new Error(\"\".concat(action, \" timed out (id: \").concat(id, \")\")));\n delete _this.requestCallbacks[id];\n }, options.timeout);\n }\n });\n return promise;\n };\n // Handle messages from the parent window\n WindowMessenger.prototype.handleResponse = function (response) {\n var _a;\n if (!this.requestCallbacks[response.id]) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(\"No callback found for request id: \".concat(response.id));\n return;\n }\n this.requestCallbacks[response.id].resolve(response.responseData);\n delete this.requestCallbacks[response.id];\n };\n WindowMessenger.prototype.setup = function (_a) {\n var _this = this;\n var _b = _a === void 0 ? { dataExtractor: new DataExtractor({}) } : _a, logger = _b.logger, endpoint = _b.endpoint, isElementSelectable = _b.isElementSelectable, cssSelectorAllowlist = _b.cssSelectorAllowlist, actionClickAllowlist = _b.actionClickAllowlist, dataExtractor = _b.dataExtractor;\n this.logger = logger;\n // If endpoint is customized, don't override it.\n if (endpoint && this.endpoint === AMPLITUDE_ORIGIN) {\n this.endpoint = endpoint;\n }\n var amplitudeVisualTaggingSelectorInstance = null;\n // Attach Event Listener to listen for messages from the parent window\n window.addEventListener('message', function (event) {\n var _a, _b, _c, _d, _e;\n (_b = (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'Message received: ', JSON.stringify(event));\n // Only accept messages from the specified origin\n if (_this.endpoint !== event.origin) {\n return;\n }\n var eventData = event === null || event === void 0 ? void 0 : event.data;\n var action = eventData === null || eventData === void 0 ? void 0 : eventData.action;\n // Ignore messages without action\n if (!action) {\n return;\n }\n // If id exists, handle responses to previous requests\n if ('id' in eventData) {\n (_d = (_c = _this.logger) === null || _c === void 0 ? void 0 : _c.debug) === null || _d === void 0 ? void 0 : _d.call(_c, 'Received Response to previous request: ', JSON.stringify(event));\n _this.handleResponse(eventData);\n // If action exists, handle the action using existing handlers\n }\n else {\n if (action === 'ping') {\n _this.notify({ action: 'pong' });\n }\n else if (action === 'initialize-visual-tagging-selector') {\n var actionData_1 = eventData === null || eventData === void 0 ? void 0 : eventData.data;\n asyncLoadScript(AMPLITUDE_VISUAL_TAGGING_SELECTOR_SCRIPT_URL)\n .then(function () {\n var _a;\n // eslint-disable-next-line\n amplitudeVisualTaggingSelectorInstance = (_a = window === null || window === void 0 ? void 0 : window.amplitudeVisualTaggingSelector) === null || _a === void 0 ? void 0 : _a.call(window, {\n getEventTagProps: dataExtractor.getEventTagProps,\n isElementSelectable: function (element) {\n if (isElementSelectable) {\n return isElementSelectable((actionData_1 === null || actionData_1 === void 0 ? void 0 : actionData_1.actionType) || 'click', element);\n }\n return true;\n },\n onTrack: _this.onTrack,\n onSelect: _this.onSelect,\n visualHighlightClass: AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS,\n messenger: _this,\n cssSelectorAllowlist: cssSelectorAllowlist,\n actionClickAllowlist: actionClickAllowlist,\n extractDataFromDataSource: dataExtractor.extractDataFromDataSource,\n dataExtractor: dataExtractor,\n diagnostics: {\n autocapture: {\n version: VERSION,\n },\n },\n });\n _this.notify({ action: 'selector-loaded' });\n })\n .catch(function () {\n var _a;\n (_a = _this.logger) === null || _a === void 0 ? void 0 : _a.warn('Failed to initialize visual tagging selector');\n });\n }\n else if (action === 'close-visual-tagging-selector') {\n // eslint-disable-next-line\n (_e = amplitudeVisualTaggingSelectorInstance === null || amplitudeVisualTaggingSelectorInstance === void 0 ? void 0 : amplitudeVisualTaggingSelectorInstance.close) === null || _e === void 0 ? void 0 : _e.call(amplitudeVisualTaggingSelectorInstance);\n }\n }\n });\n // Notify the parent window that the page has loaded\n this.notify({ action: 'page-loaded' });\n };\n return WindowMessenger;\n}());\nexport { WindowMessenger };\n//# sourceMappingURL=messenger.js.map","import { Observable, getGlobalScope } from '@amplitude/analytics-core';\nexport var createMutationObservable = function () {\n return new Observable(function (observer) {\n var mutationObserver = new MutationObserver(function (mutations) {\n observer.next(mutations);\n });\n if (document.body) {\n mutationObserver.observe(document.body, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n });\n }\n return function () { return mutationObserver.disconnect(); };\n });\n};\n/**\n * Creates an observable that tracks click events on the document.\n * @param clickType - The type of click event to track (click or pointerdown)\n */\nexport var createClickObservable = function (clickType) {\n if (clickType === void 0) { clickType = 'click'; }\n return new Observable(function (observer) {\n var _a;\n var handler = function (event) {\n observer.next(event);\n };\n /* istanbul ignore next */\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.addEventListener(clickType, handler, { capture: true });\n return function () {\n var _a;\n /* istanbul ignore next */\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.removeEventListener(clickType, handler, { capture: true });\n };\n });\n};\n//# sourceMappingURL=observables.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { DEFAULT_CSS_SELECTOR_ALLOWLIST, DEFAULT_ACTION_CLICK_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, getGlobalScope, multicast, } from '@amplitude/analytics-core';\nimport { VERSION } from './version';\nimport * as constants from './constants';\nimport { createShouldTrackEvent, } from './helpers';\nimport { WindowMessenger } from './libs/messenger';\nimport { trackClicks } from './autocapture/track-click';\nimport { trackChange } from './autocapture/track-change';\nimport { trackActionClick } from './autocapture/track-action-click';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { createLabeledEventToTriggerMap, createTriggerEvaluator, groupLabeledEventIdsByEventType, } from './pageActions/triggers';\nimport { DataExtractor } from './data-extractor';\nimport { Observable } from '@amplitude/analytics-core';\nexport var ObservablesEnum;\n(function (ObservablesEnum) {\n ObservablesEnum[\"ClickObservable\"] = \"clickObservable\";\n ObservablesEnum[\"ChangeObservable\"] = \"changeObservable\";\n // ErrorObservable = 'errorObservable',\n ObservablesEnum[\"NavigateObservable\"] = \"navigateObservable\";\n ObservablesEnum[\"MutationObservable\"] = \"mutationObservable\";\n})(ObservablesEnum || (ObservablesEnum = {}));\nexport var autocapturePlugin = function (options, context) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if (options === void 0) { options = {}; }\n // Set the plugin version tag\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n context === null || context === void 0 ? void 0 : context.diagnosticsClient.setTag('plugin.autocapture.version', VERSION);\n var _j = options.dataAttributePrefix, dataAttributePrefix = _j === void 0 ? DEFAULT_DATA_ATTRIBUTE_PREFIX : _j, _k = options.visualTaggingOptions, visualTaggingOptions = _k === void 0 ? {\n enabled: true,\n messenger: new WindowMessenger(),\n } : _k;\n options.cssSelectorAllowlist = (_a = options.cssSelectorAllowlist) !== null && _a !== void 0 ? _a : DEFAULT_CSS_SELECTOR_ALLOWLIST;\n options.actionClickAllowlist = (_b = options.actionClickAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_ACTION_CLICK_ALLOWLIST;\n options.debounceTime = (_c = options.debounceTime) !== null && _c !== void 0 ? _c : 0;\n options.pageUrlExcludelist = (_d = options.pageUrlExcludelist) === null || _d === void 0 ? void 0 : _d.reduce(function (acc, excludePattern) {\n if (typeof excludePattern === 'string') {\n acc.push(excludePattern);\n }\n if (excludePattern instanceof RegExp) {\n acc.push(excludePattern);\n }\n if (typeof excludePattern === 'object' && excludePattern !== null && 'pattern' in excludePattern) {\n try {\n acc.push(new RegExp(excludePattern.pattern));\n }\n catch (regexError) {\n console.warn(\"Invalid regex pattern: \".concat(excludePattern.pattern), regexError);\n return acc;\n }\n }\n return acc;\n }, []);\n var name = constants.PLUGIN_NAME;\n var type = 'enrichment';\n var subscriptions = [];\n // Create data extractor based on options\n var dataExtractor = new DataExtractor(options, context);\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var clickObservable = multicast(createClickObservable().map(function (click) {\n return dataExtractor.addAdditionalEventProperties(click, 'click', options.cssSelectorAllowlist, dataAttributePrefix);\n }));\n var changeObservable = multicast(new Observable(function (observer) {\n var _a;\n var handler = function (changeEvent) {\n var enrichedChangeEvent = dataExtractor.addAdditionalEventProperties(changeEvent, 'change', options.cssSelectorAllowlist, dataAttributePrefix);\n observer.next(enrichedChangeEvent);\n };\n /* istanbul ignore next */\n (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.addEventListener('change', handler, { capture: true });\n /* istanbul ignore next */\n return function () { var _a; return (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document.removeEventListener('change', handler); };\n }));\n // Create Observable from unhandled errors\n // const errorObservable = fromEvent<ErrorEvent>(window, 'error').pipe(\n // map((error) => addAdditionalEventProperties(error, 'error')),\n // );\n // Create observable for URL changes\n var navigateObservable;\n /* istanbul ignore next */\n if (window.navigation) {\n navigateObservable = multicast(new Observable(function (observer) {\n var handler = function (navigateEvent) {\n var enrichedNavigateEvent = dataExtractor.addAdditionalEventProperties(navigateEvent, 'navigate', options.cssSelectorAllowlist, dataAttributePrefix);\n observer.next(enrichedNavigateEvent);\n };\n window.navigation.addEventListener('navigate', handler);\n return function () {\n window.navigation.removeEventListener('navigate', handler);\n };\n }));\n }\n var mutationObservable = multicast(createMutationObservable().map(function (mutation) {\n return dataExtractor.addAdditionalEventProperties(mutation, 'mutation', options.cssSelectorAllowlist, dataAttributePrefix);\n }));\n return _a = {},\n _a[ObservablesEnum.ChangeObservable] = changeObservable,\n // [ObservablesEnum.ErrorObservable]: errorObservable,\n _a[ObservablesEnum.ClickObservable] = clickObservable,\n _a[ObservablesEnum.MutationObservable] = mutationObservable,\n _a[ObservablesEnum.NavigateObservable] = navigateObservable,\n _a;\n };\n // Group labeled events by event type (eg. click, change)\n var groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((_f = (_e = options.pageActions) === null || _e === void 0 ? void 0 : _e.labeledEvents) !== null && _f !== void 0 ? _f : {}));\n var labeledEventToTriggerMap = createLabeledEventToTriggerMap((_h = (_g = options.pageActions) === null || _g === void 0 ? void 0 : _g.triggers) !== null && _h !== void 0 ? _h : []);\n // Evaluate triggers for the given event by running the actions associated with the matching triggers\n var evaluateTriggers = createTriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options);\n // Function to recalculate internal variables when remote config is updated\n var recomputePageActionsData = function (remotePageActions) {\n var _a, _b;\n if (remotePageActions) {\n // Merge remote config with local options\n options.pageActions = __assign(__assign({}, options.pageActions), remotePageActions);\n // Recalculate internal variables\n groupedLabeledEvents = groupLabeledEventIdsByEventType(Object.values((_a = options.pageActions.labeledEvents) !== null && _a !== void 0 ? _a : {}));\n labeledEventToTriggerMap = createLabeledEventToTriggerMap((_b = options.pageActions.triggers) !== null && _b !== void 0 ? _b : []);\n // Update evaluateTriggers function\n evaluateTriggers.update(groupedLabeledEvents, labeledEventToTriggerMap, options);\n }\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var shouldTrackEvent, shouldTrackActionClick, allObservables, clickTrackingSubscription, changeSubscription, actionClickSubscription, allowlist, actionClickAllowlist;\n var _a, _b;\n return __generator(this, function (_c) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n // Fetch remote config for pageActions in a non-blocking manner\n if (config.fetchRemoteConfig) {\n if (!config.remoteConfigClient) {\n // TODO(xinyi): Diagnostics.recordEvent\n config.loggerProvider.debug('Remote config client is not provided, skipping remote config fetch');\n }\n else {\n config.remoteConfigClient.subscribe('analyticsSDK.pageActions', 'all', function (remoteConfig) {\n recomputePageActionsData(remoteConfig);\n });\n }\n }\n shouldTrackEvent = createShouldTrackEvent(options, options.cssSelectorAllowlist);\n shouldTrackActionClick = createShouldTrackEvent(options, options.actionClickAllowlist);\n allObservables = createObservables();\n clickTrackingSubscription = trackClicks({\n allObservables: allObservables,\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(clickTrackingSubscription);\n changeSubscription = trackChange({\n allObservables: allObservables,\n getEventProperties: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return dataExtractor.getEventProperties.apply(dataExtractor, __spreadArray(__spreadArray([], __read(args), false), [dataAttributePrefix], false));\n },\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers),\n });\n subscriptions.push(changeSubscription);\n actionClickSubscription = trackActionClick({\n allObservables: allObservables,\n options: options,\n getEventProperties: function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return dataExtractor.getEventProperties.apply(dataExtractor, __spreadArray(__spreadArray([], __read(args), false), [dataAttributePrefix], false));\n },\n amplitude: amplitude,\n shouldTrackEvent: shouldTrackEvent,\n shouldTrackActionClick: shouldTrackActionClick,\n });\n if (actionClickSubscription) {\n subscriptions.push(actionClickSubscription);\n }\n /* istanbul ignore next */\n (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log(\"\".concat(name, \" has been successfully added.\"));\n // Setup visual tagging selector\n if (window.opener && visualTaggingOptions.enabled) {\n allowlist = options.cssSelectorAllowlist;\n actionClickAllowlist = options.actionClickAllowlist;\n /* istanbul ignore next */\n (_b = visualTaggingOptions.messenger) === null || _b === void 0 ? void 0 : _b.setup(__assign(__assign({ dataExtractor: dataExtractor, logger: config === null || config === void 0 ? void 0 : config.loggerProvider }, ((config === null || config === void 0 ? void 0 : config.serverZone) && { endpoint: constants.AMPLITUDE_ORIGINS_MAP[config.serverZone] })), { isElementSelectable: createShouldTrackEvent(options, __spreadArray(__spreadArray([], __read(allowlist), false), __read(actionClickAllowlist), false)), cssSelectorAllowlist: allowlist, actionClickAllowlist: actionClickAllowlist }));\n }\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptions_1, subscriptions_1_1, subscription;\n var e_1, _a;\n return __generator(this, function (_b) {\n try {\n for (subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n subscription = subscriptions_1_1.value;\n subscription.unsubscribe();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=autocapture-plugin.js.map","import { __values } from \"tslib\";\nimport { matchEventToFilter } from './matchEventToFilter';\nimport { executeActions } from './actions';\nvar eventTypeToBrowserEventMap = {\n '[Amplitude] Element Clicked': 'click',\n '[Amplitude] Element Changed': 'change',\n};\n// groups labeled events by event type\n// skips any labeled events with malformed definitions or unexpected event_type\nexport var groupLabeledEventIdsByEventType = function (labeledEvents) {\n var e_1, _a, e_2, _b;\n // Initialize all event types with empty sets\n var groupedLabeledEvents = Object.values(eventTypeToBrowserEventMap).reduce(function (acc, browserEvent) {\n acc[browserEvent] = new Set();\n return acc;\n }, {});\n // If there are no labeled events, return the initialized groupedLabeledEvents\n if (!labeledEvents) {\n return groupedLabeledEvents;\n }\n try {\n // Group labeled events by event type\n for (var labeledEvents_1 = __values(labeledEvents), labeledEvents_1_1 = labeledEvents_1.next(); !labeledEvents_1_1.done; labeledEvents_1_1 = labeledEvents_1.next()) {\n var le = labeledEvents_1_1.value;\n try {\n try {\n for (var _c = (e_2 = void 0, __values(le.definition)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var def = _d.value;\n var browserEvent = eventTypeToBrowserEventMap[def.event_type];\n if (browserEvent) {\n groupedLabeledEvents[browserEvent].add(le.id);\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n catch (e) {\n // Skip this labeled event if there is an error\n console.warn('Skipping Labeled Event due to malformed definition', le === null || le === void 0 ? void 0 : le.id, e);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (labeledEvents_1_1 && !labeledEvents_1_1.done && (_a = labeledEvents_1.return)) _a.call(labeledEvents_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return groupedLabeledEvents;\n};\n// TODO: add tests\nexport var createLabeledEventToTriggerMap = function (triggers) {\n var e_3, _a, e_4, _b;\n var labeledEventToTriggerMap = new Map();\n try {\n for (var triggers_1 = __values(triggers), triggers_1_1 = triggers_1.next(); !triggers_1_1.done; triggers_1_1 = triggers_1.next()) {\n var trigger = triggers_1_1.value;\n try {\n for (var _c = (e_4 = void 0, __values(trigger.conditions)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var condition = _d.value;\n if (condition.type === 'LABELED_EVENT') {\n var eventId = condition.match.eventId;\n // Get existing triggers for this event ID or initialize empty array\n var existingTriggers = labeledEventToTriggerMap.get(eventId);\n if (!existingTriggers) {\n existingTriggers = [];\n labeledEventToTriggerMap.set(eventId, existingTriggers);\n }\n // Add current trigger to the list of triggers for this event ID\n existingTriggers.push(trigger);\n }\n }\n }\n catch (e_4_1) { e_4 = { error: e_4_1 }; }\n finally {\n try {\n if (_d && !_d.done && (_b = _c.return)) _b.call(_c);\n }\n finally { if (e_4) throw e_4.error; }\n }\n }\n }\n catch (e_3_1) { e_3 = { error: e_3_1 }; }\n finally {\n try {\n if (triggers_1_1 && !triggers_1_1.done && (_a = triggers_1.return)) _a.call(triggers_1);\n }\n finally { if (e_3) throw e_3.error; }\n }\n return labeledEventToTriggerMap;\n};\n/**\n * Matches an event to labeled events based on the event's properties.\n * The logic matches exactly what is supported by the query backend.\n * TODO: later pre-filter the labeled events based on URL first\n *\n * @param event - The event to match against labeled events\n * @param labeledEvents - Array of labeled events to match against\n * @returns Array of matching labeled events\n */\nexport var matchEventToLabeledEvents = function (event, labeledEvents) {\n return labeledEvents.filter(function (le) {\n return le.definition.some(function (def) {\n return (eventTypeToBrowserEventMap[def.event_type] === event.type &&\n def.filters.every(function (filter) { return matchEventToFilter(event, filter); }));\n });\n });\n};\nexport var matchLabeledEventsToTriggers = function (labeledEvents, leToTriggerMap) {\n var e_5, _a, e_6, _b;\n var matchingTriggers = new Set();\n try {\n for (var labeledEvents_2 = __values(labeledEvents), labeledEvents_2_1 = labeledEvents_2.next(); !labeledEvents_2_1.done; labeledEvents_2_1 = labeledEvents_2.next()) {\n var le = labeledEvents_2_1.value;\n var triggers = leToTriggerMap.get(le.id);\n if (triggers) {\n try {\n for (var triggers_2 = (e_6 = void 0, __values(triggers)), triggers_2_1 = triggers_2.next(); !triggers_2_1.done; triggers_2_1 = triggers_2.next()) {\n var trigger = triggers_2_1.value;\n matchingTriggers.add(trigger);\n }\n }\n catch (e_6_1) { e_6 = { error: e_6_1 }; }\n finally {\n try {\n if (triggers_2_1 && !triggers_2_1.done && (_b = triggers_2.return)) _b.call(triggers_2);\n }\n finally { if (e_6) throw e_6.error; }\n }\n }\n }\n }\n catch (e_5_1) { e_5 = { error: e_5_1 }; }\n finally {\n try {\n if (labeledEvents_2_1 && !labeledEvents_2_1.done && (_a = labeledEvents_2.return)) _a.call(labeledEvents_2);\n }\n finally { if (e_5) throw e_5.error; }\n }\n return Array.from(matchingTriggers);\n};\nvar TriggerEvaluator = /** @class */ (function () {\n function TriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options) {\n this.groupedLabeledEvents = groupedLabeledEvents;\n this.labeledEventToTriggerMap = labeledEventToTriggerMap;\n this.dataExtractor = dataExtractor;\n this.options = options;\n }\n TriggerEvaluator.prototype.evaluate = function (event) {\n var e_7, _a;\n // If there is no pageActions, return the event as is\n var pageActions = this.options.pageActions;\n if (!pageActions) {\n return event;\n }\n // Find matching labeled events\n var matchingLabeledEvents = matchEventToLabeledEvents(event, Array.from(this.groupedLabeledEvents[event.type]).map(function (id) { return pageActions.labeledEvents[id]; }));\n // Find matching conditions\n var matchingTriggers = matchLabeledEventsToTriggers(matchingLabeledEvents, this.labeledEventToTriggerMap);\n try {\n for (var matchingTriggers_1 = __values(matchingTriggers), matchingTriggers_1_1 = matchingTriggers_1.next(); !matchingTriggers_1_1.done; matchingTriggers_1_1 = matchingTriggers_1.next()) {\n var trigger = matchingTriggers_1_1.value;\n executeActions(trigger.actions, event, this.dataExtractor);\n }\n }\n catch (e_7_1) { e_7 = { error: e_7_1 }; }\n finally {\n try {\n if (matchingTriggers_1_1 && !matchingTriggers_1_1.done && (_a = matchingTriggers_1.return)) _a.call(matchingTriggers_1);\n }\n finally { if (e_7) throw e_7.error; }\n }\n return event;\n };\n TriggerEvaluator.prototype.update = function (groupedLabeledEvents, labeledEventToTriggerMap, options) {\n this.groupedLabeledEvents = groupedLabeledEvents;\n this.labeledEventToTriggerMap = labeledEventToTriggerMap;\n this.options = options;\n };\n return TriggerEvaluator;\n}());\nexport { TriggerEvaluator };\nexport var createTriggerEvaluator = function (groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options) {\n return new TriggerEvaluator(groupedLabeledEvents, labeledEventToTriggerMap, dataExtractor, options);\n};\n//# sourceMappingURL=triggers.js.map","/**\n * Matches an event to a single filter\n * @param event - The event to match\n * @param filter - The filter to match against\n * @returns boolean indicating if the event matches the filter\n */\nexport var matchEventToFilter = function (event, filter) {\n try {\n if (filter.subprop_key === '[Amplitude] Element Text') {\n // TODO: add support for the other operators\n return (filter.subprop_op === 'is' &&\n filter.subprop_value.includes(event.targetElementProperties['[Amplitude] Element Text']));\n }\n else if (filter.subprop_key === '[Amplitude] Element Hierarchy') {\n // Check if the element ancestory matches the CSS selector, always check this last since it is the most expensive\n return (filter.subprop_op === 'autotrack css match' &&\n !!event.closestTrackedAncestor.closest(filter.subprop_value.toString()));\n }\n }\n catch (error) {\n console.error('Error matching event to filter', error);\n return false;\n }\n return false;\n};\n//# sourceMappingURL=matchEventToFilter.js.map","import { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nexport function trackClicks(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;\n var clickObservable = allObservables.clickObservable;\n var clickObservableFiltered = clickObservable\n .filter(filterOutNonTrackableEvents)\n .filter(function (click) {\n // Only track clicks on elements that should be tracked,\n return shouldTrackEvent('click', click.closestTrackedAncestor);\n })\n .map(function (click) { return evaluateTriggers(click); });\n var clicks = clickObservableFiltered;\n return clicks.subscribe(function (click) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, click.targetElementProperties);\n });\n}\n//# sourceMappingURL=track-click.js.map","import { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants';\nexport function trackChange(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, evaluateTriggers = _a.evaluateTriggers;\n var changeObservable = allObservables.changeObservable;\n var filteredChangeObservable = changeObservable\n .filter(filterOutNonTrackableEvents)\n .filter(function (changeEvent) {\n // Only track change on elements that should be tracked,\n return shouldTrackEvent('change', changeEvent.closestTrackedAncestor);\n })\n .map(function (changeEvent) { return evaluateTriggers(changeEvent); });\n return filteredChangeObservable.subscribe(function (changeEvent) {\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CHANGED_EVENT, getEventProperties('change', changeEvent.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-change.js.map","import { merge, asyncMap } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents, getClosestElement, } from '../helpers';\nimport { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants';\nexport function trackActionClick(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, options = _a.options, getEventProperties = _a.getEventProperties, shouldTrackEvent = _a.shouldTrackEvent, shouldTrackActionClick = _a.shouldTrackActionClick;\n var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;\n var filteredClickObservable = clickObservable\n .filter(function (click) {\n return !shouldTrackEvent('click', click.closestTrackedAncestor);\n })\n .map(function (click) {\n // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist\n var closestActionClickEl = getClosestElement(click.event.target, options.actionClickAllowlist);\n click.closestTrackedAncestor = closestActionClickEl;\n // overwrite the targetElementProperties with the properties of the closestActionClickEl\n if (click.closestTrackedAncestor !== null) {\n click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor);\n }\n return click;\n })\n .filter(filterOutNonTrackableEvents)\n .filter(function (clickEvent) {\n // Only track change on elements that should be tracked\n return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor);\n });\n var mutationOrNavigate = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable;\n var clickMutationNavigateObservable = merge(filteredClickObservable, mutationOrNavigate);\n var actionClickTimer = null;\n var lastClickEvent = null;\n var actionClickObservable = asyncMap(clickMutationNavigateObservable, function (event) {\n // clear any previous timer\n if (actionClickTimer) {\n clearTimeout(actionClickTimer);\n actionClickTimer = null;\n }\n if (event.type === 'click') {\n // mark the 'last click event'\n lastClickEvent = event;\n // set a timer to clear last click event if no mutation event between now and 500ms\n actionClickTimer = setTimeout(function () {\n actionClickTimer = null;\n lastClickEvent = null;\n }, 500);\n return Promise.resolve(null);\n }\n else {\n // if mutation/navigation + last click event, then it's an action click\n if (lastClickEvent) {\n var event_1 = lastClickEvent;\n lastClickEvent = null;\n return Promise.resolve(event_1);\n }\n }\n return Promise.resolve(null);\n });\n return actionClickObservable.subscribe(function (actionClick) {\n if (!actionClick)\n return;\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, getEventProperties('click', actionClick.closestTrackedAncestor));\n });\n}\n//# sourceMappingURL=track-action-click.js.map","import { __assign } from \"tslib\";\nimport { merge, asyncMap } from '@amplitude/analytics-core';\nimport { filterOutNonTrackableEvents } from '../helpers';\nimport { AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT } from '../constants';\nvar DEAD_CLICK_TIMEOUT = 3000; // 3 seconds to wait for an activity to happen\nvar CHANGE_EVENTS = ['mutation', 'navigate'];\nexport function trackDeadClick(_a) {\n var amplitude = _a.amplitude, allObservables = _a.allObservables, getEventProperties = _a.getEventProperties, shouldTrackDeadClick = _a.shouldTrackDeadClick;\n var clickObservable = allObservables.clickObservable, mutationObservable = allObservables.mutationObservable, navigateObservable = allObservables.navigateObservable;\n var filteredClickObservable = clickObservable.filter(function (click) {\n return (filterOutNonTrackableEvents(click) &&\n shouldTrackDeadClick('click', click.closestTrackedAncestor) &&\n click.event.target instanceof Element &&\n click.event.target.closest('a[target=\"_blank\"]') === null);\n });\n /* istanbul ignore next */\n var changeObservables = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable;\n var clicksAndChangeObservable = merge(filteredClickObservable, changeObservables);\n var deadClickTimer = null;\n var deadClickObservable = asyncMap(clicksAndChangeObservable, function (event) {\n if (deadClickTimer && CHANGE_EVENTS.includes(event.type)) {\n // a mutation or navigation means it's not a dead click, so clear the timer\n clearTimeout(deadClickTimer);\n deadClickTimer = null;\n return Promise.resolve(null);\n }\n else if (event.type === 'click') {\n // if a dead click is already on-deck, return null.\n // this throttles dead clicks events so no more than one dead click event\n // is tracked per every DEAD_CLICK_TIMEOUT ms.\n if (deadClickTimer) {\n return Promise.resolve(null);\n }\n return new Promise(function (resolve) {\n deadClickTimer = setTimeout(function () {\n resolve(event);\n deadClickTimer = null;\n }, DEAD_CLICK_TIMEOUT);\n });\n }\n // unreachable code, but needed to satisfy the type checker\n return Promise.resolve(null);\n });\n return deadClickObservable.subscribe(function (actionClick) {\n if (!actionClick)\n return;\n var deadClickEvent = {\n '[Amplitude] X': actionClick.event.clientX,\n '[Amplitude] Y': actionClick.event.clientY,\n };\n amplitude.track(AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT, __assign(__assign({}, getEventProperties('click', actionClick.closestTrackedAncestor)), deadClickEvent), { time: actionClick.timestamp });\n });\n}\n//# sourceMappingURL=track-dead-click.js.map","import { __assign, __awaiter, __generator } from \"tslib\";\nimport { asyncMap, DEFAULT_RAGE_CLICK_THRESHOLD, DEFAULT_RAGE_CLICK_WINDOW_MS, DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD, } from '@amplitude/analytics-core';\nimport { AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT } from '../constants';\nvar RAGE_CLICK_THRESHOLD = DEFAULT_RAGE_CLICK_THRESHOLD;\nvar RAGE_CLICK_WINDOW_MS = DEFAULT_RAGE_CLICK_WINDOW_MS;\nvar RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD = DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD;\nfunction addCoordinates(regionBox, click) {\n var _a, _b, _c, _d;\n var _e = click.event, clientX = _e.clientX, clientY = _e.clientY;\n regionBox.yMin = Math.min((_a = regionBox.yMin) !== null && _a !== void 0 ? _a : clientY, clientY);\n regionBox.yMax = Math.max((_b = regionBox.yMax) !== null && _b !== void 0 ? _b : clientY, clientY);\n regionBox.xMin = Math.min((_c = regionBox.xMin) !== null && _c !== void 0 ? _c : clientX, clientX);\n regionBox.xMax = Math.max((_d = regionBox.xMax) !== null && _d !== void 0 ? _d : clientX, clientX);\n regionBox.isOutOfBounds =\n regionBox.yMax - regionBox.yMin > RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD ||\n regionBox.xMax - regionBox.xMin > RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD;\n}\nfunction getRageClickAnalyticsEvent(clickWindow) {\n /* istanbul ignore if */\n if (clickWindow.length === 0) {\n return null;\n }\n var firstClick = clickWindow[0];\n var lastClick = clickWindow[clickWindow.length - 1];\n var rageClickEvent = __assign({ '[Amplitude] Begin Time': new Date(firstClick.timestamp).toISOString(), '[Amplitude] End Time': new Date(lastClick.timestamp).toISOString(), '[Amplitude] Duration': lastClick.timestamp - firstClick.timestamp, '[Amplitude] Clicks': clickWindow.map(function (click) { return ({\n X: click.event.clientX,\n Y: click.event.clientY,\n Time: click.timestamp,\n }); }), '[Amplitude] Click Count': clickWindow.length }, firstClick.targetElementProperties);\n return { rageClickEvent: rageClickEvent, time: firstClick.timestamp };\n}\nfunction isClickOutsideRageClickWindow(clickWindow, click) {\n var firstIndex = Math.max(0, clickWindow.length - RAGE_CLICK_THRESHOLD + 1);\n var firstClick = clickWindow[firstIndex];\n return click.timestamp - firstClick.timestamp >= RAGE_CLICK_WINDOW_MS;\n}\nfunction isNewElement(clickWindow, click) {\n return (clickWindow.length > 0 &&\n clickWindow[clickWindow.length - 1].closestTrackedAncestor !== click.closestTrackedAncestor);\n}\nexport function trackRageClicks(_a) {\n var _this = this;\n var amplitude = _a.amplitude, allObservables = _a.allObservables, shouldTrackRageClick = _a.shouldTrackRageClick;\n var clickObservable = allObservables.clickObservable;\n // Keep track of all clicks within the sliding window\n var clickWindow = [];\n // Keep track of the region box for all clicks, to determine when a rage click is out of bounds\n var clickBoundingBox = {};\n var pendingRageClick = null;\n // helper function to reset the click window and region box\n function resetClickWindow(click) {\n clickWindow = [];\n clickBoundingBox = {};\n if (click) {\n addCoordinates(clickBoundingBox, click);\n clickWindow.push(click);\n }\n }\n var rageClickObservable = asyncMap(clickObservable.filter(function (click) { return shouldTrackRageClick('click', click.closestTrackedAncestor); }), function (click) { return __awaiter(_this, void 0, void 0, function () {\n var resolutionValue;\n return __generator(this, function (_a) {\n // add this click's coordinates to the bounding box\n addCoordinates(clickBoundingBox, click);\n resolutionValue = null;\n // if current click is:\n // 1. first click in the window\n // 2. on a new element\n // 3. outside the rage click time window\n // 4. out of bounds\n // then start a new click window\n if (clickWindow.length === 0 ||\n isNewElement(clickWindow, click) ||\n isClickOutsideRageClickWindow(clickWindow, click) ||\n clickBoundingBox.isOutOfBounds) {\n // if there was a previous Rage Click Event on deck, then send it\n if (pendingRageClick) {\n resolutionValue = getRageClickAnalyticsEvent(clickWindow);\n }\n resetClickWindow(click);\n }\n else {\n clickWindow.push(click);\n }\n // if there was a previous Rage Click Event on deck, then resolve it\n if (pendingRageClick) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n clearTimeout(pendingRageClick.timerId);\n pendingRageClick.resolve(resolutionValue);\n pendingRageClick = null;\n }\n // if we have enough clicks to be a rage click, set a timout to trigger the rage\n // click event after the time threshold is reached.\n // This will be cancelled if a new click is tracked within the time threshold.\n if (clickWindow.length >= RAGE_CLICK_THRESHOLD) {\n return [2 /*return*/, new Promise(function (resolve) {\n pendingRageClick = {\n resolve: resolve,\n timerId: setTimeout(function () {\n resolve(getRageClickAnalyticsEvent(clickWindow));\n }, RAGE_CLICK_WINDOW_MS),\n };\n })];\n }\n return [2 /*return*/, null];\n });\n }); });\n return rageClickObservable.subscribe(function (data) {\n /* istanbul ignore if */\n if (data === null) {\n return;\n }\n amplitude.track(AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, data.rageClickEvent, { time: data.time });\n });\n}\n//# sourceMappingURL=track-rage-click.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_RAGE_CLICK_ALLOWLIST, DEFAULT_DEAD_CLICK_ALLOWLIST, multicast, Observable, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { createShouldTrackEvent } from './helpers';\nimport { trackDeadClick } from './autocapture/track-dead-click';\nimport { trackRageClicks } from './autocapture/track-rage-click';\nimport { ObservablesEnum } from './autocapture-plugin';\nimport { createClickObservable, createMutationObservable } from './observables';\nimport { DataExtractor } from './data-extractor';\nexport var frustrationPlugin = function (options) {\n var _a, _b, _c, _d, _e;\n if (options === void 0) { options = {}; }\n var name = constants.FRUSTRATION_PLUGIN_NAME;\n var type = 'enrichment';\n var subscriptions = [];\n var rageCssSelectors = (_b = (_a = options.rageClicks) === null || _a === void 0 ? void 0 : _a.cssSelectorAllowlist) !== null && _b !== void 0 ? _b : DEFAULT_RAGE_CLICK_ALLOWLIST;\n var deadCssSelectors = (_d = (_c = options.deadClicks) === null || _c === void 0 ? void 0 : _c.cssSelectorAllowlist) !== null && _d !== void 0 ? _d : DEFAULT_DEAD_CLICK_ALLOWLIST;\n var dataAttributePrefix = (_e = options.dataAttributePrefix) !== null && _e !== void 0 ? _e : DEFAULT_DATA_ATTRIBUTE_PREFIX;\n var dataExtractor = new DataExtractor(options);\n // combine the two selector lists to determine which clicked elements should be filtered\n var combinedCssSelectors = __spreadArray([], __read(new Set(__spreadArray(__spreadArray([], __read(rageCssSelectors), false), __read(deadCssSelectors), false))), false);\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var clickObservable = multicast(createClickObservable('pointerdown').map(function (click) {\n return dataExtractor.addAdditionalEventProperties(click, 'click', combinedCssSelectors, dataAttributePrefix, true);\n }));\n var enrichedMutationObservable = multicast(createMutationObservable().map(function (mutation) {\n return dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix);\n }));\n var enrichedNavigateObservable;\n if (window.navigation) {\n var navigateObservable = new Observable(function (observer) {\n var handler = function (event) {\n observer.next(__assign(__assign({}, event), { type: 'navigate' }));\n };\n window.navigation.addEventListener('navigate', handler);\n return function () {\n window.navigation.removeEventListener('navigate', handler);\n };\n });\n enrichedNavigateObservable = multicast(navigateObservable.map(function (navigate) {\n return dataExtractor.addAdditionalEventProperties(navigate, 'navigate', combinedCssSelectors, dataAttributePrefix);\n }));\n }\n return _a = {},\n _a[ObservablesEnum.ClickObservable] = clickObservable,\n _a[ObservablesEnum.MutationObservable] = enrichedMutationObservable,\n _a[ObservablesEnum.NavigateObservable] = enrichedNavigateObservable,\n _a;\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var shouldTrackRageClick, shouldTrackDeadClick, allObservables, rageClickSubscription, deadClickSubscription;\n var _a;\n return __generator(this, function (_b) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n shouldTrackRageClick = createShouldTrackEvent(options, rageCssSelectors);\n shouldTrackDeadClick = createShouldTrackEvent(options, deadCssSelectors);\n allObservables = createObservables();\n rageClickSubscription = trackRageClicks({\n allObservables: allObservables,\n amplitude: amplitude,\n shouldTrackRageClick: shouldTrackRageClick,\n });\n subscriptions.push(rageClickSubscription);\n deadClickSubscription = trackDeadClick({\n amplitude: amplitude,\n allObservables: allObservables,\n getEventProperties: function (actionType, element) {\n return dataExtractor.getEventProperties(actionType, element, dataAttributePrefix);\n },\n shouldTrackDeadClick: shouldTrackDeadClick,\n });\n subscriptions.push(deadClickSubscription);\n /* istanbul ignore next */\n (_a = config === null || config === void 0 ? void 0 : config.loggerProvider) === null || _a === void 0 ? void 0 : _a.log(\"\".concat(name, \" has been successfully added.\"));\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n var subscriptions_1, subscriptions_1_1, subscription;\n var e_1, _a;\n return __generator(this, function (_b) {\n try {\n for (subscriptions_1 = __values(subscriptions), subscriptions_1_1 = subscriptions_1.next(); !subscriptions_1_1.done; subscriptions_1_1 = subscriptions_1.next()) {\n subscription = subscriptions_1_1.value;\n subscription.unsubscribe();\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (subscriptions_1_1 && !subscriptions_1_1.done && (_a = subscriptions_1.return)) _a.call(subscriptions_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=frustration-plugin.js.map","import { __awaiter, __generator } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { networkObserver, NetworkEventCallback, } from '@amplitude/analytics-core';\nimport * as constants from './constants';\nimport { Observable } from '@amplitude/analytics-core';\nimport { trackNetworkEvents } from './track-network-event';\nexport var ObservablesEnum;\n(function (ObservablesEnum) {\n ObservablesEnum[\"NetworkObservable\"] = \"networkObservable\";\n})(ObservablesEnum || (ObservablesEnum = {}));\nvar subscription;\nexport var networkCapturePlugin = function (options) {\n if (options === void 0) { options = {}; }\n var name = constants.PLUGIN_NAME;\n var type = 'enrichment';\n var logger;\n var addAdditionalEventProperties = function (event, type) {\n var baseEvent = {\n event: event,\n timestamp: Date.now(),\n type: type,\n };\n return baseEvent;\n };\n // Create observables on events on the window\n var createObservables = function () {\n var _a;\n var networkObservable = new Observable(function (observer) {\n var callback = new NetworkEventCallback(function (event) {\n var eventWithProperties = addAdditionalEventProperties(event, 'network');\n observer.next(eventWithProperties);\n });\n networkObserver.subscribe(callback, logger);\n return function () {\n networkObserver.unsubscribe(callback);\n };\n });\n return _a = {},\n _a[ObservablesEnum.NetworkObservable] = networkObservable,\n _a;\n };\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var allObservables;\n return __generator(this, function (_a) {\n /* istanbul ignore if */\n if (typeof document === 'undefined') {\n return [2 /*return*/];\n }\n allObservables = createObservables();\n /* istanbul ignore next */\n logger = config === null || config === void 0 ? void 0 : config.loggerProvider;\n subscription = trackNetworkEvents({\n allObservables: allObservables,\n networkTrackingOptions: options,\n amplitude: amplitude,\n loggerProvider: logger,\n });\n /* istanbul ignore next */\n logger === null || logger === void 0 ? void 0 : logger.log(\"\".concat(name, \" has been successfully added.\"));\n return [2 /*return*/];\n });\n }); };\n /* istanbul ignore next */\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n subscription.unsubscribe();\n return [2 /*return*/];\n });\n }); };\n return {\n name: name,\n type: type,\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=network-capture-plugin.js.map","export var PLUGIN_NAME = '@amplitude/plugin-network-capture-browser';\nexport var AMPLITUDE_NETWORK_REQUEST_EVENT = '[Amplitude] Network Request';\n// TODO: when @experimental is removed from responseHeaders and requestHeaders,\n// remove this constant or set it to false\nexport var IS_HEADER_CAPTURE_EXPERIMENTAL = true;\n//# sourceMappingURL=constants.js.map","import { __awaiter, __generator, __read, __spreadArray, __values } from \"tslib\";\nimport { getGlobalScope, isUrlMatchAllowlist, SAFE_HEADERS, } from '@amplitude/analytics-core';\nimport { AMPLITUDE_NETWORK_REQUEST_EVENT, IS_HEADER_CAPTURE_EXPERIMENTAL } from './constants';\nvar DEFAULT_STATUS_CODE_RANGE = '500-599';\nfunction wildcardMatch(str, pattern) {\n // Escape all regex special characters except for *\n var escapedPattern = pattern.replace(/[-[\\]{}()+?.,\\\\^$|#\\s]/g, '\\\\$&');\n // Replace * with .*\n var regexPattern = '^' + escapedPattern.replace(/\\*/g, '.*') + '$';\n var regex = new RegExp(regexPattern);\n return regex.test(str);\n}\nfunction isStatusCodeInRange(statusCode, range) {\n var e_1, _a;\n var ranges = range.split(',');\n try {\n for (var ranges_1 = __values(ranges), ranges_1_1 = ranges_1.next(); !ranges_1_1.done; ranges_1_1 = ranges_1.next()) {\n var r = ranges_1_1.value;\n var _b = __read(r.split('-').map(Number), 2), start = _b[0], end = _b[1];\n if (statusCode === start && end === undefined) {\n return true;\n }\n if (statusCode >= start && statusCode <= end) {\n return true;\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (ranges_1_1 && !ranges_1_1.done && (_a = ranges_1.return)) _a.call(ranges_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return false;\n}\nfunction isCaptureRuleMatch(rule, hostname, status, url, method) {\n // check if the host is in the allowed hosts\n if (rule.hosts && !rule.hosts.find(function (host) { return wildcardMatch(hostname, host); })) {\n return;\n }\n // check if the URL is in the allowed URL patterns\n if (url && rule.urls && !isUrlMatchAllowlist(url, rule.urls)) {\n return;\n }\n // check if the method is in the allowed methods\n if (method &&\n rule.methods &&\n !rule.methods.find(function (allowedMethod) { return method.toLowerCase() === allowedMethod.toLowerCase() || allowedMethod === '*'; })) {\n return;\n }\n // check if the status code is in the allowed range\n if (status || status === 0) {\n var statusCodeRange = rule.statusCodeRange || DEFAULT_STATUS_CODE_RANGE;\n if (!isStatusCodeInRange(status, statusCodeRange)) {\n return false;\n }\n }\n return true;\n}\nfunction parseUrl(url) {\n var _a;\n if (!url) {\n return;\n }\n try {\n /* istanbul ignore next */\n var currentHref = (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.location.href;\n var urlObj = new URL(url, currentHref);\n var query = urlObj.searchParams.toString();\n var fragment = urlObj.hash.replace('#', '');\n var href = urlObj.href;\n var host = urlObj.host;\n urlObj.hash = '';\n urlObj.search = '';\n var hrefWithoutQueryOrHash = urlObj.href;\n return { query: query, fragment: fragment, href: href, hrefWithoutQueryOrHash: hrefWithoutQueryOrHash, host: host };\n }\n catch (e) {\n /* istanbul ignore next */\n return;\n }\n}\nfunction isAmplitudeNetworkRequestEvent(host, requestWrapper) {\n if (host.includes('amplitude.com')) {\n try {\n var body = requestWrapper.body;\n if (typeof body !== 'string') {\n return false;\n }\n var bodyObj = JSON.parse(body);\n var events = bodyObj.events;\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */\n if (events.find(function (event) { return event.event_type === AMPLITUDE_NETWORK_REQUEST_EVENT; })) {\n return true;\n }\n }\n catch (e) {\n // do nothing\n }\n }\n return false;\n}\n/**\n * Takes a user provided header capture rule and returns a\n * HeaderCaptureRule object that sets proper default values.\n *\n * @param rule - The header capture rule to parse.\n * @returns A HeaderCaptureRule object.\n */\nexport function parseHeaderCaptureRule(rule) {\n if (typeof rule !== 'object' || rule === null) {\n // if rule is truthy or undefined, return SAFE_HEADERS\n if (rule) {\n return __spreadArray([], __read(SAFE_HEADERS), false);\n }\n else if (rule === undefined) {\n /* istanbul ignore next */\n var res = IS_HEADER_CAPTURE_EXPERIMENTAL ? undefined : __spreadArray([], __read(SAFE_HEADERS), false);\n return res;\n }\n return;\n }\n // if the rule is defined but empty, return undefined\n if (rule.length === 0) {\n return;\n }\n return rule;\n}\nfunction isBodyCaptureRuleEmpty(rule) {\n var _a, _b;\n /* istanbul ignore next */\n return !((_a = rule === null || rule === void 0 ? void 0 : rule.allowlist) === null || _a === void 0 ? void 0 : _a.length) && !((_b = rule === null || rule === void 0 ? void 0 : rule.blocklist) === null || _b === void 0 ? void 0 : _b.length);\n}\nexport function shouldTrackNetworkEvent(networkEvent, options) {\n var _a;\n if (options === void 0) { options = {}; }\n var urlObj = parseUrl(networkEvent.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a probably impossible case that would only happen if the URL is malformed\n /* istanbul ignore next */\n return false;\n }\n var host = urlObj.host;\n // false if is amplitude request and not configured to track amplitude requests\n if (options.ignoreAmplitudeRequests !== false &&\n (wildcardMatch(host, '*.amplitude.com') || wildcardMatch(host, 'amplitude.com'))) {\n return false;\n }\n // false if the host is in the ignore list\n if ((_a = options.ignoreHosts) === null || _a === void 0 ? void 0 : _a.find(function (ignoreHost) { return wildcardMatch(host, ignoreHost); })) {\n return false;\n }\n // false if the status code is not 500-599 and there are no captureRules\n if (!options.captureRules &&\n networkEvent.status !== undefined &&\n !isStatusCodeInRange(networkEvent.status, DEFAULT_STATUS_CODE_RANGE)) {\n return false;\n }\n if (options.captureRules) {\n // find the first capture rule, in reverse-order,\n // that is a match (true) or a miss (false)\n var isMatch_1;\n __spreadArray([], __read(options.captureRules), false).reverse().find(function (rule) {\n isMatch_1 = isCaptureRuleMatch(rule, host, networkEvent.status, networkEvent.url, networkEvent.method);\n if (isMatch_1) {\n var responseHeadersRule = parseHeaderCaptureRule(rule.responseHeaders);\n if (networkEvent.responseWrapper && responseHeadersRule) {\n var responseHeaders = networkEvent.responseWrapper.headers(responseHeadersRule);\n if (responseHeaders) {\n networkEvent.responseHeaders = responseHeaders;\n }\n }\n // if requestHeaders rule is specified, enrich the event with the request headers\n var requestHeadersRule = parseHeaderCaptureRule(rule.requestHeaders);\n if (networkEvent.requestWrapper && requestHeadersRule) {\n var requestHeaders = networkEvent.requestWrapper.headers(requestHeadersRule);\n if (requestHeaders) {\n networkEvent.requestHeaders = requestHeaders;\n }\n }\n // if responseBody rule is specified, enrich the event with the response body\n if (networkEvent.responseWrapper && rule.responseBody && !isBodyCaptureRuleEmpty(rule.responseBody)) {\n networkEvent.responseBodyJson = networkEvent.responseWrapper.json(rule.responseBody.allowlist, rule.responseBody.blocklist);\n }\n // if requestBody rule is specified, enrich the event with the request body\n if (networkEvent.requestWrapper && rule.requestBody && !isBodyCaptureRuleEmpty(rule.requestBody)) {\n networkEvent.requestBodyJson = networkEvent.requestWrapper.json(rule.requestBody.allowlist, rule.requestBody.blocklist);\n }\n }\n return isMatch_1 !== undefined;\n });\n // if we found a miss (false) or no match (undefined),\n // then do not track the event\n if (!isMatch_1) {\n return false;\n }\n }\n // skip Amplitude network requests to \"[Amplitude] Network Request\" to avoid infinite loop\n if (networkEvent.requestWrapper && isAmplitudeNetworkRequestEvent(host, networkEvent.requestWrapper)) {\n return false;\n }\n return true;\n}\nexport function logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, requestBody, responseBody;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(request.requestBodyJson || request.responseBodyJson)) return [3 /*break*/, 2];\n return [4 /*yield*/, Promise.all([request.requestBodyJson, request.responseBodyJson])];\n case 1:\n _a = __read.apply(void 0, [_b.sent(), 2]), requestBody = _a[0], responseBody = _a[1];\n if (requestBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Request Body'] = JSON.stringify(requestBody);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('Failed to stringify request body', e);\n }\n }\n if (responseBody) {\n try {\n networkAnalyticsEvent['[Amplitude] Response Body'] = JSON.stringify(responseBody);\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.debug('Failed to stringify response body');\n }\n }\n _b.label = 2;\n case 2:\n /* istanbul ignore next */\n amplitude === null || amplitude === void 0 ? void 0 : amplitude.track(AMPLITUDE_NETWORK_REQUEST_EVENT, networkAnalyticsEvent);\n return [2 /*return*/];\n }\n });\n });\n}\nexport function trackNetworkEvents(_a) {\n var allObservables = _a.allObservables, networkTrackingOptions = _a.networkTrackingOptions, amplitude = _a.amplitude, loggerProvider = _a.loggerProvider;\n var networkObservable = allObservables.networkObservable;\n var filteredNetworkObservable = networkObservable.filter(function (event) {\n // Only track network events that should be tracked\n return shouldTrackNetworkEvent(event.event, networkTrackingOptions);\n });\n return filteredNetworkObservable.subscribe(function (networkEvent) {\n var _a;\n var _b, _c;\n var request = networkEvent.event;\n // convert to NetworkAnalyticsEvent\n var urlObj = parseUrl(request.url);\n /* istanbul ignore if */\n if (!urlObj) {\n // if the URL failed to parse, do not track the event\n // this is a very unlikely case, because URL() shouldn't throw an exception\n // when the URL is a valid URL\n /* istanbul ignore next */\n return;\n }\n var responseBodySize = (_b = request.responseWrapper) === null || _b === void 0 ? void 0 : _b.bodySize;\n /* istanbul ignore next */\n var requestBodySize = (_c = request.requestWrapper) === null || _c === void 0 ? void 0 : _c.bodySize;\n var networkAnalyticsEvent = (_a = {},\n _a['[Amplitude] URL'] = urlObj.hrefWithoutQueryOrHash,\n _a['[Amplitude] URL Query'] = urlObj.query,\n _a['[Amplitude] URL Fragment'] = urlObj.fragment,\n _a['[Amplitude] Request Method'] = request.method,\n _a['[Amplitude] Status Code'] = request.status,\n _a['[Amplitude] Start Time'] = request.startTime,\n _a['[Amplitude] Completion Time'] = request.endTime,\n _a['[Amplitude] Duration'] = request.duration,\n _a['[Amplitude] Request Body Size'] = requestBodySize,\n _a['[Amplitude] Response Body Size'] = responseBodySize,\n _a['[Amplitude] Request Type'] = request.type,\n _a['[Amplitude] Request Headers'] = request.requestHeaders,\n _a['[Amplitude] Response Headers'] = request.responseHeaders,\n _a);\n // fire-and-forget promise that tracks the event\n void logNetworkAnalyticsEvent(networkAnalyticsEvent, request, amplitude, loggerProvider);\n });\n}\n//# sourceMappingURL=track-network-event.js.map","let e=-1;const t=t=>{addEventListener(\"pageshow\",(n=>{n.persisted&&(e=n.timeStamp,t(n))}),!0)},n=(e,t,n,i)=>{let s,o;return r=>{t.value>=0&&(r||i)&&(o=t.value-(s??0),(o||void 0===s)&&(s=t.value,t.delta=o,t.rating=((e,t)=>e>t[1]?\"poor\":e>t[0]?\"needs-improvement\":\"good\")(t.value,n),e(t)))}},i=e=>{requestAnimationFrame((()=>requestAnimationFrame((()=>e()))))},s=()=>{const e=performance.getEntriesByType(\"navigation\")[0];if(e&&e.responseStart>0&&e.responseStart<performance.now())return e},o=()=>{const e=s();return e?.activationStart??0},r=(t,n=-1)=>{const i=s();let r=\"navigate\";e>=0?r=\"back-forward-cache\":i&&(document.prerendering||o()>0?r=\"prerender\":document.wasDiscarded?r=\"restore\":i.type&&(r=i.type.replace(/_/g,\"-\")));return{name:t,value:n,rating:\"good\",delta:0,entries:[],id:`v5-${Date.now()}-${Math.floor(8999999999999*Math.random())+1e12}`,navigationType:r}},c=new WeakMap;function a(e,t){return c.get(e)||c.set(e,new t),c.get(e)}class d{t;i=0;o=[];h(e){if(e.hadRecentInput)return;const t=this.o[0],n=this.o.at(-1);this.i&&t&&n&&e.startTime-n.startTime<1e3&&e.startTime-t.startTime<5e3?(this.i+=e.value,this.o.push(e)):(this.i=e.value,this.o=[e]),this.t?.(e)}}const h=(e,t,n={})=>{try{if(PerformanceObserver.supportedEntryTypes.includes(e)){const i=new PerformanceObserver((e=>{Promise.resolve().then((()=>{t(e.getEntries())}))}));return i.observe({type:e,buffered:!0,...n}),i}}catch{}},f=e=>{let t=!1;return()=>{t||(e(),t=!0)}};let u=-1;const l=new Set,m=()=>\"hidden\"!==document.visibilityState||document.prerendering?1/0:0,p=e=>{if(\"hidden\"===document.visibilityState){if(\"visibilitychange\"===e.type)for(const e of l)e();isFinite(u)||(u=\"visibilitychange\"===e.type?e.timeStamp:0,removeEventListener(\"prerenderingchange\",p,!0))}},v=()=>{if(u<0){const e=o(),n=document.prerendering?void 0:globalThis.performance.getEntriesByType(\"visibility-state\").filter((t=>\"hidden\"===t.name&&t.startTime>e))[0]?.startTime;u=n??m(),addEventListener(\"visibilitychange\",p,!0),addEventListener(\"prerenderingchange\",p,!0),t((()=>{setTimeout((()=>{u=m()}))}))}return{get firstHiddenTime(){return u},onHidden(e){l.add(e)}}},g=e=>{document.prerendering?addEventListener(\"prerenderingchange\",(()=>e()),!0):e()},y=[1800,3e3],E=(e,s={})=>{g((()=>{const c=v();let a,d=r(\"FCP\");const f=h(\"paint\",(e=>{for(const t of e)\"first-contentful-paint\"===t.name&&(f.disconnect(),t.startTime<c.firstHiddenTime&&(d.value=Math.max(t.startTime-o(),0),d.entries.push(t),a(!0)))}));f&&(a=n(e,d,y,s.reportAllChanges),t((t=>{d=r(\"FCP\"),a=n(e,d,y,s.reportAllChanges),i((()=>{d.value=performance.now()-t.timeStamp,a(!0)}))})))}))},b=[.1,.25],L=(e,s={})=>{const o=v();E(f((()=>{let c,f=r(\"CLS\",0);const u=a(s,d),l=e=>{for(const t of e)u.h(t);u.i>f.value&&(f.value=u.i,f.entries=u.o,c())},m=h(\"layout-shift\",l);m&&(c=n(e,f,b,s.reportAllChanges),o.onHidden((()=>{l(m.takeRecords()),c(!0)})),t((()=>{u.i=0,f=r(\"CLS\",0),c=n(e,f,b,s.reportAllChanges),i((()=>c()))})),setTimeout(c))})))};let P=0,T=1/0,_=0;const M=e=>{for(const t of e)t.interactionId&&(T=Math.min(T,t.interactionId),_=Math.max(_,t.interactionId),P=_?(_-T)/7+1:0)};let w;const C=()=>w?P:performance.interactionCount??0,I=()=>{\"interactionCount\"in performance||w||(w=h(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))};let F=0;class k{u=[];l=new Map;m;p;v(){F=C(),this.u.length=0,this.l.clear()}L(){const e=Math.min(this.u.length-1,Math.floor((C()-F)/50));return this.u[e]}h(e){if(this.m?.(e),!e.interactionId&&\"first-input\"!==e.entryType)return;const t=this.u.at(-1);let n=this.l.get(e.interactionId);if(n||this.u.length<10||e.duration>t.P){if(n?e.duration>n.P?(n.entries=[e],n.P=e.duration):e.duration===n.P&&e.startTime===n.entries[0].startTime&&n.entries.push(e):(n={id:e.interactionId,entries:[e],P:e.duration},this.l.set(n.id,n),this.u.push(n)),this.u.sort(((e,t)=>t.P-e.P)),this.u.length>10){const e=this.u.splice(10);for(const t of e)this.l.delete(t.id)}this.p?.(n)}}}const A=e=>{const t=globalThis.requestIdleCallback||setTimeout;\"hidden\"===document.visibilityState?e():(e=f(e),addEventListener(\"visibilitychange\",e,{once:!0,capture:!0}),t((()=>{e(),removeEventListener(\"visibilitychange\",e,{capture:!0})})))},B=[200,500],S=(e,i={})=>{if(!globalThis.PerformanceEventTiming||!(\"interactionId\"in PerformanceEventTiming.prototype))return;const s=v();g((()=>{I();let o,c=r(\"INP\");const d=a(i,k),f=e=>{A((()=>{for(const t of e)d.h(t);const t=d.L();t&&t.P!==c.value&&(c.value=t.P,c.entries=t.entries,o())}))},u=h(\"event\",f,{durationThreshold:i.durationThreshold??40});o=n(e,c,B,i.reportAllChanges),u&&(u.observe({type:\"first-input\",buffered:!0}),s.onHidden((()=>{f(u.takeRecords()),o(!0)})),t((()=>{d.v(),c=r(\"INP\"),o=n(e,c,B,i.reportAllChanges)})))}))};class N{m;h(e){this.m?.(e)}}const q=[2500,4e3],x=(e,s={})=>{g((()=>{const c=v();let d,u=r(\"LCP\");const l=a(s,N),m=e=>{s.reportAllChanges||(e=e.slice(-1));for(const t of e)l.h(t),t.startTime<c.firstHiddenTime&&(u.value=Math.max(t.startTime-o(),0),u.entries=[t],d())},p=h(\"largest-contentful-paint\",m);if(p){d=n(e,u,q,s.reportAllChanges);const o=f((()=>{m(p.takeRecords()),p.disconnect(),d(!0)})),c=e=>{e.isTrusted&&(A(o),removeEventListener(e.type,c,{capture:!0}))};for(const e of[\"keydown\",\"click\",\"visibilitychange\"])addEventListener(e,c,{capture:!0});t((t=>{u=r(\"LCP\"),d=n(e,u,q,s.reportAllChanges),i((()=>{u.value=performance.now()-t.timeStamp,d(!0)}))}))}}))},H=[800,1800],O=e=>{document.prerendering?g((()=>O(e))):\"complete\"!==document.readyState?addEventListener(\"load\",(()=>O(e)),!0):setTimeout(e)},$=(e,i={})=>{let c=r(\"TTFB\"),a=n(e,c,H,i.reportAllChanges);O((()=>{const d=s();d&&(c.value=Math.max(d.responseStart-o(),0),c.entries=[d],a(!0),t((()=>{c=r(\"TTFB\",0),a=n(e,c,H,i.reportAllChanges),a(!0)})))}))};export{b as CLSThresholds,y as FCPThresholds,B as INPThresholds,q as LCPThresholds,H as TTFBThresholds,L as onCLS,E as onFCP,S as onINP,x as onLCP,$ as onTTFB};\n","import { __awaiter, __generator } from \"tslib\";\n/* eslint-disable no-restricted-globals */\nimport { getGlobalScope, getDecodeURI, } from '@amplitude/analytics-core';\nimport { PLUGIN_NAME, WEB_VITALS_EVENT_NAME } from './constants';\nimport { onLCP, onINP, onCLS, onFCP, onTTFB } from 'web-vitals';\nfunction getMetricStartTime(metric) {\n var _a;\n /* istanbul ignore next */\n var startTime = ((_a = metric.entries[0]) === null || _a === void 0 ? void 0 : _a.startTime) || 0;\n return performance.timeOrigin + startTime;\n}\nfunction processMetric(metric) {\n return {\n value: metric.value,\n rating: metric.rating,\n delta: metric.delta,\n navigationType: metric.navigationType,\n id: metric.id,\n timestamp: Math.floor(getMetricStartTime(metric)),\n navigationStart: Math.floor(performance.timeOrigin),\n };\n}\nexport var webVitalsPlugin = function () {\n var visibilityListener = null;\n var globalScope = getGlobalScope();\n var doc = globalScope === null || globalScope === void 0 ? void 0 : globalScope.document;\n var location = globalScope === null || globalScope === void 0 ? void 0 : globalScope.location;\n var setup = function (config, amplitude) { return __awaiter(void 0, void 0, void 0, function () {\n var locationHref, webVitalsPayload;\n return __generator(this, function (_a) {\n if (doc === undefined) {\n return [2 /*return*/];\n }\n locationHref = getDecodeURI(/* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.href) || '', config.loggerProvider);\n webVitalsPayload = {\n '[Amplitude] Page Domain': /* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.hostname) || '',\n '[Amplitude] Page Location': locationHref,\n '[Amplitude] Page Path': getDecodeURI(/* istanbul ignore next */ (location === null || location === void 0 ? void 0 : location.pathname) || '', config.loggerProvider),\n '[Amplitude] Page Title': /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n '[Amplitude] Page URL': getDecodeURI(locationHref.split('?')[0], config.loggerProvider),\n };\n onLCP(function (metric) {\n webVitalsPayload['[Amplitude] LCP'] = processMetric(metric);\n });\n onFCP(function (metric) {\n webVitalsPayload['[Amplitude] FCP'] = processMetric(metric);\n });\n onINP(function (metric) {\n webVitalsPayload['[Amplitude] INP'] = processMetric(metric);\n });\n onCLS(function (metric) {\n webVitalsPayload['[Amplitude] CLS'] = processMetric(metric);\n });\n onTTFB(function (metric) {\n webVitalsPayload['[Amplitude] TTFB'] = processMetric(metric);\n });\n visibilityListener = function () {\n if (doc.visibilityState === 'hidden' && visibilityListener) {\n amplitude.track(WEB_VITALS_EVENT_NAME, webVitalsPayload);\n doc.removeEventListener('visibilitychange', visibilityListener);\n visibilityListener = null;\n }\n };\n doc.addEventListener('visibilitychange', visibilityListener);\n return [2 /*return*/];\n });\n }); };\n var execute = function (event) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, event];\n });\n }); };\n var teardown = function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (visibilityListener) {\n /* istanbul ignore next */\n doc === null || doc === void 0 ? void 0 : doc.removeEventListener('visibilitychange', visibilityListener);\n }\n return [2 /*return*/];\n });\n }); };\n return {\n name: PLUGIN_NAME,\n type: 'enrichment',\n setup: setup,\n execute: execute,\n teardown: teardown,\n };\n};\n//# sourceMappingURL=web-vitals-plugin.js.map","import { __assign, __awaiter, __generator, __read } from \"tslib\";\nimport { BrowserStorage, getDecodeURI, getGlobalScope, getPageTitle, replaceSensitiveString, SpecialEventType, } from '@amplitude/analytics-core';\nexport var CURRENT_PAGE_STORAGE_KEY = 'AMP_CURRENT_PAGE';\nexport var PREVIOUS_PAGE_STORAGE_KEY = 'AMP_PREVIOUS_PAGE';\nexport var URL_INFO_STORAGE_KEY = 'AMP_URL_INFO';\nvar PreviousPageType;\n(function (PreviousPageType) {\n PreviousPageType[\"Direct\"] = \"direct\";\n PreviousPageType[\"Internal\"] = \"internal\";\n PreviousPageType[\"External\"] = \"external\";\n})(PreviousPageType || (PreviousPageType = {}));\nexport var EXCLUDED_DEFAULT_EVENT_TYPES = new Set([\n SpecialEventType.IDENTIFY,\n SpecialEventType.GROUP_IDENTIFY,\n SpecialEventType.REVENUE,\n]);\nexport var isPageUrlEnrichmentEnabled = function (option) {\n if (typeof option === 'boolean') {\n return option;\n }\n if (typeof option === 'object' && option !== null && 'pageUrlEnrichment' in option) {\n return Boolean(option.pageUrlEnrichment);\n }\n return false;\n};\nexport var pageUrlEnrichmentPlugin = function (_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.internalDomains, internalDomains = _c === void 0 ? [] : _c;\n var globalScope = getGlobalScope();\n var sessionStorage = undefined;\n var isStorageEnabled = false;\n var loggerProvider = undefined;\n var isProxied = false;\n var isTracking = false;\n var getHostname = function (url) {\n var hostname;\n try {\n var decodedUrl = getDecodeURI(url, loggerProvider);\n hostname = new URL(decodedUrl).hostname;\n }\n catch (e) {\n /* istanbul ignore next */\n loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.error('Could not parse URL: ', e);\n }\n return hostname;\n };\n var getPrevPageType = function (previousPage) {\n var currentDomain = (typeof location !== 'undefined' && location.hostname) || '';\n var previousPageDomain = previousPage ? getHostname(previousPage) : undefined;\n if (!previousPageDomain) {\n return PreviousPageType.Direct;\n }\n var isCurrentInternal = internalDomains.some(function (domain) { return currentDomain.indexOf(domain) !== -1; });\n var isPrevInternal = internalDomains.some(function (domain) { return previousPageDomain.indexOf(domain) !== -1; });\n if (currentDomain === previousPageDomain || (isPrevInternal && isCurrentInternal)) {\n return PreviousPageType.Internal;\n }\n return PreviousPageType.External;\n };\n var saveURLInfo = function () { return __awaiter(void 0, void 0, void 0, function () {\n var URLInfo, currentURL, storedCurrentURL, previousURL;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 3];\n return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 1:\n URLInfo = _b.sent();\n currentURL = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n storedCurrentURL = (URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[CURRENT_PAGE_STORAGE_KEY]) || '';\n previousURL = void 0;\n if (currentURL === storedCurrentURL) {\n previousURL = (URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[PREVIOUS_PAGE_STORAGE_KEY]) || '';\n }\n else if (storedCurrentURL) {\n previousURL = storedCurrentURL;\n }\n else {\n previousURL = document.referrer || '';\n }\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, (_a = {},\n _a[CURRENT_PAGE_STORAGE_KEY] = currentURL,\n _a[PREVIOUS_PAGE_STORAGE_KEY] = previousURL,\n _a))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n var saveUrlInfoWrapper = function () {\n void saveURLInfo();\n };\n var plugin = {\n name: '@amplitude/plugin-page-url-enrichment-browser',\n type: 'enrichment',\n setup: function (config, _) { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-url-enrichment-browser');\n isTracking = true;\n if (!globalScope) return [3 /*break*/, 2];\n sessionStorage = new BrowserStorage(globalScope.sessionStorage);\n return [4 /*yield*/, sessionStorage.isEnabled()];\n case 1:\n isStorageEnabled = _a.sent();\n globalScope.addEventListener('popstate', saveUrlInfoWrapper);\n if (!isProxied) {\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState and replaceState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.replaceState = new Proxy(globalScope.history.replaceState, {\n apply: function (target, thisArg, _a) {\n var _b = __read(_a, 3), state = _b[0], unused = _b[1], url = _b[2];\n target.apply(thisArg, [state, unused, url]);\n if (isTracking) {\n saveUrlInfoWrapper();\n }\n },\n });\n isProxied = true;\n }\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n execute: function (event) { return __awaiter(void 0, void 0, void 0, function () {\n var locationHREF, URLInfo, updatedURLInfo, previousPage;\n var _a;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || '');\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 5];\n return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 1:\n URLInfo = _b.sent();\n if (!!(URLInfo === null || URLInfo === void 0 ? void 0 : URLInfo[CURRENT_PAGE_STORAGE_KEY])) return [3 /*break*/, 3];\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, (_a = {},\n _a[CURRENT_PAGE_STORAGE_KEY] = locationHREF,\n _a[PREVIOUS_PAGE_STORAGE_KEY] = document.referrer || '',\n _a))];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [4 /*yield*/, sessionStorage.get(URL_INFO_STORAGE_KEY)];\n case 4:\n updatedURLInfo = _b.sent();\n previousPage = '';\n if (updatedURLInfo) {\n previousPage = updatedURLInfo[PREVIOUS_PAGE_STORAGE_KEY] || '';\n }\n // no need to proceed to add additional properties if the event is one of the default event types to be excluded\n if (EXCLUDED_DEFAULT_EVENT_TYPES.has(event.event_type)) {\n return [2 /*return*/, event];\n }\n event.event_properties = __assign(__assign({}, (event.event_properties || {})), { '[Amplitude] Page Domain': addIfNotExist(event, '[Amplitude] Page Domain', (typeof location !== 'undefined' && location.hostname) || ''), '[Amplitude] Page Location': addIfNotExist(event, '[Amplitude] Page Location', locationHREF), '[Amplitude] Page Path': addIfNotExist(event, '[Amplitude] Page Path', (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || ''), '[Amplitude] Page Title': addIfNotExist(event, '[Amplitude] Page Title', getPageTitle(replaceSensitiveString)), '[Amplitude] Page URL': addIfNotExist(event, '[Amplitude] Page URL', locationHREF.split('?')[0]), '[Amplitude] Previous Page Location': previousPage, '[Amplitude] Previous Page Type': getPrevPageType(previousPage) });\n _b.label = 5;\n case 5: return [2 /*return*/, event];\n }\n });\n }); },\n teardown: function () { return __awaiter(void 0, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (globalScope) {\n globalScope.removeEventListener('popstate', saveUrlInfoWrapper);\n isTracking = false;\n }\n if (!(sessionStorage && isStorageEnabled)) return [3 /*break*/, 2];\n return [4 /*yield*/, sessionStorage.set(URL_INFO_STORAGE_KEY, {})];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); },\n };\n return plugin;\n};\nfunction addIfNotExist(event, key, value) {\n if (!event.event_properties) {\n event.event_properties = {};\n }\n if (event.event_properties[key] === undefined) {\n return value;\n }\n return event.event_properties[key];\n}\n//# sourceMappingURL=page-url-enrichment.js.map","export var PLUGIN_NAME = 'web-vitals-browser';\nexport var WEB_VITALS_EVENT_NAME = '[Amplitude] Web Vitals';\n//# sourceMappingURL=constants.js.map","import { createIdentifyEvent, Identify, ILogger, Campaign, BASE_CAMPAIGN } from '@amplitude/analytics-core';\n\nexport interface Options {\n excludeReferrers?: (string | RegExp)[];\n initialEmptyValue?: string;\n resetSessionOnNewCampaign?: boolean;\n}\n\nconst domainWithoutSubdomain = (domain: string) => {\n const parts = domain.split('.');\n\n if (parts.length <= 2) {\n return domain;\n }\n\n return parts.slice(parts.length - 2, parts.length).join('.');\n};\n\n//Direct traffic mean no external referral, no UTMs, no click-ids, and no other customer identified marketing campaign url params.\nconst isDirectTraffic = (current: Campaign) => {\n return Object.values(current).every((value) => !value);\n};\n\nexport const isNewCampaign = (\n current: Campaign,\n previous: Campaign | undefined,\n options: Options,\n logger: ILogger,\n isNewSession = true,\n) => {\n const { referrer, referring_domain, ...currentCampaign } = current;\n const { referrer: _previous_referrer, referring_domain: prevReferringDomain, ...previousCampaign } = previous || {};\n\n if (isExcludedReferrer(options.excludeReferrers, current.referring_domain)) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n logger.debug(`This is not a new campaign because ${current.referring_domain} is in the exclude referrer list.`);\n return false;\n }\n\n //In the same session, direct traffic should not override or unset any persisting query params\n if (!isNewSession && isDirectTraffic(current) && previous) {\n logger.debug('This is not a new campaign because this is a direct traffic in the same session.');\n return false;\n }\n\n const hasNewCampaign = JSON.stringify(currentCampaign) !== JSON.stringify(previousCampaign);\n const hasNewDomain =\n domainWithoutSubdomain(referring_domain || '') !== domainWithoutSubdomain(prevReferringDomain || '');\n\n const result = !previous || hasNewCampaign || hasNewDomain;\n\n if (!result) {\n logger.debug(\"This is not a new campaign because it's the same as the previous one.\");\n } else {\n logger.debug(`This is a new campaign. An $identify event will be sent.`);\n }\n\n return result;\n};\n\nexport const isExcludedReferrer = (excludeReferrers: (string | RegExp)[] = [], referringDomain = '') => {\n return excludeReferrers.some((value) =>\n value instanceof RegExp ? value.test(referringDomain) : value === referringDomain,\n );\n};\n\nexport const createCampaignEvent = (campaign: Campaign, options: Options) => {\n const campaignParameters: Campaign = {\n // This object definition allows undefined keys to be iterated on\n // in .reduce() to build indentify object\n ...BASE_CAMPAIGN,\n ...campaign,\n };\n const identifyEvent = Object.entries(campaignParameters).reduce((identify, [key, value]) => {\n identify.setOnce(`initial_${key}`, value ?? options.initialEmptyValue ?? 'EMPTY');\n if (value) {\n return identify.set(key, value);\n }\n return identify.unset(key);\n }, new Identify());\n\n return createIdentifyEvent(identifyEvent);\n};\n\nexport const getDefaultExcludedReferrers = (cookieDomain: string | undefined) => {\n let domain = cookieDomain;\n if (domain) {\n if (domain.startsWith('.')) {\n domain = domain.substring(1);\n }\n return [new RegExp(`${domain.replace('.', '\\\\.')}$`)];\n }\n return [];\n};\n","import {\n BrowserConfig,\n ILogger,\n Storage,\n getStorageKey,\n isNewSession,\n Campaign,\n BASE_CAMPAIGN,\n CampaignParser,\n} from '@amplitude/analytics-core';\nimport { Options, getDefaultExcludedReferrers, createCampaignEvent, isNewCampaign } from './helpers';\n\nexport class WebAttribution {\n options: Options;\n storage: Storage<Campaign>;\n storageKey: string;\n webExpStorageKey: string;\n previousCampaign?: Campaign;\n currentCampaign: Campaign;\n shouldTrackNewCampaign = false;\n sessionTimeout: number;\n lastEventTime?: number;\n logger: ILogger;\n\n constructor(options: Options, config: BrowserConfig) {\n this.options = {\n initialEmptyValue: 'EMPTY',\n resetSessionOnNewCampaign: false,\n excludeReferrers: getDefaultExcludedReferrers(config.cookieOptions?.domain),\n ...options,\n };\n this.storage = config.cookieStorage as unknown as Storage<Campaign>;\n this.storageKey = getStorageKey(config.apiKey, 'MKTG');\n this.webExpStorageKey = getStorageKey(config.apiKey, 'MKTG_ORIGINAL');\n this.currentCampaign = BASE_CAMPAIGN;\n this.sessionTimeout = config.sessionTimeout;\n this.lastEventTime = config.lastEventTime;\n this.logger = config.loggerProvider;\n config.loggerProvider.log('Installing web attribution tracking.');\n }\n\n async init() {\n [this.currentCampaign, this.previousCampaign] = await this.fetchCampaign();\n const isEventInNewSession = !this.lastEventTime ? true : isNewSession(this.sessionTimeout, this.lastEventTime);\n\n if (isNewCampaign(this.currentCampaign, this.previousCampaign, this.options, this.logger, isEventInNewSession)) {\n this.shouldTrackNewCampaign = true;\n await this.storage.set(this.storageKey, this.currentCampaign);\n }\n }\n\n async fetchCampaign() {\n const originalCampaign = await this.storage.get(this.webExpStorageKey);\n if (originalCampaign) {\n await this.storage.remove(this.webExpStorageKey);\n }\n return await Promise.all([originalCampaign || new CampaignParser().parse(), this.storage.get(this.storageKey)]);\n }\n\n /**\n * This can be called when enable web attribution and either\n * 1. set a new session\n * 2. has new campaign and enable resetSessionOnNewCampaign\n */\n generateCampaignEvent(event_id?: number) {\n // Mark this campaign has been tracked\n this.shouldTrackNewCampaign = false;\n const campaignEvent = createCampaignEvent(this.currentCampaign, this.options);\n if (event_id) {\n campaignEvent.event_id = event_id;\n }\n return campaignEvent;\n }\n\n shouldSetSessionIdOnNewCampaign() {\n return this.shouldTrackNewCampaign && !!this.options.resetSessionOnNewCampaign;\n }\n}\n","import {\n AmplitudeCore,\n Destination,\n Identify,\n returnWrapper,\n Revenue,\n UUID,\n getAnalyticsConnector,\n setConnectorDeviceId,\n setConnectorUserId,\n isNewSession,\n IdentityEventSender,\n getQueryParams,\n Event,\n EventOptions,\n IIdentify,\n IRevenue,\n TransportTypeOrOptions,\n OfflineDisabled,\n Result,\n BrowserOptions,\n BrowserConfig,\n BrowserClient,\n SpecialEventType,\n AnalyticsClient,\n IRemoteConfigClient,\n RemoteConfigClient,\n RemoteConfig,\n Source,\n DiagnosticsClient,\n createIdentifyEvent,\n} from '@amplitude/analytics-core';\nimport {\n getAttributionTrackingConfig,\n getPageViewTrackingConfig,\n getElementInteractionsConfig,\n getNetworkTrackingConfig,\n isAttributionTrackingEnabled,\n isSessionTrackingEnabled,\n isFileDownloadTrackingEnabled,\n isFormInteractionTrackingEnabled,\n isElementInteractionsEnabled,\n isPageViewTrackingEnabled,\n isNetworkTrackingEnabled,\n isWebVitalsEnabled,\n isFrustrationInteractionsEnabled,\n getFrustrationInteractionsConfig,\n isPageUrlEnrichmentEnabled,\n} from './default-tracking';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { pageViewTrackingPlugin } from '@amplitude/plugin-page-view-tracking-browser';\nimport { formInteractionTracking } from './plugins/form-interaction-tracking';\nimport { fileDownloadTracking } from './plugins/file-download-tracking';\nimport { DEFAULT_SESSION_END_EVENT, DEFAULT_SESSION_START_EVENT } from './constants';\nimport { detNotify } from './det-notification';\nimport { networkConnectivityCheckerPlugin } from './plugins/network-connectivity-checker';\nimport { updateBrowserConfigWithRemoteConfig } from './config/joined-config';\nimport { autocapturePlugin, frustrationPlugin } from '@amplitude/plugin-autocapture-browser';\nimport { plugin as networkCapturePlugin } from '@amplitude/plugin-network-capture-browser';\nimport { webVitalsPlugin } from '@amplitude/plugin-web-vitals-browser';\nimport { WebAttribution } from './attribution/web-attribution';\nimport { LIBPREFIX } from './lib-prefix';\nimport { VERSION } from './version';\nimport { pageUrlEnrichmentPlugin } from '@amplitude/plugin-page-url-enrichment-browser';\n\n/**\n * Exported for `@amplitude/unified` or integration with blade plugins.\n * If you only use `@amplitude/analytics-browser`, use `amplitude.init()` or `amplitude.createInstance()` instead.\n */\nexport class AmplitudeBrowser extends AmplitudeCore implements BrowserClient, AnalyticsClient {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n config: BrowserConfig;\n previousSessionDeviceId: string | undefined;\n previousSessionUserId: string | undefined;\n webAttribution: WebAttribution | undefined;\n userProperties: { [key: string]: any } | undefined;\n\n // Backdoor to set diagnostics sample rate\n // by calling amplitude._setDiagnosticsSampleRate(1); before amplitude.init()\n _diagnosticsSampleRate = 0;\n\n init(apiKey = '', userIdOrOptions?: string | BrowserOptions, maybeOptions?: BrowserOptions) {\n let userId: string | undefined;\n let options: BrowserOptions | undefined;\n if (arguments.length > 2) {\n userId = userIdOrOptions as string | undefined;\n options = maybeOptions;\n } else {\n if (typeof userIdOrOptions === 'string') {\n userId = userIdOrOptions;\n options = undefined;\n } else {\n userId = userIdOrOptions?.userId;\n options = userIdOrOptions;\n }\n }\n return returnWrapper(this._init({ ...options, userId, apiKey }));\n }\n protected async _init(options: BrowserOptions & { apiKey: string }) {\n // Step 1: Block concurrent initialization\n if (this.initializing) {\n return;\n }\n this.initializing = true;\n\n // Step 2: Create browser config\n // Get default browser config based on browser options\n const browserOptions = await useBrowserConfig(options.apiKey, options, this);\n\n let remoteConfigClient: IRemoteConfigClient | undefined;\n // Create remote config client and subscribe to analytics configs\n /* istanbul ignore next */\n const fetchRemoteConfig = browserOptions.remoteConfig && browserOptions.remoteConfig.fetchRemoteConfig;\n if (fetchRemoteConfig) {\n remoteConfigClient = new RemoteConfigClient(\n browserOptions.apiKey,\n browserOptions.loggerProvider,\n browserOptions.serverZone,\n /* istanbul ignore next */ browserOptions.remoteConfig?.serverUrl, // Disable coverage for this line as remoteConfig will always be set by BrowserConfig constructor\n );\n\n // Wait for initial remote config before proceeding.\n // Delivery mode is all, meaning it calls the callback with whoever (cache or remote) returns first.\n await new Promise<void>((resolve) => {\n // Disable coverage for this line because remote config client will always be defined in this case.\n // istanbul ignore next\n remoteConfigClient?.subscribe(\n 'configs.analyticsSDK.browserSDK',\n 'all',\n (remoteConfig: RemoteConfig | null, source: Source, lastFetch: Date) => {\n browserOptions.loggerProvider.debug(\n 'Remote configuration received:',\n JSON.stringify(\n {\n remoteConfig,\n source,\n lastFetch,\n },\n null,\n 2,\n ),\n );\n if (remoteConfig) {\n updateBrowserConfigWithRemoteConfig(remoteConfig, browserOptions);\n }\n // Resolve the promise on first callback (initial config)\n resolve();\n },\n );\n });\n\n await new Promise<void>((resolve) => {\n // Disable coverage for this line because remote config client will always be defined in this case.\n // istanbul ignore next\n remoteConfigClient?.subscribe(\n 'configs.diagnostics.browserSDK',\n 'all',\n (remoteConfig: RemoteConfig | null, source: Source, lastFetch: Date) => {\n browserOptions.loggerProvider.debug(\n 'Diagnostics remote configuration received:',\n JSON.stringify(\n {\n remoteConfig,\n source,\n lastFetch,\n },\n null,\n 2,\n ),\n );\n if (remoteConfig) {\n // Validate and set sampleRate (must be a valid number)\n const sampleRate = remoteConfig.sampleRate as number;\n if (typeof sampleRate === 'number' && !isNaN(sampleRate)) {\n browserOptions.diagnosticsSampleRate = sampleRate;\n }\n\n // Validate and set enabled (must be a boolean)\n const enabled = remoteConfig.enabled as boolean;\n if (typeof enabled === 'boolean') {\n browserOptions.enableDiagnostics = enabled;\n }\n }\n resolve();\n },\n );\n });\n }\n\n // Initialize diagnostics client and set library tag\n const diagnosticsClient = new DiagnosticsClient(\n browserOptions.apiKey,\n browserOptions.loggerProvider,\n browserOptions.serverZone,\n {\n enabled: browserOptions.enableDiagnostics,\n sampleRate: browserOptions.diagnosticsSampleRate,\n },\n );\n diagnosticsClient.setTag('library', `${LIBPREFIX}/${VERSION}`);\n diagnosticsClient.setTag('user_agent', navigator.userAgent);\n\n await super._init(browserOptions);\n this.logBrowserOptions(browserOptions);\n\n this.config.diagnosticsClient = diagnosticsClient;\n this.config.remoteConfigClient = remoteConfigClient;\n\n // Add web attribution plugin\n if (isAttributionTrackingEnabled(this.config.defaultTracking)) {\n const attributionTrackingOptions = getAttributionTrackingConfig(this.config);\n this.webAttribution = new WebAttribution(attributionTrackingOptions, this.config);\n // Fetch the current campaign, check if need to track web attribution later\n await this.webAttribution.init();\n }\n\n // Step 3: Set session ID\n // Priority 1: `options.sessionId`\n // Priority 2: sessionId from url if it's Number and ampTimestamp is valid\n // Priority 3: last known sessionId from user identity storage\n // Default: `Date.now()`\n // Session ID is handled differently than device ID and user ID due to session events\n const queryParams = getQueryParams();\n\n // Check if ampTimestamp is present and valid\n const ampTimestamp = queryParams.ampTimestamp ? Number(queryParams.ampTimestamp) : undefined;\n const isWithinTimeLimit = ampTimestamp ? Date.now() < ampTimestamp : true;\n\n // check if we need to set the sessionId\n const querySessionId =\n isWithinTimeLimit && !Number.isNaN(Number(queryParams.ampSessionId))\n ? Number(queryParams.ampSessionId)\n : undefined;\n this.setSessionId(options.sessionId ?? querySessionId ?? this.config.sessionId ?? Date.now());\n\n // Set up the analytics connector to integrate with the experiment SDK.\n // Send events from the experiment SDK and forward identifies to the\n // identity store.\n const connector = getAnalyticsConnector(options.instanceName);\n connector.identityStore.setIdentity({\n userId: this.config.userId,\n deviceId: this.config.deviceId,\n });\n\n // Step 4: Install plugins\n // Do not track any events before this\n if (this.config.offline !== OfflineDisabled) {\n await this.add(networkConnectivityCheckerPlugin()).promise;\n }\n await this.add(new Destination({ diagnosticsClient })).promise;\n await this.add(new Context()).promise;\n await this.add(new IdentityEventSender()).promise;\n\n // Notify if DET is enabled\n detNotify(this.config);\n\n if (isFileDownloadTrackingEnabled(this.config.defaultTracking)) {\n this.config.loggerProvider.debug('Adding file download tracking plugin');\n await this.add(fileDownloadTracking()).promise;\n }\n\n if (isFormInteractionTrackingEnabled(this.config.defaultTracking)) {\n this.config.loggerProvider.debug('Adding form interaction plugin');\n await this.add(formInteractionTracking()).promise;\n }\n\n // Add page view plugin\n if (isPageViewTrackingEnabled(this.config.defaultTracking)) {\n this.config.loggerProvider.debug('Adding page view tracking plugin');\n await this.add(pageViewTrackingPlugin(getPageViewTrackingConfig(this.config))).promise;\n }\n\n if (isElementInteractionsEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding user interactions plugin (autocapture plugin)');\n await this.add(autocapturePlugin(getElementInteractionsConfig(this.config), { diagnosticsClient })).promise;\n }\n\n if (isFrustrationInteractionsEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding frustration interactions plugin');\n await this.add(frustrationPlugin(getFrustrationInteractionsConfig(this.config))).promise;\n }\n\n if (isNetworkTrackingEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding network tracking plugin');\n await this.add(networkCapturePlugin(getNetworkTrackingConfig(this.config))).promise;\n }\n\n if (isWebVitalsEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding web vitals plugin');\n await this.add(webVitalsPlugin()).promise;\n }\n\n if (isPageUrlEnrichmentEnabled(this.config.autocapture)) {\n this.config.loggerProvider.debug('Adding referrer page url plugin');\n await this.add(pageUrlEnrichmentPlugin()).promise;\n }\n\n this.initializing = false;\n\n // Step 6: Run queued dispatch functions\n await this.runQueuedFunctions('dispatchQ');\n\n // Step 7: Add the event receiver after running remaining queued functions.\n connector.eventBridge.setEventReceiver((event) => {\n const { time, ...cleanEventProperties } = event.eventProperties || {};\n const eventOptions = typeof time === 'number' ? { time } : undefined;\n void this.track(event.eventType, cleanEventProperties, eventOptions);\n });\n }\n\n getUserId() {\n return this.config?.userId;\n }\n\n setUserId(userId: string | undefined) {\n if (!this.config) {\n this.q.push(this.setUserId.bind(this, userId));\n return;\n }\n this.config.loggerProvider.debug('function setUserId: ', userId);\n if (userId !== this.config.userId || userId === undefined) {\n this.config.userId = userId;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onIdentityChanged({ userId: userId });\n setConnectorUserId(userId, this.config.instanceName);\n }\n }\n\n getDeviceId() {\n return this.config?.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n if (!this.config) {\n this.q.push(this.setDeviceId.bind(this, deviceId));\n return;\n }\n this.config.loggerProvider.debug('function setDeviceId: ', deviceId);\n if (deviceId !== this.config.deviceId) {\n this.config.deviceId = deviceId;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onIdentityChanged({ deviceId: deviceId });\n setConnectorDeviceId(deviceId, this.config.instanceName);\n }\n }\n\n reset() {\n this.setDeviceId(UUID());\n this.setUserId(undefined);\n this.timeline.onReset();\n }\n\n getIdentity() {\n return {\n deviceId: this.config?.deviceId,\n userId: this.config?.userId,\n userProperties: this.userProperties,\n };\n }\n\n getOptOut(): boolean | undefined {\n return this.config?.optOut;\n }\n\n getSessionId() {\n return this.config?.sessionId;\n }\n\n setSessionId(sessionId: number) {\n const promises: Promise<Result>[] = [];\n if (!this.config) {\n this.q.push(this.setSessionId.bind(this, sessionId));\n return returnWrapper(Promise.resolve());\n }\n // Prevents starting a new session with the same session ID\n if (sessionId === this.config.sessionId) {\n return returnWrapper(Promise.resolve());\n }\n\n this.config.loggerProvider.debug('function setSessionId: ', sessionId);\n\n const previousSessionId = this.getSessionId();\n if (previousSessionId !== sessionId) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.timeline.onSessionIdChanged(sessionId);\n }\n\n const lastEventTime = this.config.lastEventTime;\n let lastEventId = this.config.lastEventId ?? -1;\n\n this.config.sessionId = sessionId;\n this.config.lastEventTime = undefined;\n this.config.pageCounter = 0;\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n if (previousSessionId && lastEventTime) {\n promises.push(\n this.track(DEFAULT_SESSION_END_EVENT, undefined, {\n device_id: this.previousSessionDeviceId,\n event_id: ++lastEventId,\n session_id: previousSessionId,\n time: lastEventTime + 1,\n user_id: this.previousSessionUserId,\n }).promise,\n );\n }\n this.config.lastEventTime = this.config.sessionId;\n }\n\n // Fire web attribution event when enable webAttribution tracking\n // 1. has new campaign (call setSessionId from init function)\n // 2. or shouldTrackNewCampaign (call setSessionId from async process(event) when there has new campaign and resetSessionOnNewCampaign = true )\n const isCampaignEventTracked = this.trackCampaignEventIfNeeded(++lastEventId, promises);\n\n // track the identify event if an Identify object is provided in the config\n if (this.config.identify) {\n promises.push(this.track(createIdentifyEvent(this.config.identify)).promise);\n }\n\n if (isSessionTrackingEnabled(this.config.defaultTracking)) {\n promises.push(\n this.track(DEFAULT_SESSION_START_EVENT, undefined, {\n event_id: isCampaignEventTracked ? ++lastEventId : lastEventId,\n session_id: this.config.sessionId,\n time: this.config.lastEventTime,\n }).promise,\n );\n }\n\n this.previousSessionDeviceId = this.config.deviceId;\n this.previousSessionUserId = this.config.userId;\n return returnWrapper(Promise.all(promises));\n }\n\n extendSession() {\n if (!this.config) {\n this.q.push(this.extendSession.bind(this));\n return;\n }\n this.config.lastEventTime = Date.now();\n }\n\n setTransport(transport: TransportTypeOrOptions) {\n if (!this.config) {\n this.q.push(this.setTransport.bind(this, transport));\n return;\n }\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n if (eventOptions?.user_id) {\n this.setUserId(eventOptions.user_id);\n }\n if (eventOptions?.device_id) {\n this.setDeviceId(eventOptions.device_id);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(groupType: string, groupName: string | string[], identify: IIdentify, eventOptions?: EventOptions) {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n private trackCampaignEventIfNeeded(lastEventId?: number, promises?: Promise<Result>[]) {\n if (!this.webAttribution || !this.webAttribution.shouldTrackNewCampaign) {\n return false;\n }\n\n const campaignEvent = this.webAttribution.generateCampaignEvent(lastEventId);\n if (promises) {\n promises.push(this.track(campaignEvent).promise);\n } else {\n this.track(campaignEvent);\n }\n this.config.loggerProvider.log('Tracking attribution.');\n return true;\n }\n\n async process(event: Event) {\n const currentTime = Date.now();\n const isEventInNewSession = isNewSession(this.config.sessionTimeout, this.config.lastEventTime);\n const shouldSetSessionIdOnNewCampaign =\n this.webAttribution && this.webAttribution.shouldSetSessionIdOnNewCampaign();\n\n if (\n event.event_type !== DEFAULT_SESSION_START_EVENT &&\n event.event_type !== DEFAULT_SESSION_END_EVENT &&\n (!event.session_id || event.session_id === this.getSessionId())\n ) {\n if (isEventInNewSession || shouldSetSessionIdOnNewCampaign) {\n this.setSessionId(currentTime);\n if (shouldSetSessionIdOnNewCampaign) {\n this.config.loggerProvider.log('Created a new session for new campaign.');\n }\n } else if (!isEventInNewSession) {\n // Web attribution should be tracked during the middle of a session\n // if there has been a chance in the campaign information.\n this.trackCampaignEventIfNeeded();\n }\n }\n\n // Set user properties\n if (event.event_type === SpecialEventType.IDENTIFY && event.user_properties) {\n this.userProperties = this.getOperationAppliedUserProperties(event.user_properties);\n }\n\n return super.process(event);\n }\n\n private logBrowserOptions(browserConfig: BrowserOptions & { apiKey: string }) {\n try {\n const browserConfigCopy = {\n ...browserConfig,\n apiKey: browserConfig.apiKey.substring(0, 10) + '********',\n };\n this.config.loggerProvider.debug('Initialized Amplitude with BrowserConfig:', JSON.stringify(browserConfigCopy));\n } catch (e) {\n /* istanbul ignore next */\n this.config.loggerProvider.error('Error logging browser config', e);\n }\n }\n\n /**\n * @experimental\n * WARNING: This method is for internal testing only and is not part of the public API.\n * It may be changed or removed at any time without notice.\n *\n * Sets the diagnostics sample rate before amplitude.init()\n * @param sampleRate - The sample rate to set\n */\n _setDiagnosticsSampleRate(sampleRate: number): void {\n if (sampleRate > 1 || sampleRate < 0) {\n return;\n }\n // Set diagnostics sample rate before initializing the config\n if (!this.config) {\n this._diagnosticsSampleRate = sampleRate;\n return;\n }\n }\n}\n","import { debugWrapper, getClientLogConfig, getClientStates, BrowserClient } from '@amplitude/analytics-core';\nimport { AmplitudeBrowser } from './browser-client';\n\nexport const createInstance = (): BrowserClient => {\n const client = new AmplitudeBrowser();\n return {\n init: debugWrapper(\n client.init.bind(client),\n 'init',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n add: debugWrapper(\n client.add.bind(client),\n 'add',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n ),\n remove: debugWrapper(\n client.remove.bind(client),\n 'remove',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.plugins']),\n ),\n track: debugWrapper(\n client.track.bind(client),\n 'track',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n logEvent: debugWrapper(\n client.logEvent.bind(client),\n 'logEvent',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n identify: debugWrapper(\n client.identify.bind(client),\n 'identify',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n groupIdentify: debugWrapper(\n client.groupIdentify.bind(client),\n 'groupIdentify',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n setGroup: debugWrapper(\n client.setGroup.bind(client),\n 'setGroup',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n revenue: debugWrapper(\n client.revenue.bind(client),\n 'revenue',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n flush: debugWrapper(\n client.flush.bind(client),\n 'flush',\n getClientLogConfig(client),\n getClientStates(client, ['config.apiKey', 'timeline.queue.length']),\n ),\n getUserId: debugWrapper(\n client.getUserId.bind(client),\n 'getUserId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.userId']),\n ),\n setUserId: debugWrapper(\n client.setUserId.bind(client),\n 'setUserId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.userId']),\n ),\n getDeviceId: debugWrapper(\n client.getDeviceId.bind(client),\n 'getDeviceId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.deviceId']),\n ),\n setDeviceId: debugWrapper(\n client.setDeviceId.bind(client),\n 'setDeviceId',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.deviceId']),\n ),\n reset: debugWrapper(\n client.reset.bind(client),\n 'reset',\n getClientLogConfig(client),\n getClientStates(client, ['config', 'config.userId', 'config.deviceId']),\n ),\n getSessionId: debugWrapper(\n client.getSessionId.bind(client),\n 'getSessionId',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n setSessionId: debugWrapper(\n client.setSessionId.bind(client),\n 'setSessionId',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n extendSession: debugWrapper(\n client.extendSession.bind(client),\n 'extendSession',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n setOptOut: debugWrapper(\n client.setOptOut.bind(client),\n 'setOptOut',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n setTransport: debugWrapper(\n client.setTransport.bind(client),\n 'setTransport',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n getIdentity: debugWrapper(\n client.getIdentity.bind(client),\n 'getIdentity',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n getOptOut: debugWrapper(\n client.getOptOut.bind(client),\n 'getOptOut',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n _setDiagnosticsSampleRate: debugWrapper(\n client._setDiagnosticsSampleRate.bind(client),\n '_setDiagnosticsSampleRate',\n getClientLogConfig(client),\n getClientStates(client, ['config']),\n ),\n };\n};\n\nexport default createInstance();\n","/* eslint-disable @typescript-eslint/unbound-method */\nimport client from './browser-client-factory';\nexport { createInstance } from './browser-client-factory';\nexport const {\n add,\n extendSession,\n flush,\n getDeviceId,\n getIdentity,\n getOptOut,\n getSessionId,\n getUserId,\n groupIdentify,\n identify,\n init,\n logEvent,\n remove,\n reset,\n revenue,\n setDeviceId,\n setGroup,\n setOptOut,\n setSessionId,\n setTransport,\n setUserId,\n track,\n _setDiagnosticsSampleRate,\n} = client;\nexport { AmplitudeBrowser } from './browser-client';\nexport { runQueuedFunctions } from './utils/snippet-helper';\nexport { Revenue, Identify } from '@amplitude/analytics-core';\n\n// Export types to maintain backward compatibility with `analytics-types`.\n// In the next major version, only export customer-facing types to reduce the public API surface.\nexport * as Types from './types';\n","import { getGlobalScope, registerSdkLoaderMetadata } from '@amplitude/analytics-core';\nimport * as amplitude from './index';\nimport { createInstance } from './browser-client-factory';\nimport { runQueuedFunctions } from './utils/snippet-helper';\n\nregisterSdkLoaderMetadata({\n scriptUrl: resolveCurrentScriptUrl(),\n});\n\nfunction resolveCurrentScriptUrl(): string | undefined {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n const currentScript = document.currentScript as HTMLScriptElement | null;\n if (currentScript?.src) {\n return currentScript.src;\n }\n\n return undefined;\n}\n\n// https://developer.mozilla.org/en-US/docs/Glossary/IIFE\n(function () {\n const GlobalScope = getGlobalScope();\n\n if (!GlobalScope) {\n console.error('[Amplitude] Error: GlobalScope is not defined');\n return;\n }\n\n const createNamedInstance = (instanceName?: string) => {\n const instance = createInstance();\n const GlobalScope = getGlobalScope();\n if (GlobalScope && GlobalScope.amplitude && GlobalScope.amplitude._iq && instanceName) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n GlobalScope.amplitude._iq[instanceName] = instance;\n }\n return instance;\n };\n\n GlobalScope.amplitude = Object.assign(GlobalScope.amplitude || {}, amplitude, {\n createInstance: createNamedInstance,\n });\n\n if (GlobalScope.amplitude.invoked) {\n const queue = GlobalScope.amplitude._q;\n GlobalScope.amplitude._q = [];\n runQueuedFunctions(amplitude, queue);\n\n const instanceNames = Object.keys(GlobalScope.amplitude._iq) || [];\n for (let i = 0; i < instanceNames.length; i++) {\n const instanceName = instanceNames[i];\n const instance = Object.assign(GlobalScope.amplitude._iq[instanceName], createNamedInstance(instanceName));\n const queue = instance._q;\n instance._q = [];\n runQueuedFunctions(instance, queue);\n }\n }\n})();\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","IdentifyOperation","SpecialEventType","__assign","assign","t","s","i","n","arguments","length","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","rejected","result","done","then","__generator","body","f","y","_","label","sent","trys","ops","g","Iterator","verb","Symbol","iterator","v","op","pop","push","__values","o","m","__read","r","ar","error","__spreadArray","to","from","pack","l","slice","concat","SuppressedError","AMPLITUDE_PREFIX","STORAGE_PREFIX","DEFAULT_INSTANCE_NAME","AMPLITUDE_SERVER_URL","DCLID","FBCLID","GBRAID","GCLID","KO_CLICK_ID","LI_FAT_ID","MSCLKID","RDT_CID","TTCLID","TWCLID","WBRAID","BASE_CAMPAIGN","utm_campaign","undefined","utm_content","utm_id","utm_medium","utm_source","utm_term","referrer","referring_domain","dclid","gbraid","gclid","fbclid","ko_click_id","li_fat_id","msclkid","rdt_cid","ttclid","twclid","wbraid","SAFE_HEADERS","FORBIDDEN_HEADERS","isValidObject","properties","keys","key","isValidProperties","property","e_1","_a","isArray","isValid","value_1","value_1_1","valueElement","includes","e_1_1","return","Identify","_propertySet","Set","_properties","getUserProperties","set","_safeSet","SET","setOnce","SET_ONCE","append","APPEND","prepend","PREPEND","postInsert","POSTINSERT","preInsert","PREINSERT","remove","REMOVE","add","ADD","unset","UNSET","clearAll","CLEAR_ALL","operation","_validate","userPropertyMap","has","Status","OrderedIdentifyOperations","RevenueProperty","buildResult","event","code","message","Unknown","getGlobalScope","ampIntegrationContextName","globalThis","window","self","global","hex","map","index","toString","padStart","UUID","a","globalScope","crypto","getRandomValues","Math","random","replace","legacyUUID","Uint8Array","entries","_b","int","join","Timeline","client","queue","applying","plugins","register","plugin","config","_c","some","existingPlugin","name","loggerProvider","warn","type","setup","deregister","pluginName","findIndex","splice","teardown","reset","_this","scheduleApply","timeout","setTimeout","shift","item","before","before_1","before_1_1","enrichment","enrichment_1","enrichment_1_1","e_2_1","destination","executeDestinations","e_2","_d","_e","log","filter","execute","JSON","stringify","eventClone","catch","all","resolveResult","flush","onIdentityChanged","identity","forEach","onSessionIdChanged","sessionId","onOptOutChanged","optOut","onReset","createIdentifyEvent","identify","eventOptions","event_type","IDENTIFY","user_properties","returnWrapper","awaitable","promise","AmplitudeCore","initializing","isReady","q","dispatchQ","logEvent","track","bind","timeline","_init","runQueuedFunctions","queueName","queuedFunctions","queuedFunctions_1","queuedFunctions_1_1","queuedFunction","val","eventInput","eventProperties","event_properties","createTrackEvent","dispatch","groupIdentify","groupType","groupName","GROUP_IDENTIFY","group_properties","groups","createGroupIdentifyEvent","setGroup","createGroupEvent","revenue","REVENUE","getEventProperties","createRevenueEvent","_addPlugin","_removePlugin","dispatchWithCallback","callback","process","getOperationAppliedUserProperties","userProperties","updatedProperties","nonOpProperties","values","opProperties","prop","setOptOut","_setOptOut","Boolean","find","debug","pluginClass","Revenue","productId","quantity","price","setProductId","setQuantity","setPrice","setRevenueType","revenueType","setCurrency","currency","setRevenue","setReceipt","receipt","setReceiptSig","receiptSig","setEventProperties","REVENUE_PRODUCT_ID","REVENUE_QUANTITY","REVENUE_PRICE","REVENUE_TYPE","REVENUE_CURRENCY","RECEIPT","RECEIPT_SIG","LogLevel","PREFIX","Logger","logLevel","None","disable","enable","Warn","args","_i","Verbose","console","Error","Debug","getDefaultConfig","flushMaxRetries","flushQueueSize","flushIntervalMillis","instanceName","offline","serverUrl","serverZone","useBatch","Config","options","_optOut","defaultConfig","apiKey","minIdLength","plan","ingestionMetadata","storageProvider","transportProvider","serverConfig","createServerConfig","defineProperty","get","enumerable","configurable","getServerUrl","_serverZone","RequestMetadata","sdk","metrics","histogram","recordHistogram","isSuccessStatusCode","getStacktrace","ignoreDepth","stack","split","text","trim","getClientLogConfig","logger","getValueByStringPath","obj","path","attr","getClientStates","paths","res","paths_1","paths_1_1","debugWrapper","fn","fnName","getLogConfig","getStates","fnContext","debugContext","stacktrace","time","start","Date","toISOString","states","after","end","getResponseBodyString","responseBodyString","Destination","context","retryTimeout","throttleTimeout","storageKey","scheduleId","scheduledTimeout","flushId","diagnosticsClient","unsent","substring","insert_id","attempts","schedule","saveEvents","removeEventsExceedFlushMaxRetries","list","fulfillRequest","scheduleEvents","clearTimeout","resetSchedule","useRetry","later","arr","size","chunkSize","max","reduce","chunks","element","chunkIndex","floor","batch","send","payload","errorMessage","api_key","events","extra","min_id_length","client_upload_time","request_metadata","requestMetadata","handleResponse","statusCode","status","recordEvent","stack_trace","Failed","Success","handleSuccessResponse","Invalid","handleInvalidResponse","PayloadTooLarge","handlePayloadTooLargeResponse","RateLimit","handleRateLimitResponse","handleOtherResponse","missingField","startsWith","dropIndex","eventsWithInvalidFields","eventsWithMissingFields","eventsWithInvalidIdLengths","silencedEvents","flat","dropIndexSet","retry","tryable","dropUserIds","exceededDailyQuotaUsers","dropDeviceIds","exceededDailyQuotaDevices","throttledIndex","throttledEvents","dropUserIdsSet","dropDeviceIdsSet","throttledIndexSet","user_id","device_id","increment","removeEvents","updatedEvents","eventsToRemove","queuedContext","ApplicationContextProviderImpl","getApplicationContext","versionName","language","getLanguage","platform","os","deviceModel","navigator","languages","EventBridgeImpl","receiver","setEventReceiver","isEqual","obj1","obj2","typeA","primitive_1","primitive_1_1","isArrayA","isArrayB","sorted1","sort","sorted2","result_1","ownProps","resArray","ServerZone","IdentityStoreImpl","listeners","editIdentity","actingUserProperties","actingIdentity","setUserId","userId","setDeviceId","deviceId","setUserProperties","updateUserProperties","actions","e_3","actingProperties","_f","action","_g","_h","_j","_k","_l","e_3_1","commit","setIdentity","getIdentity","originalIdentity","listener","addIdentityListener","removeIdentityListener","delete","safeGlobal","AnalyticsConnector","identityStore","eventBridge","applicationContextProvider","getInstance","getAnalyticsConnector","IdentityEventSender","isNewSession","sessionTimeout","lastEventTime","now","getCookieName","postKey","limit","userLanguage","getQueryParams","location","search","acc","curr","query","tryDecodeURIComponent","decodeURIComponent","isUrlMatchAllowlist","url","allowlist","allowedUrl","match","getDecodeURI","locationStr","decodedLocationStr","decodeURI","isTimestampInSampleTemp","timestamp","sampleRate","hashNumber","str","hash","charCodeAt","generateHashCode","abs","MemoryStorage","memoryStorage","Map","isEnabled","getRaw","clear","CookieStorage","testStorage","testKey","testValue","decodedValue","decodeCookiesAsDefault","decodeCookiesWithDoubleUrlEncoding","parse","cookie","document","c","expirationDays","expires","expireDate","date","setTime","getTime","btoa","encodeURIComponent","toUTCString","domain","secure","sameSite","atob","getStorageKey","BrowserStorage","storage","getItem","setItem","removeItem","TABLE_NAMES","INTERNAL_KEYS","DiagnosticsStorage","dbPromise","dbName","isSupported","indexedDB","getDB","openDB","request","open","onerror","onsuccess","db","onclose","close","onupgradeneeded","target","createTables","objectStoreNames","contains","createObjectStore","keyPath","autoIncrement","createIndex","unique","setTags","tags","transaction_1","store_1","error_1","transaction","objectStore","oncomplete","onabort","put","incrementCounters","counters","transaction_2","store_2","error_2","incrementValue","getRequest","existingRecord","existingValue","setHistogramStats","histogramStats","transaction_3","store_3","error_3","newStats","updatedStats","count","min","sum","addEventRecords","transaction_4","store_4","error_4","countRequest","currentCount","availableSlots","setInternal","transaction_5","store_5","error_5","getInternal","transaction_6","store_6","error_6","getLastFlushTimestamp","record","error_7","parseInt","setLastFlushTimestamp","error_8","clearTable","tableName","getAllAndClear","error_9","getAllFromStore","getAll","GLOBAL_KEY","detectSdkOrigin","scope","normalizedScriptUrl","filename","normalizeUrl","URL","origin","pathname","extractFilenameFromStack","stringifyReason","reason","FLUSH_INTERVAL_MS","MAX_MEMORY_STORAGE_COUNT","DiagnosticsClient","inMemoryTags","inMemoryCounters","inMemoryHistograms","inMemoryEvents","saveTimer","flushTimer","enabled","startTimestamp","shouldTrack","initializeFlushInterval","addEventListener","capture","error_name","errorName","metadata","colno","lineno","isTrusted","matchReason","enableSdkErrorListeners","isStorageAndTrackEnabled","setTag","startTimersIfNeeded","existing","event_name","saveAllDataToStorage","finally","_flush","tagsToSave","countersToSave","histogramsToSave","eventsToSave","tagRecords","counterRecords","histogramStatsRecords","eventRecords","stats","avg","round","fetch","method","headers","ok","lastFlushTimestamp","timeSinceLastFlush","_setFlushTimer","delay","_setSampleRate","BaseTransport","_serverUrl","_payload","buildResponse","responseJSON","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","buildStatus","eventsIngested","events_ingested","payloadSizeBytes","payload_size_bytes","serverUploadTime","server_upload_time","missing_field","events_with_invalid_fields","events_with_missing_fields","events_with_invalid_id_lengths","epsThreshold","eps_threshold","exceeded_daily_quota_devices","silencedDevices","silenced_devices","silenced_events","throttledDevices","throttled_devices","throttled_events","throttledUsers","throttled_users","exceeded_daily_quota_users","Timeout","FetchTransport","_super","customHeaders","response","responseText","Accept","RemoteConfigLocalStorage","fetchConfig","failedRemoteConfigInfo","remoteConfig","lastFetch","localStorage","remoteConfigInfo","setConfig","RemoteConfigClient","callbackInfos","lastSuccessfulFetch","fetchPromise","subscribe","deliveryMode","id","callbackInfo","subscribeAll","subscribeWaitForRemote","unsubscribe","updateConfigs","getOrCreateFetchPromise","sendCallback","remotePromise","cachePromise","race","timeoutPromise","source","filteredConfig","lastCallback","retries","interval","_loop_1","this_1","attempt","state_1","abortController","timeoutId","AbortController","abort","getUrlParams","signal","json","getJitterDelay","baseDelay","encodedApiKey","urlParams","URLSearchParams","CONFIG_GROUP","DEFAULT_CSS_SELECTOR_ALLOWLIST","DEFAULT_DATA_ATTRIBUTE_PREFIX","DEFAULT_ACTION_CLICK_ALLOWLIST","DEFAULT_DEAD_CLICK_ALLOWLIST","DEFAULT_RAGE_CLICK_ALLOWLIST","isJsonPrimitive","pruneJson","excludelist","_pruneJson","tokenizeJsonPath","ancestors","targetObject","parentObject","targetKey","keys_1","keys_1_1","hasPathMatchInList","token","isPathMatch","pathMatcher","j","currentMatcher","k","allowOrExcludeList","RequestWrapperFetch","allow","headersUnsafe","headersSafeCopy","headerName","headerValue","Headers","pruneHeaders","_bodySize","TextEncoder","getBodySize","exclude","safeParseAndPruneBody","RequestWrapperXhr","bodyRaw","requestHeaders","bodyUnsafe","maxEntries","bodySize","bodySafe","encode","Blob","ArrayBuffer","isView","byteLength","FormData","formData","total","ReadableStream","PRUNE_STRATEGY","ResponseWrapperFetch","headersSafe","headersOut_1","contentLength","textPromise","timer","clonedResponse","clone","ResponseWrapperXhr","headersString","getJson","headerLines","headerLines_1","headerLines_1_1","jsonBody","REDACTED_VALUE","e_4","strategy","headersPruned","lowerKey","toLowerCase","REDACT","e_4_1","NetworkRequestEvent","startTime","requestWrapper","duration","responseWrapper","endTime","toSerializable","serialized","requestBodySize","responseHeaders","responseBodySize","fromEntries","NetworkEventCallback","NetworkObserver","eventCallbacks","isObserving","eventCallback","originalXhrOpen","XMLHttpRequest","originalXhrSend","originalXhrSetRequestHeader","setRequestHeader","observeXhr","originalFetch","observeFetch","triggerEventCallbacks","err","handleNetworkRequestEvent","requestType","requestInfo","typedError","durationStart","isRequest","parsedUrl","protocol","host","performance","requestEvent","getTimestamps","requestInit","timestamps","originalResponse","originalError","err_1","createXhrJsonParser","xhrUnsafe","responseType","structuredClone","xhrProto","networkObserverContext","$$AmplitudeAnalyticsEvent","xhrSafe","getAllResponseHeaders","getResponseHeader","networkObserver","CampaignParser","getUtmParam","getReferrer","getClickIds","params","data","TEXT_MASK_ATTRIBUTE","MASKED_TEXT_VALUE","CC_REGEX","SSN_REGEX","EMAIL_REGEX","replaceSensitiveString","additionalMaskTextPatterns","additionalMaskTextPatterns_1","additionalMaskTextPatterns_1_1","pattern","getPageTitle","parseTitleFunction","title","titleElement","querySelector","hasAttribute","_createForOfIteratorHelperLoose","allowArrayLike","it","minLen","_arrayLikeToArray","test","_unsupportedIterableToArray","len","arr2","_defineProperties","props","descriptor","writable","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","observable","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","ctor","Observable","isObservable","x","hostReportError","enqueue","cleanupSubscription","subscription","cleanup","_cleanup","closeSubscription","_observer","_queue","_state","notifySubscription","observer","onNotify","flushSubscription","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_subscription","_proto2","complete","_subscriber","_proto3","_this2","_this3","_this4","C","hasSeed","hasValue","first","_this5","_len","sources","_key","startNext","flatMap","_this6","subscriptions","outer","inner","completeIfDone","closed","_step","_iterator","of","_len2","items","_key2","asyncMap","ZenObservable","merge","sourceA","sourceB","subscriptions_1","subscriptions_1_1","sub","subscribeTo","multicast","observers","observers_1","observers_1_1","obs","observers_2","observers_2_1","observers_3","observers_3_1","symbol","isTrackingEnabled","autocapture","isAttributionTrackingEnabled","isPageViewTrackingEnabled","isSessionTrackingEnabled","isNetworkTrackingEnabled","networkTracking","isElementInteractionsEnabled","elementInteractions","isFrustrationInteractionsEnabled","frustrationInteractions","getElementInteractionsConfig","getFrustrationInteractionsConfig","getNetworkTrackingConfig","networkTrackingConfig","networkTrackingOptions","captureRules","rule","urls","hosts","hostsString","urlsString","getPageViewTrackingConfig","eventType","trackOn","trackHistoryChanges","pageCounter","defaultTracking","pageViews","instance","convertProxyObjectToRealObject","name_1","isInstanceProxy","VERSION","LIBPREFIX","Context","library","userAgent","lastEventId","nextEventId","event_id","session_id","appVersion","app_version","trackingOptions","ipAddress","ip","partner_id","partnerId","ingestion_metadata","source_name","sourceName","source_version","sourceVersion","user_agent","MAX_ARRAY_LENGTH","LocalStorage","droppedEventsCount","SessionStorage","sessionStorage","XHRTransport","state","xhr","onreadystatechange","readyState","SendBeaconTransport","sendBeacon","parseLegacyCookies","cookieStorage","deleteLegacyCookies","cookieName","getOldCookieName","cookies","decode","parseTime","num","integer","isNaN","escape","DEFAULT_EVENT_PREFIX","DEFAULT_FORM_START_EVENT","DEFAULT_FORM_SUBMIT_EVENT","DEFAULT_FILE_DOWNLOAD_EVENT","DEFAULT_SESSION_START_EVENT","DEFAULT_SESSION_END_EVENT","FILE_EXTENSION","FILE_NAME","LINK_ID","LINK_TEXT","LINK_URL","FORM_ID","FORM_NAME","FORM_DESTINATION","DEFAULT_IDENTITY_STORAGE","BrowserConfig","cookieOptions","identityStorage","transport","fetchRemoteConfig","debugLogsEnabled","enableDiagnostics","diagnosticsSampleRate","expiration","upgrade","_fetchRemoteConfig","createTransport","version","_cookieStorage","updateStorage","_deviceId","_userId","_sessionId","_lastEventTime","_lastEventId","_pageCounter","_debugLogsEnabled","cache","useBrowserConfig","amplitudeInstance","getTopLevelDomain","_3","createCookieStorage","legacyCookies","previousCookies","queryParams","ampTimestamp","Number","isWithinTimeLimit","ampDeviceId","previousSessionDeviceId","previousSessionUserId","_y","_z","_0","_1","_2","browserConfig","_diagnosticsSampleRate","hostname","parts","levels","omitUndefined","input","pageViewTrackingPlugin","amplitude","localConfig","isTracking","createPageViewEvent","locationHREF","href","getCampaignParams","shouldTrackOnPageLoad","previousURL","trackHistoryPageView","newURL","shouldTrackPageView","shouldTrackHistoryPageView","trackHistoryPageViewWrapper","history","pushState","Proxy","unused","pageViewEvent","isCampaignEvent","removeEventListener","$set","$unset","userProperties_1","every","trackingOption","newURLStr","oldURLStr","oldURL","formInteractionTracking","eventListeners","handler","initializeFormTracking","addFormInteractionListener","form","hasFormChanged","formDestination","extractFormAction","stringOrUndefined","getElementsByTagName","MutationObserver","mutations","mutation","addedNodes","node","nodeName","querySelectorAll","observe","subtree","childList","window_1","disconnect","getAttribute","encodeURI","fileDownloadTracking","initializeFileDownloadTracking","addFileDownloadListener","ext","exec","fileExtension","notified","networkConnectivityCheckerPlugin","addNetworkListener","onLine","translateRemoteConfigToLocal","propertyNames","propertyNames_1","propertyNames_1_1","propertyName","header","captureSafeHeaders","rageClick","rageClicks","deadClick","deadClicks","mergeUrls","urlsExact","urlsRegex","regexList","RegExp","regexError","updateBrowserConfigWithRemoteConfig","typedRemoteConfig","transformedAutocaptureRemoteConfig","pageUrlAllowlistRegex","transformedRcElementInteractions","exactAllowList","pageUrlAllowlist","captureRules_1","captureRules_1_1","attribution","fileDownloads","formInteractions","sessions","webVitals","AMPLITUDE_ELEMENT_CLICKED_EVENT","AMPLITUDE_EVENT_PROP_ELEMENT_TAG","AMPLITUDE_EVENT_PROP_ELEMENT_TEXT","AMPLITUDE_EVENT_PROP_PAGE_URL","AMPLITUDE_ORIGIN","AMPLITUDE_ORIGINS_MAP","US","EU","STAGING","DATA_AMP_MASK_ATTRIBUTES","SENSITIVE_TAGS","isElementPointerCursor","actionType","computedStyle","getComputedStyle","getPropertyValue","createShouldTrackEvent","autocaptureOptions","isAlwaysCaptureCursorPointer","pageUrlExcludelist","shouldTrackEventResolver","tag","tagName","elementType","isCursorPointer","hasMatchAnyAllowedSelector","selector","matches","parseAttributesToMask","attributeString","removeEmptyProperties","filteredProperties","isEmpty","getClosestElement","selectors","parentElement","filterOutNonTrackableEvents","closestTrackedAncestor","BLOCKED_ATTRIBUTES","SENSITIVE_ELEMENT_ATTRIBUTE_ALLOWLIST","SVG_TAGS","HIGHLY_SENSITIVE_INPUT_TYPES","getElementProperties","userMaskedAttributeNames","siblings","children","indexOfType","el","prevSiblingTag","previousElementSibling","prevSib","classes","classList","attributes","filteredAttributes","isSensitiveElement","isContentEditable","HTMLElement","isNonSensitiveElement","filteredAttributes_1","filteredAttributes_1_1","attrs","executeActions","ev","dataExtractor","extractDataFromDataSource","dataSource","targetElementProperties","destinationKey","DataExtractor","getHierarchy","hierarchy","targetEl","current","getAncestors","elementToAttributesToMaskMap","attributesToMask","constants.DATA_AMP_MASK_ATTRIBUTES","ancestorAttributesToMask","combinedAttributesToMask","hierarchyNode","hierarchy_1","hierarchy_1_1","getNearestLabel","labelElement","parent","getText","dataAttributePrefix","prefix","rect","getBoundingClientRect","left","top","currentElementAttributes","nearestLabel","attributeName","attributeValue","attributeKey","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TAG","constants.AMPLITUDE_EVENT_PROP_ELEMENT_TEXT","constants.AMPLITUDE_EVENT_PROP_PAGE_URL","innerHeight","innerWidth","HTMLAnchorElement","addAdditionalEventProperties","selectorAllowlist","isCapturingCursorPointer","baseEvent","isElementBasedEvent","contextElement","sourceType","sourceElement","scopingElement","documentElement","closest","getDataSource","elementExtractType","attribute","output","clonedTree","cloneNode","innerText","getEventTagProps","rawPatterns","maskTextRegex","compiled","rawPatterns_1","rawPatterns_1_1","entry","WindowMessenger","endpoint","requestCallbacks","onSelect","notify","onTrack","opener","postMessage","sendRequest","substr","responseData","isElementSelectable","cssSelectorAllowlist","actionClickAllowlist","amplitudeVisualTaggingSelectorInstance","eventData","actionData_1","scriptElement","createElement","async","src","once","head","appendChild","amplitudeVisualTaggingSelector","visualHighlightClass","messenger","diagnostics","ObservablesEnum","createMutationObservable","mutationObserver","characterData","createClickObservable","clickType","eventTypeToBrowserEventMap","groupLabeledEventIdsByEventType","labeledEvents","groupedLabeledEvents","browserEvent","labeledEvents_1","labeledEvents_1_1","le","definition","def","createLabeledEventToTriggerMap","triggers","labeledEventToTriggerMap","triggers_1","triggers_1_1","trigger","conditions","condition","eventId","existingTriggers","matchEventToLabeledEvents","filters","subprop_key","subprop_op","subprop_value","matchEventToFilter","TriggerEvaluator","evaluate","e_7","pageActions","matchingTriggers","leToTriggerMap","e_5","e_6","labeledEvents_2","labeledEvents_2_1","triggers_2","triggers_2_1","e_6_1","e_5_1","matchLabeledEventsToTriggers","matchingTriggers_1","matchingTriggers_1_1","e_7_1","update","autocapturePlugin","visualTaggingOptions","debounceTime","excludePattern","evaluateTriggers","createTriggerEvaluator","shouldTrackEvent","shouldTrackActionClick","allObservables","clickTrackingSubscription","changeSubscription","actionClickSubscription","remoteConfigClient","remotePageActions","recomputePageActionsData","navigateObservable","clickObservable","click","changeObservable","changeEvent","enrichedChangeEvent","navigation","navigateEvent","enrichedNavigateEvent","mutationObservable","ChangeObservable","ClickObservable","MutationObservable","NavigateObservable","createObservables","trackClicks","trackChange","filteredClickObservable","closestActionClickEl","clickEvent","mutationOrNavigate","clickMutationNavigateObservable","actionClickTimer","lastClickEvent","event_1","actionClick","trackActionClick","constants.AMPLITUDE_ORIGINS_MAP","CHANGE_EVENTS","addCoordinates","regionBox","clientX","clientY","yMin","yMax","xMin","xMax","isOutOfBounds","getRageClickAnalyticsEvent","clickWindow","firstClick","lastClick","rageClickEvent","X","Y","Time","trackRageClicks","shouldTrackRageClick","clickBoundingBox","pendingRageClick","resolutionValue","isNewElement","isClickOutsideRageClickWindow","resetClickWindow","timerId","frustrationPlugin","rageCssSelectors","deadCssSelectors","combinedCssSelectors","shouldTrackDeadClick","rageClickSubscription","deadClickSubscription","enrichedNavigateObservable","enrichedMutationObservable","navigate","Element","changeObservables","clicksAndChangeObservable","deadClickTimer","deadClickEvent","trackDeadClick","AMPLITUDE_NETWORK_REQUEST_EVENT","DEFAULT_STATUS_CODE_RANGE","wildcardMatch","regexPattern","isStatusCodeInRange","range","ranges","ranges_1","ranges_1_1","parseUrl","currentHref","urlObj","searchParams","fragment","hrefWithoutQueryOrHash","parseHeaderCaptureRule","isBodyCaptureRuleEmpty","blocklist","shouldTrackNetworkEvent","networkEvent","isMatch_1","ignoreAmplitudeRequests","ignoreHosts","ignoreHost","reverse","methods","allowedMethod","statusCodeRange","isCaptureRuleMatch","responseHeadersRule","requestHeadersRule","responseBody","responseBodyJson","requestBody","requestBodyJson","isAmplitudeNetworkRequestEvent","trackNetworkEvents","networkObservable","networkAnalyticsEvent","logNetworkAnalyticsEvent","networkCapturePlugin","eventWithProperties","NetworkObservable","persisted","timeStamp","delta","rating","requestAnimationFrame","getEntriesByType","responseStart","activationStart","prerendering","wasDiscarded","navigationType","WeakMap","h","hadRecentInput","at","PerformanceObserver","supportedEntryTypes","getEntries","buffered","u","visibilityState","isFinite","firstHiddenTime","onHidden","E","reportAllChanges","T","M","interactionId","w","interactionCount","F","L","entryType","A","requestIdleCallback","B","S","PerformanceEventTiming","durationThreshold","takeRecords","N","H","O","getMetricStartTime","metric","timeOrigin","processMetric","navigationStart","PreviousPageType","webVitalsPlugin","visibilityListener","doc","locationHref","webVitalsPayload","onLCP","onFCP","onINP","onCLS","onTTFB","domainWithoutSubdomain","isNewCampaign","previous","currentCampaign","prevReferringDomain","previousCampaign","isExcludedReferrer","excludeReferrers","isDirectTraffic","hasNewCampaign","hasNewDomain","referringDomain","WebAttribution","cookieDomain","shouldTrackNewCampaign","initialEmptyValue","resetSessionOnNewCampaign","webExpStorageKey","init","fetchCampaign","isEventInNewSession","originalCampaign","generateCampaignEvent","campaign","campaignParameters","identifyEvent","campaignEvent","shouldSetSessionIdOnNewCampaign","CURRENT_PAGE_STORAGE_KEY","PREVIOUS_PAGE_STORAGE_KEY","URL_INFO_STORAGE_KEY","EXCLUDED_DEFAULT_EVENT_TYPES","pageUrlEnrichmentPlugin","internalDomains","isStorageEnabled","isProxied","getPrevPageType","previousPage","currentDomain","previousPageDomain","decodedUrl","getHostname","Direct","isCurrentInternal","isPrevInternal","Internal","External","saveUrlInfoWrapper","URLInfo","currentURL","storedCurrentURL","replaceState","updatedURLInfo","addIfNotExist","AmplitudeBrowser","userIdOrOptions","maybeOptions","browserOptions","logBrowserOptions","attributionTrackingOptions","webAttribution","querySessionId","ampSessionId","setSessionId","connector","detNotify","isFormInteractionTrackingEnabled","isWebVitalsEnabled","isPageUrlEnrichmentEnabled","cleanEventProperties","getUserId","setConnectorUserId","getDeviceId","setConnectorDeviceId","getOptOut","getSessionId","promises","previousSessionId","isCampaignEventTracked","trackCampaignEventIfNeeded","extendSession","setTransport","currentTime","browserConfigCopy","_setDiagnosticsSampleRate","createInstance","scriptUrl","normalized","registerSdkLoaderMetadata","currentScript","resolveCurrentScriptUrl","GlobalScope","createNamedInstance","_iq","invoked","instanceNames","queue_1"],"mappings":"yBAgBA,IAAIA,EAAgB,SAASC,EAAGC,GAI5B,OAHAF,EAAgBG,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,CAAE,GACzE,SAAUD,EAAGC,GAAK,IAAK,IAAIK,KAAKL,EAAOC,OAAOK,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,KACzFP,EAAcC,EAAGC,EAC5B,EAEO,SAASS,EAAUV,EAAGC,GACzB,GAAiB,mBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAIU,UAAU,uBAAyBC,OAAOX,GAAK,iCAE7D,SAASY,IAAOC,KAAKC,YAAcf,CAAI,CADvCD,EAAcC,EAAGC,GAEjBD,EAAEO,UAAkB,OAANN,EAAaC,OAAOc,OAAOf,IAAMY,EAAGN,UAAYN,EAAEM,UAAW,IAAIM,EACnF,CAEO,IC/BII,EAqBAC,EDUAC,EAAW,WAQlB,OAPAA,EAAWjB,OAAOkB,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAIjB,KADTgB,EAAIG,UAAUF,GACOrB,OAAOK,UAAUC,eAAeC,KAAKa,EAAGhB,KAAIe,EAAEf,GAAKgB,EAAEhB,IAE9E,OAAOe,CACV,EACMF,EAASQ,MAAMb,KAAMW,UAChC,EAEO,SAASG,EAAON,EAAGO,GACtB,IAAIR,EAAI,CAAA,EACR,IAAK,IAAIf,KAAKgB,EAAOpB,OAAOK,UAAUC,eAAeC,KAAKa,EAAGhB,IAAMuB,EAAEC,QAAQxB,GAAK,IAC9Ee,EAAEf,GAAKgB,EAAEhB,IACb,GAAS,MAALgB,GAAqD,mBAAjCpB,OAAO6B,sBACtB,KAAIR,EAAI,EAAb,IAAgBjB,EAAIJ,OAAO6B,sBAAsBT,GAAIC,EAAIjB,EAAEoB,OAAQH,IAC3DM,EAAEC,QAAQxB,EAAEiB,IAAM,GAAKrB,OAAOK,UAAUyB,qBAAqBvB,KAAKa,EAAGhB,EAAEiB,MACvEF,EAAEf,EAAEiB,IAAMD,EAAEhB,EAAEiB,IAF4B,CAItD,OAAOF,CACX,CA8DO,SAASY,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,UAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAQ,CAAG,MAAOb,GAAKW,EAAOX,GAAO,CAC3F,SAASgB,EAASH,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOb,GAAKW,EAAOX,GAAO,CAC9F,SAASc,EAAKG,GAJlB,IAAeJ,EAIaI,EAAOC,KAAOR,EAAQO,EAAOJ,QAJ1CA,EAIyDI,EAAOJ,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,EAAE,SAAUG,GAAWA,EAAQG,EAAO,IAIhBM,KAAKP,EAAWI,EAAY,CAC9GF,GAAMN,EAAYA,EAAUV,MAAMO,EAASC,GAAc,KAAKS,OACtE,EACA,CAEO,SAASK,EAAYf,EAASgB,GACjC,IAAsGC,EAAGC,EAAG/B,EAAxGgC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPlC,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,EAAG,EAAImC,KAAM,GAAIC,IAAK,IAAeC,EAAIxD,OAAOc,QAA4B,mBAAb2C,SAA0BA,SAAWzD,QAAQK,WACtL,OAAOmD,EAAEd,KAAOgB,EAAK,GAAIF,EAAS,MAAIE,EAAK,GAAIF,EAAU,OAAIE,EAAK,GAAsB,mBAAXC,SAA0BH,EAAEG,OAAOC,UAAY,WAAa,OAAOhD,IAAO,GAAG4C,EAC1J,SAASE,EAAKpC,GAAK,OAAO,SAAUuC,GAAK,OACzC,SAAcC,GACV,GAAIb,EAAG,MAAM,IAAIxC,UAAU,mCAC3B,KAAO+C,IAAMA,EAAI,EAAGM,EAAG,KAAOX,EAAI,IAAKA,OACnC,GAAIF,EAAI,EAAGC,IAAM/B,EAAY,EAAR2C,EAAG,GAASZ,EAAU,OAAIY,EAAG,GAAKZ,EAAS,SAAO/B,EAAI+B,EAAU,SAAM/B,EAAEZ,KAAK2C,GAAI,GAAKA,EAAER,SAAWvB,EAAIA,EAAEZ,KAAK2C,EAAGY,EAAG,KAAKjB,KAAM,OAAO1B,EAE3J,OADI+B,EAAI,EAAG/B,IAAG2C,EAAK,CAAS,EAARA,EAAG,GAAQ3C,EAAEqB,QACzBsB,EAAG,IACP,KAAK,EAAG,KAAK,EAAG3C,EAAI2C,EAAI,MACxB,KAAK,EAAc,OAAXX,EAAEC,QAAgB,CAAEZ,MAAOsB,EAAG,GAAIjB,MAAM,GAChD,KAAK,EAAGM,EAAEC,QAASF,EAAIY,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKX,EAAEI,IAAIQ,MAAOZ,EAAEG,KAAKS,MAAO,SACxC,QACI,KAAM5C,EAAIgC,EAAEG,MAAMnC,EAAIA,EAAEK,OAAS,GAAKL,EAAEA,EAAEK,OAAS,KAAkB,IAAVsC,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEX,EAAI,EAAG,QAAW,CAC5G,GAAc,IAAVW,EAAG,MAAc3C,GAAM2C,EAAG,GAAK3C,EAAE,IAAM2C,EAAG,GAAK3C,EAAE,IAAM,CAAEgC,EAAEC,MAAQU,EAAG,GAAI,KAAQ,CACtF,GAAc,IAAVA,EAAG,IAAYX,EAAEC,MAAQjC,EAAE,GAAI,CAAEgC,EAAEC,MAAQjC,EAAE,GAAIA,EAAI2C,EAAI,KAAQ,CACrE,GAAI3C,GAAKgC,EAAEC,MAAQjC,EAAE,GAAI,CAAEgC,EAAEC,MAAQjC,EAAE,GAAIgC,EAAEI,IAAIS,KAAKF,GAAK,KAAQ,CAC/D3C,EAAE,IAAIgC,EAAEI,IAAIQ,MAChBZ,EAAEG,KAAKS,MAAO,SAEtBD,EAAKd,EAAKzC,KAAKyB,EAASmB,EAC3B,CAAC,MAAOxB,GAAKmC,EAAK,CAAC,EAAGnC,GAAIuB,EAAI,CAAE,CAAW,QAAED,EAAI9B,EAAI,CAAI,CAC1D,GAAY,EAAR2C,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAEtB,MAAOsB,EAAG,GAAKA,EAAG,QAAK,EAAQjB,MAAM,EAC7E,CAtB+CJ,CAAK,CAACnB,EAAGuC,GAAM,CAAG,CAuBtE,CAkBO,SAASI,EAASC,GACrB,IAAI9C,EAAsB,mBAAXuC,QAAyBA,OAAOC,SAAUO,EAAI/C,GAAK8C,EAAE9C,GAAIC,EAAI,EAC5E,GAAI8C,EAAG,OAAOA,EAAE5D,KAAK2D,GACrB,GAAIA,GAAyB,iBAAbA,EAAE1C,OAAqB,MAAO,CAC1CkB,KAAM,WAEF,OADIwB,GAAK7C,GAAK6C,EAAE1C,SAAQ0C,OAAI,GACrB,CAAE1B,MAAO0B,GAAKA,EAAE7C,KAAMwB,MAAOqB,EACvC,GAEL,MAAM,IAAIzD,UAAUW,EAAI,0BAA4B,kCACxD,CAEO,SAASgD,EAAOF,EAAG5C,GACtB,IAAI6C,EAAsB,mBAAXR,QAAyBO,EAAEP,OAAOC,UACjD,IAAKO,EAAG,OAAOD,EACf,IAAmBG,EAAY1C,EAA3BN,EAAI8C,EAAE5D,KAAK2D,GAAOI,EAAK,GAC3B,IACI,WAAc,IAANhD,GAAgBA,KAAM,MAAQ+C,EAAIhD,EAAEqB,QAAQG,MAAMyB,EAAGN,KAAKK,EAAE7B,MACvE,CACD,MAAO+B,GAAS5C,EAAI,CAAE4C,MAAOA,EAAU,CAC/B,QACJ,IACQF,IAAMA,EAAExB,OAASsB,EAAI9C,EAAU,SAAI8C,EAAE5D,KAAKc,EACjD,CACO,QAAE,GAAIM,EAAG,MAAMA,EAAE4C,KAAQ,CACpC,CACD,OAAOD,CACX,CAkBO,SAASE,EAAcC,EAAIC,EAAMC,GACpC,GAAIA,GAA6B,IAArBpD,UAAUC,OAAc,IAAK,IAA4B8C,EAAxBjD,EAAI,EAAGuD,EAAIF,EAAKlD,OAAYH,EAAIuD,EAAGvD,KACxEiD,GAAQjD,KAAKqD,IACRJ,IAAIA,EAAKnE,MAAME,UAAUwE,MAAMtE,KAAKmE,EAAM,EAAGrD,IAClDiD,EAAGjD,GAAKqD,EAAKrD,IAGrB,OAAOoD,EAAGK,OAAOR,GAAMnE,MAAME,UAAUwE,MAAMtE,KAAKmE,GACtD,CA2GkD,mBAApBK,iBAAiCA,gBCvU/D,SAAWhE,GAEPA,EAAuB,IAAI,OAC3BA,EAA4B,SAAI,WAEhCA,EAAuB,IAAI,OAC3BA,EAA0B,OAAI,UAC9BA,EAA2B,QAAI,WAC/BA,EAA0B,OAAI,UAE9BA,EAA6B,UAAI,aACjCA,EAA8B,WAAI,cAElCA,EAAyB,MAAI,SAC7BA,EAA6B,UAAI,WACpC,CAfD,CAeGA,IAAsBA,EAAoB,CAAE,IAM/C,SAAWC,GACPA,EAA2B,SAAI,YAC/BA,EAAiC,eAAI,iBACrCA,EAA0B,QAAI,gBACjC,CAJD,CAIGA,IAAqBA,EAAmB,CAAA,IC1BpC,IC0FID,EDzFAiE,EAAmB,MACnBC,EAAiB,GAAGH,OAAOE,EAAkB,WAC7CE,EAAwB,oBACxBC,EAAuB,uCAWvBC,EAAQ,QACRC,EAAS,SACTC,EAAS,SACTC,EAAQ,QACRC,EAAc,cACdC,EAAY,YACZC,EAAU,UACVC,EAAU,UACVC,EAAS,SACTC,EAAS,SACTC,EAAS,SAETC,EAAgB,CACvBC,kBAAcC,EACdC,iBAAaD,EACbE,YAAQF,EACRG,gBAAYH,EACZI,gBAAYJ,EACZK,cAAUL,EACVM,cAAUN,EACVO,sBAAkBP,EAClBQ,WAAOR,EACPS,YAAQT,EACRU,WAAOV,EACPW,YAAQX,EACRY,iBAAaZ,EACba,eAAWb,EACXc,aAASd,EACTe,aAASf,EACTgB,YAAQhB,EACRiB,YAAQjB,EACRkB,YAAQlB,GAIDmB,EAAe,CACtB,8BACA,mCACA,gCACA,yBACA,+BACA,+BACA,eACA,gBACA,MACA,QACA,UACA,gBACA,aACA,sBACA,mBACA,mBACA,iBACA,mBACA,cACA,gBACA,eACA,OACA,aACA,OACA,UACA,KACA,gBACA,OACA,WACA,YACA,MACA,SACA,qBACA,kBACA,cACA,SACA,SACA,4BACA,UACA,oBACA,KACA,UACA,OACA,MACA,UACA,mBACA,eACA,mBAGOC,EAAoB,CAAC,gBAAiB,SAAU,cEnGhDC,EAAgB,SAAUC,GACjC,GAAIvH,OAAOwH,KAAKD,GAAY/F,OAFR,IAGhB,OAAO,EAEX,IAAK,IAAIiG,KAAOF,EAAY,CAExB,IAAI/E,EAAQ+E,EAAWE,GACvB,IAAKC,EAAkBD,EAAKjF,GACxB,OAAO,CACd,CACD,OAAO,CACX,EACWkF,EAAoB,SAAUC,EAAUnF,GAC/C,IAAIoF,EAAKC,EACT,GAAwB,iBAAbF,EACP,OAAO,EACX,GAAIxH,MAAM2H,QAAQtF,GAAQ,CACtB,IAAIuF,GAAU,EACd,IACI,IAAK,IAAIC,EAAU/D,EAASzB,GAAQyF,EAAYD,EAAQtF,QAASuF,EAAUpF,KAAMoF,EAAYD,EAAQtF,OAAQ,CACzG,IAAIwF,EAAeD,EAAUzF,MAC7B,GAAIrC,MAAM2H,QAAQI,GACd,OAAO,EAEN,GAA4B,iBAAjBA,EACZH,EAAUA,GAAWT,EAAcY,QAElC,IAAK,CAAC,SAAU,UAAUC,gBAAgBD,GAC3C,OAAO,EAEX,IAAKH,EACD,OAAO,CAEd,CACJ,CACD,MAAOK,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQH,IAAcA,EAAUpF,OAASgF,EAAKG,EAAQK,SAASR,EAAGtH,KAAKyH,EACtE,CACO,QAAE,GAAIJ,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACJ,KACI,IAAI/B,QACL,OAAO,EAEN,GAAqB,iBAAVA,EAEZ,OAAO8E,EAAc9E,GAEpB,IAAK,CAAC,SAAU,SAAU,WAAW2F,gBAAgB3F,GACtD,OAAO,CACV,CACD,OAAO,CACX,EDrDI8F,EAA0B,WAC1B,SAASA,IACL1H,KAAK2H,aAAe,IAAIC,IACxB5H,KAAK6H,YAAc,EACtB,CAgFD,OA/EAH,EAASjI,UAAUqI,kBAAoB,WACnC,OAAOzH,EAAS,CAAA,EAAIL,KAAK6H,YACjC,EACIH,EAASjI,UAAUsI,IAAM,SAAUhB,EAAUnF,GAEzC,OADA5B,KAAKgI,SAAS7H,EAAkB8H,IAAKlB,EAAUnF,GACxC5B,IACf,EACI0H,EAASjI,UAAUyI,QAAU,SAAUnB,EAAUnF,GAE7C,OADA5B,KAAKgI,SAAS7H,EAAkBgI,SAAUpB,EAAUnF,GAC7C5B,IACf,EACI0H,EAASjI,UAAU2I,OAAS,SAAUrB,EAAUnF,GAE5C,OADA5B,KAAKgI,SAAS7H,EAAkBkI,OAAQtB,EAAUnF,GAC3C5B,IACf,EACI0H,EAASjI,UAAU6I,QAAU,SAAUvB,EAAUnF,GAE7C,OADA5B,KAAKgI,SAAS7H,EAAkBoI,QAASxB,EAAUnF,GAC5C5B,IACf,EACI0H,EAASjI,UAAU+I,WAAa,SAAUzB,EAAUnF,GAEhD,OADA5B,KAAKgI,SAAS7H,EAAkBsI,WAAY1B,EAAUnF,GAC/C5B,IACf,EACI0H,EAASjI,UAAUiJ,UAAY,SAAU3B,EAAUnF,GAE/C,OADA5B,KAAKgI,SAAS7H,EAAkBwI,UAAW5B,EAAUnF,GAC9C5B,IACf,EACI0H,EAASjI,UAAUmJ,OAAS,SAAU7B,EAAUnF,GAE5C,OADA5B,KAAKgI,SAAS7H,EAAkB0I,OAAQ9B,EAAUnF,GAC3C5B,IACf,EACI0H,EAASjI,UAAUqJ,IAAM,SAAU/B,EAAUnF,GAEzC,OADA5B,KAAKgI,SAAS7H,EAAkB4I,IAAKhC,EAAUnF,GACxC5B,IACf,EACI0H,EAASjI,UAAUuJ,MAAQ,SAAUjC,GAEjC,OADA/G,KAAKgI,SAAS7H,EAAkB8I,MAAOlC,ED5CtB,KC6CV/G,IACf,EACI0H,EAASjI,UAAUyJ,SAAW,WAI1B,OAFAlJ,KAAK6H,YAAc,GACnB7H,KAAK6H,YAAY1H,EAAkBgJ,WDlDlB,ICmDVnJ,IACf,EAEI0H,EAASjI,UAAUuI,SAAW,SAAUoB,EAAWrC,EAAUnF,GACzD,GAAI5B,KAAKqJ,UAAUD,EAAWrC,EAAUnF,GAAQ,CAE5C,IAAI0H,EAAkBtJ,KAAK6H,YAAYuB,GASvC,YARwB/D,IAApBiE,IACAA,EAAkB,CAAA,EAElBtJ,KAAK6H,YAAYuB,GAAaE,GAGlCA,EAAgBvC,GAAYnF,EAC5B5B,KAAK2H,aAAamB,IAAI/B,IACf,CACV,CACD,OAAO,CACf,EACIW,EAASjI,UAAU4J,UAAY,SAAUD,EAAWrC,EAAUnF,GAC1D,YAAsDyD,IAAlDrF,KAAK6H,YAAY1H,EAAkBgJ,cAInCnJ,KAAK2H,aAAa4B,IAAIxC,KAItBqC,IAAcjJ,EAAkB4I,IACR,iBAAVnH,EAEdwH,IAAcjJ,EAAkB8I,OAASG,IAAcjJ,EAAkB0I,QAClE/B,EAAkBC,EAAUnF,IAG/C,EACW8F,CACX,KAGA,SAAWvH,GAEPA,EAAuB,IAAI,OAC3BA,EAA4B,SAAI,WAEhCA,EAAuB,IAAI,OAC3BA,EAA0B,OAAI,UAC9BA,EAA2B,QAAI,WAC/BA,EAA0B,OAAI,UAE9BA,EAA6B,UAAI,aACjCA,EAA8B,WAAI,cAElCA,EAAyB,MAAI,SAC7BA,EAA6B,UAAI,WACpC,CAfD,CAeGA,IAAsBA,EAAoB,CAAE,IAIxC,IE7GIqJ,EF6GAC,EAA4B,CACnCtJ,EAAkBgJ,UAClBhJ,EAAkB8I,MAClB9I,EAAkB8H,IAClB9H,EAAkBgI,SAClBhI,EAAkB4I,IAClB5I,EAAkBkI,OAClBlI,EAAkBoI,QAClBpI,EAAkBwI,UAClBxI,EAAkBsI,WAClBtI,EAAkB0I,SEtHtB,SAAWW,GAEPA,EAAgB,QAAI,UAEpBA,EAAgB,QAAI,UAEpBA,EAAgB,QAAI,UAEpBA,EAAkB,UAAI,aAEtBA,EAAwB,gBAAI,oBAE5BA,EAAgB,QAAI,UAEpBA,EAAe,OAAI,SAEnBA,EAAgB,QAAI,UAEpBA,EAAoB,YAAI,aAC3B,CAnBD,CAmBGA,IAAWA,EAAS,CAAA,ICpBhB,IC8DIE,ED9DAC,EAAc,SAAUC,EAAOC,EAAMC,GAG5C,YAFa,IAATD,IAAmBA,EAAO,QACd,IAAZC,IAAsBA,EAAUN,EAAOO,SACpC,CAAEH,MAAOA,EAAOC,KAAMA,EAAMC,QAASA,EAChD,EEHWE,EAAiB,WAGxB,IAAIC,EAA4B,wBAChC,MAA0B,oBAAfC,iBAA+E,IAA1CA,WAAWD,GAChDC,WAAWD,GAEI,oBAAfC,WACAA,WAEW,oBAAXC,OACAA,OAES,oBAATC,KACAA,KAEW,oBAAXC,OACAA,YADX,CAIJ,ECOIC,EAAM1G,EAAc,GAAIJ,EAAOjE,MAAM,KAAKqH,SAAS,GAAO2D,IAAI,SAAUC,GAAS,OAAOA,EAAMC,SAAS,IAAIC,SAAS,EAAG,IAAK,GACrHC,EAAO,SAAUC,GACxB,IAAI3D,EACA4D,EAAcb,IAElB,KAA8F,QAAvF/C,EAAK4D,aAAiD,EAASA,EAAYC,cAA2B,IAAP7D,OAAgB,EAASA,EAAG8D,iBAE9H,OA1BS,SAAUH,GACvB,OAAOA,GAEEA,EAEO,GADFI,KAAKC,UAEFL,EAAI,GACRH,SAAS,KAEb3K,OAAO,KACJA,QAAQ,KACRA,QAAQ,KACRA,QAAQ,KACRA,QAAQ,OACPoL,QAEL,SACAP,EACZ,CAQeQ,CAAWP,GAEtB,IAAInH,EAAIoH,EAAYC,OAAOC,gBAAgB,IAAIK,WAAW,KAG1D,OAFA3H,EAAE,GAAa,GAAPA,EAAE,GAAa,GACvBA,EAAE,GAAa,GAAPA,EAAE,GAAa,IAChBG,EAAc,GAAIJ,EAAOC,EAAE4H,YAAY,GAAOd,IAAI,SAAUtD,GAC/D,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAIuD,EAAQc,EAAG,GAAIC,EAAMD,EAAG,GAChD,MAAQ,CAAC,EAAG,EAAG,EAAG,IAAI/D,SAASiD,GAAS,IAAItG,OAAOoG,EAAIiB,IAAQjB,EAAIiB,EAC3E,GAAOC,KAAK,GACZ,EC1CIC,EAA0B,WAC1B,SAASA,EAASC,GACd1L,KAAK0L,OAASA,EACd1L,KAAK2L,MAAQ,GAEb3L,KAAK4L,UAAW,EAGhB5L,KAAK6L,QAAU,EAClB,CA+PD,OA9PAJ,EAAShM,UAAUqM,SAAW,SAAUC,EAAQC,GAC5C,IAAI/E,EAAIqE,EACR,OAAOnK,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiM,GAC/B,OAAQA,EAAGzJ,OACP,KAAK,EACD,OAAIxC,KAAK6L,QAAQK,KAAK,SAAUC,GAAkB,OAAOA,EAAeC,OAASL,EAAOK,IAAO,IAE3FpM,KAAKqM,eAAeC,KAAK,oBAAoBpI,OAAO6H,EAAOK,KAAM,2CAC1D,CAAC,UAEQ/G,IAAhB0G,EAAOK,OACPL,EAAOK,KAAOzB,IACd3K,KAAKqM,eAAeC,KAAK,+EAA+EpI,OAAO6H,EAAOK,KAAM,wFAEhIL,EAAOQ,KAA8B,QAAtBtF,EAAK8E,EAAOQ,YAAyB,IAAPtF,EAAgBA,EAAK,aAC3D,CAAC,EAAsC,QAAvBqE,EAAKS,EAAOS,aAA0B,IAAPlB,OAAgB,EAASA,EAAG3L,KAAKoM,EAAQC,EAAQhM,KAAK0L,UAChH,KAAK,EAGD,OAFAO,EAAGxJ,OACHzC,KAAK6L,QAAQzI,KAAK2I,GACX,CAAC,GAEhC,EACA,EACA,EACIN,EAAShM,UAAUgN,WAAa,SAAUC,EAAYV,GAClD,IAAI/E,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIwK,EAAOuB,EACX,OAAO5J,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAED,OADAgI,EAAQxK,KAAK6L,QAAQc,UAAU,SAAUZ,GAAU,OAAOA,EAAOK,OAASM,CAAa,IACxE,IAAXlC,GACAwB,EAAOK,eAAeC,KAAK,oBAAoBpI,OAAOwI,EAAY,6CAC3D,CAAC,KAEZX,EAAS/L,KAAK6L,QAAQrB,GACtBxK,KAAK6L,QAAQe,OAAOpC,EAAO,GACpB,CAAC,EAAyC,QAA1BvD,EAAK8E,EAAOc,gBAA6B,IAAP5F,OAAgB,EAASA,EAAGtH,KAAKoM,KAC9F,KAAK,EAED,OADAT,EAAG7I,OACI,CAAC,GAEhC,EACA,EACA,EACIgJ,EAAShM,UAAUqN,MAAQ,SAAUpB,GACjC1L,KAAK4L,UAAW,EACF5L,KAAK6L,QACXtB,IAAI,SAAUwB,GAAU,IAAI9E,EAAI,OAAkC,QAA1BA,EAAK8E,EAAOc,gBAA6B,IAAP5F,OAAgB,EAASA,EAAGtH,KAAKoM,EAAQ,GAC3H/L,KAAK6L,QAAU,GACf7L,KAAK0L,OAASA,CACtB,EACID,EAAShM,UAAU2D,KAAO,SAAUwG,GAChC,IAAImD,EAAQ/M,KACZ,OAAO,IAAIwB,QAAQ,SAAUC,GACzBsL,EAAMpB,MAAMvI,KAAK,CAACwG,EAAOnI,IACzBsL,EAAMC,cAAc,EAChC,EACA,EACIvB,EAAShM,UAAUuN,cAAgB,SAAUC,GACzC,IAAIF,EAAQ/M,KACRA,KAAK4L,WAET5L,KAAK4L,UAAW,EAChBsB,WAAW,WACFH,EAAMlM,MAAMkM,EAAMpB,MAAMwB,SAASjL,KAAK,WACvC6K,EAAMnB,UAAW,EACbmB,EAAMpB,MAAM/K,OAAS,GACrBmM,EAAMC,cAAc,EAExC,EACS,EAAEC,GACX,EACIxB,EAAShM,UAAUoB,MAAQ,SAAUuM,GACjC,OAAOjM,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIiH,EAAI2C,EAAO0B,EAAI7J,EAAS4L,EAAQC,EAAUC,EAAuB/F,EAAOgG,EAAYC,EAAcC,EAAgB3B,EAAQhL,EAAG4M,EAAOC,EAAaC,EACjJ7G,EAAKiF,EAAI6B,EAAKC,EAClB,OAAO5L,EAAYnC,KAAM,SAAUgO,GAC/B,OAAQA,EAAGxL,OACP,KAAK,EACD,IAAK4K,EACD,MAAO,CAAC,GAEZnG,EAAKzD,EAAO4J,EAAM,GAAIxD,EAAQ3C,EAAG,GACjCqE,EAAK9H,EAAO4J,EAAM,GAAI3L,EAAU6J,EAAG,GAEnCtL,KAAKqM,eAAe4B,IAAI,gCAAiCrE,GACzDyD,EAASrN,KAAK6L,QAAQqC,OAAO,SAAUnC,GAAU,MAAuB,WAAhBA,EAAOQ,IAAoB,GACnFyB,EAAGxL,MAAQ,EACf,KAAK,EACDwL,EAAGtL,KAAKU,KAAK,CAAC,EAAG,EAAG,EAAG,IACvBkK,EAAWjK,EAASgK,GAASE,EAAaD,EAASxL,OACnDkM,EAAGxL,MAAQ,EACf,KAAK,EACD,OAAM+K,EAAWtL,KAAa,CAAC,EAAa,IAC5C8J,EAASwB,EAAW3L,OAERuM,QAIL,CAAC,EAAapC,EAAOoC,QAAQ9N,EAAS,GAAIuJ,KAFtC,CAAC,EAAa,GAG7B,KAAK,EAED,GAAU,QADV7I,EAAIiN,EAAGvL,QAIH,OAFAzC,KAAKqM,eAAe4B,IAAI,wDAAwD/J,OAAOpE,OAAOiM,EAAOK,MAAO,cAAclI,OAAOkK,KAAKC,UAAUzE,KAChJnI,EAAQ,CAAEmI,MAAOA,EAAOC,KAAM,EAAGC,QAAS,KACnC,CAAC,GAGRF,EAAQ7I,EACRf,KAAKqM,eAAe4B,IAAI,8CAA8C/J,OAAOpE,OAAOiM,EAAOK,MAAO,cAAclI,OAAOkK,KAAKC,UAAUzE,KAE1IoE,EAAGxL,MAAQ,EACf,KAAK,EAED,OADA+K,EAAaD,EAASxL,OACf,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAa,GAC7B,KAAK,EAGD,OAFA0F,EAAQwG,EAAGvL,OACXuE,EAAM,CAAErD,MAAO6D,GACR,CAAC,EAAa,GACzB,KAAK,EACD,IACQ+F,IAAeA,EAAWtL,OAASgK,EAAKqB,EAAS7F,SAASwE,EAAGtM,KAAK2N,EACzE,CACO,QAAE,GAAItG,EAAK,MAAMA,EAAIrD,KAAQ,CACrC,MAAO,CAAC,GACZ,KAAK,EACD6J,EAAaxN,KAAK6L,QAAQqC,OAAO,SAAUnC,GAAU,MAAuB,eAAhBA,EAAOQ,WAAyClH,IAAhB0G,EAAOQ,IAAqB,GACxHyB,EAAGxL,MAAQ,EACf,KAAK,EACDwL,EAAGtL,KAAKU,KAAK,CAAC,EAAG,GAAI,GAAI,KACzBqK,EAAepK,EAASmK,GAAaE,EAAiBD,EAAa3L,OACnEkM,EAAGxL,MAAQ,GACf,KAAK,GACD,OAAMkL,EAAezL,KAAa,CAAC,EAAa,KAChD8J,EAAS2B,EAAe9L,OAEZuM,QAIL,CAAC,EAAapC,EAAOoC,QAAQ9N,EAAS,GAAIuJ,KAFtC,CAAC,EAAa,IAG7B,KAAK,GAED,GAAU,QADV7I,EAAIiN,EAAGvL,QAIH,OAFAzC,KAAKqM,eAAe4B,IAAI,4DAA4D/J,OAAOpE,OAAOiM,EAAOK,MAAO,cAAclI,OAAOkK,KAAKC,UAAUzE,KACpJnI,EAAQ,CAAEmI,MAAOA,EAAOC,KAAM,EAAGC,QAAS,KACnC,CAAC,GAGRF,EAAQ7I,EACRf,KAAKqM,eAAe4B,IAAI,kDAAkD/J,OAAOpE,OAAOiM,EAAOK,MAAO,cAAclI,OAAOkK,KAAKC,UAAUzE,KAE9IoE,EAAGxL,MAAQ,GACf,KAAK,GAED,OADAkL,EAAiBD,EAAa3L,OACvB,CAAC,EAAa,IACzB,KAAK,GAAI,MAAO,CAAC,EAAa,IAC9B,KAAK,GAGD,OAFA6L,EAAQK,EAAGvL,OACXqL,EAAM,CAAEnK,MAAOgK,GACR,CAAC,EAAa,IACzB,KAAK,GACD,IACQD,IAAmBA,EAAezL,OAAS8L,EAAKN,EAAahG,SAASsG,EAAGpO,KAAK8N,EACrF,CACO,QAAE,GAAIK,EAAK,MAAMA,EAAInK,KAAQ,CACrC,MAAO,CAAC,GACZ,KAAK,GAaD,OAZAiK,EAAc5N,KAAK6L,QAAQqC,OAAO,SAAUnC,GAAU,MAAuB,gBAAhBA,EAAOQ,IAAyB,GAE7FvM,KAAKqM,eAAe4B,IAAI,2DAA2D/J,OAAOkK,KAAKC,UAAUzE,KACzGiE,EAAsBD,EAAYrD,IAAI,SAAUwB,GAC5C,IAAIuC,EAAajO,EAAS,CAAE,EAAEuJ,GAC9B,OAAOmC,EAAOoC,QAAQG,GAAYC,MAAM,SAAUxN,GAAK,OAAO4I,EAAY2E,EAAY,EAAGxO,OAAOiB,GAAI,EAChI,GAC6BS,QAAQgN,IAAIX,GAAqB3L,KAAK,SAAU+E,GACjD,IACIwH,EADKjL,EAAOyD,EAAI,GAAgB,IACN0C,EAAYC,EAAO,IAAK,6DACtDnI,EAAQgN,EACpC,GAC+B,CAAC,GAEhC,EACA,EACA,EACIhD,EAAShM,UAAUiP,MAAQ,WACvB,OAAOvN,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI2L,EAAOiC,EAAaC,EACpBd,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAGD,OAFAmJ,EAAQ3L,KAAK2L,MACb3L,KAAK2L,MAAQ,GACN,CAAC,EAAanK,QAAQgN,IAAI7C,EAAMpB,IAAI,SAAU6C,GAAQ,OAAOL,EAAMlM,MAAMuM,EAAQ,KAC5F,KAAK,EAMD,OALAnG,EAAGxE,OACHmL,EAAc5N,KAAK6L,QAAQqC,OAAO,SAAUnC,GAAU,MAAuB,gBAAhBA,EAAOQ,IAAyB,GAC7FsB,EAAsBD,EAAYrD,IAAI,SAAUwB,GAC5C,OAAOA,EAAO2C,OAAS3C,EAAO2C,OAC1D,GAC+B,CAAC,EAAalN,QAAQgN,IAAIX,IACrC,KAAK,EAED,OADA5G,EAAGxE,OACI,CAAC,GAEhC,EACA,EACA,EACIgJ,EAAShM,UAAUkP,kBAAoB,SAAUC,GAC7C5O,KAAK6L,QAAQgD,QAAQ,SAAU9C,GAC3B,IAAI9E,EAKsC,QAAnCA,EAAK8E,EAAO4C,yBAAsC,IAAP1H,GAAyBA,EAAGtH,KAAKoM,EAAQ6C,EACvG,EACA,EACInD,EAAShM,UAAUqP,mBAAqB,SAAUC,GAC9C/O,KAAK6L,QAAQgD,QAAQ,SAAU9C,GAC3B,IAAI9E,EAKuC,QAApCA,EAAK8E,EAAO+C,0BAAuC,IAAP7H,GAAyBA,EAAGtH,KAAKoM,EAAQgD,EACxG,EACA,EACItD,EAAShM,UAAUuP,gBAAkB,SAAUC,GAC3CjP,KAAK6L,QAAQgD,QAAQ,SAAU9C,GAC3B,IAAI9E,EAKoC,QAAjCA,EAAK8E,EAAOiD,uBAAoC,IAAP/H,GAAyBA,EAAGtH,KAAKoM,EAAQkD,EACrG,EACA,EACIxD,EAAShM,UAAUyP,QAAU,WACzBlP,KAAK6L,QAAQgD,QAAQ,SAAU9C,GAC3B,IAAI9E,EAK4B,QAAzBA,EAAK8E,EAAOmD,eAA4B,IAAPjI,GAAyBA,EAAGtH,KAAKoM,EACrF,EACA,EACWN,CACX,ICrQW0D,EAAsB,SAAUC,EAAUC,GAEjD,OADoBhP,EAASA,EAAS,CAAE,EAAEgP,GAAe,CAAEC,WAAYlP,EAAiBmP,SAAUC,gBAAiBJ,EAAStH,qBAEhI,ECVW2H,EAAgB,SAAUC,GAAa,MAAQ,CACtDC,QAASD,GAAalO,QAAQC,UAC7B,ECMDmO,EAA+B,WAC/B,SAASA,EAAcxD,QACN,IAATA,IAAmBA,EAAO,YAC9BpM,KAAK6P,cAAe,EACpB7P,KAAK8P,SAAU,EACf9P,KAAK+P,EAAI,GACT/P,KAAKgQ,UAAY,GACjBhQ,KAAKiQ,SAAWjQ,KAAKkQ,MAAMC,KAAKnQ,MAChCA,KAAKoQ,SAAW,IAAI3E,EAASzL,MAC7BA,KAAKoM,KAAOA,CACf,CAqQD,OApQAwD,EAAcnQ,UAAU4Q,MAAQ,SAAUrE,GACtC,OAAO7K,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAID,OAHAxC,KAAKgM,OAASA,EACdhM,KAAKoQ,SAAStD,MAAM9M,MACpBA,KAAKoQ,SAAS/D,eAAiBrM,KAAKgM,OAAOK,eACpC,CAAC,EAAarM,KAAKsQ,mBAAmB,MACjD,KAAK,EAGD,OAFArJ,EAAGxE,OACHzC,KAAK8P,SAAU,EACR,CAAC,GAEhC,EACA,EACA,EACIF,EAAcnQ,UAAU6Q,mBAAqB,SAAUC,GACnD,OAAOpP,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIwQ,EAAiBC,EAAmBC,EAAqBC,EAAgBC,EAAKpJ,EAC9ER,EAAKC,EACT,OAAO9E,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EACDgO,EAAkBxQ,KAAKuQ,GACvBvQ,KAAKuQ,GAAa,GAClBjF,EAAG9I,MAAQ,EACf,KAAK,EACD8I,EAAG5I,KAAKU,KAAK,CAAC,EAAG,EAAG,EAAG,KACvBqN,EAAoBpN,EAASmN,GAAkBE,EAAsBD,EAAkB3O,OACvFwJ,EAAG9I,MAAQ,EACf,KAAK,EACD,OAAMkO,EAAoBzO,KAAa,CAAC,EAAa,IACrD0O,EAAiBD,EAAoB9O,OACrCgP,EAAMD,MACO,YAAaC,EACnB,CAAC,EAAaA,EAAIjB,SADc,CAAC,EAAa,IAEzD,KAAK,EAED,OADArE,EAAG7I,OACI,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAamO,GAC7B,KAAK,EACDtF,EAAG7I,OACH6I,EAAG9I,MAAQ,EACf,KAAK,EAED,OADAkO,EAAsBD,EAAkB3O,OACjC,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAa,IAC7B,KAAK,EAGD,OAFA0F,EAAQ8D,EAAG7I,OACXuE,EAAM,CAAErD,MAAO6D,GACR,CAAC,EAAa,IACzB,KAAK,EACD,IACQkJ,IAAwBA,EAAoBzO,OAASgF,EAAKwJ,EAAkBhJ,SAASR,EAAGtH,KAAK8Q,EACpG,CACO,QAAE,GAAIzJ,EAAK,MAAMA,EAAIrD,KAAQ,CACrC,MAAO,CAAC,GACZ,KAAK,GACD,OAAK3D,KAAKuQ,GAAW3P,OACd,CAAC,EAAaZ,KAAKsQ,mBAAmBC,IADT,CAAC,EAAa,IAEtD,KAAK,GACDjF,EAAG7I,OACH6I,EAAG9I,MAAQ,GACf,KAAK,GAAI,MAAO,CAAC,GAErC,EACA,EACA,EACIoN,EAAcnQ,UAAUyQ,MAAQ,SAAUW,EAAYC,EAAiBzB,GACnE,IAAIzF,EFtFkB,SAAUiH,EAAYC,EAAiBzB,GAEjE,OAAOhP,EAASA,EAASA,EAAS,CAAE,EADE,iBAAfwQ,EAA0B,CAAEvB,WAAYuB,GAAeA,GAC5BxB,GAAgByB,GAAmB,CAAEC,iBAAkBD,GAC7G,CEmFoBE,CAAiBH,EAAYC,EAAiBzB,GAC1D,OAAOI,EAAczP,KAAKiR,SAASrH,GAC3C,EACIgG,EAAcnQ,UAAU2P,SAAW,SAAUA,EAAUC,GACnD,IAAIzF,EAAQuF,EAAoBC,EAAUC,GAC1C,OAAOI,EAAczP,KAAKiR,SAASrH,GAC3C,EACIgG,EAAcnQ,UAAUyR,cAAgB,SAAUC,EAAWC,EAAWhC,EAAUC,GAC9E,IAAIzF,EFtF0B,SAAUuH,EAAWC,EAAWhC,EAAUC,GAC5E,IAAIpI,EAIJ,OAHoB5G,EAASA,EAAS,CAAA,EAAIgP,GAAe,CAAEC,WAAYlP,EAAiBiR,eAAgBC,iBAAkBlC,EAAStH,oBAAqByJ,QAAStK,EAAK,CAAE,EAChKA,EAAGkK,GAAaC,EAChBnK,IAEZ,CEgFoBuK,CAAyBL,EAAWC,EAAWhC,EAAUC,GACrE,OAAOI,EAAczP,KAAKiR,SAASrH,GAC3C,EACIgG,EAAcnQ,UAAUgS,SAAW,SAAUN,EAAWC,EAAW/B,GAC/D,IAAIzF,EFnFkB,SAAUuH,EAAWC,EAAW/B,GAC1D,IAAIpI,EACAmI,EAAW,IAAI1H,EAKnB,OAJA0H,EAASrH,IAAIoJ,EAAWC,GACP/Q,EAASA,EAAS,CAAA,EAAIgP,GAAe,CAAEC,WAAYlP,EAAiBmP,SAAUC,gBAAiBJ,EAAStH,oBAAqByJ,QAAStK,EAAK,CAAE,EACtJA,EAAGkK,GAAaC,EAChBnK,IAEZ,CE2EoByK,CAAiBP,EAAWC,EAAW/B,GACnD,OAAOI,EAAczP,KAAKiR,SAASrH,GAC3C,EACIgG,EAAcnQ,UAAUkS,QAAU,SAAUA,EAAStC,GACjD,IAAIzF,EF9EoB,SAAU+H,EAAStC,GAC/C,OAAOhP,EAASA,EAAS,GAAIgP,GAAe,CAAEC,WAAYlP,EAAiBwR,QAASb,iBAAkBY,EAAQE,sBAClH,CE4EoBC,CAAmBH,EAAStC,GACxC,OAAOI,EAAczP,KAAKiR,SAASrH,GAC3C,EACIgG,EAAcnQ,UAAUqJ,IAAM,SAAUiD,GACpC,OAAK/L,KAAK8P,QAIH9P,KAAK+R,WAAWhG,IAHnB/L,KAAK+P,EAAE3M,KAAKpD,KAAK+R,WAAW5B,KAAKnQ,KAAM+L,IAChC0D,IAGnB,EACIG,EAAcnQ,UAAUsS,WAAa,SAAUhG,GAC3C,OAAO0D,EAAczP,KAAKoQ,SAAStE,SAASC,EAAQ/L,KAAKgM,QACjE,EACI4D,EAAcnQ,UAAUmJ,OAAS,SAAU8D,GACvC,OAAK1M,KAAK8P,QAIH9P,KAAKgS,cAActF,IAHtB1M,KAAK+P,EAAE3M,KAAKpD,KAAKgS,cAAc7B,KAAKnQ,KAAM0M,IACnC+C,IAGnB,EACIG,EAAcnQ,UAAUuS,cAAgB,SAAUtF,GAC9C,OAAO+C,EAAczP,KAAKoQ,SAAS3D,WAAWC,EAAY1M,KAAKgM,QACvE,EACI4D,EAAcnQ,UAAUwS,qBAAuB,SAAUrI,EAAOsI,GAC5D,IAAKlS,KAAK8P,QACN,OAAOoC,EAASvI,EAAYC,EAAO,EC5HX,2BD8HvB5J,KAAKmS,QAAQvI,GAAO1H,KAAKgQ,EACtC,EACItC,EAAcnQ,UAAUwR,SAAW,SAAUrH,GACzC,OAAOzI,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI+M,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAKjH,KAAK8P,QAKH,CAAC,EAAc9P,KAAKmS,QAAQvI,IAJxB,CAAC,EAAc,IAAIpI,QAAQ,SAAUC,GACpCsL,EAAMiD,UAAU5M,KAAK2J,EAAMkF,qBAAqB9B,KAAKpD,EAAOnD,EAAOnI,GACtE,GAGzB,EACA,EACA,EA0BImO,EAAcnQ,UAAU2S,kCAAoC,SAAUC,GAClE,IAAIC,EAAoB,CAAA,EACxB,QAAuBjN,IAAnBgN,EACA,OAAOC,EAGX,IAAIC,EAAkB,CAAA,EAqCtB,OApCAnT,OAAOwH,KAAKyL,GAAgBxD,QAAQ,SAAUhI,GACrCzH,OAAOoT,OAAOrS,GAAmBoH,SAASV,KAI3C0L,EAAgB1L,GAAOwL,EAAexL,GAEtD,GACQ4C,EAA0BoF,QAAQ,SAAUzF,GAExC,GAAKhK,OAAOwH,KAAKyL,GAAgB9K,SAAS6B,GAA1C,CAGA,IAAIqJ,EAAeJ,EAAejJ,GAClC,OAAQA,GACJ,KAAKjJ,EAAkBgJ,UAGnB/J,OAAOwH,KAAK0L,GAAmBzD,QAAQ,SAAU6D,UACtCJ,EAAkBI,EACjD,GACoB,MACJ,KAAKvS,EAAkB8I,MACnB7J,OAAOwH,KAAK6L,GAAc5D,QAAQ,SAAU6D,UACjCJ,EAAkBI,EACjD,GACoB,MACJ,KAAKvS,EAAkB8H,IACnB7I,OAAOkB,OAAOgS,EAAmBG,GAjB9B,CAoBvB,GAIQrT,OAAOkB,OAAOgS,EAAmBC,GAC1BD,CACf,EACI1C,EAAcnQ,UAAU0S,QAAU,SAAUvI,GACxC,OAAOzI,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIqS,EAAwBvE,EAAKhE,EAAS9H,EAC1C,OAAOG,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAGD,OAFAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IAElBpD,KAAKgM,OAAOiD,OACL,CAAC,EAActF,EAAYC,EAAO,EC/NxC,wCDiODA,EAAM0F,aAAelP,EAAiBmP,WACtC8C,EAAiBrS,KAAKoS,kCAAkCxI,EAAM4F,iBAC9DxP,KAAKoQ,SAASzB,kBAAkB,CAAE0D,eAAgBA,KAE/C,CAAC,EAAarS,KAAKoQ,SAAShN,KAAKwG,KAC5C,KAAK,EAOD,OALgB,OADhB5H,EAASiF,EAAGxE,QACLoH,KACD7J,KAAKgM,OAAOK,eAAe4B,IAAIjM,EAAO8H,SACtB,MAAhB9H,EAAO6H,KACH7J,KAAKgM,OAAOK,eAAeC,KAAKtK,EAAO8H,SACvC9J,KAAKgM,OAAOK,eAAe1I,MAAM3B,EAAO8H,SAC3C,CAAC,EAAc9H,GAC1B,KAAK,EAKD,OAJA8L,EAAM7G,EAAGxE,OACTqH,EAAUhK,OAAOgO,GACjB9N,KAAKgM,OAAOK,eAAe1I,MAAMmG,GAE1B,CAAC,EADR9H,EAAS2H,EAAYC,EAAO,EAAGE,IAEnC,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACI8F,EAAcnQ,UAAUkT,UAAY,SAAU1D,GACrCjP,KAAK8P,QAIV9P,KAAK4S,WAAW3D,GAHZjP,KAAK+P,EAAE3M,KAAKpD,KAAK4S,WAAWzC,KAAKnQ,KAAM6S,QAAQ5D,IAI3D,EACIW,EAAcnQ,UAAUmT,WAAa,SAAU3D,GACvCjP,KAAKgM,OAAOiD,SAAWA,IACvBjP,KAAKoQ,SAASpB,gBAAgBC,GAC9BjP,KAAKgM,OAAOiD,OAAS4D,QAAQ5D,GAEzC,EACIW,EAAcnQ,UAAUiP,MAAQ,WAC5B,OAAOe,EAAczP,KAAKoQ,SAAS1B,QAC3C,EACIkB,EAAcnQ,UAAUsM,OAAS,SAAUK,GACvC,IAAIL,EAAS/L,KAAKoQ,SAASvE,QAAQiH,KAAK,SAAU/G,GAAU,OAAOA,EAAOK,OAASA,CAAO,GAC1F,QAAe/G,IAAX0G,EAIJ,OAAOA,EAHH/L,KAAKgM,OAAOK,eAAe0G,MAAM,gCAAgC7O,OAAOkI,GAIpF,EACIwD,EAAcnQ,UAAUoM,QAAU,SAAUmH,GACxC,OAAOhT,KAAKoQ,SAASvE,QAAQqC,OAAO,SAAUnC,GAAU,OAAOA,aAAkBiH,CAAY,EACrG,EACWpD,CACX,INtRIqD,EAAyB,WACzB,SAASA,IACLjT,KAAKkT,UAAY,GACjBlT,KAAKmT,SAAW,EAChBnT,KAAKoT,MAAQ,CAChB,CAqDD,OApDAH,EAAQxT,UAAU4T,aAAe,SAAUH,GAEvC,OADAlT,KAAKkT,UAAYA,EACVlT,IACf,EACIiT,EAAQxT,UAAU6T,YAAc,SAAUH,GAItC,OAHIA,EAAW,IACXnT,KAAKmT,SAAWA,GAEbnT,IACf,EACIiT,EAAQxT,UAAU8T,SAAW,SAAUH,GAEnC,OADApT,KAAKoT,MAAQA,EACNpT,IACf,EACIiT,EAAQxT,UAAU+T,eAAiB,SAAUC,GAEzC,OADAzT,KAAKyT,YAAcA,EACZzT,IACf,EACIiT,EAAQxT,UAAUiU,YAAc,SAAUC,GAEtC,OADA3T,KAAK2T,SAAWA,EACT3T,IACf,EACIiT,EAAQxT,UAAUmU,WAAa,SAAUjC,GAErC,OADA3R,KAAK2R,QAAUA,EACR3R,IACf,EACIiT,EAAQxT,UAAUoU,WAAa,SAAUC,GAErC,OADA9T,KAAK8T,QAAUA,EACR9T,IACf,EACIiT,EAAQxT,UAAUsU,cAAgB,SAAUC,GAExC,OADAhU,KAAKgU,WAAaA,EACXhU,IACf,EACIiT,EAAQxT,UAAUwU,mBAAqB,SAAUtN,GAI7C,OAHID,EAAcC,KACd3G,KAAK2G,WAAaA,GAEf3G,IACf,EACIiT,EAAQxT,UAAUoS,mBAAqB,WACnC,IAAIf,EAAkB9Q,KAAK2G,WAAatG,EAAS,CAAA,EAAIL,KAAK2G,YAAc,GASxE,OARAmK,EAAgBpH,EAAgBwK,oBAAsBlU,KAAKkT,UAC3DpC,EAAgBpH,EAAgByK,kBAAoBnU,KAAKmT,SACzDrC,EAAgBpH,EAAgB0K,eAAiBpU,KAAKoT,MACtDtC,EAAgBpH,EAAgB2K,cAAgBrU,KAAKyT,YACrD3C,EAAgBpH,EAAgB4K,kBAAoBtU,KAAK2T,SACzD7C,EAAgBpH,EAAgBkI,SAAW5R,KAAK2R,QAChDb,EAAgBpH,EAAgB6K,SAAWvU,KAAK8T,QAChDhD,EAAgBpH,EAAgB8K,aAAexU,KAAKgU,WAC7ClD,CACf,EACWmC,CACX,KAGA,SAAWvJ,GACPA,EAAoC,mBAAI,aACxCA,EAAkC,iBAAI,YACtCA,EAA+B,cAAI,SACnCA,EAA8B,aAAI,eAClCA,EAAkC,iBAAI,YACtCA,EAAyB,QAAI,WAC7BA,EAAyB,QAAI,WAC7BA,EAA6B,YAAI,aACpC,CATD,CASGA,IAAoBA,EAAkB,CAAA,IQtElC,ICHI+K,GACX,SAAWA,GACPA,EAASA,EAAe,KAAI,GAAK,OACjCA,EAASA,EAAgB,MAAI,GAAK,QAClCA,EAASA,EAAe,KAAI,GAAK,OACjCA,EAASA,EAAkB,QAAI,GAAK,UACpCA,EAASA,EAAgB,MAAI,GAAK,OACrC,CAND,CAMGA,IAAaA,EAAW,CAAA,ICN3B,IAAIC,EAAS,oBACTC,EAAwB,WACxB,SAASA,IACL3U,KAAK4U,SAAWH,EAASI,IAC5B,CAiDD,OAhDAF,EAAOlV,UAAUqV,QAAU,WACvB9U,KAAK4U,SAAWH,EAASI,IACjC,EACIF,EAAOlV,UAAUsV,OAAS,SAAUH,QACf,IAAbA,IAAuBA,EAAWH,EAASO,MAC/ChV,KAAK4U,SAAWA,CACxB,EACID,EAAOlV,UAAUwO,IAAM,WAEnB,IADA,IAAIgH,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAErBlV,KAAK4U,SAAWH,EAASU,SAG7BC,QAAQnH,IAAI,GAAG/J,OAAOwQ,EAAQ,WAAWxQ,OAAO+Q,EAAKzJ,KAAK,MAClE,EACImJ,EAAOlV,UAAU6M,KAAO,WAEpB,IADA,IAAI2I,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAErBlV,KAAK4U,SAAWH,EAASO,MAG7BI,QAAQ9I,KAAK,GAAGpI,OAAOwQ,EAAQ,YAAYxQ,OAAO+Q,EAAKzJ,KAAK,MACpE,EACImJ,EAAOlV,UAAUkE,MAAQ,WAErB,IADA,IAAIsR,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAErBlV,KAAK4U,SAAWH,EAASY,OAG7BD,QAAQzR,MAAM,GAAGO,OAAOwQ,EAAQ,aAAaxQ,OAAO+Q,EAAKzJ,KAAK,MACtE,EACImJ,EAAOlV,UAAUsT,MAAQ,WAErB,IADA,IAAIkC,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAErBlV,KAAK4U,SAAWH,EAASa,OAI7BF,QAAQnH,IAAI,GAAG/J,OAAOwQ,EAAQ,aAAaxQ,OAAO+Q,EAAKzJ,KAAK,MACpE,EACWmJ,CACX,ICpDWY,EAAmB,WAAc,MAAQ,CAChDC,gBAAiB,GACjBC,eAAgB,IAChBC,oBAAqB,IACrBC,aAAcrR,EACdsQ,SAAUH,EAASO,KACnB3I,eAAgB,IAAIsI,EACpBiB,SAAS,EACT3G,QAAQ,EACR4G,UAAWtR,EACXuR,WAAY,KACZC,UAAU,IAEVC,EAAwB,WACxB,SAASA,EAAOC,GACZ,IAAIhP,EAAIqE,EAAIW,EAAI8B,EAChB/N,KAAKkW,SAAU,EACf,IAAIC,EAAgBZ,IACpBvV,KAAKoW,OAASH,EAAQG,OACtBpW,KAAK0V,oBAA6D,QAAtCzO,EAAKgP,EAAQP,2BAAwC,IAAPzO,EAAgBA,EAAKkP,EAAcT,oBAC7G1V,KAAKwV,gBAAkBS,EAAQT,iBAAmBW,EAAcX,gBAChExV,KAAKyV,eAAiBQ,EAAQR,gBAAkBU,EAAcV,eAC9DzV,KAAK2V,aAAeM,EAAQN,cAAgBQ,EAAcR,aAC1D3V,KAAKqM,eAAiB4J,EAAQ5J,gBAAkB8J,EAAc9J,eAC9DrM,KAAK4U,SAAuC,QAA3BtJ,EAAK2K,EAAQrB,gBAA6B,IAAPtJ,EAAgBA,EAAK6K,EAAcvB,SACvF5U,KAAKqW,YAAcJ,EAAQI,YAC3BrW,KAAKsW,KAAOL,EAAQK,KACpBtW,KAAKuW,kBAAoBN,EAAQM,kBACjCvW,KAAK4V,aAA8BvQ,IAApB4Q,EAAQL,QAAwBK,EAAQL,QAAUO,EAAcP,QAC/E5V,KAAKiP,OAAmC,QAAzBhD,EAAKgK,EAAQhH,cAA2B,IAAPhD,EAAgBA,EAAKkK,EAAclH,OACnFjP,KAAK6V,UAAYI,EAAQJ,UACzB7V,KAAK8V,WAAaG,EAAQH,YAAcK,EAAcL,WACtD9V,KAAKwW,gBAAkBP,EAAQO,gBAC/BxW,KAAKyW,kBAAoBR,EAAQQ,kBACjCzW,KAAK+V,SAAuC,QAA3BhI,EAAKkI,EAAQF,gBAA6B,IAAPhI,EAAgBA,EAAKoI,EAAcJ,SACvF/V,KAAKqM,eAAe0I,OAAO/U,KAAK4U,UAChC,IAAI8B,EAAeC,EAAmBV,EAAQJ,UAAWI,EAAQH,WAAYG,EAAQF,UACrF/V,KAAK8V,WAAaY,EAAaZ,WAC/B9V,KAAK6V,UAAYa,EAAab,SACjC,CAWD,OAVAzW,OAAOwX,eAAeZ,EAAOvW,UAAW,SAAU,CAC9CoX,IAAK,WACD,OAAO7W,KAAKkW,OACf,EACDnO,IAAK,SAAUkH,GACXjP,KAAKkW,QAAUjH,CAClB,EACD6H,YAAY,EACZC,cAAc,IAEXf,CACX,IAEWgB,EAAe,SAAUlB,EAAYC,GAC5C,MAAmB,OAAfD,EACOC,EhBnD4B,qCAFN,yCgBuD1BA,EhBtD6B,mCgBsDWxR,CACnD,EACWoS,EAAqB,SAAUd,EAAWC,EAAYC,GAI7D,QAHkB,IAAdF,IAAwBA,EAAY,SACrB,IAAfC,IAAyBA,EAAaP,IAAmBO,iBAC5C,IAAbC,IAAuBA,EAAWR,IAAmBQ,UACrDF,EACA,MAAO,CAAEA,UAAWA,EAAWC,gBAAYzQ,GAE/C,IAAI4R,EAAc,CAAC,KAAM,MAAM1P,SAASuO,GAAcA,EAAaP,IAAmBO,WACtF,MAAO,CACHA,WAAYmB,EACZpB,UAAWmB,EAAaC,EAAalB,GAE7C,EACImB,EAAiC,WACjC,SAASA,IACLlX,KAAKmX,IAAM,CACPC,QAAS,CACLC,UAAW,CAAE,GAGxB,CAID,OAHAH,EAAgBzX,UAAU6X,gBAAkB,SAAUzQ,EAAKjF,GACvD5B,KAAKmX,IAAIC,QAAQC,UAAUxQ,GAAOjF,CAC1C,EACWsV,CACX,IClFO,SAASK,EAAoB1N,GAChC,OAAOA,GAAQ,KAAOA,EAAO,GACjC,CCLO,IAAI2N,GAAgB,SAAUC,GAGjC,YAFoB,IAAhBA,IAA0BA,EAAc,KAChC,IAAIpC,OAAQqC,OAAS,IAE5BC,MAAM,MACN1T,MAAM,EAAIwT,GACVlN,IAAI,SAAUqN,GAAQ,OAAOA,EAAKC,MAAO,EAClD,EAEWC,GAAqB,SAAUpM,GAAU,OAAO,WACvD,IAAIzE,EAAK5G,EAAS,CAAE,EAAEqL,EAAOM,QAC7B,MAAO,CACH+L,OAF2C9Q,EAAGoF,eAG9CuI,SAHyE3N,EAAG2N,SAKpF,GAEWoD,GAAuB,SAAUC,EAAKC,GAC7C,IAAIlR,EAAKC,EAETiR,GADAA,EAAOA,EAAKhN,QAAQ,aAAc,QACtBA,QAAQ,MAAO,IAC3B,IACI,IAAK,IAAII,EAAKjI,EAAS6U,EAAKP,MAAM,MAAO1L,EAAKX,EAAGxJ,QAASmK,EAAGhK,KAAMgK,EAAKX,EAAGxJ,OAAQ,CAC/E,IAAIqW,EAAOlM,EAAGrK,MACd,KAAIuW,KAAQF,GAIR,OAHAA,EAAMA,EAAIE,EAKjB,CACJ,CACD,MAAO3Q,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQyE,IAAOA,EAAGhK,OAASgF,EAAKqE,EAAG7D,SAASR,EAAGtH,KAAK2L,EACnD,CACO,QAAE,GAAItE,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACD,OAAOsU,CACX,EACWG,GAAkB,SAAU1M,EAAQ2M,GAAS,OAAO,WAC3D,IAAIvK,EAAK7G,EACLqR,EAAM,CAAA,EACV,IACI,IAAK,IAAIC,EAAUlV,EAASgV,GAAQG,EAAYD,EAAQzW,QAAS0W,EAAUvW,KAAMuW,EAAYD,EAAQzW,OAAQ,CACzG,IAAIoW,EAAOM,EAAU5W,MACrB0W,EAAIJ,GAAQF,GAAqBtM,EAAQwM,EAC5C,CACJ,CACD,MAAOvK,GAASG,EAAM,CAAEnK,MAAOgK,EAAU,CACjC,QACJ,IACQ6K,IAAcA,EAAUvW,OAASgF,EAAKsR,EAAQ9Q,SAASR,EAAGtH,KAAK4Y,EACtE,CACO,QAAE,GAAIzK,EAAK,MAAMA,EAAInK,KAAQ,CACxC,CACD,OAAO2U,CACX,GACWG,GAAe,SAAUC,EAAIC,EAAQC,EAAcC,EAAWC,GAErE,YADkB,IAAdA,IAAwBA,EAAY,MACjC,WAEH,IADA,IAAI7D,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAEzB,IAAIjO,EAAK2R,IAAgBb,EAAS9Q,EAAG8Q,OAAQnD,EAAW3N,EAAG2N,SAE3D,GAAKA,GAAYA,EAAWH,EAASa,QAAWV,IAAamD,EACzD,OAAOW,EAAG7X,MAAMiY,EAAW7D,GAE/B,IAAI8D,EAAe,CACfxM,KAAM,uBACNH,KAAMuM,EACN1D,KAAMA,EACN+D,WAAYxB,GAAc,GAC1ByB,KAAM,CACFC,OAAO,IAAIC,MAAOC,eAEtBC,OAAQ,CAAE,GAEVR,GAAaE,EAAaM,SAC1BN,EAAaM,OAAOhM,OAASwL,KAEjC,IAAI7W,EAAS0W,EAAG7X,MAAMiY,EAAW7D,GAsBjC,OArBIjT,GAAUA,EAAO2N,QAEjB3N,EAAO2N,QAAQzN,KAAK,WACZ2W,GAAaE,EAAaM,SAC1BN,EAAaM,OAAOC,MAAQT,KAE5BE,EAAaE,OACbF,EAAaE,KAAKM,KAAM,IAAIJ,MAAOC,eAEvCrB,EAAOhF,MAAM3E,KAAKC,UAAU0K,EAAc,KAAM,GAChE,IAGgBF,GAAaE,EAAaM,SAC1BN,EAAaM,OAAOC,MAAQT,KAE5BE,EAAaE,OACbF,EAAaE,KAAKM,KAAM,IAAIJ,MAAOC,eAEvCrB,EAAOhF,MAAM3E,KAAKC,UAAU0K,EAAc,KAAM,KAE7C/W,CACf,CACA,EC/FO,SAASwX,GAAsBlB,GAClC,IAAImB,EAAqB,GACzB,IACQ,SAAUnB,IACVmB,EAAqBrL,KAAKC,UAAUiK,EAAIlW,KAAM,KAAM,GAE3D,CACD,MAAO6E,GAEN,CACD,OAAOwS,CACX,CACA,IAAIC,GAA6B,WAC7B,SAASA,EAAYC,GACjB3Z,KAAKoM,KAAO,YACZpM,KAAKuM,KAAO,cACZvM,KAAK4Z,aAAe,IACpB5Z,KAAK6Z,gBAAkB,IACvB7Z,KAAK8Z,WAAa,GAKlB9Z,KAAK+Z,WAAa,KAElB/Z,KAAKga,iBAAmB,EAGxBha,KAAKia,QAAU,KACfja,KAAK2L,MAAQ,GACb3L,KAAKka,kBAAoBP,aAAyC,EAASA,EAAQO,iBACtF,CA2VD,OA1VAR,EAAYja,UAAU+M,MAAQ,SAAUR,GACpC,IAAI/E,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIma,EACApN,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAGD,OAFAxC,KAAKgM,OAASA,EACdhM,KAAK8Z,WAAa,GAAG5V,OAAOG,EAAgB,KAAKH,OAAOlE,KAAKgM,OAAOoK,OAAOgE,UAAU,EAAG,KACjF,CAAC,EAAqD,QAAtCnT,EAAKjH,KAAKgM,OAAOwK,uBAAoC,IAAPvP,OAAgB,EAASA,EAAG4P,IAAI7W,KAAK8Z,aAC9G,KAAK,EAKD,OAJAK,EAAS7O,EAAG7I,SACE0X,EAAOvZ,OAAS,GACrBY,QAAQgN,IAAI2L,EAAO5P,IAAI,SAAUX,GAAS,OAAOmD,EAAMoB,QAAQvE,EAAS,IAAG2E,QAE7E,CAAC,EAAc/M,QAAQC,aAAQ4D,IAE9D,EACA,EACA,EACIqU,EAAYja,UAAU0O,QAAU,SAAUvE,GACtC,IAAImD,EAAQ/M,KAKZ,OAHK4J,EAAMyQ,YACPzQ,EAAMyQ,UAAY1P,KAEf,IAAInJ,QAAQ,SAAUC,GACzB,IAAIkY,EAAU,CACV/P,MAAOA,EACP0Q,SAAU,EACVpI,SAAU,SAAUlQ,GAAU,OAAOP,EAAQO,EAAU,EACvDiL,QAAS,GAEbF,EAAMpB,MAAMvI,KAAKuW,GACjB5M,EAAMwN,SAASxN,EAAMf,OAAO0J,qBAC5B3I,EAAMyN,YAClB,EACA,EACId,EAAYja,UAAUgb,kCAAoC,SAAUC,GAChE,IAAI3N,EAAQ/M,KACZ,OAAO0a,EAAKxM,OAAO,SAAUyL,GAEzB,OADAA,EAAQW,UAAY,EAChBX,EAAQW,SAAWvN,EAAMf,OAAOwJ,kBAG/BzI,EAAM4N,eAAe,CAAChB,GAAU,IP3FP,+CO4FvB,EACnB,EACA,EACID,EAAYja,UAAUmb,eAAiB,SAAUF,GAC7C,IAAI3N,EAAQ/M,KACZ0a,EAAK7L,QAAQ,SAAU8K,GACnB5M,EAAMwN,SAA6B,IAApBZ,EAAQ1M,QAAgBF,EAAMf,OAAO0J,oBAAsBiE,EAAQ1M,QAC9F,EACA,EAKIyM,EAAYja,UAAU8a,SAAW,SAAUtN,GACvC,IAAIF,EAAQ/M,KACZ,IAAIA,KAAKgM,OAAO4J,QAGhB,OAAwB,OAApB5V,KAAK+Z,YAAwB/Z,KAAK+Z,YAAc9M,EAAUjN,KAAKga,kBAC3Dha,KAAK+Z,YACLc,aAAa7a,KAAK+Z,YAEtB/Z,KAAKga,iBAAmB/M,OACxBjN,KAAK+Z,WAAa7M,WAAW,WACzBH,EAAMpB,MAAQoB,EAAMpB,MAAMpB,IAAI,SAAUoP,GAEpC,OADAA,EAAQ1M,QAAU,EACX0M,CAC3B,GACqB5M,EAAM2B,OAAM,EACpB,EAAEzB,UAXP,CAcR,EAEIyM,EAAYja,UAAUqb,cAAgB,WAClC9a,KAAK+Z,WAAa,KAClB/Z,KAAKga,iBAAmB,CAChC,EAEIN,EAAYja,UAAUiP,MAAQ,SAAUqM,GAEpC,YADiB,IAAbA,IAAuBA,GAAW,GAC/B5Z,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI0a,EAAMM,EACNjO,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OAAIxC,KAAKgM,OAAO4J,SACZ5V,KAAK8a,gBACL9a,KAAKgM,OAAOK,eAAe0G,MAAM,iCAC1B,CAAC,IAER/S,KAAKia,SACLja,KAAK8a,gBACL9a,KAAKgM,OAAOK,eAAe0G,MAAM,2DAC1B,CAAC,KAEZ/S,KAAKia,QAAUja,KAAK+Z,WACpB/Z,KAAK8a,gBACLJ,EAAO,GACPM,EAAQ,GACRhb,KAAK2L,MAAMkD,QAAQ,SAAU8K,GAAW,OAA4B,IAApBA,EAAQ1M,QAAgByN,EAAKtX,KAAKuW,GAAWqB,EAAM5X,KAAKuW,EAAU,GNzJ7GsB,EM0JWP,EN1JNQ,EM0JYlb,KAAKgM,OAAOyJ,eNzJlD0F,EAAYnQ,KAAKoQ,IAAIF,EAAM,GM4JJ,CAAC,EN3JrBD,EAAII,OAAO,SAAUC,EAAQC,EAAS/Q,GACzC,IAAIgR,EAAaxQ,KAAKyQ,MAAMjR,EAAQ2Q,GAKpC,OAJKG,EAAOE,KACRF,EAAOE,GAAc,IAEzBF,EAAOE,GAAYpY,KAAKmY,GACjBD,CACV,EAAE,IMoJ8CD,OAAO,SAAU1L,EAAS+L,GAAS,OAAOva,EAAU4L,OAAO,OAAQ,EAAQ,WAChG,OAAO5K,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAAG,MAAO,CAAC,EAAamN,GAC7B,KAAK,EAED,OADA1I,EAAGxE,OACI,CAAC,EAAazC,KAAK2b,KAAKD,EAAOX,IAC1C,KAAK,EAAG,MAAO,CAAC,EAAc9T,EAAGxE,QAEzE,EAC6B,EAAE,EAAIjB,QAAQC,aACvB,KAAK,EAOD,OAJAwF,EAAGxE,OAEHzC,KAAKia,QAAU,KACfja,KAAK4a,eAAe5a,KAAK2L,OAClB,CAAC,GN/Kb,IAAUsP,EAAKC,EAC1BC,CMgLR,EACA,EACA,EACIzB,EAAYja,UAAUkc,KAAO,SAAUjB,EAAMK,GACzC,IAAI9T,EAEJ,YADiB,IAAb8T,IAAuBA,GAAW,GAC/B5Z,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI4b,EAAS/F,EAAWyC,EAAKtR,EAAK6U,EAClC,OAAO1Z,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EACD,IAAKxC,KAAKgM,OAAOoK,OACb,MAAO,CAAC,EAAcpW,KAAK2a,eAAeD,EAAM,IP5LvC,0CO8LbkB,EAAU,CACNE,QAAS9b,KAAKgM,OAAOoK,OACrB2F,OAAQrB,EAAKnQ,IAAI,SAAUoP,GAEpB,IAAC1S,EAAK0S,EAAQ/P,MACjB,OADgC3C,EAAG+U,MAA2Blb,EAAOmG,EAAI,CAAC,SAE1G,GAC4BgP,QAAS,CACLgG,cAAejc,KAAKgM,OAAOqK,aAE/B6F,oBAAoB,IAAI/C,MAAOC,cAC/B+C,iBAAkBnc,KAAKgM,OAAOoQ,iBAElCpc,KAAKgM,OAAOoQ,gBAAkB,IAAIlF,EAClC5L,EAAG9I,MAAQ,EACf,KAAK,EAGD,OAFA8I,EAAG5I,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACtByS,EAAYc,EAAmB3W,KAAKgM,OAAO6J,UAAW7V,KAAKgM,OAAO8J,WAAY9V,KAAKgM,OAAO+J,UAAUF,UAC7F,CAAC,EAAa7V,KAAKgM,OAAOyK,kBAAkBkF,KAAK9F,EAAW+F,IACvE,KAAK,EAED,OAAY,QADZtD,EAAMhN,EAAG7I,SAELzC,KAAK2a,eAAeD,EAAM,EPvNhB,6BOwNH,CAAC,IAEPK,GASL/a,KAAKqc,eAAe/D,EAAKoC,GAClB,CAAC,EAAa,KATb,SAAUpC,EACVtY,KAAK2a,eAAeD,EAAMpC,EAAIgE,WAAY,GAAGpY,OAAOoU,EAAIiE,OAAQ,MAAMrY,OAAOsV,GAAsBlB,KAGnGtY,KAAK2a,eAAeD,EAAMpC,EAAIgE,WAAYhE,EAAIiE,QAE3C,CAAC,IAIhB,KAAK,EAUD,OATAvV,EAAMsE,EAAG7I,OACToZ,GA9NClY,EA8N8BqD,aA7N9BqO,MACV1R,EAAMmG,QACVhK,OAAO6D,GA4NM3D,KAAKgM,OAAOK,eAAe1I,MAAMkY,GACC,QAAjC5U,EAAKjH,KAAKka,yBAAsC,IAAPjT,GAAyBA,EAAGuV,YAAY,iDAAkD,CAChIT,OAAQrB,EAAKnQ,IAAI,SAAUoP,GAAW,OAAOA,EAAQ/P,MAAM0F,aAC3DxF,QAAS+R,EACTY,YAAajF,OAEjBxX,KAAKqc,eAAe,CAAEE,OAAQ/S,EAAOkT,OAAQJ,WAAY,GAAK5B,GACvD,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAvOpC,IAAyB/W,CAyOzB,EACA,EACA,EACI+V,EAAYja,UAAU4c,eAAiB,SAAU/D,EAAKoC,GAClD,IAAIzT,EACCsQ,EAAoBe,EAAIgE,aACS,QAAjCrV,EAAKjH,KAAKka,yBAAsC,IAAPjT,GAAyBA,EAAGuV,YAAY,gCAAiC,CAC/GT,OAAQrB,EAAKnQ,IAAI,SAAUoP,GAAW,OAAOA,EAAQ/P,MAAM0F,aAC3DzF,KAAMyO,EAAIgE,WACVC,OAAQjE,EAAIiE,OACZna,KAAMoX,GAAsBlB,GAC5BmE,YAAajF,OAGrB,IAAI+E,EAASjE,EAAIiE,OACjB,OAAQA,GACJ,KAAK/S,EAAOmT,QACR3c,KAAK4c,sBAAsBtE,EAAKoC,GAChC,MAEJ,KAAKlR,EAAOqT,QACR7c,KAAK8c,sBAAsBxE,EAAKoC,GAChC,MAEJ,KAAKlR,EAAOuT,gBACR/c,KAAKgd,8BAA8B1E,EAAKoC,GACxC,MAEJ,KAAKlR,EAAOyT,UACRjd,KAAKkd,wBAAwB5E,EAAKoC,GAClC,MAEJ,QAEI1a,KAAKgM,OAAOK,eAAeC,KAAK,8BAA8BpI,OAAOqY,EAAQ,mBAAmBrY,OAAOwW,EAAK9Z,OAAQ,cACpHZ,KAAKmd,oBAAoBzC,GAIzC,EACIhB,EAAYja,UAAUmd,sBAAwB,SAAUtE,EAAKoC,GACzD1a,KAAK2a,eAAeD,EAAMpC,EAAIgE,WP5RT,6BO6R7B,EACI5C,EAAYja,UAAUqd,sBAAwB,SAAUxE,EAAKoC,GACzD,IAAI3N,EAAQ/M,KACZ,GAAIsY,EAAIlW,KAAKgb,cAAgB9E,EAAIlW,KAAKuB,MAAM0Z,WP3RvB,mBO4RjBrd,KAAK2a,eAAeD,EAAMpC,EAAIgE,WAAYhE,EAAIlW,KAAKuB,WADvD,CAIA,IAAI2Z,EAAY1Z,EAAcA,EAAcA,EAAcA,EAAc,GAAIJ,EAAOpE,OAAOoT,OAAO8F,EAAIlW,KAAKmb,2BAA2B,GAAQ/Z,EAAOpE,OAAOoT,OAAO8F,EAAIlW,KAAKob,2BAA2B,GAAQha,EAAOpE,OAAOoT,OAAO8F,EAAIlW,KAAKqb,8BAA8B,GAAQja,EAAO8U,EAAIlW,KAAKsb,iBAAiB,GAAOC,OACtTC,EAAe,IAAIhW,IAAI0V,GACvBO,EAAQnD,EAAKxM,OAAO,SAAUyL,EAASnP,GACvC,IAAIoT,EAAarU,IAAIiB,GAIrB,OAAO,EAHHuC,EAAM4N,eAAe,CAAChB,GAAUrB,EAAIgE,WAAYhE,EAAIlW,KAAKuB,MAIzE,GACYka,EAAMjd,OAAS,GAEfZ,KAAKgM,OAAOK,eAAeC,KAAKkN,GAAsBlB,IAE1D,IAAIwF,EAAU9d,KAAKya,kCAAkCoD,GACrD7d,KAAK4a,eAAekD,EAfnB,CAgBT,EACIpE,EAAYja,UAAUud,8BAAgC,SAAU1E,EAAKoC,GACjE,GAAoB,IAAhBA,EAAK9Z,OAAT,CAKAZ,KAAKgM,OAAOK,eAAeC,KAAKkN,GAAsBlB,IACtDtY,KAAKgM,OAAOyJ,gBAAkB,EAC9B,IAAIqI,EAAU9d,KAAKya,kCAAkCC,GACrD1a,KAAK4a,eAAekD,EALnB,MAFG9d,KAAK2a,eAAeD,EAAMpC,EAAIgE,WAAYhE,EAAIlW,KAAKuB,MAQ/D,EACI+V,EAAYja,UAAUyd,wBAA0B,SAAU5E,EAAKoC,GAC3D,IAAI3N,EAAQ/M,KACR+d,EAAc3e,OAAOwH,KAAK0R,EAAIlW,KAAK4b,yBACnCC,EAAgB7e,OAAOwH,KAAK0R,EAAIlW,KAAK8b,2BACrCC,EAAiB7F,EAAIlW,KAAKgc,gBAC1BC,EAAiB,IAAIzW,IAAImW,GACzBO,EAAmB,IAAI1W,IAAIqW,GAC3BM,EAAoB,IAAI3W,IAAIuW,GAC5BN,EAAQnD,EAAKxM,OAAO,SAAUyL,EAASnP,GACvC,KAAKmP,EAAQ/P,MAAM4U,SAAWH,EAAe9U,IAAIoQ,EAAQ/P,MAAM4U,UAC1D7E,EAAQ/P,MAAM6U,WAAaH,EAAiB/U,IAAIoQ,EAAQ/P,MAAM6U,YAOnE,OAHIF,EAAkBhV,IAAIiB,KACtBmP,EAAQ1M,QAAUF,EAAM8M,kBAErB,EANH9M,EAAM4N,eAAe,CAAChB,GAAUrB,EAAIgE,WAAYhE,EAAIlW,KAAKuB,MAOzE,GACYka,EAAMjd,OAAS,GAEfZ,KAAKgM,OAAOK,eAAeC,KAAKkN,GAAsBlB,IAE1D,IAAIwF,EAAU9d,KAAKya,kCAAkCoD,GACrD7d,KAAK4a,eAAekD,EAC5B,EACIpE,EAAYja,UAAU0d,oBAAsB,SAAUzC,GAClD,IAAI3N,EAAQ/M,KACRgb,EAAQN,EAAKnQ,IAAI,SAAUoP,GAE3B,OADAA,EAAQ1M,QAAU0M,EAAQW,SAAWvN,EAAM6M,aACpCD,CACnB,GACYmE,EAAU9d,KAAKya,kCAAkCO,GACrDhb,KAAK4a,eAAekD,EAC5B,EACIpE,EAAYja,UAAUkb,eAAiB,SAAUD,EAAM7Q,EAAMC,GACzD,IAAI7C,EAAIqE,EAAIW,EAEPsL,EAAoB1N,GAUa,QAAjCoC,EAAKjM,KAAKka,yBAAsC,IAAPjO,GAAyBA,EAAGyS,UAAU,wBAAyBhE,EAAK9Z,SAT5E,QAAjCqG,EAAKjH,KAAKka,yBAAsC,IAAPjT,GAAyBA,EAAGyX,UAAU,2BAA4BhE,EAAK9Z,QAC/E,QAAjC0K,EAAKtL,KAAKka,yBAAsC,IAAP5O,GAAyBA,EAAGkR,YAAY,2BAA4B,CAC1GT,OAAQrB,EAAKnQ,IAAI,SAAUoP,GAAW,OAAOA,EAAQ/P,MAAM0F,aAC3DzF,KAAMA,EACNC,QAASA,EACT2S,YAAajF,QAMrBxX,KAAK2e,aAAajE,GAClBA,EAAK7L,QAAQ,SAAU8K,GAAW,OAAOA,EAAQzH,SAASvI,EAAYgQ,EAAQ/P,MAAOC,EAAMC,GAAY,EAC/G,EAQI4P,EAAYja,UAAU+a,WAAa,WAC/B,GAAKxa,KAAKgM,OAAOwK,gBAAjB,CAGA,IAAIoI,EAAgB5e,KAAK2L,MAAMpB,IAAI,SAAUoP,GAAW,OAAOA,EAAQ/P,KAAM,GACxE5J,KAAKgM,OAAOwK,gBAAgBzO,IAAI/H,KAAK8Z,WAAY8E,EAFrD,CAGT,EAIIlF,EAAYja,UAAUkf,aAAe,SAAUE,GAC3C7e,KAAK2L,MAAQ3L,KAAK2L,MAAMuC,OAAO,SAAU4Q,GAAiB,OAAQD,EAAe3S,KAAK,SAAUyN,GAAW,OAAOA,EAAQ/P,MAAMyQ,YAAcyE,EAAclV,MAAMyQ,SAAU,EAAI,GAChLra,KAAKwa,YACb,EACWd,CACX,IC1YIqF,GAAgD,WAChD,SAASA,IACR,CAUD,OATAA,EAA+Btf,UAAUuf,sBAAwB,WAC7D,MAAO,CACHC,YAAajf,KAAKif,YAClBC,SAAUC,KACVC,SAAU,MACVC,QAAIha,EACJia,iBAAaja,EAEzB,EACW0Z,CACX,IACII,GAAc,WACd,MAA8B,oBAAdI,YACVA,UAAUC,WAAaD,UAAUC,UAAU,IACzCD,UAAUL,WACd,EACR,EAEIO,GAAiC,WACjC,SAASA,IACLzf,KAAK2L,MAAQ,EAChB,CAoBD,OAnBA8T,EAAgBhgB,UAAUwQ,SAAW,SAAUrG,GACtC5J,KAAK0f,SAMN1f,KAAK0f,SAAS9V,GALV5J,KAAK2L,MAAM/K,OAAS,KACpBZ,KAAK2L,MAAMvI,KAAKwG,EAMhC,EACI6V,EAAgBhgB,UAAUkgB,iBAAmB,SAAUD,GACnD1f,KAAK0f,SAAWA,EACZ1f,KAAK2L,MAAM/K,OAAS,IACpBZ,KAAK2L,MAAMkD,QAAQ,SAAUjF,GACzB8V,EAAS9V,EACzB,GACY5J,KAAK2L,MAAQ,GAEzB,EACW8T,CACX,IAgBIpf,GAAW,WAQb,OAPAA,GAAWjB,OAAOkB,QAAU,SAAkBC,GAC5C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE9C,IAAK,IAAIjB,KADTgB,EAAIG,UAAUF,GACOrB,OAAOK,UAAUC,eAAeC,KAAKa,EAAGhB,KAAIe,EAAEf,GAAKgB,EAAEhB,IAE5E,OAAOe,CACX,EACSF,GAASQ,MAAMb,KAAMW,UAC9B,EACA,SAAS0C,GAASC,GAChB,IAAI9C,EAAsB,mBAAXuC,QAAyBA,OAAOC,SAC7CO,EAAI/C,GAAK8C,EAAE9C,GACXC,EAAI,EACN,GAAI8C,EAAG,OAAOA,EAAE5D,KAAK2D,GACrB,GAAIA,GAAyB,iBAAbA,EAAE1C,OAAqB,MAAO,CAC5CkB,KAAM,WAEJ,OADIwB,GAAK7C,GAAK6C,EAAE1C,SAAQ0C,OAAI,GACrB,CACL1B,MAAO0B,GAAKA,EAAE7C,KACdwB,MAAOqB,EAEV,GAEH,MAAM,IAAIzD,UAAUW,EAAI,0BAA4B,kCACtD,CACA,SAASgD,GAAOF,EAAG5C,GACjB,IAAI6C,EAAsB,mBAAXR,QAAyBO,EAAEP,OAAOC,UACjD,IAAKO,EAAG,OAAOD,EACf,IACEG,EAEA1C,EAHEN,EAAI8C,EAAE5D,KAAK2D,GAEbI,EAAK,GAEP,IACE,WAAc,IAANhD,GAAgBA,KAAM,MAAQ+C,EAAIhD,EAAEqB,QAAQG,MAAMyB,EAAGN,KAAKK,EAAE7B,MACrE,CAAC,MAAO+B,GACP5C,EAAI,CACF4C,MAAOA,EAEb,CAAY,QACR,IACMF,IAAMA,EAAExB,OAASsB,EAAI9C,EAAU,SAAI8C,EAAE5D,KAAKc,EACpD,CAAc,QACR,GAAIM,EAAG,MAAMA,EAAE4C,KAChB,CACF,CACD,OAAOD,CACT,CAC2B,mBAApBS,iBAAiCA,gBAMxC,IAAIyb,GAAU,SAAUC,EAAMC,GAC1B,IAAI9Y,EAAKC,EAEL8Y,SAAeF,EAEnB,GAAIE,WADeD,EAEf,OAAO,EAEX,IACI,IAAK,IAAIE,EAAc3c,GAPX,CAAC,SAAU,SAAU,UAAW,cAOA4c,EAAgBD,EAAYle,QAASme,EAAche,KAAMge,EAAgBD,EAAYle,OAAQ,CAErI,GADQme,EAAcre,QACZme,EACN,OAAOF,IAASC,CAEvB,CACJ,CACD,MAAOtY,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQyY,IAAkBA,EAAche,OAASgF,EAAK+Y,EAAYvY,SAASR,EAAGtH,KAAKqgB,EAClF,CACO,QAAE,GAAIhZ,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CAED,GAAY,MAARkc,GAAwB,MAARC,EAChB,OAAO,EAEN,GAAY,MAARD,GAAwB,MAARC,EACrB,OAAO,EAGX,GAAID,EAAKjf,SAAWkf,EAAKlf,OACrB,OAAO,EAGX,IAAIsf,EAAW3gB,MAAM2H,QAAQ2Y,GACzBM,EAAW5gB,MAAM2H,QAAQ4Y,GAC7B,GAAII,IAAaC,EACb,OAAO,EAEX,IAAID,IAAYC,EAQX,CAED,IAAIC,EAAUhhB,OAAOwH,KAAKiZ,GAAMQ,OAC5BC,EAAUlhB,OAAOwH,KAAKkZ,GAAMO,OAChC,IAAKT,GAAQQ,EAASE,GAClB,OAAO,EAGX,IAAIC,GAAW,EAMf,OALAnhB,OAAOwH,KAAKiZ,GAAMhR,QAAQ,SAAUhI,GAC3B+Y,GAAQC,EAAKhZ,GAAMiZ,EAAKjZ,MACzB0Z,GAAW,EAE3B,GACeA,CACV,CArBG,IAAK,IAAI9f,EAAI,EAAGA,EAAIof,EAAKjf,OAAQH,IAC7B,IAAKmf,GAAQC,EAAKpf,GAAIqf,EAAKrf,IACvB,OAAO,EAoBnB,OAAO,CACX,EAMKrB,OAAOiM,UACRjM,OAAOiM,QAAU,SAAU4M,GAIvB,IAHA,IAAIuI,EAAWphB,OAAOwH,KAAKqR,GACvBxX,EAAI+f,EAAS5f,OACb6f,EAAW,IAAIlhB,MAAMkB,GAClBA,KACHggB,EAAShgB,GAAK,CAAC+f,EAAS/f,GAAIwX,EAAIuI,EAAS/f,KAE7C,OAAOggB,CACf,GAEA,IClMWC,GDkMPC,GAAmC,WACnC,SAASA,IACL3gB,KAAK4O,SAAW,CAAEyD,eAAgB,CAAE,GACpCrS,KAAK4gB,UAAY,IAAIhZ,GACxB,CAoGD,OAnGA+Y,EAAkBlhB,UAAUohB,aAAe,WAEvC,IAAIzW,EAAOpK,KACP8gB,EAAuBzgB,GAAS,CAAA,EAAIL,KAAK4O,SAASyD,gBAClD0O,EAAiB1gB,GAASA,GAAS,GAAIL,KAAK4O,UAAW,CAAEyD,eAAgByO,IAC7E,MAAO,CACHE,UAAW,SAAUC,GAEjB,OADAF,EAAeE,OAASA,EACjBjhB,IACV,EACDkhB,YAAa,SAAUC,GAEnB,OADAJ,EAAeI,SAAWA,EACnBnhB,IACV,EACDohB,kBAAmB,SAAU/O,GAEzB,OADA0O,EAAe1O,eAAiBA,EACzBrS,IACV,EACD2S,UAAW,SAAU1D,GAEjB,OADA8R,EAAe9R,OAASA,EACjBjP,IACV,EACDqhB,qBAAsB,SAAUC,GAC5B,IAAIta,EAAKC,EAAI6G,EAAKxC,EAAIiW,EAAKtV,EACvBuV,EAAmBT,EAAe1O,gBAAkB,GACxD,IACI,IAAK,IAAItE,EAAK1K,GAASjE,OAAOiM,QAAQiW,IAAWtT,EAAKD,EAAGjM,QAASkM,EAAG/L,KAAM+L,EAAKD,EAAGjM,OAAQ,CACvF,IAAI2f,EAAKje,GAAOwK,EAAGpM,MAAO,GAAI8f,EAASD,EAAG,GAAI9a,EAAa8a,EAAG,GAC9D,OAAQC,GACJ,IAjDZ,OAkDgB,IACI,IAAK,IAAIC,GAAM7T,OAAM,EAAQzK,GAASjE,OAAOiM,QAAQ1E,KAAeib,EAAKD,EAAG7f,QAAS8f,EAAG3f,KAAM2f,EAAKD,EAAG7f,OAAQ,CAC1G,IAAI+f,EAAKre,GAAOoe,EAAGhgB,MAAO,GAAIiF,EAAMgb,EAAG,GAAIjgB,EAAQigB,EAAG,GACtDL,EAAiB3a,GAAOjF,CAC3B,CACJ,CACD,MAAO+L,GAASG,EAAM,CAAEnK,MAAOgK,EAAU,CACjC,QACJ,IACQiU,IAAOA,EAAG3f,OAASqJ,EAAKqW,EAAGla,SAAS6D,EAAG3L,KAAKgiB,EACnD,CACO,QAAE,GAAI7T,EAAK,MAAMA,EAAInK,KAAQ,CACxC,CACD,MACJ,IA/DV,SAgEc,IACI,IAAK,IAAIme,GAAMP,OAAM,EAAQle,GAASjE,OAAOwH,KAAKD,KAAeob,EAAKD,EAAGhgB,QAASigB,EAAG9f,KAAM8f,EAAKD,EAAGhgB,OAAQ,QAEhG0f,EADH3a,EAAMkb,EAAGngB,MAEhB,CACJ,CACD,MAAOogB,GAAST,EAAM,CAAE5d,MAAOqe,EAAU,CACjC,QACJ,IACQD,IAAOA,EAAG9f,OAASgK,EAAK6V,EAAGra,SAASwE,EAAGtM,KAAKmiB,EACnD,CACO,QAAE,GAAIP,EAAK,MAAMA,EAAI5d,KAAQ,CACxC,CACD,MACJ,IA7EN,YA8EU6d,EAAmB,CAAA,EAG9B,CACJ,CACD,MAAOha,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQwG,IAAOA,EAAG/L,OAASgF,EAAK8G,EAAGtG,SAASR,EAAGtH,KAAKoO,EACnD,CACO,QAAE,GAAI/G,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CAED,OADAod,EAAe1O,eAAiBmP,EACzBxhB,IACV,EACDiiB,OAAQ,WAEJ,OADA7X,EAAK8X,YAAYnB,GACV/gB,IACV,EAEb,EACI2gB,EAAkBlhB,UAAU0iB,YAAc,WACtC,OAAO9hB,GAAS,CAAA,EAAIL,KAAK4O,SACjC,EACI+R,EAAkBlhB,UAAUyiB,YAAc,SAAUtT,GAChD,IAAIwT,EAAmB/hB,GAAS,CAAE,EAAEL,KAAK4O,UACzC5O,KAAK4O,SAAWvO,GAAS,CAAE,EAAEuO,GACxBgR,GAAQwC,EAAkBpiB,KAAK4O,WAChC5O,KAAK4gB,UAAU/R,QAAQ,SAAUwT,GAC7BA,EAASzT,EACzB,EAEA,EACI+R,EAAkBlhB,UAAU6iB,oBAAsB,SAAUD,GACxDriB,KAAK4gB,UAAU9X,IAAIuZ,EAC3B,EACI1B,EAAkBlhB,UAAU8iB,uBAAyB,SAAUF,GAC3DriB,KAAK4gB,UAAU4B,OAAOH,EAC9B,EACW1B,CACX,IAEI8B,GAAmC,oBAAfvY,WAClBA,WACkB,oBAAXG,OACHA,OACAD,KAENsY,GAAoC,WACpC,SAASA,IACL1iB,KAAK2iB,cAAgB,IAAIhC,GACzB3gB,KAAK4iB,YAAc,IAAInD,GACvBzf,KAAK6iB,2BAA6B,IAAI9D,EACzC,CAWD,OAVA2D,EAAmBI,YAAc,SAAUnN,GAQvC,OAPK8M,GAAwC,8BACzCA,GAAwC,4BAAI,IAE3CA,GAAwC,4BAAE9M,KAC3C8M,GAAwC,4BAAE9M,GACtC,IAAI+M,GAELD,GAAwC,4BAAE9M,EACzD,EACW+M,CACX,IErUWK,GAAwB,SAAUpN,GAEzC,YADqB,IAAjBA,IAA2BA,EAAerR,GACvCoe,GAAmBI,YAAYnN,EAC1C,ECHIqN,GAAqC,WACrC,SAASA,IACLhjB,KAAKoM,KAAO,WACZpM,KAAKuM,KAAO,SACZvM,KAAK2iB,cAAgBI,KAAwBJ,aAChD,CAuBD,OAtBAK,EAAoBvjB,UAAU0O,QAAU,SAAUwL,GAC9C,OAAOxY,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIqS,EACJ,OAAOlQ,EAAYnC,KAAM,SAAUiH,GAK/B,OAJAoL,EAAiBsH,EAAQnK,kBAErBxP,KAAK2iB,cAAc9B,eAAeQ,qBAAqBhP,GAAgB4P,SAEpE,CAAC,EAActI,EACtC,EACA,EACA,EACIqJ,EAAoBvjB,UAAU+M,MAAQ,SAAUR,GAC5C,OAAO7K,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAI/B,OAHI+E,EAAO2J,eACP3V,KAAK2iB,cAAgBI,GAAsB/W,EAAO2J,cAAcgN,eAE7D,CAAC,EACxB,EACA,EACA,EACWK,CACX,IC/BWC,GAAe,SAAUC,EAAgBC,GAIhD,YAHsB,IAAlBA,IAA4BA,EAAgBhK,KAAKiK,OACnCjK,KAAKiK,MACgBD,EACXD,CAChC,ECJWG,GAAgB,SAAUjN,EAAQkN,EAASC,GAGlD,YAFgB,IAAZD,IAAsBA,EAAU,SACtB,IAAVC,IAAoBA,EAAQ,IACzB,CAACnf,EAAkBkf,EAASlN,EAAOgE,UAAU,EAAGmJ,IAAQrV,OAAO2E,SAASrH,KAAK,IACxF,ECLW2T,GAAc,WACrB,IAAIlY,EAAIqE,EAAIW,EAAI8B,EAChB,GAAyB,oBAAdwR,UACP,MAAO,GAEX,IAAIiE,EAAejE,UAAUiE,aAC7B,OAAwM,QAAhMzV,EAAiJ,QAA3I9B,EAAsF,QAAhFX,EAAoC,QAA9BrE,EAAKsY,UAAUC,iBAA8B,IAAPvY,OAAgB,EAASA,EAAG,UAAuB,IAAPqE,EAAgBA,EAAKiU,UAAUL,gBAA6B,IAAPjT,EAAgBA,EAAKuX,SAAiC,IAAPzV,EAAgBA,EAAK,EACzO,ECNW0V,GAAiB,WACxB,IAAIxc,EACA4D,EAAcb,IAElB,OAAgG,QAAzF/C,EAAK4D,aAAiD,EAASA,EAAY6Y,gBAA6B,IAAPzc,OAAgB,EAASA,EAAG0c,QAGxH9Y,EAAY6Y,SAASC,OAAOvJ,UAAU,GAAGzC,MAAM,KAAKzJ,OAAO2E,SACpDwI,OAAO,SAAUuI,EAAKC,GACrC,IAAIC,EAAQD,EAAKlM,MAAM,IAAK,GACxB9Q,EAAMkd,GAAsBD,EAAM,IAClCliB,EAAQmiB,GAAsBD,EAAM,IACxC,OAAKliB,GAGLgiB,EAAI/c,GAAOjF,EACJgiB,GAHIA,CAId,EAAE,CAAE,GAZM,EAcf,EACWG,GAAwB,SAAUniB,QAC3B,IAAVA,IAAoBA,EAAQ,IAChC,IACI,OAAOoiB,mBAAmBpiB,EAC7B,CACD,MAAOqF,GACH,MAAO,EACV,CACL,ECvBWgd,GAAsB,SAAUC,EAAKC,GAC5C,OAAKA,IAAcA,EAAUvjB,QAGtBujB,EAAUjY,KAAK,SAAUkY,GAC5B,MAA0B,iBAAfA,EACAF,IAAQE,EAEZF,EAAIG,MAAMD,EACzB,EACA,EACWE,GAAe,SAAUC,EAAalY,GAC7C,IAAImY,EAAqBD,EACzB,IACIC,EAAqBC,UAAUF,EAClC,CACD,MAAOxjB,GAEHsL,SAAgEA,EAAe1I,MAAM,2BAA4B5C,EACpH,CACD,OAAOyjB,CACX,ECPWE,GAA0B,SAAUC,EAAWC,GACtD,IAAIC,EArBsB,SAAUC,GACpC,IAAIC,EAAO,EACX,GAAmB,IAAfD,EAAIlkB,OACJ,OAAOmkB,EACX,IAAK,IAAItkB,EAAI,EAAGA,EAAIqkB,EAAIlkB,OAAQH,IAE5BskB,GAAQA,GAAQ,GAAKA,EADXD,EAAIE,WAAWvkB,GAEzBskB,GAAQ,EAEZ,OAAOA,CACX,CAWqBE,CAAiBN,EAAUla,YAI5C,OAFgC,GADlBO,KAAKka,IAAIL,GAEK,IACf,IAASD,CAC1B,ECzBIO,GAA+B,WAC/B,SAASA,IACLnlB,KAAKolB,cAAgB,IAAIC,GAC5B,CAoDD,OAnDAF,EAAc1lB,UAAU6lB,UAAY,WAChC,OAAOnkB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,GAAc,EACtC,EACA,EACA,EACIke,EAAc1lB,UAAUoX,IAAM,SAAUhQ,GACpC,OAAO1F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,EAAcjH,KAAKolB,cAAcvO,IAAIhQ,GAC7D,EACA,EACA,EACIse,EAAc1lB,UAAU8lB,OAAS,SAAU1e,GACvC,OAAO1F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI4B,EACJ,OAAOO,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAAG,MAAO,CAAC,EAAaxC,KAAK6W,IAAIhQ,IACtC,KAAK,EAED,MAAO,CAAC,GADRjF,EAAQqF,EAAGxE,QACmB2L,KAAKC,UAAUzM,QAASyD,GAE9E,EACA,EACA,EACI8f,EAAc1lB,UAAUsI,IAAM,SAAUlB,EAAKjF,GACzC,OAAOT,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAE/B,OADAjH,KAAKolB,cAAcrd,IAAIlB,EAAKjF,GACrB,CAAC,EACxB,EACA,EACA,EACIujB,EAAc1lB,UAAUmJ,OAAS,SAAU/B,GACvC,OAAO1F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAE/B,OADAjH,KAAKolB,cAAc5C,OAAO3b,GACnB,CAAC,EACxB,EACA,EACA,EACIse,EAAc1lB,UAAUqN,MAAQ,WAC5B,OAAO3L,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAE/B,OADAjH,KAAKolB,cAAcI,QACZ,CAAC,EACxB,EACA,EACA,EACWL,CACX,ICvDIM,GAA+B,WAC/B,SAASA,EAAcxP,GACnBjW,KAAKiW,QAAU5V,EAAS,CAAE,EAAE4V,EAC/B,CA8ID,OA7IAwP,EAAchmB,UAAU6lB,UAAY,WAChC,OAAOnkB,EAAUnB,UAAM,OAAQ,EAAQ,WAChC,IAAC0lB,EAAaC,EACjB,OAAOxjB,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAED,IAAKwH,IACD,MAAO,CAAC,GAAc,GAE1Byb,EAAcG,UAAY9lB,OAAOqZ,KAAKiK,OACtCsC,EAAc,IAAID,EAAczlB,KAAKiW,SACrC0P,EAAU,WACVra,EAAG9I,MAAQ,EACf,KAAK,EAED,OADA8I,EAAG5I,KAAKU,KAAK,CAAC,EAAG,EAAG,EAAG,IAChB,CAAC,EAAasiB,EAAY3d,IAAI4d,EAASF,EAAcG,YAChE,KAAK,EAED,OADAta,EAAG7I,OACI,CAAC,EAAaijB,EAAY7O,IAAI8O,IACzC,KAAK,EAED,MAAO,CAAC,EADAra,EAAG7I,SACqBgjB,EAAcG,WAClD,KAAK,EAGD,OAFKta,EAAG7I,OAED,CAAC,GAAc,GAC1B,KAAK,EAAG,MAAO,CAAC,EAAaijB,EAAY9c,OAAO+c,IAChD,KAAK,EAED,OADAra,EAAG7I,OACI,CAAC,GACZ,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACIgjB,EAAchmB,UAAUoX,IAAM,SAAUhQ,GACpC,IAAII,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI4B,EAAOikB,EACX,OAAO1jB,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAAG,MAAO,CAAC,EAAaxC,KAAKulB,OAAO1e,IACzC,KAAK,EAED,KADAjF,EAAQ0J,EAAG7I,QAEP,MAAO,CAAC,OAAc4C,GAE1B,IAEI,YAAqBA,KADrBwgB,EAAwD,QAAxC5e,EAAK6e,GAAuBlkB,UAA2B,IAAPqF,EAAgBA,EAAK8e,GAAmCnkB,KAEpHwT,QAAQzR,MAAM,oEAAoEO,OAAO2C,EAAK,aAAa3C,OAAOtC,IAC3G,CAAC,OAAcyD,IAGnB,CAAC,EAAc+I,KAAK4X,MAAMH,GACpC,CACD,MAAO5Z,GAEH,OADAmJ,QAAQzR,MAAM,mEAAmEO,OAAO2C,EAAK,aAAa3C,OAAOtC,IAC1G,CAAC,OAAcyD,EACzB,CACD,MAAO,CAAC,GAEhC,EACA,EACA,EACIogB,EAAchmB,UAAU8lB,OAAS,SAAU1e,GACvC,IAAII,EAAIqE,EACR,OAAOnK,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI6K,EAAaob,EAAQ5B,EACzB,OAAOliB,EAAYnC,KAAM,SAAUiM,GAI/B,OAHApB,EAAcb,IACdic,EAAqK,QAA3J3a,EAA+F,QAAzFrE,EAAK4D,aAAiD,EAASA,EAAYqb,gBAA6B,IAAPjf,OAAgB,EAASA,EAAGgf,OAAOtO,MAAM,aAA0B,IAAPrM,EAAgBA,EAAK,GAClM+Y,EAAQ4B,EAAOnT,KAAK,SAAUqT,GAAK,OAAgC,IAAzBA,EAAEnlB,QAAQ6F,EAAM,IAAa,GAClEwd,EAGE,CAAC,EAAcA,EAAMjK,UAAUvT,EAAIjG,OAAS,IAFxC,CAAC,OAAcyE,EAG1C,EACA,EACA,EACIogB,EAAchmB,UAAUsI,IAAM,SAAUlB,EAAKjF,GACzC,IAAIqF,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIomB,EAAgBC,EAASC,EAAYC,EAAMzB,EAAKja,EAAagR,EACjE,OAAO1Z,EAAYnC,KAAM,SAAUsL,GAC/B,IACI8a,EAAwD,QAAtCnf,EAAKjH,KAAKiW,QAAQmQ,sBAAmC,IAAPnf,EAAgBA,EAAK,EAErFqf,OAAajhB,GADbghB,EAAoB,OAAVzkB,EAAiBwkB,GAAkB,MAGzCG,EAAO,IAAIpN,MACNqN,QAAQD,EAAKE,UAAsB,GAAVJ,EAAe,GAAK,GAAK,KACvDC,EAAaC,GAEjBzB,EAAM,GAAG5gB,OAAO2C,EAAK,KAAK3C,OAAOwiB,KAAKC,mBAAmBvY,KAAKC,UAAUzM,MACpE0kB,IACAxB,GAAO,aAAa5gB,OAAOoiB,EAAWM,gBAE1C9B,GAAO,WACH9kB,KAAKiW,QAAQ4Q,SACb/B,GAAO,YAAY5gB,OAAOlE,KAAKiW,QAAQ4Q,SAEvC7mB,KAAKiW,QAAQ6Q,SACbhC,GAAO,YAEP9kB,KAAKiW,QAAQ8Q,WACbjC,GAAO,cAAc5gB,OAAOlE,KAAKiW,QAAQ8Q,YAE7Clc,EAAcb,OAEVa,EAAYqb,SAASD,OAASnB,EAErC,CACD,MAAOnhB,GACHkY,EAAelY,aAAiB0R,MAAQ1R,EAAMmG,QAAUhK,OAAO6D,GAC/DyR,QAAQzR,MAAM,2DAA2DO,OAAO2C,EAAK,aAAa3C,OAAO2X,GAC5G,CACD,MAAO,CAAC,EACxB,EACA,EACA,EACI4J,EAAchmB,UAAUmJ,OAAS,SAAU/B,GACvC,OAAO1F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAAG,MAAO,CAAC,EAAaxC,KAAK+H,IAAIlB,EAAK,OAC3C,KAAK,EAED,OADAI,EAAGxE,OACI,CAAC,GAEhC,EACA,EACA,EACIgjB,EAAchmB,UAAUqN,MAAQ,WAC5B,OAAO3L,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,EACxB,EACA,EACA,EACWwe,CACX,IAEIK,GAAyB,SAAUlkB,GACnC,IACI,OAAOoiB,mBAAmBgD,KAAKplB,GAClC,CACD,MAAOqF,GACH,MACH,CACL,EACI8e,GAAqC,SAAUnkB,GAG/C,IACI,OAAOoiB,mBAAmBgD,KAAKhD,mBAAmBpiB,IACrD,CACD,MAAOqF,GACH,MACH,CACL,ECtKWggB,GAAgB,SAAU7Q,EAAQkN,EAASC,GAGlD,YAFgB,IAAZD,IAAsBA,EAAU,SACtB,IAAVC,IAAoBA,EAAQ,IACzB,CAACnf,EAAkBkf,EAASlN,EAAOgE,UAAU,EAAGmJ,IAAQrV,OAAO2E,SAASrH,KAAK,IACxF,ECJI0b,GAAgC,WAChC,SAASA,EAAeC,GACpBnnB,KAAKmnB,QAAUA,CAClB,CA+GD,OA9GAD,EAAeznB,UAAU6lB,UAAY,WACjC,OAAOnkB,EAAUnB,UAAM,OAAQ,EAAQ,WAChC,IAACiL,EAAQya,EAAaC,EACzB,OAAOxjB,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAED,IAAKxC,KAAKmnB,QACN,MAAO,CAAC,GAAc,GAE1Blc,EAASnL,OAAOqZ,KAAKiK,OACrBsC,EAAc,IAAIwB,EAAelnB,KAAKmnB,SACtCxB,EAAU,WACVra,EAAG9I,MAAQ,EACf,KAAK,EAED,OADA8I,EAAG5I,KAAKU,KAAK,CAAC,EAAG,EAAG,EAAG,IAChB,CAAC,EAAasiB,EAAY3d,IAAI4d,EAAS1a,IAClD,KAAK,EAED,OADAK,EAAG7I,OACI,CAAC,EAAaijB,EAAY7O,IAAI8O,IACzC,KAAK,EAED,MAAO,CAAC,EADAra,EAAG7I,SACqBwI,GACpC,KAAK,EAGD,OAFKK,EAAG7I,OAED,CAAC,GAAc,GAC1B,KAAK,EAAG,MAAO,CAAC,EAAaijB,EAAY9c,OAAO+c,IAChD,KAAK,EAED,OADAra,EAAG7I,OACI,CAAC,GACZ,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACIykB,EAAeznB,UAAUoX,IAAM,SAAUhQ,GACrC,OAAO1F,EAAUnB,UAAM,OAAQ,EAAQ,WAChC,IAAC4B,EACJ,OAAOO,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAED,OADA8I,EAAG5I,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAapD,KAAKulB,OAAO1e,IACrC,KAAK,EAED,OADAjF,EAAQ0J,EAAG7I,QAKJ,CAAC,EAAc2L,KAAK4X,MAAMpkB,IAHtB,CAAC,OAAcyD,GAI9B,KAAK,EAGD,OAFKiG,EAAG7I,OACR2S,QAAQzR,MAAM,uDACP,CAAC,OAAc0B,GAC1B,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACI6hB,EAAeznB,UAAU8lB,OAAS,SAAU1e,GACxC,IAAII,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUsL,GAC/B,MAAO,CAAC,GAAuC,QAAvBrE,EAAKjH,KAAKmnB,eAA4B,IAAPlgB,OAAgB,EAASA,EAAGmgB,QAAQvgB,UAASxB,EACpH,EACA,EACA,EACI6hB,EAAeznB,UAAUsI,IAAM,SAAUlB,EAAKjF,GAC1C,IAAIqF,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUsL,GAC/B,IAC4B,QAAvBrE,EAAKjH,KAAKmnB,eAA4B,IAAPlgB,GAAyBA,EAAGogB,QAAQxgB,EAAKuH,KAAKC,UAAUzM,GAC3F,CACD,MAAOqK,GAEN,CACD,MAAO,CAAC,EACxB,EACA,EACA,EACIib,EAAeznB,UAAUmJ,OAAS,SAAU/B,GACxC,IAAII,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUsL,GAC/B,IAC4B,QAAvBrE,EAAKjH,KAAKmnB,eAA4B,IAAPlgB,GAAyBA,EAAGqgB,WAAWzgB,EAC1E,CACD,MAAOoF,GAEN,CACD,MAAO,CAAC,EACxB,EACA,EACA,EACIib,EAAeznB,UAAUqN,MAAQ,WAC7B,IAAI7F,EACJ,OAAO9F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUsL,GAC/B,IAC4B,QAAvBrE,EAAKjH,KAAKmnB,eAA4B,IAAPlgB,GAAyBA,EAAGue,OAC/D,CACD,MAAOvZ,GAEN,CACD,MAAO,CAAC,EACxB,EACA,EACA,EACWib,CACX,IC9GWK,GACD,OADCA,GAEG,WAFHA,GAGK,aAHLA,GAIC,SAJDA,GAKG,WAGHC,GACe,uBAMtBC,GAAoC,WACpC,SAASA,EAAmBrR,EAAQ2B,GAChC/X,KAAK0nB,UAAY,KACjB1nB,KAAK+X,OAASA,EACd/X,KAAK2nB,OAAS,mBAAmBzjB,OAAOkS,EAAOgE,UAAU,EAAG,IAC/D,CA2cD,OAtcAqN,EAAmBG,YAAc,WAC7B,IAAI3gB,EACJ,YAAuF5B,KAAnD,QAA3B4B,EAAK+C,WAAqC,IAAP/C,OAAgB,EAASA,EAAG4gB,UAChF,EACIJ,EAAmBhoB,UAAUqoB,MAAQ,WACjC,OAAO3mB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAI/B,OAHKjH,KAAK0nB,YACN1nB,KAAK0nB,UAAY1nB,KAAK+nB,UAEnB,CAAC,EAAc/nB,KAAK0nB,UAC3C,EACA,EACA,EACID,EAAmBhoB,UAAUsoB,OAAS,WAClC,IAAIhb,EAAQ/M,KACZ,OAAO,IAAIwB,QAAQ,SAAUC,EAASC,GAClC,IAAIsmB,EAAUH,UAAUI,KAAKlb,EAAM4a,OA5C9B,GA6CLK,EAAQE,QAAU,WAEdnb,EAAM2a,UAAY,KAClBhmB,EAAO,IAAI2T,MAAM,4BACjC,EACY2S,EAAQG,UAAY,WAChB,IAAIC,EAAKJ,EAAQhmB,OAEjBomB,EAAGC,QAAU,WACTtb,EAAM2a,UAAY,KAClB3a,EAAMgL,OAAOhF,MAAM,4CACvC,EACgBqV,EAAGF,QAAU,SAAUte,GACnBmD,EAAMgL,OAAOhF,MAAM,wDAAyDnJ,GAC5Ewe,EAAGE,OACvB,EACgB7mB,EAAQ2mB,EACxB,EACYJ,EAAQO,gBAAkB,SAAU3e,GAChC,IAAIwe,EAAKxe,EAAM4e,OAAOxmB,OACtB+K,EAAM0b,aAAaL,EACnC,CACA,EACA,EACIX,EAAmBhoB,UAAUgpB,aAAe,SAAUL,IAE7CA,EAAGM,iBAAiBC,SAASpB,KAC9Ba,EAAGQ,kBAAkBrB,GAAkB,CAAEsB,QAAS,QAGjDT,EAAGM,iBAAiBC,SAASpB,KAC9Ba,EAAGQ,kBAAkBrB,GAAsB,CAAEsB,QAAS,QAGrDT,EAAGM,iBAAiBC,SAASpB,KAC9Ba,EAAGQ,kBAAkBrB,GAAwB,CACzCsB,QAAS,QAIZT,EAAGM,iBAAiBC,SAASpB,MACZa,EAAGQ,kBAAkBrB,GAAoB,CACvDsB,QAAS,KACTC,eAAe,IAGPC,YAAY,WAAY,OAAQ,CAAEC,QAAQ,IAGrDZ,EAAGM,iBAAiBC,SAASpB,KAC9Ba,EAAGQ,kBAAkBrB,GAAsB,CAAEsB,QAAS,OAElE,EACIpB,EAAmBhoB,UAAUwpB,QAAU,SAAUC,GAC7C,OAAO/nB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIooB,EAAIe,EAAeC,EAASC,EAC5Btc,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACc,IAAhChE,OAAOiM,QAAQ6d,GAAMtoB,OACd,CAAC,GAEL,CAAC,EAAaZ,KAAK8nB,SAC9B,KAAK,EAID,OAHAM,EAAKnhB,EAAGxE,OACR0mB,EAAgBf,EAAGkB,YAAY,CAAC/B,IAAmB,aACnD6B,EAAUD,EAAcI,YAAYhC,IAC7B,CAAC,EAAc,IAAI/lB,QAAQ,SAAUC,GACpC,IAAI4J,EAAUjM,OAAOiM,QAAQ6d,GAC7BC,EAAcK,WAAa,WACvB/nB,GACpC,EACgC0nB,EAAcM,QAAU,SAAU7f,GAC9BmD,EAAMgL,OAAOhF,MAAM,yCAA0CnJ,GAC7DnI,GACpC,EACgC4J,EAAQwD,QAAQ,SAAU5H,GACtB,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAIJ,EAAMyE,EAAG,GAAI1J,EAAQ0J,EAAG,GAC/B8d,EAAQM,IAAI,CAAE7iB,IAAKA,EAAKjF,MAAOA,IACrCsmB,QAAU,SAAUte,GAC3BmD,EAAMgL,OAAOhF,MAAM,wCAAyClM,EAAKjF,EAAOgI,EAChH,CACA,EAC6B,IACT,KAAK,EAGD,OAFAyf,EAAUpiB,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,yCAA0CsW,GACrD,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACI5B,EAAmBhoB,UAAUkqB,kBAAoB,SAAUC,GACvD,OAAOzoB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIooB,EAAIyB,EAAeC,EAASC,EAC5Bhd,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACkB,IAApChE,OAAOiM,QAAQue,GAAUhpB,OAClB,CAAC,GAEL,CAAC,EAAaZ,KAAK8nB,SAC9B,KAAK,EAID,OAHAM,EAAKnhB,EAAGxE,OACRonB,EAAgBzB,EAAGkB,YAAY,CAAC/B,IAAuB,aACvDuC,EAAUD,EAAcN,YAAYhC,IAC7B,CAAC,EAAc,IAAI/lB,QAAQ,SAAUC,GACpC,IAAI4J,EAAUjM,OAAOiM,QAAQue,GAC7BC,EAAcL,WAAa,WACvB/nB,GACpC,EACgCooB,EAAcJ,QAAU,SAAU7f,GAC9BmD,EAAMgL,OAAOhF,MAAM,mDAAoDnJ,GACvEnI,GACpC,EAEgC4J,EAAQwD,QAAQ,SAAU5H,GACtB,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAIJ,EAAMyE,EAAG,GAAI0e,EAAiB1e,EAAG,GACrD2e,EAAaH,EAAQjT,IAAIhQ,GAC7BojB,EAAW9B,UAAY,WACnB,IAAI+B,EAAiBD,EAAWjoB,OAE5BmoB,EAAgBD,EAAiBA,EAAetoB,MAAQ,EAC3CkoB,EAAQJ,IAAI,CAAE7iB,IAAKA,EAAKjF,MAAOuoB,EAAgBH,IACrD9B,QAAU,SAAUte,GAC3BmD,EAAMgL,OAAOhF,MAAM,+CAAgDlM,EAAK+C,EACpH,CACA,EACoCqgB,EAAW/B,QAAU,SAAUte,GAC3BmD,EAAMgL,OAAOhF,MAAM,sDAAuDlM,EAAK+C,EACvH,CACA,EAC6B,IACT,KAAK,EAGD,OAFAmgB,EAAU9iB,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,mDAAoDgX,GAC/D,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACItC,EAAmBhoB,UAAU2qB,kBAAoB,SAAUC,GACvD,OAAOlpB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIooB,EAAIkC,EAAeC,EAASC,EAC5Bzd,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACwB,IAA1ChE,OAAOiM,QAAQgf,GAAgBzpB,OACxB,CAAC,GAEL,CAAC,EAAaZ,KAAK8nB,SAC9B,KAAK,EAID,OAHAM,EAAKnhB,EAAGxE,OACR6nB,EAAgBlC,EAAGkB,YAAY,CAAC/B,IAAyB,aACzDgD,EAAUD,EAAcf,YAAYhC,IAC7B,CAAC,EAAc,IAAI/lB,QAAQ,SAAUC,GACpC,IAAI4J,EAAUjM,OAAOiM,QAAQgf,GAC7BC,EAAcd,WAAa,WACvB/nB,GACpC,EACgC6oB,EAAcb,QAAU,SAAU7f,GAC9BmD,EAAMgL,OAAOhF,MAAM,oDAAqDnJ,GACxEnI,GACpC,EAEgC4J,EAAQwD,QAAQ,SAAU5H,GACtB,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAIJ,EAAMyE,EAAG,GAAImf,EAAWnf,EAAG,GAC/C2e,EAAaM,EAAQ1T,IAAIhQ,GAC7BojB,EAAW9B,UAAY,WACnB,IACIuC,EADAR,EAAiBD,EAAWjoB,OAK5B0oB,EAFAR,EAEe,CACXrjB,IAAKA,EACL8jB,MAAOT,EAAeS,MAAQF,EAASE,MACvCC,IAAK5f,KAAK4f,IAAIV,EAAeU,IAAKH,EAASG,KAC3CxP,IAAKpQ,KAAKoQ,IAAI8O,EAAe9O,IAAKqP,EAASrP,KAC3CyP,IAAKX,EAAeW,IAAMJ,EAASI,KAKxB,CACXhkB,IAAKA,EACL8jB,MAAOF,EAASE,MAChBC,IAAKH,EAASG,IACdxP,IAAKqP,EAASrP,IACdyP,IAAKJ,EAASI,KAGLN,EAAQb,IAAIgB,GAClBxC,QAAU,SAAUte,GAC3BmD,EAAMgL,OAAOhF,MAAM,oDAAqDlM,EAAK+C,EACzH,CACA,EACoCqgB,EAAW/B,QAAU,SAAUte,GAC3BmD,EAAMgL,OAAOhF,MAAM,8DAA+DlM,EAAK+C,EAC/H,CACA,EAC6B,IACT,KAAK,EAGD,OAFA4gB,EAAUvjB,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,oDAAqDyX,GAChE,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACI/C,EAAmBhoB,UAAUqrB,gBAAkB,SAAU/O,GACrD,OAAO5a,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIooB,EAAI2C,EAAeC,EAASC,EAC5Ble,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACA,IAAlB2Y,EAAOnb,OACA,CAAC,GAEL,CAAC,EAAaZ,KAAK8nB,SAC9B,KAAK,EAID,OAHAM,EAAKnhB,EAAGxE,OACRsoB,EAAgB3C,EAAGkB,YAAY,CAAC/B,IAAqB,aACrDyD,EAAUD,EAAcxB,YAAYhC,IAC7B,CAAC,EAAc,IAAI/lB,QAAQ,SAAUC,GACpCspB,EAAcvB,WAAa,WACvB/nB,GACpC,EAEgCspB,EAActB,QAAU,SAAU7f,GAC9BmD,EAAMgL,OAAOhF,MAAM,kDAAmDnJ,GACtEnI,GACpC,EAEgC,IAAIypB,EAAeF,EAAQL,QAC3BO,EAAa/C,UAAY,WACrB,IAAIgD,EAAeD,EAAalpB,OAE5BopB,EAAiBpgB,KAAKoQ,IAAI,EAxSxB,GAwSiE+P,GACnEC,EAAiBrP,EAAOnb,QACxBmM,EAAMgL,OAAOhF,MAAM,kCAAkC7O,OAAOknB,EAAgB,QAAQlnB,OAAO6X,EAAOnb,OAAQ,iCAG9Gmb,EAAO9X,MAAM,EAAGmnB,GAAgBvc,QAAQ,SAAUjF,GAChCohB,EAAQliB,IAAIc,GAClBse,QAAU,SAAUte,GACxBmD,EAAMgL,OAAOhF,MAAM,iDAAkDnJ,EACjH,CACA,EACA,EACgCshB,EAAahD,QAAU,SAAUte,GAC7BmD,EAAMgL,OAAOhF,MAAM,sDAAuDnJ,EAC9G,CAC6B,IACT,KAAK,EAGD,OAFAqhB,EAAUhkB,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,kDAAmDkY,GAC9D,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACIxD,EAAmBhoB,UAAU4rB,YAAc,SAAUxkB,EAAKjF,GACtD,OAAOT,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIooB,EAAIkD,EAAeC,EAASC,EAChC,OAAOrpB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAapD,KAAK8nB,SAC9B,KAAK,EAID,OAHAM,EAAKnhB,EAAGxE,OACR6oB,EAAgBlD,EAAGkB,YAAY,CAAC/B,IAAuB,aACvDgE,EAAUD,EAAc/B,YAAYhC,IAC7B,CAAC,EAAc,IAAI/lB,QAAQ,SAAUC,EAASC,GAE7C4pB,EAAc7B,QAAU,WAAc,OAAO/nB,EAAO,IAAI2T,MAAM,kCAC9D,IAAI2S,EAAUuD,EAAQ7B,IAAI,CAAE7iB,IAAKA,EAAKjF,MAAOA,IAC7ComB,EAAQG,UAAY,WAAc,OAAO1mB,GAAU,EAEnDumB,EAAQE,QAAU,WAAc,OAAOxmB,EAAO,IAAI2T,MAAM,iCAC3D,IACT,KAAK,EAID,OAHAmW,EAAUvkB,EAAGxE,OAEbzC,KAAK+X,OAAOhF,MAAM,mDAAoDyY,GAC/D,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACI/D,EAAmBhoB,UAAUgsB,YAAc,SAAU5kB,GACjD,OAAO1F,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIooB,EAAIsD,EAAeC,EAASC,EAChC,OAAOzpB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAapD,KAAK8nB,SAC9B,KAAK,EAID,OAHAM,EAAKnhB,EAAGxE,OACRipB,EAAgBtD,EAAGkB,YAAY,CAAC/B,IAAuB,YACvDoE,EAAUD,EAAcnC,YAAYhC,IAC7B,CAAC,EAAc,IAAI/lB,QAAQ,SAAUC,EAASC,GAE7CgqB,EAAcjC,QAAU,WAAc,OAAO/nB,EAAO,IAAI2T,MAAM,kCAC9D,IAAI2S,EAAU2D,EAAQ9U,IAAIhQ,GAC1BmhB,EAAQG,UAAY,WAAc,OAAO1mB,EAAQumB,EAAQhmB,SAEzDgmB,EAAQE,QAAU,WAAc,OAAOxmB,EAAO,IAAI2T,MAAM,iCAC3D,IACT,KAAK,EAGD,OAFAuW,EAAU3kB,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,mDAAoD6Y,GAC/D,CAAC,OAAcvmB,GAC1B,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACIoiB,EAAmBhoB,UAAUosB,sBAAwB,WACjD,OAAO1qB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI8rB,EAAQC,EACZ,OAAO5pB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAapD,KAAKyrB,YAAYjE,KAC1C,KAAK,EAED,MAAO,CAAC,GADRsE,EAAS7kB,EAAGxE,QACmBupB,SAASF,EAAOlqB,MAAO,SAAMyD,GAChE,KAAK,EAKD,OAJA0mB,EAAU9kB,EAAGxE,OAEbzC,KAAK+X,OAAOhF,MAAM,yDAA0DgZ,GAErE,CAAC,OAAc1mB,GAC1B,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACIoiB,EAAmBhoB,UAAUwsB,sBAAwB,SAAUtH,GAC3D,OAAOxjB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIksB,EACJ,OAAO/pB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAapD,KAAKqrB,YAAY7D,GAAoC7C,EAAUla,aACxF,KAAK,EAED,OADAxD,EAAGxE,OACI,CAAC,EAAa,GACzB,KAAK,EAID,OAHAypB,EAAUjlB,EAAGxE,OAEbzC,KAAK+X,OAAOhF,MAAM,yDAA0DmZ,GACrE,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EAEIzE,EAAmBhoB,UAAU0sB,WAAa,SAAU7C,EAAa8C,GAC7D,OAAO,IAAI5qB,QAAQ,SAAUC,EAASC,GAClC,IACIsmB,EADQsB,EAAYC,YAAY6C,GAChB5G,QACpBwC,EAAQG,UAAY,WAAc,OAAO1mB,GAAU,EACnDumB,EAAQE,QAAU,WAAc,OAAOxmB,EAAO,IAAI2T,MAAM,yBAAyBnR,OAAOkoB,IAAa,CACjH,EACA,EAEI3E,EAAmBhoB,UAAU4sB,eAAiB,WAC1C,OAAOlrB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIooB,EAAIkB,EAAariB,EAAIiiB,EAAMU,EAAUS,EAAgBtO,EAAQuQ,EACjE,OAAOnqB,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAED,OADA8I,EAAG5I,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAapD,KAAK8nB,SAC9B,KAAK,EAGD,OAFAM,EAAK9c,EAAG7I,OACR6mB,EAAclB,EAAGkB,YAAY,CAAC/B,GAAkBA,GAAsBA,GAAwBA,IAAqB,aAC5G,CAAC,EAAa/lB,QAAQgN,IAAI,CACzBxO,KAAKusB,gBAAgBjD,EAAa/B,IAClCvnB,KAAKusB,gBAAgBjD,EAAa/B,IAClCvnB,KAAKusB,gBAAgBjD,EAAa/B,IAClCvnB,KAAKusB,gBAAgBjD,EAAa/B,OAE9C,KAAK,EAGD,OAFAtgB,EAAKzD,EAAO3C,WAAM,EAAQ,CAACyK,EAAG7I,OAAQ,IAAKymB,EAAOjiB,EAAG,GAAI2iB,EAAW3iB,EAAG,GAAIojB,EAAiBpjB,EAAG,GAAI8U,EAAS9U,EAAG,GAExG,CAAC,EAAazF,QAAQgN,IAAI,CACzBxO,KAAKmsB,WAAW7C,EAAa/B,IAC7BvnB,KAAKmsB,WAAW7C,EAAa/B,IAC7BvnB,KAAKmsB,WAAW7C,EAAa/B,OAEzC,KAAK,EAGD,OADAjc,EAAG7I,OACI,CAAC,EAAc,CAAEymB,KAAMA,EAAMU,SAAUA,EAAUS,eAAgBA,EAAgBtO,OAAQA,IACpG,KAAK,EAGD,OAFAuQ,EAAUhhB,EAAG7I,OACbzC,KAAK+X,OAAOhF,MAAM,uDAAwDuZ,GACnE,CAAC,EAAc,CAAEpD,KAAM,GAAIU,SAAU,GAAIS,eAAgB,GAAItO,OAAQ,KAChF,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EAKI0L,EAAmBhoB,UAAU8sB,gBAAkB,SAAUjD,EAAa8C,GAClE,OAAO,IAAI5qB,QAAQ,SAAUC,EAASC,GAClC,IACIsmB,EADQsB,EAAYC,YAAY6C,GAChBI,SACpBxE,EAAQG,UAAY,WAAc,OAAO1mB,EAAQumB,EAAQhmB,SACzDgmB,EAAQE,QAAU,WAAc,OAAOxmB,EAAO,IAAI2T,MAAM,0BAA0BnR,OAAOkoB,IAAa,CAClH,EACA,EACW3E,CACX,ICpeWgF,GAAa,2BA2EpBC,GAAkB,SAAU9Q,GAC5B,IAzEI+Q,EAyEAC,EAvEGD,OAFHA,EAAQ3iB,UAEgC,EAAS2iB,EAAMF,IAwE3D,GAAKG,EAGL,OAAIhR,EAAQiR,UAAYjR,EAAQiR,SAAStlB,SAASqlB,GACvC,WAEPhR,EAAQlE,OAASkE,EAAQlE,MAAMnQ,SAASqlB,GACjC,aADX,CAIJ,EACIE,GAAe,SAAUlrB,GACzB,IAAIqF,EAAIqE,EACR,IAEI,IAAI4Y,EAAM,IAAI6I,IAAInrB,EAA2F,QAAnF0J,EAAiC,QAA3BrE,EAAK+C,WAAqC,IAAP/C,OAAgB,EAASA,EAAGyc,gBAA6B,IAAPpY,OAAgB,EAASA,EAAG0hB,QACjJ,OAAO9I,EAAI8I,OAAS9I,EAAI+I,QAC3B,CACD,MAAOhhB,GACH,MACH,CACL,EACIihB,GAA2B,SAAUxV,GACrC,GAAKA,EAAL,CAGA,IAAI2M,EAAQ3M,EAAM2M,MAAM,gCAExB,OAAOA,EAAQA,EAAM,QAAKhf,CAHzB,CAIL,EAEI8nB,GAAkB,SAAUC,GAC5B,GAAsB,iBAAXA,EACP,OAAOA,EAEX,IACI,OAAOhf,KAAKC,UAAU+e,EACzB,CACD,MAAOnmB,GACH,MAAO,iBACV,CACL,EClHWomB,GAAoB,IAIpBC,GAA2B,IAElCC,GAAmC,WACnC,SAASA,EAAkBnX,EAAQ2B,EAAQjC,EAAYG,QAChC,IAAfH,IAAyBA,EAAa,MAE1C9V,KAAKwtB,aAAe,GACpBxtB,KAAKytB,iBAAmB,GACxBztB,KAAK0tB,mBAAqB,GAC1B1tB,KAAK2tB,eAAiB,GAEtB3tB,KAAK4tB,UAAY,KAEjB5tB,KAAK6tB,WAAa,KAClB7tB,KAAKoW,OAASA,EACdpW,KAAK+X,OAASA,EACd/X,KAAK6V,UAA2B,OAAfC,EAnBc,8DACA,iEAmB/B9V,KAAK+X,OAAOhF,MAAM,+CAAgD3E,KAAKC,UAAU4H,EAAS,KAAM,IAEhGjW,KAAKgM,OAAS3L,EAAS,CAAEytB,SAAS,EAAMlJ,WAAY,GAAK3O,GACzDjW,KAAK+tB,eAAiB5U,KAAKiK,MAC3BpjB,KAAKguB,YAActJ,GAAwB1kB,KAAK+tB,eAAgB/tB,KAAKgM,OAAO4Y,aAAe5kB,KAAKgM,OAAO8hB,QACnGrG,GAAmBG,cACnB5nB,KAAKmnB,QAAU,IAAIM,GAAmBrR,EAAQ2B,GAG9C/X,KAAK+X,OAAOhF,MAAM,iDAEjB/S,KAAKiuB,0BAENjuB,KAAKguB,cACLhuB,KAAK0e,UAAU,0CDlBU,SAAUhT,GAC3C,IAAIihB,EAAQ3iB,IACZ,GAAK2iB,GAA2C,mBAA3BA,EAAMuB,iBAA3B,CAGA,IA2CIC,EAAU,SAAUxU,GACpBjO,EAAO8Q,YArEwB,qBAqEenc,EAAS,CAAEkM,KAAMoN,EAAQpN,KAAMzC,QAAS6P,EAAQ7P,QAAS+iB,SAAUlT,EAAQkT,SAAUuB,WAAYzU,EAAQ0U,UAAW3W,MAAOiC,EAAQjC,OAASiC,EAAQ2U,UAC1M,EACI3B,EAAMuB,iBAAiB,QA9CL,SAAUtkB,GACxB,IAAIjG,EAAQiG,EAAMjG,iBAAiB0R,MAAQzL,EAAMjG,WAAQ0B,EACrDqS,EAAQ/T,aAAqC,EAASA,EAAM+T,MAC5D2M,EAAQqI,GAAgB,CAAEG,SAAUjjB,EAAMijB,SAAUnV,MAAOA,IAC1D2M,GAGL8J,EAAQ,CACJ5hB,KAAM,QACNzC,QAASF,EAAME,QACf4N,MAAOA,EACPmV,SAAUjjB,EAAMijB,SAChBwB,UAAW1qB,aAAqC,EAASA,EAAMyI,KAC/DkiB,SAAU,CACNC,MAAO3kB,EAAM2kB,MACbC,OAAQ5kB,EAAM4kB,OACdC,UAAW7kB,EAAM6kB,UACjBC,YAAarK,IAG7B,GA0BiD,GAC7CsI,EAAMuB,iBAAiB,qBA1BD,SAAUtkB,GAC5B,IAAI3C,EACAtD,EAAQiG,EAAMwjB,kBAAkB/X,MAAQzL,EAAMwjB,YAAS/nB,EACvDqS,EAAQ/T,aAAqC,EAASA,EAAM+T,MAC5DmV,EAAWK,GAAyBxV,GACpC2M,EAAQqI,GAAgB,CAAEG,SAAUA,EAAUnV,MAAOA,IACpD2M,GAIL8J,EAAQ,CACJ5hB,KAAM,qBACNzC,QAAgF,QAAtE7C,EAAKtD,aAAqC,EAASA,EAAMmG,eAA4B,IAAP7C,EAAgBA,EAAKkmB,GAAgBvjB,EAAMwjB,QACnI1V,MAAOA,EACPmV,SAAUA,EACVwB,UAAW1qB,aAAqC,EAASA,EAAMyI,KAC/DkiB,SAAU,CACNG,UAAW7kB,EAAM6kB,UACjBC,YAAarK,IAG7B,GAKkE,EAhD7D,CAiDL,CClCYsK,CAAwB3uB,MAE/B,CA6RD,OAzRAutB,EAAkB9tB,UAAUmvB,yBAA2B,WACnD,OAAO/b,QAAQ7S,KAAKmnB,UAAYtU,QAAQ7S,KAAKguB,YACrD,EACIT,EAAkB9tB,UAAUovB,OAAS,SAAUziB,EAAMxK,GAC5C5B,KAAK4uB,6BAGNxvB,OAAOwH,KAAK5G,KAAKwtB,cAAc5sB,QAAU0sB,GACzCttB,KAAK+X,OAAOhF,MAAM,qEAGtB/S,KAAKwtB,aAAaphB,GAAQxK,EAC1B5B,KAAK8uB,uBACb,EACIvB,EAAkB9tB,UAAUif,UAAY,SAAUtS,EAAM8O,QACvC,IAATA,IAAmBA,EAAO,GACzBlb,KAAK4uB,6BAGNxvB,OAAOwH,KAAK5G,KAAKytB,kBAAkB7sB,QAAU0sB,GAC7CttB,KAAK+X,OAAOhF,MAAM,uEAGtB/S,KAAKytB,iBAAiBrhB,IAASpM,KAAKytB,iBAAiBrhB,IAAS,GAAK8O,EACnElb,KAAK8uB,uBACb,EACIvB,EAAkB9tB,UAAU6X,gBAAkB,SAAUlL,EAAMxK,GAC1D,GAAK5B,KAAK4uB,2BAGV,GAAIxvB,OAAOwH,KAAK5G,KAAK0tB,oBAAoB9sB,QAAU0sB,GAC/CttB,KAAK+X,OAAOhF,MAAM,gFADtB,CAIA,IAAIgc,EAAW/uB,KAAK0tB,mBAAmBthB,GACnC2iB,GAEAA,EAASpE,OAAS,EAClBoE,EAASnE,IAAM5f,KAAK4f,IAAImE,EAASnE,IAAKhpB,GACtCmtB,EAAS3T,IAAMpQ,KAAKoQ,IAAI2T,EAAS3T,IAAKxZ,GACtCmtB,EAASlE,KAAOjpB,GAIhB5B,KAAK0tB,mBAAmBthB,GAAQ,CAC5Bue,MAAO,EACPC,IAAKhpB,EACLwZ,IAAKxZ,EACLipB,IAAKjpB,GAGb5B,KAAK8uB,qBAlBJ,CAmBT,EACIvB,EAAkB9tB,UAAU+c,YAAc,SAAUpQ,EAAMzF,GACjD3G,KAAK4uB,6BAGN5uB,KAAK2tB,eAAe/sB,QA9Fa,GA+FjCZ,KAAK+X,OAAOhF,MAAM,yEAGtB/S,KAAK2tB,eAAevqB,KAAK,CACrB4rB,WAAY5iB,EACZ6M,KAAME,KAAKiK,MACXrS,iBAAkBpK,IAEtB3G,KAAK8uB,uBACb,EACIvB,EAAkB9tB,UAAUqvB,oBAAsB,WAC9C,IAAI/hB,EAAQ/M,KACPA,KAAK4tB,YACN5tB,KAAK4tB,UAAY1gB,WAAW,WACxBH,EAAMkiB,uBACD1gB,MAAM,SAAU5K,GACjBoJ,EAAMgL,OAAOhF,MAAM,wDAAyDpP,EAChG,GACqBurB,QAAQ,WACTniB,EAAM6gB,UAAY,IACtC,EACa,EA1HiB,MA4HjB5tB,KAAK6tB,aACN7tB,KAAK6tB,WAAa3gB,WAAW,WACzBH,EAAMoiB,SACD5gB,MAAM,SAAU5K,GACjBoJ,EAAMgL,OAAOhF,MAAM,qCAAsCpP,EAC7E,GACqBurB,QAAQ,WACTniB,EAAM8gB,WAAa,IACvC,EACa,EAAER,IAEf,EACIE,EAAkB9tB,UAAUwvB,qBAAuB,WAC/C,OAAO9tB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIovB,EAAYC,EAAgBC,EAAkBC,EAClD,OAAOptB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EACD,OAAKxC,KAAKmnB,SAGViI,EAAa/uB,EAAS,CAAA,EAAIL,KAAKwtB,cAC/B6B,EAAiBhvB,EAAS,CAAA,EAAIL,KAAKytB,kBACnC6B,EAAmBjvB,EAAS,CAAA,EAAIL,KAAK0tB,oBACrC6B,EAAe3rB,EAAc,GAAIJ,EAAOxD,KAAK2tB,iBAAiB,GAC9D3tB,KAAK2tB,eAAiB,GACtB3tB,KAAKwtB,aAAe,GACpBxtB,KAAKytB,iBAAmB,GACxBztB,KAAK0tB,mBAAqB,GACnB,CAAC,EAAalsB,QAAQgN,IAAI,CACzBxO,KAAKmnB,QAAQ8B,QAAQmG,GACrBpvB,KAAKmnB,QAAQwC,kBAAkB0F,GAC/BrvB,KAAKmnB,QAAQiD,kBAAkBkF,GAC/BtvB,KAAKmnB,QAAQ2D,gBAAgByE,OAd1B,CAAC,GAgBhB,KAAK,EAED,OADAtoB,EAAGxE,OACI,CAAC,GAEhC,EACA,EACA,EACI8qB,EAAkB9tB,UAAU0vB,OAAS,WACjC,OAAOhuB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIiH,EAAIuoB,EAAYC,EAAgBC,EAAuBC,EAAczG,EAAMU,EAAUvS,EAAW0E,EAAQH,EAC5G,OAAOzZ,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EACD,OAAKxC,KAAKmnB,QAGH,CAAC,EAAannB,KAAKivB,wBAFf,CAAC,GAGhB,KAAK,EAID,OAHA3jB,EAAG7I,OACHzC,KAAK4tB,UAAY,KACjB5tB,KAAK6tB,WAAa,KACX,CAAC,EAAa7tB,KAAKmnB,QAAQkF,kBACtC,KAAK,EA2BD,OA1BAplB,EAAKqE,EAAG7I,OAAQ+sB,EAAavoB,EAAGiiB,KAAMuG,EAAiBxoB,EAAG2iB,SAAU8F,EAAwBzoB,EAAGojB,eAAgBsF,EAAe1oB,EAAG8U,OAE5H/b,KAAKmnB,QAAQ8E,sBAAsB9S,KAAKiK,OAC7C8F,EAAO,CAAA,EACPsG,EAAW3gB,QAAQ,SAAUid,GACzB5C,EAAK4C,EAAOjlB,KAAOilB,EAAOlqB,KACtD,GACwBgoB,EAAW,CAAA,EACX6F,EAAe5gB,QAAQ,SAAUid,GAC7BlC,EAASkC,EAAOjlB,KAAOilB,EAAOlqB,KAC1D,GACwByV,EAAY,CAAA,EACZqY,EAAsB7gB,QAAQ,SAAU+gB,GACpCvY,EAAUuY,EAAM/oB,KAAO,CACnB8jB,MAAOiF,EAAMjF,MACbC,IAAKgF,EAAMhF,IACXxP,IAAKwU,EAAMxU,IACXyU,IAAK7kB,KAAK8kB,MAAOF,EAAM/E,IAAM+E,EAAMjF,MAAS,KAAO,IAEnF,GACwB5O,EAAS4T,EAAaplB,IAAI,SAAUuhB,GAAU,MAAQ,CAClDkD,WAAYlD,EAAOkD,WACnB/V,KAAM6S,EAAO7S,KACblI,iBAAkB+a,EAAO/a,iBACxB,GAEgC,IAAjC3R,OAAOwH,KAAKgjB,GAAUhpB,QAAkD,IAAlCxB,OAAOwH,KAAKyQ,GAAWzW,QAAkC,IAAlBmb,EAAOnb,OAC7E,CAAC,IAEZgb,EAAU,CACNsN,KAAMA,EACN7R,UAAWA,EACXuS,SAAUA,EACV7N,OAAQA,GAGP/b,KAAK+vB,MAAMnU,GACT,CAAC,IAEhC,EACA,EACA,EAII2R,EAAkB9tB,UAAUswB,MAAQ,SAAUnU,GAC1C,OAAOza,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAcqpB,EACd,OAAOlnB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,GADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,KACjB4G,IACD,MAAM,IAAIqL,MAAM,6CAEpB,MAAO,CAAC,EAAa0a,MAAM/vB,KAAK6V,UAAW,CACnCma,OAAQ,OACRC,QAAS,CACL,WAAYjwB,KAAKoW,OACjB,eAAgB,oBAEpBhU,KAAMgM,KAAKC,UAAUuN,MAEjC,KAAK,EAED,OADW3U,EAAGxE,OACAytB,IAIdlwB,KAAK+X,OAAOhF,MAAM,yDACX,CAAC,EAAa,KAJjB/S,KAAK+X,OAAOhF,MAAM,uDACX,CAAC,IAIhB,KAAK,EAGD,OAFAsW,EAAUpiB,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,uDAAwDsW,GACnE,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EAMIkE,EAAkB9tB,UAAUwuB,wBAA0B,WAClD,OAAO9sB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIojB,EAAK+M,EAAoBC,EAC7B,OAAOjuB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EACD,OAAKxC,KAAKmnB,SAGV/D,EAAMjK,KAAKiK,MACJ,CAAC,EAAapjB,KAAKmnB,QAAQ0E,0BAHvB,CAAC,GAIhB,KAAK,EAKD,OAA4B,KAJ5BsE,EAAsBlpB,EAAGxE,SAAY,IAK5BzC,KAAKmnB,QAAQ8E,sBAAsB7I,GACxCpjB,KAAKqwB,eAAehD,IACb,CAAC,KAEZ+C,EAAqBhN,EAAM+M,IACD9C,IAEjBrtB,KAAKmvB,SACH,CAAC,KAIRnvB,KAAKqwB,eAAehD,GAAoB+C,GAErC,CAAC,IAEhC,EACA,EACA,EAII7C,EAAkB9tB,UAAU4wB,eAAiB,SAAUC,GACnD,IAAIvjB,EAAQ/M,KACZA,KAAK6tB,WAAa3gB,WAAW,WACzBH,EAAMoiB,SACD5gB,MAAM,SAAU5K,GACjBoJ,EAAMgL,OAAOhF,MAAM,qCAAsCpP,EACzE,GACiBurB,QAAQ,WACTniB,EAAM8gB,WAAa,IACnC,EACS,EAAEyC,EACX,EACI/C,EAAkB9tB,UAAU8wB,eAAiB,SAAU3L,GACnD5kB,KAAK+X,OAAOhF,MAAM,4CAA6C6R,GAC/D5kB,KAAKgM,OAAO4Y,WAAaA,EACzB5kB,KAAKguB,YAActJ,GAAwB1kB,KAAK+tB,eAAgB/tB,KAAKgM,OAAO4Y,aAAe5kB,KAAKgM,OAAO8hB,QACvG9tB,KAAK+X,OAAOhF,MAAM,qCAAsC/S,KAAKguB,YACrE,EACWT,CACX,ICxUIiD,GAA+B,WAC/B,SAASA,IACR,CA2FD,OA1FAA,EAAc/wB,UAAUkc,KAAO,SAAU8U,EAAYC,GACjD,OAAOlvB,QAAQC,QAAQ,KAC/B,EACI+uB,EAAc/wB,UAAUkxB,cAAgB,SAAUC,GAC9C,IAAI3pB,EAAIqE,EAAIW,EAAI8B,EAAIC,EAAIyT,EAAIE,EAAIC,EAAIC,EAAIC,EAAIC,EAAI8O,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACxF,GAA4B,iBAAjBX,EACP,OAAO,KAEX,IAAItU,EAAasU,EAAa/mB,MAAQ,EAClC0S,EAASvc,KAAKwxB,YAAYlV,GAC9B,OAAQC,GACJ,KAAK/S,EAAOmT,QACR,MAAO,CACHJ,OAAQA,EACRD,WAAYA,EACZla,KAAM,CACFqvB,eAAwD,QAAvCxqB,EAAK2pB,EAAac,uBAAoC,IAAPzqB,EAAgBA,EAAK,EACrF0qB,iBAA6D,QAA1CrmB,EAAKslB,EAAagB,0BAAuC,IAAPtmB,EAAgBA,EAAK,EAC1FumB,iBAA6D,QAA1C5lB,EAAK2kB,EAAakB,0BAAuC,IAAP7lB,EAAgBA,EAAK,IAGtG,KAAKzC,EAAOqT,QACR,MAAO,CACHN,OAAQA,EACRD,WAAYA,EACZla,KAAM,CACFuB,MAAqC,QAA7BoK,EAAK6iB,EAAajtB,aAA0B,IAAPoK,EAAgBA,EAAK,GAClEqP,aAAoD,QAArCpP,EAAK4iB,EAAamB,qBAAkC,IAAP/jB,EAAgBA,EAAK,GACjFuP,wBAA4E,QAAlDkE,EAAKmP,EAAaoB,kCAA+C,IAAPvQ,EAAgBA,EAAK,CAAE,EAC3GjE,wBAA4E,QAAlDmE,EAAKiP,EAAaqB,kCAA+C,IAAPtQ,EAAgBA,EAAK,CAAE,EAC3GlE,2BAAmF,QAAtDmE,EAAKgP,EAAasB,sCAAmD,IAAPtQ,EAAgBA,EAAK,CAAE,EAClHuQ,aAAoD,QAArCtQ,EAAK+O,EAAawB,qBAAkC,IAAPvQ,EAAgBA,EAAK,EACjF3D,0BAAgF,QAApD4D,EAAK8O,EAAayB,oCAAiD,IAAPvQ,EAAgBA,EAAK,CAAE,EAC/GwQ,gBAA0D,QAAxCvQ,EAAK6O,EAAa2B,wBAAqC,IAAPxQ,EAAgBA,EAAK,GACvFrE,eAAwD,QAAvCmT,EAAKD,EAAa4B,uBAAoC,IAAP3B,EAAgBA,EAAK,GACrF4B,iBAA4D,QAAzC3B,EAAKF,EAAa8B,yBAAsC,IAAP5B,EAAgBA,EAAK,CAAE,EAC3F1S,gBAA0D,QAAxC2S,EAAKH,EAAa+B,wBAAqC,IAAP5B,EAAgBA,EAAK,KAGnG,KAAKvnB,EAAOuT,gBACR,MAAO,CACHR,OAAQA,EACRD,WAAYA,EACZla,KAAM,CACFuB,MAAqC,QAA7BqtB,EAAKJ,EAAajtB,aAA0B,IAAPqtB,EAAgBA,EAAK,KAG9E,KAAKxnB,EAAOyT,UACR,MAAO,CACHV,OAAQA,EACRD,WAAYA,EACZla,KAAM,CACFuB,MAAqC,QAA7BstB,EAAKL,EAAajtB,aAA0B,IAAPstB,EAAgBA,EAAK,GAClEkB,aAAoD,QAArCjB,EAAKN,EAAawB,qBAAkC,IAAPlB,EAAgBA,EAAK,EACjFuB,iBAA4D,QAAzCtB,EAAKP,EAAa8B,yBAAsC,IAAPvB,EAAgBA,EAAK,CAAE,EAC3FyB,eAAwD,QAAvCxB,EAAKR,EAAaiC,uBAAoC,IAAPzB,EAAgBA,EAAK,CAAE,EACvFlT,0BAAgF,QAApDmT,EAAKT,EAAayB,oCAAiD,IAAPhB,EAAgBA,EAAK,CAAE,EAC/GrT,wBAA4E,QAAlDsT,EAAKV,EAAakC,kCAA+C,IAAPxB,EAAgBA,EAAK,CAAE,EAC3GlT,gBAA0D,QAAxCmT,EAAKX,EAAa+B,wBAAqC,IAAPpB,EAAgBA,EAAK,KAGnG,KAAK/nB,EAAOupB,QACZ,QACI,MAAO,CACHxW,OAAQA,EACRD,WAAYA,GAGhC,EACIkU,EAAc/wB,UAAU+xB,YAAc,SAAU3nB,GAC5C,OAAI0N,EAAoB1N,GACbL,EAAOmT,QAEL,MAAT9S,EACOL,EAAOyT,UAEL,MAATpT,EACOL,EAAOuT,gBAEL,MAATlT,EACOL,EAAOupB,QAEdlpB,GAAQ,KAAOA,EAAO,IACfL,EAAOqT,QAEdhT,GAAQ,IACDL,EAAOkT,OAEXlT,EAAOO,OACtB,EACWymB,CACX,IC9FIwC,GAAgC,SAAUC,GAE1C,SAASD,EAAeE,QACE,IAAlBA,IAA4BA,EAAgB,CAAE,GAClD,IAAInmB,EAAQkmB,EAAOtzB,KAAKK,OAASA,KAEjC,OADA+M,EAAMmmB,cAAgBA,EACfnmB,CACV,CAkCD,OAxCAnN,EAAUozB,EAAgBC,GAO1BD,EAAevzB,UAAUkc,KAAO,SAAU9F,EAAW+F,GACjD,OAAOza,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIiW,EAASkd,EAAUC,EACvB,OAAOjxB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,GAAqB,oBAAVutB,MACP,MAAM,IAAI1a,MAAM,mCAOpB,OALAY,EAAU,CACNga,QAAS5vB,EAAS,CAAE,eAAgB,mBAAoBgzB,OAAQ,OAASrzB,KAAKkzB,eAC9E9wB,KAAMgM,KAAKC,UAAUuN,GACrBoU,OAAQ,QAEL,CAAC,EAAaD,MAAMla,EAAWI,IAC1C,KAAK,EAED,MAAO,CAAC,GADRkd,EAAWlsB,EAAGxE,QACgBmV,QAClC,KAAK,EACDwb,EAAensB,EAAGxE,OAClB,IAEI,MAAO,CAAC,EAAczC,KAAK2wB,cAAcviB,KAAK4X,MAAMoN,IACvD,CACD,MAAO9nB,GACH,MAAO,CAAC,EAActL,KAAK2wB,cAAc,CAAE9mB,KAAMspB,EAAS5W,SAC7D,CACD,MAAO,CAAC,GAEhC,EACA,EACA,EACWyW,CACX,CA1CkB,CA0ChBxC,IC5CE8C,GAA0C,WAC1C,SAASA,EAAyBld,EAAQ2B,GACtC/X,KAAK6G,IAAM,qBAAqB3C,OAAOkS,EAAOgE,UAAU,EAAG,KAC3Dpa,KAAK+X,OAASA,CACjB,CA2CD,OA1CAub,EAAyB7zB,UAAU8zB,YAAc,WAC7C,IAAIvxB,EAAS,KACTwxB,EAAyB,CACzBC,aAAc,KACdC,UAAW,IAAIva,MAEnB,IACInX,EAAS2xB,aAAavM,QAAQpnB,KAAK6G,IACtC,CACD,MAAOlD,GAEH,OADA3D,KAAK+X,OAAOhF,MAAM,gDAAiDpP,GAC5DnC,QAAQC,QAAQ+xB,EAC1B,CACD,GAAe,OAAXxxB,EAEA,OADAhC,KAAK+X,OAAOhF,MAAM,uEACXvR,QAAQC,QAAQ+xB,GAE3B,IACI,IAAII,EAAmBxlB,KAAK4X,MAAMhkB,GAElC,OADAhC,KAAK+X,OAAOhF,MAAM,mDAAmD7O,OAAOkK,KAAKC,UAAUulB,KACpFpyB,QAAQC,QAAQ,CACnBgyB,aAAcG,EAAiBH,aAC/BC,UAAW,IAAIva,KAAKya,EAAiBF,YAE5C,CACD,MAAO/vB,GAGH,OAFA3D,KAAK+X,OAAOhF,MAAM,+CAAgDpP,GAClEgwB,aAAarM,WAAWtnB,KAAK6G,KACtBrF,QAAQC,QAAQ+xB,EAC1B,CACT,EACIF,EAAyB7zB,UAAUo0B,UAAY,SAAU7nB,GACrD,IAGI,OAFA2nB,aAAatM,QAAQrnB,KAAK6G,IAAKuH,KAAKC,UAAUrC,IAC9ChM,KAAK+X,OAAOhF,MAAM,gDACXvR,QAAQC,SAAQ,EAC1B,CACD,MAAOkC,GACH3D,KAAK+X,OAAOhF,MAAM,6CAA8CpP,EACnE,CACD,OAAOnC,QAAQC,SAAQ,EAC/B,EACW6xB,CACX,IChCIQ,GAAoC,WACpC,SAASA,EAAmB1d,EAAQ2B,EAAQjC,EAAYD,QACjC,IAAfC,IAAyBA,EAAa,MAE1C9V,KAAK+zB,cAAgB,GAErB/zB,KAAKg0B,oBAAsB,KAE3Bh0B,KAAKi0B,aAAe,KACpBj0B,KAAKoW,OAASA,EACdpW,KAAK6V,UAAYA,IAA6B,OAAfC,EAvBZ,6CACA,iDAuBnB9V,KAAK+X,OAASA,EACd/X,KAAKmnB,QAAU,IAAImM,GAAyBld,EAAQ2B,EACvD,CAmTD,OAlTA+b,EAAmBr0B,UAAUy0B,UAAY,SAAUrtB,EAAKstB,EAAcjiB,GAClE,IAAIkiB,EAAKzpB,IACL0pB,EAAe,CACfD,GAAIA,EACJvtB,IAAKA,EACLstB,aAAcA,EACdjiB,SAAUA,GASd,OAPAlS,KAAK+zB,cAAc3wB,KAAKixB,GACH,QAAjBF,EACKn0B,KAAKs0B,aAAaD,GAGlBr0B,KAAKu0B,uBAAuBF,EAAcF,EAAalnB,SAEzDmnB,CACf,EACIN,EAAmBr0B,UAAU+0B,YAAc,SAAUJ,GACjD,IAAI5pB,EAAQxK,KAAK+zB,cAAcpnB,UAAU,SAAU0nB,GAAgB,OAAOA,EAAaD,KAAOA,CAAK,GACnG,OAAe,IAAX5pB,GACAxK,KAAK+X,OAAOhF,MAAM,oEAAoE7O,OAAOkwB,EAAI,qBAC1F,IAEXp0B,KAAK+zB,cAAcnnB,OAAOpC,EAAO,GACjCxK,KAAK+X,OAAOhF,MAAM,wEAAwE7O,OAAOkwB,EAAI,OAC9F,EACf,EACIN,EAAmBr0B,UAAUg1B,cAAgB,WACzC,OAAOtzB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAwBgC,EACpB+K,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAED,OAAIxC,KAAKg0B,qBACgB7a,KAAKiK,MAAQpjB,KAAKg0B,oBAnD5B,KAqDPh0B,KAAK+X,OAAOhF,MAAM,2DACX,CAAC,IAGT,CAAC,EAAa/S,KAAK00B,2BAC9B,KAAK,EAMD,OALA1yB,EAASiF,EAAGxE,OACPzC,KAAKmnB,QAAQ0M,UAAU7xB,GAC5BhC,KAAK+zB,cAAcllB,QAAQ,SAAUwlB,GACjCtnB,EAAM4nB,aAAaN,EAAcryB,EAAQ,SACrE,GAC+B,CAAC,GAEhC,EACA,EACA,EAKI8xB,EAAmBr0B,UAAUi1B,wBAA0B,WACnD,IAAI3nB,EAAQ/M,KACZ,OAAIA,KAAKi0B,eAGTj0B,KAAKi0B,aAAej0B,KAAK+vB,QACpB7tB,KAAK,SAAUF,GAKhB,OAH4B,OAAxBA,EAAOyxB,eACP1mB,EAAMinB,oBAAsB7a,KAAKiK,OAE9BphB,CACnB,GACaktB,QAAQ,WAETniB,EAAMknB,aAAe,IACjC,IAbmBj0B,KAAKi0B,YAexB,EAMIH,EAAmBr0B,UAAU60B,aAAe,SAAUD,GAClD,OAAOlzB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI40B,EAAeC,EAAc7yB,EAC7B+K,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EASD,OARAoyB,EAAgB50B,KAAK00B,0BAA0BxyB,KAAK,SAAUF,GAC1D+K,EAAMgL,OAAOhF,MAAM,mEAAmE7O,OAAOkK,KAAKC,UAAUrM,KAC5G+K,EAAM4nB,aAAaN,EAAcryB,EAAQ,UACpC+K,EAAMoa,QAAQ0M,UAAU7xB,EACzD,GACwB6yB,EAAe70B,KAAKmnB,QAAQoM,cAAcrxB,KAAK,SAAUF,GACrD,OAAOA,CACnC,GAC+B,CAAC,EAAaR,QAAQszB,KAAK,CAACF,EAAeC,KACtD,KAAK,EAaD,YAVexvB,KAFfrD,EAASiF,EAAGxE,UAGRzC,KAAK+X,OAAOhF,MAAM,kEAAkE7O,OAAOkK,KAAKC,UAAUrM,KAE9E,OAAxBA,EAAOyxB,aACPzzB,KAAK20B,aAAaN,EAAcryB,EAAQ,SAGxChC,KAAK+X,OAAOhF,MAAM,0FAGnB,CAAC,EAAa6hB,GACzB,KAAK,EAED,OADA3tB,EAAGxE,OACI,CAAC,GAEhC,EACA,EACA,EAIIqxB,EAAmBr0B,UAAU80B,uBAAyB,SAAUF,EAAcpnB,GAC1E,OAAO9L,EAAUnB,UAAM,OAAQ,EAAQ,WAChC,IAAC+0B,EAAiC/yB,EACrC,OAAOG,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EACDuyB,EAAiB,IAAIvzB,QAAQ,SAAUe,EAAGb,GACtCwL,WAAW,WACPxL,EAAO,mBACV,EAAEuL,EAC/B,GACwBhG,EAAGzE,MAAQ,EACf,KAAK,EAED,OADAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAa5B,QAAQszB,KAAK,CAC1B90B,KAAK00B,0BACLK,KAEZ,KAAK,EAKD,OAJA/yB,EAAUiF,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,+EAClB/S,KAAK20B,aAAaN,EAAcryB,EAAQ,UACnChC,KAAKmnB,QAAQ0M,UAAU7xB,GACrB,CAAC,EAAa,GACzB,KAAK,EAGD,OAFUiF,EAAGxE,OACbzC,KAAK+X,OAAOhF,MAAM,qGACX,CAAC,EAAa/S,KAAKmnB,QAAQoM,eACtC,KAAK,EAUD,OAR4B,QAD5BvxB,EAASiF,EAAGxE,QACDgxB,cACPzzB,KAAK+X,OAAOhF,MAAM,iFAClB/S,KAAK20B,aAAaN,EAAcryB,EAAQ,WAGxChC,KAAK+X,OAAOhF,MAAM,iFAClB/S,KAAK20B,aAAaN,EAAcryB,EAAQ,WAErC,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EAKI8xB,EAAmBr0B,UAAUk1B,aAAe,SAAUN,EAAcT,EAAkBoB,GAElF,IAAIC,EADJZ,EAAaa,aAAe,IAAI/b,KAO5B8b,EALAZ,EAAaxtB,IAKIwtB,EAAaxtB,IAAI8Q,MAAM,KAAK0D,OAAO,SAAUrP,EAAQnF,GAClE,OAAe,OAAXmF,EACOA,EAEJnF,KAAOmF,EAASA,EAAOnF,GAAO,IACrD,EAAe+sB,EAAiBH,cAGHG,EAAiBH,aAEtCY,EAAaniB,SAAS+iB,EAAgBD,EAAQpB,EAAiBF,UACvE,EAaII,EAAmBr0B,UAAUswB,MAAQ,SAAUoF,EAASloB,GAGpD,YAFgB,IAAZkoB,IAAsBA,EApOD,QAqOT,IAAZloB,IAAsBA,EAhOZ,KAiOP9L,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIo1B,EAAU5B,EAAwB6B,EAASC,EAAQC,EAASC,EAC5DzoB,EAAQ/M,KACZ,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EACD4yB,EAAWnoB,EAAUkoB,EACrB3B,EAAyB,CACrBC,aAAc,KACdC,UAAW,IAAIva,MAEnBkc,EAAU,SAAUE,GAChB,IAAIE,EAAiBC,EAAWpd,EAAKlW,EAAoB2nB,EACzD,OAAO5nB,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EACDizB,EAAkB,IAAIE,gBACtBD,EAAYxoB,WAAW,WAAc,OAAOuoB,EAAgBG,OAAQ,EAAI3oB,GACxE3B,EAAG9I,MAAQ,EACf,KAAK,EAED,OADA8I,EAAG5I,KAAKU,KAAK,CAAC,EAAG,EAAG,EAAG,IAChB,CAAC,EAAa2sB,MAAMuF,EAAOO,eAAgB,CAC1C7F,OAAQ,MACRC,QAAS,CACLoD,OAAQ,OAEZyC,OAAQL,EAAgBK,UAEpC,KAAK,EAED,OADAxd,EAAMhN,EAAG7I,QACCytB,GAAW,CAAC,EAAa,GAC5B,CAAC,EAAa5X,EAAIV,QAC7B,KAAK,EAGD,OAFAxV,EAAOkJ,EAAG7I,OACV6yB,EAAOvd,OAAOhF,MAAM,8CAA8C7O,OAAOixB,EAAS,iBAAiBjxB,OAAOoU,EAAIiE,OAAQ,MAAMrY,OAAO9B,IAC5H,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAakW,EAAIyd,QACjC,KAAK,EAED,MAAO,CAAC,EAAc,CAAEn0B,MAAO,CACnB6xB,aAFInoB,EAAG7I,OAGPixB,UAAW,IAAIva,QAE/B,KAAK,EAAG,MAAO,CAAC,EAAa,GAC7B,KAAK,EASD,OARA4Q,EAAUze,EAAG7I,kBAEU4S,OAA0B,eAAjB0U,EAAQ3d,KACpCkpB,EAAOvd,OAAOhF,MAAM,8CAA8C7O,OAAOixB,EAAS,qBAAqBjxB,OAAO+I,EAAS,OAGvHqoB,EAAOvd,OAAOhF,MAAM,8CAA8C7O,OAAOixB,EAAS,0BAA2BpL,GAE1G,CAAC,EAAa,GACzB,KAAK,EAGD,OADAlP,aAAa6a,GACN,CAAC,GACZ,KAAK,EACD,OAAMH,EAAUJ,EAAU,EACnB,CAAC,EAAa,IAAI3zB,QAAQ,SAAUC,GAAW,OAAOyL,WAAWzL,EAASsL,EAAMipB,eAAeZ,GAAW,IAD5E,CAAC,EAAa,IAEvD,KAAK,GACD9pB,EAAG7I,OACH6I,EAAG9I,MAAQ,GACf,KAAK,GAAI,MAAO,CAAC,GAErD,EACA,EACwB8yB,EAASt1B,KACTu1B,EAAU,EACVtuB,EAAGzE,MAAQ,EACf,KAAK,EACD,OAAM+yB,EAAUJ,EACT,CAAC,EAAcE,EAAQE,IADG,CAAC,EAAa,GAEnD,KAAK,EAED,GAAuB,iBADvBC,EAAUvuB,EAAGxE,QAET,MAAO,CAAC,EAAc+yB,EAAQ5zB,OAClCqF,EAAGzE,MAAQ,EACf,KAAK,EAED,OADA+yB,IACO,CAAC,EAAa,GACzB,KAAK,EAAG,MAAO,CAAC,EAAc/B,GAElD,EACA,EACA,EAIIM,EAAmBr0B,UAAUu2B,eAAiB,SAAUC,GACpD,OAAOjrB,KAAKyQ,MAAMzQ,KAAKC,SAAWgrB,EAC1C,EACInC,EAAmBr0B,UAAUo2B,aAAe,WAExC,IAAIK,EAAgBvP,mBAAmB3mB,KAAKoW,QACxC+f,EAAY,IAAIC,gBAEpB,OADAD,EAAU/tB,OAAO,eAAgB0rB,EAAmBuC,cAC7C,GAAGnyB,OAAOlE,KAAK6V,UAAW,KAAK3R,OAAOgyB,EAAe,KAAKhyB,OAAOiyB,EAAU1rB,WAC1F,EACIqpB,EAAmBuC,aAAe,UAC3BvC,CACX,KnB7UA,SAAWpT,GACPA,EAAe,GAAI,KACnBA,EAAe,GAAI,KAInBA,EAAoB,QAAI,SAC3B,CAPD,CAOGA,KAAeA,GAAa,CAAA,IoBXxB,ICSI4V,GAAiC,CACxC,IACA,SACA,QACA,SACA,WACA,QACA,QACA,QACA,6BACA,2BACA,sBAKOC,GAAgC,kBAIhCC,GAAiC,CAAC,MAAO,OAAQ,KAAM,KAAM,KAAM,KAAM,KAAM,MCZ/EC,GAA+B7yB,EAAc,CACpD,uBACA,uBACA,sBACA,sBACA,sBACDJ,EAtB+B,CAC9B,IACA,SACA,kBACA,gBACA,oBACA,4BACA,yBACA,kBACA,eACA,oBACA,gCAWoC,GAI7BkzB,GAA+B,CAAC,KC1B3C,SAASC,GAAgBZ,GACrB,MAAwB,iBAATA,GACK,iBAATA,GACS,kBAATA,GAFH,MAGJA,CAER,CAYO,SAASa,GAAUb,EAAM5R,EAAW0S,GAClCd,GAKLe,GAAW,CACPf,KAAMA,EACN5R,UAJkBA,EAAU5Z,IAAIwsB,IAKhCF,YAJoBA,EAAYtsB,IAAIwsB,IAKpCC,UAAW,IAEnB,CACO,SAASF,GAAW7vB,GACvB,IAAID,EAAKsE,EACLyqB,EAAO9uB,EAAG8uB,KAAMkB,EAAehwB,EAAGgwB,aAAc9S,EAAYld,EAAGkd,UAAW0S,EAAc5vB,EAAG4vB,YAAaG,EAAY/vB,EAAG+vB,UAAWE,EAAejwB,EAAGiwB,aAAcC,EAAYlwB,EAAGkwB,UAChLF,IACDA,EAAelB,GAEnB,IAAInvB,EAAOxH,OAAOwH,KAAKqwB,GACvB,IACI,IAAK,IAAIG,EAAS/zB,EAASuD,GAAOywB,EAAWD,EAAOt1B,QAASu1B,EAASp1B,KAAMo1B,EAAWD,EAAOt1B,OAAQ,CAClG,IAAI+E,EAAMwwB,EAASz1B,MACfsW,EAAOtU,EAAcA,EAAc,GAAIJ,EAAOwzB,IAAY,GAAQ,CAACnwB,IAAM,GACzE8vB,GAAgBM,EAAapwB,IAExBywB,GAAmBpf,EAAMiM,KAAcmT,GAAmBpf,EAAM2e,WAC1DI,EAAapwB,GAIxBiwB,GAAW,CACPf,KAAMA,EACNkB,aAAcA,EAAapwB,GAC3Bsd,UAAWA,EACX0S,YAAaA,EACbG,UAAW9e,EACXgf,aAAcD,EACdE,UAAWtwB,GAGtB,CACJ,CACD,MAAOW,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQ6vB,IAAaA,EAASp1B,OAASqJ,EAAK8rB,EAAO3vB,SAAS6D,EAAG3L,KAAKy3B,EACnE,CACO,QAAE,GAAIpwB,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CAEwC,IAArCvE,OAAOwH,KAAKqwB,GAAcr2B,QAAgBs2B,GAAgBC,UACnDD,EAAaC,EAE5B,CAUO,SAASJ,GAAiB7e,GAI7B,OAHIA,EAAKmF,WAAW,OAChBnF,EAAOA,EAAKjU,MAAM,IAEfiU,EAAKP,MAAM,KAAKpN,IAAI,SAAUgtB,GAAS,OAAOA,EAAMrsB,QAAQ,MAAO,KAAKA,QAAQ,MAAO,IAAK,EACvG,CAeO,SAASssB,GAAYtf,EAAMuf,EAAah3B,EAAGi3B,GAG9C,QAFU,IAANj3B,IAAgBA,EAAI,QACd,IAANi3B,IAAgBA,EAAI,GACpBA,IAAMD,EAAY72B,OAClB,OAAOH,IAAMyX,EAAKtX,OAEtB,GAAIH,IAAMyX,EAAKtX,OAAQ,CACnB,KAAO82B,EAAID,EAAY72B,QAA6B,OAAnB62B,EAAYC,IACzCA,IAEJ,OAAOA,IAAMD,EAAY72B,MAC5B,CACD,IAAI+2B,EAAiBF,EAAYC,GACjC,GAAuB,OAAnBC,EAAyB,CACzB,GAAID,EAAI,IAAMD,EAAY72B,OACtB,OAAO,EAEX,IAAK,IAAIg3B,EAAIn3B,EAAGm3B,GAAK1f,EAAKtX,OAAQg3B,IAC9B,GAAIJ,GAAYtf,EAAMuf,EAAaG,EAAGF,EAAI,GACtC,OAAO,EAGf,OAAO,CACV,CACI,OAAuB,MAAnBC,GAA0BA,IAAmBzf,EAAKzX,KAChD+2B,GAAYtf,EAAMuf,EAAah3B,EAAI,EAAGi3B,EAAI,EAKzD,CAQA,SAASJ,GAAmBpf,EAAM2f,GAC9B,OAAOA,EAAmB3rB,KAAK,SAAUlI,GAAK,OAAOwzB,GAAYtf,EAAMlU,EAAG,EAC9E,CC3IA,IAoBI8zB,GAAqC,WACrC,SAASA,EAAoB9P,GACzBhoB,KAAKgoB,QAAUA,CAClB,CAkFD,OAjFA8P,EAAoBr4B,UAAUwwB,QAAU,SAAU8H,GAC9C,IAAI/wB,EAAKC,OACK,IAAV8wB,IAAoBA,EAAQ,IAChC,IAAIC,EAAgBh4B,KAAKgoB,QAAQiI,QAE7BgI,EAAkB,CAAA,EACtB,GAAI14B,MAAM2H,QAAQ8wB,GACdA,EAAcnpB,QAAQ,SAAU5H,GAC5B,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAIixB,EAAa5sB,EAAG,GAAI6sB,EAAc7sB,EAAG,GAC7D2sB,EAAgBC,GAAcC,CAC9C,QAEa,GAAIH,aAAyBI,QAC9BJ,EAAcnpB,QAAQ,SAAUjN,EAAOiF,GACnCoxB,EAAgBpxB,GAAOjF,CACvC,QAEa,GAA6B,iBAAlBo2B,GAAgD,OAAlBA,EAC1C,IACI,IAAK,IAAI1sB,EAAKjI,EAASjE,OAAOiM,QAAQ2sB,IAAiB/rB,EAAKX,EAAGxJ,QAASmK,EAAGhK,KAAMgK,EAAKX,EAAGxJ,OAAQ,CAC7F,IAAIiM,EAAKvK,EAAOyI,EAAGrK,MAAO,GAAIiF,EAAMkH,EAAG,GAAInM,EAAQmM,EAAG,GACtDkqB,EAAgBpxB,GAAOjF,CAC1B,CACJ,CACD,MAAO4F,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQyE,IAAOA,EAAGhK,OAASgF,EAAKqE,EAAG7D,SAASR,EAAGtH,KAAK2L,EACnD,CACO,QAAE,GAAItE,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CAEL,OAAO00B,GAAaJ,EAAiB,CAAEF,MAAOA,GACtD,EACI34B,OAAOwX,eAAekhB,EAAoBr4B,UAAW,WAAY,CAC7DoX,IAAK,WACD,GAA8B,iBAAnB7W,KAAKs4B,UACZ,OAAOt4B,KAAKs4B,UAChB,IAAIjuB,EAASL,IAEb,GAAMK,aAAuC,EAASA,EAAOkuB,YAA7D,CAGA,IAAIn2B,EAAOpC,KAAKgoB,QAAQ5lB,KAExB,OADApC,KAAKs4B,UAAYE,GAAYp2B,EAnEZ,KAoEVpC,KAAKs4B,SAHX,CAIJ,EACDxhB,YAAY,EACZC,cAAc,IAElB3X,OAAOwX,eAAekhB,EAAoBr4B,UAAW,SAAU,CAC3DoX,IAAK,WACD,OAAO7W,KAAKgoB,QAAQgI,MACvB,EACDlZ,YAAY,EACZC,cAAc,IAElB3X,OAAOwX,eAAekhB,EAAoBr4B,UAAW,OAAQ,CACzDoX,IAAK,WACD,MAAiC,iBAAtB7W,KAAKgoB,QAAQ5lB,KACbpC,KAAKgoB,QAAQ5lB,KAEjB,IACV,EACD0U,YAAY,EACZC,cAAc,IAElB+gB,EAAoBr4B,UAAUs2B,KAAO,SAAUgC,EAAOU,GAGlD,YAFc,IAAVV,IAAoBA,EAAQ,SAChB,IAAZU,IAAsBA,EAAU,IAC7Bt3B,EAAUnB,UAAM,OAAQ,EAAQ,WAEnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAqB,IAAjB8wB,EAAMn3B,OACC,CAAC,EAAc,MAGnB,CAAC,EAAc83B,GADf14B,KAAKoC,KACsC21B,EAAOU,GACzE,EACA,EACA,EACWX,CACX,IAEIa,GAAmC,WACnC,SAASA,EAAkBC,EAASC,GAChC74B,KAAK44B,QAAUA,EACf54B,KAAK64B,eAAiBA,CACzB,CAoCD,OAnCAF,EAAkBl5B,UAAUwwB,QAAU,SAAU8H,GAE5C,YADc,IAAVA,IAAoBA,EAAQ,IACzBM,GAAar4B,KAAK64B,eAAgB,CAAEd,MAAOA,GAC1D,EACI34B,OAAOwX,eAAe+hB,EAAkBl5B,UAAW,WAAY,CAC3DoX,IAAK,WACD,OAAO2hB,GAAYx4B,KAAK44B,QAtHP,IAuHpB,EACD9hB,YAAY,EACZC,cAAc,IAElB3X,OAAOwX,eAAe+hB,EAAkBl5B,UAAW,OAAQ,CACvDoX,IAAK,WACD,MAA4B,iBAAjB7W,KAAK44B,QACL54B,KAAK44B,QAET,IACV,EACD9hB,YAAY,EACZC,cAAc,IAElB4hB,EAAkBl5B,UAAUs2B,KAAO,SAAUgC,EAAOU,GAGhD,YAFc,IAAVV,IAAoBA,EAAQ,SAChB,IAAZU,IAAsBA,EAAU,IAC7Bt3B,EAAUnB,UAAM,OAAQ,EAAQ,WAEnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAqB,IAAjB8wB,EAAMn3B,OACC,CAAC,EAAc,MAGnB,CAAC,EAAc83B,GADf14B,KAAKoC,KACsC21B,EAAOU,GACzE,EACA,EACA,EACWE,CACX,IAEA,SAASH,GAAYM,EAAYC,GAC7B,IAAIjrB,EAAK7G,EACL+xB,EACA3uB,EAASL,IAETuuB,EAAcluB,aAAuC,EAASA,EAAOkuB,YAEzE,GAAKA,EAAL,CAGA,IAAIU,EACJ,GAA0B,iBAAfH,EACPG,EAAWH,EACXE,GAAW,IAAIT,GAAcW,OAAOD,GAAUr4B,YAE7C,GAAIk4B,aAAsBK,KAE3BH,GADAC,EAAWH,GACS5d,UAEnB,GAAI4d,aAAsB1C,gBAC3B6C,EAAWH,EACXE,GAAW,IAAIT,GAAcW,OAAOD,EAASxuB,YAAY7J,YAExD,GAAIw4B,YAAYC,OAAOP,GAExBE,GADAC,EAAWH,GACSQ,gBAEnB,GAAIR,aAAsBM,YAE3BJ,GADAC,EAAWH,GACSQ,gBAEnB,GAAIR,aAAsBS,SAAU,CAErC,IAAIC,EAAWV,EACXW,EAAQ,EACR9O,EAAQ,EACZ,IACI,IAAK,IAAIrf,EAAKjI,EAASm2B,EAASnuB,WAAYY,EAAKX,EAAGxJ,QAASmK,EAAGhK,KAAMgK,EAAKX,EAAGxJ,OAAQ,CAClF,IAAIiM,EAAKvK,EAAOyI,EAAGrK,MAAO,GAAIiF,EAAMkH,EAAG,GAAInM,EAAQmM,EAAG,GAEtD,GADA0rB,GAAS5yB,EAAIjG,OACQ,iBAAVgB,EACP63B,IAAS,IAAIlB,GAAcW,OAAOt3B,GAAOhB,WAExC,MAAIgB,aAAiBu3B,MAMtB,OALAM,GAAS73B,EAAMsZ,IAMlB,CAGD,KAAMyP,GAASoO,EACX,MAEP,CACJ,CACD,MAAOprB,GAASG,EAAM,CAAEnK,MAAOgK,EAAU,CACjC,QACJ,IACQ1B,IAAOA,EAAGhK,OAASgF,EAAKqE,EAAG7D,SAASR,EAAGtH,KAAK2L,EACnD,CACO,QAAE,GAAIwC,EAAK,MAAMA,EAAInK,KAAQ,CACxC,CACDq1B,EAAWS,CACd,MACI,GAAIX,aAAsBY,eAM3B,YADAT,EAAWH,GAGf,OAAOE,CAlEN,CAmEL,CAoBA,IA6KWW,GA7KPC,GAAsC,WACtC,SAASA,EAAqBzG,GAC1BnzB,KAAKmzB,SAAWA,CACnB,CAuFD,OAtFAyG,EAAqBn6B,UAAUwwB,QAAU,SAAU8H,GAC/C,IAAI9wB,EAEJ,QADc,IAAV8wB,IAAoBA,EAAQ,IAC5B/3B,KAAKmzB,SAASlD,mBAAmBmI,QAAS,CAC1C,IAAIyB,EAAc75B,KAAKmzB,SAASlD,QAC5B6J,EAAe,CAAA,EAKnB,OAHyF,QAAxF7yB,EAAK4yB,aAAiD,EAASA,EAAYhrB,eAA4B,IAAP5H,GAAyBA,EAAGtH,KAAKk6B,EAAa,SAAUj4B,EAAOiF,GAC5JizB,EAAajzB,GAAOjF,CACpC,GACmBy2B,GAAayB,EAAc,CAAE/B,MAAOA,GAC9C,CAET,EACI34B,OAAOwX,eAAegjB,EAAqBn6B,UAAW,WAAY,CAC9DoX,IAAK,WACD,IAAI5P,EAAIqE,EACR,QAAuBjG,IAAnBrF,KAAKs4B,UACL,OAAOt4B,KAAKs4B,UAEhB,IAAIyB,EAAoG,QAAnFzuB,EAAsC,QAAhCrE,EAAKjH,KAAKmzB,SAASlD,eAA4B,IAAPhpB,OAAgB,EAASA,EAAG4P,WAAwB,IAAPvL,OAAgB,EAASA,EAAG3L,KAAKsH,EAAI,kBACjJ+xB,EAAWe,EAAgB/N,SAAS+N,EAAe,SAAM10B,EAE7D,OADArF,KAAKs4B,UAAYU,EACVA,CACV,EACDliB,YAAY,EACZC,cAAc,IAElB3X,OAAOwX,eAAegjB,EAAqBn6B,UAAW,SAAU,CAC5DoX,IAAK,WACD,OAAO7W,KAAKmzB,SAAS5W,MACxB,EACDzF,YAAY,EACZC,cAAc,IAElB6iB,EAAqBn6B,UAAUmY,KAAO,WAClC,OAAOzW,EAAUnB,UAAM,OAAQ,EAAQ,WAChC,IAACg6B,EAAaC,EACjB,OAAO93B,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAGIxC,KAAKk6B,iBACNl6B,KAAKk6B,eAAiBl6B,KAAKmzB,SAASgH,SAExClzB,EAAGzE,MAAQ,EACf,KAAK,EAQD,OAPAyE,EAAGvE,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACtB42B,EAAch6B,KAAKk6B,eAAetiB,OAClCqiB,EAAQ,IAAIz4B,QAAQ,SAAUC,GAC1B,OAAOyL,WAEP,WAAc,OAAOzL,EAAQ,KAAQ,EAhTzC,IAiTxB,GAC+B,CAAC,EAAaD,QAAQszB,KAAK,CAACkF,EAAaC,KACpD,KAAK,EAED,MAAO,CAAC,EADDhzB,EAAGxE,QAEd,KAAK,EAED,OADUwE,EAAGxE,OACN,CAAC,EAAc,MAC1B,KAAK,EAAG,MAAO,CAAC,GAEpC,EACA,EACA,EACIm3B,EAAqBn6B,UAAUs2B,KAAO,SAAUgC,EAAOU,GAGnD,YAFc,IAAVV,IAAoBA,EAAQ,SAChB,IAAZU,IAAsBA,EAAU,IAC7Bt3B,EAAUnB,UAAM,OAAQ,EAAQ,WAEnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EACD,OAAqB,IAAjBu1B,EAAMn3B,OACC,CAAC,EAAc,MAEnB,CAAC,EAAaZ,KAAK4X,QAC9B,KAAK,EAED,MAAO,CAAC,EAAc8gB,GADfzxB,EAAGxE,OACwCs1B,EAAOU,IAEjF,EACA,EACA,EACWmB,CACX,IAEIQ,GAAoC,WACpC,SAASA,EAAmB9d,EAAY+d,EAAenf,EAAMof,GACzDt6B,KAAKsc,WAAaA,EAClBtc,KAAKq6B,cAAgBA,EACrBr6B,KAAKkb,KAAOA,EACZlb,KAAKs6B,QAAUA,CAClB,CA2DD,OA1DAl7B,OAAOwX,eAAewjB,EAAmB36B,UAAW,WAAY,CAC5DoX,IAAK,WACD,OAAO7W,KAAKkb,IACf,EACDpE,YAAY,EACZC,cAAc,IAElB3X,OAAOwX,eAAewjB,EAAmB36B,UAAW,SAAU,CAC1DoX,IAAK,WACD,OAAO7W,KAAKsc,UACf,EACDxF,YAAY,EACZC,cAAc,IAElBqjB,EAAmB36B,UAAUwwB,QAAU,SAAU8H,GAC7C,IAAIxW,EAAKta,EAET,QADc,IAAV8wB,IAAoBA,EAAQ,KAC3B/3B,KAAKq6B,cACN,MAAO,GAEX,IAAIpK,EAAU,CAAA,EACVsK,EAAcv6B,KAAKq6B,cAAc1iB,MAAM,QAC3C,IACI,IAAK,IAAI6iB,EAAgBn3B,EAASk3B,GAAcE,EAAkBD,EAAc14B,QAAS24B,EAAgBx4B,KAAMw4B,EAAkBD,EAAc14B,OAAQ,CACnJ,IACIwJ,EAAK9H,EADEi3B,EAAgB74B,MACN+V,MAAM,MAAO,GAAI9Q,EAAMyE,EAAG,GAAI1J,EAAQ0J,EAAG,GAC1DzE,GAAOjF,IACPquB,EAAQppB,GAAOjF,EAEtB,CACJ,CACD,MAAOogB,GAAST,EAAM,CAAE5d,MAAOqe,EAAU,CACjC,QACJ,IACQyY,IAAoBA,EAAgBx4B,OAASgF,EAAKuzB,EAAc/yB,SAASR,EAAGtH,KAAK66B,EACxF,CACO,QAAE,GAAIjZ,EAAK,MAAMA,EAAI5d,KAAQ,CACxC,CACD,OAAO00B,GAAapI,EAAS,CAAE8H,MAAOA,GAC9C,EACIqC,EAAmB36B,UAAUs2B,KAAO,SAAUgC,EAAOU,GAGjD,YAFc,IAAVV,IAAoBA,EAAQ,SAChB,IAAZU,IAAsBA,EAAU,IAC7Bt3B,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAI06B,EACJ,OAAOv4B,EAAYnC,KAAM,SAAUiH,GAC/B,OAAqB,IAAjB8wB,EAAMn3B,OACC,CAAC,EAAc,OAE1B85B,EAAW16B,KAAKs6B,YAEZ1D,GAAU8D,EAAU3C,EAAOU,GACpB,CAAC,EAAciC,IAEnB,CAAC,EAAc,KACtC,EACA,EACA,EACWN,CACX,IAEA,SAAS1B,GAAsB9gB,EAAMmgB,EAAOU,GACxC,IAAK7gB,EACD,OAAO,KACX,IACI,IAAIme,EAAO3nB,KAAK4X,MAAMpO,GAEtB,OADAgf,GAAUb,EAAMgC,EAAOU,GAChB1C,CACV,CACD,MAAOpyB,GACH,OAAO,IACV,CACL,EAEA,SAAWg2B,GACPA,EAAuB,OAAI,SAC3BA,EAAuB,OAAI,QAC9B,CAHD,CAGGA,KAAmBA,GAAiB,CAAE,IACzC,IAAIgB,GAAiB,aASVtC,GAAe,SAAUpI,EAASha,GACzC,IAAI2kB,EAAK3zB,EACLqE,EAAK2K,EAAQ8hB,MAAOA,OAAe,IAAPzsB,EAAgB,GAAKA,EAAIW,EAAKgK,EAAQ4kB,SAAUA,OAAkB,IAAP5uB,EAAgB0tB,GAAe9wB,OAASoD,EAC/HwsB,EAAU70B,EAAc,GAAIJ,EAAOiD,IAAoB,GACvDq0B,EAAgB,CAAA,EAChBzF,EAAU,SAAUxuB,GACpB,IAAIk0B,EAAWl0B,EAAIm0B,cACfvC,EAAQ3lB,KAAK,SAAU/R,GAAK,OAAOA,EAAEi6B,gBAAkBD,CAAS,GAC5DF,IAAalB,GAAesB,SAC5BH,EAAcj0B,GAAO8zB,IAGnB5C,EAAMjlB,KAAK,SAAUrS,GAAK,OAAOA,EAAEu6B,gBAAkBD,CAAS,GAMpED,EAAcj0B,GAAOopB,EAAQppB,GALzBg0B,IAAalB,GAAesB,SAC5BH,EAAcj0B,GAAO8zB,GAMrC,EACI,IACI,IAAK,IAAI5sB,EAAK1K,EAASjE,OAAOwH,KAAKqpB,IAAWjiB,EAAKD,EAAGjM,QAASkM,EAAG/L,KAAM+L,EAAKD,EAAGjM,OAAQ,CAEpFuzB,EADUrnB,EAAGpM,MAEhB,CACJ,CACD,MAAOs5B,GAASN,EAAM,CAAEj3B,MAAOu3B,EAAU,CACjC,QACJ,IACQltB,IAAOA,EAAG/L,OAASgF,EAAK8G,EAAGtG,SAASR,EAAGtH,KAAKoO,EACnD,CACO,QAAE,GAAI6sB,EAAK,MAAMA,EAAIj3B,KAAQ,CACxC,CACD,OAAOm3B,CACX,EACIK,GAAqC,WACrC,SAASA,EAAoB5uB,EAAMyjB,EAAQrL,EAAWyW,EAAWlX,EAAKmX,EAAgB9e,EAAQ+e,EAAUC,EAAiB53B,EAAO63B,QAC7G,IAAXjf,IAAqBA,EAAS,GAClCvc,KAAKuM,KAAOA,EACZvM,KAAKgwB,OAASA,EACdhwB,KAAK2kB,UAAYA,EACjB3kB,KAAKo7B,UAAYA,EACjBp7B,KAAKkkB,IAAMA,EACXlkB,KAAKq7B,eAAiBA,EACtBr7B,KAAKuc,OAASA,EACdvc,KAAKs7B,SAAWA,EAChBt7B,KAAKu7B,gBAAkBA,EACvBv7B,KAAK2D,MAAQA,EACb3D,KAAKw7B,QAAUA,CAClB,CAuBD,OAtBAL,EAAoB17B,UAAUg8B,eAAiB,WAC3C,IAAIx0B,EAAIqE,EAAIW,EAAI8B,EACZ2tB,EAAa,CACbnvB,KAAMvM,KAAKuM,KACXyjB,OAAQhwB,KAAKgwB,OACb9L,IAAKlkB,KAAKkkB,IACVS,UAAW3kB,KAAK2kB,UAChBpI,OAAQvc,KAAKuc,OACb+e,SAAUt7B,KAAKs7B,SACf33B,MAAO3D,KAAK2D,MACZy3B,UAAWp7B,KAAKo7B,UAChBI,QAASx7B,KAAKw7B,QACd3C,eAA+C,QAA9B5xB,EAAKjH,KAAKq7B,sBAAmC,IAAPp0B,OAAgB,EAASA,EAAGgpB,QAAQrsB,EAAc,GAAIJ,EAAOgD,IAAe,IACnIm1B,gBAAgD,QAA9BrwB,EAAKtL,KAAKq7B,sBAAmC,IAAP/vB,OAAgB,EAASA,EAAG0tB,SACpF4C,gBAAiD,QAA/B3vB,EAAKjM,KAAKu7B,uBAAoC,IAAPtvB,OAAgB,EAASA,EAAGgkB,QAAQrsB,EAAc,GAAIJ,EAAOgD,IAAe,IACrIq1B,iBAAkD,QAA/B9tB,EAAK/N,KAAKu7B,uBAAoC,IAAPxtB,OAAgB,EAASA,EAAGirB,UAE1F,OAAO55B,OAAO08B,YAAY18B,OAAOiM,QAAQqwB,GAAYxtB,OAAO,SAAUjH,GAC/D,IAACqE,EAAK9H,EAAOyD,EAAI,GACpB,OAD4BqE,EAAG,QAClBjG,IAD0BiG,EAAG,EAE7C,GACT,EACW6vB,CACX,ICtfA,IAAIY,GACA,SAA8B7pB,EAAUkiB,QACzB,IAAPA,IAAiBA,EAAKzpB,KAC1B3K,KAAKkS,SAAWA,EAChBlS,KAAKo0B,GAAKA,CACb,EAID4H,GAAiC,WACjC,SAASA,EAAgBjkB,GACrB/X,KAAKi8B,eAAiB,IAAI5W,IAC1BrlB,KAAKk8B,aAAc,EACnBl8B,KAAK+X,OAASA,EACd,IAAIlN,EAAcb,IACbgyB,EAAgBpU,gBAIrB5nB,KAAK6K,YAAcA,EACtB,CAkTD,OAjTAmxB,EAAgBpU,YAAc,WAC1B,IAAI/c,EAAcb,IAClB,QAASa,KAAiBA,EAAYklB,KAC9C,EACIiM,EAAgBv8B,UAAUy0B,UAAY,SAAUiI,EAAepkB,GAC3D,IAAI9Q,EAAIqE,EAAIW,EAAI8B,EAAIC,EAAIyT,EAAIE,EAAIC,EAAIC,EAAIC,EAKxC,GAJK9hB,KAAK+X,SACN/X,KAAK+X,OAASA,GAElB/X,KAAKi8B,eAAel0B,IAAIo0B,EAAc/H,GAAI+H,IACrCn8B,KAAKk8B,YAAa,CAGnB,IAAIE,EAAqK,QAAlJnwB,EAA+F,QAAzFX,EAAiC,QAA3BrE,EAAKjH,KAAK6K,mBAAgC,IAAP5D,OAAgB,EAASA,EAAGo1B,sBAAmC,IAAP/wB,OAAgB,EAASA,EAAG7L,iBAA8B,IAAPwM,OAAgB,EAASA,EAAGgc,KAGzMqU,EAAqK,QAAlJ7a,EAA+F,QAAzFzT,EAAiC,QAA3BD,EAAK/N,KAAK6K,mBAAgC,IAAPkD,OAAgB,EAASA,EAAGsuB,sBAAmC,IAAPruB,OAAgB,EAASA,EAAGvO,iBAA8B,IAAPgiB,OAAgB,EAASA,EAAG9F,KAGzM4gB,EAAiL,QAAlJ1a,EAA+F,QAAzFD,EAAiC,QAA3BD,EAAK3hB,KAAK6K,mBAAgC,IAAP8W,OAAgB,EAASA,EAAG0a,sBAAmC,IAAPza,OAAgB,EAASA,EAAGniB,iBAA8B,IAAPoiB,OAAgB,EAASA,EAAG2a,iBACrNJ,GAAmBE,GAAmBC,GACtCv8B,KAAKy8B,WAAWL,EAAiBE,EAAiBC,GAGtD,IAAIG,EAA4C,QAA3B5a,EAAK9hB,KAAK6K,mBAAgC,IAAPiX,OAAgB,EAASA,EAAGiO,MAEhF2M,GACA18B,KAAK28B,aAAaD,GAGtB18B,KAAKk8B,aAAc,CACtB,CACT,EACIF,EAAgBv8B,UAAU+0B,YAAc,SAAU2H,GAC9Cn8B,KAAKi8B,eAAezZ,OAAO2Z,EAAc/H,GACjD,EACI4H,EAAgBv8B,UAAUm9B,sBAAwB,SAAUhzB,GACxD,IAAImD,EAAQ/M,KACZA,KAAKi8B,eAAeptB,QAAQ,SAAUqD,GAClC,IAAIjL,EACJ,IACIiL,EAASA,SAAStI,EACrB,CACD,MAAOizB,GAIqB,QAAvB51B,EAAK8F,EAAMgL,cAA2B,IAAP9Q,GAAyBA,EAAG8L,MAAM,gEAAiE8pB,EACtI,CACb,EACA,EACIb,EAAgBv8B,UAAUq9B,0BAA4B,SAAUC,EAAaC,EAAa3B,EAAgBE,EAAiB0B,EAAY7B,EAAW8B,GAC9I,IAAIj2B,EAEJ,QAAkB5B,IAAd+1B,QAA6C/1B,IAAlB63B,EAA/B,CAMA,IAAIhZ,EAoBA3H,EAAQ5Y,EAnBRqsB,EAAS,MASb,IA9FR,SAAmBgN,GACf,MAA8B,iBAAhBA,GAA4C,OAAhBA,GAAwB,QAASA,GAAe,WAAYA,CAC1G,CAoFYG,CAAUH,GAKV9Y,EAAgG,QAAzFjd,EAAK+1B,aAAiD,EAASA,EAAYvyB,gBAA6B,IAAPxD,OAAgB,EAASA,EAAGtH,KAAKq9B,IAJzI9Y,EAAM8Y,EAAiB,IACvBhN,EAASgN,EAAoB,QAM7B9Y,EACA,IACI,IAAIkZ,EAAY,IAAIrQ,IAAI7I,GAExBA,EAAM,GAAGhgB,OAAOk5B,EAAUC,SAAU,MAAMn5B,OAAOk5B,EAAUE,MAAMp5B,OAAOk5B,EAAUnQ,UAAU/oB,OAAOk5B,EAAUzZ,QAAQzf,OAAOk5B,EAAUrY,KAEzI,CACD,MAAO8X,GAAQ,CAEnB7M,GAAUqL,aAAuD,EAASA,EAAerL,SAAWA,EAEhGuL,IACAhf,EAASgf,EAAgBhf,QAEzB0gB,IACAt5B,EAAQ,CACJyI,KAAM6wB,EAAW7wB,MAAQ,eACzBtC,QAASmzB,EAAWnzB,SAAW,6BAEnCyS,EAAS,GAEb,IAAI+e,EAAWtwB,KAAKyQ,MAAM8hB,YAAYna,MAAQ8Z,GAC1C1B,EAAUxwB,KAAKyQ,MAAM2f,EAAYE,GACjCkC,EAAe,IAAIrC,GAAoB4B,EAAa/M,EAAQoL,EAChEA,EAAWlX,EAAKmX,EAAgB9e,EAAQ+e,EAAUC,EAAiB53B,EAAO63B,GAC1Ex7B,KAAK48B,sBAAsBY,EArC1B,CAsCT,EACIxB,EAAgBv8B,UAAUg+B,cAAgB,WACtC,IAAIx2B,EAAIqE,EAER,MAAO,CACH8vB,UAA+B,QAAnBn0B,EAAKkS,KAAKiK,WAAwB,IAAPnc,OAAgB,EAASA,EAAGtH,KAAKwZ,MACxE+jB,cAAoG,QAApF5xB,EAAqB,OAAhBiyB,kBAAwC,IAAhBA,iBAAyB,EAASA,YAAYna,WAAwB,IAAP9X,OAAgB,EAASA,EAAG3L,KAAK49B,aAEzJ,EACIvB,EAAgBv8B,UAAUk9B,aAAe,SAAUD,GAC/C,IAAI3vB,EAAQ/M,KAEPA,KAAK6K,aAAgB6xB,IAS1B18B,KAAK6K,YAAYklB,MAAQ,SAAUiN,EAAaU,GAAe,OAAOv8B,EAAU4L,OAAO,OAAQ,EAAQ,WACnG,IAAI4wB,EAAYC,EAAkBC,EAAeC,EAC7C72B,EAAIqE,EACR,OAAOnJ,EAAYnC,KAAM,SAAUiM,GAC/B,OAAQA,EAAGzJ,OACP,KAAK,EACD,IACIm7B,EAAa39B,KAAKy9B,eACrB,CACD,MAAO95B,GAEoB,QAAtBsD,EAAKjH,KAAK+X,cAA2B,IAAP9Q,GAAyBA,EAAG8L,MAAM,2DAA4DpP,EAChI,CACDsI,EAAGzJ,MAAQ,EACf,KAAK,EAED,OADAyJ,EAAGvJ,KAAKU,KAAK,CAAC,EAAG,EAAC,CAAI,IACf,CAAC,EAAas5B,EAAcM,EAAaU,IACpD,KAAK,EAED,OADAE,EAAmB3xB,EAAGxJ,OACf,CAAC,EAAa,GACzB,KAAK,EAID,OAHAq7B,EAAQ7xB,EAAGxJ,OAEXo7B,EAAgBC,EACT,CAAC,EAAa,GACzB,KAAK,EAED,IACI99B,KAAK88B,0BAA0B,QAASE,EAAaU,EAAc,IAAI5F,GAAoB4F,QAAer4B,EAAWu4B,EAAmB,IAAIhE,GAAqBgE,QAAoBv4B,EAAWw4B,EAEhMF,aAA+C,EAASA,EAAWvC,UAEnEuC,aAA+C,EAASA,EAAWT,cACtE,CACD,MAAOL,GAIoB,QAAtBvxB,EAAKtL,KAAK+X,cAA2B,IAAPzM,GAAyBA,EAAGyH,MAAM,oDAAqD8pB,EACzH,CAED,GAAIe,EAEA,MAAO,CAAC,EAAcA,GAGtB,MAAMC,EAIlC,EACS,EAAE,EACX,EAWI7B,EAAgB+B,oBAAsB,SAAUC,EAAWrkB,GACvD,OAAO,WACH,IAAI1S,EAAIqE,EACR,IACI,GAA+B,SAA3B0yB,EAAUC,cAEV,GAAmC,QAA9Bh3B,EAAK0S,EAAQ9O,mBAAgC,IAAP5D,OAAgB,EAASA,EAAGi3B,gBAEnE,OAAOvkB,EAAQ9O,YAAYqzB,gBAAgBF,EAAU7K,eAGxD,GAAI,CAAC,OAAQ,IAAI5rB,SAASy2B,EAAUC,cAGrC,OAAO7vB,KAAK4X,MAAMgY,EAAU5K,aAEnC,CACD,MAAOyJ,GAQH,OANIA,aAAexnB,OAAsB,sBAAbwnB,EAAIzwB,OAGF,QAAzBd,EAAKqO,EAAQ5B,cAA2B,IAAPzM,GAAyBA,EAAG3H,MAAM,gEAAgEO,OAAO85B,EAAUC,aAAc,OAGhK,IACV,CACD,OAAO,IACnB,CACA,EACIjC,EAAgBv8B,UAAUg9B,WAAa,SAAUL,EAAiBE,EAAiBC,GAE/E,GAAKv8B,KAAK6K,aAAgBuxB,GAAoBE,EAA9C,CAGA,IAAI6B,EAAWn+B,KAAK6K,YAAYwxB,eAAe58B,UAC3C2+B,EAAyBp+B,KAO7Bm+B,EAASlW,KAAO,WAGZ,IAFA,IAAIhhB,EAAIqE,EACJ2J,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAEzB,IACIjJ,EAAKzI,EAAOyR,EAAM,GAAI+a,EAAS/jB,EAAG,GAAIiY,EAAMjY,EAAG,GACnD,IAFcjM,KAIFq+B,0BAA4Bh+B,EAAS,CAAE2vB,OAAQA,EAAQ9L,IAAuE,QAAjEjd,EAAKid,aAAiC,EAASA,EAAIzZ,gBAA6B,IAAPxD,OAAgB,EAASA,EAAGtH,KAAKukB,GAAM+L,QAAS,CAAE,GAAImO,EAAuBX,gBAC9N,CACD,MAAOZ,GAEsC,QAAxCvxB,EAAK8yB,EAAuBrmB,cAA2B,IAAPzM,GAAyBA,EAAG3H,MAAM,sDAAuDk5B,EAC7I,CAED,OAAOT,EAAgBv7B,MAXTb,KAWwBiV,EAClD,EASQkpB,EAASxiB,KAAO,WAEZ,IADA,IAAI1G,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAGzB,IACIopB,EADYt+B,KAEZs6B,EAAU0B,EAAgB+B,oBAFd/9B,KAE6Co+B,GACzDh8B,EAAO6S,EAAK,GACZuoB,EAAec,EAAQD,0BAoB3B,OAnBAC,EAAQpQ,iBAAiB,UAAW,WAChC,IAAIjnB,EACJ,IACI,IAAI20B,EAAkB0C,EAAQC,wBAC1B1C,EAAmByC,EAAQE,kBAAkB,kBAC7CjD,EAAkB,IAAInB,GAAmBkE,EAAQ/hB,OAAQqf,EAE7DC,EAAmB7P,SAAS6P,EAAkB,SAAMx2B,EAAWi1B,GAC3DzB,EAAiByF,EAAQD,0BAA0BpO,QACnDoL,EAAiB,IAAI1C,GAAkBv2B,EAAMy2B,GACjD2E,EAAajhB,OAAS+hB,EAAQ/hB,OAC9B6hB,EAAuBtB,0BAA0B,MAAO,CAAE5Y,IAAKsZ,EAAatZ,IAAK8L,OAAQwN,EAAaxN,QAAUqL,EAAgBE,OAAiBl2B,EAAWm4B,EAAapC,UAAWoC,EAAaN,cACpM,CACD,MAAOL,GAEsC,QAAxC51B,EAAKm3B,EAAuBrmB,cAA2B,IAAP9Q,GAAyBA,EAAGtD,MAAM,uDAAwDk5B,EAC9I,CACjB,GAEmBP,EAAgBz7B,MAAMy9B,EAASrpB,EAClD,EASQkpB,EAAS3B,iBAAmB,SAAUtE,EAAYC,GAC9C,IAAIlxB,EAEJ,IADcjH,KAGFq+B,0BAA0BpO,QAAQiI,GAAcC,CAC3D,CACD,MAAO0E,GAEsC,QAAxC51B,EAAKm3B,EAAuBrmB,cAA2B,IAAP9Q,GAAyBA,EAAGtD,MAAM,kEAAmEk5B,EACzJ,CAEDN,EAA4B17B,MAVdb,KAU6B,CAACk4B,EAAYC,GACpE,CAzFS,CA0FT,EACW6D,CACX,IAGWyC,GAAkB,IAAIzC,GCjV7B0C,GAAgC,WAChC,SAASA,IACR,CAyDD,OAxDAA,EAAej/B,UAAUumB,MAAQ,WAC7B,OAAO7kB,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,OAAOmC,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,EAAc5G,EAASA,EAASA,EAASA,EAAS,CAAE,EAAE8E,GAAgBnF,KAAK2+B,eAAgB3+B,KAAK4+B,eAAgB5+B,KAAK6+B,eAC7I,EACA,EACA,EACIH,EAAej/B,UAAUk/B,YAAc,WACnC,IAAIG,EAASrb,KAOb,MAAO,CACHre,aAPc05B,EAAmB,aAQjCx5B,YAPaw5B,EAAkB,YAQ/Bv5B,OAPQu5B,EAAa,OAQrBt5B,WAPYs5B,EAAiB,WAQ7Br5B,WAPYq5B,EAAiB,WAQ7Bp5B,SAPUo5B,EAAe,SASrC,EACIJ,EAAej/B,UAAUm/B,YAAc,WACnC,IAAI33B,EAAIqE,EACJyzB,EAAO,CACPp5B,cAAUN,EACVO,sBAAkBP,GAEtB,IACI05B,EAAKp5B,SAAWugB,SAASvgB,eAAYN,EACrC05B,EAAKn5B,iBAAyG,QAArF0F,EAA8B,QAAxBrE,EAAK83B,EAAKp5B,gBAA6B,IAAPsB,OAAgB,EAASA,EAAG0Q,MAAM,KAAK,UAAuB,IAAPrM,EAAgBA,OAAKjG,CAC9I,CACD,MAAO4G,GAEN,CACD,OAAO8yB,CACf,EACIL,EAAej/B,UAAUo/B,YAAc,WACnC,IAAI53B,EACA63B,EAASrb,KACb,OAAOxc,EAAK,CAAE,GACPzC,GAASs6B,EAAOt6B,GACnByC,EAAGxC,GAAUq6B,EAAOr6B,GACpBwC,EAAGvC,GAAUo6B,EAAOp6B,GACpBuC,EAAGtC,GAASm6B,EAAOn6B,GACnBsC,EAAGrC,GAAek6B,EAAOl6B,GACzBqC,EAAGpC,GAAai6B,EAAOj6B,GACvBoC,EAAGnC,GAAWg6B,EAAOh6B,GACrBmC,EAAGlC,GAAW+5B,EAAO/5B,GACrBkC,EAAGjC,GAAU85B,EAAO95B,GACpBiC,EAAGhC,GAAU65B,EAAO75B,GACpBgC,EAAG/B,GAAU45B,EAAO55B,GACpB+B,CACZ,EACWy3B,CACX,IC9DWM,GAAsB,gBACtBC,GAAoB,QAEpBC,GAAW,0BACXC,GAAY,yBACZC,GAAc,6BAOdC,GAAyB,SAAUznB,EAAM0nB,GAChD,IAAIt4B,EAAKC,EAET,QADmC,IAA/Bq4B,IAAyCA,EAA6B,IACtD,iBAAT1nB,EACP,MAAO,GAEX,IAAI5V,EAAS4V,EAMb5V,GAFAA,GAFAA,EAASA,EAAOkJ,QAAQg0B,GAAUD,KAElB/zB,QAAQi0B,GAAWF,KAEnB/zB,QAAQk0B,GAAaH,IACrC,IAEI,IAAK,IAAIM,EAA+Bl8B,EAASi8B,GAA6BE,EAAiCD,EAA6Bz9B,QAAS09B,EAA+Bv9B,KAAMu9B,EAAiCD,EAA6Bz9B,OAAQ,CAC5P,IAAI29B,EAAUD,EAA+B59B,MAC7C,IACII,EAASA,EAAOkJ,QAAQu0B,EAASR,GACpC,CACD,MAAO3zB,GAEN,CACJ,CACJ,CACD,MAAO9D,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQg4B,IAAmCA,EAA+Bv9B,OAASgF,EAAKs4B,EAA6B93B,SAASR,EAAGtH,KAAK4/B,EACrI,CACO,QAAE,GAAIv4B,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACD,OAAO3B,CACX,EAKW09B,GAAe,SAAUC,GAChC,GAAwB,oBAAbzZ,WAA6BA,SAAS0Z,MAC7C,MAAO,GAEX,IAAIC,EAAe3Z,SAAS4Z,cAAc,SAC1C,OAAID,GAAgBA,EAAaE,aAAaf,IACnCC,GAEJU,EAAqBA,EAAmBzZ,SAAS0Z,OAAS1Z,SAAS0Z,KAC9E,EC5DA,SAASI,GAAgC18B,EAAG28B,GAAkB,IAAIC,EAAuB,oBAAXn9B,QAA0BO,EAAEP,OAAOC,WAAaM,EAAE,cAAe,GAAI48B,EAAI,OAAQA,EAAKA,EAAGvgC,KAAK2D,IAAIxB,KAAKqO,KAAK+vB,GAAK,GAAI3gC,MAAM2H,QAAQ5D,KAAO48B,EAExN,SAAqC58B,EAAG68B,GAAU,IAAK78B,EAAG,OAAQ,GAAiB,iBAANA,EAAgB,OAAO88B,GAAkB98B,EAAG68B,GAAS,IAAIz/B,EAAItB,OAAOK,UAAUgL,SAAS9K,KAAK2D,GAAGW,MAAM,GAAI,GAAc,WAANvD,GAAkB4C,EAAErD,cAAaS,EAAI4C,EAAErD,YAAYmM,MAAM,GAAU,QAAN1L,GAAqB,QAANA,EAAa,OAAOnB,MAAMuE,KAAKR,GAAI,GAAU,cAAN5C,GAAqB,2CAA2C2/B,KAAK3/B,GAAI,OAAO0/B,GAAkB98B,EAAG68B,EAAU,CAFnMG,CAA4Bh9B,KAAO28B,GAAkB38B,GAAyB,iBAAbA,EAAE1C,OAAqB,CAAMs/B,IAAI58B,EAAI48B,GAAI,IAAIz/B,EAAI,EAAG,OAAO,WAAc,OAAIA,GAAK6C,EAAE1C,OAAe,CAAEqB,MAAM,GAAe,CAAEA,MAAM,EAAOL,MAAO0B,EAAE7C,KAAO,CAAK,CAAC,MAAM,IAAIZ,UAAU,wIAA2I,CAI5lB,SAASugC,GAAkBnlB,EAAKslB,IAAkB,MAAPA,GAAeA,EAAMtlB,EAAIra,UAAQ2/B,EAAMtlB,EAAIra,QAAQ,IAAK,IAAIH,EAAI,EAAG+/B,EAAO,IAAIjhC,MAAMghC,GAAM9/B,EAAI8/B,EAAK9/B,IAAO+/B,EAAK//B,GAAKwa,EAAIxa,GAAM,OAAO+/B,CAAO,CAEvL,SAASC,GAAkBjY,EAAQkY,GAAS,IAAK,IAAIjgC,EAAI,EAAGA,EAAIigC,EAAM9/B,OAAQH,IAAK,CAAE,IAAIkgC,EAAaD,EAAMjgC,GAAIkgC,EAAW7pB,WAAa6pB,EAAW7pB,aAAc,EAAO6pB,EAAW5pB,cAAe,EAAU,UAAW4pB,IAAYA,EAAWC,UAAW,GAAMxhC,OAAOwX,eAAe4R,EAAQmY,EAAW95B,IAAK85B,GAAgB,CAE7T,SAASE,GAAaC,EAAaC,EAAYC,GAAmJ,OAAhID,GAAYN,GAAkBK,EAAYrhC,UAAWshC,GAAiBC,GAAaP,GAAkBK,EAAaE,GAAqBF,CAAc,CAGvN,IAAIG,GAAa,WACf,MAAyB,mBAAXl+B,MAChB,EAEIm+B,GAAY,SAAU90B,GACxB,OAAO60B,MAAgBpuB,QAAQ9P,OAAOqJ,GACxC,EAEI+0B,GAAY,SAAU/0B,GACxB,OAAO80B,GAAU90B,GAAQrJ,OAAOqJ,GAAQ,KAAOA,CACjD,EAEI60B,OAAiBC,GAAU,gBAC7Bn+B,OAAOq+B,WAAar+B,OAAO,eAG7B,IAAIs+B,GAAiBF,GAAU,YAC3BG,GAAmBH,GAAU,cAC7BI,GAAgBJ,GAAU,WAE9B,SAASK,GAAUvpB,EAAKpR,GACtB,IAAIjF,EAAQqW,EAAIpR,GAChB,GAAa,MAATjF,EAAJ,CACA,GAAqB,mBAAVA,EAAsB,MAAM,IAAI/B,UAAU+B,EAAQ,sBAC7D,OAAOA,CAF4B,CAGrC,CAEA,SAAS6/B,GAAWxpB,GAClB,IAAIypB,EAAOzpB,EAAIhY,YAUf,YARaoF,IAATq8B,GAGW,QAFbA,EAAOA,EAAKH,OAGVG,OAAOr8B,QAIKA,IAATq8B,EAAqBA,EAAOC,EACrC,CAEA,SAASC,GAAaC,GACpB,OAAOA,aAAaF,EACtB,CAEA,SAASG,GAAgB/gC,GACnB+gC,GAAgB7zB,IAClB6zB,GAAgB7zB,IAAIlN,GAEpBmM,WAAW,WACT,MAAMnM,CACZ,EAEA,CAEA,SAASghC,GAAQrpB,GACflX,QAAQC,UAAUS,KAAK,WACrB,IACEwW,GACD,CAAC,MAAO3X,GACP+gC,GAAgB/gC,EACjB,CACL,EACA,CAEA,SAASihC,GAAoBC,GAC3B,IAAIC,EAAUD,EAAaE,SAC3B,QAAgB98B,IAAZ68B,IACJD,EAAaE,cAAW98B,EAEnB68B,GAIL,IACE,GAAuB,mBAAZA,EACTA,QACK,CACL,IAAI1N,EAAcgN,GAAUU,EAAS,eAEjC1N,GACFA,EAAY70B,KAAKuiC,EAEpB,CACF,CAAC,MAAOnhC,GACP+gC,GAAgB/gC,EACjB,CACH,CAEA,SAASqhC,GAAkBH,GACzBA,EAAaI,eAAYh9B,EACzB48B,EAAaK,YAASj9B,EACtB48B,EAAaM,OAAS,QACxB,CAkBA,SAASC,GAAmBP,EAAc11B,EAAM3K,GAC9CqgC,EAAaM,OAAS,UACtB,IAAIE,EAAWR,EAAaI,UAE5B,IACE,IAAI9+B,EAAIi+B,GAAUiB,EAAUl2B,GAE5B,OAAQA,GACN,IAAK,OACChJ,GAAGA,EAAE5D,KAAK8iC,EAAU7gC,GACxB,MAEF,IAAK,QAEH,GADAwgC,GAAkBH,IACd1+B,EAAgC,MAAM3B,EAAnC2B,EAAE5D,KAAK8iC,EAAU7gC,GACxB,MAEF,IAAK,WACHwgC,GAAkBH,GACd1+B,GAAGA,EAAE5D,KAAK8iC,GAGnB,CAAC,MAAO1hC,GACP+gC,GAAgB/gC,EACjB,CAE2B,WAAxBkhC,EAAaM,OAAqBP,GAAoBC,GAA+C,YAAxBA,EAAaM,SAAsBN,EAAaM,OAAS,QAC5I,CAEA,SAASG,GAAST,EAAc11B,EAAM3K,GACpC,GAA4B,WAAxBqgC,EAAaM,OAAjB,CAEA,GAA4B,cAAxBN,EAAaM,OASjB,MAA4B,UAAxBN,EAAaM,QACfN,EAAaM,OAAS,YACtBN,EAAaK,OAAS,CAAC,CACrB/1B,KAAMA,EACN3K,MAAOA,SAETmgC,GAAQ,WACN,OAhEN,SAA2BE,GACzB,IAAIt2B,EAAQs2B,EAAaK,OAEzB,GAAK32B,EAAL,CAIAs2B,EAAaK,YAASj9B,EACtB48B,EAAaM,OAAS,QAEtB,IAAK,IAAI9hC,EAAI,EAAGA,EAAIkL,EAAM/K,SACxB4hC,GAAmBP,EAAct2B,EAAMlL,GAAG8L,KAAMZ,EAAMlL,GAAGmB,OAC7B,WAAxBqgC,EAAaM,UAFiB9hC,GALnC,CASH,CAkDakiC,CAAkBV,EAC/B,SAIEO,GAAmBP,EAAc11B,EAAM3K,GApBrCqgC,EAAaK,OAAOl/B,KAAK,CACvBmJ,KAAMA,EACN3K,MAAOA,GALkC,CAwB/C,CAEA,IAAIghC,GAA4B,WAC9B,SAASA,EAAaH,EAAUI,GAG9B7iC,KAAKmiC,cAAW98B,EAChBrF,KAAKqiC,UAAYI,EACjBziC,KAAKsiC,YAASj9B,EACdrF,KAAKuiC,OAAS,eACd,IAAIO,EAAuB,IAAIC,GAAqB/iC,MAEpD,IACEA,KAAKmiC,SAAWU,EAAWljC,UAAK0F,EAAWy9B,EAC5C,CAAC,MAAO/hC,GACP+hC,EAAqBn/B,MAAM5C,EAC5B,CAEmB,iBAAhBf,KAAKuiC,SAA2BviC,KAAKuiC,OAAS,QACnD,CAkBD,OAhBaK,EAAanjC,UAEnB+0B,YAAc,WACC,WAAhBx0B,KAAKuiC,SACPH,GAAkBpiC,MAClBgiC,GAAoBhiC,MAE1B,EAEE6gC,GAAa+B,EAAc,CAAC,CAC1B/7B,IAAK,SACLgQ,IAAK,WACH,MAAuB,WAAhB7W,KAAKuiC,MACb,KAGIK,CACT,CApCgC,GAsC5BG,GAAoC,WACtC,SAASA,EAAqBd,GAC5BjiC,KAAKgjC,cAAgBf,CACtB,CAED,IAAIgB,EAAUF,EAAqBtjC,UAqBnC,OAnBAwjC,EAAQnhC,KAAO,SAAcF,GAC3B8gC,GAAS1iC,KAAKgjC,cAAe,OAAQphC,EACzC,EAEEqhC,EAAQt/B,MAAQ,SAAe/B,GAC7B8gC,GAAS1iC,KAAKgjC,cAAe,QAASphC,EAC1C,EAEEqhC,EAAQC,SAAW,WACjBR,GAAS1iC,KAAKgjC,cAAe,WACjC,EAEEnC,GAAakC,EAAsB,CAAC,CAClCl8B,IAAK,SACLgQ,IAAK,WACH,MAAqC,WAA9B7W,KAAKgjC,cAAcT,MAC3B,KAGIQ,CACT,CA3BwC,GA6BpCpB,GAA0B,WAC5B,SAASA,EAAWkB,GAClB,KAAM7iC,gBAAgB2hC,GAAa,MAAM,IAAI9hC,UAAU,6CACvD,GAA0B,mBAAfgjC,EAA2B,MAAM,IAAIhjC,UAAU,6CAC1DG,KAAKmjC,YAAcN,CACpB,CAED,IAAIO,EAAUzB,EAAWliC,UAsTzB,OApTA2jC,EAAQlP,UAAY,SAAmBuO,GASrC,MARwB,iBAAbA,GAAsC,OAAbA,IAClCA,EAAW,CACT3gC,KAAM2gC,EACN9+B,MAAOhD,UAAU,GACjBuiC,SAAUviC,UAAU,KAIjB,IAAIiiC,GAAaH,EAAUziC,KAAKmjC,YAC3C,EAEEC,EAAQv0B,QAAU,SAAiB6J,GACjC,IAAI3L,EAAQ/M,KAEZ,OAAO,IAAIwB,QAAQ,SAAUC,EAASC,GACpC,GAAkB,mBAAPgX,EAUX,IAAIupB,EAAel1B,EAAMmnB,UAAU,CACjCpyB,KAAM,SAAUF,GACd,IACE8W,EAAG9W,EAAOK,EACX,CAAC,MAAOlB,GACPW,EAAOX,GACPkhC,EAAazN,aACd,CACF,EACD7wB,MAAOjC,EACPwhC,SAAUzhC,SAnBVC,EAAO,IAAI7B,UAAU6Y,EAAK,uBAI5B,SAASzW,IACPggC,EAAazN,cACb/yB,GACD,CAcP,EACA,EAEE2hC,EAAQ74B,IAAM,SAAamO,GACzB,IAAI2qB,EAASrjC,KAEb,GAAkB,mBAAP0Y,EAAmB,MAAM,IAAI7Y,UAAU6Y,EAAK,sBAEvD,OAAO,IADC+oB,GAAWzhC,MACZ,CAAM,SAAUyiC,GACrB,OAAOY,EAAOnP,UAAU,CACtBpyB,KAAM,SAAUF,GACd,IACEA,EAAQ8W,EAAG9W,EACZ,CAAC,MAAOb,GACP,OAAO0hC,EAAS9+B,MAAM5C,EACvB,CAED0hC,EAAS3gC,KAAKF,EACf,EACD+B,MAAO,SAAU5C,GACf0hC,EAAS9+B,MAAM5C,EAChB,EACDmiC,SAAU,WACRT,EAASS,UACV,GAET,EACA,EAEEE,EAAQl1B,OAAS,SAAgBwK,GAC/B,IAAI4qB,EAAStjC,KAEb,GAAkB,mBAAP0Y,EAAmB,MAAM,IAAI7Y,UAAU6Y,EAAK,sBAEvD,OAAO,IADC+oB,GAAWzhC,MACZ,CAAM,SAAUyiC,GACrB,OAAOa,EAAOpP,UAAU,CACtBpyB,KAAM,SAAUF,GACd,IACE,IAAK8W,EAAG9W,GAAQ,MACjB,CAAC,MAAOb,GACP,OAAO0hC,EAAS9+B,MAAM5C,EACvB,CAED0hC,EAAS3gC,KAAKF,EACf,EACD+B,MAAO,SAAU5C,GACf0hC,EAAS9+B,MAAM5C,EAChB,EACDmiC,SAAU,WACRT,EAASS,UACV,GAET,EACA,EAEEE,EAAQ/nB,OAAS,SAAgB3C,GAC/B,IAAI6qB,EAASvjC,KAEb,GAAkB,mBAAP0Y,EAAmB,MAAM,IAAI7Y,UAAU6Y,EAAK,sBACvD,IAAI8qB,EAAI/B,GAAWzhC,MACfyjC,EAAU9iC,UAAUC,OAAS,EAC7B8iC,GAAW,EAEX9f,EADOjjB,UAAU,GAErB,OAAO,IAAI6iC,EAAE,SAAUf,GACrB,OAAOc,EAAOrP,UAAU,CACtBpyB,KAAM,SAAUF,GACd,IAAI+hC,GAASD,EAGb,GAFAA,GAAW,GAENC,GAASF,EACZ,IACE7f,EAAMlL,EAAGkL,EAAKhiB,EACf,CAAC,MAAOb,GACP,OAAO0hC,EAAS9+B,MAAM5C,EACvB,MAED6iB,EAAMhiB,CAET,EACD+B,MAAO,SAAU5C,GACf0hC,EAAS9+B,MAAM5C,EAChB,EACDmiC,SAAU,WACR,IAAKQ,IAAaD,EAAS,OAAOhB,EAAS9+B,MAAM,IAAI9D,UAAU,oCAC/D4iC,EAAS3gC,KAAK8hB,GACd6e,EAASS,UACV,GAET,EACA,EAEEE,EAAQl/B,OAAS,WAGf,IAFA,IAAI0/B,EAAS5jC,KAEJ6jC,EAAOljC,UAAUC,OAAQkjC,EAAU,IAAIvkC,MAAMskC,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAClFD,EAAQC,GAAQpjC,UAAUojC,GAG5B,IAAIP,EAAI/B,GAAWzhC,MACnB,OAAO,IAAIwjC,EAAE,SAAUf,GACrB,IAAIR,EACAz3B,EAAQ,EAsBZ,OApBA,SAASw5B,EAAUliC,GACjBmgC,EAAengC,EAAKoyB,UAAU,CAC5BpyB,KAAM,SAAUmB,GACdw/B,EAAS3gC,KAAKmB,EACf,EACDU,MAAO,SAAU5C,GACf0hC,EAAS9+B,MAAM5C,EAChB,EACDmiC,SAAU,WACJ14B,IAAUs5B,EAAQljC,QACpBqhC,OAAe58B,EACfo9B,EAASS,YAETc,EAAUR,EAAE1/B,KAAKggC,EAAQt5B,MAE5B,GAEJ,CAEDw5B,CAAUJ,GACH,WACD3B,IACFA,EAAazN,cACbyN,OAAe58B,EAEzB,CACA,EACA,EAEE+9B,EAAQa,QAAU,SAAiBvrB,GACjC,IAAIwrB,EAASlkC,KAEb,GAAkB,mBAAP0Y,EAAmB,MAAM,IAAI7Y,UAAU6Y,EAAK,sBACvD,IAAI8qB,EAAI/B,GAAWzhC,MACnB,OAAO,IAAIwjC,EAAE,SAAUf,GACrB,IAAI0B,EAAgB,GAEhBC,EAAQF,EAAOhQ,UAAU,CAC3BpyB,KAAM,SAAUF,GACd,GAAI8W,EACF,IACE9W,EAAQ8W,EAAG9W,EACZ,CAAC,MAAOb,GACP,OAAO0hC,EAAS9+B,MAAM5C,EACvB,CAGH,IAAIsjC,EAAQb,EAAE1/B,KAAKlC,GAAOsyB,UAAU,CAClCpyB,KAAM,SAAUF,GACd6gC,EAAS3gC,KAAKF,EACf,EACD+B,MAAO,SAAU5C,GACf0hC,EAAS9+B,MAAM5C,EAChB,EACDmiC,SAAU,WACR,IAAIziC,EAAI0jC,EAAcnjC,QAAQqjC,GAC1B5jC,GAAK,GAAG0jC,EAAcv3B,OAAOnM,EAAG,GACpC6jC,GACD,IAEHH,EAAc/gC,KAAKihC,EACpB,EACD1gC,MAAO,SAAU5C,GACf0hC,EAAS9+B,MAAM5C,EAChB,EACDmiC,SAAU,WACRoB,GACD,IAGH,SAASA,IACHF,EAAMG,QAAmC,IAAzBJ,EAAcvjC,QAAc6hC,EAASS,UAC1D,CAED,OAAO,WACLiB,EAAct1B,QAAQ,SAAUrO,GAC9B,OAAOA,EAAEg0B,aACnB,GACQ4P,EAAM5P,aACd,CACA,EACA,EAEE4O,EAAQ9B,IAAoB,WAC1B,OAAOthC,IACX,EAEE2hC,EAAW79B,KAAO,SAAc+9B,GAC9B,IAAI2B,EAAoB,mBAATxjC,KAAsBA,KAAO2hC,EAC5C,GAAS,MAALE,EAAW,MAAM,IAAIhiC,UAAUgiC,EAAI,qBACvC,IAAI7R,EAASwR,GAAUK,EAAGP,IAE1B,GAAItR,EAAQ,CACV,IAAIoR,EAAapR,EAAOrwB,KAAKkiC,GAC7B,GAAIziC,OAAOgiC,KAAgBA,EAAY,MAAM,IAAIvhC,UAAUuhC,EAAa,qBACxE,OAAIQ,GAAaR,IAAeA,EAAWnhC,cAAgBujC,EAAUpC,EAC9D,IAAIoC,EAAE,SAAUf,GACrB,OAAOrB,EAAWlN,UAAUuO,EACpC,EACK,CAED,GAAIvB,GAAU,cACZlR,EAASwR,GAAUK,EAAGR,KAGpB,OAAO,IAAImC,EAAE,SAAUf,GACrBV,GAAQ,WACN,IAAIU,EAAS8B,OAAb,CAEA,IAAK,IAAiEC,EAA7DC,EAAYzE,GAAgChQ,EAAOrwB,KAAKkiC,MAAc2C,EAAQC,KAAaxiC,MAAO,CACzG,IAAImL,EAAOo3B,EAAM5iC,MAEjB,GADA6gC,EAAS3gC,KAAKsL,GACVq1B,EAAS8B,OAAQ,MACtB,CAED9B,EAASS,UARmB,CASxC,EACA,GAII,GAAI3jC,MAAM2H,QAAQ26B,GAChB,OAAO,IAAI2B,EAAE,SAAUf,GACrBV,GAAQ,WACN,IAAIU,EAAS8B,OAAb,CAEA,IAAK,IAAI9jC,EAAI,EAAGA,EAAIohC,EAAEjhC,SAAUH,EAE9B,GADAgiC,EAAS3gC,KAAK+/B,EAAEphC,IACZgiC,EAAS8B,OAAQ,OAGvB9B,EAASS,UAPmB,CAQtC,EACA,GAGI,MAAM,IAAIrjC,UAAUgiC,EAAI,qBAC5B,EAEEF,EAAW+C,GAAK,WACd,IAAK,IAAIC,EAAQhkC,UAAUC,OAAQgkC,EAAQ,IAAIrlC,MAAMolC,GAAQE,EAAQ,EAAGA,EAAQF,EAAOE,IACrFD,EAAMC,GAASlkC,UAAUkkC,GAI3B,OAAO,IADiB,mBAAT7kC,KAAsBA,KAAO2hC,GAC/B,SAAUc,GACrBV,GAAQ,WACN,IAAIU,EAAS8B,OAAb,CAEA,IAAK,IAAI9jC,EAAI,EAAGA,EAAImkC,EAAMhkC,SAAUH,EAElC,GADAgiC,EAAS3gC,KAAK8iC,EAAMnkC,IAChBgiC,EAAS8B,OAAQ,OAGvB9B,EAASS,UAPmB,CAQpC,EACA,EACA,EAEErC,GAAac,EAAY,KAAM,CAAC,CAC9B96B,IAAK06B,GACL1qB,IAAK,WACH,OAAO7W,IACR,KAGI2hC,CACT,CA9T8B,GC5O9B,SAASmD,GAAS1D,EAAY1oB,GAC1B,OAAO,IAAIqsB,GAAc,SAAUtC,GAC/BrB,EAAWlN,UAAU,CACjBpyB,KAAM,SAAUF,GACZ8W,EAAG9W,GACEM,KAAK,SAAUF,GAChB,OAAOygC,EAAS3gC,KAAKE,EACzC,GACqBuM,MAAM,SAAU5K,GAAS,OAAO8+B,EAAS9+B,MAAMA,EAAO,EAC9D,EACDA,MAAO,SAAUA,GACb8+B,EAAS9+B,MAAMA,EAClB,EACDu/B,SAAU,WACNT,EAASS,UACZ,GAEb,EACA,CASA,SAAS8B,GAAMC,EAASC,GACpB,OAAO,IAAIH,GAAc,SAAUtC,GAC/B,IAAI8B,GAAS,EACTJ,EAAgB,IAAIv8B,IACpBs6B,EAAU,WACV,IAAIl7B,EAAKC,EACTs9B,GAAS,EACT,IACI,IAAK,IAAIY,EAAkB9hC,EAAS8gC,GAAgBiB,EAAoBD,EAAgBrjC,QAASsjC,EAAkBnjC,KAAMmjC,EAAoBD,EAAgBrjC,OAAQ,CACjK,IAAIujC,EAAMD,EAAkBxjC,MAC5B,IACIyjC,EAAI7Q,aACP,CACD,MAAOlpB,GAEN,CACJ,CACJ,CACD,MAAO9D,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQ49B,IAAsBA,EAAkBnjC,OAASgF,EAAKk+B,EAAgB19B,SAASR,EAAGtH,KAAKwlC,EAC9F,CACO,QAAE,GAAIn+B,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACDwgC,EAAc3e,OAC1B,EACY8f,EAAc,SAAUtQ,GACxB,IAAIqQ,EAAMrQ,EAAOd,UAAU,CACvBpyB,KAAM,SAAUF,GACP2iC,GACD9B,EAAS3gC,KAAKF,EACrB,EACD+B,MAAO,SAAUk5B,GACR0H,IACDA,GAAS,EACT9B,EAAS9+B,MAAMk5B,GACfqF,IAEP,EACDgB,SAAU,WACNiB,EAAc3hB,OAAO6iB,GAChBd,GAAiC,IAAvBJ,EAAcjpB,OACzBunB,EAASS,WACThB,IACAqC,GAAS,EAEhB,IAELJ,EAAcr7B,IAAIu8B,EAC9B,EAGQ,OAFAC,EAAYL,GACZK,EAAYJ,GACLhD,CACf,EACA,CAEA,SAASqD,GAAUvQ,GACf,IAAIwQ,EAAY,IAAI59B,IAChBq6B,EAAe,KACnB,SAASC,IAELD,SAA4DA,EAAazN,cACzEyN,EAAe,KACfuD,EAAUhgB,OACb,CACD,OAAO,IAAIuf,GAAc,SAAUtC,GA+D/B,OA9DA+C,EAAU18B,IAAI25B,GACO,OAAjBR,IACAA,EAAejN,EAAOd,UAAU,CAC5BpyB,KAAM,SAAUF,GACZ,IAAIkM,EAAK7G,EACLqE,EACJ,IACI,IAAK,IAAIm6B,EAAcpiC,EAASmiC,GAAYE,EAAgBD,EAAY3jC,QAAS4jC,EAAczjC,KAAMyjC,EAAgBD,EAAY3jC,OAAQ,CACrI,IAAI6jC,EAAMD,EAAc9jC,MAEJ,QAAnB0J,EAAKq6B,EAAI7jC,YAAyB,IAAPwJ,GAAyBA,EAAG3L,KAAKgmC,EAAK/jC,EACrE,CACJ,CACD,MAAO+L,GAASG,EAAM,CAAEnK,MAAOgK,EAAU,CACjC,QACJ,IACQ+3B,IAAkBA,EAAczjC,OAASgF,EAAKw+B,EAAYh+B,SAASR,EAAGtH,KAAK8lC,EAClF,CACO,QAAE,GAAI33B,EAAK,MAAMA,EAAInK,KAAQ,CACxC,CACJ,EACDA,MAAO,SAAUk5B,GACb,IAAItb,EAAKta,EACLqE,EACJ,IACI,IAAK,IAAIs6B,EAAcviC,EAASmiC,GAAYK,EAAgBD,EAAY9jC,QAAS+jC,EAAc5jC,KAAM4jC,EAAgBD,EAAY9jC,OAAQ,CACrI,IAAI6jC,EAAME,EAAcjkC,MAEH,QAApB0J,EAAKq6B,EAAIhiC,aAA0B,IAAP2H,GAAyBA,EAAG3L,KAAKgmC,EAAK9I,EACtE,CACJ,CACD,MAAO7a,GAAST,EAAM,CAAE5d,MAAOqe,EAAU,CACjC,QACJ,IACQ6jB,IAAkBA,EAAc5jC,OAASgF,EAAK2+B,EAAYn+B,SAASR,EAAGtH,KAAKimC,EAClF,CACO,QAAE,GAAIrkB,EAAK,MAAMA,EAAI5d,KAAQ,CACxC,CACDu+B,GACH,EACDgB,SAAU,WACN,IAAItI,EAAK3zB,EACLqE,EACJ,IACI,IAAK,IAAIw6B,EAAcziC,EAASmiC,GAAYO,EAAgBD,EAAYhkC,QAASikC,EAAc9jC,KAAM8jC,EAAgBD,EAAYhkC,OAAQ,CACrI,IAAI6jC,EAAMI,EAAcnkC,MAEA,QAAvB0J,EAAKq6B,EAAIzC,gBAA6B,IAAP53B,GAAyBA,EAAG3L,KAAKgmC,EACpE,CACJ,CACD,MAAOzK,GAASN,EAAM,CAAEj3B,MAAOu3B,EAAU,CACjC,QACJ,IACQ6K,IAAkBA,EAAc9jC,OAASgF,EAAK6+B,EAAYr+B,SAASR,EAAGtH,KAAKmmC,EAClF,CACO,QAAE,GAAIlL,EAAK,MAAMA,EAAIj3B,KAAQ,CACxC,CACDu+B,GACH,KAIF,WACHsD,EAAUhjB,OAAOigB,GAEM,IAAnB+C,EAAUtqB,MAAc+mB,IACxBA,EAAazN,cACbyN,EAAe,KAE/B,CACA,EACA,CDuYIhB,MACF7hC,OAAOwX,eAAe+qB,GAAY5+B,OAAO,cAAe,CACtDnB,MAAO,CACLokC,OAAQ1E,GACRQ,gBAAiBA,IAEnB/qB,cAAc,IEliBlB,IAAMkvB,GAAoB,SACxBC,EACAt8B,GAEA,MAA2B,kBAAhBs8B,EACFA,GAGoB,KAAzBA,aAAW,EAAXA,EAAct8B,GAKpB,EAEau8B,GAA+B,SAACD,GAC3C,OAAAD,GAAkBC,EAAa,cAA/B,EAQWE,GAA4B,SAACF,GACxC,OAAAD,GAAkBC,EAAa,YAA/B,EAEWG,GAA2B,SAACH,GACvC,OAAAD,GAAkBC,EAAa,WAA/B,EAWWI,GAA2B,SAACJ,GACvC,MAA2B,kBAAhBA,EACFA,EAIgB,iBAAhBA,KAC0B,IAAhCA,EAAYK,iBAAmE,iBAAhCL,EAAYK,gBAMhE,EASaC,GAA+B,SAACN,GAC3C,MAA2B,kBAAhBA,EACFA,EAIgB,iBAAhBA,KAC8B,IAApCA,EAAYO,qBAA2E,iBAApCP,EAAYO,oBAMpE,EAoBaC,GAAmC,SAACR,GAC/C,MAA2B,kBAAhBA,EACFA,EAIgB,iBAAhBA,KACkC,IAAxCA,EAAYS,yBAAmF,iBAAxCT,EAAYS,wBAMxE,EAEaC,GAA+B,SAAC56B,GAC3C,GACEw6B,GAA6Bx6B,EAAOk6B,cACN,iBAAvBl6B,EAAOk6B,aACoC,iBAA3Cl6B,EAAOk6B,YAAYO,oBAE1B,OAAOz6B,EAAOk6B,YAAYO,mBAG9B,EAEaI,GAAmC,SAC9C76B,GAEA,GACE06B,GAAiC16B,EAAOk6B,cACV,iBAAvBl6B,EAAOk6B,aACwC,iBAA/Cl6B,EAAOk6B,YAAYS,wBAE1B,OAAO36B,EAAOk6B,YAAYS,uBAG9B,EAEaG,GAA2B,SAAC96B,SACvC,GAAIs6B,GAAyBt6B,EAAOk6B,aAAc,CAChD,IAAIa,SAMJ,MALkC,iBAAvB/6B,EAAOk6B,aAA0E,iBAAvCl6B,EAAOk6B,YAAYK,gBACtEQ,EAAwB/6B,EAAOk6B,YAAYK,gBAClCv6B,EAAOg7B,yBAChBD,EAAwB/6B,EAAOg7B,wBAEjC3mC,EAAAA,EAAA,CAAA,EACK0mC,GACH,CAAAE,aAAiD,QAAnChgC,EAAA8/B,aAAA,EAAAA,EAAuBE,oBAAY,IAAAhgC,OAAA,EAAAA,EAAEsD,IAAI,SAAC28B,aAEtD,IAAe,QAAXjgC,EAAAigC,EAAKC,YAAM,IAAAlgC,OAAA,EAAAA,EAAArG,UAAsB,QAAZ0K,EAAA47B,EAAKE,aAAO,IAAA97B,OAAA,EAAAA,EAAA1K,QAAQ,CAC3C,IAAMymC,EAAcj5B,KAAKC,UAAU64B,EAAKE,OAClCE,EAAal5B,KAAKC,UAAU64B,EAAKC,MAMvC,OAJuB,QAAvBl7B,EAAAD,EAAOK,sBAAgB,IAAAJ,GAAAA,EAAAK,KACrB,8CAA8CpI,OAAAojC,EAA0B,iBAAApjC,OAAAmjC,EAAoB,WAC1F,sEAEJhnC,EAAAA,EAAA,GAAY6mC,GAAI,CAAEE,WAAO/hC,GAC1B,CACD,OAAO6hC,CACR,IAEJ,CAEH,EAEaK,GAA4B,SAACv7B,GACxC,IAEIw7B,EAFAC,EAA2C,WAAM,OAAA,CAAK,EACtDC,OAA8DriC,EAE5DsiC,EAAc37B,EAAO27B,YA2B3B,OAzByCvB,GAA0Bp6B,EAAO47B,mBAExEH,OAAUpiC,EACVmiC,OAAYniC,EAGV2G,EAAO47B,iBAC2B,iBAA3B57B,EAAO47B,iBACd57B,EAAO47B,gBAAgBC,WACqB,iBAArC77B,EAAO47B,gBAAgBC,YAE1B,YAAa77B,EAAO47B,gBAAgBC,YACtCJ,EAAUz7B,EAAO47B,gBAAgBC,UAAUJ,SAGzC,wBAAyBz7B,EAAO47B,gBAAgBC,YAClDH,EAAsB17B,EAAO47B,gBAAgBC,UAAUH,qBAGrD,cAAe17B,EAAO47B,gBAAgBC,WAAa77B,EAAO47B,gBAAgBC,UAAUL,YACtFA,EAAYx7B,EAAO47B,gBAAgBC,UAAUL,aAK5C,CACLC,QAAOA,EACPC,oBAAmBA,EACnBF,UAASA,EACTG,YAAWA,EAEf,EC7Mar3B,GAAqB,SAACw3B,EAAkBn8B,GACnDo8B,GAA+BD,EAAUn8B,EAC3C,EAMao8B,GAAiC,SAAID,EAAan8B,GAC7D,IAAK,IAAIlL,EAAI,EAAGA,EAAIkL,EAAM/K,OAAQH,IAAK,CAC/B,IAAAwG,EAA0B0E,EAAMlL,GAA9BunC,EAAI/gC,EAAAmF,KAAE6I,EAAIhO,EAAAgO,KAAExT,YACdiX,EAAKovB,GAAYA,EAASE,GAChC,GAAkB,mBAAPtvB,EAAmB,CAC5B,IAAM1W,EAAS0W,EAAG7X,MAAMinC,EAAU7yB,GACX,mBAAZxT,GACTA,EAAQO,eAAAA,EAAQ2N,QAEnB,CACF,CACD,OAAOm4B,CACT,EAKaG,GAAkB,SAACH,GAE9B,OADsBA,QACuBziC,IADvByiC,EACgB9W,EACxC,EC/CakX,GAAU,SCAVC,GAAY,0BCMzBC,GAAA,WAWE,SAAAA,IAVApoC,KAAIoM,KAAG,oCACPpM,KAAIuM,KAAG,SAOPvM,KAAAqoC,QAAU,GAAGnkC,OAAAikC,GAAa,KAAAjkC,OAAAgkC,IAIC,oBAAd3oB,YACTvf,KAAKsoC,UAAY/oB,UAAU+oB,UAE9B,CA0CH,OAxCEF,EAAK3oC,UAAA+M,MAAL,SAAMR,GAGJ,OAFAhM,KAAKgM,OAASA,EAEPxK,QAAQC,aAAQ4D,IAGnB+iC,EAAO3oC,UAAA0O,QAAb,SAAcwL,sFAgCZ,OA/BMV,GAAO,IAAIE,MAAOsN,UAClB8hB,EAAqC,QAAvBthC,EAAAjH,KAAKgM,OAAOu8B,mBAAW,IAAAthC,EAAAA,GAAK,EAC1CuhC,EAAkC,UAApB7uB,EAAQ8uB,gBAAY,IAAAn9B,EAAAA,EAAAi9B,EAAc,EACtDvoC,KAAKgM,OAAOu8B,YAAcC,EACrB7uB,EAAQV,OACXjZ,KAAKgM,OAAOmX,cAAgBlK,GA0B9B,CAAA,EAvBW5Y,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAA,CACTme,QAASxe,KAAKgM,OAAOiV,OACrBxC,UAAWze,KAAKgM,OAAOmV,SACvBunB,WAAY1oC,KAAKgM,OAAO+C,UACxBkK,KAAIA,GACAjZ,KAAKgM,OAAO28B,YAAc,CAAEC,YAAa5oC,KAAKgM,OAAO28B,aACrD3oC,KAAKgM,OAAO68B,gBAAgBzpB,UAAY,CAAEA,SAzC3B,QA0Cfpf,KAAKgM,OAAO68B,gBAAgB3pB,UAAY,CAAEA,SAAUC,OACpDnf,KAAKgM,OAAO68B,gBAAgBC,WAAa,CAAEC,GA1ClC,YA2Cb,CAAA1uB,UAAW1P,IACXq+B,WAAYhpC,KAAKgM,OAAOi9B,UACxB3yB,KAAMtW,KAAKgM,OAAOsK,OACdtW,KAAKgM,OAAOuK,mBAAqB,CACnC2yB,mBAAoB,CAClBC,YAAanpC,KAAKgM,OAAOuK,kBAAkB6yB,WAC3CC,eAAgBrpC,KAAKgM,OAAOuK,kBAAkB+yB,iBAG/C3vB,GAAO,CACV8uB,SAAUD,EACVH,QAASroC,KAAKqoC,QACdkB,WAAYvpC,KAAKsoC,gBAGpB,EACFF,CAAD,IC9DMoB,GAAmB,IAKzBC,GAAA,SAAAxW,GAGE,SAAAwW,EAAYz9B,GAAZ,QACM2nB,EAUL5mB,EAAA/M,KARC,IACE2zB,EAA+B,QAAhB1sB,EAAA+C,WAAgB,IAAA/C,OAAA,EAAAA,EAAE0sB,YAClC,CAAC,MAAO5yB,GACiB,QAAxBuK,EAAAU,eAAAA,EAAQK,sBAAgB,IAAAf,GAAAA,EAAAyH,MAAM,wCAAwC7O,OAAAkK,KAAKC,UAAUtN,KACrF4yB,OAAetuB,CAChB,QACD0H,EAAAkmB,EAAAtzB,KAAAK,KAAM2zB,IAAa3zB,MACdqM,eAAiBL,aAAA,EAAAA,EAAQK,gBAC/B,CAaH,OA3BqCzM,EAAiB6pC,EAAAxW,GAgB9CwW,EAAAhqC,UAAAsI,IAAN,SAAUlB,EAAajF,uGACjB,OAAArC,MAAM2H,QAAQtF,IAAUA,EAAMhB,OAAS4oC,IACnCE,EAAqB9nC,EAAMhB,OAAS4oC,GAC1C,CAAA,EAAMvW,EAAMxzB,UAAAsI,IAAIpI,KAAAK,KAAA6G,EAAKjF,EAAMqC,MAAM,EAAGulC,OAFqB,CAAA,EAAA,iBAEzDl+B,EAAA7I,OACmB,QAAnBwE,EAAAjH,KAAKqM,sBAAc,IAAApF,GAAAA,EAAEtD,MACnB,kBAAkBO,OAAAwlC,EAA+D,8CAAAxlC,OAAAslC,GAAmB,YAGtG,KAAA,EAAA,MAAA,CAAA,EAAMvW,YAAMlrB,IAAGpI,KAAAK,KAAC6G,EAAKjF,WAArB0J,EAAA7I,sCAEH,EACFgnC,CAAD,CA3BA,CAAqCviB,ICLrCyiB,GAAA,SAAA1W,GACE,SAAA0W,UACE,OAAA1W,EAAAtzB,KAAAK,KAAsB,QAAhBiH,EAAA+C,WAAgB,IAAA/C,OAAA,EAAAA,EAAE2iC,iBAAe5pC,IACxC,CACH,OAJuCJ,EAAiB+pC,EAAA1W,GAIvD0W,CAAD,CAJA,CAAuCziB,ICAvC2iB,GAAA,SAAA5W,GAME,SAAA4W,EAAY3W,QAAA,IAAAA,IAAAA,EAA0C,CAAA,GAAtD,IAAAnmB,EACEkmB,cAEDjzB,YARO+M,EAAA+8B,MAAQ,CACd7nC,KAAM,GAMN8K,EAAKmmB,cAAgBA,GACtB,CAkCH,OA3CkCtzB,EAAaiqC,EAAA5W,GAWvC4W,EAAApqC,UAAAkc,KAAN,SAAW9F,EAAmB+F,+EAC5B,MAAA,CAAA,EAAO,IAAIpa,QAAQ,SAACC,EAASC,WAEG,oBAAnB26B,gBACT36B,EAAO,IAAI2T,MAAM,mCAGnB,IAAM00B,EAAM,IAAI1N,eAChB0N,EAAI9hB,KAAK,OAAQpS,GAAW,GAC5Bk0B,EAAIC,mBAAqB,WACvB,GAAID,EAAIE,aAAel9B,EAAK+8B,MAAM7nC,KAAM,CACtC,IAAMmxB,EAAe2W,EAAI3W,aACzB,IAEE3xB,EAAQsL,EAAK4jB,cAAcviB,KAAK4X,MAAMoN,IACvC,CAAC,MAAMnsB,GACNxF,EAAQsL,EAAK4jB,cAAc,CAAE9mB,KAAMkgC,EAAIxtB,SACxC,CACF,CACH,EAEA,IAAM0T,EAAO5vB,EAAA,CACX,eAAgB,mBAChBgzB,OAAQ,OACLtmB,EAAKmmB,mBAEV,IAA2B,IAAA5nB,EAAAjI,EAAAjE,OAAOiM,QAAQ4kB,IAAQhkB,EAAAX,EAAAxJ,QAAEmK,EAAAhK,KAAAgK,EAAAX,EAAAxJ,OAAA,CAAzC,IAAAiM,EAAAvK,EAAYyI,EAAArK,MAAA,GAAXiF,EAAGkH,EAAA,GAAEnM,EAAKmM,EAAA,GACpBg8B,EAAIvN,iBAAiB31B,EAAKjF,EAC3B,mGACDmoC,EAAIpuB,KAAKvN,KAAKC,UAAUuN,GACzB,OACF,EACFiuB,CAAD,CA3CA,CAAkCrZ,ICAlC0Z,GAAA,SAAAjX,GAAA,SAAAiX,kDA2BC,CAAD,OA3ByCtqC,EAAasqC,EAAAjX,GAC9CiX,EAAAzqC,UAAAkc,KAAN,SAAW9F,EAAmB+F,+EAC5B,MAAA,CAAA,EAAO,IAAIpa,QAAQ,SAACC,EAASC,GAC3B,IAAMmJ,EAAcb,IAEpB,KAAKa,aAAW,EAAXA,EAAa0U,UAAU4qB,YAC1B,MAAM,IAAI90B,MAAM,wCAElB,IACE,IAAM0pB,EAAO3wB,KAAKC,UAAUuN,GAE5B,OACSna,EAFOoJ,EAAY0U,UAAU4qB,WAAWt0B,EAAWzH,KAAKC,UAAUuN,IAGvE7O,EAAK4jB,cAAc,CACjB9mB,KAAM,IACN6nB,gBAAiB9V,EAAQG,OAAOnb,OAChCgxB,mBAAoBmN,EAAKn+B,OACzBkxB,mBAAoB3Y,KAAKiK,QAIhBrW,EAAK4jB,cAAc,CAAE9mB,KAAM,MAC3C,CAAC,MAAO9I,GACPW,EAAOX,EACR,CACF,OACF,EACFmpC,CAAD,CA3BA,CAAyC1Z,ICA5B4Z,GAAqB,SAChCh0B,EACAi0B,EACAC,eAAA,IAAAA,IAAAA,GAA0B,4GAGV,OADVC,EnCDsB,SAAUn0B,GACpC,MAAO,GAAGlS,OAAOE,EAAiB42B,cAAe,KAAK92B,OAAOkS,EAAOgE,UAAU,EAAG,GACrF,CmCDqBowB,CAAiBp0B,GACpB,CAAA,EAAMi0B,EAAc9kB,OAAOglB,WAC3C,OADME,EAAUn/B,EAAsC7I,QAMlD6nC,EACF,CAAA,EAAMD,EAAczhC,OAAO2hC,IADN,CAAA,EAAA,GAJd,CAAA,EAAA,CACLt7B,QAAQ,WAIV3D,EAAA7I,wBAGF,OADMwE,EAAAzD,EAAoEinC,EAAQ9yB,MAAM,KAAI,GAArFwJ,EAAQla,EAAA,GAAEga,OAAQhS,EAAMhI,EAAA,GAAE8H,EAAS9H,EAAA,GAAEkc,EAAalc,EAAA,GAAEshC,EAAWthC,EAAA,GAC/D,CAAA,EAAA,CACLka,SAAQA,EACRF,OAAQypB,GAAOzpB,GACflS,UAAW47B,GAAU57B,GACrBw5B,YAAaoC,GAAUpC,GACvBplB,cAAewnB,GAAUxnB,GACzBlU,OAAQ4D,QAAQ5D,WAIP07B,GAAY,SAACC,GACxB,IAAMC,EAAU7e,SAAS4e,EAAK,IAC9B,IAAIE,MAAMD,GAGV,OAAOA,CACT,EAEaH,GAAS,SAAC9oC,GACrB,GAAKolB,MAAS+jB,QAAWnpC,EAGzB,IACE,OAAOoiB,mBAAmB+mB,OAAO/jB,KAAKplB,IACvC,CAAC,MAAMqF,GACN,MACD,CACH,EC3Ca+jC,GAAuB,cAGvBC,GAA2B,GAAG/mC,OAAA8mC,oBAC9BE,GAA4B,GAAGhnC,OAAA8mC,sBAC/BG,GAA8B,GAAGjnC,OAAA8mC,uBACjCI,GAA8B,gBAC9BC,GAA4B,cAE5BC,GAAiB,GAAGpnC,OAAA8mC,sBACpBO,GAAY,GAAGrnC,OAAA8mC,iBACfQ,GAAU,GAAGtnC,OAAA8mC,eACbS,GAAY,GAAGvnC,OAAA8mC,iBACfU,GAAW,GAAGxnC,OAAA8mC,gBAEdW,GAAU,GAAGznC,OAAA8mC,eACbY,GAAY,GAAG1nC,OAAA8mC,iBACfa,GAAmB,GAAG3nC,OAAA8mC,wBAEtBc,GAAgD,SCqB7DC,GAAA,SAAA9Y,GAWE,SAAA8Y,EACS31B,EACAuyB,EACP0B,EACO2B,EAOApE,EACA1B,EACP/kB,EACOzL,EACAF,EACAC,EACAw2B,EACA11B,EACAZ,EACP4yB,EACAplB,EACO9W,EACAuI,EACAyB,EACAT,EACP3G,EACOg6B,EACA3yB,EACAT,EACAC,EACP/G,EACOmU,EACA1M,EACAqyB,EAKAqD,EACAn2B,EACAo2B,EACPlrB,EACA0mB,EACAyE,EACOpF,EACA53B,EACAi9B,EACAC,EACApyB,EACAuZ,QA/CP,IAAA4W,IAAAA,EAA0C,IAAAllB,SACnC,IAAA6mB,IAAAA,EAAA,CACLnlB,OAAQ,GACR0lB,WAAY,IACZxlB,SAAU,MACVD,QAAQ,EACR0lB,SAAS,SAKJ,IAAA92B,IAAAA,EAAkC,UAClC,IAAAF,IAAAA,EAA2B,QAC3B,IAAAC,IAAAA,EAA2B,SAC3B,IAAAw2B,IAAAA,EAA+DH,SAK/D,IAAAz/B,IAAAA,EAA8B,IAAAsI,QAC9B,IAAAC,IAAAA,EAAqBH,EAASO,WAE9B,IAAAY,IAAAA,GAAiD,QACxD,IAAA3G,IAAAA,GAAc,QAGP,IAAA4G,IAAAA,EAAsB,SACtB,IAAAC,IAAAA,ED7DwC,WC+DxC,IAAAoN,IAAAA,EAAyB,WACzB,IAAA1M,IAAAA,MAAwCizB,GAAa,CAAEp9B,eAAcA,UACrE,IAAAw8B,IAAAA,EAAA,CACLC,WAAW,EACX5pB,UAAU,EACVE,UAAU,SAEL,IAAA8sB,IAAAA,EAA2C,cAC3C,IAAAn2B,IAAAA,GAAyB,QACzB,IAAAo2B,IAAAA,GAAiC,QAMjC,IAAAE,IAAAA,GAAiC,QACjC,IAAAC,IAAAA,EAAiC,GAhD1C,IAsEMG,EAtEN1/B,EAoDEkmB,YAAM,CAAE7c,OAAMA,EAAEI,gBAAeA,EAAEC,kBAAmBi2B,GAAgBR,MAgCrElsC,YAnFQ+M,EAAMqJ,OAANA,EACArJ,EAAU47B,WAAVA,EAEA57B,EAAai/B,cAAbA,EAOAj/B,EAAe66B,gBAAfA,EACA76B,EAAWm5B,YAAXA,EAEAn5B,EAAmB2I,oBAAnBA,EACA3I,EAAeyI,gBAAfA,EACAzI,EAAc0I,eAAdA,EACA1I,EAAek/B,gBAAfA,EACAl/B,EAAiBwJ,kBAAjBA,EACAxJ,EAAY4I,aAAZA,EAGA5I,EAAcV,eAAdA,EACAU,EAAQ6H,SAARA,EACA7H,EAAWsJ,YAAXA,EACAtJ,EAAO6I,QAAPA,EAEA7I,EAASk8B,UAATA,EACAl8B,EAAIuJ,KAAJA,EACAvJ,EAAS8I,UAATA,EACA9I,EAAU+I,WAAVA,EAEA/I,EAAcmW,eAAdA,EACAnW,EAAeyJ,gBAAfA,EACAzJ,EAAe87B,gBAAfA,EAKA97B,EAASm/B,UAATA,EACAn/B,EAAQgJ,SAARA,EACAhJ,EAAiBo/B,kBAAjBA,EAIAp/B,EAAsBi6B,uBAAtBA,EACAj6B,EAAQqC,SAARA,EACArC,EAAiBs/B,kBAAjBA,EACAt/B,EAAqBu/B,sBAArBA,EACAv/B,EAAiBmN,kBAAjBA,EACAnN,EAAY0mB,aAAZA,EA5DO1mB,EAAO4/B,QAAGzE,GAKhBn7B,EAAOmJ,SAAG,EA0DlBnJ,EAAK6/B,eAAiBvC,EACtBt9B,EAAKoU,SAAWA,EAChBpU,EAAKw7B,YAAcA,EACnBx7B,EAAKoW,cAAgBA,EACrBpW,EAAKkC,OAASA,EACdlC,EAAKgC,UAAYA,EACjBhC,EAAK46B,YAAcA,EACnB56B,EAAKkU,OAASA,EACdlU,EAAKq/B,iBAAmBA,EACxBr/B,EAAKV,eAAe0I,OAAOq3B,EAAmB33B,EAASa,MAAQvI,EAAK6H,UACpE7H,EAAKi6B,uBAAyBA,EAC9Bj6B,EAAKqC,SAAWA,EAChBrC,EAAKs/B,kBAAoBA,EACzBt/B,EAAKu/B,sBAAwBA,EAC7Bv/B,EAAKmN,kBAAoBA,EAMvBuyB,GAFsC,KAApChZ,aAAY,EAAZA,EAAc0Y,qBAG6B,KAApC1Y,eAAAA,EAAc0Y,qBAAqD,IAAtBA,EAOxDp/B,EAAK0mB,aAAe1mB,EAAK0mB,cAAgB,CAAA,EACzC1mB,EAAK0mB,aAAa0Y,kBAAoBM,EACtC1/B,EAAKo/B,kBAAoBM,GAC1B,CA8GH,OA7MmC7sC,EAAMmsC,EAAA9Y,GAiGvC7zB,OAAAwX,eAAIm1B,EAAatsC,UAAA,gBAAA,CAAjBoX,IAAA,WACE,OAAO7W,KAAK4sC,cACb,EAED7kC,IAAA,SAAkBsiC,GACZrqC,KAAK4sC,iBAAmBvC,IAC1BrqC,KAAK4sC,eAAiBvC,EACtBrqC,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAQtsC,UAAA,WAAA,CAAZoX,IAAA,WACE,OAAO7W,KAAK8sC,SACb,EAED/kC,IAAA,SAAaoZ,GACPnhB,KAAK8sC,YAAc3rB,IACrBnhB,KAAK8sC,UAAY3rB,EACjBnhB,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAMtsC,UAAA,SAAA,CAAVoX,IAAA,WACE,OAAO7W,KAAK+sC,OACb,EAEDhlC,IAAA,SAAWkZ,GACLjhB,KAAK+sC,UAAY9rB,IACnBjhB,KAAK+sC,QAAU9rB,EACfjhB,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAStsC,UAAA,YAAA,CAAboX,IAAA,WACE,OAAO7W,KAAKgtC,UACb,EAEDjlC,IAAA,SAAcgH,GACR/O,KAAKgtC,aAAej+B,IACtB/O,KAAKgtC,WAAaj+B,EAClB/O,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAMtsC,UAAA,SAAA,CAAVoX,IAAA,WACE,OAAO7W,KAAKkW,OACb,EAEDnO,IAAA,SAAWkH,GACLjP,KAAKkW,UAAYjH,IACnBjP,KAAKkW,QAAUjH,EACfjP,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAatsC,UAAA,gBAAA,CAAjBoX,IAAA,WACE,OAAO7W,KAAKitC,cACb,EAEDllC,IAAA,SAAkBob,GACZnjB,KAAKitC,iBAAmB9pB,IAC1BnjB,KAAKitC,eAAiB9pB,EACtBnjB,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAWtsC,UAAA,cAAA,CAAfoX,IAAA,WACE,OAAO7W,KAAKktC,YACb,EAEDnlC,IAAA,SAAgBwgC,GACVvoC,KAAKktC,eAAiB3E,IACxBvoC,KAAKktC,aAAe3E,EACpBvoC,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAWtsC,UAAA,cAAA,CAAfoX,IAAA,WACE,OAAO7W,KAAKmtC,YACb,EAEDplC,IAAA,SAAgB4/B,GACV3nC,KAAKmtC,eAAiBxF,IACxB3nC,KAAKmtC,aAAexF,EACpB3nC,KAAK6sC,gBAER,kCAEDztC,OAAAwX,eAAIm1B,EAAgBtsC,UAAA,mBAAA,CAApBsI,IAAA,SAAqBqkC,GACfpsC,KAAKotC,oBAAsBhB,IAC7BpsC,KAAKotC,kBAAoBhB,EACzBpsC,KAAK6sC,gBAER,kCAEOd,EAAAtsC,UAAAotC,cAAR,WACE,IAAMQ,EAAQ,CACZlsB,SAAUnhB,KAAK8sC,UACf7rB,OAAQjhB,KAAK+sC,QACbh+B,UAAW/O,KAAKgtC,WAChB/9B,OAAQjP,KAAKkW,QACbiN,cAAenjB,KAAKitC,eACpB1E,YAAavoC,KAAKktC,aAClBvF,YAAa3nC,KAAKmtC,aAClBf,iBAAkBpsC,KAAKotC,mBAEpBptC,KAAKqqC,cAActiC,IAAIsb,GAAcrjB,KAAKoW,QAASi3B,IAE3DtB,CAAD,CA7MA,CAAmC/1B,GA+MtBs3B,GAAmB,SAC9Bl3B,EACAH,EACAs3B,eADA,IAAAt3B,IAAAA,EAA4B,CAAA,oLAOxB,OAHEg2B,EAAkBh2B,EAAQg2B,iBAAmBH,QAG/CG,IAAoBH,GAAwB,CAAA,EAAA,IAAG7kC,EAAA,iBAAK,OAA6B,QAA7B+G,EAAqB,QAArBD,EAAAkI,EAAQ+1B,qBAAa,IAAAj+B,OAAA,EAAAA,EAAE8Y,cAAM,IAAA7Y,EAAA,CAAA,EAAA,sBAAK,MAAM,CAAA,EAAAw/B,aAAPliC,EAACmiC,EAAyBhrC,wBAA3DwE,EAA4DqE,mBAU9F,OAZhB0gC,EAAa3rC,EAAAQ,WAAA,EAAA,EACjBoL,SAEAhF,EAAAgF,EAAAsgC,WAAY,IACZtgC,EAAQ8a,SAAE,MACV9a,UAAQ,EACRA,EAAOugC,SAAE,EACNvgC,GAAAgK,EAAQ+1B,gBAEP3B,EAAgBqD,GAAiCz3B,EAAQg2B,gBAAiBD,GAG1D,CAAA,EAAM5B,GAAmBh0B,EAAQi0B,EAAiD,QAAlC1oB,EAAuB,QAAvBF,EAAAxL,EAAQ+1B,qBAAe,IAAAvqB,OAAA,EAAAA,EAAA+qB,eAAW,IAAA7qB,GAAAA,WAChF,OADlBgsB,EAAgBF,EAAuFhrC,OAC/E,CAAA,EAAA4nC,EAAcxzB,IAAIwM,GAAcjN,YA8ExD,OA9EAw3B,EAAkBH,EAA8ChrC,OAChEorC,EAAcpqB,KAGdqqB,EAAeD,EAAYC,aAAeC,OAAOF,EAAYC,mBAAgBzoC,EAC7E2oC,GAAoBF,GAAe30B,KAAKiK,MAAQ0qB,EAGhD3sB,EAKJ,QAJA0P,UAAA9O,EAEA,UAFgB,QAAhBH,EAAA3L,EAAQkL,gBAAQ,IAAAS,EAAAA,EACfosB,UAAoBnsB,EAAAgsB,EAAYI,2BAAeJ,EAAY1sB,cAAW9b,SACvE,IAAAyc,EAAAA,EAAA8rB,aAAe,EAAfA,EAAiBzsB,wBACjBwsB,EAAcxsB,gBACd,IAAA0P,EAAAA,EAAAlmB,IACI49B,EAA0C,QAA5BzX,EAAA8c,aAAe,EAAfA,EAAiBrF,mBAAW,IAAAzX,EAAAA,EAAI6c,EAAcpF,YAC5DplB,EAA8C,QAA9B4N,EAAA6c,aAAe,EAAfA,EAAiBzqB,qBAAa,IAAA4N,EAAAA,EAAI4c,EAAcxqB,cAChElU,UAASgiB,UAAAD,EAAA/a,EAAQhH,sBAAU2+B,aAAe,EAAfA,EAAiB3+B,sBAAU0+B,EAAc1+B,OACpEF,EAAsC,QAA1BmiB,EAAA0c,aAAe,EAAfA,EAAiB7+B,iBAAS,IAAAmiB,EAAAA,EAAIyc,EAAc5+B,UACxDkS,UAASmQ,UAAAD,EAAAlb,EAAQgL,sBAAU2sB,aAAe,EAAfA,EAAiB3sB,sBAAU0sB,EAAc1sB,OAC1EssB,EAAkBW,wBAAmD,QAAzB7c,EAAAuc,aAAA,EAAAA,EAAiBzsB,gBAAQ,IAAAkQ,EAAAA,EAAIsc,EAAcxsB,SACvFosB,EAAkBY,sBAA+C,QAAvB7c,EAAAsc,aAAA,EAAAA,EAAiB3sB,cAAM,IAAAqQ,EAAAA,EAAIqc,EAAc1sB,OAE7E4nB,EAAkB,CACtBC,UAA6C,UAAX,QAAvBvX,EAAAtb,EAAQ4yB,uBAAe,IAAAtX,OAAA,EAAAA,EAAEuX,iBAAS,IAAAsF,GAAAA,EAC7ClvB,SAA2C,UAAV,QAAvBmvB,EAAAp4B,EAAQ4yB,uBAAe,IAAAwF,OAAA,EAAAA,EAAEnvB,gBAAQ,IAAAovB,GAAAA,EAC3ClvB,SAA2C,UAAV,QAAvBmvB,EAAAt4B,EAAQ4yB,uBAAe,IAAA0F,OAAA,EAAAA,EAAEnvB,gBAAQ,IAAAovB,GAAAA,GAEvC7G,EAAciG,eAAAA,EAAiBjG,YAC/ByE,EAAmBwB,eAAAA,EAAiBxB,sBAGd/mC,IAAxB4Q,EAAQiwB,cACVjwB,EAAQ2xB,gBAAkB3xB,EAAQiwB,aA8C9B,CAAA,GA3CAuI,EAAgB,IAAI1C,GACxB31B,EACAH,EAAQ0yB,WACR0B,EACA2B,EACA/1B,EAAQ2xB,gBACR3xB,EAAQiwB,YACR/kB,EACAlL,EAAQP,oBACRO,EAAQT,gBACRS,EAAQR,eACRw2B,EACAh2B,EAAQM,kBACRN,EAAQN,aACR4yB,EACAplB,EACAlN,EAAQ5J,eACR4J,EAAQrB,SACRqB,EAAQI,YACRJ,EAAQL,QACR3G,EACAgH,EAAQgzB,UACRhzB,EAAQK,KACRL,EAAQJ,UACRI,EAAQH,WACR/G,EACAkH,EAAQiN,eACRjN,EAAQO,gBACRqyB,EACA5yB,EAAQi2B,UACRj2B,EAAQF,SACRE,EAAQk2B,kBACRlrB,EACA0mB,EACAyE,EACAn2B,EAAQ+wB,uBACR/wB,EAAQ7G,SACR6G,EAAQo2B,kBACRkB,EAAkBmB,4BAClBrpC,EACA4Q,EAAQwd,eAGgBjd,gBAAgB8O,oBAO1C,OAPMmoB,EAA+ChrC,SACnDgsC,EAAcpiC,eAAeC,KAC3B,oBAAoBpI,OAAAuqC,EAAcj4B,gBAAgBvW,YAAYmM,KAAI,oDAEpEqiC,EAAcj4B,gBAAkB,IAAI2O,IAGtC,CAAA,EAAOspB,SAGIf,GAAsB,SACjCzB,EACAD,GAEA,YAHA,IAAAC,IAAAA,EAA+DH,SAC/D,IAAAE,IAAAA,EAAiC,CAAA,GAEzBC,GACN,IAAK,eACH,OAAO,IAAIxC,GACb,IAAK,iBACH,OAAO,IAAIE,GACb,IAAK,OACH,OAAO,IAAIxkB,GAEb,QACE,OAAO,IAAIM,GAAaplB,EAAAA,EAAA,CAAA,EACnB2rC,GAAa,CAChB5lB,eAAgB4lB,EAAcO,cAGtC,EAEaG,GAAkB,SAACR,GAC9B,IAAM3/B,EAA4B,iBAAd2/B,EAAyBA,EAAU3/B,KAAO2/B,EACxDjc,EAA+B,iBAAdic,EAAyBA,EAAUjc,aAAU5qB,EAEpE,MAAa,QAATkH,EACK,IAAIs9B,GAAa5Z,GAEb,WAAT1jB,EAEK,IAAI29B,GAEN,IAAIlX,GAAe/C,EAC5B,EAEaud,GAAoB,SAAOtpB,GAAY,OAAA/iB,OAAA,OAAA,OAAA,EAAA,uEAE9C,KAAA,EAAA,MAAA,CAAA,GAAM,IAAIskB,IAAwBH,oBADtC,IACIre,EAAAxE,SACAyhB,IAA4B,oBAAbR,WAA6BA,SAASirB,UAEvD,MAAA,CAAA,EAAO,IAQT,IALMrR,EAAOpZ,QAAAA,EAAOR,SAASirB,SACvBC,EAAQtR,EAAK3lB,MAAM,KACnBk3B,EAAS,GACT/0B,EAAa,cAEVrZ,EAAImuC,EAAMhuC,OAAS,EAAGH,GAAK,IAAKA,EACvCouC,EAAOzrC,KAAKwrC,EAAM3qC,MAAMxD,GAAG+K,KAAK,MAEzB/K,EAAI,mBAAG,OAAAA,EAAIouC,EAAOjuC,QACnBimB,EAASgoB,EAAOpuC,GAGhB,CAAA,GADA0mB,EAAU,IAAI1B,GADJ,CAAEoB,OAAQ,IAAMA,KAElB9e,IAAI+R,EAAY,KAJC,CAAA,EAAA,UAKjB,OADd7S,EAAAxE,OACc,CAAA,EAAM0kB,EAAQtQ,IAAIiD,WAC5B,OADU7S,EAA6BxE,OAEzC,CAAA,EAAM0kB,EAAQve,OAAOkR,IADd,CAAA,EAAA,UAEP,OADA7S,EAAAxE,OACO,CAAA,EAAA,IAAMokB,iBARkBpmB,UAYnC,KAAA,EAAA,MAAA,CAAA,EAAO,QACR,ECpaUquC,GAAgB,SAAUC,GACjC,IAAI92B,EAAM,CAAA,EACV,IAAK,IAAIpR,KAAOkoC,EAAO,CACnB,IAAIn+B,EAAMm+B,EAAMloC,GACZ+J,IACAqH,EAAIpR,GAAO+J,EAElB,CACD,OAAOqH,CACX,ECLW+2B,GAAyB,SAAU/4B,GAE1C,IAAIg5B,OADY,IAAZh5B,IAAsBA,EAAU,CAAE,GAEtC,IAGIi5B,EAHArkC,EAAcb,IACdqC,OAAiBhH,EACjB8pC,GAAa,EAEb1H,EAAUxxB,EAAQwxB,QAASC,EAAsBzxB,EAAQyxB,oBAAqBzgC,EAAKgP,EAAQuxB,UAAWA,OAAmB,IAAPvgC,EARxF,0BAQ+HA,EACzJqd,EAAe,SAAUC,GACzB,IAAIC,EAAqBD,EACzB,IACIC,EAAqBC,UAAUF,EAClC,CACD,MAAOxjB,GAEHsL,SAAgEA,EAAe1I,MAAM,2BAA4B5C,EACpH,CACD,OAAOyjB,CACf,EACQ4qB,EAAsB,WAAc,OAAOjuC,OAAU,OAAQ,OAAQ,EAAQ,WAC7E,IAAIkuC,EAAcpoC,EACdqE,EACJ,OAAOnJ,EAAYnC,KAAM,SAAUiM,GAC/B,OAAQA,EAAGzJ,OACP,KAAK,EAMD,OALA6sC,EAAe/qB,EAAkC,oBAAbZ,UAA4BA,SAAS4rB,MAAS,IAClFhkC,EAAK,CACDgE,WAAYk4B,GAEhBvgC,EAAK,CAAC,CAAA,GACC,CAAC,EAAasoC,MACzB,KAAK,EAAG,MAAO,CAAC,GAAejkC,EAAGyF,iBAAmB1Q,EAASQ,WAAM,EAAQ,CAACR,EAASQ,WAAM,EAAQoG,EAAG/C,OAAO,CAAE+H,EAAGxJ,UAAY,CAAE,0BACrE,oBAAbihB,UAA4BA,SAASirB,UAAa,GAAI,4BAA6BU,EAAc,wBACpF,oBAAb3rB,UAA4BY,EAAaZ,SAASuJ,WAAc,GAAI,yBAAqDyS,GAAaL,IAAyB,uBAAwBgQ,EAAa13B,MAAM,KAAK,MACtPrM,IAExB,EACK,EAAE,EACCkkC,EAAwB,WAAc,YAA0B,IAAZ/H,GAA+C,mBAAZA,GAA0BA,GAAW,EAE5HgI,EAAkC,oBAAb/rB,SAA2BA,SAAS4rB,KAAO,KAChEI,EAAuB,WAAc,OAAOvuC,OAAU,OAAQ,OAAQ,EAAQ,WAC3E,IAACwuC,EAAQC,EAAyBtkC,EAAIW,EACzC,OAAO9J,EAAYnC,KAAM,SAAU+N,GAC/B,OAAQA,EAAGvL,OACP,KAAK,EAQD,OAPAmtC,EAASjsB,SAAS4rB,KAClBM,EAAsBC,GAA2BnI,EAAqBiI,EAAQF,GAAe,KAAOD,IAKpGC,EAAcE,EACTC,GAELvjC,SAAgEA,EAAe4B,IAAI,4BAC7E,MAAAghC,EAAoD,CAAC,EAAa,GAEjE,CAAC,EAAa,IALY,CAAC,EAAa,GAMnD,KAAK,EAED,OADAhjC,GAAMX,EAAK2jC,GAAW/+B,MACf,CAAC,EAAak/B,KACzB,KAAK,EACInjC,EAAGpL,MAAMyK,EAAI,CAACyC,EAAGtL,SACtBsL,EAAGvL,MAAQ,EACf,KAAK,EAEDuL,EAAGvL,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,GAEhC,EACK,EAAE,EAECstC,EAA8B,WACzBJ,GACb,EACQ3jC,EAAS,CACTK,KAAM,+CACNG,KAAM,aACNC,MAAO,SAAUR,EAAQN,GAAU,OAAOvK,OAAU,OAAQ,OAAQ,EAAQ,WACxE,IAAI8F,EAAIqE,EACR,OAAOnJ,EAAYnC,KAAM,SAAUiM,GAC/B,OAAQA,EAAGzJ,OACP,KAAK,EAuBD,OAtBAysC,EAAYvjC,EACZwjC,EAAcljC,GACdK,EAAiBL,EAAOK,gBACT4B,IAAI,2DACnBkhC,GAAa,EACTtkC,IACAA,EAAYqjB,iBAAiB,WAAY4hB,GAMzCjlC,EAAYklC,QAAQC,UAAY,IAAIC,MAAMplC,EAAYklC,QAAQC,UAAW,CACrEnvC,MAAO,SAAU2nB,EAAQpnB,EAAS6F,GAC9B,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAI6iC,EAAQx+B,EAAG,GAAI4kC,EAAS5kC,EAAG,GAAI4Y,EAAM5Y,EAAG,GAChEkd,EAAO3nB,MAAMO,EAAS,CAAC0oC,EAAOoG,EAAQhsB,IAClCirB,GACKO,GAEZ,KAGJF,KACLnjC,EAAe4B,IAAI,4BACnB3C,GAAMrE,EAAKgoC,GAAW/+B,MACf,CAAC,EAAak/B,MAHgB,CAAC,EAAa,GAIvD,KAAK,EACD9jC,EAAGzK,MAAMoG,EAAI,CAACgF,EAAGxJ,SACjBwJ,EAAGzJ,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,GAEpC,EACS,EAAI,EACL2L,QAAS,SAAUvE,GAAS,OAAOzI,OAAU,OAAQ,OAAQ,EAAQ,WACjE,IAAIgvC,EACJ,OAAOhuC,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EACD,MAAkB,gBAAZilC,GAA6B2I,GAAgBxmC,IAEnDyC,SAAgEA,EAAe4B,IAAI,wEAC5E,CAAC,EAAamhC,MAH8C,CAAC,EAAa,GAIrF,KAAK,EACDe,EAAgBlpC,EAAGxE,OACnBmH,EAAM0F,WAAa6gC,EAAc7gC,WACjC1F,EAAMmH,iBAAmB1Q,EAASA,EAAS,CAAA,EAAIuJ,EAAMmH,kBAAmBo/B,EAAcp/B,kBACtF9J,EAAGzE,MAAQ,EACf,KAAK,EAMD,OAJI0sC,GAAetlC,EAAM0F,aAAek4B,IACpC0H,EAAYvH,YAAeuH,EAAYvH,YAAkBuH,EAAYvH,YAAc,EAA9B,EACrD/9B,EAAMmH,iBAAmB1Q,EAASA,EAAS,CAAA,EAAIuJ,EAAMmH,kBAAmB,CAAE,2BAA4Bm+B,EAAYvH,eAE/G,CAAC,EAAc/9B,GAE9C,EACS,EAAI,EACLiD,SAAU,WAAc,OAAO1L,OAAU,OAAQ,OAAQ,EAAQ,WAC7D,OAAOgB,EAAYnC,KAAM,SAAUiH,GAK/B,OAJI4D,IACAA,EAAYwlC,oBAAoB,WAAYP,GAC5CX,GAAa,GAEV,CAAC,EACxB,EACS,EAAI,GAET,OAAOpjC,CACX,EACIwjC,GAAoB,WAAc,OAAOpuC,OAAU,OAAQ,OAAQ,EAAQ,WAAc,IAAI8F,EAAI,OAAO9E,EAAYnC,KAAM,SAAUsL,GACpI,OAAQA,EAAG9I,OACP,KAAK,EAED,OADAyE,EAAK6nC,GACE,CAAC,GAAa,IAAIpQ,IAAiB1Y,SAC9C,KAAK,EAAG,MAAO,CAAC,EAAc/e,EAAGpG,WAAM,EAAQ,CAACyK,EAAG7I,UAE3D,EAAG,IACC2tC,GAAkB,SAAUxmC,GAC5B,GAAyB,cAArBA,EAAM0F,YAA8B1F,EAAM4F,gBAAiB,CAC3D,IAAI7I,EAAaiD,EAAM4F,gBACnB8gC,EAAO3pC,EAAWxG,EAAkB8H,MAAQ,CAAA,EAC5CsoC,EAAS5pC,EAAWxG,EAAkB8I,QAAU,CAAA,EAChDunC,EAAmB5sC,EAAcA,EAAc,GAAIJ,EAAOpE,OAAOwH,KAAK0pC,KAAQ,GAAQ9sC,EAAOpE,OAAOwH,KAAK2pC,KAAU,GACvH,OAAOnxC,OAAOwH,KAAKzB,GAAesrC,MAAM,SAAU7uC,GAAS,OAAO4uC,EAAiBjpC,SAAS3F,EAAS,EACxG,CACD,OAAO,CACX,EACWiuC,GAA6B,SAAUa,EAAgBC,EAAWC,GACzE,GACS,aADDF,EACJ,CACI,GAAiB,IAAbE,EACA,OAAO,EACX,IAAIjB,EAAS,IAAI5iB,IAAI4jB,GACjBE,EAAS,IAAI9jB,IAAI6jB,GAGrB,OAFiBjB,EAAO3iB,OAAS2iB,EAAO1iB,WACvB4jB,EAAO7jB,OAAS6jB,EAAO5jB,QAE3C,CAEG,OAAO0jB,IAAcC,CAEjC,EC7KaE,GAA0B,WACrC,IAAIrO,EACAsO,EAAkC,GAEhC7iB,EAAmB,SAAC3S,EAAkBhP,EAA2BykC,GACrEz1B,EAAQ2S,iBAAiB3hB,EAAMykC,GAC/BD,EAAe3tC,KAAK,CAClBmY,QAAOA,EACPhP,KAAIA,EACJykC,QAAOA,GAEX,EAgHA,MAAO,CACL5kC,KAvGW,sDAwGXG,KAvGW,aAwGXC,MAvGY,SAAOR,EAAuBijC,GAAwB,OAAA9tC,OAAA,OAAA,OAAA,EAAA,oDAC5D8vC,EAAyB,WAE7B,GAAKhC,GASL,GAAwB,oBAAb/oB,SAAX,CAIA,IAAMgrB,EAA6B,SAACC,GAClC,IAAIC,GAAiB,EAErBljB,EAAiBijB,EAAM,SAAU,iBACzBE,EAAkBC,GAAkBH,GACrCC,GACHnC,EAAU/+B,MAAM+6B,KAAwBhkC,EAAA,CAAA,GACrC0kC,IAAU4F,GAAkBJ,EAAK/c,IAClCntB,EAAC2kC,IAAY2F,GAAkBJ,EAAK/kC,MACpCnF,EAAC4kC,IAAmBwF,MAGxBD,GAAiB,CACnB,GAEAljB,EAAiBijB,EAAM,SAAU,mBACzBE,EAAkBC,GAAkBH,GACrCC,GACHnC,EAAU/+B,MAAM+6B,KAAwBhkC,EAAA,CAAA,GACrC0kC,IAAU4F,GAAkBJ,EAAK/c,IAClCntB,EAAC2kC,IAAY2F,GAAkBJ,EAAK/kC,MACpCnF,EAAC4kC,IAAmBwF,MAIxBpC,EAAU/+B,MAAMg7B,KAAyB5/B,EAAA,CAAA,GACtCqgC,IAAU4F,GAAkBJ,EAAK/c,IAClC9oB,EAACsgC,IAAY2F,GAAkBJ,EAAK/kC,MACpCd,EAACugC,IAAmBwF,MAEtBD,GAAiB,CACnB,EACF,EAGc7xC,MAAMuE,KAAKoiB,SAASsrB,qBAAqB,SACjD3iC,QAAQqiC,GAIkB,oBAArBO,mBACThP,EAAW,IAAIgP,iBAAiB,SAACC,GAC/BA,EAAU7iC,QAAQ,SAAC8iC,GACjBA,EAASC,WAAW/iC,QAAQ,SAACgjC,GACL,SAAlBA,EAAKC,UACPZ,EAA2BW,GAEzB,qBAAsBA,GAAyC,mBAA1BA,EAAKE,kBAC5CxyC,MAAMuE,KAAK+tC,EAAKE,iBAAiB,SAA8BxnC,IAAI2mC,EAEvE,EACF,EACF,IAESc,QAAQ9rB,SAAS9jB,KAAM,CAC9B6vC,SAAS,EACTC,WAAW,GA1Dd,OATClmC,EAAOK,eAAeC,KACpB,+HAqEN,EAG4B,aAAxB4Z,SAAS+jB,WACXgH,KAMMkB,EAASnoC,KAGbmoC,EAAOjkB,iBAAiB,OAAQ+iB,GAEhCjlC,EAAOK,eAAe0G,MAAM,oFAchC5E,QAVc,SAAOvE,GAAY,OAAAzI,OAAA,OAAA,OAAA,EAAA,WAAA,OAAAgB,EAAAnC,KAAA,SAAAiH,GAAK,MAAA,CAAA,EAAA2C,QAWtCiD,SAVe,WAAA,OAAA1L,OAAA,OAAA,OAAA,EAAA,4CACfshC,SAAAA,EAAU2P,aAzGVrB,EAAeliC,QAAQ,SAAC5H,GAAE,IAAAsU,YAAShP,EAAItF,EAAAsF,KAAEykC,EAAO/pC,EAAA+pC,QAE9Cz1B,SAAAA,EAAS80B,oBAAoB9jC,EAAMykC,EACrC,GACAD,EAAiB,YAgHrB,EAEaQ,GAAoB,SAAInlC,GAEnC,GAAoB,iBAATA,EAOX,OAAOA,CACT,EAGaklC,GAAoB,SAACH,GAChC,IAAIE,EAAkBF,EAAKkB,aAAa,UACxC,IAEEhB,EAAkB,IAAItkB,IAAIulB,UAAUjB,QAAAA,EAAmB,IAAKlnC,OAAOuZ,SAAS4rB,MAAMA,IACnF,CAAC,MAAMroC,GAEP,CACD,OAAOoqC,CACT,EChKakB,GAAuB,WAClC,IAAI9P,EACAsO,EAAkC,GAmHtC,MAAO,CACL3kC,KAnGW,mDAoGXG,KAnGW,aAoGXC,MAlGY,SAAOR,EAAuBijC,GAAwB,OAAA9tC,OAAA,OAAA,OAAA,EAAA,oDAC5DqxC,EAAiC,WAErC,GAAKvD,GASL,GAAwB,oBAAb/oB,SAAX,CAIA,IAAMusB,EAA0B,SAAC7nC,GAC/B,IAAIsZ,EACJ,IAEEA,EAAM,IAAI6I,IAAIniB,EAAE0kC,KAAMnlC,OAAOuZ,SAAS4rB,KACvC,CAAC,MAAMroC,GAEN,MACD,CACD,IAAMjF,EAAS0wC,EAAIC,KAAKzuB,EAAIorB,MACtBsD,EAAgB5wC,eAAAA,EAAS,GAE3B4wC,GA/Ce,SAACr3B,EAAkBhP,EAAeykC,GACzDz1B,EAAQ2S,iBAAiB3hB,EAAMykC,GAC/BD,EAAe3tC,KAAK,CAClBmY,QAAOA,EACPhP,KAAIA,EACJykC,QAAOA,GAEX,CAyCQ9iB,CAAiBtjB,EAAG,QAAS,iBACvBgoC,GACF3D,EAAU/+B,MAAMi7B,KAA2BlkC,EAAA,CAAA,GACxCqkC,IAAiBsH,EAClB3rC,EAACskC,IAAYrnB,EAAI+I,SACjBhmB,EAACukC,IAAU5gC,EAAEwpB,GACbntB,EAACwkC,IAAY7gC,EAAEgN,KACf3Q,EAACykC,IAAW9gC,EAAE0kC,QAGpB,EAEJ,EAEMoD,EACJ,uHAGYnzC,MAAMuE,KAAKoiB,SAASsrB,qBAAqB,MACjD3iC,QAAQ4jC,GAIkB,oBAArBhB,mBACThP,EAAW,IAAIgP,iBAAiB,SAACC,GAC/BA,EAAU7iC,QAAQ,SAAC8iC,GACjBA,EAASC,WAAW/iC,QAAQ,SAACgjC,GACL,MAAlBA,EAAKC,UACPW,EAAwBZ,GAEtB,qBAAsBA,GAAyC,mBAA1BA,EAAKE,kBAC5CxyC,MAAMuE,KAAK+tC,EAAKE,iBAAiB,MAA6BxnC,IAAIkoC,EAEtE,EACF,EACF,IAEST,QAAQ9rB,SAAS9jB,KAAM,CAC9B6vC,SAAS,EACTC,WAAW,GAtDd,OATClmC,EAAOK,eAAeC,KACpB,yHAiEN,EAI4B,aAAxB4Z,SAAS+jB,WACXuI,KAGML,EAASnoC,KAGbmoC,EAAOjkB,iBAAiB,OAAQskB,GAEhCxmC,EAAOK,eAAe0G,MAAM,iFAehC5E,QAVc,SAAOvE,GAAY,OAAAzI,OAAA,OAAA,OAAA,EAAA,WAAA,OAAAgB,EAAAnC,KAAA,SAAAiH,GAAK,MAAA,CAAA,EAAA2C,QAWtCiD,SAVe,WAAA,OAAA1L,OAAA,OAAA,OAAA,EAAA,4CACfshC,SAAAA,EAAU2P,aArGVrB,EAAeliC,QAAQ,SAAC5H,GAAE,IAAAsU,YAAShP,EAAItF,EAAAsF,KAAEykC,EAAO/pC,EAAA+pC,QAE9Cz1B,SAAAA,EAAS80B,oBAAoB9jC,EAAMykC,EACrC,GACAD,EAAiB,YA4GrB,ECpII8B,IAAW,ECKFC,GAAmC,WAC9C,IAEMjoC,EAAcb,IAChB+mC,EAAkC,GAEhCgC,EAAqB,SAACxmC,EAA4BykC,IAElDnmC,eAAAA,EAAaqjB,oBACfrjB,SAAAA,EAAaqjB,iBAAiB3hB,EAAMykC,GACpCD,EAAe3tC,KAAK,CAClBmJ,KAAIA,EACJykC,QAAOA,IAGb,EAwCA,MAAO,CACL5kC,KAvDW,4CAwDXG,KAvDW,SAwDXC,MAjCY,SAAOR,EAAuBijC,GAAwB,OAAA9tC,OAAA,OAAA,OAAA,EAAA,qCAClE,MAAyB,oBAAdoe,WACTvT,EAAOK,eAAe0G,MACpB,uFAEF/G,EAAO4J,SAAU,EACV,CAAA,KAGT5J,EAAO4J,SAAW2J,UAAUyzB,OAE5BD,EAAmB,SAAU,WAC3B/mC,EAAOK,eAAe0G,MAAM,2CAC5B/G,EAAO4J,SAAU,EAEjB1I,WAAW,WACT+hC,EAAUvgC,OACZ,EAAG1C,EAAO0J,oBACZ,GAEAq9B,EAAmB,UAAW,WAC5B/mC,EAAOK,eAAe0G,MAAM,4CAC5B/G,EAAO4J,SAAU,CACnB,aAWA/I,SARe,WAAA,OAAA1L,OAAA,OAAA,OAAA,EAAA,4CAjCf4vC,EAAeliC,QAAQ,SAAC5H,OAAEsF,EAAItF,EAAAsF,KAAEykC,EAAO/pC,EAAA+pC,QAErCnmC,SAAAA,EAAawlC,oBAAoB9jC,EAAMykC,EACzC,GACAD,EAAiB,YAuCrB,ECDM,SAAUkC,GAA6BjnC,6BAO3C,GAAsB,iBAAXA,GAAkC,OAAXA,IAK9BzM,MAAM2H,QAAQ8E,GAAlB,CAIA,IAAMknC,EAAgB9zC,OAAOwH,KAAKoF,OAClC,IAA2B,IAAAmnC,EAAA9vC,EAAA6vC,eAAeE,EAAAnxC,KAAAmxC,EAAAD,EAAArxC,OAAA,CAArC,IAAMuxC,EAAYD,EAAAxxC,MACrB,IACE,IAAMA,EAAQoK,EAAOqnC,GAES,kBAAnBzxC,aAAK,EAALA,EAAOksB,WACZlsB,EAAMksB,gBAGDlsB,EAAMksB,QACqB,IAA9B1uB,OAAOwH,KAAKhF,GAAOhB,SACpBoL,EAAeqnC,IAAgB,IAIjCrnC,EAAeqnC,IAAgB,GAKpCJ,GAA6BrxC,EAC9B,CAAC,MAAOb,GAIR,CACF,mGAGD,IACE,GAAuD,QAAnD0gB,EAAqC,QAArCzT,EAAoB,QAApBD,EAAA/B,EAAOk6B,mBAAa,IAAAn4B,OAAA,EAAAA,EAAAw4B,uBAAiB,IAAAv4B,OAAA,EAAAA,EAAAi5B,oBAAc,IAAAxlB,OAAA,EAAAA,EAAA7gB,WACrD,IAAmB,IAAAihB,EAAAxe,EAAA2I,EAAOk6B,YAAYK,gBAAgBU,cAAYnlB,EAAAD,EAAA/f,QAAEggB,EAAA7f,KAAA6f,EAAAD,EAAA/f,OAAA,CAA/D,IAAMolC,EAAIplB,EAAAlgB,UACb,IAAqB,IAAAmgB,GAAAR,OAAA,EAAAle,EAAA,CAAC,kBAAmB,oBAAiBwtB,EAAA9O,EAAAjgB,QAAE+uB,EAAA5uB,KAAA4uB,EAAA9O,EAAAjgB,OAAA,CAAvD,IAAMwxC,EAAMziB,EAAAjvB,MACTkvB,EAAgD,QAAZnP,EAAAulB,EAAKoM,UAAO,IAAA3xB,EAAAA,EAAI,CAAE,EAApD4xB,EAAkBziB,EAAAyiB,mBAAEpvB,eACvBovB,GAAuBpvB,UAIV9e,IAAd8e,GAA4B5kB,MAAM2H,QAAQid,GAI9C+iB,EAAKoM,GAAc1vC,EAAAA,EAAA,GAAAJ,EAAC+vC,EAAqB/sC,EAAe,KAAG,GAAAhD,EAAM2gB,QAAAA,EAAa,KAAG,UAHxE+iB,EAAKoM,GAIf,mGACF,mGAEJ,CAAC,MAAOvyC,GAGR,CAGD,IAAM4lC,EAA4C,QAAlB/kB,EAAA5V,EAAOk6B,mBAAW,IAAAtkB,OAAA,EAAAA,EAAE+kB,wBAChDA,IACEA,EAAwB6M,YAC1B7M,EAAwB8M,WAAa9M,EAAwB6M,iBACtD7M,EAAwB6M,WAE7B7M,EAAwB+M,YAC1B/M,EAAwBgN,WAAahN,EAAwB+M,iBACtD/M,EAAwB+M,WA9DlC,CAiEH,CAEA,SAASE,GAAUC,EAAgCC,EAAiCrF,WAE5EsF,EAAY,OAClB,IAAsB,IAAAzoC,EAAAjI,EAAAywC,QAAAA,EAAa,IAAE7nC,EAAAX,EAAAxJ,QAAEmK,EAAAhK,KAAAgK,EAAAX,EAAAxJ,OAAA,CAAlC,IAAM29B,EAAOxzB,EAAArK,MAChB,IACEmyC,EAAU3wC,KAAK,IAAI4wC,OAAOvU,GAC3B,CAAC,MAAOwU,GACPxF,EAAcpiC,eAAeC,KAAK,0BAA0BpI,OAAAu7B,GAAWwU,EACxE,CACF,mGAED,OAAOJ,EAAU3vC,OAAO6vC,EAC1B,CASgB,SAAAG,GACdzgB,EACAgb,qBAEA,GAAKhb,EAAL,CAKAwf,GAA6Bxf,GAE7B,IACEgb,EAAcpiC,eAAe0G,MAC3B,mDACA3E,KAAKC,UAAUolB,IAKjB,IAAM0gB,EAAoB1gB,EAK1B,GAAI0gB,GAAqB,gBAAiBA,EAAmB,CAK3D,GAJ6C,kBAAlCA,EAAkBjO,cAC3BuI,EAAcvI,YAAciO,EAAkBjO,aAGH,iBAAlCiO,EAAkBjO,aAA8D,OAAlCiO,EAAkBjO,YAAsB,CAC/F,IAAMkO,EAA0C/zC,EAAA,CAAA,EAAA8zC,EAAkBjO,aAOlE,QALkC7gC,IAA9BopC,EAAcvI,cAChBuI,EAAcvI,YAAciO,EAAkBjO,aAKe,iBAAtDiO,EAAkBjO,YAAYO,qBACiB,OAAtD0N,EAAkBjO,YAAYO,sBACyC,QAAvEn7B,EAAA6oC,EAAkBjO,YAAYO,oBAAoB4N,6BAAqB,IAAA/oC,OAAA,EAAAA,EAAE1K,QACzE,CACAwzC,EAAmC3N,oBAC9BpmC,EAAA,CAAA,EAAA8zC,EAAkBjO,YAAYO,qBAEnC,IAAM6N,EAAmCF,EAAmC3N,oBAGtE8N,EAAkE,QAAjDtoC,EAAAqoC,EAAiCE,wBAAgB,IAAAvoC,EAAAA,EAAI,GACtE6nC,EAAYK,EAAkBjO,YAAYO,oBAAoB4N,sBACpEC,EAAiCE,iBAAmBZ,GAAUW,EAAgBT,EAAWrF,UAGlF6F,EAAiCD,qBACzC,CAGD,GAC2D,iBAAlDF,EAAkBjO,YAAYK,iBACa,OAAlD4N,EAAkBjO,YAAYK,kBAC4B,QAA1Dx4B,EAAAomC,EAAkBjO,YAAYK,gBAAgBU,oBAAY,IAAAl5B,OAAA,EAAAA,EAAEnN,QAC5D,CACAwzC,EAAmC7N,gBAC9BlmC,EAAA,CAAA,EAAA8zC,EAAkBjO,YAAYK,iBAEnC,IAEMU,EAAwD,QAAzCj5B,EAFgBomC,EAAmC7N,gBAEtBU,oBAAY,IAAAj5B,EAAAA,EAAI,OAClE,IAAmB,IAAAymC,EAAApxC,EAAA4jC,eAAcyN,EAAAzyC,KAAAyyC,EAAAD,EAAA3yC,OAAA,CAA5B,IAAMolC,EAAIwN,EAAA9yC,MACbslC,EAAKC,KAAOyM,GAAuB,QAAbnyB,EAAAylB,EAAKC,YAAQ,IAAA1lB,EAAAA,EAAA,GAAIylB,EAAK4M,UAAWrF,UAChDvH,EAAK4M,SACb,mGACF,CAEwC,kBAA9BrF,EAAcvI,cACvBuI,EAAcvI,YAAW7lC,EAAA,CACvBs0C,YAAalG,EAAcvI,YAC3B0O,cAAenG,EAAcvI,YAC7B2O,iBAAkBpG,EAAcvI,YAChC2B,UAAW4G,EAAcvI,YACzB4O,SAAUrG,EAAcvI,YACxBO,oBAAqBgI,EAAcvI,YACnC6O,UAAWtG,EAAcvI,YACzBS,wBAAyB8H,EAAcvI,aACpCkO,IAIkC,iBAA9B3F,EAAcvI,cACvBuI,EAAcvI,YACT7lC,EAAAA,EAAA,CAAA,EAAAouC,EAAcvI,aACdkO,GAGR,CAGD3F,EAAc7G,gBAAkB6G,EAAcvI,WAC/C,CAEDuI,EAAcpiC,eAAe0G,MAAM,6CAA8C3E,KAAKC,UAAUogC,GACjG,CAAC,MAAO1tC,GACP0tC,EAAcpiC,eAAe1I,MAAM,0DAA2D5C,EAC/F,CAjGA,CAkGH,CCjRO,IAAImnC,GAAU,SCEV8M,GAAkC,8BAMlCC,GAAmC,0BACnCC,GAAoC,2BAQpCC,GAAgC,uBAKhCC,GAAmB,4BAGnBC,GAAwB,CAC/BC,GAAIF,GACJG,GAJ6B,+BAK7BC,QAJkC,oCAW3BC,GAA2B,2BChClCC,GAAiB,CAAC,QAAS,SAAU,YAC9BC,GAAyB,SAAUp6B,EAASq6B,GACnD,IAAI3uC,EAEA4uC,EAAmG,QAAlF5uC,EAAgB,OAAXkD,aAA8B,IAAXA,YAAoB,EAASA,OAAO2rC,wBAAqC,IAAP7uC,OAAgB,EAASA,EAAGtH,KAAKwK,OAAQoR,GAExJ,MAAoH,aAA5Gs6B,aAAqD,EAASA,EAAcE,iBAAiB,YAA2C,UAAfH,CACrI,EACWI,GAAyB,SAAUC,EAAoB9xB,EAClE+xB,GAEI,YADqC,IAAjCA,IAA2CA,GAA+B,GACvE,SAAUN,EAAYr6B,GACzB,IAAItU,EAAIqE,EACJkpC,EAAmByB,EAAmBzB,iBAAkB2B,EAAqBF,EAAmBE,mBAAoBC,EAA2BH,EAAmBG,yBAElKC,EAA8I,QAAvI/qC,EAAkF,QAA5ErE,EAAKsU,aAAyC,EAASA,EAAQ+6B,eAA4B,IAAPrvC,OAAgB,EAASA,EAAG+zB,mBAAgC,IAAP1vB,OAAgB,EAASA,EAAG3L,KAAKsH,GAE3L,IAAKovC,EACD,OAAO,EAEX,GAAID,EACA,OAAOA,EAAyBR,EAAYr6B,GAGhD,IAAK0I,GAAoB9Z,OAAOuZ,SAAS4rB,KAAMkF,GAC3C,OAAO,EAGX,GAAI2B,GACAA,EAAmBv1C,OAAS,GAC5BqjB,GAAoB9Z,OAAOuZ,SAAS4rB,KAAM6G,GAC1C,OAAO,EAGX,IAAII,EAAcz2C,OAAOyb,aAAyC,EAASA,EAAQ82B,aAAa,UAAY,GAC5G,GAA2B,iBAAhBkE,EACP,OAAQA,EAAYvb,eAChB,IAAK,SAEL,IAAK,WACD,OAAO,EAGnB,IAAIwb,EAAkBb,GAAuBp6B,EAASq6B,GACtD,GAAIM,GAAgCM,EAChC,OAAO,EAGX,GAAIryB,EAAW,CACX,IAAIsyB,EAA6BtyB,EAAUjY,KAAK,SAAUwqC,GAAY,IAAIzvC,EAAI,SAAuF,QAA5EA,EAAKsU,aAAyC,EAASA,EAAQo7B,eAA4B,IAAP1vC,OAAgB,EAASA,EAAGtH,KAAK4b,EAASm7B,GAAa,GACpO,IAAKD,EACD,OAAO,CAEd,CACD,OAAQJ,GACJ,IAAK,QACL,IAAK,SACL,IAAK,WACD,MAAsB,WAAfT,GAA0C,UAAfA,EACtC,QAGI,QAAIY,GAGkB,UAAfZ,EAGvB,CACA,EAsBWgB,GAAwB,SAAUC,GACzC,OAAOA,EACDA,EACGl/B,MAAM,KACNpN,IAAI,SAAU4N,GAAQ,OAAOA,EAAKN,SAClC3J,OAAO,SAAUiK,GAAQ,OAAOA,EAAKvX,OAAS,GAAc,OAATuX,GAA0B,UAATA,CAAiB,GACxF,EACV,EAmBW2+B,GAAwB,SAAUnwC,GACzC,OAAOvH,OAAOwH,KAAKD,GAAY0U,OAAO,SAAU07B,EAAoBlwC,GAChE,IAAIjF,EAAQ+E,EAAWE,GAIvB,OAZa,SAAUjF,GAC3B,OAAQA,SAEc,iBAAVA,GAAoD,IAA9BxC,OAAOwH,KAAKhF,GAAOhB,QAC/B,iBAAVgB,GAA8C,IAAxBA,EAAMiW,OAAOjX,MACnD,CAIao2C,CAAQp1C,KACTm1C,EAAmBlwC,GAAOjF,GAEvBm1C,CACV,EAAE,CAAE,EACT,EAiBWE,GAAoB,SAAU17B,EAAS27B,GAC9C,OAAK37B,EAID27B,EAAUhrC,KAAK,SAAUwqC,GAAY,IAAIzvC,EAAI,OAAoF,QAA5EA,EAAKsU,aAAyC,EAASA,EAAQo7B,eAA4B,IAAP1vC,OAAgB,EAASA,EAAGtH,KAAK4b,EAASm7B,EAAY,GACxLn7B,EAGJ07B,GAAkB17B,aAAyC,EAASA,EAAQ47B,cAAeD,GAPvF,IAQf,EA8BO,IAAIE,GAA8B,SAAUxtC,GAG/C,QAA2B,OAAvBA,EAAMA,MAAM4e,SAAoB5e,EAAMytC,uBAI9C,EC3LA,IAAIC,GAAqB,IAAI1vC,IAAI,CAE7B,KACA,QAEA,QAEA,QAEA,UACA,WACA,UACA,SACA,WACA,UACA,YACA,UACA,aAEA,eACA,sBACA,iBAEA6tC,GACAzW,KAEAuY,GAAwC,CAAC,QACzCC,GAAW,CAAC,MAAO,OAAQ,KAC3BC,GAA+B,CAAC,WAAY,UAEzC,SAASC,GAAqBn8B,EAASo8B,GAC1C,IAAI3wC,EAAKC,EACLqE,EAAIW,EAAI8B,EAAIC,EAChB,GAAgB,OAAZuN,EACA,OAAO,KAEX,IAAI+6B,EAAUx2C,OAAOyb,EAAQ+6B,SAAStb,cAClCr0B,EAAa,CACb0vC,IAAKC,GAELsB,EAAWr4C,MAAMuE,KAA8F,QAAxFmI,EAAsC,QAAhCX,EAAKiQ,EAAQ47B,qBAAkC,IAAP7rC,OAAgB,EAASA,EAAGusC,gBAA6B,IAAP5rC,EAAgBA,EAAK,IAC5I2rC,EAASh3C,SACT+F,EAAW6D,MAAQotC,EAAS52C,QAAQua,GACpC5U,EAAWmxC,YAAcF,EAAS1pC,OAAO,SAAU6pC,GAAM,OAAOA,EAAGzB,UAAY/6B,EAAQ+6B,OAAQ,GAAIt1C,QAAQua,IAE/G,IAAIy8B,EAAkH,QAAhGhqC,EAA+C,QAAzCD,EAAKwN,EAAQ08B,8BAA2C,IAAPlqC,OAAgB,EAASA,EAAGuoC,eAA4B,IAAPtoC,OAAgB,EAASA,EAAGgtB,cACtJgd,IACArxC,EAAWuxC,QAAUp4C,OAAOk4C,IAEhC,IAAI5jB,EAAK7Y,EAAQ82B,aAAa,MAC1Bje,IACAztB,EAAWytB,GAAKt0B,OAAOs0B,IAE3B,IAAI+jB,EAAU54C,MAAMuE,KAAKyX,EAAQ68B,WAC7BD,EAAQv3C,SACR+F,EAAWwxC,QAAUA,GAEzB,IAAIE,EAAa,CAAA,EAEbC,EADkB/4C,MAAMuE,KAAKyX,EAAQ88B,YACAnqC,OAAO,SAAUiK,GAAQ,OAAQm/B,GAAmB/tC,IAAI4O,EAAK/L,KAAQ,GAC1GmsC,GDW2B,SAAUh9B,GACzC,IAAItU,EAAIqE,EAAIW,EAERoqC,EAA8I,QAAvI/qC,EAAkF,QAA5ErE,EAAKsU,aAAyC,EAASA,EAAQ+6B,eAA4B,IAAPrvC,OAAgB,EAASA,EAAG+zB,mBAAgC,IAAP1vB,OAAgB,EAASA,EAAG3L,KAAKsH,GACvLuxC,EAAoBj9B,aAAmBk9B,aAAyH,UAAvD,QAAlDxsC,EAAKsP,EAAQ82B,aAAa,0BAAuC,IAAPpmC,OAAgB,EAASA,EAAG+uB,eACjJ,OAAQ0a,GAAenuC,SAAS8uC,KAASmC,CAC7C,CCjB8BE,CAAsBn9B,GAEhD,IAAKk8B,GAA6BlwC,SAASzH,OAAOyb,EAAQ82B,aAAa,YAAcmF,GAASjwC,SAAS+uC,GACnG,IACI,IAAK,IAAIqC,EAAuBt1C,EAASi1C,GAAqBM,EAAyBD,EAAqB72C,QAAS82C,EAAuB32C,KAAM22C,EAAyBD,EAAqB72C,OAAQ,CACpM,IAAIqW,EAAOygC,EAAuBh3C,MAE9B22C,IAAuBhB,GAAsChwC,SAAS4Q,EAAK/L,QAG3EurC,EAAyBpuC,IAAI4O,EAAK/L,MAClCisC,EAAWlgC,EAAK/L,MAAQ6yB,GAI5BoZ,EAAWlgC,EAAK/L,MAAQtM,OAAOqY,EAAKvW,OAAOwY,UAAU,EF3CnC,KE4CrB,CACJ,CACD,MAAO5S,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQoxC,IAA2BA,EAAuB32C,OAASgF,EAAK0xC,EAAqBlxC,SAASR,EAAGtH,KAAKg5C,EAC7G,CACO,QAAE,GAAI3xC,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CAKL,OAHIvE,OAAOwH,KAAKyxC,GAAYz3C,SACxB+F,EAAWkyC,MAAQR,GAEhB1xC,CACX,CCxFO,IAwBImyC,GAAiB,SAAUx3B,EAASy3B,EAAIC,GAC/C13B,EAAQzS,QAAQ,SAAU6S,GAEtB,GAAsB,iBAAXA,GAGe,0BAAtBA,EAAOk0B,WAAwC,CAC/C,IAAI7W,EAAOia,EAAcC,0BAA0Bv3B,EAAOw3B,WAAYH,EAAG1B,wBAEzE0B,EAAGI,wBAAwBz3B,EAAO03B,gBAAkBra,CACvD,CACT,EACA,ECpCIsa,GACA,SAAuBpjC,EAAS0D,GAC5B,IAAI3S,EAAKC,EAELqE,EADAyB,EAAQ/M,KAOZA,KAAKq/B,uBAAyB,SAAUznB,GACpC,OAAOynB,GAAuBznB,EAAM7K,EAAMuyB,2BACtD,EAEQt/B,KAAKs5C,aAAe,SAAU/9B,GAC1B,IAAIzN,EAAK7G,EACLqE,EAAIW,EAEJstC,EADAne,EAAYmC,YAAYna,MAE5B,IAAK7H,EACD,MAAO,GAMX,IAHA,IAAIyb,EFkET,SAAsBwiB,GACzB,IAAIxiB,EAAY,GAChB,IAAKwiB,EACD,OAAOxiB,EAGXA,EAAU5zB,KAAKo2C,GAEf,IADA,IAAIC,EAAUD,EAASrC,cAChBsC,GAA+B,SAApBA,EAAQnD,SACtBtf,EAAU5zB,KAAKq2C,GACfA,EAAUA,EAAQtC,cAEtB,OAAOngB,CACX,CE/E4B0iB,CAAan+B,GAEzBo+B,EAA+B,IAAIt0B,IAC9B5kB,EAAIu2B,EAAUp2B,OAAS,EAAGH,GAAK,EAAGA,IAAK,CAC5C,IAAIoxC,EAAO7a,EAAUv2B,GACrB,GAAIoxC,EAAM,CACN,IAAI+H,EAAmBhD,GAAsB/E,EAAKQ,aAAawH,KAC3DC,EAA2Br5C,IAAMu2B,EAAUp2B,OAAS,EAAI,GAAmE,QAA7D0K,EAAKquC,EAA6B9iC,IAAImgB,EAAUv2B,EAAI,WAAwB,IAAP6K,EAAgBA,EAAK,IAAI1D,IAC5JmyC,EAA2B,IAAInyC,IAAIhE,EAAcA,EAAc,GAAIJ,EAAOs2C,IAA2B,GAAQt2C,EAAOo2C,IAAmB,IAC3ID,EAA6B5xC,IAAI8pC,EAAMkI,EAC1C,CACJ,CACDR,EAAYviB,EAAUzsB,IAAI,SAAUwtC,GAAM,IAAI9wC,EAAI,OAAOywC,GAAqBK,EAAoD,QAA/C9wC,EAAK0yC,EAA6B9iC,IAAIkhC,UAAwB,IAAP9wC,EAAgBA,EAAK,IAAIW,IAAS,GAC5K,IAAIytB,EAAU,SAAU2kB,IAChBA,aAAqD,EAASA,EAAcnB,QAC5Ez5C,OAAOiM,QAAQ2uC,EAAcnB,OAAOhqC,QAAQ,SAAU5H,GAClD,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAIJ,EAAMyE,EAAG,GAAI1J,EAAQ0J,EAAG,GAC5C0uC,EAAcnB,QACdmB,EAAcnB,MAAMhyC,GAAOkG,EAAMsyB,uBAAuBz9B,GAEpF,EAEA,EACY,IAEI,IAAK,IAAIq4C,EAAc52C,EAASk2C,GAAYW,EAAgBD,EAAYn4C,QAASo4C,EAAcj4C,KAAMi4C,EAAgBD,EAAYn4C,OAE7HuzB,EADoB6kB,EAAct4C,MAGzC,CACD,MAAO+L,GAASG,EAAM,CAAEnK,MAAOgK,EAAU,CACjC,QACJ,IACQusC,IAAkBA,EAAcj4C,OAASgF,EAAKgzC,EAAYxyC,SAASR,EAAGtH,KAAKs6C,EAClF,CACO,QAAE,GAAInsC,EAAK,MAAMA,EAAInK,KAAQ,CACxC,CACD,IAAI63B,EAAU+B,YAAYna,MAE1B,OADmC,QAAlCnX,EAAKc,EAAMmN,yBAAsC,IAAPjO,GAAyBA,EAAGqL,gBAAgB,iCAAkCkkB,EAAUJ,GAC5Hme,CACnB,EACQv5C,KAAKm6C,gBAAkB,SAAU5+B,GAC7B,IAII6+B,EAJAC,EAAS9+B,EAAQ47B,cACrB,IAAKkD,EACD,MAAO,GAGX,IACID,EAAeC,EAAOva,cAAc,gCACvC,CACD,MAAO74B,GAEHmzC,EAAe,IAClB,CACD,OAAIA,EAEOrtC,EAAMutC,QAAQF,GAElBrtC,EAAMotC,gBAAgBE,EACzC,EAEQr6C,KAAK6R,mBAAqB,SAAU+jC,EAAYr6B,EAASg/B,GACrD,IAAItzC,EACAqE,EAAIW,EAAI8B,EHSyB8qC,EAAO2B,EGPxCnE,EAA8I,QAAvIpqC,EAAkF,QAA5EX,EAAKiQ,aAAyC,EAASA,EAAQ+6B,eAA4B,IAAPhrC,OAAgB,EAASA,EAAG0vB,mBAAgC,IAAP/uB,OAAgB,EAASA,EAAGtM,KAAK2L,GAEvLmvC,EAAgD,mBAAlCl/B,EAAQm/B,sBAAuCn/B,EAAQm/B,wBAA0B,CAAEC,KAAM,KAAMC,IAAK,MAClHrB,EAAYxsC,EAAMusC,aAAa/9B,GAC/Bs/B,EAAmD,QAAvB9sC,EAAKwrC,EAAU,UAAuB,IAAPxrC,OAAgB,EAASA,EAAG8qC,MACvFiC,EAAe/tC,EAAMotC,gBAAgB5+B,GACrC88B,GHCiCQ,EGDMgC,QAA2EA,EAA2B,GHCrGL,EGDyGD,EHEtJn7C,OAAOiM,QAAQwtC,GAAOx9B,OAAO,SAAUg9B,EAAYpxC,GACtD,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAI8zC,EAAgBzvC,EAAG,GAAI0vC,EAAiB1vC,EAAG,GACnE,GAAIyvC,EAAc19B,WAAWm9B,GAAS,CAClC,IAAIS,EAAeF,EAAc7vC,QAAQsvC,EAAQ,IAC7CS,IACA5C,EAAW4C,GAAgBD,GAAkB,GAEpD,CACD,OAAO3C,CACV,EAAE,CAAE,IGTO1xC,IAAcM,EAAK,CAAE,GJ7Fe,iCI8FmBsyC,EACvDtyC,EAAGi0C,IAA8C7E,EACjDpvC,EAAGk0C,IAA+CpuC,EAAMutC,QAAQ/+B,GAChEtU,EJ/FwC,qCI+FgC,MAAbwzC,EAAKE,KAAe,KAAO3vC,KAAK8kB,MAAM2qB,EAAKE,MACtG1zC,EJ/FuC,oCI+F+B,MAAZwzC,EAAKG,IAAc,KAAO5vC,KAAK8kB,MAAM2qB,EAAKG,KACpG3zC,EJ9FqC,kCI8FmBoxC,EACxDpxC,EJ9FuC,oCI8FmB6zC,EAC1D7zC,EAAGm0C,IAA2C92B,GAAana,OAAOuZ,SAAS4rB,KAAK33B,MAAM,KAAK,IAC3F1Q,EJ9F6B,0BI8FmBy4B,GAAa3yB,EAAMsyB,wBACnEp4B,EJ9FkC,+BI8FmBkD,OAAOkxC,YAC5Dp0C,EJ9FiC,8BI8FmBkD,OAAOmxC,WAC3Dr0C,GAMJ,GAJAN,EJ/GiC,0BI+GuB4U,EAAQ82B,aAAa,OAAS,GAEtF1rC,EJhHoC,6BIgHuB4U,EAAQ82B,aAAa,SAChF1rC,EJ1GyC,kCI0GuBk0C,aAA2E,EAASA,EAAyB,cACjK,MAARxE,GAA8B,UAAfT,GAA0Br6B,aAAmBggC,kBAAmB,CAC/E,IAAIjM,EAAO/zB,EAAQ+zB,KAAKl1B,UAAU,EJrFhB,KIsFlBzT,EJhH+B,4BIgH2BoG,EAAMsyB,uBAAuBiQ,EAC1F,CACD,OAAOwH,GAAsBnwC,EACzC,EACQ3G,KAAKw7C,6BAA+B,SAAU5xC,EAAO2C,EAAMkvC,EAAmBlB,EAI9EmB,QACqC,IAA7BA,IAAuCA,GAA2B,GACtE,IAAIC,EAAY,CACZ/xC,MAAOA,EACP+a,UAAWxL,KAAKiK,MAChB7W,KAAMA,GAEV,GHwDL,SAA6B3C,GAChC,MAAsB,UAAfA,EAAM2C,MAAmC,WAAf3C,EAAM2C,IAC3C,CG1DgBqvC,CAAoBD,IAAyC,OAA3BA,EAAU/xC,MAAM4e,OAAiB,CACnE,GAAIkzB,GACsB/F,GAAuBgG,EAAU/xC,MAAM4e,OAAQmzB,EAAUpvC,MAI3E,OAFAovC,EAAUtE,uBAAyBsE,EAAU/xC,MAAM4e,OACnDmzB,EAAUxC,wBAA0BpsC,EAAM8E,mBAAmB8pC,EAAUpvC,KAAMovC,EAAUtE,uBAAwBkD,GACxGoB,EAIf,IAAItE,EAAyBJ,GAAkB0E,EAAU/xC,MAAM4e,OAAQizB,GAKvE,OAJIpE,IACAsE,EAAUtE,uBAAyBA,EACnCsE,EAAUxC,wBAA0BpsC,EAAM8E,mBAAmB8pC,EAAUpvC,KAAM8qC,EAAwBkD,IAElGoB,CACV,CACD,OAAOA,CACnB,EACQ37C,KAAKi5C,0BAA4B,SAAUC,EAAY2C,GAEnD,GAA8B,gBAA1B3C,EAAW4C,WAA8B,CACzC,IAAIC,EDzJO,SAAU7C,EAAY2C,GAE7C,IACI,GAA8B,gBAA1B3C,EAAW4C,WAA8B,CAEzC,IAAIE,EAAiB91B,SAAS+1B,gBAK9B,OAJI/C,EAAWvsB,OAASkvB,IACpBG,EAAiBH,EAAeK,QAAQhD,EAAWvsB,QAGnDqvB,GAAkB9C,EAAWxC,SACtBsF,EAAelc,cAAcoZ,EAAWxC,UAG5CsF,CACV,CACJ,CACD,MAAOr4C,GACH,MACH,CAGL,CCmIoCw4C,CAAcjD,EAAY2C,GAC9C,IAAKE,EACD,OAEJ,MAAsC,SAAlC7C,EAAWkD,mBACJrvC,EAAMutC,QAAQyB,GAEkB,cAAlC7C,EAAWkD,oBAAsClD,EAAWmD,UAC1DN,EAAc1J,aAAa6G,EAAWmD,gBAEjD,CACH,CAGb,EACQr8C,KAAKs6C,QAAU,SAAU/+B,GAGrB,GADiF,OAA1DA,EAAQ2gC,QAAQ,IAAIh4C,OAAO86B,GAAqB,MAEnE,OAAOC,GAEX,IAAIqd,EAAS,GACb,GAAK/gC,EAAQukB,cAAc,IAAI57B,OAAO86B,GAAqB,yBAGtD,CACD,IAAIud,EAAahhC,EAAQihC,WAAU,GAEnCD,EAAWxK,iBAAiB,IAAI7tC,OAAO86B,GAAqB,yBAAyBnwB,QAAQ,SAAUgjC,GACnGA,EAAK4K,UAAYxd,EACrC,GACgBqd,EAASC,EAAWE,WAAa,EACpC,MATGH,EAAS/gC,EAAQkhC,WAAa,GAUlC,OAAO1vC,EAAMsyB,uBAAuBid,EAAOliC,UAAU,EAAG,MAAMlP,QAAQ,OAAQ,KAAK2M,MAC/F,EAEQ7X,KAAK08C,iBAAmB,SAAUnhC,GAC9B,IAAItU,EACAqE,EAAIW,EACR,IAAKsP,EACD,MAAO,GAGX,IAAI86B,EAA8I,QAAvIpqC,EAAkF,QAA5EX,EAAKiQ,aAAyC,EAASA,EAAQ+6B,eAA4B,IAAPhrC,OAAgB,EAASA,EAAG0vB,mBAAgC,IAAP/uB,OAAgB,EAASA,EAAGtM,KAAK2L,GACvL3E,IAAcM,EAAK,CAAE,GAClBi0C,IAA8C7E,EACjDpvC,EAAGk0C,IAA+CpuC,EAAMutC,QAAQ/+B,GAChEtU,EAAGm0C,IAA2CjxC,OAAOuZ,SAAS4rB,KAAK33B,MAAM,KAAK,GAC9E1Q,GACJ,OAAO6vC,GAAsBnwC,EACzC,EACQ3G,KAAKka,kBAAoBP,aAAyC,EAASA,EAAQO,kBACnF,IAAIyiC,EAA+C,QAAhCrxC,EAAK2K,EAAQ2mC,qBAAkC,IAAPtxC,EAAgBA,EAAK,GAC5EuxC,EAAW,GACf,IACI,IAAK,IAAIC,EAAgBz5C,EAASs5C,GAAcI,EAAkBD,EAAch7C,QAASi7C,EAAgB96C,KAAM86C,EAAkBD,EAAch7C,OAAQ,CACnJ,IAAIk7C,EAAQD,EAAgBn7C,MAC5B,GAAIi7C,EAASj8C,QJrLO,GIsLhB,MAEJ,GAAIo8C,aAAiBhJ,OACjB6I,EAASz5C,KAAK45C,QAEb,GAAI,YAAaA,GAAkC,iBAAlBA,EAAMvd,QACxC,IACIod,EAASz5C,KAAK,IAAI4wC,OAAOgJ,EAAMvd,QAAS,KAC3C,CACD,MAAOxzB,GAEN,CAER,CACJ,CACD,MAAOzE,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQu1C,IAAoBA,EAAgB96C,OAASgF,EAAK61C,EAAcr1C,SAASR,EAAGtH,KAAKm9C,EACxF,CACO,QAAE,GAAI91C,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACD3D,KAAKs/B,2BAA6Bud,CACrC,EC1ODI,GAAiC,WACjC,SAASA,EAAgBh2C,GACrB,IAAkCgF,QAAlB,IAAPhF,EAAgB,CAAE,EAAGA,GAAY+lB,OAAQA,OAAgB,IAAP/gB,EAAgBmpC,GAAmBnpC,EAC1Fc,EAAQ/M,KACZA,KAAKk9C,SAAW9H,GAChBp1C,KAAKm9C,iBAAmB,GACxBn9C,KAAKo9C,SAAW,SAAUre,GACtBhyB,EAAMswC,OAAO,CAAE37B,OAAQ,mBAAoBqd,KAAMA,GAC7D,EACQ/+B,KAAKs9C,QAAU,SAAU/wC,EAAM5F,GACd,0BAAT4F,EACAQ,EAAMswC,OAAO,CAAE37B,OAAQ,8BAA+Bqd,KAAMp4B,IAE9C,mBAAT4F,GACLQ,EAAMswC,OAAO,CAAE37B,OAAQ,uBAAwBqd,KAAMp4B,GAErE,EACQ3G,KAAKk9C,SAAWlwB,CACnB,CAuHD,OAtHAiwB,EAAgBx9C,UAAU49C,OAAS,SAAUvzC,GACzC,IAAI7C,EAAIqE,EAAIW,EAAI8B,EAC4D,QAA3EzC,EAA4B,QAAtBrE,EAAKjH,KAAK+X,cAA2B,IAAP9Q,OAAgB,EAASA,EAAG8L,aAA0B,IAAPzH,GAAyBA,EAAG3L,KAAKsH,EAAI,iBAAkBmH,KAAKC,UAAUvE,IACtE,QAAnFiE,EAA8B,QAAxB9B,EAAK9B,OAAOozC,cAA2B,IAAPtxC,OAAgB,EAASA,EAAGuxC,mBAAgC,IAAPzvC,GAAyBA,EAAGpO,KAAKsM,EAAInC,EAAS9J,KAAKk9C,SACvJ,EAEID,EAAgBx9C,UAAUg+C,YAAc,SAAU/7B,EAAQzM,EAAMgB,GAC5D,IAAIlJ,EAAQ/M,UACI,IAAZiW,IAAsBA,EAAU,CAAEhJ,QAAS,OAE/C,IAAImnB,EJmJD,GAAGlwB,OAAOiV,KAAKiK,MAAO,KAAKlf,OAAO8G,KAAKC,SAASR,SAAS,IAAIizC,OAAO,EAAG,IIlJtE11B,EAAU,CACVoM,GAAIA,EACJ1S,OAAQA,EACRzM,KAAMA,GAeV,OAZc,IAAIzT,QAAQ,SAAUC,EAASC,GACzCqL,EAAMowC,iBAAiB/oB,GAAM,CAAE3yB,QAASA,EAASC,OAAQA,GAEzDqL,EAAMswC,OAAOr1B,IAER/R,aAAyC,EAASA,EAAQhJ,SAAW,GACtEC,WAAW,WACPxL,EAAO,IAAI2T,MAAM,GAAGnR,OAAOwd,EAAQ,oBAAoBxd,OAAOkwB,EAAI,cAC3DrnB,EAAMowC,iBAAiB/oB,EAClD,EAAmBne,EAAQhJ,QAE3B,EAEA,EAEIgwC,EAAgBx9C,UAAU4c,eAAiB,SAAU8W,GACjD,IAAIlsB,EACCjH,KAAKm9C,iBAAiBhqB,EAASiB,KAIpCp0B,KAAKm9C,iBAAiBhqB,EAASiB,IAAI3yB,QAAQ0xB,EAASwqB,qBAC7C39C,KAAKm9C,iBAAiBhqB,EAASiB,KAJX,QAAtBntB,EAAKjH,KAAK+X,cAA2B,IAAP9Q,GAAyBA,EAAGqF,KAAK,qCAAqCpI,OAAOivB,EAASiB,IAKjI,EACI6oB,EAAgBx9C,UAAU+M,MAAQ,SAAUvF,GACxC,IAAI8F,EAAQ/M,KACRsL,OAAY,IAAPrE,EAAgB,CAAE+xC,cAAe,IAAIK,GAAc,CAAA,IAAQpyC,EAAI8Q,EAASzM,EAAGyM,OAAQmlC,EAAW5xC,EAAG4xC,SAAUU,EAAsBtyC,EAAGsyC,oBAAqBC,EAAuBvyC,EAAGuyC,qBAAsBC,EAAuBxyC,EAAGwyC,qBAAsB9E,EAAgB1tC,EAAG0tC,cACrRh5C,KAAK+X,OAASA,EAEVmlC,GAAYl9C,KAAKk9C,WAAa9H,KAC9Bp1C,KAAKk9C,SAAWA,GAEpB,IAAIa,EAAyC,KAE7C5zC,OAAO+jB,iBAAiB,UAAW,SAAUtkB,GACzC,IAAI3C,EAAIqE,EAAIW,EAAI8B,EAAIC,EAGpB,GAF6E,QAA5E1C,EAA6B,QAAvBrE,EAAK8F,EAAMgL,cAA2B,IAAP9Q,OAAgB,EAASA,EAAG8L,aAA0B,IAAPzH,GAAyBA,EAAG3L,KAAKsH,EAAI,qBAAsBmH,KAAKC,UAAUzE,IAE3JmD,EAAMmwC,WAAatzC,EAAMojB,OAA7B,CAGA,IJwE2B9I,EIxEvB85B,EAAYp0C,aAAqC,EAASA,EAAMm1B,KAChErd,EAASs8B,aAA6C,EAASA,EAAUt8B,OAE7E,GAAKA,EAIL,GAAI,OAAQs8B,EACqE,QAA5EjwC,EAA6B,QAAvB9B,EAAKc,EAAMgL,cAA2B,IAAP9L,OAAgB,EAASA,EAAG8G,aAA0B,IAAPhF,GAAyBA,EAAGpO,KAAKsM,EAAI,0CAA2CmC,KAAKC,UAAUzE,IACpLmD,EAAMsP,eAAe2hC,QAIrB,GAAe,SAAXt8B,EACA3U,EAAMswC,OAAO,CAAE37B,OAAQ,cAEtB,GAAe,uCAAXA,EAAiD,CACtD,IAAIu8B,EAAeD,aAA6C,EAASA,EAAUjf,MJuDhE7a,ED9HmB,2EC+H/C,IAAI1iB,QAAQ,SAAUC,EAASC,GAClC,IAAIuF,EACJ,IACI,IAAIi3C,EAAgBh4B,SAASi4B,cAAc,UAC3CD,EAAc3xC,KAAO,kBACrB2xC,EAAcE,OAAQ,EACtBF,EAAcG,IAAMn6B,EACpBg6B,EAAchwB,iBAAiB,OAAQ,WACnCzsB,EAAQ,CAAE8a,QAAQ,GAClC,EAAe,CAAE+hC,MAAM,IACXJ,EAAchwB,iBAAiB,QAAS,WACpCxsB,EAAO,CACH6a,QAAQ,EACRzS,QAAS,6BAA6B5F,OAAOggB,IAEjE,GAEqC,QAAxBjd,EAAKif,SAASq4B,YAAyB,IAAPt3C,GAAyBA,EAAGu3C,YAAYN,EAC5E,CACD,MAAOv6C,GAEHjC,EAAOiC,EACV,CACT,II7EyBzB,KAAK,WACN,IAAI+E,EAEJ82C,EAA0I,QAAhG92C,EAAgB,OAAXkD,aAA8B,IAAXA,YAAoB,EAASA,OAAOs0C,sCAAmD,IAAPx3C,OAAgB,EAASA,EAAGtH,KAAKwK,OAAQ,CACvLuyC,iBAAkB1D,EAAc0D,iBAChCkB,oBAAqB,SAAUriC,GAC3B,OAAIqiC,GACOA,GAAqBK,aAAmD,EAASA,EAAarI,aAAe,QAASr6B,EAGpI,EACD+hC,QAASvwC,EAAMuwC,QACfF,SAAUrwC,EAAMqwC,SAChBsB,qBLnF0B,wCKoF1BC,UAAW5xC,EACX8wC,qBAAsBA,EACtBC,qBAAsBA,EACtB7E,0BAA2BD,EAAcC,0BACzCD,cAAeA,EACf4F,YAAa,CACT1Y,YAAa,CACTyG,QAASzE,OAIrBn7B,EAAMswC,OAAO,CAAE37B,OAAQ,mBAC/C,GACyBnT,MAAM,WACP,IAAItH,EACoB,QAAvBA,EAAK8F,EAAMgL,cAA2B,IAAP9Q,GAAyBA,EAAGqF,KAAK,+CACzF,EACiB,KACmB,kCAAXoV,IAEmK,QAAvK1T,EAAK+vC,aAAuG,EAASA,EAAuCz1B,aAA0B,IAAPta,GAAyBA,EAAGrO,KAAKo+C,GAtDxN,CAyDb,GAEQ/9C,KAAKq9C,OAAO,CAAE37B,OAAQ,eAC9B,EACWu7B,CACX,IChJO,ICaI4B,GDbAC,GAA2B,WAClC,OAAO,IAAInd,GAAW,SAAUc,GAC5B,IAAIsc,EAAmB,IAAItN,iBAAiB,SAAUC,GAClDjP,EAAS3gC,KAAK4vC,EAC1B,GASQ,OARIxrB,SAAS9jB,MACT28C,EAAiB/M,QAAQ9rB,SAAS9jB,KAAM,CACpC8vC,WAAW,EACXmG,YAAY,EACZ2G,eAAe,EACf/M,SAAS,IAGV,WAAc,OAAO8M,EAAiB3M,YAAa,CAClE,EACA,EAKW6M,GAAwB,SAAUC,GAEzC,YADkB,IAAdA,IAAwBA,EAAY,SACjC,IAAIvd,GAAW,SAAUc,GAC5B,IAAIx7B,EACA+pC,EAAU,SAAUpnC,GACpB64B,EAAS3gC,KAAK8H,EAC1B,EAGQ,OAD4B,QAA3B3C,EAAK+C,WAAqC,IAAP/C,GAAyBA,EAAGif,SAASgI,iBAAiBgxB,EAAWlO,EAAS,CAAE7iB,SAAS,IAClH,WACH,IAAIlnB,EAEwB,QAA3BA,EAAK+C,WAAqC,IAAP/C,GAAyBA,EAAGif,SAASmqB,oBAAoB6O,EAAWlO,EAAS,CAAE7iB,SAAS,GACxI,CACA,EACA,EEjCIgxB,GAA6B,CAC7B,8BAA+B,QAC/B,8BAA+B,UAIxBC,GAAkC,SAAUC,GACnD,IAAIr4C,EAAKC,EAAI6G,EAAKxC,EAEdg0C,EAAuBlgD,OAAOoT,OAAO2sC,IAA4B9jC,OAAO,SAAUuI,EAAK27B,GAEvF,OADA37B,EAAI27B,GAAgB,IAAI33C,IACjBgc,CACV,EAAE,CAAE,GAEL,IAAKy7B,EACD,OAAOC,EAEX,IAEI,IAAK,IAAIE,EAAkBn8C,EAASg8C,GAAgBI,EAAoBD,EAAgB19C,QAAS29C,EAAkBx9C,KAAMw9C,EAAoBD,EAAgB19C,OAAQ,CACjK,IAAI49C,EAAKD,EAAkB79C,MAC3B,IACI,IACI,IAAK,IAAIqK,GAAM6B,OAAM,EAAQzK,EAASq8C,EAAGC,aAAc5xC,EAAK9B,EAAGnK,QAASiM,EAAG9L,KAAM8L,EAAK9B,EAAGnK,OAAQ,CAC7F,IAAI89C,EAAM7xC,EAAGnM,MACT29C,EAAeJ,GAA2BS,EAAItwC,YAC9CiwC,GACAD,EAAqBC,GAAcz2C,IAAI42C,EAAGtrB,GAEjD,CACJ,CACD,MAAOzmB,GAASG,EAAM,CAAEnK,MAAOgK,EAAU,CACjC,QACJ,IACQI,IAAOA,EAAG9L,OAASqJ,EAAKW,EAAGxE,SAAS6D,EAAG3L,KAAKsM,EACnD,CACO,QAAE,GAAI6B,EAAK,MAAMA,EAAInK,KAAQ,CACxC,CACJ,CACD,MAAO5C,GAEHqU,QAAQ9I,KAAK,qDAAsDozC,aAA+B,EAASA,EAAGtrB,GAAIrzB,EACrH,CACJ,CACJ,CACD,MAAOyG,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQi4C,IAAsBA,EAAkBx9C,OAASgF,EAAKu4C,EAAgB/3C,SAASR,EAAGtH,KAAK6/C,EAC9F,CACO,QAAE,GAAIx4C,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACD,OAAO27C,CACX,EAEWO,GAAiC,SAAUC,GAClD,IAAIv+B,EAAKta,EAAI2zB,EAAKtvB,EACdy0C,EAA2B,IAAI16B,IACnC,IACI,IAAK,IAAI26B,EAAa38C,EAASy8C,GAAWG,EAAeD,EAAWl+C,QAASm+C,EAAah+C,KAAMg+C,EAAeD,EAAWl+C,OAAQ,CAC9H,IAAIo+C,EAAUD,EAAar+C,MAC3B,IACI,IAAK,IAAIqK,GAAM2uB,OAAM,EAAQv3B,EAAS68C,EAAQC,aAAcpyC,EAAK9B,EAAGnK,QAASiM,EAAG9L,KAAM8L,EAAK9B,EAAGnK,OAAQ,CAClG,IAAIs+C,EAAYryC,EAAGnM,MACnB,GAAuB,kBAAnBw+C,EAAU7zC,KAA0B,CACpC,IAAI8zC,EAAUD,EAAU/7B,MAAMg8B,QAE1BC,EAAmBP,EAAyBlpC,IAAIwpC,GAC/CC,IACDA,EAAmB,GACnBP,EAAyBh4C,IAAIs4C,EAASC,IAG1CA,EAAiBl9C,KAAK88C,EACzB,CACJ,CACJ,CACD,MAAOhlB,GAASN,EAAM,CAAEj3B,MAAOu3B,EAAU,CACjC,QACJ,IACQntB,IAAOA,EAAG9L,OAASqJ,EAAKW,EAAGxE,SAAS6D,EAAG3L,KAAKsM,EACnD,CACO,QAAE,GAAI2uB,EAAK,MAAMA,EAAIj3B,KAAQ,CACxC,CACJ,CACJ,CACD,MAAOqe,GAAST,EAAM,CAAE5d,MAAOqe,EAAU,CACjC,QACJ,IACQi+B,IAAiBA,EAAah+C,OAASgF,EAAK+4C,EAAWv4C,SAASR,EAAGtH,KAAKqgD,EAC/E,CACO,QAAE,GAAIz+B,EAAK,MAAMA,EAAI5d,KAAQ,CACxC,CACD,OAAOo8C,CACX,EAUWQ,GAA4B,SAAU32C,EAAOy1C,GACpD,OAAOA,EAAcnxC,OAAO,SAAUwxC,GAClC,OAAOA,EAAGC,WAAWzzC,KAAK,SAAU0zC,GAChC,OAAQT,GAA2BS,EAAItwC,cAAgB1F,EAAM2C,MACzDqzC,EAAIY,QAAQ/P,MAAM,SAAUviC,GAAU,OCzGtB,SAAUtE,EAAOsE,GAC7C,IACI,GAA2B,6BAAvBA,EAAOuyC,YAEP,MAA8B,OAAtBvyC,EAAOwyC,YACXxyC,EAAOyyC,cAAcp5C,SAASqC,EAAMuvC,wBAAwB,6BAE/D,GAA2B,kCAAvBjrC,EAAOuyC,YAEZ,MAA8B,wBAAtBvyC,EAAOwyC,cACT92C,EAAMytC,uBAAuB6E,QAAQhuC,EAAOyyC,cAAcl2C,WAEvE,CACD,MAAO9G,GAEH,OADAyR,QAAQzR,MAAM,iCAAkCA,IACzC,CACV,CACD,OAAO,CACX,CDuF6Di9C,CAAmBh3C,EAAOsE,EAAQ,EAC/F,EACA,EACA,EAkCI2yC,GAAkC,WAClC,SAASA,EAAiBvB,EAAsBS,EAA0B/G,EAAe/iC,GACrFjW,KAAKs/C,qBAAuBA,EAC5Bt/C,KAAK+/C,yBAA2BA,EAChC//C,KAAKg5C,cAAgBA,EACrBh5C,KAAKiW,QAAUA,CAClB,CAgCD,OA/BA4qC,EAAiBphD,UAAUqhD,SAAW,SAAUl3C,GAC5C,IAAIm3C,EAAK95C,EAEL+5C,EAAchhD,KAAKiW,QAAQ+qC,YAC/B,IAAKA,EACD,OAAOp3C,EAGX,IAEIq3C,EAlD8B,SAAU5B,EAAe6B,GAC/D,IAAIC,EAAKl6C,EAAIm6C,EAAK91C,EACd21C,EAAmB,IAAIr5C,IAC3B,IACI,IAAK,IAAIy5C,EAAkBh+C,EAASg8C,GAAgBiC,EAAoBD,EAAgBv/C,QAASw/C,EAAkBr/C,KAAMq/C,EAAoBD,EAAgBv/C,OAAQ,CACjK,IAAI49C,EAAK4B,EAAkB1/C,MACvBk+C,EAAWoB,EAAerqC,IAAI6oC,EAAGtrB,IACrC,GAAI0rB,EACA,IACI,IAAK,IAAIyB,GAAcH,OAAM,EAAQ/9C,EAASy8C,IAAY0B,EAAeD,EAAWz/C,QAAS0/C,EAAav/C,KAAMu/C,EAAeD,EAAWz/C,OAAQ,CAC9I,IAAIo+C,EAAUsB,EAAa5/C,MAC3Bq/C,EAAiBn4C,IAAIo3C,EACxB,CACJ,CACD,MAAOuB,GAASL,EAAM,CAAEz9C,MAAO89C,EAAU,CACjC,QACJ,IACQD,IAAiBA,EAAav/C,OAASqJ,EAAKi2C,EAAW95C,SAAS6D,EAAG3L,KAAK4hD,EAC/E,CACO,QAAE,GAAIH,EAAK,MAAMA,EAAIz9C,KAAQ,CACxC,CAER,CACJ,CACD,MAAO+9C,GAASP,EAAM,CAAEx9C,MAAO+9C,EAAU,CACjC,QACJ,IACQJ,IAAsBA,EAAkBr/C,OAASgF,EAAKo6C,EAAgB55C,SAASR,EAAGtH,KAAK0hD,EAC9F,CACO,QAAE,GAAIF,EAAK,MAAMA,EAAIx9C,KAAQ,CACxC,CACD,OAAOpE,MAAMuE,KAAKm9C,EACtB,CAkB+BU,CAFKpB,GAA0B32C,EAAOrK,MAAMuE,KAAK9D,KAAKs/C,qBAAqB11C,EAAM2C,OAAOhC,IAAI,SAAU6pB,GAAM,OAAO4sB,EAAY3B,cAAcjrB,EAAM,IAE/Fp0B,KAAK+/C,0BAChF,IACI,IAAK,IAAI6B,EAAqBv+C,EAAS49C,GAAmBY,EAAuBD,EAAmB9/C,QAAS+/C,EAAqB5/C,KAAM4/C,EAAuBD,EAAmB9/C,OAAQ,CACtL,IAAIo+C,EAAU2B,EAAqBjgD,MACnCk3C,GAAeoH,EAAQ5+B,QAAS1X,EAAO5J,KAAKg5C,cAC/C,CACJ,CACD,MAAO8I,GAASf,EAAM,CAAEp9C,MAAOm+C,EAAU,CACjC,QACJ,IACQD,IAAyBA,EAAqB5/C,OAASgF,EAAK26C,EAAmBn6C,SAASR,EAAGtH,KAAKiiD,EACvG,CACO,QAAE,GAAIb,EAAK,MAAMA,EAAIp9C,KAAQ,CACxC,CACD,OAAOiG,CACf,EACIi3C,EAAiBphD,UAAUsiD,OAAS,SAAUzC,EAAsBS,EAA0B9pC,GAC1FjW,KAAKs/C,qBAAuBA,EAC5Bt/C,KAAK+/C,yBAA2BA,EAChC//C,KAAKiW,QAAUA,CACvB,EACW4qC,CACX,KD5KA,SAAWhC,GACPA,EAAiC,gBAAI,kBACrCA,EAAkC,iBAAI,mBAEtCA,EAAoC,mBAAI,qBACxCA,EAAoC,mBAAI,oBAC3C,CAND,CAMGA,KAAoBA,GAAkB,CAAE,IACpC,IAAImD,GAAoB,SAAU/rC,EAAS0D,GAC9C,IAAI1S,EAAIqE,EAAIW,EAAI8B,EAAIC,EAAIyT,EAAIE,EAAIC,OAChB,IAAZ3L,IAAsBA,EAAU,CAAE,GAGtC0D,SAAkDA,EAAQO,kBAAkB2U,OAAO,6BAA8BqZ,IACjH,IAAIrmB,EAAK5L,EAAQskC,oBAAqBA,OAA6B,IAAP14B,EAAgB0U,GAAgC1U,EAAIC,EAAK7L,EAAQgsC,qBAAsBA,OAA8B,IAAPngC,EAAgB,CACtLgM,SAAS,EACT6wB,UAAW,IAAI1B,IACfn7B,EACJ7L,EAAQ4nC,qBAA+D,QAAvC52C,EAAKgP,EAAQ4nC,4BAAyC,IAAP52C,EAAgBA,EAAKqvB,GACpGrgB,EAAQ6nC,qBAA+D,QAAvCxyC,EAAK2K,EAAQ6nC,4BAAyC,IAAPxyC,EAAgBA,EAAKkrB,GACpGvgB,EAAQisC,aAA+C,QAA/Bj2C,EAAKgK,EAAQisC,oBAAiC,IAAPj2C,EAAgBA,EAAK,EACpFgK,EAAQkgC,mBAA2D,QAArCpoC,EAAKkI,EAAQkgC,0BAAuC,IAAPpoC,OAAgB,EAASA,EAAGsN,OAAO,SAAUuI,EAAKu+B,GAOzH,GAN8B,iBAAnBA,GACPv+B,EAAIxgB,KAAK++C,GAETA,aAA0BnO,QAC1BpwB,EAAIxgB,KAAK++C,GAEiB,iBAAnBA,GAAkD,OAAnBA,GAA2B,YAAaA,EAC9E,IACIv+B,EAAIxgB,KAAK,IAAI4wC,OAAOmO,EAAe1iB,SACtC,CACD,MAAOwU,GAEH,OADA7+B,QAAQ9I,KAAK,0BAA0BpI,OAAOi+C,EAAe1iB,SAAUwU,GAChErwB,CACV,CAEL,OAAOA,CACV,EAAE,IACH,IAAIxX,EPrDiB,wCOuDjB+3B,EAAgB,GAEhB6U,EAAgB,IAAIK,GAAcpjC,EAAS0D,GAiD3C2lC,EAAuBF,GAAgChgD,OAAOoT,OAAmG,QAA3FiP,EAAoC,QAA9BzT,EAAKiI,EAAQ+qC,mBAAgC,IAAPhzC,OAAgB,EAASA,EAAGqxC,qBAAkC,IAAP59B,EAAgBA,EAAK,CAAA,IAC9Ls+B,EAA2BF,GAAsH,QAAtFj+B,EAAoC,QAA9BD,EAAK1L,EAAQ+qC,mBAAgC,IAAPr/B,OAAgB,EAASA,EAAGm+B,gBAA6B,IAAPl+B,EAAgBA,EAAK,IAE9KwgC,ECgF4B,SAAU9C,EAAsBS,EAA0B/G,EAAe/iC,GACzG,OAAO,IAAI4qC,GAAiBvB,EAAsBS,EAA0B/G,EAAe/iC,EAC/F,CDlF2BosC,CAAuB/C,EAAsBS,EAA0B/G,EAAe/iC,GAgH7G,MAAO,CACH7J,KAAMA,EACNG,KAzKO,aA0KPC,MArGQ,SAAUR,EAAQijC,GAAa,OAAO9tC,OAAU,OAAQ,OAAQ,EAAQ,WAChF,IAAImhD,EAAkBC,EAAwBC,EAAgBC,EAA2BC,EAAoBC,EAAyBx+B,EAAW25B,EAC7I72C,EAAIqE,EACR,OAAOnJ,EAAYnC,KAAM,SAAUiM,GAE/B,MAAwB,oBAAbia,WAIPla,EAAOmgC,oBACFngC,EAAO42C,mBAKR52C,EAAO42C,mBAAmB1uB,UAAU,2BAA4B,MAAO,SAAUT,IA3BlE,SAAUovB,GACrC,IAAI57C,EAAIqE,EACJu3C,IAEA5sC,EAAQ+qC,YAAc3gD,EAASA,EAAS,CAAE,EAAE4V,EAAQ+qC,aAAc6B,GAElEvD,EAAuBF,GAAgChgD,OAAOoT,OAAoD,QAA5CvL,EAAKgP,EAAQ+qC,YAAY3B,qBAAkC,IAAPp4C,EAAgBA,EAAK,CAAE,IACjJ84C,EAA2BF,GAAuE,QAAvCv0C,EAAK2K,EAAQ+qC,YAAYlB,gBAA6B,IAAPx0C,EAAgBA,EAAK,IAE/H82C,EAAiBL,OAAOzC,EAAsBS,EAA0B9pC,GAEpF,CAiBwB6sC,CAAyBrvB,EACjD,GALoBznB,EAAOK,eAAe0G,MAAM,uEAQpCuvC,EAAmBtM,GAAuB//B,EAASA,EAAQ4nC,sBAC3D0E,EAAyBvM,GAAuB//B,EAASA,EAAQ6nC,sBACjE0E,EAtFgB,WACpB,IAAIv7C,EAoBA87C,EAnBAC,EAAkBzd,GAAU0Z,KAAwB10C,IAAI,SAAU04C,GAClE,OAAOjK,EAAcwC,6BAA6ByH,EAAO,QAAShtC,EAAQ4nC,qBAAsBtD,EACnG,IACG2I,EAAmB3d,GAAU,IAAI5D,GAAW,SAAUc,GACtD,IAAIx7B,EACA+pC,EAAU,SAAUmS,GACpB,IAAIC,EAAsBpK,EAAcwC,6BAA6B2H,EAAa,SAAUltC,EAAQ4nC,qBAAsBtD,GAC1H9X,EAAS3gC,KAAKshD,EAC9B,EAIY,OAF4B,QAA3Bn8C,EAAK+C,WAAqC,IAAP/C,GAAyBA,EAAGif,SAASgI,iBAAiB,SAAU8iB,EAAS,CAAE7iB,SAAS,IAEjH,WAAc,IAAIlnB,EAAI,OAAmC,QAA3BA,EAAK+C,WAAqC,IAAP/C,OAAgB,EAASA,EAAGif,SAASmqB,oBAAoB,SAAUW,GAC9I,IAQG7mC,OAAOk5C,aACPN,EAAqBxd,GAAU,IAAI5D,GAAW,SAAUc,GACpD,IAAIuO,EAAU,SAAUsS,GACpB,IAAIC,EAAwBvK,EAAcwC,6BAA6B8H,EAAe,WAAYrtC,EAAQ4nC,qBAAsBtD,GAChI9X,EAAS3gC,KAAKyhD,EAClC,EAEgB,OADAp5C,OAAOk5C,WAAWn1B,iBAAiB,WAAY8iB,GACxC,WACH7mC,OAAOk5C,WAAWhT,oBAAoB,WAAYW,EACtE,CACa,KAEL,IAAIwS,EAAqBje,GAAUuZ,KAA2Bv0C,IAAI,SAAUonC,GACxE,OAAOqH,EAAcwC,6BAA6B7J,EAAU,WAAY17B,EAAQ4nC,qBAAsBtD,EACzG,IACD,OAAOtzC,EAAK,CAAE,GACP43C,GAAgB4E,kBAAoBP,EAEvCj8C,EAAG43C,GAAgB6E,iBAAmBV,EACtC/7C,EAAG43C,GAAgB8E,oBAAsBH,EACzCv8C,EAAG43C,GAAgB+E,oBAAsBb,EACzC97C,CACZ,CAyC6B48C,GACjBpB,EGhJL,SAAqBx7C,GACxB,IAAIgoC,EAAYhoC,EAAGgoC,UAAWuT,EAAiBv7C,EAAGu7C,eAAgBF,EAAmBr7C,EAAGq7C,iBAAkBF,EAAmBn7C,EAAGm7C,iBAUhI,OATsBI,EAAeQ,gBAEhC90C,OAAOkpC,IACPlpC,OAAO,SAAU+0C,GAElB,OAAOX,EAAiB,QAASW,EAAM5L,uBAC/C,GACS9sC,IAAI,SAAU04C,GAAS,OAAOb,EAAiBa,EAAO,GAE7C/uB,UAAU,SAAU+uB,GAE9BhU,SAAsDA,EAAU/+B,MAAM8kC,GAAiCiO,EAAM9J,wBACrH,EACA,CHiIwC2K,CAAY,CACpCtB,eAAgBA,EAChBvT,UAAWA,EACXqT,iBAAkBA,EAClBF,iBAAkBA,EAAiBtB,SAAS3wC,KAAKiyC,KAErDje,EAAc/gC,KAAKq/C,GACnBC,EIvJL,SAAqBz7C,GACxB,IAAIgoC,EAAYhoC,EAAGgoC,UAAWuT,EAAiBv7C,EAAGu7C,eAAgB3wC,EAAqB5K,EAAG4K,mBAAoBywC,EAAmBr7C,EAAGq7C,iBAAkBF,EAAmBn7C,EAAGm7C,iBAS5K,OARuBI,EAAeU,iBAEjCh1C,OAAOkpC,IACPlpC,OAAO,SAAUi1C,GAElB,OAAOb,EAAiB,SAAUa,EAAY9L,uBACtD,GACS9sC,IAAI,SAAU44C,GAAe,OAAOf,EAAiBe,EAAa,GACvCjvB,UAAU,SAAUivB,GAEhDlU,SAAsDA,EAAU/+B,MXT3B,8BWSkE2B,EAAmB,SAAUsxC,EAAY9L,wBACxJ,EACA,CJyIiC0M,CAAY,CAC7BvB,eAAgBA,EAChB3wC,mBAAoB,WAEhB,IADA,IAAIoD,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAEzB,OAAO8jC,EAAcnnC,mBAAmBhR,MAAMm4C,EAAep1C,EAAcA,EAAc,GAAIJ,EAAOyR,IAAO,GAAQ,CAACslC,IAAsB,GAC7I,EACDtL,UAAWA,EACXqT,iBAAkBA,EAClBF,iBAAkBA,EAAiBtB,SAAS3wC,KAAKiyC,KAErDje,EAAc/gC,KAAKs/C,GACnBC,EKpKL,SAA0B17C,GAC7B,IAAIgoC,EAAYhoC,EAAGgoC,UAAWuT,EAAiBv7C,EAAGu7C,eAAgBvsC,EAAUhP,EAAGgP,QAASpE,EAAqB5K,EAAG4K,mBAAoBywC,EAAmBr7C,EAAGq7C,iBAAkBC,EAAyBt7C,EAAGs7C,uBACpMS,EAAkBR,EAAeQ,gBAAiBQ,EAAqBhB,EAAegB,mBAAoBT,EAAqBP,EAAeO,mBAC9IiB,EAA0BhB,EACzB90C,OAAO,SAAU+0C,GAClB,OAAQX,EAAiB,QAASW,EAAM5L,uBAChD,GACS9sC,IAAI,SAAU04C,GAEf,IAAIgB,EAAuBhN,GAAkBgM,EAAMr5C,MAAM4e,OAAQvS,EAAQ6nC,sBAMzE,OALAmF,EAAM5L,uBAAyB4M,EAEM,OAAjChB,EAAM5L,yBACN4L,EAAM9J,wBAA0BtnC,EAAmBoxC,EAAM12C,KAAM02C,EAAM5L,yBAElE4L,CACf,GACS/0C,OAAOkpC,IACPlpC,OAAO,SAAUg2C,GAElB,OAAO3B,EAAuB,QAAS2B,EAAW7M,uBAC1D,GACQ8M,EAAqBpB,EAAqB/d,GAAMwe,EAAoBT,GAAsBS,EAC1FY,EAAkCpf,GAAMgf,EAAyBG,GACjEE,EAAmB,KACnBC,EAAiB,KA2BrB,OA1B4Bxf,GAASsf,EAAiC,SAAUx6C,GAM5E,GAJIy6C,IACAxpC,aAAawpC,GACbA,EAAmB,MAEJ,UAAfz6C,EAAM2C,KAQN,OANA+3C,EAAiB16C,EAEjBy6C,EAAmBn3C,WAAW,WAC1Bm3C,EAAmB,KACnBC,EAAiB,IACpB,EAAE,KACI9iD,QAAQC,QAAQ,MAIvB,GAAI6iD,EAAgB,CAChB,IAAIC,EAAUD,EAEd,OADAA,EAAiB,KACV9iD,QAAQC,QAAQ8iD,EAC1B,CAEL,OAAO/iD,QAAQC,QAAQ,KAC/B,GACiCyyB,UAAU,SAAUswB,GACxCA,IAGLvV,SAAsDA,EAAU/+B,MAAM8kC,GAAiCnjC,EAAmB,QAAS2yC,EAAYnN,yBACvJ,EACA,CL0GsCoN,CAAiB,CACvCjC,eAAgBA,EAChBvsC,QAASA,EACTpE,mBAAoB,WAEhB,IADA,IAAIoD,EAAO,GACFC,EAAK,EAAGA,EAAKvU,UAAUC,OAAQsU,IACpCD,EAAKC,GAAMvU,UAAUuU,GAEzB,OAAO8jC,EAAcnnC,mBAAmBhR,MAAMm4C,EAAep1C,EAAcA,EAAc,GAAIJ,EAAOyR,IAAO,GAAQ,CAACslC,IAAsB,GAC7I,EACDtL,UAAWA,EACXqT,iBAAkBA,EAClBC,uBAAwBA,IAExBI,GACAxe,EAAc/gC,KAAKu/C,GAG0D,QAAhF17C,EAAK+E,aAAuC,EAASA,EAAOK,sBAAmC,IAAPpF,GAAyBA,EAAGgH,IAAI,GAAG/J,OAAOkI,EAAM,kCAErIjC,OAAOozC,QAAU0E,EAAqBn0B,UACtC3J,EAAYlO,EAAQ4nC,qBACpBC,EAAuB7nC,EAAQ6nC,qBAEW,QAAzCxyC,EAAK22C,EAAqBtD,iBAA8B,IAAPrzC,GAAyBA,EAAGkB,MAAMnM,EAASA,EAAS,CAAE24C,cAAeA,EAAejhC,OAAQ/L,aAAuC,EAASA,EAAOK,iBAAoBL,aAAuC,EAASA,EAAO8J,aAAe,CAAEonC,SAAUwH,GAAgC14C,EAAO8J,cAAiB,CAAE8nC,oBAAqB5H,GAAuB//B,EAASrS,EAAcA,EAAc,GAAIJ,EAAO2gB,IAAY,GAAQ3gB,EAAOs6C,IAAuB,IAASD,qBAAsB15B,EAAW25B,qBAAsBA,OA9D5iB,CAAC,EAiExB,EACK,EAAE,EA8BC3vC,QA7BU,SAAUvE,GAAS,OAAOzI,OAAU,OAAQ,OAAQ,EAAQ,WACtE,OAAOgB,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,EAAc2C,EAClC,EACK,EAAE,EA0BCiD,SAzBW,WAAc,OAAO1L,OAAU,OAAQ,OAAQ,EAAQ,WAClE,IAAIgkC,EAAiBC,EACjBp+B,EAAKC,EACT,OAAO9E,EAAYnC,KAAM,SAAUsL,GAC/B,IACI,IAAK65B,EAAkB9hC,EAAS8gC,GAAgBiB,EAAoBD,EAAgBrjC,QAASsjC,EAAkBnjC,KAAMmjC,EAAoBD,EAAgBrjC,OACtIsjC,EAAkBxjC,MACpB4yB,aAEpB,CACD,MAAOhtB,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQ49B,IAAsBA,EAAkBnjC,OAASgF,EAAKk+B,EAAgB19B,SAASR,EAAGtH,KAAKwlC,EAC9F,CACO,QAAE,GAAIn+B,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACD,MAAO,CAAC,EACpB,EACK,EAAE,EAQP,EM/NIghD,GAAgB,CAAC,WAAY,YCCjC,SAASC,GAAeC,EAAW5B,GAC/B,IAAIh8C,EAAIqE,EAAIW,EAAI8B,EACZC,EAAKi1C,EAAMr5C,MAAOk7C,EAAU92C,EAAG82C,QAASC,EAAU/2C,EAAG+2C,QACzDF,EAAUG,KAAOh6C,KAAK4f,IAA8B,QAAzB3jB,EAAK49C,EAAUG,YAAyB,IAAP/9C,EAAgBA,EAAK89C,EAASA,GAC1FF,EAAUI,KAAOj6C,KAAKoQ,IAA8B,QAAzB9P,EAAKu5C,EAAUI,YAAyB,IAAP35C,EAAgBA,EAAKy5C,EAASA,GAC1FF,EAAUK,KAAOl6C,KAAK4f,IAA8B,QAAzB3e,EAAK44C,EAAUK,YAAyB,IAAPj5C,EAAgBA,EAAK64C,EAASA,GAC1FD,EAAUM,KAAOn6C,KAAKoQ,IAA8B,QAAzBrN,EAAK82C,EAAUM,YAAyB,IAAPp3C,EAAgBA,EAAK+2C,EAASA,GAC1FD,EAAUO,cACNP,EAAUI,KAAOJ,EAAUG,K1C6BqB,I0C5B5CH,EAAUM,KAAON,EAAUK,K1C4BiB,E0C3BxD,CACA,SAASG,GAA2BC,GAEhC,GAA2B,IAAvBA,EAAY1kD,OACZ,OAAO,KAEX,IAAI2kD,EAAaD,EAAY,GACzBE,EAAYF,EAAYA,EAAY1kD,OAAS,GAMjD,MAAO,CAAE6kD,eALYplD,EAAS,CAAE,yBAA0B,IAAI8Y,KAAKosC,EAAW5gC,WAAWvL,cAAe,uBAAwB,IAAID,KAAKqsC,EAAU7gC,WAAWvL,cAAe,uBAAwBosC,EAAU7gC,UAAY4gC,EAAW5gC,UAAW,qBAAsB2gC,EAAY/6C,IAAI,SAAU04C,GAAS,MAAQ,CAC1SyC,EAAGzC,EAAMr5C,MAAMk7C,QACfa,EAAG1C,EAAMr5C,MAAMm7C,QACfa,KAAM3C,EAAMt+B,UACb,GAAK,0BAA2B2gC,EAAY1kD,QAAU2kD,EAAWpM,yBAC/BlgC,KAAMssC,EAAW5gC,UAC9D,CAUO,SAASkhC,GAAgB5+C,GAC5B,IAAI8F,EAAQ/M,KACRivC,EAAYhoC,EAAGgoC,UAAWuT,EAAiBv7C,EAAGu7C,eAAgBsD,EAAuB7+C,EAAG6+C,qBACxF9C,EAAkBR,EAAeQ,gBAEjCsC,EAAc,GAEdS,EAAmB,CAAA,EACnBC,EAAmB,KA0DvB,OAhD0BlhB,GAASke,EAAgB90C,OAAO,SAAU+0C,GAAS,OAAO6C,EAAqB,QAAS7C,EAAM5L,uBAA0B,GAAG,SAAU4L,GAAS,OAAO9hD,EAAU4L,OAAO,OAAQ,EAAQ,WAC5M,IAAIk5C,EACJ,OAAO9jD,EAAYnC,KAAM,SAAUiH,GAiC/B,OA/BA29C,GAAemB,EAAkB9C,GACjCgD,EAAkB,KAOS,IAAvBX,EAAY1kD,QAlC5B,SAAsB0kD,EAAarC,GAC/B,OAAQqC,EAAY1kD,OAAS,GACzB0kD,EAAYA,EAAY1kD,OAAS,GAAGy2C,yBAA2B4L,EAAM5L,sBAC7E,CAgCgB6O,CAAaZ,EAAarC,IAxC1C,SAAuCqC,EAAarC,GAChD,IACIsC,EAAaD,EADAt6C,KAAKoQ,IAAI,EAAGkqC,EAAY1kD,O1COH,E0CPmC,IAEzE,OAAOqiD,EAAMt+B,UAAY4gC,EAAW5gC,W1CCE,G0CA1C,CAqCgBwhC,CAA8Bb,EAAarC,IAC3C8C,EAAiBX,eAEbY,IACAC,EAAkBZ,GAA2BC,IA1B7D,SAA0BrC,GACtBqC,EAAc,GACdS,EAAmB,CAAA,EACf9C,IACA2B,GAAemB,EAAkB9C,GACjCqC,EAAYliD,KAAK6/C,GAExB,CAqBWmD,CAAiBnD,IAGjBqC,EAAYliD,KAAK6/C,GAGjB+C,IAEAnrC,aAAamrC,EAAiBK,SAC9BL,EAAiBvkD,QAAQwkD,GACzBD,EAAmB,MAKnBV,EAAY1kD,Q1CtDc,E0CuDnB,CAAC,EAAc,IAAIY,QAAQ,SAAUC,GACpCukD,EAAmB,CACfvkD,QAASA,EACT4kD,QAASn5C,WAAW,WAChBzL,EAAQ4jD,GAA2BC,GACtC,E1ChEa,K0CkErB,IAEF,CAAC,EAAc,KAClC,EACA,EAAS,GACsBpxB,UAAU,SAAU6K,GAE9B,OAATA,GAGJkQ,EAAU/+B,Md3GgC,yBc2GY6uB,EAAK0mB,eAAgB,CAAExsC,KAAM8lB,EAAK9lB,MAChG,EACA,CCvGO,ICJI4lC,GAIP5c,GDAOqkB,GAAoB,SAAUrwC,GACrC,IAAIhP,EAAIqE,EAAIW,EAAI8B,EAAIC,OACJ,IAAZiI,IAAsBA,EAAU,CAAE,GACtC,IAAI7J,EfZ6B,wCec7B+3B,EAAgB,GAChBoiB,EAAqH,QAAjGj7C,EAAmC,QAA7BrE,EAAKgP,EAAQw9B,kBAA+B,IAAPxsC,OAAgB,EAASA,EAAG42C,4BAAyC,IAAPvyC,EAAgBA,EAAKorB,GAClJ8vB,EAAqH,QAAjGz4C,EAAmC,QAA7B9B,EAAKgK,EAAQ09B,kBAA+B,IAAP1nC,OAAgB,EAASA,EAAG4xC,4BAAyC,IAAP9vC,EAAgBA,EAAK0oB,GAClJ8jB,EAA6D,QAAtCvsC,EAAKiI,EAAQskC,2BAAwC,IAAPvsC,EAAgBA,EAAKuoB,GAC1FyiB,EAAgB,IAAIK,GAAcpjC,GAElCwwC,EAAuB7iD,EAAc,GAAIJ,EAAO,IAAIoE,IAAIhE,EAAcA,EAAc,GAAIJ,EAAO+iD,IAAmB,GAAQ/iD,EAAOgjD,IAAmB,MAAU,GAuFlK,MAAO,CACHp6C,KAAMA,EACNG,KAhGO,aAiGPC,MA3DQ,SAAUR,EAAQijC,GAAa,OAAO9tC,OAAU,OAAQ,OAAQ,EAAQ,WAChF,IAAI2kD,EAAsBY,EAAsBlE,EAAgBmE,EAAuBC,EACnF3/C,EACJ,OAAO9E,EAAYnC,KAAM,SAAUsL,GAE/B,MAAwB,oBAAb4a,WAGX4/B,EAAuB9P,GAAuB//B,EAASswC,GACvDG,EAAuB1Q,GAAuB//B,EAASuwC,GACvDhE,EAvCgB,WACpB,IAAIv7C,EAOA4/C,EANA7D,EAAkBzd,GAAU0Z,GAAsB,eAAe10C,IAAI,SAAU04C,GAC/E,OAAOjK,EAAcwC,6BAA6ByH,EAAO,QAASwD,EAAsBlM,GAAqB,EAChH,IACGuM,EAA6BvhB,GAAUuZ,KAA2Bv0C,IAAI,SAAUonC,GAChF,OAAOqH,EAAcwC,6BAA6B7J,EAAU,WAAY8U,EAAsBlM,EACjG,IAgBD,OAdIpwC,OAAOk5C,aAUPwD,EAA6BthB,GATJ,IAAI5D,GAAW,SAAUc,GAC9C,IAAIuO,EAAU,SAAUpnC,GACpB64B,EAAS3gC,KAAKzB,EAASA,EAAS,CAAE,EAAEuJ,GAAQ,CAAE2C,KAAM,aACxE,EAEgB,OADApC,OAAOk5C,WAAWn1B,iBAAiB,WAAY8iB,GACxC,WACH7mC,OAAOk5C,WAAWhT,oBAAoB,WAAYW,EACtE,CACA,GACsEzmC,IAAI,SAAUw8C,GACpE,OAAO/N,EAAcwC,6BAA6BuL,EAAU,WAAYN,EAAsBlM,EACjG,MAEEtzC,EAAK,CAAE,GACP43C,GAAgB6E,iBAAmBV,EACtC/7C,EAAG43C,GAAgB8E,oBAAsBmD,EACzC7/C,EAAG43C,GAAgB+E,oBAAsBiD,EACzC5/C,CACZ,CAW6B48C,GACjB8C,EAAwBd,GAAgB,CACpCrD,eAAgBA,EAChBvT,UAAWA,EACX6W,qBAAsBA,IAE1B3hB,EAAc/gC,KAAKujD,GACnBC,EF/DL,SAAwB3/C,GAC3B,IAAIgoC,EAAYhoC,EAAGgoC,UAAWuT,EAAiBv7C,EAAGu7C,eAAgB3wC,EAAqB5K,EAAG4K,mBAAoB60C,EAAuBz/C,EAAGy/C,qBACpI1D,EAAkBR,EAAeQ,gBAAiBQ,EAAqBhB,EAAegB,mBAAoBT,EAAqBP,EAAeO,mBAC9IiB,EAA0BhB,EAAgB90C,OAAO,SAAU+0C,GAC3D,OAAQ7L,GAA4B6L,IAChCyD,EAAqB,QAASzD,EAAM5L,yBACpC4L,EAAMr5C,MAAM4e,kBAAkBw+B,SACuB,OAArD/D,EAAMr5C,MAAM4e,OAAO0zB,QAAQ,qBACvC,GAEQ+K,EAAoBlE,EAAqB/d,GAAMwe,EAAoBT,GAAsBS,EACzF0D,EAA4BliB,GAAMgf,EAAyBiD,GAC3DE,EAAiB,KAyBrB,OAxB0BriB,GAASoiB,EAA2B,SAAUt9C,GACpE,OAAIu9C,GAAkBxC,GAAcp9C,SAASqC,EAAM2C,OAE/CsO,aAAassC,GACbA,EAAiB,KACV3lD,QAAQC,QAAQ,OAEH,UAAfmI,EAAM2C,KAIP46C,EACO3lD,QAAQC,QAAQ,MAEpB,IAAID,QAAQ,SAAUC,GACzB0lD,EAAiBj6C,WAAW,WACxBzL,EAAQmI,GACRu9C,EAAiB,IACpB,EAjCQ,IAkCzB,GAGe3lD,QAAQC,QAAQ,KAC/B,GAC+ByyB,UAAU,SAAUswB,GAC3C,GAAKA,EAAL,CAEA,IAAI4C,EAAiB,CACjB,gBAAiB5C,EAAY56C,MAAMk7C,QACnC,gBAAiBN,EAAY56C,MAAMm7C,SAEvC9V,EAAU/+B,Mb/CgC,yBa+CY7P,EAASA,EAAS,CAAA,EAAIwR,EAAmB,QAAS2yC,EAAYnN,yBAA0B+P,GAAiB,CAAEnuC,KAAMurC,EAAY7/B,WALxK,CAMnB,EACA,CEiBoC0iC,CAAe,CACnCpY,UAAWA,EACXuT,eAAgBA,EAChB3wC,mBAAoB,SAAU+jC,EAAYr6B,GACtC,OAAOy9B,EAAcnnC,mBAAmB+jC,EAAYr6B,EAASg/B,EAChE,EACDmM,qBAAsBA,IAE1BviB,EAAc/gC,KAAKwjD,GAE8D,QAAhF3/C,EAAK+E,aAAuC,EAASA,EAAOK,sBAAmC,IAAPpF,GAAyBA,EAAGgH,IAAI,GAAG/J,OAAOkI,EAAM,mCArB9H,CAAC,EAuBxB,EACK,EAAE,EA8BC+B,QA7BU,SAAUvE,GAAS,OAAOzI,OAAU,OAAQ,OAAQ,EAAQ,WACtE,OAAOgB,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,EAAc2C,EAClC,EACK,EAAE,EA0BCiD,SAzBW,WAAc,OAAO1L,OAAU,OAAQ,OAAQ,EAAQ,WAClE,IAAIgkC,EAAiBC,EACjBp+B,EAAKC,EACT,OAAO9E,EAAYnC,KAAM,SAAUsL,GAC/B,IACI,IAAK65B,EAAkB9hC,EAAS8gC,GAAgBiB,EAAoBD,EAAgBrjC,QAASsjC,EAAkBnjC,KAAMmjC,EAAoBD,EAAgBrjC,OACtIsjC,EAAkBxjC,MACpB4yB,aAEpB,CACD,MAAOhtB,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQ49B,IAAsBA,EAAkBnjC,OAASgF,EAAKk+B,EAAgB19B,SAASR,EAAGtH,KAAKwlC,EAC9F,CACO,QAAE,GAAIn+B,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACD,MAAO,CAAC,EACpB,EACK,EAAE,EAQP,EElHW2jD,GAAkC,8BCEzCC,GAA4B,UAChC,SAASC,GAAc1iC,EAAK2a,GAExB,IAEIgoB,EAAe,IAFEhoB,EAAQv0B,QAAQ,0BAA2B,QAExBA,QAAQ,MAAO,MAAQ,IAE/D,OADY,IAAI8oC,OAAOyT,GACVpnB,KAAKvb,EACtB,CACA,SAAS4iC,GAAoBprC,EAAYqrC,GACrC,IAAI3gD,EAAKC,EACL2gD,EAASD,EAAMhwC,MAAM,KACzB,IACI,IAAK,IAAIkwC,EAAWxkD,EAASukD,GAASE,EAAaD,EAAS/lD,QAASgmD,EAAW7lD,KAAM6lD,EAAaD,EAAS/lD,OAAQ,CAChH,IACIwJ,EAAK9H,EADDskD,EAAWlmD,MACD+V,MAAM,KAAKpN,IAAIwjC,QAAS,GAAI70B,EAAQ5N,EAAG,GAAIiO,EAAMjO,EAAG,GACtE,GAAIgR,IAAepD,QAAiB7T,IAARkU,EACxB,OAAO,EAEX,GAAI+C,GAAcpD,GAASoD,GAAc/C,EACrC,OAAO,CAEd,CACJ,CACD,MAAO/R,GAASR,EAAM,CAAErD,MAAO6D,EAAU,CACjC,QACJ,IACQsgD,IAAeA,EAAW7lD,OAASgF,EAAK4gD,EAASpgD,SAASR,EAAGtH,KAAKkoD,EACzE,CACO,QAAE,GAAI7gD,EAAK,MAAMA,EAAIrD,KAAQ,CACxC,CACD,OAAO,CACX,CAyBA,SAASokD,GAAS7jC,GACd,IAAIjd,EACJ,GAAKid,EAGL,IAEI,IAAI8jC,EAA0C,QAA3B/gD,EAAK+C,WAAqC,IAAP/C,OAAgB,EAASA,EAAGyc,SAAS4rB,KACvF2Y,EAAS,IAAIl7B,IAAI7I,EAAK8jC,GACtBlkC,EAAQmkC,EAAOC,aAAaz9C,WAC5B09C,EAAWF,EAAOljC,KAAK7Z,QAAQ,IAAK,IACpCokC,EAAO2Y,EAAO3Y,KACdhS,EAAO2qB,EAAO3qB,KAIlB,OAHA2qB,EAAOljC,KAAO,GACdkjC,EAAOtkC,OAAS,GAET,CAAEG,MAAOA,EAAOqkC,SAAUA,EAAU7Y,KAAMA,EAAM8Y,uBAD1BH,EAAO3Y,KACmEhS,KAAMA,EAChH,CACD,MAAOv8B,GAEH,MACH,CACL,CA4BO,SAASsnD,GAAuBnhB,GACnC,GAAoB,iBAATA,GAA8B,OAATA,GAahC,GAAoB,IAAhBA,EAAKtmC,OAGT,OAAOsmC,MAhBP,CAEI,GAAIA,EACA,OAAOtjC,EAAc,GAAIJ,EAAOgD,IAAe,GAE9C,QAAanB,IAAT6hC,EAAoB,CAGzB,MACH,CAEJ,CAML,CACA,SAASohB,GAAuBphB,GAC5B,IAAIjgC,EAAIqE,EAER,QAA+E,QAArErE,EAAKigC,aAAmC,EAASA,EAAK/iB,iBAA8B,IAAPld,OAAgB,EAASA,EAAGrG,WAAmF,QAArE0K,EAAK47B,aAAmC,EAASA,EAAKqhB,iBAA8B,IAAPj9C,OAAgB,EAASA,EAAG1K,OAC9O,CACO,SAAS4nD,GAAwBC,EAAcxyC,GAClD,IAAIhP,OACY,IAAZgP,IAAsBA,EAAU,CAAE,GACtC,IAAIgyC,EAASF,GAASU,EAAavkC,KAEnC,IAAK+jC,EAID,OAAO,EAEX,IAmBQS,EAnBJprB,EAAO2qB,EAAO3qB,KAElB,IAAwC,IAApCrnB,EAAQ0yC,0BACPnB,GAAclqB,EAAM,oBAAsBkqB,GAAclqB,EAAM,kBAC/D,OAAO,EAGX,GAAmC,QAA9Br2B,EAAKgP,EAAQ2yC,mBAAgC,IAAP3hD,OAAgB,EAASA,EAAG6L,KAAK,SAAU+1C,GAAc,OAAOrB,GAAclqB,EAAMurB,EAAY,GACvI,OAAO,EAGX,IAAK5yC,EAAQgxB,mBACe5hC,IAAxBojD,EAAalsC,SACZmrC,GAAoBe,EAAalsC,OAAQgrC,IAC1C,OAAO,EAEX,GAAItxC,EAAQgxB,eAIRrjC,EAAc,GAAIJ,EAAOyS,EAAQgxB,eAAe,GAAO6hB,UAAUh2C,KAAK,SAAUo0B,GAE5E,GADAwhB,EAlIZ,SAA4BxhB,EAAMyH,EAAUpyB,EAAQ2H,EAAK8L,GAErD,KAAIkX,EAAKE,OAAUF,EAAKE,MAAMt0B,KAAK,SAAUwqB,GAAQ,OAAOkqB,GAAc7Y,EAAUrR,EAAQ,OAIxFpZ,IAAOgjB,EAAKC,MAASljB,GAAoBC,EAAKgjB,EAAKC,UAInDnX,IACAkX,EAAK6hB,SACJ7hB,EAAK6hB,QAAQj2C,KAAK,SAAUk2C,GAAiB,OAAOh5B,EAAOgL,gBAAkBguB,EAAchuB,eAAmC,MAAlBguB,CAAwB,IAIzI,SAAIzsC,GAAqB,IAAXA,KAELmrC,GAAoBnrC,EADH2qB,EAAK+hB,iBAAmB1B,IAMtD,CA2GwB2B,CAAmBhiB,EAAM5J,EAAMmrB,EAAalsC,OAAQksC,EAAavkC,IAAKukC,EAAaz4B,QAC3F04B,EAAW,CACX,IAAIS,EAAsBd,GAAuBnhB,EAAKtL,iBACtD,GAAI6sB,EAAaltB,iBAAmB4tB,EAAqB,CACrD,IAAIvtB,EAAkB6sB,EAAaltB,gBAAgBtL,QAAQk5B,GACvDvtB,IACA6sB,EAAa7sB,gBAAkBA,EAEtC,CAED,IAAIwtB,EAAqBf,GAAuBnhB,EAAKrO,gBACrD,GAAI4vB,EAAaptB,gBAAkB+tB,EAAoB,CACnD,IAAIvwB,EAAiB4vB,EAAaptB,eAAepL,QAAQm5B,GACrDvwB,IACA4vB,EAAa5vB,eAAiBA,EAErC,CAEG4vB,EAAaltB,iBAAmB2L,EAAKmiB,eAAiBf,GAAuBphB,EAAKmiB,gBAClFZ,EAAaa,iBAAmBb,EAAaltB,gBAAgBxF,KAAKmR,EAAKmiB,aAAallC,UAAW+iB,EAAKmiB,aAAad,YAGjHE,EAAaptB,gBAAkB6L,EAAKqiB,cAAgBjB,GAAuBphB,EAAKqiB,eAChFd,EAAae,gBAAkBf,EAAaptB,eAAetF,KAAKmR,EAAKqiB,YAAYplC,UAAW+iB,EAAKqiB,YAAYhB,WAEpH,CACD,YAAqBljD,IAAdqjD,CACnB,IAGaA,GACD,OAAO,EAIf,OAAID,EAAaptB,iBAtHrB,SAAwCiC,EAAMjC,GAC1C,GAAIiC,EAAK/1B,SAAS,iBACd,IACI,IAAInF,EAAOi5B,EAAej5B,KAC1B,GAAoB,iBAATA,EACP,OAAO,EAKX,GAHcgM,KAAK4X,MAAM5jB,GACJ2Z,OAEVjJ,KAAK,SAAUlJ,GAAS,OAAOA,EAAM0F,aAAeg4C,EAAgC,GAC3F,OAAO,CAEd,CACD,MAAOvmD,GAEN,CAEL,OAAO,CACX,CAmGuC0oD,CAA+BnsB,EAAMmrB,EAAaptB,eAIzF,CAsCO,SAASquB,GAAmBziD,GAC/B,IAAIu7C,EAAiBv7C,EAAGu7C,eAAgBxb,EAAyB//B,EAAG+/B,uBAAwBiI,EAAYhoC,EAAGgoC,UAAW5iC,EAAiBpF,EAAGoF,eAM1I,OALwBm2C,EAAemH,kBACWz7C,OAAO,SAAUtE,GAE/D,OAAO4+C,GAAwB5+C,EAAMA,MAAOo9B,EACpD,GACqC9S,UAAU,SAAUu0B,GACjD,IAAIxhD,EACAqE,EAAIW,EACJ+b,EAAUygC,EAAa7+C,MAEvBq+C,EAASF,GAAS//B,EAAQ9D,KAE9B,GAAK+jC,EAAL,CAOA,IAAIpsB,EAAsD,QAAlCvwB,EAAK0c,EAAQuT,uBAAoC,IAAPjwB,OAAgB,EAASA,EAAG0tB,SAE1F2C,EAAoD,QAAjC1vB,EAAK+b,EAAQqT,sBAAmC,IAAPpvB,OAAgB,EAASA,EAAG+sB,UA5D7F,SAAkC4wB,EAAuB5hC,EAASinB,EAAW5iC,GACzElL,EAAUnB,UAAM,OAAQ,EAAQ,WACnC,IAAIiH,EAAIsiD,EAAaF,EACrB,OAAOlnD,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EACD,OAAMwlB,EAAQwhC,iBAAmBxhC,EAAQshC,iBAClC,CAAC,EAAa9nD,QAAQgN,IAAI,CAACwZ,EAAQwhC,gBAAiBxhC,EAAQshC,oBADA,CAAC,EAAa,GAErF,KAAK,EAED,GADAriD,EAAKzD,EAAO3C,WAAM,EAAQ,CAACyK,EAAG7I,OAAQ,IAAK8mD,EAActiD,EAAG,GAAIoiD,EAAepiD,EAAG,GAC9EsiD,EACA,IACIK,EAAsB,4BAA8Bx7C,KAAKC,UAAUk7C,EACtE,CACD,MAAOxoD,GAEHsL,SAAgEA,EAAe0G,MAAM,mCAAoChS,EAC5H,CAEL,GAAIsoD,EACA,IACIO,EAAsB,6BAA+Bx7C,KAAKC,UAAUg7C,EACvE,CACD,MAAOtoD,GAEHsL,SAAgEA,EAAe0G,MAAM,oCACxF,CAELzH,EAAG9I,MAAQ,EACf,KAAK,EAGD,OADAysC,SAAsDA,EAAU/+B,MAAMo3C,GAAiCsC,GAChG,CAAC,GAE5B,EACA,EACA,CAyCaC,GAhBwB5iD,EAAK,CAAE,GAC7B,mBAAqBghD,EAAOG,uBAC/BnhD,EAAG,yBAA2BghD,EAAOnkC,MACrC7c,EAAG,4BAA8BghD,EAAOE,SACxClhD,EAAG,8BAAgC+gB,EAAQgI,OAC3C/oB,EAAG,2BAA6B+gB,EAAQzL,OACxCtV,EAAG,0BAA4B+gB,EAAQoT,UACvCn0B,EAAG,+BAAiC+gB,EAAQwT,QAC5Cv0B,EAAG,wBAA0B+gB,EAAQsT,SACrCr0B,EAAG,iCAAmC00B,EACtC10B,EAAG,kCAAoC40B,EACvC50B,EAAG,4BAA8B+gB,EAAQzb,KACzCtF,EAAG,+BAAiC+gB,EAAQ6Q,eAC5C5xB,EAAG,gCAAkC+gB,EAAQ4T,gBAC7C30B,GAEiD+gB,EAASinB,EAAW5iC,EApBxE,CAqBT,EACA,EFtRA,SAAWwyC,GACPA,EAAmC,kBAAI,mBAC1C,CAFD,CAEGA,KAAoBA,GAAkB,CAAE,IAEpC,IAAIiL,GAAuB,SAAU7zC,QACxB,IAAZA,IAAsBA,EAAU,CAAE,GACtC,IAEI8B,EAFA3L,ECbiB,4CDyBjBy3C,EAAoB,WACpB,IAAI58C,EACA0iD,EAAoB,IAAIhoB,GAAW,SAAUc,GAC7C,IAAIvwB,EAAW,IAAI6pB,GAAqB,SAAUnyB,GAC9C,IAAImgD,EAbmB,SAAUngD,EAAO2C,GAMhD,MALgB,CACZ3C,MAAOA,EACP+a,UAAWxL,KAAKiK,MAChB7W,KAAMA,EAGlB,CAM0CivC,CAA6B5xC,EAAO,WAC9D64B,EAAS3gC,KAAKioD,EAC9B,GAEY,OADAtrB,GAAgBvK,UAAUhiB,EAAU6F,GAC7B,WACH0mB,GAAgBjK,YAAYtiB,EAC5C,CACA,GACQ,OAAOjL,EAAK,CAAE,GACP43C,GAAgBmL,mBAAqBL,EACxC1iD,CACZ,EAkCI,MAAO,CACHmF,KAAMA,EACNG,KA9DO,aA+DPC,MApCQ,SAAUR,EAAQijC,GAAa,OAAO9tC,OAAU,OAAQ,OAAQ,EAAQ,WAChF,IAAIqhD,EACJ,OAAOrgD,EAAYnC,KAAM,SAAUiH,GAE/B,MAAwB,oBAAbif,WAGXs8B,EAAiBqB,IAEjB9rC,EAAS/L,aAAuC,EAASA,EAAOK,eAChE41B,GAAeynB,GAAmB,CAC9BlH,eAAgBA,EAChBxb,uBAAwB/wB,EACxBg5B,UAAWA,EACX5iC,eAAgB0L,IAGpBA,SAAgDA,EAAO9J,IAAI,GAAG/J,OAAOkI,EAAM,mCAZhE,CAAC,EAcxB,EACK,EAAE,EAiBC+B,QAfU,SAAUvE,GAAS,OAAOzI,OAAU,OAAQ,OAAQ,EAAQ,WACtE,OAAOgB,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,EAAc2C,EAClC,EACK,EAAE,EAYCiD,SAXW,WAAc,OAAO1L,OAAU,OAAQ,OAAQ,EAAQ,WAClE,OAAOgB,EAAYnC,KAAM,SAAUiH,GAE/B,OADAg7B,GAAazN,cACN,CAAC,EACpB,EACK,EAAE,EAQP,EGjFA,IAAIzzB,IAAG,EAAE,MAAMR,GAAEA,IAAI2tB,iBAAiB,WAAYxtB,IAAIA,EAAEupD,YAAYlpD,GAAEL,EAAEwpD,UAAU3pD,EAAEG,GAAI,GAAE,IAAKA,GAAE,CAACK,EAAER,EAAEG,EAAED,KAAK,IAAID,EAAE8C,EAAE,OAAOG,IAAIlD,EAAEqB,OAAO,IAAI6B,GAAGhD,KAAK6C,EAAE/C,EAAEqB,OAAOpB,GAAG,IAAI8C,QAAG,IAAS9C,KAAKA,EAAED,EAAEqB,MAAMrB,EAAE4pD,MAAM7mD,EAAE/C,EAAE6pD,OAAO,EAAErpD,EAAER,IAAIQ,EAAER,EAAE,GAAG,OAAOQ,EAAER,EAAE,GAAG,oBAAoB,OAAjD,CAAyDA,EAAEqB,MAAMlB,GAAGK,EAAER,OAAOE,GAAEM,IAAIspD,sBAAuB,IAAIA,sBAAqB,IAAMtpD,OAASP,GAAE,KAAK,MAAMO,EAAEw8B,YAAY+sB,iBAAiB,cAAc,GAAG,GAAGvpD,GAAGA,EAAEwpD,cAAc,GAAGxpD,EAAEwpD,cAAchtB,YAAYna,MAAM,OAAOriB,GAAGuC,GAAE,KAAK,MAAMvC,EAAEP,KAAI,OAAOO,GAAGypD,iBAAiB,GAAG/mD,GAAE,CAAClD,EAAEG,GAAE,KAAM,MAAMD,EAAED,KAAI,IAAIiD,EAAE,WAA8J,OAAnJ1C,IAAG,EAAE0C,EAAE,qBAAqBhD,IAAIylB,SAASukC,cAAcnnD,KAAI,EAAEG,EAAE,YAAYyiB,SAASwkC,aAAajnD,EAAE,UAAUhD,EAAE8L,OAAO9I,EAAEhD,EAAE8L,KAAKrB,QAAQ,KAAK,OAAa,CAACkB,KAAK7L,EAAEqB,MAAMlB,EAAE0pD,OAAO,OAAOD,MAAM,EAAE9+C,QAAQ,GAAG+oB,GAAG,MAAMjb,KAAKiK,SAASpY,KAAKyQ,MAAM,cAAczQ,KAAKC,UAAU,OAAO0/C,eAAelnD,IAAI0iB,GAAE,IAAIykC,QAAQ,SAAShgD,GAAE7J,EAAER,GAAG,OAAO4lB,GAAEtP,IAAI9V,IAAIolB,GAAEpe,IAAIhH,EAAE,IAAIR,GAAG4lB,GAAEtP,IAAI9V,EAAE,CAAC,MAAM7B,GAAEqB,EAAEE,EAAE,EAAE6C,EAAE,GAAG,CAAAunD,CAAE9pD,GAAG,GAAGA,EAAE+pD,eAAe,OAAO,MAAMvqD,EAAEP,KAAKsD,EAAE,GAAG5C,EAAEV,KAAKsD,EAAEynD,IAAI,GAAG/qD,KAAKS,GAAGF,GAAGG,GAAGK,EAAEq6B,UAAU16B,EAAE06B,UAAU,KAAKr6B,EAAEq6B,UAAU76B,EAAE66B,UAAU,KAAKp7B,KAAKS,GAAGM,EAAEa,MAAM5B,KAAKsD,EAAEF,KAAKrC,KAAKf,KAAKS,EAAEM,EAAEa,MAAM5B,KAAKsD,EAAE,CAACvC,IAAIf,KAAKO,IAAIQ,EAAE,EAAE,MAAM8pD,GAAE,CAAC9pD,EAAER,EAAEG,EAAE,CAAE,KAAI,IAAI,GAAGsqD,oBAAoBC,oBAAoB1jD,SAASxG,GAAG,CAAC,MAAMN,EAAE,IAAIuqD,oBAAqBjqD,IAAIS,QAAQC,UAAUS,KAAM,KAAK3B,EAAEQ,EAAEmqD,aAAc,EAAG,GAAG,OAAOzqD,EAAEuxC,QAAQ,CAACzlC,KAAKxL,EAAEoqD,UAAS,KAAMzqD,IAAID,CAAC,CAAC,CAAC,MAAO,GAAE4B,GAAEtB,IAAI,IAAIR,GAAE,EAAG,MAAM,KAAKA,IAAIQ,IAAIR,GAAE,KAAM,IAAI6qD,IAAG,EAAE,MAAMpnD,GAAE,IAAI4D,IAAIrE,GAAE,IAAI,WAAW2iB,SAASmlC,iBAAiBnlC,SAASukC,aAAa,IAAI,EAAEjrD,GAAEuB,IAAI,GAAG,WAAWmlB,SAASmlC,gBAAgB,CAAC,GAAG,qBAAqBtqD,EAAEwL,KAAK,IAAI,MAAMxL,KAAKiD,GAAEjD,IAAIuqD,SAASF,MAAKA,GAAE,qBAAqBrqD,EAAEwL,KAAKxL,EAAEmpD,UAAU,EAAE7Z,oBAAoB,qBAAqB7wC,IAAE,GAAI,GAAGyD,GAAE,KAAK,GAAGmoD,GAAE,EAAE,CAAC,MAAMrqD,EAAEuC,KAAI5C,EAAEwlB,SAASukC,kBAAa,EAAOvgD,WAAWqzB,YAAY+sB,iBAAiB,oBAAoBp8C,OAAQ3N,GAAG,WAAWA,EAAE6L,MAAM7L,EAAE66B,UAAUr6B,GAAI,IAAIq6B,UAAUgwB,GAAE1qD,GAAG6C,KAAI2qB,iBAAiB,mBAAmB1uB,IAAE,GAAI0uB,iBAAiB,qBAAqB1uB,IAAE,GAAIe,QAAQ2M,WAAU,KAAOk+C,GAAE7nD,IAAI,EAAG,EAAE,CAAC,MAAM,CAAC,mBAAIgoD,GAAkB,OAAOH,EAAC,EAAE,QAAAI,CAASzqD,GAAGiD,GAAE8E,IAAI/H,EAAE,IAAI6B,GAAE7B,IAAImlB,SAASukC,aAAav8B,iBAAiB,qBAAoB,IAAMntB,KAAK,GAAIA,KAAKuB,GAAE,CAAC,KAAK,KAAKmpD,GAAE,CAAC1qD,EAAEP,EAAE,CAAE,KAAIoC,GAAC,KAAO,MAAMujB,EAAEljB,KAAI,IAAI2H,EAAE1L,EAAEuE,GAAE,OAAO,MAAMpB,EAAEwoD,GAAE,QAAS9pD,IAAI,IAAI,MAAMR,KAAKQ,EAAE,2BAA2BR,EAAE6L,OAAO/J,EAAE+vC,aAAa7xC,EAAE66B,UAAUjV,EAAEolC,kBAAkBrsD,EAAE0C,MAAMoJ,KAAKoQ,IAAI7a,EAAE66B,UAAU93B,KAAI,GAAGpE,EAAEmM,QAAQjI,KAAK7C,GAAGqK,GAAE,IAAM,GAAGvI,IAAIuI,EAAElK,GAAEK,EAAE7B,EAAEoD,GAAE9B,EAAEkrD,kBAAkBnrD,GAAGA,IAAIrB,EAAEuE,GAAE,OAAOmH,EAAElK,GAAEK,EAAE7B,EAAEoD,GAAE9B,EAAEkrD,kBAAkBjrD,GAAC,KAAOvB,EAAE0C,MAAM27B,YAAYna,MAAM7iB,EAAE2pD,UAAUt/C,GAAE,EAAI,EAAG,GAAI,IAAIzL,GAAE,CAAC,GAAG,KAAwV,IAAImC,GAAE,EAAEqqD,GAAE,IAAIppD,GAAE,EAAE,MAAMqpD,GAAE7qD,IAAI,IAAI,MAAMR,KAAKQ,EAAER,EAAEsrD,gBAAgBF,GAAE3gD,KAAK4f,IAAI+gC,GAAEprD,EAAEsrD,eAAetpD,GAAEyI,KAAKoQ,IAAI7Y,GAAEhC,EAAEsrD,eAAevqD,GAAEiB,IAAGA,GAAEopD,IAAG,EAAE,EAAE,IAAI,IAAIG,GAAE,MAAMtoB,GAAE,IAAIsoB,GAAExqD,GAAEi8B,YAAYwuB,kBAAkB,EAA+G,IAAIC,GAAE,EAAE,MAAMp0B,GAAEwzB,EAAE,GAAGpnD,EAAE,IAAIqhB,IAAI9hB,EAAE/D,EAAE,CAAAyD,GAAI+oD,GAAExoB,KAAIxjC,KAAKorD,EAAExqD,OAAO,EAAEZ,KAAKgE,EAAEwhB,OAAO,CAAC,CAAAymC,GAAI,MAAMlrD,EAAEiK,KAAK4f,IAAI5qB,KAAKorD,EAAExqD,OAAO,EAAEoK,KAAKyQ,OAAO+nB,KAAIwoB,IAAG,KAAK,OAAOhsD,KAAKorD,EAAErqD,EAAE,CAAC,CAAA8pD,CAAE9pD,GAAG,GAAGf,KAAKuD,IAAIxC,IAAIA,EAAE8qD,eAAe,gBAAgB9qD,EAAEmrD,UAAU,OAAO,MAAM3rD,EAAEP,KAAKorD,EAAEL,IAAI,GAAG,IAAIrqD,EAAEV,KAAKgE,EAAE6S,IAAI9V,EAAE8qD,eAAe,GAAGnrD,GAAGV,KAAKorD,EAAExqD,OAAO,IAAIG,EAAEu6B,SAAS/6B,EAAEe,EAAE,CAAC,GAAGZ,EAAEK,EAAEu6B,SAAS56B,EAAEY,GAAGZ,EAAE2K,QAAQ,CAACtK,GAAGL,EAAEY,EAAEP,EAAEu6B,UAAUv6B,EAAEu6B,WAAW56B,EAAEY,GAAGP,EAAEq6B,YAAY16B,EAAE2K,QAAQ,GAAG+vB,WAAW16B,EAAE2K,QAAQjI,KAAKrC,IAAIL,EAAE,CAAC0zB,GAAGrzB,EAAE8qD,cAAcxgD,QAAQ,CAACtK,GAAGO,EAAEP,EAAEu6B,UAAUt7B,KAAKgE,EAAE+D,IAAIrH,EAAE0zB,GAAG1zB,GAAGV,KAAKorD,EAAEhoD,KAAK1C,IAAIV,KAAKorD,EAAE/qC,KAAM,CAACtf,EAAER,IAAIA,EAAEe,EAAEP,EAAEO,GAAItB,KAAKorD,EAAExqD,OAAO,GAAG,CAAC,MAAMG,EAAEf,KAAKorD,EAAEx+C,OAAO,IAAI,IAAI,MAAMrM,KAAKQ,EAAEf,KAAKgE,EAAEwe,OAAOjiB,EAAE6zB,GAAG,CAACp0B,KAAKR,IAAIkB,EAAE,CAAC,EAAE,MAAMyrD,GAAEprD,IAAI,MAAMR,EAAE2J,WAAWkiD,qBAAqBl/C,WAAW,WAAWgZ,SAASmlC,gBAAgBtqD,KAAKA,EAAEsB,GAAEtB,GAAGmtB,iBAAiB,mBAAmBntB,EAAE,CAACu9C,MAAK,EAAGnwB,SAAQ,IAAK5tB,EAAC,KAAOQ,IAAIsvC,oBAAoB,mBAAmBtvC,EAAE,CAACotB,SAAQ,GAAK,KAAKk+B,GAAE,CAAC,IAAI,KAAKC,GAAE,CAACvrD,EAAEN,EAAE,CAAA,KAAM,IAAIyJ,WAAWqiD,0BAA0B,kBAAkBA,uBAAuB9sD,WAAW,OAAO,MAAMe,EAAEyC,KAAIL,QAAnnC,qBAAqB26B,aAAauuB,KAAIA,GAAEjB,GAAE,QAAQe,GAAE,CAACr/C,KAAK,QAAQ4+C,UAAS,EAAGqB,kBAAkB,KAA+hC,IAAIlpD,EAAE6iB,EAAE1iB,GAAE,OAAO,MAAMvE,EAAE0L,GAAEnK,EAAEm3B,IAAGv1B,EAAEtB,IAAIorD,GAAG,KAAK,IAAI,MAAM5rD,KAAKQ,EAAE7B,EAAE2rD,EAAEtqD,GAAG,MAAMA,EAAErB,EAAE+sD,IAAI1rD,GAAGA,EAAEe,IAAI6kB,EAAEvkB,QAAQukB,EAAEvkB,MAAMrB,EAAEe,EAAE6kB,EAAE9a,QAAQ9K,EAAE8K,QAAQ/H,IAAK,IAAI8nD,EAAEP,GAAE,QAAQxoD,EAAE,CAACmqD,kBAAkB/rD,EAAE+rD,mBAAmB,KAAKlpD,EAAE5C,GAAEK,EAAEolB,EAAEkmC,GAAE5rD,EAAEirD,kBAAkBN,IAAIA,EAAEpZ,QAAQ,CAACzlC,KAAK,cAAc4+C,UAAS,IAAK3qD,EAAEgrD,SAAQ,KAAOnpD,EAAE+oD,EAAEqB,eAAenpD,GAAE,EAAI,GAAG/C,GAAC,KAAOrB,EAAE+D,IAAIkjB,EAAE1iB,GAAE,OAAOH,EAAE5C,GAAEK,EAAEolB,EAAEkmC,GAAE5rD,EAAEirD,iBAAkB,GAAI,IAAI,MAAMgB,GAAEnpD,EAAE,CAAAsnD,CAAE9pD,GAAGf,KAAKuD,IAAIxC,EAAE,EAAE,MAAMgP,GAAE,CAAC,KAAK,KAA8mB48C,GAAE,CAAC,IAAI,MAAMC,GAAE7rD,IAAImlB,SAASukC,aAAa7nD,GAAC,IAAMgqD,GAAE7rD,IAAK,aAAamlB,SAAS+jB,WAAW/b,iBAAiB,OAAQ,IAAI0+B,GAAE7rD,IAAI,GAAImM,WAAWnM,ICKr3K,SAAS8rD,GAAmBC,GACxB,IAAI7lD,EAEAm0B,GAA0C,QAA5Bn0B,EAAK6lD,EAAOzhD,QAAQ,UAAuB,IAAPpE,OAAgB,EAASA,EAAGm0B,YAAc,EAChG,OAAOmC,YAAYwvB,WAAa3xB,CACpC,CACA,SAAS4xB,GAAcF,GACnB,MAAO,CACHlrD,MAAOkrD,EAAOlrD,MACdwoD,OAAQ0C,EAAO1C,OACfD,MAAO2C,EAAO3C,MACdQ,eAAgBmC,EAAOnC,eACvBv2B,GAAI04B,EAAO14B,GACXzP,UAAW3Z,KAAKyQ,MAAMoxC,GAAmBC,IACzCG,gBAAiBjiD,KAAKyQ,MAAM8hB,YAAYwvB,YAEhD,CACO,ICjBHG,GDiBOC,GAAkB,WACzB,IAAIC,EAAqB,KACrBviD,EAAcb,IACdqjD,EAAMxiD,aAAiD,EAASA,EAAYqb,SAC5ExC,EAAW7Y,aAAiD,EAASA,EAAY6Y,SAuDrF,MAAO,CACHtX,KElFiB,qBFmFjBG,KAAM,aACNC,MAzDQ,SAAUR,EAAQijC,GAAa,OAAO9tC,OAAU,OAAQ,OAAQ,EAAQ,WAChF,IAAImsD,EAAcC,EAClB,OAAOprD,EAAYnC,KAAM,SAAUiH,GAC/B,YAAY5B,IAARgoD,IAGJC,EAAehpC,IAAyCZ,aAA2C,EAASA,EAAS4rB,OAAS,GAAItjC,EAAOK,gBACzIkhD,EAAmB,CACf,2BAAuD7pC,aAA2C,EAASA,EAASirB,WAAa,GACjI,4BAA6B2e,EAC7B,wBAAyBhpC,IAAyCZ,aAA2C,EAASA,EAASuJ,WAAa,GAAIjhB,EAAOK,gBACvJ,yBAA0E,oBAAb6Z,UAA4BA,SAAS0Z,OAAU,GAC5G,uBAAwBtb,GAAagpC,EAAa31C,MAAM,KAAK,GAAI3L,EAAOK,iBDvC4iJ,EAACtL,EAAEP,EAAE,CAAE,KAAIoC,QAAQ,MAAMujB,EAAEljB,KAAI,IAAI/D,EAAEksD,EAAE3nD,GAAE,OAAO,MAAMO,EAAE4G,GAAEpK,EAAEksD,IAAGnpD,EAAExC,IAAIP,EAAEkrD,mBAAmB3qD,EAAEA,EAAEkD,OAAO,IAAI,IAAI,MAAM1D,KAAKQ,EAAEiD,EAAE6mD,EAAEtqD,GAAGA,EAAE66B,UAAUjV,EAAEolC,kBAAkBH,EAAExpD,MAAMoJ,KAAKoQ,IAAI7a,EAAE66B,UAAU93B,KAAI,GAAG8nD,EAAE//C,QAAQ,CAAC9K,GAAGrB,MAAMM,EAAEqrD,GAAE,2BAA2BtnD,GAAG,GAAG/D,EAAE,CAACN,EAAEwB,GAAEK,EAAEqqD,EAAEr7C,GAAEvP,EAAEkrD,kBAAkB,MAAMpoD,EAAEjB,GAAC,KAAOkB,EAAE/D,EAAEitD,eAAejtD,EAAE4yC,aAAalzC,GAAE,EAAI,GAAGinB,EAAEplB,IAAIA,EAAE0tB,YAAY09B,GAAE7oD,GAAG+sC,oBAAoBtvC,EAAEwL,KAAK4Z,EAAE,CAACgI,SAAQ,MAAO,IAAI,MAAMptB,IAAI,CAAC,UAAU,QAAQ,oBAAoBmtB,iBAAiBntB,EAAEolB,EAAE,CAACgI,SAAQ,IAAK5tB,GAAGA,IAAI6qD,EAAE3nD,GAAE,OAAOvE,EAAEwB,GAAEK,EAAEqqD,EAAEr7C,GAAEvP,EAAEkrD,kBAAkBjrD,GAAC,KAAO2qD,EAAExpD,MAAM27B,YAAYna,MAAM7iB,EAAE2pD,UAAUhrD,GAAE,EAAI,EAAG,EAAE,CAAE,ICyC3tKsuD,CAAM,SAAUV,GACZS,EAAiB,mBAAqBP,GAAcF,EACpE,GACYW,GAAM,SAAUX,GACZS,EAAiB,mBAAqBP,GAAcF,EACpE,GACYY,GAAM,SAAUZ,GACZS,EAAiB,mBAAqBP,GAAcF,EACpE,GDjDkjF,EAAC/rD,EAAEP,EAAE,CAAE,KAAI,MAAM8C,EAAEL,KAAIwoD,GAAEppD,QAAQ,IAAI8jB,EAAE9jB,EAAEoB,GAAE,MAAM,GAAG,MAAM2nD,EAAExgD,GAAEpK,EAAEtB,IAAG8E,EAAEjD,IAAI,IAAI,MAAMR,KAAKQ,EAAEqqD,EAAEP,EAAEtqD,GAAG6qD,EAAE3qD,EAAE4B,EAAET,QAAQS,EAAET,MAAMwpD,EAAE3qD,EAAE4B,EAAEgJ,QAAQ+/C,EAAE9nD,EAAE6iB,MAAM5iB,EAAEsnD,GAAE,eAAe7mD,GAAGT,IAAI4iB,EAAEzlB,GAAEK,EAAEsB,EAAElD,GAAEqB,EAAEkrD,kBAAkBpoD,EAAEkoD,SAAQ,KAAOxnD,EAAET,EAAEkpD,eAAetmC,GAAE,EAAI,GAAG5lB,GAAC,KAAO6qD,EAAE3qD,EAAE,EAAE4B,EAAEoB,GAAE,MAAM,GAAG0iB,EAAEzlB,GAAEK,EAAEsB,EAAElD,GAAEqB,EAAEkrD,kBAAkBjrD,GAAC,IAAM0lB,IAAM,GAAGjZ,WAAWiZ,GAAI,KCkDl3FwnC,CAAM,SAAUb,GACZS,EAAiB,mBAAqBP,GAAcF,EACpE,GDpD23K,EAAC/rD,EAAEN,EAAE,CAAE,KAAI,IAAI0lB,EAAE1iB,GAAE,QAAQmH,EAAElK,GAAEK,EAAEolB,EAAEwmC,GAAElsD,EAAEirD,kBAAkBkB,GAAG,KAAK,MAAM1tD,EAAEsB,KAAItB,IAAIinB,EAAEvkB,MAAMoJ,KAAKoQ,IAAIlc,EAAEqrD,cAAcjnD,KAAI,GAAG6iB,EAAE9a,QAAQ,CAACnM,GAAG0L,GAAE,GAAIrK,GAAG,KAAK4lB,EAAE1iB,GAAE,OAAO,GAAGmH,EAAElK,GAAEK,EAAEolB,EAAEwmC,GAAElsD,EAAEirD,kBAAkB9gD,GAAE,EAAI,GAAI,ICqD1jLgjD,CAAO,SAAUd,GACbS,EAAiB,oBAAsBP,GAAcF,EACrE,GACYM,EAAqB,WACW,WAAxBC,EAAIhC,iBAAgC+B,IACpCne,EAAU/+B,MEzDK,yBFyDwBq9C,GACvCF,EAAIhd,oBAAoB,mBAAoB+c,GAC5CA,EAAqB,KAEzC,EACYC,EAAIn/B,iBAAiB,mBAAoBk/B,IAhC9B,CAAC,EAkCxB,EACK,EAAE,EAmBCj/C,QAlBU,SAAUvE,GAAS,OAAOzI,OAAU,OAAQ,OAAQ,EAAQ,WACtE,OAAOgB,EAAYnC,KAAM,SAAUiH,GAC/B,MAAO,CAAC,EAAc2C,EAClC,EACK,EAAE,EAeCiD,SAdW,WAAc,OAAO1L,OAAU,OAAQ,OAAQ,EAAQ,WAClE,OAAOgB,EAAYnC,KAAM,SAAUiH,GAK/B,OAJImmD,IAEAC,SAA0CA,EAAIhd,oBAAoB,mBAAoB+c,IAEnF,CAAC,EACpB,EACK,EAAE,EAQP,EGhFMS,GAAyB,SAAChnC,GAC9B,IAAM+nB,EAAQ/nB,EAAOlP,MAAM,KAE3B,OAAIi3B,EAAMhuC,QAAU,EACXimB,EAGF+nB,EAAM3qC,MAAM2qC,EAAMhuC,OAAS,EAAGguC,EAAMhuC,QAAQ4K,KAAK,IAC1D,EAOasiD,GAAgB,SAC3BrU,EACAsU,EACA93C,EACA8B,EACAkL,QAAA,IAAAA,IAAAA,GAAmB,GAEwCw2B,EAA3C9zC,aAAEC,EAAyC6zC,EAAzB7zC,iBAAKooD,EAAoBltD,EAAA24C,EAArD,CAAA,WAAA,qBACAxyC,EAA+F8mD,GAAY,CAAA,EAA7E9mD,EAAAtB,aAAoBsoD,qBAAwBC,EAA1EptD,EAAAmG,EAAA,CAAA,WAAA,qBAEN,GAAIknD,GAAmBl4C,EAAQm4C,iBAAkB3U,EAAQ7zC,kBAGvD,OADAmS,EAAOhF,MAAM,sCAAA7O,OAAsCu1C,EAAQ7zC,iBAAmD,uCACvG,EAIT,IAAKqd,GArBiB,SAACw2B,GACvB,OAAOr6C,OAAOoT,OAAOinC,GAAShJ,MAAM,SAAC7uC,GAAU,OAACA,CAAD,EACjD,CAmBuBysD,CAAgB5U,IAAYsU,EAE/C,OADAh2C,EAAOhF,MAAM,qFACN,EAGT,IAAMu7C,EAAiBlgD,KAAKC,UAAU2/C,KAAqB5/C,KAAKC,UAAU6/C,GACpEK,EACJV,GAAuBjoD,GAAoB,MAAQioD,GAAuBI,GAAuB,IAE7FjsD,GAAU+rD,GAAYO,GAAkBC,EAQ9C,OANKvsD,EAGH+V,EAAOhF,MAAM,4DAFbgF,EAAOhF,MAAM,yEAKR/Q,CACT,EAEamsD,GAAqB,SAACC,EAA4CI,GAC7E,YADiC,IAAAJ,IAAAA,EAA0C,SAAE,IAAAI,IAAAA,EAAoB,IAC1FJ,EAAiBliD,KAAK,SAACtK,GAC5B,OAAAA,aAAiBoyC,OAASpyC,EAAMy+B,KAAKmuB,GAAmB5sD,IAAU4sD,CAAlE,EAEJ,ECpDAC,GAAA,WAYE,SAAYA,EAAAx4C,EAAkBjK,SD4DY0iD,EACtC7nC,EClEJ7mB,KAAsB2uD,wBAAG,EAMvB3uD,KAAKiW,QAAO5V,EAAA,CACVuuD,kBAAmB,QACnBC,2BAA2B,EAC3BT,kBDwDsCM,ECxD8B,QAAtBznD,EAAA+E,EAAOggC,qBAAe,IAAA/kC,OAAA,EAAAA,EAAA4f,ODyDpEA,EAAS6nC,EACT7nC,GACEA,EAAOxJ,WAAW,OACpBwJ,EAASA,EAAOzM,UAAU,IAErB,CAAC,IAAI45B,OAAO,GAAA9vC,OAAG2iB,EAAO3b,QAAQ,IAAK,OAAS,QAE9C,KC/DA+K,GAELjW,KAAKmnB,QAAUnb,EAAOq+B,cACtBrqC,KAAK8Z,WAAamN,GAAcjb,EAAOoK,OAAQ,QAC/CpW,KAAK8uD,iBAAmB7nC,GAAcjb,EAAOoK,OAAQ,iBACrDpW,KAAKguD,gBAAkB7oD,EACvBnF,KAAKkjB,eAAiBlX,EAAOkX,eAC7BljB,KAAKmjB,cAAgBnX,EAAOmX,cAC5BnjB,KAAK+X,OAAS/L,EAAOK,eACrBL,EAAOK,eAAe4B,IAAI,uCAC3B,CAsCH,OApCQwgD,EAAAhvD,UAAAsvD,KAAN,oGACkD,KAAA,EAAA,MAAA,CAAA,EAAM/uD,KAAKgvD,+BAA3D/nD,EAAAzD,EAAgD3C,WAAA,EAAA,CAAAyK,EAAA7I,OAA0B,IAAzEzC,KAAKguD,gBAAe/mD,EAAA,GAAEjH,KAAKkuD,sBACtBe,GAAuBjvD,KAAKmjB,eAAuBF,GAAajjB,KAAKkjB,eAAgBljB,KAAKmjB,eAE5F2qC,GAAc9tD,KAAKguD,gBAAiBhuD,KAAKkuD,iBAAkBluD,KAAKiW,QAASjW,KAAK+X,OAAQk3C,IACxFjvD,KAAK2uD,wBAAyB,EAC9B,CAAA,EAAM3uD,KAAKmnB,QAAQpf,IAAI/H,KAAK8Z,WAAY9Z,KAAKguD,mBAF+D,CAAA,EAAA,UAE5G1iD,EAAA7I,sCAEH,EAEKgsD,EAAAhvD,UAAAuvD,cAAN,yGAC2B,MAAM,CAAA,EAAAhvD,KAAKmnB,QAAQtQ,IAAI7W,KAAK8uD,0BACjD,OADEI,EAAmBjoD,EAA6CxE,QAE9D,CAAA,EAAAzC,KAAKmnB,QAAQve,OAAO5I,KAAK8uD,mBADb,CAAA,EAAA,UAClB7nD,EAAAxE,wBAEK,MAAM,CAAA,EAAAjB,QAAQgN,IAAI,CAAC0gD,IAAoB,IAAIxwB,IAAiB1Y,QAAShmB,KAAKmnB,QAAQtQ,IAAI7W,KAAK8Z,eAAlG,KAAA,EAAA,MAAA,CAAA,EAAO7S,cACR,EAODwnD,EAAqBhvD,UAAA0vD,sBAArB,SAAsB1mB,GAEpBzoC,KAAK2uD,wBAAyB,EAC9B,IDDgCS,EAAoBn5C,EAChDo5C,EAMAC,ECNEC,GDD0BH,ECCUpvD,KAAKguD,gBDDK/3C,ECCYjW,KAAKiW,QDAjEo5C,EAGDhvD,EAAAA,EAAA,CAAA,EAAA8E,GACAiqD,GAECE,EAAgBlwD,OAAOiM,QAAQgkD,GAAoBh0C,OAAO,SAACjM,EAAUnI,SAAAgF,EAAAzI,OAACqD,EAAGoF,EAAA,GAAErK,EAAKqK,EAAA,GAEpF,OADAmD,EAASlH,QAAQ,WAAAhE,OAAW2C,GAA6C,UAAtCjF,QAAAA,EAASqU,EAAQ24C,yBAAqB,IAAAtjD,EAAAA,EAAA,SACrE1J,EACKwN,EAASrH,IAAIlB,EAAKjF,GAEpBwN,EAASpG,MAAMnC,EACxB,EAAG,IAAIa,GAEAyH,EAAoBmgD,ICVzB,OAHI7mB,IACF8mB,EAAc9mB,SAAWA,GAEpB8mB,GAGTd,EAAAhvD,UAAA+vD,gCAAA,WACE,OAAOxvD,KAAK2uD,0BAA4B3uD,KAAKiW,QAAQ44C,2BAExDJ,CAAD,IH3EWgB,GAA2B,mBAC3BC,GAA4B,oBAC5BC,GAAuB,gBAElC,SAAWzC,GACPA,EAAyB,OAAI,SAC7BA,EAA2B,SAAI,WAC/BA,EAA2B,SAAI,UAClC,CAJD,CAIGA,KAAqBA,GAAmB,CAAE,IACtC,IAAI0C,GAA+B,IAAIhoD,IAAI,CAC9CxH,EAAiBmP,SACjBnP,EAAiBiR,eACjBjR,EAAiBwR,UAWVi+C,GAA0B,SAAU5oD,GAC3C,IAAkCgF,QAAlB,IAAPhF,EAAgB,CAAE,EAAGA,GAAY6oD,gBAAiBA,OAAyB,IAAP7jD,EAAgB,GAAKA,EAC9FpB,EAAcb,IACd4/B,OAAiBvkC,EACjB0qD,GAAmB,EACnB1jD,OAAiBhH,EACjB2qD,GAAY,EACZ7gB,GAAa,EAab8gB,EAAkB,SAAUC,GAC5B,IAAIC,EAAqC,oBAAbzsC,UAA4BA,SAASirB,UAAa,GAC1EyhB,EAAqBF,EAdX,SAAUhsC,GACxB,IAAIyqB,EACJ,IACI,IAAI0hB,EAAa/rC,GAAaJ,EAAK7X,GACnCsiC,EAAW,IAAI5hB,IAAIsjC,GAAY1hB,QAClC,CACD,MAAO5tC,GAEHsL,SAAgEA,EAAe1I,MAAM,wBAAyB5C,EACjH,CACD,OAAO4tC,CACf,CAGgD2hB,CAAYJ,QAAgB7qD,EACpE,IAAK+qD,EACD,OAAOlD,GAAiBqD,OAE5B,IAAIC,EAAoBV,EAAgB5jD,KAAK,SAAU2a,GAAU,OAA0C,IAAnCspC,EAAcnvD,QAAQ6lB,EAAiB,GAC3G4pC,EAAiBX,EAAgB5jD,KAAK,SAAU2a,GAAU,OAA+C,IAAxCupC,EAAmBpvD,QAAQ6lB,EAAiB,GACjH,OAAIspC,IAAkBC,GAAuBK,GAAkBD,EACpDtD,GAAiBwD,SAErBxD,GAAiByD,QAChC,EAkCQC,EAAqB,WAjCczvD,OAAU,OAAQ,OAAQ,EAAQ,WACrE,IAAI0vD,EAASC,EAAYC,EAAkBthB,EACvCxoC,EACJ,OAAO9E,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EACD,OAAMonC,GAAkBmmB,EACjB,CAAC,EAAanmB,EAAe/yB,IAAI84C,KADU,CAAC,EAAa,GAEpE,KAAK,EAcD,OAbAkB,EAAUvlD,EAAG7I,OACbquD,EAAaxsC,GAAkC,oBAAbZ,UAA4BA,SAAS4rB,MAAS,IAChFyhB,GAAoBF,aAAyC,EAASA,EAAQpB,MAA8B,GAC5GhgB,OAAc,EAEVA,EADAqhB,IAAeC,GACAF,aAAyC,EAASA,EAAQnB,MAA+B,GAEnGqB,GAIS7qC,SAASvgB,UAAY,GAEhC,CAAC,EAAaikC,EAAe7hC,IAAI4nD,IAAuB1oD,EAAK,CAAE,EAC9DA,EAAGwoD,IAA4BqB,EAC/B7pD,EAAGyoD,IAA6BjgB,EAChCxoC,KACZ,KAAK,EACDqE,EAAG7I,OACH6I,EAAG9I,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,GAEhC,EACK,EAGL,EACQuJ,EAAS,CACTK,KAAM,gDACNG,KAAM,aACNC,MAAO,SAAUR,EAAQzJ,GAAK,OAAOpB,OAAU,OAAQ,OAAQ,EAAQ,WACnE,OAAOgB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAID,OAHA6J,EAAiBL,EAAOK,gBACT4B,IAAI,4DACnBkhC,GAAa,EACRtkC,EAEE,CAAC,GADR++B,EAAiB,IAAI1iB,GAAerc,EAAY++B,iBACZtkB,aAFX,CAAC,EAAa,GAG3C,KAAK,EACDyqC,EAAmB9oD,EAAGxE,OACtBoI,EAAYqjB,iBAAiB,WAAY0iC,GACpCZ,IAMDnlD,EAAYklC,QAAQC,UAAY,IAAIC,MAAMplC,EAAYklC,QAAQC,UAAW,CACrEnvC,MAAO,SAAU2nB,EAAQpnB,EAAS6F,GAC9B,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAI6iC,EAAQx+B,EAAG,GAAI4kC,EAAS5kC,EAAG,GAAI4Y,EAAM5Y,EAAG,GAChEkd,EAAO3nB,MAAMO,EAAS,CAAC0oC,EAAOoG,EAAQhsB,IAClCirB,GACAyhB,GAEP,IAGL/lD,EAAYklC,QAAQihB,aAAe,IAAI/gB,MAAMplC,EAAYklC,QAAQihB,aAAc,CAC3EnwD,MAAO,SAAU2nB,EAAQpnB,EAAS6F,GAC9B,IAAIqE,EAAK9H,EAAOyD,EAAI,GAAI6iC,EAAQx+B,EAAG,GAAI4kC,EAAS5kC,EAAG,GAAI4Y,EAAM5Y,EAAG,GAChEkd,EAAO3nB,MAAMO,EAAS,CAAC0oC,EAAOoG,EAAQhsB,IAClCirB,GACAyhB,GAEP,IAELZ,GAAY,GAEhB/oD,EAAGzE,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,GAEpC,EACS,EAAI,EACL2L,QAAS,SAAUvE,GAAS,OAAOzI,OAAU,OAAQ,OAAQ,EAAQ,WACjE,IAAIkuC,EAAcwhB,EAASI,EAAgBf,EACvCjpD,EACJ,OAAO9E,EAAYnC,KAAM,SAAUsL,GAC/B,OAAQA,EAAG9I,OACP,KAAK,EAED,OADA6sC,EAAe/qB,GAAkC,oBAAbZ,UAA4BA,SAAS4rB,MAAS,IAC5E1F,GAAkBmmB,EACjB,CAAC,EAAanmB,EAAe/yB,IAAI84C,KADU,CAAC,EAAa,GAEpE,KAAK,EAED,OAAOkB,OADPA,EAAUvlD,EAAG7I,aACmC,EAASouD,EAAQpB,KAAmC,CAAC,EAAa,GAC3G,CAAC,EAAa7lB,EAAe7hC,IAAI4nD,IAAuB1oD,EAAK,CAAE,EAC9DA,EAAGwoD,IAA4BpgB,EAC/BpoC,EAAGyoD,IAA6BxpC,SAASvgB,UAAY,GACrDsB,KACZ,KAAK,EACDqE,EAAG7I,OACH6I,EAAG9I,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAaonC,EAAe/yB,IAAI84C,KAChD,KAAK,EAOD,GANAsB,EAAiB3lD,EAAG7I,OACpBytD,EAAe,GACXe,IACAf,EAAee,EAAevB,KAA8B,IAG5DE,GAA6BrmD,IAAIK,EAAM0F,YACvC,MAAO,CAAC,EAAc1F,GAE1BA,EAAMmH,iBAAmB1Q,EAASA,EAAS,CAAA,EAAKuJ,EAAMmH,kBAAoB,CAAE,GAAI,CAAE,0BAA2BmgD,GAActnD,EAAO,0BAAgD,oBAAb8Z,UAA4BA,SAASirB,UAAa,IAAK,4BAA6BuiB,GAActnD,EAAO,4BAA6BylC,GAAe,wBAAyB6hB,GAActnD,EAAO,wBAA8C,oBAAb8Z,UAA4BY,GAAaZ,SAASuJ,WAAc,IAAK,yBAA0BikC,GAActnD,EAAO,yBAA0B81B,GAAaL,KAA0B,uBAAwB6xB,GAActnD,EAAO,uBAAwBylC,EAAa13B,MAAM,KAAK,IAAK,qCAAsCu4C,EAAc,iCAAkCD,EAAgBC,KACtwB5kD,EAAG9I,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,EAAcoH,GAElD,EACS,EAAI,EACLiD,SAAU,WAAc,OAAO1L,OAAU,OAAQ,OAAQ,EAAQ,WAC7D,OAAOgB,EAAYnC,KAAM,SAAUiH,GAC/B,OAAQA,EAAGzE,OACP,KAAK,EAKD,OAJIqI,IACAA,EAAYwlC,oBAAoB,WAAYugB,GAC5CzhB,GAAa,GAEXvF,GAAkBmmB,EACjB,CAAC,EAAanmB,EAAe7hC,IAAI4nD,GAAsB,CAAE,IADd,CAAC,EAAa,GAEpE,KAAK,EACD1oD,EAAGxE,OACHwE,EAAGzE,MAAQ,EACf,KAAK,EAAG,MAAO,CAAC,GAEpC,EACS,EAAI,GAET,OAAOuJ,CACX,EACA,SAASmlD,GAActnD,EAAO/C,EAAKjF,GAI/B,OAHKgI,EAAMmH,mBACPnH,EAAMmH,iBAAmB,SAEO1L,IAAhCuE,EAAMmH,iBAAiBlK,GAChBjF,EAEJgI,EAAMmH,iBAAiBlK,EAClC,CIvIA,IAAAsqD,GAAA,SAAAl+B,GAAA,SAAAk+B,IAAA,IA4eCpkD,EAAA,OAAAkmB,GAAAA,EAAApyB,MAAAb,KAAAW,YAAAX,YAjeC+M,EAAsB2hC,uBAAG,GAie1B,CAAD,OA5esC9uC,EAAauxD,EAAAl+B,GAajDk+B,EAAA1xD,UAAAsvD,KAAA,SAAK34C,EAAag7C,EAA2CC,GAC3D,IAAIpwC,EACAhL,EAaJ,YAfG,IAAAG,IAAAA,EAAW,IAGVzV,UAAUC,OAAS,GACrBqgB,EAASmwC,EACTn7C,EAAUo7C,GAEqB,iBAApBD,GACTnwC,EAASmwC,EACTn7C,OAAU5Q,IAEV4b,EAASmwC,eAAAA,EAAiBnwC,OAC1BhL,EAAUm7C,GAGP3hD,EAAczP,KAAKqQ,MAAWhQ,EAAAA,EAAA,CAAA,EAAA4V,GAAS,CAAAgL,SAAQ7K,OAAMA,OAE9C+6C,EAAK1xD,UAAA4Q,MAArB,SAAsB4F,oIAEpB,OAAIjW,KAAK6P,aACA,CAAA,IAET7P,KAAK6P,cAAe,EAIS,CAAA,EAAAy9B,GAAiBr3B,EAAQG,OAAQH,EAASjW,eAMnE,OANEsxD,EAAiBtjD,EAAqDvL,OAKlD6uD,EAAe79B,cAAgB69B,EAAe79B,aAAa0Y,mBAEnFyW,EAAqB,IAAI9uB,GACvBw9B,EAAel7C,OACfk7C,EAAejlD,eACfilD,EAAex7C,WACyC,UAA7Bw7C,EAAe79B,oBAAc,IAAAxsB,OAAA,EAAAA,EAAA4O,WAK1D,CAAA,EAAM,IAAIrU,QAAc,SAACC,GAGvBmhD,SAAAA,EAAoB1uB,UAClB,kCACA,MACA,SAACT,EAAmCuB,EAAgBtB,GAClD49B,EAAejlD,eAAe0G,MAC5B,iCACA3E,KAAKC,UACH,CACEolB,aAAYA,EACZuB,OAAMA,EACNtB,UAASA,GAEX,KACA,IAGAD,GACFygB,GAAoCzgB,EAAc69B,GAGpD7vD,GACF,EAEH,KApCkB,CAAA,EAAA,UAsCnB,OA5BAuM,EAAAvL,OA4BA,CAAA,EAAM,IAAIjB,QAAc,SAACC,GAGvBmhD,SAAAA,EAAoB1uB,UAClB,iCACA,MACA,SAACT,EAAmCuB,EAAgBtB,GAalD,GAZA49B,EAAejlD,eAAe0G,MAC5B,6CACA3E,KAAKC,UACH,CACEolB,aAAYA,EACZuB,OAAMA,EACNtB,UAASA,GAEX,KACA,IAGAD,EAAc,CAEhB,IAAM7O,EAAa6O,EAAa7O,WACN,iBAAfA,GAA4BkmB,MAAMlmB,KAC3C0sC,EAAehlB,sBAAwB1nB,GAIzC,IAAMkJ,EAAU2F,EAAa3F,QACN,kBAAZA,IACTwjC,EAAejlB,kBAAoBve,EAEtC,CACDrsB,GACF,EAEH,WAnCDuM,EAAAvL,wBAmDF,OAZMyX,EAAoB,IAAIqT,GAC5B+jC,EAAel7C,OACfk7C,EAAejlD,eACfilD,EAAex7C,WACf,CACEgY,QAASwjC,EAAejlB,kBACxBznB,WAAY0sC,EAAehlB,yBAGbzd,OAAO,UAAW,GAAG3qB,OAAAikC,GAAa,KAAAjkC,OAAAgkC,KACpDhuB,EAAkB2U,OAAO,aAActP,UAAU+oB,WAEjD,CAAA,EAAMrV,EAAMxzB,UAAA4Q,MAAM1Q,KAAAK,KAAAsxD,kBAAlBtjD,EAAAvL,OACAzC,KAAKuxD,kBAAkBD,GAEvBtxD,KAAKgM,OAAOkO,kBAAoBA,EAChCla,KAAKgM,OAAO42C,mBAAqBA,EAG7Bzc,GAA6BnmC,KAAKgM,OAAO47B,kB7CcJ57B,E6CbyBhM,KAAKgM,OAA/DwlD,E7CeRrrB,GAA6Bn6B,EAAO47B,kBACpC57B,EAAO47B,iBAC2B,iBAA3B57B,EAAO47B,iBACd57B,EAAO47B,gBAAgB+M,aACuB,iBAAvC3oC,EAAO47B,gBAAgB+M,YAE9Bt0C,EAAA,CAAA,EACK2L,EAAO47B,gBAAgB+M,aAIvB,G6CzBH30C,KAAKyxD,eAAiB,IAAIhD,GAAe+C,EAA4BxxD,KAAKgM,QAE1E,CAAA,EAAMhM,KAAKyxD,eAAe1C,SAJiC,CAAA,EAAA,UAI3D/gD,EAAAvL,+BASIorC,EAAcpqB,KAGdqqB,EAAeD,EAAYC,aAAeC,OAAOF,EAAYC,mBAAgBzoC,EAC7E2oC,GAAoBF,GAAe30B,KAAKiK,MAAQ0qB,EAGhD4jB,EACJ1jB,IAAsBD,OAAOjD,MAAMiD,OAAOF,EAAY8jB,eAClD5jB,OAAOF,EAAY8jB,mBACnBtsD,EACNrF,KAAK4xD,aAAyE,QAA5D7jD,YAAqB,QAArBzC,EAAA2K,EAAQlH,iBAAa,IAAAzD,EAAAA,EAAAomD,iBAAkB1xD,KAAKgM,OAAO+C,iBAAS,IAAAhB,EAAAA,EAAIoL,KAAKiK,QAKjFyuC,EAAY9uC,GAAsB9M,EAAQN,eACtCgN,cAAcT,YAAY,CAClCjB,OAAQjhB,KAAKgM,OAAOiV,OACpBE,SAAUnhB,KAAKgM,OAAOmV,WvDpPC,OuDyPrBnhB,KAAKgM,OAAO4J,QAA2B,CAAA,EAAA,GACnC,CAAA,EAAA5V,KAAK8I,IAAIgqC,MAAoCnjC,gBAAnD3B,EAAAvL,iBAEF,KAAA,EAAA,MAAA,CAAA,EAAMzC,KAAK8I,IAAI,IAAI4Q,GAAY,CAAEQ,uBAAsBvK,iBACvD,OADA3B,EAAAvL,OACM,CAAA,EAAAzC,KAAK8I,IAAI,IAAIs/B,IAAWz4B,iBAC9B,OADA3B,EAAAvL,OACM,CAAA,EAAAzC,KAAK8I,IAAI,IAAIka,IAAuBrT,wBAA1C3B,EAAAvL,O7B1PqB,SAACuJ,GACpB6mC,SAAuCxtC,IAA3B2G,EAAO47B,kBAWvB57B,EAAOK,eAAeC,KAPN,+jBAQhBumC,IAAW,EACb,C6B+OIif,CAAU9xD,KAAKgM,Q7CtN2Bk6B,E6CwNRlmC,KAAKgM,OAAO47B,gB7CvNhD3B,GAAkBC,EAAa,kB6CwN3BlmC,KAAKgM,OAAOK,eAAe0G,MAAM,wCAC3B,CAAA,EAAA/S,KAAK8I,IAAIypC,MAAwB5iC,UAFqB,CAAA,EAAA,YAE5D3B,EAAAvL,iC7CvN0C,SAACyjC,GAC/C,OAAAD,GAAkBC,EAAa,mBAA/B,C6CyNM6rB,CAAiC/xD,KAAKgM,OAAO47B,kBAC/C5nC,KAAKgM,OAAOK,eAAe0G,MAAM,kCAC3B,CAAA,EAAA/S,KAAK8I,IAAIgoC,MAA2BnhC,UAFqB,CAAA,EAAA,YAE/D3B,EAAAvL,iCAIE2jC,GAA0BpmC,KAAKgM,OAAO47B,kBACxC5nC,KAAKgM,OAAOK,eAAe0G,MAAM,oCACjC,CAAA,EAAM/S,KAAK8I,IAAIkmC,GAAuBzH,GAA0BvnC,KAAKgM,UAAU2D,UAFvB,CAAA,EAAA,YAExD3B,EAAAvL,iCAGE+jC,GAA6BxmC,KAAKgM,OAAOk6B,cAC3ClmC,KAAKgM,OAAOK,eAAe0G,MAAM,wDAC3B,CAAA,EAAA/S,KAAK8I,IAAIk5C,GAAkBpb,GAA6B5mC,KAAKgM,QAAS,CAAEkO,kBAAiBA,KAAKvK,UAF7C,CAAA,EAAA,YAEvD3B,EAAAvL,iCAGEikC,GAAiC1mC,KAAKgM,OAAOk6B,cAC/ClmC,KAAKgM,OAAOK,eAAe0G,MAAM,0CACjC,CAAA,EAAM/S,KAAK8I,IAAIw9C,GAAkBzf,GAAiC7mC,KAAKgM,UAAU2D,UAFtB,CAAA,EAAA,YAE3D3B,EAAAvL,iCAGE6jC,GAAyBtmC,KAAKgM,OAAOk6B,cACvClmC,KAAKgM,OAAOK,eAAe0G,MAAM,kCACjC,CAAA,EAAM/S,KAAK8I,IAAIghD,GAAqBhjB,GAAyB9mC,KAAKgM,UAAU2D,UAFzB,CAAA,EAAA,YAEnD3B,EAAAvL,iC7CpL4B,SAACyjC,GACjC,MAA2B,kBAAhBA,EACFA,EAGkB,iBAAhBA,IAAsD,IAA1BA,EAAY6O,SAKrD,C6C6KQid,CAAmBhyD,KAAKgM,OAAOk6B,cACjClmC,KAAKgM,OAAOK,eAAe0G,MAAM,4BAC3B,CAAA,EAAA/S,KAAK8I,IAAIqkD,MAAmBx9C,UAFW,CAAA,EAAA,YAE7C3B,EAAAvL,iC7C7OoC,SAACyjC,GACzC,OAAAD,GAAkBC,EAAa,oBAA/B,C6C+OM+rB,CAA2BjyD,KAAKgM,OAAOk6B,cACzClmC,KAAKgM,OAAOK,eAAe0G,MAAM,mCAC3B,CAAA,EAAA/S,KAAK8I,IAAI+mD,MAA2BlgD,UAFW,CAAA,EAAA,YAErD3B,EAAAvL,0BAMF,OAHAzC,KAAK6P,cAAe,EAGpB,CAAA,EAAM7P,KAAKsQ,mBAAmB,6BAA9BtC,EAAAvL,OAGAovD,EAAUjvC,YAAYjD,iBAAiB,SAAC/V,GACtC,IAAM3C,EAAoC2C,EAAMkH,iBAAmB,CAAA,EAA3DmI,EAAIhS,EAAAgS,KAAKi5C,EAAXpxD,EAAAmG,EAAA,CAAA,SACAoI,EAA+B,iBAAT4J,EAAoB,CAAEA,KAAIA,QAAK5T,EACtD0H,EAAKmD,MAAMtG,EAAM49B,UAAW0qB,EAAsB7iD,EACzD,O7C3QyC,IAAC62B,EAuLDl6B,K6CqF1C,EAEDmlD,EAAA1xD,UAAA0yD,UAAA,iBACE,OAAkB,UAAXnyD,KAAKgM,cAAM,IAAA/E,OAAA,EAAAA,EAAEga,QAGtBkwC,EAAS1xD,UAAAuhB,UAAT,SAAUC,GACHjhB,KAAKgM,QAIVhM,KAAKgM,OAAOK,eAAe0G,MAAM,uBAAwBkO,GACrDA,IAAWjhB,KAAKgM,OAAOiV,aAAqB5b,IAAX4b,IACnCjhB,KAAKgM,OAAOiV,OAASA,EAErBjhB,KAAKoQ,SAASzB,kBAAkB,CAAEsS,OAAQA,I1EhUhB,SAAUA,EAAQtL,GAG9CoN,GAAsBpN,GAAcgN,cAAc9B,eAAeG,UAAUC,GAAQgB,QACvF,C0E6TMmwC,CAAmBnxC,EAAQjhB,KAAKgM,OAAO2J,gBARvC3V,KAAK+P,EAAE3M,KAAKpD,KAAKghB,UAAU7Q,KAAKnQ,KAAMihB,KAY1CkwC,EAAA1xD,UAAA4yD,YAAA,iBACE,OAAkB,UAAXryD,KAAKgM,cAAM,IAAA/E,OAAA,EAAAA,EAAEka,UAGtBgwC,EAAW1xD,UAAAyhB,YAAX,SAAYC,GACLnhB,KAAKgM,QAIVhM,KAAKgM,OAAOK,eAAe0G,MAAM,yBAA0BoO,GACvDA,IAAanhB,KAAKgM,OAAOmV,WAC3BnhB,KAAKgM,OAAOmV,SAAWA,EAEvBnhB,KAAKoQ,SAASzB,kBAAkB,CAAEwS,SAAUA,I1E7UhB,SAAUA,EAAUxL,GAClDoN,GAAsBpN,GAAcgN,cAAc9B,eAAeK,YAAYC,GAAUc,QAC3F,C0E4UMqwC,CAAqBnxC,EAAUnhB,KAAKgM,OAAO2J,gBAR3C3V,KAAK+P,EAAE3M,KAAKpD,KAAKkhB,YAAY/Q,KAAKnQ,KAAMmhB,KAY5CgwC,EAAA1xD,UAAAqN,MAAA,WACE9M,KAAKkhB,YAAYvW,KACjB3K,KAAKghB,eAAU3b,GACfrF,KAAKoQ,SAASlB,WAGhBiiD,EAAA1xD,UAAA0iB,YAAA,mBACE,MAAO,CACLhB,iBAAUla,EAAAjH,KAAKgM,6BAAQmV,SACvBF,eAAQ3V,EAAAtL,KAAKgM,6BAAQiV,OACrB5O,eAAgBrS,KAAKqS,iBAIzB8+C,EAAA1xD,UAAA8yD,UAAA,iBACE,OAAkB,UAAXvyD,KAAKgM,cAAM,IAAA/E,OAAA,EAAAA,EAAEgI,QAGtBkiD,EAAA1xD,UAAA+yD,aAAA,iBACE,OAAkB,UAAXxyD,KAAKgM,cAAM,IAAA/E,OAAA,EAAAA,EAAE8H,WAGtBoiD,EAAY1xD,UAAAmyD,aAAZ,SAAa7iD,SACL0jD,EAA8B,GACpC,IAAKzyD,KAAKgM,OAER,OADAhM,KAAK+P,EAAE3M,KAAKpD,KAAK4xD,aAAazhD,KAAKnQ,KAAM+O,IAClCU,EAAcjO,QAAQC,WAG/B,GAAIsN,IAAc/O,KAAKgM,OAAO+C,UAC5B,OAAOU,EAAcjO,QAAQC,WAG/BzB,KAAKgM,OAAOK,eAAe0G,MAAM,0BAA2BhE,GAE5D,IAAM2jD,EAAoB1yD,KAAKwyD,eAC3BE,IAAsB3jD,GAExB/O,KAAKoQ,SAAStB,mBAAmBC,GAGnC,IAAMoU,EAAgBnjB,KAAKgM,OAAOmX,cAC9BolB,EAAqC,QAAvBthC,EAAAjH,KAAKgM,OAAOu8B,mBAAW,IAAAthC,EAAAA,GAAK,EAE9CjH,KAAKgM,OAAO+C,UAAYA,EACxB/O,KAAKgM,OAAOmX,mBAAgB9d,EAC5BrF,KAAKgM,OAAO27B,YAAc,EAEtBtB,GAAyBrmC,KAAKgM,OAAO47B,mBACnC8qB,GAAqBvvC,GACvBsvC,EAASrvD,KACPpD,KAAKkQ,MAAMm7B,QAA2BhmC,EAAW,CAC/CoZ,UAAWze,KAAKkuC,wBAChBzF,WAAYF,EACZG,WAAYgqB,EACZz5C,KAAMkK,EAAgB,EACtB3E,QAASxe,KAAKmuC,wBACbx+B,SAGP3P,KAAKgM,OAAOmX,cAAgBnjB,KAAKgM,OAAO+C,WAM1C,IAAM4jD,EAAyB3yD,KAAK4yD,6BAA6BrqB,EAAakqB,GAmB9E,OAhBIzyD,KAAKgM,OAAOoD,UACdqjD,EAASrvD,KAAKpD,KAAKkQ,MAAMf,EAAoBnP,KAAKgM,OAAOoD,WAAWO,SAGlE02B,GAAyBrmC,KAAKgM,OAAO47B,kBACvC6qB,EAASrvD,KACPpD,KAAKkQ,MAAMk7B,QAA6B/lC,EAAW,CACjDojC,SAAUkqB,IAA2BpqB,EAAcA,EACnDG,WAAY1oC,KAAKgM,OAAO+C,UACxBkK,KAAMjZ,KAAKgM,OAAOmX,gBACjBxT,SAIP3P,KAAKkuC,wBAA0BluC,KAAKgM,OAAOmV,SAC3CnhB,KAAKmuC,sBAAwBnuC,KAAKgM,OAAOiV,OAClCxR,EAAcjO,QAAQgN,IAAIikD,KAGnCtB,EAAA1xD,UAAAozD,cAAA,WACO7yD,KAAKgM,OAIVhM,KAAKgM,OAAOmX,cAAgBhK,KAAKiK,MAH/BpjB,KAAK+P,EAAE3M,KAAKpD,KAAK6yD,cAAc1iD,KAAKnQ,QAMxCmxD,EAAY1xD,UAAAqzD,aAAZ,SAAa5mB,GACNlsC,KAAKgM,OAIVhM,KAAKgM,OAAOyK,kBAAoBi2B,GAAgBR,GAH9ClsC,KAAK+P,EAAE3M,KAAKpD,KAAK8yD,aAAa3iD,KAAKnQ,KAAMksC,KAM7CilB,EAAA1xD,UAAA2P,SAAA,SAASA,EAAqBC,GAC5B,GAAI44B,GAAgB74B,GAAW,CAC7B,IAAMzD,EAAQyD,EAAS4hB,GACvB5hB,EAAS4hB,GAAK,GACd5hB,EAAW24B,GAA+B,IAAIrgC,EAAYiE,EAC3D,CAOD,OANI0D,eAAAA,EAAcmP,UAChBxe,KAAKghB,UAAU3R,EAAamP,UAE1BnP,eAAAA,EAAcoP,YAChBze,KAAKkhB,YAAY7R,EAAaoP,WAEzBwU,YAAM7jB,SAAQzP,KAAAK,KAACoP,EAAUC,IAGlC8hD,EAAa1xD,UAAAyR,cAAb,SAAcC,EAAmBC,EAA8BhC,EAAqBC,GAClF,GAAI44B,GAAgB74B,GAAW,CAC7B,IAAMzD,EAAQyD,EAAS4hB,GACvB5hB,EAAS4hB,GAAK,GACd5hB,EAAW24B,GAA+B,IAAIrgC,EAAYiE,EAC3D,CACD,OAAOsnB,EAAAxzB,UAAMyR,cAAavR,KAAAK,KAACmR,EAAWC,EAAWhC,EAAUC,IAG7D8hD,EAAA1xD,UAAAkS,QAAA,SAAQA,EAAmBtC,GACzB,GAAI44B,GAAgBt2B,GAAU,CAC5B,IAAMhG,EAAQgG,EAAQqf,GACtBrf,EAAQqf,GAAK,GACbrf,EAAUo2B,GAA+B,IAAI90B,EAAWtH,EACzD,CACD,OAAOsnB,YAAMthB,QAAOhS,KAAAK,KAAC2R,EAAStC,IAGxB8hD,EAAA1xD,UAAAmzD,2BAAR,SAAmCrqB,EAAsBkqB,GACvD,IAAKzyD,KAAKyxD,iBAAmBzxD,KAAKyxD,eAAe9C,uBAC/C,OAAO,EAGT,IAAMY,EAAgBvvD,KAAKyxD,eAAetC,sBAAsB5mB,GAOhE,OANIkqB,EACFA,EAASrvD,KAAKpD,KAAKkQ,MAAMq/C,GAAe5/C,SAExC3P,KAAKkQ,MAAMq/C,GAEbvvD,KAAKgM,OAAOK,eAAe4B,IAAI,0BACxB,GAGHkjD,EAAO1xD,UAAA0S,QAAb,SAAcvI,8EA4BZ,OA3BMmpD,EAAc55C,KAAKiK,MACnB6rC,EAAsBhsC,GAAajjB,KAAKgM,OAAOkX,eAAgBljB,KAAKgM,OAAOmX,eAC3EqsC,EACJxvD,KAAKyxD,gBAAkBzxD,KAAKyxD,eAAejC,kCAG3C5lD,EAAM0F,aAAe87B,IACrBxhC,EAAM0F,aAAe+7B,IACnBzhC,EAAM8+B,YAAc9+B,EAAM8+B,aAAe1oC,KAAKwyD,iBAE5CvD,GAAuBO,GACzBxvD,KAAK4xD,aAAamB,GACdvD,GACFxvD,KAAKgM,OAAOK,eAAe4B,IAAI,4CAEvBghD,GAGVjvD,KAAK4yD,8BAKLhpD,EAAM0F,aAAelP,EAAiBmP,UAAY3F,EAAM4F,kBAC1DxP,KAAKqS,eAAiBrS,KAAKoS,kCAAkCxI,EAAM4F,kBAGrE,CAAA,EAAOyjB,EAAMxzB,UAAA0S,QAAQxS,KAAAK,KAAA4J,OACtB,EAEOunD,EAAiB1xD,UAAA8xD,kBAAzB,SAA0B9iB,GACxB,IACE,IAAMukB,EACD3yD,EAAAA,EAAA,CAAA,EAAAouC,IACHr4B,OAAQq4B,EAAcr4B,OAAOgE,UAAU,EAAG,IAAM,aAElDpa,KAAKgM,OAAOK,eAAe0G,MAAM,4CAA6C3E,KAAKC,UAAU2kD,GAC9F,CAAC,MAAOjyD,GAEPf,KAAKgM,OAAOK,eAAe1I,MAAM,+BAAgC5C,EAClE,GAWHowD,EAAyB1xD,UAAAwzD,0BAAzB,SAA0BruC,GACpBA,EAAa,GAAKA,EAAa,GAI9B5kB,KAAKgM,SACRhM,KAAK0uC,uBAAyB9pB,IAInCusC,CAAD,CA5eA,CAAsCvhD,GCpEzBsjD,GAAiB,WAC5B,IAAMxnD,EAAS,IAAIylD,GACnB,MAAO,CACLpC,KAAMt2C,GACJ/M,EAAOqjD,KAAK5+C,KAAKzE,GACjB,OACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3B5C,IAAK2P,GACH/M,EAAO5C,IAAIqH,KAAKzE,GAChB,MACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,sBAE5C9C,OAAQ6P,GACN/M,EAAO9C,OAAOuH,KAAKzE,GACnB,SACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,sBAE5CwE,MAAOuI,GACL/M,EAAOwE,MAAMC,KAAKzE,GAClB,QACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,2BAE5CuE,SAAUwI,GACR/M,EAAOuE,SAASE,KAAKzE,GACrB,WACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,2BAE5C0D,SAAUqJ,GACR/M,EAAO0D,SAASe,KAAKzE,GACrB,WACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,2BAE5CwF,cAAeuH,GACb/M,EAAOwF,cAAcf,KAAKzE,GAC1B,gBACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,2BAE5C+F,SAAUgH,GACR/M,EAAO+F,SAAStB,KAAKzE,GACrB,WACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,2BAE5CiG,QAAS8G,GACP/M,EAAOiG,QAAQxB,KAAKzE,GACpB,UACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,2BAE5CgD,MAAO+J,GACL/M,EAAOgD,MAAMyB,KAAKzE,GAClB,QACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,gBAAiB,2BAE5CymD,UAAW15C,GACT/M,EAAOymD,UAAUhiD,KAAKzE,GACtB,YACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,SAAU,mBAErCsV,UAAWvI,GACT/M,EAAOsV,UAAU7Q,KAAKzE,GACtB,YACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,SAAU,mBAErC2mD,YAAa55C,GACX/M,EAAO2mD,YAAYliD,KAAKzE,GACxB,cACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,SAAU,qBAErCwV,YAAazI,GACX/M,EAAOwV,YAAY/Q,KAAKzE,GACxB,cACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,SAAU,qBAErCoB,MAAO2L,GACL/M,EAAOoB,MAAMqD,KAAKzE,GAClB,QACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,SAAU,gBAAiB,qBAEtD8mD,aAAc/5C,GACZ/M,EAAO8mD,aAAariD,KAAKzE,GACzB,eACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3BkmD,aAAcn5C,GACZ/M,EAAOkmD,aAAazhD,KAAKzE,GACzB,eACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3BmnD,cAAep6C,GACb/M,EAAOmnD,cAAc1iD,KAAKzE,GAC1B,gBACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3BiH,UAAW8F,GACT/M,EAAOiH,UAAUxC,KAAKzE,GACtB,YACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3BonD,aAAcr6C,GACZ/M,EAAOonD,aAAa3iD,KAAKzE,GACzB,eACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3ByW,YAAa1J,GACX/M,EAAOyW,YAAYhS,KAAKzE,GACxB,cACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3B6mD,UAAW95C,GACT/M,EAAO6mD,UAAUpiD,KAAKzE,GACtB,YACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAE3BunD,0BAA2Bx6C,GACzB/M,EAAOunD,0BAA0B9iD,KAAKzE,GACtC,4BACAoM,GAAmBpM,GACnB0M,GAAgB1M,EAAQ,CAAC,YAG/B,EAEAA,GAAewnD,8MxDnJc,4GyDI3BpqD,GAuBE4C,GAvBC5C,IACH+pD,GAsBEnnD,GAAMmnD,cArBRnkD,GAqBEhD,GAAMgD,MApBR2jD,GAoBE3mD,GApBS2mD,YACXlwC,GAmBEzW,GAAMyW,YAlBRowC,GAkBE7mD,GAAM6mD,UAjBRC,GAiBE9mD,GAjBU8mD,aACZL,GAgBEzmD,GAAMymD,UAfRjhD,GAeExF,GAAMwF,cAdR9B,GAcE1D,GAdM0D,SACR2/C,GAaErjD,GAAMqjD,KAZR9+C,GAYEvE,GAAMuE,SAXRrH,GAWE8C,GAXI9C,OACNkE,GAUEpB,GAAMoB,MATR6E,GASEjG,GAAMiG,QARRuP,GAQExV,GARSwV,YACXzP,GAOE/F,GAAM+F,SANRkB,GAMEjH,GAAMiH,UALRi/C,GAKElmD,GALUkmD,aACZkB,GAIEpnD,GAAMonD,aAHR9xC,GAGEtV,GAAMsV,UAFR9Q,GAEExE,GAFGwE,MACL+iD,GACEvnD,GAAMunD,2c/DZ6B,SAAU3kC,GAC7C,GAAIA,EAAS6kC,UAAW,CACpB,IAAIC,EAAatmC,GAAawB,EAAS6kC,WACnCC,IAT2BlvC,EAUJkvC,GAT3BzmC,EAAQ3iB,OAER2iB,EAAMF,IAAcvI,GASvB,CAZwB,IAAUA,EAC/ByI,CAYR,CgEjBA0mC,CAA0B,CACxBF,UAGF,WACE,GAAwB,oBAAbjtC,SACT,OAGF,IAAMotC,EAAgBptC,SAASotC,cAC/B,GAAIA,eAAAA,EAAejV,IACjB,OAAOiV,EAAcjV,IAGvB,MACF,CAdakV,KAiBb,WACE,IAAMC,EAAcxpD,IAEpB,GAAKwpD,EAAL,CAKA,IAAMC,EAAsB,SAAC99C,GAC3B,IAAMmyB,EAAWorB,KACXM,EAAcxpD,IAMpB,OALIwpD,GAAeA,EAAYvkB,WAAaukB,EAAYvkB,UAAUykB,KAAO/9C,IAGvE69C,EAAYvkB,UAAUykB,IAAI/9C,GAAgBmyB,GAErCA,CACT,EAMA,GAJA0rB,EAAYvkB,UAAY7vC,OAAOkB,OAAOkzD,EAAYvkB,WAAa,CAAE,EAAEA,GAAW,CAC5EikB,eAAgBO,IAGdD,EAAYvkB,UAAU0kB,QAAS,CACjC,IAAMhoD,EAAQ6nD,EAAYvkB,UAAUje,GACpCwiC,EAAYvkB,UAAUje,GAAK,GAC3B1gB,GAAmB2+B,GAAWtjC,GAG9B,IADA,IAAMioD,EAAgBx0D,OAAOwH,KAAK4sD,EAAYvkB,UAAUykB,MAAQ,GACvDjzD,EAAI,EAAGA,EAAImzD,EAAchzD,OAAQH,IAAK,CAC7C,IAAMkV,EAAei+C,EAAcnzD,GAC7BqnC,EAAW1oC,OAAOkB,OAAOkzD,EAAYvkB,UAAUykB,IAAI/9C,GAAe89C,EAAoB99C,IACtFk+C,EAAQ/rB,EAAS9W,GACvB8W,EAAS9W,GAAK,GACd1gB,GAAmBw3B,EAAU+rB,EAC9B,CACF,CA9BA,MAFCz+C,QAAQzR,MAAM,gDAiCjB,CArCD"}