vitest 0.2.5 → 0.3.0

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.
@@ -0,0 +1,406 @@
1
+ import path from 'path';
2
+ import require$$0 from 'tty';
3
+ import { isPackageExists } from 'local-pkg';
4
+
5
+ var picocolors = {exports: {}};
6
+
7
+ let tty = require$$0;
8
+
9
+ let isColorSupported =
10
+ !("NO_COLOR" in process.env || process.argv.includes("--no-color")) &&
11
+ ("FORCE_COLOR" in process.env ||
12
+ process.argv.includes("--color") ||
13
+ process.platform === "win32" ||
14
+ (tty.isatty(1) && process.env.TERM !== "dumb") ||
15
+ "CI" in process.env);
16
+
17
+ let formatter =
18
+ (open, close, replace = open) =>
19
+ input => {
20
+ let string = "" + input;
21
+ let index = string.indexOf(close, open.length);
22
+ return ~index
23
+ ? open + replaceClose(string, close, replace, index) + close
24
+ : open + string + close
25
+ };
26
+
27
+ let replaceClose = (string, close, replace, index) => {
28
+ let start = string.substring(0, index) + replace;
29
+ let end = string.substring(index + close.length);
30
+ let nextIndex = end.indexOf(close);
31
+ return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end
32
+ };
33
+
34
+ let createColors = (enabled = isColorSupported) => ({
35
+ isColorSupported: enabled,
36
+ reset: enabled ? s => `\x1b[0m${s}\x1b[0m` : String,
37
+ bold: enabled ? formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") : String,
38
+ dim: enabled ? formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") : String,
39
+ italic: enabled ? formatter("\x1b[3m", "\x1b[23m") : String,
40
+ underline: enabled ? formatter("\x1b[4m", "\x1b[24m") : String,
41
+ inverse: enabled ? formatter("\x1b[7m", "\x1b[27m") : String,
42
+ hidden: enabled ? formatter("\x1b[8m", "\x1b[28m") : String,
43
+ strikethrough: enabled ? formatter("\x1b[9m", "\x1b[29m") : String,
44
+ black: enabled ? formatter("\x1b[30m", "\x1b[39m") : String,
45
+ red: enabled ? formatter("\x1b[31m", "\x1b[39m") : String,
46
+ green: enabled ? formatter("\x1b[32m", "\x1b[39m") : String,
47
+ yellow: enabled ? formatter("\x1b[33m", "\x1b[39m") : String,
48
+ blue: enabled ? formatter("\x1b[34m", "\x1b[39m") : String,
49
+ magenta: enabled ? formatter("\x1b[35m", "\x1b[39m") : String,
50
+ cyan: enabled ? formatter("\x1b[36m", "\x1b[39m") : String,
51
+ white: enabled ? formatter("\x1b[37m", "\x1b[39m") : String,
52
+ gray: enabled ? formatter("\x1b[90m", "\x1b[39m") : String,
53
+ bgBlack: enabled ? formatter("\x1b[40m", "\x1b[49m") : String,
54
+ bgRed: enabled ? formatter("\x1b[41m", "\x1b[49m") : String,
55
+ bgGreen: enabled ? formatter("\x1b[42m", "\x1b[49m") : String,
56
+ bgYellow: enabled ? formatter("\x1b[43m", "\x1b[49m") : String,
57
+ bgBlue: enabled ? formatter("\x1b[44m", "\x1b[49m") : String,
58
+ bgMagenta: enabled ? formatter("\x1b[45m", "\x1b[49m") : String,
59
+ bgCyan: enabled ? formatter("\x1b[46m", "\x1b[49m") : String,
60
+ bgWhite: enabled ? formatter("\x1b[47m", "\x1b[49m") : String,
61
+ });
62
+
63
+ picocolors.exports = createColors();
64
+ picocolors.exports.createColors = createColors;
65
+
66
+ var c = picocolors.exports;
67
+
68
+ function normalizeWindowsPath(input = "") {
69
+ if (!input.includes("\\")) {
70
+ return input;
71
+ }
72
+ return input.replace(/\\/g, "/");
73
+ }
74
+
75
+ const _UNC_REGEX = /^[/][/]/;
76
+ const _UNC_DRIVE_REGEX = /^[/][/]([.]{1,2}[/])?([a-zA-Z]):[/]/;
77
+ const _IS_ABSOLUTE_RE = /^\/|^\\|^[a-zA-Z]:[/\\]/;
78
+ const sep = "/";
79
+ const delimiter = ":";
80
+ const normalize = function(path2) {
81
+ if (path2.length === 0) {
82
+ return ".";
83
+ }
84
+ path2 = normalizeWindowsPath(path2);
85
+ const isUNCPath = path2.match(_UNC_REGEX);
86
+ const hasUNCDrive = isUNCPath && path2.match(_UNC_DRIVE_REGEX);
87
+ const isPathAbsolute = isAbsolute(path2);
88
+ const trailingSeparator = path2[path2.length - 1] === "/";
89
+ path2 = normalizeString(path2, !isPathAbsolute);
90
+ if (path2.length === 0) {
91
+ if (isPathAbsolute) {
92
+ return "/";
93
+ }
94
+ return trailingSeparator ? "./" : ".";
95
+ }
96
+ if (trailingSeparator) {
97
+ path2 += "/";
98
+ }
99
+ if (isUNCPath) {
100
+ if (hasUNCDrive) {
101
+ return `//./${path2}`;
102
+ }
103
+ return `//${path2}`;
104
+ }
105
+ return isPathAbsolute && !isAbsolute(path2) ? `/${path2}` : path2;
106
+ };
107
+ const join = function(...args) {
108
+ if (args.length === 0) {
109
+ return ".";
110
+ }
111
+ let joined;
112
+ for (let i = 0; i < args.length; ++i) {
113
+ const arg = args[i];
114
+ if (arg.length > 0) {
115
+ if (joined === void 0) {
116
+ joined = arg;
117
+ } else {
118
+ joined += `/${arg}`;
119
+ }
120
+ }
121
+ }
122
+ if (joined === void 0) {
123
+ return ".";
124
+ }
125
+ return normalize(joined);
126
+ };
127
+ const resolve = function(...args) {
128
+ args = args.map((arg) => normalizeWindowsPath(arg));
129
+ let resolvedPath = "";
130
+ let resolvedAbsolute = false;
131
+ for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {
132
+ const path2 = i >= 0 ? args[i] : process.cwd();
133
+ if (path2.length === 0) {
134
+ continue;
135
+ }
136
+ resolvedPath = `${path2}/${resolvedPath}`;
137
+ resolvedAbsolute = isAbsolute(path2);
138
+ }
139
+ resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
140
+ if (resolvedAbsolute && !isAbsolute(resolvedPath)) {
141
+ return `/${resolvedPath}`;
142
+ }
143
+ return resolvedPath.length > 0 ? resolvedPath : ".";
144
+ };
145
+ function normalizeString(path2, allowAboveRoot) {
146
+ let res = "";
147
+ let lastSegmentLength = 0;
148
+ let lastSlash = -1;
149
+ let dots = 0;
150
+ let char = null;
151
+ for (let i = 0; i <= path2.length; ++i) {
152
+ if (i < path2.length) {
153
+ char = path2[i];
154
+ } else if (char === "/") {
155
+ break;
156
+ } else {
157
+ char = "/";
158
+ }
159
+ if (char === "/") {
160
+ if (lastSlash === i - 1 || dots === 1) ; else if (dots === 2) {
161
+ if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
162
+ if (res.length > 2) {
163
+ const lastSlashIndex = res.lastIndexOf("/");
164
+ if (lastSlashIndex === -1) {
165
+ res = "";
166
+ lastSegmentLength = 0;
167
+ } else {
168
+ res = res.slice(0, lastSlashIndex);
169
+ lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
170
+ }
171
+ lastSlash = i;
172
+ dots = 0;
173
+ continue;
174
+ } else if (res.length !== 0) {
175
+ res = "";
176
+ lastSegmentLength = 0;
177
+ lastSlash = i;
178
+ dots = 0;
179
+ continue;
180
+ }
181
+ }
182
+ if (allowAboveRoot) {
183
+ res += res.length > 0 ? "/.." : "..";
184
+ lastSegmentLength = 2;
185
+ }
186
+ } else {
187
+ if (res.length > 0) {
188
+ res += `/${path2.slice(lastSlash + 1, i)}`;
189
+ } else {
190
+ res = path2.slice(lastSlash + 1, i);
191
+ }
192
+ lastSegmentLength = i - lastSlash - 1;
193
+ }
194
+ lastSlash = i;
195
+ dots = 0;
196
+ } else if (char === "." && dots !== -1) {
197
+ ++dots;
198
+ } else {
199
+ dots = -1;
200
+ }
201
+ }
202
+ return res;
203
+ }
204
+ const isAbsolute = function(p) {
205
+ return _IS_ABSOLUTE_RE.test(p);
206
+ };
207
+ const toNamespacedPath = function(p) {
208
+ return normalizeWindowsPath(p);
209
+ };
210
+ const extname = function(p) {
211
+ return path.posix.extname(normalizeWindowsPath(p));
212
+ };
213
+ const relative = function(from, to) {
214
+ return path.posix.relative(normalizeWindowsPath(from), normalizeWindowsPath(to));
215
+ };
216
+ const dirname = function(p) {
217
+ return path.posix.dirname(normalizeWindowsPath(p));
218
+ };
219
+ const format = function(p) {
220
+ return normalizeWindowsPath(path.posix.format(p));
221
+ };
222
+ const basename = function(p, ext) {
223
+ return path.posix.basename(normalizeWindowsPath(p), ext);
224
+ };
225
+ const parse = function(p) {
226
+ return path.posix.parse(normalizeWindowsPath(p));
227
+ };
228
+
229
+ const _path = /*#__PURE__*/Object.freeze({
230
+ __proto__: null,
231
+ sep: sep,
232
+ delimiter: delimiter,
233
+ normalize: normalize,
234
+ join: join,
235
+ resolve: resolve,
236
+ normalizeString: normalizeString,
237
+ isAbsolute: isAbsolute,
238
+ toNamespacedPath: toNamespacedPath,
239
+ extname: extname,
240
+ relative: relative,
241
+ dirname: dirname,
242
+ format: format,
243
+ basename: basename,
244
+ parse: parse
245
+ });
246
+
247
+ const index = {
248
+ ..._path
249
+ };
250
+
251
+ function notNullish(v) {
252
+ return v != null;
253
+ }
254
+ function slash(str) {
255
+ return str.replace(/\\/g, "/");
256
+ }
257
+ function mergeSlashes(str) {
258
+ return str.replace(/\/\//g, "/");
259
+ }
260
+ const noop = () => {
261
+ };
262
+ function toArray(array) {
263
+ array = array || [];
264
+ if (Array.isArray(array))
265
+ return array;
266
+ return [array];
267
+ }
268
+ const toString = (v) => Object.prototype.toString.call(v);
269
+ const isPlainObject = (val) => toString(val) === "[object Object]";
270
+ function isObject(item) {
271
+ return item != null && typeof item === "object" && !Array.isArray(item);
272
+ }
273
+ function deepMerge(target, ...sources) {
274
+ if (!sources.length)
275
+ return target;
276
+ const source = sources.shift();
277
+ if (source === void 0)
278
+ return target;
279
+ if (isMergableObject(target) && isMergableObject(source)) {
280
+ Object.keys(source).forEach((key) => {
281
+ if (isMergableObject(source[key])) {
282
+ if (!target[key])
283
+ target[key] = {};
284
+ deepMerge(target[key], source[key]);
285
+ } else if (Array.isArray(source[key])) {
286
+ if (!target[key])
287
+ target[key] = [];
288
+ target[key].push(...source[key]);
289
+ } else {
290
+ target[key] = source[key];
291
+ }
292
+ });
293
+ }
294
+ return deepMerge(target, ...sources);
295
+ }
296
+ function isMergableObject(item) {
297
+ return isPlainObject(item) && !Array.isArray(item);
298
+ }
299
+
300
+ function getTests(suite) {
301
+ return toArray(suite).flatMap((s) => s.type === "test" ? [s] : s.tasks.flatMap((c) => c.type === "test" ? [c] : getTests(c)));
302
+ }
303
+ function getSuites(suite) {
304
+ return toArray(suite).flatMap((s) => s.type === "suite" ? [s, ...getSuites(s.tasks)] : []);
305
+ }
306
+ function hasTests(suite) {
307
+ return toArray(suite).some((s) => s.tasks.some((c) => c.type === "test" || hasTests(c)));
308
+ }
309
+ function hasFailed(suite) {
310
+ return toArray(suite).some((s) => {
311
+ var _a;
312
+ return ((_a = s.result) == null ? void 0 : _a.state) === "fail" || s.type === "suite" && hasFailed(s.tasks);
313
+ });
314
+ }
315
+ function hasFailedSnapshot(suite) {
316
+ return getTests(suite).some((s) => {
317
+ var _a, _b;
318
+ const message = (_b = (_a = s.result) == null ? void 0 : _a.error) == null ? void 0 : _b.message;
319
+ return message == null ? void 0 : message.match(/Snapshot .* mismatched/);
320
+ });
321
+ }
322
+ function getNames(task) {
323
+ const names = [task.name];
324
+ let current = task;
325
+ while ((current == null ? void 0 : current.suite) || (current == null ? void 0 : current.file)) {
326
+ current = current.suite || current.file;
327
+ if (current == null ? void 0 : current.name)
328
+ names.unshift(current.name);
329
+ }
330
+ return names;
331
+ }
332
+
333
+ const isWindows = process.platform === "win32";
334
+ function partitionSuiteChildren(suite) {
335
+ let tasksGroup = [];
336
+ const tasksGroups = [];
337
+ for (const c2 of suite.tasks) {
338
+ if (tasksGroup.length === 0 || c2.concurrent === tasksGroup[0].concurrent) {
339
+ tasksGroup.push(c2);
340
+ } else {
341
+ tasksGroups.push(tasksGroup);
342
+ tasksGroup = [c2];
343
+ }
344
+ }
345
+ if (tasksGroup.length > 0)
346
+ tasksGroups.push(tasksGroup);
347
+ return tasksGroups;
348
+ }
349
+ function getFullName(task) {
350
+ return getNames(task).join(c.dim(" > "));
351
+ }
352
+ async function ensurePackageInstalled(dependency, promptInstall = !process.env.CI && process.stdout.isTTY) {
353
+ if (isPackageExists(dependency))
354
+ return true;
355
+ process.stderr.write(c.red(`${c.inverse(c.red(" MISSING DEP "))} Can not find dependency '${dependency}'
356
+
357
+ `));
358
+ if (!promptInstall)
359
+ return false;
360
+ const prompts = await import('./index-fa899e66.js').then(function (n) { return n.i; });
361
+ const { install } = await prompts.prompt({
362
+ type: "confirm",
363
+ name: "install",
364
+ message: c.reset(`Do you want to install ${c.green(dependency)}?`)
365
+ });
366
+ if (install) {
367
+ await (await import('./index-ce49e384.js')).installPackage(dependency, { dev: true });
368
+ process.stderr.write(c.yellow(`
369
+ Package ${dependency} installed, re-run the command to start.
370
+ `));
371
+ process.exit(1);
372
+ return true;
373
+ }
374
+ return false;
375
+ }
376
+ function getCallLastIndex(code) {
377
+ let charIndex = -1;
378
+ let inString = null;
379
+ let startedBracers = 0;
380
+ let endedBracers = 0;
381
+ let beforeChar = null;
382
+ while (charIndex <= code.length) {
383
+ beforeChar = code[charIndex];
384
+ charIndex++;
385
+ const char = code[charIndex];
386
+ const isCharString = char === '"' || char === "'" || char === "`";
387
+ if (isCharString && beforeChar !== "\\") {
388
+ if (inString === char)
389
+ inString = null;
390
+ else if (!inString)
391
+ inString = char;
392
+ }
393
+ if (!inString) {
394
+ if (char === "(")
395
+ startedBracers++;
396
+ if (char === ")")
397
+ endedBracers++;
398
+ }
399
+ if (startedBracers && endedBracers && startedBracers === endedBracers)
400
+ return charIndex;
401
+ }
402
+ return null;
403
+ }
404
+
405
+ export { notNullish as a, isAbsolute as b, c, relative as d, ensurePackageInstalled as e, dirname as f, basename as g, getFullName as h, isObject as i, hasFailed as j, hasFailedSnapshot as k, getSuites as l, getTests as m, noop as n, deepMerge as o, getCallLastIndex as p, isWindows as q, resolve as r, slash as s, toArray as t, mergeSlashes as u, index as v, getNames as w, partitionSuiteChildren as x, hasTests as y };
406
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtZjU1ZTdiNTkuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9waWNvY29sb3JzQDEuMC4wL25vZGVfbW9kdWxlcy9waWNvY29sb3JzL3BpY29jb2xvcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcGF0aGVAMC4yLjAvbm9kZV9tb2R1bGVzL3BhdGhlL2Rpc3QvaW5kZXgubWpzIiwiLi4vc3JjL3V0aWxzL2Jhc2UudHMiLCIuLi9zcmMvdXRpbHMvdGFza3MudHMiLCIuLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IHR0eSA9IHJlcXVpcmUoXCJ0dHlcIilcblxubGV0IGlzQ29sb3JTdXBwb3J0ZWQgPVxuXHQhKFwiTk9fQ09MT1JcIiBpbiBwcm9jZXNzLmVudiB8fCBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoXCItLW5vLWNvbG9yXCIpKSAmJlxuXHQoXCJGT1JDRV9DT0xPUlwiIGluIHByb2Nlc3MuZW52IHx8XG5cdFx0cHJvY2Vzcy5hcmd2LmluY2x1ZGVzKFwiLS1jb2xvclwiKSB8fFxuXHRcdHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiB8fFxuXHRcdCh0dHkuaXNhdHR5KDEpICYmIHByb2Nlc3MuZW52LlRFUk0gIT09IFwiZHVtYlwiKSB8fFxuXHRcdFwiQ0lcIiBpbiBwcm9jZXNzLmVudilcblxubGV0IGZvcm1hdHRlciA9XG5cdChvcGVuLCBjbG9zZSwgcmVwbGFjZSA9IG9wZW4pID0+XG5cdGlucHV0ID0+IHtcblx0XHRsZXQgc3RyaW5nID0gXCJcIiArIGlucHV0XG5cdFx0bGV0IGluZGV4ID0gc3RyaW5nLmluZGV4T2YoY2xvc2UsIG9wZW4ubGVuZ3RoKVxuXHRcdHJldHVybiB+aW5kZXhcblx0XHRcdD8gb3BlbiArIHJlcGxhY2VDbG9zZShzdHJpbmcsIGNsb3NlLCByZXBsYWNlLCBpbmRleCkgKyBjbG9zZVxuXHRcdFx0OiBvcGVuICsgc3RyaW5nICsgY2xvc2Vcblx0fVxuXG5sZXQgcmVwbGFjZUNsb3NlID0gKHN0cmluZywgY2xvc2UsIHJlcGxhY2UsIGluZGV4KSA9PiB7XG5cdGxldCBzdGFydCA9IHN0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVxuXHRsZXQgZW5kID0gc3RyaW5nLnN1YnN0cmluZyhpbmRleCArIGNsb3NlLmxlbmd0aClcblx0bGV0IG5leHRJbmRleCA9IGVuZC5pbmRleE9mKGNsb3NlKVxuXHRyZXR1cm4gfm5leHRJbmRleCA/IHN0YXJ0ICsgcmVwbGFjZUNsb3NlKGVuZCwgY2xvc2UsIHJlcGxhY2UsIG5leHRJbmRleCkgOiBzdGFydCArIGVuZFxufVxuXG5sZXQgY3JlYXRlQ29sb3JzID0gKGVuYWJsZWQgPSBpc0NvbG9yU3VwcG9ydGVkKSA9PiAoe1xuXHRpc0NvbG9yU3VwcG9ydGVkOiBlbmFibGVkLFxuXHRyZXNldDogZW5hYmxlZCA/IHMgPT4gYFxceDFiWzBtJHtzfVxceDFiWzBtYCA6IFN0cmluZyxcblx0Ym9sZDogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzFtXCIsIFwiXFx4MWJbMjJtXCIsIFwiXFx4MWJbMjJtXFx4MWJbMW1cIikgOiBTdHJpbmcsXG5cdGRpbTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzJtXCIsIFwiXFx4MWJbMjJtXCIsIFwiXFx4MWJbMjJtXFx4MWJbMm1cIikgOiBTdHJpbmcsXG5cdGl0YWxpYzogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzNtXCIsIFwiXFx4MWJbMjNtXCIpIDogU3RyaW5nLFxuXHR1bmRlcmxpbmU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0bVwiLCBcIlxceDFiWzI0bVwiKSA6IFN0cmluZyxcblx0aW52ZXJzZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzdtXCIsIFwiXFx4MWJbMjdtXCIpIDogU3RyaW5nLFxuXHRoaWRkZW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls4bVwiLCBcIlxceDFiWzI4bVwiKSA6IFN0cmluZyxcblx0c3RyaWtldGhyb3VnaDogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzltXCIsIFwiXFx4MWJbMjltXCIpIDogU3RyaW5nLFxuXHRibGFjazogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzMwbVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0cmVkOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzFtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRncmVlbjogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzMybVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0eWVsbG93OiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzNtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRibHVlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzRtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRtYWdlbnRhOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzVtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHRjeWFuOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbMzZtXCIsIFwiXFx4MWJbMzltXCIpIDogU3RyaW5nLFxuXHR3aGl0ZTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzM3bVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0Z3JheTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzkwbVwiLCBcIlxceDFiWzM5bVwiKSA6IFN0cmluZyxcblx0YmdCbGFjazogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQwbVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdSZWQ6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0MW1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnR3JlZW46IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0Mm1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnWWVsbG93OiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDNtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ0JsdWU6IGVuYWJsZWQgPyBmb3JtYXR0ZXIoXCJcXHgxYls0NG1cIiwgXCJcXHgxYls0OW1cIikgOiBTdHJpbmcsXG5cdGJnTWFnZW50YTogZW5hYmxlZCA/IGZvcm1hdHRlcihcIlxceDFiWzQ1bVwiLCBcIlxceDFiWzQ5bVwiKSA6IFN0cmluZyxcblx0YmdDeWFuOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDZtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxuXHRiZ1doaXRlOiBlbmFibGVkID8gZm9ybWF0dGVyKFwiXFx4MWJbNDdtXCIsIFwiXFx4MWJbNDltXCIpIDogU3RyaW5nLFxufSlcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDb2xvcnMoKVxubW9kdWxlLmV4cG9ydHMuY3JlYXRlQ29sb3JzID0gY3JlYXRlQ29sb3JzXG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuZnVuY3Rpb24gbm9ybWFsaXplV2luZG93c1BhdGgoaW5wdXQgPSBcIlwiKSB7XG4gIGlmICghaW5wdXQuaW5jbHVkZXMoXCJcXFxcXCIpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbn1cblxuY29uc3QgX1VOQ19SRUdFWCA9IC9eWy9dWy9dLztcbmNvbnN0IF9VTkNfRFJJVkVfUkVHRVggPSAvXlsvXVsvXShbLl17MSwyfVsvXSk/KFthLXpBLVpdKTpbL10vO1xuY29uc3QgX0lTX0FCU09MVVRFX1JFID0gL15cXC98XlxcXFx8XlthLXpBLVpdOlsvXFxcXF0vO1xuY29uc3Qgc2VwID0gXCIvXCI7XG5jb25zdCBkZWxpbWl0ZXIgPSBcIjpcIjtcbmNvbnN0IG5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgyKSB7XG4gIGlmIChwYXRoMi5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCIuXCI7XG4gIH1cbiAgcGF0aDIgPSBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoMik7XG4gIGNvbnN0IGlzVU5DUGF0aCA9IHBhdGgyLm1hdGNoKF9VTkNfUkVHRVgpO1xuICBjb25zdCBoYXNVTkNEcml2ZSA9IGlzVU5DUGF0aCAmJiBwYXRoMi5tYXRjaChfVU5DX0RSSVZFX1JFR0VYKTtcbiAgY29uc3QgaXNQYXRoQWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgyKTtcbiAgY29uc3QgdHJhaWxpbmdTZXBhcmF0b3IgPSBwYXRoMltwYXRoMi5sZW5ndGggLSAxXSA9PT0gXCIvXCI7XG4gIHBhdGgyID0gbm9ybWFsaXplU3RyaW5nKHBhdGgyLCAhaXNQYXRoQWJzb2x1dGUpO1xuICBpZiAocGF0aDIubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzUGF0aEFic29sdXRlKSB7XG4gICAgICByZXR1cm4gXCIvXCI7XG4gICAgfVxuICAgIHJldHVybiB0cmFpbGluZ1NlcGFyYXRvciA/IFwiLi9cIiA6IFwiLlwiO1xuICB9XG4gIGlmICh0cmFpbGluZ1NlcGFyYXRvcikge1xuICAgIHBhdGgyICs9IFwiL1wiO1xuICB9XG4gIGlmIChpc1VOQ1BhdGgpIHtcbiAgICBpZiAoaGFzVU5DRHJpdmUpIHtcbiAgICAgIHJldHVybiBgLy8uLyR7cGF0aDJ9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAvLyR7cGF0aDJ9YDtcbiAgfVxuICByZXR1cm4gaXNQYXRoQWJzb2x1dGUgJiYgIWlzQWJzb2x1dGUocGF0aDIpID8gYC8ke3BhdGgyfWAgOiBwYXRoMjtcbn07XG5jb25zdCBqb2luID0gZnVuY3Rpb24oLi4uYXJncykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCIuXCI7XG4gIH1cbiAgbGV0IGpvaW5lZDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChqb2luZWQgPT09IHZvaWQgMCkge1xuICAgICAgICBqb2luZWQgPSBhcmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqb2luZWQgKz0gYC8ke2FyZ31gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoam9pbmVkID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gXCIuXCI7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZShqb2luZWQpO1xufTtcbmNvbnN0IHJlc29sdmUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gIGFyZ3MgPSBhcmdzLm1hcCgoYXJnKSA9PiBub3JtYWxpemVXaW5kb3dzUGF0aChhcmcpKTtcbiAgbGV0IHJlc29sdmVkUGF0aCA9IFwiXCI7XG4gIGxldCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSBhcmdzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIGNvbnN0IHBhdGgyID0gaSA+PSAwID8gYXJnc1tpXSA6IHByb2Nlc3MuY3dkKCk7XG4gICAgaWYgKHBhdGgyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGgyfS8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgyKTtcbiAgfVxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmcocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSk7XG4gIGlmIChyZXNvbHZlZEFic29sdXRlICYmICFpc0Fic29sdXRlKHJlc29sdmVkUGF0aCkpIHtcbiAgICByZXR1cm4gYC8ke3Jlc29sdmVkUGF0aH1gO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFBhdGgubGVuZ3RoID4gMCA/IHJlc29sdmVkUGF0aCA6IFwiLlwiO1xufTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZyhwYXRoMiwgYWxsb3dBYm92ZVJvb3QpIHtcbiAgbGV0IHJlcyA9IFwiXCI7XG4gIGxldCBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIGxldCBsYXN0U2xhc2ggPSAtMTtcbiAgbGV0IGRvdHMgPSAwO1xuICBsZXQgY2hhciA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhdGgyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGkgPCBwYXRoMi5sZW5ndGgpIHtcbiAgICAgIGNoYXIgPSBwYXRoMltpXTtcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09IFwiL1wiKSB7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhciA9IFwiL1wiO1xuICAgIH1cbiAgICBpZiAoY2hhciA9PT0gXCIvXCIpIHtcbiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGkgLSAxIHx8IGRvdHMgPT09IDEpIDsgZWxzZSBpZiAoZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKDAsIGxhc3RTbGFzaEluZGV4KTtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXMubGVuZ3RoIC0gMSAtIHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJlcyA9IFwiXCI7XG4gICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgICAgICAgcmVzICs9IHJlcy5sZW5ndGggPiAwID8gXCIvLi5cIiA6IFwiLi5cIjtcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlcyArPSBgLyR7cGF0aDIuc2xpY2UobGFzdFNsYXNoICsgMSwgaSl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMgPSBwYXRoMi5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGkgLSBsYXN0U2xhc2ggLSAxO1xuICAgICAgfVxuICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgIGRvdHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCIuXCIgJiYgZG90cyAhPT0gLTEpIHtcbiAgICAgICsrZG90cztcbiAgICB9IGVsc2Uge1xuICAgICAgZG90cyA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuY29uc3QgaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uKHApIHtcbiAgcmV0dXJuIF9JU19BQlNPTFVURV9SRS50ZXN0KHApO1xufTtcbmNvbnN0IHRvTmFtZXNwYWNlZFBhdGggPSBmdW5jdGlvbihwKSB7XG4gIHJldHVybiBub3JtYWxpemVXaW5kb3dzUGF0aChwKTtcbn07XG5jb25zdCBleHRuYW1lID0gZnVuY3Rpb24ocCkge1xuICByZXR1cm4gcGF0aC5wb3NpeC5leHRuYW1lKG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHApKTtcbn07XG5jb25zdCByZWxhdGl2ZSA9IGZ1bmN0aW9uKGZyb20sIHRvKSB7XG4gIHJldHVybiBwYXRoLnBvc2l4LnJlbGF0aXZlKG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGZyb20pLCBub3JtYWxpemVXaW5kb3dzUGF0aCh0bykpO1xufTtcbmNvbnN0IGRpcm5hbWUgPSBmdW5jdGlvbihwKSB7XG4gIHJldHVybiBwYXRoLnBvc2l4LmRpcm5hbWUobm9ybWFsaXplV2luZG93c1BhdGgocCkpO1xufTtcbmNvbnN0IGZvcm1hdCA9IGZ1bmN0aW9uKHApIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKHBhdGgucG9zaXguZm9ybWF0KHApKTtcbn07XG5jb25zdCBiYXNlbmFtZSA9IGZ1bmN0aW9uKHAsIGV4dCkge1xuICByZXR1cm4gcGF0aC5wb3NpeC5iYXNlbmFtZShub3JtYWxpemVXaW5kb3dzUGF0aChwKSwgZXh0KTtcbn07XG5jb25zdCBwYXJzZSA9IGZ1bmN0aW9uKHApIHtcbiAgcmV0dXJuIHBhdGgucG9zaXgucGFyc2Uobm9ybWFsaXplV2luZG93c1BhdGgocCkpO1xufTtcblxuY29uc3QgX3BhdGggPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgc2VwOiBzZXAsXG4gIGRlbGltaXRlcjogZGVsaW1pdGVyLFxuICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgam9pbjogam9pbixcbiAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgbm9ybWFsaXplU3RyaW5nOiBub3JtYWxpemVTdHJpbmcsXG4gIGlzQWJzb2x1dGU6IGlzQWJzb2x1dGUsXG4gIHRvTmFtZXNwYWNlZFBhdGg6IHRvTmFtZXNwYWNlZFBhdGgsXG4gIGV4dG5hbWU6IGV4dG5hbWUsXG4gIHJlbGF0aXZlOiByZWxhdGl2ZSxcbiAgZGlybmFtZTogZGlybmFtZSxcbiAgZm9ybWF0OiBmb3JtYXQsXG4gIGJhc2VuYW1lOiBiYXNlbmFtZSxcbiAgcGFyc2U6IHBhcnNlXG59KTtcblxuY29uc3QgaW5kZXggPSB7XG4gIC4uLl9wYXRoXG59O1xuXG5leHBvcnQgeyBiYXNlbmFtZSwgaW5kZXggYXMgZGVmYXVsdCwgZGVsaW1pdGVyLCBkaXJuYW1lLCBleHRuYW1lLCBmb3JtYXQsIGlzQWJzb2x1dGUsIGpvaW4sIG5vcm1hbGl6ZSwgbm9ybWFsaXplU3RyaW5nLCBwYXJzZSwgcmVsYXRpdmUsIHJlc29sdmUsIHNlcCwgdG9OYW1lc3BhY2VkUGF0aCB9O1xuIiwiaW1wb3J0IHR5cGUgeyBBcnJheWFibGUsIERlZXBNZXJnZSwgTnVsbGFibGUgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdE51bGxpc2g8VD4odjogVCB8IG51bGwgfCB1bmRlZmluZWQpOiB2IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgcmV0dXJuIHYgIT0gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2xhc2goc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXFxcL2csICcvJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU2xhc2hlcyhzdHI6IHN0cmluZykge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcL1xcLy9nLCAnLycpXG59XG5cbmV4cG9ydCBjb25zdCBub29wID0gKCkgPT4geyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZTxUPih2YWw6IFQpOiBUIHtcbiAgbGV0IGs6IGFueSwgb3V0OiBhbnksIHRtcDogYW55XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIG91dCA9IEFycmF5KGsgPSB2YWwubGVuZ3RoKVxuICAgIHdoaWxlIChrLS0pXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgICAgIG91dFtrXSA9ICh0bXAgPSB2YWxba10pICYmIHR5cGVvZiB0bXAgPT09ICdvYmplY3QnID8gY2xvbmUodG1wKSA6IHRtcFxuICAgIHJldHVybiBvdXQgYXMgYW55XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgb3V0ID0ge30gLy8gbnVsbFxuICAgIGZvciAoayBpbiB2YWwpIHtcbiAgICAgIGlmIChrID09PSAnX19wcm90b19fJykge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3V0LCBrLCB7XG4gICAgICAgICAgdmFsdWU6IGNsb25lKCh2YWwgYXMgYW55KVtrXSksXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gICAgICAgIG91dFtrXSA9ICh0bXAgPSAodmFsIGFzIGFueSlba10pICYmIHR5cGVvZiB0bXAgPT09ICdvYmplY3QnID8gY2xvbmUodG1wKSA6IHRtcFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICByZXR1cm4gdmFsXG59XG4vKipcbiAqIENvbnZlcnQgYEFycmF5YWJsZTxUPmAgdG8gYEFycmF5PFQ+YFxuICpcbiAqIEBjYXRlZ29yeSBBcnJheVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5PFQ+KGFycmF5PzogTnVsbGFibGU8QXJyYXlhYmxlPFQ+Pik6IEFycmF5PFQ+IHtcbiAgYXJyYXkgPSBhcnJheSB8fCBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpXG4gICAgcmV0dXJuIGFycmF5XG4gIHJldHVybiBbYXJyYXldXG59XG5cbmV4cG9ydCBjb25zdCB0b1N0cmluZyA9ICh2OiBhbnkpID0+IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KVxuZXhwb3J0IGNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsOiBhbnkpOiB2YWwgaXMgb2JqZWN0ID0+IHRvU3RyaW5nKHZhbCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChpdGVtOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBpdGVtICE9IG51bGwgJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGl0ZW0pXG59XG5cbi8qKlxuICogRGVlcCBtZXJnZSA6UFxuICpcbiAqIFdpbGwgbWVyZ2Ugb2JqZWN0cyBvbmx5IGlmIHRoZXkgYXJlIHBsYWluXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2U8VCBleHRlbmRzIG9iamVjdCA9IG9iamVjdCwgUyBleHRlbmRzIG9iamVjdCA9IFQ+KHRhcmdldDogVCwgLi4uc291cmNlczogU1tdKTogRGVlcE1lcmdlPFQsIFM+IHtcbiAgaWYgKCFzb3VyY2VzLmxlbmd0aClcbiAgICByZXR1cm4gdGFyZ2V0IGFzIGFueVxuXG4gIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKVxuICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIHRhcmdldCBhcyBhbnlcblxuICBpZiAoaXNNZXJnYWJsZU9iamVjdCh0YXJnZXQpICYmIGlzTWVyZ2FibGVPYmplY3Qoc291cmNlKSkge1xuICAgIChPYmplY3Qua2V5cyhzb3VyY2UpIGFzIChrZXlvZiBTICYga2V5b2YgVClbXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaXNNZXJnYWJsZU9iamVjdChzb3VyY2Vba2V5XSkpIHtcbiAgICAgICAgaWYgKCF0YXJnZXRba2V5XSlcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHt9IGFzIGFueVxuXG4gICAgICAgIGRlZXBNZXJnZSh0YXJnZXRba2V5XSBhcyBhbnksIHNvdXJjZVtrZXldIGFzIGFueSlcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlW2tleV0pKSB7XG4gICAgICAgIGlmICghdGFyZ2V0W2tleV0pXG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBbXSBhcyBhbnlcblxuICAgICAgICAodGFyZ2V0W2tleV0gYXMgYW55KS5wdXNoKC4uLnNvdXJjZVtrZXldIGFzIGFueSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldIGFzIGFueVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gZGVlcE1lcmdlKHRhcmdldCwgLi4uc291cmNlcylcbn1cblxuZnVuY3Rpb24gaXNNZXJnYWJsZU9iamVjdChpdGVtOiBhbnkpOiBpdGVtIGlzIE9iamVjdCB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KGl0ZW0pICYmICFBcnJheS5pc0FycmF5KGl0ZW0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEFycmF5YWJsZSwgU3VpdGUsIFRhc2ssIFRlc3QgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL2Jhc2UnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXN0cyhzdWl0ZTogQXJyYXlhYmxlPFRhc2s+KTogVGVzdFtdIHtcbiAgcmV0dXJuIHRvQXJyYXkoc3VpdGUpLmZsYXRNYXAocyA9PiBzLnR5cGUgPT09ICd0ZXN0JyA/IFtzXSA6IHMudGFza3MuZmxhdE1hcChjID0+IGMudHlwZSA9PT0gJ3Rlc3QnID8gW2NdIDogZ2V0VGVzdHMoYykpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFza3ModGFza3M6IEFycmF5YWJsZTxUYXNrPiA9IFtdKTogVGFza1tdIHtcbiAgcmV0dXJuIHRvQXJyYXkodGFza3MpLmZsYXRNYXAocyA9PiBzLnR5cGUgPT09ICd0ZXN0JyA/IFtzXSA6IFtzLCAuLi5nZXRUYXNrcyhzLnRhc2tzKV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWl0ZXMoc3VpdGU6IEFycmF5YWJsZTxUYXNrPik6IFN1aXRlW10ge1xuICByZXR1cm4gdG9BcnJheShzdWl0ZSkuZmxhdE1hcChzID0+IHMudHlwZSA9PT0gJ3N1aXRlJyA/IFtzLCAuLi5nZXRTdWl0ZXMocy50YXNrcyldIDogW10pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNUZXN0cyhzdWl0ZTogQXJyYXlhYmxlPFN1aXRlPik6IGJvb2xlYW4ge1xuICByZXR1cm4gdG9BcnJheShzdWl0ZSkuc29tZShzID0+IHMudGFza3Muc29tZShjID0+IGMudHlwZSA9PT0gJ3Rlc3QnIHx8IGhhc1Rlc3RzKGMgYXMgU3VpdGUpKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ZhaWxlZChzdWl0ZTogQXJyYXlhYmxlPFRhc2s+KTogYm9vbGVhbiB7XG4gIHJldHVybiB0b0FycmF5KHN1aXRlKS5zb21lKHMgPT4gcy5yZXN1bHQ/LnN0YXRlID09PSAnZmFpbCcgfHwgKHMudHlwZSA9PT0gJ3N1aXRlJyAmJiBoYXNGYWlsZWQocy50YXNrcykpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRmFpbGVkU25hcHNob3Qoc3VpdGU6IEFycmF5YWJsZTxUYXNrPik6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0VGVzdHMoc3VpdGUpLnNvbWUoKHMpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gcy5yZXN1bHQ/LmVycm9yPy5tZXNzYWdlXG4gICAgcmV0dXJuIG1lc3NhZ2U/Lm1hdGNoKC9TbmFwc2hvdCAuKiBtaXNtYXRjaGVkLylcbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVzKHRhc2s6IFRhc2spIHtcbiAgY29uc3QgbmFtZXMgPSBbdGFzay5uYW1lXVxuICBsZXQgY3VycmVudDogVGFzayB8IHVuZGVmaW5lZCA9IHRhc2tcblxuICB3aGlsZSAoY3VycmVudD8uc3VpdGUgfHwgY3VycmVudD8uZmlsZSkge1xuICAgIGN1cnJlbnQgPSBjdXJyZW50LnN1aXRlIHx8IGN1cnJlbnQuZmlsZVxuICAgIGlmIChjdXJyZW50Py5uYW1lKVxuICAgICAgbmFtZXMudW5zaGlmdChjdXJyZW50Lm5hbWUpXG4gIH1cblxuICByZXR1cm4gbmFtZXNcbn1cbiIsImltcG9ydCBjIGZyb20gJ3BpY29jb2xvcnMnXG5pbXBvcnQgeyBpc1BhY2thZ2VFeGlzdHMgfSBmcm9tICdsb2NhbC1wa2cnXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aGUnXG5pbXBvcnQgdHlwZSB7IFN1aXRlLCBUYXNrIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXROYW1lcyB9IGZyb20gJy4vdGFza3MnXG5cbmV4cG9ydCAqIGZyb20gJy4vdGFza3MnXG5leHBvcnQgKiBmcm9tICcuL3BhdGgnXG5leHBvcnQgKiBmcm9tICcuL2Jhc2UnXG5cbmV4cG9ydCBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInXG5cbi8qKlxuICogUGFydGl0aW9uIGluIHRhc2tzIGdyb3VwcyBieSBjb25zZWN1dGl2ZSBjb25jdXJyZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aXRpb25TdWl0ZUNoaWxkcmVuKHN1aXRlOiBTdWl0ZSkge1xuICBsZXQgdGFza3NHcm91cDogVGFza1tdID0gW11cbiAgY29uc3QgdGFza3NHcm91cHM6IFRhc2tbXVtdID0gW11cbiAgZm9yIChjb25zdCBjIG9mIHN1aXRlLnRhc2tzKSB7XG4gICAgaWYgKHRhc2tzR3JvdXAubGVuZ3RoID09PSAwIHx8IGMuY29uY3VycmVudCA9PT0gdGFza3NHcm91cFswXS5jb25jdXJyZW50KSB7XG4gICAgICB0YXNrc0dyb3VwLnB1c2goYylcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0YXNrc0dyb3Vwcy5wdXNoKHRhc2tzR3JvdXApXG4gICAgICB0YXNrc0dyb3VwID0gW2NdXG4gICAgfVxuICB9XG4gIGlmICh0YXNrc0dyb3VwLmxlbmd0aCA+IDApXG4gICAgdGFza3NHcm91cHMucHVzaCh0YXNrc0dyb3VwKVxuXG4gIHJldHVybiB0YXNrc0dyb3Vwc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVsbE5hbWUodGFzazogVGFzaykge1xuICByZXR1cm4gZ2V0TmFtZXModGFzaykuam9pbihjLmRpbSgnID4gJykpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVQYWNrYWdlSW5zdGFsbGVkKFxuICBkZXBlbmRlbmN5OiBzdHJpbmcsXG4gIHByb21wdEluc3RhbGwgPSAhcHJvY2Vzcy5lbnYuQ0kgJiYgcHJvY2Vzcy5zdGRvdXQuaXNUVFksXG4pIHtcbiAgaWYgKGlzUGFja2FnZUV4aXN0cyhkZXBlbmRlbmN5KSlcbiAgICByZXR1cm4gdHJ1ZVxuXG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKGMucmVkKGAke2MuaW52ZXJzZShjLnJlZCgnIE1JU1NJTkcgREVQICcpKX0gQ2FuIG5vdCBmaW5kIGRlcGVuZGVuY3kgJyR7ZGVwZW5kZW5jeX0nXFxuXFxuYCkpXG5cbiAgaWYgKCFwcm9tcHRJbnN0YWxsKVxuICAgIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHByb21wdHMgPSBhd2FpdCBpbXBvcnQoJ3Byb21wdHMnKVxuICBjb25zdCB7IGluc3RhbGwgfSA9IGF3YWl0IHByb21wdHMucHJvbXB0KHtcbiAgICB0eXBlOiAnY29uZmlybScsXG4gICAgbmFtZTogJ2luc3RhbGwnLFxuICAgIG1lc3NhZ2U6IGMucmVzZXQoYERvIHlvdSB3YW50IHRvIGluc3RhbGwgJHtjLmdyZWVuKGRlcGVuZGVuY3kpfT9gKSxcbiAgfSlcblxuICBpZiAoaW5zdGFsbCkge1xuICAgIGF3YWl0IChhd2FpdCBpbXBvcnQoJ0BhbnRmdS9pbnN0YWxsLXBrZycpKS5pbnN0YWxsUGFja2FnZShkZXBlbmRlbmN5LCB7IGRldjogdHJ1ZSB9KVxuICAgIC8vIFRPRE86IHNvbWVob3cgaXQgZmFpbHMgdG8gbG9hZCB0aGUgcGFja2FnZSBhZnRlciBpbnN0YWxsYXRpb24sIHJlbW92ZSB0aGlzIHdoZW4gaXQncyBmaXhlZFxuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGMueWVsbG93KGBcXG5QYWNrYWdlICR7ZGVwZW5kZW5jeX0gaW5zdGFsbGVkLCByZS1ydW4gdGhlIGNvbW1hbmQgdG8gc3RhcnQuXFxuYCkpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIElmIGNvZGUgc3RhcnRzIHdpdGggYSBmdW5jdGlvbiBjYWxsLCB3aWxsIHJldHVybiBpdHMgbGFzdCBpbmRleCwgcmVzcGVjdGluZyBhcmd1bWVudHMuXG4gKiBUaGlzIHdpbGwgcmV0dXJuIDI1IC0gbGFzdCBlbmRpbmcgY2hhcmFjdGVyIG9mIHRvTWF0Y2ggXCIpXCJcbiAqIEFsc28gd29ya3Mgd2l0aCBjYWxsYmFja3NcbiAqIGBgYFxuICogdG9NYXRjaCh7IHRlc3Q6ICcxMjMnIH0pO1xuICogdG9CZUFsaWFzZWQoJzEyMycpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGxMYXN0SW5kZXgoY29kZTogc3RyaW5nKSB7XG4gIGxldCBjaGFySW5kZXggPSAtMVxuICBsZXQgaW5TdHJpbmc6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGxldCBzdGFydGVkQnJhY2VycyA9IDBcbiAgbGV0IGVuZGVkQnJhY2VycyA9IDBcbiAgbGV0IGJlZm9yZUNoYXI6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChjaGFySW5kZXggPD0gY29kZS5sZW5ndGgpIHtcbiAgICBiZWZvcmVDaGFyID0gY29kZVtjaGFySW5kZXhdXG4gICAgY2hhckluZGV4KytcbiAgICBjb25zdCBjaGFyID0gY29kZVtjaGFySW5kZXhdXG5cbiAgICBjb25zdCBpc0NoYXJTdHJpbmcgPSBjaGFyID09PSAnXCInIHx8IGNoYXIgPT09ICdcXCcnIHx8IGNoYXIgPT09ICdgJ1xuXG4gICAgaWYgKGlzQ2hhclN0cmluZyAmJiBiZWZvcmVDaGFyICE9PSAnXFxcXCcpIHtcbiAgICAgIGlmIChpblN0cmluZyA9PT0gY2hhcilcbiAgICAgICAgaW5TdHJpbmcgPSBudWxsXG4gICAgICBlbHNlIGlmICghaW5TdHJpbmcpXG4gICAgICAgIGluU3RyaW5nID0gY2hhclxuICAgIH1cblxuICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgIGlmIChjaGFyID09PSAnKCcpXG4gICAgICAgIHN0YXJ0ZWRCcmFjZXJzKytcbiAgICAgIGlmIChjaGFyID09PSAnKScpXG4gICAgICAgIGVuZGVkQnJhY2VycysrXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0ZWRCcmFjZXJzICYmIGVuZGVkQnJhY2VycyAmJiBzdGFydGVkQnJhY2VycyA9PT0gZW5kZWRCcmFjZXJzKVxuICAgICAgcmV0dXJuIGNoYXJJbmRleFxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCB7IHJlc29sdmUgYXMgcmVzb2x2ZVBhdGggfVxuIl0sIm5hbWVzIjpbInBpY29jb2xvcnNNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUksR0FBRyxHQUFHLFdBQWM7QUFDeEI7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQixDQUFDLEVBQUUsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEUsRUFBRSxhQUFhLElBQUksT0FBTyxDQUFDLEdBQUc7QUFDOUIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7QUFDbEMsRUFBRSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU87QUFDOUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztBQUNoRCxFQUFFLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFDO0FBQ3RCO0FBQ0EsSUFBSSxTQUFTO0FBQ2IsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHLElBQUk7QUFDN0IsQ0FBQyxLQUFLLElBQUk7QUFDVixFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFLO0FBQ3pCLEVBQUUsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQztBQUNoRCxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2YsS0FBSyxJQUFJLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUs7QUFDL0QsS0FBSyxJQUFJLEdBQUcsTUFBTSxHQUFHLEtBQUs7QUFDMUIsR0FBRTtBQUNGO0FBQ0EsSUFBSSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEtBQUs7QUFDdEQsQ0FBQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxRQUFPO0FBQ2pELENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBQztBQUNqRCxDQUFDLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDO0FBQ25DLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHO0FBQ3ZGLEVBQUM7QUFDRDtBQUNBLElBQUksWUFBWSxHQUFHLENBQUMsT0FBTyxHQUFHLGdCQUFnQixNQUFNO0FBQ3BELENBQUMsZ0JBQWdCLEVBQUUsT0FBTztBQUMxQixDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNO0FBQ3BELENBQUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLE1BQU07QUFDN0UsQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLEdBQUcsTUFBTTtBQUM1RSxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsU0FBUyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDL0QsQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM3RCxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsYUFBYSxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDbkUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM1RCxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzFELENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDNUQsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM3RCxDQUFDLElBQUksRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzNELENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDOUQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUMzRCxDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsSUFBSSxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDM0QsQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM5RCxDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzVELENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDOUQsQ0FBQyxRQUFRLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUMvRCxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzdELENBQUMsU0FBUyxFQUFFLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDaEUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTTtBQUM3RCxDQUFDLE9BQU8sRUFBRSxPQUFPLEdBQUcsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNO0FBQzlELENBQUMsRUFBQztBQUNGO0FBQ0FBLGtC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