testcafe 2.3.0 → 2.3.1-alpha.1
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/lib/api/skip-js-errors/index.js +12 -36
- package/lib/api/test-controller/index.js +4 -4
- package/lib/browser/connection/index.js +5 -1
- package/lib/client/automation/index.js +11 -9
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/core/index.js +5 -1
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/values/axis-values.js +43 -0
- package/lib/client/driver/index.js +240 -204
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/ui/index.js +3 -0
- package/lib/client/ui/index.min.js +1 -1
- package/lib/custom-client-scripts/get-code.js +4 -3
- package/lib/custom-client-scripts/routing.js +3 -3
- package/lib/proxyless/client/event-simulator.js +9 -4
- package/lib/proxyless/cookie-provider.js +3 -3
- package/lib/proxyless/index.js +9 -18
- package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
- package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +95 -0
- package/lib/proxyless/request-hooks/event-provider.js +6 -54
- package/lib/proxyless/request-pipeline/context-info.js +55 -0
- package/lib/proxyless/request-pipeline/index.js +68 -29
- package/lib/proxyless/request-pipeline/resendAuthRequest.js +20 -0
- package/lib/proxyless/request-pipeline/test-run-bridge.js +45 -0
- package/lib/proxyless/resource-injector.js +40 -32
- package/lib/proxyless/session-storage/index.js +14 -5
- package/lib/proxyless/storages-provider.js +17 -0
- package/lib/proxyless/types.js +1 -1
- package/lib/proxyless/utils/cdp.js +12 -2
- package/lib/proxyless/utils/get-active-client.js +8 -0
- package/lib/runner/task/index.js +2 -2
- package/lib/test-run/index.js +18 -30
- package/lib/test-run/request/send.js +20 -13
- package/lib/test-run/storages/base.js +16 -0
- package/lib/test-run/storages/factory.js +12 -0
- package/package.json +2 -2
- package/lib/proxyless/console-messages/formatter.js +0 -23
- package/lib/proxyless/console-messages/index.js +0 -56
- package/lib/proxyless/console-messages/types.js +0 -5
- package/lib/proxyless/js-error-handling/index.js +0 -70
- package/lib/proxyless/native-dialogs/index.js +0 -40
- package/lib/proxyless/request-hooks/event-factory.js +0 -95
|
@@ -6,31 +6,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.prepareSkipJsErrorsOptions = exports.ensureSkipJsErrorsCallbackWrapped = exports.isSkipJsErrorsOptionsObject = exports.isSkipJsErrorsCallbackWithOptionsObject = void 0;
|
|
7
7
|
const make_reg_exp_1 = require("../../utils/make-reg-exp");
|
|
8
8
|
const client_function_builder_1 = __importDefault(require("../../client-functions/client-function-builder"));
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
stack: ${deps.stack},
|
|
12
|
-
pageUrl: ${deps.pageUrl},
|
|
13
|
-
message: ${deps.message},
|
|
14
|
-
}`;
|
|
15
|
-
}
|
|
16
|
-
function getSkipJSErrorsObjectFunction(deps, proxyless) {
|
|
17
|
-
const dependencies = proxyless ? depsToJsonWithRegExp(deps) : 'deps';
|
|
18
|
-
return `
|
|
19
|
-
let { stack, pageUrl, message } = ${dependencies};
|
|
9
|
+
const SKIP_JS_ERRORS_OBJECT_FUNCTION = `
|
|
10
|
+
let { stack, pageUrl, message } = deps;
|
|
20
11
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
function getSkipJSErrorsDependenciesFunction({ fn, dependencies }) {
|
|
25
|
-
let varDeclaration = '';
|
|
26
|
-
if (dependencies)
|
|
27
|
-
varDeclaration = `const { ${Object.keys(dependencies).join(', ')} } = ${JSON.stringify(dependencies)};`;
|
|
28
|
-
return `
|
|
29
|
-
${varDeclaration}
|
|
30
|
-
|
|
31
|
-
return (${fn.toString()})(err);
|
|
32
|
-
`;
|
|
33
|
-
}
|
|
12
|
+
return stack.test(err.stack) && pageUrl.test(err.pageUrl) && message.test(err.message);
|
|
13
|
+
`;
|
|
34
14
|
function isSkipJsErrorsCallbackWithOptionsObject(obj) {
|
|
35
15
|
return !!obj && typeof obj === 'object' && 'fn' in obj;
|
|
36
16
|
}
|
|
@@ -48,28 +28,24 @@ exports.ensureSkipJsErrorsCallbackWrapped = ensureSkipJsErrorsCallbackWrapped;
|
|
|
48
28
|
function wrapSkipJsErrorsCallback(options, dependencies) {
|
|
49
29
|
return { fn: options, dependencies };
|
|
50
30
|
}
|
|
51
|
-
function prepareSkipJsErrorsOptions(options
|
|
31
|
+
function prepareSkipJsErrorsOptions(options) {
|
|
52
32
|
options = ensureSkipJsErrorsCallbackWrapped(options);
|
|
53
33
|
if (isSkipJsErrorsCallbackWithOptionsObject(options))
|
|
54
|
-
return createSkipJsErrorsCallbackFunction(options
|
|
34
|
+
return createSkipJsErrorsCallbackFunction(options);
|
|
55
35
|
if (isSkipJsErrorsOptionsObject(options))
|
|
56
|
-
return createSkipJsErrorsObjectFunction(prepareOptionsObject(options)
|
|
36
|
+
return createSkipJsErrorsObjectFunction(prepareOptionsObject(options));
|
|
57
37
|
return options;
|
|
58
38
|
}
|
|
59
39
|
exports.prepareSkipJsErrorsOptions = prepareSkipJsErrorsOptions;
|
|
60
|
-
function createSkipJsErrorsObjectFunction(deps
|
|
40
|
+
function createSkipJsErrorsObjectFunction(deps) {
|
|
61
41
|
deps.message = deps.message || new RegExp('');
|
|
62
42
|
deps.stack = deps.stack || new RegExp('');
|
|
63
43
|
deps.pageUrl = deps.pageUrl || new RegExp('');
|
|
64
|
-
const func = new Function('err',
|
|
65
|
-
if (proxyless)
|
|
66
|
-
return func;
|
|
44
|
+
const func = new Function('err', SKIP_JS_ERRORS_OBJECT_FUNCTION);
|
|
67
45
|
const callbackWrapper = wrapSkipJsErrorsCallback(func, { deps });
|
|
68
|
-
return createSkipJsErrorsCallbackFunction(callbackWrapper
|
|
46
|
+
return createSkipJsErrorsCallbackFunction(callbackWrapper);
|
|
69
47
|
}
|
|
70
|
-
function createSkipJsErrorsCallbackFunction({ fn, dependencies }
|
|
71
|
-
if (proxyless)
|
|
72
|
-
return new Function('err', getSkipJSErrorsDependenciesFunction({ fn, dependencies }));
|
|
48
|
+
function createSkipJsErrorsCallbackFunction({ fn, dependencies }) {
|
|
73
49
|
const methodName = 'skipJsErrors handler';
|
|
74
50
|
const options = { dependencies };
|
|
75
51
|
return new client_function_builder_1.default(fn, options, {
|
|
@@ -83,4 +59,4 @@ function prepareOptionsObject(opts) {
|
|
|
83
59
|
opts.pageUrl = (0, make_reg_exp_1.parseRegExpString)(opts.pageUrl);
|
|
84
60
|
return opts;
|
|
85
61
|
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3NraXAtanMtZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLDJEQUE2RDtBQUU3RCw2R0FBbUY7QUFFbkYsTUFBTSw4QkFBOEIsR0FBRzs7OztTQUk5QixDQUFDO0FBRVYsU0FBZ0IsdUNBQXVDLENBQUUsR0FBWTtJQUNqRSxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUM7QUFDM0QsQ0FBQztBQUZELDBGQUVDO0FBRUQsU0FBZ0IsMkJBQTJCLENBQUUsR0FBWTtJQUNyRCxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsdUNBQXVDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUZELGtFQUVDO0FBRUQsU0FBZ0IsaUNBQWlDLENBQUUsT0FBMkcsRUFBRSxlQUFnQyxFQUFFO0lBQzlMLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVTtRQUM3QixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUUzRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBTEQsOEVBS0M7QUFFRCxTQUFTLHdCQUF3QixDQUFFLE9BQTZCLEVBQUUsWUFBNkI7SUFDM0YsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDekMsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUFFLE9BQTJHO0lBQ25KLE9BQU8sR0FBRyxpQ0FBaUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyRCxJQUFJLHVDQUF1QyxDQUFDLE9BQU8sQ0FBQztRQUNoRCxPQUFPLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXZELElBQUksMkJBQTJCLENBQUMsT0FBTyxDQUFDO1FBQ3BDLE9BQU8sZ0NBQWdDLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUUzRSxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBVkQsZ0VBVUM7QUFFRCxTQUFTLGdDQUFnQyxDQUFFLElBQStCO0lBQ3RFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFLLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSw4QkFBOEIsQ0FBeUIsQ0FBQztJQUV6RixNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRWpFLE9BQU8sa0NBQWtDLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELFNBQVMsa0NBQWtDLENBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUF5QztJQUNwRyxNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQztJQUMxQyxNQUFNLE9BQU8sR0FBTSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBRXBDLE9BQU8sSUFBSSxpQ0FBcUIsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFO1FBQzFDLGFBQWEsRUFBRSxVQUFVO1FBQ3pCLFNBQVMsRUFBTSxVQUFVO0tBQzVCLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBRSxJQUErQjtJQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsZ0NBQWlCLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUssSUFBQSxnQ0FBaUIsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLGdDQUFpQixFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaWN0aW9uYXJ5LCBTa2lwSnNFcnJvcnNDYWxsYmFjaywgU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCwgU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCxcbn0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHBhcnNlUmVnRXhwU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWFrZS1yZWctZXhwJztcbmltcG9ydCB7IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9vYnNlcnZhdGlvbic7XG5pbXBvcnQgQ2xpZW50RnVuY3Rpb25CdWlsZGVyIGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuXG5jb25zdCBTS0lQX0pTX0VSUk9SU19PQkpFQ1RfRlVOQ1RJT04gPSBgXG4gICAgICAgICAgICAgICAgbGV0IHsgc3RhY2ssIHBhZ2VVcmwsIG1lc3NhZ2UgfSA9IGRlcHM7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sudGVzdChlcnIuc3RhY2spICYmIHBhZ2VVcmwudGVzdChlcnIucGFnZVVybCkgJiYgbWVzc2FnZS50ZXN0KGVyci5tZXNzYWdlKTtcbiAgICAgICAgYDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCAob2JqOiB1bmtub3duKTogb2JqIGlzIFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3Qge1xuICAgIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAnZm4nIGluIG9iajtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCAob2JqOiB1bmtub3duKTogb2JqIGlzIFNraXBKc0Vycm9yc09wdGlvbnNPYmplY3Qge1xuICAgIHJldHVybiAhIW9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhaXNTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0KG9iaik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVTa2lwSnNFcnJvcnNDYWxsYmFja1dyYXBwZWQgKG9wdGlvbnM6IGJvb2xlYW4gfCBTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0IHwgU2tpcEpzRXJyb3JzQ2FsbGJhY2sgfCBTa2lwSnNFcnJvcnNDYWxsYmFja1dpdGhPcHRpb25zT2JqZWN0LCBkZXBlbmRlbmNpZXM6IERpY3Rpb25hcnk8YW55PiA9IHt9KTogU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB8IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3QgfCBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB3cmFwU2tpcEpzRXJyb3JzQ2FsbGJhY2sob3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcblxuICAgIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiB3cmFwU2tpcEpzRXJyb3JzQ2FsbGJhY2sgKG9wdGlvbnM6IFNraXBKc0Vycm9yc0NhbGxiYWNrLCBkZXBlbmRlbmNpZXM6IERpY3Rpb25hcnk8YW55Pik6IFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNPYmplY3Qge1xuICAgIHJldHVybiB7IGZuOiBvcHRpb25zLCBkZXBlbmRlbmNpZXMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTa2lwSnNFcnJvcnNPcHRpb25zIChvcHRpb25zOiBib29sZWFuIHwgU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB8IFNraXBKc0Vycm9yc0NhbGxiYWNrIHwgU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCk6IGJvb2xlYW4gfCBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kIHtcbiAgICBvcHRpb25zID0gZW5zdXJlU2tpcEpzRXJyb3JzQ2FsbGJhY2tXcmFwcGVkKG9wdGlvbnMpO1xuXG4gICAgaWYgKGlzU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdChvcHRpb25zKSlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNraXBKc0Vycm9yc0NhbGxiYWNrRnVuY3Rpb24ob3B0aW9ucyk7XG5cbiAgICBpZiAoaXNTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0KG9wdGlvbnMpKVxuICAgICAgICByZXR1cm4gY3JlYXRlU2tpcEpzRXJyb3JzT2JqZWN0RnVuY3Rpb24ocHJlcGFyZU9wdGlvbnNPYmplY3Qob3B0aW9ucykpO1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNraXBKc0Vycm9yc09iamVjdEZ1bmN0aW9uIChkZXBzOiBTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0KTogRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCB7XG4gICAgZGVwcy5tZXNzYWdlID0gZGVwcy5tZXNzYWdlIHx8IG5ldyBSZWdFeHAoJycpO1xuICAgIGRlcHMuc3RhY2sgICA9IGRlcHMuc3RhY2sgfHwgbmV3IFJlZ0V4cCgnJyk7XG4gICAgZGVwcy5wYWdlVXJsID0gZGVwcy5wYWdlVXJsIHx8IG5ldyBSZWdFeHAoJycpO1xuXG4gICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbignZXJyJywgU0tJUF9KU19FUlJPUlNfT0JKRUNUX0ZVTkNUSU9OKSBhcyBTa2lwSnNFcnJvcnNDYWxsYmFjaztcblxuICAgIGNvbnN0IGNhbGxiYWNrV3JhcHBlciA9IHdyYXBTa2lwSnNFcnJvcnNDYWxsYmFjayhmdW5jLCB7IGRlcHMgfSk7XG5cbiAgICByZXR1cm4gY3JlYXRlU2tpcEpzRXJyb3JzQ2FsbGJhY2tGdW5jdGlvbihjYWxsYmFja1dyYXBwZXIpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTa2lwSnNFcnJvcnNDYWxsYmFja0Z1bmN0aW9uICh7IGZuLCBkZXBlbmRlbmNpZXMgfTogU2tpcEpzRXJyb3JzQ2FsbGJhY2tXaXRoT3B0aW9uc09iamVjdCk6IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnc2tpcEpzRXJyb3JzIGhhbmRsZXInO1xuICAgIGNvbnN0IG9wdGlvbnMgICAgPSB7IGRlcGVuZGVuY2llcyB9O1xuXG4gICAgcmV0dXJuIG5ldyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIoZm4sIG9wdGlvbnMsIHtcbiAgICAgICAgaW5zdGFudGlhdGlvbjogbWV0aG9kTmFtZSxcbiAgICAgICAgZXhlY3V0aW9uOiAgICAgbWV0aG9kTmFtZSxcbiAgICB9KS5nZXRDb21tYW5kKCk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVPcHRpb25zT2JqZWN0IChvcHRzOiBTa2lwSnNFcnJvcnNPcHRpb25zT2JqZWN0KTogU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdCB7XG4gICAgb3B0cy5tZXNzYWdlID0gcGFyc2VSZWdFeHBTdHJpbmcob3B0cy5tZXNzYWdlKTtcbiAgICBvcHRzLnN0YWNrICAgPSBwYXJzZVJlZ0V4cFN0cmluZyhvcHRzLnN0YWNrKTtcbiAgICBvcHRzLnBhZ2VVcmwgPSBwYXJzZVJlZ0V4cFN0cmluZyhvcHRzLnBhZ2VVcmwpO1xuXG4gICAgcmV0dXJuIG9wdHM7XG59XG4iXX0=
|
|
@@ -22,7 +22,7 @@ const test_run_1 = require("../../errors/test-run");
|
|
|
22
22
|
const assertion_2 = require("../../test-run/commands/assertion");
|
|
23
23
|
const callsite_1 = require("../../utils/callsite");
|
|
24
24
|
const re_executable_promise_1 = __importDefault(require("../../utils/re-executable-promise"));
|
|
25
|
-
const send_1 =
|
|
25
|
+
const send_1 = require("../../test-run/request/send");
|
|
26
26
|
const runtime_1 = require("../../errors/runtime");
|
|
27
27
|
const types_2 = require("../../errors/types");
|
|
28
28
|
const custom_actions_1 = __importDefault(require("./custom-actions"));
|
|
@@ -178,12 +178,12 @@ class TestController {
|
|
|
178
178
|
const command = controller._createCommand(actions_1.RequestCommand, cmdArgs, callsite);
|
|
179
179
|
const options = Object.assign(Object.assign({}, command.options), { url: command.url || command.options.url || '' });
|
|
180
180
|
const promise = re_executable_promise_1.default.fromFn(async () => {
|
|
181
|
-
return (0, send_1.
|
|
181
|
+
return (0, send_1.sendRequestThroughAPI)(controller.testRun, options, callsite);
|
|
182
182
|
});
|
|
183
183
|
actions_1.RequestCommand.resultGetters.forEach(getter => {
|
|
184
184
|
Object.defineProperty(promise, getter, {
|
|
185
185
|
get: () => re_executable_promise_1.default.fromFn(async () => {
|
|
186
|
-
const response = await (0, send_1.
|
|
186
|
+
const response = await (0, send_1.sendRequestThroughAPI)(controller.testRun, options, callsite);
|
|
187
187
|
return response[getter];
|
|
188
188
|
}),
|
|
189
189
|
});
|
|
@@ -458,4 +458,4 @@ exports.default = TestController;
|
|
|
458
458
|
TestController.API_LIST = (0, delegated_api_1.getDelegatedAPIList)(TestController.prototype);
|
|
459
459
|
(0, delegated_api_1.delegateAPI)(TestController.prototype, TestController.API_LIST, { useCurrentCtxAsHandler: true });
|
|
460
460
|
module.exports = exports.default;
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBT2dCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQXlDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwyREFBOEU7QUFDOUUsd0RBQTBEO0FBQzFELDRGQUFrRTtBQUVsRSxvREFHK0I7QUFFL0IsaUVBQXFFO0FBQ3JFLG1EQUFrRjtBQUNsRiw4RkFBb0U7QUFDcEUsdUVBQXNEO0FBQ3RELGtEQUEyRDtBQUMzRCw4Q0FBb0Q7QUFDcEQsc0VBQTZDO0FBQzdDLG9FQUEyQztBQUUzQyxNQUFNLFlBQVksR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztBQUU1QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFFcEIsTUFBcUIsY0FBYztJQUMvQixZQUFhLE9BQU87O1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBVSxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSwwQ0FBRSxhQUFhLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQs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cUI7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxZQUFZLHdCQUFZLENBQUM7SUFDaEQsQ0FBQztDQUVKO0FBMWpCRCxpQ0EwakJDO0FBRUQsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFBLG1DQUFtQixFQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV4RSxJQUFBLDJCQUFXLEVBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IEZpeCBodHRwczovL2dpdGh1Yi5jb20vRGV2RXhwcmVzcy90ZXN0Y2FmZS9pc3N1ZXMvNDEzOSB0byBnZXQgcmlkIG9mIFBpbmtpZVxuaW1wb3J0IFByb21pc2UgZnJvbSAncGlua2llJztcbmltcG9ydCB7XG4gICAgaWRlbnRpdHksXG4gICAgYXNzaWduLFxuICAgIGlzTmlsIGFzIGlzTnVsbE9yVW5kZWZpbmVkLFxuICAgIGZsYXR0ZW5EZWVwLFxuICAgIG5vb3AsXG4gICAgY2FzdEFycmF5LFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUZvck1ldGhvZCB9IGZyb20gJy4uLy4uL2Vycm9ycy9nZXQtY2FsbHNpdGUnO1xuaW1wb3J0IENsaWVudEZ1bmN0aW9uQnVpbGRlciBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL2NsaWVudC1mdW5jdGlvbi1idWlsZGVyJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IHsgZ2V0RGVsZWdhdGVkQVBJTGlzdCwgZGVsZWdhdGVBUEkgfSBmcm9tICcuLi8uLi91dGlscy9kZWxlZ2F0ZWQtYXBpJztcbmltcG9ydCBhZGRXYXJuaW5nIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvYWRkLXJlbmRlcmVkLXdhcm5pbmcnO1xuaW1wb3J0IHsgZ2V0RGVwcmVjYXRpb25NZXNzYWdlLCBERVBSRUNBVEVEIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy9kZXByZWNhdGVkJztcblxuaW1wb3J0IHtcbiAgICBDbGlja0NvbW1hbmQsXG4gICAgUmlnaHRDbGlja0NvbW1hbmQsXG4gICAgRG91YmxlQ2xpY2tDb21tYW5kLFxuICAgIEhvdmVyQ29tbWFuZCxcbiAgICBEcmFnQ29tbWFuZCxcbiAgICBEcmFnVG9FbGVtZW50Q29tbWFuZCxcbiAgICBUeXBlVGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCxcbiAgICBTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLFxuICAgIFByZXNzS2V5Q29tbWFuZCxcbiAgICBOYXZpZ2F0ZVRvQ29tbWFuZCxcbiAgICBTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZCxcbiAgICBDbGVhclVwbG9hZENvbW1hbmQsXG4gICAgU3dpdGNoVG9JZnJhbWVDb21tYW5kLFxuICAgIFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQsXG4gICAgT3BlbldpbmRvd0NvbW1hbmQsXG4gICAgQ2xvc2VXaW5kb3dDb21tYW5kLFxuICAgIEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvV2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCxcbiAgICBTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQsXG4gICAgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsXG4gICAgR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQsXG4gICAgR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQsXG4gICAgU2V0VGVzdFNwZWVkQ29tbWFuZCxcbiAgICBTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLFxuICAgIFNjcm9sbENvbW1hbmQsXG4gICAgU2Nyb2xsQnlDb21tYW5kLFxuICAgIFNjcm9sbEludG9WaWV3Q29tbWFuZCxcbiAgICBVc2VSb2xlQ29tbWFuZCxcbiAgICBEaXNwYXRjaEV2ZW50Q29tbWFuZCxcbiAgICBHZXRDb29raWVzQ29tbWFuZCxcbiAgICBTZXRDb29raWVzQ29tbWFuZCxcbiAgICBEZWxldGVDb29raWVzQ29tbWFuZCxcbiAgICBSZXF1ZXN0Q29tbWFuZCxcbiAgICBTa2lwSnNFcnJvcnNDb21tYW5kLFxuICAgIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQsXG4gICAgUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZCxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYWN0aW9ucyc7XG5cbmltcG9ydCB7XG4gICAgVGFrZVNjcmVlbnNob3RDb21tYW5kLFxuICAgIFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQsXG4gICAgUmVzaXplV2luZG93Q29tbWFuZCxcbiAgICBSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQsXG4gICAgTWF4aW1pemVXaW5kb3dDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9icm93c2VyLW1hbmlwdWxhdGlvbic7XG5cbmltcG9ydCB7IFdhaXRDb21tYW5kLCBEZWJ1Z0NvbW1hbmQgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9vYnNlcnZhdGlvbic7XG5pbXBvcnQgeyBjcmVhdGVFeGVjdXRpb25Db250ZXh0IGFzIGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuL2V4ZWN1dGlvbi1jb250ZXh0JztcbmltcG9ydCB7IGlzU2VsZWN0b3IgfSBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL3R5cGVzJztcbmltcG9ydCBUZXN0UnVuUHJveHkgZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcGlsZXIvdGVzdC1ydW4tcHJveHknO1xuXG5pbXBvcnQge1xuICAgIE11bHRpcGxlV2luZG93c01vZGVJc0Rpc2FibGVkRXJyb3IsXG4gICAgTXVsdGlwbGVXaW5kb3dzTW9kZUlzTm90QXZhaWxhYmxlSW5SZW1vdGVCcm93c2VyRXJyb3IsXG59IGZyb20gJy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5cbmltcG9ydCB7IEFzc2VydGlvbkNvbW1hbmQgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hc3NlcnRpb24nO1xuaW1wb3J0IHsgZ2V0Q2FsbHNpdGVJZCwgZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2FsbHNpdGUnO1xuaW1wb3J0IFJlRXhlY3V0YWJsZVByb21pc2UgZnJvbSAnLi4vLi4vdXRpbHMvcmUtZXhlY3V0YWJsZS1wcm9taXNlJztcbmltcG9ydCBzZW5kUmVxdWVzdCBmcm9tICcuLi8uLi90ZXN0LXJ1bi9yZXF1ZXN0L3NlbmQnO1xuaW1wb3J0IHsgUmVxdWVzdFJ1bnRpbWVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCBDdXN0b21BY3Rpb25zIGZyb20gJy4vY3VzdG9tLWFjdGlvbnMnO1xuaW1wb3J0IGRlbGVnYXRlZEFQSSBmcm9tICcuL2RlbGVnYXRlZC1hcGknO1xuXG5jb25zdCBvcmlnaW5hbFRoZW4gPSBQcm9taXNlLnJlc29sdmUoKS50aGVuO1xuXG5sZXQgaW5EZWJ1ZyA9IGZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0Q29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IgKHRlc3RSdW4pIHtcbiAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuICAgICAgICA9IHRlc3RSdW47XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy53YXJuaW5nTG9nICAgICA9IHRlc3RSdW4ud2FybmluZ0xvZztcbiAgICAgICAgdGhpcy5fY3VzdG9tQWN0aW9ucyA9IG5ldyBDdXN0b21BY3Rpb25zKHRoaXMsIHRlc3RSdW4/Lm9wdHM/LmN1c3RvbUFjdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbigpO1xuICAgIH1cblxuICAgIF9hZGRUZXN0Q29udHJvbGxlclRvRXhlY3V0aW9uQ2hhaW4gKCkge1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluLl90ZXN0Q29udHJvbGxlciA9IHRoaXM7XG4gICAgfVxuXG4gICAgLy8gTk9URTogVGVzdENhZmUgZXhlY3V0ZXMgYWN0aW9ucyBhbmQgYXNzZXJ0aW9ucyBhc3luY2hyb25vdXNseSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgIC8vIGEpIFRoZSBgYXdhaXRgIGtleXdvcmQgdGhhdCBwcm9jZWVkcyB0aGUgbWV0aG9kIGRlY2xhcmF0aW9uIHRyaWdnZXJzIHRoZSBgdGhlbmAgZnVuY3Rpb24gb2YgYSBQcm9taXNlLlxuICAgIC8vIGIpIFRoZSBhY3Rpb24gaXMgY2hhaW5lZCB0byBhbm90aGVyIGBhd2FpdGVkYCBtZXRob2QuXG4gICAgLy9cbiAgICAvLyBJbiBvcmRlciB0byB0cmFjayBtaXNzaW5nIGBhd2FpdGAgc3RhdGVtZW50cywgVGVzdENhZmUgZXhwb3NlcyBhIHNwZWNpYWwgUHJvbWlzZSB0byB0aGUgdXNlci5cbiAgICAvLyBXaGVuIFRlc3RDYWZlIGRldGVjdHMgYSBtaXNzaW5nIGBhd2FpdGAgc3RhdGVtZW50LCBpdCBjb21wYXJlcyB0aGUgbWV0aG9kJ3MgY2FsbHNpdGUgdG8gdGhlIGNhbGwgc2l0ZSBvZiB0aGUgZXhwb3NlZCBQcm9taXNlLlxuICAgIC8vIFRoaXMgd29ya2Fyb3VuZCBpcyBuZWNlc3NhcnkgZm9yIHNpdHVhdGlvbnMgbGlrZSB0aGVzZTpcbiAgICAvL1xuICAgIC8vIHZhciB0MiA9IHQuY2xpY2soJyNidG4xJyk7IC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDI7ICAgICAgICAgICAgICAgICAgLy8gPC0tIGNhbGxzaXRlV2l0aG91dEF3YWl0ID0gbnVsbFxuICAgIC8vIHQuY2xpY2soJyNidG4yJyk7ICAgICAgICAgIC8vIDwtLSBzdG9yZXMgbmV3IGNhbGxzaXRlV2l0aG91dEF3YWl0XG4gICAgLy8gYXdhaXQgdDIuY2xpY2soJyNidG4zJyk7ICAgLy8gPC0tIHdpdGhvdXQgY2hlY2sgaXQgd2lsbCBzZXQgY2FsbHNpdGVXaXRob3V0QXdhaXQgPSBudWxsLCBzbyB3ZSB3aWxsIGxvc3QgdHJhY2tpbmdcbiAgICBfY3JlYXRlRXh0ZW5kZWRQcm9taXNlIChwcm9taXNlLCBjYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBleHRlbmRlZFByb21pc2UgICAgID0gcHJvbWlzZS50aGVuKGlkZW50aXR5KTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZWRDYWxsc2l0ZXMgICA9IHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcztcbiAgICAgICAgY29uc3QgbWFya0NhbGxzaXRlQXdhaXRlZCA9ICgpID0+IG9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5kZWxldGUoY2FsbHNpdGUpO1xuXG4gICAgICAgIGV4dGVuZGVkUHJvbWlzZS50aGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbWFya0NhbGxzaXRlQXdhaXRlZCgpO1xuXG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVsZWdhdGVBUEkoZXh0ZW5kZWRQcm9taXNlLCBUZXN0Q29udHJvbGxlci5BUElfTElTVCwge1xuICAgICAgICAgICAgaGFuZGxlcjogICAgIHRoaXMsXG4gICAgICAgICAgICBwcm94eU1ldGhvZDogbWFya0NhbGxzaXRlQXdhaXRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZGVkUHJvbWlzZTtcbiAgICB9XG5cbiAgICBfY3JlYXRlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ21kQ3RvcihjbWRBcmdzLCB0aGlzLnRlc3RSdW4pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGVyci5jYWxsc2l0ZSA9IGNhbGxzaXRlO1xuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZW5xdWV1ZVRhc2sgKGFwaU1ldGhvZE5hbWUsIGNyZWF0ZVRhc2tFeGVjdXRvciwgY2FsbHNpdGUpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0b3IgPSBjcmVhdGVUYXNrRXhlY3V0b3IoKTtcblxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluLnRoZW4gPSBvcmlnaW5hbFRoZW47XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gICAgICA9IHRoaXMuZXhlY3V0aW9uQ2hhaW4udGhlbihleGVjdXRvcik7XG5cbiAgICAgICAgdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLmNhbGxzaXRlc1dpdGhvdXRBd2FpdC5hZGQoY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSB0aGlzLl9jcmVhdGVFeHRlbmRlZFByb21pc2UodGhpcy5leGVjdXRpb25DaGFpbiwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHRoaXMuX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbigpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGlvbkNoYWluO1xuICAgIH1cblxuICAgIGVucXVldWVDb21tYW5kIChDbWRDdG9yLCBjbWRBcmdzLCB2YWxpZGF0ZUNvbW1hbmRGbiwgY2FsbHNpdGUpIHtcbiAgICAgICAgY2FsbHNpdGUgPSBjYWxsc2l0ZSB8fCBnZXRDYWxsc2l0ZUZvck1ldGhvZChDbWRDdG9yLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgID0gdGhpcy5fY3JlYXRlQ29tbWFuZChDbWRDdG9yLCBjbWRBcmdzLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0ZUNvbW1hbmRGbiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHZhbGlkYXRlQ29tbWFuZEZuKHRoaXMsIGNvbW1hbmQsIGNhbGxzaXRlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZVRhc2soY29tbWFuZC5tZXRob2ROYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZCAoYXBpTWV0aG9kTmFtZSkge1xuICAgICAgICBjb25zdCB7IGRpc2FibGVNdWx0aXBsZVdpbmRvd3MsIGFjdGl2ZVdpbmRvd0lkIH0gPSB0aGlzLnRlc3RSdW47XG5cbiAgICAgICAgaWYgKGRpc2FibGVNdWx0aXBsZVdpbmRvd3MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgTXVsdGlwbGVXaW5kb3dzTW9kZUlzRGlzYWJsZWRFcnJvcihhcGlNZXRob2ROYW1lKTtcblxuICAgICAgICBpZiAoIWFjdGl2ZVdpbmRvd0lkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc05vdEF2YWlsYWJsZUluUmVtb3RlQnJvd3NlckVycm9yKGFwaU1ldGhvZE5hbWUpO1xuICAgIH1cblxuICAgIGdldEV4ZWN1dGlvbkNvbnRleHQgKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2V4ZWN1dGlvbkNvbnRleHQpXG4gICAgICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh0aGlzLnRlc3RSdW4pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25Db250ZXh0O1xuICAgIH1cblxuICAgIC8vIEFQSSBpbXBsZW1lbnRhdGlvblxuICAgIC8vIFdlIG5lZWQgaW1wbGVtZW50YXRpb24gbWV0aG9kcyB0byBvYnRhaW4gY29ycmVjdCBjYWxsc2l0ZXMuIElmIHdlIHVzZSBwbGFpbiBBUElcbiAgICAvLyBtZXRob2RzIGluIGNoYWluZWQgd3JhcHBlcnMgdGhlbiB3ZSB3aWxsIGhhdmUgY2FsbHNpdGUgZm9yIHRoZSB3cmFwcGVkIG1ldGhvZFxuICAgIC8vIGluIHRoaXMgZmlsZSBpbnN0ZWFkIG9mIGNoYWluZWQgbWV0aG9kIGNhbGxzaXRlIGluIHVzZXIgY29kZS5cbiAgICBfY3R4JGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uY3R4O1xuICAgIH1cblxuICAgIF9jdHgkc2V0dGVyICh2YWwpIHtcbiAgICAgICAgdGhpcy50ZXN0UnVuLmN0eCA9IHZhbDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmN0eDtcbiAgICB9XG5cbiAgICBfZml4dHVyZUN0eCRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmZpeHR1cmVDdHg7XG4gICAgfVxuXG4gICAgX2Jyb3dzZXIkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5icm93c2VyO1xuICAgIH1cblxuICAgIF9jdXN0b21BY3Rpb25zJGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21BY3Rpb25zIHx8IG5ldyBDdXN0b21BY3Rpb25zKHRoaXMsIHRoaXMudGVzdFJ1bi5vcHRzLmN1c3RvbUFjdGlvbnMpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRGlzcGF0Y2hFdmVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZXZlbnROYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRGlzcGF0Y2hFdmVudENvbW1hbmQsIHsgc2VsZWN0b3IsIGV2ZW50TmFtZSwgb3B0aW9ucywgcmVsYXRlZFRhcmdldDogb3B0aW9ucy5yZWxhdGVkVGFyZ2V0IH0pO1xuICAgIH1cblxuICAgIF9wcmVwYXJlQ29va2llQXJndW1lbnRzIChhcmdzLCBpc1NldENvbW1hbmQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB1cmxzQXJnID0gY2FzdEFycmF5KGFyZ3NbMV0pO1xuICAgICAgICBjb25zdCB1cmxzICAgID0gQXJyYXkuaXNBcnJheSh1cmxzQXJnKSAmJiB0eXBlb2YgdXJsc0FyZ1swXSA9PT0gJ3N0cmluZycgPyB1cmxzQXJnIDogW107XG5cbiAgICAgICAgY29uc3QgY29va2llc0FyZyA9IHVybHMubGVuZ3RoID8gYXJnc1swXSA6IGFyZ3M7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgICAgPSBbXTtcblxuICAgICAgICBmbGF0dGVuRGVlcChjYXN0QXJyYXkoY29va2llc0FyZykpLmZvckVhY2goY29va2llID0+IHtcbiAgICAgICAgICAgIGlmIChpc1NldENvbW1hbmQgJiYgIWNvb2tpZS5uYW1lICYmIHR5cGVvZiBjb29raWUgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNvb2tpZSkuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4gY29va2llcy5wdXNoKHsgbmFtZSwgdmFsdWUgfSkpO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWlzU2V0Q29tbWFuZCAmJiB0eXBlb2YgY29va2llID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBjb29raWVzLnB1c2goeyBuYW1lOiBjb29raWUgfSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY29va2llcy5wdXNoKGNvb2tpZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHVybHMsIGNvb2tpZXMgfTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEdldENvb2tpZXNDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChHZXRDb29raWVzQ29tbWFuZCwgdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzKSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyB1cmxzLCBjb29raWVzIH0gPSB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldENvb2tpZXNDb21tYW5kLCB7IGNvb2tpZXMsIHVybDogdXJsc1swXSB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERlbGV0ZUNvb2tpZXNDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEZWxldGVDb29raWVzQ29tbWFuZCwgdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzKSk7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVSZXF1ZXN0QXJndW1lbnRzIChiaW5kT3B0aW9ucywgLi4uYXJncykge1xuICAgICAgICBjb25zdCBbdXJsLCBvcHRpb25zXSA9IHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyA/IFthcmdzWzBdLnVybCwgYXJnc1swXV0gOiBhcmdzO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCBiaW5kT3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbiAoYmluZE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcztcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChSZXF1ZXN0Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICBpZiAoIWNvbnRyb2xsZXIudGVzdFJ1biB8fCBjb250cm9sbGVyLnRlc3RSdW4gaW5zdGFuY2VvZiBUZXN0UnVuUHJveHkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdFJ1bnRpbWVFcnJvcihjYWxsc2l0ZSwgUlVOVElNRV9FUlJPUlMucmVxdWVzdENhbm5vdFJlc29sdmVUZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNtZEFyZ3MgPSBjb250cm9sbGVyLl9wcmVwYXJlUmVxdWVzdEFyZ3VtZW50cyhiaW5kT3B0aW9ucywgLi4uYXJncyk7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gY29udHJvbGxlci5fY3JlYXRlQ29tbWFuZChSZXF1ZXN0Q29tbWFuZCwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbW1hbmQub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB1cmw6IGNvbW1hbmQudXJsIHx8IGNvbW1hbmQub3B0aW9ucy51cmwgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBSZXF1ZXN0Q29tbWFuZC5yZXN1bHRHZXR0ZXJzLmZvckVhY2goZ2V0dGVyID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgZ2V0dGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW2dldHRlcl07XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9kZWNvcmF0ZVJlcXVlc3RGdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgUmVxdWVzdENvbW1hbmQuZXh0ZW5kZWRNZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbWV0aG9kLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbih7IG1ldGhvZCB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlcXVlc3RDb21tYW5kLm1ldGhvZE5hbWUsICdnZXR0ZXInKV0gKCkge1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2RlY29yYXRlUmVxdWVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShDbGlja0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbGlja0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSaWdodENsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJpZ2h0Q2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRG91YmxlQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRG91YmxlQ2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoSG92ZXJDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoSG92ZXJDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdDb21tYW5kLCB7IHNlbGVjdG9yLCBkcmFnT2Zmc2V0WCwgZHJhZ09mZnNldFksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEcmFnVG9FbGVtZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdUb0VsZW1lbnRDb21tYW5kLCB7IHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIF9nZXRTZWxlY3RvckZvclNjcm9sbCAoYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBpc1NlbGVjdG9yKGFyZ3NbMF0pID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICAvLyBOT1RFOiBoZXJlIHdlIHVzZSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IGZvciBvbGQgU2FmYXJpIHZlcnNpb25zXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBvbiBNb2phdmUgU2FmYXJpIDEyLjEvIEhpZ2ggU2llcnJhIFNhZmFyaSAxMS4xXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgX2dldFBvc2l0aW9uIChhcmdzKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuXG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNjcm9sbENvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5fZ2V0U2VsZWN0b3JGb3JTY3JvbGwoYXJncyk7XG5cbiAgICAgICAgbGV0IHggICAgICAgPSB2b2lkIDA7XG4gICAgICAgIGxldCB5ICAgICAgID0gdm9pZCAwO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHZvaWQgMDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgWyBwb3NpdGlvbiwgb3B0aW9ucyBdID0gYXJncztcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdudW1iZXInKVxuICAgICAgICAgICAgWyB4LCB5LCBvcHRpb25zIF0gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbENvbW1hbmQsIHsgc2VsZWN0b3IsIHgsIHksIHBvc2l0aW9uLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsQnlDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IFtieVgsIGJ5WSwgb3B0aW9uc10gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbEJ5Q29tbWFuZCwgeyBzZWxlY3RvciwgYnlYLCBieVksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxJbnRvVmlld0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxJbnRvVmlld0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUeXBlVGV4dENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgdGV4dCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUeXBlVGV4dENvbW1hbmQsIHsgc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RUZXh0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNlbGVjdFRleHRDb21tYW5kLCB7IHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydExpbmUsIHN0YXJ0UG9zLCBlbmRMaW5lLCBlbmRQb3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCwge1xuICAgICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydFBvcyxcbiAgICAgICAgICAgIGVuZExpbmUsXG4gICAgICAgICAgICBlbmRQb3MsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQubWV0aG9kTmFtZSldIChzdGFydFNlbGVjdG9yLCBlbmRTZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLCB7XG4gICAgICAgICAgICBzdGFydFNlbGVjdG9yLFxuICAgICAgICAgICAgZW5kU2VsZWN0b3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFByZXNzS2V5Q29tbWFuZC5tZXRob2ROYW1lKV0gKGtleXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUHJlc3NLZXlDb21tYW5kLCB7IGtleXMsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShXYWl0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHRpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoV2FpdENvbW1hbmQsIHsgdGltZW91dCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE5hdmlnYXRlVG9Db21tYW5kLm1ldGhvZE5hbWUpXSAodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE5hdmlnYXRlVG9Db21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGZpbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLCB7IHNlbGVjdG9yLCBmaWxlUGF0aCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsZWFyVXBsb2FkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKENsZWFyVXBsb2FkQ29tbWFuZCwgeyBzZWxlY3RvciB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFRha2VTY3JlZW5zaG90Q29tbWFuZC5tZXRob2ROYW1lKV0gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGF0aDogb3B0aW9ucyB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VTY3JlZW5zaG90Q29tbWFuZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEFyZ3MgPSB7IHNlbGVjdG9yIH07XG5cbiAgICAgICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggICAgPSBhcmdzWzBdO1xuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggPSBhcmdzWzBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQsIGNvbW1hbmRBcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJlc2l6ZVdpbmRvd0NvbW1hbmQsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZC5tZXRob2ROYW1lKV0gKGRldmljZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQsIHsgZGV2aWNlLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoTWF4aW1pemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE1heGltaXplV2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb0lmcmFtZUNvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb0lmcmFtZUNvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh1cmwpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQsIHsgdXJsIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2luZG93KSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0lkICAgICAgPSB3aW5kb3c/LmlkIHx8IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKENsb3NlV2luZG93Q29tbWFuZCwgeyB3aW5kb3dJZCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKEdldEN1cnJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKHdpbmRvd1NlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICBsZXQgY29tbWFuZDtcbiAgICAgICAgbGV0IGFyZ3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3dTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29tbWFuZCA9IFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kO1xuXG4gICAgICAgICAgICBhcmdzID0geyBjaGVja1dpbmRvdzogd2luZG93U2VsZWN0b3IgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQ7XG5cbiAgICAgICAgICAgIGFyZ3MgPSB7IHdpbmRvd0lkOiB3aW5kb3dTZWxlY3Rvcj8uaWQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKGNvbW1hbmQsIGFyZ3MpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIF9ldmFsJCAoZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChvcHRpb25zKSlcbiAgICAgICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe30sIG9wdGlvbnMsIHsgYm91bmRUZXN0UnVuOiB0aGlzIH0pO1xuXG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgID0gbmV3IENsaWVudEZ1bmN0aW9uQnVpbGRlcihmbiwgb3B0aW9ucywgeyBpbnN0YW50aWF0aW9uOiAnZXZhbCcsIGV4ZWN1dGlvbjogJ2V2YWwnIH0pO1xuICAgICAgICBjb25zdCBjbGllbnRGbiA9IGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gY2xpZW50Rm4oKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLm1ldGhvZE5hbWUpXSAoZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsIHtcbiAgICAgICAgICAgIGRpYWxvZ0hhbmRsZXI6IHsgZm4sIG9wdGlvbnMgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQsIHt9LCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQsIHt9LCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgY2hlY2tGb3JFeGNlc3NpdmVBd2FpdHMgKGNoZWNrZWRDYWxsc2l0ZSwgeyBhY3Rpb25JZCB9KSB7XG4gICAgICAgIGNvbnN0IHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXMgPSB0aGlzLnRlc3RSdW4ub2JzZXJ2ZWRDYWxsc2l0ZXMuc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlcztcbiAgICAgICAgY29uc3QgY2FsbHNpdGVJZCAgICAgICAgICAgICAgICA9IGdldENhbGxzaXRlSWQoY2hlY2tlZENhbGxzaXRlKTtcblxuICAgICAgICAvLyBOT1RFOiBJZiB0aGVyZSBhcmUgdW5hc3NlcnRlZCBjYWxsc2l0ZXMsIHdlIHNob3VsZCBhZGQgYWxsIG9mIHRoZW0gdG8gYXdhaXRlZFNuYXBzaG90V2FybmluZ3MuXG4gICAgICAgIC8vIFRoZSB3YXJuaW5ncyB0aGVtc2VsdmVzIGFyZSByYWlzZWQgYWZ0ZXIgdGhlIHRlc3QgcnVuIGluIHdyYXAtdGVzdC1mdW5jdGlvblxuICAgICAgICBpZiAoc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSAmJiAhc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXS5jaGVja2VkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5Q2FsbHNpdGUgb2Ygc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXS5jYWxsc2l0ZXMpXG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLmF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLnNldChnZXRDYWxsc2l0ZVN0YWNrRnJhbWVTdHJpbmcocHJvcGVydHlDYWxsc2l0ZSksIHsgY2FsbHNpdGU6IHByb3BlcnR5Q2FsbHNpdGUsIGFjdGlvbklkIH0pO1xuXG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzW2NhbGxzaXRlSWRdID0geyBjYWxsc2l0ZXM6IFtdLCBjaGVja2VkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWUpXSAoYWN0dWFsKSB7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlID0gZ2V0Q2FsbHNpdGVGb3JNZXRob2QoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbihhY3R1YWwsIHRoaXMsIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERlYnVnQ29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICAvLyBOT1RFOiBkbyBub3QgbmVlZCB0byBlbnF1ZXVlIHRoZSBEZWJ1ZyBjb21tYW5kIGlmIHdlIGFyZSBpbiBkZWJ1Z2dpbmcgbW9kZS5cbiAgICAgICAgLy8gVGhlIERlYnVnIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBieSBDRFAuXG4gICAgICAgIC8vIEFsc28sIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGVtcHR5IGZ1bmN0aW9uIHRvIHRoZSBleGVjdXRpb24gY2hhaW4gdG8gcHJlc2VydmUgaXQuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSgpID8gdGhpcy5fZW5xdWV1ZVRhc2soRGVidWdDb21tYW5kLm1ldGhvZE5hbWUsIG5vb3ApIDogdGhpcy5lbnF1ZXVlQ29tbWFuZChEZWJ1Z0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0VGVzdFNwZWVkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNwZWVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldFRlc3RTcGVlZENvbW1hbmQsIHsgc3BlZWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLm1ldGhvZE5hbWUpXSAoZHVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCwgeyBkdXJhdGlvbiB9LCAodGVzdENvbnRyb2xsZXIsIGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgIGFkZFdhcm5pbmcodGVzdENvbnRyb2xsZXIud2FybmluZ0xvZywgeyBtZXNzYWdlOiBnZXREZXByZWNhdGlvbk1lc3NhZ2UoREVQUkVDQVRFRC5zZXRQYWdlTG9hZFRpbWVvdXQpLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShVc2VSb2xlQ29tbWFuZC5tZXRob2ROYW1lKV0gKHJvbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoVXNlUm9sZUNvbW1hbmQsIHsgcm9sZSB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNraXBKc0Vycm9yc0NvbW1hbmQubWV0aG9kTmFtZSldIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNraXBKc0Vycm9yc0NvbW1hbmQsIHsgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEFkZFJlcXVlc3RIb29rc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5ob29rcykge1xuICAgICAgICBob29rcyA9IGZsYXR0ZW5EZWVwKGhvb2tzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChBZGRSZXF1ZXN0SG9va3NDb21tYW5kLCB7IGhvb2tzIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmhvb2tzKSB7XG4gICAgICAgIGhvb2tzID0gZmxhdHRlbkRlZXAoaG9va3MpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJlbW92ZVJlcXVlc3RIb29rc0NvbW1hbmQsIHsgaG9va3MgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGVuYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKSB7XG4gICAgICAgIGluRGVidWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlRGVidWdGb3JOb25EZWJ1Z0NvbW1hbmRzICgpIHtcbiAgICAgICAgaW5EZWJ1ZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNob3VsZFN0b3AgKGNvbW1hbmQpIHtcbiAgICAgICAgLy8gTk9URTogc2hvdWxkIG5ldmVyIHN0b3AgaW4gbm90IGNvbXBsaWxlciBkZWJ1Z2dpbmcgbW9kZVxuICAgICAgICBpZiAoIXRoaXMuaXNDb21waWxlclNlcnZpY2VNb2RlKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gTk9URTogc2hvdWxkIGFsd2F5cyBzdG9wIG9uIERlYnVnIGNvbW1hbmRcbiAgICAgICAgaWYgKGNvbW1hbmQgPT09ICdkZWJ1ZycpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBOT1RFOiBzaG91bGQgc3RvcCBvbiBvdGhlciBhY3Rpb25zIGFmdGVyIHRoZSBgTmV4dCBBY3Rpb25gIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICAgIGlmIChpbkRlYnVnKSB7XG4gICAgICAgICAgICBpbkRlYnVnID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4gaW5zdGFuY2VvZiBUZXN0UnVuUHJveHk7XG4gICAgfVxuXG59XG5cblRlc3RDb250cm9sbGVyLkFQSV9MSVNUID0gZ2V0RGVsZWdhdGVkQVBJTGlzdChUZXN0Q29udHJvbGxlci5wcm90b3R5cGUpO1xuXG5kZWxlZ2F0ZUFQSShUZXN0Q29udHJvbGxlci5wcm90b3R5cGUsIFRlc3RDb250cm9sbGVyLkFQSV9MSVNULCB7IHVzZUN1cnJlbnRDdHhBc0hhbmRsZXI6IHRydWUgfSk7XG4iXX0=
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBT2dCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQXlDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwyREFBOEU7QUFDOUUsd0RBQTBEO0FBQzFELDRGQUFrRTtBQUVsRSxvREFHK0I7QUFFL0IsaUVBQXFFO0FBQ3JFLG1EQUFrRjtBQUNsRiw4RkFBb0U7QUFDcEUsc0RBQW1GO0FBQ25GLGtEQUEyRDtBQUMzRCw4Q0FBb0Q7QUFDcEQsc0VBQTZDO0FBQzdDLG9FQUEyQztBQUUzQyxNQUFNLFlBQVksR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztBQUU1QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFFcEIsTUFBcUIsY0FBYztJQUMvQixZQUFhLE9BQU87O1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBVSxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSwwQ0FBRSxhQUFhLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsa0NBQWtDO1FBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRUQsd0ZBQXdGO0lBQ3hGLHlHQUF5RztJQUN6Ryx3REFBd0Q7SUFDeEQsRUFBRTtJQUNGLGdHQUFnRztJQUNoRyxnSUFBZ0k7SUFDaEksMERBQTBEO0lBQzFELEVBQUU7SUFDRixvRUFBb0U7SUFDcEUsZ0VBQWdFO0lBQ2hFLG9FQUFvRTtJQUNwRSxvSEFBb0g7SUFDcEgsc0JBQXNCLENBQUUsT0FBTyxFQUFFLFFBQVE7UUFDckMsTUFBTSxlQUFlLEdBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxpQkFBaUIsR0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQzNELE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNGLGVBQWUsQ0FBQyxJQUFJLEdBQUc7WUFDbkIsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQztRQUVGLElBQUEsMkJBQVcsRUFBQyxlQUFlLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUNsRCxPQUFPLEVBQU0sSUFBSTtZQUNqQixXQUFXLEVBQUUsbUJBQW1CO1NBQ25DLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjLENBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRO1FBQ3RDLElBQUk7WUFDQSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLEdBQUcsRUFBRTtZQUNSLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBRXhCLE1BQU0sR0FBRyxDQUFDO1NBQ2I7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxRQUFRO1FBQ3JELE1BQU0sUUFBUSxHQUFHLGtCQUFrQixFQUFFLENBQUM7UUFFdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRixJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztRQUUxQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWMsQ0FBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVE7UUFDekQsUUFBUSxHQUFHLFFBQVEsSUFBSSxJQUFBLG1DQUFvQixFQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoRSxNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFakUsSUFBSSxPQUFPLGlCQUFpQixLQUFLLFVBQVU7WUFDdkMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDOUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO3FCQUNoRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUV4QyxNQUFNLEdBQUcsQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQztRQUNOLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQsOEJBQThCLENBQUUsYUFBYTtRQUN6QyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVoRSxJQUFJLHNCQUFzQjtZQUN0QixNQUFNLElBQUksNkNBQWtDLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLGNBQWM7WUFDZixNQUFNLElBQUksZ0VBQXFELENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFBLDBDQUFhLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsa0ZBQWtGO0lBQ2xGLGdGQUFnRjtJQUNoRixnRUFBZ0U7SUFDaEUsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVcsQ0FBRSxHQUFHO1FBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRXZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDbkMsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLDhCQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEdBQUcsRUFBRTtRQUM5RSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQW9CLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUVELHVCQUF1QixDQUFFLElBQUksRUFBRSxZQUFZLEdBQUcsS0FBSztRQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFBLGtCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXhGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFNLEVBQUUsQ0FBQztRQUV0QixJQUFBLG9CQUFXLEVBQUMsSUFBQSxrQkFBUyxFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hELElBQUksWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO2dCQUMxRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDaEYsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO2dCQUNoRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7O2dCQUUvQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsMkJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxHQUFHLElBQUk7UUFDakQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUFpQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQywyQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLEdBQUcsSUFBSTtRQUNqRCxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbkUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUFpQixFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyw4QkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLEdBQUcsSUFBSTtRQUNwRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQW9CLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELHdCQUF3QixDQUFFLFdBQVcsRUFBRSxHQUFHLElBQUk7UUFDMUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRW5GLE9BQU87WUFDSCxHQUFHO1lBQ0gsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUM7U0FDbkQsQ0FBQztJQUNOLENBQUM7SUFFRCxzQkFBc0IsQ0FBRSxXQUFXLEdBQUcsRUFBRTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBQSxtQ0FBb0IsRUFBQyx3QkFBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLFlBQVksd0JBQVk7WUFDakUsTUFBTSxJQUFJLDZCQUFtQixDQUFDLFFBQVEsRUFBRSxzQkFBYyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFeEYsT0FBTyxVQUFVLEdBQUcsSUFBSTtZQUNwQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDMUUsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyx3QkFBYyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUU3RSxNQUFNLE9BQU8sbUNBQ04sT0FBTyxDQUFDLE9BQU8sS0FDbEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxHQUNoRCxDQUFDO1lBRUYsTUFBTSxPQUFPLEdBQUcsK0JBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNsRCxPQUFPLElBQUEsNEJBQVcsRUFBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5RCxDQUFDLENBQUMsQ0FBQztZQUVILHdCQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO29CQUNuQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsK0JBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO3dCQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsNEJBQVcsRUFBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFFMUUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzVCLENBQUMsQ0FBQztpQkFDTCxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCx3QkFBd0IsQ0FBRSxFQUFFO1FBQ3hCLHdCQUFjLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1QyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUNqRCxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyx3QkFBYyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUV6QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEMsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsc0JBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLFFBQVEsRUFBRSxPQUFPO1FBQ3RELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLDJCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsUUFBUSxFQUFFLE9BQU87UUFDM0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUFpQixFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLDRCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsUUFBUSxFQUFFLE9BQU87UUFDNUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLHNCQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxRQUFRLEVBQUUsT0FBTztRQUN0RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyxxQkFBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTztRQUMvRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLDhCQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU87UUFDbkYsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUFvQixFQUFFLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELHFCQUFxQixDQUFFLElBQUk7UUFDdkIsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLElBQUEsa0JBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFckYsSUFBSSxRQUFRO1lBQ1IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDOztZQUViLHNFQUFzRTtZQUN0RSxvR0FBb0c7WUFDcEcsb0NBQW9DO1lBQ3BDLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFFdkUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELFlBQVksQ0FBRSxJQUFJO1FBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVuRixJQUFJLFFBQVE7WUFDUixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFakIsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLHVCQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxHQUFHLElBQUk7UUFDN0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLEdBQVMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQVMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFckIsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1lBQzNCLENBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBRSxHQUFHLElBQUksQ0FBQztRQUVqQyxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7WUFDM0IsQ0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBRSxHQUFHLElBQUksQ0FBQztRQUU3QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyx5QkFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsR0FBRyxJQUFJO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFakMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQywrQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLFFBQVEsRUFBRSxPQUFPO1FBQy9ELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQywrQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyx5QkFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPO1FBQy9ELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQywyQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU87UUFDN0UsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUFpQixFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsc0NBQTRCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU87UUFDNUcsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHNDQUE0QixFQUFFO1lBQ3JELFFBQVE7WUFDUixTQUFTO1lBQ1QsUUFBUTtZQUNSLE9BQU87WUFDUCxNQUFNO1lBQ04sT0FBTztTQUNWLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyxzQ0FBNEIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsT0FBTztRQUN4RixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsc0NBQTRCLEVBQUU7WUFDckQsYUFBYTtZQUNiLFdBQVc7WUFDWCxPQUFPO1NBQ1YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLHlCQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxJQUFJLEVBQUUsT0FBTztRQUNyRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyx5QkFBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsT0FBTztRQUMzQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMseUJBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLDJCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsR0FBRztRQUM3QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsMkJBQWlCLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyxpQ0FBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLFFBQVEsRUFBRSxRQUFRO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQ0FBdUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyw0QkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLFFBQVE7UUFDbkQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsNENBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxPQUFPO1FBQ3JELElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFDdEMsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWhDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyw0Q0FBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsbURBQTRCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxRQUFRLEVBQUUsR0FBRyxJQUFJO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFFakMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDVCxXQUFXLENBQUMsSUFBSSxHQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQzthQUNJLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtZQUNoQyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7WUFFOUIsV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG1EQUE0QixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQywwQ0FBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLEtBQUssRUFBRSxNQUFNO1FBQ3pELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQywwQ0FBbUIsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyxxREFBOEIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLE1BQU0sRUFBRSxPQUFPO1FBQ3RFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxxREFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyw0Q0FBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsNENBQXFCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsK0JBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxRQUFRO1FBQ3RELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQywrQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLG1DQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBeUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQywyQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLEdBQUc7UUFDN0MsSUFBSSxDQUFDLDhCQUE4QixDQUFDLDJCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBaUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLDRCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsTUFBTTtRQUNqRCxNQUFNLFFBQVEsR0FBUSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxFQUFFLEtBQUksSUFBSSxDQUFDO1FBRXpDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyw0QkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsNEJBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyxpQ0FBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsOEJBQThCLENBQUMsaUNBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGlDQUF1QixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLCtCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsY0FBYztRQUM1RCxJQUFJLENBQUMsOEJBQThCLENBQUMsK0JBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEUsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLElBQUksQ0FBQztRQUVULElBQUksT0FBTyxjQUFjLEtBQUssVUFBVSxFQUFFO1lBQ3RDLE9BQU8sR0FBRywwQ0FBZ0MsQ0FBQztZQUUzQyxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUM7U0FDMUM7YUFDSTtZQUNELE9BQU8sR0FBRywrQkFBcUIsQ0FBQztZQUVoQyxJQUFJLEdBQUcsRUFBRSxRQUFRLEVBQUUsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLEVBQUUsRUFBRSxDQUFDO1NBQzNDO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMscUNBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLHFDQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTVFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQ0FBMkIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyx1Q0FBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsOEJBQThCLENBQUMsdUNBQTZCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHVDQUE2QixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sQ0FBRSxFQUFFLEVBQUUsT0FBTztRQUNmLElBQUksQ0FBQyxJQUFBLGNBQWlCLEVBQUMsT0FBTyxDQUFDO1lBQzNCLE9BQU8sR0FBRyxJQUFBLGVBQU0sRUFBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFMUQsTUFBTSxPQUFPLEdBQUksSUFBSSxpQ0FBcUIsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdkMsT0FBTyxRQUFRLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsdUNBQTZCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxFQUFFLEVBQUUsT0FBTztRQUNqRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsdUNBQTZCLEVBQUU7WUFDdEQsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRTtTQUNqQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsdUNBQTZCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBQSxtQ0FBb0IsRUFBQyx1Q0FBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRixNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsY0FBYyxDQUFDLHVDQUE2QixFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVsRixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsMENBQWdDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBQSxtQ0FBb0IsRUFBQywwQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRixNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsY0FBYyxDQUFDLDBDQUFnQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVyRixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsdUJBQXVCLENBQUUsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFO1FBQ2xELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQztRQUMzRixNQUFNLFVBQVUsR0FBa0IsSUFBQSx3QkFBYSxFQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWpFLGlHQUFpRztRQUNqRyw4RUFBOEU7UUFDOUUsSUFBSSx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUN6RixLQUFLLE1BQU0sZ0JBQWdCLElBQUkseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUztnQkFDMUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBQSxzQ0FBMkIsRUFBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFeEosT0FBTyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNoRDs7WUFFRyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pGLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyw0QkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLE1BQU07UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBQSxtQ0FBb0IsRUFBQyw0QkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuRSxPQUFPLElBQUksbUJBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQywwQkFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLDhFQUE4RTtRQUM5RSw2Q0FBNkM7UUFDN0MsbUZBQW1GO1FBQ25GLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQVksQ0FBQyxVQUFVLEVBQUUsYUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQVksQ0FBQyxDQUFDO0lBQy9ILENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyw2QkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLEtBQUs7UUFDakQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLDZCQUFtQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsQ0FBQyxJQUFBLHVCQUFZLEVBQUMsbUNBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBRSxRQUFRO1FBQzFELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBeUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQzVGLElBQUEsOEJBQVUsRUFBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUEsa0NBQXFCLEVBQUMsdUJBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6SSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyx3QkFBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsSUFBSTtRQUMzQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLDZCQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsT0FBTztRQUNuRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsNkJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxDQUFDLElBQUEsdUJBQVksRUFBQyxnQ0FBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFFLEdBQUcsS0FBSztRQUN2RCxLQUFLLEdBQUcsSUFBQSxvQkFBVyxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQ0FBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELENBQUMsSUFBQSx1QkFBWSxFQUFDLG1DQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUUsR0FBRyxLQUFLO1FBQzFELEtBQUssR0FBRyxJQUFBLG9CQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG1DQUF5QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLDhCQUE4QjtRQUNqQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsK0JBQStCO1FBQ2xDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFVBQVUsQ0FBRSxPQUFPO1FBQ2YsMERBQTBEO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFFakIsNENBQTRDO1FBQzVDLElBQUksT0FBTyxLQUFLLE9BQU87WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFFaEIsK0VBQStFO1FBQy9FLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVoQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLFlBQVksd0JBQVksQ0FBQztJQUNoRCxDQUFDO0NBRUo7QUExakJELGlDQTBqQkM7QUFFRCxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRXhFLElBQUEsMkJBQVcsRUFBQyxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVE9ETzogRml4IGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZFeHByZXNzL3Rlc3RjYWZlL2lzc3Vlcy80MTM5IHRvIGdldCByaWQgb2YgUGlua2llXG5pbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuaW1wb3J0IHtcbiAgICBpZGVudGl0eSxcbiAgICBhc3NpZ24sXG4gICAgaXNOaWwgYXMgaXNOdWxsT3JVbmRlZmluZWQsXG4gICAgZmxhdHRlbkRlZXAsXG4gICAgbm9vcCxcbiAgICBjYXN0QXJyYXksXG59IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGdldENhbGxzaXRlRm9yTWV0aG9kIH0gZnJvbSAnLi4vLi4vZXJyb3JzL2dldC1jYWxsc2l0ZSc7XG5pbXBvcnQgQ2xpZW50RnVuY3Rpb25CdWlsZGVyIGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBnZXREZWxlZ2F0ZWRBUElMaXN0LCBkZWxlZ2F0ZUFQSSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlbGVnYXRlZC1hcGknO1xuaW1wb3J0IGFkZFdhcm5pbmcgZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy9hZGQtcmVuZGVyZWQtd2FybmluZyc7XG5pbXBvcnQgeyBnZXREZXByZWNhdGlvbk1lc3NhZ2UsIERFUFJFQ0FURUQgfSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL2RlcHJlY2F0ZWQnO1xuXG5pbXBvcnQge1xuICAgIENsaWNrQ29tbWFuZCxcbiAgICBSaWdodENsaWNrQ29tbWFuZCxcbiAgICBEb3VibGVDbGlja0NvbW1hbmQsXG4gICAgSG92ZXJDb21tYW5kLFxuICAgIERyYWdDb21tYW5kLFxuICAgIERyYWdUb0VsZW1lbnRDb21tYW5kLFxuICAgIFR5cGVUZXh0Q29tbWFuZCxcbiAgICBTZWxlY3RUZXh0Q29tbWFuZCxcbiAgICBTZWxlY3RUZXh0QXJlYUNvbnRlbnRDb21tYW5kLFxuICAgIFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQsXG4gICAgUHJlc3NLZXlDb21tYW5kLFxuICAgIE5hdmlnYXRlVG9Db21tYW5kLFxuICAgIFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLFxuICAgIENsZWFyVXBsb2FkQ29tbWFuZCxcbiAgICBTd2l0Y2hUb0lmcmFtZUNvbW1hbmQsXG4gICAgU3dpdGNoVG9NYWluV2luZG93Q29tbWFuZCxcbiAgICBPcGVuV2luZG93Q29tbWFuZCxcbiAgICBDbG9zZVdpbmRvd0NvbW1hbmQsXG4gICAgR2V0Q3VycmVudFdpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kLFxuICAgIFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1ByZXZpb3VzV2luZG93Q29tbWFuZCxcbiAgICBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZCxcbiAgICBHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZCxcbiAgICBHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZCxcbiAgICBTZXRUZXN0U3BlZWRDb21tYW5kLFxuICAgIFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQsXG4gICAgU2Nyb2xsQ29tbWFuZCxcbiAgICBTY3JvbGxCeUNvbW1hbmQsXG4gICAgU2Nyb2xsSW50b1ZpZXdDb21tYW5kLFxuICAgIFVzZVJvbGVDb21tYW5kLFxuICAgIERpc3BhdGNoRXZlbnRDb21tYW5kLFxuICAgIEdldENvb2tpZXNDb21tYW5kLFxuICAgIFNldENvb2tpZXNDb21tYW5kLFxuICAgIERlbGV0ZUNvb2tpZXNDb21tYW5kLFxuICAgIFJlcXVlc3RDb21tYW5kLFxuICAgIFNraXBKc0Vycm9yc0NvbW1hbmQsXG4gICAgQWRkUmVxdWVzdEhvb2tzQ29tbWFuZCxcbiAgICBSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgICBUYWtlU2NyZWVuc2hvdENvbW1hbmQsXG4gICAgVGFrZUVsZW1lbnRTY3JlZW5zaG90Q29tbWFuZCxcbiAgICBSZXNpemVXaW5kb3dDb21tYW5kLFxuICAgIFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZCxcbiAgICBNYXhpbWl6ZVdpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Jyb3dzZXItbWFuaXB1bGF0aW9uJztcblxuaW1wb3J0IHsgV2FpdENvbW1hbmQsIERlYnVnQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcbmltcG9ydCB7IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQgYXMgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4vZXhlY3V0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNTZWxlY3RvciB9IGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvdHlwZXMnO1xuaW1wb3J0IFRlc3RSdW5Qcm94eSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21waWxlci90ZXN0LXJ1bi1wcm94eSc7XG5cbmltcG9ydCB7XG4gICAgTXVsdGlwbGVXaW5kb3dzTW9kZUlzRGlzYWJsZWRFcnJvcixcbiAgICBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RBdmFpbGFibGVJblJlbW90ZUJyb3dzZXJFcnJvcixcbn0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlc3QtcnVuJztcblxuaW1wb3J0IHsgQXNzZXJ0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUlkLCBnZXRDYWxsc2l0ZVN0YWNrRnJhbWVTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9jYWxsc2l0ZSc7XG5pbXBvcnQgUmVFeGVjdXRhYmxlUHJvbWlzZSBmcm9tICcuLi8uLi91dGlscy9yZS1leGVjdXRhYmxlLXByb21pc2UnO1xuaW1wb3J0IHsgc2VuZFJlcXVlc3RUaHJvdWdoQVBJIGFzIHNlbmRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vcmVxdWVzdC9zZW5kJztcbmltcG9ydCB7IFJlcXVlc3RSdW50aW1lRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgQ3VzdG9tQWN0aW9ucyBmcm9tICcuL2N1c3RvbS1hY3Rpb25zJztcbmltcG9ydCBkZWxlZ2F0ZWRBUEkgZnJvbSAnLi9kZWxlZ2F0ZWQtYXBpJztcblxuY29uc3Qgb3JpZ2luYWxUaGVuID0gUHJvbWlzZS5yZXNvbHZlKCkudGhlbjtcblxubGV0IGluRGVidWcgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yICh0ZXN0UnVuKSB7XG4gICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1biAgICAgICAgPSB0ZXN0UnVuO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZyAgICAgPSB0ZXN0UnVuLndhcm5pbmdMb2c7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjdGlvbnMgPSBuZXcgQ3VzdG9tQWN0aW9ucyh0aGlzLCB0ZXN0UnVuPy5vcHRzPy5jdXN0b21BY3Rpb25zKTtcblxuICAgICAgICB0aGlzLl9hZGRUZXN0Q29udHJvbGxlclRvRXhlY3V0aW9uQ2hhaW4oKTtcbiAgICB9XG5cbiAgICBfYWRkVGVzdENvbnRyb2xsZXJUb0V4ZWN1dGlvbkNoYWluICgpIHtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbi5fdGVzdENvbnRyb2xsZXIgPSB0aGlzO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IFRlc3RDYWZlIGV4ZWN1dGVzIGFjdGlvbnMgYW5kIGFzc2VydGlvbnMgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAvLyBhKSBUaGUgYGF3YWl0YCBrZXl3b3JkIHRoYXQgcHJvY2VlZHMgdGhlIG1ldGhvZCBkZWNsYXJhdGlvbiB0cmlnZ2VycyB0aGUgYHRoZW5gIGZ1bmN0aW9uIG9mIGEgUHJvbWlzZS5cbiAgICAvLyBiKSBUaGUgYWN0aW9uIGlzIGNoYWluZWQgdG8gYW5vdGhlciBgYXdhaXRlZGAgbWV0aG9kLlxuICAgIC8vXG4gICAgLy8gSW4gb3JkZXIgdG8gdHJhY2sgbWlzc2luZyBgYXdhaXRgIHN0YXRlbWVudHMsIFRlc3RDYWZlIGV4cG9zZXMgYSBzcGVjaWFsIFByb21pc2UgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2hlbiBUZXN0Q2FmZSBkZXRlY3RzIGEgbWlzc2luZyBgYXdhaXRgIHN0YXRlbWVudCwgaXQgY29tcGFyZXMgdGhlIG1ldGhvZCdzIGNhbGxzaXRlIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGV4cG9zZWQgUHJvbWlzZS5cbiAgICAvLyBUaGlzIHdvcmthcm91bmQgaXMgbmVjZXNzYXJ5IGZvciBzaXR1YXRpb25zIGxpa2UgdGhlc2U6XG4gICAgLy9cbiAgICAvLyB2YXIgdDIgPSB0LmNsaWNrKCcjYnRuMScpOyAvLyA8LS0gc3RvcmVzIG5ldyBjYWxsc2l0ZVdpdGhvdXRBd2FpdFxuICAgIC8vIGF3YWl0IHQyOyAgICAgICAgICAgICAgICAgIC8vIDwtLSBjYWxsc2l0ZVdpdGhvdXRBd2FpdCA9IG51bGxcbiAgICAvLyB0LmNsaWNrKCcjYnRuMicpOyAgICAgICAgICAvLyA8LS0gc3RvcmVzIG5ldyBjYWxsc2l0ZVdpdGhvdXRBd2FpdFxuICAgIC8vIGF3YWl0IHQyLmNsaWNrKCcjYnRuMycpOyAgIC8vIDwtLSB3aXRob3V0IGNoZWNrIGl0IHdpbGwgc2V0IGNhbGxzaXRlV2l0aG91dEF3YWl0ID0gbnVsbCwgc28gd2Ugd2lsbCBsb3N0IHRyYWNraW5nXG4gICAgX2NyZWF0ZUV4dGVuZGVkUHJvbWlzZSAocHJvbWlzZSwgY2FsbHNpdGUpIHtcbiAgICAgICAgY29uc3QgZXh0ZW5kZWRQcm9taXNlICAgICA9IHByb21pc2UudGhlbihpZGVudGl0eSk7XG4gICAgICAgIGNvbnN0IG9ic2VydmVkQ2FsbHNpdGVzICAgPSB0aGlzLnRlc3RSdW4ub2JzZXJ2ZWRDYWxsc2l0ZXM7XG4gICAgICAgIGNvbnN0IG1hcmtDYWxsc2l0ZUF3YWl0ZWQgPSAoKSA9PiBvYnNlcnZlZENhbGxzaXRlcy5jYWxsc2l0ZXNXaXRob3V0QXdhaXQuZGVsZXRlKGNhbGxzaXRlKTtcblxuICAgICAgICBleHRlbmRlZFByb21pc2UudGhlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG1hcmtDYWxsc2l0ZUF3YWl0ZWQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGhlbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRlbGVnYXRlQVBJKGV4dGVuZGVkUHJvbWlzZSwgVGVzdENvbnRyb2xsZXIuQVBJX0xJU1QsIHtcbiAgICAgICAgICAgIGhhbmRsZXI6ICAgICB0aGlzLFxuICAgICAgICAgICAgcHJveHlNZXRob2Q6IG1hcmtDYWxsc2l0ZUF3YWl0ZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBleHRlbmRlZFByb21pc2U7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNvbW1hbmQgKENtZEN0b3IsIGNtZEFyZ3MsIGNhbGxzaXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENtZEN0b3IoY21kQXJncywgdGhpcy50ZXN0UnVuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBlcnIuY2FsbHNpdGUgPSBjYWxsc2l0ZTtcblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2VucXVldWVUYXNrIChhcGlNZXRob2ROYW1lLCBjcmVhdGVUYXNrRXhlY3V0b3IsIGNhbGxzaXRlKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gY3JlYXRlVGFza0V4ZWN1dG9yKCk7XG5cbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbi50aGVuID0gb3JpZ2luYWxUaGVuO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluICAgICAgPSB0aGlzLmV4ZWN1dGlvbkNoYWluLnRoZW4oZXhlY3V0b3IpO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcy5jYWxsc2l0ZXNXaXRob3V0QXdhaXQuYWRkKGNhbGxzaXRlKTtcblxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluID0gdGhpcy5fY3JlYXRlRXh0ZW5kZWRQcm9taXNlKHRoaXMuZXhlY3V0aW9uQ2hhaW4sIGNhbGxzaXRlKTtcblxuICAgICAgICB0aGlzLl9hZGRUZXN0Q29udHJvbGxlclRvRXhlY3V0aW9uQ2hhaW4oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25DaGFpbjtcbiAgICB9XG5cbiAgICBlbnF1ZXVlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgdmFsaWRhdGVDb21tYW5kRm4sIGNhbGxzaXRlKSB7XG4gICAgICAgIGNhbGxzaXRlID0gY2FsbHNpdGUgfHwgZ2V0Q2FsbHNpdGVGb3JNZXRob2QoQ21kQ3Rvci5tZXRob2ROYW1lKTtcblxuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGVDb21tYW5kRm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hbmRGbih0aGlzLCBjb21tYW5kLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVUYXNrKGNvbW1hbmQubWV0aG9kTmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQgKGFwaU1ldGhvZE5hbWUpIHtcbiAgICAgICAgY29uc3QgeyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCBhY3RpdmVXaW5kb3dJZCB9ID0gdGhpcy50ZXN0UnVuO1xuXG4gICAgICAgIGlmIChkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc0Rpc2FibGVkRXJyb3IoYXBpTWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFhY3RpdmVXaW5kb3dJZClcbiAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RBdmFpbGFibGVJblJlbW90ZUJyb3dzZXJFcnJvcihhcGlNZXRob2ROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRFeGVjdXRpb25Db250ZXh0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRpb25Db250ZXh0KVxuICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQodGhpcy50ZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBBUEkgaW1wbGVtZW50YXRpb25cbiAgICAvLyBXZSBuZWVkIGltcGxlbWVudGF0aW9uIG1ldGhvZHMgdG8gb2J0YWluIGNvcnJlY3QgY2FsbHNpdGVzLiBJZiB3ZSB1c2UgcGxhaW4gQVBJXG4gICAgLy8gbWV0aG9kcyBpbiBjaGFpbmVkIHdyYXBwZXJzIHRoZW4gd2Ugd2lsbCBoYXZlIGNhbGxzaXRlIGZvciB0aGUgd3JhcHBlZCBtZXRob2RcbiAgICAvLyBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiBjaGFpbmVkIG1ldGhvZCBjYWxsc2l0ZSBpbiB1c2VyIGNvZGUuXG4gICAgX2N0eCRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmN0eDtcbiAgICB9XG5cbiAgICBfY3R4JHNldHRlciAodmFsKSB7XG4gICAgICAgIHRoaXMudGVzdFJ1bi5jdHggPSB2YWw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5jdHg7XG4gICAgfVxuXG4gICAgX2ZpeHR1cmVDdHgkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5maXh0dXJlQ3R4O1xuICAgIH1cblxuICAgIF9icm93c2VyJGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uYnJvd3NlcjtcbiAgICB9XG5cbiAgICBfY3VzdG9tQWN0aW9ucyRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQWN0aW9ucyB8fCBuZXcgQ3VzdG9tQWN0aW9ucyh0aGlzLCB0aGlzLnRlc3RSdW4ub3B0cy5jdXN0b21BY3Rpb25zKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERpc3BhdGNoRXZlbnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGV2ZW50TmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERpc3BhdGNoRXZlbnRDb21tYW5kLCB7IHNlbGVjdG9yLCBldmVudE5hbWUsIG9wdGlvbnMsIHJlbGF0ZWRUYXJnZXQ6IG9wdGlvbnMucmVsYXRlZFRhcmdldCB9KTtcbiAgICB9XG5cbiAgICBfcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyAoYXJncywgaXNTZXRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdXJsc0FyZyA9IGNhc3RBcnJheShhcmdzWzFdKTtcbiAgICAgICAgY29uc3QgdXJscyAgICA9IEFycmF5LmlzQXJyYXkodXJsc0FyZykgJiYgdHlwZW9mIHVybHNBcmdbMF0gPT09ICdzdHJpbmcnID8gdXJsc0FyZyA6IFtdO1xuXG4gICAgICAgIGNvbnN0IGNvb2tpZXNBcmcgPSB1cmxzLmxlbmd0aCA/IGFyZ3NbMF0gOiBhcmdzO1xuICAgICAgICBjb25zdCBjb29raWVzICAgID0gW107XG5cbiAgICAgICAgZmxhdHRlbkRlZXAoY2FzdEFycmF5KGNvb2tpZXNBcmcpKS5mb3JFYWNoKGNvb2tpZSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTZXRDb21tYW5kICYmICFjb29raWUubmFtZSAmJiB0eXBlb2YgY29va2llID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjb29raWUpLmZvckVhY2goKFtuYW1lLCB2YWx1ZV0pID0+IGNvb2tpZXMucHVzaCh7IG5hbWUsIHZhbHVlIH0pKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc1NldENvbW1hbmQgJiYgdHlwZW9mIGNvb2tpZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29va2llcy5wdXNoKHsgbmFtZTogY29va2llIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNvb2tpZXMucHVzaChjb29raWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyB1cmxzLCBjb29raWVzIH07XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoR2V0Q29va2llc0NvbW1hbmQsIHRoaXMuX3ByZXBhcmVDb29raWVBcmd1bWVudHMoYXJncykpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0Q29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgdXJscywgY29va2llcyB9ID0gdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzLCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRDb29raWVzQ29tbWFuZCwgeyBjb29raWVzLCB1cmw6IHVybHNbMF0gfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWxldGVDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRGVsZXRlQ29va2llc0NvbW1hbmQsIHRoaXMuX3ByZXBhcmVDb29raWVBcmd1bWVudHMoYXJncykpO1xuICAgIH1cblxuICAgIF9wcmVwYXJlUmVxdWVzdEFyZ3VtZW50cyAoYmluZE9wdGlvbnMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgW3VybCwgb3B0aW9uc10gPSB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgPyBbYXJnc1swXS51cmwsIGFyZ3NbMF1dIDogYXJncztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgYmluZE9wdGlvbnMpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24gKGJpbmRPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlID0gZ2V0Q2FsbHNpdGVGb3JNZXRob2QoUmVxdWVzdENvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVyLnRlc3RSdW4gfHwgY29udHJvbGxlci50ZXN0UnVuIGluc3RhbmNlb2YgVGVzdFJ1blByb3h5KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RSdW50aW1lRXJyb3IoY2FsbHNpdGUsIFJVTlRJTUVfRVJST1JTLnJlcXVlc3RDYW5ub3RSZXNvbHZlVGVzdFJ1bik7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBjbWRBcmdzID0gY29udHJvbGxlci5fcHJlcGFyZVJlcXVlc3RBcmd1bWVudHMoYmluZE9wdGlvbnMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGNvbnRyb2xsZXIuX2NyZWF0ZUNvbW1hbmQoUmVxdWVzdENvbW1hbmQsIGNtZEFyZ3MsIGNhbGxzaXRlKTtcblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb21tYW5kLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgdXJsOiBjb21tYW5kLnVybCB8fCBjb21tYW5kLm9wdGlvbnMudXJsIHx8ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IFJlRXhlY3V0YWJsZVByb21pc2UuZnJvbUZuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VuZFJlcXVlc3QoY29udHJvbGxlci50ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUmVxdWVzdENvbW1hbmQucmVzdWx0R2V0dGVycy5mb3JFYWNoKGdldHRlciA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIGdldHRlciwge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IFJlRXhlY3V0YWJsZVByb21pc2UuZnJvbUZuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZFJlcXVlc3QoY29udHJvbGxlci50ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZVtnZXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfZGVjb3JhdGVSZXF1ZXN0RnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIFJlcXVlc3RDb21tYW5kLmV4dGVuZGVkTWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG1ldGhvZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24oeyBtZXRob2QgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXF1ZXN0Q29tbWFuZC5tZXRob2ROYW1lLCAnZ2V0dGVyJyldICgpIHtcbiAgICAgICAgY29uc3QgZm4gPSB0aGlzLl9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24oKTtcblxuICAgICAgICB0aGlzLl9kZWNvcmF0ZVJlcXVlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoQ2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmlnaHRDbGlja0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSaWdodENsaWNrQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERvdWJsZUNsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERvdWJsZUNsaWNrQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEhvdmVyQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKEhvdmVyQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERyYWdDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGRyYWdPZmZzZXRYLCBkcmFnT2Zmc2V0WSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEcmFnQ29tbWFuZCwgeyBzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ1RvRWxlbWVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZGVzdGluYXRpb25TZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEcmFnVG9FbGVtZW50Q29tbWFuZCwgeyBzZWxlY3RvciwgZGVzdGluYXRpb25TZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBfZ2V0U2VsZWN0b3JGb3JTY3JvbGwgKGFyZ3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgaXNTZWxlY3RvcihhcmdzWzBdKSA/IGFyZ3NbMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChzZWxlY3RvcilcbiAgICAgICAgICAgIGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgLy8gTk9URTogaGVyZSB3ZSB1c2UgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCBmb3Igb2xkIFNhZmFyaSB2ZXJzaW9uc1xuICAgICAgICAgICAgLy8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQgb24gTW9qYXZlIFNhZmFyaSAxMi4xLyBIaWdoIFNpZXJyYSBTYWZhcmkgMTEuMVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIF9nZXRQb3NpdGlvbiAoYXJncykge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyA/IGFyZ3NbMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbilcbiAgICAgICAgICAgIGFyZ3Muc2hpZnQoKTtcblxuICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLl9nZXRQb3NpdGlvbihhcmdzKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGxldCB4ICAgICAgID0gdm9pZCAwO1xuICAgICAgICBsZXQgeSAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIFsgcG9zaXRpb24sIG9wdGlvbnMgXSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIFsgeCwgeSwgb3B0aW9ucyBdID0gYXJncztcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxDb21tYW5kLCB7IHNlbGVjdG9yLCB4LCB5LCBwb3NpdGlvbiwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNjcm9sbEJ5Q29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLl9nZXRTZWxlY3RvckZvclNjcm9sbChhcmdzKTtcblxuICAgICAgICBjb25zdCBbYnlYLCBieVksIG9wdGlvbnNdID0gYXJncztcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxCeUNvbW1hbmQsIHsgc2VsZWN0b3IsIGJ5WCwgYnlZLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsSW50b1ZpZXdDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2Nyb2xsSW50b1ZpZXdDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVHlwZVRleHRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoVHlwZVRleHRDb21tYW5kLCB7IHNlbGVjdG9yLCB0ZXh0LCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0VGV4dENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgc3RhcnRQb3MsIGVuZFBvcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZWxlY3RUZXh0Q29tbWFuZCwgeyBzZWxlY3Rvciwgc3RhcnRQb3MsIGVuZFBvcywgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgc3RhcnRMaW5lLCBzdGFydFBvcywgZW5kTGluZSwgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQsIHtcbiAgICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgICAgc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRQb3MsXG4gICAgICAgICAgICBlbmRMaW5lLFxuICAgICAgICAgICAgZW5kUG9zLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc3RhcnRTZWxlY3RvciwgZW5kU2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2VsZWN0RWRpdGFibGVDb250ZW50Q29tbWFuZCwge1xuICAgICAgICAgICAgc3RhcnRTZWxlY3RvcixcbiAgICAgICAgICAgIGVuZFNlbGVjdG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShQcmVzc0tleUNvbW1hbmQubWV0aG9kTmFtZSldIChrZXlzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFByZXNzS2V5Q29tbWFuZCwgeyBrZXlzLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoV2FpdENvbW1hbmQubWV0aG9kTmFtZSldICh0aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFdhaXRDb21tYW5kLCB7IHRpbWVvdXQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShOYXZpZ2F0ZVRvQ29tbWFuZC5tZXRob2ROYW1lKV0gKHVybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChOYXZpZ2F0ZVRvQ29tbWFuZCwgeyB1cmwgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZCwgeyBzZWxlY3RvciwgZmlsZVBhdGggfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShDbGVhclVwbG9hZENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbGVhclVwbG9hZENvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlU2NyZWVuc2hvdENvbW1hbmQubWV0aG9kTmFtZSldIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBhdGg6IG9wdGlvbnMgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUYWtlU2NyZWVuc2hvdENvbW1hbmQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVGFrZUVsZW1lbnRTY3JlZW5zaG90Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0geyBzZWxlY3RvciB9O1xuXG4gICAgICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICAgICAgICBjb21tYW5kQXJncy5wYXRoICAgID0gYXJnc1swXTtcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLm9wdGlvbnMgPSBhcmdzWzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLm9wdGlvbnMgPSBhcmdzWzBdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb21tYW5kQXJncy5wYXRoID0gYXJnc1swXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLCBjb21tYW5kQXJncyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXNpemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dDb21tYW5kLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQubWV0aG9kTmFtZSldIChkZXZpY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUmVzaXplV2luZG93VG9GaXREZXZpY2VDb21tYW5kLCB7IGRldmljZSwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE1heGltaXplV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChNYXhpbWl6ZVdpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9JZnJhbWVDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9JZnJhbWVDb21tYW5kLCB7IHNlbGVjdG9yIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9NYWluV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE9wZW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAodXJsKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKE9wZW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE9wZW5XaW5kb3dDb21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKHdpbmRvdykge1xuICAgICAgICBjb25zdCB3aW5kb3dJZCAgICAgID0gd2luZG93Py5pZCB8fCBudWxsO1xuXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbG9zZVdpbmRvd0NvbW1hbmQsIHsgd2luZG93SWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aW5kb3dTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvbW1hbmQ7XG4gICAgICAgIGxldCBhcmdzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZDtcblxuICAgICAgICAgICAgYXJncyA9IHsgY2hlY2tXaW5kb3c6IHdpbmRvd1NlbGVjdG9yIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21tYW5kID0gU3dpdGNoVG9XaW5kb3dDb21tYW5kO1xuXG4gICAgICAgICAgICBhcmdzID0geyB3aW5kb3dJZDogd2luZG93U2VsZWN0b3I/LmlkIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChjb21tYW5kLCBhcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBfZXZhbCQgKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQob3B0aW9ucykpXG4gICAgICAgICAgICBvcHRpb25zID0gYXNzaWduKHt9LCBvcHRpb25zLCB7IGJvdW5kVGVzdFJ1bjogdGhpcyB9KTtcblxuICAgICAgICBjb25zdCBidWlsZGVyICA9IG5ldyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIoZm4sIG9wdGlvbnMsIHsgaW5zdGFudGlhdGlvbjogJ2V2YWwnLCBleGVjdXRpb246ICdldmFsJyB9KTtcbiAgICAgICAgY29uc3QgY2xpZW50Rm4gPSBidWlsZGVyLmdldEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIGNsaWVudEZuKCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZC5tZXRob2ROYW1lKV0gKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLCB7XG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiB7IGZuLCBvcHRpb25zIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIGNoZWNrRm9yRXhjZXNzaXZlQXdhaXRzIChjaGVja2VkQ2FsbHNpdGUsIHsgYWN0aW9uSWQgfSkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzID0gdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLnNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXM7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlSWQgICAgICAgICAgICAgICAgPSBnZXRDYWxsc2l0ZUlkKGNoZWNrZWRDYWxsc2l0ZSk7XG5cbiAgICAgICAgLy8gTk9URTogSWYgdGhlcmUgYXJlIHVuYXNzZXJ0ZWQgY2FsbHNpdGVzLCB3ZSBzaG91bGQgYWRkIGFsbCBvZiB0aGVtIHRvIGF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLlxuICAgICAgICAvLyBUaGUgd2FybmluZ3MgdGhlbXNlbHZlcyBhcmUgcmFpc2VkIGFmdGVyIHRoZSB0ZXN0IHJ1biBpbiB3cmFwLXRlc3QtZnVuY3Rpb25cbiAgICAgICAgaWYgKHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0gJiYgIXNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2hlY2tlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eUNhbGxzaXRlIG9mIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2FsbHNpdGVzKVxuICAgICAgICAgICAgICAgIHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcy5hd2FpdGVkU25hcHNob3RXYXJuaW5ncy5zZXQoZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nKHByb3BlcnR5Q2FsbHNpdGUpLCB7IGNhbGxzaXRlOiBwcm9wZXJ0eUNhbGxzaXRlLCBhY3Rpb25JZCB9KTtcblxuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSA9IHsgY2FsbHNpdGVzOiBbXSwgY2hlY2tlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKV0gKGFjdHVhbCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24oYWN0dWFsLCB0aGlzLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWJ1Z0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgLy8gTk9URTogZG8gbm90IG5lZWQgdG8gZW5xdWV1ZSB0aGUgRGVidWcgY29tbWFuZCBpZiB3ZSBhcmUgaW4gZGVidWdnaW5nIG1vZGUuXG4gICAgICAgIC8vIFRoZSBEZWJ1ZyBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgYnkgQ0RQLlxuICAgICAgICAvLyBBbHNvLCB3ZSBhcmUgZm9yY2VkIHRvIGFkZCBlbXB0eSBmdW5jdGlvbiB0byB0aGUgZXhlY3V0aW9uIGNoYWluIHRvIHByZXNlcnZlIGl0LlxuICAgICAgICByZXR1cm4gdGhpcy5pc0NvbXBpbGVyU2VydmljZU1vZGUoKSA/IHRoaXMuX2VucXVldWVUYXNrKERlYnVnQ29tbWFuZC5tZXRob2ROYW1lLCBub29wKSA6IHRoaXMuZW5xdWV1ZUNvbW1hbmQoRGVidWdDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldFRlc3RTcGVlZENvbW1hbmQubWV0aG9kTmFtZSldIChzcGVlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRUZXN0U3BlZWRDb21tYW5kLCB7IHNwZWVkIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZC5tZXRob2ROYW1lKV0gKGR1cmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQsIHsgZHVyYXRpb24gfSwgKHRlc3RDb250cm9sbGVyLCBjb21tYW5kKSA9PiB7XG4gICAgICAgICAgICBhZGRXYXJuaW5nKHRlc3RDb250cm9sbGVyLndhcm5pbmdMb2csIHsgbWVzc2FnZTogZ2V0RGVwcmVjYXRpb25NZXNzYWdlKERFUFJFQ0FURUQuc2V0UGFnZUxvYWRUaW1lb3V0KSwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVXNlUm9sZUNvbW1hbmQubWV0aG9kTmFtZSldIChyb2xlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFVzZVJvbGVDb21tYW5kLCB7IHJvbGUgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTa2lwSnNFcnJvcnNDb21tYW5kLm1ldGhvZE5hbWUpXSAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTa2lwSnNFcnJvcnNDb21tYW5kLCB7IG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShBZGRSZXF1ZXN0SG9va3NDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uaG9va3MpIHtcbiAgICAgICAgaG9va3MgPSBmbGF0dGVuRGVlcChob29rcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoQWRkUmVxdWVzdEhvb2tzQ29tbWFuZCwgeyBob29rcyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlbW92ZVJlcXVlc3RIb29rc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5ob29rcykge1xuICAgICAgICBob29rcyA9IGZsYXR0ZW5EZWVwKGhvb2tzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kLCB7IGhvb2tzIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBlbmFibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMgKCkge1xuICAgICAgICBpbkRlYnVnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKSB7XG4gICAgICAgIGluRGVidWcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzaG91bGRTdG9wIChjb21tYW5kKSB7XG4gICAgICAgIC8vIE5PVEU6IHNob3VsZCBuZXZlciBzdG9wIGluIG5vdCBjb21wbGlsZXIgZGVidWdnaW5nIG1vZGVcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIE5PVEU6IHNob3VsZCBhbHdheXMgc3RvcCBvbiBEZWJ1ZyBjb21tYW5kXG4gICAgICAgIGlmIChjb21tYW5kID09PSAnZGVidWcnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gTk9URTogc2hvdWxkIHN0b3Agb24gb3RoZXIgYWN0aW9ucyBhZnRlciB0aGUgYE5leHQgQWN0aW9uYCBidXR0b24gaXMgY2xpY2tlZFxuICAgICAgICBpZiAoaW5EZWJ1Zykge1xuICAgICAgICAgICAgaW5EZWJ1ZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc0NvbXBpbGVyU2VydmljZU1vZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuIGluc3RhbmNlb2YgVGVzdFJ1blByb3h5O1xuICAgIH1cblxufVxuXG5UZXN0Q29udHJvbGxlci5BUElfTElTVCA9IGdldERlbGVnYXRlZEFQSUxpc3QoVGVzdENvbnRyb2xsZXIucHJvdG90eXBlKTtcblxuZGVsZWdhdGVBUEkoVGVzdENvbnRyb2xsZXIucHJvdG90eXBlLCBUZXN0Q29udHJvbGxlci5BUElfTElTVCwgeyB1c2VDdXJyZW50Q3R4QXNIYW5kbGVyOiB0cnVlIH0pO1xuIl19
|