testcafe 2.5.1-rc.1 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +104 -0
- package/lib/api/test-controller/index.js +2 -2
- package/lib/api/test-run-tracker.js +1 -1
- package/lib/browser/connection/gateway/index.js +6 -14
- package/lib/browser/connection/index.js +14 -12
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +3 -2
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +20 -12
- package/lib/browser/provider/index.js +5 -2
- package/lib/browser/provider/plugin-host.js +4 -1
- package/lib/cli/argument-parser/index.js +6 -10
- package/lib/cli/remotes-wizard.js +2 -1
- package/lib/cli/utils/should-move-option-to-end.js +17 -0
- package/lib/client/core/index.js +1 -1
- package/lib/client/core/index.min.js +1 -1
- package/lib/configuration/configuration-base.js +4 -4
- package/lib/configuration/formats.js +9 -5
- package/lib/configuration/interfaces.js +1 -1
- package/lib/configuration/testcafe-configuration.js +10 -4
- package/lib/configuration/types.js +1 -1
- package/lib/custom-client-scripts/client-script.js +2 -2
- package/lib/custom-client-scripts/routing.js +10 -12
- package/lib/errors/runtime/templates.js +2 -2
- package/lib/index.js +5 -28
- package/lib/native-automation/api-base.js +4 -3
- package/lib/native-automation/index.js +30 -22
- package/lib/native-automation/request-hooks/event-factory/request-paused-event-based.js +2 -3
- package/lib/native-automation/request-hooks/event-provider.js +2 -2
- package/lib/native-automation/request-pipeline/index.js +53 -18
- package/lib/native-automation/request-pipeline/safe-api.js +4 -3
- package/lib/native-automation/request-pipeline/special-handlers.js +1 -1
- package/lib/native-automation/session-storage/index.js +13 -9
- package/lib/native-automation/types.js +1 -1
- package/lib/native-automation/utils/convert.js +11 -0
- package/lib/reporter/index.js +11 -3
- package/lib/reporter/plugin-host.js +41 -4
- package/lib/runner/bootstrapper.js +11 -17
- package/lib/runner/index.js +32 -4
- package/lib/runner/task/index.js +1 -33
- package/lib/runner/test-run-controller.js +45 -1
- package/lib/services/compiler/test-run-proxy.js +2 -5
- package/lib/test-run/commands/actions.js +2 -2
- package/lib/test-run/index.js +12 -15
- package/lib/test-run/request/create-request-options.js +2 -2
- package/lib/test-run/session-controller.js +2 -2
- package/lib/testcafe.js +4 -4
- package/lib/utils/get-options/boolean-or-object-option.js +18 -0
- package/lib/utils/get-options/quarantine.js +10 -13
- package/lib/utils/get-options/skip-js-errors.js +12 -16
- package/package.json +5 -4
- package/ts-defs/index.d.ts +1 -1
- package/ts-defs/selectors.d.ts +1 -1
- package/ts-defs/testcafe-scripts.d.ts +1 -1
- package/lib/native-automation/default-setup-options.js +0 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,109 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v2.6.0 (2023-05-11)
|
|
4
|
+
|
|
5
|
+
TestCafe v2.6.0 introduces two enhancements: a new hook that allows users to modify reporter output, and support for JavaScript configuration files with the `.cjs` extension.
|
|
6
|
+
|
|
7
|
+
### New reporter hook
|
|
8
|
+
|
|
9
|
+
The [onBeforeWrite](https://testcafe.io/documentation/404388/guides/advanced-guides/modify-reporter-output) hook allows you to modify the output of a reporter.
|
|
10
|
+
|
|
11
|
+
If you want your test reports to include custom content, you can create a custom reporter from scratch. However, this approach takes time and effort. Use the `onBeforeWrite` hook if you want to make minor changes to the output of an existing reporter.
|
|
12
|
+
|
|
13
|
+
Define an `onBeforeWrite` hook in a JavaScript configuration file. The following hook adds the duration in milliseconds to every test entry in the report:
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
//.testcaferc.js or .testcaferc.cjs
|
|
17
|
+
function onBeforeWriteHook(writeInfo) { // This function will fire every time the reporter calls the "write" method.
|
|
18
|
+
if (writeInfo.initiator === 'reportTestDone') { // The "initiator" property contains the name of the reporter event that triggered the hook.
|
|
19
|
+
const {
|
|
20
|
+
name,
|
|
21
|
+
testRunInfo,
|
|
22
|
+
meta
|
|
23
|
+
} = writeInfo.data || {}; // If you attached this hook to a compatible reporter (such as "spec" or "list"), the hook can process data related to the event.
|
|
24
|
+
const testDuration = testRunInfo.durationMs; // Save the duration of the test.
|
|
25
|
+
writeInfo.formattedText = writeInfo.formattedText + ' (' + testDuration + 'ms)'; // Add test duration to the reporter output.
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
module.exports = { // Attach the hook
|
|
31
|
+
hooks: {
|
|
32
|
+
reporter: {
|
|
33
|
+
onBeforeWrite: {
|
|
34
|
+
'spec': onBeforeWriteHook, // This hook will fire when you use the default "spec" reporter.
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+

|
|
42
|
+
|
|
43
|
+
### CJS support
|
|
44
|
+
|
|
45
|
+
If you run TestCafe v2.6.0 and higher, you can now use a configuration file with the `.cjs` file extension. TestCafe detects the `.testcaferc.cjs` file on startup, alongside its `.js` and `.json` counterparts.
|
|
46
|
+
|
|
47
|
+
[TestCafe configuration files](https://testcafe.io/documentation/402638/reference/configuration-file) **only** support CommonJS syntax. Meanwhile, modern JavaScript tools often default to ESM syntax. If a JavaScript project is of type `module`, Node.js expects the project's `.js` files to contain ESM syntax.
|
|
48
|
+
|
|
49
|
+
Use the `.cjs` configuration file extension to let Node.js know that the file contains CommonJS syntax.
|
|
50
|
+
|
|
51
|
+
Many thanks to the TestCafe contributor Damien Guérin ([@gigaga](https://github.com/DevExpress/testcafe/pull/7614)) for the implementation of this capability.
|
|
52
|
+
|
|
53
|
+
### Bug fixes
|
|
54
|
+
|
|
55
|
+
* If you call the `t.skipJsErrors` method without arguments, TestCafe passes a `false` value to the method. This behavior is inconsistent with similar methods of a greater scope --- `test.skipJsErrors` and `fixture.skipJsErrors` ([#7648](https://github.com/DevExpress/testcafe/issues/7648)).
|
|
56
|
+
* Users cannot disable the "quarantine mode" or "skipJsErrors" settings from the command line ([#7077](https://github.com/DevExpress/testcafe/issues/7077)).
|
|
57
|
+
* TestCafe incorrectly processes exceptions of types other than `Error` ([#7627](https://github.com/DevExpress/testcafe/issues/7627)).
|
|
58
|
+
* TestCafe does not consistently execute the `t.pressKey` action in Mozilla Firefox. Attempts to press the "backspace" key and the "tab" key, among others, may fail. ([#7623](https://github.com/DevExpress/testcafe/pull/7623))
|
|
59
|
+
* When TestCafe runs in Native Automation mode, it incorrectly executes some instances of the `t.request` method. ([#7609](https://github.com/DevExpress/testcafe/issues/7609))
|
|
60
|
+
* The TestCafe proxy incorrectly processes private class properties in client-side scripts, which leads to page load failure ([#7632](https://github.com/DevExpress/testcafe/issues/7632), PR by [@sorin-davidoi](https://github.com/sorin-davidoi)).
|
|
61
|
+
|
|
62
|
+
## v2.5.0 (2023-04-06)
|
|
63
|
+
|
|
64
|
+
TestCafe v2.5.0 introduces three major enhancements:
|
|
65
|
+
* The new `t.report` method passes custom data to the test reporter.
|
|
66
|
+
* The new `--native-automation` flag enables TestCafe to automate all Chromium-based browsers with the native CDP protocol.
|
|
67
|
+
* The new `--esm` flag allows users to import ESM modules in test files.
|
|
68
|
+
|
|
69
|
+
### t.report
|
|
70
|
+
|
|
71
|
+
Include the [t.report()](https://testcafe.io/documentation/404350/reference/test-api/testcontroller/report) method in your test to pass custom data to the reporter.
|
|
72
|
+
|
|
73
|
+
Specify arguments of any type (string, array, Object, etc). Separate arguments with a comma:
|
|
74
|
+
|
|
75
|
+
```js
|
|
76
|
+
await
|
|
77
|
+
t.report(
|
|
78
|
+
'text',
|
|
79
|
+
{'key': 'value'},
|
|
80
|
+
['arrayItem1', 'arrayItem2']
|
|
81
|
+
);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The default `spec` reporter displays custom data after test completion, once for each browser that runs the test.
|
|
85
|
+
|
|
86
|
+

|
|
87
|
+
|
|
88
|
+
### CDP Automation: Now Stable
|
|
89
|
+
|
|
90
|
+
TestCafe v2.2.0 introduced an experimental [proxyless mode](https://testcafe.io/documentation/404237/guides/intermediate-guides/native-automation-mode) that automated Google Chrome with the native CDP protocol.
|
|
91
|
+
|
|
92
|
+
For the v2.5.0 release, the TestCafe team addressed most issues that our users discovered when the capability was "experimental", and gave it a new name --- Native Automation mode.
|
|
93
|
+
|
|
94
|
+
Unlike its predecessor, the Native Automation mode supports **all** Chromium-based browsers, including Microsoft Edge. Enable the `nativeAutomation` option in the [command line interface](https://testcafe.io/documentation/402639/reference/command-line-interface#--native-automation), the [configuration file](https://testcafe.io/documentation/402638/reference/configuration-file#nativeautomation), or the [runner.run()](https://testcafe.io/documentation/402655/reference/testcafe-api/runner/run#nativeautomation) function to try this capability.
|
|
95
|
+
|
|
96
|
+
> [!IMPORTANT]
|
|
97
|
+
> TestCafe v2.5.0 removed the `experimentalProxyless` option from the [createTestCafe](https://testcafe.io/documentation/402662/reference/testcafe-api/global/createtestcafe) function. Use the [runner.run()](https://testcafe.io/documentation/402655/reference/testcafe-api/runner/run#nativeautomation) function to enable Native Automation mode from the TestCafe Test Runner API.
|
|
98
|
+
|
|
99
|
+
### ESM Module Support: Now Stable
|
|
100
|
+
|
|
101
|
+
TestCafe v2.5.0 **drops** the `experimental` prefix from the `--esm` [CLI flag](https://testcafe.io/documentation/402639/reference/command-line-interface#--esm). Enable the `--esm` flag to import modules that do not support CommonJS.
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
testcafe chrome test.js --esm
|
|
105
|
+
```
|
|
106
|
+
|
|
3
107
|
## v2.4.0 (2023-03-06)
|
|
4
108
|
TestCafe v2.4.0 introduces the Visual Selector Debugger. You can now create and debug Selector queries in the browser window.
|
|
5
109
|
|
|
@@ -103,7 +103,7 @@ class TestController {
|
|
|
103
103
|
}
|
|
104
104
|
_validateMultipleWindowCommand(apiMethodName) {
|
|
105
105
|
const { disableMultipleWindows, activeWindowId } = this.testRun;
|
|
106
|
-
if (this.testRun.isNativeAutomation
|
|
106
|
+
if (this.testRun.isNativeAutomation)
|
|
107
107
|
throw new test_run_1.MultipleWindowsModeIsNotSupportedInNativeAutomationModeError(apiMethodName);
|
|
108
108
|
if (disableMultipleWindows)
|
|
109
109
|
throw new test_run_1.MultipleWindowsModeIsDisabledError(apiMethodName);
|
|
@@ -463,4 +463,4 @@ exports.default = TestController;
|
|
|
463
463
|
TestController.API_LIST = (0, delegated_api_1.getDelegatedAPIList)(TestController.prototype);
|
|
464
464
|
(0, delegated_api_1.delegateAPI)(TestController.prototype, TestController.API_LIST, { useCurrentCtxAsHandler: true });
|
|
465
465
|
module.exports = exports.default;
|
|
466
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBT2dCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQTBDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwyREFBOEU7QUFDOUUsd0RBQTBEO0FBQzFELDRGQUFrRTtBQUVsRSxvREFJK0I7QUFFL0IsaUVBQXFFO0FBQ3JFLG1EQUFrRjtBQUNsRiw4RkFBb0U7QUFDcEUsc0RBQW1GO0FBQ25GLGtEQUEyRDtBQUMzRCw4Q0FBb0Q7QUFDcEQsc0VBQTZDO0FBQzdDLG9FQUEyQztBQUUzQyxNQUFNLFlBQVksR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztBQUU1QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFFcEIsTUFBcUIsY0FBYztJQUMvQixZQUFhLE9BQU87O1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBVSxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSwwQ0FBRSxhQUFhLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQs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Q0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFFakIsNENBQTRDO1FBQzVDLElBQUksT0FBTyxLQUFLLE9BQU87WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFFaEIsK0VBQStFO1FBQy9FLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVoQixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLFlBQVksd0JBQVksQ0FBQztJQUNoRCxDQUFDO0NBRUo7QUFqa0JELGlDQWlrQkM7QUFFRCxjQUFjLENBQUMsUUFBUSxHQUFHLElBQUEsbUNBQW1CLEVBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRXhFLElBQUEsMkJBQVcsRUFBQyxjQUFjLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVE9ETzogRml4IGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZFeHByZXNzL3Rlc3RjYWZlL2lzc3Vlcy80MTM5IHRvIGdldCByaWQgb2YgUGlua2llXG5pbXBvcnQgUHJvbWlzZSBmcm9tICdwaW5raWUnO1xuaW1wb3J0IHtcbiAgICBpZGVudGl0eSxcbiAgICBhc3NpZ24sXG4gICAgaXNOaWwgYXMgaXNOdWxsT3JVbmRlZmluZWQsXG4gICAgZmxhdHRlbkRlZXAsXG4gICAgbm9vcCxcbiAgICBjYXN0QXJyYXksXG59IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGdldENhbGxzaXRlRm9yTWV0aG9kIH0gZnJvbSAnLi4vLi4vZXJyb3JzL2dldC1jYWxsc2l0ZSc7XG5pbXBvcnQgQ2xpZW50RnVuY3Rpb25CdWlsZGVyIGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBnZXREZWxlZ2F0ZWRBUElMaXN0LCBkZWxlZ2F0ZUFQSSB9IGZyb20gJy4uLy4uL3V0aWxzL2RlbGVnYXRlZC1hcGknO1xuaW1wb3J0IGFkZFdhcm5pbmcgZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy9hZGQtcmVuZGVyZWQtd2FybmluZyc7XG5pbXBvcnQgeyBnZXREZXByZWNhdGlvbk1lc3NhZ2UsIERFUFJFQ0FURUQgfSBmcm9tICcuLi8uLi9ub3RpZmljYXRpb25zL2RlcHJlY2F0ZWQnO1xuXG5pbXBvcnQge1xuICAgIENsaWNrQ29tbWFuZCxcbiAgICBSaWdodENsaWNrQ29tbWFuZCxcbiAgICBEb3VibGVDbGlja0NvbW1hbmQsXG4gICAgSG92ZXJDb21tYW5kLFxuICAgIERyYWdDb21tYW5kLFxuICAgIERyYWdUb0VsZW1lbnRDb21tYW5kLFxuICAgIFR5cGVUZXh0Q29tbWFuZCxcbiAgICBTZWxlY3RUZXh0Q29tbWFuZCxcbiAgICBTZWxlY3RUZXh0QXJlYUNvbnRlbnRDb21tYW5kLFxuICAgIFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQsXG4gICAgUHJlc3NLZXlDb21tYW5kLFxuICAgIE5hdmlnYXRlVG9Db21tYW5kLFxuICAgIFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLFxuICAgIENsZWFyVXBsb2FkQ29tbWFuZCxcbiAgICBTd2l0Y2hUb0lmcmFtZUNvbW1hbmQsXG4gICAgU3dpdGNoVG9NYWluV2luZG93Q29tbWFuZCxcbiAgICBPcGVuV2luZG93Q29tbWFuZCxcbiAgICBDbG9zZVdpbmRvd0NvbW1hbmQsXG4gICAgR2V0Q3VycmVudFdpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9XaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kLFxuICAgIFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1ByZXZpb3VzV2luZG93Q29tbWFuZCxcbiAgICBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZCxcbiAgICBHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZCxcbiAgICBHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZCxcbiAgICBTZXRUZXN0U3BlZWRDb21tYW5kLFxuICAgIFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQsXG4gICAgU2Nyb2xsQ29tbWFuZCxcbiAgICBTY3JvbGxCeUNvbW1hbmQsXG4gICAgU2Nyb2xsSW50b1ZpZXdDb21tYW5kLFxuICAgIFVzZVJvbGVDb21tYW5kLFxuICAgIERpc3BhdGNoRXZlbnRDb21tYW5kLFxuICAgIEdldENvb2tpZXNDb21tYW5kLFxuICAgIFNldENvb2tpZXNDb21tYW5kLFxuICAgIERlbGV0ZUNvb2tpZXNDb21tYW5kLFxuICAgIFJlcXVlc3RDb21tYW5kLFxuICAgIFNraXBKc0Vycm9yc0NvbW1hbmQsXG4gICAgQWRkUmVxdWVzdEhvb2tzQ29tbWFuZCxcbiAgICBSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kLFxuICAgIFJlcG9ydENvbW1hbmQsXG59IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2FjdGlvbnMnO1xuXG5pbXBvcnQge1xuICAgIFRha2VTY3JlZW5zaG90Q29tbWFuZCxcbiAgICBUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLFxuICAgIFJlc2l6ZVdpbmRvd0NvbW1hbmQsXG4gICAgUmVzaXplV2luZG93VG9GaXREZXZpY2VDb21tYW5kLFxuICAgIE1heGltaXplV2luZG93Q29tbWFuZCxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYnJvd3Nlci1tYW5pcHVsYXRpb24nO1xuXG5pbXBvcnQgeyBXYWl0Q29tbWFuZCwgRGVidWdDb21tYW5kIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb2JzZXJ2YXRpb24nO1xuaW1wb3J0IHsgY3JlYXRlRXhlY3V0aW9uQ29udGV4dCBhcyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi9leGVjdXRpb24tY29udGV4dCc7XG5pbXBvcnQgeyBpc1NlbGVjdG9yIH0gZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy90eXBlcyc7XG5pbXBvcnQgVGVzdFJ1blByb3h5IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbXBpbGVyL3Rlc3QtcnVuLXByb3h5JztcblxuaW1wb3J0IHtcbiAgICBNdWx0aXBsZVdpbmRvd3NNb2RlSXNEaXNhYmxlZEVycm9yLFxuICAgIE11bHRpcGxlV2luZG93c01vZGVJc05vdEF2YWlsYWJsZUluUmVtb3RlQnJvd3NlckVycm9yLFxuICAgIE11bHRpcGxlV2luZG93c01vZGVJc05vdFN1cHBvcnRlZEluTmF0aXZlQXV0b21hdGlvbk1vZGVFcnJvcixcbn0gZnJvbSAnLi4vLi4vZXJyb3JzL3Rlc3QtcnVuJztcblxuaW1wb3J0IHsgQXNzZXJ0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Fzc2VydGlvbic7XG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUlkLCBnZXRDYWxsc2l0ZVN0YWNrRnJhbWVTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9jYWxsc2l0ZSc7XG5pbXBvcnQgUmVFeGVjdXRhYmxlUHJvbWlzZSBmcm9tICcuLi8uLi91dGlscy9yZS1leGVjdXRhYmxlLXByb21pc2UnO1xuaW1wb3J0IHsgc2VuZFJlcXVlc3RUaHJvdWdoQVBJIGFzIHNlbmRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vcmVxdWVzdC9zZW5kJztcbmltcG9ydCB7IFJlcXVlc3RSdW50aW1lRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgQ3VzdG9tQWN0aW9ucyBmcm9tICcuL2N1c3RvbS1hY3Rpb25zJztcbmltcG9ydCBkZWxlZ2F0ZWRBUEkgZnJvbSAnLi9kZWxlZ2F0ZWQtYXBpJztcblxuY29uc3Qgb3JpZ2luYWxUaGVuID0gUHJvbWlzZS5yZXNvbHZlKCkudGhlbjtcblxubGV0IGluRGVidWcgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdENvbnRyb2xsZXIge1xuICAgIGNvbnN0cnVjdG9yICh0ZXN0UnVuKSB7XG4gICAgICAgIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1biAgICAgICAgPSB0ZXN0UnVuO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIHRoaXMud2FybmluZ0xvZyAgICAgPSB0ZXN0UnVuLndhcm5pbmdMb2c7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjdGlvbnMgPSBuZXcgQ3VzdG9tQWN0aW9ucyh0aGlzLCB0ZXN0UnVuPy5vcHRzPy5jdXN0b21BY3Rpb25zKTtcblxuICAgICAgICB0aGlzLl9hZGRUZXN0Q29udHJvbGxlclRvRXhlY3V0aW9uQ2hhaW4oKTtcbiAgICB9XG5cbiAgICBfYWRkVGVzdENvbnRyb2xsZXJUb0V4ZWN1dGlvbkNoYWluICgpIHtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbi5fdGVzdENvbnRyb2xsZXIgPSB0aGlzO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IFRlc3RDYWZlIGV4ZWN1dGVzIGFjdGlvbnMgYW5kIGFzc2VydGlvbnMgYXN5bmNocm9ub3VzbHkgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAvLyBhKSBUaGUgYGF3YWl0YCBrZXl3b3JkIHRoYXQgcHJvY2VlZHMgdGhlIG1ldGhvZCBkZWNsYXJhdGlvbiB0cmlnZ2VycyB0aGUgYHRoZW5gIGZ1bmN0aW9uIG9mIGEgUHJvbWlzZS5cbiAgICAvLyBiKSBUaGUgYWN0aW9uIGlzIGNoYWluZWQgdG8gYW5vdGhlciBgYXdhaXRlZGAgbWV0aG9kLlxuICAgIC8vXG4gICAgLy8gSW4gb3JkZXIgdG8gdHJhY2sgbWlzc2luZyBgYXdhaXRgIHN0YXRlbWVudHMsIFRlc3RDYWZlIGV4cG9zZXMgYSBzcGVjaWFsIFByb21pc2UgdG8gdGhlIHVzZXIuXG4gICAgLy8gV2hlbiBUZXN0Q2FmZSBkZXRlY3RzIGEgbWlzc2luZyBgYXdhaXRgIHN0YXRlbWVudCwgaXQgY29tcGFyZXMgdGhlIG1ldGhvZCdzIGNhbGxzaXRlIHRvIHRoZSBjYWxsIHNpdGUgb2YgdGhlIGV4cG9zZWQgUHJvbWlzZS5cbiAgICAvLyBUaGlzIHdvcmthcm91bmQgaXMgbmVjZXNzYXJ5IGZvciBzaXR1YXRpb25zIGxpa2UgdGhlc2U6XG4gICAgLy9cbiAgICAvLyB2YXIgdDIgPSB0LmNsaWNrKCcjYnRuMScpOyAvLyA8LS0gc3RvcmVzIG5ldyBjYWxsc2l0ZVdpdGhvdXRBd2FpdFxuICAgIC8vIGF3YWl0IHQyOyAgICAgICAgICAgICAgICAgIC8vIDwtLSBjYWxsc2l0ZVdpdGhvdXRBd2FpdCA9IG51bGxcbiAgICAvLyB0LmNsaWNrKCcjYnRuMicpOyAgICAgICAgICAvLyA8LS0gc3RvcmVzIG5ldyBjYWxsc2l0ZVdpdGhvdXRBd2FpdFxuICAgIC8vIGF3YWl0IHQyLmNsaWNrKCcjYnRuMycpOyAgIC8vIDwtLSB3aXRob3V0IGNoZWNrIGl0IHdpbGwgc2V0IGNhbGxzaXRlV2l0aG91dEF3YWl0ID0gbnVsbCwgc28gd2Ugd2lsbCBsb3N0IHRyYWNraW5nXG4gICAgX2NyZWF0ZUV4dGVuZGVkUHJvbWlzZSAocHJvbWlzZSwgY2FsbHNpdGUpIHtcbiAgICAgICAgY29uc3QgZXh0ZW5kZWRQcm9taXNlICAgICA9IHByb21pc2UudGhlbihpZGVudGl0eSk7XG4gICAgICAgIGNvbnN0IG9ic2VydmVkQ2FsbHNpdGVzICAgPSB0aGlzLnRlc3RSdW4ub2JzZXJ2ZWRDYWxsc2l0ZXM7XG4gICAgICAgIGNvbnN0IG1hcmtDYWxsc2l0ZUF3YWl0ZWQgPSAoKSA9PiBvYnNlcnZlZENhbGxzaXRlcy5jYWxsc2l0ZXNXaXRob3V0QXdhaXQuZGVsZXRlKGNhbGxzaXRlKTtcblxuICAgICAgICBleHRlbmRlZFByb21pc2UudGhlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG1hcmtDYWxsc2l0ZUF3YWl0ZWQoKTtcblxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGhlbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRlbGVnYXRlQVBJKGV4dGVuZGVkUHJvbWlzZSwgVGVzdENvbnRyb2xsZXIuQVBJX0xJU1QsIHtcbiAgICAgICAgICAgIGhhbmRsZXI6ICAgICB0aGlzLFxuICAgICAgICAgICAgcHJveHlNZXRob2Q6IG1hcmtDYWxsc2l0ZUF3YWl0ZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBleHRlbmRlZFByb21pc2U7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUNvbW1hbmQgKENtZEN0b3IsIGNtZEFyZ3MsIGNhbGxzaXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENtZEN0b3IoY21kQXJncywgdGhpcy50ZXN0UnVuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBlcnIuY2FsbHNpdGUgPSBjYWxsc2l0ZTtcblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2VucXVldWVUYXNrIChhcGlNZXRob2ROYW1lLCBjcmVhdGVUYXNrRXhlY3V0b3IsIGNhbGxzaXRlKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gY3JlYXRlVGFza0V4ZWN1dG9yKCk7XG5cbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbi50aGVuID0gb3JpZ2luYWxUaGVuO1xuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluICAgICAgPSB0aGlzLmV4ZWN1dGlvbkNoYWluLnRoZW4oZXhlY3V0b3IpO1xuXG4gICAgICAgIHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcy5jYWxsc2l0ZXNXaXRob3V0QXdhaXQuYWRkKGNhbGxzaXRlKTtcblxuICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluID0gdGhpcy5fY3JlYXRlRXh0ZW5kZWRQcm9taXNlKHRoaXMuZXhlY3V0aW9uQ2hhaW4sIGNhbGxzaXRlKTtcblxuICAgICAgICB0aGlzLl9hZGRUZXN0Q29udHJvbGxlclRvRXhlY3V0aW9uQ2hhaW4oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5leGVjdXRpb25DaGFpbjtcbiAgICB9XG5cbiAgICBlbnF1ZXVlQ29tbWFuZCAoQ21kQ3RvciwgY21kQXJncywgdmFsaWRhdGVDb21tYW5kRm4sIGNhbGxzaXRlKSB7XG4gICAgICAgIGNhbGxzaXRlID0gY2FsbHNpdGUgfHwgZ2V0Q2FsbHNpdGVGb3JNZXRob2QoQ21kQ3Rvci5tZXRob2ROYW1lKTtcblxuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoQ21kQ3RvciwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGVDb21tYW5kRm4gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbW1hbmRGbih0aGlzLCBjb21tYW5kLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VucXVldWVUYXNrKGNvbW1hbmQubWV0aG9kTmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGNhbGxzaXRlKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQgKGFwaU1ldGhvZE5hbWUpIHtcbiAgICAgICAgY29uc3QgeyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzLCBhY3RpdmVXaW5kb3dJZCB9ID0gdGhpcy50ZXN0UnVuO1xuXG4gICAgICAgIGlmICh0aGlzLnRlc3RSdW4uaXNOYXRpdmVBdXRvbWF0aW9uKCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgTXVsdGlwbGVXaW5kb3dzTW9kZUlzTm90U3VwcG9ydGVkSW5OYXRpdmVBdXRvbWF0aW9uTW9kZUVycm9yKGFwaU1ldGhvZE5hbWUpO1xuXG4gICAgICAgIGlmIChkaXNhYmxlTXVsdGlwbGVXaW5kb3dzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc0Rpc2FibGVkRXJyb3IoYXBpTWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFhY3RpdmVXaW5kb3dJZClcbiAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RBdmFpbGFibGVJblJlbW90ZUJyb3dzZXJFcnJvcihhcGlNZXRob2ROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRFeGVjdXRpb25Db250ZXh0ICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9leGVjdXRpb25Db250ZXh0KVxuICAgICAgICAgICAgdGhpcy5fZXhlY3V0aW9uQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQodGhpcy50ZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBBUEkgaW1wbGVtZW50YXRpb25cbiAgICAvLyBXZSBuZWVkIGltcGxlbWVudGF0aW9uIG1ldGhvZHMgdG8gb2J0YWluIGNvcnJlY3QgY2FsbHNpdGVzLiBJZiB3ZSB1c2UgcGxhaW4gQVBJXG4gICAgLy8gbWV0aG9kcyBpbiBjaGFpbmVkIHdyYXBwZXJzIHRoZW4gd2Ugd2lsbCBoYXZlIGNhbGxzaXRlIGZvciB0aGUgd3JhcHBlZCBtZXRob2RcbiAgICAvLyBpbiB0aGlzIGZpbGUgaW5zdGVhZCBvZiBjaGFpbmVkIG1ldGhvZCBjYWxsc2l0ZSBpbiB1c2VyIGNvZGUuXG4gICAgX2N0eCRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmN0eDtcbiAgICB9XG5cbiAgICBfY3R4JHNldHRlciAodmFsKSB7XG4gICAgICAgIHRoaXMudGVzdFJ1bi5jdHggPSB2YWw7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5jdHg7XG4gICAgfVxuXG4gICAgX2ZpeHR1cmVDdHgkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5maXh0dXJlQ3R4O1xuICAgIH1cblxuICAgIF9icm93c2VyJGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uYnJvd3NlcjtcbiAgICB9XG5cbiAgICBfY3VzdG9tQWN0aW9ucyRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tQWN0aW9ucyB8fCBuZXcgQ3VzdG9tQWN0aW9ucyh0aGlzLCB0aGlzLnRlc3RSdW4ub3B0cy5jdXN0b21BY3Rpb25zKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERpc3BhdGNoRXZlbnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGV2ZW50TmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERpc3BhdGNoRXZlbnRDb21tYW5kLCB7IHNlbGVjdG9yLCBldmVudE5hbWUsIG9wdGlvbnMsIHJlbGF0ZWRUYXJnZXQ6IG9wdGlvbnMucmVsYXRlZFRhcmdldCB9KTtcbiAgICB9XG5cbiAgICBfcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyAoYXJncywgaXNTZXRDb21tYW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdXJsc0FyZyA9IGNhc3RBcnJheShhcmdzWzFdKTtcbiAgICAgICAgY29uc3QgdXJscyAgICA9IEFycmF5LmlzQXJyYXkodXJsc0FyZykgJiYgdHlwZW9mIHVybHNBcmdbMF0gPT09ICdzdHJpbmcnID8gdXJsc0FyZyA6IFtdO1xuXG4gICAgICAgIGNvbnN0IGNvb2tpZXNBcmcgPSB1cmxzLmxlbmd0aCA/IGFyZ3NbMF0gOiBhcmdzO1xuICAgICAgICBjb25zdCBjb29raWVzICAgID0gW107XG5cbiAgICAgICAgZmxhdHRlbkRlZXAoY2FzdEFycmF5KGNvb2tpZXNBcmcpKS5mb3JFYWNoKGNvb2tpZSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNTZXRDb21tYW5kICYmICFjb29raWUubmFtZSAmJiB0eXBlb2YgY29va2llID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjb29raWUpLmZvckVhY2goKFtuYW1lLCB2YWx1ZV0pID0+IGNvb2tpZXMucHVzaCh7IG5hbWUsIHZhbHVlIH0pKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc1NldENvbW1hbmQgJiYgdHlwZW9mIGNvb2tpZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29va2llcy5wdXNoKHsgbmFtZTogY29va2llIH0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGNvb2tpZXMucHVzaChjb29raWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyB1cmxzLCBjb29raWVzIH07XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoR2V0Q29va2llc0NvbW1hbmQsIHRoaXMuX3ByZXBhcmVDb29raWVBcmd1bWVudHMoYXJncykpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0Q29va2llc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHsgdXJscywgY29va2llcyB9ID0gdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzLCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRDb29raWVzQ29tbWFuZCwgeyBjb29raWVzLCB1cmw6IHVybHNbMF0gfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWxldGVDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRGVsZXRlQ29va2llc0NvbW1hbmQsIHRoaXMuX3ByZXBhcmVDb29raWVBcmd1bWVudHMoYXJncykpO1xuICAgIH1cblxuICAgIF9wcmVwYXJlUmVxdWVzdEFyZ3VtZW50cyAoYmluZE9wdGlvbnMsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgW3VybCwgb3B0aW9uc10gPSB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgPyBbYXJnc1swXS51cmwsIGFyZ3NbMF1dIDogYXJncztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgYmluZE9wdGlvbnMpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24gKGJpbmRPcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlID0gZ2V0Q2FsbHNpdGVGb3JNZXRob2QoUmVxdWVzdENvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sbGVyLnRlc3RSdW4gfHwgY29udHJvbGxlci50ZXN0UnVuIGluc3RhbmNlb2YgVGVzdFJ1blByb3h5KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RSdW50aW1lRXJyb3IoY2FsbHNpdGUsIFJVTlRJTUVfRVJST1JTLnJlcXVlc3RDYW5ub3RSZXNvbHZlVGVzdFJ1bik7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBjbWRBcmdzID0gY29udHJvbGxlci5fcHJlcGFyZVJlcXVlc3RBcmd1bWVudHMoYmluZE9wdGlvbnMsIC4uLmFyZ3MpO1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGNvbnRyb2xsZXIuX2NyZWF0ZUNvbW1hbmQoUmVxdWVzdENvbW1hbmQsIGNtZEFyZ3MsIGNhbGxzaXRlKTtcblxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi5jb21tYW5kLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgdXJsOiBjb21tYW5kLnVybCB8fCBjb21tYW5kLm9wdGlvbnMudXJsIHx8ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IFJlRXhlY3V0YWJsZVByb21pc2UuZnJvbUZuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VuZFJlcXVlc3QoY29udHJvbGxlci50ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUmVxdWVzdENvbW1hbmQucmVzdWx0R2V0dGVycy5mb3JFYWNoKGdldHRlciA9PiB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb21pc2UsIGdldHRlciwge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IFJlRXhlY3V0YWJsZVByb21pc2UuZnJvbUZuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZFJlcXVlc3QoY29udHJvbGxlci50ZXN0UnVuLCBvcHRpb25zLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZVtnZXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfZGVjb3JhdGVSZXF1ZXN0RnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIFJlcXVlc3RDb21tYW5kLmV4dGVuZGVkTWV0aG9kcy5mb3JFYWNoKG1ldGhvZCA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG1ldGhvZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24oeyBtZXRob2QgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXF1ZXN0Q29tbWFuZC5tZXRob2ROYW1lLCAnZ2V0dGVyJyldICgpIHtcbiAgICAgICAgY29uc3QgZm4gPSB0aGlzLl9jcmVhdGVSZXF1ZXN0RnVuY3Rpb24oKTtcblxuICAgICAgICB0aGlzLl9kZWNvcmF0ZVJlcXVlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoQ2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmlnaHRDbGlja0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSaWdodENsaWNrQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERvdWJsZUNsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERvdWJsZUNsaWNrQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEhvdmVyQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKEhvdmVyQ29tbWFuZCwgeyBzZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERyYWdDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGRyYWdPZmZzZXRYLCBkcmFnT2Zmc2V0WSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEcmFnQ29tbWFuZCwgeyBzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ1RvRWxlbWVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZGVzdGluYXRpb25TZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEcmFnVG9FbGVtZW50Q29tbWFuZCwgeyBzZWxlY3RvciwgZGVzdGluYXRpb25TZWxlY3Rvciwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBfZ2V0U2VsZWN0b3JGb3JTY3JvbGwgKGFyZ3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycgfHwgaXNTZWxlY3RvcihhcmdzWzBdKSA/IGFyZ3NbMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChzZWxlY3RvcilcbiAgICAgICAgICAgIGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgLy8gTk9URTogaGVyZSB3ZSB1c2UgZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCBmb3Igb2xkIFNhZmFyaSB2ZXJzaW9uc1xuICAgICAgICAgICAgLy8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IGRvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQgb24gTW9qYXZlIFNhZmFyaSAxMi4xLyBIaWdoIFNpZXJyYSBTYWZhcmkgMTEuMVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cblxuICAgIF9nZXRQb3NpdGlvbiAoYXJncykge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyA/IGFyZ3NbMF0gOiBudWxsO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbilcbiAgICAgICAgICAgIGFyZ3Muc2hpZnQoKTtcblxuICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLl9nZXRQb3NpdGlvbihhcmdzKTtcblxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGxldCB4ICAgICAgID0gdm9pZCAwO1xuICAgICAgICBsZXQgeSAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgbGV0IG9wdGlvbnMgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIFsgcG9zaXRpb24sIG9wdGlvbnMgXSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIFsgeCwgeSwgb3B0aW9ucyBdID0gYXJncztcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxDb21tYW5kLCB7IHNlbGVjdG9yLCB4LCB5LCBwb3NpdGlvbiwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNjcm9sbEJ5Q29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLl9nZXRTZWxlY3RvckZvclNjcm9sbChhcmdzKTtcblxuICAgICAgICBjb25zdCBbYnlYLCBieVksIG9wdGlvbnNdID0gYXJncztcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxCeUNvbW1hbmQsIHsgc2VsZWN0b3IsIGJ5WCwgYnlZLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsSW50b1ZpZXdDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2Nyb2xsSW50b1ZpZXdDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVHlwZVRleHRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoVHlwZVRleHRDb21tYW5kLCB7IHNlbGVjdG9yLCB0ZXh0LCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0VGV4dENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgc3RhcnRQb3MsIGVuZFBvcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZWxlY3RUZXh0Q29tbWFuZCwgeyBzZWxlY3Rvciwgc3RhcnRQb3MsIGVuZFBvcywgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgc3RhcnRMaW5lLCBzdGFydFBvcywgZW5kTGluZSwgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNlbGVjdFRleHRBcmVhQ29udGVudENvbW1hbmQsIHtcbiAgICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgICAgc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRQb3MsXG4gICAgICAgICAgICBlbmRMaW5lLFxuICAgICAgICAgICAgZW5kUG9zLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc3RhcnRTZWxlY3RvciwgZW5kU2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2VsZWN0RWRpdGFibGVDb250ZW50Q29tbWFuZCwge1xuICAgICAgICAgICAgc3RhcnRTZWxlY3RvcixcbiAgICAgICAgICAgIGVuZFNlbGVjdG9yLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShQcmVzc0tleUNvbW1hbmQubWV0aG9kTmFtZSldIChrZXlzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFByZXNzS2V5Q29tbWFuZCwgeyBrZXlzLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoV2FpdENvbW1hbmQubWV0aG9kTmFtZSldICh0aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFdhaXRDb21tYW5kLCB7IHRpbWVvdXQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShOYXZpZ2F0ZVRvQ29tbWFuZC5tZXRob2ROYW1lKV0gKHVybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChOYXZpZ2F0ZVRvQ29tbWFuZCwgeyB1cmwgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZCwgeyBzZWxlY3RvciwgZmlsZVBhdGggfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShDbGVhclVwbG9hZENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbGVhclVwbG9hZENvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlU2NyZWVuc2hvdENvbW1hbmQubWV0aG9kTmFtZSldIChvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0JylcbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IHBhdGg6IG9wdGlvbnMgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUYWtlU2NyZWVuc2hvdENvbW1hbmQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVGFrZUVsZW1lbnRTY3JlZW5zaG90Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRBcmdzID0geyBzZWxlY3RvciB9O1xuXG4gICAgICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICAgICAgICBjb21tYW5kQXJncy5wYXRoICAgID0gYXJnc1swXTtcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLm9wdGlvbnMgPSBhcmdzWzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JylcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLm9wdGlvbnMgPSBhcmdzWzBdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBjb21tYW5kQXJncy5wYXRoID0gYXJnc1swXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLCBjb21tYW5kQXJncyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXNpemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dDb21tYW5kLCB7IHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQubWV0aG9kTmFtZSldIChkZXZpY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUmVzaXplV2luZG93VG9GaXREZXZpY2VDb21tYW5kLCB7IGRldmljZSwgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE1heGltaXplV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChNYXhpbWl6ZVdpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9JZnJhbWVDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9JZnJhbWVDb21tYW5kLCB7IHNlbGVjdG9yIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9NYWluV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE9wZW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAodXJsKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKE9wZW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE9wZW5XaW5kb3dDb21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKHdpbmRvdykge1xuICAgICAgICBjb25zdCB3aW5kb3dJZCAgICAgID0gd2luZG93Py5pZCB8fCBudWxsO1xuXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKENsb3NlV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbG9zZVdpbmRvd0NvbW1hbmQsIHsgd2luZG93SWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChHZXRDdXJyZW50V2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aW5kb3dTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvbW1hbmQ7XG4gICAgICAgIGxldCBhcmdzO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZDtcblxuICAgICAgICAgICAgYXJncyA9IHsgY2hlY2tXaW5kb3c6IHdpbmRvd1NlbGVjdG9yIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb21tYW5kID0gU3dpdGNoVG9XaW5kb3dDb21tYW5kO1xuXG4gICAgICAgICAgICBhcmdzID0geyB3aW5kb3dJZDogd2luZG93U2VsZWN0b3I/LmlkIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChjb21tYW5kLCBhcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZU11bHRpcGxlV2luZG93Q29tbWFuZChTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvUHJldmlvdXNXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBfZXZhbCQgKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQob3B0aW9ucykpXG4gICAgICAgICAgICBvcHRpb25zID0gYXNzaWduKHt9LCBvcHRpb25zLCB7IGJvdW5kVGVzdFJ1bjogdGhpcyB9KTtcblxuICAgICAgICBjb25zdCBidWlsZGVyICA9IG5ldyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIoZm4sIG9wdGlvbnMsIHsgaW5zdGFudGlhdGlvbjogJ2V2YWwnLCBleGVjdXRpb246ICdldmFsJyB9KTtcbiAgICAgICAgY29uc3QgY2xpZW50Rm4gPSBidWlsZGVyLmdldEZ1bmN0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIGNsaWVudEZuKCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZC5tZXRob2ROYW1lKV0gKGZuLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLCB7XG4gICAgICAgICAgICBkaWFsb2dIYW5kbGVyOiB7IGZuLCBvcHRpb25zIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKTtcbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLCB7fSwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgIH1cblxuICAgIGNoZWNrRm9yRXhjZXNzaXZlQXdhaXRzIChjaGVja2VkQ2FsbHNpdGUsIHsgYWN0aW9uSWQgfSkge1xuICAgICAgICBjb25zdCBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzID0gdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLnNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXM7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlSWQgICAgICAgICAgICAgICAgPSBnZXRDYWxsc2l0ZUlkKGNoZWNrZWRDYWxsc2l0ZSk7XG5cbiAgICAgICAgLy8gTk9URTogSWYgdGhlcmUgYXJlIHVuYXNzZXJ0ZWQgY2FsbHNpdGVzLCB3ZSBzaG91bGQgYWRkIGFsbCBvZiB0aGVtIHRvIGF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLlxuICAgICAgICAvLyBUaGUgd2FybmluZ3MgdGhlbXNlbHZlcyBhcmUgcmFpc2VkIGFmdGVyIHRoZSB0ZXN0IHJ1biBpbiB3cmFwLXRlc3QtZnVuY3Rpb25cbiAgICAgICAgaWYgKHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0gJiYgIXNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2hlY2tlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eUNhbGxzaXRlIG9mIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF0uY2FsbHNpdGVzKVxuICAgICAgICAgICAgICAgIHRoaXMudGVzdFJ1bi5vYnNlcnZlZENhbGxzaXRlcy5hd2FpdGVkU25hcHNob3RXYXJuaW5ncy5zZXQoZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nKHByb3BlcnR5Q2FsbHNpdGUpLCB7IGNhbGxzaXRlOiBwcm9wZXJ0eUNhbGxzaXRlLCBhY3Rpb25JZCB9KTtcblxuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXNbY2FsbHNpdGVJZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSA9IHsgY2FsbHNpdGVzOiBbXSwgY2hlY2tlZDogdHJ1ZSB9O1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKV0gKGFjdHVhbCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEFzc2VydGlvbkNvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24oYWN0dWFsLCB0aGlzLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEZWJ1Z0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgLy8gTk9URTogZG8gbm90IG5lZWQgdG8gZW5xdWV1ZSB0aGUgRGVidWcgY29tbWFuZCBpZiB3ZSBhcmUgaW4gZGVidWdnaW5nIG1vZGUuXG4gICAgICAgIC8vIFRoZSBEZWJ1ZyBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgYnkgQ0RQLlxuICAgICAgICAvLyBBbHNvLCB3ZSBhcmUgZm9yY2VkIHRvIGFkZCBlbXB0eSBmdW5jdGlvbiB0byB0aGUgZXhlY3V0aW9uIGNoYWluIHRvIHByZXNlcnZlIGl0LlxuICAgICAgICByZXR1cm4gdGhpcy5pc0NvbXBpbGVyU2VydmljZU1vZGUoKSA/IHRoaXMuX2VucXVldWVUYXNrKERlYnVnQ29tbWFuZC5tZXRob2ROYW1lLCBub29wKSA6IHRoaXMuZW5xdWV1ZUNvbW1hbmQoRGVidWdDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldFRlc3RTcGVlZENvbW1hbmQubWV0aG9kTmFtZSldIChzcGVlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZXRUZXN0U3BlZWRDb21tYW5kLCB7IHNwZWVkIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZC5tZXRob2ROYW1lKV0gKGR1cmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldFBhZ2VMb2FkVGltZW91dENvbW1hbmQsIHsgZHVyYXRpb24gfSwgKHRlc3RDb250cm9sbGVyLCBjb21tYW5kKSA9PiB7XG4gICAgICAgICAgICBhZGRXYXJuaW5nKHRlc3RDb250cm9sbGVyLndhcm5pbmdMb2csIHsgbWVzc2FnZTogZ2V0RGVwcmVjYXRpb25NZXNzYWdlKERFUFJFQ0FURUQuc2V0UGFnZUxvYWRUaW1lb3V0KSwgYWN0aW9uSWQ6IGNvbW1hbmQuYWN0aW9uSWQgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoVXNlUm9sZUNvbW1hbmQubWV0aG9kTmFtZSldIChyb2xlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFVzZVJvbGVDb21tYW5kLCB7IHJvbGUgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTa2lwSnNFcnJvcnNDb21tYW5kLm1ldGhvZE5hbWUpXSAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTa2lwSnNFcnJvcnNDb21tYW5kLCB7IG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShBZGRSZXF1ZXN0SG9va3NDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uaG9va3MpIHtcbiAgICAgICAgaG9va3MgPSBmbGF0dGVuRGVlcChob29rcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoQWRkUmVxdWVzdEhvb2tzQ29tbWFuZCwgeyBob29rcyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlbW92ZVJlcXVlc3RIb29rc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5ob29rcykge1xuICAgICAgICBob29rcyA9IGZsYXR0ZW5EZWVwKGhvb2tzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZW1vdmVSZXF1ZXN0SG9va3NDb21tYW5kLCB7IGhvb2tzIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmVwb3J0Q29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUmVwb3J0Q29tbWFuZCwgeyBhcmdzIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBlbmFibGVEZWJ1Z0Zvck5vbkRlYnVnQ29tbWFuZHMgKCkge1xuICAgICAgICBpbkRlYnVnID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKSB7XG4gICAgICAgIGluRGVidWcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBzaG91bGRTdG9wIChjb21tYW5kKSB7XG4gICAgICAgIC8vIE5PVEU6IHNob3VsZCBuZXZlciBzdG9wIGluIG5vdCBjb21wbGlsZXIgZGVidWdnaW5nIG1vZGVcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIE5PVEU6IHNob3VsZCBhbHdheXMgc3RvcCBvbiBEZWJ1ZyBjb21tYW5kXG4gICAgICAgIGlmIChjb21tYW5kID09PSAnZGVidWcnKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gTk9URTogc2hvdWxkIHN0b3Agb24gb3RoZXIgYWN0aW9ucyBhZnRlciB0aGUgYE5leHQgQWN0aW9uYCBidXR0b24gaXMgY2xpY2tlZFxuICAgICAgICBpZiAoaW5EZWJ1Zykge1xuICAgICAgICAgICAgaW5EZWJ1ZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc0NvbXBpbGVyU2VydmljZU1vZGUgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuIGluc3RhbmNlb2YgVGVzdFJ1blByb3h5O1xuICAgIH1cblxufVxuXG5UZXN0Q29udHJvbGxlci5BUElfTElTVCA9IGdldERlbGVnYXRlZEFQSUxpc3QoVGVzdENvbnRyb2xsZXIucHJvdG90eXBlKTtcblxuZGVsZWdhdGVBUEkoVGVzdENvbnRyb2xsZXIucHJvdG90eXBlLCBUZXN0Q29udHJvbGxlci5BUElfTElTVCwgeyB1c2VDdXJyZW50Q3R4QXNIYW5kbGVyOiB0cnVlIH0pO1xuIl19
|
|
466
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9GQUFvRjtBQUNwRixvREFBNkI7QUFDN0IsbUNBT2dCO0FBRWhCLDREQUFpRTtBQUNqRSw2R0FBbUY7QUFDbkYsNERBQW9DO0FBQ3BDLDZEQUE2RTtBQUM3RSxvR0FBa0U7QUFDbEUsK0RBQW1GO0FBRW5GLDZEQTBDeUM7QUFFekMsdUZBTXNEO0FBRXRELHFFQUFnRjtBQUNoRiwyREFBOEU7QUFDOUUsd0RBQTBEO0FBQzFELDRGQUFrRTtBQUVsRSxvREFJK0I7QUFFL0IsaUVBQXFFO0FBQ3JFLG1EQUFrRjtBQUNsRiw4RkFBb0U7QUFDcEUsc0RBQW1GO0FBQ25GLGtEQUEyRDtBQUMzRCw4Q0FBb0Q7QUFDcEQsc0VBQTZDO0FBQzdDLG9FQUEyQztBQUUzQyxNQUFNLFlBQVksR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztBQUU1QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFFcEIsTUFBcUIsY0FBYztJQUMvQixZQUFhLE9BQU87O1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLE9BQU8sR0FBVSxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxnQkFBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSwwQ0FBRSxhQUFhLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQs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SUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDO1FBRWpCLDRDQUE0QztRQUM1QyxJQUFJLE9BQU8sS0FBSyxPQUFPO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBRWhCLCtFQUErRTtRQUMvRSxJQUFJLE9BQU8sRUFBRTtZQUNULE9BQU8sR0FBRyxLQUFLLENBQUM7WUFFaEIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxZQUFZLHdCQUFZLENBQUM7SUFDaEQsQ0FBQztDQUVKO0FBamtCRCxpQ0Fpa0JDO0FBRUQsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFBLG1DQUFtQixFQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV4RSxJQUFBLDJCQUFXLEVBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IEZpeCBodHRwczovL2dpdGh1Yi5jb20vRGV2RXhwcmVzcy90ZXN0Y2FmZS9pc3N1ZXMvNDEzOSB0byBnZXQgcmlkIG9mIFBpbmtpZVxuaW1wb3J0IFByb21pc2UgZnJvbSAncGlua2llJztcbmltcG9ydCB7XG4gICAgaWRlbnRpdHksXG4gICAgYXNzaWduLFxuICAgIGlzTmlsIGFzIGlzTnVsbE9yVW5kZWZpbmVkLFxuICAgIGZsYXR0ZW5EZWVwLFxuICAgIG5vb3AsXG4gICAgY2FzdEFycmF5LFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBnZXRDYWxsc2l0ZUZvck1ldGhvZCB9IGZyb20gJy4uLy4uL2Vycm9ycy9nZXQtY2FsbHNpdGUnO1xuaW1wb3J0IENsaWVudEZ1bmN0aW9uQnVpbGRlciBmcm9tICcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL2NsaWVudC1mdW5jdGlvbi1idWlsZGVyJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IHsgZ2V0RGVsZWdhdGVkQVBJTGlzdCwgZGVsZWdhdGVBUEkgfSBmcm9tICcuLi8uLi91dGlscy9kZWxlZ2F0ZWQtYXBpJztcbmltcG9ydCBhZGRXYXJuaW5nIGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbnMvYWRkLXJlbmRlcmVkLXdhcm5pbmcnO1xuaW1wb3J0IHsgZ2V0RGVwcmVjYXRpb25NZXNzYWdlLCBERVBSRUNBVEVEIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9ucy9kZXByZWNhdGVkJztcblxuaW1wb3J0IHtcbiAgICBDbGlja0NvbW1hbmQsXG4gICAgUmlnaHRDbGlja0NvbW1hbmQsXG4gICAgRG91YmxlQ2xpY2tDb21tYW5kLFxuICAgIEhvdmVyQ29tbWFuZCxcbiAgICBEcmFnQ29tbWFuZCxcbiAgICBEcmFnVG9FbGVtZW50Q29tbWFuZCxcbiAgICBUeXBlVGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dENvbW1hbmQsXG4gICAgU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCxcbiAgICBTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLFxuICAgIFByZXNzS2V5Q29tbWFuZCxcbiAgICBOYXZpZ2F0ZVRvQ29tbWFuZCxcbiAgICBTZXRGaWxlc1RvVXBsb2FkQ29tbWFuZCxcbiAgICBDbGVhclVwbG9hZENvbW1hbmQsXG4gICAgU3dpdGNoVG9JZnJhbWVDb21tYW5kLFxuICAgIFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQsXG4gICAgT3BlbldpbmRvd0NvbW1hbmQsXG4gICAgQ2xvc2VXaW5kb3dDb21tYW5kLFxuICAgIEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLFxuICAgIFN3aXRjaFRvV2luZG93Q29tbWFuZCxcbiAgICBTd2l0Y2hUb1dpbmRvd0J5UHJlZGljYXRlQ29tbWFuZCxcbiAgICBTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQsXG4gICAgU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQsXG4gICAgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsXG4gICAgR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQsXG4gICAgR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQsXG4gICAgU2V0VGVzdFNwZWVkQ29tbWFuZCxcbiAgICBTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLFxuICAgIFNjcm9sbENvbW1hbmQsXG4gICAgU2Nyb2xsQnlDb21tYW5kLFxuICAgIFNjcm9sbEludG9WaWV3Q29tbWFuZCxcbiAgICBVc2VSb2xlQ29tbWFuZCxcbiAgICBEaXNwYXRjaEV2ZW50Q29tbWFuZCxcbiAgICBHZXRDb29raWVzQ29tbWFuZCxcbiAgICBTZXRDb29raWVzQ29tbWFuZCxcbiAgICBEZWxldGVDb29raWVzQ29tbWFuZCxcbiAgICBSZXF1ZXN0Q29tbWFuZCxcbiAgICBTa2lwSnNFcnJvcnNDb21tYW5kLFxuICAgIEFkZFJlcXVlc3RIb29rc0NvbW1hbmQsXG4gICAgUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZCxcbiAgICBSZXBvcnRDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHtcbiAgICBUYWtlU2NyZWVuc2hvdENvbW1hbmQsXG4gICAgVGFrZUVsZW1lbnRTY3JlZW5zaG90Q29tbWFuZCxcbiAgICBSZXNpemVXaW5kb3dDb21tYW5kLFxuICAgIFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZCxcbiAgICBNYXhpbWl6ZVdpbmRvd0NvbW1hbmQsXG59IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Jyb3dzZXItbWFuaXB1bGF0aW9uJztcblxuaW1wb3J0IHsgV2FpdENvbW1hbmQsIERlYnVnQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcbmltcG9ydCB7IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQgYXMgY3JlYXRlQ29udGV4dCB9IGZyb20gJy4vZXhlY3V0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNTZWxlY3RvciB9IGZyb20gJy4uLy4uL2NsaWVudC1mdW5jdGlvbnMvdHlwZXMnO1xuaW1wb3J0IFRlc3RSdW5Qcm94eSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21waWxlci90ZXN0LXJ1bi1wcm94eSc7XG5cbmltcG9ydCB7XG4gICAgTXVsdGlwbGVXaW5kb3dzTW9kZUlzRGlzYWJsZWRFcnJvcixcbiAgICBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RBdmFpbGFibGVJblJlbW90ZUJyb3dzZXJFcnJvcixcbiAgICBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RTdXBwb3J0ZWRJbk5hdGl2ZUF1dG9tYXRpb25Nb2RlRXJyb3IsXG59IGZyb20gJy4uLy4uL2Vycm9ycy90ZXN0LXJ1bic7XG5cbmltcG9ydCB7IEFzc2VydGlvbkNvbW1hbmQgfSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hc3NlcnRpb24nO1xuaW1wb3J0IHsgZ2V0Q2FsbHNpdGVJZCwgZ2V0Q2FsbHNpdGVTdGFja0ZyYW1lU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2FsbHNpdGUnO1xuaW1wb3J0IFJlRXhlY3V0YWJsZVByb21pc2UgZnJvbSAnLi4vLi4vdXRpbHMvcmUtZXhlY3V0YWJsZS1wcm9taXNlJztcbmltcG9ydCB7IHNlbmRSZXF1ZXN0VGhyb3VnaEFQSSBhcyBzZW5kUmVxdWVzdCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL3JlcXVlc3Qvc2VuZCc7XG5pbXBvcnQgeyBSZXF1ZXN0UnVudGltZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi8uLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IEN1c3RvbUFjdGlvbnMgZnJvbSAnLi9jdXN0b20tYWN0aW9ucyc7XG5pbXBvcnQgZGVsZWdhdGVkQVBJIGZyb20gJy4vZGVsZWdhdGVkLWFwaSc7XG5cbmNvbnN0IG9yaWdpbmFsVGhlbiA9IFByb21pc2UucmVzb2x2ZSgpLnRoZW47XG5cbmxldCBpbkRlYnVnID0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvciAodGVzdFJ1bikge1xuICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gbnVsbDtcblxuICAgICAgICB0aGlzLnRlc3RSdW4gICAgICAgID0gdGVzdFJ1bjtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgID0gdGVzdFJ1bi53YXJuaW5nTG9nO1xuICAgICAgICB0aGlzLl9jdXN0b21BY3Rpb25zID0gbmV3IEN1c3RvbUFjdGlvbnModGhpcywgdGVzdFJ1bj8ub3B0cz8uY3VzdG9tQWN0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fYWRkVGVzdENvbnRyb2xsZXJUb0V4ZWN1dGlvbkNoYWluKCk7XG4gICAgfVxuXG4gICAgX2FkZFRlc3RDb250cm9sbGVyVG9FeGVjdXRpb25DaGFpbiAoKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4uX3Rlc3RDb250cm9sbGVyID0gdGhpcztcbiAgICB9XG5cbiAgICAvLyBOT1RFOiBUZXN0Q2FmZSBleGVjdXRlcyBhY3Rpb25zIGFuZCBhc3NlcnRpb25zIGFzeW5jaHJvbm91c2x5IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAgLy8gYSkgVGhlIGBhd2FpdGAga2V5d29yZCB0aGF0IHByb2NlZWRzIHRoZSBtZXRob2QgZGVjbGFyYXRpb24gdHJpZ2dlcnMgdGhlIGB0aGVuYCBmdW5jdGlvbiBvZiBhIFByb21pc2UuXG4gICAgLy8gYikgVGhlIGFjdGlvbiBpcyBjaGFpbmVkIHRvIGFub3RoZXIgYGF3YWl0ZWRgIG1ldGhvZC5cbiAgICAvL1xuICAgIC8vIEluIG9yZGVyIHRvIHRyYWNrIG1pc3NpbmcgYGF3YWl0YCBzdGF0ZW1lbnRzLCBUZXN0Q2FmZSBleHBvc2VzIGEgc3BlY2lhbCBQcm9taXNlIHRvIHRoZSB1c2VyLlxuICAgIC8vIFdoZW4gVGVzdENhZmUgZGV0ZWN0cyBhIG1pc3NpbmcgYGF3YWl0YCBzdGF0ZW1lbnQsIGl0IGNvbXBhcmVzIHRoZSBtZXRob2QncyBjYWxsc2l0ZSB0byB0aGUgY2FsbCBzaXRlIG9mIHRoZSBleHBvc2VkIFByb21pc2UuXG4gICAgLy8gVGhpcyB3b3JrYXJvdW5kIGlzIG5lY2Vzc2FyeSBmb3Igc2l0dWF0aW9ucyBsaWtlIHRoZXNlOlxuICAgIC8vXG4gICAgLy8gdmFyIHQyID0gdC5jbGljaygnI2J0bjEnKTsgLy8gPC0tIHN0b3JlcyBuZXcgY2FsbHNpdGVXaXRob3V0QXdhaXRcbiAgICAvLyBhd2FpdCB0MjsgICAgICAgICAgICAgICAgICAvLyA8LS0gY2FsbHNpdGVXaXRob3V0QXdhaXQgPSBudWxsXG4gICAgLy8gdC5jbGljaygnI2J0bjInKTsgICAgICAgICAgLy8gPC0tIHN0b3JlcyBuZXcgY2FsbHNpdGVXaXRob3V0QXdhaXRcbiAgICAvLyBhd2FpdCB0Mi5jbGljaygnI2J0bjMnKTsgICAvLyA8LS0gd2l0aG91dCBjaGVjayBpdCB3aWxsIHNldCBjYWxsc2l0ZVdpdGhvdXRBd2FpdCA9IG51bGwsIHNvIHdlIHdpbGwgbG9zdCB0cmFja2luZ1xuICAgIF9jcmVhdGVFeHRlbmRlZFByb21pc2UgKHByb21pc2UsIGNhbGxzaXRlKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuZGVkUHJvbWlzZSAgICAgPSBwcm9taXNlLnRoZW4oaWRlbnRpdHkpO1xuICAgICAgICBjb25zdCBvYnNlcnZlZENhbGxzaXRlcyAgID0gdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzO1xuICAgICAgICBjb25zdCBtYXJrQ2FsbHNpdGVBd2FpdGVkID0gKCkgPT4gb2JzZXJ2ZWRDYWxsc2l0ZXMuY2FsbHNpdGVzV2l0aG91dEF3YWl0LmRlbGV0ZShjYWxsc2l0ZSk7XG5cbiAgICAgICAgZXh0ZW5kZWRQcm9taXNlLnRoZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBtYXJrQ2FsbHNpdGVBd2FpdGVkKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRoZW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcblxuICAgICAgICBkZWxlZ2F0ZUFQSShleHRlbmRlZFByb21pc2UsIFRlc3RDb250cm9sbGVyLkFQSV9MSVNULCB7XG4gICAgICAgICAgICBoYW5kbGVyOiAgICAgdGhpcyxcbiAgICAgICAgICAgIHByb3h5TWV0aG9kOiBtYXJrQ2FsbHNpdGVBd2FpdGVkLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kZWRQcm9taXNlO1xuICAgIH1cblxuICAgIF9jcmVhdGVDb21tYW5kIChDbWRDdG9yLCBjbWRBcmdzLCBjYWxsc2l0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDbWRDdG9yKGNtZEFyZ3MsIHRoaXMudGVzdFJ1bik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZXJyLmNhbGxzaXRlID0gY2FsbHNpdGU7XG5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9lbnF1ZXVlVGFzayAoYXBpTWV0aG9kTmFtZSwgY3JlYXRlVGFza0V4ZWN1dG9yLCBjYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCBleGVjdXRvciA9IGNyZWF0ZVRhc2tFeGVjdXRvcigpO1xuXG4gICAgICAgIHRoaXMuZXhlY3V0aW9uQ2hhaW4udGhlbiA9IG9yaWdpbmFsVGhlbjtcbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiAgICAgID0gdGhpcy5leGVjdXRpb25DaGFpbi50aGVuKGV4ZWN1dG9yKTtcblxuICAgICAgICB0aGlzLnRlc3RSdW4ub2JzZXJ2ZWRDYWxsc2l0ZXMuY2FsbHNpdGVzV2l0aG91dEF3YWl0LmFkZChjYWxsc2l0ZSk7XG5cbiAgICAgICAgdGhpcy5leGVjdXRpb25DaGFpbiA9IHRoaXMuX2NyZWF0ZUV4dGVuZGVkUHJvbWlzZSh0aGlzLmV4ZWN1dGlvbkNoYWluLCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgdGhpcy5fYWRkVGVzdENvbnRyb2xsZXJUb0V4ZWN1dGlvbkNoYWluKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uQ2hhaW47XG4gICAgfVxuXG4gICAgZW5xdWV1ZUNvbW1hbmQgKENtZEN0b3IsIGNtZEFyZ3MsIHZhbGlkYXRlQ29tbWFuZEZuLCBjYWxsc2l0ZSkge1xuICAgICAgICBjYWxsc2l0ZSA9IGNhbGxzaXRlIHx8IGdldENhbGxzaXRlRm9yTWV0aG9kKENtZEN0b3IubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgY29uc3QgY29tbWFuZCAgPSB0aGlzLl9jcmVhdGVDb21tYW5kKENtZEN0b3IsIGNtZEFyZ3MsIGNhbGxzaXRlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRlQ29tbWFuZEZuID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdmFsaWRhdGVDb21tYW5kRm4odGhpcywgY29tbWFuZCwgY2FsbHNpdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9lbnF1ZXVlVGFzayhjb21tYW5kLm1ldGhvZE5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGlvbkNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kIChhcGlNZXRob2ROYW1lKSB7XG4gICAgICAgIGNvbnN0IHsgZGlzYWJsZU11bHRpcGxlV2luZG93cywgYWN0aXZlV2luZG93SWQgfSA9IHRoaXMudGVzdFJ1bjtcblxuICAgICAgICBpZiAodGhpcy50ZXN0UnVuLmlzTmF0aXZlQXV0b21hdGlvbilcbiAgICAgICAgICAgIHRocm93IG5ldyBNdWx0aXBsZVdpbmRvd3NNb2RlSXNOb3RTdXBwb3J0ZWRJbk5hdGl2ZUF1dG9tYXRpb25Nb2RlRXJyb3IoYXBpTWV0aG9kTmFtZSk7XG5cbiAgICAgICAgaWYgKGRpc2FibGVNdWx0aXBsZVdpbmRvd3MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgTXVsdGlwbGVXaW5kb3dzTW9kZUlzRGlzYWJsZWRFcnJvcihhcGlNZXRob2ROYW1lKTtcblxuICAgICAgICBpZiAoIWFjdGl2ZVdpbmRvd0lkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IE11bHRpcGxlV2luZG93c01vZGVJc05vdEF2YWlsYWJsZUluUmVtb3RlQnJvd3NlckVycm9yKGFwaU1ldGhvZE5hbWUpO1xuICAgIH1cblxuICAgIGdldEV4ZWN1dGlvbkNvbnRleHQgKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2V4ZWN1dGlvbkNvbnRleHQpXG4gICAgICAgICAgICB0aGlzLl9leGVjdXRpb25Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh0aGlzLnRlc3RSdW4pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25Db250ZXh0O1xuICAgIH1cblxuICAgIC8vIEFQSSBpbXBsZW1lbnRhdGlvblxuICAgIC8vIFdlIG5lZWQgaW1wbGVtZW50YXRpb24gbWV0aG9kcyB0byBvYnRhaW4gY29ycmVjdCBjYWxsc2l0ZXMuIElmIHdlIHVzZSBwbGFpbiBBUElcbiAgICAvLyBtZXRob2RzIGluIGNoYWluZWQgd3JhcHBlcnMgdGhlbiB3ZSB3aWxsIGhhdmUgY2FsbHNpdGUgZm9yIHRoZSB3cmFwcGVkIG1ldGhvZFxuICAgIC8vIGluIHRoaXMgZmlsZSBpbnN0ZWFkIG9mIGNoYWluZWQgbWV0aG9kIGNhbGxzaXRlIGluIHVzZXIgY29kZS5cbiAgICBfY3R4JGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4uY3R4O1xuICAgIH1cblxuICAgIF9jdHgkc2V0dGVyICh2YWwpIHtcbiAgICAgICAgdGhpcy50ZXN0UnVuLmN0eCA9IHZhbDtcblxuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmN0eDtcbiAgICB9XG5cbiAgICBfZml4dHVyZUN0eCRnZXR0ZXIgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0UnVuLmZpeHR1cmVDdHg7XG4gICAgfVxuXG4gICAgX2Jyb3dzZXIkZ2V0dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5icm93c2VyO1xuICAgIH1cblxuICAgIF9jdXN0b21BY3Rpb25zJGdldHRlciAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21BY3Rpb25zIHx8IG5ldyBDdXN0b21BY3Rpb25zKHRoaXMsIHRoaXMudGVzdFJ1bi5vcHRzLmN1c3RvbUFjdGlvbnMpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRGlzcGF0Y2hFdmVudENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZXZlbnROYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRGlzcGF0Y2hFdmVudENvbW1hbmQsIHsgc2VsZWN0b3IsIGV2ZW50TmFtZSwgb3B0aW9ucywgcmVsYXRlZFRhcmdldDogb3B0aW9ucy5yZWxhdGVkVGFyZ2V0IH0pO1xuICAgIH1cblxuICAgIF9wcmVwYXJlQ29va2llQXJndW1lbnRzIChhcmdzLCBpc1NldENvbW1hbmQgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB1cmxzQXJnID0gY2FzdEFycmF5KGFyZ3NbMV0pO1xuICAgICAgICBjb25zdCB1cmxzICAgID0gQXJyYXkuaXNBcnJheSh1cmxzQXJnKSAmJiB0eXBlb2YgdXJsc0FyZ1swXSA9PT0gJ3N0cmluZycgPyB1cmxzQXJnIDogW107XG5cbiAgICAgICAgY29uc3QgY29va2llc0FyZyA9IHVybHMubGVuZ3RoID8gYXJnc1swXSA6IGFyZ3M7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgICAgPSBbXTtcblxuICAgICAgICBmbGF0dGVuRGVlcChjYXN0QXJyYXkoY29va2llc0FyZykpLmZvckVhY2goY29va2llID0+IHtcbiAgICAgICAgICAgIGlmIChpc1NldENvbW1hbmQgJiYgIWNvb2tpZS5uYW1lICYmIHR5cGVvZiBjb29raWUgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNvb2tpZSkuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4gY29va2llcy5wdXNoKHsgbmFtZSwgdmFsdWUgfSkpO1xuICAgICAgICAgICAgZWxzZSBpZiAoIWlzU2V0Q29tbWFuZCAmJiB0eXBlb2YgY29va2llID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBjb29raWVzLnB1c2goeyBuYW1lOiBjb29raWUgfSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY29va2llcy5wdXNoKGNvb2tpZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHVybHMsIGNvb2tpZXMgfTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEdldENvb2tpZXNDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChHZXRDb29raWVzQ29tbWFuZCwgdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzKSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRDb29raWVzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgeyB1cmxzLCBjb29raWVzIH0gPSB0aGlzLl9wcmVwYXJlQ29va2llQXJndW1lbnRzKGFyZ3MsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldENvb2tpZXNDb21tYW5kLCB7IGNvb2tpZXMsIHVybDogdXJsc1swXSB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERlbGV0ZUNvb2tpZXNDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChEZWxldGVDb29raWVzQ29tbWFuZCwgdGhpcy5fcHJlcGFyZUNvb2tpZUFyZ3VtZW50cyhhcmdzKSk7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVSZXF1ZXN0QXJndW1lbnRzIChiaW5kT3B0aW9ucywgLi4uYXJncykge1xuICAgICAgICBjb25zdCBbdXJsLCBvcHRpb25zXSA9IHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyA/IFthcmdzWzBdLnVybCwgYXJnc1swXV0gOiBhcmdzO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCBiaW5kT3B0aW9ucyksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbiAoYmluZE9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcztcbiAgICAgICAgY29uc3QgY2FsbHNpdGUgPSBnZXRDYWxsc2l0ZUZvck1ldGhvZChSZXF1ZXN0Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICBpZiAoIWNvbnRyb2xsZXIudGVzdFJ1biB8fCBjb250cm9sbGVyLnRlc3RSdW4gaW5zdGFuY2VvZiBUZXN0UnVuUHJveHkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdFJ1bnRpbWVFcnJvcihjYWxsc2l0ZSwgUlVOVElNRV9FUlJPUlMucmVxdWVzdENhbm5vdFJlc29sdmVUZXN0UnVuKTtcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGNtZEFyZ3MgPSBjb250cm9sbGVyLl9wcmVwYXJlUmVxdWVzdEFyZ3VtZW50cyhiaW5kT3B0aW9ucywgLi4uYXJncyk7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kID0gY29udHJvbGxlci5fY3JlYXRlQ29tbWFuZChSZXF1ZXN0Q29tbWFuZCwgY21kQXJncywgY2FsbHNpdGUpO1xuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbW1hbmQub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB1cmw6IGNvbW1hbmQudXJsIHx8IGNvbW1hbmQub3B0aW9ucy51cmwgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBSZXF1ZXN0Q29tbWFuZC5yZXN1bHRHZXR0ZXJzLmZvckVhY2goZ2V0dGVyID0+IHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvbWlzZSwgZ2V0dGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gUmVFeGVjdXRhYmxlUHJvbWlzZS5mcm9tRm4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZW5kUmVxdWVzdChjb250cm9sbGVyLnRlc3RSdW4sIG9wdGlvbnMsIGNhbGxzaXRlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlW2dldHRlcl07XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9kZWNvcmF0ZVJlcXVlc3RGdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgUmVxdWVzdENvbW1hbmQuZXh0ZW5kZWRNZXRob2RzLmZvckVhY2gobWV0aG9kID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbWV0aG9kLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbih7IG1ldGhvZCB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlcXVlc3RDb21tYW5kLm1ldGhvZE5hbWUsICdnZXR0ZXInKV0gKCkge1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMuX2NyZWF0ZVJlcXVlc3RGdW5jdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX2RlY29yYXRlUmVxdWVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShDbGlja0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChDbGlja0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSaWdodENsaWNrQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJpZ2h0Q2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRG91YmxlQ2xpY2tDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoRG91YmxlQ2xpY2tDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoSG92ZXJDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoSG92ZXJDb21tYW5kLCB7IHNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoRHJhZ0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgZHJhZ09mZnNldFgsIGRyYWdPZmZzZXRZLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdDb21tYW5kLCB7IHNlbGVjdG9yLCBkcmFnT2Zmc2V0WCwgZHJhZ09mZnNldFksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShEcmFnVG9FbGVtZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKERyYWdUb0VsZW1lbnRDb21tYW5kLCB7IHNlbGVjdG9yLCBkZXN0aW5hdGlvblNlbGVjdG9yLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIF9nZXRTZWxlY3RvckZvclNjcm9sbCAoYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBpc1NlbGVjdG9yKGFyZ3NbMF0pID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHNlbGVjdG9yKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICAvLyBOT1RFOiBoZXJlIHdlIHVzZSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IGZvciBvbGQgU2FmYXJpIHZlcnNpb25zXG4gICAgICAgICAgICAvLyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBvbiBNb2phdmUgU2FmYXJpIDEyLjEvIEhpZ2ggU2llcnJhIFNhZmFyaSAxMS4xXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3I7XG4gICAgfVxuXG4gICAgX2dldFBvc2l0aW9uIChhcmdzKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnID8gYXJnc1swXSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uKVxuICAgICAgICAgICAgYXJncy5zaGlmdCgpO1xuXG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNjcm9sbENvbW1hbmQubWV0aG9kTmFtZSldICguLi5hcmdzKSB7XG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5fZ2V0U2VsZWN0b3JGb3JTY3JvbGwoYXJncyk7XG5cbiAgICAgICAgbGV0IHggICAgICAgPSB2b2lkIDA7XG4gICAgICAgIGxldCB5ICAgICAgID0gdm9pZCAwO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHZvaWQgMDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgWyBwb3NpdGlvbiwgb3B0aW9ucyBdID0gYXJncztcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdudW1iZXInKVxuICAgICAgICAgICAgWyB4LCB5LCBvcHRpb25zIF0gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbENvbW1hbmQsIHsgc2VsZWN0b3IsIHgsIHksIHBvc2l0aW9uLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2Nyb2xsQnlDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuX2dldFNlbGVjdG9yRm9yU2Nyb2xsKGFyZ3MpO1xuXG4gICAgICAgIGNvbnN0IFtieVgsIGJ5WSwgb3B0aW9uc10gPSBhcmdzO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNjcm9sbEJ5Q29tbWFuZCwgeyBzZWxlY3RvciwgYnlYLCBieVksIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTY3JvbGxJbnRvVmlld0NvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTY3JvbGxJbnRvVmlld0NvbW1hbmQsIHsgc2VsZWN0b3IsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUeXBlVGV4dENvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3RvciwgdGV4dCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChUeXBlVGV4dENvbW1hbmQsIHsgc2VsZWN0b3IsIHRleHQsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZWxlY3RUZXh0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNlbGVjdFRleHRDb21tYW5kLCB7IHNlbGVjdG9yLCBzdGFydFBvcywgZW5kUG9zLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yLCBzdGFydExpbmUsIHN0YXJ0UG9zLCBlbmRMaW5lLCBlbmRQb3MsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2VsZWN0VGV4dEFyZWFDb250ZW50Q29tbWFuZCwge1xuICAgICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgICBzdGFydExpbmUsXG4gICAgICAgICAgICBzdGFydFBvcyxcbiAgICAgICAgICAgIGVuZExpbmUsXG4gICAgICAgICAgICBlbmRQb3MsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNlbGVjdEVkaXRhYmxlQ29udGVudENvbW1hbmQubWV0aG9kTmFtZSldIChzdGFydFNlbGVjdG9yLCBlbmRTZWxlY3Rvciwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTZWxlY3RFZGl0YWJsZUNvbnRlbnRDb21tYW5kLCB7XG4gICAgICAgICAgICBzdGFydFNlbGVjdG9yLFxuICAgICAgICAgICAgZW5kU2VsZWN0b3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFByZXNzS2V5Q29tbWFuZC5tZXRob2ROYW1lKV0gKGtleXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoUHJlc3NLZXlDb21tYW5kLCB7IGtleXMsIG9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShXYWl0Q29tbWFuZC5tZXRob2ROYW1lKV0gKHRpbWVvdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoV2FpdENvbW1hbmQsIHsgdGltZW91dCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKE5hdmlnYXRlVG9Db21tYW5kLm1ldGhvZE5hbWUpXSAodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE5hdmlnYXRlVG9Db21tYW5kLCB7IHVybCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIGZpbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldEZpbGVzVG9VcGxvYWRDb21tYW5kLCB7IHNlbGVjdG9yLCBmaWxlUGF0aCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKENsZWFyVXBsb2FkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKENsZWFyVXBsb2FkQ29tbWFuZCwgeyBzZWxlY3RvciB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFRha2VTY3JlZW5zaG90Q29tbWFuZC5tZXRob2ROYW1lKV0gKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKVxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGF0aDogb3B0aW9ucyB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VTY3JlZW5zaG90Q29tbWFuZCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShUYWtlRWxlbWVudFNjcmVlbnNob3RDb21tYW5kLm1ldGhvZE5hbWUpXSAoc2VsZWN0b3IsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEFyZ3MgPSB7IHNlbGVjdG9yIH07XG5cbiAgICAgICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggICAgPSBhcmdzWzBdO1xuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgY29tbWFuZEFyZ3Mub3B0aW9ucyA9IGFyZ3NbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNvbW1hbmRBcmdzLnBhdGggPSBhcmdzWzBdO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFRha2VFbGVtZW50U2NyZWVuc2hvdENvbW1hbmQsIGNvbW1hbmRBcmdzKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJlc2l6ZVdpbmRvd0NvbW1hbmQsIHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFJlc2l6ZVdpbmRvd1RvRml0RGV2aWNlQ29tbWFuZC5tZXRob2ROYW1lKV0gKGRldmljZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZXNpemVXaW5kb3dUb0ZpdERldmljZUNvbW1hbmQsIHsgZGV2aWNlLCBvcHRpb25zIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoTWF4aW1pemVXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKE1heGltaXplV2luZG93Q29tbWFuZCk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb0lmcmFtZUNvbW1hbmQubWV0aG9kTmFtZSldIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb0lmcmFtZUNvbW1hbmQsIHsgc2VsZWN0b3IgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTd2l0Y2hUb01haW5XaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFN3aXRjaFRvTWFpbldpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICh1cmwpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoT3BlbldpbmRvd0NvbW1hbmQsIHsgdXJsIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAod2luZG93KSB7XG4gICAgICAgIGNvbnN0IHdpbmRvd0lkICAgICAgPSB3aW5kb3c/LmlkIHx8IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoQ2xvc2VXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKENsb3NlV2luZG93Q29tbWFuZCwgeyB3aW5kb3dJZCB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKEdldEN1cnJlbnRXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKEdldEN1cnJlbnRXaW5kb3dDb21tYW5kKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFN3aXRjaFRvV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKV0gKHdpbmRvd1NlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvV2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICBsZXQgY29tbWFuZDtcbiAgICAgICAgbGV0IGFyZ3M7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3dTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29tbWFuZCA9IFN3aXRjaFRvV2luZG93QnlQcmVkaWNhdGVDb21tYW5kO1xuXG4gICAgICAgICAgICBhcmdzID0geyBjaGVja1dpbmRvdzogd2luZG93U2VsZWN0b3IgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTd2l0Y2hUb1dpbmRvd0NvbW1hbmQ7XG5cbiAgICAgICAgICAgIGFyZ3MgPSB7IHdpbmRvd0lkOiB3aW5kb3dTZWxlY3Rvcj8uaWQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKGNvbW1hbmQsIGFyZ3MpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9QYXJlbnRXaW5kb3dDb21tYW5kLm1ldGhvZE5hbWUpXSAoKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlTXVsdGlwbGVXaW5kb3dDb21tYW5kKFN3aXRjaFRvUGFyZW50V2luZG93Q29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChTd2l0Y2hUb1BhcmVudFdpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSldICgpIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVNdWx0aXBsZVdpbmRvd0NvbW1hbmQoU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQubWV0aG9kTmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU3dpdGNoVG9QcmV2aW91c1dpbmRvd0NvbW1hbmQpO1xuICAgIH1cblxuICAgIF9ldmFsJCAoZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChvcHRpb25zKSlcbiAgICAgICAgICAgIG9wdGlvbnMgPSBhc3NpZ24oe30sIG9wdGlvbnMsIHsgYm91bmRUZXN0UnVuOiB0aGlzIH0pO1xuXG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgID0gbmV3IENsaWVudEZ1bmN0aW9uQnVpbGRlcihmbiwgb3B0aW9ucywgeyBpbnN0YW50aWF0aW9uOiAnZXZhbCcsIGV4ZWN1dGlvbjogJ2V2YWwnIH0pO1xuICAgICAgICBjb25zdCBjbGllbnRGbiA9IGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gY2xpZW50Rm4oKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kLm1ldGhvZE5hbWUpXSAoZm4sIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsIHtcbiAgICAgICAgICAgIGRpYWxvZ0hhbmRsZXI6IHsgZm4sIG9wdGlvbnMgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXROYXRpdmVEaWFsb2dIaXN0b3J5Q29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEdldE5hdGl2ZURpYWxvZ0hpc3RvcnlDb21tYW5kLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoR2V0TmF0aXZlRGlhbG9nSGlzdG9yeUNvbW1hbmQsIHt9LCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShHZXRCcm93c2VyQ29uc29sZU1lc3NhZ2VzQ29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGdldENhbGxzaXRlRm9yTWV0aG9kKEdldEJyb3dzZXJDb25zb2xlTWVzc2FnZXNDb21tYW5kLm1ldGhvZE5hbWUpO1xuICAgICAgICBjb25zdCBjb21tYW5kICA9IHRoaXMuX2NyZWF0ZUNvbW1hbmQoR2V0QnJvd3NlckNvbnNvbGVNZXNzYWdlc0NvbW1hbmQsIHt9LCBjYWxsc2l0ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudGVzdFJ1bi5leGVjdXRlQ29tbWFuZChjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgY2hlY2tGb3JFeGNlc3NpdmVBd2FpdHMgKGNoZWNrZWRDYWxsc2l0ZSwgeyBhY3Rpb25JZCB9KSB7XG4gICAgICAgIGNvbnN0IHNuYXBzaG90UHJvcGVydHlDYWxsc2l0ZXMgPSB0aGlzLnRlc3RSdW4ub2JzZXJ2ZWRDYWxsc2l0ZXMuc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlcztcbiAgICAgICAgY29uc3QgY2FsbHNpdGVJZCAgICAgICAgICAgICAgICA9IGdldENhbGxzaXRlSWQoY2hlY2tlZENhbGxzaXRlKTtcblxuICAgICAgICAvLyBOT1RFOiBJZiB0aGVyZSBhcmUgdW5hc3NlcnRlZCBjYWxsc2l0ZXMsIHdlIHNob3VsZCBhZGQgYWxsIG9mIHRoZW0gdG8gYXdhaXRlZFNuYXBzaG90V2FybmluZ3MuXG4gICAgICAgIC8vIFRoZSB3YXJuaW5ncyB0aGVtc2VsdmVzIGFyZSByYWlzZWQgYWZ0ZXIgdGhlIHRlc3QgcnVuIGluIHdyYXAtdGVzdC1mdW5jdGlvblxuICAgICAgICBpZiAoc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXSAmJiAhc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXS5jaGVja2VkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5Q2FsbHNpdGUgb2Ygc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXS5jYWxsc2l0ZXMpXG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UnVuLm9ic2VydmVkQ2FsbHNpdGVzLmF3YWl0ZWRTbmFwc2hvdFdhcm5pbmdzLnNldChnZXRDYWxsc2l0ZVN0YWNrRnJhbWVTdHJpbmcocHJvcGVydHlDYWxsc2l0ZSksIHsgY2FsbHNpdGU6IHByb3BlcnR5Q2FsbHNpdGUsIGFjdGlvbklkIH0pO1xuXG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3RQcm9wZXJ0eUNhbGxzaXRlc1tjYWxsc2l0ZUlkXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzbmFwc2hvdFByb3BlcnR5Q2FsbHNpdGVzW2NhbGxzaXRlSWRdID0geyBjYWxsc2l0ZXM6IFtdLCBjaGVja2VkOiB0cnVlIH07XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShBc3NlcnRpb25Db21tYW5kLm1ldGhvZE5hbWUpXSAoYWN0dWFsKSB7XG4gICAgICAgIGNvbnN0IGNhbGxzaXRlID0gZ2V0Q2FsbHNpdGVGb3JNZXRob2QoQXNzZXJ0aW9uQ29tbWFuZC5tZXRob2ROYW1lKTtcblxuICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbihhY3R1YWwsIHRoaXMsIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKERlYnVnQ29tbWFuZC5tZXRob2ROYW1lKV0gKCkge1xuICAgICAgICAvLyBOT1RFOiBkbyBub3QgbmVlZCB0byBlbnF1ZXVlIHRoZSBEZWJ1ZyBjb21tYW5kIGlmIHdlIGFyZSBpbiBkZWJ1Z2dpbmcgbW9kZS5cbiAgICAgICAgLy8gVGhlIERlYnVnIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBieSBDRFAuXG4gICAgICAgIC8vIEFsc28sIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGVtcHR5IGZ1bmN0aW9uIHRvIHRoZSBleGVjdXRpb24gY2hhaW4gdG8gcHJlc2VydmUgaXQuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29tcGlsZXJTZXJ2aWNlTW9kZSgpID8gdGhpcy5fZW5xdWV1ZVRhc2soRGVidWdDb21tYW5kLm1ldGhvZE5hbWUsIG5vb3ApIDogdGhpcy5lbnF1ZXVlQ29tbWFuZChEZWJ1Z0NvbW1hbmQpO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoU2V0VGVzdFNwZWVkQ29tbWFuZC5tZXRob2ROYW1lKV0gKHNwZWVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNldFRlc3RTcGVlZENvbW1hbmQsIHsgc3BlZWQgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShTZXRQYWdlTG9hZFRpbWVvdXRDb21tYW5kLm1ldGhvZE5hbWUpXSAoZHVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoU2V0UGFnZUxvYWRUaW1lb3V0Q29tbWFuZCwgeyBkdXJhdGlvbiB9LCAodGVzdENvbnRyb2xsZXIsIGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgIGFkZFdhcm5pbmcodGVzdENvbnRyb2xsZXIud2FybmluZ0xvZywgeyBtZXNzYWdlOiBnZXREZXByZWNhdGlvbk1lc3NhZ2UoREVQUkVDQVRFRC5zZXRQYWdlTG9hZFRpbWVvdXQpLCBhY3Rpb25JZDogY29tbWFuZC5hY3Rpb25JZCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShVc2VSb2xlQ29tbWFuZC5tZXRob2ROYW1lKV0gKHJvbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5xdWV1ZUNvbW1hbmQoVXNlUm9sZUNvbW1hbmQsIHsgcm9sZSB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKFNraXBKc0Vycm9yc0NvbW1hbmQubWV0aG9kTmFtZSldIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFNraXBKc0Vycm9yc0NvbW1hbmQsIHsgb3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICBbZGVsZWdhdGVkQVBJKEFkZFJlcXVlc3RIb29rc0NvbW1hbmQubWV0aG9kTmFtZSldICguLi5ob29rcykge1xuICAgICAgICBob29rcyA9IGZsYXR0ZW5EZWVwKGhvb2tzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChBZGRSZXF1ZXN0SG9va3NDb21tYW5kLCB7IGhvb2tzIH0pO1xuICAgIH1cblxuICAgIFtkZWxlZ2F0ZWRBUEkoUmVtb3ZlUmVxdWVzdEhvb2tzQ29tbWFuZC5tZXRob2ROYW1lKV0gKC4uLmhvb2tzKSB7XG4gICAgICAgIGhvb2tzID0gZmxhdHRlbkRlZXAoaG9va3MpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVucXVldWVDb21tYW5kKFJlbW92ZVJlcXVlc3RIb29rc0NvbW1hbmQsIHsgaG9va3MgfSk7XG4gICAgfVxuXG4gICAgW2RlbGVnYXRlZEFQSShSZXBvcnRDb21tYW5kLm1ldGhvZE5hbWUpXSAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnF1ZXVlQ29tbWFuZChSZXBvcnRDb21tYW5kLCB7IGFyZ3MgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGVuYWJsZURlYnVnRm9yTm9uRGVidWdDb21tYW5kcyAoKSB7XG4gICAgICAgIGluRGVidWcgPSB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBkaXNhYmxlRGVidWdGb3JOb25EZWJ1Z0NvbW1hbmRzICgpIHtcbiAgICAgICAgaW5EZWJ1ZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHNob3VsZFN0b3AgKGNvbW1hbmQpIHtcbiAgICAgICAgLy8gTk9URTogc2hvdWxkIG5ldmVyIHN0b3AgaW4gbm90IGNvbXBsaWxlciBkZWJ1Z2dpbmcgbW9kZVxuICAgICAgICBpZiAoIXRoaXMuaXNDb21waWxlclNlcnZpY2VNb2RlKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgLy8gTk9URTogc2hvdWxkIGFsd2F5cyBzdG9wIG9uIERlYnVnIGNvbW1hbmRcbiAgICAgICAgaWYgKGNvbW1hbmQgPT09ICdkZWJ1ZycpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAvLyBOT1RFOiBzaG91bGQgc3RvcCBvbiBvdGhlciBhY3Rpb25zIGFmdGVyIHRoZSBgTmV4dCBBY3Rpb25gIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAgICAgIGlmIChpbkRlYnVnKSB7XG4gICAgICAgICAgICBpbkRlYnVnID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlc3RSdW4gaW5zdGFuY2VvZiBUZXN0UnVuUHJveHk7XG4gICAgfVxuXG59XG5cblRlc3RDb250cm9sbGVyLkFQSV9MSVNUID0gZ2V0RGVsZWdhdGVkQVBJTGlzdChUZXN0Q29udHJvbGxlci5wcm90b3R5cGUpO1xuXG5kZWxlZ2F0ZUFQSShUZXN0Q29udHJvbGxlci5wcm90b3R5cGUsIFRlc3RDb250cm9sbGVyLkFQSV9MSVNULCB7IHVzZUN1cnJlbnRDdHhBc0hhbmRsZXI6IHRydWUgfSk7XG4iXX0=
|
|
@@ -97,4 +97,4 @@ class TestRunTracker extends events_1.EventEmitter {
|
|
|
97
97
|
// Tracker
|
|
98
98
|
exports.default = new TestRunTracker();
|
|
99
99
|
module.exports = exports.default;
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tdHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdGVzdC1ydW4tdHJhY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdEQUFzQztBQUN0QyxtQ0FBc0M7QUFJdEMsTUFBTSxnQkFBZ0IsR0FBRyxzQ0FBc0MsQ0FBQztBQUNoRSxNQUFNLGNBQWMsR0FBSyxJQUFJLENBQUM7QUFFOUIsTUFBTSxjQUFlLFNBQVEscUJBQVk7SUFJckM7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxtQ0FBbUMsQ0FBRSxjQUF3QixFQUFFLGdCQUF3QjtRQUMzRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFckIsT0FBTztZQUNILE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRWhELElBQUksU0FBUyxFQUFFO2dCQUNYLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVO3dCQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkY7YUFDSjtZQUVELGFBQWE7WUFDYixPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlO1FBQ25CLDJEQUEyRDtRQUMzRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBRXpDLEtBQUssQ0FB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QUFFLFNBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVNLG1CQUFtQixDQUFFLEVBQVU7UUFDbEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDSjtBQUVELFVBQVU7QUFDVixrQkFBZSxJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFN0YWNrRnJhbWVzIGZyb20gJ2NhbGxzaXRlJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdFJ1blByb3h5IGZyb20gJy4uL3NlcnZpY2VzL2NvbXBpbGVyL3Rlc3QtcnVuLXByb3h5JztcblxuY29uc3QgVFJBQ0tJTkdfTUFSS19SRSA9IC9eXFwkXFwkdGVzdGNhZmVfdGVzdF9ydW5cXCRcXCQoXFxTKylcXCRcXCQkLztcbmNvbnN0IFNUQUNLX0NBUEFDSVRZICAgPSA1MDAwO1xuXG5jbGFzcyBUZXN0UnVuVHJhY2tlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBlbmFibGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBhY3RpdmVUZXN0UnVuczogeyBbaWQ6IHN0cmluZ106IFRlc3RSdW4gfCBUZXN0UnVuUHJveHkgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aXZlVGVzdFJ1bnMgPSB7fTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVDb250ZXh0U3dpdGNoaW5nRnVuY3Rpb25Ib29rIChjdHhTd2l0Y2hpbmdGbjogRnVuY3Rpb24sIHBhdGNoZWRBcmdzQ291bnQ6IG51bWJlcik6IGFueSB7XG4gICAgICAgIGNvbnN0IHRyYWNrZXIgPSB0aGlzO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0UnVuSWQgPSB0cmFja2VyLmdldENvbnRleHRUZXN0UnVuSWQoKTtcblxuICAgICAgICAgICAgaWYgKHRlc3RSdW5JZCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0Y2hlZEFyZ3NDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2ldID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gdHJhY2tlci5hZGRUcmFja2luZ01hcmtlclRvRnVuY3Rpb24odGVzdFJ1bklkLCBhcmd1bWVudHNbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgcmV0dXJuIGN0eFN3aXRjaGluZ0ZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0U3RhY2tGcmFtZXMgKCk6IGdldFN0YWNrRnJhbWVzLkNhbGxTaXRlW10ge1xuICAgICAgICAvLyBOT1RFOiBpbmNyZWFzZSBzdGFjayBjYXBhY2l0eSB0byBzZWVrIGRlZXAgc3RhY2sgZW50cmllc1xuICAgICAgICBjb25zdCBzYXZlZExpbWl0ID0gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0O1xuXG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IFNUQUNLX0NBUEFDSVRZO1xuXG4gICAgICAgIGNvbnN0IGZyYW1lcyA9IGdldFN0YWNrRnJhbWVzKCk7XG5cbiAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gc2F2ZWRMaW1pdDtcblxuICAgICAgICByZXR1cm4gZnJhbWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXJrZWRGbk5hbWUgKHRlc3RSdW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAkJHRlc3RjYWZlX3Rlc3RfcnVuJCQke3Rlc3RSdW5JZH0kJGA7XG4gICAgfVxuXG4gICAgcHVibGljIGVuc3VyZUVuYWJsZWQgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xuICAgICAgICAgICAgZ2xvYmFsLnNldFRpbWVvdXQgICA9IHRoaXMuX2NyZWF0ZUNvbnRleHRTd2l0Y2hpbmdGdW5jdGlvbkhvb2soZ2xvYmFsLnNldFRpbWVvdXQsIDEpO1xuICAgICAgICAgICAgZ2xvYmFsLnNldEludGVydmFsICA9IHRoaXMuX2NyZWF0ZUNvbnRleHRTd2l0Y2hpbmdGdW5jdGlvbkhvb2soZ2xvYmFsLnNldEludGVydmFsLCAxKTtcbiAgICAgICAgICAgIGdsb2JhbC5zZXRJbW1lZGlhdGUgPSB0aGlzLl9jcmVhdGVDb250ZXh0U3dpdGNoaW5nRnVuY3Rpb25Ib29rKGdsb2JhbC5zZXRJbW1lZGlhdGUsIDEpO1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayAgICA9IHRoaXMuX2NyZWF0ZUNvbnRleHRTd2l0Y2hpbmdGdW5jdGlvbkhvb2socHJvY2Vzcy5uZXh0VGljaywgMSk7XG5cbiAgICAgICAgICAgIGdsb2JhbC5Qcm9taXNlLnByb3RvdHlwZS50aGVuICA9IHRoaXMuX2NyZWF0ZUNvbnRleHRTd2l0Y2hpbmdGdW5jdGlvbkhvb2soZ2xvYmFsLlByb21pc2UucHJvdG90eXBlLnRoZW4sIDIpO1xuICAgICAgICAgICAgZ2xvYmFsLlByb21pc2UucHJvdG90eXBlLmNhdGNoID0gdGhpcy5fY3JlYXRlQ29udGV4dFN3aXRjaGluZ0Z1bmN0aW9uSG9vayhnbG9iYWwuUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gsIDEpO1xuXG4gICAgICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRyYWNraW5nTWFya2VyVG9GdW5jdGlvbiAodGVzdFJ1bklkOiBzdHJpbmcsIGZuOiBGdW5jdGlvbiwgY29udGV4dD86IGFueSk6IEZ1bmN0aW9uIHtcbiAgICAgICAgY29uc3QgbWFya2VyRmFjdG9yeUJvZHkgPSBgXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gJHsgdGhpcy5nZXRNYXJrZWRGbk5hbWUodGVzdFJ1bklkKSB9ICgpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBmbi5jYWxsKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBmbi5jYWxsKGNvbnRleHQsIGFyZ3VtZW50c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIGZuLmNhbGwoY29udGV4dCwgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBmbi5jYWxsKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBmbi5jYWxsKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0sIGFyZ3VtZW50c1szXSk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIGA7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbignZm4nLCAnY29udGV4dCcsIG1hcmtlckZhY3RvcnlCb2R5KShmbiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRleHRUZXN0UnVuSWQgKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBmcmFtZXMgPSB0aGlzLl9nZXRTdGFja0ZyYW1lcygpO1xuXG4gICAgICAgIC8vIE9QVElNSVpBVElPTjogd2Ugc3RhcnQgdHJhdmVyc2luZyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLFxuICAgICAgICAvLyBiZWNhdXNlIHdlJ2xsIG1vcmUgbGlrZWx5IGVuY291bnRlciBhIG1hcmtlciB0aGVyZS5cbiAgICAgICAgLy8gQXN5bmMvYXdhaXQgYW5kIFByb21pc2UgbWFjaGluZXJ5IGV4ZWN1dGVzIGxvdHMgb2YgaW50cmluc2ljc1xuICAgICAgICAvLyBvbiB0aW1lcnMgKHdoZXJlIHdlIGhhdmUgYSBtYXJrZXIpLiBBbmQsIHNpbmNlIGEgdGltZXIgaW5pdGlhdGVzIGEgbmV3XG4gICAgICAgIC8vIHN0YWNrLCB0aGUgbWFya2VyIHdpbGwgYmUgYXQgdGhlIHZlcnkgYm90dG9tIG9mIGl0LlxuICAgICAgICBmb3IgKGxldCBpID0gZnJhbWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBmbk5hbWUgPSBmcmFtZXNbaV0uZ2V0RnVuY3Rpb25OYW1lKCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCAgPSBmbk5hbWUgJiYgZm5OYW1lLm1hdGNoKFRSQUNLSU5HX01BUktfUkUpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2gpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVDb250ZXh0VGVzdFJ1biAoKTogVGVzdFJ1biB8IFRlc3RSdW5Qcm94eSB8IG51bGwge1xuICAgICAgICBjb25zdCB0ZXN0UnVuSWQgPSB0aGlzLmdldENvbnRleHRUZXN0UnVuSWQoKTtcblxuICAgICAgICBpZiAodGVzdFJ1bklkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVGVzdFJ1bnNbdGVzdFJ1bklkXTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQWN0aXZlVGVzdFJ1biAodGVzdFJ1bjogVGVzdFJ1biB8IFRlc3RSdW5Qcm94eSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVRlc3RSdW5zW3Rlc3RSdW4uaWRdID0gdGVzdFJ1bjtcblxuICAgICAgICB0ZXN0UnVuLm9uQW55KChldmVudE5hbWU6IHN0cmluZywgZXZlbnREYXRhOiB1bmtub3duKSA9PiB0aGlzLmVtaXQoZXZlbnROYW1lLCB7IHRlc3RSdW4sIGRhdGE6IGV2ZW50RGF0YSB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUFjdGl2ZVRlc3RSdW4gKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlVGVzdFJ1bnNbaWRdO1xuICAgIH1cbn1cblxuLy8gVHJhY2tlclxuZXhwb3J0IGRlZmF1bHQgbmV3IFRlc3RSdW5UcmFja2VyKCk7XG4iXX0=
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tdHJhY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvdGVzdC1ydW4tdHJhY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdEQUFzQztBQUN0QyxtQ0FBc0M7QUFJdEMsTUFBTSxnQkFBZ0IsR0FBRyxzQ0FBc0MsQ0FBQztBQUNoRSxNQUFNLGNBQWMsR0FBSyxJQUFJLENBQUM7QUFFOUIsTUFBTSxjQUFlLFNBQVEscUJBQVk7SUFJckM7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxPQUFPLEdBQVUsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxtQ0FBbUMsQ0FBRSxjQUF3QixFQUFFLGdCQUF3QjtRQUMzRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFckIsT0FBTztZQUNILE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRWhELElBQUksU0FBUyxFQUFFO2dCQUNYLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVO3dCQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkY7YUFDSjtZQUVELGFBQWE7WUFDYixPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlO1FBQ25CLDJEQUEyRDtRQUMzRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBRXpDLEtBQUssQ0FB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QUFFLFNBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVNLG1CQUFtQixDQUFFLEVBQVU7UUFDbEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDSjtBQUVELFVBQVU7QUFDVixrQkFBZSxJQUFJLGNBQWMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFN0YWNrRnJhbWVzIGZyb20gJ2NhbGxzaXRlJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgVGVzdFJ1biBmcm9tICcuLi90ZXN0LXJ1bic7XG5pbXBvcnQgVGVzdFJ1blByb3h5IGZyb20gJy4uL3NlcnZpY2VzL2NvbXBpbGVyL3Rlc3QtcnVuLXByb3h5JztcblxuY29uc3QgVFJBQ0tJTkdfTUFSS19SRSA9IC9eXFwkXFwkdGVzdGNhZmVfdGVzdF9ydW5cXCRcXCQoXFxTKylcXCRcXCQkLztcbmNvbnN0IFNUQUNLX0NBUEFDSVRZICAgPSA1MDAwO1xuXG5jbGFzcyBUZXN0UnVuVHJhY2tlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBlbmFibGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBhY3RpdmVUZXN0UnVuczogeyBbaWQ6IHN0cmluZ106IFRlc3RSdW4gfCBUZXN0UnVuUHJveHkgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5lbmFibGVkICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGl2ZVRlc3RSdW5zID0ge307XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ29udGV4dFN3aXRjaGluZ0Z1bmN0aW9uSG9vayAoY3R4U3dpdGNoaW5nRm46IEZ1bmN0aW9uLCBwYXRjaGVkQXJnc0NvdW50OiBudW1iZXIpOiBhbnkge1xuICAgICAgICBjb25zdCB0cmFja2VyID0gdGhpcztcblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgdGVzdFJ1bklkID0gdHJhY2tlci5nZXRDb250ZXh0VGVzdFJ1bklkKCk7XG5cbiAgICAgICAgICAgIGlmICh0ZXN0UnVuSWQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGNoZWRBcmdzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IHRyYWNrZXIuYWRkVHJhY2tpbmdNYXJrZXJUb0Z1bmN0aW9uKHRlc3RSdW5JZCwgYXJndW1lbnRzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHJldHVybiBjdHhTd2l0Y2hpbmdGbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFN0YWNrRnJhbWVzICgpOiBnZXRTdGFja0ZyYW1lcy5DYWxsU2l0ZVtdIHtcbiAgICAgICAgLy8gTk9URTogaW5jcmVhc2Ugc3RhY2sgY2FwYWNpdHkgdG8gc2VlayBkZWVwIHN0YWNrIGVudHJpZXNcbiAgICAgICAgY29uc3Qgc2F2ZWRMaW1pdCA9IEVycm9yLnN0YWNrVHJhY2VMaW1pdDtcblxuICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBTVEFDS19DQVBBQ0lUWTtcblxuICAgICAgICBjb25zdCBmcmFtZXMgPSBnZXRTdGFja0ZyYW1lcygpO1xuXG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHNhdmVkTGltaXQ7XG5cbiAgICAgICAgcmV0dXJuIGZyYW1lcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWFya2VkRm5OYW1lICh0ZXN0UnVuSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJCR0ZXN0Y2FmZV90ZXN0X3J1biQkJHt0ZXN0UnVuSWR9JCRgO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnN1cmVFbmFibGVkICgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGdsb2JhbC5zZXRUaW1lb3V0ICAgPSB0aGlzLl9jcmVhdGVDb250ZXh0U3dpdGNoaW5nRnVuY3Rpb25Ib29rKGdsb2JhbC5zZXRUaW1lb3V0LCAxKTtcbiAgICAgICAgICAgIGdsb2JhbC5zZXRJbnRlcnZhbCAgPSB0aGlzLl9jcmVhdGVDb250ZXh0U3dpdGNoaW5nRnVuY3Rpb25Ib29rKGdsb2JhbC5zZXRJbnRlcnZhbCwgMSk7XG4gICAgICAgICAgICBnbG9iYWwuc2V0SW1tZWRpYXRlID0gdGhpcy5fY3JlYXRlQ29udGV4dFN3aXRjaGluZ0Z1bmN0aW9uSG9vayhnbG9iYWwuc2V0SW1tZWRpYXRlLCAxKTtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2sgICAgPSB0aGlzLl9jcmVhdGVDb250ZXh0U3dpdGNoaW5nRnVuY3Rpb25Ib29rKHByb2Nlc3MubmV4dFRpY2ssIDEpO1xuXG4gICAgICAgICAgICBnbG9iYWwuUHJvbWlzZS5wcm90b3R5cGUudGhlbiAgPSB0aGlzLl9jcmVhdGVDb250ZXh0U3dpdGNoaW5nRnVuY3Rpb25Ib29rKGdsb2JhbC5Qcm9taXNlLnByb3RvdHlwZS50aGVuLCAyKTtcbiAgICAgICAgICAgIGdsb2JhbC5Qcm9taXNlLnByb3RvdHlwZS5jYXRjaCA9IHRoaXMuX2NyZWF0ZUNvbnRleHRTd2l0Y2hpbmdGdW5jdGlvbkhvb2soZ2xvYmFsLlByb21pc2UucHJvdG90eXBlLmNhdGNoLCAxKTtcblxuICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGRUcmFja2luZ01hcmtlclRvRnVuY3Rpb24gKHRlc3RSdW5JZDogc3RyaW5nLCBmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBhbnkpOiBGdW5jdGlvbiB7XG4gICAgICAgIGNvbnN0IG1hcmtlckZhY3RvcnlCb2R5ID0gYFxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICR7IHRoaXMuZ2V0TWFya2VkRm5OYW1lKHRlc3RSdW5JZCkgfSAoKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gZm4uY2FsbChjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gZm4uY2FsbChjb250ZXh0LCBhcmd1bWVudHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBmbi5jYWxsKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gZm4uY2FsbChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gZm4uY2FsbChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10pO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICBgO1xuXG4gICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oJ2ZuJywgJ2NvbnRleHQnLCBtYXJrZXJGYWN0b3J5Qm9keSkoZm4sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0VGVzdFJ1bklkICgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZnJhbWVzID0gdGhpcy5fZ2V0U3RhY2tGcmFtZXMoKTtcblxuICAgICAgICAvLyBPUFRJTUlaQVRJT046IHdlIHN0YXJ0IHRyYXZlcnNpbmcgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayxcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSdsbCBtb3JlIGxpa2VseSBlbmNvdW50ZXIgYSBtYXJrZXIgdGhlcmUuXG4gICAgICAgIC8vIEFzeW5jL2F3YWl0IGFuZCBQcm9taXNlIG1hY2hpbmVyeSBleGVjdXRlcyBsb3RzIG9mIGludHJpbnNpY3NcbiAgICAgICAgLy8gb24gdGltZXJzICh3aGVyZSB3ZSBoYXZlIGEgbWFya2VyKS4gQW5kLCBzaW5jZSBhIHRpbWVyIGluaXRpYXRlcyBhIG5ld1xuICAgICAgICAvLyBzdGFjaywgdGhlIG1hcmtlciB3aWxsIGJlIGF0IHRoZSB2ZXJ5IGJvdHRvbSBvZiBpdC5cbiAgICAgICAgZm9yIChsZXQgaSA9IGZyYW1lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgZm5OYW1lID0gZnJhbWVzW2ldLmdldEZ1bmN0aW9uTmFtZSgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggID0gZm5OYW1lICYmIGZuTmFtZS5tYXRjaChUUkFDS0lOR19NQVJLX1JFKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoKVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlQ29udGV4dFRlc3RSdW4gKCk6IFRlc3RSdW4gfCBUZXN0UnVuUHJveHkgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdGVzdFJ1bklkID0gdGhpcy5nZXRDb250ZXh0VGVzdFJ1bklkKCk7XG5cbiAgICAgICAgaWYgKHRlc3RSdW5JZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVRlc3RSdW5zW3Rlc3RSdW5JZF07XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEFjdGl2ZVRlc3RSdW4gKHRlc3RSdW46IFRlc3RSdW4gfCBUZXN0UnVuUHJveHkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVUZXN0UnVuc1t0ZXN0UnVuLmlkXSA9IHRlc3RSdW47XG5cbiAgICAgICAgdGVzdFJ1bi5vbkFueSgoZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50RGF0YTogdW5rbm93bikgPT4gdGhpcy5lbWl0KGV2ZW50TmFtZSwgeyB0ZXN0UnVuLCBkYXRhOiBldmVudERhdGEgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVBY3RpdmVUZXN0UnVuIChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVRlc3RSdW5zW2lkXTtcbiAgICB9XG59XG5cbi8vIFRyYWNrZXJcbmV4cG9ydCBkZWZhdWx0IG5ldyBUZXN0UnVuVHJhY2tlcigpO1xuIl19
|