@kulupu-linku/sona 0.3.5 → 2.0.2
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/dist/.assetsignore +0 -0
- package/dist/client-BSyS8F5a.d.ts +1612 -0
- package/dist/client-BitJ28pJ.js +10 -0
- package/dist/client-CUMo53JZ.d.ts +1612 -0
- package/dist/client-DNWH1gFt.js +10 -0
- package/dist/index-1jX6YIBj.d.ts +1497 -0
- package/dist/index-DObG_APy.d.ts +398 -0
- package/dist/index-DsVEVr6r.d.ts +300 -0
- package/dist/lib/v1/client.d.ts +3 -0
- package/dist/lib/v1/client.js +3 -0
- package/dist/lib/v1/client.test.d.ts +31 -0
- package/dist/lib/v1/client.test.js +3 -0
- package/dist/lib/v1/index.d.ts +2 -0
- package/dist/lib/v1/index.js +4 -0
- package/dist/lib/v1/types.d.ts +2 -0
- package/dist/lib/v1/types.js +1 -0
- package/dist/lib/v1/utils.d.ts +26 -0
- package/dist/lib/v1/utils.js +3 -0
- package/dist/lib/v2/client.d.ts +3 -0
- package/dist/lib/v2/client.js +3 -0
- package/dist/lib/v2/client.test.d.ts +36 -0
- package/dist/lib/v2/client.test.js +3 -0
- package/dist/lib/v2/index.d.ts +2 -0
- package/dist/lib/v2/index.js +4 -0
- package/dist/lib/v2/types.d.ts +2 -0
- package/dist/lib/v2/types.js +1 -0
- package/dist/lib/v2/utils.d.ts +44 -0
- package/dist/lib/v2/utils.js +3 -0
- package/dist/server/index.d.ts +2 -684
- package/dist/server/index.js +43 -0
- package/dist/server/utils.d.ts +22 -15
- package/dist/server/utils.js +3 -0
- package/dist/server/v1/index.d.ts +863 -639
- package/dist/server/v1/index.js +8 -0
- package/dist/server/v2/index.d.ts +1112 -0
- package/dist/server/v2/index.js +8 -0
- package/dist/server/versioning.d.ts +1964 -2369
- package/dist/server/versioning.js +8 -0
- package/dist/utils-DkAaVBMs.js +33 -0
- package/dist/utils-QiKwNnnL.js +37 -0
- package/dist/utils-Z1o5sWsW.js +40 -0
- package/dist/v1-DkHVwPCI.js +139 -0
- package/dist/v1-obRCoWWK.js +267 -0
- package/dist/v2-CDtbJFxV.js +194 -0
- package/generated/v2/fingerspelling.json +124 -0
- package/generated/v2/fingerspellings.json +135 -0
- package/generated/v2/font.json +119 -0
- package/generated/v2/fonts.json +130 -0
- package/generated/v2/glyph.json +160 -0
- package/generated/v2/glyphs.json +167 -0
- package/generated/v2/language.json +58 -0
- package/generated/v2/languages.json +67 -0
- package/generated/v2/sign.json +149 -0
- package/generated/v2/signs.json +160 -0
- package/generated/v2/word.json +306 -0
- package/generated/v2/words.json +313 -0
- package/package.json +47 -28
- package/dist/client.d.ts +0 -1
- package/dist/client.js +0 -165
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -223
- package/dist/lib/client.d.ts +0 -742
- package/dist/lib/client.test.d.ts +0 -28
- package/dist/lib/index.d.ts +0 -963
- package/dist/lib/types.d.ts +0 -18
- package/dist/lib/utils.d.ts +0 -14
- package/dist/utils-GfUvEzD4.js +0 -2905
- package/dist/utils.d.ts +0 -1
- package/dist/utils.js +0 -9
- package/generated/words.json +0 -315
- /package/generated/{commentary_translation.json → v1/commentary_translation.json} +0 -0
- /package/generated/{definition_translation.json → v1/definition_translation.json} +0 -0
- /package/generated/{etymology_translation.json → v1/etymology_translation.json} +0 -0
- /package/generated/{fingerspelling.json → v1/fingerspelling.json} +0 -0
- /package/generated/{fingerspelling_sign.json → v1/fingerspelling_sign.json} +0 -0
- /package/generated/{font.json → v1/font.json} +0 -0
- /package/generated/{fonts.json → v1/fonts.json} +0 -0
- /package/generated/{icon_translation.json → v1/icon_translation.json} +0 -0
- /package/generated/{languages.json → v1/languages.json} +0 -0
- /package/generated/{parameters_translation.json → v1/parameters_translation.json} +0 -0
- /package/generated/{sign.json → v1/sign.json} +0 -0
- /package/generated/{signs.json → v1/signs.json} +0 -0
- /package/generated/{sitelen_pona_translation.json → v1/sitelen_pona_translation.json} +0 -0
- /package/generated/{word.json → v1/word.json} +0 -0
package/dist/utils-GfUvEzD4.js
DELETED
|
@@ -1,2905 +0,0 @@
|
|
|
1
|
-
var g;
|
|
2
|
-
(function(r) {
|
|
3
|
-
r.assertEqual = (n) => n;
|
|
4
|
-
function e(n) {
|
|
5
|
-
}
|
|
6
|
-
r.assertIs = e;
|
|
7
|
-
function t(n) {
|
|
8
|
-
throw new Error();
|
|
9
|
-
}
|
|
10
|
-
r.assertNever = t, r.arrayToEnum = (n) => {
|
|
11
|
-
const a = {};
|
|
12
|
-
for (const i of n)
|
|
13
|
-
a[i] = i;
|
|
14
|
-
return a;
|
|
15
|
-
}, r.getValidEnumValues = (n) => {
|
|
16
|
-
const a = r.objectKeys(n).filter((o) => typeof n[n[o]] != "number"), i = {};
|
|
17
|
-
for (const o of a)
|
|
18
|
-
i[o] = n[o];
|
|
19
|
-
return r.objectValues(i);
|
|
20
|
-
}, r.objectValues = (n) => r.objectKeys(n).map(function(a) {
|
|
21
|
-
return n[a];
|
|
22
|
-
}), r.objectKeys = typeof Object.keys == "function" ? (n) => Object.keys(n) : (n) => {
|
|
23
|
-
const a = [];
|
|
24
|
-
for (const i in n)
|
|
25
|
-
Object.prototype.hasOwnProperty.call(n, i) && a.push(i);
|
|
26
|
-
return a;
|
|
27
|
-
}, r.find = (n, a) => {
|
|
28
|
-
for (const i of n)
|
|
29
|
-
if (a(i))
|
|
30
|
-
return i;
|
|
31
|
-
}, r.isInteger = typeof Number.isInteger == "function" ? (n) => Number.isInteger(n) : (n) => typeof n == "number" && isFinite(n) && Math.floor(n) === n;
|
|
32
|
-
function s(n, a = " | ") {
|
|
33
|
-
return n.map((i) => typeof i == "string" ? `'${i}'` : i).join(a);
|
|
34
|
-
}
|
|
35
|
-
r.joinValues = s, r.jsonStringifyReplacer = (n, a) => typeof a == "bigint" ? a.toString() : a;
|
|
36
|
-
})(g || (g = {}));
|
|
37
|
-
var ke;
|
|
38
|
-
(function(r) {
|
|
39
|
-
r.mergeShapes = (e, t) => ({
|
|
40
|
-
...e,
|
|
41
|
-
...t
|
|
42
|
-
// second overwrites first
|
|
43
|
-
});
|
|
44
|
-
})(ke || (ke = {}));
|
|
45
|
-
const f = g.arrayToEnum([
|
|
46
|
-
"string",
|
|
47
|
-
"nan",
|
|
48
|
-
"number",
|
|
49
|
-
"integer",
|
|
50
|
-
"float",
|
|
51
|
-
"boolean",
|
|
52
|
-
"date",
|
|
53
|
-
"bigint",
|
|
54
|
-
"symbol",
|
|
55
|
-
"function",
|
|
56
|
-
"undefined",
|
|
57
|
-
"null",
|
|
58
|
-
"array",
|
|
59
|
-
"object",
|
|
60
|
-
"unknown",
|
|
61
|
-
"promise",
|
|
62
|
-
"void",
|
|
63
|
-
"never",
|
|
64
|
-
"map",
|
|
65
|
-
"set"
|
|
66
|
-
]), A = (r) => {
|
|
67
|
-
switch (typeof r) {
|
|
68
|
-
case "undefined":
|
|
69
|
-
return f.undefined;
|
|
70
|
-
case "string":
|
|
71
|
-
return f.string;
|
|
72
|
-
case "number":
|
|
73
|
-
return isNaN(r) ? f.nan : f.number;
|
|
74
|
-
case "boolean":
|
|
75
|
-
return f.boolean;
|
|
76
|
-
case "function":
|
|
77
|
-
return f.function;
|
|
78
|
-
case "bigint":
|
|
79
|
-
return f.bigint;
|
|
80
|
-
case "symbol":
|
|
81
|
-
return f.symbol;
|
|
82
|
-
case "object":
|
|
83
|
-
return Array.isArray(r) ? f.array : r === null ? f.null : r.then && typeof r.then == "function" && r.catch && typeof r.catch == "function" ? f.promise : typeof Map < "u" && r instanceof Map ? f.map : typeof Set < "u" && r instanceof Set ? f.set : typeof Date < "u" && r instanceof Date ? f.date : f.object;
|
|
84
|
-
default:
|
|
85
|
-
return f.unknown;
|
|
86
|
-
}
|
|
87
|
-
}, d = g.arrayToEnum([
|
|
88
|
-
"invalid_type",
|
|
89
|
-
"invalid_literal",
|
|
90
|
-
"custom",
|
|
91
|
-
"invalid_union",
|
|
92
|
-
"invalid_union_discriminator",
|
|
93
|
-
"invalid_enum_value",
|
|
94
|
-
"unrecognized_keys",
|
|
95
|
-
"invalid_arguments",
|
|
96
|
-
"invalid_return_type",
|
|
97
|
-
"invalid_date",
|
|
98
|
-
"invalid_string",
|
|
99
|
-
"too_small",
|
|
100
|
-
"too_big",
|
|
101
|
-
"invalid_intersection_types",
|
|
102
|
-
"not_multiple_of",
|
|
103
|
-
"not_finite"
|
|
104
|
-
]), De = (r) => JSON.stringify(r, null, 2).replace(/"([^"]+)":/g, "$1:");
|
|
105
|
-
class T extends Error {
|
|
106
|
-
constructor(e) {
|
|
107
|
-
super(), this.issues = [], this.addIssue = (s) => {
|
|
108
|
-
this.issues = [...this.issues, s];
|
|
109
|
-
}, this.addIssues = (s = []) => {
|
|
110
|
-
this.issues = [...this.issues, ...s];
|
|
111
|
-
};
|
|
112
|
-
const t = new.target.prototype;
|
|
113
|
-
Object.setPrototypeOf ? Object.setPrototypeOf(this, t) : this.__proto__ = t, this.name = "ZodError", this.issues = e;
|
|
114
|
-
}
|
|
115
|
-
get errors() {
|
|
116
|
-
return this.issues;
|
|
117
|
-
}
|
|
118
|
-
format(e) {
|
|
119
|
-
const t = e || function(a) {
|
|
120
|
-
return a.message;
|
|
121
|
-
}, s = { _errors: [] }, n = (a) => {
|
|
122
|
-
for (const i of a.issues)
|
|
123
|
-
if (i.code === "invalid_union")
|
|
124
|
-
i.unionErrors.map(n);
|
|
125
|
-
else if (i.code === "invalid_return_type")
|
|
126
|
-
n(i.returnTypeError);
|
|
127
|
-
else if (i.code === "invalid_arguments")
|
|
128
|
-
n(i.argumentsError);
|
|
129
|
-
else if (i.path.length === 0)
|
|
130
|
-
s._errors.push(t(i));
|
|
131
|
-
else {
|
|
132
|
-
let o = s, l = 0;
|
|
133
|
-
for (; l < i.path.length; ) {
|
|
134
|
-
const c = i.path[l];
|
|
135
|
-
l === i.path.length - 1 ? (o[c] = o[c] || { _errors: [] }, o[c]._errors.push(t(i))) : o[c] = o[c] || { _errors: [] }, o = o[c], l++;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
return n(this), s;
|
|
140
|
-
}
|
|
141
|
-
static assert(e) {
|
|
142
|
-
if (!(e instanceof T))
|
|
143
|
-
throw new Error(`Not a ZodError: ${e}`);
|
|
144
|
-
}
|
|
145
|
-
toString() {
|
|
146
|
-
return this.message;
|
|
147
|
-
}
|
|
148
|
-
get message() {
|
|
149
|
-
return JSON.stringify(this.issues, g.jsonStringifyReplacer, 2);
|
|
150
|
-
}
|
|
151
|
-
get isEmpty() {
|
|
152
|
-
return this.issues.length === 0;
|
|
153
|
-
}
|
|
154
|
-
flatten(e = (t) => t.message) {
|
|
155
|
-
const t = {}, s = [];
|
|
156
|
-
for (const n of this.issues)
|
|
157
|
-
n.path.length > 0 ? (t[n.path[0]] = t[n.path[0]] || [], t[n.path[0]].push(e(n))) : s.push(e(n));
|
|
158
|
-
return { formErrors: s, fieldErrors: t };
|
|
159
|
-
}
|
|
160
|
-
get formErrors() {
|
|
161
|
-
return this.flatten();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
T.create = (r) => new T(r);
|
|
165
|
-
const q = (r, e) => {
|
|
166
|
-
let t;
|
|
167
|
-
switch (r.code) {
|
|
168
|
-
case d.invalid_type:
|
|
169
|
-
r.received === f.undefined ? t = "Required" : t = `Expected ${r.expected}, received ${r.received}`;
|
|
170
|
-
break;
|
|
171
|
-
case d.invalid_literal:
|
|
172
|
-
t = `Invalid literal value, expected ${JSON.stringify(r.expected, g.jsonStringifyReplacer)}`;
|
|
173
|
-
break;
|
|
174
|
-
case d.unrecognized_keys:
|
|
175
|
-
t = `Unrecognized key(s) in object: ${g.joinValues(r.keys, ", ")}`;
|
|
176
|
-
break;
|
|
177
|
-
case d.invalid_union:
|
|
178
|
-
t = "Invalid input";
|
|
179
|
-
break;
|
|
180
|
-
case d.invalid_union_discriminator:
|
|
181
|
-
t = `Invalid discriminator value. Expected ${g.joinValues(r.options)}`;
|
|
182
|
-
break;
|
|
183
|
-
case d.invalid_enum_value:
|
|
184
|
-
t = `Invalid enum value. Expected ${g.joinValues(r.options)}, received '${r.received}'`;
|
|
185
|
-
break;
|
|
186
|
-
case d.invalid_arguments:
|
|
187
|
-
t = "Invalid function arguments";
|
|
188
|
-
break;
|
|
189
|
-
case d.invalid_return_type:
|
|
190
|
-
t = "Invalid function return type";
|
|
191
|
-
break;
|
|
192
|
-
case d.invalid_date:
|
|
193
|
-
t = "Invalid date";
|
|
194
|
-
break;
|
|
195
|
-
case d.invalid_string:
|
|
196
|
-
typeof r.validation == "object" ? "includes" in r.validation ? (t = `Invalid input: must include "${r.validation.includes}"`, typeof r.validation.position == "number" && (t = `${t} at one or more positions greater than or equal to ${r.validation.position}`)) : "startsWith" in r.validation ? t = `Invalid input: must start with "${r.validation.startsWith}"` : "endsWith" in r.validation ? t = `Invalid input: must end with "${r.validation.endsWith}"` : g.assertNever(r.validation) : r.validation !== "regex" ? t = `Invalid ${r.validation}` : t = "Invalid";
|
|
197
|
-
break;
|
|
198
|
-
case d.too_small:
|
|
199
|
-
r.type === "array" ? t = `Array must contain ${r.exact ? "exactly" : r.inclusive ? "at least" : "more than"} ${r.minimum} element(s)` : r.type === "string" ? t = `String must contain ${r.exact ? "exactly" : r.inclusive ? "at least" : "over"} ${r.minimum} character(s)` : r.type === "number" ? t = `Number must be ${r.exact ? "exactly equal to " : r.inclusive ? "greater than or equal to " : "greater than "}${r.minimum}` : r.type === "date" ? t = `Date must be ${r.exact ? "exactly equal to " : r.inclusive ? "greater than or equal to " : "greater than "}${new Date(Number(r.minimum))}` : t = "Invalid input";
|
|
200
|
-
break;
|
|
201
|
-
case d.too_big:
|
|
202
|
-
r.type === "array" ? t = `Array must contain ${r.exact ? "exactly" : r.inclusive ? "at most" : "less than"} ${r.maximum} element(s)` : r.type === "string" ? t = `String must contain ${r.exact ? "exactly" : r.inclusive ? "at most" : "under"} ${r.maximum} character(s)` : r.type === "number" ? t = `Number must be ${r.exact ? "exactly" : r.inclusive ? "less than or equal to" : "less than"} ${r.maximum}` : r.type === "bigint" ? t = `BigInt must be ${r.exact ? "exactly" : r.inclusive ? "less than or equal to" : "less than"} ${r.maximum}` : r.type === "date" ? t = `Date must be ${r.exact ? "exactly" : r.inclusive ? "smaller than or equal to" : "smaller than"} ${new Date(Number(r.maximum))}` : t = "Invalid input";
|
|
203
|
-
break;
|
|
204
|
-
case d.custom:
|
|
205
|
-
t = "Invalid input";
|
|
206
|
-
break;
|
|
207
|
-
case d.invalid_intersection_types:
|
|
208
|
-
t = "Intersection results could not be merged";
|
|
209
|
-
break;
|
|
210
|
-
case d.not_multiple_of:
|
|
211
|
-
t = `Number must be a multiple of ${r.multipleOf}`;
|
|
212
|
-
break;
|
|
213
|
-
case d.not_finite:
|
|
214
|
-
t = "Number must be finite";
|
|
215
|
-
break;
|
|
216
|
-
default:
|
|
217
|
-
t = e.defaultError, g.assertNever(r);
|
|
218
|
-
}
|
|
219
|
-
return { message: t };
|
|
220
|
-
};
|
|
221
|
-
let Oe = q;
|
|
222
|
-
function Le(r) {
|
|
223
|
-
Oe = r;
|
|
224
|
-
}
|
|
225
|
-
function le() {
|
|
226
|
-
return Oe;
|
|
227
|
-
}
|
|
228
|
-
const fe = (r) => {
|
|
229
|
-
const { data: e, path: t, errorMaps: s, issueData: n } = r, a = [...t, ...n.path || []], i = {
|
|
230
|
-
...n,
|
|
231
|
-
path: a
|
|
232
|
-
};
|
|
233
|
-
if (n.message !== void 0)
|
|
234
|
-
return {
|
|
235
|
-
...n,
|
|
236
|
-
path: a,
|
|
237
|
-
message: n.message
|
|
238
|
-
};
|
|
239
|
-
let o = "";
|
|
240
|
-
const l = s.filter((c) => !!c).slice().reverse();
|
|
241
|
-
for (const c of l)
|
|
242
|
-
o = c(i, { data: e, defaultError: o }).message;
|
|
243
|
-
return {
|
|
244
|
-
...n,
|
|
245
|
-
path: a,
|
|
246
|
-
message: o
|
|
247
|
-
};
|
|
248
|
-
}, ze = [];
|
|
249
|
-
function u(r, e) {
|
|
250
|
-
const t = le(), s = fe({
|
|
251
|
-
issueData: e,
|
|
252
|
-
data: r.data,
|
|
253
|
-
path: r.path,
|
|
254
|
-
errorMaps: [
|
|
255
|
-
r.common.contextualErrorMap,
|
|
256
|
-
r.schemaErrorMap,
|
|
257
|
-
t,
|
|
258
|
-
t === q ? void 0 : q
|
|
259
|
-
// then global default map
|
|
260
|
-
].filter((n) => !!n)
|
|
261
|
-
});
|
|
262
|
-
r.common.issues.push(s);
|
|
263
|
-
}
|
|
264
|
-
class b {
|
|
265
|
-
constructor() {
|
|
266
|
-
this.value = "valid";
|
|
267
|
-
}
|
|
268
|
-
dirty() {
|
|
269
|
-
this.value === "valid" && (this.value = "dirty");
|
|
270
|
-
}
|
|
271
|
-
abort() {
|
|
272
|
-
this.value !== "aborted" && (this.value = "aborted");
|
|
273
|
-
}
|
|
274
|
-
static mergeArray(e, t) {
|
|
275
|
-
const s = [];
|
|
276
|
-
for (const n of t) {
|
|
277
|
-
if (n.status === "aborted")
|
|
278
|
-
return m;
|
|
279
|
-
n.status === "dirty" && e.dirty(), s.push(n.value);
|
|
280
|
-
}
|
|
281
|
-
return { status: e.value, value: s };
|
|
282
|
-
}
|
|
283
|
-
static async mergeObjectAsync(e, t) {
|
|
284
|
-
const s = [];
|
|
285
|
-
for (const n of t) {
|
|
286
|
-
const a = await n.key, i = await n.value;
|
|
287
|
-
s.push({
|
|
288
|
-
key: a,
|
|
289
|
-
value: i
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
return b.mergeObjectSync(e, s);
|
|
293
|
-
}
|
|
294
|
-
static mergeObjectSync(e, t) {
|
|
295
|
-
const s = {};
|
|
296
|
-
for (const n of t) {
|
|
297
|
-
const { key: a, value: i } = n;
|
|
298
|
-
if (a.status === "aborted" || i.status === "aborted")
|
|
299
|
-
return m;
|
|
300
|
-
a.status === "dirty" && e.dirty(), i.status === "dirty" && e.dirty(), a.value !== "__proto__" && (typeof i.value < "u" || n.alwaysSet) && (s[a.value] = i.value);
|
|
301
|
-
}
|
|
302
|
-
return { status: e.value, value: s };
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
const m = Object.freeze({
|
|
306
|
-
status: "aborted"
|
|
307
|
-
}), B = (r) => ({ status: "dirty", value: r }), w = (r) => ({ status: "valid", value: r }), be = (r) => r.status === "aborted", we = (r) => r.status === "dirty", X = (r) => r.status === "valid", Q = (r) => typeof Promise < "u" && r instanceof Promise;
|
|
308
|
-
function he(r, e, t, s) {
|
|
309
|
-
if (typeof e == "function" ? r !== e || !s : !e.has(r))
|
|
310
|
-
throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
311
|
-
return e.get(r);
|
|
312
|
-
}
|
|
313
|
-
function Ee(r, e, t, s, n) {
|
|
314
|
-
if (typeof e == "function" ? r !== e || !n : !e.has(r))
|
|
315
|
-
throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
316
|
-
return e.set(r, t), t;
|
|
317
|
-
}
|
|
318
|
-
var h;
|
|
319
|
-
(function(r) {
|
|
320
|
-
r.errToObj = (e) => typeof e == "string" ? { message: e } : e || {}, r.toString = (e) => typeof e == "string" ? e : e == null ? void 0 : e.message;
|
|
321
|
-
})(h || (h = {}));
|
|
322
|
-
var H, G;
|
|
323
|
-
class E {
|
|
324
|
-
constructor(e, t, s, n) {
|
|
325
|
-
this._cachedPath = [], this.parent = e, this.data = t, this._path = s, this._key = n;
|
|
326
|
-
}
|
|
327
|
-
get path() {
|
|
328
|
-
return this._cachedPath.length || (this._key instanceof Array ? this._cachedPath.push(...this._path, ...this._key) : this._cachedPath.push(...this._path, this._key)), this._cachedPath;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
const Ce = (r, e) => {
|
|
332
|
-
if (X(e))
|
|
333
|
-
return { success: !0, data: e.value };
|
|
334
|
-
if (!r.common.issues.length)
|
|
335
|
-
throw new Error("Validation failed but no issues detected.");
|
|
336
|
-
return {
|
|
337
|
-
success: !1,
|
|
338
|
-
get error() {
|
|
339
|
-
if (this._error)
|
|
340
|
-
return this._error;
|
|
341
|
-
const t = new T(r.common.issues);
|
|
342
|
-
return this._error = t, this._error;
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
};
|
|
346
|
-
function v(r) {
|
|
347
|
-
if (!r)
|
|
348
|
-
return {};
|
|
349
|
-
const { errorMap: e, invalid_type_error: t, required_error: s, description: n } = r;
|
|
350
|
-
if (e && (t || s))
|
|
351
|
-
throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);
|
|
352
|
-
return e ? { errorMap: e, description: n } : { errorMap: (i, o) => {
|
|
353
|
-
var l, c;
|
|
354
|
-
const { message: y } = r;
|
|
355
|
-
return i.code === "invalid_enum_value" ? { message: y ?? o.defaultError } : typeof o.data > "u" ? { message: (l = y ?? s) !== null && l !== void 0 ? l : o.defaultError } : i.code !== "invalid_type" ? { message: o.defaultError } : { message: (c = y ?? t) !== null && c !== void 0 ? c : o.defaultError };
|
|
356
|
-
}, description: n };
|
|
357
|
-
}
|
|
358
|
-
class _ {
|
|
359
|
-
constructor(e) {
|
|
360
|
-
this.spa = this.safeParseAsync, this._def = e, this.parse = this.parse.bind(this), this.safeParse = this.safeParse.bind(this), this.parseAsync = this.parseAsync.bind(this), this.safeParseAsync = this.safeParseAsync.bind(this), this.spa = this.spa.bind(this), this.refine = this.refine.bind(this), this.refinement = this.refinement.bind(this), this.superRefine = this.superRefine.bind(this), this.optional = this.optional.bind(this), this.nullable = this.nullable.bind(this), this.nullish = this.nullish.bind(this), this.array = this.array.bind(this), this.promise = this.promise.bind(this), this.or = this.or.bind(this), this.and = this.and.bind(this), this.transform = this.transform.bind(this), this.brand = this.brand.bind(this), this.default = this.default.bind(this), this.catch = this.catch.bind(this), this.describe = this.describe.bind(this), this.pipe = this.pipe.bind(this), this.readonly = this.readonly.bind(this), this.isNullable = this.isNullable.bind(this), this.isOptional = this.isOptional.bind(this);
|
|
361
|
-
}
|
|
362
|
-
get description() {
|
|
363
|
-
return this._def.description;
|
|
364
|
-
}
|
|
365
|
-
_getType(e) {
|
|
366
|
-
return A(e.data);
|
|
367
|
-
}
|
|
368
|
-
_getOrReturnCtx(e, t) {
|
|
369
|
-
return t || {
|
|
370
|
-
common: e.parent.common,
|
|
371
|
-
data: e.data,
|
|
372
|
-
parsedType: A(e.data),
|
|
373
|
-
schemaErrorMap: this._def.errorMap,
|
|
374
|
-
path: e.path,
|
|
375
|
-
parent: e.parent
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
_processInputParams(e) {
|
|
379
|
-
return {
|
|
380
|
-
status: new b(),
|
|
381
|
-
ctx: {
|
|
382
|
-
common: e.parent.common,
|
|
383
|
-
data: e.data,
|
|
384
|
-
parsedType: A(e.data),
|
|
385
|
-
schemaErrorMap: this._def.errorMap,
|
|
386
|
-
path: e.path,
|
|
387
|
-
parent: e.parent
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
_parseSync(e) {
|
|
392
|
-
const t = this._parse(e);
|
|
393
|
-
if (Q(t))
|
|
394
|
-
throw new Error("Synchronous parse encountered promise.");
|
|
395
|
-
return t;
|
|
396
|
-
}
|
|
397
|
-
_parseAsync(e) {
|
|
398
|
-
const t = this._parse(e);
|
|
399
|
-
return Promise.resolve(t);
|
|
400
|
-
}
|
|
401
|
-
parse(e, t) {
|
|
402
|
-
const s = this.safeParse(e, t);
|
|
403
|
-
if (s.success)
|
|
404
|
-
return s.data;
|
|
405
|
-
throw s.error;
|
|
406
|
-
}
|
|
407
|
-
safeParse(e, t) {
|
|
408
|
-
var s;
|
|
409
|
-
const n = {
|
|
410
|
-
common: {
|
|
411
|
-
issues: [],
|
|
412
|
-
async: (s = t == null ? void 0 : t.async) !== null && s !== void 0 ? s : !1,
|
|
413
|
-
contextualErrorMap: t == null ? void 0 : t.errorMap
|
|
414
|
-
},
|
|
415
|
-
path: (t == null ? void 0 : t.path) || [],
|
|
416
|
-
schemaErrorMap: this._def.errorMap,
|
|
417
|
-
parent: null,
|
|
418
|
-
data: e,
|
|
419
|
-
parsedType: A(e)
|
|
420
|
-
}, a = this._parseSync({ data: e, path: n.path, parent: n });
|
|
421
|
-
return Ce(n, a);
|
|
422
|
-
}
|
|
423
|
-
async parseAsync(e, t) {
|
|
424
|
-
const s = await this.safeParseAsync(e, t);
|
|
425
|
-
if (s.success)
|
|
426
|
-
return s.data;
|
|
427
|
-
throw s.error;
|
|
428
|
-
}
|
|
429
|
-
async safeParseAsync(e, t) {
|
|
430
|
-
const s = {
|
|
431
|
-
common: {
|
|
432
|
-
issues: [],
|
|
433
|
-
contextualErrorMap: t == null ? void 0 : t.errorMap,
|
|
434
|
-
async: !0
|
|
435
|
-
},
|
|
436
|
-
path: (t == null ? void 0 : t.path) || [],
|
|
437
|
-
schemaErrorMap: this._def.errorMap,
|
|
438
|
-
parent: null,
|
|
439
|
-
data: e,
|
|
440
|
-
parsedType: A(e)
|
|
441
|
-
}, n = this._parse({ data: e, path: s.path, parent: s }), a = await (Q(n) ? n : Promise.resolve(n));
|
|
442
|
-
return Ce(s, a);
|
|
443
|
-
}
|
|
444
|
-
refine(e, t) {
|
|
445
|
-
const s = (n) => typeof t == "string" || typeof t > "u" ? { message: t } : typeof t == "function" ? t(n) : t;
|
|
446
|
-
return this._refinement((n, a) => {
|
|
447
|
-
const i = e(n), o = () => a.addIssue({
|
|
448
|
-
code: d.custom,
|
|
449
|
-
...s(n)
|
|
450
|
-
});
|
|
451
|
-
return typeof Promise < "u" && i instanceof Promise ? i.then((l) => l ? !0 : (o(), !1)) : i ? !0 : (o(), !1);
|
|
452
|
-
});
|
|
453
|
-
}
|
|
454
|
-
refinement(e, t) {
|
|
455
|
-
return this._refinement((s, n) => e(s) ? !0 : (n.addIssue(typeof t == "function" ? t(s, n) : t), !1));
|
|
456
|
-
}
|
|
457
|
-
_refinement(e) {
|
|
458
|
-
return new N({
|
|
459
|
-
schema: this,
|
|
460
|
-
typeName: p.ZodEffects,
|
|
461
|
-
effect: { type: "refinement", refinement: e }
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
superRefine(e) {
|
|
465
|
-
return this._refinement(e);
|
|
466
|
-
}
|
|
467
|
-
optional() {
|
|
468
|
-
return O.create(this, this._def);
|
|
469
|
-
}
|
|
470
|
-
nullable() {
|
|
471
|
-
return V.create(this, this._def);
|
|
472
|
-
}
|
|
473
|
-
nullish() {
|
|
474
|
-
return this.nullable().optional();
|
|
475
|
-
}
|
|
476
|
-
array() {
|
|
477
|
-
return C.create(this, this._def);
|
|
478
|
-
}
|
|
479
|
-
promise() {
|
|
480
|
-
return J.create(this, this._def);
|
|
481
|
-
}
|
|
482
|
-
or(e) {
|
|
483
|
-
return te.create([this, e], this._def);
|
|
484
|
-
}
|
|
485
|
-
and(e) {
|
|
486
|
-
return re.create(this, e, this._def);
|
|
487
|
-
}
|
|
488
|
-
transform(e) {
|
|
489
|
-
return new N({
|
|
490
|
-
...v(this._def),
|
|
491
|
-
schema: this,
|
|
492
|
-
typeName: p.ZodEffects,
|
|
493
|
-
effect: { type: "transform", transform: e }
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
default(e) {
|
|
497
|
-
const t = typeof e == "function" ? e : () => e;
|
|
498
|
-
return new oe({
|
|
499
|
-
...v(this._def),
|
|
500
|
-
innerType: this,
|
|
501
|
-
defaultValue: t,
|
|
502
|
-
typeName: p.ZodDefault
|
|
503
|
-
});
|
|
504
|
-
}
|
|
505
|
-
brand() {
|
|
506
|
-
return new Ze({
|
|
507
|
-
typeName: p.ZodBranded,
|
|
508
|
-
type: this,
|
|
509
|
-
...v(this._def)
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
catch(e) {
|
|
513
|
-
const t = typeof e == "function" ? e : () => e;
|
|
514
|
-
return new de({
|
|
515
|
-
...v(this._def),
|
|
516
|
-
innerType: this,
|
|
517
|
-
catchValue: t,
|
|
518
|
-
typeName: p.ZodCatch
|
|
519
|
-
});
|
|
520
|
-
}
|
|
521
|
-
describe(e) {
|
|
522
|
-
const t = this.constructor;
|
|
523
|
-
return new t({
|
|
524
|
-
...this._def,
|
|
525
|
-
description: e
|
|
526
|
-
});
|
|
527
|
-
}
|
|
528
|
-
pipe(e) {
|
|
529
|
-
return ue.create(this, e);
|
|
530
|
-
}
|
|
531
|
-
readonly() {
|
|
532
|
-
return ce.create(this);
|
|
533
|
-
}
|
|
534
|
-
isOptional() {
|
|
535
|
-
return this.safeParse(void 0).success;
|
|
536
|
-
}
|
|
537
|
-
isNullable() {
|
|
538
|
-
return this.safeParse(null).success;
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
const Ue = /^c[^\s-]{8,}$/i, Be = /^[0-9a-z]+$/, We = /^[0-9A-HJKMNP-TV-Z]{26}$/, qe = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i, Ye = /^[a-z0-9_-]{21}$/i, Je = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/, He = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i, Ge = "^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";
|
|
542
|
-
let xe;
|
|
543
|
-
const Xe = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/, Qe = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/, Ke = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/, Re = "((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))", Fe = new RegExp(`^${Re}$`);
|
|
544
|
-
function Ie(r) {
|
|
545
|
-
let e = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
|
|
546
|
-
return r.precision ? e = `${e}\\.\\d{${r.precision}}` : r.precision == null && (e = `${e}(\\.\\d+)?`), e;
|
|
547
|
-
}
|
|
548
|
-
function et(r) {
|
|
549
|
-
return new RegExp(`^${Ie(r)}$`);
|
|
550
|
-
}
|
|
551
|
-
function je(r) {
|
|
552
|
-
let e = `${Re}T${Ie(r)}`;
|
|
553
|
-
const t = [];
|
|
554
|
-
return t.push(r.local ? "Z?" : "Z"), r.offset && t.push("([+-]\\d{2}:?\\d{2})"), e = `${e}(${t.join("|")})`, new RegExp(`^${e}$`);
|
|
555
|
-
}
|
|
556
|
-
function tt(r, e) {
|
|
557
|
-
return !!((e === "v4" || !e) && Xe.test(r) || (e === "v6" || !e) && Qe.test(r));
|
|
558
|
-
}
|
|
559
|
-
class S extends _ {
|
|
560
|
-
_parse(e) {
|
|
561
|
-
if (this._def.coerce && (e.data = String(e.data)), this._getType(e) !== f.string) {
|
|
562
|
-
const a = this._getOrReturnCtx(e);
|
|
563
|
-
return u(a, {
|
|
564
|
-
code: d.invalid_type,
|
|
565
|
-
expected: f.string,
|
|
566
|
-
received: a.parsedType
|
|
567
|
-
}), m;
|
|
568
|
-
}
|
|
569
|
-
const s = new b();
|
|
570
|
-
let n;
|
|
571
|
-
for (const a of this._def.checks)
|
|
572
|
-
if (a.kind === "min")
|
|
573
|
-
e.data.length < a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
574
|
-
code: d.too_small,
|
|
575
|
-
minimum: a.value,
|
|
576
|
-
type: "string",
|
|
577
|
-
inclusive: !0,
|
|
578
|
-
exact: !1,
|
|
579
|
-
message: a.message
|
|
580
|
-
}), s.dirty());
|
|
581
|
-
else if (a.kind === "max")
|
|
582
|
-
e.data.length > a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
583
|
-
code: d.too_big,
|
|
584
|
-
maximum: a.value,
|
|
585
|
-
type: "string",
|
|
586
|
-
inclusive: !0,
|
|
587
|
-
exact: !1,
|
|
588
|
-
message: a.message
|
|
589
|
-
}), s.dirty());
|
|
590
|
-
else if (a.kind === "length") {
|
|
591
|
-
const i = e.data.length > a.value, o = e.data.length < a.value;
|
|
592
|
-
(i || o) && (n = this._getOrReturnCtx(e, n), i ? u(n, {
|
|
593
|
-
code: d.too_big,
|
|
594
|
-
maximum: a.value,
|
|
595
|
-
type: "string",
|
|
596
|
-
inclusive: !0,
|
|
597
|
-
exact: !0,
|
|
598
|
-
message: a.message
|
|
599
|
-
}) : o && u(n, {
|
|
600
|
-
code: d.too_small,
|
|
601
|
-
minimum: a.value,
|
|
602
|
-
type: "string",
|
|
603
|
-
inclusive: !0,
|
|
604
|
-
exact: !0,
|
|
605
|
-
message: a.message
|
|
606
|
-
}), s.dirty());
|
|
607
|
-
} else if (a.kind === "email")
|
|
608
|
-
He.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
609
|
-
validation: "email",
|
|
610
|
-
code: d.invalid_string,
|
|
611
|
-
message: a.message
|
|
612
|
-
}), s.dirty());
|
|
613
|
-
else if (a.kind === "emoji")
|
|
614
|
-
xe || (xe = new RegExp(Ge, "u")), xe.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
615
|
-
validation: "emoji",
|
|
616
|
-
code: d.invalid_string,
|
|
617
|
-
message: a.message
|
|
618
|
-
}), s.dirty());
|
|
619
|
-
else if (a.kind === "uuid")
|
|
620
|
-
qe.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
621
|
-
validation: "uuid",
|
|
622
|
-
code: d.invalid_string,
|
|
623
|
-
message: a.message
|
|
624
|
-
}), s.dirty());
|
|
625
|
-
else if (a.kind === "nanoid")
|
|
626
|
-
Ye.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
627
|
-
validation: "nanoid",
|
|
628
|
-
code: d.invalid_string,
|
|
629
|
-
message: a.message
|
|
630
|
-
}), s.dirty());
|
|
631
|
-
else if (a.kind === "cuid")
|
|
632
|
-
Ue.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
633
|
-
validation: "cuid",
|
|
634
|
-
code: d.invalid_string,
|
|
635
|
-
message: a.message
|
|
636
|
-
}), s.dirty());
|
|
637
|
-
else if (a.kind === "cuid2")
|
|
638
|
-
Be.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
639
|
-
validation: "cuid2",
|
|
640
|
-
code: d.invalid_string,
|
|
641
|
-
message: a.message
|
|
642
|
-
}), s.dirty());
|
|
643
|
-
else if (a.kind === "ulid")
|
|
644
|
-
We.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
645
|
-
validation: "ulid",
|
|
646
|
-
code: d.invalid_string,
|
|
647
|
-
message: a.message
|
|
648
|
-
}), s.dirty());
|
|
649
|
-
else if (a.kind === "url")
|
|
650
|
-
try {
|
|
651
|
-
new URL(e.data);
|
|
652
|
-
} catch {
|
|
653
|
-
n = this._getOrReturnCtx(e, n), u(n, {
|
|
654
|
-
validation: "url",
|
|
655
|
-
code: d.invalid_string,
|
|
656
|
-
message: a.message
|
|
657
|
-
}), s.dirty();
|
|
658
|
-
}
|
|
659
|
-
else
|
|
660
|
-
a.kind === "regex" ? (a.regex.lastIndex = 0, a.regex.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
661
|
-
validation: "regex",
|
|
662
|
-
code: d.invalid_string,
|
|
663
|
-
message: a.message
|
|
664
|
-
}), s.dirty())) : a.kind === "trim" ? e.data = e.data.trim() : a.kind === "includes" ? e.data.includes(a.value, a.position) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
665
|
-
code: d.invalid_string,
|
|
666
|
-
validation: { includes: a.value, position: a.position },
|
|
667
|
-
message: a.message
|
|
668
|
-
}), s.dirty()) : a.kind === "toLowerCase" ? e.data = e.data.toLowerCase() : a.kind === "toUpperCase" ? e.data = e.data.toUpperCase() : a.kind === "startsWith" ? e.data.startsWith(a.value) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
669
|
-
code: d.invalid_string,
|
|
670
|
-
validation: { startsWith: a.value },
|
|
671
|
-
message: a.message
|
|
672
|
-
}), s.dirty()) : a.kind === "endsWith" ? e.data.endsWith(a.value) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
673
|
-
code: d.invalid_string,
|
|
674
|
-
validation: { endsWith: a.value },
|
|
675
|
-
message: a.message
|
|
676
|
-
}), s.dirty()) : a.kind === "datetime" ? je(a).test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
677
|
-
code: d.invalid_string,
|
|
678
|
-
validation: "datetime",
|
|
679
|
-
message: a.message
|
|
680
|
-
}), s.dirty()) : a.kind === "date" ? Fe.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
681
|
-
code: d.invalid_string,
|
|
682
|
-
validation: "date",
|
|
683
|
-
message: a.message
|
|
684
|
-
}), s.dirty()) : a.kind === "time" ? et(a).test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
685
|
-
code: d.invalid_string,
|
|
686
|
-
validation: "time",
|
|
687
|
-
message: a.message
|
|
688
|
-
}), s.dirty()) : a.kind === "duration" ? Je.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
689
|
-
validation: "duration",
|
|
690
|
-
code: d.invalid_string,
|
|
691
|
-
message: a.message
|
|
692
|
-
}), s.dirty()) : a.kind === "ip" ? tt(e.data, a.version) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
693
|
-
validation: "ip",
|
|
694
|
-
code: d.invalid_string,
|
|
695
|
-
message: a.message
|
|
696
|
-
}), s.dirty()) : a.kind === "base64" ? Ke.test(e.data) || (n = this._getOrReturnCtx(e, n), u(n, {
|
|
697
|
-
validation: "base64",
|
|
698
|
-
code: d.invalid_string,
|
|
699
|
-
message: a.message
|
|
700
|
-
}), s.dirty()) : g.assertNever(a);
|
|
701
|
-
return { status: s.value, value: e.data };
|
|
702
|
-
}
|
|
703
|
-
_regex(e, t, s) {
|
|
704
|
-
return this.refinement((n) => e.test(n), {
|
|
705
|
-
validation: t,
|
|
706
|
-
code: d.invalid_string,
|
|
707
|
-
...h.errToObj(s)
|
|
708
|
-
});
|
|
709
|
-
}
|
|
710
|
-
_addCheck(e) {
|
|
711
|
-
return new S({
|
|
712
|
-
...this._def,
|
|
713
|
-
checks: [...this._def.checks, e]
|
|
714
|
-
});
|
|
715
|
-
}
|
|
716
|
-
email(e) {
|
|
717
|
-
return this._addCheck({ kind: "email", ...h.errToObj(e) });
|
|
718
|
-
}
|
|
719
|
-
url(e) {
|
|
720
|
-
return this._addCheck({ kind: "url", ...h.errToObj(e) });
|
|
721
|
-
}
|
|
722
|
-
emoji(e) {
|
|
723
|
-
return this._addCheck({ kind: "emoji", ...h.errToObj(e) });
|
|
724
|
-
}
|
|
725
|
-
uuid(e) {
|
|
726
|
-
return this._addCheck({ kind: "uuid", ...h.errToObj(e) });
|
|
727
|
-
}
|
|
728
|
-
nanoid(e) {
|
|
729
|
-
return this._addCheck({ kind: "nanoid", ...h.errToObj(e) });
|
|
730
|
-
}
|
|
731
|
-
cuid(e) {
|
|
732
|
-
return this._addCheck({ kind: "cuid", ...h.errToObj(e) });
|
|
733
|
-
}
|
|
734
|
-
cuid2(e) {
|
|
735
|
-
return this._addCheck({ kind: "cuid2", ...h.errToObj(e) });
|
|
736
|
-
}
|
|
737
|
-
ulid(e) {
|
|
738
|
-
return this._addCheck({ kind: "ulid", ...h.errToObj(e) });
|
|
739
|
-
}
|
|
740
|
-
base64(e) {
|
|
741
|
-
return this._addCheck({ kind: "base64", ...h.errToObj(e) });
|
|
742
|
-
}
|
|
743
|
-
ip(e) {
|
|
744
|
-
return this._addCheck({ kind: "ip", ...h.errToObj(e) });
|
|
745
|
-
}
|
|
746
|
-
datetime(e) {
|
|
747
|
-
var t, s;
|
|
748
|
-
return typeof e == "string" ? this._addCheck({
|
|
749
|
-
kind: "datetime",
|
|
750
|
-
precision: null,
|
|
751
|
-
offset: !1,
|
|
752
|
-
local: !1,
|
|
753
|
-
message: e
|
|
754
|
-
}) : this._addCheck({
|
|
755
|
-
kind: "datetime",
|
|
756
|
-
precision: typeof (e == null ? void 0 : e.precision) > "u" ? null : e == null ? void 0 : e.precision,
|
|
757
|
-
offset: (t = e == null ? void 0 : e.offset) !== null && t !== void 0 ? t : !1,
|
|
758
|
-
local: (s = e == null ? void 0 : e.local) !== null && s !== void 0 ? s : !1,
|
|
759
|
-
...h.errToObj(e == null ? void 0 : e.message)
|
|
760
|
-
});
|
|
761
|
-
}
|
|
762
|
-
date(e) {
|
|
763
|
-
return this._addCheck({ kind: "date", message: e });
|
|
764
|
-
}
|
|
765
|
-
time(e) {
|
|
766
|
-
return typeof e == "string" ? this._addCheck({
|
|
767
|
-
kind: "time",
|
|
768
|
-
precision: null,
|
|
769
|
-
message: e
|
|
770
|
-
}) : this._addCheck({
|
|
771
|
-
kind: "time",
|
|
772
|
-
precision: typeof (e == null ? void 0 : e.precision) > "u" ? null : e == null ? void 0 : e.precision,
|
|
773
|
-
...h.errToObj(e == null ? void 0 : e.message)
|
|
774
|
-
});
|
|
775
|
-
}
|
|
776
|
-
duration(e) {
|
|
777
|
-
return this._addCheck({ kind: "duration", ...h.errToObj(e) });
|
|
778
|
-
}
|
|
779
|
-
regex(e, t) {
|
|
780
|
-
return this._addCheck({
|
|
781
|
-
kind: "regex",
|
|
782
|
-
regex: e,
|
|
783
|
-
...h.errToObj(t)
|
|
784
|
-
});
|
|
785
|
-
}
|
|
786
|
-
includes(e, t) {
|
|
787
|
-
return this._addCheck({
|
|
788
|
-
kind: "includes",
|
|
789
|
-
value: e,
|
|
790
|
-
position: t == null ? void 0 : t.position,
|
|
791
|
-
...h.errToObj(t == null ? void 0 : t.message)
|
|
792
|
-
});
|
|
793
|
-
}
|
|
794
|
-
startsWith(e, t) {
|
|
795
|
-
return this._addCheck({
|
|
796
|
-
kind: "startsWith",
|
|
797
|
-
value: e,
|
|
798
|
-
...h.errToObj(t)
|
|
799
|
-
});
|
|
800
|
-
}
|
|
801
|
-
endsWith(e, t) {
|
|
802
|
-
return this._addCheck({
|
|
803
|
-
kind: "endsWith",
|
|
804
|
-
value: e,
|
|
805
|
-
...h.errToObj(t)
|
|
806
|
-
});
|
|
807
|
-
}
|
|
808
|
-
min(e, t) {
|
|
809
|
-
return this._addCheck({
|
|
810
|
-
kind: "min",
|
|
811
|
-
value: e,
|
|
812
|
-
...h.errToObj(t)
|
|
813
|
-
});
|
|
814
|
-
}
|
|
815
|
-
max(e, t) {
|
|
816
|
-
return this._addCheck({
|
|
817
|
-
kind: "max",
|
|
818
|
-
value: e,
|
|
819
|
-
...h.errToObj(t)
|
|
820
|
-
});
|
|
821
|
-
}
|
|
822
|
-
length(e, t) {
|
|
823
|
-
return this._addCheck({
|
|
824
|
-
kind: "length",
|
|
825
|
-
value: e,
|
|
826
|
-
...h.errToObj(t)
|
|
827
|
-
});
|
|
828
|
-
}
|
|
829
|
-
/**
|
|
830
|
-
* @deprecated Use z.string().min(1) instead.
|
|
831
|
-
* @see {@link ZodString.min}
|
|
832
|
-
*/
|
|
833
|
-
nonempty(e) {
|
|
834
|
-
return this.min(1, h.errToObj(e));
|
|
835
|
-
}
|
|
836
|
-
trim() {
|
|
837
|
-
return new S({
|
|
838
|
-
...this._def,
|
|
839
|
-
checks: [...this._def.checks, { kind: "trim" }]
|
|
840
|
-
});
|
|
841
|
-
}
|
|
842
|
-
toLowerCase() {
|
|
843
|
-
return new S({
|
|
844
|
-
...this._def,
|
|
845
|
-
checks: [...this._def.checks, { kind: "toLowerCase" }]
|
|
846
|
-
});
|
|
847
|
-
}
|
|
848
|
-
toUpperCase() {
|
|
849
|
-
return new S({
|
|
850
|
-
...this._def,
|
|
851
|
-
checks: [...this._def.checks, { kind: "toUpperCase" }]
|
|
852
|
-
});
|
|
853
|
-
}
|
|
854
|
-
get isDatetime() {
|
|
855
|
-
return !!this._def.checks.find((e) => e.kind === "datetime");
|
|
856
|
-
}
|
|
857
|
-
get isDate() {
|
|
858
|
-
return !!this._def.checks.find((e) => e.kind === "date");
|
|
859
|
-
}
|
|
860
|
-
get isTime() {
|
|
861
|
-
return !!this._def.checks.find((e) => e.kind === "time");
|
|
862
|
-
}
|
|
863
|
-
get isDuration() {
|
|
864
|
-
return !!this._def.checks.find((e) => e.kind === "duration");
|
|
865
|
-
}
|
|
866
|
-
get isEmail() {
|
|
867
|
-
return !!this._def.checks.find((e) => e.kind === "email");
|
|
868
|
-
}
|
|
869
|
-
get isURL() {
|
|
870
|
-
return !!this._def.checks.find((e) => e.kind === "url");
|
|
871
|
-
}
|
|
872
|
-
get isEmoji() {
|
|
873
|
-
return !!this._def.checks.find((e) => e.kind === "emoji");
|
|
874
|
-
}
|
|
875
|
-
get isUUID() {
|
|
876
|
-
return !!this._def.checks.find((e) => e.kind === "uuid");
|
|
877
|
-
}
|
|
878
|
-
get isNANOID() {
|
|
879
|
-
return !!this._def.checks.find((e) => e.kind === "nanoid");
|
|
880
|
-
}
|
|
881
|
-
get isCUID() {
|
|
882
|
-
return !!this._def.checks.find((e) => e.kind === "cuid");
|
|
883
|
-
}
|
|
884
|
-
get isCUID2() {
|
|
885
|
-
return !!this._def.checks.find((e) => e.kind === "cuid2");
|
|
886
|
-
}
|
|
887
|
-
get isULID() {
|
|
888
|
-
return !!this._def.checks.find((e) => e.kind === "ulid");
|
|
889
|
-
}
|
|
890
|
-
get isIP() {
|
|
891
|
-
return !!this._def.checks.find((e) => e.kind === "ip");
|
|
892
|
-
}
|
|
893
|
-
get isBase64() {
|
|
894
|
-
return !!this._def.checks.find((e) => e.kind === "base64");
|
|
895
|
-
}
|
|
896
|
-
get minLength() {
|
|
897
|
-
let e = null;
|
|
898
|
-
for (const t of this._def.checks)
|
|
899
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
900
|
-
return e;
|
|
901
|
-
}
|
|
902
|
-
get maxLength() {
|
|
903
|
-
let e = null;
|
|
904
|
-
for (const t of this._def.checks)
|
|
905
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
906
|
-
return e;
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
S.create = (r) => {
|
|
910
|
-
var e;
|
|
911
|
-
return new S({
|
|
912
|
-
checks: [],
|
|
913
|
-
typeName: p.ZodString,
|
|
914
|
-
coerce: (e = r == null ? void 0 : r.coerce) !== null && e !== void 0 ? e : !1,
|
|
915
|
-
...v(r)
|
|
916
|
-
});
|
|
917
|
-
};
|
|
918
|
-
function rt(r, e) {
|
|
919
|
-
const t = (r.toString().split(".")[1] || "").length, s = (e.toString().split(".")[1] || "").length, n = t > s ? t : s, a = parseInt(r.toFixed(n).replace(".", "")), i = parseInt(e.toFixed(n).replace(".", ""));
|
|
920
|
-
return a % i / Math.pow(10, n);
|
|
921
|
-
}
|
|
922
|
-
class M extends _ {
|
|
923
|
-
constructor() {
|
|
924
|
-
super(...arguments), this.min = this.gte, this.max = this.lte, this.step = this.multipleOf;
|
|
925
|
-
}
|
|
926
|
-
_parse(e) {
|
|
927
|
-
if (this._def.coerce && (e.data = Number(e.data)), this._getType(e) !== f.number) {
|
|
928
|
-
const a = this._getOrReturnCtx(e);
|
|
929
|
-
return u(a, {
|
|
930
|
-
code: d.invalid_type,
|
|
931
|
-
expected: f.number,
|
|
932
|
-
received: a.parsedType
|
|
933
|
-
}), m;
|
|
934
|
-
}
|
|
935
|
-
let s;
|
|
936
|
-
const n = new b();
|
|
937
|
-
for (const a of this._def.checks)
|
|
938
|
-
a.kind === "int" ? g.isInteger(e.data) || (s = this._getOrReturnCtx(e, s), u(s, {
|
|
939
|
-
code: d.invalid_type,
|
|
940
|
-
expected: "integer",
|
|
941
|
-
received: "float",
|
|
942
|
-
message: a.message
|
|
943
|
-
}), n.dirty()) : a.kind === "min" ? (a.inclusive ? e.data < a.value : e.data <= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
944
|
-
code: d.too_small,
|
|
945
|
-
minimum: a.value,
|
|
946
|
-
type: "number",
|
|
947
|
-
inclusive: a.inclusive,
|
|
948
|
-
exact: !1,
|
|
949
|
-
message: a.message
|
|
950
|
-
}), n.dirty()) : a.kind === "max" ? (a.inclusive ? e.data > a.value : e.data >= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
951
|
-
code: d.too_big,
|
|
952
|
-
maximum: a.value,
|
|
953
|
-
type: "number",
|
|
954
|
-
inclusive: a.inclusive,
|
|
955
|
-
exact: !1,
|
|
956
|
-
message: a.message
|
|
957
|
-
}), n.dirty()) : a.kind === "multipleOf" ? rt(e.data, a.value) !== 0 && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
958
|
-
code: d.not_multiple_of,
|
|
959
|
-
multipleOf: a.value,
|
|
960
|
-
message: a.message
|
|
961
|
-
}), n.dirty()) : a.kind === "finite" ? Number.isFinite(e.data) || (s = this._getOrReturnCtx(e, s), u(s, {
|
|
962
|
-
code: d.not_finite,
|
|
963
|
-
message: a.message
|
|
964
|
-
}), n.dirty()) : g.assertNever(a);
|
|
965
|
-
return { status: n.value, value: e.data };
|
|
966
|
-
}
|
|
967
|
-
gte(e, t) {
|
|
968
|
-
return this.setLimit("min", e, !0, h.toString(t));
|
|
969
|
-
}
|
|
970
|
-
gt(e, t) {
|
|
971
|
-
return this.setLimit("min", e, !1, h.toString(t));
|
|
972
|
-
}
|
|
973
|
-
lte(e, t) {
|
|
974
|
-
return this.setLimit("max", e, !0, h.toString(t));
|
|
975
|
-
}
|
|
976
|
-
lt(e, t) {
|
|
977
|
-
return this.setLimit("max", e, !1, h.toString(t));
|
|
978
|
-
}
|
|
979
|
-
setLimit(e, t, s, n) {
|
|
980
|
-
return new M({
|
|
981
|
-
...this._def,
|
|
982
|
-
checks: [
|
|
983
|
-
...this._def.checks,
|
|
984
|
-
{
|
|
985
|
-
kind: e,
|
|
986
|
-
value: t,
|
|
987
|
-
inclusive: s,
|
|
988
|
-
message: h.toString(n)
|
|
989
|
-
}
|
|
990
|
-
]
|
|
991
|
-
});
|
|
992
|
-
}
|
|
993
|
-
_addCheck(e) {
|
|
994
|
-
return new M({
|
|
995
|
-
...this._def,
|
|
996
|
-
checks: [...this._def.checks, e]
|
|
997
|
-
});
|
|
998
|
-
}
|
|
999
|
-
int(e) {
|
|
1000
|
-
return this._addCheck({
|
|
1001
|
-
kind: "int",
|
|
1002
|
-
message: h.toString(e)
|
|
1003
|
-
});
|
|
1004
|
-
}
|
|
1005
|
-
positive(e) {
|
|
1006
|
-
return this._addCheck({
|
|
1007
|
-
kind: "min",
|
|
1008
|
-
value: 0,
|
|
1009
|
-
inclusive: !1,
|
|
1010
|
-
message: h.toString(e)
|
|
1011
|
-
});
|
|
1012
|
-
}
|
|
1013
|
-
negative(e) {
|
|
1014
|
-
return this._addCheck({
|
|
1015
|
-
kind: "max",
|
|
1016
|
-
value: 0,
|
|
1017
|
-
inclusive: !1,
|
|
1018
|
-
message: h.toString(e)
|
|
1019
|
-
});
|
|
1020
|
-
}
|
|
1021
|
-
nonpositive(e) {
|
|
1022
|
-
return this._addCheck({
|
|
1023
|
-
kind: "max",
|
|
1024
|
-
value: 0,
|
|
1025
|
-
inclusive: !0,
|
|
1026
|
-
message: h.toString(e)
|
|
1027
|
-
});
|
|
1028
|
-
}
|
|
1029
|
-
nonnegative(e) {
|
|
1030
|
-
return this._addCheck({
|
|
1031
|
-
kind: "min",
|
|
1032
|
-
value: 0,
|
|
1033
|
-
inclusive: !0,
|
|
1034
|
-
message: h.toString(e)
|
|
1035
|
-
});
|
|
1036
|
-
}
|
|
1037
|
-
multipleOf(e, t) {
|
|
1038
|
-
return this._addCheck({
|
|
1039
|
-
kind: "multipleOf",
|
|
1040
|
-
value: e,
|
|
1041
|
-
message: h.toString(t)
|
|
1042
|
-
});
|
|
1043
|
-
}
|
|
1044
|
-
finite(e) {
|
|
1045
|
-
return this._addCheck({
|
|
1046
|
-
kind: "finite",
|
|
1047
|
-
message: h.toString(e)
|
|
1048
|
-
});
|
|
1049
|
-
}
|
|
1050
|
-
safe(e) {
|
|
1051
|
-
return this._addCheck({
|
|
1052
|
-
kind: "min",
|
|
1053
|
-
inclusive: !0,
|
|
1054
|
-
value: Number.MIN_SAFE_INTEGER,
|
|
1055
|
-
message: h.toString(e)
|
|
1056
|
-
})._addCheck({
|
|
1057
|
-
kind: "max",
|
|
1058
|
-
inclusive: !0,
|
|
1059
|
-
value: Number.MAX_SAFE_INTEGER,
|
|
1060
|
-
message: h.toString(e)
|
|
1061
|
-
});
|
|
1062
|
-
}
|
|
1063
|
-
get minValue() {
|
|
1064
|
-
let e = null;
|
|
1065
|
-
for (const t of this._def.checks)
|
|
1066
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
1067
|
-
return e;
|
|
1068
|
-
}
|
|
1069
|
-
get maxValue() {
|
|
1070
|
-
let e = null;
|
|
1071
|
-
for (const t of this._def.checks)
|
|
1072
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
1073
|
-
return e;
|
|
1074
|
-
}
|
|
1075
|
-
get isInt() {
|
|
1076
|
-
return !!this._def.checks.find((e) => e.kind === "int" || e.kind === "multipleOf" && g.isInteger(e.value));
|
|
1077
|
-
}
|
|
1078
|
-
get isFinite() {
|
|
1079
|
-
let e = null, t = null;
|
|
1080
|
-
for (const s of this._def.checks) {
|
|
1081
|
-
if (s.kind === "finite" || s.kind === "int" || s.kind === "multipleOf")
|
|
1082
|
-
return !0;
|
|
1083
|
-
s.kind === "min" ? (t === null || s.value > t) && (t = s.value) : s.kind === "max" && (e === null || s.value < e) && (e = s.value);
|
|
1084
|
-
}
|
|
1085
|
-
return Number.isFinite(t) && Number.isFinite(e);
|
|
1086
|
-
}
|
|
1087
|
-
}
|
|
1088
|
-
M.create = (r) => new M({
|
|
1089
|
-
checks: [],
|
|
1090
|
-
typeName: p.ZodNumber,
|
|
1091
|
-
coerce: (r == null ? void 0 : r.coerce) || !1,
|
|
1092
|
-
...v(r)
|
|
1093
|
-
});
|
|
1094
|
-
class $ extends _ {
|
|
1095
|
-
constructor() {
|
|
1096
|
-
super(...arguments), this.min = this.gte, this.max = this.lte;
|
|
1097
|
-
}
|
|
1098
|
-
_parse(e) {
|
|
1099
|
-
if (this._def.coerce && (e.data = BigInt(e.data)), this._getType(e) !== f.bigint) {
|
|
1100
|
-
const a = this._getOrReturnCtx(e);
|
|
1101
|
-
return u(a, {
|
|
1102
|
-
code: d.invalid_type,
|
|
1103
|
-
expected: f.bigint,
|
|
1104
|
-
received: a.parsedType
|
|
1105
|
-
}), m;
|
|
1106
|
-
}
|
|
1107
|
-
let s;
|
|
1108
|
-
const n = new b();
|
|
1109
|
-
for (const a of this._def.checks)
|
|
1110
|
-
a.kind === "min" ? (a.inclusive ? e.data < a.value : e.data <= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
1111
|
-
code: d.too_small,
|
|
1112
|
-
type: "bigint",
|
|
1113
|
-
minimum: a.value,
|
|
1114
|
-
inclusive: a.inclusive,
|
|
1115
|
-
message: a.message
|
|
1116
|
-
}), n.dirty()) : a.kind === "max" ? (a.inclusive ? e.data > a.value : e.data >= a.value) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
1117
|
-
code: d.too_big,
|
|
1118
|
-
type: "bigint",
|
|
1119
|
-
maximum: a.value,
|
|
1120
|
-
inclusive: a.inclusive,
|
|
1121
|
-
message: a.message
|
|
1122
|
-
}), n.dirty()) : a.kind === "multipleOf" ? e.data % a.value !== BigInt(0) && (s = this._getOrReturnCtx(e, s), u(s, {
|
|
1123
|
-
code: d.not_multiple_of,
|
|
1124
|
-
multipleOf: a.value,
|
|
1125
|
-
message: a.message
|
|
1126
|
-
}), n.dirty()) : g.assertNever(a);
|
|
1127
|
-
return { status: n.value, value: e.data };
|
|
1128
|
-
}
|
|
1129
|
-
gte(e, t) {
|
|
1130
|
-
return this.setLimit("min", e, !0, h.toString(t));
|
|
1131
|
-
}
|
|
1132
|
-
gt(e, t) {
|
|
1133
|
-
return this.setLimit("min", e, !1, h.toString(t));
|
|
1134
|
-
}
|
|
1135
|
-
lte(e, t) {
|
|
1136
|
-
return this.setLimit("max", e, !0, h.toString(t));
|
|
1137
|
-
}
|
|
1138
|
-
lt(e, t) {
|
|
1139
|
-
return this.setLimit("max", e, !1, h.toString(t));
|
|
1140
|
-
}
|
|
1141
|
-
setLimit(e, t, s, n) {
|
|
1142
|
-
return new $({
|
|
1143
|
-
...this._def,
|
|
1144
|
-
checks: [
|
|
1145
|
-
...this._def.checks,
|
|
1146
|
-
{
|
|
1147
|
-
kind: e,
|
|
1148
|
-
value: t,
|
|
1149
|
-
inclusive: s,
|
|
1150
|
-
message: h.toString(n)
|
|
1151
|
-
}
|
|
1152
|
-
]
|
|
1153
|
-
});
|
|
1154
|
-
}
|
|
1155
|
-
_addCheck(e) {
|
|
1156
|
-
return new $({
|
|
1157
|
-
...this._def,
|
|
1158
|
-
checks: [...this._def.checks, e]
|
|
1159
|
-
});
|
|
1160
|
-
}
|
|
1161
|
-
positive(e) {
|
|
1162
|
-
return this._addCheck({
|
|
1163
|
-
kind: "min",
|
|
1164
|
-
value: BigInt(0),
|
|
1165
|
-
inclusive: !1,
|
|
1166
|
-
message: h.toString(e)
|
|
1167
|
-
});
|
|
1168
|
-
}
|
|
1169
|
-
negative(e) {
|
|
1170
|
-
return this._addCheck({
|
|
1171
|
-
kind: "max",
|
|
1172
|
-
value: BigInt(0),
|
|
1173
|
-
inclusive: !1,
|
|
1174
|
-
message: h.toString(e)
|
|
1175
|
-
});
|
|
1176
|
-
}
|
|
1177
|
-
nonpositive(e) {
|
|
1178
|
-
return this._addCheck({
|
|
1179
|
-
kind: "max",
|
|
1180
|
-
value: BigInt(0),
|
|
1181
|
-
inclusive: !0,
|
|
1182
|
-
message: h.toString(e)
|
|
1183
|
-
});
|
|
1184
|
-
}
|
|
1185
|
-
nonnegative(e) {
|
|
1186
|
-
return this._addCheck({
|
|
1187
|
-
kind: "min",
|
|
1188
|
-
value: BigInt(0),
|
|
1189
|
-
inclusive: !0,
|
|
1190
|
-
message: h.toString(e)
|
|
1191
|
-
});
|
|
1192
|
-
}
|
|
1193
|
-
multipleOf(e, t) {
|
|
1194
|
-
return this._addCheck({
|
|
1195
|
-
kind: "multipleOf",
|
|
1196
|
-
value: e,
|
|
1197
|
-
message: h.toString(t)
|
|
1198
|
-
});
|
|
1199
|
-
}
|
|
1200
|
-
get minValue() {
|
|
1201
|
-
let e = null;
|
|
1202
|
-
for (const t of this._def.checks)
|
|
1203
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
1204
|
-
return e;
|
|
1205
|
-
}
|
|
1206
|
-
get maxValue() {
|
|
1207
|
-
let e = null;
|
|
1208
|
-
for (const t of this._def.checks)
|
|
1209
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
1210
|
-
return e;
|
|
1211
|
-
}
|
|
1212
|
-
}
|
|
1213
|
-
$.create = (r) => {
|
|
1214
|
-
var e;
|
|
1215
|
-
return new $({
|
|
1216
|
-
checks: [],
|
|
1217
|
-
typeName: p.ZodBigInt,
|
|
1218
|
-
coerce: (e = r == null ? void 0 : r.coerce) !== null && e !== void 0 ? e : !1,
|
|
1219
|
-
...v(r)
|
|
1220
|
-
});
|
|
1221
|
-
};
|
|
1222
|
-
class K extends _ {
|
|
1223
|
-
_parse(e) {
|
|
1224
|
-
if (this._def.coerce && (e.data = !!e.data), this._getType(e) !== f.boolean) {
|
|
1225
|
-
const s = this._getOrReturnCtx(e);
|
|
1226
|
-
return u(s, {
|
|
1227
|
-
code: d.invalid_type,
|
|
1228
|
-
expected: f.boolean,
|
|
1229
|
-
received: s.parsedType
|
|
1230
|
-
}), m;
|
|
1231
|
-
}
|
|
1232
|
-
return w(e.data);
|
|
1233
|
-
}
|
|
1234
|
-
}
|
|
1235
|
-
K.create = (r) => new K({
|
|
1236
|
-
typeName: p.ZodBoolean,
|
|
1237
|
-
coerce: (r == null ? void 0 : r.coerce) || !1,
|
|
1238
|
-
...v(r)
|
|
1239
|
-
});
|
|
1240
|
-
class L extends _ {
|
|
1241
|
-
_parse(e) {
|
|
1242
|
-
if (this._def.coerce && (e.data = new Date(e.data)), this._getType(e) !== f.date) {
|
|
1243
|
-
const a = this._getOrReturnCtx(e);
|
|
1244
|
-
return u(a, {
|
|
1245
|
-
code: d.invalid_type,
|
|
1246
|
-
expected: f.date,
|
|
1247
|
-
received: a.parsedType
|
|
1248
|
-
}), m;
|
|
1249
|
-
}
|
|
1250
|
-
if (isNaN(e.data.getTime())) {
|
|
1251
|
-
const a = this._getOrReturnCtx(e);
|
|
1252
|
-
return u(a, {
|
|
1253
|
-
code: d.invalid_date
|
|
1254
|
-
}), m;
|
|
1255
|
-
}
|
|
1256
|
-
const s = new b();
|
|
1257
|
-
let n;
|
|
1258
|
-
for (const a of this._def.checks)
|
|
1259
|
-
a.kind === "min" ? e.data.getTime() < a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
1260
|
-
code: d.too_small,
|
|
1261
|
-
message: a.message,
|
|
1262
|
-
inclusive: !0,
|
|
1263
|
-
exact: !1,
|
|
1264
|
-
minimum: a.value,
|
|
1265
|
-
type: "date"
|
|
1266
|
-
}), s.dirty()) : a.kind === "max" ? e.data.getTime() > a.value && (n = this._getOrReturnCtx(e, n), u(n, {
|
|
1267
|
-
code: d.too_big,
|
|
1268
|
-
message: a.message,
|
|
1269
|
-
inclusive: !0,
|
|
1270
|
-
exact: !1,
|
|
1271
|
-
maximum: a.value,
|
|
1272
|
-
type: "date"
|
|
1273
|
-
}), s.dirty()) : g.assertNever(a);
|
|
1274
|
-
return {
|
|
1275
|
-
status: s.value,
|
|
1276
|
-
value: new Date(e.data.getTime())
|
|
1277
|
-
};
|
|
1278
|
-
}
|
|
1279
|
-
_addCheck(e) {
|
|
1280
|
-
return new L({
|
|
1281
|
-
...this._def,
|
|
1282
|
-
checks: [...this._def.checks, e]
|
|
1283
|
-
});
|
|
1284
|
-
}
|
|
1285
|
-
min(e, t) {
|
|
1286
|
-
return this._addCheck({
|
|
1287
|
-
kind: "min",
|
|
1288
|
-
value: e.getTime(),
|
|
1289
|
-
message: h.toString(t)
|
|
1290
|
-
});
|
|
1291
|
-
}
|
|
1292
|
-
max(e, t) {
|
|
1293
|
-
return this._addCheck({
|
|
1294
|
-
kind: "max",
|
|
1295
|
-
value: e.getTime(),
|
|
1296
|
-
message: h.toString(t)
|
|
1297
|
-
});
|
|
1298
|
-
}
|
|
1299
|
-
get minDate() {
|
|
1300
|
-
let e = null;
|
|
1301
|
-
for (const t of this._def.checks)
|
|
1302
|
-
t.kind === "min" && (e === null || t.value > e) && (e = t.value);
|
|
1303
|
-
return e != null ? new Date(e) : null;
|
|
1304
|
-
}
|
|
1305
|
-
get maxDate() {
|
|
1306
|
-
let e = null;
|
|
1307
|
-
for (const t of this._def.checks)
|
|
1308
|
-
t.kind === "max" && (e === null || t.value < e) && (e = t.value);
|
|
1309
|
-
return e != null ? new Date(e) : null;
|
|
1310
|
-
}
|
|
1311
|
-
}
|
|
1312
|
-
L.create = (r) => new L({
|
|
1313
|
-
checks: [],
|
|
1314
|
-
coerce: (r == null ? void 0 : r.coerce) || !1,
|
|
1315
|
-
typeName: p.ZodDate,
|
|
1316
|
-
...v(r)
|
|
1317
|
-
});
|
|
1318
|
-
class pe extends _ {
|
|
1319
|
-
_parse(e) {
|
|
1320
|
-
if (this._getType(e) !== f.symbol) {
|
|
1321
|
-
const s = this._getOrReturnCtx(e);
|
|
1322
|
-
return u(s, {
|
|
1323
|
-
code: d.invalid_type,
|
|
1324
|
-
expected: f.symbol,
|
|
1325
|
-
received: s.parsedType
|
|
1326
|
-
}), m;
|
|
1327
|
-
}
|
|
1328
|
-
return w(e.data);
|
|
1329
|
-
}
|
|
1330
|
-
}
|
|
1331
|
-
pe.create = (r) => new pe({
|
|
1332
|
-
typeName: p.ZodSymbol,
|
|
1333
|
-
...v(r)
|
|
1334
|
-
});
|
|
1335
|
-
class F extends _ {
|
|
1336
|
-
_parse(e) {
|
|
1337
|
-
if (this._getType(e) !== f.undefined) {
|
|
1338
|
-
const s = this._getOrReturnCtx(e);
|
|
1339
|
-
return u(s, {
|
|
1340
|
-
code: d.invalid_type,
|
|
1341
|
-
expected: f.undefined,
|
|
1342
|
-
received: s.parsedType
|
|
1343
|
-
}), m;
|
|
1344
|
-
}
|
|
1345
|
-
return w(e.data);
|
|
1346
|
-
}
|
|
1347
|
-
}
|
|
1348
|
-
F.create = (r) => new F({
|
|
1349
|
-
typeName: p.ZodUndefined,
|
|
1350
|
-
...v(r)
|
|
1351
|
-
});
|
|
1352
|
-
class ee extends _ {
|
|
1353
|
-
_parse(e) {
|
|
1354
|
-
if (this._getType(e) !== f.null) {
|
|
1355
|
-
const s = this._getOrReturnCtx(e);
|
|
1356
|
-
return u(s, {
|
|
1357
|
-
code: d.invalid_type,
|
|
1358
|
-
expected: f.null,
|
|
1359
|
-
received: s.parsedType
|
|
1360
|
-
}), m;
|
|
1361
|
-
}
|
|
1362
|
-
return w(e.data);
|
|
1363
|
-
}
|
|
1364
|
-
}
|
|
1365
|
-
ee.create = (r) => new ee({
|
|
1366
|
-
typeName: p.ZodNull,
|
|
1367
|
-
...v(r)
|
|
1368
|
-
});
|
|
1369
|
-
class Y extends _ {
|
|
1370
|
-
constructor() {
|
|
1371
|
-
super(...arguments), this._any = !0;
|
|
1372
|
-
}
|
|
1373
|
-
_parse(e) {
|
|
1374
|
-
return w(e.data);
|
|
1375
|
-
}
|
|
1376
|
-
}
|
|
1377
|
-
Y.create = (r) => new Y({
|
|
1378
|
-
typeName: p.ZodAny,
|
|
1379
|
-
...v(r)
|
|
1380
|
-
});
|
|
1381
|
-
class D extends _ {
|
|
1382
|
-
constructor() {
|
|
1383
|
-
super(...arguments), this._unknown = !0;
|
|
1384
|
-
}
|
|
1385
|
-
_parse(e) {
|
|
1386
|
-
return w(e.data);
|
|
1387
|
-
}
|
|
1388
|
-
}
|
|
1389
|
-
D.create = (r) => new D({
|
|
1390
|
-
typeName: p.ZodUnknown,
|
|
1391
|
-
...v(r)
|
|
1392
|
-
});
|
|
1393
|
-
class j extends _ {
|
|
1394
|
-
_parse(e) {
|
|
1395
|
-
const t = this._getOrReturnCtx(e);
|
|
1396
|
-
return u(t, {
|
|
1397
|
-
code: d.invalid_type,
|
|
1398
|
-
expected: f.never,
|
|
1399
|
-
received: t.parsedType
|
|
1400
|
-
}), m;
|
|
1401
|
-
}
|
|
1402
|
-
}
|
|
1403
|
-
j.create = (r) => new j({
|
|
1404
|
-
typeName: p.ZodNever,
|
|
1405
|
-
...v(r)
|
|
1406
|
-
});
|
|
1407
|
-
class me extends _ {
|
|
1408
|
-
_parse(e) {
|
|
1409
|
-
if (this._getType(e) !== f.undefined) {
|
|
1410
|
-
const s = this._getOrReturnCtx(e);
|
|
1411
|
-
return u(s, {
|
|
1412
|
-
code: d.invalid_type,
|
|
1413
|
-
expected: f.void,
|
|
1414
|
-
received: s.parsedType
|
|
1415
|
-
}), m;
|
|
1416
|
-
}
|
|
1417
|
-
return w(e.data);
|
|
1418
|
-
}
|
|
1419
|
-
}
|
|
1420
|
-
me.create = (r) => new me({
|
|
1421
|
-
typeName: p.ZodVoid,
|
|
1422
|
-
...v(r)
|
|
1423
|
-
});
|
|
1424
|
-
class C extends _ {
|
|
1425
|
-
_parse(e) {
|
|
1426
|
-
const { ctx: t, status: s } = this._processInputParams(e), n = this._def;
|
|
1427
|
-
if (t.parsedType !== f.array)
|
|
1428
|
-
return u(t, {
|
|
1429
|
-
code: d.invalid_type,
|
|
1430
|
-
expected: f.array,
|
|
1431
|
-
received: t.parsedType
|
|
1432
|
-
}), m;
|
|
1433
|
-
if (n.exactLength !== null) {
|
|
1434
|
-
const i = t.data.length > n.exactLength.value, o = t.data.length < n.exactLength.value;
|
|
1435
|
-
(i || o) && (u(t, {
|
|
1436
|
-
code: i ? d.too_big : d.too_small,
|
|
1437
|
-
minimum: o ? n.exactLength.value : void 0,
|
|
1438
|
-
maximum: i ? n.exactLength.value : void 0,
|
|
1439
|
-
type: "array",
|
|
1440
|
-
inclusive: !0,
|
|
1441
|
-
exact: !0,
|
|
1442
|
-
message: n.exactLength.message
|
|
1443
|
-
}), s.dirty());
|
|
1444
|
-
}
|
|
1445
|
-
if (n.minLength !== null && t.data.length < n.minLength.value && (u(t, {
|
|
1446
|
-
code: d.too_small,
|
|
1447
|
-
minimum: n.minLength.value,
|
|
1448
|
-
type: "array",
|
|
1449
|
-
inclusive: !0,
|
|
1450
|
-
exact: !1,
|
|
1451
|
-
message: n.minLength.message
|
|
1452
|
-
}), s.dirty()), n.maxLength !== null && t.data.length > n.maxLength.value && (u(t, {
|
|
1453
|
-
code: d.too_big,
|
|
1454
|
-
maximum: n.maxLength.value,
|
|
1455
|
-
type: "array",
|
|
1456
|
-
inclusive: !0,
|
|
1457
|
-
exact: !1,
|
|
1458
|
-
message: n.maxLength.message
|
|
1459
|
-
}), s.dirty()), t.common.async)
|
|
1460
|
-
return Promise.all([...t.data].map((i, o) => n.type._parseAsync(new E(t, i, t.path, o)))).then((i) => b.mergeArray(s, i));
|
|
1461
|
-
const a = [...t.data].map((i, o) => n.type._parseSync(new E(t, i, t.path, o)));
|
|
1462
|
-
return b.mergeArray(s, a);
|
|
1463
|
-
}
|
|
1464
|
-
get element() {
|
|
1465
|
-
return this._def.type;
|
|
1466
|
-
}
|
|
1467
|
-
min(e, t) {
|
|
1468
|
-
return new C({
|
|
1469
|
-
...this._def,
|
|
1470
|
-
minLength: { value: e, message: h.toString(t) }
|
|
1471
|
-
});
|
|
1472
|
-
}
|
|
1473
|
-
max(e, t) {
|
|
1474
|
-
return new C({
|
|
1475
|
-
...this._def,
|
|
1476
|
-
maxLength: { value: e, message: h.toString(t) }
|
|
1477
|
-
});
|
|
1478
|
-
}
|
|
1479
|
-
length(e, t) {
|
|
1480
|
-
return new C({
|
|
1481
|
-
...this._def,
|
|
1482
|
-
exactLength: { value: e, message: h.toString(t) }
|
|
1483
|
-
});
|
|
1484
|
-
}
|
|
1485
|
-
nonempty(e) {
|
|
1486
|
-
return this.min(1, e);
|
|
1487
|
-
}
|
|
1488
|
-
}
|
|
1489
|
-
C.create = (r, e) => new C({
|
|
1490
|
-
type: r,
|
|
1491
|
-
minLength: null,
|
|
1492
|
-
maxLength: null,
|
|
1493
|
-
exactLength: null,
|
|
1494
|
-
typeName: p.ZodArray,
|
|
1495
|
-
...v(e)
|
|
1496
|
-
});
|
|
1497
|
-
function U(r) {
|
|
1498
|
-
if (r instanceof x) {
|
|
1499
|
-
const e = {};
|
|
1500
|
-
for (const t in r.shape) {
|
|
1501
|
-
const s = r.shape[t];
|
|
1502
|
-
e[t] = O.create(U(s));
|
|
1503
|
-
}
|
|
1504
|
-
return new x({
|
|
1505
|
-
...r._def,
|
|
1506
|
-
shape: () => e
|
|
1507
|
-
});
|
|
1508
|
-
} else
|
|
1509
|
-
return r instanceof C ? new C({
|
|
1510
|
-
...r._def,
|
|
1511
|
-
type: U(r.element)
|
|
1512
|
-
}) : r instanceof O ? O.create(U(r.unwrap())) : r instanceof V ? V.create(U(r.unwrap())) : r instanceof R ? R.create(r.items.map((e) => U(e))) : r;
|
|
1513
|
-
}
|
|
1514
|
-
class x extends _ {
|
|
1515
|
-
constructor() {
|
|
1516
|
-
super(...arguments), this._cached = null, this.nonstrict = this.passthrough, this.augment = this.extend;
|
|
1517
|
-
}
|
|
1518
|
-
_getCached() {
|
|
1519
|
-
if (this._cached !== null)
|
|
1520
|
-
return this._cached;
|
|
1521
|
-
const e = this._def.shape(), t = g.objectKeys(e);
|
|
1522
|
-
return this._cached = { shape: e, keys: t };
|
|
1523
|
-
}
|
|
1524
|
-
_parse(e) {
|
|
1525
|
-
if (this._getType(e) !== f.object) {
|
|
1526
|
-
const c = this._getOrReturnCtx(e);
|
|
1527
|
-
return u(c, {
|
|
1528
|
-
code: d.invalid_type,
|
|
1529
|
-
expected: f.object,
|
|
1530
|
-
received: c.parsedType
|
|
1531
|
-
}), m;
|
|
1532
|
-
}
|
|
1533
|
-
const { status: s, ctx: n } = this._processInputParams(e), { shape: a, keys: i } = this._getCached(), o = [];
|
|
1534
|
-
if (!(this._def.catchall instanceof j && this._def.unknownKeys === "strip"))
|
|
1535
|
-
for (const c in n.data)
|
|
1536
|
-
i.includes(c) || o.push(c);
|
|
1537
|
-
const l = [];
|
|
1538
|
-
for (const c of i) {
|
|
1539
|
-
const y = a[c], Z = n.data[c];
|
|
1540
|
-
l.push({
|
|
1541
|
-
key: { status: "valid", value: c },
|
|
1542
|
-
value: y._parse(new E(n, Z, n.path, c)),
|
|
1543
|
-
alwaysSet: c in n.data
|
|
1544
|
-
});
|
|
1545
|
-
}
|
|
1546
|
-
if (this._def.catchall instanceof j) {
|
|
1547
|
-
const c = this._def.unknownKeys;
|
|
1548
|
-
if (c === "passthrough")
|
|
1549
|
-
for (const y of o)
|
|
1550
|
-
l.push({
|
|
1551
|
-
key: { status: "valid", value: y },
|
|
1552
|
-
value: { status: "valid", value: n.data[y] }
|
|
1553
|
-
});
|
|
1554
|
-
else if (c === "strict")
|
|
1555
|
-
o.length > 0 && (u(n, {
|
|
1556
|
-
code: d.unrecognized_keys,
|
|
1557
|
-
keys: o
|
|
1558
|
-
}), s.dirty());
|
|
1559
|
-
else if (c !== "strip")
|
|
1560
|
-
throw new Error("Internal ZodObject error: invalid unknownKeys value.");
|
|
1561
|
-
} else {
|
|
1562
|
-
const c = this._def.catchall;
|
|
1563
|
-
for (const y of o) {
|
|
1564
|
-
const Z = n.data[y];
|
|
1565
|
-
l.push({
|
|
1566
|
-
key: { status: "valid", value: y },
|
|
1567
|
-
value: c._parse(
|
|
1568
|
-
new E(n, Z, n.path, y)
|
|
1569
|
-
//, ctx.child(key), value, getParsedType(value)
|
|
1570
|
-
),
|
|
1571
|
-
alwaysSet: y in n.data
|
|
1572
|
-
});
|
|
1573
|
-
}
|
|
1574
|
-
}
|
|
1575
|
-
return n.common.async ? Promise.resolve().then(async () => {
|
|
1576
|
-
const c = [];
|
|
1577
|
-
for (const y of l) {
|
|
1578
|
-
const Z = await y.key, Se = await y.value;
|
|
1579
|
-
c.push({
|
|
1580
|
-
key: Z,
|
|
1581
|
-
value: Se,
|
|
1582
|
-
alwaysSet: y.alwaysSet
|
|
1583
|
-
});
|
|
1584
|
-
}
|
|
1585
|
-
return c;
|
|
1586
|
-
}).then((c) => b.mergeObjectSync(s, c)) : b.mergeObjectSync(s, l);
|
|
1587
|
-
}
|
|
1588
|
-
get shape() {
|
|
1589
|
-
return this._def.shape();
|
|
1590
|
-
}
|
|
1591
|
-
strict(e) {
|
|
1592
|
-
return h.errToObj, new x({
|
|
1593
|
-
...this._def,
|
|
1594
|
-
unknownKeys: "strict",
|
|
1595
|
-
...e !== void 0 ? {
|
|
1596
|
-
errorMap: (t, s) => {
|
|
1597
|
-
var n, a, i, o;
|
|
1598
|
-
const l = (i = (a = (n = this._def).errorMap) === null || a === void 0 ? void 0 : a.call(n, t, s).message) !== null && i !== void 0 ? i : s.defaultError;
|
|
1599
|
-
return t.code === "unrecognized_keys" ? {
|
|
1600
|
-
message: (o = h.errToObj(e).message) !== null && o !== void 0 ? o : l
|
|
1601
|
-
} : {
|
|
1602
|
-
message: l
|
|
1603
|
-
};
|
|
1604
|
-
}
|
|
1605
|
-
} : {}
|
|
1606
|
-
});
|
|
1607
|
-
}
|
|
1608
|
-
strip() {
|
|
1609
|
-
return new x({
|
|
1610
|
-
...this._def,
|
|
1611
|
-
unknownKeys: "strip"
|
|
1612
|
-
});
|
|
1613
|
-
}
|
|
1614
|
-
passthrough() {
|
|
1615
|
-
return new x({
|
|
1616
|
-
...this._def,
|
|
1617
|
-
unknownKeys: "passthrough"
|
|
1618
|
-
});
|
|
1619
|
-
}
|
|
1620
|
-
// const AugmentFactory =
|
|
1621
|
-
// <Def extends ZodObjectDef>(def: Def) =>
|
|
1622
|
-
// <Augmentation extends ZodRawShape>(
|
|
1623
|
-
// augmentation: Augmentation
|
|
1624
|
-
// ): ZodObject<
|
|
1625
|
-
// extendShape<ReturnType<Def["shape"]>, Augmentation>,
|
|
1626
|
-
// Def["unknownKeys"],
|
|
1627
|
-
// Def["catchall"]
|
|
1628
|
-
// > => {
|
|
1629
|
-
// return new ZodObject({
|
|
1630
|
-
// ...def,
|
|
1631
|
-
// shape: () => ({
|
|
1632
|
-
// ...def.shape(),
|
|
1633
|
-
// ...augmentation,
|
|
1634
|
-
// }),
|
|
1635
|
-
// }) as any;
|
|
1636
|
-
// };
|
|
1637
|
-
extend(e) {
|
|
1638
|
-
return new x({
|
|
1639
|
-
...this._def,
|
|
1640
|
-
shape: () => ({
|
|
1641
|
-
...this._def.shape(),
|
|
1642
|
-
...e
|
|
1643
|
-
})
|
|
1644
|
-
});
|
|
1645
|
-
}
|
|
1646
|
-
/**
|
|
1647
|
-
* Prior to zod@1.0.12 there was a bug in the
|
|
1648
|
-
* inferred type of merged objects. Please
|
|
1649
|
-
* upgrade if you are experiencing issues.
|
|
1650
|
-
*/
|
|
1651
|
-
merge(e) {
|
|
1652
|
-
return new x({
|
|
1653
|
-
unknownKeys: e._def.unknownKeys,
|
|
1654
|
-
catchall: e._def.catchall,
|
|
1655
|
-
shape: () => ({
|
|
1656
|
-
...this._def.shape(),
|
|
1657
|
-
...e._def.shape()
|
|
1658
|
-
}),
|
|
1659
|
-
typeName: p.ZodObject
|
|
1660
|
-
});
|
|
1661
|
-
}
|
|
1662
|
-
// merge<
|
|
1663
|
-
// Incoming extends AnyZodObject,
|
|
1664
|
-
// Augmentation extends Incoming["shape"],
|
|
1665
|
-
// NewOutput extends {
|
|
1666
|
-
// [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation
|
|
1667
|
-
// ? Augmentation[k]["_output"]
|
|
1668
|
-
// : k extends keyof Output
|
|
1669
|
-
// ? Output[k]
|
|
1670
|
-
// : never;
|
|
1671
|
-
// },
|
|
1672
|
-
// NewInput extends {
|
|
1673
|
-
// [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation
|
|
1674
|
-
// ? Augmentation[k]["_input"]
|
|
1675
|
-
// : k extends keyof Input
|
|
1676
|
-
// ? Input[k]
|
|
1677
|
-
// : never;
|
|
1678
|
-
// }
|
|
1679
|
-
// >(
|
|
1680
|
-
// merging: Incoming
|
|
1681
|
-
// ): ZodObject<
|
|
1682
|
-
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
|
|
1683
|
-
// Incoming["_def"]["unknownKeys"],
|
|
1684
|
-
// Incoming["_def"]["catchall"],
|
|
1685
|
-
// NewOutput,
|
|
1686
|
-
// NewInput
|
|
1687
|
-
// > {
|
|
1688
|
-
// const merged: any = new ZodObject({
|
|
1689
|
-
// unknownKeys: merging._def.unknownKeys,
|
|
1690
|
-
// catchall: merging._def.catchall,
|
|
1691
|
-
// shape: () =>
|
|
1692
|
-
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
|
|
1693
|
-
// typeName: ZodFirstPartyTypeKind.ZodObject,
|
|
1694
|
-
// }) as any;
|
|
1695
|
-
// return merged;
|
|
1696
|
-
// }
|
|
1697
|
-
setKey(e, t) {
|
|
1698
|
-
return this.augment({ [e]: t });
|
|
1699
|
-
}
|
|
1700
|
-
// merge<Incoming extends AnyZodObject>(
|
|
1701
|
-
// merging: Incoming
|
|
1702
|
-
// ): //ZodObject<T & Incoming["_shape"], UnknownKeys, Catchall> = (merging) => {
|
|
1703
|
-
// ZodObject<
|
|
1704
|
-
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
|
|
1705
|
-
// Incoming["_def"]["unknownKeys"],
|
|
1706
|
-
// Incoming["_def"]["catchall"]
|
|
1707
|
-
// > {
|
|
1708
|
-
// // const mergedShape = objectUtil.mergeShapes(
|
|
1709
|
-
// // this._def.shape(),
|
|
1710
|
-
// // merging._def.shape()
|
|
1711
|
-
// // );
|
|
1712
|
-
// const merged: any = new ZodObject({
|
|
1713
|
-
// unknownKeys: merging._def.unknownKeys,
|
|
1714
|
-
// catchall: merging._def.catchall,
|
|
1715
|
-
// shape: () =>
|
|
1716
|
-
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
|
|
1717
|
-
// typeName: ZodFirstPartyTypeKind.ZodObject,
|
|
1718
|
-
// }) as any;
|
|
1719
|
-
// return merged;
|
|
1720
|
-
// }
|
|
1721
|
-
catchall(e) {
|
|
1722
|
-
return new x({
|
|
1723
|
-
...this._def,
|
|
1724
|
-
catchall: e
|
|
1725
|
-
});
|
|
1726
|
-
}
|
|
1727
|
-
pick(e) {
|
|
1728
|
-
const t = {};
|
|
1729
|
-
return g.objectKeys(e).forEach((s) => {
|
|
1730
|
-
e[s] && this.shape[s] && (t[s] = this.shape[s]);
|
|
1731
|
-
}), new x({
|
|
1732
|
-
...this._def,
|
|
1733
|
-
shape: () => t
|
|
1734
|
-
});
|
|
1735
|
-
}
|
|
1736
|
-
omit(e) {
|
|
1737
|
-
const t = {};
|
|
1738
|
-
return g.objectKeys(this.shape).forEach((s) => {
|
|
1739
|
-
e[s] || (t[s] = this.shape[s]);
|
|
1740
|
-
}), new x({
|
|
1741
|
-
...this._def,
|
|
1742
|
-
shape: () => t
|
|
1743
|
-
});
|
|
1744
|
-
}
|
|
1745
|
-
/**
|
|
1746
|
-
* @deprecated
|
|
1747
|
-
*/
|
|
1748
|
-
deepPartial() {
|
|
1749
|
-
return U(this);
|
|
1750
|
-
}
|
|
1751
|
-
partial(e) {
|
|
1752
|
-
const t = {};
|
|
1753
|
-
return g.objectKeys(this.shape).forEach((s) => {
|
|
1754
|
-
const n = this.shape[s];
|
|
1755
|
-
e && !e[s] ? t[s] = n : t[s] = n.optional();
|
|
1756
|
-
}), new x({
|
|
1757
|
-
...this._def,
|
|
1758
|
-
shape: () => t
|
|
1759
|
-
});
|
|
1760
|
-
}
|
|
1761
|
-
required(e) {
|
|
1762
|
-
const t = {};
|
|
1763
|
-
return g.objectKeys(this.shape).forEach((s) => {
|
|
1764
|
-
if (e && !e[s])
|
|
1765
|
-
t[s] = this.shape[s];
|
|
1766
|
-
else {
|
|
1767
|
-
let a = this.shape[s];
|
|
1768
|
-
for (; a instanceof O; )
|
|
1769
|
-
a = a._def.innerType;
|
|
1770
|
-
t[s] = a;
|
|
1771
|
-
}
|
|
1772
|
-
}), new x({
|
|
1773
|
-
...this._def,
|
|
1774
|
-
shape: () => t
|
|
1775
|
-
});
|
|
1776
|
-
}
|
|
1777
|
-
keyof() {
|
|
1778
|
-
return Ae(g.objectKeys(this.shape));
|
|
1779
|
-
}
|
|
1780
|
-
}
|
|
1781
|
-
x.create = (r, e) => new x({
|
|
1782
|
-
shape: () => r,
|
|
1783
|
-
unknownKeys: "strip",
|
|
1784
|
-
catchall: j.create(),
|
|
1785
|
-
typeName: p.ZodObject,
|
|
1786
|
-
...v(e)
|
|
1787
|
-
});
|
|
1788
|
-
x.strictCreate = (r, e) => new x({
|
|
1789
|
-
shape: () => r,
|
|
1790
|
-
unknownKeys: "strict",
|
|
1791
|
-
catchall: j.create(),
|
|
1792
|
-
typeName: p.ZodObject,
|
|
1793
|
-
...v(e)
|
|
1794
|
-
});
|
|
1795
|
-
x.lazycreate = (r, e) => new x({
|
|
1796
|
-
shape: r,
|
|
1797
|
-
unknownKeys: "strip",
|
|
1798
|
-
catchall: j.create(),
|
|
1799
|
-
typeName: p.ZodObject,
|
|
1800
|
-
...v(e)
|
|
1801
|
-
});
|
|
1802
|
-
class te extends _ {
|
|
1803
|
-
_parse(e) {
|
|
1804
|
-
const { ctx: t } = this._processInputParams(e), s = this._def.options;
|
|
1805
|
-
function n(a) {
|
|
1806
|
-
for (const o of a)
|
|
1807
|
-
if (o.result.status === "valid")
|
|
1808
|
-
return o.result;
|
|
1809
|
-
for (const o of a)
|
|
1810
|
-
if (o.result.status === "dirty")
|
|
1811
|
-
return t.common.issues.push(...o.ctx.common.issues), o.result;
|
|
1812
|
-
const i = a.map((o) => new T(o.ctx.common.issues));
|
|
1813
|
-
return u(t, {
|
|
1814
|
-
code: d.invalid_union,
|
|
1815
|
-
unionErrors: i
|
|
1816
|
-
}), m;
|
|
1817
|
-
}
|
|
1818
|
-
if (t.common.async)
|
|
1819
|
-
return Promise.all(s.map(async (a) => {
|
|
1820
|
-
const i = {
|
|
1821
|
-
...t,
|
|
1822
|
-
common: {
|
|
1823
|
-
...t.common,
|
|
1824
|
-
issues: []
|
|
1825
|
-
},
|
|
1826
|
-
parent: null
|
|
1827
|
-
};
|
|
1828
|
-
return {
|
|
1829
|
-
result: await a._parseAsync({
|
|
1830
|
-
data: t.data,
|
|
1831
|
-
path: t.path,
|
|
1832
|
-
parent: i
|
|
1833
|
-
}),
|
|
1834
|
-
ctx: i
|
|
1835
|
-
};
|
|
1836
|
-
})).then(n);
|
|
1837
|
-
{
|
|
1838
|
-
let a;
|
|
1839
|
-
const i = [];
|
|
1840
|
-
for (const l of s) {
|
|
1841
|
-
const c = {
|
|
1842
|
-
...t,
|
|
1843
|
-
common: {
|
|
1844
|
-
...t.common,
|
|
1845
|
-
issues: []
|
|
1846
|
-
},
|
|
1847
|
-
parent: null
|
|
1848
|
-
}, y = l._parseSync({
|
|
1849
|
-
data: t.data,
|
|
1850
|
-
path: t.path,
|
|
1851
|
-
parent: c
|
|
1852
|
-
});
|
|
1853
|
-
if (y.status === "valid")
|
|
1854
|
-
return y;
|
|
1855
|
-
y.status === "dirty" && !a && (a = { result: y, ctx: c }), c.common.issues.length && i.push(c.common.issues);
|
|
1856
|
-
}
|
|
1857
|
-
if (a)
|
|
1858
|
-
return t.common.issues.push(...a.ctx.common.issues), a.result;
|
|
1859
|
-
const o = i.map((l) => new T(l));
|
|
1860
|
-
return u(t, {
|
|
1861
|
-
code: d.invalid_union,
|
|
1862
|
-
unionErrors: o
|
|
1863
|
-
}), m;
|
|
1864
|
-
}
|
|
1865
|
-
}
|
|
1866
|
-
get options() {
|
|
1867
|
-
return this._def.options;
|
|
1868
|
-
}
|
|
1869
|
-
}
|
|
1870
|
-
te.create = (r, e) => new te({
|
|
1871
|
-
options: r,
|
|
1872
|
-
typeName: p.ZodUnion,
|
|
1873
|
-
...v(e)
|
|
1874
|
-
});
|
|
1875
|
-
const I = (r) => r instanceof ne ? I(r.schema) : r instanceof N ? I(r.innerType()) : r instanceof ae ? [r.value] : r instanceof P ? r.options : r instanceof ie ? g.objectValues(r.enum) : r instanceof oe ? I(r._def.innerType) : r instanceof F ? [void 0] : r instanceof ee ? [null] : r instanceof O ? [void 0, ...I(r.unwrap())] : r instanceof V ? [null, ...I(r.unwrap())] : r instanceof Ze || r instanceof ce ? I(r.unwrap()) : r instanceof de ? I(r._def.innerType) : [];
|
|
1876
|
-
class _e extends _ {
|
|
1877
|
-
_parse(e) {
|
|
1878
|
-
const { ctx: t } = this._processInputParams(e);
|
|
1879
|
-
if (t.parsedType !== f.object)
|
|
1880
|
-
return u(t, {
|
|
1881
|
-
code: d.invalid_type,
|
|
1882
|
-
expected: f.object,
|
|
1883
|
-
received: t.parsedType
|
|
1884
|
-
}), m;
|
|
1885
|
-
const s = this.discriminator, n = t.data[s], a = this.optionsMap.get(n);
|
|
1886
|
-
return a ? t.common.async ? a._parseAsync({
|
|
1887
|
-
data: t.data,
|
|
1888
|
-
path: t.path,
|
|
1889
|
-
parent: t
|
|
1890
|
-
}) : a._parseSync({
|
|
1891
|
-
data: t.data,
|
|
1892
|
-
path: t.path,
|
|
1893
|
-
parent: t
|
|
1894
|
-
}) : (u(t, {
|
|
1895
|
-
code: d.invalid_union_discriminator,
|
|
1896
|
-
options: Array.from(this.optionsMap.keys()),
|
|
1897
|
-
path: [s]
|
|
1898
|
-
}), m);
|
|
1899
|
-
}
|
|
1900
|
-
get discriminator() {
|
|
1901
|
-
return this._def.discriminator;
|
|
1902
|
-
}
|
|
1903
|
-
get options() {
|
|
1904
|
-
return this._def.options;
|
|
1905
|
-
}
|
|
1906
|
-
get optionsMap() {
|
|
1907
|
-
return this._def.optionsMap;
|
|
1908
|
-
}
|
|
1909
|
-
/**
|
|
1910
|
-
* The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.
|
|
1911
|
-
* However, it only allows a union of objects, all of which need to share a discriminator property. This property must
|
|
1912
|
-
* have a different value for each object in the union.
|
|
1913
|
-
* @param discriminator the name of the discriminator property
|
|
1914
|
-
* @param types an array of object schemas
|
|
1915
|
-
* @param params
|
|
1916
|
-
*/
|
|
1917
|
-
static create(e, t, s) {
|
|
1918
|
-
const n = /* @__PURE__ */ new Map();
|
|
1919
|
-
for (const a of t) {
|
|
1920
|
-
const i = I(a.shape[e]);
|
|
1921
|
-
if (!i.length)
|
|
1922
|
-
throw new Error(`A discriminator value for key \`${e}\` could not be extracted from all schema options`);
|
|
1923
|
-
for (const o of i) {
|
|
1924
|
-
if (n.has(o))
|
|
1925
|
-
throw new Error(`Discriminator property ${String(e)} has duplicate value ${String(o)}`);
|
|
1926
|
-
n.set(o, a);
|
|
1927
|
-
}
|
|
1928
|
-
}
|
|
1929
|
-
return new _e({
|
|
1930
|
-
typeName: p.ZodDiscriminatedUnion,
|
|
1931
|
-
discriminator: e,
|
|
1932
|
-
options: t,
|
|
1933
|
-
optionsMap: n,
|
|
1934
|
-
...v(s)
|
|
1935
|
-
});
|
|
1936
|
-
}
|
|
1937
|
-
}
|
|
1938
|
-
function Te(r, e) {
|
|
1939
|
-
const t = A(r), s = A(e);
|
|
1940
|
-
if (r === e)
|
|
1941
|
-
return { valid: !0, data: r };
|
|
1942
|
-
if (t === f.object && s === f.object) {
|
|
1943
|
-
const n = g.objectKeys(e), a = g.objectKeys(r).filter((o) => n.indexOf(o) !== -1), i = { ...r, ...e };
|
|
1944
|
-
for (const o of a) {
|
|
1945
|
-
const l = Te(r[o], e[o]);
|
|
1946
|
-
if (!l.valid)
|
|
1947
|
-
return { valid: !1 };
|
|
1948
|
-
i[o] = l.data;
|
|
1949
|
-
}
|
|
1950
|
-
return { valid: !0, data: i };
|
|
1951
|
-
} else if (t === f.array && s === f.array) {
|
|
1952
|
-
if (r.length !== e.length)
|
|
1953
|
-
return { valid: !1 };
|
|
1954
|
-
const n = [];
|
|
1955
|
-
for (let a = 0; a < r.length; a++) {
|
|
1956
|
-
const i = r[a], o = e[a], l = Te(i, o);
|
|
1957
|
-
if (!l.valid)
|
|
1958
|
-
return { valid: !1 };
|
|
1959
|
-
n.push(l.data);
|
|
1960
|
-
}
|
|
1961
|
-
return { valid: !0, data: n };
|
|
1962
|
-
} else
|
|
1963
|
-
return t === f.date && s === f.date && +r == +e ? { valid: !0, data: r } : { valid: !1 };
|
|
1964
|
-
}
|
|
1965
|
-
class re extends _ {
|
|
1966
|
-
_parse(e) {
|
|
1967
|
-
const { status: t, ctx: s } = this._processInputParams(e), n = (a, i) => {
|
|
1968
|
-
if (be(a) || be(i))
|
|
1969
|
-
return m;
|
|
1970
|
-
const o = Te(a.value, i.value);
|
|
1971
|
-
return o.valid ? ((we(a) || we(i)) && t.dirty(), { status: t.value, value: o.data }) : (u(s, {
|
|
1972
|
-
code: d.invalid_intersection_types
|
|
1973
|
-
}), m);
|
|
1974
|
-
};
|
|
1975
|
-
return s.common.async ? Promise.all([
|
|
1976
|
-
this._def.left._parseAsync({
|
|
1977
|
-
data: s.data,
|
|
1978
|
-
path: s.path,
|
|
1979
|
-
parent: s
|
|
1980
|
-
}),
|
|
1981
|
-
this._def.right._parseAsync({
|
|
1982
|
-
data: s.data,
|
|
1983
|
-
path: s.path,
|
|
1984
|
-
parent: s
|
|
1985
|
-
})
|
|
1986
|
-
]).then(([a, i]) => n(a, i)) : n(this._def.left._parseSync({
|
|
1987
|
-
data: s.data,
|
|
1988
|
-
path: s.path,
|
|
1989
|
-
parent: s
|
|
1990
|
-
}), this._def.right._parseSync({
|
|
1991
|
-
data: s.data,
|
|
1992
|
-
path: s.path,
|
|
1993
|
-
parent: s
|
|
1994
|
-
}));
|
|
1995
|
-
}
|
|
1996
|
-
}
|
|
1997
|
-
re.create = (r, e, t) => new re({
|
|
1998
|
-
left: r,
|
|
1999
|
-
right: e,
|
|
2000
|
-
typeName: p.ZodIntersection,
|
|
2001
|
-
...v(t)
|
|
2002
|
-
});
|
|
2003
|
-
class R extends _ {
|
|
2004
|
-
_parse(e) {
|
|
2005
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2006
|
-
if (s.parsedType !== f.array)
|
|
2007
|
-
return u(s, {
|
|
2008
|
-
code: d.invalid_type,
|
|
2009
|
-
expected: f.array,
|
|
2010
|
-
received: s.parsedType
|
|
2011
|
-
}), m;
|
|
2012
|
-
if (s.data.length < this._def.items.length)
|
|
2013
|
-
return u(s, {
|
|
2014
|
-
code: d.too_small,
|
|
2015
|
-
minimum: this._def.items.length,
|
|
2016
|
-
inclusive: !0,
|
|
2017
|
-
exact: !1,
|
|
2018
|
-
type: "array"
|
|
2019
|
-
}), m;
|
|
2020
|
-
!this._def.rest && s.data.length > this._def.items.length && (u(s, {
|
|
2021
|
-
code: d.too_big,
|
|
2022
|
-
maximum: this._def.items.length,
|
|
2023
|
-
inclusive: !0,
|
|
2024
|
-
exact: !1,
|
|
2025
|
-
type: "array"
|
|
2026
|
-
}), t.dirty());
|
|
2027
|
-
const a = [...s.data].map((i, o) => {
|
|
2028
|
-
const l = this._def.items[o] || this._def.rest;
|
|
2029
|
-
return l ? l._parse(new E(s, i, s.path, o)) : null;
|
|
2030
|
-
}).filter((i) => !!i);
|
|
2031
|
-
return s.common.async ? Promise.all(a).then((i) => b.mergeArray(t, i)) : b.mergeArray(t, a);
|
|
2032
|
-
}
|
|
2033
|
-
get items() {
|
|
2034
|
-
return this._def.items;
|
|
2035
|
-
}
|
|
2036
|
-
rest(e) {
|
|
2037
|
-
return new R({
|
|
2038
|
-
...this._def,
|
|
2039
|
-
rest: e
|
|
2040
|
-
});
|
|
2041
|
-
}
|
|
2042
|
-
}
|
|
2043
|
-
R.create = (r, e) => {
|
|
2044
|
-
if (!Array.isArray(r))
|
|
2045
|
-
throw new Error("You must pass an array of schemas to z.tuple([ ... ])");
|
|
2046
|
-
return new R({
|
|
2047
|
-
items: r,
|
|
2048
|
-
typeName: p.ZodTuple,
|
|
2049
|
-
rest: null,
|
|
2050
|
-
...v(e)
|
|
2051
|
-
});
|
|
2052
|
-
};
|
|
2053
|
-
class se extends _ {
|
|
2054
|
-
get keySchema() {
|
|
2055
|
-
return this._def.keyType;
|
|
2056
|
-
}
|
|
2057
|
-
get valueSchema() {
|
|
2058
|
-
return this._def.valueType;
|
|
2059
|
-
}
|
|
2060
|
-
_parse(e) {
|
|
2061
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2062
|
-
if (s.parsedType !== f.object)
|
|
2063
|
-
return u(s, {
|
|
2064
|
-
code: d.invalid_type,
|
|
2065
|
-
expected: f.object,
|
|
2066
|
-
received: s.parsedType
|
|
2067
|
-
}), m;
|
|
2068
|
-
const n = [], a = this._def.keyType, i = this._def.valueType;
|
|
2069
|
-
for (const o in s.data)
|
|
2070
|
-
n.push({
|
|
2071
|
-
key: a._parse(new E(s, o, s.path, o)),
|
|
2072
|
-
value: i._parse(new E(s, s.data[o], s.path, o)),
|
|
2073
|
-
alwaysSet: o in s.data
|
|
2074
|
-
});
|
|
2075
|
-
return s.common.async ? b.mergeObjectAsync(t, n) : b.mergeObjectSync(t, n);
|
|
2076
|
-
}
|
|
2077
|
-
get element() {
|
|
2078
|
-
return this._def.valueType;
|
|
2079
|
-
}
|
|
2080
|
-
static create(e, t, s) {
|
|
2081
|
-
return t instanceof _ ? new se({
|
|
2082
|
-
keyType: e,
|
|
2083
|
-
valueType: t,
|
|
2084
|
-
typeName: p.ZodRecord,
|
|
2085
|
-
...v(s)
|
|
2086
|
-
}) : new se({
|
|
2087
|
-
keyType: S.create(),
|
|
2088
|
-
valueType: e,
|
|
2089
|
-
typeName: p.ZodRecord,
|
|
2090
|
-
...v(t)
|
|
2091
|
-
});
|
|
2092
|
-
}
|
|
2093
|
-
}
|
|
2094
|
-
class ye extends _ {
|
|
2095
|
-
get keySchema() {
|
|
2096
|
-
return this._def.keyType;
|
|
2097
|
-
}
|
|
2098
|
-
get valueSchema() {
|
|
2099
|
-
return this._def.valueType;
|
|
2100
|
-
}
|
|
2101
|
-
_parse(e) {
|
|
2102
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2103
|
-
if (s.parsedType !== f.map)
|
|
2104
|
-
return u(s, {
|
|
2105
|
-
code: d.invalid_type,
|
|
2106
|
-
expected: f.map,
|
|
2107
|
-
received: s.parsedType
|
|
2108
|
-
}), m;
|
|
2109
|
-
const n = this._def.keyType, a = this._def.valueType, i = [...s.data.entries()].map(([o, l], c) => ({
|
|
2110
|
-
key: n._parse(new E(s, o, s.path, [c, "key"])),
|
|
2111
|
-
value: a._parse(new E(s, l, s.path, [c, "value"]))
|
|
2112
|
-
}));
|
|
2113
|
-
if (s.common.async) {
|
|
2114
|
-
const o = /* @__PURE__ */ new Map();
|
|
2115
|
-
return Promise.resolve().then(async () => {
|
|
2116
|
-
for (const l of i) {
|
|
2117
|
-
const c = await l.key, y = await l.value;
|
|
2118
|
-
if (c.status === "aborted" || y.status === "aborted")
|
|
2119
|
-
return m;
|
|
2120
|
-
(c.status === "dirty" || y.status === "dirty") && t.dirty(), o.set(c.value, y.value);
|
|
2121
|
-
}
|
|
2122
|
-
return { status: t.value, value: o };
|
|
2123
|
-
});
|
|
2124
|
-
} else {
|
|
2125
|
-
const o = /* @__PURE__ */ new Map();
|
|
2126
|
-
for (const l of i) {
|
|
2127
|
-
const c = l.key, y = l.value;
|
|
2128
|
-
if (c.status === "aborted" || y.status === "aborted")
|
|
2129
|
-
return m;
|
|
2130
|
-
(c.status === "dirty" || y.status === "dirty") && t.dirty(), o.set(c.value, y.value);
|
|
2131
|
-
}
|
|
2132
|
-
return { status: t.value, value: o };
|
|
2133
|
-
}
|
|
2134
|
-
}
|
|
2135
|
-
}
|
|
2136
|
-
ye.create = (r, e, t) => new ye({
|
|
2137
|
-
valueType: e,
|
|
2138
|
-
keyType: r,
|
|
2139
|
-
typeName: p.ZodMap,
|
|
2140
|
-
...v(t)
|
|
2141
|
-
});
|
|
2142
|
-
class z extends _ {
|
|
2143
|
-
_parse(e) {
|
|
2144
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2145
|
-
if (s.parsedType !== f.set)
|
|
2146
|
-
return u(s, {
|
|
2147
|
-
code: d.invalid_type,
|
|
2148
|
-
expected: f.set,
|
|
2149
|
-
received: s.parsedType
|
|
2150
|
-
}), m;
|
|
2151
|
-
const n = this._def;
|
|
2152
|
-
n.minSize !== null && s.data.size < n.minSize.value && (u(s, {
|
|
2153
|
-
code: d.too_small,
|
|
2154
|
-
minimum: n.minSize.value,
|
|
2155
|
-
type: "set",
|
|
2156
|
-
inclusive: !0,
|
|
2157
|
-
exact: !1,
|
|
2158
|
-
message: n.minSize.message
|
|
2159
|
-
}), t.dirty()), n.maxSize !== null && s.data.size > n.maxSize.value && (u(s, {
|
|
2160
|
-
code: d.too_big,
|
|
2161
|
-
maximum: n.maxSize.value,
|
|
2162
|
-
type: "set",
|
|
2163
|
-
inclusive: !0,
|
|
2164
|
-
exact: !1,
|
|
2165
|
-
message: n.maxSize.message
|
|
2166
|
-
}), t.dirty());
|
|
2167
|
-
const a = this._def.valueType;
|
|
2168
|
-
function i(l) {
|
|
2169
|
-
const c = /* @__PURE__ */ new Set();
|
|
2170
|
-
for (const y of l) {
|
|
2171
|
-
if (y.status === "aborted")
|
|
2172
|
-
return m;
|
|
2173
|
-
y.status === "dirty" && t.dirty(), c.add(y.value);
|
|
2174
|
-
}
|
|
2175
|
-
return { status: t.value, value: c };
|
|
2176
|
-
}
|
|
2177
|
-
const o = [...s.data.values()].map((l, c) => a._parse(new E(s, l, s.path, c)));
|
|
2178
|
-
return s.common.async ? Promise.all(o).then((l) => i(l)) : i(o);
|
|
2179
|
-
}
|
|
2180
|
-
min(e, t) {
|
|
2181
|
-
return new z({
|
|
2182
|
-
...this._def,
|
|
2183
|
-
minSize: { value: e, message: h.toString(t) }
|
|
2184
|
-
});
|
|
2185
|
-
}
|
|
2186
|
-
max(e, t) {
|
|
2187
|
-
return new z({
|
|
2188
|
-
...this._def,
|
|
2189
|
-
maxSize: { value: e, message: h.toString(t) }
|
|
2190
|
-
});
|
|
2191
|
-
}
|
|
2192
|
-
size(e, t) {
|
|
2193
|
-
return this.min(e, t).max(e, t);
|
|
2194
|
-
}
|
|
2195
|
-
nonempty(e) {
|
|
2196
|
-
return this.min(1, e);
|
|
2197
|
-
}
|
|
2198
|
-
}
|
|
2199
|
-
z.create = (r, e) => new z({
|
|
2200
|
-
valueType: r,
|
|
2201
|
-
minSize: null,
|
|
2202
|
-
maxSize: null,
|
|
2203
|
-
typeName: p.ZodSet,
|
|
2204
|
-
...v(e)
|
|
2205
|
-
});
|
|
2206
|
-
class W extends _ {
|
|
2207
|
-
constructor() {
|
|
2208
|
-
super(...arguments), this.validate = this.implement;
|
|
2209
|
-
}
|
|
2210
|
-
_parse(e) {
|
|
2211
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2212
|
-
if (t.parsedType !== f.function)
|
|
2213
|
-
return u(t, {
|
|
2214
|
-
code: d.invalid_type,
|
|
2215
|
-
expected: f.function,
|
|
2216
|
-
received: t.parsedType
|
|
2217
|
-
}), m;
|
|
2218
|
-
function s(o, l) {
|
|
2219
|
-
return fe({
|
|
2220
|
-
data: o,
|
|
2221
|
-
path: t.path,
|
|
2222
|
-
errorMaps: [
|
|
2223
|
-
t.common.contextualErrorMap,
|
|
2224
|
-
t.schemaErrorMap,
|
|
2225
|
-
le(),
|
|
2226
|
-
q
|
|
2227
|
-
].filter((c) => !!c),
|
|
2228
|
-
issueData: {
|
|
2229
|
-
code: d.invalid_arguments,
|
|
2230
|
-
argumentsError: l
|
|
2231
|
-
}
|
|
2232
|
-
});
|
|
2233
|
-
}
|
|
2234
|
-
function n(o, l) {
|
|
2235
|
-
return fe({
|
|
2236
|
-
data: o,
|
|
2237
|
-
path: t.path,
|
|
2238
|
-
errorMaps: [
|
|
2239
|
-
t.common.contextualErrorMap,
|
|
2240
|
-
t.schemaErrorMap,
|
|
2241
|
-
le(),
|
|
2242
|
-
q
|
|
2243
|
-
].filter((c) => !!c),
|
|
2244
|
-
issueData: {
|
|
2245
|
-
code: d.invalid_return_type,
|
|
2246
|
-
returnTypeError: l
|
|
2247
|
-
}
|
|
2248
|
-
});
|
|
2249
|
-
}
|
|
2250
|
-
const a = { errorMap: t.common.contextualErrorMap }, i = t.data;
|
|
2251
|
-
if (this._def.returns instanceof J) {
|
|
2252
|
-
const o = this;
|
|
2253
|
-
return w(async function(...l) {
|
|
2254
|
-
const c = new T([]), y = await o._def.args.parseAsync(l, a).catch((ge) => {
|
|
2255
|
-
throw c.addIssue(s(l, ge)), c;
|
|
2256
|
-
}), Z = await Reflect.apply(i, this, y);
|
|
2257
|
-
return await o._def.returns._def.type.parseAsync(Z, a).catch((ge) => {
|
|
2258
|
-
throw c.addIssue(n(Z, ge)), c;
|
|
2259
|
-
});
|
|
2260
|
-
});
|
|
2261
|
-
} else {
|
|
2262
|
-
const o = this;
|
|
2263
|
-
return w(function(...l) {
|
|
2264
|
-
const c = o._def.args.safeParse(l, a);
|
|
2265
|
-
if (!c.success)
|
|
2266
|
-
throw new T([s(l, c.error)]);
|
|
2267
|
-
const y = Reflect.apply(i, this, c.data), Z = o._def.returns.safeParse(y, a);
|
|
2268
|
-
if (!Z.success)
|
|
2269
|
-
throw new T([n(y, Z.error)]);
|
|
2270
|
-
return Z.data;
|
|
2271
|
-
});
|
|
2272
|
-
}
|
|
2273
|
-
}
|
|
2274
|
-
parameters() {
|
|
2275
|
-
return this._def.args;
|
|
2276
|
-
}
|
|
2277
|
-
returnType() {
|
|
2278
|
-
return this._def.returns;
|
|
2279
|
-
}
|
|
2280
|
-
args(...e) {
|
|
2281
|
-
return new W({
|
|
2282
|
-
...this._def,
|
|
2283
|
-
args: R.create(e).rest(D.create())
|
|
2284
|
-
});
|
|
2285
|
-
}
|
|
2286
|
-
returns(e) {
|
|
2287
|
-
return new W({
|
|
2288
|
-
...this._def,
|
|
2289
|
-
returns: e
|
|
2290
|
-
});
|
|
2291
|
-
}
|
|
2292
|
-
implement(e) {
|
|
2293
|
-
return this.parse(e);
|
|
2294
|
-
}
|
|
2295
|
-
strictImplement(e) {
|
|
2296
|
-
return this.parse(e);
|
|
2297
|
-
}
|
|
2298
|
-
static create(e, t, s) {
|
|
2299
|
-
return new W({
|
|
2300
|
-
args: e || R.create([]).rest(D.create()),
|
|
2301
|
-
returns: t || D.create(),
|
|
2302
|
-
typeName: p.ZodFunction,
|
|
2303
|
-
...v(s)
|
|
2304
|
-
});
|
|
2305
|
-
}
|
|
2306
|
-
}
|
|
2307
|
-
class ne extends _ {
|
|
2308
|
-
get schema() {
|
|
2309
|
-
return this._def.getter();
|
|
2310
|
-
}
|
|
2311
|
-
_parse(e) {
|
|
2312
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2313
|
-
return this._def.getter()._parse({ data: t.data, path: t.path, parent: t });
|
|
2314
|
-
}
|
|
2315
|
-
}
|
|
2316
|
-
ne.create = (r, e) => new ne({
|
|
2317
|
-
getter: r,
|
|
2318
|
-
typeName: p.ZodLazy,
|
|
2319
|
-
...v(e)
|
|
2320
|
-
});
|
|
2321
|
-
class ae extends _ {
|
|
2322
|
-
_parse(e) {
|
|
2323
|
-
if (e.data !== this._def.value) {
|
|
2324
|
-
const t = this._getOrReturnCtx(e);
|
|
2325
|
-
return u(t, {
|
|
2326
|
-
received: t.data,
|
|
2327
|
-
code: d.invalid_literal,
|
|
2328
|
-
expected: this._def.value
|
|
2329
|
-
}), m;
|
|
2330
|
-
}
|
|
2331
|
-
return { status: "valid", value: e.data };
|
|
2332
|
-
}
|
|
2333
|
-
get value() {
|
|
2334
|
-
return this._def.value;
|
|
2335
|
-
}
|
|
2336
|
-
}
|
|
2337
|
-
ae.create = (r, e) => new ae({
|
|
2338
|
-
value: r,
|
|
2339
|
-
typeName: p.ZodLiteral,
|
|
2340
|
-
...v(e)
|
|
2341
|
-
});
|
|
2342
|
-
function Ae(r, e) {
|
|
2343
|
-
return new P({
|
|
2344
|
-
values: r,
|
|
2345
|
-
typeName: p.ZodEnum,
|
|
2346
|
-
...v(e)
|
|
2347
|
-
});
|
|
2348
|
-
}
|
|
2349
|
-
class P extends _ {
|
|
2350
|
-
constructor() {
|
|
2351
|
-
super(...arguments), H.set(this, void 0);
|
|
2352
|
-
}
|
|
2353
|
-
_parse(e) {
|
|
2354
|
-
if (typeof e.data != "string") {
|
|
2355
|
-
const t = this._getOrReturnCtx(e), s = this._def.values;
|
|
2356
|
-
return u(t, {
|
|
2357
|
-
expected: g.joinValues(s),
|
|
2358
|
-
received: t.parsedType,
|
|
2359
|
-
code: d.invalid_type
|
|
2360
|
-
}), m;
|
|
2361
|
-
}
|
|
2362
|
-
if (he(this, H) || Ee(this, H, new Set(this._def.values)), !he(this, H).has(e.data)) {
|
|
2363
|
-
const t = this._getOrReturnCtx(e), s = this._def.values;
|
|
2364
|
-
return u(t, {
|
|
2365
|
-
received: t.data,
|
|
2366
|
-
code: d.invalid_enum_value,
|
|
2367
|
-
options: s
|
|
2368
|
-
}), m;
|
|
2369
|
-
}
|
|
2370
|
-
return w(e.data);
|
|
2371
|
-
}
|
|
2372
|
-
get options() {
|
|
2373
|
-
return this._def.values;
|
|
2374
|
-
}
|
|
2375
|
-
get enum() {
|
|
2376
|
-
const e = {};
|
|
2377
|
-
for (const t of this._def.values)
|
|
2378
|
-
e[t] = t;
|
|
2379
|
-
return e;
|
|
2380
|
-
}
|
|
2381
|
-
get Values() {
|
|
2382
|
-
const e = {};
|
|
2383
|
-
for (const t of this._def.values)
|
|
2384
|
-
e[t] = t;
|
|
2385
|
-
return e;
|
|
2386
|
-
}
|
|
2387
|
-
get Enum() {
|
|
2388
|
-
const e = {};
|
|
2389
|
-
for (const t of this._def.values)
|
|
2390
|
-
e[t] = t;
|
|
2391
|
-
return e;
|
|
2392
|
-
}
|
|
2393
|
-
extract(e, t = this._def) {
|
|
2394
|
-
return P.create(e, {
|
|
2395
|
-
...this._def,
|
|
2396
|
-
...t
|
|
2397
|
-
});
|
|
2398
|
-
}
|
|
2399
|
-
exclude(e, t = this._def) {
|
|
2400
|
-
return P.create(this.options.filter((s) => !e.includes(s)), {
|
|
2401
|
-
...this._def,
|
|
2402
|
-
...t
|
|
2403
|
-
});
|
|
2404
|
-
}
|
|
2405
|
-
}
|
|
2406
|
-
H = /* @__PURE__ */ new WeakMap();
|
|
2407
|
-
P.create = Ae;
|
|
2408
|
-
class ie extends _ {
|
|
2409
|
-
constructor() {
|
|
2410
|
-
super(...arguments), G.set(this, void 0);
|
|
2411
|
-
}
|
|
2412
|
-
_parse(e) {
|
|
2413
|
-
const t = g.getValidEnumValues(this._def.values), s = this._getOrReturnCtx(e);
|
|
2414
|
-
if (s.parsedType !== f.string && s.parsedType !== f.number) {
|
|
2415
|
-
const n = g.objectValues(t);
|
|
2416
|
-
return u(s, {
|
|
2417
|
-
expected: g.joinValues(n),
|
|
2418
|
-
received: s.parsedType,
|
|
2419
|
-
code: d.invalid_type
|
|
2420
|
-
}), m;
|
|
2421
|
-
}
|
|
2422
|
-
if (he(this, G) || Ee(this, G, new Set(g.getValidEnumValues(this._def.values))), !he(this, G).has(e.data)) {
|
|
2423
|
-
const n = g.objectValues(t);
|
|
2424
|
-
return u(s, {
|
|
2425
|
-
received: s.data,
|
|
2426
|
-
code: d.invalid_enum_value,
|
|
2427
|
-
options: n
|
|
2428
|
-
}), m;
|
|
2429
|
-
}
|
|
2430
|
-
return w(e.data);
|
|
2431
|
-
}
|
|
2432
|
-
get enum() {
|
|
2433
|
-
return this._def.values;
|
|
2434
|
-
}
|
|
2435
|
-
}
|
|
2436
|
-
G = /* @__PURE__ */ new WeakMap();
|
|
2437
|
-
ie.create = (r, e) => new ie({
|
|
2438
|
-
values: r,
|
|
2439
|
-
typeName: p.ZodNativeEnum,
|
|
2440
|
-
...v(e)
|
|
2441
|
-
});
|
|
2442
|
-
class J extends _ {
|
|
2443
|
-
unwrap() {
|
|
2444
|
-
return this._def.type;
|
|
2445
|
-
}
|
|
2446
|
-
_parse(e) {
|
|
2447
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2448
|
-
if (t.parsedType !== f.promise && t.common.async === !1)
|
|
2449
|
-
return u(t, {
|
|
2450
|
-
code: d.invalid_type,
|
|
2451
|
-
expected: f.promise,
|
|
2452
|
-
received: t.parsedType
|
|
2453
|
-
}), m;
|
|
2454
|
-
const s = t.parsedType === f.promise ? t.data : Promise.resolve(t.data);
|
|
2455
|
-
return w(s.then((n) => this._def.type.parseAsync(n, {
|
|
2456
|
-
path: t.path,
|
|
2457
|
-
errorMap: t.common.contextualErrorMap
|
|
2458
|
-
})));
|
|
2459
|
-
}
|
|
2460
|
-
}
|
|
2461
|
-
J.create = (r, e) => new J({
|
|
2462
|
-
type: r,
|
|
2463
|
-
typeName: p.ZodPromise,
|
|
2464
|
-
...v(e)
|
|
2465
|
-
});
|
|
2466
|
-
class N extends _ {
|
|
2467
|
-
innerType() {
|
|
2468
|
-
return this._def.schema;
|
|
2469
|
-
}
|
|
2470
|
-
sourceType() {
|
|
2471
|
-
return this._def.schema._def.typeName === p.ZodEffects ? this._def.schema.sourceType() : this._def.schema;
|
|
2472
|
-
}
|
|
2473
|
-
_parse(e) {
|
|
2474
|
-
const { status: t, ctx: s } = this._processInputParams(e), n = this._def.effect || null, a = {
|
|
2475
|
-
addIssue: (i) => {
|
|
2476
|
-
u(s, i), i.fatal ? t.abort() : t.dirty();
|
|
2477
|
-
},
|
|
2478
|
-
get path() {
|
|
2479
|
-
return s.path;
|
|
2480
|
-
}
|
|
2481
|
-
};
|
|
2482
|
-
if (a.addIssue = a.addIssue.bind(a), n.type === "preprocess") {
|
|
2483
|
-
const i = n.transform(s.data, a);
|
|
2484
|
-
if (s.common.async)
|
|
2485
|
-
return Promise.resolve(i).then(async (o) => {
|
|
2486
|
-
if (t.value === "aborted")
|
|
2487
|
-
return m;
|
|
2488
|
-
const l = await this._def.schema._parseAsync({
|
|
2489
|
-
data: o,
|
|
2490
|
-
path: s.path,
|
|
2491
|
-
parent: s
|
|
2492
|
-
});
|
|
2493
|
-
return l.status === "aborted" ? m : l.status === "dirty" || t.value === "dirty" ? B(l.value) : l;
|
|
2494
|
-
});
|
|
2495
|
-
{
|
|
2496
|
-
if (t.value === "aborted")
|
|
2497
|
-
return m;
|
|
2498
|
-
const o = this._def.schema._parseSync({
|
|
2499
|
-
data: i,
|
|
2500
|
-
path: s.path,
|
|
2501
|
-
parent: s
|
|
2502
|
-
});
|
|
2503
|
-
return o.status === "aborted" ? m : o.status === "dirty" || t.value === "dirty" ? B(o.value) : o;
|
|
2504
|
-
}
|
|
2505
|
-
}
|
|
2506
|
-
if (n.type === "refinement") {
|
|
2507
|
-
const i = (o) => {
|
|
2508
|
-
const l = n.refinement(o, a);
|
|
2509
|
-
if (s.common.async)
|
|
2510
|
-
return Promise.resolve(l);
|
|
2511
|
-
if (l instanceof Promise)
|
|
2512
|
-
throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");
|
|
2513
|
-
return o;
|
|
2514
|
-
};
|
|
2515
|
-
if (s.common.async === !1) {
|
|
2516
|
-
const o = this._def.schema._parseSync({
|
|
2517
|
-
data: s.data,
|
|
2518
|
-
path: s.path,
|
|
2519
|
-
parent: s
|
|
2520
|
-
});
|
|
2521
|
-
return o.status === "aborted" ? m : (o.status === "dirty" && t.dirty(), i(o.value), { status: t.value, value: o.value });
|
|
2522
|
-
} else
|
|
2523
|
-
return this._def.schema._parseAsync({ data: s.data, path: s.path, parent: s }).then((o) => o.status === "aborted" ? m : (o.status === "dirty" && t.dirty(), i(o.value).then(() => ({ status: t.value, value: o.value }))));
|
|
2524
|
-
}
|
|
2525
|
-
if (n.type === "transform")
|
|
2526
|
-
if (s.common.async === !1) {
|
|
2527
|
-
const i = this._def.schema._parseSync({
|
|
2528
|
-
data: s.data,
|
|
2529
|
-
path: s.path,
|
|
2530
|
-
parent: s
|
|
2531
|
-
});
|
|
2532
|
-
if (!X(i))
|
|
2533
|
-
return i;
|
|
2534
|
-
const o = n.transform(i.value, a);
|
|
2535
|
-
if (o instanceof Promise)
|
|
2536
|
-
throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");
|
|
2537
|
-
return { status: t.value, value: o };
|
|
2538
|
-
} else
|
|
2539
|
-
return this._def.schema._parseAsync({ data: s.data, path: s.path, parent: s }).then((i) => X(i) ? Promise.resolve(n.transform(i.value, a)).then((o) => ({ status: t.value, value: o })) : i);
|
|
2540
|
-
g.assertNever(n);
|
|
2541
|
-
}
|
|
2542
|
-
}
|
|
2543
|
-
N.create = (r, e, t) => new N({
|
|
2544
|
-
schema: r,
|
|
2545
|
-
typeName: p.ZodEffects,
|
|
2546
|
-
effect: e,
|
|
2547
|
-
...v(t)
|
|
2548
|
-
});
|
|
2549
|
-
N.createWithPreprocess = (r, e, t) => new N({
|
|
2550
|
-
schema: e,
|
|
2551
|
-
effect: { type: "preprocess", transform: r },
|
|
2552
|
-
typeName: p.ZodEffects,
|
|
2553
|
-
...v(t)
|
|
2554
|
-
});
|
|
2555
|
-
class O extends _ {
|
|
2556
|
-
_parse(e) {
|
|
2557
|
-
return this._getType(e) === f.undefined ? w(void 0) : this._def.innerType._parse(e);
|
|
2558
|
-
}
|
|
2559
|
-
unwrap() {
|
|
2560
|
-
return this._def.innerType;
|
|
2561
|
-
}
|
|
2562
|
-
}
|
|
2563
|
-
O.create = (r, e) => new O({
|
|
2564
|
-
innerType: r,
|
|
2565
|
-
typeName: p.ZodOptional,
|
|
2566
|
-
...v(e)
|
|
2567
|
-
});
|
|
2568
|
-
class V extends _ {
|
|
2569
|
-
_parse(e) {
|
|
2570
|
-
return this._getType(e) === f.null ? w(null) : this._def.innerType._parse(e);
|
|
2571
|
-
}
|
|
2572
|
-
unwrap() {
|
|
2573
|
-
return this._def.innerType;
|
|
2574
|
-
}
|
|
2575
|
-
}
|
|
2576
|
-
V.create = (r, e) => new V({
|
|
2577
|
-
innerType: r,
|
|
2578
|
-
typeName: p.ZodNullable,
|
|
2579
|
-
...v(e)
|
|
2580
|
-
});
|
|
2581
|
-
class oe extends _ {
|
|
2582
|
-
_parse(e) {
|
|
2583
|
-
const { ctx: t } = this._processInputParams(e);
|
|
2584
|
-
let s = t.data;
|
|
2585
|
-
return t.parsedType === f.undefined && (s = this._def.defaultValue()), this._def.innerType._parse({
|
|
2586
|
-
data: s,
|
|
2587
|
-
path: t.path,
|
|
2588
|
-
parent: t
|
|
2589
|
-
});
|
|
2590
|
-
}
|
|
2591
|
-
removeDefault() {
|
|
2592
|
-
return this._def.innerType;
|
|
2593
|
-
}
|
|
2594
|
-
}
|
|
2595
|
-
oe.create = (r, e) => new oe({
|
|
2596
|
-
innerType: r,
|
|
2597
|
-
typeName: p.ZodDefault,
|
|
2598
|
-
defaultValue: typeof e.default == "function" ? e.default : () => e.default,
|
|
2599
|
-
...v(e)
|
|
2600
|
-
});
|
|
2601
|
-
class de extends _ {
|
|
2602
|
-
_parse(e) {
|
|
2603
|
-
const { ctx: t } = this._processInputParams(e), s = {
|
|
2604
|
-
...t,
|
|
2605
|
-
common: {
|
|
2606
|
-
...t.common,
|
|
2607
|
-
issues: []
|
|
2608
|
-
}
|
|
2609
|
-
}, n = this._def.innerType._parse({
|
|
2610
|
-
data: s.data,
|
|
2611
|
-
path: s.path,
|
|
2612
|
-
parent: {
|
|
2613
|
-
...s
|
|
2614
|
-
}
|
|
2615
|
-
});
|
|
2616
|
-
return Q(n) ? n.then((a) => ({
|
|
2617
|
-
status: "valid",
|
|
2618
|
-
value: a.status === "valid" ? a.value : this._def.catchValue({
|
|
2619
|
-
get error() {
|
|
2620
|
-
return new T(s.common.issues);
|
|
2621
|
-
},
|
|
2622
|
-
input: s.data
|
|
2623
|
-
})
|
|
2624
|
-
})) : {
|
|
2625
|
-
status: "valid",
|
|
2626
|
-
value: n.status === "valid" ? n.value : this._def.catchValue({
|
|
2627
|
-
get error() {
|
|
2628
|
-
return new T(s.common.issues);
|
|
2629
|
-
},
|
|
2630
|
-
input: s.data
|
|
2631
|
-
})
|
|
2632
|
-
};
|
|
2633
|
-
}
|
|
2634
|
-
removeCatch() {
|
|
2635
|
-
return this._def.innerType;
|
|
2636
|
-
}
|
|
2637
|
-
}
|
|
2638
|
-
de.create = (r, e) => new de({
|
|
2639
|
-
innerType: r,
|
|
2640
|
-
typeName: p.ZodCatch,
|
|
2641
|
-
catchValue: typeof e.catch == "function" ? e.catch : () => e.catch,
|
|
2642
|
-
...v(e)
|
|
2643
|
-
});
|
|
2644
|
-
class ve extends _ {
|
|
2645
|
-
_parse(e) {
|
|
2646
|
-
if (this._getType(e) !== f.nan) {
|
|
2647
|
-
const s = this._getOrReturnCtx(e);
|
|
2648
|
-
return u(s, {
|
|
2649
|
-
code: d.invalid_type,
|
|
2650
|
-
expected: f.nan,
|
|
2651
|
-
received: s.parsedType
|
|
2652
|
-
}), m;
|
|
2653
|
-
}
|
|
2654
|
-
return { status: "valid", value: e.data };
|
|
2655
|
-
}
|
|
2656
|
-
}
|
|
2657
|
-
ve.create = (r) => new ve({
|
|
2658
|
-
typeName: p.ZodNaN,
|
|
2659
|
-
...v(r)
|
|
2660
|
-
});
|
|
2661
|
-
const st = Symbol("zod_brand");
|
|
2662
|
-
class Ze extends _ {
|
|
2663
|
-
_parse(e) {
|
|
2664
|
-
const { ctx: t } = this._processInputParams(e), s = t.data;
|
|
2665
|
-
return this._def.type._parse({
|
|
2666
|
-
data: s,
|
|
2667
|
-
path: t.path,
|
|
2668
|
-
parent: t
|
|
2669
|
-
});
|
|
2670
|
-
}
|
|
2671
|
-
unwrap() {
|
|
2672
|
-
return this._def.type;
|
|
2673
|
-
}
|
|
2674
|
-
}
|
|
2675
|
-
class ue extends _ {
|
|
2676
|
-
_parse(e) {
|
|
2677
|
-
const { status: t, ctx: s } = this._processInputParams(e);
|
|
2678
|
-
if (s.common.async)
|
|
2679
|
-
return (async () => {
|
|
2680
|
-
const a = await this._def.in._parseAsync({
|
|
2681
|
-
data: s.data,
|
|
2682
|
-
path: s.path,
|
|
2683
|
-
parent: s
|
|
2684
|
-
});
|
|
2685
|
-
return a.status === "aborted" ? m : a.status === "dirty" ? (t.dirty(), B(a.value)) : this._def.out._parseAsync({
|
|
2686
|
-
data: a.value,
|
|
2687
|
-
path: s.path,
|
|
2688
|
-
parent: s
|
|
2689
|
-
});
|
|
2690
|
-
})();
|
|
2691
|
-
{
|
|
2692
|
-
const n = this._def.in._parseSync({
|
|
2693
|
-
data: s.data,
|
|
2694
|
-
path: s.path,
|
|
2695
|
-
parent: s
|
|
2696
|
-
});
|
|
2697
|
-
return n.status === "aborted" ? m : n.status === "dirty" ? (t.dirty(), {
|
|
2698
|
-
status: "dirty",
|
|
2699
|
-
value: n.value
|
|
2700
|
-
}) : this._def.out._parseSync({
|
|
2701
|
-
data: n.value,
|
|
2702
|
-
path: s.path,
|
|
2703
|
-
parent: s
|
|
2704
|
-
});
|
|
2705
|
-
}
|
|
2706
|
-
}
|
|
2707
|
-
static create(e, t) {
|
|
2708
|
-
return new ue({
|
|
2709
|
-
in: e,
|
|
2710
|
-
out: t,
|
|
2711
|
-
typeName: p.ZodPipeline
|
|
2712
|
-
});
|
|
2713
|
-
}
|
|
2714
|
-
}
|
|
2715
|
-
class ce extends _ {
|
|
2716
|
-
_parse(e) {
|
|
2717
|
-
const t = this._def.innerType._parse(e), s = (n) => (X(n) && (n.value = Object.freeze(n.value)), n);
|
|
2718
|
-
return Q(t) ? t.then((n) => s(n)) : s(t);
|
|
2719
|
-
}
|
|
2720
|
-
unwrap() {
|
|
2721
|
-
return this._def.innerType;
|
|
2722
|
-
}
|
|
2723
|
-
}
|
|
2724
|
-
ce.create = (r, e) => new ce({
|
|
2725
|
-
innerType: r,
|
|
2726
|
-
typeName: p.ZodReadonly,
|
|
2727
|
-
...v(e)
|
|
2728
|
-
});
|
|
2729
|
-
function Me(r, e = {}, t) {
|
|
2730
|
-
return r ? Y.create().superRefine((s, n) => {
|
|
2731
|
-
var a, i;
|
|
2732
|
-
if (!r(s)) {
|
|
2733
|
-
const o = typeof e == "function" ? e(s) : typeof e == "string" ? { message: e } : e, l = (i = (a = o.fatal) !== null && a !== void 0 ? a : t) !== null && i !== void 0 ? i : !0, c = typeof o == "string" ? { message: o } : o;
|
|
2734
|
-
n.addIssue({ code: "custom", ...c, fatal: l });
|
|
2735
|
-
}
|
|
2736
|
-
}) : Y.create();
|
|
2737
|
-
}
|
|
2738
|
-
const nt = {
|
|
2739
|
-
object: x.lazycreate
|
|
2740
|
-
};
|
|
2741
|
-
var p;
|
|
2742
|
-
(function(r) {
|
|
2743
|
-
r.ZodString = "ZodString", r.ZodNumber = "ZodNumber", r.ZodNaN = "ZodNaN", r.ZodBigInt = "ZodBigInt", r.ZodBoolean = "ZodBoolean", r.ZodDate = "ZodDate", r.ZodSymbol = "ZodSymbol", r.ZodUndefined = "ZodUndefined", r.ZodNull = "ZodNull", r.ZodAny = "ZodAny", r.ZodUnknown = "ZodUnknown", r.ZodNever = "ZodNever", r.ZodVoid = "ZodVoid", r.ZodArray = "ZodArray", r.ZodObject = "ZodObject", r.ZodUnion = "ZodUnion", r.ZodDiscriminatedUnion = "ZodDiscriminatedUnion", r.ZodIntersection = "ZodIntersection", r.ZodTuple = "ZodTuple", r.ZodRecord = "ZodRecord", r.ZodMap = "ZodMap", r.ZodSet = "ZodSet", r.ZodFunction = "ZodFunction", r.ZodLazy = "ZodLazy", r.ZodLiteral = "ZodLiteral", r.ZodEnum = "ZodEnum", r.ZodEffects = "ZodEffects", r.ZodNativeEnum = "ZodNativeEnum", r.ZodOptional = "ZodOptional", r.ZodNullable = "ZodNullable", r.ZodDefault = "ZodDefault", r.ZodCatch = "ZodCatch", r.ZodPromise = "ZodPromise", r.ZodBranded = "ZodBranded", r.ZodPipeline = "ZodPipeline", r.ZodReadonly = "ZodReadonly";
|
|
2744
|
-
})(p || (p = {}));
|
|
2745
|
-
const at = (r, e = {
|
|
2746
|
-
message: `Input not instance of ${r.name}`
|
|
2747
|
-
}) => Me((t) => t instanceof r, e), $e = S.create, Pe = M.create, it = ve.create, ot = $.create, Ve = K.create, dt = L.create, ct = pe.create, ut = F.create, lt = ee.create, ft = Y.create, ht = D.create, pt = j.create, mt = me.create, yt = C.create, vt = x.create, _t = x.strictCreate, gt = te.create, xt = _e.create, kt = re.create, bt = R.create, wt = se.create, Tt = ye.create, Zt = z.create, St = W.create, Ct = ne.create, Nt = ae.create, Ot = P.create, Et = ie.create, Rt = J.create, Ne = N.create, It = O.create, jt = V.create, At = N.createWithPreprocess, Mt = ue.create, $t = () => $e().optional(), Pt = () => Pe().optional(), Vt = () => Ve().optional(), Dt = {
|
|
2748
|
-
string: (r) => S.create({ ...r, coerce: !0 }),
|
|
2749
|
-
number: (r) => M.create({ ...r, coerce: !0 }),
|
|
2750
|
-
boolean: (r) => K.create({
|
|
2751
|
-
...r,
|
|
2752
|
-
coerce: !0
|
|
2753
|
-
}),
|
|
2754
|
-
bigint: (r) => $.create({ ...r, coerce: !0 }),
|
|
2755
|
-
date: (r) => L.create({ ...r, coerce: !0 })
|
|
2756
|
-
}, Lt = m;
|
|
2757
|
-
var k = /* @__PURE__ */ Object.freeze({
|
|
2758
|
-
__proto__: null,
|
|
2759
|
-
defaultErrorMap: q,
|
|
2760
|
-
setErrorMap: Le,
|
|
2761
|
-
getErrorMap: le,
|
|
2762
|
-
makeIssue: fe,
|
|
2763
|
-
EMPTY_PATH: ze,
|
|
2764
|
-
addIssueToContext: u,
|
|
2765
|
-
ParseStatus: b,
|
|
2766
|
-
INVALID: m,
|
|
2767
|
-
DIRTY: B,
|
|
2768
|
-
OK: w,
|
|
2769
|
-
isAborted: be,
|
|
2770
|
-
isDirty: we,
|
|
2771
|
-
isValid: X,
|
|
2772
|
-
isAsync: Q,
|
|
2773
|
-
get util() {
|
|
2774
|
-
return g;
|
|
2775
|
-
},
|
|
2776
|
-
get objectUtil() {
|
|
2777
|
-
return ke;
|
|
2778
|
-
},
|
|
2779
|
-
ZodParsedType: f,
|
|
2780
|
-
getParsedType: A,
|
|
2781
|
-
ZodType: _,
|
|
2782
|
-
datetimeRegex: je,
|
|
2783
|
-
ZodString: S,
|
|
2784
|
-
ZodNumber: M,
|
|
2785
|
-
ZodBigInt: $,
|
|
2786
|
-
ZodBoolean: K,
|
|
2787
|
-
ZodDate: L,
|
|
2788
|
-
ZodSymbol: pe,
|
|
2789
|
-
ZodUndefined: F,
|
|
2790
|
-
ZodNull: ee,
|
|
2791
|
-
ZodAny: Y,
|
|
2792
|
-
ZodUnknown: D,
|
|
2793
|
-
ZodNever: j,
|
|
2794
|
-
ZodVoid: me,
|
|
2795
|
-
ZodArray: C,
|
|
2796
|
-
ZodObject: x,
|
|
2797
|
-
ZodUnion: te,
|
|
2798
|
-
ZodDiscriminatedUnion: _e,
|
|
2799
|
-
ZodIntersection: re,
|
|
2800
|
-
ZodTuple: R,
|
|
2801
|
-
ZodRecord: se,
|
|
2802
|
-
ZodMap: ye,
|
|
2803
|
-
ZodSet: z,
|
|
2804
|
-
ZodFunction: W,
|
|
2805
|
-
ZodLazy: ne,
|
|
2806
|
-
ZodLiteral: ae,
|
|
2807
|
-
ZodEnum: P,
|
|
2808
|
-
ZodNativeEnum: ie,
|
|
2809
|
-
ZodPromise: J,
|
|
2810
|
-
ZodEffects: N,
|
|
2811
|
-
ZodTransformer: N,
|
|
2812
|
-
ZodOptional: O,
|
|
2813
|
-
ZodNullable: V,
|
|
2814
|
-
ZodDefault: oe,
|
|
2815
|
-
ZodCatch: de,
|
|
2816
|
-
ZodNaN: ve,
|
|
2817
|
-
BRAND: st,
|
|
2818
|
-
ZodBranded: Ze,
|
|
2819
|
-
ZodPipeline: ue,
|
|
2820
|
-
ZodReadonly: ce,
|
|
2821
|
-
custom: Me,
|
|
2822
|
-
Schema: _,
|
|
2823
|
-
ZodSchema: _,
|
|
2824
|
-
late: nt,
|
|
2825
|
-
get ZodFirstPartyTypeKind() {
|
|
2826
|
-
return p;
|
|
2827
|
-
},
|
|
2828
|
-
coerce: Dt,
|
|
2829
|
-
any: ft,
|
|
2830
|
-
array: yt,
|
|
2831
|
-
bigint: ot,
|
|
2832
|
-
boolean: Ve,
|
|
2833
|
-
date: dt,
|
|
2834
|
-
discriminatedUnion: xt,
|
|
2835
|
-
effect: Ne,
|
|
2836
|
-
enum: Ot,
|
|
2837
|
-
function: St,
|
|
2838
|
-
instanceof: at,
|
|
2839
|
-
intersection: kt,
|
|
2840
|
-
lazy: Ct,
|
|
2841
|
-
literal: Nt,
|
|
2842
|
-
map: Tt,
|
|
2843
|
-
nan: it,
|
|
2844
|
-
nativeEnum: Et,
|
|
2845
|
-
never: pt,
|
|
2846
|
-
null: lt,
|
|
2847
|
-
nullable: jt,
|
|
2848
|
-
number: Pe,
|
|
2849
|
-
object: vt,
|
|
2850
|
-
oboolean: Vt,
|
|
2851
|
-
onumber: Pt,
|
|
2852
|
-
optional: It,
|
|
2853
|
-
ostring: $t,
|
|
2854
|
-
pipeline: Mt,
|
|
2855
|
-
preprocess: At,
|
|
2856
|
-
promise: Rt,
|
|
2857
|
-
record: wt,
|
|
2858
|
-
set: Zt,
|
|
2859
|
-
strictObject: _t,
|
|
2860
|
-
string: $e,
|
|
2861
|
-
symbol: ct,
|
|
2862
|
-
transformer: Ne,
|
|
2863
|
-
tuple: bt,
|
|
2864
|
-
undefined: ut,
|
|
2865
|
-
union: gt,
|
|
2866
|
-
unknown: ht,
|
|
2867
|
-
void: mt,
|
|
2868
|
-
NEVER: Lt,
|
|
2869
|
-
ZodIssueCode: d,
|
|
2870
|
-
quotelessJson: De,
|
|
2871
|
-
ZodError: T
|
|
2872
|
-
});
|
|
2873
|
-
const zt = k.union([
|
|
2874
|
-
k.literal("pu"),
|
|
2875
|
-
k.literal("ku suli"),
|
|
2876
|
-
k.literal("ku lili"),
|
|
2877
|
-
k.literal("none")
|
|
2878
|
-
]), Ut = k.union([k.literal("pre-pu"), k.literal("post-pu"), k.literal("post-ku")]), Bt = k.union([
|
|
2879
|
-
k.literal("core"),
|
|
2880
|
-
k.literal("common"),
|
|
2881
|
-
k.literal("uncommon"),
|
|
2882
|
-
k.literal("obscure"),
|
|
2883
|
-
k.literal("sandbox")
|
|
2884
|
-
]), Wt = k.enum([
|
|
2885
|
-
"sitelen pona",
|
|
2886
|
-
"sitelen sitelen",
|
|
2887
|
-
"alphabet",
|
|
2888
|
-
"syllabary",
|
|
2889
|
-
"logography",
|
|
2890
|
-
"tokiponido alphabet",
|
|
2891
|
-
"tokiponido syllabary",
|
|
2892
|
-
"tokiponido logography"
|
|
2893
|
-
]);
|
|
2894
|
-
function qt(r, e, t) {
|
|
2895
|
-
return (r.translations[t] ?? r.translations.en)[e];
|
|
2896
|
-
}
|
|
2897
|
-
export {
|
|
2898
|
-
zt as B,
|
|
2899
|
-
Ut as C,
|
|
2900
|
-
Bt as U,
|
|
2901
|
-
Wt as W,
|
|
2902
|
-
qt as g,
|
|
2903
|
-
k as z
|
|
2904
|
-
};
|
|
2905
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtR2ZVdkV6RDQuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RAMy4yMy44L25vZGVfbW9kdWxlcy96b2QvbGliL2luZGV4Lm1qcyIsIi4uL3NyYy9saWIvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHV0aWw7XG4oZnVuY3Rpb24gKHV0aWwpIHtcbiAgICB1dGlsLmFzc2VydEVxdWFsID0gKHZhbCkgPT4gdmFsO1xuICAgIGZ1bmN0aW9uIGFzc2VydElzKF9hcmcpIHsgfVxuICAgIHV0aWwuYXNzZXJ0SXMgPSBhc3NlcnRJcztcbiAgICBmdW5jdGlvbiBhc3NlcnROZXZlcihfeCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9XG4gICAgdXRpbC5hc3NlcnROZXZlciA9IGFzc2VydE5ldmVyO1xuICAgIHV0aWwuYXJyYXlUb0VudW0gPSAoaXRlbXMpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgb2JqW2l0ZW1dID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG4gICAgdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXMgPSAob2JqKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkS2V5cyA9IHV0aWwub2JqZWN0S2V5cyhvYmopLmZpbHRlcigoaykgPT4gdHlwZW9mIG9ialtvYmpba11dICE9PSBcIm51bWJlclwiKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrIG9mIHZhbGlkS2V5cykge1xuICAgICAgICAgICAgZmlsdGVyZWRba10gPSBvYmpba107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0VmFsdWVzKGZpbHRlcmVkKTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0VmFsdWVzID0gKG9iaikgPT4ge1xuICAgICAgICByZXR1cm4gdXRpbC5vYmplY3RLZXlzKG9iaikubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqW2VdO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHV0aWwub2JqZWN0S2V5cyA9IHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gXCJmdW5jdGlvblwiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA/IChvYmopID0+IE9iamVjdC5rZXlzKG9iaikgLy8gZXNsaW50LWRpc2FibGUtbGluZSBiYW4vYmFuXG4gICAgICAgIDogKG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleXM7XG4gICAgICAgIH07XG4gICAgdXRpbC5maW5kID0gKGFyciwgY2hlY2tlcikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2tlcihpdGVtKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgdXRpbC5pc0ludGVnZXIgPSB0eXBlb2YgTnVtYmVyLmlzSW50ZWdlciA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gKHZhbCkgPT4gTnVtYmVyLmlzSW50ZWdlcih2YWwpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYmFuL2JhblxuICAgICAgICA6ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsKSAmJiBNYXRoLmZsb29yKHZhbCkgPT09IHZhbDtcbiAgICBmdW5jdGlvbiBqb2luVmFsdWVzKGFycmF5LCBzZXBhcmF0b3IgPSBcIiB8IFwiKSB7XG4gICAgICAgIHJldHVybiBhcnJheVxuICAgICAgICAgICAgLm1hcCgodmFsKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAnJHt2YWx9J2AgOiB2YWwpKVxuICAgICAgICAgICAgLmpvaW4oc2VwYXJhdG9yKTtcbiAgICB9XG4gICAgdXRpbC5qb2luVmFsdWVzID0gam9pblZhbHVlcztcbiAgICB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciA9IChfLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbn0pKHV0aWwgfHwgKHV0aWwgPSB7fSkpO1xudmFyIG9iamVjdFV0aWw7XG4oZnVuY3Rpb24gKG9iamVjdFV0aWwpIHtcbiAgICBvYmplY3RVdGlsLm1lcmdlU2hhcGVzID0gKGZpcnN0LCBzZWNvbmQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmZpcnN0LFxuICAgICAgICAgICAgLi4uc2Vjb25kLCAvLyBzZWNvbmQgb3ZlcndyaXRlcyBmaXJzdFxuICAgICAgICB9O1xuICAgIH07XG59KShvYmplY3RVdGlsIHx8IChvYmplY3RVdGlsID0ge30pKTtcbmNvbnN0IFpvZFBhcnNlZFR5cGUgPSB1dGlsLmFycmF5VG9FbnVtKFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibmFuXCIsXG4gICAgXCJudW1iZXJcIixcbiAgICBcImludGVnZXJcIixcbiAgICBcImZsb2F0XCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJkYXRlXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwiZnVuY3Rpb25cIixcbiAgICBcInVuZGVmaW5lZFwiLFxuICAgIFwibnVsbFwiLFxuICAgIFwiYXJyYXlcIixcbiAgICBcIm9iamVjdFwiLFxuICAgIFwidW5rbm93blwiLFxuICAgIFwicHJvbWlzZVwiLFxuICAgIFwidm9pZFwiLFxuICAgIFwibmV2ZXJcIixcbiAgICBcIm1hcFwiLFxuICAgIFwic2V0XCIsXG5dKTtcbmNvbnN0IGdldFBhcnNlZFR5cGUgPSAoZGF0YSkgPT4ge1xuICAgIGNvbnN0IHQgPSB0eXBlb2YgZGF0YTtcbiAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5zdHJpbmc7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBpc05hTihkYXRhKSA/IFpvZFBhcnNlZFR5cGUubmFuIDogWm9kUGFyc2VkVHlwZS5udW1iZXI7XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5ib29sZWFuO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uO1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5iaWdpbnQ7XG4gICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnN5bWJvbDtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5hcnJheTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUubnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLnRoZW4gJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS50aGVuID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICBkYXRhLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGRhdGEuY2F0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnByb21pc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUubWFwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBTZXQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgRGF0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5vYmplY3Q7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS51bmtub3duO1xuICAgIH1cbn07XG5cbmNvbnN0IFpvZElzc3VlQ29kZSA9IHV0aWwuYXJyYXlUb0VudW0oW1xuICAgIFwiaW52YWxpZF90eXBlXCIsXG4gICAgXCJpbnZhbGlkX2xpdGVyYWxcIixcbiAgICBcImN1c3RvbVwiLFxuICAgIFwiaW52YWxpZF91bmlvblwiLFxuICAgIFwiaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yXCIsXG4gICAgXCJpbnZhbGlkX2VudW1fdmFsdWVcIixcbiAgICBcInVucmVjb2duaXplZF9rZXlzXCIsXG4gICAgXCJpbnZhbGlkX2FyZ3VtZW50c1wiLFxuICAgIFwiaW52YWxpZF9yZXR1cm5fdHlwZVwiLFxuICAgIFwiaW52YWxpZF9kYXRlXCIsXG4gICAgXCJpbnZhbGlkX3N0cmluZ1wiLFxuICAgIFwidG9vX3NtYWxsXCIsXG4gICAgXCJ0b29fYmlnXCIsXG4gICAgXCJpbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlc1wiLFxuICAgIFwibm90X211bHRpcGxlX29mXCIsXG4gICAgXCJub3RfZmluaXRlXCIsXG5dKTtcbmNvbnN0IHF1b3RlbGVzc0pzb24gPSAob2JqKSA9PiB7XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7XG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvXCIoW15cIl0rKVwiOi9nLCBcIiQxOlwiKTtcbn07XG5jbGFzcyBab2RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihpc3N1ZXMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZSA9IChzdWIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCBzdWJdO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZElzc3VlcyA9IChzdWJzID0gW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNzdWVzID0gWy4uLnRoaXMuaXNzdWVzLCAuLi5zdWJzXTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWN0dWFsUHJvdG8gPSBuZXcudGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBhY3R1YWxQcm90byk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9fcHJvdG9fXyA9IGFjdHVhbFByb3RvO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICAgICAgdGhpcy5pc3N1ZXMgPSBpc3N1ZXM7XG4gICAgfVxuICAgIGdldCBlcnJvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzc3VlcztcbiAgICB9XG4gICAgZm9ybWF0KF9tYXBwZXIpIHtcbiAgICAgICAgY29uc3QgbWFwcGVyID0gX21hcHBlciB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGlzc3VlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc0Vycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfdW5pb25cIikge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZS51bmlvbkVycm9ycy5tYXAocHJvY2Vzc0Vycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3JldHVybl90eXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKGlzc3VlLnJldHVyblR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9hcmd1bWVudHNcIikge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoaXNzdWUuYXJndW1lbnRzRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgaXNzdWUucGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gaXNzdWUucGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsID0gaSA9PT0gaXNzdWUucGF0aC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmICh0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodHlwZW9mIGVsID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zdCBlcnJvckFycmF5OiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGVycm9yQXJyYXkuX2Vycm9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCBlcnJvckFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyW2VsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcHJvY2Vzc0Vycm9yKHRoaXMpO1xuICAgICAgICByZXR1cm4gZmllbGRFcnJvcnM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3NlcnQodmFsdWUpIHtcbiAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBab2RFcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGEgWm9kRXJyb3I6ICR7dmFsdWV9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7XG4gICAgfVxuICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5pc3N1ZXMsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIGZsYXR0ZW4obWFwcGVyID0gKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIGNvbnN0IGZvcm1FcnJvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5pc3N1ZXMpIHtcbiAgICAgICAgICAgIGlmIChzdWIucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dID0gZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dIHx8IFtdO1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXS5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcm1FcnJvcnMucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZm9ybUVycm9ycywgZmllbGRFcnJvcnMgfTtcbiAgICB9XG4gICAgZ2V0IGZvcm1FcnJvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYXR0ZW4oKTtcbiAgICB9XG59XG5ab2RFcnJvci5jcmVhdGUgPSAoaXNzdWVzKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoaXNzdWVzKTtcbiAgICByZXR1cm4gZXJyb3I7XG59O1xuXG5jb25zdCBlcnJvck1hcCA9IChpc3N1ZSwgX2N0eCkgPT4ge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIHN3aXRjaCAoaXNzdWUuY29kZSkge1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGU6XG4gICAgICAgICAgICBpZiAoaXNzdWUucmVjZWl2ZWQgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiUmVxdWlyZWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRXhwZWN0ZWQgJHtpc3N1ZS5leHBlY3RlZH0sIHJlY2VpdmVkICR7aXNzdWUucmVjZWl2ZWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2xpdGVyYWw6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgbGl0ZXJhbCB2YWx1ZSwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShpc3N1ZS5leHBlY3RlZCwgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudW5yZWNvZ25pemVkX2tleXM6XG4gICAgICAgICAgICBtZXNzYWdlID0gYFVucmVjb2duaXplZCBrZXkocykgaW4gb2JqZWN0OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dGA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLm9wdGlvbnMpfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGVudW0gdmFsdWUuIEV4cGVjdGVkICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLm9wdGlvbnMpfSwgcmVjZWl2ZWQgJyR7aXNzdWUucmVjZWl2ZWR9J2A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9hcmd1bWVudHM6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZnVuY3Rpb24gYXJndW1lbnRzYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3JldHVybl90eXBlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGZ1bmN0aW9uIHJldHVybiB0eXBlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2RhdGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZGF0ZWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmc6XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlLnZhbGlkYXRpb24gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJpbmNsdWRlc1wiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IGluY2x1ZGUgXCIke2lzc3VlLnZhbGlkYXRpb24uaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlLnZhbGlkYXRpb24ucG9zaXRpb24gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgJHttZXNzYWdlfSBhdCBvbmUgb3IgbW9yZSBwb3NpdGlvbnMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7aXNzdWUudmFsaWRhdGlvbi5wb3NpdGlvbn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwic3RhcnRzV2l0aFwiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IHN0YXJ0IHdpdGggXCIke2lzc3VlLnZhbGlkYXRpb24uc3RhcnRzV2l0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFwiZW5kc1dpdGhcIiBpbiBpc3N1ZS52YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dDogbXVzdCBlbmQgd2l0aCBcIiR7aXNzdWUudmFsaWRhdGlvbi5lbmRzV2l0aH1cImA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlLnZhbGlkYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnZhbGlkYXRpb24gIT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCAke2lzc3VlLnZhbGlkYXRpb259YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS50b29fc21hbGw6XG4gICAgICAgICAgICBpZiAoaXNzdWUudHlwZSA9PT0gXCJhcnJheVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgQXJyYXkgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBcImV4YWN0bHlcIiA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBsZWFzdGAgOiBgbW9yZSB0aGFuYH0gJHtpc3N1ZS5taW5pbXVtfSBlbGVtZW50KHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBTdHJpbmcgbXVzdCBjb250YWluICR7aXNzdWUuZXhhY3QgPyBcImV4YWN0bHlcIiA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBsZWFzdGAgOiBgb3ZlcmB9ICR7aXNzdWUubWluaW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHkgZXF1YWwgdG8gYFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYGdyZWF0ZXIgdGhhbiBgfSR7aXNzdWUubWluaW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBEYXRlIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5IGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBncmVhdGVyIHRoYW4gYH0ke25ldyBEYXRlKE51bWJlcihpc3N1ZS5taW5pbXVtKSl9YDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUudG9vX2JpZzpcbiAgICAgICAgICAgIGlmIChpc3N1ZS50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBcnJheSBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19IGVsZW1lbnQocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYFN0cmluZyBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IGBleGFjdGx5YCA6IGlzc3VlLmluY2x1c2l2ZSA/IGBhdCBtb3N0YCA6IGB1bmRlcmB9ICR7aXNzdWUubWF4aW11bX0gY2hhcmFjdGVyKHMpYDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBOdW1iZXIgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiYmlnaW50XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBCaWdJbnQgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHlgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBsZXNzIHRoYW4gb3IgZXF1YWwgdG9gXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGBsZXNzIHRoYW5gfSAke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnR5cGUgPT09IFwiZGF0ZVwiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgRGF0ZSBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseWBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0b2BcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYHNtYWxsZXIgdGhhbmB9ICR7bmV3IERhdGUoTnVtYmVyKGlzc3VlLm1heGltdW0pKX1gO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5jdXN0b206XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnRlcnNlY3Rpb24gcmVzdWx0cyBjb3VsZCBub3QgYmUgbWVyZ2VkYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2Y6XG4gICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHtpc3N1ZS5tdWx0aXBsZU9mfWA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUubm90X2Zpbml0ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIk51bWJlciBtdXN0IGJlIGZpbml0ZVwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBtZXNzYWdlID0gX2N0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGlzc3VlKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbWVzc2FnZSB9O1xufTtcblxubGV0IG92ZXJyaWRlRXJyb3JNYXAgPSBlcnJvck1hcDtcbmZ1bmN0aW9uIHNldEVycm9yTWFwKG1hcCkge1xuICAgIG92ZXJyaWRlRXJyb3JNYXAgPSBtYXA7XG59XG5mdW5jdGlvbiBnZXRFcnJvck1hcCgpIHtcbiAgICByZXR1cm4gb3ZlcnJpZGVFcnJvck1hcDtcbn1cblxuY29uc3QgbWFrZUlzc3VlID0gKHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgcGF0aCwgZXJyb3JNYXBzLCBpc3N1ZURhdGEgfSA9IHBhcmFtcztcbiAgICBjb25zdCBmdWxsUGF0aCA9IFsuLi5wYXRoLCAuLi4oaXNzdWVEYXRhLnBhdGggfHwgW10pXTtcbiAgICBjb25zdCBmdWxsSXNzdWUgPSB7XG4gICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgfTtcbiAgICBpZiAoaXNzdWVEYXRhLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uaXNzdWVEYXRhLFxuICAgICAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICAgICAgICBtZXNzYWdlOiBpc3N1ZURhdGEubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgY29uc3QgbWFwcyA9IGVycm9yTWFwc1xuICAgICAgICAuZmlsdGVyKChtKSA9PiAhIW0pXG4gICAgICAgIC5zbGljZSgpXG4gICAgICAgIC5yZXZlcnNlKCk7XG4gICAgZm9yIChjb25zdCBtYXAgb2YgbWFwcykge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBtYXAoZnVsbElzc3VlLCB7IGRhdGEsIGRlZmF1bHRFcnJvcjogZXJyb3JNZXNzYWdlIH0pLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlzc3VlRGF0YSxcbiAgICAgICAgcGF0aDogZnVsbFBhdGgsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICB9O1xufTtcbmNvbnN0IEVNUFRZX1BBVEggPSBbXTtcbmZ1bmN0aW9uIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgaXNzdWVEYXRhKSB7XG4gICAgY29uc3Qgb3ZlcnJpZGVNYXAgPSBnZXRFcnJvck1hcCgpO1xuICAgIGNvbnN0IGlzc3VlID0gbWFrZUlzc3VlKHtcbiAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZURhdGEsXG4gICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCxcbiAgICAgICAgICAgIG92ZXJyaWRlTWFwLFxuICAgICAgICAgICAgb3ZlcnJpZGVNYXAgPT09IGVycm9yTWFwID8gdW5kZWZpbmVkIDogZXJyb3JNYXAsIC8vIHRoZW4gZ2xvYmFsIGRlZmF1bHQgbWFwXG4gICAgICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgIH0pO1xuICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goaXNzdWUpO1xufVxuY2xhc3MgUGFyc2VTdGF0dXMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gXCJ2YWxpZFwiO1xuICAgIH1cbiAgICBkaXJ0eSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IFwidmFsaWRcIilcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBcImRpcnR5XCI7XG4gICAgfVxuICAgIGFib3J0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJhYm9ydGVkXCI7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0cykge1xuICAgICAgICBjb25zdCBhcnJheVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocy5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKHMuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICBhcnJheVZhbHVlLnB1c2gocy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBhcnJheVZhbHVlIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBtZXJnZU9iamVjdEFzeW5jKHN0YXR1cywgcGFpcnMpIHtcbiAgICAgICAgY29uc3Qgc3luY1BhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgcGFpci5rZXk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgfVxuICAgIHN0YXRpYyBtZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycykge1xuICAgICAgICBjb25zdCBmaW5hbE9iamVjdCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcGFpcjtcbiAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGlmIChrZXkudmFsdWUgIT09IFwiX19wcm90b19fXCIgJiZcbiAgICAgICAgICAgICAgICAodHlwZW9mIHZhbHVlLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiIHx8IHBhaXIuYWx3YXlzU2V0KSkge1xuICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0W2tleS52YWx1ZV0gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsT2JqZWN0IH07XG4gICAgfVxufVxuY29uc3QgSU5WQUxJRCA9IE9iamVjdC5mcmVlemUoe1xuICAgIHN0YXR1czogXCJhYm9ydGVkXCIsXG59KTtcbmNvbnN0IERJUlRZID0gKHZhbHVlKSA9PiAoeyBzdGF0dXM6IFwiZGlydHlcIiwgdmFsdWUgfSk7XG5jb25zdCBPSyA9ICh2YWx1ZSkgPT4gKHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlIH0pO1xuY29uc3QgaXNBYm9ydGVkID0gKHgpID0+IHguc3RhdHVzID09PSBcImFib3J0ZWRcIjtcbmNvbnN0IGlzRGlydHkgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiZGlydHlcIjtcbmNvbnN0IGlzVmFsaWQgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwidmFsaWRcIjtcbmNvbnN0IGlzQXN5bmMgPSAoeCkgPT4gdHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgeCBpbnN0YW5jZW9mIFByb21pc2U7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG52YXIgZXJyb3JVdGlsO1xuKGZ1bmN0aW9uIChlcnJvclV0aWwpIHtcbiAgICBlcnJvclV0aWwuZXJyVG9PYmogPSAobWVzc2FnZSkgPT4gdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyB7IG1lc3NhZ2UgfSA6IG1lc3NhZ2UgfHwge307XG4gICAgZXJyb3JVdGlsLnRvU3RyaW5nID0gKG1lc3NhZ2UpID0+IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5tZXNzYWdlO1xufSkoZXJyb3JVdGlsIHx8IChlcnJvclV0aWwgPSB7fSkpO1xuXG52YXIgX1pvZEVudW1fY2FjaGUsIF9ab2ROYXRpdmVFbnVtX2NhY2hlO1xuY2xhc3MgUGFyc2VJbnB1dExhenlQYXRoIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQsIHZhbHVlLCBwYXRoLCBrZXkpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkUGF0aCA9IFtdO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5kYXRhID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3BhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLl9rZXkgPSBrZXk7XG4gICAgfVxuICAgIGdldCBwYXRoKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NhY2hlZFBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fa2V5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCwgLi4udGhpcy5fa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLCB0aGlzLl9rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRQYXRoO1xuICAgIH1cbn1cbmNvbnN0IGhhbmRsZVJlc3VsdCA9IChjdHgsIHJlc3VsdCkgPT4ge1xuICAgIGlmIChpc1ZhbGlkKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LnZhbHVlIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoIWN0eC5jb21tb24uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVmFsaWRhdGlvbiBmYWlsZWQgYnV0IG5vIGlzc3VlcyBkZXRlY3RlZC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lcnJvcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKGN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufTtcbmZ1bmN0aW9uIHByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSB7XG4gICAgaWYgKCFwYXJhbXMpXG4gICAgICAgIHJldHVybiB7fTtcbiAgICBjb25zdCB7IGVycm9yTWFwLCBpbnZhbGlkX3R5cGVfZXJyb3IsIHJlcXVpcmVkX2Vycm9yLCBkZXNjcmlwdGlvbiB9ID0gcGFyYW1zO1xuICAgIGlmIChlcnJvck1hcCAmJiAoaW52YWxpZF90eXBlX2Vycm9yIHx8IHJlcXVpcmVkX2Vycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IHVzZSBcImludmFsaWRfdHlwZV9lcnJvclwiIG9yIFwicmVxdWlyZWRfZXJyb3JcIiBpbiBjb25qdW5jdGlvbiB3aXRoIGN1c3RvbSBlcnJvciBtYXAuYCk7XG4gICAgfVxuICAgIGlmIChlcnJvck1hcClcbiAgICAgICAgcmV0dXJuIHsgZXJyb3JNYXA6IGVycm9yTWFwLCBkZXNjcmlwdGlvbiB9O1xuICAgIGNvbnN0IGN1c3RvbU1hcCA9IChpc3MsIGN0eCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IHBhcmFtcztcbiAgICAgICAgaWYgKGlzcy5jb2RlID09PSBcImludmFsaWRfZW51bV92YWx1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjdHguZGF0YSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogKF9hID0gbWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogcmVxdWlyZWRfZXJyb3IpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNzLmNvZGUgIT09IFwiaW52YWxpZF90eXBlXCIpXG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IChfYiA9IG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6IGludmFsaWRfdHlwZV9lcnJvcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgZXJyb3JNYXA6IGN1c3RvbU1hcCwgZGVzY3JpcHRpb24gfTtcbn1cbmNsYXNzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKGRlZikge1xuICAgICAgICAvKiogQWxpYXMgb2Ygc2FmZVBhcnNlQXN5bmMgKi9cbiAgICAgICAgdGhpcy5zcGEgPSB0aGlzLnNhZmVQYXJzZUFzeW5jO1xuICAgICAgICB0aGlzLl9kZWYgPSBkZWY7XG4gICAgICAgIHRoaXMucGFyc2UgPSB0aGlzLnBhcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2FmZVBhcnNlID0gdGhpcy5zYWZlUGFyc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5wYXJzZUFzeW5jID0gdGhpcy5wYXJzZUFzeW5jLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2FmZVBhcnNlQXN5bmMgPSB0aGlzLnNhZmVQYXJzZUFzeW5jLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3BhID0gdGhpcy5zcGEuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZpbmUgPSB0aGlzLnJlZmluZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlZmluZW1lbnQgPSB0aGlzLnJlZmluZW1lbnQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zdXBlclJlZmluZSA9IHRoaXMuc3VwZXJSZWZpbmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vcHRpb25hbCA9IHRoaXMub3B0aW9uYWwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5udWxsYWJsZSA9IHRoaXMubnVsbGFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5udWxsaXNoID0gdGhpcy5udWxsaXNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYXJyYXkgPSB0aGlzLmFycmF5LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucHJvbWlzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9yID0gdGhpcy5vci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFuZCA9IHRoaXMuYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm0uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5icmFuZCA9IHRoaXMuYnJhbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0ID0gdGhpcy5kZWZhdWx0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuY2F0Y2ggPSB0aGlzLmNhdGNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVzY3JpYmUgPSB0aGlzLmRlc2NyaWJlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGlwZSA9IHRoaXMucGlwZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmlzTnVsbGFibGUgPSB0aGlzLmlzTnVsbGFibGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc09wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgX2dldFR5cGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNlZFR5cGUoaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIF9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KSB7XG4gICAgICAgIHJldHVybiAoY3R4IHx8IHtcbiAgICAgICAgICAgIGNvbW1vbjogaW5wdXQucGFyZW50LmNvbW1vbixcbiAgICAgICAgICAgIGRhdGE6IGlucHV0LmRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhdGg6IGlucHV0LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGlucHV0LnBhcmVudCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogbmV3IFBhcnNlU3RhdHVzKCksXG4gICAgICAgICAgICBjdHg6IHtcbiAgICAgICAgICAgICAgICBjb21tb246IGlucHV0LnBhcmVudC5jb21tb24sXG4gICAgICAgICAgICAgICAgZGF0YTogaW5wdXQuZGF0YSxcbiAgICAgICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGlucHV0LmRhdGEpLFxuICAgICAgICAgICAgICAgIHNjaGVtYUVycm9yTWFwOiB0aGlzLl9kZWYuZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgcGF0aDogaW5wdXQucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGlucHV0LnBhcmVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9wYXJzZVN5bmMoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAoaXNBc3luYyhyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTeW5jaHJvbm91cyBwYXJzZSBlbmNvdW50ZXJlZCBwcm9taXNlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfcGFyc2VBc3luYyhpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICB9XG4gICAgcGFyc2UoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2FmZVBhcnNlKGRhdGEsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBzYWZlUGFyc2UoZGF0YSwgcGFyYW1zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBhc3luYzogKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmFzeW5jKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5lcnJvck1hcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhdGgpIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZVN5bmMoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGVSZXN1bHQoY3R4LCByZXN1bHQpO1xuICAgIH1cbiAgICBhc3luYyBwYXJzZUFzeW5jKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNhZmVQYXJzZUFzeW5jKGRhdGEsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBhc3luYyBzYWZlUGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5lcnJvck1hcCxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhdGgpIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtYXliZUFzeW5jUmVzdWx0ID0gdGhpcy5fcGFyc2UoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChpc0FzeW5jKG1heWJlQXN5bmNSZXN1bHQpXG4gICAgICAgICAgICA/IG1heWJlQXN5bmNSZXN1bHRcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKG1heWJlQXN5bmNSZXN1bHQpKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJlZmluZShjaGVjaywgbWVzc2FnZSkge1xuICAgICAgICBjb25zdCBnZXRJc3N1ZVByb3BlcnRpZXMgPSAodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1lc3NhZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNoZWNrKHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzZXRFcnJvciA9ICgpID0+IGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgICAgICAuLi5nZXRJc3N1ZVByb3BlcnRpZXModmFsKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZmluZW1lbnQoY2hlY2ssIHJlZmluZW1lbnREYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KCh2YWwsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGVjayh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHR5cGVvZiByZWZpbmVtZW50RGF0YSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVmaW5lbWVudERhdGEodmFsLCBjdHgpXG4gICAgICAgICAgICAgICAgICAgIDogcmVmaW5lbWVudERhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlZmluZW1lbnQocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwicmVmaW5lbWVudFwiLCByZWZpbmVtZW50IH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdXBlclJlZmluZShyZWZpbmVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KHJlZmluZW1lbnQpO1xuICAgIH1cbiAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgcmV0dXJuIFpvZE9wdGlvbmFsLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZE51bGxhYmxlLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBudWxsaXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5udWxsYWJsZSgpLm9wdGlvbmFsKCk7XG4gICAgfVxuICAgIGFycmF5KCkge1xuICAgICAgICByZXR1cm4gWm9kQXJyYXkuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBab2RQcm9taXNlLmNyZWF0ZSh0aGlzLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBvcihvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIFpvZFVuaW9uLmNyZWF0ZShbdGhpcywgb3B0aW9uXSwgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgYW5kKGluY29taW5nKSB7XG4gICAgICAgIHJldHVybiBab2RJbnRlcnNlY3Rpb24uY3JlYXRlKHRoaXMsIGluY29taW5nLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgICAgICBlZmZlY3Q6IHsgdHlwZTogXCJ0cmFuc2Zvcm1cIiwgdHJhbnNmb3JtIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZhdWx0KGRlZikge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgaW5uZXJUeXBlOiB0aGlzLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYnJhbmQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQnJhbmRlZCh7XG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJyYW5kZWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2goZGVmKSB7XG4gICAgICAgIGNvbnN0IGNhdGNoVmFsdWVGdW5jID0gdHlwZW9mIGRlZiA9PT0gXCJmdW5jdGlvblwiID8gZGVmIDogKCkgPT4gZGVmO1xuICAgICAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIGlubmVyVHlwZTogdGhpcyxcbiAgICAgICAgICAgIGNhdGNoVmFsdWU6IGNhdGNoVmFsdWVGdW5jLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RDYXRjaCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IFRoaXMgPSB0aGlzLmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gbmV3IFRoaXMoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwaXBlKHRhcmdldCkge1xuICAgICAgICByZXR1cm4gWm9kUGlwZWxpbmUuY3JlYXRlKHRoaXMsIHRhcmdldCk7XG4gICAgfVxuICAgIHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gWm9kUmVhZG9ubHkuY3JlYXRlKHRoaXMpO1xuICAgIH1cbiAgICBpc09wdGlvbmFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UodW5kZWZpbmVkKS5zdWNjZXNzO1xuICAgIH1cbiAgICBpc051bGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2VzcztcbiAgICB9XG59XG5jb25zdCBjdWlkUmVnZXggPSAvXmNbXlxccy1dezgsfSQvaTtcbmNvbnN0IGN1aWQyUmVnZXggPSAvXlswLTlhLXpdKyQvO1xuY29uc3QgdWxpZFJlZ2V4ID0gL15bMC05QS1ISktNTlAtVFYtWl17MjZ9JC87XG4vLyBjb25zdCB1dWlkUmVnZXggPVxuLy8gICAvXihbYS1mMC05XXs4fS1bYS1mMC05XXs0fS1bMS01XVthLWYwLTldezN9LVthLWYwLTldezR9LVthLWYwLTldezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuY29uc3QgdXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kL2k7XG5jb25zdCBuYW5vaWRSZWdleCA9IC9eW2EtejAtOV8tXXsyMX0kL2k7XG5jb25zdCBkdXJhdGlvblJlZ2V4ID0gL15bLStdP1AoPyEkKSg/Oig/OlstK10/XFxkK1kpfCg/OlstK10/XFxkK1suLF1cXGQrWSQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86KD86Wy0rXT9cXGQrVyl8KD86Wy0rXT9cXGQrWy4sXVxcZCtXJCkpPyg/Oig/OlstK10/XFxkK0QpfCg/OlstK10/XFxkK1suLF1cXGQrRCQpKT8oPzpUKD89W1xcZCstXSkoPzooPzpbLStdP1xcZCtIKXwoPzpbLStdP1xcZCtbLixdXFxkK0gkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/OlstK10/XFxkKyg/OlsuLF1cXGQrKT9TKT8pPz8kLztcbi8vIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2MTgxLzE1NTAxNTVcbi8vIG9sZCB2ZXJzaW9uOiB0b28gc2xvdywgZGlkbid0IHN1cHBvcnQgdW5pY29kZVxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSQvaTtcbi8vb2xkIGVtYWlsIHJlZ2V4XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID0gL14oKFtePD4oKVtcXF0uLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXS4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKCg/IS0pKFtePD4oKVtcXF0uLDs6XFxzQFwiXStcXC4pK1tePD4oKVtcXF0uLDs6XFxzQFwiXXsxLH0pW14tPD4oKVtcXF0uLDs6XFxzQFwiXSQvaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcWygoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcXSl8KFxcW0lQdjY6KChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXFwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKVxcXSl8KFtBLVphLXowLTldKFtBLVphLXowLTktXSpbQS1aYS16MC05XSkqKFxcLltBLVphLXpdezIsfSkrKSkkLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXpBLVowLTlcXC5cXCFcXCNcXCRcXCVcXCZcXCdcXCpcXCtcXC9cXD1cXD9cXF5cXF9cXGBcXHtcXHxcXH1cXH5cXC1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKD86W2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKnxcIig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKlwiKUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/fFxcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/fFthLXowLTktXSpbYS16MC05XTooPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMS1cXHg1YVxceDUzLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkrKVxcXSkkL2k7XG5jb25zdCBlbWFpbFJlZ2V4ID0gL14oPyFcXC4pKD8hLipcXC5cXC4pKFtBLVowLTlfJytcXC1cXC5dKilbQS1aMC05XystXUAoW0EtWjAtOV1bQS1aMC05XFwtXSpcXC4pK1tBLVpdezIsfSQvaTtcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXowLTkuISMkJSbigJkqKy89P15fYHt8fX4tXStAW2EtejAtOS1dKyg/OlxcLlthLXowLTlcXC1dKykqJC9pO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamlSZWdleCA9IGBeKFxcXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY318XFxcXHB7RW1vamlfQ29tcG9uZW50fSkrJGA7XG5sZXQgZW1vamlSZWdleDtcbi8vIGZhc3Rlciwgc2ltcGxlciwgc2FmZXJcbmNvbnN0IGlwdjRSZWdleCA9IC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC87XG5jb25zdCBpcHY2UmVnZXggPSAvXigoW2EtZjAtOV17MSw0fTopezd9fDo6KFthLWYwLTldezEsNH06KXswLDZ9fChbYS1mMC05XXsxLDR9Oil7MX06KFthLWYwLTldezEsNH06KXswLDV9fChbYS1mMC05XXsxLDR9Oil7Mn06KFthLWYwLTldezEsNH06KXswLDR9fChbYS1mMC05XXsxLDR9Oil7M306KFthLWYwLTldezEsNH06KXswLDN9fChbYS1mMC05XXsxLDR9Oil7NH06KFthLWYwLTldezEsNH06KXswLDJ9fChbYS1mMC05XXsxLDR9Oil7NX06KFthLWYwLTldezEsNH06KXswLDF9KShbYS1mMC05XXsxLDR9fCgoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSkkLztcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc4NjAzOTIvZGV0ZXJtaW5lLWlmLXN0cmluZy1pcy1pbi1iYXNlNjQtdXNpbmctamF2YXNjcmlwdFxuY29uc3QgYmFzZTY0UmVnZXggPSAvXihbMC05YS16QS1aKy9dezR9KSooKFswLTlhLXpBLVorL117Mn09PSl8KFswLTlhLXpBLVorL117M309KSk/JC87XG4vLyBzaW1wbGVcbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfWA7XG4vLyBubyBsZWFwIHllYXIgdmFsaWRhdGlvblxuLy8gY29uc3QgZGF0ZVJlZ2V4U291cmNlID0gYFxcXFxkezR9LSgoMFsxMzU3OF18MTB8MTIpLTMxfCgwWzEzLTldfDFbMC0yXSktMzB8KDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVxcXFxkfDJcXFxcZCkpYDtcbi8vIHdpdGggbGVhcCB5ZWFyIHZhbGlkYXRpb25cbmNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZGF0ZVJlZ2V4U291cmNlfSRgKTtcbmZ1bmN0aW9uIHRpbWVSZWdleFNvdXJjZShhcmdzKSB7XG4gICAgLy8gbGV0IHJlZ2V4ID0gYFxcXFxkezJ9OlxcXFxkezJ9OlxcXFxkezJ9YDtcbiAgICBsZXQgcmVnZXggPSBgKFswMV1cXFxcZHwyWzAtM10pOlswLTVdXFxcXGQ6WzAtNV1cXFxcZGA7XG4gICAgaWYgKGFyZ3MucHJlY2lzaW9uKSB7XG4gICAgICAgIHJlZ2V4ID0gYCR7cmVnZXh9XFxcXC5cXFxcZHske2FyZ3MucHJlY2lzaW9ufX1gO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmdzLnByZWNpc2lvbiA9PSBudWxsKSB7XG4gICAgICAgIHJlZ2V4ID0gYCR7cmVnZXh9KFxcXFwuXFxcXGQrKT9gO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXg7XG59XG5mdW5jdGlvbiB0aW1lUmVnZXgoYXJncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHt0aW1lUmVnZXhTb3VyY2UoYXJncyl9JGApO1xufVxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTQzMjMxXG5mdW5jdGlvbiBkYXRldGltZVJlZ2V4KGFyZ3MpIHtcbiAgICBsZXQgcmVnZXggPSBgJHtkYXRlUmVnZXhTb3VyY2V9VCR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfWA7XG4gICAgY29uc3Qgb3B0cyA9IFtdO1xuICAgIG9wdHMucHVzaChhcmdzLmxvY2FsID8gYFo/YCA6IGBaYCk7XG4gICAgaWYgKGFyZ3Mub2Zmc2V0KVxuICAgICAgICBvcHRzLnB1c2goYChbKy1dXFxcXGR7Mn06P1xcXFxkezJ9KWApO1xuICAgIHJlZ2V4ID0gYCR7cmVnZXh9KCR7b3B0cy5qb2luKFwifFwiKX0pYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufVxuZnVuY3Rpb24gaXNWYWxpZElQKGlwLCB2ZXJzaW9uKSB7XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY0XCIgfHwgIXZlcnNpb24pICYmIGlwdjRSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY2XCIgfHwgIXZlcnNpb24pICYmIGlwdjZSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuY2xhc3MgWm9kU3RyaW5nIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gU3RyaW5nKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3RyaW5nKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnN0cmluZyxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG5ldyBQYXJzZVN0YXR1cygpO1xuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaGVjay5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEubGVuZ3RoIDwgY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEubGVuZ3RoID4gY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJsZW5ndGhcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGlucHV0LmRhdGEubGVuZ3RoID4gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vU21hbGwgPSBpbnB1dC5kYXRhLmxlbmd0aCA8IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcgfHwgdG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJlbWFpbFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFlbWFpbFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJlbWFpbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW1vamlcIikge1xuICAgICAgICAgICAgICAgIGlmICghZW1vamlSZWdleCkge1xuICAgICAgICAgICAgICAgICAgICBlbW9qaVJlZ2V4ID0gbmV3IFJlZ0V4cChfZW1vamlSZWdleCwgXCJ1XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWVtb2ppUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImVtb2ppXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1dWlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXV1aWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidXVpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibmFub2lkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbm9pZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJuYW5vaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImN1aWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghY3VpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJjdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjdWlkMlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdWlkMlJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJjdWlkMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bGlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInVsaWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInVybFwiKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFVSTChpbnB1dC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJyZWdleFwiKSB7XG4gICAgICAgICAgICAgICAgY2hlY2sucmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gY2hlY2sucmVnZXgudGVzdChpbnB1dC5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJyZWdleFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidHJpbVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJpbmNsdWRlc1wiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLmluY2x1ZGVzKGNoZWNrLnZhbHVlLCBjaGVjay5wb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBpbmNsdWRlczogY2hlY2sudmFsdWUsIHBvc2l0aW9uOiBjaGVjay5wb3NpdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidG9Mb3dlckNhc2VcIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRvVXBwZXJDYXNlXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJzdGFydHNXaXRoXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuc3RhcnRzV2l0aChjaGVjay52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBzdGFydHNXaXRoOiBjaGVjay52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW5kc1dpdGhcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5lbmRzV2l0aChjaGVjay52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogeyBlbmRzV2l0aDogY2hlY2sudmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImRhdGV0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IGRhdGV0aW1lUmVnZXgoY2hlY2spO1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IGRhdGVSZWdleDtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IHRpbWVSZWdleChjaGVjayk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwidGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZHVyYXRpb25cIikge1xuICAgICAgICAgICAgICAgIGlmICghZHVyYXRpb25SZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZHVyYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImlwXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRJUChpbnB1dC5kYXRhLCBjaGVjay52ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImlwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZTY0UmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImJhc2U2NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBfcmVnZXgocmVnZXgsIHZhbGlkYXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmaW5lbWVudCgoZGF0YSkgPT4gcmVnZXgudGVzdChkYXRhKSwge1xuICAgICAgICAgICAgdmFsaWRhdGlvbixcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbWFpbChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1haWxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1cmwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcInVybFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGVtb2ppKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJlbW9qaVwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHV1aWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcInV1aWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBuYW5vaWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcIm5hbm9pZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGN1aWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkMihtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiY3VpZDJcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1bGlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1bGlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgYmFzZTY0KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJiYXNlNjRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBpcChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiaXBcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMpIH0pO1xuICAgIH1cbiAgICBkYXRldGltZShvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgICAgICBraW5kOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbG9jYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24pID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICBvZmZzZXQ6IChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vZmZzZXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAgICAgbG9jYWw6IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5sb2NhbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2UsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGF0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZGF0ZVwiLCBtZXNzYWdlIH0pO1xuICAgIH1cbiAgICB0aW1lKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwidGltZVwiLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24pID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wcmVjaXNpb24sXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZHVyYXRpb24obWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImR1cmF0aW9uXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgcmVnZXgocmVnZXgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwicmVnZXhcIixcbiAgICAgICAgICAgIHJlZ2V4OiByZWdleCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGluY2x1ZGVzKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImluY2x1ZGVzXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBwb3NpdGlvbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBvc2l0aW9uLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0YXJ0c1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwic3RhcnRzV2l0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW5kc1dpdGgodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZW5kc1dpdGhcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1pbihtaW5MZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluTGVuZ3RoLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heExlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhMZW5ndGgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZW5ndGgobGVuLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImxlbmd0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IGxlbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB6LnN0cmluZygpLm1pbigxKSBpbnN0ZWFkLlxuICAgICAqIEBzZWUge0BsaW5rIFpvZFN0cmluZy5taW59XG4gICAgICovXG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgdHJpbSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgeyBraW5kOiBcInRyaW1cIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvTG93ZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9Mb3dlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvVXBwZXJDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidG9VcHBlckNhc2VcIiB9XSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBpc0RhdGV0aW1lKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGV0aW1lXCIpO1xuICAgIH1cbiAgICBnZXQgaXNEYXRlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImRhdGVcIik7XG4gICAgfVxuICAgIGdldCBpc1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidGltZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRHVyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZHVyYXRpb25cIik7XG4gICAgfVxuICAgIGdldCBpc0VtYWlsKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImVtYWlsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVUkwoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidXJsXCIpO1xuICAgIH1cbiAgICBnZXQgaXNFbW9qaSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJlbW9qaVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVVVJRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1dWlkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNOQU5PSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwibmFub2lkXCIpO1xuICAgIH1cbiAgICBnZXQgaXNDVUlEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWRcIik7XG4gICAgfVxuICAgIGdldCBpc0NVSUQyKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImN1aWQyXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVTElEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInVsaWRcIik7XG4gICAgfVxuICAgIGdldCBpc0lQKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImlwXCIpO1xuICAgIH1cbiAgICBnZXQgaXNCYXNlNjQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiYmFzZTY0XCIpO1xuICAgIH1cbiAgICBnZXQgbWluTGVuZ3RoKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhMZW5ndGgoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG59XG5ab2RTdHJpbmcuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kU3RyaW5nLFxuICAgICAgICBjb2VyY2U6IChfYSA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzk2NjQ4NC93aHktZG9lcy1tb2R1bHVzLW9wZXJhdG9yLXJldHVybi1mcmFjdGlvbmFsLW51bWJlci1pbi1qYXZhc2NyaXB0LzMxNzExMDM0IzMxNzExMDM0XG5mdW5jdGlvbiBmbG9hdFNhZmVSZW1haW5kZXIodmFsLCBzdGVwKSB7XG4gICAgY29uc3QgdmFsRGVjQ291bnQgPSAodmFsLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbiAgICBjb25zdCBzdGVwRGVjQ291bnQgPSAoc3RlcC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3QgZGVjQ291bnQgPSB2YWxEZWNDb3VudCA+IHN0ZXBEZWNDb3VudCA/IHZhbERlY0NvdW50IDogc3RlcERlY0NvdW50O1xuICAgIGNvbnN0IHZhbEludCA9IHBhcnNlSW50KHZhbC50b0ZpeGVkKGRlY0NvdW50KS5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XG4gICAgY29uc3Qgc3RlcEludCA9IHBhcnNlSW50KHN0ZXAudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIHJldHVybiAodmFsSW50ICUgc3RlcEludCkgLyBNYXRoLnBvdygxMCwgZGVjQ291bnQpO1xufVxuY2xhc3MgWm9kTnVtYmVyIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubWluID0gdGhpcy5ndGU7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5sdGU7XG4gICAgICAgIHRoaXMuc3RlcCA9IHRoaXMubXVsdGlwbGVPZjtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gTnVtYmVyKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm51bWJlcixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IG5ldyBQYXJzZVN0YXR1cygpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaGVjay5raW5kID09PSBcImludFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzSW50ZWdlcihpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IFwiZmxvYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9vU21hbGwgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhIDwgY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhIDw9IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBjaGVjay5pbmNsdXNpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGNoZWNrLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LmRhdGEgPiBjaGVjay52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGlucHV0LmRhdGEgPj0gY2hlY2sudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHRvb0JpZykge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibXVsdGlwbGVPZlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZsb2F0U2FmZVJlbWFpbmRlcihpbnB1dC5kYXRhLCBjaGVjay52YWx1ZSkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZixcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlT2Y6IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZmluaXRlXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X2Zpbml0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB1dGlsLmFzc2VydE5ldmVyKGNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgZ3RlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBndCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBzZXRMaW1pdChraW5kLCB2YWx1ZSwgaW5jbHVzaXZlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5jaGVja3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2ROdW1iZXIoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW50KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiaW50XCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbnBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbm5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG11bHRpcGxlT2YodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibXVsdGlwbGVPZlwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmluaXRlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiZmluaXRlXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzYWZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbiAgICBnZXQgaXNJbnQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiaW50XCIgfHxcbiAgICAgICAgICAgIChjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIiAmJiB1dGlsLmlzSW50ZWdlcihjaC52YWx1ZSkpKTtcbiAgICB9XG4gICAgZ2V0IGlzRmluaXRlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbCwgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJmaW5pdGVcIiB8fFxuICAgICAgICAgICAgICAgIGNoLmtpbmQgPT09IFwiaW50XCIgfHxcbiAgICAgICAgICAgICAgICBjaC5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobWluKSAmJiBOdW1iZXIuaXNGaW5pdGUobWF4KTtcbiAgICB9XG59XG5ab2ROdW1iZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdW1iZXIsXG4gICAgICAgIGNvZXJjZTogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpIHx8IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQmlnSW50IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubWluID0gdGhpcy5ndGU7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5sdGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IEJpZ0ludChpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJpZ2ludCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5iaWdpbnQsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhICUgY2hlY2sudmFsdWUgIT09IEJpZ0ludCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVPZjogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEJpZ0ludCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbnBvc2l0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogQmlnSW50KDApLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ubmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG1pblZhbHVlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW47XG4gICAgfVxuICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4O1xuICAgIH1cbn1cblpvZEJpZ0ludC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCaWdJbnQsXG4gICAgICAgIGNvZXJjZTogKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RCb29sZWFuIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gQm9vbGVhbihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmJvb2xlYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RCb29sZWFuLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEJvb2xlYW4oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJvb2xlYW4sXG4gICAgICAgIGNvZXJjZTogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpIHx8IGZhbHNlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRGF0ZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IG5ldyBEYXRlKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5kYXRlLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKGlucHV0LmRhdGEuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHVzID0gbmV3IFBhcnNlU3RhdHVzKCk7XG4gICAgICAgIGxldCBjdHggPSB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoZWNrLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5nZXRUaW1lKCkgPCBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0LmRhdGEuZ2V0VGltZSgpID4gY2hlY2sudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgRGF0ZShpbnB1dC5kYXRhLmdldFRpbWUoKSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkRhdGUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWluXCIsXG4gICAgICAgICAgICB2YWx1ZTogbWluRGF0ZS5nZXRUaW1lKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4RGF0ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBtYXhEYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5EYXRlKCkge1xuICAgICAgICBsZXQgbWluID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChtaW4gPT09IG51bGwgfHwgY2gudmFsdWUgPiBtaW4pXG4gICAgICAgICAgICAgICAgICAgIG1pbiA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCA/IG5ldyBEYXRlKG1pbikgOiBudWxsO1xuICAgIH1cbiAgICBnZXQgbWF4RGF0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4ICE9IG51bGwgPyBuZXcgRGF0ZShtYXgpIDogbnVsbDtcbiAgICB9XG59XG5ab2REYXRlLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZERhdGUoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REYXRlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kU3ltYm9sIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3ltYm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnN5bWJvbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RTeW1ib2wuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kU3ltYm9sKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTeW1ib2wsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RVbmRlZmluZWQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFVuZGVmaW5lZC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmRlZmluZWQoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVuZGVmaW5lZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE51bGwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm51bGwsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kTnVsbC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQW55IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHRvIHByZXZlbnQgaW5zdGFuY2VzIG9mIG90aGVyIGNsYXNzZXMgZnJvbSBleHRlbmRpbmcgWm9kQW55LiB0aGlzIGNhdXNlcyBpc3N1ZXMgd2l0aCBjYXRjaGFsbCBpbiBab2RPYmplY3QuXG4gICAgICAgIHRoaXMuX2FueSA9IHRydWU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kQW55LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFueSh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQW55LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVW5rbm93biBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICAvLyByZXF1aXJlZFxuICAgICAgICB0aGlzLl91bmtub3duID0gdHJ1ZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RVbmtub3duLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVua25vd24oe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFVua25vd24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROZXZlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm5ldmVyLFxuICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgfVxufVxuWm9kTmV2ZXIuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmV2ZXIoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5ldmVyLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVm9pZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS52b2lkLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFZvaWQuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVm9pZCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVm9pZCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEFycmF5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4LCBzdGF0dXMgfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuX2RlZjtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5leGFjdExlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdG9vQmlnID0gY3R4LmRhdGEubGVuZ3RoID4gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdG9vU21hbGwgPSBjdHguZGF0YS5sZW5ndGggPCBkZWYuZXhhY3RMZW5ndGgudmFsdWU7XG4gICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHRvb0JpZyA/IFpvZElzc3VlQ29kZS50b29fYmlnIDogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogKHRvb1NtYWxsID8gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogKHRvb0JpZyA/IGRlZi5leGFjdExlbmd0aC52YWx1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLmV4YWN0TGVuZ3RoLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5taW5MZW5ndGggIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5sZW5ndGggPCBkZWYubWluTGVuZ3RoLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5MZW5ndGgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5taW5MZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1heExlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA+IGRlZi5tYXhMZW5ndGgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhMZW5ndGgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5tYXhMZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFsuLi5jdHguZGF0YV0ubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZi50eXBlLl9wYXJzZUFzeW5jKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBpdGVtLCBjdHgucGF0aCwgaSkpO1xuICAgICAgICAgICAgfSkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5jdHguZGF0YV0ubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLnR5cGUuX3BhcnNlU3luYyhuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0KTtcbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG4gICAgbWluKG1pbkxlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1pbkxlbmd0aDogeyB2YWx1ZTogbWluTGVuZ3RoLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhMZW5ndGgsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtYXhMZW5ndGg6IHsgdmFsdWU6IG1heExlbmd0aCwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsZW5ndGgobGVuLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgZXhhY3RMZW5ndGg6IHsgdmFsdWU6IGxlbiwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBtZXNzYWdlKTtcbiAgICB9XG59XG5ab2RBcnJheS5jcmVhdGUgPSAoc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgdHlwZTogc2NoZW1hLFxuICAgICAgICBtaW5MZW5ndGg6IG51bGwsXG4gICAgICAgIG1heExlbmd0aDogbnVsbCxcbiAgICAgICAgZXhhY3RMZW5ndGg6IG51bGwsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQXJyYXksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5mdW5jdGlvbiBkZWVwUGFydGlhbGlmeShzY2hlbWEpIHtcbiAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5zaGFwZSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSBzY2hlbWEuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBab2RPcHRpb25hbC5jcmVhdGUoZGVlcFBhcnRpYWxpZnkoZmllbGRTY2hlbWEpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi5zY2hlbWEuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZEFycmF5KSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4uc2NoZW1hLl9kZWYsXG4gICAgICAgICAgICB0eXBlOiBkZWVwUGFydGlhbGlmeShzY2hlbWEuZWxlbWVudCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gWm9kT3B0aW9uYWwuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS51bndyYXAoKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2ROdWxsYWJsZSkge1xuICAgICAgICByZXR1cm4gWm9kTnVsbGFibGUuY3JlYXRlKGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS51bndyYXAoKSkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RUdXBsZSkge1xuICAgICAgICByZXR1cm4gWm9kVHVwbGUuY3JlYXRlKHNjaGVtYS5pdGVtcy5tYXAoKGl0ZW0pID0+IGRlZXBQYXJ0aWFsaWZ5KGl0ZW0pKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbn1cbmNsYXNzIFpvZE9iamVjdCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLl9jYWNoZWQgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgSW4gbW9zdCBjYXNlcywgdGhpcyBpcyBubyBsb25nZXIgbmVlZGVkIC0gdW5rbm93biBwcm9wZXJ0aWVzIGFyZSBub3cgc2lsZW50bHkgc3RyaXBwZWQuXG4gICAgICAgICAqIElmIHlvdSB3YW50IHRvIHBhc3MgdGhyb3VnaCB1bmtub3duIHByb3BlcnRpZXMsIHVzZSBgLnBhc3N0aHJvdWdoKClgIGluc3RlYWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm5vbnN0cmljdCA9IHRoaXMucGFzc3Rocm91Z2g7XG4gICAgICAgIC8vIGV4dGVuZDxcbiAgICAgICAgLy8gICBBdWdtZW50YXRpb24gZXh0ZW5kcyBab2RSYXdTaGFwZSxcbiAgICAgICAgLy8gICBOZXdPdXRwdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgT3V0cHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgICAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9vdXRwdXRcIl1cbiAgICAgICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgT3V0cHV0XG4gICAgICAgIC8vICAgICAgID8gT3V0cHV0W2tdXG4gICAgICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgICAgIC8vICAgfT4sXG4gICAgICAgIC8vICAgTmV3SW5wdXQgZXh0ZW5kcyB1dGlsLmZsYXR0ZW48e1xuICAgICAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgSW5wdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX2lucHV0XCJdXG4gICAgICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIElucHV0XG4gICAgICAgIC8vICAgICAgID8gSW5wdXRba11cbiAgICAgICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAgICAgLy8gICB9PlxuICAgICAgICAvLyA+KFxuICAgICAgICAvLyAgIGF1Z21lbnRhdGlvbjogQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICk6IFpvZE9iamVjdDxcbiAgICAgICAgLy8gICBleHRlbmRTaGFwZTxULCBBdWdtZW50YXRpb24+LFxuICAgICAgICAvLyAgIFVua25vd25LZXlzLFxuICAgICAgICAvLyAgIENhdGNoYWxsLFxuICAgICAgICAvLyAgIE5ld091dHB1dCxcbiAgICAgICAgLy8gICBOZXdJbnB1dFxuICAgICAgICAvLyA+IHtcbiAgICAgICAgLy8gICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIC8vICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgIC8vICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgLy8gICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgIC8vICAgICAgIC4uLmF1Z21lbnRhdGlvbixcbiAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgVXNlIGAuZXh0ZW5kYCBpbnN0ZWFkXG4gICAgICAgICAqICAqL1xuICAgICAgICB0aGlzLmF1Z21lbnQgPSB0aGlzLmV4dGVuZDtcbiAgICB9XG4gICAgX2dldENhY2hlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhY2hlZCAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWQ7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gdGhpcy5fZGVmLnNoYXBlKCk7XG4gICAgICAgIGNvbnN0IGtleXMgPSB1dGlsLm9iamVjdEtleXMoc2hhcGUpO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2NhY2hlZCA9IHsgc2hhcGUsIGtleXMgfSk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCB7IHNoYXBlLCBrZXlzOiBzaGFwZUtleXMgfSA9IHRoaXMuX2dldENhY2hlZCgpO1xuICAgICAgICBjb25zdCBleHRyYUtleXMgPSBbXTtcbiAgICAgICAgaWYgKCEodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgWm9kTmV2ZXIgJiZcbiAgICAgICAgICAgIHRoaXMuX2RlZi51bmtub3duS2V5cyA9PT0gXCJzdHJpcFwiKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY3R4LmRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNoYXBlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhaXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXBlS2V5cykge1xuICAgICAgICAgICAgY29uc3Qga2V5VmFsaWRhdG9yID0gc2hhcGVba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3R4LmRhdGFba2V5XTtcbiAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGtleTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGtleSB9LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBrZXlWYWxpZGF0b3IuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCB2YWx1ZSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIGFsd2F5c1NldDoga2V5IGluIGN0eC5kYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIFpvZE5ldmVyKSB7XG4gICAgICAgICAgICBjb25zdCB1bmtub3duS2V5cyA9IHRoaXMuX2RlZi51bmtub3duS2V5cztcbiAgICAgICAgICAgIGlmICh1bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXh0cmFLZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGN0eC5kYXRhW2tleV0gfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5rbm93bktleXMgPT09IFwic3RyaWN0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmFLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudW5yZWNvZ25pemVkX2tleXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiBleHRyYUtleXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bmtub3duS2V5cyA9PT0gXCJzdHJpcFwiKSA7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludGVybmFsIFpvZE9iamVjdCBlcnJvcjogaW52YWxpZCB1bmtub3duS2V5cyB2YWx1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJ1biBjYXRjaGFsbCB2YWxpZGF0aW9uXG4gICAgICAgICAgICBjb25zdCBjYXRjaGFsbCA9IHRoaXMuX2RlZi5jYXRjaGFsbDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4dHJhS2V5cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3R4LmRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRjaGFsbC5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwga2V5KSAvLywgY3R4LmNoaWxkKGtleSksIHZhbHVlLCBnZXRQYXJzZWRUeXBlKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN5bmNQYWlycyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzeW5jUGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5c1NldDogcGFpci5hbHdheXNTZXQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3luY1BhaXJzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoc3luY1BhaXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHN5bmNQYWlycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNoYXBlKCk7XG4gICAgfVxuICAgIHN0cmljdChtZXNzYWdlKSB7XG4gICAgICAgIGVycm9yVXRpbC5lcnJUb09iajtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwic3RyaWN0XCIsXG4gICAgICAgICAgICAuLi4obWVzc2FnZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWFwOiAoaXNzdWUsIGN0eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEVycm9yID0gKF9jID0gKF9iID0gKF9hID0gdGhpcy5fZGVmKS5lcnJvck1hcCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIGlzc3VlLCBjdHgpLm1lc3NhZ2UpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGN0eC5kZWZhdWx0RXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJ1bnJlY29nbml6ZWRfa2V5c1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IChfZCA9IGVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKS5tZXNzYWdlKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBkZWZhdWx0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmYXVsdEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdHJpcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhc3N0aHJvdWdoKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICB1bmtub3duS2V5czogXCJwYXNzdGhyb3VnaFwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gY29uc3QgQXVnbWVudEZhY3RvcnkgPVxuICAgIC8vICAgPERlZiBleHRlbmRzIFpvZE9iamVjdERlZj4oZGVmOiBEZWYpID0+XG4gICAgLy8gICA8QXVnbWVudGF0aW9uIGV4dGVuZHMgWm9kUmF3U2hhcGU+KFxuICAgIC8vICAgICBhdWdtZW50YXRpb246IEF1Z21lbnRhdGlvblxuICAgIC8vICAgKTogWm9kT2JqZWN0PFxuICAgIC8vICAgICBleHRlbmRTaGFwZTxSZXR1cm5UeXBlPERlZltcInNoYXBlXCJdPiwgQXVnbWVudGF0aW9uPixcbiAgICAvLyAgICAgRGVmW1widW5rbm93bktleXNcIl0sXG4gICAgLy8gICAgIERlZltcImNhdGNoYWxsXCJdXG4gICAgLy8gICA+ID0+IHtcbiAgICAvLyAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgIC8vICAgICAgIC4uLmRlZixcbiAgICAvLyAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAvLyAgICAgICAgIC4uLmRlZi5zaGFwZSgpLFxuICAgIC8vICAgICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgIC8vICAgICAgIH0pLFxuICAgIC8vICAgICB9KSBhcyBhbnk7XG4gICAgLy8gICB9O1xuICAgIGV4dGVuZChhdWdtZW50YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fZGVmLnNoYXBlKCksXG4gICAgICAgICAgICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmlvciB0byB6b2RAMS4wLjEyIHRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGVcbiAgICAgKiBpbmZlcnJlZCB0eXBlIG9mIG1lcmdlZCBvYmplY3RzLiBQbGVhc2VcbiAgICAgKiB1cGdyYWRlIGlmIHlvdSBhcmUgZXhwZXJpZW5jaW5nIGlzc3Vlcy5cbiAgICAgKi9cbiAgICBtZXJnZShtZXJnaW5nKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZCA9IG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAgICAgICAgIGNhdGNoYWxsOiBtZXJnaW5nLl9kZWYuY2F0Y2hhbGwsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgICAgICAuLi5tZXJnaW5nLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgIH1cbiAgICAvLyBtZXJnZTxcbiAgICAvLyAgIEluY29taW5nIGV4dGVuZHMgQW55Wm9kT2JqZWN0LFxuICAgIC8vICAgQXVnbWVudGF0aW9uIGV4dGVuZHMgSW5jb21pbmdbXCJzaGFwZVwiXSxcbiAgICAvLyAgIE5ld091dHB1dCBleHRlbmRzIHtcbiAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgT3V0cHV0XTogayBleHRlbmRzIGtleW9mIEF1Z21lbnRhdGlvblxuICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX291dHB1dFwiXVxuICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIE91dHB1dFxuICAgIC8vICAgICAgID8gT3V0cHV0W2tdXG4gICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAvLyAgIH0sXG4gICAgLy8gICBOZXdJbnB1dCBleHRlbmRzIHtcbiAgICAvLyAgICAgW2sgaW4ga2V5b2YgQXVnbWVudGF0aW9uIHwga2V5b2YgSW5wdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfaW5wdXRcIl1cbiAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBJbnB1dFxuICAgIC8vICAgICAgID8gSW5wdXRba11cbiAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgIC8vICAgfVxuICAgIC8vID4oXG4gICAgLy8gICBtZXJnaW5nOiBJbmNvbWluZ1xuICAgIC8vICk6IFpvZE9iamVjdDxcbiAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIFJldHVyblR5cGU8SW5jb21pbmdbXCJfZGVmXCJdW1wic2hhcGVcIl0+PixcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1wiY2F0Y2hhbGxcIl0sXG4gICAgLy8gICBOZXdPdXRwdXQsXG4gICAgLy8gICBOZXdJbnB1dFxuICAgIC8vID4ge1xuICAgIC8vICAgY29uc3QgbWVyZ2VkOiBhbnkgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAvLyAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAvLyAgICAgc2hhcGU6ICgpID0+XG4gICAgLy8gICAgICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyh0aGlzLl9kZWYuc2hhcGUoKSwgbWVyZ2luZy5fZGVmLnNoYXBlKCkpLFxuICAgIC8vICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAvLyAgIHJldHVybiBtZXJnZWQ7XG4gICAgLy8gfVxuICAgIHNldEtleShrZXksIHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdWdtZW50KHsgW2tleV06IHNjaGVtYSB9KTtcbiAgICB9XG4gICAgLy8gbWVyZ2U8SW5jb21pbmcgZXh0ZW5kcyBBbnlab2RPYmplY3Q+KFxuICAgIC8vICAgbWVyZ2luZzogSW5jb21pbmdcbiAgICAvLyApOiAvL1pvZE9iamVjdDxUICYgSW5jb21pbmdbXCJfc2hhcGVcIl0sIFVua25vd25LZXlzLCBDYXRjaGFsbD4gPSAobWVyZ2luZykgPT4ge1xuICAgIC8vIFpvZE9iamVjdDxcbiAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIFJldHVyblR5cGU8SW5jb21pbmdbXCJfZGVmXCJdW1wic2hhcGVcIl0+PixcbiAgICAvLyAgIEluY29taW5nW1wiX2RlZlwiXVtcInVua25vd25LZXlzXCJdLFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1wiY2F0Y2hhbGxcIl1cbiAgICAvLyA+IHtcbiAgICAvLyAgIC8vIGNvbnN0IG1lcmdlZFNoYXBlID0gb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyhcbiAgICAvLyAgIC8vICAgdGhpcy5fZGVmLnNoYXBlKCksXG4gICAgLy8gICAvLyAgIG1lcmdpbmcuX2RlZi5zaGFwZSgpXG4gICAgLy8gICAvLyApO1xuICAgIC8vICAgY29uc3QgbWVyZ2VkOiBhbnkgPSBuZXcgWm9kT2JqZWN0KHtcbiAgICAvLyAgICAgdW5rbm93bktleXM6IG1lcmdpbmcuX2RlZi51bmtub3duS2V5cyxcbiAgICAvLyAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAvLyAgICAgc2hhcGU6ICgpID0+XG4gICAgLy8gICAgICAgb2JqZWN0VXRpbC5tZXJnZVNoYXBlcyh0aGlzLl9kZWYuc2hhcGUoKSwgbWVyZ2luZy5fZGVmLnNoYXBlKCkpLFxuICAgIC8vICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAvLyAgIH0pIGFzIGFueTtcbiAgICAvLyAgIHJldHVybiBtZXJnZWQ7XG4gICAgLy8gfVxuICAgIGNhdGNoYWxsKGluZGV4KSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNhdGNoYWxsOiBpbmRleCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBpY2sobWFzaykge1xuICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICB1dGlsLm9iamVjdEtleXMobWFzaykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAobWFza1trZXldICYmIHRoaXMuc2hhcGVba2V5XSkge1xuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbWl0KG1hc2spIHtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBkZWVwUGFydGlhbCgpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBQYXJ0aWFsaWZ5KHRoaXMpO1xuICAgIH1cbiAgICBwYXJ0aWFsKG1hc2spIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICBpZiAobWFzayAmJiAhbWFza1trZXldKSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGZpZWxkU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXF1aXJlZChtYXNrKSB7XG4gICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChtYXNrICYmICFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gdGhpcy5zaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRTY2hlbWEgPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgbGV0IG5ld0ZpZWxkID0gZmllbGRTY2hlbWE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG5ld0ZpZWxkIGluc3RhbmNlb2YgWm9kT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RmllbGQgPSBuZXdGaWVsZC5fZGVmLmlubmVyVHlwZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IG5ld0ZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAga2V5b2YoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVab2RFbnVtKHV0aWwub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSk7XG4gICAgfVxufVxuWm9kT2JqZWN0LmNyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIHVua25vd25LZXlzOiBcInN0cmlwXCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RPYmplY3Quc3RyaWN0Q3JlYXRlID0gKHNoYXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaWN0XCIsXG4gICAgICAgIGNhdGNoYWxsOiBab2ROZXZlci5jcmVhdGUoKSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPYmplY3QsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5ab2RPYmplY3QubGF6eWNyZWF0ZSA9IChzaGFwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgY2F0Y2hhbGw6IFpvZE5ldmVyLmNyZWF0ZSgpLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFVuaW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJlc3VsdHMocmVzdWx0cykge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGlzc3VlLWZyZWUgdmFsaWRhdGlvbiBpZiBpdCBleGlzdHNcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGlzc3VlcyBmcm9tIGRpcnR5IG9wdGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmlzc3Vlcy5wdXNoKC4uLnJlc3VsdC5jdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJldHVybiBpbnZhbGlkXG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IG5ldyBab2RFcnJvcihyZXN1bHQuY3R4LmNvbW1vbi5pc3N1ZXMpKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uLFxuICAgICAgICAgICAgICAgIHVuaW9uRXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wdGlvbnMubWFwKGFzeW5jIChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEN0eCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0IG9wdGlvbi5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGN0eDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKS50aGVuKGhhbmRsZVJlc3VsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGRpcnR5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXNzdWVzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHggPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHguY29tbW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY2hpbGRDdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIgJiYgIWRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0geyByZXN1bHQsIGN0eDogY2hpbGRDdHggfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzc3Vlcy5wdXNoKGNoaWxkQ3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICAgICAgICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goLi4uZGlydHkuY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkaXJ0eS5yZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1bmlvbkVycm9ycyA9IGlzc3Vlcy5tYXAoKGlzc3VlcykgPT4gbmV3IFpvZEVycm9yKGlzc3VlcykpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24sXG4gICAgICAgICAgICAgICAgdW5pb25FcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm9wdGlvbnM7XG4gICAgfVxufVxuWm9kVW5pb24uY3JlYXRlID0gKHR5cGVzLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVuaW9uKHtcbiAgICAgICAgb3B0aW9uczogdHlwZXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5pb24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgWm9kRGlzY3JpbWluYXRlZFVuaW9uICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuY29uc3QgZ2V0RGlzY3JpbWluYXRvciA9ICh0eXBlKSA9PiB7XG4gICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMYXp5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEVmZmVjdHMpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5pbm5lclR5cGUoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RMaXRlcmFsKSB7XG4gICAgICAgIHJldHVybiBbdHlwZS52YWx1ZV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RFbnVtKSB7XG4gICAgICAgIHJldHVybiB0eXBlLm9wdGlvbnM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROYXRpdmVFbnVtKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBiYW4vYmFuXG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdFZhbHVlcyh0eXBlLmVudW0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRGVmYXVsdCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLl9kZWYuaW5uZXJUeXBlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsKSB7XG4gICAgICAgIHJldHVybiBbbnVsbF07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICByZXR1cm4gW3VuZGVmaW5lZCwgLi4uZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2ROdWxsYWJsZSkge1xuICAgICAgICByZXR1cm4gW251bGwsIC4uLmdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSldO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQnJhbmRlZCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZFJlYWRvbmx5KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kQ2F0Y2gpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5fZGVmLmlubmVyVHlwZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufTtcbmNsYXNzIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yID0gdGhpcy5kaXNjcmltaW5hdG9yO1xuICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWUgPSBjdHguZGF0YVtkaXNjcmltaW5hdG9yXTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zTWFwLmdldChkaXNjcmltaW5hdG9yVmFsdWUpO1xuICAgICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBBcnJheS5mcm9tKHRoaXMub3B0aW9uc01hcC5rZXlzKCkpLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtkaXNjcmltaW5hdG9yXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRpc2NyaW1pbmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuZGlzY3JpbWluYXRvcjtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnNNYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9uc01hcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBkaXNjcmltaW5hdGVkIHVuaW9uIHNjaGVtYS4gSXRzIGJlaGF2aW91ciBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgbm9ybWFsIHoudW5pb24oKSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBIb3dldmVyLCBpdCBvbmx5IGFsbG93cyBhIHVuaW9uIG9mIG9iamVjdHMsIGFsbCBvZiB3aGljaCBuZWVkIHRvIHNoYXJlIGEgZGlzY3JpbWluYXRvciBwcm9wZXJ0eS4gVGhpcyBwcm9wZXJ0eSBtdXN0XG4gICAgICogaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgZWFjaCBvYmplY3QgaW4gdGhlIHVuaW9uLlxuICAgICAqIEBwYXJhbSBkaXNjcmltaW5hdG9yIHRoZSBuYW1lIG9mIHRoZSBkaXNjcmltaW5hdG9yIHByb3BlcnR5XG4gICAgICogQHBhcmFtIHR5cGVzIGFuIGFycmF5IG9mIG9iamVjdCBzY2hlbWFzXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGUoZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICAgIC8vIEdldCBhbGwgdGhlIHZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWVzXG4gICAgICAgIGNvbnN0IG9wdGlvbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkaXNjcmltaW5hdG9yVmFsdWVzID0gZ2V0RGlzY3JpbWluYXRvcih0eXBlLnNoYXBlW2Rpc2NyaW1pbmF0b3JdKTtcbiAgICAgICAgICAgIGlmICghZGlzY3JpbWluYXRvclZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgZGlzY3JpbWluYXRvciB2YWx1ZSBmb3Iga2V5IFxcYCR7ZGlzY3JpbWluYXRvcn1cXGAgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGFsbCBzY2hlbWEgb3B0aW9uc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkaXNjcmltaW5hdG9yVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnNNYXAuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERpc2NyaW1pbmF0b3IgcHJvcGVydHkgJHtTdHJpbmcoZGlzY3JpbWluYXRvcil9IGhhcyBkdXBsaWNhdGUgdmFsdWUgJHtTdHJpbmcodmFsdWUpfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnNldCh2YWx1ZSwgdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REaXNjcmltaW5hdGVkVW5pb24sXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnNNYXAsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1lcmdlVmFsdWVzKGEsIGIpIHtcbiAgICBjb25zdCBhVHlwZSA9IGdldFBhcnNlZFR5cGUoYSk7XG4gICAgY29uc3QgYlR5cGUgPSBnZXRQYXJzZWRUeXBlKGIpO1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLm9iamVjdCAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgY29uc3QgYktleXMgPSB1dGlsLm9iamVjdEtleXMoYik7XG4gICAgICAgIGNvbnN0IHNoYXJlZEtleXMgPSB1dGlsXG4gICAgICAgICAgICAub2JqZWN0S2V5cyhhKVxuICAgICAgICAgICAgLmZpbHRlcigoa2V5KSA9PiBiS2V5cy5pbmRleE9mKGtleSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5hLCAuLi5iIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXJlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBzaGFyZWRWYWx1ZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdPYmogfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkgJiYgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuYXJyYXkpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQSA9IGFbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBiW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoaXRlbUEsIGl0ZW1CKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0FycmF5LnB1c2goc2hhcmVkVmFsdWUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld0FycmF5IH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGFUeXBlID09PSBab2RQYXJzZWRUeXBlLmRhdGUgJiZcbiAgICAgICAgYlR5cGUgPT09IFpvZFBhcnNlZFR5cGUuZGF0ZSAmJlxuICAgICAgICArYSA9PT0gK2IpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbn1cbmNsYXNzIFpvZEludGVyc2VjdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBoYW5kbGVQYXJzZWQgPSAocGFyc2VkTGVmdCwgcGFyc2VkUmlnaHQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Fib3J0ZWQocGFyc2VkTGVmdCkgfHwgaXNBYm9ydGVkKHBhcnNlZFJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VWYWx1ZXMocGFyc2VkTGVmdC52YWx1ZSwgcGFyc2VkUmlnaHQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFtZXJnZWQudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRGlydHkocGFyc2VkTGVmdCkgfHwgaXNEaXJ0eShwYXJzZWRSaWdodCkpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogbWVyZ2VkLmRhdGEgfTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmLmxlZnQuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuX2RlZi5yaWdodC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdKS50aGVuKChbbGVmdCwgcmlnaHRdKSA9PiBoYW5kbGVQYXJzZWQobGVmdCwgcmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVQYXJzZWQodGhpcy5fZGVmLmxlZnQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KSwgdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZSA9IChsZWZ0LCByaWdodCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RJbnRlcnNlY3Rpb24oe1xuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgICByaWdodDogcmlnaHQsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kSW50ZXJzZWN0aW9uLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVHVwbGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmFycmF5KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmFycmF5LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA8IHRoaXMuX2RlZi5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgbWluaW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdCA9IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICBpZiAoIXJlc3QgJiYgY3R4LmRhdGEubGVuZ3RoID4gdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgbWF4aW11bTogdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4uY3R4LmRhdGFdXG4gICAgICAgICAgICAubWFwKChpdGVtLCBpdGVtSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuX2RlZi5pdGVtc1tpdGVtSW5kZXhdIHx8IHRoaXMuX2RlZi5yZXN0O1xuICAgICAgICAgICAgaWYgKCFzY2hlbWEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGl0ZW1JbmRleCkpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4gISF4KTsgLy8gZmlsdGVyIG51bGxzXG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaXRlbXMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIHJlc3VsdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VBcnJheShzdGF0dXMsIGl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaXRlbXM7XG4gICAgfVxuICAgIHJlc3QocmVzdCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHJlc3QsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblpvZFR1cGxlLmNyZWF0ZSA9IChzY2hlbWFzLCBwYXJhbXMpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgcGFzcyBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHoudHVwbGUoWyAuLi4gXSlcIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgWm9kVHVwbGUoe1xuICAgICAgICBpdGVtczogc2NoZW1hcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RUdXBsZSxcbiAgICAgICAgcmVzdDogbnVsbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFJlY29yZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBrZXlTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5vYmplY3QpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUub2JqZWN0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICAgICAgY29uc3Qga2V5VHlwZSA9IHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdHguZGF0YSkge1xuICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5OiBrZXlUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwga2V5LCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGN0eC5kYXRhW2tleV0sIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICBhbHdheXNTZXQ6IGtleSBpbiBjdHguZGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RBc3luYyhzdGF0dXMsIHBhaXJzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdFN5bmMoc3RhdHVzLCBwYWlycyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlKGZpcnN0LCBzZWNvbmQsIHRoaXJkKSB7XG4gICAgICAgIGlmIChzZWNvbmQgaW5zdGFuY2VvZiBab2RUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICAgICAga2V5VHlwZTogZmlyc3QsXG4gICAgICAgICAgICAgICAgdmFsdWVUeXBlOiBzZWNvbmQsXG4gICAgICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWNvcmQsXG4gICAgICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlyZCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICBrZXlUeXBlOiBab2RTdHJpbmcuY3JlYXRlKCksXG4gICAgICAgICAgICB2YWx1ZVR5cGU6IGZpcnN0LFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RSZWNvcmQsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHNlY29uZCksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNsYXNzIFpvZE1hcCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGdldCBrZXlTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYua2V5VHlwZTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5tYXApIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubWFwLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5VHlwZSA9IHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgICAgICBjb25zdCBwYWlycyA9IFsuLi5jdHguZGF0YS5lbnRyaWVzKCldLm1hcCgoW2tleSwgdmFsdWVdLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBrZXksIGN0eC5wYXRoLCBbaW5kZXgsIFwia2V5XCJdKSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlVHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwgW2luZGV4LCBcInZhbHVlXCJdKSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImFib3J0ZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiZGlydHlcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxNYXAuc2V0KGtleS52YWx1ZSwgdmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFpci5rZXk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbE1hcC5zZXQoa2V5LnZhbHVlLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGZpbmFsTWFwIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5ab2RNYXAuY3JlYXRlID0gKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RNYXAoe1xuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTWFwLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kU2V0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zZXQpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc2V0LFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmO1xuICAgICAgICBpZiAoZGVmLm1pblNpemUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjdHguZGF0YS5zaXplIDwgZGVmLm1pblNpemUudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogZGVmLm1pblNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWluU2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWF4U2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLnNpemUgPiBkZWYubWF4U2l6ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heFNpemUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYubWF4U2l6ZS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplU2V0KGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRTZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkU2V0LmFkZChlbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogcGFyc2VkU2V0IH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbLi4uY3R4LmRhdGEudmFsdWVzKCldLm1hcCgoaXRlbSwgaSkgPT4gdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgaXRlbSwgY3R4LnBhdGgsIGkpKSk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZWxlbWVudHMpLnRoZW4oKGVsZW1lbnRzKSA9PiBmaW5hbGl6ZVNldChlbGVtZW50cykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplU2V0KGVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtaW4obWluU2l6ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBtaW5TaXplOiB7IHZhbHVlOiBtaW5TaXplLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhTaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1heFNpemU6IHsgdmFsdWU6IG1heFNpemUsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2l6ZShzaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbihzaXplLCBtZXNzYWdlKS5tYXgoc2l6ZSwgbWVzc2FnZSk7XG4gICAgfVxuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblpvZFNldC5jcmVhdGUgPSAodmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFNldCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgbWluU2l6ZTogbnVsbCxcbiAgICAgICAgbWF4U2l6ZTogbnVsbCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RTZXQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RGdW5jdGlvbiBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnZhbGlkYXRlID0gdGhpcy5pbXBsZW1lbnQ7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWFrZUFyZ3NJc3N1ZShhcmdzLCBlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1ha2VJc3N1ZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcHM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGN0eC5zY2hlbWFFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0RXJyb3JNYXAoKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2FyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzRXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlUmV0dXJuc0lzc3VlKHJldHVybnMsIGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUlzc3VlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiByZXR1cm5zLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwczogW1xuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNjaGVtYUVycm9yTWFwLFxuICAgICAgICAgICAgICAgICAgICBnZXRFcnJvck1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcCxcbiAgICAgICAgICAgICAgICBdLmZpbHRlcigoeCkgPT4gISF4KSxcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfcmV0dXJuX3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVFcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgZXJyb3JNYXA6IGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwIH07XG4gICAgICAgIGNvbnN0IGZuID0gY3R4LmRhdGE7XG4gICAgICAgIGlmICh0aGlzLl9kZWYucmV0dXJucyBpbnN0YW5jZW9mIFpvZFByb21pc2UpIHtcbiAgICAgICAgICAgIC8vIFdvdWxkIGxvdmUgYSB3YXkgdG8gYXZvaWQgZGlzYWJsaW5nIHRoaXMgcnVsZSwgYnV0IHdlIG5lZWRcbiAgICAgICAgICAgIC8vIGFuIGFsaWFzICh1c2luZyBhbiBhcnJvdyBmdW5jdGlvbiB3YXMgd2hhdCBjYXVzZWQgMjY1MSkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBPSyhhc3luYyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFpvZEVycm9yKFtdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gYXdhaXQgbWUuX2RlZi5hcmdzXG4gICAgICAgICAgICAgICAgICAgIC5wYXJzZUFzeW5jKGFyZ3MsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VBcmdzSXNzdWUoYXJncywgZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRSZXR1cm5zID0gYXdhaXQgbWUuX2RlZi5yZXR1cm5zLl9kZWYudHlwZVxuICAgICAgICAgICAgICAgICAgICAucGFyc2VBc3luYyhyZXN1bHQsIHBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmFkZElzc3VlKG1ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRSZXR1cm5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBXb3VsZCBsb3ZlIGEgd2F5IHRvIGF2b2lkIGRpc2FibGluZyB0aGlzIHJ1bGUsIGJ1dCB3ZSBuZWVkXG4gICAgICAgICAgICAvLyBhbiBhbGlhcyAodXNpbmcgYW4gYXJyb3cgZnVuY3Rpb24gd2FzIHdoYXQgY2F1c2VkIDI2NTEpLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgICBjb25zdCBtZSA9IHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gT0soZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gbWUuX2RlZi5hcmdzLnNhZmVQYXJzZShhcmdzLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkQXJncy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBab2RFcnJvcihbbWFrZUFyZ3NJc3N1ZShhcmdzLCBwYXJzZWRBcmdzLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzLCBwYXJzZWRBcmdzLmRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJldHVybnMgPSBtZS5fZGVmLnJldHVybnMuc2FmZVBhcnNlKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFJldHVybnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWm9kRXJyb3IoW21ha2VSZXR1cm5zSXNzdWUocmVzdWx0LCBwYXJzZWRSZXR1cm5zLmVycm9yKV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUmV0dXJucy5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5hcmdzO1xuICAgIH1cbiAgICByZXR1cm5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnJldHVybnM7XG4gICAgfVxuICAgIGFyZ3MoLi4uaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBhcmdzOiBab2RUdXBsZS5jcmVhdGUoaXRlbXMpLnJlc3QoWm9kVW5rbm93bi5jcmVhdGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm5zKHJldHVyblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW1wbGVtZW50KGZ1bmMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRnVuYyA9IHRoaXMucGFyc2UoZnVuYyk7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRGdW5jO1xuICAgIH1cbiAgICBzdHJpY3RJbXBsZW1lbnQoZnVuYykge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGdW5jID0gdGhpcy5wYXJzZShmdW5jKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEZ1bmM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYXJncywgcmV0dXJucywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICAgICAgYXJnczogKGFyZ3NcbiAgICAgICAgICAgICAgICA/IGFyZ3NcbiAgICAgICAgICAgICAgICA6IFpvZFR1cGxlLmNyZWF0ZShbXSkucmVzdChab2RVbmtub3duLmNyZWF0ZSgpKSksXG4gICAgICAgICAgICByZXR1cm5zOiByZXR1cm5zIHx8IFpvZFVua25vd24uY3JlYXRlKCksXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEZ1bmN0aW9uLFxuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBab2RMYXp5IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IHNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5nZXR0ZXIoKTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBsYXp5U2NoZW1hID0gdGhpcy5fZGVmLmdldHRlcigpO1xuICAgICAgICByZXR1cm4gbGF6eVNjaGVtYS5fcGFyc2UoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pO1xuICAgIH1cbn1cblpvZExhenkuY3JlYXRlID0gKGdldHRlciwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgZ2V0dGVyOiBnZXR0ZXIsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTGF6eSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZExpdGVyYWwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0LmRhdGEgIT09IHRoaXMuX2RlZi52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2xpdGVyYWwsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHRoaXMuX2RlZi52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZTtcbiAgICB9XG59XG5ab2RMaXRlcmFsLmNyZWF0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RMaXRlcmFsKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZExpdGVyYWwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5mdW5jdGlvbiBjcmVhdGVab2RFbnVtKHZhbHVlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmNsYXNzIFpvZEVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgX1pvZEVudW1fY2FjaGUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0LmRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdGhpcy5fZGVmLnZhbHVlcztcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiB1dGlsLmpvaW5WYWx1ZXMoZXhwZWN0ZWRWYWx1ZXMpLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1pvZEVudW1fY2FjaGUsIFwiZlwiKSkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWm9kRW51bV9jYWNoZSwgbmV3IFNldCh0aGlzLl9kZWYudmFsdWVzKSwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kRW51bV9jYWNoZSwgXCJmXCIpLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB0aGlzLl9kZWYudmFsdWVzO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2VudW1fdmFsdWUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXhwZWN0ZWRWYWx1ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVzO1xuICAgIH1cbiAgICBnZXQgZW51bSgpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGdldCBWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgdGhpcy5fZGVmLnZhbHVlcykge1xuICAgICAgICAgICAgZW51bVZhbHVlc1t2YWxdID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnVtVmFsdWVzO1xuICAgIH1cbiAgICBnZXQgRW51bSgpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGV4dHJhY3QodmFsdWVzLCBuZXdEZWYgPSB0aGlzLl9kZWYpIHtcbiAgICAgICAgcmV0dXJuIFpvZEVudW0uY3JlYXRlKHZhbHVlcywge1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgLi4ubmV3RGVmLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhjbHVkZSh2YWx1ZXMsIG5ld0RlZiA9IHRoaXMuX2RlZikge1xuICAgICAgICByZXR1cm4gWm9kRW51bS5jcmVhdGUodGhpcy5vcHRpb25zLmZpbHRlcigob3B0KSA9PiAhdmFsdWVzLmluY2x1ZGVzKG9wdCkpLCB7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICAuLi5uZXdEZWYsXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbl9ab2RFbnVtX2NhY2hlID0gbmV3IFdlYWtNYXAoKTtcblpvZEVudW0uY3JlYXRlID0gY3JlYXRlWm9kRW51bTtcbmNsYXNzIFpvZE5hdGl2ZUVudW0gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgX1pvZE5hdGl2ZUVudW1fY2FjaGUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbnVtVmFsdWVzID0gdXRpbC5nZXRWYWxpZEVudW1WYWx1ZXModGhpcy5fZGVmLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZyAmJlxuICAgICAgICAgICAgY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUubnVtYmVyKSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHV0aWwub2JqZWN0VmFsdWVzKG5hdGl2ZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHV0aWwuam9pblZhbHVlcyhleHBlY3RlZFZhbHVlcyksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgXCJmXCIpKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ab2ROYXRpdmVFbnVtX2NhY2hlLCBuZXcgU2V0KHV0aWwuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpKSwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kTmF0aXZlRW51bV9jYWNoZSwgXCJmXCIpLmhhcyhpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB1dGlsLm9iamVjdFZhbHVlcyhuYXRpdmVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9lbnVtX3ZhbHVlLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV4cGVjdGVkVmFsdWVzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxuICAgIGdldCBlbnVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlcztcbiAgICB9XG59XG5fWm9kTmF0aXZlRW51bV9jYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5ab2ROYXRpdmVFbnVtLmNyZWF0ZSA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmF0aXZlRW51bSh7XG4gICAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE5hdGl2ZUVudW0sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RQcm9taXNlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnR5cGU7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnByb21pc2UgJiZcbiAgICAgICAgICAgIGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnByb21pc2UsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNpZmllZCA9IGN0eC5wYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnByb21pc2VcbiAgICAgICAgICAgID8gY3R4LmRhdGFcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKGN0eC5kYXRhKTtcbiAgICAgICAgcmV0dXJuIE9LKHByb21pc2lmaWVkLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5wYXJzZUFzeW5jKGRhdGEsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBlcnJvck1hcDogY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cblpvZFByb21pc2UuY3JlYXRlID0gKHNjaGVtYSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RQcm9taXNlKHtcbiAgICAgICAgdHlwZTogc2NoZW1hLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFByb21pc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RFZmZlY3RzIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgaW5uZXJUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgc291cmNlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHNcbiAgICAgICAgICAgID8gdGhpcy5fZGVmLnNjaGVtYS5zb3VyY2VUeXBlKClcbiAgICAgICAgICAgIDogdGhpcy5fZGVmLnNjaGVtYTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IHRoaXMuX2RlZi5lZmZlY3QgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgY2hlY2tDdHggPSB7XG4gICAgICAgICAgICBhZGRJc3N1ZTogKGFyZykgPT4ge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwgYXJnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmZhdGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBwYXRoKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucGF0aDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNoZWNrQ3R4LmFkZElzc3VlID0gY2hlY2tDdHguYWRkSXNzdWUuYmluZChjaGVja0N0eCk7XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJwcmVwcm9jZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZCA9IGVmZmVjdC50cmFuc2Zvcm0oY3R4LmRhdGEsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwcm9jZXNzZWQpLnRoZW4oYXN5bmMgKHByb2Nlc3NlZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLnZhbHVlID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwcm9jZXNzZWQsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZWZmZWN0LnR5cGUgPT09IFwicmVmaW5lbWVudFwiKSB7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRlUmVmaW5lbWVudCA9IChhY2MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBlZmZlY3QucmVmaW5lbWVudChhY2MsIGNoZWNrQ3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHJlZmluZW1lbnQgZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKGlubmVyLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gdmFsdWUgaXMgaWdub3JlZFxuICAgICAgICAgICAgICAgIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGlubmVyLnZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYVxuICAgICAgICAgICAgICAgICAgICAuX3BhcnNlQXN5bmMoeyBkYXRhOiBjdHguZGF0YSwgcGF0aDogY3R4LnBhdGgsIHBhcmVudDogY3R4IH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChpbm5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGVSZWZpbmVtZW50KGlubmVyLnZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQoYmFzZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC50cmFuc2Zvcm0oYmFzZS52YWx1ZSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQXN5bmNocm9ub3VzIHRyYW5zZm9ybSBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgIC5fcGFyc2VBc3luYyh7IGRhdGE6IGN0eC5kYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGJhc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKGJhc2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZWZmZWN0LnRyYW5zZm9ybShiYXNlLnZhbHVlLCBjaGVja0N0eCkpLnRoZW4oKHJlc3VsdCkgPT4gKHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiByZXN1bHQgfSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoZWZmZWN0KTtcbiAgICB9XG59XG5ab2RFZmZlY3RzLmNyZWF0ZSA9IChzY2hlbWEsIGVmZmVjdCwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMsXG4gICAgICAgIGVmZmVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcblpvZEVmZmVjdHMuY3JlYXRlV2l0aFByZXByb2Nlc3MgPSAocHJlcHJvY2Vzcywgc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInByZXByb2Nlc3NcIiwgdHJhbnNmb3JtOiBwcmVwcm9jZXNzIH0sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE9wdGlvbmFsIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZE9wdGlvbmFsLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9wdGlvbmFsKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTnVsbGFibGUgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5udWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gT0sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGlucHV0KTtcbiAgICB9XG4gICAgdW53cmFwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2ROdWxsYWJsZS5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsYWJsZSh7XG4gICAgICAgIGlubmVyVHlwZTogdHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROdWxsYWJsZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZERlZmF1bHQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGxldCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIGlmIChjdHgucGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kZWYuZGVmYXVsdFZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVtb3ZlRGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kRGVmYXVsdC5jcmVhdGUgPSAodHlwZSwgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERlZmF1bHQsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdHlwZW9mIHBhcmFtcy5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gcGFyYW1zLmRlZmF1bHRcbiAgICAgICAgICAgIDogKCkgPT4gcGFyYW1zLmRlZmF1bHQsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RDYXRjaCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgLy8gbmV3Q3R4IGlzIHVzZWQgdG8gbm90IGNvbGxlY3QgaXNzdWVzIGZyb20gaW5uZXIgdHlwZXMgaW4gY3R4XG4gICAgICAgIGNvbnN0IG5ld0N0eCA9IHtcbiAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtcbiAgICAgICAgICAgIGRhdGE6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgcGF0aDogbmV3Q3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICAgICAgICAuLi5uZXdDdHgsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzQXN5bmMocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IFwidmFsaWRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogbmV3Q3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXR1czogXCJ2YWxpZFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQuc3RhdHVzID09PSBcInZhbGlkXCJcbiAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBab2RFcnJvcihuZXdDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IG5ld0N0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlQ2F0Y2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZENhdGNoLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICBjYXRjaFZhbHVlOiB0eXBlb2YgcGFyYW1zLmNhdGNoID09PSBcImZ1bmN0aW9uXCIgPyBwYXJhbXMuY2F0Y2ggOiAoKSA9PiBwYXJhbXMuY2F0Y2gsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROYU4gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5uYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubmFuLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxufVxuWm9kTmFOLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE5hTih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmFOLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY29uc3QgQlJBTkQgPSBTeW1ib2woXCJ6b2RfYnJhbmRcIik7XG5jbGFzcyBab2RCcmFuZGVkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBkYXRhID0gY3R4LmRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG59XG5jbGFzcyBab2RQaXBlbGluZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQXN5bmMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5SZXN1bHQgPSBhd2FpdCB0aGlzLl9kZWYuaW4uX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShpblJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmLm91dC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluUmVzdWx0ID0gdGhpcy5fZGVmLmluLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaW5SZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJkaXJ0eVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5SZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYub3V0Ll9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoYSwgYikge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFBpcGVsaW5lKHtcbiAgICAgICAgICAgIGluOiBhLFxuICAgICAgICAgICAgb3V0OiBiLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RQaXBlbGluZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY2xhc3MgWm9kUmVhZG9ubHkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgICAgICBjb25zdCBmcmVlemUgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnZhbHVlID0gT2JqZWN0LmZyZWV6ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNBc3luYyhyZXN1bHQpXG4gICAgICAgICAgICA/IHJlc3VsdC50aGVuKChkYXRhKSA9PiBmcmVlemUoZGF0YSkpXG4gICAgICAgICAgICA6IGZyZWV6ZShyZXN1bHQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZFJlYWRvbmx5LmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFJlYWRvbmx5KHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlYWRvbmx5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuZnVuY3Rpb24gY3VzdG9tKGNoZWNrLCBwYXJhbXMgPSB7fSwgXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKlxuICogUGFzcyBgZmF0YWxgIGludG8gdGhlIHBhcmFtcyBvYmplY3QgaW5zdGVhZDpcbiAqXG4gKiBgYGB0c1xuICogei5zdHJpbmcoKS5jdXN0b20oKHZhbCkgPT4gdmFsLmxlbmd0aCA+IDUsIHsgZmF0YWw6IGZhbHNlIH0pXG4gKiBgYGBcbiAqXG4gKi9cbmZhdGFsKSB7XG4gICAgaWYgKGNoZWNrKVxuICAgICAgICByZXR1cm4gWm9kQW55LmNyZWF0ZSgpLnN1cGVyUmVmaW5lKChkYXRhLCBjdHgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBpZiAoIWNoZWNrKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICA/IHBhcmFtcyhkYXRhKVxuICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyBtZXNzYWdlOiBwYXJhbXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJhbXM7XG4gICAgICAgICAgICAgICAgY29uc3QgX2ZhdGFsID0gKF9iID0gKF9hID0gcC5mYXRhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmF0YWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcDIgPSB0eXBlb2YgcCA9PT0gXCJzdHJpbmdcIiA/IHsgbWVzc2FnZTogcCB9IDogcDtcbiAgICAgICAgICAgICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCAuLi5wMiwgZmF0YWw6IF9mYXRhbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIFpvZEFueS5jcmVhdGUoKTtcbn1cbmNvbnN0IGxhdGUgPSB7XG4gICAgb2JqZWN0OiBab2RPYmplY3QubGF6eWNyZWF0ZSxcbn07XG52YXIgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kO1xuKGZ1bmN0aW9uIChab2RGaXJzdFBhcnR5VHlwZUtpbmQpIHtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTdHJpbmdcIl0gPSBcIlpvZFN0cmluZ1wiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bWJlclwiXSA9IFwiWm9kTnVtYmVyXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmFOXCJdID0gXCJab2ROYU5cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RCaWdJbnRcIl0gPSBcIlpvZEJpZ0ludFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJvb2xlYW5cIl0gPSBcIlpvZEJvb2xlYW5cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REYXRlXCJdID0gXCJab2REYXRlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU3ltYm9sXCJdID0gXCJab2RTeW1ib2xcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmRlZmluZWRcIl0gPSBcIlpvZFVuZGVmaW5lZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bGxcIl0gPSBcIlpvZE51bGxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RBbnlcIl0gPSBcIlpvZEFueVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFVua25vd25cIl0gPSBcIlpvZFVua25vd25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROZXZlclwiXSA9IFwiWm9kTmV2ZXJcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RWb2lkXCJdID0gXCJab2RWb2lkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQXJyYXlcIl0gPSBcIlpvZEFycmF5XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kT2JqZWN0XCJdID0gXCJab2RPYmplY3RcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RVbmlvblwiXSA9IFwiWm9kVW5pb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REaXNjcmltaW5hdGVkVW5pb25cIl0gPSBcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEludGVyc2VjdGlvblwiXSA9IFwiWm9kSW50ZXJzZWN0aW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVHVwbGVcIl0gPSBcIlpvZFR1cGxlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUmVjb3JkXCJdID0gXCJab2RSZWNvcmRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RNYXBcIl0gPSBcIlpvZE1hcFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFNldFwiXSA9IFwiWm9kU2V0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRnVuY3Rpb25cIl0gPSBcIlpvZEZ1bmN0aW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTGF6eVwiXSA9IFwiWm9kTGF6eVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZExpdGVyYWxcIl0gPSBcIlpvZExpdGVyYWxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RFbnVtXCJdID0gXCJab2RFbnVtXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kRWZmZWN0c1wiXSA9IFwiWm9kRWZmZWN0c1wiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5hdGl2ZUVudW1cIl0gPSBcIlpvZE5hdGl2ZUVudW1cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RPcHRpb25hbFwiXSA9IFwiWm9kT3B0aW9uYWxcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROdWxsYWJsZVwiXSA9IFwiWm9kTnVsbGFibGVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2REZWZhdWx0XCJdID0gXCJab2REZWZhdWx0XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQ2F0Y2hcIl0gPSBcIlpvZENhdGNoXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kUHJvbWlzZVwiXSA9IFwiWm9kUHJvbWlzZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJyYW5kZWRcIl0gPSBcIlpvZEJyYW5kZWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RQaXBlbGluZVwiXSA9IFwiWm9kUGlwZWxpbmVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RSZWFkb25seVwiXSA9IFwiWm9kUmVhZG9ubHlcIjtcbn0pKFpvZEZpcnN0UGFydHlUeXBlS2luZCB8fCAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kID0ge30pKTtcbmNvbnN0IGluc3RhbmNlT2ZUeXBlID0gKFxuLy8gY29uc3QgaW5zdGFuY2VPZlR5cGUgPSA8VCBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IGFueT4oXG5jbHMsIHBhcmFtcyA9IHtcbiAgICBtZXNzYWdlOiBgSW5wdXQgbm90IGluc3RhbmNlIG9mICR7Y2xzLm5hbWV9YCxcbn0pID0+IGN1c3RvbSgoZGF0YSkgPT4gZGF0YSBpbnN0YW5jZW9mIGNscywgcGFyYW1zKTtcbmNvbnN0IHN0cmluZ1R5cGUgPSBab2RTdHJpbmcuY3JlYXRlO1xuY29uc3QgbnVtYmVyVHlwZSA9IFpvZE51bWJlci5jcmVhdGU7XG5jb25zdCBuYW5UeXBlID0gWm9kTmFOLmNyZWF0ZTtcbmNvbnN0IGJpZ0ludFR5cGUgPSBab2RCaWdJbnQuY3JlYXRlO1xuY29uc3QgYm9vbGVhblR5cGUgPSBab2RCb29sZWFuLmNyZWF0ZTtcbmNvbnN0IGRhdGVUeXBlID0gWm9kRGF0ZS5jcmVhdGU7XG5jb25zdCBzeW1ib2xUeXBlID0gWm9kU3ltYm9sLmNyZWF0ZTtcbmNvbnN0IHVuZGVmaW5lZFR5cGUgPSBab2RVbmRlZmluZWQuY3JlYXRlO1xuY29uc3QgbnVsbFR5cGUgPSBab2ROdWxsLmNyZWF0ZTtcbmNvbnN0IGFueVR5cGUgPSBab2RBbnkuY3JlYXRlO1xuY29uc3QgdW5rbm93blR5cGUgPSBab2RVbmtub3duLmNyZWF0ZTtcbmNvbnN0IG5ldmVyVHlwZSA9IFpvZE5ldmVyLmNyZWF0ZTtcbmNvbnN0IHZvaWRUeXBlID0gWm9kVm9pZC5jcmVhdGU7XG5jb25zdCBhcnJheVR5cGUgPSBab2RBcnJheS5jcmVhdGU7XG5jb25zdCBvYmplY3RUeXBlID0gWm9kT2JqZWN0LmNyZWF0ZTtcbmNvbnN0IHN0cmljdE9iamVjdFR5cGUgPSBab2RPYmplY3Quc3RyaWN0Q3JlYXRlO1xuY29uc3QgdW5pb25UeXBlID0gWm9kVW5pb24uY3JlYXRlO1xuY29uc3QgZGlzY3JpbWluYXRlZFVuaW9uVHlwZSA9IFpvZERpc2NyaW1pbmF0ZWRVbmlvbi5jcmVhdGU7XG5jb25zdCBpbnRlcnNlY3Rpb25UeXBlID0gWm9kSW50ZXJzZWN0aW9uLmNyZWF0ZTtcbmNvbnN0IHR1cGxlVHlwZSA9IFpvZFR1cGxlLmNyZWF0ZTtcbmNvbnN0IHJlY29yZFR5cGUgPSBab2RSZWNvcmQuY3JlYXRlO1xuY29uc3QgbWFwVHlwZSA9IFpvZE1hcC5jcmVhdGU7XG5jb25zdCBzZXRUeXBlID0gWm9kU2V0LmNyZWF0ZTtcbmNvbnN0IGZ1bmN0aW9uVHlwZSA9IFpvZEZ1bmN0aW9uLmNyZWF0ZTtcbmNvbnN0IGxhenlUeXBlID0gWm9kTGF6eS5jcmVhdGU7XG5jb25zdCBsaXRlcmFsVHlwZSA9IFpvZExpdGVyYWwuY3JlYXRlO1xuY29uc3QgZW51bVR5cGUgPSBab2RFbnVtLmNyZWF0ZTtcbmNvbnN0IG5hdGl2ZUVudW1UeXBlID0gWm9kTmF0aXZlRW51bS5jcmVhdGU7XG5jb25zdCBwcm9taXNlVHlwZSA9IFpvZFByb21pc2UuY3JlYXRlO1xuY29uc3QgZWZmZWN0c1R5cGUgPSBab2RFZmZlY3RzLmNyZWF0ZTtcbmNvbnN0IG9wdGlvbmFsVHlwZSA9IFpvZE9wdGlvbmFsLmNyZWF0ZTtcbmNvbnN0IG51bGxhYmxlVHlwZSA9IFpvZE51bGxhYmxlLmNyZWF0ZTtcbmNvbnN0IHByZXByb2Nlc3NUeXBlID0gWm9kRWZmZWN0cy5jcmVhdGVXaXRoUHJlcHJvY2VzcztcbmNvbnN0IHBpcGVsaW5lVHlwZSA9IFpvZFBpcGVsaW5lLmNyZWF0ZTtcbmNvbnN0IG9zdHJpbmcgPSAoKSA9PiBzdHJpbmdUeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IG9udW1iZXIgPSAoKSA9PiBudW1iZXJUeXBlKCkub3B0aW9uYWwoKTtcbmNvbnN0IG9ib29sZWFuID0gKCkgPT4gYm9vbGVhblR5cGUoKS5vcHRpb25hbCgpO1xuY29uc3QgY29lcmNlID0ge1xuICAgIHN0cmluZzogKChhcmcpID0+IFpvZFN0cmluZy5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG4gICAgbnVtYmVyOiAoKGFyZykgPT4gWm9kTnVtYmVyLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBib29sZWFuOiAoKGFyZykgPT4gWm9kQm9vbGVhbi5jcmVhdGUoe1xuICAgICAgICAuLi5hcmcsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICB9KSksXG4gICAgYmlnaW50OiAoKGFyZykgPT4gWm9kQmlnSW50LmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBkYXRlOiAoKGFyZykgPT4gWm9kRGF0ZS5jcmVhdGUoeyAuLi5hcmcsIGNvZXJjZTogdHJ1ZSB9KSksXG59O1xuY29uc3QgTkVWRVIgPSBJTlZBTElEO1xuXG52YXIgeiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgICBfX3Byb3RvX186IG51bGwsXG4gICAgZGVmYXVsdEVycm9yTWFwOiBlcnJvck1hcCxcbiAgICBzZXRFcnJvck1hcDogc2V0RXJyb3JNYXAsXG4gICAgZ2V0RXJyb3JNYXA6IGdldEVycm9yTWFwLFxuICAgIG1ha2VJc3N1ZTogbWFrZUlzc3VlLFxuICAgIEVNUFRZX1BBVEg6IEVNUFRZX1BBVEgsXG4gICAgYWRkSXNzdWVUb0NvbnRleHQ6IGFkZElzc3VlVG9Db250ZXh0LFxuICAgIFBhcnNlU3RhdHVzOiBQYXJzZVN0YXR1cyxcbiAgICBJTlZBTElEOiBJTlZBTElELFxuICAgIERJUlRZOiBESVJUWSxcbiAgICBPSzogT0ssXG4gICAgaXNBYm9ydGVkOiBpc0Fib3J0ZWQsXG4gICAgaXNEaXJ0eTogaXNEaXJ0eSxcbiAgICBpc1ZhbGlkOiBpc1ZhbGlkLFxuICAgIGlzQXN5bmM6IGlzQXN5bmMsXG4gICAgZ2V0IHV0aWwgKCkgeyByZXR1cm4gdXRpbDsgfSxcbiAgICBnZXQgb2JqZWN0VXRpbCAoKSB7IHJldHVybiBvYmplY3RVdGlsOyB9LFxuICAgIFpvZFBhcnNlZFR5cGU6IFpvZFBhcnNlZFR5cGUsXG4gICAgZ2V0UGFyc2VkVHlwZTogZ2V0UGFyc2VkVHlwZSxcbiAgICBab2RUeXBlOiBab2RUeXBlLFxuICAgIGRhdGV0aW1lUmVnZXg6IGRhdGV0aW1lUmVnZXgsXG4gICAgWm9kU3RyaW5nOiBab2RTdHJpbmcsXG4gICAgWm9kTnVtYmVyOiBab2ROdW1iZXIsXG4gICAgWm9kQmlnSW50OiBab2RCaWdJbnQsXG4gICAgWm9kQm9vbGVhbjogWm9kQm9vbGVhbixcbiAgICBab2REYXRlOiBab2REYXRlLFxuICAgIFpvZFN5bWJvbDogWm9kU3ltYm9sLFxuICAgIFpvZFVuZGVmaW5lZDogWm9kVW5kZWZpbmVkLFxuICAgIFpvZE51bGw6IFpvZE51bGwsXG4gICAgWm9kQW55OiBab2RBbnksXG4gICAgWm9kVW5rbm93bjogWm9kVW5rbm93bixcbiAgICBab2ROZXZlcjogWm9kTmV2ZXIsXG4gICAgWm9kVm9pZDogWm9kVm9pZCxcbiAgICBab2RBcnJheTogWm9kQXJyYXksXG4gICAgWm9kT2JqZWN0OiBab2RPYmplY3QsXG4gICAgWm9kVW5pb246IFpvZFVuaW9uLFxuICAgIFpvZERpc2NyaW1pbmF0ZWRVbmlvbjogWm9kRGlzY3JpbWluYXRlZFVuaW9uLFxuICAgIFpvZEludGVyc2VjdGlvbjogWm9kSW50ZXJzZWN0aW9uLFxuICAgIFpvZFR1cGxlOiBab2RUdXBsZSxcbiAgICBab2RSZWNvcmQ6IFpvZFJlY29yZCxcbiAgICBab2RNYXA6IFpvZE1hcCxcbiAgICBab2RTZXQ6IFpvZFNldCxcbiAgICBab2RGdW5jdGlvbjogWm9kRnVuY3Rpb24sXG4gICAgWm9kTGF6eTogWm9kTGF6eSxcbiAgICBab2RMaXRlcmFsOiBab2RMaXRlcmFsLFxuICAgIFpvZEVudW06IFpvZEVudW0sXG4gICAgWm9kTmF0aXZlRW51bTogWm9kTmF0aXZlRW51bSxcbiAgICBab2RQcm9taXNlOiBab2RQcm9taXNlLFxuICAgIFpvZEVmZmVjdHM6IFpvZEVmZmVjdHMsXG4gICAgWm9kVHJhbnNmb3JtZXI6IFpvZEVmZmVjdHMsXG4gICAgWm9kT3B0aW9uYWw6IFpvZE9wdGlvbmFsLFxuICAgIFpvZE51bGxhYmxlOiBab2ROdWxsYWJsZSxcbiAgICBab2REZWZhdWx0OiBab2REZWZhdWx0LFxuICAgIFpvZENhdGNoOiBab2RDYXRjaCxcbiAgICBab2ROYU46IFpvZE5hTixcbiAgICBCUkFORDogQlJBTkQsXG4gICAgWm9kQnJhbmRlZDogWm9kQnJhbmRlZCxcbiAgICBab2RQaXBlbGluZTogWm9kUGlwZWxpbmUsXG4gICAgWm9kUmVhZG9ubHk6IFpvZFJlYWRvbmx5LFxuICAgIGN1c3RvbTogY3VzdG9tLFxuICAgIFNjaGVtYTogWm9kVHlwZSxcbiAgICBab2RTY2hlbWE6IFpvZFR5cGUsXG4gICAgbGF0ZTogbGF0ZSxcbiAgICBnZXQgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kICgpIHsgcmV0dXJuIFpvZEZpcnN0UGFydHlUeXBlS2luZDsgfSxcbiAgICBjb2VyY2U6IGNvZXJjZSxcbiAgICBhbnk6IGFueVR5cGUsXG4gICAgYXJyYXk6IGFycmF5VHlwZSxcbiAgICBiaWdpbnQ6IGJpZ0ludFR5cGUsXG4gICAgYm9vbGVhbjogYm9vbGVhblR5cGUsXG4gICAgZGF0ZTogZGF0ZVR5cGUsXG4gICAgZGlzY3JpbWluYXRlZFVuaW9uOiBkaXNjcmltaW5hdGVkVW5pb25UeXBlLFxuICAgIGVmZmVjdDogZWZmZWN0c1R5cGUsXG4gICAgJ2VudW0nOiBlbnVtVHlwZSxcbiAgICAnZnVuY3Rpb24nOiBmdW5jdGlvblR5cGUsXG4gICAgJ2luc3RhbmNlb2YnOiBpbnN0YW5jZU9mVHlwZSxcbiAgICBpbnRlcnNlY3Rpb246IGludGVyc2VjdGlvblR5cGUsXG4gICAgbGF6eTogbGF6eVR5cGUsXG4gICAgbGl0ZXJhbDogbGl0ZXJhbFR5cGUsXG4gICAgbWFwOiBtYXBUeXBlLFxuICAgIG5hbjogbmFuVHlwZSxcbiAgICBuYXRpdmVFbnVtOiBuYXRpdmVFbnVtVHlwZSxcbiAgICBuZXZlcjogbmV2ZXJUeXBlLFxuICAgICdudWxsJzogbnVsbFR5cGUsXG4gICAgbnVsbGFibGU6IG51bGxhYmxlVHlwZSxcbiAgICBudW1iZXI6IG51bWJlclR5cGUsXG4gICAgb2JqZWN0OiBvYmplY3RUeXBlLFxuICAgIG9ib29sZWFuOiBvYm9vbGVhbixcbiAgICBvbnVtYmVyOiBvbnVtYmVyLFxuICAgIG9wdGlvbmFsOiBvcHRpb25hbFR5cGUsXG4gICAgb3N0cmluZzogb3N0cmluZyxcbiAgICBwaXBlbGluZTogcGlwZWxpbmVUeXBlLFxuICAgIHByZXByb2Nlc3M6IHByZXByb2Nlc3NUeXBlLFxuICAgIHByb21pc2U6IHByb21pc2VUeXBlLFxuICAgIHJlY29yZDogcmVjb3JkVHlwZSxcbiAgICBzZXQ6IHNldFR5cGUsXG4gICAgc3RyaWN0T2JqZWN0OiBzdHJpY3RPYmplY3RUeXBlLFxuICAgIHN0cmluZzogc3RyaW5nVHlwZSxcbiAgICBzeW1ib2w6IHN5bWJvbFR5cGUsXG4gICAgdHJhbnNmb3JtZXI6IGVmZmVjdHNUeXBlLFxuICAgIHR1cGxlOiB0dXBsZVR5cGUsXG4gICAgJ3VuZGVmaW5lZCc6IHVuZGVmaW5lZFR5cGUsXG4gICAgdW5pb246IHVuaW9uVHlwZSxcbiAgICB1bmtub3duOiB1bmtub3duVHlwZSxcbiAgICAndm9pZCc6IHZvaWRUeXBlLFxuICAgIE5FVkVSOiBORVZFUixcbiAgICBab2RJc3N1ZUNvZGU6IFpvZElzc3VlQ29kZSxcbiAgICBxdW90ZWxlc3NKc29uOiBxdW90ZWxlc3NKc29uLFxuICAgIFpvZEVycm9yOiBab2RFcnJvclxufSk7XG5cbmV4cG9ydCB7IEJSQU5ELCBESVJUWSwgRU1QVFlfUEFUSCwgSU5WQUxJRCwgTkVWRVIsIE9LLCBQYXJzZVN0YXR1cywgWm9kVHlwZSBhcyBTY2hlbWEsIFpvZEFueSwgWm9kQXJyYXksIFpvZEJpZ0ludCwgWm9kQm9vbGVhbiwgWm9kQnJhbmRlZCwgWm9kQ2F0Y2gsIFpvZERhdGUsIFpvZERlZmF1bHQsIFpvZERpc2NyaW1pbmF0ZWRVbmlvbiwgWm9kRWZmZWN0cywgWm9kRW51bSwgWm9kRXJyb3IsIFpvZEZpcnN0UGFydHlUeXBlS2luZCwgWm9kRnVuY3Rpb24sIFpvZEludGVyc2VjdGlvbiwgWm9kSXNzdWVDb2RlLCBab2RMYXp5LCBab2RMaXRlcmFsLCBab2RNYXAsIFpvZE5hTiwgWm9kTmF0aXZlRW51bSwgWm9kTmV2ZXIsIFpvZE51bGwsIFpvZE51bGxhYmxlLCBab2ROdW1iZXIsIFpvZE9iamVjdCwgWm9kT3B0aW9uYWwsIFpvZFBhcnNlZFR5cGUsIFpvZFBpcGVsaW5lLCBab2RQcm9taXNlLCBab2RSZWFkb25seSwgWm9kUmVjb3JkLCBab2RUeXBlIGFzIFpvZFNjaGVtYSwgWm9kU2V0LCBab2RTdHJpbmcsIFpvZFN5bWJvbCwgWm9kRWZmZWN0cyBhcyBab2RUcmFuc2Zvcm1lciwgWm9kVHVwbGUsIFpvZFR5cGUsIFpvZFVuZGVmaW5lZCwgWm9kVW5pb24sIFpvZFVua25vd24sIFpvZFZvaWQsIGFkZElzc3VlVG9Db250ZXh0LCBhbnlUeXBlIGFzIGFueSwgYXJyYXlUeXBlIGFzIGFycmF5LCBiaWdJbnRUeXBlIGFzIGJpZ2ludCwgYm9vbGVhblR5cGUgYXMgYm9vbGVhbiwgY29lcmNlLCBjdXN0b20sIGRhdGVUeXBlIGFzIGRhdGUsIGRhdGV0aW1lUmVnZXgsIHogYXMgZGVmYXVsdCwgZXJyb3JNYXAgYXMgZGVmYXVsdEVycm9yTWFwLCBkaXNjcmltaW5hdGVkVW5pb25UeXBlIGFzIGRpc2NyaW1pbmF0ZWRVbmlvbiwgZWZmZWN0c1R5cGUgYXMgZWZmZWN0LCBlbnVtVHlwZSBhcyBlbnVtLCBmdW5jdGlvblR5cGUgYXMgZnVuY3Rpb24sIGdldEVycm9yTWFwLCBnZXRQYXJzZWRUeXBlLCBpbnN0YW5jZU9mVHlwZSBhcyBpbnN0YW5jZW9mLCBpbnRlcnNlY3Rpb25UeXBlIGFzIGludGVyc2VjdGlvbiwgaXNBYm9ydGVkLCBpc0FzeW5jLCBpc0RpcnR5LCBpc1ZhbGlkLCBsYXRlLCBsYXp5VHlwZSBhcyBsYXp5LCBsaXRlcmFsVHlwZSBhcyBsaXRlcmFsLCBtYWtlSXNzdWUsIG1hcFR5cGUgYXMgbWFwLCBuYW5UeXBlIGFzIG5hbiwgbmF0aXZlRW51bVR5cGUgYXMgbmF0aXZlRW51bSwgbmV2ZXJUeXBlIGFzIG5ldmVyLCBudWxsVHlwZSBhcyBudWxsLCBudWxsYWJsZVR5cGUgYXMgbnVsbGFibGUsIG51bWJlclR5cGUgYXMgbnVtYmVyLCBvYmplY3RUeXBlIGFzIG9iamVjdCwgb2JqZWN0VXRpbCwgb2Jvb2xlYW4sIG9udW1iZXIsIG9wdGlvbmFsVHlwZSBhcyBvcHRpb25hbCwgb3N0cmluZywgcGlwZWxpbmVUeXBlIGFzIHBpcGVsaW5lLCBwcmVwcm9jZXNzVHlwZSBhcyBwcmVwcm9jZXNzLCBwcm9taXNlVHlwZSBhcyBwcm9taXNlLCBxdW90ZWxlc3NKc29uLCByZWNvcmRUeXBlIGFzIHJlY29yZCwgc2V0VHlwZSBhcyBzZXQsIHNldEVycm9yTWFwLCBzdHJpY3RPYmplY3RUeXBlIGFzIHN0cmljdE9iamVjdCwgc3RyaW5nVHlwZSBhcyBzdHJpbmcsIHN5bWJvbFR5cGUgYXMgc3ltYm9sLCBlZmZlY3RzVHlwZSBhcyB0cmFuc2Zvcm1lciwgdHVwbGVUeXBlIGFzIHR1cGxlLCB1bmRlZmluZWRUeXBlIGFzIHVuZGVmaW5lZCwgdW5pb25UeXBlIGFzIHVuaW9uLCB1bmtub3duVHlwZSBhcyB1bmtub3duLCB1dGlsLCB2b2lkVHlwZSBhcyB2b2lkLCB6IH07XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgQm9vayA9IHoudW5pb24oW1xuXHR6LmxpdGVyYWwoXCJwdVwiKSxcblx0ei5saXRlcmFsKFwia3Ugc3VsaVwiKSxcblx0ei5saXRlcmFsKFwia3UgbGlsaVwiKSxcblx0ei5saXRlcmFsKFwibm9uZVwiKSxcbl0pO1xuZXhwb3J0IHR5cGUgQm9vayA9IHouaW5mZXI8dHlwZW9mIEJvb2s+O1xuXG5leHBvcnQgY29uc3QgQ29pbmVkRXJhID0gei51bmlvbihbei5saXRlcmFsKFwicHJlLXB1XCIpLCB6LmxpdGVyYWwoXCJwb3N0LXB1XCIpLCB6LmxpdGVyYWwoXCJwb3N0LWt1XCIpXSk7XG5leHBvcnQgdHlwZSBDb2luZWRFcmEgPSB6LmluZmVyPHR5cGVvZiBDb2luZWRFcmE+O1xuXG5leHBvcnQgY29uc3QgVXNhZ2VDYXRlZ29yeSA9IHoudW5pb24oW1xuXHR6LmxpdGVyYWwoXCJjb3JlXCIpLFxuXHR6LmxpdGVyYWwoXCJjb21tb25cIiksXG5cdHoubGl0ZXJhbChcInVuY29tbW9uXCIpLFxuXHR6LmxpdGVyYWwoXCJvYnNjdXJlXCIpLFxuXHR6LmxpdGVyYWwoXCJzYW5kYm94XCIpLFxuXSk7XG5leHBvcnQgdHlwZSBVc2FnZUNhdGVnb3J5ID0gei5pbmZlcjx0eXBlb2YgVXNhZ2VDYXRlZ29yeT47XG5cbmV4cG9ydCBjb25zdCBXcml0aW5nU3lzdGVtID0gei5lbnVtKFtcblx0XCJzaXRlbGVuIHBvbmFcIixcblx0XCJzaXRlbGVuIHNpdGVsZW5cIixcblx0XCJhbHBoYWJldFwiLFxuXHRcInN5bGxhYmFyeVwiLFxuXHRcImxvZ29ncmFwaHlcIixcblx0XCJ0b2tpcG9uaWRvIGFscGhhYmV0XCIsXG5cdFwidG9raXBvbmlkbyBzeWxsYWJhcnlcIixcblx0XCJ0b2tpcG9uaWRvIGxvZ29ncmFwaHlcIixcbl0pO1xuZXhwb3J0IHR5cGUgV3JpdGluZ1N5c3RlbSA9IHouaW5mZXI8dHlwZW9mIFdyaXRpbmdTeXN0ZW0+O1xuXG5leHBvcnQgdHlwZSAqIGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGVkRGF0YTxcblx0T2JqIGV4dGVuZHMgeyB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gfSxcblx0S2V5IGV4dGVuZHMga2V5b2YgT2JqW1widHJhbnNsYXRpb25zXCJdW3N0cmluZ10sXG4+KGRhdGE6IE9iaiwga2V5OiBLZXksIGxhbmd1YWdlOiBzdHJpbmcpOiBPYmpbXCJ0cmFuc2xhdGlvbnNcIl1bc3RyaW5nXVtLZXldIHtcblx0cmV0dXJuICgoZGF0YS50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID8/IGRhdGEudHJhbnNsYXRpb25zW1wiZW5cIl0hKSBhcyBPYmpbXCJ0cmFuc2xhdGlvbnNcIl1bc3RyaW5nXSlbXG5cdFx0a2V5XG5cdF07XG59XG4iXSwibmFtZXMiOlsidXRpbCIsInZhbCIsImFzc2VydElzIiwiX2FyZyIsImFzc2VydE5ldmVyIiwiX3giLCJpdGVtcyIsIm9iaiIsIml0ZW0iLCJ2YWxpZEtleXMiLCJrIiwiZmlsdGVyZWQiLCJlIiwib2JqZWN0Iiwia2V5cyIsImtleSIsImFyciIsImNoZWNrZXIiLCJqb2luVmFsdWVzIiwiYXJyYXkiLCJzZXBhcmF0b3IiLCJfIiwidmFsdWUiLCJvYmplY3RVdGlsIiwiZmlyc3QiLCJzZWNvbmQiLCJab2RQYXJzZWRUeXBlIiwiZ2V0UGFyc2VkVHlwZSIsImRhdGEiLCJab2RJc3N1ZUNvZGUiLCJxdW90ZWxlc3NKc29uIiwiWm9kRXJyb3IiLCJpc3N1ZXMiLCJzdWIiLCJzdWJzIiwiYWN0dWFsUHJvdG8iLCJfbWFwcGVyIiwibWFwcGVyIiwiaXNzdWUiLCJmaWVsZEVycm9ycyIsInByb2Nlc3NFcnJvciIsImVycm9yIiwiY3VyciIsImkiLCJlbCIsImZvcm1FcnJvcnMiLCJlcnJvck1hcCIsIl9jdHgiLCJtZXNzYWdlIiwib3ZlcnJpZGVFcnJvck1hcCIsInNldEVycm9yTWFwIiwibWFwIiwiZ2V0RXJyb3JNYXAiLCJtYWtlSXNzdWUiLCJwYXJhbXMiLCJwYXRoIiwiZXJyb3JNYXBzIiwiaXNzdWVEYXRhIiwiZnVsbFBhdGgiLCJmdWxsSXNzdWUiLCJlcnJvck1lc3NhZ2UiLCJtYXBzIiwibSIsIkVNUFRZX1BBVEgiLCJhZGRJc3N1ZVRvQ29udGV4dCIsImN0eCIsIm92ZXJyaWRlTWFwIiwieCIsIlBhcnNlU3RhdHVzIiwic3RhdHVzIiwicmVzdWx0cyIsImFycmF5VmFsdWUiLCJzIiwiSU5WQUxJRCIsInBhaXJzIiwic3luY1BhaXJzIiwicGFpciIsImZpbmFsT2JqZWN0IiwiRElSVFkiLCJPSyIsImlzQWJvcnRlZCIsImlzRGlydHkiLCJpc1ZhbGlkIiwiaXNBc3luYyIsIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLCJyZWNlaXZlciIsInN0YXRlIiwia2luZCIsImYiLCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiZXJyb3JVdGlsIiwiX1pvZEVudW1fY2FjaGUiLCJfWm9kTmF0aXZlRW51bV9jYWNoZSIsIlBhcnNlSW5wdXRMYXp5UGF0aCIsInBhcmVudCIsImhhbmRsZVJlc3VsdCIsInJlc3VsdCIsInByb2Nlc3NDcmVhdGVQYXJhbXMiLCJpbnZhbGlkX3R5cGVfZXJyb3IiLCJyZXF1aXJlZF9lcnJvciIsImRlc2NyaXB0aW9uIiwiaXNzIiwiX2EiLCJfYiIsIlpvZFR5cGUiLCJkZWYiLCJpbnB1dCIsIm1heWJlQXN5bmNSZXN1bHQiLCJjaGVjayIsImdldElzc3VlUHJvcGVydGllcyIsInNldEVycm9yIiwicmVmaW5lbWVudERhdGEiLCJyZWZpbmVtZW50IiwiWm9kRWZmZWN0cyIsIlpvZEZpcnN0UGFydHlUeXBlS2luZCIsIlpvZE9wdGlvbmFsIiwiWm9kTnVsbGFibGUiLCJab2RBcnJheSIsIlpvZFByb21pc2UiLCJvcHRpb24iLCJab2RVbmlvbiIsImluY29taW5nIiwiWm9kSW50ZXJzZWN0aW9uIiwidHJhbnNmb3JtIiwiZGVmYXVsdFZhbHVlRnVuYyIsIlpvZERlZmF1bHQiLCJab2RCcmFuZGVkIiwiY2F0Y2hWYWx1ZUZ1bmMiLCJab2RDYXRjaCIsIlRoaXMiLCJ0YXJnZXQiLCJab2RQaXBlbGluZSIsIlpvZFJlYWRvbmx5IiwiY3VpZFJlZ2V4IiwiY3VpZDJSZWdleCIsInVsaWRSZWdleCIsInV1aWRSZWdleCIsIm5hbm9pZFJlZ2V4IiwiZHVyYXRpb25SZWdleCIsImVtYWlsUmVnZXgiLCJfZW1vamlSZWdleCIsImVtb2ppUmVnZXgiLCJpcHY0UmVnZXgiLCJpcHY2UmVnZXgiLCJiYXNlNjRSZWdleCIsImRhdGVSZWdleFNvdXJjZSIsImRhdGVSZWdleCIsInRpbWVSZWdleFNvdXJjZSIsImFyZ3MiLCJyZWdleCIsInRpbWVSZWdleCIsImRhdGV0aW1lUmVnZXgiLCJvcHRzIiwiaXNWYWxpZElQIiwiaXAiLCJ2ZXJzaW9uIiwiWm9kU3RyaW5nIiwidG9vQmlnIiwidG9vU21hbGwiLCJ2YWxpZGF0aW9uIiwib3B0aW9ucyIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsImxlbiIsImNoIiwibWluIiwibWF4IiwiZmxvYXRTYWZlUmVtYWluZGVyIiwic3RlcCIsInZhbERlY0NvdW50Iiwic3RlcERlY0NvdW50IiwiZGVjQ291bnQiLCJ2YWxJbnQiLCJzdGVwSW50IiwiWm9kTnVtYmVyIiwiaW5jbHVzaXZlIiwiWm9kQmlnSW50IiwiWm9kQm9vbGVhbiIsIlpvZERhdGUiLCJtaW5EYXRlIiwibWF4RGF0ZSIsIlpvZFN5bWJvbCIsIlpvZFVuZGVmaW5lZCIsIlpvZE51bGwiLCJab2RBbnkiLCJab2RVbmtub3duIiwiWm9kTmV2ZXIiLCJab2RWb2lkIiwic2NoZW1hIiwiZGVlcFBhcnRpYWxpZnkiLCJab2RPYmplY3QiLCJuZXdTaGFwZSIsImZpZWxkU2NoZW1hIiwiWm9kVHVwbGUiLCJzaGFwZSIsInNoYXBlS2V5cyIsImV4dHJhS2V5cyIsImtleVZhbGlkYXRvciIsInVua25vd25LZXlzIiwiY2F0Y2hhbGwiLCJfYyIsIl9kIiwiZGVmYXVsdEVycm9yIiwiYXVnbWVudGF0aW9uIiwibWVyZ2luZyIsImluZGV4IiwibWFzayIsIm5ld0ZpZWxkIiwiY3JlYXRlWm9kRW51bSIsImhhbmRsZVJlc3VsdHMiLCJ1bmlvbkVycm9ycyIsImNoaWxkQ3R4IiwiZGlydHkiLCJ0eXBlcyIsImdldERpc2NyaW1pbmF0b3IiLCJ0eXBlIiwiWm9kTGF6eSIsIlpvZExpdGVyYWwiLCJab2RFbnVtIiwiWm9kTmF0aXZlRW51bSIsIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsImRpc2NyaW1pbmF0b3IiLCJkaXNjcmltaW5hdG9yVmFsdWUiLCJvcHRpb25zTWFwIiwiZGlzY3JpbWluYXRvclZhbHVlcyIsIm1lcmdlVmFsdWVzIiwiYSIsImIiLCJhVHlwZSIsImJUeXBlIiwiYktleXMiLCJzaGFyZWRLZXlzIiwibmV3T2JqIiwic2hhcmVkVmFsdWUiLCJuZXdBcnJheSIsIml0ZW1BIiwiaXRlbUIiLCJoYW5kbGVQYXJzZWQiLCJwYXJzZWRMZWZ0IiwicGFyc2VkUmlnaHQiLCJtZXJnZWQiLCJsZWZ0IiwicmlnaHQiLCJpdGVtSW5kZXgiLCJyZXN0Iiwic2NoZW1hcyIsIlpvZFJlY29yZCIsImtleVR5cGUiLCJ2YWx1ZVR5cGUiLCJ0aGlyZCIsIlpvZE1hcCIsImZpbmFsTWFwIiwiWm9kU2V0IiwiZmluYWxpemVTZXQiLCJlbGVtZW50cyIsInBhcnNlZFNldCIsImVsZW1lbnQiLCJtaW5TaXplIiwibWF4U2l6ZSIsInNpemUiLCJab2RGdW5jdGlvbiIsIm1ha2VBcmdzSXNzdWUiLCJtYWtlUmV0dXJuc0lzc3VlIiwicmV0dXJucyIsImZuIiwibWUiLCJwYXJzZWRBcmdzIiwicGFyc2VkUmV0dXJucyIsInJldHVyblR5cGUiLCJmdW5jIiwiZ2V0dGVyIiwidmFsdWVzIiwiZXhwZWN0ZWRWYWx1ZXMiLCJlbnVtVmFsdWVzIiwibmV3RGVmIiwib3B0IiwibmF0aXZlRW51bVZhbHVlcyIsInByb21pc2lmaWVkIiwiZWZmZWN0IiwiY2hlY2tDdHgiLCJhcmciLCJwcm9jZXNzZWQiLCJleGVjdXRlUmVmaW5lbWVudCIsImFjYyIsImlubmVyIiwiYmFzZSIsInByZXByb2Nlc3MiLCJuZXdDdHgiLCJab2ROYU4iLCJCUkFORCIsImluUmVzdWx0IiwiZnJlZXplIiwiY3VzdG9tIiwiZmF0YWwiLCJwIiwiX2ZhdGFsIiwicDIiLCJsYXRlIiwiaW5zdGFuY2VPZlR5cGUiLCJjbHMiLCJzdHJpbmdUeXBlIiwibnVtYmVyVHlwZSIsIm5hblR5cGUiLCJiaWdJbnRUeXBlIiwiYm9vbGVhblR5cGUiLCJkYXRlVHlwZSIsInN5bWJvbFR5cGUiLCJ1bmRlZmluZWRUeXBlIiwibnVsbFR5cGUiLCJhbnlUeXBlIiwidW5rbm93blR5cGUiLCJuZXZlclR5cGUiLCJ2b2lkVHlwZSIsImFycmF5VHlwZSIsIm9iamVjdFR5cGUiLCJzdHJpY3RPYmplY3RUeXBlIiwidW5pb25UeXBlIiwiZGlzY3JpbWluYXRlZFVuaW9uVHlwZSIsImludGVyc2VjdGlvblR5cGUiLCJ0dXBsZVR5cGUiLCJyZWNvcmRUeXBlIiwibWFwVHlwZSIsInNldFR5cGUiLCJmdW5jdGlvblR5cGUiLCJsYXp5VHlwZSIsImxpdGVyYWxUeXBlIiwiZW51bVR5cGUiLCJuYXRpdmVFbnVtVHlwZSIsInByb21pc2VUeXBlIiwiZWZmZWN0c1R5cGUiLCJvcHRpb25hbFR5cGUiLCJudWxsYWJsZVR5cGUiLCJwcmVwcm9jZXNzVHlwZSIsInBpcGVsaW5lVHlwZSIsIm9zdHJpbmciLCJvbnVtYmVyIiwib2Jvb2xlYW4iLCJjb2VyY2UiLCJORVZFUiIsInoiLCJCb29rIiwiQ29pbmVkRXJhIiwiVXNhZ2VDYXRlZ29yeSIsIldyaXRpbmdTeXN0ZW0iLCJnZXRUcmFuc2xhdGVkRGF0YSIsImxhbmd1YWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQTtBQUFBLENBQ0gsU0FBVUEsR0FBTTtBQUNiLEVBQUFBLEVBQUssY0FBYyxDQUFDQyxNQUFRQTtBQUM1QixXQUFTQyxFQUFTQyxHQUFNO0FBQUEsRUFBRztBQUMzQixFQUFBSCxFQUFLLFdBQVdFO0FBQ2hCLFdBQVNFLEVBQVlDLEdBQUk7QUFDckIsVUFBTSxJQUFJLE1BQUs7QUFBQSxFQUNsQjtBQUNELEVBQUFMLEVBQUssY0FBY0ksR0FDbkJKLEVBQUssY0FBYyxDQUFDTSxNQUFVO0FBQzFCLFVBQU1DLElBQU0sQ0FBQTtBQUNaLGVBQVdDLEtBQVFGO0FBQ2YsTUFBQUMsRUFBSUMsQ0FBSSxJQUFJQTtBQUVoQixXQUFPRDtBQUFBLEVBQ2YsR0FDSVAsRUFBSyxxQkFBcUIsQ0FBQ08sTUFBUTtBQUMvQixVQUFNRSxJQUFZVCxFQUFLLFdBQVdPLENBQUcsRUFBRSxPQUFPLENBQUNHLE1BQU0sT0FBT0gsRUFBSUEsRUFBSUcsQ0FBQyxDQUFDLEtBQU0sUUFBUSxHQUM5RUMsSUFBVyxDQUFBO0FBQ2pCLGVBQVdELEtBQUtEO0FBQ1osTUFBQUUsRUFBU0QsQ0FBQyxJQUFJSCxFQUFJRyxDQUFDO0FBRXZCLFdBQU9WLEVBQUssYUFBYVcsQ0FBUTtBQUFBLEVBQ3pDLEdBQ0lYLEVBQUssZUFBZSxDQUFDTyxNQUNWUCxFQUFLLFdBQVdPLENBQUcsRUFBRSxJQUFJLFNBQVVLLEdBQUc7QUFDekMsV0FBT0wsRUFBSUssQ0FBQztBQUFBLEVBQ3hCLENBQVMsR0FFTFosRUFBSyxh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
|