Last active
February 25, 2025 15:53
-
-
Save ruvnet/9449344bb7bf50aa90352063b4ac3e9e to your computer and use it in GitHub Desktop.
Source Code: Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.
This file has been truncated, but you can view the full file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps | |
// Claude Code is a Beta product per Anthropic's Commercial Terms of Service. | |
// By using Claude Code, you agree that all code acceptance or rejection decisions you make, | |
// and the associated conversations in context, constitute Feedback under Anthropic's Commercial Terms, | |
// and may be used to improve Anthropic's products, including training models. | |
// You are responsible for reviewing any code suggestions before use. | |
// (c) Anthropic PBC. All rights reserved. Use is subject to Anthropic's Commercial Terms of Service (https://www.anthropic.com/legal/commercial-terms). | |
/** | |
* CLI entry point for Claude Code | |
* This file is kept minimal and delegates to the modular implementation | |
*/ | |
import path from 'path'; | |
import { | |
fileURLToPath | |
} from 'url'; | |
// Get the directory name of the current module | |
const __filename = fileURLToPath(import.meta.url); | |
const __dirname = path.dirname(__filename); | |
// Import the main entry point | |
import './src/index.mjs'; | |
// Version: 0.2.9 | |
import { | |
createRequire as CU2 | |
} from "node:module"; | |
var IU2 = Object.create; | |
var { | |
getPrototypeOf: dU2, | |
defineProperty: ie, | |
getOwnPropertyNames: GU2 | |
} = Object; | |
var ZU2 = Object.prototype.hasOwnProperty; | |
var J1 = (I, d, G) => { | |
G = I != null ? IU2(dU2(I)) : {}; | |
let Z = d || !I || !I.__esModule ? ie(G, "default", { | |
value: I, | |
enumerable: !0 | |
}) : G; | |
for (let C of GU2(I)) | |
if (!ZU2.call(Z, C)) ie(Z, C, { | |
get: () => I[C], | |
enumerable: !0 | |
}); | |
return Z | |
}; | |
var Y = (I, d) => () => (d || I((d = { | |
exports: {} | |
}).exports, d), d.exports); | |
var Kv = (I, d) => { | |
for (var G in d) ie(I, G, { | |
get: d[G], | |
enumerable: !0, | |
configurable: !0, | |
set: (Z) => d[G] = () => Z | |
}) | |
}; | |
var Gw = (I, d) => () => (I && (d = I(I = 0)), d); | |
var B1 = CU2(import.meta.url); | |
var xG = Y((eN1) => { | |
Object.defineProperty(eN1, "__esModule", { | |
value: !0 | |
}); | |
var aN1 = Object.prototype.toString; | |
function WU2(I) { | |
switch (aN1.call(I)) { | |
case "[object Error]": | |
case "[object Exception]": | |
case "[object DOMException]": | |
return !0; | |
default: | |
return IO(I, Error) | |
} | |
} | |
function GN(I, d) { | |
return aN1.call(I) === `[object ${d}]` | |
} | |
function wU2(I) { | |
return GN(I, "ErrorEvent") | |
} | |
function BU2(I) { | |
return GN(I, "DOMError") | |
} | |
function AU2(I) { | |
return GN(I, "DOMException") | |
} | |
function VU2(I) { | |
return GN(I, "String") | |
} | |
function sN1(I) { | |
return typeof I === "object" && I !== null && "__sentry_template_string__" in I && "__sentry_template_values__" in I | |
} | |
function XU2(I) { | |
return I === null || sN1(I) || typeof I !== "object" && typeof I !== "function" | |
} | |
function oN1(I) { | |
return GN(I, "Object") | |
} | |
function YU2(I) { | |
return typeof Event !== "undefined" && IO(I, Event) | |
} | |
function _U2(I) { | |
return typeof Element !== "undefined" && IO(I, Element) | |
} | |
function DU2(I) { | |
return GN(I, "RegExp") | |
} | |
function HU2(I) { | |
return Boolean(I && I.then && typeof I.then === "function") | |
} | |
function FU2(I) { | |
return oN1(I) && "nativeEvent" in I && "preventDefault" in I && "stopPropagation" in I | |
} | |
function gU2(I) { | |
return typeof I === "number" && I !== I | |
} | |
function IO(I, d) { | |
try { | |
return I instanceof d | |
} catch (G) { | |
return !1 | |
} | |
} | |
function JU2(I) { | |
return !!(typeof I === "object" && I !== null && (I.__isVue || I._isVue)) | |
} | |
eN1.isDOMError = BU2; | |
eN1.isDOMException = AU2; | |
eN1.isElement = _U2; | |
eN1.isError = WU2; | |
eN1.isErrorEvent = wU2; | |
eN1.isEvent = YU2; | |
eN1.isInstanceOf = IO; | |
eN1.isNaN = gU2; | |
eN1.isParameterizedString = sN1; | |
eN1.isPlainObject = oN1; | |
eN1.isPrimitive = XU2; | |
eN1.isRegExp = DU2; | |
eN1.isString = VU2; | |
eN1.isSyntheticEvent = FU2; | |
eN1.isThenable = HU2; | |
eN1.isVueViewModel = JU2 | |
}); | |
var Nv = Y((Iz1) => { | |
Object.defineProperty(Iz1, "__esModule", { | |
value: !0 | |
}); | |
var dO = xG(); | |
function uU2(I, d = 0) { | |
if (typeof I !== "string" || d === 0) return I; | |
return I.length <= d ? I : `${I.slice(0,d)}...` | |
} | |
function TU2(I, d) { | |
let G = I, | |
Z = G.length; | |
if (Z <= 150) return G; | |
if (d > Z) d = Z; | |
let C = Math.max(d - 60, 0); | |
if (C < 5) C = 0; | |
let W = Math.min(C + 140, Z); | |
if (W > Z - 5) W = Z; | |
if (W === Z) C = Math.max(W - 140, 0); | |
if (G = G.slice(C, W), C > 0) G = `'{snip} ${G}`; | |
if (W < Z) G += " {snip}"; | |
return G | |
} | |
function OU2(I, d) { | |
if (!Array.isArray(I)) return ""; | |
let G = []; | |
for (let Z = 0; Z < I.length; Z++) { | |
let C = I[Z]; | |
try { | |
if (dO.isVueViewModel(C)) G.push("[VueViewModel]"); | |
else G.push(String(C)) | |
} catch (W) { | |
G.push("[value cannot be serialized]") | |
} | |
} | |
return G.join(d) | |
} | |
function tN1(I, d, G = !1) { | |
if (!dO.isString(I)) return !1; | |
if (dO.isRegExp(d)) return d.test(I); | |
if (dO.isString(d)) return G ? I === d : I.includes(d); | |
return !1 | |
} | |
function mU2(I, d = [], G = !1) { | |
return d.some((Z) => tN1(I, Z, G)) | |
} | |
Iz1.isMatchingPattern = tN1; | |
Iz1.safeJoin = OU2; | |
Iz1.snipLine = TU2; | |
Iz1.stringMatchesSomePattern = mU2; | |
Iz1.truncate = uU2 | |
}); | |
var Cz1 = Y((Zz1) => { | |
Object.defineProperty(Zz1, "__esModule", { | |
value: !0 | |
}); | |
var ne = xG(), | |
xU2 = Nv(); | |
function cU2(I, d, G = 250, Z, C, W, w) { | |
if (!W.exception || !W.exception.values || !w || !ne.isInstanceOf(w.originalException, Error)) return; | |
let B = W.exception.values.length > 0 ? W.exception.values[W.exception.values.length - 1] : void 0; | |
if (B) W.exception.values = pU2(re(I, d, C, w.originalException, Z, W.exception.values, B, 0), G) | |
} | |
function re(I, d, G, Z, C, W, w, B) { | |
if (W.length >= G + 1) return W; | |
let A = [...W]; | |
if (ne.isInstanceOf(Z[C], Error)) { | |
dz1(w, B); | |
let V = I(d, Z[C]), | |
X = A.length; | |
Gz1(V, C, X, B), A = re(I, d, G, Z[C], C, [V, ...A], V, X) | |
} | |
if (Array.isArray(Z.errors)) Z.errors.forEach((V, X) => { | |
if (ne.isInstanceOf(V, Error)) { | |
dz1(w, B); | |
let _ = I(d, V), | |
F = A.length; | |
Gz1(_, `errors[${X}]`, F, B), A = re(I, d, G, V, C, [_, ...A], _, F) | |
} | |
}); | |
return A | |
} | |
function dz1(I, d) { | |
I.mechanism = I.mechanism || { | |
type: "generic", | |
handled: !0 | |
}, I.mechanism = { | |
...I.mechanism, | |
...I.type === "AggregateError" && { | |
is_exception_group: !0 | |
}, | |
exception_id: d | |
} | |
} | |
function Gz1(I, d, G, Z) { | |
I.mechanism = I.mechanism || { | |
type: "generic", | |
handled: !0 | |
}, I.mechanism = { | |
...I.mechanism, | |
type: "chained", | |
source: d, | |
exception_id: G, | |
parent_id: Z | |
} | |
} | |
function pU2(I, d) { | |
return I.map((G) => { | |
if (G.value) G.value = xU2.truncate(G.value, d); | |
return G | |
}) | |
} | |
Zz1.applyAggregateErrorsToEvent = cU2 | |
}); | |
var K7 = Y((Wz1) => { | |
Object.defineProperty(Wz1, "__esModule", { | |
value: !0 | |
}); | |
function GO(I) { | |
return I && I.Math == Math ? I : void 0 | |
} | |
var ae = typeof globalThis == "object" && GO(globalThis) || typeof window == "object" && GO(window) || typeof self == "object" && GO(self) || typeof global == "object" && GO(global) || function() { | |
return this | |
}() || {}; | |
function nU2() { | |
return ae | |
} | |
function rU2(I, d, G) { | |
let Z = G || ae, | |
C = Z.__SENTRY__ = Z.__SENTRY__ || {}; | |
return C[I] || (C[I] = d()) | |
} | |
Wz1.GLOBAL_OBJ = ae; | |
Wz1.getGlobalObject = nU2; | |
Wz1.getGlobalSingleton = rU2 | |
}); | |
var se = Y((wz1) => { | |
Object.defineProperty(wz1, "__esModule", { | |
value: !0 | |
}); | |
var eU2 = xG(), | |
tU2 = K7(), | |
ZN = tU2.getGlobalObject(), | |
Iv2 = 80; | |
function dv2(I, d = {}) { | |
if (!I) return "<unknown>"; | |
try { | |
let G = I, | |
Z = 5, | |
C = [], | |
W = 0, | |
w = 0, | |
B = " > ", | |
A = B.length, | |
V, X = Array.isArray(d) ? d : d.keyAttrs, | |
_ = !Array.isArray(d) && d.maxStringLength || Iv2; | |
while (G && W++ < Z) { | |
if (V = Gv2(G, X), V === "html" || W > 1 && w + C.length * A + V.length >= _) break; | |
C.push(V), w += V.length, G = G.parentNode | |
} | |
return C.reverse().join(B) | |
} catch (G) { | |
return "<unknown>" | |
} | |
} | |
function Gv2(I, d) { | |
let G = I, | |
Z = [], | |
C, W, w, B, A; | |
if (!G || !G.tagName) return ""; | |
if (ZN.HTMLElement) { | |
if (G instanceof HTMLElement && G.dataset && G.dataset.sentryComponent) return G.dataset.sentryComponent | |
} | |
Z.push(G.tagName.toLowerCase()); | |
let V = d && d.length ? d.filter((_) => G.getAttribute(_)).map((_) => [_, G.getAttribute(_)]) : null; | |
if (V && V.length) V.forEach((_) => { | |
Z.push(`[${_[0]}="${_[1]}"]`) | |
}); | |
else { | |
if (G.id) Z.push(`#${G.id}`); | |
if (C = G.className, C && eU2.isString(C)) { | |
W = C.split(/\s+/); | |
for (A = 0; A < W.length; A++) Z.push(`.${W[A]}`) | |
} | |
} | |
let X = ["aria-label", "type", "name", "title", "alt"]; | |
for (A = 0; A < X.length; A++) | |
if (w = X[A], B = G.getAttribute(w), B) Z.push(`[${w}="${B}"]`); | |
return Z.join("") | |
} | |
function Zv2() { | |
try { | |
return ZN.document.location.href | |
} catch (I) { | |
return "" | |
} | |
} | |
function Cv2(I) { | |
if (ZN.document && ZN.document.querySelector) return ZN.document.querySelector(I); | |
return null | |
} | |
function Wv2(I) { | |
if (!ZN.HTMLElement) return null; | |
let d = I, | |
G = 5; | |
for (let Z = 0; Z < G; Z++) { | |
if (!d) return null; | |
if (d instanceof HTMLElement && d.dataset.sentryComponent) return d.dataset.sentryComponent; | |
d = d.parentNode | |
} | |
return null | |
} | |
wz1.getComponentName = Wv2; | |
wz1.getDomElement = Cv2; | |
wz1.getLocationHref = Zv2; | |
wz1.htmlTreeAsString = dv2 | |
}); | |
var Zw = Y((Bz1) => { | |
Object.defineProperty(Bz1, "__esModule", { | |
value: !0 | |
}); | |
var Xv2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
Bz1.DEBUG_BUILD = Xv2 | |
}); | |
var DC = Y((Vz1) => { | |
Object.defineProperty(Vz1, "__esModule", { | |
value: !0 | |
}); | |
var _v2 = Zw(), | |
oe = K7(), | |
Dv2 = "Sentry Logger ", | |
ee = ["debug", "info", "warn", "error", "log", "assert", "trace"], | |
te = {}; | |
function Az1(I) { | |
if (!("console" in oe.GLOBAL_OBJ)) return I(); | |
let d = oe.GLOBAL_OBJ.console, | |
G = {}, | |
Z = Object.keys(te); | |
Z.forEach((C) => { | |
let W = te[C]; | |
G[C] = d[C], d[C] = W | |
}); | |
try { | |
return I() | |
} finally { | |
Z.forEach((C) => { | |
d[C] = G[C] | |
}) | |
} | |
} | |
function Hv2() { | |
let I = !1, | |
d = { | |
enable: () => { | |
I = !0 | |
}, | |
disable: () => { | |
I = !1 | |
}, | |
isEnabled: () => I | |
}; | |
if (_v2.DEBUG_BUILD) ee.forEach((G) => { | |
d[G] = (...Z) => { | |
if (I) Az1(() => { | |
oe.GLOBAL_OBJ.console[G](`${Dv2}[${G}]:`, ...Z) | |
}) | |
} | |
}); | |
else ee.forEach((G) => { | |
d[G] = () => { | |
return | |
} | |
}); | |
return d | |
} | |
var Fv2 = Hv2(); | |
Vz1.CONSOLE_LEVELS = ee; | |
Vz1.consoleSandbox = Az1; | |
Vz1.logger = Fv2; | |
Vz1.originalConsoleMethods = te | |
}); | |
var It = Y((_z1) => { | |
Object.defineProperty(_z1, "__esModule", { | |
value: !0 | |
}); | |
var zv2 = Zw(), | |
zv = DC(), | |
Qv2 = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/; | |
function fv2(I) { | |
return I === "http" || I === "https" | |
} | |
function qv2(I, d = !1) { | |
let { | |
host: G, | |
path: Z, | |
pass: C, | |
port: W, | |
projectId: w, | |
protocol: B, | |
publicKey: A | |
} = I; | |
return `${B}://${A}${d&&C?`:${C}`:""}@${G}${W?`:${W}`:""}/${Z?`${Z}/`:Z}${w}` | |
} | |
function Xz1(I) { | |
let d = Qv2.exec(I); | |
if (!d) { | |
zv.consoleSandbox(() => { | |
console.error(`Invalid Sentry Dsn: ${I}`) | |
}); | |
return | |
} | |
let [G, Z, C = "", W, w = "", B] = d.slice(1), A = "", V = B, X = V.split("/"); | |
if (X.length > 1) A = X.slice(0, -1).join("/"), V = X.pop(); | |
if (V) { | |
let _ = V.match(/^\d+/); | |
if (_) V = _[0] | |
} | |
return Yz1({ | |
host: W, | |
pass: C, | |
path: A, | |
projectId: V, | |
port: w, | |
protocol: G, | |
publicKey: Z | |
}) | |
} | |
function Yz1(I) { | |
return { | |
protocol: I.protocol, | |
publicKey: I.publicKey || "", | |
pass: I.pass || "", | |
host: I.host, | |
port: I.port || "", | |
path: I.path || "", | |
projectId: I.projectId | |
} | |
} | |
function Rv2(I) { | |
if (!zv2.DEBUG_BUILD) return !0; | |
let { | |
port: d, | |
projectId: G, | |
protocol: Z | |
} = I; | |
if (["protocol", "publicKey", "host", "projectId"].find((w) => { | |
if (!I[w]) return zv.logger.error(`Invalid Sentry Dsn: ${w} missing`), !0; | |
return !1 | |
})) return !1; | |
if (!G.match(/^\d+$/)) return zv.logger.error(`Invalid Sentry Dsn: Invalid projectId ${G}`), !1; | |
if (!fv2(Z)) return zv.logger.error(`Invalid Sentry Dsn: Invalid protocol ${Z}`), !1; | |
if (d && isNaN(parseInt(d, 10))) return zv.logger.error(`Invalid Sentry Dsn: Invalid port ${d}`), !1; | |
return !0 | |
} | |
function Uv2(I) { | |
let d = typeof I === "string" ? Xz1(I) : Yz1(I); | |
if (!d || !Rv2(d)) return; | |
return d | |
} | |
_z1.dsnFromString = Xz1; | |
_z1.dsnToString = qv2; | |
_z1.makeDsn = Uv2 | |
}); | |
var dt = Y((Hz1) => { | |
Object.defineProperty(Hz1, "__esModule", { | |
value: !0 | |
}); | |
class Dz1 extends Error { | |
constructor(I, d = "warn") { | |
super(I); | |
this.message = I, this.name = new.target.prototype.constructor.name, Object.setPrototypeOf(this, new.target.prototype), this.logLevel = d | |
} | |
} | |
Hz1.SentryError = Dz1 | |
}); | |
var cG = Y((Qz1) => { | |
Object.defineProperty(Qz1, "__esModule", { | |
value: !0 | |
}); | |
var Lv2 = se(), | |
yv2 = Zw(), | |
CN = xG(), | |
Pv2 = DC(), | |
Fz1 = Nv(); | |
function $v2(I, d, G) { | |
if (!(d in I)) return; | |
let Z = I[d], | |
C = G(Z); | |
if (typeof C === "function") Nz1(C, Z); | |
I[d] = C | |
} | |
function Kz1(I, d, G) { | |
try { | |
Object.defineProperty(I, d, { | |
value: G, | |
writable: !0, | |
configurable: !0 | |
}) | |
} catch (Z) { | |
yv2.DEBUG_BUILD && Pv2.logger.log(`Failed to add non-enumerable property "${d}" to object`, I) | |
} | |
} | |
function Nz1(I, d) { | |
try { | |
let G = d.prototype || {}; | |
I.prototype = d.prototype = G, Kz1(I, "__sentry_original__", d) | |
} catch (G) {} | |
} | |
function uv2(I) { | |
return I.__sentry_original__ | |
} | |
function Tv2(I) { | |
return Object.keys(I).map((d) => `${encodeURIComponent(d)}=${encodeURIComponent(I[d])}`).join("&") | |
} | |
function zz1(I) { | |
if (CN.isError(I)) return { | |
message: I.message, | |
name: I.name, | |
stack: I.stack, | |
...Jz1(I) | |
}; | |
else if (CN.isEvent(I)) { | |
let d = { | |
type: I.type, | |
target: gz1(I.target), | |
currentTarget: gz1(I.currentTarget), | |
...Jz1(I) | |
}; | |
if (typeof CustomEvent !== "undefined" && CN.isInstanceOf(I, CustomEvent)) d.detail = I.detail; | |
return d | |
} else return I | |
} | |
function gz1(I) { | |
try { | |
return CN.isElement(I) ? Lv2.htmlTreeAsString(I) : Object.prototype.toString.call(I) | |
} catch (d) { | |
return "<unknown>" | |
} | |
} | |
function Jz1(I) { | |
if (typeof I === "object" && I !== null) { | |
let d = {}; | |
for (let G in I) | |
if (Object.prototype.hasOwnProperty.call(I, G)) d[G] = I[G]; | |
return d | |
} else return {} | |
} | |
function Ov2(I, d = 40) { | |
let G = Object.keys(zz1(I)); | |
if (G.sort(), !G.length) return "[object has no keys]"; | |
if (G[0].length >= d) return Fz1.truncate(G[0], d); | |
for (let Z = G.length; Z > 0; Z--) { | |
let C = G.slice(0, Z).join(", "); | |
if (C.length > d) continue; | |
if (Z === G.length) return C; | |
return Fz1.truncate(C, d) | |
} | |
return "" | |
} | |
function mv2(I) { | |
return Gt(I, new Map) | |
} | |
function Gt(I, d) { | |
if (lv2(I)) { | |
let G = d.get(I); | |
if (G !== void 0) return G; | |
let Z = {}; | |
d.set(I, Z); | |
for (let C of Object.keys(I)) | |
if (typeof I[C] !== "undefined") Z[C] = Gt(I[C], d); | |
return Z | |
} | |
if (Array.isArray(I)) { | |
let G = d.get(I); | |
if (G !== void 0) return G; | |
let Z = []; | |
return d.set(I, Z), I.forEach((C) => { | |
Z.push(Gt(C, d)) | |
}), Z | |
} | |
return I | |
} | |
function lv2(I) { | |
if (!CN.isPlainObject(I)) return !1; | |
try { | |
let d = Object.getPrototypeOf(I).constructor.name; | |
return !d || d === "Object" | |
} catch (d) { | |
return !0 | |
} | |
} | |
function bv2(I) { | |
let d; | |
switch (!0) { | |
case (I === void 0 || I === null): | |
d = new String(I); | |
break; | |
case (typeof I === "symbol" || typeof I === "bigint"): | |
d = Object(I); | |
break; | |
case CN.isPrimitive(I): | |
d = new I.constructor(I); | |
break; | |
default: | |
d = I; | |
break | |
} | |
return d | |
} | |
Qz1.addNonEnumerableProperty = Kz1; | |
Qz1.convertToPlainObject = zz1; | |
Qz1.dropUndefinedKeys = mv2; | |
Qz1.extractExceptionKeysForMessage = Ov2; | |
Qz1.fill = $v2; | |
Qz1.getOriginalFunction = uv2; | |
Qz1.markFunctionWrapped = Nz1; | |
Qz1.objectify = bv2; | |
Qz1.urlEncode = Tv2 | |
}); | |
var ZO = Y((qz1) => { | |
Object.defineProperty(qz1, "__esModule", { | |
value: !0 | |
}); | |
function fz1(I, d = !1) { | |
return !(d || I && !I.startsWith("/") && !I.match(/^[A-Z]:/) && !I.startsWith(".") && !I.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//)) && I !== void 0 && !I.includes("node_modules/") | |
} | |
function av2(I) { | |
let d = /^\s*[-]{4,}$/, | |
G = /at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/; | |
return (Z) => { | |
let C = Z.match(G); | |
if (C) { | |
let W, w, B, A, V; | |
if (C[1]) { | |
B = C[1]; | |
let F = B.lastIndexOf("."); | |
if (B[F - 1] === ".") F--; | |
if (F > 0) { | |
W = B.slice(0, F), w = B.slice(F + 1); | |
let g = W.indexOf(".Module"); | |
if (g > 0) B = B.slice(g + 1), W = W.slice(0, g) | |
} | |
A = void 0 | |
} | |
if (w) A = W, V = w; | |
if (w === "<anonymous>") V = void 0, B = void 0; | |
if (B === void 0) V = V || "<anonymous>", B = A ? `${A}.${V}` : V; | |
let X = C[2] && C[2].startsWith("file://") ? C[2].slice(7) : C[2], | |
_ = C[5] === "native"; | |
if (X && X.match(/\/[A-Z]:/)) X = X.slice(1); | |
if (!X && C[5] && !_) X = C[5]; | |
return { | |
filename: X, | |
module: I ? I(X) : void 0, | |
function: B, | |
lineno: parseInt(C[3], 10) || void 0, | |
colno: parseInt(C[4], 10) || void 0, | |
in_app: fz1(X, _) | |
} | |
} | |
if (Z.match(d)) return { | |
filename: Z | |
}; | |
return | |
} | |
} | |
qz1.filenameIsInApp = fz1; | |
qz1.node = av2 | |
}); | |
var CO = Y((Lz1) => { | |
Object.defineProperty(Lz1, "__esModule", { | |
value: !0 | |
}); | |
var vz1 = ZO(), | |
Ez1 = 50, | |
Rz1 = /\(error: (.*)\)/, | |
Uz1 = /captureMessage|captureException/; | |
function Mz1(...I) { | |
let d = I.sort((G, Z) => G[0] - Z[0]).map((G) => G[1]); | |
return (G, Z = 0) => { | |
let C = [], | |
W = G.split(` | |
`); | |
for (let w = Z; w < W.length; w++) { | |
let B = W[w]; | |
if (B.length > 1024) continue; | |
let A = Rz1.test(B) ? B.replace(Rz1, "$1") : B; | |
if (A.match(/\S*Error: /)) continue; | |
for (let V of d) { | |
let X = V(A); | |
if (X) { | |
C.push(X); | |
break | |
} | |
} | |
if (C.length >= Ez1) break | |
} | |
return Sz1(C) | |
} | |
} | |
function ev2(I) { | |
if (Array.isArray(I)) return Mz1(...I); | |
return I | |
} | |
function Sz1(I) { | |
if (!I.length) return []; | |
let d = Array.from(I); | |
if (/sentryWrapped/.test(d[d.length - 1].function || "")) d.pop(); | |
if (d.reverse(), Uz1.test(d[d.length - 1].function || "")) { | |
if (d.pop(), Uz1.test(d[d.length - 1].function || "")) d.pop() | |
} | |
return d.slice(0, Ez1).map((G) => ({ | |
...G, | |
filename: G.filename || d[d.length - 1].filename, | |
function: G.function || "?" | |
})) | |
} | |
var Zt = "<anonymous>"; | |
function tv2(I) { | |
try { | |
if (!I || typeof I !== "function") return Zt; | |
return I.name || Zt | |
} catch (d) { | |
return Zt | |
} | |
} | |
function IE2(I) { | |
return [90, vz1.node(I)] | |
} | |
Lz1.filenameIsInApp = vz1.filenameIsInApp; | |
Lz1.createStackParser = Mz1; | |
Lz1.getFunctionName = tv2; | |
Lz1.nodeStackLineParser = IE2; | |
Lz1.stackParserFromStackParserOptions = ev2; | |
Lz1.stripSentryFramesAndReverse = Sz1 | |
}); | |
var zA = Y((Pz1) => { | |
Object.defineProperty(Pz1, "__esModule", { | |
value: !0 | |
}); | |
var BE2 = Zw(), | |
AE2 = DC(), | |
VE2 = CO(), | |
WN = {}, | |
yz1 = {}; | |
function XE2(I, d) { | |
WN[I] = WN[I] || [], WN[I].push(d) | |
} | |
function YE2() { | |
Object.keys(WN).forEach((I) => { | |
WN[I] = void 0 | |
}) | |
} | |
function _E2(I, d) { | |
if (!yz1[I]) d(), yz1[I] = !0 | |
} | |
function DE2(I, d) { | |
let G = I && WN[I]; | |
if (!G) return; | |
for (let Z of G) try { | |
Z(d) | |
} catch (C) { | |
BE2.DEBUG_BUILD && AE2.logger.error(`Error while triggering instrumentation handler. | |
Type: ${I} | |
Name: ${VE2.getFunctionName(Z)} | |
Error:`, C) | |
} | |
} | |
Pz1.addHandler = XE2; | |
Pz1.maybeInstrument = _E2; | |
Pz1.resetInstrumentationHandlers = YE2; | |
Pz1.triggerHandlers = DE2 | |
}); | |
var wt = Y(($z1) => { | |
Object.defineProperty($z1, "__esModule", { | |
value: !0 | |
}); | |
var Ct = DC(), | |
KE2 = cG(), | |
WO = K7(), | |
Wt = zA(); | |
function NE2(I) { | |
Wt.addHandler("console", I), Wt.maybeInstrument("console", zE2) | |
} | |
function zE2() { | |
if (!("console" in WO.GLOBAL_OBJ)) return; | |
Ct.CONSOLE_LEVELS.forEach(function(I) { | |
if (!(I in WO.GLOBAL_OBJ.console)) return; | |
KE2.fill(WO.GLOBAL_OBJ.console, I, function(d) { | |
return Ct.originalConsoleMethods[I] = d, | |
function(...G) { | |
let Z = { | |
args: G, | |
level: I | |
}; | |
Wt.triggerHandlers("console", Z); | |
let C = Ct.originalConsoleMethods[I]; | |
C && C.apply(WO.GLOBAL_OBJ.console, G) | |
} | |
}) | |
}) | |
} | |
$z1.addConsoleInstrumentationHandler = NE2 | |
}); | |
var Qv = Y((Tz1) => { | |
Object.defineProperty(Tz1, "__esModule", { | |
value: !0 | |
}); | |
var fE2 = cG(), | |
Bt = Nv(), | |
qE2 = K7(); | |
function RE2() { | |
let I = qE2.GLOBAL_OBJ, | |
d = I.crypto || I.msCrypto, | |
G = () => Math.random() * 16; | |
try { | |
if (d && d.randomUUID) return d.randomUUID().replace(/-/g, ""); | |
if (d && d.getRandomValues) G = () => { | |
let Z = new Uint8Array(1); | |
return d.getRandomValues(Z), Z[0] | |
} | |
} catch (Z) {} | |
return ([1e7] + 1000 + 4000 + 8000 + 100000000000).replace(/[018]/g, (Z) => (Z ^ (G() & 15) >> Z / 4).toString(16)) | |
} | |
function uz1(I) { | |
return I.exception && I.exception.values ? I.exception.values[0] : void 0 | |
} | |
function UE2(I) { | |
let { | |
message: d, | |
event_id: G | |
} = I; | |
if (d) return d; | |
let Z = uz1(I); | |
if (Z) { | |
if (Z.type && Z.value) return `${Z.type}: ${Z.value}`; | |
return Z.type || Z.value || G || "<unknown>" | |
} | |
return G || "<unknown>" | |
} | |
function vE2(I, d, G) { | |
let Z = I.exception = I.exception || {}, | |
C = Z.values = Z.values || [], | |
W = C[0] = C[0] || {}; | |
if (!W.value) W.value = d || ""; | |
if (!W.type) W.type = G || "Error" | |
} | |
function EE2(I, d) { | |
let G = uz1(I); | |
if (!G) return; | |
let Z = { | |
type: "generic", | |
handled: !0 | |
}, | |
C = G.mechanism; | |
if (G.mechanism = { | |
...Z, | |
...C, | |
...d | |
}, d && "data" in d) { | |
let W = { | |
...C && C.data, | |
...d.data | |
}; | |
G.mechanism.data = W | |
} | |
} | |
var ME2 = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/; | |
function SE2(I) { | |
let d = I.match(ME2) || [], | |
G = parseInt(d[1], 10), | |
Z = parseInt(d[2], 10), | |
C = parseInt(d[3], 10); | |
return { | |
buildmetadata: d[5], | |
major: isNaN(G) ? void 0 : G, | |
minor: isNaN(Z) ? void 0 : Z, | |
patch: isNaN(C) ? void 0 : C, | |
prerelease: d[4] | |
} | |
} | |
function LE2(I, d, G = 5) { | |
if (d.lineno === void 0) return; | |
let Z = I.length, | |
C = Math.max(Math.min(Z - 1, d.lineno - 1), 0); | |
d.pre_context = I.slice(Math.max(0, C - G), C).map((W) => Bt.snipLine(W, 0)), d.context_line = Bt.snipLine(I[Math.min(Z - 1, C)], d.colno || 0), d.post_context = I.slice(Math.min(C + 1, Z), C + 1 + G).map((W) => Bt.snipLine(W, 0)) | |
} | |
function yE2(I) { | |
if (I && I.__sentry_captured__) return !0; | |
try { | |
fE2.addNonEnumerableProperty(I, "__sentry_captured__", !0) | |
} catch (d) {} | |
return !1 | |
} | |
function PE2(I) { | |
return Array.isArray(I) ? I : [I] | |
} | |
Tz1.addContextToFrame = LE2; | |
Tz1.addExceptionMechanism = EE2; | |
Tz1.addExceptionTypeValue = vE2; | |
Tz1.arrayify = PE2; | |
Tz1.checkOrSetAlreadyCaught = yE2; | |
Tz1.getEventDescription = UE2; | |
Tz1.parseSemver = SE2; | |
Tz1.uuid4 = RE2 | |
}); | |
var Yt = Y((bz1) => { | |
Object.defineProperty(bz1, "__esModule", { | |
value: !0 | |
}); | |
var jE2 = Qv(), | |
wO = cG(), | |
kE2 = K7(), | |
At = zA(), | |
wN = kE2.GLOBAL_OBJ, | |
xE2 = 1000, | |
Oz1, Vt, Xt; | |
function cE2(I) { | |
At.addHandler("dom", I), At.maybeInstrument("dom", lz1) | |
} | |
function lz1() { | |
if (!wN.document) return; | |
let I = At.triggerHandlers.bind(null, "dom"), | |
d = mz1(I, !0); | |
wN.document.addEventListener("click", d, !1), wN.document.addEventListener("keypress", d, !1), ["EventTarget", "Node"].forEach((G) => { | |
let Z = wN[G] && wN[G].prototype; | |
if (!Z || !Z.hasOwnProperty || !Z.hasOwnProperty("addEventListener")) return; | |
wO.fill(Z, "addEventListener", function(C) { | |
return function(W, w, B) { | |
if (W === "click" || W == "keypress") try { | |
let A = this, | |
V = A.__sentry_instrumentation_handlers__ = A.__sentry_instrumentation_handlers__ || {}, | |
X = V[W] = V[W] || { | |
refCount: 0 | |
}; | |
if (!X.handler) { | |
let _ = mz1(I); | |
X.handler = _, C.call(this, W, _, B) | |
} | |
X.refCount++ | |
} catch (A) {} | |
return C.call(this, W, w, B) | |
} | |
}), wO.fill(Z, "removeEventListener", function(C) { | |
return function(W, w, B) { | |
if (W === "click" || W == "keypress") try { | |
let A = this, | |
V = A.__sentry_instrumentation_handlers__ || {}, | |
X = V[W]; | |
if (X) { | |
if (X.refCount--, X.refCount <= 0) C.call(this, W, X.handler, B), X.handler = void 0, delete V[W]; | |
if (Object.keys(V).length === 0) delete A.__sentry_instrumentation_handlers__ | |
} | |
} catch (A) {} | |
return C.call(this, W, w, B) | |
} | |
}) | |
}) | |
} | |
function pE2(I) { | |
if (I.type !== Vt) return !1; | |
try { | |
if (!I.target || I.target._sentryId !== Xt) return !1 | |
} catch (d) {} | |
return !0 | |
} | |
function iE2(I, d) { | |
if (I !== "keypress") return !1; | |
if (!d || !d.tagName) return !0; | |
if (d.tagName === "INPUT" || d.tagName === "TEXTAREA" || d.isContentEditable) return !1; | |
return !0 | |
} | |
function mz1(I, d = !1) { | |
return (G) => { | |
if (!G || G._sentryCaptured) return; | |
let Z = nE2(G); | |
if (iE2(G.type, Z)) return; | |
if (wO.addNonEnumerableProperty(G, "_sentryCaptured", !0), Z && !Z._sentryId) wO.addNonEnumerableProperty(Z, "_sentryId", jE2.uuid4()); | |
let C = G.type === "keypress" ? "input" : G.type; | |
if (!pE2(G)) I({ | |
event: G, | |
name: C, | |
global: d | |
}), Vt = G.type, Xt = Z ? Z._sentryId : void 0; | |
clearTimeout(Oz1), Oz1 = wN.setTimeout(() => { | |
Xt = void 0, Vt = void 0 | |
}, xE2) | |
} | |
} | |
function nE2(I) { | |
try { | |
return I.target | |
} catch (d) { | |
return null | |
} | |
} | |
bz1.addClickKeypressInstrumentationHandler = cE2; | |
bz1.instrumentDOM = lz1 | |
}); | |
var Ht = Y((hz1) => { | |
Object.defineProperty(hz1, "__esModule", { | |
value: !0 | |
}); | |
var sE2 = Zw(), | |
oE2 = DC(), | |
eE2 = K7(), | |
BO = eE2.getGlobalObject(); | |
function tE2() { | |
try { | |
return new ErrorEvent(""), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function IM2() { | |
try { | |
return new DOMError(""), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function dM2() { | |
try { | |
return new DOMException(""), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function Dt() { | |
if (!("fetch" in BO)) return !1; | |
try { | |
return new Request("http://www.example.com"), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function _t(I) { | |
return I && /^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(I.toString()) | |
} | |
function GM2() { | |
if (typeof EdgeRuntime === "string") return !0; | |
if (!Dt()) return !1; | |
if (_t(BO.fetch)) return !0; | |
let I = !1, | |
d = BO.document; | |
if (d && typeof d.createElement === "function") try { | |
let G = d.createElement("iframe"); | |
if (G.hidden = !0, d.head.appendChild(G), G.contentWindow && G.contentWindow.fetch) I = _t(G.contentWindow.fetch); | |
d.head.removeChild(G) | |
} catch (G) { | |
sE2.DEBUG_BUILD && oE2.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ", G) | |
} | |
return I | |
} | |
function ZM2() { | |
return "ReportingObserver" in BO | |
} | |
function CM2() { | |
if (!Dt()) return !1; | |
try { | |
return new Request("_", { | |
referrerPolicy: "origin" | |
}), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
hz1.isNativeFetch = _t; | |
hz1.supportsDOMError = IM2; | |
hz1.supportsDOMException = dM2; | |
hz1.supportsErrorEvent = tE2; | |
hz1.supportsFetch = Dt; | |
hz1.supportsNativeFetch = GM2; | |
hz1.supportsReferrerPolicy = CM2; | |
hz1.supportsReportingObserver = ZM2 | |
}); | |
var gt = Y((cz1) => { | |
Object.defineProperty(cz1, "__esModule", { | |
value: !0 | |
}); | |
var DM2 = cG(), | |
HM2 = Ht(), | |
jz1 = K7(), | |
fv = zA(); | |
function FM2(I) { | |
fv.addHandler("fetch", I), fv.maybeInstrument("fetch", gM2) | |
} | |
function gM2() { | |
if (!HM2.supportsNativeFetch()) return; | |
DM2.fill(jz1.GLOBAL_OBJ, "fetch", function(I) { | |
return function(...d) { | |
let { | |
method: G, | |
url: Z | |
} = xz1(d), C = { | |
args: d, | |
fetchData: { | |
method: G, | |
url: Z | |
}, | |
startTimestamp: Date.now() | |
}; | |
return fv.triggerHandlers("fetch", { | |
...C | |
}), I.apply(jz1.GLOBAL_OBJ, d).then((W) => { | |
let w = { | |
...C, | |
endTimestamp: Date.now(), | |
response: W | |
}; | |
return fv.triggerHandlers("fetch", w), W | |
}, (W) => { | |
let w = { | |
...C, | |
endTimestamp: Date.now(), | |
error: W | |
}; | |
throw fv.triggerHandlers("fetch", w), W | |
}) | |
} | |
}) | |
} | |
function Ft(I, d) { | |
return !!I && typeof I === "object" && !!I[d] | |
} | |
function kz1(I) { | |
if (typeof I === "string") return I; | |
if (!I) return ""; | |
if (Ft(I, "url")) return I.url; | |
if (I.toString) return I.toString(); | |
return "" | |
} | |
function xz1(I) { | |
if (I.length === 0) return { | |
method: "GET", | |
url: "" | |
}; | |
if (I.length === 2) { | |
let [G, Z] = I; | |
return { | |
url: kz1(G), | |
method: Ft(Z, "method") ? String(Z.method).toUpperCase() : "GET" | |
} | |
} | |
let d = I[0]; | |
return { | |
url: kz1(d), | |
method: Ft(d, "method") ? String(d.method).toUpperCase() : "GET" | |
} | |
} | |
cz1.addFetchInstrumentationHandler = FM2; | |
cz1.parseFetchArgs = xz1 | |
}); | |
var Nt = Y((pz1) => { | |
Object.defineProperty(pz1, "__esModule", { | |
value: !0 | |
}); | |
var Jt = K7(), | |
Kt = zA(), | |
AO = null; | |
function NM2(I) { | |
Kt.addHandler("error", I), Kt.maybeInstrument("error", zM2) | |
} | |
function zM2() { | |
AO = Jt.GLOBAL_OBJ.onerror, Jt.GLOBAL_OBJ.onerror = function(I, d, G, Z, C) { | |
let W = { | |
column: Z, | |
error: C, | |
line: G, | |
msg: I, | |
url: d | |
}; | |
if (Kt.triggerHandlers("error", W), AO && !AO.__SENTRY_LOADER__) return AO.apply(this, arguments); | |
return !1 | |
}, Jt.GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = !0 | |
} | |
pz1.addGlobalErrorInstrumentationHandler = NM2 | |
}); | |
var ft = Y((iz1) => { | |
Object.defineProperty(iz1, "__esModule", { | |
value: !0 | |
}); | |
var zt = K7(), | |
Qt = zA(), | |
VO = null; | |
function fM2(I) { | |
Qt.addHandler("unhandledrejection", I), Qt.maybeInstrument("unhandledrejection", qM2) | |
} | |
function qM2() { | |
VO = zt.GLOBAL_OBJ.onunhandledrejection, zt.GLOBAL_OBJ.onunhandledrejection = function(I) { | |
let d = I; | |
if (Qt.triggerHandlers("unhandledrejection", d), VO && !VO.__SENTRY_LOADER__) return VO.apply(this, arguments); | |
return !0 | |
}, zt.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = !0 | |
} | |
iz1.addGlobalUnhandledRejectionInstrumentationHandler = fM2 | |
}); | |
var qt = Y((nz1) => { | |
Object.defineProperty(nz1, "__esModule", { | |
value: !0 | |
}); | |
var UM2 = K7(), | |
XO = UM2.getGlobalObject(); | |
function vM2() { | |
let I = XO.chrome, | |
d = I && I.app && I.app.runtime, | |
G = "history" in XO && !!XO.history.pushState && !!XO.history.replaceState; | |
return !d && G | |
} | |
nz1.supportsHistory = vM2 | |
}); | |
var Rt = Y((az1) => { | |
Object.defineProperty(az1, "__esModule", { | |
value: !0 | |
}); | |
var rz1 = cG(); | |
Zw(); | |
DC(); | |
var MM2 = K7(), | |
SM2 = qt(), | |
_O = zA(), | |
qv = MM2.GLOBAL_OBJ, | |
YO; | |
function LM2(I) { | |
_O.addHandler("history", I), _O.maybeInstrument("history", yM2) | |
} | |
function yM2() { | |
if (!SM2.supportsHistory()) return; | |
let I = qv.onpopstate; | |
qv.onpopstate = function(...G) { | |
let Z = qv.location.href, | |
C = YO; | |
YO = Z; | |
let W = { | |
from: C, | |
to: Z | |
}; | |
if (_O.triggerHandlers("history", W), I) try { | |
return I.apply(this, G) | |
} catch (w) {} | |
}; | |
function d(G) { | |
return function(...Z) { | |
let C = Z.length > 2 ? Z[2] : void 0; | |
if (C) { | |
let W = YO, | |
w = String(C); | |
YO = w; | |
let B = { | |
from: W, | |
to: w | |
}; | |
_O.triggerHandlers("history", B) | |
} | |
return G.apply(this, Z) | |
} | |
} | |
rz1.fill(qv.history, "pushState", d), rz1.fill(qv.history, "replaceState", d) | |
} | |
az1.addHistoryInstrumentationHandler = LM2 | |
}); | |
var Ut = Y((oz1) => { | |
Object.defineProperty(oz1, "__esModule", { | |
value: !0 | |
}); | |
var HO = xG(), | |
DO = cG(), | |
$M2 = K7(), | |
FO = zA(), | |
uM2 = $M2.GLOBAL_OBJ, | |
Rv = "__sentry_xhr_v3__"; | |
function TM2(I) { | |
FO.addHandler("xhr", I), FO.maybeInstrument("xhr", sz1) | |
} | |
function sz1() { | |
if (!uM2.XMLHttpRequest) return; | |
let I = XMLHttpRequest.prototype; | |
DO.fill(I, "open", function(d) { | |
return function(...G) { | |
let Z = Date.now(), | |
C = HO.isString(G[0]) ? G[0].toUpperCase() : void 0, | |
W = OM2(G[1]); | |
if (!C || !W) return d.apply(this, G); | |
if (this[Rv] = { | |
method: C, | |
url: W, | |
request_headers: {} | |
}, C === "POST" && W.match(/sentry_key/)) this.__sentry_own_request__ = !0; | |
let w = () => { | |
let B = this[Rv]; | |
if (!B) return; | |
if (this.readyState === 4) { | |
try { | |
B.status_code = this.status | |
} catch (V) {} | |
let A = { | |
args: [C, W], | |
endTimestamp: Date.now(), | |
startTimestamp: Z, | |
xhr: this | |
}; | |
FO.triggerHandlers("xhr", A) | |
} | |
}; | |
if ("onreadystatechange" in this && typeof this.onreadystatechange === "function") DO.fill(this, "onreadystatechange", function(B) { | |
return function(...A) { | |
return w(), B.apply(this, A) | |
} | |
}); | |
else this.addEventListener("readystatechange", w); | |
return DO.fill(this, "setRequestHeader", function(B) { | |
return function(...A) { | |
let [V, X] = A, _ = this[Rv]; | |
if (_ && HO.isString(V) && HO.isString(X)) _.request_headers[V.toLowerCase()] = X; | |
return B.apply(this, A) | |
} | |
}), d.apply(this, G) | |
} | |
}), DO.fill(I, "send", function(d) { | |
return function(...G) { | |
let Z = this[Rv]; | |
if (!Z) return d.apply(this, G); | |
if (G[0] !== void 0) Z.body = G[0]; | |
let C = { | |
args: [Z.method, Z.url], | |
startTimestamp: Date.now(), | |
xhr: this | |
}; | |
return FO.triggerHandlers("xhr", C), d.apply(this, G) | |
} | |
}) | |
} | |
function OM2(I) { | |
if (HO.isString(I)) return I; | |
try { | |
return I.toString() | |
} catch (d) {} | |
return | |
} | |
oz1.SENTRY_XHR_DATA_KEY = Rv; | |
oz1.addXhrInstrumentationHandler = TM2; | |
oz1.instrumentXHR = sz1 | |
}); | |
var WQ1 = Y((CQ1) => { | |
Object.defineProperty(CQ1, "__esModule", { | |
value: !0 | |
}); | |
var hM2 = Zw(), | |
jM2 = DC(), | |
ez1 = wt(), | |
tz1 = Yt(), | |
IQ1 = gt(), | |
dQ1 = Nt(), | |
GQ1 = ft(), | |
ZQ1 = Rt(), | |
vt = Ut(); | |
function kM2(I, d) { | |
switch (I) { | |
case "console": | |
return ez1.addConsoleInstrumentationHandler(d); | |
case "dom": | |
return tz1.addClickKeypressInstrumentationHandler(d); | |
case "xhr": | |
return vt.addXhrInstrumentationHandler(d); | |
case "fetch": | |
return IQ1.addFetchInstrumentationHandler(d); | |
case "history": | |
return ZQ1.addHistoryInstrumentationHandler(d); | |
case "error": | |
return dQ1.addGlobalErrorInstrumentationHandler(d); | |
case "unhandledrejection": | |
return GQ1.addGlobalUnhandledRejectionInstrumentationHandler(d); | |
default: | |
hM2.DEBUG_BUILD && jM2.logger.warn("unknown instrumentation type:", I) | |
} | |
} | |
CQ1.addConsoleInstrumentationHandler = ez1.addConsoleInstrumentationHandler; | |
CQ1.addClickKeypressInstrumentationHandler = tz1.addClickKeypressInstrumentationHandler; | |
CQ1.addFetchInstrumentationHandler = IQ1.addFetchInstrumentationHandler; | |
CQ1.addGlobalErrorInstrumentationHandler = dQ1.addGlobalErrorInstrumentationHandler; | |
CQ1.addGlobalUnhandledRejectionInstrumentationHandler = GQ1.addGlobalUnhandledRejectionInstrumentationHandler; | |
CQ1.addHistoryInstrumentationHandler = ZQ1.addHistoryInstrumentationHandler; | |
CQ1.SENTRY_XHR_DATA_KEY = vt.SENTRY_XHR_DATA_KEY; | |
CQ1.addXhrInstrumentationHandler = vt.addXhrInstrumentationHandler; | |
CQ1.addInstrumentationHandler = kM2 | |
}); | |
var Et = Y((wQ1) => { | |
Object.defineProperty(wQ1, "__esModule", { | |
value: !0 | |
}); | |
function eM2() { | |
return typeof __SENTRY_BROWSER_BUNDLE__ !== "undefined" && !!__SENTRY_BROWSER_BUNDLE__ | |
} | |
function tM2() { | |
return "npm" | |
} | |
wQ1.getSDKSource = tM2; | |
wQ1.isBrowserBundle = eM2 | |
}); | |
var Mt = Y((BQ1, JO) => { | |
Object.defineProperty(BQ1, "__esModule", { | |
value: !0 | |
}); | |
var GS2 = Et(); | |
function ZS2() { | |
return !GS2.isBrowserBundle() && Object.prototype.toString.call(typeof process !== "undefined" ? process : 0) === "[object process]" | |
} | |
function gO(I, d) { | |
return I.require(d) | |
} | |
function CS2(I) { | |
let d; | |
try { | |
d = gO(JO, I) | |
} catch (G) {} | |
try { | |
let { | |
cwd: G | |
} = gO(JO, "process"); | |
d = gO(JO, `${G()}/node_modules/${I}`) | |
} catch (G) {} | |
return d | |
} | |
BQ1.dynamicRequire = gO; | |
BQ1.isNodeEnv = ZS2; | |
BQ1.loadModule = CS2 | |
}); | |
var XQ1 = Y((VQ1) => { | |
Object.defineProperty(VQ1, "__esModule", { | |
value: !0 | |
}); | |
var AS2 = Mt(), | |
AQ1 = K7(); | |
function VS2() { | |
return typeof window !== "undefined" && (!AS2.isNodeEnv() || XS2()) | |
} | |
function XS2() { | |
return AQ1.GLOBAL_OBJ.process !== void 0 && AQ1.GLOBAL_OBJ.process.type === "renderer" | |
} | |
VQ1.isBrowser = VS2 | |
}); | |
var St = Y((YQ1) => { | |
Object.defineProperty(YQ1, "__esModule", { | |
value: !0 | |
}); | |
function _S2() { | |
let I = typeof WeakSet === "function", | |
d = I ? new WeakSet : []; | |
function G(C) { | |
if (I) { | |
if (d.has(C)) return !0; | |
return d.add(C), !1 | |
} | |
for (let W = 0; W < d.length; W++) | |
if (d[W] === C) return !0; | |
return d.push(C), !1 | |
} | |
function Z(C) { | |
if (I) d.delete(C); | |
else | |
for (let W = 0; W < d.length; W++) | |
if (d[W] === C) { | |
d.splice(W, 1); | |
break | |
} | |
} | |
return [G, Z] | |
} | |
YQ1.memoBuilder = _S2 | |
}); | |
var Uv = Y((HQ1) => { | |
Object.defineProperty(HQ1, "__esModule", { | |
value: !0 | |
}); | |
var Lt = xG(), | |
HS2 = St(), | |
FS2 = cG(), | |
gS2 = CO(); | |
function _Q1(I, d = 100, G = 1 / 0) { | |
try { | |
return KO("", I, d, G) | |
} catch (Z) { | |
return { | |
ERROR: `**non-serializable** (${Z})` | |
} | |
} | |
} | |
function DQ1(I, d = 3, G = 102400) { | |
let Z = _Q1(I, d); | |
if (zS2(Z) > G) return DQ1(I, d - 1, G); | |
return Z | |
} | |
function KO(I, d, G = 1 / 0, Z = 1 / 0, C = HS2.memoBuilder()) { | |
let [W, w] = C; | |
if (d == null || ["number", "boolean", "string"].includes(typeof d) && !Lt.isNaN(d)) return d; | |
let B = JS2(I, d); | |
if (!B.startsWith("[object ")) return B; | |
if (d.__sentry_skip_normalization__) return d; | |
let A = typeof d.__sentry_override_normalization_depth__ === "number" ? d.__sentry_override_normalization_depth__ : G; | |
if (A === 0) return B.replace("object ", ""); | |
if (W(d)) return "[Circular ~]"; | |
let V = d; | |
if (V && typeof V.toJSON === "function") try { | |
let g = V.toJSON(); | |
return KO("", g, A - 1, Z, C) | |
} catch (g) {} | |
let X = Array.isArray(d) ? [] : {}, | |
_ = 0, | |
F = FS2.convertToPlainObject(d); | |
for (let g in F) { | |
if (!Object.prototype.hasOwnProperty.call(F, g)) continue; | |
if (_ >= Z) { | |
X[g] = "[MaxProperties ~]"; | |
break | |
} | |
let J = F[g]; | |
X[g] = KO(g, J, A - 1, Z, C), _++ | |
} | |
return w(d), X | |
} | |
function JS2(I, d) { | |
try { | |
if (I === "domain" && d && typeof d === "object" && d._events) return "[Domain]"; | |
if (I === "domainEmitter") return "[DomainEmitter]"; | |
if (typeof global !== "undefined" && d === global) return "[Global]"; | |
if (typeof window !== "undefined" && d === window) return "[Window]"; | |
if (typeof document !== "undefined" && d === document) return "[Document]"; | |
if (Lt.isVueViewModel(d)) return "[VueViewModel]"; | |
if (Lt.isSyntheticEvent(d)) return "[SyntheticEvent]"; | |
if (typeof d === "number" && d !== d) return "[NaN]"; | |
if (typeof d === "function") return `[Function: ${gS2.getFunctionName(d)}]`; | |
if (typeof d === "symbol") return `[${String(d)}]`; | |
if (typeof d === "bigint") return `[BigInt: ${String(d)}]`; | |
let G = KS2(d); | |
if (/^HTML(\w*)Element$/.test(G)) return `[HTMLElement: ${G}]`; | |
return `[object ${G}]` | |
} catch (G) { | |
return `**non-serializable** (${G})` | |
} | |
} | |
function KS2(I) { | |
let d = Object.getPrototypeOf(I); | |
return d ? d.constructor.name : "null prototype" | |
} | |
function NS2(I) { | |
return ~-encodeURI(I).split(/%..|./).length | |
} | |
function zS2(I) { | |
return NS2(JSON.stringify(I)) | |
} | |
function QS2(I, d) { | |
let G = d.replace(/\\/g, "/").replace(/[|\\{}()[\]^$+*?.]/g, "\\$&"), | |
Z = I; | |
try { | |
Z = decodeURI(I) | |
} catch (C) {} | |
return Z.replace(/\\/g, "/").replace(/webpack:\/?/g, "").replace(new RegExp(`(file://)?/*${G}/*`, "ig"), "app:///") | |
} | |
HQ1.normalize = _Q1; | |
HQ1.normalizeToSize = DQ1; | |
HQ1.normalizeUrlToBase = QS2; | |
HQ1.walk = KO | |
}); | |
var QQ1 = Y((zQ1) => { | |
Object.defineProperty(zQ1, "__esModule", { | |
value: !0 | |
}); | |
function gQ1(I, d) { | |
let G = 0; | |
for (let Z = I.length - 1; Z >= 0; Z--) { | |
let C = I[Z]; | |
if (C === ".") I.splice(Z, 1); | |
else if (C === "..") I.splice(Z, 1), G++; | |
else if (G) I.splice(Z, 1), G-- | |
} | |
if (d) | |
for (; G--; G) I.unshift(".."); | |
return I | |
} | |
var vS2 = /^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/; | |
function JQ1(I) { | |
let d = I.length > 1024 ? `<truncated>${I.slice(-1024)}` : I, | |
G = vS2.exec(d); | |
return G ? G.slice(1) : [] | |
} | |
function yt(...I) { | |
let d = "", | |
G = !1; | |
for (let Z = I.length - 1; Z >= -1 && !G; Z--) { | |
let C = Z >= 0 ? I[Z] : "/"; | |
if (!C) continue; | |
d = `${C}/${d}`, G = C.charAt(0) === "/" | |
} | |
return d = gQ1(d.split("/").filter((Z) => !!Z), !G).join("/"), (G ? "/" : "") + d || "." | |
} | |
function FQ1(I) { | |
let d = 0; | |
for (; d < I.length; d++) | |
if (I[d] !== "") break; | |
let G = I.length - 1; | |
for (; G >= 0; G--) | |
if (I[G] !== "") break; | |
if (d > G) return []; | |
return I.slice(d, G - d + 1) | |
} | |
function ES2(I, d) { | |
I = yt(I).slice(1), d = yt(d).slice(1); | |
let G = FQ1(I.split("/")), | |
Z = FQ1(d.split("/")), | |
C = Math.min(G.length, Z.length), | |
W = C; | |
for (let B = 0; B < C; B++) | |
if (G[B] !== Z[B]) { | |
W = B; | |
break | |
} let w = []; | |
for (let B = W; B < G.length; B++) w.push(".."); | |
return w = w.concat(Z.slice(W)), w.join("/") | |
} | |
function KQ1(I) { | |
let d = NQ1(I), | |
G = I.slice(-1) === "/", | |
Z = gQ1(I.split("/").filter((C) => !!C), !d).join("/"); | |
if (!Z && !d) Z = "."; | |
if (Z && G) Z += "/"; | |
return (d ? "/" : "") + Z | |
} | |
function NQ1(I) { | |
return I.charAt(0) === "/" | |
} | |
function MS2(...I) { | |
return KQ1(I.join("/")) | |
} | |
function SS2(I) { | |
let d = JQ1(I), | |
G = d[0], | |
Z = d[1]; | |
if (!G && !Z) return "."; | |
if (Z) Z = Z.slice(0, Z.length - 1); | |
return G + Z | |
} | |
function LS2(I, d) { | |
let G = JQ1(I)[2]; | |
if (d && G.slice(d.length * -1) === d) G = G.slice(0, G.length - d.length); | |
return G | |
} | |
zQ1.basename = LS2; | |
zQ1.dirname = SS2; | |
zQ1.isAbsolute = NQ1; | |
zQ1.join = MS2; | |
zQ1.normalizePath = KQ1; | |
zQ1.relative = ES2; | |
zQ1.resolve = yt | |
}); | |
var Pt = Y((fQ1) => { | |
Object.defineProperty(fQ1, "__esModule", { | |
value: !0 | |
}); | |
var lS2 = xG(), | |
QA; | |
(function(I) { | |
I[I.PENDING = 0] = "PENDING"; | |
let G = 1; | |
I[I.RESOLVED = G] = "RESOLVED"; | |
let Z = 2; | |
I[I.REJECTED = Z] = "REJECTED" | |
})(QA || (QA = {})); | |
function bS2(I) { | |
return new Cw((d) => { | |
d(I) | |
}) | |
} | |
function hS2(I) { | |
return new Cw((d, G) => { | |
G(I) | |
}) | |
} | |
class Cw { | |
constructor(I) { | |
Cw.prototype.__init.call(this), Cw.prototype.__init2.call(this), Cw.prototype.__init3.call(this), Cw.prototype.__init4.call(this), this._state = QA.PENDING, this._handlers = []; | |
try { | |
I(this._resolve, this._reject) | |
} catch (d) { | |
this._reject(d) | |
} | |
} | |
then(I, d) { | |
return new Cw((G, Z) => { | |
this._handlers.push([!1, (C) => { | |
if (!I) G(C); | |
else try { | |
G(I(C)) | |
} catch (W) { | |
Z(W) | |
} | |
}, (C) => { | |
if (!d) Z(C); | |
else try { | |
G(d(C)) | |
} catch (W) { | |
Z(W) | |
} | |
}]), this._executeHandlers() | |
}) | |
} catch (I) { | |
return this.then((d) => d, I) | |
} finally(I) { | |
return new Cw((d, G) => { | |
let Z, C; | |
return this.then((W) => { | |
if (C = !1, Z = W, I) I() | |
}, (W) => { | |
if (C = !0, Z = W, I) I() | |
}).then(() => { | |
if (C) { | |
G(Z); | |
return | |
} | |
d(Z) | |
}) | |
}) | |
} | |
__init() { | |
this._resolve = (I) => { | |
this._setResult(QA.RESOLVED, I) | |
} | |
} | |
__init2() { | |
this._reject = (I) => { | |
this._setResult(QA.REJECTED, I) | |
} | |
} | |
__init3() { | |
this._setResult = (I, d) => { | |
if (this._state !== QA.PENDING) return; | |
if (lS2.isThenable(d)) { | |
d.then(this._resolve, this._reject); | |
return | |
} | |
this._state = I, this._value = d, this._executeHandlers() | |
} | |
} | |
__init4() { | |
this._executeHandlers = () => { | |
if (this._state === QA.PENDING) return; | |
let I = this._handlers.slice(); | |
this._handlers = [], I.forEach((d) => { | |
if (d[0]) return; | |
if (this._state === QA.RESOLVED) d[1](this._value); | |
if (this._state === QA.REJECTED) d[2](this._value); | |
d[0] = !0 | |
}) | |
} | |
} | |
} | |
fQ1.SyncPromise = Cw; | |
fQ1.rejectedSyncPromise = hS2; | |
fQ1.resolvedSyncPromise = bS2 | |
}); | |
var RQ1 = Y((qQ1) => { | |
Object.defineProperty(qQ1, "__esModule", { | |
value: !0 | |
}); | |
var cS2 = dt(), | |
$t = Pt(); | |
function pS2(I) { | |
let d = []; | |
function G() { | |
return I === void 0 || d.length < I | |
} | |
function Z(w) { | |
return d.splice(d.indexOf(w), 1)[0] | |
} | |
function C(w) { | |
if (!G()) return $t.rejectedSyncPromise(new cS2.SentryError("Not adding Promise because buffer limit was reached.")); | |
let B = w(); | |
if (d.indexOf(B) === -1) d.push(B); | |
return B.then(() => Z(B)).then(null, () => Z(B).then(null, () => {})), B | |
} | |
function W(w) { | |
return new $t.SyncPromise((B, A) => { | |
let V = d.length; | |
if (!V) return B(!0); | |
let X = setTimeout(() => { | |
if (w && w > 0) B(!1) | |
}, w); | |
d.forEach((_) => { | |
$t.resolvedSyncPromise(_).then(() => { | |
if (!--V) clearTimeout(X), B(!0) | |
}, A) | |
}) | |
}) | |
} | |
return { | |
$: d, | |
add: C, | |
drain: W | |
} | |
} | |
qQ1.makePromiseBuffer = pS2 | |
}); | |
var vQ1 = Y((UQ1) => { | |
Object.defineProperty(UQ1, "__esModule", { | |
value: !0 | |
}); | |
function nS2(I) { | |
let d = {}, | |
G = 0; | |
while (G < I.length) { | |
let Z = I.indexOf("=", G); | |
if (Z === -1) break; | |
let C = I.indexOf(";", G); | |
if (C === -1) C = I.length; | |
else if (C < Z) { | |
G = I.lastIndexOf(";", Z - 1) + 1; | |
continue | |
} | |
let W = I.slice(G, Z).trim(); | |
if (d[W] === void 0) { | |
let w = I.slice(Z + 1, C).trim(); | |
if (w.charCodeAt(0) === 34) w = w.slice(1, -1); | |
try { | |
d[W] = w.indexOf("%") !== -1 ? decodeURIComponent(w) : w | |
} catch (B) { | |
d[W] = w | |
} | |
} | |
G = C + 1 | |
} | |
return d | |
} | |
UQ1.parseCookie = nS2 | |
}); | |
var ut = Y((EQ1) => { | |
Object.defineProperty(EQ1, "__esModule", { | |
value: !0 | |
}); | |
function aS2(I) { | |
if (!I) return {}; | |
let d = I.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); | |
if (!d) return {}; | |
let G = d[6] || "", | |
Z = d[8] || ""; | |
return { | |
host: d[4], | |
path: d[5], | |
protocol: d[2], | |
search: G, | |
hash: Z, | |
relative: d[5] + G + Z | |
} | |
} | |
function sS2(I) { | |
return I.split(/[\?#]/, 1)[0] | |
} | |
function oS2(I) { | |
return I.split(/\\?\//).filter((d) => d.length > 0 && d !== ",").length | |
} | |
function eS2(I) { | |
let { | |
protocol: d, | |
host: G, | |
path: Z | |
} = I, C = G && G.replace(/^.*@/, "[filtered]:[filtered]@").replace(/(:80)$/, "").replace(/(:443)$/, "") || ""; | |
return `${d?`${d}://`:""}${C}${Z}` | |
} | |
EQ1.getNumberOfUrlSegments = oS2; | |
EQ1.getSanitizedUrlString = eS2; | |
EQ1.parseUrl = aS2; | |
EQ1.stripUrlQueryAndFragment = sS2 | |
}); | |
var $Q1 = Y((PQ1) => { | |
Object.defineProperty(PQ1, "__esModule", { | |
value: !0 | |
}); | |
var ZL2 = vQ1(), | |
CL2 = Zw(), | |
MQ1 = xG(), | |
WL2 = DC(), | |
wL2 = Uv(), | |
BL2 = ut(), | |
AL2 = { | |
ip: !1, | |
request: !0, | |
transaction: !0, | |
user: !0 | |
}, | |
VL2 = ["cookies", "data", "headers", "method", "query_string", "url"], | |
SQ1 = ["id", "username", "email"]; | |
function XL2(I, d, G) { | |
if (!I) return; | |
if (!I.metadata.source || I.metadata.source === "url") { | |
let [Z, C] = NO(d, { | |
path: !0, | |
method: !0 | |
}); | |
I.updateName(Z), I.setMetadata({ | |
source: C | |
}) | |
} | |
if (I.setAttribute("url", d.originalUrl || d.url), d.baseUrl) I.setAttribute("baseUrl", d.baseUrl); | |
I.setData("query", LQ1(d, G)) | |
} | |
function NO(I, d = {}) { | |
let G = I.method && I.method.toUpperCase(), | |
Z = "", | |
C = "url"; | |
if (d.customRoute || I.route) Z = d.customRoute || `${I.baseUrl||""}${I.route&&I.route.path}`, C = "route"; | |
else if (I.originalUrl || I.url) Z = BL2.stripUrlQueryAndFragment(I.originalUrl || I.url || ""); | |
let W = ""; | |
if (d.method && G) W += G; | |
if (d.method && d.path) W += " "; | |
if (d.path && Z) W += Z; | |
return [W, C] | |
} | |
function YL2(I, d) { | |
switch (d) { | |
case "path": | |
return NO(I, { | |
path: !0 | |
})[0]; | |
case "handler": | |
return I.route && I.route.stack && I.route.stack[0] && I.route.stack[0].name || "<anonymous>"; | |
case "methodPath": | |
default: { | |
let G = I._reconstructedRoute ? I._reconstructedRoute : void 0; | |
return NO(I, { | |
path: !0, | |
method: !0, | |
customRoute: G | |
})[0] | |
} | |
} | |
} | |
function _L2(I, d) { | |
let G = {}; | |
return (Array.isArray(d) ? d : SQ1).forEach((C) => { | |
if (I && C in I) G[C] = I[C] | |
}), G | |
} | |
function Tt(I, d) { | |
let { | |
include: G = VL2, | |
deps: Z | |
} = d || {}, C = {}, W = I.headers || {}, w = I.method, B = W.host || I.hostname || I.host || "<no host>", A = I.protocol === "https" || I.socket && I.socket.encrypted ? "https" : "http", V = I.originalUrl || I.url || "", X = V.startsWith(A) ? V : `${A}://${B}${V}`; | |
return G.forEach((_) => { | |
switch (_) { | |
case "headers": { | |
if (C.headers = W, !G.includes("cookies")) delete C.headers.cookie; | |
break | |
} | |
case "method": { | |
C.method = w; | |
break | |
} | |
case "url": { | |
C.url = X; | |
break | |
} | |
case "cookies": { | |
C.cookies = I.cookies || W.cookie && ZL2.parseCookie(W.cookie) || {}; | |
break | |
} | |
case "query_string": { | |
C.query_string = LQ1(I, Z); | |
break | |
} | |
case "data": { | |
if (w === "GET" || w === "HEAD") break; | |
if (I.body !== void 0) C.data = MQ1.isString(I.body) ? I.body : JSON.stringify(wL2.normalize(I.body)); | |
break | |
} | |
default: | |
if ({}.hasOwnProperty.call(I, _)) C[_] = I[_] | |
} | |
}), C | |
} | |
function DL2(I, d, G) { | |
let Z = { | |
...AL2, | |
...G && G.include | |
}; | |
if (Z.request) { | |
let C = Array.isArray(Z.request) ? Tt(d, { | |
include: Z.request, | |
deps: G && G.deps | |
}) : Tt(d, { | |
deps: G && G.deps | |
}); | |
I.request = { | |
...I.request, | |
...C | |
} | |
} | |
if (Z.user) { | |
let C = d.user && MQ1.isPlainObject(d.user) ? _L2(d.user, Z.user) : {}; | |
if (Object.keys(C).length) I.user = { | |
...I.user, | |
...C | |
} | |
} | |
if (Z.ip) { | |
let C = d.ip || d.socket && d.socket.remoteAddress; | |
if (C) I.user = { | |
...I.user, | |
ip_address: C | |
} | |
} | |
if (Z.transaction && !I.transaction) I.transaction = YL2(d, Z.transaction); | |
return I | |
} | |
function LQ1(I, d) { | |
let G = I.originalUrl || I.url || ""; | |
if (!G) return; | |
if (G.startsWith("/")) G = `http://dogs.are.great${G}`; | |
try { | |
return I.query || typeof URL !== "undefined" && new URL(G).search.slice(1) || d && d.url && d.url.parse(G).query || void 0 | |
} catch (Z) { | |
return | |
} | |
} | |
function yQ1(I) { | |
let d = {}; | |
try { | |
I.forEach((G, Z) => { | |
if (typeof G === "string") d[Z] = G | |
}) | |
} catch (G) { | |
CL2.DEBUG_BUILD && WL2.logger.warn("Sentry failed extracting headers from a request object. If you see this, please file an issue.") | |
} | |
return d | |
} | |
function HL2(I) { | |
let d = yQ1(I.headers); | |
return { | |
method: I.method, | |
url: I.url, | |
headers: d | |
} | |
} | |
PQ1.DEFAULT_USER_INCLUDES = SQ1; | |
PQ1.addRequestDataToEvent = DL2; | |
PQ1.addRequestDataToTransaction = XL2; | |
PQ1.extractPathForTransaction = NO; | |
PQ1.extractRequestData = Tt; | |
PQ1.winterCGHeadersToDict = yQ1; | |
PQ1.winterCGRequestToRequestData = HL2 | |
}); | |
var mQ1 = Y((OQ1) => { | |
Object.defineProperty(OQ1, "__esModule", { | |
value: !0 | |
}); | |
var uQ1 = ["fatal", "error", "warning", "log", "info", "debug"]; | |
function fL2(I) { | |
return TQ1(I) | |
} | |
function TQ1(I) { | |
return I === "warn" ? "warning" : uQ1.includes(I) ? I : "log" | |
} | |
OQ1.severityFromString = fL2; | |
OQ1.severityLevelFromString = TQ1; | |
OQ1.validSeverityLevels = uQ1 | |
}); | |
var Ot = Y((kQ1) => { | |
Object.defineProperty(kQ1, "__esModule", { | |
value: !0 | |
}); | |
var lQ1 = K7(), | |
bQ1 = 1000; | |
function hQ1() { | |
return Date.now() / bQ1 | |
} | |
function vL2() { | |
let { | |
performance: I | |
} = lQ1.GLOBAL_OBJ; | |
if (!I || !I.now) return hQ1; | |
let d = Date.now() - I.now(), | |
G = I.timeOrigin == null ? d : I.timeOrigin; | |
return () => { | |
return (G + I.now()) / bQ1 | |
} | |
} | |
var jQ1 = vL2(), | |
EL2 = jQ1; | |
kQ1._browserPerformanceTimeOriginMode = void 0; | |
var ML2 = (() => { | |
let { | |
performance: I | |
} = lQ1.GLOBAL_OBJ; | |
if (!I || !I.now) { | |
kQ1._browserPerformanceTimeOriginMode = "none"; | |
return | |
} | |
let d = 3600000, | |
G = I.now(), | |
Z = Date.now(), | |
C = I.timeOrigin ? Math.abs(I.timeOrigin + G - Z) : d, | |
W = C < d, | |
w = I.timing && I.timing.navigationStart, | |
A = typeof w === "number" ? Math.abs(w + G - Z) : d, | |
V = A < d; | |
if (W || V) | |
if (C <= A) return kQ1._browserPerformanceTimeOriginMode = "timeOrigin", I.timeOrigin; | |
else return kQ1._browserPerformanceTimeOriginMode = "navigationStart", w; | |
return kQ1._browserPerformanceTimeOriginMode = "dateNow", Z | |
})(); | |
kQ1.browserPerformanceTimeOrigin = ML2; | |
kQ1.dateTimestampInSeconds = hQ1; | |
kQ1.timestampInSeconds = jQ1; | |
kQ1.timestampWithMs = EL2 | |
}); | |
var lt = Y((iQ1) => { | |
Object.defineProperty(iQ1, "__esModule", { | |
value: !0 | |
}); | |
var $L2 = Zw(), | |
uL2 = xG(), | |
TL2 = DC(), | |
OL2 = "baggage", | |
mt = "sentry-", | |
cQ1 = /^sentry-/, | |
pQ1 = 8192; | |
function mL2(I) { | |
if (!uL2.isString(I) && !Array.isArray(I)) return; | |
let d = {}; | |
if (Array.isArray(I)) d = I.reduce((Z, C) => { | |
let W = xQ1(C); | |
for (let w of Object.keys(W)) Z[w] = W[w]; | |
return Z | |
}, {}); | |
else { | |
if (!I) return; | |
d = xQ1(I) | |
} | |
let G = Object.entries(d).reduce((Z, [C, W]) => { | |
if (C.match(cQ1)) { | |
let w = C.slice(mt.length); | |
Z[w] = W | |
} | |
return Z | |
}, {}); | |
if (Object.keys(G).length > 0) return G; | |
else return | |
} | |
function lL2(I) { | |
if (!I) return; | |
let d = Object.entries(I).reduce((G, [Z, C]) => { | |
if (C) G[`${mt}${Z}`] = C; | |
return G | |
}, {}); | |
return bL2(d) | |
} | |
function xQ1(I) { | |
return I.split(",").map((d) => d.split("=").map((G) => decodeURIComponent(G.trim()))).reduce((d, [G, Z]) => { | |
return d[G] = Z, d | |
}, {}) | |
} | |
function bL2(I) { | |
if (Object.keys(I).length === 0) return; | |
return Object.entries(I).reduce((d, [G, Z], C) => { | |
let W = `${encodeURIComponent(G)}=${encodeURIComponent(Z)}`, | |
w = C === 0 ? W : `${d},${W}`; | |
if (w.length > pQ1) return $L2.DEBUG_BUILD && TL2.logger.warn(`Not adding key: ${G} with val: ${Z} to baggage header due to exceeding baggage size limits.`), d; | |
else return w | |
}, "") | |
} | |
iQ1.BAGGAGE_HEADER_NAME = OL2; | |
iQ1.MAX_BAGGAGE_STRING_LENGTH = pQ1; | |
iQ1.SENTRY_BAGGAGE_KEY_PREFIX = mt; | |
iQ1.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = cQ1; | |
iQ1.baggageHeaderToDynamicSamplingContext = mL2; | |
iQ1.dynamicSamplingContextToSentryBaggageHeader = lL2 | |
}); | |
var sQ1 = Y((aQ1) => { | |
Object.defineProperty(aQ1, "__esModule", { | |
value: !0 | |
}); | |
var nQ1 = lt(), | |
pG = Qv(), | |
rQ1 = new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$"); | |
function bt(I) { | |
if (!I) return; | |
let d = I.match(rQ1); | |
if (!d) return; | |
let G; | |
if (d[3] === "1") G = !0; | |
else if (d[3] === "0") G = !1; | |
return { | |
traceId: d[1], | |
parentSampled: G, | |
parentSpanId: d[2] | |
} | |
} | |
function iL2(I, d) { | |
let G = bt(I), | |
Z = nQ1.baggageHeaderToDynamicSamplingContext(d), | |
{ | |
traceId: C, | |
parentSpanId: W, | |
parentSampled: w | |
} = G || {}; | |
if (!G) return { | |
traceparentData: G, | |
dynamicSamplingContext: void 0, | |
propagationContext: { | |
traceId: C || pG.uuid4(), | |
spanId: pG.uuid4().substring(16) | |
} | |
}; | |
else return { | |
traceparentData: G, | |
dynamicSamplingContext: Z || {}, | |
propagationContext: { | |
traceId: C || pG.uuid4(), | |
parentSpanId: W || pG.uuid4().substring(16), | |
spanId: pG.uuid4().substring(16), | |
sampled: w, | |
dsc: Z || {} | |
} | |
} | |
} | |
function nL2(I, d) { | |
let G = bt(I), | |
Z = nQ1.baggageHeaderToDynamicSamplingContext(d), | |
{ | |
traceId: C, | |
parentSpanId: W, | |
parentSampled: w | |
} = G || {}; | |
if (!G) return { | |
traceId: C || pG.uuid4(), | |
spanId: pG.uuid4().substring(16) | |
}; | |
else return { | |
traceId: C || pG.uuid4(), | |
parentSpanId: W || pG.uuid4().substring(16), | |
spanId: pG.uuid4().substring(16), | |
sampled: w, | |
dsc: Z || {} | |
} | |
} | |
function rL2(I = pG.uuid4(), d = pG.uuid4().substring(16), G) { | |
let Z = ""; | |
if (G !== void 0) Z = G ? "-1" : "-0"; | |
return `${I}-${d}${Z}` | |
} | |
aQ1.TRACEPARENT_REGEXP = rQ1; | |
aQ1.extractTraceparentData = bt; | |
aQ1.generateSentryTraceHeader = rL2; | |
aQ1.propagationContextFromHeaders = nL2; | |
aQ1.tracingContextFromHeaders = iL2 | |
}); | |
var jt = Y((tQ1) => { | |
Object.defineProperty(tQ1, "__esModule", { | |
value: !0 | |
}); | |
var Iy2 = It(), | |
dy2 = Uv(), | |
oQ1 = cG(); | |
function Gy2(I, d = []) { | |
return [I, d] | |
} | |
function Zy2(I, d) { | |
let [G, Z] = I; | |
return [G, [...Z, d]] | |
} | |
function eQ1(I, d) { | |
let G = I[1]; | |
for (let Z of G) { | |
let C = Z[0].type; | |
if (d(Z, C)) return !0 | |
} | |
return !1 | |
} | |
function Cy2(I, d) { | |
return eQ1(I, (G, Z) => d.includes(Z)) | |
} | |
function ht(I, d) { | |
return (d || new TextEncoder).encode(I) | |
} | |
function Wy2(I, d) { | |
let [G, Z] = I, C = JSON.stringify(G); | |
function W(w) { | |
if (typeof C === "string") C = typeof w === "string" ? C + w : [ht(C, d), w]; | |
else C.push(typeof w === "string" ? ht(w, d) : w) | |
} | |
for (let w of Z) { | |
let [B, A] = w; | |
if (W(` | |
${JSON.stringify(B)} | |
`), typeof A === "string" || A instanceof Uint8Array) W(A); | |
else { | |
let V; | |
try { | |
V = JSON.stringify(A) | |
} catch (X) { | |
V = JSON.stringify(dy2.normalize(A)) | |
} | |
W(V) | |
} | |
} | |
return typeof C === "string" ? C : wy2(C) | |
} | |
function wy2(I) { | |
let d = I.reduce((C, W) => C + W.length, 0), | |
G = new Uint8Array(d), | |
Z = 0; | |
for (let C of I) G.set(C, Z), Z += C.length; | |
return G | |
} | |
function By2(I, d, G) { | |
let Z = typeof I === "string" ? d.encode(I) : I; | |
function C(A) { | |
let V = Z.subarray(0, A); | |
return Z = Z.subarray(A + 1), V | |
} | |
function W() { | |
let A = Z.indexOf(10); | |
if (A < 0) A = Z.length; | |
return JSON.parse(G.decode(C(A))) | |
} | |
let w = W(), | |
B = []; | |
while (Z.length) { | |
let A = W(), | |
V = typeof A.length === "number" ? A.length : void 0; | |
B.push([A, V ? C(V) : W()]) | |
} | |
return [w, B] | |
} | |
function Ay2(I, d) { | |
let G = typeof I.data === "string" ? ht(I.data, d) : I.data; | |
return [oQ1.dropUndefinedKeys({ | |
type: "attachment", | |
length: G.length, | |
filename: I.filename, | |
content_type: I.contentType, | |
attachment_type: I.attachmentType | |
}), G] | |
} | |
var Vy2 = { | |
session: "session", | |
sessions: "session", | |
attachment: "attachment", | |
transaction: "transaction", | |
event: "error", | |
client_report: "internal", | |
user_report: "default", | |
profile: "profile", | |
replay_event: "replay", | |
replay_recording: "replay", | |
check_in: "monitor", | |
feedback: "feedback", | |
span: "span", | |
statsd: "metric_bucket" | |
}; | |
function Xy2(I) { | |
return Vy2[I] | |
} | |
function Yy2(I) { | |
if (!I || !I.sdk) return; | |
let { | |
name: d, | |
version: G | |
} = I.sdk; | |
return { | |
name: d, | |
version: G | |
} | |
} | |
function _y2(I, d, G, Z) { | |
let C = I.sdkProcessingMetadata && I.sdkProcessingMetadata.dynamicSamplingContext; | |
return { | |
event_id: I.event_id, | |
sent_at: new Date().toISOString(), | |
...d && { | |
sdk: d | |
}, | |
...!!G && Z && { | |
dsn: Iy2.dsnToString(Z) | |
}, | |
...C && { | |
trace: oQ1.dropUndefinedKeys({ | |
...C | |
}) | |
} | |
} | |
} | |
tQ1.addItemToEnvelope = Zy2; | |
tQ1.createAttachmentEnvelopeItem = Ay2; | |
tQ1.createEnvelope = Gy2; | |
tQ1.createEventEnvelopeHeaders = _y2; | |
tQ1.envelopeContainsItemType = Cy2; | |
tQ1.envelopeItemTypeToDataCategory = Xy2; | |
tQ1.forEachEnvelopeItem = eQ1; | |
tQ1.getSdkMetadataForEnvelopeHeader = Yy2; | |
tQ1.parseEnvelope = By2; | |
tQ1.serializeEnvelope = Wy2 | |
}); | |
var df1 = Y((If1) => { | |
Object.defineProperty(If1, "__esModule", { | |
value: !0 | |
}); | |
var qy2 = jt(), | |
Ry2 = Ot(); | |
function Uy2(I, d, G) { | |
let Z = [{ | |
type: "client_report" | |
}, { | |
timestamp: G || Ry2.dateTimestampInSeconds(), | |
discarded_events: I | |
}]; | |
return qy2.createEnvelope(d ? { | |
dsn: d | |
} : {}, [Z]) | |
} | |
If1.createClientReportEnvelope = Uy2 | |
}); | |
var wf1 = Y((Wf1) => { | |
Object.defineProperty(Wf1, "__esModule", { | |
value: !0 | |
}); | |
var Gf1 = 60000; | |
function Zf1(I, d = Date.now()) { | |
let G = parseInt(`${I}`, 10); | |
if (!isNaN(G)) return G * 1000; | |
let Z = Date.parse(`${I}`); | |
if (!isNaN(Z)) return Z - d; | |
return Gf1 | |
} | |
function Cf1(I, d) { | |
return I[d] || I.all || 0 | |
} | |
function Ey2(I, d, G = Date.now()) { | |
return Cf1(I, d) > G | |
} | |
function My2(I, { | |
statusCode: d, | |
headers: G | |
}, Z = Date.now()) { | |
let C = { | |
...I | |
}, | |
W = G && G["x-sentry-rate-limits"], | |
w = G && G["retry-after"]; | |
if (W) | |
for (let B of W.trim().split(",")) { | |
let [A, V, , , X] = B.split(":", 5), _ = parseInt(A, 10), F = (!isNaN(_) ? _ : 60) * 1000; | |
if (!V) C.all = Z + F; | |
else | |
for (let g of V.split(";")) | |
if (g === "metric_bucket") { | |
if (!X || X.split(";").includes("custom")) C[g] = Z + F | |
} else C[g] = Z + F | |
} else if (w) C.all = Z + Zf1(w, Z); | |
else if (d === 429) C.all = Z + 60000; | |
return C | |
} | |
Wf1.DEFAULT_RETRY_AFTER = Gf1; | |
Wf1.disabledUntil = Cf1; | |
Wf1.isRateLimited = Ey2; | |
Wf1.parseRetryAfterHeader = Zf1; | |
Wf1.updateRateLimits = My2 | |
}); | |
var Xf1 = Y((Vf1) => { | |
Object.defineProperty(Vf1, "__esModule", { | |
value: !0 | |
}); | |
function Bf1(I, d, G) { | |
let Z = d.match(/([a-z_]+)\.(.*)/i); | |
if (Z === null) I[d] = G; | |
else { | |
let C = I[Z[1]]; | |
Bf1(C, Z[2], G) | |
} | |
} | |
function uy2(I, d, G = {}) { | |
return Array.isArray(d) ? Af1(I, d, G) : Ty2(I, d, G) | |
} | |
function Af1(I, d, G) { | |
let Z = d.find((C) => C.name === I.name); | |
if (Z) { | |
for (let [C, W] of Object.entries(G)) Bf1(Z, C, W); | |
return d | |
} | |
return [...d, I] | |
} | |
function Ty2(I, d, G) { | |
return (C) => { | |
let W = d(C); | |
if (I.allowExclusionByUser) { | |
if (!W.find((B) => B.name === I.name)) return W | |
} | |
return Af1(I, W, G) | |
} | |
} | |
Vf1.addOrUpdateIntegration = uy2 | |
}); | |
var _f1 = Y((Yf1) => { | |
Object.defineProperty(Yf1, "__esModule", { | |
value: !0 | |
}); | |
function my2(I) { | |
let d = [], | |
G = {}; | |
return { | |
add(Z, C) { | |
while (d.length >= I) { | |
let W = d.shift(); | |
if (W !== void 0) delete G[W] | |
} | |
if (G[Z]) this.delete(Z); | |
d.push(Z), G[Z] = C | |
}, | |
clear() { | |
G = {}, d = [] | |
}, | |
get(Z) { | |
return G[Z] | |
}, | |
size() { | |
return d.length | |
}, | |
delete(Z) { | |
if (!G[Z]) return !1; | |
delete G[Z]; | |
for (let C = 0; C < d.length; C++) | |
if (d[C] === Z) { | |
d.splice(C, 1); | |
break | |
} return !0 | |
} | |
} | |
} | |
Yf1.makeFifoCache = my2 | |
}); | |
var gf1 = Y((Ff1) => { | |
Object.defineProperty(Ff1, "__esModule", { | |
value: !0 | |
}); | |
var kt = xG(), | |
Df1 = Qv(), | |
by2 = Uv(), | |
hy2 = cG(); | |
function xt(I, d) { | |
return I(d.stack || "", 1) | |
} | |
function Hf1(I, d) { | |
let G = { | |
type: d.name || d.constructor.name, | |
value: d.message | |
}, | |
Z = xt(I, d); | |
if (Z.length) G.stacktrace = { | |
frames: Z | |
}; | |
return G | |
} | |
function jy2(I) { | |
if ("name" in I && typeof I.name === "string") { | |
let d = `'${I.name}' captured as exception`; | |
if ("message" in I && typeof I.message === "string") d += ` with message '${I.message}'`; | |
return d | |
} else if ("message" in I && typeof I.message === "string") return I.message; | |
else return `Object captured as exception with keys: ${hy2.extractExceptionKeysForMessage(I)}` | |
} | |
function ky2(I, d, G, Z) { | |
let C = typeof I === "function" ? I().getClient() : I, | |
W = G, | |
B = Z && Z.data && Z.data.mechanism || { | |
handled: !0, | |
type: "generic" | |
}, | |
A; | |
if (!kt.isError(G)) { | |
if (kt.isPlainObject(G)) { | |
let X = C && C.getOptions().normalizeDepth; | |
A = { | |
["__serialized__"]: by2.normalizeToSize(G, X) | |
}; | |
let _ = jy2(G); | |
W = Z && Z.syntheticException || new Error(_), W.message = _ | |
} else W = Z && Z.syntheticException || new Error(G), W.message = G; | |
B.synthetic = !0 | |
} | |
let V = { | |
exception: { | |
values: [Hf1(d, W)] | |
} | |
}; | |
if (A) V.extra = A; | |
return Df1.addExceptionTypeValue(V, void 0, void 0), Df1.addExceptionMechanism(V, B), { | |
...V, | |
event_id: Z && Z.event_id | |
} | |
} | |
function xy2(I, d, G = "info", Z, C) { | |
let W = { | |
event_id: Z && Z.event_id, | |
level: G | |
}; | |
if (C && Z && Z.syntheticException) { | |
let w = xt(I, Z.syntheticException); | |
if (w.length) W.exception = { | |
values: [{ | |
value: d, | |
stacktrace: { | |
frames: w | |
} | |
}] | |
} | |
} | |
if (kt.isParameterizedString(d)) { | |
let { | |
__sentry_template_string__: w, | |
__sentry_template_values__: B | |
} = d; | |
return W.logentry = { | |
message: w, | |
params: B | |
}, W | |
} | |
return W.message = d, W | |
} | |
Ff1.eventFromMessage = xy2; | |
Ff1.eventFromUnknownInput = ky2; | |
Ff1.exceptionFromError = Hf1; | |
Ff1.parseStackFrames = xt | |
}); | |
var Kf1 = Y((Jf1) => { | |
Object.defineProperty(Jf1, "__esModule", { | |
value: !0 | |
}); | |
var ry2 = cG(), | |
ay2 = ZO(); | |
function sy2(I, d, G, Z) { | |
let C = I(), | |
W = !1, | |
w = !0; | |
return setInterval(() => { | |
let B = C.getTimeMs(); | |
if (W === !1 && B > d + G) { | |
if (W = !0, w) Z() | |
} | |
if (B < d + G) W = !1 | |
}, 20), { | |
poll: () => { | |
C.reset() | |
}, | |
enabled: (B) => { | |
w = B | |
} | |
} | |
} | |
function oy2(I, d, G) { | |
let Z = d ? d.replace(/^file:\/\//, "") : void 0, | |
C = I.location.columnNumber ? I.location.columnNumber + 1 : void 0, | |
W = I.location.lineNumber ? I.location.lineNumber + 1 : void 0; | |
return ry2.dropUndefinedKeys({ | |
filename: Z, | |
module: G(Z), | |
function: I.functionName || "?", | |
colno: C, | |
lineno: W, | |
in_app: Z ? ay2.filenameIsInApp(Z) : void 0 | |
}) | |
} | |
Jf1.callFrameToStackFrame = oy2; | |
Jf1.watchdogTimer = sy2 | |
}); | |
var Qf1 = Y((zf1) => { | |
Object.defineProperty(zf1, "__esModule", { | |
value: !0 | |
}); | |
class Nf1 { | |
constructor(I) { | |
this._maxSize = I, this._cache = new Map | |
} | |
get size() { | |
return this._cache.size | |
} | |
get(I) { | |
let d = this._cache.get(I); | |
if (d === void 0) return; | |
return this._cache.delete(I), this._cache.set(I, d), d | |
} | |
set(I, d) { | |
if (this._cache.size >= this._maxSize) this._cache.delete(this._cache.keys().next().value); | |
this._cache.set(I, d) | |
} | |
remove(I) { | |
let d = this._cache.get(I); | |
if (d) this._cache.delete(I); | |
return d | |
} | |
clear() { | |
this._cache.clear() | |
} | |
keys() { | |
return Array.from(this._cache.keys()) | |
} | |
values() { | |
let I = []; | |
return this._cache.forEach((d) => I.push(d)), I | |
} | |
} | |
zf1.LRUMap = Nf1 | |
}); | |
var ct = Y((ff1) => { | |
Object.defineProperty(ff1, "__esModule", { | |
value: !0 | |
}); | |
function dP2(I, d) { | |
return I != null ? I : d() | |
} | |
ff1._nullishCoalesce = dP2 | |
}); | |
var Rf1 = Y((qf1) => { | |
Object.defineProperty(qf1, "__esModule", { | |
value: !0 | |
}); | |
var ZP2 = ct(); | |
async function CP2(I, d) { | |
return ZP2._nullishCoalesce(I, d) | |
} | |
qf1._asyncNullishCoalesce = CP2 | |
}); | |
var pt = Y((Uf1) => { | |
Object.defineProperty(Uf1, "__esModule", { | |
value: !0 | |
}); | |
async function wP2(I) { | |
let d = void 0, | |
G = I[0], | |
Z = 1; | |
while (Z < I.length) { | |
let C = I[Z], | |
W = I[Z + 1]; | |
if (Z += 2, (C === "optionalAccess" || C === "optionalCall") && G == null) return; | |
if (C === "access" || C === "optionalAccess") d = G, G = await W(G); | |
else if (C === "call" || C === "optionalCall") G = await W((...w) => G.call(d, ...w)), d = void 0 | |
} | |
return G | |
} | |
Uf1._asyncOptionalChain = wP2 | |
}); | |
var Ef1 = Y((vf1) => { | |
Object.defineProperty(vf1, "__esModule", { | |
value: !0 | |
}); | |
var AP2 = pt(); | |
async function VP2(I) { | |
let d = await AP2._asyncOptionalChain(I); | |
return d == null ? !0 : d | |
} | |
vf1._asyncOptionalChainDelete = VP2 | |
}); | |
var it = Y((Mf1) => { | |
Object.defineProperty(Mf1, "__esModule", { | |
value: !0 | |
}); | |
function YP2(I) { | |
let d = void 0, | |
G = I[0], | |
Z = 1; | |
while (Z < I.length) { | |
let C = I[Z], | |
W = I[Z + 1]; | |
if (Z += 2, (C === "optionalAccess" || C === "optionalCall") && G == null) return; | |
if (C === "access" || C === "optionalAccess") d = G, G = W(G); | |
else if (C === "call" || C === "optionalCall") G = W((...w) => G.call(d, ...w)), d = void 0 | |
} | |
return G | |
} | |
Mf1._optionalChain = YP2 | |
}); | |
var Lf1 = Y((Sf1) => { | |
Object.defineProperty(Sf1, "__esModule", { | |
value: !0 | |
}); | |
var DP2 = it(); | |
function HP2(I) { | |
let d = DP2._optionalChain(I); | |
return d == null ? !0 : d | |
} | |
Sf1._optionalChainDelete = HP2 | |
}); | |
var Pf1 = Y((yf1) => { | |
Object.defineProperty(yf1, "__esModule", { | |
value: !0 | |
}); | |
function gP2(I) { | |
return I.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d") | |
} | |
yf1.escapeStringForRegex = gP2 | |
}); | |
var V0 = Y((et) => { | |
Object.defineProperty(et, "__esModule", { | |
value: !0 | |
}); | |
var KP2 = Cz1(), | |
zO = se(), | |
nt = It(), | |
NP2 = dt(), | |
rt = K7(), | |
zP2 = WQ1(), | |
N7 = xG(), | |
QP2 = XQ1(), | |
QO = DC(), | |
fP2 = St(), | |
xX = Qv(), | |
at = Mt(), | |
fO = Uv(), | |
fA = cG(), | |
YF = QQ1(), | |
qP2 = RQ1(), | |
_F = $Q1(), | |
st = mQ1(), | |
Ev = CO(), | |
Mv = Nv(), | |
cX = Ht(), | |
ot = Pt(), | |
Sv = Ot(), | |
Lv = sQ1(), | |
$f1 = Et(), | |
Ww = jt(), | |
RP2 = df1(), | |
yv = wf1(), | |
BN = lt(), | |
qO = ut(), | |
UP2 = Xf1(), | |
vP2 = _f1(), | |
RO = gf1(), | |
uf1 = Kf1(), | |
EP2 = Qf1(), | |
MP2 = Rf1(), | |
SP2 = pt(), | |
LP2 = Ef1(), | |
yP2 = ct(), | |
PP2 = it(), | |
$P2 = Lf1(), | |
uP2 = wt(), | |
TP2 = Yt(), | |
Tf1 = Ut(), | |
OP2 = gt(), | |
mP2 = Rt(), | |
lP2 = Nt(), | |
bP2 = ft(), | |
hP2 = zA(), | |
jP2 = ZO(), | |
kP2 = Pf1(), | |
xP2 = qt(); | |
et.applyAggregateErrorsToEvent = KP2.applyAggregateErrorsToEvent; | |
et.getComponentName = zO.getComponentName; | |
et.getDomElement = zO.getDomElement; | |
et.getLocationHref = zO.getLocationHref; | |
et.htmlTreeAsString = zO.htmlTreeAsString; | |
et.dsnFromString = nt.dsnFromString; | |
et.dsnToString = nt.dsnToString; | |
et.makeDsn = nt.makeDsn; | |
et.SentryError = NP2.SentryError; | |
et.GLOBAL_OBJ = rt.GLOBAL_OBJ; | |
et.getGlobalObject = rt.getGlobalObject; | |
et.getGlobalSingleton = rt.getGlobalSingleton; | |
et.addInstrumentationHandler = zP2.addInstrumentationHandler; | |
et.isDOMError = N7.isDOMError; | |
et.isDOMException = N7.isDOMException; | |
et.isElement = N7.isElement; | |
et.isError = N7.isError; | |
et.isErrorEvent = N7.isErrorEvent; | |
et.isEvent = N7.isEvent; | |
et.isInstanceOf = N7.isInstanceOf; | |
et.isNaN = N7.isNaN; | |
et.isParameterizedString = N7.isParameterizedString; | |
et.isPlainObject = N7.isPlainObject; | |
et.isPrimitive = N7.isPrimitive; | |
et.isRegExp = N7.isRegExp; | |
et.isString = N7.isString; | |
et.isSyntheticEvent = N7.isSyntheticEvent; | |
et.isThenable = N7.isThenable; | |
et.isVueViewModel = N7.isVueViewModel; | |
et.isBrowser = QP2.isBrowser; | |
et.CONSOLE_LEVELS = QO.CONSOLE_LEVELS; | |
et.consoleSandbox = QO.consoleSandbox; | |
et.logger = QO.logger; | |
et.originalConsoleMethods = QO.originalConsoleMethods; | |
et.memoBuilder = fP2.memoBuilder; | |
et.addContextToFrame = xX.addContextToFrame; | |
et.addExceptionMechanism = xX.addExceptionMechanism; | |
et.addExceptionTypeValue = xX.addExceptionTypeValue; | |
et.arrayify = xX.arrayify; | |
et.checkOrSetAlreadyCaught = xX.checkOrSetAlreadyCaught; | |
et.getEventDescription = xX.getEventDescription; | |
et.parseSemver = xX.parseSemver; | |
et.uuid4 = xX.uuid4; | |
et.dynamicRequire = at.dynamicRequire; | |
et.isNodeEnv = at.isNodeEnv; | |
et.loadModule = at.loadModule; | |
et.normalize = fO.normalize; | |
et.normalizeToSize = fO.normalizeToSize; | |
et.normalizeUrlToBase = fO.normalizeUrlToBase; | |
et.walk = fO.walk; | |
et.addNonEnumerableProperty = fA.addNonEnumerableProperty; | |
et.convertToPlainObject = fA.convertToPlainObject; | |
et.dropUndefinedKeys = fA.dropUndefinedKeys; | |
et.extractExceptionKeysForMessage = fA.extractExceptionKeysForMessage; | |
et.fill = fA.fill; | |
et.getOriginalFunction = fA.getOriginalFunction; | |
et.markFunctionWrapped = fA.markFunctionWrapped; | |
et.objectify = fA.objectify; | |
et.urlEncode = fA.urlEncode; | |
et.basename = YF.basename; | |
et.dirname = YF.dirname; | |
et.isAbsolute = YF.isAbsolute; | |
et.join = YF.join; | |
et.normalizePath = YF.normalizePath; | |
et.relative = YF.relative; | |
et.resolve = YF.resolve; | |
et.makePromiseBuffer = qP2.makePromiseBuffer; | |
et.DEFAULT_USER_INCLUDES = _F.DEFAULT_USER_INCLUDES; | |
et.addRequestDataToEvent = _F.addRequestDataToEvent; | |
et.addRequestDataToTransaction = _F.addRequestDataToTransaction; | |
et.extractPathForTransaction = _F.extractPathForTransaction; | |
et.extractRequestData = _F.extractRequestData; | |
et.winterCGHeadersToDict = _F.winterCGHeadersToDict; | |
et.winterCGRequestToRequestData = _F.winterCGRequestToRequestData; | |
et.severityFromString = st.severityFromString; | |
et.severityLevelFromString = st.severityLevelFromString; | |
et.validSeverityLevels = st.validSeverityLevels; | |
et.createStackParser = Ev.createStackParser; | |
et.getFunctionName = Ev.getFunctionName; | |
et.nodeStackLineParser = Ev.nodeStackLineParser; | |
et.stackParserFromStackParserOptions = Ev.stackParserFromStackParserOptions; | |
et.stripSentryFramesAndReverse = Ev.stripSentryFramesAndReverse; | |
et.isMatchingPattern = Mv.isMatchingPattern; | |
et.safeJoin = Mv.safeJoin; | |
et.snipLine = Mv.snipLine; | |
et.stringMatchesSomePattern = Mv.stringMatchesSomePattern; | |
et.truncate = Mv.truncate; | |
et.isNativeFetch = cX.isNativeFetch; | |
et.supportsDOMError = cX.supportsDOMError; | |
et.supportsDOMException = cX.supportsDOMException; | |
et.supportsErrorEvent = cX.supportsErrorEvent; | |
et.supportsFetch = cX.supportsFetch; | |
et.supportsNativeFetch = cX.supportsNativeFetch; | |
et.supportsReferrerPolicy = cX.supportsReferrerPolicy; | |
et.supportsReportingObserver = cX.supportsReportingObserver; | |
et.SyncPromise = ot.SyncPromise; | |
et.rejectedSyncPromise = ot.rejectedSyncPromise; | |
et.resolvedSyncPromise = ot.resolvedSyncPromise; | |
Object.defineProperty(et, "_browserPerformanceTimeOriginMode", { | |
enumerable: !0, | |
get: () => Sv._browserPerformanceTimeOriginMode | |
}); | |
et.browserPerformanceTimeOrigin = Sv.browserPerformanceTimeOrigin; | |
et.dateTimestampInSeconds = Sv.dateTimestampInSeconds; | |
et.timestampInSeconds = Sv.timestampInSeconds; | |
et.timestampWithMs = Sv.timestampWithMs; | |
et.TRACEPARENT_REGEXP = Lv.TRACEPARENT_REGEXP; | |
et.extractTraceparentData = Lv.extractTraceparentData; | |
et.generateSentryTraceHeader = Lv.generateSentryTraceHeader; | |
et.propagationContextFromHeaders = Lv.propagationContextFromHeaders; | |
et.tracingContextFromHeaders = Lv.tracingContextFromHeaders; | |
et.getSDKSource = $f1.getSDKSource; | |
et.isBrowserBundle = $f1.isBrowserBundle; | |
et.addItemToEnvelope = Ww.addItemToEnvelope; | |
et.createAttachmentEnvelopeItem = Ww.createAttachmentEnvelopeItem; | |
et.createEnvelope = Ww.createEnvelope; | |
et.createEventEnvelopeHeaders = Ww.createEventEnvelopeHeaders; | |
et.envelopeContainsItemType = Ww.envelopeContainsItemType; | |
et.envelopeItemTypeToDataCategory = Ww.envelopeItemTypeToDataCategory; | |
et.forEachEnvelopeItem = Ww.forEachEnvelopeItem; | |
et.getSdkMetadataForEnvelopeHeader = Ww.getSdkMetadataForEnvelopeHeader; | |
et.parseEnvelope = Ww.parseEnvelope; | |
et.serializeEnvelope = Ww.serializeEnvelope; | |
et.createClientReportEnvelope = RP2.createClientReportEnvelope; | |
et.DEFAULT_RETRY_AFTER = yv.DEFAULT_RETRY_AFTER; | |
et.disabledUntil = yv.disabledUntil; | |
et.isRateLimited = yv.isRateLimited; | |
et.parseRetryAfterHeader = yv.parseRetryAfterHeader; | |
et.updateRateLimits = yv.updateRateLimits; | |
et.BAGGAGE_HEADER_NAME = BN.BAGGAGE_HEADER_NAME; | |
et.MAX_BAGGAGE_STRING_LENGTH = BN.MAX_BAGGAGE_STRING_LENGTH; | |
et.SENTRY_BAGGAGE_KEY_PREFIX = BN.SENTRY_BAGGAGE_KEY_PREFIX; | |
et.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = BN.SENTRY_BAGGAGE_KEY_PREFIX_REGEX; | |
et.baggageHeaderToDynamicSamplingContext = BN.baggageHeaderToDynamicSamplingContext; | |
et.dynamicSamplingContextToSentryBaggageHeader = BN.dynamicSamplingContextToSentryBaggageHeader; | |
et.getNumberOfUrlSegments = qO.getNumberOfUrlSegments; | |
et.getSanitizedUrlString = qO.getSanitizedUrlString; | |
et.parseUrl = qO.parseUrl; | |
et.stripUrlQueryAndFragment = qO.stripUrlQueryAndFragment; | |
et.addOrUpdateIntegration = UP2.addOrUpdateIntegration; | |
et.makeFifoCache = vP2.makeFifoCache; | |
et.eventFromMessage = RO.eventFromMessage; | |
et.eventFromUnknownInput = RO.eventFromUnknownInput; | |
et.exceptionFromError = RO.exceptionFromError; | |
et.parseStackFrames = RO.parseStackFrames; | |
et.callFrameToStackFrame = uf1.callFrameToStackFrame; | |
et.watchdogTimer = uf1.watchdogTimer; | |
et.LRUMap = EP2.LRUMap; | |
et._asyncNullishCoalesce = MP2._asyncNullishCoalesce; | |
et._asyncOptionalChain = SP2._asyncOptionalChain; | |
et._asyncOptionalChainDelete = LP2._asyncOptionalChainDelete; | |
et._nullishCoalesce = yP2._nullishCoalesce; | |
et._optionalChain = PP2._optionalChain; | |
et._optionalChainDelete = $P2._optionalChainDelete; | |
et.addConsoleInstrumentationHandler = uP2.addConsoleInstrumentationHandler; | |
et.addClickKeypressInstrumentationHandler = TP2.addClickKeypressInstrumentationHandler; | |
et.SENTRY_XHR_DATA_KEY = Tf1.SENTRY_XHR_DATA_KEY; | |
et.addXhrInstrumentationHandler = Tf1.addXhrInstrumentationHandler; | |
et.addFetchInstrumentationHandler = OP2.addFetchInstrumentationHandler; | |
et.addHistoryInstrumentationHandler = mP2.addHistoryInstrumentationHandler; | |
et.addGlobalErrorInstrumentationHandler = lP2.addGlobalErrorInstrumentationHandler; | |
et.addGlobalUnhandledRejectionInstrumentationHandler = bP2.addGlobalUnhandledRejectionInstrumentationHandler; | |
et.resetInstrumentationHandlers = hP2.resetInstrumentationHandlers; | |
et.filenameIsInApp = jP2.filenameIsInApp; | |
et.escapeStringForRegex = kP2.escapeStringForRegex; | |
et.supportsHistory = xP2.supportsHistory | |
}); | |
var F6 = Y((Of1) => { | |
Object.defineProperty(Of1, "__esModule", { | |
value: !0 | |
}); | |
var cT2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
Of1.DEBUG_BUILD = cT2 | |
}); | |
var AN = Y((mf1) => { | |
Object.defineProperty(mf1, "__esModule", { | |
value: !0 | |
}); | |
var iT2 = "production"; | |
mf1.DEFAULT_ENVIRONMENT = iT2 | |
}); | |
var Pv = Y((bf1) => { | |
Object.defineProperty(bf1, "__esModule", { | |
value: !0 | |
}); | |
var UO = V0(), | |
rT2 = F6(); | |
function lf1() { | |
return UO.getGlobalSingleton("globalEventProcessors", () => []) | |
} | |
function aT2(I) { | |
lf1().push(I) | |
} | |
function tt(I, d, G, Z = 0) { | |
return new UO.SyncPromise((C, W) => { | |
let w = I[Z]; | |
if (d === null || typeof w !== "function") C(d); | |
else { | |
let B = w({ | |
...d | |
}, G); | |
if (rT2.DEBUG_BUILD && w.id && B === null && UO.logger.log(`Event processor "${w.id}" dropped event`), UO.isThenable(B)) B.then((A) => tt(I, A, G, Z + 1).then(C)).then(null, W); | |
else tt(I, B, G, Z + 1).then(C).then(null, W) | |
} | |
}) | |
} | |
bf1.addGlobalEventProcessor = aT2; | |
bf1.getGlobalEventProcessors = lf1; | |
bf1.notifyEventProcessors = tt | |
}); | |
var VN = Y((hf1) => { | |
Object.defineProperty(hf1, "__esModule", { | |
value: !0 | |
}); | |
var $v = V0(); | |
function tT2(I) { | |
let d = $v.timestampInSeconds(), | |
G = { | |
sid: $v.uuid4(), | |
init: !0, | |
timestamp: d, | |
started: d, | |
duration: 0, | |
status: "ok", | |
errors: 0, | |
ignoreDuration: !1, | |
toJSON: () => dO2(G) | |
}; | |
if (I) I11(G, I); | |
return G | |
} | |
function I11(I, d = {}) { | |
if (d.user) { | |
if (!I.ipAddress && d.user.ip_address) I.ipAddress = d.user.ip_address; | |
if (!I.did && !d.did) I.did = d.user.id || d.user.email || d.user.username | |
} | |
if (I.timestamp = d.timestamp || $v.timestampInSeconds(), d.abnormal_mechanism) I.abnormal_mechanism = d.abnormal_mechanism; | |
if (d.ignoreDuration) I.ignoreDuration = d.ignoreDuration; | |
if (d.sid) I.sid = d.sid.length === 32 ? d.sid : $v.uuid4(); | |
if (d.init !== void 0) I.init = d.init; | |
if (!I.did && d.did) I.did = `${d.did}`; | |
if (typeof d.started === "number") I.started = d.started; | |
if (I.ignoreDuration) I.duration = void 0; | |
else if (typeof d.duration === "number") I.duration = d.duration; | |
else { | |
let G = I.timestamp - I.started; | |
I.duration = G >= 0 ? G : 0 | |
} | |
if (d.release) I.release = d.release; | |
if (d.environment) I.environment = d.environment; | |
if (!I.ipAddress && d.ipAddress) I.ipAddress = d.ipAddress; | |
if (!I.userAgent && d.userAgent) I.userAgent = d.userAgent; | |
if (typeof d.errors === "number") I.errors = d.errors; | |
if (d.status) I.status = d.status | |
} | |
function IO2(I, d) { | |
let G = {}; | |
if (d) G = { | |
status: d | |
}; | |
else if (I.status === "ok") G = { | |
status: "exited" | |
}; | |
I11(I, G) | |
} | |
function dO2(I) { | |
return $v.dropUndefinedKeys({ | |
sid: `${I.sid}`, | |
init: I.init, | |
started: new Date(I.started * 1000).toISOString(), | |
timestamp: new Date(I.timestamp * 1000).toISOString(), | |
status: I.status, | |
errors: I.errors, | |
did: typeof I.did === "number" || typeof I.did === "string" ? `${I.did}` : void 0, | |
duration: I.duration, | |
abnormal_mechanism: I.abnormal_mechanism, | |
attrs: { | |
release: I.release, | |
environment: I.environment, | |
ip_address: I.ipAddress, | |
user_agent: I.userAgent | |
} | |
}) | |
} | |
hf1.closeSession = IO2; | |
hf1.makeSession = tT2; | |
hf1.updateSession = I11 | |
}); | |
var kI = Y((pf1) => { | |
Object.defineProperty(pf1, "__esModule", { | |
value: !0 | |
}); | |
var d11 = V0(), | |
WO2 = 0, | |
kf1 = 1; | |
function wO2(I) { | |
let { | |
spanId: d, | |
traceId: G | |
} = I.spanContext(), { | |
data: Z, | |
op: C, | |
parent_span_id: W, | |
status: w, | |
tags: B, | |
origin: A | |
} = xf1(I); | |
return d11.dropUndefinedKeys({ | |
data: Z, | |
op: C, | |
parent_span_id: W, | |
span_id: d, | |
status: w, | |
tags: B, | |
trace_id: G, | |
origin: A | |
}) | |
} | |
function BO2(I) { | |
let { | |
traceId: d, | |
spanId: G | |
} = I.spanContext(), Z = cf1(I); | |
return d11.generateSentryTraceHeader(d, G, Z) | |
} | |
function AO2(I) { | |
if (typeof I === "number") return jf1(I); | |
if (Array.isArray(I)) return I[0] + I[1] / 1e9; | |
if (I instanceof Date) return jf1(I.getTime()); | |
return d11.timestampInSeconds() | |
} | |
function jf1(I) { | |
return I > 9999999999 ? I / 1000 : I | |
} | |
function xf1(I) { | |
if (VO2(I)) return I.getSpanJSON(); | |
if (typeof I.toJSON === "function") return I.toJSON(); | |
return {} | |
} | |
function VO2(I) { | |
return typeof I.getSpanJSON === "function" | |
} | |
function cf1(I) { | |
let { | |
traceFlags: d | |
} = I.spanContext(); | |
return Boolean(d & kf1) | |
} | |
pf1.TRACE_FLAG_NONE = WO2; | |
pf1.TRACE_FLAG_SAMPLED = kf1; | |
pf1.spanIsSampled = cf1; | |
pf1.spanTimeInputToSeconds = AO2; | |
pf1.spanToJSON = xf1; | |
pf1.spanToTraceContext = wO2; | |
pf1.spanToTraceHeader = BO2 | |
}); | |
var vO = Y((sf1) => { | |
Object.defineProperty(sf1, "__esModule", { | |
value: !0 | |
}); | |
var jd = V0(), | |
JO2 = AN(), | |
if1 = Pv(), | |
Z11 = MO(), | |
G11 = EO(), | |
KO2 = kI(); | |
function NO2(I, d, G, Z, C, W) { | |
let { | |
normalizeDepth: w = 3, | |
normalizeMaxBreadth: B = 1000 | |
} = I, A = { | |
...d, | |
event_id: d.event_id || G.event_id || jd.uuid4(), | |
timestamp: d.timestamp || jd.dateTimestampInSeconds() | |
}, V = G.integrations || I.integrations.map((Q) => Q.name); | |
if (zO2(A, I), QO2(A, V), d.type === void 0) rf1(A, I.stackParser); | |
let X = qO2(Z, G.captureContext); | |
if (G.mechanism) jd.addExceptionMechanism(A, G.mechanism); | |
let _ = C && C.getEventProcessors ? C.getEventProcessors() : [], | |
F = Z11.getGlobalScope().getScopeData(); | |
if (W) { | |
let Q = W.getScopeData(); | |
G11.mergeScopeData(F, Q) | |
} | |
if (X) { | |
let Q = X.getScopeData(); | |
G11.mergeScopeData(F, Q) | |
} | |
let g = [...G.attachments || [], ...F.attachments]; | |
if (g.length) G.attachments = g; | |
G11.applyScopeDataToEvent(A, F); | |
let J = [..._, ...if1.getGlobalEventProcessors(), ...F.eventProcessors]; | |
return if1.notifyEventProcessors(J, A, G).then((Q) => { | |
if (Q) af1(Q); | |
if (typeof w === "number" && w > 0) return fO2(Q, w, B); | |
return Q | |
}) | |
} | |
function zO2(I, d) { | |
let { | |
environment: G, | |
release: Z, | |
dist: C, | |
maxValueLength: W = 250 | |
} = d; | |
if (!("environment" in I)) I.environment = "environment" in d ? G : JO2.DEFAULT_ENVIRONMENT; | |
if (I.release === void 0 && Z !== void 0) I.release = Z; | |
if (I.dist === void 0 && C !== void 0) I.dist = C; | |
if (I.message) I.message = jd.truncate(I.message, W); | |
let w = I.exception && I.exception.values && I.exception.values[0]; | |
if (w && w.value) w.value = jd.truncate(w.value, W); | |
let B = I.request; | |
if (B && B.url) B.url = jd.truncate(B.url, W) | |
} | |
var nf1 = new WeakMap; | |
function rf1(I, d) { | |
let G = jd.GLOBAL_OBJ._sentryDebugIds; | |
if (!G) return; | |
let Z, C = nf1.get(d); | |
if (C) Z = C; | |
else Z = new Map, nf1.set(d, Z); | |
let W = Object.keys(G).reduce((w, B) => { | |
let A, V = Z.get(B); | |
if (V) A = V; | |
else A = d(B), Z.set(B, A); | |
for (let X = A.length - 1; X >= 0; X--) { | |
let _ = A[X]; | |
if (_.filename) { | |
w[_.filename] = G[B]; | |
break | |
} | |
} | |
return w | |
}, {}); | |
try { | |
I.exception.values.forEach((w) => { | |
w.stacktrace.frames.forEach((B) => { | |
if (B.filename) B.debug_id = W[B.filename] | |
}) | |
}) | |
} catch (w) {} | |
} | |
function af1(I) { | |
let d = {}; | |
try { | |
I.exception.values.forEach((Z) => { | |
Z.stacktrace.frames.forEach((C) => { | |
if (C.debug_id) { | |
if (C.abs_path) d[C.abs_path] = C.debug_id; | |
else if (C.filename) d[C.filename] = C.debug_id; | |
delete C.debug_id | |
} | |
}) | |
}) | |
} catch (Z) {} | |
if (Object.keys(d).length === 0) return; | |
I.debug_meta = I.debug_meta || {}, I.debug_meta.images = I.debug_meta.images || []; | |
let G = I.debug_meta.images; | |
Object.keys(d).forEach((Z) => { | |
G.push({ | |
type: "sourcemap", | |
code_file: Z, | |
debug_id: d[Z] | |
}) | |
}) | |
} | |
function QO2(I, d) { | |
if (d.length > 0) I.sdk = I.sdk || {}, I.sdk.integrations = [...I.sdk.integrations || [], ...d] | |
} | |
function fO2(I, d, G) { | |
if (!I) return null; | |
let Z = { | |
...I, | |
...I.breadcrumbs && { | |
breadcrumbs: I.breadcrumbs.map((C) => ({ | |
...C, | |
...C.data && { | |
data: jd.normalize(C.data, d, G) | |
} | |
})) | |
}, | |
...I.user && { | |
user: jd.normalize(I.user, d, G) | |
}, | |
...I.contexts && { | |
contexts: jd.normalize(I.contexts, d, G) | |
}, | |
...I.extra && { | |
extra: jd.normalize(I.extra, d, G) | |
} | |
}; | |
if (I.contexts && I.contexts.trace && Z.contexts) { | |
if (Z.contexts.trace = I.contexts.trace, I.contexts.trace.data) Z.contexts.trace.data = jd.normalize(I.contexts.trace.data, d, G) | |
} | |
if (I.spans) Z.spans = I.spans.map((C) => { | |
let W = KO2.spanToJSON(C).data; | |
if (W) C.data = jd.normalize(W, d, G); | |
return C | |
}); | |
return Z | |
} | |
function qO2(I, d) { | |
if (!d) return I; | |
let G = I ? I.clone() : new Z11.Scope; | |
return G.update(d), G | |
} | |
function RO2(I) { | |
if (!I) return; | |
if (UO2(I)) return { | |
captureContext: I | |
}; | |
if (EO2(I)) return { | |
captureContext: I | |
}; | |
return I | |
} | |
function UO2(I) { | |
return I instanceof Z11.Scope || typeof I === "function" | |
} | |
var vO2 = ["user", "level", "extra", "contexts", "tags", "fingerprint", "requestSession", "propagationContext"]; | |
function EO2(I) { | |
return Object.keys(I).some((d) => vO2.includes(d)) | |
} | |
sf1.applyDebugIds = rf1; | |
sf1.applyDebugMeta = af1; | |
sf1.parseEventHintOrCaptureContext = RO2; | |
sf1.prepareEvent = NO2 | |
}); | |
var iG = Y((tf1) => { | |
Object.defineProperty(tf1, "__esModule", { | |
value: !0 | |
}); | |
var qA = V0(), | |
PO2 = AN(), | |
SO = F6(), | |
I6 = ww(), | |
C11 = VN(), | |
$O2 = vO(); | |
function uO2(I, d) { | |
return I6.getCurrentHub().captureException(I, $O2.parseEventHintOrCaptureContext(d)) | |
} | |
function TO2(I, d) { | |
let G = typeof d === "string" ? d : void 0, | |
Z = typeof d !== "string" ? { | |
captureContext: d | |
} : void 0; | |
return I6.getCurrentHub().captureMessage(I, G, Z) | |
} | |
function OO2(I, d) { | |
return I6.getCurrentHub().captureEvent(I, d) | |
} | |
function mO2(I) { | |
I6.getCurrentHub().configureScope(I) | |
} | |
function lO2(I, d) { | |
I6.getCurrentHub().addBreadcrumb(I, d) | |
} | |
function bO2(I, d) { | |
I6.getCurrentHub().setContext(I, d) | |
} | |
function hO2(I) { | |
I6.getCurrentHub().setExtras(I) | |
} | |
function jO2(I, d) { | |
I6.getCurrentHub().setExtra(I, d) | |
} | |
function kO2(I) { | |
I6.getCurrentHub().setTags(I) | |
} | |
function xO2(I, d) { | |
I6.getCurrentHub().setTag(I, d) | |
} | |
function cO2(I) { | |
I6.getCurrentHub().setUser(I) | |
} | |
function of1(...I) { | |
let d = I6.getCurrentHub(); | |
if (I.length === 2) { | |
let [G, Z] = I; | |
if (!G) return d.withScope(Z); | |
return d.withScope(() => { | |
return d.getStackTop().scope = G, Z(G) | |
}) | |
} | |
return d.withScope(I[0]) | |
} | |
function pO2(I) { | |
return I6.runWithAsyncContext(() => { | |
return I(I6.getIsolationScope()) | |
}) | |
} | |
function iO2(I, d) { | |
return of1((G) => { | |
return G.setSpan(I), d(G) | |
}) | |
} | |
function nO2(I, d) { | |
return I6.getCurrentHub().startTransaction({ | |
...I | |
}, d) | |
} | |
function W11(I, d) { | |
let G = uv(), | |
Z = DF(); | |
if (!Z) SO.DEBUG_BUILD && qA.logger.warn("Cannot capture check-in. No client defined."); | |
else if (!Z.captureCheckIn) SO.DEBUG_BUILD && qA.logger.warn("Cannot capture check-in. Client does not support sending check-ins."); | |
else return Z.captureCheckIn(I, d, G); | |
return qA.uuid4() | |
} | |
function rO2(I, d, G) { | |
let Z = W11({ | |
monitorSlug: I, | |
status: "in_progress" | |
}, G), | |
C = qA.timestampInSeconds(); | |
function W(B) { | |
W11({ | |
monitorSlug: I, | |
status: B, | |
checkInId: Z, | |
duration: qA.timestampInSeconds() - C | |
}) | |
} | |
let w; | |
try { | |
w = d() | |
} catch (B) { | |
throw W("error"), B | |
} | |
if (qA.isThenable(w)) Promise.resolve(w).then(() => { | |
W("ok") | |
}, () => { | |
W("error") | |
}); | |
else W("ok"); | |
return w | |
} | |
async function aO2(I) { | |
let d = DF(); | |
if (d) return d.flush(I); | |
return SO.DEBUG_BUILD && qA.logger.warn("Cannot flush events. No client defined."), Promise.resolve(!1) | |
} | |
async function sO2(I) { | |
let d = DF(); | |
if (d) return d.close(I); | |
return SO.DEBUG_BUILD && qA.logger.warn("Cannot flush events and disable SDK. No client defined."), Promise.resolve(!1) | |
} | |
function oO2() { | |
return I6.getCurrentHub().lastEventId() | |
} | |
function DF() { | |
return I6.getCurrentHub().getClient() | |
} | |
function eO2() { | |
return !!DF() | |
} | |
function uv() { | |
return I6.getCurrentHub().getScope() | |
} | |
function tO2(I) { | |
let d = DF(), | |
G = I6.getIsolationScope(), | |
Z = uv(), | |
{ | |
release: C, | |
environment: W = PO2.DEFAULT_ENVIRONMENT | |
} = d && d.getOptions() || {}, | |
{ | |
userAgent: w | |
} = qA.GLOBAL_OBJ.navigator || {}, | |
B = C11.makeSession({ | |
release: C, | |
environment: W, | |
user: Z.getUser() || G.getUser(), | |
...w && { | |
userAgent: w | |
}, | |
...I | |
}), | |
A = G.getSession(); | |
if (A && A.status === "ok") C11.updateSession(A, { | |
status: "exited" | |
}); | |
return w11(), G.setSession(B), Z.setSession(B), B | |
} | |
function w11() { | |
let I = I6.getIsolationScope(), | |
d = uv(), | |
G = d.getSession() || I.getSession(); | |
if (G) C11.closeSession(G); | |
ef1(), I.setSession(), d.setSession() | |
} | |
function ef1() { | |
let I = I6.getIsolationScope(), | |
d = uv(), | |
G = DF(), | |
Z = d.getSession() || I.getSession(); | |
if (Z && G && G.captureSession) G.captureSession(Z) | |
} | |
function Im2(I = !1) { | |
if (I) { | |
w11(); | |
return | |
} | |
ef1() | |
} | |
tf1.addBreadcrumb = lO2; | |
tf1.captureCheckIn = W11; | |
tf1.captureEvent = OO2; | |
tf1.captureException = uO2; | |
tf1.captureMessage = TO2; | |
tf1.captureSession = Im2; | |
tf1.close = sO2; | |
tf1.configureScope = mO2; | |
tf1.endSession = w11; | |
tf1.flush = aO2; | |
tf1.getClient = DF; | |
tf1.getCurrentScope = uv; | |
tf1.isInitialized = eO2; | |
tf1.lastEventId = oO2; | |
tf1.setContext = bO2; | |
tf1.setExtra = jO2; | |
tf1.setExtras = hO2; | |
tf1.setTag = xO2; | |
tf1.setTags = kO2; | |
tf1.setUser = cO2; | |
tf1.startSession = tO2; | |
tf1.startTransaction = nO2; | |
tf1.withActiveSpan = iO2; | |
tf1.withIsolationScope = pO2; | |
tf1.withMonitor = rO2; | |
tf1.withScope = of1 | |
}); | |
var XN = Y((Iq1) => { | |
Object.defineProperty(Iq1, "__esModule", { | |
value: !0 | |
}); | |
function Em2(I) { | |
return I.transaction | |
} | |
Iq1.getRootSpan = Em2 | |
}); | |
var HF = Y((Zq1) => { | |
Object.defineProperty(Zq1, "__esModule", { | |
value: !0 | |
}); | |
var Sm2 = V0(), | |
Lm2 = AN(), | |
dq1 = iG(), | |
ym2 = XN(), | |
B11 = kI(); | |
function Gq1(I, d, G) { | |
let Z = d.getOptions(), | |
{ | |
publicKey: C | |
} = d.getDsn() || {}, | |
{ | |
segment: W | |
} = G && G.getUser() || {}, | |
w = Sm2.dropUndefinedKeys({ | |
environment: Z.environment || Lm2.DEFAULT_ENVIRONMENT, | |
release: Z.release, | |
user_segment: W, | |
public_key: C, | |
trace_id: I | |
}); | |
return d.emit && d.emit("createDsc", w), w | |
} | |
function Pm2(I) { | |
let d = dq1.getClient(); | |
if (!d) return {}; | |
let G = Gq1(B11.spanToJSON(I).trace_id || "", d, dq1.getCurrentScope()), | |
Z = ym2.getRootSpan(I); | |
if (!Z) return G; | |
let C = Z && Z._frozenDynamicSamplingContext; | |
if (C) return C; | |
let { | |
sampleRate: W, | |
source: w | |
} = Z.metadata; | |
if (W != null) G.sample_rate = `${W}`; | |
let B = B11.spanToJSON(Z); | |
if (w && w !== "url") G.transaction = B.description; | |
return G.sampled = String(B11.spanIsSampled(Z)), d.emit && d.emit("createDsc", G), G | |
} | |
Zq1.getDynamicSamplingContextFromClient = Gq1; | |
Zq1.getDynamicSamplingContextFromSpan = Pm2 | |
}); | |
var EO = Y((Wq1) => { | |
Object.defineProperty(Wq1, "__esModule", { | |
value: !0 | |
}); | |
var Tv = V0(), | |
Tm2 = HF(), | |
Om2 = XN(), | |
Cq1 = kI(); | |
function mm2(I, d) { | |
let { | |
fingerprint: G, | |
span: Z, | |
breadcrumbs: C, | |
sdkProcessingMetadata: W | |
} = d; | |
if (bm2(I, d), Z) km2(I, Z); | |
xm2(I, G), hm2(I, C), jm2(I, W) | |
} | |
function lm2(I, d) { | |
let { | |
extra: G, | |
tags: Z, | |
user: C, | |
contexts: W, | |
level: w, | |
sdkProcessingMetadata: B, | |
breadcrumbs: A, | |
fingerprint: V, | |
eventProcessors: X, | |
attachments: _, | |
propagationContext: F, | |
transactionName: g, | |
span: J | |
} = d; | |
if (YN(I, "extra", G), YN(I, "tags", Z), YN(I, "user", C), YN(I, "contexts", W), YN(I, "sdkProcessingMetadata", B), w) I.level = w; | |
if (g) I.transactionName = g; | |
if (J) I.span = J; | |
if (A.length) I.breadcrumbs = [...I.breadcrumbs, ...A]; | |
if (V.length) I.fingerprint = [...I.fingerprint, ...V]; | |
if (X.length) I.eventProcessors = [...I.eventProcessors, ...X]; | |
if (_.length) I.attachments = [...I.attachments, ..._]; | |
I.propagationContext = { | |
...I.propagationContext, | |
...F | |
} | |
} | |
function YN(I, d, G) { | |
if (G && Object.keys(G).length) { | |
I[d] = { | |
...I[d] | |
}; | |
for (let Z in G) | |
if (Object.prototype.hasOwnProperty.call(G, Z)) I[d][Z] = G[Z] | |
} | |
} | |
function bm2(I, d) { | |
let { | |
extra: G, | |
tags: Z, | |
user: C, | |
contexts: W, | |
level: w, | |
transactionName: B | |
} = d, A = Tv.dropUndefinedKeys(G); | |
if (A && Object.keys(A).length) I.extra = { | |
...A, | |
...I.extra | |
}; | |
let V = Tv.dropUndefinedKeys(Z); | |
if (V && Object.keys(V).length) I.tags = { | |
...V, | |
...I.tags | |
}; | |
let X = Tv.dropUndefinedKeys(C); | |
if (X && Object.keys(X).length) I.user = { | |
...X, | |
...I.user | |
}; | |
let _ = Tv.dropUndefinedKeys(W); | |
if (_ && Object.keys(_).length) I.contexts = { | |
..._, | |
...I.contexts | |
}; | |
if (w) I.level = w; | |
if (B) I.transaction = B | |
} | |
function hm2(I, d) { | |
let G = [...I.breadcrumbs || [], ...d]; | |
I.breadcrumbs = G.length ? G : void 0 | |
} | |
function jm2(I, d) { | |
I.sdkProcessingMetadata = { | |
...I.sdkProcessingMetadata, | |
...d | |
} | |
} | |
function km2(I, d) { | |
I.contexts = { | |
trace: Cq1.spanToTraceContext(d), | |
...I.contexts | |
}; | |
let G = Om2.getRootSpan(d); | |
if (G) { | |
I.sdkProcessingMetadata = { | |
dynamicSamplingContext: Tm2.getDynamicSamplingContextFromSpan(d), | |
...I.sdkProcessingMetadata | |
}; | |
let Z = Cq1.spanToJSON(G).description; | |
if (Z) I.tags = { | |
transaction: Z, | |
...I.tags | |
} | |
} | |
} | |
function xm2(I, d) { | |
if (I.fingerprint = I.fingerprint ? Tv.arrayify(I.fingerprint) : [], d) I.fingerprint = I.fingerprint.concat(d); | |
if (I.fingerprint && !I.fingerprint.length) delete I.fingerprint | |
} | |
Wq1.applyScopeDataToEvent = mm2; | |
Wq1.mergeAndOverwriteScopeData = YN; | |
Wq1.mergeScopeData = lm2 | |
}); | |
var MO = Y((Aq1) => { | |
Object.defineProperty(Aq1, "__esModule", { | |
value: !0 | |
}); | |
var Bw = V0(), | |
wq1 = Pv(), | |
nm2 = VN(), | |
rm2 = EO(), | |
am2 = 100, | |
LO; | |
class _N { | |
constructor() { | |
this._notifyingListeners = !1, this._scopeListeners = [], this._eventProcessors = [], this._breadcrumbs = [], this._attachments = [], this._user = {}, this._tags = {}, this._extra = {}, this._contexts = {}, this._sdkProcessingMetadata = {}, this._propagationContext = Bq1() | |
} | |
static clone(I) { | |
return I ? I.clone() : new _N | |
} | |
clone() { | |
let I = new _N; | |
return I._breadcrumbs = [...this._breadcrumbs], I._tags = { | |
...this._tags | |
}, I._extra = { | |
...this._extra | |
}, I._contexts = { | |
...this._contexts | |
}, I._user = this._user, I._level = this._level, I._span = this._span, I._session = this._session, I._transactionName = this._transactionName, I._fingerprint = this._fingerprint, I._eventProcessors = [...this._eventProcessors], I._requestSession = this._requestSession, I._attachments = [...this._attachments], I._sdkProcessingMetadata = { | |
...this._sdkProcessingMetadata | |
}, I._propagationContext = { | |
...this._propagationContext | |
}, I._client = this._client, I | |
} | |
setClient(I) { | |
this._client = I | |
} | |
getClient() { | |
return this._client | |
} | |
addScopeListener(I) { | |
this._scopeListeners.push(I) | |
} | |
addEventProcessor(I) { | |
return this._eventProcessors.push(I), this | |
} | |
setUser(I) { | |
if (this._user = I || { | |
email: void 0, | |
id: void 0, | |
ip_address: void 0, | |
segment: void 0, | |
username: void 0 | |
}, this._session) nm2.updateSession(this._session, { | |
user: I | |
}); | |
return this._notifyScopeListeners(), this | |
} | |
getUser() { | |
return this._user | |
} | |
getRequestSession() { | |
return this._requestSession | |
} | |
setRequestSession(I) { | |
return this._requestSession = I, this | |
} | |
setTags(I) { | |
return this._tags = { | |
...this._tags, | |
...I | |
}, this._notifyScopeListeners(), this | |
} | |
setTag(I, d) { | |
return this._tags = { | |
...this._tags, | |
[I]: d | |
}, this._notifyScopeListeners(), this | |
} | |
setExtras(I) { | |
return this._extra = { | |
...this._extra, | |
...I | |
}, this._notifyScopeListeners(), this | |
} | |
setExtra(I, d) { | |
return this._extra = { | |
...this._extra, | |
[I]: d | |
}, this._notifyScopeListeners(), this | |
} | |
setFingerprint(I) { | |
return this._fingerprint = I, this._notifyScopeListeners(), this | |
} | |
setLevel(I) { | |
return this._level = I, this._notifyScopeListeners(), this | |
} | |
setTransactionName(I) { | |
return this._transactionName = I, this._notifyScopeListeners(), this | |
} | |
setContext(I, d) { | |
if (d === null) delete this._contexts[I]; | |
else this._contexts[I] = d; | |
return this._notifyScopeListeners(), this | |
} | |
setSpan(I) { | |
return this._span = I, this._notifyScopeListeners(), this | |
} | |
getSpan() { | |
return this._span | |
} | |
getTransaction() { | |
let I = this._span; | |
return I && I.transaction | |
} | |
setSession(I) { | |
if (!I) delete this._session; | |
else this._session = I; | |
return this._notifyScopeListeners(), this | |
} | |
getSession() { | |
return this._session | |
} | |
update(I) { | |
if (!I) return this; | |
let d = typeof I === "function" ? I(this) : I; | |
if (d instanceof _N) { | |
let G = d.getScopeData(); | |
if (this._tags = { | |
...this._tags, | |
...G.tags | |
}, this._extra = { | |
...this._extra, | |
...G.extra | |
}, this._contexts = { | |
...this._contexts, | |
...G.contexts | |
}, G.user && Object.keys(G.user).length) this._user = G.user; | |
if (G.level) this._level = G.level; | |
if (G.fingerprint.length) this._fingerprint = G.fingerprint; | |
if (d.getRequestSession()) this._requestSession = d.getRequestSession(); | |
if (G.propagationContext) this._propagationContext = G.propagationContext | |
} else if (Bw.isPlainObject(d)) { | |
let G = I; | |
if (this._tags = { | |
...this._tags, | |
...G.tags | |
}, this._extra = { | |
...this._extra, | |
...G.extra | |
}, this._contexts = { | |
...this._contexts, | |
...G.contexts | |
}, G.user) this._user = G.user; | |
if (G.level) this._level = G.level; | |
if (G.fingerprint) this._fingerprint = G.fingerprint; | |
if (G.requestSession) this._requestSession = G.requestSession; | |
if (G.propagationContext) this._propagationContext = G.propagationContext | |
} | |
return this | |
} | |
clear() { | |
return this._breadcrumbs = [], this._tags = {}, this._extra = {}, this._user = {}, this._contexts = {}, this._level = void 0, this._transactionName = void 0, this._fingerprint = void 0, this._requestSession = void 0, this._span = void 0, this._session = void 0, this._notifyScopeListeners(), this._attachments = [], this._propagationContext = Bq1(), this | |
} | |
addBreadcrumb(I, d) { | |
let G = typeof d === "number" ? d : am2; | |
if (G <= 0) return this; | |
let Z = { | |
timestamp: Bw.dateTimestampInSeconds(), | |
...I | |
}, | |
C = this._breadcrumbs; | |
return C.push(Z), this._breadcrumbs = C.length > G ? C.slice(-G) : C, this._notifyScopeListeners(), this | |
} | |
getLastBreadcrumb() { | |
return this._breadcrumbs[this._breadcrumbs.length - 1] | |
} | |
clearBreadcrumbs() { | |
return this._breadcrumbs = [], this._notifyScopeListeners(), this | |
} | |
addAttachment(I) { | |
return this._attachments.push(I), this | |
} | |
getAttachments() { | |
return this.getScopeData().attachments | |
} | |
clearAttachments() { | |
return this._attachments = [], this | |
} | |
getScopeData() { | |
let { | |
_breadcrumbs: I, | |
_attachments: d, | |
_contexts: G, | |
_tags: Z, | |
_extra: C, | |
_user: W, | |
_level: w, | |
_fingerprint: B, | |
_eventProcessors: A, | |
_propagationContext: V, | |
_sdkProcessingMetadata: X, | |
_transactionName: _, | |
_span: F | |
} = this; | |
return { | |
breadcrumbs: I, | |
attachments: d, | |
contexts: G, | |
tags: Z, | |
extra: C, | |
user: W, | |
level: w, | |
fingerprint: B || [], | |
eventProcessors: A, | |
propagationContext: V, | |
sdkProcessingMetadata: X, | |
transactionName: _, | |
span: F | |
} | |
} | |
applyToEvent(I, d = {}, G = []) { | |
rm2.applyScopeDataToEvent(I, this.getScopeData()); | |
let Z = [...G, ...wq1.getGlobalEventProcessors(), ...this._eventProcessors]; | |
return wq1.notifyEventProcessors(Z, I, d) | |
} | |
setSDKProcessingMetadata(I) { | |
return this._sdkProcessingMetadata = { | |
...this._sdkProcessingMetadata, | |
...I | |
}, this | |
} | |
setPropagationContext(I) { | |
return this._propagationContext = I, this | |
} | |
getPropagationContext() { | |
return this._propagationContext | |
} | |
captureException(I, d) { | |
let G = d && d.event_id ? d.event_id : Bw.uuid4(); | |
if (!this._client) return Bw.logger.warn("No client configured on scope - will not capture exception!"), G; | |
let Z = new Error("Sentry syntheticException"); | |
return this._client.captureException(I, { | |
originalException: I, | |
syntheticException: Z, | |
...d, | |
event_id: G | |
}, this), G | |
} | |
captureMessage(I, d, G) { | |
let Z = G && G.event_id ? G.event_id : Bw.uuid4(); | |
if (!this._client) return Bw.logger.warn("No client configured on scope - will not capture message!"), Z; | |
let C = new Error(I); | |
return this._client.captureMessage(I, d, { | |
originalException: I, | |
syntheticException: C, | |
...G, | |
event_id: Z | |
}, this), Z | |
} | |
captureEvent(I, d) { | |
let G = d && d.event_id ? d.event_id : Bw.uuid4(); | |
if (!this._client) return Bw.logger.warn("No client configured on scope - will not capture event!"), G; | |
return this._client.captureEvent(I, { | |
...d, | |
event_id: G | |
}, this), G | |
} | |
_notifyScopeListeners() { | |
if (!this._notifyingListeners) this._notifyingListeners = !0, this._scopeListeners.forEach((I) => { | |
I(this) | |
}), this._notifyingListeners = !1 | |
} | |
} | |
function sm2() { | |
if (!LO) LO = new _N; | |
return LO | |
} | |
function om2(I) { | |
LO = I | |
} | |
function Bq1() { | |
return { | |
traceId: Bw.uuid4(), | |
spanId: Bw.uuid4().substring(16) | |
} | |
} | |
Aq1.Scope = _N; | |
Aq1.getGlobalScope = sm2; | |
Aq1.setGlobalScope = om2 | |
}); | |
var yO = Y((Vq1) => { | |
Object.defineProperty(Vq1, "__esModule", { | |
value: !0 | |
}); | |
var dl2 = "7.120.0"; | |
Vq1.SDK_VERSION = dl2 | |
}); | |
var ww = Y((Hq1) => { | |
Object.defineProperty(Hq1, "__esModule", { | |
value: !0 | |
}); | |
var s7 = V0(), | |
Zl2 = AN(), | |
A11 = F6(), | |
Xq1 = MO(), | |
V11 = VN(), | |
Cl2 = yO(), | |
PO = parseFloat(Cl2.SDK_VERSION), | |
Wl2 = 100; | |
class mv { | |
constructor(I, d, G, Z = PO) { | |
this._version = Z; | |
let C; | |
if (!d) C = new Xq1.Scope, C.setClient(I); | |
else C = d; | |
let W; | |
if (!G) W = new Xq1.Scope, W.setClient(I); | |
else W = G; | |
if (this._stack = [{ | |
scope: C | |
}], I) this.bindClient(I); | |
this._isolationScope = W | |
} | |
isOlderThan(I) { | |
return this._version < I | |
} | |
bindClient(I) { | |
let d = this.getStackTop(); | |
if (d.client = I, d.scope.setClient(I), I && I.setupIntegrations) I.setupIntegrations() | |
} | |
pushScope() { | |
let I = this.getScope().clone(); | |
return this.getStack().push({ | |
client: this.getClient(), | |
scope: I | |
}), I | |
} | |
popScope() { | |
if (this.getStack().length <= 1) return !1; | |
return !!this.getStack().pop() | |
} | |
withScope(I) { | |
let d = this.pushScope(), | |
G; | |
try { | |
G = I(d) | |
} catch (Z) { | |
throw this.popScope(), Z | |
} | |
if (s7.isThenable(G)) return G.then((Z) => { | |
return this.popScope(), Z | |
}, (Z) => { | |
throw this.popScope(), Z | |
}); | |
return this.popScope(), G | |
} | |
getClient() { | |
return this.getStackTop().client | |
} | |
getScope() { | |
return this.getStackTop().scope | |
} | |
getIsolationScope() { | |
return this._isolationScope | |
} | |
getStack() { | |
return this._stack | |
} | |
getStackTop() { | |
return this._stack[this._stack.length - 1] | |
} | |
captureException(I, d) { | |
let G = this._lastEventId = d && d.event_id ? d.event_id : s7.uuid4(), | |
Z = new Error("Sentry syntheticException"); | |
return this.getScope().captureException(I, { | |
originalException: I, | |
syntheticException: Z, | |
...d, | |
event_id: G | |
}), G | |
} | |
captureMessage(I, d, G) { | |
let Z = this._lastEventId = G && G.event_id ? G.event_id : s7.uuid4(), | |
C = new Error(I); | |
return this.getScope().captureMessage(I, d, { | |
originalException: I, | |
syntheticException: C, | |
...G, | |
event_id: Z | |
}), Z | |
} | |
captureEvent(I, d) { | |
let G = d && d.event_id ? d.event_id : s7.uuid4(); | |
if (!I.type) this._lastEventId = G; | |
return this.getScope().captureEvent(I, { | |
...d, | |
event_id: G | |
}), G | |
} | |
lastEventId() { | |
return this._lastEventId | |
} | |
addBreadcrumb(I, d) { | |
let { | |
scope: G, | |
client: Z | |
} = this.getStackTop(); | |
if (!Z) return; | |
let { | |
beforeBreadcrumb: C = null, | |
maxBreadcrumbs: W = Wl2 | |
} = Z.getOptions && Z.getOptions() || {}; | |
if (W <= 0) return; | |
let B = { | |
timestamp: s7.dateTimestampInSeconds(), | |
...I | |
}, | |
A = C ? s7.consoleSandbox(() => C(B, d)) : B; | |
if (A === null) return; | |
if (Z.emit) Z.emit("beforeAddBreadcrumb", A, d); | |
G.addBreadcrumb(A, W) | |
} | |
setUser(I) { | |
this.getScope().setUser(I), this.getIsolationScope().setUser(I) | |
} | |
setTags(I) { | |
this.getScope().setTags(I), this.getIsolationScope().setTags(I) | |
} | |
setExtras(I) { | |
this.getScope().setExtras(I), this.getIsolationScope().setExtras(I) | |
} | |
setTag(I, d) { | |
this.getScope().setTag(I, d), this.getIsolationScope().setTag(I, d) | |
} | |
setExtra(I, d) { | |
this.getScope().setExtra(I, d), this.getIsolationScope().setExtra(I, d) | |
} | |
setContext(I, d) { | |
this.getScope().setContext(I, d), this.getIsolationScope().setContext(I, d) | |
} | |
configureScope(I) { | |
let { | |
scope: d, | |
client: G | |
} = this.getStackTop(); | |
if (G) I(d) | |
} | |
run(I) { | |
let d = X11(this); | |
try { | |
I(this) | |
} finally { | |
X11(d) | |
} | |
} | |
getIntegration(I) { | |
let d = this.getClient(); | |
if (!d) return null; | |
try { | |
return d.getIntegration(I) | |
} catch (G) { | |
return A11.DEBUG_BUILD && s7.logger.warn(`Cannot retrieve integration ${I.id} from the current Hub`), null | |
} | |
} | |
startTransaction(I, d) { | |
let G = this._callExtensionMethod("startTransaction", I, d); | |
if (A11.DEBUG_BUILD && !G) | |
if (!this.getClient()) s7.logger.warn("Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'"); | |
else s7.logger.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init': | |
Sentry.addTracingExtensions(); | |
Sentry.init({...}); | |
`); | |
return G | |
} | |
traceHeaders() { | |
return this._callExtensionMethod("traceHeaders") | |
} | |
captureSession(I = !1) { | |
if (I) return this.endSession(); | |
this._sendSessionUpdate() | |
} | |
endSession() { | |
let d = this.getStackTop().scope, | |
G = d.getSession(); | |
if (G) V11.closeSession(G); | |
this._sendSessionUpdate(), d.setSession() | |
} | |
startSession(I) { | |
let { | |
scope: d, | |
client: G | |
} = this.getStackTop(), { | |
release: Z, | |
environment: C = Zl2.DEFAULT_ENVIRONMENT | |
} = G && G.getOptions() || {}, { | |
userAgent: W | |
} = s7.GLOBAL_OBJ.navigator || {}, w = V11.makeSession({ | |
release: Z, | |
environment: C, | |
user: d.getUser(), | |
...W && { | |
userAgent: W | |
}, | |
...I | |
}), B = d.getSession && d.getSession(); | |
if (B && B.status === "ok") V11.updateSession(B, { | |
status: "exited" | |
}); | |
return this.endSession(), d.setSession(w), w | |
} | |
shouldSendDefaultPii() { | |
let I = this.getClient(), | |
d = I && I.getOptions(); | |
return Boolean(d && d.sendDefaultPii) | |
} | |
_sendSessionUpdate() { | |
let { | |
scope: I, | |
client: d | |
} = this.getStackTop(), G = I.getSession(); | |
if (G && d && d.captureSession) d.captureSession(G) | |
} | |
_callExtensionMethod(I, ...d) { | |
let Z = FF().__SENTRY__; | |
if (Z && Z.extensions && typeof Z.extensions[I] === "function") return Z.extensions[I].apply(this, d); | |
A11.DEBUG_BUILD && s7.logger.warn(`Extension method ${I} couldn't be found, doing nothing.`) | |
} | |
} | |
function FF() { | |
return s7.GLOBAL_OBJ.__SENTRY__ = s7.GLOBAL_OBJ.__SENTRY__ || { | |
extensions: {}, | |
hub: void 0 | |
}, s7.GLOBAL_OBJ | |
} | |
function X11(I) { | |
let d = FF(), | |
G = Ov(d); | |
return $O(d, I), G | |
} | |
function Yq1() { | |
let I = FF(); | |
if (I.__SENTRY__ && I.__SENTRY__.acs) { | |
let d = I.__SENTRY__.acs.getCurrentHub(); | |
if (d) return d | |
} | |
return _q1(I) | |
} | |
function wl2() { | |
return Yq1().getIsolationScope() | |
} | |
function _q1(I = FF()) { | |
if (!Dq1(I) || Ov(I).isOlderThan(PO)) $O(I, new mv); | |
return Ov(I) | |
} | |
function Bl2(I, d = _q1()) { | |
if (!Dq1(I) || Ov(I).isOlderThan(PO)) { | |
let G = d.getClient(), | |
Z = d.getScope(), | |
C = d.getIsolationScope(); | |
$O(I, new mv(G, Z.clone(), C.clone())) | |
} | |
} | |
function Al2(I) { | |
let d = FF(); | |
d.__SENTRY__ = d.__SENTRY__ || {}, d.__SENTRY__.acs = I | |
} | |
function Vl2(I, d = {}) { | |
let G = FF(); | |
if (G.__SENTRY__ && G.__SENTRY__.acs) return G.__SENTRY__.acs.runWithAsyncContext(I, d); | |
return I() | |
} | |
function Dq1(I) { | |
return !!(I && I.__SENTRY__ && I.__SENTRY__.hub) | |
} | |
function Ov(I) { | |
return s7.getGlobalSingleton("hub", () => new mv, I) | |
} | |
function $O(I, d) { | |
if (!I) return !1; | |
let G = I.__SENTRY__ = I.__SENTRY__ || {}; | |
return G.hub = d, !0 | |
} | |
Hq1.API_VERSION = PO; | |
Hq1.Hub = mv; | |
Hq1.ensureHubOnCarrier = Bl2; | |
Hq1.getCurrentHub = Yq1; | |
Hq1.getHubFromCarrier = Ov; | |
Hq1.getIsolationScope = wl2; | |
Hq1.getMainCarrier = FF; | |
Hq1.makeMain = X11; | |
Hq1.runWithAsyncContext = Vl2; | |
Hq1.setAsyncContextStrategy = Al2; | |
Hq1.setHubOnCarrier = $O | |
}); | |
var uO = Y((gq1) => { | |
Object.defineProperty(gq1, "__esModule", { | |
value: !0 | |
}); | |
var Fq1 = V0(), | |
Ql2 = ww(); | |
function fl2(I) { | |
return (I || Ql2.getCurrentHub()).getScope().getTransaction() | |
} | |
var ql2 = Fq1.extractTraceparentData; | |
gq1.stripUrlQueryAndFragment = Fq1.stripUrlQueryAndFragment; | |
gq1.extractTraceparentData = ql2; | |
gq1.getActiveTransaction = fl2 | |
}); | |
var TO = Y((Kq1) => { | |
Object.defineProperty(Kq1, "__esModule", { | |
value: !0 | |
}); | |
var Y11 = V0(), | |
El2 = F6(), | |
Ml2 = uO(), | |
Jq1 = !1; | |
function Sl2() { | |
if (Jq1) return; | |
Jq1 = !0, Y11.addGlobalErrorInstrumentationHandler(_11), Y11.addGlobalUnhandledRejectionInstrumentationHandler(_11) | |
} | |
function _11() { | |
let I = Ml2.getActiveTransaction(); | |
if (I) El2.DEBUG_BUILD && Y11.logger.log("[Tracing] Transaction: internal_error -> Global error occured"), I.setStatus("internal_error") | |
} | |
_11.tag = "sentry_tracingErrorCallback"; | |
Kq1.registerErrorInstrumentation = Sl2 | |
}); | |
var DN = Y((Nq1) => { | |
Object.defineProperty(Nq1, "__esModule", { | |
value: !0 | |
}); | |
Nq1.SpanStatus = void 0; | |
(function(I) { | |
I.Ok = "ok"; | |
let G = "deadline_exceeded"; | |
I.DeadlineExceeded = G; | |
let Z = "unauthenticated"; | |
I.Unauthenticated = Z; | |
let C = "permission_denied"; | |
I.PermissionDenied = C; | |
let W = "not_found"; | |
I.NotFound = W; | |
let w = "resource_exhausted"; | |
I.ResourceExhausted = w; | |
let B = "invalid_argument"; | |
I.InvalidArgument = B; | |
let A = "unimplemented"; | |
I.Unimplemented = A; | |
let V = "unavailable"; | |
I.Unavailable = V; | |
let X = "internal_error"; | |
I.InternalError = X; | |
let _ = "unknown_error"; | |
I.UnknownError = _; | |
let F = "cancelled"; | |
I.Cancelled = F; | |
let g = "already_exists"; | |
I.AlreadyExists = g; | |
let J = "failed_precondition"; | |
I.FailedPrecondition = J; | |
let K = "aborted"; | |
I.Aborted = K; | |
let Q = "out_of_range"; | |
I.OutOfRange = Q; | |
let E = "data_loss"; | |
I.DataLoss = E | |
})(Nq1.SpanStatus || (Nq1.SpanStatus = {})); | |
function H11(I) { | |
if (I < 400 && I >= 100) return "ok"; | |
if (I >= 400 && I < 500) switch (I) { | |
case 401: | |
return "unauthenticated"; | |
case 403: | |
return "permission_denied"; | |
case 404: | |
return "not_found"; | |
case 409: | |
return "already_exists"; | |
case 413: | |
return "failed_precondition"; | |
case 429: | |
return "resource_exhausted"; | |
default: | |
return "invalid_argument" | |
} | |
if (I >= 500 && I < 600) switch (I) { | |
case 501: | |
return "unimplemented"; | |
case 503: | |
return "unavailable"; | |
case 504: | |
return "deadline_exceeded"; | |
default: | |
return "internal_error" | |
} | |
return "unknown_error" | |
} | |
var yl2 = H11; | |
function Pl2(I, d) { | |
I.setTag("http.status_code", String(d)), I.setData("http.response.status_code", d); | |
let G = H11(d); | |
if (G !== "unknown_error") I.setStatus(G) | |
} | |
Nq1.getSpanStatusFromHttpCode = H11; | |
Nq1.setHttpStatus = Pl2; | |
Nq1.spanStatusfromHttpCode = yl2 | |
}); | |
var F11 = Y((zq1) => { | |
Object.defineProperty(zq1, "__esModule", { | |
value: !0 | |
}); | |
var Ol2 = V0(); | |
function ml2(I, d, G = () => {}) { | |
let Z; | |
try { | |
Z = I() | |
} catch (C) { | |
throw d(C), G(), C | |
} | |
return ll2(Z, d, G) | |
} | |
function ll2(I, d, G) { | |
if (Ol2.isThenable(I)) return I.then((Z) => { | |
return G(), Z | |
}, (Z) => { | |
throw d(Z), G(), Z | |
}); | |
return G(), I | |
} | |
zq1.handleCallbackErrors = ml2 | |
}); | |
var OO = Y((Qq1) => { | |
Object.defineProperty(Qq1, "__esModule", { | |
value: !0 | |
}); | |
var hl2 = iG(); | |
function jl2(I) { | |
if (typeof __SENTRY_TRACING__ === "boolean" && !__SENTRY_TRACING__) return !1; | |
let d = hl2.getClient(), | |
G = I || d && d.getOptions(); | |
return !!G && (G.enableTracing || ("tracesSampleRate" in G) || ("tracesSampler" in G)) | |
} | |
Qq1.hasTracingEnabled = jl2 | |
}); | |
var hO = Y((Eq1) => { | |
Object.defineProperty(Eq1, "__esModule", { | |
value: !0 | |
}); | |
var lv = V0(), | |
xl2 = F6(), | |
pX = ww(), | |
mO = kI(); | |
TO(); | |
DN(); | |
var cl2 = HF(), | |
HN = iG(), | |
g11 = F11(), | |
fq1 = OO(); | |
function pl2(I, d, G = () => {}, Z = () => {}) { | |
let C = pX.getCurrentHub(), | |
W = HN.getCurrentScope(), | |
w = W.getSpan(), | |
B = bO(I), | |
A = lO(C, { | |
parentSpan: w, | |
spanContext: B, | |
forceTransaction: !1, | |
scope: W | |
}); | |
return W.setSpan(A), g11.handleCallbackErrors(() => d(A), (V) => { | |
A && A.setStatus("internal_error"), G(V, A) | |
}, () => { | |
A && A.end(), W.setSpan(w), Z() | |
}) | |
} | |
function qq1(I, d) { | |
let G = bO(I); | |
return pX.runWithAsyncContext(() => { | |
return HN.withScope(I.scope, (Z) => { | |
let C = pX.getCurrentHub(), | |
W = Z.getSpan(), | |
B = I.onlyIfParent && !W ? void 0 : lO(C, { | |
parentSpan: W, | |
spanContext: G, | |
forceTransaction: I.forceTransaction, | |
scope: Z | |
}); | |
return g11.handleCallbackErrors(() => d(B), () => { | |
if (B) { | |
let { | |
status: A | |
} = mO.spanToJSON(B); | |
if (!A || A === "ok") B.setStatus("internal_error") | |
} | |
}, () => B && B.end()) | |
}) | |
}) | |
} | |
var il2 = qq1; | |
function nl2(I, d) { | |
let G = bO(I); | |
return pX.runWithAsyncContext(() => { | |
return HN.withScope(I.scope, (Z) => { | |
let C = pX.getCurrentHub(), | |
W = Z.getSpan(), | |
B = I.onlyIfParent && !W ? void 0 : lO(C, { | |
parentSpan: W, | |
spanContext: G, | |
forceTransaction: I.forceTransaction, | |
scope: Z | |
}); | |
function A() { | |
B && B.end() | |
} | |
return g11.handleCallbackErrors(() => d(B, A), () => { | |
if (B && B.isRecording()) { | |
let { | |
status: V | |
} = mO.spanToJSON(B); | |
if (!V || V === "ok") B.setStatus("internal_error") | |
} | |
}) | |
}) | |
}) | |
} | |
function rl2(I) { | |
if (!fq1.hasTracingEnabled()) return; | |
let d = bO(I), | |
G = pX.getCurrentHub(), | |
Z = I.scope ? I.scope.getSpan() : Rq1(); | |
if (I.onlyIfParent && !Z) return; | |
let w = (I.scope || HN.getCurrentScope()).clone(); | |
return lO(G, { | |
parentSpan: Z, | |
spanContext: d, | |
forceTransaction: I.forceTransaction, | |
scope: w | |
}) | |
} | |
function Rq1() { | |
return HN.getCurrentScope().getSpan() | |
} | |
var al2 = ({ | |
sentryTrace: I, | |
baggage: d | |
}, G) => { | |
let Z = HN.getCurrentScope(), | |
{ | |
traceparentData: C, | |
dynamicSamplingContext: W, | |
propagationContext: w | |
} = lv.tracingContextFromHeaders(I, d); | |
if (Z.setPropagationContext(w), xl2.DEBUG_BUILD && C) lv.logger.log(`[Tracing] Continuing trace ${C.traceId}.`); | |
let B = { | |
...C, | |
metadata: lv.dropUndefinedKeys({ | |
dynamicSamplingContext: W | |
}) | |
}; | |
if (!G) return B; | |
return pX.runWithAsyncContext(() => { | |
return G(B) | |
}) | |
}; | |
function lO(I, { | |
parentSpan: d, | |
spanContext: G, | |
forceTransaction: Z, | |
scope: C | |
}) { | |
if (!fq1.hasTracingEnabled()) return; | |
let W = pX.getIsolationScope(), | |
w; | |
if (d && !Z) w = d.startChild(G); | |
else if (d) { | |
let B = cl2.getDynamicSamplingContextFromSpan(d), | |
{ | |
traceId: A, | |
spanId: V | |
} = d.spanContext(), | |
X = mO.spanIsSampled(d); | |
w = I.startTransaction({ | |
traceId: A, | |
parentSpanId: V, | |
parentSampled: X, | |
...G, | |
metadata: { | |
dynamicSamplingContext: B, | |
...G.metadata | |
} | |
}) | |
} else { | |
let { | |
traceId: B, | |
dsc: A, | |
parentSpanId: V, | |
sampled: X | |
} = { | |
...W.getPropagationContext(), | |
...C.getPropagationContext() | |
}; | |
w = I.startTransaction({ | |
traceId: B, | |
parentSpanId: V, | |
parentSampled: X, | |
...G, | |
metadata: { | |
dynamicSamplingContext: A, | |
...G.metadata | |
} | |
}) | |
} | |
return C.setSpan(w), sl2(w, C, W), w | |
} | |
function bO(I) { | |
if (I.startTime) { | |
let d = { | |
...I | |
}; | |
return d.startTimestamp = mO.spanTimeInputToSeconds(I.startTime), delete d.startTime, d | |
} | |
return I | |
} | |
var Uq1 = "_sentryScope", | |
vq1 = "_sentryIsolationScope"; | |
function sl2(I, d, G) { | |
if (I) lv.addNonEnumerableProperty(I, vq1, G), lv.addNonEnumerableProperty(I, Uq1, d) | |
} | |
function ol2(I) { | |
return { | |
scope: I[Uq1], | |
isolationScope: I[vq1] | |
} | |
} | |
Eq1.continueTrace = al2; | |
Eq1.getActiveSpan = Rq1; | |
Eq1.getCapturedScopesOnSpan = ol2; | |
Eq1.startActiveSpan = il2; | |
Eq1.startInactiveSpan = rl2; | |
Eq1.startSpan = qq1; | |
Eq1.startSpanManual = nl2; | |
Eq1.trace = pl2 | |
}); | |
var hv = Y((Sq1) => { | |
Object.defineProperty(Sq1, "__esModule", { | |
value: !0 | |
}); | |
var wb2 = V0(); | |
F6(); | |
TO(); | |
DN(); | |
var Bb2 = hO(), | |
bv; | |
function Mq1(I) { | |
return bv ? bv.get(I) : void 0 | |
} | |
function Ab2(I) { | |
let d = Mq1(I); | |
if (!d) return; | |
let G = {}; | |
for (let [, [Z, C]] of d) { | |
if (!G[Z]) G[Z] = []; | |
G[Z].push(wb2.dropUndefinedKeys(C)) | |
} | |
return G | |
} | |
function Vb2(I, d, G, Z, C, W) { | |
let w = Bb2.getActiveSpan(); | |
if (w) { | |
let B = Mq1(w) || new Map, | |
A = `${I}:${d}@${Z}`, | |
V = B.get(W); | |
if (V) { | |
let [, X] = V; | |
B.set(W, [A, { | |
min: Math.min(X.min, G), | |
max: Math.max(X.max, G), | |
count: X.count += 1, | |
sum: X.sum += G, | |
tags: X.tags | |
}]) | |
} else B.set(W, [A, { | |
min: G, | |
max: G, | |
count: 1, | |
sum: G, | |
tags: C | |
}]); | |
if (!bv) bv = new WeakMap; | |
bv.set(w, B) | |
} | |
} | |
Sq1.getMetricSummaryJsonForSpan = Ab2; | |
Sq1.updateMetricSummaryOnActiveSpan = Vb2 | |
}); | |
var jv = Y((Lq1) => { | |
Object.defineProperty(Lq1, "__esModule", { | |
value: !0 | |
}); | |
var _b2 = "sentry.source", | |
Db2 = "sentry.sample_rate", | |
Hb2 = "sentry.op", | |
Fb2 = "sentry.origin", | |
gb2 = "profile_id"; | |
Lq1.SEMANTIC_ATTRIBUTE_PROFILE_ID = gb2; | |
Lq1.SEMANTIC_ATTRIBUTE_SENTRY_OP = Hb2; | |
Lq1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = Fb2; | |
Lq1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Db2; | |
Lq1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = _b2 | |
}); | |
var jO = Y((uq1) => { | |
Object.defineProperty(uq1, "__esModule", { | |
value: !0 | |
}); | |
var gF = V0(), | |
yq1 = F6(), | |
fb2 = hv(), | |
RA = jv(), | |
Pq1 = XN(), | |
FN = kI(), | |
qb2 = DN(); | |
class $q1 { | |
constructor(I = 1000) { | |
this._maxlen = I, this.spans = [] | |
} | |
add(I) { | |
if (this.spans.length > this._maxlen) I.spanRecorder = void 0; | |
else this.spans.push(I) | |
} | |
} | |
class J11 { | |
constructor(I = {}) { | |
if (this._traceId = I.traceId || gF.uuid4(), this._spanId = I.spanId || gF.uuid4().substring(16), this._startTime = I.startTimestamp || gF.timestampInSeconds(), this.tags = I.tags ? { | |
...I.tags | |
} : {}, this.data = I.data ? { | |
...I.data | |
} : {}, this.instrumenter = I.instrumenter || "sentry", this._attributes = {}, this.setAttributes({ | |
[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: I.origin || "manual", | |
[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP]: I.op, | |
...I.attributes | |
}), this._name = I.name || I.description, I.parentSpanId) this._parentSpanId = I.parentSpanId; | |
if ("sampled" in I) this._sampled = I.sampled; | |
if (I.status) this._status = I.status; | |
if (I.endTimestamp) this._endTime = I.endTimestamp; | |
if (I.exclusiveTime !== void 0) this._exclusiveTime = I.exclusiveTime; | |
this._measurements = I.measurements ? { | |
...I.measurements | |
} : {} | |
} | |
get name() { | |
return this._name || "" | |
} | |
set name(I) { | |
this.updateName(I) | |
} | |
get description() { | |
return this._name | |
} | |
set description(I) { | |
this._name = I | |
} | |
get traceId() { | |
return this._traceId | |
} | |
set traceId(I) { | |
this._traceId = I | |
} | |
get spanId() { | |
return this._spanId | |
} | |
set spanId(I) { | |
this._spanId = I | |
} | |
set parentSpanId(I) { | |
this._parentSpanId = I | |
} | |
get parentSpanId() { | |
return this._parentSpanId | |
} | |
get sampled() { | |
return this._sampled | |
} | |
set sampled(I) { | |
this._sampled = I | |
} | |
get attributes() { | |
return this._attributes | |
} | |
set attributes(I) { | |
this._attributes = I | |
} | |
get startTimestamp() { | |
return this._startTime | |
} | |
set startTimestamp(I) { | |
this._startTime = I | |
} | |
get endTimestamp() { | |
return this._endTime | |
} | |
set endTimestamp(I) { | |
this._endTime = I | |
} | |
get status() { | |
return this._status | |
} | |
set status(I) { | |
this._status = I | |
} | |
get op() { | |
return this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP] | |
} | |
set op(I) { | |
this.setAttribute(RA.SEMANTIC_ATTRIBUTE_SENTRY_OP, I) | |
} | |
get origin() { | |
return this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] | |
} | |
set origin(I) { | |
this.setAttribute(RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, I) | |
} | |
spanContext() { | |
let { | |
_spanId: I, | |
_traceId: d, | |
_sampled: G | |
} = this; | |
return { | |
spanId: I, | |
traceId: d, | |
traceFlags: G ? FN.TRACE_FLAG_SAMPLED : FN.TRACE_FLAG_NONE | |
} | |
} | |
startChild(I) { | |
let d = new J11({ | |
...I, | |
parentSpanId: this._spanId, | |
sampled: this._sampled, | |
traceId: this._traceId | |
}); | |
if (d.spanRecorder = this.spanRecorder, d.spanRecorder) d.spanRecorder.add(d); | |
let G = Pq1.getRootSpan(this); | |
if (d.transaction = G, yq1.DEBUG_BUILD && G) { | |
let Z = I && I.op || "< unknown op >", | |
C = FN.spanToJSON(d).description || "< unknown name >", | |
W = G.spanContext().spanId, | |
w = `[Tracing] Starting '${Z}' span on transaction '${C}' (${W}).`; | |
gF.logger.log(w), this._logMessage = w | |
} | |
return d | |
} | |
setTag(I, d) { | |
return this.tags = { | |
...this.tags, | |
[I]: d | |
}, this | |
} | |
setData(I, d) { | |
return this.data = { | |
...this.data, | |
[I]: d | |
}, this | |
} | |
setAttribute(I, d) { | |
if (d === void 0) delete this._attributes[I]; | |
else this._attributes[I] = d | |
} | |
setAttributes(I) { | |
Object.keys(I).forEach((d) => this.setAttribute(d, I[d])) | |
} | |
setStatus(I) { | |
return this._status = I, this | |
} | |
setHttpStatus(I) { | |
return qb2.setHttpStatus(this, I), this | |
} | |
setName(I) { | |
this.updateName(I) | |
} | |
updateName(I) { | |
return this._name = I, this | |
} | |
isSuccess() { | |
return this._status === "ok" | |
} | |
finish(I) { | |
return this.end(I) | |
} | |
end(I) { | |
if (this._endTime) return; | |
let d = Pq1.getRootSpan(this); | |
if (yq1.DEBUG_BUILD && d && d.spanContext().spanId !== this._spanId) { | |
let G = this._logMessage; | |
if (G) gF.logger.log(G.replace("Starting", "Finishing")) | |
} | |
this._endTime = FN.spanTimeInputToSeconds(I) | |
} | |
toTraceparent() { | |
return FN.spanToTraceHeader(this) | |
} | |
toContext() { | |
return gF.dropUndefinedKeys({ | |
data: this._getData(), | |
description: this._name, | |
endTimestamp: this._endTime, | |
op: this.op, | |
parentSpanId: this._parentSpanId, | |
sampled: this._sampled, | |
spanId: this._spanId, | |
startTimestamp: this._startTime, | |
status: this._status, | |
tags: this.tags, | |
traceId: this._traceId | |
}) | |
} | |
updateWithContext(I) { | |
return this.data = I.data || {}, this._name = I.name || I.description, this._endTime = I.endTimestamp, this.op = I.op, this._parentSpanId = I.parentSpanId, this._sampled = I.sampled, this._spanId = I.spanId || this._spanId, this._startTime = I.startTimestamp || this._startTime, this._status = I.status, this.tags = I.tags || {}, this._traceId = I.traceId || this._traceId, this | |
} | |
getTraceContext() { | |
return FN.spanToTraceContext(this) | |
} | |
getSpanJSON() { | |
return gF.dropUndefinedKeys({ | |
data: this._getData(), | |
description: this._name, | |
op: this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_OP], | |
parent_span_id: this._parentSpanId, | |
span_id: this._spanId, | |
start_timestamp: this._startTime, | |
status: this._status, | |
tags: Object.keys(this.tags).length > 0 ? this.tags : void 0, | |
timestamp: this._endTime, | |
trace_id: this._traceId, | |
origin: this._attributes[RA.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN], | |
_metrics_summary: fb2.getMetricSummaryJsonForSpan(this), | |
profile_id: this._attributes[RA.SEMANTIC_ATTRIBUTE_PROFILE_ID], | |
exclusive_time: this._exclusiveTime, | |
measurements: Object.keys(this._measurements).length > 0 ? this._measurements : void 0 | |
}) | |
} | |
isRecording() { | |
return !this._endTime && !!this._sampled | |
} | |
toJSON() { | |
return this.getSpanJSON() | |
} | |
_getData() { | |
let { | |
data: I, | |
_attributes: d | |
} = this, G = Object.keys(I).length > 0, Z = Object.keys(d).length > 0; | |
if (!G && !Z) return; | |
if (G && Z) return { | |
...I, | |
...d | |
}; | |
return G ? I : d | |
} | |
} | |
uq1.Span = J11; | |
uq1.SpanRecorder = $q1 | |
}); | |
var cO = Y((lq1) => { | |
Object.defineProperty(lq1, "__esModule", { | |
value: !0 | |
}); | |
var gN = V0(), | |
kO = F6(), | |
vb2 = ww(), | |
Eb2 = hv(), | |
kv = jv(), | |
xO = kI(), | |
Tq1 = HF(), | |
Oq1 = jO(), | |
Mb2 = hO(); | |
class mq1 extends Oq1.Span { | |
constructor(I, d) { | |
super(I); | |
this._contexts = {}, this._hub = d || vb2.getCurrentHub(), this._name = I.name || "", this._metadata = { | |
...I.metadata | |
}, this._trimEnd = I.trimEnd, this.transaction = this; | |
let G = this._metadata.dynamicSamplingContext; | |
if (G) this._frozenDynamicSamplingContext = { | |
...G | |
} | |
} | |
get name() { | |
return this._name | |
} | |
set name(I) { | |
this.setName(I) | |
} | |
get metadata() { | |
return { | |
source: "custom", | |
spanMetadata: {}, | |
...this._metadata, | |
...this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && { | |
source: this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] | |
}, | |
...this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && { | |
sampleRate: this._attributes[kv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] | |
} | |
} | |
} | |
set metadata(I) { | |
this._metadata = I | |
} | |
setName(I, d = "custom") { | |
this._name = I, this.setAttribute(kv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, d) | |
} | |
updateName(I) { | |
return this._name = I, this | |
} | |
initSpanRecorder(I = 1000) { | |
if (!this.spanRecorder) this.spanRecorder = new Oq1.SpanRecorder(I); | |
this.spanRecorder.add(this) | |
} | |
setContext(I, d) { | |
if (d === null) delete this._contexts[I]; | |
else this._contexts[I] = d | |
} | |
setMeasurement(I, d, G = "") { | |
this._measurements[I] = { | |
value: d, | |
unit: G | |
} | |
} | |
setMetadata(I) { | |
this._metadata = { | |
...this._metadata, | |
...I | |
} | |
} | |
end(I) { | |
let d = xO.spanTimeInputToSeconds(I), | |
G = this._finishTransaction(d); | |
if (!G) return; | |
return this._hub.captureEvent(G) | |
} | |
toContext() { | |
let I = super.toContext(); | |
return gN.dropUndefinedKeys({ | |
...I, | |
name: this._name, | |
trimEnd: this._trimEnd | |
}) | |
} | |
updateWithContext(I) { | |
return super.updateWithContext(I), this._name = I.name || "", this._trimEnd = I.trimEnd, this | |
} | |
getDynamicSamplingContext() { | |
return Tq1.getDynamicSamplingContextFromSpan(this) | |
} | |
setHub(I) { | |
this._hub = I | |
} | |
getProfileId() { | |
if (this._contexts !== void 0 && this._contexts.profile !== void 0) return this._contexts.profile.profile_id; | |
return | |
} | |
_finishTransaction(I) { | |
if (this._endTime !== void 0) return; | |
if (!this._name) kO.DEBUG_BUILD && gN.logger.warn("Transaction has no name, falling back to `<unlabeled transaction>`."), this._name = "<unlabeled transaction>"; | |
super.end(I); | |
let d = this._hub.getClient(); | |
if (d && d.emit) d.emit("finishTransaction", this); | |
if (this._sampled !== !0) { | |
if (kO.DEBUG_BUILD && gN.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."), d) d.recordDroppedEvent("sample_rate", "transaction"); | |
return | |
} | |
let G = this.spanRecorder ? this.spanRecorder.spans.filter((V) => V !== this && xO.spanToJSON(V).timestamp) : []; | |
if (this._trimEnd && G.length > 0) { | |
let V = G.map((X) => xO.spanToJSON(X).timestamp).filter(Boolean); | |
this._endTime = V.reduce((X, _) => { | |
return X > _ ? X : _ | |
}) | |
} | |
let { | |
scope: Z, | |
isolationScope: C | |
} = Mb2.getCapturedScopesOnSpan(this), { | |
metadata: W | |
} = this, { | |
source: w | |
} = W, B = { | |
contexts: { | |
...this._contexts, | |
trace: xO.spanToTraceContext(this) | |
}, | |
spans: G, | |
start_timestamp: this._startTime, | |
tags: this.tags, | |
timestamp: this._endTime, | |
transaction: this._name, | |
type: "transaction", | |
sdkProcessingMetadata: { | |
...W, | |
capturedSpanScope: Z, | |
capturedSpanIsolationScope: C, | |
...gN.dropUndefinedKeys({ | |
dynamicSamplingContext: Tq1.getDynamicSamplingContextFromSpan(this) | |
}) | |
}, | |
_metrics_summary: Eb2.getMetricSummaryJsonForSpan(this), | |
...w && { | |
transaction_info: { | |
source: w | |
} | |
} | |
}; | |
if (Object.keys(this._measurements).length > 0) kO.DEBUG_BUILD && gN.logger.log("[Measurements] Adding measurements to transaction", JSON.stringify(this._measurements, void 0, 2)), B.measurements = this._measurements; | |
return kO.DEBUG_BUILD && gN.logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`), B | |
} | |
} | |
lq1.Transaction = mq1 | |
}); | |
var N11 = Y((hq1) => { | |
Object.defineProperty(hq1, "__esModule", { | |
value: !0 | |
}); | |
var z7 = V0(), | |
xI = F6(), | |
pO = kI(), | |
Lb2 = jO(), | |
yb2 = cO(), | |
iO = { | |
idleTimeout: 1000, | |
finalTimeout: 30000, | |
heartbeatInterval: 5000 | |
}, | |
Pb2 = "finishReason", | |
JN = ["heartbeatFailed", "idleTimeout", "documentHidden", "finalTimeout", "externalFinish", "cancelled"]; | |
class K11 extends Lb2.SpanRecorder { | |
constructor(I, d, G, Z) { | |
super(Z); | |
this._pushActivity = I, this._popActivity = d, this.transactionSpanId = G | |
} | |
add(I) { | |
if (I.spanContext().spanId !== this.transactionSpanId) { | |
let d = I.end; | |
if (I.end = (...G) => { | |
return this._popActivity(I.spanContext().spanId), d.apply(I, G) | |
}, pO.spanToJSON(I).timestamp === void 0) this._pushActivity(I.spanContext().spanId) | |
} | |
super.add(I) | |
} | |
} | |
class bq1 extends yb2.Transaction { | |
constructor(I, d, G = iO.idleTimeout, Z = iO.finalTimeout, C = iO.heartbeatInterval, W = !1, w = !1) { | |
super(I, d); | |
if (this._idleHub = d, this._idleTimeout = G, this._finalTimeout = Z, this._heartbeatInterval = C, this._onScope = W, this.activities = {}, this._heartbeatCounter = 0, this._finished = !1, this._idleTimeoutCanceledPermanently = !1, this._beforeFinishCallbacks = [], this._finishReason = JN[4], this._autoFinishAllowed = !w, W) xI.DEBUG_BUILD && z7.logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`), d.getScope().setSpan(this); | |
if (!w) this._restartIdleTimeout(); | |
setTimeout(() => { | |
if (!this._finished) this.setStatus("deadline_exceeded"), this._finishReason = JN[3], this.end() | |
}, this._finalTimeout) | |
} | |
end(I) { | |
let d = pO.spanTimeInputToSeconds(I); | |
if (this._finished = !0, this.activities = {}, this.op === "ui.action.click") this.setAttribute(Pb2, this._finishReason); | |
if (this.spanRecorder) { | |
xI.DEBUG_BUILD && z7.logger.log("[Tracing] finishing IdleTransaction", new Date(d * 1000).toISOString(), this.op); | |
for (let G of this._beforeFinishCallbacks) G(this, d); | |
this.spanRecorder.spans = this.spanRecorder.spans.filter((G) => { | |
if (G.spanContext().spanId === this.spanContext().spanId) return !0; | |
if (!pO.spanToJSON(G).timestamp) G.setStatus("cancelled"), G.end(d), xI.DEBUG_BUILD && z7.logger.log("[Tracing] cancelling span since transaction ended early", JSON.stringify(G, void 0, 2)); | |
let { | |
start_timestamp: Z, | |
timestamp: C | |
} = pO.spanToJSON(G), W = Z && Z < d, w = (this._finalTimeout + this._idleTimeout) / 1000, B = C && Z && C - Z < w; | |
if (xI.DEBUG_BUILD) { | |
let A = JSON.stringify(G, void 0, 2); | |
if (!W) z7.logger.log("[Tracing] discarding Span since it happened after Transaction was finished", A); | |
else if (!B) z7.logger.log("[Tracing] discarding Span since it finished after Transaction final timeout", A) | |
} | |
return W && B | |
}), xI.DEBUG_BUILD && z7.logger.log("[Tracing] flushing IdleTransaction") | |
} else xI.DEBUG_BUILD && z7.logger.log("[Tracing] No active IdleTransaction"); | |
if (this._onScope) { | |
let G = this._idleHub.getScope(); | |
if (G.getTransaction() === this) G.setSpan(void 0) | |
} | |
return super.end(I) | |
} | |
registerBeforeFinishCallback(I) { | |
this._beforeFinishCallbacks.push(I) | |
} | |
initSpanRecorder(I) { | |
if (!this.spanRecorder) { | |
let d = (Z) => { | |
if (this._finished) return; | |
this._pushActivity(Z) | |
}, | |
G = (Z) => { | |
if (this._finished) return; | |
this._popActivity(Z) | |
}; | |
this.spanRecorder = new K11(d, G, this.spanContext().spanId, I), xI.DEBUG_BUILD && z7.logger.log("Starting heartbeat"), this._pingHeartbeat() | |
} | |
this.spanRecorder.add(this) | |
} | |
cancelIdleTimeout(I, { | |
restartOnChildSpanChange: d | |
} = { | |
restartOnChildSpanChange: !0 | |
}) { | |
if (this._idleTimeoutCanceledPermanently = d === !1, this._idleTimeoutID) { | |
if (clearTimeout(this._idleTimeoutID), this._idleTimeoutID = void 0, Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) this._finishReason = JN[5], this.end(I) | |
} | |
} | |
setFinishReason(I) { | |
this._finishReason = I | |
} | |
sendAutoFinishSignal() { | |
if (!this._autoFinishAllowed) xI.DEBUG_BUILD && z7.logger.log("[Tracing] Received finish signal for idle transaction."), this._restartIdleTimeout(), this._autoFinishAllowed = !0 | |
} | |
_restartIdleTimeout(I) { | |
this.cancelIdleTimeout(), this._idleTimeoutID = setTimeout(() => { | |
if (!this._finished && Object.keys(this.activities).length === 0) this._finishReason = JN[1], this.end(I) | |
}, this._idleTimeout) | |
} | |
_pushActivity(I) { | |
this.cancelIdleTimeout(void 0, { | |
restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently | |
}), xI.DEBUG_BUILD && z7.logger.log(`[Tracing] pushActivity: ${I}`), this.activities[I] = !0, xI.DEBUG_BUILD && z7.logger.log("[Tracing] new activities count", Object.keys(this.activities).length) | |
} | |
_popActivity(I) { | |
if (this.activities[I]) xI.DEBUG_BUILD && z7.logger.log(`[Tracing] popActivity ${I}`), delete this.activities[I], xI.DEBUG_BUILD && z7.logger.log("[Tracing] new activities count", Object.keys(this.activities).length); | |
if (Object.keys(this.activities).length === 0) { | |
let d = z7.timestampInSeconds(); | |
if (this._idleTimeoutCanceledPermanently) { | |
if (this._autoFinishAllowed) this._finishReason = JN[5], this.end(d) | |
} else this._restartIdleTimeout(d + this._idleTimeout / 1000) | |
} | |
} | |
_beat() { | |
if (this._finished) return; | |
let I = Object.keys(this.activities).join(""); | |
if (I === this._prevHeartbeatString) this._heartbeatCounter++; | |
else this._heartbeatCounter = 1; | |
if (this._prevHeartbeatString = I, this._heartbeatCounter >= 3) { | |
if (this._autoFinishAllowed) xI.DEBUG_BUILD && z7.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"), this.setStatus("deadline_exceeded"), this._finishReason = JN[0], this.end() | |
} else this._pingHeartbeat() | |
} | |
_pingHeartbeat() { | |
xI.DEBUG_BUILD && z7.logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`), setTimeout(() => { | |
this._beat() | |
}, this._heartbeatInterval) | |
} | |
} | |
hq1.IdleTransaction = bq1; | |
hq1.IdleTransactionSpanRecorder = K11; | |
hq1.TRACING_DEFAULTS = iO | |
}); | |
var z11 = Y((kq1) => { | |
Object.defineProperty(kq1, "__esModule", { | |
value: !0 | |
}); | |
var JF = V0(), | |
KN = F6(), | |
nO = jv(), | |
Ob2 = OO(), | |
mb2 = kI(); | |
function lb2(I, d, G) { | |
if (!Ob2.hasTracingEnabled(d)) return I.sampled = !1, I; | |
if (I.sampled !== void 0) return I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(I.sampled)), I; | |
let Z; | |
if (typeof d.tracesSampler === "function") Z = d.tracesSampler(G), I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(Z)); | |
else if (G.parentSampled !== void 0) Z = G.parentSampled; | |
else if (typeof d.tracesSampleRate !== "undefined") Z = d.tracesSampleRate, I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(Z)); | |
else Z = 1, I.setAttribute(nO.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Z); | |
if (!jq1(Z)) return KN.DEBUG_BUILD && JF.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."), I.sampled = !1, I; | |
if (!Z) return KN.DEBUG_BUILD && JF.logger.log(`[Tracing] Discarding transaction because ${typeof d.tracesSampler==="function"?"tracesSampler returned 0 or false":"a negative sampling decision was inherited or tracesSampleRate is set to 0"}`), I.sampled = !1, I; | |
if (I.sampled = Math.random() < Z, !I.sampled) return KN.DEBUG_BUILD && JF.logger.log(`[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(Z)})`), I; | |
return KN.DEBUG_BUILD && JF.logger.log(`[Tracing] starting ${I.op} transaction - ${mb2.spanToJSON(I).description}`), I | |
} | |
function jq1(I) { | |
if (JF.isNaN(I) || !(typeof I === "number" || typeof I === "boolean")) return KN.DEBUG_BUILD && JF.logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(I)} of type ${JSON.stringify(typeof I)}.`), !1; | |
if (I < 0 || I > 1) return KN.DEBUG_BUILD && JF.logger.warn(`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${I}.`), !1; | |
return !0 | |
} | |
kq1.isValidSampleRate = jq1; | |
kq1.sampleTransaction = lb2 | |
}); | |
var Q11 = Y((cq1) => { | |
Object.defineProperty(cq1, "__esModule", { | |
value: !0 | |
}); | |
var jb2 = V0(), | |
kb2 = F6(), | |
xb2 = ww(), | |
cb2 = kI(), | |
pb2 = TO(), | |
ib2 = N11(), | |
xq1 = z11(), | |
nb2 = cO(); | |
function rb2() { | |
let d = this.getScope().getSpan(); | |
return d ? { | |
"sentry-trace": cb2.spanToTraceHeader(d) | |
} : {} | |
} | |
function ab2(I, d) { | |
let G = this.getClient(), | |
Z = G && G.getOptions() || {}, | |
C = Z.instrumenter || "sentry", | |
W = I.instrumenter || "sentry"; | |
if (C !== W) kb2.DEBUG_BUILD && jb2.logger.error(`A transaction was started with instrumenter=\`${W}\`, but the SDK is configured with the \`${C}\` instrumenter. | |
The transaction will not be sampled. Please use the ${C} instrumentation to start transactions.`), I.sampled = !1; | |
let w = new nb2.Transaction(I, this); | |
if (w = xq1.sampleTransaction(w, Z, { | |
name: I.name, | |
parentSampled: I.parentSampled, | |
transactionContext: I, | |
attributes: { | |
...I.data, | |
...I.attributes | |
}, | |
...d | |
}), w.isRecording()) w.initSpanRecorder(Z._experiments && Z._experiments.maxSpans); | |
if (G && G.emit) G.emit("startTransaction", w); | |
return w | |
} | |
function sb2(I, d, G, Z, C, W, w, B = !1) { | |
let A = I.getClient(), | |
V = A && A.getOptions() || {}, | |
X = new ib2.IdleTransaction(d, I, G, Z, w, C, B); | |
if (X = xq1.sampleTransaction(X, V, { | |
name: d.name, | |
parentSampled: d.parentSampled, | |
transactionContext: d, | |
attributes: { | |
...d.data, | |
...d.attributes | |
}, | |
...W | |
}), X.isRecording()) X.initSpanRecorder(V._experiments && V._experiments.maxSpans); | |
if (A && A.emit) A.emit("startTransaction", X); | |
return X | |
} | |
function ob2() { | |
let I = xb2.getMainCarrier(); | |
if (!I.__SENTRY__) return; | |
if (I.__SENTRY__.extensions = I.__SENTRY__.extensions || {}, !I.__SENTRY__.extensions.startTransaction) I.__SENTRY__.extensions.startTransaction = ab2; | |
if (!I.__SENTRY__.extensions.traceHeaders) I.__SENTRY__.extensions.traceHeaders = rb2; | |
pb2.registerErrorInstrumentation() | |
} | |
cq1.addTracingExtensions = ob2; | |
cq1.startIdleTransaction = sb2 | |
}); | |
var iq1 = Y((pq1) => { | |
Object.defineProperty(pq1, "__esModule", { | |
value: !0 | |
}); | |
var Ih2 = uO(); | |
function dh2(I, d, G) { | |
let Z = Ih2.getActiveTransaction(); | |
if (Z) Z.setMeasurement(I, d, G) | |
} | |
pq1.setMeasurement = dh2 | |
}); | |
var f11 = Y((nq1) => { | |
Object.defineProperty(nq1, "__esModule", { | |
value: !0 | |
}); | |
var NN = V0(); | |
function Zh2(I, d) { | |
if (!d) return I; | |
return I.sdk = I.sdk || {}, I.sdk.name = I.sdk.name || d.name, I.sdk.version = I.sdk.version || d.version, I.sdk.integrations = [...I.sdk.integrations || [], ...d.integrations || []], I.sdk.packages = [...I.sdk.packages || [], ...d.packages || []], I | |
} | |
function Ch2(I, d, G, Z) { | |
let C = NN.getSdkMetadataForEnvelopeHeader(G), | |
W = { | |
sent_at: new Date().toISOString(), | |
...C && { | |
sdk: C | |
}, | |
...!!Z && d && { | |
dsn: NN.dsnToString(d) | |
} | |
}, | |
w = "aggregates" in I ? [{ | |
type: "sessions" | |
}, I] : [{ | |
type: "session" | |
}, I.toJSON()]; | |
return NN.createEnvelope(W, [w]) | |
} | |
function Wh2(I, d, G, Z) { | |
let C = NN.getSdkMetadataForEnvelopeHeader(G), | |
W = I.type && I.type !== "replay_event" ? I.type : "event"; | |
Zh2(I, G && G.sdk); | |
let w = NN.createEventEnvelopeHeaders(I, C, Z, d); | |
delete I.sdkProcessingMetadata; | |
let B = [{ | |
type: W | |
}, I]; | |
return NN.createEnvelope(w, [B]) | |
} | |
nq1.createEventEnvelope = Wh2; | |
nq1.createSessionEnvelope = Ch2 | |
}); | |
var q11 = Y((aq1) => { | |
Object.defineProperty(aq1, "__esModule", { | |
value: !0 | |
}); | |
var Ah2 = V0(), | |
Vh2 = iG(); | |
class rq1 { | |
constructor(I, d) { | |
if (this._client = I, this.flushTimeout = 60, this._pendingAggregates = {}, this._isEnabled = !0, this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1000), this._intervalId.unref) this._intervalId.unref(); | |
this._sessionAttrs = d | |
} | |
flush() { | |
let I = this.getSessionAggregates(); | |
if (I.aggregates.length === 0) return; | |
this._pendingAggregates = {}, this._client.sendSession(I) | |
} | |
getSessionAggregates() { | |
let I = Object.keys(this._pendingAggregates).map((G) => { | |
return this._pendingAggregates[parseInt(G)] | |
}), | |
d = { | |
attrs: this._sessionAttrs, | |
aggregates: I | |
}; | |
return Ah2.dropUndefinedKeys(d) | |
} | |
close() { | |
clearInterval(this._intervalId), this._isEnabled = !1, this.flush() | |
} | |
incrementSessionStatusCount() { | |
if (!this._isEnabled) return; | |
let I = Vh2.getCurrentScope(), | |
d = I.getRequestSession(); | |
if (d && d.status) this._incrementSessionStatusCount(d.status, new Date), I.setRequestSession(void 0) | |
} | |
_incrementSessionStatusCount(I, d) { | |
let G = new Date(d).setSeconds(0, 0); | |
this._pendingAggregates[G] = this._pendingAggregates[G] || {}; | |
let Z = this._pendingAggregates[G]; | |
if (!Z.started) Z.started = new Date(G).toISOString(); | |
switch (I) { | |
case "errored": | |
return Z.errored = (Z.errored || 0) + 1, Z.errored; | |
case "ok": | |
return Z.exited = (Z.exited || 0) + 1, Z.exited; | |
default: | |
return Z.crashed = (Z.crashed || 0) + 1, Z.crashed | |
} | |
} | |
} | |
aq1.SessionFlusher = rq1 | |
}); | |
var rO = Y((oq1) => { | |
Object.defineProperty(oq1, "__esModule", { | |
value: !0 | |
}); | |
var R11 = V0(), | |
Yh2 = "7"; | |
function sq1(I) { | |
let d = I.protocol ? `${I.protocol}:` : "", | |
G = I.port ? `:${I.port}` : ""; | |
return `${d}//${I.host}${G}${I.path?`/${I.path}`:""}/api/` | |
} | |
function _h2(I) { | |
return `${sq1(I)}${I.projectId}/envelope/` | |
} | |
function Dh2(I, d) { | |
return R11.urlEncode({ | |
sentry_key: I.publicKey, | |
sentry_version: Yh2, | |
...d && { | |
sentry_client: `${d.name}/${d.version}` | |
} | |
}) | |
} | |
function Hh2(I, d = {}) { | |
let G = typeof d === "string" ? d : d.tunnel, | |
Z = typeof d === "string" || !d._metadata ? void 0 : d._metadata.sdk; | |
return G ? G : `${_h2(I)}?${Dh2(I,Z)}` | |
} | |
function Fh2(I, d) { | |
let G = R11.makeDsn(I); | |
if (!G) return ""; | |
let Z = `${sq1(G)}embed/error-page/`, | |
C = `dsn=${R11.dsnToString(G)}`; | |
for (let W in d) { | |
if (W === "dsn") continue; | |
if (W === "onClose") continue; | |
if (W === "user") { | |
let w = d.user; | |
if (!w) continue; | |
if (w.name) C += `&name=${encodeURIComponent(w.name)}`; | |
if (w.email) C += `&email=${encodeURIComponent(w.email)}` | |
} else C += `&${encodeURIComponent(W)}=${encodeURIComponent(d[W])}` | |
} | |
return `${Z}?${C}` | |
} | |
oq1.getEnvelopeEndpointWithUrlEncodedAuth = Hh2; | |
oq1.getReportDialogEndpoint = Fh2 | |
}); | |
var UA = Y((tq1) => { | |
Object.defineProperty(tq1, "__esModule", { | |
value: !0 | |
}); | |
var aO = V0(), | |
U11 = F6(), | |
Kh2 = Pv(), | |
Nh2 = iG(), | |
zh2 = ww(), | |
v11 = []; | |
function Qh2(I) { | |
let d = {}; | |
return I.forEach((G) => { | |
let { | |
name: Z | |
} = G, C = d[Z]; | |
if (C && !C.isDefaultInstance && G.isDefaultInstance) return; | |
d[Z] = G | |
}), Object.keys(d).map((G) => d[G]) | |
} | |
function fh2(I) { | |
let d = I.defaultIntegrations || [], | |
G = I.integrations; | |
d.forEach((w) => { | |
w.isDefaultInstance = !0 | |
}); | |
let Z; | |
if (Array.isArray(G)) Z = [...d, ...G]; | |
else if (typeof G === "function") Z = aO.arrayify(G(d)); | |
else Z = d; | |
let C = Qh2(Z), | |
W = vh2(C, (w) => w.name === "Debug"); | |
if (W !== -1) { | |
let [w] = C.splice(W, 1); | |
C.push(w) | |
} | |
return C | |
} | |
function qh2(I, d) { | |
let G = {}; | |
return d.forEach((Z) => { | |
if (Z) eq1(I, Z, G) | |
}), G | |
} | |
function Rh2(I, d) { | |
for (let G of d) | |
if (G && G.afterAllSetup) G.afterAllSetup(I) | |
} | |
function eq1(I, d, G) { | |
if (G[d.name]) { | |
U11.DEBUG_BUILD && aO.logger.log(`Integration skipped because it was already installed: ${d.name}`); | |
return | |
} | |
if (G[d.name] = d, v11.indexOf(d.name) === -1) d.setupOnce(Kh2.addGlobalEventProcessor, zh2.getCurrentHub), v11.push(d.name); | |
if (d.setup && typeof d.setup === "function") d.setup(I); | |
if (I.on && typeof d.preprocessEvent === "function") { | |
let Z = d.preprocessEvent.bind(d); | |
I.on("preprocessEvent", (C, W) => Z(C, W, I)) | |
} | |
if (I.addEventProcessor && typeof d.processEvent === "function") { | |
let Z = d.processEvent.bind(d), | |
C = Object.assign((W, w) => Z(W, w, I), { | |
id: d.name | |
}); | |
I.addEventProcessor(C) | |
} | |
U11.DEBUG_BUILD && aO.logger.log(`Integration installed: ${d.name}`) | |
} | |
function Uh2(I) { | |
let d = Nh2.getClient(); | |
if (!d || !d.addIntegration) { | |
U11.DEBUG_BUILD && aO.logger.warn(`Cannot add integration "${I.name}" because no SDK Client is available.`); | |
return | |
} | |
d.addIntegration(I) | |
} | |
function vh2(I, d) { | |
for (let G = 0; G < I.length; G++) | |
if (d(I[G]) === !0) return G; | |
return -1 | |
} | |
function Eh2(I, d) { | |
return Object.assign(function G(...Z) { | |
return d(...Z) | |
}, { | |
id: I | |
}) | |
} | |
function Mh2(I) { | |
return I | |
} | |
tq1.addIntegration = Uh2; | |
tq1.afterSetupIntegrations = Rh2; | |
tq1.convertIntegrationFnToClass = Eh2; | |
tq1.defineIntegration = Mh2; | |
tq1.getIntegrationsToSetup = fh2; | |
tq1.installedIntegrations = v11; | |
tq1.setupIntegration = eq1; | |
tq1.setupIntegrations = qh2 | |
}); | |
var xv = Y((IR1) => { | |
Object.defineProperty(IR1, "__esModule", { | |
value: !0 | |
}); | |
var mh2 = V0(); | |
function lh2(I, d, G, Z) { | |
let C = Object.entries(mh2.dropUndefinedKeys(Z)).sort((W, w) => W[0].localeCompare(w[0])); | |
return `${I}${d}${G}${C}` | |
} | |
function bh2(I) { | |
let d = 0; | |
for (let G = 0; G < I.length; G++) { | |
let Z = I.charCodeAt(G); | |
d = (d << 5) - d + Z, d &= d | |
} | |
return d >>> 0 | |
} | |
function hh2(I) { | |
let d = ""; | |
for (let G of I) { | |
let Z = Object.entries(G.tags), | |
C = Z.length > 0 ? `|#${Z.map(([W,w])=>`${W}:${w}`).join(",")}` : ""; | |
d += `${G.name}@${G.unit}:${G.metric}|${G.metricType}${C}|T${G.timestamp} | |
` | |
} | |
return d | |
} | |
function jh2(I) { | |
return I.replace(/[^\w]+/gi, "_") | |
} | |
function kh2(I) { | |
return I.replace(/[^\w\-.]+/gi, "_") | |
} | |
function xh2(I) { | |
return I.replace(/[^\w\-./]+/gi, "") | |
} | |
var ch2 = [ | |
[` | |
`, "\\n"], | |
["\r", "\\r"], | |
["\t", "\\t"], | |
["\\", "\\\\"], | |
["|", "\\u{7c}"], | |
[",", "\\u{2c}"] | |
]; | |
function ph2(I) { | |
for (let [d, G] of ch2) | |
if (I === d) return G; | |
return I | |
} | |
function ih2(I) { | |
return [...I].reduce((d, G) => d + ph2(G), "") | |
} | |
function nh2(I) { | |
let d = {}; | |
for (let G in I) | |
if (Object.prototype.hasOwnProperty.call(I, G)) { | |
let Z = xh2(G); | |
d[Z] = ih2(String(I[G])) | |
} return d | |
} | |
IR1.getBucketKey = lh2; | |
IR1.sanitizeMetricKey = kh2; | |
IR1.sanitizeTags = nh2; | |
IR1.sanitizeUnit = jh2; | |
IR1.serializeMetricBuckets = hh2; | |
IR1.simpleHash = bh2 | |
}); | |
var ZR1 = Y((GR1) => { | |
Object.defineProperty(GR1, "__esModule", { | |
value: !0 | |
}); | |
var dR1 = V0(), | |
Ij2 = xv(); | |
function dj2(I, d, G, Z) { | |
let C = { | |
sent_at: new Date().toISOString() | |
}; | |
if (G && G.sdk) C.sdk = { | |
name: G.sdk.name, | |
version: G.sdk.version | |
}; | |
if (!!Z && d) C.dsn = dR1.dsnToString(d); | |
let W = Gj2(I); | |
return dR1.createEnvelope(C, [W]) | |
} | |
function Gj2(I) { | |
let d = Ij2.serializeMetricBuckets(I); | |
return [{ | |
type: "statsd", | |
length: d.length | |
}, d] | |
} | |
GR1.createMetricEnvelope = dj2 | |
}); | |
var E11 = Y((XR1) => { | |
Object.defineProperty(XR1, "__esModule", { | |
value: !0 | |
}); | |
var v5 = V0(), | |
Cj2 = rO(), | |
Aw = F6(), | |
CR1 = f11(), | |
Wj2 = iG(), | |
wj2 = ww(), | |
sO = UA(), | |
Bj2 = ZR1(), | |
WR1 = VN(), | |
Aj2 = HF(), | |
Vj2 = vO(), | |
wR1 = "Not capturing exception because it's already been captured."; | |
class BR1 { | |
constructor(I) { | |
if (this._options = I, this._integrations = {}, this._integrationsInitialized = !1, this._numProcessing = 0, this._outcomes = {}, this._hooks = {}, this._eventProcessors = [], I.dsn) this._dsn = v5.makeDsn(I.dsn); | |
else Aw.DEBUG_BUILD && v5.logger.warn("No DSN provided, client will not send events."); | |
if (this._dsn) { | |
let d = Cj2.getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, I); | |
this._transport = I.transport({ | |
tunnel: this._options.tunnel, | |
recordDroppedEvent: this.recordDroppedEvent.bind(this), | |
...I.transportOptions, | |
url: d | |
}) | |
} | |
} | |
captureException(I, d, G) { | |
if (v5.checkOrSetAlreadyCaught(I)) { | |
Aw.DEBUG_BUILD && v5.logger.log(wR1); | |
return | |
} | |
let Z = d && d.event_id; | |
return this._process(this.eventFromException(I, d).then((C) => this._captureEvent(C, d, G)).then((C) => { | |
Z = C | |
})), Z | |
} | |
captureMessage(I, d, G, Z) { | |
let C = G && G.event_id, | |
W = v5.isParameterizedString(I) ? I : String(I), | |
w = v5.isPrimitive(I) ? this.eventFromMessage(W, d, G) : this.eventFromException(I, G); | |
return this._process(w.then((B) => this._captureEvent(B, G, Z)).then((B) => { | |
C = B | |
})), C | |
} | |
captureEvent(I, d, G) { | |
if (d && d.originalException && v5.checkOrSetAlreadyCaught(d.originalException)) { | |
Aw.DEBUG_BUILD && v5.logger.log(wR1); | |
return | |
} | |
let Z = d && d.event_id, | |
W = (I.sdkProcessingMetadata || {}).capturedSpanScope; | |
return this._process(this._captureEvent(I, d, W || G).then((w) => { | |
Z = w | |
})), Z | |
} | |
captureSession(I) { | |
if (typeof I.release !== "string") Aw.DEBUG_BUILD && v5.logger.warn("Discarded session because of missing or non-string release"); | |
else this.sendSession(I), WR1.updateSession(I, { | |
init: !1 | |
}) | |
} | |
getDsn() { | |
return this._dsn | |
} | |
getOptions() { | |
return this._options | |
} | |
getSdkMetadata() { | |
return this._options._metadata | |
} | |
getTransport() { | |
return this._transport | |
} | |
flush(I) { | |
let d = this._transport; | |
if (d) { | |
if (this.metricsAggregator) this.metricsAggregator.flush(); | |
return this._isClientDoneProcessing(I).then((G) => { | |
return d.flush(I).then((Z) => G && Z) | |
}) | |
} else return v5.resolvedSyncPromise(!0) | |
} | |
close(I) { | |
return this.flush(I).then((d) => { | |
if (this.getOptions().enabled = !1, this.metricsAggregator) this.metricsAggregator.close(); | |
return d | |
}) | |
} | |
getEventProcessors() { | |
return this._eventProcessors | |
} | |
addEventProcessor(I) { | |
this._eventProcessors.push(I) | |
} | |
setupIntegrations(I) { | |
if (I && !this._integrationsInitialized || this._isEnabled() && !this._integrationsInitialized) this._setupIntegrations() | |
} | |
init() { | |
if (this._isEnabled()) this._setupIntegrations() | |
} | |
getIntegrationById(I) { | |
return this.getIntegrationByName(I) | |
} | |
getIntegrationByName(I) { | |
return this._integrations[I] | |
} | |
getIntegration(I) { | |
try { | |
return this._integrations[I.id] || null | |
} catch (d) { | |
return Aw.DEBUG_BUILD && v5.logger.warn(`Cannot retrieve integration ${I.id} from the current Client`), null | |
} | |
} | |
addIntegration(I) { | |
let d = this._integrations[I.name]; | |
if (sO.setupIntegration(this, I, this._integrations), !d) sO.afterSetupIntegrations(this, [I]) | |
} | |
sendEvent(I, d = {}) { | |
this.emit("beforeSendEvent", I, d); | |
let G = CR1.createEventEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel); | |
for (let C of d.attachments || []) G = v5.addItemToEnvelope(G, v5.createAttachmentEnvelopeItem(C, this._options.transportOptions && this._options.transportOptions.textEncoder)); | |
let Z = this._sendEnvelope(G); | |
if (Z) Z.then((C) => this.emit("afterSendEvent", I, C), null) | |
} | |
sendSession(I) { | |
let d = CR1.createSessionEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel); | |
this._sendEnvelope(d) | |
} | |
recordDroppedEvent(I, d, G) { | |
if (this._options.sendClientReports) { | |
let Z = typeof G === "number" ? G : 1, | |
C = `${I}:${d}`; | |
Aw.DEBUG_BUILD && v5.logger.log(`Recording outcome: "${C}"${Z>1?` (${Z} times)`:""}`), this._outcomes[C] = (this._outcomes[C] || 0) + Z | |
} | |
} | |
captureAggregateMetrics(I) { | |
Aw.DEBUG_BUILD && v5.logger.log(`Flushing aggregated metrics, number of metrics: ${I.length}`); | |
let d = Bj2.createMetricEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel); | |
this._sendEnvelope(d) | |
} | |
on(I, d) { | |
if (!this._hooks[I]) this._hooks[I] = []; | |
this._hooks[I].push(d) | |
} | |
emit(I, ...d) { | |
if (this._hooks[I]) this._hooks[I].forEach((G) => G(...d)) | |
} | |
_setupIntegrations() { | |
let { | |
integrations: I | |
} = this._options; | |
this._integrations = sO.setupIntegrations(this, I), sO.afterSetupIntegrations(this, I), this._integrationsInitialized = !0 | |
} | |
_updateSessionFromEvent(I, d) { | |
let G = !1, | |
Z = !1, | |
C = d.exception && d.exception.values; | |
if (C) { | |
Z = !0; | |
for (let B of C) { | |
let A = B.mechanism; | |
if (A && A.handled === !1) { | |
G = !0; | |
break | |
} | |
} | |
} | |
let W = I.status === "ok"; | |
if (W && I.errors === 0 || W && G) WR1.updateSession(I, { | |
...G && { | |
status: "crashed" | |
}, | |
errors: I.errors || Number(Z || G) | |
}), this.captureSession(I) | |
} | |
_isClientDoneProcessing(I) { | |
return new v5.SyncPromise((d) => { | |
let G = 0, | |
Z = 1, | |
C = setInterval(() => { | |
if (this._numProcessing == 0) clearInterval(C), d(!0); | |
else if (G += Z, I && G >= I) clearInterval(C), d(!1) | |
}, Z) | |
}) | |
} | |
_isEnabled() { | |
return this.getOptions().enabled !== !1 && this._transport !== void 0 | |
} | |
_prepareEvent(I, d, G, Z = wj2.getIsolationScope()) { | |
let C = this.getOptions(), | |
W = Object.keys(this._integrations); | |
if (!d.integrations && W.length > 0) d.integrations = W; | |
return this.emit("preprocessEvent", I, d), Vj2.prepareEvent(C, I, d, G, this, Z).then((w) => { | |
if (w === null) return w; | |
let B = { | |
...Z.getPropagationContext(), | |
...G ? G.getPropagationContext() : void 0 | |
}; | |
if (!(w.contexts && w.contexts.trace) && B) { | |
let { | |
traceId: V, | |
spanId: X, | |
parentSpanId: _, | |
dsc: F | |
} = B; | |
w.contexts = { | |
trace: { | |
trace_id: V, | |
span_id: X, | |
parent_span_id: _ | |
}, | |
...w.contexts | |
}; | |
let g = F ? F : Aj2.getDynamicSamplingContextFromClient(V, this, G); | |
w.sdkProcessingMetadata = { | |
dynamicSamplingContext: g, | |
...w.sdkProcessingMetadata | |
} | |
} | |
return w | |
}) | |
} | |
_captureEvent(I, d = {}, G) { | |
return this._processEvent(I, d, G).then((Z) => { | |
return Z.event_id | |
}, (Z) => { | |
if (Aw.DEBUG_BUILD) { | |
let C = Z; | |
if (C.logLevel === "log") v5.logger.log(C.message); | |
else v5.logger.warn(C) | |
} | |
return | |
}) | |
} | |
_processEvent(I, d, G) { | |
let Z = this.getOptions(), | |
{ | |
sampleRate: C | |
} = Z, | |
W = VR1(I), | |
w = AR1(I), | |
B = I.type || "error", | |
A = `before send for type \`${B}\``; | |
if (w && typeof C === "number" && Math.random() > C) return this.recordDroppedEvent("sample_rate", "error", I), v5.rejectedSyncPromise(new v5.SentryError(`Discarding event because it's not included in the random sample (sampling rate = ${C})`, "log")); | |
let V = B === "replay_event" ? "replay" : B, | |
_ = (I.sdkProcessingMetadata || {}).capturedSpanIsolationScope; | |
return this._prepareEvent(I, d, G, _).then((F) => { | |
if (F === null) throw this.recordDroppedEvent("event_processor", V, I), new v5.SentryError("An event processor returned `null`, will not send event.", "log"); | |
if (d.data && d.data.__sentry__ === !0) return F; | |
let J = Yj2(Z, F, d); | |
return Xj2(J, A) | |
}).then((F) => { | |
if (F === null) { | |
if (this.recordDroppedEvent("before_send", V, I), W) { | |
let Q = 1 + (I.spans || []).length; | |
this.recordDroppedEvent("before_send", "span", Q) | |
} | |
throw new v5.SentryError(`${A} returned \`null\`, will not send event.`, "log") | |
} | |
let g = G && G.getSession(); | |
if (!W && g) this._updateSessionFromEvent(g, F); | |
if (W) { | |
let K = F.sdkProcessingMetadata && F.sdkProcessingMetadata.spanCountBeforeProcessing || 0, | |
Q = F.spans ? F.spans.length : 0, | |
E = K - Q; | |
if (E > 0) this.recordDroppedEvent("before_send", "span", E) | |
} | |
let J = F.transaction_info; | |
if (W && J && F.transaction !== I.transaction) F.transaction_info = { | |
...J, | |
source: "custom" | |
}; | |
return this.sendEvent(F, d), F | |
}).then(null, (F) => { | |
if (F instanceof v5.SentryError) throw F; | |
throw this.captureException(F, { | |
data: { | |
__sentry__: !0 | |
}, | |
originalException: F | |
}), new v5.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. | |
Reason: ${F}`) | |
}) | |
} | |
_process(I) { | |
this._numProcessing++, I.then((d) => { | |
return this._numProcessing--, d | |
}, (d) => { | |
return this._numProcessing--, d | |
}) | |
} | |
_sendEnvelope(I) { | |
if (this.emit("beforeEnvelope", I), this._isEnabled() && this._transport) return this._transport.send(I).then(null, (d) => { | |
Aw.DEBUG_BUILD && v5.logger.error("Error while sending event:", d) | |
}); | |
else Aw.DEBUG_BUILD && v5.logger.error("Transport disabled") | |
} | |
_clearOutcomes() { | |
let I = this._outcomes; | |
return this._outcomes = {}, Object.keys(I).map((d) => { | |
let [G, Z] = d.split(":"); | |
return { | |
reason: G, | |
category: Z, | |
quantity: I[d] | |
} | |
}) | |
} | |
} | |
function Xj2(I, d) { | |
let G = `${d} must return \`null\` or a valid event.`; | |
if (v5.isThenable(I)) return I.then((Z) => { | |
if (!v5.isPlainObject(Z) && Z !== null) throw new v5.SentryError(G); | |
return Z | |
}, (Z) => { | |
throw new v5.SentryError(`${d} rejected with ${Z}`) | |
}); | |
else if (!v5.isPlainObject(I) && I !== null) throw new v5.SentryError(G); | |
return I | |
} | |
function Yj2(I, d, G) { | |
let { | |
beforeSend: Z, | |
beforeSendTransaction: C | |
} = I; | |
if (AR1(d) && Z) return Z(d, G); | |
if (VR1(d) && C) { | |
if (d.spans) { | |
let W = d.spans.length; | |
d.sdkProcessingMetadata = { | |
...d.sdkProcessingMetadata, | |
spanCountBeforeProcessing: W | |
} | |
} | |
return C(d, G) | |
} | |
return d | |
} | |
function AR1(I) { | |
return I.type === void 0 | |
} | |
function VR1(I) { | |
return I.type === "transaction" | |
} | |
function _j2(I) { | |
let d = Wj2.getClient(); | |
if (!d || !d.addEventProcessor) return; | |
d.addEventProcessor(I) | |
} | |
XR1.BaseClient = BR1; | |
XR1.addEventProcessor = _j2 | |
}); | |
var S11 = Y((YR1) => { | |
Object.defineProperty(YR1, "__esModule", { | |
value: !0 | |
}); | |
var M11 = V0(); | |
function Fj2(I, d, G, Z, C) { | |
let W = { | |
sent_at: new Date().toISOString() | |
}; | |
if (G && G.sdk) W.sdk = { | |
name: G.sdk.name, | |
version: G.sdk.version | |
}; | |
if (!!Z && !!C) W.dsn = M11.dsnToString(C); | |
if (d) W.trace = M11.dropUndefinedKeys(d); | |
let w = gj2(I); | |
return M11.createEnvelope(W, [w]) | |
} | |
function gj2(I) { | |
return [{ | |
type: "check_in" | |
}, I] | |
} | |
YR1.createCheckInEnvelope = Fj2 | |
}); | |
var cv = Y((_R1) => { | |
Object.defineProperty(_R1, "__esModule", { | |
value: !0 | |
}); | |
var Kj2 = "c", | |
Nj2 = "g", | |
zj2 = "s", | |
Qj2 = "d", | |
fj2 = 5000, | |
qj2 = 1e4, | |
Rj2 = 1e4; | |
_R1.COUNTER_METRIC_TYPE = Kj2; | |
_R1.DEFAULT_BROWSER_FLUSH_INTERVAL = fj2; | |
_R1.DEFAULT_FLUSH_INTERVAL = qj2; | |
_R1.DISTRIBUTION_METRIC_TYPE = Qj2; | |
_R1.GAUGE_METRIC_TYPE = Nj2; | |
_R1.MAX_WEIGHT = Rj2; | |
_R1.SET_METRIC_TYPE = zj2 | |
}); | |
var u11 = Y((DR1) => { | |
Object.defineProperty(DR1, "__esModule", { | |
value: !0 | |
}); | |
var oO = cv(), | |
Pj2 = xv(); | |
class L11 { | |
constructor(I) { | |
this._value = I | |
} | |
get weight() { | |
return 1 | |
} | |
add(I) { | |
this._value += I | |
} | |
toString() { | |
return `${this._value}` | |
} | |
} | |
class y11 { | |
constructor(I) { | |
this._last = I, this._min = I, this._max = I, this._sum = I, this._count = 1 | |
} | |
get weight() { | |
return 5 | |
} | |
add(I) { | |
if (this._last = I, I < this._min) this._min = I; | |
if (I > this._max) this._max = I; | |
this._sum += I, this._count++ | |
} | |
toString() { | |
return `${this._last}:${this._min}:${this._max}:${this._sum}:${this._count}` | |
} | |
} | |
class P11 { | |
constructor(I) { | |
this._value = [I] | |
} | |
get weight() { | |
return this._value.length | |
} | |
add(I) { | |
this._value.push(I) | |
} | |
toString() { | |
return this._value.join(":") | |
} | |
} | |
class $11 { | |
constructor(I) { | |
this.first = I, this._value = new Set([I]) | |
} | |
get weight() { | |
return this._value.size | |
} | |
add(I) { | |
this._value.add(I) | |
} | |
toString() { | |
return Array.from(this._value).map((I) => typeof I === "string" ? Pj2.simpleHash(I) : I).join(":") | |
} | |
} | |
var $j2 = { | |
[oO.COUNTER_METRIC_TYPE]: L11, | |
[oO.GAUGE_METRIC_TYPE]: y11, | |
[oO.DISTRIBUTION_METRIC_TYPE]: P11, | |
[oO.SET_METRIC_TYPE]: $11 | |
}; | |
DR1.CounterMetric = L11; | |
DR1.DistributionMetric = P11; | |
DR1.GaugeMetric = y11; | |
DR1.METRIC_MAP = $j2; | |
DR1.SetMetric = $11 | |
}); | |
var JR1 = Y((gR1) => { | |
Object.defineProperty(gR1, "__esModule", { | |
value: !0 | |
}); | |
var HR1 = V0(), | |
pv = cv(), | |
bj2 = u11(), | |
hj2 = hv(), | |
eO = xv(); | |
class FR1 { | |
constructor(I) { | |
if (this._client = I, this._buckets = new Map, this._bucketsTotalWeight = 0, this._interval = setInterval(() => this._flush(), pv.DEFAULT_FLUSH_INTERVAL), this._interval.unref) this._interval.unref(); | |
this._flushShift = Math.floor(Math.random() * pv.DEFAULT_FLUSH_INTERVAL / 1000), this._forceFlush = !1 | |
} | |
add(I, d, G, Z = "none", C = {}, W = HR1.timestampInSeconds()) { | |
let w = Math.floor(W), | |
B = eO.sanitizeMetricKey(d), | |
A = eO.sanitizeTags(C), | |
V = eO.sanitizeUnit(Z), | |
X = eO.getBucketKey(I, B, V, A), | |
_ = this._buckets.get(X), | |
F = _ && I === pv.SET_METRIC_TYPE ? _.metric.weight : 0; | |
if (_) { | |
if (_.metric.add(G), _.timestamp < w) _.timestamp = w | |
} else _ = { | |
metric: new bj2.METRIC_MAP[I](G), | |
timestamp: w, | |
metricType: I, | |
name: B, | |
unit: V, | |
tags: A | |
}, this._buckets.set(X, _); | |
let g = typeof G === "string" ? _.metric.weight - F : G; | |
if (hj2.updateMetricSummaryOnActiveSpan(I, B, g, V, C, X), this._bucketsTotalWeight += _.metric.weight, this._bucketsTotalWeight >= pv.MAX_WEIGHT) this.flush() | |
} | |
flush() { | |
this._forceFlush = !0, this._flush() | |
} | |
close() { | |
this._forceFlush = !0, clearInterval(this._interval), this._flush() | |
} | |
_flush() { | |
if (this._forceFlush) { | |
this._forceFlush = !1, this._bucketsTotalWeight = 0, this._captureMetrics(this._buckets), this._buckets.clear(); | |
return | |
} | |
let I = Math.floor(HR1.timestampInSeconds()) - pv.DEFAULT_FLUSH_INTERVAL / 1000 - this._flushShift, | |
d = new Map; | |
for (let [G, Z] of this._buckets) | |
if (Z.timestamp <= I) d.set(G, Z), this._bucketsTotalWeight -= Z.metric.weight; | |
for (let [G] of d) this._buckets.delete(G); | |
this._captureMetrics(d) | |
} | |
_captureMetrics(I) { | |
if (I.size > 0 && this._client.captureAggregateMetrics) { | |
let d = Array.from(I).map(([, G]) => G); | |
this._client.captureAggregateMetrics(d) | |
} | |
} | |
} | |
gR1.MetricsAggregator = FR1 | |
}); | |
var QR1 = Y((zR1) => { | |
Object.defineProperty(zR1, "__esModule", { | |
value: !0 | |
}); | |
var vA = V0(), | |
kj2 = E11(), | |
xj2 = S11(), | |
tO = F6(), | |
cj2 = iG(), | |
pj2 = JR1(), | |
ij2 = q11(), | |
nj2 = Q11(), | |
rj2 = kI(), | |
aj2 = XN(); | |
DN(); | |
var KR1 = HF(); | |
class NR1 extends kj2.BaseClient { | |
constructor(I) { | |
nj2.addTracingExtensions(); | |
super(I); | |
if (I._experiments && I._experiments.metricsAggregator) this.metricsAggregator = new pj2.MetricsAggregator(this) | |
} | |
eventFromException(I, d) { | |
return vA.resolvedSyncPromise(vA.eventFromUnknownInput(cj2.getClient(), this._options.stackParser, I, d)) | |
} | |
eventFromMessage(I, d = "info", G) { | |
return vA.resolvedSyncPromise(vA.eventFromMessage(this._options.stackParser, I, d, G, this._options.attachStacktrace)) | |
} | |
captureException(I, d, G) { | |
if (this._options.autoSessionTracking && this._sessionFlusher && G) { | |
let Z = G.getRequestSession(); | |
if (Z && Z.status === "ok") Z.status = "errored" | |
} | |
return super.captureException(I, d, G) | |
} | |
captureEvent(I, d, G) { | |
if (this._options.autoSessionTracking && this._sessionFlusher && G) { | |
if ((I.type || "exception") === "exception" && I.exception && I.exception.values && I.exception.values.length > 0) { | |
let W = G.getRequestSession(); | |
if (W && W.status === "ok") W.status = "errored" | |
} | |
} | |
return super.captureEvent(I, d, G) | |
} | |
close(I) { | |
if (this._sessionFlusher) this._sessionFlusher.close(); | |
return super.close(I) | |
} | |
initSessionFlusher() { | |
let { | |
release: I, | |
environment: d | |
} = this._options; | |
if (!I) tO.DEBUG_BUILD && vA.logger.warn("Cannot initialise an instance of SessionFlusher if no release is provided!"); | |
else this._sessionFlusher = new ij2.SessionFlusher(this, { | |
release: I, | |
environment: d | |
}) | |
} | |
captureCheckIn(I, d, G) { | |
let Z = "checkInId" in I && I.checkInId ? I.checkInId : vA.uuid4(); | |
if (!this._isEnabled()) return tO.DEBUG_BUILD && vA.logger.warn("SDK not enabled, will not capture checkin."), Z; | |
let C = this.getOptions(), | |
{ | |
release: W, | |
environment: w, | |
tunnel: B | |
} = C, | |
A = { | |
check_in_id: Z, | |
monitor_slug: I.monitorSlug, | |
status: I.status, | |
release: W, | |
environment: w | |
}; | |
if ("duration" in I) A.duration = I.duration; | |
if (d) A.monitor_config = { | |
schedule: d.schedule, | |
checkin_margin: d.checkinMargin, | |
max_runtime: d.maxRuntime, | |
timezone: d.timezone | |
}; | |
let [V, X] = this._getTraceInfoFromScope(G); | |
if (X) A.contexts = { | |
trace: X | |
}; | |
let _ = xj2.createCheckInEnvelope(A, V, this.getSdkMetadata(), B, this.getDsn()); | |
return tO.DEBUG_BUILD && vA.logger.info("Sending checkin:", I.monitorSlug, I.status), this._sendEnvelope(_), Z | |
} | |
_captureRequestSession() { | |
if (!this._sessionFlusher) tO.DEBUG_BUILD && vA.logger.warn("Discarded request mode session because autoSessionTracking option was disabled"); | |
else this._sessionFlusher.incrementSessionStatusCount() | |
} | |
_prepareEvent(I, d, G, Z) { | |
if (this._options.platform) I.platform = I.platform || this._options.platform; | |
if (this._options.runtime) I.contexts = { | |
...I.contexts, | |
runtime: (I.contexts || {}).runtime || this._options.runtime | |
}; | |
if (this._options.serverName) I.server_name = I.server_name || this._options.serverName; | |
return super._prepareEvent(I, d, G, Z) | |
} | |
_getTraceInfoFromScope(I) { | |
if (!I) return [void 0, void 0]; | |
let d = I.getSpan(); | |
if (d) return [aj2.getRootSpan(d) ? KR1.getDynamicSamplingContextFromSpan(d) : void 0, rj2.spanToTraceContext(d)]; | |
let { | |
traceId: G, | |
spanId: Z, | |
parentSpanId: C, | |
dsc: W | |
} = I.getPropagationContext(), w = { | |
trace_id: G, | |
span_id: Z, | |
parent_span_id: C | |
}; | |
if (W) return [W, w]; | |
return [KR1.getDynamicSamplingContextFromClient(G, this, I), w] | |
} | |
} | |
zR1.ServerRuntimeClient = NR1 | |
}); | |
var UR1 = Y((RR1) => { | |
Object.defineProperty(RR1, "__esModule", { | |
value: !0 | |
}); | |
var fR1 = V0(), | |
oj2 = F6(), | |
ej2 = iG(), | |
tj2 = ww(); | |
function Ik2(I, d) { | |
if (d.debug === !0) | |
if (oj2.DEBUG_BUILD) fR1.logger.enable(); | |
else fR1.consoleSandbox(() => { | |
console.warn("[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.") | |
}); | |
ej2.getCurrentScope().update(d.initialScope); | |
let Z = new I(d); | |
qR1(Z), dk2(Z) | |
} | |
function qR1(I) { | |
let G = tj2.getCurrentHub().getStackTop(); | |
G.client = I, G.scope.setClient(I) | |
} | |
function dk2(I) { | |
if (I.init) I.init(); | |
else if (I.setupIntegrations) I.setupIntegrations() | |
} | |
RR1.initAndBind = Ik2; | |
RR1.setCurrentClient = qR1 | |
}); | |
var LR1 = Y((SR1) => { | |
Object.defineProperty(SR1, "__esModule", { | |
value: !0 | |
}); | |
var cI = V0(), | |
vR1 = F6(), | |
MR1 = 30; | |
function Ck2(I, d, G = cI.makePromiseBuffer(I.bufferSize || MR1)) { | |
let Z = {}, | |
C = (w) => G.drain(w); | |
function W(w) { | |
let B = []; | |
if (cI.forEachEnvelopeItem(w, (_, F) => { | |
let g = cI.envelopeItemTypeToDataCategory(F); | |
if (cI.isRateLimited(Z, g)) { | |
let J = ER1(_, F); | |
I.recordDroppedEvent("ratelimit_backoff", g, J) | |
} else B.push(_) | |
}), B.length === 0) return cI.resolvedSyncPromise(); | |
let A = cI.createEnvelope(w[0], B), | |
V = (_) => { | |
cI.forEachEnvelopeItem(A, (F, g) => { | |
let J = ER1(F, g); | |
I.recordDroppedEvent(_, cI.envelopeItemTypeToDataCategory(g), J) | |
}) | |
}, | |
X = () => d({ | |
body: cI.serializeEnvelope(A, I.textEncoder) | |
}).then((_) => { | |
if (_.statusCode !== void 0 && (_.statusCode < 200 || _.statusCode >= 300)) vR1.DEBUG_BUILD && cI.logger.warn(`Sentry responded with status code ${_.statusCode} to sent event.`); | |
return Z = cI.updateRateLimits(Z, _), _ | |
}, (_) => { | |
throw V("network_error"), _ | |
}); | |
return G.add(X).then((_) => _, (_) => { | |
if (_ instanceof cI.SentryError) return vR1.DEBUG_BUILD && cI.logger.error("Skipped sending event because buffer is full."), V("queue_overflow"), cI.resolvedSyncPromise(); | |
else throw _ | |
}) | |
} | |
return W.__sentry__baseTransport__ = !0, { | |
send: W, | |
flush: C | |
} | |
} | |
function ER1(I, d) { | |
if (d !== "event" && d !== "transaction") return; | |
return Array.isArray(I) ? I[1] : void 0 | |
} | |
SR1.DEFAULT_TRANSPORT_BUFFER_SIZE = MR1; | |
SR1.createTransport = Ck2 | |
}); | |
var $R1 = Y((PR1) => { | |
Object.defineProperty(PR1, "__esModule", { | |
value: !0 | |
}); | |
var O11 = V0(), | |
Bk2 = F6(), | |
yR1 = 100, | |
m11 = 5000, | |
Ak2 = 3600000; | |
function T11(I, d) { | |
Bk2.DEBUG_BUILD && O11.logger.info(`[Offline]: ${I}`, d) | |
} | |
function Vk2(I) { | |
return (d) => { | |
let G = I(d), | |
Z = d.createStore ? d.createStore(d) : void 0, | |
C = m11, | |
W; | |
function w(X, _, F) { | |
if (O11.envelopeContainsItemType(X, ["replay_event", "replay_recording", "client_report"])) return !1; | |
if (d.shouldStore) return d.shouldStore(X, _, F); | |
return !0 | |
} | |
function B(X) { | |
if (!Z) return; | |
if (W) clearTimeout(W); | |
if (W = setTimeout(async () => { | |
W = void 0; | |
let _ = await Z.pop(); | |
if (_) T11("Attempting to send previously queued event"), V(_).catch((F) => { | |
T11("Failed to retry sending", F) | |
}) | |
}, X), typeof W !== "number" && W.unref) W.unref() | |
} | |
function A() { | |
if (W) return; | |
B(C), C = Math.min(C * 2, Ak2) | |
} | |
async function V(X) { | |
try { | |
let _ = await G.send(X), | |
F = yR1; | |
if (_) { | |
if (_.headers && _.headers["retry-after"]) F = O11.parseRetryAfterHeader(_.headers["retry-after"]); | |
else if ((_.statusCode || 0) >= 400) return _ | |
} | |
return B(F), C = m11, _ | |
} catch (_) { | |
if (Z && await w(X, _, C)) return await Z.insert(X), A(), T11("Error sending. Event queued", _), {}; | |
else throw _ | |
} | |
} | |
if (d.flushAtStartup) A(); | |
return { | |
send: V, | |
flush: (X) => G.flush(X) | |
} | |
} | |
} | |
PR1.MIN_DELAY = yR1; | |
PR1.START_DELAY = m11; | |
PR1.makeOfflineTransport = Vk2 | |
}); | |
var TR1 = Y((uR1) => { | |
Object.defineProperty(uR1, "__esModule", { | |
value: !0 | |
}); | |
var l11 = V0(), | |
Dk2 = rO(); | |
function b11(I, d) { | |
let G; | |
return l11.forEachEnvelopeItem(I, (Z, C) => { | |
if (d.includes(C)) G = Array.isArray(Z) ? Z[1] : void 0; | |
return !!G | |
}), G | |
} | |
function Hk2(I, d) { | |
return (G) => { | |
let Z = I(G); | |
return { | |
...Z, | |
send: async (C) => { | |
let W = b11(C, ["event", "transaction", "profile", "replay_event"]); | |
if (W) W.release = d; | |
return Z.send(C) | |
} | |
} | |
} | |
} | |
function Fk2(I, d) { | |
return l11.createEnvelope(d ? { | |
...I[0], | |
dsn: d | |
} : I[0], I[1]) | |
} | |
function gk2(I, d) { | |
return (G) => { | |
let Z = I(G), | |
C = new Map; | |
function W(A, V) { | |
let X = V ? `${A}:${V}` : A, | |
_ = C.get(X); | |
if (!_) { | |
let F = l11.dsnFromString(A); | |
if (!F) return; | |
let g = Dk2.getEnvelopeEndpointWithUrlEncodedAuth(F, G.tunnel); | |
_ = V ? Hk2(I, V)({ | |
...G, | |
url: g | |
}) : I({ | |
...G, | |
url: g | |
}), C.set(X, _) | |
} | |
return [A, _] | |
} | |
async function w(A) { | |
function V(F) { | |
let g = F && F.length ? F : ["event"]; | |
return b11(A, g) | |
} | |
let X = d({ | |
envelope: A, | |
getEvent: V | |
}).map((F) => { | |
if (typeof F === "string") return W(F, void 0); | |
else return W(F.dsn, F.release) | |
}).filter((F) => !!F); | |
if (X.length === 0) X.push(["", Z]); | |
return (await Promise.all(X.map(([F, g]) => g.send(Fk2(A, F)))))[0] | |
} | |
async function B(A) { | |
let V = [await Z.flush(A)]; | |
for (let [, X] of C) V.push(await X.flush(A)); | |
return V.every((X) => X) | |
} | |
return { | |
send: w, | |
flush: B | |
} | |
} | |
} | |
uR1.eventFromEnvelope = b11; | |
uR1.makeMultiplexedTransport = gk2 | |
}); | |
var lR1 = Y((mR1) => { | |
Object.defineProperty(mR1, "__esModule", { | |
value: !0 | |
}); | |
var OR1 = V0(); | |
function Nk2(I, d) { | |
let G = { | |
sent_at: new Date().toISOString() | |
}; | |
if (d) G.dsn = OR1.dsnToString(d); | |
let Z = I.map(zk2); | |
return OR1.createEnvelope(G, Z) | |
} | |
function zk2(I) { | |
return [{ | |
type: "span" | |
}, I] | |
} | |
mR1.createSpanEnvelope = Nk2 | |
}); | |
var jR1 = Y((hR1) => { | |
Object.defineProperty(hR1, "__esModule", { | |
value: !0 | |
}); | |
function fk2(I, d) { | |
let G = d && Uk2(d) ? d.getClient() : d, | |
Z = G && G.getDsn(), | |
C = G && G.getOptions().tunnel; | |
return Rk2(I, Z) || qk2(I, C) | |
} | |
function qk2(I, d) { | |
if (!d) return !1; | |
return bR1(I) === bR1(d) | |
} | |
function Rk2(I, d) { | |
return d ? I.includes(d.host) : !1 | |
} | |
function bR1(I) { | |
return I[I.length - 1] === "/" ? I.slice(0, -1) : I | |
} | |
function Uk2(I) { | |
return I.getClient !== void 0 | |
} | |
hR1.isSentryRequestUrl = fk2 | |
}); | |
var xR1 = Y((kR1) => { | |
Object.defineProperty(kR1, "__esModule", { | |
value: !0 | |
}); | |
function Ek2(I, ...d) { | |
let G = new String(String.raw(I, ...d)); | |
return G.__sentry_template_string__ = I.join("\x00").replace(/%/g, "%%").replace(/\0/g, "%s"), G.__sentry_template_values__ = d, G | |
} | |
kR1.parameterize = Ek2 | |
}); | |
var iR1 = Y((pR1) => { | |
Object.defineProperty(pR1, "__esModule", { | |
value: !0 | |
}); | |
var cR1 = yO(); | |
function Sk2(I, d, G = [d], Z = "npm") { | |
let C = I._metadata || {}; | |
if (!C.sdk) C.sdk = { | |
name: `sentry.javascript.${d}`, | |
packages: G.map((W) => ({ | |
name: `${Z}:@sentry/${W}`, | |
version: cR1.SDK_VERSION | |
})), | |
version: cR1.SDK_VERSION | |
}; | |
I._metadata = C | |
} | |
pR1.applySdkMetadata = Sk2 | |
}); | |
var oR1 = Y((sR1) => { | |
Object.defineProperty(sR1, "__esModule", { | |
value: !0 | |
}); | |
var h11 = V0(), | |
rR1 = new Map, | |
nR1 = new Set; | |
function yk2(I) { | |
if (!h11.GLOBAL_OBJ._sentryModuleMetadata) return; | |
for (let d of Object.keys(h11.GLOBAL_OBJ._sentryModuleMetadata)) { | |
let G = h11.GLOBAL_OBJ._sentryModuleMetadata[d]; | |
if (nR1.has(d)) continue; | |
nR1.add(d); | |
let Z = I(d); | |
for (let C of Z.reverse()) | |
if (C.filename) { | |
rR1.set(C.filename, G); | |
break | |
} | |
} | |
} | |
function aR1(I, d) { | |
return yk2(I), rR1.get(d) | |
} | |
function Pk2(I, d) { | |
try { | |
d.exception.values.forEach((G) => { | |
if (!G.stacktrace) return; | |
for (let Z of G.stacktrace.frames || []) { | |
if (!Z.filename) continue; | |
let C = aR1(I, Z.filename); | |
if (C) Z.module_metadata = C | |
} | |
}) | |
} catch (G) {} | |
} | |
function $k2(I) { | |
try { | |
I.exception.values.forEach((d) => { | |
if (!d.stacktrace) return; | |
for (let G of d.stacktrace.frames || []) delete G.module_metadata | |
}) | |
} catch (d) {} | |
} | |
sR1.addMetadataToStackFrames = Pk2; | |
sR1.getMetadataForUrl = aR1; | |
sR1.stripMetadataFromStackFrames = $k2 | |
}); | |
var ZU1 = Y((GU1) => { | |
Object.defineProperty(GU1, "__esModule", { | |
value: !0 | |
}); | |
var mk2 = V0(), | |
tR1 = UA(), | |
eR1 = oR1(), | |
IU1 = "ModuleMetadata", | |
lk2 = () => { | |
return { | |
name: IU1, | |
setupOnce() {}, | |
setup(I) { | |
if (typeof I.on !== "function") return; | |
I.on("beforeEnvelope", (d) => { | |
mk2.forEachEnvelopeItem(d, (G, Z) => { | |
if (Z === "event") { | |
let C = Array.isArray(G) ? G[1] : void 0; | |
if (C) eR1.stripMetadataFromStackFrames(C), G[1] = C | |
} | |
}) | |
}) | |
}, | |
processEvent(I, d, G) { | |
let Z = G.getOptions().stackParser; | |
return eR1.addMetadataToStackFrames(Z, I), I | |
} | |
} | |
}, | |
dU1 = tR1.defineIntegration(lk2), | |
bk2 = tR1.convertIntegrationFnToClass(IU1, dU1); | |
GU1.ModuleMetadata = bk2; | |
GU1.moduleMetadataIntegration = dU1 | |
}); | |
var VU1 = Y((AU1) => { | |
Object.defineProperty(AU1, "__esModule", { | |
value: !0 | |
}); | |
var CU1 = V0(), | |
WU1 = UA(), | |
kk2 = kI(), | |
j11 = { | |
include: { | |
cookies: !0, | |
data: !0, | |
headers: !0, | |
ip: !1, | |
query_string: !0, | |
url: !0, | |
user: { | |
id: !0, | |
username: !0, | |
email: !0 | |
} | |
}, | |
transactionNamingScheme: "methodPath" | |
}, | |
wU1 = "RequestData", | |
xk2 = (I = {}) => { | |
let d = CU1.addRequestDataToEvent, | |
G = { | |
...j11, | |
...I, | |
include: { | |
method: !0, | |
...j11.include, | |
...I.include, | |
user: I.include && typeof I.include.user === "boolean" ? I.include.user : { | |
...j11.include.user, | |
...(I.include || {}).user | |
} | |
} | |
}; | |
return { | |
name: wU1, | |
setupOnce() {}, | |
processEvent(Z, C, W) { | |
let { | |
transactionNamingScheme: w | |
} = G, { | |
sdkProcessingMetadata: B = {} | |
} = Z, A = B.request; | |
if (!A) return Z; | |
let V = B.requestDataOptionsFromExpressHandler || B.requestDataOptionsFromGCPWrapper || pk2(G), | |
X = d(Z, A, V); | |
if (Z.type === "transaction" || w === "handler") return X; | |
let F = A._sentryTransaction; | |
if (F) { | |
let g = kk2.spanToJSON(F).description || "", | |
J = ik2(W) === "sentry.javascript.nextjs" ? g.startsWith("/api") : w !== "path", | |
[K] = CU1.extractPathForTransaction(A, { | |
path: !0, | |
method: J, | |
customRoute: g | |
}); | |
X.transaction = K | |
} | |
return X | |
} | |
} | |
}, | |
BU1 = WU1.defineIntegration(xk2), | |
ck2 = WU1.convertIntegrationFnToClass(wU1, BU1); | |
function pk2(I) { | |
let { | |
transactionNamingScheme: d, | |
include: { | |
ip: G, | |
user: Z, | |
...C | |
} | |
} = I, W = []; | |
for (let [B, A] of Object.entries(C)) | |
if (A) W.push(B); | |
let w; | |
if (Z === void 0) w = !0; | |
else if (typeof Z === "boolean") w = Z; | |
else { | |
let B = []; | |
for (let [A, V] of Object.entries(Z)) | |
if (V) B.push(A); | |
w = B | |
} | |
return { | |
include: { | |
ip: G, | |
user: w, | |
request: W.length !== 0 ? W : void 0, | |
transaction: d | |
} | |
} | |
} | |
function ik2(I) { | |
try { | |
return I.getOptions()._metadata.sdk.name | |
} catch (d) { | |
return | |
} | |
} | |
AU1.RequestData = ck2; | |
AU1.requestDataIntegration = BU1 | |
}); | |
var k11 = Y((DU1) => { | |
Object.defineProperty(DU1, "__esModule", { | |
value: !0 | |
}); | |
var W8 = V0(), | |
KF = F6(), | |
XU1 = UA(), | |
ak2 = [/^Script error\.?$/, /^Javascript error: Script error\.? on line 0$/, /^ResizeObserver loop completed with undelivered notifications.$/, /^Cannot redefine property: googletag$/], | |
sk2 = [/^.*\/healthcheck$/, /^.*\/healthy$/, /^.*\/live$/, /^.*\/ready$/, /^.*\/heartbeat$/, /^.*\/health$/, /^.*\/healthz$/], | |
YU1 = "InboundFilters", | |
ok2 = (I = {}) => { | |
return { | |
name: YU1, | |
setupOnce() {}, | |
processEvent(d, G, Z) { | |
let C = Z.getOptions(), | |
W = tk2(I, C); | |
return Ix2(d, W) ? null : d | |
} | |
} | |
}, | |
_U1 = XU1.defineIntegration(ok2), | |
ek2 = XU1.convertIntegrationFnToClass(YU1, _U1); | |
function tk2(I = {}, d = {}) { | |
return { | |
allowUrls: [...I.allowUrls || [], ...d.allowUrls || []], | |
denyUrls: [...I.denyUrls || [], ...d.denyUrls || []], | |
ignoreErrors: [...I.ignoreErrors || [], ...d.ignoreErrors || [], ...I.disableErrorDefaults ? [] : ak2], | |
ignoreTransactions: [...I.ignoreTransactions || [], ...d.ignoreTransactions || [], ...I.disableTransactionDefaults ? [] : sk2], | |
ignoreInternal: I.ignoreInternal !== void 0 ? I.ignoreInternal : !0 | |
} | |
} | |
function Ix2(I, d) { | |
if (d.ignoreInternal && wx2(I)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being internal Sentry Error. | |
Event: ${W8.getEventDescription(I)}`), !0; | |
if (dx2(I, d.ignoreErrors)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being matched by \`ignoreErrors\` option. | |
Event: ${W8.getEventDescription(I)}`), !0; | |
if (Gx2(I, d.ignoreTransactions)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. | |
Event: ${W8.getEventDescription(I)}`), !0; | |
if (Zx2(I, d.denyUrls)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to being matched by \`denyUrls\` option. | |
Event: ${W8.getEventDescription(I)}. | |
Url: ${Im(I)}`), !0; | |
if (!Cx2(I, d.allowUrls)) return KF.DEBUG_BUILD && W8.logger.warn(`Event dropped due to not being matched by \`allowUrls\` option. | |
Event: ${W8.getEventDescription(I)}. | |
Url: ${Im(I)}`), !0; | |
return !1 | |
} | |
function dx2(I, d) { | |
if (I.type || !d || !d.length) return !1; | |
return Wx2(I).some((G) => W8.stringMatchesSomePattern(G, d)) | |
} | |
function Gx2(I, d) { | |
if (I.type !== "transaction" || !d || !d.length) return !1; | |
let G = I.transaction; | |
return G ? W8.stringMatchesSomePattern(G, d) : !1 | |
} | |
function Zx2(I, d) { | |
if (!d || !d.length) return !1; | |
let G = Im(I); | |
return !G ? !1 : W8.stringMatchesSomePattern(G, d) | |
} | |
function Cx2(I, d) { | |
if (!d || !d.length) return !0; | |
let G = Im(I); | |
return !G ? !0 : W8.stringMatchesSomePattern(G, d) | |
} | |
function Wx2(I) { | |
let d = []; | |
if (I.message) d.push(I.message); | |
let G; | |
try { | |
G = I.exception.values[I.exception.values.length - 1] | |
} catch (Z) {} | |
if (G) { | |
if (G.value) { | |
if (d.push(G.value), G.type) d.push(`${G.type}: ${G.value}`) | |
} | |
} | |
if (KF.DEBUG_BUILD && d.length === 0) W8.logger.error(`Could not extract message for event ${W8.getEventDescription(I)}`); | |
return d | |
} | |
function wx2(I) { | |
try { | |
return I.exception.values[0].type === "SentryError" | |
} catch (d) {} | |
return !1 | |
} | |
function Bx2(I = []) { | |
for (let d = I.length - 1; d >= 0; d--) { | |
let G = I[d]; | |
if (G && G.filename !== "<anonymous>" && G.filename !== "[native code]") return G.filename || null | |
} | |
return null | |
} | |
function Im(I) { | |
try { | |
let d; | |
try { | |
d = I.exception.values[0].stacktrace.frames | |
} catch (G) {} | |
return d ? Bx2(d) : null | |
} catch (d) { | |
return KF.DEBUG_BUILD && W8.logger.error(`Cannot extract url for event ${W8.getEventDescription(I)}`), null | |
} | |
} | |
DU1.InboundFilters = ek2; | |
DU1.inboundFiltersIntegration = _U1 | |
}); | |
var x11 = Y((NU1) => { | |
Object.defineProperty(NU1, "__esModule", { | |
value: !0 | |
}); | |
var Xx2 = V0(), | |
Yx2 = iG(), | |
gU1 = UA(), | |
HU1, JU1 = "FunctionToString", | |
FU1 = new WeakMap, | |
_x2 = () => { | |
return { | |
name: JU1, | |
setupOnce() { | |
HU1 = Function.prototype.toString; | |
try { | |
Function.prototype.toString = function(...I) { | |
let d = Xx2.getOriginalFunction(this), | |
G = FU1.has(Yx2.getClient()) && d !== void 0 ? d : this; | |
return HU1.apply(G, I) | |
} | |
} catch (I) {} | |
}, | |
setup(I) { | |
FU1.set(I, !0) | |
} | |
} | |
}, | |
KU1 = gU1.defineIntegration(_x2), | |
Dx2 = gU1.convertIntegrationFnToClass(JU1, KU1); | |
NU1.FunctionToString = Dx2; | |
NU1.functionToStringIntegration = KU1 | |
}); | |
var c11 = Y((RU1) => { | |
Object.defineProperty(RU1, "__esModule", { | |
value: !0 | |
}); | |
var zU1 = V0(), | |
QU1 = UA(), | |
gx2 = "cause", | |
Jx2 = 5, | |
fU1 = "LinkedErrors", | |
Kx2 = (I = {}) => { | |
let d = I.limit || Jx2, | |
G = I.key || gx2; | |
return { | |
name: fU1, | |
setupOnce() {}, | |
preprocessEvent(Z, C, W) { | |
let w = W.getOptions(); | |
zU1.applyAggregateErrorsToEvent(zU1.exceptionFromError, w.stackParser, w.maxValueLength, G, d, Z, C) | |
} | |
} | |
}, | |
qU1 = QU1.defineIntegration(Kx2), | |
Nx2 = QU1.convertIntegrationFnToClass(fU1, qU1); | |
RU1.LinkedErrors = Nx2; | |
RU1.linkedErrorsIntegration = qU1 | |
}); | |
var vU1 = Y((UU1) => { | |
Object.defineProperty(UU1, "__esModule", { | |
value: !0 | |
}); | |
var fx2 = x11(), | |
qx2 = k11(), | |
Rx2 = c11(); | |
UU1.FunctionToString = fx2.FunctionToString; | |
UU1.InboundFilters = qx2.InboundFilters; | |
UU1.LinkedErrors = Rx2.LinkedErrors | |
}); | |
var LU1 = Y((SU1) => { | |
Object.defineProperty(SU1, "__esModule", { | |
value: !0 | |
}); | |
var Mx2 = V0(), | |
EU1 = cv(), | |
Sx2 = u11(), | |
Lx2 = hv(), | |
dm = xv(); | |
class MU1 { | |
constructor(I) { | |
this._client = I, this._buckets = new Map, this._interval = setInterval(() => this.flush(), EU1.DEFAULT_BROWSER_FLUSH_INTERVAL) | |
} | |
add(I, d, G, Z = "none", C = {}, W = Mx2.timestampInSeconds()) { | |
let w = Math.floor(W), | |
B = dm.sanitizeMetricKey(d), | |
A = dm.sanitizeTags(C), | |
V = dm.sanitizeUnit(Z), | |
X = dm.getBucketKey(I, B, V, A), | |
_ = this._buckets.get(X), | |
F = _ && I === EU1.SET_METRIC_TYPE ? _.metric.weight : 0; | |
if (_) { | |
if (_.metric.add(G), _.timestamp < w) _.timestamp = w | |
} else _ = { | |
metric: new Sx2.METRIC_MAP[I](G), | |
timestamp: w, | |
metricType: I, | |
name: B, | |
unit: V, | |
tags: A | |
}, this._buckets.set(X, _); | |
let g = typeof G === "string" ? _.metric.weight - F : G; | |
Lx2.updateMetricSummaryOnActiveSpan(I, B, g, V, C, X) | |
} | |
flush() { | |
if (this._buckets.size === 0) return; | |
if (this._client.captureAggregateMetrics) { | |
let I = Array.from(this._buckets).map(([, d]) => d); | |
this._client.captureAggregateMetrics(I) | |
} | |
this._buckets.clear() | |
} | |
close() { | |
clearInterval(this._interval), this.flush() | |
} | |
} | |
SU1.BrowserMetricsAggregator = MU1 | |
}); | |
var TU1 = Y((uU1) => { | |
Object.defineProperty(uU1, "__esModule", { | |
value: !0 | |
}); | |
var yU1 = UA(), | |
Px2 = LU1(), | |
PU1 = "MetricsAggregator", | |
$x2 = () => { | |
return { | |
name: PU1, | |
setupOnce() {}, | |
setup(I) { | |
I.metricsAggregator = new Px2.BrowserMetricsAggregator(I) | |
} | |
} | |
}, | |
$U1 = yU1.defineIntegration($x2), | |
ux2 = yU1.convertIntegrationFnToClass(PU1, $U1); | |
uU1.MetricsAggregator = ux2; | |
uU1.metricsAggregatorIntegration = $U1 | |
}); | |
var pU1 = Y((cU1) => { | |
Object.defineProperty(cU1, "__esModule", { | |
value: !0 | |
}); | |
var OU1 = V0(), | |
mU1 = F6(), | |
lU1 = iG(), | |
mx2 = kI(), | |
Gm = cv(), | |
bU1 = TU1(); | |
function Zm(I, d, G, Z = {}) { | |
let C = lU1.getClient(), | |
W = lU1.getCurrentScope(); | |
if (C) { | |
if (!C.metricsAggregator) { | |
mU1.DEBUG_BUILD && OU1.logger.warn("No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs"); | |
return | |
} | |
let { | |
unit: w, | |
tags: B, | |
timestamp: A | |
} = Z, { | |
release: V, | |
environment: X | |
} = C.getOptions(), _ = W.getTransaction(), F = {}; | |
if (V) F.release = V; | |
if (X) F.environment = X; | |
if (_) F.transaction = mx2.spanToJSON(_).description || ""; | |
mU1.DEBUG_BUILD && OU1.logger.log(`Adding value of ${G} to ${I} metric ${d}`), C.metricsAggregator.add(I, d, G, w, { | |
...F, | |
...B | |
}, A) | |
} | |
} | |
function hU1(I, d = 1, G) { | |
Zm(Gm.COUNTER_METRIC_TYPE, I, d, G) | |
} | |
function jU1(I, d, G) { | |
Zm(Gm.DISTRIBUTION_METRIC_TYPE, I, d, G) | |
} | |
function kU1(I, d, G) { | |
Zm(Gm.SET_METRIC_TYPE, I, d, G) | |
} | |
function xU1(I, d, G) { | |
Zm(Gm.GAUGE_METRIC_TYPE, I, d, G) | |
} | |
var lx2 = { | |
increment: hU1, | |
distribution: jU1, | |
set: kU1, | |
gauge: xU1, | |
MetricsAggregator: bU1.MetricsAggregator, | |
metricsAggregatorIntegration: bU1.metricsAggregatorIntegration | |
}; | |
cU1.distribution = jU1; | |
cU1.gauge = xU1; | |
cU1.increment = hU1; | |
cU1.metrics = lx2; | |
cU1.set = kU1 | |
}); | |
var V4 = Y((n11) => { | |
Object.defineProperty(n11, "__esModule", { | |
value: !0 | |
}); | |
var iU1 = Q11(), | |
nU1 = N11(), | |
cx2 = jO(), | |
px2 = cO(), | |
rU1 = uO(), | |
Cm = DN(), | |
NF = hO(), | |
aU1 = HF(), | |
ix2 = iq1(), | |
nx2 = z11(), | |
iv = jv(), | |
sU1 = f11(), | |
L9 = iG(), | |
Vw = ww(), | |
p11 = VN(), | |
rx2 = q11(), | |
i11 = MO(), | |
oU1 = Pv(), | |
eU1 = rO(), | |
tU1 = E11(), | |
ax2 = QR1(), | |
Iv1 = UR1(), | |
sx2 = LR1(), | |
ox2 = $R1(), | |
ex2 = TR1(), | |
tx2 = yO(), | |
Wm = UA(), | |
dv1 = EO(), | |
Ic2 = vO(), | |
dc2 = S11(), | |
Gc2 = lR1(), | |
Zc2 = OO(), | |
Cc2 = jR1(), | |
Wc2 = F11(), | |
wc2 = xR1(), | |
wm = kI(), | |
Bc2 = XN(), | |
Ac2 = iR1(), | |
Vc2 = AN(), | |
Gv1 = ZU1(), | |
Zv1 = VU1(), | |
Cv1 = k11(), | |
Wv1 = x11(), | |
wv1 = c11(), | |
Xc2 = vU1(), | |
Yc2 = pU1(), | |
_c2 = Xc2; | |
n11.addTracingExtensions = iU1.addTracingExtensions; | |
n11.startIdleTransaction = iU1.startIdleTransaction; | |
n11.IdleTransaction = nU1.IdleTransaction; | |
n11.TRACING_DEFAULTS = nU1.TRACING_DEFAULTS; | |
n11.Span = cx2.Span; | |
n11.Transaction = px2.Transaction; | |
n11.extractTraceparentData = rU1.extractTraceparentData; | |
n11.getActiveTransaction = rU1.getActiveTransaction; | |
Object.defineProperty(n11, "SpanStatus", { | |
enumerable: !0, | |
get: () => Cm.SpanStatus | |
}); | |
n11.getSpanStatusFromHttpCode = Cm.getSpanStatusFromHttpCode; | |
n11.setHttpStatus = Cm.setHttpStatus; | |
n11.spanStatusfromHttpCode = Cm.spanStatusfromHttpCode; | |
n11.continueTrace = NF.continueTrace; | |
n11.getActiveSpan = NF.getActiveSpan; | |
n11.startActiveSpan = NF.startActiveSpan; | |
n11.startInactiveSpan = NF.startInactiveSpan; | |
n11.startSpan = NF.startSpan; | |
n11.startSpanManual = NF.startSpanManual; | |
n11.trace = NF.trace; | |
n11.getDynamicSamplingContextFromClient = aU1.getDynamicSamplingContextFromClient; | |
n11.getDynamicSamplingContextFromSpan = aU1.getDynamicSamplingContextFromSpan; | |
n11.setMeasurement = ix2.setMeasurement; | |
n11.isValidSampleRate = nx2.isValidSampleRate; | |
n11.SEMANTIC_ATTRIBUTE_PROFILE_ID = iv.SEMANTIC_ATTRIBUTE_PROFILE_ID; | |
n11.SEMANTIC_ATTRIBUTE_SENTRY_OP = iv.SEMANTIC_ATTRIBUTE_SENTRY_OP; | |
n11.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = iv.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN; | |
n11.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = iv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE; | |
n11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = iv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE; | |
n11.createEventEnvelope = sU1.createEventEnvelope; | |
n11.createSessionEnvelope = sU1.createSessionEnvelope; | |
n11.addBreadcrumb = L9.addBreadcrumb; | |
n11.captureCheckIn = L9.captureCheckIn; | |
n11.captureEvent = L9.captureEvent; | |
n11.captureException = L9.captureException; | |
n11.captureMessage = L9.captureMessage; | |
n11.captureSession = L9.captureSession; | |
n11.close = L9.close; | |
n11.configureScope = L9.configureScope; | |
n11.endSession = L9.endSession; | |
n11.flush = L9.flush; | |
n11.getClient = L9.getClient; | |
n11.getCurrentScope = L9.getCurrentScope; | |
n11.isInitialized = L9.isInitialized; | |
n11.lastEventId = L9.lastEventId; | |
n11.setContext = L9.setContext; | |
n11.setExtra = L9.setExtra; | |
n11.setExtras = L9.setExtras; | |
n11.setTag = L9.setTag; | |
n11.setTags = L9.setTags; | |
n11.setUser = L9.setUser; | |
n11.startSession = L9.startSession; | |
n11.startTransaction = L9.startTransaction; | |
n11.withActiveSpan = L9.withActiveSpan; | |
n11.withIsolationScope = L9.withIsolationScope; | |
n11.withMonitor = L9.withMonitor; | |
n11.withScope = L9.withScope; | |
n11.Hub = Vw.Hub; | |
n11.ensureHubOnCarrier = Vw.ensureHubOnCarrier; | |
n11.getCurrentHub = Vw.getCurrentHub; | |
n11.getHubFromCarrier = Vw.getHubFromCarrier; | |
n11.getIsolationScope = Vw.getIsolationScope; | |
n11.getMainCarrier = Vw.getMainCarrier; | |
n11.makeMain = Vw.makeMain; | |
n11.runWithAsyncContext = Vw.runWithAsyncContext; | |
n11.setAsyncContextStrategy = Vw.setAsyncContextStrategy; | |
n11.setHubOnCarrier = Vw.setHubOnCarrier; | |
n11.closeSession = p11.closeSession; | |
n11.makeSession = p11.makeSession; | |
n11.updateSession = p11.updateSession; | |
n11.SessionFlusher = rx2.SessionFlusher; | |
n11.Scope = i11.Scope; | |
n11.getGlobalScope = i11.getGlobalScope; | |
n11.setGlobalScope = i11.setGlobalScope; | |
n11.addGlobalEventProcessor = oU1.addGlobalEventProcessor; | |
n11.notifyEventProcessors = oU1.notifyEventProcessors; | |
n11.getEnvelopeEndpointWithUrlEncodedAuth = eU1.getEnvelopeEndpointWithUrlEncodedAuth; | |
n11.getReportDialogEndpoint = eU1.getReportDialogEndpoint; | |
n11.BaseClient = tU1.BaseClient; | |
n11.addEventProcessor = tU1.addEventProcessor; | |
n11.ServerRuntimeClient = ax2.ServerRuntimeClient; | |
n11.initAndBind = Iv1.initAndBind; | |
n11.setCurrentClient = Iv1.setCurrentClient; | |
n11.createTransport = sx2.createTransport; | |
n11.makeOfflineTransport = ox2.makeOfflineTransport; | |
n11.makeMultiplexedTransport = ex2.makeMultiplexedTransport; | |
n11.SDK_VERSION = tx2.SDK_VERSION; | |
n11.addIntegration = Wm.addIntegration; | |
n11.convertIntegrationFnToClass = Wm.convertIntegrationFnToClass; | |
n11.defineIntegration = Wm.defineIntegration; | |
n11.getIntegrationsToSetup = Wm.getIntegrationsToSetup; | |
n11.applyScopeDataToEvent = dv1.applyScopeDataToEvent; | |
n11.mergeScopeData = dv1.mergeScopeData; | |
n11.prepareEvent = Ic2.prepareEvent; | |
n11.createCheckInEnvelope = dc2.createCheckInEnvelope; | |
n11.createSpanEnvelope = Gc2.createSpanEnvelope; | |
n11.hasTracingEnabled = Zc2.hasTracingEnabled; | |
n11.isSentryRequestUrl = Cc2.isSentryRequestUrl; | |
n11.handleCallbackErrors = Wc2.handleCallbackErrors; | |
n11.parameterize = wc2.parameterize; | |
n11.spanIsSampled = wm.spanIsSampled; | |
n11.spanToJSON = wm.spanToJSON; | |
n11.spanToTraceContext = wm.spanToTraceContext; | |
n11.spanToTraceHeader = wm.spanToTraceHeader; | |
n11.getRootSpan = Bc2.getRootSpan; | |
n11.applySdkMetadata = Ac2.applySdkMetadata; | |
n11.DEFAULT_ENVIRONMENT = Vc2.DEFAULT_ENVIRONMENT; | |
n11.ModuleMetadata = Gv1.ModuleMetadata; | |
n11.moduleMetadataIntegration = Gv1.moduleMetadataIntegration; | |
n11.RequestData = Zv1.RequestData; | |
n11.requestDataIntegration = Zv1.requestDataIntegration; | |
n11.InboundFilters = Cv1.InboundFilters; | |
n11.inboundFiltersIntegration = Cv1.inboundFiltersIntegration; | |
n11.FunctionToString = Wv1.FunctionToString; | |
n11.functionToStringIntegration = Wv1.functionToStringIntegration; | |
n11.LinkedErrors = wv1.LinkedErrors; | |
n11.linkedErrorsIntegration = wv1.linkedErrorsIntegration; | |
n11.metrics = Yc2.metrics; | |
n11.Integrations = _c2 | |
}); | |
var pI = Y((Bv1) => { | |
Object.defineProperty(Bv1, "__esModule", { | |
value: !0 | |
}); | |
var fi2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
Bv1.DEBUG_BUILD = fi2 | |
}); | |
var iX = Y((Vv1) => { | |
var { | |
_optionalChain: Av1 | |
} = V0(); | |
Object.defineProperty(Vv1, "__esModule", { | |
value: !0 | |
}); | |
function Ri2(I) { | |
let d = Av1([I, "call", (Z) => Z(), "access", (Z) => Z.getClient, "call", (Z) => Z(), "optionalAccess", (Z) => Z.getOptions, "call", (Z) => Z()]); | |
return (Av1([d, "optionalAccess", (Z) => Z.instrumenter]) || "sentry") !== "sentry" | |
} | |
Vv1.shouldDisableAutoInstrumentation = Ri2 | |
}); | |
var Hv1 = Y((Dv1) => { | |
var { | |
_optionalChain: Xw | |
} = V0(); | |
Object.defineProperty(Dv1, "__esModule", { | |
value: !0 | |
}); | |
var r11 = V4(), | |
iI = V0(), | |
Bm = pI(), | |
vi2 = iX(); | |
class Am { | |
static __initStatic() { | |
this.id = "Express" | |
} | |
constructor(I = {}) { | |
this.name = Am.id, this._router = I.router || I.app, this._methods = (Array.isArray(I.methods) ? I.methods : []).concat("use") | |
} | |
setupOnce(I, d) { | |
if (!this._router) { | |
Bm.DEBUG_BUILD && iI.logger.error("ExpressIntegration is missing an Express instance"); | |
return | |
} | |
if (vi2.shouldDisableAutoInstrumentation(d)) { | |
Bm.DEBUG_BUILD && iI.logger.log("Express Integration is skipped because of instrumenter configuration."); | |
return | |
} | |
Si2(this._router, this._methods), Li2(this._router) | |
} | |
} | |
Am.__initStatic(); | |
function Xv1(I, d) { | |
let G = I.length; | |
switch (G) { | |
case 2: | |
return function(Z, C) { | |
let W = C.__sentry_transaction; | |
if (W) { | |
let w = W.startChild({ | |
description: I.name, | |
op: `middleware.express.${d}`, | |
origin: "auto.middleware.express" | |
}); | |
C.once("finish", () => { | |
w.end() | |
}) | |
} | |
return I.call(this, Z, C) | |
}; | |
case 3: | |
return function(Z, C, W) { | |
let w = C.__sentry_transaction, | |
B = Xw([w, "optionalAccess", (A) => A.startChild, "call", (A) => A({ | |
description: I.name, | |
op: `middleware.express.${d}`, | |
origin: "auto.middleware.express" | |
})]); | |
I.call(this, Z, C, function(...A) { | |
Xw([B, "optionalAccess", (V) => V.end, "call", (V) => V()]), W.call(this, ...A) | |
}) | |
}; | |
case 4: | |
return function(Z, C, W, w) { | |
let B = W.__sentry_transaction, | |
A = Xw([B, "optionalAccess", (V) => V.startChild, "call", (V) => V({ | |
description: I.name, | |
op: `middleware.express.${d}`, | |
origin: "auto.middleware.express" | |
})]); | |
I.call(this, Z, C, W, function(...V) { | |
Xw([A, "optionalAccess", (X) => X.end, "call", (X) => X()]), w.call(this, ...V) | |
}) | |
}; | |
default: | |
throw new Error(`Express middleware takes 2-4 arguments. Got: ${G}`) | |
} | |
} | |
function Ei2(I, d) { | |
return I.map((G) => { | |
if (typeof G === "function") return Xv1(G, d); | |
if (Array.isArray(G)) return G.map((Z) => { | |
if (typeof Z === "function") return Xv1(Z, d); | |
return Z | |
}); | |
return G | |
}) | |
} | |
function Mi2(I, d) { | |
let G = I[d]; | |
return I[d] = function(...Z) { | |
return G.call(this, ...Ei2(Z, d)) | |
}, I | |
} | |
function Si2(I, d = []) { | |
d.forEach((G) => Mi2(I, G)) | |
} | |
function Li2(I) { | |
let d = "settings" in I; | |
if (d && I._router === void 0 && I.lazyrouter) I.lazyrouter(); | |
let G = d ? I._router : I; | |
if (!G) { | |
Bm.DEBUG_BUILD && iI.logger.debug("Cannot instrument router for URL Parameterization (did not find a valid router)."), Bm.DEBUG_BUILD && iI.logger.debug("Routing instrumentation is currently only supported in Express 4."); | |
return | |
} | |
let Z = Object.getPrototypeOf(G), | |
C = Z.process_params; | |
Z.process_params = function W(w, B, A, V, X) { | |
if (!A._reconstructedRoute) A._reconstructedRoute = ""; | |
let { | |
layerRoutePath: _, | |
isRegex: F, | |
isArray: g, | |
numExtraSegments: J | |
} = yi2(w); | |
if (_ || F || g) A._hasParameters = !0; | |
let K; | |
if (_) K = _; | |
else K = _v1(A.originalUrl, A._reconstructedRoute, w.path) || ""; | |
let Q = K.split("/").filter((P) => P.length > 0 && (F || g || !P.includes("*"))).join("/"); | |
if (Q && Q.length > 0) A._reconstructedRoute += `/${Q}${F?"/":""}`; | |
let E = iI.getNumberOfUrlSegments(iI.stripUrlQueryAndFragment(A.originalUrl || "")) + J, | |
S = iI.getNumberOfUrlSegments(A._reconstructedRoute); | |
if (E === S) { | |
if (!A._hasParameters) { | |
if (A._reconstructedRoute !== A.originalUrl) A._reconstructedRoute = A.originalUrl ? iI.stripUrlQueryAndFragment(A.originalUrl) : A.originalUrl | |
} | |
let P = V.__sentry_transaction, | |
$ = P && r11.spanToJSON(P).data || {}; | |
if (P && $[r11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== "custom") { | |
let h = A._reconstructedRoute || "/", | |
[O, T] = iI.extractPathForTransaction(A, { | |
path: !0, | |
method: !0, | |
customRoute: h | |
}); | |
P.updateName(O), P.setAttribute(r11.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, T) | |
} | |
} | |
return C.call(this, w, B, A, V, X) | |
} | |
} | |
var Yv1 = (I, d, G) => { | |
if (!I || !d || !G || Object.keys(G).length === 0 || !Xw([G, "access", (V) => V[0], "optionalAccess", (V) => V.offset])) return; | |
let Z = G.sort((V, X) => V.offset - X.offset), | |
W = new RegExp(d, `${d.flags}d`).exec(I); | |
if (!W || !W.indices) return; | |
let [, ...w] = W.indices; | |
if (w.length !== Z.length) return; | |
let B = I, | |
A = 0; | |
return w.forEach((V, X) => { | |
if (V) { | |
let [_, F] = V, g = B.substring(0, _ - A), J = `:${Z[X].name}`, K = B.substring(F - A); | |
B = g + J + K, A = A + (F - _ - J.length) | |
} | |
}), B | |
}; | |
function yi2(I) { | |
let d = Xw([I, "access", (w) => w.route, "optionalAccess", (w) => w.path]), | |
G = iI.isRegExp(d), | |
Z = Array.isArray(d); | |
if (!d) { | |
let [w] = iI.GLOBAL_OBJ.process.versions.node.split(".").map(Number); | |
if (w >= 16) d = Yv1(I.path, I.regexp, I.keys) | |
} | |
if (!d) return { | |
isRegex: G, | |
isArray: Z, | |
numExtraSegments: 0 | |
}; | |
let C = Z ? Math.max(Pi2(d) - iI.getNumberOfUrlSegments(I.path || ""), 0) : 0; | |
return { | |
layerRoutePath: $i2(Z, d), | |
isRegex: G, | |
isArray: Z, | |
numExtraSegments: C | |
} | |
} | |
function Pi2(I) { | |
return I.reduce((d, G) => { | |
return d + iI.getNumberOfUrlSegments(G.toString()) | |
}, 0) | |
} | |
function $i2(I, d) { | |
if (I) return d.map((G) => G.toString()).join(","); | |
return d && d.toString() | |
} | |
function _v1(I, d, G) { | |
let Z = iI.stripUrlQueryAndFragment(I || ""), | |
C = Xw([Z, "optionalAccess", (A) => A.split, "call", (A) => A("/"), "access", (A) => A.filter, "call", (A) => A((V) => !!V)]), | |
W = 0, | |
w = Xw([d, "optionalAccess", (A) => A.split, "call", (A) => A("/"), "access", (A) => A.filter, "call", (A) => A((V) => !!V), "access", (A) => A.length]) || 0; | |
return Xw([G, "optionalAccess", (A) => A.split, "call", (A) => A("/"), "access", (A) => A.filter, "call", (A) => A((V) => { | |
if (Xw([C, "optionalAccess", (X) => X[w + W]]) === V) return W += 1, !0; | |
return !1 | |
}), "access", (A) => A.join, "call", (A) => A("/")]) | |
} | |
Dv1.Express = Am; | |
Dv1.extractOriginalRoute = Yv1; | |
Dv1.preventDuplicateSegments = _v1 | |
}); | |
var gv1 = Y((Fv1) => { | |
var { | |
_optionalChain: zN | |
} = V0(); | |
Object.defineProperty(Fv1, "__esModule", { | |
value: !0 | |
}); | |
var QN = V0(), | |
a11 = pI(), | |
mi2 = iX(); | |
class Vm { | |
static __initStatic() { | |
this.id = "Postgres" | |
} | |
constructor(I = {}) { | |
this.name = Vm.id, this._usePgNative = !!I.usePgNative, this._module = I.module | |
} | |
loadDependency() { | |
return this._module = this._module || QN.loadModule("pg") | |
} | |
setupOnce(I, d) { | |
if (mi2.shouldDisableAutoInstrumentation(d)) { | |
a11.DEBUG_BUILD && QN.logger.log("Postgres Integration is skipped because of instrumenter configuration."); | |
return | |
} | |
let G = this.loadDependency(); | |
if (!G) { | |
a11.DEBUG_BUILD && QN.logger.error("Postgres Integration was unable to require `pg` package."); | |
return | |
} | |
let Z = this._usePgNative ? zN([G, "access", (C) => C.native, "optionalAccess", (C) => C.Client]) : G.Client; | |
if (!Z) { | |
a11.DEBUG_BUILD && QN.logger.error("Postgres Integration was unable to access 'pg-native' bindings."); | |
return | |
} | |
QN.fill(Z.prototype, "query", function(C) { | |
return function(W, w, B) { | |
let V = d().getScope().getSpan(), | |
X = { | |
"db.system": "postgresql" | |
}; | |
try { | |
if (this.database) X["db.name"] = this.database; | |
if (this.host) X["server.address"] = this.host; | |
if (this.port) X["server.port"] = this.port; | |
if (this.user) X["db.user"] = this.user | |
} catch (g) {} | |
let _ = zN([V, "optionalAccess", (g) => g.startChild, "call", (g) => g({ | |
description: typeof W === "string" ? W : W.text, | |
op: "db", | |
origin: "auto.db.postgres", | |
data: X | |
})]); | |
if (typeof B === "function") return C.call(this, W, w, function(g, J) { | |
zN([_, "optionalAccess", (K) => K.end, "call", (K) => K()]), B(g, J) | |
}); | |
if (typeof w === "function") return C.call(this, W, function(g, J) { | |
zN([_, "optionalAccess", (K) => K.end, "call", (K) => K()]), w(g, J) | |
}); | |
let F = typeof w !== "undefined" ? C.call(this, W, w) : C.call(this, W); | |
if (QN.isThenable(F)) return F.then((g) => { | |
return zN([_, "optionalAccess", (J) => J.end, "call", (J) => J()]), g | |
}); | |
return zN([_, "optionalAccess", (g) => g.end, "call", (g) => g()]), F | |
} | |
}) | |
} | |
} | |
Vm.__initStatic(); | |
Fv1.Postgres = Vm | |
}); | |
var Kv1 = Y((Jv1) => { | |
var { | |
_optionalChain: bi2 | |
} = V0(); | |
Object.defineProperty(Jv1, "__esModule", { | |
value: !0 | |
}); | |
var nv = V0(), | |
s11 = pI(), | |
hi2 = iX(); | |
class Xm { | |
static __initStatic() { | |
this.id = "Mysql" | |
} | |
constructor() { | |
this.name = Xm.id | |
} | |
loadDependency() { | |
return this._module = this._module || nv.loadModule("mysql/lib/Connection.js") | |
} | |
setupOnce(I, d) { | |
if (hi2.shouldDisableAutoInstrumentation(d)) { | |
s11.DEBUG_BUILD && nv.logger.log("Mysql Integration is skipped because of instrumenter configuration."); | |
return | |
} | |
let G = this.loadDependency(); | |
if (!G) { | |
s11.DEBUG_BUILD && nv.logger.error("Mysql Integration was unable to require `mysql` package."); | |
return | |
} | |
let Z = void 0; | |
try { | |
G.prototype.connect = new Proxy(G.prototype.connect, { | |
apply(w, B, A) { | |
if (!Z) Z = B.config; | |
return w.apply(B, A) | |
} | |
}) | |
} catch (w) { | |
s11.DEBUG_BUILD && nv.logger.error("Mysql Integration was unable to instrument `mysql` config.") | |
} | |
function C() { | |
if (!Z) return {}; | |
return { | |
"server.address": Z.host, | |
"server.port": Z.port, | |
"db.user": Z.user | |
} | |
} | |
function W(w) { | |
if (!w) return; | |
let B = C(); | |
Object.keys(B).forEach((A) => { | |
w.setAttribute(A, B[A]) | |
}), w.end() | |
} | |
nv.fill(G, "createQuery", function(w) { | |
return function(B, A, V) { | |
let _ = d().getScope().getSpan(), | |
F = bi2([_, "optionalAccess", (J) => J.startChild, "call", (J) => J({ | |
description: typeof B === "string" ? B : B.sql, | |
op: "db", | |
origin: "auto.db.mysql", | |
data: { | |
"db.system": "mysql" | |
} | |
})]); | |
if (typeof V === "function") return w.call(this, B, A, function(J, K, Q) { | |
W(F), V(J, K, Q) | |
}); | |
if (typeof A === "function") return w.call(this, B, function(J, K, Q) { | |
W(F), A(J, K, Q) | |
}); | |
let g = w.call(this, B, A); | |
return g.on("end", () => { | |
W(F) | |
}), g | |
} | |
}) | |
} | |
} | |
Xm.__initStatic(); | |
Jv1.Mysql = Xm | |
}); | |
var Qv1 = Y((zv1) => { | |
var { | |
_optionalChain: nX | |
} = V0(); | |
Object.defineProperty(zv1, "__esModule", { | |
value: !0 | |
}); | |
var rv = V0(), | |
Nv1 = pI(), | |
ki2 = iX(), | |
xi2 = ["aggregate", "bulkWrite", "countDocuments", "createIndex", "createIndexes", "deleteMany", "deleteOne", "distinct", "drop", "dropIndex", "dropIndexes", "estimatedDocumentCount", "find", "findOne", "findOneAndDelete", "findOneAndReplace", "findOneAndUpdate", "indexes", "indexExists", "indexInformation", "initializeOrderedBulkOp", "insertMany", "insertOne", "isCapped", "mapReduce", "options", "parallelCollectionScan", "rename", "replaceOne", "stats", "updateMany", "updateOne"], | |
ci2 = { | |
bulkWrite: ["operations"], | |
countDocuments: ["query"], | |
createIndex: ["fieldOrSpec"], | |
createIndexes: ["indexSpecs"], | |
deleteMany: ["filter"], | |
deleteOne: ["filter"], | |
distinct: ["key", "query"], | |
dropIndex: ["indexName"], | |
find: ["query"], | |
findOne: ["query"], | |
findOneAndDelete: ["filter"], | |
findOneAndReplace: ["filter", "replacement"], | |
findOneAndUpdate: ["filter", "update"], | |
indexExists: ["indexes"], | |
insertMany: ["docs"], | |
insertOne: ["doc"], | |
mapReduce: ["map", "reduce"], | |
rename: ["newName"], | |
replaceOne: ["filter", "doc"], | |
updateMany: ["filter", "update"], | |
updateOne: ["filter", "update"] | |
}; | |
function pi2(I) { | |
return I && typeof I === "object" && I.once && typeof I.once === "function" | |
} | |
class Ym { | |
static __initStatic() { | |
this.id = "Mongo" | |
} | |
constructor(I = {}) { | |
this.name = Ym.id, this._operations = Array.isArray(I.operations) ? I.operations : xi2, this._describeOperations = "describeOperations" in I ? I.describeOperations : !0, this._useMongoose = !!I.useMongoose | |
} | |
loadDependency() { | |
let I = this._useMongoose ? "mongoose" : "mongodb"; | |
return this._module = this._module || rv.loadModule(I) | |
} | |
setupOnce(I, d) { | |
if (ki2.shouldDisableAutoInstrumentation(d)) { | |
Nv1.DEBUG_BUILD && rv.logger.log("Mongo Integration is skipped because of instrumenter configuration."); | |
return | |
} | |
let G = this.loadDependency(); | |
if (!G) { | |
let Z = this._useMongoose ? "mongoose" : "mongodb"; | |
Nv1.DEBUG_BUILD && rv.logger.error(`Mongo Integration was unable to require \`${Z}\` package.`); | |
return | |
} | |
this._instrumentOperations(G.Collection, this._operations, d) | |
} | |
_instrumentOperations(I, d, G) { | |
d.forEach((Z) => this._patchOperation(I, Z, G)) | |
} | |
_patchOperation(I, d, G) { | |
if (!(d in I.prototype)) return; | |
let Z = this._getSpanContextFromOperationArguments.bind(this); | |
rv.fill(I.prototype, d, function(C) { | |
return function(...W) { | |
let w = W[W.length - 1], | |
B = G(), | |
A = B.getScope(), | |
V = B.getClient(), | |
X = A.getSpan(), | |
_ = nX([V, "optionalAccess", (g) => g.getOptions, "call", (g) => g(), "access", (g) => g.sendDefaultPii]); | |
if (typeof w !== "function" || d === "mapReduce" && W.length === 2) { | |
let g = nX([X, "optionalAccess", (K) => K.startChild, "call", (K) => K(Z(this, d, W, _))]), | |
J = C.call(this, ...W); | |
if (rv.isThenable(J)) return J.then((K) => { | |
return nX([g, "optionalAccess", (Q) => Q.end, "call", (Q) => Q()]), K | |
}); | |
else if (pi2(J)) { | |
let K = J; | |
try { | |
K.once("close", () => { | |
nX([g, "optionalAccess", (Q) => Q.end, "call", (Q) => Q()]) | |
}) | |
} catch (Q) { | |
nX([g, "optionalAccess", (E) => E.end, "call", (E) => E()]) | |
} | |
return K | |
} else return nX([g, "optionalAccess", (K) => K.end, "call", (K) => K()]), J | |
} | |
let F = nX([X, "optionalAccess", (g) => g.startChild, "call", (g) => g(Z(this, d, W.slice(0, -1)))]); | |
return C.call(this, ...W.slice(0, -1), function(g, J) { | |
nX([F, "optionalAccess", (K) => K.end, "call", (K) => K()]), w(g, J) | |
}) | |
} | |
}) | |
} | |
_getSpanContextFromOperationArguments(I, d, G, Z = !1) { | |
let C = { | |
"db.system": "mongodb", | |
"db.name": I.dbName, | |
"db.operation": d, | |
"db.mongodb.collection": I.collectionName | |
}, | |
W = { | |
op: "db", | |
origin: "auto.db.mongo", | |
description: d, | |
data: C | |
}, | |
w = ci2[d], | |
B = Array.isArray(this._describeOperations) ? this._describeOperations.includes(d) : this._describeOperations; | |
if (!w || !B || !Z) return W; | |
try { | |
if (d === "mapReduce") { | |
let [A, V] = G; | |
C[w[0]] = typeof A === "string" ? A : A.name || "<anonymous>", C[w[1]] = typeof V === "string" ? V : V.name || "<anonymous>" | |
} else | |
for (let A = 0; A < w.length; A++) C[`db.mongodb.${w[A]}`] = JSON.stringify(G[A]) | |
} catch (A) {} | |
return W | |
} | |
} | |
Ym.__initStatic(); | |
zv1.Mongo = Ym | |
}); | |
var Rv1 = Y((qv1) => { | |
Object.defineProperty(qv1, "__esModule", { | |
value: !0 | |
}); | |
var o11 = V4(), | |
fv1 = V0(), | |
ni2 = pI(), | |
ri2 = iX(); | |
function ai2(I) { | |
return !!I && !!I.$use | |
} | |
class _m { | |
static __initStatic() { | |
this.id = "Prisma" | |
} | |
constructor(I = {}) { | |
if (this.name = _m.id, ai2(I.client) && !I.client._sentryInstrumented) { | |
fv1.addNonEnumerableProperty(I.client, "_sentryInstrumented", !0); | |
let d = {}; | |
try { | |
let G = I.client._engineConfig; | |
if (G) { | |
let { | |
activeProvider: Z, | |
clientVersion: C | |
} = G; | |
if (Z) d["db.system"] = Z; | |
if (C) d["db.prisma.version"] = C | |
} | |
} catch (G) {} | |
I.client.$use((G, Z) => { | |
if (ri2.shouldDisableAutoInstrumentation(o11.getCurrentHub)) return Z(G); | |
let { | |
action: C, | |
model: W | |
} = G; | |
return o11.startSpan({ | |
name: W ? `${W} ${C}` : C, | |
onlyIfParent: !0, | |
op: "db.prisma", | |
attributes: { | |
[o11.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.db.prisma" | |
}, | |
data: { | |
...d, | |
"db.operation": C | |
} | |
}, () => Z(G)) | |
}) | |
} else ni2.DEBUG_BUILD && fv1.logger.warn("Unsupported Prisma client provided to PrismaIntegration. Provided client:", I.client) | |
} | |
setupOnce() {} | |
} | |
_m.__initStatic(); | |
qv1.Prisma = _m | |
}); | |
var Ev1 = Y((vv1) => { | |
var { | |
_optionalChain: fN | |
} = V0(); | |
Object.defineProperty(vv1, "__esModule", { | |
value: !0 | |
}); | |
var av = V0(), | |
Uv1 = pI(), | |
oi2 = iX(); | |
class Dm { | |
static __initStatic() { | |
this.id = "GraphQL" | |
} | |
constructor() { | |
this.name = Dm.id | |
} | |
loadDependency() { | |
return this._module = this._module || av.loadModule("graphql/execution/execute.js") | |
} | |
setupOnce(I, d) { | |
if (oi2.shouldDisableAutoInstrumentation(d)) { | |
Uv1.DEBUG_BUILD && av.logger.log("GraphQL Integration is skipped because of instrumenter configuration."); | |
return | |
} | |
let G = this.loadDependency(); | |
if (!G) { | |
Uv1.DEBUG_BUILD && av.logger.error("GraphQL Integration was unable to require graphql/execution package."); | |
return | |
} | |
av.fill(G, "execute", function(Z) { | |
return function(...C) { | |
let W = d().getScope(), | |
w = W.getSpan(), | |
B = fN([w, "optionalAccess", (V) => V.startChild, "call", (V) => V({ | |
description: "execute", | |
op: "graphql.execute", | |
origin: "auto.graphql.graphql" | |
})]); | |
fN([W, "optionalAccess", (V) => V.setSpan, "call", (V) => V(B)]); | |
let A = Z.call(this, ...C); | |
if (av.isThenable(A)) return A.then((V) => { | |
return fN([B, "optionalAccess", (X) => X.end, "call", (X) => X()]), fN([W, "optionalAccess", (X) => X.setSpan, "call", (X) => X(w)]), V | |
}); | |
return fN([B, "optionalAccess", (V) => V.end, "call", (V) => V()]), fN([W, "optionalAccess", (V) => V.setSpan, "call", (V) => V(w)]), A | |
} | |
}) | |
} | |
} | |
Dm.__initStatic(); | |
vv1.GraphQL = Dm | |
}); | |
var Lv1 = Y((Sv1) => { | |
var { | |
_optionalChain: e11 | |
} = V0(); | |
Object.defineProperty(Sv1, "__esModule", { | |
value: !0 | |
}); | |
var Q7 = V0(), | |
Hm = pI(), | |
ti2 = iX(); | |
class Fm { | |
static __initStatic() { | |
this.id = "Apollo" | |
} | |
constructor(I = { | |
useNestjs: !1 | |
}) { | |
this.name = Fm.id, this._useNest = !!I.useNestjs | |
} | |
loadDependency() { | |
if (this._useNest) this._module = this._module || Q7.loadModule("@nestjs/graphql"); | |
else this._module = this._module || Q7.loadModule("apollo-server-core"); | |
return this._module | |
} | |
setupOnce(I, d) { | |
if (ti2.shouldDisableAutoInstrumentation(d)) { | |
Hm.DEBUG_BUILD && Q7.logger.log("Apollo Integration is skipped because of instrumenter configuration."); | |
return | |
} | |
if (this._useNest) { | |
let G = this.loadDependency(); | |
if (!G) { | |
Hm.DEBUG_BUILD && Q7.logger.error("Apollo-NestJS Integration was unable to require @nestjs/graphql package."); | |
return | |
} | |
Q7.fill(G.GraphQLFactory.prototype, "mergeWithSchema", function(Z) { | |
return function(...C) { | |
return Q7.fill(this.resolversExplorerService, "explore", function(W) { | |
return function() { | |
let w = Q7.arrayify(W.call(this)); | |
return Mv1(w, d) | |
} | |
}), Z.call(this, ...C) | |
} | |
}) | |
} else { | |
let G = this.loadDependency(); | |
if (!G) { | |
Hm.DEBUG_BUILD && Q7.logger.error("Apollo Integration was unable to require apollo-server-core package."); | |
return | |
} | |
Q7.fill(G.ApolloServerBase.prototype, "constructSchema", function(Z) { | |
return function() { | |
if (!this.config.resolvers) { | |
if (Hm.DEBUG_BUILD) { | |
if (this.config.schema) Q7.logger.warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `schema` property.If you are using NestJS with Apollo, please use `Sentry.Integrations.Apollo({ useNestjs: true })` instead."), Q7.logger.warn(); | |
else if (this.config.modules) Q7.logger.warn("Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property."); | |
Q7.logger.error("Skipping tracing as no resolvers found on the `ApolloServer` instance.") | |
} | |
return Z.call(this) | |
} | |
let C = Q7.arrayify(this.config.resolvers); | |
return this.config.resolvers = Mv1(C, d), Z.call(this) | |
} | |
}) | |
} | |
} | |
} | |
Fm.__initStatic(); | |
function Mv1(I, d) { | |
return I.map((G) => { | |
return Object.keys(G).forEach((Z) => { | |
Object.keys(G[Z]).forEach((C) => { | |
if (typeof G[Z][C] !== "function") return; | |
In2(G, Z, C, d) | |
}) | |
}), G | |
}) | |
} | |
function In2(I, d, G, Z) { | |
Q7.fill(I[d], G, function(C) { | |
return function(...W) { | |
let B = Z().getScope().getSpan(), | |
A = e11([B, "optionalAccess", (X) => X.startChild, "call", (X) => X({ | |
description: `${d}.${G}`, | |
op: "graphql.resolve", | |
origin: "auto.graphql.apollo" | |
})]), | |
V = C.call(this, ...W); | |
if (Q7.isThenable(V)) return V.then((X) => { | |
return e11([A, "optionalAccess", (_) => _.end, "call", (_) => _()]), X | |
}); | |
return e11([A, "optionalAccess", (X) => X.end, "call", (X) => X()]), V | |
} | |
}) | |
} | |
Sv1.Apollo = Fm | |
}); | |
var Pv1 = Y((yv1, rX) => { | |
Object.defineProperty(yv1, "__esModule", { | |
value: !0 | |
}); | |
var zF = V0(), | |
Gn2 = [() => { | |
return new(zF.dynamicRequire(rX, "./apollo")).Apollo | |
}, () => { | |
return new(zF.dynamicRequire(rX, "./apollo")).Apollo({ | |
useNestjs: !0 | |
}) | |
}, () => { | |
return new(zF.dynamicRequire(rX, "./graphql")).GraphQL | |
}, () => { | |
return new(zF.dynamicRequire(rX, "./mongo")).Mongo | |
}, () => { | |
return new(zF.dynamicRequire(rX, "./mongo")).Mongo({ | |
mongoose: !0 | |
}) | |
}, () => { | |
return new(zF.dynamicRequire(rX, "./mysql")).Mysql | |
}, () => { | |
return new(zF.dynamicRequire(rX, "./postgres")).Postgres | |
}]; | |
yv1.lazyLoadedNodePerformanceMonitoringIntegrations = Gn2 | |
}); | |
var kd = Y(($v1) => { | |
Object.defineProperty($v1, "__esModule", { | |
value: !0 | |
}); | |
var Cn2 = V0(), | |
Wn2 = Cn2.GLOBAL_OBJ; | |
$v1.WINDOW = Wn2 | |
}); | |
var I01 = Y((mv1) => { | |
Object.defineProperty(mv1, "__esModule", { | |
value: !0 | |
}); | |
var uv1 = V4(), | |
Tv1 = V0(), | |
Ov1 = pI(), | |
t11 = kd(); | |
function Bn2() { | |
if (t11.WINDOW.document) t11.WINDOW.document.addEventListener("visibilitychange", () => { | |
let I = uv1.getActiveTransaction(); | |
if (t11.WINDOW.document.hidden && I) { | |
let { | |
op: G, | |
status: Z | |
} = uv1.spanToJSON(I); | |
if (Ov1.DEBUG_BUILD && Tv1.logger.log(`[Tracing] Transaction: cancelled -> since tab moved to the background, op: ${G}`), !Z) I.setStatus("cancelled"); | |
I.setTag("visibilitychange", "document.hidden"), I.end() | |
} | |
}); | |
else Ov1.DEBUG_BUILD && Tv1.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document") | |
} | |
mv1.registerBackgroundTabDetection = Bn2 | |
}); | |
var qN = Y((lv1) => { | |
Object.defineProperty(lv1, "__esModule", { | |
value: !0 | |
}); | |
var Vn2 = (I, d, G) => { | |
let Z, C; | |
return (W) => { | |
if (d.value >= 0) { | |
if (W || G) { | |
if (C = d.value - (Z || 0), C || Z === void 0) Z = d.value, d.delta = C, I(d) | |
} | |
} | |
} | |
}; | |
lv1.bindReporter = Vn2 | |
}); | |
var hv1 = Y((bv1) => { | |
Object.defineProperty(bv1, "__esModule", { | |
value: !0 | |
}); | |
var Yn2 = () => { | |
return `v3-${Date.now()}-${Math.floor(Math.random()*8999999999999)+1000000000000}` | |
}; | |
bv1.generateUniqueID = Yn2 | |
}); | |
var ov = Y((jv1) => { | |
Object.defineProperty(jv1, "__esModule", { | |
value: !0 | |
}); | |
var sv = kd(), | |
Dn2 = () => { | |
let I = sv.WINDOW.performance.timing, | |
d = sv.WINDOW.performance.navigation.type, | |
G = { | |
entryType: "navigation", | |
startTime: 0, | |
type: d == 2 ? "back_forward" : d === 1 ? "reload" : "navigate" | |
}; | |
for (let Z in I) | |
if (Z !== "navigationStart" && Z !== "toJSON") G[Z] = Math.max(I[Z] - I.navigationStart, 0); | |
return G | |
}, | |
Hn2 = () => { | |
if (sv.WINDOW.__WEB_VITALS_POLYFILL__) return sv.WINDOW.performance && (performance.getEntriesByType && performance.getEntriesByType("navigation")[0] || Dn2()); | |
else return sv.WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType("navigation")[0] | |
}; | |
jv1.getNavigationEntry = Hn2 | |
}); | |
var gm = Y((kv1) => { | |
Object.defineProperty(kv1, "__esModule", { | |
value: !0 | |
}); | |
var gn2 = ov(), | |
Jn2 = () => { | |
let I = gn2.getNavigationEntry(); | |
return I && I.activationStart || 0 | |
}; | |
kv1.getActivationStart = Jn2 | |
}); | |
var RN = Y((cv1) => { | |
Object.defineProperty(cv1, "__esModule", { | |
value: !0 | |
}); | |
var xv1 = kd(), | |
Nn2 = hv1(), | |
zn2 = gm(), | |
Qn2 = ov(), | |
fn2 = (I, d) => { | |
let G = Qn2.getNavigationEntry(), | |
Z = "navigate"; | |
if (G) | |
if (xv1.WINDOW.document && xv1.WINDOW.document.prerendering || zn2.getActivationStart() > 0) Z = "prerender"; | |
else Z = G.type.replace(/_/g, "-"); | |
return { | |
name: I, | |
value: typeof d === "undefined" ? -1 : d, | |
rating: "good", | |
delta: 0, | |
entries: [], | |
id: Nn2.generateUniqueID(), | |
navigationType: Z | |
} | |
}; | |
cv1.initMetric = fn2 | |
}); | |
var QF = Y((pv1) => { | |
Object.defineProperty(pv1, "__esModule", { | |
value: !0 | |
}); | |
var Rn2 = (I, d, G) => { | |
try { | |
if (PerformanceObserver.supportedEntryTypes.includes(I)) { | |
let Z = new PerformanceObserver((C) => { | |
d(C.getEntries()) | |
}); | |
return Z.observe(Object.assign({ | |
type: I, | |
buffered: !0 | |
}, G || {})), Z | |
} | |
} catch (Z) {} | |
return | |
}; | |
pv1.observe = Rn2 | |
}); | |
var UN = Y((nv1) => { | |
Object.defineProperty(nv1, "__esModule", { | |
value: !0 | |
}); | |
var iv1 = kd(), | |
vn2 = (I, d) => { | |
let G = (Z) => { | |
if (Z.type === "pagehide" || iv1.WINDOW.document.visibilityState === "hidden") { | |
if (I(Z), d) removeEventListener("visibilitychange", G, !0), removeEventListener("pagehide", G, !0) | |
} | |
}; | |
if (iv1.WINDOW.document) addEventListener("visibilitychange", G, !0), addEventListener("pagehide", G, !0) | |
}; | |
nv1.onHidden = vn2 | |
}); | |
var av1 = Y((rv1) => { | |
Object.defineProperty(rv1, "__esModule", { | |
value: !0 | |
}); | |
var Mn2 = qN(), | |
Sn2 = RN(), | |
Ln2 = QF(), | |
yn2 = UN(), | |
Pn2 = (I, d = {}) => { | |
let G = Sn2.initMetric("CLS", 0), | |
Z, C = 0, | |
W = [], | |
w = (A) => { | |
A.forEach((V) => { | |
if (!V.hadRecentInput) { | |
let X = W[0], | |
_ = W[W.length - 1]; | |
if (C && W.length !== 0 && V.startTime - _.startTime < 1000 && V.startTime - X.startTime < 5000) C += V.value, W.push(V); | |
else C = V.value, W = [V]; | |
if (C > G.value) { | |
if (G.value = C, G.entries = W, Z) Z() | |
} | |
} | |
}) | |
}, | |
B = Ln2.observe("layout-shift", w); | |
if (B) { | |
Z = Mn2.bindReporter(I, G, d.reportAllChanges); | |
let A = () => { | |
w(B.takeRecords()), Z(!0) | |
}; | |
return yn2.onHidden(A), A | |
} | |
return | |
}; | |
rv1.onCLS = Pn2 | |
}); | |
var Nm = Y((sv1) => { | |
Object.defineProperty(sv1, "__esModule", { | |
value: !0 | |
}); | |
var Jm = kd(), | |
un2 = UN(), | |
Km = -1, | |
Tn2 = () => { | |
if (Jm.WINDOW.document && Jm.WINDOW.document.visibilityState) Km = Jm.WINDOW.document.visibilityState === "hidden" && !Jm.WINDOW.document.prerendering ? 0 : 1 / 0 | |
}, | |
On2 = () => { | |
un2.onHidden(({ | |
timeStamp: I | |
}) => { | |
Km = I | |
}, !0) | |
}, | |
mn2 = () => { | |
if (Km < 0) Tn2(), On2(); | |
return { | |
get firstHiddenTime() { | |
return Km | |
} | |
} | |
}; | |
sv1.getVisibilityWatcher = mn2 | |
}); | |
var ev1 = Y((ov1) => { | |
Object.defineProperty(ov1, "__esModule", { | |
value: !0 | |
}); | |
var bn2 = qN(), | |
hn2 = Nm(), | |
jn2 = RN(), | |
kn2 = QF(), | |
xn2 = UN(), | |
cn2 = (I) => { | |
let d = hn2.getVisibilityWatcher(), | |
G = jn2.initMetric("FID"), | |
Z, C = (B) => { | |
if (B.startTime < d.firstHiddenTime) G.value = B.processingStart - B.startTime, G.entries.push(B), Z(!0) | |
}, | |
W = (B) => { | |
B.forEach(C) | |
}, | |
w = kn2.observe("first-input", W); | |
if (Z = bn2.bindReporter(I, G), w) xn2.onHidden(() => { | |
W(w.takeRecords()), w.disconnect() | |
}, !0) | |
}; | |
ov1.onFID = cn2 | |
}); | |
var dE1 = Y((IE1) => { | |
Object.defineProperty(IE1, "__esModule", { | |
value: !0 | |
}); | |
var in2 = QF(), | |
tv1 = 0, | |
d01 = 1 / 0, | |
zm = 0, | |
nn2 = (I) => { | |
I.forEach((d) => { | |
if (d.interactionId) d01 = Math.min(d01, d.interactionId), zm = Math.max(zm, d.interactionId), tv1 = zm ? (zm - d01) / 7 + 1 : 0 | |
}) | |
}, | |
G01, rn2 = () => { | |
return G01 ? tv1 : performance.interactionCount || 0 | |
}, | |
an2 = () => { | |
if ("interactionCount" in performance || G01) return; | |
G01 = in2.observe("event", nn2, { | |
type: "event", | |
buffered: !0, | |
durationThreshold: 0 | |
}) | |
}; | |
IE1.getInteractionCount = rn2; | |
IE1.initInteractionCountPolyfill = an2 | |
}); | |
var BE1 = Y((wE1) => { | |
Object.defineProperty(wE1, "__esModule", { | |
value: !0 | |
}); | |
var en2 = qN(), | |
tn2 = RN(), | |
Ir2 = QF(), | |
dr2 = UN(), | |
CE1 = dE1(), | |
WE1 = () => { | |
return CE1.getInteractionCount() | |
}, | |
GE1 = 10, | |
EA = [], | |
Z01 = {}, | |
ZE1 = (I) => { | |
let d = EA[EA.length - 1], | |
G = Z01[I.interactionId]; | |
if (G || EA.length < GE1 || I.duration > d.latency) { | |
if (G) G.entries.push(I), G.latency = Math.max(G.latency, I.duration); | |
else { | |
let Z = { | |
id: I.interactionId, | |
latency: I.duration, | |
entries: [I] | |
}; | |
Z01[Z.id] = Z, EA.push(Z) | |
} | |
EA.sort((Z, C) => C.latency - Z.latency), EA.splice(GE1).forEach((Z) => { | |
delete Z01[Z.id] | |
}) | |
} | |
}, | |
Gr2 = () => { | |
let I = Math.min(EA.length - 1, Math.floor(WE1() / 50)); | |
return EA[I] | |
}, | |
Zr2 = (I, d) => { | |
d = d || {}, CE1.initInteractionCountPolyfill(); | |
let G = tn2.initMetric("INP"), | |
Z, C = (w) => { | |
w.forEach((A) => { | |
if (A.interactionId) ZE1(A); | |
if (A.entryType === "first-input") { | |
if (!EA.some((X) => { | |
return X.entries.some((_) => { | |
return A.duration === _.duration && A.startTime === _.startTime | |
}) | |
})) ZE1(A) | |
} | |
}); | |
let B = Gr2(); | |
if (B && B.latency !== G.value) G.value = B.latency, G.entries = B.entries, Z() | |
}, | |
W = Ir2.observe("event", C, { | |
durationThreshold: d.durationThreshold || 40 | |
}); | |
if (Z = en2.bindReporter(I, G, d.reportAllChanges), W) W.observe({ | |
type: "first-input", | |
buffered: !0 | |
}), dr2.onHidden(() => { | |
if (C(W.takeRecords()), G.value < 0 && WE1() > 0) G.value = 0, G.entries = []; | |
Z(!0) | |
}) | |
}; | |
wE1.onINP = Zr2 | |
}); | |
var XE1 = Y((VE1) => { | |
Object.defineProperty(VE1, "__esModule", { | |
value: !0 | |
}); | |
var Wr2 = kd(), | |
wr2 = qN(), | |
Br2 = gm(), | |
Ar2 = Nm(), | |
Vr2 = RN(), | |
Xr2 = QF(), | |
Yr2 = UN(), | |
AE1 = {}, | |
_r2 = (I) => { | |
let d = Ar2.getVisibilityWatcher(), | |
G = Vr2.initMetric("LCP"), | |
Z, C = (w) => { | |
let B = w[w.length - 1]; | |
if (B) { | |
let A = Math.max(B.startTime - Br2.getActivationStart(), 0); | |
if (A < d.firstHiddenTime) G.value = A, G.entries = [B], Z() | |
} | |
}, | |
W = Xr2.observe("largest-contentful-paint", C); | |
if (W) { | |
Z = wr2.bindReporter(I, G); | |
let w = () => { | |
if (!AE1[G.id]) C(W.takeRecords()), W.disconnect(), AE1[G.id] = !0, Z(!0) | |
}; | |
return ["keydown", "click"].forEach((B) => { | |
if (Wr2.WINDOW.document) addEventListener(B, w, { | |
once: !0, | |
capture: !0 | |
}) | |
}), Yr2.onHidden(w, !0), w | |
} | |
return | |
}; | |
VE1.onLCP = _r2 | |
}); | |
var _E1 = Y((YE1) => { | |
Object.defineProperty(YE1, "__esModule", { | |
value: !0 | |
}); | |
var C01 = kd(), | |
Hr2 = qN(), | |
Fr2 = gm(), | |
gr2 = ov(), | |
Jr2 = RN(), | |
W01 = (I) => { | |
if (!C01.WINDOW.document) return; | |
if (C01.WINDOW.document.prerendering) addEventListener("prerenderingchange", () => W01(I), !0); | |
else if (C01.WINDOW.document.readyState !== "complete") addEventListener("load", () => W01(I), !0); | |
else setTimeout(I, 0) | |
}, | |
Kr2 = (I, d) => { | |
d = d || {}; | |
let G = Jr2.initMetric("TTFB"), | |
Z = Hr2.bindReporter(I, G, d.reportAllChanges); | |
W01(() => { | |
let C = gr2.getNavigationEntry(); | |
if (C) { | |
if (G.value = Math.max(C.responseStart - Fr2.getActivationStart(), 0), G.value < 0 || G.value > performance.now()) return; | |
G.entries = [C], Z(!0) | |
} | |
}) | |
}; | |
YE1.onTTFB = Kr2 | |
}); | |
var EN = Y((QE1) => { | |
Object.defineProperty(QE1, "__esModule", { | |
value: !0 | |
}); | |
var DE1 = V0(), | |
zr2 = pI(), | |
Qr2 = av1(), | |
fr2 = ev1(), | |
qr2 = BE1(), | |
Rr2 = XE1(), | |
Ur2 = QF(), | |
vr2 = _E1(), | |
ev = {}, | |
Qm = {}, | |
HE1, FE1, gE1, JE1, KE1; | |
function Er2(I, d = !1) { | |
return tv("cls", I, $r2, HE1, d) | |
} | |
function Mr2(I, d = !1) { | |
return tv("lcp", I, Tr2, gE1, d) | |
} | |
function Sr2(I) { | |
return tv("ttfb", I, Or2, JE1) | |
} | |
function Lr2(I) { | |
return tv("fid", I, ur2, FE1) | |
} | |
function yr2(I) { | |
return tv("inp", I, mr2, KE1) | |
} | |
function Pr2(I, d) { | |
if (NE1(I, d), !Qm[I]) lr2(I), Qm[I] = !0; | |
return zE1(I, d) | |
} | |
function vN(I, d) { | |
let G = ev[I]; | |
if (!G || !G.length) return; | |
for (let Z of G) try { | |
Z(d) | |
} catch (C) { | |
zr2.DEBUG_BUILD && DE1.logger.error(`Error while triggering instrumentation handler. | |
Type: ${I} | |
Name: ${DE1.getFunctionName(Z)} | |
Error:`, C) | |
} | |
} | |
function $r2() { | |
return Qr2.onCLS((I) => { | |
vN("cls", { | |
metric: I | |
}), HE1 = I | |
}, { | |
reportAllChanges: !0 | |
}) | |
} | |
function ur2() { | |
return fr2.onFID((I) => { | |
vN("fid", { | |
metric: I | |
}), FE1 = I | |
}) | |
} | |
function Tr2() { | |
return Rr2.onLCP((I) => { | |
vN("lcp", { | |
metric: I | |
}), gE1 = I | |
}) | |
} | |
function Or2() { | |
return vr2.onTTFB((I) => { | |
vN("ttfb", { | |
metric: I | |
}), JE1 = I | |
}) | |
} | |
function mr2() { | |
return qr2.onINP((I) => { | |
vN("inp", { | |
metric: I | |
}), KE1 = I | |
}) | |
} | |
function tv(I, d, G, Z, C = !1) { | |
NE1(I, d); | |
let W; | |
if (!Qm[I]) W = G(), Qm[I] = !0; | |
if (Z) d({ | |
metric: Z | |
}); | |
return zE1(I, d, C ? W : void 0) | |
} | |
function lr2(I) { | |
let d = {}; | |
if (I === "event") d.durationThreshold = 0; | |
Ur2.observe(I, (G) => { | |
vN(I, { | |
entries: G | |
}) | |
}, d) | |
} | |
function NE1(I, d) { | |
ev[I] = ev[I] || [], ev[I].push(d) | |
} | |
function zE1(I, d, G) { | |
return () => { | |
if (G) G(); | |
let Z = ev[I]; | |
if (!Z) return; | |
let C = Z.indexOf(d); | |
if (C !== -1) Z.splice(C, 1) | |
} | |
} | |
QE1.addClsInstrumentationHandler = Er2; | |
QE1.addFidInstrumentationHandler = Lr2; | |
QE1.addInpInstrumentationHandler = yr2; | |
QE1.addLcpInstrumentationHandler = Mr2; | |
QE1.addPerformanceInstrumentationHandler = Pr2; | |
QE1.addTtfbInstrumentationHandler = Sr2 | |
}); | |
var qE1 = Y((fE1) => { | |
Object.defineProperty(fE1, "__esModule", { | |
value: !0 | |
}); | |
function pr2(I) { | |
return typeof I === "number" && isFinite(I) | |
} | |
function ir2(I, { | |
startTimestamp: d, | |
...G | |
}) { | |
if (d && I.startTimestamp > d) I.startTimestamp = d; | |
return I.startChild({ | |
startTimestamp: d, | |
...G | |
}) | |
} | |
fE1._startChild = ir2; | |
fE1.isMeasurementValue = pr2 | |
}); | |
var A01 = Y((ME1) => { | |
Object.defineProperty(ME1, "__esModule", { | |
value: !0 | |
}); | |
var MA = V4(), | |
N9 = V0(), | |
xd = pI(), | |
fF = EN(), | |
SA = kd(), | |
ar2 = Nm(), | |
LA = qE1(), | |
sr2 = ov(), | |
or2 = 2147483647; | |
function x6(I) { | |
return I / 1000 | |
} | |
function B01() { | |
return SA.WINDOW && SA.WINDOW.addEventListener && SA.WINDOW.performance | |
} | |
var RE1 = 0, | |
T3 = {}, | |
Yw, IE; | |
function er2() { | |
let I = B01(); | |
if (I && N9.browserPerformanceTimeOrigin) { | |
if (I.mark) SA.WINDOW.performance.mark("sentry-tracing-init"); | |
let d = Ca2(), | |
G = Ga2(), | |
Z = Za2(), | |
C = Wa2(); | |
return () => { | |
d(), G(), Z(), C() | |
} | |
} | |
return () => { | |
return | |
} | |
} | |
function tr2() { | |
fF.addPerformanceInstrumentationHandler("longtask", ({ | |
entries: I | |
}) => { | |
for (let d of I) { | |
let G = MA.getActiveTransaction(); | |
if (!G) return; | |
let Z = x6(N9.browserPerformanceTimeOrigin + d.startTime), | |
C = x6(d.duration); | |
G.startChild({ | |
description: "Main UI thread blocked", | |
op: "ui.long-task", | |
origin: "auto.ui.browser.metrics", | |
startTimestamp: Z, | |
endTimestamp: Z + C | |
}) | |
} | |
}) | |
} | |
function Ia2() { | |
fF.addPerformanceInstrumentationHandler("event", ({ | |
entries: I | |
}) => { | |
for (let d of I) { | |
let G = MA.getActiveTransaction(); | |
if (!G) return; | |
if (d.name === "click") { | |
let Z = x6(N9.browserPerformanceTimeOrigin + d.startTime), | |
C = x6(d.duration), | |
W = { | |
description: N9.htmlTreeAsString(d.target), | |
op: `ui.interaction.${d.name}`, | |
origin: "auto.ui.browser.metrics", | |
startTimestamp: Z, | |
endTimestamp: Z + C | |
}, | |
w = N9.getComponentName(d.target); | |
if (w) W.attributes = { | |
"ui.component_name": w | |
}; | |
G.startChild(W) | |
} | |
} | |
}) | |
} | |
function da2(I, d) { | |
if (B01() && N9.browserPerformanceTimeOrigin) { | |
let Z = wa2(I, d); | |
return () => { | |
Z() | |
} | |
} | |
return () => { | |
return | |
} | |
} | |
function Ga2() { | |
return fF.addClsInstrumentationHandler(({ | |
metric: I | |
}) => { | |
let d = I.entries[I.entries.length - 1]; | |
if (!d) return; | |
xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding CLS"), T3.cls = { | |
value: I.value, | |
unit: "" | |
}, IE = d | |
}, !0) | |
} | |
function Za2() { | |
return fF.addLcpInstrumentationHandler(({ | |
metric: I | |
}) => { | |
let d = I.entries[I.entries.length - 1]; | |
if (!d) return; | |
xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding LCP"), T3.lcp = { | |
value: I.value, | |
unit: "millisecond" | |
}, Yw = d | |
}, !0) | |
} | |
function Ca2() { | |
return fF.addFidInstrumentationHandler(({ | |
metric: I | |
}) => { | |
let d = I.entries[I.entries.length - 1]; | |
if (!d) return; | |
let G = x6(N9.browserPerformanceTimeOrigin), | |
Z = x6(d.startTime); | |
xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding FID"), T3.fid = { | |
value: I.value, | |
unit: "millisecond" | |
}, T3["mark.fid"] = { | |
value: G + Z, | |
unit: "second" | |
} | |
}) | |
} | |
function Wa2() { | |
return fF.addTtfbInstrumentationHandler(({ | |
metric: I | |
}) => { | |
if (!I.entries[I.entries.length - 1]) return; | |
xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding TTFB"), T3.ttfb = { | |
value: I.value, | |
unit: "millisecond" | |
} | |
}) | |
} | |
var UE1 = { | |
click: "click", | |
pointerdown: "click", | |
pointerup: "click", | |
mousedown: "click", | |
mouseup: "click", | |
touchstart: "click", | |
touchend: "click", | |
mouseover: "hover", | |
mouseout: "hover", | |
mouseenter: "hover", | |
mouseleave: "hover", | |
pointerover: "hover", | |
pointerout: "hover", | |
pointerenter: "hover", | |
pointerleave: "hover", | |
dragstart: "drag", | |
dragend: "drag", | |
drag: "drag", | |
dragenter: "drag", | |
dragleave: "drag", | |
dragover: "drag", | |
drop: "drag", | |
keydown: "press", | |
keyup: "press", | |
keypress: "press", | |
input: "press" | |
}; | |
function wa2(I, d) { | |
return fF.addInpInstrumentationHandler(({ | |
metric: G | |
}) => { | |
if (G.value === void 0) return; | |
let Z = G.entries.find((P) => P.duration === G.value && UE1[P.name] !== void 0), | |
C = MA.getClient(); | |
if (!Z || !C) return; | |
let W = UE1[Z.name], | |
w = C.getOptions(), | |
B = x6(N9.browserPerformanceTimeOrigin + Z.startTime), | |
A = x6(G.value), | |
V = Z.interactionId !== void 0 ? I[Z.interactionId] : void 0; | |
if (V === void 0) return; | |
let { | |
routeName: X, | |
parentContext: _, | |
activeTransaction: F, | |
user: g, | |
replayId: J | |
} = V, K = g !== void 0 ? g.email || g.id || g.ip_address : void 0, Q = F !== void 0 ? F.getProfileId() : void 0, E = new MA.Span({ | |
startTimestamp: B, | |
endTimestamp: B + A, | |
op: `ui.interaction.${W}`, | |
name: N9.htmlTreeAsString(Z.target), | |
attributes: { | |
release: w.release, | |
environment: w.environment, | |
transaction: X, | |
...K !== void 0 && K !== "" ? { | |
user: K | |
} : {}, | |
...Q !== void 0 ? { | |
profile_id: Q | |
} : {}, | |
...J !== void 0 ? { | |
replay_id: J | |
} : {} | |
}, | |
exclusiveTime: G.value, | |
measurements: { | |
inp: { | |
value: G.value, | |
unit: "millisecond" | |
} | |
} | |
}), S = Da2(_, w, d); | |
if (!S) return; | |
if (Math.random() < S) { | |
let P = E ? MA.createSpanEnvelope([E], C.getDsn()) : void 0, | |
$ = C && C.getTransport(); | |
if ($ && P) $.send(P).then(null, (h) => { | |
xd.DEBUG_BUILD && N9.logger.error("Error while sending interaction:", h) | |
}); | |
return | |
} | |
}) | |
} | |
function Ba2(I) { | |
let d = B01(); | |
if (!d || !SA.WINDOW.performance.getEntries || !N9.browserPerformanceTimeOrigin) return; | |
xd.DEBUG_BUILD && N9.logger.log("[Tracing] Adding & adjusting spans using Performance API"); | |
let G = x6(N9.browserPerformanceTimeOrigin), | |
Z = d.getEntries(), | |
{ | |
op: C, | |
start_timestamp: W | |
} = MA.spanToJSON(I); | |
if (Z.slice(RE1).forEach((w) => { | |
let B = x6(w.startTime), | |
A = x6(w.duration); | |
if (I.op === "navigation" && W && G + B < W) return; | |
switch (w.entryType) { | |
case "navigation": { | |
Aa2(I, w, G); | |
break | |
} | |
case "mark": | |
case "paint": | |
case "measure": { | |
vE1(I, w, B, A, G); | |
let V = ar2.getVisibilityWatcher(), | |
X = w.startTime < V.firstHiddenTime; | |
if (w.name === "first-paint" && X) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding FP"), T3.fp = { | |
value: w.startTime, | |
unit: "millisecond" | |
}; | |
if (w.name === "first-contentful-paint" && X) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding FCP"), T3.fcp = { | |
value: w.startTime, | |
unit: "millisecond" | |
}; | |
break | |
} | |
case "resource": { | |
EE1(I, w, w.name, B, A, G); | |
break | |
} | |
} | |
}), RE1 = Math.max(Z.length - 1, 0), Xa2(I), C === "pageload") { | |
_a2(T3), ["fcp", "fp", "lcp"].forEach((B) => { | |
if (!T3[B] || !W || G >= W) return; | |
let A = T3[B].value, | |
V = G + x6(A), | |
X = Math.abs((V - W) * 1000), | |
_ = X - A; | |
xd.DEBUG_BUILD && N9.logger.log(`[Measurements] Normalized ${B} from ${A} to ${X} (${_})`), T3[B].value = X | |
}); | |
let w = T3["mark.fid"]; | |
if (w && T3.fid) LA._startChild(I, { | |
description: "first input delay", | |
endTimestamp: w.value + x6(T3.fid.value), | |
op: "ui.action", | |
origin: "auto.ui.browser.metrics", | |
startTimestamp: w.value | |
}), delete T3["mark.fid"]; | |
if (!("fcp" in T3)) delete T3.cls; | |
Object.keys(T3).forEach((B) => { | |
MA.setMeasurement(B, T3[B].value, T3[B].unit) | |
}), Ya2(I) | |
} | |
Yw = void 0, IE = void 0, T3 = {} | |
} | |
function vE1(I, d, G, Z, C) { | |
let W = C + G, | |
w = W + Z; | |
return LA._startChild(I, { | |
description: d.name, | |
endTimestamp: w, | |
op: d.entryType, | |
origin: "auto.resource.browser.metrics", | |
startTimestamp: W | |
}), W | |
} | |
function Aa2(I, d, G) { | |
["unloadEvent", "redirect", "domContentLoadedEvent", "loadEvent", "connect"].forEach((Z) => { | |
fm(I, d, Z, G) | |
}), fm(I, d, "secureConnection", G, "TLS/SSL", "connectEnd"), fm(I, d, "fetch", G, "cache", "domainLookupStart"), fm(I, d, "domainLookup", G, "DNS"), Va2(I, d, G) | |
} | |
function fm(I, d, G, Z, C, W) { | |
let w = W ? d[W] : d[`${G}End`], | |
B = d[`${G}Start`]; | |
if (!B || !w) return; | |
LA._startChild(I, { | |
op: "browser", | |
origin: "auto.browser.browser.metrics", | |
description: C || G, | |
startTimestamp: Z + x6(B), | |
endTimestamp: Z + x6(w) | |
}) | |
} | |
function Va2(I, d, G) { | |
if (d.responseEnd) LA._startChild(I, { | |
op: "browser", | |
origin: "auto.browser.browser.metrics", | |
description: "request", | |
startTimestamp: G + x6(d.requestStart), | |
endTimestamp: G + x6(d.responseEnd) | |
}), LA._startChild(I, { | |
op: "browser", | |
origin: "auto.browser.browser.metrics", | |
description: "response", | |
startTimestamp: G + x6(d.responseStart), | |
endTimestamp: G + x6(d.responseEnd) | |
}) | |
} | |
function EE1(I, d, G, Z, C, W) { | |
if (d.initiatorType === "xmlhttprequest" || d.initiatorType === "fetch") return; | |
let w = N9.parseUrl(G), | |
B = {}; | |
if (w01(B, d, "transferSize", "http.response_transfer_size"), w01(B, d, "encodedBodySize", "http.response_content_length"), w01(B, d, "decodedBodySize", "http.decoded_response_content_length"), "renderBlockingStatus" in d) B["resource.render_blocking_status"] = d.renderBlockingStatus; | |
if (w.protocol) B["url.scheme"] = w.protocol.split(":").pop(); | |
if (w.host) B["server.address"] = w.host; | |
B["url.same_origin"] = G.includes(SA.WINDOW.location.origin); | |
let A = W + Z, | |
V = A + C; | |
LA._startChild(I, { | |
description: G.replace(SA.WINDOW.location.origin, ""), | |
endTimestamp: V, | |
op: d.initiatorType ? `resource.${d.initiatorType}` : "resource.other", | |
origin: "auto.resource.browser.metrics", | |
startTimestamp: A, | |
data: B | |
}) | |
} | |
function Xa2(I) { | |
let d = SA.WINDOW.navigator; | |
if (!d) return; | |
let G = d.connection; | |
if (G) { | |
if (G.effectiveType) I.setTag("effectiveConnectionType", G.effectiveType); | |
if (G.type) I.setTag("connectionType", G.type); | |
if (LA.isMeasurementValue(G.rtt)) T3["connection.rtt"] = { | |
value: G.rtt, | |
unit: "millisecond" | |
} | |
} | |
if (LA.isMeasurementValue(d.deviceMemory)) I.setTag("deviceMemory", `${d.deviceMemory} GB`); | |
if (LA.isMeasurementValue(d.hardwareConcurrency)) I.setTag("hardwareConcurrency", String(d.hardwareConcurrency)) | |
} | |
function Ya2(I) { | |
if (Yw) { | |
if (xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding LCP Data"), Yw.element) I.setTag("lcp.element", N9.htmlTreeAsString(Yw.element)); | |
if (Yw.id) I.setTag("lcp.id", Yw.id); | |
if (Yw.url) I.setTag("lcp.url", Yw.url.trim().slice(0, 200)); | |
I.setTag("lcp.size", Yw.size) | |
} | |
if (IE && IE.sources) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding CLS Data"), IE.sources.forEach((d, G) => I.setTag(`cls.source.${G+1}`, N9.htmlTreeAsString(d.node))) | |
} | |
function w01(I, d, G, Z) { | |
let C = d[G]; | |
if (C != null && C < or2) I[Z] = C | |
} | |
function _a2(I) { | |
let d = sr2.getNavigationEntry(); | |
if (!d) return; | |
let { | |
responseStart: G, | |
requestStart: Z | |
} = d; | |
if (Z <= G) xd.DEBUG_BUILD && N9.logger.log("[Measurements] Adding TTFB Request Time"), I["ttfb.requestTime"] = { | |
value: G - Z, | |
unit: "millisecond" | |
} | |
} | |
function Da2(I, d, G) { | |
if (!MA.hasTracingEnabled(d)) return !1; | |
let Z; | |
if (I !== void 0 && typeof d.tracesSampler === "function") Z = d.tracesSampler({ | |
transactionContext: I, | |
name: I.name, | |
parentSampled: I.parentSampled, | |
attributes: { | |
...I.data, | |
...I.attributes | |
}, | |
location: SA.WINDOW.location | |
}); | |
else if (I !== void 0 && I.sampled !== void 0) Z = I.sampled; | |
else if (typeof d.tracesSampleRate !== "undefined") Z = d.tracesSampleRate; | |
else Z = 1; | |
if (!MA.isValidSampleRate(Z)) return xd.DEBUG_BUILD && N9.logger.warn("[Tracing] Discarding interaction span because of invalid sample rate."), !1; | |
if (Z === !0) return G; | |
else if (Z === !1) return 0; | |
return Z * G | |
} | |
ME1._addMeasureSpans = vE1; | |
ME1._addResourceSpans = EE1; | |
ME1.addPerformanceEntries = Ba2; | |
ME1.startTrackingINP = da2; | |
ME1.startTrackingInteractions = Ia2; | |
ME1.startTrackingLongTasks = tr2; | |
ME1.startTrackingWebVitals = er2 | |
}); | |
var V01 = Y((LE1) => { | |
Object.defineProperty(LE1, "__esModule", { | |
value: !0 | |
}); | |
var _w = V4(), | |
qF = V0(); | |
function Qa2(I, d, G, Z, C = "auto.http.browser") { | |
if (!_w.hasTracingEnabled() || !I.fetchData) return; | |
let W = d(I.fetchData.url); | |
if (I.endTimestamp && W) { | |
let g = I.fetchData.__span; | |
if (!g) return; | |
let J = Z[g]; | |
if (J) qa2(J, I), delete Z[g]; | |
return | |
} | |
let w = _w.getCurrentScope(), | |
B = _w.getClient(), | |
{ | |
method: A, | |
url: V | |
} = I.fetchData, | |
X = fa2(V), | |
_ = X ? qF.parseUrl(X).host : void 0, | |
F = W ? _w.startInactiveSpan({ | |
name: `${A} ${V}`, | |
onlyIfParent: !0, | |
attributes: { | |
url: V, | |
type: "fetch", | |
"http.method": A, | |
"http.url": X, | |
"server.address": _, | |
[_w.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: C | |
}, | |
op: "http.client" | |
}) : void 0; | |
if (F) I.fetchData.__span = F.spanContext().spanId, Z[F.spanContext().spanId] = F; | |
if (G(I.fetchData.url) && B) { | |
let g = I.args[0]; | |
I.args[1] = I.args[1] || {}; | |
let J = I.args[1]; | |
J.headers = SE1(g, B, w, J, F) | |
} | |
return F | |
} | |
function SE1(I, d, G, Z, C) { | |
let W = C || G.getSpan(), | |
w = _w.getIsolationScope(), | |
{ | |
traceId: B, | |
spanId: A, | |
sampled: V, | |
dsc: X | |
} = { | |
...w.getPropagationContext(), | |
...G.getPropagationContext() | |
}, | |
_ = W ? _w.spanToTraceHeader(W) : qF.generateSentryTraceHeader(B, A, V), | |
F = qF.dynamicSamplingContextToSentryBaggageHeader(X || (W ? _w.getDynamicSamplingContextFromSpan(W) : _w.getDynamicSamplingContextFromClient(B, d, G))), | |
g = Z.headers || (typeof Request !== "undefined" && qF.isInstanceOf(I, Request) ? I.headers : void 0); | |
if (!g) return { | |
"sentry-trace": _, | |
baggage: F | |
}; | |
else if (typeof Headers !== "undefined" && qF.isInstanceOf(g, Headers)) { | |
let J = new Headers(g); | |
if (J.append("sentry-trace", _), F) J.append(qF.BAGGAGE_HEADER_NAME, F); | |
return J | |
} else if (Array.isArray(g)) { | |
let J = [...g, ["sentry-trace", _]]; | |
if (F) J.push([qF.BAGGAGE_HEADER_NAME, F]); | |
return J | |
} else { | |
let J = "baggage" in g ? g.baggage : void 0, | |
K = []; | |
if (Array.isArray(J)) K.push(...J); | |
else if (J) K.push(J); | |
if (F) K.push(F); | |
return { | |
...g, | |
"sentry-trace": _, | |
baggage: K.length > 0 ? K.join(",") : void 0 | |
} | |
} | |
} | |
function fa2(I) { | |
try { | |
return new URL(I).href | |
} catch (d) { | |
return | |
} | |
} | |
function qa2(I, d) { | |
if (d.response) { | |
_w.setHttpStatus(I, d.response.status); | |
let G = d.response && d.response.headers && d.response.headers.get("content-length"); | |
if (G) { | |
let Z = parseInt(G); | |
if (Z > 0) I.setAttribute("http.response_content_length", Z) | |
} | |
} else if (d.error) I.setStatus("internal_error"); | |
I.end() | |
} | |
LE1.addTracingHeadersToFetchRequest = SE1; | |
LE1.instrumentFetchRequest = Qa2 | |
}); | |
var Rm = Y((OE1) => { | |
Object.defineProperty(OE1, "__esModule", { | |
value: !0 | |
}); | |
var HC = V4(), | |
FC = V0(), | |
va2 = V01(), | |
Ea2 = EN(), | |
Ma2 = kd(), | |
qm = ["localhost", /^\/(?!\/)/], | |
X01 = { | |
traceFetch: !0, | |
traceXHR: !0, | |
enableHTTPTimings: !0, | |
tracingOrigins: qm, | |
tracePropagationTargets: qm | |
}; | |
function Sa2(I) { | |
let { | |
traceFetch: d, | |
traceXHR: G, | |
tracePropagationTargets: Z, | |
tracingOrigins: C, | |
shouldCreateSpanForRequest: W, | |
enableHTTPTimings: w | |
} = { | |
traceFetch: X01.traceFetch, | |
traceXHR: X01.traceXHR, | |
...I | |
}, B = typeof W === "function" ? W : (X) => !0, A = (X) => $E1(X, Z || C), V = {}; | |
if (d) FC.addFetchInstrumentationHandler((X) => { | |
let _ = va2.instrumentFetchRequest(X, B, A, V); | |
if (_) { | |
let F = TE1(X.fetchData.url), | |
g = F ? FC.parseUrl(F).host : void 0; | |
_.setAttributes({ | |
"http.url": F, | |
"server.address": g | |
}) | |
} | |
if (w && _) yE1(_) | |
}); | |
if (G) FC.addXhrInstrumentationHandler((X) => { | |
let _ = uE1(X, B, A, V); | |
if (w && _) yE1(_) | |
}) | |
} | |
function La2(I) { | |
return I.entryType === "resource" && "initiatorType" in I && typeof I.nextHopProtocol === "string" && (I.initiatorType === "fetch" || I.initiatorType === "xmlhttprequest") | |
} | |
function yE1(I) { | |
let { | |
url: d | |
} = HC.spanToJSON(I).data || {}; | |
if (!d || typeof d !== "string") return; | |
let G = Ea2.addPerformanceInstrumentationHandler("resource", ({ | |
entries: Z | |
}) => { | |
Z.forEach((C) => { | |
if (La2(C) && C.name.endsWith(d)) ya2(C).forEach((w) => I.setAttribute(...w)), setTimeout(G) | |
}) | |
}) | |
} | |
function PE1(I) { | |
let d = "unknown", | |
G = "unknown", | |
Z = ""; | |
for (let C of I) { | |
if (C === "/") { | |
[d, G] = I.split("/"); | |
break | |
} | |
if (!isNaN(Number(C))) { | |
d = Z === "h" ? "http" : Z, G = I.split(Z)[1]; | |
break | |
} | |
Z += C | |
} | |
if (Z === I) d = Z; | |
return { | |
name: d, | |
version: G | |
} | |
} | |
function Dw(I = 0) { | |
return ((FC.browserPerformanceTimeOrigin || performance.timeOrigin) + I) / 1000 | |
} | |
function ya2(I) { | |
let { | |
name: d, | |
version: G | |
} = PE1(I.nextHopProtocol), Z = []; | |
if (Z.push(["network.protocol.version", G], ["network.protocol.name", d]), !FC.browserPerformanceTimeOrigin) return Z; | |
return [...Z, ["http.request.redirect_start", Dw(I.redirectStart)], | |
["http.request.fetch_start", Dw(I.fetchStart)], | |
["http.request.domain_lookup_start", Dw(I.domainLookupStart)], | |
["http.request.domain_lookup_end", Dw(I.domainLookupEnd)], | |
["http.request.connect_start", Dw(I.connectStart)], | |
["http.request.secure_connection_start", Dw(I.secureConnectionStart)], | |
["http.request.connection_end", Dw(I.connectEnd)], | |
["http.request.request_start", Dw(I.requestStart)], | |
["http.request.response_start", Dw(I.responseStart)], | |
["http.request.response_end", Dw(I.responseEnd)] | |
] | |
} | |
function $E1(I, d) { | |
return FC.stringMatchesSomePattern(I, d || qm) | |
} | |
function uE1(I, d, G, Z) { | |
let C = I.xhr, | |
W = C && C[FC.SENTRY_XHR_DATA_KEY]; | |
if (!HC.hasTracingEnabled() || !C || C.__sentry_own_request__ || !W) return; | |
let w = d(W.url); | |
if (I.endTimestamp && w) { | |
let g = C.__sentry_xhr_span_id__; | |
if (!g) return; | |
let J = Z[g]; | |
if (J && W.status_code !== void 0) HC.setHttpStatus(J, W.status_code), J.end(), delete Z[g]; | |
return | |
} | |
let B = HC.getCurrentScope(), | |
A = HC.getIsolationScope(), | |
V = TE1(W.url), | |
X = V ? FC.parseUrl(V).host : void 0, | |
_ = w ? HC.startInactiveSpan({ | |
name: `${W.method} ${W.url}`, | |
onlyIfParent: !0, | |
attributes: { | |
type: "xhr", | |
"http.method": W.method, | |
"http.url": V, | |
url: W.url, | |
"server.address": X, | |
[HC.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.browser" | |
}, | |
op: "http.client" | |
}) : void 0; | |
if (_) C.__sentry_xhr_span_id__ = _.spanContext().spanId, Z[C.__sentry_xhr_span_id__] = _; | |
let F = HC.getClient(); | |
if (C.setRequestHeader && G(W.url) && F) { | |
let { | |
traceId: g, | |
spanId: J, | |
sampled: K, | |
dsc: Q | |
} = { | |
...A.getPropagationContext(), | |
...B.getPropagationContext() | |
}, E = _ ? HC.spanToTraceHeader(_) : FC.generateSentryTraceHeader(g, J, K), S = FC.dynamicSamplingContextToSentryBaggageHeader(Q || (_ ? HC.getDynamicSamplingContextFromSpan(_) : HC.getDynamicSamplingContextFromClient(g, F, B))); | |
Pa2(C, E, S) | |
} | |
return _ | |
} | |
function Pa2(I, d, G) { | |
try { | |
if (I.setRequestHeader("sentry-trace", d), G) I.setRequestHeader(FC.BAGGAGE_HEADER_NAME, G) | |
} catch (Z) {} | |
} | |
function TE1(I) { | |
try { | |
return new URL(I, Ma2.WINDOW.location.origin).href | |
} catch (d) { | |
return | |
} | |
} | |
OE1.DEFAULT_TRACE_PROPAGATION_TARGETS = qm; | |
OE1.defaultRequestInstrumentationOptions = X01; | |
OE1.extractNetworkProtocol = PE1; | |
OE1.instrumentOutgoingRequests = Sa2; | |
OE1.shouldAttachHeaders = $E1; | |
OE1.xhrCallback = uE1 | |
}); | |
var bE1 = Y((lE1) => { | |
Object.defineProperty(lE1, "__esModule", { | |
value: !0 | |
}); | |
var dE = V0(), | |
mE1 = pI(), | |
GE = kd(); | |
function ba2(I, d = !0, G = !0) { | |
if (!GE.WINDOW || !GE.WINDOW.location) { | |
mE1.DEBUG_BUILD && dE.logger.warn("Could not initialize routing instrumentation due to invalid location"); | |
return | |
} | |
let Z = GE.WINDOW.location.href, | |
C; | |
if (d) C = I({ | |
name: GE.WINDOW.location.pathname, | |
startTimestamp: dE.browserPerformanceTimeOrigin ? dE.browserPerformanceTimeOrigin / 1000 : void 0, | |
op: "pageload", | |
origin: "auto.pageload.browser", | |
metadata: { | |
source: "url" | |
} | |
}); | |
if (G) dE.addHistoryInstrumentationHandler(({ | |
to: W, | |
from: w | |
}) => { | |
if (w === void 0 && Z && Z.indexOf(W) !== -1) { | |
Z = void 0; | |
return | |
} | |
if (w !== W) { | |
if (Z = void 0, C) mE1.DEBUG_BUILD && dE.logger.log(`[Tracing] Finishing current transaction with op: ${C.op}`), C.end(); | |
C = I({ | |
name: GE.WINDOW.location.pathname, | |
op: "navigation", | |
origin: "auto.navigation.browser", | |
metadata: { | |
source: "url" | |
} | |
}) | |
} | |
}) | |
} | |
lE1.instrumentRoutingWithDefaults = ba2 | |
}); | |
var iE1 = Y((pE1) => { | |
Object.defineProperty(pE1, "__esModule", { | |
value: !0 | |
}); | |
var gC = V4(), | |
yA = V0(), | |
aX = pI(), | |
ja2 = I01(), | |
hE1 = EN(), | |
ZE = A01(), | |
kE1 = Rm(), | |
ka2 = bE1(), | |
RF = kd(), | |
xE1 = "BrowserTracing", | |
xa2 = { | |
...gC.TRACING_DEFAULTS, | |
markBackgroundTransactions: !0, | |
routingInstrumentation: ka2.instrumentRoutingWithDefaults, | |
startTransactionOnLocationChange: !0, | |
startTransactionOnPageLoad: !0, | |
enableLongTask: !0, | |
enableInp: !1, | |
interactionsSampleRate: 1, | |
_experiments: {}, | |
...kE1.defaultRequestInstrumentationOptions | |
}, | |
jE1 = 10; | |
class cE1 { | |
constructor(I) { | |
if (this.name = xE1, this._hasSetTracePropagationTargets = !1, gC.addTracingExtensions(), aX.DEBUG_BUILD) this._hasSetTracePropagationTargets = !!(I && (I.tracePropagationTargets || I.tracingOrigins)); | |
if (this.options = { | |
...xa2, | |
...I | |
}, this.options._experiments.enableLongTask !== void 0) this.options.enableLongTask = this.options._experiments.enableLongTask; | |
if (I && !I.tracePropagationTargets && I.tracingOrigins) this.options.tracePropagationTargets = I.tracingOrigins; | |
if (this._collectWebVitals = ZE.startTrackingWebVitals(), this._interactionIdToRouteNameMapping = {}, this.options.enableInp) ZE.startTrackingINP(this._interactionIdToRouteNameMapping, this.options.interactionsSampleRate); | |
if (this.options.enableLongTask) ZE.startTrackingLongTasks(); | |
if (this.options._experiments.enableInteractions) ZE.startTrackingInteractions(); | |
this._latestRoute = { | |
name: void 0, | |
context: void 0 | |
} | |
} | |
setupOnce(I, d) { | |
this._getCurrentHub = d; | |
let Z = d().getClient(), | |
C = Z && Z.getOptions(), | |
{ | |
routingInstrumentation: W, | |
startTransactionOnLocationChange: w, | |
startTransactionOnPageLoad: B, | |
markBackgroundTransactions: A, | |
traceFetch: V, | |
traceXHR: X, | |
shouldCreateSpanForRequest: _, | |
enableHTTPTimings: F, | |
_experiments: g | |
} = this.options, | |
J = C && C.tracePropagationTargets, | |
K = J || this.options.tracePropagationTargets; | |
if (aX.DEBUG_BUILD && this._hasSetTracePropagationTargets && J) yA.logger.warn("[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used."); | |
if (W((Q) => { | |
let E = this._createRouteTransaction(Q); | |
return this.options._experiments.onStartRouteTransaction && this.options._experiments.onStartRouteTransaction(E, Q, d), E | |
}, B, w), A) ja2.registerBackgroundTabDetection(); | |
if (g.enableInteractions) this._registerInteractionListener(); | |
if (this.options.enableInp) this._registerInpInteractionListener(); | |
kE1.instrumentOutgoingRequests({ | |
traceFetch: V, | |
traceXHR: X, | |
tracePropagationTargets: K, | |
shouldCreateSpanForRequest: _, | |
enableHTTPTimings: F | |
}) | |
} | |
_createRouteTransaction(I) { | |
if (!this._getCurrentHub) { | |
aX.DEBUG_BUILD && yA.logger.warn(`[Tracing] Did not create ${I.op} transaction because _getCurrentHub is invalid.`); | |
return | |
} | |
let d = this._getCurrentHub(), | |
{ | |
beforeNavigate: G, | |
idleTimeout: Z, | |
finalTimeout: C, | |
heartbeatInterval: W | |
} = this.options, | |
w = I.op === "pageload", | |
B; | |
if (w) { | |
let F = w ? Y01("sentry-trace") : "", | |
g = w ? Y01("baggage") : void 0, | |
{ | |
traceId: J, | |
dsc: K, | |
parentSpanId: Q, | |
sampled: E | |
} = yA.propagationContextFromHeaders(F, g); | |
B = { | |
traceId: J, | |
parentSpanId: Q, | |
parentSampled: E, | |
...I, | |
metadata: { | |
...I.metadata, | |
dynamicSamplingContext: K | |
}, | |
trimEnd: !0 | |
} | |
} else B = { | |
trimEnd: !0, | |
...I | |
}; | |
let A = typeof G === "function" ? G(B) : B, | |
V = A === void 0 ? { | |
...B, | |
sampled: !1 | |
} : A; | |
if (V.metadata = V.name !== B.name ? { | |
...V.metadata, | |
source: "custom" | |
} : V.metadata, this._latestRoute.name = V.name, this._latestRoute.context = V, V.sampled === !1) aX.DEBUG_BUILD && yA.logger.log(`[Tracing] Will not send ${V.op} transaction because of beforeNavigate.`); | |
aX.DEBUG_BUILD && yA.logger.log(`[Tracing] Starting ${V.op} transaction on scope`); | |
let { | |
location: X | |
} = RF.WINDOW, _ = gC.startIdleTransaction(d, V, Z, C, !0, { | |
location: X | |
}, W, w); | |
if (w) { | |
if (RF.WINDOW.document) { | |
if (RF.WINDOW.document.addEventListener("readystatechange", () => { | |
if (["interactive", "complete"].includes(RF.WINDOW.document.readyState)) _.sendAutoFinishSignal() | |
}), ["interactive", "complete"].includes(RF.WINDOW.document.readyState)) _.sendAutoFinishSignal() | |
} | |
} | |
return _.registerBeforeFinishCallback((F) => { | |
this._collectWebVitals(), ZE.addPerformanceEntries(F) | |
}), _ | |
} | |
_registerInteractionListener() { | |
let I, d = () => { | |
let { | |
idleTimeout: G, | |
finalTimeout: Z, | |
heartbeatInterval: C | |
} = this.options, W = "ui.action.click", w = gC.getActiveTransaction(); | |
if (w && w.op && ["navigation", "pageload"].includes(w.op)) { | |
aX.DEBUG_BUILD && yA.logger.warn("[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress."); | |
return | |
} | |
if (I) I.setFinishReason("interactionInterrupted"), I.end(), I = void 0; | |
if (!this._getCurrentHub) { | |
aX.DEBUG_BUILD && yA.logger.warn("[Tracing] Did not create ui.action.click transaction because _getCurrentHub is invalid."); | |
return | |
} | |
if (!this._latestRoute.name) { | |
aX.DEBUG_BUILD && yA.logger.warn("[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing."); | |
return | |
} | |
let B = this._getCurrentHub(), | |
{ | |
location: A | |
} = RF.WINDOW, | |
V = { | |
name: this._latestRoute.name, | |
op: "ui.action.click", | |
trimEnd: !0, | |
data: { | |
[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context ? ca2(this._latestRoute.context) : "url" | |
} | |
}; | |
I = gC.startIdleTransaction(B, V, G, Z, !0, { | |
location: A | |
}, C) | |
}; | |
["click"].forEach((G) => { | |
if (RF.WINDOW.document) addEventListener(G, d, { | |
once: !1, | |
capture: !0 | |
}) | |
}) | |
} | |
_registerInpInteractionListener() { | |
let I = ({ | |
entries: d | |
}) => { | |
let G = gC.getClient(), | |
Z = G !== void 0 && G.getIntegrationByName !== void 0 ? G.getIntegrationByName("Replay") : void 0, | |
C = Z !== void 0 ? Z.getReplayId() : void 0, | |
W = gC.getActiveTransaction(), | |
w = gC.getCurrentScope(), | |
B = w !== void 0 ? w.getUser() : void 0; | |
d.forEach((A) => { | |
if (pa2(A)) { | |
let V = A.interactionId; | |
if (V === void 0) return; | |
let X = this._interactionIdToRouteNameMapping[V], | |
_ = A.duration, | |
F = A.startTime, | |
g = Object.keys(this._interactionIdToRouteNameMapping), | |
J = g.length > 0 ? g.reduce((K, Q) => { | |
return this._interactionIdToRouteNameMapping[K].duration < this._interactionIdToRouteNameMapping[Q].duration ? K : Q | |
}) : void 0; | |
if (A.entryType === "first-input") { | |
if (g.map((Q) => this._interactionIdToRouteNameMapping[Q]).some((Q) => { | |
return Q.duration === _ && Q.startTime === F | |
})) return | |
} | |
if (!V) return; | |
if (X) X.duration = Math.max(X.duration, _); | |
else if (g.length < jE1 || J === void 0 || _ > this._interactionIdToRouteNameMapping[J].duration) { | |
let K = this._latestRoute.name, | |
Q = this._latestRoute.context; | |
if (K && Q) { | |
if (J && Object.keys(this._interactionIdToRouteNameMapping).length >= jE1) delete this._interactionIdToRouteNameMapping[J]; | |
this._interactionIdToRouteNameMapping[V] = { | |
routeName: K, | |
duration: _, | |
parentContext: Q, | |
user: B, | |
activeTransaction: W, | |
replayId: C, | |
startTime: F | |
} | |
} | |
} | |
} | |
}) | |
}; | |
hE1.addPerformanceInstrumentationHandler("event", I), hE1.addPerformanceInstrumentationHandler("first-input", I) | |
} | |
} | |
function Y01(I) { | |
let d = yA.getDomElement(`meta[name=${I}]`); | |
return d ? d.getAttribute("content") : void 0 | |
} | |
function ca2(I) { | |
let d = I.attributes && I.attributes[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
G = I.data && I.data[gC.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
Z = I.metadata && I.metadata.source; | |
return d || G || Z | |
} | |
function pa2(I) { | |
return "duration" in I | |
} | |
pE1.BROWSER_TRACING_INTEGRATION_ID = xE1; | |
pE1.BrowserTracing = cE1; | |
pE1.getMetaContent = Y01 | |
}); | |
var IM1 = Y((tE1) => { | |
Object.defineProperty(tE1, "__esModule", { | |
value: !0 | |
}); | |
var d6 = V4(), | |
nG = V0(), | |
sX = pI(), | |
aa2 = I01(), | |
nE1 = EN(), | |
CE = A01(), | |
aE1 = Rm(), | |
cd = kd(), | |
sE1 = "BrowserTracing", | |
sa2 = { | |
...d6.TRACING_DEFAULTS, | |
instrumentNavigation: !0, | |
instrumentPageLoad: !0, | |
markBackgroundSpan: !0, | |
enableLongTask: !0, | |
enableInp: !1, | |
interactionsSampleRate: 1, | |
_experiments: {}, | |
...aE1.defaultRequestInstrumentationOptions | |
}, | |
oa2 = (I = {}) => { | |
let d = sX.DEBUG_BUILD ? !!(I.tracePropagationTargets || I.tracingOrigins) : !1; | |
if (d6.addTracingExtensions(), !I.tracePropagationTargets && I.tracingOrigins) I.tracePropagationTargets = I.tracingOrigins; | |
let G = { | |
...sa2, | |
...I | |
}, | |
Z = CE.startTrackingWebVitals(), | |
C = {}; | |
if (G.enableInp) CE.startTrackingINP(C, G.interactionsSampleRate); | |
if (G.enableLongTask) CE.startTrackingLongTasks(); | |
if (G._experiments.enableInteractions) CE.startTrackingInteractions(); | |
let W = { | |
name: void 0, | |
context: void 0 | |
}; | |
function w(B) { | |
let A = d6.getCurrentHub(), | |
{ | |
beforeStartSpan: V, | |
idleTimeout: X, | |
finalTimeout: _, | |
heartbeatInterval: F | |
} = G, | |
g = B.op === "pageload", | |
J; | |
if (g) { | |
let S = g ? _01("sentry-trace") : "", | |
P = g ? _01("baggage") : void 0, | |
{ | |
traceId: $, | |
dsc: h, | |
parentSpanId: O, | |
sampled: T | |
} = nG.propagationContextFromHeaders(S, P); | |
J = { | |
traceId: $, | |
parentSpanId: O, | |
parentSampled: T, | |
...B, | |
metadata: { | |
...B.metadata, | |
dynamicSamplingContext: h | |
}, | |
trimEnd: !0 | |
} | |
} else J = { | |
trimEnd: !0, | |
...B | |
}; | |
let K = V ? V(J) : J; | |
if (K.metadata = K.name !== J.name ? { | |
...K.metadata, | |
source: "custom" | |
} : K.metadata, W.name = K.name, W.context = K, K.sampled === !1) sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Will not send ${K.op} transaction because of beforeNavigate.`); | |
sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Starting ${K.op} transaction on scope`); | |
let { | |
location: Q | |
} = cd.WINDOW, E = d6.startIdleTransaction(A, K, X, _, !0, { | |
location: Q | |
}, F, g); | |
if (g && cd.WINDOW.document) { | |
if (cd.WINDOW.document.addEventListener("readystatechange", () => { | |
if (["interactive", "complete"].includes(cd.WINDOW.document.readyState)) E.sendAutoFinishSignal() | |
}), ["interactive", "complete"].includes(cd.WINDOW.document.readyState)) E.sendAutoFinishSignal() | |
} | |
return E.registerBeforeFinishCallback((S) => { | |
Z(), CE.addPerformanceEntries(S) | |
}), E | |
} | |
return { | |
name: sE1, | |
setupOnce: () => {}, | |
afterAllSetup(B) { | |
let A = B.getOptions(), | |
{ | |
markBackgroundSpan: V, | |
traceFetch: X, | |
traceXHR: _, | |
shouldCreateSpanForRequest: F, | |
enableHTTPTimings: g, | |
_experiments: J | |
} = G, | |
K = A && A.tracePropagationTargets, | |
Q = K || G.tracePropagationTargets; | |
if (sX.DEBUG_BUILD && d && K) nG.logger.warn("[Tracing] The `tracePropagationTargets` option was set in the BrowserTracing integration and top level `Sentry.init`. The top level `Sentry.init` value is being used."); | |
let E, S = cd.WINDOW.location && cd.WINDOW.location.href; | |
if (B.on) B.on("startNavigationSpan", (P) => { | |
if (E) sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Finishing current transaction with op: ${d6.spanToJSON(E).op}`), E.end(); | |
E = w({ | |
op: "navigation", | |
...P | |
}) | |
}), B.on("startPageLoadSpan", (P) => { | |
if (E) sX.DEBUG_BUILD && nG.logger.log(`[Tracing] Finishing current transaction with op: ${d6.spanToJSON(E).op}`), E.end(); | |
E = w({ | |
op: "pageload", | |
...P | |
}) | |
}); | |
if (G.instrumentPageLoad && B.emit && cd.WINDOW.location) { | |
let P = { | |
name: cd.WINDOW.location.pathname, | |
startTimestamp: nG.browserPerformanceTimeOrigin ? nG.browserPerformanceTimeOrigin / 1000 : void 0, | |
origin: "auto.pageload.browser", | |
attributes: { | |
[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url" | |
} | |
}; | |
oE1(B, P) | |
} | |
if (G.instrumentNavigation && B.emit && cd.WINDOW.location) nG.addHistoryInstrumentationHandler(({ | |
to: P, | |
from: $ | |
}) => { | |
if ($ === void 0 && S && S.indexOf(P) !== -1) { | |
S = void 0; | |
return | |
} | |
if ($ !== P) { | |
S = void 0; | |
let h = { | |
name: cd.WINDOW.location.pathname, | |
origin: "auto.navigation.browser", | |
attributes: { | |
[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "url" | |
} | |
}; | |
eE1(B, h) | |
} | |
}); | |
if (V) aa2.registerBackgroundTabDetection(); | |
if (J.enableInteractions) ea2(G, W); | |
if (G.enableInp) Is2(C, W); | |
aE1.instrumentOutgoingRequests({ | |
traceFetch: X, | |
traceXHR: _, | |
tracePropagationTargets: Q, | |
shouldCreateSpanForRequest: F, | |
enableHTTPTimings: g | |
}) | |
}, | |
options: G | |
} | |
}; | |
function oE1(I, d) { | |
if (!I.emit) return; | |
I.emit("startPageLoadSpan", d); | |
let G = d6.getActiveSpan(); | |
return (G && d6.spanToJSON(G).op) === "pageload" ? G : void 0 | |
} | |
function eE1(I, d) { | |
if (!I.emit) return; | |
I.emit("startNavigationSpan", d); | |
let G = d6.getActiveSpan(); | |
return (G && d6.spanToJSON(G).op) === "navigation" ? G : void 0 | |
} | |
function _01(I) { | |
let d = nG.getDomElement(`meta[name=${I}]`); | |
return d ? d.getAttribute("content") : void 0 | |
} | |
function ea2(I, d) { | |
let G, Z = () => { | |
let { | |
idleTimeout: C, | |
finalTimeout: W, | |
heartbeatInterval: w | |
} = I, B = "ui.action.click", A = d6.getActiveTransaction(); | |
if (A && A.op && ["navigation", "pageload"].includes(A.op)) { | |
sX.DEBUG_BUILD && nG.logger.warn("[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress."); | |
return | |
} | |
if (G) G.setFinishReason("interactionInterrupted"), G.end(), G = void 0; | |
if (!d.name) { | |
sX.DEBUG_BUILD && nG.logger.warn("[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing."); | |
return | |
} | |
let { | |
location: V | |
} = cd.WINDOW, X = { | |
name: d.name, | |
op: "ui.action.click", | |
trimEnd: !0, | |
data: { | |
[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: d.context ? ds2(d.context) : "url" | |
} | |
}; | |
G = d6.startIdleTransaction(d6.getCurrentHub(), X, C, W, !0, { | |
location: V | |
}, w) | |
}; | |
["click"].forEach((C) => { | |
if (cd.WINDOW.document) addEventListener(C, Z, { | |
once: !1, | |
capture: !0 | |
}) | |
}) | |
} | |
function ta2(I) { | |
return "duration" in I | |
} | |
var rE1 = 10; | |
function Is2(I, d) { | |
let G = ({ | |
entries: Z | |
}) => { | |
let C = d6.getClient(), | |
W = C !== void 0 && C.getIntegrationByName !== void 0 ? C.getIntegrationByName("Replay") : void 0, | |
w = W !== void 0 ? W.getReplayId() : void 0, | |
B = d6.getActiveTransaction(), | |
A = d6.getCurrentScope(), | |
V = A !== void 0 ? A.getUser() : void 0; | |
Z.forEach((X) => { | |
if (ta2(X)) { | |
let _ = X.interactionId; | |
if (_ === void 0) return; | |
let F = I[_], | |
g = X.duration, | |
J = X.startTime, | |
K = Object.keys(I), | |
Q = K.length > 0 ? K.reduce((E, S) => { | |
return I[E].duration < I[S].duration ? E : S | |
}) : void 0; | |
if (X.entryType === "first-input") { | |
if (K.map((S) => I[S]).some((S) => { | |
return S.duration === g && S.startTime === J | |
})) return | |
} | |
if (!_) return; | |
if (F) F.duration = Math.max(F.duration, g); | |
else if (K.length < rE1 || Q === void 0 || g > I[Q].duration) { | |
let { | |
name: E, | |
context: S | |
} = d; | |
if (E && S) { | |
if (Q && Object.keys(I).length >= rE1) delete I[Q]; | |
I[_] = { | |
routeName: E, | |
duration: g, | |
parentContext: S, | |
user: V, | |
activeTransaction: B, | |
replayId: w, | |
startTime: J | |
} | |
} | |
} | |
} | |
}) | |
}; | |
nE1.addPerformanceInstrumentationHandler("event", G), nE1.addPerformanceInstrumentationHandler("first-input", G) | |
} | |
function ds2(I) { | |
let d = I.attributes && I.attributes[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
G = I.data && I.data[d6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
Z = I.metadata && I.metadata.source; | |
return d || G || Z | |
} | |
tE1.BROWSER_TRACING_INTEGRATION_ID = sE1; | |
tE1.browserTracingIntegration = oa2; | |
tE1.getMetaContent = _01; | |
tE1.startBrowserTracingNavigationSpan = eE1; | |
tE1.startBrowserTracingPageLoadSpan = oE1 | |
}); | |
var ZM1 = Y((GM1, WE) => { | |
Object.defineProperty(GM1, "__esModule", { | |
value: !0 | |
}); | |
var dM1 = V4(), | |
MN = V0(); | |
function Bs2() { | |
let I = dM1.getMainCarrier(); | |
if (!I.__SENTRY__) return; | |
let d = { | |
mongodb() { | |
return new(MN.dynamicRequire(WE, "./node/integrations/mongo")).Mongo | |
}, | |
mongoose() { | |
return new(MN.dynamicRequire(WE, "./node/integrations/mongo")).Mongo | |
}, | |
mysql() { | |
return new(MN.dynamicRequire(WE, "./node/integrations/mysql")).Mysql | |
}, | |
pg() { | |
return new(MN.dynamicRequire(WE, "./node/integrations/postgres")).Postgres | |
} | |
}, | |
G = Object.keys(d).filter((Z) => !!MN.loadModule(Z)).map((Z) => { | |
try { | |
return d[Z]() | |
} catch (C) { | |
return | |
} | |
}).filter((Z) => Z); | |
if (G.length > 0) I.__SENTRY__.integrations = [...I.__SENTRY__.integrations || [], ...G] | |
} | |
function As2() { | |
if (dM1.addTracingExtensions(), MN.isNodeEnv()) Bs2() | |
} | |
GM1.addExtensionMethods = As2 | |
}); | |
var H01 = Y((AM1) => { | |
Object.defineProperty(AM1, "__esModule", { | |
value: !0 | |
}); | |
var PA = V4(), | |
CM1 = V0(), | |
Xs2 = Hv1(), | |
Ys2 = gv1(), | |
_s2 = Kv1(), | |
Ds2 = Qv1(), | |
Hs2 = Rv1(), | |
Fs2 = Ev1(), | |
gs2 = Lv1(), | |
Js2 = Pv1(), | |
WM1 = iE1(), | |
D01 = IM1(), | |
wM1 = Rm(), | |
Um = EN(), | |
BM1 = V01(), | |
Ks2 = ZM1(); | |
AM1.IdleTransaction = PA.IdleTransaction; | |
AM1.Span = PA.Span; | |
AM1.SpanStatus = PA.SpanStatus; | |
AM1.Transaction = PA.Transaction; | |
AM1.extractTraceparentData = PA.extractTraceparentData; | |
AM1.getActiveTransaction = PA.getActiveTransaction; | |
AM1.hasTracingEnabled = PA.hasTracingEnabled; | |
AM1.spanStatusfromHttpCode = PA.spanStatusfromHttpCode; | |
AM1.startIdleTransaction = PA.startIdleTransaction; | |
AM1.TRACEPARENT_REGEXP = CM1.TRACEPARENT_REGEXP; | |
AM1.stripUrlQueryAndFragment = CM1.stripUrlQueryAndFragment; | |
AM1.Express = Xs2.Express; | |
AM1.Postgres = Ys2.Postgres; | |
AM1.Mysql = _s2.Mysql; | |
AM1.Mongo = Ds2.Mongo; | |
AM1.Prisma = Hs2.Prisma; | |
AM1.GraphQL = Fs2.GraphQL; | |
AM1.Apollo = gs2.Apollo; | |
AM1.lazyLoadedNodePerformanceMonitoringIntegrations = Js2.lazyLoadedNodePerformanceMonitoringIntegrations; | |
AM1.BROWSER_TRACING_INTEGRATION_ID = WM1.BROWSER_TRACING_INTEGRATION_ID; | |
AM1.BrowserTracing = WM1.BrowserTracing; | |
AM1.browserTracingIntegration = D01.browserTracingIntegration; | |
AM1.startBrowserTracingNavigationSpan = D01.startBrowserTracingNavigationSpan; | |
AM1.startBrowserTracingPageLoadSpan = D01.startBrowserTracingPageLoadSpan; | |
AM1.defaultRequestInstrumentationOptions = wM1.defaultRequestInstrumentationOptions; | |
AM1.instrumentOutgoingRequests = wM1.instrumentOutgoingRequests; | |
AM1.addClsInstrumentationHandler = Um.addClsInstrumentationHandler; | |
AM1.addFidInstrumentationHandler = Um.addFidInstrumentationHandler; | |
AM1.addLcpInstrumentationHandler = Um.addLcpInstrumentationHandler; | |
AM1.addPerformanceInstrumentationHandler = Um.addPerformanceInstrumentationHandler; | |
AM1.addTracingHeadersToFetchRequest = BM1.addTracingHeadersToFetchRequest; | |
AM1.instrumentFetchRequest = BM1.instrumentFetchRequest; | |
AM1.addExtensionMethods = Ks2.addExtensionMethods | |
}); | |
var XM1 = Y((VM1) => { | |
Object.defineProperty(VM1, "__esModule", { | |
value: !0 | |
}); | |
var es2 = H01(), | |
ts2 = V0(); | |
function Io2() { | |
let I = es2.lazyLoadedNodePerformanceMonitoringIntegrations.map((d) => { | |
try { | |
return d() | |
} catch (G) { | |
return | |
} | |
}).filter((d) => !!d); | |
if (I.length === 0) ts2.logger.warn("Performance monitoring integrations could not be automatically loaded."); | |
return I.filter((d) => !!d.loadDependency()) | |
} | |
VM1.autoDiscoverNodePerformanceMonitoringIntegrations = Io2 | |
}); | |
var F01 = Y((DM1) => { | |
Object.defineProperty(DM1, "__esModule", { | |
value: !0 | |
}); | |
var Go2 = B1("os"), | |
Zo2 = B1("util"), | |
YM1 = V4(); | |
class _M1 extends YM1.ServerRuntimeClient { | |
constructor(I) { | |
YM1.applySdkMetadata(I, "node"), I.transportOptions = { | |
textEncoder: new Zo2.TextEncoder, | |
...I.transportOptions | |
}; | |
let d = { | |
...I, | |
platform: "node", | |
runtime: { | |
name: "node", | |
version: global.process.version | |
}, | |
serverName: I.serverName || global.process.env.SENTRY_NAME || Go2.hostname() | |
}; | |
super(d) | |
} | |
} | |
DM1.NodeClient = _M1 | |
}); | |
var KM1 = Y((JM1) => { | |
var { | |
_nullishCoalesce: HM1 | |
} = V0(); | |
Object.defineProperty(JM1, "__esModule", { | |
value: !0 | |
}); | |
var FM1 = B1("http"); | |
B1("https"); | |
var Hw = Symbol("AgentBaseInternalState"); | |
class gM1 extends FM1.Agent { | |
constructor(I) { | |
super(I); | |
this[Hw] = {} | |
} | |
isSecureEndpoint(I) { | |
if (I) { | |
if (typeof I.secureEndpoint === "boolean") return I.secureEndpoint; | |
if (typeof I.protocol === "string") return I.protocol === "https:" | |
} | |
let { | |
stack: d | |
} = new Error; | |
if (typeof d !== "string") return !1; | |
return d.split(` | |
`).some((G) => G.indexOf("(https.js:") !== -1 || G.indexOf("node:https:") !== -1) | |
} | |
createSocket(I, d, G) { | |
let Z = { | |
...d, | |
secureEndpoint: this.isSecureEndpoint(d) | |
}; | |
Promise.resolve().then(() => this.connect(I, Z)).then((C) => { | |
if (C instanceof FM1.Agent) return C.addRequest(I, Z); | |
this[Hw].currentSocket = C, super.createSocket(I, d, G) | |
}, G) | |
} | |
createConnection() { | |
let I = this[Hw].currentSocket; | |
if (this[Hw].currentSocket = void 0, !I) throw new Error("No socket was returned in the `connect()` function"); | |
return I | |
} | |
get defaultPort() { | |
return HM1(this[Hw].defaultPort, () => this.protocol === "https:" ? 443 : 80) | |
} | |
set defaultPort(I) { | |
if (this[Hw]) this[Hw].defaultPort = I | |
} | |
get protocol() { | |
return HM1(this[Hw].protocol, () => this.isSecureEndpoint() ? "https:" : "http:") | |
} | |
set protocol(I) { | |
if (this[Hw]) this[Hw].protocol = I | |
} | |
} | |
JM1.Agent = gM1 | |
}); | |
var zM1 = Y((NM1) => { | |
Object.defineProperty(NM1, "__esModule", { | |
value: !0 | |
}); | |
var wo2 = V0(); | |
function vm(...I) { | |
wo2.logger.log("[https-proxy-agent:parse-proxy-response]", ...I) | |
} | |
function Bo2(I) { | |
return new Promise((d, G) => { | |
let Z = 0, | |
C = []; | |
function W() { | |
let X = I.read(); | |
if (X) V(X); | |
else I.once("readable", W) | |
} | |
function w() { | |
I.removeListener("end", B), I.removeListener("error", A), I.removeListener("readable", W) | |
} | |
function B() { | |
w(), vm("onend"), G(new Error("Proxy connection ended before receiving CONNECT response")) | |
} | |
function A(X) { | |
w(), vm("onerror %o", X), G(X) | |
} | |
function V(X) { | |
C.push(X), Z += X.length; | |
let _ = Buffer.concat(C, Z), | |
F = _.indexOf(`\r | |
\r | |
`); | |
if (F === -1) { | |
vm("have not received end of HTTP headers yet..."), W(); | |
return | |
} | |
let g = _.slice(0, F).toString("ascii").split(`\r | |
`), | |
J = g.shift(); | |
if (!J) return I.destroy(), G(new Error("No header received from proxy CONNECT response")); | |
let K = J.split(" "), | |
Q = +K[1], | |
E = K.slice(2).join(" "), | |
S = {}; | |
for (let P of g) { | |
if (!P) continue; | |
let $ = P.indexOf(":"); | |
if ($ === -1) return I.destroy(), G(new Error(`Invalid header from proxy CONNECT response: "${P}"`)); | |
let h = P.slice(0, $).toLowerCase(), | |
O = P.slice($ + 1).trimStart(), | |
T = S[h]; | |
if (typeof T === "string") S[h] = [T, O]; | |
else if (Array.isArray(T)) T.push(O); | |
else S[h] = O | |
} | |
vm("got proxy server response: %o %o", J, S), w(), d({ | |
connect: { | |
statusCode: Q, | |
statusText: E, | |
headers: S | |
}, | |
buffered: _ | |
}) | |
} | |
I.on("error", A), I.on("end", B), W() | |
}) | |
} | |
NM1.parseProxyResponse = Bo2 | |
}); | |
var RM1 = Y((qM1) => { | |
var { | |
_nullishCoalesce: Vo2, | |
_optionalChain: Xo2 | |
} = V0(); | |
Object.defineProperty(qM1, "__esModule", { | |
value: !0 | |
}); | |
var wE = B1("net"), | |
QM1 = B1("tls"), | |
Yo2 = B1("url"), | |
_o2 = V0(), | |
Do2 = KM1(), | |
Ho2 = zM1(); | |
function BE(...I) { | |
_o2.logger.log("[https-proxy-agent]", ...I) | |
} | |
class g01 extends Do2.Agent { | |
static __initStatic() { | |
this.protocols = ["http", "https"] | |
} | |
constructor(I, d) { | |
super(d); | |
this.options = {}, this.proxy = typeof I === "string" ? new Yo2.URL(I) : I, this.proxyHeaders = Vo2(Xo2([d, "optionalAccess", (C) => C.headers]), () => ({})), BE("Creating new HttpsProxyAgent instance: %o", this.proxy.href); | |
let G = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ""), | |
Z = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80; | |
this.connectOpts = { | |
ALPNProtocols: ["http/1.1"], | |
...d ? fM1(d, "headers") : null, | |
host: G, | |
port: Z | |
} | |
} | |
async connect(I, d) { | |
let { | |
proxy: G | |
} = this; | |
if (!d.host) throw new TypeError('No "host" provided'); | |
let Z; | |
if (G.protocol === "https:") { | |
BE("Creating `tls.Socket`: %o", this.connectOpts); | |
let _ = this.connectOpts.servername || this.connectOpts.host; | |
Z = QM1.connect({ | |
...this.connectOpts, | |
servername: _ && wE.isIP(_) ? void 0 : _ | |
}) | |
} else BE("Creating `net.Socket`: %o", this.connectOpts), Z = wE.connect(this.connectOpts); | |
let C = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { | |
...this.proxyHeaders | |
}, | |
W = wE.isIPv6(d.host) ? `[${d.host}]` : d.host, | |
w = `CONNECT ${W}:${d.port} HTTP/1.1\r | |
`; | |
if (G.username || G.password) { | |
let _ = `${decodeURIComponent(G.username)}:${decodeURIComponent(G.password)}`; | |
C["Proxy-Authorization"] = `Basic ${Buffer.from(_).toString("base64")}` | |
} | |
if (C.Host = `${W}:${d.port}`, !C["Proxy-Connection"]) C["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close"; | |
for (let _ of Object.keys(C)) w += `${_}: ${C[_]}\r | |
`; | |
let B = Ho2.parseProxyResponse(Z); | |
Z.write(`${w}\r | |
`); | |
let { | |
connect: A, | |
buffered: V | |
} = await B; | |
if (I.emit("proxyConnect", A), this.emit("proxyConnect", A, I), A.statusCode === 200) { | |
if (I.once("socket", Fo2), d.secureEndpoint) { | |
BE("Upgrading socket connection to TLS"); | |
let _ = d.servername || d.host; | |
return QM1.connect({ | |
...fM1(d, "host", "path", "port"), | |
socket: Z, | |
servername: wE.isIP(_) ? void 0 : _ | |
}) | |
} | |
return Z | |
} | |
Z.destroy(); | |
let X = new wE.Socket({ | |
writable: !1 | |
}); | |
return X.readable = !0, I.once("socket", (_) => { | |
BE("Replaying proxy buffer for failed request"), _.push(V), _.push(null) | |
}), X | |
} | |
} | |
g01.__initStatic(); | |
function Fo2(I) { | |
I.resume() | |
} | |
function fM1(I, ...d) { | |
let G = {}, | |
Z; | |
for (Z in I) | |
if (!d.includes(Z)) G[Z] = I[Z]; | |
return G | |
} | |
qM1.HttpsProxyAgent = g01 | |
}); | |
var K01 = Y((EM1) => { | |
var { | |
_nullishCoalesce: J01 | |
} = V0(); | |
Object.defineProperty(EM1, "__esModule", { | |
value: !0 | |
}); | |
var Jo2 = B1("http"), | |
Ko2 = B1("https"), | |
No2 = B1("stream"), | |
vM1 = B1("url"), | |
zo2 = B1("zlib"), | |
UM1 = V4(), | |
Qo2 = V0(), | |
fo2 = RM1(), | |
qo2 = 32768; | |
function Ro2(I) { | |
return new No2.Readable({ | |
read() { | |
this.push(I), this.push(null) | |
} | |
}) | |
} | |
function Uo2(I) { | |
let d; | |
try { | |
d = new vM1.URL(I.url) | |
} catch (A) { | |
return Qo2.consoleSandbox(() => { | |
console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.") | |
}), UM1.createTransport(I, () => Promise.resolve({})) | |
} | |
let G = d.protocol === "https:", | |
Z = vo2(d, I.proxy || (G ? process.env.https_proxy : void 0) || process.env.http_proxy), | |
C = G ? Ko2 : Jo2, | |
W = I.keepAlive === void 0 ? !1 : I.keepAlive, | |
w = Z ? new fo2.HttpsProxyAgent(Z) : new C.Agent({ | |
keepAlive: W, | |
maxSockets: 30, | |
timeout: 2000 | |
}), | |
B = Eo2(I, J01(I.httpModule, () => C), w); | |
return UM1.createTransport(I, B) | |
} | |
function vo2(I, d) { | |
let { | |
no_proxy: G | |
} = process.env; | |
if (G && G.split(",").some((C) => I.host.endsWith(C) || I.hostname.endsWith(C))) return; | |
else return d | |
} | |
function Eo2(I, d, G) { | |
let { | |
hostname: Z, | |
pathname: C, | |
port: W, | |
protocol: w, | |
search: B | |
} = new vM1.URL(I.url); | |
return function A(V) { | |
return new Promise((X, _) => { | |
let F = Ro2(V.body), | |
g = { | |
...I.headers | |
}; | |
if (V.body.length > qo2) g["content-encoding"] = "gzip", F = F.pipe(zo2.createGzip()); | |
let J = d.request({ | |
method: "POST", | |
agent: G, | |
headers: g, | |
hostname: Z, | |
path: `${C}${B}`, | |
port: W, | |
protocol: w, | |
ca: I.caCerts | |
}, (K) => { | |
K.on("data", () => {}), K.on("end", () => {}), K.setEncoding("utf8"); | |
let Q = J01(K.headers["retry-after"], () => null), | |
E = J01(K.headers["x-sentry-rate-limits"], () => null); | |
X({ | |
statusCode: K.statusCode, | |
headers: { | |
"retry-after": Q, | |
"x-sentry-rate-limits": Array.isArray(E) ? E[0] : E | |
} | |
}) | |
}); | |
J.on("error", _), F.pipe(J) | |
}) | |
} | |
} | |
EM1.makeNodeTransport = Uo2 | |
}); | |
var UF = Y((MM1) => { | |
Object.defineProperty(MM1, "__esModule", { | |
value: !0 | |
}); | |
var So2 = V0(), | |
Lo2 = So2.parseSemver(process.versions.node); | |
MM1.NODE_VERSION = Lo2 | |
}); | |
var PM1 = Y((yM1) => { | |
var { | |
_optionalChain: Po2 | |
} = V0(); | |
Object.defineProperty(yM1, "__esModule", { | |
value: !0 | |
}); | |
var SM1 = B1("domain"), | |
vF = V4(); | |
function LM1() { | |
return SM1.active | |
} | |
function $o2() { | |
let I = LM1(); | |
if (!I) return; | |
return vF.ensureHubOnCarrier(I), vF.getHubFromCarrier(I) | |
} | |
function uo2(I) { | |
let d = {}; | |
return vF.ensureHubOnCarrier(d, I), vF.getHubFromCarrier(d) | |
} | |
function To2(I, d) { | |
let G = LM1(); | |
if (G && Po2([d, "optionalAccess", (w) => w.reuseExisting])) return I(); | |
let Z = SM1.create(), | |
C = G ? vF.getHubFromCarrier(G) : void 0, | |
W = uo2(C); | |
return vF.setHubOnCarrier(Z, W), Z.bind(() => { | |
return I() | |
})() | |
} | |
function Oo2() { | |
vF.setAsyncContextStrategy({ | |
getCurrentHub: $o2, | |
runWithAsyncContext: To2 | |
}) | |
} | |
yM1.setDomainAsyncContextStrategy = Oo2 | |
}); | |
var uM1 = Y(($M1) => { | |
var { | |
_optionalChain: lo2 | |
} = V0(); | |
Object.defineProperty($M1, "__esModule", { | |
value: !0 | |
}); | |
var N01 = V4(), | |
bo2 = B1("async_hooks"), | |
Em; | |
function ho2() { | |
if (!Em) Em = new bo2.AsyncLocalStorage; | |
function I() { | |
return Em.getStore() | |
} | |
function d(Z) { | |
let C = {}; | |
return N01.ensureHubOnCarrier(C, Z), N01.getHubFromCarrier(C) | |
} | |
function G(Z, C) { | |
let W = I(); | |
if (W && lo2([C, "optionalAccess", (B) => B.reuseExisting])) return Z(); | |
let w = d(W); | |
return Em.run(w, () => { | |
return Z() | |
}) | |
} | |
N01.setAsyncContextStrategy({ | |
getCurrentHub: I, | |
runWithAsyncContext: G | |
}) | |
} | |
$M1.setHooksAsyncContextStrategy = ho2 | |
}); | |
var OM1 = Y((TM1) => { | |
Object.defineProperty(TM1, "__esModule", { | |
value: !0 | |
}); | |
var ko2 = UF(), | |
xo2 = PM1(), | |
co2 = uM1(); | |
function po2() { | |
if (ko2.NODE_VERSION.major >= 14) co2.setHooksAsyncContextStrategy(); | |
else xo2.setDomainAsyncContextStrategy() | |
} | |
TM1.setNodeAsyncContextStrategy = po2 | |
}); | |
var Sm = Y((hM1) => { | |
Object.defineProperty(hM1, "__esModule", { | |
value: !0 | |
}); | |
var no2 = B1("util"), | |
Mm = V4(), | |
mM1 = V0(), | |
lM1 = "Console", | |
ro2 = () => { | |
return { | |
name: lM1, | |
setupOnce() {}, | |
setup(I) { | |
mM1.addConsoleInstrumentationHandler(({ | |
args: d, | |
level: G | |
}) => { | |
if (Mm.getClient() !== I) return; | |
Mm.addBreadcrumb({ | |
category: "console", | |
level: mM1.severityLevelFromString(G), | |
message: no2.format.apply(void 0, d) | |
}, { | |
input: [...d], | |
level: G | |
}) | |
}) | |
} | |
} | |
}, | |
bM1 = Mm.defineIntegration(ro2), | |
ao2 = Mm.convertIntegrationFnToClass(lM1, bM1); | |
hM1.Console = ao2; | |
hM1.consoleIntegration = bM1 | |
}); | |
var Lm = Y((sM1) => { | |
var { | |
_optionalChain: EF | |
} = V0(); | |
Object.defineProperty(sM1, "__esModule", { | |
value: !0 | |
}); | |
var eo2 = B1("child_process"), | |
kM1 = B1("fs"), | |
rG = B1("os"), | |
to2 = B1("path"), | |
xM1 = B1("util"), | |
cM1 = V4(), | |
pM1 = xM1.promisify(kM1.readFile), | |
iM1 = xM1.promisify(kM1.readdir), | |
nM1 = "Context", | |
Ie2 = (I = {}) => { | |
let d, G = { | |
app: !0, | |
os: !0, | |
device: !0, | |
culture: !0, | |
cloudResource: !0, | |
...I | |
}; | |
async function Z(W) { | |
if (d === void 0) d = C(); | |
let w = Ge2(await d); | |
return W.contexts = { | |
...W.contexts, | |
app: { | |
...w.app, | |
...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.app]) | |
}, | |
os: { | |
...w.os, | |
...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.os]) | |
}, | |
device: { | |
...w.device, | |
...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.device]) | |
}, | |
culture: { | |
...w.culture, | |
...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.culture]) | |
}, | |
cloud_resource: { | |
...w.cloud_resource, | |
...EF([W, "access", (B) => B.contexts, "optionalAccess", (B) => B.cloud_resource]) | |
} | |
}, W | |
} | |
async function C() { | |
let W = {}; | |
if (G.os) W.os = await Ze2(); | |
if (G.app) W.app = We2(); | |
if (G.device) W.device = aM1(G.device); | |
if (G.culture) { | |
let w = Ce2(); | |
if (w) W.culture = w | |
} | |
if (G.cloudResource) W.cloud_resource = Ye2(); | |
return W | |
} | |
return { | |
name: nM1, | |
setupOnce() {}, | |
processEvent(W) { | |
return Z(W) | |
} | |
} | |
}, | |
rM1 = cM1.defineIntegration(Ie2), | |
de2 = cM1.convertIntegrationFnToClass(nM1, rM1); | |
function Ge2(I) { | |
if (EF([I, "optionalAccess", (d) => d.app, "optionalAccess", (d) => d.app_memory])) I.app.app_memory = process.memoryUsage().rss; | |
if (EF([I, "optionalAccess", (d) => d.device, "optionalAccess", (d) => d.free_memory])) I.device.free_memory = rG.freemem(); | |
return I | |
} | |
async function Ze2() { | |
let I = rG.platform(); | |
switch (I) { | |
case "darwin": | |
return Ve2(); | |
case "linux": | |
return Xe2(); | |
default: | |
return { | |
name: we2[I] || I, version: rG.release() | |
} | |
} | |
} | |
function Ce2() { | |
try { | |
if (typeof process.versions.icu !== "string") return; | |
let I = new Date(900000000); | |
if (new Intl.DateTimeFormat("es", { | |
month: "long" | |
}).format(I) === "enero") { | |
let G = Intl.DateTimeFormat().resolvedOptions(); | |
return { | |
locale: G.locale, | |
timezone: G.timeZone | |
} | |
} | |
} catch (I) {} | |
return | |
} | |
function We2() { | |
let I = process.memoryUsage().rss; | |
return { | |
app_start_time: new Date(Date.now() - process.uptime() * 1000).toISOString(), | |
app_memory: I | |
} | |
} | |
function aM1(I) { | |
let d = {}, | |
G; | |
try { | |
G = rG.uptime && rG.uptime() | |
} catch (Z) {} | |
if (typeof G === "number") d.boot_time = new Date(Date.now() - G * 1000).toISOString(); | |
if (d.arch = rG.arch(), I === !0 || I.memory) d.memory_size = rG.totalmem(), d.free_memory = rG.freemem(); | |
if (I === !0 || I.cpu) { | |
let Z = rG.cpus(); | |
if (Z && Z.length) { | |
let C = Z[0]; | |
d.processor_count = Z.length, d.cpu_description = C.model, d.processor_frequency = C.speed | |
} | |
} | |
return d | |
} | |
var we2 = { | |
aix: "IBM AIX", | |
freebsd: "FreeBSD", | |
openbsd: "OpenBSD", | |
sunos: "SunOS", | |
win32: "Windows" | |
}, | |
Be2 = [{ | |
name: "fedora-release", | |
distros: ["Fedora"] | |
}, { | |
name: "redhat-release", | |
distros: ["Red Hat Linux", "Centos"] | |
}, { | |
name: "redhat_version", | |
distros: ["Red Hat Linux"] | |
}, { | |
name: "SuSE-release", | |
distros: ["SUSE Linux"] | |
}, { | |
name: "lsb-release", | |
distros: ["Ubuntu Linux", "Arch Linux"] | |
}, { | |
name: "debian_version", | |
distros: ["Debian"] | |
}, { | |
name: "debian_release", | |
distros: ["Debian"] | |
}, { | |
name: "arch-release", | |
distros: ["Arch Linux"] | |
}, { | |
name: "gentoo-release", | |
distros: ["Gentoo Linux"] | |
}, { | |
name: "novell-release", | |
distros: ["SUSE Linux"] | |
}, { | |
name: "alpine-release", | |
distros: ["Alpine Linux"] | |
}], | |
Ae2 = { | |
alpine: (I) => I, | |
arch: (I) => Fw(/distrib_release=(.*)/, I), | |
centos: (I) => Fw(/release ([^ ]+)/, I), | |
debian: (I) => I, | |
fedora: (I) => Fw(/release (..)/, I), | |
mint: (I) => Fw(/distrib_release=(.*)/, I), | |
red: (I) => Fw(/release ([^ ]+)/, I), | |
suse: (I) => Fw(/VERSION = (.*)\n/, I), | |
ubuntu: (I) => Fw(/distrib_release=(.*)/, I) | |
}; | |
function Fw(I, d) { | |
let G = I.exec(d); | |
return G ? G[1] : void 0 | |
} | |
async function Ve2() { | |
let I = { | |
kernel_version: rG.release(), | |
name: "Mac OS X", | |
version: `10.${Number(rG.release().split(".")[0])-4}` | |
}; | |
try { | |
let d = await new Promise((G, Z) => { | |
eo2.execFile("/usr/bin/sw_vers", (C, W) => { | |
if (C) { | |
Z(C); | |
return | |
} | |
G(W) | |
}) | |
}); | |
I.name = Fw(/^ProductName:\s+(.*)$/m, d), I.version = Fw(/^ProductVersion:\s+(.*)$/m, d), I.build = Fw(/^BuildVersion:\s+(.*)$/m, d) | |
} catch (d) {} | |
return I | |
} | |
function jM1(I) { | |
return I.split(" ")[0].toLowerCase() | |
} | |
async function Xe2() { | |
let I = { | |
kernel_version: rG.release(), | |
name: "Linux" | |
}; | |
try { | |
let d = await iM1("/etc"), | |
G = Be2.find((B) => d.includes(B.name)); | |
if (!G) return I; | |
let Z = to2.join("/etc", G.name), | |
C = (await pM1(Z, { | |
encoding: "utf-8" | |
})).toLowerCase(), | |
{ | |
distros: W | |
} = G; | |
I.name = W.find((B) => C.indexOf(jM1(B)) >= 0) || W[0]; | |
let w = jM1(I.name); | |
I.version = Ae2[w](C) | |
} catch (d) {} | |
return I | |
} | |
function Ye2() { | |
if (process.env.VERCEL) return { | |
"cloud.provider": "vercel", | |
"cloud.region": process.env.VERCEL_REGION | |
}; | |
else if (process.env.AWS_REGION) return { | |
"cloud.provider": "aws", | |
"cloud.region": process.env.AWS_REGION, | |
"cloud.platform": process.env.AWS_EXECUTION_ENV | |
}; | |
else if (process.env.GCP_PROJECT) return { | |
"cloud.provider": "gcp" | |
}; | |
else if (process.env.ALIYUN_REGION_ID) return { | |
"cloud.provider": "alibaba_cloud", | |
"cloud.region": process.env.ALIYUN_REGION_ID | |
}; | |
else if (process.env.WEBSITE_SITE_NAME && process.env.REGION_NAME) return { | |
"cloud.provider": "azure", | |
"cloud.region": process.env.REGION_NAME | |
}; | |
else if (process.env.IBM_CLOUD_REGION) return { | |
"cloud.provider": "ibm_cloud", | |
"cloud.region": process.env.IBM_CLOUD_REGION | |
}; | |
else if (process.env.TENCENTCLOUD_REGION) return { | |
"cloud.provider": "tencent_cloud", | |
"cloud.region": process.env.TENCENTCLOUD_REGION, | |
"cloud.account.id": process.env.TENCENTCLOUD_APPID, | |
"cloud.availability_zone": process.env.TENCENTCLOUD_ZONE | |
}; | |
else if (process.env.NETLIFY) return { | |
"cloud.provider": "netlify" | |
}; | |
else if (process.env.FLY_REGION) return { | |
"cloud.provider": "fly.io", | |
"cloud.region": process.env.FLY_REGION | |
}; | |
else if (process.env.DYNO) return { | |
"cloud.provider": "heroku" | |
}; | |
else return | |
} | |
sM1.Context = de2; | |
sM1.getDeviceContext = aM1; | |
sM1.nodeContextIntegration = rM1; | |
sM1.readDirAsync = iM1; | |
sM1.readFileAsync = pM1 | |
}); | |
var Pm = Y((dS1) => { | |
var { | |
_optionalChain: z01 | |
} = V0(); | |
Object.defineProperty(dS1, "__esModule", { | |
value: !0 | |
}); | |
var Je2 = B1("fs"), | |
oM1 = V4(), | |
eM1 = V0(), | |
ym = new eM1.LRUMap(100), | |
Ke2 = 7, | |
tM1 = "ContextLines"; | |
function Ne2(I) { | |
return new Promise((d, G) => { | |
Je2.readFile(I, "utf8", (Z, C) => { | |
if (Z) G(Z); | |
else d(C) | |
}) | |
}) | |
} | |
var ze2 = (I = {}) => { | |
let d = I.frameContextLines !== void 0 ? I.frameContextLines : Ke2; | |
return { | |
name: tM1, | |
setupOnce() {}, | |
processEvent(G) { | |
return fe2(G, d) | |
} | |
} | |
}, | |
IS1 = oM1.defineIntegration(ze2), | |
Qe2 = oM1.convertIntegrationFnToClass(tM1, IS1); | |
async function fe2(I, d) { | |
let G = {}, | |
Z = []; | |
if (d > 0 && z01([I, "access", (C) => C.exception, "optionalAccess", (C) => C.values])) | |
for (let C of I.exception.values) { | |
if (!z01([C, "access", (W) => W.stacktrace, "optionalAccess", (W) => W.frames])) continue; | |
for (let W = C.stacktrace.frames.length - 1; W >= 0; W--) { | |
let w = C.stacktrace.frames[W]; | |
if (w.filename && !G[w.filename] && !ym.get(w.filename)) Z.push(Re2(w.filename)), G[w.filename] = 1 | |
} | |
} | |
if (Z.length > 0) await Promise.all(Z); | |
if (d > 0 && z01([I, "access", (C) => C.exception, "optionalAccess", (C) => C.values])) { | |
for (let C of I.exception.values) | |
if (C.stacktrace && C.stacktrace.frames) await qe2(C.stacktrace.frames, d) | |
} | |
return I | |
} | |
function qe2(I, d) { | |
for (let G of I) | |
if (G.filename && G.context_line === void 0) { | |
let Z = ym.get(G.filename); | |
if (Z) try { | |
eM1.addContextToFrame(Z, G, d) | |
} catch (C) {} | |
} | |
} | |
async function Re2(I) { | |
let d = ym.get(I); | |
if (d === null) return null; | |
if (d !== void 0) return d; | |
let G = null; | |
try { | |
G = (await Ne2(I)).split(` | |
`) | |
} catch (Z) {} | |
return ym.set(I, G), G | |
} | |
dS1.ContextLines = Qe2; | |
dS1.contextLinesIntegration = IS1 | |
}); | |
var AE = Y((GS1) => { | |
Object.defineProperty(GS1, "__esModule", { | |
value: !0 | |
}); | |
var Ee2 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
GS1.DEBUG_BUILD = Ee2 | |
}); | |
var wS1 = Y((WS1) => { | |
var { | |
_optionalChain: gw | |
} = V0(); | |
Object.defineProperty(WS1, "__esModule", { | |
value: !0 | |
}); | |
var Q01 = B1("url"), | |
Se2 = UF(); | |
function Le2(I) { | |
let { | |
protocol: d, | |
hostname: G, | |
port: Z | |
} = CS1(I), C = I.path ? I.path : "/"; | |
return `${d}//${G}${Z}${C}` | |
} | |
function ZS1(I) { | |
let { | |
protocol: d, | |
hostname: G, | |
port: Z | |
} = CS1(I), C = I.pathname || "/", W = I.auth ? ye2(I.auth) : ""; | |
return `${d}//${W}${G}${Z}${C}` | |
} | |
function ye2(I) { | |
let [d, G] = I.split(":"); | |
return `${d?"[Filtered]":""}:${G?"[Filtered]":""}@` | |
} | |
function Pe2(I, d, G) { | |
if (!I) return I; | |
let [Z, C] = I.split(" "); | |
if (d.host && !d.protocol) d.protocol = gw([G, "optionalAccess", (W) => W.agent, "optionalAccess", (W) => W.protocol]), C = ZS1(d); | |
if (gw([C, "optionalAccess", (W) => W.startsWith, "call", (W) => W("///")])) C = C.slice(2); | |
return `${Z} ${C}` | |
} | |
function f01(I) { | |
let d = { | |
protocol: I.protocol, | |
hostname: typeof I.hostname === "string" && I.hostname.startsWith("[") ? I.hostname.slice(1, -1) : I.hostname, | |
hash: I.hash, | |
search: I.search, | |
pathname: I.pathname, | |
path: `${I.pathname||""}${I.search||""}`, | |
href: I.href | |
}; | |
if (I.port !== "") d.port = Number(I.port); | |
if (I.username || I.password) d.auth = `${I.username}:${I.password}`; | |
return d | |
} | |
function $e2(I, d) { | |
let G, Z; | |
if (typeof d[d.length - 1] === "function") G = d.pop(); | |
if (typeof d[0] === "string") Z = f01(new Q01.URL(d[0])); | |
else if (d[0] instanceof Q01.URL) Z = f01(d[0]); | |
else { | |
Z = d[0]; | |
try { | |
let C = new Q01.URL(Z.path || "", `${Z.protocol||"http:"}//${Z.hostname}`); | |
Z = { | |
pathname: C.pathname, | |
search: C.search, | |
hash: C.hash, | |
...Z | |
} | |
} catch (C) {} | |
} | |
if (d.length === 2) Z = { | |
...Z, | |
...d[1] | |
}; | |
if (Z.protocol === void 0) | |
if (Se2.NODE_VERSION.major > 8) Z.protocol = gw([gw([I, "optionalAccess", (C) => C.globalAgent]), "optionalAccess", (C) => C.protocol]) || gw([Z.agent, "optionalAccess", (C) => C.protocol]) || gw([Z._defaultAgent, "optionalAccess", (C) => C.protocol]); | |
else Z.protocol = gw([Z.agent, "optionalAccess", (C) => C.protocol]) || gw([Z._defaultAgent, "optionalAccess", (C) => C.protocol]) || gw([gw([I, "optionalAccess", (C) => C.globalAgent]), "optionalAccess", (C) => C.protocol]); | |
if (G) return [Z, G]; | |
else return [Z] | |
} | |
function CS1(I) { | |
let d = I.protocol || "", | |
G = I.hostname || I.host || "", | |
Z = !I.port || I.port === 80 || I.port === 443 || /^(.*):(\d+)$/.test(G) ? "" : `:${I.port}`; | |
return { | |
protocol: d, | |
hostname: G, | |
port: Z | |
} | |
} | |
WS1.cleanSpanDescription = Pe2; | |
WS1.extractRawUrl = Le2; | |
WS1.extractUrl = ZS1; | |
WS1.normalizeRequestArgs = $e2; | |
WS1.urlToOptions = f01 | |
}); | |
var $m = Y((XS1) => { | |
var { | |
_optionalChain: SN | |
} = V0(); | |
Object.defineProperty(XS1, "__esModule", { | |
value: !0 | |
}); | |
var f7 = V4(), | |
pd = V0(), | |
q01 = AE(), | |
be2 = UF(), | |
VE = wS1(), | |
he2 = (I = {}) => { | |
let { | |
breadcrumbs: d, | |
tracing: G, | |
shouldCreateSpanForRequest: Z | |
} = I, C = { | |
breadcrumbs: d, | |
tracing: G === !1 ? !1 : pd.dropUndefinedKeys({ | |
enableIfHasTracingEnabled: G === !0 ? void 0 : !0, | |
shouldCreateSpanForRequest: Z | |
}) | |
}; | |
return new MF(C) | |
}, | |
je2 = f7.defineIntegration(he2); | |
class MF { | |
static __initStatic() { | |
this.id = "Http" | |
} | |
__init() { | |
this.name = MF.id | |
} | |
constructor(I = {}) { | |
MF.prototype.__init.call(this), this._breadcrumbs = typeof I.breadcrumbs === "undefined" ? !0 : I.breadcrumbs, this._tracing = !I.tracing ? void 0 : I.tracing === !0 ? {} : I.tracing | |
} | |
setupOnce(I, d) { | |
let G = SN([d, "call", (A) => A(), "access", (A) => A.getClient, "call", (A) => A(), "optionalAccess", (A) => A.getOptions, "call", (A) => A()]), | |
Z = AS1(this._tracing, G); | |
if (!this._breadcrumbs && !Z) return; | |
if (G && G.instrumenter !== "sentry") { | |
q01.DEBUG_BUILD && pd.logger.log("HTTP Integration is skipped because of instrumenter configuration."); | |
return | |
} | |
let C = VS1(Z, this._tracing, G), | |
W = SN([G, "optionalAccess", (A) => A.tracePropagationTargets]) || SN([this, "access", (A) => A._tracing, "optionalAccess", (A) => A.tracePropagationTargets]), | |
w = B1("http"), | |
B = BS1(w, this._breadcrumbs, C, W); | |
if (pd.fill(w, "get", B), pd.fill(w, "request", B), be2.NODE_VERSION.major > 8) { | |
let A = B1("https"), | |
V = BS1(A, this._breadcrumbs, C, W); | |
pd.fill(A, "get", V), pd.fill(A, "request", V) | |
} | |
} | |
} | |
MF.__initStatic(); | |
function BS1(I, d, G, Z) { | |
let C = new pd.LRUMap(100), | |
W = new pd.LRUMap(100), | |
w = (V) => { | |
if (G === void 0) return !0; | |
let X = C.get(V); | |
if (X !== void 0) return X; | |
let _ = G(V); | |
return C.set(V, _), _ | |
}, | |
B = (V) => { | |
if (Z === void 0) return !0; | |
let X = W.get(V); | |
if (X !== void 0) return X; | |
let _ = pd.stringMatchesSomePattern(V, Z); | |
return W.set(V, _), _ | |
}; | |
function A(V, X, _, F) { | |
if (!f7.getCurrentHub().getIntegration(MF)) return; | |
f7.addBreadcrumb({ | |
category: "http", | |
data: { | |
status_code: F && F.statusCode, | |
...X | |
}, | |
type: "http" | |
}, { | |
event: V, | |
request: _, | |
response: F | |
}) | |
} | |
return function V(X) { | |
return function _(...F) { | |
let g = VE.normalizeRequestArgs(I, F), | |
J = g[0], | |
K = VE.extractRawUrl(J), | |
Q = VE.extractUrl(J), | |
E = f7.getClient(); | |
if (f7.isSentryRequestUrl(Q, E)) return X.apply(I, g); | |
let S = f7.getCurrentScope(), | |
P = f7.getIsolationScope(), | |
$ = f7.getActiveSpan(), | |
h = xe2(Q, J), | |
O = w(K) ? SN([$, "optionalAccess", (T) => T.startChild, "call", (T) => T({ | |
op: "http.client", | |
origin: "auto.http.node.http", | |
description: `${h["http.method"]} ${h.url}`, | |
data: h | |
})]) : void 0; | |
if (E && B(K)) { | |
let { | |
traceId: T, | |
spanId: V1, | |
sampled: c, | |
dsc: c1 | |
} = { | |
...P.getPropagationContext(), | |
...S.getPropagationContext() | |
}, o1 = O ? f7.spanToTraceHeader(O) : pd.generateSentryTraceHeader(T, V1, c), a1 = pd.dynamicSamplingContextToSentryBaggageHeader(c1 || (O ? f7.getDynamicSamplingContextFromSpan(O) : f7.getDynamicSamplingContextFromClient(T, E, S))); | |
ke2(J, Q, o1, a1) | |
} else q01.DEBUG_BUILD && pd.logger.log(`[Tracing] Not adding sentry-trace header to outgoing request (${Q}) due to mismatching tracePropagationTargets option.`); | |
return X.apply(I, g).once("response", function(T) { | |
let V1 = this; | |
if (d) A("response", h, V1, T); | |
if (O) { | |
if (T.statusCode) f7.setHttpStatus(O, T.statusCode); | |
O.updateName(VE.cleanSpanDescription(f7.spanToJSON(O).description || "", J, V1) || ""), O.end() | |
} | |
}).once("error", function() { | |
let T = this; | |
if (d) A("error", h, T); | |
if (O) f7.setHttpStatus(O, 500), O.updateName(VE.cleanSpanDescription(f7.spanToJSON(O).description || "", J, T) || ""), O.end() | |
}) | |
} | |
} | |
} | |
function ke2(I, d, G, Z) { | |
if ((I.headers || {})["sentry-trace"]) return; | |
q01.DEBUG_BUILD && pd.logger.log(`[Tracing] Adding sentry-trace header ${G} to outgoing request to "${d}": `), I.headers = { | |
...I.headers, | |
"sentry-trace": G, | |
...Z && Z.length > 0 && { | |
baggage: ce2(I, Z) | |
} | |
} | |
} | |
function xe2(I, d) { | |
let G = d.method || "GET", | |
Z = { | |
url: I, | |
"http.method": G | |
}; | |
if (d.hash) Z["http.fragment"] = d.hash.substring(1); | |
if (d.search) Z["http.query"] = d.search.substring(1); | |
return Z | |
} | |
function ce2(I, d) { | |
if (!I.headers || !I.headers.baggage) return d; | |
else if (!d) return I.headers.baggage; | |
else if (Array.isArray(I.headers.baggage)) return [...I.headers.baggage, d]; | |
return [I.headers.baggage, d] | |
} | |
function AS1(I, d) { | |
return I === void 0 ? !1 : I.enableIfHasTracingEnabled ? f7.hasTracingEnabled(d) : !0 | |
} | |
function VS1(I, d, G) { | |
return I ? SN([d, "optionalAccess", (C) => C.shouldCreateSpanForRequest]) || SN([G, "optionalAccess", (C) => C.shouldCreateSpanForRequest]) : () => !1 | |
} | |
XS1.Http = MF; | |
XS1._getShouldCreateSpanForRequest = VS1; | |
XS1._shouldCreateSpans = AS1; | |
XS1.httpIntegration = je2 | |
}); | |
var DS1 = Y((_S1) => { | |
Object.defineProperty(_S1, "__esModule", { | |
value: !0 | |
}); | |
function ae2(I, d, G) { | |
let Z = 0, | |
C = 5, | |
W = 0; | |
return setInterval(() => { | |
if (W === 0) { | |
if (Z > I) { | |
if (C *= 2, G(C), C > 86400) C = 86400; | |
W = C | |
} | |
} else if (W -= 1, W === 0) d(); | |
Z = 0 | |
}, 1000).unref(), () => { | |
Z += 1 | |
} | |
} | |
function R01(I) { | |
return I !== void 0 && (I.length === 0 || I === "?" || I === "<anonymous>") | |
} | |
function se2(I, d) { | |
return I === d || R01(I) && R01(d) | |
} | |
function YS1(I) { | |
if (I === void 0) return; | |
return I.slice(-10).reduce((d, G) => `${d},${G.function},${G.lineno},${G.colno}`, "") | |
} | |
function oe2(I, d) { | |
if (d === void 0) return; | |
return YS1(I(d, 1)) | |
} | |
_S1.createRateLimiter = ae2; | |
_S1.functionNamesMatch = se2; | |
_S1.hashFrames = YS1; | |
_S1.hashFromStack = oe2; | |
_S1.isAnonymous = R01 | |
}); | |
var KS1 = Y((JS1) => { | |
var { | |
_optionalChain: O3 | |
} = V0(); | |
Object.defineProperty(JS1, "__esModule", { | |
value: !0 | |
}); | |
var U01 = V4(), | |
um = V0(), | |
Zt2 = UF(), | |
Tm = DS1(); | |
function v01(I) { | |
let d = [], | |
G = !1; | |
function Z(w) { | |
if (d = [], G) return; | |
G = !0, I(w) | |
} | |
d.push(Z); | |
function C(w) { | |
d.push(w) | |
} | |
function W(w) { | |
let B = d.pop() || Z; | |
try { | |
B(w) | |
} catch (A) { | |
Z(w) | |
} | |
} | |
return { | |
add: C, | |
next: W | |
} | |
} | |
class HS1 { | |
constructor() { | |
let { | |
Session: I | |
} = B1("inspector"); | |
this._session = new I | |
} | |
configureAndConnect(I, d) { | |
this._session.connect(), this._session.on("Debugger.paused", (G) => { | |
I(G, () => { | |
this._session.post("Debugger.resume") | |
}) | |
}), this._session.post("Debugger.enable"), this._session.post("Debugger.setPauseOnExceptions", { | |
state: d ? "all" : "uncaught" | |
}) | |
} | |
setPauseOnExceptions(I) { | |
this._session.post("Debugger.setPauseOnExceptions", { | |
state: I ? "all" : "uncaught" | |
}) | |
} | |
getLocalVariables(I, d) { | |
this._getProperties(I, (G) => { | |
let { | |
add: Z, | |
next: C | |
} = v01(d); | |
for (let W of G) | |
if (O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.objectId]) && O3([W, "optionalAccess", (w) => w.value, "access", (w) => w.className]) === "Array") { | |
let w = W.value.objectId; | |
Z((B) => this._unrollArray(w, W.name, B, C)) | |
} else if (O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.objectId]) && O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.className]) === "Object") { | |
let w = W.value.objectId; | |
Z((B) => this._unrollObject(w, W.name, B, C)) | |
} else if (O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.value]) != null || O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.description]) != null) Z((w) => this._unrollOther(W, w, C)); | |
C({}) | |
}) | |
} | |
_getProperties(I, d) { | |
this._session.post("Runtime.getProperties", { | |
objectId: I, | |
ownProperties: !0 | |
}, (G, Z) => { | |
if (G) d([]); | |
else d(Z.result) | |
}) | |
} | |
_unrollArray(I, d, G, Z) { | |
this._getProperties(I, (C) => { | |
G[d] = C.filter((W) => W.name !== "length" && !isNaN(parseInt(W.name, 10))).sort((W, w) => parseInt(W.name, 10) - parseInt(w.name, 10)).map((W) => O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.value])), Z(G) | |
}) | |
} | |
_unrollObject(I, d, G, Z) { | |
this._getProperties(I, (C) => { | |
G[d] = C.map((W) => [W.name, O3([W, "optionalAccess", (w) => w.value, "optionalAccess", (w) => w.value])]).reduce((W, [w, B]) => { | |
return W[w] = B, W | |
}, {}), Z(G) | |
}) | |
} | |
_unrollOther(I, d, G) { | |
if (O3([I, "optionalAccess", (Z) => Z.value, "optionalAccess", (Z) => Z.value]) != null) d[I.name] = I.value.value; | |
else if (O3([I, "optionalAccess", (Z) => Z.value, "optionalAccess", (Z) => Z.description]) != null && O3([I, "optionalAccess", (Z) => Z.value, "optionalAccess", (Z) => Z.type]) !== "function") d[I.name] = `<${I.value.description}>`; | |
G(d) | |
} | |
} | |
function Ct2() { | |
try { | |
return new HS1 | |
} catch (I) { | |
return | |
} | |
} | |
var FS1 = "LocalVariables", | |
Wt2 = (I = {}, d = Ct2()) => { | |
let G = new um.LRUMap(20), | |
Z, C = !1; | |
function W(A, { | |
params: { | |
reason: V, | |
data: X, | |
callFrames: _ | |
} | |
}, F) { | |
if (V !== "exception" && V !== "promiseRejection") { | |
F(); | |
return | |
} | |
O3([Z, "optionalCall", (Q) => Q()]); | |
let g = Tm.hashFromStack(A, O3([X, "optionalAccess", (Q) => Q.description])); | |
if (g == null) { | |
F(); | |
return | |
} | |
let { | |
add: J, | |
next: K | |
} = v01((Q) => { | |
G.set(g, Q), F() | |
}); | |
for (let Q = 0; Q < Math.min(_.length, 5); Q++) { | |
let { | |
scopeChain: E, | |
functionName: S, | |
this: P | |
} = _[Q], $ = E.find((O) => O.type === "local"), h = P.className === "global" || !P.className ? S : `${P.className}.${S}`; | |
if (O3([$, "optionalAccess", (O) => O.object, "access", (O) => O.objectId]) === void 0) J((O) => { | |
O[Q] = { | |
function: h | |
}, K(O) | |
}); | |
else { | |
let O = $.object.objectId; | |
J((T) => O3([d, "optionalAccess", (V1) => V1.getLocalVariables, "call", (V1) => V1(O, (c) => { | |
T[Q] = { | |
function: h, | |
vars: c | |
}, K(T) | |
})])) | |
} | |
} | |
K([]) | |
} | |
function w(A) { | |
let V = Tm.hashFrames(O3([A, "optionalAccess", (F) => F.stacktrace, "optionalAccess", (F) => F.frames])); | |
if (V === void 0) return; | |
let X = G.remove(V); | |
if (X === void 0) return; | |
let _ = (O3([A, "access", (F) => F.stacktrace, "optionalAccess", (F) => F.frames]) || []).filter((F) => F.function !== "new Promise"); | |
for (let F = 0; F < _.length; F++) { | |
let g = _.length - F - 1; | |
if (!_[g] || !X[F]) break; | |
if (X[F].vars === void 0 || _[g].in_app === !1 || !Tm.functionNamesMatch(_[g].function, X[F].function)) continue; | |
_[g].vars = X[F].vars | |
} | |
} | |
function B(A) { | |
for (let V of O3([A, "optionalAccess", (X) => X.exception, "optionalAccess", (X) => X.values]) || []) w(V); | |
return A | |
} | |
return { | |
name: FS1, | |
setupOnce() { | |
let A = U01.getClient(), | |
V = O3([A, "optionalAccess", (X) => X.getOptions, "call", (X) => X()]); | |
if (d && O3([V, "optionalAccess", (X) => X.includeLocalVariables])) { | |
if (Zt2.NODE_VERSION.major < 18) { | |
um.logger.log("The `LocalVariables` integration is only supported on Node >= v18."); | |
return | |
} | |
let _ = I.captureAllExceptions !== !1; | |
if (d.configureAndConnect((F, g) => W(V.stackParser, F, g), _), _) { | |
let F = I.maxExceptionsPerSecond || 50; | |
Z = Tm.createRateLimiter(F, () => { | |
um.logger.log("Local variables rate-limit lifted."), O3([d, "optionalAccess", (g) => g.setPauseOnExceptions, "call", (g) => g(!0)]) | |
}, (g) => { | |
um.logger.log(`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${g} seconds.`), O3([d, "optionalAccess", (J) => J.setPauseOnExceptions, "call", (J) => J(!1)]) | |
}) | |
} | |
C = !0 | |
} | |
}, | |
processEvent(A) { | |
if (C) return B(A); | |
return A | |
}, | |
_getCachedFramesCount() { | |
return G.size | |
}, | |
_getFirstCachedFrame() { | |
return G.values()[0] | |
} | |
} | |
}, | |
gS1 = U01.defineIntegration(Wt2), | |
wt2 = U01.convertIntegrationFnToClass(FS1, gS1); | |
JS1.LocalVariablesSync = wt2; | |
JS1.createCallbackList = v01; | |
JS1.localVariablesSyncIntegration = gS1 | |
}); | |
var Om = Y((zS1) => { | |
Object.defineProperty(zS1, "__esModule", { | |
value: !0 | |
}); | |
var NS1 = KS1(), | |
Xt2 = NS1.LocalVariablesSync, | |
Yt2 = NS1.localVariablesSyncIntegration; | |
zS1.LocalVariables = Xt2; | |
zS1.localVariablesIntegration = Yt2 | |
}); | |
var mm = Y((vS1) => { | |
Object.defineProperty(vS1, "__esModule", { | |
value: !0 | |
}); | |
var QS1 = B1("fs"), | |
fS1 = B1("path"), | |
qS1 = V4(), | |
E01, RS1 = "Modules"; | |
function Ht2() { | |
try { | |
return B1.cache ? Object.keys(B1.cache) : [] | |
} catch (I) { | |
return [] | |
} | |
} | |
function Ft2() { | |
let I = B1.main && B1.main.paths || [], | |
d = Ht2(), | |
G = {}, | |
Z = {}; | |
return d.forEach((C) => { | |
let W = C, | |
w = () => { | |
let B = W; | |
if (W = fS1.dirname(B), !W || B === W || Z[B]) return; | |
if (I.indexOf(W) < 0) return w(); | |
let A = fS1.join(B, "package.json"); | |
if (Z[B] = !0, !QS1.existsSync(A)) return w(); | |
try { | |
let V = JSON.parse(QS1.readFileSync(A, "utf8")); | |
G[V.name] = V.version | |
} catch (V) {} | |
}; | |
w() | |
}), G | |
} | |
function gt2() { | |
if (!E01) E01 = Ft2(); | |
return E01 | |
} | |
var Jt2 = () => { | |
return { | |
name: RS1, | |
setupOnce() {}, | |
processEvent(I) { | |
return I.modules = { | |
...I.modules, | |
...gt2() | |
}, I | |
} | |
} | |
}, | |
US1 = qS1.defineIntegration(Jt2), | |
Kt2 = qS1.convertIntegrationFnToClass(RS1, US1); | |
vS1.Modules = Kt2; | |
vS1.modulesIntegration = US1 | |
}); | |
var S01 = Y((ES1) => { | |
Object.defineProperty(ES1, "__esModule", { | |
value: !0 | |
}); | |
var Qt2 = V4(), | |
lm = V0(), | |
M01 = AE(), | |
ft2 = 2000; | |
function qt2(I) { | |
lm.consoleSandbox(() => { | |
console.error(I) | |
}); | |
let d = Qt2.getClient(); | |
if (d === void 0) M01.DEBUG_BUILD && lm.logger.warn("No NodeClient was defined, we are exiting the process now."), global.process.exit(1); | |
let G = d.getOptions(), | |
Z = G && G.shutdownTimeout && G.shutdownTimeout > 0 && G.shutdownTimeout || ft2; | |
d.close(Z).then((C) => { | |
if (!C) M01.DEBUG_BUILD && lm.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"); | |
global.process.exit(1) | |
}, (C) => { | |
M01.DEBUG_BUILD && lm.logger.error(C) | |
}) | |
} | |
ES1.logAndExitProcess = qt2 | |
}); | |
var hm = Y((PS1) => { | |
Object.defineProperty(PS1, "__esModule", { | |
value: !0 | |
}); | |
var bm = V4(), | |
Ut2 = V0(), | |
vt2 = AE(), | |
MS1 = S01(), | |
SS1 = "OnUncaughtException", | |
Et2 = (I = {}) => { | |
let d = { | |
exitEvenIfOtherHandlersAreRegistered: !0, | |
...I | |
}; | |
return { | |
name: SS1, | |
setupOnce() {}, | |
setup(G) { | |
global.process.on("uncaughtException", yS1(G, d)) | |
} | |
} | |
}, | |
LS1 = bm.defineIntegration(Et2), | |
Mt2 = bm.convertIntegrationFnToClass(SS1, LS1); | |
function yS1(I, d) { | |
let Z = !1, | |
C = !1, | |
W = !1, | |
w, B = I.getOptions(); | |
return Object.assign((A) => { | |
let V = MS1.logAndExitProcess; | |
if (d.onFatalError) V = d.onFatalError; | |
else if (B.onFatalError) V = B.onFatalError; | |
let _ = global.process.listeners("uncaughtException").reduce((g, J) => { | |
if (J.name === "domainUncaughtExceptionClear" || J.tag && J.tag === "sentry_tracingErrorCallback" || J._errorHandler) return g; | |
else return g + 1 | |
}, 0) === 0, | |
F = d.exitEvenIfOtherHandlersAreRegistered || _; | |
if (!Z) { | |
if (w = A, Z = !0, bm.getClient() === I) bm.captureException(A, { | |
originalException: A, | |
captureContext: { | |
level: "fatal" | |
}, | |
mechanism: { | |
handled: !1, | |
type: "onuncaughtexception" | |
} | |
}); | |
if (!W && F) W = !0, V(A) | |
} else if (F) { | |
if (W) vt2.DEBUG_BUILD && Ut2.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"), MS1.logAndExitProcess(A); | |
else if (!C) C = !0, setTimeout(() => { | |
if (!W) W = !0, V(w, A) | |
}, 2000) | |
} | |
}, { | |
_errorHandler: !0 | |
}) | |
} | |
PS1.OnUncaughtException = Mt2; | |
PS1.makeErrorHandler = yS1; | |
PS1.onUncaughtExceptionIntegration = LS1 | |
}); | |
var km = Y((mS1) => { | |
Object.defineProperty(mS1, "__esModule", { | |
value: !0 | |
}); | |
var jm = V4(), | |
$S1 = V0(), | |
Pt2 = S01(), | |
uS1 = "OnUnhandledRejection", | |
$t2 = (I = {}) => { | |
let d = I.mode || "warn"; | |
return { | |
name: uS1, | |
setupOnce() {}, | |
setup(G) { | |
global.process.on("unhandledRejection", OS1(G, { | |
mode: d | |
})) | |
} | |
} | |
}, | |
TS1 = jm.defineIntegration($t2), | |
ut2 = jm.convertIntegrationFnToClass(uS1, TS1); | |
function OS1(I, d) { | |
return function G(Z, C) { | |
if (jm.getClient() !== I) return; | |
jm.captureException(Z, { | |
originalException: C, | |
captureContext: { | |
extra: { | |
unhandledPromiseRejection: !0 | |
} | |
}, | |
mechanism: { | |
handled: !1, | |
type: "onunhandledrejection" | |
} | |
}), Tt2(Z, d) | |
} | |
} | |
function Tt2(I, d) { | |
let G = "This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:"; | |
if (d.mode === "warn") $S1.consoleSandbox(() => { | |
console.warn(G), console.error(I && I.stack ? I.stack : I) | |
}); | |
else if (d.mode === "strict") $S1.consoleSandbox(() => { | |
console.warn(G) | |
}), Pt2.logAndExitProcess(I) | |
} | |
mS1.OnUnhandledRejection = ut2; | |
mS1.makeUnhandledPromiseHandler = OS1; | |
mS1.onUnhandledRejectionIntegration = TS1 | |
}); | |
var xm = Y((kS1) => { | |
Object.defineProperty(kS1, "__esModule", { | |
value: !0 | |
}); | |
var bt2 = B1("http"), | |
ht2 = B1("url"), | |
lS1 = V4(), | |
LN = V0(), | |
bS1 = "Spotlight", | |
jt2 = (I = {}) => { | |
let d = { | |
sidecarUrl: I.sidecarUrl || "http://localhost:8969/stream" | |
}; | |
return { | |
name: bS1, | |
setupOnce() {}, | |
setup(G) { | |
if (typeof process === "object" && process.env) LN.logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"); | |
xt2(G, d) | |
} | |
} | |
}, | |
hS1 = lS1.defineIntegration(jt2), | |
kt2 = lS1.convertIntegrationFnToClass(bS1, hS1); | |
function xt2(I, d) { | |
let G = ct2(d.sidecarUrl); | |
if (!G) return; | |
let Z = 0; | |
if (typeof I.on !== "function") { | |
LN.logger.warn("[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)"); | |
return | |
} | |
I.on("beforeEnvelope", (C) => { | |
if (Z > 3) { | |
LN.logger.warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests"); | |
return | |
} | |
let W = LN.serializeEnvelope(C), | |
B = jS1()({ | |
method: "POST", | |
path: G.pathname, | |
hostname: G.hostname, | |
port: G.port, | |
headers: { | |
"Content-Type": "application/x-sentry-envelope" | |
} | |
}, (A) => { | |
A.on("data", () => {}), A.on("end", () => {}), A.setEncoding("utf8") | |
}); | |
B.on("error", () => { | |
Z++, LN.logger.warn("[Spotlight] Failed to send envelope to Spotlight Sidecar") | |
}), B.write(W), B.end() | |
}) | |
} | |
function ct2(I) { | |
try { | |
return new ht2.URL(`${I}`) | |
} catch (d) { | |
LN.logger.warn(`[Spotlight] Invalid sidecar URL: ${I}`); | |
return | |
} | |
} | |
function jS1() { | |
let { | |
request: I | |
} = bt2; | |
if (pt2(I)) return I.__sentry_original__; | |
return I | |
} | |
function pt2(I) { | |
return "__sentry_original__" in I | |
} | |
kS1.Spotlight = kt2; | |
kS1.getNativeHttpRequest = jS1; | |
kS1.spotlightIntegration = hS1 | |
}); | |
var pm = Y((xS1) => { | |
var { | |
_optionalChain: cm | |
} = V0(); | |
Object.defineProperty(xS1, "__esModule", { | |
value: !0 | |
}); | |
var g6 = V4(), | |
SF = V0(), | |
at2 = UF(); | |
xS1.ChannelName = void 0; | |
(function(I) { | |
I.RequestCreate = "undici:request:create"; | |
let G = "undici:request:headers"; | |
I.RequestEnd = G; | |
let Z = "undici:request:error"; | |
I.RequestError = Z | |
})(xS1.ChannelName || (xS1.ChannelName = {})); | |
var st2 = (I) => { | |
return new nI(I) | |
}, | |
ot2 = g6.defineIntegration(st2); | |
class nI { | |
static __initStatic() { | |
this.id = "Undici" | |
} | |
__init() { | |
this.name = nI.id | |
} | |
__init2() { | |
this._createSpanUrlMap = new SF.LRUMap(100) | |
} | |
__init3() { | |
this._headersUrlMap = new SF.LRUMap(100) | |
} | |
constructor(I = {}) { | |
nI.prototype.__init.call(this), nI.prototype.__init2.call(this), nI.prototype.__init3.call(this), nI.prototype.__init4.call(this), nI.prototype.__init5.call(this), nI.prototype.__init6.call(this), this._options = { | |
breadcrumbs: I.breadcrumbs === void 0 ? !0 : I.breadcrumbs, | |
tracing: I.tracing, | |
shouldCreateSpanForRequest: I.shouldCreateSpanForRequest | |
} | |
} | |
setupOnce(I) { | |
if (at2.NODE_VERSION.major < 16) return; | |
let d; | |
try { | |
d = B1("diagnostics_channel") | |
} catch (G) {} | |
if (!d || !d.subscribe) return; | |
d.subscribe(xS1.ChannelName.RequestCreate, this._onRequestCreate), d.subscribe(xS1.ChannelName.RequestEnd, this._onRequestEnd), d.subscribe(xS1.ChannelName.RequestError, this._onRequestError) | |
} | |
_shouldCreateSpan(I) { | |
if (this._options.tracing === !1 || this._options.tracing === void 0 && !g6.hasTracingEnabled()) return !1; | |
if (this._options.shouldCreateSpanForRequest === void 0) return !0; | |
let d = this._createSpanUrlMap.get(I); | |
if (d !== void 0) return d; | |
let G = this._options.shouldCreateSpanForRequest(I); | |
return this._createSpanUrlMap.set(I, G), G | |
} | |
__init4() { | |
this._onRequestCreate = (I) => { | |
if (!cm([g6.getClient, "call", (X) => X(), "optionalAccess", (X) => X.getIntegration, "call", (X) => X(nI)])) return; | |
let { | |
request: d | |
} = I, G = d.origin ? d.origin.toString() + d.path : d.path, Z = g6.getClient(); | |
if (!Z) return; | |
if (g6.isSentryRequestUrl(G, Z) || d.__sentry_span__ !== void 0) return; | |
let C = Z.getOptions(), | |
W = g6.getCurrentScope(), | |
w = g6.getIsolationScope(), | |
B = g6.getActiveSpan(), | |
A = this._shouldCreateSpan(G) ? tt2(B, d, G) : void 0; | |
if (A) d.__sentry_span__ = A; | |
if (((X) => { | |
if (C.tracePropagationTargets === void 0) return !0; | |
let _ = this._headersUrlMap.get(X); | |
if (_ !== void 0) return _; | |
let F = SF.stringMatchesSomePattern(X, C.tracePropagationTargets); | |
return this._headersUrlMap.set(X, F), F | |
})(G)) { | |
let { | |
traceId: X, | |
spanId: _, | |
sampled: F, | |
dsc: g | |
} = { | |
...w.getPropagationContext(), | |
...W.getPropagationContext() | |
}, J = A ? g6.spanToTraceHeader(A) : SF.generateSentryTraceHeader(X, _, F), K = SF.dynamicSamplingContextToSentryBaggageHeader(g || (A ? g6.getDynamicSamplingContextFromSpan(A) : g6.getDynamicSamplingContextFromClient(X, Z, W))); | |
et2(d, J, K) | |
} | |
} | |
} | |
__init5() { | |
this._onRequestEnd = (I) => { | |
if (!cm([g6.getClient, "call", (W) => W(), "optionalAccess", (W) => W.getIntegration, "call", (W) => W(nI)])) return; | |
let { | |
request: d, | |
response: G | |
} = I, Z = d.origin ? d.origin.toString() + d.path : d.path; | |
if (g6.isSentryRequestUrl(Z, g6.getClient())) return; | |
let C = d.__sentry_span__; | |
if (C) g6.setHttpStatus(C, G.statusCode), C.end(); | |
if (this._options.breadcrumbs) g6.addBreadcrumb({ | |
category: "http", | |
data: { | |
method: d.method, | |
status_code: G.statusCode, | |
url: Z | |
}, | |
type: "http" | |
}, { | |
event: "response", | |
request: d, | |
response: G | |
}) | |
} | |
} | |
__init6() { | |
this._onRequestError = (I) => { | |
if (!cm([g6.getClient, "call", (C) => C(), "optionalAccess", (C) => C.getIntegration, "call", (C) => C(nI)])) return; | |
let { | |
request: d | |
} = I, G = d.origin ? d.origin.toString() + d.path : d.path; | |
if (g6.isSentryRequestUrl(G, g6.getClient())) return; | |
let Z = d.__sentry_span__; | |
if (Z) Z.setStatus("internal_error"), Z.end(); | |
if (this._options.breadcrumbs) g6.addBreadcrumb({ | |
category: "http", | |
data: { | |
method: d.method, | |
url: G | |
}, | |
level: "error", | |
type: "http" | |
}, { | |
event: "error", | |
request: d | |
}) | |
} | |
} | |
} | |
nI.__initStatic(); | |
function et2(I, d, G) { | |
let Z; | |
if (Array.isArray(I.headers)) Z = I.headers.some((C) => C === "sentry-trace"); | |
else Z = I.headers.split(`\r | |
`).some((W) => W.startsWith("sentry-trace:")); | |
if (Z) return; | |
if (I.addHeader("sentry-trace", d), G) I.addHeader("baggage", G) | |
} | |
function tt2(I, d, G) { | |
let Z = SF.parseUrl(G), | |
C = d.method || "GET", | |
W = { | |
"http.method": C | |
}; | |
if (Z.search) W["http.query"] = Z.search; | |
if (Z.hash) W["http.fragment"] = Z.hash; | |
return cm([I, "optionalAccess", (w) => w.startChild, "call", (w) => w({ | |
op: "http.client", | |
origin: "auto.http.node.undici", | |
description: `${C} ${SF.getSanitizedUrlString(Z)}`, | |
data: W | |
})]) | |
} | |
xS1.Undici = nI; | |
xS1.nativeNodeFetchintegration = ot2 | |
}); | |
var L01 = Y((iS1) => { | |
Object.defineProperty(iS1, "__esModule", { | |
value: !0 | |
}); | |
var cS1 = B1("path"), | |
G14 = V0(); | |
function pS1(I) { | |
return I.replace(/^[A-Z]:/, "").replace(/\\/g, "/") | |
} | |
function Z14(I = process.argv[1] ? G14.dirname(process.argv[1]) : process.cwd(), d = cS1.sep === "\\") { | |
let G = d ? pS1(I) : I; | |
return (Z) => { | |
if (!Z) return; | |
let C = d ? pS1(Z) : Z, | |
{ | |
dir: W, | |
base: w, | |
ext: B | |
} = cS1.posix.parse(C); | |
if (B === ".js" || B === ".mjs" || B === ".cjs") w = w.slice(0, B.length * -1); | |
if (!W) W = "."; | |
let A = W.lastIndexOf("/node_modules"); | |
if (A > -1) return `${W.slice(A+14).replace(/\//g,".")}:${w}`; | |
if (W.startsWith(G)) { | |
let V = W.slice(G.length + 1).replace(/\//g, "."); | |
if (V) V += ":"; | |
return V += w, V | |
} | |
return w | |
} | |
} | |
iS1.createGetModuleFromFilename = Z14 | |
}); | |
var y01 = Y((oS1) => { | |
var { | |
_optionalChain: W14 | |
} = V0(); | |
Object.defineProperty(oS1, "__esModule", { | |
value: !0 | |
}); | |
var aG = V4(), | |
LF = V0(), | |
w14 = OM1(), | |
B14 = F01(), | |
A14 = Sm(), | |
V14 = Lm(), | |
X14 = Pm(), | |
Y14 = $m(), | |
_14 = Om(), | |
D14 = mm(), | |
H14 = hm(), | |
F14 = km(), | |
g14 = xm(), | |
J14 = pm(), | |
K14 = L01(), | |
N14 = K01(), | |
nS1 = [aG.inboundFiltersIntegration(), aG.functionToStringIntegration(), aG.linkedErrorsIntegration(), aG.requestDataIntegration(), A14.consoleIntegration(), Y14.httpIntegration(), J14.nativeNodeFetchintegration(), H14.onUncaughtExceptionIntegration(), F14.onUnhandledRejectionIntegration(), X14.contextLinesIntegration(), _14.localVariablesIntegration(), V14.nodeContextIntegration(), D14.modulesIntegration()]; | |
function rS1(I) { | |
let d = aG.getMainCarrier(), | |
G = W14([d, "access", (Z) => Z.__SENTRY__, "optionalAccess", (Z) => Z.integrations]) || []; | |
return [...nS1, ...G] | |
} | |
function z14(I = {}) { | |
if (w14.setNodeAsyncContextStrategy(), I.defaultIntegrations === void 0) I.defaultIntegrations = rS1(); | |
if (I.dsn === void 0 && process.env.SENTRY_DSN) I.dsn = process.env.SENTRY_DSN; | |
let d = process.env.SENTRY_TRACES_SAMPLE_RATE; | |
if (I.tracesSampleRate === void 0 && d) { | |
let Z = parseFloat(d); | |
if (isFinite(Z)) I.tracesSampleRate = Z | |
} | |
if (I.release === void 0) { | |
let Z = aS1(); | |
if (Z !== void 0) I.release = Z; | |
else I.autoSessionTracking = !1 | |
} | |
if (I.environment === void 0 && process.env.SENTRY_ENVIRONMENT) I.environment = process.env.SENTRY_ENVIRONMENT; | |
if (I.autoSessionTracking === void 0 && I.dsn !== void 0) I.autoSessionTracking = !0; | |
if (I.instrumenter === void 0) I.instrumenter = "sentry"; | |
let G = { | |
...I, | |
stackParser: LF.stackParserFromStackParserOptions(I.stackParser || sS1), | |
integrations: aG.getIntegrationsToSetup(I), | |
transport: I.transport || N14.makeNodeTransport | |
}; | |
if (aG.initAndBind(I.clientClass || B14.NodeClient, G), I.autoSessionTracking) f14(); | |
if (q14(), I.spotlight) { | |
let Z = aG.getClient(); | |
if (Z && Z.addIntegration) { | |
let C = Z.getOptions().integrations; | |
for (let W of C) Z.addIntegration(W); | |
Z.addIntegration(g14.spotlightIntegration({ | |
sidecarUrl: typeof I.spotlight === "string" ? I.spotlight : void 0 | |
})) | |
} | |
} | |
} | |
function Q14(I) { | |
if (I === void 0) return !1; | |
let d = I && I.getOptions(); | |
if (d && d.autoSessionTracking !== void 0) return d.autoSessionTracking; | |
return !1 | |
} | |
function aS1(I) { | |
if (process.env.SENTRY_RELEASE) return process.env.SENTRY_RELEASE; | |
if (LF.GLOBAL_OBJ.SENTRY_RELEASE && LF.GLOBAL_OBJ.SENTRY_RELEASE.id) return LF.GLOBAL_OBJ.SENTRY_RELEASE.id; | |
return process.env.GITHUB_SHA || process.env.COMMIT_REF || process.env.VERCEL_GIT_COMMIT_SHA || process.env.VERCEL_GITHUB_COMMIT_SHA || process.env.VERCEL_GITLAB_COMMIT_SHA || process.env.VERCEL_BITBUCKET_COMMIT_SHA || process.env.ZEIT_GITHUB_COMMIT_SHA || process.env.ZEIT_GITLAB_COMMIT_SHA || process.env.ZEIT_BITBUCKET_COMMIT_SHA || process.env.CF_PAGES_COMMIT_SHA || I | |
} | |
var sS1 = LF.createStackParser(LF.nodeStackLineParser(K14.createGetModuleFromFilename())); | |
function f14() { | |
aG.startSession(), process.on("beforeExit", () => { | |
let I = aG.getIsolationScope().getSession(); | |
if (I && !["exited", "crashed"].includes(I.status)) aG.endSession() | |
}) | |
} | |
function q14() { | |
let I = (process.env.SENTRY_USE_ENVIRONMENT || "").toLowerCase(); | |
if (!["false", "n", "no", "off", "0"].includes(I)) { | |
let d = process.env.SENTRY_TRACE, | |
G = process.env.SENTRY_BAGGAGE, | |
Z = LF.propagationContextFromHeaders(d, G); | |
aG.getCurrentScope().setPropagationContext(Z) | |
} | |
} | |
oS1.defaultIntegrations = nS1; | |
oS1.defaultStackParser = sS1; | |
oS1.getDefaultIntegrations = rS1; | |
oS1.getSentryRelease = aS1; | |
oS1.init = z14; | |
oS1.isAutoSessionTrackingEnabled = Q14 | |
}); | |
var tS1 = Y((eS1) => { | |
Object.defineProperty(eS1, "__esModule", { | |
value: !0 | |
}); | |
var im = B1("fs"), | |
P01 = B1("path"); | |
function L14(I) { | |
let d = P01.resolve(I); | |
if (!im.existsSync(d)) throw new Error(`Cannot read contents of ${d}. Directory does not exist.`); | |
if (!im.statSync(d).isDirectory()) throw new Error(`Cannot read contents of ${d}, because it is not a directory.`); | |
let G = (Z) => { | |
return im.readdirSync(Z).reduce((C, W) => { | |
let w = P01.join(Z, W); | |
if (im.statSync(w).isDirectory()) return C.concat(G(w)); | |
return C.push(w), C | |
}, []) | |
}; | |
return G(d).map((Z) => P01.relative(d, Z)) | |
} | |
eS1.deepReadDirSync = L14 | |
}); | |
var IL1 = Y((P14) => { | |
/*! @sentry/node 7.120.0 (611282e) | https://github.com/getsentry/sentry-javascript */ | |
P14.base64WorkerScript = "aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8qKgogKiBSZXR1cm5zIGEgZ2xvYmFsIHNpbmdsZXRvbiBjb250YWluZWQgaW4gdGhlIGdsb2JhbCBgX19TRU5UUllfX2Agb2JqZWN0LgogKgogKiBJZiB0aGUgc2luZ2xldG9uIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiBgX19TRU5UUllfX2AsIGl0IHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgZ2l2ZW4gZmFjdG9yeQogKiBmdW5jdGlvbiBhbmQgYWRkZWQgdG8gdGhlIGBfX1NFTlRSWV9fYCBvYmplY3QuCiAqCiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGdsb2JhbCBzaW5nbGV0b24gb24gX19TRU5UUllfXwogKiBAcGFyYW0gY3JlYXRvciBjcmVhdG9yIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBzaW5nbGV0b24gaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0IG9uIGBfX1NFTlRSWV9fYAogKiBAcGFyYW0gb2JqIChPcHRpb25hbCkgVGhlIGdsb2JhbCBvYmplY3Qgb24gd2hpY2ggdG8gbG9vayBmb3IgYF9fU0VOVFJZX19gLCBpZiBub3QgYEdMT0JBTF9PQkpgJ3MgcmV0dXJuIHZhbHVlCiAqIEByZXR1cm5zIHRoZSBzaW5nbGV0b24KICovCmZ1bmN0aW9uIGdldEdsb2JhbFNpbmdsZXRvbihuYW1lLCBjcmVhdG9yLCBvYmopIHsKICBjb25zdCBnYmwgPSAob2JqIHx8IEdMT0JBTF9PQkopIDsKICBjb25zdCBfX1NFTlRSWV9fID0gKGdibC5fX1NFTlRSWV9fID0gZ2JsLl9fU0VOVFJZX18gfHwge30pOwogIGNvbnN0IHNpbmdsZXRvbiA9IF9fU0VOVFJZX19bbmFtZV0gfHwgKF9fU0VOVFJZX19bbmFtZV0gPSBjcmVhdG9yKCkpOwogIHJldHVybiBzaW5nbGV0b247Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGlucHV0IGlzIGFscmVhZHkgYW4gYXJyYXksIGFuZCBpZiBpdCBpc24ndCwgd3JhcHMgaXQgaW4gb25lLgogKgogKiBAcGFyYW0gbWF5YmVBcnJheSBJbnB1dCB0byB0dXJuIGludG8gYW4gYXJyYXksIGlmIG5lY2Vzc2FyeQogKiBAcmV0dXJucyBUaGUgaW5wdXQsIGlmIGFscmVhZHkgYW4gYXJyYXksIG9yIGFuIGFycmF5IHdpdGggdGhlIGlucHV0IGFzIHRoZSBvbmx5IGVsZW1lbnQsIGlmIG5vdAogKi8KZnVuY3Rpb24gYXJyYXlpZnkobWF5YmVBcnJheSkgewogIHJldHVybiBBcnJheS5pc0FycmF5KG1heWJlQXJyYXkpID8gbWF5YmVBcnJheSA6IFttYXliZUFycmF5XTsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovCi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi8KCi8qKgogKiBIZWxwZXIgdG8gZGVjeWNsZSBqc29uIG9iamVjdHMKICovCmZ1bmN0aW9uIG1lbW9CdWlsZGVyKCkgewogIGNvbnN0IGhhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJzsKICBjb25zdCBpbm5lciA9IGhhc1dlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogW107CiAgZnVuY3Rpb24gbWVtb2l6ZShvYmopIHsKICAgIGlmIChoYXNXZWFrU2V0KSB7CiAgICAgIGlmIChpbm5lci5oYXMob2JqKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlubmVyLmFkZChvYmopOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2YKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgdmFsdWUgPSBpbm5lcltpXTsKICAgICAgaWYgKHZhbHVlID09PSBvYmopIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaW5uZXIucHVzaChvYmopOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gdW5tZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaW5uZXIuZGVsZXRlKG9iaik7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlubmVyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGlubmVyW2ldID09PSBvYmopIHsKICAgICAgICAgIGlubmVyLnNwbGljZShpLCAxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gW21lbW9pemUsIHVubWVtb2l6ZV07Cn0KCi8qKgogKiBSZWN1cnNpdmVseSBub3JtYWxpemVzIHRoZSBnaXZlbiBvYmplY3QuCiAqCiAqIC0gQ3JlYXRlcyBhIGNvcHkgdG8gcHJldmVudCBvcmlnaW5hbCBpbnB1dCBtdXRhdGlvbgogKiAtIFNraXBzIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMKICogLSBXaGVuIHN0cmluZ2lmeWluZywgY2FsbHMgYHRvSlNPTmAgaWYgaW1wbGVtZW50ZWQKICogLSBSZW1vdmVzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICogLSBUcmFuc2xhdGVzIG5vbi1zZXJpYWxpemFibGUgdmFsdWVzIChgdW5kZWZpbmVkYC9gTmFOYC9mdW5jdGlvbnMpIHRvIHNlcmlhbGl6YWJsZSBmb3JtYXQKICogLSBUcmFuc2xhdGVzIGtub3duIGdsb2JhbCBvYmplY3RzL2NsYXNzZXMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25zCiAqIC0gVGFrZXMgY2FyZSBvZiBgRXJyb3JgIG9iamVjdCBzZXJpYWxpemF0aW9uCiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgZGVwdGggb2YgZmluYWwgb3V0cHV0CiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICoKICogQHBhcmFtIGlucHV0IFRoZSBvYmplY3QgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGRlcHRoIFRoZSBtYXggZGVwdGggdG8gd2hpY2ggdG8gbm9ybWFsaXplIHRoZSBvYmplY3QuIChBbnl0aGluZyBkZWVwZXIgc3RyaW5naWZpZWQgd2hvbGUuKQogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBUaGUgbWF4IG51bWJlciBvZiBlbGVtZW50cyBvciBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgYXJyYXkgb3IKICogb2JqZWN0IGluIHRoZSBub3JtYWxsaXplZCBvdXRwdXQuCiAqIEByZXR1cm5zIEEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSBvYmplY3QsIG9yIGAiKipub24tc2VyaWFsaXphYmxlKioiYCBpZiBhbnkgZXJyb3JzIGFyZSB0aHJvd24gZHVyaW5nIG5vcm1hbGl6YXRpb24uCiAqLwovLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQpmdW5jdGlvbiBub3JtYWxpemUoaW5wdXQsIGRlcHRoID0gMTAwLCBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5KSB7CiAgdHJ5IHsKICAgIC8vIHNpbmNlIHdlJ3JlIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwsIHdlIGRvbid0IHByb3ZpZGUgYSBrZXkKICAgIHJldHVybiB2aXNpdCgnJywgaW5wdXQsIGRlcHRoLCBtYXhQcm9wZXJ0aWVzKTsKICB9IGNhdGNoIChlcnIpIHsKICAgIHJldHVybiB7IEVSUk9SOiBgKipub24tc2VyaWFsaXphYmxlKiogKCR7ZXJyfSlgIH07CiAgfQp9CgovKioKICogVmlzaXRzIGEgbm9kZSB0byBwZXJmb3JtIG5vcm1hbGl6YXRpb24gb24gaXQKICoKICogQHBhcmFtIGtleSBUaGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIG5vZGUKICogQHBhcmFtIHZhbHVlIFRoZSBub2RlIHRvIGJlIHZpc2l0ZWQKICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aAogKiBAcGFyYW0gbWF4UHJvcGVydGllcyBPcHRpb25hbCBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGluY2x1ZGVkIGluIGFueSBzaW5nbGUgb2JqZWN0L2FycmF5CiAqIEBwYXJhbSBtZW1vIE9wdGlvbmFsIE1lbW8gY2xhc3MgaGFuZGxpbmcgZGVjeWNsaW5nCiAqLwpmdW5jdGlvbiB2aXNpdCgKICBrZXksCiAgdmFsdWUsCiAgZGVwdGggPSArSW5maW5pdHksCiAgbWF4UHJvcGVydGllcyA9ICtJbmZpbml0eSwKICBtZW1vID0gbWVtb0J1aWxkZXIoKSwKKSB7CiAgY29uc3QgW21lbW9pemUsIHVubWVtb2l6ZV0gPSBtZW1vOwoKICAvLyBHZXQgdGhlIHNpbXBsZSBjYXNlcyBvdXQgb2YgdGhlIHdheSBmaXJzdAogIGlmICgKICAgIHZhbHVlID09IG51bGwgfHwgLy8gdGhpcyBtYXRjaGVzIG51bGwgYW5kIHVuZGVmaW5lZCAtPiBlcWVxIG5vdCBlcWVxZXEKICAgIChbJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZyddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkgJiYgIWlzTmFOJDEodmFsdWUpKQogICkgewogICAgcmV0dXJuIHZhbHVlIDsKICB9CgogIGNvbnN0IHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5VmFsdWUoa2V5LCB2YWx1ZSk7CgogIC8vIEFueXRoaW5nIHdlIGNvdWxkIHBvdGVudGlhbGx5IGRpZyBpbnRvIG1vcmUgKG9iamVjdHMgb3IgYXJyYXlzKSB3aWxsIGhhdmUgY29tZSBiYWNrIGFzIGAiW29iamVjdCBYWFhYXSJgLgogIC8vIEV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNlcmlhbGl6ZWQsIHNvIGlmIHdlIGRvbid0IHNlZSB0aGF0IHBhdHRlcm4sIHdlJ3JlIGRvbmUuCiAgaWYgKCFzdHJpbmdpZmllZC5zdGFydHNXaXRoKCdbb2JqZWN0ICcpKSB7CiAgICByZXR1cm4gc3RyaW5naWZpZWQ7CiAgfQoKICAvLyBGcm9tIGhlcmUgb24sIHdlIGNhbiBhc3NlcnQgdGhhdCBgdmFsdWVgIGlzIGVpdGhlciBhbiBvYmplY3Qgb3IgYW4gYXJyYXkuCgogIC8vIERvIG5vdCBub3JtYWxpemUgb2JqZWN0cyB0aGF0IHdlIGtub3cgaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gQXMgYSBnZW5lcmFsIHJ1bGUsIHRoZQogIC8vICJfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyIgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgdXNlZCBzcGFyaW5nbHkgYW5kIG9ubHkgc2hvdWxkIG9ubHkgYmUgc2V0IG9uIG9iamVjdHMgdGhhdAogIC8vIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuCiAgaWYgKCh2YWx1ZSApWydfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyddKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgLy8gV2UgY2FuIHNldCBgX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fYCBvbiBhbiBvYmplY3QgdG8gZW5zdXJlIHRoYXQgZnJvbSB0aGVyZQogIC8vIFdlIGtlZXAgYSBjZXJ0YWluIGFtb3VudCBvZiBkZXB0aC4KICAvLyBUaGlzIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSwgZS5nLiB3ZSB1c2UgaXQgZm9yIHRoZSByZWR1eCBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgd2UgZ2V0IGEgY2VydGFpbiBhbW91bnQgb2Ygc3RhdGUuCiAgY29uc3QgcmVtYWluaW5nRGVwdGggPQogICAgdHlwZW9mICh2YWx1ZSApWydfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX18nXSA9PT0gJ251bWJlcicKICAgICAgPyAoKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddICkKICAgICAgOiBkZXB0aDsKCiAgLy8gV2UncmUgYWxzbyBkb25lIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIG1heCBkZXB0aAogIGlmIChyZW1haW5pbmdEZXB0aCA9PT0gMCkgewogICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IGBzZXJpYWxpemVkYCBpcyBhIHN0cmluZyBvZiB0aGUgZm9ybSBgIltvYmplY3QgWFhYWF0iYC4gQ2xlYW4gaXQgdXAgc28gaXQncyBqdXN0IGAiW1hYWFhdImAuCiAgICByZXR1cm4gc3RyaW5naWZpZWQucmVwbGFjZSgnb2JqZWN0ICcsICcnKTsKICB9CgogIC8vIElmIHdlJ3ZlIGFscmVhZHkgdmlzaXRlZCB0aGlzIGJyYW5jaCwgYmFpbCBvdXQsIGFzIGl0J3MgY2lyY3VsYXIgcmVmZXJlbmNlLiBJZiBub3QsIG5vdGUgdGhhdCB3ZSdyZSBzZWVpbmcgaXQgbm93LgogIGlmIChtZW1vaXplKHZhbHVlKSkgewogICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nOwogIH0KCiAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIGB0b0pTT05gIG1ldGhvZCwgd2UgY2FsbCBpdCB0byBleHRyYWN0IG1vcmUgaW5mb3JtYXRpb24KICBjb25zdCB2YWx1ZVdpdGhUb0pTT04gPSB2YWx1ZSA7CiAgaWYgKHZhbHVlV2l0aFRvSlNPTiAmJiB0eXBlb2YgdmFsdWVXaXRoVG9KU09OLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykgewogICAgdHJ5IHsKICAgICAgY29uc3QganNvblZhbHVlID0gdmFsdWVXaXRoVG9KU09OLnRvSlNPTigpOwogICAgICAvLyBXZSBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGAudG9KU09OKClgIGluIGNhc2UgaXQgaGFzIGNpcmN1bGFyIHJlZmVyZW5jZXMKICAgICAgcmV0dXJuIHZpc2l0KCcnLCBqc29uVmFsdWUsIHJlbWFpbmluZ0RlcHRoIC0gMSwgbWF4UHJvcGVydGllcywgbWVtbyk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgLy8gcGFzcyAoVGhlIGJ1aWx0LWluIGB0b0pTT05gIGZhaWxlZCwgYnV0IHdlIGNhbiBzdGlsbCB0cnkgdG8gZG8gaXQgb3Vyc2VsdmVzKQogICAgfQogIH0KCiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGVpdGhlciBoYXZlIGFuIG9iamVjdCBvciBhbiBhcnJheSwgd2UgaGF2ZW4ndCBzZWVuIGl0IGJlZm9yZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIHJlY3Vyc2UKICAvLyBiZWNhdXNlIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIG1heCBkZXB0aC4gQ3JlYXRlIGFuIGFjY3VtdWxhdG9yIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2YgdmlzaXRpbmcgZWFjaAogIC8vIHByb3BlcnR5L2VudHJ5LCBhbmQga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHdlIGFkZCB0byBpdC4KICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fSkgOwogIGxldCBudW1BZGRlZCA9IDA7CgogIC8vIEJlZm9yZSB3ZSBiZWdpbiwgY29udmVydGBFcnJvcmAgYW5kYEV2ZW50YCBpbnN0YW5jZXMgaW50byBwbGFpbiBvYmplY3RzLCBzaW5jZSBzb21lIG9mIGVhY2ggb2YgdGhlaXIgcmVsZXZhbnQKICAvLyBwcm9wZXJ0aWVzIGFyZSBub24tZW51bWVyYWJsZSBhbmQgb3RoZXJ3aXNlIHdvdWxkIGdldCBtaXNzZWQuCiAgY29uc3QgdmlzaXRhYmxlID0gY29udmVydFRvUGxhaW5PYmplY3QodmFsdWUgKTsKCiAgZm9yIChjb25zdCB2aXNpdEtleSBpbiB2aXNpdGFibGUpIHsKICAgIC8vIEF2b2lkIGl0ZXJhdGluZyBvdmVyIGZpZWxkcyBpbiB0aGUgcHJvdG90eXBlIGlmIHRoZXkndmUgc29tZWhvdyBiZWVuIGV4cG9zZWQgdG8gZW51bWVyYXRpb24uCiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2aXNpdGFibGUsIHZpc2l0S2V5KSkgewogICAgICBjb250aW51ZTsKICAgIH0KCiAgICBpZiAobnVtQWRkZWQgPj0gbWF4UHJvcGVydGllcykgewogICAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9ICdbTWF4UHJvcGVydGllcyB+XSc7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIFJlY3Vyc2l2ZWx5IHZpc2l0IGFsbCB0aGUgY2hpbGQgbm9kZXMKICAgIGNvbnN0IHZpc2l0VmFsdWUgPSB2aXNpdGFibGVbdmlzaXRLZXldOwogICAgbm9ybWFsaXplZFt2aXNpdEtleV0gPSB2aXNpdCh2aXNpdEtleSwgdmlzaXRWYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKCiAgICBudW1BZGRlZCsrOwogIH0KCiAgLy8gT25jZSB3ZSd2ZSB2aXNpdGVkIGFsbCB0aGUgYnJhbmNoZXMsIHJlbW92ZSB0aGUgcGFyZW50IGZyb20gbWVtbyBzdG9yYWdlCiAgdW5tZW1vaXplKHZhbHVlKTsKCiAgLy8gUmV0dXJuIGFjY3VtdWxhdGVkIHZhbHVlcwogIHJldHVybiBub3JtYWxpemVkOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovCi8qKgogKiBTdHJpbmdpZnkgdGhlIGdpdmVuIHZhbHVlLiBIYW5kbGVzIHZhcmlvdXMga25vd24gc3BlY2lhbCB2YWx1ZXMgYW5kIHR5cGVzLgogKgogKiBOb3QgbWVhbnQgdG8gYmUgdXNlZCBvbiBzaW1wbGUgcHJpbWl0aXZlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFzIGl0IHdpbGwsIGZvciBleGFtcGxlLCB0dXJuCiAqIHRoZSBudW1iZXIgMTIzMSBpbnRvICJbT2JqZWN0IE51bWJlcl0iLCBub3Igb24gYG51bGxgLCBhcyBpdCB3aWxsIHRocm93LgogKgogKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHN0cmluZ2lmeQogKiBAcmV0dXJucyBBIHN0cmluZ2lmaWVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiB2YWx1ZQogKi8KZnVuY3Rpb24gc3RyaW5naWZ5VmFsdWUoCiAga2V5LAogIC8vIHRoaXMgdHlwZSBpcyBhIHRpbnkgYml0IG9mIGEgY2hlYXQsIHNpbmNlIHRoaXMgZnVuY3Rpb24gZG9lcyBoYW5kbGUgTmFOICh3aGljaCBpcyB0ZWNobmljYWxseSBhIG51bWJlciksIGJ1dCBmb3IKICAvLyBvdXIgaW50ZXJuYWwgdXNlLCBpdCdsbCBkbwogIHZhbHVlLAopIHsKICB0cnkgewogICAgaWYgKGtleSA9PT0gJ2RvbWFpbicgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWUgKS5fZXZlbnRzKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbl0nOwogICAgfQoKICAgIGlmIChrZXkgPT09ICdkb21haW5FbWl0dGVyJykgewogICAgICByZXR1cm4gJ1tEb21haW5FbWl0dGVyXSc7CiAgICB9CgogICAgLy8gSXQncyBzYWZlIHRvIHVzZSBgZ2xvYmFsYCwgYHdpbmRvd2AsIGFuZCBgZG9jdW1lbnRgIGhlcmUgaW4gdGhpcyBtYW5uZXIsIGFzIHdlIGFyZSBhc3NlcnRpbmcgdXNpbmcgYHR5cGVvZmAgZmlyc3QKICAgIC8vIHdoaWNoIHdvbid0IHRocm93IGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LgoKICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gZ2xvYmFsKSB7CiAgICAgIHJldHVybiAnW0dsb2JhbF0nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSA9PT0gd2luZG93KSB7CiAgICAgIHJldHVybiAnW1dpbmRvd10nOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMKICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBkb2N1bWVudCkgewogICAgICByZXR1cm4gJ1tEb2N1bWVudF0nOwogICAgfQoKICAgIGlmIChpc1Z1ZVZpZXdNb2RlbCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuICdbVnVlVmlld01vZGVsXSc7CiAgICB9CgogICAgLy8gUmVhY3QncyBTeW50aGV0aWNFdmVudCB0aGluZ3kKICAgIGlmIChpc1N5bnRoZXRpY0V2ZW50KHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tTeW50aGV0aWNFdmVudF0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkgewogICAgICByZXR1cm4gJ1tOYU5dJzsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBgW0Z1bmN0aW9uOiAke2dldEZ1bmN0aW9uTmFtZSh2YWx1ZSl9XWA7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHsKICAgICAgcmV0dXJuIGBbJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIHN0cmluZ2lmaWVkIEJpZ0ludHMgYXJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gcmVndWxhciBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGxhYmVsIHRoZW0gdG8gYXZvaWQgY29uZnVzaW9uCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgewogICAgICByZXR1cm4gYFtCaWdJbnQ6ICR7U3RyaW5nKHZhbHVlKX1dYDsKICAgIH0KCiAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBrbm9ja2VkIG91dCBhbGwgdGhlIHNwZWNpYWwgY2FzZXMgYW5kIHRoZSBwcmltaXRpdmVzLCBhbGwgd2UgaGF2ZSBsZWZ0IGFyZSBvYmplY3RzLiBTaW1wbHkgY2FzdGluZwogICAgLy8gdGhlbSB0byBzdHJpbmdzIG1lYW5zIHRoYXQgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2hpY2ggaGF2ZW4ndCBkZWZpbmVkIHRoZWlyIGB0b1N0cmluZ1RhZ2Agd2lsbCBqdXN0IGNvbWUgb3V0IGFzCiAgICAvLyBgIltvYmplY3QgT2JqZWN0XSJgLiBJZiB3ZSBpbnN0ZWFkIGxvb2sgYXQgdGhlIGNvbnN0cnVjdG9yJ3MgbmFtZSAod2hpY2ggaXMgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIGNsYXNzKSwKICAgIC8vIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCBvbmx5IHBsYWluIG9iamVjdHMgY29tZSBvdXQgdGhhdCB3YXkuCiAgICBjb25zdCBvYmpOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKTsKCiAgICAvLyBIYW5kbGUgSFRNTCBFbGVtZW50cwogICAgaWYgKC9eSFRNTChcdyopRWxlbWVudCQvLnRlc3Qob2JqTmFtZSkpIHsKICAgICAgcmV0dXJuIGBbSFRNTEVsZW1lbnQ6ICR7b2JqTmFtZX1dYDsKICAgIH0KCiAgICByZXR1cm4gYFtvYmplY3QgJHtvYmpOYW1lfV1gOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWA7CiAgfQp9Ci8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqLwoKZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHZhbHVlKSB7CiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTsKCiAgcmV0dXJuIHByb3RvdHlwZSA/IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lIDogJ251bGwgcHJvdG90eXBlJzsKfQoKLyoqCiAqIE5vcm1hbGl6ZXMgVVJMcyBpbiBleGNlcHRpb25zIGFuZCBzdGFja3RyYWNlcyB0byBhIGJhc2UgcGF0aCBzbyBTZW50cnkgY2FuIGZpbmdlcnByaW50CiAqIGFjcm9zcyBwbGF0Zm9ybXMgYW5kIHdvcmtpbmcgZGlyZWN0b3J5LgogKgogKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gYmUgbm9ybWFsaXplZC4KICogQHBhcmFtIGJhc2VQYXRoIFRoZSBhcHBsaWNhdGlvbiBiYXNlIHBhdGguCiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIFVSTC4KICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVVybFRvQmFzZSh1cmwsIGJhc2VQYXRoKSB7CiAgY29uc3QgZXNjYXBlZEJhc2UgPSBiYXNlUGF0aAogICAgLy8gQmFja3NsYXNoIHRvIGZvcndhcmQKICAgIC5yZXBsYWNlKC9cXC9nLCAnLycpCiAgICAvLyBFc2NhcGUgUmVnRXhwIHNwZWNpYWwgY2hhcmFjdGVycwogICAgLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrKj8uXS9nLCAnXFwkJicpOwoKICBsZXQgbmV3VXJsID0gdXJsOwogIHRyeSB7CiAgICBuZXdVcmwgPSBkZWNvZGVVUkkodXJsKTsKICB9IGNhdGNoIChfT28pIHsKICAgIC8vIFNvbWV0aW1lIHRoaXMgYnJlYWtzCiAgfQogIHJldHVybiAoCiAgICBuZXdVcmwKICAgICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgICAgLnJlcGxhY2UoL3dlYnBhY2s6XC8/L2csICcnKSAvLyBSZW1vdmUgaW50ZXJtZWRpYXRlIGJhc2UgcGF0aAogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNlbnRyeS1pbnRlcm5hbC9zZGsvbm8tcmVnZXhwLWNvbnN0cnVjdG9yCiAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYChmaWxlOi8vKT8vKiR7ZXNjYXBlZEJhc2V9LypgLCAnaWcnKSwgJ2FwcDovLy8nKQogICk7Cn0KCi8vIFNsaWdodGx5IG1vZGlmaWVkIChubyBJRTggc3VwcG9ydCwgRVM2KSBhbmQgdHJhbnNjcmliZWQgdG8gVHlwZVNjcmlwdAoKLy8gU3BsaXQgYSBmaWxlbmFtZSBpbnRvIFtyb290LCBkaXIsIGJhc2VuYW1lLCBleHRdLCB1bml4IHZlcnNpb24KLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy4KY29uc3Qgc3BsaXRQYXRoUmUgPSAvXihcUys6XFx8XC8/KShbXHNcU10qPykoKD86XC57MSwyfXxbXi9cXF0rP3wpKFwuW14uL1xcXSp8KSkoPzpbL1xcXSopJC87Ci8qKiBKU0RvYyAqLwpmdW5jdGlvbiBzcGxpdFBhdGgoZmlsZW5hbWUpIHsKICAvLyBUcnVuY2F0ZSBmaWxlcyBuYW1lcyBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIHRvIGF2b2lkIHJlZ2V4IGRvcwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC84NzM3I2Rpc2N1c3Npb25fcjEyODU3MTkxNzIKICBjb25zdCB0cnVuY2F0ZWQgPSBmaWxlbmFtZS5sZW5ndGggPiAxMDI0ID8gYDx0cnVuY2F0ZWQ+JHtmaWxlbmFtZS5zbGljZSgtMTAyNCl9YCA6IGZpbGVuYW1lOwogIGNvbnN0IHBhcnRzID0gc3BsaXRQYXRoUmUuZXhlYyh0cnVuY2F0ZWQpOwogIHJldHVybiBwYXJ0cyA/IHBhcnRzLnNsaWNlKDEpIDogW107Cn0KCi8qKiBKU0RvYyAqLwpmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHsKICBjb25zdCByZXN1bHQgPSBzcGxpdFBhdGgocGF0aCk7CiAgY29uc3Qgcm9vdCA9IHJlc3VsdFswXTsKICBsZXQgZGlyID0gcmVzdWx0WzFdOwoKICBpZiAoIXJvb3QgJiYgIWRpcikgewogICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyCiAgICByZXR1cm4gJy4nOwogIH0KCiAgaWYgKGRpcikgewogICAgLy8gSXQgaGFzIGEgZGlybmFtZSwgc3RyaXAgdHJhaWxpbmcgc2xhc2gKICAgIGRpciA9IGRpci5zbGljZSgwLCBkaXIubGVuZ3RoIC0gMSk7CiAgfQoKICByZXR1cm4gcm9vdCArIGRpcjsKfQoKLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovCgovKiogU3luY1Byb21pc2UgaW50ZXJuYWwgc3RhdGVzICovCnZhciBTdGF0ZXM7IChmdW5jdGlvbiAoU3RhdGVzKSB7CiAgLyoqIFBlbmRpbmcgKi8KICBjb25zdCBQRU5ESU5HID0gMDsgU3RhdGVzW1N0YXRlc1siUEVORElORyJdID0gUEVORElOR10gPSAiUEVORElORyI7CiAgLyoqIFJlc29sdmVkIC8gT0sgKi8KICBjb25zdCBSRVNPTFZFRCA9IDE7IFN0YXRlc1tTdGF0ZXNbIlJFU09MVkVEIl0gPSBSRVNPTFZFRF0gPSAiUkVTT0xWRUQiOwogIC8qKiBSZWplY3RlZCAvIEVycm9yICovCiAgY29uc3QgUkVKRUNURUQgPSAyOyBTdGF0ZXNbU3RhdGVzWyJSRUpFQ1RFRCJdID0gUkVKRUNURURdID0gIlJFSkVDVEVEIjsKfSkoU3RhdGVzIHx8IChTdGF0ZXMgPSB7fSkpOwoKLy8gT3ZlcmxvYWRzIHNvIHdlIGNhbiBjYWxsIHJlc29sdmVkU3luY1Byb21pc2Ugd2l0aG91dCBhcmd1bWVudHMgYW5kIGdlbmVyaWMgYXJndW1lbnQKCi8qKgogKiBDcmVhdGVzIGEgcmVzb2x2ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlc29sdmUgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVzb2x2ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZXNvbHZlZFN5bmNQcm9taXNlKHZhbHVlKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShyZXNvbHZlID0+IHsKICAgIHJlc29sdmUodmFsdWUpOwogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIHJlamVjdGVkIHN5bmMgcHJvbWlzZS4KICoKICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZWplY3QgdGhlIHByb21pc2Ugd2l0aAogKiBAcmV0dXJucyB0aGUgcmVqZWN0ZWQgc3luYyBwcm9taXNlCiAqLwpmdW5jdGlvbiByZWplY3RlZFN5bmNQcm9taXNlKHJlYXNvbikgewogIHJldHVybiBuZXcgU3luY1Byb21pc2UoKF8sIHJlamVjdCkgPT4gewogICAgcmVqZWN0KHJlYXNvbik7CiAgfSk7Cn0KCi8qKgogKiBUaGVuYWJsZSBjbGFzcyB0aGF0IGJlaGF2ZXMgbGlrZSBhIFByb21pc2UgYW5kIGZvbGxvd3MgaXQncyBpbnRlcmZhY2UKICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5CiAqLwpjbGFzcyBTeW5jUHJvbWlzZSB7CgogICBjb25zdHJ1Y3RvcigKICAgIGV4ZWN1dG9yLAogICkge1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQzLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDQuY2FsbCh0aGlzKTsKICAgIHRoaXMuX3N0YXRlID0gU3RhdGVzLlBFTkRJTkc7CiAgICB0aGlzLl9oYW5kbGVycyA9IFtdOwoKICAgIHRyeSB7CiAgICAgIGV4ZWN1dG9yKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRoaXMuX3JlamVjdChlKTsKICAgIH0KICB9CgogIC8qKiBKU0RvYyAqLwogICB0aGVuKAogICAgb25mdWxmaWxsZWQsCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goWwogICAgICAgIGZhbHNlLAogICAgICAgIHJlc3VsdCA9PiB7CiAgICAgICAgICBpZiAoIW9uZnVsZmlsbGVkKSB7CiAgICAgICAgICAgIC8vIFRPRE86IMKvXF8o44OEKV8vwq8KICAgICAgICAgICAgLy8gVE9ETzogRklYTUUKICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQgKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZChyZXN1bHQpKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIHJlamVjdChlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVhc29uID0+IHsKICAgICAgICAgIGlmICghb25yZWplY3RlZCkgewogICAgICAgICAgICByZWplY3QocmVhc29uKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgcmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgXSk7CiAgICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogICAgfSk7CiAgfQoKICAvKiogSlNEb2MgKi8KICAgY2F0Y2goCiAgICBvbnJlamVjdGVkLAogICkgewogICAgcmV0dXJuIHRoaXMudGhlbih2YWwgPT4gdmFsLCBvbnJlamVjdGVkKTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBmaW5hbGx5KG9uZmluYWxseSkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCB2YWw7CiAgICAgIGxldCBpc1JlamVjdGVkOwoKICAgICAgcmV0dXJuIHRoaXMudGhlbigKICAgICAgICB2YWx1ZSA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gZmFsc2U7CiAgICAgICAgICB2YWwgPSB2YWx1ZTsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7CiAgICAgICAgICB2YWwgPSByZWFzb247CiAgICAgICAgICBpZiAob25maW5hbGx5KSB7CiAgICAgICAgICAgIG9uZmluYWxseSgpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGlzUmVqZWN0ZWQpIHsKICAgICAgICAgIHJlamVjdCh2YWwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmVzb2x2ZSh2YWwgKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0KCkge3RoaXMuX3Jlc29sdmUgPSAodmFsdWUpID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQyKCkge3RoaXMuX3JlamVjdCA9IChyZWFzb24pID0+IHsKICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVKRUNURUQsIHJlYXNvbik7CiAgfTt9CgogIC8qKiBKU0RvYyAqLwogICAgX19pbml0MygpIHt0aGlzLl9zZXRSZXN1bHQgPSAoc3RhdGUsIHZhbHVlKSA9PiB7CiAgICBpZiAodGhpcy5fc3RhdGUgIT09IFN0YXRlcy5QRU5ESU5HKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHsKICAgICAgdm9pZCAodmFsdWUgKS50aGVuKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlOwogICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsKCiAgICB0aGlzLl9leGVjdXRlSGFuZGxlcnMoKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQ0KCkge3RoaXMuX2V4ZWN1dGVIYW5kbGVycyA9ICgpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGNhY2hlZEhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuc2xpY2UoKTsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHsKICAgICAgaWYgKGhhbmRsZXJbMF0pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7CiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlcwogICAgICAgIGhhbmRsZXJbMV0odGhpcy5fdmFsdWUgKTsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHsKICAgICAgICBoYW5kbGVyWzJdKHRoaXMuX3ZhbHVlKTsKICAgICAgfQoKICAgICAgaGFuZGxlclswXSA9IHRydWU7CiAgICB9KTsKICB9O30KfQoKLyoqCiAqIENyZWF0ZXMgYW4gbmV3IFByb21pc2VCdWZmZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBsaW1pdAogKiBAcGFyYW0gbGltaXQgbWF4IG51bWJlciBvZiBwcm9taXNlcyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGJ1ZmZlcgogKi8KZnVuY3Rpb24gbWFrZVByb21pc2VCdWZmZXIobGltaXQpIHsKICBjb25zdCBidWZmZXIgPSBbXTsKCiAgZnVuY3Rpb24gaXNSZWFkeSgpIHsKICAgIHJldHVybiBsaW1pdCA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlci5sZW5ndGggPCBsaW1pdDsKICB9CgogIC8qKgogICAqIFJlbW92ZSBhIHByb21pc2UgZnJvbSB0aGUgcXVldWUuCiAgICoKICAgKiBAcGFyYW0gdGFzayBDYW4gYmUgYW55IFByb21pc2VMaWtlPFQ+CiAgICogQHJldHVybnMgUmVtb3ZlZCBwcm9taXNlLgogICAqLwogIGZ1bmN0aW9uIHJlbW92ZSh0YXNrKSB7CiAgICByZXR1cm4gYnVmZmVyLnNwbGljZShidWZmZXIuaW5kZXhPZih0YXNrKSwgMSlbMF07CiAgfQoKICAvKioKICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuCiAgICoKICAgKiBAcGFyYW0gdGFza1Byb2R1Y2VyIEEgZnVuY3Rpb24gcHJvZHVjaW5nIGFueSBQcm9taXNlTGlrZTxUPjsgSW4gcHJldmlvdXMgdmVyc2lvbnMgdGhpcyB1c2VkIHRvIGJlIGB0YXNrOgogICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yCiAgICogICAgICAgIGZ1bmN0aW9ucyB0aGVyZWZvcmUgcmFuIGltbWVkaWF0ZWx5LiBUaHVzLCBldmVuIGlmIHRoZSBidWZmZXIgd2FzIGZ1bGwsIHRoZSBhY3Rpb24gc3RpbGwgaGFwcGVuZWQuIEJ5CiAgICogICAgICAgIHJlcXVpcmluZyB0aGUgcHJvbWlzZSB0byBiZSB3cmFwcGVkIGluIGEgZnVuY3Rpb24sIHdlIGNhbiBkZWZlciBwcm9taXNlIGNyZWF0aW9uIHVudGlsIGFmdGVyIHRoZSBidWZmZXIKICAgKiAgICAgICAgbGltaXQgY2hlY2suCiAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gYWRkKHRhc2tQcm9kdWNlcikgewogICAgaWYgKCFpc1JlYWR5KCkpIHsKICAgICAgcmV0dXJuIHJlamVjdGVkU3luY1Byb21pc2UobmV3IFNlbnRyeUVycm9yKCdOb3QgYWRkaW5nIFByb21pc2UgYmVjYXVzZSBidWZmZXIgbGltaXQgd2FzIHJlYWNoZWQuJykpOwogICAgfQoKICAgIC8vIHN0YXJ0IHRoZSB0YXNrIGFuZCBhZGQgaXRzIHByb21pc2UgdG8gdGhlIHF1ZXVlCiAgICBjb25zdCB0YXNrID0gdGFza1Byb2R1Y2VyKCk7CiAgICBpZiAoYnVmZmVyLmluZGV4T2YodGFzaykgPT09IC0xKSB7CiAgICAgIGJ1ZmZlci5wdXNoKHRhc2spOwogICAgfQogICAgdm9pZCB0YXNrCiAgICAgIC50aGVuKCgpID0+IHJlbW92ZSh0YXNrKSkKICAgICAgLy8gVXNlIGB0aGVuKG51bGwsIHJlamVjdGlvbkhhbmRsZXIpYCByYXRoZXIgdGhhbiBgY2F0Y2gocmVqZWN0aW9uSGFuZGxlcilgIHNvIHRoYXQgd2UgY2FuIHVzZSBgUHJvbWlzZUxpa2VgCiAgICAgIC8vIHJhdGhlciB0aGFuIGBQcm9taXNlYC4gYFByb21pc2VMaWtlYCBkb2Vzbid0IGhhdmUgYSBgLmNhdGNoYCBtZXRob2QsIG1ha2luZyBpdHMgcG9seWZpbGwgc21hbGxlci4gKEVTNSBkaWRuJ3QKICAgICAgLy8gaGF2ZSBwcm9taXNlcywgc28gVFMgaGFzIHRvIHBvbHlmaWxsIHdoZW4gZG93bi1jb21waWxpbmcuKQogICAgICAudGhlbihudWxsLCAoKSA9PgogICAgICAgIHJlbW92ZSh0YXNrKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGByZW1vdmUoKWAgc3RhcnRzIGEgbmV3IHByb21pc2UgY2hhaW4uCiAgICAgICAgfSksCiAgICAgICk7CiAgICByZXR1cm4gdGFzazsKICB9CgogIC8qKgogICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KICAgKgogICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBxdWV1ZSBpcyBzdGlsbCBub24tZW1wdHkuIFBhc3NpbmcgYDBgIChvcgogICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0bwogICAqIGB0cnVlYC4KICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSBvciBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmQKICAgKiBgZmFsc2VgIG90aGVyd2lzZQogICAqLwogIGZ1bmN0aW9uIGRyYWluKHRpbWVvdXQpIHsKICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgY291bnRlciA9IGJ1ZmZlci5sZW5ndGg7CgogICAgICBpZiAoIWNvdW50ZXIpIHsKICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTsKICAgICAgfQoKICAgICAgLy8gd2FpdCBmb3IgYHRpbWVvdXRgIG1zIGFuZCB0aGVuIHJlc29sdmUgdG8gYGZhbHNlYCAoaWYgbm90IGNhbmNlbGxlZCBmaXJzdCkKICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHsKICAgICAgICAgIHJlc29sdmUoZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwgdGltZW91dCk7CgogICAgICAvLyBpZiBhbGwgcHJvbWlzZXMgcmVzb2x2ZSBpbiB0aW1lLCBjYW5jZWwgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRvIGB0cnVlYAogICAgICBidWZmZXIuZm9yRWFjaChpdGVtID0+IHsKICAgICAgICB2b2lkIHJlc29sdmVkU3luY1Byb21pc2UoaXRlbSkudGhlbigoKSA9PiB7CiAgICAgICAgICBpZiAoIS0tY291bnRlcikgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTsKICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9LCByZWplY3QpOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgcmV0dXJuIHsKICAgICQ6IGJ1ZmZlciwKICAgIGFkZCwKICAgIGRyYWluLAogIH07Cn0KCmNvbnN0IE9ORV9TRUNPTkRfSU5fTVMgPSAxMDAwOwoKLyoqCiAqIEEgcGFydGlhbCBkZWZpbml0aW9uIG9mIHRoZSBbUGVyZm9ybWFuY2UgV2ViIEFQSV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlfQogKiBmb3IgYWNjZXNzaW5nIGEgaGlnaC1yZXNvbHV0aW9uIG1vbm90b25pYyBjbG9jay4KICovCgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS4KICoKICogVE9ETyh2OCk6IFJldHVybiB0eXBlIHNob3VsZCBiZSByb3VuZGVkLgogKi8KZnVuY3Rpb24gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpIHsKICByZXR1cm4gRGF0ZS5ub3coKSAvIE9ORV9TRUNPTkRfSU5fTVM7Cn0KCi8qKgogKiBSZXR1cm5zIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBQZXJmb3JtYW5jZSBBUEkgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiwgb3IgdW5kZWZpbmVkIGZvciBicm93c2VycyB0aGF0IGRvIG5vdAogKiBzdXBwb3J0IHRoZSBBUEkuCiAqCiAqIFdyYXBwaW5nIHRoZSBuYXRpdmUgQVBJIHdvcmtzIGFyb3VuZCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBmcm9tIGRpZmZlcmVudCBicm93c2Vycy4KICovCmZ1bmN0aW9uIGNyZWF0ZVVuaXhUaW1lc3RhbXBJblNlY29uZHNGdW5jKCkgewogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIGRhdGVUaW1lc3RhbXBJblNlY29uZHM7CiAgfQoKICAvLyBTb21lIGJyb3dzZXIgYW5kIGVudmlyb25tZW50cyBkb24ndCBoYXZlIGEgdGltZU9yaWdpbiwgc28gd2UgZmFsbGJhY2sgdG8KICAvLyB1c2luZyBEYXRlLm5vdygpIHRvIGNvbXB1dGUgdGhlIHN0YXJ0aW5nIHRpbWUuCiAgY29uc3QgYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luID0gRGF0ZS5ub3coKSAtIHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IHRpbWVPcmlnaW4gPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID09IHVuZGVmaW5lZCA/IGFwcHJveFN0YXJ0aW5nVGltZU9yaWdpbiA6IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CgogIC8vIHBlcmZvcm1hbmNlLm5vdygpIGlzIGEgbW9ub3RvbmljIGNsb2NrLCB3aGljaCBtZWFucyBpdCBzdGFydHMgYXQgMCB3aGVuIHRoZSBwcm9jZXNzIGJlZ2lucy4gVG8gZ2V0IHRoZSBjdXJyZW50CiAgLy8gd2FsbCBjbG9jayB0aW1lIChhY3R1YWwgVU5JWCB0aW1lc3RhbXApLCB3ZSBuZWVkIHRvIGFkZCB0aGUgc3RhcnRpbmcgdGltZSBvcmlnaW4gYW5kIHRoZSBjdXJyZW50IHRpbWUgZWxhcHNlZC4KICAvLwogIC8vIFRPRE86IFRoaXMgZG9lcyBub3QgYWNjb3VudCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG1vbm90b25pYyBjbG9jayB0aGF0IHBvd2VycyBwZXJmb3JtYW5jZS5ub3coKSBkcmlmdHMgZnJvbSB0aGUKICAvLyB3YWxsIGNsb2NrIHRpbWUsIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wIHRvIGJlIGluYWNjdXJhdGUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gZGV0ZWN0IGFuZAogIC8vIGNvcnJlY3QgZm9yIHRoaXMuCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWRuL2NvbnRlbnQvaXNzdWVzLzQ3MTMKICAvLyBTZWU6IGh0dHBzOi8vZGV2LnRvL25vYW1yL3doZW4tYS1taWxsaXNlY29uZC1pcy1ub3QtYS1taWxsaXNlY29uZC0zaDYKICByZXR1cm4gKCkgPT4gewogICAgcmV0dXJuICh0aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkpIC8gT05FX1NFQ09ORF9JTl9NUzsKICB9Owp9CgovKioKICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIGVpdGhlciB0aGUgUGVyZm9ybWFuY2Ugb3IgRGF0ZSBBUElzLCBkZXBlbmRpbmcgb24gdGhlCiAqIGF2YWlsYWJpbGl0eSBvZiB0aGUgUGVyZm9ybWFuY2UgQVBJLgogKgogKiBCVUc6IE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdyBicm93c2VycyBpbXBsZW1lbnQgdGhlIFBlcmZvcm1hbmNlIEFQSSwgdGhlIGNsb2NrIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXMKICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlCiAqIHNrZXcgY2FuIGdyb3cgdG8gYXJiaXRyYXJ5IGFtb3VudHMgbGlrZSBkYXlzLCB3ZWVrcyBvciBtb250aHMuCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLgogKi8KY29uc3QgdGltZXN0YW1wSW5TZWNvbmRzID0gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKTsKCi8qKgogKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC4gVGhpcyB2YWx1ZSBpcyBvbmx5IHVzYWJsZSBpbiBhIGJyb3dzZXIsIGFuZCBvbmx5IHdoZW4gdGhlCiAqIHBlcmZvcm1hbmNlIEFQSSBpcyBhdmFpbGFibGUuCiAqLwooKCkgPT4gewogIC8vIFVuZm9ydHVuYXRlbHkgYnJvd3NlcnMgbWF5IHJlcG9ydCBhbiBpbmFjY3VyYXRlIHRpbWUgb3JpZ2luIGRhdGEsIHRocm91Z2ggZWl0aGVyIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gb3IKICAvLyBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0LCB3aGljaCByZXN1bHRzIGluIHBvb3IgcmVzdWx0cyBpbiBwZXJmb3JtYW5jZSBkYXRhLiBXZSBvbmx5IHRyZWF0IHRpbWUgb3JpZ2luCiAgLy8gZGF0YSBhcyByZWxpYWJsZSBpZiB0aGV5IGFyZSB3aXRoaW4gYSByZWFzb25hYmxlIHRocmVzaG9sZCBvZiB0aGUgY3VycmVudCB0aW1lLgoKICBjb25zdCB7IHBlcmZvcm1hbmNlIH0gPSBHTE9CQUxfT0JKIDsKICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfQoKICBjb25zdCB0aHJlc2hvbGQgPSAzNjAwICogMTAwMDsKICBjb25zdCBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpOwogIGNvbnN0IGRhdGVOb3cgPSBEYXRlLm5vdygpOwoKICAvLyBpZiB0aW1lT3JpZ2luIGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWQKICBjb25zdCB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luCiAgICA/IE1hdGguYWJzKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpCiAgICA6IHRocmVzaG9sZDsKICBjb25zdCB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDsKCiAgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAvLyBpcyBub3QgYXMgd2lkZWx5IHN1cHBvcnRlZC4gTmFtZWx5LCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzIHVuZGVmaW5lZCBpbiBTYWZhcmkgYXMgb2Ygd3JpdGluZy4KICAvLyBBbHNvIGFzIG9mIHdyaXRpbmcsIHBlcmZvcm1hbmNlLnRpbWluZyBpcyBub3QgYXZhaWxhYmxlIGluIFdlYiBXb3JrZXJzIGluIG1haW5zdHJlYW0gYnJvd3NlcnMsIHNvIGl0IGlzIG5vdCBhbHdheXMKICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUKICAvLyBEYXRlIEFQSS4KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICBjb25zdCBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmcgJiYgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydDsKICBjb25zdCBoYXNOYXZpZ2F0aW9uU3RhcnQgPSB0eXBlb2YgbmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJzsKICAvLyBpZiBuYXZpZ2F0aW9uU3RhcnQgaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IG5hdmlnYXRpb25TdGFydERlbHRhID0gaGFzTmF2aWdhdGlvblN0YXJ0ID8gTWF0aC5hYnMobmF2aWdhdGlvblN0YXJ0ICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KSA6IHRocmVzaG9sZDsKICBjb25zdCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7CgogIGlmICh0aW1lT3JpZ2luSXNSZWxpYWJsZSB8fCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlKSB7CiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW4KICAgIGlmICh0aW1lT3JpZ2luRGVsdGEgPD0gbmF2aWdhdGlvblN0YXJ0RGVsdGEpIHsKICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmF2aWdhdGlvblN0YXJ0OwogICAgfQogIH0KICByZXR1cm4gZGF0ZU5vdzsKfSkoKTsKCi8qKgogKiBDcmVhdGVzIGFuIGVudmVsb3BlLgogKiBNYWtlIHN1cmUgdG8gYWx3YXlzIGV4cGxpY2l0bHkgcHJvdmlkZSB0aGUgZ2VuZXJpYyB0byB0aGlzIGZ1bmN0aW9uCiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LgogKi8KZnVuY3Rpb24gY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgaXRlbXMgPSBbXSkgewogIHJldHVybiBbaGVhZGVycywgaXRlbXNdIDsKfQoKLyoqCiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGl0ZW0gdHlwZXMgb2YgYW4gZW52ZWxvcGUuCiAqIChUaGlzIGZ1bmN0aW9uIHdhcyBtb3N0bHkgY3JlYXRlZCBiZWNhdXNlIHdvcmtpbmcgd2l0aCBlbnZlbG9wZSB0eXBlcyBpcyBwYWluZnVsIGF0IHRoZSBtb21lbnQpCiAqCiAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSByZXN0IG9mIHRoZSBpdGVtcyB3aWxsIGJlIHNraXBwZWQuCiAqLwpmdW5jdGlvbiBmb3JFYWNoRW52ZWxvcGVJdGVtKAogIGVudmVsb3BlLAogIGNhbGxiYWNrLAopIHsKICBjb25zdCBlbnZlbG9wZUl0ZW1zID0gZW52ZWxvcGVbMV07CgogIGZvciAoY29uc3QgZW52ZWxvcGVJdGVtIG9mIGVudmVsb3BlSXRlbXMpIHsKICAgIGNvbnN0IGVudmVsb3BlSXRlbVR5cGUgPSBlbnZlbG9wZUl0ZW1bMF0udHlwZTsKICAgIGNvbnN0IHJlc3VsdCA9IGNhbGxiYWNrKGVudmVsb3BlSXRlbSwgZW52ZWxvcGVJdGVtVHlwZSk7CgogICAgaWYgKHJlc3VsdCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHJldHVybiBmYWxzZTsKfQoKLyoqCiAqIEVuY29kZSBhIHN0cmluZyB0byBVVEY4LgogKi8KZnVuY3Rpb24gZW5jb2RlVVRGOChpbnB1dCwgdGV4dEVuY29kZXIpIHsKICBjb25zdCB1dGY4ID0gdGV4dEVuY29kZXIgfHwgbmV3IFRleHRFbmNvZGVyKCk7CiAgcmV0dXJuIHV0ZjguZW5jb2RlKGlucHV0KTsKfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYW4gZW52ZWxvcGUuCiAqLwpmdW5jdGlvbiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSwgdGV4dEVuY29kZXIpIHsKICBjb25zdCBbZW52SGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7CgogIC8vIEluaXRpYWxseSB3ZSBjb25zdHJ1Y3Qgb3VyIGVudmVsb3BlIGFzIGEgc3RyaW5nIGFuZCBvbmx5IGNvbnZlcnQgdG8gYmluYXJ5IGNodW5rcyBpZiB3ZSBlbmNvdW50ZXIgYmluYXJ5IGRhdGEKICBsZXQgcGFydHMgPSBKU09OLnN0cmluZ2lmeShlbnZIZWFkZXJzKTsKCiAgZnVuY3Rpb24gYXBwZW5kKG5leHQpIHsKICAgIGlmICh0eXBlb2YgcGFydHMgPT09ICdzdHJpbmcnKSB7CiAgICAgIHBhcnRzID0gdHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gcGFydHMgKyBuZXh0IDogW2VuY29kZVVURjgocGFydHMsIHRleHRFbmNvZGVyKSwgbmV4dF07CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5wdXNoKHR5cGVvZiBuZXh0ID09PSAnc3RyaW5nJyA/IGVuY29kZVVURjgobmV4dCwgdGV4dEVuY29kZXIpIDogbmV4dCk7CiAgICB9CiAgfQoKICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHsKICAgIGNvbnN0IFtpdGVtSGVhZGVycywgcGF5bG9hZF0gPSBpdGVtOwoKICAgIGFwcGVuZChgXG4ke0pTT04uc3RyaW5naWZ5KGl0ZW1IZWFkZXJzKX1cbmApOwoKICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ3N0cmluZycgfHwgcGF5bG9hZCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgYXBwZW5kKHBheWxvYWQpOwogICAgfSBlbHNlIHsKICAgICAgbGV0IHN0cmluZ2lmaWVkUGF5bG9hZDsKICAgICAgdHJ5IHsKICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIC8vIEluIGNhc2UsIGRlc3BpdGUgYWxsIG91ciBlZmZvcnRzIHRvIGtlZXAgYHBheWxvYWRgIGNpcmN1bGFyLWRlcGVuZGVuY3ktZnJlZSwgYEpTT04uc3RyaW5pZnkoKWAgc3RpbGwKICAgICAgICAvLyBmYWlscywgd2UgdHJ5IGFnYWluIGFmdGVyIG5vcm1hbGl6aW5nIGl0IGFnYWluIHdpdGggaW5maW5pdGUgbm9ybWFsaXphdGlvbiBkZXB0aC4gVGhpcyBvZiBjb3Vyc2UgaGFzIGEKICAgICAgICAvLyBwZXJmb3JtYW5jZSBpbXBhY3QgYnV0IGluIHRoaXMgY2FzZSBhIHBlcmZvcm1hbmNlIGhpdCBpcyBiZXR0ZXIgdGhhbiB0aHJvd2luZy4KICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShub3JtYWxpemUocGF5bG9hZCkpOwogICAgICB9CiAgICAgIGFwcGVuZChzdHJpbmdpZmllZFBheWxvYWQpOwogICAgfQogIH0KCiAgcmV0dXJuIHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycgPyBwYXJ0cyA6IGNvbmNhdEJ1ZmZlcnMocGFydHMpOwp9CgpmdW5jdGlvbiBjb25jYXRCdWZmZXJzKGJ1ZmZlcnMpIHsKICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZikgPT4gYWNjICsgYnVmLmxlbmd0aCwgMCk7CgogIGNvbnN0IG1lcmdlZCA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTsKICBsZXQgb2Zmc2V0ID0gMDsKICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7CiAgICBtZXJnZWQuc2V0KGJ1ZmZlciwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoOwogIH0KCiAgcmV0dXJuIG1lcmdlZDsKfQoKY29uc3QgSVRFTV9UWVBFX1RPX0RBVEFfQ0FURUdPUllfTUFQID0gewogIHNlc3Npb246ICdzZXNzaW9uJywKICBzZXNzaW9uczogJ3Nlc3Npb24nLAogIGF0dGFjaG1lbnQ6ICdhdHRhY2htZW50JywKICB0cmFuc2FjdGlvbjogJ3RyYW5zYWN0aW9uJywKICBldmVudDogJ2Vycm9yJywKICBjbGllbnRfcmVwb3J0OiAnaW50ZXJuYWwnLAogIHVzZXJfcmVwb3J0OiAnZGVmYXVsdCcsCiAgcHJvZmlsZTogJ3Byb2ZpbGUnLAogIHJlcGxheV9ldmVudDogJ3JlcGxheScsCiAgcmVwbGF5X3JlY29yZGluZzogJ3JlcGxheScsCiAgY2hlY2tfaW46ICdtb25pdG9yJywKICBmZWVkYmFjazogJ2ZlZWRiYWNrJywKICBzcGFuOiAnc3BhbicsCiAgc3RhdHNkOiAnbWV0cmljX2J1Y2tldCcsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gdGhlIG1ldGFkYXRhIG9yIGFuIGV2ZW50cyAqLwpmdW5jdGlvbiBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhT3JFdmVudCkgewogIGlmICghbWV0YWRhdGFPckV2ZW50IHx8ICFtZXRhZGF0YU9yRXZlbnQuc2RrKSB7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGFPckV2ZW50LnNkazsKICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07Cn0KCi8qKgogKiBDcmVhdGVzIGV2ZW50IGVudmVsb3BlIGhlYWRlcnMsIGJhc2VkIG9uIGV2ZW50LCBzZGsgaW5mbyBhbmQgdHVubmVsCiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIHBhY2thZ2UgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gUmVwbGF5CiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycygKICBldmVudCwKICBzZGtJbmZvLAogIHR1bm5lbCwKICBkc24sCikgewogIGNvbnN0IGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgPSBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgJiYgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQ7CiAgcmV0dXJuIHsKICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCAsCiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgICAuLi4oZHluYW1pY1NhbXBsaW5nQ29udGV4dCAmJiB7CiAgICAgIHRyYWNlOiBkcm9wVW5kZWZpbmVkS2V5cyh7IC4uLmR5bmFtaWNTYW1wbGluZ0NvbnRleHQgfSksCiAgICB9KSwKICB9Owp9CgovLyBJbnRlbnRpb25hbGx5IGtlZXBpbmcgdGhlIGtleSBicm9hZCwgYXMgd2UgZG9uJ3Qga25vdyBmb3Igc3VyZSB3aGF0IHJhdGUgbGltaXQgaGVhZGVycyBnZXQgcmV0dXJuZWQgZnJvbSBiYWNrZW5kCgpjb25zdCBERUZBVUxUX1JFVFJZX0FGVEVSID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzCgovKioKICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlCiAqIEBwYXJhbSBoZWFkZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mICdSZXRyeS1BZnRlcicgaGVhZGVyCiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcAogKgogKi8KZnVuY3Rpb24gcGFyc2VSZXRyeUFmdGVySGVhZGVyKGhlYWRlciwgbm93ID0gRGF0ZS5ub3coKSkgewogIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTsKICBpZiAoIWlzTmFOKGhlYWRlckRlbGF5KSkgewogICAgcmV0dXJuIGhlYWRlckRlbGF5ICogMTAwMDsKICB9CgogIGNvbnN0IGhlYWRlckRhdGUgPSBEYXRlLnBhcnNlKGAke2hlYWRlcn1gKTsKICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7CiAgICByZXR1cm4gaGVhZGVyRGF0ZSAtIG5vdzsKICB9CgogIHJldHVybiBERUZBVUxUX1JFVFJZX0FGVEVSOwp9CgovKioKICogR2V0cyB0aGUgdGltZSB0aGF0IHRoZSBnaXZlbiBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBmb3IgcmF0ZSBsaW1pdGluZy4KICogSW4gY2FzZSBubyBjYXRlZ29yeS1zcGVjaWZpYyBsaW1pdCBpcyBzZXQgYnV0IGEgZ2VuZXJhbCByYXRlIGxpbWl0IGFjcm9zcyBhbGwgY2F0ZWdvcmllcyBpcyBhY3RpdmUsCiAqIHRoYXQgdGltZSBpcyByZXR1cm5lZC4KICoKICogQHJldHVybiB0aGUgdGltZSBpbiBtcyB0aGF0IHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBvciAwIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHJhdGUgbGltaXQuCiAqLwpmdW5jdGlvbiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSB7CiAgcmV0dXJuIGxpbWl0c1tkYXRhQ2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGRhdGFDYXRlZ29yeSwgbm93ID0gRGF0ZS5ub3coKSkgewogIHJldHVybiBkaXNhYmxlZFVudGlsKGxpbWl0cywgZGF0YUNhdGVnb3J5KSA+IG5vdzsKfQoKLyoqCiAqIFVwZGF0ZSByYXRlbGltaXRzIGZyb20gaW5jb21pbmcgaGVhZGVycy4KICoKICogQHJldHVybiB0aGUgdXBkYXRlZCBSYXRlTGltaXRzIG9iamVjdC4KICovCmZ1bmN0aW9uIHVwZGF0ZVJhdGVMaW1pdHMoCiAgbGltaXRzLAogIHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9LAogIG5vdyA9IERhdGUubm93KCksCikgewogIGNvbnN0IHVwZGF0ZWRSYXRlTGltaXRzID0gewogICAgLi4ubGltaXRzLAogIH07CgogIC8vICJUaGUgbmFtZSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIKICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXQKICBjb25zdCByYXRlTGltaXRIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ107CiAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnMgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXTsKCiAgaWYgKHJhdGVMaW1pdEhlYWRlcikgewogICAgLyoqCiAgICAgKiByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPGhlYWRlcj4sPGhlYWRlcj4sLi4KICAgICAqIHdoZXJlIGVhY2ggPGhlYWRlcj4gaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT46IDxuYW1lc3BhY2VzPgogICAgICogd2hlcmUKICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+IGlzIGEgZGVsYXkgaW4gc2Vjb25kcwogICAgICogICAgIDxjYXRlZ29yaWVzPiBpcyB0aGUgZXZlbnQgdHlwZShzKSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBldGMpIGJlaW5nIHJhdGUgbGltaXRlZCBhbmQgaXMgb2YgdGhlIGZvcm0KICAgICAqICAgICAgICAgPGNhdGVnb3J5Pjs8Y2F0ZWdvcnk+Oy4uLgogICAgICogICAgIDxzY29wZT4gaXMgd2hhdCdzIGJlaW5nIGxpbWl0ZWQgKG9yZywgcHJvamVjdCwgb3Iga2V5KSAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKiAgICAgPHJlYXNvbl9jb2RlPiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIGxpa2UgIm9yZ19xdW90YSIgLSBpZ25vcmVkIGJ5IFNESwogICAgICogICAgIDxuYW1lc3BhY2VzPiBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgbWV0cmljIG5hbWVzcGFjZSBpZGVudGlmaWVycy4gRGVmaW5lcyB3aGljaCBuYW1lc3BhY2Uocykgd2lsbCBiZSBhZmZlY3RlZC4KICAgICAqICAgICAgICAgT25seSBwcmVzZW50IGlmIHJhdGUgbGltaXQgYXBwbGllcyB0byB0aGUgbWV0cmljX2J1Y2tldCBkYXRhIGNhdGVnb3J5LgogICAgICovCiAgICBmb3IgKGNvbnN0IGxpbWl0IG9mIHJhdGVMaW1pdEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkgewogICAgICBjb25zdCBbcmV0cnlBZnRlciwgY2F0ZWdvcmllcywgLCAsIG5hbWVzcGFjZXNdID0gbGltaXQuc3BsaXQoJzonLCA1KTsKICAgICAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyLCAxMCk7CiAgICAgIGNvbnN0IGRlbGF5ID0gKCFpc05hTihoZWFkZXJEZWxheSkgPyBoZWFkZXJEZWxheSA6IDYwKSAqIDEwMDA7IC8vIDYwc2VjIGRlZmF1bHQKICAgICAgaWYgKCFjYXRlZ29yaWVzKSB7CiAgICAgICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgZGVsYXk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzLnNwbGl0KCc7JykpIHsKICAgICAgICAgIGlmIChjYXRlZ29yeSA9PT0gJ21ldHJpY19idWNrZXQnKSB7CiAgICAgICAgICAgIC8vIG5hbWVzcGFjZXMgd2lsbCBiZSBwcmVzZW50IHdoZW4gY2F0ZWdvcnkgPT09ICdtZXRyaWNfYnVja2V0JwogICAgICAgICAgICBpZiAoIW5hbWVzcGFjZXMgfHwgbmFtZXNwYWNlcy5zcGxpdCgnOycpLmluY2x1ZGVzKCdjdXN0b20nKSkgewogICAgICAgICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzW2NhdGVnb3J5XSA9IG5vdyArIGRlbGF5OwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCmNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSAncHJvZHVjdGlvbic7CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIGV2ZW50IHByb2Nlc3NvcnMuCiAqIEBkZXByZWNhdGVkIEdsb2JhbCBldmVudCBwcm9jZXNzb3JzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICovCmZ1bmN0aW9uIGdldEdsb2JhbEV2ZW50UHJvY2Vzc29ycygpIHsKICByZXR1cm4gZ2V0R2xvYmFsU2luZ2xldG9uKCdnbG9iYWxFdmVudFByb2Nlc3NvcnMnLCAoKSA9PiBbXSk7Cn0KCi8qKgogKiBQcm9jZXNzIGFuIGFycmF5IG9mIGV2ZW50IHByb2Nlc3NvcnMsIHJldHVybmluZyB0aGUgcHJvY2Vzc2VkIGV2ZW50IChvciBgbnVsbGAgaWYgdGhlIGV2ZW50IHdhcyBkcm9wcGVkKS4KICovCmZ1bmN0aW9uIG5vdGlmeUV2ZW50UHJvY2Vzc29ycygKICBwcm9jZXNzb3JzLAogIGV2ZW50LAogIGhpbnQsCiAgaW5kZXggPSAwLAopIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdOwogICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzb3IgIT09ICdmdW5jdGlvbicpIHsKICAgICAgcmVzb2x2ZShldmVudCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IoeyAuLi5ldmVudCB9LCBoaW50KSA7CgogICAgICBERUJVR19CVUlMRCAmJiBwcm9jZXNzb3IuaWQgJiYgcmVzdWx0ID09PSBudWxsICYmIGxvZ2dlci5sb2coYEV2ZW50IHByb2Nlc3NvciAiJHtwcm9jZXNzb3IuaWR9IiBkcm9wcGVkIGV2ZW50YCk7CgogICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB7CiAgICAgICAgdm9pZCByZXN1bHQKICAgICAgICAgIC50aGVuKGZpbmFsID0+IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCBmaW5hbCwgaGludCwgaW5kZXggKyAxKS50aGVuKHJlc29sdmUpKQogICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2b2lkIG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCByZXN1bHQsIGhpbnQsIGluZGV4ICsgMSkKICAgICAgICAgIC50aGVuKHJlc29sdmUpCiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpOwogICAgICB9CiAgICB9CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIENsb3NlcyBhIHNlc3Npb24gYnkgc2V0dGluZyBpdHMgc3RhdHVzIGFuZCB1cGRhdGluZyB0aGUgc2Vzc2lvbiBvYmplY3Qgd2l0aCBpdC4KICogSW50ZXJuYWxseSBjYWxscyBgdXBkYXRlU2Vzc2lvbmAgdG8gdXBkYXRlIHRoZSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG11dGF0ZXMgdGhlIHBhc3NlZCBzZXNzaW9uIChAc2VlIHVwZGF0ZVNlc3Npb24gZm9yIGV4cGxhbmF0aW9uKS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIGBTZXNzaW9uYCBvYmplY3QgdG8gYmUgY2xvc2VkCiAqIEBwYXJhbSBzdGF0dXMgdGhlIGBTZXNzaW9uU3RhdHVzYCB3aXRoIHdoaWNoIHRoZSBzZXNzaW9uIHdhcyBjbG9zZWQuIElmIHlvdSBkb24ndCBwYXNzIGEgc3RhdHVzLAogKiAgICAgICAgICAgICAgIHRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBwcmV2aW91c2x5IHNldCBzdGF0dXMsIHVubGVzcyBpdCB3YXMgYCdvaydgIGluIHdoaWNoIGNhc2UKICogICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIGAnZXhpdGVkJ2AuCiAqLwpmdW5jdGlvbiBjbG9zZVNlc3Npb24oc2Vzc2lvbiwgc3RhdHVzKSB7CiAgbGV0IGNvbnRleHQgPSB7fTsKICBpZiAoc3RhdHVzKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXMgfTsKICB9IGVsc2UgaWYgKHNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICBjb250ZXh0ID0geyBzdGF0dXM6ICdleGl0ZWQnIH07CiAgfQoKICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIGNvbnRleHQpOwp9CgovKioKICogU2VyaWFsaXplcyBhIHBhc3NlZCBzZXNzaW9uIG9iamVjdCB0byBhIEpTT04gb2JqZWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgc3RydWN0dXJlLgogKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTZW50cnkgYmFja2VuZCByZXF1aXJlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzY2hlbWEgb2YgYSBzZXNzaW9uCiAqIHRoYW4gdGhlIG9uZSB0aGUgSlMgU0RLcyB1c2UgaW50ZXJuYWxseS4KICoKICogQHBhcmFtIHNlc3Npb24gdGhlIHNlc3Npb24gdG8gYmUgY29udmVydGVkCiAqCiAqIEByZXR1cm5zIGEgSlNPTiBvYmplY3Qgb2YgdGhlIHBhc3NlZCBzZXNzaW9uCiAqLwpmdW5jdGlvbiBzZXNzaW9uVG9KU09OKHNlc3Npb24pIHsKICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoewogICAgc2lkOiBgJHtzZXNzaW9uLnNpZH1gLAogICAgaW5pdDogc2Vzc2lvbi5pbml0LAogICAgLy8gTWFrZSBzdXJlIHRoYXQgc2VjIGlzIGNvbnZlcnRlZCB0byBtcyBmb3IgZGF0ZSBjb25zdHJ1Y3RvcgogICAgc3RhcnRlZDogbmV3IERhdGUoc2Vzc2lvbi5zdGFydGVkICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHRpbWVzdGFtcDogbmV3IERhdGUoc2Vzc2lvbi50aW1lc3RhbXAgKiAxMDAwKS50b0lTT1N0cmluZygpLAogICAgc3RhdHVzOiBzZXNzaW9uLnN0YXR1cywKICAgIGVycm9yczogc2Vzc2lvbi5lcnJvcnMsCiAgICBkaWQ6IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlc3Npb24uZGlkID09PSAnc3RyaW5nJyA/IGAke3Nlc3Npb24uZGlkfWAgOiB1bmRlZmluZWQsCiAgICBkdXJhdGlvbjogc2Vzc2lvbi5kdXJhdGlvbiwKICAgIGFibm9ybWFsX21lY2hhbmlzbTogc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20sCiAgICBhdHRyczogewogICAgICByZWxlYXNlOiBzZXNzaW9uLnJlbGVhc2UsCiAgICAgIGVudmlyb25tZW50OiBzZXNzaW9uLmVudmlyb25tZW50LAogICAgICBpcF9hZGRyZXNzOiBzZXNzaW9uLmlwQWRkcmVzcywKICAgICAgdXNlcl9hZ2VudDogc2Vzc2lvbi51c2VyQWdlbnQsCiAgICB9LAogIH0pOwp9Cgpjb25zdCBUUkFDRV9GTEFHX1NBTVBMRUQgPSAweDE7CgovKioKICogQ29udmVydCBhIHNwYW4gdG8gYSB0cmFjZSBjb250ZXh0LCB3aGljaCBjYW4gYmUgc2VudCBhcyB0aGUgYHRyYWNlYCBjb250ZXh0IGluIGFuIGV2ZW50LgogKi8KZnVuY3Rpb24gc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pIHsKICBjb25zdCB7IHNwYW5JZDogc3Bhbl9pZCwgdHJhY2VJZDogdHJhY2VfaWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICBjb25zdCB7IGRhdGEsIG9wLCBwYXJlbnRfc3Bhbl9pZCwgc3RhdHVzLCB0YWdzLCBvcmlnaW4gfSA9IHNwYW5Ub0pTT04oc3Bhbik7CgogIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBkYXRhLAogICAgb3AsCiAgICBwYXJlbnRfc3Bhbl9pZCwKICAgIHNwYW5faWQsCiAgICBzdGF0dXMsCiAgICB0YWdzLAogICAgdHJhY2VfaWQsCiAgICBvcmlnaW4sCiAgfSk7Cn0KCi8qKgogKiBDb252ZXJ0IGEgc3BhbiB0byBhIEpTT04gcmVwcmVzZW50YXRpb24uCiAqIE5vdGUgdGhhdCBhbGwgZmllbGRzIHJldHVybmVkIGhlcmUgYXJlIG9wdGlvbmFsIGFuZCBuZWVkIHRvIGJlIGd1YXJkZWQgYWdhaW5zdC4KICoKICogTm90ZTogQmVjYXVzZSBvZiB0aGlzLCB3ZSBjdXJyZW50bHkgaGF2ZSBhIGNpcmN1bGFyIHR5cGUgZGVwZW5kZW5jeSAod2hpY2ggd2Ugb3B0ZWQgb3V0IG9mIGluIHBhY2thZ2UuanNvbikuCiAqIFRoaXMgaXMgbm90IGF2b2lkYWJsZSBhcyB3ZSBuZWVkIGBzcGFuVG9KU09OYCBpbiBgc3BhblV0aWxzLnRzYCwgd2hpY2ggaW4gdHVybiBpcyBuZWVkZWQgYnkgYHNwYW4udHNgIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICogQW5kIGBzcGFuVG9KU09OYCBuZWVkcyB0aGUgU3BhbiBjbGFzcyBmcm9tIGBzcGFuLnRzYCB0byBjaGVjayBoZXJlLgogKiBUT0RPIHY4OiBXaGVuIHdlIHJlbW92ZSB0aGUgZGVwcmVjYXRlZCBzdHVmZiBmcm9tIGBzcGFuLnRzYCwgd2UgY2FuIHJlbW92ZSB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeSBhZ2Fpbi4KICovCmZ1bmN0aW9uIHNwYW5Ub0pTT04oc3BhbikgewogIGlmIChzcGFuSXNTcGFuQ2xhc3Moc3BhbikpIHsKICAgIHJldHVybiBzcGFuLmdldFNwYW5KU09OKCk7CiAgfQoKICAvLyBGYWxsYmFjazogV2UgYWxzbyBjaGVjayBmb3IgYC50b0pTT04oKWAgaGVyZS4uLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGlmICh0eXBlb2Ygc3Bhbi50b0pTT04gPT09ICdmdW5jdGlvbicpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgcmV0dXJuIHNwYW4udG9KU09OKCk7CiAgfQoKICByZXR1cm4ge307Cn0KCi8qKgogKiBTYWRseSwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2hlY2tzIHdlIGNhbm5vdCBhY3R1YWxseSBpbXBvcnQgdGhlIFNwYW4gY2xhc3MgaGVyZSBhbmQgY2hlY2sgZm9yIGluc3RhbmNlb2YuCiAqIDooIFNvIGluc3RlYWQgd2UgYXBwcm94aW1hdGUgdGhpcyBieSBjaGVja2luZyBpZiBpdCBoYXMgdGhlIGBnZXRTcGFuSlNPTmAgbWV0aG9kLgogKi8KZnVuY3Rpb24gc3BhbklzU3BhbkNsYXNzKHNwYW4pIHsKICByZXR1cm4gdHlwZW9mIChzcGFuICkuZ2V0U3BhbkpTT04gPT09ICdmdW5jdGlvbic7Cn0KCi8qKgogKiBSZXR1cm5zIHRydWUgaWYgYSBzcGFuIGlzIHNhbXBsZWQuCiAqIEluIG1vc3QgY2FzZXMsIHlvdSBzaG91bGQganVzdCB1c2UgYHNwYW4uaXNSZWNvcmRpbmcoKWAgaW5zdGVhZC4KICogSG93ZXZlciwgdGhpcyBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWMsIGFzIGl0IGFsc28gcmV0dXJucyBmYWxzZSBpZiB0aGUgc3BhbiBpcyBmaW5pc2hlZC4KICogU28gaW4gdGhlIGNhc2Ugd2hlcmUgdGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQsIHVzZSB0aGlzIG1ldGhvZC4KICovCmZ1bmN0aW9uIHNwYW5Jc1NhbXBsZWQoc3BhbikgewogIC8vIFdlIGFsaWduIG91ciB0cmFjZSBmbGFncyB3aXRoIHRoZSBvbmVzIE9wZW5UZWxlbWV0cnkgdXNlCiAgLy8gU28gd2UgYWxzbyBjaGVjayBmb3Igc2FtcGxlZCB0aGUgc2FtZSB3YXkgdGhleSBkby4KICBjb25zdCB7IHRyYWNlRmxhZ3MgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZQogIHJldHVybiBCb29sZWFuKHRyYWNlRmxhZ3MgJiBUUkFDRV9GTEFHX1NBTVBMRUQpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGNsaWVudC4KICovCmZ1bmN0aW9uIGdldENsaWVudCgpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICByZXR1cm4gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudCgpOwp9CgovKioKICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIHNjb3BlLgogKi8KZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkgewogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIHJvb3Qgc3BhbiBvZiBhIGdpdmVuIHNwYW4uCiAqCiAqIEFzIGxvbmcgYXMgd2UgdXNlIGBUcmFuc2FjdGlvbmBzIGludGVybmFsbHksIHRoZSByZXR1cm5lZCByb290IHNwYW4KICogd2lsbCBiZSBhIGBUcmFuc2FjdGlvbmAgYnV0IGJlIGF3YXJlIHRoYXQgdGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICoKICogSWYgdGhlIGdpdmVuIHNwYW4gaGFzIG5vIHJvb3Qgc3BhbiBvciB0cmFuc2FjdGlvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuCiAqLwpmdW5jdGlvbiBnZXRSb290U3BhbihzcGFuKSB7CiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgdGhpcyBjaGVjayBhbmQganVzdCByZXR1cm4gc3BhbgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIHJldHVybiBzcGFuLnRyYW5zYWN0aW9uOwp9CgovKioKICogQ3JlYXRlcyBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmcm9tIGEgY2xpZW50LgogKgogKiBEaXNwYXRjaGVzIHRoZSBgY3JlYXRlRHNjYCBsaWZlY3ljbGUgaG9vayBhcyBhIHNpZGUgZWZmZWN0LgogKi8KZnVuY3Rpb24gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoCiAgdHJhY2VfaWQsCiAgY2xpZW50LAogIHNjb3BlLAopIHsKICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTsKCiAgY29uc3QgeyBwdWJsaWNLZXk6IHB1YmxpY19rZXkgfSA9IGNsaWVudC5nZXREc24oKSB8fCB7fTsKICAvLyBUT0RPKHY4KTogUmVtb3ZlIHNlZ21lbnQgZnJvbSBVc2VyCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgY29uc3QgeyBzZWdtZW50OiB1c2VyX3NlZ21lbnQgfSA9IChzY29wZSAmJiBzY29wZS5nZXRVc2VyKCkpIHx8IHt9OwoKICBjb25zdCBkc2MgPSBkcm9wVW5kZWZpbmVkS2V5cyh7CiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBERUZBVUxUX0VOVklST05NRU5ULAogICAgcmVsZWFzZTogb3B0aW9ucy5yZWxlYXNlLAogICAgdXNlcl9zZWdtZW50LAogICAgcHVibGljX2tleSwKICAgIHRyYWNlX2lkLAogIH0pIDsKCiAgY2xpZW50LmVtaXQgJiYgY2xpZW50LmVtaXQoJ2NyZWF0ZURzYycsIGRzYyk7CgogIHJldHVybiBkc2M7Cn0KCi8qKgogKiBBIFNwYW4gd2l0aCBhIGZyb3plbiBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQuCiAqLwoKLyoqCiAqIENyZWF0ZXMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgZnJvbSBhIHNwYW4gKGFuZCBjbGllbnQgYW5kIHNjb3BlKQogKgogKiBAcGFyYW0gc3BhbiB0aGUgc3BhbiBmcm9tIHdoaWNoIGEgZmV3IHZhbHVlcyBsaWtlIHRoZSByb290IHNwYW4gbmFtZSBhbmQgc2FtcGxlIHJhdGUgYXJlIGV4dHJhY3RlZC4KICoKICogQHJldHVybnMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQKICovCmZ1bmN0aW9uIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSB7CiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7CiAgaWYgKCFjbGllbnQpIHsKICAgIHJldHVybiB7fTsKICB9CgogIC8vIHBhc3NpbmcgZW1pdD1mYWxzZSBoZXJlIHRvIG9ubHkgZW1pdCBsYXRlciBvbmNlIHRoZSBEU0MgaXMgYWN0dWFsbHkgcG9wdWxhdGVkCiAgY29uc3QgZHNjID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQoc3BhblRvSlNPTihzcGFuKS50cmFjZV9pZCB8fCAnJywgY2xpZW50LCBnZXRDdXJyZW50U2NvcGUoKSk7CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIGNvbnN0IHR4biA9IGdldFJvb3RTcGFuKHNwYW4pIDsKICBpZiAoIXR4bikgewogICAgcmV0dXJuIGRzYzsKICB9CgogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHY3RnJvemVuRHNjIGFzIGEgVHJhbnNhY3Rpb24gd2lsbCBubyBsb25nZXIgaGF2ZSBfZnJvemVuRHluYW1pY1NhbXBsaW5nQ29udGV4dAogIC8vIEZvciBub3cgd2UgbmVlZCB0byBhdm9pZCBicmVha2luZyB1c2VycyB3aG8gZGlyZWN0bHkgY3JlYXRlZCBhIHR4biB3aXRoIGEgRFNDLCB3aGVyZSB0aGlzIGZpZWxkIGlzIHN0aWxsIHNldC4KICAvLyBAc2VlIFRyYW5zYWN0aW9uIGNsYXNzIGNvbnN0cnVjdG9yCiAgY29uc3QgdjdGcm96ZW5Ec2MgPSB0eG4gJiYgdHhuLl9mcm96ZW5EeW5hbWljU2FtcGxpbmdDb250ZXh0OwogIGlmICh2N0Zyb3plbkRzYykgewogICAgcmV0dXJuIHY3RnJvemVuRHNjOwogIH0KCiAgLy8gVE9ETyAodjgpOiBSZXBsYWNlIHR4bi5tZXRhZGF0YSB3aXRoIHR4bi5hdHRyaWJ1dGVzW10KICAvLyBXZSBjYW4ndCBkbyB0aGlzIHlldCBiZWNhdXNlIGF0dHJpYnV0ZXMgYXJlbid0IGFsd2F5cyBzZXQgeWV0LgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IHsgc2FtcGxlUmF0ZTogbWF5YmVTYW1wbGVSYXRlLCBzb3VyY2UgfSA9IHR4bi5tZXRhZGF0YTsKICBpZiAobWF5YmVTYW1wbGVSYXRlICE9IG51bGwpIHsKICAgIGRzYy5zYW1wbGVfcmF0ZSA9IGAke21heWJlU2FtcGxlUmF0ZX1gOwogIH0KCiAgLy8gV2UgZG9uJ3Qgd2FudCB0byBoYXZlIGEgdHJhbnNhY3Rpb24gbmFtZSBpbiB0aGUgRFNDIGlmIHRoZSBzb3VyY2UgaXMgInVybCIgYmVjYXVzZSBVUkxzIG1pZ2h0IGNvbnRhaW4gUElJCiAgY29uc3QganNvblNwYW4gPSBzcGFuVG9KU09OKHR4bik7CgogIC8vIGFmdGVyIEpTT04gY29udmVyc2lvbiwgdHhuLm5hbWUgYmVjb21lcyBqc29uU3Bhbi5kZXNjcmlwdGlvbgogIGlmIChzb3VyY2UgJiYgc291cmNlICE9PSAndXJsJykgewogICAgZHNjLnRyYW5zYWN0aW9uID0ganNvblNwYW4uZGVzY3JpcHRpb247CiAgfQoKICBkc2Muc2FtcGxlZCA9IFN0cmluZyhzcGFuSXNTYW1wbGVkKHR4bikpOwoKICBjbGllbnQuZW1pdCAmJiBjbGllbnQuZW1pdCgnY3JlYXRlRHNjJywgZHNjKTsKCiAgcmV0dXJuIGRzYzsKfQoKLyoqCiAqIEFwcGxpZXMgZGF0YSBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgYW5kIHJ1bnMgYWxsIGV2ZW50IHByb2Nlc3NvcnMgb24gaXQuCiAqLwpmdW5jdGlvbiBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7IGZpbmdlcnByaW50LCBzcGFuLCBicmVhZGNydW1icywgc2RrUHJvY2Vzc2luZ01ldGFkYXRhIH0gPSBkYXRhOwoKICAvLyBBcHBseSBnZW5lcmFsIGRhdGEKICBhcHBseURhdGFUb0V2ZW50KGV2ZW50LCBkYXRhKTsKCiAgLy8gV2Ugd2FudCB0byBzZXQgdGhlIHRyYWNlIGNvbnRleHQgZm9yIG5vcm1hbCBldmVudHMgb25seSBpZiB0aGVyZSBpc24ndCBhbHJlYWR5CiAgLy8gYSB0cmFjZSBjb250ZXh0IG9uIHRoZSBldmVudC4gVGhlcmUgaXMgYSBwcm9kdWN0IGZlYXR1cmUgaW4gcGxhY2Ugd2hlcmUgd2UgbGluawogIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC4KICBpZiAoc3BhbikgewogICAgYXBwbHlTcGFuVG9FdmVudChldmVudCwgc3Bhbik7CiAgfQoKICBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpOwogIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icyk7CiAgYXBwbHlTZGtNZXRhZGF0YVRvRXZlbnQoZXZlbnQsIHNka1Byb2Nlc3NpbmdNZXRhZGF0YSk7Cn0KCmZ1bmN0aW9uIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHsKICBjb25zdCB7CiAgICBleHRyYSwKICAgIHRhZ3MsCiAgICB1c2VyLAogICAgY29udGV4dHMsCiAgICBsZXZlbCwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdHJhbnNhY3Rpb25OYW1lLAogIH0gPSBkYXRhOwoKICBjb25zdCBjbGVhbmVkRXh0cmEgPSBkcm9wVW5kZWZpbmVkS2V5cyhleHRyYSk7CiAgaWYgKGNsZWFuZWRFeHRyYSAmJiBPYmplY3Qua2V5cyhjbGVhbmVkRXh0cmEpLmxlbmd0aCkgewogICAgZXZlbnQuZXh0cmEgPSB7IC4uLmNsZWFuZWRFeHRyYSwgLi4uZXZlbnQuZXh0cmEgfTsKICB9CgogIGNvbnN0IGNsZWFuZWRUYWdzID0gZHJvcFVuZGVmaW5lZEtleXModGFncyk7CiAgaWYgKGNsZWFuZWRUYWdzICYmIE9iamVjdC5rZXlzKGNsZWFuZWRUYWdzKS5sZW5ndGgpIHsKICAgIGV2ZW50LnRhZ3MgPSB7IC4uLmNsZWFuZWRUYWdzLCAuLi5ldmVudC50YWdzIH07CiAgfQoKICBjb25zdCBjbGVhbmVkVXNlciA9IGRyb3BVbmRlZmluZWRLZXlzKHVzZXIpOwogIGlmIChjbGVhbmVkVXNlciAmJiBPYmplY3Qua2V5cyhjbGVhbmVkVXNlcikubGVuZ3RoKSB7CiAgICBldmVudC51c2VyID0geyAuLi5jbGVhbmVkVXNlciwgLi4uZXZlbnQudXNlciB9OwogIH0KCiAgY29uc3QgY2xlYW5lZENvbnRleHRzID0gZHJvcFVuZGVmaW5lZEtleXMoY29udGV4dHMpOwogIGlmIChjbGVhbmVkQ29udGV4dHMgJiYgT2JqZWN0LmtleXMoY2xlYW5lZENvbnRleHRzKS5sZW5ndGgpIHsKICAgIGV2ZW50LmNvbnRleHRzID0geyAuLi5jbGVhbmVkQ29udGV4dHMsIC4uLmV2ZW50LmNvbnRleHRzIH07CiAgfQoKICBpZiAobGV2ZWwpIHsKICAgIGV2ZW50LmxldmVsID0gbGV2ZWw7CiAgfQoKICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7CiAgICBldmVudC50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uTmFtZTsKICB9Cn0KCmZ1bmN0aW9uIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icykgewogIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWJzID0gWy4uLihldmVudC5icmVhZGNydW1icyB8fCBbXSksIC4uLmJyZWFkY3J1bWJzXTsKICBldmVudC5icmVhZGNydW1icyA9IG1lcmdlZEJyZWFkY3J1bWJzLmxlbmd0aCA/IG1lcmdlZEJyZWFkY3J1bWJzIDogdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBhcHBseVNka01ldGFkYXRhVG9FdmVudChldmVudCwgc2RrUHJvY2Vzc2luZ01ldGFkYXRhKSB7CiAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgLi4uZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogICAgLi4uc2RrUHJvY2Vzc2luZ01ldGFkYXRhLAogIH07Cn0KCmZ1bmN0aW9uIGFwcGx5U3BhblRvRXZlbnQoZXZlbnQsIHNwYW4pIHsKICBldmVudC5jb250ZXh0cyA9IHsgdHJhY2U6IHNwYW5Ub1RyYWNlQ29udGV4dChzcGFuKSwgLi4uZXZlbnQuY29udGV4dHMgfTsKICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKHNwYW4pOwogIGlmIChyb290U3BhbikgewogICAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gewogICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0OiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbiksCiAgICAgIC4uLmV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgIH07CiAgICBjb25zdCB0cmFuc2FjdGlvbk5hbWUgPSBzcGFuVG9KU09OKHJvb3RTcGFuKS5kZXNjcmlwdGlvbjsKICAgIGlmICh0cmFuc2FjdGlvbk5hbWUpIHsKICAgICAgZXZlbnQudGFncyA9IHsgdHJhbnNhY3Rpb246IHRyYW5zYWN0aW9uTmFtZSwgLi4uZXZlbnQudGFncyB9OwogICAgfQogIH0KfQoKLyoqCiAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLAogKiB1c2VzIG1lc3NhZ2UgaWYgdGhlcmUncyBvbmUgaW5zdGVhZCBvciBnZXQgcmlkIG9mIGVtcHR5IGZpbmdlcnByaW50CiAqLwpmdW5jdGlvbiBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpIHsKICAvLyBNYWtlIHN1cmUgaXQncyBhbiBhcnJheSBmaXJzdCBhbmQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgaW4gcGxhY2UKICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50ID8gYXJyYXlpZnkoZXZlbnQuZmluZ2VycHJpbnQpIDogW107CgogIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50CiAgaWYgKGZpbmdlcnByaW50KSB7CiAgICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50LmNvbmNhdChmaW5nZXJwcmludCk7CiAgfQoKICAvLyBJZiB3ZSBoYXZlIG5vIGRhdGEgYXQgYWxsLCByZW1vdmUgZW1wdHkgYXJyYXkgZGVmYXVsdAogIGlmIChldmVudC5maW5nZXJwcmludCAmJiAhZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7CiAgICBkZWxldGUgZXZlbnQuZmluZ2VycHJpbnQ7CiAgfQp9CgovKioKICogRGVmYXVsdCB2YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuCiAqLwpjb25zdCBERUZBVUxUX01BWF9CUkVBRENSVU1CUyA9IDEwMDsKCi8qKgogKiBIb2xkcyBhZGRpdGlvbmFsIGV2ZW50IGluZm9ybWF0aW9uLiB7QGxpbmsgU2NvcGUuYXBwbHlUb0V2ZW50fSB3aWxsIGJlCiAqIGNhbGxlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBhbiBldmVudCB3aWxsIGJlIHNlbnQuCiAqLwpjbGFzcyBTY29wZSAgewogIC8qKiBGbGFnIGlmIG5vdGlmeWluZyBpcyBoYXBwZW5pbmcuICovCgogIC8qKiBDYWxsYmFjayBmb3IgY2xpZW50IHRvIHJlY2VpdmUgc2NvcGUgY2hhbmdlcy4gKi8KCiAgLyoqIENhbGxiYWNrIGxpc3QgdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB7QGxpbmsgYXBwbHlUb0V2ZW50fS4gKi8KCiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqLwoKICAvKiogVXNlciAqLwoKICAvKiogVGFncyAqLwoKICAvKiogRXh0cmEgKi8KCiAgLyoqIENvbnRleHRzICovCgogIC8qKiBBdHRhY2htZW50cyAqLwoKICAvKiogUHJvcGFnYXRpb24gQ29udGV4dCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAqLwoKICAvKioKICAgKiBBIHBsYWNlIHRvIHN0YXNoIGRhdGEgd2hpY2ggaXMgbmVlZGVkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIFNESydzIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgYnV0IHdoaWNoIHNob3VsZG4ndCBnZXQKICAgKiBzZW50IHRvIFNlbnRyeQogICAqLwoKICAvKiogRmluZ2VycHJpbnQgKi8KCiAgLyoqIFNldmVyaXR5ICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCgogIC8qKgogICAqIFRyYW5zYWN0aW9uIE5hbWUKICAgKi8KCiAgLyoqIFNwYW4gKi8KCiAgLyoqIFNlc3Npb24gKi8KCiAgLyoqIFJlcXVlc3QgTW9kZSBTZXNzaW9uIFN0YXR1cyAqLwoKICAvKiogVGhlIGNsaWVudCBvbiB0aGlzIHNjb3BlICovCgogIC8vIE5PVEU6IEFueSBmaWVsZCB3aGljaCBnZXRzIGFkZGVkIGhlcmUgc2hvdWxkIGdldCBhZGRlZCBub3Qgb25seSB0byB0aGUgY29uc3RydWN0b3IgYnV0IGFsc28gdG8gdGhlIGBjbG9uZWAgbWV0aG9kLgoKICAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTsKICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzID0gW107CiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMgPSBbXTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107CiAgICB0aGlzLl9hdHRhY2htZW50cyA9IFtdOwogICAgdGhpcy5fdXNlciA9IHt9OwogICAgdGhpcy5fdGFncyA9IHt9OwogICAgdGhpcy5fZXh0cmEgPSB7fTsKICAgIHRoaXMuX2NvbnRleHRzID0ge307CiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgfQoKICAvKioKICAgKiBJbmhlcml0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQgc2NvcGUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzY29wZS5jbG9uZSgpYCBhbmQgYG5ldyBTY29wZSgpYCBpbnN0ZWFkLgogICAqLwogICBzdGF0aWMgY2xvbmUoc2NvcGUpIHsKICAgIHJldHVybiBzY29wZSA/IHNjb3BlLmNsb25lKCkgOiBuZXcgU2NvcGUoKTsKICB9CgogIC8qKgogICAqIENsb25lIHRoaXMgc2NvcGUgaW5zdGFuY2UuCiAgICovCiAgIGNsb25lKCkgewogICAgY29uc3QgbmV3U2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi50aGlzLl9icmVhZGNydW1ic107CiAgICBuZXdTY29wZS5fdGFncyA9IHsgLi4udGhpcy5fdGFncyB9OwogICAgbmV3U2NvcGUuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSB9OwogICAgbmV3U2NvcGUuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cyB9OwogICAgbmV3U2NvcGUuX3VzZXIgPSB0aGlzLl91c2VyOwogICAgbmV3U2NvcGUuX2xldmVsID0gdGhpcy5fbGV2ZWw7CiAgICBuZXdTY29wZS5fc3BhbiA9IHRoaXMuX3NwYW47CiAgICBuZXdTY29wZS5fc2Vzc2lvbiA9IHRoaXMuX3Nlc3Npb247CiAgICBuZXdTY29wZS5fdHJhbnNhY3Rpb25OYW1lID0gdGhpcy5fdHJhbnNhY3Rpb25OYW1lOwogICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQ7CiAgICBuZXdTY29wZS5fZXZlbnRQcm9jZXNzb3JzID0gWy4uLnRoaXMuX2V2ZW50UHJvY2Vzc29yc107CiAgICBuZXdTY29wZS5fcmVxdWVzdFNlc3Npb24gPSB0aGlzLl9yZXF1ZXN0U2Vzc2lvbjsKICAgIG5ld1Njb3BlLl9hdHRhY2htZW50cyA9IFsuLi50aGlzLl9hdHRhY2htZW50c107CiAgICBuZXdTY29wZS5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0geyAuLi50aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgfTsKICAgIG5ld1Njb3BlLl9wcm9wYWdhdGlvbkNvbnRleHQgPSB7IC4uLnRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCB9OwogICAgbmV3U2NvcGUuX2NsaWVudCA9IHRoaXMuX2NsaWVudDsKCiAgICByZXR1cm4gbmV3U2NvcGU7CiAgfQoKICAvKiogVXBkYXRlIHRoZSBjbGllbnQgb24gdGhlIHNjb3BlLiAqLwogICBzZXRDbGllbnQoY2xpZW50KSB7CiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIGNsaWVudCBhc3NpZ25lZCB0byB0aGlzIHNjb3BlLgogICAqCiAgICogSXQgaXMgZ2VuZXJhbGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGBTZW50cnkuZ2V0Q2xpZW50KClgIGluc3RlYWQsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAgICovCiAgIGdldENsaWVudCgpIHsKICAgIHJldHVybiB0aGlzLl9jbGllbnQ7CiAgfQoKICAvKioKICAgKiBBZGQgaW50ZXJuYWwgb24gY2hhbmdlIGxpc3RlbmVyLiBVc2VkIGZvciBzdWIgU0RLcyB0aGF0IG5lZWQgdG8gc3RvcmUgdGhlIHNjb3BlLgogICAqIEBoaWRkZW4KICAgKi8KICAgYWRkU2NvcGVMaXN0ZW5lcihjYWxsYmFjaykgewogICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjaykgewogICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzLnB1c2goY2FsbGJhY2spOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRVc2VyKHVzZXIpIHsKICAgIC8vIElmIG51bGwgaXMgcGFzc2VkIHdlIHdhbnQgdG8gdW5zZXQgZXZlcnl0aGluZywgYnV0IHN0aWxsIGRlZmluZSBrZXlzLAogICAgLy8gc28gdGhhdCBsYXRlciBkb3duIGluIHRoZSBwaXBlbGluZSBhbnkgZXhpc3RpbmcgdmFsdWVzIGFyZSBjbGVhcmVkLgogICAgdGhpcy5fdXNlciA9IHVzZXIgfHwgewogICAgICBlbWFpbDogdW5kZWZpbmVkLAogICAgICBpZDogdW5kZWZpbmVkLAogICAgICBpcF9hZGRyZXNzOiB1bmRlZmluZWQsCiAgICAgIHNlZ21lbnQ6IHVuZGVmaW5lZCwKICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCwKICAgIH07CgogICAgaWYgKHRoaXMuX3Nlc3Npb24pIHsKICAgICAgdXBkYXRlU2Vzc2lvbih0aGlzLl9zZXNzaW9uLCB7IHVzZXIgfSk7CiAgICB9CgogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0VXNlcigpIHsKICAgIHJldHVybiB0aGlzLl91c2VyOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UmVxdWVzdFNlc3Npb24oKSB7CiAgICByZXR1cm4gdGhpcy5fcmVxdWVzdFNlc3Npb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRSZXF1ZXN0U2Vzc2lvbihyZXF1ZXN0U2Vzc2lvbikgewogICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSByZXF1ZXN0U2Vzc2lvbjsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgc2V0VGFncyh0YWdzKSB7CiAgICB0aGlzLl90YWdzID0gewogICAgICAuLi50aGlzLl90YWdzLAogICAgICAuLi50YWdzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldFRhZyhrZXksIHZhbHVlKSB7CiAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCBba2V5XTogdmFsdWUgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIHRoaXMuX2V4dHJhID0gewogICAgICAuLi50aGlzLl9leHRyYSwKICAgICAgLi4uZXh0cmFzLAogICAgfTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgW2tleV06IGV4dHJhIH07CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRGaW5nZXJwcmludChmaW5nZXJwcmludCkgewogICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIHNldExldmVsKAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICApIHsKICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBmb3IgZnV0dXJlIGV2ZW50cy4KICAgKi8KICAgc2V0VHJhbnNhY3Rpb25OYW1lKG5hbWUpIHsKICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRDb250ZXh0KGtleSwgY29udGV4dCkgewogICAgaWYgKGNvbnRleHQgPT09IG51bGwpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZQogICAgICBkZWxldGUgdGhpcy5fY29udGV4dHNba2V5XTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX2NvbnRleHRzW2tleV0gPSBjb250ZXh0OwogICAgfQoKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFNldHMgdGhlIFNwYW4gb24gdGhlIHNjb3BlLgogICAqIEBwYXJhbSBzcGFuIFNwYW4KICAgKiBAZGVwcmVjYXRlZCBJbnN0ZWFkIG9mIHNldHRpbmcgYSBzcGFuIG9uIGEgc2NvcGUsIHVzZSBgc3RhcnRTcGFuKClgL2BzdGFydFNwYW5NYW51YWwoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0U3BhbihzcGFuKSB7CiAgICB0aGlzLl9zcGFuID0gc3BhbjsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBTcGFuYCBpZiB0aGVyZSBpcyBvbmUuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRBY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNwYW4oKSB7CiAgICByZXR1cm4gdGhpcy5fc3BhbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGBUcmFuc2FjdGlvbmAgYXR0YWNoZWQgdG8gdGhlIHNjb3BlIChpZiB0aGVyZSBpcyBvbmUpLgogICAqIEBkZXByZWNhdGVkIFlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhlIHRyYW5zYWN0aW9uLCBidXQganVzdCB1c2UgYHN0YXJ0U3BhbigpYCBBUElzIGluc3RlYWQuCiAgICovCiAgIGdldFRyYW5zYWN0aW9uKCkgewogICAgLy8gT2Z0ZW4sIHRoaXMgc3BhbiAoaWYgaXQgZXhpc3RzIGF0IGFsbCkgd2lsbCBiZSBhIHRyYW5zYWN0aW9uLCBidXQgaXQncyBub3QgZ3VhcmFudGVlZCB0byBiZS4gUmVnYXJkbGVzcywgaXQgd2lsbAogICAgLy8gaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnRseS1hY3RpdmUgdHJhbnNhY3Rpb24uCiAgICBjb25zdCBzcGFuID0gdGhpcy5fc3BhbjsKICAgIC8vIENhbm5vdCByZXBsYWNlIHdpdGggZ2V0Um9vdFNwYW4gYmVjYXVzZSBnZXRSb290U3BhbiByZXR1cm5zIGEgc3Bhbiwgbm90IGEgdHJhbnNhY3Rpb24KICAgIC8vIEFsc28sIHRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBhbnl3YXkuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHJldHVybiBzcGFuICYmIHNwYW4udHJhbnNhY3Rpb247CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRTZXNzaW9uKHNlc3Npb24pIHsKICAgIGlmICghc2Vzc2lvbikgewogICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uOwogICAgfQogICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0U2Vzc2lvbigpIHsKICAgIHJldHVybiB0aGlzLl9zZXNzaW9uOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgdXBkYXRlKGNhcHR1cmVDb250ZXh0KSB7CiAgICBpZiAoIWNhcHR1cmVDb250ZXh0KSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IHNjb3BlVG9NZXJnZSA9IHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IGNhcHR1cmVDb250ZXh0KHRoaXMpIDogY2FwdHVyZUNvbnRleHQ7CgogICAgaWYgKHNjb3BlVG9NZXJnZSBpbnN0YW5jZW9mIFNjb3BlKSB7CiAgICAgIGNvbnN0IHNjb3BlRGF0YSA9IHNjb3BlVG9NZXJnZS5nZXRTY29wZURhdGEoKTsKCiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlRGF0YS50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVEYXRhLmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVEYXRhLmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZURhdGEudXNlciAmJiBPYmplY3Qua2V5cyhzY29wZURhdGEudXNlcikubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5fdXNlciA9IHNjb3BlRGF0YS51c2VyOwogICAgICB9CiAgICAgIGlmIChzY29wZURhdGEubGV2ZWwpIHsKICAgICAgICB0aGlzLl9sZXZlbCA9IHNjb3BlRGF0YS5sZXZlbDsKICAgICAgfQogICAgICBpZiAoc2NvcGVEYXRhLmZpbmdlcnByaW50Lmxlbmd0aCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVEYXRhLmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZVRvTWVyZ2UuZ2V0UmVxdWVzdFNlc3Npb24oKSkgewogICAgICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gc2NvcGVUb01lcmdlLmdldFJlcXVlc3RTZXNzaW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlRGF0YS5wcm9wYWdhdGlvbkNvbnRleHQpIHsKICAgICAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBzY29wZURhdGEucHJvcGFnYXRpb25Db250ZXh0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc2NvcGVUb01lcmdlKSkgewogICAgICBjb25zdCBzY29wZUNvbnRleHQgPSBjYXB0dXJlQ29udGV4dCA7CiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnNjb3BlQ29udGV4dC50YWdzIH07CiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uc2NvcGVDb250ZXh0LmV4dHJhIH07CiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uc2NvcGVDb250ZXh0LmNvbnRleHRzIH07CiAgICAgIGlmIChzY29wZUNvbnRleHQudXNlcikgewogICAgICAgIHRoaXMuX3VzZXIgPSBzY29wZUNvbnRleHQudXNlcjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LmxldmVsKSB7CiAgICAgICAgdGhpcy5fbGV2ZWwgPSBzY29wZUNvbnRleHQubGV2ZWw7CiAgICAgIH0KICAgICAgaWYgKHNjb3BlQ29udGV4dC5maW5nZXJwcmludCkgewogICAgICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gc2NvcGVDb250ZXh0LmZpbmdlcnByaW50OwogICAgICB9CiAgICAgIGlmIChzY29wZUNvbnRleHQucmVxdWVzdFNlc3Npb24pIHsKICAgICAgICB0aGlzLl9yZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbjsKICAgICAgfQogICAgICBpZiAoc2NvcGVDb250ZXh0LnByb3BhZ2F0aW9uQ29udGV4dCkgewogICAgICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IHNjb3BlQ29udGV4dC5wcm9wYWdhdGlvbkNvbnRleHQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGNsZWFyKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX3RhZ3MgPSB7fTsKICAgIHRoaXMuX2V4dHJhID0ge307CiAgICB0aGlzLl91c2VyID0ge307CiAgICB0aGlzLl9jb250ZXh0cyA9IHt9OwogICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl90cmFuc2FjdGlvbk5hbWUgPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9maW5nZXJwcmludCA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gdW5kZWZpbmVkOwogICAgdGhpcy5fc3BhbiA9IHVuZGVmaW5lZDsKICAgIHRoaXMuX3Nlc3Npb24gPSB1bmRlZmluZWQ7CiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwogICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTsKICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGdlbmVyYXRlUHJvcGFnYXRpb25Db250ZXh0KCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgbWF4QnJlYWRjcnVtYnMpIHsKICAgIGNvbnN0IG1heENydW1icyA9IHR5cGVvZiBtYXhCcmVhZGNydW1icyA9PT0gJ251bWJlcicgPyBtYXhCcmVhZGNydW1icyA6IERFRkFVTFRfTUFYX0JSRUFEQ1JVTUJTOwoKICAgIC8vIE5vIGRhdGEgaGFzIGJlZW4gY2hhbmdlZCwgc28gZG9uJ3Qgbm90aWZ5IHNjb3BlIGxpc3RlbmVycwogICAgaWYgKG1heENydW1icyA8PSAwKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWIgPSB7CiAgICAgIHRpbWVzdGFtcDogZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLAogICAgICAuLi5icmVhZGNydW1iLAogICAgfTsKCiAgICBjb25zdCBicmVhZGNydW1icyA9IHRoaXMuX2JyZWFkY3J1bWJzOwogICAgYnJlYWRjcnVtYnMucHVzaChtZXJnZWRCcmVhZGNydW1iKTsKICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gYnJlYWRjcnVtYnMubGVuZ3RoID4gbWF4Q3J1bWJzID8gYnJlYWRjcnVtYnMuc2xpY2UoLW1heENydW1icykgOiBicmVhZGNydW1iczsKCiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpOwoKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0TGFzdEJyZWFkY3J1bWIoKSB7CiAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYnNbdGhpcy5fYnJlYWRjcnVtYnMubGVuZ3RoIC0gMV07CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBjbGVhckJyZWFkY3J1bWJzKCkgewogICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTsKICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgIGFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCkgewogICAgdGhpcy5fYXR0YWNobWVudHMucHVzaChhdHRhY2htZW50KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYGdldFNjb3BlRGF0YSgpYCBpbnN0ZWFkLgogICAqLwogICBnZXRBdHRhY2htZW50cygpIHsKICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNjb3BlRGF0YSgpOwoKICAgIHJldHVybiBkYXRhLmF0dGFjaG1lbnRzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgY2xlYXJBdHRhY2htZW50cygpIHsKICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8qKiBAaW5oZXJpdERvYyAqLwogICBnZXRTY29wZURhdGEoKSB7CiAgICBjb25zdCB7CiAgICAgIF9icmVhZGNydW1icywKICAgICAgX2F0dGFjaG1lbnRzLAogICAgICBfY29udGV4dHMsCiAgICAgIF90YWdzLAogICAgICBfZXh0cmEsCiAgICAgIF91c2VyLAogICAgICBfbGV2ZWwsCiAgICAgIF9maW5nZXJwcmludCwKICAgICAgX2V2ZW50UHJvY2Vzc29ycywKICAgICAgX3Byb3BhZ2F0aW9uQ29udGV4dCwKICAgICAgX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSwKICAgICAgX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgX3NwYW4sCiAgICB9ID0gdGhpczsKCiAgICByZXR1cm4gewogICAgICBicmVhZGNydW1iczogX2JyZWFkY3J1bWJzLAogICAgICBhdHRhY2htZW50czogX2F0dGFjaG1lbnRzLAogICAgICBjb250ZXh0czogX2NvbnRleHRzLAogICAgICB0YWdzOiBfdGFncywKICAgICAgZXh0cmE6IF9leHRyYSwKICAgICAgdXNlcjogX3VzZXIsCiAgICAgIGxldmVsOiBfbGV2ZWwsCiAgICAgIGZpbmdlcnByaW50OiBfZmluZ2VycHJpbnQgfHwgW10sCiAgICAgIGV2ZW50UHJvY2Vzc29yczogX2V2ZW50UHJvY2Vzc29ycywKICAgICAgcHJvcGFnYXRpb25Db250ZXh0OiBfcHJvcGFnYXRpb25Db250ZXh0LAogICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IF9zZGtQcm9jZXNzaW5nTWV0YWRhdGEsCiAgICAgIHRyYW5zYWN0aW9uTmFtZTogX3RyYW5zYWN0aW9uTmFtZSwKICAgICAgc3BhbjogX3NwYW4sCiAgICB9OwogIH0KCiAgLyoqCiAgICogQXBwbGllcyBkYXRhIGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBhbmQgcnVucyBhbGwgZXZlbnQgcHJvY2Vzc29ycyBvbiBpdC4KICAgKgogICAqIEBwYXJhbSBldmVudCBFdmVudAogICAqIEBwYXJhbSBoaW50IE9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiwgZm9yIHVzZSBieSB0aGUgZXZlbnQgcHJvY2Vzc29ycy4KICAgKiBAaGlkZGVuCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBhcHBseVNjb3BlRGF0YVRvRXZlbnQoKWAgZGlyZWN0bHkKICAgKi8KICAgYXBwbHlUb0V2ZW50KAogICAgZXZlbnQsCiAgICBoaW50ID0ge30sCiAgICBhZGRpdGlvbmFsRXZlbnRQcm9jZXNzb3JzID0gW10sCiAgKSB7CiAgICBhcHBseVNjb3BlRGF0YVRvRXZlbnQoZXZlbnQsIHRoaXMuZ2V0U2NvcGVEYXRhKCkpOwoKICAgIC8vIFRPRE8gKHY4KTogVXBkYXRlIHRoaXMgb3JkZXIgdG8gYmU6IEdsb2JhbCA+IENsaWVudCA+IFNjb3BlCiAgICBjb25zdCBldmVudFByb2Nlc3NvcnMgPSBbCiAgICAgIC4uLmFkZGl0aW9uYWxFdmVudFByb2Nlc3NvcnMsCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAuLi5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSwKICAgICAgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzLAogICAgXTsKCiAgICByZXR1cm4gbm90aWZ5RXZlbnRQcm9jZXNzb3JzKGV2ZW50UHJvY2Vzc29ycywgZXZlbnQsIGhpbnQpOwogIH0KCiAgLyoqCiAgICogQWRkIGRhdGEgd2hpY2ggd2lsbCBiZSBhY2Nlc3NpYmxlIGR1cmluZyBldmVudCBwcm9jZXNzaW5nIGJ1dCB3b24ndCBnZXQgc2VudCB0byBTZW50cnkKICAgKi8KICAgc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKG5ld0RhdGEpIHsKICAgIHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHsgLi4udGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhLCAuLi5uZXdEYXRhIH07CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqLwogICBzZXRQcm9wYWdhdGlvbkNvbnRleHQoY29udGV4dCkgewogICAgdGhpcy5fcHJvcGFnYXRpb25Db250ZXh0ID0gY29udGV4dDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKi8KICAgZ2V0UHJvcGFnYXRpb25Db250ZXh0KCkgewogICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYW4gZXhjZXB0aW9uIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIGV4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIHRvIGNhcHR1cmUuCiAgICogQHBhcmFtIGhpbnQgT3B0aW5hbCBhZGRpdGlvbmFsIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBTZW50cnkgZXZlbnQuCiAgICogQHJldHVybnMgdGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBTZW50cnkgZXZlbnQuCiAgICovCiAgIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CgogICAgaWYgKCF0aGlzLl9jbGllbnQpIHsKICAgICAgbG9nZ2VyLndhcm4oJ05vIGNsaWVudCBjb25maWd1cmVkIG9uIHNjb3BlIC0gd2lsbCBub3QgY2FwdHVyZSBleGNlcHRpb24hJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpOwoKICAgIHRoaXMuX2NsaWVudC5jYXB0dXJlRXhjZXB0aW9uKAogICAgICBleGNlcHRpb24sCiAgICAgIHsKICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogZXhjZXB0aW9uLAogICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgICAuLi5oaW50LAogICAgICAgIGV2ZW50X2lkOiBldmVudElkLAogICAgICB9LAogICAgICB0aGlzLAogICAgKTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIENhcHR1cmUgYSBtZXNzYWdlIGZvciB0aGlzIHNjb3BlLgogICAqCiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gY2FwdHVyZS4KICAgKiBAcGFyYW0gbGV2ZWwgQW4gb3B0aW9uYWwgc2V2ZXJpdHkgbGV2ZWwgdG8gcmVwb3J0IHRoZSBtZXNzYWdlIHdpdGguCiAgICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LgogICAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgbWVzc2FnZS4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIG1lc3NhZ2UhJyk7CiAgICAgIHJldHVybiBldmVudElkOwogICAgfQoKICAgIGNvbnN0IHN5bnRoZXRpY0V4Y2VwdGlvbiA9IG5ldyBFcnJvcihtZXNzYWdlKTsKCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZU1lc3NhZ2UoCiAgICAgIG1lc3NhZ2UsCiAgICAgIGxldmVsLAogICAgICB7CiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLAogICAgICAgIC4uLmhpbnQsCiAgICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICAgIH0sCiAgICAgIHRoaXMsCiAgICApOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogQ2FwdHVyZXMgYSBtYW51YWxseSBjcmVhdGVkIGV2ZW50IGZvciB0aGlzIHNjb3BlIGFuZCBzZW5kcyBpdCB0byBTZW50cnkuCiAgICoKICAgKiBAcGFyYW0gZXhjZXB0aW9uIFRoZSBldmVudCB0byBjYXB0dXJlLgogICAqIEBwYXJhbSBoaW50IE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIFNlbnRyeSBldmVudC4KICAgKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LgogICAqLwogICBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKTsKCiAgICBpZiAoIXRoaXMuX2NsaWVudCkgewogICAgICBsb2dnZXIud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50IScpOwogICAgICByZXR1cm4gZXZlbnRJZDsKICAgIH0KCiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0sIHRoaXMpOwoKICAgIHJldHVybiBldmVudElkOwogIH0KCiAgLyoqCiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSBzZXQgY2FsbC4KICAgKi8KICAgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCkgewogICAgLy8gV2UgbmVlZCB0aGlzIGNoZWNrIGZvciB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgdG8gYmUgYWJsZSB0byB3b3JrIG9uIHNjb3BlIGR1cmluZyB1cGRhdGVzCiAgICAvLyBJZiB0aGlzIGNoZWNrIGlzIG5vdCBoZXJlIHdlJ2xsIHByb2R1Y2UgZW5kbGVzcyByZWN1cnNpb24gd2hlbiBzb21ldGhpbmcgaXMgZG9uZSB3aXRoIHRoZSBzY29wZQogICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay4KICAgIGlmICghdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzKSB7CiAgICAgIHRoaXMuX25vdGlmeWluZ0xpc3RlbmVycyA9IHRydWU7CiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4gewogICAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgICB9KTsKICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBnZW5lcmF0ZVByb3BhZ2F0aW9uQ29udGV4dCgpIHsKICByZXR1cm4gewogICAgdHJhY2VJZDogdXVpZDQoKSwKICAgIHNwYW5JZDogdXVpZDQoKS5zdWJzdHJpbmcoMTYpLAogIH07Cn0KCmNvbnN0IFNES19WRVJTSU9OID0gJzcuMTIwLjAnOwoKLyoqCiAqIEFQSSBjb21wYXRpYmlsaXR5IHZlcnNpb24gb2YgdGhpcyBodWIuCiAqCiAqIFdBUk5JTkc6IFRoaXMgbnVtYmVyIHNob3VsZCBvbmx5IGJlIGluY3JlYXNlZCB3aGVuIHRoZSBnbG9iYWwgaW50ZXJmYWNlCiAqIGNoYW5nZXMgYW5kIG5ldyBtZXRob2RzIGFyZSBpbnRyb2R1Y2VkLgogKgogKiBAaGlkZGVuCiAqLwpjb25zdCBBUElfVkVSU0lPTiA9IHBhcnNlRmxvYXQoU0RLX1ZFUlNJT04pOwoKLyoqCiAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIENhbiBiZSBvdmVyd3JpdHRlbgogKiB3aXRoIHtAbGluayBPcHRpb25zLm1heEJyZWFkY3J1bWJzfS4KICovCmNvbnN0IERFRkFVTFRfQlJFQURDUlVNQlMgPSAxMDA7CgovKioKICogQGRlcHJlY2F0ZWQgVGhlIGBIdWJgIGNsYXNzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDggb2YgdGhlIFNESyBpbiBmYXZvdXIgb2YgYFNjb3BlYCBhbmQgYENsaWVudGAgb2JqZWN0cy4KICoKICogSWYgeW91IHByZXZpb3VzbHkgdXNlZCB0aGUgYEh1YmAgY2xhc3MgZGlyZWN0bHksIHJlcGxhY2UgaXQgd2l0aCBgU2NvcGVgIGFuZCBgQ2xpZW50YCBvYmplY3RzLiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNdWx0aXBsZSBTZW50cnkgSW5zdGFuY2VzXShodHRwczovL2RvY3Muc2VudHJ5LmlvL3BsYXRmb3Jtcy9qYXZhc2NyaXB0L2Jlc3QtcHJhY3RpY2VzL211bHRpcGxlLXNlbnRyeS1pbnN0YW5jZXMvKQogKiAtIFtCcm93c2VyIEV4dGVuc2lvbnNdKGh0dHBzOi8vZG9jcy5zZW50cnkuaW8vcGxhdGZvcm1zL2phdmFzY3JpcHQvYmVzdC1wcmFjdGljZXMvYnJvd3Nlci1leHRlbnNpb25zLykKICoKICogU29tZSBvZiBvdXIgQVBJcyBhcmUgdHlwZWQgd2l0aCB0aGUgSHViIGNsYXNzIGluc3RlYWQgb2YgdGhlIGludGVyZmFjZSAoZS5nLiBgZ2V0Q3VycmVudEh1YmApLiBNb3N0IG9mIHRoZW0gYXJlIGRlcHJlY2F0ZWQKICogdGhlbXNlbHZlcyBhbmQgd2lsbCBhbHNvIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiA4LiBNb3JlIGluZm9ybWF0aW9uOgogKiAtIFtNaWdyYXRpb24gR3VpZGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvYmxvYi9kZXZlbG9wL01JR1JBVElPTi5tZCNkZXByZWNhdGUtaHViKQogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmNsYXNzIEh1YiAgewogIC8qKiBJcyBhIHtAbGluayBMYXllcn1bXSBjb250YWluaW5nIHRoZSBjbGllbnQgYW5kIHNjb3BlICovCgogIC8qKiBDb250YWlucyB0aGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LiAgKi8KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaHViLCB3aWxsIHB1c2ggb25lIHtAbGluayBMYXllcn0gaW50byB0aGUKICAgKiBpbnRlcm5hbCBzdGFjayBvbiBjcmVhdGlvbi4KICAgKgogICAqIEBwYXJhbSBjbGllbnQgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gc2NvcGUgYm91bmQgdG8gdGhlIGh1Yi4KICAgKiBAcGFyYW0gdmVyc2lvbiBudW1iZXIsIGhpZ2hlciBudW1iZXIgbWVhbnMgaGlnaGVyIHByaW9yaXR5LgogICAqCiAgICogQGRlcHJlY2F0ZWQgSW5zdGFudGlhdGlvbiBvZiBIdWIgb2JqZWN0cyBpcyBkZXByZWNhdGVkIGFuZCB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gOCBvZiB0aGUgU0RLLgogICAqCiAgICogSWYgeW91IGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEh1YiBmb3IgbXVsdGktY2xpZW50IHVzZSBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgaHViID0gbmV3IEh1YigpOwogICAqIGh1Yi5iaW5kQ2xpZW50KGNsaWVudCk7CiAgICogbWFrZU1haW4oaHViKQogICAqIGBgYAogICAqCiAgICogaW5zdGVhZCBpbml0aWFsaXplIHRoZSBjbGllbnQgYXMgZm9sbG93czoKICAgKgogICAqIGBgYAogICAqIC8vIE5FVwogICAqIFNlbnRyeS53aXRoSXNvbGF0aW9uU2NvcGUoKCkgPT4gewogICAqICAgIFNlbnRyeS5zZXRDdXJyZW50Q2xpZW50KGNsaWVudCk7CiAgICogICAgY2xpZW50LmluaXQoKTsKICAgKiB9KTsKICAgKiBgYGAKICAgKgogICAqIElmIHlvdSBhcmUgdXNpbmcgdGhlIEh1YiB0byBjYXB0dXJlIGV2ZW50cyBsaWtlIHNvOgogICAqCiAgICogYGBgCiAgICogLy8gT0xECiAgICogY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgpOwogICAqIGNvbnN0IGh1YiA9IG5ldyBIdWIoY2xpZW50KTsKICAgKiBodWIuY2FwdHVyZUV4Y2VwdGlvbigpCiAgICogYGBgCiAgICoKICAgKiBpbnN0ZWFkIGNhcHR1cmUgaXNvbGF0ZWQgZXZlbnRzIGFzIGZvbGxvd3M6CiAgICoKICAgKiBgYGAKICAgKiAvLyBORVcKICAgKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCk7CiAgICogY29uc3Qgc2NvcGUgPSBuZXcgU2NvcGUoKTsKICAgKiBzY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgKiBzY29wZS5jYXB0dXJlRXhjZXB0aW9uKCk7CiAgICogYGBgCiAgICovCiAgIGNvbnN0cnVjdG9yKAogICAgY2xpZW50LAogICAgc2NvcGUsCiAgICBpc29sYXRpb25TY29wZSwKICAgICAgX3ZlcnNpb24gPSBBUElfVkVSU0lPTiwKICApIHt0aGlzLl92ZXJzaW9uID0gX3ZlcnNpb247CiAgICBsZXQgYXNzaWduZWRTY29wZTsKICAgIGlmICghc2NvcGUpIHsKICAgICAgYXNzaWduZWRTY29wZSA9IG5ldyBTY29wZSgpOwogICAgICBhc3NpZ25lZFNjb3BlLnNldENsaWVudChjbGllbnQpOwogICAgfSBlbHNlIHsKICAgICAgYXNzaWduZWRTY29wZSA9IHNjb3BlOwogICAgfQoKICAgIGxldCBhc3NpZ25lZElzb2xhdGlvblNjb3BlOwogICAgaWYgKCFpc29sYXRpb25TY29wZSkgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gbmV3IFNjb3BlKCk7CiAgICAgIGFzc2lnbmVkSXNvbGF0aW9uU2NvcGUuc2V0Q2xpZW50KGNsaWVudCk7CiAgICB9IGVsc2UgewogICAgICBhc3NpZ25lZElzb2xhdGlvblNjb3BlID0gaXNvbGF0aW9uU2NvcGU7CiAgICB9CgogICAgdGhpcy5fc3RhY2sgPSBbeyBzY29wZTogYXNzaWduZWRTY29wZSB9XTsKCiAgICBpZiAoY2xpZW50KSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICB0aGlzLmJpbmRDbGllbnQoY2xpZW50KTsKICAgIH0KCiAgICB0aGlzLl9pc29sYXRpb25TY29wZSA9IGFzc2lnbmVkSXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBDaGVja3MgaWYgdGhpcyBodWIncyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gdGhlIGdpdmVuIHZlcnNpb24uCiAgICoKICAgKiBAcGFyYW0gdmVyc2lvbiBBIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUgdG8uCiAgICogQHJldHVybiBUcnVlIGlmIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIG5ld2VyOyBvdGhlcndpc2UgZmFsc2UuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgaXNPbGRlclRoYW4odmVyc2lvbikgewogICAgcmV0dXJuIHRoaXMuX3ZlcnNpb24gPCB2ZXJzaW9uOwogIH0KCiAgLyoqCiAgICogVGhpcyBiaW5kcyB0aGUgZ2l2ZW4gY2xpZW50IHRvIHRoZSBjdXJyZW50IHNjb3BlLgogICAqIEBwYXJhbSBjbGllbnQgQW4gU0RLIGNsaWVudCAoY2xpZW50KSBpbnN0YW5jZS4KICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgaW5pdEFuZEJpbmQoKWAgZGlyZWN0bHksIG9yIGBzZXRDdXJyZW50Q2xpZW50KClgIGFuZC9vciBgY2xpZW50LmluaXQoKWAgaW5zdGVhZC4KICAgKi8KICAgYmluZENsaWVudChjbGllbnQpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgdG9wID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgdG9wLmNsaWVudCA9IGNsaWVudDsKICAgIHRvcC5zY29wZS5zZXRDbGllbnQoY2xpZW50KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKGNsaWVudCAmJiBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIGNsaWVudC5zZXR1cEludGVncmF0aW9ucygpOwogICAgfQogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwdXNoU2NvcGUoKSB7CiAgICAvLyBXZSB3YW50IHRvIGNsb25lIHRoZSBjb250ZW50IG9mIHByZXYgc2NvcGUKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCkuY2xvbmUoKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTdGFjaygpLnB1c2goewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY2xpZW50OiB0aGlzLmdldENsaWVudCgpLAogICAgICBzY29wZSwKICAgIH0pOwogICAgcmV0dXJuIHNjb3BlOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgd2l0aFNjb3BlYCBpbnN0ZWFkLgogICAqLwogICBwb3BTY29wZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgaWYgKHRoaXMuZ2V0U3RhY2soKS5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gISF0aGlzLmdldFN0YWNrKCkucG9wKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkud2l0aFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIHdpdGhTY29wZShjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBzY29wZSA9IHRoaXMucHVzaFNjb3BlKCk7CgogICAgbGV0IG1heWJlUHJvbWlzZVJlc3VsdDsKICAgIHRyeSB7CiAgICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKHNjb3BlKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICBpZiAoaXNUaGVuYWJsZShtYXliZVByb21pc2VSZXN1bHQpKSB7CiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpc1RoZW5hYmxlIHJldHVybnMgdGhlIHdyb25nIHR5cGUKICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdC50aGVuKAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTsKICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgfSwKICAgICAgICBlID0+IHsKICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICAgICAgdGhpcy5wb3BTY29wZSgpOwogICAgICAgICAgdGhyb3cgZTsKICAgICAgICB9LAogICAgICApOwogICAgfQoKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5wb3BTY29wZSgpOwogICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5nZXRDbGllbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0Q2xpZW50KCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLmNsaWVudCA7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLgogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0Q3VycmVudFNjb3BlKClgIGluc3RlYWQuCiAgICovCiAgIGdldFNjb3BlKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICByZXR1cm4gdGhpcy5nZXRTdGFja1RvcCgpLnNjb3BlOwogIH0KCiAgLyoqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuZ2V0SXNvbGF0aW9uU2NvcGUoKWAgaW5zdGVhZC4KICAgKi8KICAgZ2V0SXNvbGF0aW9uU2NvcGUoKSB7CiAgICByZXR1cm4gdGhpcy5faXNvbGF0aW9uU2NvcGU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzY29wZSBzdGFjayBmb3IgZG9tYWlucyBvciB0aGUgcHJvY2Vzcy4KICAgKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiB2OC4KICAgKi8KICAgZ2V0U3RhY2soKSB7CiAgICByZXR1cm4gdGhpcy5fc3RhY2s7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB0b3Btb3N0IHNjb3BlIGxheWVyIGluIHRoZSBvcmRlciBkb21haW4gPiBsb2NhbCA+IHByb2Nlc3MuCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGdldFN0YWNrVG9wKCkgewogICAgcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aCAtIDFdOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpIHsKICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSBoaW50ICYmIGhpbnQuZXZlbnRfaWQgPyBoaW50LmV2ZW50X2lkIDogdXVpZDQoKSk7CiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBuZXcgRXJyb3IoJ1NlbnRyeSBzeW50aGV0aWNFeGNlcHRpb24nKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCB7CiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgIGBTZW50cnkuY2FwdHVyZU1lc3NhZ2UoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZU1lc3NhZ2UoCiAgICBtZXNzYWdlLAogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBsZXZlbCwKICAgIGhpbnQsCiAgKSB7CiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCkpOwogICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKG1lc3NhZ2UpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIHsKICAgICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsCiAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiwKICAgICAgLi4uaGludCwKICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsCiAgICB9KTsKCiAgICByZXR1cm4gZXZlbnRJZDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5jYXB0dXJlRXZlbnQoKWAgaW5zdGVhZC4KICAgKi8KICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50KSB7CiAgICBjb25zdCBldmVudElkID0gaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCk7CiAgICBpZiAoIWV2ZW50LnR5cGUpIHsKICAgICAgdGhpcy5fbGFzdEV2ZW50SWQgPSBldmVudElkOwogICAgfQogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuY2FwdHVyZUV2ZW50KGV2ZW50LCB7IC4uLmhpbnQsIGV2ZW50X2lkOiBldmVudElkIH0pOwogICAgcmV0dXJuIGV2ZW50SWQ7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjguCiAgICovCiAgIGxhc3RFdmVudElkKCkgewogICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKgogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmFkZEJyZWFkY3J1bWIoKWAgaW5zdGVhZC4KICAgKi8KICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iLCBoaW50KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwoKICAgIGlmICghY2xpZW50KSByZXR1cm47CgogICAgY29uc3QgeyBiZWZvcmVCcmVhZGNydW1iID0gbnVsbCwgbWF4QnJlYWRjcnVtYnMgPSBERUZBVUxUX0JSRUFEQ1JVTUJTIH0gPQogICAgICAoY2xpZW50LmdldE9wdGlvbnMgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgaWYgKG1heEJyZWFkY3J1bWJzIDw9IDApIHJldHVybjsKCiAgICBjb25zdCB0aW1lc3RhbXAgPSBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCk7CiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTsKICAgIGNvbnN0IGZpbmFsQnJlYWRjcnVtYiA9IGJlZm9yZUJyZWFkY3J1bWIKICAgICAgPyAoY29uc29sZVNhbmRib3goKCkgPT4gYmVmb3JlQnJlYWRjcnVtYihtZXJnZWRCcmVhZGNydW1iLCBoaW50KSkgKQogICAgICA6IG1lcmdlZEJyZWFkY3J1bWI7CgogICAgaWYgKGZpbmFsQnJlYWRjcnVtYiA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChjbGllbnQuZW1pdCkgewogICAgICBjbGllbnQuZW1pdCgnYmVmb3JlQWRkQnJlYWRjcnVtYicsIGZpbmFsQnJlYWRjcnVtYiwgaGludCk7CiAgICB9CgogICAgLy8gVE9ETyh2OCk6IEkga25vdyB0aGlzIGNvbW1lbnQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgYmVjYXVzZSB0aGUgaHViIHdpbGwgYmUgZGVwcmVjYXRlZCBidXQgSSBzdGlsbCB3YW50ZWQgdG8KICAgIC8vIHdyaXRlIGl0IGRvd24uIEluIHRoZW9yeSwgd2Ugd291bGQgaGF2ZSB0byBhZGQgdGhlIGJyZWFkY3J1bWJzIHRvIHRoZSBpc29sYXRpb24gc2NvcGUgaGVyZSwgaG93ZXZlciwgdGhhdCB3b3VsZAogICAgLy8gZHVwbGljYXRlIGFsbCBvZiB0aGUgYnJlYWRjcnVtYnMuIFRoZXJlIHdhcyB0aGUgcG9zc2liaWxpdHkgb2YgYWRkaW5nIGJyZWFkY3J1bWJzIHRvIGJvdGgsIHRoZSBpc29sYXRpb24gc2NvcGUKICAgIC8vIGFuZCB0aGUgbm9ybWFsIHNjb3BlLCBhbmQgZGVkdXBsaWNhdGluZyBpdCBkb3duIHRoZSBsaW5lIGluIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLiBIb3dldmVyLCB0aGF0IHdvdWxkCiAgICAvLyBoYXZlIGJlZW4gdmVyeSBmcmFnaWxlLCBiZWNhdXNlIHRoZSBicmVhZGNydW1iIG9iamVjdHMgd291bGQgaGF2ZSBuZWVkZWQgdG8ga2VlcCB0aGVpciBpZGVudGl0eSBhbGwgdGhyb3VnaG91dAogICAgLy8gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUuCiAgICAvLyBJbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCB0aGUgdG9wIGxldmVsIGBTZW50cnkuYWRkQnJlYWRjcnVtYigpYCBzaG91bGQgT05MWSB3cml0ZSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgoKICAgIHNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldFVzZXIoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VXNlcih1c2VyKSB7CiAgICAvLyBUT0RPKHY4KTogVGhlIHRvcCBsZXZlbCBgU2VudHJ5LnNldFVzZXIoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldFVzZXIodXNlcik7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRVc2VyKHVzZXIpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWdzKClgIGluc3RlYWQuCiAgICovCiAgIHNldFRhZ3ModGFncykgewogICAgLy8gVE9ETyh2OCk6IFRoZSB0b3AgbGV2ZWwgYFNlbnRyeS5zZXRUYWdzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWdzKHRhZ3MpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0VGFncyh0YWdzKTsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZW50cnkuc2V0RXh0cmFzKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhcyhleHRyYXMpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmFzKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRFeHRyYXMoZXh0cmFzKTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldEV4dHJhcyhleHRyYXMpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgYFNlbnRyeS5zZXRUYWcoKWAgaW5zdGVhZC4KICAgKi8KICAgc2V0VGFnKGtleSwgdmFsdWUpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0VGFnKClgIGZ1bmN0aW9uIHNob3VsZCB3cml0ZSBPTkxZIHRvIHRoZSBpc29sYXRpb24gc2NvcGUuCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0U2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIHRoaXMuZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRUYWcoa2V5LCB2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldEV4dHJhKClgIGluc3RlYWQuCiAgICovCiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0RXh0cmEoKWAgZnVuY3Rpb24gc2hvdWxkIHdyaXRlIE9OTFkgdG8gdGhlIGlzb2xhdGlvbiBzY29wZS4KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRTY29wZSgpLnNldEV4dHJhKGtleSwgZXh0cmEpOwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldElzb2xhdGlvblNjb3BlKCkuc2V0RXh0cmEoa2V5LCBleHRyYSk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LnNldENvbnRleHQoKWAgaW5zdGVhZC4KICAgKi8KICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHsKICAgIC8vIFRPRE8odjgpOiBUaGUgdG9wIGxldmVsIGBTZW50cnkuc2V0Q29udGV4dCgpYCBmdW5jdGlvbiBzaG91bGQgd3JpdGUgT05MWSB0byB0aGUgaXNvbGF0aW9uIHNjb3BlLgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICB0aGlzLmdldFNjb3BlKCkuc2V0Q29udGV4dChuYW1lLCBjb250ZXh0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5nZXRJc29sYXRpb25TY29wZSgpLnNldENvbnRleHQobmFtZSwgY29udGV4dCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBnZXRTY29wZSgpYCBkaXJlY3RseS4KICAgKi8KICAgY29uZmlndXJlU2NvcGUoY2FsbGJhY2spIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CiAgICBpZiAoY2xpZW50KSB7CiAgICAgIGNhbGxiYWNrKHNjb3BlKTsKICAgIH0KICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICovCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgIHJ1bihjYWxsYmFjaykgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBvbGRIdWIgPSBtYWtlTWFpbih0aGlzKTsKICAgIHRyeSB7CiAgICAgIGNhbGxiYWNrKHRoaXMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICAgIG1ha2VNYWluKG9sZEh1Yik7CiAgICB9CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSBgU2VudHJ5LmdldENsaWVudCgpLmdldEludGVncmF0aW9uQnlOYW1lKClgIGluc3RlYWQuCiAgICovCiAgIGdldEludGVncmF0aW9uKGludGVncmF0aW9uKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0Q2xpZW50KCk7CiAgICBpZiAoIWNsaWVudCkgcmV0dXJuIG51bGw7CiAgICB0cnkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgcmV0dXJuIGNsaWVudC5nZXRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbik7CiAgICB9IGNhdGNoIChfb08pIHsKICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYENhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiAke2ludGVncmF0aW9uLmlkfSBmcm9tIHRoZSBjdXJyZW50IEh1YmApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIG5ldyBgVHJhbnNhY3Rpb25gIGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBtYW51YWwgdHJhY2luZyBpbnN0cnVtZW50YXRpb24uCiAgICoKICAgKiBBIHRyZWUgc3RydWN0dXJlIGNhbiBiZSBidWlsdCBieSBhZGRpbmcgY2hpbGQgc3BhbnMgdG8gdGhlIHRyYW5zYWN0aW9uLCBhbmQgY2hpbGQgc3BhbnMgdG8gb3RoZXIgc3BhbnMuIFRvIHN0YXJ0IGEKICAgKiBuZXcgY2hpbGQgc3BhbiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIGFueSBzcGFuLCBjYWxsIHRoZSByZXNwZWN0aXZlIGAuc3RhcnRDaGlsZCgpYCBtZXRob2QuCiAgICoKICAgKiBFdmVyeSBjaGlsZCBzcGFuIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCwgb3RoZXJ3aXNlIHRoZSB1bmZpbmlzaGVkIHNwYW5zIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgdHJhbnNhY3Rpb24gbXVzdCBiZSBmaW5pc2hlZCB3aXRoIGEgY2FsbCB0byBpdHMgYC5lbmQoKWAgbWV0aG9kLCBhdCB3aGljaCBwb2ludCB0aGUgdHJhbnNhY3Rpb24gd2l0aCBhbGwgaXRzCiAgICogZmluaXNoZWQgY2hpbGQgc3BhbnMgd2lsbCBiZSBzZW50IHRvIFNlbnRyeS4KICAgKgogICAqIEBwYXJhbSBjb250ZXh0IFByb3BlcnRpZXMgb2YgdGhlIG5ldyBgVHJhbnNhY3Rpb25gLgogICAqIEBwYXJhbSBjdXN0b21TYW1wbGluZ0NvbnRleHQgSW5mb3JtYXRpb24gZ2l2ZW4gdG8gdGhlIHRyYW5zYWN0aW9uIHNhbXBsaW5nIGZ1bmN0aW9uIChhbG9uZyB3aXRoIGNvbnRleHQtZGVwZW5kZW50CiAgICogZGVmYXVsdCB2YWx1ZXMpLiBTZWUge0BsaW5rIE9wdGlvbnMudHJhY2VzU2FtcGxlcn0uCiAgICoKICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gd2hpY2ggd2FzIGp1c3Qgc3RhcnRlZAogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdGFydFNwYW4oKWAsIGBzdGFydFNwYW5NYW51YWwoKWAgb3IgYHN0YXJ0SW5hY3RpdmVTcGFuKClgIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0VHJhbnNhY3Rpb24oY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KSB7CiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9jYWxsRXh0ZW5zaW9uTWV0aG9kKCdzdGFydFRyYW5zYWN0aW9uJywgY29udGV4dCwgY3VzdG9tU2FtcGxpbmdDb250ZXh0KTsKCiAgICBpZiAoREVCVUdfQlVJTEQgJiYgIXJlc3VsdCkgewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTsKICAgICAgaWYgKCFjbGllbnQpIHsKICAgICAgICBsb2dnZXIud2FybigKICAgICAgICAgICJUcmFjaW5nIGV4dGVuc2lvbiAnc3RhcnRUcmFuc2FjdGlvbicgaXMgbWlzc2luZy4gWW91IHNob3VsZCAnaW5pdCcgdGhlIFNESyBiZWZvcmUgY2FsbGluZyAnc3RhcnRUcmFuc2FjdGlvbiciLAogICAgICAgICk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9nZ2VyLndhcm4oYFRyYWNpbmcgZXh0ZW5zaW9uICdzdGFydFRyYW5zYWN0aW9uJyBoYXMgbm90IGJlZW4gYWRkZWQuIENhbGwgJ2FkZFRyYWNpbmdFeHRlbnNpb25zJyBiZWZvcmUgY2FsbGluZyAnaW5pdCc6ClNlbnRyeS5hZGRUcmFjaW5nRXh0ZW5zaW9ucygpOwpTZW50cnkuaW5pdCh7Li4ufSk7CmApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIEBpbmhlcml0RG9jCiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzcGFuVG9UcmFjZUhlYWRlcigpYCBpbnN0ZWFkLgogICAqLwogICB0cmFjZUhlYWRlcnMoKSB7CiAgICByZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZCgndHJhY2VIZWFkZXJzJyk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqCiAgICogQGRlcHJlY2F0ZWQgVXNlIHRvcCBsZXZlbCBgY2FwdHVyZVNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGNhcHR1cmVTZXNzaW9uKGVuZFNlc3Npb24gPSBmYWxzZSkgewogICAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGUKICAgIGlmIChlbmRTZXNzaW9uKSB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgICByZXR1cm4gdGhpcy5lbmRTZXNzaW9uKCk7CiAgICB9CgogICAgLy8gb25seSBzZW5kIHRoZSB1cGRhdGUKICAgIHRoaXMuX3NlbmRTZXNzaW9uVXBkYXRlKCk7CiAgfQoKICAvKioKICAgKiBAaW5oZXJpdERvYwogICAqIEBkZXByZWNhdGVkIFVzZSB0b3AgbGV2ZWwgYGVuZFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIGVuZFNlc3Npb24oKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IGxheWVyID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3Qgc2NvcGUgPSBsYXllci5zY29wZTsKICAgIGNvbnN0IHNlc3Npb24gPSBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoc2Vzc2lvbikgewogICAgICBjbG9zZVNlc3Npb24oc2Vzc2lvbik7CiAgICB9CiAgICB0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpOwoKICAgIC8vIHRoZSBzZXNzaW9uIGlzIG92ZXI7IHRha2UgaXQgb2ZmIG9mIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbigpOwogIH0KCiAgLyoqCiAgICogQGluaGVyaXREb2MKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wIGxldmVsIGBzdGFydFNlc3Npb25gIGluc3RlYWQuCiAgICovCiAgIHN0YXJ0U2Vzc2lvbihjb250ZXh0KSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb24KICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpOwogICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCA9IERFRkFVTFRfRU5WSVJPTk1FTlQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307CgogICAgLy8gV2lsbCBmZXRjaCB1c2VyQWdlbnQgaWYgY2FsbGVkIGZyb20gYnJvd3NlciBzZGsKICAgIGNvbnN0IHsgdXNlckFnZW50IH0gPSBHTE9CQUxfT0JKLm5hdmlnYXRvciB8fCB7fTsKCiAgICBjb25zdCBzZXNzaW9uID0gbWFrZVNlc3Npb24oewogICAgICByZWxlYXNlLAogICAgICBlbnZpcm9ubWVudCwKICAgICAgdXNlcjogc2NvcGUuZ2V0VXNlcigpLAogICAgICAuLi4odXNlckFnZW50ICYmIHsgdXNlckFnZW50IH0pLAogICAgICAuLi5jb250ZXh0LAogICAgfSk7CgogICAgLy8gRW5kIGV4aXN0aW5nIHNlc3Npb24gaWYgdGhlcmUncyBvbmUKICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7CiAgICBpZiAoY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7CiAgICAgIHVwZGF0ZVNlc3Npb24oY3VycmVudFNlc3Npb24sIHsgc3RhdHVzOiAnZXhpdGVkJyB9KTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgdGhpcy5lbmRTZXNzaW9uKCk7CgogICAgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZQogICAgc2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uKTsKCiAgICByZXR1cm4gc2Vzc2lvbjsKICB9CgogIC8qKgogICAqIFJldHVybnMgaWYgZGVmYXVsdCBQSUkgc2hvdWxkIGJlIHNlbnQgdG8gU2VudHJ5IGFuZCBwcm9wYWdhdGVkIGluIG91cmdvaW5nIHJlcXVlc3RzCiAgICogd2hlbiBUcmFjaW5nIGlzIHVzZWQuCiAgICoKICAgKiBAZGVwcmVjYXRlZCBVc2UgdG9wLWxldmVsIGBnZXRDbGllbnQoKS5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWlgIGluc3RlYWQuIFRoaXMgZnVuY3Rpb24KICAgKiBvbmx5IHVubmVjZXNzYXJpbHkgaW5jcmVhc2VkIEFQSSBzdXJmYWNlIGJ1dCBvbmx5IHdyYXBwZWQgYWNjZXNzaW5nIHRoZSBvcHRpb24uCiAgICovCiAgIHNob3VsZFNlbmREZWZhdWx0UGlpKCkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldENsaWVudCgpOwogICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudCAmJiBjbGllbnQuZ2V0T3B0aW9ucygpOwogICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnNlbmREZWZhdWx0UGlpKTsKICB9CgogIC8qKgogICAqIFNlbmRzIHRoZSBjdXJyZW50IFNlc3Npb24gb24gdGhlIHNjb3BlCiAgICovCiAgIF9zZW5kU2Vzc2lvblVwZGF0ZSgpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7CgogICAgY29uc3Qgc2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24oKTsKICAgIGlmIChzZXNzaW9uICYmIGNsaWVudCAmJiBjbGllbnQuY2FwdHVyZVNlc3Npb24pIHsKICAgICAgY2xpZW50LmNhcHR1cmVTZXNzaW9uKHNlc3Npb24pOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2FsbHMgZ2xvYmFsIGV4dGVuc2lvbiBtZXRob2QgYW5kIGJpbmRpbmcgY3VycmVudCBpbnN0YW5jZSB0byB0aGUgZnVuY3Rpb24gY2FsbAogICAqLwogIC8vIEB0cy1leHBlY3QtZXJyb3IgRnVuY3Rpb24gbGFja3MgZW5kaW5nIHJldHVybiBzdGF0ZW1lbnQgYW5kIHJldHVybiB0eXBlIGRvZXMgbm90IGluY2x1ZGUgJ3VuZGVmaW5lZCcuIHRzKDIzNjYpCiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgX2NhbGxFeHRlbnNpb25NZXRob2QobWV0aG9kLCAuLi5hcmdzKSB7CiAgICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTsKICAgIGNvbnN0IHNlbnRyeSA9IGNhcnJpZXIuX19TRU5UUllfXzsKICAgIGlmIChzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgdHlwZW9mIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIHNlbnRyeS5leHRlbnNpb25zW21ldGhvZF0uYXBwbHkodGhpcywgYXJncyk7CiAgICB9CiAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIud2FybihgRXh0ZW5zaW9uIG1ldGhvZCAke21ldGhvZH0gY291bGRuJ3QgYmUgZm91bmQsIGRvaW5nIG5vdGhpbmcuYCk7CiAgfQp9CgovKioKICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuCiAqCiAqIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JsZW1hdGljLCBiZWNhdXNlIGRlc3BpdGUgYWx3YXlzIHJldHVybmluZyBhIHZhbGlkIENhcnJpZXIsCiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVjawogKiBhdCB0aGUgY2FsbC1zaXRlLiBXZSBhbHdheXMgYWNjZXNzIHRoZSBjYXJyaWVyIHRocm91Z2ggdGhpcyBmdW5jdGlvbiwgc28gd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGBfX1NFTlRSWV9fYCBpcyB0aGVyZS4KICoqLwpmdW5jdGlvbiBnZXRNYWluQ2FycmllcigpIHsKICBHTE9CQUxfT0JKLl9fU0VOVFJZX18gPSBHTE9CQUxfT0JKLl9fU0VOVFJZX18gfHwgewogICAgZXh0ZW5zaW9uczoge30sCiAgICBodWI6IHVuZGVmaW5lZCwKICB9OwogIHJldHVybiBHTE9CQUxfT0JKOwp9CgovKioKICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdAogKgogKiBAcmV0dXJucyBUaGUgb2xkIHJlcGxhY2VkIGh1YgogKgogKiBAZGVwcmVjYXRlZCBVc2UgYHNldEN1cnJlbnRDbGllbnQoKWAgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBtYWtlTWFpbihodWIpIHsKICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7CiAgY29uc3Qgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpOwogIHNldEh1Yk9uQ2FycmllcihyZWdpc3RyeSwgaHViKTsKICByZXR1cm4gb2xkSHViOwp9CgovKioKICogUmV0dXJucyB0aGUgZGVmYXVsdCBodWIgaW5zdGFuY2UuCiAqCiAqIElmIGEgaHViIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgZ2xvYmFsIGNhcnJpZXIgYnV0IHRoaXMgbW9kdWxlCiAqIGNvbnRhaW5zIGEgbW9yZSByZWNlbnQgdmVyc2lvbiwgaXQgcmVwbGFjZXMgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbi4KICogT3RoZXJ3aXNlLCB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgaHViIHdpbGwgYmUgcmV0dXJuZWQuCiAqCiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgcmVzcGVjdGl2ZSByZXBsYWNlbWVudCBtZXRob2QgZGlyZWN0bHkgaW5zdGVhZC4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRDdXJyZW50SHViKCkgewogIC8vIEdldCBtYWluIGNhcnJpZXIgKGdsb2JhbCBmb3IgZXZlcnkgZW52aXJvbm1lbnQpCiAgY29uc3QgcmVnaXN0cnkgPSBnZXRNYWluQ2FycmllcigpOwoKICBpZiAocmVnaXN0cnkuX19TRU5UUllfXyAmJiByZWdpc3RyeS5fX1NFTlRSWV9fLmFjcykgewogICAgY29uc3QgaHViID0gcmVnaXN0cnkuX19TRU5UUllfXy5hY3MuZ2V0Q3VycmVudEh1YigpOwoKICAgIGlmIChodWIpIHsKICAgICAgcmV0dXJuIGh1YjsKICAgIH0KICB9CgogIC8vIFJldHVybiBodWIgdGhhdCBsaXZlcyBvbiBhIGdsb2JhbCBvYmplY3QKICByZXR1cm4gZ2V0R2xvYmFsSHViKHJlZ2lzdHJ5KTsKfQoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCmZ1bmN0aW9uIGdldEdsb2JhbEh1YihyZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCkpIHsKICAvLyBJZiB0aGVyZSdzIG5vIGh1Yiwgb3IgaXRzIGFuIG9sZCBBUEksIGFzc2lnbiBhIG5ldyBvbmUKCiAgaWYgKAogICAgIWhhc0h1Yk9uQ2FycmllcihyZWdpc3RyeSkgfHwKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogICAgZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKQogICkgewogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIG5ldyBIdWIoKSk7CiAgfQoKICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBnbG9iYWwgb2JqZWN0CiAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTsKfQoKLyoqCiAqIFRoaXMgd2lsbCB0ZWxsIHdoZXRoZXIgYSBjYXJyaWVyIGhhcyBhIGh1YiBvbiBpdCBvciBub3QKICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqLwpmdW5jdGlvbiBoYXNIdWJPbkNhcnJpZXIoY2FycmllcikgewogIHJldHVybiAhIShjYXJyaWVyICYmIGNhcnJpZXIuX19TRU5UUllfXyAmJiBjYXJyaWVyLl9fU0VOVFJZX18uaHViKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcge0BsaW5rIEh1Yn0gYW5kIGFkZCB0byB0aGUgcGFzc2VkIG9iamVjdCBvbgogKiBfX1NFTlRSWV9fLmh1Yi4KICogQHBhcmFtIGNhcnJpZXIgb2JqZWN0CiAqIEBoaWRkZW4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBnZXRIdWJGcm9tQ2FycmllcihjYXJyaWVyKSB7CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uCiAgcmV0dXJuIGdldEdsb2JhbFNpbmdsZXRvbignaHViJywgKCkgPT4gbmV3IEh1YigpLCBjYXJyaWVyKTsKfQoKLyoqCiAqIFRoaXMgd2lsbCBzZXQgcGFzc2VkIHtAbGluayBIdWJ9IG9uIHRoZSBwYXNzZWQgb2JqZWN0J3MgX19TRU5UUllfXy5odWIgYXR0cmlidXRlCiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdAogKiBAcGFyYW0gaHViIEh1YgogKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUKICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpmdW5jdGlvbiBzZXRIdWJPbkNhcnJpZXIoY2FycmllciwgaHViKSB7CiAgaWYgKCFjYXJyaWVyKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgX19TRU5UUllfXyA9IChjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge30pOwogIF9fU0VOVFJZX18uaHViID0gaHViOwogIHJldHVybiB0cnVlOwp9CgovKioKICogQXBwbHkgU2RrSW5mbyAobmFtZSwgdmVyc2lvbiwgcGFja2FnZXMsIGludGVncmF0aW9ucykgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQga2V5LgogKiBNZXJnZSB3aXRoIGV4aXN0aW5nIGRhdGEgaWYgYW55LgogKiovCmZ1bmN0aW9uIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBzZGtJbmZvKSB7CiAgaWYgKCFzZGtJbmZvKSB7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTsKICBldmVudC5zZGsubmFtZSA9IGV2ZW50LnNkay5uYW1lIHx8IHNka0luZm8ubmFtZTsKICBldmVudC5zZGsudmVyc2lvbiA9IGV2ZW50LnNkay52ZXJzaW9uIHx8IHNka0luZm8udmVyc2lvbjsKICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uKHNka0luZm8uaW50ZWdyYXRpb25zIHx8IFtdKV07CiAgZXZlbnQuc2RrLnBhY2thZ2VzID0gWy4uLihldmVudC5zZGsucGFja2FnZXMgfHwgW10pLCAuLi4oc2RrSW5mby5wYWNrYWdlcyB8fCBbXSldOwogIHJldHVybiBldmVudDsKfQoKLyoqIENyZWF0ZXMgYW4gZW52ZWxvcGUgZnJvbSBhIFNlc3Npb24gKi8KZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKAogIHNlc3Npb24sCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IHsKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICB9OwoKICBjb25zdCBlbnZlbG9wZUl0ZW0gPQogICAgJ2FnZ3JlZ2F0ZXMnIGluIHNlc3Npb24gPyBbeyB0eXBlOiAnc2Vzc2lvbnMnIH0sIHNlc3Npb25dIDogW3sgdHlwZTogJ3Nlc3Npb24nIH0sIHNlc3Npb24udG9KU09OKCldOwoKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZW52ZWxvcGVJdGVtXSk7Cn0KCi8qKgogKiBDcmVhdGUgYW4gRW52ZWxvcGUgZnJvbSBhbiBldmVudC4KICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGUoCiAgZXZlbnQsCiAgZHNuLAogIG1ldGFkYXRhLAogIHR1bm5lbCwKKSB7CiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpOwoKICAvKgogICAgTm90ZTogRHVlIHRvIFRTLCBldmVudC50eXBlIG1heSBiZSBgcmVwbGF5X2V2ZW50YCwgdGhlb3JldGljYWxseS4KICAgIEluIHByYWN0aWNlLCB3ZSBuZXZlciBjYWxsIGBjcmVhdGVFdmVudEVudmVsb3BlYCB3aXRoIGByZXBsYXlfZXZlbnRgIHR5cGUsCiAgICBhbmQgd2UnZCBoYXZlIHRvIGFkanV0IGEgbG9vb3Qgb2YgdHlwZXMgdG8gbWFrZSB0aGlzIHdvcmsgcHJvcGVybHkuCiAgICBXZSB3YW50IHRvIGF2b2lkIGNhc3RpbmcgdGhpcyBhcm91bmQsIGFzIHRoYXQgY291bGQgbGVhZCB0byBidWdzIChlLmcuIHdoZW4gd2UgYWRkIGFub3RoZXIgdHlwZSkKICAgIFNvIHRoZSBzYWZlIGNob2ljZSBpcyB0byByZWFsbHkgZ3VhcmQgYWdhaW5zdCB0aGUgcmVwbGF5X2V2ZW50IHR5cGUgaGVyZS4KICAqLwogIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gJ3JlcGxheV9ldmVudCcgPyBldmVudC50eXBlIDogJ2V2ZW50JzsKCiAgZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQsIG1ldGFkYXRhICYmIG1ldGFkYXRhLnNkayk7CgogIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKGV2ZW50LCBzZGtJbmZvLCB0dW5uZWwsIGRzbik7CgogIC8vIFByZXZlbnQgdGhpcyBkYXRhICh3aGljaCwgaWYgaXQgZXhpc3RzLCB3YXMgdXNlZCBpbiBlYXJsaWVyIHN0ZXBzIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lKSBmcm9tIGJlaW5nIHNlbnQgdG8KICAvLyBzZW50cnkuIChOb3RlOiBPdXIgdXNlIG9mIHRoaXMgcHJvcGVydHkgY29tZXMgYW5kIGdvZXMgd2l0aCB3aGF0ZXZlciB3ZSBtaWdodCBiZSBkZWJ1Z2dpbmcsIHdoYXRldmVyIGhhY2tzIHdlIG1heQogIC8vIGhhdmUgdGVtcG9yYXJpbHkgYWRkZWQsIGV0Yy4gRXZlbiBpZiB3ZSBkb24ndCBoYXBwZW4gdG8gYmUgdXNpbmcgaXQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBsZXQncyBub3QgZ2V0IHJpZAogIC8vIG9mIHRoaXMgYGRlbGV0ZWAsIGxlc3Qgd2UgbWlzcyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIG5leHQgdGltZSB0aGUgcHJvcGVydHkgaXMgaW4gdXNlLikKICBkZWxldGUgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhOwoKICBjb25zdCBldmVudEl0ZW0gPSBbeyB0eXBlOiBldmVudFR5cGUgfSwgZXZlbnRdOwogIHJldHVybiBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZUhlYWRlcnMsIFtldmVudEl0ZW1dKTsKfQoKY29uc3QgU0VOVFJZX0FQSV9WRVJTSU9OID0gJzcnOwoKLyoqIFJldHVybnMgdGhlIHByZWZpeCB0byBjb25zdHJ1Y3QgU2VudHJ5IGluZ2VzdGlvbiBBUEkgZW5kcG9pbnRzLiAqLwpmdW5jdGlvbiBnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKSB7CiAgY29uc3QgcHJvdG9jb2wgPSBkc24ucHJvdG9jb2wgPyBgJHtkc24ucHJvdG9jb2x9OmAgOiAnJzsKICBjb25zdCBwb3J0ID0gZHNuLnBvcnQgPyBgOiR7ZHNuLnBvcnR9YCA6ICcnOwogIHJldHVybiBgJHtwcm90b2NvbH0vLyR7ZHNuLmhvc3R9JHtwb3J0fSR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvYDsKfQoKLyoqIFJldHVybnMgdGhlIGluZ2VzdCBBUEkgZW5kcG9pbnQgZm9yIHRhcmdldC4gKi8KZnVuY3Rpb24gX2dldEluZ2VzdEVuZHBvaW50KGRzbikgewogIHJldHVybiBgJHtnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKX0ke2Rzbi5wcm9qZWN0SWR9L2VudmVsb3BlL2A7Cn0KCi8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqLwpmdW5jdGlvbiBfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKSB7CiAgcmV0dXJuIHVybEVuY29kZSh7CiAgICAvLyBXZSBzZW5kIG9ubHkgdGhlIG1pbmltdW0gc2V0IG9mIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTZWUKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuCiAgICBzZW50cnlfa2V5OiBkc24ucHVibGljS2V5LAogICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTiwKICAgIC4uLihzZGtJbmZvICYmIHsgc2VudHJ5X2NsaWVudDogYCR7c2RrSW5mby5uYW1lfS8ke3Nka0luZm8udmVyc2lvbn1gIH0pLAogIH0pOwp9CgovKioKICogUmV0dXJucyB0aGUgZW52ZWxvcGUgZW5kcG9pbnQgVVJMIHdpdGggYXV0aCBpbiB0aGUgcXVlcnkgc3RyaW5nLgogKgogKiBTZW5kaW5nIGF1dGggYXMgcGFydCBvZiB0aGUgcXVlcnkgc3RyaW5nIGFuZCBub3QgYXMgY3VzdG9tIEhUVFAgaGVhZGVycyBhdm9pZHMgQ09SUyBwcmVmbGlnaHQgcmVxdWVzdHMuCiAqLwpmdW5jdGlvbiBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKAogIGRzbiwKICAvLyBUT0RPICh2OCk6IFJlbW92ZSBgdHVubmVsT3JPcHRpb25zYCBpbiBmYXZvciBvZiBgb3B0aW9uc2AsIGFuZCB1c2UgdGhlIHN1YnN0aXR1dGUgY29kZSBiZWxvdwogIC8vIG9wdGlvbnM6IENsaWVudE9wdGlvbnMgPSB7fSBhcyBDbGllbnRPcHRpb25zLAogIHR1bm5lbE9yT3B0aW9ucyA9IHt9ICwKKSB7CiAgLy8gVE9ETyAodjgpOiBVc2UgdGhpcyBjb2RlIGluc3RlYWQKICAvLyBjb25zdCB7IHR1bm5lbCwgX21ldGFkYXRhID0ge30gfSA9IG9wdGlvbnM7CiAgLy8gcmV0dXJuIHR1bm5lbCA/IHR1bm5lbCA6IGAke19nZXRJbmdlc3RFbmRwb2ludChkc24pfT8ke19lbmNvZGVkQXV0aChkc24sIF9tZXRhZGF0YS5zZGspfWA7CgogIGNvbnN0IHR1bm5lbCA9IHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gdHVubmVsT3JPcHRpb25zIDogdHVubmVsT3JPcHRpb25zLnR1bm5lbDsKICBjb25zdCBzZGtJbmZvID0KICAgIHR5cGVvZiB0dW5uZWxPck9wdGlvbnMgPT09ICdzdHJpbmcnIHx8ICF0dW5uZWxPck9wdGlvbnMuX21ldGFkYXRhID8gdW5kZWZpbmVkIDogdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YS5zZGs7CgogIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKX1gOwp9Cgpjb25zdCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSA9IDMwOwoKLyoqCiAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYSBTZW50cnkgYFRyYW5zcG9ydGAKICoKICogQHBhcmFtIG9wdGlvbnMKICogQHBhcmFtIG1ha2VSZXF1ZXN0CiAqLwpmdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoCiAgb3B0aW9ucywKICBtYWtlUmVxdWVzdCwKICBidWZmZXIgPSBtYWtlUHJvbWlzZUJ1ZmZlcigKICAgIG9wdGlvbnMuYnVmZmVyU2l6ZSB8fCBERUZBVUxUX1RSQU5TUE9SVF9CVUZGRVJfU0laRSwKICApLAopIHsKICBsZXQgcmF0ZUxpbWl0cyA9IHt9OwogIGNvbnN0IGZsdXNoID0gKHRpbWVvdXQpID0+IGJ1ZmZlci5kcmFpbih0aW1lb3V0KTsKCiAgZnVuY3Rpb24gc2VuZChlbnZlbG9wZSkgewogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zID0gW107CgogICAgLy8gRHJvcCByYXRlIGxpbWl0ZWQgaXRlbXMgZnJvbSBlbnZlbG9wZQogICAgZm9yRWFjaEVudmVsb3BlSXRlbShlbnZlbG9wZSwgKGl0ZW0sIHR5cGUpID0+IHsKICAgICAgY29uc3QgZGF0YUNhdGVnb3J5ID0gZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpOwogICAgICBpZiAoaXNSYXRlTGltaXRlZChyYXRlTGltaXRzLCBkYXRhQ2F0ZWdvcnkpKSB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudCgncmF0ZWxpbWl0X2JhY2tvZmYnLCBkYXRhQ2F0ZWdvcnksIGV2ZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmaWx0ZXJlZEVudmVsb3BlSXRlbXMucHVzaChpdGVtKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gU2tpcCBzZW5kaW5nIGlmIGVudmVsb3BlIGlzIGVtcHR5IGFmdGVyIGZpbHRlcmluZyBvdXQgcmF0ZSBsaW1pdGVkIGV2ZW50cwogICAgaWYgKGZpbHRlcmVkRW52ZWxvcGVJdGVtcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgIH0KCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueQogICAgY29uc3QgZmlsdGVyZWRFbnZlbG9wZSA9IGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlWzBdLCBmaWx0ZXJlZEVudmVsb3BlSXRlbXMgKTsKCiAgICAvLyBDcmVhdGVzIGNsaWVudCByZXBvcnQgZm9yIGVhY2ggaXRlbSBpbiBhbiBlbnZlbG9wZQogICAgY29uc3QgcmVjb3JkRW52ZWxvcGVMb3NzID0gKHJlYXNvbikgPT4gewogICAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGZpbHRlcmVkRW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgICAgY29uc3QgZXZlbnQgPSBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKTsKICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudChyZWFzb24sIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSwgZXZlbnQpOwogICAgICB9KTsKICAgIH07CgogICAgY29uc3QgcmVxdWVzdFRhc2sgPSAoKSA9PgogICAgICBtYWtlUmVxdWVzdCh7IGJvZHk6IHNlcmlhbGl6ZUVudmVsb3BlKGZpbHRlcmVkRW52ZWxvcGUsIG9wdGlvbnMudGV4dEVuY29kZXIpIH0pLnRoZW4oCiAgICAgICAgcmVzcG9uc2UgPT4gewogICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBvbiBOT0sgcmVzcG9uc2VzLCBidXQgd2Ugd2FudCB0byBhdCBsZWFzdCBsb2cgdGhlbQogICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkpIHsKICAgICAgICAgICAgREVCVUdfQlVJTEQgJiYgbG9nZ2VyLndhcm4oYFNlbnRyeSByZXNwb25kZWQgd2l0aCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9IHRvIHNlbnQgZXZlbnQuYCk7CiAgICAgICAgICB9CgogICAgICAgICAgcmF0ZUxpbWl0cyA9IHVwZGF0ZVJhdGVMaW1pdHMocmF0ZUxpbWl0cywgcmVzcG9uc2UpOwogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgICAgIH0sCiAgICAgICAgZXJyb3IgPT4gewogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCduZXR3b3JrX2Vycm9yJyk7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9LAogICAgICApOwoKICAgIHJldHVybiBidWZmZXIuYWRkKHJlcXVlc3RUYXNrKS50aGVuKAogICAgICByZXN1bHQgPT4gcmVzdWx0LAogICAgICBlcnJvciA9PiB7CiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VudHJ5RXJyb3IpIHsKICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci5lcnJvcignU2tpcHBlZCBzZW5kaW5nIGV2ZW50IGJlY2F1c2UgYnVmZmVyIGlzIGZ1bGwuJyk7CiAgICAgICAgICByZWNvcmRFbnZlbG9wZUxvc3MoJ3F1ZXVlX292ZXJmbG93Jyk7CiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0sCiAgICApOwogIH0KCiAgLy8gV2UgdXNlIHRoaXMgdG8gaWRlbnRpZmlmeSBpZiB0aGUgdHJhbnNwb3J0IGlzIHRoZSBiYXNlIHRyYW5zcG9ydAogIC8vIFRPRE8gKHY4KTogUmVtb3ZlIHRoaXMgYWdhaW4gYXMgd2UnbGwgbm8gbG9uZ2VyIG5lZWQgaXQKICBzZW5kLl9fc2VudHJ5X19iYXNlVHJhbnNwb3J0X18gPSB0cnVlOwoKICByZXR1cm4gewogICAgc2VuZCwKICAgIGZsdXNoLAogIH07Cn0KCmZ1bmN0aW9uIGdldEV2ZW50Rm9yRW52ZWxvcGVJdGVtKGl0ZW0sIHR5cGUpIHsKICBpZiAodHlwZSAhPT0gJ2V2ZW50JyAmJiB0eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyAoaXRlbSApWzFdIDogdW5kZWZpbmVkOwp9CgovKiogbm9ybWFsaXplcyBXaW5kb3dzIHBhdGhzICovCmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgpIHsKICByZXR1cm4gcGF0aAogICAgLnJlcGxhY2UoL15bQS1aXTovLCAnJykgLy8gcmVtb3ZlIFdpbmRvd3Mtc3R5bGUgcHJlZml4CiAgICAucmVwbGFjZSgvXFwvZywgJy8nKTsgLy8gcmVwbGFjZSBhbGwgYFxgIGluc3RhbmNlcyB3aXRoIGAvYAp9CgovKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0aGUgbW9kdWxlIG5hbWUgZnJvbSBhIGZpbGVuYW1lICovCmZ1bmN0aW9uIGNyZWF0ZUdldE1vZHVsZUZyb21GaWxlbmFtZSgKICBiYXNlUGF0aCA9IHByb2Nlc3MuYXJndlsxXSA/IGRpcm5hbWUocHJvY2Vzcy5hcmd2WzFdKSA6IHByb2Nlc3MuY3dkKCksCiAgaXNXaW5kb3dzID0gc2VwID09PSAnXFwnLAopIHsKICBjb25zdCBub3JtYWxpemVkQmFzZSA9IGlzV2luZG93cyA/IG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGJhc2VQYXRoKSA6IGJhc2VQYXRoOwoKICByZXR1cm4gKGZpbGVuYW1lKSA9PiB7CiAgICBpZiAoIWZpbGVuYW1lKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChmaWxlbmFtZSkgOiBmaWxlbmFtZTsKCiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0CiAgICBsZXQgeyBkaXIsIGJhc2U6IGZpbGUsIGV4dCB9ID0gcG9zaXgucGFyc2Uobm9ybWFsaXplZEZpbGVuYW1lKTsKCiAgICBpZiAoZXh0ID09PSAnLmpzJyB8fCBleHQgPT09ICcubWpzJyB8fCBleHQgPT09ICcuY2pzJykgewogICAgICBmaWxlID0gZmlsZS5zbGljZSgwLCBleHQubGVuZ3RoICogLTEpOwogICAgfQoKICAgIGlmICghZGlyKSB7CiAgICAgIC8vIE5vIGRpcm5hbWUgd2hhdHNvZXZlcgogICAgICBkaXIgPSAnLic7CiAgICB9CgogICAgY29uc3QgbiA9IGRpci5sYXN0SW5kZXhPZignL25vZGVfbW9kdWxlcycpOwogICAgaWYgKG4gPiAtMSkgewogICAgICByZXR1cm4gYCR7ZGlyLnNsaWNlKG4gKyAxNCkucmVwbGFjZSgvXC8vZywgJy4nKX06JHtmaWxlfWA7CiAgICB9CgogICAgLy8gTGV0J3Mgc2VlIGlmIGl0J3MgYSBwYXJ0IG9mIHRoZSBtYWluIG1vZHVsZQogICAgLy8gVG8gYmUgYSBwYXJ0IG9mIG1haW4gbW9kdWxlLCBpdCBoYXMgdG8gc2hhcmUgdGhlIHNhbWUgYmFzZQogICAgaWYgKGRpci5zdGFydHNXaXRoKG5vcm1hbGl6ZWRCYXNlKSkgewogICAgICBsZXQgbW9kdWxlTmFtZSA9IGRpci5zbGljZShub3JtYWxpemVkQmFzZS5sZW5ndGggKyAxKS5yZXBsYWNlKC9cLy9nLCAnLicpOwoKICAgICAgaWYgKG1vZHVsZU5hbWUpIHsKICAgICAgICBtb2R1bGVOYW1lICs9ICc6JzsKICAgICAgfQogICAgICBtb2R1bGVOYW1lICs9IGZpbGU7CgogICAgICByZXR1cm4gbW9kdWxlTmFtZTsKICAgIH0KCiAgICByZXR1cm4gZmlsZTsKICB9Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDIobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfS8qKgogKiBUaGlzIGNvZGUgd2FzIG9yaWdpbmFsbHkgZm9ya2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL1Rvb1RhbGxOYXRlL3Byb3h5LWFnZW50cy90cmVlL2IxMzMyOTVmZDE2ZjY0NzU1NzhiNmIxNWJkOWI0ZTMzZWNiMGQwYjcKICogV2l0aCB0aGUgZm9sbG93aW5nIGxpY2VuY2U6CiAqCiAqIChUaGUgTUlUIExpY2Vuc2UpCiAqCiAqIENvcHlyaWdodCAoYykgMjAxMyBOYXRoYW4gUmFqbGljaCA8bmF0aGFuQHRvb3RhbGxuYXRlLm5ldD4qCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKICogJ1NvZnR3YXJlJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwogKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwogKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOioKICoKICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuKgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqLwoKY29uc3QgSU5URVJOQUwgPSBTeW1ib2woJ0FnZW50QmFzZUludGVybmFsU3RhdGUnKTsKCmNsYXNzIEFnZW50IGV4dGVuZHMgaHR0cC5BZ2VudCB7CgogIC8vIFNldCBieSBgaHR0cC5BZ2VudGAgLSBtaXNzaW5nIGZyb20gYEB0eXBlcy9ub2RlYAoKICBjb25zdHJ1Y3RvcihvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXNbSU5URVJOQUxdID0ge307CiAgfQoKICAvKioKICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGFuIGBodHRwYCBvciBgaHR0cHNgIHJlcXVlc3QuCiAgICovCiAgaXNTZWN1cmVFbmRwb2ludChvcHRpb25zKSB7CiAgICBpZiAob3B0aW9ucykgewogICAgICAvLyBGaXJzdCBjaGVjayB0aGUgYHNlY3VyZUVuZHBvaW50YCBwcm9wZXJ0eSBleHBsaWNpdGx5LCBzaW5jZSB0aGlzCiAgICAgIC8vIG1lYW5zIHRoYXQgYSBwYXJlbnQgYEFnZW50YCBpcyAicGFzc2luZyB0aHJvdWdoIiB0byB0aGlzIGluc3RhbmNlLgogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnMgKS5zZWN1cmVFbmRwb2ludCA9PT0gJ2Jvb2xlYW4nKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VjdXJlRW5kcG9pbnQ7CiAgICAgIH0KCiAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGBzZWN1cmVgIGVuZHBvaW50LCBjaGVjayBpZiBgcHJvdG9jb2xgIHByb3BlcnR5IGlzCiAgICAgIC8vIHNldC4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlIGNhc2Ugc2luY2UgdXNpbmcgYSBmdWxsIHN0cmluZyBVUkwKICAgICAgLy8gb3IgYFVSTGAgaW5zdGFuY2Ugc2hvdWxkIGJlIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4KICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnByb3RvY29sID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnByb3RvY29sID09PSAnaHR0cHM6JzsKICAgICAgfQogICAgfQoKICAgIC8vIEZpbmFsbHksIGlmIG5vIGBwcm90b2NvbGAgcHJvcGVydHkgd2FzIHNldCwgdGhlbiBmYWxsIGJhY2sgdG8KICAgIC8vIGNoZWNraW5nIHRoZSBzdGFjayB0cmFjZSBvZiB0aGUgY3VycmVudCBjYWxsIHN0YWNrLCBhbmQgdHJ5IHRvCiAgICAvLyBkZXRlY3QgdGhlICJodHRwcyIgbW9kdWxlLgogICAgY29uc3QgeyBzdGFjayB9ID0gbmV3IEVycm9yKCk7CiAgICBpZiAodHlwZW9mIHN0YWNrICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN0YWNrLnNwbGl0KCdcbicpLnNvbWUobCA9PiBsLmluZGV4T2YoJyhodHRwcy5qczonKSAhPT0gLTEgfHwgbC5pbmRleE9mKCdub2RlOmh0dHBzOicpICE9PSAtMSk7CiAgfQoKICBjcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYikgewogICAgY29uc3QgY29ubmVjdE9wdHMgPSB7CiAgICAgIC4uLm9wdGlvbnMsCiAgICAgIHNlY3VyZUVuZHBvaW50OiB0aGlzLmlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucyksCiAgICB9OwogICAgUHJvbWlzZS5yZXNvbHZlKCkKICAgICAgLnRoZW4oKCkgPT4gdGhpcy5jb25uZWN0KHJlcSwgY29ubmVjdE9wdHMpKQogICAgICAudGhlbihzb2NrZXQgPT4gewogICAgICAgIGlmIChzb2NrZXQgaW5zdGFuY2VvZiBodHRwLkFnZW50KSB7CiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBhZGRSZXF1ZXN0KClgIGlzbid0IGRlZmluZWQgaW4gYEB0eXBlcy9ub2RlYAogICAgICAgICAgcmV0dXJuIHNvY2tldC5hZGRSZXF1ZXN0KHJlcSwgY29ubmVjdE9wdHMpOwogICAgICAgIH0KICAgICAgICB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0ID0gc29ja2V0OwogICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgYGNyZWF0ZVNvY2tldCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICBzdXBlci5jcmVhdGVTb2NrZXQocmVxLCBvcHRpb25zLCBjYik7CiAgICAgIH0sIGNiKTsKICB9CgogIGNyZWF0ZUNvbm5lY3Rpb24oKSB7CiAgICBjb25zdCBzb2NrZXQgPSB0aGlzW0lOVEVSTkFMXS5jdXJyZW50U29ja2V0OwogICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHVuZGVmaW5lZDsKICAgIGlmICghc29ja2V0KSB7CiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc29ja2V0IHdhcyByZXR1cm5lZCBpbiB0aGUgYGNvbm5lY3QoKWAgZnVuY3Rpb24nKTsKICAgIH0KICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBnZXQgZGVmYXVsdFBvcnQoKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLmRlZmF1bHRQb3J0LCAoKSA9PiAoICh0aGlzLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKSkpOwogIH0KCiAgc2V0IGRlZmF1bHRQb3J0KHYpIHsKICAgIGlmICh0aGlzW0lOVEVSTkFMXSkgewogICAgICB0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCA9IHY7CiAgICB9CiAgfQoKICBnZXQgcHJvdG9jb2woKSB7CiAgICByZXR1cm4gX251bGxpc2hDb2FsZXNjZSQyKHRoaXNbSU5URVJOQUxdLnByb3RvY29sLCAoKSA9PiAoICh0aGlzLmlzU2VjdXJlRW5kcG9pbnQoKSA/ICdodHRwczonIDogJ2h0dHA6JykpKTsKICB9CgogIHNldCBwcm90b2NvbCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0ucHJvdG9jb2wgPSB2OwogICAgfQogIH0KfQoKZnVuY3Rpb24gZGVidWckMSguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50OnBhcnNlLXByb3h5LXJlc3BvbnNlXScsIC4uLmFyZ3MpOwp9CgpmdW5jdGlvbiBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIC8vIHdlIG5lZWQgdG8gYnVmZmVyIGFueSBIVFRQIHRyYWZmaWMgdGhhdCBoYXBwZW5zIHdpdGggdGhlIHByb3h5IGJlZm9yZSB3ZSBnZXQKICAgIC8vIHRoZSBDT05ORUNUIHJlc3BvbnNlLCBzbyB0aGF0IGlmIHRoZSByZXNwb25zZSBpcyBhbnl0aGluZyBvdGhlciB0aGFuIGFuICIyMDAiCiAgICAvLyByZXNwb25zZSBjb2RlLCB0aGVuIHdlIGNhbiByZS1wbGF5IHRoZSAiZGF0YSIgZXZlbnRzIG9uIHRoZSBzb2NrZXQgb25jZSB0aGUKICAgIC8vIEhUVFAgcGFyc2VyIGlzIGhvb2tlZCB1cC4uLgogICAgbGV0IGJ1ZmZlcnNMZW5ndGggPSAwOwogICAgY29uc3QgYnVmZmVycyA9IFtdOwoKICAgIGZ1bmN0aW9uIHJlYWQoKSB7CiAgICAgIGNvbnN0IGIgPSBzb2NrZXQucmVhZCgpOwogICAgICBpZiAoYikgb25kYXRhKGIpOwogICAgICBlbHNlIHNvY2tldC5vbmNlKCdyZWFkYWJsZScsIHJlYWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25lbmQpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25lcnJvcik7CiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVuZCgpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVuZCcpOwogICAgICByZWplY3QobmV3IEVycm9yKCdQcm94eSBjb25uZWN0aW9uIGVuZGVkIGJlZm9yZSByZWNlaXZpbmcgQ09OTkVDVCByZXNwb25zZScpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVycm9yKGVycikgewogICAgICBjbGVhbnVwKCk7CiAgICAgIGRlYnVnJDEoJ29uZXJyb3IgJW8nLCBlcnIpOwogICAgICByZWplY3QoZXJyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmRhdGEoYikgewogICAgICBidWZmZXJzLnB1c2goYik7CiAgICAgIGJ1ZmZlcnNMZW5ndGggKz0gYi5sZW5ndGg7CgogICAgICBjb25zdCBidWZmZXJlZCA9IEJ1ZmZlci5jb25jYXQoYnVmZmVycywgYnVmZmVyc0xlbmd0aCk7CiAgICAgIGNvbnN0IGVuZE9mSGVhZGVycyA9IGJ1ZmZlcmVkLmluZGV4T2YoJ1xyXG5cclxuJyk7CgogICAgICBpZiAoZW5kT2ZIZWFkZXJzID09PSAtMSkgewogICAgICAgIC8vIGtlZXAgYnVmZmVyaW5nCiAgICAgICAgZGVidWckMSgnaGF2ZSBub3QgcmVjZWl2ZWQgZW5kIG9mIEhUVFAgaGVhZGVycyB5ZXQuLi4nKTsKICAgICAgICByZWFkKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBoZWFkZXJQYXJ0cyA9IGJ1ZmZlcmVkLnNsaWNlKDAsIGVuZE9mSGVhZGVycykudG9TdHJpbmcoJ2FzY2lpJykuc3BsaXQoJ1xyXG4nKTsKICAgICAgY29uc3QgZmlyc3RMaW5lID0gaGVhZGVyUGFydHMuc2hpZnQoKTsKICAgICAgaWYgKCFmaXJzdExpbmUpIHsKICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKCdObyBoZWFkZXIgcmVjZWl2ZWQgZnJvbSBwcm94eSBDT05ORUNUIHJlc3BvbnNlJykpOwogICAgICB9CiAgICAgIGNvbnN0IGZpcnN0TGluZVBhcnRzID0gZmlyc3RMaW5lLnNwbGl0KCcgJyk7CiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSArZmlyc3RMaW5lUGFydHNbMV07CiAgICAgIGNvbnN0IHN0YXR1c1RleHQgPSBmaXJzdExpbmVQYXJ0cy5zbGljZSgyKS5qb2luKCcgJyk7CiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTsKICAgICAgZm9yIChjb25zdCBoZWFkZXIgb2YgaGVhZGVyUGFydHMpIHsKICAgICAgICBpZiAoIWhlYWRlcikgY29udGludWU7CiAgICAgICAgY29uc3QgZmlyc3RDb2xvbiA9IGhlYWRlci5pbmRleE9mKCc6Jyk7CiAgICAgICAgaWYgKGZpcnN0Q29sb24gPT09IC0xKSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEludmFsaWQgaGVhZGVyIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZTogIiR7aGVhZGVyfSJgKSk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGtleSA9IGhlYWRlci5zbGljZSgwLCBmaXJzdENvbG9uKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGNvbnN0IHZhbHVlID0gaGVhZGVyLnNsaWNlKGZpcnN0Q29sb24gKyAxKS50cmltU3RhcnQoKTsKICAgICAgICBjb25zdCBjdXJyZW50ID0gaGVhZGVyc1trZXldOwogICAgICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFtjdXJyZW50LCB2YWx1ZV07CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7CiAgICAgICAgICBjdXJyZW50LnB1c2godmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGVidWckMSgnZ290IHByb3h5IHNlcnZlciByZXNwb25zZTogJW8gJW8nLCBmaXJzdExpbmUsIGhlYWRlcnMpOwogICAgICBjbGVhbnVwKCk7CiAgICAgIHJlc29sdmUoewogICAgICAgIGNvbm5lY3Q6IHsKICAgICAgICAgIHN0YXR1c0NvZGUsCiAgICAgICAgICBzdGF0dXNUZXh0LAogICAgICAgICAgaGVhZGVycywKICAgICAgICB9LAogICAgICAgIGJ1ZmZlcmVkLAogICAgICB9KTsKICAgIH0KCiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25lcnJvcik7CiAgICBzb2NrZXQub24oJ2VuZCcsIG9uZW5kKTsKCiAgICByZWFkKCk7CiAgfSk7Cn0KCmZ1bmN0aW9uIF9udWxsaXNoQ29hbGVzY2UkMShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9IGZ1bmN0aW9uIF9vcHRpb25hbENoYWluJDEob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KCmZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHsKICBsb2dnZXIubG9nKCdbaHR0cHMtcHJveHktYWdlbnRdJywgLi4uYXJncyk7Cn0KCi8qKgogKiBUaGUgYEh0dHBzUHJveHlBZ2VudGAgaW1wbGVtZW50cyBhbiBIVFRQIEFnZW50IHN1YmNsYXNzIHRoYXQgY29ubmVjdHMgdG8KICogdGhlIHNwZWNpZmllZCAiSFRUUChzKSBwcm94eSBzZXJ2ZXIiIGluIG9yZGVyIHRvIHByb3h5IEhUVFBTIHJlcXVlc3RzLgogKgogKiBPdXRnb2luZyBIVFRQIHJlcXVlc3RzIGFyZSBmaXJzdCB0dW5uZWxlZCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXIgdXNpbmcgdGhlCiAqIGBDT05ORUNUYCBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciwKICogYW5kIHRoZW4gdGhlIHByb3h5IHNlcnZlciBjb25uZWN0cyB0byB0aGUgZGVzdGluYXRpb24gdGFyZ2V0IGFuZCBpc3N1ZXMgdGhlCiAqIEhUVFAgcmVxdWVzdCBmcm9tIHRoZSBwcm94eSBzZXJ2ZXIuCiAqCiAqIGBodHRwczpgIHJlcXVlc3RzIGhhdmUgdGhlaXIgc29ja2V0IGNvbm5lY3Rpb24gdXBncmFkZWQgdG8gVExTIG9uY2UKICogdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlciBoYXMgYmVlbiBlc3RhYmxpc2hlZC4KICovCmNsYXNzIEh0dHBzUHJveHlBZ2VudCBleHRlbmRzIEFnZW50IHsKICBzdGF0aWMgX19pbml0U3RhdGljKCkge3RoaXMucHJvdG9jb2xzID0gWydodHRwJywgJ2h0dHBzJ107IH0KCiAgY29uc3RydWN0b3IocHJveHksIG9wdHMpIHsKICAgIHN1cGVyKG9wdHMpOwogICAgdGhpcy5vcHRpb25zID0ge307CiAgICB0aGlzLnByb3h5ID0gdHlwZW9mIHByb3h5ID09PSAnc3RyaW5nJyA/IG5ldyBVUkwocHJveHkpIDogcHJveHk7CiAgICB0aGlzLnByb3h5SGVhZGVycyA9IF9udWxsaXNoQ29hbGVzY2UkMShfb3B0aW9uYWxDaGFpbiQxKFtvcHRzLCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5oZWFkZXJzXSksICgpID0+ICgge30pKTsKICAgIGRlYnVnKCdDcmVhdGluZyBuZXcgSHR0cHNQcm94eUFnZW50IGluc3RhbmNlOiAlbycsIHRoaXMucHJveHkuaHJlZik7CgogICAgLy8gVHJpbSBvZmYgdGhlIGJyYWNrZXRzIGZyb20gSVB2NiBhZGRyZXNzZXMKICAgIGNvbnN0IGhvc3QgPSAodGhpcy5wcm94eS5ob3N0bmFtZSB8fCB0aGlzLnByb3h5Lmhvc3QpLnJlcGxhY2UoL15cW3xcXSQvZywgJycpOwogICAgY29uc3QgcG9ydCA9IHRoaXMucHJveHkucG9ydCA/IHBhcnNlSW50KHRoaXMucHJveHkucG9ydCwgMTApIDogdGhpcy5wcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MDsKICAgIHRoaXMuY29ubmVjdE9wdHMgPSB7CiAgICAgIC8vIEF0dGVtcHQgdG8gbmVnb3RpYXRlIGh0dHAvMS4xIGZvciBwcm94eSBzZXJ2ZXJzIHRoYXQgc3VwcG9ydCBodHRwLzIKICAgICAgQUxQTlByb3RvY29sczogWydodHRwLzEuMSddLAogICAgICAuLi4ob3B0cyA/IG9taXQob3B0cywgJ2hlYWRlcnMnKSA6IG51bGwpLAogICAgICBob3N0LAogICAgICBwb3J0LAogICAgfTsKICB9CgogIC8qKgogICAqIENhbGxlZCB3aGVuIHRoZSBub2RlLWNvcmUgSFRUUCBjbGllbnQgbGlicmFyeSBpcyBjcmVhdGluZyBhCiAgICogbmV3IEhUVFAgcmVxdWVzdC4KICAgKi8KICBhc3luYyBjb25uZWN0KHJlcSwgb3B0cykgewogICAgY29uc3QgeyBwcm94eSB9ID0gdGhpczsKCiAgICBpZiAoIW9wdHMuaG9zdCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyAiaG9zdCIgcHJvdmlkZWQnKTsKICAgIH0KCiAgICAvLyBDcmVhdGUgYSBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgcHJveHkgc2VydmVyLgogICAgbGV0IHNvY2tldDsKICAgIGlmIChwcm94eS5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHsKICAgICAgZGVidWcoJ0NyZWF0aW5nIGB0bHMuU29ja2V0YDogJW8nLCB0aGlzLmNvbm5lY3RPcHRzKTsKICAgICAgY29uc3Qgc2VydmVybmFtZSA9IHRoaXMuY29ubmVjdE9wdHMuc2VydmVybmFtZSB8fCB0aGlzLmNvbm5lY3RPcHRzLmhvc3Q7CiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHsKICAgICAgICAuLi50aGlzLmNvbm5lY3RPcHRzLAogICAgICAgIHNlcnZlcm5hbWU6IHNlcnZlcm5hbWUgJiYgbmV0LmlzSVAoc2VydmVybmFtZSkgPyB1bmRlZmluZWQgOiBzZXJ2ZXJuYW1lLAogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgbmV0LlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHRoaXMuY29ubmVjdE9wdHMpOwogICAgfQoKICAgIGNvbnN0IGhlYWRlcnMgPQogICAgICB0eXBlb2YgdGhpcy5wcm94eUhlYWRlcnMgPT09ICdmdW5jdGlvbicgPyB0aGlzLnByb3h5SGVhZGVycygpIDogeyAuLi50aGlzLnByb3h5SGVhZGVycyB9OwogICAgY29uc3QgaG9zdCA9IG5ldC5pc0lQdjYob3B0cy5ob3N0KSA/IGBbJHtvcHRzLmhvc3R9XWAgOiBvcHRzLmhvc3Q7CiAgICBsZXQgcGF5bG9hZCA9IGBDT05ORUNUICR7aG9zdH06JHtvcHRzLnBvcnR9IEhUVFAvMS4xXHJcbmA7CgogICAgLy8gSW5qZWN0IHRoZSBgUHJveHktQXV0aG9yaXphdGlvbmAgaGVhZGVyIGlmIG5lY2Vzc2FyeS4KICAgIGlmIChwcm94eS51c2VybmFtZSB8fCBwcm94eS5wYXNzd29yZCkgewogICAgICBjb25zdCBhdXRoID0gYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocHJveHkucGFzc3dvcmQpfWA7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGF1dGgpLnRvU3RyaW5nKCdiYXNlNjQnKX1gOwogICAgfQoKICAgIGhlYWRlcnMuSG9zdCA9IGAke2hvc3R9OiR7b3B0cy5wb3J0fWA7CgogICAgaWYgKCFoZWFkZXJzWydQcm94eS1Db25uZWN0aW9uJ10pIHsKICAgICAgaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddID0gdGhpcy5rZWVwQWxpdmUgPyAnS2VlcC1BbGl2ZScgOiAnY2xvc2UnOwogICAgfQogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7CiAgICAgIHBheWxvYWQgKz0gYCR7bmFtZX06ICR7aGVhZGVyc1tuYW1lXX1cclxuYDsKICAgIH0KCiAgICBjb25zdCBwcm94eVJlc3BvbnNlUHJvbWlzZSA9IHBhcnNlUHJveHlSZXNwb25zZShzb2NrZXQpOwoKICAgIHNvY2tldC53cml0ZShgJHtwYXlsb2FkfVxyXG5gKTsKCiAgICBjb25zdCB7IGNvbm5lY3QsIGJ1ZmZlcmVkIH0gPSBhd2FpdCBwcm94eVJlc3BvbnNlUHJvbWlzZTsKICAgIHJlcS5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0KTsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQKICAgIC8vIEB0cy1pZ25vcmUgTm90IEV2ZW50RW1pdHRlciBpbiBOb2RlIHR5cGVzCiAgICB0aGlzLmVtaXQoJ3Byb3h5Q29ubmVjdCcsIGNvbm5lY3QsIHJlcSk7CgogICAgaWYgKGNvbm5lY3Quc3RhdHVzQ29kZSA9PT0gMjAwKSB7CiAgICAgIHJlcS5vbmNlKCdzb2NrZXQnLCByZXN1bWUpOwoKICAgICAgaWYgKG9wdHMuc2VjdXJlRW5kcG9pbnQpIHsKICAgICAgICAvLyBUaGUgcHJveHkgaXMgY29ubmVjdGluZyB0byBhIFRMUyBzZXJ2ZXIsIHNvIHVwZ3JhZGUKICAgICAgICAvLyB0aGlzIHNvY2tldCBjb25uZWN0aW9uIHRvIGEgVExTIGNvbm5lY3Rpb24uCiAgICAgICAgZGVidWcoJ1VwZ3JhZGluZyBzb2NrZXQgY29ubmVjdGlvbiB0byBUTFMnKTsKICAgICAgICBjb25zdCBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lIHx8IG9wdHMuaG9zdDsKICAgICAgICByZXR1cm4gdGxzLmNvbm5lY3QoewogICAgICAgICAgLi4ub21pdChvcHRzLCAnaG9zdCcsICdwYXRoJywgJ3BvcnQnKSwKICAgICAgICAgIHNvY2tldCwKICAgICAgICAgIHNlcnZlcm5hbWU6IG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIHNvY2tldDsKICAgIH0KCiAgICAvLyBTb21lIG90aGVyIHN0YXR1cyBjb2RlIHRoYXQncyBub3QgMjAwLi4uIG5lZWQgdG8gcmUtcGxheSB0aGUgSFRUUAogICAgLy8gaGVhZGVyICJkYXRhIiBldmVudHMgb250byB0aGUgc29ja2V0IG9uY2UgdGhlIEhUVFAgbWFjaGluZXJ5IGlzCiAgICAvLyBhdHRhY2hlZCBzbyB0aGF0IHRoZSBub2RlIGNvcmUgYGh0dHBgIGNhbiBwYXJzZSBhbmQgaGFuZGxlIHRoZQogICAgLy8gZXJyb3Igc3RhdHVzIGNvZGUuCgogICAgLy8gQ2xvc2UgdGhlIG9yaWdpbmFsIHNvY2tldCwgYW5kIGEgbmV3ICJmYWtlIiBzb2NrZXQgaXMgcmV0dXJuZWQKICAgIC8vIGluc3RlYWQsIHNvIHRoYXQgdGhlIHByb3h5IGRvZXNuJ3QgZ2V0IHRoZSBIVFRQIHJlcXVlc3QKICAgIC8vIHdyaXR0ZW4gdG8gaXQgKHdoaWNoIG1heSBjb250YWluIGBBdXRob3JpemF0aW9uYCBoZWFkZXJzIG9yIG90aGVyCiAgICAvLyBzZW5zaXRpdmUgZGF0YSkuCiAgICAvLwogICAgLy8gU2VlOiBodHRwczovL2hhY2tlcm9uZS5jb20vcmVwb3J0cy81NDE1MDIKICAgIHNvY2tldC5kZXN0cm95KCk7CgogICAgY29uc3QgZmFrZVNvY2tldCA9IG5ldyBuZXQuU29ja2V0KHsgd3JpdGFibGU6IGZhbHNlIH0pOwogICAgZmFrZVNvY2tldC5yZWFkYWJsZSA9IHRydWU7CgogICAgLy8gTmVlZCB0byB3YWl0IGZvciB0aGUgInNvY2tldCIgZXZlbnQgdG8gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cy4KICAgIHJlcS5vbmNlKCdzb2NrZXQnLCAocykgPT4gewogICAgICBkZWJ1ZygnUmVwbGF5aW5nIHByb3h5IGJ1ZmZlciBmb3IgZmFpbGVkIHJlcXVlc3QnKTsKICAgICAgLy8gUmVwbGF5IHRoZSAiYnVmZmVyZWQiIEJ1ZmZlciBvbnRvIHRoZSBmYWtlIGBzb2NrZXRgLCBzaW5jZSBhdAogICAgICAvLyB0aGlzIHBvaW50IHRoZSBIVFRQIG1vZHVsZSBtYWNoaW5lcnkgaGFzIGJlZW4gaG9va2VkIHVwIGZvcgogICAgICAvLyB0aGUgdXNlci4KICAgICAgcy5wdXNoKGJ1ZmZlcmVkKTsKICAgICAgcy5wdXNoKG51bGwpOwogICAgfSk7CgogICAgcmV0dXJuIGZha2VTb2NrZXQ7CiAgfQp9IEh0dHBzUHJveHlBZ2VudC5fX2luaXRTdGF0aWMoKTsKCmZ1bmN0aW9uIHJlc3VtZShzb2NrZXQpIHsKICBzb2NrZXQucmVzdW1lKCk7Cn0KCmZ1bmN0aW9uIG9taXQoCiAgb2JqLAogIC4uLmtleXMKKQoKIHsKICBjb25zdCByZXQgPSB7fQoKOwogIGxldCBrZXk7CiAgZm9yIChrZXkgaW4gb2JqKSB7CiAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkgewogICAgICByZXRba2V5XSA9IG9ialtrZXldOwogICAgfQogIH0KICByZXR1cm4gcmV0Owp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0KLy8gRXN0aW1hdGVkIG1heGltdW0gc2l6ZSBmb3IgcmVhc29uYWJsZSBzdGFuZGFsb25lIGV2ZW50CmNvbnN0IEdaSVBfVEhSRVNIT0xEID0gMTAyNCAqIDMyOwoKLyoqCiAqIEdldHMgYSBzdHJlYW0gZnJvbSBhIFVpbnQ4QXJyYXkgb3Igc3RyaW5nCiAqIFJlYWRhYmxlLmZyb20gaXMgaWRlYWwgYnV0IHdhcyBhZGRlZCBpbiBub2RlLmpzIHYxMi4zLjAgYW5kIHYxMC4xNy4wCiAqLwpmdW5jdGlvbiBzdHJlYW1Gcm9tQm9keShib2R5KSB7CiAgcmV0dXJuIG5ldyBSZWFkYWJsZSh7CiAgICByZWFkKCkgewogICAgICB0aGlzLnB1c2goYm9keSk7CiAgICAgIHRoaXMucHVzaChudWxsKTsKICAgIH0sCiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgVHJhbnNwb3J0IHRoYXQgdXNlcyBuYXRpdmUgdGhlIG5hdGl2ZSAnaHR0cCcgYW5kICdodHRwcycgbW9kdWxlcyB0byBzZW5kIGV2ZW50cyB0byBTZW50cnkuCiAqLwpmdW5jdGlvbiBtYWtlTm9kZVRyYW5zcG9ydChvcHRpb25zKSB7CiAgbGV0IHVybFNlZ21lbnRzOwoKICB0cnkgewogICAgdXJsU2VnbWVudHMgPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICB9IGNhdGNoIChlKSB7CiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7CiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAnW0BzZW50cnkvbm9kZV06IEludmFsaWQgZHNuIG9yIHR1bm5lbCBvcHRpb24sIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cy4gVGhlIHR1bm5lbCBvcHRpb24gbXVzdCBiZSBhIGZ1bGwgVVJMIHdoZW4gdXNlZC4nLAogICAgICApOwogICAgfSk7CiAgICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkpOwogIH0KCiAgY29uc3QgaXNIdHRwcyA9IHVybFNlZ21lbnRzLnByb3RvY29sID09PSAnaHR0cHM6JzsKCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHAgPT4gYG9wdGlvbnMucHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgLy8gUHJveHkgcHJpb3JpdGl6YXRpb246IGh0dHBzID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwc19wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eWAKICBjb25zdCBwcm94eSA9IGFwcGx5Tm9Qcm94eU9wdGlvbigKICAgIHVybFNlZ21lbnRzLAogICAgb3B0aW9ucy5wcm94eSB8fCAoaXNIdHRwcyA/IHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5IDogdW5kZWZpbmVkKSB8fCBwcm9jZXNzLmVudi5odHRwX3Byb3h5LAogICk7CgogIGNvbnN0IG5hdGl2ZUh0dHBNb2R1bGUgPSBpc0h0dHBzID8gaHR0cHMgOiBodHRwOwogIGNvbnN0IGtlZXBBbGl2ZSA9IG9wdGlvbnMua2VlcEFsaXZlID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG9wdGlvbnMua2VlcEFsaXZlOwoKICAvLyBUT0RPKHY3KTogRXZhbHVhdGUgaWYgd2UgY2FuIHNldCBrZWVwQWxpdmUgdG8gdHJ1ZS4gVGhpcyB3b3VsZCBpbnZvbHZlIHRlc3RpbmcgZm9yIG1lbW9yeSBsZWFrcyBpbiBvbGRlciBub2RlCiAgLy8gdmVyc2lvbnMoPj0gOCkgYXMgdGhleSBoYWQgbWVtb3J5IGxlYWtzIHdoZW4gdXNpbmcgaXQ6ICMyNTU1CiAgY29uc3QgYWdlbnQgPSBwcm94eQogICAgPyAobmV3IEh0dHBzUHJveHlBZ2VudChwcm94eSkgKQogICAgOiBuZXcgbmF0aXZlSHR0cE1vZHVsZS5BZ2VudCh7IGtlZXBBbGl2ZSwgbWF4U29ja2V0czogMzAsIHRpbWVvdXQ6IDIwMDAgfSk7CgogIGNvbnN0IHJlcXVlc3RFeGVjdXRvciA9IGNyZWF0ZVJlcXVlc3RFeGVjdXRvcihvcHRpb25zLCBfbnVsbGlzaENvYWxlc2NlKG9wdGlvbnMuaHR0cE1vZHVsZSwgKCkgPT4gKCBuYXRpdmVIdHRwTW9kdWxlKSksIGFnZW50KTsKICByZXR1cm4gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMsIHJlcXVlc3RFeGVjdXRvcik7Cn0KCi8qKgogKiBIb25vcnMgdGhlIGBub19wcm94eWAgZW52IHZhcmlhYmxlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdG8gYWxsb3cgZm9yIGhvc3RzIGV4Y2x1c2lvbi4KICoKICogQHBhcmFtIHRyYW5zcG9ydFVybCBUaGUgVVJMIHRoZSB0cmFuc3BvcnQgaW50ZW5kcyB0byBzZW5kIGV2ZW50cyB0by4KICogQHBhcmFtIHByb3h5IFRoZSBjbGllbnQgY29uZmlndXJlZCBwcm94eS4KICogQHJldHVybnMgQSBwcm94eSB0aGUgdHJhbnNwb3J0IHNob3VsZCB1c2UuCiAqLwpmdW5jdGlvbiBhcHBseU5vUHJveHlPcHRpb24odHJhbnNwb3J0VXJsU2VnbWVudHMsIHByb3h5KSB7CiAgY29uc3QgeyBub19wcm94eSB9ID0gcHJvY2Vzcy5lbnY7CgogIGNvbnN0IHVybElzRXhlbXB0RnJvbVByb3h5ID0KICAgIG5vX3Byb3h5ICYmCiAgICBub19wcm94eQogICAgICAuc3BsaXQoJywnKQogICAgICAuc29tZSgKICAgICAgICBleGVtcHRpb24gPT4gdHJhbnNwb3J0VXJsU2VnbWVudHMuaG9zdC5lbmRzV2l0aChleGVtcHRpb24pIHx8IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3RuYW1lLmVuZHNXaXRoKGV4ZW1wdGlvbiksCiAgICAgICk7CgogIGlmICh1cmxJc0V4ZW1wdEZyb21Qcm94eSkgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9IGVsc2UgewogICAgcmV0dXJuIHByb3h5OwogIH0KfQoKLyoqCiAqIENyZWF0ZXMgYSBSZXF1ZXN0RXhlY3V0b3IgdG8gYmUgdXNlZCB3aXRoIGBjcmVhdGVUcmFuc3BvcnRgLgogKi8KZnVuY3Rpb24gY3JlYXRlUmVxdWVzdEV4ZWN1dG9yKAogIG9wdGlvbnMsCiAgaHR0cE1vZHVsZSwKICBhZ2VudCwKKSB7CiAgY29uc3QgeyBob3N0bmFtZSwgcGF0aG5hbWUsIHBvcnQsIHByb3RvY29sLCBzZWFyY2ggfSA9IG5ldyBVUkwob3B0aW9ucy51cmwpOwogIHJldHVybiBmdW5jdGlvbiBtYWtlUmVxdWVzdChyZXF1ZXN0KSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBsZXQgYm9keSA9IHN0cmVhbUZyb21Cb2R5KHJlcXVlc3QuYm9keSk7CgogICAgICBjb25zdCBoZWFkZXJzID0geyAuLi5vcHRpb25zLmhlYWRlcnMgfTsKCiAgICAgIGlmIChyZXF1ZXN0LmJvZHkubGVuZ3RoID4gR1pJUF9USFJFU0hPTEQpIHsKICAgICAgICBoZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gPSAnZ3ppcCc7CiAgICAgICAgYm9keSA9IGJvZHkucGlwZShjcmVhdGVHemlwKCkpOwogICAgICB9CgogICAgICBjb25zdCByZXEgPSBodHRwTW9kdWxlLnJlcXVlc3QoCiAgICAgICAgewogICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCiAgICAgICAgICBhZ2VudCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgICBob3N0bmFtZSwKICAgICAgICAgIHBhdGg6IGAke3BhdGhuYW1lfSR7c2VhcmNofWAsCiAgICAgICAgICBwb3J0LAogICAgICAgICAgcHJvdG9jb2wsCiAgICAgICAgICBjYTogb3B0aW9ucy5jYUNlcnRzLAogICAgICAgIH0sCiAgICAgICAgcmVzID0+IHsKICAgICAgICAgIHJlcy5vbignZGF0YScsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHsKICAgICAgICAgICAgLy8gRHJhaW4gc29ja2V0CiAgICAgICAgICB9KTsKCiAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTsKCiAgICAgICAgICAvLyAiS2V5LXZhbHVlIHBhaXJzIG9mIGhlYWRlciBuYW1lcyBhbmQgdmFsdWVzLiBIZWFkZXIgbmFtZXMgYXJlIGxvd2VyLWNhc2VkLiIKICAgICAgICAgIC8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzCiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSwgKCkgPT4gKCBudWxsKSk7CiAgICAgICAgICBjb25zdCByYXRlTGltaXRzSGVhZGVyID0gX251bGxpc2hDb2FsZXNjZShyZXMuaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXSwgKCkgPT4gKCBudWxsKSk7CgogICAgICAgICAgcmVzb2x2ZSh7CiAgICAgICAgICAgIHN0YXR1c0NvZGU6IHJlcy5zdGF0dXNDb2RlLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgJ3JldHJ5LWFmdGVyJzogcmV0cnlBZnRlckhlYWRlciwKICAgICAgICAgICAgICAneC1zZW50cnktcmF0ZS1saW1pdHMnOiBBcnJheS5pc0FycmF5KHJhdGVMaW1pdHNIZWFkZXIpID8gcmF0ZUxpbWl0c0hlYWRlclswXSA6IHJhdGVMaW1pdHNIZWFkZXIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwoKICAgICAgcmVxLm9uKCdlcnJvcicsIHJlamVjdCk7CiAgICAgIGJvZHkucGlwZShyZXEpOwogICAgfSk7CiAgfTsKfQoKZnVuY3Rpb24gX29wdGlvbmFsQ2hhaW4ob3BzKSB7IGxldCBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyBsZXQgdmFsdWUgPSBvcHNbMF07IGxldCBpID0gMTsgd2hpbGUgKGkgPCBvcHMubGVuZ3RoKSB7IGNvbnN0IG9wID0gb3BzW2ldOyBjb25zdCBmbiA9IG9wc1tpICsgMV07IGkgKz0gMjsgaWYgKChvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpICYmIHZhbHVlID09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBpZiAob3AgPT09ICdhY2Nlc3MnIHx8IG9wID09PSAnb3B0aW9uYWxBY2Nlc3MnKSB7IGxhc3RBY2Nlc3NMSFMgPSB2YWx1ZTsgdmFsdWUgPSBmbih2YWx1ZSk7IH0gZWxzZSBpZiAob3AgPT09ICdjYWxsJyB8fCBvcCA9PT0gJ29wdGlvbmFsQ2FsbCcpIHsgdmFsdWUgPSBmbigoLi4uYXJncykgPT4gdmFsdWUuY2FsbChsYXN0QWNjZXNzTEhTLCAuLi5hcmdzKSk7IGxhc3RBY2Nlc3NMSFMgPSB1bmRlZmluZWQ7IH0gfSByZXR1cm4gdmFsdWU7IH0KY29uc3Qgb3B0aW9ucyA9IHdvcmtlckRhdGE7CmxldCBzZXNzaW9uOwpsZXQgaGFzU2VudEFuckV2ZW50ID0gZmFsc2U7CgpmdW5jdGlvbiBsb2cobXNnKSB7CiAgaWYgKG9wdGlvbnMuZGVidWcpIHsKICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlCiAgICBjb25zb2xlLmxvZyhgW0FOUiBXb3JrZXJdICR7bXNnfWApOwogIH0KfQoKY29uc3QgdXJsID0gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aChvcHRpb25zLmRzbik7CmNvbnN0IHRyYW5zcG9ydCA9IG1ha2VOb2RlVHJhbnNwb3J0KHsKICB1cmwsCiAgcmVjb3JkRHJvcHBlZEV2ZW50OiAoKSA9PiB7CiAgICAvLwogIH0sCn0pOwoKYXN5bmMgZnVuY3Rpb24gc2VuZEFibm9ybWFsU2Vzc2lvbigpIHsKICAvLyBvZiB3ZSBoYXZlIGFuIGV4aXN0aW5nIHNlc3Npb24gcGFzc2VkIGZyb20gdGhlIG1haW4gdGhyZWFkLCBzZW5kIGl0IGFzIGFibm9ybWFsCiAgaWYgKHNlc3Npb24pIHsKICAgIGxvZygnU2VuZGluZyBhYm5vcm1hbCBzZXNzaW9uJyk7CiAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIHsgc3RhdHVzOiAnYWJub3JtYWwnLCBhYm5vcm1hbF9tZWNoYW5pc206ICdhbnJfZm9yZWdyb3VuZCcgfSk7CgogICAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVTZXNzaW9uRW52ZWxvcGUoc2Vzc2lvbiwgb3B0aW9ucy5kc24sIG9wdGlvbnMuc2RrTWV0YWRhdGEpOwogICAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogICAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogICAgYXdhaXQgdHJhbnNwb3J0LnNlbmQoZW52ZWxvcGUpOwoKICAgIHRyeSB7CiAgICAgIC8vIE5vdGlmeSB0aGUgbWFpbiBwcm9jZXNzIHRoYXQgdGhlIHNlc3Npb24gaGFzIGVuZGVkIHNvIHRoZSBzZXNzaW9uIGNhbiBiZSBjbGVhcmVkIGZyb20gdGhlIHNjb3BlCiAgICAgIF9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfMiA9PiBfMi5wb3N0TWVzc2FnZSwgJ2NhbGwnLCBfMyA9PiBfMygnc2Vzc2lvbi1lbmRlZCcpXSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vIGlnbm9yZQogICAgfQogIH0KfQoKbG9nKCdTdGFydGVkJyk7CgpmdW5jdGlvbiBwcmVwYXJlU3RhY2tGcmFtZXMoc3RhY2tGcmFtZXMpIHsKICBpZiAoIXN0YWNrRnJhbWVzKSB7CiAgICByZXR1cm4gdW5kZWZpbmVkOwogIH0KCiAgLy8gU3RyaXAgU2VudHJ5IGZyYW1lcyBhbmQgcmV2ZXJzZSB0aGUgc3RhY2sgZnJhbWVzIHNvIHRoZXkgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyCiAgY29uc3Qgc3RyaXBwZWRGcmFtZXMgPSBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2Uoc3RhY2tGcmFtZXMpOwoKICAvLyBJZiB3ZSBoYXZlIGFuIGFwcCByb290IHBhdGgsIHJld3JpdGUgdGhlIGZpbGVuYW1lcyB0byBiZSByZWxhdGl2ZSB0byB0aGUgYXBwIHJvb3QKICBpZiAob3B0aW9ucy5hcHBSb290UGF0aCkgewogICAgZm9yIChjb25zdCBmcmFtZSBvZiBzdHJpcHBlZEZyYW1lcykgewogICAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGZyYW1lLmZpbGVuYW1lID0gbm9ybWFsaXplVXJsVG9CYXNlKGZyYW1lLmZpbGVuYW1lLCBvcHRpb25zLmFwcFJvb3RQYXRoKTsKICAgIH0KICB9CgogIHJldHVybiBzdHJpcHBlZEZyYW1lczsKfQoKZnVuY3Rpb24gYXBwbHlTY29wZVRvRXZlbnQoZXZlbnQsIHNjb3BlKSB7CiAgYXBwbHlTY29wZURhdGFUb0V2ZW50KGV2ZW50LCBzY29wZSk7CgogIGlmICghX29wdGlvbmFsQ2hhaW4oW2V2ZW50LCAnYWNjZXNzJywgXzQgPT4gXzQuY29udGV4dHMsICdvcHRpb25hbEFjY2VzcycsIF81ID0+IF81LnRyYWNlXSkpIHsKICAgIGNvbnN0IHsgdHJhY2VJZCwgc3BhbklkLCBwYXJlbnRTcGFuSWQgfSA9IHNjb3BlLnByb3BhZ2F0aW9uQ29udGV4dDsKICAgIGV2ZW50LmNvbnRleHRzID0gewogICAgICB0cmFjZTogewogICAgICAgIHRyYWNlX2lkOiB0cmFjZUlkLAogICAgICAgIHNwYW5faWQ6IHNwYW5JZCwKICAgICAgICBwYXJlbnRfc3Bhbl9pZDogcGFyZW50U3BhbklkLAogICAgICB9LAogICAgICAuLi5ldmVudC5jb250ZXh0cywKICAgIH07CiAgfQp9Cgphc3luYyBmdW5jdGlvbiBzZW5kQW5yRXZlbnQoZnJhbWVzLCBzY29wZSkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogb3B0aW9ucy5jb250ZXh0cywKICAgIHJlbGVhc2U6IG9wdGlvbnMucmVsZWFzZSwKICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LAogICAgZGlzdDogb3B0aW9ucy5kaXN0LAogICAgcGxhdGZvcm06ICdub2RlJywKICAgIGxldmVsOiAnZXJyb3InLAogICAgZXhjZXB0aW9uOiB7CiAgICAgIHZhbHVlczogWwogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICdBcHBsaWNhdGlvbk5vdFJlc3BvbmRpbmcnLAogICAgICAgICAgdmFsdWU6IGBBcHBsaWNhdGlvbiBOb3QgUmVzcG9uZGluZyBmb3IgYXQgbGVhc3QgJHtvcHRpb25zLmFuclRocmVzaG9sZH0gbXNgLAogICAgICAgICAgc3RhY2t0cmFjZTogeyBmcmFtZXM6IHByZXBhcmVTdGFja0ZyYW1lcyhmcmFtZXMpIH0sCiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFVJIGRvZXNuJ3Qgc2F5ICdDcmFzaGVkIGluJyBmb3IgdGhlIHN0YWNrIHRyYWNlCiAgICAgICAgICBtZWNoYW5pc206IHsgdHlwZTogJ0FOUicgfSwKICAgICAgICB9LAogICAgICBdLAogICAgfSwKICAgIHRhZ3M6IG9wdGlvbnMuc3RhdGljVGFncywKICB9OwoKICBpZiAoc2NvcGUpIHsKICAgIGFwcGx5U2NvcGVUb0V2ZW50KGV2ZW50LCBzY29wZSk7CiAgfQoKICBjb25zdCBlbnZlbG9wZSA9IGNyZWF0ZUV2ZW50RW52ZWxvcGUoZXZlbnQsIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAvLyBMb2cgdGhlIGVudmVsb3BlIHRvIGFpZCBpbiB0ZXN0aW5nCiAgbG9nKEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKSk7CgogIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKICBhd2FpdCB0cmFuc3BvcnQuZmx1c2goMjAwMCk7CgogIC8vIERlbGF5IGZvciA1IHNlY29uZHMgc28gdGhhdCBzdGRpbyBjYW4gZmx1c2ggaW4gdGhlIG1haW4gZXZlbnQgbG9vcCBldmVyIHJlc3RhcnRzLgogIC8vIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBsb2dnaW5nL2RlYnVnZ2luZyBpc3N1ZXMuCiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBwcm9jZXNzLmV4aXQoMCk7CiAgfSwgNTAwMCk7Cn0KCmxldCBkZWJ1Z2dlclBhdXNlOwoKaWYgKG9wdGlvbnMuY2FwdHVyZVN0YWNrVHJhY2UpIHsKICBsb2coJ0Nvbm5lY3RpbmcgdG8gZGVidWdnZXInKTsKCiAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBTZXNzaW9uKCkgOwogIHNlc3Npb24uY29ubmVjdFRvTWFpblRocmVhZCgpOwoKICBsb2coJ0Nvbm5lY3RlZCB0byBkZWJ1Z2dlcicpOwoKICAvLyBDb2xsZWN0IHNjcmlwdElkIC0+IHVybCBtYXAgc28gd2UgY2FuIGxvb2sgdXAgdGhlIGZpbGVuYW1lcyBsYXRlcgogIGNvbnN0IHNjcmlwdHMgPSBuZXcgTWFwKCk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnNjcmlwdFBhcnNlZCcsIGV2ZW50ID0+IHsKICAgIHNjcmlwdHMuc2V0KGV2ZW50LnBhcmFtcy5zY3JpcHRJZCwgZXZlbnQucGFyYW1zLnVybCk7CiAgfSk7CgogIHNlc3Npb24ub24oJ0RlYnVnZ2VyLnBhdXNlZCcsIGV2ZW50ID0+IHsKICAgIGlmIChldmVudC5wYXJhbXMucmVhc29uICE9PSAnb3RoZXInKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICBsb2coJ0RlYnVnZ2VyIHBhdXNlZCcpOwoKICAgICAgLy8gY29weSB0aGUgZnJhbWVzCiAgICAgIGNvbnN0IGNhbGxGcmFtZXMgPSBbLi4uZXZlbnQucGFyYW1zLmNhbGxGcmFtZXNdOwoKICAgICAgY29uc3QgZ2V0TW9kdWxlTmFtZSA9IG9wdGlvbnMuYXBwUm9vdFBhdGggPyBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUob3B0aW9ucy5hcHBSb290UGF0aCkgOiAoKSA9PiB1bmRlZmluZWQ7CiAgICAgIGNvbnN0IHN0YWNrRnJhbWVzID0gY2FsbEZyYW1lcy5tYXAoZnJhbWUgPT4KICAgICAgICBjYWxsRnJhbWVUb1N0YWNrRnJhbWUoZnJhbWUsIHNjcmlwdHMuZ2V0KGZyYW1lLmxvY2F0aW9uLnNjcmlwdElkKSwgZ2V0TW9kdWxlTmFtZSksCiAgICAgICk7CgogICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBpbiB0aGUgY3VycmVudGx5IHBhdXNlZCBjb250ZXh0CiAgICAgIHNlc3Npb24ucG9zdCgKICAgICAgICAnUnVudGltZS5ldmFsdWF0ZScsCiAgICAgICAgewogICAgICAgICAgLy8gR3JhYiB0aGUgdHJhY2UgY29udGV4dCBmcm9tIHRoZSBjdXJyZW50IHNjb3BlCiAgICAgICAgICBleHByZXNzaW9uOiAnZ2xvYmFsLl9fU0VOVFJZX0dFVF9TQ09QRVNfXygpOycsCiAgICAgICAgICAvLyBEb24ndCByZS10cmlnZ2VyIHRoZSBkZWJ1Z2dlciBpZiB0aGlzIGNhdXNlcyBhbiBlcnJvcgogICAgICAgICAgc2lsZW50OiB0cnVlLAogICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSByZXN1bHQgdG8ganNvbiBvdGhlcndpc2Ugb25seSBwcmltaXRpdmVzIGFyZSBzdXBwb3J0ZWQKICAgICAgICAgIHJldHVybkJ5VmFsdWU6IHRydWUsCiAgICAgICAgfSwKICAgICAgICAoZXJyLCBwYXJhbSkgPT4gewogICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBsb2coYEVycm9yIGV4ZWN1dGluZyBzY3JpcHQ6ICcke2Vyci5tZXNzYWdlfSdgKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBzY29wZXMgPSBwYXJhbSAmJiBwYXJhbS5yZXN1bHQgPyAocGFyYW0ucmVzdWx0LnZhbHVlICkgOiB1bmRlZmluZWQ7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIHNlbmRBbnJFdmVudChzdGFja0ZyYW1lcywgc2NvcGVzKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQuJyk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICApOwogICAgfSBjYXRjaCAoZSkgewogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLnJlc3VtZScpOwogICAgICBzZXNzaW9uLnBvc3QoJ0RlYnVnZ2VyLmRpc2FibGUnKTsKICAgICAgdGhyb3cgZTsKICAgIH0KICB9KTsKCiAgZGVidWdnZXJQYXVzZSA9ICgpID0+IHsKICAgIHRyeSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZW5hYmxlJywgKCkgPT4gewogICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucGF1c2UnKTsKICAgICAgfSk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIC8vCiAgICB9CiAgfTsKfQoKZnVuY3Rpb24gY3JlYXRlSHJUaW1lcigpIHsKICAvLyBUT0RPICh2OCk6IFdlIGNhbiB1c2UgcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCkgYWZ0ZXIgd2UgZHJvcCBub2RlIHY4CiAgbGV0IGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKCiAgcmV0dXJuIHsKICAgIGdldFRpbWVNczogKCkgPT4gewogICAgICBjb25zdCBbc2Vjb25kcywgbmFub1NlY29uZHNdID0gcHJvY2Vzcy5ocnRpbWUobGFzdFBvbGwpOwogICAgICByZXR1cm4gTWF0aC5mbG9vcihzZWNvbmRzICogMWUzICsgbmFub1NlY29uZHMgLyAxZTYpOwogICAgfSwKICAgIHJlc2V0OiAoKSA9PiB7CiAgICAgIGxhc3RQb2xsID0gcHJvY2Vzcy5ocnRpbWUoKTsKICAgIH0sCiAgfTsKfQoKZnVuY3Rpb24gd2F0Y2hkb2dUaW1lb3V0KCkgewogIGxvZygnV2F0Y2hkb2cgdGltZW91dCcpOwoKICBpZiAoZGVidWdnZXJQYXVzZSkgewogICAgbG9nKCdQYXVzaW5nIGRlYnVnZ2VyIHRvIGNhcHR1cmUgc3RhY2sgdHJhY2UnKTsKICAgIGRlYnVnZ2VyUGF1c2UoKTsKICB9IGVsc2UgewogICAgbG9nKCdDYXB0dXJpbmcgZXZlbnQgd2l0aG91dCBhIHN0YWNrIHRyYWNlJyk7CiAgICBzZW5kQW5yRXZlbnQoKS50aGVuKG51bGwsICgpID0+IHsKICAgICAgbG9nKCdTZW5kaW5nIEFOUiBldmVudCBmYWlsZWQgb24gd2F0Y2hkb2cgdGltZW91dC4nKTsKICAgIH0pOwogIH0KfQoKY29uc3QgeyBwb2xsIH0gPSB3YXRjaGRvZ1RpbWVyKGNyZWF0ZUhyVGltZXIsIG9wdGlvbnMucG9sbEludGVydmFsLCBvcHRpb25zLmFuclRocmVzaG9sZCwgd2F0Y2hkb2dUaW1lb3V0KTsKCl9vcHRpb25hbENoYWluKFtwYXJlbnRQb3J0LCAnb3B0aW9uYWxBY2Nlc3MnLCBfNiA9PiBfNi5vbiwgJ2NhbGwnLCBfNyA9PiBfNygnbWVzc2FnZScsIChtc2cpID0+IHsKICBpZiAobXNnLnNlc3Npb24pIHsKICAgIHNlc3Npb24gPSBtYWtlU2Vzc2lvbihtc2cuc2Vzc2lvbik7CiAgfQoKICBwb2xsKCk7Cn0pXSk7" | |
}); | |
var rm = Y((CL1, WL1) => { | |
var { | |
_optionalChain: u14, | |
_optionalChainDelete: dL1 | |
} = V0(); | |
Object.defineProperty(CL1, "__esModule", { | |
value: !0 | |
}); | |
var T14 = B1("url"), | |
$A = V4(), | |
nm = V0(), | |
$01 = UF(), | |
O14 = IL1(), | |
m14 = 50, | |
l14 = 5000; | |
function u01(I, ...d) { | |
nm.logger.log(`[ANR] ${I}`, ...d) | |
} | |
function b14() { | |
return nm.GLOBAL_OBJ | |
} | |
function h14() { | |
let I = $A.getGlobalScope().getScopeData(); | |
return $A.mergeScopeData(I, $A.getIsolationScope().getScopeData()), $A.mergeScopeData(I, $A.getCurrentScope().getScopeData()), I.attachments = [], I.eventProcessors = [], I | |
} | |
function j14() { | |
return nm.dynamicRequire(WL1, "worker_threads") | |
} | |
async function k14(I) { | |
let d = { | |
message: "ANR" | |
}, | |
G = {}; | |
for (let Z of I.getEventProcessors()) { | |
if (d === null) break; | |
d = await Z(d, G) | |
} | |
return u14([d, "optionalAccess", (Z) => Z.contexts]) || {} | |
} | |
var GL1 = "Anr", | |
x14 = (I = {}) => { | |
if ($01.NODE_VERSION.major < 16 || $01.NODE_VERSION.major === 16 && $01.NODE_VERSION.minor < 17) throw new Error("ANR detection requires Node 16.17.0 or later"); | |
let d, G, Z = b14(); | |
return Z.__SENTRY_GET_SCOPES__ = h14, { | |
name: GL1, | |
setupOnce() {}, | |
startWorker: () => { | |
if (d) return; | |
if (G) d = p14(G, I) | |
}, | |
stopWorker: () => { | |
if (d) d.then((C) => { | |
C(), d = void 0 | |
}) | |
}, | |
setup(C) { | |
G = C, setImmediate(() => this.startWorker()) | |
} | |
} | |
}, | |
ZL1 = $A.defineIntegration(x14), | |
c14 = $A.convertIntegrationFnToClass(GL1, ZL1); | |
async function p14(I, d) { | |
let G = I.getDsn(); | |
if (!G) return () => {}; | |
let Z = await k14(I); | |
dL1([Z, "access", (X) => X.app, "optionalAccess", (X) => delete X.app_memory]), dL1([Z, "access", (X) => X.device, "optionalAccess", (X) => delete X.free_memory]); | |
let C = I.getOptions(), | |
W = I.getSdkMetadata() || {}; | |
if (W.sdk) W.sdk.integrations = C.integrations.map((X) => X.name); | |
let w = { | |
debug: nm.logger.isEnabled(), | |
dsn: G, | |
environment: C.environment || "production", | |
release: C.release, | |
dist: C.dist, | |
sdkMetadata: W, | |
appRootPath: d.appRootPath, | |
pollInterval: d.pollInterval || m14, | |
anrThreshold: d.anrThreshold || l14, | |
captureStackTrace: !!d.captureStackTrace, | |
staticTags: d.staticTags || {}, | |
contexts: Z | |
}; | |
if (w.captureStackTrace) { | |
let X = B1("inspector"); | |
if (!X.url()) X.open(0) | |
} | |
let { | |
Worker: B | |
} = j14(), A = new B(new T14.URL(`data:application/javascript;base64,${O14.base64WorkerScript}`), { | |
workerData: w | |
}); | |
process.on("exit", () => { | |
A.terminate() | |
}); | |
let V = setInterval(() => { | |
try { | |
let X = $A.getCurrentScope().getSession(), | |
_ = X ? { | |
...X, | |
toJSON: void 0 | |
} : void 0; | |
A.postMessage({ | |
session: _ | |
}) | |
} catch (X) {} | |
}, w.pollInterval); | |
return V.unref(), A.on("message", (X) => { | |
if (X === "session-ended") u01("ANR event sent from ANR worker. Clearing session in this thread."), $A.getCurrentScope().setSession(void 0) | |
}), A.once("error", (X) => { | |
clearInterval(V), u01("ANR worker error", X) | |
}), A.once("exit", (X) => { | |
clearInterval(V), u01("ANR worker exit", X) | |
}), A.unref(), () => { | |
A.terminate(), clearInterval(V) | |
} | |
} | |
CL1.Anr = c14; | |
CL1.anrIntegration = ZL1 | |
}); | |
var BL1 = Y((wL1) => { | |
Object.defineProperty(wL1, "__esModule", { | |
value: !0 | |
}); | |
var r14 = V4(), | |
a14 = rm(); | |
function s14(I) { | |
let d = r14.getClient(); | |
return new a14.Anr(I).setup(d), Promise.resolve() | |
} | |
wL1.enableAnrDetection = s14 | |
}); | |
var T01 = Y((XL1) => { | |
var { | |
_optionalChain: AL1 | |
} = V0(); | |
Object.defineProperty(XL1, "__esModule", { | |
value: !0 | |
}); | |
var PN = V4(), | |
VL1 = V0(); | |
function e14(I = {}) { | |
return function({ | |
path: d, | |
type: G, | |
next: Z, | |
rawInput: C | |
}) { | |
let W = AL1([PN.getClient, "call", (V) => V(), "optionalAccess", (V) => V.getOptions, "call", (V) => V()]), | |
w = PN.getCurrentScope().getTransaction(); | |
if (w) { | |
w.updateName(`trpc/${d}`), w.setAttribute(PN.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, "route"), w.op = "rpc.server"; | |
let V = { | |
procedure_type: G | |
}; | |
if (I.attachRpcInput !== void 0 ? I.attachRpcInput : AL1([W, "optionalAccess", (X) => X.sendDefaultPii])) V.input = VL1.normalize(C); | |
w.setContext("trpc", V) | |
} | |
function B(V) { | |
if (!V.ok) PN.captureException(V.error, { | |
mechanism: { | |
handled: !1, | |
data: { | |
function: "trpcMiddleware" | |
} | |
} | |
}) | |
} | |
let A; | |
try { | |
A = Z() | |
} catch (V) { | |
throw PN.captureException(V, { | |
mechanism: { | |
handled: !1, | |
data: { | |
function: "trpcMiddleware" | |
} | |
} | |
}), V | |
} | |
if (VL1.isThenable(A)) Promise.resolve(A).then((V) => { | |
B(V) | |
}, (V) => { | |
PN.captureException(V, { | |
mechanism: { | |
handled: !1, | |
data: { | |
function: "trpcMiddleware" | |
} | |
} | |
}) | |
}); | |
else B(A); | |
return A | |
} | |
} | |
XL1.trpcMiddleware = e14 | |
}); | |
var DL1 = Y((_L1) => { | |
Object.defineProperty(_L1, "__esModule", { | |
value: !0 | |
}); | |
var YL1 = V0(); | |
function I04(I, d) { | |
return YL1.extractRequestData(I, { | |
include: d | |
}) | |
} | |
function d04(I, d, G = {}) { | |
return YL1.addRequestDataToEvent(I, d, { | |
include: G | |
}) | |
} | |
_L1.extractRequestData = I04; | |
_L1.parseRequest = d04 | |
}); | |
var gL1 = Y((FL1) => { | |
var { | |
_optionalChain: am | |
} = V0(); | |
Object.defineProperty(FL1, "__esModule", { | |
value: !0 | |
}); | |
var w8 = V4(), | |
$N = V0(), | |
C04 = AE(), | |
sm = y01(), | |
W04 = T01(), | |
HL1 = DL1(); | |
function w04() { | |
return function I(d, G, Z) { | |
let C = am([w8.getClient, "call", (X) => X(), "optionalAccess", (X) => X.getOptions, "call", (X) => X()]); | |
if (!C || C.instrumenter !== "sentry" || am([d, "access", (X) => X.method, "optionalAccess", (X) => X.toUpperCase, "call", (X) => X()]) === "OPTIONS" || am([d, "access", (X) => X.method, "optionalAccess", (X) => X.toUpperCase, "call", (X) => X()]) === "HEAD") return Z(); | |
let W = d.headers && $N.isString(d.headers["sentry-trace"]) ? d.headers["sentry-trace"] : void 0, | |
w = am([d, "access", (X) => X.headers, "optionalAccess", (X) => X.baggage]); | |
if (!w8.hasTracingEnabled(C)) return Z(); | |
let [B, A] = $N.extractPathForTransaction(d, { | |
path: !0, | |
method: !0 | |
}), V = w8.continueTrace({ | |
sentryTrace: W, | |
baggage: w | |
}, (X) => w8.startTransaction({ | |
name: B, | |
op: "http.server", | |
origin: "auto.http.node.tracingHandler", | |
...X, | |
data: { | |
[w8.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: A | |
}, | |
metadata: { | |
...X.metadata, | |
request: d | |
} | |
}, { | |
request: $N.extractRequestData(d) | |
})); | |
w8.getCurrentScope().setSpan(V), G.__sentry_transaction = V, G.once("finish", () => { | |
setImmediate(() => { | |
$N.addRequestDataToTransaction(V, d), w8.setHttpStatus(V, G.statusCode), V.end() | |
}) | |
}), Z() | |
} | |
} | |
function B04(I = {}) { | |
let d; | |
if ("include" in I) d = { | |
include: I.include | |
}; | |
else { | |
let { | |
ip: G, | |
request: Z, | |
transaction: C, | |
user: W | |
} = I; | |
if (G || Z || C || W) d = { | |
include: $N.dropUndefinedKeys({ | |
ip: G, | |
request: Z, | |
transaction: C, | |
user: W | |
}) | |
} | |
} | |
return d | |
} | |
function A04(I) { | |
let d = B04(I), | |
G = w8.getClient(); | |
if (G && sm.isAutoSessionTrackingEnabled(G)) { | |
G.initSessionFlusher(); | |
let Z = w8.getCurrentScope(); | |
if (Z.getSession()) Z.setSession() | |
} | |
return function Z(C, W, w) { | |
if (I && I.flushTimeout && I.flushTimeout > 0) { | |
let B = W.end; | |
W.end = function(A, V, X) { | |
w8.flush(I.flushTimeout).then(() => { | |
B.call(this, A, V, X) | |
}).then(null, (_) => { | |
C04.DEBUG_BUILD && $N.logger.error(_), B.call(this, A, V, X) | |
}) | |
} | |
} | |
w8.runWithAsyncContext(() => { | |
let B = w8.getCurrentScope(); | |
B.setSDKProcessingMetadata({ | |
request: C, | |
requestDataOptionsFromExpressHandler: d | |
}); | |
let A = w8.getClient(); | |
if (sm.isAutoSessionTrackingEnabled(A)) B.setRequestSession({ | |
status: "ok" | |
}); | |
W.once("finish", () => { | |
let V = w8.getClient(); | |
if (sm.isAutoSessionTrackingEnabled(V)) setImmediate(() => { | |
if (V && V._captureRequestSession) V._captureRequestSession() | |
}) | |
}), w() | |
}) | |
} | |
} | |
function V04(I) { | |
let d = I.status || I.statusCode || I.status_code || I.output && I.output.statusCode; | |
return d ? parseInt(d, 10) : 500 | |
} | |
function X04(I) { | |
return V04(I) >= 500 | |
} | |
function Y04(I) { | |
return function d(G, Z, C, W) { | |
if ((I && I.shouldHandleError || X04)(G)) { | |
w8.withScope((B) => { | |
B.setSDKProcessingMetadata({ | |
request: Z | |
}); | |
let A = C.__sentry_transaction; | |
if (A && !w8.getActiveSpan()) B.setSpan(A); | |
let V = w8.getClient(); | |
if (V && sm.isAutoSessionTrackingEnabled(V)) { | |
if (V._sessionFlusher !== void 0) { | |
let F = B.getRequestSession(); | |
if (F && F.status !== void 0) F.status = "crashed" | |
} | |
} | |
let X = w8.captureException(G, { | |
mechanism: { | |
type: "middleware", | |
handled: !1 | |
} | |
}); | |
C.sentry = X, W(G) | |
}); | |
return | |
} | |
W(G) | |
} | |
} | |
var _04 = W04.trpcMiddleware; | |
FL1.extractRequestData = HL1.extractRequestData; | |
FL1.parseRequest = HL1.parseRequest; | |
FL1.errorHandler = Y04; | |
FL1.requestHandler = A04; | |
FL1.tracingHandler = w04; | |
FL1.trpcMiddleware = _04 | |
}); | |
var O01 = Y((qL1) => { | |
Object.defineProperty(qL1, "__esModule", { | |
value: !0 | |
}); | |
var rI = V4(), | |
KL1 = V0(); | |
function JL1(I) { | |
return I && I.statusCode !== void 0 | |
} | |
function N04(I) { | |
return I && I.error !== void 0 | |
} | |
function z04(I) { | |
rI.captureException(I, { | |
mechanism: { | |
type: "hapi", | |
handled: !1, | |
data: { | |
function: "hapiErrorPlugin" | |
} | |
} | |
}) | |
} | |
var NL1 = { | |
name: "SentryHapiErrorPlugin", | |
version: rI.SDK_VERSION, | |
register: async function(I) { | |
I.events.on("request", (G, Z) => { | |
let C = rI.getActiveTransaction(); | |
if (N04(Z)) z04(Z.error); | |
if (C) C.setStatus("internal_error"), C.end() | |
}) | |
} | |
}, | |
zL1 = { | |
name: "SentryHapiTracingPlugin", | |
version: rI.SDK_VERSION, | |
register: async function(I) { | |
let d = I; | |
d.ext("onPreHandler", (G, Z) => { | |
let C = rI.continueTrace({ | |
sentryTrace: G.headers["sentry-trace"] || void 0, | |
baggage: G.headers.baggage || void 0 | |
}, (W) => { | |
return rI.startTransaction({ | |
...W, | |
op: "hapi.request", | |
name: G.route.path, | |
description: `${G.route.method} ${G.path}` | |
}) | |
}); | |
return rI.getCurrentScope().setSpan(C), Z.continue | |
}), d.ext("onPreResponse", (G, Z) => { | |
let C = rI.getActiveTransaction(); | |
if (G.response && JL1(G.response) && C) { | |
let W = G.response; | |
W.header("sentry-trace", rI.spanToTraceHeader(C)); | |
let w = KL1.dynamicSamplingContextToSentryBaggageHeader(rI.getDynamicSamplingContextFromSpan(C)); | |
if (w) W.header("baggage", w) | |
} | |
return Z.continue | |
}), d.ext("onPostHandler", (G, Z) => { | |
let C = rI.getActiveTransaction(); | |
if (C) { | |
if (G.response && JL1(G.response)) rI.setHttpStatus(C, G.response.statusCode); | |
C.end() | |
} | |
return Z.continue | |
}) | |
} | |
}, | |
QL1 = "Hapi", | |
Q04 = (I = {}) => { | |
let d = I.server; | |
return { | |
name: QL1, | |
setupOnce() { | |
if (!d) return; | |
KL1.fill(d, "start", (G) => { | |
return async function() { | |
return await this.register(zL1), await this.register(NL1), G.apply(this) | |
} | |
}) | |
} | |
} | |
}, | |
fL1 = rI.defineIntegration(Q04), | |
f04 = rI.convertIntegrationFnToClass(QL1, fL1); | |
qL1.Hapi = f04; | |
qL1.hapiErrorPlugin = NL1; | |
qL1.hapiIntegration = fL1; | |
qL1.hapiTracingPlugin = zL1 | |
}); | |
var UL1 = Y((RL1) => { | |
Object.defineProperty(RL1, "__esModule", { | |
value: !0 | |
}); | |
var E04 = Sm(), | |
M04 = $m(), | |
S04 = hm(), | |
L04 = km(), | |
y04 = mm(), | |
P04 = Pm(), | |
$04 = Lm(), | |
u04 = V4(), | |
T04 = Om(), | |
O04 = pm(), | |
m04 = xm(), | |
l04 = rm(), | |
b04 = O01(); | |
RL1.Console = E04.Console; | |
RL1.Http = M04.Http; | |
RL1.OnUncaughtException = S04.OnUncaughtException; | |
RL1.OnUnhandledRejection = L04.OnUnhandledRejection; | |
RL1.Modules = y04.Modules; | |
RL1.ContextLines = P04.ContextLines; | |
RL1.Context = $04.Context; | |
RL1.RequestData = u04.RequestData; | |
RL1.LocalVariables = T04.LocalVariables; | |
RL1.Undici = O04.Undici; | |
RL1.Spotlight = m04.Spotlight; | |
RL1.Anr = l04.Anr; | |
RL1.Hapi = b04.Hapi | |
}); | |
var EL1 = Y((vL1) => { | |
Object.defineProperty(vL1, "__esModule", { | |
value: !0 | |
}); | |
var yF = H01(); | |
vL1.Apollo = yF.Apollo; | |
vL1.Express = yF.Express; | |
vL1.GraphQL = yF.GraphQL; | |
vL1.Mongo = yF.Mongo; | |
vL1.Mysql = yF.Mysql; | |
vL1.Postgres = yF.Postgres; | |
vL1.Prisma = yF.Prisma | |
}); | |
var yL1 = Y((LL1) => { | |
Object.defineProperty(LL1, "__esModule", { | |
value: !0 | |
}); | |
var PF = V4(), | |
$F = V0(), | |
ML1 = "CaptureConsole", | |
w24 = (I = {}) => { | |
let d = I.levels || $F.CONSOLE_LEVELS; | |
return { | |
name: ML1, | |
setupOnce() {}, | |
setup(G) { | |
if (!("console" in $F.GLOBAL_OBJ)) return; | |
$F.addConsoleInstrumentationHandler(({ | |
args: Z, | |
level: C | |
}) => { | |
if (PF.getClient() !== G || !d.includes(C)) return; | |
A24(Z, C) | |
}) | |
} | |
} | |
}, | |
SL1 = PF.defineIntegration(w24), | |
B24 = PF.convertIntegrationFnToClass(ML1, SL1); | |
function A24(I, d) { | |
let G = { | |
level: $F.severityLevelFromString(d), | |
extra: { | |
arguments: I | |
} | |
}; | |
PF.withScope((Z) => { | |
if (Z.addEventProcessor((w) => { | |
return w.logger = "console", $F.addExceptionMechanism(w, { | |
handled: !1, | |
type: "console" | |
}), w | |
}), d === "assert" && I[0] === !1) { | |
let w = `Assertion failed: ${$F.safeJoin(I.slice(1)," ")||"console.assert"}`; | |
Z.setExtra("arguments", I.slice(1)), PF.captureMessage(w, G); | |
return | |
} | |
let C = I.find((w) => w instanceof Error); | |
if (d === "error" && C) { | |
PF.captureException(C, G); | |
return | |
} | |
let W = $F.safeJoin(I, " "); | |
PF.captureMessage(W, G) | |
}) | |
} | |
LL1.CaptureConsole = B24; | |
LL1.captureConsoleIntegration = SL1 | |
}); | |
var OL1 = Y((TL1) => { | |
Object.defineProperty(TL1, "__esModule", { | |
value: !0 | |
}); | |
var PL1 = V4(), | |
Y24 = V0(), | |
$L1 = "Debug", | |
_24 = (I = {}) => { | |
let d = { | |
debugger: !1, | |
stringify: !1, | |
...I | |
}; | |
return { | |
name: $L1, | |
setupOnce() {}, | |
setup(G) { | |
if (!G.on) return; | |
G.on("beforeSendEvent", (Z, C) => { | |
if (d.debugger) debugger; | |
Y24.consoleSandbox(() => { | |
if (d.stringify) { | |
if (console.log(JSON.stringify(Z, null, 2)), C && Object.keys(C).length) console.log(JSON.stringify(C, null, 2)) | |
} else if (console.log(Z), C && Object.keys(C).length) console.log(C) | |
}) | |
}) | |
} | |
} | |
}, | |
uL1 = PL1.defineIntegration(_24), | |
D24 = PL1.convertIntegrationFnToClass($L1, uL1); | |
TL1.Debug = D24; | |
TL1.debugIntegration = uL1 | |
}); | |
var XE = Y((mL1) => { | |
Object.defineProperty(mL1, "__esModule", { | |
value: !0 | |
}); | |
var g24 = typeof __SENTRY_DEBUG__ === "undefined" || __SENTRY_DEBUG__; | |
mL1.DEBUG_BUILD = g24 | |
}); | |
var nL1 = Y((iL1) => { | |
Object.defineProperty(iL1, "__esModule", { | |
value: !0 | |
}); | |
var hL1 = V4(), | |
K24 = V0(), | |
N24 = XE(), | |
jL1 = "Dedupe", | |
z24 = () => { | |
let I; | |
return { | |
name: jL1, | |
setupOnce() {}, | |
processEvent(d) { | |
if (d.type) return d; | |
try { | |
if (xL1(d, I)) return N24.DEBUG_BUILD && K24.logger.warn("Event dropped due to being a duplicate of previously captured event."), null | |
} catch (G) {} | |
return I = d | |
} | |
} | |
}, | |
kL1 = hL1.defineIntegration(z24), | |
Q24 = hL1.convertIntegrationFnToClass(jL1, kL1); | |
function xL1(I, d) { | |
if (!d) return !1; | |
if (f24(I, d)) return !0; | |
if (q24(I, d)) return !0; | |
return !1 | |
} | |
function f24(I, d) { | |
let G = I.message, | |
Z = d.message; | |
if (!G && !Z) return !1; | |
if (G && !Z || !G && Z) return !1; | |
if (G !== Z) return !1; | |
if (!pL1(I, d)) return !1; | |
if (!cL1(I, d)) return !1; | |
return !0 | |
} | |
function q24(I, d) { | |
let G = lL1(d), | |
Z = lL1(I); | |
if (!G || !Z) return !1; | |
if (G.type !== Z.type || G.value !== Z.value) return !1; | |
if (!pL1(I, d)) return !1; | |
if (!cL1(I, d)) return !1; | |
return !0 | |
} | |
function cL1(I, d) { | |
let G = bL1(I), | |
Z = bL1(d); | |
if (!G && !Z) return !0; | |
if (G && !Z || !G && Z) return !1; | |
if (G = G, Z = Z, Z.length !== G.length) return !1; | |
for (let C = 0; C < Z.length; C++) { | |
let W = Z[C], | |
w = G[C]; | |
if (W.filename !== w.filename || W.lineno !== w.lineno || W.colno !== w.colno || W.function !== w.function) return !1 | |
} | |
return !0 | |
} | |
function pL1(I, d) { | |
let G = I.fingerprint, | |
Z = d.fingerprint; | |
if (!G && !Z) return !0; | |
if (G && !Z || !G && Z) return !1; | |
G = G, Z = Z; | |
try { | |
return G.join("") === Z.join("") | |
} catch (C) { | |
return !1 | |
} | |
} | |
function lL1(I) { | |
return I.exception && I.exception.values && I.exception.values[0] | |
} | |
function bL1(I) { | |
let d = I.exception; | |
if (d) try { | |
return d.values[0].stacktrace.frames | |
} catch (G) { | |
return | |
} | |
return | |
} | |
iL1.Dedupe = Q24; | |
iL1._shouldDropEvent = xL1; | |
iL1.dedupeIntegration = kL1 | |
}); | |
var eL1 = Y((oL1) => { | |
Object.defineProperty(oL1, "__esModule", { | |
value: !0 | |
}); | |
var rL1 = V4(), | |
oX = V0(), | |
E24 = XE(), | |
aL1 = "ExtraErrorData", | |
M24 = (I = {}) => { | |
let d = I.depth || 3, | |
G = I.captureErrorCause || !1; | |
return { | |
name: aL1, | |
setupOnce() {}, | |
processEvent(Z, C) { | |
return L24(Z, C, d, G) | |
} | |
} | |
}, | |
sL1 = rL1.defineIntegration(M24), | |
S24 = rL1.convertIntegrationFnToClass(aL1, sL1); | |
function L24(I, d = {}, G, Z) { | |
if (!d.originalException || !oX.isError(d.originalException)) return I; | |
let C = d.originalException.name || d.originalException.constructor.name, | |
W = y24(d.originalException, Z); | |
if (W) { | |
let w = { | |
...I.contexts | |
}, | |
B = oX.normalize(W, G); | |
if (oX.isPlainObject(B)) oX.addNonEnumerableProperty(B, "__sentry_skip_normalization__", !0), w[C] = B; | |
return { | |
...I, | |
contexts: w | |
} | |
} | |
return I | |
} | |
function y24(I, d) { | |
try { | |
let G = ["name", "message", "stack", "line", "column", "fileName", "lineNumber", "columnNumber", "toJSON"], | |
Z = {}; | |
for (let C of Object.keys(I)) { | |
if (G.indexOf(C) !== -1) continue; | |
let W = I[C]; | |
Z[C] = oX.isError(W) ? W.toString() : W | |
} | |
if (d && I.cause !== void 0) Z.cause = oX.isError(I.cause) ? I.cause.toString() : I.cause; | |
if (typeof I.toJSON === "function") { | |
let C = I.toJSON(); | |
for (let W of Object.keys(C)) { | |
let w = C[W]; | |
Z[W] = oX.isError(w) ? w.toString() : w | |
} | |
} | |
return Z | |
} catch (G) { | |
E24.DEBUG_BUILD && oX.logger.error("Unable to extract extra data from the Error object:", G) | |
} | |
return null | |
} | |
oL1.ExtraErrorData = S24; | |
oL1.extraErrorDataIntegration = sL1 | |
}); | |
var Iy1 = Y((tL1, m01) => { | |
/*! | |
localForage -- Offline Storage, Improved | |
Version 1.10.0 | |
https://localforage.github.io/localForage | |
(c) 2013-2017 Mozilla, Apache License 2.0 | |
*/ | |
(function(I) { | |
if (typeof tL1 === "object" && typeof m01 !== "undefined") m01.exports = I(); | |
else if (typeof define === "function" && define.amd) define([], I); | |
else { | |
var d; | |
if (typeof window !== "undefined") d = window; | |
else if (typeof global !== "undefined") d = global; | |
else if (typeof self !== "undefined") d = self; | |
else d = this; | |
d.localforage = I() | |
} | |
})(function() { | |
var I, d, G; | |
return function Z(C, W, w) { | |
function B(X, _) { | |
if (!W[X]) { | |
if (!C[X]) { | |
var F = B1; | |
if (!_ && F) return F(X, !0); | |
if (A) return A(X, !0); | |
var g = new Error("Cannot find module '" + X + "'"); | |
throw g.code = "MODULE_NOT_FOUND", g | |
} | |
var J = W[X] = { | |
exports: {} | |
}; | |
C[X][0].call(J.exports, function(K) { | |
var Q = C[X][1][K]; | |
return B(Q ? Q : K) | |
}, J, J.exports, Z, C, W, w) | |
} | |
return W[X].exports | |
} | |
var A = B1; | |
for (var V = 0; V < w.length; V++) B(w[V]); | |
return B | |
}({ | |
1: [function(Z, C, W) { | |
(function(w) { | |
var B = w.MutationObserver || w.WebKitMutationObserver, | |
A; | |
if (B) { | |
var V = 0, | |
X = new B(K), | |
_ = w.document.createTextNode(""); | |
X.observe(_, { | |
characterData: !0 | |
}), A = function() { | |
_.data = V = ++V % 2 | |
} | |
} else if (!w.setImmediate && typeof w.MessageChannel !== "undefined") { | |
var F = new w.MessageChannel; | |
F.port1.onmessage = K, A = function() { | |
F.port2.postMessage(0) | |
} | |
} else if ("document" in w && "onreadystatechange" in w.document.createElement("script")) A = function() { | |
var E = w.document.createElement("script"); | |
E.onreadystatechange = function() { | |
K(), E.onreadystatechange = null, E.parentNode.removeChild(E), E = null | |
}, w.document.documentElement.appendChild(E) | |
}; | |
else A = function() { | |
setTimeout(K, 0) | |
}; | |
var g, J = []; | |
function K() { | |
g = !0; | |
var E, S, P = J.length; | |
while (P) { | |
S = J, J = [], E = -1; | |
while (++E < P) S[E](); | |
P = J.length | |
} | |
g = !1 | |
} | |
C.exports = Q; | |
function Q(E) { | |
if (J.push(E) === 1 && !g) A() | |
} | |
}).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
}, {}], | |
2: [function(Z, C, W) { | |
var w = Z(1); | |
function B() {} | |
var A = {}, | |
V = ["REJECTED"], | |
X = ["FULFILLED"], | |
_ = ["PENDING"]; | |
C.exports = F; | |
function F(O) { | |
if (typeof O !== "function") throw new TypeError("resolver must be a function"); | |
if (this.state = _, this.queue = [], this.outcome = void 0, O !== B) Q(this, O) | |
} | |
F.prototype.catch = function(O) { | |
return this.then(null, O) | |
}, F.prototype.then = function(O, T) { | |
if (typeof O !== "function" && this.state === X || typeof T !== "function" && this.state === V) return this; | |
var V1 = new this.constructor(B); | |
if (this.state !== _) { | |
var c = this.state === X ? O : T; | |
J(V1, c, this.outcome) | |
} else this.queue.push(new g(V1, O, T)); | |
return V1 | |
}; | |
function g(O, T, V1) { | |
if (this.promise = O, typeof T === "function") this.onFulfilled = T, this.callFulfilled = this.otherCallFulfilled; | |
if (typeof V1 === "function") this.onRejected = V1, this.callRejected = this.otherCallRejected | |
} | |
g.prototype.callFulfilled = function(O) { | |
A.resolve(this.promise, O) | |
}, g.prototype.otherCallFulfilled = function(O) { | |
J(this.promise, this.onFulfilled, O) | |
}, g.prototype.callRejected = function(O) { | |
A.reject(this.promise, O) | |
}, g.prototype.otherCallRejected = function(O) { | |
J(this.promise, this.onRejected, O) | |
}; | |
function J(O, T, V1) { | |
w(function() { | |
var c; | |
try { | |
c = T(V1) | |
} catch (c1) { | |
return A.reject(O, c1) | |
} | |
if (c === O) A.reject(O, new TypeError("Cannot resolve promise with itself")); | |
else A.resolve(O, c) | |
}) | |
} | |
A.resolve = function(O, T) { | |
var V1 = E(K, T); | |
if (V1.status === "error") return A.reject(O, V1.value); | |
var c = V1.value; | |
if (c) Q(O, c); | |
else { | |
O.state = X, O.outcome = T; | |
var c1 = -1, | |
o1 = O.queue.length; | |
while (++c1 < o1) O.queue[c1].callFulfilled(T) | |
} | |
return O | |
}, A.reject = function(O, T) { | |
O.state = V, O.outcome = T; | |
var V1 = -1, | |
c = O.queue.length; | |
while (++V1 < c) O.queue[V1].callRejected(T); | |
return O | |
}; | |
function K(O) { | |
var T = O && O.then; | |
if (O && (typeof O === "object" || typeof O === "function") && typeof T === "function") return function V1() { | |
T.apply(O, arguments) | |
} | |
} | |
function Q(O, T) { | |
var V1 = !1; | |
function c(f1) { | |
if (V1) return; | |
V1 = !0, A.reject(O, f1) | |
} | |
function c1(f1) { | |
if (V1) return; | |
V1 = !0, A.resolve(O, f1) | |
} | |
function o1() { | |
T(c1, c) | |
} | |
var a1 = E(o1); | |
if (a1.status === "error") c(a1.value) | |
} | |
function E(O, T) { | |
var V1 = {}; | |
try { | |
V1.value = O(T), V1.status = "success" | |
} catch (c) { | |
V1.status = "error", V1.value = c | |
} | |
return V1 | |
} | |
F.resolve = S; | |
function S(O) { | |
if (O instanceof this) return O; | |
return A.resolve(new this(B), O) | |
} | |
F.reject = P; | |
function P(O) { | |
var T = new this(B); | |
return A.reject(T, O) | |
} | |
F.all = $; | |
function $(O) { | |
var T = this; | |
if (Object.prototype.toString.call(O) !== "[object Array]") return this.reject(new TypeError("must be an array")); | |
var V1 = O.length, | |
c = !1; | |
if (!V1) return this.resolve([]); | |
var c1 = new Array(V1), | |
o1 = 0, | |
a1 = -1, | |
f1 = new this(B); | |
while (++a1 < V1) r(O[a1], a1); | |
return f1; | |
function r(A1, m1) { | |
T.resolve(A1).then(T1, function(e1) { | |
if (!c) c = !0, A.reject(f1, e1) | |
}); | |
function T1(e1) { | |
if (c1[m1] = e1, ++o1 === V1 && !c) c = !0, A.resolve(f1, c1) | |
} | |
} | |
} | |
F.race = h; | |
function h(O) { | |
var T = this; | |
if (Object.prototype.toString.call(O) !== "[object Array]") return this.reject(new TypeError("must be an array")); | |
var V1 = O.length, | |
c = !1; | |
if (!V1) return this.resolve([]); | |
var c1 = -1, | |
o1 = new this(B); | |
while (++c1 < V1) a1(O[c1]); | |
return o1; | |
function a1(f1) { | |
T.resolve(f1).then(function(r) { | |
if (!c) c = !0, A.resolve(o1, r) | |
}, function(r) { | |
if (!c) c = !0, A.reject(o1, r) | |
}) | |
} | |
} | |
}, { | |
"1": 1 | |
}], | |
3: [function(Z, C, W) { | |
(function(w) { | |
if (typeof w.Promise !== "function") w.Promise = Z(2) | |
}).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
}, { | |
"2": 2 | |
}], | |
4: [function(Z, C, W) { | |
var w = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(l) { | |
return typeof l | |
} : function(l) { | |
return l && typeof Symbol === "function" && l.constructor === Symbol && l !== Symbol.prototype ? "symbol" : typeof l | |
}; | |
function B(l, _1) { | |
if (!(l instanceof _1)) throw new TypeError("Cannot call a class as a function") | |
} | |
function A() { | |
try { | |
if (typeof indexedDB !== "undefined") return indexedDB; | |
if (typeof webkitIndexedDB !== "undefined") return webkitIndexedDB; | |
if (typeof mozIndexedDB !== "undefined") return mozIndexedDB; | |
if (typeof OIndexedDB !== "undefined") return OIndexedDB; | |
if (typeof msIndexedDB !== "undefined") return msIndexedDB | |
} catch (l) { | |
return | |
} | |
} | |
var V = A(); | |
function X() { | |
try { | |
if (!V || !V.open) return !1; | |
var l = typeof openDatabase !== "undefined" && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform), | |
_1 = typeof fetch === "function" && fetch.toString().indexOf("[native code") !== -1; | |
return (!l || _1) && typeof indexedDB !== "undefined" && typeof IDBKeyRange !== "undefined" | |
} catch (I1) { | |
return !1 | |
} | |
} | |
function _(l, _1) { | |
l = l || [], _1 = _1 || {}; | |
try { | |
return new Blob(l, _1) | |
} catch (E1) { | |
if (E1.name !== "TypeError") throw E1; | |
var I1 = typeof BlobBuilder !== "undefined" ? BlobBuilder : typeof MSBlobBuilder !== "undefined" ? MSBlobBuilder : typeof MozBlobBuilder !== "undefined" ? MozBlobBuilder : WebKitBlobBuilder, | |
v1 = new I1; | |
for (var y1 = 0; y1 < l.length; y1 += 1) v1.append(l[y1]); | |
return v1.getBlob(_1.type) | |
} | |
} | |
if (typeof Promise === "undefined") Z(3); | |
var F = Promise; | |
function g(l, _1) { | |
if (_1) l.then(function(I1) { | |
_1(null, I1) | |
}, function(I1) { | |
_1(I1) | |
}) | |
} | |
function J(l, _1, I1) { | |
if (typeof _1 === "function") l.then(_1); | |
if (typeof I1 === "function") l.catch(I1) | |
} | |
function K(l) { | |
if (typeof l !== "string") console.warn(l + " used as a key, but it is not a string."), l = String(l); | |
return l | |
} | |
function Q() { | |
if (arguments.length && typeof arguments[arguments.length - 1] === "function") return arguments[arguments.length - 1] | |
} | |
var E = "local-forage-detect-blob-support", | |
S = void 0, | |
P = {}, | |
$ = Object.prototype.toString, | |
h = "readonly", | |
O = "readwrite"; | |
function T(l) { | |
var _1 = l.length, | |
I1 = new ArrayBuffer(_1), | |
v1 = new Uint8Array(I1); | |
for (var y1 = 0; y1 < _1; y1++) v1[y1] = l.charCodeAt(y1); | |
return I1 | |
} | |
function V1(l) { | |
return new F(function(_1) { | |
var I1 = l.transaction(E, O), | |
v1 = _([""]); | |
I1.objectStore(E).put(v1, "key"), I1.onabort = function(y1) { | |
y1.preventDefault(), y1.stopPropagation(), _1(!1) | |
}, I1.oncomplete = function() { | |
var y1 = navigator.userAgent.match(/Chrome\/(\d+)/), | |
E1 = navigator.userAgent.match(/Edge\//); | |
_1(E1 || !y1 || parseInt(y1[1], 10) >= 43) | |
} | |
}).catch(function() { | |
return !1 | |
}) | |
} | |
function c(l) { | |
if (typeof S === "boolean") return F.resolve(S); | |
return V1(l).then(function(_1) { | |
return S = _1, S | |
}) | |
} | |
function c1(l) { | |
var _1 = P[l.name], | |
I1 = {}; | |
if (I1.promise = new F(function(v1, y1) { | |
I1.resolve = v1, I1.reject = y1 | |
}), _1.deferredOperations.push(I1), !_1.dbReady) _1.dbReady = I1.promise; | |
else _1.dbReady = _1.dbReady.then(function() { | |
return I1.promise | |
}) | |
} | |
function o1(l) { | |
var _1 = P[l.name], | |
I1 = _1.deferredOperations.pop(); | |
if (I1) return I1.resolve(), I1.promise | |
} | |
function a1(l, _1) { | |
var I1 = P[l.name], | |
v1 = I1.deferredOperations.pop(); | |
if (v1) return v1.reject(_1), v1.promise | |
} | |
function f1(l, _1) { | |
return new F(function(I1, v1) { | |
if (P[l.name] = P[l.name] || e(), l.db) | |
if (_1) c1(l), l.db.close(); | |
else return I1(l.db); | |
var y1 = [l.name]; | |
if (_1) y1.push(l.version); | |
var E1 = V.open.apply(V, y1); | |
if (_1) E1.onupgradeneeded = function(Z0) { | |
var Q0 = E1.result; | |
try { | |
if (Q0.createObjectStore(l.storeName), Z0.oldVersion <= 1) Q0.createObjectStore(E) | |
} catch (N0) { | |
if (N0.name === "ConstraintError") console.warn('The database "' + l.name + '" has been upgraded from version ' + Z0.oldVersion + " to version " + Z0.newVersion + ', but the storage "' + l.storeName + '" already exists.'); | |
else throw N0 | |
} | |
}; | |
E1.onerror = function(Z0) { | |
Z0.preventDefault(), v1(E1.error) | |
}, E1.onsuccess = function() { | |
var Z0 = E1.result; | |
Z0.onversionchange = function(Q0) { | |
Q0.target.close() | |
}, I1(Z0), o1(l) | |
} | |
}) | |
} | |
function r(l) { | |
return f1(l, !1) | |
} | |
function A1(l) { | |
return f1(l, !0) | |
} | |
function m1(l, _1) { | |
if (!l.db) return !0; | |
var I1 = !l.db.objectStoreNames.contains(l.storeName), | |
v1 = l.version < l.db.version, | |
y1 = l.version > l.db.version; | |
if (v1) { | |
if (l.version !== _1) console.warn('The database "' + l.name + `" can't be downgraded from version ` + l.db.version + " to version " + l.version + "."); | |
l.version = l.db.version | |
} | |
if (y1 || I1) { | |
if (I1) { | |
var E1 = l.db.version + 1; | |
if (E1 > l.version) l.version = E1 | |
} | |
return !0 | |
} | |
return !1 | |
} | |
function T1(l) { | |
return new F(function(_1, I1) { | |
var v1 = new FileReader; | |
v1.onerror = I1, v1.onloadend = function(y1) { | |
var E1 = btoa(y1.target.result || ""); | |
_1({ | |
__local_forage_encoded_blob: !0, | |
data: E1, | |
type: l.type | |
}) | |
}, v1.readAsBinaryString(l) | |
}) | |
} | |
function e1(l) { | |
var _1 = T(atob(l.data)); | |
return _([_1], { | |
type: l.type | |
}) | |
} | |
function F0(l) { | |
return l && l.__local_forage_encoded_blob | |
} | |
function P0(l) { | |
var _1 = this, | |
I1 = _1._initReady().then(function() { | |
var v1 = P[_1._dbInfo.name]; | |
if (v1 && v1.dbReady) return v1.dbReady | |
}); | |
return J(I1, l, l), I1 | |
} | |
function B0(l) { | |
c1(l); | |
var _1 = P[l.name], | |
I1 = _1.forages; | |
for (var v1 = 0; v1 < I1.length; v1++) { | |
var y1 = I1[v1]; | |
if (y1._dbInfo.db) y1._dbInfo.db.close(), y1._dbInfo.db = null | |
} | |
return l.db = null, r(l).then(function(E1) { | |
if (l.db = E1, m1(l)) return A1(l); | |
return E1 | |
}).then(function(E1) { | |
l.db = _1.db = E1; | |
for (var Z0 = 0; Z0 < I1.length; Z0++) I1[Z0]._dbInfo.db = E1 | |
}).catch(function(E1) { | |
throw a1(l, E1), E1 | |
}) | |
} | |
function a0(l, _1, I1, v1) { | |
if (v1 === void 0) v1 = 1; | |
try { | |
var y1 = l.db.transaction(l.storeName, _1); | |
I1(null, y1) | |
} catch (E1) { | |
if (v1 > 0 && (!l.db || E1.name === "InvalidStateError" || E1.name === "NotFoundError")) return F.resolve().then(function() { | |
if (!l.db || E1.name === "NotFoundError" && !l.db.objectStoreNames.contains(l.storeName) && l.version <= l.db.version) { | |
if (l.db) l.version = l.db.version + 1; | |
return A1(l) | |
} | |
}).then(function() { | |
return B0(l).then(function() { | |
a0(l, _1, I1, v1 - 1) | |
}) | |
}).catch(I1); | |
I1(E1) | |
} | |
} | |
function e() { | |
return { | |
forages: [], | |
db: null, | |
dbReady: null, | |
deferredOperations: [] | |
} | |
} | |
function G0(l) { | |
var _1 = this, | |
I1 = { | |
db: null | |
}; | |
if (l) | |
for (var v1 in l) I1[v1] = l[v1]; | |
var y1 = P[I1.name]; | |
if (!y1) y1 = e(), P[I1.name] = y1; | |
if (y1.forages.push(_1), !_1._initReady) _1._initReady = _1.ready, _1.ready = P0; | |
var E1 = []; | |
function Z0() { | |
return F.resolve() | |
} | |
for (var Q0 = 0; Q0 < y1.forages.length; Q0++) { | |
var N0 = y1.forages[Q0]; | |
if (N0 !== _1) E1.push(N0._initReady().catch(Z0)) | |
} | |
var $0 = y1.forages.slice(0); | |
return F.all(E1).then(function() { | |
return I1.db = y1.db, r(I1) | |
}).then(function(h0) { | |
if (I1.db = h0, m1(I1, _1._defaultConfig.version)) return A1(I1); | |
return h0 | |
}).then(function(h0) { | |
I1.db = y1.db = h0, _1._dbInfo = I1; | |
for (var g2 = 0; g2 < $0.length; g2++) { | |
var F4 = $0[g2]; | |
if (F4 !== _1) F4._dbInfo.db = I1.db, F4._dbInfo.version = I1.version | |
} | |
}) | |
} | |
function H1(l, _1) { | |
var I1 = this; | |
l = K(l); | |
var v1 = new F(function(y1, E1) { | |
I1.ready().then(function() { | |
a0(I1._dbInfo, h, function(Z0, Q0) { | |
if (Z0) return E1(Z0); | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
$0 = N0.get(l); | |
$0.onsuccess = function() { | |
var h0 = $0.result; | |
if (h0 === void 0) h0 = null; | |
if (F0(h0)) h0 = e1(h0); | |
y1(h0) | |
}, $0.onerror = function() { | |
E1($0.error) | |
} | |
} catch (h0) { | |
E1(h0) | |
} | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function j1(l, _1) { | |
var I1 = this, | |
v1 = new F(function(y1, E1) { | |
I1.ready().then(function() { | |
a0(I1._dbInfo, h, function(Z0, Q0) { | |
if (Z0) return E1(Z0); | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
$0 = N0.openCursor(), | |
h0 = 1; | |
$0.onsuccess = function() { | |
var g2 = $0.result; | |
if (g2) { | |
var F4 = g2.value; | |
if (F0(F4)) F4 = e1(F4); | |
var x4 = l(F4, g2.key, h0++); | |
if (x4 !== void 0) y1(x4); | |
else g2.continue() | |
} else y1() | |
}, $0.onerror = function() { | |
E1($0.error) | |
} | |
} catch (g2) { | |
E1(g2) | |
} | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function i1(l, _1, I1) { | |
var v1 = this; | |
l = K(l); | |
var y1 = new F(function(E1, Z0) { | |
var Q0; | |
v1.ready().then(function() { | |
if (Q0 = v1._dbInfo, $.call(_1) === "[object Blob]") return c(Q0.db).then(function(N0) { | |
if (N0) return _1; | |
return T1(_1) | |
}); | |
return _1 | |
}).then(function(N0) { | |
a0(v1._dbInfo, O, function($0, h0) { | |
if ($0) return Z0($0); | |
try { | |
var g2 = h0.objectStore(v1._dbInfo.storeName); | |
if (N0 === null) N0 = void 0; | |
var F4 = g2.put(N0, l); | |
h0.oncomplete = function() { | |
if (N0 === void 0) N0 = null; | |
E1(N0) | |
}, h0.onabort = h0.onerror = function() { | |
var x4 = F4.error ? F4.error : F4.transaction.error; | |
Z0(x4) | |
} | |
} catch (x4) { | |
Z0(x4) | |
} | |
}) | |
}).catch(Z0) | |
}); | |
return g(y1, I1), y1 | |
} | |
function E0(l, _1) { | |
var I1 = this; | |
l = K(l); | |
var v1 = new F(function(y1, E1) { | |
I1.ready().then(function() { | |
a0(I1._dbInfo, O, function(Z0, Q0) { | |
if (Z0) return E1(Z0); | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
$0 = N0.delete(l); | |
Q0.oncomplete = function() { | |
y1() | |
}, Q0.onerror = function() { | |
E1($0.error) | |
}, Q0.onabort = function() { | |
var h0 = $0.error ? $0.error : $0.transaction.error; | |
E1(h0) | |
} | |
} catch (h0) { | |
E1(h0) | |
} | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function k(l) { | |
var _1 = this, | |
I1 = new F(function(v1, y1) { | |
_1.ready().then(function() { | |
a0(_1._dbInfo, O, function(E1, Z0) { | |
if (E1) return y1(E1); | |
try { | |
var Q0 = Z0.objectStore(_1._dbInfo.storeName), | |
N0 = Q0.clear(); | |
Z0.oncomplete = function() { | |
v1() | |
}, Z0.onabort = Z0.onerror = function() { | |
var $0 = N0.error ? N0.error : N0.transaction.error; | |
y1($0) | |
} | |
} catch ($0) { | |
y1($0) | |
} | |
}) | |
}).catch(y1) | |
}); | |
return g(I1, l), I1 | |
} | |
function a(l) { | |
var _1 = this, | |
I1 = new F(function(v1, y1) { | |
_1.ready().then(function() { | |
a0(_1._dbInfo, h, function(E1, Z0) { | |
if (E1) return y1(E1); | |
try { | |
var Q0 = Z0.objectStore(_1._dbInfo.storeName), | |
N0 = Q0.count(); | |
N0.onsuccess = function() { | |
v1(N0.result) | |
}, N0.onerror = function() { | |
y1(N0.error) | |
} | |
} catch ($0) { | |
y1($0) | |
} | |
}) | |
}).catch(y1) | |
}); | |
return g(I1, l), I1 | |
} | |
function Z1(l, _1) { | |
var I1 = this, | |
v1 = new F(function(y1, E1) { | |
if (l < 0) { | |
y1(null); | |
return | |
} | |
I1.ready().then(function() { | |
a0(I1._dbInfo, h, function(Z0, Q0) { | |
if (Z0) return E1(Z0); | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
$0 = !1, | |
h0 = N0.openKeyCursor(); | |
h0.onsuccess = function() { | |
var g2 = h0.result; | |
if (!g2) { | |
y1(null); | |
return | |
} | |
if (l === 0) y1(g2.key); | |
else if (!$0) $0 = !0, g2.advance(l); | |
else y1(g2.key) | |
}, h0.onerror = function() { | |
E1(h0.error) | |
} | |
} catch (g2) { | |
E1(g2) | |
} | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function Q1(l) { | |
var _1 = this, | |
I1 = new F(function(v1, y1) { | |
_1.ready().then(function() { | |
a0(_1._dbInfo, h, function(E1, Z0) { | |
if (E1) return y1(E1); | |
try { | |
var Q0 = Z0.objectStore(_1._dbInfo.storeName), | |
N0 = Q0.openKeyCursor(), | |
$0 = []; | |
N0.onsuccess = function() { | |
var h0 = N0.result; | |
if (!h0) { | |
v1($0); | |
return | |
} | |
$0.push(h0.key), h0.continue() | |
}, N0.onerror = function() { | |
y1(N0.error) | |
} | |
} catch (h0) { | |
y1(h0) | |
} | |
}) | |
}).catch(y1) | |
}); | |
return g(I1, l), I1 | |
} | |
function N1(l, _1) { | |
_1 = Q.apply(this, arguments); | |
var I1 = this.config(); | |
if (l = typeof l !== "function" && l || {}, !l.name) l.name = l.name || I1.name, l.storeName = l.storeName || I1.storeName; | |
var v1 = this, | |
y1; | |
if (!l.name) y1 = F.reject("Invalid arguments"); | |
else { | |
var E1 = l.name === I1.name && v1._dbInfo.db, | |
Z0 = E1 ? F.resolve(v1._dbInfo.db) : r(l).then(function(Q0) { | |
var N0 = P[l.name], | |
$0 = N0.forages; | |
N0.db = Q0; | |
for (var h0 = 0; h0 < $0.length; h0++) $0[h0]._dbInfo.db = Q0; | |
return Q0 | |
}); | |
if (!l.storeName) y1 = Z0.then(function(Q0) { | |
c1(l); | |
var N0 = P[l.name], | |
$0 = N0.forages; | |
Q0.close(); | |
for (var h0 = 0; h0 < $0.length; h0++) { | |
var g2 = $0[h0]; | |
g2._dbInfo.db = null | |
} | |
var F4 = new F(function(x4, c4) { | |
var W9 = V.deleteDatabase(l.name); | |
W9.onerror = function() { | |
var u9 = W9.result; | |
if (u9) u9.close(); | |
c4(W9.error) | |
}, W9.onblocked = function() { | |
console.warn('dropInstance blocked for database "' + l.name + '" until all open connections are closed') | |
}, W9.onsuccess = function() { | |
var u9 = W9.result; | |
if (u9) u9.close(); | |
x4(u9) | |
} | |
}); | |
return F4.then(function(x4) { | |
N0.db = x4; | |
for (var c4 = 0; c4 < $0.length; c4++) { | |
var W9 = $0[c4]; | |
o1(W9._dbInfo) | |
} | |
}).catch(function(x4) { | |
throw (a1(l, x4) || F.resolve()).catch(function() {}), x4 | |
}) | |
}); | |
else y1 = Z0.then(function(Q0) { | |
if (!Q0.objectStoreNames.contains(l.storeName)) return; | |
var N0 = Q0.version + 1; | |
c1(l); | |
var $0 = P[l.name], | |
h0 = $0.forages; | |
Q0.close(); | |
for (var g2 = 0; g2 < h0.length; g2++) { | |
var F4 = h0[g2]; | |
F4._dbInfo.db = null, F4._dbInfo.version = N0 | |
} | |
var x4 = new F(function(c4, W9) { | |
var u9 = V.open(l.name, N0); | |
u9.onerror = function(e6) { | |
var vd = u9.result; | |
vd.close(), W9(e6) | |
}, u9.onupgradeneeded = function() { | |
var e6 = u9.result; | |
e6.deleteObjectStore(l.storeName) | |
}, u9.onsuccess = function() { | |
var e6 = u9.result; | |
e6.close(), c4(e6) | |
} | |
}); | |
return x4.then(function(c4) { | |
$0.db = c4; | |
for (var W9 = 0; W9 < h0.length; W9++) { | |
var u9 = h0[W9]; | |
u9._dbInfo.db = c4, o1(u9._dbInfo) | |
} | |
}).catch(function(c4) { | |
throw (a1(l, c4) || F.resolve()).catch(function() {}), c4 | |
}) | |
}) | |
} | |
return g(y1, _1), y1 | |
} | |
var F1 = { | |
_driver: "asyncStorage", | |
_initStorage: G0, | |
_support: X(), | |
iterate: j1, | |
getItem: H1, | |
setItem: i1, | |
removeItem: E0, | |
clear: k, | |
length: a, | |
key: Z1, | |
keys: Q1, | |
dropInstance: N1 | |
}; | |
function O1() { | |
return typeof openDatabase === "function" | |
} | |
var K1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", | |
R1 = "~~local_forage_type~", | |
h1 = /^~~local_forage_type~([^~]+)~/, | |
j = "__lfsc__:", | |
W1 = j.length, | |
U1 = "arbf", | |
L1 = "blob", | |
D0 = "si08", | |
O0 = "ui08", | |
x0 = "uic8", | |
i0 = "si16", | |
s0 = "si32", | |
P2 = "ur16", | |
r5 = "ui32", | |
n0 = "fl32", | |
B2 = "fl64", | |
A2 = W1 + U1.length, | |
B4 = Object.prototype.toString; | |
function A4(l) { | |
var _1 = l.length * 0.75, | |
I1 = l.length, | |
v1, y1 = 0, | |
E1, Z0, Q0, N0; | |
if (l[l.length - 1] === "=") { | |
if (_1--, l[l.length - 2] === "=") _1-- | |
} | |
var $0 = new ArrayBuffer(_1), | |
h0 = new Uint8Array($0); | |
for (v1 = 0; v1 < I1; v1 += 4) E1 = K1.indexOf(l[v1]), Z0 = K1.indexOf(l[v1 + 1]), Q0 = K1.indexOf(l[v1 + 2]), N0 = K1.indexOf(l[v1 + 3]), h0[y1++] = E1 << 2 | Z0 >> 4, h0[y1++] = (Z0 & 15) << 4 | Q0 >> 2, h0[y1++] = (Q0 & 3) << 6 | N0 & 63; | |
return $0 | |
} | |
function _5(l) { | |
var _1 = new Uint8Array(l), | |
I1 = "", | |
v1; | |
for (v1 = 0; v1 < _1.length; v1 += 3) I1 += K1[_1[v1] >> 2], I1 += K1[(_1[v1] & 3) << 4 | _1[v1 + 1] >> 4], I1 += K1[(_1[v1 + 1] & 15) << 2 | _1[v1 + 2] >> 6], I1 += K1[_1[v1 + 2] & 63]; | |
if (_1.length % 3 === 2) I1 = I1.substring(0, I1.length - 1) + "="; | |
else if (_1.length % 3 === 1) I1 = I1.substring(0, I1.length - 2) + "=="; | |
return I1 | |
} | |
function D5(l, _1) { | |
var I1 = ""; | |
if (l) I1 = B4.call(l); | |
if (l && (I1 === "[object ArrayBuffer]" || l.buffer && B4.call(l.buffer) === "[object ArrayBuffer]")) { | |
var v1, y1 = j; | |
if (l instanceof ArrayBuffer) v1 = l, y1 += U1; | |
else if (v1 = l.buffer, I1 === "[object Int8Array]") y1 += D0; | |
else if (I1 === "[object Uint8Array]") y1 += O0; | |
else if (I1 === "[object Uint8ClampedArray]") y1 += x0; | |
else if (I1 === "[object Int16Array]") y1 += i0; | |
else if (I1 === "[object Uint16Array]") y1 += P2; | |
else if (I1 === "[object Int32Array]") y1 += s0; | |
else if (I1 === "[object Uint32Array]") y1 += r5; | |
else if (I1 === "[object Float32Array]") y1 += n0; | |
else if (I1 === "[object Float64Array]") y1 += B2; | |
else _1(new Error("Failed to get type for BinaryArray")); | |
_1(y1 + _5(v1)) | |
} else if (I1 === "[object Blob]") { | |
var E1 = new FileReader; | |
E1.onload = function() { | |
var Z0 = R1 + l.type + "~" + _5(this.result); | |
_1(j + L1 + Z0) | |
}, E1.readAsArrayBuffer(l) | |
} else try { | |
_1(JSON.stringify(l)) | |
} catch (Z0) { | |
console.error("Couldn't convert value into a JSON string: ", l), _1(null, Z0) | |
} | |
} | |
function tZ(l) { | |
if (l.substring(0, W1) !== j) return JSON.parse(l); | |
var _1 = l.substring(A2), | |
I1 = l.substring(W1, A2), | |
v1; | |
if (I1 === L1 && h1.test(_1)) { | |
var y1 = _1.match(h1); | |
v1 = y1[1], _1 = _1.substring(y1[0].length) | |
} | |
var E1 = A4(_1); | |
switch (I1) { | |
case U1: | |
return E1; | |
case L1: | |
return _([E1], { | |
type: v1 | |
}); | |
case D0: | |
return new Int8Array(E1); | |
case O0: | |
return new Uint8Array(E1); | |
case x0: | |
return new Uint8ClampedArray(E1); | |
case i0: | |
return new Int16Array(E1); | |
case P2: | |
return new Uint16Array(E1); | |
case s0: | |
return new Int32Array(E1); | |
case r5: | |
return new Uint32Array(E1); | |
case n0: | |
return new Float32Array(E1); | |
case B2: | |
return new Float64Array(E1); | |
default: | |
throw new Error("Unkown type: " + I1) | |
} | |
} | |
var T6 = { | |
serialize: D5, | |
deserialize: tZ, | |
stringToBuffer: A4, | |
bufferToString: _5 | |
}; | |
function pB(l, _1, I1, v1) { | |
l.executeSql("CREATE TABLE IF NOT EXISTS " + _1.storeName + " (id INTEGER PRIMARY KEY, key unique, value)", [], I1, v1) | |
} | |
function iB(l) { | |
var _1 = this, | |
I1 = { | |
db: null | |
}; | |
if (l) | |
for (var v1 in l) I1[v1] = typeof l[v1] !== "string" ? l[v1].toString() : l[v1]; | |
var y1 = new F(function(E1, Z0) { | |
try { | |
I1.db = openDatabase(I1.name, String(I1.version), I1.description, I1.size) | |
} catch (Q0) { | |
return Z0(Q0) | |
} | |
I1.db.transaction(function(Q0) { | |
pB(Q0, I1, function() { | |
_1._dbInfo = I1, E1() | |
}, function(N0, $0) { | |
Z0($0) | |
}) | |
}, Z0) | |
}); | |
return I1.serializer = T6, y1 | |
} | |
function X3(l, _1, I1, v1, y1, E1) { | |
l.executeSql(I1, v1, y1, function(Z0, Q0) { | |
if (Q0.code === Q0.SYNTAX_ERR) Z0.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?", [_1.storeName], function(N0, $0) { | |
if (!$0.rows.length) pB(N0, _1, function() { | |
N0.executeSql(I1, v1, y1, E1) | |
}, E1); | |
else E1(N0, Q0) | |
}, E1); | |
else E1(Z0, Q0) | |
}, E1) | |
} | |
function Nd(l, _1) { | |
var I1 = this; | |
l = K(l); | |
var v1 = new F(function(y1, E1) { | |
I1.ready().then(function() { | |
var Z0 = I1._dbInfo; | |
Z0.db.transaction(function(Q0) { | |
X3(Q0, Z0, "SELECT * FROM " + Z0.storeName + " WHERE key = ? LIMIT 1", [l], function(N0, $0) { | |
var h0 = $0.rows.length ? $0.rows.item(0).value : null; | |
if (h0) h0 = Z0.serializer.deserialize(h0); | |
y1(h0) | |
}, function(N0, $0) { | |
E1($0) | |
}) | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function IC(l, _1) { | |
var I1 = this, | |
v1 = new F(function(y1, E1) { | |
I1.ready().then(function() { | |
var Z0 = I1._dbInfo; | |
Z0.db.transaction(function(Q0) { | |
X3(Q0, Z0, "SELECT * FROM " + Z0.storeName, [], function(N0, $0) { | |
var h0 = $0.rows, | |
g2 = h0.length; | |
for (var F4 = 0; F4 < g2; F4++) { | |
var x4 = h0.item(F4), | |
c4 = x4.value; | |
if (c4) c4 = Z0.serializer.deserialize(c4); | |
if (c4 = l(c4, x4.key, F4 + 1), c4 !== void 0) { | |
y1(c4); | |
return | |
} | |
} | |
y1() | |
}, function(N0, $0) { | |
E1($0) | |
}) | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function Y3(l, _1, I1, v1) { | |
var y1 = this; | |
l = K(l); | |
var E1 = new F(function(Z0, Q0) { | |
y1.ready().then(function() { | |
if (_1 === void 0) _1 = null; | |
var N0 = _1, | |
$0 = y1._dbInfo; | |
$0.serializer.serialize(_1, function(h0, g2) { | |
if (g2) Q0(g2); | |
else $0.db.transaction(function(F4) { | |
X3(F4, $0, "INSERT OR REPLACE INTO " + $0.storeName + " (key, value) VALUES (?, ?)", [l, h0], function() { | |
Z0(N0) | |
}, function(x4, c4) { | |
Q0(c4) | |
}) | |
}, function(F4) { | |
if (F4.code === F4.QUOTA_ERR) { | |
if (v1 > 0) { | |
Z0(Y3.apply(y1, [l, N0, I1, v1 - 1])); | |
return | |
} | |
Q0(F4) | |
} | |
}) | |
}) | |
}).catch(Q0) | |
}); | |
return g(E1, I1), E1 | |
} | |
function zd(l, _1, I1) { | |
return Y3.apply(this, [l, _1, I1, 1]) | |
} | |
function Qd(l, _1) { | |
var I1 = this; | |
l = K(l); | |
var v1 = new F(function(y1, E1) { | |
I1.ready().then(function() { | |
var Z0 = I1._dbInfo; | |
Z0.db.transaction(function(Q0) { | |
X3(Q0, Z0, "DELETE FROM " + Z0.storeName + " WHERE key = ?", [l], function() { | |
y1() | |
}, function(N0, $0) { | |
E1($0) | |
}) | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function QG(l) { | |
var _1 = this, | |
I1 = new F(function(v1, y1) { | |
_1.ready().then(function() { | |
var E1 = _1._dbInfo; | |
E1.db.transaction(function(Z0) { | |
X3(Z0, E1, "DELETE FROM " + E1.storeName, [], function() { | |
v1() | |
}, function(Q0, N0) { | |
y1(N0) | |
}) | |
}) | |
}).catch(y1) | |
}); | |
return g(I1, l), I1 | |
} | |
function fG(l) { | |
var _1 = this, | |
I1 = new F(function(v1, y1) { | |
_1.ready().then(function() { | |
var E1 = _1._dbInfo; | |
E1.db.transaction(function(Z0) { | |
X3(Z0, E1, "SELECT COUNT(key) as c FROM " + E1.storeName, [], function(Q0, N0) { | |
var $0 = N0.rows.item(0).c; | |
v1($0) | |
}, function(Q0, N0) { | |
y1(N0) | |
}) | |
}) | |
}).catch(y1) | |
}); | |
return g(I1, l), I1 | |
} | |
function X7(l, _1) { | |
var I1 = this, | |
v1 = new F(function(y1, E1) { | |
I1.ready().then(function() { | |
var Z0 = I1._dbInfo; | |
Z0.db.transaction(function(Q0) { | |
X3(Q0, Z0, "SELECT key FROM " + Z0.storeName + " WHERE id = ? LIMIT 1", [l + 1], function(N0, $0) { | |
var h0 = $0.rows.length ? $0.rows.item(0).key : null; | |
y1(h0) | |
}, function(N0, $0) { | |
E1($0) | |
}) | |
}) | |
}).catch(E1) | |
}); | |
return g(v1, _1), v1 | |
} | |
function vI(l) { | |
var _1 = this, | |
I1 = new F(function(v1, y1) { | |
_1.ready().then(function() { | |
var E1 = _1._dbInfo; | |
E1.db.transaction(function(Z0) { | |
X3(Z0, E1, "SELECT key FROM " + E1.storeName, [], function(Q0, N0) { | |
var $0 = []; | |
for (var h0 = 0; h0 < N0.rows.length; h0++) $0.push(N0.rows.item(h0).key); | |
v1($0) | |
}, function(Q0, N0) { | |
y1(N0) | |
}) | |
}) | |
}).catch(y1) | |
}); | |
return g(I1, l), I1 | |
} | |
function i7(l) { | |
return new F(function(_1, I1) { | |
l.transaction(function(v1) { | |
v1.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function(y1, E1) { | |
var Z0 = []; | |
for (var Q0 = 0; Q0 < E1.rows.length; Q0++) Z0.push(E1.rows.item(Q0).name); | |
_1({ | |
db: l, | |
storeNames: Z0 | |
}) | |
}, function(y1, E1) { | |
I1(E1) | |
}) | |
}, function(v1) { | |
I1(v1) | |
}) | |
}) | |
} | |
function fd(l, _1) { | |
_1 = Q.apply(this, arguments); | |
var I1 = this.config(); | |
if (l = typeof l !== "function" && l || {}, !l.name) l.name = l.name || I1.name, l.storeName = l.storeName || I1.storeName; | |
var v1 = this, | |
y1; | |
if (!l.name) y1 = F.reject("Invalid arguments"); | |
else y1 = new F(function(E1) { | |
var Z0; | |
if (l.name === I1.name) Z0 = v1._dbInfo.db; | |
else Z0 = openDatabase(l.name, "", "", 0); | |
if (!l.storeName) E1(i7(Z0)); | |
else E1({ | |
db: Z0, | |
storeNames: [l.storeName] | |
}) | |
}).then(function(E1) { | |
return new F(function(Z0, Q0) { | |
E1.db.transaction(function(N0) { | |
function $0(x4) { | |
return new F(function(c4, W9) { | |
N0.executeSql("DROP TABLE IF EXISTS " + x4, [], function() { | |
c4() | |
}, function(u9, e6) { | |
W9(e6) | |
}) | |
}) | |
} | |
var h0 = []; | |
for (var g2 = 0, F4 = E1.storeNames.length; g2 < F4; g2++) h0.push($0(E1.storeNames[g2])); | |
F.all(h0).then(function() { | |
Z0() | |
}).catch(function(x4) { | |
Q0(x4) | |
}) | |
}, function(N0) { | |
Q0(N0) | |
}) | |
}) | |
}); | |
return g(y1, _1), y1 | |
} | |
var Y7 = { | |
_driver: "webSQLStorage", | |
_initStorage: iB, | |
_support: O1(), | |
iterate: IC, | |
getItem: Nd, | |
setItem: zd, | |
removeItem: Qd, | |
clear: QG, | |
length: fG, | |
key: X7, | |
keys: vI, | |
dropInstance: fd | |
}; | |
function nB() { | |
try { | |
return typeof localStorage !== "undefined" && "setItem" in localStorage && !!localStorage.setItem | |
} catch (l) { | |
return !1 | |
} | |
} | |
function qd(l, _1) { | |
var I1 = l.name + "/"; | |
if (l.storeName !== _1.storeName) I1 += l.storeName + "/"; | |
return I1 | |
} | |
function rB() { | |
var l = "_localforage_support_test"; | |
try { | |
return localStorage.setItem(l, !0), localStorage.removeItem(l), !1 | |
} catch (_1) { | |
return !0 | |
} | |
} | |
function PW() { | |
return !rB() || localStorage.length > 0 | |
} | |
function $W(l) { | |
var _1 = this, | |
I1 = {}; | |
if (l) | |
for (var v1 in l) I1[v1] = l[v1]; | |
if (I1.keyPrefix = qd(l, _1._defaultConfig), !PW()) return F.reject(); | |
return _1._dbInfo = I1, I1.serializer = T6, F.resolve() | |
} | |
function v8(l) { | |
var _1 = this, | |
I1 = _1.ready().then(function() { | |
var v1 = _1._dbInfo.keyPrefix; | |
for (var y1 = localStorage.length - 1; y1 >= 0; y1--) { | |
var E1 = localStorage.key(y1); | |
if (E1.indexOf(v1) === 0) localStorage.removeItem(E1) | |
} | |
}); | |
return g(I1, l), I1 | |
} | |
function qG(l, _1) { | |
var I1 = this; | |
l = K(l); | |
var v1 = I1.ready().then(function() { | |
var y1 = I1._dbInfo, | |
E1 = localStorage.getItem(y1.keyPrefix + l); | |
if (E1) E1 = y1.serializer.deserialize(E1); | |
return E1 | |
}); | |
return g(v1, _1), v1 | |
} | |
function aB(l, _1) { | |
var I1 = this, | |
v1 = I1.ready().then(function() { | |
var y1 = I1._dbInfo, | |
E1 = y1.keyPrefix, | |
Z0 = E1.length, | |
Q0 = localStorage.length, | |
N0 = 1; | |
for (var $0 = 0; $0 < Q0; $0++) { | |
var h0 = localStorage.key($0); | |
if (h0.indexOf(E1) !== 0) continue; | |
var g2 = localStorage.getItem(h0); | |
if (g2) g2 = y1.serializer.deserialize(g2); | |
if (g2 = l(g2, h0.substring(Z0), N0++), g2 !== void 0) return g2 | |
} | |
}); | |
return g(v1, _1), v1 | |
} | |
function uW(l, _1) { | |
var I1 = this, | |
v1 = I1.ready().then(function() { | |
var y1 = I1._dbInfo, | |
E1; | |
try { | |
E1 = localStorage.key(l) | |
} catch (Z0) { | |
E1 = null | |
} | |
if (E1) E1 = E1.substring(y1.keyPrefix.length); | |
return E1 | |
}); | |
return g(v1, _1), v1 | |
} | |
function Rd(l) { | |
var _1 = this, | |
I1 = _1.ready().then(function() { | |
var v1 = _1._dbInfo, | |
y1 = localStorage.length, | |
E1 = []; | |
for (var Z0 = 0; Z0 < y1; Z0++) { | |
var Q0 = localStorage.key(Z0); | |
if (Q0.indexOf(v1.keyPrefix) === 0) E1.push(Q0.substring(v1.keyPrefix.length)) | |
} | |
return E1 | |
}); | |
return g(I1, l), I1 | |
} | |
function sB(l) { | |
var _1 = this, | |
I1 = _1.keys().then(function(v1) { | |
return v1.length | |
}); | |
return g(I1, l), I1 | |
} | |
function TW(l, _1) { | |
var I1 = this; | |
l = K(l); | |
var v1 = I1.ready().then(function() { | |
var y1 = I1._dbInfo; | |
localStorage.removeItem(y1.keyPrefix + l) | |
}); | |
return g(v1, _1), v1 | |
} | |
function Ud(l, _1, I1) { | |
var v1 = this; | |
l = K(l); | |
var y1 = v1.ready().then(function() { | |
if (_1 === void 0) _1 = null; | |
var E1 = _1; | |
return new F(function(Z0, Q0) { | |
var N0 = v1._dbInfo; | |
N0.serializer.serialize(_1, function($0, h0) { | |
if (h0) Q0(h0); | |
else try { | |
localStorage.setItem(N0.keyPrefix + l, $0), Z0(E1) | |
} catch (g2) { | |
if (g2.name === "QuotaExceededError" || g2.name === "NS_ERROR_DOM_QUOTA_REACHED") Q0(g2); | |
Q0(g2) | |
} | |
}) | |
}) | |
}); | |
return g(y1, I1), y1 | |
} | |
function _7(l, _1) { | |
if (_1 = Q.apply(this, arguments), l = typeof l !== "function" && l || {}, !l.name) { | |
var I1 = this.config(); | |
l.name = l.name || I1.name, l.storeName = l.storeName || I1.storeName | |
} | |
var v1 = this, | |
y1; | |
if (!l.name) y1 = F.reject("Invalid arguments"); | |
else y1 = new F(function(E1) { | |
if (!l.storeName) E1(l.name + "/"); | |
else E1(qd(l, v1._defaultConfig)) | |
}).then(function(E1) { | |
for (var Z0 = localStorage.length - 1; Z0 >= 0; Z0--) { | |
var Q0 = localStorage.key(Z0); | |
if (Q0.indexOf(E1) === 0) localStorage.removeItem(Q0) | |
} | |
}); | |
return g(y1, _1), y1 | |
} | |
var OW = { | |
_driver: "localStorageWrapper", | |
_initStorage: $W, | |
_support: nB(), | |
iterate: aB, | |
getItem: qG, | |
setItem: Ud, | |
removeItem: TW, | |
clear: v8, | |
length: sB, | |
key: uW, | |
keys: Rd, | |
dropInstance: _7 | |
}, | |
d1 = function l(_1, I1) { | |
return _1 === I1 || typeof _1 === "number" && typeof I1 === "number" && isNaN(_1) && isNaN(I1) | |
}, | |
o = function l(_1, I1) { | |
var v1 = _1.length, | |
y1 = 0; | |
while (y1 < v1) { | |
if (d1(_1[y1], I1)) return !0; | |
y1++ | |
} | |
return !1 | |
}, | |
S1 = Array.isArray || function(l) { | |
return Object.prototype.toString.call(l) === "[object Array]" | |
}, | |
p1 = {}, | |
l1 = {}, | |
s1 = { | |
INDEXEDDB: F1, | |
WEBSQL: Y7, | |
LOCALSTORAGE: OW | |
}, | |
U0 = [s1.INDEXEDDB._driver, s1.WEBSQL._driver, s1.LOCALSTORAGE._driver], | |
w0 = ["dropInstance"], | |
J0 = ["clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem"].concat(w0), | |
W0 = { | |
description: "", | |
driver: U0.slice(), | |
name: "localforage", | |
size: 4980736, | |
storeName: "keyvaluepairs", | |
version: 1 | |
}; | |
function g0(l, _1) { | |
l[_1] = function() { | |
var I1 = arguments; | |
return l.ready().then(function() { | |
return l[_1].apply(l, I1) | |
}) | |
} | |
} | |
function c2() { | |
for (var l = 1; l < arguments.length; l++) { | |
var _1 = arguments[l]; | |
if (_1) { | |
for (var I1 in _1) | |
if (_1.hasOwnProperty(I1)) | |
if (S1(_1[I1])) arguments[0][I1] = _1[I1].slice(); | |
else arguments[0][I1] = _1[I1] | |
} | |
} | |
return arguments[0] | |
} | |
var L2 = function() { | |
function l(_1) { | |
B(this, l); | |
for (var I1 in s1) | |
if (s1.hasOwnProperty(I1)) { | |
var v1 = s1[I1], | |
y1 = v1._driver; | |
if (this[I1] = y1, !p1[y1]) this.defineDriver(v1) | |
} this._defaultConfig = c2({}, W0), this._config = c2({}, this._defaultConfig, _1), this._driverSet = null, this._initDriver = null, this._ready = !1, this._dbInfo = null, this._wrapLibraryMethodsWithReady(), this.setDriver(this._config.driver).catch(function() {}) | |
} | |
return l.prototype.config = function _1(I1) { | |
if ((typeof I1 === "undefined" ? "undefined" : w(I1)) === "object") { | |
if (this._ready) return new Error("Can't call config() after localforage has been used."); | |
for (var v1 in I1) { | |
if (v1 === "storeName") I1[v1] = I1[v1].replace(/\W/g, "_"); | |
if (v1 === "version" && typeof I1[v1] !== "number") return new Error("Database version must be a number."); | |
this._config[v1] = I1[v1] | |
} | |
if ("driver" in I1 && I1.driver) return this.setDriver(this._config.driver); | |
return !0 | |
} else if (typeof I1 === "string") return this._config[I1]; | |
else return this._config | |
}, l.prototype.defineDriver = function _1(I1, v1, y1) { | |
var E1 = new F(function(Z0, Q0) { | |
try { | |
var N0 = I1._driver, | |
$0 = new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver"); | |
if (!I1._driver) { | |
Q0($0); | |
return | |
} | |
var h0 = J0.concat("_initStorage"); | |
for (var g2 = 0, F4 = h0.length; g2 < F4; g2++) { | |
var x4 = h0[g2], | |
c4 = !o(w0, x4); | |
if ((c4 || I1[x4]) && typeof I1[x4] !== "function") { | |
Q0($0); | |
return | |
} | |
} | |
var W9 = function e6() { | |
var vd = function HK(Ed) { | |
return function() { | |
var $4 = new Error("Method " + Ed + " is not implemented by the current driver"), | |
oB = F.reject($4); | |
return g(oB, arguments[arguments.length - 1]), oB | |
} | |
}; | |
for (var dC = 0, qX = w0.length; dC < qX; dC++) { | |
var RG = w0[dC]; | |
if (!I1[RG]) I1[RG] = vd(RG) | |
} | |
}; | |
W9(); | |
var u9 = function e6(vd) { | |
if (p1[N0]) console.info("Redefining LocalForage driver: " + N0); | |
p1[N0] = I1, l1[N0] = vd, Z0() | |
}; | |
if ("_support" in I1) | |
if (I1._support && typeof I1._support === "function") I1._support().then(u9, Q0); | |
else u9(!!I1._support); | |
else u9(!0) | |
} catch (e6) { | |
Q0(e6) | |
} | |
}); | |
return J(E1, v1, y1), E1 | |
}, l.prototype.driver = function _1() { | |
return this._driver || null | |
}, l.prototype.getDriver = function _1(I1, v1, y1) { | |
var E1 = p1[I1] ? F.resolve(p1[I1]) : F.reject(new Error("Driver not found.")); | |
return J(E1, v1, y1), E1 | |
}, l.prototype.getSerializer = function _1(I1) { | |
var v1 = F.resolve(T6); | |
return J(v1, I1), v1 | |
}, l.prototype.ready = function _1(I1) { | |
var v1 = this, | |
y1 = v1._driverSet.then(function() { | |
if (v1._ready === null) v1._ready = v1._initDriver(); | |
return v1._ready | |
}); | |
return J(y1, I1, I1), y1 | |
}, l.prototype.setDriver = function _1(I1, v1, y1) { | |
var E1 = this; | |
if (!S1(I1)) I1 = [I1]; | |
var Z0 = this._getSupportedDrivers(I1); | |
function Q0() { | |
E1._config.driver = E1.driver() | |
} | |
function N0(g2) { | |
return E1._extend(g2), Q0(), E1._ready = E1._initStorage(E1._config), E1._ready | |
} | |
function $0(g2) { | |
return function() { | |
var F4 = 0; | |
function x4() { | |
while (F4 < g2.length) { | |
var c4 = g2[F4]; | |
return F4++, E1._dbInfo = null, E1._ready = null, E1.getDriver(c4).then(N0).catch(x4) | |
} | |
Q0(); | |
var W9 = new Error("No available storage method found."); | |
return E1._driverSet = F.reject(W9), E1._driverSet | |
} | |
return x4() | |
} | |
} | |
var h0 = this._driverSet !== null ? this._driverSet.catch(function() { | |
return F.resolve() | |
}) : F.resolve(); | |
return this._driverSet = h0.then(function() { | |
var g2 = Z0[0]; | |
return E1._dbInfo = null, E1._ready = null, E1.getDriver(g2).then(function(F4) { | |
E1._driver = F4._driver, Q0(), E1._wrapLibraryMethodsWithReady(), E1._initDriver = $0(Z0) | |
}) | |
}).catch(function() { | |
Q0(); | |
var g2 = new Error("No available storage method found."); | |
return E1._driverSet = F.reject(g2), E1._driverSet | |
}), J(this._driverSet, v1, y1), this._driverSet | |
}, l.prototype.supports = function _1(I1) { | |
return !!l1[I1] | |
}, l.prototype._extend = function _1(I1) { | |
c2(this, I1) | |
}, l.prototype._getSupportedDrivers = function _1(I1) { | |
var v1 = []; | |
for (var y1 = 0, E1 = I1.length; y1 < E1; y1++) { | |
var Z0 = I1[y1]; | |
if (this.supports(Z0)) v1.push(Z0) | |
} | |
return v1 | |
}, l.prototype._wrapLibraryMethodsWithReady = function _1() { | |
for (var I1 = 0, v1 = J0.length; I1 < v1; I1++) g0(this, J0[I1]) | |
}, l.prototype.createInstance = function _1(I1) { | |
return new l(I1) | |
}, l | |
}(), | |
R2 = new L2; | |
C.exports = R2 | |
}, { | |
"3": 3 | |
}] | |
}, {}, [4])(4) | |
}) | |
}); | |
var Gy1 = Y((dy1) => { | |
Object.defineProperty(dy1, "__esModule", { | |
value: !0 | |
}); | |
var Jw = V0(), | |
u24 = Iy1(), | |
uF = XE(), | |
eX = Jw.GLOBAL_OBJ; | |
class YE { | |
static __initStatic() { | |
this.id = "Offline" | |
} | |
constructor(I = {}) { | |
this.name = YE.id, this.maxStoredEvents = I.maxStoredEvents || 30, this.offlineEventStore = u24.createInstance({ | |
name: "sentry/offlineEventStore" | |
}) | |
} | |
setupOnce(I, d) { | |
if (this.hub = d(), "addEventListener" in eX) eX.addEventListener("online", () => { | |
this._sendEvents().catch(() => { | |
uF.DEBUG_BUILD && Jw.logger.warn("could not send cached events") | |
}) | |
}); | |
let G = (Z) => { | |
if (this.hub && this.hub.getIntegration(YE)) { | |
if ("navigator" in eX && "onLine" in eX.navigator && !eX.navigator.onLine) return uF.DEBUG_BUILD && Jw.logger.log("Event dropped due to being a offline - caching instead"), this._cacheEvent(Z).then((C) => this._enforceMaxEvents()).catch((C) => { | |
uF.DEBUG_BUILD && Jw.logger.warn("could not cache event while offline") | |
}), null | |
} | |
return Z | |
}; | |
if (G.id = this.name, I(G), "navigator" in eX && "onLine" in eX.navigator && eX.navigator.onLine) this._sendEvents().catch(() => { | |
uF.DEBUG_BUILD && Jw.logger.warn("could not send cached events") | |
}) | |
} | |
async _cacheEvent(I) { | |
return this.offlineEventStore.setItem(Jw.uuid4(), Jw.normalize(I)) | |
} | |
async _enforceMaxEvents() { | |
let I = []; | |
return this.offlineEventStore.iterate((d, G, Z) => { | |
I.push({ | |
cacheKey: G, | |
event: d | |
}) | |
}).then(() => this._purgeEvents(I.sort((d, G) => (G.event.timestamp || 0) - (d.event.timestamp || 0)).slice(this.maxStoredEvents < I.length ? this.maxStoredEvents : I.length).map((d) => d.cacheKey))).catch((d) => { | |
uF.DEBUG_BUILD && Jw.logger.warn("could not enforce max events") | |
}) | |
} | |
async _purgeEvent(I) { | |
return this.offlineEventStore.removeItem(I) | |
} | |
async _purgeEvents(I) { | |
return Promise.all(I.map((d) => this._purgeEvent(d))).then() | |
} | |
async _sendEvents() { | |
return this.offlineEventStore.iterate((I, d, G) => { | |
if (this.hub) this.hub.captureEvent(I), this._purgeEvent(d).catch((Z) => { | |
uF.DEBUG_BUILD && Jw.logger.warn("could not purge event from cache") | |
}); | |
else uF.DEBUG_BUILD && Jw.logger.warn("no hub found - could not send cached event") | |
}) | |
} | |
} | |
YE.__initStatic(); | |
dy1.Offline = YE | |
}); | |
var Ay1 = Y((By1) => { | |
Object.defineProperty(By1, "__esModule", { | |
value: !0 | |
}); | |
var _E = V4(), | |
Cy1 = V0(), | |
O24 = Cy1.GLOBAL_OBJ, | |
Wy1 = "ReportingObserver", | |
Zy1 = new WeakMap, | |
m24 = (I = {}) => { | |
let d = I.types || ["crash", "deprecation", "intervention"]; | |
function G(Z) { | |
if (!Zy1.has(_E.getClient())) return; | |
for (let C of Z) _E.withScope((W) => { | |
W.setExtra("url", C.url); | |
let w = `ReportingObserver [${C.type}]`, | |
B = "No details available"; | |
if (C.body) { | |
let A = {}; | |
for (let V in C.body) A[V] = C.body[V]; | |
if (W.setExtra("body", A), C.type === "crash") { | |
let V = C.body; | |
B = [V.crashId || "", V.reason || ""].join(" ").trim() || B | |
} else B = C.body.message || B | |
} | |
_E.captureMessage(`${w}: ${B}`) | |
}) | |
} | |
return { | |
name: Wy1, | |
setupOnce() { | |
if (!Cy1.supportsReportingObserver()) return; | |
new O24.ReportingObserver(G, { | |
buffered: !0, | |
types: d | |
}).observe() | |
}, | |
setup(Z) { | |
Zy1.set(Z, !0) | |
} | |
} | |
}, | |
wy1 = _E.defineIntegration(m24), | |
l24 = _E.convertIntegrationFnToClass(Wy1, wy1); | |
By1.ReportingObserver = l24; | |
By1.reportingObserverIntegration = wy1 | |
}); | |
var Hy1 = Y((Dy1) => { | |
Object.defineProperty(Dy1, "__esModule", { | |
value: !0 | |
}); | |
var Xy1 = V4(), | |
Vy1 = V0(), | |
Yy1 = "RewriteFrames", | |
j24 = (I = {}) => { | |
let d = I.root, | |
G = I.prefix || "app:///", | |
Z = I.iteratee || ((w) => { | |
if (!w.filename) return w; | |
let B = /^[a-zA-Z]:\\/.test(w.filename) || w.filename.includes("\\") && !w.filename.includes("/"), | |
A = /^\//.test(w.filename); | |
if (B || A) { | |
let V = B ? w.filename.replace(/^[a-zA-Z]:/, "").replace(/\\/g, "/") : w.filename, | |
X = d ? Vy1.relative(d, V) : Vy1.basename(V); | |
w.filename = `${G}${X}` | |
} | |
return w | |
}); | |
function C(w) { | |
try { | |
return { | |
...w, | |
exception: { | |
...w.exception, | |
values: w.exception.values.map((B) => ({ | |
...B, | |
...B.stacktrace && { | |
stacktrace: W(B.stacktrace) | |
} | |
})) | |
} | |
} | |
} catch (B) { | |
return w | |
} | |
} | |
function W(w) { | |
return { | |
...w, | |
frames: w && w.frames && w.frames.map((B) => Z(B)) | |
} | |
} | |
return { | |
name: Yy1, | |
setupOnce() {}, | |
processEvent(w) { | |
let B = w; | |
if (w.exception && Array.isArray(w.exception.values)) B = C(B); | |
return B | |
} | |
} | |
}, | |
_y1 = Xy1.defineIntegration(j24), | |
k24 = Xy1.convertIntegrationFnToClass(Yy1, _y1); | |
Dy1.RewriteFrames = k24; | |
Dy1.rewriteFramesIntegration = _y1 | |
}); | |
var Ny1 = Y((Ky1) => { | |
Object.defineProperty(Ky1, "__esModule", { | |
value: !0 | |
}); | |
var Fy1 = V4(), | |
gy1 = "SessionTiming", | |
p24 = () => { | |
let I = Date.now(); | |
return { | |
name: gy1, | |
setupOnce() {}, | |
processEvent(d) { | |
let G = Date.now(); | |
return { | |
...d, | |
extra: { | |
...d.extra, | |
["session:start"]: I, | |
["session:duration"]: G - I, | |
["session:end"]: G | |
} | |
} | |
} | |
} | |
}, | |
Jy1 = Fy1.defineIntegration(p24), | |
i24 = Fy1.convertIntegrationFnToClass(gy1, Jy1); | |
Ky1.SessionTiming = i24; | |
Ky1.sessionTimingIntegration = Jy1 | |
}); | |
var fy1 = Y((Qy1) => { | |
Object.defineProperty(Qy1, "__esModule", { | |
value: !0 | |
}); | |
var a24 = V4(), | |
zy1 = "Transaction", | |
s24 = () => { | |
return { | |
name: zy1, | |
setupOnce() {}, | |
processEvent(I) { | |
let d = e24(I); | |
for (let G = d.length - 1; G >= 0; G--) { | |
let Z = d[G]; | |
if (Z.in_app === !0) { | |
I.transaction = t24(Z); | |
break | |
} | |
} | |
return I | |
} | |
} | |
}, | |
o24 = a24.convertIntegrationFnToClass(zy1, s24); | |
function e24(I) { | |
let d = I.exception && I.exception.values && I.exception.values[0]; | |
return d && d.stacktrace && d.stacktrace.frames || [] | |
} | |
function t24(I) { | |
return I.module || I.function ? `${I.module||"?"}/${I.function||"?"}` : "<unknown>" | |
} | |
Qy1.Transaction = o24 | |
}); | |
var Ly1 = Y((Sy1) => { | |
Object.defineProperty(Sy1, "__esModule", { | |
value: !0 | |
}); | |
var uA = V4(), | |
Kw = V0(), | |
om = XE(), | |
qy1 = "HttpClient", | |
d44 = (I = {}) => { | |
let d = { | |
failedRequestStatusCodes: [ | |
[500, 599] | |
], | |
failedRequestTargets: [/.*/], | |
...I | |
}; | |
return { | |
name: qy1, | |
setupOnce() {}, | |
setup(G) { | |
X44(G, d), Y44(G, d) | |
} | |
} | |
}, | |
Ry1 = uA.defineIntegration(d44), | |
G44 = uA.convertIntegrationFnToClass(qy1, Ry1); | |
function Z44(I, d, G, Z) { | |
if (vy1(I, G.status, G.url)) { | |
let C = _44(d, Z), | |
W, w, B, A; | |
if (My1())[{ | |
headers: W, | |
cookies: B | |
}, { | |
headers: w, | |
cookies: A | |
}] = [{ | |
cookieHeader: "Cookie", | |
obj: C | |
}, { | |
cookieHeader: "Set-Cookie", | |
obj: G | |
}].map(({ | |
cookieHeader: X, | |
obj: _ | |
}) => { | |
let F = w44(_.headers), | |
g; | |
try { | |
let J = F[X] || F[X.toLowerCase()] || void 0; | |
if (J) g = Uy1(J) | |
} catch (J) { | |
om.DEBUG_BUILD && Kw.logger.log(`Could not extract cookies from header ${X}`) | |
} | |
return { | |
headers: F, | |
cookies: g | |
} | |
}); | |
let V = Ey1({ | |
url: C.url, | |
method: C.method, | |
status: G.status, | |
requestHeaders: W, | |
responseHeaders: w, | |
requestCookies: B, | |
responseCookies: A | |
}); | |
uA.captureEvent(V) | |
} | |
} | |
function C44(I, d, G, Z) { | |
if (vy1(I, d.status, d.responseURL)) { | |
let C, W, w; | |
if (My1()) { | |
try { | |
let A = d.getResponseHeader("Set-Cookie") || d.getResponseHeader("set-cookie") || void 0; | |
if (A) W = Uy1(A) | |
} catch (A) { | |
om.DEBUG_BUILD && Kw.logger.log("Could not extract cookies from response headers") | |
} | |
try { | |
w = B44(d) | |
} catch (A) { | |
om.DEBUG_BUILD && Kw.logger.log("Could not extract headers from response") | |
} | |
C = Z | |
} | |
let B = Ey1({ | |
url: d.responseURL, | |
method: G, | |
status: d.status, | |
requestHeaders: C, | |
responseHeaders: w, | |
responseCookies: W | |
}); | |
uA.captureEvent(B) | |
} | |
} | |
function W44(I) { | |
if (I) { | |
let d = I["Content-Length"] || I["content-length"]; | |
if (d) return parseInt(d, 10) | |
} | |
return | |
} | |
function Uy1(I) { | |
return I.split("; ").reduce((d, G) => { | |
let [Z, C] = G.split("="); | |
return d[Z] = C, d | |
}, {}) | |
} | |
function w44(I) { | |
let d = {}; | |
return I.forEach((G, Z) => { | |
d[Z] = G | |
}), d | |
} | |
function B44(I) { | |
let d = I.getAllResponseHeaders(); | |
if (!d) return {}; | |
return d.split(`\r | |
`).reduce((G, Z) => { | |
let [C, W] = Z.split(": "); | |
return G[C] = W, G | |
}, {}) | |
} | |
function A44(I, d) { | |
return I.some((G) => { | |
if (typeof G === "string") return d.includes(G); | |
return G.test(d) | |
}) | |
} | |
function V44(I, d) { | |
return I.some((G) => { | |
if (typeof G === "number") return G === d; | |
return d >= G[0] && d <= G[1] | |
}) | |
} | |
function X44(I, d) { | |
if (!Kw.supportsNativeFetch()) return; | |
Kw.addFetchInstrumentationHandler((G) => { | |
if (uA.getClient() !== I) return; | |
let { | |
response: Z, | |
args: C | |
} = G, [W, w] = C; | |
if (!Z) return; | |
Z44(d, W, Z, w) | |
}) | |
} | |
function Y44(I, d) { | |
if (!("XMLHttpRequest" in Kw.GLOBAL_OBJ)) return; | |
Kw.addXhrInstrumentationHandler((G) => { | |
if (uA.getClient() !== I) return; | |
let Z = G.xhr, | |
C = Z[Kw.SENTRY_XHR_DATA_KEY]; | |
if (!C) return; | |
let { | |
method: W, | |
request_headers: w | |
} = C; | |
try { | |
C44(d, Z, W, w) | |
} catch (B) { | |
om.DEBUG_BUILD && Kw.logger.warn("Error while extracting response event form XHR response", B) | |
} | |
}) | |
} | |
function vy1(I, d, G) { | |
return V44(I.failedRequestStatusCodes, d) && A44(I.failedRequestTargets, G) && !uA.isSentryRequestUrl(G, uA.getClient()) | |
} | |
function Ey1(I) { | |
let d = `HTTP Client Error with status code: ${I.status}`, | |
G = { | |
message: d, | |
exception: { | |
values: [{ | |
type: "Error", | |
value: d | |
}] | |
}, | |
request: { | |
url: I.url, | |
method: I.method, | |
headers: I.requestHeaders, | |
cookies: I.requestCookies | |
}, | |
contexts: { | |
response: { | |
status_code: I.status, | |
headers: I.responseHeaders, | |
cookies: I.responseCookies, | |
body_size: W44(I.responseHeaders) | |
} | |
} | |
}; | |
return Kw.addExceptionMechanism(G, { | |
type: "http.client", | |
handled: !1 | |
}), G | |
} | |
function _44(I, d) { | |
if (!d && I instanceof Request) return I; | |
if (I instanceof Request && I.bodyUsed) return I; | |
return new Request(I, d) | |
} | |
function My1() { | |
let I = uA.getClient(); | |
return I ? Boolean(I.getOptions().sendDefaultPii) : !1 | |
} | |
Sy1.HttpClient = G44; | |
Sy1.httpClientIntegration = Ry1 | |
}); | |
var Oy1 = Y((Ty1) => { | |
Object.defineProperty(Ty1, "__esModule", { | |
value: !0 | |
}); | |
var yy1 = V4(), | |
b01 = V0(), | |
l01 = b01.GLOBAL_OBJ, | |
F44 = 7, | |
Py1 = "ContextLines", | |
g44 = (I = {}) => { | |
let d = I.frameContextLines != null ? I.frameContextLines : F44; | |
return { | |
name: Py1, | |
setupOnce() {}, | |
processEvent(G) { | |
return K44(G, d) | |
} | |
} | |
}, | |
$y1 = yy1.defineIntegration(g44), | |
J44 = yy1.convertIntegrationFnToClass(Py1, $y1); | |
function K44(I, d) { | |
let G = l01.document, | |
Z = l01.location && b01.stripUrlQueryAndFragment(l01.location.href); | |
if (!G || !Z) return I; | |
let C = I.exception && I.exception.values; | |
if (!C || !C.length) return I; | |
let W = G.documentElement.innerHTML; | |
if (!W) return I; | |
let w = ["<!DOCTYPE html>", "<html>", ...W.split(` | |
`), "</html>"]; | |
return C.forEach((B) => { | |
let A = B.stacktrace; | |
if (A && A.frames) A.frames = A.frames.map((V) => uy1(V, w, Z, d)) | |
}), I | |
} | |
function uy1(I, d, G, Z) { | |
if (I.filename !== G || !I.lineno || !d.length) return I; | |
return b01.addContextToFrame(d, I, Z), I | |
} | |
Ty1.ContextLines = J44; | |
Ty1.applySourceContextToFrame = uy1; | |
Ty1.contextLinesIntegration = $y1 | |
}); | |
var ny1 = Y((iy1) => { | |
Object.defineProperty(iy1, "__esModule", { | |
value: !0 | |
}); | |
var my1 = yL1(), | |
ly1 = OL1(), | |
by1 = nL1(), | |
hy1 = eL1(), | |
f44 = Gy1(), | |
jy1 = Ay1(), | |
ky1 = Hy1(), | |
xy1 = Ny1(), | |
q44 = fy1(), | |
cy1 = Ly1(), | |
py1 = Oy1(); | |
iy1.CaptureConsole = my1.CaptureConsole; | |
iy1.captureConsoleIntegration = my1.captureConsoleIntegration; | |
iy1.Debug = ly1.Debug; | |
iy1.debugIntegration = ly1.debugIntegration; | |
iy1.Dedupe = by1.Dedupe; | |
iy1.dedupeIntegration = by1.dedupeIntegration; | |
iy1.ExtraErrorData = hy1.ExtraErrorData; | |
iy1.extraErrorDataIntegration = hy1.extraErrorDataIntegration; | |
iy1.Offline = f44.Offline; | |
iy1.ReportingObserver = jy1.ReportingObserver; | |
iy1.reportingObserverIntegration = jy1.reportingObserverIntegration; | |
iy1.RewriteFrames = ky1.RewriteFrames; | |
iy1.rewriteFramesIntegration = ky1.rewriteFramesIntegration; | |
iy1.SessionTiming = xy1.SessionTiming; | |
iy1.sessionTimingIntegration = xy1.sessionTimingIntegration; | |
iy1.Transaction = q44.Transaction; | |
iy1.HttpClient = cy1.HttpClient; | |
iy1.httpClientIntegration = cy1.httpClientIntegration; | |
iy1.ContextLines = py1.ContextLines; | |
iy1.contextLinesIntegration = py1.contextLinesIntegration | |
}); | |
var em = Y((ry1) => { | |
Object.defineProperty(ry1, "__esModule", { | |
value: !0 | |
}); | |
var c44 = [ | |
["january", "1"], | |
["february", "2"], | |
["march", "3"], | |
["april", "4"], | |
["may", "5"], | |
["june", "6"], | |
["july", "7"], | |
["august", "8"], | |
["september", "9"], | |
["october", "10"], | |
["november", "11"], | |
["december", "12"], | |
["jan", "1"], | |
["feb", "2"], | |
["mar", "3"], | |
["apr", "4"], | |
["may", "5"], | |
["jun", "6"], | |
["jul", "7"], | |
["aug", "8"], | |
["sep", "9"], | |
["oct", "10"], | |
["nov", "11"], | |
["dec", "12"], | |
["sunday", "0"], | |
["monday", "1"], | |
["tuesday", "2"], | |
["wednesday", "3"], | |
["thursday", "4"], | |
["friday", "5"], | |
["saturday", "6"], | |
["sun", "0"], | |
["mon", "1"], | |
["tue", "2"], | |
["wed", "3"], | |
["thu", "4"], | |
["fri", "5"], | |
["sat", "6"] | |
]; | |
function p44(I) { | |
return c44.reduce((d, [G, Z]) => d.replace(new RegExp(G, "gi"), Z), I) | |
} | |
ry1.replaceCronNames = p44 | |
}); | |
var ty1 = Y((ey1) => { | |
Object.defineProperty(ey1, "__esModule", { | |
value: !0 | |
}); | |
var ay1 = V4(), | |
sy1 = em(), | |
oy1 = "Automatic instrumentation of CronJob only supports crontab string"; | |
function n44(I, d) { | |
let G = !1; | |
return new Proxy(I, { | |
construct(Z, C) { | |
let [W, w, B, A, V, ...X] = C; | |
if (typeof W !== "string") throw new Error(oy1); | |
if (G) throw new Error(`A job named '${d}' has already been scheduled`); | |
G = !0; | |
let _ = sy1.replaceCronNames(W); | |
function F(g, J) { | |
return ay1.withMonitor(d, () => { | |
return w(g, J) | |
}, { | |
schedule: { | |
type: "crontab", | |
value: _ | |
}, | |
timezone: V || void 0 | |
}) | |
} | |
return new Z(W, F, B, A, V, ...X) | |
}, | |
get(Z, C) { | |
if (C === "from") return (W) => { | |
let { | |
cronTime: w, | |
onTick: B, | |
timeZone: A | |
} = W; | |
if (typeof w !== "string") throw new Error(oy1); | |
if (G) throw new Error(`A job named '${d}' has already been scheduled`); | |
G = !0; | |
let V = sy1.replaceCronNames(w); | |
return W.onTick = (X, _) => { | |
return ay1.withMonitor(d, () => { | |
return B(X, _) | |
}, { | |
schedule: { | |
type: "crontab", | |
value: V | |
}, | |
timezone: A || void 0 | |
}) | |
}, Z.from(W) | |
}; | |
else return Z[C] | |
} | |
}) | |
} | |
ey1.instrumentCron = n44 | |
}); | |
var GP1 = Y((dP1) => { | |
var { | |
_optionalChain: IP1 | |
} = V0(); | |
Object.defineProperty(dP1, "__esModule", { | |
value: !0 | |
}); | |
var a44 = V4(), | |
s44 = em(); | |
function o44(I) { | |
return new Proxy(I, { | |
get(d, G) { | |
if (G === "schedule" && d.schedule) return new Proxy(d.schedule, { | |
apply(Z, C, W) { | |
let [w, , B] = W; | |
if (!IP1([B, "optionalAccess", (A) => A.name])) throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.'); | |
return a44.withMonitor(B.name, () => { | |
return Z.apply(C, W) | |
}, { | |
schedule: { | |
type: "crontab", | |
value: s44.replaceCronNames(w) | |
}, | |
timezone: IP1([B, "optionalAccess", (A) => A.timezone]) | |
}) | |
} | |
}); | |
else return d[G] | |
} | |
}) | |
} | |
dP1.instrumentNodeCron = o44 | |
}); | |
var CP1 = Y((ZP1) => { | |
Object.defineProperty(ZP1, "__esModule", { | |
value: !0 | |
}); | |
var t44 = V4(), | |
I54 = em(); | |
function d54(I) { | |
return new Proxy(I, { | |
get(d, G) { | |
if (G === "scheduleJob") return new Proxy(d.scheduleJob, { | |
apply(Z, C, W) { | |
let [w, B] = W; | |
if (typeof w !== "string" || typeof B !== "string") throw new Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string"); | |
let A = w, | |
V = B; | |
return t44.withMonitor(A, () => { | |
return Z.apply(C, W) | |
}, { | |
schedule: { | |
type: "crontab", | |
value: I54.replaceCronNames(V) | |
} | |
}) | |
} | |
}); | |
return d[G] | |
} | |
}) | |
} | |
ZP1.instrumentNodeSchedule = d54 | |
}); | |
var XP1 = Y((VP1) => { | |
Object.defineProperty(VP1, "__esModule", { | |
value: !0 | |
}); | |
var Q2 = V4(), | |
Z54 = XM1(), | |
C54 = F01(), | |
W54 = K01(), | |
DE = y01(), | |
h01 = V0(), | |
w54 = tS1(), | |
WP1 = L01(), | |
B54 = BL1(), | |
A54 = gL1(), | |
V54 = UL1(), | |
X54 = EL1(), | |
tX = ny1(), | |
Y54 = Sm(), | |
_54 = hm(), | |
D54 = km(), | |
H54 = mm(), | |
F54 = Pm(), | |
g54 = Lm(), | |
J54 = Om(), | |
K54 = xm(), | |
N54 = rm(), | |
wP1 = O01(), | |
BP1 = pm(), | |
AP1 = $m(), | |
z54 = T01(), | |
Q54 = ty1(), | |
f54 = GP1(), | |
q54 = CP1(), | |
R54 = WP1.createGetModuleFromFilename(), | |
U54 = { | |
...Q2.Integrations, | |
...V54, | |
...X54 | |
}, | |
v54 = { | |
instrumentCron: Q54.instrumentCron, | |
instrumentNodeCron: f54.instrumentNodeCron, | |
instrumentNodeSchedule: q54.instrumentNodeSchedule | |
}; | |
VP1.Hub = Q2.Hub; | |
VP1.SDK_VERSION = Q2.SDK_VERSION; | |
VP1.SEMANTIC_ATTRIBUTE_SENTRY_OP = Q2.SEMANTIC_ATTRIBUTE_SENTRY_OP; | |
VP1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = Q2.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN; | |
VP1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Q2.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE; | |
VP1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Q2.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE; | |
VP1.Scope = Q2.Scope; | |
VP1.addBreadcrumb = Q2.addBreadcrumb; | |
VP1.addEventProcessor = Q2.addEventProcessor; | |
VP1.addGlobalEventProcessor = Q2.addGlobalEventProcessor; | |
VP1.addIntegration = Q2.addIntegration; | |
VP1.captureCheckIn = Q2.captureCheckIn; | |
VP1.captureEvent = Q2.captureEvent; | |
VP1.captureException = Q2.captureException; | |
VP1.captureMessage = Q2.captureMessage; | |
VP1.captureSession = Q2.captureSession; | |
VP1.close = Q2.close; | |
VP1.configureScope = Q2.configureScope; | |
VP1.continueTrace = Q2.continueTrace; | |
VP1.createTransport = Q2.createTransport; | |
VP1.endSession = Q2.endSession; | |
VP1.extractTraceparentData = Q2.extractTraceparentData; | |
VP1.flush = Q2.flush; | |
VP1.functionToStringIntegration = Q2.functionToStringIntegration; | |
VP1.getActiveSpan = Q2.getActiveSpan; | |
VP1.getActiveTransaction = Q2.getActiveTransaction; | |
VP1.getClient = Q2.getClient; | |
VP1.getCurrentHub = Q2.getCurrentHub; | |
VP1.getCurrentScope = Q2.getCurrentScope; | |
VP1.getGlobalScope = Q2.getGlobalScope; | |
VP1.getHubFromCarrier = Q2.getHubFromCarrier; | |
VP1.getIsolationScope = Q2.getIsolationScope; | |
VP1.getSpanStatusFromHttpCode = Q2.getSpanStatusFromHttpCode; | |
VP1.inboundFiltersIntegration = Q2.inboundFiltersIntegration; | |
VP1.isInitialized = Q2.isInitialized; | |
VP1.lastEventId = Q2.lastEventId; | |
VP1.linkedErrorsIntegration = Q2.linkedErrorsIntegration; | |
VP1.makeMain = Q2.makeMain; | |
VP1.metrics = Q2.metrics; | |
VP1.parameterize = Q2.parameterize; | |
VP1.requestDataIntegration = Q2.requestDataIntegration; | |
VP1.runWithAsyncContext = Q2.runWithAsyncContext; | |
VP1.setContext = Q2.setContext; | |
VP1.setCurrentClient = Q2.setCurrentClient; | |
VP1.setExtra = Q2.setExtra; | |
VP1.setExtras = Q2.setExtras; | |
VP1.setHttpStatus = Q2.setHttpStatus; | |
VP1.setMeasurement = Q2.setMeasurement; | |
VP1.setTag = Q2.setTag; | |
VP1.setTags = Q2.setTags; | |
VP1.setUser = Q2.setUser; | |
VP1.spanStatusfromHttpCode = Q2.spanStatusfromHttpCode; | |
VP1.startActiveSpan = Q2.startActiveSpan; | |
VP1.startInactiveSpan = Q2.startInactiveSpan; | |
VP1.startSession = Q2.startSession; | |
VP1.startSpan = Q2.startSpan; | |
VP1.startSpanManual = Q2.startSpanManual; | |
VP1.startTransaction = Q2.startTransaction; | |
VP1.trace = Q2.trace; | |
VP1.withActiveSpan = Q2.withActiveSpan; | |
VP1.withIsolationScope = Q2.withIsolationScope; | |
VP1.withMonitor = Q2.withMonitor; | |
VP1.withScope = Q2.withScope; | |
VP1.autoDiscoverNodePerformanceMonitoringIntegrations = Z54.autoDiscoverNodePerformanceMonitoringIntegrations; | |
VP1.NodeClient = C54.NodeClient; | |
VP1.makeNodeTransport = W54.makeNodeTransport; | |
VP1.defaultIntegrations = DE.defaultIntegrations; | |
VP1.defaultStackParser = DE.defaultStackParser; | |
VP1.getDefaultIntegrations = DE.getDefaultIntegrations; | |
VP1.getSentryRelease = DE.getSentryRelease; | |
VP1.init = DE.init; | |
VP1.DEFAULT_USER_INCLUDES = h01.DEFAULT_USER_INCLUDES; | |
VP1.addRequestDataToEvent = h01.addRequestDataToEvent; | |
VP1.extractRequestData = h01.extractRequestData; | |
VP1.deepReadDirSync = w54.deepReadDirSync; | |
VP1.createGetModuleFromFilename = WP1.createGetModuleFromFilename; | |
VP1.enableAnrDetection = B54.enableAnrDetection; | |
VP1.Handlers = A54; | |
VP1.captureConsoleIntegration = tX.captureConsoleIntegration; | |
VP1.debugIntegration = tX.debugIntegration; | |
VP1.dedupeIntegration = tX.dedupeIntegration; | |
VP1.extraErrorDataIntegration = tX.extraErrorDataIntegration; | |
VP1.httpClientIntegration = tX.httpClientIntegration; | |
VP1.reportingObserverIntegration = tX.reportingObserverIntegration; | |
VP1.rewriteFramesIntegration = tX.rewriteFramesIntegration; | |
VP1.sessionTimingIntegration = tX.sessionTimingIntegration; | |
VP1.consoleIntegration = Y54.consoleIntegration; | |
VP1.onUncaughtExceptionIntegration = _54.onUncaughtExceptionIntegration; | |
VP1.onUnhandledRejectionIntegration = D54.onUnhandledRejectionIntegration; | |
VP1.modulesIntegration = H54.modulesIntegration; | |
VP1.contextLinesIntegration = F54.contextLinesIntegration; | |
VP1.nodeContextIntegration = g54.nodeContextIntegration; | |
VP1.localVariablesIntegration = J54.localVariablesIntegration; | |
VP1.spotlightIntegration = K54.spotlightIntegration; | |
VP1.anrIntegration = N54.anrIntegration; | |
VP1.hapiErrorPlugin = wP1.hapiErrorPlugin; | |
VP1.hapiIntegration = wP1.hapiIntegration; | |
VP1.Undici = BP1.Undici; | |
VP1.nativeNodeFetchintegration = BP1.nativeNodeFetchintegration; | |
VP1.Http = AP1.Http; | |
VP1.httpIntegration = AP1.httpIntegration; | |
VP1.trpcMiddleware = z54.trpcMiddleware; | |
VP1.Integrations = U54; | |
VP1.cron = v54; | |
VP1.getModuleFromFilename = R54 | |
}); | |
var mu1 = Y((Sq9, Ou1) => { | |
Ou1.exports = function I(d) { | |
return d.map(function(G) { | |
if (G && typeof G === "object") return G.op.replace(/(.)/g, "\\$1"); | |
if (/["\s]/.test(G) && !/'/.test(G)) return "'" + G.replace(/(['\\])/g, "\\$1") + "'"; | |
if (/["'\s]/.test(G)) return '"' + G.replace(/(["\\$`!])/g, "\\$1") + '"'; | |
return String(G).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, "$1\\$2") | |
}).join(" ") | |
} | |
}); | |
var cu1 = Y((Lq9, xu1) => { | |
var ku1 = "(?:" + ["\\|\\|", "\\&\\&", ";;", "\\|\\&", "\\<\\(", "\\<\\<\\<", ">>", ">\\&", "<\\&", "[&;()|<>]"].join("|") + ")", | |
lu1 = new RegExp("^" + ku1 + "$"), | |
bu1 = "|&;()<> \\t", | |
jG4 = '"((\\\\"|[^"])*?)"', | |
kG4 = "'((\\\\'|[^'])*?)'", | |
xG4 = /^#$/, | |
hu1 = "'", | |
ju1 = '"', | |
o01 = "$", | |
lF = "", | |
cG4 = 4294967296; | |
for (e01 = 0; e01 < 4; e01++) lF += (cG4 * Math.random()).toString(16); | |
var e01, pG4 = new RegExp("^" + lF); | |
function iG4(I, d) { | |
var G = d.lastIndex, | |
Z = [], | |
C; | |
while (C = d.exec(I)) | |
if (Z.push(C), d.lastIndex === C.index) d.lastIndex += 1; | |
return d.lastIndex = G, Z | |
} | |
function nG4(I, d, G) { | |
var Z = typeof I === "function" ? I(G) : I[G]; | |
if (typeof Z === "undefined" && G != "") Z = ""; | |
else if (typeof Z === "undefined") Z = "$"; | |
if (typeof Z === "object") return d + lF + JSON.stringify(Z) + lF; | |
return d + Z | |
} | |
function rG4(I, d, G) { | |
if (!G) G = {}; | |
var Z = G.escape || "\\", | |
C = "(\\" + Z + `['"` + bu1 + `]|[^\\s'"` + bu1 + "])+", | |
W = new RegExp(["(" + ku1 + ")", "(" + C + "|" + jG4 + "|" + kG4 + ")+"].join("|"), "g"), | |
w = iG4(I, W); | |
if (w.length === 0) return []; | |
if (!d) d = {}; | |
var B = !1; | |
return w.map(function(A) { | |
var V = A[0]; | |
if (!V || B) return; | |
if (lu1.test(V)) return { | |
op: V | |
}; | |
var X = !1, | |
_ = !1, | |
F = "", | |
g = !1, | |
J; | |
function K() { | |
J += 1; | |
var S, P, $ = V.charAt(J); | |
if ($ === "{") { | |
if (J += 1, V.charAt(J) === "}") throw new Error("Bad substitution: " + V.slice(J - 2, J + 1)); | |
if (S = V.indexOf("}", J), S < 0) throw new Error("Bad substitution: " + V.slice(J)); | |
P = V.slice(J, S), J = S | |
} else if (/[*@#?$!_-]/.test($)) P = $, J += 1; | |
else { | |
var h = V.slice(J); | |
if (S = h.match(/[^\w\d_]/), !S) P = h, J = V.length; | |
else P = h.slice(0, S.index), J += S.index - 1 | |
} | |
return nG4(d, "", P) | |
} | |
for (J = 0; J < V.length; J++) { | |
var Q = V.charAt(J); | |
if (g = g || !X && (Q === "*" || Q === "?"), _) F += Q, _ = !1; | |
else if (X) | |
if (Q === X) X = !1; | |
else if (X == hu1) F += Q; | |
else if (Q === Z) | |
if (J += 1, Q = V.charAt(J), Q === ju1 || Q === Z || Q === o01) F += Q; | |
else F += Z + Q; | |
else if (Q === o01) F += K(); | |
else F += Q; | |
else if (Q === ju1 || Q === hu1) X = Q; | |
else if (lu1.test(Q)) return { | |
op: V | |
}; | |
else if (xG4.test(Q)) { | |
B = !0; | |
var E = { | |
comment: I.slice(A.index + J + 1) | |
}; | |
if (F.length) return [F, E]; | |
return [E] | |
} else if (Q === Z) _ = !0; | |
else if (Q === o01) F += K(); | |
else F += Q | |
} | |
if (g) return { | |
op: "glob", | |
pattern: F | |
}; | |
return F | |
}).reduce(function(A, V) { | |
return typeof V === "undefined" ? A : A.concat(V) | |
}, []) | |
} | |
xu1.exports = function I(d, G, Z) { | |
var C = rG4(d, G, Z); | |
if (typeof G !== "function") return C; | |
return C.reduce(function(W, w) { | |
if (typeof w === "object") return W.concat(w); | |
var B = w.split(RegExp("(" + lF + ".*?" + lF + ")", "g")); | |
if (B.length === 1) return W.concat(B[0]); | |
return W.concat(B.filter(Boolean).map(function(A) { | |
if (pG4.test(A)) return JSON.parse(A.split(lF)[1]); | |
return A | |
})) | |
}, []) | |
} | |
}); | |
var t01 = Y((aG4) => { | |
aG4.quote = mu1(); | |
aG4.parse = cu1() | |
}); | |
var u1 = Y((QZ4) => { | |
var NE = Symbol.for("react.element"), | |
wZ4 = Symbol.for("react.portal"), | |
BZ4 = Symbol.for("react.fragment"), | |
AZ4 = Symbol.for("react.strict_mode"), | |
VZ4 = Symbol.for("react.profiler"), | |
XZ4 = Symbol.for("react.provider"), | |
YZ4 = Symbol.for("react.context"), | |
_Z4 = Symbol.for("react.forward_ref"), | |
DZ4 = Symbol.for("react.suspense"), | |
HZ4 = Symbol.for("react.memo"), | |
FZ4 = Symbol.for("react.lazy"), | |
ou1 = Symbol.iterator; | |
function gZ4(I) { | |
if (I === null || typeof I !== "object") return null; | |
return I = ou1 && I[ou1] || I["@@iterator"], typeof I === "function" ? I : null | |
} | |
var IT1 = { | |
isMounted: function() { | |
return !1 | |
}, | |
enqueueForceUpdate: function() {}, | |
enqueueReplaceState: function() {}, | |
enqueueSetState: function() {} | |
}, | |
dT1 = Object.assign, | |
GT1 = {}; | |
function Bz(I, d, G) { | |
this.props = I, this.context = d, this.refs = GT1, this.updater = G || IT1 | |
} | |
Bz.prototype.isReactComponent = {}; | |
Bz.prototype.setState = function(I, d) { | |
if (typeof I !== "object" && typeof I !== "function" && I != null) throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables."); | |
this.updater.enqueueSetState(this, I, d, "setState") | |
}; | |
Bz.prototype.forceUpdate = function(I) { | |
this.updater.enqueueForceUpdate(this, I, "forceUpdate") | |
}; | |
function ZT1() {} | |
ZT1.prototype = Bz.prototype; | |
function A21(I, d, G) { | |
this.props = I, this.context = d, this.refs = GT1, this.updater = G || IT1 | |
} | |
var V21 = A21.prototype = new ZT1; | |
V21.constructor = A21; | |
dT1(V21, Bz.prototype); | |
V21.isPureReactComponent = !0; | |
var eu1 = Array.isArray, | |
CT1 = Object.prototype.hasOwnProperty, | |
X21 = { | |
current: null | |
}, | |
WT1 = { | |
key: !0, | |
ref: !0, | |
__self: !0, | |
__source: !0 | |
}; | |
function wT1(I, d, G) { | |
var Z, C = {}, | |
W = null, | |
w = null; | |
if (d != null) | |
for (Z in d.ref !== void 0 && (w = d.ref), d.key !== void 0 && (W = "" + d.key), d) CT1.call(d, Z) && !WT1.hasOwnProperty(Z) && (C[Z] = d[Z]); | |
var B = arguments.length - 2; | |
if (B === 1) C.children = G; | |
else if (1 < B) { | |
for (var A = Array(B), V = 0; V < B; V++) A[V] = arguments[V + 2]; | |
C.children = A | |
} | |
if (I && I.defaultProps) | |
for (Z in B = I.defaultProps, B) C[Z] === void 0 && (C[Z] = B[Z]); | |
return { | |
$$typeof: NE, | |
type: I, | |
key: W, | |
ref: w, | |
props: C, | |
_owner: X21.current | |
} | |
} | |
function JZ4(I, d) { | |
return { | |
$$typeof: NE, | |
type: I.type, | |
key: d, | |
ref: I.ref, | |
props: I.props, | |
_owner: I._owner | |
} | |
} | |
function Y21(I) { | |
return typeof I === "object" && I !== null && I.$$typeof === NE | |
} | |
function KZ4(I) { | |
var d = { | |
"=": "=0", | |
":": "=2" | |
}; | |
return "$" + I.replace(/[=:]/g, function(G) { | |
return d[G] | |
}) | |
} | |
var tu1 = /\/+/g; | |
function B21(I, d) { | |
return typeof I === "object" && I !== null && I.key != null ? KZ4("" + I.key) : d.toString(36) | |
} | |
function jl(I, d, G, Z, C) { | |
var W = typeof I; | |
if (W === "undefined" || W === "boolean") I = null; | |
var w = !1; | |
if (I === null) w = !0; | |
else switch (W) { | |
case "string": | |
case "number": | |
w = !0; | |
break; | |
case "object": | |
switch (I.$$typeof) { | |
case NE: | |
case wZ4: | |
w = !0 | |
} | |
} | |
if (w) return w = I, C = C(w), I = Z === "" ? "." + B21(w, 0) : Z, eu1(C) ? (G = "", I != null && (G = I.replace(tu1, "$&/") + "/"), jl(C, d, G, "", function(V) { | |
return V | |
})) : C != null && (Y21(C) && (C = JZ4(C, G + (!C.key || w && w.key === C.key ? "" : ("" + C.key).replace(tu1, "$&/") + "/") + I)), d.push(C)), 1; | |
if (w = 0, Z = Z === "" ? "." : Z + ":", eu1(I)) | |
for (var B = 0; B < I.length; B++) { | |
W = I[B]; | |
var A = Z + B21(W, B); | |
w += jl(W, d, G, A, C) | |
} else if (A = gZ4(I), typeof A === "function") | |
for (I = A.call(I), B = 0; !(W = I.next()).done;) W = W.value, A = Z + B21(W, B++), w += jl(W, d, G, A, C); | |
else if (W === "object") throw d = String(I), Error("Objects are not valid as a React child (found: " + (d === "[object Object]" ? "object with keys {" + Object.keys(I).join(", ") + "}" : d) + "). If you meant to render a collection of children, use an array instead."); | |
return w | |
} | |
function hl(I, d, G) { | |
if (I == null) return I; | |
var Z = [], | |
C = 0; | |
return jl(I, Z, "", "", function(W) { | |
return d.call(G, W, C++) | |
}), Z | |
} | |
function NZ4(I) { | |
if (I._status === -1) { | |
var d = I._result; | |
d = d(), d.then(function(G) { | |
if (I._status === 0 || I._status === -1) I._status = 1, I._result = G | |
}, function(G) { | |
if (I._status === 0 || I._status === -1) I._status = 2, I._result = G | |
}), I._status === -1 && (I._status = 0, I._result = d) | |
} | |
if (I._status === 1) return I._result.default; | |
throw I._result | |
} | |
var e7 = { | |
current: null | |
}, | |
kl = { | |
transition: null | |
}, | |
zZ4 = { | |
ReactCurrentDispatcher: e7, | |
ReactCurrentBatchConfig: kl, | |
ReactCurrentOwner: X21 | |
}; | |
function BT1() { | |
throw Error("act(...) is not supported in production builds of React.") | |
} | |
QZ4.Children = { | |
map: hl, | |
forEach: function(I, d, G) { | |
hl(I, function() { | |
d.apply(this, arguments) | |
}, G) | |
}, | |
count: function(I) { | |
var d = 0; | |
return hl(I, function() { | |
d++ | |
}), d | |
}, | |
toArray: function(I) { | |
return hl(I, function(d) { | |
return d | |
}) || [] | |
}, | |
only: function(I) { | |
if (!Y21(I)) throw Error("React.Children.only expected to receive a single React element child."); | |
return I | |
} | |
}; | |
QZ4.Component = Bz; | |
QZ4.Fragment = BZ4; | |
QZ4.Profiler = VZ4; | |
QZ4.PureComponent = A21; | |
QZ4.StrictMode = AZ4; | |
QZ4.Suspense = DZ4; | |
QZ4.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = zZ4; | |
QZ4.act = BT1; | |
QZ4.cloneElement = function(I, d, G) { | |
if (I === null || I === void 0) throw Error("React.cloneElement(...): The argument must be a React element, but you passed " + I + "."); | |
var Z = dT1({}, I.props), | |
C = I.key, | |
W = I.ref, | |
w = I._owner; | |
if (d != null) { | |
if (d.ref !== void 0 && (W = d.ref, w = X21.current), d.key !== void 0 && (C = "" + d.key), I.type && I.type.defaultProps) var B = I.type.defaultProps; | |
for (A in d) CT1.call(d, A) && !WT1.hasOwnProperty(A) && (Z[A] = d[A] === void 0 && B !== void 0 ? B[A] : d[A]) | |
} | |
var A = arguments.length - 2; | |
if (A === 1) Z.children = G; | |
else if (1 < A) { | |
B = Array(A); | |
for (var V = 0; V < A; V++) B[V] = arguments[V + 2]; | |
Z.children = B | |
} | |
return { | |
$$typeof: NE, | |
type: I.type, | |
key: C, | |
ref: W, | |
props: Z, | |
_owner: w | |
} | |
}; | |
QZ4.createContext = function(I) { | |
return I = { | |
$$typeof: YZ4, | |
_currentValue: I, | |
_currentValue2: I, | |
_threadCount: 0, | |
Provider: null, | |
Consumer: null, | |
_defaultValue: null, | |
_globalName: null | |
}, I.Provider = { | |
$$typeof: XZ4, | |
_context: I | |
}, I.Consumer = I | |
}; | |
QZ4.createElement = wT1; | |
QZ4.createFactory = function(I) { | |
var d = wT1.bind(null, I); | |
return d.type = I, d | |
}; | |
QZ4.createRef = function() { | |
return { | |
current: null | |
} | |
}; | |
QZ4.forwardRef = function(I) { | |
return { | |
$$typeof: _Z4, | |
render: I | |
} | |
}; | |
QZ4.isValidElement = Y21; | |
QZ4.lazy = function(I) { | |
return { | |
$$typeof: FZ4, | |
_payload: { | |
_status: -1, | |
_result: I | |
}, | |
_init: NZ4 | |
} | |
}; | |
QZ4.memo = function(I, d) { | |
return { | |
$$typeof: HZ4, | |
type: I, | |
compare: d === void 0 ? null : d | |
} | |
}; | |
QZ4.startTransition = function(I) { | |
var d = kl.transition; | |
kl.transition = {}; | |
try { | |
I() | |
} finally { | |
kl.transition = d | |
} | |
}; | |
QZ4.unstable_act = BT1; | |
QZ4.useCallback = function(I, d) { | |
return e7.current.useCallback(I, d) | |
}; | |
QZ4.useContext = function(I) { | |
return e7.current.useContext(I) | |
}; | |
QZ4.useDebugValue = function() {}; | |
QZ4.useDeferredValue = function(I) { | |
return e7.current.useDeferredValue(I) | |
}; | |
QZ4.useEffect = function(I, d) { | |
return e7.current.useEffect(I, d) | |
}; | |
QZ4.useId = function() { | |
return e7.current.useId() | |
}; | |
QZ4.useImperativeHandle = function(I, d, G) { | |
return e7.current.useImperativeHandle(I, d, G) | |
}; | |
QZ4.useInsertionEffect = function(I, d) { | |
return e7.current.useInsertionEffect(I, d) | |
}; | |
QZ4.useLayoutEffect = function(I, d) { | |
return e7.current.useLayoutEffect(I, d) | |
}; | |
QZ4.useMemo = function(I, d) { | |
return e7.current.useMemo(I, d) | |
}; | |
QZ4.useReducer = function(I, d, G) { | |
return e7.current.useReducer(I, d, G) | |
}; | |
QZ4.useRef = function(I) { | |
return e7.current.useRef(I) | |
}; | |
QZ4.useState = function(I) { | |
return e7.current.useState(I) | |
}; | |
QZ4.useSyncExternalStore = function(I, d, G) { | |
return e7.current.useSyncExternalStore(I, d, G) | |
}; | |
QZ4.useTransition = function() { | |
return e7.current.useTransition() | |
}; | |
QZ4.version = "18.3.1" | |
}); | |
var q7 = Y((NT1) => { | |
Object.defineProperty(NT1, "__esModule", { | |
value: !0 | |
}); | |
NT1.Log = NT1.LogLevel = void 0; | |
var NC4 = " DEBUG ", | |
zC4 = " INFO ", | |
QC4 = " WARN ", | |
fC4 = " ERROR "; | |
function pl(I) { | |
return I.unshift("[Statsig]"), I | |
} | |
NT1.LogLevel = { | |
None: 0, | |
Error: 1, | |
Warn: 2, | |
Info: 3, | |
Debug: 4 | |
}; | |
class bF { | |
static info(...I) { | |
if (bF.level >= NT1.LogLevel.Info) console.info(zC4, ...pl(I)) | |
} | |
static debug(...I) { | |
if (bF.level >= NT1.LogLevel.Debug) console.debug(NC4, ...pl(I)) | |
} | |
static warn(...I) { | |
if (bF.level >= NT1.LogLevel.Warn) console.warn(QC4, ...pl(I)) | |
} | |
static error(...I) { | |
if (bF.level >= NT1.LogLevel.Error) console.error(fC4, ...pl(I)) | |
} | |
} | |
NT1.Log = bF; | |
bF.level = NT1.LogLevel.Warn | |
}); | |
var hF = Y((RT1) => { | |
var g21, J21, K21; | |
Object.defineProperty(RT1, "__esModule", { | |
value: !0 | |
}); | |
RT1._getInstance = RT1._getStatsigGlobalFlag = RT1._getStatsigGlobal = void 0; | |
var qC4 = q7(), | |
RC4 = () => { | |
return __STATSIG__ ? __STATSIG__ : il | |
}; | |
RT1._getStatsigGlobal = RC4; | |
var UC4 = (I) => { | |
return RT1._getStatsigGlobal()[I] | |
}; | |
RT1._getStatsigGlobalFlag = UC4; | |
var vC4 = (I) => { | |
let d = RT1._getStatsigGlobal(); | |
if (!I) { | |
if (d.instances && Object.keys(d.instances).length > 1) qC4.Log.warn("Call made to Statsig global instance without an SDK key but there is more than one client instance. If you are using mulitple clients, please specify the SDK key."); | |
return d.firstInstance | |
} | |
return d.instances && d.instances[I] | |
}; | |
RT1._getInstance = vC4; | |
var Yz = "__STATSIG__", | |
QT1 = typeof window !== "undefined" ? window : {}, | |
fT1 = typeof global !== "undefined" ? global : {}, | |
qT1 = typeof globalThis !== "undefined" ? globalThis : {}, | |
il = (K21 = (J21 = (g21 = QT1[Yz]) !== null && g21 !== void 0 ? g21 : fT1[Yz]) !== null && J21 !== void 0 ? J21 : qT1[Yz]) !== null && K21 !== void 0 ? K21 : { | |
instance: RT1._getInstance | |
}; | |
QT1[Yz] = il; | |
fT1[Yz] = il; | |
qT1[Yz] = il | |
}); | |
var rl = Y((UT1) => { | |
Object.defineProperty(UT1, "__esModule", { | |
value: !0 | |
}); | |
UT1.Diagnostics = void 0; | |
var nl = new Map, | |
Q21 = "start", | |
f21 = "end", | |
MC4 = "statsig::diagnostics"; | |
UT1.Diagnostics = { | |
_getMarkers: (I) => { | |
return nl.get(I) | |
}, | |
_markInitOverallStart: (I) => { | |
Dz(I, _z({}, Q21, "overall")) | |
}, | |
_markInitOverallEnd: (I, d, G) => { | |
Dz(I, _z({ | |
success: d, | |
error: d ? void 0 : { | |
name: "InitializeError", | |
message: "Failed to initialize" | |
}, | |
evaluationDetails: G | |
}, f21, "overall")) | |
}, | |
_markInitNetworkReqStart: (I, d) => { | |
Dz(I, _z(d, Q21, "initialize", "network_request")) | |
}, | |
_markInitNetworkReqEnd: (I, d) => { | |
Dz(I, _z(d, f21, "initialize", "network_request")) | |
}, | |
_markInitProcessStart: (I) => { | |
Dz(I, _z({}, Q21, "initialize", "process")) | |
}, | |
_markInitProcessEnd: (I, d) => { | |
Dz(I, _z(d, f21, "initialize", "process")) | |
}, | |
_clearMarkers: (I) => { | |
nl.delete(I) | |
}, | |
_formatError(I) { | |
if (!(I && typeof I === "object")) return; | |
return { | |
code: q21(I, "code"), | |
name: q21(I, "name"), | |
message: q21(I, "message") | |
} | |
}, | |
_getDiagnosticsData(I, d, G, Z) { | |
var C; | |
return { | |
success: (I === null || I === void 0 ? void 0 : I.ok) === !0, | |
statusCode: I === null || I === void 0 ? void 0 : I.status, | |
sdkRegion: (C = I === null || I === void 0 ? void 0 : I.headers) === null || C === void 0 ? void 0 : C.get("x-statsig-region"), | |
isDelta: G.includes('"is_delta":true') === !0 ? !0 : void 0, | |
attempt: d, | |
error: UT1.Diagnostics._formatError(Z) | |
} | |
}, | |
_enqueueDiagnosticsEvent(I, d, G, Z) { | |
let C = UT1.Diagnostics._getMarkers(G); | |
if (C == null || C.length <= 0) return -1; | |
let W = C[C.length - 1].timestamp - C[0].timestamp; | |
UT1.Diagnostics._clearMarkers(G); | |
let w = SC4(I, { | |
context: "initialize", | |
markers: C.slice(), | |
statsigOptions: Z | |
}); | |
return d.enqueue(w), W | |
} | |
}; | |
function _z(I, d, G, Z) { | |
return Object.assign({ | |
key: G, | |
action: d, | |
step: Z, | |
timestamp: Date.now() | |
}, I) | |
} | |
function SC4(I, d) { | |
return { | |
eventName: MC4, | |
user: I, | |
value: null, | |
metadata: d, | |
time: Date.now() | |
} | |
} | |
function Dz(I, d) { | |
var G; | |
let Z = (G = nl.get(I)) !== null && G !== void 0 ? G : []; | |
Z.push(d), nl.set(I, Z) | |
} | |
function q21(I, d) { | |
if (d in I) return I[d]; | |
return | |
} | |
}); | |
var al = Y((vT1) => { | |
Object.defineProperty(vT1, "__esModule", { | |
value: !0 | |
}); | |
vT1._isTypeMatch = vT1._typeOf = void 0; | |
function LC4(I) { | |
return Array.isArray(I) ? "array" : typeof I | |
} | |
vT1._typeOf = LC4; | |
function yC4(I, d) { | |
let G = (Z) => Array.isArray(Z) ? "array" : typeof Z; | |
return G(I) === G(d) | |
} | |
vT1._isTypeMatch = yC4 | |
}); | |
var Hz = Y((MT1) => { | |
Object.defineProperty(MT1, "__esModule", { | |
value: !0 | |
}); | |
MT1._getSortedObject = MT1._DJB2Object = MT1._DJB2 = void 0; | |
var $C4 = al(), | |
uC4 = (I) => { | |
let d = 0; | |
for (let G = 0; G < I.length; G++) { | |
let Z = I.charCodeAt(G); | |
d = (d << 5) - d + Z, d = d & d | |
} | |
return String(d >>> 0) | |
}; | |
MT1._DJB2 = uC4; | |
var TC4 = (I, d) => { | |
return MT1._DJB2(JSON.stringify(MT1._getSortedObject(I, d))) | |
}; | |
MT1._DJB2Object = TC4; | |
var OC4 = (I, d) => { | |
if (I == null) return null; | |
let G = Object.keys(I).sort(), | |
Z = {}; | |
return G.forEach((C) => { | |
let W = I[C]; | |
if (d === 0 || $C4._typeOf(W) !== "object") { | |
Z[C] = W; | |
return | |
} | |
Z[C] = MT1._getSortedObject(W, d != null ? d - 1 : d) | |
}), Z | |
}; | |
MT1._getSortedObject = OC4 | |
}); | |
var qE = Y((PT1) => { | |
Object.defineProperty(PT1, "__esModule", { | |
value: !0 | |
}); | |
PT1._getStorageKey = PT1._getUserStorageKey = void 0; | |
var LT1 = Hz(); | |
function yT1(I, d, G) { | |
var Z; | |
if (G) return G(I, d); | |
let C = d && d.customIDs ? d.customIDs : {}, | |
W = [`uid:${(Z=d===null||d===void 0?void 0:d.userID)!==null&&Z!==void 0?Z:""}`, `cids:${Object.keys(C).sort((w,B)=>w.localeCompare(B)).map((w)=>`${w}-${C[w]}`).join(",")}`, `k:${I}`]; | |
return LT1._DJB2(W.join("|")) | |
} | |
PT1._getUserStorageKey = yT1; | |
function lC4(I, d, G) { | |
if (d) return yT1(I, d, G); | |
return LT1._DJB2(`k:${I}`) | |
} | |
PT1._getStorageKey = lC4 | |
}); | |
var RE = Y((uT1) => { | |
Object.defineProperty(uT1, "__esModule", { | |
value: !0 | |
}); | |
uT1.NetworkParam = uT1.NetworkDefault = uT1.Endpoint = void 0; | |
uT1.Endpoint = { | |
_initialize: "initialize", | |
_rgstr: "rgstr", | |
_download_config_specs: "download_config_specs" | |
}; | |
uT1.NetworkDefault = { | |
[uT1.Endpoint._rgstr]: "https://prodregistryv2.org/v1", | |
[uT1.Endpoint._initialize]: "https://featureassets.org/v1", | |
[uT1.Endpoint._download_config_specs]: "https://api.statsigcdn.com/v1" | |
}; | |
uT1.NetworkParam = { | |
EventCount: "ec", | |
SdkKey: "k", | |
SdkType: "st", | |
SdkVersion: "sv", | |
Time: "t", | |
SessionID: "sid", | |
StatsigEncoded: "se", | |
IsGzipped: "gz" | |
} | |
}); | |
var jF = Y((OT1) => { | |
Object.defineProperty(OT1, "__esModule", { | |
value: !0 | |
}); | |
OT1._getCurrentPageUrlSafe = OT1._addDocumentEventListenerSafe = OT1._addWindowEventListenerSafe = OT1._isServerEnv = OT1._getDocumentSafe = OT1._getWindowSafe = void 0; | |
var jC4 = () => { | |
return typeof window !== "undefined" ? window : null | |
}; | |
OT1._getWindowSafe = jC4; | |
var kC4 = () => { | |
var I; | |
let d = OT1._getWindowSafe(); | |
return (I = d === null || d === void 0 ? void 0 : d.document) !== null && I !== void 0 ? I : null | |
}; | |
OT1._getDocumentSafe = kC4; | |
var xC4 = () => { | |
if (OT1._getDocumentSafe() !== null) return !1; | |
let I = typeof process !== "undefined" && process.versions != null && process.versions.node != null; | |
return typeof EdgeRuntime === "string" || I | |
}; | |
OT1._isServerEnv = xC4; | |
var cC4 = (I, d) => { | |
let G = OT1._getWindowSafe(); | |
if (typeof(G === null || G === void 0 ? void 0 : G.addEventListener) === "function") G.addEventListener(I, d) | |
}; | |
OT1._addWindowEventListenerSafe = cC4; | |
var pC4 = (I, d) => { | |
let G = OT1._getDocumentSafe(); | |
if (typeof(G === null || G === void 0 ? void 0 : G.addEventListener) === "function") G.addEventListener(I, d) | |
}; | |
OT1._addDocumentEventListenerSafe = pC4; | |
var iC4 = () => { | |
var I; | |
try { | |
return (I = OT1._getWindowSafe()) === null || I === void 0 ? void 0 : I.location.href.split(/[?#]/)[0] | |
} catch (d) { | |
return | |
} | |
}; | |
OT1._getCurrentPageUrlSafe = iC4 | |
}); | |
var v21 = Y((jT1) => { | |
Object.defineProperty(jT1, "__esModule", { | |
value: !0 | |
}); | |
jT1._createLayerParameterExposure = jT1._createConfigExposure = jT1._createGateExposure = jT1._isExposureEvent = void 0; | |
var lT1 = "statsig::config_exposure", | |
bT1 = "statsig::gate_exposure", | |
hT1 = "statsig::layer_exposure", | |
U21 = (I, d, G, Z, C) => { | |
if (G.bootstrapMetadata) Z.bootstrapMetadata = G.bootstrapMetadata; | |
return { | |
eventName: I, | |
user: d, | |
value: null, | |
metadata: IW4(G, Z), | |
secondaryExposures: C, | |
time: Date.now() | |
} | |
}, | |
sC4 = ({ | |
eventName: I | |
}) => { | |
return I === bT1 || I === lT1 || I === hT1 | |
}; | |
jT1._isExposureEvent = sC4; | |
var oC4 = (I, d) => { | |
var G, Z, C; | |
let W = { | |
gate: d.name, | |
gateValue: String(d.value), | |
ruleID: d.ruleID | |
}; | |
if (((G = d.__evaluation) === null || G === void 0 ? void 0 : G.version) != null) W.configVersion = d.__evaluation.version; | |
return U21(bT1, I, d.details, W, (C = (Z = d.__evaluation) === null || Z === void 0 ? void 0 : Z.secondary_exposures) !== null && C !== void 0 ? C : []) | |
}; | |
jT1._createGateExposure = oC4; | |
var eC4 = (I, d) => { | |
var G, Z, C, W; | |
let w = { | |
config: d.name, | |
ruleID: d.ruleID | |
}; | |
if (((G = d.__evaluation) === null || G === void 0 ? void 0 : G.version) != null) w.configVersion = d.__evaluation.version; | |
if (((Z = d.__evaluation) === null || Z === void 0 ? void 0 : Z.passed) != null) w.rulePassed = String(d.__evaluation.passed); | |
return U21(lT1, I, d.details, w, (W = (C = d.__evaluation) === null || C === void 0 ? void 0 : C.secondary_exposures) !== null && W !== void 0 ? W : []) | |
}; | |
jT1._createConfigExposure = eC4; | |
var tC4 = (I, d, G) => { | |
var Z, C, W, w; | |
let B = d.__evaluation, | |
A = ((Z = B === null || B === void 0 ? void 0 : B.explicit_parameters) === null || Z === void 0 ? void 0 : Z.includes(G)) === !0, | |
V = "", | |
X = (C = B === null || B === void 0 ? void 0 : B.undelegated_secondary_exposures) !== null && C !== void 0 ? C : []; | |
if (A) V = (W = B.allocated_experiment_name) !== null && W !== void 0 ? W : "", X = B.secondary_exposures; | |
let _ = { | |
config: d.name, | |
parameterName: G, | |
ruleID: d.ruleID, | |
allocatedExperiment: V, | |
isExplicitParameter: String(A) | |
}; | |
if (((w = d.__evaluation) === null || w === void 0 ? void 0 : w.version) != null) _.configVersion = d.__evaluation.version; | |
return U21(hT1, I, d.details, _, X) | |
}; | |
jT1._createLayerParameterExposure = tC4; | |
var IW4 = (I, d) => { | |
if (d.reason = I.reason, I.lcut) d.lcut = String(I.lcut); | |
if (I.receivedAt) d.receivedAt = String(I.receivedAt); | |
return d | |
} | |
}); | |
var bA = Y((xT1) => { | |
Object.defineProperty(xT1, "__esModule", { | |
value: !0 | |
}); | |
xT1._setObjectInStorage = xT1._getObjectFromStorage = xT1.Storage = void 0; | |
var CW4 = q7(), | |
WW4 = jF(), | |
UE = {}, | |
M21 = { | |
isReady: () => !0, | |
isReadyResolver: () => null, | |
getProviderName: () => "InMemory", | |
getItem: (I) => UE[I] ? UE[I] : null, | |
setItem: (I, d) => { | |
UE[I] = d | |
}, | |
removeItem: (I) => { | |
delete UE[I] | |
}, | |
getAllKeys: () => Object.keys(UE) | |
}, | |
tl = null; | |
try { | |
let I = WW4._getWindowSafe(); | |
if (I && I.localStorage && typeof I.localStorage.getItem === "function") tl = { | |
isReady: () => !0, | |
isReadyResolver: () => null, | |
getProviderName: () => "LocalStorage", | |
getItem: (d) => I.localStorage.getItem(d), | |
setItem: (d, G) => I.localStorage.setItem(d, G), | |
removeItem: (d) => I.localStorage.removeItem(d), | |
getAllKeys: () => Object.keys(I.localStorage) | |
} | |
} catch (I) { | |
CW4.Log.warn("Failed to setup localStorageProvider.") | |
} | |
var E21 = tl !== null && tl !== void 0 ? tl : M21, | |
Qw = E21; | |
function wW4(I) { | |
try { | |
return I() | |
} catch (d) { | |
if (d instanceof Error && d.name === "SecurityError") return xT1.Storage._setProvider(M21), null; | |
throw d | |
} | |
} | |
xT1.Storage = { | |
isReady: () => Qw.isReady(), | |
isReadyResolver: () => Qw.isReadyResolver(), | |
getProviderName: () => Qw.getProviderName(), | |
getItem: (I) => wW4(() => Qw.getItem(I)), | |
setItem: (I, d) => Qw.setItem(I, d), | |
removeItem: (I) => Qw.removeItem(I), | |
getAllKeys: () => Qw.getAllKeys(), | |
_setProvider: (I) => { | |
E21 = I, Qw = I | |
}, | |
_setDisabled: (I) => { | |
if (I) Qw = M21; | |
else Qw = E21 | |
} | |
}; | |
function BW4(I) { | |
let d = xT1.Storage.getItem(I); | |
return JSON.parse(d !== null && d !== void 0 ? d : "null") | |
} | |
xT1._getObjectFromStorage = BW4; | |
function AW4(I, d) { | |
xT1.Storage.setItem(I, JSON.stringify(d)) | |
} | |
xT1._setObjectInStorage = AW4 | |
}); | |
var S21 = Y((iT1) => { | |
Object.defineProperty(iT1, "__esModule", { | |
value: !0 | |
}); | |
iT1.UrlConfiguration = void 0; | |
var db = RE(), | |
XW4 = { | |
[db.Endpoint._initialize]: "i", | |
[db.Endpoint._rgstr]: "e", | |
[db.Endpoint._download_config_specs]: "d" | |
}; | |
class pT1 { | |
constructor(I, d, G, Z) { | |
if (this.customUrl = null, this.fallbackUrls = null, this.endpoint = I, this.endpointDnsKey = XW4[I], d) this.customUrl = d; | |
if (!d && G) this.customUrl = G.endsWith("/") ? `${G}${I}` : `${G}/${I}`; | |
if (Z) this.fallbackUrls = Z; | |
let C = db.NetworkDefault[I]; | |
this.defaultUrl = `${C}/${I}` | |
} | |
getUrl() { | |
var I; | |
return (I = this.customUrl) !== null && I !== void 0 ? I : this.defaultUrl | |
} | |
} | |
iT1.UrlConfiguration = pT1 | |
}); | |
var Cb = Y((aT1) => { | |
Object.defineProperty(aT1, "__esModule", { | |
value: !0 | |
}); | |
aT1._notifyVisibilityChanged = aT1._subscribeToVisiblityChanged = aT1._isUnloading = aT1._isCurrentlyVisible = void 0; | |
var Gb = jF(), | |
Zb = "foreground", | |
y21 = "background", | |
rT1 = [], | |
L21 = Zb, | |
P21 = !1, | |
YW4 = () => { | |
return L21 === Zb | |
}; | |
aT1._isCurrentlyVisible = YW4; | |
var _W4 = () => P21; | |
aT1._isUnloading = _W4; | |
var DW4 = (I) => { | |
rT1.unshift(I) | |
}; | |
aT1._subscribeToVisiblityChanged = DW4; | |
var HW4 = (I) => { | |
if (I === L21) return; | |
L21 = I, rT1.forEach((d) => d(I)) | |
}; | |
aT1._notifyVisibilityChanged = HW4; | |
Gb._addWindowEventListenerSafe("focus", () => { | |
P21 = !1, aT1._notifyVisibilityChanged(Zb) | |
}); | |
Gb._addWindowEventListenerSafe("blur", () => aT1._notifyVisibilityChanged(y21)); | |
Gb._addWindowEventListenerSafe("beforeunload", () => { | |
P21 = !0, aT1._notifyVisibilityChanged(y21) | |
}); | |
Gb._addDocumentEventListenerSafe("visibilitychange", () => { | |
aT1._notifyVisibilityChanged(document.visibilityState === "visible" ? Zb : y21) | |
}) | |
}); | |
var u21 = Y((Kz) => { | |
var gz = Kz && Kz.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(Kz, "__esModule", { | |
value: !0 | |
}); | |
Kz.EventLogger = void 0; | |
var KW4 = qE(), | |
NW4 = Hz(), | |
vE = q7(), | |
sT1 = RE(), | |
$21 = jF(), | |
zW4 = v21(), | |
Jz = bA(), | |
QW4 = S21(), | |
oT1 = Cb(), | |
fW4 = 100, | |
qW4 = 1e4, | |
RW4 = 1000, | |
UW4 = 600000, | |
vW4 = 500, | |
eT1 = 200, | |
EE = {}, | |
Wb = { | |
Startup: "startup", | |
GainedFocus: "gained_focus" | |
}; | |
class kF { | |
static _safeFlushAndForget(I) { | |
var d; | |
(d = EE[I]) === null || d === void 0 || d.flush().catch(() => {}) | |
} | |
static _safeRetryFailedLogs(I) { | |
var d; | |
(d = EE[I]) === null || d === void 0 || d._retryFailedLogs(Wb.GainedFocus) | |
} | |
constructor(I, d, G, Z) { | |
var C; | |
this._sdkKey = I, this._emitter = d, this._network = G, this._options = Z, this._queue = [], this._lastExposureTimeMap = {}, this._nonExposedChecks = {}, this._hasRunQuickFlush = !1, this._creationTime = Date.now(), this._isLoggingDisabled = (Z === null || Z === void 0 ? void 0 : Z.disableLogging) === !0, this._maxQueueSize = (C = Z === null || Z === void 0 ? void 0 : Z.loggingBufferMaxSize) !== null && C !== void 0 ? C : fW4; | |
let W = Z === null || Z === void 0 ? void 0 : Z.networkConfig; | |
this._logEventUrlConfig = new QW4.UrlConfiguration(sT1.Endpoint._rgstr, W === null || W === void 0 ? void 0 : W.logEventUrl, W === null || W === void 0 ? void 0 : W.api, W === null || W === void 0 ? void 0 : W.logEventFallbackUrls) | |
} | |
setLoggingDisabled(I) { | |
this._isLoggingDisabled = I | |
} | |
enqueue(I) { | |
if (!this._shouldLogEvent(I)) return; | |
if (this._normalizeAndAppendEvent(I), this._quickFlushIfNeeded(), this._queue.length > this._maxQueueSize) kF._safeFlushAndForget(this._sdkKey) | |
} | |
incrementNonExposureCount(I) { | |
var d; | |
let G = (d = this._nonExposedChecks[I]) !== null && d !== void 0 ? d : 0; | |
this._nonExposedChecks[I] = G + 1 | |
} | |
reset() { | |
this._lastExposureTimeMap = {} | |
} | |
start() { | |
if ($21._isServerEnv()) return; | |
EE[this._sdkKey] = this, oT1._subscribeToVisiblityChanged((I) => { | |
if (I === "background") kF._safeFlushAndForget(this._sdkKey); | |
else if (I === "foreground") kF._safeRetryFailedLogs(this._sdkKey) | |
}), this._retryFailedLogs(Wb.Startup), this._startBackgroundFlushInterval() | |
} | |
stop() { | |
return gz(this, void 0, void 0, function*() { | |
if (this._flushIntervalId) clearInterval(this._flushIntervalId), this._flushIntervalId = null; | |
delete EE[this._sdkKey], yield this.flush() | |
}) | |
} | |
flush() { | |
return gz(this, void 0, void 0, function*() { | |
if (this._appendAndResetNonExposedChecks(), this._queue.length === 0) return; | |
let I = this._queue; | |
this._queue = [], yield this._sendEvents(I) | |
}) | |
} | |
_quickFlushIfNeeded() { | |
if (this._hasRunQuickFlush) return; | |
if (this._hasRunQuickFlush = !0, Date.now() - this._creationTime > eT1) return; | |
setTimeout(() => kF._safeFlushAndForget(this._sdkKey), eT1) | |
} | |
_shouldLogEvent(I) { | |
if ($21._isServerEnv()) return !1; | |
if (!zW4._isExposureEvent(I)) return !0; | |
let d = I.user ? I.user : { | |
statsigEnvironment: void 0 | |
}, | |
G = KW4._getUserStorageKey(this._sdkKey, d), | |
Z = I.metadata ? I.metadata : {}, | |
C = [I.eventName, G, Z.gate, Z.config, Z.ruleID, Z.allocatedExperiment, Z.parameterName, String(Z.isExplicitParameter), Z.reason].join("|"), | |
W = this._lastExposureTimeMap[C], | |
w = Date.now(); | |
if (W && w - W < UW4) return !1; | |
if (Object.keys(this._lastExposureTimeMap).length > RW4) this._lastExposureTimeMap = {}; | |
return this._lastExposureTimeMap[C] = w, !0 | |
} | |
_sendEvents(I) { | |
var d, G; | |
return gz(this, void 0, void 0, function*() { | |
if (this._isLoggingDisabled) return this._saveFailedLogsToStorage(I), !1; | |
try { | |
let C = oT1._isUnloading() && this._network.isBeaconSupported() && ((G = (d = this._options) === null || d === void 0 ? void 0 : d.networkConfig) === null || G === void 0 ? void 0 : G.networkOverrideFunc) == null; | |
if (this._emitter({ | |
name: "pre_logs_flushed", | |
events: I | |
}), (C ? yield this._sendEventsViaBeacon(I): yield this._sendEventsViaPost(I)).success) return this._emitter({ | |
name: "logs_flushed", | |
events: I | |
}), !0; | |
else return vE.Log.warn("Failed to flush events."), this._saveFailedLogsToStorage(I), !1 | |
} catch (Z) { | |
return vE.Log.warn("Failed to flush events."), !1 | |
} | |
}) | |
} | |
_sendEventsViaPost(I) { | |
var d; | |
return gz(this, void 0, void 0, function*() { | |
let G = yield this._network.post(this._getRequestData(I)), Z = (d = G === null || G === void 0 ? void 0 : G.code) !== null && d !== void 0 ? d : -1; | |
return { | |
success: Z >= 200 && Z < 300 | |
} | |
}) | |
} | |
_sendEventsViaBeacon(I) { | |
return gz(this, void 0, void 0, function*() { | |
return { | |
success: yield this._network.beacon(this._getRequestData(I)) | |
} | |
}) | |
} | |
_getRequestData(I) { | |
return { | |
sdkKey: this._sdkKey, | |
data: { | |
events: I | |
}, | |
urlConfig: this._logEventUrlConfig, | |
retries: 3, | |
isCompressable: !0, | |
params: { | |
[sT1.NetworkParam.EventCount]: String(I.length) | |
} | |
} | |
} | |
_saveFailedLogsToStorage(I) { | |
while (I.length > vW4) I.shift(); | |
let d = this._getStorageKey(); | |
try { | |
Jz._setObjectInStorage(d, I) | |
} catch (G) { | |
vE.Log.warn("Unable to save failed logs to storage") | |
} | |
} | |
_retryFailedLogs(I) { | |
let d = this._getStorageKey(); | |
(() => gz(this, void 0, void 0, function*() { | |
if (!Jz.Storage.isReady()) yield Jz.Storage.isReadyResolver(); | |
let G = Jz._getObjectFromStorage(d); | |
if (!G) return; | |
if (I === Wb.Startup) Jz.Storage.removeItem(d); | |
if ((yield this._sendEvents(G)) && I === Wb.GainedFocus) Jz.Storage.removeItem(d) | |
}))().catch(() => { | |
vE.Log.warn("Failed to flush stored logs") | |
}) | |
} | |
_getStorageKey() { | |
return `statsig.failed_logs.${NW4._DJB2(this._sdkKey)}` | |
} | |
_normalizeAndAppendEvent(I) { | |
if (I.user) I.user = Object.assign({}, I.user), delete I.user.privateAttributes; | |
let d = {}, | |
G = this._getCurrentPageUrl(); | |
if (G) d.statsigMetadata = { | |
currentPage: G | |
}; | |
let Z = Object.assign(Object.assign({}, I), d); | |
vE.Log.debug("Enqueued Event:", Z), this._queue.push(Z) | |
} | |
_appendAndResetNonExposedChecks() { | |
if (Object.keys(this._nonExposedChecks).length === 0) return; | |
this._normalizeAndAppendEvent({ | |
eventName: "statsig::non_exposed_checks", | |
user: null, | |
time: Date.now(), | |
metadata: { | |
checks: Object.assign({}, this._nonExposedChecks) | |
} | |
}), this._nonExposedChecks = {} | |
} | |
_getCurrentPageUrl() { | |
var I; | |
if (((I = this._options) === null || I === void 0 ? void 0 : I.includeCurrentPageUrlWithEvents) === !1) return; | |
return $21._getCurrentPageUrlSafe() | |
} | |
_startBackgroundFlushInterval() { | |
var I, d; | |
let G = (d = (I = this._options) === null || I === void 0 ? void 0 : I.loggingIntervalMs) !== null && d !== void 0 ? d : qW4, | |
Z = setInterval(() => { | |
let C = EE[this._sdkKey]; | |
if (!C || C._flushIntervalId !== Z) clearInterval(Z); | |
else kF._safeFlushAndForget(this._sdkKey) | |
}, G); | |
this._flushIntervalId = Z | |
} | |
} | |
Kz.EventLogger = kF | |
}); | |
var ME = Y((tT1) => { | |
Object.defineProperty(tT1, "__esModule", { | |
value: !0 | |
}); | |
tT1.StatsigMetadataProvider = tT1.SDK_VERSION = void 0; | |
tT1.SDK_VERSION = "3.12.0"; | |
var T21 = { | |
sdkVersion: tT1.SDK_VERSION, | |
sdkType: "js-mono" | |
}; | |
tT1.StatsigMetadataProvider = { | |
get: () => T21, | |
add: (I) => { | |
T21 = Object.assign(Object.assign({}, T21), I) | |
} | |
} | |
}); | |
var ZO1 = Y((GO1) => { | |
Object.defineProperty(GO1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var wb = Y((CO1) => { | |
Object.defineProperty(CO1, "__esModule", { | |
value: !0 | |
}); | |
CO1.getUUID = void 0; | |
function EW4() { | |
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") return crypto.randomUUID(); | |
let I = new Date().getTime(), | |
d = typeof performance !== "undefined" && performance.now && performance.now() * 1000 || 0; | |
return `xxxxxxxx-xxxx-4xxx-${"89ab"[Math.floor(Math.random()*4)]}xxx-xxxxxxxxxxxx`.replace(/[xy]/g, (Z) => { | |
let C = Math.random() * 16; | |
if (I > 0) C = (I + C) % 16 | 0, I = Math.floor(I / 16); | |
else C = (d + C) % 16 | 0, d = Math.floor(d / 16); | |
return (Z === "x" ? C : C & 7 | 8).toString(16) | |
}) | |
} | |
CO1.getUUID = EW4 | |
}); | |
var Ab = Y((VO1) => { | |
Object.defineProperty(VO1, "__esModule", { | |
value: !0 | |
}); | |
VO1.StableID = void 0; | |
var MW4 = qE(), | |
SW4 = q7(), | |
BO1 = bA(), | |
LW4 = wb(), | |
Bb = {}; | |
VO1.StableID = { | |
get: (I) => { | |
if (Bb[I] == null) { | |
let d = yW4(I); | |
if (d == null) d = LW4.getUUID(), wO1(d, I); | |
Bb[I] = d | |
} | |
return Bb[I] | |
}, | |
setOverride: (I, d) => { | |
Bb[d] = I, wO1(I, d) | |
} | |
}; | |
function AO1(I) { | |
return `statsig.stable_id.${MW4._getStorageKey(I)}` | |
} | |
function wO1(I, d) { | |
let G = AO1(d); | |
try { | |
BO1._setObjectInStorage(G, I) | |
} catch (Z) { | |
SW4.Log.warn("Failed to save StableID") | |
} | |
} | |
function yW4(I) { | |
let d = AO1(I); | |
return BO1._getObjectFromStorage(d) | |
} | |
}); | |
var O21 = Y((YO1) => { | |
Object.defineProperty(YO1, "__esModule", { | |
value: !0 | |
}); | |
YO1._getFullUserHash = YO1._normalizeUser = void 0; | |
var PW4 = Hz(), | |
$W4 = q7(); | |
function uW4(I, d, G) { | |
try { | |
let Z = JSON.parse(JSON.stringify(I)); | |
if (d != null && d.environment != null) Z.statsigEnvironment = d.environment; | |
else if (G != null) Z.statsigEnvironment = { | |
tier: G | |
}; | |
return Z | |
} catch (Z) { | |
return $W4.Log.error("Failed to JSON.stringify user"), { | |
statsigEnvironment: void 0 | |
} | |
} | |
} | |
YO1._normalizeUser = uW4; | |
function TW4(I) { | |
return I ? PW4._DJB2Object(I) : null | |
} | |
YO1._getFullUserHash = TW4 | |
}); | |
var m21 = Y((DO1) => { | |
Object.defineProperty(DO1, "__esModule", { | |
value: !0 | |
}); | |
DO1._typedJsonParse = void 0; | |
var mW4 = q7(); | |
function lW4(I, d, G) { | |
try { | |
let Z = JSON.parse(I); | |
if (Z && typeof Z === "object" && d in Z) return Z | |
} catch (Z) {} | |
return mW4.Log.error(`Failed to parse ${G}`), null | |
} | |
DO1._typedJsonParse = lW4 | |
}); | |
var zO1 = Y((FY) => { | |
var l21 = FY && FY.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(FY, "__esModule", { | |
value: !0 | |
}); | |
FY._makeDataAdapterResult = FY.DataAdapterCore = void 0; | |
var Vb = q7(), | |
bW4 = Ab(), | |
Xb = O21(), | |
HY = bA(), | |
FO1 = m21(), | |
gO1 = 10; | |
class JO1 { | |
constructor(I, d) { | |
this._adapterName = I, this._cacheSuffix = d, this._options = null, this._sdkKey = null, this._lastModifiedStoreKey = `statsig.last_modified_time.${d}`, this._inMemoryCache = new KO1 | |
} | |
attach(I, d) { | |
this._sdkKey = I, this._options = d | |
} | |
getDataSync(I) { | |
let d = I && Xb._normalizeUser(I, this._options), | |
G = this._getCacheKey(d), | |
Z = this._inMemoryCache.get(G, d); | |
if (Z) return Z; | |
let C = this._loadFromCache(G); | |
if (C) return this._inMemoryCache.add(G, C), this._inMemoryCache.get(G, d); | |
return null | |
} | |
setData(I, d) { | |
let G = d && Xb._normalizeUser(d, this._options), | |
Z = this._getCacheKey(G); | |
this._inMemoryCache.add(Z, Yb("Bootstrap", I, null, G)) | |
} | |
_getDataAsyncImpl(I, d, G) { | |
return l21(this, void 0, void 0, function*() { | |
if (!HY.Storage.isReady()) yield HY.Storage.isReadyResolver(); | |
let Z = I !== null && I !== void 0 ? I : this.getDataSync(d), | |
C = [this._fetchAndPrepFromNetwork(Z, d, G)]; | |
if (G === null || G === void 0 ? void 0 : G.timeoutMs) C.push(new Promise((W) => setTimeout(W, G.timeoutMs)).then(() => { | |
return Vb.Log.debug("Fetching latest value timed out"), null | |
})); | |
return yield Promise.race(C) | |
}) | |
} | |
_prefetchDataImpl(I, d) { | |
return l21(this, void 0, void 0, function*() { | |
let G = I && Xb._normalizeUser(I, this._options), | |
Z = this._getCacheKey(G), | |
C = yield this._getDataAsyncImpl(null, G, d); | |
if (C) this._inMemoryCache.add(Z, Object.assign(Object.assign({}, C), { | |
source: "Prefetch" | |
})) | |
}) | |
} | |
_fetchAndPrepFromNetwork(I, d, G) { | |
return l21(this, void 0, void 0, function*() { | |
let Z = null; | |
if (I && this._isCachedResultValidFor204(I, d)) Z = I.data; | |
let C = yield this._fetchFromNetwork(Z, d, G); | |
if (!C) return Vb.Log.debug("No response returned for latest value"), null; | |
let W = FO1._typedJsonParse(C, "has_updates", "Response"), | |
w = this._getSdkKey(), | |
B = bW4.StableID.get(w), | |
A = null; | |
if ((W === null || W === void 0 ? void 0 : W.has_updates) === !0) A = Yb("Network", C, B, d); | |
else if (Z && (W === null || W === void 0 ? void 0 : W.has_updates) === !1) A = Yb("NetworkNotModified", Z, B, d); | |
else return null; | |
let V = this._getCacheKey(d); | |
return this._inMemoryCache.add(V, A), this._writeToCache(V, A), A | |
}) | |
} | |
_getSdkKey() { | |
if (this._sdkKey != null) return this._sdkKey; | |
return Vb.Log.error(`${this._adapterName} is not attached to a Client`), "" | |
} | |
_loadFromCache(I) { | |
var d; | |
let G = (d = HY.Storage.getItem) === null || d === void 0 ? void 0 : d.call(HY.Storage, I); | |
if (G == null) return null; | |
let Z = FO1._typedJsonParse(G, "source", "Cached Result"); | |
return Z ? Object.assign(Object.assign({}, Z), { | |
source: "Cache" | |
}) : null | |
} | |
_writeToCache(I, d) { | |
HY.Storage.setItem(I, JSON.stringify(d)), this._runLocalStorageCacheEviction(I) | |
} | |
_runLocalStorageCacheEviction(I) { | |
var d; | |
let G = (d = HY._getObjectFromStorage(this._lastModifiedStoreKey)) !== null && d !== void 0 ? d : {}; | |
G[I] = Date.now(); | |
let Z = NO1(G, gO1); | |
if (Z) delete G[Z], HY.Storage.removeItem(Z); | |
HY._setObjectInStorage(this._lastModifiedStoreKey, G) | |
} | |
} | |
FY.DataAdapterCore = JO1; | |
function Yb(I, d, G, Z) { | |
return { | |
source: I, | |
data: d, | |
receivedAt: Date.now(), | |
stableID: G, | |
fullUserHash: Xb._getFullUserHash(Z) | |
} | |
} | |
FY._makeDataAdapterResult = Yb; | |
class KO1 { | |
constructor() { | |
this._data = {} | |
} | |
get(I, d) { | |
var G; | |
let Z = this._data[I], | |
C = Z === null || Z === void 0 ? void 0 : Z.stableID, | |
W = (G = d === null || d === void 0 ? void 0 : d.customIDs) === null || G === void 0 ? void 0 : G.stableID; | |
if (W && C && W !== C) return Vb.Log.warn("'StatsigUser.customIDs.stableID' mismatch"), null; | |
return Z | |
} | |
add(I, d) { | |
let G = NO1(this._data, gO1 - 1); | |
if (G) delete this._data[G]; | |
this._data[I] = d | |
} | |
merge(I) { | |
this._data = Object.assign(Object.assign({}, this._data), I) | |
} | |
} | |
function NO1(I, d) { | |
let G = Object.keys(I); | |
if (G.length <= d) return null; | |
return G.reduce((Z, C) => { | |
let W = I[Z], | |
w = I[C]; | |
if (typeof W === "object" && typeof w === "object") return w.receivedAt < W.receivedAt ? C : Z; | |
return w < W ? C : Z | |
}) | |
} | |
}); | |
var fO1 = Y((QO1) => { | |
Object.defineProperty(QO1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var _b = Y((RO1) => { | |
Object.defineProperty(RO1, "__esModule", { | |
value: !0 | |
}); | |
RO1.SDKType = void 0; | |
var qO1 = {}, | |
Nz; | |
RO1.SDKType = { | |
_get: (I) => { | |
var d; | |
return ((d = qO1[I]) !== null && d !== void 0 ? d : "js-mono") + (Nz !== null && Nz !== void 0 ? Nz : "") | |
}, | |
_setClientType(I, d) { | |
qO1[I] = d | |
}, | |
_setBindingType(I) { | |
if (!Nz || Nz === "-react") Nz = "-" + I | |
} | |
} | |
}); | |
var b21 = Y((hA) => { | |
var hW4 = hA && hA.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(hA, "__esModule", { | |
value: !0 | |
}); | |
hA.ErrorBoundary = hA.EXCEPTION_ENDPOINT = void 0; | |
var jW4 = q7(), | |
kW4 = _b(), | |
xW4 = ME(); | |
hA.EXCEPTION_ENDPOINT = "https://statsigapi.net/v1/sdk_exception"; | |
var EO1 = "[Statsig] UnknownError"; | |
class MO1 { | |
constructor(I, d, G, Z) { | |
this._sdkKey = I, this._options = d, this._emitter = G, this._lastSeenError = Z, this._seen = new Set | |
} | |
wrap(I) { | |
try { | |
let d = I; | |
pW4(d).forEach((G) => { | |
let Z = d[G]; | |
if ("$EB" in Z) return; | |
d[G] = (...C) => { | |
return this._capture(G, () => Z.apply(I, C)) | |
}, d[G].$EB = !0 | |
}) | |
} catch (d) { | |
this._onError("eb:wrap", d) | |
} | |
} | |
logError(I, d) { | |
this._onError(I, d) | |
} | |
getLastSeenErrorAndReset() { | |
let I = this._lastSeenError; | |
return this._lastSeenError = void 0, I !== null && I !== void 0 ? I : null | |
} | |
attachErrorIfNoneExists(I) { | |
if (this._lastSeenError) return; | |
this._lastSeenError = vO1(I) | |
} | |
_capture(I, d) { | |
try { | |
let G = d(); | |
if (G && G instanceof Promise) return G.catch((Z) => this._onError(I, Z)); | |
return G | |
} catch (G) { | |
return this._onError(I, G), null | |
} | |
} | |
_onError(I, d) { | |
try { | |
jW4.Log.warn(`Caught error in ${I}`, { | |
error: d | |
}), (() => hW4(this, void 0, void 0, function*() { | |
var Z, C, W, w, B, A, V; | |
let X = d ? d : Error(EO1), | |
_ = X instanceof Error, | |
F = _ ? X.name : "No Name", | |
g = vO1(X); | |
if (this._lastSeenError = g, this._seen.has(F)) return; | |
if (this._seen.add(F), (C = (Z = this._options) === null || Z === void 0 ? void 0 : Z.networkConfig) === null || C === void 0 ? void 0 : C.preventAllNetworkTraffic) { | |
(W = this._emitter) === null || W === void 0 || W.call(this, { | |
name: "error", | |
error: d, | |
tag: I | |
}); | |
return | |
} | |
let J = kW4.SDKType._get(this._sdkKey), | |
K = xW4.StatsigMetadataProvider.get(), | |
Q = _ ? X.stack : cW4(X), | |
E = JSON.stringify(Object.assign({ | |
tag: I, | |
exception: F, | |
info: Q | |
}, Object.assign(Object.assign({}, K), { | |
sdkType: J | |
}))); | |
yield((A = (B = (w = this._options) === null || w === void 0 ? void 0 : w.networkConfig) === null || B === void 0 ? void 0 : B.networkOverrideFunc) !== null && A !== void 0 ? A : fetch)(hA.EXCEPTION_ENDPOINT, { | |
method: "POST", | |
headers: { | |
"STATSIG-API-KEY": this._sdkKey, | |
"STATSIG-SDK-TYPE": String(J), | |
"STATSIG-SDK-VERSION": String(K.sdkVersion), | |
"Content-Type": "application/json" | |
}, | |
body: E | |
}), (V = this._emitter) === null || V === void 0 || V.call(this, { | |
name: "error", | |
error: d, | |
tag: I | |
}) | |
}))().then(() => {}).catch(() => {}) | |
} catch (G) {} | |
} | |
} | |
hA.ErrorBoundary = MO1; | |
function vO1(I) { | |
if (I instanceof Error) return I; | |
else if (typeof I === "string") return new Error(I); | |
else return new Error("An unknown error occurred.") | |
} | |
function cW4(I) { | |
try { | |
return JSON.stringify(I) | |
} catch (d) { | |
return EO1 | |
} | |
} | |
function pW4(I) { | |
let d = new Set, | |
G = Object.getPrototypeOf(I); | |
while (G && G !== Object.prototype) Object.getOwnPropertyNames(G).filter((Z) => typeof(G === null || G === void 0 ? void 0 : G[Z]) === "function").forEach((Z) => d.add(Z)), G = Object.getPrototypeOf(G); | |
return Array.from(d) | |
} | |
}); | |
var LO1 = Y((SO1) => { | |
Object.defineProperty(SO1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var PO1 = Y((yO1) => { | |
Object.defineProperty(yO1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var uO1 = Y(($O1) => { | |
Object.defineProperty($O1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var h21 = Y((TO1) => { | |
Object.defineProperty(TO1, "__esModule", { | |
value: !0 | |
}); | |
TO1.createMemoKey = TO1.MemoPrefix = void 0; | |
TO1.MemoPrefix = { | |
_gate: "g", | |
_dynamicConfig: "c", | |
_experiment: "e", | |
_layer: "l", | |
_paramStore: "p" | |
}; | |
var iW4 = new Set([]), | |
nW4 = new Set(["userPersistedValues"]); | |
function rW4(I, d, G) { | |
let Z = `${I}|${d}`; | |
if (!G) return Z; | |
for (let C of Object.keys(G)) { | |
if (nW4.has(C)) return; | |
if (iW4.has(C)) Z += `|${C}=true`; | |
else Z += `|${C}=${G[C]}` | |
} | |
return Z | |
} | |
TO1.createMemoKey = rW4 | |
}); | |
var mO1 = Y((zz) => { | |
var sW4 = zz && zz.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(zz, "__esModule", { | |
value: !0 | |
}); | |
zz._fetchTxtRecords = void 0; | |
var oW4 = new Uint8Array([0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 13, 102, 101, 97, 116, 117, 114, 101, 97, 115, 115, 101, 116, 115, 3, 111, 114, 103, 0, 0, 16, 0, 1]), | |
eW4 = "https://cloudflare-dns.com/dns-query", | |
tW4 = ["i", "e", "d"], | |
Iw4 = 200; | |
function dw4(I) { | |
return sW4(this, void 0, void 0, function*() { | |
let d = yield I(eW4, { | |
method: "POST", | |
headers: { | |
"Content-Type": "application/dns-message", | |
Accept: "application/dns-message" | |
}, | |
body: oW4 | |
}); | |
if (!d.ok) { | |
let C = new Error("Failed to fetch TXT records from DNS"); | |
throw C.name = "DnsTxtFetchError", C | |
} | |
let G = yield d.arrayBuffer(), Z = new Uint8Array(G); | |
return Gw4(Z) | |
}) | |
} | |
zz._fetchTxtRecords = dw4; | |
function Gw4(I) { | |
let d = I.findIndex((Z, C) => C < Iw4 && String.fromCharCode(Z) === "=" && tW4.includes(String.fromCharCode(I[C - 1]))); | |
if (d === -1) { | |
let Z = new Error("Failed to parse TXT records from DNS"); | |
throw Z.name = "DnsTxtParseError", Z | |
} | |
let G = ""; | |
for (let Z = d - 1; Z < I.length; Z++) G += String.fromCharCode(I[Z]); | |
return G.split(",") | |
} | |
}); | |
var cO1 = Y((gY) => { | |
var lO1 = gY && gY.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(gY, "__esModule", { | |
value: !0 | |
}); | |
gY._isDomainFailure = gY.NetworkFallbackResolver = void 0; | |
var Zw4 = mO1(), | |
Cw4 = Hz(), | |
Ww4 = q7(), | |
k21 = bA(), | |
bO1 = 604800000, | |
ww4 = 14400000; | |
class jO1 { | |
constructor(I) { | |
var d; | |
this._fallbackInfo = null, this._errorBoundary = null, this._dnsQueryCooldowns = {}, this._networkOverrideFunc = (d = I.networkConfig) === null || d === void 0 ? void 0 : d.networkOverrideFunc | |
} | |
setErrorBoundary(I) { | |
this._errorBoundary = I | |
} | |
tryBumpExpiryTime(I, d) { | |
var G; | |
let Z = (G = this._fallbackInfo) === null || G === void 0 ? void 0 : G[d.endpoint]; | |
if (!Z) return; | |
Z.expiryTime = Date.now() + bO1, j21(I, Object.assign(Object.assign({}, this._fallbackInfo), { | |
[d.endpoint]: Z | |
})) | |
} | |
getActiveFallbackUrl(I, d) { | |
var G, Z; | |
let C = this._fallbackInfo; | |
if (C == null) C = (G = Bw4(I)) !== null && G !== void 0 ? G : {}, this._fallbackInfo = C; | |
let W = C[d.endpoint]; | |
if (!W || Date.now() > ((Z = W.expiryTime) !== null && Z !== void 0 ? Z : 0)) return delete C[d.endpoint], this._fallbackInfo = C, j21(I, this._fallbackInfo), null; | |
if (W.url) return W.url; | |
return null | |
} | |
getFallbackFromProvided(I) { | |
let d = hO1(I); | |
if (d) return I.replace(d, ""); | |
return null | |
} | |
tryFetchUpdatedFallbackInfo(I, d, G, Z) { | |
var C, W; | |
return lO1(this, void 0, void 0, function*() { | |
try { | |
if (!kO1(G, Z)) return !1; | |
let B = d.customUrl == null && d.fallbackUrls == null ? yield this._tryFetchFallbackUrlsFromNetwork(d): d.fallbackUrls, A = this._pickNewFallbackUrl((C = this._fallbackInfo) === null || C === void 0 ? void 0 : C[d.endpoint], B); | |
if (!A) return !1; | |
return this._updateFallbackInfoWithNewUrl(I, d.endpoint, A), !0 | |
} catch (w) { | |
return (W = this._errorBoundary) === null || W === void 0 || W.logError("tryFetchUpdatedFallbackInfo", w), !1 | |
} | |
}) | |
} | |
_updateFallbackInfoWithNewUrl(I, d, G) { | |
var Z, C, W; | |
let w = { | |
url: G, | |
expiryTime: Date.now() + bO1, | |
previous: [] | |
}, | |
B = (Z = this._fallbackInfo) === null || Z === void 0 ? void 0 : Z[d]; | |
if (B) w.previous.push(...B.previous); | |
if (w.previous.length > 10) w.previous = []; | |
let A = (W = (C = this._fallbackInfo) === null || C === void 0 ? void 0 : C[d]) === null || W === void 0 ? void 0 : W.url; | |
if (A != null) w.previous.push(A); | |
this._fallbackInfo = Object.assign(Object.assign({}, this._fallbackInfo), { | |
[d]: w | |
}), j21(I, this._fallbackInfo) | |
} | |
_tryFetchFallbackUrlsFromNetwork(I) { | |
var d; | |
return lO1(this, void 0, void 0, function*() { | |
let G = this._dnsQueryCooldowns[I.endpoint]; | |
if (G && Date.now() < G) return null; | |
this._dnsQueryCooldowns[I.endpoint] = Date.now() + ww4; | |
let Z = [], | |
C = yield Zw4._fetchTxtRecords((d = this._networkOverrideFunc) !== null && d !== void 0 ? d : fetch), W = hO1(I.defaultUrl); | |
for (let w of C) { | |
if (!w.startsWith(I.endpointDnsKey + "=")) continue; | |
let B = w.split("="); | |
if (B.length > 1) { | |
let A = B[1]; | |
if (A.endsWith("/")) A = A.slice(0, -1); | |
Z.push(`https://${A}${W}`) | |
} | |
} | |
return Z | |
}) | |
} | |
_pickNewFallbackUrl(I, d) { | |
var G; | |
if (d == null) return null; | |
let Z = new Set((G = I === null || I === void 0 ? void 0 : I.previous) !== null && G !== void 0 ? G : []), | |
C = I === null || I === void 0 ? void 0 : I.url, | |
W = null; | |
for (let w of d) { | |
let B = w.endsWith("/") ? w.slice(0, -1) : w; | |
if (!Z.has(w) && B !== C) { | |
W = B; | |
break | |
} | |
} | |
return W | |
} | |
} | |
gY.NetworkFallbackResolver = jO1; | |
function kO1(I, d) { | |
var G; | |
let Z = (G = I === null || I === void 0 ? void 0 : I.toLowerCase()) !== null && G !== void 0 ? G : ""; | |
return d || Z.includes("uncaught exception") || Z.includes("failed to fetch") || Z.includes("networkerror when attempting to fetch resource") | |
} | |
gY._isDomainFailure = kO1; | |
function xO1(I) { | |
return `statsig.network_fallback.${Cw4._DJB2(I)}` | |
} | |
function j21(I, d) { | |
let G = xO1(I); | |
if (!d || Object.keys(d).length === 0) { | |
k21.Storage.removeItem(G); | |
return | |
} | |
k21.Storage.setItem(G, JSON.stringify(d)) | |
} | |
function Bw4(I) { | |
let d = xO1(I), | |
G = k21.Storage.getItem(d); | |
if (!G) return null; | |
try { | |
return JSON.parse(G) | |
} catch (Z) { | |
return Ww4.Log.error("Failed to parse FallbackInfo"), null | |
} | |
} | |
function hO1(I) { | |
try { | |
return new URL(I).pathname | |
} catch (d) { | |
return null | |
} | |
} | |
}); | |
var Hb = Y((oO1) => { | |
Object.defineProperty(oO1, "__esModule", { | |
value: !0 | |
}); | |
oO1.StatsigSession = oO1.SessionID = void 0; | |
var Aw4 = qE(), | |
Vw4 = q7(), | |
iO1 = bA(), | |
nO1 = wb(), | |
rO1 = 1800000, | |
aO1 = 14400000, | |
Db = {}; | |
oO1.SessionID = { | |
get: (I) => { | |
return oO1.StatsigSession.get(I).data.sessionID | |
} | |
}; | |
oO1.StatsigSession = { | |
get: (I) => { | |
if (Db[I] == null) Db[I] = Xw4(I); | |
let d = Db[I]; | |
return _w4(d) | |
}, | |
overrideInitialSessionID: (I, d) => { | |
Db[d] = Yw4(I, d) | |
} | |
}; | |
function Xw4(I) { | |
let d = gw4(I), | |
G = Date.now(); | |
if (!d) d = { | |
sessionID: nO1.getUUID(), | |
startTime: G, | |
lastUpdate: G | |
}; | |
return { | |
data: d, | |
sdkKey: I | |
} | |
} | |
function Yw4(I, d) { | |
let G = Date.now(); | |
return { | |
data: { | |
sessionID: I, | |
startTime: G, | |
lastUpdate: G | |
}, | |
sdkKey: d | |
} | |
} | |
function _w4(I) { | |
let d = Date.now(), | |
G = I.data; | |
if (Dw4(G) || Hw4(G)) G.sessionID = nO1.getUUID(), G.startTime = d; | |
G.lastUpdate = d, Fw4(G, I.sdkKey), clearTimeout(I.idleTimeoutID), clearTimeout(I.ageTimeoutID); | |
let Z = d - G.startTime, | |
C = I.sdkKey; | |
return I.idleTimeoutID = pO1(C, rO1), I.ageTimeoutID = pO1(C, aO1 - Z), I | |
} | |
function pO1(I, d) { | |
return setTimeout(() => { | |
let G = __STATSIG__ === null || __STATSIG__ === void 0 ? void 0 : __STATSIG__.instance(I); | |
if (G) G.$emt({ | |
name: "session_expired" | |
}) | |
}, d) | |
} | |
function Dw4({ | |
lastUpdate: I | |
}) { | |
return Date.now() - I > rO1 | |
} | |
function Hw4({ | |
startTime: I | |
}) { | |
return Date.now() - I > aO1 | |
} | |
function sO1(I) { | |
return `statsig.session_id.${Aw4._getStorageKey(I)}` | |
} | |
function Fw4(I, d) { | |
let G = sO1(d); | |
try { | |
iO1._setObjectInStorage(G, I) | |
} catch (Z) { | |
Vw4.Log.warn("Failed to save SessionID") | |
} | |
} | |
function gw4(I) { | |
let d = sO1(I); | |
return iO1._getObjectFromStorage(d) | |
} | |
}); | |
var c21 = Y((eO1) => { | |
Object.defineProperty(eO1, "__esModule", { | |
value: !0 | |
}); | |
eO1.ErrorTag = void 0; | |
eO1.ErrorTag = { | |
NetworkError: "NetworkError" | |
} | |
}); | |
var Bm1 = Y((fz) => { | |
var Qz = fz && fz.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(fz, "__esModule", { | |
value: !0 | |
}); | |
fz.NetworkCore = void 0; | |
hF(); | |
var Kw4 = hF(), | |
p21 = rl(), | |
Fb = q7(), | |
fw = RE(), | |
Nw4 = cO1(), | |
Im1 = _b(), | |
zw4 = jF(), | |
dm1 = Hb(), | |
Qw4 = Ab(), | |
fw4 = c21(), | |
Gm1 = ME(), | |
qw4 = Cb(), | |
Rw4 = 1e4, | |
Uw4 = 500, | |
vw4 = 30000, | |
Ew4 = 1000, | |
Wm1 = 50, | |
Mw4 = Wm1 / Ew4, | |
Sw4 = new Set([408, 500, 502, 503, 504, 522, 524, 599]); | |
class wm1 { | |
constructor(I, d) { | |
if (this._emitter = d, this._errorBoundary = null, this._timeout = Rw4, this._netConfig = {}, this._options = {}, this._leakyBucket = {}, this._lastUsedInitUrl = null, I) this._options = I; | |
if (this._options.networkConfig) this._netConfig = this._options.networkConfig; | |
if (this._netConfig.networkTimeoutMs) this._timeout = this._netConfig.networkTimeoutMs; | |
this._fallbackResolver = new Nw4.NetworkFallbackResolver(this._options) | |
} | |
setErrorBoundary(I) { | |
this._errorBoundary = I, this._errorBoundary.wrap(this), this._errorBoundary.wrap(this._fallbackResolver), this._fallbackResolver.setErrorBoundary(I) | |
} | |
isBeaconSupported() { | |
return typeof navigator !== "undefined" && typeof navigator.sendBeacon === "function" | |
} | |
getLastUsedInitUrlAndReset() { | |
let I = this._lastUsedInitUrl; | |
return this._lastUsedInitUrl = null, I | |
} | |
beacon(I) { | |
return Qz(this, void 0, void 0, function*() { | |
if (!Zm1(I)) return !1; | |
let d = this._getInternalRequestArgs("POST", I), | |
G = yield this._getPopulatedBody(d, I.data), Z = yield this._getPopulatedURL(d), C = navigator; | |
return C.sendBeacon.bind(C)(Z, G) | |
}) | |
} | |
post(I) { | |
return Qz(this, void 0, void 0, function*() { | |
let d = this._getInternalRequestArgs("POST", I); | |
if (d.body = yield this._getPopulatedBody(d, I.data), I.isStatsigEncodable) d.body = this._attemptToEncodeString(d, d.body); | |
return this._sendRequest(d) | |
}) | |
} | |
get(I) { | |
let d = this._getInternalRequestArgs("GET", I); | |
return this._sendRequest(d) | |
} | |
_sendRequest(I) { | |
var d, G, Z, C; | |
return Qz(this, void 0, void 0, function*() { | |
if (!Zm1(I)) return null; | |
if (this._netConfig.preventAllNetworkTraffic) return null; | |
let { | |
method: W, | |
body: w, | |
retries: B, | |
attempt: A | |
} = I, V = I.urlConfig.endpoint; | |
if (this._isRateLimited(V)) return Fb.Log.warn(`Request to ${V} was blocked because you are making requests too frequently.`), null; | |
let X = A !== null && A !== void 0 ? A : 1, | |
_ = typeof AbortController !== "undefined" ? new AbortController : null, | |
F = setTimeout(() => { | |
_ === null || _ === void 0 || _.abort(`Timeout of ${this._timeout}ms expired.`) | |
}, this._timeout), | |
g = yield this._getPopulatedURL(I), J = null, K = qw4._isUnloading(); | |
try { | |
let Q = { | |
method: W, | |
body: w, | |
headers: Object.assign({}, I.headers), | |
signal: _ === null || _ === void 0 ? void 0 : _.signal, | |
priority: I.priority, | |
keepalive: K | |
}; | |
Pw4(I, X); | |
let E = this._leakyBucket[V]; | |
if (E) E.lastRequestTime = Date.now(), this._leakyBucket[V] = E; | |
if (J = yield((d = this._netConfig.networkOverrideFunc) !== null && d !== void 0 ? d : fetch)(g, Q), clearTimeout(F), !J.ok) { | |
let $ = yield J.text().catch(() => "No Text"), h = new Error(`NetworkError: ${g} ${$}`); | |
throw h.name = "NetworkError", h | |
} | |
let P = yield J.text(); | |
return Cm1(I, J, X, P), this._fallbackResolver.tryBumpExpiryTime(I.sdkKey, I.urlConfig), { | |
body: P, | |
code: J.status | |
} | |
} catch (Q) { | |
let E = Lw4(_, Q), | |
S = yw4(_); | |
if (Cm1(I, J, X, "", Q), yield this._fallbackResolver.tryFetchUpdatedFallbackInfo(I.sdkKey, I.urlConfig, E, S)) I.fallbackUrl = this._fallbackResolver.getActiveFallbackUrl(I.sdkKey, I.urlConfig); | |
if (!B || X > B || !Sw4.has((G = J === null || J === void 0 ? void 0 : J.status) !== null && G !== void 0 ? G : 500)) { | |
(Z = this._emitter) === null || Z === void 0 || Z.call(this, { | |
name: "error", | |
error: Q, | |
tag: fw4.ErrorTag.NetworkError, | |
requestArgs: I | |
}); | |
let $ = `A networking error occurred during ${W} request to ${g}.`; | |
return Fb.Log.error($, E, Q), (C = this._errorBoundary) === null || C === void 0 || C.attachErrorIfNoneExists($), null | |
} | |
return yield $w4(X), this._sendRequest(Object.assign(Object.assign({}, I), { | |
retries: B, | |
attempt: X + 1 | |
})) | |
} | |
}) | |
} | |
_isRateLimited(I) { | |
var d; | |
let G = Date.now(), | |
Z = (d = this._leakyBucket[I]) !== null && d !== void 0 ? d : { | |
count: 0, | |
lastRequestTime: G | |
}, | |
C = G - Z.lastRequestTime, | |
W = Math.floor(C * Mw4); | |
if (Z.count = Math.max(0, Z.count - W), Z.count >= Wm1) return !0; | |
return Z.count += 1, Z.lastRequestTime = G, this._leakyBucket[I] = Z, !1 | |
} | |
_getPopulatedURL(I) { | |
var d; | |
return Qz(this, void 0, void 0, function*() { | |
let G = (d = I.fallbackUrl) !== null && d !== void 0 ? d : I.urlConfig.getUrl(); | |
if (I.urlConfig.endpoint === fw.Endpoint._initialize || I.urlConfig.endpoint === fw.Endpoint._download_config_specs) this._lastUsedInitUrl = G; | |
let Z = Object.assign({ | |
[fw.NetworkParam.SdkKey]: I.sdkKey, | |
[fw.NetworkParam.SdkType]: Im1.SDKType._get(I.sdkKey), | |
[fw.NetworkParam.SdkVersion]: Gm1.SDK_VERSION, | |
[fw.NetworkParam.Time]: String(Date.now()), | |
[fw.NetworkParam.SessionID]: dm1.SessionID.get(I.sdkKey) | |
}, I.params), | |
C = Object.keys(Z).map((W) => { | |
return `${encodeURIComponent(W)}=${encodeURIComponent(Z[W])}` | |
}).join("&"); | |
return `${G}${C?`?${C}`:""}` | |
}) | |
} | |
_getPopulatedBody(I, d) { | |
return Qz(this, void 0, void 0, function*() { | |
let { | |
sdkKey: G, | |
fallbackUrl: Z | |
} = I, C = Qw4.StableID.get(G), W = dm1.SessionID.get(G), w = Im1.SDKType._get(G); | |
return JSON.stringify(Object.assign(Object.assign({}, d), { | |
statsigMetadata: Object.assign(Object.assign({}, Gm1.StatsigMetadataProvider.get()), { | |
stableID: C, | |
sessionID: W, | |
sdkType: w, | |
fallbackUrl: Z | |
}) | |
})) | |
}) | |
} | |
_attemptToEncodeString(I, d) { | |
var G, Z; | |
let C = zw4._getWindowSafe(); | |
if (this._options.disableStatsigEncoding || Kw4._getStatsigGlobalFlag("no-encode") != null || !(C === null || C === void 0 ? void 0 : C.btoa)) return d; | |
try { | |
let W = (G = C.btoa(d).split("").reverse().join("")) !== null && G !== void 0 ? G : d; | |
return I.params = Object.assign(Object.assign({}, (Z = I.params) !== null && Z !== void 0 ? Z : {}), { | |
[fw.NetworkParam.StatsigEncoded]: "1" | |
}), W | |
} catch (W) { | |
return Fb.Log.warn(`Request encoding failed for ${I.urlConfig.getUrl()}`), d | |
} | |
} | |
_getInternalRequestArgs(I, d) { | |
let G = this._fallbackResolver.getActiveFallbackUrl(d.sdkKey, d.urlConfig); | |
return Object.assign(Object.assign({}, d), { | |
method: I, | |
fallbackUrl: G | |
}) | |
} | |
} | |
fz.NetworkCore = wm1; | |
var Zm1 = (I) => { | |
if (!I.sdkKey) return Fb.Log.warn("Unable to make request without an SDK key"), !1; | |
return !0 | |
}; | |
function Lw4(I, d) { | |
if ((I === null || I === void 0 ? void 0 : I.signal.aborted) && typeof I.signal.reason === "string") return I.signal.reason; | |
if (typeof d === "string") return d; | |
if (d instanceof Error) return `${d.name}: ${d.message}`; | |
return "Unknown Error" | |
} | |
function yw4(I) { | |
return (I === null || I === void 0 ? void 0 : I.signal.aborted) && typeof I.signal.reason === "string" && I.signal.reason.includes("Timeout") || !1 | |
} | |
function Pw4(I, d) { | |
if (I.urlConfig.endpoint !== fw.Endpoint._initialize) return; | |
p21.Diagnostics._markInitNetworkReqStart(I.sdkKey, { | |
attempt: d | |
}) | |
} | |
function Cm1(I, d, G, Z, C) { | |
if (I.urlConfig.endpoint !== fw.Endpoint._initialize) return; | |
p21.Diagnostics._markInitNetworkReqEnd(I.sdkKey, p21.Diagnostics._getDiagnosticsData(d, G, Z, C)) | |
} | |
function $w4(I) { | |
return Qz(this, void 0, void 0, function*() { | |
yield new Promise((d) => setTimeout(d, Math.min(Uw4 * (I * I), vw4))) | |
}) | |
} | |
}); | |
var Vm1 = Y((Am1) => { | |
Object.defineProperty(Am1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var Ym1 = Y((Xm1) => { | |
Object.defineProperty(Xm1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var Dm1 = Y((qz) => { | |
var uw4 = qz && qz.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(qz, "__esModule", { | |
value: !0 | |
}); | |
qz.StatsigClientBase = void 0; | |
hF(); | |
var Tw4 = hF(), | |
Ow4 = b21(), | |
mw4 = u21(), | |
i21 = q7(), | |
lw4 = h21(), | |
bw4 = jF(), | |
hw4 = Hb(), | |
gb = bA(), | |
jw4 = 3000; | |
class _m1 { | |
constructor(I, d, G, Z) { | |
var C; | |
this.loadingStatus = "Uninitialized", this._initializePromise = null, this._listeners = {}; | |
let W = this.$emt.bind(this); | |
(Z === null || Z === void 0 ? void 0 : Z.logLevel) != null && (i21.Log.level = Z.logLevel), (Z === null || Z === void 0 ? void 0 : Z.disableStorage) && gb.Storage._setDisabled(!0), (Z === null || Z === void 0 ? void 0 : Z.initialSessionID) && hw4.StatsigSession.overrideInitialSessionID(Z.initialSessionID, I), (Z === null || Z === void 0 ? void 0 : Z.storageProvider) && gb.Storage._setProvider(Z.storageProvider), this._sdkKey = I, this._options = Z !== null && Z !== void 0 ? Z : {}, this._memoCache = {}, this.overrideAdapter = (C = Z === null || Z === void 0 ? void 0 : Z.overrideAdapter) !== null && C !== void 0 ? C : null, this._logger = new mw4.EventLogger(I, W, G, Z), this._errorBoundary = new Ow4.ErrorBoundary(I, Z, W), this._errorBoundary.wrap(this), this._errorBoundary.wrap(d), this._errorBoundary.wrap(this._logger), G.setErrorBoundary(this._errorBoundary), this.dataAdapter = d, this.dataAdapter.attach(I, Z), this.storageProvider = gb.Storage, this._primeReadyRipcord(), kw4(I, this) | |
} | |
updateRuntimeOptions(I) { | |
if (I.disableLogging != null) this._options.disableLogging = I.disableLogging, this._logger.setLoggingDisabled(I.disableLogging); | |
if (I.disableStorage != null) this._options.disableStorage = I.disableStorage, gb.Storage._setDisabled(I.disableStorage) | |
} | |
flush() { | |
return this._logger.flush() | |
} | |
shutdown() { | |
return uw4(this, void 0, void 0, function*() { | |
this.$emt({ | |
name: "pre_shutdown" | |
}), this._setStatus("Uninitialized", null), this._initializePromise = null, yield this._logger.stop() | |
}) | |
} | |
on(I, d) { | |
if (!this._listeners[I]) this._listeners[I] = []; | |
this._listeners[I].push(d) | |
} | |
off(I, d) { | |
if (this._listeners[I]) { | |
let G = this._listeners[I].indexOf(d); | |
if (G !== -1) this._listeners[I].splice(G, 1) | |
} | |
} | |
$on(I, d) { | |
d.__isInternal = !0, this.on(I, d) | |
} | |
$emt(I) { | |
var d; | |
let G = (Z) => { | |
try { | |
Z(I) | |
} catch (C) { | |
if (Z.__isInternal === !0) { | |
this._errorBoundary.logError(`__emit:${I.name}`, C); | |
return | |
} | |
i21.Log.error("An error occurred in a StatsigClientEvent listener. This is not an issue with Statsig.", I) | |
} | |
}; | |
if (this._listeners[I.name]) this._listeners[I.name].forEach((Z) => G(Z)); | |
(d = this._listeners["*"]) === null || d === void 0 || d.forEach(G) | |
} | |
_setStatus(I, d) { | |
this.loadingStatus = I, this._memoCache = {}, this.$emt({ | |
name: "values_updated", | |
status: I, | |
values: d | |
}) | |
} | |
_enqueueExposure(I, d, G) { | |
if ((G === null || G === void 0 ? void 0 : G.disableExposureLog) === !0) { | |
this._logger.incrementNonExposureCount(I); | |
return | |
} | |
this._logger.enqueue(d) | |
} | |
_memoize(I, d) { | |
return (G, Z) => { | |
if (this._options.disableEvaluationMemoization) return d(G, Z); | |
let C = lw4.createMemoKey(I, G, Z); | |
if (!C) return d(G, Z); | |
if (!(C in this._memoCache)) { | |
if (Object.keys(this._memoCache).length >= jw4) this._memoCache = {}; | |
this._memoCache[C] = d(G, Z) | |
} | |
return this._memoCache[C] | |
} | |
} | |
} | |
qz.StatsigClientBase = _m1; | |
function kw4(I, d) { | |
var G; | |
if (bw4._isServerEnv()) return; | |
let Z = Tw4._getStatsigGlobal(), | |
C = (G = Z.instances) !== null && G !== void 0 ? G : {}, | |
W = d; | |
if (C[I] != null) i21.Log.warn("Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys."); | |
if (C[I] = W, !Z.firstInstance) Z.firstInstance = W; | |
Z.instances = C, __STATSIG__ = Z | |
} | |
}); | |
var gm1 = Y((Hm1) => { | |
Object.defineProperty(Hm1, "__esModule", { | |
value: !0 | |
}); | |
Hm1.DataAdapterCachePrefix = void 0; | |
Hm1.DataAdapterCachePrefix = "statsig.cached" | |
}); | |
var Km1 = Y((Jm1) => { | |
Object.defineProperty(Jm1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var zm1 = Y((Nm1) => { | |
Object.defineProperty(Nm1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var Rm1 = Y((fm1) => { | |
Object.defineProperty(fm1, "__esModule", { | |
value: !0 | |
}); | |
fm1._makeTypedGet = fm1._mergeOverride = fm1._makeLayer = fm1._makeExperiment = fm1._makeDynamicConfig = fm1._makeFeatureGate = void 0; | |
var xw4 = q7(), | |
cw4 = al(), | |
pw4 = "default"; | |
function n21(I, d, G, Z) { | |
var C; | |
return { | |
name: I, | |
details: d, | |
ruleID: (C = G === null || G === void 0 ? void 0 : G.rule_id) !== null && C !== void 0 ? C : pw4, | |
__evaluation: G, | |
value: Z | |
} | |
} | |
function iw4(I, d, G) { | |
return n21(I, d, G, (G === null || G === void 0 ? void 0 : G.value) === !0) | |
} | |
fm1._makeFeatureGate = iw4; | |
function Qm1(I, d, G) { | |
var Z; | |
let C = (Z = G === null || G === void 0 ? void 0 : G.value) !== null && Z !== void 0 ? Z : {}; | |
return Object.assign(Object.assign({}, n21(I, d, G, C)), { | |
get: Jb(I, G === null || G === void 0 ? void 0 : G.value) | |
}) | |
} | |
fm1._makeDynamicConfig = Qm1; | |
function nw4(I, d, G) { | |
var Z; | |
let C = Qm1(I, d, G); | |
return Object.assign(Object.assign({}, C), { | |
groupName: (Z = G === null || G === void 0 ? void 0 : G.group_name) !== null && Z !== void 0 ? Z : null | |
}) | |
} | |
fm1._makeExperiment = nw4; | |
function rw4(I, d, G, Z) { | |
var C, W; | |
return Object.assign(Object.assign({}, n21(I, d, G, void 0)), { | |
get: Jb(I, G === null || G === void 0 ? void 0 : G.value, Z), | |
groupName: (C = G === null || G === void 0 ? void 0 : G.group_name) !== null && C !== void 0 ? C : null, | |
__value: (W = G === null || G === void 0 ? void 0 : G.value) !== null && W !== void 0 ? W : {} | |
}) | |
} | |
fm1._makeLayer = rw4; | |
function aw4(I, d, G, Z) { | |
return Object.assign(Object.assign(Object.assign({}, I), d), { | |
get: Jb(I.name, G, Z) | |
}) | |
} | |
fm1._mergeOverride = aw4; | |
function Jb(I, d, G) { | |
return (Z, C) => { | |
var W; | |
let w = (W = d === null || d === void 0 ? void 0 : d[Z]) !== null && W !== void 0 ? W : null; | |
if (w == null) return C !== null && C !== void 0 ? C : null; | |
if (C != null && !cw4._isTypeMatch(w, C)) return xw4.Log.warn(`Parameter type mismatch. '${I}.${Z}' was found to be type '${typeof w}' but fallback/return type is '${typeof C}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`), C !== null && C !== void 0 ? C : null; | |
return G === null || G === void 0 || G(Z), w | |
} | |
} | |
fm1._makeTypedGet = Jb | |
}); | |
var vm1 = Y((Um1) => { | |
Object.defineProperty(Um1, "__esModule", { | |
value: !0 | |
}) | |
}); | |
var Sm1 = Y((Em1) => { | |
Object.defineProperty(Em1, "__esModule", { | |
value: !0 | |
}); | |
Em1.UPDATE_DETAIL_ERROR_MESSAGES = Em1.createUpdateDetails = void 0; | |
var dB4 = (I, d, G, Z, C, W) => { | |
return { | |
duration: G, | |
source: d, | |
success: I, | |
error: Z, | |
sourceUrl: C, | |
warnings: W | |
} | |
}; | |
Em1.createUpdateDetails = dB4; | |
Em1.UPDATE_DETAIL_ERROR_MESSAGES = { | |
NO_NETWORK_DATA: "No data was returned from the network. This may be due to a network timeout if a timeout value was specified in the options or ad blocker error." | |
} | |
}); | |
var $m1 = Y((ym1) => { | |
Object.defineProperty(ym1, "__esModule", { | |
value: !0 | |
}); | |
ym1.SDKFlags = void 0; | |
var Lm1 = {}; | |
ym1.SDKFlags = { | |
setFlags: (I, d) => { | |
Lm1[I] = d | |
}, | |
get: (I, d) => { | |
var G, Z; | |
return (Z = (G = Lm1[I]) === null || G === void 0 ? void 0 : G[d]) !== null && Z !== void 0 ? Z : !1 | |
} | |
} | |
}); | |
var JY = Y((n2) => { | |
var ZB4 = n2 && n2.__createBinding || (Object.create ? function(I, d, G, Z) { | |
if (Z === void 0) Z = G; | |
var C = Object.getOwnPropertyDescriptor(d, G); | |
if (!C || ("get" in C ? !d.__esModule : C.writable || C.configurable)) C = { | |
enumerable: !0, | |
get: function() { | |
return d[G] | |
} | |
}; | |
Object.defineProperty(I, Z, C) | |
} : function(I, d, G, Z) { | |
if (Z === void 0) Z = G; | |
I[Z] = d[G] | |
}), | |
l4 = n2 && n2.__exportStar || function(I, d) { | |
for (var G in I) | |
if (G !== "default" && !Object.prototype.hasOwnProperty.call(d, G)) ZB4(d, I, G) | |
}; | |
Object.defineProperty(n2, "__esModule", { | |
value: !0 | |
}); | |
n2.Storage = n2.Log = n2.EventLogger = n2.Diagnostics = void 0; | |
hF(); | |
var CB4 = rl(); | |
Object.defineProperty(n2, "Diagnostics", { | |
enumerable: !0, | |
get: function() { | |
return CB4.Diagnostics | |
} | |
}); | |
var WB4 = u21(); | |
Object.defineProperty(n2, "EventLogger", { | |
enumerable: !0, | |
get: function() { | |
return WB4.EventLogger | |
} | |
}); | |
var um1 = q7(); | |
Object.defineProperty(n2, "Log", { | |
enumerable: !0, | |
get: function() { | |
return um1.Log | |
} | |
}); | |
var wB4 = ME(), | |
BB4 = bA(); | |
Object.defineProperty(n2, "Storage", { | |
enumerable: !0, | |
get: function() { | |
return BB4.Storage | |
} | |
}); | |
l4(hF(), n2); | |
l4(qE(), n2); | |
l4(ZO1(), n2); | |
l4(zO1(), n2); | |
l4(rl(), n2); | |
l4(fO1(), n2); | |
l4(b21(), n2); | |
l4(LO1(), n2); | |
l4(PO1(), n2); | |
l4(Hz(), n2); | |
l4(uO1(), n2); | |
l4(q7(), n2); | |
l4(h21(), n2); | |
l4(RE(), n2); | |
l4(Bm1(), n2); | |
l4(Vm1(), n2); | |
l4(Ym1(), n2); | |
l4(jF(), n2); | |
l4(_b(), n2); | |
l4(Hb(), n2); | |
l4(Ab(), n2); | |
l4(Dm1(), n2); | |
l4(c21(), n2); | |
l4(gm1(), n2); | |
l4(v21(), n2); | |
l4(ME(), n2); | |
l4(Km1(), n2); | |
l4(zm1(), n2); | |
l4(Rm1(), n2); | |
l4(vm1(), n2); | |
l4(O21(), n2); | |
l4(bA(), n2); | |
l4(m21(), n2); | |
l4(al(), n2); | |
l4(S21(), n2); | |
l4(wb(), n2); | |
l4(Cb(), n2); | |
l4(Sm1(), n2); | |
l4($m1(), n2); | |
__STATSIG__ = Object.assign(Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), { | |
Log: um1.Log, | |
SDK_VERSION: wB4.SDK_VERSION | |
}) | |
}); | |
var mm1 = Y((Om1) => { | |
Object.defineProperty(Om1, "__esModule", { | |
value: !0 | |
}); | |
var KY = JY(); | |
class Tm1 { | |
constructor(I) { | |
this._sdkKey = I, this._rawValues = null, this._values = null, this._source = "Uninitialized", this._lcut = 0, this._receivedAt = 0, this._bootstrapMetadata = null, this._warnings = new Set | |
} | |
reset() { | |
this._values = null, this._rawValues = null, this._source = "Loading", this._lcut = 0, this._receivedAt = 0, this._bootstrapMetadata = null | |
} | |
finalize() { | |
if (this._values) return; | |
this._source = "NoValues" | |
} | |
getValues() { | |
return this._rawValues ? KY._typedJsonParse(this._rawValues, "has_updates", "EvaluationStoreValues") : null | |
} | |
setValues(I, d) { | |
if (!I) return !1; | |
let G = KY._typedJsonParse(I.data, "has_updates", "EvaluationResponse"); | |
if (G == null) return !1; | |
if (this._source = I.source, (G === null || G === void 0 ? void 0 : G.has_updates) !== !0) return !0; | |
if (this._rawValues = I.data, this._lcut = G.time, this._receivedAt = I.receivedAt, this._values = G, this._bootstrapMetadata = this._extractBootstrapMetadata(I.source, G), I.source && G.user) this._setWarningState(d, G); | |
if (G.sdk_flags) KY.SDKFlags.setFlags(this._sdkKey, G.sdk_flags); | |
else KY.SDKFlags.setFlags(this._sdkKey, {}); | |
return !0 | |
} | |
getWarnings() { | |
if (this._warnings.size === 0) return; | |
return Array.from(this._warnings) | |
} | |
getGate(I) { | |
var d; | |
return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.feature_gates, I) | |
} | |
getConfig(I) { | |
var d; | |
return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.dynamic_configs, I) | |
} | |
getLayer(I) { | |
var d; | |
return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.layer_configs, I) | |
} | |
getParamStore(I) { | |
var d; | |
return this._getDetailedStoreResult((d = this._values) === null || d === void 0 ? void 0 : d.param_stores, I) | |
} | |
getSource() { | |
return this._source | |
} | |
_extractBootstrapMetadata(I, d) { | |
if (I !== "Bootstrap") return null; | |
let G = {}; | |
if (d.user) G.user = d.user; | |
if (d.sdkInfo) G.generatorSDKInfo = d.sdkInfo; | |
return G.lcut = d.time, G | |
} | |
_getDetailedStoreResult(I, d) { | |
let G = null; | |
if (I) G = I[d] ? I[d] : I[KY._DJB2(d)]; | |
return { | |
result: G, | |
details: this._getDetails(G == null) | |
} | |
} | |
_setWarningState(I, d) { | |
var G; | |
let Z = KY.StableID.get(this._sdkKey); | |
if (((G = I.customIDs) === null || G === void 0 ? void 0 : G.stableID) !== Z) { | |
this._warnings.add("StableIDMismatch"); | |
return | |
} | |
if ("user" in d) { | |
let C = d.user; | |
if (KY._getFullUserHash(I) !== KY._getFullUserHash(C)) this._warnings.add("PartialUserMatch") | |
} | |
} | |
getCurrentSourceDetails() { | |
if (this._source === "Uninitialized" || this._source === "NoValues") return { | |
reason: this._source | |
}; | |
let I = { | |
reason: this._source, | |
lcut: this._lcut, | |
receivedAt: this._receivedAt | |
}; | |
if (this._warnings.size > 0) I.warnings = Array.from(this._warnings); | |
return I | |
} | |
_getDetails(I) { | |
var d, G; | |
let Z = this.getCurrentSourceDetails(), | |
C = Z.reason, | |
W = (d = Z.warnings) !== null && d !== void 0 ? d : []; | |
if (this._source === "Bootstrap" && W.length > 0) C = C + W[0]; | |
if (C !== "Uninitialized" && C !== "NoValues") C = `${C}:${I?"Unrecognized":"Recognized"}`; | |
let w = this._source === "Bootstrap" ? (G = this._bootstrapMetadata) !== null && G !== void 0 ? G : void 0 : void 0; | |
if (w) Z.bootstrapMetadata = w; | |
return Object.assign(Object.assign({}, Z), { | |
reason: C | |
}) | |
} | |
} | |
Om1.default = Tm1 | |
}); | |
var jm1 = Y((bm1) => { | |
Object.defineProperty(bm1, "__esModule", { | |
value: !0 | |
}); | |
bm1._resolveDeltasResponse = void 0; | |
var lm1 = JY(), | |
VB4 = 2; | |
function XB4(I, d) { | |
let G = lm1._typedJsonParse(d, "checksum", "DeltasEvaluationResponse"); | |
if (!G) return { | |
hadBadDeltaChecksum: !0 | |
}; | |
let Z = YB4(I, G), | |
C = _B4(Z), | |
W = lm1._DJB2Object({ | |
feature_gates: C.feature_gates, | |
dynamic_configs: C.dynamic_configs, | |
layer_configs: C.layer_configs | |
}, VB4); | |
if (W !== G.checksumV2) return { | |
hadBadDeltaChecksum: !0, | |
badChecksum: W, | |
badMergedConfigs: C, | |
badFullResponse: G.deltas_full_response | |
}; | |
return JSON.stringify(C) | |
} | |
bm1._resolveDeltasResponse = XB4; | |
function YB4(I, d) { | |
return Object.assign(Object.assign(Object.assign({}, I), d), { | |
feature_gates: Object.assign(Object.assign({}, I.feature_gates), d.feature_gates), | |
layer_configs: Object.assign(Object.assign({}, I.layer_configs), d.layer_configs), | |
dynamic_configs: Object.assign(Object.assign({}, I.dynamic_configs), d.dynamic_configs) | |
}) | |
} | |
function _B4(I) { | |
let d = I; | |
return r21(I.deleted_gates, d.feature_gates), delete d.deleted_gates, r21(I.deleted_configs, d.dynamic_configs), delete d.deleted_configs, r21(I.deleted_layers, d.layer_configs), delete d.deleted_layers, d | |
} | |
function r21(I, d) { | |
I === null || I === void 0 || I.forEach((G) => { | |
delete d[G] | |
}) | |
} | |
}); | |
var a21 = Y((SE) => { | |
var km1 = SE && SE.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(SE, "__esModule", { | |
value: !0 | |
}); | |
var Kb = JY(), | |
DB4 = jm1(); | |
class xm1 extends Kb.NetworkCore { | |
constructor(I, d) { | |
super(I, d); | |
let G = I === null || I === void 0 ? void 0 : I.networkConfig; | |
this._initializeUrlConfig = new Kb.UrlConfiguration(Kb.Endpoint._initialize, G === null || G === void 0 ? void 0 : G.initializeUrl, G === null || G === void 0 ? void 0 : G.api, G === null || G === void 0 ? void 0 : G.initializeFallbackUrls) | |
} | |
fetchEvaluations(I, d, G, Z) { | |
return km1(this, void 0, void 0, function*() { | |
let C = d ? Kb._typedJsonParse(d, "has_updates", "InitializeResponse") : null, | |
W = { | |
user: Z, | |
hash: "djb2", | |
deltasResponseRequested: !1, | |
full_checksum: null | |
}; | |
if (C === null || C === void 0 ? void 0 : C.has_updates) W = Object.assign(Object.assign({}, W), { | |
sinceTime: C.time, | |
previousDerivedFields: "derived_fields" in C ? C.derived_fields : {}, | |
deltasResponseRequested: !0, | |
full_checksum: C.full_checksum | |
}); | |
return this._fetchEvaluations(I, C, W, G) | |
}) | |
} | |
_fetchEvaluations(I, d, G, Z) { | |
var C, W; | |
return km1(this, void 0, void 0, function*() { | |
let w = yield this.post({ | |
sdkKey: I, | |
urlConfig: this._initializeUrlConfig, | |
data: G, | |
retries: 2, | |
isStatsigEncodable: !0, | |
priority: Z | |
}); | |
if ((w === null || w === void 0 ? void 0 : w.code) === 204) return '{"has_updates": false}'; | |
if ((w === null || w === void 0 ? void 0 : w.code) !== 200) return (C = w === null || w === void 0 ? void 0 : w.body) !== null && C !== void 0 ? C : null; | |
if ((d === null || d === void 0 ? void 0 : d.has_updates) !== !0 || ((W = w.body) === null || W === void 0 ? void 0 : W.includes('"is_delta":true')) !== !0 || G.deltasResponseRequested !== !0) return w.body; | |
let B = DB4._resolveDeltasResponse(d, w.body); | |
if (typeof B === "string") return B; | |
return this._fetchEvaluations(I, d, Object.assign(Object.assign(Object.assign({}, G), B), { | |
deltasResponseRequested: !1 | |
}), Z) | |
}) | |
} | |
} | |
SE.default = xm1 | |
}); | |
var nm1 = Y((pm1) => { | |
Object.defineProperty(pm1, "__esModule", { | |
value: !0 | |
}); | |
pm1._makeParamStoreGetter = void 0; | |
var cm1 = JY(), | |
Nb = { | |
disableExposureLog: !0 | |
}; | |
function zb(I) { | |
return I == null || I.disableExposureLog === !1 | |
} | |
function s21(I, d) { | |
return d != null && !cm1._isTypeMatch(I, d) | |
} | |
function HB4(I, d) { | |
return I.value | |
} | |
function FB4(I, d, G) { | |
if (I.getFeatureGate(d.gate_name, zb(G) ? void 0 : Nb).value) return d.pass_value; | |
return d.fail_value | |
} | |
function gB4(I, d, G, Z) { | |
let W = I.getDynamicConfig(d.config_name, Nb).get(d.param_name); | |
if (s21(W, G)) return G; | |
if (zb(Z)) I.getDynamicConfig(d.config_name); | |
return W | |
} | |
function JB4(I, d, G, Z) { | |
let W = I.getExperiment(d.experiment_name, Nb).get(d.param_name); | |
if (s21(W, G)) return G; | |
if (zb(Z)) I.getExperiment(d.experiment_name); | |
return W | |
} | |
function KB4(I, d, G, Z) { | |
let W = I.getLayer(d.layer_name, Nb).get(d.param_name); | |
if (s21(W, G)) return G; | |
if (zb(Z)) I.getLayer(d.layer_name).get(d.param_name); | |
return W | |
} | |
function NB4(I, d, G) { | |
return (Z, C) => { | |
if (d == null) return C; | |
let W = d[Z]; | |
if (W == null || C != null && cm1._typeOf(C) !== W.param_type) return C; | |
switch (W.ref_type) { | |
case "static": | |
return HB4(W, G); | |
case "gate": | |
return FB4(I, W, G); | |
case "dynamic_config": | |
return gB4(I, W, C, G); | |
case "experiment": | |
return JB4(I, W, C, G); | |
case "layer": | |
return KB4(I, W, C, G); | |
default: | |
return C | |
} | |
} | |
} | |
pm1._makeParamStoreGetter = NB4 | |
}); | |
var am1 = Y((Rz) => { | |
var zB4 = Rz && Rz.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(Rz, "__esModule", { | |
value: !0 | |
}); | |
Rz.StatsigEvaluationsDataAdapter = void 0; | |
var xF = JY(), | |
QB4 = a21(); | |
class rm1 extends xF.DataAdapterCore { | |
constructor() { | |
super("EvaluationsDataAdapter", "evaluations"); | |
this._network = null, this._options = null | |
} | |
attach(I, d) { | |
super.attach(I, d), this._network = new QB4.default(d !== null && d !== void 0 ? d : {}) | |
} | |
getDataAsync(I, d, G) { | |
return this._getDataAsyncImpl(I, xF._normalizeUser(d, this._options), G) | |
} | |
prefetchData(I, d) { | |
return this._prefetchDataImpl(I, d) | |
} | |
setData(I) { | |
let d = xF._typedJsonParse(I, "has_updates", "data"); | |
if (d && "user" in d) super.setData(I, d.user); | |
else xF.Log.error("StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.") | |
} | |
setDataLegacy(I, d) { | |
super.setData(I, d) | |
} | |
_fetchFromNetwork(I, d, G) { | |
var Z; | |
return zB4(this, void 0, void 0, function*() { | |
let C = yield(Z = this._network) === null || Z === void 0 ? void 0 : Z.fetchEvaluations(this._getSdkKey(), I, G === null || G === void 0 ? void 0 : G.priority, d); | |
return C !== null && C !== void 0 ? C : null | |
}) | |
} | |
_getCacheKey(I) { | |
var d; | |
let G = xF._getStorageKey(this._getSdkKey(), I, (d = this._options) === null || d === void 0 ? void 0 : d.customUserCacheKeyFunc); | |
return `${xF.DataAdapterCachePrefix}.${this._cacheSuffix}.${G}` | |
} | |
_isCachedResultValidFor204(I, d) { | |
return I.fullUserHash != null && I.fullUserHash === xF._getFullUserHash(d) | |
} | |
} | |
Rz.StatsigEvaluationsDataAdapter = rm1 | |
}); | |
var sm1 = Y((LE) => { | |
var o21 = LE && LE.__awaiter || function(I, d, G, Z) { | |
function C(W) { | |
return W instanceof G ? W : new G(function(w) { | |
w(W) | |
}) | |
} | |
return new(G || (G = Promise))(function(W, w) { | |
function B(X) { | |
try { | |
V(Z.next(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function A(X) { | |
try { | |
V(Z.throw(X)) | |
} catch (_) { | |
w(_) | |
} | |
} | |
function V(X) { | |
X.done ? W(X.value) : C(X.value).then(B, A) | |
} | |
V((Z = Z.apply(I, d || [])).next()) | |
}) | |
}; | |
Object.defineProperty(LE, "__esModule", { | |
value: !0 | |
}); | |
var a4 = JY(), | |
fB4 = mm1(), | |
qB4 = a21(), | |
RB4 = nm1(), | |
UB4 = am1(); | |
class Qb extends a4.StatsigClientBase { | |
static instance(I) { | |
let d = a4._getStatsigGlobal().instance(I); | |
if (d instanceof Qb) return d; | |
return a4.Log.warn(a4._isServerEnv() ? "StatsigClient.instance is not supported in server environments" : "Unable to find StatsigClient instance"), new Qb(I !== null && I !== void 0 ? I : "", {}) | |
} | |
constructor(I, d, G = null) { | |
var Z, C; | |
a4.SDKType._setClientType(I, "javascript-client"); | |
let W = new qB4.default(G, (B) => { | |
this.$emt(B) | |
}); | |
super(I, (Z = G === null || G === void 0 ? void 0 : G.dataAdapter) !== null && Z !== void 0 ? Z : new UB4.StatsigEvaluationsDataAdapter, W, G); | |
this.getFeatureGate = this._memoize(a4.MemoPrefix._gate, this._getFeatureGateImpl.bind(this)), this.getDynamicConfig = this._memoize(a4.MemoPrefix._dynamicConfig, this._getDynamicConfigImpl.bind(this)), this.getExperiment = this._memoize(a4.MemoPrefix._experiment, this._getExperimentImpl.bind(this)), this.getLayer = this._memoize(a4.MemoPrefix._layer, this._getLayerImpl.bind(this)), this.getParameterStore = this._memoize(a4.MemoPrefix._paramStore, this._getParameterStoreImpl.bind(this)), this._store = new fB4.default(I), this._network = W, this._user = this._configureUser(d, G); | |
let w = (C = G === null || G === void 0 ? void 0 : G.plugins) !== null && C !== void 0 ? C : []; | |
for (let B of w) B.bind(this) | |
} | |
initializeSync(I) { | |
var d; | |
if (this.loadingStatus !== "Uninitialized") return a4.createUpdateDetails(!0, this._store.getSource(), -1, null, null, ["MultipleInitializations", ...(d = this._store.getWarnings()) !== null && d !== void 0 ? d : []]); | |
return this._logger.start(), this.updateUserSync(this._user, I) | |
} | |
initializeAsync(I) { | |
return o21(this, void 0, void 0, function*() { | |
if (this._initializePromise) return this._initializePromise; | |
return this._initializePromise = this._initializeAsyncImpl(I), this._initializePromise | |
}) | |
} | |
updateUserSync(I, d) { | |
var G; | |
let Z = performance.now(), | |
C = [...(G = this._store.getWarnings()) !== null && G !== void 0 ? G : []]; | |
this._resetForUser(I); | |
let W = this.dataAdapter.getDataSync(this._user); | |
if (W == null) C.push("NoCachedValues"); | |
this._store.setValues(W, this._user), this._finalizeUpdate(W); | |
let w = d === null || d === void 0 ? void 0 : d.disableBackgroundCacheRefresh; | |
if (w === !0 || w == null && (W === null || W === void 0 ? void 0 : W.source) === "Bootstrap") return a4.createUpdateDetails(!0, this._store.getSource(), performance.now() - Z, this._errorBoundary.getLastSeenErrorAndReset(), this._network.getLastUsedInitUrlAndReset(), C); | |
return this._runPostUpdate(W !== null && W !== void 0 ? W : null, this._user), a4.createUpdateDetails(!0, this._store.getSource(), performance.now() - Z, this._errorBoundary.getLastSeenErrorAndReset(), this._network.getLastUsedInitUrlAndReset(), C) | |
} | |
updateUserAsync(I, d) { | |
return o21(this, void 0, void 0, function*() { | |
this._resetForUser(I); | |
let G = this._user; | |
a4.Diagnostics._markInitOverallStart(this._sdkKey); | |
let Z = this.dataAdapter.getDataSync(G); | |
if (this._store.setValues(Z, this._user), this._setStatus("Loading", Z), Z = yield this.dataAdapter.getDataAsync(Z, G, d), G !== this._user) return a4.createUpdateDetails(!1, this._store.getSource(), -1, new Error("User changed during update"), this._network.getLastUsedInitUrlAndReset()); | |
let C = !1; | |
if (Z != null) a4.Diagnostics._markInitProcessStart(this._sdkKey), C = this._store.setValues(Z, this._user), a4.Diagnostics._markInitProcessEnd(this._sdkKey, { | |
success: C | |
}); | |
if (this._finalizeUpdate(Z), !C) this._errorBoundary.attachErrorIfNoneExists(a4.UPDATE_DETAIL_ERROR_MESSAGES.NO_NETWORK_DATA), this.$emt({ | |
name: "initialization_failure" | |
}); | |
a4.Diagnostics._markInitOverallEnd(this._sdkKey, C, this._store.getCurrentSourceDetails()); | |
let W = a4.Diagnostics._enqueueDiagnosticsEvent(this._user, this._logger, this._sdkKey, this._options); | |
return a4.createUpdateDetails(C, this._store.getSource(), W, this._errorBoundary.getLastSeenErrorAndReset(), this._network.getLastUsedInitUrlAndReset(), this._store.getWarnings()) | |
}) | |
} | |
getContext() { | |
return { | |
sdkKey: this._sdkKey, | |
options: this._options, | |
values: this._store.getValues(), | |
user: JSON.parse(JSON.stringify(this._user)), | |
errorBoundary: this._errorBoundary, | |
session: a4.StatsigSession.get(this._sdkKey), | |
stableID: a4.StableID.get(this._sdkKey) | |
} | |
} | |
checkGate(I, d) { | |
return this.getFeatureGate(I, d).value | |
} | |
logEvent(I, d, G) { | |
let Z = typeof I === "string" ? { | |
eventName: I, | |
value: d, | |
metadata: G | |
} : I; | |
this._logger.enqueue(Object.assign(Object.assign({}, Z), { | |
user: this._user, | |
time: Date.now() | |
})) | |
} | |
_primeReadyRipcord() { | |
this.$on("error", () => { | |
this.loadingStatus === "Loading" && this._finalizeUpdate(null) | |
}) | |
} | |
_initializeAsyncImpl(I) { | |
return o21(this, void 0, void 0, function*() { | |
if (!a4.Storage.isReady()) yield a4.Storage.isReadyResolver(); | |
return this._logger.start(), this.updateUserAsync(this._user, I) | |
}) | |
} | |
_finalizeUpdate(I) { | |
this._store.finalize(), this._setStatus("Ready", I) | |
} | |
_runPostUpdate(I, d) { | |
this.dataAdapter.getDataAsync(I, d, { | |
priority: "low" | |
}).catch((G) => { | |
a4.Log.error("An error occurred after update.", G) | |
}) | |
} | |
_resetForUser(I) { | |
this._logger.reset(), this._store.reset(), this._user = this._configureUser(I, this._options) | |
} | |
_configureUser(I, d) { | |
var G; | |
let Z = a4._normalizeUser(I, d), | |
C = (G = Z.customIDs) === null || G === void 0 ? void 0 : G.stableID; | |
if (C) a4.StableID.setOverride(C, this._sdkKey); | |
return Z | |
} | |
_getFeatureGateImpl(I, d) { | |
var G, Z; | |
let { | |
result: C, | |
details: W | |
} = this._store.getGate(I), w = a4._makeFeatureGate(I, W, C), B = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getGateOverride) === null || Z === void 0 ? void 0 : Z.call(G, w, this._user, d), A = B !== null && B !== void 0 ? B : w; | |
return this._enqueueExposure(I, a4._createGateExposure(this._user, A), d), this.$emt({ | |
name: "gate_evaluation", | |
gate: A | |
}), A | |
} | |
_getDynamicConfigImpl(I, d) { | |
var G, Z; | |
let { | |
result: C, | |
details: W | |
} = this._store.getConfig(I), w = a4._makeDynamicConfig(I, W, C), B = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getDynamicConfigOverride) === null || Z === void 0 ? void 0 : Z.call(G, w, this._user, d), A = B !== null && B !== void 0 ? B : w; | |
return this._enqueueExposure(I, a4._createConfigExposure(this._user, A), d), this.$emt({ | |
name: "dynamic_config_evaluation", | |
dynamicConfig: A | |
}), A | |
} | |
_getExperimentImpl(I, d) { | |
var G, Z; | |
let { | |
result: C, | |
details: W | |
} = this._store.getConfig(I), w = a4._makeExperiment(I, W, C), B = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getExperimentOverride) === null || Z === void 0 ? void 0 : Z.call(G, w, this._user, d), A = B !== null && B !== void 0 ? B : w; | |
return this._enqueueExposure(I, a4._createConfigExposure(this._user, A), d), this.$emt({ | |
name: "experiment_evaluation", | |
experiment: A | |
}), A | |
} | |
_getLayerImpl(I, d) { | |
var G, Z, C; | |
let { | |
result: W, | |
details: w | |
} = this._store.getLayer(I), B = a4._makeLayer(I, w, W), A = (Z = (G = this.overrideAdapter) === null || G === void 0 ? void 0 : G.getLayerOverride) === null || Z === void 0 ? void 0 : Z.call(G, B, this._user, d); | |
if (d === null || d === void 0 ? void 0 : d.disableExposureLog) this._logger.incrementNonExposureCount(I); | |
let V = a4._mergeOverride(B, A, (C = A === null || A === void 0 ? void 0 : A.__value) !== null && C !== void 0 ? C : B.__value, (X) => { | |
if (d === null || d === void 0 ? void 0 : d.disableExposureLog) return; | |
this._enqueueExposure(I, a4._createLayerParameterExposure(this._user, V, X), d) | |
}); | |
return this.$emt({ | |
name: "layer_evaluation", | |
layer: V | |
}), V | |
} | |
_getParameterStoreImpl(I, d) { | |
let { | |
result: G, | |
details: Z | |
} = this._store.getParamStore(I); | |
return this._logger.incrementNonExposureCount(I), { | |
name: I, | |
details: Z, | |
__configuration: G, | |
get: RB4._makeParamStoreGetter(this, G, d) | |
} | |
} | |
} | |
LE.default = Qb | |
}); | |
var em1 = Y((qw) => { | |
var vB4 = qw && qw.__createBinding || (Object.create ? function(I, d, G, Z) { | |
if (Z === void 0) Z = G; | |
var C = Object.getOwnPropertyDescriptor(d, G); | |
if (!C || ("get" in C ? !d.__esModule : C.writable || C.configurable)) C = { | |
enumerable: !0, | |
get: function() { | |
return d[G] | |
} | |
}; | |
Object.defineProperty(I, Z, C) | |
} : function(I, d, G, Z) { | |
if (Z === void 0) Z = G; | |
I[Z] = d[G] | |
}), | |
EB4 = qw && qw.__exportStar || function(I, d) { | |
for (var G in I) | |
if (G !== "default" && !Object.prototype.hasOwnProperty.call(d, G)) vB4(d, I, G) | |
}; | |
Object.defineProperty(qw, "__esModule", { | |
value: !0 | |
}); | |
qw.StatsigClient = void 0; | |
var om1 = sm1(); | |
qw.StatsigClient = om1.default; | |
EB4(JY(), qw); | |
__STATSIG__ = Object.assign(Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), { | |
StatsigClient: om1.default | |
}); | |
qw.default = __STATSIG__ | |
}); | |
var Ol1 = Y((Lv9, Tl1) => { | |
var m3 = {}; | |
Tl1.exports = m3; | |
function ul1(I) { | |
return I < 0 ? -1 : 1 | |
} | |
function YA4(I) { | |
if (I % 1 === 0.5 && (I & 1) === 0) return Math.floor(I); | |
else return Math.round(I) | |
} | |
function zY(I, d) { | |
if (!d.unsigned) --I; | |
let G = d.unsigned ? 0 : -Math.pow(2, I), | |
Z = Math.pow(2, I) - 1, | |
C = d.moduloBitLength ? Math.pow(2, d.moduloBitLength) : Math.pow(2, I), | |
W = d.moduloBitLength ? Math.pow(2, d.moduloBitLength - 1) : Math.pow(2, I - 1); | |
return function(w, B) { | |
if (!B) B = {}; | |
let A = +w; | |
if (B.enforceRange) { | |
if (!Number.isFinite(A)) throw new TypeError("Argument is not a finite number"); | |
if (A = ul1(A) * Math.floor(Math.abs(A)), A < G || A > Z) throw new TypeError("Argument is not in byte range"); | |
return A | |
} | |
if (!isNaN(A) && B.clamp) { | |
if (A = YA4(A), A < G) A = G; | |
if (A > Z) A = Z; | |
return A | |
} | |
if (!Number.isFinite(A) || A === 0) return 0; | |
if (A = ul1(A) * Math.floor(Math.abs(A)), A = A % C, !d.unsigned && A >= W) return A - C; | |
else if (d.unsigned) { | |
if (A < 0) A += C; | |
else if (A === -0) return 0 | |
} | |
return A | |
} | |
} | |
m3.void = function() { | |
return | |
}; | |
m3.boolean = function(I) { | |
return !!I | |
}; | |
m3.byte = zY(8, { | |
unsigned: !1 | |
}); | |
m3.octet = zY(8, { | |
unsigned: !0 | |
}); | |
m3.short = zY(16, { | |
unsigned: !1 | |
}); | |
m3["unsigned short"] = zY(16, { | |
unsigned: !0 | |
}); | |
m3.long = zY(32, { | |
unsigned: !1 | |
}); | |
m3["unsigned long"] = zY(32, { | |
unsigned: !0 | |
}); | |
m3["long long"] = zY(32, { | |
unsigned: !1, | |
moduloBitLength: 64 | |
}); | |
m3["unsigned long long"] = zY(32, { | |
unsigned: !0, | |
moduloBitLength: 64 | |
}); | |
m3.double = function(I) { | |
let d = +I; | |
if (!Number.isFinite(d)) throw new TypeError("Argument is not a finite floating-point value"); | |
return d | |
}; | |
m3["unrestricted double"] = function(I) { | |
let d = +I; | |
if (isNaN(d)) throw new TypeError("Argument is NaN"); | |
return d | |
}; | |
m3.float = m3.double; | |
m3["unrestricted float"] = m3["unrestricted double"]; | |
m3.DOMString = function(I, d) { | |
if (!d) d = {}; | |
if (d.treatNullAsEmptyString && I === null) return ""; | |
return String(I) | |
}; | |
m3.ByteString = function(I, d) { | |
let G = String(I), | |
Z = void 0; | |
for (let C = 0; | |
(Z = G.codePointAt(C)) !== void 0; ++C) | |
if (Z > 255) throw new TypeError("Argument is not a valid bytestring"); | |
return G | |
}; | |
m3.USVString = function(I) { | |
let d = String(I), | |
G = d.length, | |
Z = []; | |
for (let C = 0; C < G; ++C) { | |
let W = d.charCodeAt(C); | |
if (W < 55296 || W > 57343) Z.push(String.fromCodePoint(W)); | |
else if (56320 <= W && W <= 57343) Z.push(String.fromCodePoint(65533)); | |
else if (C === G - 1) Z.push(String.fromCodePoint(65533)); | |
else { | |
let w = d.charCodeAt(C + 1); | |
if (56320 <= w && w <= 57343) { | |
let B = W & 1023, | |
A = w & 1023; | |
Z.push(String.fromCodePoint(65536 + 1024 * B + A)), ++C | |
} else Z.push(String.fromCodePoint(65533)) | |
} | |
} | |
return Z.join("") | |
}; | |
m3.Date = function(I, d) { | |
if (!(I instanceof Date)) throw new TypeError("Argument is not a Date object"); | |
if (isNaN(I)) return; | |
return I | |
}; | |
m3.RegExp = function(I, d) { | |
if (!(I instanceof RegExp)) I = new RegExp(I); | |
return I | |
} | |
}); | |
var bl1 = Y((_A4, QY) => { | |
_A4.mixin = function I(d, G) { | |
let Z = Object.getOwnPropertyNames(G); | |
for (let C = 0; C < Z.length; ++C) Object.defineProperty(d, Z[C], Object.getOwnPropertyDescriptor(G, Z[C])) | |
}; | |
_A4.wrapperSymbol = Symbol("wrapper"); | |
_A4.implSymbol = Symbol("impl"); | |
_A4.wrapperForImpl = function(I) { | |
return I[_A4.wrapperSymbol] | |
}; | |
_A4.implForWrapper = function(I) { | |
return I[_A4.implSymbol] | |
} | |
}); | |
var hl1 = Y((yv9, gA4) => { | |
gA4.exports = [ | |
[ | |
[0, 44], "disallowed_STD3_valid" | |
], | |
[ | |
[45, 46], "valid" | |
], | |
[ | |
[47, 47], "disallowed_STD3_valid" | |
], | |
[ | |
[48, 57], "valid" | |
], | |
[ | |
[58, 64], "disallowed_STD3_valid" | |
], | |
[ | |
[65, 65], "mapped", [97] | |
], | |
[ | |
[66, 66], "mapped", [98] | |
], | |
[ | |
[67, 67], "mapped", [99] | |
], | |
[ | |
[68, 68], "mapped", [100] | |
], | |
[ | |
[69, 69], "mapped", [101] | |
], | |
[ | |
[70, 70], "mapped", [102] | |
], | |
[ | |
[71, 71], "mapped", [103] | |
], | |
[ | |
[72, 72], "mapped", [104] | |
], | |
[ | |
[73, 73], "mapped", [105] | |
], | |
[ | |
[74, 74], "mapped", [106] | |
], | |
[ | |
[75, 75], "mapped", [107] | |
], | |
[ | |
[76, 76], "mapped", [108] | |
], | |
[ | |
[77, 77], "mapped", [109] | |
], | |
[ | |
[78, 78], "mapped", [110] | |
], | |
[ | |
[79, 79], "mapped", [111] | |
], | |
[ | |
[80, 80], "mapped", [112] | |
], | |
[ | |
[81, 81], "mapped", [113] | |
], | |
[ | |
[82, 82], "mapped", [114] | |
], | |
[ | |
[83, 83], "mapped", [115] | |
], | |
[ | |
[84, 84], "mapped", [116] | |
], | |
[ | |
[85, 85], "mapped", [117] | |
], | |
[ | |
[86, 86], "mapped", [118] | |
], | |
[ | |
[87, 87], "mapped", [119] | |
], | |
[ | |
[88, 88], "mapped", [120] | |
], | |
[ | |
[89, 89], "mapped", [121] | |
], | |
[ | |
[90, 90], "mapped", [122] | |
], | |
[ | |
[91, 96], "disallowed_STD3_valid" | |
], | |
[ | |
[97, 122], "valid" | |
], | |
[ | |
[123, 127], "disallowed_STD3_valid" | |
], | |
[ | |
[128, 159], "disallowed" | |
], | |
[ | |
[160, 160], "disallowed_STD3_mapped", [32] | |
], | |
[ | |
[161, 167], "valid", [], "NV8" | |
], | |
[ | |
[168, 168], "disallowed_STD3_mapped", [32, 776] | |
], | |
[ | |
[169, 169], "valid", [], "NV8" | |
], | |
[ | |
[170, 170], "mapped", [97] | |
], | |
[ | |
[171, 172], "valid", [], "NV8" | |
], | |
[ | |
[173, 173], "ignored" | |
], | |
[ | |
[174, 174], "valid", [], "NV8" | |
], | |
[ | |
[175, 175], "disallowed_STD3_mapped", [32, 772] | |
], | |
[ | |
[176, 177], "valid", [], "NV8" | |
], | |
[ | |
[178, 178], "mapped", [50] | |
], | |
[ | |
[179, 179], "mapped", [51] | |
], | |
[ | |
[180, 180], "disallowed_STD3_mapped", [32, 769] | |
], | |
[ | |
[181, 181], "mapped", [956] | |
], | |
[ | |
[182, 182], "valid", [], "NV8" | |
], | |
[ | |
[183, 183], "valid" | |
], | |
[ | |
[184, 184], "disallowed_STD3_mapped", [32, 807] | |
], | |
[ | |
[185, 185], "mapped", [49] | |
], | |
[ | |
[186, 186], "mapped", [111] | |
], | |
[ | |
[187, 187], "valid", [], "NV8" | |
], | |
[ | |
[188, 188], "mapped", [49, 8260, 52] | |
], | |
[ | |
[189, 189], "mapped", [49, 8260, 50] | |
], | |
[ | |
[190, 190], "mapped", [51, 8260, 52] | |
], | |
[ | |
[191, 191], "valid", [], "NV8" | |
], | |
[ | |
[192, 192], "mapped", [224] | |
], | |
[ | |
[193, 193], "mapped", [225] | |
], | |
[ | |
[194, 194], "mapped", [226] | |
], | |
[ | |
[195, 195], "mapped", [227] | |
], | |
[ | |
[196, 196], "mapped", [228] | |
], | |
[ | |
[197, 197], "mapped", [229] | |
], | |
[ | |
[198, 198], "mapped", [230] | |
], | |
[ | |
[199, 199], "mapped", [231] | |
], | |
[ | |
[200, 200], "mapped", [232] | |
], | |
[ | |
[201, 201], "mapped", [233] | |
], | |
[ | |
[202, 202], "mapped", [234] | |
], | |
[ | |
[203, 203], "mapped", [235] | |
], | |
[ | |
[204, 204], "mapped", [236] | |
], | |
[ | |
[205, 205], "mapped", [237] | |
], | |
[ | |
[206, 206], "mapped", [238] | |
], | |
[ | |
[207, 207], "mapped", [239] | |
], | |
[ | |
[208, 208], "mapped", [240] | |
], | |
[ | |
[209, 209], "mapped", [241] | |
], | |
[ | |
[210, 210], "mapped", [242] | |
], | |
[ | |
[211, 211], "mapped", [243] | |
], | |
[ | |
[212, 212], "mapped", [244] | |
], | |
[ | |
[213, 213], "mapped", [245] | |
], | |
[ | |
[214, 214], "mapped", [246] | |
], | |
[ | |
[215, 215], "valid", [], "NV8" | |
], | |
[ | |
[216, 216], "mapped", [248] | |
], | |
[ | |
[217, 217], "mapped", [249] | |
], | |
[ | |
[218, 218], "mapped", [250] | |
], | |
[ | |
[219, 219], "mapped", [251] | |
], | |
[ | |
[220, 220], "mapped", [252] | |
], | |
[ | |
[221, 221], "mapped", [253] | |
], | |
[ | |
[222, 222], "mapped", [254] | |
], | |
[ | |
[223, 223], "deviation", [115, 115] | |
], | |
[ | |
[224, 246], "valid" | |
], | |
[ | |
[247, 247], "valid", [], "NV8" | |
], | |
[ | |
[248, 255], "valid" | |
], | |
[ | |
[256, 256], "mapped", [257] | |
], | |
[ | |
[257, 257], "valid" | |
], | |
[ | |
[258, 258], "mapped", [259] | |
], | |
[ | |
[259, 259], "valid" | |
], | |
[ | |
[260, 260], "mapped", [261] | |
], | |
[ | |
[261, 261], "valid" | |
], | |
[ | |
[262, 262], "mapped", [263] | |
], | |
[ | |
[263, 263], "valid" | |
], | |
[ | |
[264, 264], "mapped", [265] | |
], | |
[ | |
[265, 265], "valid" | |
], | |
[ | |
[266, 266], "mapped", [267] | |
], | |
[ | |
[267, 267], "valid" | |
], | |
[ | |
[268, 268], "mapped", [269] | |
], | |
[ | |
[269, 269], "valid" | |
], | |
[ | |
[270, 270], "mapped", [271] | |
], | |
[ | |
[271, 271], "valid" | |
], | |
[ | |
[272, 272], "mapped", [273] | |
], | |
[ | |
[273, 273], "valid" | |
], | |
[ | |
[274, 274], "mapped", [275] | |
], | |
[ | |
[275, 275], "valid" | |
], | |
[ | |
[276, 276], "mapped", [277] | |
], | |
[ | |
[277, 277], "valid" | |
], | |
[ | |
[278, 278], "mapped", [279] | |
], | |
[ | |
[279, 279], "valid" | |
], | |
[ | |
[280, 280], "mapped", [281] | |
], | |
[ | |
[281, 281], "valid" | |
], | |
[ | |
[282, 282], "mapped", [283] | |
], | |
[ | |
[283, 283], "valid" | |
], | |
[ | |
[284, 284], "mapped", [285] | |
], | |
[ | |
[285, 285], "valid" | |
], | |
[ | |
[286, 286], "mapped", [287] | |
], | |
[ | |
[287, 287], "valid" | |
], | |
[ | |
[288, 288], "mapped", [289] | |
], | |
[ | |
[289, 289], "valid" | |
], | |
[ | |
[290, 290], "mapped", [291] | |
], | |
[ | |
[291, 291], "valid" | |
], | |
[ | |
[292, 292], "mapped", [293] | |
], | |
[ | |
[293, 293], "valid" | |
], | |
[ | |
[294, 294], "mapped", [295] | |
], | |
[ | |
[295, 295], "valid" | |
], | |
[ | |
[296, 296], "mapped", [297] | |
], | |
[ | |
[297, 297], "valid" | |
], | |
[ | |
[298, 298], "mapped", [299] | |
], | |
[ | |
[299, 299], "valid" | |
], | |
[ | |
[300, 300], "mapped", [301] | |
], | |
[ | |
[301, 301], "valid" | |
], | |
[ | |
[302, 302], "mapped", [303] | |
], | |
[ | |
[303, 303], "valid" | |
], | |
[ | |
[304, 304], "mapped", [105, 775] | |
], | |
[ | |
[305, 305], "valid" | |
], | |
[ | |
[306, 307], "mapped", [105, 106] | |
], | |
[ | |
[308, 308], "mapped", [309] | |
], | |
[ | |
[309, 309], "valid" | |
], | |
[ | |
[310, 310], "mapped", [311] | |
], | |
[ | |
[311, 312], "valid" | |
], | |
[ | |
[313, 313], "mapped", [314] | |
], | |
[ | |
[314, 314], "valid" | |
], | |
[ | |
[315, 315], "mapped", [316] | |
], | |
[ | |
[316, 316], "valid" | |
], | |
[ | |
[317, 317], "mapped", [318] | |
], | |
[ | |
[318, 318], "valid" | |
], | |
[ | |
[319, 320], "mapped", [108, 183] | |
], | |
[ | |
[321, 321], "mapped", [322] | |
], | |
[ | |
[322, 322], "valid" | |
], | |
[ | |
[323, 323], "mapped", [324] | |
], | |
[ | |
[324, 324], "valid" | |
], | |
[ | |
[325, 325], "mapped", [326] | |
], | |
[ | |
[326, 326], "valid" | |
], | |
[ | |
[327, 327], "mapped", [328] | |
], | |
[ | |
[328, 328], "valid" | |
], | |
[ | |
[329, 329], "mapped", [700, 110] | |
], | |
[ | |
[330, 330], "mapped", [331] | |
], | |
[ | |
[331, 331], "valid" | |
], | |
[ | |
[332, 332], "mapped", [333] | |
], | |
[ | |
[333, 333], "valid" | |
], | |
[ | |
[334, 334], "mapped", [335] | |
], | |
[ | |
[335, 335], "valid" | |
], | |
[ | |
[336, 336], "mapped", [337] | |
], | |
[ | |
[337, 337], "valid" | |
], | |
[ | |
[338, 338], "mapped", [339] | |
], | |
[ | |
[339, 339], "valid" | |
], | |
[ | |
[340, 340], "mapped", [341] | |
], | |
[ | |
[341, 341], "valid" | |
], | |
[ | |
[342, 342], "mapped", [343] | |
], | |
[ | |
[343, 343], "valid" | |
], | |
[ | |
[344, 344], "mapped", [345] | |
], | |
[ | |
[345, 345], "valid" | |
], | |
[ | |
[346, 346], "mapped", [347] | |
], | |
[ | |
[347, 347], "valid" | |
], | |
[ | |
[348, 348], "mapped", [349] | |
], | |
[ | |
[349, 349], "valid" | |
], | |
[ | |
[350, 350], "mapped", [351] | |
], | |
[ | |
[351, 351], "valid" | |
], | |
[ | |
[352, 352], "mapped", [353] | |
], | |
[ | |
[353, 353], "valid" | |
], | |
[ | |
[354, 354], "mapped", [355] | |
], | |
[ | |
[355, 355], "valid" | |
], | |
[ | |
[356, 356], "mapped", [357] | |
], | |
[ | |
[357, 357], "valid" | |
], | |
[ | |
[358, 358], "mapped", [359] | |
], | |
[ | |
[359, 359], "valid" | |
], | |
[ | |
[360, 360], "mapped", [361] | |
], | |
[ | |
[361, 361], "valid" | |
], | |
[ | |
[362, 362], "mapped", [363] | |
], | |
[ | |
[363, 363], "valid" | |
], | |
[ | |
[364, 364], "mapped", [365] | |
], | |
[ | |
[365, 365], "valid" | |
], | |
[ | |
[366, 366], "mapped", [367] | |
], | |
[ | |
[367, 367], "valid" | |
], | |
[ | |
[368, 368], "mapped", [369] | |
], | |
[ | |
[369, 369], "valid" | |
], | |
[ | |
[370, 370], "mapped", [371] | |
], | |
[ | |
[371, 371], "valid" | |
], | |
[ | |
[372, 372], "mapped", [373] | |
], | |
[ | |
[373, 373], "valid" | |
], | |
[ | |
[374, 374], "mapped", [375] | |
], | |
[ | |
[375, 375], "valid" | |
], | |
[ | |
[376, 376], "mapped", [255] | |
], | |
[ | |
[377, 377], "mapped", [378] | |
], | |
[ | |
[378, 378], "valid" | |
], | |
[ | |
[379, 379], "mapped", [380] | |
], | |
[ | |
[380, 380], "valid" | |
], | |
[ | |
[381, 381], "mapped", [382] | |
], | |
[ | |
[382, 382], "valid" | |
], | |
[ | |
[383, 383], "mapped", [115] | |
], | |
[ | |
[384, 384], "valid" | |
], | |
[ | |
[385, 385], "mapped", [595] | |
], | |
[ | |
[386, 386], "mapped", [387] | |
], | |
[ | |
[387, 387], "valid" | |
], | |
[ | |
[388, 388], "mapped", [389] | |
], | |
[ | |
[389, 389], "valid" | |
], | |
[ | |
[390, 390], "mapped", [596] | |
], | |
[ | |
[391, 391], "mapped", [392] | |
], | |
[ | |
[392, 392], "valid" | |
], | |
[ | |
[393, 393], "mapped", [598] | |
], | |
[ | |
[394, 394], "mapped", [599] | |
], | |
[ | |
[395, 395], "mapped", [396] | |
], | |
[ | |
[396, 397], "valid" | |
], | |
[ | |
[398, 398], "mapped", [477] | |
], | |
[ | |
[399, 399], "mapped", [601] | |
], | |
[ | |
[400, 400], "mapped", [603] | |
], | |
[ | |
[401, 401], "mapped", [402] | |
], | |
[ | |
[402, 402], "valid" | |
], | |
[ | |
[403, 403], "mapped", [608] | |
], | |
[ | |
[404, 404], "mapped", [611] | |
], | |
[ | |
[405, 405], "valid" | |
], | |
[ | |
[406, 406], "mapped", [617] | |
], | |
[ | |
[407, 407], "mapped", [616] | |
], | |
[ | |
[408, 408], "mapped", [409] | |
], | |
[ | |
[409, 411], "valid" | |
], | |
[ | |
[412, 412], "mapped", [623] | |
], | |
[ | |
[413, 413], "mapped", [626] | |
], | |
[ | |
[414, 414], "valid" | |
], | |
[ | |
[415, 415], "mapped", [629] | |
], | |
[ | |
[416, 416], "mapped", [417] | |
], | |
[ | |
[417, 417], "valid" | |
], | |
[ | |
[418, 418], "mapped", [419] | |
], | |
[ | |
[419, 419], "valid" | |
], | |
[ | |
[420, 420], "mapped", [421] | |
], | |
[ | |
[421, 421], "valid" | |
], | |
[ | |
[422, 422], "mapped", [640] | |
], | |
[ | |
[423, 423], "mapped", [424] | |
], | |
[ | |
[424, 424], "valid" | |
], | |
[ | |
[425, 425], "mapped", [643] | |
], | |
[ | |
[426, 427], "valid" | |
], | |
[ | |
[428, 428], "mapped", [429] | |
], | |
[ | |
[429, 429], "valid" | |
], | |
[ | |
[430, 430], "mapped", [648] | |
], | |
[ | |
[431, 431], "mapped", [432] | |
], | |
[ | |
[432, 432], "valid" | |
], | |
[ | |
[433, 433], "mapped", [650] | |
], | |
[ | |
[434, 434], "mapped", [651] | |
], | |
[ | |
[435, 435], "mapped", [436] | |
], | |
[ | |
[436, 436], "valid" | |
], | |
[ | |
[437, 437], "mapped", [438] | |
], | |
[ | |
[438, 438], "valid" | |
], | |
[ | |
[439, 439], "mapped", [658] | |
], | |
[ | |
[440, 440], "mapped", [441] | |
], | |
[ | |
[441, 443], "valid" | |
], | |
[ | |
[444, 444], "mapped", [445] | |
], | |
[ | |
[445, 451], "valid" | |
], | |
[ | |
[452, 454], "mapped", [100, 382] | |
], | |
[ | |
[455, 457], "mapped", [108, 106] | |
], | |
[ | |
[458, 460], "mapped", [110, 106] | |
], | |
[ | |
[461, 461], "mapped", [462] | |
], | |
[ | |
[462, 462], "valid" | |
], | |
[ | |
[463, 463], "mapped", [464] | |
], | |
[ | |
[464, 464], "valid" | |
], | |
[ | |
[465, 465], "mapped", [466] | |
], | |
[ | |
[466, 466], "valid" | |
], | |
[ | |
[467, 467], "mapped", [468] | |
], | |
[ | |
[468, 468], "valid" | |
], | |
[ | |
[469, 469], "mapped", [470] | |
], | |
[ | |
[470, 470], "valid" | |
], | |
[ | |
[471, 471], "mapped", [472] | |
], | |
[ | |
[472, 472], "valid" | |
], | |
[ | |
[473, 473], "mapped", [474] | |
], | |
[ | |
[474, 474], "valid" | |
], | |
[ | |
[475, 475], "mapped", [476] | |
], | |
[ | |
[476, 477], "valid" | |
], | |
[ | |
[478, 478], "mapped", [479] | |
], | |
[ | |
[479, 479], "valid" | |
], | |
[ | |
[480, 480], "mapped", [481] | |
], | |
[ | |
[481, 481], "valid" | |
], | |
[ | |
[482, 482], "mapped", [483] | |
], | |
[ | |
[483, 483], "valid" | |
], | |
[ | |
[484, 484], "mapped", [485] | |
], | |
[ | |
[485, 485], "valid" | |
], | |
[ | |
[486, 486], "mapped", [487] | |
], | |
[ | |
[487, 487], "valid" | |
], | |
[ | |
[488, 488], "mapped", [489] | |
], | |
[ | |
[489, 489], "valid" | |
], | |
[ | |
[490, 490], "mapped", [491] | |
], | |
[ | |
[491, 491], "valid" | |
], | |
[ | |
[492, 492], "mapped", [493] | |
], | |
[ | |
[493, 493], "valid" | |
], | |
[ | |
[494, 494], "mapped", [495] | |
], | |
[ | |
[495, 496], "valid" | |
], | |
[ | |
[497, 499], "mapped", [100, 122] | |
], | |
[ | |
[500, 500], "mapped", [501] | |
], | |
[ | |
[501, 501], "valid" | |
], | |
[ | |
[502, 502], "mapped", [405] | |
], | |
[ | |
[503, 503], "mapped", [447] | |
], | |
[ | |
[504, 504], "mapped", [505] | |
], | |
[ | |
[505, 505], "valid" | |
], | |
[ | |
[506, 506], "mapped", [507] | |
], | |
[ | |
[507, 507], "valid" | |
], | |
[ | |
[508, 508], "mapped", [509] | |
], | |
[ | |
[509, 509], "valid" | |
], | |
[ | |
[510, 510], "mapped", [511] | |
], | |
[ | |
[511, 511], "valid" | |
], | |
[ | |
[512, 512], "mapped", [513] | |
], | |
[ | |
[513, 513], "valid" | |
], | |
[ | |
[514, 514], "mapped", [515] | |
], | |
[ | |
[515, 515], "valid" | |
], | |
[ | |
[516, 516], "mapped", [517] | |
], | |
[ | |
[517, 517], "valid" | |
], | |
[ | |
[518, 518], "mapped", [519] | |
], | |
[ | |
[519, 519], "valid" | |
], | |
[ | |
[520, 520], "mapped", [521] | |
], | |
[ | |
[521, 521], "valid" | |
], | |
[ | |
[522, 522], "mapped", [523] | |
], | |
[ | |
[523, 523], "valid" | |
], | |
[ | |
[524, 524], "mapped", [525] | |
], | |
[ | |
[525, 525], "valid" | |
], | |
[ | |
[526, 526], "mapped", [527] | |
], | |
[ | |
[527, 527], "valid" | |
], | |
[ | |
[528, 528], "mapped", [529] | |
], | |
[ | |
[529, 529], "valid" | |
], | |
[ | |
[530, 530], "mapped", [531] | |
], | |
[ | |
[531, 531], "valid" | |
], | |
[ | |
[532, 532], "mapped", [533] | |
], | |
[ | |
[533, 533], "valid" | |
], | |
[ | |
[534, 534], "mapped", [535] | |
], | |
[ | |
[535, 535], "valid" | |
], | |
[ | |
[536, 536], "mapped", [537] | |
], | |
[ | |
[537, 537], "valid" | |
], | |
[ | |
[538, 538], "mapped", [539] | |
], | |
[ | |
[539, 539], "valid" | |
], | |
[ | |
[540, 540], "mapped", [541] | |
], | |
[ | |
[541, 541], "valid" | |
], | |
[ | |
[542, 542], "mapped", [543] | |
], | |
[ | |
[543, 543], "valid" | |
], | |
[ | |
[544, 544], "mapped", [414] | |
], | |
[ | |
[545, 545], "valid" | |
], | |
[ | |
[546, 546], "mapped", [547] | |
], | |
[ | |
[547, 547], "valid" | |
], | |
[ | |
[548, 548], "mapped", [549] | |
], | |
[ | |
[549, 549], "valid" | |
], | |
[ | |
[550, 550], "mapped", [551] | |
], | |
[ | |
[551, 551], "valid" | |
], | |
[ | |
[552, 552], "mapped", [553] | |
], | |
[ | |
[553, 553], "valid" | |
], | |
[ | |
[554, 554], "mapped", [555] | |
], | |
[ | |
[555, 555], "valid" | |
], | |
[ | |
[556, 556], "mapped", [557] | |
], | |
[ | |
[557, 557], "valid" | |
], | |
[ | |
[558, 558], "mapped", [559] | |
], | |
[ | |
[559, 559], "valid" | |
], | |
[ | |
[560, 560], "mapped", [561] | |
], | |
[ | |
[561, 561], "valid" | |
], | |
[ | |
[562, 562], "mapped", [563] | |
], | |
[ | |
[563, 563], "valid" | |
], | |
[ | |
[564, 566], "valid" | |
], | |
[ | |
[567, 569], "valid" | |
], | |
[ | |
[570, 570], "mapped", [11365] | |
], | |
[ | |
[571, 571], "mapped", [572] | |
], | |
[ | |
[572, 572], "valid" | |
], | |
[ | |
[573, 573], "mapped", [410] | |
], | |
[ | |
[574, 574], "mapped", [11366] | |
], | |
[ | |
[575, 576], "valid" | |
], | |
[ | |
[577, 577], "mapped", [578] | |
], | |
[ | |
[578, 578], "valid" | |
], | |
[ | |
[579, 579], "mapped", [384] | |
], | |
[ | |
[580, 580], "mapped", [649] | |
], | |
[ | |
[581, 581], "mapped", [652] | |
], | |
[ | |
[582, 582], "mapped", [583] | |
], | |
[ | |
[583, 583], "valid" | |
], | |
[ | |
[584, 584], "mapped", [585] | |
], | |
[ | |
[585, 585], "valid" | |
], | |
[ | |
[586, 586], "mapped", [587] | |
], | |
[ | |
[587, 587], "valid" | |
], | |
[ | |
[588, 588], "mapped", [589] | |
], | |
[ | |
[589, 589], "valid" | |
], | |
[ | |
[590, 590], "mapped", [591] | |
], | |
[ | |
[591, 591], "valid" | |
], | |
[ | |
[592, 680], "valid" | |
], | |
[ | |
[681, 685], "valid" | |
], | |
[ | |
[686, 687], "valid" | |
], | |
[ | |
[688, 688], "mapped", [104] | |
], | |
[ | |
[689, 689], "mapped", [614] | |
], | |
[ | |
[690, 690], "mapped", [106] | |
], | |
[ | |
[691, 691], "mapped", [114] | |
], | |
[ | |
[692, 692], "mapped", [633] | |
], | |
[ | |
[693, 693], "mapped", [635] | |
], | |
[ | |
[694, 694], "mapped", [641] | |
], | |
[ | |
[695, 695], "mapped", [119] | |
], | |
[ | |
[696, 696], "mapped", [121] | |
], | |
[ | |
[697, 705], "valid" | |
], | |
[ | |
[706, 709], "valid", [], "NV8" | |
], | |
[ | |
[710, 721], "valid" | |
], | |
[ | |
[722, 727], "valid", [], "NV8" | |
], | |
[ | |
[728, 728], "disallowed_STD3_mapped", [32, 774] | |
], | |
[ | |
[729, 729], "disallowed_STD3_mapped", [32, 775] | |
], | |
[ | |
[730, 730], "disallowed_STD3_mapped", [32, 778] | |
], | |
[ | |
[731, 731], "disallowed_STD3_mapped", [32, 808] | |
], | |
[ | |
[732, 732], "disallowed_STD3_mapped", [32, 771] | |
], | |
[ | |
[733, 733], "disallowed_STD3_mapped", [32, 779] | |
], | |
[ | |
[734, 734], "valid", [], "NV8" | |
], | |
[ | |
[735, 735], "valid", [], "NV8" | |
], | |
[ | |
[736, 736], "mapped", [611] | |
], | |
[ | |
[737, 737], "mapped", [108] | |
], | |
[ | |
[738, 738], "mapped", [115] | |
], | |
[ | |
[739, 739], "mapped", [120] | |
], | |
[ | |
[740, 740], "mapped", [661] | |
], | |
[ | |
[741, 745], "valid", [], "NV8" | |
], | |
[ | |
[746, 747], "valid", [], "NV8" | |
], | |
[ | |
[748, 748], "valid" | |
], | |
[ | |
[749, 749], "valid", [], "NV8" | |
], | |
[ | |
[750, 750], "valid" | |
], | |
[ | |
[751, 767], "valid", [], "NV8" | |
], | |
[ | |
[768, 831], "valid" | |
], | |
[ | |
[832, 832], "mapped", [768] | |
], | |
[ | |
[833, 833], "mapped", [769] | |
], | |
[ | |
[834, 834], "valid" | |
], | |
[ | |
[835, 835], "mapped", [787] | |
], | |
[ | |
[836, 836], "mapped", [776, 769] | |
], | |
[ | |
[837, 837], "mapped", [953] | |
], | |
[ | |
[838, 846], "valid" | |
], | |
[ | |
[847, 847], "ignored" | |
], | |
[ | |
[848, 855], "valid" | |
], | |
[ | |
[856, 860], "valid" | |
], | |
[ | |
[861, 863], "valid" | |
], | |
[ | |
[864, 865], "valid" | |
], | |
[ | |
[866, 866], "valid" | |
], | |
[ | |
[867, 879], "valid" | |
], | |
[ | |
[880, 880], "mapped", [881] | |
], | |
[ | |
[881, 881], "valid" | |
], | |
[ | |
[882, 882], "mapped", [883] | |
], | |
[ | |
[883, 883], "valid" | |
], | |
[ | |
[884, 884], "mapped", [697] | |
], | |
[ | |
[885, 885], "valid" | |
], | |
[ | |
[886, 886], "mapped", [887] | |
], | |
[ | |
[887, 887], "valid" | |
], | |
[ | |
[888, 889], "disallowed" | |
], | |
[ | |
[890, 890], "disallowed_STD3_mapped", [32, 953] | |
], | |
[ | |
[891, 893], "valid" | |
], | |
[ | |
[894, 894], "disallowed_STD3_mapped", [59] | |
], | |
[ | |
[895, 895], "mapped", [1011] | |
], | |
[ | |
[896, 899], "disallowed" | |
], | |
[ | |
[900, 900], "disallowed_STD3_mapped", [32, 769] | |
], | |
[ | |
[901, 901], "disallowed_STD3_mapped", [32, 776, 769] | |
], | |
[ | |
[902, 902], "mapped", [940] | |
], | |
[ | |
[903, 903], "mapped", [183] | |
], | |
[ | |
[904, 904], "mapped", [941] | |
], | |
[ | |
[905, 905], "mapped", [942] | |
], | |
[ | |
[906, 906], "mapped", [943] | |
], | |
[ | |
[907, 907], "disallowed" | |
], | |
[ | |
[908, 908], "mapped", [972] | |
], | |
[ | |
[909, 909], "disallowed" | |
], | |
[ | |
[910, 910], "mapped", [973] | |
], | |
[ | |
[911, 911], "mapped", [974] | |
], | |
[ | |
[912, 912], "valid" | |
], | |
[ | |
[913, 913], "mapped", [945] | |
], | |
[ | |
[914, 914], "mapped", [946] | |
], | |
[ | |
[915, 915], "mapped", [947] | |
], | |
[ | |
[916, 916], "mapped", [948] | |
], | |
[ | |
[917, 917], "mapped", [949] | |
], | |
[ | |
[918, 918], "mapped", [950] | |
], | |
[ | |
[919, 919], "mapped", [951] | |
], | |
[ | |
[920, 920], "mapped", [952] | |
], | |
[ | |
[921, 921], "mapped", [953] | |
], | |
[ | |
[922, 922], "mapped", [954] | |
], | |
[ | |
[923, 923], "mapped", [955] | |
], | |
[ | |
[924, 924], "mapped", [956] | |
], | |
[ | |
[925, 925], "mapped", [957] | |
], | |
[ | |
[926, 926], "mapped", [958] | |
], | |
[ | |
[927, 927], "mapped", [959] | |
], | |
[ | |
[928, 928], "mapped", [960] | |
], | |
[ | |
[929, 929], "mapped", [961] | |
], | |
[ | |
[930, 930], "disallowed" | |
], | |
[ | |
[931, 931], "mapped", [963] | |
], | |
[ | |
[932, 932], "mapped", [964] | |
], | |
[ | |
[933, 933], "mapped", [965] | |
], | |
[ | |
[934, 934], "mapped", [966] | |
], | |
[ | |
[935, 935], "mapped", [967] | |
], | |
[ | |
[936, 936], "mapped", [968] | |
], | |
[ | |
[937, 937], "mapped", [969] | |
], | |
[ | |
[938, 938], "mapped", [970] | |
], | |
[ | |
[939, 939], "mapped", [971] | |
], | |
[ | |
[940, 961], "valid" | |
], | |
[ | |
[962, 962], "deviation", [963] | |
], | |
[ | |
[963, 974], "valid" | |
], | |
[ | |
[975, 975], "mapped", [983] | |
], | |
[ | |
[976, 976], "mapped", [946] | |
], | |
[ | |
[977, 977], "mapped", [952] | |
], | |
[ | |
[978, 978], "mapped", [965] | |
], | |
[ | |
[979, 979], "mapped", [973] | |
], | |
[ | |
[980, 980], "mapped", [971] | |
], | |
[ | |
[981, 981], "mapped", [966] | |
], | |
[ | |
[982, 982], "mapped", [960] | |
], | |
[ | |
[983, 983], "valid" | |
], | |
[ | |
[984, 984], "mapped", [985] | |
], | |
[ | |
[985, 985], "valid" | |
], | |
[ | |
[986, 986], "mapped", [987] | |
], | |
[ | |
[987, 987], "valid" | |
], | |
[ | |
[988, 988], "mapped", [989] | |
], | |
[ | |
[989, 989], "valid" | |
], | |
[ | |
[990, 990], "mapped", [991] | |
], | |
[ | |
[991, 991], "valid" | |
], | |
[ | |
[992, 992], "mapped", [993] | |
], | |
[ | |
[993, 993], "valid" | |
], | |
[ | |
[994, 994], "mapped", [995] | |
], | |
[ | |
[995, 995], "valid" | |
], | |
[ | |
[996, 996], "mapped", [997] | |
], | |
[ | |
[997, 997], "valid" | |
], | |
[ | |
[998, 998], "mapped", [999] | |
], | |
[ | |
[999, 999], "valid" | |
], | |
[ | |
[1000, 1000], "mapped", [1001] | |
], | |
[ | |
[1001, 1001], "valid" | |
], | |
[ | |
[1002, 1002], "mapped", [1003] | |
], | |
[ | |
[1003, 1003], "valid" | |
], | |
[ | |
[1004, 1004], "mapped", [1005] | |
], | |
[ | |
[1005, 1005], "valid" | |
], | |
[ | |
[1006, 1006], "mapped", [1007] | |
], | |
[ | |
[1007, 1007], "valid" | |
], | |
[ | |
[1008, 1008], "mapped", [954] | |
], | |
[ | |
[1009, 1009], "mapped", [961] | |
], | |
[ | |
[1010, 1010], "mapped", [963] | |
], | |
[ | |
[1011, 1011], "valid" | |
], | |
[ | |
[1012, 1012], "mapped", [952] | |
], | |
[ | |
[1013, 1013], "mapped", [949] | |
], | |
[ | |
[1014, 1014], "valid", [], "NV8" | |
], | |
[ | |
[1015, 1015], "mapped", [1016] | |
], | |
[ | |
[1016, 1016], "valid" | |
], | |
[ | |
[1017, 1017], "mapped", [963] | |
], | |
[ | |
[1018, 1018], "mapped", [1019] | |
], | |
[ | |
[1019, 1019], "valid" | |
], | |
[ | |
[1020, 1020], "valid" | |
], | |
[ | |
[1021, 1021], "mapped", [891] | |
], | |
[ | |
[1022, 1022], "mapped", [892] | |
], | |
[ | |
[1023, 1023], "mapped", [893] | |
], | |
[ | |
[1024, 1024], "mapped", [1104] | |
], | |
[ | |
[1025, 1025], "mapped", [1105] | |
], | |
[ | |
[1026, 1026], "mapped", [1106] | |
], | |
[ | |
[1027, 1027], "mapped", [1107] | |
], | |
[ | |
[1028, 1028], "mapped", [1108] | |
], | |
[ | |
[1029, 1029], "mapped", [1109] | |
], | |
[ | |
[1030, 1030], "mapped", [1110] | |
], | |
[ | |
[1031, 1031], "mapped", [1111] | |
], | |
[ | |
[1032, 1032], "mapped", [1112] | |
], | |
[ | |
[1033, 1033], "mapped", [1113] | |
], | |
[ | |
[1034, 1034], "mapped", [1114] | |
], | |
[ | |
[1035, 1035], "mapped", [1115] | |
], | |
[ | |
[1036, 1036], "mapped", [1116] | |
], | |
[ | |
[1037, 1037], "mapped", [1117] | |
], | |
[ | |
[1038, 1038], "mapped", [1118] | |
], | |
[ | |
[1039, 1039], "mapped", [1119] | |
], | |
[ | |
[1040, 1040], "mapped", [1072] | |
], | |
[ | |
[1041, 1041], "mapped", [1073] | |
], | |
[ | |
[1042, 1042], "mapped", [1074] | |
], | |
[ | |
[1043, 1043], "mapped", [1075] | |
], | |
[ | |
[1044, 1044], "mapped", [1076] | |
], | |
[ | |
[1045, 1045], "mapped", [1077] | |
], | |
[ | |
[1046, 1046], "mapped", [1078] | |
], | |
[ | |
[1047, 1047], "mapped", [1079] | |
], | |
[ | |
[1048, 1048], "mapped", [1080] | |
], | |
[ | |
[1049, 1049], "mapped", [1081] | |
], | |
[ | |
[1050, 1050], "mapped", [1082] | |
], | |
[ | |
[1051, 1051], "mapped", [1083] | |
], | |
[ | |
[1052, 1052], "mapped", [1084] | |
], | |
[ | |
[1053, 1053], "mapped", [1085] | |
], | |
[ | |
[1054, 1054], "mapped", [1086] | |
], | |
[ | |
[1055, 1055], "mapped", [1087] | |
], | |
[ | |
[1056, 1056], "mapped", [1088] | |
], | |
[ | |
[1057, 1057], "mapped", [1089] | |
], | |
[ | |
[1058, 1058], "mapped", [1090] | |
], | |
[ | |
[1059, 1059], "mapped", [1091] | |
], | |
[ | |
[1060, 1060], "mapped", [1092] | |
], | |
[ | |
[1061, 1061], "mapped", [1093] | |
], | |
[ | |
[1062, 1062], "mapped", [1094] | |
], | |
[ | |
[1063, 1063], "mapped", [1095] | |
], | |
[ | |
[1064, 1064], "mapped", [1096] | |
], | |
[ | |
[1065, 1065], "mapped", [1097] | |
], | |
[ | |
[1066, 1066], "mapped", [1098] | |
], | |
[ | |
[1067, 1067], "mapped", [1099] | |
], | |
[ | |
[1068, 1068], "mapped", [1100] | |
], | |
[ | |
[1069, 1069], "mapped", [1101] | |
], | |
[ | |
[1070, 1070], "mapped", [1102] | |
], | |
[ | |
[1071, 1071], "mapped", [1103] | |
], | |
[ | |
[1072, 1103], "valid" | |
], | |
[ | |
[1104, 1104], "valid" | |
], | |
[ | |
[1105, 1116], "valid" | |
], | |
[ | |
[1117, 1117], "valid" | |
], | |
[ | |
[1118, 1119], "valid" | |
], | |
[ | |
[1120, 1120], "mapped", [1121] | |
], | |
[ | |
[1121, 1121], "valid" | |
], | |
[ | |
[1122, 1122], "mapped", [1123] | |
], | |
[ | |
[1123, 1123], "valid" | |
], | |
[ | |
[1124, 1124], "mapped", [1125] | |
], | |
[ | |
[1125, 1125], "valid" | |
], | |
[ | |
[1126, 1126], "mapped", [1127] | |
], | |
[ | |
[1127, 1127], "valid" | |
], | |
[ | |
[1128, 1128], "mapped", [1129] | |
], | |
[ | |
[1129, 1129], "valid" | |
], | |
[ | |
[1130, 1130], "mapped", [1131] | |
], | |
[ | |
[1131, 1131], "valid" | |
], | |
[ | |
[1132, 1132], "mapped", [1133] | |
], | |
[ | |
[1133, 1133], "valid" | |
], | |
[ | |
[1134, 1134], "mapped", [1135] | |
], | |
[ | |
[1135, 1135], "valid" | |
], | |
[ | |
[1136, 1136], "mapped", [1137] | |
], | |
[ | |
[1137, 1137], "valid" | |
], | |
[ | |
[1138, 1138], "mapped", [1139] | |
], | |
[ | |
[1139, 1139], "valid" | |
], | |
[ | |
[1140, 1140], "mapped", [1141] | |
], | |
[ | |
[1141, 1141], "valid" | |
], | |
[ | |
[1142, 1142], "mapped", [1143] | |
], | |
[ | |
[1143, 1143], "valid" | |
], | |
[ | |
[1144, 1144], "mapped", [1145] | |
], | |
[ | |
[1145, 1145], "valid" | |
], | |
[ | |
[1146, 1146], "mapped", [1147] | |
], | |
[ | |
[1147, 1147], "valid" | |
], | |
[ | |
[1148, 1148], "mapped", [1149] | |
], | |
[ | |
[1149, 1149], "valid" | |
], | |
[ | |
[1150, 1150], "mapped", [1151] | |
], | |
[ | |
[1151, 1151], "valid" | |
], | |
[ | |
[1152, 1152], "mapped", [1153] | |
], | |
[ | |
[1153, 1153], "valid" | |
], | |
[ | |
[1154, 1154], "valid", [], "NV8" | |
], | |
[ | |
[1155, 1158], "valid" | |
], | |
[ | |
[1159, 1159], "valid" | |
], | |
[ | |
[1160, 1161], "valid", [], "NV8" | |
], | |
[ | |
[1162, 1162], "mapped", [1163] | |
], | |
[ | |
[1163, 1163], "valid" | |
], | |
[ | |
[1164, 1164], "mapped", [1165] | |
], | |
[ | |
[1165, 1165], "valid" | |
], | |
[ | |
[1166, 1166], "mapped", [1167] | |
], | |
[ | |
[1167, 1167], "valid" | |
], | |
[ | |
[1168, 1168], "mapped", [1169] | |
], | |
[ | |
[1169, 1169], "valid" | |
], | |
[ | |
[1170, 1170], "mapped", [1171] | |
], | |
[ | |
[1171, 1171], "valid" | |
], | |
[ | |
[1172, 1172], "mapped", [1173] | |
], | |
[ | |
[1173, 1173], "valid" | |
], | |
[ | |
[1174, 1174], "mapped", [1175] | |
], | |
[ | |
[1175, 1175], "valid" | |
], | |
[ | |
[1176, 1176], "mapped", [1177] | |
], | |
[ | |
[1177, 1177], "valid" | |
], | |
[ | |
[1178, 1178], "mapped", [1179] | |
], | |
[ | |
[1179, 1179], "valid" | |
], | |
[ | |
[1180, 1180], "mapped", [1181] | |
], | |
[ | |
[1181, 1181], "valid" | |
], | |
[ | |
[1182, 1182], "mapped", [1183] | |
], | |
[ | |
[1183, 1183], "valid" | |
], | |
[ | |
[1184, 1184], "mapped", [1185] | |
], | |
[ | |
[1185, 1185], "valid" | |
], | |
[ | |
[1186, 1186], "mapped", [1187] | |
], | |
[ | |
[1187, 1187], "valid" | |
], | |
[ | |
[1188, 1188], "mapped", [1189] | |
], | |
[ | |
[1189, 1189], "valid" | |
], | |
[ | |
[1190, 1190], "mapped", [1191] | |
], | |
[ | |
[1191, 1191], "valid" | |
], | |
[ | |
[1192, 1192], "mapped", [1193] | |
], | |
[ | |
[1193, 1193], "valid" | |
], | |
[ | |
[1194, 1194], "mapped", [1195] | |
], | |
[ | |
[1195, 1195], "valid" | |
], | |
[ | |
[1196, 1196], "mapped", [1197] | |
], | |
[ | |
[1197, 1197], "valid" | |
], | |
[ | |
[1198, 1198], "mapped", [1199] | |
], | |
[ | |
[1199, 1199], "valid" | |
], | |
[ | |
[1200, 1200], "mapped", [1201] | |
], | |
[ | |
[1201, 1201], "valid" | |
], | |
[ | |
[1202, 1202], "mapped", [1203] | |
], | |
[ | |
[1203, 1203], "valid" | |
], | |
[ | |
[1204, 1204], "mapped", [1205] | |
], | |
[ | |
[1205, 1205], "valid" | |
], | |
[ | |
[1206, 1206], "mapped", [1207] | |
], | |
[ | |
[1207, 1207], "valid" | |
], | |
[ | |
[1208, 1208], "mapped", [1209] | |
], | |
[ | |
[1209, 1209], "valid" | |
], | |
[ | |
[1210, 1210], "mapped", [1211] | |
], | |
[ | |
[1211, 1211], "valid" | |
], | |
[ | |
[1212, 1212], "mapped", [1213] | |
], | |
[ | |
[1213, 1213], "valid" | |
], | |
[ | |
[1214, 1214], "mapped", [1215] | |
], | |
[ | |
[1215, 1215], "valid" | |
], | |
[ | |
[1216, 1216], "disallowed" | |
], | |
[ | |
[1217, 1217], "mapped", [1218] | |
], | |
[ | |
[1218, 1218], "valid" | |
], | |
[ | |
[1219, 1219], "mapped", [1220] | |
], | |
[ | |
[1220, 1220], "valid" | |
], | |
[ | |
[1221, 1221], "mapped", [1222] | |
], | |
[ | |
[1222, 1222], "valid" | |
], | |
[ | |
[1223, 1223], "mapped", [1224] | |
], | |
[ | |
[1224, 1224], "valid" | |
], | |
[ | |
[1225, 1225], "mapped", [1226] | |
], | |
[ | |
[1226, 1226], "valid" | |
], | |
[ | |
[1227, 1227], "mapped", [1228] | |
], | |
[ | |
[1228, 1228], "valid" | |
], | |
[ | |
[1229, 1229], "mapped", [1230] | |
], | |
[ | |
[1230, 1230], "valid" | |
], | |
[ | |
[1231, 1231], "valid" | |
], | |
[ | |
[1232, 1232], "mapped", [1233] | |
], | |
[ | |
[1233, 1233], "valid" | |
], | |
[ | |
[1234, 1234], "mapped", [1235] | |
], | |
[ | |
[1235, 1235], "valid" | |
], | |
[ | |
[1236, 1236], "mapped", [1237] | |
], | |
[ | |
[1237, 1237], "valid" | |
], | |
[ | |
[1238, 1238], "mapped", [1239] | |
], | |
[ | |
[1239, 1239], "valid" | |
], | |
[ | |
[1240, 1240], "mapped", [1241] | |
], | |
[ | |
[1241, 1241], "valid" | |
], | |
[ | |
[1242, 1242], "mapped", [1243] | |
], | |
[ | |
[1243, 1243], "valid" | |
], | |
[ | |
[1244, 1244], "mapped", [1245] | |
], | |
[ | |
[1245, 1245], "valid" | |
], | |
[ | |
[1246, 1246], "mapped", [1247] | |
], | |
[ | |
[1247, 1247], "valid" | |
], | |
[ | |
[1248, 1248], "mapped", [1249] | |
], | |
[ | |
[1249, 1249], "valid" | |
], | |
[ | |
[1250, 1250], "mapped", [1251] | |
], | |
[ | |
[1251, 1251], "valid" | |
], | |
[ | |
[1252, 1252], "mapped", [1253] | |
], | |
[ | |
[1253, 1253], "valid" | |
], | |
[ | |
[1254, 1254], "mapped", [1255] | |
], | |
[ | |
[1255, 1255], "valid" | |
], | |
[ | |
[1256, 1256], "mapped", [1257] | |
], | |
[ | |
[1257, 1257], "valid" | |
], | |
[ | |
[1258, 1258], "mapped", [1259] | |
], | |
[ | |
[1259, 1259], "valid" | |
], | |
[ | |
[1260, 1260], "mapped", [1261] | |
], | |
[ | |
[1261, 1261], "valid" | |
], | |
[ | |
[1262, 1262], "mapped", [1263] | |
], | |
[ | |
[1263, 1263], "valid" | |
], | |
[ | |
[1264, 1264], "mapped", [1265] | |
], | |
[ | |
[1265, 1265], "valid" | |
], | |
[ | |
[1266, 1266], "mapped", [1267] | |
], | |
[ | |
[1267, 1267], "valid" | |
], | |
[ | |
[1268, 1268], "mapped", [1269] | |
], | |
[ | |
[1269, 1269], "valid" | |
], | |
[ | |
[1270, 1270], "mapped", [1271] | |
], | |
[ | |
[1271, 1271], "valid" | |
], | |
[ | |
[1272, 1272], "mapped", [1273] | |
], | |
[ | |
[1273, 1273], "valid" | |
], | |
[ | |
[1274, 1274], "mapped", [1275] | |
], | |
[ | |
[1275, 1275], "valid" | |
], | |
[ | |
[1276, 1276], "mapped", [1277] | |
], | |
[ | |
[1277, 1277], "valid" | |
], | |
[ | |
[1278, 1278], "mapped", [1279] | |
], | |
[ | |
[1279, 1279], "valid" | |
], | |
[ | |
[1280, 1280], "mapped", [1281] | |
], | |
[ | |
[1281, 1281], "valid" | |
], | |
[ | |
[1282, 1282], "mapped", [1283] | |
], | |
[ | |
[1283, 1283], "valid" | |
], | |
[ | |
[1284, 1284], "mapped", [1285] | |
], | |
[ | |
[1285, 1285], "valid" | |
], | |
[ | |
[1286, 1286], "mapped", [1287] | |
], | |
[ | |
[1287, 1287], "valid" | |
], | |
[ | |
[1288, 1288], "mapped", [1289] | |
], | |
[ | |
[1289, 1289], "valid" | |
], | |
[ | |
[1290, 1290], "mapped", [1291] | |
], | |
[ | |
[1291, 1291], "valid" | |
], | |
[ | |
[1292, 1292], "mapped", [1293] | |
], | |
[ | |
[1293, 1293], "valid" | |
], | |
[ | |
[1294, 1294], "mapped", [1295] | |
], | |
[ | |
[1295, 1295], "valid" | |
], | |
[ | |
[1296, 1296], "mapped", [1297] | |
], | |
[ | |
[1297, 1297], "valid" | |
], | |
[ | |
[1298, 1298], "mapped", [1299] | |
], | |
[ | |
[1299, 1299], "valid" | |
], | |
[ | |
[1300, 1300], "mapped", [1301] | |
], | |
[ | |
[1301, 1301], "valid" | |
], | |
[ | |
[1302, 1302], "mapped", [1303] | |
], | |
[ | |
[1303, 1303], "valid" | |
], | |
[ | |
[1304, 1304], "mapped", [1305] | |
], | |
[ | |
[1305, 1305], "valid" | |
], | |
[ | |
[1306, 1306], "mapped", [1307] | |
], | |
[ | |
[1307, 1307], "valid" | |
], | |
[ | |
[1308, 1308], "mapped", [1309] | |
], | |
[ | |
[1309, 1309], "valid" | |
], | |
[ | |
[1310, 1310], "mapped", [1311] | |
], | |
[ | |
[1311, 1311], "valid" | |
], | |
[ | |
[1312, 1312], "mapped", [1313] | |
], | |
[ | |
[1313, 1313], "valid" | |
], | |
[ | |
[1314, 1314], "mapped", [1315] | |
], | |
[ | |
[1315, 1315], "valid" | |
], | |
[ | |
[1316, 1316], "mapped", [1317] | |
], | |
[ | |
[1317, 1317], "valid" | |
], | |
[ | |
[1318, 1318], "mapped", [1319] | |
], | |
[ | |
[1319, 1319], "valid" | |
], | |
[ | |
[1320, 1320], "mapped", [1321] | |
], | |
[ | |
[1321, 1321], "valid" | |
], | |
[ | |
[1322, 1322], "mapped", [1323] | |
], | |
[ | |
[1323, 1323], "valid" | |
], | |
[ | |
[1324, 1324], "mapped", [1325] | |
], | |
[ | |
[1325, 1325], "valid" | |
], | |
[ | |
[1326, 1326], "mapped", [1327] | |
], | |
[ | |
[1327, 1327], "valid" | |
], | |
[ | |
[1328, 1328], "disallowed" | |
], | |
[ | |
[1329, 1329], "mapped", [1377] | |
], | |
[ | |
[1330, 1330], "mapped", [1378] | |
], | |
[ | |
[1331, 1331], "mapped", [1379] | |
], | |
[ | |
[1332, 1332], "mapped", [1380] | |
], | |
[ | |
[1333, 1333], "mapped", [1381] | |
], | |
[ | |
[1334, 1334], "mapped", [1382] | |
], | |
[ | |
[1335, 1335], "mapped", [1383] | |
], | |
[ | |
[1336, 1336], "mapped", [1384] | |
], | |
[ | |
[1337, 1337], "mapped", [1385] | |
], | |
[ | |
[1338, 1338], "mapped", [1386] | |
], | |
[ | |
[1339, 1339], "mapped", [1387] | |
], | |
[ | |
[1340, 1340], "mapped", [1388] | |
], | |
[ | |
[1341, 1341], "mapped", [1389] | |
], | |
[ | |
[1342, 1342], "mapped", [1390] | |
], | |
[ | |
[1343, 1343], "mapped", [1391] | |
], | |
[ | |
[1344, 1344], "mapped", [1392] | |
], | |
[ | |
[1345, 1345], "mapped", [1393] | |
], | |
[ | |
[1346, 1346], "mapped", [1394] | |
], | |
[ | |
[1347, 1347], "mapped", [1395] | |
], | |
[ | |
[1348, 1348], "mapped", [1396] | |
], | |
[ | |
[1349, 1349], "mapped", [1397] | |
], | |
[ | |
[1350, 1350], "mapped", [1398] | |
], | |
[ | |
[1351, 1351], "mapped", [1399] | |
], | |
[ | |
[1352, 1352], "mapped", [1400] | |
], | |
[ | |
[1353, 1353], "mapped", [1401] | |
], | |
[ | |
[1354, 1354], "mapped", [1402] | |
], | |
[ | |
[1355, 1355], "mapped", [1403] | |
], | |
[ | |
[1356, 1356], "mapped", [1404] | |
], | |
[ | |
[1357, 1357], "mapped", [1405] | |
], | |
[ | |
[1358, 1358], "mapped", [1406] | |
], | |
[ | |
[1359, 1359], "mapped", [1407] | |
], | |
[ | |
[1360, 1360], "mapped", [1408] | |
], | |
[ | |
[1361, 1361], "mapped", [1409] | |
], | |
[ | |
[1362, 1362], "mapped", [1410] | |
], | |
[ | |
[1363, 1363], "mapped", [1411] | |
], | |
[ | |
[1364, 1364], "mapped", [1412] | |
], | |
[ | |
[1365, 1365], "mapped", [1413] | |
], | |
[ | |
[1366, 1366], "mapped", [1414] | |
], | |
[ | |
[1367, 1368], "disallowed" | |
], | |
[ | |
[1369, 1369], "valid" | |
], | |
[ | |
[1370, 1375], "valid", [], "NV8" | |
], | |
[ | |
[1376, 1376], "disallowed" | |
], | |
[ | |
[1377, 1414], "valid" | |
], | |
[ | |
[1415, 1415], "mapped", [1381, 1410] | |
], | |
[ | |
[1416, 1416], "disallowed" | |
], | |
[ | |
[1417, 1417], "valid", [], "NV8" | |
], | |
[ | |
[1418, 1418], "valid", [], "NV8" | |
], | |
[ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment