Last active
March 17, 2025 14:18
-
-
Save leehanchung/3ba563d2d4b990be165deb446c8bfd6e to your computer and use it in GitHub Desktop.
formatted claude code cli.mjs
This file has been truncated, but you can view the full file.
This file contains 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). | |
// Version: 0.2.29 | |
import { createRequire as iv2 } from 'node:module' | |
var hv2 = Object.create | |
var { getPrototypeOf: xv2, defineProperty: lt, getOwnPropertyNames: cv2 } = Object | |
var pv2 = Object.prototype.hasOwnProperty | |
var X1 = (I, G, Z) => { | |
Z = I != null ? hv2(xv2(I)) : {} | |
let d = G || !I || !I.__esModule ? lt(Z, 'default', { value: I, enumerable: !0 }) : Z | |
for (let W of cv2(I)) if (!pv2.call(d, W)) lt(d, W, { get: () => I[W], enumerable: !0 }) | |
return d | |
} | |
var _ = (I, G) => () => (G || I((G = { exports: {} }).exports, G), G.exports) | |
var rE = (I, G) => { | |
for (var Z in G) | |
lt(I, Z, { get: G[Z], enumerable: !0, configurable: !0, set: (d) => (G[Z] = () => d) }) | |
} | |
var XB = (I, G) => () => (I && (G = I((I = 0))), G) | |
var A1 = iv2(import.meta.url) | |
var sZ = _((SQ1) => { | |
Object.defineProperty(SQ1, '__esModule', { value: !0 }) | |
var EQ1 = Object.prototype.toString | |
function nv2(I) { | |
switch (EQ1.call(I)) { | |
case '[object Error]': | |
case '[object Exception]': | |
case '[object DOMException]': | |
return !0 | |
default: | |
return mT(I, Error) | |
} | |
} | |
function SN(I, G) { | |
return EQ1.call(I) === `[object ${G}]` | |
} | |
function av2(I) { | |
return SN(I, 'ErrorEvent') | |
} | |
function rv2(I) { | |
return SN(I, 'DOMError') | |
} | |
function sv2(I) { | |
return SN(I, 'DOMException') | |
} | |
function ov2(I) { | |
return SN(I, 'String') | |
} | |
function vQ1(I) { | |
return ( | |
typeof I === 'object' && | |
I !== null && | |
'__sentry_template_string__' in I && | |
'__sentry_template_values__' in I | |
) | |
} | |
function ev2(I) { | |
return I === null || vQ1(I) || (typeof I !== 'object' && typeof I !== 'function') | |
} | |
function MQ1(I) { | |
return SN(I, 'Object') | |
} | |
function tv2(I) { | |
return typeof Event !== 'undefined' && mT(I, Event) | |
} | |
function IM2(I) { | |
return typeof Element !== 'undefined' && mT(I, Element) | |
} | |
function GM2(I) { | |
return SN(I, 'RegExp') | |
} | |
function ZM2(I) { | |
return Boolean(I && I.then && typeof I.then === 'function') | |
} | |
function dM2(I) { | |
return MQ1(I) && 'nativeEvent' in I && 'preventDefault' in I && 'stopPropagation' in I | |
} | |
function WM2(I) { | |
return typeof I === 'number' && I !== I | |
} | |
function mT(I, G) { | |
try { | |
return I instanceof G | |
} catch (Z) { | |
return !1 | |
} | |
} | |
function wM2(I) { | |
return !!(typeof I === 'object' && I !== null && (I.__isVue || I._isVue)) | |
} | |
SQ1.isDOMError = rv2 | |
SQ1.isDOMException = sv2 | |
SQ1.isElement = IM2 | |
SQ1.isError = nv2 | |
SQ1.isErrorEvent = av2 | |
SQ1.isEvent = tv2 | |
SQ1.isInstanceOf = mT | |
SQ1.isNaN = WM2 | |
SQ1.isParameterizedString = vQ1 | |
SQ1.isPlainObject = MQ1 | |
SQ1.isPrimitive = ev2 | |
SQ1.isRegExp = GM2 | |
SQ1.isString = ov2 | |
SQ1.isSyntheticEvent = dM2 | |
SQ1.isThenable = ZM2 | |
SQ1.isVueViewModel = wM2 | |
}) | |
var sE = _(($Q1) => { | |
Object.defineProperty($Q1, '__esModule', { value: !0 }) | |
var bT = sZ() | |
function qM2(I, G = 0) { | |
if (typeof I !== 'string' || G === 0) return I | |
return I.length <= G ? I : `${I.slice(0, G)}...` | |
} | |
function UM2(I, G) { | |
let Z = I, | |
d = Z.length | |
if (d <= 150) return Z | |
if (G > d) G = d | |
let W = Math.max(G - 60, 0) | |
if (W < 5) W = 0 | |
let w = Math.min(W + 140, d) | |
if (w > d - 5) w = d | |
if (w === d) W = Math.max(w - 140, 0) | |
if (((Z = Z.slice(W, w)), W > 0)) Z = `'{snip} ${Z}` | |
if (w < d) Z += ' {snip}' | |
return Z | |
} | |
function fM2(I, G) { | |
if (!Array.isArray(I)) return '' | |
let Z = [] | |
for (let d = 0; d < I.length; d++) { | |
let W = I[d] | |
try { | |
if (bT.isVueViewModel(W)) Z.push('[VueViewModel]') | |
else Z.push(String(W)) | |
} catch (w) { | |
Z.push('[value cannot be serialized]') | |
} | |
} | |
return Z.join(G) | |
} | |
function LQ1(I, G, Z = !1) { | |
if (!bT.isString(I)) return !1 | |
if (bT.isRegExp(G)) return G.test(I) | |
if (bT.isString(G)) return Z ? I === G : I.includes(G) | |
return !1 | |
} | |
function RM2(I, G = [], Z = !1) { | |
return G.some((d) => LQ1(I, d, Z)) | |
} | |
$Q1.isMatchingPattern = LQ1 | |
$Q1.safeJoin = fM2 | |
$Q1.snipLine = UM2 | |
$Q1.stringMatchesSomePattern = RM2 | |
$Q1.truncate = qM2 | |
}) | |
var uQ1 = _((OQ1) => { | |
Object.defineProperty(OQ1, '__esModule', { value: !0 }) | |
var jt = sZ(), | |
$M2 = sE() | |
function yM2(I, G, Z = 250, d, W, w, B) { | |
if (!w.exception || !w.exception.values || !B || !jt.isInstanceOf(B.originalException, Error)) | |
return | |
let C = | |
w.exception.values.length > 0 ? w.exception.values[w.exception.values.length - 1] : void 0 | |
if (C) | |
w.exception.values = PM2(kt(I, G, W, B.originalException, d, w.exception.values, C, 0), Z) | |
} | |
function kt(I, G, Z, d, W, w, B, C) { | |
if (w.length >= Z + 1) return w | |
let V = [...w] | |
if (jt.isInstanceOf(d[W], Error)) { | |
yQ1(B, C) | |
let A = I(G, d[W]), | |
X = V.length | |
PQ1(A, W, X, C), (V = kt(I, G, Z, d[W], W, [A, ...V], A, X)) | |
} | |
if (Array.isArray(d.errors)) | |
d.errors.forEach((A, X) => { | |
if (jt.isInstanceOf(A, Error)) { | |
yQ1(B, C) | |
let Y = I(G, A), | |
H = V.length | |
PQ1(Y, `errors[${X}]`, H, C), (V = kt(I, G, Z, A, W, [Y, ...V], Y, H)) | |
} | |
}) | |
return V | |
} | |
function yQ1(I, G) { | |
;(I.mechanism = I.mechanism || { type: 'generic', handled: !0 }), | |
(I.mechanism = { | |
...I.mechanism, | |
...(I.type === 'AggregateError' && { is_exception_group: !0 }), | |
exception_id: G, | |
}) | |
} | |
function PQ1(I, G, Z, d) { | |
;(I.mechanism = I.mechanism || { type: 'generic', handled: !0 }), | |
(I.mechanism = { ...I.mechanism, type: 'chained', source: G, exception_id: Z, parent_id: d }) | |
} | |
function PM2(I, G) { | |
return I.map((Z) => { | |
if (Z.value) Z.value = $M2.truncate(Z.value, G) | |
return Z | |
}) | |
} | |
OQ1.applyAggregateErrorsToEvent = yM2 | |
}) | |
var q7 = _((TQ1) => { | |
Object.defineProperty(TQ1, '__esModule', { value: !0 }) | |
function lT(I) { | |
return I && I.Math == Math ? I : void 0 | |
} | |
var ht = | |
(typeof globalThis == 'object' && lT(globalThis)) || | |
(typeof window == 'object' && lT(window)) || | |
(typeof self == 'object' && lT(self)) || | |
(typeof global == 'object' && lT(global)) || | |
(function () { | |
return this | |
})() || | |
{} | |
function uM2() { | |
return ht | |
} | |
function TM2(I, G, Z) { | |
let d = Z || ht, | |
W = (d.__SENTRY__ = d.__SENTRY__ || {}) | |
return W[I] || (W[I] = G()) | |
} | |
TQ1.GLOBAL_OBJ = ht | |
TQ1.getGlobalObject = uM2 | |
TQ1.getGlobalSingleton = TM2 | |
}) | |
var xt = _((mQ1) => { | |
Object.defineProperty(mQ1, '__esModule', { value: !0 }) | |
var jM2 = sZ(), | |
kM2 = q7(), | |
LN = kM2.getGlobalObject(), | |
hM2 = 80 | |
function xM2(I, G = {}) { | |
if (!I) return '<unknown>' | |
try { | |
let Z = I, | |
d = 5, | |
W = [], | |
w = 0, | |
B = 0, | |
C = ' > ', | |
V = C.length, | |
A, | |
X = Array.isArray(G) ? G : G.keyAttrs, | |
Y = (!Array.isArray(G) && G.maxStringLength) || hM2 | |
while (Z && w++ < d) { | |
if (((A = cM2(Z, X)), A === 'html' || (w > 1 && B + W.length * V + A.length >= Y))) break | |
W.push(A), (B += A.length), (Z = Z.parentNode) | |
} | |
return W.reverse().join(C) | |
} catch (Z) { | |
return '<unknown>' | |
} | |
} | |
function cM2(I, G) { | |
let Z = I, | |
d = [], | |
W, | |
w, | |
B, | |
C, | |
V | |
if (!Z || !Z.tagName) return '' | |
if (LN.HTMLElement) { | |
if (Z instanceof HTMLElement && Z.dataset && Z.dataset.sentryComponent) | |
return Z.dataset.sentryComponent | |
} | |
d.push(Z.tagName.toLowerCase()) | |
let A = | |
G && G.length ? G.filter((Y) => Z.getAttribute(Y)).map((Y) => [Y, Z.getAttribute(Y)]) : null | |
if (A && A.length) | |
A.forEach((Y) => { | |
d.push(`[${Y[0]}="${Y[1]}"]`) | |
}) | |
else { | |
if (Z.id) d.push(`#${Z.id}`) | |
if (((W = Z.className), W && jM2.isString(W))) { | |
w = W.split(/\s+/) | |
for (V = 0; V < w.length; V++) d.push(`.${w[V]}`) | |
} | |
} | |
let X = ['aria-label', 'type', 'name', 'title', 'alt'] | |
for (V = 0; V < X.length; V++) | |
if (((B = X[V]), (C = Z.getAttribute(B)), C)) d.push(`[${B}="${C}"]`) | |
return d.join('') | |
} | |
function pM2() { | |
try { | |
return LN.document.location.href | |
} catch (I) { | |
return '' | |
} | |
} | |
function iM2(I) { | |
if (LN.document && LN.document.querySelector) return LN.document.querySelector(I) | |
return null | |
} | |
function nM2(I) { | |
if (!LN.HTMLElement) return null | |
let G = I, | |
Z = 5 | |
for (let d = 0; d < Z; d++) { | |
if (!G) return null | |
if (G instanceof HTMLElement && G.dataset.sentryComponent) return G.dataset.sentryComponent | |
G = G.parentNode | |
} | |
return null | |
} | |
mQ1.getComponentName = nM2 | |
mQ1.getDomElement = iM2 | |
mQ1.getLocationHref = pM2 | |
mQ1.htmlTreeAsString = xM2 | |
}) | |
var YB = _((bQ1) => { | |
Object.defineProperty(bQ1, '__esModule', { value: !0 }) | |
var eM2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
bQ1.DEBUG_BUILD = eM2 | |
}) | |
var NW = _((jQ1) => { | |
Object.defineProperty(jQ1, '__esModule', { value: !0 }) | |
var IS2 = YB(), | |
ct = q7(), | |
GS2 = 'Sentry Logger ', | |
pt = ['debug', 'info', 'warn', 'error', 'log', 'assert', 'trace'], | |
it = {} | |
function lQ1(I) { | |
if (!('console' in ct.GLOBAL_OBJ)) return I() | |
let G = ct.GLOBAL_OBJ.console, | |
Z = {}, | |
d = Object.keys(it) | |
d.forEach((W) => { | |
let w = it[W] | |
;(Z[W] = G[W]), (G[W] = w) | |
}) | |
try { | |
return I() | |
} finally { | |
d.forEach((W) => { | |
G[W] = Z[W] | |
}) | |
} | |
} | |
function ZS2() { | |
let I = !1, | |
G = { | |
enable: () => { | |
I = !0 | |
}, | |
disable: () => { | |
I = !1 | |
}, | |
isEnabled: () => I, | |
} | |
if (IS2.DEBUG_BUILD) | |
pt.forEach((Z) => { | |
G[Z] = (...d) => { | |
if (I) | |
lQ1(() => { | |
ct.GLOBAL_OBJ.console[Z](`${GS2}[${Z}]:`, ...d) | |
}) | |
} | |
}) | |
else | |
pt.forEach((Z) => { | |
G[Z] = () => { | |
return | |
} | |
}) | |
return G | |
} | |
var dS2 = ZS2() | |
jQ1.CONSOLE_LEVELS = pt | |
jQ1.consoleSandbox = lQ1 | |
jQ1.logger = dS2 | |
jQ1.originalConsoleMethods = it | |
}) | |
var nt = _((xQ1) => { | |
Object.defineProperty(xQ1, '__esModule', { value: !0 }) | |
var VS2 = YB(), | |
oE = NW(), | |
AS2 = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/ | |
function XS2(I) { | |
return I === 'http' || I === 'https' | |
} | |
function YS2(I, G = !1) { | |
let { host: Z, path: d, pass: W, port: w, projectId: B, protocol: C, publicKey: V } = I | |
return `${C}://${V}${G && W ? `:${W}` : ''}@${Z}${w ? `:${w}` : ''}/${d ? `${d}/` : d}${B}` | |
} | |
function kQ1(I) { | |
let G = AS2.exec(I) | |
if (!G) { | |
oE.consoleSandbox(() => { | |
console.error(`Invalid Sentry Dsn: ${I}`) | |
}) | |
return | |
} | |
let [Z, d, W = '', w, B = '', C] = G.slice(1), | |
V = '', | |
A = C, | |
X = A.split('/') | |
if (X.length > 1) (V = X.slice(0, -1).join('/')), (A = X.pop()) | |
if (A) { | |
let Y = A.match(/^\d+/) | |
if (Y) A = Y[0] | |
} | |
return hQ1({ host: w, pass: W, path: V, projectId: A, port: B, protocol: Z, publicKey: d }) | |
} | |
function hQ1(I) { | |
return { | |
protocol: I.protocol, | |
publicKey: I.publicKey || '', | |
pass: I.pass || '', | |
host: I.host, | |
port: I.port || '', | |
path: I.path || '', | |
projectId: I.projectId, | |
} | |
} | |
function _S2(I) { | |
if (!VS2.DEBUG_BUILD) return !0 | |
let { port: G, projectId: Z, protocol: d } = I | |
if ( | |
['protocol', 'publicKey', 'host', 'projectId'].find((B) => { | |
if (!I[B]) return oE.logger.error(`Invalid Sentry Dsn: ${B} missing`), !0 | |
return !1 | |
}) | |
) | |
return !1 | |
if (!Z.match(/^\d+$/)) return oE.logger.error(`Invalid Sentry Dsn: Invalid projectId ${Z}`), !1 | |
if (!XS2(d)) return oE.logger.error(`Invalid Sentry Dsn: Invalid protocol ${d}`), !1 | |
if (G && isNaN(parseInt(G, 10))) | |
return oE.logger.error(`Invalid Sentry Dsn: Invalid port ${G}`), !1 | |
return !0 | |
} | |
function DS2(I) { | |
let G = typeof I === 'string' ? kQ1(I) : hQ1(I) | |
if (!G || !_S2(G)) return | |
return G | |
} | |
xQ1.dsnFromString = kQ1 | |
xQ1.dsnToString = YS2 | |
xQ1.makeDsn = DS2 | |
}) | |
var at = _((pQ1) => { | |
Object.defineProperty(pQ1, '__esModule', { value: !0 }) | |
class cQ1 extends Error { | |
constructor(I, G = 'warn') { | |
super(I) | |
;(this.message = I), | |
(this.name = new.target.prototype.constructor.name), | |
Object.setPrototypeOf(this, new.target.prototype), | |
(this.logLevel = G) | |
} | |
} | |
pQ1.SentryError = cQ1 | |
}) | |
var oZ = _((eQ1) => { | |
Object.defineProperty(eQ1, '__esModule', { value: !0 }) | |
var gS2 = xt(), | |
NS2 = YB(), | |
$N = sZ(), | |
zS2 = NW(), | |
iQ1 = sE() | |
function QS2(I, G, Z) { | |
if (!(G in I)) return | |
let d = I[G], | |
W = Z(d) | |
if (typeof W === 'function') sQ1(W, d) | |
I[G] = W | |
} | |
function rQ1(I, G, Z) { | |
try { | |
Object.defineProperty(I, G, { value: Z, writable: !0, configurable: !0 }) | |
} catch (d) { | |
NS2.DEBUG_BUILD && zS2.logger.log(`Failed to add non-enumerable property "${G}" to object`, I) | |
} | |
} | |
function sQ1(I, G) { | |
try { | |
let Z = G.prototype || {} | |
;(I.prototype = G.prototype = Z), rQ1(I, '__sentry_original__', G) | |
} catch (Z) {} | |
} | |
function qS2(I) { | |
return I.__sentry_original__ | |
} | |
function US2(I) { | |
return Object.keys(I) | |
.map((G) => `${encodeURIComponent(G)}=${encodeURIComponent(I[G])}`) | |
.join('&') | |
} | |
function oQ1(I) { | |
if ($N.isError(I)) return { message: I.message, name: I.name, stack: I.stack, ...aQ1(I) } | |
else if ($N.isEvent(I)) { | |
let G = { | |
type: I.type, | |
target: nQ1(I.target), | |
currentTarget: nQ1(I.currentTarget), | |
...aQ1(I), | |
} | |
if (typeof CustomEvent !== 'undefined' && $N.isInstanceOf(I, CustomEvent)) G.detail = I.detail | |
return G | |
} else return I | |
} | |
function nQ1(I) { | |
try { | |
return $N.isElement(I) ? gS2.htmlTreeAsString(I) : Object.prototype.toString.call(I) | |
} catch (G) { | |
return '<unknown>' | |
} | |
} | |
function aQ1(I) { | |
if (typeof I === 'object' && I !== null) { | |
let G = {} | |
for (let Z in I) if (Object.prototype.hasOwnProperty.call(I, Z)) G[Z] = I[Z] | |
return G | |
} else return {} | |
} | |
function fS2(I, G = 40) { | |
let Z = Object.keys(oQ1(I)) | |
if ((Z.sort(), !Z.length)) return '[object has no keys]' | |
if (Z[0].length >= G) return iQ1.truncate(Z[0], G) | |
for (let d = Z.length; d > 0; d--) { | |
let W = Z.slice(0, d).join(', ') | |
if (W.length > G) continue | |
if (d === Z.length) return W | |
return iQ1.truncate(W, G) | |
} | |
return '' | |
} | |
function RS2(I) { | |
return rt(I, new Map()) | |
} | |
function rt(I, G) { | |
if (ES2(I)) { | |
let Z = G.get(I) | |
if (Z !== void 0) return Z | |
let d = {} | |
G.set(I, d) | |
for (let W of Object.keys(I)) if (typeof I[W] !== 'undefined') d[W] = rt(I[W], G) | |
return d | |
} | |
if (Array.isArray(I)) { | |
let Z = G.get(I) | |
if (Z !== void 0) return Z | |
let d = [] | |
return ( | |
G.set(I, d), | |
I.forEach((W) => { | |
d.push(rt(W, G)) | |
}), | |
d | |
) | |
} | |
return I | |
} | |
function ES2(I) { | |
if (!$N.isPlainObject(I)) return !1 | |
try { | |
let G = Object.getPrototypeOf(I).constructor.name | |
return !G || G === 'Object' | |
} catch (G) { | |
return !0 | |
} | |
} | |
function vS2(I) { | |
let G | |
switch (!0) { | |
case I === void 0 || I === null: | |
G = new String(I) | |
break | |
case typeof I === 'symbol' || typeof I === 'bigint': | |
G = Object(I) | |
break | |
case $N.isPrimitive(I): | |
G = new I.constructor(I) | |
break | |
default: | |
G = I | |
break | |
} | |
return G | |
} | |
eQ1.addNonEnumerableProperty = rQ1 | |
eQ1.convertToPlainObject = oQ1 | |
eQ1.dropUndefinedKeys = RS2 | |
eQ1.extractExceptionKeysForMessage = fS2 | |
eQ1.fill = QS2 | |
eQ1.getOriginalFunction = qS2 | |
eQ1.markFunctionWrapped = sQ1 | |
eQ1.objectify = vS2 | |
eQ1.urlEncode = US2 | |
}) | |
var jT = _((Iq1) => { | |
Object.defineProperty(Iq1, '__esModule', { value: !0 }) | |
function tQ1(I, G = !1) { | |
return ( | |
!( | |
G || | |
(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 mS2(I) { | |
let G = /^\s*[-]{4,}$/, | |
Z = /at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/ | |
return (d) => { | |
let W = d.match(Z) | |
if (W) { | |
let w, B, C, V, A | |
if (W[1]) { | |
C = W[1] | |
let H = C.lastIndexOf('.') | |
if (C[H - 1] === '.') H-- | |
if (H > 0) { | |
;(w = C.slice(0, H)), (B = C.slice(H + 1)) | |
let J = w.indexOf('.Module') | |
if (J > 0) (C = C.slice(J + 1)), (w = w.slice(0, J)) | |
} | |
V = void 0 | |
} | |
if (B) (V = w), (A = B) | |
if (B === '<anonymous>') (A = void 0), (C = void 0) | |
if (C === void 0) (A = A || '<anonymous>'), (C = V ? `${V}.${A}` : A) | |
let X = W[2] && W[2].startsWith('file://') ? W[2].slice(7) : W[2], | |
Y = W[5] === 'native' | |
if (X && X.match(/\/[A-Z]:/)) X = X.slice(1) | |
if (!X && W[5] && !Y) X = W[5] | |
return { | |
filename: X, | |
module: I ? I(X) : void 0, | |
function: C, | |
lineno: parseInt(W[3], 10) || void 0, | |
colno: parseInt(W[4], 10) || void 0, | |
in_app: tQ1(X, Y), | |
} | |
} | |
if (d.match(G)) return { filename: d } | |
return | |
} | |
} | |
Iq1.filenameIsInApp = tQ1 | |
Iq1.node = mS2 | |
}) | |
var kT = _((Cq1) => { | |
Object.defineProperty(Cq1, '__esModule', { value: !0 }) | |
var dq1 = jT(), | |
Wq1 = 50, | |
Gq1 = /\(error: (.*)\)/, | |
Zq1 = /captureMessage|captureException/ | |
function wq1(...I) { | |
let G = I.sort((Z, d) => Z[0] - d[0]).map((Z) => Z[1]) | |
return (Z, d = 0) => { | |
let W = [], | |
w = Z.split(` | |
`) | |
for (let B = d; B < w.length; B++) { | |
let C = w[B] | |
if (C.length > 1024) continue | |
let V = Gq1.test(C) ? C.replace(Gq1, '$1') : C | |
if (V.match(/\S*Error: /)) continue | |
for (let A of G) { | |
let X = A(V) | |
if (X) { | |
W.push(X) | |
break | |
} | |
} | |
if (W.length >= Wq1) break | |
} | |
return Bq1(W) | |
} | |
} | |
function jS2(I) { | |
if (Array.isArray(I)) return wq1(...I) | |
return I | |
} | |
function Bq1(I) { | |
if (!I.length) return [] | |
let G = Array.from(I) | |
if (/sentryWrapped/.test(G[G.length - 1].function || '')) G.pop() | |
if ((G.reverse(), Zq1.test(G[G.length - 1].function || ''))) { | |
if ((G.pop(), Zq1.test(G[G.length - 1].function || ''))) G.pop() | |
} | |
return G.slice(0, Wq1).map((Z) => ({ | |
...Z, | |
filename: Z.filename || G[G.length - 1].filename, | |
function: Z.function || '?', | |
})) | |
} | |
var st = '<anonymous>' | |
function kS2(I) { | |
try { | |
if (!I || typeof I !== 'function') return st | |
return I.name || st | |
} catch (G) { | |
return st | |
} | |
} | |
function hS2(I) { | |
return [90, dq1.node(I)] | |
} | |
Cq1.filenameIsInApp = dq1.filenameIsInApp | |
Cq1.createStackParser = wq1 | |
Cq1.getFunctionName = kS2 | |
Cq1.nodeStackLineParser = hS2 | |
Cq1.stackParserFromStackParserOptions = jS2 | |
Cq1.stripSentryFramesAndReverse = Bq1 | |
}) | |
var $V = _((Aq1) => { | |
Object.defineProperty(Aq1, '__esModule', { value: !0 }) | |
var rS2 = YB(), | |
sS2 = NW(), | |
oS2 = kT(), | |
yN = {}, | |
Vq1 = {} | |
function eS2(I, G) { | |
;(yN[I] = yN[I] || []), yN[I].push(G) | |
} | |
function tS2() { | |
Object.keys(yN).forEach((I) => { | |
yN[I] = void 0 | |
}) | |
} | |
function IL2(I, G) { | |
if (!Vq1[I]) G(), (Vq1[I] = !0) | |
} | |
function GL2(I, G) { | |
let Z = I && yN[I] | |
if (!Z) return | |
for (let d of Z) | |
try { | |
d(G) | |
} catch (W) { | |
rS2.DEBUG_BUILD && | |
sS2.logger.error( | |
`Error while triggering instrumentation handler. | |
Type: ${I} | |
Name: ${oS2.getFunctionName(d)} | |
Error:`, | |
W, | |
) | |
} | |
} | |
Aq1.addHandler = eS2 | |
Aq1.maybeInstrument = IL2 | |
Aq1.resetInstrumentationHandlers = tS2 | |
Aq1.triggerHandlers = GL2 | |
}) | |
var tt = _((Xq1) => { | |
Object.defineProperty(Xq1, '__esModule', { value: !0 }) | |
var ot = NW(), | |
BL2 = oZ(), | |
hT = q7(), | |
et = $V() | |
function CL2(I) { | |
et.addHandler('console', I), et.maybeInstrument('console', VL2) | |
} | |
function VL2() { | |
if (!('console' in hT.GLOBAL_OBJ)) return | |
ot.CONSOLE_LEVELS.forEach(function (I) { | |
if (!(I in hT.GLOBAL_OBJ.console)) return | |
BL2.fill(hT.GLOBAL_OBJ.console, I, function (G) { | |
return ( | |
(ot.originalConsoleMethods[I] = G), | |
function (...Z) { | |
let d = { args: Z, level: I } | |
et.triggerHandlers('console', d) | |
let W = ot.originalConsoleMethods[I] | |
W && W.apply(hT.GLOBAL_OBJ.console, Z) | |
} | |
) | |
}) | |
}) | |
} | |
Xq1.addConsoleInstrumentationHandler = CL2 | |
}) | |
var eE = _((_q1) => { | |
Object.defineProperty(_q1, '__esModule', { value: !0 }) | |
var XL2 = oZ(), | |
I11 = sE(), | |
YL2 = q7() | |
function _L2() { | |
let I = YL2.GLOBAL_OBJ, | |
G = I.crypto || I.msCrypto, | |
Z = () => Math.random() * 16 | |
try { | |
if (G && G.randomUUID) return G.randomUUID().replace(/-/g, '') | |
if (G && G.getRandomValues) | |
Z = () => { | |
let d = new Uint8Array(1) | |
return G.getRandomValues(d), d[0] | |
} | |
} catch (d) {} | |
return ([1e7] + 1000 + 4000 + 8000 + 100000000000).replace(/[018]/g, (d) => | |
(d ^ ((Z() & 15) >> (d / 4))).toString(16), | |
) | |
} | |
function Yq1(I) { | |
return I.exception && I.exception.values ? I.exception.values[0] : void 0 | |
} | |
function DL2(I) { | |
let { message: G, event_id: Z } = I | |
if (G) return G | |
let d = Yq1(I) | |
if (d) { | |
if (d.type && d.value) return `${d.type}: ${d.value}` | |
return d.type || d.value || Z || '<unknown>' | |
} | |
return Z || '<unknown>' | |
} | |
function HL2(I, G, Z) { | |
let d = (I.exception = I.exception || {}), | |
W = (d.values = d.values || []), | |
w = (W[0] = W[0] || {}) | |
if (!w.value) w.value = G || '' | |
if (!w.type) w.type = Z || 'Error' | |
} | |
function FL2(I, G) { | |
let Z = Yq1(I) | |
if (!Z) return | |
let d = { type: 'generic', handled: !0 }, | |
W = Z.mechanism | |
if (((Z.mechanism = { ...d, ...W, ...G }), G && 'data' in G)) { | |
let w = { ...(W && W.data), ...G.data } | |
Z.mechanism.data = w | |
} | |
} | |
var JL2 = | |
/^(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 KL2(I) { | |
let G = I.match(JL2) || [], | |
Z = parseInt(G[1], 10), | |
d = parseInt(G[2], 10), | |
W = parseInt(G[3], 10) | |
return { | |
buildmetadata: G[5], | |
major: isNaN(Z) ? void 0 : Z, | |
minor: isNaN(d) ? void 0 : d, | |
patch: isNaN(W) ? void 0 : W, | |
prerelease: G[4], | |
} | |
} | |
function gL2(I, G, Z = 5) { | |
if (G.lineno === void 0) return | |
let d = I.length, | |
W = Math.max(Math.min(d - 1, G.lineno - 1), 0) | |
;(G.pre_context = I.slice(Math.max(0, W - Z), W).map((w) => I11.snipLine(w, 0))), | |
(G.context_line = I11.snipLine(I[Math.min(d - 1, W)], G.colno || 0)), | |
(G.post_context = I.slice(Math.min(W + 1, d), W + 1 + Z).map((w) => I11.snipLine(w, 0))) | |
} | |
function NL2(I) { | |
if (I && I.__sentry_captured__) return !0 | |
try { | |
XL2.addNonEnumerableProperty(I, '__sentry_captured__', !0) | |
} catch (G) {} | |
return !1 | |
} | |
function zL2(I) { | |
return Array.isArray(I) ? I : [I] | |
} | |
_q1.addContextToFrame = gL2 | |
_q1.addExceptionMechanism = FL2 | |
_q1.addExceptionTypeValue = HL2 | |
_q1.arrayify = zL2 | |
_q1.checkOrSetAlreadyCaught = NL2 | |
_q1.getEventDescription = DL2 | |
_q1.parseSemver = KL2 | |
_q1.uuid4 = _L2 | |
}) | |
var W11 = _((Jq1) => { | |
Object.defineProperty(Jq1, '__esModule', { value: !0 }) | |
var SL2 = eE(), | |
xT = oZ(), | |
LL2 = q7(), | |
G11 = $V(), | |
PN = LL2.GLOBAL_OBJ, | |
$L2 = 1000, | |
Dq1, | |
Z11, | |
d11 | |
function yL2(I) { | |
G11.addHandler('dom', I), G11.maybeInstrument('dom', Fq1) | |
} | |
function Fq1() { | |
if (!PN.document) return | |
let I = G11.triggerHandlers.bind(null, 'dom'), | |
G = Hq1(I, !0) | |
PN.document.addEventListener('click', G, !1), | |
PN.document.addEventListener('keypress', G, !1), | |
['EventTarget', 'Node'].forEach((Z) => { | |
let d = PN[Z] && PN[Z].prototype | |
if (!d || !d.hasOwnProperty || !d.hasOwnProperty('addEventListener')) return | |
xT.fill(d, 'addEventListener', function (W) { | |
return function (w, B, C) { | |
if (w === 'click' || w == 'keypress') | |
try { | |
let V = this, | |
A = (V.__sentry_instrumentation_handlers__ = | |
V.__sentry_instrumentation_handlers__ || {}), | |
X = (A[w] = A[w] || { refCount: 0 }) | |
if (!X.handler) { | |
let Y = Hq1(I) | |
;(X.handler = Y), W.call(this, w, Y, C) | |
} | |
X.refCount++ | |
} catch (V) {} | |
return W.call(this, w, B, C) | |
} | |
}), | |
xT.fill(d, 'removeEventListener', function (W) { | |
return function (w, B, C) { | |
if (w === 'click' || w == 'keypress') | |
try { | |
let V = this, | |
A = V.__sentry_instrumentation_handlers__ || {}, | |
X = A[w] | |
if (X) { | |
if ((X.refCount--, X.refCount <= 0)) | |
W.call(this, w, X.handler, C), (X.handler = void 0), delete A[w] | |
if (Object.keys(A).length === 0) delete V.__sentry_instrumentation_handlers__ | |
} | |
} catch (V) {} | |
return W.call(this, w, B, C) | |
} | |
}) | |
}) | |
} | |
function PL2(I) { | |
if (I.type !== Z11) return !1 | |
try { | |
if (!I.target || I.target._sentryId !== d11) return !1 | |
} catch (G) {} | |
return !0 | |
} | |
function OL2(I, G) { | |
if (I !== 'keypress') return !1 | |
if (!G || !G.tagName) return !0 | |
if (G.tagName === 'INPUT' || G.tagName === 'TEXTAREA' || G.isContentEditable) return !1 | |
return !0 | |
} | |
function Hq1(I, G = !1) { | |
return (Z) => { | |
if (!Z || Z._sentryCaptured) return | |
let d = uL2(Z) | |
if (OL2(Z.type, d)) return | |
if ((xT.addNonEnumerableProperty(Z, '_sentryCaptured', !0), d && !d._sentryId)) | |
xT.addNonEnumerableProperty(d, '_sentryId', SL2.uuid4()) | |
let W = Z.type === 'keypress' ? 'input' : Z.type | |
if (!PL2(Z)) | |
I({ event: Z, name: W, global: G }), (Z11 = Z.type), (d11 = d ? d._sentryId : void 0) | |
clearTimeout(Dq1), | |
(Dq1 = PN.setTimeout(() => { | |
;(d11 = void 0), (Z11 = void 0) | |
}, $L2)) | |
} | |
} | |
function uL2(I) { | |
try { | |
return I.target | |
} catch (G) { | |
return null | |
} | |
} | |
Jq1.addClickKeypressInstrumentationHandler = yL2 | |
Jq1.instrumentDOM = Fq1 | |
}) | |
var C11 = _((Kq1) => { | |
Object.defineProperty(Kq1, '__esModule', { value: !0 }) | |
var bL2 = YB(), | |
lL2 = NW(), | |
jL2 = q7(), | |
cT = jL2.getGlobalObject() | |
function kL2() { | |
try { | |
return new ErrorEvent(''), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function hL2() { | |
try { | |
return new DOMError(''), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function xL2() { | |
try { | |
return new DOMException(''), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function B11() { | |
if (!('fetch' in cT)) return !1 | |
try { | |
return new Request('http://www.example.com'), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
function w11(I) { | |
return I && /^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(I.toString()) | |
} | |
function cL2() { | |
if (typeof EdgeRuntime === 'string') return !0 | |
if (!B11()) return !1 | |
if (w11(cT.fetch)) return !0 | |
let I = !1, | |
G = cT.document | |
if (G && typeof G.createElement === 'function') | |
try { | |
let Z = G.createElement('iframe') | |
if (((Z.hidden = !0), G.head.appendChild(Z), Z.contentWindow && Z.contentWindow.fetch)) | |
I = w11(Z.contentWindow.fetch) | |
G.head.removeChild(Z) | |
} catch (Z) { | |
bL2.DEBUG_BUILD && | |
lL2.logger.warn( | |
'Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', | |
Z, | |
) | |
} | |
return I | |
} | |
function pL2() { | |
return 'ReportingObserver' in cT | |
} | |
function iL2() { | |
if (!B11()) return !1 | |
try { | |
return new Request('_', { referrerPolicy: 'origin' }), !0 | |
} catch (I) { | |
return !1 | |
} | |
} | |
Kq1.isNativeFetch = w11 | |
Kq1.supportsDOMError = hL2 | |
Kq1.supportsDOMException = xL2 | |
Kq1.supportsErrorEvent = kL2 | |
Kq1.supportsFetch = B11 | |
Kq1.supportsNativeFetch = cL2 | |
Kq1.supportsReferrerPolicy = iL2 | |
Kq1.supportsReportingObserver = pL2 | |
}) | |
var A11 = _((Qq1) => { | |
Object.defineProperty(Qq1, '__esModule', { value: !0 }) | |
var G$2 = oZ(), | |
Z$2 = C11(), | |
gq1 = q7(), | |
tE = $V() | |
function d$2(I) { | |
tE.addHandler('fetch', I), tE.maybeInstrument('fetch', W$2) | |
} | |
function W$2() { | |
if (!Z$2.supportsNativeFetch()) return | |
G$2.fill(gq1.GLOBAL_OBJ, 'fetch', function (I) { | |
return function (...G) { | |
let { method: Z, url: d } = zq1(G), | |
W = { args: G, fetchData: { method: Z, url: d }, startTimestamp: Date.now() } | |
return ( | |
tE.triggerHandlers('fetch', { ...W }), | |
I.apply(gq1.GLOBAL_OBJ, G).then( | |
(w) => { | |
let B = { ...W, endTimestamp: Date.now(), response: w } | |
return tE.triggerHandlers('fetch', B), w | |
}, | |
(w) => { | |
let B = { ...W, endTimestamp: Date.now(), error: w } | |
throw (tE.triggerHandlers('fetch', B), w) | |
}, | |
) | |
) | |
} | |
}) | |
} | |
function V11(I, G) { | |
return !!I && typeof I === 'object' && !!I[G] | |
} | |
function Nq1(I) { | |
if (typeof I === 'string') return I | |
if (!I) return '' | |
if (V11(I, 'url')) return I.url | |
if (I.toString) return I.toString() | |
return '' | |
} | |
function zq1(I) { | |
if (I.length === 0) return { method: 'GET', url: '' } | |
if (I.length === 2) { | |
let [Z, d] = I | |
return { url: Nq1(Z), method: V11(d, 'method') ? String(d.method).toUpperCase() : 'GET' } | |
} | |
let G = I[0] | |
return { url: Nq1(G), method: V11(G, 'method') ? String(G.method).toUpperCase() : 'GET' } | |
} | |
Qq1.addFetchInstrumentationHandler = d$2 | |
Qq1.parseFetchArgs = zq1 | |
}) | |
var _11 = _((qq1) => { | |
Object.defineProperty(qq1, '__esModule', { value: !0 }) | |
var X11 = q7(), | |
Y11 = $V(), | |
pT = null | |
function C$2(I) { | |
Y11.addHandler('error', I), Y11.maybeInstrument('error', V$2) | |
} | |
function V$2() { | |
;(pT = X11.GLOBAL_OBJ.onerror), | |
(X11.GLOBAL_OBJ.onerror = function (I, G, Z, d, W) { | |
let w = { column: d, error: W, line: Z, msg: I, url: G } | |
if ((Y11.triggerHandlers('error', w), pT && !pT.__SENTRY_LOADER__)) | |
return pT.apply(this, arguments) | |
return !1 | |
}), | |
(X11.GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = !0) | |
} | |
qq1.addGlobalErrorInstrumentationHandler = C$2 | |
}) | |
var F11 = _((Uq1) => { | |
Object.defineProperty(Uq1, '__esModule', { value: !0 }) | |
var D11 = q7(), | |
H11 = $V(), | |
iT = null | |
function X$2(I) { | |
H11.addHandler('unhandledrejection', I), H11.maybeInstrument('unhandledrejection', Y$2) | |
} | |
function Y$2() { | |
;(iT = D11.GLOBAL_OBJ.onunhandledrejection), | |
(D11.GLOBAL_OBJ.onunhandledrejection = function (I) { | |
let G = I | |
if ((H11.triggerHandlers('unhandledrejection', G), iT && !iT.__SENTRY_LOADER__)) | |
return iT.apply(this, arguments) | |
return !0 | |
}), | |
(D11.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = !0) | |
} | |
Uq1.addGlobalUnhandledRejectionInstrumentationHandler = X$2 | |
}) | |
var J11 = _((fq1) => { | |
Object.defineProperty(fq1, '__esModule', { value: !0 }) | |
var D$2 = q7(), | |
nT = D$2.getGlobalObject() | |
function H$2() { | |
let I = nT.chrome, | |
G = I && I.app && I.app.runtime, | |
Z = 'history' in nT && !!nT.history.pushState && !!nT.history.replaceState | |
return !G && Z | |
} | |
fq1.supportsHistory = H$2 | |
}) | |
var K11 = _((Eq1) => { | |
Object.defineProperty(Eq1, '__esModule', { value: !0 }) | |
var Rq1 = oZ() | |
YB() | |
NW() | |
var J$2 = q7(), | |
K$2 = J11(), | |
rT = $V(), | |
Iv = J$2.GLOBAL_OBJ, | |
aT | |
function g$2(I) { | |
rT.addHandler('history', I), rT.maybeInstrument('history', N$2) | |
} | |
function N$2() { | |
if (!K$2.supportsHistory()) return | |
let I = Iv.onpopstate | |
Iv.onpopstate = function (...Z) { | |
let d = Iv.location.href, | |
W = aT | |
aT = d | |
let w = { from: W, to: d } | |
if ((rT.triggerHandlers('history', w), I)) | |
try { | |
return I.apply(this, Z) | |
} catch (B) {} | |
} | |
function G(Z) { | |
return function (...d) { | |
let W = d.length > 2 ? d[2] : void 0 | |
if (W) { | |
let w = aT, | |
B = String(W) | |
aT = B | |
let C = { from: w, to: B } | |
rT.triggerHandlers('history', C) | |
} | |
return Z.apply(this, d) | |
} | |
} | |
Rq1.fill(Iv.history, 'pushState', G), Rq1.fill(Iv.history, 'replaceState', G) | |
} | |
Eq1.addHistoryInstrumentationHandler = g$2 | |
}) | |
var g11 = _((Mq1) => { | |
Object.defineProperty(Mq1, '__esModule', { value: !0 }) | |
var oT = sZ(), | |
sT = oZ(), | |
Q$2 = q7(), | |
eT = $V(), | |
q$2 = Q$2.GLOBAL_OBJ, | |
Gv = '__sentry_xhr_v3__' | |
function U$2(I) { | |
eT.addHandler('xhr', I), eT.maybeInstrument('xhr', vq1) | |
} | |
function vq1() { | |
if (!q$2.XMLHttpRequest) return | |
let I = XMLHttpRequest.prototype | |
sT.fill(I, 'open', function (G) { | |
return function (...Z) { | |
let d = Date.now(), | |
W = oT.isString(Z[0]) ? Z[0].toUpperCase() : void 0, | |
w = f$2(Z[1]) | |
if (!W || !w) return G.apply(this, Z) | |
if ( | |
((this[Gv] = { method: W, url: w, request_headers: {} }), | |
W === 'POST' && w.match(/sentry_key/)) | |
) | |
this.__sentry_own_request__ = !0 | |
let B = () => { | |
let C = this[Gv] | |
if (!C) return | |
if (this.readyState === 4) { | |
try { | |
C.status_code = this.status | |
} catch (A) {} | |
let V = { args: [W, w], endTimestamp: Date.now(), startTimestamp: d, xhr: this } | |
eT.triggerHandlers('xhr', V) | |
} | |
} | |
if ('onreadystatechange' in this && typeof this.onreadystatechange === 'function') | |
sT.fill(this, 'onreadystatechange', function (C) { | |
return function (...V) { | |
return B(), C.apply(this, V) | |
} | |
}) | |
else this.addEventListener('readystatechange', B) | |
return ( | |
sT.fill(this, 'setRequestHeader', function (C) { | |
return function (...V) { | |
let [A, X] = V, | |
Y = this[Gv] | |
if (Y && oT.isString(A) && oT.isString(X)) Y.request_headers[A.toLowerCase()] = X | |
return C.apply(this, V) | |
} | |
}), | |
G.apply(this, Z) | |
) | |
} | |
}), | |
sT.fill(I, 'send', function (G) { | |
return function (...Z) { | |
let d = this[Gv] | |
if (!d) return G.apply(this, Z) | |
if (Z[0] !== void 0) d.body = Z[0] | |
let W = { args: [d.method, d.url], startTimestamp: Date.now(), xhr: this } | |
return eT.triggerHandlers('xhr', W), G.apply(this, Z) | |
} | |
}) | |
} | |
function f$2(I) { | |
if (oT.isString(I)) return I | |
try { | |
return I.toString() | |
} catch (G) {} | |
return | |
} | |
Mq1.SENTRY_XHR_DATA_KEY = Gv | |
Mq1.addXhrInstrumentationHandler = U$2 | |
Mq1.instrumentXHR = vq1 | |
}) | |
var Tq1 = _((uq1) => { | |
Object.defineProperty(uq1, '__esModule', { value: !0 }) | |
var M$2 = YB(), | |
S$2 = NW(), | |
Sq1 = tt(), | |
Lq1 = W11(), | |
$q1 = A11(), | |
yq1 = _11(), | |
Pq1 = F11(), | |
Oq1 = K11(), | |
N11 = g11() | |
function L$2(I, G) { | |
switch (I) { | |
case 'console': | |
return Sq1.addConsoleInstrumentationHandler(G) | |
case 'dom': | |
return Lq1.addClickKeypressInstrumentationHandler(G) | |
case 'xhr': | |
return N11.addXhrInstrumentationHandler(G) | |
case 'fetch': | |
return $q1.addFetchInstrumentationHandler(G) | |
case 'history': | |
return Oq1.addHistoryInstrumentationHandler(G) | |
case 'error': | |
return yq1.addGlobalErrorInstrumentationHandler(G) | |
case 'unhandledrejection': | |
return Pq1.addGlobalUnhandledRejectionInstrumentationHandler(G) | |
default: | |
M$2.DEBUG_BUILD && S$2.logger.warn('unknown instrumentation type:', I) | |
} | |
} | |
uq1.addConsoleInstrumentationHandler = Sq1.addConsoleInstrumentationHandler | |
uq1.addClickKeypressInstrumentationHandler = Lq1.addClickKeypressInstrumentationHandler | |
uq1.addFetchInstrumentationHandler = $q1.addFetchInstrumentationHandler | |
uq1.addGlobalErrorInstrumentationHandler = yq1.addGlobalErrorInstrumentationHandler | |
uq1.addGlobalUnhandledRejectionInstrumentationHandler = | |
Pq1.addGlobalUnhandledRejectionInstrumentationHandler | |
uq1.addHistoryInstrumentationHandler = Oq1.addHistoryInstrumentationHandler | |
uq1.SENTRY_XHR_DATA_KEY = N11.SENTRY_XHR_DATA_KEY | |
uq1.addXhrInstrumentationHandler = N11.addXhrInstrumentationHandler | |
uq1.addInstrumentationHandler = L$2 | |
}) | |
var z11 = _((mq1) => { | |
Object.defineProperty(mq1, '__esModule', { value: !0 }) | |
function j$2() { | |
return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__ | |
} | |
function k$2() { | |
return 'npm' | |
} | |
mq1.getSDKSource = k$2 | |
mq1.isBrowserBundle = j$2 | |
}) | |
var Q11 = _((bq1, Im) => { | |
Object.defineProperty(bq1, '__esModule', { value: !0 }) | |
var c$2 = z11() | |
function p$2() { | |
return ( | |
!c$2.isBrowserBundle() && | |
Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === | |
'[object process]' | |
) | |
} | |
function tT(I, G) { | |
return I.require(G) | |
} | |
function i$2(I) { | |
let G | |
try { | |
G = tT(Im, I) | |
} catch (Z) {} | |
try { | |
let { cwd: Z } = tT(Im, 'process') | |
G = tT(Im, `${Z()}/node_modules/${I}`) | |
} catch (Z) {} | |
return G | |
} | |
bq1.dynamicRequire = tT | |
bq1.isNodeEnv = p$2 | |
bq1.loadModule = i$2 | |
}) | |
var kq1 = _((jq1) => { | |
Object.defineProperty(jq1, '__esModule', { value: !0 }) | |
var s$2 = Q11(), | |
lq1 = q7() | |
function o$2() { | |
return typeof window !== 'undefined' && (!s$2.isNodeEnv() || e$2()) | |
} | |
function e$2() { | |
return lq1.GLOBAL_OBJ.process !== void 0 && lq1.GLOBAL_OBJ.process.type === 'renderer' | |
} | |
jq1.isBrowser = o$2 | |
}) | |
var q11 = _((hq1) => { | |
Object.defineProperty(hq1, '__esModule', { value: !0 }) | |
function Iy2() { | |
let I = typeof WeakSet === 'function', | |
G = I ? new WeakSet() : [] | |
function Z(W) { | |
if (I) { | |
if (G.has(W)) return !0 | |
return G.add(W), !1 | |
} | |
for (let w = 0; w < G.length; w++) if (G[w] === W) return !0 | |
return G.push(W), !1 | |
} | |
function d(W) { | |
if (I) G.delete(W) | |
else | |
for (let w = 0; w < G.length; w++) | |
if (G[w] === W) { | |
G.splice(w, 1) | |
break | |
} | |
} | |
return [Z, d] | |
} | |
hq1.memoBuilder = Iy2 | |
}) | |
var Zv = _((pq1) => { | |
Object.defineProperty(pq1, '__esModule', { value: !0 }) | |
var U11 = sZ(), | |
Zy2 = q11(), | |
dy2 = oZ(), | |
Wy2 = kT() | |
function xq1(I, G = 100, Z = 1 / 0) { | |
try { | |
return Gm('', I, G, Z) | |
} catch (d) { | |
return { ERROR: `**non-serializable** (${d})` } | |
} | |
} | |
function cq1(I, G = 3, Z = 102400) { | |
let d = xq1(I, G) | |
if (Vy2(d) > Z) return cq1(I, G - 1, Z) | |
return d | |
} | |
function Gm(I, G, Z = 1 / 0, d = 1 / 0, W = Zy2.memoBuilder()) { | |
let [w, B] = W | |
if (G == null || (['number', 'boolean', 'string'].includes(typeof G) && !U11.isNaN(G))) return G | |
let C = wy2(I, G) | |
if (!C.startsWith('[object ')) return C | |
if (G.__sentry_skip_normalization__) return G | |
let V = | |
typeof G.__sentry_override_normalization_depth__ === 'number' | |
? G.__sentry_override_normalization_depth__ | |
: Z | |
if (V === 0) return C.replace('object ', '') | |
if (w(G)) return '[Circular ~]' | |
let A = G | |
if (A && typeof A.toJSON === 'function') | |
try { | |
let J = A.toJSON() | |
return Gm('', J, V - 1, d, W) | |
} catch (J) {} | |
let X = Array.isArray(G) ? [] : {}, | |
Y = 0, | |
H = dy2.convertToPlainObject(G) | |
for (let J in H) { | |
if (!Object.prototype.hasOwnProperty.call(H, J)) continue | |
if (Y >= d) { | |
X[J] = '[MaxProperties ~]' | |
break | |
} | |
let K = H[J] | |
;(X[J] = Gm(J, K, V - 1, d, W)), Y++ | |
} | |
return B(G), X | |
} | |
function wy2(I, G) { | |
try { | |
if (I === 'domain' && G && typeof G === 'object' && G._events) return '[Domain]' | |
if (I === 'domainEmitter') return '[DomainEmitter]' | |
if (typeof global !== 'undefined' && G === global) return '[Global]' | |
if (typeof window !== 'undefined' && G === window) return '[Window]' | |
if (typeof document !== 'undefined' && G === document) return '[Document]' | |
if (U11.isVueViewModel(G)) return '[VueViewModel]' | |
if (U11.isSyntheticEvent(G)) return '[SyntheticEvent]' | |
if (typeof G === 'number' && G !== G) return '[NaN]' | |
if (typeof G === 'function') return `[Function: ${Wy2.getFunctionName(G)}]` | |
if (typeof G === 'symbol') return `[${String(G)}]` | |
if (typeof G === 'bigint') return `[BigInt: ${String(G)}]` | |
let Z = By2(G) | |
if (/^HTML(\w*)Element$/.test(Z)) return `[HTMLElement: ${Z}]` | |
return `[object ${Z}]` | |
} catch (Z) { | |
return `**non-serializable** (${Z})` | |
} | |
} | |
function By2(I) { | |
let G = Object.getPrototypeOf(I) | |
return G ? G.constructor.name : 'null prototype' | |
} | |
function Cy2(I) { | |
return ~-encodeURI(I).split(/%..|./).length | |
} | |
function Vy2(I) { | |
return Cy2(JSON.stringify(I)) | |
} | |
function Ay2(I, G) { | |
let Z = G.replace(/\\/g, '/').replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'), | |
d = I | |
try { | |
d = decodeURI(I) | |
} catch (W) {} | |
return d | |
.replace(/\\/g, '/') | |
.replace(/webpack:\/?/g, '') | |
.replace(new RegExp(`(file://)?/*${Z}/*`, 'ig'), 'app:///') | |
} | |
pq1.normalize = xq1 | |
pq1.normalizeToSize = cq1 | |
pq1.normalizeUrlToBase = Ay2 | |
pq1.walk = Gm | |
}) | |
var eq1 = _((oq1) => { | |
Object.defineProperty(oq1, '__esModule', { value: !0 }) | |
function nq1(I, G) { | |
let Z = 0 | |
for (let d = I.length - 1; d >= 0; d--) { | |
let W = I[d] | |
if (W === '.') I.splice(d, 1) | |
else if (W === '..') I.splice(d, 1), Z++ | |
else if (Z) I.splice(d, 1), Z-- | |
} | |
if (G) for (; Z--; Z) I.unshift('..') | |
return I | |
} | |
var Hy2 = /^(\S+:\\|\/?)([\s\S]*?)((?:\.{1,2}|[^/\\]+?|)(\.[^./\\]*|))(?:[/\\]*)$/ | |
function aq1(I) { | |
let G = I.length > 1024 ? `<truncated>${I.slice(-1024)}` : I, | |
Z = Hy2.exec(G) | |
return Z ? Z.slice(1) : [] | |
} | |
function f11(...I) { | |
let G = '', | |
Z = !1 | |
for (let d = I.length - 1; d >= -1 && !Z; d--) { | |
let W = d >= 0 ? I[d] : '/' | |
if (!W) continue | |
;(G = `${W}/${G}`), (Z = W.charAt(0) === '/') | |
} | |
return ( | |
(G = nq1( | |
G.split('/').filter((d) => !!d), | |
!Z, | |
).join('/')), | |
(Z ? '/' : '') + G || '.' | |
) | |
} | |
function iq1(I) { | |
let G = 0 | |
for (; G < I.length; G++) if (I[G] !== '') break | |
let Z = I.length - 1 | |
for (; Z >= 0; Z--) if (I[Z] !== '') break | |
if (G > Z) return [] | |
return I.slice(G, Z - G + 1) | |
} | |
function Fy2(I, G) { | |
;(I = f11(I).slice(1)), (G = f11(G).slice(1)) | |
let Z = iq1(I.split('/')), | |
d = iq1(G.split('/')), | |
W = Math.min(Z.length, d.length), | |
w = W | |
for (let C = 0; C < W; C++) | |
if (Z[C] !== d[C]) { | |
w = C | |
break | |
} | |
let B = [] | |
for (let C = w; C < Z.length; C++) B.push('..') | |
return (B = B.concat(d.slice(w))), B.join('/') | |
} | |
function rq1(I) { | |
let G = sq1(I), | |
Z = I.slice(-1) === '/', | |
d = nq1( | |
I.split('/').filter((W) => !!W), | |
!G, | |
).join('/') | |
if (!d && !G) d = '.' | |
if (d && Z) d += '/' | |
return (G ? '/' : '') + d | |
} | |
function sq1(I) { | |
return I.charAt(0) === '/' | |
} | |
function Jy2(...I) { | |
return rq1(I.join('/')) | |
} | |
function Ky2(I) { | |
let G = aq1(I), | |
Z = G[0], | |
d = G[1] | |
if (!Z && !d) return '.' | |
if (d) d = d.slice(0, d.length - 1) | |
return Z + d | |
} | |
function gy2(I, G) { | |
let Z = aq1(I)[2] | |
if (G && Z.slice(G.length * -1) === G) Z = Z.slice(0, Z.length - G.length) | |
return Z | |
} | |
oq1.basename = gy2 | |
oq1.dirname = Ky2 | |
oq1.isAbsolute = sq1 | |
oq1.join = Jy2 | |
oq1.normalizePath = rq1 | |
oq1.relative = Fy2 | |
oq1.resolve = f11 | |
}) | |
var R11 = _((tq1) => { | |
Object.defineProperty(tq1, '__esModule', { value: !0 }) | |
var Ey2 = sZ(), | |
yV | |
;(function (I) { | |
I[(I.PENDING = 0)] = 'PENDING' | |
let Z = 1 | |
I[(I.RESOLVED = Z)] = 'RESOLVED' | |
let d = 2 | |
I[(I.REJECTED = d)] = 'REJECTED' | |
})(yV || (yV = {})) | |
function vy2(I) { | |
return new _B((G) => { | |
G(I) | |
}) | |
} | |
function My2(I) { | |
return new _B((G, Z) => { | |
Z(I) | |
}) | |
} | |
class _B { | |
constructor(I) { | |
_B.prototype.__init.call(this), | |
_B.prototype.__init2.call(this), | |
_B.prototype.__init3.call(this), | |
_B.prototype.__init4.call(this), | |
(this._state = yV.PENDING), | |
(this._handlers = []) | |
try { | |
I(this._resolve, this._reject) | |
} catch (G) { | |
this._reject(G) | |
} | |
} | |
then(I, G) { | |
return new _B((Z, d) => { | |
this._handlers.push([ | |
!1, | |
(W) => { | |
if (!I) Z(W) | |
else | |
try { | |
Z(I(W)) | |
} catch (w) { | |
d(w) | |
} | |
}, | |
(W) => { | |
if (!G) d(W) | |
else | |
try { | |
Z(G(W)) | |
} catch (w) { | |
d(w) | |
} | |
}, | |
]), | |
this._executeHandlers() | |
}) | |
} | |
catch(I) { | |
return this.then((G) => G, I) | |
} | |
finally(I) { | |
return new _B((G, Z) => { | |
let d, W | |
return this.then( | |
(w) => { | |
if (((W = !1), (d = w), I)) I() | |
}, | |
(w) => { | |
if (((W = !0), (d = w), I)) I() | |
}, | |
).then(() => { | |
if (W) { | |
Z(d) | |
return | |
} | |
G(d) | |
}) | |
}) | |
} | |
__init() { | |
this._resolve = (I) => { | |
this._setResult(yV.RESOLVED, I) | |
} | |
} | |
__init2() { | |
this._reject = (I) => { | |
this._setResult(yV.REJECTED, I) | |
} | |
} | |
__init3() { | |
this._setResult = (I, G) => { | |
if (this._state !== yV.PENDING) return | |
if (Ey2.isThenable(G)) { | |
G.then(this._resolve, this._reject) | |
return | |
} | |
;(this._state = I), (this._value = G), this._executeHandlers() | |
} | |
} | |
__init4() { | |
this._executeHandlers = () => { | |
if (this._state === yV.PENDING) return | |
let I = this._handlers.slice() | |
;(this._handlers = []), | |
I.forEach((G) => { | |
if (G[0]) return | |
if (this._state === yV.RESOLVED) G[1](this._value) | |
if (this._state === yV.REJECTED) G[2](this._value) | |
G[0] = !0 | |
}) | |
} | |
} | |
} | |
tq1.SyncPromise = _B | |
tq1.rejectedSyncPromise = My2 | |
tq1.resolvedSyncPromise = vy2 | |
}) | |
var GU1 = _((IU1) => { | |
Object.defineProperty(IU1, '__esModule', { value: !0 }) | |
var yy2 = at(), | |
E11 = R11() | |
function Py2(I) { | |
let G = [] | |
function Z() { | |
return I === void 0 || G.length < I | |
} | |
function d(B) { | |
return G.splice(G.indexOf(B), 1)[0] | |
} | |
function W(B) { | |
if (!Z()) | |
return E11.rejectedSyncPromise( | |
new yy2.SentryError('Not adding Promise because buffer limit was reached.'), | |
) | |
let C = B() | |
if (G.indexOf(C) === -1) G.push(C) | |
return C.then(() => d(C)).then(null, () => d(C).then(null, () => {})), C | |
} | |
function w(B) { | |
return new E11.SyncPromise((C, V) => { | |
let A = G.length | |
if (!A) return C(!0) | |
let X = setTimeout(() => { | |
if (B && B > 0) C(!1) | |
}, B) | |
G.forEach((Y) => { | |
E11.resolvedSyncPromise(Y).then(() => { | |
if (!--A) clearTimeout(X), C(!0) | |
}, V) | |
}) | |
}) | |
} | |
return { $: G, add: W, drain: w } | |
} | |
IU1.makePromiseBuffer = Py2 | |
}) | |
var dU1 = _((ZU1) => { | |
Object.defineProperty(ZU1, '__esModule', { value: !0 }) | |
function uy2(I) { | |
let G = {}, | |
Z = 0 | |
while (Z < I.length) { | |
let d = I.indexOf('=', Z) | |
if (d === -1) break | |
let W = I.indexOf(';', Z) | |
if (W === -1) W = I.length | |
else if (W < d) { | |
Z = I.lastIndexOf(';', d - 1) + 1 | |
continue | |
} | |
let w = I.slice(Z, d).trim() | |
if (G[w] === void 0) { | |
let B = I.slice(d + 1, W).trim() | |
if (B.charCodeAt(0) === 34) B = B.slice(1, -1) | |
try { | |
G[w] = B.indexOf('%') !== -1 ? decodeURIComponent(B) : B | |
} catch (C) { | |
G[w] = B | |
} | |
} | |
Z = W + 1 | |
} | |
return G | |
} | |
ZU1.parseCookie = uy2 | |
}) | |
var v11 = _((WU1) => { | |
Object.defineProperty(WU1, '__esModule', { value: !0 }) | |
function my2(I) { | |
if (!I) return {} | |
let G = I.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/) | |
if (!G) return {} | |
let Z = G[6] || '', | |
d = G[8] || '' | |
return { host: G[4], path: G[5], protocol: G[2], search: Z, hash: d, relative: G[5] + Z + d } | |
} | |
function by2(I) { | |
return I.split(/[\?#]/, 1)[0] | |
} | |
function ly2(I) { | |
return I.split(/\\?\//).filter((G) => G.length > 0 && G !== ',').length | |
} | |
function jy2(I) { | |
let { protocol: G, host: Z, path: d } = I, | |
W = | |
(Z && | |
Z.replace(/^.*@/, '[filtered]:[filtered]@') | |
.replace(/(:80)$/, '') | |
.replace(/(:443)$/, '')) || | |
'' | |
return `${G ? `${G}://` : ''}${W}${d}` | |
} | |
WU1.getNumberOfUrlSegments = ly2 | |
WU1.getSanitizedUrlString = jy2 | |
WU1.parseUrl = my2 | |
WU1.stripUrlQueryAndFragment = by2 | |
}) | |
var XU1 = _((AU1) => { | |
Object.defineProperty(AU1, '__esModule', { value: !0 }) | |
var py2 = dU1(), | |
iy2 = YB(), | |
wU1 = sZ(), | |
ny2 = NW(), | |
ay2 = Zv(), | |
ry2 = v11(), | |
sy2 = { ip: !1, request: !0, transaction: !0, user: !0 }, | |
oy2 = ['cookies', 'data', 'headers', 'method', 'query_string', 'url'], | |
BU1 = ['id', 'username', 'email'] | |
function ey2(I, G, Z) { | |
if (!I) return | |
if (!I.metadata.source || I.metadata.source === 'url') { | |
let [d, W] = Zm(G, { path: !0, method: !0 }) | |
I.updateName(d), I.setMetadata({ source: W }) | |
} | |
if ((I.setAttribute('url', G.originalUrl || G.url), G.baseUrl)) | |
I.setAttribute('baseUrl', G.baseUrl) | |
I.setData('query', CU1(G, Z)) | |
} | |
function Zm(I, G = {}) { | |
let Z = I.method && I.method.toUpperCase(), | |
d = '', | |
W = 'url' | |
if (G.customRoute || I.route) | |
(d = G.customRoute || `${I.baseUrl || ''}${I.route && I.route.path}`), (W = 'route') | |
else if (I.originalUrl || I.url) d = ry2.stripUrlQueryAndFragment(I.originalUrl || I.url || '') | |
let w = '' | |
if (G.method && Z) w += Z | |
if (G.method && G.path) w += ' ' | |
if (G.path && d) w += d | |
return [w, W] | |
} | |
function ty2(I, G) { | |
switch (G) { | |
case 'path': | |
return Zm(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 Z = I._reconstructedRoute ? I._reconstructedRoute : void 0 | |
return Zm(I, { path: !0, method: !0, customRoute: Z })[0] | |
} | |
} | |
} | |
function IP2(I, G) { | |
let Z = {} | |
return ( | |
(Array.isArray(G) ? G : BU1).forEach((W) => { | |
if (I && W in I) Z[W] = I[W] | |
}), | |
Z | |
) | |
} | |
function M11(I, G) { | |
let { include: Z = oy2, deps: d } = G || {}, | |
W = {}, | |
w = I.headers || {}, | |
B = I.method, | |
C = w.host || I.hostname || I.host || '<no host>', | |
V = I.protocol === 'https' || (I.socket && I.socket.encrypted) ? 'https' : 'http', | |
A = I.originalUrl || I.url || '', | |
X = A.startsWith(V) ? A : `${V}://${C}${A}` | |
return ( | |
Z.forEach((Y) => { | |
switch (Y) { | |
case 'headers': { | |
if (((W.headers = w), !Z.includes('cookies'))) delete W.headers.cookie | |
break | |
} | |
case 'method': { | |
W.method = B | |
break | |
} | |
case 'url': { | |
W.url = X | |
break | |
} | |
case 'cookies': { | |
W.cookies = I.cookies || (w.cookie && py2.parseCookie(w.cookie)) || {} | |
break | |
} | |
case 'query_string': { | |
W.query_string = CU1(I, d) | |
break | |
} | |
case 'data': { | |
if (B === 'GET' || B === 'HEAD') break | |
if (I.body !== void 0) | |
W.data = wU1.isString(I.body) ? I.body : JSON.stringify(ay2.normalize(I.body)) | |
break | |
} | |
default: | |
if ({}.hasOwnProperty.call(I, Y)) W[Y] = I[Y] | |
} | |
}), | |
W | |
) | |
} | |
function GP2(I, G, Z) { | |
let d = { ...sy2, ...(Z && Z.include) } | |
if (d.request) { | |
let W = Array.isArray(d.request) | |
? M11(G, { include: d.request, deps: Z && Z.deps }) | |
: M11(G, { deps: Z && Z.deps }) | |
I.request = { ...I.request, ...W } | |
} | |
if (d.user) { | |
let W = G.user && wU1.isPlainObject(G.user) ? IP2(G.user, d.user) : {} | |
if (Object.keys(W).length) I.user = { ...I.user, ...W } | |
} | |
if (d.ip) { | |
let W = G.ip || (G.socket && G.socket.remoteAddress) | |
if (W) I.user = { ...I.user, ip_address: W } | |
} | |
if (d.transaction && !I.transaction) I.transaction = ty2(G, d.transaction) | |
return I | |
} | |
function CU1(I, G) { | |
let Z = I.originalUrl || I.url || '' | |
if (!Z) return | |
if (Z.startsWith('/')) Z = `http://dogs.are.great${Z}` | |
try { | |
return ( | |
I.query || | |
(typeof URL !== 'undefined' && new URL(Z).search.slice(1)) || | |
(G && G.url && G.url.parse(Z).query) || | |
void 0 | |
) | |
} catch (d) { | |
return | |
} | |
} | |
function VU1(I) { | |
let G = {} | |
try { | |
I.forEach((Z, d) => { | |
if (typeof Z === 'string') G[d] = Z | |
}) | |
} catch (Z) { | |
iy2.DEBUG_BUILD && | |
ny2.logger.warn( | |
'Sentry failed extracting headers from a request object. If you see this, please file an issue.', | |
) | |
} | |
return G | |
} | |
function ZP2(I) { | |
let G = VU1(I.headers) | |
return { method: I.method, url: I.url, headers: G } | |
} | |
AU1.DEFAULT_USER_INCLUDES = BU1 | |
AU1.addRequestDataToEvent = GP2 | |
AU1.addRequestDataToTransaction = ey2 | |
AU1.extractPathForTransaction = Zm | |
AU1.extractRequestData = M11 | |
AU1.winterCGHeadersToDict = VU1 | |
AU1.winterCGRequestToRequestData = ZP2 | |
}) | |
var HU1 = _((DU1) => { | |
Object.defineProperty(DU1, '__esModule', { value: !0 }) | |
var YU1 = ['fatal', 'error', 'warning', 'log', 'info', 'debug'] | |
function XP2(I) { | |
return _U1(I) | |
} | |
function _U1(I) { | |
return I === 'warn' ? 'warning' : YU1.includes(I) ? I : 'log' | |
} | |
DU1.severityFromString = XP2 | |
DU1.severityLevelFromString = _U1 | |
DU1.validSeverityLevels = YU1 | |
}) | |
var S11 = _((NU1) => { | |
Object.defineProperty(NU1, '__esModule', { value: !0 }) | |
var FU1 = q7(), | |
JU1 = 1000 | |
function KU1() { | |
return Date.now() / JU1 | |
} | |
function HP2() { | |
let { performance: I } = FU1.GLOBAL_OBJ | |
if (!I || !I.now) return KU1 | |
let G = Date.now() - I.now(), | |
Z = I.timeOrigin == null ? G : I.timeOrigin | |
return () => { | |
return (Z + I.now()) / JU1 | |
} | |
} | |
var gU1 = HP2(), | |
FP2 = gU1 | |
NU1._browserPerformanceTimeOriginMode = void 0 | |
var JP2 = (() => { | |
let { performance: I } = FU1.GLOBAL_OBJ | |
if (!I || !I.now) { | |
NU1._browserPerformanceTimeOriginMode = 'none' | |
return | |
} | |
let G = 3600000, | |
Z = I.now(), | |
d = Date.now(), | |
W = I.timeOrigin ? Math.abs(I.timeOrigin + Z - d) : G, | |
w = W < G, | |
B = I.timing && I.timing.navigationStart, | |
V = typeof B === 'number' ? Math.abs(B + Z - d) : G, | |
A = V < G | |
if (w || A) | |
if (W <= V) return (NU1._browserPerformanceTimeOriginMode = 'timeOrigin'), I.timeOrigin | |
else return (NU1._browserPerformanceTimeOriginMode = 'navigationStart'), B | |
return (NU1._browserPerformanceTimeOriginMode = 'dateNow'), d | |
})() | |
NU1.browserPerformanceTimeOrigin = JP2 | |
NU1.dateTimestampInSeconds = KU1 | |
NU1.timestampInSeconds = gU1 | |
NU1.timestampWithMs = FP2 | |
}) | |
var $11 = _((UU1) => { | |
Object.defineProperty(UU1, '__esModule', { value: !0 }) | |
var QP2 = YB(), | |
qP2 = sZ(), | |
UP2 = NW(), | |
fP2 = 'baggage', | |
L11 = 'sentry-', | |
QU1 = /^sentry-/, | |
qU1 = 8192 | |
function RP2(I) { | |
if (!qP2.isString(I) && !Array.isArray(I)) return | |
let G = {} | |
if (Array.isArray(I)) | |
G = I.reduce((d, W) => { | |
let w = zU1(W) | |
for (let B of Object.keys(w)) d[B] = w[B] | |
return d | |
}, {}) | |
else { | |
if (!I) return | |
G = zU1(I) | |
} | |
let Z = Object.entries(G).reduce((d, [W, w]) => { | |
if (W.match(QU1)) { | |
let B = W.slice(L11.length) | |
d[B] = w | |
} | |
return d | |
}, {}) | |
if (Object.keys(Z).length > 0) return Z | |
else return | |
} | |
function EP2(I) { | |
if (!I) return | |
let G = Object.entries(I).reduce((Z, [d, W]) => { | |
if (W) Z[`${L11}${d}`] = W | |
return Z | |
}, {}) | |
return vP2(G) | |
} | |
function zU1(I) { | |
return I.split(',') | |
.map((G) => G.split('=').map((Z) => decodeURIComponent(Z.trim()))) | |
.reduce((G, [Z, d]) => { | |
return (G[Z] = d), G | |
}, {}) | |
} | |
function vP2(I) { | |
if (Object.keys(I).length === 0) return | |
return Object.entries(I).reduce((G, [Z, d], W) => { | |
let w = `${encodeURIComponent(Z)}=${encodeURIComponent(d)}`, | |
B = W === 0 ? w : `${G},${w}` | |
if (B.length > qU1) | |
return ( | |
QP2.DEBUG_BUILD && | |
UP2.logger.warn( | |
`Not adding key: ${Z} with val: ${d} to baggage header due to exceeding baggage size limits.`, | |
), | |
G | |
) | |
else return B | |
}, '') | |
} | |
UU1.BAGGAGE_HEADER_NAME = fP2 | |
UU1.MAX_BAGGAGE_STRING_LENGTH = qU1 | |
UU1.SENTRY_BAGGAGE_KEY_PREFIX = L11 | |
UU1.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = QU1 | |
UU1.baggageHeaderToDynamicSamplingContext = RP2 | |
UU1.dynamicSamplingContextToSentryBaggageHeader = EP2 | |
}) | |
var vU1 = _((EU1) => { | |
Object.defineProperty(EU1, '__esModule', { value: !0 }) | |
var fU1 = $11(), | |
eZ = eE(), | |
RU1 = new RegExp('^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$') | |
function y11(I) { | |
if (!I) return | |
let G = I.match(RU1) | |
if (!G) return | |
let Z | |
if (G[3] === '1') Z = !0 | |
else if (G[3] === '0') Z = !1 | |
return { traceId: G[1], parentSampled: Z, parentSpanId: G[2] } | |
} | |
function OP2(I, G) { | |
let Z = y11(I), | |
d = fU1.baggageHeaderToDynamicSamplingContext(G), | |
{ traceId: W, parentSpanId: w, parentSampled: B } = Z || {} | |
if (!Z) | |
return { | |
traceparentData: Z, | |
dynamicSamplingContext: void 0, | |
propagationContext: { traceId: W || eZ.uuid4(), spanId: eZ.uuid4().substring(16) }, | |
} | |
else | |
return { | |
traceparentData: Z, | |
dynamicSamplingContext: d || {}, | |
propagationContext: { | |
traceId: W || eZ.uuid4(), | |
parentSpanId: w || eZ.uuid4().substring(16), | |
spanId: eZ.uuid4().substring(16), | |
sampled: B, | |
dsc: d || {}, | |
}, | |
} | |
} | |
function uP2(I, G) { | |
let Z = y11(I), | |
d = fU1.baggageHeaderToDynamicSamplingContext(G), | |
{ traceId: W, parentSpanId: w, parentSampled: B } = Z || {} | |
if (!Z) return { traceId: W || eZ.uuid4(), spanId: eZ.uuid4().substring(16) } | |
else | |
return { | |
traceId: W || eZ.uuid4(), | |
parentSpanId: w || eZ.uuid4().substring(16), | |
spanId: eZ.uuid4().substring(16), | |
sampled: B, | |
dsc: d || {}, | |
} | |
} | |
function TP2(I = eZ.uuid4(), G = eZ.uuid4().substring(16), Z) { | |
let d = '' | |
if (Z !== void 0) d = Z ? '-1' : '-0' | |
return `${I}-${G}${d}` | |
} | |
EU1.TRACEPARENT_REGEXP = RU1 | |
EU1.extractTraceparentData = y11 | |
EU1.generateSentryTraceHeader = TP2 | |
EU1.propagationContextFromHeaders = uP2 | |
EU1.tracingContextFromHeaders = OP2 | |
}) | |
var O11 = _((LU1) => { | |
Object.defineProperty(LU1, '__esModule', { value: !0 }) | |
var hP2 = nt(), | |
xP2 = Zv(), | |
MU1 = oZ() | |
function cP2(I, G = []) { | |
return [I, G] | |
} | |
function pP2(I, G) { | |
let [Z, d] = I | |
return [Z, [...d, G]] | |
} | |
function SU1(I, G) { | |
let Z = I[1] | |
for (let d of Z) { | |
let W = d[0].type | |
if (G(d, W)) return !0 | |
} | |
return !1 | |
} | |
function iP2(I, G) { | |
return SU1(I, (Z, d) => G.includes(d)) | |
} | |
function P11(I, G) { | |
return (G || new TextEncoder()).encode(I) | |
} | |
function nP2(I, G) { | |
let [Z, d] = I, | |
W = JSON.stringify(Z) | |
function w(B) { | |
if (typeof W === 'string') W = typeof B === 'string' ? W + B : [P11(W, G), B] | |
else W.push(typeof B === 'string' ? P11(B, G) : B) | |
} | |
for (let B of d) { | |
let [C, V] = B | |
if ( | |
(w(` | |
${JSON.stringify(C)} | |
`), | |
typeof V === 'string' || V instanceof Uint8Array) | |
) | |
w(V) | |
else { | |
let A | |
try { | |
A = JSON.stringify(V) | |
} catch (X) { | |
A = JSON.stringify(xP2.normalize(V)) | |
} | |
w(A) | |
} | |
} | |
return typeof W === 'string' ? W : aP2(W) | |
} | |
function aP2(I) { | |
let G = I.reduce((W, w) => W + w.length, 0), | |
Z = new Uint8Array(G), | |
d = 0 | |
for (let W of I) Z.set(W, d), (d += W.length) | |
return Z | |
} | |
function rP2(I, G, Z) { | |
let d = typeof I === 'string' ? G.encode(I) : I | |
function W(V) { | |
let A = d.subarray(0, V) | |
return (d = d.subarray(V + 1)), A | |
} | |
function w() { | |
let V = d.indexOf(10) | |
if (V < 0) V = d.length | |
return JSON.parse(Z.decode(W(V))) | |
} | |
let B = w(), | |
C = [] | |
while (d.length) { | |
let V = w(), | |
A = typeof V.length === 'number' ? V.length : void 0 | |
C.push([V, A ? W(A) : w()]) | |
} | |
return [B, C] | |
} | |
function sP2(I, G) { | |
let Z = typeof I.data === 'string' ? P11(I.data, G) : I.data | |
return [ | |
MU1.dropUndefinedKeys({ | |
type: 'attachment', | |
length: Z.length, | |
filename: I.filename, | |
content_type: I.contentType, | |
attachment_type: I.attachmentType, | |
}), | |
Z, | |
] | |
} | |
var oP2 = { | |
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 eP2(I) { | |
return oP2[I] | |
} | |
function tP2(I) { | |
if (!I || !I.sdk) return | |
let { name: G, version: Z } = I.sdk | |
return { name: G, version: Z } | |
} | |
function IO2(I, G, Z, d) { | |
let W = I.sdkProcessingMetadata && I.sdkProcessingMetadata.dynamicSamplingContext | |
return { | |
event_id: I.event_id, | |
sent_at: new Date().toISOString(), | |
...(G && { sdk: G }), | |
...(!!Z && d && { dsn: hP2.dsnToString(d) }), | |
...(W && { trace: MU1.dropUndefinedKeys({ ...W }) }), | |
} | |
} | |
LU1.addItemToEnvelope = pP2 | |
LU1.createAttachmentEnvelopeItem = sP2 | |
LU1.createEnvelope = cP2 | |
LU1.createEventEnvelopeHeaders = IO2 | |
LU1.envelopeContainsItemType = iP2 | |
LU1.envelopeItemTypeToDataCategory = eP2 | |
LU1.forEachEnvelopeItem = SU1 | |
LU1.getSdkMetadataForEnvelopeHeader = tP2 | |
LU1.parseEnvelope = rP2 | |
LU1.serializeEnvelope = nP2 | |
}) | |
var yU1 = _(($U1) => { | |
Object.defineProperty($U1, '__esModule', { value: !0 }) | |
var YO2 = O11(), | |
_O2 = S11() | |
function DO2(I, G, Z) { | |
let d = [ | |
{ type: 'client_report' }, | |
{ timestamp: Z || _O2.dateTimestampInSeconds(), discarded_events: I }, | |
] | |
return YO2.createEnvelope(G ? { dsn: G } : {}, [d]) | |
} | |
$U1.createClientReportEnvelope = DO2 | |
}) | |
var mU1 = _((TU1) => { | |
Object.defineProperty(TU1, '__esModule', { value: !0 }) | |
var PU1 = 60000 | |
function OU1(I, G = Date.now()) { | |
let Z = parseInt(`${I}`, 10) | |
if (!isNaN(Z)) return Z * 1000 | |
let d = Date.parse(`${I}`) | |
if (!isNaN(d)) return d - G | |
return PU1 | |
} | |
function uU1(I, G) { | |
return I[G] || I.all || 0 | |
} | |
function FO2(I, G, Z = Date.now()) { | |
return uU1(I, G) > Z | |
} | |
function JO2(I, { statusCode: G, headers: Z }, d = Date.now()) { | |
let W = { ...I }, | |
w = Z && Z['x-sentry-rate-limits'], | |
B = Z && Z['retry-after'] | |
if (w) | |
for (let C of w.trim().split(',')) { | |
let [V, A, , , X] = C.split(':', 5), | |
Y = parseInt(V, 10), | |
H = (!isNaN(Y) ? Y : 60) * 1000 | |
if (!A) W.all = d + H | |
else | |
for (let J of A.split(';')) | |
if (J === 'metric_bucket') { | |
if (!X || X.split(';').includes('custom')) W[J] = d + H | |
} else W[J] = d + H | |
} | |
else if (B) W.all = d + OU1(B, d) | |
else if (G === 429) W.all = d + 60000 | |
return W | |
} | |
TU1.DEFAULT_RETRY_AFTER = PU1 | |
TU1.disabledUntil = uU1 | |
TU1.isRateLimited = FO2 | |
TU1.parseRetryAfterHeader = OU1 | |
TU1.updateRateLimits = JO2 | |
}) | |
var kU1 = _((jU1) => { | |
Object.defineProperty(jU1, '__esModule', { value: !0 }) | |
function bU1(I, G, Z) { | |
let d = G.match(/([a-z_]+)\.(.*)/i) | |
if (d === null) I[G] = Z | |
else { | |
let W = I[d[1]] | |
bU1(W, d[2], Z) | |
} | |
} | |
function qO2(I, G, Z = {}) { | |
return Array.isArray(G) ? lU1(I, G, Z) : UO2(I, G, Z) | |
} | |
function lU1(I, G, Z) { | |
let d = G.find((W) => W.name === I.name) | |
if (d) { | |
for (let [W, w] of Object.entries(Z)) bU1(d, W, w) | |
return G | |
} | |
return [...G, I] | |
} | |
function UO2(I, G, Z) { | |
return (W) => { | |
let w = G(W) | |
if (I.allowExclusionByUser) { | |
if (!w.find((C) => C.name === I.name)) return w | |
} | |
return lU1(I, w, Z) | |
} | |
} | |
jU1.addOrUpdateIntegration = qO2 | |
}) | |
var xU1 = _((hU1) => { | |
Object.defineProperty(hU1, '__esModule', { value: !0 }) | |
function RO2(I) { | |
let G = [], | |
Z = {} | |
return { | |
add(d, W) { | |
while (G.length >= I) { | |
let w = G.shift() | |
if (w !== void 0) delete Z[w] | |
} | |
if (Z[d]) this.delete(d) | |
G.push(d), (Z[d] = W) | |
}, | |
clear() { | |
;(Z = {}), (G = []) | |
}, | |
get(d) { | |
return Z[d] | |
}, | |
size() { | |
return G.length | |
}, | |
delete(d) { | |
if (!Z[d]) return !1 | |
delete Z[d] | |
for (let W = 0; W < G.length; W++) | |
if (G[W] === d) { | |
G.splice(W, 1) | |
break | |
} | |
return !0 | |
}, | |
} | |
} | |
hU1.makeFifoCache = RO2 | |
}) | |
var nU1 = _((iU1) => { | |
Object.defineProperty(iU1, '__esModule', { value: !0 }) | |
var u11 = sZ(), | |
cU1 = eE(), | |
vO2 = Zv(), | |
MO2 = oZ() | |
function T11(I, G) { | |
return I(G.stack || '', 1) | |
} | |
function pU1(I, G) { | |
let Z = { type: G.name || G.constructor.name, value: G.message }, | |
d = T11(I, G) | |
if (d.length) Z.stacktrace = { frames: d } | |
return Z | |
} | |
function SO2(I) { | |
if ('name' in I && typeof I.name === 'string') { | |
let G = `'${I.name}' captured as exception` | |
if ('message' in I && typeof I.message === 'string') G += ` with message '${I.message}'` | |
return G | |
} else if ('message' in I && typeof I.message === 'string') return I.message | |
else return `Object captured as exception with keys: ${MO2.extractExceptionKeysForMessage(I)}` | |
} | |
function LO2(I, G, Z, d) { | |
let W = typeof I === 'function' ? I().getClient() : I, | |
w = Z, | |
C = (d && d.data && d.data.mechanism) || { handled: !0, type: 'generic' }, | |
V | |
if (!u11.isError(Z)) { | |
if (u11.isPlainObject(Z)) { | |
let X = W && W.getOptions().normalizeDepth | |
V = { ['__serialized__']: vO2.normalizeToSize(Z, X) } | |
let Y = SO2(Z) | |
;(w = (d && d.syntheticException) || new Error(Y)), (w.message = Y) | |
} else (w = (d && d.syntheticException) || new Error(Z)), (w.message = Z) | |
C.synthetic = !0 | |
} | |
let A = { exception: { values: [pU1(G, w)] } } | |
if (V) A.extra = V | |
return ( | |
cU1.addExceptionTypeValue(A, void 0, void 0), | |
cU1.addExceptionMechanism(A, C), | |
{ ...A, event_id: d && d.event_id } | |
) | |
} | |
function $O2(I, G, Z = 'info', d, W) { | |
let w = { event_id: d && d.event_id, level: Z } | |
if (W && d && d.syntheticException) { | |
let B = T11(I, d.syntheticException) | |
if (B.length) w.exception = { values: [{ value: G, stacktrace: { frames: B } }] } | |
} | |
if (u11.isParameterizedString(G)) { | |
let { __sentry_template_string__: B, __sentry_template_values__: C } = G | |
return (w.logentry = { message: B, params: C }), w | |
} | |
return (w.message = G), w | |
} | |
iU1.eventFromMessage = $O2 | |
iU1.eventFromUnknownInput = LO2 | |
iU1.exceptionFromError = pU1 | |
iU1.parseStackFrames = T11 | |
}) | |
var rU1 = _((aU1) => { | |
Object.defineProperty(aU1, '__esModule', { value: !0 }) | |
var TO2 = oZ(), | |
mO2 = jT() | |
function bO2(I, G, Z, d) { | |
let W = I(), | |
w = !1, | |
B = !0 | |
return ( | |
setInterval(() => { | |
let C = W.getTimeMs() | |
if (w === !1 && C > G + Z) { | |
if (((w = !0), B)) d() | |
} | |
if (C < G + Z) w = !1 | |
}, 20), | |
{ | |
poll: () => { | |
W.reset() | |
}, | |
enabled: (C) => { | |
B = C | |
}, | |
} | |
) | |
} | |
function lO2(I, G, Z) { | |
let d = G ? G.replace(/^file:\/\//, '') : void 0, | |
W = I.location.columnNumber ? I.location.columnNumber + 1 : void 0, | |
w = I.location.lineNumber ? I.location.lineNumber + 1 : void 0 | |
return TO2.dropUndefinedKeys({ | |
filename: d, | |
module: Z(d), | |
function: I.functionName || '?', | |
colno: W, | |
lineno: w, | |
in_app: d ? mO2.filenameIsInApp(d) : void 0, | |
}) | |
} | |
aU1.callFrameToStackFrame = lO2 | |
aU1.watchdogTimer = bO2 | |
}) | |
var eU1 = _((oU1) => { | |
Object.defineProperty(oU1, '__esModule', { value: !0 }) | |
class sU1 { | |
constructor(I) { | |
;(this._maxSize = I), (this._cache = new Map()) | |
} | |
get size() { | |
return this._cache.size | |
} | |
get(I) { | |
let G = this._cache.get(I) | |
if (G === void 0) return | |
return this._cache.delete(I), this._cache.set(I, G), G | |
} | |
set(I, G) { | |
if (this._cache.size >= this._maxSize) this._cache.delete(this._cache.keys().next().value) | |
this._cache.set(I, G) | |
} | |
remove(I) { | |
let G = this._cache.get(I) | |
if (G) this._cache.delete(I) | |
return G | |
} | |
clear() { | |
this._cache.clear() | |
} | |
keys() { | |
return Array.from(this._cache.keys()) | |
} | |
values() { | |
let I = [] | |
return this._cache.forEach((G) => I.push(G)), I | |
} | |
} | |
oU1.LRUMap = sU1 | |
}) | |
var m11 = _((tU1) => { | |
Object.defineProperty(tU1, '__esModule', { value: !0 }) | |
function xO2(I, G) { | |
return I != null ? I : G() | |
} | |
tU1._nullishCoalesce = xO2 | |
}) | |
var Gf1 = _((If1) => { | |
Object.defineProperty(If1, '__esModule', { value: !0 }) | |
var pO2 = m11() | |
async function iO2(I, G) { | |
return pO2._nullishCoalesce(I, G) | |
} | |
If1._asyncNullishCoalesce = iO2 | |
}) | |
var b11 = _((Zf1) => { | |
Object.defineProperty(Zf1, '__esModule', { value: !0 }) | |
async function aO2(I) { | |
let G = void 0, | |
Z = I[0], | |
d = 1 | |
while (d < I.length) { | |
let W = I[d], | |
w = I[d + 1] | |
if (((d += 2), (W === 'optionalAccess' || W === 'optionalCall') && Z == null)) return | |
if (W === 'access' || W === 'optionalAccess') (G = Z), (Z = await w(Z)) | |
else if (W === 'call' || W === 'optionalCall') | |
(Z = await w((...B) => Z.call(G, ...B))), (G = void 0) | |
} | |
return Z | |
} | |
Zf1._asyncOptionalChain = aO2 | |
}) | |
var Wf1 = _((df1) => { | |
Object.defineProperty(df1, '__esModule', { value: !0 }) | |
var sO2 = b11() | |
async function oO2(I) { | |
let G = await sO2._asyncOptionalChain(I) | |
return G == null ? !0 : G | |
} | |
df1._asyncOptionalChainDelete = oO2 | |
}) | |
var l11 = _((wf1) => { | |
Object.defineProperty(wf1, '__esModule', { value: !0 }) | |
function tO2(I) { | |
let G = void 0, | |
Z = I[0], | |
d = 1 | |
while (d < I.length) { | |
let W = I[d], | |
w = I[d + 1] | |
if (((d += 2), (W === 'optionalAccess' || W === 'optionalCall') && Z == null)) return | |
if (W === 'access' || W === 'optionalAccess') (G = Z), (Z = w(Z)) | |
else if (W === 'call' || W === 'optionalCall') | |
(Z = w((...B) => Z.call(G, ...B))), (G = void 0) | |
} | |
return Z | |
} | |
wf1._optionalChain = tO2 | |
}) | |
var Cf1 = _((Bf1) => { | |
Object.defineProperty(Bf1, '__esModule', { value: !0 }) | |
var Gu2 = l11() | |
function Zu2(I) { | |
let G = Gu2._optionalChain(I) | |
return G == null ? !0 : G | |
} | |
Bf1._optionalChainDelete = Zu2 | |
}) | |
var Af1 = _((Vf1) => { | |
Object.defineProperty(Vf1, '__esModule', { value: !0 }) | |
function Wu2(I) { | |
return I.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d') | |
} | |
Vf1.escapeStringForRegex = Wu2 | |
}) | |
var X0 = _((p11) => { | |
Object.defineProperty(p11, '__esModule', { value: !0 }) | |
var Bu2 = uQ1(), | |
dm = xt(), | |
j11 = nt(), | |
Cu2 = at(), | |
k11 = q7(), | |
Vu2 = Tq1(), | |
U7 = sZ(), | |
Au2 = kq1(), | |
Wm = NW(), | |
Xu2 = q11(), | |
VY = eE(), | |
h11 = Q11(), | |
wm = Zv(), | |
PV = oZ(), | |
PF = eq1(), | |
Yu2 = GU1(), | |
OF = XU1(), | |
x11 = HU1(), | |
Wv = kT(), | |
wv = sE(), | |
AY = C11(), | |
c11 = R11(), | |
Bv = S11(), | |
Cv = vU1(), | |
Xf1 = z11(), | |
DB = O11(), | |
_u2 = yU1(), | |
Vv = mU1(), | |
ON = $11(), | |
Bm = v11(), | |
Du2 = kU1(), | |
Hu2 = xU1(), | |
Cm = nU1(), | |
Yf1 = rU1(), | |
Fu2 = eU1(), | |
Ju2 = Gf1(), | |
Ku2 = b11(), | |
gu2 = Wf1(), | |
Nu2 = m11(), | |
zu2 = l11(), | |
Qu2 = Cf1(), | |
qu2 = tt(), | |
Uu2 = W11(), | |
_f1 = g11(), | |
fu2 = A11(), | |
Ru2 = K11(), | |
Eu2 = _11(), | |
vu2 = F11(), | |
Mu2 = $V(), | |
Su2 = jT(), | |
Lu2 = Af1(), | |
$u2 = J11() | |
p11.applyAggregateErrorsToEvent = Bu2.applyAggregateErrorsToEvent | |
p11.getComponentName = dm.getComponentName | |
p11.getDomElement = dm.getDomElement | |
p11.getLocationHref = dm.getLocationHref | |
p11.htmlTreeAsString = dm.htmlTreeAsString | |
p11.dsnFromString = j11.dsnFromString | |
p11.dsnToString = j11.dsnToString | |
p11.makeDsn = j11.makeDsn | |
p11.SentryError = Cu2.SentryError | |
p11.GLOBAL_OBJ = k11.GLOBAL_OBJ | |
p11.getGlobalObject = k11.getGlobalObject | |
p11.getGlobalSingleton = k11.getGlobalSingleton | |
p11.addInstrumentationHandler = Vu2.addInstrumentationHandler | |
p11.isDOMError = U7.isDOMError | |
p11.isDOMException = U7.isDOMException | |
p11.isElement = U7.isElement | |
p11.isError = U7.isError | |
p11.isErrorEvent = U7.isErrorEvent | |
p11.isEvent = U7.isEvent | |
p11.isInstanceOf = U7.isInstanceOf | |
p11.isNaN = U7.isNaN | |
p11.isParameterizedString = U7.isParameterizedString | |
p11.isPlainObject = U7.isPlainObject | |
p11.isPrimitive = U7.isPrimitive | |
p11.isRegExp = U7.isRegExp | |
p11.isString = U7.isString | |
p11.isSyntheticEvent = U7.isSyntheticEvent | |
p11.isThenable = U7.isThenable | |
p11.isVueViewModel = U7.isVueViewModel | |
p11.isBrowser = Au2.isBrowser | |
p11.CONSOLE_LEVELS = Wm.CONSOLE_LEVELS | |
p11.consoleSandbox = Wm.consoleSandbox | |
p11.logger = Wm.logger | |
p11.originalConsoleMethods = Wm.originalConsoleMethods | |
p11.memoBuilder = Xu2.memoBuilder | |
p11.addContextToFrame = VY.addContextToFrame | |
p11.addExceptionMechanism = VY.addExceptionMechanism | |
p11.addExceptionTypeValue = VY.addExceptionTypeValue | |
p11.arrayify = VY.arrayify | |
p11.checkOrSetAlreadyCaught = VY.checkOrSetAlreadyCaught | |
p11.getEventDescription = VY.getEventDescription | |
p11.parseSemver = VY.parseSemver | |
p11.uuid4 = VY.uuid4 | |
p11.dynamicRequire = h11.dynamicRequire | |
p11.isNodeEnv = h11.isNodeEnv | |
p11.loadModule = h11.loadModule | |
p11.normalize = wm.normalize | |
p11.normalizeToSize = wm.normalizeToSize | |
p11.normalizeUrlToBase = wm.normalizeUrlToBase | |
p11.walk = wm.walk | |
p11.addNonEnumerableProperty = PV.addNonEnumerableProperty | |
p11.convertToPlainObject = PV.convertToPlainObject | |
p11.dropUndefinedKeys = PV.dropUndefinedKeys | |
p11.extractExceptionKeysForMessage = PV.extractExceptionKeysForMessage | |
p11.fill = PV.fill | |
p11.getOriginalFunction = PV.getOriginalFunction | |
p11.markFunctionWrapped = PV.markFunctionWrapped | |
p11.objectify = PV.objectify | |
p11.urlEncode = PV.urlEncode | |
p11.basename = PF.basename | |
p11.dirname = PF.dirname | |
p11.isAbsolute = PF.isAbsolute | |
p11.join = PF.join | |
p11.normalizePath = PF.normalizePath | |
p11.relative = PF.relative | |
p11.resolve = PF.resolve | |
p11.makePromiseBuffer = Yu2.makePromiseBuffer | |
p11.DEFAULT_USER_INCLUDES = OF.DEFAULT_USER_INCLUDES | |
p11.addRequestDataToEvent = OF.addRequestDataToEvent | |
p11.addRequestDataToTransaction = OF.addRequestDataToTransaction | |
p11.extractPathForTransaction = OF.extractPathForTransaction | |
p11.extractRequestData = OF.extractRequestData | |
p11.winterCGHeadersToDict = OF.winterCGHeadersToDict | |
p11.winterCGRequestToRequestData = OF.winterCGRequestToRequestData | |
p11.severityFromString = x11.severityFromString | |
p11.severityLevelFromString = x11.severityLevelFromString | |
p11.validSeverityLevels = x11.validSeverityLevels | |
p11.createStackParser = Wv.createStackParser | |
p11.getFunctionName = Wv.getFunctionName | |
p11.nodeStackLineParser = Wv.nodeStackLineParser | |
p11.stackParserFromStackParserOptions = Wv.stackParserFromStackParserOptions | |
p11.stripSentryFramesAndReverse = Wv.stripSentryFramesAndReverse | |
p11.isMatchingPattern = wv.isMatchingPattern | |
p11.safeJoin = wv.safeJoin | |
p11.snipLine = wv.snipLine | |
p11.stringMatchesSomePattern = wv.stringMatchesSomePattern | |
p11.truncate = wv.truncate | |
p11.isNativeFetch = AY.isNativeFetch | |
p11.supportsDOMError = AY.supportsDOMError | |
p11.supportsDOMException = AY.supportsDOMException | |
p11.supportsErrorEvent = AY.supportsErrorEvent | |
p11.supportsFetch = AY.supportsFetch | |
p11.supportsNativeFetch = AY.supportsNativeFetch | |
p11.supportsReferrerPolicy = AY.supportsReferrerPolicy | |
p11.supportsReportingObserver = AY.supportsReportingObserver | |
p11.SyncPromise = c11.SyncPromise | |
p11.rejectedSyncPromise = c11.rejectedSyncPromise | |
p11.resolvedSyncPromise = c11.resolvedSyncPromise | |
Object.defineProperty(p11, '_browserPerformanceTimeOriginMode', { | |
enumerable: !0, | |
get: () => Bv._browserPerformanceTimeOriginMode, | |
}) | |
p11.browserPerformanceTimeOrigin = Bv.browserPerformanceTimeOrigin | |
p11.dateTimestampInSeconds = Bv.dateTimestampInSeconds | |
p11.timestampInSeconds = Bv.timestampInSeconds | |
p11.timestampWithMs = Bv.timestampWithMs | |
p11.TRACEPARENT_REGEXP = Cv.TRACEPARENT_REGEXP | |
p11.extractTraceparentData = Cv.extractTraceparentData | |
p11.generateSentryTraceHeader = Cv.generateSentryTraceHeader | |
p11.propagationContextFromHeaders = Cv.propagationContextFromHeaders | |
p11.tracingContextFromHeaders = Cv.tracingContextFromHeaders | |
p11.getSDKSource = Xf1.getSDKSource | |
p11.isBrowserBundle = Xf1.isBrowserBundle | |
p11.addItemToEnvelope = DB.addItemToEnvelope | |
p11.createAttachmentEnvelopeItem = DB.createAttachmentEnvelopeItem | |
p11.createEnvelope = DB.createEnvelope | |
p11.createEventEnvelopeHeaders = DB.createEventEnvelopeHeaders | |
p11.envelopeContainsItemType = DB.envelopeContainsItemType | |
p11.envelopeItemTypeToDataCategory = DB.envelopeItemTypeToDataCategory | |
p11.forEachEnvelopeItem = DB.forEachEnvelopeItem | |
p11.getSdkMetadataForEnvelopeHeader = DB.getSdkMetadataForEnvelopeHeader | |
p11.parseEnvelope = DB.parseEnvelope | |
p11.serializeEnvelope = DB.serializeEnvelope | |
p11.createClientReportEnvelope = _u2.createClientReportEnvelope | |
p11.DEFAULT_RETRY_AFTER = Vv.DEFAULT_RETRY_AFTER | |
p11.disabledUntil = Vv.disabledUntil | |
p11.isRateLimited = Vv.isRateLimited | |
p11.parseRetryAfterHeader = Vv.parseRetryAfterHeader | |
p11.updateRateLimits = Vv.updateRateLimits | |
p11.BAGGAGE_HEADER_NAME = ON.BAGGAGE_HEADER_NAME | |
p11.MAX_BAGGAGE_STRING_LENGTH = ON.MAX_BAGGAGE_STRING_LENGTH | |
p11.SENTRY_BAGGAGE_KEY_PREFIX = ON.SENTRY_BAGGAGE_KEY_PREFIX | |
p11.SENTRY_BAGGAGE_KEY_PREFIX_REGEX = ON.SENTRY_BAGGAGE_KEY_PREFIX_REGEX | |
p11.baggageHeaderToDynamicSamplingContext = ON.baggageHeaderToDynamicSamplingContext | |
p11.dynamicSamplingContextToSentryBaggageHeader = ON.dynamicSamplingContextToSentryBaggageHeader | |
p11.getNumberOfUrlSegments = Bm.getNumberOfUrlSegments | |
p11.getSanitizedUrlString = Bm.getSanitizedUrlString | |
p11.parseUrl = Bm.parseUrl | |
p11.stripUrlQueryAndFragment = Bm.stripUrlQueryAndFragment | |
p11.addOrUpdateIntegration = Du2.addOrUpdateIntegration | |
p11.makeFifoCache = Hu2.makeFifoCache | |
p11.eventFromMessage = Cm.eventFromMessage | |
p11.eventFromUnknownInput = Cm.eventFromUnknownInput | |
p11.exceptionFromError = Cm.exceptionFromError | |
p11.parseStackFrames = Cm.parseStackFrames | |
p11.callFrameToStackFrame = Yf1.callFrameToStackFrame | |
p11.watchdogTimer = Yf1.watchdogTimer | |
p11.LRUMap = Fu2.LRUMap | |
p11._asyncNullishCoalesce = Ju2._asyncNullishCoalesce | |
p11._asyncOptionalChain = Ku2._asyncOptionalChain | |
p11._asyncOptionalChainDelete = gu2._asyncOptionalChainDelete | |
p11._nullishCoalesce = Nu2._nullishCoalesce | |
p11._optionalChain = zu2._optionalChain | |
p11._optionalChainDelete = Qu2._optionalChainDelete | |
p11.addConsoleInstrumentationHandler = qu2.addConsoleInstrumentationHandler | |
p11.addClickKeypressInstrumentationHandler = Uu2.addClickKeypressInstrumentationHandler | |
p11.SENTRY_XHR_DATA_KEY = _f1.SENTRY_XHR_DATA_KEY | |
p11.addXhrInstrumentationHandler = _f1.addXhrInstrumentationHandler | |
p11.addFetchInstrumentationHandler = fu2.addFetchInstrumentationHandler | |
p11.addHistoryInstrumentationHandler = Ru2.addHistoryInstrumentationHandler | |
p11.addGlobalErrorInstrumentationHandler = Eu2.addGlobalErrorInstrumentationHandler | |
p11.addGlobalUnhandledRejectionInstrumentationHandler = | |
vu2.addGlobalUnhandledRejectionInstrumentationHandler | |
p11.resetInstrumentationHandlers = Mu2.resetInstrumentationHandlers | |
p11.filenameIsInApp = Su2.filenameIsInApp | |
p11.escapeStringForRegex = Lu2.escapeStringForRegex | |
p11.supportsHistory = $u2.supportsHistory | |
}) | |
var Q6 = _((Df1) => { | |
Object.defineProperty(Df1, '__esModule', { value: !0 }) | |
var yb2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
Df1.DEBUG_BUILD = yb2 | |
}) | |
var uN = _((Hf1) => { | |
Object.defineProperty(Hf1, '__esModule', { value: !0 }) | |
var Ob2 = 'production' | |
Hf1.DEFAULT_ENVIRONMENT = Ob2 | |
}) | |
var Av = _((Jf1) => { | |
Object.defineProperty(Jf1, '__esModule', { value: !0 }) | |
var Vm = X0(), | |
Tb2 = Q6() | |
function Ff1() { | |
return Vm.getGlobalSingleton('globalEventProcessors', () => []) | |
} | |
function mb2(I) { | |
Ff1().push(I) | |
} | |
function i11(I, G, Z, d = 0) { | |
return new Vm.SyncPromise((W, w) => { | |
let B = I[d] | |
if (G === null || typeof B !== 'function') W(G) | |
else { | |
let C = B({ ...G }, Z) | |
if ( | |
(Tb2.DEBUG_BUILD && | |
B.id && | |
C === null && | |
Vm.logger.log(`Event processor "${B.id}" dropped event`), | |
Vm.isThenable(C)) | |
) | |
C.then((V) => i11(I, V, Z, d + 1).then(W)).then(null, w) | |
else | |
i11(I, C, Z, d + 1) | |
.then(W) | |
.then(null, w) | |
} | |
}) | |
} | |
Jf1.addGlobalEventProcessor = mb2 | |
Jf1.getGlobalEventProcessors = Ff1 | |
Jf1.notifyEventProcessors = i11 | |
}) | |
var TN = _((Kf1) => { | |
Object.defineProperty(Kf1, '__esModule', { value: !0 }) | |
var Xv = X0() | |
function kb2(I) { | |
let G = Xv.timestampInSeconds(), | |
Z = { | |
sid: Xv.uuid4(), | |
init: !0, | |
timestamp: G, | |
started: G, | |
duration: 0, | |
status: 'ok', | |
errors: 0, | |
ignoreDuration: !1, | |
toJSON: () => xb2(Z), | |
} | |
if (I) n11(Z, I) | |
return Z | |
} | |
function n11(I, G = {}) { | |
if (G.user) { | |
if (!I.ipAddress && G.user.ip_address) I.ipAddress = G.user.ip_address | |
if (!I.did && !G.did) I.did = G.user.id || G.user.email || G.user.username | |
} | |
if (((I.timestamp = G.timestamp || Xv.timestampInSeconds()), G.abnormal_mechanism)) | |
I.abnormal_mechanism = G.abnormal_mechanism | |
if (G.ignoreDuration) I.ignoreDuration = G.ignoreDuration | |
if (G.sid) I.sid = G.sid.length === 32 ? G.sid : Xv.uuid4() | |
if (G.init !== void 0) I.init = G.init | |
if (!I.did && G.did) I.did = `${G.did}` | |
if (typeof G.started === 'number') I.started = G.started | |
if (I.ignoreDuration) I.duration = void 0 | |
else if (typeof G.duration === 'number') I.duration = G.duration | |
else { | |
let Z = I.timestamp - I.started | |
I.duration = Z >= 0 ? Z : 0 | |
} | |
if (G.release) I.release = G.release | |
if (G.environment) I.environment = G.environment | |
if (!I.ipAddress && G.ipAddress) I.ipAddress = G.ipAddress | |
if (!I.userAgent && G.userAgent) I.userAgent = G.userAgent | |
if (typeof G.errors === 'number') I.errors = G.errors | |
if (G.status) I.status = G.status | |
} | |
function hb2(I, G) { | |
let Z = {} | |
if (G) Z = { status: G } | |
else if (I.status === 'ok') Z = { status: 'exited' } | |
n11(I, Z) | |
} | |
function xb2(I) { | |
return Xv.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, | |
}, | |
}) | |
} | |
Kf1.closeSession = hb2 | |
Kf1.makeSession = kb2 | |
Kf1.updateSession = n11 | |
}) | |
var iI = _((qf1) => { | |
Object.defineProperty(qf1, '__esModule', { value: !0 }) | |
var a11 = X0(), | |
nb2 = 0, | |
Nf1 = 1 | |
function ab2(I) { | |
let { spanId: G, traceId: Z } = I.spanContext(), | |
{ data: d, op: W, parent_span_id: w, status: B, tags: C, origin: V } = zf1(I) | |
return a11.dropUndefinedKeys({ | |
data: d, | |
op: W, | |
parent_span_id: w, | |
span_id: G, | |
status: B, | |
tags: C, | |
trace_id: Z, | |
origin: V, | |
}) | |
} | |
function rb2(I) { | |
let { traceId: G, spanId: Z } = I.spanContext(), | |
d = Qf1(I) | |
return a11.generateSentryTraceHeader(G, Z, d) | |
} | |
function sb2(I) { | |
if (typeof I === 'number') return gf1(I) | |
if (Array.isArray(I)) return I[0] + I[1] / 1e9 | |
if (I instanceof Date) return gf1(I.getTime()) | |
return a11.timestampInSeconds() | |
} | |
function gf1(I) { | |
return I > 9999999999 ? I / 1000 : I | |
} | |
function zf1(I) { | |
if (ob2(I)) return I.getSpanJSON() | |
if (typeof I.toJSON === 'function') return I.toJSON() | |
return {} | |
} | |
function ob2(I) { | |
return typeof I.getSpanJSON === 'function' | |
} | |
function Qf1(I) { | |
let { traceFlags: G } = I.spanContext() | |
return Boolean(G & Nf1) | |
} | |
qf1.TRACE_FLAG_NONE = nb2 | |
qf1.TRACE_FLAG_SAMPLED = Nf1 | |
qf1.spanIsSampled = Qf1 | |
qf1.spanTimeInputToSeconds = sb2 | |
qf1.spanToJSON = zf1 | |
qf1.spanToTraceContext = ab2 | |
qf1.spanToTraceHeader = rb2 | |
}) | |
var Am = _((vf1) => { | |
Object.defineProperty(vf1, '__esModule', { value: !0 }) | |
var cG = X0(), | |
wl2 = uN(), | |
Uf1 = Av(), | |
s11 = Ym(), | |
r11 = Xm(), | |
Bl2 = iI() | |
function Cl2(I, G, Z, d, W, w) { | |
let { normalizeDepth: B = 3, normalizeMaxBreadth: C = 1000 } = I, | |
V = { | |
...G, | |
event_id: G.event_id || Z.event_id || cG.uuid4(), | |
timestamp: G.timestamp || cG.dateTimestampInSeconds(), | |
}, | |
A = Z.integrations || I.integrations.map((z) => z.name) | |
if ((Vl2(V, I), Al2(V, A), G.type === void 0)) Rf1(V, I.stackParser) | |
let X = Yl2(d, Z.captureContext) | |
if (Z.mechanism) cG.addExceptionMechanism(V, Z.mechanism) | |
let Y = W && W.getEventProcessors ? W.getEventProcessors() : [], | |
H = s11.getGlobalScope().getScopeData() | |
if (w) { | |
let z = w.getScopeData() | |
r11.mergeScopeData(H, z) | |
} | |
if (X) { | |
let z = X.getScopeData() | |
r11.mergeScopeData(H, z) | |
} | |
let J = [...(Z.attachments || []), ...H.attachments] | |
if (J.length) Z.attachments = J | |
r11.applyScopeDataToEvent(V, H) | |
let K = [...Y, ...Uf1.getGlobalEventProcessors(), ...H.eventProcessors] | |
return Uf1.notifyEventProcessors(K, V, Z).then((z) => { | |
if (z) Ef1(z) | |
if (typeof B === 'number' && B > 0) return Xl2(z, B, C) | |
return z | |
}) | |
} | |
function Vl2(I, G) { | |
let { environment: Z, release: d, dist: W, maxValueLength: w = 250 } = G | |
if (!('environment' in I)) I.environment = 'environment' in G ? Z : wl2.DEFAULT_ENVIRONMENT | |
if (I.release === void 0 && d !== void 0) I.release = d | |
if (I.dist === void 0 && W !== void 0) I.dist = W | |
if (I.message) I.message = cG.truncate(I.message, w) | |
let B = I.exception && I.exception.values && I.exception.values[0] | |
if (B && B.value) B.value = cG.truncate(B.value, w) | |
let C = I.request | |
if (C && C.url) C.url = cG.truncate(C.url, w) | |
} | |
var ff1 = new WeakMap() | |
function Rf1(I, G) { | |
let Z = cG.GLOBAL_OBJ._sentryDebugIds | |
if (!Z) return | |
let d, | |
W = ff1.get(G) | |
if (W) d = W | |
else (d = new Map()), ff1.set(G, d) | |
let w = Object.keys(Z).reduce((B, C) => { | |
let V, | |
A = d.get(C) | |
if (A) V = A | |
else (V = G(C)), d.set(C, V) | |
for (let X = V.length - 1; X >= 0; X--) { | |
let Y = V[X] | |
if (Y.filename) { | |
B[Y.filename] = Z[C] | |
break | |
} | |
} | |
return B | |
}, {}) | |
try { | |
I.exception.values.forEach((B) => { | |
B.stacktrace.frames.forEach((C) => { | |
if (C.filename) C.debug_id = w[C.filename] | |
}) | |
}) | |
} catch (B) {} | |
} | |
function Ef1(I) { | |
let G = {} | |
try { | |
I.exception.values.forEach((d) => { | |
d.stacktrace.frames.forEach((W) => { | |
if (W.debug_id) { | |
if (W.abs_path) G[W.abs_path] = W.debug_id | |
else if (W.filename) G[W.filename] = W.debug_id | |
delete W.debug_id | |
} | |
}) | |
}) | |
} catch (d) {} | |
if (Object.keys(G).length === 0) return | |
;(I.debug_meta = I.debug_meta || {}), (I.debug_meta.images = I.debug_meta.images || []) | |
let Z = I.debug_meta.images | |
Object.keys(G).forEach((d) => { | |
Z.push({ type: 'sourcemap', code_file: d, debug_id: G[d] }) | |
}) | |
} | |
function Al2(I, G) { | |
if (G.length > 0) | |
(I.sdk = I.sdk || {}), (I.sdk.integrations = [...(I.sdk.integrations || []), ...G]) | |
} | |
function Xl2(I, G, Z) { | |
if (!I) return null | |
let d = { | |
...I, | |
...(I.breadcrumbs && { | |
breadcrumbs: I.breadcrumbs.map((W) => ({ | |
...W, | |
...(W.data && { data: cG.normalize(W.data, G, Z) }), | |
})), | |
}), | |
...(I.user && { user: cG.normalize(I.user, G, Z) }), | |
...(I.contexts && { contexts: cG.normalize(I.contexts, G, Z) }), | |
...(I.extra && { extra: cG.normalize(I.extra, G, Z) }), | |
} | |
if (I.contexts && I.contexts.trace && d.contexts) { | |
if (((d.contexts.trace = I.contexts.trace), I.contexts.trace.data)) | |
d.contexts.trace.data = cG.normalize(I.contexts.trace.data, G, Z) | |
} | |
if (I.spans) | |
d.spans = I.spans.map((W) => { | |
let w = Bl2.spanToJSON(W).data | |
if (w) W.data = cG.normalize(w, G, Z) | |
return W | |
}) | |
return d | |
} | |
function Yl2(I, G) { | |
if (!G) return I | |
let Z = I ? I.clone() : new s11.Scope() | |
return Z.update(G), Z | |
} | |
function _l2(I) { | |
if (!I) return | |
if (Dl2(I)) return { captureContext: I } | |
if (Fl2(I)) return { captureContext: I } | |
return I | |
} | |
function Dl2(I) { | |
return I instanceof s11.Scope || typeof I === 'function' | |
} | |
var Hl2 = [ | |
'user', | |
'level', | |
'extra', | |
'contexts', | |
'tags', | |
'fingerprint', | |
'requestSession', | |
'propagationContext', | |
] | |
function Fl2(I) { | |
return Object.keys(I).some((G) => Hl2.includes(G)) | |
} | |
vf1.applyDebugIds = Rf1 | |
vf1.applyDebugMeta = Ef1 | |
vf1.parseEventHintOrCaptureContext = _l2 | |
vf1.prepareEvent = Cl2 | |
}) | |
var tZ = _((Lf1) => { | |
Object.defineProperty(Lf1, '__esModule', { value: !0 }) | |
var OV = X0(), | |
zl2 = uN(), | |
_m = Q6(), | |
w6 = HB(), | |
o11 = TN(), | |
Ql2 = Am() | |
function ql2(I, G) { | |
return w6.getCurrentHub().captureException(I, Ql2.parseEventHintOrCaptureContext(G)) | |
} | |
function Ul2(I, G) { | |
let Z = typeof G === 'string' ? G : void 0, | |
d = typeof G !== 'string' ? { captureContext: G } : void 0 | |
return w6.getCurrentHub().captureMessage(I, Z, d) | |
} | |
function fl2(I, G) { | |
return w6.getCurrentHub().captureEvent(I, G) | |
} | |
function Rl2(I) { | |
w6.getCurrentHub().configureScope(I) | |
} | |
function El2(I, G) { | |
w6.getCurrentHub().addBreadcrumb(I, G) | |
} | |
function vl2(I, G) { | |
w6.getCurrentHub().setContext(I, G) | |
} | |
function Ml2(I) { | |
w6.getCurrentHub().setExtras(I) | |
} | |
function Sl2(I, G) { | |
w6.getCurrentHub().setExtra(I, G) | |
} | |
function Ll2(I) { | |
w6.getCurrentHub().setTags(I) | |
} | |
function $l2(I, G) { | |
w6.getCurrentHub().setTag(I, G) | |
} | |
function yl2(I) { | |
w6.getCurrentHub().setUser(I) | |
} | |
function Mf1(...I) { | |
let G = w6.getCurrentHub() | |
if (I.length === 2) { | |
let [Z, d] = I | |
if (!Z) return G.withScope(d) | |
return G.withScope(() => { | |
return (G.getStackTop().scope = Z), d(Z) | |
}) | |
} | |
return G.withScope(I[0]) | |
} | |
function Pl2(I) { | |
return w6.runWithAsyncContext(() => { | |
return I(w6.getIsolationScope()) | |
}) | |
} | |
function Ol2(I, G) { | |
return Mf1((Z) => { | |
return Z.setSpan(I), G(Z) | |
}) | |
} | |
function ul2(I, G) { | |
return w6.getCurrentHub().startTransaction({ ...I }, G) | |
} | |
function e11(I, G) { | |
let Z = Yv(), | |
d = uF() | |
if (!d) _m.DEBUG_BUILD && OV.logger.warn('Cannot capture check-in. No client defined.') | |
else if (!d.captureCheckIn) | |
_m.DEBUG_BUILD && | |
OV.logger.warn('Cannot capture check-in. Client does not support sending check-ins.') | |
else return d.captureCheckIn(I, G, Z) | |
return OV.uuid4() | |
} | |
function Tl2(I, G, Z) { | |
let d = e11({ monitorSlug: I, status: 'in_progress' }, Z), | |
W = OV.timestampInSeconds() | |
function w(C) { | |
e11({ monitorSlug: I, status: C, checkInId: d, duration: OV.timestampInSeconds() - W }) | |
} | |
let B | |
try { | |
B = G() | |
} catch (C) { | |
throw (w('error'), C) | |
} | |
if (OV.isThenable(B)) | |
Promise.resolve(B).then( | |
() => { | |
w('ok') | |
}, | |
() => { | |
w('error') | |
}, | |
) | |
else w('ok') | |
return B | |
} | |
async function ml2(I) { | |
let G = uF() | |
if (G) return G.flush(I) | |
return ( | |
_m.DEBUG_BUILD && OV.logger.warn('Cannot flush events. No client defined.'), | |
Promise.resolve(!1) | |
) | |
} | |
async function bl2(I) { | |
let G = uF() | |
if (G) return G.close(I) | |
return ( | |
_m.DEBUG_BUILD && OV.logger.warn('Cannot flush events and disable SDK. No client defined.'), | |
Promise.resolve(!1) | |
) | |
} | |
function ll2() { | |
return w6.getCurrentHub().lastEventId() | |
} | |
function uF() { | |
return w6.getCurrentHub().getClient() | |
} | |
function jl2() { | |
return !!uF() | |
} | |
function Yv() { | |
return w6.getCurrentHub().getScope() | |
} | |
function kl2(I) { | |
let G = uF(), | |
Z = w6.getIsolationScope(), | |
d = Yv(), | |
{ release: W, environment: w = zl2.DEFAULT_ENVIRONMENT } = (G && G.getOptions()) || {}, | |
{ userAgent: B } = OV.GLOBAL_OBJ.navigator || {}, | |
C = o11.makeSession({ | |
release: W, | |
environment: w, | |
user: d.getUser() || Z.getUser(), | |
...(B && { userAgent: B }), | |
...I, | |
}), | |
V = Z.getSession() | |
if (V && V.status === 'ok') o11.updateSession(V, { status: 'exited' }) | |
return t11(), Z.setSession(C), d.setSession(C), C | |
} | |
function t11() { | |
let I = w6.getIsolationScope(), | |
G = Yv(), | |
Z = G.getSession() || I.getSession() | |
if (Z) o11.closeSession(Z) | |
Sf1(), I.setSession(), G.setSession() | |
} | |
function Sf1() { | |
let I = w6.getIsolationScope(), | |
G = Yv(), | |
Z = uF(), | |
d = G.getSession() || I.getSession() | |
if (d && Z && Z.captureSession) Z.captureSession(d) | |
} | |
function hl2(I = !1) { | |
if (I) { | |
t11() | |
return | |
} | |
Sf1() | |
} | |
Lf1.addBreadcrumb = El2 | |
Lf1.captureCheckIn = e11 | |
Lf1.captureEvent = fl2 | |
Lf1.captureException = ql2 | |
Lf1.captureMessage = Ul2 | |
Lf1.captureSession = hl2 | |
Lf1.close = bl2 | |
Lf1.configureScope = Rl2 | |
Lf1.endSession = t11 | |
Lf1.flush = ml2 | |
Lf1.getClient = uF | |
Lf1.getCurrentScope = Yv | |
Lf1.isInitialized = jl2 | |
Lf1.lastEventId = ll2 | |
Lf1.setContext = vl2 | |
Lf1.setExtra = Sl2 | |
Lf1.setExtras = Ml2 | |
Lf1.setTag = $l2 | |
Lf1.setTags = Ll2 | |
Lf1.setUser = yl2 | |
Lf1.startSession = kl2 | |
Lf1.startTransaction = ul2 | |
Lf1.withActiveSpan = Ol2 | |
Lf1.withIsolationScope = Pl2 | |
Lf1.withMonitor = Tl2 | |
Lf1.withScope = Mf1 | |
}) | |
var mN = _(($f1) => { | |
Object.defineProperty($f1, '__esModule', { value: !0 }) | |
function Fj2(I) { | |
return I.transaction | |
} | |
$f1.getRootSpan = Fj2 | |
}) | |
var TF = _((Of1) => { | |
Object.defineProperty(Of1, '__esModule', { value: !0 }) | |
var Kj2 = X0(), | |
gj2 = uN(), | |
yf1 = tZ(), | |
Nj2 = mN(), | |
I01 = iI() | |
function Pf1(I, G, Z) { | |
let d = G.getOptions(), | |
{ publicKey: W } = G.getDsn() || {}, | |
{ segment: w } = (Z && Z.getUser()) || {}, | |
B = Kj2.dropUndefinedKeys({ | |
environment: d.environment || gj2.DEFAULT_ENVIRONMENT, | |
release: d.release, | |
user_segment: w, | |
public_key: W, | |
trace_id: I, | |
}) | |
return G.emit && G.emit('createDsc', B), B | |
} | |
function zj2(I) { | |
let G = yf1.getClient() | |
if (!G) return {} | |
let Z = Pf1(I01.spanToJSON(I).trace_id || '', G, yf1.getCurrentScope()), | |
d = Nj2.getRootSpan(I) | |
if (!d) return Z | |
let W = d && d._frozenDynamicSamplingContext | |
if (W) return W | |
let { sampleRate: w, source: B } = d.metadata | |
if (w != null) Z.sample_rate = `${w}` | |
let C = I01.spanToJSON(d) | |
if (B && B !== 'url') Z.transaction = C.description | |
return (Z.sampled = String(I01.spanIsSampled(d))), G.emit && G.emit('createDsc', Z), Z | |
} | |
Of1.getDynamicSamplingContextFromClient = Pf1 | |
Of1.getDynamicSamplingContextFromSpan = zj2 | |
}) | |
var Xm = _((Tf1) => { | |
Object.defineProperty(Tf1, '__esModule', { value: !0 }) | |
var _v = X0(), | |
Uj2 = TF(), | |
fj2 = mN(), | |
uf1 = iI() | |
function Rj2(I, G) { | |
let { fingerprint: Z, span: d, breadcrumbs: W, sdkProcessingMetadata: w } = G | |
if ((vj2(I, G), d)) Lj2(I, d) | |
$j2(I, Z), Mj2(I, W), Sj2(I, w) | |
} | |
function Ej2(I, G) { | |
let { | |
extra: Z, | |
tags: d, | |
user: W, | |
contexts: w, | |
level: B, | |
sdkProcessingMetadata: C, | |
breadcrumbs: V, | |
fingerprint: A, | |
eventProcessors: X, | |
attachments: Y, | |
propagationContext: H, | |
transactionName: J, | |
span: K, | |
} = G | |
if ( | |
(bN(I, 'extra', Z), | |
bN(I, 'tags', d), | |
bN(I, 'user', W), | |
bN(I, 'contexts', w), | |
bN(I, 'sdkProcessingMetadata', C), | |
B) | |
) | |
I.level = B | |
if (J) I.transactionName = J | |
if (K) I.span = K | |
if (V.length) I.breadcrumbs = [...I.breadcrumbs, ...V] | |
if (A.length) I.fingerprint = [...I.fingerprint, ...A] | |
if (X.length) I.eventProcessors = [...I.eventProcessors, ...X] | |
if (Y.length) I.attachments = [...I.attachments, ...Y] | |
I.propagationContext = { ...I.propagationContext, ...H } | |
} | |
function bN(I, G, Z) { | |
if (Z && Object.keys(Z).length) { | |
I[G] = { ...I[G] } | |
for (let d in Z) if (Object.prototype.hasOwnProperty.call(Z, d)) I[G][d] = Z[d] | |
} | |
} | |
function vj2(I, G) { | |
let { extra: Z, tags: d, user: W, contexts: w, level: B, transactionName: C } = G, | |
V = _v.dropUndefinedKeys(Z) | |
if (V && Object.keys(V).length) I.extra = { ...V, ...I.extra } | |
let A = _v.dropUndefinedKeys(d) | |
if (A && Object.keys(A).length) I.tags = { ...A, ...I.tags } | |
let X = _v.dropUndefinedKeys(W) | |
if (X && Object.keys(X).length) I.user = { ...X, ...I.user } | |
let Y = _v.dropUndefinedKeys(w) | |
if (Y && Object.keys(Y).length) I.contexts = { ...Y, ...I.contexts } | |
if (B) I.level = B | |
if (C) I.transaction = C | |
} | |
function Mj2(I, G) { | |
let Z = [...(I.breadcrumbs || []), ...G] | |
I.breadcrumbs = Z.length ? Z : void 0 | |
} | |
function Sj2(I, G) { | |
I.sdkProcessingMetadata = { ...I.sdkProcessingMetadata, ...G } | |
} | |
function Lj2(I, G) { | |
I.contexts = { trace: uf1.spanToTraceContext(G), ...I.contexts } | |
let Z = fj2.getRootSpan(G) | |
if (Z) { | |
I.sdkProcessingMetadata = { | |
dynamicSamplingContext: Uj2.getDynamicSamplingContextFromSpan(G), | |
...I.sdkProcessingMetadata, | |
} | |
let d = uf1.spanToJSON(Z).description | |
if (d) I.tags = { transaction: d, ...I.tags } | |
} | |
} | |
function $j2(I, G) { | |
if (((I.fingerprint = I.fingerprint ? _v.arrayify(I.fingerprint) : []), G)) | |
I.fingerprint = I.fingerprint.concat(G) | |
if (I.fingerprint && !I.fingerprint.length) delete I.fingerprint | |
} | |
Tf1.applyScopeDataToEvent = Rj2 | |
Tf1.mergeAndOverwriteScopeData = bN | |
Tf1.mergeScopeData = Ej2 | |
}) | |
var Ym = _((lf1) => { | |
Object.defineProperty(lf1, '__esModule', { value: !0 }) | |
var FB = X0(), | |
mf1 = Av(), | |
uj2 = TN(), | |
Tj2 = Xm(), | |
mj2 = 100, | |
Dm | |
class lN { | |
constructor() { | |
;(this._notifyingListeners = !1), | |
(this._scopeListeners = []), | |
(this._eventProcessors = []), | |
(this._breadcrumbs = []), | |
(this._attachments = []), | |
(this._user = {}), | |
(this._tags = {}), | |
(this._extra = {}), | |
(this._contexts = {}), | |
(this._sdkProcessingMetadata = {}), | |
(this._propagationContext = bf1()) | |
} | |
static clone(I) { | |
return I ? I.clone() : new lN() | |
} | |
clone() { | |
let I = new lN() | |
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) | |
) | |
uj2.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, G) { | |
return (this._tags = { ...this._tags, [I]: G }), this._notifyScopeListeners(), this | |
} | |
setExtras(I) { | |
return (this._extra = { ...this._extra, ...I }), this._notifyScopeListeners(), this | |
} | |
setExtra(I, G) { | |
return (this._extra = { ...this._extra, [I]: G }), 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, G) { | |
if (G === null) delete this._contexts[I] | |
else this._contexts[I] = G | |
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 G = typeof I === 'function' ? I(this) : I | |
if (G instanceof lN) { | |
let Z = G.getScopeData() | |
if ( | |
((this._tags = { ...this._tags, ...Z.tags }), | |
(this._extra = { ...this._extra, ...Z.extra }), | |
(this._contexts = { ...this._contexts, ...Z.contexts }), | |
Z.user && Object.keys(Z.user).length) | |
) | |
this._user = Z.user | |
if (Z.level) this._level = Z.level | |
if (Z.fingerprint.length) this._fingerprint = Z.fingerprint | |
if (G.getRequestSession()) this._requestSession = G.getRequestSession() | |
if (Z.propagationContext) this._propagationContext = Z.propagationContext | |
} else if (FB.isPlainObject(G)) { | |
let Z = I | |
if ( | |
((this._tags = { ...this._tags, ...Z.tags }), | |
(this._extra = { ...this._extra, ...Z.extra }), | |
(this._contexts = { ...this._contexts, ...Z.contexts }), | |
Z.user) | |
) | |
this._user = Z.user | |
if (Z.level) this._level = Z.level | |
if (Z.fingerprint) this._fingerprint = Z.fingerprint | |
if (Z.requestSession) this._requestSession = Z.requestSession | |
if (Z.propagationContext) this._propagationContext = Z.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 = bf1()), | |
this | |
) | |
} | |
addBreadcrumb(I, G) { | |
let Z = typeof G === 'number' ? G : mj2 | |
if (Z <= 0) return this | |
let d = { timestamp: FB.dateTimestampInSeconds(), ...I }, | |
W = this._breadcrumbs | |
return ( | |
W.push(d), | |
(this._breadcrumbs = W.length > Z ? W.slice(-Z) : W), | |
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: G, | |
_contexts: Z, | |
_tags: d, | |
_extra: W, | |
_user: w, | |
_level: B, | |
_fingerprint: C, | |
_eventProcessors: V, | |
_propagationContext: A, | |
_sdkProcessingMetadata: X, | |
_transactionName: Y, | |
_span: H, | |
} = this | |
return { | |
breadcrumbs: I, | |
attachments: G, | |
contexts: Z, | |
tags: d, | |
extra: W, | |
user: w, | |
level: B, | |
fingerprint: C || [], | |
eventProcessors: V, | |
propagationContext: A, | |
sdkProcessingMetadata: X, | |
transactionName: Y, | |
span: H, | |
} | |
} | |
applyToEvent(I, G = {}, Z = []) { | |
Tj2.applyScopeDataToEvent(I, this.getScopeData()) | |
let d = [...Z, ...mf1.getGlobalEventProcessors(), ...this._eventProcessors] | |
return mf1.notifyEventProcessors(d, I, G) | |
} | |
setSDKProcessingMetadata(I) { | |
return (this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...I }), this | |
} | |
setPropagationContext(I) { | |
return (this._propagationContext = I), this | |
} | |
getPropagationContext() { | |
return this._propagationContext | |
} | |
captureException(I, G) { | |
let Z = G && G.event_id ? G.event_id : FB.uuid4() | |
if (!this._client) | |
return FB.logger.warn('No client configured on scope - will not capture exception!'), Z | |
let d = new Error('Sentry syntheticException') | |
return ( | |
this._client.captureException( | |
I, | |
{ originalException: I, syntheticException: d, ...G, event_id: Z }, | |
this, | |
), | |
Z | |
) | |
} | |
captureMessage(I, G, Z) { | |
let d = Z && Z.event_id ? Z.event_id : FB.uuid4() | |
if (!this._client) | |
return FB.logger.warn('No client configured on scope - will not capture message!'), d | |
let W = new Error(I) | |
return ( | |
this._client.captureMessage( | |
I, | |
G, | |
{ originalException: I, syntheticException: W, ...Z, event_id: d }, | |
this, | |
), | |
d | |
) | |
} | |
captureEvent(I, G) { | |
let Z = G && G.event_id ? G.event_id : FB.uuid4() | |
if (!this._client) | |
return FB.logger.warn('No client configured on scope - will not capture event!'), Z | |
return this._client.captureEvent(I, { ...G, event_id: Z }, this), Z | |
} | |
_notifyScopeListeners() { | |
if (!this._notifyingListeners) | |
(this._notifyingListeners = !0), | |
this._scopeListeners.forEach((I) => { | |
I(this) | |
}), | |
(this._notifyingListeners = !1) | |
} | |
} | |
function bj2() { | |
if (!Dm) Dm = new lN() | |
return Dm | |
} | |
function lj2(I) { | |
Dm = I | |
} | |
function bf1() { | |
return { traceId: FB.uuid4(), spanId: FB.uuid4().substring(16) } | |
} | |
lf1.Scope = lN | |
lf1.getGlobalScope = bj2 | |
lf1.setGlobalScope = lj2 | |
}) | |
var Hm = _((jf1) => { | |
Object.defineProperty(jf1, '__esModule', { value: !0 }) | |
var xj2 = '7.120.0' | |
jf1.SDK_VERSION = xj2 | |
}) | |
var HB = _((pf1) => { | |
Object.defineProperty(pf1, '__esModule', { value: !0 }) | |
var ZI = X0(), | |
pj2 = uN(), | |
G01 = Q6(), | |
kf1 = Ym(), | |
Z01 = TN(), | |
ij2 = Hm(), | |
Fm = parseFloat(ij2.SDK_VERSION), | |
nj2 = 100 | |
class Hv { | |
constructor(I, G, Z, d = Fm) { | |
this._version = d | |
let W | |
if (!G) (W = new kf1.Scope()), W.setClient(I) | |
else W = G | |
let w | |
if (!Z) (w = new kf1.Scope()), w.setClient(I) | |
else w = Z | |
if (((this._stack = [{ scope: W }]), I)) this.bindClient(I) | |
this._isolationScope = w | |
} | |
isOlderThan(I) { | |
return this._version < I | |
} | |
bindClient(I) { | |
let G = this.getStackTop() | |
if (((G.client = I), G.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 G = this.pushScope(), | |
Z | |
try { | |
Z = I(G) | |
} catch (d) { | |
throw (this.popScope(), d) | |
} | |
if (ZI.isThenable(Z)) | |
return Z.then( | |
(d) => { | |
return this.popScope(), d | |
}, | |
(d) => { | |
throw (this.popScope(), d) | |
}, | |
) | |
return this.popScope(), Z | |
} | |
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, G) { | |
let Z = (this._lastEventId = G && G.event_id ? G.event_id : ZI.uuid4()), | |
d = new Error('Sentry syntheticException') | |
return ( | |
this.getScope().captureException(I, { | |
originalException: I, | |
syntheticException: d, | |
...G, | |
event_id: Z, | |
}), | |
Z | |
) | |
} | |
captureMessage(I, G, Z) { | |
let d = (this._lastEventId = Z && Z.event_id ? Z.event_id : ZI.uuid4()), | |
W = new Error(I) | |
return ( | |
this.getScope().captureMessage(I, G, { | |
originalException: I, | |
syntheticException: W, | |
...Z, | |
event_id: d, | |
}), | |
d | |
) | |
} | |
captureEvent(I, G) { | |
let Z = G && G.event_id ? G.event_id : ZI.uuid4() | |
if (!I.type) this._lastEventId = Z | |
return this.getScope().captureEvent(I, { ...G, event_id: Z }), Z | |
} | |
lastEventId() { | |
return this._lastEventId | |
} | |
addBreadcrumb(I, G) { | |
let { scope: Z, client: d } = this.getStackTop() | |
if (!d) return | |
let { beforeBreadcrumb: W = null, maxBreadcrumbs: w = nj2 } = | |
(d.getOptions && d.getOptions()) || {} | |
if (w <= 0) return | |
let C = { timestamp: ZI.dateTimestampInSeconds(), ...I }, | |
V = W ? ZI.consoleSandbox(() => W(C, G)) : C | |
if (V === null) return | |
if (d.emit) d.emit('beforeAddBreadcrumb', V, G) | |
Z.addBreadcrumb(V, 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, G) { | |
this.getScope().setTag(I, G), this.getIsolationScope().setTag(I, G) | |
} | |
setExtra(I, G) { | |
this.getScope().setExtra(I, G), this.getIsolationScope().setExtra(I, G) | |
} | |
setContext(I, G) { | |
this.getScope().setContext(I, G), this.getIsolationScope().setContext(I, G) | |
} | |
configureScope(I) { | |
let { scope: G, client: Z } = this.getStackTop() | |
if (Z) I(G) | |
} | |
run(I) { | |
let G = d01(this) | |
try { | |
I(this) | |
} finally { | |
d01(G) | |
} | |
} | |
getIntegration(I) { | |
let G = this.getClient() | |
if (!G) return null | |
try { | |
return G.getIntegration(I) | |
} catch (Z) { | |
return ( | |
G01.DEBUG_BUILD && | |
ZI.logger.warn(`Cannot retrieve integration ${I.id} from the current Hub`), | |
null | |
) | |
} | |
} | |
startTransaction(I, G) { | |
let Z = this._callExtensionMethod('startTransaction', I, G) | |
if (G01.DEBUG_BUILD && !Z) | |
if (!this.getClient()) | |
ZI.logger.warn( | |
"Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'", | |
) | |
else | |
ZI.logger | |
.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init': | |
Sentry.addTracingExtensions(); | |
Sentry.init({...}); | |
`) | |
return Z | |
} | |
traceHeaders() { | |
return this._callExtensionMethod('traceHeaders') | |
} | |
captureSession(I = !1) { | |
if (I) return this.endSession() | |
this._sendSessionUpdate() | |
} | |
endSession() { | |
let G = this.getStackTop().scope, | |
Z = G.getSession() | |
if (Z) Z01.closeSession(Z) | |
this._sendSessionUpdate(), G.setSession() | |
} | |
startSession(I) { | |
let { scope: G, client: Z } = this.getStackTop(), | |
{ release: d, environment: W = pj2.DEFAULT_ENVIRONMENT } = (Z && Z.getOptions()) || {}, | |
{ userAgent: w } = ZI.GLOBAL_OBJ.navigator || {}, | |
B = Z01.makeSession({ | |
release: d, | |
environment: W, | |
user: G.getUser(), | |
...(w && { userAgent: w }), | |
...I, | |
}), | |
C = G.getSession && G.getSession() | |
if (C && C.status === 'ok') Z01.updateSession(C, { status: 'exited' }) | |
return this.endSession(), G.setSession(B), B | |
} | |
shouldSendDefaultPii() { | |
let I = this.getClient(), | |
G = I && I.getOptions() | |
return Boolean(G && G.sendDefaultPii) | |
} | |
_sendSessionUpdate() { | |
let { scope: I, client: G } = this.getStackTop(), | |
Z = I.getSession() | |
if (Z && G && G.captureSession) G.captureSession(Z) | |
} | |
_callExtensionMethod(I, ...G) { | |
let d = mF().__SENTRY__ | |
if (d && d.extensions && typeof d.extensions[I] === 'function') | |
return d.extensions[I].apply(this, G) | |
G01.DEBUG_BUILD && ZI.logger.warn(`Extension method ${I} couldn't be found, doing nothing.`) | |
} | |
} | |
function mF() { | |
return ( | |
(ZI.GLOBAL_OBJ.__SENTRY__ = ZI.GLOBAL_OBJ.__SENTRY__ || { extensions: {}, hub: void 0 }), | |
ZI.GLOBAL_OBJ | |
) | |
} | |
function d01(I) { | |
let G = mF(), | |
Z = Dv(G) | |
return Jm(G, I), Z | |
} | |
function hf1() { | |
let I = mF() | |
if (I.__SENTRY__ && I.__SENTRY__.acs) { | |
let G = I.__SENTRY__.acs.getCurrentHub() | |
if (G) return G | |
} | |
return xf1(I) | |
} | |
function aj2() { | |
return hf1().getIsolationScope() | |
} | |
function xf1(I = mF()) { | |
if (!cf1(I) || Dv(I).isOlderThan(Fm)) Jm(I, new Hv()) | |
return Dv(I) | |
} | |
function rj2(I, G = xf1()) { | |
if (!cf1(I) || Dv(I).isOlderThan(Fm)) { | |
let Z = G.getClient(), | |
d = G.getScope(), | |
W = G.getIsolationScope() | |
Jm(I, new Hv(Z, d.clone(), W.clone())) | |
} | |
} | |
function sj2(I) { | |
let G = mF() | |
;(G.__SENTRY__ = G.__SENTRY__ || {}), (G.__SENTRY__.acs = I) | |
} | |
function oj2(I, G = {}) { | |
let Z = mF() | |
if (Z.__SENTRY__ && Z.__SENTRY__.acs) return Z.__SENTRY__.acs.runWithAsyncContext(I, G) | |
return I() | |
} | |
function cf1(I) { | |
return !!(I && I.__SENTRY__ && I.__SENTRY__.hub) | |
} | |
function Dv(I) { | |
return ZI.getGlobalSingleton('hub', () => new Hv(), I) | |
} | |
function Jm(I, G) { | |
if (!I) return !1 | |
let Z = (I.__SENTRY__ = I.__SENTRY__ || {}) | |
return (Z.hub = G), !0 | |
} | |
pf1.API_VERSION = Fm | |
pf1.Hub = Hv | |
pf1.ensureHubOnCarrier = rj2 | |
pf1.getCurrentHub = hf1 | |
pf1.getHubFromCarrier = Dv | |
pf1.getIsolationScope = aj2 | |
pf1.getMainCarrier = mF | |
pf1.makeMain = d01 | |
pf1.runWithAsyncContext = oj2 | |
pf1.setAsyncContextStrategy = sj2 | |
pf1.setHubOnCarrier = Jm | |
}) | |
var Km = _((nf1) => { | |
Object.defineProperty(nf1, '__esModule', { value: !0 }) | |
var if1 = X0(), | |
Ak2 = HB() | |
function Xk2(I) { | |
return (I || Ak2.getCurrentHub()).getScope().getTransaction() | |
} | |
var Yk2 = if1.extractTraceparentData | |
nf1.stripUrlQueryAndFragment = if1.stripUrlQueryAndFragment | |
nf1.extractTraceparentData = Yk2 | |
nf1.getActiveTransaction = Xk2 | |
}) | |
var gm = _((rf1) => { | |
Object.defineProperty(rf1, '__esModule', { value: !0 }) | |
var W01 = X0(), | |
Fk2 = Q6(), | |
Jk2 = Km(), | |
af1 = !1 | |
function Kk2() { | |
if (af1) return | |
;(af1 = !0), | |
W01.addGlobalErrorInstrumentationHandler(w01), | |
W01.addGlobalUnhandledRejectionInstrumentationHandler(w01) | |
} | |
function w01() { | |
let I = Jk2.getActiveTransaction() | |
if (I) | |
Fk2.DEBUG_BUILD && | |
W01.logger.log('[Tracing] Transaction: internal_error -> Global error occured'), | |
I.setStatus('internal_error') | |
} | |
w01.tag = 'sentry_tracingErrorCallback' | |
rf1.registerErrorInstrumentation = Kk2 | |
}) | |
var jN = _((sf1) => { | |
Object.defineProperty(sf1, '__esModule', { value: !0 }) | |
sf1.SpanStatus = void 0 | |
;(function (I) { | |
I.Ok = 'ok' | |
let Z = 'deadline_exceeded' | |
I.DeadlineExceeded = Z | |
let d = 'unauthenticated' | |
I.Unauthenticated = d | |
let W = 'permission_denied' | |
I.PermissionDenied = W | |
let w = 'not_found' | |
I.NotFound = w | |
let B = 'resource_exhausted' | |
I.ResourceExhausted = B | |
let C = 'invalid_argument' | |
I.InvalidArgument = C | |
let V = 'unimplemented' | |
I.Unimplemented = V | |
let A = 'unavailable' | |
I.Unavailable = A | |
let X = 'internal_error' | |
I.InternalError = X | |
let Y = 'unknown_error' | |
I.UnknownError = Y | |
let H = 'cancelled' | |
I.Cancelled = H | |
let J = 'already_exists' | |
I.AlreadyExists = J | |
let K = 'failed_precondition' | |
I.FailedPrecondition = K | |
let g = 'aborted' | |
I.Aborted = g | |
let z = 'out_of_range' | |
I.OutOfRange = z | |
let f = 'data_loss' | |
I.DataLoss = f | |
})(sf1.SpanStatus || (sf1.SpanStatus = {})) | |
function C01(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 Nk2 = C01 | |
function zk2(I, G) { | |
I.setTag('http.status_code', String(G)), I.setData('http.response.status_code', G) | |
let Z = C01(G) | |
if (Z !== 'unknown_error') I.setStatus(Z) | |
} | |
sf1.getSpanStatusFromHttpCode = C01 | |
sf1.setHttpStatus = zk2 | |
sf1.spanStatusfromHttpCode = Nk2 | |
}) | |
var V01 = _((of1) => { | |
Object.defineProperty(of1, '__esModule', { value: !0 }) | |
var fk2 = X0() | |
function Rk2(I, G, Z = () => {}) { | |
let d | |
try { | |
d = I() | |
} catch (W) { | |
throw (G(W), Z(), W) | |
} | |
return Ek2(d, G, Z) | |
} | |
function Ek2(I, G, Z) { | |
if (fk2.isThenable(I)) | |
return I.then( | |
(d) => { | |
return Z(), d | |
}, | |
(d) => { | |
throw (G(d), Z(), d) | |
}, | |
) | |
return Z(), I | |
} | |
of1.handleCallbackErrors = Rk2 | |
}) | |
var Nm = _((ef1) => { | |
Object.defineProperty(ef1, '__esModule', { value: !0 }) | |
var Mk2 = tZ() | |
function Sk2(I) { | |
if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) return !1 | |
let G = Mk2.getClient(), | |
Z = I || (G && G.getOptions()) | |
return !!Z && (Z.enableTracing || 'tracesSampleRate' in Z || 'tracesSampler' in Z) | |
} | |
ef1.hasTracingEnabled = Sk2 | |
}) | |
var Um = _((WR1) => { | |
Object.defineProperty(WR1, '__esModule', { value: !0 }) | |
var Fv = X0(), | |
$k2 = Q6(), | |
XY = HB(), | |
zm = iI() | |
gm() | |
jN() | |
var yk2 = TF(), | |
kN = tZ(), | |
A01 = V01(), | |
tf1 = Nm() | |
function Pk2(I, G, Z = () => {}, d = () => {}) { | |
let W = XY.getCurrentHub(), | |
w = kN.getCurrentScope(), | |
B = w.getSpan(), | |
C = qm(I), | |
V = Qm(W, { parentSpan: B, spanContext: C, forceTransaction: !1, scope: w }) | |
return ( | |
w.setSpan(V), | |
A01.handleCallbackErrors( | |
() => G(V), | |
(A) => { | |
V && V.setStatus('internal_error'), Z(A, V) | |
}, | |
() => { | |
V && V.end(), w.setSpan(B), d() | |
}, | |
) | |
) | |
} | |
function IR1(I, G) { | |
let Z = qm(I) | |
return XY.runWithAsyncContext(() => { | |
return kN.withScope(I.scope, (d) => { | |
let W = XY.getCurrentHub(), | |
w = d.getSpan(), | |
C = | |
I.onlyIfParent && !w | |
? void 0 | |
: Qm(W, { | |
parentSpan: w, | |
spanContext: Z, | |
forceTransaction: I.forceTransaction, | |
scope: d, | |
}) | |
return A01.handleCallbackErrors( | |
() => G(C), | |
() => { | |
if (C) { | |
let { status: V } = zm.spanToJSON(C) | |
if (!V || V === 'ok') C.setStatus('internal_error') | |
} | |
}, | |
() => C && C.end(), | |
) | |
}) | |
}) | |
} | |
var Ok2 = IR1 | |
function uk2(I, G) { | |
let Z = qm(I) | |
return XY.runWithAsyncContext(() => { | |
return kN.withScope(I.scope, (d) => { | |
let W = XY.getCurrentHub(), | |
w = d.getSpan(), | |
C = | |
I.onlyIfParent && !w | |
? void 0 | |
: Qm(W, { | |
parentSpan: w, | |
spanContext: Z, | |
forceTransaction: I.forceTransaction, | |
scope: d, | |
}) | |
function V() { | |
C && C.end() | |
} | |
return A01.handleCallbackErrors( | |
() => G(C, V), | |
() => { | |
if (C && C.isRecording()) { | |
let { status: A } = zm.spanToJSON(C) | |
if (!A || A === 'ok') C.setStatus('internal_error') | |
} | |
}, | |
) | |
}) | |
}) | |
} | |
function Tk2(I) { | |
if (!tf1.hasTracingEnabled()) return | |
let G = qm(I), | |
Z = XY.getCurrentHub(), | |
d = I.scope ? I.scope.getSpan() : GR1() | |
if (I.onlyIfParent && !d) return | |
let B = (I.scope || kN.getCurrentScope()).clone() | |
return Qm(Z, { parentSpan: d, spanContext: G, forceTransaction: I.forceTransaction, scope: B }) | |
} | |
function GR1() { | |
return kN.getCurrentScope().getSpan() | |
} | |
var mk2 = ({ sentryTrace: I, baggage: G }, Z) => { | |
let d = kN.getCurrentScope(), | |
{ | |
traceparentData: W, | |
dynamicSamplingContext: w, | |
propagationContext: B, | |
} = Fv.tracingContextFromHeaders(I, G) | |
if ((d.setPropagationContext(B), $k2.DEBUG_BUILD && W)) | |
Fv.logger.log(`[Tracing] Continuing trace ${W.traceId}.`) | |
let C = { ...W, metadata: Fv.dropUndefinedKeys({ dynamicSamplingContext: w }) } | |
if (!Z) return C | |
return XY.runWithAsyncContext(() => { | |
return Z(C) | |
}) | |
} | |
function Qm(I, { parentSpan: G, spanContext: Z, forceTransaction: d, scope: W }) { | |
if (!tf1.hasTracingEnabled()) return | |
let w = XY.getIsolationScope(), | |
B | |
if (G && !d) B = G.startChild(Z) | |
else if (G) { | |
let C = yk2.getDynamicSamplingContextFromSpan(G), | |
{ traceId: V, spanId: A } = G.spanContext(), | |
X = zm.spanIsSampled(G) | |
B = I.startTransaction({ | |
traceId: V, | |
parentSpanId: A, | |
parentSampled: X, | |
...Z, | |
metadata: { dynamicSamplingContext: C, ...Z.metadata }, | |
}) | |
} else { | |
let { | |
traceId: C, | |
dsc: V, | |
parentSpanId: A, | |
sampled: X, | |
} = { ...w.getPropagationContext(), ...W.getPropagationContext() } | |
B = I.startTransaction({ | |
traceId: C, | |
parentSpanId: A, | |
parentSampled: X, | |
...Z, | |
metadata: { dynamicSamplingContext: V, ...Z.metadata }, | |
}) | |
} | |
return W.setSpan(B), bk2(B, W, w), B | |
} | |
function qm(I) { | |
if (I.startTime) { | |
let G = { ...I } | |
return (G.startTimestamp = zm.spanTimeInputToSeconds(I.startTime)), delete G.startTime, G | |
} | |
return I | |
} | |
var ZR1 = '_sentryScope', | |
dR1 = '_sentryIsolationScope' | |
function bk2(I, G, Z) { | |
if (I) Fv.addNonEnumerableProperty(I, dR1, Z), Fv.addNonEnumerableProperty(I, ZR1, G) | |
} | |
function lk2(I) { | |
return { scope: I[ZR1], isolationScope: I[dR1] } | |
} | |
WR1.continueTrace = mk2 | |
WR1.getActiveSpan = GR1 | |
WR1.getCapturedScopesOnSpan = lk2 | |
WR1.startActiveSpan = Ok2 | |
WR1.startInactiveSpan = Tk2 | |
WR1.startSpan = IR1 | |
WR1.startSpanManual = uk2 | |
WR1.trace = Pk2 | |
}) | |
var Kv = _((BR1) => { | |
Object.defineProperty(BR1, '__esModule', { value: !0 }) | |
var ak2 = X0() | |
Q6() | |
gm() | |
jN() | |
var rk2 = Um(), | |
Jv | |
function wR1(I) { | |
return Jv ? Jv.get(I) : void 0 | |
} | |
function sk2(I) { | |
let G = wR1(I) | |
if (!G) return | |
let Z = {} | |
for (let [, [d, W]] of G) { | |
if (!Z[d]) Z[d] = [] | |
Z[d].push(ak2.dropUndefinedKeys(W)) | |
} | |
return Z | |
} | |
function ok2(I, G, Z, d, W, w) { | |
let B = rk2.getActiveSpan() | |
if (B) { | |
let C = wR1(B) || new Map(), | |
V = `${I}:${G}@${d}`, | |
A = C.get(w) | |
if (A) { | |
let [, X] = A | |
C.set(w, [ | |
V, | |
{ | |
min: Math.min(X.min, Z), | |
max: Math.max(X.max, Z), | |
count: (X.count += 1), | |
sum: (X.sum += Z), | |
tags: X.tags, | |
}, | |
]) | |
} else C.set(w, [V, { min: Z, max: Z, count: 1, sum: Z, tags: W }]) | |
if (!Jv) Jv = new WeakMap() | |
Jv.set(B, C) | |
} | |
} | |
BR1.getMetricSummaryJsonForSpan = sk2 | |
BR1.updateMetricSummaryOnActiveSpan = ok2 | |
}) | |
var gv = _((CR1) => { | |
Object.defineProperty(CR1, '__esModule', { value: !0 }) | |
var Ih2 = 'sentry.source', | |
Gh2 = 'sentry.sample_rate', | |
Zh2 = 'sentry.op', | |
dh2 = 'sentry.origin', | |
Wh2 = 'profile_id' | |
CR1.SEMANTIC_ATTRIBUTE_PROFILE_ID = Wh2 | |
CR1.SEMANTIC_ATTRIBUTE_SENTRY_OP = Zh2 | |
CR1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = dh2 | |
CR1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Gh2 | |
CR1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Ih2 | |
}) | |
var fm = _((YR1) => { | |
Object.defineProperty(YR1, '__esModule', { value: !0 }) | |
var bF = X0(), | |
VR1 = Q6(), | |
Xh2 = Kv(), | |
uV = gv(), | |
AR1 = mN(), | |
hN = iI(), | |
Yh2 = jN() | |
class XR1 { | |
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 X01 { | |
constructor(I = {}) { | |
if ( | |
((this._traceId = I.traceId || bF.uuid4()), | |
(this._spanId = I.spanId || bF.uuid4().substring(16)), | |
(this._startTime = I.startTimestamp || bF.timestampInSeconds()), | |
(this.tags = I.tags ? { ...I.tags } : {}), | |
(this.data = I.data ? { ...I.data } : {}), | |
(this.instrumenter = I.instrumenter || 'sentry'), | |
(this._attributes = {}), | |
this.setAttributes({ | |
[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: I.origin || 'manual', | |
[uV.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[uV.SEMANTIC_ATTRIBUTE_SENTRY_OP] | |
} | |
set op(I) { | |
this.setAttribute(uV.SEMANTIC_ATTRIBUTE_SENTRY_OP, I) | |
} | |
get origin() { | |
return this._attributes[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] | |
} | |
set origin(I) { | |
this.setAttribute(uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, I) | |
} | |
spanContext() { | |
let { _spanId: I, _traceId: G, _sampled: Z } = this | |
return { spanId: I, traceId: G, traceFlags: Z ? hN.TRACE_FLAG_SAMPLED : hN.TRACE_FLAG_NONE } | |
} | |
startChild(I) { | |
let G = new X01({ | |
...I, | |
parentSpanId: this._spanId, | |
sampled: this._sampled, | |
traceId: this._traceId, | |
}) | |
if (((G.spanRecorder = this.spanRecorder), G.spanRecorder)) G.spanRecorder.add(G) | |
let Z = AR1.getRootSpan(this) | |
if (((G.transaction = Z), VR1.DEBUG_BUILD && Z)) { | |
let d = (I && I.op) || '< unknown op >', | |
W = hN.spanToJSON(G).description || '< unknown name >', | |
w = Z.spanContext().spanId, | |
B = `[Tracing] Starting '${d}' span on transaction '${W}' (${w}).` | |
bF.logger.log(B), (this._logMessage = B) | |
} | |
return G | |
} | |
setTag(I, G) { | |
return (this.tags = { ...this.tags, [I]: G }), this | |
} | |
setData(I, G) { | |
return (this.data = { ...this.data, [I]: G }), this | |
} | |
setAttribute(I, G) { | |
if (G === void 0) delete this._attributes[I] | |
else this._attributes[I] = G | |
} | |
setAttributes(I) { | |
Object.keys(I).forEach((G) => this.setAttribute(G, I[G])) | |
} | |
setStatus(I) { | |
return (this._status = I), this | |
} | |
setHttpStatus(I) { | |
return Yh2.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 G = AR1.getRootSpan(this) | |
if (VR1.DEBUG_BUILD && G && G.spanContext().spanId !== this._spanId) { | |
let Z = this._logMessage | |
if (Z) bF.logger.log(Z.replace('Starting', 'Finishing')) | |
} | |
this._endTime = hN.spanTimeInputToSeconds(I) | |
} | |
toTraceparent() { | |
return hN.spanToTraceHeader(this) | |
} | |
toContext() { | |
return bF.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 hN.spanToTraceContext(this) | |
} | |
getSpanJSON() { | |
return bF.dropUndefinedKeys({ | |
data: this._getData(), | |
description: this._name, | |
op: this._attributes[uV.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[uV.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN], | |
_metrics_summary: Xh2.getMetricSummaryJsonForSpan(this), | |
profile_id: this._attributes[uV.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: G } = this, | |
Z = Object.keys(I).length > 0, | |
d = Object.keys(G).length > 0 | |
if (!Z && !d) return | |
if (Z && d) return { ...I, ...G } | |
return Z ? I : G | |
} | |
} | |
YR1.Span = X01 | |
YR1.SpanRecorder = XR1 | |
}) | |
var vm = _((FR1) => { | |
Object.defineProperty(FR1, '__esModule', { value: !0 }) | |
var xN = X0(), | |
Rm = Q6(), | |
Hh2 = HB(), | |
Fh2 = Kv(), | |
Nv = gv(), | |
Em = iI(), | |
_R1 = TF(), | |
DR1 = fm(), | |
Jh2 = Um() | |
class HR1 extends DR1.Span { | |
constructor(I, G) { | |
super(I) | |
;(this._contexts = {}), | |
(this._hub = G || Hh2.getCurrentHub()), | |
(this._name = I.name || ''), | |
(this._metadata = { ...I.metadata }), | |
(this._trimEnd = I.trimEnd), | |
(this.transaction = this) | |
let Z = this._metadata.dynamicSamplingContext | |
if (Z) this._frozenDynamicSamplingContext = { ...Z } | |
} | |
get name() { | |
return this._name | |
} | |
set name(I) { | |
this.setName(I) | |
} | |
get metadata() { | |
return { | |
source: 'custom', | |
spanMetadata: {}, | |
...this._metadata, | |
...(this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] && { | |
source: this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
}), | |
...(this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] && { | |
sampleRate: this._attributes[Nv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE], | |
}), | |
} | |
} | |
set metadata(I) { | |
this._metadata = I | |
} | |
setName(I, G = 'custom') { | |
;(this._name = I), this.setAttribute(Nv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, G) | |
} | |
updateName(I) { | |
return (this._name = I), this | |
} | |
initSpanRecorder(I = 1000) { | |
if (!this.spanRecorder) this.spanRecorder = new DR1.SpanRecorder(I) | |
this.spanRecorder.add(this) | |
} | |
setContext(I, G) { | |
if (G === null) delete this._contexts[I] | |
else this._contexts[I] = G | |
} | |
setMeasurement(I, G, Z = '') { | |
this._measurements[I] = { value: G, unit: Z } | |
} | |
setMetadata(I) { | |
this._metadata = { ...this._metadata, ...I } | |
} | |
end(I) { | |
let G = Em.spanTimeInputToSeconds(I), | |
Z = this._finishTransaction(G) | |
if (!Z) return | |
return this._hub.captureEvent(Z) | |
} | |
toContext() { | |
let I = super.toContext() | |
return xN.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 _R1.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) | |
Rm.DEBUG_BUILD && | |
xN.logger.warn('Transaction has no name, falling back to `<unlabeled transaction>`.'), | |
(this._name = '<unlabeled transaction>') | |
super.end(I) | |
let G = this._hub.getClient() | |
if (G && G.emit) G.emit('finishTransaction', this) | |
if (this._sampled !== !0) { | |
if ( | |
(Rm.DEBUG_BUILD && | |
xN.logger.log( | |
'[Tracing] Discarding transaction because its trace was not chosen to be sampled.', | |
), | |
G) | |
) | |
G.recordDroppedEvent('sample_rate', 'transaction') | |
return | |
} | |
let Z = this.spanRecorder | |
? this.spanRecorder.spans.filter((A) => A !== this && Em.spanToJSON(A).timestamp) | |
: [] | |
if (this._trimEnd && Z.length > 0) { | |
let A = Z.map((X) => Em.spanToJSON(X).timestamp).filter(Boolean) | |
this._endTime = A.reduce((X, Y) => { | |
return X > Y ? X : Y | |
}) | |
} | |
let { scope: d, isolationScope: W } = Jh2.getCapturedScopesOnSpan(this), | |
{ metadata: w } = this, | |
{ source: B } = w, | |
C = { | |
contexts: { ...this._contexts, trace: Em.spanToTraceContext(this) }, | |
spans: Z, | |
start_timestamp: this._startTime, | |
tags: this.tags, | |
timestamp: this._endTime, | |
transaction: this._name, | |
type: 'transaction', | |
sdkProcessingMetadata: { | |
...w, | |
capturedSpanScope: d, | |
capturedSpanIsolationScope: W, | |
...xN.dropUndefinedKeys({ | |
dynamicSamplingContext: _R1.getDynamicSamplingContextFromSpan(this), | |
}), | |
}, | |
_metrics_summary: Fh2.getMetricSummaryJsonForSpan(this), | |
...(B && { transaction_info: { source: B } }), | |
} | |
if (Object.keys(this._measurements).length > 0) | |
Rm.DEBUG_BUILD && | |
xN.logger.log( | |
'[Measurements] Adding measurements to transaction', | |
JSON.stringify(this._measurements, void 0, 2), | |
), | |
(C.measurements = this._measurements) | |
return ( | |
Rm.DEBUG_BUILD && | |
xN.logger.log(`[Tracing] Finishing ${this.op} transaction: ${this._name}.`), | |
C | |
) | |
} | |
} | |
FR1.Transaction = HR1 | |
}) | |
var _01 = _((KR1) => { | |
Object.defineProperty(KR1, '__esModule', { value: !0 }) | |
var f7 = X0(), | |
nI = Q6(), | |
Mm = iI(), | |
gh2 = fm(), | |
Nh2 = vm(), | |
Sm = { idleTimeout: 1000, finalTimeout: 30000, heartbeatInterval: 5000 }, | |
zh2 = 'finishReason', | |
cN = [ | |
'heartbeatFailed', | |
'idleTimeout', | |
'documentHidden', | |
'finalTimeout', | |
'externalFinish', | |
'cancelled', | |
] | |
class Y01 extends gh2.SpanRecorder { | |
constructor(I, G, Z, d) { | |
super(d) | |
;(this._pushActivity = I), (this._popActivity = G), (this.transactionSpanId = Z) | |
} | |
add(I) { | |
if (I.spanContext().spanId !== this.transactionSpanId) { | |
let G = I.end | |
if ( | |
((I.end = (...Z) => { | |
return this._popActivity(I.spanContext().spanId), G.apply(I, Z) | |
}), | |
Mm.spanToJSON(I).timestamp === void 0) | |
) | |
this._pushActivity(I.spanContext().spanId) | |
} | |
super.add(I) | |
} | |
} | |
class JR1 extends Nh2.Transaction { | |
constructor( | |
I, | |
G, | |
Z = Sm.idleTimeout, | |
d = Sm.finalTimeout, | |
W = Sm.heartbeatInterval, | |
w = !1, | |
B = !1, | |
) { | |
super(I, G) | |
if ( | |
((this._idleHub = G), | |
(this._idleTimeout = Z), | |
(this._finalTimeout = d), | |
(this._heartbeatInterval = W), | |
(this._onScope = w), | |
(this.activities = {}), | |
(this._heartbeatCounter = 0), | |
(this._finished = !1), | |
(this._idleTimeoutCanceledPermanently = !1), | |
(this._beforeFinishCallbacks = []), | |
(this._finishReason = cN[4]), | |
(this._autoFinishAllowed = !B), | |
w) | |
) | |
nI.DEBUG_BUILD && | |
f7.logger.log(`Setting idle transaction on scope. Span ID: ${this.spanContext().spanId}`), | |
G.getScope().setSpan(this) | |
if (!B) this._restartIdleTimeout() | |
setTimeout(() => { | |
if (!this._finished) | |
this.setStatus('deadline_exceeded'), (this._finishReason = cN[3]), this.end() | |
}, this._finalTimeout) | |
} | |
end(I) { | |
let G = Mm.spanTimeInputToSeconds(I) | |
if (((this._finished = !0), (this.activities = {}), this.op === 'ui.action.click')) | |
this.setAttribute(zh2, this._finishReason) | |
if (this.spanRecorder) { | |
nI.DEBUG_BUILD && | |
f7.logger.log( | |
'[Tracing] finishing IdleTransaction', | |
new Date(G * 1000).toISOString(), | |
this.op, | |
) | |
for (let Z of this._beforeFinishCallbacks) Z(this, G) | |
;(this.spanRecorder.spans = this.spanRecorder.spans.filter((Z) => { | |
if (Z.spanContext().spanId === this.spanContext().spanId) return !0 | |
if (!Mm.spanToJSON(Z).timestamp) | |
Z.setStatus('cancelled'), | |
Z.end(G), | |
nI.DEBUG_BUILD && | |
f7.logger.log( | |
'[Tracing] cancelling span since transaction ended early', | |
JSON.stringify(Z, void 0, 2), | |
) | |
let { start_timestamp: d, timestamp: W } = Mm.spanToJSON(Z), | |
w = d && d < G, | |
B = (this._finalTimeout + this._idleTimeout) / 1000, | |
C = W && d && W - d < B | |
if (nI.DEBUG_BUILD) { | |
let V = JSON.stringify(Z, void 0, 2) | |
if (!w) | |
f7.logger.log( | |
'[Tracing] discarding Span since it happened after Transaction was finished', | |
V, | |
) | |
else if (!C) | |
f7.logger.log( | |
'[Tracing] discarding Span since it finished after Transaction final timeout', | |
V, | |
) | |
} | |
return w && C | |
})), | |
nI.DEBUG_BUILD && f7.logger.log('[Tracing] flushing IdleTransaction') | |
} else nI.DEBUG_BUILD && f7.logger.log('[Tracing] No active IdleTransaction') | |
if (this._onScope) { | |
let Z = this._idleHub.getScope() | |
if (Z.getTransaction() === this) Z.setSpan(void 0) | |
} | |
return super.end(I) | |
} | |
registerBeforeFinishCallback(I) { | |
this._beforeFinishCallbacks.push(I) | |
} | |
initSpanRecorder(I) { | |
if (!this.spanRecorder) { | |
let G = (d) => { | |
if (this._finished) return | |
this._pushActivity(d) | |
}, | |
Z = (d) => { | |
if (this._finished) return | |
this._popActivity(d) | |
} | |
;(this.spanRecorder = new Y01(G, Z, this.spanContext().spanId, I)), | |
nI.DEBUG_BUILD && f7.logger.log('Starting heartbeat'), | |
this._pingHeartbeat() | |
} | |
this.spanRecorder.add(this) | |
} | |
cancelIdleTimeout(I, { restartOnChildSpanChange: G } = { restartOnChildSpanChange: !0 }) { | |
if (((this._idleTimeoutCanceledPermanently = G === !1), this._idleTimeoutID)) { | |
if ( | |
(clearTimeout(this._idleTimeoutID), | |
(this._idleTimeoutID = void 0), | |
Object.keys(this.activities).length === 0 && this._idleTimeoutCanceledPermanently) | |
) | |
(this._finishReason = cN[5]), this.end(I) | |
} | |
} | |
setFinishReason(I) { | |
this._finishReason = I | |
} | |
sendAutoFinishSignal() { | |
if (!this._autoFinishAllowed) | |
nI.DEBUG_BUILD && f7.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 = cN[1]), this.end(I) | |
}, this._idleTimeout)) | |
} | |
_pushActivity(I) { | |
this.cancelIdleTimeout(void 0, { | |
restartOnChildSpanChange: !this._idleTimeoutCanceledPermanently, | |
}), | |
nI.DEBUG_BUILD && f7.logger.log(`[Tracing] pushActivity: ${I}`), | |
(this.activities[I] = !0), | |
nI.DEBUG_BUILD && | |
f7.logger.log('[Tracing] new activities count', Object.keys(this.activities).length) | |
} | |
_popActivity(I) { | |
if (this.activities[I]) | |
nI.DEBUG_BUILD && f7.logger.log(`[Tracing] popActivity ${I}`), | |
delete this.activities[I], | |
nI.DEBUG_BUILD && | |
f7.logger.log('[Tracing] new activities count', Object.keys(this.activities).length) | |
if (Object.keys(this.activities).length === 0) { | |
let G = f7.timestampInSeconds() | |
if (this._idleTimeoutCanceledPermanently) { | |
if (this._autoFinishAllowed) (this._finishReason = cN[5]), this.end(G) | |
} else this._restartIdleTimeout(G + 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) | |
nI.DEBUG_BUILD && | |
f7.logger.log('[Tracing] Transaction finished because of no change for 3 heart beats'), | |
this.setStatus('deadline_exceeded'), | |
(this._finishReason = cN[0]), | |
this.end() | |
} else this._pingHeartbeat() | |
} | |
_pingHeartbeat() { | |
nI.DEBUG_BUILD && | |
f7.logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`), | |
setTimeout(() => { | |
this._beat() | |
}, this._heartbeatInterval) | |
} | |
} | |
KR1.IdleTransaction = JR1 | |
KR1.IdleTransactionSpanRecorder = Y01 | |
KR1.TRACING_DEFAULTS = Sm | |
}) | |
var D01 = _((NR1) => { | |
Object.defineProperty(NR1, '__esModule', { value: !0 }) | |
var lF = X0(), | |
pN = Q6(), | |
Lm = gv(), | |
fh2 = Nm(), | |
Rh2 = iI() | |
function Eh2(I, G, Z) { | |
if (!fh2.hasTracingEnabled(G)) return (I.sampled = !1), I | |
if (I.sampled !== void 0) | |
return I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(I.sampled)), I | |
let d | |
if (typeof G.tracesSampler === 'function') | |
(d = G.tracesSampler(Z)), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(d)) | |
else if (Z.parentSampled !== void 0) d = Z.parentSampled | |
else if (typeof G.tracesSampleRate !== 'undefined') | |
(d = G.tracesSampleRate), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, Number(d)) | |
else (d = 1), I.setAttribute(Lm.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, d) | |
if (!gR1(d)) | |
return ( | |
pN.DEBUG_BUILD && | |
lF.logger.warn('[Tracing] Discarding transaction because of invalid sample rate.'), | |
(I.sampled = !1), | |
I | |
) | |
if (!d) | |
return ( | |
pN.DEBUG_BUILD && | |
lF.logger.log( | |
`[Tracing] Discarding transaction because ${typeof G.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() < d), !I.sampled)) | |
return ( | |
pN.DEBUG_BUILD && | |
lF.logger.log( | |
`[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(d)})`, | |
), | |
I | |
) | |
return ( | |
pN.DEBUG_BUILD && | |
lF.logger.log(`[Tracing] starting ${I.op} transaction - ${Rh2.spanToJSON(I).description}`), | |
I | |
) | |
} | |
function gR1(I) { | |
if (lF.isNaN(I) || !(typeof I === 'number' || typeof I === 'boolean')) | |
return ( | |
pN.DEBUG_BUILD && | |
lF.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 ( | |
pN.DEBUG_BUILD && | |
lF.logger.warn( | |
`[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got ${I}.`, | |
), | |
!1 | |
) | |
return !0 | |
} | |
NR1.isValidSampleRate = gR1 | |
NR1.sampleTransaction = Eh2 | |
}) | |
var H01 = _((QR1) => { | |
Object.defineProperty(QR1, '__esModule', { value: !0 }) | |
var Sh2 = X0(), | |
Lh2 = Q6(), | |
$h2 = HB(), | |
yh2 = iI(), | |
Ph2 = gm(), | |
Oh2 = _01(), | |
zR1 = D01(), | |
uh2 = vm() | |
function Th2() { | |
let G = this.getScope().getSpan() | |
return G ? { 'sentry-trace': yh2.spanToTraceHeader(G) } : {} | |
} | |
function mh2(I, G) { | |
let Z = this.getClient(), | |
d = (Z && Z.getOptions()) || {}, | |
W = d.instrumenter || 'sentry', | |
w = I.instrumenter || 'sentry' | |
if (W !== w) | |
Lh2.DEBUG_BUILD && | |
Sh2.logger | |
.error(`A transaction was started with instrumenter=\`${w}\`, but the SDK is configured with the \`${W}\` instrumenter. | |
The transaction will not be sampled. Please use the ${W} instrumentation to start transactions.`), | |
(I.sampled = !1) | |
let B = new uh2.Transaction(I, this) | |
if ( | |
((B = zR1.sampleTransaction(B, d, { | |
name: I.name, | |
parentSampled: I.parentSampled, | |
transactionContext: I, | |
attributes: { ...I.data, ...I.attributes }, | |
...G, | |
})), | |
B.isRecording()) | |
) | |
B.initSpanRecorder(d._experiments && d._experiments.maxSpans) | |
if (Z && Z.emit) Z.emit('startTransaction', B) | |
return B | |
} | |
function bh2(I, G, Z, d, W, w, B, C = !1) { | |
let V = I.getClient(), | |
A = (V && V.getOptions()) || {}, | |
X = new Oh2.IdleTransaction(G, I, Z, d, B, W, C) | |
if ( | |
((X = zR1.sampleTransaction(X, A, { | |
name: G.name, | |
parentSampled: G.parentSampled, | |
transactionContext: G, | |
attributes: { ...G.data, ...G.attributes }, | |
...w, | |
})), | |
X.isRecording()) | |
) | |
X.initSpanRecorder(A._experiments && A._experiments.maxSpans) | |
if (V && V.emit) V.emit('startTransaction', X) | |
return X | |
} | |
function lh2() { | |
let I = $h2.getMainCarrier() | |
if (!I.__SENTRY__) return | |
if ( | |
((I.__SENTRY__.extensions = I.__SENTRY__.extensions || {}), | |
!I.__SENTRY__.extensions.startTransaction) | |
) | |
I.__SENTRY__.extensions.startTransaction = mh2 | |
if (!I.__SENTRY__.extensions.traceHeaders) I.__SENTRY__.extensions.traceHeaders = Th2 | |
Ph2.registerErrorInstrumentation() | |
} | |
QR1.addTracingExtensions = lh2 | |
QR1.startIdleTransaction = bh2 | |
}) | |
var UR1 = _((qR1) => { | |
Object.defineProperty(qR1, '__esModule', { value: !0 }) | |
var hh2 = Km() | |
function xh2(I, G, Z) { | |
let d = hh2.getActiveTransaction() | |
if (d) d.setMeasurement(I, G, Z) | |
} | |
qR1.setMeasurement = xh2 | |
}) | |
var F01 = _((fR1) => { | |
Object.defineProperty(fR1, '__esModule', { value: !0 }) | |
var iN = X0() | |
function ph2(I, G) { | |
if (!G) return I | |
return ( | |
(I.sdk = I.sdk || {}), | |
(I.sdk.name = I.sdk.name || G.name), | |
(I.sdk.version = I.sdk.version || G.version), | |
(I.sdk.integrations = [...(I.sdk.integrations || []), ...(G.integrations || [])]), | |
(I.sdk.packages = [...(I.sdk.packages || []), ...(G.packages || [])]), | |
I | |
) | |
} | |
function ih2(I, G, Z, d) { | |
let W = iN.getSdkMetadataForEnvelopeHeader(Z), | |
w = { | |
sent_at: new Date().toISOString(), | |
...(W && { sdk: W }), | |
...(!!d && G && { dsn: iN.dsnToString(G) }), | |
}, | |
B = 'aggregates' in I ? [{ type: 'sessions' }, I] : [{ type: 'session' }, I.toJSON()] | |
return iN.createEnvelope(w, [B]) | |
} | |
function nh2(I, G, Z, d) { | |
let W = iN.getSdkMetadataForEnvelopeHeader(Z), | |
w = I.type && I.type !== 'replay_event' ? I.type : 'event' | |
ph2(I, Z && Z.sdk) | |
let B = iN.createEventEnvelopeHeaders(I, W, d, G) | |
delete I.sdkProcessingMetadata | |
let C = [{ type: w }, I] | |
return iN.createEnvelope(B, [C]) | |
} | |
fR1.createEventEnvelope = nh2 | |
fR1.createSessionEnvelope = ih2 | |
}) | |
var J01 = _((ER1) => { | |
Object.defineProperty(ER1, '__esModule', { value: !0 }) | |
var sh2 = X0(), | |
oh2 = tZ() | |
class RR1 { | |
constructor(I, G) { | |
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 = G | |
} | |
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((Z) => { | |
return this._pendingAggregates[parseInt(Z)] | |
}), | |
G = { attrs: this._sessionAttrs, aggregates: I } | |
return sh2.dropUndefinedKeys(G) | |
} | |
close() { | |
clearInterval(this._intervalId), (this._isEnabled = !1), this.flush() | |
} | |
incrementSessionStatusCount() { | |
if (!this._isEnabled) return | |
let I = oh2.getCurrentScope(), | |
G = I.getRequestSession() | |
if (G && G.status) | |
this._incrementSessionStatusCount(G.status, new Date()), I.setRequestSession(void 0) | |
} | |
_incrementSessionStatusCount(I, G) { | |
let Z = new Date(G).setSeconds(0, 0) | |
this._pendingAggregates[Z] = this._pendingAggregates[Z] || {} | |
let d = this._pendingAggregates[Z] | |
if (!d.started) d.started = new Date(Z).toISOString() | |
switch (I) { | |
case 'errored': | |
return (d.errored = (d.errored || 0) + 1), d.errored | |
case 'ok': | |
return (d.exited = (d.exited || 0) + 1), d.exited | |
default: | |
return (d.crashed = (d.crashed || 0) + 1), d.crashed | |
} | |
} | |
} | |
ER1.SessionFlusher = RR1 | |
}) | |
var $m = _((MR1) => { | |
Object.defineProperty(MR1, '__esModule', { value: !0 }) | |
var K01 = X0(), | |
th2 = '7' | |
function vR1(I) { | |
let G = I.protocol ? `${I.protocol}:` : '', | |
Z = I.port ? `:${I.port}` : '' | |
return `${G}//${I.host}${Z}${I.path ? `/${I.path}` : ''}/api/` | |
} | |
function Ix2(I) { | |
return `${vR1(I)}${I.projectId}/envelope/` | |
} | |
function Gx2(I, G) { | |
return K01.urlEncode({ | |
sentry_key: I.publicKey, | |
sentry_version: th2, | |
...(G && { sentry_client: `${G.name}/${G.version}` }), | |
}) | |
} | |
function Zx2(I, G = {}) { | |
let Z = typeof G === 'string' ? G : G.tunnel, | |
d = typeof G === 'string' || !G._metadata ? void 0 : G._metadata.sdk | |
return Z ? Z : `${Ix2(I)}?${Gx2(I, d)}` | |
} | |
function dx2(I, G) { | |
let Z = K01.makeDsn(I) | |
if (!Z) return '' | |
let d = `${vR1(Z)}embed/error-page/`, | |
W = `dsn=${K01.dsnToString(Z)}` | |
for (let w in G) { | |
if (w === 'dsn') continue | |
if (w === 'onClose') continue | |
if (w === 'user') { | |
let B = G.user | |
if (!B) continue | |
if (B.name) W += `&name=${encodeURIComponent(B.name)}` | |
if (B.email) W += `&email=${encodeURIComponent(B.email)}` | |
} else W += `&${encodeURIComponent(w)}=${encodeURIComponent(G[w])}` | |
} | |
return `${d}?${W}` | |
} | |
MR1.getEnvelopeEndpointWithUrlEncodedAuth = Zx2 | |
MR1.getReportDialogEndpoint = dx2 | |
}) | |
var TV = _((LR1) => { | |
Object.defineProperty(LR1, '__esModule', { value: !0 }) | |
var ym = X0(), | |
g01 = Q6(), | |
Bx2 = Av(), | |
Cx2 = tZ(), | |
Vx2 = HB(), | |
N01 = [] | |
function Ax2(I) { | |
let G = {} | |
return ( | |
I.forEach((Z) => { | |
let { name: d } = Z, | |
W = G[d] | |
if (W && !W.isDefaultInstance && Z.isDefaultInstance) return | |
G[d] = Z | |
}), | |
Object.keys(G).map((Z) => G[Z]) | |
) | |
} | |
function Xx2(I) { | |
let G = I.defaultIntegrations || [], | |
Z = I.integrations | |
G.forEach((B) => { | |
B.isDefaultInstance = !0 | |
}) | |
let d | |
if (Array.isArray(Z)) d = [...G, ...Z] | |
else if (typeof Z === 'function') d = ym.arrayify(Z(G)) | |
else d = G | |
let W = Ax2(d), | |
w = Hx2(W, (B) => B.name === 'Debug') | |
if (w !== -1) { | |
let [B] = W.splice(w, 1) | |
W.push(B) | |
} | |
return W | |
} | |
function Yx2(I, G) { | |
let Z = {} | |
return ( | |
G.forEach((d) => { | |
if (d) SR1(I, d, Z) | |
}), | |
Z | |
) | |
} | |
function _x2(I, G) { | |
for (let Z of G) if (Z && Z.afterAllSetup) Z.afterAllSetup(I) | |
} | |
function SR1(I, G, Z) { | |
if (Z[G.name]) { | |
g01.DEBUG_BUILD && | |
ym.logger.log(`Integration skipped because it was already installed: ${G.name}`) | |
return | |
} | |
if (((Z[G.name] = G), N01.indexOf(G.name) === -1)) | |
G.setupOnce(Bx2.addGlobalEventProcessor, Vx2.getCurrentHub), N01.push(G.name) | |
if (G.setup && typeof G.setup === 'function') G.setup(I) | |
if (I.on && typeof G.preprocessEvent === 'function') { | |
let d = G.preprocessEvent.bind(G) | |
I.on('preprocessEvent', (W, w) => d(W, w, I)) | |
} | |
if (I.addEventProcessor && typeof G.processEvent === 'function') { | |
let d = G.processEvent.bind(G), | |
W = Object.assign((w, B) => d(w, B, I), { id: G.name }) | |
I.addEventProcessor(W) | |
} | |
g01.DEBUG_BUILD && ym.logger.log(`Integration installed: ${G.name}`) | |
} | |
function Dx2(I) { | |
let G = Cx2.getClient() | |
if (!G || !G.addIntegration) { | |
g01.DEBUG_BUILD && | |
ym.logger.warn(`Cannot add integration "${I.name}" because no SDK Client is available.`) | |
return | |
} | |
G.addIntegration(I) | |
} | |
function Hx2(I, G) { | |
for (let Z = 0; Z < I.length; Z++) if (G(I[Z]) === !0) return Z | |
return -1 | |
} | |
function Fx2(I, G) { | |
return Object.assign( | |
function Z(...d) { | |
return G(...d) | |
}, | |
{ id: I }, | |
) | |
} | |
function Jx2(I) { | |
return I | |
} | |
LR1.addIntegration = Dx2 | |
LR1.afterSetupIntegrations = _x2 | |
LR1.convertIntegrationFnToClass = Fx2 | |
LR1.defineIntegration = Jx2 | |
LR1.getIntegrationsToSetup = Xx2 | |
LR1.installedIntegrations = N01 | |
LR1.setupIntegration = SR1 | |
LR1.setupIntegrations = Yx2 | |
}) | |
var zv = _(($R1) => { | |
Object.defineProperty($R1, '__esModule', { value: !0 }) | |
var Rx2 = X0() | |
function Ex2(I, G, Z, d) { | |
let W = Object.entries(Rx2.dropUndefinedKeys(d)).sort((w, B) => w[0].localeCompare(B[0])) | |
return `${I}${G}${Z}${W}` | |
} | |
function vx2(I) { | |
let G = 0 | |
for (let Z = 0; Z < I.length; Z++) { | |
let d = I.charCodeAt(Z) | |
;(G = (G << 5) - G + d), (G &= G) | |
} | |
return G >>> 0 | |
} | |
function Mx2(I) { | |
let G = '' | |
for (let Z of I) { | |
let d = Object.entries(Z.tags), | |
W = d.length > 0 ? `|#${d.map(([w, B]) => `${w}:${B}`).join(',')}` : '' | |
G += `${Z.name}@${Z.unit}:${Z.metric}|${Z.metricType}${W}|T${Z.timestamp} | |
` | |
} | |
return G | |
} | |
function Sx2(I) { | |
return I.replace(/[^\w]+/gi, '_') | |
} | |
function Lx2(I) { | |
return I.replace(/[^\w\-.]+/gi, '_') | |
} | |
function $x2(I) { | |
return I.replace(/[^\w\-./]+/gi, '') | |
} | |
var yx2 = [ | |
[ | |
` | |
`, | |
'\\n', | |
], | |
['\r', '\\r'], | |
['\t', '\\t'], | |
['\\', '\\\\'], | |
['|', '\\u{7c}'], | |
[',', '\\u{2c}'], | |
] | |
function Px2(I) { | |
for (let [G, Z] of yx2) if (I === G) return Z | |
return I | |
} | |
function Ox2(I) { | |
return [...I].reduce((G, Z) => G + Px2(Z), '') | |
} | |
function ux2(I) { | |
let G = {} | |
for (let Z in I) | |
if (Object.prototype.hasOwnProperty.call(I, Z)) { | |
let d = $x2(Z) | |
G[d] = Ox2(String(I[Z])) | |
} | |
return G | |
} | |
$R1.getBucketKey = Ex2 | |
$R1.sanitizeMetricKey = Lx2 | |
$R1.sanitizeTags = ux2 | |
$R1.sanitizeUnit = Sx2 | |
$R1.serializeMetricBuckets = Mx2 | |
$R1.simpleHash = vx2 | |
}) | |
var OR1 = _((PR1) => { | |
Object.defineProperty(PR1, '__esModule', { value: !0 }) | |
var yR1 = X0(), | |
hx2 = zv() | |
function xx2(I, G, Z, d) { | |
let W = { sent_at: new Date().toISOString() } | |
if (Z && Z.sdk) W.sdk = { name: Z.sdk.name, version: Z.sdk.version } | |
if (!!d && G) W.dsn = yR1.dsnToString(G) | |
let w = cx2(I) | |
return yR1.createEnvelope(W, [w]) | |
} | |
function cx2(I) { | |
let G = hx2.serializeMetricBuckets(I) | |
return [{ type: 'statsd', length: G.length }, G] | |
} | |
PR1.createMetricEnvelope = xx2 | |
}) | |
var z01 = _((kR1) => { | |
Object.defineProperty(kR1, '__esModule', { value: !0 }) | |
var M5 = X0(), | |
ix2 = $m(), | |
JB = Q6(), | |
uR1 = F01(), | |
nx2 = tZ(), | |
ax2 = HB(), | |
Pm = TV(), | |
rx2 = OR1(), | |
TR1 = TN(), | |
sx2 = TF(), | |
ox2 = Am(), | |
mR1 = "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 = M5.makeDsn(I.dsn) | |
else JB.DEBUG_BUILD && M5.logger.warn('No DSN provided, client will not send events.') | |
if (this._dsn) { | |
let G = ix2.getEnvelopeEndpointWithUrlEncodedAuth(this._dsn, I) | |
this._transport = I.transport({ | |
tunnel: this._options.tunnel, | |
recordDroppedEvent: this.recordDroppedEvent.bind(this), | |
...I.transportOptions, | |
url: G, | |
}) | |
} | |
} | |
captureException(I, G, Z) { | |
if (M5.checkOrSetAlreadyCaught(I)) { | |
JB.DEBUG_BUILD && M5.logger.log(mR1) | |
return | |
} | |
let d = G && G.event_id | |
return ( | |
this._process( | |
this.eventFromException(I, G) | |
.then((W) => this._captureEvent(W, G, Z)) | |
.then((W) => { | |
d = W | |
}), | |
), | |
d | |
) | |
} | |
captureMessage(I, G, Z, d) { | |
let W = Z && Z.event_id, | |
w = M5.isParameterizedString(I) ? I : String(I), | |
B = M5.isPrimitive(I) ? this.eventFromMessage(w, G, Z) : this.eventFromException(I, Z) | |
return ( | |
this._process( | |
B.then((C) => this._captureEvent(C, Z, d)).then((C) => { | |
W = C | |
}), | |
), | |
W | |
) | |
} | |
captureEvent(I, G, Z) { | |
if (G && G.originalException && M5.checkOrSetAlreadyCaught(G.originalException)) { | |
JB.DEBUG_BUILD && M5.logger.log(mR1) | |
return | |
} | |
let d = G && G.event_id, | |
w = (I.sdkProcessingMetadata || {}).capturedSpanScope | |
return ( | |
this._process( | |
this._captureEvent(I, G, w || Z).then((B) => { | |
d = B | |
}), | |
), | |
d | |
) | |
} | |
captureSession(I) { | |
if (typeof I.release !== 'string') | |
JB.DEBUG_BUILD && | |
M5.logger.warn('Discarded session because of missing or non-string release') | |
else this.sendSession(I), TR1.updateSession(I, { init: !1 }) | |
} | |
getDsn() { | |
return this._dsn | |
} | |
getOptions() { | |
return this._options | |
} | |
getSdkMetadata() { | |
return this._options._metadata | |
} | |
getTransport() { | |
return this._transport | |
} | |
flush(I) { | |
let G = this._transport | |
if (G) { | |
if (this.metricsAggregator) this.metricsAggregator.flush() | |
return this._isClientDoneProcessing(I).then((Z) => { | |
return G.flush(I).then((d) => Z && d) | |
}) | |
} else return M5.resolvedSyncPromise(!0) | |
} | |
close(I) { | |
return this.flush(I).then((G) => { | |
if (((this.getOptions().enabled = !1), this.metricsAggregator)) | |
this.metricsAggregator.close() | |
return G | |
}) | |
} | |
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 (G) { | |
return ( | |
JB.DEBUG_BUILD && | |
M5.logger.warn(`Cannot retrieve integration ${I.id} from the current Client`), | |
null | |
) | |
} | |
} | |
addIntegration(I) { | |
let G = this._integrations[I.name] | |
if ((Pm.setupIntegration(this, I, this._integrations), !G)) | |
Pm.afterSetupIntegrations(this, [I]) | |
} | |
sendEvent(I, G = {}) { | |
this.emit('beforeSendEvent', I, G) | |
let Z = uR1.createEventEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel) | |
for (let W of G.attachments || []) | |
Z = M5.addItemToEnvelope( | |
Z, | |
M5.createAttachmentEnvelopeItem( | |
W, | |
this._options.transportOptions && this._options.transportOptions.textEncoder, | |
), | |
) | |
let d = this._sendEnvelope(Z) | |
if (d) d.then((W) => this.emit('afterSendEvent', I, W), null) | |
} | |
sendSession(I) { | |
let G = uR1.createSessionEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel) | |
this._sendEnvelope(G) | |
} | |
recordDroppedEvent(I, G, Z) { | |
if (this._options.sendClientReports) { | |
let d = typeof Z === 'number' ? Z : 1, | |
W = `${I}:${G}` | |
JB.DEBUG_BUILD && M5.logger.log(`Recording outcome: "${W}"${d > 1 ? ` (${d} times)` : ''}`), | |
(this._outcomes[W] = (this._outcomes[W] || 0) + d) | |
} | |
} | |
captureAggregateMetrics(I) { | |
JB.DEBUG_BUILD && M5.logger.log(`Flushing aggregated metrics, number of metrics: ${I.length}`) | |
let G = rx2.createMetricEnvelope(I, this._dsn, this._options._metadata, this._options.tunnel) | |
this._sendEnvelope(G) | |
} | |
on(I, G) { | |
if (!this._hooks[I]) this._hooks[I] = [] | |
this._hooks[I].push(G) | |
} | |
emit(I, ...G) { | |
if (this._hooks[I]) this._hooks[I].forEach((Z) => Z(...G)) | |
} | |
_setupIntegrations() { | |
let { integrations: I } = this._options | |
;(this._integrations = Pm.setupIntegrations(this, I)), | |
Pm.afterSetupIntegrations(this, I), | |
(this._integrationsInitialized = !0) | |
} | |
_updateSessionFromEvent(I, G) { | |
let Z = !1, | |
d = !1, | |
W = G.exception && G.exception.values | |
if (W) { | |
d = !0 | |
for (let C of W) { | |
let V = C.mechanism | |
if (V && V.handled === !1) { | |
Z = !0 | |
break | |
} | |
} | |
} | |
let w = I.status === 'ok' | |
if ((w && I.errors === 0) || (w && Z)) | |
TR1.updateSession(I, { | |
...(Z && { status: 'crashed' }), | |
errors: I.errors || Number(d || Z), | |
}), | |
this.captureSession(I) | |
} | |
_isClientDoneProcessing(I) { | |
return new M5.SyncPromise((G) => { | |
let Z = 0, | |
d = 1, | |
W = setInterval(() => { | |
if (this._numProcessing == 0) clearInterval(W), G(!0) | |
else if (((Z += d), I && Z >= I)) clearInterval(W), G(!1) | |
}, d) | |
}) | |
} | |
_isEnabled() { | |
return this.getOptions().enabled !== !1 && this._transport !== void 0 | |
} | |
_prepareEvent(I, G, Z, d = ax2.getIsolationScope()) { | |
let W = this.getOptions(), | |
w = Object.keys(this._integrations) | |
if (!G.integrations && w.length > 0) G.integrations = w | |
return ( | |
this.emit('preprocessEvent', I, G), | |
ox2.prepareEvent(W, I, G, Z, this, d).then((B) => { | |
if (B === null) return B | |
let C = { ...d.getPropagationContext(), ...(Z ? Z.getPropagationContext() : void 0) } | |
if (!(B.contexts && B.contexts.trace) && C) { | |
let { traceId: A, spanId: X, parentSpanId: Y, dsc: H } = C | |
B.contexts = { trace: { trace_id: A, span_id: X, parent_span_id: Y }, ...B.contexts } | |
let J = H ? H : sx2.getDynamicSamplingContextFromClient(A, this, Z) | |
B.sdkProcessingMetadata = { dynamicSamplingContext: J, ...B.sdkProcessingMetadata } | |
} | |
return B | |
}) | |
) | |
} | |
_captureEvent(I, G = {}, Z) { | |
return this._processEvent(I, G, Z).then( | |
(d) => { | |
return d.event_id | |
}, | |
(d) => { | |
if (JB.DEBUG_BUILD) { | |
let W = d | |
if (W.logLevel === 'log') M5.logger.log(W.message) | |
else M5.logger.warn(W) | |
} | |
return | |
}, | |
) | |
} | |
_processEvent(I, G, Z) { | |
let d = this.getOptions(), | |
{ sampleRate: W } = d, | |
w = jR1(I), | |
B = lR1(I), | |
C = I.type || 'error', | |
V = `before send for type \`${C}\`` | |
if (B && typeof W === 'number' && Math.random() > W) | |
return ( | |
this.recordDroppedEvent('sample_rate', 'error', I), | |
M5.rejectedSyncPromise( | |
new M5.SentryError( | |
`Discarding event because it's not included in the random sample (sampling rate = ${W})`, | |
'log', | |
), | |
) | |
) | |
let A = C === 'replay_event' ? 'replay' : C, | |
Y = (I.sdkProcessingMetadata || {}).capturedSpanIsolationScope | |
return this._prepareEvent(I, G, Z, Y) | |
.then((H) => { | |
if (H === null) | |
throw ( | |
(this.recordDroppedEvent('event_processor', A, I), | |
new M5.SentryError('An event processor returned `null`, will not send event.', 'log')) | |
) | |
if (G.data && G.data.__sentry__ === !0) return H | |
let K = tx2(d, H, G) | |
return ex2(K, V) | |
}) | |
.then((H) => { | |
if (H === null) { | |
if ((this.recordDroppedEvent('before_send', A, I), w)) { | |
let z = 1 + (I.spans || []).length | |
this.recordDroppedEvent('before_send', 'span', z) | |
} | |
throw new M5.SentryError(`${V} returned \`null\`, will not send event.`, 'log') | |
} | |
let J = Z && Z.getSession() | |
if (!w && J) this._updateSessionFromEvent(J, H) | |
if (w) { | |
let g = | |
(H.sdkProcessingMetadata && H.sdkProcessingMetadata.spanCountBeforeProcessing) || 0, | |
z = H.spans ? H.spans.length : 0, | |
f = g - z | |
if (f > 0) this.recordDroppedEvent('before_send', 'span', f) | |
} | |
let K = H.transaction_info | |
if (w && K && H.transaction !== I.transaction) | |
H.transaction_info = { ...K, source: 'custom' } | |
return this.sendEvent(H, G), H | |
}) | |
.then(null, (H) => { | |
if (H instanceof M5.SentryError) throw H | |
throw ( | |
(this.captureException(H, { data: { __sentry__: !0 }, originalException: H }), | |
new M5.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. | |
Reason: ${H}`)) | |
) | |
}) | |
} | |
_process(I) { | |
this._numProcessing++, | |
I.then( | |
(G) => { | |
return this._numProcessing--, G | |
}, | |
(G) => { | |
return this._numProcessing--, G | |
}, | |
) | |
} | |
_sendEnvelope(I) { | |
if ((this.emit('beforeEnvelope', I), this._isEnabled() && this._transport)) | |
return this._transport.send(I).then(null, (G) => { | |
JB.DEBUG_BUILD && M5.logger.error('Error while sending event:', G) | |
}) | |
else JB.DEBUG_BUILD && M5.logger.error('Transport disabled') | |
} | |
_clearOutcomes() { | |
let I = this._outcomes | |
return ( | |
(this._outcomes = {}), | |
Object.keys(I).map((G) => { | |
let [Z, d] = G.split(':') | |
return { reason: Z, category: d, quantity: I[G] } | |
}) | |
) | |
} | |
} | |
function ex2(I, G) { | |
let Z = `${G} must return \`null\` or a valid event.` | |
if (M5.isThenable(I)) | |
return I.then( | |
(d) => { | |
if (!M5.isPlainObject(d) && d !== null) throw new M5.SentryError(Z) | |
return d | |
}, | |
(d) => { | |
throw new M5.SentryError(`${G} rejected with ${d}`) | |
}, | |
) | |
else if (!M5.isPlainObject(I) && I !== null) throw new M5.SentryError(Z) | |
return I | |
} | |
function tx2(I, G, Z) { | |
let { beforeSend: d, beforeSendTransaction: W } = I | |
if (lR1(G) && d) return d(G, Z) | |
if (jR1(G) && W) { | |
if (G.spans) { | |
let w = G.spans.length | |
G.sdkProcessingMetadata = { ...G.sdkProcessingMetadata, spanCountBeforeProcessing: w } | |
} | |
return W(G, Z) | |
} | |
return G | |
} | |
function lR1(I) { | |
return I.type === void 0 | |
} | |
function jR1(I) { | |
return I.type === 'transaction' | |
} | |
function Ic2(I) { | |
let G = nx2.getClient() | |
if (!G || !G.addEventProcessor) return | |
G.addEventProcessor(I) | |
} | |
kR1.BaseClient = bR1 | |
kR1.addEventProcessor = Ic2 | |
}) | |
var q01 = _((hR1) => { | |
Object.defineProperty(hR1, '__esModule', { value: !0 }) | |
var Q01 = X0() | |
function dc2(I, G, Z, d, W) { | |
let w = { sent_at: new Date().toISOString() } | |
if (Z && Z.sdk) w.sdk = { name: Z.sdk.name, version: Z.sdk.version } | |
if (!!d && !!W) w.dsn = Q01.dsnToString(W) | |
if (G) w.trace = Q01.dropUndefinedKeys(G) | |
let B = Wc2(I) | |
return Q01.createEnvelope(w, [B]) | |
} | |
function Wc2(I) { | |
return [{ type: 'check_in' }, I] | |
} | |
hR1.createCheckInEnvelope = dc2 | |
}) | |
var Qv = _((xR1) => { | |
Object.defineProperty(xR1, '__esModule', { value: !0 }) | |
var Bc2 = 'c', | |
Cc2 = 'g', | |
Vc2 = 's', | |
Ac2 = 'd', | |
Xc2 = 5000, | |
Yc2 = 1e4, | |
_c2 = 1e4 | |
xR1.COUNTER_METRIC_TYPE = Bc2 | |
xR1.DEFAULT_BROWSER_FLUSH_INTERVAL = Xc2 | |
xR1.DEFAULT_FLUSH_INTERVAL = Yc2 | |
xR1.DISTRIBUTION_METRIC_TYPE = Ac2 | |
xR1.GAUGE_METRIC_TYPE = Cc2 | |
xR1.MAX_WEIGHT = _c2 | |
xR1.SET_METRIC_TYPE = Vc2 | |
}) | |
var v01 = _((cR1) => { | |
Object.defineProperty(cR1, '__esModule', { value: !0 }) | |
var Om = Qv(), | |
zc2 = zv() | |
class U01 { | |
constructor(I) { | |
this._value = I | |
} | |
get weight() { | |
return 1 | |
} | |
add(I) { | |
this._value += I | |
} | |
toString() { | |
return `${this._value}` | |
} | |
} | |
class f01 { | |
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 R01 { | |
constructor(I) { | |
this._value = [I] | |
} | |
get weight() { | |
return this._value.length | |
} | |
add(I) { | |
this._value.push(I) | |
} | |
toString() { | |
return this._value.join(':') | |
} | |
} | |
class E01 { | |
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' ? zc2.simpleHash(I) : I)) | |
.join(':') | |
} | |
} | |
var Qc2 = { | |
[Om.COUNTER_METRIC_TYPE]: U01, | |
[Om.GAUGE_METRIC_TYPE]: f01, | |
[Om.DISTRIBUTION_METRIC_TYPE]: R01, | |
[Om.SET_METRIC_TYPE]: E01, | |
} | |
cR1.CounterMetric = U01 | |
cR1.DistributionMetric = R01 | |
cR1.GaugeMetric = f01 | |
cR1.METRIC_MAP = Qc2 | |
cR1.SetMetric = E01 | |
}) | |
var aR1 = _((nR1) => { | |
Object.defineProperty(nR1, '__esModule', { value: !0 }) | |
var pR1 = X0(), | |
qv = Qv(), | |
vc2 = v01(), | |
Mc2 = Kv(), | |
um = zv() | |
class iR1 { | |
constructor(I) { | |
if ( | |
((this._client = I), | |
(this._buckets = new Map()), | |
(this._bucketsTotalWeight = 0), | |
(this._interval = setInterval(() => this._flush(), qv.DEFAULT_FLUSH_INTERVAL)), | |
this._interval.unref) | |
) | |
this._interval.unref() | |
;(this._flushShift = Math.floor((Math.random() * qv.DEFAULT_FLUSH_INTERVAL) / 1000)), | |
(this._forceFlush = !1) | |
} | |
add(I, G, Z, d = 'none', W = {}, w = pR1.timestampInSeconds()) { | |
let B = Math.floor(w), | |
C = um.sanitizeMetricKey(G), | |
V = um.sanitizeTags(W), | |
A = um.sanitizeUnit(d), | |
X = um.getBucketKey(I, C, A, V), | |
Y = this._buckets.get(X), | |
H = Y && I === qv.SET_METRIC_TYPE ? Y.metric.weight : 0 | |
if (Y) { | |
if ((Y.metric.add(Z), Y.timestamp < B)) Y.timestamp = B | |
} else | |
(Y = { | |
metric: new vc2.METRIC_MAP[I](Z), | |
timestamp: B, | |
metricType: I, | |
name: C, | |
unit: A, | |
tags: V, | |
}), | |
this._buckets.set(X, Y) | |
let J = typeof Z === 'string' ? Y.metric.weight - H : Z | |
if ( | |
(Mc2.updateMetricSummaryOnActiveSpan(I, C, J, A, W, X), | |
(this._bucketsTotalWeight += Y.metric.weight), | |
this._bucketsTotalWeight >= qv.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(pR1.timestampInSeconds()) - | |
qv.DEFAULT_FLUSH_INTERVAL / 1000 - | |
this._flushShift, | |
G = new Map() | |
for (let [Z, d] of this._buckets) | |
if (d.timestamp <= I) G.set(Z, d), (this._bucketsTotalWeight -= d.metric.weight) | |
for (let [Z] of G) this._buckets.delete(Z) | |
this._captureMetrics(G) | |
} | |
_captureMetrics(I) { | |
if (I.size > 0 && this._client.captureAggregateMetrics) { | |
let G = Array.from(I).map(([, Z]) => Z) | |
this._client.captureAggregateMetrics(G) | |
} | |
} | |
} | |
nR1.MetricsAggregator = iR1 | |
}) | |
var eR1 = _((oR1) => { | |
Object.defineProperty(oR1, '__esModule', { value: !0 }) | |
var mV = X0(), | |
Lc2 = z01(), | |
$c2 = q01(), | |
Tm = Q6(), | |
yc2 = tZ(), | |
Pc2 = aR1(), | |
Oc2 = J01(), | |
uc2 = H01(), | |
Tc2 = iI(), | |
mc2 = mN() | |
jN() | |
var rR1 = TF() | |
class sR1 extends Lc2.BaseClient { | |
constructor(I) { | |
uc2.addTracingExtensions() | |
super(I) | |
if (I._experiments && I._experiments.metricsAggregator) | |
this.metricsAggregator = new Pc2.MetricsAggregator(this) | |
} | |
eventFromException(I, G) { | |
return mV.resolvedSyncPromise( | |
mV.eventFromUnknownInput(yc2.getClient(), this._options.stackParser, I, G), | |
) | |
} | |
eventFromMessage(I, G = 'info', Z) { | |
return mV.resolvedSyncPromise( | |
mV.eventFromMessage(this._options.stackParser, I, G, Z, this._options.attachStacktrace), | |
) | |
} | |
captureException(I, G, Z) { | |
if (this._options.autoSessionTracking && this._sessionFlusher && Z) { | |
let d = Z.getRequestSession() | |
if (d && d.status === 'ok') d.status = 'errored' | |
} | |
return super.captureException(I, G, Z) | |
} | |
captureEvent(I, G, Z) { | |
if (this._options.autoSessionTracking && this._sessionFlusher && Z) { | |
if ( | |
(I.type || 'exception') === 'exception' && | |
I.exception && | |
I.exception.values && | |
I.exception.values.length > 0 | |
) { | |
let w = Z.getRequestSession() | |
if (w && w.status === 'ok') w.status = 'errored' | |
} | |
} | |
return super.captureEvent(I, G, Z) | |
} | |
close(I) { | |
if (this._sessionFlusher) this._sessionFlusher.close() | |
return super.close(I) | |
} | |
initSessionFlusher() { | |
let { release: I, environment: G } = this._options | |
if (!I) | |
Tm.DEBUG_BUILD && | |
mV.logger.warn( | |
'Cannot initialise an instance of SessionFlusher if no release is provided!', | |
) | |
else this._sessionFlusher = new Oc2.SessionFlusher(this, { release: I, environment: G }) | |
} | |
captureCheckIn(I, G, Z) { | |
let d = 'checkInId' in I && I.checkInId ? I.checkInId : mV.uuid4() | |
if (!this._isEnabled()) | |
return Tm.DEBUG_BUILD && mV.logger.warn('SDK not enabled, will not capture checkin.'), d | |
let W = this.getOptions(), | |
{ release: w, environment: B, tunnel: C } = W, | |
V = { | |
check_in_id: d, | |
monitor_slug: I.monitorSlug, | |
status: I.status, | |
release: w, | |
environment: B, | |
} | |
if ('duration' in I) V.duration = I.duration | |
if (G) | |
V.monitor_config = { | |
schedule: G.schedule, | |
checkin_margin: G.checkinMargin, | |
max_runtime: G.maxRuntime, | |
timezone: G.timezone, | |
} | |
let [A, X] = this._getTraceInfoFromScope(Z) | |
if (X) V.contexts = { trace: X } | |
let Y = $c2.createCheckInEnvelope(V, A, this.getSdkMetadata(), C, this.getDsn()) | |
return ( | |
Tm.DEBUG_BUILD && mV.logger.info('Sending checkin:', I.monitorSlug, I.status), | |
this._sendEnvelope(Y), | |
d | |
) | |
} | |
_captureRequestSession() { | |
if (!this._sessionFlusher) | |
Tm.DEBUG_BUILD && | |
mV.logger.warn( | |
'Discarded request mode session because autoSessionTracking option was disabled', | |
) | |
else this._sessionFlusher.incrementSessionStatusCount() | |
} | |
_prepareEvent(I, G, Z, d) { | |
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, G, Z, d) | |
} | |
_getTraceInfoFromScope(I) { | |
if (!I) return [void 0, void 0] | |
let G = I.getSpan() | |
if (G) | |
return [ | |
mc2.getRootSpan(G) ? rR1.getDynamicSamplingContextFromSpan(G) : void 0, | |
Tc2.spanToTraceContext(G), | |
] | |
let { traceId: Z, spanId: d, parentSpanId: W, dsc: w } = I.getPropagationContext(), | |
B = { trace_id: Z, span_id: d, parent_span_id: W } | |
if (w) return [w, B] | |
return [rR1.getDynamicSamplingContextFromClient(Z, this, I), B] | |
} | |
} | |
oR1.ServerRuntimeClient = sR1 | |
}) | |
var ZE1 = _((GE1) => { | |
Object.defineProperty(GE1, '__esModule', { value: !0 }) | |
var tR1 = X0(), | |
lc2 = Q6(), | |
jc2 = tZ(), | |
kc2 = HB() | |
function hc2(I, G) { | |
if (G.debug === !0) | |
if (lc2.DEBUG_BUILD) tR1.logger.enable() | |
else | |
tR1.consoleSandbox(() => { | |
console.warn( | |
'[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.', | |
) | |
}) | |
jc2.getCurrentScope().update(G.initialScope) | |
let d = new I(G) | |
IE1(d), xc2(d) | |
} | |
function IE1(I) { | |
let Z = kc2.getCurrentHub().getStackTop() | |
;(Z.client = I), Z.scope.setClient(I) | |
} | |
function xc2(I) { | |
if (I.init) I.init() | |
else if (I.setupIntegrations) I.setupIntegrations() | |
} | |
GE1.initAndBind = hc2 | |
GE1.setCurrentClient = IE1 | |
}) | |
var CE1 = _((BE1) => { | |
Object.defineProperty(BE1, '__esModule', { value: !0 }) | |
var aI = X0(), | |
dE1 = Q6(), | |
wE1 = 30 | |
function ic2(I, G, Z = aI.makePromiseBuffer(I.bufferSize || wE1)) { | |
let d = {}, | |
W = (B) => Z.drain(B) | |
function w(B) { | |
let C = [] | |
if ( | |
(aI.forEachEnvelopeItem(B, (Y, H) => { | |
let J = aI.envelopeItemTypeToDataCategory(H) | |
if (aI.isRateLimited(d, J)) { | |
let K = WE1(Y, H) | |
I.recordDroppedEvent('ratelimit_backoff', J, K) | |
} else C.push(Y) | |
}), | |
C.length === 0) | |
) | |
return aI.resolvedSyncPromise() | |
let V = aI.createEnvelope(B[0], C), | |
A = (Y) => { | |
aI.forEachEnvelopeItem(V, (H, J) => { | |
let K = WE1(H, J) | |
I.recordDroppedEvent(Y, aI.envelopeItemTypeToDataCategory(J), K) | |
}) | |
}, | |
X = () => | |
G({ body: aI.serializeEnvelope(V, I.textEncoder) }).then( | |
(Y) => { | |
if (Y.statusCode !== void 0 && (Y.statusCode < 200 || Y.statusCode >= 300)) | |
dE1.DEBUG_BUILD && | |
aI.logger.warn(`Sentry responded with status code ${Y.statusCode} to sent event.`) | |
return (d = aI.updateRateLimits(d, Y)), Y | |
}, | |
(Y) => { | |
throw (A('network_error'), Y) | |
}, | |
) | |
return Z.add(X).then( | |
(Y) => Y, | |
(Y) => { | |
if (Y instanceof aI.SentryError) | |
return ( | |
dE1.DEBUG_BUILD && aI.logger.error('Skipped sending event because buffer is full.'), | |
A('queue_overflow'), | |
aI.resolvedSyncPromise() | |
) | |
else throw Y | |
}, | |
) | |
} | |
return (w.__sentry__baseTransport__ = !0), { send: w, flush: W } | |
} | |
function WE1(I, G) { | |
if (G !== 'event' && G !== 'transaction') return | |
return Array.isArray(I) ? I[1] : void 0 | |
} | |
BE1.DEFAULT_TRANSPORT_BUFFER_SIZE = wE1 | |
BE1.createTransport = ic2 | |
}) | |
var XE1 = _((AE1) => { | |
Object.defineProperty(AE1, '__esModule', { value: !0 }) | |
var S01 = X0(), | |
rc2 = Q6(), | |
VE1 = 100, | |
L01 = 5000, | |
sc2 = 3600000 | |
function M01(I, G) { | |
rc2.DEBUG_BUILD && S01.logger.info(`[Offline]: ${I}`, G) | |
} | |
function oc2(I) { | |
return (G) => { | |
let Z = I(G), | |
d = G.createStore ? G.createStore(G) : void 0, | |
W = L01, | |
w | |
function B(X, Y, H) { | |
if (S01.envelopeContainsItemType(X, ['replay_event', 'replay_recording', 'client_report'])) | |
return !1 | |
if (G.shouldStore) return G.shouldStore(X, Y, H) | |
return !0 | |
} | |
function C(X) { | |
if (!d) return | |
if (w) clearTimeout(w) | |
if ( | |
((w = setTimeout(async () => { | |
w = void 0 | |
let Y = await d.pop() | |
if (Y) | |
M01('Attempting to send previously queued event'), | |
A(Y).catch((H) => { | |
M01('Failed to retry sending', H) | |
}) | |
}, X)), | |
typeof w !== 'number' && w.unref) | |
) | |
w.unref() | |
} | |
function V() { | |
if (w) return | |
C(W), (W = Math.min(W * 2, sc2)) | |
} | |
async function A(X) { | |
try { | |
let Y = await Z.send(X), | |
H = VE1 | |
if (Y) { | |
if (Y.headers && Y.headers['retry-after']) | |
H = S01.parseRetryAfterHeader(Y.headers['retry-after']) | |
else if ((Y.statusCode || 0) >= 400) return Y | |
} | |
return C(H), (W = L01), Y | |
} catch (Y) { | |
if (d && (await B(X, Y, W))) | |
return await d.insert(X), V(), M01('Error sending. Event queued', Y), {} | |
else throw Y | |
} | |
} | |
if (G.flushAtStartup) V() | |
return { send: A, flush: (X) => Z.flush(X) } | |
} | |
} | |
AE1.MIN_DELAY = VE1 | |
AE1.START_DELAY = L01 | |
AE1.makeOfflineTransport = oc2 | |
}) | |
var _E1 = _((YE1) => { | |
Object.defineProperty(YE1, '__esModule', { value: !0 }) | |
var $01 = X0(), | |
Gp2 = $m() | |
function y01(I, G) { | |
let Z | |
return ( | |
$01.forEachEnvelopeItem(I, (d, W) => { | |
if (G.includes(W)) Z = Array.isArray(d) ? d[1] : void 0 | |
return !!Z | |
}), | |
Z | |
) | |
} | |
function Zp2(I, G) { | |
return (Z) => { | |
let d = I(Z) | |
return { | |
...d, | |
send: async (W) => { | |
let w = y01(W, ['event', 'transaction', 'profile', 'replay_event']) | |
if (w) w.release = G | |
return d.send(W) | |
}, | |
} | |
} | |
} | |
function dp2(I, G) { | |
return $01.createEnvelope(G ? { ...I[0], dsn: G } : I[0], I[1]) | |
} | |
function Wp2(I, G) { | |
return (Z) => { | |
let d = I(Z), | |
W = new Map() | |
function w(V, A) { | |
let X = A ? `${V}:${A}` : V, | |
Y = W.get(X) | |
if (!Y) { | |
let H = $01.dsnFromString(V) | |
if (!H) return | |
let J = Gp2.getEnvelopeEndpointWithUrlEncodedAuth(H, Z.tunnel) | |
;(Y = A ? Zp2(I, A)({ ...Z, url: J }) : I({ ...Z, url: J })), W.set(X, Y) | |
} | |
return [V, Y] | |
} | |
async function B(V) { | |
function A(H) { | |
let J = H && H.length ? H : ['event'] | |
return y01(V, J) | |
} | |
let X = G({ envelope: V, getEvent: A }) | |
.map((H) => { | |
if (typeof H === 'string') return w(H, void 0) | |
else return w(H.dsn, H.release) | |
}) | |
.filter((H) => !!H) | |
if (X.length === 0) X.push(['', d]) | |
return (await Promise.all(X.map(([H, J]) => J.send(dp2(V, H)))))[0] | |
} | |
async function C(V) { | |
let A = [await d.flush(V)] | |
for (let [, X] of W) A.push(await X.flush(V)) | |
return A.every((X) => X) | |
} | |
return { send: B, flush: C } | |
} | |
} | |
YE1.eventFromEnvelope = y01 | |
YE1.makeMultiplexedTransport = Wp2 | |
}) | |
var FE1 = _((HE1) => { | |
Object.defineProperty(HE1, '__esModule', { value: !0 }) | |
var DE1 = X0() | |
function Cp2(I, G) { | |
let Z = { sent_at: new Date().toISOString() } | |
if (G) Z.dsn = DE1.dsnToString(G) | |
let d = I.map(Vp2) | |
return DE1.createEnvelope(Z, d) | |
} | |
function Vp2(I) { | |
return [{ type: 'span' }, I] | |
} | |
HE1.createSpanEnvelope = Cp2 | |
}) | |
var gE1 = _((KE1) => { | |
Object.defineProperty(KE1, '__esModule', { value: !0 }) | |
function Xp2(I, G) { | |
let Z = G && Dp2(G) ? G.getClient() : G, | |
d = Z && Z.getDsn(), | |
W = Z && Z.getOptions().tunnel | |
return _p2(I, d) || Yp2(I, W) | |
} | |
function Yp2(I, G) { | |
if (!G) return !1 | |
return JE1(I) === JE1(G) | |
} | |
function _p2(I, G) { | |
return G ? I.includes(G.host) : !1 | |
} | |
function JE1(I) { | |
return I[I.length - 1] === '/' ? I.slice(0, -1) : I | |
} | |
function Dp2(I) { | |
return I.getClient !== void 0 | |
} | |
KE1.isSentryRequestUrl = Xp2 | |
}) | |
var zE1 = _((NE1) => { | |
Object.defineProperty(NE1, '__esModule', { value: !0 }) | |
function Fp2(I, ...G) { | |
let Z = new String(String.raw(I, ...G)) | |
return ( | |
(Z.__sentry_template_string__ = I.join('\x00').replace(/%/g, '%%').replace(/\0/g, '%s')), | |
(Z.__sentry_template_values__ = G), | |
Z | |
) | |
} | |
NE1.parameterize = Fp2 | |
}) | |
var UE1 = _((qE1) => { | |
Object.defineProperty(qE1, '__esModule', { value: !0 }) | |
var QE1 = Hm() | |
function Kp2(I, G, Z = [G], d = 'npm') { | |
let W = I._metadata || {} | |
if (!W.sdk) | |
W.sdk = { | |
name: `sentry.javascript.${G}`, | |
packages: Z.map((w) => ({ name: `${d}:@sentry/${w}`, version: QE1.SDK_VERSION })), | |
version: QE1.SDK_VERSION, | |
} | |
I._metadata = W | |
} | |
qE1.applySdkMetadata = Kp2 | |
}) | |
var ME1 = _((vE1) => { | |
Object.defineProperty(vE1, '__esModule', { value: !0 }) | |
var P01 = X0(), | |
RE1 = new Map(), | |
fE1 = new Set() | |
function Np2(I) { | |
if (!P01.GLOBAL_OBJ._sentryModuleMetadata) return | |
for (let G of Object.keys(P01.GLOBAL_OBJ._sentryModuleMetadata)) { | |
let Z = P01.GLOBAL_OBJ._sentryModuleMetadata[G] | |
if (fE1.has(G)) continue | |
fE1.add(G) | |
let d = I(G) | |
for (let W of d.reverse()) | |
if (W.filename) { | |
RE1.set(W.filename, Z) | |
break | |
} | |
} | |
} | |
function EE1(I, G) { | |
return Np2(I), RE1.get(G) | |
} | |
function zp2(I, G) { | |
try { | |
G.exception.values.forEach((Z) => { | |
if (!Z.stacktrace) return | |
for (let d of Z.stacktrace.frames || []) { | |
if (!d.filename) continue | |
let W = EE1(I, d.filename) | |
if (W) d.module_metadata = W | |
} | |
}) | |
} catch (Z) {} | |
} | |
function Qp2(I) { | |
try { | |
I.exception.values.forEach((G) => { | |
if (!G.stacktrace) return | |
for (let Z of G.stacktrace.frames || []) delete Z.module_metadata | |
}) | |
} catch (G) {} | |
} | |
vE1.addMetadataToStackFrames = zp2 | |
vE1.getMetadataForUrl = EE1 | |
vE1.stripMetadataFromStackFrames = Qp2 | |
}) | |
var OE1 = _((PE1) => { | |
Object.defineProperty(PE1, '__esModule', { value: !0 }) | |
var Rp2 = X0(), | |
LE1 = TV(), | |
SE1 = ME1(), | |
$E1 = 'ModuleMetadata', | |
Ep2 = () => { | |
return { | |
name: $E1, | |
setupOnce() {}, | |
setup(I) { | |
if (typeof I.on !== 'function') return | |
I.on('beforeEnvelope', (G) => { | |
Rp2.forEachEnvelopeItem(G, (Z, d) => { | |
if (d === 'event') { | |
let W = Array.isArray(Z) ? Z[1] : void 0 | |
if (W) SE1.stripMetadataFromStackFrames(W), (Z[1] = W) | |
} | |
}) | |
}) | |
}, | |
processEvent(I, G, Z) { | |
let d = Z.getOptions().stackParser | |
return SE1.addMetadataToStackFrames(d, I), I | |
}, | |
} | |
}, | |
yE1 = LE1.defineIntegration(Ep2), | |
vp2 = LE1.convertIntegrationFnToClass($E1, yE1) | |
PE1.ModuleMetadata = vp2 | |
PE1.moduleMetadataIntegration = yE1 | |
}) | |
var jE1 = _((lE1) => { | |
Object.defineProperty(lE1, '__esModule', { value: !0 }) | |
var uE1 = X0(), | |
TE1 = TV(), | |
Lp2 = iI(), | |
O01 = { | |
include: { | |
cookies: !0, | |
data: !0, | |
headers: !0, | |
ip: !1, | |
query_string: !0, | |
url: !0, | |
user: { id: !0, username: !0, email: !0 }, | |
}, | |
transactionNamingScheme: 'methodPath', | |
}, | |
mE1 = 'RequestData', | |
$p2 = (I = {}) => { | |
let G = uE1.addRequestDataToEvent, | |
Z = { | |
...O01, | |
...I, | |
include: { | |
method: !0, | |
...O01.include, | |
...I.include, | |
user: | |
I.include && typeof I.include.user === 'boolean' | |
? I.include.user | |
: { ...O01.include.user, ...(I.include || {}).user }, | |
}, | |
} | |
return { | |
name: mE1, | |
setupOnce() {}, | |
processEvent(d, W, w) { | |
let { transactionNamingScheme: B } = Z, | |
{ sdkProcessingMetadata: C = {} } = d, | |
V = C.request | |
if (!V) return d | |
let A = | |
C.requestDataOptionsFromExpressHandler || | |
C.requestDataOptionsFromGCPWrapper || | |
Pp2(Z), | |
X = G(d, V, A) | |
if (d.type === 'transaction' || B === 'handler') return X | |
let H = V._sentryTransaction | |
if (H) { | |
let J = Lp2.spanToJSON(H).description || '', | |
K = Op2(w) === 'sentry.javascript.nextjs' ? J.startsWith('/api') : B !== 'path', | |
[g] = uE1.extractPathForTransaction(V, { path: !0, method: K, customRoute: J }) | |
X.transaction = g | |
} | |
return X | |
}, | |
} | |
}, | |
bE1 = TE1.defineIntegration($p2), | |
yp2 = TE1.convertIntegrationFnToClass(mE1, bE1) | |
function Pp2(I) { | |
let { | |
transactionNamingScheme: G, | |
include: { ip: Z, user: d, ...W }, | |
} = I, | |
w = [] | |
for (let [C, V] of Object.entries(W)) if (V) w.push(C) | |
let B | |
if (d === void 0) B = !0 | |
else if (typeof d === 'boolean') B = d | |
else { | |
let C = [] | |
for (let [V, A] of Object.entries(d)) if (A) C.push(V) | |
B = C | |
} | |
return { include: { ip: Z, user: B, request: w.length !== 0 ? w : void 0, transaction: G } } | |
} | |
function Op2(I) { | |
try { | |
return I.getOptions()._metadata.sdk.name | |
} catch (G) { | |
return | |
} | |
} | |
lE1.RequestData = yp2 | |
lE1.requestDataIntegration = bE1 | |
}) | |
var u01 = _((cE1) => { | |
Object.defineProperty(cE1, '__esModule', { value: !0 }) | |
var A8 = X0(), | |
jF = Q6(), | |
kE1 = TV(), | |
mp2 = [ | |
/^Script error\.?$/, | |
/^Javascript error: Script error\.? on line 0$/, | |
/^ResizeObserver loop completed with undelivered notifications.$/, | |
/^Cannot redefine property: googletag$/, | |
], | |
bp2 = [ | |
/^.*\/healthcheck$/, | |
/^.*\/healthy$/, | |
/^.*\/live$/, | |
/^.*\/ready$/, | |
/^.*\/heartbeat$/, | |
/^.*\/health$/, | |
/^.*\/healthz$/, | |
], | |
hE1 = 'InboundFilters', | |
lp2 = (I = {}) => { | |
return { | |
name: hE1, | |
setupOnce() {}, | |
processEvent(G, Z, d) { | |
let W = d.getOptions(), | |
w = kp2(I, W) | |
return hp2(G, w) ? null : G | |
}, | |
} | |
}, | |
xE1 = kE1.defineIntegration(lp2), | |
jp2 = kE1.convertIntegrationFnToClass(hE1, xE1) | |
function kp2(I = {}, G = {}) { | |
return { | |
allowUrls: [...(I.allowUrls || []), ...(G.allowUrls || [])], | |
denyUrls: [...(I.denyUrls || []), ...(G.denyUrls || [])], | |
ignoreErrors: [ | |
...(I.ignoreErrors || []), | |
...(G.ignoreErrors || []), | |
...(I.disableErrorDefaults ? [] : mp2), | |
], | |
ignoreTransactions: [ | |
...(I.ignoreTransactions || []), | |
...(G.ignoreTransactions || []), | |
...(I.disableTransactionDefaults ? [] : bp2), | |
], | |
ignoreInternal: I.ignoreInternal !== void 0 ? I.ignoreInternal : !0, | |
} | |
} | |
function hp2(I, G) { | |
if (G.ignoreInternal && ap2(I)) | |
return ( | |
jF.DEBUG_BUILD && | |
A8.logger.warn(`Event dropped due to being internal Sentry Error. | |
Event: ${A8.getEventDescription(I)}`), | |
!0 | |
) | |
if (xp2(I, G.ignoreErrors)) | |
return ( | |
jF.DEBUG_BUILD && | |
A8.logger.warn(`Event dropped due to being matched by \`ignoreErrors\` option. | |
Event: ${A8.getEventDescription(I)}`), | |
!0 | |
) | |
if (cp2(I, G.ignoreTransactions)) | |
return ( | |
jF.DEBUG_BUILD && | |
A8.logger.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. | |
Event: ${A8.getEventDescription(I)}`), | |
!0 | |
) | |
if (pp2(I, G.denyUrls)) | |
return ( | |
jF.DEBUG_BUILD && | |
A8.logger.warn(`Event dropped due to being matched by \`denyUrls\` option. | |
Event: ${A8.getEventDescription(I)}. | |
Url: ${mm(I)}`), | |
!0 | |
) | |
if (!ip2(I, G.allowUrls)) | |
return ( | |
jF.DEBUG_BUILD && | |
A8.logger.warn(`Event dropped due to not being matched by \`allowUrls\` option. | |
Event: ${A8.getEventDescription(I)}. | |
Url: ${mm(I)}`), | |
!0 | |
) | |
return !1 | |
} | |
function xp2(I, G) { | |
if (I.type || !G || !G.length) return !1 | |
return np2(I).some((Z) => A8.stringMatchesSomePattern(Z, G)) | |
} | |
function cp2(I, G) { | |
if (I.type !== 'transaction' || !G || !G.length) return !1 | |
let Z = I.transaction | |
return Z ? A8.stringMatchesSomePattern(Z, G) : !1 | |
} | |
function pp2(I, G) { | |
if (!G || !G.length) return !1 | |
let Z = mm(I) | |
return !Z ? !1 : A8.stringMatchesSomePattern(Z, G) | |
} | |
function ip2(I, G) { | |
if (!G || !G.length) return !0 | |
let Z = mm(I) | |
return !Z ? !0 : A8.stringMatchesSomePattern(Z, G) | |
} | |
function np2(I) { | |
let G = [] | |
if (I.message) G.push(I.message) | |
let Z | |
try { | |
Z = I.exception.values[I.exception.values.length - 1] | |
} catch (d) {} | |
if (Z) { | |
if (Z.value) { | |
if ((G.push(Z.value), Z.type)) G.push(`${Z.type}: ${Z.value}`) | |
} | |
} | |
if (jF.DEBUG_BUILD && G.length === 0) | |
A8.logger.error(`Could not extract message for event ${A8.getEventDescription(I)}`) | |
return G | |
} | |
function ap2(I) { | |
try { | |
return I.exception.values[0].type === 'SentryError' | |
} catch (G) {} | |
return !1 | |
} | |
function rp2(I = []) { | |
for (let G = I.length - 1; G >= 0; G--) { | |
let Z = I[G] | |
if (Z && Z.filename !== '<anonymous>' && Z.filename !== '[native code]') | |
return Z.filename || null | |
} | |
return null | |
} | |
function mm(I) { | |
try { | |
let G | |
try { | |
G = I.exception.values[0].stacktrace.frames | |
} catch (Z) {} | |
return G ? rp2(G) : null | |
} catch (G) { | |
return ( | |
jF.DEBUG_BUILD && | |
A8.logger.error(`Cannot extract url for event ${A8.getEventDescription(I)}`), | |
null | |
) | |
} | |
} | |
cE1.InboundFilters = jp2 | |
cE1.inboundFiltersIntegration = xE1 | |
}) | |
var T01 = _((sE1) => { | |
Object.defineProperty(sE1, '__esModule', { value: !0 }) | |
var ep2 = X0(), | |
tp2 = tZ(), | |
nE1 = TV(), | |
pE1, | |
aE1 = 'FunctionToString', | |
iE1 = new WeakMap(), | |
Ii2 = () => { | |
return { | |
name: aE1, | |
setupOnce() { | |
pE1 = Function.prototype.toString | |
try { | |
Function.prototype.toString = function (...I) { | |
let G = ep2.getOriginalFunction(this), | |
Z = iE1.has(tp2.getClient()) && G !== void 0 ? G : this | |
return pE1.apply(Z, I) | |
} | |
} catch (I) {} | |
}, | |
setup(I) { | |
iE1.set(I, !0) | |
}, | |
} | |
}, | |
rE1 = nE1.defineIntegration(Ii2), | |
Gi2 = nE1.convertIntegrationFnToClass(aE1, rE1) | |
sE1.FunctionToString = Gi2 | |
sE1.functionToStringIntegration = rE1 | |
}) | |
var m01 = _((Gv1) => { | |
Object.defineProperty(Gv1, '__esModule', { value: !0 }) | |
var oE1 = X0(), | |
eE1 = TV(), | |
Wi2 = 'cause', | |
wi2 = 5, | |
tE1 = 'LinkedErrors', | |
Bi2 = (I = {}) => { | |
let G = I.limit || wi2, | |
Z = I.key || Wi2 | |
return { | |
name: tE1, | |
setupOnce() {}, | |
preprocessEvent(d, W, w) { | |
let B = w.getOptions() | |
oE1.applyAggregateErrorsToEvent( | |
oE1.exceptionFromError, | |
B.stackParser, | |
B.maxValueLength, | |
Z, | |
G, | |
d, | |
W, | |
) | |
}, | |
} | |
}, | |
Iv1 = eE1.defineIntegration(Bi2), | |
Ci2 = eE1.convertIntegrationFnToClass(tE1, Iv1) | |
Gv1.LinkedErrors = Ci2 | |
Gv1.linkedErrorsIntegration = Iv1 | |
}) | |
var dv1 = _((Zv1) => { | |
Object.defineProperty(Zv1, '__esModule', { value: !0 }) | |
var Xi2 = T01(), | |
Yi2 = u01(), | |
_i2 = m01() | |
Zv1.FunctionToString = Xi2.FunctionToString | |
Zv1.InboundFilters = Yi2.InboundFilters | |
Zv1.LinkedErrors = _i2.LinkedErrors | |
}) | |
var Cv1 = _((Bv1) => { | |
Object.defineProperty(Bv1, '__esModule', { value: !0 }) | |
var Ji2 = X0(), | |
Wv1 = Qv(), | |
Ki2 = v01(), | |
gi2 = Kv(), | |
bm = zv() | |
class wv1 { | |
constructor(I) { | |
;(this._client = I), | |
(this._buckets = new Map()), | |
(this._interval = setInterval(() => this.flush(), Wv1.DEFAULT_BROWSER_FLUSH_INTERVAL)) | |
} | |
add(I, G, Z, d = 'none', W = {}, w = Ji2.timestampInSeconds()) { | |
let B = Math.floor(w), | |
C = bm.sanitizeMetricKey(G), | |
V = bm.sanitizeTags(W), | |
A = bm.sanitizeUnit(d), | |
X = bm.getBucketKey(I, C, A, V), | |
Y = this._buckets.get(X), | |
H = Y && I === Wv1.SET_METRIC_TYPE ? Y.metric.weight : 0 | |
if (Y) { | |
if ((Y.metric.add(Z), Y.timestamp < B)) Y.timestamp = B | |
} else | |
(Y = { | |
metric: new Ki2.METRIC_MAP[I](Z), | |
timestamp: B, | |
metricType: I, | |
name: C, | |
unit: A, | |
tags: V, | |
}), | |
this._buckets.set(X, Y) | |
let J = typeof Z === 'string' ? Y.metric.weight - H : Z | |
gi2.updateMetricSummaryOnActiveSpan(I, C, J, A, W, X) | |
} | |
flush() { | |
if (this._buckets.size === 0) return | |
if (this._client.captureAggregateMetrics) { | |
let I = Array.from(this._buckets).map(([, G]) => G) | |
this._client.captureAggregateMetrics(I) | |
} | |
this._buckets.clear() | |
} | |
close() { | |
clearInterval(this._interval), this.flush() | |
} | |
} | |
Bv1.BrowserMetricsAggregator = wv1 | |
}) | |
var _v1 = _((Yv1) => { | |
Object.defineProperty(Yv1, '__esModule', { value: !0 }) | |
var Vv1 = TV(), | |
zi2 = Cv1(), | |
Av1 = 'MetricsAggregator', | |
Qi2 = () => { | |
return { | |
name: Av1, | |
setupOnce() {}, | |
setup(I) { | |
I.metricsAggregator = new zi2.BrowserMetricsAggregator(I) | |
}, | |
} | |
}, | |
Xv1 = Vv1.defineIntegration(Qi2), | |
qi2 = Vv1.convertIntegrationFnToClass(Av1, Xv1) | |
Yv1.MetricsAggregator = qi2 | |
Yv1.metricsAggregatorIntegration = Xv1 | |
}) | |
var qv1 = _((Qv1) => { | |
Object.defineProperty(Qv1, '__esModule', { value: !0 }) | |
var Dv1 = X0(), | |
Hv1 = Q6(), | |
Fv1 = tZ(), | |
Ri2 = iI(), | |
lm = Qv(), | |
Jv1 = _v1() | |
function jm(I, G, Z, d = {}) { | |
let W = Fv1.getClient(), | |
w = Fv1.getCurrentScope() | |
if (W) { | |
if (!W.metricsAggregator) { | |
Hv1.DEBUG_BUILD && | |
Dv1.logger.warn( | |
'No metrics aggregator enabled. Please add the MetricsAggregator integration to use metrics APIs', | |
) | |
return | |
} | |
let { unit: B, tags: C, timestamp: V } = d, | |
{ release: A, environment: X } = W.getOptions(), | |
Y = w.getTransaction(), | |
H = {} | |
if (A) H.release = A | |
if (X) H.environment = X | |
if (Y) H.transaction = Ri2.spanToJSON(Y).description || '' | |
Hv1.DEBUG_BUILD && Dv1.logger.log(`Adding value of ${Z} to ${I} metric ${G}`), | |
W.metricsAggregator.add(I, G, Z, B, { ...H, ...C }, V) | |
} | |
} | |
function Kv1(I, G = 1, Z) { | |
jm(lm.COUNTER_METRIC_TYPE, I, G, Z) | |
} | |
function gv1(I, G, Z) { | |
jm(lm.DISTRIBUTION_METRIC_TYPE, I, G, Z) | |
} | |
function Nv1(I, G, Z) { | |
jm(lm.SET_METRIC_TYPE, I, G, Z) | |
} | |
function zv1(I, G, Z) { | |
jm(lm.GAUGE_METRIC_TYPE, I, G, Z) | |
} | |
var Ei2 = { | |
increment: Kv1, | |
distribution: gv1, | |
set: Nv1, | |
gauge: zv1, | |
MetricsAggregator: Jv1.MetricsAggregator, | |
metricsAggregatorIntegration: Jv1.metricsAggregatorIntegration, | |
} | |
Qv1.distribution = gv1 | |
Qv1.gauge = zv1 | |
Qv1.increment = Kv1 | |
Qv1.metrics = Ei2 | |
Qv1.set = Nv1 | |
}) | |
var Y4 = _((j01) => { | |
Object.defineProperty(j01, '__esModule', { value: !0 }) | |
var Uv1 = H01(), | |
fv1 = _01(), | |
yi2 = fm(), | |
Pi2 = vm(), | |
Rv1 = Km(), | |
km = jN(), | |
kF = Um(), | |
Ev1 = TF(), | |
Oi2 = UR1(), | |
ui2 = D01(), | |
Uv = gv(), | |
vv1 = F01(), | |
O9 = tZ(), | |
KB = HB(), | |
b01 = TN(), | |
Ti2 = J01(), | |
l01 = Ym(), | |
Mv1 = Av(), | |
Sv1 = $m(), | |
Lv1 = z01(), | |
mi2 = eR1(), | |
$v1 = ZE1(), | |
bi2 = CE1(), | |
li2 = XE1(), | |
ji2 = _E1(), | |
ki2 = Hm(), | |
hm = TV(), | |
yv1 = Xm(), | |
hi2 = Am(), | |
xi2 = q01(), | |
ci2 = FE1(), | |
pi2 = Nm(), | |
ii2 = gE1(), | |
ni2 = V01(), | |
ai2 = zE1(), | |
xm = iI(), | |
ri2 = mN(), | |
si2 = UE1(), | |
oi2 = uN(), | |
Pv1 = OE1(), | |
Ov1 = jE1(), | |
uv1 = u01(), | |
Tv1 = T01(), | |
mv1 = m01(), | |
ei2 = dv1(), | |
ti2 = qv1(), | |
In2 = ei2 | |
j01.addTracingExtensions = Uv1.addTracingExtensions | |
j01.startIdleTransaction = Uv1.startIdleTransaction | |
j01.IdleTransaction = fv1.IdleTransaction | |
j01.TRACING_DEFAULTS = fv1.TRACING_DEFAULTS | |
j01.Span = yi2.Span | |
j01.Transaction = Pi2.Transaction | |
j01.extractTraceparentData = Rv1.extractTraceparentData | |
j01.getActiveTransaction = Rv1.getActiveTransaction | |
Object.defineProperty(j01, 'SpanStatus', { enumerable: !0, get: () => km.SpanStatus }) | |
j01.getSpanStatusFromHttpCode = km.getSpanStatusFromHttpCode | |
j01.setHttpStatus = km.setHttpStatus | |
j01.spanStatusfromHttpCode = km.spanStatusfromHttpCode | |
j01.continueTrace = kF.continueTrace | |
j01.getActiveSpan = kF.getActiveSpan | |
j01.startActiveSpan = kF.startActiveSpan | |
j01.startInactiveSpan = kF.startInactiveSpan | |
j01.startSpan = kF.startSpan | |
j01.startSpanManual = kF.startSpanManual | |
j01.trace = kF.trace | |
j01.getDynamicSamplingContextFromClient = Ev1.getDynamicSamplingContextFromClient | |
j01.getDynamicSamplingContextFromSpan = Ev1.getDynamicSamplingContextFromSpan | |
j01.setMeasurement = Oi2.setMeasurement | |
j01.isValidSampleRate = ui2.isValidSampleRate | |
j01.SEMANTIC_ATTRIBUTE_PROFILE_ID = Uv.SEMANTIC_ATTRIBUTE_PROFILE_ID | |
j01.SEMANTIC_ATTRIBUTE_SENTRY_OP = Uv.SEMANTIC_ATTRIBUTE_SENTRY_OP | |
j01.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = Uv.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN | |
j01.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = Uv.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE | |
j01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = Uv.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE | |
j01.createEventEnvelope = vv1.createEventEnvelope | |
j01.createSessionEnvelope = vv1.createSessionEnvelope | |
j01.addBreadcrumb = O9.addBreadcrumb | |
j01.captureCheckIn = O9.captureCheckIn | |
j01.captureEvent = O9.captureEvent | |
j01.captureException = O9.captureException | |
j01.captureMessage = O9.captureMessage | |
j01.captureSession = O9.captureSession | |
j01.close = O9.close | |
j01.configureScope = O9.configureScope | |
j01.endSession = O9.endSession | |
j01.flush = O9.flush | |
j01.getClient = O9.getClient | |
j01.getCurrentScope = O9.getCurrentScope | |
j01.isInitialized = O9.isInitialized | |
j01.lastEventId = O9.lastEventId | |
j01.setContext = O9.setContext | |
j01.setExtra = O9.setExtra | |
j01.setExtras = O9.setExtras | |
j01.setTag = O9.setTag | |
j01.setTags = O9.setTags | |
j01.setUser = O9.setUser | |
j01.startSession = O9.startSession | |
j01.startTransaction = O9.startTransaction | |
j01.withActiveSpan = O9.withActiveSpan | |
j01.withIsolationScope = O9.withIsolationScope | |
j01.withMonitor = O9.withMonitor | |
j01.withScope = O9.withScope | |
j01.Hub = KB.Hub | |
j01.ensureHubOnCarrier = KB.ensureHubOnCarrier | |
j01.getCurrentHub = KB.getCurrentHub | |
j01.getHubFromCarrier = KB.getHubFromCarrier | |
j01.getIsolationScope = KB.getIsolationScope | |
j01.getMainCarrier = KB.getMainCarrier | |
j01.makeMain = KB.makeMain | |
j01.runWithAsyncContext = KB.runWithAsyncContext | |
j01.setAsyncContextStrategy = KB.setAsyncContextStrategy | |
j01.setHubOnCarrier = KB.setHubOnCarrier | |
j01.closeSession = b01.closeSession | |
j01.makeSession = b01.makeSession | |
j01.updateSession = b01.updateSession | |
j01.SessionFlusher = Ti2.SessionFlusher | |
j01.Scope = l01.Scope | |
j01.getGlobalScope = l01.getGlobalScope | |
j01.setGlobalScope = l01.setGlobalScope | |
j01.addGlobalEventProcessor = Mv1.addGlobalEventProcessor | |
j01.notifyEventProcessors = Mv1.notifyEventProcessors | |
j01.getEnvelopeEndpointWithUrlEncodedAuth = Sv1.getEnvelopeEndpointWithUrlEncodedAuth | |
j01.getReportDialogEndpoint = Sv1.getReportDialogEndpoint | |
j01.BaseClient = Lv1.BaseClient | |
j01.addEventProcessor = Lv1.addEventProcessor | |
j01.ServerRuntimeClient = mi2.ServerRuntimeClient | |
j01.initAndBind = $v1.initAndBind | |
j01.setCurrentClient = $v1.setCurrentClient | |
j01.createTransport = bi2.createTransport | |
j01.makeOfflineTransport = li2.makeOfflineTransport | |
j01.makeMultiplexedTransport = ji2.makeMultiplexedTransport | |
j01.SDK_VERSION = ki2.SDK_VERSION | |
j01.addIntegration = hm.addIntegration | |
j01.convertIntegrationFnToClass = hm.convertIntegrationFnToClass | |
j01.defineIntegration = hm.defineIntegration | |
j01.getIntegrationsToSetup = hm.getIntegrationsToSetup | |
j01.applyScopeDataToEvent = yv1.applyScopeDataToEvent | |
j01.mergeScopeData = yv1.mergeScopeData | |
j01.prepareEvent = hi2.prepareEvent | |
j01.createCheckInEnvelope = xi2.createCheckInEnvelope | |
j01.createSpanEnvelope = ci2.createSpanEnvelope | |
j01.hasTracingEnabled = pi2.hasTracingEnabled | |
j01.isSentryRequestUrl = ii2.isSentryRequestUrl | |
j01.handleCallbackErrors = ni2.handleCallbackErrors | |
j01.parameterize = ai2.parameterize | |
j01.spanIsSampled = xm.spanIsSampled | |
j01.spanToJSON = xm.spanToJSON | |
j01.spanToTraceContext = xm.spanToTraceContext | |
j01.spanToTraceHeader = xm.spanToTraceHeader | |
j01.getRootSpan = ri2.getRootSpan | |
j01.applySdkMetadata = si2.applySdkMetadata | |
j01.DEFAULT_ENVIRONMENT = oi2.DEFAULT_ENVIRONMENT | |
j01.ModuleMetadata = Pv1.ModuleMetadata | |
j01.moduleMetadataIntegration = Pv1.moduleMetadataIntegration | |
j01.RequestData = Ov1.RequestData | |
j01.requestDataIntegration = Ov1.requestDataIntegration | |
j01.InboundFilters = uv1.InboundFilters | |
j01.inboundFiltersIntegration = uv1.inboundFiltersIntegration | |
j01.FunctionToString = Tv1.FunctionToString | |
j01.functionToStringIntegration = Tv1.functionToStringIntegration | |
j01.LinkedErrors = mv1.LinkedErrors | |
j01.linkedErrorsIntegration = mv1.linkedErrorsIntegration | |
j01.metrics = ti2.metrics | |
j01.Integrations = In2 | |
}) | |
var rI = _((bv1) => { | |
Object.defineProperty(bv1, '__esModule', { value: !0 }) | |
var Xr2 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
bv1.DEBUG_BUILD = Xr2 | |
}) | |
var YY = _((jv1) => { | |
var { _optionalChain: lv1 } = X0() | |
Object.defineProperty(jv1, '__esModule', { value: !0 }) | |
function _r2(I) { | |
let G = lv1([ | |
I, | |
'call', | |
(d) => d(), | |
'access', | |
(d) => d.getClient, | |
'call', | |
(d) => d(), | |
'optionalAccess', | |
(d) => d.getOptions, | |
'call', | |
(d) => d(), | |
]) | |
return (lv1([G, 'optionalAccess', (d) => d.instrumenter]) || 'sentry') !== 'sentry' | |
} | |
jv1.shouldDisableAutoInstrumentation = _r2 | |
}) | |
var pv1 = _((cv1) => { | |
var { _optionalChain: gB } = X0() | |
Object.defineProperty(cv1, '__esModule', { value: !0 }) | |
var k01 = Y4(), | |
sI = X0(), | |
cm = rI(), | |
Hr2 = YY() | |
class pm { | |
static __initStatic() { | |
this.id = 'Express' | |
} | |
constructor(I = {}) { | |
;(this.name = pm.id), | |
(this._router = I.router || I.app), | |
(this._methods = (Array.isArray(I.methods) ? I.methods : []).concat('use')) | |
} | |
setupOnce(I, G) { | |
if (!this._router) { | |
cm.DEBUG_BUILD && sI.logger.error('ExpressIntegration is missing an Express instance') | |
return | |
} | |
if (Hr2.shouldDisableAutoInstrumentation(G)) { | |
cm.DEBUG_BUILD && | |
sI.logger.log('Express Integration is skipped because of instrumenter configuration.') | |
return | |
} | |
Kr2(this._router, this._methods), gr2(this._router) | |
} | |
} | |
pm.__initStatic() | |
function kv1(I, G) { | |
let Z = I.length | |
switch (Z) { | |
case 2: | |
return function (d, W) { | |
let w = W.__sentry_transaction | |
if (w) { | |
let B = w.startChild({ | |
description: I.name, | |
op: `middleware.express.${G}`, | |
origin: 'auto.middleware.express', | |
}) | |
W.once('finish', () => { | |
B.end() | |
}) | |
} | |
return I.call(this, d, W) | |
} | |
case 3: | |
return function (d, W, w) { | |
let B = W.__sentry_transaction, | |
C = gB([ | |
B, | |
'optionalAccess', | |
(V) => V.startChild, | |
'call', | |
(V) => | |
V({ | |
description: I.name, | |
op: `middleware.express.${G}`, | |
origin: 'auto.middleware.express', | |
}), | |
]) | |
I.call(this, d, W, function (...V) { | |
gB([C, 'optionalAccess', (A) => A.end, 'call', (A) => A()]), w.call(this, ...V) | |
}) | |
} | |
case 4: | |
return function (d, W, w, B) { | |
let C = w.__sentry_transaction, | |
V = gB([ | |
C, | |
'optionalAccess', | |
(A) => A.startChild, | |
'call', | |
(A) => | |
A({ | |
description: I.name, | |
op: `middleware.express.${G}`, | |
origin: 'auto.middleware.express', | |
}), | |
]) | |
I.call(this, d, W, w, function (...A) { | |
gB([V, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), B.call(this, ...A) | |
}) | |
} | |
default: | |
throw new Error(`Express middleware takes 2-4 arguments. Got: ${Z}`) | |
} | |
} | |
function Fr2(I, G) { | |
return I.map((Z) => { | |
if (typeof Z === 'function') return kv1(Z, G) | |
if (Array.isArray(Z)) | |
return Z.map((d) => { | |
if (typeof d === 'function') return kv1(d, G) | |
return d | |
}) | |
return Z | |
}) | |
} | |
function Jr2(I, G) { | |
let Z = I[G] | |
return ( | |
(I[G] = function (...d) { | |
return Z.call(this, ...Fr2(d, G)) | |
}), | |
I | |
) | |
} | |
function Kr2(I, G = []) { | |
G.forEach((Z) => Jr2(I, Z)) | |
} | |
function gr2(I) { | |
let G = 'settings' in I | |
if (G && I._router === void 0 && I.lazyrouter) I.lazyrouter() | |
let Z = G ? I._router : I | |
if (!Z) { | |
cm.DEBUG_BUILD && | |
sI.logger.debug( | |
'Cannot instrument router for URL Parameterization (did not find a valid router).', | |
), | |
cm.DEBUG_BUILD && | |
sI.logger.debug('Routing instrumentation is currently only supported in Express 4.') | |
return | |
} | |
let d = Object.getPrototypeOf(Z), | |
W = d.process_params | |
d.process_params = function w(B, C, V, A, X) { | |
if (!V._reconstructedRoute) V._reconstructedRoute = '' | |
let { layerRoutePath: Y, isRegex: H, isArray: J, numExtraSegments: K } = Nr2(B) | |
if (Y || H || J) V._hasParameters = !0 | |
let g | |
if (Y) g = Y | |
else g = xv1(V.originalUrl, V._reconstructedRoute, B.path) || '' | |
let z = g | |
.split('/') | |
.filter(($) => $.length > 0 && (H || J || !$.includes('*'))) | |
.join('/') | |
if (z && z.length > 0) V._reconstructedRoute += `/${z}${H ? '/' : ''}` | |
let f = sI.getNumberOfUrlSegments(sI.stripUrlQueryAndFragment(V.originalUrl || '')) + K, | |
S = sI.getNumberOfUrlSegments(V._reconstructedRoute) | |
if (f === S) { | |
if (!V._hasParameters) { | |
if (V._reconstructedRoute !== V.originalUrl) | |
V._reconstructedRoute = V.originalUrl | |
? sI.stripUrlQueryAndFragment(V.originalUrl) | |
: V.originalUrl | |
} | |
let $ = A.__sentry_transaction, | |
L = ($ && k01.spanToJSON($).data) || {} | |
if ($ && L[k01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] !== 'custom') { | |
let T = V._reconstructedRoute || '/', | |
[m, O] = sI.extractPathForTransaction(V, { path: !0, method: !0, customRoute: T }) | |
$.updateName(m), $.setAttribute(k01.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, O) | |
} | |
} | |
return W.call(this, B, C, V, A, X) | |
} | |
} | |
var hv1 = (I, G, Z) => { | |
if ( | |
!I || | |
!G || | |
!Z || | |
Object.keys(Z).length === 0 || | |
!gB([Z, 'access', (A) => A[0], 'optionalAccess', (A) => A.offset]) | |
) | |
return | |
let d = Z.sort((A, X) => A.offset - X.offset), | |
w = new RegExp(G, `${G.flags}d`).exec(I) | |
if (!w || !w.indices) return | |
let [, ...B] = w.indices | |
if (B.length !== d.length) return | |
let C = I, | |
V = 0 | |
return ( | |
B.forEach((A, X) => { | |
if (A) { | |
let [Y, H] = A, | |
J = C.substring(0, Y - V), | |
K = `:${d[X].name}`, | |
g = C.substring(H - V) | |
;(C = J + K + g), (V = V + (H - Y - K.length)) | |
} | |
}), | |
C | |
) | |
} | |
function Nr2(I) { | |
let G = gB([I, 'access', (B) => B.route, 'optionalAccess', (B) => B.path]), | |
Z = sI.isRegExp(G), | |
d = Array.isArray(G) | |
if (!G) { | |
let [B] = sI.GLOBAL_OBJ.process.versions.node.split('.').map(Number) | |
if (B >= 16) G = hv1(I.path, I.regexp, I.keys) | |
} | |
if (!G) return { isRegex: Z, isArray: d, numExtraSegments: 0 } | |
let W = d ? Math.max(zr2(G) - sI.getNumberOfUrlSegments(I.path || ''), 0) : 0 | |
return { layerRoutePath: Qr2(d, G), isRegex: Z, isArray: d, numExtraSegments: W } | |
} | |
function zr2(I) { | |
return I.reduce((G, Z) => { | |
return G + sI.getNumberOfUrlSegments(Z.toString()) | |
}, 0) | |
} | |
function Qr2(I, G) { | |
if (I) return G.map((Z) => Z.toString()).join(',') | |
return G && G.toString() | |
} | |
function xv1(I, G, Z) { | |
let d = sI.stripUrlQueryAndFragment(I || ''), | |
W = gB([ | |
d, | |
'optionalAccess', | |
(V) => V.split, | |
'call', | |
(V) => V('/'), | |
'access', | |
(V) => V.filter, | |
'call', | |
(V) => V((A) => !!A), | |
]), | |
w = 0, | |
B = | |
gB([ | |
G, | |
'optionalAccess', | |
(V) => V.split, | |
'call', | |
(V) => V('/'), | |
'access', | |
(V) => V.filter, | |
'call', | |
(V) => V((A) => !!A), | |
'access', | |
(V) => V.length, | |
]) || 0 | |
return gB([ | |
Z, | |
'optionalAccess', | |
(V) => V.split, | |
'call', | |
(V) => V('/'), | |
'access', | |
(V) => V.filter, | |
'call', | |
(V) => | |
V((A) => { | |
if (gB([W, 'optionalAccess', (X) => X[B + w]]) === A) return (w += 1), !0 | |
return !1 | |
}), | |
'access', | |
(V) => V.join, | |
'call', | |
(V) => V('/'), | |
]) | |
} | |
cv1.Express = pm | |
cv1.extractOriginalRoute = hv1 | |
cv1.preventDuplicateSegments = xv1 | |
}) | |
var nv1 = _((iv1) => { | |
var { _optionalChain: nN } = X0() | |
Object.defineProperty(iv1, '__esModule', { value: !0 }) | |
var aN = X0(), | |
h01 = rI(), | |
Rr2 = YY() | |
class im { | |
static __initStatic() { | |
this.id = 'Postgres' | |
} | |
constructor(I = {}) { | |
;(this.name = im.id), (this._usePgNative = !!I.usePgNative), (this._module = I.module) | |
} | |
loadDependency() { | |
return (this._module = this._module || aN.loadModule('pg')) | |
} | |
setupOnce(I, G) { | |
if (Rr2.shouldDisableAutoInstrumentation(G)) { | |
h01.DEBUG_BUILD && | |
aN.logger.log('Postgres Integration is skipped because of instrumenter configuration.') | |
return | |
} | |
let Z = this.loadDependency() | |
if (!Z) { | |
h01.DEBUG_BUILD && | |
aN.logger.error('Postgres Integration was unable to require `pg` package.') | |
return | |
} | |
let d = this._usePgNative | |
? nN([Z, 'access', (W) => W.native, 'optionalAccess', (W) => W.Client]) | |
: Z.Client | |
if (!d) { | |
h01.DEBUG_BUILD && | |
aN.logger.error("Postgres Integration was unable to access 'pg-native' bindings.") | |
return | |
} | |
aN.fill(d.prototype, 'query', function (W) { | |
return function (w, B, C) { | |
let A = G().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 (J) {} | |
let Y = nN([ | |
A, | |
'optionalAccess', | |
(J) => J.startChild, | |
'call', | |
(J) => | |
J({ | |
description: typeof w === 'string' ? w : w.text, | |
op: 'db', | |
origin: 'auto.db.postgres', | |
data: X, | |
}), | |
]) | |
if (typeof C === 'function') | |
return W.call(this, w, B, function (J, K) { | |
nN([Y, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), C(J, K) | |
}) | |
if (typeof B === 'function') | |
return W.call(this, w, function (J, K) { | |
nN([Y, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), B(J, K) | |
}) | |
let H = typeof B !== 'undefined' ? W.call(this, w, B) : W.call(this, w) | |
if (aN.isThenable(H)) | |
return H.then((J) => { | |
return nN([Y, 'optionalAccess', (K) => K.end, 'call', (K) => K()]), J | |
}) | |
return nN([Y, 'optionalAccess', (J) => J.end, 'call', (J) => J()]), H | |
} | |
}) | |
} | |
} | |
im.__initStatic() | |
iv1.Postgres = im | |
}) | |
var rv1 = _((av1) => { | |
var { _optionalChain: vr2 } = X0() | |
Object.defineProperty(av1, '__esModule', { value: !0 }) | |
var fv = X0(), | |
x01 = rI(), | |
Mr2 = YY() | |
class nm { | |
static __initStatic() { | |
this.id = 'Mysql' | |
} | |
constructor() { | |
this.name = nm.id | |
} | |
loadDependency() { | |
return (this._module = this._module || fv.loadModule('mysql/lib/Connection.js')) | |
} | |
setupOnce(I, G) { | |
if (Mr2.shouldDisableAutoInstrumentation(G)) { | |
x01.DEBUG_BUILD && | |
fv.logger.log('Mysql Integration is skipped because of instrumenter configuration.') | |
return | |
} | |
let Z = this.loadDependency() | |
if (!Z) { | |
x01.DEBUG_BUILD && | |
fv.logger.error('Mysql Integration was unable to require `mysql` package.') | |
return | |
} | |
let d = void 0 | |
try { | |
Z.prototype.connect = new Proxy(Z.prototype.connect, { | |
apply(B, C, V) { | |
if (!d) d = C.config | |
return B.apply(C, V) | |
}, | |
}) | |
} catch (B) { | |
x01.DEBUG_BUILD && | |
fv.logger.error('Mysql Integration was unable to instrument `mysql` config.') | |
} | |
function W() { | |
if (!d) return {} | |
return { 'server.address': d.host, 'server.port': d.port, 'db.user': d.user } | |
} | |
function w(B) { | |
if (!B) return | |
let C = W() | |
Object.keys(C).forEach((V) => { | |
B.setAttribute(V, C[V]) | |
}), | |
B.end() | |
} | |
fv.fill(Z, 'createQuery', function (B) { | |
return function (C, V, A) { | |
let Y = G().getScope().getSpan(), | |
H = vr2([ | |
Y, | |
'optionalAccess', | |
(K) => K.startChild, | |
'call', | |
(K) => | |
K({ | |
description: typeof C === 'string' ? C : C.sql, | |
op: 'db', | |
origin: 'auto.db.mysql', | |
data: { 'db.system': 'mysql' }, | |
}), | |
]) | |
if (typeof A === 'function') | |
return B.call(this, C, V, function (K, g, z) { | |
w(H), A(K, g, z) | |
}) | |
if (typeof V === 'function') | |
return B.call(this, C, function (K, g, z) { | |
w(H), V(K, g, z) | |
}) | |
let J = B.call(this, C, V) | |
return ( | |
J.on('end', () => { | |
w(H) | |
}), | |
J | |
) | |
} | |
}) | |
} | |
} | |
nm.__initStatic() | |
av1.Mysql = nm | |
}) | |
var ev1 = _((ov1) => { | |
var { _optionalChain: _Y } = X0() | |
Object.defineProperty(ov1, '__esModule', { value: !0 }) | |
var Rv = X0(), | |
sv1 = rI(), | |
Lr2 = YY(), | |
$r2 = [ | |
'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', | |
], | |
yr2 = { | |
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 Pr2(I) { | |
return I && typeof I === 'object' && I.once && typeof I.once === 'function' | |
} | |
class am { | |
static __initStatic() { | |
this.id = 'Mongo' | |
} | |
constructor(I = {}) { | |
;(this.name = am.id), | |
(this._operations = Array.isArray(I.operations) ? I.operations : $r2), | |
(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, G) { | |
if (Lr2.shouldDisableAutoInstrumentation(G)) { | |
sv1.DEBUG_BUILD && | |
Rv.logger.log('Mongo Integration is skipped because of instrumenter configuration.') | |
return | |
} | |
let Z = this.loadDependency() | |
if (!Z) { | |
let d = this._useMongoose ? 'mongoose' : 'mongodb' | |
sv1.DEBUG_BUILD && | |
Rv.logger.error(`Mongo Integration was unable to require \`${d}\` package.`) | |
return | |
} | |
this._instrumentOperations(Z.Collection, this._operations, G) | |
} | |
_instrumentOperations(I, G, Z) { | |
G.forEach((d) => this._patchOperation(I, d, Z)) | |
} | |
_patchOperation(I, G, Z) { | |
if (!(G in I.prototype)) return | |
let d = this._getSpanContextFromOperationArguments.bind(this) | |
Rv.fill(I.prototype, G, function (W) { | |
return function (...w) { | |
let B = w[w.length - 1], | |
C = Z(), | |
V = C.getScope(), | |
A = C.getClient(), | |
X = V.getSpan(), | |
Y = _Y([ | |
A, | |
'optionalAccess', | |
(J) => J.getOptions, | |
'call', | |
(J) => J(), | |
'access', | |
(J) => J.sendDefaultPii, | |
]) | |
if (typeof B !== 'function' || (G === 'mapReduce' && w.length === 2)) { | |
let J = _Y([ | |
X, | |
'optionalAccess', | |
(g) => g.startChild, | |
'call', | |
(g) => g(d(this, G, w, Y)), | |
]), | |
K = W.call(this, ...w) | |
if (Rv.isThenable(K)) | |
return K.then((g) => { | |
return _Y([J, 'optionalAccess', (z) => z.end, 'call', (z) => z()]), g | |
}) | |
else if (Pr2(K)) { | |
let g = K | |
try { | |
g.once('close', () => { | |
_Y([J, 'optionalAccess', (z) => z.end, 'call', (z) => z()]) | |
}) | |
} catch (z) { | |
_Y([J, 'optionalAccess', (f) => f.end, 'call', (f) => f()]) | |
} | |
return g | |
} else return _Y([J, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), K | |
} | |
let H = _Y([ | |
X, | |
'optionalAccess', | |
(J) => J.startChild, | |
'call', | |
(J) => J(d(this, G, w.slice(0, -1))), | |
]) | |
return W.call(this, ...w.slice(0, -1), function (J, K) { | |
_Y([H, 'optionalAccess', (g) => g.end, 'call', (g) => g()]), B(J, K) | |
}) | |
} | |
}) | |
} | |
_getSpanContextFromOperationArguments(I, G, Z, d = !1) { | |
let W = { | |
'db.system': 'mongodb', | |
'db.name': I.dbName, | |
'db.operation': G, | |
'db.mongodb.collection': I.collectionName, | |
}, | |
w = { op: 'db', origin: 'auto.db.mongo', description: G, data: W }, | |
B = yr2[G], | |
C = Array.isArray(this._describeOperations) | |
? this._describeOperations.includes(G) | |
: this._describeOperations | |
if (!B || !C || !d) return w | |
try { | |
if (G === 'mapReduce') { | |
let [V, A] = Z | |
;(W[B[0]] = typeof V === 'string' ? V : V.name || '<anonymous>'), | |
(W[B[1]] = typeof A === 'string' ? A : A.name || '<anonymous>') | |
} else for (let V = 0; V < B.length; V++) W[`db.mongodb.${B[V]}`] = JSON.stringify(Z[V]) | |
} catch (V) {} | |
return w | |
} | |
} | |
am.__initStatic() | |
ov1.Mongo = am | |
}) | |
var GM1 = _((IM1) => { | |
Object.defineProperty(IM1, '__esModule', { value: !0 }) | |
var c01 = Y4(), | |
tv1 = X0(), | |
ur2 = rI(), | |
Tr2 = YY() | |
function mr2(I) { | |
return !!I && !!I.$use | |
} | |
class rm { | |
static __initStatic() { | |
this.id = 'Prisma' | |
} | |
constructor(I = {}) { | |
if (((this.name = rm.id), mr2(I.client) && !I.client._sentryInstrumented)) { | |
tv1.addNonEnumerableProperty(I.client, '_sentryInstrumented', !0) | |
let G = {} | |
try { | |
let Z = I.client._engineConfig | |
if (Z) { | |
let { activeProvider: d, clientVersion: W } = Z | |
if (d) G['db.system'] = d | |
if (W) G['db.prisma.version'] = W | |
} | |
} catch (Z) {} | |
I.client.$use((Z, d) => { | |
if (Tr2.shouldDisableAutoInstrumentation(c01.getCurrentHub)) return d(Z) | |
let { action: W, model: w } = Z | |
return c01.startSpan( | |
{ | |
name: w ? `${w} ${W}` : W, | |
onlyIfParent: !0, | |
op: 'db.prisma', | |
attributes: { [c01.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.prisma' }, | |
data: { ...G, 'db.operation': W }, | |
}, | |
() => d(Z), | |
) | |
}) | |
} else | |
ur2.DEBUG_BUILD && | |
tv1.logger.warn( | |
'Unsupported Prisma client provided to PrismaIntegration. Provided client:', | |
I.client, | |
) | |
} | |
setupOnce() {} | |
} | |
rm.__initStatic() | |
IM1.Prisma = rm | |
}) | |
var WM1 = _((dM1) => { | |
var { _optionalChain: rN } = X0() | |
Object.defineProperty(dM1, '__esModule', { value: !0 }) | |
var Ev = X0(), | |
ZM1 = rI(), | |
lr2 = YY() | |
class sm { | |
static __initStatic() { | |
this.id = 'GraphQL' | |
} | |
constructor() { | |
this.name = sm.id | |
} | |
loadDependency() { | |
return (this._module = this._module || Ev.loadModule('graphql/execution/execute.js')) | |
} | |
setupOnce(I, G) { | |
if (lr2.shouldDisableAutoInstrumentation(G)) { | |
ZM1.DEBUG_BUILD && | |
Ev.logger.log('GraphQL Integration is skipped because of instrumenter configuration.') | |
return | |
} | |
let Z = this.loadDependency() | |
if (!Z) { | |
ZM1.DEBUG_BUILD && | |
Ev.logger.error('GraphQL Integration was unable to require graphql/execution package.') | |
return | |
} | |
Ev.fill(Z, 'execute', function (d) { | |
return function (...W) { | |
let w = G().getScope(), | |
B = w.getSpan(), | |
C = rN([ | |
B, | |
'optionalAccess', | |
(A) => A.startChild, | |
'call', | |
(A) => | |
A({ | |
description: 'execute', | |
op: 'graphql.execute', | |
origin: 'auto.graphql.graphql', | |
}), | |
]) | |
rN([w, 'optionalAccess', (A) => A.setSpan, 'call', (A) => A(C)]) | |
let V = d.call(this, ...W) | |
if (Ev.isThenable(V)) | |
return V.then((A) => { | |
return ( | |
rN([C, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), | |
rN([w, 'optionalAccess', (X) => X.setSpan, 'call', (X) => X(B)]), | |
A | |
) | |
}) | |
return ( | |
rN([C, 'optionalAccess', (A) => A.end, 'call', (A) => A()]), | |
rN([w, 'optionalAccess', (A) => A.setSpan, 'call', (A) => A(B)]), | |
V | |
) | |
} | |
}) | |
} | |
} | |
sm.__initStatic() | |
dM1.GraphQL = sm | |
}) | |
var CM1 = _((BM1) => { | |
var { _optionalChain: p01 } = X0() | |
Object.defineProperty(BM1, '__esModule', { value: !0 }) | |
var R7 = X0(), | |
om = rI(), | |
kr2 = YY() | |
class em { | |
static __initStatic() { | |
this.id = 'Apollo' | |
} | |
constructor(I = { useNestjs: !1 }) { | |
;(this.name = em.id), (this._useNest = !!I.useNestjs) | |
} | |
loadDependency() { | |
if (this._useNest) this._module = this._module || R7.loadModule('@nestjs/graphql') | |
else this._module = this._module || R7.loadModule('apollo-server-core') | |
return this._module | |
} | |
setupOnce(I, G) { | |
if (kr2.shouldDisableAutoInstrumentation(G)) { | |
om.DEBUG_BUILD && | |
R7.logger.log('Apollo Integration is skipped because of instrumenter configuration.') | |
return | |
} | |
if (this._useNest) { | |
let Z = this.loadDependency() | |
if (!Z) { | |
om.DEBUG_BUILD && | |
R7.logger.error( | |
'Apollo-NestJS Integration was unable to require @nestjs/graphql package.', | |
) | |
return | |
} | |
R7.fill(Z.GraphQLFactory.prototype, 'mergeWithSchema', function (d) { | |
return function (...W) { | |
return ( | |
R7.fill(this.resolversExplorerService, 'explore', function (w) { | |
return function () { | |
let B = R7.arrayify(w.call(this)) | |
return wM1(B, G) | |
} | |
}), | |
d.call(this, ...W) | |
) | |
} | |
}) | |
} else { | |
let Z = this.loadDependency() | |
if (!Z) { | |
om.DEBUG_BUILD && | |
R7.logger.error('Apollo Integration was unable to require apollo-server-core package.') | |
return | |
} | |
R7.fill(Z.ApolloServerBase.prototype, 'constructSchema', function (d) { | |
return function () { | |
if (!this.config.resolvers) { | |
if (om.DEBUG_BUILD) { | |
if (this.config.schema) | |
R7.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.', | |
), | |
R7.logger.warn() | |
else if (this.config.modules) | |
R7.logger.warn( | |
'Apollo integration is not able to trace `ApolloServer` instances constructed via `modules` property.', | |
) | |
R7.logger.error( | |
'Skipping tracing as no resolvers found on the `ApolloServer` instance.', | |
) | |
} | |
return d.call(this) | |
} | |
let W = R7.arrayify(this.config.resolvers) | |
return (this.config.resolvers = wM1(W, G)), d.call(this) | |
} | |
}) | |
} | |
} | |
} | |
em.__initStatic() | |
function wM1(I, G) { | |
return I.map((Z) => { | |
return ( | |
Object.keys(Z).forEach((d) => { | |
Object.keys(Z[d]).forEach((W) => { | |
if (typeof Z[d][W] !== 'function') return | |
hr2(Z, d, W, G) | |
}) | |
}), | |
Z | |
) | |
}) | |
} | |
function hr2(I, G, Z, d) { | |
R7.fill(I[G], Z, function (W) { | |
return function (...w) { | |
let C = d().getScope().getSpan(), | |
V = p01([ | |
C, | |
'optionalAccess', | |
(X) => X.startChild, | |
'call', | |
(X) => | |
X({ description: `${G}.${Z}`, op: 'graphql.resolve', origin: 'auto.graphql.apollo' }), | |
]), | |
A = W.call(this, ...w) | |
if (R7.isThenable(A)) | |
return A.then((X) => { | |
return p01([V, 'optionalAccess', (Y) => Y.end, 'call', (Y) => Y()]), X | |
}) | |
return p01([V, 'optionalAccess', (X) => X.end, 'call', (X) => X()]), A | |
} | |
}) | |
} | |
BM1.Apollo = em | |
}) | |
var AM1 = _((VM1, DY) => { | |
Object.defineProperty(VM1, '__esModule', { value: !0 }) | |
var hF = X0(), | |
cr2 = [ | |
() => { | |
return new (hF.dynamicRequire(DY, './apollo').Apollo)() | |
}, | |
() => { | |
return new (hF.dynamicRequire(DY, './apollo').Apollo)({ useNestjs: !0 }) | |
}, | |
() => { | |
return new (hF.dynamicRequire(DY, './graphql').GraphQL)() | |
}, | |
() => { | |
return new (hF.dynamicRequire(DY, './mongo').Mongo)() | |
}, | |
() => { | |
return new (hF.dynamicRequire(DY, './mongo').Mongo)({ mongoose: !0 }) | |
}, | |
() => { | |
return new (hF.dynamicRequire(DY, './mysql').Mysql)() | |
}, | |
() => { | |
return new (hF.dynamicRequire(DY, './postgres').Postgres)() | |
}, | |
] | |
VM1.lazyLoadedNodePerformanceMonitoringIntegrations = cr2 | |
}) | |
var pG = _((XM1) => { | |
Object.defineProperty(XM1, '__esModule', { value: !0 }) | |
var ir2 = X0(), | |
nr2 = ir2.GLOBAL_OBJ | |
XM1.WINDOW = nr2 | |
}) | |
var n01 = _((HM1) => { | |
Object.defineProperty(HM1, '__esModule', { value: !0 }) | |
var YM1 = Y4(), | |
_M1 = X0(), | |
DM1 = rI(), | |
i01 = pG() | |
function rr2() { | |
if (i01.WINDOW.document) | |
i01.WINDOW.document.addEventListener('visibilitychange', () => { | |
let I = YM1.getActiveTransaction() | |
if (i01.WINDOW.document.hidden && I) { | |
let { op: Z, status: d } = YM1.spanToJSON(I) | |
if ( | |
(DM1.DEBUG_BUILD && | |
_M1.logger.log( | |
`[Tracing] Transaction: cancelled -> since tab moved to the background, op: ${Z}`, | |
), | |
!d) | |
) | |
I.setStatus('cancelled') | |
I.setTag('visibilitychange', 'document.hidden'), I.end() | |
} | |
}) | |
else | |
DM1.DEBUG_BUILD && | |
_M1.logger.warn( | |
'[Tracing] Could not set up background tab detection due to lack of global document', | |
) | |
} | |
HM1.registerBackgroundTabDetection = rr2 | |
}) | |
var sN = _((FM1) => { | |
Object.defineProperty(FM1, '__esModule', { value: !0 }) | |
var or2 = (I, G, Z) => { | |
let d, W | |
return (w) => { | |
if (G.value >= 0) { | |
if (w || Z) { | |
if (((W = G.value - (d || 0)), W || d === void 0)) (d = G.value), (G.delta = W), I(G) | |
} | |
} | |
} | |
} | |
FM1.bindReporter = or2 | |
}) | |
var KM1 = _((JM1) => { | |
Object.defineProperty(JM1, '__esModule', { value: !0 }) | |
var tr2 = () => { | |
return `v3-${Date.now()}-${Math.floor(Math.random() * 8999999999999) + 1000000000000}` | |
} | |
JM1.generateUniqueID = tr2 | |
}) | |
var Mv = _((gM1) => { | |
Object.defineProperty(gM1, '__esModule', { value: !0 }) | |
var vv = pG(), | |
Gs2 = () => { | |
let I = vv.WINDOW.performance.timing, | |
G = vv.WINDOW.performance.navigation.type, | |
Z = { | |
entryType: 'navigation', | |
startTime: 0, | |
type: G == 2 ? 'back_forward' : G === 1 ? 'reload' : 'navigate', | |
} | |
for (let d in I) | |
if (d !== 'navigationStart' && d !== 'toJSON') Z[d] = Math.max(I[d] - I.navigationStart, 0) | |
return Z | |
}, | |
Zs2 = () => { | |
if (vv.WINDOW.__WEB_VITALS_POLYFILL__) | |
return ( | |
vv.WINDOW.performance && | |
((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) || Gs2()) | |
) | |
else | |
return ( | |
vv.WINDOW.performance && | |
performance.getEntriesByType && | |
performance.getEntriesByType('navigation')[0] | |
) | |
} | |
gM1.getNavigationEntry = Zs2 | |
}) | |
var tm = _((NM1) => { | |
Object.defineProperty(NM1, '__esModule', { value: !0 }) | |
var Ws2 = Mv(), | |
ws2 = () => { | |
let I = Ws2.getNavigationEntry() | |
return (I && I.activationStart) || 0 | |
} | |
NM1.getActivationStart = ws2 | |
}) | |
var oN = _((QM1) => { | |
Object.defineProperty(QM1, '__esModule', { value: !0 }) | |
var zM1 = pG(), | |
Cs2 = KM1(), | |
Vs2 = tm(), | |
As2 = Mv(), | |
Xs2 = (I, G) => { | |
let Z = As2.getNavigationEntry(), | |
d = 'navigate' | |
if (Z) | |
if ( | |
(zM1.WINDOW.document && zM1.WINDOW.document.prerendering) || | |
Vs2.getActivationStart() > 0 | |
) | |
d = 'prerender' | |
else d = Z.type.replace(/_/g, '-') | |
return { | |
name: I, | |
value: typeof G === 'undefined' ? -1 : G, | |
rating: 'good', | |
delta: 0, | |
entries: [], | |
id: Cs2.generateUniqueID(), | |
navigationType: d, | |
} | |
} | |
QM1.initMetric = Xs2 | |
}) | |
var xF = _((qM1) => { | |
Object.defineProperty(qM1, '__esModule', { value: !0 }) | |
var _s2 = (I, G, Z) => { | |
try { | |
if (PerformanceObserver.supportedEntryTypes.includes(I)) { | |
let d = new PerformanceObserver((W) => { | |
G(W.getEntries()) | |
}) | |
return d.observe(Object.assign({ type: I, buffered: !0 }, Z || {})), d | |
} | |
} catch (d) {} | |
return | |
} | |
qM1.observe = _s2 | |
}) | |
var eN = _((fM1) => { | |
Object.defineProperty(fM1, '__esModule', { value: !0 }) | |
var UM1 = pG(), | |
Hs2 = (I, G) => { | |
let Z = (d) => { | |
if (d.type === 'pagehide' || UM1.WINDOW.document.visibilityState === 'hidden') { | |
if ((I(d), G)) | |
removeEventListener('visibilitychange', Z, !0), removeEventListener('pagehide', Z, !0) | |
} | |
} | |
if (UM1.WINDOW.document) | |
addEventListener('visibilitychange', Z, !0), addEventListener('pagehide', Z, !0) | |
} | |
fM1.onHidden = Hs2 | |
}) | |
var EM1 = _((RM1) => { | |
Object.defineProperty(RM1, '__esModule', { value: !0 }) | |
var Js2 = sN(), | |
Ks2 = oN(), | |
gs2 = xF(), | |
Ns2 = eN(), | |
zs2 = (I, G = {}) => { | |
let Z = Ks2.initMetric('CLS', 0), | |
d, | |
W = 0, | |
w = [], | |
B = (V) => { | |
V.forEach((A) => { | |
if (!A.hadRecentInput) { | |
let X = w[0], | |
Y = w[w.length - 1] | |
if ( | |
W && | |
w.length !== 0 && | |
A.startTime - Y.startTime < 1000 && | |
A.startTime - X.startTime < 5000 | |
) | |
(W += A.value), w.push(A) | |
else (W = A.value), (w = [A]) | |
if (W > Z.value) { | |
if (((Z.value = W), (Z.entries = w), d)) d() | |
} | |
} | |
}) | |
}, | |
C = gs2.observe('layout-shift', B) | |
if (C) { | |
d = Js2.bindReporter(I, Z, G.reportAllChanges) | |
let V = () => { | |
B(C.takeRecords()), d(!0) | |
} | |
return Ns2.onHidden(V), V | |
} | |
return | |
} | |
RM1.onCLS = zs2 | |
}) | |
var Zb = _((vM1) => { | |
Object.defineProperty(vM1, '__esModule', { value: !0 }) | |
var Ib = pG(), | |
qs2 = eN(), | |
Gb = -1, | |
Us2 = () => { | |
if (Ib.WINDOW.document && Ib.WINDOW.document.visibilityState) | |
Gb = | |
Ib.WINDOW.document.visibilityState === 'hidden' && !Ib.WINDOW.document.prerendering | |
? 0 | |
: 1 / 0 | |
}, | |
fs2 = () => { | |
qs2.onHidden(({ timeStamp: I }) => { | |
Gb = I | |
}, !0) | |
}, | |
Rs2 = () => { | |
if (Gb < 0) Us2(), fs2() | |
return { | |
get firstHiddenTime() { | |
return Gb | |
}, | |
} | |
} | |
vM1.getVisibilityWatcher = Rs2 | |
}) | |
var SM1 = _((MM1) => { | |
Object.defineProperty(MM1, '__esModule', { value: !0 }) | |
var vs2 = sN(), | |
Ms2 = Zb(), | |
Ss2 = oN(), | |
Ls2 = xF(), | |
$s2 = eN(), | |
ys2 = (I) => { | |
let G = Ms2.getVisibilityWatcher(), | |
Z = Ss2.initMetric('FID'), | |
d, | |
W = (C) => { | |
if (C.startTime < G.firstHiddenTime) | |
(Z.value = C.processingStart - C.startTime), Z.entries.push(C), d(!0) | |
}, | |
w = (C) => { | |
C.forEach(W) | |
}, | |
B = Ls2.observe('first-input', w) | |
if (((d = vs2.bindReporter(I, Z)), B)) | |
$s2.onHidden(() => { | |
w(B.takeRecords()), B.disconnect() | |
}, !0) | |
} | |
MM1.onFID = ys2 | |
}) | |
var yM1 = _(($M1) => { | |
Object.defineProperty($M1, '__esModule', { value: !0 }) | |
var Os2 = xF(), | |
LM1 = 0, | |
a01 = 1 / 0, | |
db = 0, | |
us2 = (I) => { | |
I.forEach((G) => { | |
if (G.interactionId) | |
(a01 = Math.min(a01, G.interactionId)), | |
(db = Math.max(db, G.interactionId)), | |
(LM1 = db ? (db - a01) / 7 + 1 : 0) | |
}) | |
}, | |
r01, | |
Ts2 = () => { | |
return r01 ? LM1 : performance.interactionCount || 0 | |
}, | |
ms2 = () => { | |
if ('interactionCount' in performance || r01) return | |
r01 = Os2.observe('event', us2, { type: 'event', buffered: !0, durationThreshold: 0 }) | |
} | |
$M1.getInteractionCount = Ts2 | |
$M1.initInteractionCountPolyfill = ms2 | |
}) | |
var bM1 = _((mM1) => { | |
Object.defineProperty(mM1, '__esModule', { value: !0 }) | |
var js2 = sN(), | |
ks2 = oN(), | |
hs2 = xF(), | |
xs2 = eN(), | |
uM1 = yM1(), | |
TM1 = () => { | |
return uM1.getInteractionCount() | |
}, | |
PM1 = 10, | |
bV = [], | |
s01 = {}, | |
OM1 = (I) => { | |
let G = bV[bV.length - 1], | |
Z = s01[I.interactionId] | |
if (Z || bV.length < PM1 || I.duration > G.latency) { | |
if (Z) Z.entries.push(I), (Z.latency = Math.max(Z.latency, I.duration)) | |
else { | |
let d = { id: I.interactionId, latency: I.duration, entries: [I] } | |
;(s01[d.id] = d), bV.push(d) | |
} | |
bV.sort((d, W) => W.latency - d.latency), | |
bV.splice(PM1).forEach((d) => { | |
delete s01[d.id] | |
}) | |
} | |
}, | |
cs2 = () => { | |
let I = Math.min(bV.length - 1, Math.floor(TM1() / 50)) | |
return bV[I] | |
}, | |
ps2 = (I, G) => { | |
;(G = G || {}), uM1.initInteractionCountPolyfill() | |
let Z = ks2.initMetric('INP'), | |
d, | |
W = (B) => { | |
B.forEach((V) => { | |
if (V.interactionId) OM1(V) | |
if (V.entryType === 'first-input') { | |
if ( | |
!bV.some((X) => { | |
return X.entries.some((Y) => { | |
return V.duration === Y.duration && V.startTime === Y.startTime | |
}) | |
}) | |
) | |
OM1(V) | |
} | |
}) | |
let C = cs2() | |
if (C && C.latency !== Z.value) (Z.value = C.latency), (Z.entries = C.entries), d() | |
}, | |
w = hs2.observe('event', W, { durationThreshold: G.durationThreshold || 40 }) | |
if (((d = js2.bindReporter(I, Z, G.reportAllChanges)), w)) | |
w.observe({ type: 'first-input', buffered: !0 }), | |
xs2.onHidden(() => { | |
if ((W(w.takeRecords()), Z.value < 0 && TM1() > 0)) (Z.value = 0), (Z.entries = []) | |
d(!0) | |
}) | |
} | |
mM1.onINP = ps2 | |
}) | |
var kM1 = _((jM1) => { | |
Object.defineProperty(jM1, '__esModule', { value: !0 }) | |
var ns2 = pG(), | |
as2 = sN(), | |
rs2 = tm(), | |
ss2 = Zb(), | |
os2 = oN(), | |
es2 = xF(), | |
ts2 = eN(), | |
lM1 = {}, | |
Io2 = (I) => { | |
let G = ss2.getVisibilityWatcher(), | |
Z = os2.initMetric('LCP'), | |
d, | |
W = (B) => { | |
let C = B[B.length - 1] | |
if (C) { | |
let V = Math.max(C.startTime - rs2.getActivationStart(), 0) | |
if (V < G.firstHiddenTime) (Z.value = V), (Z.entries = [C]), d() | |
} | |
}, | |
w = es2.observe('largest-contentful-paint', W) | |
if (w) { | |
d = as2.bindReporter(I, Z) | |
let B = () => { | |
if (!lM1[Z.id]) W(w.takeRecords()), w.disconnect(), (lM1[Z.id] = !0), d(!0) | |
} | |
return ( | |
['keydown', 'click'].forEach((C) => { | |
if (ns2.WINDOW.document) addEventListener(C, B, { once: !0, capture: !0 }) | |
}), | |
ts2.onHidden(B, !0), | |
B | |
) | |
} | |
return | |
} | |
jM1.onLCP = Io2 | |
}) | |
var xM1 = _((hM1) => { | |
Object.defineProperty(hM1, '__esModule', { value: !0 }) | |
var o01 = pG(), | |
Zo2 = sN(), | |
do2 = tm(), | |
Wo2 = Mv(), | |
wo2 = oN(), | |
e01 = (I) => { | |
if (!o01.WINDOW.document) return | |
if (o01.WINDOW.document.prerendering) addEventListener('prerenderingchange', () => e01(I), !0) | |
else if (o01.WINDOW.document.readyState !== 'complete') | |
addEventListener('load', () => e01(I), !0) | |
else setTimeout(I, 0) | |
}, | |
Bo2 = (I, G) => { | |
G = G || {} | |
let Z = wo2.initMetric('TTFB'), | |
d = Zo2.bindReporter(I, Z, G.reportAllChanges) | |
e01(() => { | |
let W = Wo2.getNavigationEntry() | |
if (W) { | |
if ( | |
((Z.value = Math.max(W.responseStart - do2.getActivationStart(), 0)), | |
Z.value < 0 || Z.value > performance.now()) | |
) | |
return | |
;(Z.entries = [W]), d(!0) | |
} | |
}) | |
} | |
hM1.onTTFB = Bo2 | |
}) | |
var Iz = _((eM1) => { | |
Object.defineProperty(eM1, '__esModule', { value: !0 }) | |
var cM1 = X0(), | |
Vo2 = rI(), | |
Ao2 = EM1(), | |
Xo2 = SM1(), | |
Yo2 = bM1(), | |
_o2 = kM1(), | |
Do2 = xF(), | |
Ho2 = xM1(), | |
Sv = {}, | |
Wb = {}, | |
pM1, | |
iM1, | |
nM1, | |
aM1, | |
rM1 | |
function Fo2(I, G = !1) { | |
return Lv('cls', I, Qo2, pM1, G) | |
} | |
function Jo2(I, G = !1) { | |
return Lv('lcp', I, Uo2, nM1, G) | |
} | |
function Ko2(I) { | |
return Lv('ttfb', I, fo2, aM1) | |
} | |
function go2(I) { | |
return Lv('fid', I, qo2, iM1) | |
} | |
function No2(I) { | |
return Lv('inp', I, Ro2, rM1) | |
} | |
function zo2(I, G) { | |
if ((sM1(I, G), !Wb[I])) Eo2(I), (Wb[I] = !0) | |
return oM1(I, G) | |
} | |
function tN(I, G) { | |
let Z = Sv[I] | |
if (!Z || !Z.length) return | |
for (let d of Z) | |
try { | |
d(G) | |
} catch (W) { | |
Vo2.DEBUG_BUILD && | |
cM1.logger.error( | |
`Error while triggering instrumentation handler. | |
Type: ${I} | |
Name: ${cM1.getFunctionName(d)} | |
Error:`, | |
W, | |
) | |
} | |
} | |
function Qo2() { | |
return Ao2.onCLS( | |
(I) => { | |
tN('cls', { metric: I }), (pM1 = I) | |
}, | |
{ reportAllChanges: !0 }, | |
) | |
} | |
function qo2() { | |
return Xo2.onFID((I) => { | |
tN('fid', { metric: I }), (iM1 = I) | |
}) | |
} | |
function Uo2() { | |
return _o2.onLCP((I) => { | |
tN('lcp', { metric: I }), (nM1 = I) | |
}) | |
} | |
function fo2() { | |
return Ho2.onTTFB((I) => { | |
tN('ttfb', { metric: I }), (aM1 = I) | |
}) | |
} | |
function Ro2() { | |
return Yo2.onINP((I) => { | |
tN('inp', { metric: I }), (rM1 = I) | |
}) | |
} | |
function Lv(I, G, Z, d, W = !1) { | |
sM1(I, G) | |
let w | |
if (!Wb[I]) (w = Z()), (Wb[I] = !0) | |
if (d) G({ metric: d }) | |
return oM1(I, G, W ? w : void 0) | |
} | |
function Eo2(I) { | |
let G = {} | |
if (I === 'event') G.durationThreshold = 0 | |
Do2.observe( | |
I, | |
(Z) => { | |
tN(I, { entries: Z }) | |
}, | |
G, | |
) | |
} | |
function sM1(I, G) { | |
;(Sv[I] = Sv[I] || []), Sv[I].push(G) | |
} | |
function oM1(I, G, Z) { | |
return () => { | |
if (Z) Z() | |
let d = Sv[I] | |
if (!d) return | |
let W = d.indexOf(G) | |
if (W !== -1) d.splice(W, 1) | |
} | |
} | |
eM1.addClsInstrumentationHandler = Fo2 | |
eM1.addFidInstrumentationHandler = go2 | |
eM1.addInpInstrumentationHandler = No2 | |
eM1.addLcpInstrumentationHandler = Jo2 | |
eM1.addPerformanceInstrumentationHandler = zo2 | |
eM1.addTtfbInstrumentationHandler = Ko2 | |
}) | |
var IS1 = _((tM1) => { | |
Object.defineProperty(tM1, '__esModule', { value: !0 }) | |
function Po2(I) { | |
return typeof I === 'number' && isFinite(I) | |
} | |
function Oo2(I, { startTimestamp: G, ...Z }) { | |
if (G && I.startTimestamp > G) I.startTimestamp = G | |
return I.startChild({ startTimestamp: G, ...Z }) | |
} | |
tM1._startChild = Oo2 | |
tM1.isMeasurementValue = Po2 | |
}) | |
var G21 = _((wS1) => { | |
Object.defineProperty(wS1, '__esModule', { value: !0 }) | |
var lV = Y4(), | |
Q9 = X0(), | |
iG = rI(), | |
cF = Iz(), | |
jV = pG(), | |
mo2 = Zb(), | |
kV = IS1(), | |
bo2 = Mv(), | |
lo2 = 2147483647 | |
function i6(I) { | |
return I / 1000 | |
} | |
function I21() { | |
return jV.WINDOW && jV.WINDOW.addEventListener && jV.WINDOW.performance | |
} | |
var GS1 = 0, | |
j3 = {}, | |
NB, | |
$v | |
function jo2() { | |
let I = I21() | |
if (I && Q9.browserPerformanceTimeOrigin) { | |
if (I.mark) jV.WINDOW.performance.mark('sentry-tracing-init') | |
let G = io2(), | |
Z = co2(), | |
d = po2(), | |
W = no2() | |
return () => { | |
G(), Z(), d(), W() | |
} | |
} | |
return () => { | |
return | |
} | |
} | |
function ko2() { | |
cF.addPerformanceInstrumentationHandler('longtask', ({ entries: I }) => { | |
for (let G of I) { | |
let Z = lV.getActiveTransaction() | |
if (!Z) return | |
let d = i6(Q9.browserPerformanceTimeOrigin + G.startTime), | |
W = i6(G.duration) | |
Z.startChild({ | |
description: 'Main UI thread blocked', | |
op: 'ui.long-task', | |
origin: 'auto.ui.browser.metrics', | |
startTimestamp: d, | |
endTimestamp: d + W, | |
}) | |
} | |
}) | |
} | |
function ho2() { | |
cF.addPerformanceInstrumentationHandler('event', ({ entries: I }) => { | |
for (let G of I) { | |
let Z = lV.getActiveTransaction() | |
if (!Z) return | |
if (G.name === 'click') { | |
let d = i6(Q9.browserPerformanceTimeOrigin + G.startTime), | |
W = i6(G.duration), | |
w = { | |
description: Q9.htmlTreeAsString(G.target), | |
op: `ui.interaction.${G.name}`, | |
origin: 'auto.ui.browser.metrics', | |
startTimestamp: d, | |
endTimestamp: d + W, | |
}, | |
B = Q9.getComponentName(G.target) | |
if (B) w.attributes = { 'ui.component_name': B } | |
Z.startChild(w) | |
} | |
} | |
}) | |
} | |
function xo2(I, G) { | |
if (I21() && Q9.browserPerformanceTimeOrigin) { | |
let d = ao2(I, G) | |
return () => { | |
d() | |
} | |
} | |
return () => { | |
return | |
} | |
} | |
function co2() { | |
return cF.addClsInstrumentationHandler(({ metric: I }) => { | |
let G = I.entries[I.entries.length - 1] | |
if (!G) return | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding CLS'), | |
(j3.cls = { value: I.value, unit: '' }), | |
($v = G) | |
}, !0) | |
} | |
function po2() { | |
return cF.addLcpInstrumentationHandler(({ metric: I }) => { | |
let G = I.entries[I.entries.length - 1] | |
if (!G) return | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding LCP'), | |
(j3.lcp = { value: I.value, unit: 'millisecond' }), | |
(NB = G) | |
}, !0) | |
} | |
function io2() { | |
return cF.addFidInstrumentationHandler(({ metric: I }) => { | |
let G = I.entries[I.entries.length - 1] | |
if (!G) return | |
let Z = i6(Q9.browserPerformanceTimeOrigin), | |
d = i6(G.startTime) | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FID'), | |
(j3.fid = { value: I.value, unit: 'millisecond' }), | |
(j3['mark.fid'] = { value: Z + d, unit: 'second' }) | |
}) | |
} | |
function no2() { | |
return cF.addTtfbInstrumentationHandler(({ metric: I }) => { | |
if (!I.entries[I.entries.length - 1]) return | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding TTFB'), | |
(j3.ttfb = { value: I.value, unit: 'millisecond' }) | |
}) | |
} | |
var ZS1 = { | |
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 ao2(I, G) { | |
return cF.addInpInstrumentationHandler(({ metric: Z }) => { | |
if (Z.value === void 0) return | |
let d = Z.entries.find(($) => $.duration === Z.value && ZS1[$.name] !== void 0), | |
W = lV.getClient() | |
if (!d || !W) return | |
let w = ZS1[d.name], | |
B = W.getOptions(), | |
C = i6(Q9.browserPerformanceTimeOrigin + d.startTime), | |
V = i6(Z.value), | |
A = d.interactionId !== void 0 ? I[d.interactionId] : void 0 | |
if (A === void 0) return | |
let { routeName: X, parentContext: Y, activeTransaction: H, user: J, replayId: K } = A, | |
g = J !== void 0 ? J.email || J.id || J.ip_address : void 0, | |
z = H !== void 0 ? H.getProfileId() : void 0, | |
f = new lV.Span({ | |
startTimestamp: C, | |
endTimestamp: C + V, | |
op: `ui.interaction.${w}`, | |
name: Q9.htmlTreeAsString(d.target), | |
attributes: { | |
release: B.release, | |
environment: B.environment, | |
transaction: X, | |
...(g !== void 0 && g !== '' ? { user: g } : {}), | |
...(z !== void 0 ? { profile_id: z } : {}), | |
...(K !== void 0 ? { replay_id: K } : {}), | |
}, | |
exclusiveTime: Z.value, | |
measurements: { inp: { value: Z.value, unit: 'millisecond' } }, | |
}), | |
S = Ge2(Y, B, G) | |
if (!S) return | |
if (Math.random() < S) { | |
let $ = f ? lV.createSpanEnvelope([f], W.getDsn()) : void 0, | |
L = W && W.getTransport() | |
if (L && $) | |
L.send($).then(null, (T) => { | |
iG.DEBUG_BUILD && Q9.logger.error('Error while sending interaction:', T) | |
}) | |
return | |
} | |
}) | |
} | |
function ro2(I) { | |
let G = I21() | |
if (!G || !jV.WINDOW.performance.getEntries || !Q9.browserPerformanceTimeOrigin) return | |
iG.DEBUG_BUILD && Q9.logger.log('[Tracing] Adding & adjusting spans using Performance API') | |
let Z = i6(Q9.browserPerformanceTimeOrigin), | |
d = G.getEntries(), | |
{ op: W, start_timestamp: w } = lV.spanToJSON(I) | |
if ( | |
(d.slice(GS1).forEach((B) => { | |
let C = i6(B.startTime), | |
V = i6(B.duration) | |
if (I.op === 'navigation' && w && Z + C < w) return | |
switch (B.entryType) { | |
case 'navigation': { | |
so2(I, B, Z) | |
break | |
} | |
case 'mark': | |
case 'paint': | |
case 'measure': { | |
dS1(I, B, C, V, Z) | |
let A = mo2.getVisibilityWatcher(), | |
X = B.startTime < A.firstHiddenTime | |
if (B.name === 'first-paint' && X) | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FP'), | |
(j3.fp = { value: B.startTime, unit: 'millisecond' }) | |
if (B.name === 'first-contentful-paint' && X) | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding FCP'), | |
(j3.fcp = { value: B.startTime, unit: 'millisecond' }) | |
break | |
} | |
case 'resource': { | |
WS1(I, B, B.name, C, V, Z) | |
break | |
} | |
} | |
}), | |
(GS1 = Math.max(d.length - 1, 0)), | |
eo2(I), | |
W === 'pageload') | |
) { | |
Ie2(j3), | |
['fcp', 'fp', 'lcp'].forEach((C) => { | |
if (!j3[C] || !w || Z >= w) return | |
let V = j3[C].value, | |
A = Z + i6(V), | |
X = Math.abs((A - w) * 1000), | |
Y = X - V | |
iG.DEBUG_BUILD && | |
Q9.logger.log(`[Measurements] Normalized ${C} from ${V} to ${X} (${Y})`), | |
(j3[C].value = X) | |
}) | |
let B = j3['mark.fid'] | |
if (B && j3.fid) | |
kV._startChild(I, { | |
description: 'first input delay', | |
endTimestamp: B.value + i6(j3.fid.value), | |
op: 'ui.action', | |
origin: 'auto.ui.browser.metrics', | |
startTimestamp: B.value, | |
}), | |
delete j3['mark.fid'] | |
if (!('fcp' in j3)) delete j3.cls | |
Object.keys(j3).forEach((C) => { | |
lV.setMeasurement(C, j3[C].value, j3[C].unit) | |
}), | |
to2(I) | |
} | |
;(NB = void 0), ($v = void 0), (j3 = {}) | |
} | |
function dS1(I, G, Z, d, W) { | |
let w = W + Z, | |
B = w + d | |
return ( | |
kV._startChild(I, { | |
description: G.name, | |
endTimestamp: B, | |
op: G.entryType, | |
origin: 'auto.resource.browser.metrics', | |
startTimestamp: w, | |
}), | |
w | |
) | |
} | |
function so2(I, G, Z) { | |
;['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'].forEach((d) => { | |
wb(I, G, d, Z) | |
}), | |
wb(I, G, 'secureConnection', Z, 'TLS/SSL', 'connectEnd'), | |
wb(I, G, 'fetch', Z, 'cache', 'domainLookupStart'), | |
wb(I, G, 'domainLookup', Z, 'DNS'), | |
oo2(I, G, Z) | |
} | |
function wb(I, G, Z, d, W, w) { | |
let B = w ? G[w] : G[`${Z}End`], | |
C = G[`${Z}Start`] | |
if (!C || !B) return | |
kV._startChild(I, { | |
op: 'browser', | |
origin: 'auto.browser.browser.metrics', | |
description: W || Z, | |
startTimestamp: d + i6(C), | |
endTimestamp: d + i6(B), | |
}) | |
} | |
function oo2(I, G, Z) { | |
if (G.responseEnd) | |
kV._startChild(I, { | |
op: 'browser', | |
origin: 'auto.browser.browser.metrics', | |
description: 'request', | |
startTimestamp: Z + i6(G.requestStart), | |
endTimestamp: Z + i6(G.responseEnd), | |
}), | |
kV._startChild(I, { | |
op: 'browser', | |
origin: 'auto.browser.browser.metrics', | |
description: 'response', | |
startTimestamp: Z + i6(G.responseStart), | |
endTimestamp: Z + i6(G.responseEnd), | |
}) | |
} | |
function WS1(I, G, Z, d, W, w) { | |
if (G.initiatorType === 'xmlhttprequest' || G.initiatorType === 'fetch') return | |
let B = Q9.parseUrl(Z), | |
C = {} | |
if ( | |
(t01(C, G, 'transferSize', 'http.response_transfer_size'), | |
t01(C, G, 'encodedBodySize', 'http.response_content_length'), | |
t01(C, G, 'decodedBodySize', 'http.decoded_response_content_length'), | |
'renderBlockingStatus' in G) | |
) | |
C['resource.render_blocking_status'] = G.renderBlockingStatus | |
if (B.protocol) C['url.scheme'] = B.protocol.split(':').pop() | |
if (B.host) C['server.address'] = B.host | |
C['url.same_origin'] = Z.includes(jV.WINDOW.location.origin) | |
let V = w + d, | |
A = V + W | |
kV._startChild(I, { | |
description: Z.replace(jV.WINDOW.location.origin, ''), | |
endTimestamp: A, | |
op: G.initiatorType ? `resource.${G.initiatorType}` : 'resource.other', | |
origin: 'auto.resource.browser.metrics', | |
startTimestamp: V, | |
data: C, | |
}) | |
} | |
function eo2(I) { | |
let G = jV.WINDOW.navigator | |
if (!G) return | |
let Z = G.connection | |
if (Z) { | |
if (Z.effectiveType) I.setTag('effectiveConnectionType', Z.effectiveType) | |
if (Z.type) I.setTag('connectionType', Z.type) | |
if (kV.isMeasurementValue(Z.rtt)) j3['connection.rtt'] = { value: Z.rtt, unit: 'millisecond' } | |
} | |
if (kV.isMeasurementValue(G.deviceMemory)) I.setTag('deviceMemory', `${G.deviceMemory} GB`) | |
if (kV.isMeasurementValue(G.hardwareConcurrency)) | |
I.setTag('hardwareConcurrency', String(G.hardwareConcurrency)) | |
} | |
function to2(I) { | |
if (NB) { | |
if ((iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding LCP Data'), NB.element)) | |
I.setTag('lcp.element', Q9.htmlTreeAsString(NB.element)) | |
if (NB.id) I.setTag('lcp.id', NB.id) | |
if (NB.url) I.setTag('lcp.url', NB.url.trim().slice(0, 200)) | |
I.setTag('lcp.size', NB.size) | |
} | |
if ($v && $v.sources) | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding CLS Data'), | |
$v.sources.forEach((G, Z) => I.setTag(`cls.source.${Z + 1}`, Q9.htmlTreeAsString(G.node))) | |
} | |
function t01(I, G, Z, d) { | |
let W = G[Z] | |
if (W != null && W < lo2) I[d] = W | |
} | |
function Ie2(I) { | |
let G = bo2.getNavigationEntry() | |
if (!G) return | |
let { responseStart: Z, requestStart: d } = G | |
if (d <= Z) | |
iG.DEBUG_BUILD && Q9.logger.log('[Measurements] Adding TTFB Request Time'), | |
(I['ttfb.requestTime'] = { value: Z - d, unit: 'millisecond' }) | |
} | |
function Ge2(I, G, Z) { | |
if (!lV.hasTracingEnabled(G)) return !1 | |
let d | |
if (I !== void 0 && typeof G.tracesSampler === 'function') | |
d = G.tracesSampler({ | |
transactionContext: I, | |
name: I.name, | |
parentSampled: I.parentSampled, | |
attributes: { ...I.data, ...I.attributes }, | |
location: jV.WINDOW.location, | |
}) | |
else if (I !== void 0 && I.sampled !== void 0) d = I.sampled | |
else if (typeof G.tracesSampleRate !== 'undefined') d = G.tracesSampleRate | |
else d = 1 | |
if (!lV.isValidSampleRate(d)) | |
return ( | |
iG.DEBUG_BUILD && | |
Q9.logger.warn('[Tracing] Discarding interaction span because of invalid sample rate.'), | |
!1 | |
) | |
if (d === !0) return Z | |
else if (d === !1) return 0 | |
return d * Z | |
} | |
wS1._addMeasureSpans = dS1 | |
wS1._addResourceSpans = WS1 | |
wS1.addPerformanceEntries = ro2 | |
wS1.startTrackingINP = xo2 | |
wS1.startTrackingInteractions = ho2 | |
wS1.startTrackingLongTasks = ko2 | |
wS1.startTrackingWebVitals = jo2 | |
}) | |
var Z21 = _((CS1) => { | |
Object.defineProperty(CS1, '__esModule', { value: !0 }) | |
var zB = Y4(), | |
pF = X0() | |
function Ae2(I, G, Z, d, W = 'auto.http.browser') { | |
if (!zB.hasTracingEnabled() || !I.fetchData) return | |
let w = G(I.fetchData.url) | |
if (I.endTimestamp && w) { | |
let J = I.fetchData.__span | |
if (!J) return | |
let K = d[J] | |
if (K) Ye2(K, I), delete d[J] | |
return | |
} | |
let B = zB.getCurrentScope(), | |
C = zB.getClient(), | |
{ method: V, url: A } = I.fetchData, | |
X = Xe2(A), | |
Y = X ? pF.parseUrl(X).host : void 0, | |
H = w | |
? zB.startInactiveSpan({ | |
name: `${V} ${A}`, | |
onlyIfParent: !0, | |
attributes: { | |
url: A, | |
type: 'fetch', | |
'http.method': V, | |
'http.url': X, | |
'server.address': Y, | |
[zB.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: W, | |
}, | |
op: 'http.client', | |
}) | |
: void 0 | |
if (H) (I.fetchData.__span = H.spanContext().spanId), (d[H.spanContext().spanId] = H) | |
if (Z(I.fetchData.url) && C) { | |
let J = I.args[0] | |
I.args[1] = I.args[1] || {} | |
let K = I.args[1] | |
K.headers = BS1(J, C, B, K, H) | |
} | |
return H | |
} | |
function BS1(I, G, Z, d, W) { | |
let w = W || Z.getSpan(), | |
B = zB.getIsolationScope(), | |
{ | |
traceId: C, | |
spanId: V, | |
sampled: A, | |
dsc: X, | |
} = { ...B.getPropagationContext(), ...Z.getPropagationContext() }, | |
Y = w ? zB.spanToTraceHeader(w) : pF.generateSentryTraceHeader(C, V, A), | |
H = pF.dynamicSamplingContextToSentryBaggageHeader( | |
X || | |
(w | |
? zB.getDynamicSamplingContextFromSpan(w) | |
: zB.getDynamicSamplingContextFromClient(C, G, Z)), | |
), | |
J = | |
d.headers || | |
(typeof Request !== 'undefined' && pF.isInstanceOf(I, Request) ? I.headers : void 0) | |
if (!J) return { 'sentry-trace': Y, baggage: H } | |
else if (typeof Headers !== 'undefined' && pF.isInstanceOf(J, Headers)) { | |
let K = new Headers(J) | |
if ((K.append('sentry-trace', Y), H)) K.append(pF.BAGGAGE_HEADER_NAME, H) | |
return K | |
} else if (Array.isArray(J)) { | |
let K = [...J, ['sentry-trace', Y]] | |
if (H) K.push([pF.BAGGAGE_HEADER_NAME, H]) | |
return K | |
} else { | |
let K = 'baggage' in J ? J.baggage : void 0, | |
g = [] | |
if (Array.isArray(K)) g.push(...K) | |
else if (K) g.push(K) | |
if (H) g.push(H) | |
return { ...J, 'sentry-trace': Y, baggage: g.length > 0 ? g.join(',') : void 0 } | |
} | |
} | |
function Xe2(I) { | |
try { | |
return new URL(I).href | |
} catch (G) { | |
return | |
} | |
} | |
function Ye2(I, G) { | |
if (G.response) { | |
zB.setHttpStatus(I, G.response.status) | |
let Z = G.response && G.response.headers && G.response.headers.get('content-length') | |
if (Z) { | |
let d = parseInt(Z) | |
if (d > 0) I.setAttribute('http.response_content_length', d) | |
} | |
} else if (G.error) I.setStatus('internal_error') | |
I.end() | |
} | |
CS1.addTracingHeadersToFetchRequest = BS1 | |
CS1.instrumentFetchRequest = Ae2 | |
}) | |
var Cb = _((DS1) => { | |
Object.defineProperty(DS1, '__esModule', { value: !0 }) | |
var zW = Y4(), | |
QW = X0(), | |
He2 = Z21(), | |
Fe2 = Iz(), | |
Je2 = pG(), | |
Bb = ['localhost', /^\/(?!\/)/], | |
d21 = { | |
traceFetch: !0, | |
traceXHR: !0, | |
enableHTTPTimings: !0, | |
tracingOrigins: Bb, | |
tracePropagationTargets: Bb, | |
} | |
function Ke2(I) { | |
let { | |
traceFetch: G, | |
traceXHR: Z, | |
tracePropagationTargets: d, | |
tracingOrigins: W, | |
shouldCreateSpanForRequest: w, | |
enableHTTPTimings: B, | |
} = { traceFetch: d21.traceFetch, traceXHR: d21.traceXHR, ...I }, | |
C = typeof w === 'function' ? w : (X) => !0, | |
V = (X) => XS1(X, d || W), | |
A = {} | |
if (G) | |
QW.addFetchInstrumentationHandler((X) => { | |
let Y = He2.instrumentFetchRequest(X, C, V, A) | |
if (Y) { | |
let H = _S1(X.fetchData.url), | |
J = H ? QW.parseUrl(H).host : void 0 | |
Y.setAttributes({ 'http.url': H, 'server.address': J }) | |
} | |
if (B && Y) VS1(Y) | |
}) | |
if (Z) | |
QW.addXhrInstrumentationHandler((X) => { | |
let Y = YS1(X, C, V, A) | |
if (B && Y) VS1(Y) | |
}) | |
} | |
function ge2(I) { | |
return ( | |
I.entryType === 'resource' && | |
'initiatorType' in I && | |
typeof I.nextHopProtocol === 'string' && | |
(I.initiatorType === 'fetch' || I.initiatorType === 'xmlhttprequest') | |
) | |
} | |
function VS1(I) { | |
let { url: G } = zW.spanToJSON(I).data || {} | |
if (!G || typeof G !== 'string') return | |
let Z = Fe2.addPerformanceInstrumentationHandler('resource', ({ entries: d }) => { | |
d.forEach((W) => { | |
if (ge2(W) && W.name.endsWith(G)) Ne2(W).forEach((B) => I.setAttribute(...B)), setTimeout(Z) | |
}) | |
}) | |
} | |
function AS1(I) { | |
let G = 'unknown', | |
Z = 'unknown', | |
d = '' | |
for (let W of I) { | |
if (W === '/') { | |
;[G, Z] = I.split('/') | |
break | |
} | |
if (!isNaN(Number(W))) { | |
;(G = d === 'h' ? 'http' : d), (Z = I.split(d)[1]) | |
break | |
} | |
d += W | |
} | |
if (d === I) G = d | |
return { name: G, version: Z } | |
} | |
function QB(I = 0) { | |
return ((QW.browserPerformanceTimeOrigin || performance.timeOrigin) + I) / 1000 | |
} | |
function Ne2(I) { | |
let { name: G, version: Z } = AS1(I.nextHopProtocol), | |
d = [] | |
if ( | |
(d.push(['network.protocol.version', Z], ['network.protocol.name', G]), | |
!QW.browserPerformanceTimeOrigin) | |
) | |
return d | |
return [ | |
...d, | |
['http.request.redirect_start', QB(I.redirectStart)], | |
['http.request.fetch_start', QB(I.fetchStart)], | |
['http.request.domain_lookup_start', QB(I.domainLookupStart)], | |
['http.request.domain_lookup_end', QB(I.domainLookupEnd)], | |
['http.request.connect_start', QB(I.connectStart)], | |
['http.request.secure_connection_start', QB(I.secureConnectionStart)], | |
['http.request.connection_end', QB(I.connectEnd)], | |
['http.request.request_start', QB(I.requestStart)], | |
['http.request.response_start', QB(I.responseStart)], | |
['http.request.response_end', QB(I.responseEnd)], | |
] | |
} | |
function XS1(I, G) { | |
return QW.stringMatchesSomePattern(I, G || Bb) | |
} | |
function YS1(I, G, Z, d) { | |
let W = I.xhr, | |
w = W && W[QW.SENTRY_XHR_DATA_KEY] | |
if (!zW.hasTracingEnabled() || !W || W.__sentry_own_request__ || !w) return | |
let B = G(w.url) | |
if (I.endTimestamp && B) { | |
let J = W.__sentry_xhr_span_id__ | |
if (!J) return | |
let K = d[J] | |
if (K && w.status_code !== void 0) zW.setHttpStatus(K, w.status_code), K.end(), delete d[J] | |
return | |
} | |
let C = zW.getCurrentScope(), | |
V = zW.getIsolationScope(), | |
A = _S1(w.url), | |
X = A ? QW.parseUrl(A).host : void 0, | |
Y = B | |
? zW.startInactiveSpan({ | |
name: `${w.method} ${w.url}`, | |
onlyIfParent: !0, | |
attributes: { | |
type: 'xhr', | |
'http.method': w.method, | |
'http.url': A, | |
url: w.url, | |
'server.address': X, | |
[zW.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser', | |
}, | |
op: 'http.client', | |
}) | |
: void 0 | |
if (Y) (W.__sentry_xhr_span_id__ = Y.spanContext().spanId), (d[W.__sentry_xhr_span_id__] = Y) | |
let H = zW.getClient() | |
if (W.setRequestHeader && Z(w.url) && H) { | |
let { | |
traceId: J, | |
spanId: K, | |
sampled: g, | |
dsc: z, | |
} = { ...V.getPropagationContext(), ...C.getPropagationContext() }, | |
f = Y ? zW.spanToTraceHeader(Y) : QW.generateSentryTraceHeader(J, K, g), | |
S = QW.dynamicSamplingContextToSentryBaggageHeader( | |
z || | |
(Y | |
? zW.getDynamicSamplingContextFromSpan(Y) | |
: zW.getDynamicSamplingContextFromClient(J, H, C)), | |
) | |
ze2(W, f, S) | |
} | |
return Y | |
} | |
function ze2(I, G, Z) { | |
try { | |
if ((I.setRequestHeader('sentry-trace', G), Z)) I.setRequestHeader(QW.BAGGAGE_HEADER_NAME, Z) | |
} catch (d) {} | |
} | |
function _S1(I) { | |
try { | |
return new URL(I, Je2.WINDOW.location.origin).href | |
} catch (G) { | |
return | |
} | |
} | |
DS1.DEFAULT_TRACE_PROPAGATION_TARGETS = Bb | |
DS1.defaultRequestInstrumentationOptions = d21 | |
DS1.extractNetworkProtocol = AS1 | |
DS1.instrumentOutgoingRequests = Ke2 | |
DS1.shouldAttachHeaders = XS1 | |
DS1.xhrCallback = YS1 | |
}) | |
var JS1 = _((FS1) => { | |
Object.defineProperty(FS1, '__esModule', { value: !0 }) | |
var yv = X0(), | |
HS1 = rI(), | |
Pv = pG() | |
function ve2(I, G = !0, Z = !0) { | |
if (!Pv.WINDOW || !Pv.WINDOW.location) { | |
HS1.DEBUG_BUILD && | |
yv.logger.warn('Could not initialize routing instrumentation due to invalid location') | |
return | |
} | |
let d = Pv.WINDOW.location.href, | |
W | |
if (G) | |
W = I({ | |
name: Pv.WINDOW.location.pathname, | |
startTimestamp: yv.browserPerformanceTimeOrigin | |
? yv.browserPerformanceTimeOrigin / 1000 | |
: void 0, | |
op: 'pageload', | |
origin: 'auto.pageload.browser', | |
metadata: { source: 'url' }, | |
}) | |
if (Z) | |
yv.addHistoryInstrumentationHandler(({ to: w, from: B }) => { | |
if (B === void 0 && d && d.indexOf(w) !== -1) { | |
d = void 0 | |
return | |
} | |
if (B !== w) { | |
if (((d = void 0), W)) | |
HS1.DEBUG_BUILD && | |
yv.logger.log(`[Tracing] Finishing current transaction with op: ${W.op}`), | |
W.end() | |
W = I({ | |
name: Pv.WINDOW.location.pathname, | |
op: 'navigation', | |
origin: 'auto.navigation.browser', | |
metadata: { source: 'url' }, | |
}) | |
} | |
}) | |
} | |
FS1.instrumentRoutingWithDefaults = ve2 | |
}) | |
var US1 = _((qS1) => { | |
Object.defineProperty(qS1, '__esModule', { value: !0 }) | |
var qW = Y4(), | |
hV = X0(), | |
HY = rI(), | |
Se2 = n01(), | |
KS1 = Iz(), | |
Ov = G21(), | |
NS1 = Cb(), | |
Le2 = JS1(), | |
iF = pG(), | |
zS1 = 'BrowserTracing', | |
$e2 = { | |
...qW.TRACING_DEFAULTS, | |
markBackgroundTransactions: !0, | |
routingInstrumentation: Le2.instrumentRoutingWithDefaults, | |
startTransactionOnLocationChange: !0, | |
startTransactionOnPageLoad: !0, | |
enableLongTask: !0, | |
enableInp: !1, | |
interactionsSampleRate: 1, | |
_experiments: {}, | |
...NS1.defaultRequestInstrumentationOptions, | |
}, | |
gS1 = 10 | |
class QS1 { | |
constructor(I) { | |
if ( | |
((this.name = zS1), | |
(this._hasSetTracePropagationTargets = !1), | |
qW.addTracingExtensions(), | |
HY.DEBUG_BUILD) | |
) | |
this._hasSetTracePropagationTargets = !!( | |
I && | |
(I.tracePropagationTargets || I.tracingOrigins) | |
) | |
if (((this.options = { ...$e2, ...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 = Ov.startTrackingWebVitals()), | |
(this._interactionIdToRouteNameMapping = {}), | |
this.options.enableInp) | |
) | |
Ov.startTrackingINP( | |
this._interactionIdToRouteNameMapping, | |
this.options.interactionsSampleRate, | |
) | |
if (this.options.enableLongTask) Ov.startTrackingLongTasks() | |
if (this.options._experiments.enableInteractions) Ov.startTrackingInteractions() | |
this._latestRoute = { name: void 0, context: void 0 } | |
} | |
setupOnce(I, G) { | |
this._getCurrentHub = G | |
let d = G().getClient(), | |
W = d && d.getOptions(), | |
{ | |
routingInstrumentation: w, | |
startTransactionOnLocationChange: B, | |
startTransactionOnPageLoad: C, | |
markBackgroundTransactions: V, | |
traceFetch: A, | |
traceXHR: X, | |
shouldCreateSpanForRequest: Y, | |
enableHTTPTimings: H, | |
_experiments: J, | |
} = this.options, | |
K = W && W.tracePropagationTargets, | |
g = K || this.options.tracePropagationTargets | |
if (HY.DEBUG_BUILD && this._hasSetTracePropagationTargets && K) | |
hV.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( | |
(z) => { | |
let f = this._createRouteTransaction(z) | |
return ( | |
this.options._experiments.onStartRouteTransaction && | |
this.options._experiments.onStartRouteTransaction(f, z, G), | |
f | |
) | |
}, | |
C, | |
B, | |
), | |
V) | |
) | |
Se2.registerBackgroundTabDetection() | |
if (J.enableInteractions) this._registerInteractionListener() | |
if (this.options.enableInp) this._registerInpInteractionListener() | |
NS1.instrumentOutgoingRequests({ | |
traceFetch: A, | |
traceXHR: X, | |
tracePropagationTargets: g, | |
shouldCreateSpanForRequest: Y, | |
enableHTTPTimings: H, | |
}) | |
} | |
_createRouteTransaction(I) { | |
if (!this._getCurrentHub) { | |
HY.DEBUG_BUILD && | |
hV.logger.warn( | |
`[Tracing] Did not create ${I.op} transaction because _getCurrentHub is invalid.`, | |
) | |
return | |
} | |
let G = this._getCurrentHub(), | |
{ beforeNavigate: Z, idleTimeout: d, finalTimeout: W, heartbeatInterval: w } = this.options, | |
B = I.op === 'pageload', | |
C | |
if (B) { | |
let H = B ? W21('sentry-trace') : '', | |
J = B ? W21('baggage') : void 0, | |
{ | |
traceId: K, | |
dsc: g, | |
parentSpanId: z, | |
sampled: f, | |
} = hV.propagationContextFromHeaders(H, J) | |
C = { | |
traceId: K, | |
parentSpanId: z, | |
parentSampled: f, | |
...I, | |
metadata: { ...I.metadata, dynamicSamplingContext: g }, | |
trimEnd: !0, | |
} | |
} else C = { trimEnd: !0, ...I } | |
let V = typeof Z === 'function' ? Z(C) : C, | |
A = V === void 0 ? { ...C, sampled: !1 } : V | |
if ( | |
((A.metadata = A.name !== C.name ? { ...A.metadata, source: 'custom' } : A.metadata), | |
(this._latestRoute.name = A.name), | |
(this._latestRoute.context = A), | |
A.sampled === !1) | |
) | |
HY.DEBUG_BUILD && | |
hV.logger.log(`[Tracing] Will not send ${A.op} transaction because of beforeNavigate.`) | |
HY.DEBUG_BUILD && hV.logger.log(`[Tracing] Starting ${A.op} transaction on scope`) | |
let { location: X } = iF.WINDOW, | |
Y = qW.startIdleTransaction(G, A, d, W, !0, { location: X }, w, B) | |
if (B) { | |
if (iF.WINDOW.document) { | |
if ( | |
(iF.WINDOW.document.addEventListener('readystatechange', () => { | |
if (['interactive', 'complete'].includes(iF.WINDOW.document.readyState)) | |
Y.sendAutoFinishSignal() | |
}), | |
['interactive', 'complete'].includes(iF.WINDOW.document.readyState)) | |
) | |
Y.sendAutoFinishSignal() | |
} | |
} | |
return ( | |
Y.registerBeforeFinishCallback((H) => { | |
this._collectWebVitals(), Ov.addPerformanceEntries(H) | |
}), | |
Y | |
) | |
} | |
_registerInteractionListener() { | |
let I, | |
G = () => { | |
let { idleTimeout: Z, finalTimeout: d, heartbeatInterval: W } = this.options, | |
w = 'ui.action.click', | |
B = qW.getActiveTransaction() | |
if (B && B.op && ['navigation', 'pageload'].includes(B.op)) { | |
HY.DEBUG_BUILD && | |
hV.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) { | |
HY.DEBUG_BUILD && | |
hV.logger.warn( | |
'[Tracing] Did not create ui.action.click transaction because _getCurrentHub is invalid.', | |
) | |
return | |
} | |
if (!this._latestRoute.name) { | |
HY.DEBUG_BUILD && | |
hV.logger.warn( | |
'[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.', | |
) | |
return | |
} | |
let C = this._getCurrentHub(), | |
{ location: V } = iF.WINDOW, | |
A = { | |
name: this._latestRoute.name, | |
op: 'ui.action.click', | |
trimEnd: !0, | |
data: { | |
[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: this._latestRoute.context | |
? ye2(this._latestRoute.context) | |
: 'url', | |
}, | |
} | |
I = qW.startIdleTransaction(C, A, Z, d, !0, { location: V }, W) | |
} | |
;['click'].forEach((Z) => { | |
if (iF.WINDOW.document) addEventListener(Z, G, { once: !1, capture: !0 }) | |
}) | |
} | |
_registerInpInteractionListener() { | |
let I = ({ entries: G }) => { | |
let Z = qW.getClient(), | |
d = | |
Z !== void 0 && Z.getIntegrationByName !== void 0 | |
? Z.getIntegrationByName('Replay') | |
: void 0, | |
W = d !== void 0 ? d.getReplayId() : void 0, | |
w = qW.getActiveTransaction(), | |
B = qW.getCurrentScope(), | |
C = B !== void 0 ? B.getUser() : void 0 | |
G.forEach((V) => { | |
if (Pe2(V)) { | |
let A = V.interactionId | |
if (A === void 0) return | |
let X = this._interactionIdToRouteNameMapping[A], | |
Y = V.duration, | |
H = V.startTime, | |
J = Object.keys(this._interactionIdToRouteNameMapping), | |
K = | |
J.length > 0 | |
? J.reduce((g, z) => { | |
return this._interactionIdToRouteNameMapping[g].duration < | |
this._interactionIdToRouteNameMapping[z].duration | |
? g | |
: z | |
}) | |
: void 0 | |
if (V.entryType === 'first-input') { | |
if ( | |
J.map((z) => this._interactionIdToRouteNameMapping[z]).some((z) => { | |
return z.duration === Y && z.startTime === H | |
}) | |
) | |
return | |
} | |
if (!A) return | |
if (X) X.duration = Math.max(X.duration, Y) | |
else if ( | |
J.length < gS1 || | |
K === void 0 || | |
Y > this._interactionIdToRouteNameMapping[K].duration | |
) { | |
let g = this._latestRoute.name, | |
z = this._latestRoute.context | |
if (g && z) { | |
if (K && Object.keys(this._interactionIdToRouteNameMapping).length >= gS1) | |
delete this._interactionIdToRouteNameMapping[K] | |
this._interactionIdToRouteNameMapping[A] = { | |
routeName: g, | |
duration: Y, | |
parentContext: z, | |
user: C, | |
activeTransaction: w, | |
replayId: W, | |
startTime: H, | |
} | |
} | |
} | |
} | |
}) | |
} | |
KS1.addPerformanceInstrumentationHandler('event', I), | |
KS1.addPerformanceInstrumentationHandler('first-input', I) | |
} | |
} | |
function W21(I) { | |
let G = hV.getDomElement(`meta[name=${I}]`) | |
return G ? G.getAttribute('content') : void 0 | |
} | |
function ye2(I) { | |
let G = I.attributes && I.attributes[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
Z = I.data && I.data[qW.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
d = I.metadata && I.metadata.source | |
return G || Z || d | |
} | |
function Pe2(I) { | |
return 'duration' in I | |
} | |
qS1.BROWSER_TRACING_INTEGRATION_ID = zS1 | |
qS1.BrowserTracing = QS1 | |
qS1.getMetaContent = W21 | |
}) | |
var $S1 = _((LS1) => { | |
Object.defineProperty(LS1, '__esModule', { value: !0 }) | |
var B6 = Y4(), | |
Id = X0(), | |
FY = rI(), | |
me2 = n01(), | |
fS1 = Iz(), | |
uv = G21(), | |
ES1 = Cb(), | |
nG = pG(), | |
vS1 = 'BrowserTracing', | |
be2 = { | |
...B6.TRACING_DEFAULTS, | |
instrumentNavigation: !0, | |
instrumentPageLoad: !0, | |
markBackgroundSpan: !0, | |
enableLongTask: !0, | |
enableInp: !1, | |
interactionsSampleRate: 1, | |
_experiments: {}, | |
...ES1.defaultRequestInstrumentationOptions, | |
}, | |
le2 = (I = {}) => { | |
let G = FY.DEBUG_BUILD ? !!(I.tracePropagationTargets || I.tracingOrigins) : !1 | |
if ((B6.addTracingExtensions(), !I.tracePropagationTargets && I.tracingOrigins)) | |
I.tracePropagationTargets = I.tracingOrigins | |
let Z = { ...be2, ...I }, | |
d = uv.startTrackingWebVitals(), | |
W = {} | |
if (Z.enableInp) uv.startTrackingINP(W, Z.interactionsSampleRate) | |
if (Z.enableLongTask) uv.startTrackingLongTasks() | |
if (Z._experiments.enableInteractions) uv.startTrackingInteractions() | |
let w = { name: void 0, context: void 0 } | |
function B(C) { | |
let V = B6.getCurrentHub(), | |
{ beforeStartSpan: A, idleTimeout: X, finalTimeout: Y, heartbeatInterval: H } = Z, | |
J = C.op === 'pageload', | |
K | |
if (J) { | |
let S = J ? w21('sentry-trace') : '', | |
$ = J ? w21('baggage') : void 0, | |
{ | |
traceId: L, | |
dsc: T, | |
parentSpanId: m, | |
sampled: O, | |
} = Id.propagationContextFromHeaders(S, $) | |
K = { | |
traceId: L, | |
parentSpanId: m, | |
parentSampled: O, | |
...C, | |
metadata: { ...C.metadata, dynamicSamplingContext: T }, | |
trimEnd: !0, | |
} | |
} else K = { trimEnd: !0, ...C } | |
let g = A ? A(K) : K | |
if ( | |
((g.metadata = g.name !== K.name ? { ...g.metadata, source: 'custom' } : g.metadata), | |
(w.name = g.name), | |
(w.context = g), | |
g.sampled === !1) | |
) | |
FY.DEBUG_BUILD && | |
Id.logger.log(`[Tracing] Will not send ${g.op} transaction because of beforeNavigate.`) | |
FY.DEBUG_BUILD && Id.logger.log(`[Tracing] Starting ${g.op} transaction on scope`) | |
let { location: z } = nG.WINDOW, | |
f = B6.startIdleTransaction(V, g, X, Y, !0, { location: z }, H, J) | |
if (J && nG.WINDOW.document) { | |
if ( | |
(nG.WINDOW.document.addEventListener('readystatechange', () => { | |
if (['interactive', 'complete'].includes(nG.WINDOW.document.readyState)) | |
f.sendAutoFinishSignal() | |
}), | |
['interactive', 'complete'].includes(nG.WINDOW.document.readyState)) | |
) | |
f.sendAutoFinishSignal() | |
} | |
return ( | |
f.registerBeforeFinishCallback((S) => { | |
d(), uv.addPerformanceEntries(S) | |
}), | |
f | |
) | |
} | |
return { | |
name: vS1, | |
setupOnce: () => {}, | |
afterAllSetup(C) { | |
let V = C.getOptions(), | |
{ | |
markBackgroundSpan: A, | |
traceFetch: X, | |
traceXHR: Y, | |
shouldCreateSpanForRequest: H, | |
enableHTTPTimings: J, | |
_experiments: K, | |
} = Z, | |
g = V && V.tracePropagationTargets, | |
z = g || Z.tracePropagationTargets | |
if (FY.DEBUG_BUILD && G && g) | |
Id.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 f, | |
S = nG.WINDOW.location && nG.WINDOW.location.href | |
if (C.on) | |
C.on('startNavigationSpan', ($) => { | |
if (f) | |
FY.DEBUG_BUILD && | |
Id.logger.log( | |
`[Tracing] Finishing current transaction with op: ${B6.spanToJSON(f).op}`, | |
), | |
f.end() | |
f = B({ op: 'navigation', ...$ }) | |
}), | |
C.on('startPageLoadSpan', ($) => { | |
if (f) | |
FY.DEBUG_BUILD && | |
Id.logger.log( | |
`[Tracing] Finishing current transaction with op: ${B6.spanToJSON(f).op}`, | |
), | |
f.end() | |
f = B({ op: 'pageload', ...$ }) | |
}) | |
if (Z.instrumentPageLoad && C.emit && nG.WINDOW.location) { | |
let $ = { | |
name: nG.WINDOW.location.pathname, | |
startTimestamp: Id.browserPerformanceTimeOrigin | |
? Id.browserPerformanceTimeOrigin / 1000 | |
: void 0, | |
origin: 'auto.pageload.browser', | |
attributes: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' }, | |
} | |
MS1(C, $) | |
} | |
if (Z.instrumentNavigation && C.emit && nG.WINDOW.location) | |
Id.addHistoryInstrumentationHandler(({ to: $, from: L }) => { | |
if (L === void 0 && S && S.indexOf($) !== -1) { | |
S = void 0 | |
return | |
} | |
if (L !== $) { | |
S = void 0 | |
let T = { | |
name: nG.WINDOW.location.pathname, | |
origin: 'auto.navigation.browser', | |
attributes: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url' }, | |
} | |
SS1(C, T) | |
} | |
}) | |
if (A) me2.registerBackgroundTabDetection() | |
if (K.enableInteractions) je2(Z, w) | |
if (Z.enableInp) he2(W, w) | |
ES1.instrumentOutgoingRequests({ | |
traceFetch: X, | |
traceXHR: Y, | |
tracePropagationTargets: z, | |
shouldCreateSpanForRequest: H, | |
enableHTTPTimings: J, | |
}) | |
}, | |
options: Z, | |
} | |
} | |
function MS1(I, G) { | |
if (!I.emit) return | |
I.emit('startPageLoadSpan', G) | |
let Z = B6.getActiveSpan() | |
return (Z && B6.spanToJSON(Z).op) === 'pageload' ? Z : void 0 | |
} | |
function SS1(I, G) { | |
if (!I.emit) return | |
I.emit('startNavigationSpan', G) | |
let Z = B6.getActiveSpan() | |
return (Z && B6.spanToJSON(Z).op) === 'navigation' ? Z : void 0 | |
} | |
function w21(I) { | |
let G = Id.getDomElement(`meta[name=${I}]`) | |
return G ? G.getAttribute('content') : void 0 | |
} | |
function je2(I, G) { | |
let Z, | |
d = () => { | |
let { idleTimeout: W, finalTimeout: w, heartbeatInterval: B } = I, | |
C = 'ui.action.click', | |
V = B6.getActiveTransaction() | |
if (V && V.op && ['navigation', 'pageload'].includes(V.op)) { | |
FY.DEBUG_BUILD && | |
Id.logger.warn( | |
'[Tracing] Did not create ui.action.click transaction because a pageload or navigation transaction is in progress.', | |
) | |
return | |
} | |
if (Z) Z.setFinishReason('interactionInterrupted'), Z.end(), (Z = void 0) | |
if (!G.name) { | |
FY.DEBUG_BUILD && | |
Id.logger.warn( | |
'[Tracing] Did not create ui.action.click transaction because _latestRouteName is missing.', | |
) | |
return | |
} | |
let { location: A } = nG.WINDOW, | |
X = { | |
name: G.name, | |
op: 'ui.action.click', | |
trimEnd: !0, | |
data: { [B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: G.context ? xe2(G.context) : 'url' }, | |
} | |
Z = B6.startIdleTransaction(B6.getCurrentHub(), X, W, w, !0, { location: A }, B) | |
} | |
;['click'].forEach((W) => { | |
if (nG.WINDOW.document) addEventListener(W, d, { once: !1, capture: !0 }) | |
}) | |
} | |
function ke2(I) { | |
return 'duration' in I | |
} | |
var RS1 = 10 | |
function he2(I, G) { | |
let Z = ({ entries: d }) => { | |
let W = B6.getClient(), | |
w = | |
W !== void 0 && W.getIntegrationByName !== void 0 | |
? W.getIntegrationByName('Replay') | |
: void 0, | |
B = w !== void 0 ? w.getReplayId() : void 0, | |
C = B6.getActiveTransaction(), | |
V = B6.getCurrentScope(), | |
A = V !== void 0 ? V.getUser() : void 0 | |
d.forEach((X) => { | |
if (ke2(X)) { | |
let Y = X.interactionId | |
if (Y === void 0) return | |
let H = I[Y], | |
J = X.duration, | |
K = X.startTime, | |
g = Object.keys(I), | |
z = | |
g.length > 0 | |
? g.reduce((f, S) => { | |
return I[f].duration < I[S].duration ? f : S | |
}) | |
: void 0 | |
if (X.entryType === 'first-input') { | |
if ( | |
g | |
.map((S) => I[S]) | |
.some((S) => { | |
return S.duration === J && S.startTime === K | |
}) | |
) | |
return | |
} | |
if (!Y) return | |
if (H) H.duration = Math.max(H.duration, J) | |
else if (g.length < RS1 || z === void 0 || J > I[z].duration) { | |
let { name: f, context: S } = G | |
if (f && S) { | |
if (z && Object.keys(I).length >= RS1) delete I[z] | |
I[Y] = { | |
routeName: f, | |
duration: J, | |
parentContext: S, | |
user: A, | |
activeTransaction: C, | |
replayId: B, | |
startTime: K, | |
} | |
} | |
} | |
} | |
}) | |
} | |
fS1.addPerformanceInstrumentationHandler('event', Z), | |
fS1.addPerformanceInstrumentationHandler('first-input', Z) | |
} | |
function xe2(I) { | |
let G = I.attributes && I.attributes[B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
Z = I.data && I.data[B6.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE], | |
d = I.metadata && I.metadata.source | |
return G || Z || d | |
} | |
LS1.BROWSER_TRACING_INTEGRATION_ID = vS1 | |
LS1.browserTracingIntegration = le2 | |
LS1.getMetaContent = w21 | |
LS1.startBrowserTracingNavigationSpan = SS1 | |
LS1.startBrowserTracingPageLoadSpan = MS1 | |
}) | |
var OS1 = _((PS1, Tv) => { | |
Object.defineProperty(PS1, '__esModule', { value: !0 }) | |
var yS1 = Y4(), | |
Gz = X0() | |
function re2() { | |
let I = yS1.getMainCarrier() | |
if (!I.__SENTRY__) return | |
let G = { | |
mongodb() { | |
return new (Gz.dynamicRequire(Tv, './node/integrations/mongo').Mongo)() | |
}, | |
mongoose() { | |
return new (Gz.dynamicRequire(Tv, './node/integrations/mongo').Mongo)() | |
}, | |
mysql() { | |
return new (Gz.dynamicRequire(Tv, './node/integrations/mysql').Mysql)() | |
}, | |
pg() { | |
return new (Gz.dynamicRequire(Tv, './node/integrations/postgres').Postgres)() | |
}, | |
}, | |
Z = Object.keys(G) | |
.filter((d) => !!Gz.loadModule(d)) | |
.map((d) => { | |
try { | |
return G[d]() | |
} catch (W) { | |
return | |
} | |
}) | |
.filter((d) => d) | |
if (Z.length > 0) I.__SENTRY__.integrations = [...(I.__SENTRY__.integrations || []), ...Z] | |
} | |
function se2() { | |
if ((yS1.addTracingExtensions(), Gz.isNodeEnv())) re2() | |
} | |
PS1.addExtensionMethods = se2 | |
}) | |
var C21 = _((lS1) => { | |
Object.defineProperty(lS1, '__esModule', { value: !0 }) | |
var xV = Y4(), | |
uS1 = X0(), | |
ee2 = pv1(), | |
te2 = nv1(), | |
It2 = rv1(), | |
Gt2 = ev1(), | |
Zt2 = GM1(), | |
dt2 = WM1(), | |
Wt2 = CM1(), | |
wt2 = AM1(), | |
TS1 = US1(), | |
B21 = $S1(), | |
mS1 = Cb(), | |
Vb = Iz(), | |
bS1 = Z21(), | |
Bt2 = OS1() | |
lS1.IdleTransaction = xV.IdleTransaction | |
lS1.Span = xV.Span | |
lS1.SpanStatus = xV.SpanStatus | |
lS1.Transaction = xV.Transaction | |
lS1.extractTraceparentData = xV.extractTraceparentData | |
lS1.getActiveTransaction = xV.getActiveTransaction | |
lS1.hasTracingEnabled = xV.hasTracingEnabled | |
lS1.spanStatusfromHttpCode = xV.spanStatusfromHttpCode | |
lS1.startIdleTransaction = xV.startIdleTransaction | |
lS1.TRACEPARENT_REGEXP = uS1.TRACEPARENT_REGEXP | |
lS1.stripUrlQueryAndFragment = uS1.stripUrlQueryAndFragment | |
lS1.Express = ee2.Express | |
lS1.Postgres = te2.Postgres | |
lS1.Mysql = It2.Mysql | |
lS1.Mongo = Gt2.Mongo | |
lS1.Prisma = Zt2.Prisma | |
lS1.GraphQL = dt2.GraphQL | |
lS1.Apollo = Wt2.Apollo | |
lS1.lazyLoadedNodePerformanceMonitoringIntegrations = | |
wt2.lazyLoadedNodePerformanceMonitoringIntegrations | |
lS1.BROWSER_TRACING_INTEGRATION_ID = TS1.BROWSER_TRACING_INTEGRATION_ID | |
lS1.BrowserTracing = TS1.BrowserTracing | |
lS1.browserTracingIntegration = B21.browserTracingIntegration | |
lS1.startBrowserTracingNavigationSpan = B21.startBrowserTracingNavigationSpan | |
lS1.startBrowserTracingPageLoadSpan = B21.startBrowserTracingPageLoadSpan | |
lS1.defaultRequestInstrumentationOptions = mS1.defaultRequestInstrumentationOptions | |
lS1.instrumentOutgoingRequests = mS1.instrumentOutgoingRequests | |
lS1.addClsInstrumentationHandler = Vb.addClsInstrumentationHandler | |
lS1.addFidInstrumentationHandler = Vb.addFidInstrumentationHandler | |
lS1.addLcpInstrumentationHandler = Vb.addLcpInstrumentationHandler | |
lS1.addPerformanceInstrumentationHandler = Vb.addPerformanceInstrumentationHandler | |
lS1.addTracingHeadersToFetchRequest = bS1.addTracingHeadersToFetchRequest | |
lS1.instrumentFetchRequest = bS1.instrumentFetchRequest | |
lS1.addExtensionMethods = Bt2.addExtensionMethods | |
}) | |
var kS1 = _((jS1) => { | |
Object.defineProperty(jS1, '__esModule', { value: !0 }) | |
var jt2 = C21(), | |
kt2 = X0() | |
function ht2() { | |
let I = jt2.lazyLoadedNodePerformanceMonitoringIntegrations | |
.map((G) => { | |
try { | |
return G() | |
} catch (Z) { | |
return | |
} | |
}) | |
.filter((G) => !!G) | |
if (I.length === 0) | |
kt2.logger.warn('Performance monitoring integrations could not be automatically loaded.') | |
return I.filter((G) => !!G.loadDependency()) | |
} | |
jS1.autoDiscoverNodePerformanceMonitoringIntegrations = ht2 | |
}) | |
var V21 = _((cS1) => { | |
Object.defineProperty(cS1, '__esModule', { value: !0 }) | |
var ct2 = A1('os'), | |
pt2 = A1('util'), | |
hS1 = Y4() | |
class xS1 extends hS1.ServerRuntimeClient { | |
constructor(I) { | |
hS1.applySdkMetadata(I, 'node'), | |
(I.transportOptions = { textEncoder: new pt2.TextEncoder(), ...I.transportOptions }) | |
let G = { | |
...I, | |
platform: 'node', | |
runtime: { name: 'node', version: global.process.version }, | |
serverName: I.serverName || global.process.env.SENTRY_NAME || ct2.hostname(), | |
} | |
super(G) | |
} | |
} | |
cS1.NodeClient = xS1 | |
}) | |
var rS1 = _((aS1) => { | |
var { _nullishCoalesce: pS1 } = X0() | |
Object.defineProperty(aS1, '__esModule', { value: !0 }) | |
var iS1 = A1('http') | |
A1('https') | |
var qB = Symbol('AgentBaseInternalState') | |
class nS1 extends iS1.Agent { | |
constructor(I) { | |
super(I) | |
this[qB] = {} | |
} | |
isSecureEndpoint(I) { | |
if (I) { | |
if (typeof I.secureEndpoint === 'boolean') return I.secureEndpoint | |
if (typeof I.protocol === 'string') return I.protocol === 'https:' | |
} | |
let { stack: G } = new Error() | |
if (typeof G !== 'string') return !1 | |
return G.split( | |
` | |
`, | |
).some((Z) => Z.indexOf('(https.js:') !== -1 || Z.indexOf('node:https:') !== -1) | |
} | |
createSocket(I, G, Z) { | |
let d = { ...G, secureEndpoint: this.isSecureEndpoint(G) } | |
Promise.resolve() | |
.then(() => this.connect(I, d)) | |
.then((W) => { | |
if (W instanceof iS1.Agent) return W.addRequest(I, d) | |
;(this[qB].currentSocket = W), super.createSocket(I, G, Z) | |
}, Z) | |
} | |
createConnection() { | |
let I = this[qB].currentSocket | |
if (((this[qB].currentSocket = void 0), !I)) | |
throw new Error('No socket was returned in the `connect()` function') | |
return I | |
} | |
get defaultPort() { | |
return pS1(this[qB].defaultPort, () => (this.protocol === 'https:' ? 443 : 80)) | |
} | |
set defaultPort(I) { | |
if (this[qB]) this[qB].defaultPort = I | |
} | |
get protocol() { | |
return pS1(this[qB].protocol, () => (this.isSecureEndpoint() ? 'https:' : 'http:')) | |
} | |
set protocol(I) { | |
if (this[qB]) this[qB].protocol = I | |
} | |
} | |
aS1.Agent = nS1 | |
}) | |
var oS1 = _((sS1) => { | |
Object.defineProperty(sS1, '__esModule', { value: !0 }) | |
var at2 = X0() | |
function Ab(...I) { | |
at2.logger.log('[https-proxy-agent:parse-proxy-response]', ...I) | |
} | |
function rt2(I) { | |
return new Promise((G, Z) => { | |
let d = 0, | |
W = [] | |
function w() { | |
let X = I.read() | |
if (X) A(X) | |
else I.once('readable', w) | |
} | |
function B() { | |
I.removeListener('end', C), I.removeListener('error', V), I.removeListener('readable', w) | |
} | |
function C() { | |
B(), Ab('onend'), Z(new Error('Proxy connection ended before receiving CONNECT response')) | |
} | |
function V(X) { | |
B(), Ab('onerror %o', X), Z(X) | |
} | |
function A(X) { | |
W.push(X), (d += X.length) | |
let Y = Buffer.concat(W, d), | |
H = Y.indexOf(`\r | |
\r | |
`) | |
if (H === -1) { | |
Ab('have not received end of HTTP headers yet...'), w() | |
return | |
} | |
let J = Y.slice(0, H).toString('ascii').split(`\r | |
`), | |
K = J.shift() | |
if (!K) return I.destroy(), Z(new Error('No header received from proxy CONNECT response')) | |
let g = K.split(' '), | |
z = +g[1], | |
f = g.slice(2).join(' '), | |
S = {} | |
for (let $ of J) { | |
if (!$) continue | |
let L = $.indexOf(':') | |
if (L === -1) | |
return I.destroy(), Z(new Error(`Invalid header from proxy CONNECT response: "${$}"`)) | |
let T = $.slice(0, L).toLowerCase(), | |
m = $.slice(L + 1).trimStart(), | |
O = S[T] | |
if (typeof O === 'string') S[T] = [O, m] | |
else if (Array.isArray(O)) O.push(m) | |
else S[T] = m | |
} | |
Ab('got proxy server response: %o %o', K, S), | |
B(), | |
G({ connect: { statusCode: z, statusText: f, headers: S }, buffered: Y }) | |
} | |
I.on('error', V), I.on('end', C), w() | |
}) | |
} | |
sS1.parseProxyResponse = rt2 | |
}) | |
var GL1 = _((IL1) => { | |
var { _nullishCoalesce: ot2, _optionalChain: et2 } = X0() | |
Object.defineProperty(IL1, '__esModule', { value: !0 }) | |
var mv = A1('net'), | |
eS1 = A1('tls'), | |
tt2 = A1('url'), | |
I14 = X0(), | |
G14 = rS1(), | |
Z14 = oS1() | |
function bv(...I) { | |
I14.logger.log('[https-proxy-agent]', ...I) | |
} | |
class A21 extends G14.Agent { | |
static __initStatic() { | |
this.protocols = ['http', 'https'] | |
} | |
constructor(I, G) { | |
super(G) | |
;(this.options = {}), | |
(this.proxy = typeof I === 'string' ? new tt2.URL(I) : I), | |
(this.proxyHeaders = ot2(et2([G, 'optionalAccess', (W) => W.headers]), () => ({}))), | |
bv('Creating new HttpsProxyAgent instance: %o', this.proxy.href) | |
let Z = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, ''), | |
d = this.proxy.port | |
? parseInt(this.proxy.port, 10) | |
: this.proxy.protocol === 'https:' | |
? 443 | |
: 80 | |
this.connectOpts = { | |
ALPNProtocols: ['http/1.1'], | |
...(G ? tS1(G, 'headers') : null), | |
host: Z, | |
port: d, | |
} | |
} | |
async connect(I, G) { | |
let { proxy: Z } = this | |
if (!G.host) throw new TypeError('No "host" provided') | |
let d | |
if (Z.protocol === 'https:') { | |
bv('Creating `tls.Socket`: %o', this.connectOpts) | |
let Y = this.connectOpts.servername || this.connectOpts.host | |
d = eS1.connect({ ...this.connectOpts, servername: Y && mv.isIP(Y) ? void 0 : Y }) | |
} else bv('Creating `net.Socket`: %o', this.connectOpts), (d = mv.connect(this.connectOpts)) | |
let W = | |
typeof this.proxyHeaders === 'function' ? this.proxyHeaders() : { ...this.proxyHeaders }, | |
w = mv.isIPv6(G.host) ? `[${G.host}]` : G.host, | |
B = `CONNECT ${w}:${G.port} HTTP/1.1\r | |
` | |
if (Z.username || Z.password) { | |
let Y = `${decodeURIComponent(Z.username)}:${decodeURIComponent(Z.password)}` | |
W['Proxy-Authorization'] = `Basic ${Buffer.from(Y).toString('base64')}` | |
} | |
if (((W.Host = `${w}:${G.port}`), !W['Proxy-Connection'])) | |
W['Proxy-Connection'] = this.keepAlive ? 'Keep-Alive' : 'close' | |
for (let Y of Object.keys(W)) | |
B += `${Y}: ${W[Y]}\r | |
` | |
let C = Z14.parseProxyResponse(d) | |
d.write(`${B}\r | |
`) | |
let { connect: V, buffered: A } = await C | |
if ((I.emit('proxyConnect', V), this.emit('proxyConnect', V, I), V.statusCode === 200)) { | |
if ((I.once('socket', d14), G.secureEndpoint)) { | |
bv('Upgrading socket connection to TLS') | |
let Y = G.servername || G.host | |
return eS1.connect({ | |
...tS1(G, 'host', 'path', 'port'), | |
socket: d, | |
servername: mv.isIP(Y) ? void 0 : Y, | |
}) | |
} | |
return d | |
} | |
d.destroy() | |
let X = new mv.Socket({ writable: !1 }) | |
return ( | |
(X.readable = !0), | |
I.once('socket', (Y) => { | |
bv('Replaying proxy buffer for failed request'), Y.push(A), Y.push(null) | |
}), | |
X | |
) | |
} | |
} | |
A21.__initStatic() | |
function d14(I) { | |
I.resume() | |
} | |
function tS1(I, ...G) { | |
let Z = {}, | |
d | |
for (d in I) if (!G.includes(d)) Z[d] = I[d] | |
return Z | |
} | |
IL1.HttpsProxyAgent = A21 | |
}) | |
var Y21 = _((WL1) => { | |
var { _nullishCoalesce: X21 } = X0() | |
Object.defineProperty(WL1, '__esModule', { value: !0 }) | |
var w14 = A1('http'), | |
B14 = A1('https'), | |
C14 = A1('stream'), | |
dL1 = A1('url'), | |
V14 = A1('zlib'), | |
ZL1 = Y4(), | |
A14 = X0(), | |
X14 = GL1(), | |
Y14 = 32768 | |
function _14(I) { | |
return new C14.Readable({ | |
read() { | |
this.push(I), this.push(null) | |
}, | |
}) | |
} | |
function D14(I) { | |
let G | |
try { | |
G = new dL1.URL(I.url) | |
} catch (V) { | |
return ( | |
A14.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.', | |
) | |
}), | |
ZL1.createTransport(I, () => Promise.resolve({})) | |
) | |
} | |
let Z = G.protocol === 'https:', | |
d = H14(G, I.proxy || (Z ? process.env.https_proxy : void 0) || process.env.http_proxy), | |
W = Z ? B14 : w14, | |
w = I.keepAlive === void 0 ? !1 : I.keepAlive, | |
B = d | |
? new X14.HttpsProxyAgent(d) | |
: new W.Agent({ keepAlive: w, maxSockets: 30, timeout: 2000 }), | |
C = F14( | |
I, | |
X21(I.httpModule, () => W), | |
B, | |
) | |
return ZL1.createTransport(I, C) | |
} | |
function H14(I, G) { | |
let { no_proxy: Z } = process.env | |
if (Z && Z.split(',').some((W) => I.host.endsWith(W) || I.hostname.endsWith(W))) return | |
else return G | |
} | |
function F14(I, G, Z) { | |
let { hostname: d, pathname: W, port: w, protocol: B, search: C } = new dL1.URL(I.url) | |
return function V(A) { | |
return new Promise((X, Y) => { | |
let H = _14(A.body), | |
J = { ...I.headers } | |
if (A.body.length > Y14) (J['content-encoding'] = 'gzip'), (H = H.pipe(V14.createGzip())) | |
let K = G.request( | |
{ | |
method: 'POST', | |
agent: Z, | |
headers: J, | |
hostname: d, | |
path: `${W}${C}`, | |
port: w, | |
protocol: B, | |
ca: I.caCerts, | |
}, | |
(g) => { | |
g.on('data', () => {}), g.on('end', () => {}), g.setEncoding('utf8') | |
let z = X21(g.headers['retry-after'], () => null), | |
f = X21(g.headers['x-sentry-rate-limits'], () => null) | |
X({ | |
statusCode: g.statusCode, | |
headers: { 'retry-after': z, 'x-sentry-rate-limits': Array.isArray(f) ? f[0] : f }, | |
}) | |
}, | |
) | |
K.on('error', Y), H.pipe(K) | |
}) | |
} | |
} | |
WL1.makeNodeTransport = D14 | |
}) | |
var nF = _((wL1) => { | |
Object.defineProperty(wL1, '__esModule', { value: !0 }) | |
var K14 = X0(), | |
g14 = K14.parseSemver(process.versions.node) | |
wL1.NODE_VERSION = g14 | |
}) | |
var AL1 = _((VL1) => { | |
var { _optionalChain: z14 } = X0() | |
Object.defineProperty(VL1, '__esModule', { value: !0 }) | |
var BL1 = A1('domain'), | |
aF = Y4() | |
function CL1() { | |
return BL1.active | |
} | |
function Q14() { | |
let I = CL1() | |
if (!I) return | |
return aF.ensureHubOnCarrier(I), aF.getHubFromCarrier(I) | |
} | |
function q14(I) { | |
let G = {} | |
return aF.ensureHubOnCarrier(G, I), aF.getHubFromCarrier(G) | |
} | |
function U14(I, G) { | |
let Z = CL1() | |
if (Z && z14([G, 'optionalAccess', (B) => B.reuseExisting])) return I() | |
let d = BL1.create(), | |
W = Z ? aF.getHubFromCarrier(Z) : void 0, | |
w = q14(W) | |
return ( | |
aF.setHubOnCarrier(d, w), | |
d.bind(() => { | |
return I() | |
})() | |
) | |
} | |
function f14() { | |
aF.setAsyncContextStrategy({ getCurrentHub: Q14, runWithAsyncContext: U14 }) | |
} | |
VL1.setDomainAsyncContextStrategy = f14 | |
}) | |
var YL1 = _((XL1) => { | |
var { _optionalChain: E14 } = X0() | |
Object.defineProperty(XL1, '__esModule', { value: !0 }) | |
var _21 = Y4(), | |
v14 = A1('async_hooks'), | |
Xb | |
function M14() { | |
if (!Xb) Xb = new v14.AsyncLocalStorage() | |
function I() { | |
return Xb.getStore() | |
} | |
function G(d) { | |
let W = {} | |
return _21.ensureHubOnCarrier(W, d), _21.getHubFromCarrier(W) | |
} | |
function Z(d, W) { | |
let w = I() | |
if (w && E14([W, 'optionalAccess', (C) => C.reuseExisting])) return d() | |
let B = G(w) | |
return Xb.run(B, () => { | |
return d() | |
}) | |
} | |
_21.setAsyncContextStrategy({ getCurrentHub: I, runWithAsyncContext: Z }) | |
} | |
XL1.setHooksAsyncContextStrategy = M14 | |
}) | |
var DL1 = _((_L1) => { | |
Object.defineProperty(_L1, '__esModule', { value: !0 }) | |
var L14 = nF(), | |
$14 = AL1(), | |
y14 = YL1() | |
function P14() { | |
if (L14.NODE_VERSION.major >= 14) y14.setHooksAsyncContextStrategy() | |
else $14.setDomainAsyncContextStrategy() | |
} | |
_L1.setNodeAsyncContextStrategy = P14 | |
}) | |
var _b = _((KL1) => { | |
Object.defineProperty(KL1, '__esModule', { value: !0 }) | |
var u14 = A1('util'), | |
Yb = Y4(), | |
HL1 = X0(), | |
FL1 = 'Console', | |
T14 = () => { | |
return { | |
name: FL1, | |
setupOnce() {}, | |
setup(I) { | |
HL1.addConsoleInstrumentationHandler(({ args: G, level: Z }) => { | |
if (Yb.getClient() !== I) return | |
Yb.addBreadcrumb( | |
{ | |
category: 'console', | |
level: HL1.severityLevelFromString(Z), | |
message: u14.format.apply(void 0, G), | |
}, | |
{ input: [...G], level: Z }, | |
) | |
}) | |
}, | |
} | |
}, | |
JL1 = Yb.defineIntegration(T14), | |
m14 = Yb.convertIntegrationFnToClass(FL1, JL1) | |
KL1.Console = m14 | |
KL1.consoleIntegration = JL1 | |
}) | |
var Db = _((vL1) => { | |
var { _optionalChain: rF } = X0() | |
Object.defineProperty(vL1, '__esModule', { value: !0 }) | |
var j14 = A1('child_process'), | |
NL1 = A1('fs'), | |
Gd = A1('os'), | |
k14 = A1('path'), | |
zL1 = A1('util'), | |
QL1 = Y4(), | |
qL1 = zL1.promisify(NL1.readFile), | |
UL1 = zL1.promisify(NL1.readdir), | |
fL1 = 'Context', | |
h14 = (I = {}) => { | |
let G, | |
Z = { app: !0, os: !0, device: !0, culture: !0, cloudResource: !0, ...I } | |
async function d(w) { | |
if (G === void 0) G = W() | |
let B = c14(await G) | |
return ( | |
(w.contexts = { | |
...w.contexts, | |
app: { | |
...B.app, | |
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.app]), | |
}, | |
os: { ...B.os, ...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.os]) }, | |
device: { | |
...B.device, | |
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.device]), | |
}, | |
culture: { | |
...B.culture, | |
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.culture]), | |
}, | |
cloud_resource: { | |
...B.cloud_resource, | |
...rF([w, 'access', (C) => C.contexts, 'optionalAccess', (C) => C.cloud_resource]), | |
}, | |
}), | |
w | |
) | |
} | |
async function W() { | |
let w = {} | |
if (Z.os) w.os = await p14() | |
if (Z.app) w.app = n14() | |
if (Z.device) w.device = EL1(Z.device) | |
if (Z.culture) { | |
let B = i14() | |
if (B) w.culture = B | |
} | |
if (Z.cloudResource) w.cloud_resource = t14() | |
return w | |
} | |
return { | |
name: fL1, | |
setupOnce() {}, | |
processEvent(w) { | |
return d(w) | |
}, | |
} | |
}, | |
RL1 = QL1.defineIntegration(h14), | |
x14 = QL1.convertIntegrationFnToClass(fL1, RL1) | |
function c14(I) { | |
if (rF([I, 'optionalAccess', (G) => G.app, 'optionalAccess', (G) => G.app_memory])) | |
I.app.app_memory = process.memoryUsage().rss | |
if (rF([I, 'optionalAccess', (G) => G.device, 'optionalAccess', (G) => G.free_memory])) | |
I.device.free_memory = Gd.freemem() | |
return I | |
} | |
async function p14() { | |
let I = Gd.platform() | |
switch (I) { | |
case 'darwin': | |
return o14() | |
case 'linux': | |
return e14() | |
default: | |
return { name: a14[I] || I, version: Gd.release() } | |
} | |
} | |
function i14() { | |
try { | |
if (typeof process.versions.icu !== 'string') return | |
let I = new Date(900000000) | |
if (new Intl.DateTimeFormat('es', { month: 'long' }).format(I) === 'enero') { | |
let Z = Intl.DateTimeFormat().resolvedOptions() | |
return { locale: Z.locale, timezone: Z.timeZone } | |
} | |
} catch (I) {} | |
return | |
} | |
function n14() { | |
let I = process.memoryUsage().rss | |
return { | |
app_start_time: new Date(Date.now() - process.uptime() * 1000).toISOString(), | |
app_memory: I, | |
} | |
} | |
function EL1(I) { | |
let G = {}, | |
Z | |
try { | |
Z = Gd.uptime && Gd.uptime() | |
} catch (d) {} | |
if (typeof Z === 'number') G.boot_time = new Date(Date.now() - Z * 1000).toISOString() | |
if (((G.arch = Gd.arch()), I === !0 || I.memory)) | |
(G.memory_size = Gd.totalmem()), (G.free_memory = Gd.freemem()) | |
if (I === !0 || I.cpu) { | |
let d = Gd.cpus() | |
if (d && d.length) { | |
let W = d[0] | |
;(G.processor_count = d.length), | |
(G.cpu_description = W.model), | |
(G.processor_frequency = W.speed) | |
} | |
} | |
return G | |
} | |
var a14 = { | |
aix: 'IBM AIX', | |
freebsd: 'FreeBSD', | |
openbsd: 'OpenBSD', | |
sunos: 'SunOS', | |
win32: 'Windows', | |
}, | |
r14 = [ | |
{ 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'] }, | |
], | |
s14 = { | |
alpine: (I) => I, | |
arch: (I) => UB(/distrib_release=(.*)/, I), | |
centos: (I) => UB(/release ([^ ]+)/, I), | |
debian: (I) => I, | |
fedora: (I) => UB(/release (..)/, I), | |
mint: (I) => UB(/distrib_release=(.*)/, I), | |
red: (I) => UB(/release ([^ ]+)/, I), | |
suse: (I) => UB(/VERSION = (.*)\n/, I), | |
ubuntu: (I) => UB(/distrib_release=(.*)/, I), | |
} | |
function UB(I, G) { | |
let Z = I.exec(G) | |
return Z ? Z[1] : void 0 | |
} | |
async function o14() { | |
let I = { | |
kernel_version: Gd.release(), | |
name: 'Mac OS X', | |
version: `10.${Number(Gd.release().split('.')[0]) - 4}`, | |
} | |
try { | |
let G = await new Promise((Z, d) => { | |
j14.execFile('/usr/bin/sw_vers', (W, w) => { | |
if (W) { | |
d(W) | |
return | |
} | |
Z(w) | |
}) | |
}) | |
;(I.name = UB(/^ProductName:\s+(.*)$/m, G)), | |
(I.version = UB(/^ProductVersion:\s+(.*)$/m, G)), | |
(I.build = UB(/^BuildVersion:\s+(.*)$/m, G)) | |
} catch (G) {} | |
return I | |
} | |
function gL1(I) { | |
return I.split(' ')[0].toLowerCase() | |
} | |
async function e14() { | |
let I = { kernel_version: Gd.release(), name: 'Linux' } | |
try { | |
let G = await UL1('/etc'), | |
Z = r14.find((C) => G.includes(C.name)) | |
if (!Z) return I | |
let d = k14.join('/etc', Z.name), | |
W = (await qL1(d, { encoding: 'utf-8' })).toLowerCase(), | |
{ distros: w } = Z | |
I.name = w.find((C) => W.indexOf(gL1(C)) >= 0) || w[0] | |
let B = gL1(I.name) | |
I.version = s14[B](W) | |
} catch (G) {} | |
return I | |
} | |
function t14() { | |
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 | |
} | |
vL1.Context = x14 | |
vL1.getDeviceContext = EL1 | |
vL1.nodeContextIntegration = RL1 | |
vL1.readDirAsync = UL1 | |
vL1.readFileAsync = qL1 | |
}) | |
var Fb = _((yL1) => { | |
var { _optionalChain: D21 } = X0() | |
Object.defineProperty(yL1, '__esModule', { value: !0 }) | |
var w04 = A1('fs'), | |
ML1 = Y4(), | |
SL1 = X0(), | |
Hb = new SL1.LRUMap(100), | |
B04 = 7, | |
LL1 = 'ContextLines' | |
function C04(I) { | |
return new Promise((G, Z) => { | |
w04.readFile(I, 'utf8', (d, W) => { | |
if (d) Z(d) | |
else G(W) | |
}) | |
}) | |
} | |
var V04 = (I = {}) => { | |
let G = I.frameContextLines !== void 0 ? I.frameContextLines : B04 | |
return { | |
name: LL1, | |
setupOnce() {}, | |
processEvent(Z) { | |
return X04(Z, G) | |
}, | |
} | |
}, | |
$L1 = ML1.defineIntegration(V04), | |
A04 = ML1.convertIntegrationFnToClass(LL1, $L1) | |
async function X04(I, G) { | |
let Z = {}, | |
d = [] | |
if (G > 0 && D21([I, 'access', (W) => W.exception, 'optionalAccess', (W) => W.values])) | |
for (let W of I.exception.values) { | |
if (!D21([W, 'access', (w) => w.stacktrace, 'optionalAccess', (w) => w.frames])) continue | |
for (let w = W.stacktrace.frames.length - 1; w >= 0; w--) { | |
let B = W.stacktrace.frames[w] | |
if (B.filename && !Z[B.filename] && !Hb.get(B.filename)) | |
d.push(_04(B.filename)), (Z[B.filename] = 1) | |
} | |
} | |
if (d.length > 0) await Promise.all(d) | |
if (G > 0 && D21([I, 'access', (W) => W.exception, 'optionalAccess', (W) => W.values])) { | |
for (let W of I.exception.values) | |
if (W.stacktrace && W.stacktrace.frames) await Y04(W.stacktrace.frames, G) | |
} | |
return I | |
} | |
function Y04(I, G) { | |
for (let Z of I) | |
if (Z.filename && Z.context_line === void 0) { | |
let d = Hb.get(Z.filename) | |
if (d) | |
try { | |
SL1.addContextToFrame(d, Z, G) | |
} catch (W) {} | |
} | |
} | |
async function _04(I) { | |
let G = Hb.get(I) | |
if (G === null) return null | |
if (G !== void 0) return G | |
let Z = null | |
try { | |
Z = (await C04(I)).split(` | |
`) | |
} catch (d) {} | |
return Hb.set(I, Z), Z | |
} | |
yL1.ContextLines = A04 | |
yL1.contextLinesIntegration = $L1 | |
}) | |
var lv = _((PL1) => { | |
Object.defineProperty(PL1, '__esModule', { value: !0 }) | |
var F04 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
PL1.DEBUG_BUILD = F04 | |
}) | |
var mL1 = _((TL1) => { | |
var { _optionalChain: fB } = X0() | |
Object.defineProperty(TL1, '__esModule', { value: !0 }) | |
var H21 = A1('url'), | |
K04 = nF() | |
function g04(I) { | |
let { protocol: G, hostname: Z, port: d } = uL1(I), | |
W = I.path ? I.path : '/' | |
return `${G}//${Z}${d}${W}` | |
} | |
function OL1(I) { | |
let { protocol: G, hostname: Z, port: d } = uL1(I), | |
W = I.pathname || '/', | |
w = I.auth ? N04(I.auth) : '' | |
return `${G}//${w}${Z}${d}${W}` | |
} | |
function N04(I) { | |
let [G, Z] = I.split(':') | |
return `${G ? '[Filtered]' : ''}:${Z ? '[Filtered]' : ''}@` | |
} | |
function z04(I, G, Z) { | |
if (!I) return I | |
let [d, W] = I.split(' ') | |
if (G.host && !G.protocol) | |
(G.protocol = fB([Z, 'optionalAccess', (w) => w.agent, 'optionalAccess', (w) => w.protocol])), | |
(W = OL1(G)) | |
if (fB([W, 'optionalAccess', (w) => w.startsWith, 'call', (w) => w('///')])) W = W.slice(2) | |
return `${d} ${W}` | |
} | |
function F21(I) { | |
let G = { | |
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 !== '') G.port = Number(I.port) | |
if (I.username || I.password) G.auth = `${I.username}:${I.password}` | |
return G | |
} | |
function Q04(I, G) { | |
let Z, d | |
if (typeof G[G.length - 1] === 'function') Z = G.pop() | |
if (typeof G[0] === 'string') d = F21(new H21.URL(G[0])) | |
else if (G[0] instanceof H21.URL) d = F21(G[0]) | |
else { | |
d = G[0] | |
try { | |
let W = new H21.URL(d.path || '', `${d.protocol || 'http:'}//${d.hostname}`) | |
d = { pathname: W.pathname, search: W.search, hash: W.hash, ...d } | |
} catch (W) {} | |
} | |
if (G.length === 2) d = { ...d, ...G[1] } | |
if (d.protocol === void 0) | |
if (K04.NODE_VERSION.major > 8) | |
d.protocol = | |
fB([ | |
fB([I, 'optionalAccess', (W) => W.globalAgent]), | |
'optionalAccess', | |
(W) => W.protocol, | |
]) || | |
fB([d.agent, 'optionalAccess', (W) => W.protocol]) || | |
fB([d._defaultAgent, 'optionalAccess', (W) => W.protocol]) | |
else | |
d.protocol = | |
fB([d.agent, 'optionalAccess', (W) => W.protocol]) || | |
fB([d._defaultAgent, 'optionalAccess', (W) => W.protocol]) || | |
fB([fB([I, 'optionalAccess', (W) => W.globalAgent]), 'optionalAccess', (W) => W.protocol]) | |
if (Z) return [d, Z] | |
else return [d] | |
} | |
function uL1(I) { | |
let G = I.protocol || '', | |
Z = I.hostname || I.host || '', | |
d = !I.port || I.port === 80 || I.port === 443 || /^(.*):(\d+)$/.test(Z) ? '' : `:${I.port}` | |
return { protocol: G, hostname: Z, port: d } | |
} | |
TL1.cleanSpanDescription = z04 | |
TL1.extractRawUrl = g04 | |
TL1.extractUrl = OL1 | |
TL1.normalizeRequestArgs = Q04 | |
TL1.urlToOptions = F21 | |
}) | |
var Jb = _((kL1) => { | |
var { _optionalChain: Zz } = X0() | |
Object.defineProperty(kL1, '__esModule', { value: !0 }) | |
var E7 = Y4(), | |
aG = X0(), | |
J21 = lv(), | |
v04 = nF(), | |
jv = mL1(), | |
M04 = (I = {}) => { | |
let { breadcrumbs: G, tracing: Z, shouldCreateSpanForRequest: d } = I, | |
W = { | |
breadcrumbs: G, | |
tracing: | |
Z === !1 | |
? !1 | |
: aG.dropUndefinedKeys({ | |
enableIfHasTracingEnabled: Z === !0 ? void 0 : !0, | |
shouldCreateSpanForRequest: d, | |
}), | |
} | |
return new sF(W) | |
}, | |
S04 = E7.defineIntegration(M04) | |
class sF { | |
static __initStatic() { | |
this.id = 'Http' | |
} | |
__init() { | |
this.name = sF.id | |
} | |
constructor(I = {}) { | |
sF.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, G) { | |
let Z = Zz([ | |
G, | |
'call', | |
(V) => V(), | |
'access', | |
(V) => V.getClient, | |
'call', | |
(V) => V(), | |
'optionalAccess', | |
(V) => V.getOptions, | |
'call', | |
(V) => V(), | |
]), | |
d = lL1(this._tracing, Z) | |
if (!this._breadcrumbs && !d) return | |
if (Z && Z.instrumenter !== 'sentry') { | |
J21.DEBUG_BUILD && | |
aG.logger.log('HTTP Integration is skipped because of instrumenter configuration.') | |
return | |
} | |
let W = jL1(d, this._tracing, Z), | |
w = | |
Zz([Z, 'optionalAccess', (V) => V.tracePropagationTargets]) || | |
Zz([ | |
this, | |
'access', | |
(V) => V._tracing, | |
'optionalAccess', | |
(V) => V.tracePropagationTargets, | |
]), | |
B = A1('http'), | |
C = bL1(B, this._breadcrumbs, W, w) | |
if ((aG.fill(B, 'get', C), aG.fill(B, 'request', C), v04.NODE_VERSION.major > 8)) { | |
let V = A1('https'), | |
A = bL1(V, this._breadcrumbs, W, w) | |
aG.fill(V, 'get', A), aG.fill(V, 'request', A) | |
} | |
} | |
} | |
sF.__initStatic() | |
function bL1(I, G, Z, d) { | |
let W = new aG.LRUMap(100), | |
w = new aG.LRUMap(100), | |
B = (A) => { | |
if (Z === void 0) return !0 | |
let X = W.get(A) | |
if (X !== void 0) return X | |
let Y = Z(A) | |
return W.set(A, Y), Y | |
}, | |
C = (A) => { | |
if (d === void 0) return !0 | |
let X = w.get(A) | |
if (X !== void 0) return X | |
let Y = aG.stringMatchesSomePattern(A, d) | |
return w.set(A, Y), Y | |
} | |
function V(A, X, Y, H) { | |
if (!E7.getCurrentHub().getIntegration(sF)) return | |
E7.addBreadcrumb( | |
{ category: 'http', data: { status_code: H && H.statusCode, ...X }, type: 'http' }, | |
{ event: A, request: Y, response: H }, | |
) | |
} | |
return function A(X) { | |
return function Y(...H) { | |
let J = jv.normalizeRequestArgs(I, H), | |
K = J[0], | |
g = jv.extractRawUrl(K), | |
z = jv.extractUrl(K), | |
f = E7.getClient() | |
if (E7.isSentryRequestUrl(z, f)) return X.apply(I, J) | |
let S = E7.getCurrentScope(), | |
$ = E7.getIsolationScope(), | |
L = E7.getActiveSpan(), | |
T = $04(z, K), | |
m = B(g) | |
? Zz([ | |
L, | |
'optionalAccess', | |
(O) => O.startChild, | |
'call', | |
(O) => | |
O({ | |
op: 'http.client', | |
origin: 'auto.http.node.http', | |
description: `${T['http.method']} ${T.url}`, | |
data: T, | |
}), | |
]) | |
: void 0 | |
if (f && C(g)) { | |
let { | |
traceId: O, | |
spanId: w1, | |
sampled: b, | |
dsc: x1, | |
} = { ...$.getPropagationContext(), ...S.getPropagationContext() }, | |
r1 = m ? E7.spanToTraceHeader(m) : aG.generateSentryTraceHeader(O, w1, b), | |
$1 = aG.dynamicSamplingContextToSentryBaggageHeader( | |
x1 || | |
(m | |
? E7.getDynamicSamplingContextFromSpan(m) | |
: E7.getDynamicSamplingContextFromClient(O, f, S)), | |
) | |
L04(K, z, r1, $1) | |
} else | |
J21.DEBUG_BUILD && | |
aG.logger.log( | |
`[Tracing] Not adding sentry-trace header to outgoing request (${z}) due to mismatching tracePropagationTargets option.`, | |
) | |
return X.apply(I, J) | |
.once('response', function (O) { | |
let w1 = this | |
if (G) V('response', T, w1, O) | |
if (m) { | |
if (O.statusCode) E7.setHttpStatus(m, O.statusCode) | |
m.updateName( | |
jv.cleanSpanDescription(E7.spanToJSON(m).description || '', K, w1) || '', | |
), | |
m.end() | |
} | |
}) | |
.once('error', function () { | |
let O = this | |
if (G) V('error', T, O) | |
if (m) | |
E7.setHttpStatus(m, 500), | |
m.updateName( | |
jv.cleanSpanDescription(E7.spanToJSON(m).description || '', K, O) || '', | |
), | |
m.end() | |
}) | |
} | |
} | |
} | |
function L04(I, G, Z, d) { | |
if ((I.headers || {})['sentry-trace']) return | |
J21.DEBUG_BUILD && | |
aG.logger.log(`[Tracing] Adding sentry-trace header ${Z} to outgoing request to "${G}": `), | |
(I.headers = { | |
...I.headers, | |
'sentry-trace': Z, | |
...(d && d.length > 0 && { baggage: y04(I, d) }), | |
}) | |
} | |
function $04(I, G) { | |
let Z = G.method || 'GET', | |
d = { url: I, 'http.method': Z } | |
if (G.hash) d['http.fragment'] = G.hash.substring(1) | |
if (G.search) d['http.query'] = G.search.substring(1) | |
return d | |
} | |
function y04(I, G) { | |
if (!I.headers || !I.headers.baggage) return G | |
else if (!G) return I.headers.baggage | |
else if (Array.isArray(I.headers.baggage)) return [...I.headers.baggage, G] | |
return [I.headers.baggage, G] | |
} | |
function lL1(I, G) { | |
return I === void 0 ? !1 : I.enableIfHasTracingEnabled ? E7.hasTracingEnabled(G) : !0 | |
} | |
function jL1(I, G, Z) { | |
return I | |
? Zz([G, 'optionalAccess', (W) => W.shouldCreateSpanForRequest]) || | |
Zz([Z, 'optionalAccess', (W) => W.shouldCreateSpanForRequest]) | |
: () => !1 | |
} | |
kL1.Http = sF | |
kL1._getShouldCreateSpanForRequest = jL1 | |
kL1._shouldCreateSpans = lL1 | |
kL1.httpIntegration = S04 | |
}) | |
var cL1 = _((xL1) => { | |
Object.defineProperty(xL1, '__esModule', { value: !0 }) | |
function m04(I, G, Z) { | |
let d = 0, | |
W = 5, | |
w = 0 | |
return ( | |
setInterval(() => { | |
if (w === 0) { | |
if (d > I) { | |
if (((W *= 2), Z(W), W > 86400)) W = 86400 | |
w = W | |
} | |
} else if (((w -= 1), w === 0)) G() | |
d = 0 | |
}, 1000).unref(), | |
() => { | |
d += 1 | |
} | |
) | |
} | |
function K21(I) { | |
return I !== void 0 && (I.length === 0 || I === '?' || I === '<anonymous>') | |
} | |
function b04(I, G) { | |
return I === G || (K21(I) && K21(G)) | |
} | |
function hL1(I) { | |
if (I === void 0) return | |
return I.slice(-10).reduce((G, Z) => `${G},${Z.function},${Z.lineno},${Z.colno}`, '') | |
} | |
function l04(I, G) { | |
if (G === void 0) return | |
return hL1(I(G, 1)) | |
} | |
xL1.createRateLimiter = m04 | |
xL1.functionNamesMatch = b04 | |
xL1.hashFrames = hL1 | |
xL1.hashFromStack = l04 | |
xL1.isAnonymous = K21 | |
}) | |
var rL1 = _((aL1) => { | |
var { _optionalChain: k3 } = X0() | |
Object.defineProperty(aL1, '__esModule', { value: !0 }) | |
var g21 = Y4(), | |
Kb = X0(), | |
p04 = nF(), | |
gb = cL1() | |
function N21(I) { | |
let G = [], | |
Z = !1 | |
function d(B) { | |
if (((G = []), Z)) return | |
;(Z = !0), I(B) | |
} | |
G.push(d) | |
function W(B) { | |
G.push(B) | |
} | |
function w(B) { | |
let C = G.pop() || d | |
try { | |
C(B) | |
} catch (V) { | |
d(B) | |
} | |
} | |
return { add: W, next: w } | |
} | |
class pL1 { | |
constructor() { | |
let { Session: I } = A1('inspector') | |
this._session = new I() | |
} | |
configureAndConnect(I, G) { | |
this._session.connect(), | |
this._session.on('Debugger.paused', (Z) => { | |
I(Z, () => { | |
this._session.post('Debugger.resume') | |
}) | |
}), | |
this._session.post('Debugger.enable'), | |
this._session.post('Debugger.setPauseOnExceptions', { state: G ? 'all' : 'uncaught' }) | |
} | |
setPauseOnExceptions(I) { | |
this._session.post('Debugger.setPauseOnExceptions', { state: I ? 'all' : 'uncaught' }) | |
} | |
getLocalVariables(I, G) { | |
this._getProperties(I, (Z) => { | |
let { add: d, next: W } = N21(G) | |
for (let w of Z) | |
if ( | |
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.objectId]) && | |
k3([w, 'optionalAccess', (B) => B.value, 'access', (B) => B.className]) === 'Array' | |
) { | |
let B = w.value.objectId | |
d((C) => this._unrollArray(B, w.name, C, W)) | |
} else if ( | |
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.objectId]) && | |
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.className]) === | |
'Object' | |
) { | |
let B = w.value.objectId | |
d((C) => this._unrollObject(B, w.name, C, W)) | |
} else if ( | |
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]) != null || | |
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.description]) != | |
null | |
) | |
d((B) => this._unrollOther(w, B, W)) | |
W({}) | |
}) | |
} | |
_getProperties(I, G) { | |
this._session.post('Runtime.getProperties', { objectId: I, ownProperties: !0 }, (Z, d) => { | |
if (Z) G([]) | |
else G(d.result) | |
}) | |
} | |
_unrollArray(I, G, Z, d) { | |
this._getProperties(I, (W) => { | |
;(Z[G] = W.filter((w) => w.name !== 'length' && !isNaN(parseInt(w.name, 10))) | |
.sort((w, B) => parseInt(w.name, 10) - parseInt(B.name, 10)) | |
.map((w) => k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]))), | |
d(Z) | |
}) | |
} | |
_unrollObject(I, G, Z, d) { | |
this._getProperties(I, (W) => { | |
;(Z[G] = W.map((w) => [ | |
w.name, | |
k3([w, 'optionalAccess', (B) => B.value, 'optionalAccess', (B) => B.value]), | |
]).reduce((w, [B, C]) => { | |
return (w[B] = C), w | |
}, {})), | |
d(Z) | |
}) | |
} | |
_unrollOther(I, G, Z) { | |
if (k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.value]) != null) | |
G[I.name] = I.value.value | |
else if ( | |
k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.description]) != null && | |
k3([I, 'optionalAccess', (d) => d.value, 'optionalAccess', (d) => d.type]) !== 'function' | |
) | |
G[I.name] = `<${I.value.description}>` | |
Z(G) | |
} | |
} | |
function i04() { | |
try { | |
return new pL1() | |
} catch (I) { | |
return | |
} | |
} | |
var iL1 = 'LocalVariables', | |
n04 = (I = {}, G = i04()) => { | |
let Z = new Kb.LRUMap(20), | |
d, | |
W = !1 | |
function w(V, { params: { reason: A, data: X, callFrames: Y } }, H) { | |
if (A !== 'exception' && A !== 'promiseRejection') { | |
H() | |
return | |
} | |
k3([d, 'optionalCall', (z) => z()]) | |
let J = gb.hashFromStack(V, k3([X, 'optionalAccess', (z) => z.description])) | |
if (J == null) { | |
H() | |
return | |
} | |
let { add: K, next: g } = N21((z) => { | |
Z.set(J, z), H() | |
}) | |
for (let z = 0; z < Math.min(Y.length, 5); z++) { | |
let { scopeChain: f, functionName: S, this: $ } = Y[z], | |
L = f.find((m) => m.type === 'local'), | |
T = $.className === 'global' || !$.className ? S : `${$.className}.${S}` | |
if (k3([L, 'optionalAccess', (m) => m.object, 'access', (m) => m.objectId]) === void 0) | |
K((m) => { | |
;(m[z] = { function: T }), g(m) | |
}) | |
else { | |
let m = L.object.objectId | |
K((O) => | |
k3([ | |
G, | |
'optionalAccess', | |
(w1) => w1.getLocalVariables, | |
'call', | |
(w1) => | |
w1(m, (b) => { | |
;(O[z] = { function: T, vars: b }), g(O) | |
}), | |
]), | |
) | |
} | |
} | |
g([]) | |
} | |
function B(V) { | |
let A = gb.hashFrames( | |
k3([V, 'optionalAccess', (H) => H.stacktrace, 'optionalAccess', (H) => H.frames]), | |
) | |
if (A === void 0) return | |
let X = Z.remove(A) | |
if (X === void 0) return | |
let Y = ( | |
k3([V, 'access', (H) => H.stacktrace, 'optionalAccess', (H) => H.frames]) || [] | |
).filter((H) => H.function !== 'new Promise') | |
for (let H = 0; H < Y.length; H++) { | |
let J = Y.length - H - 1 | |
if (!Y[J] || !X[H]) break | |
if ( | |
X[H].vars === void 0 || | |
Y[J].in_app === !1 || | |
!gb.functionNamesMatch(Y[J].function, X[H].function) | |
) | |
continue | |
Y[J].vars = X[H].vars | |
} | |
} | |
function C(V) { | |
for (let A of k3([ | |
V, | |
'optionalAccess', | |
(X) => X.exception, | |
'optionalAccess', | |
(X) => X.values, | |
]) || []) | |
B(A) | |
return V | |
} | |
return { | |
name: iL1, | |
setupOnce() { | |
let V = g21.getClient(), | |
A = k3([V, 'optionalAccess', (X) => X.getOptions, 'call', (X) => X()]) | |
if (G && k3([A, 'optionalAccess', (X) => X.includeLocalVariables])) { | |
if (p04.NODE_VERSION.major < 18) { | |
Kb.logger.log('The `LocalVariables` integration is only supported on Node >= v18.') | |
return | |
} | |
let Y = I.captureAllExceptions !== !1 | |
if ((G.configureAndConnect((H, J) => w(A.stackParser, H, J), Y), Y)) { | |
let H = I.maxExceptionsPerSecond || 50 | |
d = gb.createRateLimiter( | |
H, | |
() => { | |
Kb.logger.log('Local variables rate-limit lifted.'), | |
k3([G, 'optionalAccess', (J) => J.setPauseOnExceptions, 'call', (J) => J(!0)]) | |
}, | |
(J) => { | |
Kb.logger.log( | |
`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${J} seconds.`, | |
), | |
k3([G, 'optionalAccess', (K) => K.setPauseOnExceptions, 'call', (K) => K(!1)]) | |
}, | |
) | |
} | |
W = !0 | |
} | |
}, | |
processEvent(V) { | |
if (W) return C(V) | |
return V | |
}, | |
_getCachedFramesCount() { | |
return Z.size | |
}, | |
_getFirstCachedFrame() { | |
return Z.values()[0] | |
}, | |
} | |
}, | |
nL1 = g21.defineIntegration(n04), | |
a04 = g21.convertIntegrationFnToClass(iL1, nL1) | |
aL1.LocalVariablesSync = a04 | |
aL1.createCallbackList = N21 | |
aL1.localVariablesSyncIntegration = nL1 | |
}) | |
var Nb = _((oL1) => { | |
Object.defineProperty(oL1, '__esModule', { value: !0 }) | |
var sL1 = rL1(), | |
e04 = sL1.LocalVariablesSync, | |
t04 = sL1.localVariablesSyncIntegration | |
oL1.LocalVariables = e04 | |
oL1.localVariablesIntegration = t04 | |
}) | |
var zb = _((d$1) => { | |
Object.defineProperty(d$1, '__esModule', { value: !0 }) | |
var eL1 = A1('fs'), | |
tL1 = A1('path'), | |
I$1 = Y4(), | |
z21, | |
G$1 = 'Modules' | |
function Z24() { | |
try { | |
return A1.cache ? Object.keys(A1.cache) : [] | |
} catch (I) { | |
return [] | |
} | |
} | |
function d24() { | |
let I = (A1.main && A1.main.paths) || [], | |
G = Z24(), | |
Z = {}, | |
d = {} | |
return ( | |
G.forEach((W) => { | |
let w = W, | |
B = () => { | |
let C = w | |
if (((w = tL1.dirname(C)), !w || C === w || d[C])) return | |
if (I.indexOf(w) < 0) return B() | |
let V = tL1.join(C, 'package.json') | |
if (((d[C] = !0), !eL1.existsSync(V))) return B() | |
try { | |
let A = JSON.parse(eL1.readFileSync(V, 'utf8')) | |
Z[A.name] = A.version | |
} catch (A) {} | |
} | |
B() | |
}), | |
Z | |
) | |
} | |
function W24() { | |
if (!z21) z21 = d24() | |
return z21 | |
} | |
var w24 = () => { | |
return { | |
name: G$1, | |
setupOnce() {}, | |
processEvent(I) { | |
return (I.modules = { ...I.modules, ...W24() }), I | |
}, | |
} | |
}, | |
Z$1 = I$1.defineIntegration(w24), | |
B24 = I$1.convertIntegrationFnToClass(G$1, Z$1) | |
d$1.Modules = B24 | |
d$1.modulesIntegration = Z$1 | |
}) | |
var q21 = _((W$1) => { | |
Object.defineProperty(W$1, '__esModule', { value: !0 }) | |
var A24 = Y4(), | |
Qb = X0(), | |
Q21 = lv(), | |
X24 = 2000 | |
function Y24(I) { | |
Qb.consoleSandbox(() => { | |
console.error(I) | |
}) | |
let G = A24.getClient() | |
if (G === void 0) | |
Q21.DEBUG_BUILD && | |
Qb.logger.warn('No NodeClient was defined, we are exiting the process now.'), | |
global.process.exit(1) | |
let Z = G.getOptions(), | |
d = (Z && Z.shutdownTimeout && Z.shutdownTimeout > 0 && Z.shutdownTimeout) || X24 | |
G.close(d).then( | |
(W) => { | |
if (!W) | |
Q21.DEBUG_BUILD && | |
Qb.logger.warn( | |
'We reached the timeout for emptying the request buffer, still exiting now!', | |
) | |
global.process.exit(1) | |
}, | |
(W) => { | |
Q21.DEBUG_BUILD && Qb.logger.error(W) | |
}, | |
) | |
} | |
W$1.logAndExitProcess = Y24 | |
}) | |
var Ub = _((A$1) => { | |
Object.defineProperty(A$1, '__esModule', { value: !0 }) | |
var qb = Y4(), | |
D24 = X0(), | |
H24 = lv(), | |
w$1 = q21(), | |
B$1 = 'OnUncaughtException', | |
F24 = (I = {}) => { | |
let G = { exitEvenIfOtherHandlersAreRegistered: !0, ...I } | |
return { | |
name: B$1, | |
setupOnce() {}, | |
setup(Z) { | |
global.process.on('uncaughtException', V$1(Z, G)) | |
}, | |
} | |
}, | |
C$1 = qb.defineIntegration(F24), | |
J24 = qb.convertIntegrationFnToClass(B$1, C$1) | |
function V$1(I, G) { | |
let d = !1, | |
W = !1, | |
w = !1, | |
B, | |
C = I.getOptions() | |
return Object.assign( | |
(V) => { | |
let A = w$1.logAndExitProcess | |
if (G.onFatalError) A = G.onFatalError | |
else if (C.onFatalError) A = C.onFatalError | |
let Y = | |
global.process.listeners('uncaughtException').reduce((J, K) => { | |
if ( | |
K.name === 'domainUncaughtExceptionClear' || | |
(K.tag && K.tag === 'sentry_tracingErrorCallback') || | |
K._errorHandler | |
) | |
return J | |
else return J + 1 | |
}, 0) === 0, | |
H = G.exitEvenIfOtherHandlersAreRegistered || Y | |
if (!d) { | |
if (((B = V), (d = !0), qb.getClient() === I)) | |
qb.captureException(V, { | |
originalException: V, | |
captureContext: { level: 'fatal' }, | |
mechanism: { handled: !1, type: 'onuncaughtexception' }, | |
}) | |
if (!w && H) (w = !0), A(V) | |
} else if (H) { | |
if (w) | |
H24.DEBUG_BUILD && | |
D24.logger.warn( | |
'uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown', | |
), | |
w$1.logAndExitProcess(V) | |
else if (!W) | |
(W = !0), | |
setTimeout(() => { | |
if (!w) (w = !0), A(B, V) | |
}, 2000) | |
} | |
}, | |
{ _errorHandler: !0 }, | |
) | |
} | |
A$1.OnUncaughtException = J24 | |
A$1.makeErrorHandler = V$1 | |
A$1.onUncaughtExceptionIntegration = C$1 | |
}) | |
var Rb = _((H$1) => { | |
Object.defineProperty(H$1, '__esModule', { value: !0 }) | |
var fb = Y4(), | |
X$1 = X0(), | |
z24 = q21(), | |
Y$1 = 'OnUnhandledRejection', | |
Q24 = (I = {}) => { | |
let G = I.mode || 'warn' | |
return { | |
name: Y$1, | |
setupOnce() {}, | |
setup(Z) { | |
global.process.on('unhandledRejection', D$1(Z, { mode: G })) | |
}, | |
} | |
}, | |
_$1 = fb.defineIntegration(Q24), | |
q24 = fb.convertIntegrationFnToClass(Y$1, _$1) | |
function D$1(I, G) { | |
return function Z(d, W) { | |
if (fb.getClient() !== I) return | |
fb.captureException(d, { | |
originalException: W, | |
captureContext: { extra: { unhandledPromiseRejection: !0 } }, | |
mechanism: { handled: !1, type: 'onunhandledrejection' }, | |
}), | |
U24(d, G) | |
} | |
} | |
function U24(I, G) { | |
let Z = | |
'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 (G.mode === 'warn') | |
X$1.consoleSandbox(() => { | |
console.warn(Z), console.error(I && I.stack ? I.stack : I) | |
}) | |
else if (G.mode === 'strict') | |
X$1.consoleSandbox(() => { | |
console.warn(Z) | |
}), | |
z24.logAndExitProcess(I) | |
} | |
H$1.OnUnhandledRejection = q24 | |
H$1.makeUnhandledPromiseHandler = D$1 | |
H$1.onUnhandledRejectionIntegration = _$1 | |
}) | |
var Eb = _((N$1) => { | |
Object.defineProperty(N$1, '__esModule', { value: !0 }) | |
var v24 = A1('http'), | |
M24 = A1('url'), | |
F$1 = Y4(), | |
dz = X0(), | |
J$1 = 'Spotlight', | |
S24 = (I = {}) => { | |
let G = { sidecarUrl: I.sidecarUrl || 'http://localhost:8969/stream' } | |
return { | |
name: J$1, | |
setupOnce() {}, | |
setup(Z) { | |
if (typeof process === 'object' && process.env) | |
dz.logger.warn( | |
"[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?", | |
) | |
$24(Z, G) | |
}, | |
} | |
}, | |
K$1 = F$1.defineIntegration(S24), | |
L24 = F$1.convertIntegrationFnToClass(J$1, K$1) | |
function $24(I, G) { | |
let Z = y24(G.sidecarUrl) | |
if (!Z) return | |
let d = 0 | |
if (typeof I.on !== 'function') { | |
dz.logger.warn( | |
'[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)', | |
) | |
return | |
} | |
I.on('beforeEnvelope', (W) => { | |
if (d > 3) { | |
dz.logger.warn( | |
'[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests', | |
) | |
return | |
} | |
let w = dz.serializeEnvelope(W), | |
C = g$1()( | |
{ | |
method: 'POST', | |
path: Z.pathname, | |
hostname: Z.hostname, | |
port: Z.port, | |
headers: { 'Content-Type': 'application/x-sentry-envelope' }, | |
}, | |
(V) => { | |
V.on('data', () => {}), V.on('end', () => {}), V.setEncoding('utf8') | |
}, | |
) | |
C.on('error', () => { | |
d++, dz.logger.warn('[Spotlight] Failed to send envelope to Spotlight Sidecar') | |
}), | |
C.write(w), | |
C.end() | |
}) | |
} | |
function y24(I) { | |
try { | |
return new M24.URL(`${I}`) | |
} catch (G) { | |
dz.logger.warn(`[Spotlight] Invalid sidecar URL: ${I}`) | |
return | |
} | |
} | |
function g$1() { | |
let { request: I } = v24 | |
if (P24(I)) return I.__sentry_original__ | |
return I | |
} | |
function P24(I) { | |
return '__sentry_original__' in I | |
} | |
N$1.Spotlight = L24 | |
N$1.getNativeHttpRequest = g$1 | |
N$1.spotlightIntegration = K$1 | |
}) | |
var Mb = _((z$1) => { | |
var { _optionalChain: vb } = X0() | |
Object.defineProperty(z$1, '__esModule', { value: !0 }) | |
var q6 = Y4(), | |
oF = X0(), | |
m24 = nF() | |
z$1.ChannelName = void 0 | |
;(function (I) { | |
I.RequestCreate = 'undici:request:create' | |
let Z = 'undici:request:headers' | |
I.RequestEnd = Z | |
let d = 'undici:request:error' | |
I.RequestError = d | |
})(z$1.ChannelName || (z$1.ChannelName = {})) | |
var b24 = (I) => { | |
return new oI(I) | |
}, | |
l24 = q6.defineIntegration(b24) | |
class oI { | |
static __initStatic() { | |
this.id = 'Undici' | |
} | |
__init() { | |
this.name = oI.id | |
} | |
__init2() { | |
this._createSpanUrlMap = new oF.LRUMap(100) | |
} | |
__init3() { | |
this._headersUrlMap = new oF.LRUMap(100) | |
} | |
constructor(I = {}) { | |
oI.prototype.__init.call(this), | |
oI.prototype.__init2.call(this), | |
oI.prototype.__init3.call(this), | |
oI.prototype.__init4.call(this), | |
oI.prototype.__init5.call(this), | |
oI.prototype.__init6.call(this), | |
(this._options = { | |
breadcrumbs: I.breadcrumbs === void 0 ? !0 : I.breadcrumbs, | |
tracing: I.tracing, | |
shouldCreateSpanForRequest: I.shouldCreateSpanForRequest, | |
}) | |
} | |
setupOnce(I) { | |
if (m24.NODE_VERSION.major < 16) return | |
let G | |
try { | |
G = A1('diagnostics_channel') | |
} catch (Z) {} | |
if (!G || !G.subscribe) return | |
G.subscribe(z$1.ChannelName.RequestCreate, this._onRequestCreate), | |
G.subscribe(z$1.ChannelName.RequestEnd, this._onRequestEnd), | |
G.subscribe(z$1.ChannelName.RequestError, this._onRequestError) | |
} | |
_shouldCreateSpan(I) { | |
if ( | |
this._options.tracing === !1 || | |
(this._options.tracing === void 0 && !q6.hasTracingEnabled()) | |
) | |
return !1 | |
if (this._options.shouldCreateSpanForRequest === void 0) return !0 | |
let G = this._createSpanUrlMap.get(I) | |
if (G !== void 0) return G | |
let Z = this._options.shouldCreateSpanForRequest(I) | |
return this._createSpanUrlMap.set(I, Z), Z | |
} | |
__init4() { | |
this._onRequestCreate = (I) => { | |
if ( | |
!vb([ | |
q6.getClient, | |
'call', | |
(X) => X(), | |
'optionalAccess', | |
(X) => X.getIntegration, | |
'call', | |
(X) => X(oI), | |
]) | |
) | |
return | |
let { request: G } = I, | |
Z = G.origin ? G.origin.toString() + G.path : G.path, | |
d = q6.getClient() | |
if (!d) return | |
if (q6.isSentryRequestUrl(Z, d) || G.__sentry_span__ !== void 0) return | |
let W = d.getOptions(), | |
w = q6.getCurrentScope(), | |
B = q6.getIsolationScope(), | |
C = q6.getActiveSpan(), | |
V = this._shouldCreateSpan(Z) ? k24(C, G, Z) : void 0 | |
if (V) G.__sentry_span__ = V | |
if ( | |
((X) => { | |
if (W.tracePropagationTargets === void 0) return !0 | |
let Y = this._headersUrlMap.get(X) | |
if (Y !== void 0) return Y | |
let H = oF.stringMatchesSomePattern(X, W.tracePropagationTargets) | |
return this._headersUrlMap.set(X, H), H | |
})(Z) | |
) { | |
let { | |
traceId: X, | |
spanId: Y, | |
sampled: H, | |
dsc: J, | |
} = { ...B.getPropagationContext(), ...w.getPropagationContext() }, | |
K = V ? q6.spanToTraceHeader(V) : oF.generateSentryTraceHeader(X, Y, H), | |
g = oF.dynamicSamplingContextToSentryBaggageHeader( | |
J || | |
(V | |
? q6.getDynamicSamplingContextFromSpan(V) | |
: q6.getDynamicSamplingContextFromClient(X, d, w)), | |
) | |
j24(G, K, g) | |
} | |
} | |
} | |
__init5() { | |
this._onRequestEnd = (I) => { | |
if ( | |
!vb([ | |
q6.getClient, | |
'call', | |
(w) => w(), | |
'optionalAccess', | |
(w) => w.getIntegration, | |
'call', | |
(w) => w(oI), | |
]) | |
) | |
return | |
let { request: G, response: Z } = I, | |
d = G.origin ? G.origin.toString() + G.path : G.path | |
if (q6.isSentryRequestUrl(d, q6.getClient())) return | |
let W = G.__sentry_span__ | |
if (W) q6.setHttpStatus(W, Z.statusCode), W.end() | |
if (this._options.breadcrumbs) | |
q6.addBreadcrumb( | |
{ | |
category: 'http', | |
data: { method: G.method, status_code: Z.statusCode, url: d }, | |
type: 'http', | |
}, | |
{ event: 'response', request: G, response: Z }, | |
) | |
} | |
} | |
__init6() { | |
this._onRequestError = (I) => { | |
if ( | |
!vb([ | |
q6.getClient, | |
'call', | |
(W) => W(), | |
'optionalAccess', | |
(W) => W.getIntegration, | |
'call', | |
(W) => W(oI), | |
]) | |
) | |
return | |
let { request: G } = I, | |
Z = G.origin ? G.origin.toString() + G.path : G.path | |
if (q6.isSentryRequestUrl(Z, q6.getClient())) return | |
let d = G.__sentry_span__ | |
if (d) d.setStatus('internal_error'), d.end() | |
if (this._options.breadcrumbs) | |
q6.addBreadcrumb( | |
{ category: 'http', data: { method: G.method, url: Z }, level: 'error', type: 'http' }, | |
{ event: 'error', request: G }, | |
) | |
} | |
} | |
} | |
oI.__initStatic() | |
function j24(I, G, Z) { | |
let d | |
if (Array.isArray(I.headers)) d = I.headers.some((W) => W === 'sentry-trace') | |
else | |
d = I.headers | |
.split( | |
`\r | |
`, | |
) | |
.some((w) => w.startsWith('sentry-trace:')) | |
if (d) return | |
if ((I.addHeader('sentry-trace', G), Z)) I.addHeader('baggage', Z) | |
} | |
function k24(I, G, Z) { | |
let d = oF.parseUrl(Z), | |
W = G.method || 'GET', | |
w = { 'http.method': W } | |
if (d.search) w['http.query'] = d.search | |
if (d.hash) w['http.fragment'] = d.hash | |
return vb([ | |
I, | |
'optionalAccess', | |
(B) => B.startChild, | |
'call', | |
(B) => | |
B({ | |
op: 'http.client', | |
origin: 'auto.http.node.undici', | |
description: `${W} ${oF.getSanitizedUrlString(d)}`, | |
data: w, | |
}), | |
]) | |
} | |
z$1.Undici = oI | |
z$1.nativeNodeFetchintegration = l24 | |
}) | |
var U21 = _((U$1) => { | |
Object.defineProperty(U$1, '__esModule', { value: !0 }) | |
var Q$1 = A1('path'), | |
c24 = X0() | |
function q$1(I) { | |
return I.replace(/^[A-Z]:/, '').replace(/\\/g, '/') | |
} | |
function p24( | |
I = process.argv[1] ? c24.dirname(process.argv[1]) : process.cwd(), | |
G = Q$1.sep === '\\', | |
) { | |
let Z = G ? q$1(I) : I | |
return (d) => { | |
if (!d) return | |
let W = G ? q$1(d) : d, | |
{ dir: w, base: B, ext: C } = Q$1.posix.parse(W) | |
if (C === '.js' || C === '.mjs' || C === '.cjs') B = B.slice(0, C.length * -1) | |
if (!w) w = '.' | |
let V = w.lastIndexOf('/node_modules') | |
if (V > -1) return `${w.slice(V + 14).replace(/\//g, '.')}:${B}` | |
if (w.startsWith(Z)) { | |
let A = w.slice(Z.length + 1).replace(/\//g, '.') | |
if (A) A += ':' | |
return (A += B), A | |
} | |
return B | |
} | |
} | |
U$1.createGetModuleFromFilename = p24 | |
}) | |
var f21 = _((M$1) => { | |
var { _optionalChain: n24 } = X0() | |
Object.defineProperty(M$1, '__esModule', { value: !0 }) | |
var Zd = Y4(), | |
eF = X0(), | |
a24 = DL1(), | |
r24 = V21(), | |
s24 = _b(), | |
o24 = Db(), | |
e24 = Fb(), | |
t24 = Jb(), | |
I44 = Nb(), | |
G44 = zb(), | |
Z44 = Ub(), | |
d44 = Rb(), | |
W44 = Eb(), | |
w44 = Mb(), | |
B44 = U21(), | |
C44 = Y21(), | |
f$1 = [ | |
Zd.inboundFiltersIntegration(), | |
Zd.functionToStringIntegration(), | |
Zd.linkedErrorsIntegration(), | |
Zd.requestDataIntegration(), | |
s24.consoleIntegration(), | |
t24.httpIntegration(), | |
w44.nativeNodeFetchintegration(), | |
Z44.onUncaughtExceptionIntegration(), | |
d44.onUnhandledRejectionIntegration(), | |
e24.contextLinesIntegration(), | |
I44.localVariablesIntegration(), | |
o24.nodeContextIntegration(), | |
G44.modulesIntegration(), | |
] | |
function R$1(I) { | |
let G = Zd.getMainCarrier(), | |
Z = n24([G, 'access', (d) => d.__SENTRY__, 'optionalAccess', (d) => d.integrations]) || [] | |
return [...f$1, ...Z] | |
} | |
function V44(I = {}) { | |
if ((a24.setNodeAsyncContextStrategy(), I.defaultIntegrations === void 0)) | |
I.defaultIntegrations = R$1() | |
if (I.dsn === void 0 && process.env.SENTRY_DSN) I.dsn = process.env.SENTRY_DSN | |
let G = process.env.SENTRY_TRACES_SAMPLE_RATE | |
if (I.tracesSampleRate === void 0 && G) { | |
let d = parseFloat(G) | |
if (isFinite(d)) I.tracesSampleRate = d | |
} | |
if (I.release === void 0) { | |
let d = E$1() | |
if (d !== void 0) I.release = d | |
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 Z = { | |
...I, | |
stackParser: eF.stackParserFromStackParserOptions(I.stackParser || v$1), | |
integrations: Zd.getIntegrationsToSetup(I), | |
transport: I.transport || C44.makeNodeTransport, | |
} | |
if ((Zd.initAndBind(I.clientClass || r24.NodeClient, Z), I.autoSessionTracking)) X44() | |
if ((Y44(), I.spotlight)) { | |
let d = Zd.getClient() | |
if (d && d.addIntegration) { | |
let W = d.getOptions().integrations | |
for (let w of W) d.addIntegration(w) | |
d.addIntegration( | |
W44.spotlightIntegration({ | |
sidecarUrl: typeof I.spotlight === 'string' ? I.spotlight : void 0, | |
}), | |
) | |
} | |
} | |
} | |
function A44(I) { | |
if (I === void 0) return !1 | |
let G = I && I.getOptions() | |
if (G && G.autoSessionTracking !== void 0) return G.autoSessionTracking | |
return !1 | |
} | |
function E$1(I) { | |
if (process.env.SENTRY_RELEASE) return process.env.SENTRY_RELEASE | |
if (eF.GLOBAL_OBJ.SENTRY_RELEASE && eF.GLOBAL_OBJ.SENTRY_RELEASE.id) | |
return eF.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 v$1 = eF.createStackParser(eF.nodeStackLineParser(B44.createGetModuleFromFilename())) | |
function X44() { | |
Zd.startSession(), | |
process.on('beforeExit', () => { | |
let I = Zd.getIsolationScope().getSession() | |
if (I && !['exited', 'crashed'].includes(I.status)) Zd.endSession() | |
}) | |
} | |
function Y44() { | |
let I = (process.env.SENTRY_USE_ENVIRONMENT || '').toLowerCase() | |
if (!['false', 'n', 'no', 'off', '0'].includes(I)) { | |
let G = process.env.SENTRY_TRACE, | |
Z = process.env.SENTRY_BAGGAGE, | |
d = eF.propagationContextFromHeaders(G, Z) | |
Zd.getCurrentScope().setPropagationContext(d) | |
} | |
} | |
M$1.defaultIntegrations = f$1 | |
M$1.defaultStackParser = v$1 | |
M$1.getDefaultIntegrations = R$1 | |
M$1.getSentryRelease = E$1 | |
M$1.init = V44 | |
M$1.isAutoSessionTrackingEnabled = A44 | |
}) | |
var L$1 = _((S$1) => { | |
Object.defineProperty(S$1, '__esModule', { value: !0 }) | |
var Sb = A1('fs'), | |
R21 = A1('path') | |
function g44(I) { | |
let G = R21.resolve(I) | |
if (!Sb.existsSync(G)) | |
throw new Error(`Cannot read contents of ${G}. Directory does not exist.`) | |
if (!Sb.statSync(G).isDirectory()) | |
throw new Error(`Cannot read contents of ${G}, because it is not a directory.`) | |
let Z = (d) => { | |
return Sb.readdirSync(d).reduce((W, w) => { | |
let B = R21.join(d, w) | |
if (Sb.statSync(B).isDirectory()) return W.concat(Z(B)) | |
return W.push(B), W | |
}, []) | |
} | |
return Z(G).map((d) => R21.relative(G, d)) | |
} | |
S$1.deepReadDirSync = g44 | |
}) | |
var $$1 = _((z44) => { | |
/*! @sentry/node 7.120.0 (611282e) | https://github.com/getsentry/sentry-javascript */ z44.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 $b = _((u$1, T$1) => { | |
var { _optionalChain: q44, _optionalChainDelete: y$1 } = X0() | |
Object.defineProperty(u$1, '__esModule', { value: !0 }) | |
var U44 = A1('url'), | |
cV = Y4(), | |
Lb = X0(), | |
E21 = nF(), | |
f44 = $$1(), | |
R44 = 50, | |
E44 = 5000 | |
function v21(I, ...G) { | |
Lb.logger.log(`[ANR] ${I}`, ...G) | |
} | |
function v44() { | |
return Lb.GLOBAL_OBJ | |
} | |
function M44() { | |
let I = cV.getGlobalScope().getScopeData() | |
return ( | |
cV.mergeScopeData(I, cV.getIsolationScope().getScopeData()), | |
cV.mergeScopeData(I, cV.getCurrentScope().getScopeData()), | |
(I.attachments = []), | |
(I.eventProcessors = []), | |
I | |
) | |
} | |
function S44() { | |
return Lb.dynamicRequire(T$1, 'worker_threads') | |
} | |
async function L44(I) { | |
let G = { message: 'ANR' }, | |
Z = {} | |
for (let d of I.getEventProcessors()) { | |
if (G === null) break | |
G = await d(G, Z) | |
} | |
return q44([G, 'optionalAccess', (d) => d.contexts]) || {} | |
} | |
var P$1 = 'Anr', | |
$44 = (I = {}) => { | |
if ( | |
E21.NODE_VERSION.major < 16 || | |
(E21.NODE_VERSION.major === 16 && E21.NODE_VERSION.minor < 17) | |
) | |
throw new Error('ANR detection requires Node 16.17.0 or later') | |
let G, | |
Z, | |
d = v44() | |
return ( | |
(d.__SENTRY_GET_SCOPES__ = M44), | |
{ | |
name: P$1, | |
setupOnce() {}, | |
startWorker: () => { | |
if (G) return | |
if (Z) G = P44(Z, I) | |
}, | |
stopWorker: () => { | |
if (G) | |
G.then((W) => { | |
W(), (G = void 0) | |
}) | |
}, | |
setup(W) { | |
;(Z = W), setImmediate(() => this.startWorker()) | |
}, | |
} | |
) | |
}, | |
O$1 = cV.defineIntegration($44), | |
y44 = cV.convertIntegrationFnToClass(P$1, O$1) | |
async function P44(I, G) { | |
let Z = I.getDsn() | |
if (!Z) return () => {} | |
let d = await L44(I) | |
y$1([d, 'access', (X) => X.app, 'optionalAccess', (X) => delete X.app_memory]), | |
y$1([d, 'access', (X) => X.device, 'optionalAccess', (X) => delete X.free_memory]) | |
let W = I.getOptions(), | |
w = I.getSdkMetadata() || {} | |
if (w.sdk) w.sdk.integrations = W.integrations.map((X) => X.name) | |
let B = { | |
debug: Lb.logger.isEnabled(), | |
dsn: Z, | |
environment: W.environment || 'production', | |
release: W.release, | |
dist: W.dist, | |
sdkMetadata: w, | |
appRootPath: G.appRootPath, | |
pollInterval: G.pollInterval || R44, | |
anrThreshold: G.anrThreshold || E44, | |
captureStackTrace: !!G.captureStackTrace, | |
staticTags: G.staticTags || {}, | |
contexts: d, | |
} | |
if (B.captureStackTrace) { | |
let X = A1('inspector') | |
if (!X.url()) X.open(0) | |
} | |
let { Worker: C } = S44(), | |
V = new C(new U44.URL(`data:application/javascript;base64,${f44.base64WorkerScript}`), { | |
workerData: B, | |
}) | |
process.on('exit', () => { | |
V.terminate() | |
}) | |
let A = setInterval(() => { | |
try { | |
let X = cV.getCurrentScope().getSession(), | |
Y = X ? { ...X, toJSON: void 0 } : void 0 | |
V.postMessage({ session: Y }) | |
} catch (X) {} | |
}, B.pollInterval) | |
return ( | |
A.unref(), | |
V.on('message', (X) => { | |
if (X === 'session-ended') | |
v21('ANR event sent from ANR worker. Clearing session in this thread.'), | |
cV.getCurrentScope().setSession(void 0) | |
}), | |
V.once('error', (X) => { | |
clearInterval(A), v21('ANR worker error', X) | |
}), | |
V.once('exit', (X) => { | |
clearInterval(A), v21('ANR worker exit', X) | |
}), | |
V.unref(), | |
() => { | |
V.terminate(), clearInterval(A) | |
} | |
) | |
} | |
u$1.Anr = y44 | |
u$1.anrIntegration = O$1 | |
}) | |
var b$1 = _((m$1) => { | |
Object.defineProperty(m$1, '__esModule', { value: !0 }) | |
var T44 = Y4(), | |
m44 = $b() | |
function b44(I) { | |
let G = T44.getClient() | |
return new m44.Anr(I).setup(G), Promise.resolve() | |
} | |
m$1.enableAnrDetection = b44 | |
}) | |
var M21 = _((k$1) => { | |
var { _optionalChain: l$1 } = X0() | |
Object.defineProperty(k$1, '__esModule', { value: !0 }) | |
var wz = Y4(), | |
j$1 = X0() | |
function j44(I = {}) { | |
return function ({ path: G, type: Z, next: d, rawInput: W }) { | |
let w = l$1([ | |
wz.getClient, | |
'call', | |
(A) => A(), | |
'optionalAccess', | |
(A) => A.getOptions, | |
'call', | |
(A) => A(), | |
]), | |
B = wz.getCurrentScope().getTransaction() | |
if (B) { | |
B.updateName(`trpc/${G}`), | |
B.setAttribute(wz.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route'), | |
(B.op = 'rpc.server') | |
let A = { procedure_type: Z } | |
if ( | |
I.attachRpcInput !== void 0 | |
? I.attachRpcInput | |
: l$1([w, 'optionalAccess', (X) => X.sendDefaultPii]) | |
) | |
A.input = j$1.normalize(W) | |
B.setContext('trpc', A) | |
} | |
function C(A) { | |
if (!A.ok) | |
wz.captureException(A.error, { | |
mechanism: { handled: !1, data: { function: 'trpcMiddleware' } }, | |
}) | |
} | |
let V | |
try { | |
V = d() | |
} catch (A) { | |
throw ( | |
(wz.captureException(A, { | |
mechanism: { handled: !1, data: { function: 'trpcMiddleware' } }, | |
}), | |
A) | |
) | |
} | |
if (j$1.isThenable(V)) | |
Promise.resolve(V).then( | |
(A) => { | |
C(A) | |
}, | |
(A) => { | |
wz.captureException(A, { | |
mechanism: { handled: !1, data: { function: 'trpcMiddleware' } }, | |
}) | |
}, | |
) | |
else C(V) | |
return V | |
} | |
} | |
k$1.trpcMiddleware = j44 | |
}) | |
var c$1 = _((x$1) => { | |
Object.defineProperty(x$1, '__esModule', { value: !0 }) | |
var h$1 = X0() | |
function h44(I, G) { | |
return h$1.extractRequestData(I, { include: G }) | |
} | |
function x44(I, G, Z = {}) { | |
return h$1.addRequestDataToEvent(I, G, { include: Z }) | |
} | |
x$1.extractRequestData = h44 | |
x$1.parseRequest = x44 | |
}) | |
var n$1 = _((i$1) => { | |
var { _optionalChain: yb } = X0() | |
Object.defineProperty(i$1, '__esModule', { value: !0 }) | |
var X8 = Y4(), | |
Bz = X0(), | |
i44 = lv(), | |
Pb = f21(), | |
n44 = M21(), | |
p$1 = c$1() | |
function a44() { | |
return function I(G, Z, d) { | |
let W = yb([ | |
X8.getClient, | |
'call', | |
(X) => X(), | |
'optionalAccess', | |
(X) => X.getOptions, | |
'call', | |
(X) => X(), | |
]) | |
if ( | |
!W || | |
W.instrumenter !== 'sentry' || | |
yb([ | |
G, | |
'access', | |
(X) => X.method, | |
'optionalAccess', | |
(X) => X.toUpperCase, | |
'call', | |
(X) => X(), | |
]) === 'OPTIONS' || | |
yb([ | |
G, | |
'access', | |
(X) => X.method, | |
'optionalAccess', | |
(X) => X.toUpperCase, | |
'call', | |
(X) => X(), | |
]) === 'HEAD' | |
) | |
return d() | |
let w = | |
G.headers && Bz.isString(G.headers['sentry-trace']) ? G.headers['sentry-trace'] : void 0, | |
B = yb([G, 'access', (X) => X.headers, 'optionalAccess', (X) => X.baggage]) | |
if (!X8.hasTracingEnabled(W)) return d() | |
let [C, V] = Bz.extractPathForTransaction(G, { path: !0, method: !0 }), | |
A = X8.continueTrace({ sentryTrace: w, baggage: B }, (X) => | |
X8.startTransaction( | |
{ | |
name: C, | |
op: 'http.server', | |
origin: 'auto.http.node.tracingHandler', | |
...X, | |
data: { [X8.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: V }, | |
metadata: { ...X.metadata, request: G }, | |
}, | |
{ request: Bz.extractRequestData(G) }, | |
), | |
) | |
X8.getCurrentScope().setSpan(A), | |
(Z.__sentry_transaction = A), | |
Z.once('finish', () => { | |
setImmediate(() => { | |
Bz.addRequestDataToTransaction(A, G), X8.setHttpStatus(A, Z.statusCode), A.end() | |
}) | |
}), | |
d() | |
} | |
} | |
function r44(I = {}) { | |
let G | |
if ('include' in I) G = { include: I.include } | |
else { | |
let { ip: Z, request: d, transaction: W, user: w } = I | |
if (Z || d || W || w) | |
G = { include: Bz.dropUndefinedKeys({ ip: Z, request: d, transaction: W, user: w }) } | |
} | |
return G | |
} | |
function s44(I) { | |
let G = r44(I), | |
Z = X8.getClient() | |
if (Z && Pb.isAutoSessionTrackingEnabled(Z)) { | |
Z.initSessionFlusher() | |
let d = X8.getCurrentScope() | |
if (d.getSession()) d.setSession() | |
} | |
return function d(W, w, B) { | |
if (I && I.flushTimeout && I.flushTimeout > 0) { | |
let C = w.end | |
w.end = function (V, A, X) { | |
X8.flush(I.flushTimeout) | |
.then(() => { | |
C.call(this, V, A, X) | |
}) | |
.then(null, (Y) => { | |
i44.DEBUG_BUILD && Bz.logger.error(Y), C.call(this, V, A, X) | |
}) | |
} | |
} | |
X8.runWithAsyncContext(() => { | |
let C = X8.getCurrentScope() | |
C.setSDKProcessingMetadata({ request: W, requestDataOptionsFromExpressHandler: G }) | |
let V = X8.getClient() | |
if (Pb.isAutoSessionTrackingEnabled(V)) C.setRequestSession({ status: 'ok' }) | |
w.once('finish', () => { | |
let A = X8.getClient() | |
if (Pb.isAutoSessionTrackingEnabled(A)) | |
setImmediate(() => { | |
if (A && A._captureRequestSession) A._captureRequestSession() | |
}) | |
}), | |
B() | |
}) | |
} | |
} | |
function o44(I) { | |
let G = I.status || I.statusCode || I.status_code || (I.output && I.output.statusCode) | |
return G ? parseInt(G, 10) : 500 | |
} | |
function e44(I) { | |
return o44(I) >= 500 | |
} | |
function t44(I) { | |
return function G(Z, d, W, w) { | |
if (((I && I.shouldHandleError) || e44)(Z)) { | |
X8.withScope((C) => { | |
C.setSDKProcessingMetadata({ request: d }) | |
let V = W.__sentry_transaction | |
if (V && !X8.getActiveSpan()) C.setSpan(V) | |
let A = X8.getClient() | |
if (A && Pb.isAutoSessionTrackingEnabled(A)) { | |
if (A._sessionFlusher !== void 0) { | |
let H = C.getRequestSession() | |
if (H && H.status !== void 0) H.status = 'crashed' | |
} | |
} | |
let X = X8.captureException(Z, { mechanism: { type: 'middleware', handled: !1 } }) | |
;(W.sentry = X), w(Z) | |
}) | |
return | |
} | |
w(Z) | |
} | |
} | |
var I54 = n44.trpcMiddleware | |
i$1.extractRequestData = p$1.extractRequestData | |
i$1.parseRequest = p$1.parseRequest | |
i$1.errorHandler = t44 | |
i$1.requestHandler = s44 | |
i$1.tracingHandler = a44 | |
i$1.trpcMiddleware = I54 | |
}) | |
var S21 = _((Iy1) => { | |
Object.defineProperty(Iy1, '__esModule', { value: !0 }) | |
var eI = Y4(), | |
r$1 = X0() | |
function a$1(I) { | |
return I && I.statusCode !== void 0 | |
} | |
function C54(I) { | |
return I && I.error !== void 0 | |
} | |
function V54(I) { | |
eI.captureException(I, { | |
mechanism: { type: 'hapi', handled: !1, data: { function: 'hapiErrorPlugin' } }, | |
}) | |
} | |
var s$1 = { | |
name: 'SentryHapiErrorPlugin', | |
version: eI.SDK_VERSION, | |
register: async function (I) { | |
I.events.on('request', (Z, d) => { | |
let W = eI.getActiveTransaction() | |
if (C54(d)) V54(d.error) | |
if (W) W.setStatus('internal_error'), W.end() | |
}) | |
}, | |
}, | |
o$1 = { | |
name: 'SentryHapiTracingPlugin', | |
version: eI.SDK_VERSION, | |
register: async function (I) { | |
let G = I | |
G.ext('onPreHandler', (Z, d) => { | |
let W = eI.continueTrace( | |
{ | |
sentryTrace: Z.headers['sentry-trace'] || void 0, | |
baggage: Z.headers.baggage || void 0, | |
}, | |
(w) => { | |
return eI.startTransaction({ | |
...w, | |
op: 'hapi.request', | |
name: Z.route.path, | |
description: `${Z.route.method} ${Z.path}`, | |
}) | |
}, | |
) | |
return eI.getCurrentScope().setSpan(W), d.continue | |
}), | |
G.ext('onPreResponse', (Z, d) => { | |
let W = eI.getActiveTransaction() | |
if (Z.response && a$1(Z.response) && W) { | |
let w = Z.response | |
w.header('sentry-trace', eI.spanToTraceHeader(W)) | |
let B = r$1.dynamicSamplingContextToSentryBaggageHeader( | |
eI.getDynamicSamplingContextFromSpan(W), | |
) | |
if (B) w.header('baggage', B) | |
} | |
return d.continue | |
}), | |
G.ext('onPostHandler', (Z, d) => { | |
let W = eI.getActiveTransaction() | |
if (W) { | |
if (Z.response && a$1(Z.response)) eI.setHttpStatus(W, Z.response.statusCode) | |
W.end() | |
} | |
return d.continue | |
}) | |
}, | |
}, | |
e$1 = 'Hapi', | |
A54 = (I = {}) => { | |
let G = I.server | |
return { | |
name: e$1, | |
setupOnce() { | |
if (!G) return | |
r$1.fill(G, 'start', (Z) => { | |
return async function () { | |
return await this.register(o$1), await this.register(s$1), Z.apply(this) | |
} | |
}) | |
}, | |
} | |
}, | |
t$1 = eI.defineIntegration(A54), | |
X54 = eI.convertIntegrationFnToClass(e$1, t$1) | |
Iy1.Hapi = X54 | |
Iy1.hapiErrorPlugin = s$1 | |
Iy1.hapiIntegration = t$1 | |
Iy1.hapiTracingPlugin = o$1 | |
}) | |
var Zy1 = _((Gy1) => { | |
Object.defineProperty(Gy1, '__esModule', { value: !0 }) | |
var F54 = _b(), | |
J54 = Jb(), | |
K54 = Ub(), | |
g54 = Rb(), | |
N54 = zb(), | |
z54 = Fb(), | |
Q54 = Db(), | |
q54 = Y4(), | |
U54 = Nb(), | |
f54 = Mb(), | |
R54 = Eb(), | |
E54 = $b(), | |
v54 = S21() | |
Gy1.Console = F54.Console | |
Gy1.Http = J54.Http | |
Gy1.OnUncaughtException = K54.OnUncaughtException | |
Gy1.OnUnhandledRejection = g54.OnUnhandledRejection | |
Gy1.Modules = N54.Modules | |
Gy1.ContextLines = z54.ContextLines | |
Gy1.Context = Q54.Context | |
Gy1.RequestData = q54.RequestData | |
Gy1.LocalVariables = U54.LocalVariables | |
Gy1.Undici = f54.Undici | |
Gy1.Spotlight = R54.Spotlight | |
Gy1.Anr = E54.Anr | |
Gy1.Hapi = v54.Hapi | |
}) | |
var Wy1 = _((dy1) => { | |
Object.defineProperty(dy1, '__esModule', { value: !0 }) | |
var tF = C21() | |
dy1.Apollo = tF.Apollo | |
dy1.Express = tF.Express | |
dy1.GraphQL = tF.GraphQL | |
dy1.Mongo = tF.Mongo | |
dy1.Mysql = tF.Mysql | |
dy1.Postgres = tF.Postgres | |
dy1.Prisma = tF.Prisma | |
}) | |
var Vy1 = _((Cy1) => { | |
Object.defineProperty(Cy1, '__esModule', { value: !0 }) | |
var IJ = Y4(), | |
GJ = X0(), | |
wy1 = 'CaptureConsole', | |
a54 = (I = {}) => { | |
let G = I.levels || GJ.CONSOLE_LEVELS | |
return { | |
name: wy1, | |
setupOnce() {}, | |
setup(Z) { | |
if (!('console' in GJ.GLOBAL_OBJ)) return | |
GJ.addConsoleInstrumentationHandler(({ args: d, level: W }) => { | |
if (IJ.getClient() !== Z || !G.includes(W)) return | |
s54(d, W) | |
}) | |
}, | |
} | |
}, | |
By1 = IJ.defineIntegration(a54), | |
r54 = IJ.convertIntegrationFnToClass(wy1, By1) | |
function s54(I, G) { | |
let Z = { level: GJ.severityLevelFromString(G), extra: { arguments: I } } | |
IJ.withScope((d) => { | |
if ( | |
(d.addEventProcessor((B) => { | |
return ( | |
(B.logger = 'console'), GJ.addExceptionMechanism(B, { handled: !1, type: 'console' }), B | |
) | |
}), | |
G === 'assert' && I[0] === !1) | |
) { | |
let B = `Assertion failed: ${GJ.safeJoin(I.slice(1), ' ') || 'console.assert'}` | |
d.setExtra('arguments', I.slice(1)), IJ.captureMessage(B, Z) | |
return | |
} | |
let W = I.find((B) => B instanceof Error) | |
if (G === 'error' && W) { | |
IJ.captureException(W, Z) | |
return | |
} | |
let w = GJ.safeJoin(I, ' ') | |
IJ.captureMessage(w, Z) | |
}) | |
} | |
Cy1.CaptureConsole = r54 | |
Cy1.captureConsoleIntegration = By1 | |
}) | |
var Dy1 = _((_y1) => { | |
Object.defineProperty(_y1, '__esModule', { value: !0 }) | |
var Ay1 = Y4(), | |
t54 = X0(), | |
Xy1 = 'Debug', | |
I94 = (I = {}) => { | |
let G = { debugger: !1, stringify: !1, ...I } | |
return { | |
name: Xy1, | |
setupOnce() {}, | |
setup(Z) { | |
if (!Z.on) return | |
Z.on('beforeSendEvent', (d, W) => { | |
if (G.debugger) debugger | |
t54.consoleSandbox(() => { | |
if (G.stringify) { | |
if ((console.log(JSON.stringify(d, null, 2)), W && Object.keys(W).length)) | |
console.log(JSON.stringify(W, null, 2)) | |
} else if ((console.log(d), W && Object.keys(W).length)) console.log(W) | |
}) | |
}) | |
}, | |
} | |
}, | |
Yy1 = Ay1.defineIntegration(I94), | |
G94 = Ay1.convertIntegrationFnToClass(Xy1, Yy1) | |
_y1.Debug = G94 | |
_y1.debugIntegration = Yy1 | |
}) | |
var kv = _((Hy1) => { | |
Object.defineProperty(Hy1, '__esModule', { value: !0 }) | |
var W94 = typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__ | |
Hy1.DEBUG_BUILD = W94 | |
}) | |
var fy1 = _((Uy1) => { | |
Object.defineProperty(Uy1, '__esModule', { value: !0 }) | |
var Ky1 = Y4(), | |
B94 = X0(), | |
C94 = kv(), | |
gy1 = 'Dedupe', | |
V94 = () => { | |
let I | |
return { | |
name: gy1, | |
setupOnce() {}, | |
processEvent(G) { | |
if (G.type) return G | |
try { | |
if (zy1(G, I)) | |
return ( | |
C94.DEBUG_BUILD && | |
B94.logger.warn( | |
'Event dropped due to being a duplicate of previously captured event.', | |
), | |
null | |
) | |
} catch (Z) {} | |
return (I = G) | |
}, | |
} | |
}, | |
Ny1 = Ky1.defineIntegration(V94), | |
A94 = Ky1.convertIntegrationFnToClass(gy1, Ny1) | |
function zy1(I, G) { | |
if (!G) return !1 | |
if (X94(I, G)) return !0 | |
if (Y94(I, G)) return !0 | |
return !1 | |
} | |
function X94(I, G) { | |
let Z = I.message, | |
d = G.message | |
if (!Z && !d) return !1 | |
if ((Z && !d) || (!Z && d)) return !1 | |
if (Z !== d) return !1 | |
if (!qy1(I, G)) return !1 | |
if (!Qy1(I, G)) return !1 | |
return !0 | |
} | |
function Y94(I, G) { | |
let Z = Fy1(G), | |
d = Fy1(I) | |
if (!Z || !d) return !1 | |
if (Z.type !== d.type || Z.value !== d.value) return !1 | |
if (!qy1(I, G)) return !1 | |
if (!Qy1(I, G)) return !1 | |
return !0 | |
} | |
function Qy1(I, G) { | |
let Z = Jy1(I), | |
d = Jy1(G) | |
if (!Z && !d) return !0 | |
if ((Z && !d) || (!Z && d)) return !1 | |
if (((Z = Z), (d = d), d.length !== Z.length)) return !1 | |
for (let W = 0; W < d.length; W++) { | |
let w = d[W], | |
B = Z[W] | |
if ( | |
w.filename !== B.filename || | |
w.lineno !== B.lineno || | |
w.colno !== B.colno || | |
w.function !== B.function | |
) | |
return !1 | |
} | |
return !0 | |
} | |
function qy1(I, G) { | |
let Z = I.fingerprint, | |
d = G.fingerprint | |
if (!Z && !d) return !0 | |
if ((Z && !d) || (!Z && d)) return !1 | |
;(Z = Z), (d = d) | |
try { | |
return Z.join('') === d.join('') | |
} catch (W) { | |
return !1 | |
} | |
} | |
function Fy1(I) { | |
return I.exception && I.exception.values && I.exception.values[0] | |
} | |
function Jy1(I) { | |
let G = I.exception | |
if (G) | |
try { | |
return G.values[0].stacktrace.frames | |
} catch (Z) { | |
return | |
} | |
return | |
} | |
Uy1.Dedupe = A94 | |
Uy1._shouldDropEvent = zy1 | |
Uy1.dedupeIntegration = Ny1 | |
}) | |
var Sy1 = _((My1) => { | |
Object.defineProperty(My1, '__esModule', { value: !0 }) | |
var Ry1 = Y4(), | |
JY = X0(), | |
F94 = kv(), | |
Ey1 = 'ExtraErrorData', | |
J94 = (I = {}) => { | |
let G = I.depth || 3, | |
Z = I.captureErrorCause || !1 | |
return { | |
name: Ey1, | |
setupOnce() {}, | |
processEvent(d, W) { | |
return g94(d, W, G, Z) | |
}, | |
} | |
}, | |
vy1 = Ry1.defineIntegration(J94), | |
K94 = Ry1.convertIntegrationFnToClass(Ey1, vy1) | |
function g94(I, G = {}, Z, d) { | |
if (!G.originalException || !JY.isError(G.originalException)) return I | |
let W = G.originalException.name || G.originalException.constructor.name, | |
w = N94(G.originalException, d) | |
if (w) { | |
let B = { ...I.contexts }, | |
C = JY.normalize(w, Z) | |
if (JY.isPlainObject(C)) | |
JY.addNonEnumerableProperty(C, '__sentry_skip_normalization__', !0), (B[W] = C) | |
return { ...I, contexts: B } | |
} | |
return I | |
} | |
function N94(I, G) { | |
try { | |
let Z = [ | |
'name', | |
'message', | |
'stack', | |
'line', | |
'column', | |
'fileName', | |
'lineNumber', | |
'columnNumber', | |
'toJSON', | |
], | |
d = {} | |
for (let W of Object.keys(I)) { | |
if (Z.indexOf(W) !== -1) continue | |
let w = I[W] | |
d[W] = JY.isError(w) ? w.toString() : w | |
} | |
if (G && I.cause !== void 0) d.cause = JY.isError(I.cause) ? I.cause.toString() : I.cause | |
if (typeof I.toJSON === 'function') { | |
let W = I.toJSON() | |
for (let w of Object.keys(W)) { | |
let B = W[w] | |
d[w] = JY.isError(B) ? B.toString() : B | |
} | |
} | |
return d | |
} catch (Z) { | |
F94.DEBUG_BUILD && JY.logger.error('Unable to extract extra data from the Error object:', Z) | |
} | |
return null | |
} | |
My1.ExtraErrorData = K94 | |
My1.extraErrorDataIntegration = vy1 | |
}) | |
var $y1 = _((Ly1, L21) => { | |
/*! | |
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 Ly1 === 'object' && typeof L21 !== 'undefined') L21.exports = I() | |
else if (typeof define === 'function' && define.amd) define([], I) | |
else { | |
var G | |
if (typeof window !== 'undefined') G = window | |
else if (typeof global !== 'undefined') G = global | |
else if (typeof self !== 'undefined') G = self | |
else G = this | |
G.localforage = I() | |
} | |
})(function () { | |
var I, G, Z | |
return (function d(W, w, B) { | |
function C(X, Y) { | |
if (!w[X]) { | |
if (!W[X]) { | |
var H = A1 | |
if (!Y && H) return H(X, !0) | |
if (V) return V(X, !0) | |
var J = new Error("Cannot find module '" + X + "'") | |
throw ((J.code = 'MODULE_NOT_FOUND'), J) | |
} | |
var K = (w[X] = { exports: {} }) | |
W[X][0].call( | |
K.exports, | |
function (g) { | |
var z = W[X][1][g] | |
return C(z ? z : g) | |
}, | |
K, | |
K.exports, | |
d, | |
W, | |
w, | |
B, | |
) | |
} | |
return w[X].exports | |
} | |
var V = A1 | |
for (var A = 0; A < B.length; A++) C(B[A]) | |
return C | |
})( | |
{ | |
1: [ | |
function (d, W, w) { | |
;(function (B) { | |
var C = B.MutationObserver || B.WebKitMutationObserver, | |
V | |
if (C) { | |
var A = 0, | |
X = new C(g), | |
Y = B.document.createTextNode('') | |
X.observe(Y, { characterData: !0 }), | |
(V = function () { | |
Y.data = A = ++A % 2 | |
}) | |
} else if (!B.setImmediate && typeof B.MessageChannel !== 'undefined') { | |
var H = new B.MessageChannel() | |
;(H.port1.onmessage = g), | |
(V = function () { | |
H.port2.postMessage(0) | |
}) | |
} else if ( | |
'document' in B && | |
'onreadystatechange' in B.document.createElement('script') | |
) | |
V = function () { | |
var f = B.document.createElement('script') | |
;(f.onreadystatechange = function () { | |
g(), (f.onreadystatechange = null), f.parentNode.removeChild(f), (f = null) | |
}), | |
B.document.documentElement.appendChild(f) | |
} | |
else | |
V = function () { | |
setTimeout(g, 0) | |
} | |
var J, | |
K = [] | |
function g() { | |
J = !0 | |
var f, | |
S, | |
$ = K.length | |
while ($) { | |
;(S = K), (K = []), (f = -1) | |
while (++f < $) S[f]() | |
$ = K.length | |
} | |
J = !1 | |
} | |
W.exports = z | |
function z(f) { | |
if (K.push(f) === 1 && !J) V() | |
} | |
}).call( | |
this, | |
typeof global !== 'undefined' | |
? global | |
: typeof self !== 'undefined' | |
? self | |
: typeof window !== 'undefined' | |
? window | |
: {}, | |
) | |
}, | |
{}, | |
], | |
2: [ | |
function (d, W, w) { | |
var B = d(1) | |
function C() {} | |
var V = {}, | |
A = ['REJECTED'], | |
X = ['FULFILLED'], | |
Y = ['PENDING'] | |
W.exports = H | |
function H(m) { | |
if (typeof m !== 'function') throw new TypeError('resolver must be a function') | |
if (((this.state = Y), (this.queue = []), (this.outcome = void 0), m !== C)) | |
z(this, m) | |
} | |
;(H.prototype.catch = function (m) { | |
return this.then(null, m) | |
}), | |
(H.prototype.then = function (m, O) { | |
if ( | |
(typeof m !== 'function' && this.state === X) || | |
(typeof O !== 'function' && this.state === A) | |
) | |
return this | |
var w1 = new this.constructor(C) | |
if (this.state !== Y) { | |
var b = this.state === X ? m : O | |
K(w1, b, this.outcome) | |
} else this.queue.push(new J(w1, m, O)) | |
return w1 | |
}) | |
function J(m, O, w1) { | |
if (((this.promise = m), typeof O === 'function')) | |
(this.onFulfilled = O), (this.callFulfilled = this.otherCallFulfilled) | |
if (typeof w1 === 'function') | |
(this.onRejected = w1), (this.callRejected = this.otherCallRejected) | |
} | |
;(J.prototype.callFulfilled = function (m) { | |
V.resolve(this.promise, m) | |
}), | |
(J.prototype.otherCallFulfilled = function (m) { | |
K(this.promise, this.onFulfilled, m) | |
}), | |
(J.prototype.callRejected = function (m) { | |
V.reject(this.promise, m) | |
}), | |
(J.prototype.otherCallRejected = function (m) { | |
K(this.promise, this.onRejected, m) | |
}) | |
function K(m, O, w1) { | |
B(function () { | |
var b | |
try { | |
b = O(w1) | |
} catch (x1) { | |
return V.reject(m, x1) | |
} | |
if (b === m) V.reject(m, new TypeError('Cannot resolve promise with itself')) | |
else V.resolve(m, b) | |
}) | |
} | |
;(V.resolve = function (m, O) { | |
var w1 = f(g, O) | |
if (w1.status === 'error') return V.reject(m, w1.value) | |
var b = w1.value | |
if (b) z(m, b) | |
else { | |
;(m.state = X), (m.outcome = O) | |
var x1 = -1, | |
r1 = m.queue.length | |
while (++x1 < r1) m.queue[x1].callFulfilled(O) | |
} | |
return m | |
}), | |
(V.reject = function (m, O) { | |
;(m.state = A), (m.outcome = O) | |
var w1 = -1, | |
b = m.queue.length | |
while (++w1 < b) m.queue[w1].callRejected(O) | |
return m | |
}) | |
function g(m) { | |
var O = m && m.then | |
if ( | |
m && | |
(typeof m === 'object' || typeof m === 'function') && | |
typeof O === 'function' | |
) | |
return function w1() { | |
O.apply(m, arguments) | |
} | |
} | |
function z(m, O) { | |
var w1 = !1 | |
function b(F1) { | |
if (w1) return | |
;(w1 = !0), V.reject(m, F1) | |
} | |
function x1(F1) { | |
if (w1) return | |
;(w1 = !0), V.resolve(m, F1) | |
} | |
function r1() { | |
O(x1, b) | |
} | |
var $1 = f(r1) | |
if ($1.status === 'error') b($1.value) | |
} | |
function f(m, O) { | |
var w1 = {} | |
try { | |
;(w1.value = m(O)), (w1.status = 'success') | |
} catch (b) { | |
;(w1.status = 'error'), (w1.value = b) | |
} | |
return w1 | |
} | |
H.resolve = S | |
function S(m) { | |
if (m instanceof this) return m | |
return V.resolve(new this(C), m) | |
} | |
H.reject = $ | |
function $(m) { | |
var O = new this(C) | |
return V.reject(O, m) | |
} | |
H.all = L | |
function L(m) { | |
var O = this | |
if (Object.prototype.toString.call(m) !== '[object Array]') | |
return this.reject(new TypeError('must be an array')) | |
var w1 = m.length, | |
b = !1 | |
if (!w1) return this.resolve([]) | |
var x1 = new Array(w1), | |
r1 = 0, | |
$1 = -1, | |
F1 = new this(C) | |
while (++$1 < w1) n(m[$1], $1) | |
return F1 | |
function n(C1, u1) { | |
O.resolve(C1).then(T1, function (e1) { | |
if (!b) (b = !0), V.reject(F1, e1) | |
}) | |
function T1(e1) { | |
if (((x1[u1] = e1), ++r1 === w1 && !b)) (b = !0), V.resolve(F1, x1) | |
} | |
} | |
} | |
H.race = T | |
function T(m) { | |
var O = this | |
if (Object.prototype.toString.call(m) !== '[object Array]') | |
return this.reject(new TypeError('must be an array')) | |
var w1 = m.length, | |
b = !1 | |
if (!w1) return this.resolve([]) | |
var x1 = -1, | |
r1 = new this(C) | |
while (++x1 < w1) $1(m[x1]) | |
return r1 | |
function $1(F1) { | |
O.resolve(F1).then( | |
function (n) { | |
if (!b) (b = !0), V.resolve(r1, n) | |
}, | |
function (n) { | |
if (!b) (b = !0), V.reject(r1, n) | |
}, | |
) | |
} | |
} | |
}, | |
{ 1: 1 }, | |
], | |
3: [ | |
function (d, W, w) { | |
;(function (B) { | |
if (typeof B.Promise !== 'function') B.Promise = d(2) | |
}).call( | |
this, | |
typeof global !== 'undefined' | |
? global | |
: typeof self !== 'undefined' | |
? self | |
: typeof window !== 'undefined' | |
? window | |
: {}, | |
) | |
}, | |
{ 2: 2 }, | |
], | |
4: [ | |
function (d, W, w) { | |
var B = | |
typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' | |
? function (j) { | |
return typeof j | |
} | |
: function (j) { | |
return j && | |
typeof Symbol === 'function' && | |
j.constructor === Symbol && | |
j !== Symbol.prototype | |
? 'symbol' | |
: typeof j | |
} | |
function C(j, D1) { | |
if (!(j instanceof D1)) throw new TypeError('Cannot call a class as a function') | |
} | |
function V() { | |
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 (j) { | |
return | |
} | |
} | |
var A = V() | |
function X() { | |
try { | |
if (!A || !A.open) return !1 | |
var j = | |
typeof openDatabase !== 'undefined' && | |
/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && | |
!/Chrome/.test(navigator.userAgent) && | |
!/BlackBerry/.test(navigator.platform), | |
D1 = | |
typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1 | |
return ( | |
(!j || D1) && | |
typeof indexedDB !== 'undefined' && | |
typeof IDBKeyRange !== 'undefined' | |
) | |
} catch (I1) { | |
return !1 | |
} | |
} | |
function Y(j, D1) { | |
;(j = j || []), (D1 = D1 || {}) | |
try { | |
return new Blob(j, D1) | |
} catch (v1) { | |
if (v1.name !== 'TypeError') throw v1 | |
var I1 = | |
typeof BlobBuilder !== 'undefined' | |
? BlobBuilder | |
: typeof MSBlobBuilder !== 'undefined' | |
? MSBlobBuilder | |
: typeof MozBlobBuilder !== 'undefined' | |
? MozBlobBuilder | |
: WebKitBlobBuilder, | |
E1 = new I1() | |
for (var y1 = 0; y1 < j.length; y1 += 1) E1.append(j[y1]) | |
return E1.getBlob(D1.type) | |
} | |
} | |
if (typeof Promise === 'undefined') d(3) | |
var H = Promise | |
function J(j, D1) { | |
if (D1) | |
j.then( | |
function (I1) { | |
D1(null, I1) | |
}, | |
function (I1) { | |
D1(I1) | |
}, | |
) | |
} | |
function K(j, D1, I1) { | |
if (typeof D1 === 'function') j.then(D1) | |
if (typeof I1 === 'function') j.catch(I1) | |
} | |
function g(j) { | |
if (typeof j !== 'string') | |
console.warn(j + ' used as a key, but it is not a string.'), (j = String(j)) | |
return j | |
} | |
function z() { | |
if (arguments.length && typeof arguments[arguments.length - 1] === 'function') | |
return arguments[arguments.length - 1] | |
} | |
var f = 'local-forage-detect-blob-support', | |
S = void 0, | |
$ = {}, | |
L = Object.prototype.toString, | |
T = 'readonly', | |
m = 'readwrite' | |
function O(j) { | |
var D1 = j.length, | |
I1 = new ArrayBuffer(D1), | |
E1 = new Uint8Array(I1) | |
for (var y1 = 0; y1 < D1; y1++) E1[y1] = j.charCodeAt(y1) | |
return I1 | |
} | |
function w1(j) { | |
return new H(function (D1) { | |
var I1 = j.transaction(f, m), | |
E1 = Y(['']) | |
I1.objectStore(f).put(E1, 'key'), | |
(I1.onabort = function (y1) { | |
y1.preventDefault(), y1.stopPropagation(), D1(!1) | |
}), | |
(I1.oncomplete = function () { | |
var y1 = navigator.userAgent.match(/Chrome\/(\d+)/), | |
v1 = navigator.userAgent.match(/Edge\//) | |
D1(v1 || !y1 || parseInt(y1[1], 10) >= 43) | |
}) | |
}).catch(function () { | |
return !1 | |
}) | |
} | |
function b(j) { | |
if (typeof S === 'boolean') return H.resolve(S) | |
return w1(j).then(function (D1) { | |
return (S = D1), S | |
}) | |
} | |
function x1(j) { | |
var D1 = $[j.name], | |
I1 = {} | |
if ( | |
((I1.promise = new H(function (E1, y1) { | |
;(I1.resolve = E1), (I1.reject = y1) | |
})), | |
D1.deferredOperations.push(I1), | |
!D1.dbReady) | |
) | |
D1.dbReady = I1.promise | |
else | |
D1.dbReady = D1.dbReady.then(function () { | |
return I1.promise | |
}) | |
} | |
function r1(j) { | |
var D1 = $[j.name], | |
I1 = D1.deferredOperations.pop() | |
if (I1) return I1.resolve(), I1.promise | |
} | |
function $1(j, D1) { | |
var I1 = $[j.name], | |
E1 = I1.deferredOperations.pop() | |
if (E1) return E1.reject(D1), E1.promise | |
} | |
function F1(j, D1) { | |
return new H(function (I1, E1) { | |
if ((($[j.name] = $[j.name] || e()), j.db)) | |
if (D1) x1(j), j.db.close() | |
else return I1(j.db) | |
var y1 = [j.name] | |
if (D1) y1.push(j.version) | |
var v1 = A.open.apply(A, y1) | |
if (D1) | |
v1.onupgradeneeded = function (d0) { | |
var Q0 = v1.result | |
try { | |
if ((Q0.createObjectStore(j.storeName), d0.oldVersion <= 1)) | |
Q0.createObjectStore(f) | |
} catch (N0) { | |
if (N0.name === 'ConstraintError') | |
console.warn( | |
'The database "' + | |
j.name + | |
'" has been upgraded from version ' + | |
d0.oldVersion + | |
' to version ' + | |
d0.newVersion + | |
', but the storage "' + | |
j.storeName + | |
'" already exists.', | |
) | |
else throw N0 | |
} | |
} | |
;(v1.onerror = function (d0) { | |
d0.preventDefault(), E1(v1.error) | |
}), | |
(v1.onsuccess = function () { | |
var d0 = v1.result | |
;(d0.onversionchange = function (Q0) { | |
Q0.target.close() | |
}), | |
I1(d0), | |
r1(j) | |
}) | |
}) | |
} | |
function n(j) { | |
return F1(j, !1) | |
} | |
function C1(j) { | |
return F1(j, !0) | |
} | |
function u1(j, D1) { | |
if (!j.db) return !0 | |
var I1 = !j.db.objectStoreNames.contains(j.storeName), | |
E1 = j.version < j.db.version, | |
y1 = j.version > j.db.version | |
if (E1) { | |
if (j.version !== D1) | |
console.warn( | |
'The database "' + | |
j.name + | |
`" can't be downgraded from version ` + | |
j.db.version + | |
' to version ' + | |
j.version + | |
'.', | |
) | |
j.version = j.db.version | |
} | |
if (y1 || I1) { | |
if (I1) { | |
var v1 = j.db.version + 1 | |
if (v1 > j.version) j.version = v1 | |
} | |
return !0 | |
} | |
return !1 | |
} | |
function T1(j) { | |
return new H(function (D1, I1) { | |
var E1 = new FileReader() | |
;(E1.onerror = I1), | |
(E1.onloadend = function (y1) { | |
var v1 = btoa(y1.target.result || '') | |
D1({ __local_forage_encoded_blob: !0, data: v1, type: j.type }) | |
}), | |
E1.readAsBinaryString(j) | |
}) | |
} | |
function e1(j) { | |
var D1 = O(atob(j.data)) | |
return Y([D1], { type: j.type }) | |
} | |
function Y0(j) { | |
return j && j.__local_forage_encoded_blob | |
} | |
function v0(j) { | |
var D1 = this, | |
I1 = D1._initReady().then(function () { | |
var E1 = $[D1._dbInfo.name] | |
if (E1 && E1.dbReady) return E1.dbReady | |
}) | |
return K(I1, j, j), I1 | |
} | |
function V0(j) { | |
x1(j) | |
var D1 = $[j.name], | |
I1 = D1.forages | |
for (var E1 = 0; E1 < I1.length; E1++) { | |
var y1 = I1[E1] | |
if (y1._dbInfo.db) y1._dbInfo.db.close(), (y1._dbInfo.db = null) | |
} | |
return ( | |
(j.db = null), | |
n(j) | |
.then(function (v1) { | |
if (((j.db = v1), u1(j))) return C1(j) | |
return v1 | |
}) | |
.then(function (v1) { | |
j.db = D1.db = v1 | |
for (var d0 = 0; d0 < I1.length; d0++) I1[d0]._dbInfo.db = v1 | |
}) | |
.catch(function (v1) { | |
throw ($1(j, v1), v1) | |
}) | |
) | |
} | |
function r0(j, D1, I1, E1) { | |
if (E1 === void 0) E1 = 1 | |
try { | |
var y1 = j.db.transaction(j.storeName, D1) | |
I1(null, y1) | |
} catch (v1) { | |
if ( | |
E1 > 0 && | |
(!j.db || v1.name === 'InvalidStateError' || v1.name === 'NotFoundError') | |
) | |
return H.resolve() | |
.then(function () { | |
if ( | |
!j.db || | |
(v1.name === 'NotFoundError' && | |
!j.db.objectStoreNames.contains(j.storeName) && | |
j.version <= j.db.version) | |
) { | |
if (j.db) j.version = j.db.version + 1 | |
return C1(j) | |
} | |
}) | |
.then(function () { | |
return V0(j).then(function () { | |
r0(j, D1, I1, E1 - 1) | |
}) | |
}) | |
.catch(I1) | |
I1(v1) | |
} | |
} | |
function e() { | |
return { forages: [], db: null, dbReady: null, deferredOperations: [] } | |
} | |
function Z0(j) { | |
var D1 = this, | |
I1 = { db: null } | |
if (j) for (var E1 in j) I1[E1] = j[E1] | |
var y1 = $[I1.name] | |
if (!y1) (y1 = e()), ($[I1.name] = y1) | |
if ((y1.forages.push(D1), !D1._initReady)) (D1._initReady = D1.ready), (D1.ready = v0) | |
var v1 = [] | |
function d0() { | |
return H.resolve() | |
} | |
for (var Q0 = 0; Q0 < y1.forages.length; Q0++) { | |
var N0 = y1.forages[Q0] | |
if (N0 !== D1) v1.push(N0._initReady().catch(d0)) | |
} | |
var u0 = y1.forages.slice(0) | |
return H.all(v1) | |
.then(function () { | |
return (I1.db = y1.db), n(I1) | |
}) | |
.then(function (x0) { | |
if (((I1.db = x0), u1(I1, D1._defaultConfig.version))) return C1(I1) | |
return x0 | |
}) | |
.then(function (x0) { | |
;(I1.db = y1.db = x0), (D1._dbInfo = I1) | |
for (var J2 = 0; J2 < u0.length; J2++) { | |
var K4 = u0[J2] | |
if (K4 !== D1) (K4._dbInfo.db = I1.db), (K4._dbInfo.version = I1.version) | |
} | |
}) | |
} | |
function K1(j, D1) { | |
var I1 = this | |
j = g(j) | |
var E1 = new H(function (y1, v1) { | |
I1.ready() | |
.then(function () { | |
r0(I1._dbInfo, T, function (d0, Q0) { | |
if (d0) return v1(d0) | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
u0 = N0.get(j) | |
;(u0.onsuccess = function () { | |
var x0 = u0.result | |
if (x0 === void 0) x0 = null | |
if (Y0(x0)) x0 = e1(x0) | |
y1(x0) | |
}), | |
(u0.onerror = function () { | |
v1(u0.error) | |
}) | |
} catch (x0) { | |
v1(x0) | |
} | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function k1(j, D1) { | |
var I1 = this, | |
E1 = new H(function (y1, v1) { | |
I1.ready() | |
.then(function () { | |
r0(I1._dbInfo, T, function (d0, Q0) { | |
if (d0) return v1(d0) | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
u0 = N0.openCursor(), | |
x0 = 1 | |
;(u0.onsuccess = function () { | |
var J2 = u0.result | |
if (J2) { | |
var K4 = J2.value | |
if (Y0(K4)) K4 = e1(K4) | |
var a4 = j(K4, J2.key, x0++) | |
if (a4 !== void 0) y1(a4) | |
else J2.continue() | |
} else y1() | |
}), | |
(u0.onerror = function () { | |
v1(u0.error) | |
}) | |
} catch (J2) { | |
v1(J2) | |
} | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function n1(j, D1, I1) { | |
var E1 = this | |
j = g(j) | |
var y1 = new H(function (v1, d0) { | |
var Q0 | |
E1.ready() | |
.then(function () { | |
if (((Q0 = E1._dbInfo), L.call(D1) === '[object Blob]')) | |
return b(Q0.db).then(function (N0) { | |
if (N0) return D1 | |
return T1(D1) | |
}) | |
return D1 | |
}) | |
.then(function (N0) { | |
r0(E1._dbInfo, m, function (u0, x0) { | |
if (u0) return d0(u0) | |
try { | |
var J2 = x0.objectStore(E1._dbInfo.storeName) | |
if (N0 === null) N0 = void 0 | |
var K4 = J2.put(N0, j) | |
;(x0.oncomplete = function () { | |
if (N0 === void 0) N0 = null | |
v1(N0) | |
}), | |
(x0.onabort = x0.onerror = | |
function () { | |
var a4 = K4.error ? K4.error : K4.transaction.error | |
d0(a4) | |
}) | |
} catch (a4) { | |
d0(a4) | |
} | |
}) | |
}) | |
.catch(d0) | |
}) | |
return J(y1, I1), y1 | |
} | |
function S0(j, D1) { | |
var I1 = this | |
j = g(j) | |
var E1 = new H(function (y1, v1) { | |
I1.ready() | |
.then(function () { | |
r0(I1._dbInfo, m, function (d0, Q0) { | |
if (d0) return v1(d0) | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
u0 = N0.delete(j) | |
;(Q0.oncomplete = function () { | |
y1() | |
}), | |
(Q0.onerror = function () { | |
v1(u0.error) | |
}), | |
(Q0.onabort = function () { | |
var x0 = u0.error ? u0.error : u0.transaction.error | |
v1(x0) | |
}) | |
} catch (x0) { | |
v1(x0) | |
} | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function h(j) { | |
var D1 = this, | |
I1 = new H(function (E1, y1) { | |
D1.ready() | |
.then(function () { | |
r0(D1._dbInfo, m, function (v1, d0) { | |
if (v1) return y1(v1) | |
try { | |
var Q0 = d0.objectStore(D1._dbInfo.storeName), | |
N0 = Q0.clear() | |
;(d0.oncomplete = function () { | |
E1() | |
}), | |
(d0.onabort = d0.onerror = | |
function () { | |
var u0 = N0.error ? N0.error : N0.transaction.error | |
y1(u0) | |
}) | |
} catch (u0) { | |
y1(u0) | |
} | |
}) | |
}) | |
.catch(y1) | |
}) | |
return J(I1, j), I1 | |
} | |
function r(j) { | |
var D1 = this, | |
I1 = new H(function (E1, y1) { | |
D1.ready() | |
.then(function () { | |
r0(D1._dbInfo, T, function (v1, d0) { | |
if (v1) return y1(v1) | |
try { | |
var Q0 = d0.objectStore(D1._dbInfo.storeName), | |
N0 = Q0.count() | |
;(N0.onsuccess = function () { | |
E1(N0.result) | |
}), | |
(N0.onerror = function () { | |
y1(N0.error) | |
}) | |
} catch (u0) { | |
y1(u0) | |
} | |
}) | |
}) | |
.catch(y1) | |
}) | |
return J(I1, j), I1 | |
} | |
function d1(j, D1) { | |
var I1 = this, | |
E1 = new H(function (y1, v1) { | |
if (j < 0) { | |
y1(null) | |
return | |
} | |
I1.ready() | |
.then(function () { | |
r0(I1._dbInfo, T, function (d0, Q0) { | |
if (d0) return v1(d0) | |
try { | |
var N0 = Q0.objectStore(I1._dbInfo.storeName), | |
u0 = !1, | |
x0 = N0.openKeyCursor() | |
;(x0.onsuccess = function () { | |
var J2 = x0.result | |
if (!J2) { | |
y1(null) | |
return | |
} | |
if (j === 0) y1(J2.key) | |
else if (!u0) (u0 = !0), J2.advance(j) | |
else y1(J2.key) | |
}), | |
(x0.onerror = function () { | |
v1(x0.error) | |
}) | |
} catch (J2) { | |
v1(J2) | |
} | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function U1(j) { | |
var D1 = this, | |
I1 = new H(function (E1, y1) { | |
D1.ready() | |
.then(function () { | |
r0(D1._dbInfo, T, function (v1, d0) { | |
if (v1) return y1(v1) | |
try { | |
var Q0 = d0.objectStore(D1._dbInfo.storeName), | |
N0 = Q0.openKeyCursor(), | |
u0 = [] | |
;(N0.onsuccess = function () { | |
var x0 = N0.result | |
if (!x0) { | |
E1(u0) | |
return | |
} | |
u0.push(x0.key), x0.continue() | |
}), | |
(N0.onerror = function () { | |
y1(N0.error) | |
}) | |
} catch (x0) { | |
y1(x0) | |
} | |
}) | |
}) | |
.catch(y1) | |
}) | |
return J(I1, j), I1 | |
} | |
function Q1(j, D1) { | |
D1 = z.apply(this, arguments) | |
var I1 = this.config() | |
if (((j = (typeof j !== 'function' && j) || {}), !j.name)) | |
(j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName) | |
var E1 = this, | |
y1 | |
if (!j.name) y1 = H.reject('Invalid arguments') | |
else { | |
var v1 = j.name === I1.name && E1._dbInfo.db, | |
d0 = v1 | |
? H.resolve(E1._dbInfo.db) | |
: n(j).then(function (Q0) { | |
var N0 = $[j.name], | |
u0 = N0.forages | |
N0.db = Q0 | |
for (var x0 = 0; x0 < u0.length; x0++) u0[x0]._dbInfo.db = Q0 | |
return Q0 | |
}) | |
if (!j.storeName) | |
y1 = d0.then(function (Q0) { | |
x1(j) | |
var N0 = $[j.name], | |
u0 = N0.forages | |
Q0.close() | |
for (var x0 = 0; x0 < u0.length; x0++) { | |
var J2 = u0[x0] | |
J2._dbInfo.db = null | |
} | |
var K4 = new H(function (a4, r4) { | |
var w9 = A.deleteDatabase(j.name) | |
;(w9.onerror = function () { | |
var l9 = w9.result | |
if (l9) l9.close() | |
r4(w9.error) | |
}), | |
(w9.onblocked = function () { | |
console.warn( | |
'dropInstance blocked for database "' + | |
j.name + | |
'" until all open connections are closed', | |
) | |
}), | |
(w9.onsuccess = function () { | |
var l9 = w9.result | |
if (l9) l9.close() | |
a4(l9) | |
}) | |
}) | |
return K4.then(function (a4) { | |
N0.db = a4 | |
for (var r4 = 0; r4 < u0.length; r4++) { | |
var w9 = u0[r4] | |
r1(w9._dbInfo) | |
} | |
}).catch(function (a4) { | |
throw (($1(j, a4) || H.resolve()).catch(function () {}), a4) | |
}) | |
}) | |
else | |
y1 = d0.then(function (Q0) { | |
if (!Q0.objectStoreNames.contains(j.storeName)) return | |
var N0 = Q0.version + 1 | |
x1(j) | |
var u0 = $[j.name], | |
x0 = u0.forages | |
Q0.close() | |
for (var J2 = 0; J2 < x0.length; J2++) { | |
var K4 = x0[J2] | |
;(K4._dbInfo.db = null), (K4._dbInfo.version = N0) | |
} | |
var a4 = new H(function (r4, w9) { | |
var l9 = A.open(j.name, N0) | |
;(l9.onerror = function (Z8) { | |
var SG = l9.result | |
SG.close(), w9(Z8) | |
}), | |
(l9.onupgradeneeded = function () { | |
var Z8 = l9.result | |
Z8.deleteObjectStore(j.storeName) | |
}), | |
(l9.onsuccess = function () { | |
var Z8 = l9.result | |
Z8.close(), r4(Z8) | |
}) | |
}) | |
return a4 | |
.then(function (r4) { | |
u0.db = r4 | |
for (var w9 = 0; w9 < x0.length; w9++) { | |
var l9 = x0[w9] | |
;(l9._dbInfo.db = r4), r1(l9._dbInfo) | |
} | |
}) | |
.catch(function (r4) { | |
throw (($1(j, r4) || H.resolve()).catch(function () {}), r4) | |
}) | |
}) | |
} | |
return J(y1, D1), y1 | |
} | |
var J1 = { | |
_driver: 'asyncStorage', | |
_initStorage: Z0, | |
_support: X(), | |
iterate: k1, | |
getItem: K1, | |
setItem: n1, | |
removeItem: S0, | |
clear: h, | |
length: r, | |
key: d1, | |
keys: U1, | |
dropInstance: Q1, | |
} | |
function m1() { | |
return typeof openDatabase === 'function' | |
} | |
var N1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', | |
R1 = '~~local_forage_type~', | |
j1 = /^~~local_forage_type~([^~]+)~/, | |
c = '__lfsc__:', | |
B1 = c.length, | |
o1 = 'arbf', | |
z1 = 'blob', | |
E0 = 'si08', | |
g0 = 'ui08', | |
k0 = 'uic8', | |
n0 = 'si16', | |
s0 = 'si32', | |
T2 = 'ur16', | |
N9 = 'ui32', | |
h0 = 'fl32', | |
w2 = 'fl64', | |
V2 = B1 + o1.length, | |
A4 = Object.prototype.toString | |
function X4(j) { | |
var D1 = j.length * 0.75, | |
I1 = j.length, | |
E1, | |
y1 = 0, | |
v1, | |
d0, | |
Q0, | |
N0 | |
if (j[j.length - 1] === '=') { | |
if ((D1--, j[j.length - 2] === '=')) D1-- | |
} | |
var u0 = new ArrayBuffer(D1), | |
x0 = new Uint8Array(u0) | |
for (E1 = 0; E1 < I1; E1 += 4) | |
(v1 = N1.indexOf(j[E1])), | |
(d0 = N1.indexOf(j[E1 + 1])), | |
(Q0 = N1.indexOf(j[E1 + 2])), | |
(N0 = N1.indexOf(j[E1 + 3])), | |
(x0[y1++] = (v1 << 2) | (d0 >> 4)), | |
(x0[y1++] = ((d0 & 15) << 4) | (Q0 >> 2)), | |
(x0[y1++] = ((Q0 & 3) << 6) | (N0 & 63)) | |
return u0 | |
} | |
function H5(j) { | |
var D1 = new Uint8Array(j), | |
I1 = '', | |
E1 | |
for (E1 = 0; E1 < D1.length; E1 += 3) | |
(I1 += N1[D1[E1] >> 2]), | |
(I1 += N1[((D1[E1] & 3) << 4) | (D1[E1 + 1] >> 4)]), | |
(I1 += N1[((D1[E1 + 1] & 15) << 2) | (D1[E1 + 2] >> 6)]), | |
(I1 += N1[D1[E1 + 2] & 63]) | |
if (D1.length % 3 === 2) I1 = I1.substring(0, I1.length - 1) + '=' | |
else if (D1.length % 3 === 1) I1 = I1.substring(0, I1.length - 2) + '==' | |
return I1 | |
} | |
function F5(j, D1) { | |
var I1 = '' | |
if (j) I1 = A4.call(j) | |
if ( | |
j && | |
(I1 === '[object ArrayBuffer]' || | |
(j.buffer && A4.call(j.buffer) === '[object ArrayBuffer]')) | |
) { | |
var E1, | |
y1 = c | |
if (j instanceof ArrayBuffer) (E1 = j), (y1 += o1) | |
else if (((E1 = j.buffer), I1 === '[object Int8Array]')) y1 += E0 | |
else if (I1 === '[object Uint8Array]') y1 += g0 | |
else if (I1 === '[object Uint8ClampedArray]') y1 += k0 | |
else if (I1 === '[object Int16Array]') y1 += n0 | |
else if (I1 === '[object Uint16Array]') y1 += T2 | |
else if (I1 === '[object Int32Array]') y1 += s0 | |
else if (I1 === '[object Uint32Array]') y1 += N9 | |
else if (I1 === '[object Float32Array]') y1 += h0 | |
else if (I1 === '[object Float64Array]') y1 += w2 | |
else D1(new Error('Failed to get type for BinaryArray')) | |
D1(y1 + H5(E1)) | |
} else if (I1 === '[object Blob]') { | |
var v1 = new FileReader() | |
;(v1.onload = function () { | |
var d0 = R1 + j.type + '~' + H5(this.result) | |
D1(c + z1 + d0) | |
}), | |
v1.readAsArrayBuffer(j) | |
} else | |
try { | |
D1(JSON.stringify(j)) | |
} catch (d0) { | |
console.error("Couldn't convert value into a JSON string: ", j), D1(null, d0) | |
} | |
} | |
function wW(j) { | |
if (j.substring(0, B1) !== c) return JSON.parse(j) | |
var D1 = j.substring(V2), | |
I1 = j.substring(B1, V2), | |
E1 | |
if (I1 === z1 && j1.test(D1)) { | |
var y1 = D1.match(j1) | |
;(E1 = y1[1]), (D1 = D1.substring(y1[0].length)) | |
} | |
var v1 = X4(D1) | |
switch (I1) { | |
case o1: | |
return v1 | |
case z1: | |
return Y([v1], { type: E1 }) | |
case E0: | |
return new Int8Array(v1) | |
case g0: | |
return new Uint8Array(v1) | |
case k0: | |
return new Uint8ClampedArray(v1) | |
case n0: | |
return new Int16Array(v1) | |
case T2: | |
return new Uint16Array(v1) | |
case s0: | |
return new Int32Array(v1) | |
case N9: | |
return new Uint32Array(v1) | |
case h0: | |
return new Float32Array(v1) | |
case w2: | |
return new Float64Array(v1) | |
default: | |
throw new Error('Unkown type: ' + I1) | |
} | |
} | |
var b6 = { serialize: F5, deserialize: wW, stringToBuffer: X4, bufferToString: H5 } | |
function ZV(j, D1, I1, E1) { | |
j.executeSql( | |
'CREATE TABLE IF NOT EXISTS ' + | |
D1.storeName + | |
' (id INTEGER PRIMARY KEY, key unique, value)', | |
[], | |
I1, | |
E1, | |
) | |
} | |
function dV(j) { | |
var D1 = this, | |
I1 = { db: null } | |
if (j) for (var E1 in j) I1[E1] = typeof j[E1] !== 'string' ? j[E1].toString() : j[E1] | |
var y1 = new H(function (v1, d0) { | |
try { | |
I1.db = openDatabase(I1.name, String(I1.version), I1.description, I1.size) | |
} catch (Q0) { | |
return d0(Q0) | |
} | |
I1.db.transaction(function (Q0) { | |
ZV( | |
Q0, | |
I1, | |
function () { | |
;(D1._dbInfo = I1), v1() | |
}, | |
function (N0, u0) { | |
d0(u0) | |
}, | |
) | |
}, d0) | |
}) | |
return (I1.serializer = b6), y1 | |
} | |
function H3(j, D1, I1, E1, y1, v1) { | |
j.executeSql( | |
I1, | |
E1, | |
y1, | |
function (d0, Q0) { | |
if (Q0.code === Q0.SYNTAX_ERR) | |
d0.executeSql( | |
"SELECT name FROM sqlite_master WHERE type='table' AND name = ?", | |
[D1.storeName], | |
function (N0, u0) { | |
if (!u0.rows.length) | |
ZV( | |
N0, | |
D1, | |
function () { | |
N0.executeSql(I1, E1, y1, v1) | |
}, | |
v1, | |
) | |
else v1(N0, Q0) | |
}, | |
v1, | |
) | |
else v1(d0, Q0) | |
}, | |
v1, | |
) | |
} | |
function qG(j, D1) { | |
var I1 = this | |
j = g(j) | |
var E1 = new H(function (y1, v1) { | |
I1.ready() | |
.then(function () { | |
var d0 = I1._dbInfo | |
d0.db.transaction(function (Q0) { | |
H3( | |
Q0, | |
d0, | |
'SELECT * FROM ' + d0.storeName + ' WHERE key = ? LIMIT 1', | |
[j], | |
function (N0, u0) { | |
var x0 = u0.rows.length ? u0.rows.item(0).value : null | |
if (x0) x0 = d0.serializer.deserialize(x0) | |
y1(x0) | |
}, | |
function (N0, u0) { | |
v1(u0) | |
}, | |
) | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function BW(j, D1) { | |
var I1 = this, | |
E1 = new H(function (y1, v1) { | |
I1.ready() | |
.then(function () { | |
var d0 = I1._dbInfo | |
d0.db.transaction(function (Q0) { | |
H3( | |
Q0, | |
d0, | |
'SELECT * FROM ' + d0.storeName, | |
[], | |
function (N0, u0) { | |
var x0 = u0.rows, | |
J2 = x0.length | |
for (var K4 = 0; K4 < J2; K4++) { | |
var a4 = x0.item(K4), | |
r4 = a4.value | |
if (r4) r4 = d0.serializer.deserialize(r4) | |
if (((r4 = j(r4, a4.key, K4 + 1)), r4 !== void 0)) { | |
y1(r4) | |
return | |
} | |
} | |
y1() | |
}, | |
function (N0, u0) { | |
v1(u0) | |
}, | |
) | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function F3(j, D1, I1, E1) { | |
var y1 = this | |
j = g(j) | |
var v1 = new H(function (d0, Q0) { | |
y1.ready() | |
.then(function () { | |
if (D1 === void 0) D1 = null | |
var N0 = D1, | |
u0 = y1._dbInfo | |
u0.serializer.serialize(D1, function (x0, J2) { | |
if (J2) Q0(J2) | |
else | |
u0.db.transaction( | |
function (K4) { | |
H3( | |
K4, | |
u0, | |
'INSERT OR REPLACE INTO ' + | |
u0.storeName + | |
' (key, value) VALUES (?, ?)', | |
[j, x0], | |
function () { | |
d0(N0) | |
}, | |
function (a4, r4) { | |
Q0(r4) | |
}, | |
) | |
}, | |
function (K4) { | |
if (K4.code === K4.QUOTA_ERR) { | |
if (E1 > 0) { | |
d0(F3.apply(y1, [j, N0, I1, E1 - 1])) | |
return | |
} | |
Q0(K4) | |
} | |
}, | |
) | |
}) | |
}) | |
.catch(Q0) | |
}) | |
return J(v1, I1), v1 | |
} | |
function UG(j, D1, I1) { | |
return F3.apply(this, [j, D1, I1, 1]) | |
} | |
function fG(j, D1) { | |
var I1 = this | |
j = g(j) | |
var E1 = new H(function (y1, v1) { | |
I1.ready() | |
.then(function () { | |
var d0 = I1._dbInfo | |
d0.db.transaction(function (Q0) { | |
H3( | |
Q0, | |
d0, | |
'DELETE FROM ' + d0.storeName + ' WHERE key = ?', | |
[j], | |
function () { | |
y1() | |
}, | |
function (N0, u0) { | |
v1(u0) | |
}, | |
) | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function MZ(j) { | |
var D1 = this, | |
I1 = new H(function (E1, y1) { | |
D1.ready() | |
.then(function () { | |
var v1 = D1._dbInfo | |
v1.db.transaction(function (d0) { | |
H3( | |
d0, | |
v1, | |
'DELETE FROM ' + v1.storeName, | |
[], | |
function () { | |
E1() | |
}, | |
function (Q0, N0) { | |
y1(N0) | |
}, | |
) | |
}) | |
}) | |
.catch(y1) | |
}) | |
return J(I1, j), I1 | |
} | |
function SZ(j) { | |
var D1 = this, | |
I1 = new H(function (E1, y1) { | |
D1.ready() | |
.then(function () { | |
var v1 = D1._dbInfo | |
v1.db.transaction(function (d0) { | |
H3( | |
d0, | |
v1, | |
'SELECT COUNT(key) as c FROM ' + v1.storeName, | |
[], | |
function (Q0, N0) { | |
var u0 = N0.rows.item(0).c | |
E1(u0) | |
}, | |
function (Q0, N0) { | |
y1(N0) | |
}, | |
) | |
}) | |
}) | |
.catch(y1) | |
}) | |
return J(I1, j), I1 | |
} | |
function H7(j, D1) { | |
var I1 = this, | |
E1 = new H(function (y1, v1) { | |
I1.ready() | |
.then(function () { | |
var d0 = I1._dbInfo | |
d0.db.transaction(function (Q0) { | |
H3( | |
Q0, | |
d0, | |
'SELECT key FROM ' + d0.storeName + ' WHERE id = ? LIMIT 1', | |
[j + 1], | |
function (N0, u0) { | |
var x0 = u0.rows.length ? u0.rows.item(0).key : null | |
y1(x0) | |
}, | |
function (N0, u0) { | |
v1(u0) | |
}, | |
) | |
}) | |
}) | |
.catch(v1) | |
}) | |
return J(E1, D1), E1 | |
} | |
function LI(j) { | |
var D1 = this, | |
I1 = new H(function (E1, y1) { | |
D1.ready() | |
.then(function () { | |
var v1 = D1._dbInfo | |
v1.db.transaction(function (d0) { | |
H3( | |
d0, | |
v1, | |
'SELECT key FROM ' + v1.storeName, | |
[], | |
function (Q0, N0) { | |
var u0 = [] | |
for (var x0 = 0; x0 < N0.rows.length; x0++) | |
u0.push(N0.rows.item(x0).key) | |
E1(u0) | |
}, | |
function (Q0, N0) { | |
y1(N0) | |
}, | |
) | |
}) | |
}) | |
.catch(y1) | |
}) | |
return J(I1, j), I1 | |
} | |
function e7(j) { | |
return new H(function (D1, I1) { | |
j.transaction( | |
function (E1) { | |
E1.executeSql( | |
"SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", | |
[], | |
function (y1, v1) { | |
var d0 = [] | |
for (var Q0 = 0; Q0 < v1.rows.length; Q0++) d0.push(v1.rows.item(Q0).name) | |
D1({ db: j, storeNames: d0 }) | |
}, | |
function (y1, v1) { | |
I1(v1) | |
}, | |
) | |
}, | |
function (E1) { | |
I1(E1) | |
}, | |
) | |
}) | |
} | |
function RG(j, D1) { | |
D1 = z.apply(this, arguments) | |
var I1 = this.config() | |
if (((j = (typeof j !== 'function' && j) || {}), !j.name)) | |
(j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName) | |
var E1 = this, | |
y1 | |
if (!j.name) y1 = H.reject('Invalid arguments') | |
else | |
y1 = new H(function (v1) { | |
var d0 | |
if (j.name === I1.name) d0 = E1._dbInfo.db | |
else d0 = openDatabase(j.name, '', '', 0) | |
if (!j.storeName) v1(e7(d0)) | |
else v1({ db: d0, storeNames: [j.storeName] }) | |
}).then(function (v1) { | |
return new H(function (d0, Q0) { | |
v1.db.transaction( | |
function (N0) { | |
function u0(a4) { | |
return new H(function (r4, w9) { | |
N0.executeSql( | |
'DROP TABLE IF EXISTS ' + a4, | |
[], | |
function () { | |
r4() | |
}, | |
function (l9, Z8) { | |
w9(Z8) | |
}, | |
) | |
}) | |
} | |
var x0 = [] | |
for (var J2 = 0, K4 = v1.storeNames.length; J2 < K4; J2++) | |
x0.push(u0(v1.storeNames[J2])) | |
H.all(x0) | |
.then(function () { | |
d0() | |
}) | |
.catch(function (a4) { | |
Q0(a4) | |
}) | |
}, | |
function (N0) { | |
Q0(N0) | |
}, | |
) | |
}) | |
}) | |
return J(y1, D1), y1 | |
} | |
var F7 = { | |
_driver: 'webSQLStorage', | |
_initStorage: dV, | |
_support: m1(), | |
iterate: BW, | |
getItem: qG, | |
setItem: UG, | |
removeItem: fG, | |
clear: MZ, | |
length: SZ, | |
key: H7, | |
keys: LI, | |
dropInstance: RG, | |
} | |
function WV() { | |
try { | |
return ( | |
typeof localStorage !== 'undefined' && | |
'setItem' in localStorage && | |
!!localStorage.setItem | |
) | |
} catch (j) { | |
return !1 | |
} | |
} | |
function EG(j, D1) { | |
var I1 = j.name + '/' | |
if (j.storeName !== D1.storeName) I1 += j.storeName + '/' | |
return I1 | |
} | |
function wV() { | |
var j = '_localforage_support_test' | |
try { | |
return localStorage.setItem(j, !0), localStorage.removeItem(j), !1 | |
} catch (D1) { | |
return !0 | |
} | |
} | |
function jw() { | |
return !wV() || localStorage.length > 0 | |
} | |
function kw(j) { | |
var D1 = this, | |
I1 = {} | |
if (j) for (var E1 in j) I1[E1] = j[E1] | |
if (((I1.keyPrefix = EG(j, D1._defaultConfig)), !jw())) return H.reject() | |
return (D1._dbInfo = I1), (I1.serializer = b6), H.resolve() | |
} | |
function $8(j) { | |
var D1 = this, | |
I1 = D1.ready().then(function () { | |
var E1 = D1._dbInfo.keyPrefix | |
for (var y1 = localStorage.length - 1; y1 >= 0; y1--) { | |
var v1 = localStorage.key(y1) | |
if (v1.indexOf(E1) === 0) localStorage.removeItem(v1) | |
} | |
}) | |
return J(I1, j), I1 | |
} | |
function LZ(j, D1) { | |
var I1 = this | |
j = g(j) | |
var E1 = I1.ready().then(function () { | |
var y1 = I1._dbInfo, | |
v1 = localStorage.getItem(y1.keyPrefix + j) | |
if (v1) v1 = y1.serializer.deserialize(v1) | |
return v1 | |
}) | |
return J(E1, D1), E1 | |
} | |
function BV(j, D1) { | |
var I1 = this, | |
E1 = I1.ready().then(function () { | |
var y1 = I1._dbInfo, | |
v1 = y1.keyPrefix, | |
d0 = v1.length, | |
Q0 = localStorage.length, | |
N0 = 1 | |
for (var u0 = 0; u0 < Q0; u0++) { | |
var x0 = localStorage.key(u0) | |
if (x0.indexOf(v1) !== 0) continue | |
var J2 = localStorage.getItem(x0) | |
if (J2) J2 = y1.serializer.deserialize(J2) | |
if (((J2 = j(J2, x0.substring(d0), N0++)), J2 !== void 0)) return J2 | |
} | |
}) | |
return J(E1, D1), E1 | |
} | |
function hw(j, D1) { | |
var I1 = this, | |
E1 = I1.ready().then(function () { | |
var y1 = I1._dbInfo, | |
v1 | |
try { | |
v1 = localStorage.key(j) | |
} catch (d0) { | |
v1 = null | |
} | |
if (v1) v1 = v1.substring(y1.keyPrefix.length) | |
return v1 | |
}) | |
return J(E1, D1), E1 | |
} | |
function vG(j) { | |
var D1 = this, | |
I1 = D1.ready().then(function () { | |
var E1 = D1._dbInfo, | |
y1 = localStorage.length, | |
v1 = [] | |
for (var d0 = 0; d0 < y1; d0++) { | |
var Q0 = localStorage.key(d0) | |
if (Q0.indexOf(E1.keyPrefix) === 0) v1.push(Q0.substring(E1.keyPrefix.length)) | |
} | |
return v1 | |
}) | |
return J(I1, j), I1 | |
} | |
function CV(j) { | |
var D1 = this, | |
I1 = D1.keys().then(function (E1) { | |
return E1.length | |
}) | |
return J(I1, j), I1 | |
} | |
function xw(j, D1) { | |
var I1 = this | |
j = g(j) | |
var E1 = I1.ready().then(function () { | |
var y1 = I1._dbInfo | |
localStorage.removeItem(y1.keyPrefix + j) | |
}) | |
return J(E1, D1), E1 | |
} | |
function MG(j, D1, I1) { | |
var E1 = this | |
j = g(j) | |
var y1 = E1.ready().then(function () { | |
if (D1 === void 0) D1 = null | |
var v1 = D1 | |
return new H(function (d0, Q0) { | |
var N0 = E1._dbInfo | |
N0.serializer.serialize(D1, function (u0, x0) { | |
if (x0) Q0(x0) | |
else | |
try { | |
localStorage.setItem(N0.keyPrefix + j, u0), d0(v1) | |
} catch (J2) { | |
if ( | |
J2.name === 'QuotaExceededError' || | |
J2.name === 'NS_ERROR_DOM_QUOTA_REACHED' | |
) | |
Q0(J2) | |
Q0(J2) | |
} | |
}) | |
}) | |
}) | |
return J(y1, I1), y1 | |
} | |
function J7(j, D1) { | |
if ( | |
((D1 = z.apply(this, arguments)), | |
(j = (typeof j !== 'function' && j) || {}), | |
!j.name) | |
) { | |
var I1 = this.config() | |
;(j.name = j.name || I1.name), (j.storeName = j.storeName || I1.storeName) | |
} | |
var E1 = this, | |
y1 | |
if (!j.name) y1 = H.reject('Invalid arguments') | |
else | |
y1 = new H(function (v1) { | |
if (!j.storeName) v1(j.name + '/') | |
else v1(EG(j, E1._defaultConfig)) | |
}).then(function (v1) { | |
for (var d0 = localStorage.length - 1; d0 >= 0; d0--) { | |
var Q0 = localStorage.key(d0) | |
if (Q0.indexOf(v1) === 0) localStorage.removeItem(Q0) | |
} | |
}) | |
return J(y1, D1), y1 | |
} | |
var cw = { | |
_driver: 'localStorageWrapper', | |
_initStorage: kw, | |
_support: WV(), | |
iterate: BV, | |
getItem: LZ, | |
setItem: MG, | |
removeItem: xw, | |
clear: $8, | |
length: CV, | |
key: hw, | |
keys: vG, | |
dropInstance: J7, | |
}, | |
G1 = function j(D1, I1) { | |
return ( | |
D1 === I1 || | |
(typeof D1 === 'number' && typeof I1 === 'number' && isNaN(D1) && isNaN(I1)) | |
) | |
}, | |
o = function j(D1, I1) { | |
var E1 = D1.length, | |
y1 = 0 | |
while (y1 < E1) { | |
if (G1(D1[y1], I1)) return !0 | |
y1++ | |
} | |
return !1 | |
}, | |
L1 = | |
Array.isArray || | |
function (j) { | |
return Object.prototype.toString.call(j) === '[object Array]' | |
}, | |
i1 = {}, | |
b1 = {}, | |
t1 = { INDEXEDDB: J1, WEBSQL: F7, LOCALSTORAGE: cw }, | |
R0 = [t1.INDEXEDDB._driver, t1.WEBSQL._driver, t1.LOCALSTORAGE._driver], | |
B0 = ['dropInstance'], | |
J0 = [ | |
'clear', | |
'getItem', | |
'iterate', | |
'key', | |
'keys', | |
'length', | |
'removeItem', | |
'setItem', | |
].concat(B0), | |
w0 = { | |
description: '', | |
driver: R0.slice(), | |
name: 'localforage', | |
size: 4980736, | |
storeName: 'keyvaluepairs', | |
version: 1, | |
} | |
function F0(j, D1) { | |
j[D1] = function () { | |
var I1 = arguments | |
return j.ready().then(function () { | |
return j[D1].apply(j, I1) | |
}) | |
} | |
} | |
function c2() { | |
for (var j = 1; j < arguments.length; j++) { | |
var D1 = arguments[j] | |
if (D1) { | |
for (var I1 in D1) | |
if (D1.hasOwnProperty(I1)) | |
if (L1(D1[I1])) arguments[0][I1] = D1[I1].slice() | |
else arguments[0][I1] = D1[I1] | |
} | |
} | |
return arguments[0] | |
} | |
var L2 = (function () { | |
function j(D1) { | |
C(this, j) | |
for (var I1 in t1) | |
if (t1.hasOwnProperty(I1)) { | |
var E1 = t1[I1], | |
y1 = E1._driver | |
if (((this[I1] = y1), !i1[y1])) this.defineDriver(E1) | |
} | |
;(this._defaultConfig = c2({}, w0)), | |
(this._config = c2({}, this._defaultConfig, D1)), | |
(this._driverSet = null), | |
(this._initDriver = null), | |
(this._ready = !1), | |
(this._dbInfo = null), | |
this._wrapLibraryMethodsWithReady(), | |
this.setDriver(this._config.driver).catch(function () {}) | |
} | |
return ( | |
(j.prototype.config = function D1(I1) { | |
if ((typeof I1 === 'undefined' ? 'undefined' : B(I1)) === 'object') { | |
if (this._ready) | |
return new Error("Can't call config() after localforage has been used.") | |
for (var E1 in I1) { | |
if (E1 === 'storeName') I1[E1] = I1[E1].replace(/\W/g, '_') | |
if (E1 === 'version' && typeof I1[E1] !== 'number') | |
return new Error('Database version must be a number.') | |
this._config[E1] = I1[E1] | |
} | |
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 | |
}), | |
(j.prototype.defineDriver = function D1(I1, E1, y1) { | |
var v1 = new H(function (d0, Q0) { | |
try { | |
var N0 = I1._driver, | |
u0 = new Error( | |
'Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver', | |
) | |
if (!I1._driver) { | |
Q0(u0) | |
return | |
} | |
var x0 = J0.concat('_initStorage') | |
for (var J2 = 0, K4 = x0.length; J2 < K4; J2++) { | |
var a4 = x0[J2], | |
r4 = !o(B0, a4) | |
if ((r4 || I1[a4]) && typeof I1[a4] !== 'function') { | |
Q0(u0) | |
return | |
} | |
} | |
var w9 = function Z8() { | |
var SG = function kg(LG) { | |
return function () { | |
var m4 = new Error( | |
'Method ' + LG + ' is not implemented by the current driver', | |
), | |
VV = H.reject(m4) | |
return J(VV, arguments[arguments.length - 1]), VV | |
} | |
} | |
for (var CW = 0, hX = B0.length; CW < hX; CW++) { | |
var $Z = B0[CW] | |
if (!I1[$Z]) I1[$Z] = SG($Z) | |
} | |
} | |
w9() | |
var l9 = function Z8(SG) { | |
if (i1[N0]) console.info('Redefining LocalForage driver: ' + N0) | |
;(i1[N0] = I1), (b1[N0] = SG), d0() | |
} | |
if ('_support' in I1) | |
if (I1._support && typeof I1._support === 'function') | |
I1._support().then(l9, Q0) | |
else l9(!!I1._support) | |
else l9(!0) | |
} catch (Z8) { | |
Q0(Z8) | |
} | |
}) | |
return K(v1, E1, y1), v1 | |
}), | |
(j.prototype.driver = function D1() { | |
return this._driver || null | |
}), | |
(j.prototype.getDriver = function D1(I1, E1, y1) { | |
var v1 = i1[I1] ? H.resolve(i1[I1]) : H.reject(new Error('Driver not found.')) | |
return K(v1, E1, y1), v1 | |
}), | |
(j.prototype.getSerializer = function D1(I1) { | |
var E1 = H.resolve(b6) | |
return K(E1, I1), E1 | |
}), | |
(j.prototype.ready = function D1(I1) { | |
var E1 = this, | |
y1 = E1._driverSet.then(function () { | |
if (E1._ready === null) E1._ready = E1._initDriver() | |
return E1._ready | |
}) | |
return K(y1, I1, I1), y1 | |
}), | |
(j.prototype.setDriver = function D1(I1, E1, y1) { | |
var v1 = this | |
if (!L1(I1)) I1 = [I1] | |
var d0 = this._getSupportedDrivers(I1) | |
function Q0() { | |
v1._config.driver = v1.driver() | |
} | |
function N0(J2) { | |
return ( | |
v1._extend(J2), Q0(), (v1._ready = v1._initStorage(v1._config)), v1._ready | |
) | |
} | |
function u0(J2) { | |
return function () { | |
var K4 = 0 | |
function a4() { | |
while (K4 < J2.length) { | |
var r4 = J2[K4] | |
return ( | |
K4++, | |
(v1._dbInfo = null), | |
(v1._ready = null), | |
v1.getDriver(r4).then(N0).catch(a4) | |
) | |
} | |
Q0() | |
var w9 = new Error('No available storage method found.') | |
return (v1._driverSet = H.reject(w9)), v1._driverSet | |
} | |
return a4() | |
} | |
} | |
var x0 = | |
this._driverSet !== null | |
? this._driverSet.catch(function () { | |
return H.resolve() | |
}) | |
: H.resolve() | |
return ( | |
(this._driverSet = x0 | |
.then(function () { | |
var J2 = d0[0] | |
return ( | |
(v1._dbInfo = null), | |
(v1._ready = null), | |
v1.getDriver(J2).then(function (K4) { | |
;(v1._driver = K4._driver), | |
Q0(), | |
v1._wrapLibraryMethodsWithReady(), | |
(v1._initDriver = u0(d0)) | |
}) | |
) | |
}) | |
.catch(function () { | |
Q0() | |
var J2 = new Error('No available storage method found.') | |
return (v1._driverSet = H.reject(J2)), v1._driverSet | |
})), | |
K(this._driverSet, E1, y1), | |
this._driverSet | |
) | |
}), | |
(j.prototype.supports = function D1(I1) { | |
return !!b1[I1] | |
}), | |
(j.prototype._extend = function D1(I1) { | |
c2(this, I1) | |
}), | |
(j.prototype._getSupportedDrivers = function D1(I1) { | |
var E1 = [] | |
for (var y1 = 0, v1 = I1.length; y1 < v1; y1++) { | |
var d0 = I1[y1] | |
if (this.supports(d0)) E1.push(d0) | |
} | |
return E1 | |
}), | |
(j.prototype._wrapLibraryMethodsWithReady = function D1() { | |
for (var I1 = 0, E1 = J0.length; I1 < E1; I1++) F0(this, J0[I1]) | |
}), | |
(j.prototype.createInstance = function D1(I1) { | |
return new j(I1) | |
}), | |
j | |
) | |
})(), | |
q2 = new L2() | |
W.exports = q2 | |
}, | |
{ 3: 3 }, | |
], | |
}, | |
{}, | |
[4], | |
)(4) | |
}) | |
}) | |
var Py1 = _((yy1) => { | |
Object.defineProperty(yy1, '__esModule', { value: !0 }) | |
var RB = X0(), | |
q94 = $y1(), | |
ZJ = kv(), | |
KY = RB.GLOBAL_OBJ | |
class hv { | |
static __initStatic() { | |
this.id = 'Offline' | |
} | |
constructor(I = {}) { | |
;(this.name = hv.id), | |
(this.maxStoredEvents = I.maxStoredEvents || 30), | |
(this.offlineEventStore = q94.createInstance({ name: 'sentry/offlineEventStore' })) | |
} | |
setupOnce(I, G) { | |
if (((this.hub = G()), 'addEventListener' in KY)) | |
KY.addEventListener('online', () => { | |
this._sendEvents().catch(() => { | |
ZJ.DEBUG_BUILD && RB.logger.warn('could not send cached events') | |
}) | |
}) | |
let Z = (d) => { | |
if (this.hub && this.hub.getIntegration(hv)) { | |
if ('navigator' in KY && 'onLine' in KY.navigator && !KY.navigator.onLine) | |
return ( | |
ZJ.DEBUG_BUILD && | |
RB.logger.log('Event dropped due to being a offline - caching instead'), | |
this._cacheEvent(d) | |
.then((W) => this._enforceMaxEvents()) | |
.catch((W) => { | |
ZJ.DEBUG_BUILD && RB.logger.warn('could not cache event while offline') | |
}), | |
null | |
) | |
} | |
return d | |
} | |
if ( | |
((Z.id = this.name), | |
I(Z), | |
'navigator' in KY && 'onLine' in KY.navigator && KY.navigator.onLine) | |
) | |
this._sendEvents().catch(() => { | |
ZJ.DEBUG_BUILD && RB.logger.warn('could not send cached events') | |
}) | |
} | |
async _cacheEvent(I) { | |
return this.offlineEventStore.setItem(RB.uuid4(), RB.normalize(I)) | |
} | |
async _enforceMaxEvents() { | |
let I = [] | |
return this.offlineEventStore | |
.iterate((G, Z, d) => { | |
I.push({ cacheKey: Z, event: G }) | |
}) | |
.then(() => | |
this._purgeEvents( | |
I.sort((G, Z) => (Z.event.timestamp || 0) - (G.event.timestamp || 0)) | |
.slice(this.maxStoredEvents < I.length ? this.maxStoredEvents : I.length) | |
.map((G) => G.cacheKey), | |
), | |
) | |
.catch((G) => { | |
ZJ.DEBUG_BUILD && RB.logger.warn('could not enforce max events') | |
}) | |
} | |
async _purgeEvent(I) { | |
return this.offlineEventStore.removeItem(I) | |
} | |
async _purgeEvents(I) { | |
return Promise.all(I.map((G) => this._purgeEvent(G))).then() | |
} | |
async _sendEvents() { | |
return this.offlineEventStore.iterate((I, G, Z) => { | |
if (this.hub) | |
this.hub.captureEvent(I), | |
this._purgeEvent(G).catch((d) => { | |
ZJ.DEBUG_BUILD && RB.logger.warn('could not purge event from cache') | |
}) | |
else ZJ.DEBUG_BUILD && RB.logger.warn('no hub found - could not send cached event') | |
}) | |
} | |
} | |
hv.__initStatic() | |
yy1.Offline = hv | |
}) | |
var ly1 = _((by1) => { | |
Object.defineProperty(by1, '__esModule', { value: !0 }) | |
var xv = Y4(), | |
uy1 = X0(), | |
f94 = uy1.GLOBAL_OBJ, | |
Ty1 = 'ReportingObserver', | |
Oy1 = new WeakMap(), | |
R94 = (I = {}) => { | |
let G = I.types || ['crash', 'deprecation', 'intervention'] | |
function Z(d) { | |
if (!Oy1.has(xv.getClient())) return | |
for (let W of d) | |
xv.withScope((w) => { | |
w.setExtra('url', W.url) | |
let B = `ReportingObserver [${W.type}]`, | |
C = 'No details available' | |
if (W.body) { | |
let V = {} | |
for (let A in W.body) V[A] = W.body[A] | |
if ((w.setExtra('body', V), W.type === 'crash')) { | |
let A = W.body | |
C = [A.crashId || '', A.reason || ''].join(' ').trim() || C | |
} else C = W.body.message || C | |
} | |
xv.captureMessage(`${B}: ${C}`) | |
}) | |
} | |
return { | |
name: Ty1, | |
setupOnce() { | |
if (!uy1.supportsReportingObserver()) return | |
new f94.ReportingObserver(Z, { buffered: !0, types: G }).observe() | |
}, | |
setup(d) { | |
Oy1.set(d, !0) | |
}, | |
} | |
}, | |
my1 = xv.defineIntegration(R94), | |
E94 = xv.convertIntegrationFnToClass(Ty1, my1) | |
by1.ReportingObserver = E94 | |
by1.reportingObserverIntegration = my1 | |
}) | |
var py1 = _((cy1) => { | |
Object.defineProperty(cy1, '__esModule', { value: !0 }) | |
var ky1 = Y4(), | |
jy1 = X0(), | |
hy1 = 'RewriteFrames', | |
S94 = (I = {}) => { | |
let G = I.root, | |
Z = I.prefix || 'app:///', | |
d = | |
I.iteratee || | |
((B) => { | |
if (!B.filename) return B | |
let C = | |
/^[a-zA-Z]:\\/.test(B.filename) || | |
(B.filename.includes('\\') && !B.filename.includes('/')), | |
V = /^\//.test(B.filename) | |
if (C || V) { | |
let A = C ? B.filename.replace(/^[a-zA-Z]:/, '').replace(/\\/g, '/') : B.filename, | |
X = G ? jy1.relative(G, A) : jy1.basename(A) | |
B.filename = `${Z}${X}` | |
} | |
return B | |
}) | |
function W(B) { | |
try { | |
return { | |
...B, | |
exception: { | |
...B.exception, | |
values: B.exception.values.map((C) => ({ | |
...C, | |
...(C.stacktrace && { stacktrace: w(C.stacktrace) }), | |
})), | |
}, | |
} | |
} catch (C) { | |
return B | |
} | |
} | |
function w(B) { | |
return { ...B, frames: B && B.frames && B.frames.map((C) => d(C)) } | |
} | |
return { | |
name: hy1, | |
setupOnce() {}, | |
processEvent(B) { | |
let C = B | |
if (B.exception && Array.isArray(B.exception.values)) C = W(C) | |
return C | |
}, | |
} | |
}, | |
xy1 = ky1.defineIntegration(S94), | |
L94 = ky1.convertIntegrationFnToClass(hy1, xy1) | |
cy1.RewriteFrames = L94 | |
cy1.rewriteFramesIntegration = xy1 | |
}) | |
var sy1 = _((ry1) => { | |
Object.defineProperty(ry1, '__esModule', { value: !0 }) | |
var iy1 = Y4(), | |
ny1 = 'SessionTiming', | |
P94 = () => { | |
let I = Date.now() | |
return { | |
name: ny1, | |
setupOnce() {}, | |
processEvent(G) { | |
let Z = Date.now() | |
return { | |
...G, | |
extra: { | |
...G.extra, | |
['session:start']: I, | |
['session:duration']: Z - I, | |
['session:end']: Z, | |
}, | |
} | |
}, | |
} | |
}, | |
ay1 = iy1.defineIntegration(P94), | |
O94 = iy1.convertIntegrationFnToClass(ny1, ay1) | |
ry1.SessionTiming = O94 | |
ry1.sessionTimingIntegration = ay1 | |
}) | |
var ty1 = _((ey1) => { | |
Object.defineProperty(ey1, '__esModule', { value: !0 }) | |
var m94 = Y4(), | |
oy1 = 'Transaction', | |
b94 = () => { | |
return { | |
name: oy1, | |
setupOnce() {}, | |
processEvent(I) { | |
let G = j94(I) | |
for (let Z = G.length - 1; Z >= 0; Z--) { | |
let d = G[Z] | |
if (d.in_app === !0) { | |
I.transaction = k94(d) | |
break | |
} | |
} | |
return I | |
}, | |
} | |
}, | |
l94 = m94.convertIntegrationFnToClass(oy1, b94) | |
function j94(I) { | |
let G = I.exception && I.exception.values && I.exception.values[0] | |
return (G && G.stacktrace && G.stacktrace.frames) || [] | |
} | |
function k94(I) { | |
return I.module || I.function ? `${I.module || '?'}/${I.function || '?'}` : '<unknown>' | |
} | |
ey1.Transaction = l94 | |
}) | |
var CP1 = _((BP1) => { | |
Object.defineProperty(BP1, '__esModule', { value: !0 }) | |
var pV = Y4(), | |
EB = X0(), | |
Ob = kv(), | |
IP1 = 'HttpClient', | |
x94 = (I = {}) => { | |
let G = { failedRequestStatusCodes: [[500, 599]], failedRequestTargets: [/.*/], ...I } | |
return { | |
name: IP1, | |
setupOnce() {}, | |
setup(Z) { | |
e94(Z, G), t94(Z, G) | |
}, | |
} | |
}, | |
GP1 = pV.defineIntegration(x94), | |
c94 = pV.convertIntegrationFnToClass(IP1, GP1) | |
function p94(I, G, Z, d) { | |
if (dP1(I, Z.status, Z.url)) { | |
let W = I34(G, d), | |
w, | |
B, | |
C, | |
V | |
if (wP1()) | |
[{ headers: w, cookies: C }, { headers: B, cookies: V }] = [ | |
{ cookieHeader: 'Cookie', obj: W }, | |
{ cookieHeader: 'Set-Cookie', obj: Z }, | |
].map(({ cookieHeader: X, obj: Y }) => { | |
let H = a94(Y.headers), | |
J | |
try { | |
let K = H[X] || H[X.toLowerCase()] || void 0 | |
if (K) J = ZP1(K) | |
} catch (K) { | |
Ob.DEBUG_BUILD && EB.logger.log(`Could not extract cookies from header ${X}`) | |
} | |
return { headers: H, cookies: J } | |
}) | |
let A = WP1({ | |
url: W.url, | |
method: W.method, | |
status: Z.status, | |
requestHeaders: w, | |
responseHeaders: B, | |
requestCookies: C, | |
responseCookies: V, | |
}) | |
pV.captureEvent(A) | |
} | |
} | |
function i94(I, G, Z, d) { | |
if (dP1(I, G.status, G.responseURL)) { | |
let W, w, B | |
if (wP1()) { | |
try { | |
let V = G.getResponseHeader('Set-Cookie') || G.getResponseHeader('set-cookie') || void 0 | |
if (V) w = ZP1(V) | |
} catch (V) { | |
Ob.DEBUG_BUILD && EB.logger.log('Could not extract cookies from response headers') | |
} | |
try { | |
B = r94(G) | |
} catch (V) { | |
Ob.DEBUG_BUILD && EB.logger.log('Could not extract headers from response') | |
} | |
W = d | |
} | |
let C = WP1({ | |
url: G.responseURL, | |
method: Z, | |
status: G.status, | |
requestHeaders: W, | |
responseHeaders: B, | |
responseCookies: w, | |
}) | |
pV.captureEvent(C) | |
} | |
} | |
function n94(I) { | |
if (I) { | |
let G = I['Content-Length'] || I['content-length'] | |
if (G) return parseInt(G, 10) | |
} | |
return | |
} | |
function ZP1(I) { | |
return I.split('; ').reduce((G, Z) => { | |
let [d, W] = Z.split('=') | |
return (G[d] = W), G | |
}, {}) | |
} | |
function a94(I) { | |
let G = {} | |
return ( | |
I.forEach((Z, d) => { | |
G[d] = Z | |
}), | |
G | |
) | |
} | |
function r94(I) { | |
let G = I.getAllResponseHeaders() | |
if (!G) return {} | |
return G.split( | |
`\r | |
`, | |
).reduce((Z, d) => { | |
let [W, w] = d.split(': ') | |
return (Z[W] = w), Z | |
}, {}) | |
} | |
function s94(I, G) { | |
return I.some((Z) => { | |
if (typeof Z === 'string') return G.includes(Z) | |
return Z.test(G) | |
}) | |
} | |
function o94(I, G) { | |
return I.some((Z) => { | |
if (typeof Z === 'number') return Z === G | |
return G >= Z[0] && G <= Z[1] | |
}) | |
} | |
function e94(I, G) { | |
if (!EB.supportsNativeFetch()) return | |
EB.addFetchInstrumentationHandler((Z) => { | |
if (pV.getClient() !== I) return | |
let { response: d, args: W } = Z, | |
[w, B] = W | |
if (!d) return | |
p94(G, w, d, B) | |
}) | |
} | |
function t94(I, G) { | |
if (!('XMLHttpRequest' in EB.GLOBAL_OBJ)) return | |
EB.addXhrInstrumentationHandler((Z) => { | |
if (pV.getClient() !== I) return | |
let d = Z.xhr, | |
W = d[EB.SENTRY_XHR_DATA_KEY] | |
if (!W) return | |
let { method: w, request_headers: B } = W | |
try { | |
i94(G, d, w, B) | |
} catch (C) { | |
Ob.DEBUG_BUILD && | |
EB.logger.warn('Error while extracting response event form XHR response', C) | |
} | |
}) | |
} | |
function dP1(I, G, Z) { | |
return ( | |
o94(I.failedRequestStatusCodes, G) && | |
s94(I.failedRequestTargets, Z) && | |
!pV.isSentryRequestUrl(Z, pV.getClient()) | |
) | |
} | |
function WP1(I) { | |
let G = `HTTP Client Error with status code: ${I.status}`, | |
Z = { | |
message: G, | |
exception: { values: [{ type: 'Error', value: G }] }, | |
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: n94(I.responseHeaders), | |
}, | |
}, | |
} | |
return EB.addExceptionMechanism(Z, { type: 'http.client', handled: !1 }), Z | |
} | |
function I34(I, G) { | |
if (!G && I instanceof Request) return I | |
if (I instanceof Request && I.bodyUsed) return I | |
return new Request(I, G) | |
} | |
function wP1() { | |
let I = pV.getClient() | |
return I ? Boolean(I.getOptions().sendDefaultPii) : !1 | |
} | |
BP1.HttpClient = c94 | |
BP1.httpClientIntegration = GP1 | |
}) | |
var DP1 = _((_P1) => { | |
Object.defineProperty(_P1, '__esModule', { value: !0 }) | |
var VP1 = Y4(), | |
y21 = X0(), | |
$21 = y21.GLOBAL_OBJ, | |
d34 = 7, | |
AP1 = 'ContextLines', | |
W34 = (I = {}) => { | |
let G = I.frameContextLines != null ? I.frameContextLines : d34 | |
return { | |
name: AP1, | |
setupOnce() {}, | |
processEvent(Z) { | |
return B34(Z, G) | |
}, | |
} | |
}, | |
XP1 = VP1.defineIntegration(W34), | |
w34 = VP1.convertIntegrationFnToClass(AP1, XP1) | |
function B34(I, G) { | |
let Z = $21.document, | |
d = $21.location && y21.stripUrlQueryAndFragment($21.location.href) | |
if (!Z || !d) return I | |
let W = I.exception && I.exception.values | |
if (!W || !W.length) return I | |
let w = Z.documentElement.innerHTML | |
if (!w) return I | |
let B = [ | |
'<!DOCTYPE html>', | |
'<html>', | |
...w.split(` | |
`), | |
'</html>', | |
] | |
return ( | |
W.forEach((C) => { | |
let V = C.stacktrace | |
if (V && V.frames) V.frames = V.frames.map((A) => YP1(A, B, d, G)) | |
}), | |
I | |
) | |
} | |
function YP1(I, G, Z, d) { | |
if (I.filename !== Z || !I.lineno || !G.length) return I | |
return y21.addContextToFrame(G, I, d), I | |
} | |
_P1.ContextLines = w34 | |
_P1.applySourceContextToFrame = YP1 | |
_P1.contextLinesIntegration = XP1 | |
}) | |
var fP1 = _((UP1) => { | |
Object.defineProperty(UP1, '__esModule', { value: !0 }) | |
var HP1 = Vy1(), | |
FP1 = Dy1(), | |
JP1 = fy1(), | |
KP1 = Sy1(), | |
X34 = Py1(), | |
gP1 = ly1(), | |
NP1 = py1(), | |
zP1 = sy1(), | |
Y34 = ty1(), | |
QP1 = CP1(), | |
qP1 = DP1() | |
UP1.CaptureConsole = HP1.CaptureConsole | |
UP1.captureConsoleIntegration = HP1.captureConsoleIntegration | |
UP1.Debug = FP1.Debug | |
UP1.debugIntegration = FP1.debugIntegration | |
UP1.Dedupe = JP1.Dedupe | |
UP1.dedupeIntegration = JP1.dedupeIntegration | |
UP1.ExtraErrorData = KP1.ExtraErrorData | |
UP1.extraErrorDataIntegration = KP1.extraErrorDataIntegration | |
UP1.Offline = X34.Offline | |
UP1.ReportingObserver = gP1.ReportingObserver | |
UP1.reportingObserverIntegration = gP1.reportingObserverIntegration | |
UP1.RewriteFrames = NP1.RewriteFrames | |
UP1.rewriteFramesIntegration = NP1.rewriteFramesIntegration | |
UP1.SessionTiming = zP1.SessionTiming | |
UP1.sessionTimingIntegration = zP1.sessionTimingIntegration | |
UP1.Transaction = Y34.Transaction | |
UP1.HttpClient = QP1.HttpClient | |
UP1.httpClientIntegration = QP1.httpClientIntegration | |
UP1.ContextLines = qP1.ContextLines | |
UP1.contextLinesIntegration = qP1.contextLinesIntegration | |
}) | |
var ub = _((RP1) => { | |
Object.defineProperty(RP1, '__esModule', { value: !0 }) | |
var y34 = [ | |
['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 P34(I) { | |
return y34.reduce((G, [Z, d]) => G.replace(new RegExp(Z, 'gi'), d), I) | |
} | |
RP1.replaceCronNames = P34 | |
}) | |
var LP1 = _((SP1) => { | |
Object.defineProperty(SP1, '__esModule', { value: !0 }) | |
var EP1 = Y4(), | |
vP1 = ub(), | |
MP1 = 'Automatic instrumentation of CronJob only supports crontab string' | |
function u34(I, G) { | |
let Z = !1 | |
return new Proxy(I, { | |
construct(d, W) { | |
let [w, B, C, V, A, ...X] = W | |
if (typeof w !== 'string') throw new Error(MP1) | |
if (Z) throw new Error(`A job named '${G}' has already been scheduled`) | |
Z = !0 | |
let Y = vP1.replaceCronNames(w) | |
function H(J, K) { | |
return EP1.withMonitor( | |
G, | |
() => { | |
return B(J, K) | |
}, | |
{ schedule: { type: 'crontab', value: Y }, timezone: A || void 0 }, | |
) | |
} | |
return new d(w, H, C, V, A, ...X) | |
}, | |
get(d, W) { | |
if (W === 'from') | |
return (w) => { | |
let { cronTime: B, onTick: C, timeZone: V } = w | |
if (typeof B !== 'string') throw new Error(MP1) | |
if (Z) throw new Error(`A job named '${G}' has already been scheduled`) | |
Z = !0 | |
let A = vP1.replaceCronNames(B) | |
return ( | |
(w.onTick = (X, Y) => { | |
return EP1.withMonitor( | |
G, | |
() => { | |
return C(X, Y) | |
}, | |
{ schedule: { type: 'crontab', value: A }, timezone: V || void 0 }, | |
) | |
}), | |
d.from(w) | |
) | |
} | |
else return d[W] | |
}, | |
}) | |
} | |
SP1.instrumentCron = u34 | |
}) | |
var PP1 = _((yP1) => { | |
var { _optionalChain: $P1 } = X0() | |
Object.defineProperty(yP1, '__esModule', { value: !0 }) | |
var m34 = Y4(), | |
b34 = ub() | |
function l34(I) { | |
return new Proxy(I, { | |
get(G, Z) { | |
if (Z === 'schedule' && G.schedule) | |
return new Proxy(G.schedule, { | |
apply(d, W, w) { | |
let [B, , C] = w | |
if (!$P1([C, 'optionalAccess', (V) => V.name])) | |
throw new Error( | |
'Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.', | |
) | |
return m34.withMonitor( | |
C.name, | |
() => { | |
return d.apply(W, w) | |
}, | |
{ | |
schedule: { type: 'crontab', value: b34.replaceCronNames(B) }, | |
timezone: $P1([C, 'optionalAccess', (V) => V.timezone]), | |
}, | |
) | |
}, | |
}) | |
else return G[Z] | |
}, | |
}) | |
} | |
yP1.instrumentNodeCron = l34 | |
}) | |
var uP1 = _((OP1) => { | |
Object.defineProperty(OP1, '__esModule', { value: !0 }) | |
var k34 = Y4(), | |
h34 = ub() | |
function x34(I) { | |
return new Proxy(I, { | |
get(G, Z) { | |
if (Z === 'scheduleJob') | |
return new Proxy(G.scheduleJob, { | |
apply(d, W, w) { | |
let [B, C] = w | |
if (typeof B !== 'string' || typeof C !== '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 V = B, | |
A = C | |
return k34.withMonitor( | |
V, | |
() => { | |
return d.apply(W, w) | |
}, | |
{ schedule: { type: 'crontab', value: h34.replaceCronNames(A) } }, | |
) | |
}, | |
}) | |
return G[Z] | |
}, | |
}) | |
} | |
OP1.instrumentNodeSchedule = x34 | |
}) | |
var kP1 = _((jP1) => { | |
Object.defineProperty(jP1, '__esModule', { value: !0 }) | |
var z2 = Y4(), | |
p34 = kS1(), | |
i34 = V21(), | |
n34 = Y21(), | |
cv = f21(), | |
P21 = X0(), | |
a34 = L$1(), | |
TP1 = U21(), | |
r34 = b$1(), | |
s34 = n$1(), | |
o34 = Zy1(), | |
e34 = Wy1(), | |
gY = fP1(), | |
t34 = _b(), | |
I64 = Ub(), | |
G64 = Rb(), | |
Z64 = zb(), | |
d64 = Fb(), | |
W64 = Db(), | |
w64 = Nb(), | |
B64 = Eb(), | |
C64 = $b(), | |
mP1 = S21(), | |
bP1 = Mb(), | |
lP1 = Jb(), | |
V64 = M21(), | |
A64 = LP1(), | |
X64 = PP1(), | |
Y64 = uP1(), | |
_64 = TP1.createGetModuleFromFilename(), | |
D64 = { ...z2.Integrations, ...o34, ...e34 }, | |
H64 = { | |
instrumentCron: A64.instrumentCron, | |
instrumentNodeCron: X64.instrumentNodeCron, | |
instrumentNodeSchedule: Y64.instrumentNodeSchedule, | |
} | |
jP1.Hub = z2.Hub | |
jP1.SDK_VERSION = z2.SDK_VERSION | |
jP1.SEMANTIC_ATTRIBUTE_SENTRY_OP = z2.SEMANTIC_ATTRIBUTE_SENTRY_OP | |
jP1.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = z2.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN | |
jP1.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = z2.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE | |
jP1.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = z2.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE | |
jP1.Scope = z2.Scope | |
jP1.addBreadcrumb = z2.addBreadcrumb | |
jP1.addEventProcessor = z2.addEventProcessor | |
jP1.addGlobalEventProcessor = z2.addGlobalEventProcessor | |
jP1.addIntegration = z2.addIntegration | |
jP1.captureCheckIn = z2.captureCheckIn | |
jP1.captureEvent = z2.captureEvent | |
jP1.captureException = z2.captureException | |
jP1.captureMessage = z2.captureMessage | |
jP1.captureSession = z2.captureSession | |
jP1.close = z2.close | |
jP1.configureScope = z2.configureScope | |
jP1.continueTrace = z2.continueTrace | |
jP1.createTransport = z2.createTransport | |
jP1.endSession = z2.endSession | |
jP1.extractTraceparentData = z2.extractTraceparentData | |
jP1.flush = z2.flush | |
jP1.functionToStringIntegration = z2.functionToStringIntegration | |
jP1.getActiveSpan = z2.getActiveSpan | |
jP1.getActiveTransaction = z2.getActiveTransaction | |
jP1.getClient = z2.getClient | |
jP1.getCurrentHub = z2.getCurrentHub | |
jP1.getCurrentScope = z2.getCurrentScope | |
jP1.getGlobalScope = z2.getGlobalScope | |
jP1.getHubFromCarrier = z2.getHubFromCarrier | |
jP1.getIsolationScope = z2.getIsolationScope | |
jP1.getSpanStatusFromHttpCode = z2.getSpanStatusFromHttpCode | |
jP1.inboundFiltersIntegration = z2.inboundFiltersIntegration | |
jP1.isInitialized = z2.isInitialized | |
jP1.lastEventId = z2.lastEventId | |
jP1.linkedErrorsIntegration = z2.linkedErrorsIntegration | |
jP1.makeMain = z2.makeMain | |
jP1.metrics = z2.metrics | |
jP1.parameterize = z2.parameterize | |
jP1.requestDataIntegration = z2.requestDataIntegration | |
jP1.runWithAsyncContext = z2.runWithAsyncContext | |
jP1.setContext = z2.setContext | |
jP1.setCurrentClient = z2.setCurrentClient | |
jP1.setExtra = z2.setExtra | |
jP1.setExtras = z2.setExtras | |
jP1.setHttpStatus = z2.setHttpStatus | |
jP1.setMeasurement = z2.setMeasurement | |
jP1.setTag = z2.setTag | |
jP1.setTags = z2.setTags | |
jP1.setUser = z2.setUser | |
jP1.spanStatusfromHttpCode = z2.spanStatusfromHttpCode | |
jP1.startActiveSpan = z2.startActiveSpan | |
jP1.startInactiveSpan = z2.startInactiveSpan | |
jP1.startSession = z2.startSession | |
jP1.startSpan = z2.startSpan | |
jP1.startSpanManual = z2.startSpanManual | |
jP1.startTransaction = z2.startTransaction | |
jP1.trace = z2.trace | |
jP1.withActiveSpan = z2.withActiveSpan | |
jP1.withIsolationScope = z2.withIsolationScope | |
jP1.withMonitor = z2.withMonitor | |
jP1.withScope = z2.withScope | |
jP1.autoDiscoverNodePerformanceMonitoringIntegrations = | |
p34.autoDiscoverNodePerformanceMonitoringIntegrations | |
jP1.NodeClient = i34.NodeClient | |
jP1.makeNodeTransport = n34.makeNodeTransport | |
jP1.defaultIntegrations = cv.defaultIntegrations | |
jP1.defaultStackParser = cv.defaultStackParser | |
jP1.getDefaultIntegrations = cv.getDefaultIntegrations | |
jP1.getSentryRelease = cv.getSentryRelease | |
jP1.init = cv.init | |
jP1.DEFAULT_USER_INCLUDES = P21.DEFAULT_USER_INCLUDES | |
jP1.addRequestDataToEvent = P21.addRequestDataToEvent | |
jP1.extractRequestData = P21.extractRequestData | |
jP1.deepReadDirSync = a34.deepReadDirSync | |
jP1.createGetModuleFromFilename = TP1.createGetModuleFromFilename | |
jP1.enableAnrDetection = r34.enableAnrDetection | |
jP1.Handlers = s34 | |
jP1.captureConsoleIntegration = gY.captureConsoleIntegration | |
jP1.debugIntegration = gY.debugIntegration | |
jP1.dedupeIntegration = gY.dedupeIntegration | |
jP1.extraErrorDataIntegration = gY.extraErrorDataIntegration | |
jP1.httpClientIntegration = gY.httpClientIntegration | |
jP1.reportingObserverIntegration = gY.reportingObserverIntegration | |
jP1.rewriteFramesIntegration = gY.rewriteFramesIntegration | |
jP1.sessionTimingIntegration = gY.sessionTimingIntegration | |
jP1.consoleIntegration = t34.consoleIntegration | |
jP1.onUncaughtExceptionIntegration = I64.onUncaughtExceptionIntegration | |
jP1.onUnhandledRejectionIntegration = G64.onUnhandledRejectionIntegration | |
jP1.modulesIntegration = Z64.modulesIntegration | |
jP1.contextLinesIntegration = d64.contextLinesIntegration | |
jP1.nodeContextIntegration = W64.nodeContextIntegration | |
jP1.localVariablesIntegration = w64.localVariablesIntegration | |
jP1.spotlightIntegration = B64.spotlightIntegration | |
jP1.anrIntegration = C64.anrIntegration | |
jP1.hapiErrorPlugin = mP1.hapiErrorPlugin | |
jP1.hapiIntegration = mP1.hapiIntegration | |
jP1.Undici = bP1.Undici | |
jP1.nativeNodeFetchintegration = bP1.nativeNodeFetchintegration | |
jP1.Http = lP1.Http | |
jP1.httpIntegration = lP1.httpIntegration | |
jP1.trpcMiddleware = V64.trpcMiddleware | |
jP1.Integrations = D64 | |
jP1.cron = H64 | |
jP1.getModuleFromFilename = _64 | |
}) | |
var HT1 = _((RM9, DT1) => { | |
DT1.exports = function I(G) { | |
return G.map(function (Z) { | |
if (Z && typeof Z === 'object') return Z.op.replace(/(.)/g, '\\$1') | |
if (/["\s]/.test(Z) && !/'/.test(Z)) return "'" + Z.replace(/(['\\])/g, '\\$1') + "'" | |
if (/["'\s]/.test(Z)) return '"' + Z.replace(/(["\\$`!])/g, '\\$1') + '"' | |
return String(Z).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, '$1\\$2') | |
}).join(' ') | |
} | |
}) | |
var QT1 = _((EM9, zT1) => { | |
var NT1 = | |
'(?:' + | |
[ | |
'\\|\\|', | |
'\\&\\&', | |
';;', | |
'\\|\\&', | |
'\\<\\(', | |
'\\<\\<\\<', | |
'>>', | |
'>\\&', | |
'<\\&', | |
'[&;()|<>]', | |
].join('|') + | |
')', | |
FT1 = new RegExp('^' + NT1 + '$'), | |
JT1 = '|&;()<> \\t', | |
Sw4 = '"((\\\\"|[^"])*?)"', | |
Lw4 = "'((\\\\'|[^'])*?)'", | |
$w4 = /^#$/, | |
KT1 = "'", | |
gT1 = '"', | |
c21 = '$', | |
BJ = '', | |
yw4 = 4294967296 | |
for (p21 = 0; p21 < 4; p21++) BJ += (yw4 * Math.random()).toString(16) | |
var p21, | |
Pw4 = new RegExp('^' + BJ) | |
function Ow4(I, G) { | |
var Z = G.lastIndex, | |
d = [], | |
W | |
while ((W = G.exec(I))) if ((d.push(W), G.lastIndex === W.index)) G.lastIndex += 1 | |
return (G.lastIndex = Z), d | |
} | |
function uw4(I, G, Z) { | |
var d = typeof I === 'function' ? I(Z) : I[Z] | |
if (typeof d === 'undefined' && Z != '') d = '' | |
else if (typeof d === 'undefined') d = '$' | |
if (typeof d === 'object') return G + BJ + JSON.stringify(d) + BJ | |
return G + d | |
} | |
function Tw4(I, G, Z) { | |
if (!Z) Z = {} | |
var d = Z.escape || '\\', | |
W = '(\\' + d + `['"` + JT1 + `]|[^\\s'"` + JT1 + '])+', | |
w = new RegExp(['(' + NT1 + ')', '(' + W + '|' + Sw4 + '|' + Lw4 + ')+'].join('|'), 'g'), | |
B = Ow4(I, w) | |
if (B.length === 0) return [] | |
if (!G) G = {} | |
var C = !1 | |
return B.map(function (V) { | |
var A = V[0] | |
if (!A || C) return | |
if (FT1.test(A)) return { op: A } | |
var X = !1, | |
Y = !1, | |
H = '', | |
J = !1, | |
K | |
function g() { | |
K += 1 | |
var S, | |
$, | |
L = A.charAt(K) | |
if (L === '{') { | |
if (((K += 1), A.charAt(K) === '}')) | |
throw new Error('Bad substitution: ' + A.slice(K - 2, K + 1)) | |
if (((S = A.indexOf('}', K)), S < 0)) throw new Error('Bad substitution: ' + A.slice(K)) | |
;($ = A.slice(K, S)), (K = S) | |
} else if (/[*@#?$!_-]/.test(L)) ($ = L), (K += 1) | |
else { | |
var T = A.slice(K) | |
if (((S = T.match(/[^\w\d_]/)), !S)) ($ = T), (K = A.length) | |
else ($ = T.slice(0, S.index)), (K += S.index - 1) | |
} | |
return uw4(G, '', $) | |
} | |
for (K = 0; K < A.length; K++) { | |
var z = A.charAt(K) | |
if (((J = J || (!X && (z === '*' || z === '?'))), Y)) (H += z), (Y = !1) | |
else if (X) | |
if (z === X) X = !1 | |
else if (X == KT1) H += z | |
else if (z === d) | |
if (((K += 1), (z = A.charAt(K)), z === gT1 || z === d || z === c21)) H += z | |
else H += d + z | |
else if (z === c21) H += g() | |
else H += z | |
else if (z === gT1 || z === KT1) X = z | |
else if (FT1.test(z)) return { op: A } | |
else if ($w4.test(z)) { | |
C = !0 | |
var f = { comment: I.slice(V.index + K + 1) } | |
if (H.length) return [H, f] | |
return [f] | |
} else if (z === d) Y = !0 | |
else if (z === c21) H += g() | |
else H += z | |
} | |
if (J) return { op: 'glob', pattern: H } | |
return H | |
}).reduce(function (V, A) { | |
return typeof A === 'undefined' ? V : V.concat(A) | |
}, []) | |
} | |
zT1.exports = function I(G, Z, d) { | |
var W = Tw4(G, Z, d) | |
if (typeof Z !== 'function') return W | |
return W.reduce(function (w, B) { | |
if (typeof B === 'object') return w.concat(B) | |
var C = B.split(RegExp('(' + BJ + '.*?' + BJ + ')', 'g')) | |
if (C.length === 1) return w.concat(C[0]) | |
return w.concat( | |
C.filter(Boolean).map(function (V) { | |
if (Pw4.test(V)) return JSON.parse(V.split(BJ)[1]) | |
return V | |
}), | |
) | |
}, []) | |
} | |
}) | |
var i21 = _((mw4) => { | |
mw4.quote = HT1() | |
mw4.parse = QT1() | |
}) | |
var M1 = _((AB4) => { | |
var sv = Symbol.for('react.element'), | |
aw4 = Symbol.for('react.portal'), | |
rw4 = Symbol.for('react.fragment'), | |
sw4 = Symbol.for('react.strict_mode'), | |
ow4 = Symbol.for('react.profiler'), | |
ew4 = Symbol.for('react.provider'), | |
tw4 = Symbol.for('react.context'), | |
IB4 = Symbol.for('react.forward_ref'), | |
GB4 = Symbol.for('react.suspense'), | |
ZB4 = Symbol.for('react.memo'), | |
dB4 = Symbol.for('react.lazy'), | |
MT1 = Symbol.iterator | |
function WB4(I) { | |
if (I === null || typeof I !== 'object') return null | |
return (I = (MT1 && I[MT1]) || I['@@iterator']), typeof I === 'function' ? I : null | |
} | |
var $T1 = { | |
isMounted: function () { | |
return !1 | |
}, | |
enqueueForceUpdate: function () {}, | |
enqueueReplaceState: function () {}, | |
enqueueSetState: function () {}, | |
}, | |
yT1 = Object.assign, | |
PT1 = {} | |
function Oz(I, G, Z) { | |
;(this.props = I), (this.context = G), (this.refs = PT1), (this.updater = Z || $T1) | |
} | |
Oz.prototype.isReactComponent = {} | |
Oz.prototype.setState = function (I, G) { | |
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, G, 'setState') | |
} | |
Oz.prototype.forceUpdate = function (I) { | |
this.updater.enqueueForceUpdate(this, I, 'forceUpdate') | |
} | |
function OT1() {} | |
OT1.prototype = Oz.prototype | |
function G41(I, G, Z) { | |
;(this.props = I), (this.context = G), (this.refs = PT1), (this.updater = Z || $T1) | |
} | |
var Z41 = (G41.prototype = new OT1()) | |
Z41.constructor = G41 | |
yT1(Z41, Oz.prototype) | |
Z41.isPureReactComponent = !0 | |
var ST1 = Array.isArray, | |
uT1 = Object.prototype.hasOwnProperty, | |
d41 = { current: null }, | |
TT1 = { key: !0, ref: !0, __self: !0, __source: !0 } | |
function mT1(I, G, Z) { | |
var d, | |
W = {}, | |
w = null, | |
B = null | |
if (G != null) | |
for (d in (G.ref !== void 0 && (B = G.ref), G.key !== void 0 && (w = '' + G.key), G)) | |
uT1.call(G, d) && !TT1.hasOwnProperty(d) && (W[d] = G[d]) | |
var C = arguments.length - 2 | |
if (C === 1) W.children = Z | |
else if (1 < C) { | |
for (var V = Array(C), A = 0; A < C; A++) V[A] = arguments[A + 2] | |
W.children = V | |
} | |
if (I && I.defaultProps) for (d in ((C = I.defaultProps), C)) W[d] === void 0 && (W[d] = C[d]) | |
return { $$typeof: sv, type: I, key: w, ref: B, props: W, _owner: d41.current } | |
} | |
function wB4(I, G) { | |
return { $$typeof: sv, type: I.type, key: G, ref: I.ref, props: I.props, _owner: I._owner } | |
} | |
function W41(I) { | |
return typeof I === 'object' && I !== null && I.$$typeof === sv | |
} | |
function BB4(I) { | |
var G = { '=': '=0', ':': '=2' } | |
return ( | |
'$' + | |
I.replace(/[=:]/g, function (Z) { | |
return G[Z] | |
}) | |
) | |
} | |
var LT1 = /\/+/g | |
function I41(I, G) { | |
return typeof I === 'object' && I !== null && I.key != null ? BB4('' + I.key) : G.toString(36) | |
} | |
function fl(I, G, Z, d, W) { | |
var w = typeof I | |
if (w === 'undefined' || w === 'boolean') I = null | |
var B = !1 | |
if (I === null) B = !0 | |
else | |
switch (w) { | |
case 'string': | |
case 'number': | |
B = !0 | |
break | |
case 'object': | |
switch (I.$$typeof) { | |
case sv: | |
case aw4: | |
B = !0 | |
} | |
} | |
if (B) | |
return ( | |
(B = I), | |
(W = W(B)), | |
(I = d === '' ? '.' + I41(B, 0) : d), | |
ST1(W) | |
? ((Z = ''), | |
I != null && (Z = I.replace(LT1, '$&/') + '/'), | |
fl(W, G, Z, '', function (A) { | |
return A | |
})) | |
: W != null && | |
(W41(W) && | |
(W = wB4( | |
W, | |
Z + | |
(!W.key || (B && B.key === W.key) ? '' : ('' + W.key).replace(LT1, '$&/') + '/') + | |
I, | |
)), | |
G.push(W)), | |
1 | |
) | |
if (((B = 0), (d = d === '' ? '.' : d + ':'), ST1(I))) | |
for (var C = 0; C < I.length; C++) { | |
w = I[C] | |
var V = d + I41(w, C) | |
B += fl(w, G, Z, V, W) | |
} | |
else if (((V = WB4(I)), typeof V === 'function')) | |
for (I = V.call(I), C = 0; !(w = I.next()).done; ) | |
(w = w.value), (V = d + I41(w, C++)), (B += fl(w, G, Z, V, W)) | |
else if (w === 'object') | |
throw ( | |
((G = String(I)), | |
Error( | |
'Objects are not valid as a React child (found: ' + | |
(G === '[object Object]' ? 'object with keys {' + Object.keys(I).join(', ') + '}' : G) + | |
'). If you meant to render a collection of children, use an array instead.', | |
)) | |
) | |
return B | |
} | |
function Ul(I, G, Z) { | |
if (I == null) return I | |
var d = [], | |
W = 0 | |
return ( | |
fl(I, d, '', '', function (w) { | |
return G.call(Z, w, W++) | |
}), | |
d | |
) | |
} | |
function CB4(I) { | |
if (I._status === -1) { | |
var G = I._result | |
;(G = G()), | |
G.then( | |
function (Z) { | |
if (I._status === 0 || I._status === -1) (I._status = 1), (I._result = Z) | |
}, | |
function (Z) { | |
if (I._status === 0 || I._status === -1) (I._status = 2), (I._result = Z) | |
}, | |
), | |
I._status === -1 && ((I._status = 0), (I._result = G)) | |
} | |
if (I._status === 1) return I._result.default | |
throw I._result | |
} | |
var WI = { current: null }, | |
Rl = { transition: null }, | |
VB4 = { ReactCurrentDispatcher: WI, ReactCurrentBatchConfig: Rl, ReactCurrentOwner: d41 } | |
function bT1() { | |
throw Error('act(...) is not supported in production builds of React.') | |
} | |
AB4.Children = { | |
map: Ul, | |
forEach: function (I, G, Z) { | |
Ul( | |
I, | |
function () { | |
G.apply(this, arguments) | |
}, | |
Z, | |
) | |
}, | |
count: function (I) { | |
var G = 0 | |
return ( | |
Ul(I, function () { | |
G++ | |
}), | |
G | |
) | |
}, | |
toArray: function (I) { | |
return ( | |
Ul(I, function (G) { | |
return G | |
}) || [] | |
) | |
}, | |
only: function (I) { | |
if (!W41(I)) | |
throw Error('React.Children.only expected to receive a single React element child.') | |
return I | |
}, | |
} | |
AB4.Component = Oz | |
AB4.Fragment = rw4 | |
AB4.Profiler = ow4 | |
AB4.PureComponent = G41 | |
AB4.StrictMode = sw4 | |
AB4.Suspense = GB4 | |
AB4.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = VB4 | |
AB4.act = bT1 | |
AB4.cloneElement = function (I, G, Z) { | |
if (I === null || I === void 0) | |
throw Error( | |
'React.cloneElement(...): The argument must be a React element, but you passed ' + I + '.', | |
) | |
var d = yT1({}, I.props), | |
W = I.key, | |
w = I.ref, | |
B = I._owner | |
if (G != null) { | |
if ( | |
(G.ref !== void 0 && ((w = G.ref), (B = d41.current)), | |
G.key !== void 0 && (W = '' + G.key), | |
I.type && I.type.defaultProps) | |
) | |
var C = I.type.defaultProps | |
for (V in G) | |
uT1.call(G, V) && | |
!TT1.hasOwnProperty(V) && | |
(d[V] = G[V] === void 0 && C !== void 0 ? C[V] : G[V]) | |
} | |
var V = arguments.length - 2 | |
if (V === 1) d.children = Z | |
else if (1 < V) { | |
C = Array(V) | |
for (var A = 0; A < V; A++) C[A] = arguments[A + 2] | |
d.children = C | |
} | |
return { $$typeof: sv, type: I.type, key: W, ref: w, props: d, _owner: B } | |
} | |
AB4.createContext = function (I) { | |
return ( | |
(I = { | |
$$typeof: tw4, | |
_currentValue: I, | |
_currentValue2: I, | |
_threadCount: 0, | |
Provider: null, | |
Consumer: null, | |
_defaultValue: null, | |
_globalName: null, | |
}), | |
(I.Provider = { $$typeof: ew4, _context: I }), | |
(I.Consumer = I) | |
) | |
} | |
AB4.createElement = mT1 | |
AB4.createFactory = function (I) { | |
var G = mT1.bind(null, I) | |
return (G.type = I), G | |
} | |
AB4.createRef = function () { | |
return { current: null } | |
} | |
AB4.forwardRef = function (I) { | |
return { $$typeof: IB4, render: I } | |
} | |
AB4.isValidElement = W41 | |
AB4.lazy = function (I) { | |
return { $$typeof: dB4, _payload: { _status: -1, _result: I }, _init: CB4 } | |
} | |
AB4.memo = function (I, G) { | |
return { $$typeof: ZB4, type: I, compare: G === void 0 ? null : G } | |
} | |
AB4.startTransition = function (I) { | |
var G = Rl.transition | |
Rl.transition = {} | |
try { | |
I() | |
} finally { | |
Rl.transition = G | |
} | |
} | |
AB4.unstable_act = bT1 | |
AB4.useCallback = function (I, G) { | |
return WI.current.useCallback(I, G) | |
} | |
AB4.useContext = function (I) { | |
return WI.current.useContext(I) | |
} | |
AB4.useDebugValue = function () {} | |
AB4.useDeferredValue = function (I) { | |
return WI.current.useDeferredValue(I) | |
} | |
AB4.useEffect = function (I, G) { | |
return WI.current.useEffect(I, G) | |
} | |
AB4.useId = function () { | |
return WI.current.useId() | |
} | |
AB4.useImperativeHandle = function (I, G, Z) { | |
return WI.current.useImperativeHandle(I, G, Z) | |
} | |
AB4.useInsertionEffect = function (I, G) { | |
return WI.current.useInsertionEffect(I, G) | |
} | |
AB4.useLayoutEffect = function (I, G) { | |
return WI.current.useLayoutEffect(I, G) | |
} | |
AB4.useMemo = function (I, G) { | |
return WI.current.useMemo(I, G) | |
} | |
AB4.useReducer = function (I, G, Z) { | |
return WI.current.useReducer(I, G, Z) | |
} | |
AB4.useRef = function (I) { | |
return WI.current.useRef(I) | |
} | |
AB4.useState = function (I) { | |
return WI.current.useState(I) | |
} | |
AB4.useSyncExternalStore = function (I, G, Z) { | |
return WI.current.useSyncExternalStore(I, G, Z) | |
} | |
AB4.useTransition = function () { | |
return WI.current.useTransition() | |
} | |
AB4.version = '18.3.1' | |
}) | |
var v7 = _((sT1) => { | |
Object.defineProperty(sT1, '__esModule', { value: !0 }) | |
sT1.Log = sT1.LogLevel = void 0 | |
var CC4 = ' DEBUG ', | |
VC4 = ' INFO ', | |
AC4 = ' WARN ', | |
XC4 = ' ERROR ' | |
function Ml(I) { | |
return I.unshift('[Statsig]'), I | |
} | |
sT1.LogLevel = { None: 0, Error: 1, Warn: 2, Info: 3, Debug: 4 } | |
class CJ { | |
static info(...I) { | |
if (CJ.level >= sT1.LogLevel.Info) console.info(VC4, ...Ml(I)) | |
} | |
static debug(...I) { | |
if (CJ.level >= sT1.LogLevel.Debug) console.debug(CC4, ...Ml(I)) | |
} | |
static warn(...I) { | |
if (CJ.level >= sT1.LogLevel.Warn) console.warn(AC4, ...Ml(I)) | |
} | |
static error(...I) { | |
if (CJ.level >= sT1.LogLevel.Error) console.error(XC4, ...Ml(I)) | |
} | |
} | |
sT1.Log = CJ | |
CJ.level = sT1.LogLevel.Warn | |
}) | |
var VJ = _((Gm1) => { | |
var A41, X41, Y41 | |
Object.defineProperty(Gm1, '__esModule', { value: !0 }) | |
Gm1._getInstance = Gm1._getStatsigGlobalFlag = Gm1._getStatsigGlobal = void 0 | |
var YC4 = v7(), | |
_C4 = () => { | |
return __STATSIG__ ? __STATSIG__ : Sl | |
} | |
Gm1._getStatsigGlobal = _C4 | |
var DC4 = (I) => { | |
return Gm1._getStatsigGlobal()[I] | |
} | |
Gm1._getStatsigGlobalFlag = DC4 | |
var HC4 = (I) => { | |
let G = Gm1._getStatsigGlobal() | |
if (!I) { | |
if (G.instances && Object.keys(G.instances).length > 1) | |
YC4.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 G.firstInstance | |
} | |
return G.instances && G.instances[I] | |
} | |
Gm1._getInstance = HC4 | |
var bz = '__STATSIG__', | |
eT1 = typeof window !== 'undefined' ? window : {}, | |
tT1 = typeof global !== 'undefined' ? global : {}, | |
Im1 = typeof globalThis !== 'undefined' ? globalThis : {}, | |
Sl = | |
(Y41 = | |
(X41 = (A41 = eT1[bz]) !== null && A41 !== void 0 ? A41 : tT1[bz]) !== null && | |
X41 !== void 0 | |
? X41 | |
: Im1[bz]) !== null && Y41 !== void 0 | |
? Y41 | |
: { instance: Gm1._getInstance } | |
eT1[bz] = Sl | |
tT1[bz] = Sl | |
Im1[bz] = Sl | |
}) | |
var $l = _((Zm1) => { | |
Object.defineProperty(Zm1, '__esModule', { value: !0 }) | |
Zm1.Diagnostics = void 0 | |
var Ll = new Map(), | |
H41 = 'start', | |
F41 = 'end', | |
JC4 = 'statsig::diagnostics' | |
Zm1.Diagnostics = { | |
_getMarkers: (I) => { | |
return Ll.get(I) | |
}, | |
_markInitOverallStart: (I) => { | |
jz(I, lz({}, H41, 'overall')) | |
}, | |
_markInitOverallEnd: (I, G, Z) => { | |
jz( | |
I, | |
lz( | |
{ | |
success: G, | |
error: G ? void 0 : { name: 'InitializeError', message: 'Failed to initialize' }, | |
evaluationDetails: Z, | |
}, | |
F41, | |
'overall', | |
), | |
) | |
}, | |
_markInitNetworkReqStart: (I, G) => { | |
jz(I, lz(G, H41, 'initialize', 'network_request')) | |
}, | |
_markInitNetworkReqEnd: (I, G) => { | |
jz(I, lz(G, F41, 'initialize', 'network_request')) | |
}, | |
_markInitProcessStart: (I) => { | |
jz(I, lz({}, H41, 'initialize', 'process')) | |
}, | |
_markInitProcessEnd: (I, G) => { | |
jz(I, lz(G, F41, 'initialize', 'process')) | |
}, | |
_clearMarkers: (I) => { | |
Ll.delete(I) | |
}, | |
_formatError(I) { | |
if (!(I && typeof I === 'object')) return | |
return { code: J41(I, 'code'), name: J41(I, 'name'), message: J41(I, 'message') } | |
}, | |
_getDiagnosticsData(I, G, Z, d) { | |
var W | |
return { | |
success: (I === null || I === void 0 ? void 0 : I.ok) === !0, | |
statusCode: I === null || I === void 0 ? void 0 : I.status, | |
sdkRegion: | |
(W = I === null || I === void 0 ? void 0 : I.headers) === null || W === void 0 | |
? void 0 | |
: W.get('x-statsig-region'), | |
isDelta: Z.includes('"is_delta":true') === !0 ? !0 : void 0, | |
attempt: G, | |
error: Zm1.Diagnostics._formatError(d), | |
} | |
}, | |
_enqueueDiagnosticsEvent(I, G, Z, d) { | |
let W = Zm1.Diagnostics._getMarkers(Z) | |
if (W == null || W.length <= 0) return -1 | |
let w = W[W.length - 1].timestamp - W[0].timestamp | |
Zm1.Diagnostics._clearMarkers(Z) | |
let B = KC4(I, { context: 'initialize', markers: W.slice(), statsigOptions: d }) | |
return G.enqueue(B), w | |
}, | |
} | |
function lz(I, G, Z, d) { | |
return Object.assign({ key: Z, action: G, step: d, timestamp: Date.now() }, I) | |
} | |
function KC4(I, G) { | |
return { eventName: JC4, user: I, value: null, metadata: G, time: Date.now() } | |
} | |
function jz(I, G) { | |
var Z | |
let d = (Z = Ll.get(I)) !== null && Z !== void 0 ? Z : [] | |
d.push(G), Ll.set(I, d) | |
} | |
function J41(I, G) { | |
if (G in I) return I[G] | |
return | |
} | |
}) | |
var yl = _((dm1) => { | |
Object.defineProperty(dm1, '__esModule', { value: !0 }) | |
dm1._isTypeMatch = dm1._typeOf = void 0 | |
function gC4(I) { | |
return Array.isArray(I) ? 'array' : typeof I | |
} | |
dm1._typeOf = gC4 | |
function NC4(I, G) { | |
let Z = (d) => (Array.isArray(d) ? 'array' : typeof d) | |
return Z(I) === Z(G) | |
} | |
dm1._isTypeMatch = NC4 | |
}) | |
var kz = _((wm1) => { | |
Object.defineProperty(wm1, '__esModule', { value: !0 }) | |
wm1._getSortedObject = wm1._DJB2Object = wm1._DJB2 = void 0 | |
var QC4 = yl(), | |
qC4 = (I) => { | |
let G = 0 | |
for (let Z = 0; Z < I.length; Z++) { | |
let d = I.charCodeAt(Z) | |
;(G = (G << 5) - G + d), (G = G & G) | |
} | |
return String(G >>> 0) | |
} | |
wm1._DJB2 = qC4 | |
var UC4 = (I, G) => { | |
return wm1._DJB2(JSON.stringify(wm1._getSortedObject(I, G))) | |
} | |
wm1._DJB2Object = UC4 | |
var fC4 = (I, G) => { | |
if (I == null) return null | |
let Z = Object.keys(I).sort(), | |
d = {} | |
return ( | |
Z.forEach((W) => { | |
let w = I[W] | |
if (G === 0 || QC4._typeOf(w) !== 'object') { | |
d[W] = w | |
return | |
} | |
d[W] = wm1._getSortedObject(w, G != null ? G - 1 : G) | |
}), | |
d | |
) | |
} | |
wm1._getSortedObject = fC4 | |
}) | |
var IM = _((Am1) => { | |
Object.defineProperty(Am1, '__esModule', { value: !0 }) | |
Am1._getStorageKey = Am1._getUserStorageKey = void 0 | |
var Cm1 = kz() | |
function Vm1(I, G, Z) { | |
var d | |
if (Z) return Z(I, G) | |
let W = G && G.customIDs ? G.customIDs : {}, | |
w = [ | |
`uid:${(d = G === null || G === void 0 ? void 0 : G.userID) !== null && d !== void 0 ? d : ''}`, | |
`cids:${Object.keys(W) | |
.sort((B, C) => B.localeCompare(C)) | |
.map((B) => `${B}-${W[B]}`) | |
.join(',')}`, | |
`k:${I}`, | |
] | |
return Cm1._DJB2(w.join('|')) | |
} | |
Am1._getUserStorageKey = Vm1 | |
function EC4(I, G, Z) { | |
if (G) return Vm1(I, G, Z) | |
return Cm1._DJB2(`k:${I}`) | |
} | |
Am1._getStorageKey = EC4 | |
}) | |
var GM = _((Ym1) => { | |
Object.defineProperty(Ym1, '__esModule', { value: !0 }) | |
Ym1.NetworkParam = Ym1.NetworkDefault = Ym1.Endpoint = void 0 | |
Ym1.Endpoint = { | |
_initialize: 'initialize', | |
_rgstr: 'rgstr', | |
_download_config_specs: 'download_config_specs', | |
} | |
Ym1.NetworkDefault = { | |
[Ym1.Endpoint._rgstr]: 'https://prodregistryv2.org/v1', | |
[Ym1.Endpoint._initialize]: 'https://featureassets.org/v1', | |
[Ym1.Endpoint._download_config_specs]: 'https://api.statsigcdn.com/v1', | |
} | |
Ym1.NetworkParam = { | |
EventCount: 'ec', | |
SdkKey: 'k', | |
SdkType: 'st', | |
SdkVersion: 'sv', | |
Time: 't', | |
SessionID: 'sid', | |
StatsigEncoded: 'se', | |
IsGzipped: 'gz', | |
} | |
}) | |
var AJ = _((Dm1) => { | |
Object.defineProperty(Dm1, '__esModule', { value: !0 }) | |
Dm1._getCurrentPageUrlSafe = | |
Dm1._addDocumentEventListenerSafe = | |
Dm1._addWindowEventListenerSafe = | |
Dm1._isServerEnv = | |
Dm1._getDocumentSafe = | |
Dm1._getWindowSafe = | |
void 0 | |
var SC4 = () => { | |
return typeof window !== 'undefined' ? window : null | |
} | |
Dm1._getWindowSafe = SC4 | |
var LC4 = () => { | |
var I | |
let G = Dm1._getWindowSafe() | |
return (I = G === null || G === void 0 ? void 0 : G.document) !== null && I !== void 0 | |
? I | |
: null | |
} | |
Dm1._getDocumentSafe = LC4 | |
var $C4 = () => { | |
if (Dm1._getDocumentSafe() !== null) return !1 | |
let I = | |
typeof process !== 'undefined' && process.versions != null && process.versions.node != null | |
return typeof EdgeRuntime === 'string' || I | |
} | |
Dm1._isServerEnv = $C4 | |
var yC4 = (I, G) => { | |
let Z = Dm1._getWindowSafe() | |
if (typeof (Z === null || Z === void 0 ? void 0 : Z.addEventListener) === 'function') | |
Z.addEventListener(I, G) | |
} | |
Dm1._addWindowEventListenerSafe = yC4 | |
var PC4 = (I, G) => { | |
let Z = Dm1._getDocumentSafe() | |
if (typeof (Z === null || Z === void 0 ? void 0 : Z.addEventListener) === 'function') | |
Z.addEventListener(I, G) | |
} | |
Dm1._addDocumentEventListenerSafe = PC4 | |
var OC4 = () => { | |
var I | |
try { | |
return (I = Dm1._getWindowSafe()) === null || I === void 0 | |
? void 0 | |
: I.location.href.split(/[?#]/)[0] | |
} catch (G) { | |
return | |
} | |
} | |
Dm1._getCurrentPageUrlSafe = OC4 | |
}) | |
var N41 = _((gm1) => { | |
Object.defineProperty(gm1, '__esModule', { value: !0 }) | |
gm1._createLayerParameterExposure = | |
gm1._createConfigExposure = | |
gm1._createGateExposure = | |
gm1._isExposureEvent = | |
void 0 | |
var Fm1 = 'statsig::config_exposure', | |
Jm1 = 'statsig::gate_exposure', | |
Km1 = 'statsig::layer_exposure', | |
g41 = (I, G, Z, d, W) => { | |
if (Z.bootstrapMetadata) d.bootstrapMetadata = Z.bootstrapMetadata | |
return { | |
eventName: I, | |
user: G, | |
value: null, | |
metadata: hC4(Z, d), | |
secondaryExposures: W, | |
time: Date.now(), | |
} | |
}, | |
bC4 = ({ eventName: I }) => { | |
return I === Jm1 || I === Fm1 || I === Km1 | |
} | |
gm1._isExposureEvent = bC4 | |
var lC4 = (I, G) => { | |
var Z, d, W | |
let w = { gate: G.name, gateValue: String(G.value), ruleID: G.ruleID } | |
if (((Z = G.__evaluation) === null || Z === void 0 ? void 0 : Z.version) != null) | |
w.configVersion = G.__evaluation.version | |
return g41( | |
Jm1, | |
I, | |
G.details, | |
w, | |
(W = (d = G.__evaluation) === null || d === void 0 ? void 0 : d.secondary_exposures) !== | |
null && W !== void 0 | |
? W | |
: [], | |
) | |
} | |
gm1._createGateExposure = lC4 | |
var jC4 = (I, G) => { | |
var Z, d, W, w | |
let B = { config: G.name, ruleID: G.ruleID } | |
if (((Z = G.__evaluation) === null || Z === void 0 ? void 0 : Z.version) != null) | |
B.configVersion = G.__evaluation.version | |
if (((d = G.__evaluation) === null || d === void 0 ? void 0 : d.passed) != null) | |
B.rulePassed = String(G.__evaluation.passed) | |
return g41( | |
Fm1, | |
I, | |
G.details, | |
B, | |
(w = (W = G.__evaluation) === null || W === void 0 ? void 0 : W.secondary_exposures) !== | |
null && w !== void 0 | |
? w | |
: [], | |
) | |
} | |
gm1._createConfigExposure = jC4 | |
var kC4 = (I, G, Z) => { | |
var d, W, w, B | |
let C = G.__evaluation, | |
V = | |
((d = C === null || C === void 0 ? void 0 : C.explicit_parameters) === null || d === void 0 | |
? void 0 | |
: d.includes(Z)) === !0, | |
A = '', | |
X = | |
(W = C === null || C === void 0 ? void 0 : C.undelegated_secondary_exposures) !== null && | |
W !== void 0 | |
? W | |
: [] | |
if (V) | |
(A = (w = C.allocated_experiment_name) !== null && w !== void 0 ? w : ''), | |
(X = C.secondary_exposures) | |
let Y = { | |
config: G.name, | |
parameterName: Z, | |
ruleID: G.ruleID, | |
allocatedExperiment: A, | |
isExplicitParameter: String(V), | |
} | |
if (((B = G.__evaluation) === null || B === void 0 ? void 0 : B.version) != null) | |
Y.configVersion = G.__evaluation.version | |
return g41(Km1, I, G.details, Y, X) | |
} | |
gm1._createLayerParameterExposure = kC4 | |
var hC4 = (I, G) => { | |
if (((G.reason = I.reason), I.lcut)) G.lcut = String(I.lcut) | |
if (I.receivedAt) G.receivedAt = String(I.receivedAt) | |
return G | |
} | |
}) | |
var sV = _((zm1) => { | |
Object.defineProperty(zm1, '__esModule', { value: !0 }) | |
zm1._setObjectInStorage = zm1._getObjectFromStorage = zm1.Storage = void 0 | |
var iC4 = v7(), | |
nC4 = AJ(), | |
ZM = {}, | |
Q41 = { | |
isReady: () => !0, | |
isReadyResolver: () => null, | |
getProviderName: () => 'InMemory', | |
getItem: (I) => (ZM[I] ? ZM[I] : null), | |
setItem: (I, G) => { | |
ZM[I] = G | |
}, | |
removeItem: (I) => { | |
delete ZM[I] | |
}, | |
getAllKeys: () => Object.keys(ZM), | |
}, | |
Tl = null | |
try { | |
let I = nC4._getWindowSafe() | |
if (I && I.localStorage && typeof I.localStorage.getItem === 'function') | |
Tl = { | |
isReady: () => !0, | |
isReadyResolver: () => null, | |
getProviderName: () => 'LocalStorage', | |
getItem: (G) => I.localStorage.getItem(G), | |
setItem: (G, Z) => I.localStorage.setItem(G, Z), | |
removeItem: (G) => I.localStorage.removeItem(G), | |
getAllKeys: () => Object.keys(I.localStorage), | |
} | |
} catch (I) { | |
iC4.Log.warn('Failed to setup localStorageProvider.') | |
} | |
var z41 = Tl !== null && Tl !== void 0 ? Tl : Q41, | |
SB = z41 | |
function aC4(I) { | |
try { | |
return I() | |
} catch (G) { | |
if (G instanceof Error && G.name === 'SecurityError') | |
return zm1.Storage._setProvider(Q41), null | |
throw G | |
} | |
} | |
zm1.Storage = { | |
isReady: () => SB.isReady(), | |
isReadyResolver: () => SB.isReadyResolver(), | |
getProviderName: () => SB.getProviderName(), | |
getItem: (I) => aC4(() => SB.getItem(I)), | |
setItem: (I, G) => SB.setItem(I, G), | |
removeItem: (I) => SB.removeItem(I), | |
getAllKeys: () => SB.getAllKeys(), | |
_setProvider: (I) => { | |
;(z41 = I), (SB = I) | |
}, | |
_setDisabled: (I) => { | |
if (I) SB = Q41 | |
else SB = z41 | |
}, | |
} | |
function rC4(I) { | |
let G = zm1.Storage.getItem(I) | |
return JSON.parse(G !== null && G !== void 0 ? G : 'null') | |
} | |
zm1._getObjectFromStorage = rC4 | |
function sC4(I, G) { | |
zm1.Storage.setItem(I, JSON.stringify(G)) | |
} | |
zm1._setObjectInStorage = sC4 | |
}) | |
var q41 = _((Um1) => { | |
Object.defineProperty(Um1, '__esModule', { value: !0 }) | |
Um1.UrlConfiguration = void 0 | |
var bl = GM(), | |
eC4 = { | |
[bl.Endpoint._initialize]: 'i', | |
[bl.Endpoint._rgstr]: 'e', | |
[bl.Endpoint._download_config_specs]: 'd', | |
} | |
class qm1 { | |
constructor(I, G, Z, d) { | |
if ( | |
((this.customUrl = null), | |
(this.fallbackUrls = null), | |
(this.endpoint = I), | |
(this.endpointDnsKey = eC4[I]), | |
G) | |
) | |
this.customUrl = G | |
if (!G && Z) this.customUrl = Z.endsWith('/') ? `${Z}${I}` : `${Z}/${I}` | |
if (d) this.fallbackUrls = d | |
let W = bl.NetworkDefault[I] | |
this.defaultUrl = `${W}/${I}` | |
} | |
getUrl() { | |
var I | |
return (I = this.customUrl) !== null && I !== void 0 ? I : this.defaultUrl | |
} | |
} | |
Um1.UrlConfiguration = qm1 | |
}) | |
var kl = _((Em1) => { | |
Object.defineProperty(Em1, '__esModule', { value: !0 }) | |
Em1._notifyVisibilityChanged = | |
Em1._subscribeToVisiblityChanged = | |
Em1._isUnloading = | |
Em1._isCurrentlyVisible = | |
void 0 | |
var ll = AJ(), | |
jl = 'foreground', | |
f41 = 'background', | |
Rm1 = [], | |
U41 = jl, | |
R41 = !1, | |
tC4 = () => { | |
return U41 === jl | |
} | |
Em1._isCurrentlyVisible = tC4 | |
var IV4 = () => R41 | |
Em1._isUnloading = IV4 | |
var GV4 = (I) => { | |
Rm1.unshift(I) | |
} | |
Em1._subscribeToVisiblityChanged = GV4 | |
var ZV4 = (I) => { | |
if (I === U41) return | |
;(U41 = I), Rm1.forEach((G) => G(I)) | |
} | |
Em1._notifyVisibilityChanged = ZV4 | |
ll._addWindowEventListenerSafe('focus', () => { | |
;(R41 = !1), Em1._notifyVisibilityChanged(jl) | |
}) | |
ll._addWindowEventListenerSafe('blur', () => Em1._notifyVisibilityChanged(f41)) | |
ll._addWindowEventListenerSafe('beforeunload', () => { | |
;(R41 = !0), Em1._notifyVisibilityChanged(f41) | |
}) | |
ll._addDocumentEventListenerSafe('visibilitychange', () => { | |
Em1._notifyVisibilityChanged(document.visibilityState === 'visible' ? jl : f41) | |
}) | |
}) | |
var v41 = _((pz) => { | |
var xz = | |
(pz && pz.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(pz, '__esModule', { value: !0 }) | |
pz.EventLogger = void 0 | |
var BV4 = IM(), | |
CV4 = kz(), | |
dM = v7(), | |
vm1 = GM(), | |
E41 = AJ(), | |
VV4 = N41(), | |
cz = sV(), | |
AV4 = q41(), | |
Mm1 = kl(), | |
XV4 = 100, | |
YV4 = 1e4, | |
_V4 = 1000, | |
DV4 = 600000, | |
HV4 = 500, | |
Sm1 = 200, | |
WM = {}, | |
hl = { Startup: 'startup', GainedFocus: 'gained_focus' } | |
class XJ { | |
static _safeFlushAndForget(I) { | |
var G | |
;(G = WM[I]) === null || G === void 0 || G.flush().catch(() => {}) | |
} | |
static _safeRetryFailedLogs(I) { | |
var G | |
;(G = WM[I]) === null || G === void 0 || G._retryFailedLogs(hl.GainedFocus) | |
} | |
constructor(I, G, Z, d) { | |
var W | |
;(this._sdkKey = I), | |
(this._emitter = G), | |
(this._network = Z), | |
(this._options = d), | |
(this._queue = []), | |
(this._lastExposureTimeMap = {}), | |
(this._nonExposedChecks = {}), | |
(this._hasRunQuickFlush = !1), | |
(this._creationTime = Date.now()), | |
(this._isLoggingDisabled = (d === null || d === void 0 ? void 0 : d.disableLogging) === !0), | |
(this._maxQueueSize = | |
(W = d === null || d === void 0 ? void 0 : d.loggingBufferMaxSize) !== null && | |
W !== void 0 | |
? W | |
: XV4) | |
let w = d === null || d === void 0 ? void 0 : d.networkConfig | |
this._logEventUrlConfig = new AV4.UrlConfiguration( | |
vm1.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) | |
) | |
XJ._safeFlushAndForget(this._sdkKey) | |
} | |
incrementNonExposureCount(I) { | |
var G | |
let Z = (G = this._nonExposedChecks[I]) !== null && G !== void 0 ? G : 0 | |
this._nonExposedChecks[I] = Z + 1 | |
} | |
reset() { | |
this._lastExposureTimeMap = {} | |
} | |
start() { | |
if (E41._isServerEnv()) return | |
;(WM[this._sdkKey] = this), | |
Mm1._subscribeToVisiblityChanged((I) => { | |
if (I === 'background') XJ._safeFlushAndForget(this._sdkKey) | |
else if (I === 'foreground') XJ._safeRetryFailedLogs(this._sdkKey) | |
}), | |
this._retryFailedLogs(hl.Startup), | |
this._startBackgroundFlushInterval() | |
} | |
stop() { | |
return xz(this, void 0, void 0, function* () { | |
if (this._flushIntervalId) | |
clearInterval(this._flushIntervalId), (this._flushIntervalId = null) | |
delete WM[this._sdkKey], yield this.flush() | |
}) | |
} | |
flush() { | |
return xz(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 > Sm1)) return | |
setTimeout(() => XJ._safeFlushAndForget(this._sdkKey), Sm1) | |
} | |
_shouldLogEvent(I) { | |
if (E41._isServerEnv()) return !1 | |
if (!VV4._isExposureEvent(I)) return !0 | |
let G = I.user ? I.user : { statsigEnvironment: void 0 }, | |
Z = BV4._getUserStorageKey(this._sdkKey, G), | |
d = I.metadata ? I.metadata : {}, | |
W = [ | |
I.eventName, | |
Z, | |
d.gate, | |
d.config, | |
d.ruleID, | |
d.allocatedExperiment, | |
d.parameterName, | |
String(d.isExplicitParameter), | |
d.reason, | |
].join('|'), | |
w = this._lastExposureTimeMap[W], | |
B = Date.now() | |
if (w && B - w < DV4) return !1 | |
if (Object.keys(this._lastExposureTimeMap).length > _V4) this._lastExposureTimeMap = {} | |
return (this._lastExposureTimeMap[W] = B), !0 | |
} | |
_sendEvents(I) { | |
var G, Z | |
return xz(this, void 0, void 0, function* () { | |
if (this._isLoggingDisabled) return this._saveFailedLogsToStorage(I), !1 | |
try { | |
let W = | |
Mm1._isUnloading() && | |
this._network.isBeaconSupported() && | |
((Z = (G = this._options) === null || G === void 0 ? void 0 : G.networkConfig) === | |
null || Z === void 0 | |
? void 0 | |
: Z.networkOverrideFunc) == null | |
if ( | |
(this._emitter({ name: 'pre_logs_flushed', events: I }), | |
(W ? yield this._sendEventsViaBeacon(I) : yield this._sendEventsViaPost(I)).success) | |
) | |
return this._emitter({ name: 'logs_flushed', events: I }), !0 | |
else return dM.Log.warn('Failed to flush events.'), this._saveFailedLogsToStorage(I), !1 | |
} catch (d) { | |
return dM.Log.warn('Failed to flush events.'), !1 | |
} | |
}) | |
} | |
_sendEventsViaPost(I) { | |
var G | |
return xz(this, void 0, void 0, function* () { | |
let Z = yield this._network.post(this._getRequestData(I)), | |
d = (G = Z === null || Z === void 0 ? void 0 : Z.code) !== null && G !== void 0 ? G : -1 | |
return { success: d >= 200 && d < 300 } | |
}) | |
} | |
_sendEventsViaBeacon(I) { | |
return xz(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: { [vm1.NetworkParam.EventCount]: String(I.length) }, | |
} | |
} | |
_saveFailedLogsToStorage(I) { | |
while (I.length > HV4) I.shift() | |
let G = this._getStorageKey() | |
try { | |
cz._setObjectInStorage(G, I) | |
} catch (Z) { | |
dM.Log.warn('Unable to save failed logs to storage') | |
} | |
} | |
_retryFailedLogs(I) { | |
let G = this._getStorageKey() | |
;(() => | |
xz(this, void 0, void 0, function* () { | |
if (!cz.Storage.isReady()) yield cz.Storage.isReadyResolver() | |
let Z = cz._getObjectFromStorage(G) | |
if (!Z) return | |
if (I === hl.Startup) cz.Storage.removeItem(G) | |
if ((yield this._sendEvents(Z)) && I === hl.GainedFocus) cz.Storage.removeItem(G) | |
}))().catch(() => { | |
dM.Log.warn('Failed to flush stored logs') | |
}) | |
} | |
_getStorageKey() { | |
return `statsig.failed_logs.${CV4._DJB2(this._sdkKey)}` | |
} | |
_normalizeAndAppendEvent(I) { | |
if (I.user) (I.user = Object.assign({}, I.user)), delete I.user.privateAttributes | |
let G = {}, | |
Z = this._getCurrentPageUrl() | |
if (Z) G.statsigMetadata = { currentPage: Z } | |
let d = Object.assign(Object.assign({}, I), G) | |
dM.Log.debug('Enqueued Event:', d), this._queue.push(d) | |
} | |
_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 E41._getCurrentPageUrlSafe() | |
} | |
_startBackgroundFlushInterval() { | |
var I, G | |
let Z = | |
(G = (I = this._options) === null || I === void 0 ? void 0 : I.loggingIntervalMs) !== | |
null && G !== void 0 | |
? G | |
: YV4, | |
d = setInterval(() => { | |
let W = WM[this._sdkKey] | |
if (!W || W._flushIntervalId !== d) clearInterval(d) | |
else XJ._safeFlushAndForget(this._sdkKey) | |
}, Z) | |
this._flushIntervalId = d | |
} | |
} | |
pz.EventLogger = XJ | |
}) | |
var wM = _((Lm1) => { | |
Object.defineProperty(Lm1, '__esModule', { value: !0 }) | |
Lm1.StatsigMetadataProvider = Lm1.SDK_VERSION = void 0 | |
Lm1.SDK_VERSION = '3.12.0' | |
var M41 = { sdkVersion: Lm1.SDK_VERSION, sdkType: 'js-mono' } | |
Lm1.StatsigMetadataProvider = { | |
get: () => M41, | |
add: (I) => { | |
M41 = Object.assign(Object.assign({}, M41), I) | |
}, | |
} | |
}) | |
var Om1 = _((Pm1) => { | |
Object.defineProperty(Pm1, '__esModule', { value: !0 }) | |
}) | |
var xl = _((um1) => { | |
Object.defineProperty(um1, '__esModule', { value: !0 }) | |
um1.getUUID = void 0 | |
function FV4() { | |
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') | |
return crypto.randomUUID() | |
let I = new Date().getTime(), | |
G = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0 | |
return `xxxxxxxx-xxxx-4xxx-${'89ab'[Math.floor(Math.random() * 4)]}xxx-xxxxxxxxxxxx`.replace( | |
/[xy]/g, | |
(d) => { | |
let W = Math.random() * 16 | |
if (I > 0) (W = (I + W) % 16 | 0), (I = Math.floor(I / 16)) | |
else (W = (G + W) % 16 | 0), (G = Math.floor(G / 16)) | |
return (d === 'x' ? W : (W & 7) | 8).toString(16) | |
}, | |
) | |
} | |
um1.getUUID = FV4 | |
}) | |
var pl = _((jm1) => { | |
Object.defineProperty(jm1, '__esModule', { value: !0 }) | |
jm1.StableID = void 0 | |
var JV4 = IM(), | |
KV4 = v7(), | |
bm1 = sV(), | |
gV4 = xl(), | |
cl = {} | |
jm1.StableID = { | |
get: (I) => { | |
if (cl[I] == null) { | |
let G = NV4(I) | |
if (G == null) (G = gV4.getUUID()), mm1(G, I) | |
cl[I] = G | |
} | |
return cl[I] | |
}, | |
setOverride: (I, G) => { | |
;(cl[G] = I), mm1(I, G) | |
}, | |
} | |
function lm1(I) { | |
return `statsig.stable_id.${JV4._getStorageKey(I)}` | |
} | |
function mm1(I, G) { | |
let Z = lm1(G) | |
try { | |
bm1._setObjectInStorage(Z, I) | |
} catch (d) { | |
KV4.Log.warn('Failed to save StableID') | |
} | |
} | |
function NV4(I) { | |
let G = lm1(I) | |
return bm1._getObjectFromStorage(G) | |
} | |
}) | |
var S41 = _((hm1) => { | |
Object.defineProperty(hm1, '__esModule', { value: !0 }) | |
hm1._getFullUserHash = hm1._normalizeUser = void 0 | |
var zV4 = kz(), | |
QV4 = v7() | |
function qV4(I, G, Z) { | |
try { | |
let d = JSON.parse(JSON.stringify(I)) | |
if (G != null && G.environment != null) d.statsigEnvironment = G.environment | |
else if (Z != null) d.statsigEnvironment = { tier: Z } | |
return d | |
} catch (d) { | |
return QV4.Log.error('Failed to JSON.stringify user'), { statsigEnvironment: void 0 } | |
} | |
} | |
hm1._normalizeUser = qV4 | |
function UV4(I) { | |
return I ? zV4._DJB2Object(I) : null | |
} | |
hm1._getFullUserHash = UV4 | |
}) | |
var L41 = _((cm1) => { | |
Object.defineProperty(cm1, '__esModule', { value: !0 }) | |
cm1._typedJsonParse = void 0 | |
var RV4 = v7() | |
function EV4(I, G, Z) { | |
try { | |
let d = JSON.parse(I) | |
if (d && typeof d === 'object' && G in d) return d | |
} catch (d) {} | |
return RV4.Log.error(`Failed to parse ${Z}`), null | |
} | |
cm1._typedJsonParse = EV4 | |
}) | |
var om1 = _((OY) => { | |
var $41 = | |
(OY && OY.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(OY, '__esModule', { value: !0 }) | |
OY._makeDataAdapterResult = OY.DataAdapterCore = void 0 | |
var il = v7(), | |
vV4 = pl(), | |
nl = S41(), | |
PY = sV(), | |
im1 = L41(), | |
nm1 = 10 | |
class am1 { | |
constructor(I, G) { | |
;(this._adapterName = I), | |
(this._cacheSuffix = G), | |
(this._options = null), | |
(this._sdkKey = null), | |
(this._lastModifiedStoreKey = `statsig.last_modified_time.${G}`), | |
(this._inMemoryCache = new rm1()) | |
} | |
attach(I, G) { | |
;(this._sdkKey = I), (this._options = G) | |
} | |
getDataSync(I) { | |
let G = I && nl._normalizeUser(I, this._options), | |
Z = this._getCacheKey(G), | |
d = this._inMemoryCache.get(Z, G) | |
if (d) return d | |
let W = this._loadFromCache(Z) | |
if (W) return this._inMemoryCache.add(Z, W), this._inMemoryCache.get(Z, G) | |
return null | |
} | |
setData(I, G) { | |
let Z = G && nl._normalizeUser(G, this._options), | |
d = this._getCacheKey(Z) | |
this._inMemoryCache.add(d, al('Bootstrap', I, null, Z)) | |
} | |
_getDataAsyncImpl(I, G, Z) { | |
return $41(this, void 0, void 0, function* () { | |
if (!PY.Storage.isReady()) yield PY.Storage.isReadyResolver() | |
let d = I !== null && I !== void 0 ? I : this.getDataSync(G), | |
W = [this._fetchAndPrepFromNetwork(d, G, Z)] | |
if (Z === null || Z === void 0 ? void 0 : Z.timeoutMs) | |
W.push( | |
new Promise((w) => setTimeout(w, Z.timeoutMs)).then(() => { | |
return il.Log.debug('Fetching latest value timed out'), null | |
}), | |
) | |
return yield Promise.race(W) | |
}) | |
} | |
_prefetchDataImpl(I, G) { | |
return $41(this, void 0, void 0, function* () { | |
let Z = I && nl._normalizeUser(I, this._options), | |
d = this._getCacheKey(Z), | |
W = yield this._getDataAsyncImpl(null, Z, G) | |
if (W) | |
this._inMemoryCache.add(d, Object.assign(Object.assign({}, W), { source: 'Prefetch' })) | |
}) | |
} | |
_fetchAndPrepFromNetwork(I, G, Z) { | |
return $41(this, void 0, void 0, function* () { | |
let d = null | |
if (I && this._isCachedResultValidFor204(I, G)) d = I.data | |
let W = yield this._fetchFromNetwork(d, G, Z) | |
if (!W) return il.Log.debug('No response returned for latest value'), null | |
let w = im1._typedJsonParse(W, 'has_updates', 'Response'), | |
B = this._getSdkKey(), | |
C = vV4.StableID.get(B), | |
V = null | |
if ((w === null || w === void 0 ? void 0 : w.has_updates) === !0) V = al('Network', W, C, G) | |
else if (d && (w === null || w === void 0 ? void 0 : w.has_updates) === !1) | |
V = al('NetworkNotModified', d, C, G) | |
else return null | |
let A = this._getCacheKey(G) | |
return this._inMemoryCache.add(A, V), this._writeToCache(A, V), V | |
}) | |
} | |
_getSdkKey() { | |
if (this._sdkKey != null) return this._sdkKey | |
return il.Log.error(`${this._adapterName} is not attached to a Client`), '' | |
} | |
_loadFromCache(I) { | |
var G | |
let Z = (G = PY.Storage.getItem) === null || G === void 0 ? void 0 : G.call(PY.Storage, I) | |
if (Z == null) return null | |
let d = im1._typedJsonParse(Z, 'source', 'Cached Result') | |
return d ? Object.assign(Object.assign({}, d), { source: 'Cache' }) : null | |
} | |
_writeToCache(I, G) { | |
PY.Storage.setItem(I, JSON.stringify(G)), this._runLocalStorageCacheEviction(I) | |
} | |
_runLocalStorageCacheEviction(I) { | |
var G | |
let Z = | |
(G = PY._getObjectFromStorage(this._lastModifiedStoreKey)) !== null && G !== void 0 ? G : {} | |
Z[I] = Date.now() | |
let d = sm1(Z, nm1) | |
if (d) delete Z[d], PY.Storage.removeItem(d) | |
PY._setObjectInStorage(this._lastModifiedStoreKey, Z) | |
} | |
} | |
OY.DataAdapterCore = am1 | |
function al(I, G, Z, d) { | |
return { | |
source: I, | |
data: G, | |
receivedAt: Date.now(), | |
stableID: Z, | |
fullUserHash: nl._getFullUserHash(d), | |
} | |
} | |
OY._makeDataAdapterResult = al | |
class rm1 { | |
constructor() { | |
this._data = {} | |
} | |
get(I, G) { | |
var Z | |
let d = this._data[I], | |
W = d === null || d === void 0 ? void 0 : d.stableID, | |
w = | |
(Z = G === null || G === void 0 ? void 0 : G.customIDs) === null || Z === void 0 | |
? void 0 | |
: Z.stableID | |
if (w && W && w !== W) return il.Log.warn("'StatsigUser.customIDs.stableID' mismatch"), null | |
return d | |
} | |
add(I, G) { | |
let Z = sm1(this._data, nm1 - 1) | |
if (Z) delete this._data[Z] | |
this._data[I] = G | |
} | |
merge(I) { | |
this._data = Object.assign(Object.assign({}, this._data), I) | |
} | |
} | |
function sm1(I, G) { | |
let Z = Object.keys(I) | |
if (Z.length <= G) return null | |
return Z.reduce((d, W) => { | |
let w = I[d], | |
B = I[W] | |
if (typeof w === 'object' && typeof B === 'object') return B.receivedAt < w.receivedAt ? W : d | |
return B < w ? W : d | |
}) | |
} | |
}) | |
var tm1 = _((em1) => { | |
Object.defineProperty(em1, '__esModule', { value: !0 }) | |
}) | |
var rl = _((Gb1) => { | |
Object.defineProperty(Gb1, '__esModule', { value: !0 }) | |
Gb1.SDKType = void 0 | |
var Ib1 = {}, | |
iz | |
Gb1.SDKType = { | |
_get: (I) => { | |
var G | |
return ( | |
((G = Ib1[I]) !== null && G !== void 0 ? G : 'js-mono') + | |
(iz !== null && iz !== void 0 ? iz : '') | |
) | |
}, | |
_setClientType(I, G) { | |
Ib1[I] = G | |
}, | |
_setBindingType(I) { | |
if (!iz || iz === '-react') iz = '-' + I | |
}, | |
} | |
}) | |
var y41 = _((oV) => { | |
var MV4 = | |
(oV && oV.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(oV, '__esModule', { value: !0 }) | |
oV.ErrorBoundary = oV.EXCEPTION_ENDPOINT = void 0 | |
var SV4 = v7(), | |
LV4 = rl(), | |
$V4 = wM() | |
oV.EXCEPTION_ENDPOINT = 'https://statsigapi.net/v1/sdk_exception' | |
var Wb1 = '[Statsig] UnknownError' | |
class wb1 { | |
constructor(I, G, Z, d) { | |
;(this._sdkKey = I), | |
(this._options = G), | |
(this._emitter = Z), | |
(this._lastSeenError = d), | |
(this._seen = new Set()) | |
} | |
wrap(I) { | |
try { | |
let G = I | |
PV4(G).forEach((Z) => { | |
let d = G[Z] | |
if ('$EB' in d) return | |
;(G[Z] = (...W) => { | |
return this._capture(Z, () => d.apply(I, W)) | |
}), | |
(G[Z].$EB = !0) | |
}) | |
} catch (G) { | |
this._onError('eb:wrap', G) | |
} | |
} | |
logError(I, G) { | |
this._onError(I, G) | |
} | |
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 = db1(I) | |
} | |
_capture(I, G) { | |
try { | |
let Z = G() | |
if (Z && Z instanceof Promise) return Z.catch((d) => this._onError(I, d)) | |
return Z | |
} catch (Z) { | |
return this._onError(I, Z), null | |
} | |
} | |
_onError(I, G) { | |
try { | |
SV4.Log.warn(`Caught error in ${I}`, { error: G }), | |
(() => | |
MV4(this, void 0, void 0, function* () { | |
var d, W, w, B, C, V, A | |
let X = G ? G : Error(Wb1), | |
Y = X instanceof Error, | |
H = Y ? X.name : 'No Name', | |
J = db1(X) | |
if (((this._lastSeenError = J), this._seen.has(H))) return | |
if ( | |
(this._seen.add(H), | |
(W = (d = this._options) === null || d === void 0 ? void 0 : d.networkConfig) === | |
null || W === void 0 | |
? void 0 | |
: W.preventAllNetworkTraffic) | |
) { | |
;(w = this._emitter) === null || | |
w === void 0 || | |
w.call(this, { name: 'error', error: G, tag: I }) | |
return | |
} | |
let K = LV4.SDKType._get(this._sdkKey), | |
g = $V4.StatsigMetadataProvider.get(), | |
z = Y ? X.stack : yV4(X), | |
f = JSON.stringify( | |
Object.assign( | |
{ tag: I, exception: H, info: z }, | |
Object.assign(Object.assign({}, g), { sdkType: K }), | |
), | |
) | |
yield ( | |
(V = | |
(C = (B = this._options) === null || B === void 0 ? void 0 : B.networkConfig) === | |
null || C === void 0 | |
? void 0 | |
: C.networkOverrideFunc) !== null && V !== void 0 | |
? V | |
: fetch | |
)(oV.EXCEPTION_ENDPOINT, { | |
method: 'POST', | |
headers: { | |
'STATSIG-API-KEY': this._sdkKey, | |
'STATSIG-SDK-TYPE': String(K), | |
'STATSIG-SDK-VERSION': String(g.sdkVersion), | |
'Content-Type': 'application/json', | |
}, | |
body: f, | |
}), | |
(A = this._emitter) === null || | |
A === void 0 || | |
A.call(this, { name: 'error', error: G, tag: I }) | |
}))() | |
.then(() => {}) | |
.catch(() => {}) | |
} catch (Z) {} | |
} | |
} | |
oV.ErrorBoundary = wb1 | |
function db1(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 yV4(I) { | |
try { | |
return JSON.stringify(I) | |
} catch (G) { | |
return Wb1 | |
} | |
} | |
function PV4(I) { | |
let G = new Set(), | |
Z = Object.getPrototypeOf(I) | |
while (Z && Z !== Object.prototype) | |
Object.getOwnPropertyNames(Z) | |
.filter((d) => typeof (Z === null || Z === void 0 ? void 0 : Z[d]) === 'function') | |
.forEach((d) => G.add(d)), | |
(Z = Object.getPrototypeOf(Z)) | |
return Array.from(G) | |
} | |
}) | |
var Cb1 = _((Bb1) => { | |
Object.defineProperty(Bb1, '__esModule', { value: !0 }) | |
}) | |
var Ab1 = _((Vb1) => { | |
Object.defineProperty(Vb1, '__esModule', { value: !0 }) | |
}) | |
var Yb1 = _((Xb1) => { | |
Object.defineProperty(Xb1, '__esModule', { value: !0 }) | |
}) | |
var P41 = _((_b1) => { | |
Object.defineProperty(_b1, '__esModule', { value: !0 }) | |
_b1.createMemoKey = _b1.MemoPrefix = void 0 | |
_b1.MemoPrefix = { | |
_gate: 'g', | |
_dynamicConfig: 'c', | |
_experiment: 'e', | |
_layer: 'l', | |
_paramStore: 'p', | |
} | |
var OV4 = new Set([]), | |
uV4 = new Set(['userPersistedValues']) | |
function TV4(I, G, Z) { | |
let d = `${I}|${G}` | |
if (!Z) return d | |
for (let W of Object.keys(Z)) { | |
if (uV4.has(W)) return | |
if (OV4.has(W)) d += `|${W}=true` | |
else d += `|${W}=${Z[W]}` | |
} | |
return d | |
} | |
_b1.createMemoKey = TV4 | |
}) | |
var Hb1 = _((nz) => { | |
var bV4 = | |
(nz && nz.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(nz, '__esModule', { value: !0 }) | |
nz._fetchTxtRecords = void 0 | |
var lV4 = 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, | |
]), | |
jV4 = 'https://cloudflare-dns.com/dns-query', | |
kV4 = ['i', 'e', 'd'], | |
hV4 = 200 | |
function xV4(I) { | |
return bV4(this, void 0, void 0, function* () { | |
let G = yield I(jV4, { | |
method: 'POST', | |
headers: { 'Content-Type': 'application/dns-message', Accept: 'application/dns-message' }, | |
body: lV4, | |
}) | |
if (!G.ok) { | |
let W = new Error('Failed to fetch TXT records from DNS') | |
throw ((W.name = 'DnsTxtFetchError'), W) | |
} | |
let Z = yield G.arrayBuffer(), | |
d = new Uint8Array(Z) | |
return cV4(d) | |
}) | |
} | |
nz._fetchTxtRecords = xV4 | |
function cV4(I) { | |
let G = I.findIndex( | |
(d, W) => | |
W < hV4 && String.fromCharCode(d) === '=' && kV4.includes(String.fromCharCode(I[W - 1])), | |
) | |
if (G === -1) { | |
let d = new Error('Failed to parse TXT records from DNS') | |
throw ((d.name = 'DnsTxtParseError'), d) | |
} | |
let Z = '' | |
for (let d = G - 1; d < I.length; d++) Z += String.fromCharCode(I[d]) | |
return Z.split(',') | |
} | |
}) | |
var Qb1 = _((uY) => { | |
var Fb1 = | |
(uY && uY.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(uY, '__esModule', { value: !0 }) | |
uY._isDomainFailure = uY.NetworkFallbackResolver = void 0 | |
var pV4 = Hb1(), | |
iV4 = kz(), | |
nV4 = v7(), | |
u41 = sV(), | |
Jb1 = 604800000, | |
aV4 = 14400000 | |
class gb1 { | |
constructor(I) { | |
var G | |
;(this._fallbackInfo = null), | |
(this._errorBoundary = null), | |
(this._dnsQueryCooldowns = {}), | |
(this._networkOverrideFunc = | |
(G = I.networkConfig) === null || G === void 0 ? void 0 : G.networkOverrideFunc) | |
} | |
setErrorBoundary(I) { | |
this._errorBoundary = I | |
} | |
tryBumpExpiryTime(I, G) { | |
var Z | |
let d = (Z = this._fallbackInfo) === null || Z === void 0 ? void 0 : Z[G.endpoint] | |
if (!d) return | |
;(d.expiryTime = Date.now() + Jb1), | |
O41(I, Object.assign(Object.assign({}, this._fallbackInfo), { [G.endpoint]: d })) | |
} | |
getActiveFallbackUrl(I, G) { | |
var Z, d | |
let W = this._fallbackInfo | |
if (W == null) (W = (Z = rV4(I)) !== null && Z !== void 0 ? Z : {}), (this._fallbackInfo = W) | |
let w = W[G.endpoint] | |
if (!w || Date.now() > ((d = w.expiryTime) !== null && d !== void 0 ? d : 0)) | |
return delete W[G.endpoint], (this._fallbackInfo = W), O41(I, this._fallbackInfo), null | |
if (w.url) return w.url | |
return null | |
} | |
getFallbackFromProvided(I) { | |
let G = Kb1(I) | |
if (G) return I.replace(G, '') | |
return null | |
} | |
tryFetchUpdatedFallbackInfo(I, G, Z, d) { | |
var W, w | |
return Fb1(this, void 0, void 0, function* () { | |
try { | |
if (!Nb1(Z, d)) return !1 | |
let C = | |
G.customUrl == null && G.fallbackUrls == null | |
? yield this._tryFetchFallbackUrlsFromNetwork(G) | |
: G.fallbackUrls, | |
V = this._pickNewFallbackUrl( | |
(W = this._fallbackInfo) === null || W === void 0 ? void 0 : W[G.endpoint], | |
C, | |
) | |
if (!V) return !1 | |
return this._updateFallbackInfoWithNewUrl(I, G.endpoint, V), !0 | |
} catch (B) { | |
return ( | |
(w = this._errorBoundary) === null || | |
w === void 0 || | |
w.logError('tryFetchUpdatedFallbackInfo', B), | |
!1 | |
) | |
} | |
}) | |
} | |
_updateFallbackInfoWithNewUrl(I, G, Z) { | |
var d, W, w | |
let B = { url: Z, expiryTime: Date.now() + Jb1, previous: [] }, | |
C = (d = this._fallbackInfo) === null || d === void 0 ? void 0 : d[G] | |
if (C) B.previous.push(...C.previous) | |
if (B.previous.length > 10) B.previous = [] | |
let V = | |
(w = (W = this._fallbackInfo) === null || W === void 0 ? void 0 : W[G]) === null || | |
w === void 0 | |
? void 0 | |
: w.url | |
if (V != null) B.previous.push(V) | |
;(this._fallbackInfo = Object.assign(Object.assign({}, this._fallbackInfo), { [G]: B })), | |
O41(I, this._fallbackInfo) | |
} | |
_tryFetchFallbackUrlsFromNetwork(I) { | |
var G | |
return Fb1(this, void 0, void 0, function* () { | |
let Z = this._dnsQueryCooldowns[I.endpoint] | |
if (Z && Date.now() < Z) return null | |
this._dnsQueryCooldowns[I.endpoint] = Date.now() + aV4 | |
let d = [], | |
W = yield pV4._fetchTxtRecords( | |
(G = this._networkOverrideFunc) !== null && G !== void 0 ? G : fetch, | |
), | |
w = Kb1(I.defaultUrl) | |
for (let B of W) { | |
if (!B.startsWith(I.endpointDnsKey + '=')) continue | |
let C = B.split('=') | |
if (C.length > 1) { | |
let V = C[1] | |
if (V.endsWith('/')) V = V.slice(0, -1) | |
d.push(`https://${V}${w}`) | |
} | |
} | |
return d | |
}) | |
} | |
_pickNewFallbackUrl(I, G) { | |
var Z | |
if (G == null) return null | |
let d = new Set( | |
(Z = I === null || I === void 0 ? void 0 : I.previous) !== null && Z !== void 0 ? Z : [], | |
), | |
W = I === null || I === void 0 ? void 0 : I.url, | |
w = null | |
for (let B of G) { | |
let C = B.endsWith('/') ? B.slice(0, -1) : B | |
if (!d.has(B) && C !== W) { | |
w = C | |
break | |
} | |
} | |
return w | |
} | |
} | |
uY.NetworkFallbackResolver = gb1 | |
function Nb1(I, G) { | |
var Z | |
let d = | |
(Z = I === null || I === void 0 ? void 0 : I.toLowerCase()) !== null && Z !== void 0 ? Z : '' | |
return ( | |
G || | |
d.includes('uncaught exception') || | |
d.includes('failed to fetch') || | |
d.includes('networkerror when attempting to fetch resource') | |
) | |
} | |
uY._isDomainFailure = Nb1 | |
function zb1(I) { | |
return `statsig.network_fallback.${iV4._DJB2(I)}` | |
} | |
function O41(I, G) { | |
let Z = zb1(I) | |
if (!G || Object.keys(G).length === 0) { | |
u41.Storage.removeItem(Z) | |
return | |
} | |
u41.Storage.setItem(Z, JSON.stringify(G)) | |
} | |
function rV4(I) { | |
let G = zb1(I), | |
Z = u41.Storage.getItem(G) | |
if (!Z) return null | |
try { | |
return JSON.parse(Z) | |
} catch (d) { | |
return nV4.Log.error('Failed to parse FallbackInfo'), null | |
} | |
} | |
function Kb1(I) { | |
try { | |
return new URL(I).pathname | |
} catch (G) { | |
return null | |
} | |
} | |
}) | |
var ol = _((Mb1) => { | |
Object.defineProperty(Mb1, '__esModule', { value: !0 }) | |
Mb1.StatsigSession = Mb1.SessionID = void 0 | |
var sV4 = IM(), | |
oV4 = v7(), | |
Ub1 = sV(), | |
fb1 = xl(), | |
Rb1 = 1800000, | |
Eb1 = 14400000, | |
sl = {} | |
Mb1.SessionID = { | |
get: (I) => { | |
return Mb1.StatsigSession.get(I).data.sessionID | |
}, | |
} | |
Mb1.StatsigSession = { | |
get: (I) => { | |
if (sl[I] == null) sl[I] = eV4(I) | |
let G = sl[I] | |
return IA4(G) | |
}, | |
overrideInitialSessionID: (I, G) => { | |
sl[G] = tV4(I, G) | |
}, | |
} | |
function eV4(I) { | |
let G = WA4(I), | |
Z = Date.now() | |
if (!G) G = { sessionID: fb1.getUUID(), startTime: Z, lastUpdate: Z } | |
return { data: G, sdkKey: I } | |
} | |
function tV4(I, G) { | |
let Z = Date.now() | |
return { data: { sessionID: I, startTime: Z, lastUpdate: Z }, sdkKey: G } | |
} | |
function IA4(I) { | |
let G = Date.now(), | |
Z = I.data | |
if (GA4(Z) || ZA4(Z)) (Z.sessionID = fb1.getUUID()), (Z.startTime = G) | |
;(Z.lastUpdate = G), | |
dA4(Z, I.sdkKey), | |
clearTimeout(I.idleTimeoutID), | |
clearTimeout(I.ageTimeoutID) | |
let d = G - Z.startTime, | |
W = I.sdkKey | |
return (I.idleTimeoutID = qb1(W, Rb1)), (I.ageTimeoutID = qb1(W, Eb1 - d)), I | |
} | |
function qb1(I, G) { | |
return setTimeout(() => { | |
let Z = __STATSIG__ === null || __STATSIG__ === void 0 ? void 0 : __STATSIG__.instance(I) | |
if (Z) Z.$emt({ name: 'session_expired' }) | |
}, G) | |
} | |
function GA4({ lastUpdate: I }) { | |
return Date.now() - I > Rb1 | |
} | |
function ZA4({ startTime: I }) { | |
return Date.now() - I > Eb1 | |
} | |
function vb1(I) { | |
return `statsig.session_id.${sV4._getStorageKey(I)}` | |
} | |
function dA4(I, G) { | |
let Z = vb1(G) | |
try { | |
Ub1._setObjectInStorage(Z, I) | |
} catch (d) { | |
oV4.Log.warn('Failed to save SessionID') | |
} | |
} | |
function WA4(I) { | |
let G = vb1(I) | |
return Ub1._getObjectFromStorage(G) | |
} | |
}) | |
var m41 = _((Sb1) => { | |
Object.defineProperty(Sb1, '__esModule', { value: !0 }) | |
Sb1.ErrorTag = void 0 | |
Sb1.ErrorTag = { NetworkError: 'NetworkError' } | |
}) | |
var bb1 = _((rz) => { | |
var az = | |
(rz && rz.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(rz, '__esModule', { value: !0 }) | |
rz.NetworkCore = void 0 | |
VJ() | |
var BA4 = VJ(), | |
b41 = $l(), | |
el = v7(), | |
LB = GM(), | |
CA4 = Qb1(), | |
$b1 = rl(), | |
VA4 = AJ(), | |
yb1 = ol(), | |
AA4 = pl(), | |
XA4 = m41(), | |
Pb1 = wM(), | |
YA4 = kl(), | |
_A4 = 1e4, | |
DA4 = 500, | |
HA4 = 30000, | |
FA4 = 1000, | |
Tb1 = 50, | |
JA4 = Tb1 / FA4, | |
KA4 = new Set([408, 500, 502, 503, 504, 522, 524, 599]) | |
class mb1 { | |
constructor(I, G) { | |
if ( | |
((this._emitter = G), | |
(this._errorBoundary = null), | |
(this._timeout = _A4), | |
(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 CA4.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 az(this, void 0, void 0, function* () { | |
if (!Ob1(I)) return !1 | |
let G = this._getInternalRequestArgs('POST', I), | |
Z = yield this._getPopulatedBody(G, I.data), | |
d = yield this._getPopulatedURL(G), | |
W = navigator | |
return W.sendBeacon.bind(W)(d, Z) | |
}) | |
} | |
post(I) { | |
return az(this, void 0, void 0, function* () { | |
let G = this._getInternalRequestArgs('POST', I) | |
if (((G.body = yield this._getPopulatedBody(G, I.data)), I.isStatsigEncodable)) | |
G.body = this._attemptToEncodeString(G, G.body) | |
return this._sendRequest(G) | |
}) | |
} | |
get(I) { | |
let G = this._getInternalRequestArgs('GET', I) | |
return this._sendRequest(G) | |
} | |
_sendRequest(I) { | |
var G, Z, d, W | |
return az(this, void 0, void 0, function* () { | |
if (!Ob1(I)) return null | |
if (this._netConfig.preventAllNetworkTraffic) return null | |
let { method: w, body: B, retries: C, attempt: V } = I, | |
A = I.urlConfig.endpoint | |
if (this._isRateLimited(A)) | |
return ( | |
el.Log.warn( | |
`Request to ${A} was blocked because you are making requests too frequently.`, | |
), | |
null | |
) | |
let X = V !== null && V !== void 0 ? V : 1, | |
Y = typeof AbortController !== 'undefined' ? new AbortController() : null, | |
H = setTimeout(() => { | |
Y === null || Y === void 0 || Y.abort(`Timeout of ${this._timeout}ms expired.`) | |
}, this._timeout), | |
J = yield this._getPopulatedURL(I), | |
K = null, | |
g = YA4._isUnloading() | |
try { | |
let z = { | |
method: w, | |
body: B, | |
headers: Object.assign({}, I.headers), | |
signal: Y === null || Y === void 0 ? void 0 : Y.signal, | |
priority: I.priority, | |
keepalive: g, | |
} | |
zA4(I, X) | |
let f = this._leakyBucket[A] | |
if (f) (f.lastRequestTime = Date.now()), (this._leakyBucket[A] = f) | |
if ( | |
((K = yield ( | |
(G = this._netConfig.networkOverrideFunc) !== null && G !== void 0 ? G : fetch | |
)(J, z)), | |
clearTimeout(H), | |
!K.ok) | |
) { | |
let L = yield K.text().catch(() => 'No Text'), | |
T = new Error(`NetworkError: ${J} ${L}`) | |
throw ((T.name = 'NetworkError'), T) | |
} | |
let $ = yield K.text() | |
return ( | |
ub1(I, K, X, $), | |
this._fallbackResolver.tryBumpExpiryTime(I.sdkKey, I.urlConfig), | |
{ body: $, code: K.status } | |
) | |
} catch (z) { | |
let f = gA4(Y, z), | |
S = NA4(Y) | |
if ( | |
(ub1(I, K, X, '', z), | |
yield this._fallbackResolver.tryFetchUpdatedFallbackInfo(I.sdkKey, I.urlConfig, f, S)) | |
) | |
I.fallbackUrl = this._fallbackResolver.getActiveFallbackUrl(I.sdkKey, I.urlConfig) | |
if ( | |
!C || | |
X > C || | |
!KA4.has( | |
(Z = K === null || K === void 0 ? void 0 : K.status) !== null && Z !== void 0 | |
? Z | |
: 500, | |
) | |
) { | |
;(d = this._emitter) === null || | |
d === void 0 || | |
d.call(this, { | |
name: 'error', | |
error: z, | |
tag: XA4.ErrorTag.NetworkError, | |
requestArgs: I, | |
}) | |
let L = `A networking error occurred during ${w} request to ${J}.` | |
return ( | |
el.Log.error(L, f, z), | |
(W = this._errorBoundary) === null || W === void 0 || W.attachErrorIfNoneExists(L), | |
null | |
) | |
} | |
return ( | |
yield QA4(X), | |
this._sendRequest(Object.assign(Object.assign({}, I), { retries: C, attempt: X + 1 })) | |
) | |
} | |
}) | |
} | |
_isRateLimited(I) { | |
var G | |
let Z = Date.now(), | |
d = | |
(G = this._leakyBucket[I]) !== null && G !== void 0 | |
? G | |
: { count: 0, lastRequestTime: Z }, | |
W = Z - d.lastRequestTime, | |
w = Math.floor(W * JA4) | |
if (((d.count = Math.max(0, d.count - w)), d.count >= Tb1)) return !0 | |
return (d.count += 1), (d.lastRequestTime = Z), (this._leakyBucket[I] = d), !1 | |
} | |
_getPopulatedURL(I) { | |
var G | |
return az(this, void 0, void 0, function* () { | |
let Z = (G = I.fallbackUrl) !== null && G !== void 0 ? G : I.urlConfig.getUrl() | |
if ( | |
I.urlConfig.endpoint === LB.Endpoint._initialize || | |
I.urlConfig.endpoint === LB.Endpoint._download_config_specs | |
) | |
this._lastUsedInitUrl = Z | |
let d = Object.assign( | |
{ | |
[LB.NetworkParam.SdkKey]: I.sdkKey, | |
[LB.NetworkParam.SdkType]: $b1.SDKType._get(I.sdkKey), | |
[LB.NetworkParam.SdkVersion]: Pb1.SDK_VERSION, | |
[LB.NetworkParam.Time]: String(Date.now()), | |
[LB.NetworkParam.SessionID]: yb1.SessionID.get(I.sdkKey), | |
}, | |
I.params, | |
), | |
W = Object.keys(d) | |
.map((w) => { | |
return `${encodeURIComponent(w)}=${encodeURIComponent(d[w])}` | |
}) | |
.join('&') | |
return `${Z}${W ? `?${W}` : ''}` | |
}) | |
} | |
_getPopulatedBody(I, G) { | |
return az(this, void 0, void 0, function* () { | |
let { sdkKey: Z, fallbackUrl: d } = I, | |
W = AA4.StableID.get(Z), | |
w = yb1.SessionID.get(Z), | |
B = $b1.SDKType._get(Z) | |
return JSON.stringify( | |
Object.assign(Object.assign({}, G), { | |
statsigMetadata: Object.assign(Object.assign({}, Pb1.StatsigMetadataProvider.get()), { | |
stableID: W, | |
sessionID: w, | |
sdkType: B, | |
fallbackUrl: d, | |
}), | |
}), | |
) | |
}) | |
} | |
_attemptToEncodeString(I, G) { | |
var Z, d | |
let W = VA4._getWindowSafe() | |
if ( | |
this._options.disableStatsigEncoding || | |
BA4._getStatsigGlobalFlag('no-encode') != null || | |
!(W === null || W === void 0 ? void 0 : W.btoa) | |
) | |
return G | |
try { | |
let w = (Z = W.btoa(G).split('').reverse().join('')) !== null && Z !== void 0 ? Z : G | |
return ( | |
(I.params = Object.assign( | |
Object.assign({}, (d = I.params) !== null && d !== void 0 ? d : {}), | |
{ [LB.NetworkParam.StatsigEncoded]: '1' }, | |
)), | |
w | |
) | |
} catch (w) { | |
return el.Log.warn(`Request encoding failed for ${I.urlConfig.getUrl()}`), G | |
} | |
} | |
_getInternalRequestArgs(I, G) { | |
let Z = this._fallbackResolver.getActiveFallbackUrl(G.sdkKey, G.urlConfig) | |
return Object.assign(Object.assign({}, G), { method: I, fallbackUrl: Z }) | |
} | |
} | |
rz.NetworkCore = mb1 | |
var Ob1 = (I) => { | |
if (!I.sdkKey) return el.Log.warn('Unable to make request without an SDK key'), !1 | |
return !0 | |
} | |
function gA4(I, G) { | |
if ( | |
(I === null || I === void 0 ? void 0 : I.signal.aborted) && | |
typeof I.signal.reason === 'string' | |
) | |
return I.signal.reason | |
if (typeof G === 'string') return G | |
if (G instanceof Error) return `${G.name}: ${G.message}` | |
return 'Unknown Error' | |
} | |
function NA4(I) { | |
return ( | |
((I === null || I === void 0 ? void 0 : I.signal.aborted) && | |
typeof I.signal.reason === 'string' && | |
I.signal.reason.includes('Timeout')) || | |
!1 | |
) | |
} | |
function zA4(I, G) { | |
if (I.urlConfig.endpoint !== LB.Endpoint._initialize) return | |
b41.Diagnostics._markInitNetworkReqStart(I.sdkKey, { attempt: G }) | |
} | |
function ub1(I, G, Z, d, W) { | |
if (I.urlConfig.endpoint !== LB.Endpoint._initialize) return | |
b41.Diagnostics._markInitNetworkReqEnd( | |
I.sdkKey, | |
b41.Diagnostics._getDiagnosticsData(G, Z, d, W), | |
) | |
} | |
function QA4(I) { | |
return az(this, void 0, void 0, function* () { | |
yield new Promise((G) => setTimeout(G, Math.min(DA4 * (I * I), HA4))) | |
}) | |
} | |
}) | |
var jb1 = _((lb1) => { | |
Object.defineProperty(lb1, '__esModule', { value: !0 }) | |
}) | |
var hb1 = _((kb1) => { | |
Object.defineProperty(kb1, '__esModule', { value: !0 }) | |
}) | |
var cb1 = _((sz) => { | |
var qA4 = | |
(sz && sz.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(sz, '__esModule', { value: !0 }) | |
sz.StatsigClientBase = void 0 | |
VJ() | |
var UA4 = VJ(), | |
fA4 = y41(), | |
RA4 = v41(), | |
l41 = v7(), | |
EA4 = P41(), | |
vA4 = AJ(), | |
MA4 = ol(), | |
tl = sV(), | |
SA4 = 3000 | |
class xb1 { | |
constructor(I, G, Z, d) { | |
var W | |
;(this.loadingStatus = 'Uninitialized'), | |
(this._initializePromise = null), | |
(this._listeners = {}) | |
let w = this.$emt.bind(this) | |
;(d === null || d === void 0 ? void 0 : d.logLevel) != null && (l41.Log.level = d.logLevel), | |
(d === null || d === void 0 ? void 0 : d.disableStorage) && tl.Storage._setDisabled(!0), | |
(d === null || d === void 0 ? void 0 : d.initialSessionID) && | |
MA4.StatsigSession.overrideInitialSessionID(d.initialSessionID, I), | |
(d === null || d === void 0 ? void 0 : d.storageProvider) && | |
tl.Storage._setProvider(d.storageProvider), | |
(this._sdkKey = I), | |
(this._options = d !== null && d !== void 0 ? d : {}), | |
(this._memoCache = {}), | |
(this.overrideAdapter = | |
(W = d === null || d === void 0 ? void 0 : d.overrideAdapter) !== null && W !== void 0 | |
? W | |
: null), | |
(this._logger = new RA4.EventLogger(I, w, Z, d)), | |
(this._errorBoundary = new fA4.ErrorBoundary(I, d, w)), | |
this._errorBoundary.wrap(this), | |
this._errorBoundary.wrap(G), | |
this._errorBoundary.wrap(this._logger), | |
Z.setErrorBoundary(this._errorBoundary), | |
(this.dataAdapter = G), | |
this.dataAdapter.attach(I, d), | |
(this.storageProvider = tl.Storage), | |
this._primeReadyRipcord(), | |
LA4(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), tl.Storage._setDisabled(I.disableStorage) | |
} | |
flush() { | |
return this._logger.flush() | |
} | |
shutdown() { | |
return qA4(this, void 0, void 0, function* () { | |
this.$emt({ name: 'pre_shutdown' }), | |
this._setStatus('Uninitialized', null), | |
(this._initializePromise = null), | |
yield this._logger.stop() | |
}) | |
} | |
on(I, G) { | |
if (!this._listeners[I]) this._listeners[I] = [] | |
this._listeners[I].push(G) | |
} | |
off(I, G) { | |
if (this._listeners[I]) { | |
let Z = this._listeners[I].indexOf(G) | |
if (Z !== -1) this._listeners[I].splice(Z, 1) | |
} | |
} | |
$on(I, G) { | |
;(G.__isInternal = !0), this.on(I, G) | |
} | |
$emt(I) { | |
var G | |
let Z = (d) => { | |
try { | |
d(I) | |
} catch (W) { | |
if (d.__isInternal === !0) { | |
this._errorBoundary.logError(`__emit:${I.name}`, W) | |
return | |
} | |
l41.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((d) => Z(d)) | |
;(G = this._listeners['*']) === null || G === void 0 || G.forEach(Z) | |
} | |
_setStatus(I, G) { | |
;(this.loadingStatus = I), | |
(this._memoCache = {}), | |
this.$emt({ name: 'values_updated', status: I, values: G }) | |
} | |
_enqueueExposure(I, G, Z) { | |
if ((Z === null || Z === void 0 ? void 0 : Z.disableExposureLog) === !0) { | |
this._logger.incrementNonExposureCount(I) | |
return | |
} | |
this._logger.enqueue(G) | |
} | |
_memoize(I, G) { | |
return (Z, d) => { | |
if (this._options.disableEvaluationMemoization) return G(Z, d) | |
let W = EA4.createMemoKey(I, Z, d) | |
if (!W) return G(Z, d) | |
if (!(W in this._memoCache)) { | |
if (Object.keys(this._memoCache).length >= SA4) this._memoCache = {} | |
this._memoCache[W] = G(Z, d) | |
} | |
return this._memoCache[W] | |
} | |
} | |
} | |
sz.StatsigClientBase = xb1 | |
function LA4(I, G) { | |
var Z | |
if (vA4._isServerEnv()) return | |
let d = UA4._getStatsigGlobal(), | |
W = (Z = d.instances) !== null && Z !== void 0 ? Z : {}, | |
w = G | |
if (W[I] != null) | |
l41.Log.warn( | |
'Creating multiple Statsig clients with the same SDK key can lead to unexpected behavior. Multi-instance support requires different SDK keys.', | |
) | |
if (((W[I] = w), !d.firstInstance)) d.firstInstance = w | |
;(d.instances = W), (__STATSIG__ = d) | |
} | |
}) | |
var nb1 = _((pb1) => { | |
Object.defineProperty(pb1, '__esModule', { value: !0 }) | |
pb1.DataAdapterCachePrefix = void 0 | |
pb1.DataAdapterCachePrefix = 'statsig.cached' | |
}) | |
var rb1 = _((ab1) => { | |
Object.defineProperty(ab1, '__esModule', { value: !0 }) | |
}) | |
var ob1 = _((sb1) => { | |
Object.defineProperty(sb1, '__esModule', { value: !0 }) | |
}) | |
var Gl1 = _((tb1) => { | |
Object.defineProperty(tb1, '__esModule', { value: !0 }) | |
tb1._makeTypedGet = | |
tb1._mergeOverride = | |
tb1._makeLayer = | |
tb1._makeExperiment = | |
tb1._makeDynamicConfig = | |
tb1._makeFeatureGate = | |
void 0 | |
var $A4 = v7(), | |
yA4 = yl(), | |
PA4 = 'default' | |
function j41(I, G, Z, d) { | |
var W | |
return { | |
name: I, | |
details: G, | |
ruleID: | |
(W = Z === null || Z === void 0 ? void 0 : Z.rule_id) !== null && W !== void 0 ? W : PA4, | |
__evaluation: Z, | |
value: d, | |
} | |
} | |
function OA4(I, G, Z) { | |
return j41(I, G, Z, (Z === null || Z === void 0 ? void 0 : Z.value) === !0) | |
} | |
tb1._makeFeatureGate = OA4 | |
function eb1(I, G, Z) { | |
var d | |
let W = (d = Z === null || Z === void 0 ? void 0 : Z.value) !== null && d !== void 0 ? d : {} | |
return Object.assign(Object.assign({}, j41(I, G, Z, W)), { | |
get: Ij(I, Z === null || Z === void 0 ? void 0 : Z.value), | |
}) | |
} | |
tb1._makeDynamicConfig = eb1 | |
function uA4(I, G, Z) { | |
var d | |
let W = eb1(I, G, Z) | |
return Object.assign(Object.assign({}, W), { | |
groupName: | |
(d = Z === null || Z === void 0 ? void 0 : Z.group_name) !== null && d !== void 0 | |
? d | |
: null, | |
}) | |
} | |
tb1._makeExperiment = uA4 | |
function TA4(I, G, Z, d) { | |
var W, w | |
return Object.assign(Object.assign({}, j41(I, G, Z, void 0)), { | |
get: Ij(I, Z === null || Z === void 0 ? void 0 : Z.value, d), | |
groupName: | |
(W = Z === null || Z === void 0 ? void 0 : Z.group_name) !== null && W !== void 0 | |
? W | |
: null, | |
__value: | |
(w = Z === null || Z === void 0 ? void 0 : Z.value) !== null && w !== void 0 ? w : {}, | |
}) | |
} | |
tb1._makeLayer = TA4 | |
function mA4(I, G, Z, d) { | |
return Object.assign(Object.assign(Object.assign({}, I), G), { get: Ij(I.name, Z, d) }) | |
} | |
tb1._mergeOverride = mA4 | |
function Ij(I, G, Z) { | |
return (d, W) => { | |
var w | |
let B = (w = G === null || G === void 0 ? void 0 : G[d]) !== null && w !== void 0 ? w : null | |
if (B == null) return W !== null && W !== void 0 ? W : null | |
if (W != null && !yA4._isTypeMatch(B, W)) | |
return ( | |
$A4.Log.warn( | |
`Parameter type mismatch. '${I}.${d}' was found to be type '${typeof B}' but fallback/return type is '${typeof W}'. See https://docs.statsig.com/client/javascript-sdk/#typed-getters`, | |
), | |
W !== null && W !== void 0 ? W : null | |
) | |
return Z === null || Z === void 0 || Z(d), B | |
} | |
} | |
tb1._makeTypedGet = Ij | |
}) | |
var dl1 = _((Zl1) => { | |
Object.defineProperty(Zl1, '__esModule', { value: !0 }) | |
}) | |
var Bl1 = _((Wl1) => { | |
Object.defineProperty(Wl1, '__esModule', { value: !0 }) | |
Wl1.UPDATE_DETAIL_ERROR_MESSAGES = Wl1.createUpdateDetails = void 0 | |
var xA4 = (I, G, Z, d, W, w) => { | |
return { duration: Z, source: G, success: I, error: d, sourceUrl: W, warnings: w } | |
} | |
Wl1.createUpdateDetails = xA4 | |
Wl1.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 Xl1 = _((Vl1) => { | |
Object.defineProperty(Vl1, '__esModule', { value: !0 }) | |
Vl1.SDKFlags = void 0 | |
var Cl1 = {} | |
Vl1.SDKFlags = { | |
setFlags: (I, G) => { | |
Cl1[I] = G | |
}, | |
get: (I, G) => { | |
var Z, d | |
return (d = (Z = Cl1[I]) === null || Z === void 0 ? void 0 : Z[G]) !== null && d !== void 0 | |
? d | |
: !1 | |
}, | |
} | |
}) | |
var TY = _((n2) => { | |
var pA4 = | |
(n2 && n2.__createBinding) || | |
(Object.create | |
? function (I, G, Z, d) { | |
if (d === void 0) d = Z | |
var W = Object.getOwnPropertyDescriptor(G, Z) | |
if (!W || ('get' in W ? !G.__esModule : W.writable || W.configurable)) | |
W = { | |
enumerable: !0, | |
get: function () { | |
return G[Z] | |
}, | |
} | |
Object.defineProperty(I, d, W) | |
} | |
: function (I, G, Z, d) { | |
if (d === void 0) d = Z | |
I[d] = G[Z] | |
}), | |
x4 = | |
(n2 && n2.__exportStar) || | |
function (I, G) { | |
for (var Z in I) | |
if (Z !== 'default' && !Object.prototype.hasOwnProperty.call(G, Z)) pA4(G, I, Z) | |
} | |
Object.defineProperty(n2, '__esModule', { value: !0 }) | |
n2.Storage = n2.Log = n2.EventLogger = n2.Diagnostics = void 0 | |
VJ() | |
var iA4 = $l() | |
Object.defineProperty(n2, 'Diagnostics', { | |
enumerable: !0, | |
get: function () { | |
return iA4.Diagnostics | |
}, | |
}) | |
var nA4 = v41() | |
Object.defineProperty(n2, 'EventLogger', { | |
enumerable: !0, | |
get: function () { | |
return nA4.EventLogger | |
}, | |
}) | |
var Yl1 = v7() | |
Object.defineProperty(n2, 'Log', { | |
enumerable: !0, | |
get: function () { | |
return Yl1.Log | |
}, | |
}) | |
var aA4 = wM(), | |
rA4 = sV() | |
Object.defineProperty(n2, 'Storage', { | |
enumerable: !0, | |
get: function () { | |
return rA4.Storage | |
}, | |
}) | |
x4(VJ(), n2) | |
x4(IM(), n2) | |
x4(Om1(), n2) | |
x4(om1(), n2) | |
x4($l(), n2) | |
x4(tm1(), n2) | |
x4(y41(), n2) | |
x4(Cb1(), n2) | |
x4(Ab1(), n2) | |
x4(kz(), n2) | |
x4(Yb1(), n2) | |
x4(v7(), n2) | |
x4(P41(), n2) | |
x4(GM(), n2) | |
x4(bb1(), n2) | |
x4(jb1(), n2) | |
x4(hb1(), n2) | |
x4(AJ(), n2) | |
x4(rl(), n2) | |
x4(ol(), n2) | |
x4(pl(), n2) | |
x4(cb1(), n2) | |
x4(m41(), n2) | |
x4(nb1(), n2) | |
x4(N41(), n2) | |
x4(wM(), n2) | |
x4(rb1(), n2) | |
x4(ob1(), n2) | |
x4(Gl1(), n2) | |
x4(dl1(), n2) | |
x4(S41(), n2) | |
x4(sV(), n2) | |
x4(L41(), n2) | |
x4(yl(), n2) | |
x4(q41(), n2) | |
x4(xl(), n2) | |
x4(kl(), n2) | |
x4(Bl1(), n2) | |
x4(Xl1(), n2) | |
__STATSIG__ = Object.assign( | |
Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), | |
{ Log: Yl1.Log, SDK_VERSION: aA4.SDK_VERSION }, | |
) | |
}) | |
var Hl1 = _((Dl1) => { | |
Object.defineProperty(Dl1, '__esModule', { value: !0 }) | |
var mY = TY() | |
class _l1 { | |
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 | |
? mY._typedJsonParse(this._rawValues, 'has_updates', 'EvaluationStoreValues') | |
: null | |
} | |
setValues(I, G) { | |
if (!I) return !1 | |
let Z = mY._typedJsonParse(I.data, 'has_updates', 'EvaluationResponse') | |
if (Z == null) return !1 | |
if (((this._source = I.source), (Z === null || Z === void 0 ? void 0 : Z.has_updates) !== !0)) | |
return !0 | |
if ( | |
((this._rawValues = I.data), | |
(this._lcut = Z.time), | |
(this._receivedAt = I.receivedAt), | |
(this._values = Z), | |
(this._bootstrapMetadata = this._extractBootstrapMetadata(I.source, Z)), | |
I.source && Z.user) | |
) | |
this._setWarningState(G, Z) | |
if (Z.sdk_flags) mY.SDKFlags.setFlags(this._sdkKey, Z.sdk_flags) | |
else mY.SDKFlags.setFlags(this._sdkKey, {}) | |
return !0 | |
} | |
getWarnings() { | |
if (this._warnings.size === 0) return | |
return Array.from(this._warnings) | |
} | |
getGate(I) { | |
var G | |
return this._getDetailedStoreResult( | |
(G = this._values) === null || G === void 0 ? void 0 : G.feature_gates, | |
I, | |
) | |
} | |
getConfig(I) { | |
var G | |
return this._getDetailedStoreResult( | |
(G = this._values) === null || G === void 0 ? void 0 : G.dynamic_configs, | |
I, | |
) | |
} | |
getLayer(I) { | |
var G | |
return this._getDetailedStoreResult( | |
(G = this._values) === null || G === void 0 ? void 0 : G.layer_configs, | |
I, | |
) | |
} | |
getParamStore(I) { | |
var G | |
return this._getDetailedStoreResult( | |
(G = this._values) === null || G === void 0 ? void 0 : G.param_stores, | |
I, | |
) | |
} | |
getSource() { | |
return this._source | |
} | |
_extractBootstrapMetadata(I, G) { | |
if (I !== 'Bootstrap') return null | |
let Z = {} | |
if (G.user) Z.user = G.user | |
if (G.sdkInfo) Z.generatorSDKInfo = G.sdkInfo | |
return (Z.lcut = G.time), Z | |
} | |
_getDetailedStoreResult(I, G) { | |
let Z = null | |
if (I) Z = I[G] ? I[G] : I[mY._DJB2(G)] | |
return { result: Z, details: this._getDetails(Z == null) } | |
} | |
_setWarningState(I, G) { | |
var Z | |
let d = mY.StableID.get(this._sdkKey) | |
if (((Z = I.customIDs) === null || Z === void 0 ? void 0 : Z.stableID) !== d) { | |
this._warnings.add('StableIDMismatch') | |
return | |
} | |
if ('user' in G) { | |
let W = G.user | |
if (mY._getFullUserHash(I) !== mY._getFullUserHash(W)) | |
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 G, Z | |
let d = this.getCurrentSourceDetails(), | |
W = d.reason, | |
w = (G = d.warnings) !== null && G !== void 0 ? G : [] | |
if (this._source === 'Bootstrap' && w.length > 0) W = W + w[0] | |
if (W !== 'Uninitialized' && W !== 'NoValues') W = `${W}:${I ? 'Unrecognized' : 'Recognized'}` | |
let B = | |
this._source === 'Bootstrap' | |
? (Z = this._bootstrapMetadata) !== null && Z !== void 0 | |
? Z | |
: void 0 | |
: void 0 | |
if (B) d.bootstrapMetadata = B | |
return Object.assign(Object.assign({}, d), { reason: W }) | |
} | |
} | |
Dl1.default = _l1 | |
}) | |
var gl1 = _((Jl1) => { | |
Object.defineProperty(Jl1, '__esModule', { value: !0 }) | |
Jl1._resolveDeltasResponse = void 0 | |
var Fl1 = TY(), | |
oA4 = 2 | |
function eA4(I, G) { | |
let Z = Fl1._typedJsonParse(G, 'checksum', 'DeltasEvaluationResponse') | |
if (!Z) return { hadBadDeltaChecksum: !0 } | |
let d = tA4(I, Z), | |
W = IX4(d), | |
w = Fl1._DJB2Object( | |
{ | |
feature_gates: W.feature_gates, | |
dynamic_configs: W.dynamic_configs, | |
layer_configs: W.layer_configs, | |
}, | |
oA4, | |
) | |
if (w !== Z.checksumV2) | |
return { | |
hadBadDeltaChecksum: !0, | |
badChecksum: w, | |
badMergedConfigs: W, | |
badFullResponse: Z.deltas_full_response, | |
} | |
return JSON.stringify(W) | |
} | |
Jl1._resolveDeltasResponse = eA4 | |
function tA4(I, G) { | |
return Object.assign(Object.assign(Object.assign({}, I), G), { | |
feature_gates: Object.assign(Object.assign({}, I.feature_gates), G.feature_gates), | |
layer_configs: Object.assign(Object.assign({}, I.layer_configs), G.layer_configs), | |
dynamic_configs: Object.assign(Object.assign({}, I.dynamic_configs), G.dynamic_configs), | |
}) | |
} | |
function IX4(I) { | |
let G = I | |
return ( | |
k41(I.deleted_gates, G.feature_gates), | |
delete G.deleted_gates, | |
k41(I.deleted_configs, G.dynamic_configs), | |
delete G.deleted_configs, | |
k41(I.deleted_layers, G.layer_configs), | |
delete G.deleted_layers, | |
G | |
) | |
} | |
function k41(I, G) { | |
I === null || | |
I === void 0 || | |
I.forEach((Z) => { | |
delete G[Z] | |
}) | |
} | |
}) | |
var h41 = _((BM) => { | |
var Nl1 = | |
(BM && BM.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(BM, '__esModule', { value: !0 }) | |
var Gj = TY(), | |
GX4 = gl1() | |
class zl1 extends Gj.NetworkCore { | |
constructor(I, G) { | |
super(I, G) | |
let Z = I === null || I === void 0 ? void 0 : I.networkConfig | |
this._initializeUrlConfig = new Gj.UrlConfiguration( | |
Gj.Endpoint._initialize, | |
Z === null || Z === void 0 ? void 0 : Z.initializeUrl, | |
Z === null || Z === void 0 ? void 0 : Z.api, | |
Z === null || Z === void 0 ? void 0 : Z.initializeFallbackUrls, | |
) | |
} | |
fetchEvaluations(I, G, Z, d) { | |
return Nl1(this, void 0, void 0, function* () { | |
let W = G ? Gj._typedJsonParse(G, 'has_updates', 'InitializeResponse') : null, | |
w = { user: d, hash: 'djb2', deltasResponseRequested: !1, full_checksum: null } | |
if (W === null || W === void 0 ? void 0 : W.has_updates) | |
w = Object.assign(Object.assign({}, w), { | |
sinceTime: W.time, | |
previousDerivedFields: 'derived_fields' in W ? W.derived_fields : {}, | |
deltasResponseRequested: !0, | |
full_checksum: W.full_checksum, | |
}) | |
return this._fetchEvaluations(I, W, w, Z) | |
}) | |
} | |
_fetchEvaluations(I, G, Z, d) { | |
var W, w | |
return Nl1(this, void 0, void 0, function* () { | |
let B = yield this.post({ | |
sdkKey: I, | |
urlConfig: this._initializeUrlConfig, | |
data: Z, | |
retries: 2, | |
isStatsigEncodable: !0, | |
priority: d, | |
}) | |
if ((B === null || B === void 0 ? void 0 : B.code) === 204) return '{"has_updates": false}' | |
if ((B === null || B === void 0 ? void 0 : B.code) !== 200) | |
return (W = B === null || B === void 0 ? void 0 : B.body) !== null && W !== void 0 | |
? W | |
: null | |
if ( | |
(G === null || G === void 0 ? void 0 : G.has_updates) !== !0 || | |
((w = B.body) === null || w === void 0 ? void 0 : w.includes('"is_delta":true')) !== !0 || | |
Z.deltasResponseRequested !== !0 | |
) | |
return B.body | |
let C = GX4._resolveDeltasResponse(G, B.body) | |
if (typeof C === 'string') return C | |
return this._fetchEvaluations( | |
I, | |
G, | |
Object.assign(Object.assign(Object.assign({}, Z), C), { deltasResponseRequested: !1 }), | |
d, | |
) | |
}) | |
} | |
} | |
BM.default = zl1 | |
}) | |
var fl1 = _((ql1) => { | |
Object.defineProperty(ql1, '__esModule', { value: !0 }) | |
ql1._makeParamStoreGetter = void 0 | |
var Ql1 = TY(), | |
Zj = { disableExposureLog: !0 } | |
function dj(I) { | |
return I == null || I.disableExposureLog === !1 | |
} | |
function x41(I, G) { | |
return G != null && !Ql1._isTypeMatch(I, G) | |
} | |
function ZX4(I, G) { | |
return I.value | |
} | |
function dX4(I, G, Z) { | |
if (I.getFeatureGate(G.gate_name, dj(Z) ? void 0 : Zj).value) return G.pass_value | |
return G.fail_value | |
} | |
function WX4(I, G, Z, d) { | |
let w = I.getDynamicConfig(G.config_name, Zj).get(G.param_name) | |
if (x41(w, Z)) return Z | |
if (dj(d)) I.getDynamicConfig(G.config_name) | |
return w | |
} | |
function wX4(I, G, Z, d) { | |
let w = I.getExperiment(G.experiment_name, Zj).get(G.param_name) | |
if (x41(w, Z)) return Z | |
if (dj(d)) I.getExperiment(G.experiment_name) | |
return w | |
} | |
function BX4(I, G, Z, d) { | |
let w = I.getLayer(G.layer_name, Zj).get(G.param_name) | |
if (x41(w, Z)) return Z | |
if (dj(d)) I.getLayer(G.layer_name).get(G.param_name) | |
return w | |
} | |
function CX4(I, G, Z) { | |
return (d, W) => { | |
if (G == null) return W | |
let w = G[d] | |
if (w == null || (W != null && Ql1._typeOf(W) !== w.param_type)) return W | |
switch (w.ref_type) { | |
case 'static': | |
return ZX4(w, Z) | |
case 'gate': | |
return dX4(I, w, Z) | |
case 'dynamic_config': | |
return WX4(I, w, W, Z) | |
case 'experiment': | |
return wX4(I, w, W, Z) | |
case 'layer': | |
return BX4(I, w, W, Z) | |
default: | |
return W | |
} | |
} | |
} | |
ql1._makeParamStoreGetter = CX4 | |
}) | |
var El1 = _((oz) => { | |
var VX4 = | |
(oz && oz.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(oz, '__esModule', { value: !0 }) | |
oz.StatsigEvaluationsDataAdapter = void 0 | |
var YJ = TY(), | |
AX4 = h41() | |
class Rl1 extends YJ.DataAdapterCore { | |
constructor() { | |
super('EvaluationsDataAdapter', 'evaluations') | |
;(this._network = null), (this._options = null) | |
} | |
attach(I, G) { | |
super.attach(I, G), (this._network = new AX4.default(G !== null && G !== void 0 ? G : {})) | |
} | |
getDataAsync(I, G, Z) { | |
return this._getDataAsyncImpl(I, YJ._normalizeUser(G, this._options), Z) | |
} | |
prefetchData(I, G) { | |
return this._prefetchDataImpl(I, G) | |
} | |
setData(I) { | |
let G = YJ._typedJsonParse(I, 'has_updates', 'data') | |
if (G && 'user' in G) super.setData(I, G.user) | |
else | |
YJ.Log.error( | |
'StatsigUser not found. You may be using an older server SDK version. Please upgrade your SDK or use setDataLegacy.', | |
) | |
} | |
setDataLegacy(I, G) { | |
super.setData(I, G) | |
} | |
_fetchFromNetwork(I, G, Z) { | |
var d | |
return VX4(this, void 0, void 0, function* () { | |
let W = yield (d = this._network) === null || d === void 0 | |
? void 0 | |
: d.fetchEvaluations( | |
this._getSdkKey(), | |
I, | |
Z === null || Z === void 0 ? void 0 : Z.priority, | |
G, | |
) | |
return W !== null && W !== void 0 ? W : null | |
}) | |
} | |
_getCacheKey(I) { | |
var G | |
let Z = YJ._getStorageKey( | |
this._getSdkKey(), | |
I, | |
(G = this._options) === null || G === void 0 ? void 0 : G.customUserCacheKeyFunc, | |
) | |
return `${YJ.DataAdapterCachePrefix}.${this._cacheSuffix}.${Z}` | |
} | |
_isCachedResultValidFor204(I, G) { | |
return I.fullUserHash != null && I.fullUserHash === YJ._getFullUserHash(G) | |
} | |
} | |
oz.StatsigEvaluationsDataAdapter = Rl1 | |
}) | |
var vl1 = _((CM) => { | |
var c41 = | |
(CM && CM.__awaiter) || | |
function (I, G, Z, d) { | |
function W(w) { | |
return w instanceof Z | |
? w | |
: new Z(function (B) { | |
B(w) | |
}) | |
} | |
return new (Z || (Z = Promise))(function (w, B) { | |
function C(X) { | |
try { | |
A(d.next(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function V(X) { | |
try { | |
A(d.throw(X)) | |
} catch (Y) { | |
B(Y) | |
} | |
} | |
function A(X) { | |
X.done ? w(X.value) : W(X.value).then(C, V) | |
} | |
A((d = d.apply(I, G || [])).next()) | |
}) | |
} | |
Object.defineProperty(CM, '__esModule', { value: !0 }) | |
var t4 = TY(), | |
XX4 = Hl1(), | |
YX4 = h41(), | |
_X4 = fl1(), | |
DX4 = El1() | |
class Wj extends t4.StatsigClientBase { | |
static instance(I) { | |
let G = t4._getStatsigGlobal().instance(I) | |
if (G instanceof Wj) return G | |
return ( | |
t4.Log.warn( | |
t4._isServerEnv() | |
? 'StatsigClient.instance is not supported in server environments' | |
: 'Unable to find StatsigClient instance', | |
), | |
new Wj(I !== null && I !== void 0 ? I : '', {}) | |
) | |
} | |
constructor(I, G, Z = null) { | |
var d, W | |
t4.SDKType._setClientType(I, 'javascript-client') | |
let w = new YX4.default(Z, (C) => { | |
this.$emt(C) | |
}) | |
super( | |
I, | |
(d = Z === null || Z === void 0 ? void 0 : Z.dataAdapter) !== null && d !== void 0 | |
? d | |
: new DX4.StatsigEvaluationsDataAdapter(), | |
w, | |
Z, | |
) | |
;(this.getFeatureGate = this._memoize( | |
t4.MemoPrefix._gate, | |
this._getFeatureGateImpl.bind(this), | |
)), | |
(this.getDynamicConfig = this._memoize( | |
t4.MemoPrefix._dynamicConfig, | |
this._getDynamicConfigImpl.bind(this), | |
)), | |
(this.getExperiment = this._memoize( | |
t4.MemoPrefix._experiment, | |
this._getExperimentImpl.bind(this), | |
)), | |
(this.getLayer = this._memoize(t4.MemoPrefix._layer, this._getLayerImpl.bind(this))), | |
(this.getParameterStore = this._memoize( | |
t4.MemoPrefix._paramStore, | |
this._getParameterStoreImpl.bind(this), | |
)), | |
(this._store = new XX4.default(I)), | |
(this._network = w), | |
(this._user = this._configureUser(G, Z)) | |
let B = | |
(W = Z === null || Z === void 0 ? void 0 : Z.plugins) !== null && W !== void 0 ? W : [] | |
for (let C of B) C.bind(this) | |
} | |
initializeSync(I) { | |
var G | |
if (this.loadingStatus !== 'Uninitialized') | |
return t4.createUpdateDetails(!0, this._store.getSource(), -1, null, null, [ | |
'MultipleInitializations', | |
...((G = this._store.getWarnings()) !== null && G !== void 0 ? G : []), | |
]) | |
return this._logger.start(), this.updateUserSync(this._user, I) | |
} | |
initializeAsync(I) { | |
return c41(this, void 0, void 0, function* () { | |
if (this._initializePromise) return this._initializePromise | |
return (this._initializePromise = this._initializeAsyncImpl(I)), this._initializePromise | |
}) | |
} | |
updateUserSync(I, G) { | |
var Z | |
let d = performance.now(), | |
W = [...((Z = this._store.getWarnings()) !== null && Z !== void 0 ? Z : [])] | |
this._resetForUser(I) | |
let w = this.dataAdapter.getDataSync(this._user) | |
if (w == null) W.push('NoCachedValues') | |
this._store.setValues(w, this._user), this._finalizeUpdate(w) | |
let B = G === null || G === void 0 ? void 0 : G.disableBackgroundCacheRefresh | |
if ( | |
B === !0 || | |
(B == null && (w === null || w === void 0 ? void 0 : w.source) === 'Bootstrap') | |
) | |
return t4.createUpdateDetails( | |
!0, | |
this._store.getSource(), | |
performance.now() - d, | |
this._errorBoundary.getLastSeenErrorAndReset(), | |
this._network.getLastUsedInitUrlAndReset(), | |
W, | |
) | |
return ( | |
this._runPostUpdate(w !== null && w !== void 0 ? w : null, this._user), | |
t4.createUpdateDetails( | |
!0, | |
this._store.getSource(), | |
performance.now() - d, | |
this._errorBoundary.getLastSeenErrorAndReset(), | |
this._network.getLastUsedInitUrlAndReset(), | |
W, | |
) | |
) | |
} | |
updateUserAsync(I, G) { | |
return c41(this, void 0, void 0, function* () { | |
this._resetForUser(I) | |
let Z = this._user | |
t4.Diagnostics._markInitOverallStart(this._sdkKey) | |
let d = this.dataAdapter.getDataSync(Z) | |
if ( | |
(this._store.setValues(d, this._user), | |
this._setStatus('Loading', d), | |
(d = yield this.dataAdapter.getDataAsync(d, Z, G)), | |
Z !== this._user) | |
) | |
return t4.createUpdateDetails( | |
!1, | |
this._store.getSource(), | |
-1, | |
new Error('User changed during update'), | |
this._network.getLastUsedInitUrlAndReset(), | |
) | |
let W = !1 | |
if (d != null) | |
t4.Diagnostics._markInitProcessStart(this._sdkKey), | |
(W = this._store.setValues(d, this._user)), | |
t4.Diagnostics._markInitProcessEnd(this._sdkKey, { success: W }) | |
if ((this._finalizeUpdate(d), !W)) | |
this._errorBoundary.attachErrorIfNoneExists( | |
t4.UPDATE_DETAIL_ERROR_MESSAGES.NO_NETWORK_DATA, | |
), | |
this.$emt({ name: 'initialization_failure' }) | |
t4.Diagnostics._markInitOverallEnd(this._sdkKey, W, this._store.getCurrentSourceDetails()) | |
let w = t4.Diagnostics._enqueueDiagnosticsEvent( | |
this._user, | |
this._logger, | |
this._sdkKey, | |
this._options, | |
) | |
return t4.createUpdateDetails( | |
W, | |
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: t4.StatsigSession.get(this._sdkKey), | |
stableID: t4.StableID.get(this._sdkKey), | |
} | |
} | |
checkGate(I, G) { | |
return this.getFeatureGate(I, G).value | |
} | |
logEvent(I, G, Z) { | |
let d = typeof I === 'string' ? { eventName: I, value: G, metadata: Z } : I | |
this._logger.enqueue( | |
Object.assign(Object.assign({}, d), { user: this._user, time: Date.now() }), | |
) | |
} | |
_primeReadyRipcord() { | |
this.$on('error', () => { | |
this.loadingStatus === 'Loading' && this._finalizeUpdate(null) | |
}) | |
} | |
_initializeAsyncImpl(I) { | |
return c41(this, void 0, void 0, function* () { | |
if (!t4.Storage.isReady()) yield t4.Storage.isReadyResolver() | |
return this._logger.start(), this.updateUserAsync(this._user, I) | |
}) | |
} | |
_finalizeUpdate(I) { | |
this._store.finalize(), this._setStatus('Ready', I) | |
} | |
_runPostUpdate(I, G) { | |
this.dataAdapter.getDataAsync(I, G, { priority: 'low' }).catch((Z) => { | |
t4.Log.error('An error occurred after update.', Z) | |
}) | |
} | |
_resetForUser(I) { | |
this._logger.reset(), | |
this._store.reset(), | |
(this._user = this._configureUser(I, this._options)) | |
} | |
_configureUser(I, G) { | |
var Z | |
let d = t4._normalizeUser(I, G), | |
W = (Z = d.customIDs) === null || Z === void 0 ? void 0 : Z.stableID | |
if (W) t4.StableID.setOverride(W, this._sdkKey) | |
return d | |
} | |
_getFeatureGateImpl(I, G) { | |
var Z, d | |
let { result: W, details: w } = this._store.getGate(I), | |
B = t4._makeFeatureGate(I, w, W), | |
C = | |
(d = (Z = this.overrideAdapter) === null || Z === void 0 ? void 0 : Z.getGateOverride) === | |
null || d === void 0 | |
? void 0 | |
: d.call(Z, B, this._user, G), | |
V = C !== null && C !== void 0 ? C : B | |
return ( | |
this._enqueueExposure(I, t4._createGateExposure(this._user, V), G), | |
this.$emt({ name: 'gate_evaluation', gate: V }), | |
V | |
) | |
} | |
_getDynamicConfigImpl(I, G) { | |
var Z, d | |
let { result: W, details: w } = this._store.getConfig(I), | |
B = t4._makeDynamicConfig(I, w, W), | |
C = | |
(d = | |
(Z = this.overrideAdapter) === null || Z === void 0 | |
? void 0 | |
: Z.getDynamicConfigOverride) === null || d === void 0 | |
? void 0 | |
: d.call(Z, B, this._user, G), | |
V = C !== null && C !== void 0 ? C : B | |
return ( | |
this._enqueueExposure(I, t4._createConfigExposure(this._user, V), G), | |
this.$emt({ name: 'dynamic_config_evaluation', dynamicConfig: V }), | |
V | |
) | |
} | |
_getExperimentImpl(I, G) { | |
var Z, d | |
let { result: W, details: w } = this._store.getConfig(I), | |
B = t4._makeExperiment(I, w, W), | |
C = | |
(d = | |
(Z = this.overrideAdapter) === null || Z === void 0 | |
? void 0 | |
: Z.getExperimentOverride) === null || d === void 0 | |
? void 0 | |
: d.call(Z, B, this._user, G), | |
V = C !== null && C !== void 0 ? C : B | |
return ( | |
this._enqueueExposure(I, t4._createConfigExposure(this._user, V), G), | |
this.$emt({ name: 'experiment_evaluation', experiment: V }), | |
V | |
) | |
} | |
_getLayerImpl(I, G) { | |
var Z, d, W | |
let { result: w, details: B } = this._store.getLayer(I), | |
C = t4._makeLayer(I, B, w), | |
V = | |
(d = | |
(Z = this.overrideAdapter) === null || Z === void 0 ? void 0 : Z.getLayerOverride) === | |
null || d === void 0 | |
? void 0 | |
: d.call(Z, C, this._user, G) | |
if (G === null || G === void 0 ? void 0 : G.disableExposureLog) | |
this._logger.incrementNonExposureCount(I) | |
let A = t4._mergeOverride( | |
C, | |
V, | |
(W = V === null || V === void 0 ? void 0 : V.__value) !== null && W !== void 0 | |
? W | |
: C.__value, | |
(X) => { | |
if (G === null || G === void 0 ? void 0 : G.disableExposureLog) return | |
this._enqueueExposure(I, t4._createLayerParameterExposure(this._user, A, X), G) | |
}, | |
) | |
return this.$emt({ name: 'layer_evaluation', layer: A }), A | |
} | |
_getParameterStoreImpl(I, G) { | |
let { result: Z, details: d } = this._store.getParamStore(I) | |
return ( | |
this._logger.incrementNonExposureCount(I), | |
{ name: I, details: d, __configuration: Z, get: _X4._makeParamStoreGetter(this, Z, G) } | |
) | |
} | |
} | |
CM.default = Wj | |
}) | |
var Sl1 = _(($B) => { | |
var HX4 = | |
($B && $B.__createBinding) || | |
(Object.create | |
? function (I, G, Z, d) { | |
if (d === void 0) d = Z | |
var W = Object.getOwnPropertyDescriptor(G, Z) | |
if (!W || ('get' in W ? !G.__esModule : W.writable || W.configurable)) | |
W = { | |
enumerable: !0, | |
get: function () { | |
return G[Z] | |
}, | |
} | |
Object.defineProperty(I, d, W) | |
} | |
: function (I, G, Z, d) { | |
if (d === void 0) d = Z | |
I[d] = G[Z] | |
}), | |
FX4 = | |
($B && $B.__exportStar) || | |
function (I, G) { | |
for (var Z in I) | |
if (Z !== 'default' && !Object.prototype.hasOwnProperty.call(G, Z)) HX4(G, I, Z) | |
} | |
Object.defineProperty($B, '__esModule', { value: !0 }) | |
$B.StatsigClient = void 0 | |
var Ml1 = vl1() | |
$B.StatsigClient = Ml1.default | |
FX4(TY(), $B) | |
__STATSIG__ = Object.assign( | |
Object.assign({}, __STATSIG__ !== null && __STATSIG__ !== void 0 ? __STATSIG__ : {}), | |
{ StatsigClient: Ml1.default }, | |
) | |
$B.default = __STATSIG__ | |
}) | |
var fj1 = _(($$9, Uj1) => { | |
var h3 = {} | |
Uj1.exports = h3 | |
function qj1(I) { | |
return I < 0 ? -1 : 1 | |
} | |
function GY4(I) { | |
if (I % 1 === 0.5 && (I & 1) === 0) return Math.floor(I) | |
else return Math.round(I) | |
} | |
function jY(I, G) { | |
if (!G.unsigned) --I | |
let Z = G.unsigned ? 0 : -Math.pow(2, I), | |
d = Math.pow(2, I) - 1, | |
W = G.moduloBitLength ? Math.pow(2, G.moduloBitLength) : Math.pow(2, I), | |
w = G.moduloBitLength ? Math.pow(2, G.moduloBitLength - 1) : Math.pow(2, I - 1) | |
return function (B, C) { | |
if (!C) C = {} | |
let V = +B | |
if (C.enforceRange) { | |
if (!Number.isFinite(V)) throw new TypeError('Argument is not a finite number') | |
if (((V = qj1(V) * Math.floor(Math.abs(V))), V < Z || V > d)) | |
throw new TypeError('Argument is not in byte range') | |
return V | |
} | |
if (!isNaN(V) && C.clamp) { | |
if (((V = GY4(V)), V < Z)) V = Z | |
if (V > d) V = d | |
return V | |
} | |
if (!Number.isFinite(V) || V === 0) return 0 | |
if (((V = qj1(V) * Math.floor(Math.abs(V))), (V = V % W), !G.unsigned && V >= w)) return V - W | |
else if (G.unsigned) { | |
if (V < 0) V += W | |
else if (V === -0) return 0 | |
} | |
return V | |
} | |
} | |
h3.void = function () { | |
return | |
} | |
h3.boolean = function (I) { | |
return !!I | |
} | |
h3.byte = jY(8, { unsigned: !1 }) | |
h3.octet = jY(8, { unsigned: !0 }) | |
h3.short = jY(16, { unsigned: !1 }) | |
h3['unsigned short'] = jY(16, { unsigned: !0 }) | |
h3.long = jY(32, { unsigned: !1 }) | |
h3['unsigned long'] = jY(32, { unsigned: !0 }) | |
h3['long long'] = jY(32, { unsigned: !1, moduloBitLength: 64 }) | |
h3['unsigned long long'] = jY(32, { unsigned: !0, moduloBitLength: 64 }) | |
h3.double = function (I) { | |
let G = +I | |
if (!Number.isFinite(G)) throw new TypeError('Argument is not a finite floating-point value') | |
return G | |
} | |
h3['unrestricted double'] = function (I) { | |
let G = +I | |
if (isNaN(G)) throw new TypeError('Argument is NaN') | |
return G | |
} | |
h3.float = h3.double | |
h3['unrestricted float'] = h3['unrestricted double'] | |
h3.DOMString = function (I, G) { | |
if (!G) G = {} | |
if (G.treatNullAsEmptyString && I === null) return '' | |
return String(I) | |
} | |
h3.ByteString = function (I, G) { | |
let Z = String(I), | |
d = void 0 | |
for (let W = 0; (d = Z.codePointAt(W)) !== void 0; ++W) | |
if (d > 255) throw new TypeError('Argument is not a valid bytestring') | |
return Z | |
} | |
h3.USVString = function (I) { | |
let G = String(I), | |
Z = G.length, | |
d = [] | |
for (let W = 0; W < Z; ++W) { | |
let w = G.charCodeAt(W) | |
if (w < 55296 || w > 57343) d.push(String.fromCodePoint(w)) | |
else if (56320 <= w && w <= 57343) d.push(String.fromCodePoint(65533)) | |
else if (W === Z - 1) d.push(String.fromCodePoint(65533)) | |
else { | |
let B = G.charCodeAt(W + 1) | |
if (56320 <= B && B <= 57343) { | |
let C = w & 1023, | |
V = B & 1023 | |
d.push(String.fromCodePoint(65536 + 1024 * C + V)), ++W | |
} else d.push(String.fromCodePoint(65533)) | |
} | |
} | |
return d.join('') | |
} | |
h3.Date = function (I, G) { | |
if (!(I instanceof Date)) throw new TypeError('Argument is not a Date object') | |
if (isNaN(I)) return | |
return I | |
} | |
h3.RegExp = function (I, G) { | |
if (!(I instanceof RegExp)) I = new RegExp(I) | |
return I | |
} | |
}) | |
var vj1 = _((ZY4, kY) => { | |
ZY4.mixin = function I(G, Z) { | |
let d = Object.getOwnPropertyNames(Z) | |
for (let W = 0; W < d.length; ++W) | |
Object.defineProperty(G, d[W], Object.getOwnPropertyDescriptor(Z, d[W])) | |
} | |
ZY4.wrapperSymbol = Symbol('wrapper') | |
ZY4.implSymbol = Symbol('impl') | |
ZY4.wrapperForImpl = function (I) { | |
return I[ZY4.wrapperSymbol] | |
} | |
ZY4.implForWrapper = function (I) { | |
return I[ZY4.implSymbol] | |
} | |
}) | |
var Mj1 = _((y$9, BY4) => { | |
BY4.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'], | |
[[1419, 1420], 'disallowed'], | |
[[1421, 1422], 'valid', [], 'NV8'], | |
[[1423, 1423], 'valid', [], 'NV8'], | |
[[1424, 1424], 'disallowed'], | |
[[1425, 1441], 'valid'], | |
[[1442, 1442], 'valid'], | |
[[1443, 1455], 'valid'], | |
[[1456, 1465], 'valid'], | |
[[1466, 1466], 'valid'], | |
[[1467, 1469], 'valid'], | |
[[1470, 1470], 'valid', [], 'NV8'], | |
[[1471, 1471], 'valid'], | |
[[1472, 1472], 'valid', [], 'NV8'], | |
[[1473, 1474], 'valid'], | |
[[1475, 1475], 'valid', [], 'NV8'], | |
[[1476, 1476], 'valid'], | |
[[1477, 1477], 'valid'], | |
[[1478, 1478], 'valid', [], 'NV8'], | |
[[1479, 1479], 'valid'], | |
[[1480, 1487], 'disallowed'], | |
[[1488, 1514], 'valid'], | |
[[1515, 1519], 'disallowed'], | |
[[1520, 1524], 'valid'], | |
[[1525, 1535], 'disallowed'], | |
[[1536, 1539], 'disallowed'], | |
[[1540, 1540], 'disallowed'], | |
[[1541, 1541], 'disallowed'], | |
[[1542, 1546], 'valid', [], 'NV8'], | |
[[1547, 1547], 'valid', [], 'NV8'], | |
[[1548, 1548], 'valid', [], 'NV8'], | |
[[1549, 1551], 'valid', [], 'NV8'], | |
[[1552, 1557], 'valid'], | |
[[1558, 1562], 'valid'], | |
[[1563, 1563], 'valid', [], 'NV8'], | |
[[1564, 1564], 'disallowed'], | |
[[1565, 1565], 'disallowed'], | |
[[1566, 1566], 'valid', [], 'NV8'], | |
[[1567, 1567], 'valid', [], 'NV8'], | |
[[1568, 1568], 'valid'], | |
[[1569, 1594], 'valid'], | |
[[1595, 1599], 'valid'], | |
[[1600, 1600], 'valid', [], 'NV8'], | |
[[1601, 1618], 'valid'], | |
[[1619, 1621], 'valid'], | |
[[1622, 1624], 'valid'], | |
[[1625, 1630], 'valid'], | |
[[1631, 1631], 'valid'], | |
[[1632, 1641], 'valid'], | |
[[1642, 1645], 'valid', [], 'NV8'], | |
[[1646, 1647], 'valid'], | |
[[1648, 1652], 'valid'], | |
[[1653, 1653], 'mapped', [1575, 1652]], | |
[[1654, 1654], 'mapped', [1608, 1652]], | |
[[1655, 1655], 'mapped', [1735, 1652]], | |
[[1656, 1656], 'mapped', [1610, 1652]], | |
[[1657, 1719], 'valid'], | |
[[1720, 1721], 'valid'], | |
[[1722, 1726], 'valid'], | |
[[1727, 1727], 'valid'], | |
[[1728, 1742], 'valid'], | |
[[1743, 1743], 'valid'], | |
[[1744, 1747], 'valid'], | |
[[1748, 1748], 'valid', [], 'NV8'], | |
[[1749, 1756], 'valid'], | |
[[1757, 1757], 'disallowed'], | |
[[1758, 1758], 'valid', [], 'NV8'], | |
[[1759, 1768], 'valid'], | |
[[1769, 1769], 'valid', [], 'NV8'], | |
[[1770, 1773], 'valid'], | |
[[1774, 1775], 'valid'], | |
[[1776, 1785], 'valid'], | |
[[1786, 1790], 'valid'], | |
[[1791, 1791], 'valid'], | |
[[1792, 1805], 'valid', [], 'NV8'], | |
[[1806, 1806], 'disallowed'], | |
[[1807, 1807], 'disallowed'], | |
[[1808, 1836], 'valid'], | |
[[1837, 1839], 'valid'], | |
[[1840, 1866], 'valid'], | |
[[1867, 1868], 'disallowed'], | |
[[1869, 1871], 'valid'], | |
[[1872, 1901], 'valid'], | |
[[1902, 1919], 'valid'], | |
[[1920, 1968], 'valid'], | |
[[1969, 1969], 'valid'], | |
[[1970, 1983], 'disallowed'], | |
[[1984, 2037], 'valid'], | |
[[2038, 2042], 'valid', [], 'NV8'], | |
[[2043, 2047], 'disallowed'], | |
[[2048, 2093], 'valid'], | |
[[2094, 2095], 'disallowed'], | |
[[2096, 2110], 'valid', [], 'NV8'], | |
[[2111, 2111], 'disallowed'], | |
[[2112, 2139], 'valid'], | |
[[2140, 2141], 'disallowed'], | |
[[2142, 2142], 'valid', [], 'NV8'], | |
[[2143, 2207], 'disallowed'], | |
[[2208, 2208], 'valid'], | |
[[2209, 2209], 'valid'], | |
[[2210, 2220], 'valid'], | |
[[2221, 2226], 'valid'], | |
[[2227, 2228], 'valid'], | |
[[2229, 2274], 'disallowed'], | |
[[2275, 2275], 'valid'], | |
[[2276, 2302], 'valid'], | |
[[2303, 2303], 'valid'], | |
[[2304, 2304], 'valid'], | |
[[2305, 2307], 'valid'], | |
[[2308, 2308], 'valid'], | |
[[2309, 2361], 'valid'], | |
[[2362, 2363], 'valid'], | |
[[2364, 2381], 'valid'], | |
[[2382, 2382], 'valid'], | |
[[2383, 2383], 'valid'], | |
[[2384, 2388], 'valid'], | |
[[2389, 2389], 'valid'], | |
[[2390, 2391], 'valid'], | |
[[2392, 2392], 'mapped', [2325, 2364]], | |
[[2393, 2393], 'mapped', [2326, 2364]], | |
[[2394, 2394], 'mapped', [2327, 2364]], | |
[[2395, 2395], 'mapped', [2332, 2364]], | |
[[2396, 2396], 'mapped', [2337, 2364]], | |
[[2397, 2397], 'mapped', [2338, 2364]], | |
[[2398, 2398], 'mapped', [2347, 2364]], | |
[[2399, 2399], 'mapped', [2351, 2364]], | |
[[2400, 2403], 'valid'], | |
[[2404, 2405], 'valid', [], 'NV8'], | |
[[2406, 2415], 'valid'], | |
[[2416, 2416], 'valid', [], 'NV8'], | |
[[2417, 2418], 'valid'], | |
[[2419, 2423], 'valid'], | |
[[2424, 2424], 'valid'], | |
[[2425, 2426], 'valid'], | |
[[2427, 2428], 'valid'], | |
[[2429, 2429], 'valid'], | |
[[2430, 2431], 'valid'], | |
[[2432, 2432], 'valid'], | |
[[2433, 2435], 'valid'], | |
[[2436, 2436], 'disallowed'], | |
[[2437, 2444], 'valid'], | |
[[2445, 2446], 'disallowed'], | |
[[2447, 2448], 'valid'], | |
[[2449, 2450], 'disallowed'], | |
[[2451, 2472], 'valid'], | |
[[2473, 2473], 'disallowed'], | |
[[2474, 2480], 'valid'], | |
[[2481, 2481], 'disallowed'], | |
[[2482, 2482], 'valid'], | |
[[2483, 2485], 'disallowed'], | |
[[2486, 2489], 'valid'], | |
[[2490, 2491], 'disallowed'], | |
[[2492, 2492], 'valid'], | |
[[2493, 2493], 'valid'], | |
[[2494, 2500], 'valid'], | |
[[2501, 2502], 'disallowed'], | |
[[2503, 2504], 'valid'], | |
[[2505, 2506], 'disallowed'], | |
[[2507, 2509], 'valid'], | |
[[2510, 2510], 'valid'], | |
[[2511, 2518], 'disallowed'], | |
[[2519, 2519], 'valid'], | |
[[2520, 2523], 'disallowed'], | |
[[2524, 2524], 'mapped', [2465, 2492]], | |
[[2525, 2525], 'mapped', [2466, 2492]], | |
[[2526, 2526], 'disallowed'], | |
[[2527, 2527], 'mapped', [2479, 2492]], | |
[[2528, 2531], 'valid'], | |
[[2532, 2533], 'disallowed'], | |
[[2534, 2545], 'valid'], | |
[[2546, 2554], 'valid', [], 'NV8'], | |
[[2555, 2555], 'valid', [], 'NV8'], | |
[[2556, 2560], 'disallowed'], | |
[[2561, 2561], 'valid'], | |
[[2562, 2562], 'valid'], | |
[[2563, 2563], 'valid'], | |
[[2564, 2564], 'disallowed'], | |
[[2565, 2570], 'valid'], | |
[[2571, 2574], 'disallowed'], | |
[[2575, 2576], 'valid'], | |
[[2577, 2578], 'disallowed'], | |
[[2579, 2600], 'valid'], | |
[[2601, 2601], 'disallowed'], | |
[[2602, 2608], 'valid'], | |
[[2609, 2609], 'disallowed'], | |
[[2610, 2610], 'valid'], | |
[[2611, 2611], 'mapped', [2610, 2620]], | |
[[2612, 2612], 'disallowed'], | |
[[2613, 2613], 'valid'], | |
[[2614, 2614], 'mapped', [2616, 2620]], | |
[[2615, 2615], 'disallowed'], | |
[[2616, 2617], 'valid'], | |
[[2618, 2619], 'disallowed'], | |
[[2620, 2620], 'valid'], | |
[[2621, 2621], 'disallowed'], | |
[[2622, 2626], 'valid'], | |
[[2627, 2630], 'disallowed'], | |
[[2631, 2632], 'valid'], | |
[[2633, 2634], 'disallowed'], | |
[[2635, 2637], 'valid'], | |
[[2638, 2640], 'disallowed'], | |
[[2641, 2641], 'valid'], | |
[[2642, 2648], 'disallowed'], | |
[[2649, 2649], 'mapped', [2582, 2620]], | |
[[2650, 2650], 'mapped', [2583, 2620]], | |
[[2651, 2651], 'mapped', [2588, 2620]], | |
[[2652, 2652], 'valid'], | |
[[2653, 2653], 'disallowed'], | |
[[2654, 2654], 'mapped', [2603, 2620]], | |
[[2655, 2661], 'disallowed'], | |
[[2662, 2676], 'valid'], | |
[[2677, 2677], 'valid'], | |
[[2678, 2688], 'disallowed'], | |
[[2689, 2691], 'valid'], | |
[[2692, 2692], 'disallowed'], | |
[[2693, 2699], 'valid'], | |
[[2700, 2700], 'valid'], | |
[[2701, 2701], 'valid'], | |
[[2702, 2702], 'disallowed'], | |
[[2703, 2705], 'valid'], | |
[[2706, 2706], 'disallowed'], | |
[[2707, 2728], 'valid'], | |
[[2729, 2729], 'disallowed'], | |
[[2730, 2736], 'valid'], | |
[[2737, 2737], 'disallowed'], | |
[[2738, 2739], 'valid'], | |
[[2740, 2740], 'disallowed'], | |
[[2741, 2745], 'valid'], | |
[[2746, 2747], 'disallowed'], | |
[[2748, 2757], 'valid'], | |
[[2758, 2758], 'disallowed'], | |
[[2759, 2761], 'valid'], | |
[[2762, 2762], 'disallowed'], | |
[[2763, 2765], 'valid'], | |
[[2766, 2767], 'disallowed'], | |
[[2768, 2768], 'valid'], | |
[[2769, 2783], 'disallowed'], | |
[[2784, 2784], 'valid'], | |
[[2785, 2787], 'valid'], | |
[[2788, 2789], 'disallowed'], | |
[[2790, 2799], 'valid'], | |
[[2800, 2800], 'valid', [], 'NV8'], | |
[[2801, 2801], 'valid', [], 'NV8'], | |
[[2802, 2808], 'disallowed'], | |
[[2809, 2809], 'valid'], | |
[[2810, 2816], 'disallowed'], | |
[[2817, 2819], 'valid'], | |
[[2820, 2820], 'disallowed'], | |
[[2821, 2828], 'valid'], | |
[[2829, 2830], 'disallowed'], | |
[[2831, 2832], 'valid'], | |
[[2833, 2834], 'disallowed'], | |
[[2835, 2856], 'valid'], | |
[[2857, 2857], 'disallowed'], | |
[[2858, 2864], 'valid'], | |
[[2865, 2865], 'disallowed'], | |
[[2866, 2867], 'valid'], | |
[[2868, 2868], 'disallowed'], | |
[[2869, 2869], 'valid'], | |
[[2870, 2873], 'valid'], | |
[[2874, 2875], 'disallowed'], | |
[[2876, 2883], 'valid'], | |
[[2884, 2884], 'valid'], | |
[[2885, 2886], 'disallowed'], | |
[[2887, 2888], 'valid'], | |
[[2889, 2890], 'disallowed'], | |
[[2891, 2893], 'valid'], | |
[[2894, 2901], 'disallowed'], | |
[[2902, 2903], 'valid'], | |
[[2904, 2907], 'disallowed'], | |
[[2908, 2908], 'mapped', [2849, 2876]], | |
[[2909, 2909], 'mapped', [2850, 2876]], | |
[[2910, 2910], 'disallowed'], | |
[[2911, 2913], 'valid'], | |
[[2914, 2915], 'valid'], | |
[[2916, 2917], 'disallowed'], | |
[[2918, 2927], 'valid'], | |
[[2928, 2928], 'valid', [], 'NV8'], | |
[[2929, 2929], 'valid'], | |
[[2930, 2935], 'valid', [], 'NV8'], | |
[[2936, 2945], 'disallowed'], | |
[[2946, 2947], 'valid'], | |
[[2948, 2948], 'disallowed'], | |
[[2949, 2954], 'valid'], | |
[[2955, 2957], 'disallowed'], | |
[[2958, 2960], 'valid'], | |
[[2961, 2961], 'disallowed'], | |
[[2962, 2965], 'valid'], | |
[[2966, 2968], 'disallowed'], | |
[[2969, 2970], 'valid'], | |
[[2971, 2971], 'disallowed'], | |
[[2972, 2972], 'valid'], | |
[[2973, 2973], 'disallowed'], | |
[[2974, 2975], 'valid'], | |
[[2976, 2978], 'disallowed'], | |
[[2979, 2980], 'valid'], | |
[[2981, 2983], 'disallowed'], | |
[[2984, 2986], 'valid'], | |
[[2987, 2989], 'disallowed'], | |
[[2990, 2997], 'valid'], | |
[[2998, 2998], 'valid'], | |
[[2999, 3001], 'valid'], | |
[[3002, 3005], 'disallowed'], | |
[[3006, 3010], 'valid'], | |
[[3011, 3013], 'disallowed'], | |
[[3014, 3016], 'valid'], | |
[[3017, 3017], 'disallowed'], | |
[[3018, 3021], 'valid'], | |
[[3022, 3023], 'disallowed'], | |
[[3024, 3024], 'valid'], | |
[[3025, 3030], 'disallowed'], | |
[[3031, 3031], 'valid'], | |
[[3032, 3045], 'disallowed'], | |
[[3046, 3046], 'valid'], | |
[[3047, 3055], 'valid'], | |
[[3056, 3058], 'valid', [], 'NV8'], | |
[[3059, 3066], 'valid', [], 'NV8'], | |
[[3067, 3071], 'disallowed'], | |
[[3072, 3072], 'valid'], | |
[[3073, 3075], 'valid'], | |
[[3076, 3076], 'disallowed'], | |
[[3077, 3084], 'valid'], | |
[[3085, 3085], 'disallowed'], | |
[[3086, 3088], 'valid'], | |
[[3089, 3089], 'disallowed'], | |
[[3090, 3112], 'valid'], | |
[[3113, 3113], 'disallowed'], | |
[[3114, 3123], 'valid'], | |
[[3124, 3124], 'valid'], | |
[[3125, 3129], 'valid'], | |
[[3130, 3132], 'disallowed'], | |
[[3133, 3133], 'valid'], | |
[[3134, 3140], 'valid'], | |
[[3141, 3141], 'disallowed'], | |
[[3142, 3144], 'valid'], | |
[[3145, 3145], 'disallowed'], | |
[[3146, 3149], 'valid'], | |
[[3150, 3156], 'disallowed'], | |
[[3157, 3158], 'valid'], | |
[[3159, 3159], 'disallowed'], | |
[[3160, 3161], 'valid'], | |
[[3162, 3162], 'valid'], | |
[[3163, 3167], 'disallowed'], | |
[[3168, 3169], 'valid'], | |
[[3170, 3171], 'valid'], | |
[[3172, 3173], 'disallowed'], | |
[[3174, 3183], 'valid'], | |
[[3184, 3191], 'disallowed'], | |
[[3192, 3199], 'valid', [], 'NV8'], | |
[[3200, 3200], 'disallowed'], | |
[[3201, 3201], 'valid'], | |
[[3202, 3203], 'valid'], | |
[[3204, 3204], 'disallowed'], | |
[[3205, 3212], 'valid'], | |
[[3213, 3213], 'disallowed'], | |
[[3214, 3216], 'valid'], | |
[[3217, 3217], 'disallowed'], | |
[[3218, 3240], 'valid'], | |
[[3241, 3241], 'disallowed'], | |
[[3242, 3251], 'valid'], | |
[[3252, 3252], 'disallowed'], | |
[[3253, 3257], 'valid'], | |
[[3258, 3259], 'disallowed'], | |
[[3260, 3261], 'valid'], | |
[[3262, 3268], 'valid'], | |
[[3269, 3269], 'disallowed'], | |
[[3270, 3272], 'valid'], | |
[[3273, 3273], 'disallowed'], | |
[[3274, 3277], 'valid'], | |
[[3278, 3284], 'disallowed'], | |
[[3285, 3286], 'valid'], | |
[[3287, 3293], 'disallowed'], | |
[[3294, 3294], 'valid'], | |
[[3295, 3295], 'disallowed'], | |
[[3296, 3297], 'valid'], | |
[[3298, 3299], 'valid'], | |
[[3300, 3301], 'disallowed'], | |
[[3302, 3311], 'valid'], | |
[[3312, 3312], 'disallowed'], | |
[[3313, 3314], 'valid'], | |
[[3315, 3328], 'disallowed'], | |
[[3329, 3329], 'valid'], | |
[[3330, 3331], 'valid'], | |
[[3332, 3332], 'disallowed'], | |
[[3333, 3340], 'valid'], | |
[[3341, 3341], 'disallowed'], | |
[[3342, 3344], 'valid'], | |
[[3345, 3345], 'disallowed'], | |
[[3346, 3368], 'valid'], | |
[[3369, 3369], 'valid'], | |
[[3370, 3385], 'valid'], | |
[[3386, 3386], 'valid'], | |
[[3387, 3388], 'disallowed'], | |
[[3389, 3389], 'valid'], | |
[[3390, 3395], 'valid'], | |
[[3396, 3396], 'valid'], | |
[[3397, 3397], 'disallowed'], | |
[[3398, 3400], 'valid'], | |
[[3401, 3401], 'disallowed'], | |
[[3402, 3405], 'valid'], | |
[[3406, 3406], 'valid'], | |
[[3407, 3414], 'disallowed'], | |
[[3415, 3415], 'valid'], | |
[[3416, 3422], 'disallowed'], | |
[[3423, 3423], 'valid'], | |
[[3424, 3425], 'valid'], | |
[[3426, 3427], 'valid'], | |
[[3428, 3429], 'disallowed'], | |
[[3430, 3439], 'valid'], | |
[[3440, 3445], 'valid', [], 'NV8'], | |
[[3446, 3448], 'disallowed'], | |
[[3449, 3449], 'valid', [], 'NV8'], | |
[[3450, 3455], 'valid'], | |
[[3456, 3457], 'disallowed'], | |
[[3458, 3459], 'valid'], | |
[[3460, 3460], 'disallowed'], | |
[[3461, 3478], 'valid'], | |
[[3479, 3481], 'disallowed'], | |
[[3482, 3505], 'valid'], | |
[[3506, 3506], 'disallowed'], | |
[[3507, 3515], 'valid'], | |
[[3516, 3516], 'disallowed'], | |
[[3517, 3517], 'valid'], | |
[[3518, 3519], 'disallowed'], | |
[[3520, 3526], 'valid'], | |
[[3527, 3529], 'disallowed'], | |
[[3530, 3530], 'valid'], | |
[[3531, 3534], 'disallowed'], | |
[[3535, 3540], 'valid'], | |
[[3541, 3541], 'disallowed'], | |
[[3542, 3542], 'valid'], | |
[[3543, 3543], 'disallowed'], | |
[[3544, 3551], 'valid'], | |
[[3552, 3557], 'disallowed'], | |
[[3558, 3567], 'valid'], | |
[[3568, 3569], 'disallowed'], | |
[[3570, 3571], 'valid'], | |
[[3572, 3572], 'valid', [], 'NV8'], | |
[[3573, 3584], 'disallowed'], | |
[[3585, 3634], 'valid'], | |
[[3635, 3635], 'mapped', [3661, 3634]], | |
[[3636, 3642], 'valid'], | |
[[3643, 3646], 'disallowed'], | |
[[3647, 3647], 'valid', [], 'NV8'], | |
[[3648, 3662], 'valid'], | |
[[3663, 3663], 'valid', [], 'NV8'], | |
[[3664, 3673], 'valid'], | |
[[3674, 3675], 'valid', [], 'NV8'], | |
[[3676, 3712], 'disallowed'], | |
[[3713, 3714], 'valid'], | |
[[3715, 3715], 'disallowed'], | |
[[3716, 3716], 'valid'], | |
[[3717, 3718], 'disallowed'], | |
[[3719, 3720], 'valid'], | |
[[3721, 3721], 'disallowed'], | |
[[3722, 3722], 'valid'], | |
[[3723, 3724], 'disallowed'], | |
[[3725, 3725], 'valid'], | |
[[3726, 3731], 'disallowed'], | |
[[3732, 3735], 'valid'], | |
[[3736, 3736], 'disallowed'], | |
[[3737, 3743], 'valid'], | |
[[3744, 3744], 'disallowed'], | |
[[3745, 3747], 'valid'], | |
[[3748, 3748], 'disallowed'], | |
[[3749, 3749], 'valid'], | |
[[3750, 3750], 'disallowed'], | |
[[3751, 3751], 'valid'], | |
[[3752, 3753], 'disallowed'], | |
[[3754, 3755], 'valid'], | |
[[3756, 3756], 'disallowed'], | |
[[3757, 3762], 'valid'], | |
[[3763, 3763], 'mapped', [3789, 3762]], | |
[[3764, 3769], 'valid'], | |
[[3770, 3770], 'disallowed'], | |
[[3771, 3773], 'valid'], | |
[[3774, 3775], 'disallowed'], | |
[[3776, 3780], 'valid'], | |
[[3781, 3781], 'disallowed'], | |
[[3782, 3782], 'valid'], | |
[[3783, 3783], 'disallowed'], | |
[[3784, 3789], 'valid'], | |
[[3790, 3791], 'disallowed'], | |
[[3792, 3801], 'valid'], | |
[[3802, 3803], 'disallowed'], | |
[[3804, 3804], 'mapped', [3755, 3737]], | |
[[3805, 3805], 'mapped', [3755, 3745]], | |
[[3806, 3807], 'valid'], | |
[[3808, 3839], 'disallowed'], | |
[[3840, 3840], 'valid'], | |
[[3841, 3850], 'valid', [], 'NV8'], | |
[[3851, 3851], 'valid'], | |
[[3852, 3852], 'mapped', [3851]], | |
[[3853, 3863], 'valid', [], 'NV8'], | |
[[3864, 3865], 'valid'], | |
[[3866, 3871], 'valid', [], 'NV8'], | |
[[3872, 3881], 'valid'], | |
[[3882, 3892], 'valid', [], 'NV8'], | |
[[3893, 3893], 'valid'], | |
[[3894, 3894], 'valid', [], 'NV8'], | |
[[3895, 3895], 'valid'], | |
[[3896, 3896], 'valid', [], 'NV8'], | |
[[3897, 3897], 'valid'], | |
[[3898, 3901], 'valid', [], 'NV8'], | |
[[3902, 3906], 'valid'], | |
[[3907, 3907], 'mapped', [3906, 4023]], | |
[[3908, 3911], 'valid'], | |
[[3912, 3912], 'disallowed'], | |
[[3913, 3916], 'valid'], | |
[[3917, 3917], 'mapped', [3916, 4023]], | |
[[3918, 3921], 'valid'], | |
[[3922, 3922], 'mapped', [3921, 4023]], | |
[[3923, 3926], 'valid'], | |
[[3927, 3927], 'mapped', [3926, 4023]], | |
[[3928, 3931], 'valid'], | |
[[3932, 3932], 'mapped', [3931, 4023]], | |
[[3933, 3944], 'valid'], | |
[[3945, 3945], 'mapped', [3904, 4021]], | |
[[3946, 3946], 'valid'], | |
[[3947, 3948], 'valid'], | |
[[3949, 3952], 'disallowed'], | |
[[3953, 3954], 'valid'], | |
[[3955, 3955], 'mapped', [3953, 3954]], | |
[[3956, 3956], 'valid'], | |
[[3957, 3957], 'mapped', [3953, 3956]], | |
[[3958, 3958], 'mapped', [4018, 3968]], | |
[[3959, 3959], 'mapped', [4018, 3953, 3968]], | |
[[3960, 3960], 'mapped', [4019, 3968]], | |
[[3961, 3961], 'mapped', [4019, 3953, 3968]], | |
[[3962, 3968], 'valid'], | |
[[3969, 3969], 'mapped', [3953, 3968]], | |
[[3970, 3972], 'valid'], | |
[[3973, 3973], 'valid', [], 'NV8'], | |
[[3974, 3979], 'valid'], | |
[[3980, 3983], 'valid'], | |
[[3984, 3986], 'valid'], | |
[[3987, 3987], 'mapped', [3986, 4023]], | |
[[3988, 3989], 'valid'], | |
[[3990, 3990], 'valid'], | |
[[3991, 3991], 'valid'], | |
[[3992, 3992], 'disallowed'], | |
[[3993, 3996], 'valid'], | |
[[3997, 3997], 'mapped', [3996, 4023]], | |
[[3998, 4001], 'valid'], | |
[[4002, 4002], 'mapped', [4001, 4023]], | |
[[4003, 4006], 'valid'], | |
[[4007, 4007], 'mapped', [4006, 4023]], | |
[[4008, 4011], 'valid'], | |
[[4012, 4012], 'mapped', [4011, 4023]], | |
[[4013, 4013], 'valid'], | |
[[4014, 4016], 'valid'], | |
[[4017, 4023], 'valid'], | |
[[4024, 4024], 'valid'], | |
[[4025, 4025], 'mapped', [3984, 4021]], | |
[[4026, 4028], 'valid'], | |
[[4029, 4029], 'disallowed'], | |
[[4030, 4037], 'valid', [], 'NV8'], | |
[[4038, 4038], 'valid'], | |
[[4039, 4044], 'valid', [], 'NV8'], | |
[[4045, 4045], 'disallowed'], | |
[[4046, 4046], 'valid', [], 'NV8'], | |
[[4047, 4047], 'valid', [], 'NV8'], | |
[[4048, 4049], 'valid', [], 'NV8'], | |
[[4050, 4052], 'valid', [], 'NV8'], | |
[[4053, 4056], 'valid', [], 'NV8'], | |
[[4057, 4058], 'valid', [], 'NV8'], | |
[[4059, 4095], 'disallowed'], | |
[[4096, 4129], 'valid'], | |
[[4130, 4130], 'valid'], | |
[[4131, 4135], 'valid'], | |
[[4136, 4136], 'valid'], | |
[[4137, 4138], 'valid'], | |
[[4139, 4139], 'valid'], | |
[[4140, 4146], 'valid'], | |
[[4147, 4149], 'valid'], | |
[[4150, 4153], 'valid'], | |
[[4154, 4159], 'valid'], | |
[[4160, 4169], 'valid'], | |
[[4170, 4175], 'valid', [], 'NV8'], | |
[[4176, 4185], 'valid'], | |
[[4186, 4249], 'valid'], | |
[[4250, 4253], 'valid'], | |
[[4254, 4255], 'valid', [], 'NV8'], | |
[[4256, 4293], 'disallowed'], | |
[[4294, 4294], 'disallowed'], | |
[[4295, 4295], 'mapped', [11559]], | |
[[4296, 4300], 'disallowed'], | |
[[4301, 4301], 'mapped', [11565]], | |
[[4302, 4303], 'disallowed'], | |
[[4304, 4342], 'valid'], | |
[[4343, 4344], 'valid'], | |
[[4345, 4346], 'valid'], | |
[[4347, 4347], 'valid', [], 'NV8'], | |
[[4348, 4348], 'mapped', [4316]], | |
[[4349, 4351], 'valid'], | |
[[4352, 4441], 'valid', [], 'NV8'], | |
[[4442, 4446], 'valid', [], 'NV8'], | |
[[4447, 4448], 'disallowed'], | |
[[4449, 4514], 'valid', [], 'NV8'], | |
[[4515, 4519], 'valid', [], 'NV8'], | |
[[4520, 4601], 'valid', [], 'NV8'], | |
[[4602, 4607], 'valid', [], 'NV8'], | |
[[4608, 4614], 'valid'], | |
[[4615, 4615], 'valid'], | |
[[4616, 4678], 'valid'], | |
[[4679, 4679], 'valid'], | |
[[4680, 4680], 'valid'], | |
[[4681, 4681], 'disallowed'], | |
[[4682, 4685], 'valid'], | |
[[4686, 4687], 'disallowed'], | |
[[4688, 4694], 'valid'], | |
[[4695, 4695], 'disallowed'], | |
[[4696, 4696], 'valid'], | |
[[4697, 4697], 'disallowed'], | |
[[4698, 4701], 'valid'], | |
[[4702, 4703], 'disallowed'], | |
[[4704, 4742], 'valid'], | |
[[4743, 4743], 'valid'], | |
[[4744, 4744], 'valid'], | |
[[4745, 4745], 'disallowed'], | |
[[4746, 4749], 'valid'], | |
[[4750, 4751], 'disallowed'], | |
[[4752, 4782], 'valid'], | |
[[4783, 4783], 'valid'], | |
[[4784, 4784], 'valid'], | |
[[4785, 4785], 'disallowed'], | |
[[4786, 4789], 'valid'], | |
[[4790, 4791], 'disallowed'], | |
[[4792, 4798], 'valid'], | |
[[4799, 4799], 'disallowed'], | |
[[4800, 4800], 'valid'], | |
[[4801, 4801], 'disallowed'], | |
[[4802, 4805], 'valid'], | |
[[4806, 4807], 'disallowed'], | |
[[4808, 4814], 'valid'], | |
[[4815, 4815], 'valid'], | |
[[4816, 4822], 'valid'], | |
[[4823, 4823], 'disallowed'], | |
[[4824, 4846], 'valid'], | |
[[4847, 4847], 'valid'], | |
[[4848, 4878], 'valid'], | |
[[4879, 4879], 'valid'], | |
[[4880, 4880], 'valid'], | |
[[4881, 4881], 'disallowed'], | |
[[4882, 4885], 'valid'], | |
[[4886, 4887], 'disallowed'], | |
[[4888, 4894], 'valid'], | |
[[4895, 4895], 'valid'], | |
[[4896, 4934], 'valid'], | |
[[4935, 4935], 'valid'], | |
[[4936, 4954], 'valid'], | |
[[4955, 4956], 'disallowed'], | |
[[4957, 4958], 'valid'], | |
[[4959, 4959], 'valid'], | |
[[4960, 4960], 'valid', [], 'NV8'], | |
[[4961, 4988], 'valid', [], 'NV8'], | |
[[4989, 4991], 'disallowed'], | |
[[4992, 5007], 'valid'], | |
[[5008, 5017], 'valid', [], 'NV8'], | |
[[5018, 5023], 'disallowed'], | |
[[5024, 5108], 'valid'], | |
[[5109, 5109], 'valid'], | |
[[5110, 5111], 'disallowed'], | |
[[5112, 5112], 'mapped', [5104]], | |
[[5113, 5113], 'mapped', [5105]], | |
[[5114, 5114], 'mapped', [5106]], | |
[[5115, 5115], 'mapped', [5107]], | |
[[5116, 5116], 'mapped', [5108]], | |
[[5117, 5117], 'mapped', [5109]], | |
[[5118, 5119], 'disallowed'], | |
[[5120, 5120], 'valid', [], 'NV8'], | |
[[5121, 5740], 'valid'], | |
[[5741, 5742], 'valid', [], 'NV8'], | |
[[5743, 5750], 'valid'], | |
[[5751, 5759], 'valid'], | |
[[5760, 5760], 'disallowed'], | |
[[5761, 5786], 'valid'], | |
[[5787, 5788], 'valid', [], 'NV8'], | |
[[5789, 5791], 'disallowed'], | |
[[5792, 5866], 'valid'], | |
[[5867, 5872], 'valid', [], 'NV8'], | |
[[5873, 5880], 'valid'], | |
[[5881, 5887], 'disallowed'], | |
[[5888, 5900], 'valid'], | |
[[5901, 5901], 'disallowed'], | |
[[5902, 5908], 'valid'], | |
[[5909, 5919], 'disallowed'], | |
[[5920, 5940], 'valid'], | |
[[5941, 5942], 'valid', [], 'NV8'], | |
[[5943, 5951], 'disallowed'], | |
[[5952, 5971], 'valid'], | |
[[5972, 5983], 'disallowed'], | |
[[5984, 5996], 'valid'], | |
[[5997, 5997], 'disallowed'], | |
[[5998, 6000], 'valid'], | |
[[6001, 6001], 'disallowed'], | |
[[6002, 6003], 'valid'], | |
[[6004, 6015], 'disallowed'], | |
[[6016, 6067], 'valid'], | |
[[6068, 6069], 'disallowed'], | |
[[6070, 6099], 'valid'], | |
[[6100, 6102], 'valid', [], 'NV8'], | |
[[6103, 6103], 'valid'], | |
[[6104, 6107], 'valid', [], 'NV8'], | |
[[6108, 6108], 'valid'], | |
[[6109, 6109], 'valid'], | |
[[6110, 6111], 'disallowed'], | |
[[6112, 6121], 'valid'], | |
[[6122, 6127], 'disallowed'], | |
[[6128, 6137], 'valid', [], 'NV8'], | |
[[6138, 6143], 'disallowed'], | |
[[6144, 6149], 'valid', [], 'NV8'], | |
[[6150, 6150], 'disallowed'], | |
[[6151, 6154], 'valid', [], 'NV8'], | |
[[6155, 6157], 'ignored'], | |
[[6158, 6158], 'disallowed'], | |
[[6159, 6159], 'disallowed'], | |
[[6160, 6169], 'valid'], | |
[[6170, 6175], 'disallowed'], | |
[[6176, 6263], 'valid'], | |
[[6264, 6271], 'disallowed'], | |
[[6272, 6313], 'valid'], | |
[[6314, 6314], 'valid'], | |
[[6315, 6319], 'disallowed'], | |
[[6320, 6389], 'valid'], | |
[[6390, 6399], 'disallowed'], | |
[[6400, 6428], 'valid'], | |
[[6429, 6430], 'valid'], | |
[[6431, 6431], 'disallowed'], | |
[[6432, 6443], 'valid'], | |
[[6444, 6447], 'disallowed'], | |
[[6448, 6459], 'valid'], | |
[[6460, 6463], 'disallowed'], | |
[[6464, 6464], 'valid', [], 'NV8'], | |
[[6465, 6467], 'disallowed'], | |
[[6468, 6469], 'valid', [], 'NV8'], | |
[[6470, 6509], 'valid'], | |
[[6510, 6511], 'disallowed'], | |
[[6512, 6516], 'valid'], | |
[[6517, 6527], 'disallowed'], | |
[[6528, 6569], 'valid'], | |
[[6570, 6571], 'valid'], | |
[[6572, 6575], 'disallowed'], | |
[[6576, 6601], 'valid'], | |
[[6602, 6607], 'disallowed'], | |
[[6608, 6617], 'valid'], | |
[[6618, 6618], 'valid', [], 'XV8'], | |
[[6619, 6621], 'disallowed'], | |
[[6622, 6623], 'valid', [], 'NV8'], | |
[[6624, 6655], 'valid', [], 'NV8'], | |
[[6656, 6683], 'valid'], | |
[[6684, 6685], 'disallowed'], | |
[[6686, 6687], 'valid', [], 'NV8'], | |
[[6688, 6750], 'valid'], | |
[[6751, 6751], 'disallowed'], | |
[[6752, 6780], 'valid'], | |
[[6781, 6782], 'disallowed'], | |
[[6783, 6793], 'valid'], | |
[[6794, 6799], 'disallowed'], | |
[[6800, 6809], 'valid'], | |
[[6810, 6815], 'disallowed'], | |
[[6816, 6822], 'valid', [], 'NV8'], | |
[[6823, 6823], 'valid'], | |
[[6824, 6829], 'valid', [], 'NV8'], | |
[[6830, 6831], 'disallowed'], | |
[[6832, 6845], 'valid'], | |
[[6846, 6846], 'valid', [], 'NV8'], | |
[[6847, 6911], 'disallowed'], | |
[[6912, 6987], 'valid'], | |
[[6988, 6991], 'disallowed'], | |
[[6992, 7001], 'valid'], | |
[[7002, 7018], 'valid', [], 'NV8'], | |
[[7019, 7027], 'valid'], | |
[[7028, 7036], 'valid', [], 'NV8'], | |
[[7037, 7039], 'disallowed'], | |
[[7040, 7082], 'valid'], | |
[[7083, 7085], 'valid'], | |
[[7086, 7097], 'valid'], | |
[[7098, 7103], 'valid'], | |
[[7104, 7155], 'valid'], | |
[[7156, 7163], 'disallowed'], | |
[[7164, 7167], 'valid', [], 'NV8'], | |
[[7168, 7223], 'valid'], | |
[[7224, 7226], 'disallowed'], | |
[[7227, 7231], 'valid', [], 'NV8'], | |
[[7232, 7241], 'valid'], | |
[[7242, 7244], 'disallowed'], | |
[[7245, 7293], 'valid'], | |
[[7294, 7295], 'valid', [], 'NV8'], | |
[[7296, 7359], 'disallowed'], | |
[[7360, 7367], 'valid', [], 'NV8'], | |
[[7368, 7375], 'disallowed'], | |
[[7376, 7378], 'valid'], | |
[[7379, 7379], 'valid', [], 'NV8'], | |
[[7380, 7410], 'valid'], | |
[[7411, 7414], 'valid'], | |
[[7415, 7415], 'disallowed'], | |
[[7416, 7417], 'valid'], | |
[[7418, 7423], 'disallowed'], | |
[[7424, 7467], 'valid'], | |
[[7468, 7468], 'mapped', [97]], | |
[[7469, 7469], 'mapped', [230]], | |
[[7470, 7470], 'mapped', [98]], | |
[[7471, 7471], 'valid'], | |
[[7472, 7472], 'mapped', [100]], | |
[[7473, 7473], 'mapped', [101]], | |
[[7474, 7474], 'mapped', [477]], | |
[[7475, 7475], 'mapped', [103]], | |
[[7476, 7476], 'mapped', [104]], | |
[[7477, 7477], 'mapped', [105]], | |
[[7478, 7478], 'mapped', [106]], | |
[[7479, 7479], 'mapped', [107]], | |
[[7480, 7480], 'mapped', [108]], | |
[[7481, 7481], 'mapped', [109]], | |
[[7482, 7482], 'mapped', [110]], | |
[[7483, 7483], 'valid'], | |
[[7484, 7484], 'mapped', [111]], | |
[[7485, 7485], 'mapped', [547]], | |
[[7486, 7486], 'mapped', [112]], | |
[[7487, 7487], 'mapped', [114]], | |
[[7488, 7488], 'mapped', [116]], | |
[[7489, 7489], 'mapped', [117]], | |
[[7490, 7490], 'mapped', [119]], | |
[[7491, 7491], 'mapped', [97]], | |
[[7492, 7492], 'mapped', [592]], | |
[[7493, 7493], 'mapped', [593]], | |
[[7494, 7494], 'mapped', [7426]], | |
[[7495, 7495], 'mapped', [98]], | |
[[7496, 7496], 'mapped', [100]], | |
[[7497, 7497], 'mapped', [101]], | |
[[7498, 7498], 'mapped', [601]], | |
[[7499, 7499], 'mapped', [603]], | |
[[7500, 7500], 'mapped', [604]], | |
[[7501, 7501], 'mapped', [103]], | |
[[7502, 7502], 'valid'], | |
[[7503, 7503], 'mapped', [107]], | |
[[7504, 7504], 'mapped', [109]], | |
[[7505, 7505], 'mapped', [331]], | |
[[7506, 7506], 'mapped', [111]], | |
[[7507, 7507], 'mapped', [596]], | |
[[7508, 7508], 'mapped', [7446]], | |
[[7509, 7509], 'mapped', [7447]], | |
[[7510, 7510], 'mapped', [112]], | |
[[7511, 7511], 'mapped', [116]], | |
[[7512, 7512], 'mapped', [117]], | |
[[7513, 7513], 'mapped', [7453]], | |
[[7514, 7514], 'mapped', [623]], | |
[[7515, 7515], 'mapped', [118]], | |
[[7516, 7516], 'mapped', [7461]], | |
[[7517, 7517], 'mapped', [946]], | |
[[7518, 7518], 'mapped', [947]], | |
[[7519, 7519], 'mapped', [948]], | |
[[7520, 7520], 'mapped', [966]], | |
[[7521, 7521], 'mapped', [967]], | |
[[7522, 7522], 'mapped', [105]], | |
[[7523, 7523], 'mapped', [114]], | |
[[7524, 7524], 'mapped', [117]], | |
[[7525, 7525], 'mapped', [118]], | |
[[7526, 7526], 'mapped', [946]], | |
[[7527, 7527], 'mapped', [947]], | |
[[7528, 7528], 'mapped', [961]], | |
[[7529, 7529], 'mapped', [966]], | |
[[7530, 7530], 'mapped', [967]], | |
[[7531, 7531], 'valid'], | |
[[7532, 7543], 'valid'], | |
[[7544, 7544], 'mapped', [1085]], | |
[[7545, 7578], 'valid'], | |
[[7579, 7579], 'mapped', [594]], | |
[[7580, 7580], 'mapped', [99]], | |
[[7581, 7581], 'mapped', [597]], | |
[[7582, 7582], 'mapped', [240]], | |
[[7583, 7583], 'mapped', [604]], | |
[[7584, 7584], 'mapped', [102]], | |
[[7585, 7585], 'mapped', [607]], | |
[[7586, 7586], 'mapped', [609]], | |
[[7587, 7587], 'mapped', [613]], | |
[[7588, 7588], 'mapped', [616]], | |
[[7589, 7589], 'mapped', [617]], | |
[[7590, 7590], 'mapped', [618]], | |
[[7591, 7591], 'mapped', [7547]], | |
[[7592, 7592], 'mapped', [669]], | |
[[7593, 7593], 'mapped', [621]], | |
[[7594, 7594], 'mapped', [7557]], | |
[[7595, 7595], 'mapped', [671]], | |
[[7596, 7596], 'mapped', [625]], | |
[[7597, 7597], 'mapped', [624]], | |
[[7598, 7598], 'mapped', [626]], | |
[[7599, 7599], 'mapped', [627]], | |
[[7600, 7600], 'mapped', [628]], | |
[[7601, 7601], 'mapped', [629]], | |
[[7602, 7602], 'mapped', [632]], | |
[[7603, 7603], 'mapped', [642]], | |
[[7604, 7604], 'mapped', [643]], | |
[[7605, 7605], 'mapped', [427]], | |
[[7606, 7606], 'mapped', [649]], | |
[[7607, 7607], 'mapped', [650]], | |
[[7608, 7608], 'mapped', [7452]], | |
[[7609, 7609], 'mapped', [651]], | |
[[7610, 7610], 'mapped', [652]], | |
[[7611, 7611], 'mapped', [122]], | |
[[7612, 7612], 'mapped', [656]], | |
[[7613, 7613], 'mapped', [657]], | |
[[7614, 7614], 'mapped', [658]], | |
[[7615, 7615], 'mapped', [952]], | |
[[7616, 7619], 'valid'], | |
[[7620, 7626], 'valid'], | |
[[7627, 7654], 'valid'], | |
[[7655, 7669], 'valid'], | |
[[7670, 7675], 'disallowed'], | |
[[7676, 7676], 'valid'], | |
[[7677, 7677], 'valid'], | |
[[7678, 7679], 'valid'], | |
[[7680, 7680], 'mapped', [7681]], | |
[[7681, 7681], 'valid'], | |
[[7682, 7682], 'mapped', [7683]], | |
[[7683, 7683], 'valid'], | |
[[7684, 7684], 'mapped', [7685]], | |
[[7685, 7685], 'valid'], | |
[[7686, 7686], 'mapped', [7687]], | |
[[7687, 7687], 'valid'], | |
[[7688, 7688], 'mapped', [7689]], | |
[[7689, 7689], 'valid'], | |
[[7690, 7690], 'mapped', [7691]], | |
[[7691, 7691], 'valid'], | |
[[7692, 7692], 'mapped', [7693]], | |
[[7693, 7693], 'valid'], | |
[[7694, 7694], 'mapped', [7695]], | |
[[7695, 7695], 'valid'], | |
[[7696, 7696], 'mapped', [7697]], | |
[[7697, 7697], 'valid'], | |
[[7698, 7698], 'mapped', [7699]], | |
[[7699, 7699], 'valid'], | |
[[7700, 7700], 'mapped', [7701]], | |
[[7701, 7701], 'valid'], | |
[[7702, 7702], 'mapped', [7703]], | |
[[7703, 7703], 'valid'], | |
[[7704, 7704], 'mapped', [7705]], | |
[[7705, 7705], 'valid'], | |
[[7706, 7706], 'mapped', [7707]], | |
[[7707, 7707], 'valid'], | |
[[7708, 7708], 'mapped', [7709]], | |
[[7709, 7709], 'valid'], | |
[[7710, 7710], 'mapped', [7711]], | |
[[7711, 7711], 'valid'], | |
[[7712, 7712], 'mapped', [7713]], | |
[[7713, 7713], 'valid'], | |
[[7714, 7714], 'mapped', [7715]], | |
[[7715, 7715], 'valid'], | |
[[7716, 7716], 'mapped', [7717]], | |
[[7717, 7717], 'valid'], | |
[[7718, 7718], 'mapped', [7719]], | |
[[7719, 7719], 'valid'], | |
[[7720, 7720], 'mapped', [7721]], | |
[[7721, 7721], 'valid'], | |
[[7722, 7722], 'mapped', [7723]], | |
[[7723, 7723], 'valid'], | |
[[7724, 7724], 'mapped', [7725]], | |
[[7725, 7725], 'valid'], | |
[[7726, 7726], 'mapped', [7727]], | |
[[7727, 7727], 'valid'], | |
[[7728, 7728], 'mapped', [7729]], | |
[[7729, 7729], 'valid'], | |
[[7730, 7730], 'mapped', [7731]], | |
[[7731, 7731], 'valid'], | |
[[7732, 7732], 'mapped', [7733]], | |
[[7733, 7733], 'valid'], | |
[[7734, 7734], 'mapped', [7735]], | |
[[7735, 7735], 'valid'], | |
[[7736, 7736], 'mapped', [7737]], | |
[[7737, 7737], 'valid'], | |
[[7738, 7738], 'mapped', [7739]], | |
[[7739, 7739], 'valid'], | |
[[7740, 7740], 'mapped', [7741]], | |
[[7741, 7741], 'valid'], | |
[[7742, 7742], 'mapped', [7743]], | |
[[7743, 7743], 'valid'], | |
[[7744, 7744], 'mapped', [7745]], | |
[[7745, 7745], 'valid'], | |
[[7746, 7746], 'mapped', [7747]], | |
[[7747, 7747], 'valid'], | |
[[7748, 7748], 'mapped', [7749]], | |
[[7749, 7749], 'valid'], | |
[[7750, 7750], 'mapped', [7751]], | |
[[7751, 7751], 'valid'], | |
[[7752, 7752], 'mapped', [7753]], | |
[[7753, 7753], 'valid'], | |
[[7754, 7754], 'mapped', [7755]], | |
[[7755, 7755], 'valid'], | |
[[7756, 7756], 'mapped', [7757]], | |
[[7757, 7757], 'valid'], | |
[[7758, 7758], 'mapped', [7759]], | |
[[7759, 7759], 'valid'], | |
[[7760, 7760], 'mapped', [7761]], | |
[[7761, 7761], 'valid'], | |
[[7762, 7762], 'mapped', [7763]], | |
[[7763, 7763], 'valid'], | |
[[7764, 7764], 'mapped', [7765]], | |
[[7765, 7765], 'valid'], | |
[[7766, 7766], 'mapped', [7767]], | |
[[7767, 7767], 'valid'], | |
[[7768, 7768], 'mapped', [7769]], | |
[[7769, 7769], 'valid'], | |
[[7770, 7770], 'mapped', [7771]], | |
[[7771, 7771], 'valid'], | |
[[7772, 7772], 'mapped', [7773]], | |
[[7773, 7773], 'valid'], | |
[[7774, 7774], 'mapped', [7775]], | |
[[7775, 7775], 'valid'], | |
[[7776, 7776], 'mapped', [7777]], | |
[[7777, 7777], 'valid'], | |
[[7778, 7778], 'mapped', [7779]], | |
[[7779, 7779], 'valid'], | |
[[7780, 7780], 'mapped', [7781]], | |
[[7781, 7781], 'valid'], | |
[[7782, 7782], 'mapped', [7783]], | |
[[7783, 7783], 'valid'], | |
[[7784, 7784], 'mapped', [7785]], | |
[[7785, 7785], 'valid'], | |
[[7786, 7786], 'mapped', [7787]], | |
[[7787, 7787], 'valid'], | |
[[7788, 7788], 'mapped', [7789]], | |
[[7789, 7789], 'valid'], | |
[[7790, 7790], 'mapped', [7791]], | |
[[7791, 7791], 'valid'], | |
[[7792, 7792], 'mapped', [7793]], | |
[[7793, 7793], 'valid'], | |
[[7794, 7794], 'mapped', [7795]], | |
[[7795, 7795], 'valid'], | |
[[7796, 7796], 'mapped', [7797]], | |
[[7797, 7797], 'valid'], | |
[[7798, 7798], 'mapped', [7799]], | |
[[7799, 7799], 'valid'], | |
[[7800, 7800], 'mapped', [7801]], | |
[[7801, 7801], 'valid'], | |
[[7802, 7802], 'mapped', [7803]], | |
[[7803, 7803], 'valid'], | |
[[7804, 7804], 'mapped', [7805]], | |
[[7805, 7805], 'valid'], | |
[[7806, 7806], 'mapped', [7807]], | |
[[7807, 7807], 'valid'], | |
[[7808, 7808], 'mapped', [7809]], | |
[[7809, 7809], 'valid'], | |
[[7810, 7810], 'mapped', [7811]], | |
[[7811, 7811], 'valid'], | |
[[7812, 7812], 'mapped', [7813]], | |
[[7813, 7813], 'valid'], | |
[[7814, 7814], 'mapped', [7815]], | |
[[7815, 7815], 'valid'], | |
[[7816, 7816], 'mapped', [7817]], | |
[[7817, 7817], 'valid'], | |
[[7818, 7818], 'mapped', [7819]], | |
[[7819, 7819], 'valid'], | |
[[7820, 7820], 'mapped', [7821]], | |
[[7821, 7821], 'valid'], | |
[[7822, 7822], 'mapped', [7823]], | |
[[7823, 7823], 'valid'], | |
[[7824, 7824], 'mapped', [7825]], | |
[[7825, 7825], 'valid'], | |
[[7826, 7826], 'mapped', [7827]], | |
[[7827, 7827], 'valid'], | |
[[7828, 7828], 'mapped', [7829]], | |
[[7829, 7833], 'valid'], | |
[[7834, 7834], 'mapped', [97, 702]], | |
[[7835, 7835], 'mapped', [7777]], | |
[[7836, 7837], 'valid'], | |
[[7838, 7838], 'mapped', [115, 115]], | |
[[7839, 7839], 'valid'], | |
[[7840, 7840], 'mapped', [7841]], | |
[[7841, 7841], 'valid'], | |
[[7842, 7842], 'mapped', [7843]], | |
[[7843, 7843], 'valid'], | |
[[7844, 7844], 'mapped', [7845]], | |
[[7845, 7845], 'valid'], | |
[[7846, 7846], 'mapped', [7847]], | |
[[7847, 7847], 'valid'], | |
[[7848, 7848], 'mapped', [7849]], | |
[[7849, 7849], 'valid'], | |
[[7850, 7850], 'mapped', [7851]], | |
[[7851, 7851], 'valid'], | |
[[7852, 7852], 'mapped', [7853]], | |
[[7853, 7853], 'valid'], | |
[[7854, 7854], 'mapped', [7855]], | |
[[7855, 7855], 'valid'], | |
[[7856, 7856], 'mapped', [7857]], | |
[[7857, 7857], 'valid'], | |
[[7858, 7858], 'mapped', [7859]], | |
[[7859, 7859], 'valid'], | |
[[7860, 7860], 'mapped', [7861]], | |
[[7861, 7861], 'valid'], | |
[[7862, 7862], 'mapped', [7863]], | |
[[7863, 7863], 'valid'], | |
[[7864, 7864], 'mapped', [7865]], | |
[[7865, 7865], 'valid'], | |
[[7866, 7866], 'mapped', [7867]], | |
[[7867, 7867], 'valid'], | |
[[7868, 7868], 'mapped', [7869]], | |
[[7869, 7869], 'valid'], | |
[[7870, 7870], 'mapped', [7871]], | |
[[7871, 7871], 'valid'], | |
[[7872, 7872], 'mapped', [7873]], | |
[[7873, 7873], 'valid'], | |
[[7874, 7874], 'mapped', [7875]], | |
[[7875, 7875], 'valid'], | |
[[7876, 7876], 'mapped', [7877]], | |
[[7877, 7877], 'valid'], | |
[[7878, 7878], 'mapped', [7879]], | |
[[7879, 7879], 'valid'], | |
[[7880, 7880], 'mapped', [7881]], | |
[[7881, 7881], 'valid'], | |
[[7882, 7882], 'mapped', [7883]], | |
[[7883, 7883], 'valid'], | |
[[7884, 7884], 'mapped', [7885]], | |
[[7885, 7885], 'valid'], | |
[[7886, 7886], 'mapped', [7887]], | |
[[7887, 7887], 'valid'], | |
[[7888, 7888], 'mapped', [7889]], | |
[[7889, 7889], 'valid'], | |
[[7890, 7890], 'mapped', [7891]], | |
[[7891, 7891], 'valid'], | |
[[7892, 7892], 'mapped', [7893]], | |
[[7893, 7893], 'valid'], | |
[[7894, 7894], 'mapped', [7895]], | |
[[7895, 7895], 'valid'], | |
[[7896, 7896], 'mapped', [7897]], | |
[[7897, 7897], 'valid'], | |
[[7898, 7898], 'mapped', [7899]], | |
[[7899, 7899], 'valid'], | |
[[7900, 7900], 'mapped', [7901]], | |
[[7901, 7901], 'valid'], | |
[[7902, 7902], 'mapped', [7903]], | |
[[7903, 7903], 'valid'], | |
[[7904, 7904], 'mapped', [7905]], | |
[[7905, 7905], 'valid'], | |
[[7906, 7906], 'mapped', [7907]], | |
[[7907, 7907], 'valid'], | |
[[7908, 7908], 'mapped', [7909]], | |
[[7909, 7909], 'valid'], | |
[[7910, 7910], 'mapped', [7911]], | |
[[7911, 7911], 'valid'], | |
[[7912, 7912], 'mapped', [7913]], | |
[[7913, 7913], 'valid'], | |
[[7914, 7914], 'mapped', [7915]], | |
[[7915, 7915], 'valid'], | |
[[7916, 7916], 'mapped', [7917]], | |
[[7917, 7917], 'valid'], | |
[[7918, 7918], 'mapped', [7919]], | |
[[7919, 7919], 'valid'], | |
[[7920, 7920], 'mapped', [7921]], | |
[[7921, 7921], 'valid'], | |
[[7922, 7922], 'mapped', [7923]], | |
[[7923, 7923], 'valid'], | |
[[7924, 7924], 'mapped', [7925]], | |
[[7925, 7925], 'valid'], | |
[[7926, 7926], 'mapped', [7927]], | |
[[7927, 7927], 'valid'], | |
[[7928, 7928], 'mapped', [7929]], | |
[[7929, 7929], 'valid'], | |
[[7930, 7930], 'mapped', [7931]], | |
[[7931, 7931], 'valid'], | |
[[7932, 7932], 'mapped', [7933]], | |
[[7933, 7933], 'valid'], | |
[[7934, 7934], 'mapped', [7935]], | |
[[7935, 7935], 'valid'], | |
[[7936, 7943], 'valid'], | |
[[7944, 7944], 'mapped', [7936]], | |
[[7945, 7945], 'mapped', [7937]], | |
[[7946, 7946], 'mapped', [7938]], | |
[[7947, 7947], 'mapped', [7939]], | |
[[7948, 7948], 'mapped', [7940]], | |
[[7949, 7949], 'mapped', [7941]], | |
[[7950, 7950], 'mapped', [7942]], | |
[[7951, 7951], 'mapped', [7943]], | |
[[7952, 7957], 'valid'], | |
[[7958, 7959], 'disallowed'], | |
[[7960, 7960], 'mapped', [7952]], | |
[[7961, 7961], 'mapped', [7953]], | |
[[7962, 7962], 'mapped', [7954]], | |
[[7963, 7963], 'mapped', [7955]], | |
[[7964, 7964], 'mapped', [7956]], | |
[[7965, 7965], 'mapped', [7957]], | |
[[7966, 7967], 'disallowed'], | |
[[7968, 7975], 'valid'], | |
[[7976, 7976], 'mapped', [7968]], | |
[[7977, 7977], 'mapped', [7969]], | |
[[7978, 7978], 'mapped', [7970]], | |
[[7979, 7979], 'mapped', [7971]], | |
[[7980, 7980], 'mapped', [7972]], | |
[[7981, 7981], 'mapped', [7973]], | |
[[7982, 7982], 'mapped', [7974]], | |
[[7983, 7983], 'mapped', [7975]], | |
[[7984, 7991], 'valid'], | |
[[7992, 7992], 'mapped', [7984]], | |
[[7993, 7993], 'mapped', [7985]], | |
[[7994, 7994], 'mapped', [7986]], | |
[[7995, 7995], 'mapped', [7987]], | |
[[7996, 7996], 'mapped', [7988]], | |
[[7997, 7997], 'mapped', [7989]], | |
[[7998, 7998], 'mapped', [7990]], | |
[[7999, 7999], 'mapped', [7991]], | |
[[8000, 8005], 'valid'], | |
[[8006, 8007], 'disallowed'], | |
[[8008, 8008], 'mapped', [8000]], | |
[[8009, 8009], 'mapped', [8001]], | |
[[8010, 8010], 'mapped', [8002]], | |
[[8011, 8011], 'mapped', [8003]], | |
[[8012, 8012], 'mapped', [8004]], | |
[[8013, 8013], 'mapped', [8005]], | |
[[8014, 8015], 'disallowed'], | |
[[8016, 8023], 'valid'], | |
[[8024, 8024], 'disallowed'], | |
[[8025, 8025], 'mapped', [8017]], | |
[[8026, 8026], 'disallowed'], | |
[[8027, 8027], 'mapped', [8019]], | |
[[8028, 8028], 'disallowed'], | |
[[8029, 8029], 'mapped', [8021]], | |
[[8030, 8030], 'disallowed'], | |
[[8031, 8031], 'mapped', [8023]], | |
[[8032, 8039], 'valid'], | |
[[8040, 8040], 'mapped', [8032]], | |
[[8041, 8041], 'mapped', [8033]], | |
[[8042, 8042], 'mapped', [8034]], | |
[[8043, 8043], 'mapped', [8035]], | |
[[8044, 8044], 'mapped', [8036]], | |
[[8045, 8045], 'mapped', [8037]], | |
[[8046, 8046], 'mapped', [8038]], | |
[[8047, 8047], 'mapped', [8039]], | |
[[8048, 8048], 'valid'], | |
[[8049, 8049], 'mapped', [940]], | |
[[8050, 8050], 'valid'], | |
[[8051, 8051], 'mapped', [941]], | |
[[8052, 8052], 'valid'], | |
[[8053, 8053], 'mapped', [942]], | |
[[8054, 8054], 'valid'], | |
[[8055, 8055], 'mapped', [943]], | |
[[8056, 8056], 'valid'], | |
[[8057, 8057], 'mapped', [972]], | |
[[8058, 8058], 'valid'], | |
[[8059, 8059], 'mapped', [973]], | |
[[8060, 8060], 'valid'], | |
[[8061, 8061], 'mapped', [974]], | |
[[8062, 8063], 'disallowed'], | |
[[8064, 8064], 'mapped', [7936, 953]], | |
[[8065, 8065], 'mapped', [7937, 953]], | |
[[8066, 8066], 'mapped', [7938, 953]], | |
[[8067, 8067], 'mapped', [7939, 953]], | |
[[8068, 8068], 'mapped', [7940, 953]], | |
[[8069, 8069], 'mapped', [7941, 953]], | |
[[8070, 8070], 'mapped', [7942, 953]], | |
[[8071, 8071], 'mapped', [7943, 953]], | |
[[8072, 8072], 'mapped', [7936, 953]], | |
[[8073, 8073], 'mapped', [7937, 953]], | |
[[8074, 8074], 'mapped', [7938, 953]], | |
[[8075, 8075], 'mapped', [7939, 953]], | |
[[8076, 8076], 'mapped', [7940, 953]], | |
[[8077, 8077], 'mapped', [7941, 953]], | |
[[8078, 8078], 'mapped', [7942, 953]], | |
[[8079, 8079], 'mapped', [7943, 953]], | |
[[8080, 8080], 'mapped', [7968, 953]], | |
[[8081, 8081], 'mapped', [7969, 953]], | |
[[8082, 8082], 'mapped', [7970, 953]], | |
[[8083, 8083], 'mapped', [7971, 953]], | |
[[8084, 8084], 'mapped', [7972, 953]], | |
[[8085, 8085], 'mapped', [7973, 953]], | |
[[8086, 8086], 'mapped', [7974, 953]], | |
[[8087, 8087], 'mapped', [7975, 953]], | |
[[8088, 8088], 'mapped', [7968, 953]], | |
[[8089, 8089], 'mapped', [7969, 953]], | |
[[8090, 8090], 'mapped', [7970, 953]], | |
[[8091, 8091], 'mapped', [7971, 953]], | |
[[8092, 8092], 'mapped', [7972, 953]], | |
[[8093, 8093], 'mapped', [7973, 953]], | |
[[8094, 8094], 'mapped', [7974, 953]], | |
[[8095, 8095], 'mapped', [7975, 953]], | |
[[8096, 8096], 'mapped', [8032, 953]], | |
[[8097, 8097], 'mapped', [8033, 953]], | |
[[8098, 8098], 'mapped', [8034, 953]], | |
[[8099, 8099], 'mapped', [8035, 953]], | |
[[8100, 8100], 'mapped', [8036, 953]], | |
[[8101, 8101], 'mapped', [8037, 953]], | |
[[8102, 8102], 'mapped', [8038, 953]], | |
[[8103, 8103], 'mapped', [8039, 953]], | |
[[8104, 8104], 'mapped', [8032, 953]], | |
[[8105, 8105], 'mapped', [8033, 953]], | |
[[8106, 8106], 'mapped', [8034, 953]], | |
[[8107, 8107], 'mapped', [8035, 953]], | |
[[8108, 8108], 'mapped', [8036, 953]], | |
[[8109, 8109], 'mapped', [8037, 953]], | |
[[8110, 8110], 'mapped', [8038, 953]], | |
[[8111, 8111], 'mapped', [8039, 953]], | |
[[8112, 8113], 'valid'], | |
[[8114, 8114], 'mapped', [8048, 953]], | |
[[8115, 8115], 'mapped', [945, 953]], | |
[[8116, 8116], 'mapped', [940, 953]], | |
[[8117, 8117], 'disallowed'], | |
[[8118, 8118], 'valid'], | |
[[8119, 8119], 'mapped', [8118, 953]], | |
[[8120, 8120], 'mapped', [8112]], | |
[[8121, 8121], 'mapped', [8113]], | |
[[8122, 8122], 'mapped', [8048]], | |
[[8123, 8123], 'mapped', [940]], | |
[[8124, 8124], 'mapped', [945, 953]], | |
[[8125, 8125], 'disallowed_STD3_mapped', [32, 787]], | |
[[8126, 8126], 'mapped', [953]], | |
[[8127, 8127], 'disallowed_STD3_mapped', [32, 787]], | |
[[8128, 8128], 'disallowed_STD3_mapped', [32, 834]], | |
[[8129, 8129], 'disallowed_STD3_mapped', [32, 776, 834]], | |
[[8130, 8130], 'mapped', [8052, 953]], | |
[[8131, 8131], 'mapped', [951, 953]], | |
[[8132, 8132], 'mapped', [942, 953]], | |
[[8133, 8133], 'disallowed'], | |
[[8134, 8134], 'valid'], | |
[[8135, 8135], 'mapped', [8134, 953]], | |
[[8136, 8136], 'mapped', [8050]], | |
[[8137, 8137], 'mapped', [941]], | |
[[8138, 8138], 'mapped', [8052]], | |
[[8139, 8139], 'mapped', [942]], | |
[[8140, 8140], 'mapped', [951, 953]], | |
[[8141, 8141], 'disallowed_STD3_mapped', [32, 787, 768]], | |
[[8142, 8142], 'disallowed_STD3_mapped', [32, 787, 769]], | |
[[8143, 8143], 'disallowed_STD3_mapped', [32, 787, 834]], | |
[[8144, 8146], 'valid'], | |
[[8147, 8147], 'mapped', [912]], | |
[[8148, 8149], 'disallowed'], | |
[[8150, 8151], 'valid'], | |
[[8152, 8152], 'mapped', [8144]], | |
[[8153, 8153], 'mapped', [8145]], | |
[[8154, 8154], 'mapped', [8054]], | |
[[8155, 8155], 'mapped', [943]], | |
[[8156, 8156], 'disallowed'], | |
[[8157, 8157], 'disallowed_STD3_mapped', [32, 788, 768]], | |
[[8158, 8158], 'disallowed_STD3_mapped', [32, 788, 769]], | |
[[8159, 8159], 'disallowed_STD3_mapped', [32, 788, 834]], | |
[[8160, 8162], 'valid'], | |
[[8163, 8163], 'mapped', [944]], | |
[[8164, 8167], 'valid'], | |
[[8168, 8168], 'mapped', [8160]], | |
[[8169, 8169], 'mapped', [8161]], | |
[[8170, 8170], 'mapped', [8058]], | |
[[8171, 8171], 'mapped', [973]], | |
[[8172, 8172], 'mapped', [8165]], | |
[[8173, 8173], 'disallowed_STD3_mapped', [32, 776, 768]], | |
[[8174, 8174], 'disallowed_STD3_mapped', [32, 776, 769]], | |
[[8175, 8175], 'disallowed_STD3_mapped', [96]], | |
[[8176, 8177], 'disallowed'], | |
[[8178, 8178], 'mapped', [8060, 953]], | |
[[8179, 8179], 'mapped', [969, 953]], | |
[[8180, 8180], 'mapped', [974, 953]], | |
[[8181, 8181], 'disallowed'], | |
[[8182, 8182], 'valid'], | |
[[8183, 8183], 'mapped', [8182, 953]], | |
[[8184, 8184], 'mapped', [8056]], | |
[[8185, 8185], 'mapped', [972]], | |
[[8186, 8186], 'mapped', [8060]], | |
[[8187, 8187], 'mapped', [974]], | |
[[8188, 8188], 'mapped', [969, 953]], | |
[[8189, 8189], 'disallowed_STD3_mapped', [32, 769]], | |
[[8190, 8190], 'disallowed_STD3_mapped', [32, 788]], | |
[[8191, 8191], 'disallowed'], | |
[[8192, 8202], 'disallowed_STD3_mapped', [32]], | |
[[8203, 8203], 'ignored'], | |
[[8204, 8205], 'deviation', []], | |
[[8206, 8207], 'disallowed'], | |
[[8208, 8208], 'valid', [], 'NV8'], | |
[[8209, 8209], 'mapped', [8208]], | |
[[8210, 8214], 'valid', [], 'NV8'], | |
[[8215, 8215], 'disallowed_STD3_mapped', [32, 819]], | |
[[8216, 8227], 'valid', [], 'NV8'], | |
[[8228, 8230], 'disallowed'], | |
[[8231, 8231], 'valid', [], 'NV8'], | |
[[8232, 8238], 'disallowed'], | |
[[8239, 8239], 'disallowed_STD3_mapped', [32]], | |
[[8240, 8242], 'valid', [], 'NV8'], | |
[[8243, 8243], 'mapped', [8242, 8242]], | |
[[8244, 8244], 'mapped', [8242, 8242, 8242]], | |
[[8245, 8245], 'valid', [], 'NV8'], | |
[[8246, 8246], 'mapped', [8245, 8245]], | |
[[8247, 8247], 'mapped', [8245, 8245, 8245]], | |
[[8248, 8251], 'valid', [], 'NV8'], | |
[[8252, 8252], 'disallowed_STD3_mapped', [33, 33]], | |
[[8253, 8253], 'valid', [], 'NV8'], | |
[[8254, 8254], 'disallowed_STD3_mapped', [32, 773]], | |
[[8255, 8262], 'valid', [], 'NV8'], | |
[[8263, 8263], 'disallowed_STD3_mapped', [63, 63]], | |
[[8264, 8264], 'disallowed_STD3_mapped', [63, 33]], | |
[[8265, 8265], 'disallowed_STD3_mapped', [33, 63]], | |
[[8266, 8269], 'valid', [], 'NV8'], | |
[[8270, 8274], 'valid', [], 'NV8'], | |
[[8275, 8276], 'valid', [], 'NV8'], | |
[[8277, 8278], 'valid', [], 'NV8'], | |
[[8279, 8279], 'mapped', [8242, 8242, 8242, 8242]], | |
[[8280, 8286], 'valid', [], 'NV8'], | |
[[8287, 8287], 'disallowed_STD3_mapped', [32]], | |
[[8288, 8288], 'ignored'], | |
[[8289, 8291], 'disallowed'], | |
[[8292, 8292], 'ignored'], | |
[[8293, 8293], 'disallowed'], | |
[[8294, 8297], 'disallowed'], | |
[[8298, 8303], 'disallowed'], | |
[[8304, 8304], 'mapped', [48]], | |
[[8305, 8305], 'mapped', [105]], | |
[[8306, 8307], 'disallowed'], | |
[[8308, 8308], 'mapped', [52]], | |
[[8309, 8309], 'mapped', [53]], | |
[[8310, 8310], 'mapped', [54]], | |
[[8311, 8311], 'mapped', [55]], | |
[[8312, 8312], 'mapped', [56]], | |
[[8313, 8313], 'mapped', [57]], | |
[[8314, 8314], 'disallowed_STD3_mapped', [43]], | |
[[8315, 8315], 'mapped', [8722]], | |
[[8316, 8316], 'disallowed_STD3_mapped', [61]], | |
[[8317, 8317], 'disallowed_STD3_mapped', [40]], | |
[[8318, 8318], 'disallowed_STD3_mapped', [41]], | |
[[8319, 8319], 'mapped', [110]], | |
[[8320, 8320], 'mapped', [48]], | |
[[8321, 8321], 'mapped', [49]], | |
[[8322, 8322], 'mapped', [50]], | |
[[8323, 8323], 'mapped', [51]], | |
[[8324, 8324], 'mapped', [52]], | |
[[8325, 8325], 'mapped', [53]], | |
[[8326, 8326], 'mapped', [54]], | |
[[8327, 8327], 'mapped', [55]], | |
[[8328, 8328], 'mapped', [56]], | |
[[8329, 8329], 'mapped', [57]], | |
[[8330, 8330], 'disallowed_STD3_mapped', [43]], | |
[[8331, 8331], 'mapped', [8722]], | |
[[8332, 8332], 'disallowed_STD3_mapped', [61]], | |
[[8333, 8333], 'disallowed_STD3_mapped', [40]], | |
[[8334, 8334], 'disallowed_STD3_mapped', [41]], | |
[[8335, 8335], 'disallowed'], | |
[[8336, 8336], 'mapped', [97]], | |
[[8337, 8337], 'mapped', [101]], | |
[[8338, 8338], 'mapped', [111]], | |
[[8339, 8339], 'mapped', [120]], | |
[[8340, 8340], 'mapped', [601]], | |
[[8341, 8341], 'mapped', [104]], | |
[[8342, 8342], 'mapped', [107]], | |
[[8343, 8343], 'mapped', [108]], | |
[[8344, 8344], 'mapped', [109]], | |
[[8345, 8345], 'mapped', [110]], | |
[[8346, 8346], 'mapped', [112]], | |
[[8347, 8347], 'mapped', [115]], | |
[[8348, 8348], 'mapped', [116]], | |
[[8349, 8351], 'disallowed'], | |
[[8352, 8359], 'valid', [], 'NV8'], | |
[[8360, 8360], 'mapped', [114, 115]], | |
[[8361, 8362], 'valid', [], 'NV8'], | |
[[8363, 8363], 'valid', [], 'NV8'], | |
[[8364, 8364], 'valid', [], 'NV8'], | |
[[8365, 8367], 'valid', [], 'NV8'], | |
[[8368, 8369], 'valid', [], 'NV8'], | |
[[8370, 8373], 'valid', [], 'NV8'], | |
[[8374, 8376], 'valid', [], 'NV8'], | |
[[8377, 8377], 'valid', [], 'NV8'], | |
[[8378, 8378], 'valid', [], 'NV8'], | |
[[8379, 8381], 'valid', [], 'NV8'], | |
[[8382, 8382], 'valid', [], 'NV8'], | |
[[8383, 8399], 'disallowed'], | |
[[8400, 8417], 'valid', [], 'NV8'], | |
[[8418, 8419], 'valid', [], 'NV8'], | |
[[8420, 8426], 'valid', [], 'NV8'], | |
[[8427, 8427], 'valid', [], 'NV8'], | |
[[8428, 8431], 'valid', [], 'NV8'], | |
[[8432, 8432], 'valid', [], 'NV8'], | |
[[8433, 8447], 'disallowed'], | |
[[8448, 8448], 'disallowed_STD3_mapped', [97, 47, 99]], | |
[[8449, 8449], 'disallowed_STD3_mapped', [97, 47, 115]], | |
[[8450, 8450], 'mapped', [99]], | |
[[8451, 8451], 'mapped', [176, 99]], | |
[[8452, 8452], 'valid', [], 'NV8'], | |
[[8453, 8453], 'disallowed_STD3_mapped', [99, 47, 111]], | |
[[8454, 8454], 'disallowed_STD3_mapped', [99, 47, 117]], | |
[[8455, 8455], 'mapped', [603]], | |
[[8456, 8456], 'valid', [], 'NV8'], | |
[[8457, 8457], 'mapped', [176, 102]], | |
[[8458, 8458], 'mapped', [103]], | |
[[8459, 8462], 'mapped', [104]], | |
[[8463, 8463], 'mapped', [295]], | |
[[8464, 8465], 'mapped', [105]], | |
[[8466, 8467], 'mapped', [108]], | |
[[8468, 8468], 'valid', [], 'NV8'], | |
[[8469, 8469], 'mapped', [110]], | |
[[8470, 8470], 'mapped', [110, 111]], | |
[[8471, 8472], 'valid', [], 'NV8'], | |
[[8473, 8473], 'mapped', [112]], | |
[[8474, 8474], 'mapped', [113]], | |
[[8475, 8477], 'mapped', [114]], | |
[[8478, 8479], 'valid', [], 'NV8'], | |
[[8480, 8480], 'mapped', [115, 109]], | |
[[8481, 8481], 'mapped', [116, 101, 108]], | |
[[8482, 8482], 'mapped', [116, 109]], | |
[[8483, 8483], 'valid', [], 'NV8'], | |
[[8484, 8484], 'mapped', [122]], | |
[[8485, 8485], 'valid', [], 'NV8'], | |
[[8486, 8486], 'mapped', [969]], | |
[[8487, 8487], 'valid', [], 'NV8'], | |
[[8488, 8488], 'mapped', [122]], | |
[[8489, 8489], 'valid', [], 'NV8'], | |
[[8490, 8490], 'mapped', [107]], | |
[[8491, 8491], 'mapped', [229]], | |
[[8492, 8492], 'mapped', [98]], | |
[[8493, 8493], 'mapped', [99]], | |
[[8494, 8494], 'valid', [], 'NV8'], | |
[[8495, 8496], 'mapped', [101]], | |
[[8497, 8497], 'mapped', [102]], | |
[[8498, 8498], 'disallowed'], | |
[[8499, 8499], 'mapped', [109]], | |
[[8500, 8500], 'mapped', [111]], | |
[[8501, 8501], 'mapped', [1488]], | |
[[8502, 8502], 'mapped', [1489]], | |
[[8503, 8503], 'mapped', [1490]], | |
[[8504, 8504], 'mapped', [1491]], | |
[[8505, 8505], 'mapped', [105]], | |
[[8506, 8506], 'valid', [], 'NV8'], | |
[[8507, 8507], 'mapped', [102, 97, 120]], | |
[[8508, 8508], 'mapped', [960]], | |
[[8509, 8510], 'mapped', [947]], | |
[[8511, 8511], 'mapped', [960]], | |
[[8512, 8512], 'mapped', [8721]], | |
[[8513, 8516], 'valid', [], 'NV8'], | |
[[8517, 8518], 'mapped', [100]], | |
[[8519, 8519], 'mapped', [101]], | |
[[8520, 8520], 'mapped', [105]], | |
[[8521, 8521], 'mapped', [106]], | |
[[8522, 8523], 'valid', [], 'NV8'], | |
[[8524, 8524], 'valid', [], 'NV8'], | |
[[8525, 8525], 'valid', [], 'NV8'], | |
[[8526, 8526], 'valid'], | |
[[8527, 8527], 'valid', [], 'NV8'], | |
[[8528, 8528], 'mapped', [49, 8260, 55]], | |
[[8529, 8529], 'mapped', [49, 8260, 57]], | |
[[8530, 8530], 'mapped', [49, 8260, 49, 48]], | |
[[8531, 8531], 'mapped', [49, 8260, 51]], | |
[[8532, 8532], 'mapped', [50, 8260, 51]], | |
[[8533, 8533], 'mapped', [49, 8260, 53]], | |
[[8534, 8534], 'mapped', [50, 8260, 53]], | |
[[8535, 8535], 'mapped', [51, 8260, 53]], | |
[[8536, 8536], 'mapped', [52, 8260, 53]], | |
[[8537, 8537], 'mapped', [49, 8260, 54]], | |
[[8538, 8538], 'mapped', [53, 8260, 54]], | |
[[8539, 8539], 'mapped', [49, 8260, 56]], | |
[[8540, 8540], 'mapped', [51, 8260, 56]], | |
[[8541, 8541], 'mapped', [53, 8260, 56]], | |
[[8542, 8542], 'mapped', [55, 8260, 56]], | |
[[8543, 8543], 'mapped', [49, 8260]], | |
[[8544, 8544], 'mapped', [105]], | |
[[8545, 8545], 'mapped', [105, 105]], | |
[[8546, 8546], 'mapped', [105, 105, 105]], | |
[[8547, 8547], 'mapped', [105, 118]], | |
[[8548, 8548], 'mapped', [118]], | |
[[8549, 8549], 'mapped', [118, 105]], | |
[[8550, 8550], 'mapped', [118, 105, 105]], | |
[[8551, 8551], 'mapped', [118, 105, 105, 105]], | |
[[8552, 8552], 'mapped', [105, 120]], | |
[[8553, 8553], 'mapped', [120]], | |
[[8554, 8554], 'mapped', [120, 105]], | |
[[8555, 8555], 'mapped', [120, 105, 105]], | |
[[8556, 8556], 'mapped', [108]], | |
[[8557, 8557], 'mapped', [99]], | |
[[8558, 8558], 'mapped', [100]], | |
[[8559, 8559], 'mapped', [109]], | |
[[8560, 8560], 'mapped', [105]], | |
[[8561, 8561], 'mapped', [105, 105]], | |
[[8562, 8562], 'mapped', [105, 105, 105]], | |
[[8563, 8563], 'mapped', [105, 118]], | |
[[8564, 8564], 'mapped', [118]], | |
[[8565, 8565], 'mapped', [118, 105]], | |
[[8566, 8566], 'mapped', [118, 105, 105]], | |
[[8567, 8567], 'mapped', [118, 105, 105, 105]], | |
[[8568, 8568], 'mapped', [105, 120]], | |
[[8569, 8569], 'mapped', [120]], | |
[[8570, 8570], 'mapped', [120, 105]], | |
[[8571, 8571], 'mapped', [120, 105, 105]], | |
[[8572, 8572], 'mapped', [108]], | |
[[8573, 8573], 'mapped', [99]], | |
[[8574, 8574], 'mapped', [100]], | |
[[8575, 8575], 'mapped', [109]], | |
[[8576, 8578], 'valid', [], 'NV8'], | |
[[8579, 8579], 'disallowed'], | |
[[8580, 8580], 'valid'], | |
[[8581, 8584], 'valid', [], 'NV8'], | |
[[8585, 8585], 'mapped', [48, 8260, 51]], | |
[[8586, 8587], 'valid', [], 'NV8'], | |
[[8588, 8591], 'disallowed'], | |
[[8592, 8682], 'valid', [], 'NV8'], | |
[[8683, 8691], 'valid', [], 'NV8'], | |
[[8692, 8703], 'valid', [], 'NV8'], | |
[[8704, 8747], 'valid', [], 'NV8'], | |
[[8748, 8748], 'mapped', [8747, 8747]], | |
[[8749, 8749], 'mapped', [8747, 8747, 8747]], | |
[[8750, 8750], 'valid', [], 'NV8'], | |
[[8751, 8751], 'mapped', [8750, 8750]], | |
[[8752, 8752], 'mapped', [8750, 8750, 8750]], | |
[[8753, 8799], 'valid', [], 'NV8'], | |
[[8800, 8800], 'disallowed_STD3_valid'], | |
[[8801, 8813], 'valid', [], 'NV8'], | |
[[8814, 8815], 'disallowed_STD3_valid'], | |
[[8816, 8945], 'valid', [], 'NV8'], | |
[[8946, 8959], 'valid', [], 'NV8'], | |
[[8960, 8960], 'valid', [], 'NV8'], | |
[[8961, 8961], 'valid', [], 'NV8'], | |
[[8962, 9000], 'valid', [], 'NV8'], | |
[[9001, 9001], 'mapped', [12296]], | |
[[9002, 9002], 'mapped', [12297]], | |
[[9003, 9082], 'valid', [], 'NV8'], | |
[[9083, 9083], 'valid', [], 'NV8'], | |
[[9084, 9084], 'valid', [], 'NV8'], | |
[[9085, 9114], 'valid', [], 'NV8'], | |
[[9115, 9166], 'valid', [], 'NV8'], | |
[[9167, 9168], 'valid', [], 'NV8'], | |
[[9169, 9179], 'valid', [], 'NV8'], | |
[[9180, 9191], 'valid', [], 'NV8'], | |
[[9192, 9192], 'valid', [], 'NV8'], | |
[[9193, 9203], 'valid', [], 'NV8'], | |
[[9204, 9210], 'valid', [], 'NV8'], | |
[[9211, 9215], 'disallowed'], | |
[[9216, 9252], 'valid', [], 'NV8'], | |
[[9253, 9254], 'valid', [], 'NV8'], | |
[[9255, 9279], 'disallowed'], | |
[[9280, 9290], 'valid', [], 'NV8'], | |
[[9291, 9311], 'disallowed'], | |
[[9312, 9312], 'mapped', [49]], | |
[[9313, 9313], 'mapped', [50]], | |
[[9314, 9314], 'mapped', [51]], | |
[[9315, 9315], 'mapped', [52]], | |
[[9316, 9316], 'mapped', [53]], | |
[[9317, 9317], 'mapped', [54]], | |
[[9318, 9318], 'mapped', [55]], | |
[[9319, 9319], 'mapped', [56]], | |
[[9320, 9320], 'mapped', [57]], | |
[[9321, 9321], 'mapped', [49, 48]], | |
[[9322, 9322], 'mapped', [49, 49]], | |
[[9323, 9323], 'mapped', [49, 50]], | |
[[9324, 9324], 'mapped', [49, 51]], | |
[[9325, 9325], 'mapped', [49, 52]], | |
[[9326, 9326], 'mapped', [49, 53]], | |
[[9327, 9327], 'mapped', [49, 54]], | |
[[9328, 9328], 'mapped', [49, 55]], | |
[[9329, 9329], 'mapped', [49, 56]], | |
[[9330, 9330], 'mapped', [49, 57]], | |
[[9331, 9331], 'mapped', [50, 48]], | |
[[9332, 9332], 'disallowed_STD3_mapped', [40, 49, 41]], | |
[[9333, 9333], 'disallowed_STD3_mapped', [40, 50, 41]], | |
[[9334, 9334], 'disallowed_STD3_mapped', [40, 51, 41]], | |
[[9335, 9335], 'disallowed_STD3_mapped', [40, 52, 41]], | |
[[9336, 9336], 'disallowed_STD3_mapped', [40, 53, 41]], | |
[[9337, 9337], 'disallowed_STD3_mapped', [40, 54, 41]], | |
[[9338, 9338], 'disallowed_STD3_mapped', [40, 55, 41]], | |
[[9339, 9339], 'disallowed_STD3_mapped', [40, 56, 41]], | |
[[9340, 9340], 'disallowed_STD3_mapped', [40, 57, 41]], | |
[[9341, 9341], 'disallowed_STD3_mapped', [40, 49, 48, 41]], | |
[[9342, 9342], 'disallowed_STD3_mapped', [40, 49, 49, 41]], | |
[[9343, 9343], 'disallowed_STD3_mapped', [40, 49, 50, 41]], | |
[[9344, 9344], 'disallowed_STD3_mapped', [40, 49, 51, 41]], | |
[[9345, 9345], 'disallowed_STD3_mapped', [40, 49, 52, 41]], | |
[[9346, 9346], 'disallowed_STD3_mapped', [40, 49, 53, 41]], | |
[[9347, 9347], 'disallowed_STD3_mapped', [40, 49, 54, 41]], | |
[[9348, 9348], 'disallowed_STD3_mapped', [40, 49, 55, 41]], | |
[[9349, 9349], 'disallowed_STD3_mapped', [40, 49, 56, 41]], | |
[[9350, 9350], 'disallowed_STD3_mapped', [40, 49, 57, 41]], | |
[[9351, 9351], 'disallowed_STD3_mapped', [40, 50, 48, 41]], | |
[[9352, 9371], 'disallowed'], | |
[[9372, 9372], 'disallowed_STD3_mapped', [40, 97, 41]], | |
[[9373, 9373], 'disallowed_STD3_mapped', [40, 98, 41]], | |
[[9374, 9374], 'disallowed_STD3_mapped', [40, 99, 41]], | |
[[9375, 9375], 'disallowed_STD3_mapped', [40, 100, 41]], | |
[[9376, 9376], 'disallowed_STD3_mapped', [40, 101, 41]], | |
[[9377, 9377], 'disallowed_STD3_mapped', [40, 102, 41]], | |
[[9378, 9378], 'disallowed_STD3_mapped', [40, 103, 41]], | |
[[9379, 9379], 'disallowed_STD3_mapped', [40, 104, 41]], | |
[[9380, 9380], 'disallowed_STD3_mapped', [40, 105, 41]], | |
[[9381, 9381], 'disallowed_STD3_mapped', [40, 106, 41]], | |
[[9382, 9382], 'disallowed_STD3_mapped', [40, 107, 41]], | |
[[9383, 9383], 'disallowed_STD3_mapped', [40, 108, 41]], | |
[[9384, 9384], 'disallowed_STD3_mapped', [40, 109, 41]], | |
[[9385, 9385], 'disallowed_STD3_mapped', [40, 110, 41]], | |
[[9386, 9386], 'disallowed_STD3_mapped', [40, 111, 41]], | |
[[9387, 9387], 'disallowed_STD3_mapped', [40, 112, 41]], | |
[[9388, 9388], 'disallowed_STD3_mapped', [40, 113, 41]], | |
[[9389, 9389], 'disallowed_STD3_mapped', [40, 114, 41]], | |
[[9390, 9390], 'disallowed_STD3_mapped', [40, 115, 41]], | |
[[9391, 9391], 'disallowed_STD3_mapped', [40, 116, 41]], | |
[[9392, 9392], 'disallowed_STD3_mapped', [40, 117, 41]], | |
[[9393, 9393], 'disallowed_STD3_mapped', [40, 118, 41]], | |
[[9394, 9394], 'disallowed_STD3_mapped', [40, 119, 41]], | |
[[9395, 9395], 'disallowed_STD3_mapped', [40, 120, 41]], | |
[[9396, 9396], 'disallowed_STD3_mapped', [40, 121, 41]], | |
[[9397, 9397], 'disallowed_STD3_mapped', [40, 122, 41]], | |
[[9398, 9398], 'mapped', [97]], | |
[[9399, 9399], 'mapped', [98]], | |
[[9400, 9400], 'mapped', [99]], | |
[[9401, 9401], 'mapped', [100]], | |
[[9402, 9402], 'mapped', [101]], | |
[[9403, 9403], 'mapped', [102]], | |
[[9404, 9404], 'mapped', [103]], | |
[[9405, 9405], 'mapped', [104]], | |
[[9406, 9406], 'mapped', [105]], | |
[[9407, 9407], 'mapped', [106]], | |
[[9408, 9408], 'mapped', [107]], | |
[[9409, 9409], 'mapped', [108]], | |
[[9410, 9410], 'mapped', [109]], | |
[[9411, 9411], 'mapped', [110]], | |
[[9412, 9412], 'mapped', [111]], | |
[[9413, 9413], 'mapped', [112]], | |
[[9414, 9414], 'mapped', [113]], | |
[[9415, 9415], 'mapped', [114]], | |
[[9416, 9416], 'mapped', [115]], | |
[[9417, 9417], 'mapped', [116]], | |
[[9418, 9418], 'mapped', [117]], | |
[[9419, 9419], 'mapped', [118]], | |
[[9420, 9420], 'mapped', [119]], | |
[[9421, 9421], 'mapped', [120]], | |
[[9422, 9422], 'mapped', [121]], | |
[[9423, 9423], 'mapped', [122]], | |
[[9424, 9424], 'mapped', [97]], | |
[[9425, 9425], 'mapped', [98]], | |
[[9426, 9426], 'mapped', [99]], | |
[[9427, 9427], 'mapped', [100]], | |
[[9428, 9428], 'mapped', [101]], | |
[[9429, 9429], 'mapped', [102]], | |
[[9430, 9430], 'mapped', [103]], | |
[[9431, 9431], 'mapped', [104]], | |
[[9432, 9432], 'mapped', [105]], | |
[[9433, 9433], 'mapped', [106]], | |
[[9434, 9434], 'mapped', [107]], | |
[[9435, 9435], 'mapped', [108]], | |
[[9436, 9436], 'mapped', [109]], | |
[[9437, 9437], 'mapped', [110]], | |
[[9438, 9438], 'mapped', [111]], | |
[[9439, 9439], 'mapped', [112]], | |
[[9440, 9440], 'mapped', [113]], | |
[[9441, 9441], 'mapped', [114]], | |
[[9442, 9442], 'mapped', [115]], | |
[[9443, 9443], 'mapped', [116]], | |
[[9444, 9444], 'mapped', [117]], | |
[[9445, 9445], 'mapped', [118]], | |
[[9446, 9446], 'mapped', [119]], | |
[[9447, 9447], 'mapped', [120]], | |
[[9448, 9448], 'mapped', [121]], | |
[[9449, 9449], 'mapped', [122]], | |
[[9450, 9450], 'mapped', [48]], | |
[[9451, 9470], 'valid', [], 'NV8'], | |
[[9471, 9471], 'valid', [], 'NV8'], | |
[[9472, 9621], 'valid', [], 'NV8'], | |
[[9622, 9631], 'valid', [], 'NV8'], | |
[[9632, 9711], 'valid', [], 'NV8'], | |
[[9712, 9719], 'valid', [], 'NV8'], | |
[[9720, 9727], 'valid', [], 'NV8'], | |
[[9728, 9747], 'valid', [], 'NV8'], | |
[[9748, 9749], 'valid', [], 'NV8'], | |
[[9750, 9751], 'valid', [], 'NV8'], | |
[[9752, 9752], 'valid', [], 'NV8'], | |
[[9753, 9753], 'valid', [], 'NV8'], | |
[[9754, 9839], 'valid', [], 'NV8'], | |
[[9840, 9841], 'valid', [], 'NV8'], | |
[[9842, 9853], 'valid', [], 'NV8'], | |
[[9854, 9855], 'valid', [], 'NV8'], | |
[[9856, 9865], 'valid', [], 'NV8'], | |
[[9866, 9873], 'valid', [], 'NV8'], | |
[[9874, 9884], 'valid', [], 'NV8'], | |
[[9885, 9885], 'valid', [], 'NV8'], | |
[[9886, 9887], 'valid', [], 'NV8'], | |
[[9888, 9889], 'valid', [], 'NV8'], | |
[[9890, 9905], 'valid', [], 'NV8'], | |
[[9906, 9906], 'valid', [], 'NV8'], | |
[[9907, 9916], 'valid', [], 'NV8'], | |
[[9917, 9919], 'valid', [], 'NV8'], | |
[[9920, 9923], 'valid', [], 'NV8'], | |
[[9924, 9933], 'valid', [], 'NV8'], | |
[[9934, 9934], 'valid', [], 'NV8'], | |
[[9935, 9953], 'valid', [], 'NV8'], | |
[[9954, 9954], 'valid', [], 'NV8'], | |
[[9955, 9955], 'valid', [], 'NV8'], | |
[[9956, 9959], 'valid', [], 'NV8'], | |
[[9960, 9983], 'valid', [], 'NV8'], | |
[[9984, 9984], 'valid', [], 'NV8'], | |
[[9985, 9988], 'valid', [], 'NV8'], | |
[[9989, 9989], 'valid', [], 'NV8'], | |
[[9990, 9993], 'valid', [], 'NV8'], | |
[[9994, 9995], 'valid', [], 'NV8'], | |
[[9996, 10023], 'valid', [], 'NV8'], | |
[[10024, 10024], 'valid', [], 'NV8'], | |
[[10025, 10059], 'valid', [], 'NV8'], | |
[[10060, 10060], 'valid', [], 'NV8'], | |
[[10061, 10061], 'valid', [], 'NV8'], | |
[[10062, 10062], 'valid', [], 'NV8'], | |
[[10063, 10066], 'valid', [], 'NV8'], | |
[[10067, 10069], 'valid', [], 'NV8'], | |
[[10070, 10070], 'valid', [], 'NV8'], | |
[[10071, 10071], 'valid', [], 'NV8'], | |
[[10072, 10078], 'valid', [], 'NV8'], | |
[[10079, 10080], 'valid', [], 'NV8'], | |
[[10081, 10087], 'valid', [], 'NV8'], | |
[[10088, 10101], 'valid', [], 'NV8'], | |
[[10102, 10132], 'valid', [], 'NV8'], | |
[[10133, 10135], 'valid', [], 'NV8'], | |
[[10136, 10159], 'valid', [], 'NV8'], | |
[[10160, 10160], 'valid', [], 'NV8'], | |
[[10161, 10174], 'valid', [], 'NV8'], | |
[[10175, 10175], 'valid', [], 'NV8'], | |
[[10176, 10182], 'valid', [], 'NV8'], | |
[[10183, 10186], 'valid', [], 'NV8'], | |
[[10187, 10187], 'valid', [], 'NV8'], | |
[[10188, 10188], 'valid', [], 'NV8'], | |
[[10189, 10189], 'valid', [], 'NV8'], | |
[[10190, 10191], 'valid', [], 'NV8'], | |
[[10192, 10219], 'valid', [], 'NV8'], | |
[[10220, 10223], 'valid', [], 'NV8'], | |
[[10224, 10239], 'valid', [], 'NV8'], | |
[[10240, 10495], 'valid', [], 'NV8'], | |
[[10496, 10763], 'valid', [], 'NV8'], | |
[[10764, 10764], 'mapped', [8747, 8747, 8747, 8747]], | |
[[10765, 10867], 'valid', [], 'NV8'], | |
[[10868, 10868], 'disallowed_STD3_mapped', [58, 58, 61]], | |
[[10869, 10869], 'disallowed_STD3_mapped', [61, 61]], | |
[[10870, 10870], 'disallowed_STD3_mapped', [61, 61, 61]], | |
[[10871, 10971], 'valid', [], 'NV8'], | |
[[10972, 10972], 'mapped', [10973, 824]], | |
[[10973, 11007], 'valid', [], 'NV8'], | |
[[11008, 11021], 'valid', [], 'NV8'], | |
[[11022, 11027], 'valid', [], 'NV8'], | |
[[11028, 11034], 'valid', [], 'NV8'], | |
[[11035, 11039], 'valid', [], 'NV8'], | |
[[11040, 11043], 'valid', [], 'NV8'], | |
[[11044, 11084], 'valid', [], 'NV8'], | |
[[11085, 11087], 'valid', [], 'NV8'], | |
[[11088, 11092], 'valid', [], 'NV8'], | |
[[11093, 11097], 'valid', [], 'NV8'], | |
[[11098, 11123], 'valid', [], 'NV8'], | |
[[11124, 11125], 'disallowed'], | |
[[11126, 11157], 'valid', [], 'NV8'], | |
[[11158, 11159], 'disallowed'], | |
[[11160, 11193], 'valid', [], 'NV8'], | |
[[11194, 11196], 'disallowed'], | |
[[11197, 11208], 'valid', [], 'NV8'], | |
[[11209, 11209], 'disallowed'], | |
[[11210, 11217], 'valid', [], 'NV8'], | |
[[11218, 11243], 'disallowed'], | |
[[11244, 11247], 'valid', [], 'NV8'], | |
[[11248, 11263], 'disallowed'], | |
[[11264, 11264], 'mapped', [11312]], | |
[[11265, 11265], 'mapped', [11313]], | |
[[11266, 11266], 'mapped', [11314]], | |
[[11267, 11267], 'mapped', [11315]], | |
[[11268, 11268], 'mapped', [11316]], | |
[[11269, 11269], 'mapped', [11317]], | |
[[11270, 11270], 'mapped', [11318]], | |
[[11271, 11271], 'mapped', [11319]], | |
[[11272, 11272], 'mapped', [11320]], | |
[[11273, 11273], 'mapped', [11321]], | |
[[11274, 11274], 'mapped', [11322]], | |
[[11275, 11275], 'mapped', [11323]], | |
[[11276, 11276], 'mapped', [11324]], | |
[[11277, 11277], 'mapped', [11325]], | |
[[11278, 11278], 'mapped', [11326]], | |
[[11279, 11279], 'mapped', [11327]], | |
[[11280, 11280], 'mapped', [11328]], | |
[[11281, 11281], 'mapped', [11329]], | |
[[11282, 11282], 'mapped', [11330]], | |
[[11283, 11283], 'mapped', [11331]], | |
[[11284, 11284], 'mapped', [11332]], | |
[[11285, 11285], 'mapped', [11333]], | |
[[11286, 11286], 'mapped', [11334]], | |
[[11287, 11287], 'mapped', [11335]], | |
[[11288, 11288], 'mapped', [11336]], | |
[[11289, 11289], 'mapped', [11337]], | |
[[11290, 11290], 'mapped', [11338]], | |
[[11291, 11291], 'mapped', [11339]], | |
[[11292, 11292], 'mapped', [11340]], | |
[[11293, 11293], 'mapped', [11341]], | |
[[11294, 11294], 'mapped', [11342]], | |
[[11295, 11295], 'mapped', [11343]], | |
[[11296, 11296], 'mapped', [11344]], | |
[[11297, 11297], 'mapped', [11345]], | |
[[11298, 11298], 'mapped', [11346]], | |
[[11299, 11299], 'mapped', [11347]], | |
[[11300, 11300], 'mapped', [11348]], | |
[[11301, 11301], 'mapped', [11349]], | |
[[11302, 11302], 'mapped', [11350]], | |
[[11303, 11303], 'mapped', [11351]], | |
[[11304, 11304], 'mapped', [11352]], | |
[[11305, 11305], 'mapped', [11353]], | |
[[11306, 11306], 'mapped', [11354]], | |
[[11307, 11307], 'mapped', [11355]], | |
[[11308, 11308], 'mapped', [11356]], | |
[[11309, 11309], 'mapped', [11357]], | |
[[11310, 11310], 'mapped', [11358]], | |
[[11311, 11311], 'disallowed'], | |
[[11312, 11358], 'valid'], | |
[[11359, 11359], 'disallowed'], | |
[[11360, 11360], 'mapped', [11361]], | |
[[11361, 11361], 'valid'], | |
[[11362, 11362], 'mapped', [619]], | |
[[11363, 11363], 'mapped', [7549]], | |
[[11364, 11364], 'mapped', [637]], | |
[[11365, 11366], 'valid'], | |
[[11367, 11367], 'mapped', [11368]], | |
[[11368, 11368], 'valid'], | |
[[11369, 11369], 'mapped', [11370]], | |
[[11370, 11370], 'valid'], | |
[[11371, 11371], 'mapped', [11372]], | |
[[11372, 11372], 'valid'], | |
[[11373, 11373], 'mapped', [593]], | |
[[11374, 11374], 'mapped', [625]], | |
[[11375, 11375], 'mapped', [592]], | |
[[11376, 11376], 'mapped', [594]], | |
[[11377, 11377], 'valid'], | |
[[11378, 11378], 'mapped', [11379]], | |
[[11379, 11379], 'valid'], | |
[[11380, 11380], 'valid'], | |
[[11381, 11381], 'mapped', [11382]], | |
[[11382, 11383], 'valid'], | |
[[11384, 11387], 'valid'], | |
[[11388, 11388], 'mapped', [106]], | |
[[11389, 11389], 'mapped', [118]], | |
[[11390, 11390], 'mapped', [575]], | |
[[11391, 11391], 'mapped', [576]], | |
[[11392, 11392], 'mapped', [11393]], | |
[[11393, 11393], 'valid'], | |
[[11394, 11394], 'mapped', [11395]], | |
[[11395, 11395], 'valid'], | |
[[11396, 11396], 'mapped', [11397]], | |
[[11397, 11397], 'valid'], | |
[[11398, 11398], 'mapped', [11399]], | |
[[11399, 11399], 'valid'], | |
[[11400, 11400], 'mapped', [11401]], | |
[[11401, 11401], 'valid'], | |
[[11402, 11402], 'mapped', [11403]], | |
[[11403, 11403], 'valid'], | |
[[11404, 11404], 'mapped', [11405]], | |
[[11405, 11405], 'valid'], | |
[[11406, 11406], 'mapped', [11407]], | |
[[11407, 11407], 'valid'], | |
[[11408, 11408], 'mapped', [11409]], | |
[[11409, 11409], 'valid'], | |
[[11410, 11410], 'mapped', [11411]], | |
[[11411, 11411], 'valid'], | |
[[11412, 11412], 'mapped', [11413]], | |
[[11413, 11413], 'valid'], | |
[[11414, 11414], 'mapped', [11415]], | |
[[11415, 11415], 'valid'], | |
[[11416, 11416], 'mapped', [11417]], | |
[[11417, 11417], 'valid'], | |
[[11418, 11418], 'mapped', [11419]], | |
[[11419, 11419], 'valid'], | |
[[11420, 11420], 'mapped', [11421]], | |
[[11421, 11421], 'valid'], | |
[[11422, 11422], 'mapped', [11423]], | |
[[11423, 11423], 'valid'], | |
[[11424, 11424], 'mapped', [11425]], | |
[[11425, 11425], 'valid'], | |
[[11426, 11426], 'mapped', [11427]], | |
[[11427, 11427], 'valid'], | |
[[11428, 11428], 'mapped', [11429]], | |
[[11429, 11429], 'valid'], | |
[[11430, 11430], 'mapped', [11431]], | |
[[11431, 11431], 'valid'], | |
[[11432, 11432], 'mapped', [11433]], | |
[[11433, 11433], 'valid'], | |
[[11434, 11434], 'mapped', [11435]], | |
[[11435, 11435], 'valid'], | |
[[11436, 11436], 'mapped', [11437]], | |
[[11437, 11437], 'valid'], | |
[[11438, 11438], 'mapped', [11439]], | |
[[11439, 11439], 'valid'], | |
[[11440, 11440], 'mapped', [11441]], | |
[[11441, 11441], 'valid'], | |
[[11442, 11442], 'mapped', [11443]], | |
[[11443, 11443], 'valid'], | |
[[11444, 11444], 'mapped', [11445]], | |
[[11445, 11445], 'valid'], | |
[[11446, 11446], 'mapped', [11447]], | |
[[11447, 11447], 'valid'], | |
[[11448, 11448], 'mapped', [11449]], | |
[[11449, 11449], 'valid'], | |
[[11450, 11450], 'mapped', [11451]], | |
[[11451, 11451], 'valid'], | |
[[11452, 11452], 'mapped', [11453]], | |
[[11453, 11453], 'valid'], | |
[[11454, 11454], 'mapped', [11455]], | |
[[11455, 11455], 'valid'], | |
[[11456, 11456], 'mapped', [11457]], | |
[[11457, 11457], 'valid'], | |
[[11458, 11458], 'mapped', [11459]], | |
[[11459, 11459], 'valid'], | |
[[11460, 11460], 'mapped', [11461]], | |
[[11461, 11461], 'valid'], | |
[[11462, 11462], 'mapped', [11463]], | |
[[11463, 11463], 'valid'], | |
[[11464, 11464], 'mapped', [11465]], | |
[[11465, 11465], 'valid'], | |
[[11466, 11466], 'mapped', [11467]], | |
[[11467, 11467], 'valid'], | |
[[11468, 11468], 'mapped', [11469]], | |
[[11469, 11469], 'valid'], | |
[[11470, 11470], 'mapped', [11471]], | |
[[11471, 11471], 'valid'], | |
[[11472, 11472], 'mapped', [11473]], | |
[[11473, 11473], 'valid'], | |
[[11474, 11474], 'mapped', [11475]], | |
[[11475, 11475], 'valid'], | |
[[11476, 11476], 'mapped', [11477]], | |
[[11477, 11477], 'valid'], | |
[[11478, 11478], 'mapped', [11479]], | |
[[11479, 11479], 'valid'], | |
[[11480, 11480], 'mapped', [11481]], | |
[[11481, 11481], 'valid'], | |
[[11482, 11482], 'mapped', [11483]], | |
[[11483, 11483], 'valid'], | |
[[11484, 11484], 'mapped', [11485]], | |
[[11485, 11485], 'valid'], | |
[[11486, 11486], 'mapped', [11487]], | |
[[11487, 11487], 'valid'], | |
[[11488, 11488], 'mapped', [11489]], | |
[[11489, 11489], 'valid'], | |
[[11490, 11490], 'mapped', [11491]], | |
[[11491, 11492], 'valid'], | |
[[11493, 11498], 'valid', [], 'NV8'], | |
[[11499, 11499], 'mapped', [11500]], | |
[[11500, 11500], 'valid'], | |
[[11501, 11501], 'mapped', [11502]], | |
[[11502, 11505], 'valid'], | |
[[11506, 11506], 'mapped', [11507]], | |
[[11507, 11507], 'valid'], | |
[[11508, 11512], 'disallowed'], | |
[[11513, 11519], 'valid', [], 'NV8'], | |
[[11520, 11557], 'valid'], | |
[[11558, 11558], 'disallowed'], | |
[[11559, 11559], 'valid'], | |
[[11560, 11564], 'disallowed'], | |
[[11565, 11565], 'valid'], | |
[[11566, 11567], 'disallowed'], | |
[[11568, 11621], 'valid'], | |
[[11622, 11623], 'valid'], | |
[[11624, 11630], 'disallowed'], | |
[[11631, 11631], 'mapped', [11617]], | |
[[11632, 11632], 'valid', [], 'NV8'], | |
[[11633, 11646], 'disallowed'], | |
[[11647, 11647], 'valid'], | |
[[11648, 11670], 'valid'], | |
[[11671, 11679], 'disallowed'], | |
[[11680, 11686], 'valid'], | |
[[11687, 11687], 'disallowed'], | |
[[11688, 11694], 'valid'], | |
[[11695, 11695], 'disallowed'], | |
[[11696, 11702], 'valid'], | |
[[11703, 11703], 'disallowed'], | |
[[11704, 11710], 'valid'], | |
[[11711, 11711], 'disallowed'], | |
[[11712, 11718], 'valid'], | |
[[11719, 11719], 'disallowed'], | |
[[11720, 11726], 'valid'], | |
[[11727, 11727], 'disallowed'], | |
[[11728, 11734], 'valid'], | |
[[11735, 11735], 'disallowed'], | |
[[11736, 11742], 'valid'], | |
[[11743, 11743], 'disallowed'], | |
[[11744, 11775], 'valid'], | |
[[11776, 11799], 'valid', [], 'NV8'], | |
[[11800, 11803], 'valid', [], 'NV8'], | |
[[11804, 11805], 'valid', [], 'NV8'], | |
[[11806, 11822], 'valid', [], 'NV8'], | |
[[11823, 11823], 'valid'], | |
[[11824, 11824], 'valid', [], 'NV8'], | |
[[11825, 11825], 'valid', [], 'NV8'], | |
[[11826, 11835], 'valid', [], 'NV8'], | |
[[11836, 11842], 'valid', [], 'NV8'], | |
[[11843, 11903], 'disallowed'], | |
[[11904, 11929], 'valid', [], 'NV8'], | |
[[11930, 11930], 'disallowed'], | |
[[11931, 11934], 'valid', [], 'NV8'], | |
[[11935, 11935], 'mapped', [27597]], | |
[[11936, 12018], 'valid', [], 'NV8'], | |
[[12019, 12019], 'mapped', [40863]], | |
[[12020, 12031], 'disallowed'], | |
[[12032, 12032], 'mapped', [19968]], | |
[[12033, 12033], 'mapped', [20008]], | |
[[12034, 12034], 'mapped', [20022]], | |
[[12035, 12035], 'mapped', [20031]], | |
[[12036, 12036], 'mapped', [20057]], | |
[[12037, 12037], 'mapped', [20101]], | |
[[12038, 12038], 'mapped', [20108]], | |
[[12039, 12039], 'mapped', [20128]], | |
[[12040, 12040], 'mapped', [20154]], | |
[[12041, 12041], 'mapped', [20799]], | |
[[12042, 12042], 'mapped', [20837]], | |
[[12043, 12043], 'mapped', [20843]], | |
[[12044, 12044], 'mapped', [20866]], | |
[[12045, 12045], 'mapped', [20886]], | |
[[12046, 12046], 'mapped', [20907]], | |
[[12047, 12047], 'mapped', [20960]], | |
[[12048, 12048], 'mapped', [20981]], | |
[[12049, 12049], 'mapped', [20992]], | |
[[12050, 12050], 'mapped', [21147]], | |
[[12051, 12051], 'mapped', [21241]], | |
[[12052, 12052], 'mapped', [21269]], | |
[[12053, 12053], 'mapped', [21274]], | |
[[12054, 12054], 'mapped', [21304]], | |
[[12055, 12055], 'mapped', [21313]], | |
[[12056, 12056], 'mapped', [21340]], | |
[[12057, 12057], 'mapped', [21353]], | |
[[12058, 12058], 'mapped', [21378]], | |
[[12059, 12059], 'mapped', [21430]], | |
[[12060, 12060], 'mapped', [21448]], | |
[[12061, 12061], 'mapped', [21475]], | |
[[12062, 12062], 'mapped', [22231]], | |
[[12063, 12063], 'mapped', [22303]], | |
[[12064, 12064], 'mapped', [22763]], | |
[[12065, 12065], 'mapped', [22786]], | |
[[12066, 12066], 'mapped', [22794]], | |
[[12067, 12067], 'mapped', [22805]], | |
[[12068, 12068], 'mapped', [22823]], | |
[[12069, 12069], 'mapped', [22899]], | |
[[12070, 12070], 'mapped', [23376]], | |
[[12071, 12071], 'mapped', [23424]], | |
[[12072, 12072], 'mapped', [23544]], | |
[[12073, 12073], 'mapped', [23567]], | |
[[12074, 12074], 'mapped', [23586]], | |
[[12075, 12075], 'mapped', [23608]], | |
[[12076, 12076], 'mapped', [23662]], | |
[[12077, 12077], 'mapped', [23665]], | |
[[12078, 12078], 'mapped', [24027]], | |
[[12079, 12079], 'mapped', [24037]], | |
[[12080, 12080], 'mapped', [24049]], | |
[[12081, 12081], 'mapped', [24062]], | |
[[12082, 12082], 'mapped', [24178]], | |
[[12083, 12083], 'mapped', [24186]], | |
[[12084, 12084], 'mapped', [24191]], | |
[[12085, 12085], 'mapped', [24308]], | |
[[12086, 12086], 'mapped', [24318]], | |
[[12087, 12087], 'mapped', [24331]], | |
[[12088, 12088], 'mapped', [24339]], | |
[[12089, 12089], 'mapped', [24400]], | |
[[12090, 12090], 'mapped', [24417]], | |
[[12091, 12091], 'mapped', [24435]], | |
[[12092, 12092], 'mapped', [24515]], | |
[[12093, 12093], 'mapped', [25096]], | |
[[12094, 12094], 'mapped', [25142]], | |
[[12095, 12095], 'mapped', [25163]], | |
[[12096, 12096], 'mapped', [25903]], | |
[[12097, 12097], 'mapped', [25908]], | |
[[12098, 12098], 'mapped', [25991]], | |
[[12099, 12099], 'mapped', [26007]], | |
[[12100, 12100], 'mapped', [26020]], | |
[[12101, 12101], 'mapped', [26041]], | |
[[12102, 12102], 'mapped', [26080]], | |
[[12103, 12103], 'mapped', [26085]], | |
[[12104, 12104], 'mapped', [26352]], | |
[[12105, 12105], 'mapped', [26376]], | |
[[12106, 12106], 'mapped', [26408]], | |
[[12107, 12107], 'mapped', [27424]], | |
[[12108, 12108], 'mapped', [27490]], | |
[[12109, 12109], 'mapped', [27513]], | |
[[12110, 12110], 'mapped', [27571]], | |
[[12111, 12111], 'mapped', [27595]], | |
[[12112, 12112], 'mapped', [27604]], | |
[[12113, 12113], 'mapped', [27611]], | |
[[12114, 12114], 'mapped', [27663]], | |
[[12115, 12115], 'mapped', [27668]], | |
[[12116, 12116], 'mapped', [27700]], | |
[[12117, 12117], 'mapped', [28779]], | |
[[12118, 12118], 'mapped', [29226]], | |
[[12119, 12119], 'mapped', [29238]], | |
[[12120, 12120], 'mapped', [29243]], | |
[[12121, 12121], 'mapped', [29247]], | |
[[12122, 12122], 'mapped', [29255]], | |
[[12123, 12123], 'mapped', [29273]], | |
[[12124, 12124], 'mapped', [29275]], | |
[[12125, 12125], 'mapped', [29356]], | |
[[12126, 12126], 'mapped', [29572]], | |
[[12127, 12127], 'mapped', [29577]], | |
[[12128, 12128], 'mapped', [29916]], | |
[[12129, 12129], 'mapped', [29926]], | |
[[12130, 12130], 'mapped', [29976]], | |
[[12131, 12131], 'mapped', [29983]], | |
[[12132, 12132], 'mapped', [29992]], | |
[[12133, 12133], 'mapped', [30000]], | |
[[12134, 12134], 'mapped', [30091]], | |
[[12135, 12135], 'mapped', [30098]], | |
[[12136, 12136], 'mapped', [30326]], | |
[[12137, 12137], 'mapped', [30333]], | |
[[12138, 12138], 'mapped', [30382]], | |
[[12139, 12139], 'mapped', [30399]], | |
[[12140, 12140], 'mapped', [30446]], | |
[[12141, 12141], 'mapped', [30683]], | |
[[12142, 12142], 'mapped', [30690]], | |
[[12143, 12143], 'mapped', [30707]], | |
[[12144, 12144], 'mapped', [31034]], | |
[[12145, 12145], 'mapped', [31160]], | |
[[12146, 12146], 'mapped', [31166]], | |
[[12147, 12147], 'mapped', [31348]], | |
[[12148, 12148], 'mapped', [31435]], | |
[[12149, 12149], 'mapped', [31481]], | |
[[12150, 12150], 'mapped', [31859]], | |
[[12151, 12151], 'mapped', [31992]], | |
[[12152, 12152], 'mapped', [32566]], | |
[[12153, 12153], 'mapped', [32593]], | |
[[12154, 12154], 'mapped', [32650]], | |
[[12155, 12155], 'mapped', [32701]], | |
[[12156, 12156], 'mapped', [32769]], | |
[[12157, 12157], 'mapped', [32780]], | |
[[12158, 12158], 'mapped', [32786]], | |
[[12159, 12159], 'mapped', [32819]], | |
[[12160, 12160], 'mapped', [32895]], | |
[[12161, 12161], 'mapped', [32905]], | |
[[12162, 12162], 'mapped', [33251]], | |
[[12163, 12163], 'mapped', [33258]], | |
[[12164, 12164], 'mapped', [33267]], | |
[[12165, 12165], 'mapped', [33276]], | |
[[12166, 12166], 'mapped', [33292]], | |
[[12167, 12167], 'mapped', [33307]], | |
[[12168, 12168], 'mapped', [33311]], | |
[[12169, 12169], 'mapped', [33390]], | |
[[12170, 12170], 'mapped', [33394]], | |
[[12171, 12171], 'mapped', [33400]], | |
[[12172, 12172], 'mapped', [34381]], | |
[[12173, 12173], 'mapped', [34411]], | |
[[12174, 12174], 'mapped', [34880]], | |
[[12175, 12175], 'mapped', [34892]], | |
[[12176, 12176], 'mapped', [34915]], | |
[[12177, 12177], 'mapped', [35198]], | |
[[12178, 12178], 'mapped', [35211]], | |
[[12179, 12179], 'mapped', [35282]], | |
[[12180, 12180], 'mapped', [35328]], | |
[[12181, 12181], 'mapped', [35895]], | |
[[12182, 12182], 'mapped', [35910]], | |
[[12183, 12183], 'mapped', [35925]], | |
[[12184, 12184], 'mapped', [35960]], | |
[[12185, 12185], 'mapped', [35997]], | |
[[12186, 12186], 'mapped', [36196]], | |
[[12187, 12187], 'mapped', [36208]], | |
[[12188, 12188], 'mapped', [36275]], | |
[[12189, 12189], 'mapped', [36523]], | |
[[12190, 12190], 'mapped', [36554]], | |
[[12191, 12191], 'mapped', [36763]], | |
[[12192, 12192], 'mapped', [36784]], | |
[[12193, 12193], 'mapped', [36789]], | |
[[12194, 12194], 'mapped', [37009]], | |
[[12195, 12195], 'mapped', [37193]], | |
[[12196, 12196], 'mapped', [37318]], | |
[[12197, 12197], 'mapped', [37324]], | |
[[12198, 12198], 'mapped', [37329]], | |
[[12199, 12199], 'mapped', [38263]], | |
[[12200, 12200], 'mapped', [38272]], | |
[[12201, 12201], 'mapped', [38428]], | |
[[12202, 12202], 'mapped', [38582]], | |
[[12203, 12203], 'mapped', [38585]], | |
[[12204, 12204], 'mapped', [38632]], | |
[[12205, 12205], 'mapped', [38737]], | |
[[12206, 12206], 'mapped', [38750]], | |
[[12207, 12207], 'mapped', [38754]], | |
[[12208, 12208], 'mapped', [38761]], | |
[[12209, 12209], 'mapped', [38859]], | |
[[12210, 12210], 'mapped', [38893]], | |
[[12211, 12211], 'mapped', [38899]], | |
[[12212, 12212], 'mapped', [38913]], | |
[[12213, 12213], 'mapped', [39080]], | |
[[12214, 12214], 'mapped', [39131]], | |
[[12215, 12215], 'mapped', [39135]], | |
[[12216, 12216], 'mapped', [39318]], | |
[[12217, 12217], 'mapped', [39321]], | |
[[12218, 12218], 'mapped', [39340]], | |
[[12219, 12219], 'mapped', [39592]], | |
[[12220, 12220], 'mapped', [39640]], | |
[[12221, 12221], 'mapped', [39647]], | |
[[12222, 12222], 'mapped', [39717]], | |
[[12223, 12223], 'mapped', [39727]], | |
[[12224, 12224], 'mapped', [39730]], | |
[[12225, 12225], 'mapped', [39740]], | |
[[12226, 12226], 'mapped', [39770]], | |
[[12227, 12227], 'mapped', [40165]], | |
[[12228, 12228], 'mapped', [40565]], | |
[[12229, 12229], 'mapped', [40575]], | |
[[12230, 12230], 'mapped', [40613]], | |
[[12231, 12231], 'mapped', [40635]], | |
[[12232, 12232], 'mapped', [40643]], | |
[[12233, 12233], 'mapped', [40653]], | |
[[12234, 12234], 'mapped', [40657]], | |
[[12235, 12235], 'mapped', [40697]], | |
[[12236, 12236], 'mapped', [40701]], | |
[[12237, 12237], 'mapped', [40718]], | |
[[12238, 12238], 'mapped', [40723]], | |
[[12239, 12239], 'mapped', [40736]], | |
[[12240, 12240], 'mapped', [40763]], | |
[[12241, 12241], 'mapped', [40778]], | |
[[12242, 12242], 'mapped', [40786]], | |
[[12243, 12243], 'mapped', [40845]], | |
[[12244, 12244], 'mapped', [40860]], | |
[[12245, 12245], 'mapped', [40864]], | |
[[12246, 12271], 'disallowed'], | |
[[12272, 12283], 'disallowed'], | |
[[12284, 12287], 'disallowed'], | |
[[12288, 12288], 'disallowed_STD3_mapped', [32]], | |
[[12289, 12289], 'valid', [], 'NV8'], | |
[[12290, 12290], 'mapped', [46]], | |
[[12291, 12292], 'valid', [], 'NV8'], | |
[[12293, 12295], 'valid'], | |
[[12296, 12329], 'valid', [], 'NV8'], | |
[[12330, 12333], 'valid'], | |
[[12334, 12341], 'valid', [], 'NV8'], | |
[[12342, 12342], 'mapped', [12306]], | |
[[12343, 12343], 'valid', [], 'NV8'], | |
[[12344, 12344], 'mapped', [21313]], | |
[[12345, 12345], 'mapped', [21316]], | |
[[12346, 12346], 'mapped', [21317]], | |
[[12347, 12347], 'valid', [], 'NV8'], | |
[[12348, 12348], 'valid'], | |
[[12349, 12349], 'valid', [], 'NV8'], | |
[[12350, 12350], 'valid', [], 'NV8'], | |
[[12351, 12351], 'valid', [], 'NV8'], | |
[[12352, 12352], 'disallowed'], | |
[[12353, 12436], 'valid'], | |
[[12437, 12438], 'valid'], | |
[[12439, 12440], 'disallowed'], | |
[[12441, 12442], 'valid'], | |
[[12443, 12443], 'disallowed_STD3_mapped', [32, 12441]], | |
[[12444, 12444], 'disallowed_STD3_mapped', [32, 12442]], | |
[[12445, 12446], 'valid'], | |
[[12447, 12447], 'mapped', [12424, 12426]], | |
[[12448, 12448], 'valid', [], 'NV8'], | |
[[12449, 12542], 'valid'], | |
[[12543, 12543], 'mapped', [12467, 12488]], | |
[[12544, 12548], 'disallowed'], | |
[[12549, 12588], 'valid'], | |
[[12589, 12589], 'valid'], | |
[[12590, 12592], 'disallowed'], | |
[[12593, 12593], 'mapped', [4352]], | |
[[12594, 12594], 'mapped', [4353]], | |
[[12595, 12595], 'mapped', [4522]], | |
[[12596, 12596], 'mapped', [4354]], | |
[[12597, 12597], 'mapped', [4524]], | |
[[12598, 12598], 'mapped', [4525]], | |
[[12599, 12599], 'mapped', [4355]], | |
[[12600, 12600], 'mapped', [4356]], | |
[[12601, 12601], 'mapped', [4357]], | |
[[12602, 12602], 'mapped', [4528]], | |
[[12603, 12603], 'mapped', [4529]], | |
[[12604, 12604], 'mapped', [4530]], | |
[[12605, 12605], 'mapped', [4531]], | |
[[12606, 12606], 'mapped', [4532]], | |
[[12607, 12607], 'mapped', [4533]], | |
[[12608, 12608], 'mapped', [4378]], | |
[[12609, 12609], 'mapped', [4358]], | |
[[12610, 12610], 'mapped', [4359]], | |
[[12611, 12611], 'mapped', [4360]], | |
[[12612, 12612], 'mapped', [4385]], | |
[[12613, 12613], 'mapped', [4361]], | |
[[12614, 12614], 'mapped', [4362]], | |
[[12615, 12615], 'mapped', [4363]], | |
[[12616, 12616], 'mapped', [4364]], | |
[[12617, 12617], 'mapped', [4365]], | |
[[12618, 12618], 'mapped', [4366]], | |
[[12619, 12619], 'mapped', [4367]], | |
[[12620, 12620], 'mapped', [4368]], | |
[[12621, 12621], 'mapped', [4369]], | |
[[12622, 12622], 'mapped', [4370]], | |
[[12623, 12623], 'mapped', [4449]], | |
[[12624, 12624], 'mapped', [4450]], | |
[[12625, 12625], 'mapped', [4451]], | |
[[12626, 12626], 'mapped', [4452]], | |
[[12627, 12627], 'mapped', [4453]], | |
[[12628, 12628], 'mapped', [4454]], | |
[[12629, 12629], 'mapped', [4455]], | |
[[12630, 12630], 'mapped', [4456]], | |
[[12631, 12631], 'mapped', [4457]], | |
[[12632, 12632], 'mapped', [4458]], | |
[[12633, 12633], 'mapped', [4459]], | |
[[12634, 12634], 'mapped', [4460]], | |
[[12635, 12635], 'mapped', [4461]], | |
[[12636, 12636], 'mapped', [4462]], | |
[[12637, 12637], 'mapped', [4463]], | |
[[12638, 12638], 'mapped', [4464]], | |
[[12639, 12639], 'mapped', [4465]], | |
[[12640, 12640], 'mapped', [4466]], | |
[[12641, 12641], 'mapped', [4467]], | |
[[12642, 12642], 'mapped', [4468]], | |
[[12643, 12643], 'mapped', [4469]], | |
[[12644, 12644], 'disallowed'], | |
[[12645, 12645], 'mapped', [4372]], | |
[[12646, 12646], 'mapped', [4373]], | |
[[12647, 12647], 'mapped', [4551]], | |
[[12648, 12648], 'mapped', [4552]], | |
[[12649, 12649], 'mapped', [4556]], | |
[[12650, 12650], 'mapped', [4558]], | |
[[12651, 12651], 'mapped', [4563]], | |
[[12652, 12652], 'mapped', [4567]], | |
[[12653, 12653], 'mapped', [4569]], | |
[[12654, 12654], 'mapped', [4380]], | |
[[12655, 12655], 'mapped', [4573]], | |
[[12656, 12656], 'mapped', [4575]], | |
[[12657, 12657], 'mapped', [4381]], | |
[[12658, 12658], 'mapped', [4382]], | |
[[12659, 12659], 'mapped', [4384]], | |
[[12660, 12660], 'mapped', [4386]], | |
[[12661, 12661], 'mapped', [4387]], | |
[[12662, 12662], 'mapped', [4391]], | |
[[12663, 12663], 'mapped', [4393]], | |
[[12664, 12664], 'mapped', [4395]], | |
[[12665, 12665], 'mapped', [4396]], | |
[[12666, 12666], 'mapped', [4397]], | |
[[12667, 12667], 'mapped', [4398]], | |
[[12668, 12668], 'mapped', [4399]], | |
[[12669, 12669], 'mapped', [4402]], | |
[[12670, 12670], 'mapped', [4406]], | |
[[12671, 12671], 'mapped', [4416]], | |
[[12672, 12672], 'mapped', [4423]], | |
[[12673, 12673], 'mapped', [4428]], | |
[[12674, 12674], 'mapped', [4593]], | |
[[12675, 12675], 'mapped', [4594]], | |
[[12676, 12676], 'mapped', [4439]], | |
[[12677, 12677], 'mapped', [4440]], | |
[[12678, 12678], 'mapped', [4441]], | |
[[12679, 12679], 'mapped', [4484]], | |
[[12680, 12680], 'mapped', [4485]], | |
[[12681, 12681], 'mapped', [4488]], | |
[[12682, 12682], 'mapped', [4497]], | |
[[12683, 12683], 'mapped', [4498]], | |
[[12684, 12684], 'mapped', [4500]], | |
[[12685, 12685], 'mapped', [4510]], | |
[[12686, 12686], 'mapped', [4513]], | |
[[12687, 12687], 'disallowed'], | |
[[12688, 12689], 'valid', [], 'NV8'], | |
[[12690, 12690], 'mapped', [19968]], | |
[[12691, 12691], 'mapped', [20108]], | |
[[12692, 12692], 'mapped', [19977]], | |
[[12693, 12693], 'mapped', [22235]], | |
[[12694, 12694], 'mapped', [19978]], | |
[[12695, 12695], 'mapped', [20013]], | |
[[12696, 12696], 'mapped', [19979]], | |
[[12697, 12697], 'mapped', [30002]], | |
[[12698, 12698], 'mapped', [20057]], | |
[[12699, 12699], 'mapped', [19993]], | |
[[12700, 12700], 'mapped', [19969]], | |
[[12701, 12701], 'mapped', [22825]], | |
[[12702, 12702], 'mapped', [22320]], | |
[[12703, 12703], 'mapped', [20154]], | |
[[12704, 12727], 'valid'], | |
[[12728, 12730], 'valid'], | |
[[12731, 12735], 'disallowed'], | |
[[12736, 12751], 'valid', [], 'NV8'], | |
[[12752, 12771], 'valid', [], 'NV8'], | |
[[12772, 12783], 'disallowed'], | |
[[12784, 12799], 'valid'], | |
[[12800, 12800], 'disallowed_STD3_mapped', [40, 4352, 41]], | |
[[12801, 12801], 'disallowed_STD3_mapped', [40, 4354, 41]], | |
[[12802, 12802], 'disallowed_STD3_mapped', [40, 4355, 41]], | |
[[12803, 12803], 'disallowed_STD3_mapped', [40, 4357, 41]], | |
[[12804, 12804], 'disallowed_STD3_mapped', [40, 4358, 41]], | |
[[12805, 12805], 'disallowed_STD3_mapped', [40, 4359, 41]], | |
[[12806, 12806], 'disallowed_STD3_mapped', [40, 4361, 41]], | |
[[12807, 12807], 'disallowed_STD3_mapped', [40, 4363, 41]], | |
[[12808, 12808], 'disallowed_STD3_mapped', [40, 4364, 41]], | |
[[12809, 12809], 'disallowed_STD3_mapped', [40, 4366, 41]], | |
[[12810, 12810], 'disallowed_STD3_mapped', [40, 4367, 41]], | |
[[12811, 12811], 'disallowed_STD3_mapped', [40, 4368, 41]], | |
[[12812, 12812], 'disallowed_STD3_mapped', [40, 4369, 41]], | |
[[12813, 12813], 'disallowed_STD3_mapped', [40, 4370, 41]], | |
[[12814, 12814], 'disallowed_STD3_mapped', [40, 44032, 41]], | |
[[12815, 12815], 'disallowed_STD3_mapped', [40, 45208, 41]], | |
[[12816, 12816], 'disallowed_STD3_mapped', [40, 45796, 41]], | |
[[12817, 12817], 'disallowed_STD3_mapped', [40, 46972, 41]], | |
[[12818, 12818], 'disallowed_STD3_mapped', [40, 47560, 41]], | |
[[12819, 12819], 'disallowed_STD3_mapped', [40, 48148, 41]], | |
[[12820, 12820], 'disallowed_STD3_mapped', [40, 49324, 41]], | |
[[12821, 12821], 'disallowed_STD3_mapped', [40, 50500, 41]], | |
[[12822, 12822], 'disallowed_STD3_mapped', [40, 51088, 41]], | |
[[12823, 12823], 'disallowed_STD3_mapped', [40, 52264, 41]], | |
[[12824, 12824], 'disallowed_STD3_mapped', [40, 52852, 41]], | |
[[12825, 12825], 'disallowed_STD3_mapped', [40, 53440, 41]], | |
[[12826, 12826], 'disallowed_STD3_mapped', [40, 54028, 41]], | |
[[12827, 12827], 'disallowed_STD3_mapped', [40, 54616, 41]], | |
[[12828, 12828], 'disallowed_STD3_mapped', [40, 51452, 41]], | |
[[12829, 12829], 'disallowed_STD3_mapped', [40, 50724, 51204, 41]], | |
[[12830, 12830], 'disallowed_STD3_mapped', [40, 50724, 54980, 41]], | |
[[12831, 12831], 'disallowed'], | |
[[12832, 12832], 'disallowed_STD3_mapped', [40, 19968, 41]], | |
[[12833, 12833], 'disallowed_STD3_mapped', [40, 20108, 41]], | |
[[12834, 12834], 'disallowed_STD3_mapped', [40, 19977, 41]], | |
[[12835, 12835], 'disallowed_STD3_mapped', [40, 22235, 41]], | |
[[12836, 12836], 'disallowed_STD3_mapped', [40, 20116, 41]], | |
[[12837, 12837], 'disallowed_STD3_mapped', [40, 20845, 41]], | |
[[12838, 12838], 'disallowed_STD3_mapped', [40, 19971, 41]], | |
[[12839, 12839], 'disallowed_STD3_mapped', [40, 20843, 41]], | |
[[12840, 12840], 'disallowed_STD3_mapped', [40, 20061, 41]], | |
[[12841, 12841], 'disallowed_STD3_mapped', [40, 21313, 41]], | |
[[12842, 12842], 'disallowed_STD3_mapped', [40, 26376, 41]], | |
[[12843, 12843], 'disallowed_STD3_mapped', [40, 28779, 41]], | |
[[12844, 12844], 'disallowed_STD3_mapped', [40, 27700, 41]], | |
[[12845, 12845], 'disallowed_STD3_mapped', [40, 26408, 41]], | |
[[12846, 12846], 'disallowed_STD3_mapped', [40, 37329, 41]], | |
[[12847, 12847], 'disallowed_STD3_mapped', [40, 22303, 41]], | |
[[12848, 12848], 'disallowed_STD3_mapped', [40, 26085, 41]], | |
[[12849, 12849], 'disallowed_STD3_mapped', [40, 26666, 41]], | |
[[12850, 12850], 'disallowed_STD3_mapped', [40, 26377, 41]], | |
[[12851, 12851], 'disallowed_STD3_mapped', [40, 31038, 41]], | |
[[12852, 12852], 'disallowed_STD3_mapped', [40, 21517, 41]], | |
[[12853, 12853], 'disallowed_STD3_mapped', [40, 29305, 41]], | |
[[12854, 12854], 'disallowed_STD3_mapped', [40, 36001, 41]], | |
[[12855, 12855], 'disallowed_STD3_mapped', [40, 31069, 41]], | |
[[12856, 12856], 'disallowed_STD3_mapped', [40, 21172, 41]], | |
[[12857, 12857], 'disallowed_STD3_mapped', [40, 20195, 41]], | |
[[12858, 12858], 'disallowed_STD3_mapped', [40, 21628, 41]], | |
[[12859, 12859], 'disallowed_STD3_mapped', [40, 23398, 41]], | |
[[12860, 12860], 'disallowed_STD3_mapped', [40, 30435, 41]], | |
[[12861, 12861], 'disallowed_STD3_mapped', [40, 20225, 41]], | |
[[12862, 12862], 'disallowed_STD3_mapped', [40, 36039, 41]], | |
[[12863, 12863], 'disallowed_STD3_mapped', [40, 21332, 41]], | |
[[12864, 12864], 'disallowed_STD3_mapped', [40, 31085, 41]], | |
[[12865, 12865], 'disallowed_STD3_mapped', [40, 20241, 41]], | |
[[12866, 12866], 'disallowed_STD3_mapped', [40, 33258, 41]], | |
[[12867, 12867], 'disallowed_STD3_mapped', [40, 33267, 41]], | |
[[12868, 12868], 'mapped', [21839]], | |
[[12869, 12869], 'mapped', [24188]], | |
[[12870, 12870], 'mapped', [25991]], | |
[[12871, 12871], 'mapped', [31631]], | |
[[12872, 12879], 'valid', [], 'NV8'], | |
[[12880, 12880], 'mapped', [112, 116, 101]], | |
[[12881, 12881], 'mapped', [50, 49]], | |
[[12882, 12882], 'mapped', [50, 50]], | |
[[12883, 12883], 'mapped', [50, 51]], | |
[[12884, 12884], 'mapped', [50, 52]], | |
[[12885, 12885], 'mapped', [50, 53]], | |
[[12886, 12886], 'mapped', [50, 54]], | |
[[12887, 12887], 'mapped', [50, 55]], | |
[[12888, 12888], 'mapped', [50, 56]], | |
[[12889, 12889], 'mapped', [50, 57]], | |
[[12890, 12890], 'mapped', [51, 48]], | |
[[12891, 12891], 'mapped', [51, 49]], | |
[[12892, 12892], 'mapped', [51, 50]], | |
[[12893, 12893], 'mapped', [51, 51]], | |
[[12894, 12894], 'mapped', [51, 52]], | |
[[12895, 12895], 'mapped', [51, 53]], | |
[[12896, 12896], 'mapped', [4352]], | |
[[12897, 12897], 'mapped', [4354]], | |
[[12898, 12898], 'mapped', [4355]], | |
[[12899, 12899], 'mapped', [4357]], | |
[[12900, 12900], 'mapped', [4358]], | |
[[12901, 12901], 'mapped', [4359]], | |
[[12902, 12902], 'mapped', [4361]], | |
[[12903, 12903], 'mapped', [4363]], | |
[[12904, 12904], 'mapped', [4364]], | |
[[12905, 12905], 'mapped', [4366]], | |
[[12906, 12906], 'mapped', [4367]], | |
[[12907, 12907], 'mapped', [4368]], | |
[[12908, 12908], 'mapped', [4369]], | |
[[12909, 12909], 'mapped', [4370]], | |
[[12910, 12910], 'mapped', [44032]], | |
[[12911, 12911], 'mapped', [45208]], | |
[[12912, 12912], 'mapped', [45796]], | |
[[12913, 12913], 'mapped', [46972]], | |
[[12914, 12914], 'mapped', [47560]], | |
[[12915, 12915], 'mapped', [48148]], | |
[[12916, 12916], 'mapped', [49324]], | |
[[12917, 12917], 'mapped', [50500]], | |
[[12918, 12918], 'mapped', [51088]], | |
[[12919, 12919], 'mapped', [52264]], | |
[[12920, 12920], 'mapped', [52852]], | |
[[12921, 12921], 'mapped', [53440]], | |
[[12922, 12922], 'mapped', [54028]], | |
[[12923, 12923], 'mapped', [54616]], | |
[[12924, 12924], 'mapped', [52280, 44256]], | |
[[12925, 12925], 'mapped', [51452, 51032]], | |
[[12926, 12926], 'mapped', [50864]], | |
[[12927, 12927], 'valid', [], 'NV8'], | |
[[12928, 12928], 'mapped', [19968]], | |
[[12929, 12929], 'mapped', [20108]], | |
[[12930, 12930], 'mapped', [19977]], | |
[[12931, 12931], 'mapped', [22235]], | |
[[12932, 12932], 'mapped', [20116]], | |
[[12933, 12933], 'mapped', [20845]], | |
[[12934, 12934], 'mapped', [19971]], | |
[[12935, 12935], 'mapped', [20843]], | |
[[12936, 12936], 'mapped', [20061]], | |
[[12937, 12937], 'mapped', [21313]], | |
[[12938, 12938], 'mapped', [26376]], | |
[[12939, 12939], 'mapped', [28779]], | |
[[12940, 12940], 'mapped', [27700]], | |
[[12941, 12941], 'mapped', [26408]], | |
[[12942, 12942], 'mapped', [37329]], | |
[[12943, 12943], 'mapped', [22303]], | |
[[12944, 12944], 'mapped', [26085]], | |
[[12945, 12945], 'mapped', [26666]], | |
[[12946, 12946], 'mapped', [26377]], | |
[[12947, 12947], 'mapped', [31038]], | |
[[12948, 12948], 'mapped', [21517]], | |
[[12949, 12949], 'mapped', [29305]], | |
[[12950, 12950], 'mapped', [36001]], | |
[[12951, 12951], 'mapped', [31069]], | |
[[12952, 12952], 'mapped', [21172]], | |
[[12953, 12953], 'mapped', [31192]], | |
[[12954, 12954], 'mapped', [30007]], | |
[[12955, 12955], 'mapped', [22899]], | |
[[12956, 12956], 'mapped', [36969]], | |
[[12957, 12957], 'mapped', [20778]], | |
[[12958, 12958], 'mapped', [21360]], | |
[[12959, 12959], 'mapped', [27880]], | |
[[12960, 12960], 'mapped', [38917]], | |
[[12961, 12961], 'mapped', [20241]], | |
[[12962, 12962], 'mapped', [20889]], | |
[[12963, 12963], 'mapped', [27491]], | |
[[12964, 12964], 'mapped', [19978]], | |
[[12965, 12965], 'mapped', [20013]], | |
[[12966, 12966], 'mapped', [19979]], | |
[[12967, 12967], 'mapped', [24038]], | |
[[12968, 12968], 'mapped', [21491]], | |
[[12969, 12969], 'mapped', [21307]], | |
[[12970, 12970], 'mapped', [23447]], | |
[[12971, 12971], 'mapped', [23398]], | |
[[12972, 12972], 'mapped', [30435]], | |
[[12973, 12973], 'mapped', [20225]], | |
[[12974, 12974], 'mapped', [36039]], | |
[[12975, 12975], 'mapped', [21332]], | |
[[12976, 12976], 'mapped', [22812]], | |
[[12977, 12977], 'mapped', [51, 54]], | |
[[12978, 12978], 'mapped', [51, 55]], | |
[[12979, 12979], 'mapped', [51, 56]], | |
[[12980, 12980], 'mapped', [51, 57]], | |
[[12981, 12981], 'mapped', [52, 48]], | |
[[12982, 12982], 'mapped', [52, 49]], | |
[[12983, 12983], 'mapped', [52, 50]], | |
[[12984, 12984], 'mapped', [52, 51]], | |
[[12985, 12985], 'mapped', [52, 52]], | |
[[12986, 12986], 'mapped', [52, 53]], | |
[[12987, 12987], 'mapped', [52, 54]], | |
[[12988, 12988], 'mapped', [52, 55]], | |
[[12989, 12989], 'mapped', [52, 56]], | |
[[12990, 12990], 'mapped', [52, 57]], | |
[[12991, 12991], 'mapped', [53, 48]], | |
[[12992, 12992], 'mapped', [49, 26376]], | |
[[12993, 12993], 'mapped', [50, 26376]], | |
[[12994, 12994], 'mapped', [51, 26376]], | |
[[12995, 12995], 'mapped', [52, 26376]], | |
[[12996, 12996], 'mapped', [53, 26376]], | |
[[12997, 12997], 'mapped', [54, 26376]], | |
[[12998, 12998], 'mapped', [55, 26376]], | |
[[12999, 12999], 'mapped', [56, 26376]], | |
[[13000, 13000], 'mapped', [57, 26376]], | |
[[13001, 13001], 'mapped', [49, 48, 26376]], | |
[[13002, 13002], 'mapped', [49, 49, 26376]], | |
[[13003, 13003], 'mapped', [49, 50, 26376]], | |
[[13004, 13004], 'mapped', [104, 103]], | |
[[13005, 13005], 'mapped', [101, 114, 103]], | |
[[13006, 13006], 'mapped', [101, 118]], | |
[[13007, 13007], 'mapped', [108, 116, 100]], | |
[[13008, 13008], 'mapped', [12450]], | |
[[13009, 13009], 'mapped', [12452]], | |
[[13010, 13010], 'mapped', [12454]], | |
[[13011, 13011], 'mapped', [12456]], | |
[[13012, 13012], 'mapped', [12458]], | |
[[13013, 13013], 'mapped', [12459]], | |
[[13014, 13014], 'mapped', [12461]], | |
[[13015, 13015], 'mapped', [12463]], | |
[[13016, 13016], 'mapped', [12465]], | |
[[13017, 13017], 'mapped', [12467]], | |
[[13018, 13018], 'mapped', [12469]], | |
[[13019, 13019], 'mapped', [12471]], | |
[[13020, 13020], 'mapped', [12473]], | |
[[13021, 13021], 'mapped', [12475]], | |
[[13022, 13022], 'mapped', [12477]], | |
[[13023, 13023], 'mapped', [12479]], | |
[[13024, 13024], 'mapped', [12481]], | |
[[13025, 13025], 'mapped', [12484]], | |
[[13026, 13026], 'mapped', [12486]], | |
[[13027, 13027], 'mapped', [12488]], | |
[[13028, 13028], 'mapped', [12490]], | |
[[13029, 13029], 'mapped', [12491]], | |
[[13030, 13030], 'mapped', [12492]], | |
[[13031, 13031], 'mapped', [12493]], | |
[[13032, 13032], 'mapped', [12494]], | |
[[13033, 13033], 'mapped', [12495]], | |
[[13034, 13034], 'mapped', [12498]], | |
[[13035, 13035], 'mapped', [12501]], | |
[[13036, 13036], 'mapped', [12504]], | |
[[13037, 13037], 'mapped', [12507]], | |
[[13038, 13038], 'mapped', [12510]], | |
[[13039, 13039], 'mapped', [12511]], | |
[[13040, 13040], 'mapped', [12512]], | |
[[13041, 13041], 'mapped', [12513]], | |
[[13042, 13042], 'mapped', [12514]], | |
[[13043, 13043], 'mapped', [12516]], | |
[[13044, 13044], 'mapped', [12518]], | |
[[13045, 13045], 'mapped', [12520]], | |
[[13046, 13046], 'mapped', [12521]], | |
[[13047, 13047], 'mapped', [12522]], | |
[[13048, 13048], 'mapped', [12523]], | |
[[13049, 13049], 'mapped', [12524]], | |
[[13050, 13050], 'mapped', [12525]], | |
[[13051, 13051], 'mapped', [12527]], | |
[[13052, 13052], 'mapped', [12528]], | |
[[13053, 13053], 'mapped', [12529]], | |
[[13054, 13054], 'mapped', [12530]], | |
[[13055, 13055], 'disallowed'], | |
[[13056, 13056], 'mapped', [12450, 12497, 12540, 12488]], | |
[[13057, 13057], 'map |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment