bry-biometric-collector 2.2.13-RC01 → 2.2.13-RC03
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/dist/DocumentCollector_782a28d6_2.2.13-RC03.js +1354 -0
- package/dist/FaceCollector_37bd6bbf_2.2.13-RC03.js +2312 -0
- package/dist/TakePictureBtn_c1a406fb_2.2.13-RC03.js +1060 -0
- package/dist/bry-biometric-collector-main.js +1 -1
- package/dist/{en-us_dfe3f804_2.2.13-RC01.js → en-us_9c06257f_2.2.13-RC03.js} +66 -47
- package/dist/{es-cl_14b74e4b_2.2.13-RC01.js → es-cl_ed33301b_2.2.13-RC03.js} +35 -18
- package/dist/{face_api_0e3ce8c8_2.2.13-RC01.js → face_api_0e3ce8c8_2.2.13-RC03.js} +1 -1
- package/dist/fingersApi_9b940222_2.2.13-RC03.js +133 -0
- package/dist/{index-no-detector_acb82d83_2.2.13-RC01.js → index-no-detector_acb82d83_2.2.13-RC03.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{main_a5a58924_2.2.13-RC01.js → main_16f2e63a_2.2.13-RC03.js} +2462 -2440
- package/dist/{pt-br_2a12cf43_2.2.13-RC01.js → pt-br_4cf594be_2.2.13-RC03.js} +51 -32
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/CameraBtn_e1a5744b_2.2.13-RC01.js +0 -641
- package/dist/DocumentCollector_53693c32_2.2.13-RC01.js +0 -1394
- package/dist/FaceCollector_7acce443_2.2.13-RC01.js +0 -2369
- package/dist/fingersApi_9650317b_2.2.13-RC01.js +0 -147
@@ -0,0 +1,133 @@
|
|
1
|
+
import { u as m, $ as D, n as C, g as b, i as y, s as l, a as w, F as U, b as M, c as E, v as x, d as B, A as P, e as u, h as g, f as v, j as W, k as R, l as k, m as V, o as F, p as $ } from "./main_16f2e63a_2.2.13-RC03.js";
|
2
|
+
const f = m(D);
|
3
|
+
var X = /* @__PURE__ */ ((n) => (n.EXTENSION_MISSING = "EXTENSION_MISSING", n.USER_CANCELLED = "USER_CANCELLED", n.UNAUTHORIZED_EXTENSION = "UNAUTHORIZED_EXTENSION", n.SCANNER_NOT_FOUND = "SCANNER_NOT_FOUND", n.EXTENSION_MODULE_NOT_INSTALLED = "EXTENSION_MODULE_NOT_INSTALLED", n.FINGER_NOT_REMOVED = "FINGER_NOT_REMOVED", n.UNKNOWN_ERROR = "UNKNOWN_ERROR", n.EVALUATE_BIOMETRICS_TIMEOUT = "EVALUATE_BIOMETRICS_TIMEOUT", n.EVALUATE_BIOMETRICS_NETWORK_ISSUE = "EVALUATE_BIOMETRICS_NETWORK_ISSUE", n))(X || {});
|
4
|
+
class s extends Error {
|
5
|
+
constructor(a, d) {
|
6
|
+
super(a), this.status = d;
|
7
|
+
}
|
8
|
+
}
|
9
|
+
async function Q(n, a) {
|
10
|
+
const d = C([n])[0], T = b();
|
11
|
+
if (y(T))
|
12
|
+
throw new s(
|
13
|
+
"Attempting to capture finger but the extension apparently hasn't been properly injected. Received: " + T,
|
14
|
+
"EXTENSION_MISSING"
|
15
|
+
/* EXTENSION_MISSING */
|
16
|
+
);
|
17
|
+
if (l(!0), w())
|
18
|
+
throw l(!1), F(!1), new s(
|
19
|
+
"User cancelled",
|
20
|
+
"USER_CANCELLED"
|
21
|
+
/* USER_CANCELLED */
|
22
|
+
);
|
23
|
+
let c = null;
|
24
|
+
try {
|
25
|
+
c = await T.getFingerprint(
|
26
|
+
// @ts-ignore TODO: Alex has to fix this functions signature to accept pojo
|
27
|
+
JSON.stringify(
|
28
|
+
a ?? { outputFormat: "BASE64", imageFormat: "BMP", nonce: "webCollector", timeout: 3 }
|
29
|
+
)
|
30
|
+
);
|
31
|
+
} catch (e) {
|
32
|
+
console.error(e);
|
33
|
+
const t = e;
|
34
|
+
throw l(!1), t.key === "fingerprint.scanner.timeout" ? new s(
|
35
|
+
"Fingerprint scan timed out (didn't read a finger.)",
|
36
|
+
"USER_CANCELLED"
|
37
|
+
/* USER_CANCELLED */
|
38
|
+
) : t.key === "extension.authorization.canceled" ? new s(
|
39
|
+
"Extension wasn't given authorization.",
|
40
|
+
"UNAUTHORIZED_EXTENSION"
|
41
|
+
/* UNAUTHORIZED_EXTENSION */
|
42
|
+
) : t.key === "fingerprint.scanner.not.found" ? new s(
|
43
|
+
"Couldn't find fingerprint scanner.",
|
44
|
+
"SCANNER_NOT_FOUND"
|
45
|
+
/* SCANNER_NOT_FOUND */
|
46
|
+
) : t.key === "signer.not.installed" ? new s(
|
47
|
+
"The extension module isn't installed.",
|
48
|
+
"EXTENSION_MODULE_NOT_INSTALLED"
|
49
|
+
/* EXTENSION_MODULE_NOT_INSTALLED */
|
50
|
+
) : new s(
|
51
|
+
"Unknown error while capturing fingerprint.",
|
52
|
+
"UNKNOWN_ERROR"
|
53
|
+
/* UNKNOWN_ERROR */
|
54
|
+
);
|
55
|
+
}
|
56
|
+
if (w())
|
57
|
+
throw l(!1), F(!1), new s(
|
58
|
+
"User cancelled",
|
59
|
+
"USER_CANCELLED"
|
60
|
+
/* USER_CANCELLED */
|
61
|
+
);
|
62
|
+
const i = q(d);
|
63
|
+
i.image = c?.content.image?.data, i.base64WSQ = c?.content.fingerprint.data, i.nfiqRating = (c?.content.score || 0) + 98, i.status = U.AVAILABLE;
|
64
|
+
const L = M(E());
|
65
|
+
let r, _ = !1;
|
66
|
+
try {
|
67
|
+
r = await x(L, i);
|
68
|
+
} catch (e) {
|
69
|
+
if (i.nfiqRating = -1, i.base64WSQ = "", i.image = "", console.log("caught while validating fingerprint: ", e), B(e) && "message" in e && e.message === "error.template.extraction")
|
70
|
+
_ = !0;
|
71
|
+
else if (e instanceof XMLHttpRequest) {
|
72
|
+
const t = e;
|
73
|
+
"response" in t && "data" in t.response.data && t.response.data.message === "error.template.extraction" && (_ = !0);
|
74
|
+
} else
|
75
|
+
throw e instanceof P ? e.code === "ECONNABORTED" ? (console.log("The evaluate biometrics request took too long to answer!"), new s(
|
76
|
+
"Evaluate biometrics took too long to reply",
|
77
|
+
"EVALUATE_BIOMETRICS_TIMEOUT"
|
78
|
+
/* EVALUATE_BIOMETRICS_TIMEOUT */
|
79
|
+
)) : (console.error("Error evaluating biometrics!", e), u(E()), l(!1), new s(
|
80
|
+
"Network issue while validating biometrics, check logs",
|
81
|
+
"EVALUATE_BIOMETRICS_NETWORK_ISSUE"
|
82
|
+
/* EVALUATE_BIOMETRICS_NETWORK_ISSUE */
|
83
|
+
)) : (u(E()), l(!1), new s(
|
84
|
+
"Network issue while validating biometrics, check logs",
|
85
|
+
"EVALUATE_BIOMETRICS_NETWORK_ISSUE"
|
86
|
+
/* EVALUATE_BIOMETRICS_NETWORK_ISSUE */
|
87
|
+
));
|
88
|
+
}
|
89
|
+
let S, N, O, A, I, o = g.LOW_QUALITY;
|
90
|
+
if (r) {
|
91
|
+
const e = r.bodyParts.find(
|
92
|
+
(t) => t.bodyPart === i.bodyPart
|
93
|
+
);
|
94
|
+
i.nfiqRating = e.quality, (e.quality > v() || e.status === "LOW_QUALITY") && (S = !0, o = g.LOW_QUALITY), r.bodyParts.find((t) => t.status === "DUPLICATE") && (N = !0, o = g.DUPLICATE), r.bodyParts.find((t) => t.status === "FORBIDDEN") && (O = !0, o = g.FORBIDDEN), r.bodyParts.find((t) => t.status === "AGR") && (A = !0, o = g.AGR_DETECTED), r.bodyParts.find((t) => t.status === "AGR_NOT_MATCH") && (I = !0, o = g.AGR_NO_MATCH);
|
95
|
+
}
|
96
|
+
if (N || S || O || I || A || _) {
|
97
|
+
i.nfiqRating = -1, i.base64WSQ = "", i.image = "", i.status = U.AVAILABLE;
|
98
|
+
let e = "badFingerQualitySwal";
|
99
|
+
N ? e = "unknownDuplicateFingerSwal" : O ? e = "forbiddenFingerSwal" : A ? e = "agrFinger" : I && (e = "agrFingerNotMatched");
|
100
|
+
let t = f(`${e}.text`);
|
101
|
+
if (W($) && N) {
|
102
|
+
e = "duplicateFingerSwal", t = f(`${e}.text`, {
|
103
|
+
values: {
|
104
|
+
finger1: f(`${e}.${r.matchingFingers?.[0]}`),
|
105
|
+
finger2: f(`${e}.${r.matchingFingers?.[1]}`)
|
106
|
+
}
|
107
|
+
});
|
108
|
+
const p = R();
|
109
|
+
return {
|
110
|
+
returnCode: o,
|
111
|
+
bodyParts: p,
|
112
|
+
matchingFingers: r.matchingFingers,
|
113
|
+
message: t
|
114
|
+
};
|
115
|
+
}
|
116
|
+
const h = R();
|
117
|
+
return { returnCode: o, bodyParts: h, message: t };
|
118
|
+
}
|
119
|
+
return u(E()), l(!1), k(), { returnCode: g.CAPTURED, bodyParts: R() };
|
120
|
+
}
|
121
|
+
function q(n) {
|
122
|
+
V();
|
123
|
+
for (const a of E())
|
124
|
+
if (a.index === n)
|
125
|
+
return a.selected = !0, a;
|
126
|
+
throw new Error(`Finger ${n} not found`);
|
127
|
+
}
|
128
|
+
export {
|
129
|
+
s as CaptureApiError,
|
130
|
+
X as CaptureErrorStatusEnum,
|
131
|
+
Q as captureSingleFinger
|
132
|
+
};
|
133
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2Vyc0FwaV85Yjk0MDIyMl8yLjIuMTMtUkMwMy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS9maW5nZXJzQXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVQYXJhbXMsIEZpbmdlcnByaW50U2NhbiB9IGZyb20gJy4uL2luY2x1ZGUvRXh0ZW5zaW9uJztcbmltcG9ydCB7IGlzQ2FuY2VsbGluZywgc2V0Q2FuY2VsbGluZywgc2V0Q2FwdHVyaW5nIH0gZnJvbSAnLi4vbGliL2ZpbmdlcnNUYWIvYnV0dG9ucy9jYXB0dXJlL2NhcHR1cmVTdG9yZSc7XG5pbXBvcnQgeyBnZXRFeHRlbnNpb24sIGhhc0Zpbmdlck9uQW5kT2ZmLCBpc0V2ZXJ5dGhpbmdJbnN0YWxsZWQgfSBmcm9tICcuLi9saWIvZmluZ2Vyc1RhYi9leHRlbnNpb24vZXh0ZW5zaW9uJztcbmltcG9ydCB7XG4gIEJvZHlQYXJ0TmFtZXMsXG4gIEZpbmdlcixcbiAgZ2V0U2VsZWN0ZWRGaW5nZXIsXG4gIG5vcm1hbGl6ZUZpbmdlck5hbWVzQW5kSW5kZXhlc1RvSW5kZXhlcyxcbiAgdHlwZSBGaW5nZXJJbmRleCxcbiAgZ2V0RmluZ2VycyxcbiAgc2VsZWN0Tm90aGluZyxcbiAgRmluZ2VyU3RhdHVzLFxuICBnZXRDb2xsZWN0ZWRGaW5nZXJzLFxuICBzZXRGaW5nZXJzLFxuICBnZXRNaW5OZmlxQWNjZXB0YWJsZSxcbn0gZnJvbSAnLi4vbGliL2ZpbmdlcnNUYWIvaGFuZC9oYW5kUGFydHMvZmluZ2Vyc1N0b3JlJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc09iamVjdEVtcHR5IH0gZnJvbSAnLi4vbGliL3V0aWwvdXRpbCc7XG5pbXBvcnQge1xuICB2YWxpZGF0ZUZpbmdlckJpb21ldHJpY3MsXG4gIHR5cGUgQm9keVBhcnRSZXR1cm5UeXBlLFxuICB1c2VXYXNtLFxuICB0eXBlIEJvZHlQYXJ0LFxufSBmcm9tICcuLi9saWIvdmFsaWRhdG9ycy9iaW9tZXRyaWNzVmFsaWRhdG9yJztcbmltcG9ydCB7XG4gIGNvbGxlY3RGaW5nZXJzLFxuICBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLFxuICBub3RpZnlGaW5nZXJDb2xsZWN0ZWQsXG59IGZyb20gJy4uL2xpYi9maW5nZXJzVGFiL2J1dHRvbnMvYnV0dG9uSGFuZGxlcnMnO1xuaW1wb3J0IHsgZm9ybWF0LCB1bndyYXBGdW5jdGlvblN0b3JlIH0gZnJvbSAnc3ZlbHRlLWkxOG4nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnc3ZlbHRlL3N0b3JlJztcbmNvbnN0ICRmb3JtYXQgPSB1bndyYXBGdW5jdGlvblN0b3JlKGZvcm1hdCk7XG5cbmV4cG9ydCB7IGNhcHR1cmVTaW5nbGVGaW5nZXIgfTtcblxuZXhwb3J0IGNvbnN0IGVudW0gQ2FwdHVyZUVycm9yU3RhdHVzRW51bSB7XG4gIEVYVEVOU0lPTl9NSVNTSU5HID0gJ0VYVEVOU0lPTl9NSVNTSU5HJyxcbiAgVVNFUl9DQU5DRUxMRUQgPSAnVVNFUl9DQU5DRUxMRUQnLFxuICBVTkFVVEhPUklaRURfRVhURU5TSU9OID0gJ1VOQVVUSE9SSVpFRF9FWFRFTlNJT04nLFxuICBTQ0FOTkVSX05PVF9GT1VORCA9ICdTQ0FOTkVSX05PVF9GT1VORCcsXG4gIEVYVEVOU0lPTl9NT0RVTEVfTk9UX0lOU1RBTExFRCA9ICdFWFRFTlNJT05fTU9EVUxFX05PVF9JTlNUQUxMRUQnLFxuICBGSU5HRVJfTk9UX1JFTU9WRUQgPSAnRklOR0VSX05PVF9SRU1PVkVEJyxcbiAgVU5LTk9XTl9FUlJPUiA9ICdVTktOT1dOX0VSUk9SJyxcbiAgRVZBTFVBVEVfQklPTUVUUklDU19USU1FT1VUID0gJ0VWQUxVQVRFX0JJT01FVFJJQ1NfVElNRU9VVCcsXG4gIEVWQUxVQVRFX0JJT01FVFJJQ1NfTkVUV09SS19JU1NVRSA9ICdFVkFMVUFURV9CSU9NRVRSSUNTX05FVFdPUktfSVNTVUUnLFxufVxuXG5leHBvcnQgY2xhc3MgQ2FwdHVyZUFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBzdGF0dXM6IENhcHR1cmVFcnJvclN0YXR1c0VudW0pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2dyYW1tYXRpY2FsbHkgY2FwdHVyZSBzaW5nbGUgZmluZ2VyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVTaW5nbGVGaW5nZXIoXG4gIGZpbmdlck5hbWVPckluZGV4OiBudW1iZXIgfCBCb2R5UGFydE5hbWVzLFxuICBnZXRGaW5nZXJwcmludFBhcmFtczogQ2FwdHVyZVBhcmFtc1xuKTogUHJvbWlzZTx7XG4gIHJldHVybkNvZGU6IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXM7XG4gIGJvZHlQYXJ0czogQm9keVBhcnRbXTtcbiAgbWF0Y2hpbmdGaW5nZXJzPzogQm9keVBhcnROYW1lc1tdO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufT4ge1xuICBjb25zdCBmaW5nZXJJbmRleCA9IG5vcm1hbGl6ZUZpbmdlck5hbWVzQW5kSW5kZXhlc1RvSW5kZXhlcyhbZmluZ2VyTmFtZU9ySW5kZXhdKVswXTtcbiAgLy8gdHJ5IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RXh0ZW5zaW9uKCk7XG4gIC8vIGNoZWNrIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGVcbiAgaWYgKGlzT2JqZWN0RW1wdHkoZXh0ZW5zaW9uKSkge1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICBcIkF0dGVtcHRpbmcgdG8gY2FwdHVyZSBmaW5nZXIgYnV0IHRoZSBleHRlbnNpb24gYXBwYXJlbnRseSBoYXNuJ3QgYmVlbiBwcm9wZXJseSBpbmplY3RlZC4gUmVjZWl2ZWQ6IFwiICsgZXh0ZW5zaW9uLFxuICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5FWFRFTlNJT05fTUlTU0lOR1xuICAgICk7XG4gIH1cblxuICAvLyBjaGVjayB0aGF0IHRoZSBleHRlbnNpb24gaXMgaW5zdGFsbGVkXG4gIC8vIGlmIChnZXRFeHRlbnNpb24oKSkge1xuICAvLyAgIGlmICgnaXNFeHRlbnNpb25JbnN0YWxsZWQnIGluIGdldEV4dGVuc2lvbigpICYmICEoYXdhaXQgZ2V0RXh0ZW5zaW9uKCkuaXNFeHRlbnNpb25JbnN0YWxsZWQoKSkpIHtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoYFRoZSBleHRlbnNpb24gaXNuJ3QgaW5zdGFsbGVkIWApO1xuICAvLyAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcIlRoZSBleHRlbnNpb24gaXNuJ3QgaW5zdGFsbGVkIVwiLCBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVYVEVOU0lPTl9NSVNTSU5HKTtcbiAgLy8gICB9XG5cbiAgLy8gICAvLyBjaGVjayB0aGF0IHRoZSBtb2R1bGUgYW5kIGNvbXBsZW1lbnQgYXJlIGFsbCBpbnN0YWxsZWRcbiAgLy8gICBpZiAoIWlzRXZlcnl0aGluZ0luc3RhbGxlZCgpKSB7XG4gIC8vICAgICBhd2FpdCBnZXRFeHRlbnNpb24oKS5pbnN0YWxsQ29tcG9uZW50cz8uKFt7IHR5cGU6ICdmaW5nZXJQcmludCcgfV0pO1xuICAvLyAgIH1cbiAgLy8gfSBlbHNlIHtcbiAgLy8gICB0aHJvdyBuZXcgQ2FwdHVyZUFwaUVycm9yKFxuICAvLyAgICAgYFRoZSBleHRlbnNpb24gdmFyaWFibGUgcmVjZWl2ZWQgaXMgZW1wdHk6ICR7Z2V0RXh0ZW5zaW9uKCl9IWAsXG4gIC8vICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVYVEVOU0lPTl9NSVNTSU5HXG4gIC8vICAgKTtcbiAgLy8gfVxuXG4gIHNldENhcHR1cmluZyh0cnVlKTtcblxuICAvLyBpZiBzb21laG93IHRoZXkgbWFuYWdlZCB0byBhc2sgZm9yIGNhbmNlbGxhdGlvbiByaWdodCBiZWZvcmUgdGhlIHNjYW4sIHRoaXMgY2F0Y2hlcyB0aGF0XG4gIGlmIChpc0NhbmNlbGxpbmcoKSkge1xuICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgc2V0Q2FuY2VsbGluZyhmYWxzZSk7XG4gICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcignVXNlciBjYW5jZWxsZWQnLCBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLlVTRVJfQ0FOQ0VMTEVEKTtcbiAgfVxuXG4gIC8vIHByb21wdCB1c2VyIHRvIGNvbGxlY3QgdGhlIGZpbmdlclxuICBsZXQgY2FwdHVyZTogRmluZ2VycHJpbnRTY2FuIHwgbnVsbCA9IG51bGw7XG4gIHRyeSB7XG4gICAgLy8gY2FwdHVyZSB0aGUgZmluZ2VyXG4gICAgLy8gKmltcGxlbWVudGF0aW9uIGNvbnNpZGVyaW5nIHdlIG9ubHkgaGF2ZSB0aGUgZ2V0RmluZ2VycHJpbnQgbWV0aG9kIGF2YWlsYWJsZVxuICAgIGNhcHR1cmUgPSBhd2FpdCBleHRlbnNpb24uZ2V0RmluZ2VycHJpbnQoXG4gICAgICAvLyBAdHMtaWdub3JlIFRPRE86IEFsZXggaGFzIHRvIGZpeCB0aGlzIGZ1bmN0aW9ucyBzaWduYXR1cmUgdG8gYWNjZXB0IHBvam9cbiAgICAgIEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBnZXRGaW5nZXJwcmludFBhcmFtcyA/PyB7IG91dHB1dEZvcm1hdDogJ0JBU0U2NCcsIGltYWdlRm9ybWF0OiAnQk1QJywgbm9uY2U6ICd3ZWJDb2xsZWN0b3InLCB0aW1lb3V0OiAzIH1cbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gLy8gaWYgd2UgaGF2ZSB0aGlzIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlLCBhc2sgdGhlIHVzZXIgdG8gcmVtb3ZlIGhpcyBmaW5nZXIgZnJvbSB0aGUgc2Nhbm5lclxuICAgIC8vIGNvbnNvbGUubG9nKCdoYXNGaW5nZXJPbkFuZE9mZicsIGhhc0Zpbmdlck9uQW5kT2ZmKCkpO1xuICAgIC8vIGlmIChoYXNGaW5nZXJPbkFuZE9mZigpKSB7XG4gICAgLy8gICAvLyBwcm9tcHQgdXNlciB0byByZW1vdmUgaGlzIGZpbmdlclxuICAgIC8vICAgLy8gaW5pdGlhdGUgdGltZXIsIGlmIGFmdGVyIHNvbWUgdGltZSB0aGUgZmluZ2VyIHN0aWxsIGhhc24ndCBiZWVuIGxpZnRlZCwgYXNrIHRoZSB1c2VyIHRvIGNsZWFuIHRoZSBzY2FubmVyXG4gICAgLy8gICBsZXQgc2Nhbm5lckRpcnR5ID0gZmFsc2U7XG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgICAgc2Nhbm5lckRpcnR5ID0gdHJ1ZTtcbiAgICAvLyAgIH0sIDgwMDApO1xuICAgIC8vICAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyAgICAgaWYgKChhd2FpdCBleHRlbnNpb24uaXNGaW5nZXJPZmY/LigpKT8uaXNGaW5nZXJPZmYgfHwgc2Nhbm5lckRpcnR5IHx8IGlzQ2FuY2VsbGluZygpKSB7XG4gICAgLy8gICAgICAgYnJlYWs7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH1cbiAgICAvLyAgIC8vIGluZm9ybSB1c2VyIHRoZXkgc2hvdWxkIGNsZWFuIHRoZSBzY2FubmVyXG4gICAgLy8gICAgICAgaWYgKHNjYW5uZXJEaXJ0eSkge1xuXG4gICAgLy8gICAgICAgfVxuICAgIC8vIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgeyBrZXk6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9O1xuICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgLy8gVE9ETzogdHlwZSB0aGlzIGFuZCBjcmVhdGUgZW51bSBmb3IgZXJyb3JzXG4gICAgaWYgKGUua2V5ID09PSAnZmluZ2VycHJpbnQuc2Nhbm5lci50aW1lb3V0Jykge1xuICAgICAgLy8gaWYgdGltZWRvdXQganVzdCB0cnkgYWdhaW4sIHVubGVzcyB0cnlpbmcgdG8gY2FuY2VsXG4gICAgICAvLyBUT0RPOiBtYXliZSBzdG9wIGFmdGVyIHNvIG1hbnkgdHJpZXNcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgIFwiRmluZ2VycHJpbnQgc2NhbiB0aW1lZCBvdXQgKGRpZG4ndCByZWFkIGEgZmluZ2VyLilcIixcbiAgICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VU0VSX0NBTkNFTExFRFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnZXh0ZW5zaW9uLmF1dGhvcml6YXRpb24uY2FuY2VsZWQnKSB7XG4gICAgICAvLyB1c2VyIGRpZG4ndCBhdXRob3JpemUgdGhlIGRvbWFpbiwgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gc28gc3RvcC5cbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXCJFeHRlbnNpb24gd2Fzbid0IGdpdmVuIGF1dGhvcml6YXRpb24uXCIsIENhcHR1cmVFcnJvclN0YXR1c0VudW0uVU5BVVRIT1JJWkVEX0VYVEVOU0lPTik7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ2ZpbmdlcnByaW50LnNjYW5uZXIubm90LmZvdW5kJykge1xuICAgICAgLy8gdXNlciBkb2Vzbid0IGhhdmUgYSBzY2FubmVyIGNvbm5lY3RlZCwgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gc28gc3RvcC5cbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGZpbmdlcnByaW50IHNjYW5uZXIuXCIsIENhcHR1cmVFcnJvclN0YXR1c0VudW0uU0NBTk5FUl9OT1RfRk9VTkQpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdzaWduZXIubm90Lmluc3RhbGxlZCcpIHtcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgIFwiVGhlIGV4dGVuc2lvbiBtb2R1bGUgaXNuJ3QgaW5zdGFsbGVkLlwiLFxuICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVYVEVOU0lPTl9NT0RVTEVfTk9UX0lOU1RBTExFRFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcignVW5rbm93biBlcnJvciB3aGlsZSBjYXB0dXJpbmcgZmluZ2VycHJpbnQuJywgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VTktOT1dOX0VSUk9SKTtcbiAgICB9XG4gIH1cbiAgLy8gaWYgc29tZWhvdyB0aGV5IG1hbmFnZWQgdG8gYXNrIGZvciBjYW5jZWxsYXRpb24gcmlnaHQgYmVmb3JlIHRoZSBzY2FuLCB0aGlzIGNhdGNoZXMgdGhhdFxuICBpZiAoaXNDYW5jZWxsaW5nKCkpIHtcbiAgICBzZXRDYXB0dXJpbmcoZmFsc2UpO1xuICAgIHNldENhbmNlbGxpbmcoZmFsc2UpO1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoJ1VzZXIgY2FuY2VsbGVkJywgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VU0VSX0NBTkNFTExFRCk7XG4gIH1cblxuICAvLyBzZWxlY3QgYW5kIGdldCBmaW5nZXJcbiAgY29uc3QgZmluZ2VyID0gc2VsZWN0RmluZ2VyQXBpKGZpbmdlckluZGV4KTtcbiAgLy8gc2V0IHRoaXMgZmluZ2VycyBhdHRyaWJ1dGVzIHRvIHRoZSByZWNlbnRseSBjb2xsZWN0ZWQgZmluZ2VyXG4gIGZpbmdlci5pbWFnZSA9IGNhcHR1cmU/LmNvbnRlbnQuaW1hZ2U/LmRhdGEgYXMgc3RyaW5nO1xuICBmaW5nZXIuYmFzZTY0V1NRID0gY2FwdHVyZT8uY29udGVudC5maW5nZXJwcmludC5kYXRhIGFzIHN0cmluZztcbiAgZmluZ2VyLm5maXFSYXRpbmcgPSAoY2FwdHVyZT8uY29udGVudC5zY29yZSB8fCAwKSArIDk4O1xuICBmaW5nZXIuc3RhdHVzID0gRmluZ2VyU3RhdHVzLkFWQUlMQUJMRTtcbiAgLy8gR2V0IEFMTCB0aGUgY29sbGVjdGVkIGZpbmdlcnNcbiAgY29uc3QgY29sbGVjdGVkRmluZ2VycyA9IGdldENvbGxlY3RlZEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcblxuICAvLyBzZW5kIHRvIHJlbW90ZVxuICBsZXQgcmVzcG9uc2UsXG4gICAgZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb24gPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICByZXNwb25zZSA9IGF3YWl0IHZhbGlkYXRlRmluZ2VyQmlvbWV0cmljcyhjb2xsZWN0ZWRGaW5nZXJzLCBmaW5nZXIpO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgLy8gY2xlYXIgdGhlIGZpbmdlclxuICAgIGZpbmdlci5uZmlxUmF0aW5nID0gLTE7XG4gICAgZmluZ2VyLmJhc2U2NFdTUSA9ICcnO1xuICAgIGZpbmdlci5pbWFnZSA9ICcnO1xuICAgIC8vIHdhcm4gZXJyb3JcbiAgICBjb25zb2xlLmxvZygnY2F1Z2h0IHdoaWxlIHZhbGlkYXRpbmcgZmluZ2VycHJpbnQ6ICcsIGVycm9yKTtcbiAgICAvLyBlcnJvciB3aGlsZSBleHRyYWN0aW5nLCBzaG93IGEgbG93IHF1YWxpdHkgc3dhbFxuICAgIGlmIChpc09iamVjdChlcnJvcikgJiYgJ21lc3NhZ2UnIGluIGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT09ICdlcnJvci50ZW1wbGF0ZS5leHRyYWN0aW9uJykge1xuICAgICAgZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCkge1xuICAgICAgY29uc3QgZSA9IGVycm9yO1xuICAgICAgaWYgKCdyZXNwb25zZScgaW4gZSAmJiAnZGF0YScgaW4gZS5yZXNwb25zZS5kYXRhICYmIGUucmVzcG9uc2UuZGF0YS5tZXNzYWdlID09PSAnZXJyb3IudGVtcGxhdGUuZXh0cmFjdGlvbicpIHtcbiAgICAgICAgZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBldmFsdWF0ZSBiaW9tZXRyaWNzIHJlcXVlc3QgdG9vayB0b28gbG9uZyB0byBhbnN3ZXIhJyk7XG4gICAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgICAgJ0V2YWx1YXRlIGJpb21ldHJpY3MgdG9vayB0b28gbG9uZyB0byByZXBseScsXG4gICAgICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5FVkFMVUFURV9CSU9NRVRSSUNTX1RJTUVPVVRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV2YWx1YXRpbmcgYmlvbWV0cmljcyEnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICAvLyB0aGlzIHVwZGF0ZXMgdGhlIHN0YXVzIGluIGNhc2UgdGhlIGZpbmdlciBoYWQgYSBzdGF0dXNcbiAgICAgIHNldEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcbiAgICAgIC8vIG5vIGxvbmdlciBjYXB0dXJpbmdcbiAgICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgICB0aHJvdyBuZXcgQ2FwdHVyZUFwaUVycm9yKFxuICAgICAgICAnTmV0d29yayBpc3N1ZSB3aGlsZSB2YWxpZGF0aW5nIGJpb21ldHJpY3MsIGNoZWNrIGxvZ3MnLFxuICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVWQUxVQVRFX0JJT01FVFJJQ1NfTkVUV09SS19JU1NVRVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBjaGFuZ2VzIHVwZGF0ZXMgdGhlIHN0YXVzIGluIGNhc2UgdGhlIGZpbmdlciBoYWQgYSBzdGF0dXNcbiAgICAgIHNldEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcbiAgICAgIC8vIG5vIGxvbmdlciBjYXB0dXJpbmdcbiAgICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgICB0aHJvdyBuZXcgQ2FwdHVyZUFwaUVycm9yKFxuICAgICAgICAnTmV0d29yayBpc3N1ZSB3aGlsZSB2YWxpZGF0aW5nIGJpb21ldHJpY3MsIGNoZWNrIGxvZ3MnLFxuICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVWQUxVQVRFX0JJT01FVFJJQ1NfTkVUV09SS19JU1NVRVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgbGV0IGlzRmluZ2VyTG93UXVhbGl0eSxcbiAgICBpc0R1cGxpY2F0ZUZpbmdlcixcbiAgICBpc0ZvcmJpZGRlbkZpbmdlcixcbiAgICBpc0FnckZpbmdlckRldGVjdGVkLFxuICAgIGlzQWdyTm90TWF0Y2hlZEZpbmdlcixcbiAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5MT1dfUVVBTElUWTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgLy8gZ2V0IHRoZSBjdXJyZW50IGZpbmdlciBmcm9tIHRoZSByZXR1cm4gbGlzdFxuICAgIGNvbnN0IHZhbGlkYXRlZEZpbmdlciA9IHJlc3BvbnNlLmJvZHlQYXJ0cy5maW5kKFxuICAgICAgKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLmJvZHlQYXJ0ID09PSBmaW5nZXIuYm9keVBhcnRcbiAgICApIGFzIEJvZHlQYXJ0UmV0dXJuVHlwZTtcbiAgICAvLyBzZXQgdGhpcyBmaW5nZXIncyBxdWFsaXR5IGFuZCBpbWFnZVxuICAgIGZpbmdlci5uZmlxUmF0aW5nID0gdmFsaWRhdGVkRmluZ2VyLnF1YWxpdHk7XG4gICAgLy8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBhbmQgbG93IHF1YWxpdHlcbiAgICBpZiAodmFsaWRhdGVkRmluZ2VyLnF1YWxpdHkgPiBnZXRNaW5OZmlxQWNjZXB0YWJsZSgpIHx8IHZhbGlkYXRlZEZpbmdlci5zdGF0dXMgPT09ICdMT1dfUVVBTElUWScpIHtcbiAgICAgIGlzRmluZ2VyTG93UXVhbGl0eSA9IHRydWU7XG4gICAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5MT1dfUVVBTElUWTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLmJvZHlQYXJ0cy5maW5kKCh2YWxpZGF0ZWRGaW5nZXIpID0+IHZhbGlkYXRlZEZpbmdlci5zdGF0dXMgPT09ICdEVVBMSUNBVEUnKSkge1xuICAgICAgaXNEdXBsaWNhdGVGaW5nZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuRFVQTElDQVRFO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2UuYm9keVBhcnRzLmZpbmQoKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLnN0YXR1cyA9PT0gJ0ZPUkJJRERFTicpKSB7XG4gICAgICBpc0ZvcmJpZGRlbkZpbmdlciA9IHRydWU7XG4gICAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5GT1JCSURERU47XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5ib2R5UGFydHMuZmluZCgodmFsaWRhdGVkRmluZ2VyKSA9PiB2YWxpZGF0ZWRGaW5nZXIuc3RhdHVzID09PSAnQUdSJykpIHtcbiAgICAgIGlzQWdyRmluZ2VyRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuQUdSX0RFVEVDVEVEO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2UuYm9keVBhcnRzLmZpbmQoKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLnN0YXR1cyA9PT0gJ0FHUl9OT1RfTUFUQ0gnKSkge1xuICAgICAgaXNBZ3JOb3RNYXRjaGVkRmluZ2VyID0gdHJ1ZTtcbiAgICAgIHJldHVybkNvZGUgPSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkFHUl9OT19NQVRDSDtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGlzIGZpbmdlciBpcyBsb3cgcXVhbGl0eSBvciBkdXBsaWNhdGVcbiAgLy8gKGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlLCBpdCBoYXMgdG8gYmUgdGhpcyBmaW5nZXIpXG4gIGlmIChcbiAgICBpc0R1cGxpY2F0ZUZpbmdlciB8fFxuICAgIGlzRmluZ2VyTG93UXVhbGl0eSB8fFxuICAgIGlzRm9yYmlkZGVuRmluZ2VyIHx8XG4gICAgaXNBZ3JOb3RNYXRjaGVkRmluZ2VyIHx8XG4gICAgaXNBZ3JGaW5nZXJEZXRlY3RlZCB8fFxuICAgIGVycm9yVGVtcGxhdGVFeHRyYWN0aW9uXG4gICkge1xuICAgIC8vIGNsZWFyIHRoaXMgZmluZ2VyXG4gICAgZmluZ2VyLm5maXFSYXRpbmcgPSAtMTtcbiAgICBmaW5nZXIuYmFzZTY0V1NRID0gJyc7XG4gICAgZmluZ2VyLmltYWdlID0gJyc7XG4gICAgZmluZ2VyLnN0YXR1cyA9IEZpbmdlclN0YXR1cy5BVkFJTEFCTEU7XG4gICAgLy8gc2V0IHRoZSBhcHByb3ByaWF0ZSBzd2FsIHByZWZpeFxuICAgIGxldCBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ2JhZEZpbmdlclF1YWxpdHlTd2FsJztcbiAgICBpZiAoaXNEdXBsaWNhdGVGaW5nZXIpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAndW5rbm93bkR1cGxpY2F0ZUZpbmdlclN3YWwnO1xuICAgIH0gZWxzZSBpZiAoaXNGb3JiaWRkZW5GaW5nZXIpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAnZm9yYmlkZGVuRmluZ2VyU3dhbCc7XG4gICAgfSBlbHNlIGlmIChpc0FnckZpbmdlckRldGVjdGVkKSB7XG4gICAgICBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ2FnckZpbmdlcic7XG4gICAgfSBlbHNlIGlmIChpc0Fnck5vdE1hdGNoZWRGaW5nZXIpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAnYWdyRmluZ2VyTm90TWF0Y2hlZCc7XG4gICAgfVxuICAgIGxldCBodG1sID0gJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS50ZXh0YCk7XG4gICAgLy8gaWYgd2UgYXJlIHVzaW5nIHdhc20sIHdlIGtub3cgZXhhY3RseSB3aGljaCBmaW5nZXJzIHdlcmUgdGhlIGlzc3VlXG4gICAgaWYgKGdldCh1c2VXYXNtKSAmJiBpc0R1cGxpY2F0ZUZpbmdlcikge1xuICAgICAgc3dhbFRyYW5zbGF0ZVByZWZpeCA9ICdkdXBsaWNhdGVGaW5nZXJTd2FsJztcbiAgICAgIGh0bWwgPSAkZm9ybWF0KGAke3N3YWxUcmFuc2xhdGVQcmVmaXh9LnRleHRgLCB7XG4gICAgICAgIHZhbHVlczoge1xuICAgICAgICAgIGZpbmdlcjE6ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0uJHsocmVzcG9uc2UgYXMgYW55KS5tYXRjaGluZ0ZpbmdlcnM/LlswXX1gKSxcbiAgICAgICAgICBmaW5nZXIyOiAkZm9ybWF0KGAke3N3YWxUcmFuc2xhdGVQcmVmaXh9LiR7KHJlc3BvbnNlIGFzIGFueSkubWF0Y2hpbmdGaW5nZXJzPy5bMV19YCksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGNvbGxlY3RGaW5nZXJzKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXR1cm5Db2RlLFxuICAgICAgICBib2R5UGFydHM6IG91dHB1dCxcbiAgICAgICAgbWF0Y2hpbmdGaW5nZXJzOiAocmVzcG9uc2UgYXMgYW55KS5tYXRjaGluZ0ZpbmdlcnMgYXMgQm9keVBhcnROYW1lc1tdLFxuICAgICAgICBtZXNzYWdlOiBodG1sLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgb3V0cHV0ID0gY29sbGVjdEZpbmdlcnMoKTtcbiAgICByZXR1cm4geyByZXR1cm5Db2RlLCBib2R5UGFydHM6IG91dHB1dCwgbWVzc2FnZTogaHRtbCB9O1xuICAgIC8vIC8vIGZpcmUgYSBzd2FsIHRvIHdhcm4gdXNlciBhbmQgZ2V0IGNob2ljZVxuICAgIC8vIGNvbnN0IGNob2ljZSA9IGF3YWl0IG15U3dhbC5maXJlKHtcbiAgICAvLyAgIHRpdGxlOiAkZm9ybWF0KGAke3N3YWxUcmFuc2xhdGVQcmVmaXh9LnRpdGxlYCksXG4gICAgLy8gICBodG1sLFxuICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0ucmV0cnlgKSxcbiAgICAvLyAgIGNhbmNlbEJ1dHRvblRleHQ6ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0uY2FuY2VsYCksXG4gICAgLy8gICAvLyBpZiB0aGUgZmluZ2VyIGlzIGxvdyBxdWFsaXR5LCBzaG93IGFsc28gZGVueSBidXR0b25cbiAgICAvLyAgIC4uLihpc0Zpbmdlckxvd1F1YWxpdHkgJiYgeyBzaG93RGVueUJ1dHRvbjogdHJ1ZSwgZGVueUJ1dHRvblRleHQ6ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0uZGVueWApIH0pLFxuICAgIC8vICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAvLyAgIGljb246ICdlcnJvcicsXG4gICAgLy8gfSk7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBjaG9zZSB0byB0cnkgYW5vdGhlciBmaW5nZXIsIHRoaXMgZmluZ2VyIHdpbGwgYmUgc2V0IGFzIHVuYXZhaWxhYmxlXG4gICAgLy8gaWYgKGNob2ljZS5pc0RlbmllZCkge1xuICAgIC8vICAgdXBkYXRlQ3VycmVudERpc3BsYXkoRmluZ2VyRGlzcGxheUFyZWFUeXBlLnVuY29sbGVjdGVkRmluZ2VyKTtcbiAgICAvLyAgIGF3YWl0IGhhbmRsZU1pc3NpbmdPclVuYXZhaWxhYmxlKEZpbmdlclN0YXR1cy5VTkFWQUlMQUJMRSk7XG4gICAgLy8gICAvLyB0aGlzIGNoYW5nZXMgdXBkYXRlcyB0aGUgc3RhdHVzIGluIGNhc2UgdGhlIGZpbmdlciBoYWQgYSBzdGF0dXNcbiAgICAvLyAgIHNldEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcbiAgICAvLyAgIC8vIG5vIGxvbmdlciBjYXB0dXJpbmdcbiAgICAvLyAgIGlmICghaXNBdXRvbWF0aWMpIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgLy8gICByZXR1cm4gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5UUllJTkdfT1RIRVJfRklOR0VSO1xuICAgIC8vIH1cbiAgICAvLyAvLyBpZiB0aGUgdXNlciBjYW5jZWxsZWQsIGp1c3QgcmV0dXJuXG4gICAgLy8gaWYgKGNob2ljZS5pc0Rpc21pc3NlZCkge1xuICAgIC8vICAgdXBkYXRlQ3VycmVudERpc3BsYXkoRmluZ2VyRGlzcGxheUFyZWFUeXBlLnVuY29sbGVjdGVkRmluZ2VyKTtcbiAgICAvLyAgIC8vIHRoaXMgY2hhbmdlcyB1cGRhdGVzIHRoZSBzdGF0dXMgaW4gY2FzZSB0aGUgZmluZ2VyIGhhZCBhIHN0YXR1c1xuICAgIC8vICAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuICAgIC8vICAgLy8gbm8gbG9uZ2VyIGNhcHR1cmluZ1xuICAgIC8vICAgc2V0Q2FwdHVyaW5nKGZhbHNlKTtcbiAgICAvLyAgIHJldHVybiByZXR1cm5Db2RlO1xuICAgIC8vIH1cbiAgICAvLyAvLyBpZiB0aGUgdXNlciB3YW50cyB0byB0cnkgYWdhaW4sIHRoZSBmaW5nZXJzIHdpbGwgZ2V0IHVwZGF0ZWQgb25seSB3aGVuIGEgZ29vZCBmaW5nZXIgaXMgY2FwdHVyZWRcbiAgICAvLyAvLyBvciB3aGVuIHRoZSB1c2VyIGdldHMgdGlyZWQgb2YgdHJ5aW5nXG4gICAgLy8gaWYgKGNob2ljZS5pc0NvbmZpcm1lZCkge1xuICAgIC8vICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQ2FwdHVyZShpc0F1dG9tYXRpYyk7XG4gICAgLy8gICBpZiAocmVzdWx0ICE9PSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkNBUFRVUkVEKSB7XG4gICAgLy8gICAgIHJldHVybiByZXN1bHQ7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICB9XG4gIC8vIHNob3cgdGhlIGNvbGxlY3RlZCBmaW5nZXJcbiAgc2V0RmluZ2VycyhnZXRGaW5nZXJzKCkpO1xuXG4gIHNldENhcHR1cmluZyhmYWxzZSk7XG4gIC8vIHNlbmQgY29sbGVjdGVkIGZpbmdlciBtZXNzYWdlXG4gIG5vdGlmeUZpbmdlckNvbGxlY3RlZCgpO1xuXG4gIHJldHVybiB7IHJldHVybkNvZGU6IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuQ0FQVFVSRUQsIGJvZHlQYXJ0czogY29sbGVjdEZpbmdlcnMoKSB9O1xufVxuXG4vKipcbiAqIFNlbGVjdCBmaW5nZXIgcHJvZ3JhbW1hdGljYWxseSAod2l0aG91dCB1c2VyIGNsaWNrKVxuICovXG5mdW5jdGlvbiBzZWxlY3RGaW5nZXJBcGkoaW5kZXg6IEZpbmdlckluZGV4KTogRmluZ2VyIHtcbiAgLy8gdW5zZWxlY3QgZXZlcnl0aGluZ1xuICBzZWxlY3ROb3RoaW5nKCk7XG4gIGZvciAoY29uc3QgZmluZ2VyIG9mIGdldEZpbmdlcnMoKSkge1xuICAgIGlmIChmaW5nZXIuaW5kZXggPT09IGluZGV4KSB7XG4gICAgICBmaW5nZXIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZpbmdlcjtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBGaW5nZXIgJHtpbmRleH0gbm90IGZvdW5kYCk7XG59XG4iXSwibmFtZXMiOlsiJGZvcm1hdCIsInVud3JhcEZ1bmN0aW9uU3RvcmUiLCJmb3JtYXQiLCJDYXB0dXJlRXJyb3JTdGF0dXNFbnVtIiwiQ2FwdHVyZUFwaUVycm9yIiwibWVzc2FnZSIsInN0YXR1cyIsImNhcHR1cmVTaW5nbGVGaW5nZXIiLCJmaW5nZXJOYW1lT3JJbmRleCIsImdldEZpbmdlcnByaW50UGFyYW1zIiwiZmluZ2VySW5kZXgiLCJub3JtYWxpemVGaW5nZXJOYW1lc0FuZEluZGV4ZXNUb0luZGV4ZXMiLCJleHRlbnNpb24iLCJnZXRFeHRlbnNpb24iLCJpc09iamVjdEVtcHR5Iiwic2V0Q2FwdHVyaW5nIiwiaXNDYW5jZWxsaW5nIiwic2V0Q2FuY2VsbGluZyIsImNhcHR1cmUiLCJlcnIiLCJlIiwiZmluZ2VyIiwic2VsZWN0RmluZ2VyQXBpIiwiRmluZ2VyU3RhdHVzIiwiY29sbGVjdGVkRmluZ2VycyIsImdldENvbGxlY3RlZEZpbmdlcnMiLCJnZXRGaW5nZXJzIiwicmVzcG9uc2UiLCJlcnJvclRlbXBsYXRlRXh0cmFjdGlvbiIsInZhbGlkYXRlRmluZ2VyQmlvbWV0cmljcyIsImVycm9yIiwiaXNPYmplY3QiLCJBeGlvc0Vycm9yIiwic2V0RmluZ2VycyIsImlzRmluZ2VyTG93UXVhbGl0eSIsImlzRHVwbGljYXRlRmluZ2VyIiwiaXNGb3JiaWRkZW5GaW5nZXIiLCJpc0FnckZpbmdlckRldGVjdGVkIiwiaXNBZ3JOb3RNYXRjaGVkRmluZ2VyIiwicmV0dXJuQ29kZSIsImhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMiLCJ2YWxpZGF0ZWRGaW5nZXIiLCJnZXRNaW5OZmlxQWNjZXB0YWJsZSIsInN3YWxUcmFuc2xhdGVQcmVmaXgiLCJodG1sIiwiZ2V0IiwidXNlV2FzbSIsIm91dHB1dCIsImNvbGxlY3RGaW5nZXJzIiwibm90aWZ5RmluZ2VyQ29sbGVjdGVkIiwiaW5kZXgiLCJzZWxlY3ROb3RoaW5nIl0sIm1hcHBpbmdzIjoiO0FBK0JBLE1BQU1BLElBQVVDLEVBQW9CQyxDQUFNO0FBSXhCLElBQUFDLHNCQUFBQSxPQUNoQkEsRUFBQSxvQkFBb0IscUJBQ3BCQSxFQUFBLGlCQUFpQixrQkFDakJBLEVBQUEseUJBQXlCLDBCQUN6QkEsRUFBQSxvQkFBb0IscUJBQ3BCQSxFQUFBLGlDQUFpQyxrQ0FDakNBLEVBQUEscUJBQXFCLHNCQUNyQkEsRUFBQSxnQkFBZ0IsaUJBQ2hCQSxFQUFBLDhCQUE4QiwrQkFDOUJBLEVBQUEsb0NBQW9DLHFDQVRwQkEsSUFBQUEsS0FBQSxDQUFBLENBQUE7QUFZWCxNQUFNQyxVQUF3QixNQUFNO0FBQUEsRUFDekMsWUFBWUMsR0FBd0JDLEdBQWdDO0FBQ2xFLFVBQU1ELENBQU8sR0FEcUIsS0FBQSxTQUFBQztBQUFBLEVBRXBDO0FBQ0Y7QUFLQSxlQUFlQyxFQUNiQyxHQUNBQyxHQU1DO0FBQ0QsUUFBTUMsSUFBY0MsRUFBd0MsQ0FBQ0gsQ0FBaUIsQ0FBQyxFQUFFLENBQUMsR0FFNUVJLElBQVlDO0FBRWQsTUFBQUMsRUFBY0YsQ0FBUztBQUN6QixVQUFNLElBQUlSO0FBQUEsTUFDUix3R0FBd0dRO0FBQUEsTUFDeEc7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
|