bry-biometric-collector 2.2.18-RC04 → 2.2.18
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 +6 -2
- package/dist/DocumentCollector_60829715_2.2.18.js +1023 -0
- package/dist/FaceCollector_d1bd0ef2_2.2.18.js +1921 -0
- package/dist/TakePictureBtn_85287d58_2.2.18.js +848 -0
- package/dist/bry-biometric-collector-main.js +2 -3
- package/dist/{en-us_901680c0_2.2.18-RC04.js → en-us_901680c0_2.2.18.js} +0 -1
- package/dist/{es-cl_1fe1aaa9_2.2.18-RC04.js → es-cl_1fe1aaa9_2.2.18.js} +0 -1
- package/dist/face_api_0e3ce8c8_2.2.18.js +36288 -0
- package/dist/fingersApi_3fc545c1_2.2.18.js +131 -0
- package/dist/index-no-detector_4b302e78_2.2.18.js +10414 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -3
- package/dist/main_3af065b9_2.2.18.js +23863 -0
- package/dist/{pt-br_bef1149f_2.2.18-RC04.js → pt-br_bef1149f_2.2.18.js} +0 -1
- package/package.json +1 -1
- package/dist/DocumentCollector_d5226ed9_2.2.18-RC04.js +0 -1356
- package/dist/FaceCollector_f45ba4ba_2.2.18-RC04.js +0 -2463
- package/dist/TakePictureBtn_fac72a1a_2.2.18-RC04.js +0 -1066
- package/dist/face_api_0e3ce8c8_2.2.18-RC04.js +0 -36289
- package/dist/fingersApi_e29e8d34_2.2.18-RC04.js +0 -132
- package/dist/index-no-detector_4b302e78_2.2.18-RC04.js +0 -10415
- package/dist/main_3e51994c_2.2.18-RC04.js +0 -25655
@@ -1,132 +0,0 @@
|
|
1
|
-
import { u as D, $ as m, n as C, g as b, i as y, s as l, a as F, F as U, b as M, c, v as x, d as P, A as B, e as I, h as g, f as v, j as W, k as R, l as $, m as k, o as w, p as V } from "./main_3e51994c_2.2.18-RC04.js";
|
2
|
-
const f = D(m);
|
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 r 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 r(
|
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), F())
|
18
|
-
throw l(!1), w(!1), new r(
|
19
|
-
"User cancelled",
|
20
|
-
"USER_CANCELLED"
|
21
|
-
/* USER_CANCELLED */
|
22
|
-
);
|
23
|
-
let E = null;
|
24
|
-
try {
|
25
|
-
E = 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 r(
|
35
|
-
"Fingerprint scan timed out (didn't read a finger.)",
|
36
|
-
"USER_CANCELLED"
|
37
|
-
/* USER_CANCELLED */
|
38
|
-
) : t.key === "extension.authorization.canceled" ? new r(
|
39
|
-
"Extension wasn't given authorization.",
|
40
|
-
"UNAUTHORIZED_EXTENSION"
|
41
|
-
/* UNAUTHORIZED_EXTENSION */
|
42
|
-
) : t.key === "fingerprint.scanner.not.found" ? new r(
|
43
|
-
"Couldn't find fingerprint scanner.",
|
44
|
-
"SCANNER_NOT_FOUND"
|
45
|
-
/* SCANNER_NOT_FOUND */
|
46
|
-
) : t.key === "signer.not.installed" ? new r(
|
47
|
-
"The extension module isn't installed.",
|
48
|
-
"EXTENSION_MODULE_NOT_INSTALLED"
|
49
|
-
/* EXTENSION_MODULE_NOT_INSTALLED */
|
50
|
-
) : new r(
|
51
|
-
"Couldn't capture fingerprint: " + t.description,
|
52
|
-
"UNKNOWN_ERROR"
|
53
|
-
/* UNKNOWN_ERROR */
|
54
|
-
);
|
55
|
-
}
|
56
|
-
if (F())
|
57
|
-
throw l(!1), w(!1), new r(
|
58
|
-
"User cancelled",
|
59
|
-
"USER_CANCELLED"
|
60
|
-
/* USER_CANCELLED */
|
61
|
-
);
|
62
|
-
const i = q(d);
|
63
|
-
i.image = E?.content.image?.data, i.base64WSQ = E?.content.fingerprint.data, i.nfiqRating = (E?.content.score || 0) + 98, i.status = U.AVAILABLE;
|
64
|
-
const L = M(c());
|
65
|
-
let s, O = !1;
|
66
|
-
try {
|
67
|
-
s = await x(L, i);
|
68
|
-
} catch (e) {
|
69
|
-
if (i.nfiqRating = -1, i.base64WSQ = "", i.image = "", console.warn("caught while validating fingerprint: ", e.toString()), P(e) && "message" in e && e.message === "error.template.extraction")
|
70
|
-
O = !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" && (O = !0);
|
74
|
-
} else {
|
75
|
-
if (e instanceof B)
|
76
|
-
throw e.code === "ECONNABORTED" ? (console.log("The evaluate biometrics request took too long to answer!"), new r(
|
77
|
-
"Evaluate biometrics took too long to reply",
|
78
|
-
"EVALUATE_BIOMETRICS_TIMEOUT"
|
79
|
-
/* EVALUATE_BIOMETRICS_TIMEOUT */
|
80
|
-
)) : (console.error("Error evaluating biometrics!", e), I(c()), l(!1), new r(
|
81
|
-
"Network issue while validating biometrics, check logs",
|
82
|
-
"EVALUATE_BIOMETRICS_NETWORK_ISSUE"
|
83
|
-
/* EVALUATE_BIOMETRICS_NETWORK_ISSUE */
|
84
|
-
));
|
85
|
-
I(c()), l(!1);
|
86
|
-
}
|
87
|
-
}
|
88
|
-
let S, N, _, A, u, o = g.LOW_QUALITY;
|
89
|
-
if (s) {
|
90
|
-
const e = s.bodyParts.find(
|
91
|
-
(t) => t.bodyPart === i.bodyPart
|
92
|
-
);
|
93
|
-
i.nfiqRating = e.quality, (e.quality > v() || e.status === "LOW_QUALITY") && (S = !0, o = g.LOW_QUALITY), s.bodyParts.find((t) => t.status === "DUPLICATE") && (N = !0, o = g.DUPLICATE), s.bodyParts.find((t) => t.status === "FORBIDDEN") && (_ = !0, o = g.FORBIDDEN), s.bodyParts.find((t) => t.status === "AGR") && (A = !0, o = g.AGR_DETECTED), s.bodyParts.find((t) => t.status === "AGR_NOT_MATCH") && (u = !0, o = g.AGR_NO_MATCH);
|
94
|
-
}
|
95
|
-
if (N || S || _ || u || A || O) {
|
96
|
-
i.nfiqRating = -1, i.base64WSQ = "", i.image = "", i.status = U.AVAILABLE;
|
97
|
-
let e = "badFingerQualitySwal";
|
98
|
-
N ? e = "unknownDuplicateFingerSwal" : _ ? e = "forbiddenFingerSwal" : A ? e = "agrFinger" : u && (e = "agrFingerNotMatched");
|
99
|
-
let t = f(`${e}.text`);
|
100
|
-
if (W(V) && N) {
|
101
|
-
e = "duplicateFingerSwal", t = f(`${e}.text`, {
|
102
|
-
values: {
|
103
|
-
finger1: f(`${e}.${s.matchingFingers?.[0]}`),
|
104
|
-
finger2: f(`${e}.${s.matchingFingers?.[1]}`)
|
105
|
-
}
|
106
|
-
});
|
107
|
-
const h = R();
|
108
|
-
return {
|
109
|
-
returnCode: o,
|
110
|
-
bodyParts: h,
|
111
|
-
matchingFingers: s.matchingFingers,
|
112
|
-
message: t
|
113
|
-
};
|
114
|
-
}
|
115
|
-
const p = R();
|
116
|
-
return { returnCode: o, bodyParts: p, message: t };
|
117
|
-
}
|
118
|
-
return I(c()), l(!1), $(), { returnCode: g.CAPTURED, bodyParts: R() };
|
119
|
-
}
|
120
|
-
function q(n) {
|
121
|
-
k();
|
122
|
-
for (const a of c())
|
123
|
-
if (a.index === n)
|
124
|
-
return a.selected = !0, a;
|
125
|
-
throw new Error(`Finger ${n} not found`);
|
126
|
-
}
|
127
|
-
export {
|
128
|
-
r as CaptureApiError,
|
129
|
-
X as CaptureErrorStatusEnum,
|
130
|
-
Q as captureSingleFinger
|
131
|
-
};
|
132
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZ2Vyc0FwaV9lMjllOGQzNF8yLjIuMTgtUkMwNC5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwaS9maW5nZXJzQXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVQYXJhbXMsIEZpbmdlcnByaW50U2NhbiB9IGZyb20gJy4uL2luY2x1ZGUvRXh0ZW5zaW9uJztcbmltcG9ydCB7IGlzQ2FuY2VsbGluZywgc2V0Q2FuY2VsbGluZywgc2V0Q2FwdHVyaW5nIH0gZnJvbSAnLi4vbGliL2ZpbmdlcnNUYWIvYnV0dG9ucy9jYXB0dXJlL2NhcHR1cmVTdG9yZSc7XG5pbXBvcnQgeyBnZXRFeHRlbnNpb24sIGhhc0Zpbmdlck9uQW5kT2ZmLCBpc0V2ZXJ5dGhpbmdJbnN0YWxsZWQgfSBmcm9tICcuLi9saWIvZmluZ2Vyc1RhYi9leHRlbnNpb24vZXh0ZW5zaW9uJztcbmltcG9ydCB7XG4gIEJvZHlQYXJ0TmFtZXMsXG4gIEZpbmdlcixcbiAgZ2V0U2VsZWN0ZWRGaW5nZXIsXG4gIG5vcm1hbGl6ZUZpbmdlck5hbWVzQW5kSW5kZXhlc1RvSW5kZXhlcyxcbiAgdHlwZSBGaW5nZXJJbmRleCxcbiAgZ2V0RmluZ2VycyxcbiAgc2VsZWN0Tm90aGluZyxcbiAgRmluZ2VyU3RhdHVzLFxuICBnZXRDb2xsZWN0ZWRGaW5nZXJzLFxuICBzZXRGaW5nZXJzLFxuICBnZXRNaW5OZmlxQWNjZXB0YWJsZSxcbn0gZnJvbSAnLi4vbGliL2ZpbmdlcnNUYWIvaGFuZC9oYW5kUGFydHMvZmluZ2Vyc1N0b3JlJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc09iamVjdEVtcHR5IH0gZnJvbSAnLi4vbGliL3V0aWwvdXRpbCc7XG5pbXBvcnQge1xuICB2YWxpZGF0ZUZpbmdlckJpb21ldHJpY3MsXG4gIHR5cGUgQm9keVBhcnRSZXR1cm5UeXBlLFxuICB1c2VXYXNtLFxuICB0eXBlIEJvZHlQYXJ0LFxufSBmcm9tICcuLi9saWIvdmFsaWRhdG9ycy9iaW9tZXRyaWNzVmFsaWRhdG9yJztcbmltcG9ydCB7XG4gIGNvbGxlY3RGaW5nZXJzLFxuICBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLFxuICBub3RpZnlGaW5nZXJDb2xsZWN0ZWQsXG59IGZyb20gJy4uL2xpYi9maW5nZXJzVGFiL2J1dHRvbnMvYnV0dG9uSGFuZGxlcnMnO1xuaW1wb3J0IHsgZm9ybWF0LCB1bndyYXBGdW5jdGlvblN0b3JlIH0gZnJvbSAnc3ZlbHRlLWkxOG4nO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnc3ZlbHRlL3N0b3JlJztcbmNvbnN0ICRmb3JtYXQgPSB1bndyYXBGdW5jdGlvblN0b3JlKGZvcm1hdCk7XG5cbmV4cG9ydCB7IGNhcHR1cmVTaW5nbGVGaW5nZXIgfTtcblxuZXhwb3J0IGNvbnN0IGVudW0gQ2FwdHVyZUVycm9yU3RhdHVzRW51bSB7XG4gIEVYVEVOU0lPTl9NSVNTSU5HID0gJ0VYVEVOU0lPTl9NSVNTSU5HJyxcbiAgVVNFUl9DQU5DRUxMRUQgPSAnVVNFUl9DQU5DRUxMRUQnLFxuICBVTkFVVEhPUklaRURfRVhURU5TSU9OID0gJ1VOQVVUSE9SSVpFRF9FWFRFTlNJT04nLFxuICBTQ0FOTkVSX05PVF9GT1VORCA9ICdTQ0FOTkVSX05PVF9GT1VORCcsXG4gIEVYVEVOU0lPTl9NT0RVTEVfTk9UX0lOU1RBTExFRCA9ICdFWFRFTlNJT05fTU9EVUxFX05PVF9JTlNUQUxMRUQnLFxuICBGSU5HRVJfTk9UX1JFTU9WRUQgPSAnRklOR0VSX05PVF9SRU1PVkVEJyxcbiAgVU5LTk9XTl9FUlJPUiA9ICdVTktOT1dOX0VSUk9SJyxcbiAgRVZBTFVBVEVfQklPTUVUUklDU19USU1FT1VUID0gJ0VWQUxVQVRFX0JJT01FVFJJQ1NfVElNRU9VVCcsXG4gIEVWQUxVQVRFX0JJT01FVFJJQ1NfTkVUV09SS19JU1NVRSA9ICdFVkFMVUFURV9CSU9NRVRSSUNTX05FVFdPUktfSVNTVUUnLFxufVxuXG5leHBvcnQgY2xhc3MgQ2FwdHVyZUFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBzdGF0dXM6IENhcHR1cmVFcnJvclN0YXR1c0VudW0pIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2dyYW1tYXRpY2FsbHkgY2FwdHVyZSBzaW5nbGUgZmluZ2VyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVTaW5nbGVGaW5nZXIoXG4gIGZpbmdlck5hbWVPckluZGV4OiBudW1iZXIgfCBCb2R5UGFydE5hbWVzLFxuICBnZXRGaW5nZXJwcmludFBhcmFtczogQ2FwdHVyZVBhcmFtc1xuKTogUHJvbWlzZTx7XG4gIHJldHVybkNvZGU6IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXM7XG4gIGJvZHlQYXJ0czogQm9keVBhcnRbXTtcbiAgbWF0Y2hpbmdGaW5nZXJzPzogQm9keVBhcnROYW1lc1tdO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufT4ge1xuICBjb25zdCBmaW5nZXJJbmRleCA9IG5vcm1hbGl6ZUZpbmdlck5hbWVzQW5kSW5kZXhlc1RvSW5kZXhlcyhbZmluZ2VyTmFtZU9ySW5kZXhdKVswXTtcbiAgLy8gdHJ5IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RXh0ZW5zaW9uKCk7XG4gIC8vIGNoZWNrIHRoYXQgdGhlIGV4dGVuc2lvbiBpcyBhdmFpbGFibGVcbiAgaWYgKGlzT2JqZWN0RW1wdHkoZXh0ZW5zaW9uKSkge1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICBcIkF0dGVtcHRpbmcgdG8gY2FwdHVyZSBmaW5nZXIgYnV0IHRoZSBleHRlbnNpb24gYXBwYXJlbnRseSBoYXNuJ3QgYmVlbiBwcm9wZXJseSBpbmplY3RlZC4gUmVjZWl2ZWQ6IFwiICsgZXh0ZW5zaW9uLFxuICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5FWFRFTlNJT05fTUlTU0lOR1xuICAgICk7XG4gIH1cblxuICBzZXRDYXB0dXJpbmcodHJ1ZSk7XG5cbiAgLy8gaWYgc29tZWhvdyB0aGV5IG1hbmFnZWQgdG8gYXNrIGZvciBjYW5jZWxsYXRpb24gcmlnaHQgYmVmb3JlIHRoZSBzY2FuLCB0aGlzIGNhdGNoZXMgdGhhdFxuICBpZiAoaXNDYW5jZWxsaW5nKCkpIHtcbiAgICBzZXRDYXB0dXJpbmcoZmFsc2UpO1xuICAgIHNldENhbmNlbGxpbmcoZmFsc2UpO1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoJ1VzZXIgY2FuY2VsbGVkJywgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VU0VSX0NBTkNFTExFRCk7XG4gIH1cblxuICAvLyBwcm9tcHQgdXNlciB0byBjb2xsZWN0IHRoZSBmaW5nZXJcbiAgbGV0IGNhcHR1cmU6IEZpbmdlcnByaW50U2NhbiB8IG51bGwgPSBudWxsO1xuICB0cnkge1xuICAgIC8vIGNhcHR1cmUgdGhlIGZpbmdlclxuICAgIC8vICppbXBsZW1lbnRhdGlvbiBjb25zaWRlcmluZyB3ZSBvbmx5IGhhdmUgdGhlIGdldEZpbmdlcnByaW50IG1ldGhvZCBhdmFpbGFibGVcbiAgICBjYXB0dXJlID0gYXdhaXQgZXh0ZW5zaW9uLmdldEZpbmdlcnByaW50KFxuICAgICAgLy8gQHRzLWlnbm9yZSBUT0RPOiBBbGV4IGhhcyB0byBmaXggdGhpcyBmdW5jdGlvbnMgc2lnbmF0dXJlIHRvIGFjY2VwdCBwb2pvXG4gICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZ2V0RmluZ2VycHJpbnRQYXJhbXMgPz8geyBvdXRwdXRGb3JtYXQ6ICdCQVNFNjQnLCBpbWFnZUZvcm1hdDogJ0JNUCcsIG5vbmNlOiAnd2ViQ29sbGVjdG9yJywgdGltZW91dDogMyB9XG4gICAgICApXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgeyBrZXk6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9O1xuICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgLy8gVE9ETzogdHlwZSB0aGlzIGFuZCBjcmVhdGUgZW51bSBmb3IgZXJyb3JzXG4gICAgaWYgKGUua2V5ID09PSAnZmluZ2VycHJpbnQuc2Nhbm5lci50aW1lb3V0Jykge1xuICAgICAgLy8gaWYgdGltZWRvdXQganVzdCB0cnkgYWdhaW4sIHVubGVzcyB0cnlpbmcgdG8gY2FuY2VsXG4gICAgICAvLyBUT0RPOiBtYXliZSBzdG9wIGFmdGVyIHNvIG1hbnkgdHJpZXNcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgIFwiRmluZ2VycHJpbnQgc2NhbiB0aW1lZCBvdXQgKGRpZG4ndCByZWFkIGEgZmluZ2VyLilcIixcbiAgICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VU0VSX0NBTkNFTExFRFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnZXh0ZW5zaW9uLmF1dGhvcml6YXRpb24uY2FuY2VsZWQnKSB7XG4gICAgICAvLyB1c2VyIGRpZG4ndCBhdXRob3JpemUgdGhlIGRvbWFpbiwgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gc28gc3RvcC5cbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXCJFeHRlbnNpb24gd2Fzbid0IGdpdmVuIGF1dGhvcml6YXRpb24uXCIsIENhcHR1cmVFcnJvclN0YXR1c0VudW0uVU5BVVRIT1JJWkVEX0VYVEVOU0lPTik7XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ2ZpbmdlcnByaW50LnNjYW5uZXIubm90LmZvdW5kJykge1xuICAgICAgLy8gdXNlciBkb2Vzbid0IGhhdmUgYSBzY2FubmVyIGNvbm5lY3RlZCwgdGhlcmUgaXMgbm90aGluZyB3ZSBjYW4gZG8gc28gc3RvcC5cbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGZpbmdlcnByaW50IHNjYW5uZXIuXCIsIENhcHR1cmVFcnJvclN0YXR1c0VudW0uU0NBTk5FUl9OT1RfRk9VTkQpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdzaWduZXIubm90Lmluc3RhbGxlZCcpIHtcbiAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgIFwiVGhlIGV4dGVuc2lvbiBtb2R1bGUgaXNuJ3QgaW5zdGFsbGVkLlwiLFxuICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVYVEVOU0lPTl9NT0RVTEVfTk9UX0lOU1RBTExFRFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IENhcHR1cmVBcGlFcnJvcihcIkNvdWxkbid0IGNhcHR1cmUgZmluZ2VycHJpbnQ6IFwiICsgZS5kZXNjcmlwdGlvbiwgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VTktOT1dOX0VSUk9SKTtcbiAgICB9XG4gIH1cbiAgLy8gaWYgc29tZWhvdyB0aGV5IG1hbmFnZWQgdG8gYXNrIGZvciBjYW5jZWxsYXRpb24gcmlnaHQgYmVmb3JlIHRoZSBzY2FuLCB0aGlzIGNhdGNoZXMgdGhhdFxuICBpZiAoaXNDYW5jZWxsaW5nKCkpIHtcbiAgICBzZXRDYXB0dXJpbmcoZmFsc2UpO1xuICAgIHNldENhbmNlbGxpbmcoZmFsc2UpO1xuICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoJ1VzZXIgY2FuY2VsbGVkJywgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5VU0VSX0NBTkNFTExFRCk7XG4gIH1cblxuICAvLyBzZWxlY3QgYW5kIGdldCBmaW5nZXJcbiAgY29uc3QgZmluZ2VyID0gc2VsZWN0RmluZ2VyQXBpKGZpbmdlckluZGV4KTtcbiAgLy8gc2V0IHRoaXMgZmluZ2VycyBhdHRyaWJ1dGVzIHRvIHRoZSByZWNlbnRseSBjb2xsZWN0ZWQgZmluZ2VyXG4gIGZpbmdlci5pbWFnZSA9IGNhcHR1cmU/LmNvbnRlbnQuaW1hZ2U/LmRhdGEgYXMgc3RyaW5nO1xuICBmaW5nZXIuYmFzZTY0V1NRID0gY2FwdHVyZT8uY29udGVudC5maW5nZXJwcmludC5kYXRhIGFzIHN0cmluZztcbiAgZmluZ2VyLm5maXFSYXRpbmcgPSAoY2FwdHVyZT8uY29udGVudC5zY29yZSB8fCAwKSArIDk4O1xuICBmaW5nZXIuc3RhdHVzID0gRmluZ2VyU3RhdHVzLkFWQUlMQUJMRTtcbiAgLy8gR2V0IEFMTCB0aGUgY29sbGVjdGVkIGZpbmdlcnNcbiAgY29uc3QgY29sbGVjdGVkRmluZ2VycyA9IGdldENvbGxlY3RlZEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcblxuICAvLyBzZW5kIHRvIHJlbW90ZVxuICBsZXQgcmVzcG9uc2UsXG4gICAgZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb24gPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICByZXNwb25zZSA9IGF3YWl0IHZhbGlkYXRlRmluZ2VyQmlvbWV0cmljcyhjb2xsZWN0ZWRGaW5nZXJzLCBmaW5nZXIpO1xuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgLy8gY2xlYXIgdGhlIGZpbmdlclxuICAgIGZpbmdlci5uZmlxUmF0aW5nID0gLTE7XG4gICAgZmluZ2VyLmJhc2U2NFdTUSA9ICcnO1xuICAgIGZpbmdlci5pbWFnZSA9ICcnO1xuICAgIC8vIHdhcm4gZXJyb3JcbiAgICBjb25zb2xlLndhcm4oJ2NhdWdodCB3aGlsZSB2YWxpZGF0aW5nIGZpbmdlcnByaW50OiAnLCBlcnJvci50b1N0cmluZygpKTtcbiAgICAvLyBlcnJvciB3aGlsZSBleHRyYWN0aW5nLCBzaG93IGEgbG93IHF1YWxpdHkgc3dhbFxuICAgIGlmIChpc09iamVjdChlcnJvcikgJiYgJ21lc3NhZ2UnIGluIGVycm9yICYmIGVycm9yLm1lc3NhZ2UgPT09ICdlcnJvci50ZW1wbGF0ZS5leHRyYWN0aW9uJykge1xuICAgICAgZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBYTUxIdHRwUmVxdWVzdCkge1xuICAgICAgY29uc3QgZSA9IGVycm9yO1xuICAgICAgaWYgKCdyZXNwb25zZScgaW4gZSAmJiAnZGF0YScgaW4gZS5yZXNwb25zZS5kYXRhICYmIGUucmVzcG9uc2UuZGF0YS5tZXNzYWdlID09PSAnZXJyb3IudGVtcGxhdGUuZXh0cmFjdGlvbicpIHtcbiAgICAgICAgZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBeGlvc0Vycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBldmFsdWF0ZSBiaW9tZXRyaWNzIHJlcXVlc3QgdG9vayB0b28gbG9uZyB0byBhbnN3ZXIhJyk7XG4gICAgICAgIHRocm93IG5ldyBDYXB0dXJlQXBpRXJyb3IoXG4gICAgICAgICAgJ0V2YWx1YXRlIGJpb21ldHJpY3MgdG9vayB0b28gbG9uZyB0byByZXBseScsXG4gICAgICAgICAgQ2FwdHVyZUVycm9yU3RhdHVzRW51bS5FVkFMVUFURV9CSU9NRVRSSUNTX1RJTUVPVVRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV2YWx1YXRpbmcgYmlvbWV0cmljcyEnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICAvLyB0aGlzIHVwZGF0ZXMgdGhlIHN0YXVzIGluIGNhc2UgdGhlIGZpbmdlciBoYWQgYSBzdGF0dXNcbiAgICAgIHNldEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcbiAgICAgIC8vIG5vIGxvbmdlciBjYXB0dXJpbmdcbiAgICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgICB0aHJvdyBuZXcgQ2FwdHVyZUFwaUVycm9yKFxuICAgICAgICAnTmV0d29yayBpc3N1ZSB3aGlsZSB2YWxpZGF0aW5nIGJpb21ldHJpY3MsIGNoZWNrIGxvZ3MnLFxuICAgICAgICBDYXB0dXJlRXJyb3JTdGF0dXNFbnVtLkVWQUxVQVRFX0JJT01FVFJJQ1NfTkVUV09SS19JU1NVRVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBjaGFuZ2VzIHVwZGF0ZXMgdGhlIHN0YXVzIGluIGNhc2UgdGhlIGZpbmdlciBoYWQgYSBzdGF0dXNcbiAgICAgIHNldEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcbiAgICAgIC8vIG5vIGxvbmdlciBjYXB0dXJpbmdcbiAgICAgIHNldENhcHR1cmluZyhmYWxzZSk7XG4gICAgfVxuICB9XG4gIGxldCBpc0Zpbmdlckxvd1F1YWxpdHksXG4gICAgaXNEdXBsaWNhdGVGaW5nZXIsXG4gICAgaXNGb3JiaWRkZW5GaW5nZXIsXG4gICAgaXNBZ3JGaW5nZXJEZXRlY3RlZCxcbiAgICBpc0Fnck5vdE1hdGNoZWRGaW5nZXIsXG4gICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuTE9XX1FVQUxJVFk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIC8vIGdldCB0aGUgY3VycmVudCBmaW5nZXIgZnJvbSB0aGUgcmV0dXJuIGxpc3RcbiAgICBjb25zdCB2YWxpZGF0ZWRGaW5nZXIgPSByZXNwb25zZS5ib2R5UGFydHMuZmluZChcbiAgICAgICh2YWxpZGF0ZWRGaW5nZXIpID0+IHZhbGlkYXRlZEZpbmdlci5ib2R5UGFydCA9PT0gZmluZ2VyLmJvZHlQYXJ0XG4gICAgKSBhcyBCb2R5UGFydFJldHVyblR5cGU7XG4gICAgLy8gc2V0IHRoaXMgZmluZ2VyJ3MgcXVhbGl0eSBhbmQgaW1hZ2VcbiAgICBmaW5nZXIubmZpcVJhdGluZyA9IHZhbGlkYXRlZEZpbmdlci5xdWFsaXR5O1xuICAgIC8vIGNoZWNrIGZvciBkdXBsaWNhdGUgYW5kIGxvdyBxdWFsaXR5XG4gICAgaWYgKHZhbGlkYXRlZEZpbmdlci5xdWFsaXR5ID4gZ2V0TWluTmZpcUFjY2VwdGFibGUoKSB8fCB2YWxpZGF0ZWRGaW5nZXIuc3RhdHVzID09PSAnTE9XX1FVQUxJVFknKSB7XG4gICAgICBpc0Zpbmdlckxvd1F1YWxpdHkgPSB0cnVlO1xuICAgICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuTE9XX1FVQUxJVFk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS5ib2R5UGFydHMuZmluZCgodmFsaWRhdGVkRmluZ2VyKSA9PiB2YWxpZGF0ZWRGaW5nZXIuc3RhdHVzID09PSAnRFVQTElDQVRFJykpIHtcbiAgICAgIGlzRHVwbGljYXRlRmluZ2VyID0gdHJ1ZTtcbiAgICAgIHJldHVybkNvZGUgPSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkRVUExJQ0FURTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLmJvZHlQYXJ0cy5maW5kKCh2YWxpZGF0ZWRGaW5nZXIpID0+IHZhbGlkYXRlZEZpbmdlci5zdGF0dXMgPT09ICdGT1JCSURERU4nKSkge1xuICAgICAgaXNGb3JiaWRkZW5GaW5nZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuQ29kZSA9IGhhbmRsZUNhcHR1cmVSZXR1cm5TdGF0dXMuRk9SQklEREVOO1xuICAgIH1cbiAgICBpZiAocmVzcG9uc2UuYm9keVBhcnRzLmZpbmQoKHZhbGlkYXRlZEZpbmdlcikgPT4gdmFsaWRhdGVkRmluZ2VyLnN0YXR1cyA9PT0gJ0FHUicpKSB7XG4gICAgICBpc0FnckZpbmdlckRldGVjdGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybkNvZGUgPSBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkFHUl9ERVRFQ1RFRDtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLmJvZHlQYXJ0cy5maW5kKCh2YWxpZGF0ZWRGaW5nZXIpID0+IHZhbGlkYXRlZEZpbmdlci5zdGF0dXMgPT09ICdBR1JfTk9UX01BVENIJykpIHtcbiAgICAgIGlzQWdyTm90TWF0Y2hlZEZpbmdlciA9IHRydWU7XG4gICAgICByZXR1cm5Db2RlID0gaGFuZGxlQ2FwdHVyZVJldHVyblN0YXR1cy5BR1JfTk9fTUFUQ0g7XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhpcyBmaW5nZXIgaXMgbG93IHF1YWxpdHkgb3IgZHVwbGljYXRlXG4gIC8vIChpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSwgaXQgaGFzIHRvIGJlIHRoaXMgZmluZ2VyKVxuICBpZiAoXG4gICAgaXNEdXBsaWNhdGVGaW5nZXIgfHxcbiAgICBpc0Zpbmdlckxvd1F1YWxpdHkgfHxcbiAgICBpc0ZvcmJpZGRlbkZpbmdlciB8fFxuICAgIGlzQWdyTm90TWF0Y2hlZEZpbmdlciB8fFxuICAgIGlzQWdyRmluZ2VyRGV0ZWN0ZWQgfHxcbiAgICBlcnJvclRlbXBsYXRlRXh0cmFjdGlvblxuICApIHtcbiAgICAvLyBjbGVhciB0aGlzIGZpbmdlclxuICAgIGZpbmdlci5uZmlxUmF0aW5nID0gLTE7XG4gICAgZmluZ2VyLmJhc2U2NFdTUSA9ICcnO1xuICAgIGZpbmdlci5pbWFnZSA9ICcnO1xuICAgIGZpbmdlci5zdGF0dXMgPSBGaW5nZXJTdGF0dXMuQVZBSUxBQkxFO1xuICAgIC8vIHNldCB0aGUgYXBwcm9wcmlhdGUgc3dhbCBwcmVmaXhcbiAgICBsZXQgc3dhbFRyYW5zbGF0ZVByZWZpeCA9ICdiYWRGaW5nZXJRdWFsaXR5U3dhbCc7XG4gICAgaWYgKGlzRHVwbGljYXRlRmluZ2VyKSB7XG4gICAgICBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ3Vua25vd25EdXBsaWNhdGVGaW5nZXJTd2FsJztcbiAgICB9IGVsc2UgaWYgKGlzRm9yYmlkZGVuRmluZ2VyKSB7XG4gICAgICBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ2ZvcmJpZGRlbkZpbmdlclN3YWwnO1xuICAgIH0gZWxzZSBpZiAoaXNBZ3JGaW5nZXJEZXRlY3RlZCkge1xuICAgICAgc3dhbFRyYW5zbGF0ZVByZWZpeCA9ICdhZ3JGaW5nZXInO1xuICAgIH0gZWxzZSBpZiAoaXNBZ3JOb3RNYXRjaGVkRmluZ2VyKSB7XG4gICAgICBzd2FsVHJhbnNsYXRlUHJlZml4ID0gJ2FnckZpbmdlck5vdE1hdGNoZWQnO1xuICAgIH1cbiAgICBsZXQgaHRtbCA9ICRmb3JtYXQoYCR7c3dhbFRyYW5zbGF0ZVByZWZpeH0udGV4dGApO1xuICAgIC8vIGlmIHdlIGFyZSB1c2luZyB3YXNtLCB3ZSBrbm93IGV4YWN0bHkgd2hpY2ggZmluZ2VycyB3ZXJlIHRoZSBpc3N1ZVxuICAgIGlmIChnZXQodXNlV2FzbSkgJiYgaXNEdXBsaWNhdGVGaW5nZXIpIHtcbiAgICAgIHN3YWxUcmFuc2xhdGVQcmVmaXggPSAnZHVwbGljYXRlRmluZ2VyU3dhbCc7XG4gICAgICBodG1sID0gJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS50ZXh0YCwge1xuICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICBmaW5nZXIxOiAkZm9ybWF0KGAke3N3YWxUcmFuc2xhdGVQcmVmaXh9LiR7KHJlc3BvbnNlIGFzIGFueSkubWF0Y2hpbmdGaW5nZXJzPy5bMF19YCksXG4gICAgICAgICAgZmluZ2VyMjogJGZvcm1hdChgJHtzd2FsVHJhbnNsYXRlUHJlZml4fS4keyhyZXNwb25zZSBhcyBhbnkpLm1hdGNoaW5nRmluZ2Vycz8uWzFdfWApLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBjb2xsZWN0RmluZ2VycygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmV0dXJuQ29kZSxcbiAgICAgICAgYm9keVBhcnRzOiBvdXRwdXQsXG4gICAgICAgIG1hdGNoaW5nRmluZ2VyczogKHJlc3BvbnNlIGFzIGFueSkubWF0Y2hpbmdGaW5nZXJzIGFzIEJvZHlQYXJ0TmFtZXNbXSxcbiAgICAgICAgbWVzc2FnZTogaHRtbCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IGNvbGxlY3RGaW5nZXJzKCk7XG4gICAgcmV0dXJuIHsgcmV0dXJuQ29kZSwgYm9keVBhcnRzOiBvdXRwdXQsIG1lc3NhZ2U6IGh0bWwgfTtcbiAgfVxuICAvLyBzaG93IHRoZSBjb2xsZWN0ZWQgZmluZ2VyXG4gIHNldEZpbmdlcnMoZ2V0RmluZ2VycygpKTtcblxuICBzZXRDYXB0dXJpbmcoZmFsc2UpO1xuICAvLyBzZW5kIGNvbGxlY3RlZCBmaW5nZXIgbWVzc2FnZVxuICBub3RpZnlGaW5nZXJDb2xsZWN0ZWQoKTtcblxuICByZXR1cm4geyByZXR1cm5Db2RlOiBoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzLkNBUFRVUkVELCBib2R5UGFydHM6IGNvbGxlY3RGaW5nZXJzKCkgfTtcbn1cblxuLyoqXG4gKiBTZWxlY3QgZmluZ2VyIHByb2dyYW1tYXRpY2FsbHkgKHdpdGhvdXQgdXNlciBjbGljaylcbiAqL1xuZnVuY3Rpb24gc2VsZWN0RmluZ2VyQXBpKGluZGV4OiBGaW5nZXJJbmRleCk6IEZpbmdlciB7XG4gIC8vIHVuc2VsZWN0IGV2ZXJ5dGhpbmdcbiAgc2VsZWN0Tm90aGluZygpO1xuICBmb3IgKGNvbnN0IGZpbmdlciBvZiBnZXRGaW5nZXJzKCkpIHtcbiAgICBpZiAoZmluZ2VyLmluZGV4ID09PSBpbmRleCkge1xuICAgICAgZmluZ2VyLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmaW5nZXI7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihgRmluZ2VyICR7aW5kZXh9IG5vdCBmb3VuZGApO1xufVxuIl0sIm5hbWVzIjpbIiRmb3JtYXQiLCJ1bndyYXBGdW5jdGlvblN0b3JlIiwiZm9ybWF0IiwiQ2FwdHVyZUVycm9yU3RhdHVzRW51bSIsIkNhcHR1cmVBcGlFcnJvciIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJjYXB0dXJlU2luZ2xlRmluZ2VyIiwiZmluZ2VyTmFtZU9ySW5kZXgiLCJnZXRGaW5nZXJwcmludFBhcmFtcyIsImZpbmdlckluZGV4Iiwibm9ybWFsaXplRmluZ2VyTmFtZXNBbmRJbmRleGVzVG9JbmRleGVzIiwiZXh0ZW5zaW9uIiwiZ2V0RXh0ZW5zaW9uIiwiaXNPYmplY3RFbXB0eSIsInNldENhcHR1cmluZyIsImlzQ2FuY2VsbGluZyIsInNldENhbmNlbGxpbmciLCJjYXB0dXJlIiwiZXJyIiwiZSIsImZpbmdlciIsInNlbGVjdEZpbmdlckFwaSIsIkZpbmdlclN0YXR1cyIsImNvbGxlY3RlZEZpbmdlcnMiLCJnZXRDb2xsZWN0ZWRGaW5nZXJzIiwiZ2V0RmluZ2VycyIsInJlc3BvbnNlIiwiZXJyb3JUZW1wbGF0ZUV4dHJhY3Rpb24iLCJ2YWxpZGF0ZUZpbmdlckJpb21ldHJpY3MiLCJlcnJvciIsImlzT2JqZWN0IiwiQXhpb3NFcnJvciIsInNldEZpbmdlcnMiLCJpc0Zpbmdlckxvd1F1YWxpdHkiLCJpc0R1cGxpY2F0ZUZpbmdlciIsImlzRm9yYmlkZGVuRmluZ2VyIiwiaXNBZ3JGaW5nZXJEZXRlY3RlZCIsImlzQWdyTm90TWF0Y2hlZEZpbmdlciIsInJldHVybkNvZGUiLCJoYW5kbGVDYXB0dXJlUmV0dXJuU3RhdHVzIiwidmFsaWRhdGVkRmluZ2VyIiwiZ2V0TWluTmZpcUFjY2VwdGFibGUiLCJzd2FsVHJhbnNsYXRlUHJlZml4IiwiaHRtbCIsImdldCIsInVzZVdhc20iLCJvdXRwdXQiLCJjb2xsZWN0RmluZ2VycyIsIm5vdGlmeUZpbmdlckNvbGxlY3RlZCIsImluZGV4Iiwic2VsZWN0Tm90aGluZyJdLCJtYXBwaW5ncyI6IjtBQStCQSxNQUFNQSxJQUFVQyxFQUFvQkMsQ0FBTTtBQUl4QixJQUFBQyxzQkFBQUEsT0FDaEJBLEVBQUEsb0JBQW9CLHFCQUNwQkEsRUFBQSxpQkFBaUIsa0JBQ2pCQSxFQUFBLHlCQUF5QiwwQkFDekJBLEVBQUEsb0JBQW9CLHFCQUNwQkEsRUFBQSxpQ0FBaUMsa0NBQ2pDQSxFQUFBLHFCQUFxQixzQkFDckJBLEVBQUEsZ0JBQWdCLGlCQUNoQkEsRUFBQSw4QkFBOEIsK0JBQzlCQSxFQUFBLG9DQUFvQyxxQ0FUcEJBLElBQUFBLEtBQUEsQ0FBQSxDQUFBO0FBWVgsTUFBTUMsVUFBd0IsTUFBTTtBQUFBLEVBQ3pDLFlBQVlDLEdBQXdCQyxHQUFnQztBQUNsRSxVQUFNRCxDQUFPLEdBRHFCLEtBQUEsU0FBQUM7QUFBQSxFQUVwQztBQUNGO0FBS0EsZUFBZUMsRUFDYkMsR0FDQUMsR0FNQztBQUNELFFBQU1DLElBQWNDLEVBQXdDLENBQUNILENBQWlCLENBQUMsRUFBRSxD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
|