testcafe 2.5.0-rc.1 → 2.5.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli/argument-parser/index.js +2 -2
- package/lib/client/core/index.js +1 -1
- package/lib/client/core/index.min.js +1 -1
- package/lib/configuration/option-names.js +2 -2
- package/lib/configuration/run-option-names.js +2 -2
- package/lib/configuration/testcafe-configuration.js +5 -5
- package/lib/errors/runtime/templates.js +2 -2
- package/lib/runner/bootstrapper.js +3 -3
- package/lib/runner/task/index.js +2 -2
- package/lib/test-run/commands/actions.js +2 -2
- package/lib/test-run/index.js +2 -2
- package/lib/test-run/session-controller.js +2 -2
- package/package.json +1 -1
- package/ts-defs/index.d.ts +2 -2
- package/ts-defs/selectors.d.ts +2 -2
- package/ts-defs/testcafe-scripts.d.ts +2 -2
|
@@ -42,7 +42,7 @@ const OPTION_INIT_FLAG_NAMES = [
|
|
|
42
42
|
option_names_1.default.retryTestPages,
|
|
43
43
|
option_names_1.default.cache,
|
|
44
44
|
option_names_1.default.disableHttp2,
|
|
45
|
-
option_names_1.default.
|
|
45
|
+
option_names_1.default.nativeAutomation,
|
|
46
46
|
option_names_1.default.disableCrossDomain,
|
|
47
47
|
];
|
|
48
48
|
class TestCafeConfiguration extends configuration_base_1.default {
|
|
@@ -98,13 +98,13 @@ class TestCafeConfiguration extends configuration_base_1.default {
|
|
|
98
98
|
cache: this.getOption(option_names_1.default.cache),
|
|
99
99
|
disableHttp2: this.getOption(option_names_1.default.disableHttp2),
|
|
100
100
|
disableCrossDomain: this.getOption(option_names_1.default.disableCrossDomain),
|
|
101
|
-
proxyless: this.getOption(option_names_1.default.
|
|
101
|
+
proxyless: this.getOption(option_names_1.default.nativeAutomation),
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
104
|
get browserConnectionGatewayOptions() {
|
|
105
105
|
return {
|
|
106
106
|
retryTestPages: this.getOption(option_names_1.default.retryTestPages),
|
|
107
|
-
proxyless: this.getOption(option_names_1.default.
|
|
107
|
+
proxyless: this.getOption(option_names_1.default.nativeAutomation),
|
|
108
108
|
};
|
|
109
109
|
}
|
|
110
110
|
_checkUnsecureDataInJSONConfiguration(opts) {
|
|
@@ -182,7 +182,7 @@ class TestCafeConfiguration extends configuration_base_1.default {
|
|
|
182
182
|
this._ensureOptionWithValue(option_names_1.default.developmentMode, default_values_1.DEFAULT_DEVELOPMENT_MODE, option_source_1.default.Configuration);
|
|
183
183
|
this._ensureOptionWithValue(option_names_1.default.retryTestPages, default_values_1.DEFAULT_RETRY_TEST_PAGES, option_source_1.default.Configuration);
|
|
184
184
|
this._ensureOptionWithValue(option_names_1.default.disableHttp2, default_values_1.DEFAULT_DISABLE_HTTP2, option_source_1.default.Configuration);
|
|
185
|
-
this._ensureOptionWithValue(option_names_1.default.
|
|
185
|
+
this._ensureOptionWithValue(option_names_1.default.nativeAutomation, default_values_1.DEFAULT_PROXYLESS, option_source_1.default.Configuration);
|
|
186
186
|
this._ensureOptionWithValue(option_names_1.default.disableCrossDomain, default_values_1.DEFAULT_DISABLE_CROSS_DOMAIN, option_source_1.default.Configuration);
|
|
187
187
|
this._ensureScreenshotOptions();
|
|
188
188
|
this._ensureSkipJsOptions();
|
|
@@ -233,4 +233,4 @@ class TestCafeConfiguration extends configuration_base_1.default {
|
|
|
233
233
|
}
|
|
234
234
|
exports.default = TestCafeConfiguration;
|
|
235
235
|
module.exports = exports.default;
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGNhZmUtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uL3Rlc3RjYWZlLWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4RUFBaUQ7QUFDakQsbUNBQTRDO0FBQzVDLHNEQUFxRTtBQUNyRSxrRUFBMEM7QUFDMUMsMkVBQWlEO0FBQ2pELG1GQUEwRDtBQUMxRCw0Q0FBK0U7QUFDL0UsK0VBQXNEO0FBQ3RELHVGQUFnRTtBQUNoRSx1R0FBNEU7QUFFNUUscURBYzBCO0FBRTFCLG9FQUEyQztBQVMzQyxzRkFBNkQ7QUFDN0QsNERBQWdGO0FBRWhGLG9FQUEyRDtBQUUzRCx1Q0FBcUQ7QUFDckQsK0NBQWlEO0FBQ2pELDJDQUFpRDtBQUNqRCw4REFBMkQ7QUFFM0QsbUNBQTJDO0FBRTNDLE1BQU0sMkJBQTJCLEdBQUcsYUFBYSxDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQU8sa0NBQXdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRywyQkFBMkIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBRWhILE1BQU0sNkJBQTZCLEdBQUcsYUFBYSxDQUFDO0FBRXBELE1BQU0saUJBQWlCLEdBQUc7SUFDdEIsc0JBQVksQ0FBQyxTQUFTO0lBQ3RCLHNCQUFZLENBQUMsV0FBVztJQUN4QixzQkFBWSxDQUFDLGtCQUFrQjtJQUMvQixzQkFBWSxDQUFDLGVBQWU7SUFDNUIsc0JBQVksQ0FBQyxzQkFBc0I7SUFDbkMsc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxzQkFBc0I7Q0FDdEMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUc7SUFDM0Isc0JBQVksQ0FBQyxlQUFlO0lBQzVCLHNCQUFZLENBQUMsY0FBYztJQUMzQixz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Z3VyYXRpb24gZnJvbSAnLi9jb25maWd1cmF0aW9uLWJhc2UnO1xuaW1wb3J0IHsgY2FzdEFycmF5LCBmbGF0dGVuIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGdldEdyZXBPcHRpb25zLCBnZXRTU0xPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LW9wdGlvbnMnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgZ2V0RmlsdGVyRm4gZnJvbSAnLi4vdXRpbHMvZ2V0LWZpbHRlci1mbic7XG5pbXBvcnQgcHJlcGFyZVJlcG9ydGVycyBmcm9tICcuLi91dGlscy9wcmVwYXJlLXJlcG9ydGVycyc7XG5pbXBvcnQgeyBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcsIGdldFBsdXJhbFN1ZmZpeCB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5pbXBvcnQgcmVuZGVyVGVtcGxhdGUgZnJvbSAnLi4vdXRpbHMvcmVuZGVyLXRlbXBsYXRlJztcbmltcG9ydCBXQVJOSU5HX01FU1NBR0VTIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcbmltcG9ydCByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QgZnJvbSAnLi4vdXRpbHMvcmVzb2x2ZS1wYXRoLXJlbGF0aXZlbHktY3dkJztcblxuaW1wb3J0IHtcbiAgICBERUZBVUxUX0FQUF9JTklUX0RFTEFZLFxuICAgIERFRkFVTFRfQ09OQ1VSUkVOQ1lfVkFMVUUsXG4gICAgREVGQVVMVF9ERVZFTE9QTUVOVF9NT0RFLFxuICAgIERFRkFVTFRfRElTQUJMRV9DUk9TU19ET01BSU4sXG4gICAgREVGQVVMVF9ESVNBQkxFX0hUVFAyLFxuICAgIERFRkFVTFRfRklMVEVSX0ZOLFxuICAgIERFRkFVTFRfUFJPWFlMRVNTLFxuICAgIERFRkFVTFRfUkVUUllfVEVTVF9QQUdFUyxcbiAgICBERUZBVUxUX1NDUkVFTlNIT1RfVEhVTUJOQUlMUyxcbiAgICBERUZBVUxUX1NPVVJDRV9ESVJFQ1RPUklFUyxcbiAgICBERUZBVUxUX1NQRUVEX1ZBTFVFLFxuICAgIERFRkFVTFRfVElNRU9VVCxcbiAgICBnZXREZWZhdWx0Q29tcGlsZXJPcHRpb25zLFxufSBmcm9tICcuL2RlZmF1bHQtdmFsdWVzJztcblxuaW1wb3J0IE9wdGlvblNvdXJjZSBmcm9tICcuL29wdGlvbi1zb3VyY2UnO1xuXG5pbXBvcnQge1xuICAgIERpY3Rpb25hcnksXG4gICAgRmlsdGVyT3B0aW9uLFxuICAgIFJlcG9ydGVyT3B0aW9uLFxuICAgIFR5cGVTY3JpcHRDb21waWxlck9wdGlvbnMsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCBDdXN0b21pemFibGVDb21waWxlcnMgZnJvbSAnLi9jdXN0b21pemFibGUtY29tcGlsZXJzJztcbmltcG9ydCB7IERFUFJFQ0FURUQsIGdldERlcHJlY2F0aW9uTWVzc2FnZSB9IGZyb20gJy4uL25vdGlmaWNhdGlvbnMvZGVwcmVjYXRlZCc7XG5pbXBvcnQgV2FybmluZ0xvZyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbG9nJztcbmltcG9ydCBicm93c2VyUHJvdmlkZXJQb29sIGZyb20gJy4uL2Jyb3dzZXIvcHJvdmlkZXIvcG9vbCc7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24sIHsgQnJvd3NlckluZm8gfSBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgQ09ORklHVVJBVElPTl9FWFRFTlNJT05TIH0gZnJvbSAnLi9mb3JtYXRzJztcbmltcG9ydCB7IEdlbmVyYWxFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vZXJyb3JzL3R5cGVzJztcbmltcG9ydCB7IExPQ0FMSE9TVF9OQU1FUyB9IGZyb20gJy4uL3V0aWxzL2xvY2FsaG9zdC1uYW1lcyc7XG5pbXBvcnQgeyBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXlPcHRpb25zIH0gZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uL2dhdGV3YXknO1xuaW1wb3J0IHsgZ2V0VmFsaWRIb3N0bmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBCQVNFX0NPTkZJR1VSQVRJT05fRklMRU5BTUUgPSAnLnRlc3RjYWZlcmMnO1xuY29uc3QgQ09ORklHVVJBVElPTl9GSUxFTkFNRVMgICAgID0gQ09ORklHVVJBVElPTl9FWFRFTlNJT05TLm1hcChleHQgPT4gYCR7QkFTRV9DT05GSUdVUkFUSU9OX0ZJTEVOQU1FfSR7ZXh0fWApO1xuXG5jb25zdCBERUZBVUxUX1NDUkVFTlNIT1RTX0RJUkVDVE9SWSA9ICdzY3JlZW5zaG90cyc7XG5cbmNvbnN0IE9QVElPTl9GTEFHX05BTUVTID0gW1xuICAgIE9QVElPTl9OQU1FUy5kZWJ1Z01vZGUsXG4gICAgT1BUSU9OX05BTUVTLmRlYnVnT25GYWlsLFxuICAgIE9QVElPTl9OQU1FUy5za2lwVW5jYXVnaHRFcnJvcnMsXG4gICAgT1BUSU9OX05BTUVTLnN0b3BPbkZpcnN0RmFpbCxcbiAgICBPUFRJT05fTkFNRVMudGFrZVNjcmVlbnNob3RzT25GYWlscyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZVBhZ2VDYWNoaW5nLFxuICAgIE9QVElPTl9OQU1FUy5kaXNhYmxlUGFnZVJlbG9hZHMsXG4gICAgT1BUSU9OX05BTUVTLmRpc2FibGVTY3JlZW5zaG90cyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZU11bHRpcGxlV2luZG93cyxcbl07XG5cbmNvbnN0IE9QVElPTl9JTklUX0ZMQUdfTkFNRVMgPSBbXG4gICAgT1BUSU9OX05BTUVTLmRldmVsb3BtZW50TW9kZSxcbiAgICBPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMsXG4gICAgT1BUSU9OX05BTUVTLmNhY2hlLFxuICAgIE9QVElPTl9OQU1FUy5kaXNhYmxlSHR0cDIsXG4gICAgT1BUSU9OX05BTUVTLnByb3h5bGVzcyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZUNyb3NzRG9tYWluLFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FmZVN0YXJ0T3B0aW9ucyB7XG4gICAgaG9zdG5hbWU6IHN0cmluZztcbiAgICBwb3J0MTogbnVtYmVyO1xuICAgIHBvcnQyOiBudW1iZXI7XG4gICAgcmV0cnlUZXN0UGFnZXM6IGJvb2xlYW47XG4gICAgc3NsOiBvYmplY3Q7XG4gICAgZGV2ZWxvcG1lbnRNb2RlOiBib29sZWFuO1xuICAgIGNhY2hlOiBib29sZWFuO1xuICAgIGRpc2FibGVIdHRwMjogYm9vbGVhbjtcbiAgICBwcm94eWxlc3M6IGJvb2xlYW47XG4gICAgZGlzYWJsZUNyb3NzRG9tYWluOiBib29sZWFuO1xufVxuXG50eXBlIEJyb3dzZXJJbmZvU291cmNlID0gQnJvd3NlckluZm8gfCBCcm93c2VyQ29ubmVjdGlvbjtcblxudHlwZSBDYWxjdWxhdGVIb3N0bmFtZUZuID0gKGhvc3RuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdENhZmVDb25maWd1cmF0aW9uIGV4dGVuZHMgQ29uZmlndXJhdGlvbiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pc0V4cGxpY2l0Q29uZmlnOiBib29sZWFuO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChjb25maWdGaWxlID0gJycpIHtcbiAgICAgICAgc3VwZXIoY29uZmlnRmlsZSB8fCBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FUyk7XG5cbiAgICAgICAgdGhpcy5faXNFeHBsaWNpdENvbmZpZyA9ICEhY29uZmlnRmlsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdCAob3B0aW9ucz86IERpY3Rpb25hcnk8b2JqZWN0Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBzdXBlci5pbml0KCk7XG5cbiAgICAgICAgY29uc3Qgb3B0cyA9IGF3YWl0IHRoaXMuX2xvYWQoKTtcblxuICAgICAgICB0aGlzLl9jaGVja1Vuc2VjdXJlRGF0YUluSlNPTkNvbmZpZ3VyYXRpb24ob3B0cyk7XG5cbiAgICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBDb25maWd1cmF0aW9uLl9mcm9tT2JqKG9wdHMpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3JtYWxpemVPcHRpb25zQWZ0ZXJMb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmFzeW5jTWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhc3luY01lcmdlT3B0aW9ucyAob3B0aW9ucz86IERpY3Rpb25hcnk8b2JqZWN0Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICBzdXBlci5tZXJnZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmlzQ2xpICYmIHRoaXMuX29wdGlvbnMuYnJvd3NlcnMpXG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLmJyb3dzZXJzLnZhbHVlID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlckluZm8oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZSAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVGbGFncygpO1xuICAgICAgICB0aGlzLl9zZXREZWZhdWx0VmFsdWVzKCk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVDb21waWxlck9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5QWJvdXRPdmVycmlkZGVuT3B0aW9ucyAod2FybmluZ0xvZz86IFdhcm5pbmdMb2cpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vdmVycmlkZGVuT3B0aW9ucy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uc1N0ciAgICA9IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyh0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNTdWZmaXggPSBnZXRQbHVyYWxTdWZmaXgodGhpcy5fb3ZlcnJpZGRlbk9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZW5kZXJlZE1lc3NhZ2UgPSByZW5kZXJUZW1wbGF0ZShXQVJOSU5HX01FU1NBR0VTLmNvbmZpZ09wdGlvbnNXZXJlT3ZlcnJpZGRlbiwgb3B0aW9uc1N0ciwgb3B0aW9uc1N1ZmZpeCk7XG5cbiAgICAgICAgQ29uZmlndXJhdGlvbi5fc2hvd0NvbnNvbGVXYXJuaW5nKHJlbmRlcmVkTWVzc2FnZSk7XG5cbiAgICAgICAgaWYgKHdhcm5pbmdMb2cpXG4gICAgICAgICAgICB3YXJuaW5nTG9nLmFkZFdhcm5pbmcocmVuZGVyZWRNZXNzYWdlKTtcblxuICAgICAgICB0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlBYm91dERlcHJlY2F0ZWRPcHRpb25zICh3YXJuaW5nTG9nOiBXYXJuaW5nTG9nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKChuYW1lLCBvcHRpb24pID0+IG5hbWUgaW4gREVQUkVDQVRFRCAmJiBvcHRpb24udmFsdWUgIT09IHZvaWQgMCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb25OYW1lIGluIGRlcHJlY2F0ZWRPcHRpb25zKVxuICAgICAgICAgICAgd2FybmluZ0xvZy5hZGRXYXJuaW5nKGdldERlcHJlY2F0aW9uTWVzc2FnZShERVBSRUNBVEVEW29wdGlvbk5hbWVdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGFydE9wdGlvbnMgKCk6IFRlc3RDYWZlU3RhcnRPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RuYW1lOiAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmhvc3RuYW1lKSxcbiAgICAgICAgICAgIHBvcnQxOiAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnBvcnQxKSxcbiAgICAgICAgICAgIHBvcnQyOiAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnBvcnQyKSxcbiAgICAgICAgICAgIHNzbDogICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnNzbCksXG4gICAgICAgICAgICBkZXZlbG9wbWVudE1vZGU6ICAgIHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5kZXZlbG9wbWVudE1vZGUpLFxuICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6ICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMpLFxuICAgICAgICAgICAgY2FjaGU6ICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMuY2FjaGUpLFxuICAgICAgICAgICAgZGlzYWJsZUh0dHAyOiAgICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMuZGlzYWJsZUh0dHAyKSxcbiAgICAgICAgICAgIGRpc2FibGVDcm9zc0RvbWFpbjogdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRpc2FibGVDcm9zc0RvbWFpbiksXG4gICAgICAgICAgICBwcm94eWxlc3M6ICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5wcm94eWxlc3MpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5T3B0aW9ucyAoKTogQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5T3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXRyeVRlc3RQYWdlczogdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnJldHJ5VGVzdFBhZ2VzKSxcbiAgICAgICAgICAgIHByb3h5bGVzczogICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMucHJveHlsZXNzKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja1Vuc2VjdXJlRGF0YUluSlNPTkNvbmZpZ3VyYXRpb24gKG9wdHM6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2lzSlNPTkNvbmZpZ3VyYXRpb24oKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAob3B0cz8uW09QVElPTl9OQU1FUy5kYXNoYm9hcmRdPy50b2tlbilcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuZGFzaGJvYXJkVG9rZW5JbkpTT04pO1xuICAgIH1cbiAgICBwcml2YXRlIF9wcmVwYXJlRmxhZyAobmFtZTogc3RyaW5nLCBzb3VyY2UgPSBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9lbnN1cmVPcHRpb24obmFtZSwgdm9pZCAwLCBzb3VyY2UpO1xuXG4gICAgICAgIG9wdGlvbi52YWx1ZSA9ICEhb3B0aW9uLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVGbGFncyAoKTogdm9pZCB7XG4gICAgICAgIE9QVElPTl9GTEFHX05BTUVTLmZvckVhY2gobmFtZSA9PiB0aGlzLl9wcmVwYXJlRmxhZyhuYW1lKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUluaXRGbGFncyAoKTogdm9pZCB7XG4gICAgICAgIE9QVElPTl9JTklUX0ZMQUdfTkFNRVMuZm9yRWFjaChuYW1lID0+IHRoaXMuX3ByZXBhcmVGbGFnKG5hbWUsIE9wdGlvblNvdXJjZS5EZWZhdWx0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfbm9ybWFsaXplT3B0aW9uc0FmdGVyTG9hZCAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3ByZXBhcmVTc2xPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVJbml0RmxhZ3MoKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZUZpbHRlckZuKCk7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5T3B0aW9uKE9QVElPTl9OQU1FUy5zcmMpO1xuICAgICAgICB0aGlzLl9lbnN1cmVBcnJheU9wdGlvbihPUFRJT05fTkFNRVMuYnJvd3NlcnMpO1xuICAgICAgICB0aGlzLl9lbnN1cmVBcnJheU9wdGlvbihPUFRJT05fTkFNRVMuY2xpZW50U2NyaXB0cyk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVSZXBvcnRlcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlRmlsdGVyRm4gKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb24gPSB0aGlzLl9lbnN1cmVPcHRpb24oT1BUSU9OX05BTUVTLmZpbHRlciwgREVGQVVMVF9GSUxURVJfRk4sIE9wdGlvblNvdXJjZS5EZWZhdWx0KTtcblxuICAgICAgICBpZiAoIWZpbHRlck9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb25WYWx1ZSA9IGZpbHRlck9wdGlvbi52YWx1ZSBhcyBGaWx0ZXJPcHRpb247XG5cbiAgICAgICAgaWYgKGZpbHRlck9wdGlvblZhbHVlLnRlc3RHcmVwKVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uVmFsdWUudGVzdEdyZXAgPSBnZXRHcmVwT3B0aW9ucyhPUFRJT05fTkFNRVMuZmlsdGVyVGVzdEdyZXAsIGZpbHRlck9wdGlvblZhbHVlLnRlc3RHcmVwIGFzIHN0cmluZyk7XG5cbiAgICAgICAgaWYgKGZpbHRlck9wdGlvblZhbHVlLmZpeHR1cmVHcmVwKVxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uVmFsdWUuZml4dHVyZUdyZXAgPSBnZXRHcmVwT3B0aW9ucyhPUFRJT05fTkFNRVMuZmlsdGVyRml4dHVyZUdyZXAsIGZpbHRlck9wdGlvblZhbHVlLmZpeHR1cmVHcmVwIGFzIHN0cmluZyk7XG5cbiAgICAgICAgZmlsdGVyT3B0aW9uLnZhbHVlICA9IGdldEZpbHRlckZuKGZpbHRlck9wdGlvbi52YWx1ZSkgYXMgRnVuY3Rpb247XG4gICAgICAgIGZpbHRlck9wdGlvbi5zb3VyY2UgPSBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbnN1cmVTY3JlZW5zaG90T3B0aW9ucyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhdGggICAgICAgID0gcmVzb2x2ZVBhdGhSZWxhdGl2ZWx5Q3dkKERFRkFVTFRfU0NSRUVOU0hPVFNfRElSRUNUT1JZKTtcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdHMgPSB0aGlzLl9lbnN1cmVPcHRpb24oT1BUSU9OX05BTUVTLnNjcmVlbnNob3RzLCB7fSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pLnZhbHVlIGFzIERpY3Rpb25hcnk8c3RyaW5nfGJvb2xlYW4+O1xuXG4gICAgICAgIGlmICghc2NyZWVuc2hvdHMucGF0aClcbiAgICAgICAgICAgIHNjcmVlbnNob3RzLnBhdGggPSBwYXRoO1xuXG4gICAgICAgIGlmIChzY3JlZW5zaG90cy50aHVtYm5haWxzID09PSB2b2lkIDApXG4gICAgICAgICAgICBzY3JlZW5zaG90cy50aHVtYm5haWxzID0gREVGQVVMVF9TQ1JFRU5TSE9UX1RIVU1CTkFJTFM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW5zdXJlU2tpcEpzT3B0aW9ucyAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2Vuc3VyZU9wdGlvbihPUFRJT05fTkFNRVMuc2tpcEpzRXJyb3JzLCB2b2lkIDAsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2b2lkIDApXG4gICAgICAgICAgICBvcHRpb24udmFsdWUgPSAhIW9wdGlvbi52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlUmVwb3J0ZXJzICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVwb3J0ZXJPcHRpb24gPSB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5yZXBvcnRlcl07XG5cbiAgICAgICAgaWYgKCFyZXBvcnRlck9wdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IGNhc3RBcnJheShyZXBvcnRlck9wdGlvbi52YWx1ZSBhcyBSZXBvcnRlck9wdGlvbik7XG5cbiAgICAgICAgcmVwb3J0ZXJPcHRpb24udmFsdWUgPSBwcmVwYXJlUmVwb3J0ZXJzKG9wdGlvblZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlU3NsT3B0aW9ucyAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNzbE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zW09QVElPTl9OQU1FUy5zc2xdO1xuXG4gICAgICAgIGlmICghc3NsT3B0aW9ucylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBzc2xPcHRpb25zLnZhbHVlID0gYXdhaXQgZ2V0U1NMT3B0aW9ucyhzc2xPcHRpb25zLnZhbHVlIGFzIHN0cmluZykgYXMgRGljdGlvbmFyeTxzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXREZWZhdWx0VmFsdWVzICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5zZWxlY3RvclRpbWVvdXQsIERFRkFVTFRfVElNRU9VVC5zZWxlY3RvciwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLmFzc2VydGlvblRpbWVvdXQsIERFRkFVTFRfVElNRU9VVC5hc3NlcnRpb24sIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5wYWdlTG9hZFRpbWVvdXQsIERFRkFVTFRfVElNRU9VVC5wYWdlTG9hZCwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnNwZWVkLCBERUZBVUxUX1NQRUVEX1ZBTFVFLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuYXBwSW5pdERlbGF5LCBERUZBVUxUX0FQUF9JTklUX0RFTEFZLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuY29uY3VycmVuY3ksIERFRkFVTFRfQ09OQ1VSUkVOQ1lfVkFMVUUsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5zcmMsIERFRkFVTFRfU09VUkNFX0RJUkVDVE9SSUVTLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuZGV2ZWxvcG1lbnRNb2RlLCBERUZBVUxUX0RFVkVMT1BNRU5UX01PREUsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcywgREVGQVVMVF9SRVRSWV9URVNUX1BBR0VTLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuZGlzYWJsZUh0dHAyLCBERUZBVUxUX0RJU0FCTEVfSFRUUDIsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5wcm94eWxlc3MsIERFRkFVTFRfUFJPWFlMRVNTLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuZGlzYWJsZUNyb3NzRG9tYWluLCBERUZBVUxUX0RJU0FCTEVfQ1JPU1NfRE9NQUlOLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgdGhpcy5fZW5zdXJlU2NyZWVuc2hvdE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlU2tpcEpzT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVDb21waWxlck9wdGlvbnMgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSB0aGlzLl9lbnN1cmVPcHRpb24oT1BUSU9OX05BTUVTLmNvbXBpbGVyT3B0aW9ucywgZ2V0RGVmYXVsdENvbXBpbGVyT3B0aW9ucygpLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgY29tcGlsZXJPcHRpb25zLnZhbHVlID0gY29tcGlsZXJPcHRpb25zLnZhbHVlIHx8IGdldERlZmF1bHRDb21waWxlck9wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCB0c0NvbmZpZ1BhdGggPSB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMudHNDb25maWdQYXRoKTtcblxuICAgICAgICBpZiAodHNDb25maWdQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBjb21waWxlck9wdGlvblZhbHVlICAgICA9IGNvbXBpbGVyT3B0aW9ucy52YWx1ZSBhcyBDb21waWxlck9wdGlvbnM7XG4gICAgICAgICAgICBsZXQgdHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucyA9IGNvbXBpbGVyT3B0aW9uVmFsdWVbQ3VzdG9taXphYmxlQ29tcGlsZXJzLnR5cGVzY3JpcHRdIGFzIFR5cGVTY3JpcHRDb21waWxlck9wdGlvbnM7XG5cbiAgICAgICAgICAgIHR5cGVTY3JpcHRDb21waWxlck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBjb25maWdQYXRoOiB0c0NvbmZpZ1BhdGgsXG4gICAgICAgICAgICB9LCB0eXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zKTtcblxuICAgICAgICAgICAgKGNvbXBpbGVyT3B0aW9ucy52YWx1ZSBhcyBDb21waWxlck9wdGlvbnMpW0N1c3RvbWl6YWJsZUNvbXBpbGVycy50eXBlc2NyaXB0XSA9IHR5cGVTY3JpcHRDb21waWxlck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRCcm93c2VySW5mbyAoKTogUHJvbWlzZTxCcm93c2VySW5mb1NvdXJjZVtdPiB7XG4gICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCBicm93c2VycyA9IEFycmF5LmlzQXJyYXkodGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZSkgPyBbLi4udGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZV0gOiBbdGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZV07XG5cbiAgICAgICAgY29uc3QgYnJvd3NlckluZm8gPSBhd2FpdCBQcm9taXNlLmFsbChicm93c2Vycy5tYXAoYnJvd3NlciA9PiBicm93c2VyUHJvdmlkZXJQb29sLmdldEJyb3dzZXJJbmZvKGJyb3dzZXIpKSk7XG5cbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4oYnJvd3NlckluZm8pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBfaXNDb25maWd1cmF0aW9uRmlsZUV4aXN0cyAoZmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IGZpbGVFeGlzdHMgPSBhd2FpdCBzdXBlci5faXNDb25maWd1cmF0aW9uRmlsZUV4aXN0cyhmaWxlUGF0aCk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzICYmIHRoaXMuX2lzRXhwbGljaXRDb25maWcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRUZXN0Y2FmZUNvbmZpZ3VyYXRpb25GaWxlLCBmaWxlUGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIGZpbGVFeGlzdHM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgRklMRU5BTUVTICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FUztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5zdXJlSG9zdG5hbWUgKGNhbGN1bGF0ZUZuOiBDYWxjdWxhdGVIb3N0bmFtZUZuID0gZ2V0VmFsaWRIb3N0bmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgaG9zdG5hbWUgPSB0aGlzLmdldE9wdGlvbjxzdHJpbmc+KE9QVElPTl9OQU1FUy5ob3N0bmFtZSk7XG5cbiAgICAgICAgaG9zdG5hbWUgPSBhd2FpdCBjYWxjdWxhdGVGbihob3N0bmFtZSk7XG5cbiAgICAgICAgdGhpcy5tZXJnZU9wdGlvbnMoeyBob3N0bmFtZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2FsY3VsYXRlSG9zdG5hbWUgKHsgcHJveHlsZXNzIH0gPSB7IHByb3h5bGVzczogZmFsc2UgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUhvc3RuYW1lKGFzeW5jIGhvc3RuYW1lID0+IHtcbiAgICAgICAgICAgIGlmIChwcm94eWxlc3MpXG4gICAgICAgICAgICAgICAgaG9zdG5hbWUgPSBMT0NBTEhPU1RfTkFNRVMuTE9DQUxIT1NUO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGhvc3RuYW1lID0gYXdhaXQgZ2V0VmFsaWRIb3N0bmFtZShob3N0bmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBob3N0bmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGNhZmUtY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWd1cmF0aW9uL3Rlc3RjYWZlLWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4RUFBaUQ7QUFDakQsbUNBQTRDO0FBQzVDLHNEQUFxRTtBQUNyRSxrRUFBMEM7QUFDMUMsMkVBQWlEO0FBQ2pELG1GQUEwRDtBQUMxRCw0Q0FBK0U7QUFDL0UsK0VBQXNEO0FBQ3RELHVGQUFnRTtBQUNoRSx1R0FBNEU7QUFFNUUscURBYzBCO0FBRTFCLG9FQUEyQztBQVMzQyxzRkFBNkQ7QUFDN0QsNERBQWdGO0FBRWhGLG9FQUEyRDtBQUUzRCx1Q0FBcUQ7QUFDckQsK0NBQWlEO0FBQ2pELDJDQUFpRDtBQUNqRCw4REFBMkQ7QUFFM0QsbUNBQTJDO0FBRTNDLE1BQU0sMkJBQTJCLEdBQUcsYUFBYSxDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQU8sa0NBQXdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRywyQkFBMkIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBRWhILE1BQU0sNkJBQTZCLEdBQUcsYUFBYSxDQUFDO0FBRXBELE1BQU0saUJBQWlCLEdBQUc7SUFDdEIsc0JBQVksQ0FBQyxTQUFTO0lBQ3RCLHNCQUFZLENBQUMsV0FBVztJQUN4QixzQkFBWSxDQUFDLGtCQUFrQjtJQUMvQixzQkFBWSxDQUFDLGVBQWU7SUFDNUIsc0JBQVksQ0FBQyxzQkFBc0I7SUFDbkMsc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxrQkFBa0I7SUFDL0Isc0JBQVksQ0FBQyxzQkFBc0I7Q0FDdEMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUc7SUFDM0Isc0JBQVksQ0FBQyxlQUFlO0lBQzVCLHNCQUFZLENBQUMsY0FBYztJQUMzQixz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cnQgQ29uZmlndXJhdGlvbiBmcm9tICcuL2NvbmZpZ3VyYXRpb24tYmFzZSc7XG5pbXBvcnQgeyBjYXN0QXJyYXksIGZsYXR0ZW4gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZ2V0R3JlcE9wdGlvbnMsIGdldFNTTE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9nZXQtb3B0aW9ucyc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4vb3B0aW9uLW5hbWVzJztcbmltcG9ydCBnZXRGaWx0ZXJGbiBmcm9tICcuLi91dGlscy9nZXQtZmlsdGVyLWZuJztcbmltcG9ydCBwcmVwYXJlUmVwb3J0ZXJzIGZyb20gJy4uL3V0aWxzL3ByZXBhcmUtcmVwb3J0ZXJzJztcbmltcG9ydCB7IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZywgZ2V0UGx1cmFsU3VmZml4IH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCByZW5kZXJUZW1wbGF0ZSBmcm9tICcuLi91dGlscy9yZW5kZXItdGVtcGxhdGUnO1xuaW1wb3J0IFdBUk5JTkdfTUVTU0FHRVMgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLW1lc3NhZ2UnO1xuaW1wb3J0IHJlc29sdmVQYXRoUmVsYXRpdmVseUN3ZCBmcm9tICcuLi91dGlscy9yZXNvbHZlLXBhdGgtcmVsYXRpdmVseS1jd2QnO1xuXG5pbXBvcnQge1xuICAgIERFRkFVTFRfQVBQX0lOSVRfREVMQVksXG4gICAgREVGQVVMVF9DT05DVVJSRU5DWV9WQUxVRSxcbiAgICBERUZBVUxUX0RFVkVMT1BNRU5UX01PREUsXG4gICAgREVGQVVMVF9ESVNBQkxFX0NST1NTX0RPTUFJTixcbiAgICBERUZBVUxUX0RJU0FCTEVfSFRUUDIsXG4gICAgREVGQVVMVF9GSUxURVJfRk4sXG4gICAgREVGQVVMVF9QUk9YWUxFU1MsXG4gICAgREVGQVVMVF9SRVRSWV9URVNUX1BBR0VTLFxuICAgIERFRkFVTFRfU0NSRUVOU0hPVF9USFVNQk5BSUxTLFxuICAgIERFRkFVTFRfU09VUkNFX0RJUkVDVE9SSUVTLFxuICAgIERFRkFVTFRfU1BFRURfVkFMVUUsXG4gICAgREVGQVVMVF9USU1FT1VULFxuICAgIGdldERlZmF1bHRDb21waWxlck9wdGlvbnMsXG59IGZyb20gJy4vZGVmYXVsdC12YWx1ZXMnO1xuXG5pbXBvcnQgT3B0aW9uU291cmNlIGZyb20gJy4vb3B0aW9uLXNvdXJjZSc7XG5cbmltcG9ydCB7XG4gICAgRGljdGlvbmFyeSxcbiAgICBGaWx0ZXJPcHRpb24sXG4gICAgUmVwb3J0ZXJPcHRpb24sXG4gICAgVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucyxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuaW1wb3J0IEN1c3RvbWl6YWJsZUNvbXBpbGVycyBmcm9tICcuL2N1c3RvbWl6YWJsZS1jb21waWxlcnMnO1xuaW1wb3J0IHsgREVQUkVDQVRFRCwgZ2V0RGVwcmVjYXRpb25NZXNzYWdlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9ucy9kZXByZWNhdGVkJztcbmltcG9ydCBXYXJuaW5nTG9nIGZyb20gJy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1sb2cnO1xuaW1wb3J0IGJyb3dzZXJQcm92aWRlclBvb2wgZnJvbSAnLi4vYnJvd3Nlci9wcm92aWRlci9wb29sJztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbiwgeyBCcm93c2VySW5mbyB9IGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgeyBDT05GSUdVUkFUSU9OX0VYVEVOU0lPTlMgfSBmcm9tICcuL2Zvcm1hdHMnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IHsgTE9DQUxIT1NUX05BTUVTIH0gZnJvbSAnLi4vdXRpbHMvbG9jYWxob3N0LW5hbWVzJztcbmltcG9ydCB7IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheU9wdGlvbnMgfSBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24vZ2F0ZXdheSc7XG5pbXBvcnQgeyBnZXRWYWxpZEhvc3RuYW1lIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEJBU0VfQ09ORklHVVJBVElPTl9GSUxFTkFNRSA9ICcudGVzdGNhZmVyYyc7XG5jb25zdCBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FUyAgICAgPSBDT05GSUdVUkFUSU9OX0VYVEVOU0lPTlMubWFwKGV4dCA9PiBgJHtCQVNFX0NPTkZJR1VSQVRJT05fRklMRU5BTUV9JHtleHR9YCk7XG5cbmNvbnN0IERFRkFVTFRfU0NSRUVOU0hPVFNfRElSRUNUT1JZID0gJ3NjcmVlbnNob3RzJztcblxuY29uc3QgT1BUSU9OX0ZMQUdfTkFNRVMgPSBbXG4gICAgT1BUSU9OX05BTUVTLmRlYnVnTW9kZSxcbiAgICBPUFRJT05fTkFNRVMuZGVidWdPbkZhaWwsXG4gICAgT1BUSU9OX05BTUVTLnNraXBVbmNhdWdodEVycm9ycyxcbiAgICBPUFRJT05fTkFNRVMuc3RvcE9uRmlyc3RGYWlsLFxuICAgIE9QVElPTl9OQU1FUy50YWtlU2NyZWVuc2hvdHNPbkZhaWxzLFxuICAgIE9QVElPTl9OQU1FUy5kaXNhYmxlUGFnZUNhY2hpbmcsXG4gICAgT1BUSU9OX05BTUVTLmRpc2FibGVQYWdlUmVsb2FkcyxcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZVNjcmVlbnNob3RzLFxuICAgIE9QVElPTl9OQU1FUy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzLFxuXTtcblxuY29uc3QgT1BUSU9OX0lOSVRfRkxBR19OQU1FUyA9IFtcbiAgICBPUFRJT05fTkFNRVMuZGV2ZWxvcG1lbnRNb2RlLFxuICAgIE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcyxcbiAgICBPUFRJT05fTkFNRVMuY2FjaGUsXG4gICAgT1BUSU9OX05BTUVTLmRpc2FibGVIdHRwMixcbiAgICBPUFRJT05fTkFNRVMubmF0aXZlQXV0b21hdGlvbixcbiAgICBPUFRJT05fTkFNRVMuZGlzYWJsZUNyb3NzRG9tYWluLFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FmZVN0YXJ0T3B0aW9ucyB7XG4gICAgaG9zdG5hbWU6IHN0cmluZztcbiAgICBwb3J0MTogbnVtYmVyO1xuICAgIHBvcnQyOiBudW1iZXI7XG4gICAgcmV0cnlUZXN0UGFnZXM6IGJvb2xlYW47XG4gICAgc3NsOiBvYmplY3Q7XG4gICAgZGV2ZWxvcG1lbnRNb2RlOiBib29sZWFuO1xuICAgIGNhY2hlOiBib29sZWFuO1xuICAgIGRpc2FibGVIdHRwMjogYm9vbGVhbjtcbiAgICBwcm94eWxlc3M6IGJvb2xlYW47XG4gICAgZGlzYWJsZUNyb3NzRG9tYWluOiBib29sZWFuO1xufVxuXG50eXBlIEJyb3dzZXJJbmZvU291cmNlID0gQnJvd3NlckluZm8gfCBCcm93c2VyQ29ubmVjdGlvbjtcblxudHlwZSBDYWxjdWxhdGVIb3N0bmFtZUZuID0gKGhvc3RuYW1lOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdENhZmVDb25maWd1cmF0aW9uIGV4dGVuZHMgQ29uZmlndXJhdGlvbiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pc0V4cGxpY2l0Q29uZmlnOiBib29sZWFuO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChjb25maWdGaWxlID0gJycpIHtcbiAgICAgICAgc3VwZXIoY29uZmlnRmlsZSB8fCBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FUyk7XG5cbiAgICAgICAgdGhpcy5faXNFeHBsaWNpdENvbmZpZyA9ICEhY29uZmlnRmlsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW5pdCAob3B0aW9ucz86IERpY3Rpb25hcnk8b2JqZWN0Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBzdXBlci5pbml0KCk7XG5cbiAgICAgICAgY29uc3Qgb3B0cyA9IGF3YWl0IHRoaXMuX2xvYWQoKTtcblxuICAgICAgICB0aGlzLl9jaGVja1Vuc2VjdXJlRGF0YUluSlNPTkNvbmZpZ3VyYXRpb24ob3B0cyk7XG5cbiAgICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMgPSBDb25maWd1cmF0aW9uLl9mcm9tT2JqKG9wdHMpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3JtYWxpemVPcHRpb25zQWZ0ZXJMb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmFzeW5jTWVyZ2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhc3luY01lcmdlT3B0aW9ucyAob3B0aW9ucz86IERpY3Rpb25hcnk8b2JqZWN0Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgICBzdXBlci5tZXJnZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmlzQ2xpICYmIHRoaXMuX29wdGlvbnMuYnJvd3NlcnMpXG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLmJyb3dzZXJzLnZhbHVlID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlckluZm8oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZSAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVGbGFncygpO1xuICAgICAgICB0aGlzLl9zZXREZWZhdWx0VmFsdWVzKCk7XG4gICAgICAgIHRoaXMuX3ByZXBhcmVDb21waWxlck9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5QWJvdXRPdmVycmlkZGVuT3B0aW9ucyAod2FybmluZ0xvZz86IFdhcm5pbmdMb2cpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vdmVycmlkZGVuT3B0aW9ucy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgb3B0aW9uc1N0ciAgICA9IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyh0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNTdWZmaXggPSBnZXRQbHVyYWxTdWZmaXgodGhpcy5fb3ZlcnJpZGRlbk9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZW5kZXJlZE1lc3NhZ2UgPSByZW5kZXJUZW1wbGF0ZShXQVJOSU5HX01FU1NBR0VTLmNvbmZpZ09wdGlvbnNXZXJlT3ZlcnJpZGRlbiwgb3B0aW9uc1N0ciwgb3B0aW9uc1N1ZmZpeCk7XG5cbiAgICAgICAgQ29uZmlndXJhdGlvbi5fc2hvd0NvbnNvbGVXYXJuaW5nKHJlbmRlcmVkTWVzc2FnZSk7XG5cbiAgICAgICAgaWYgKHdhcm5pbmdMb2cpXG4gICAgICAgICAgICB3YXJuaW5nTG9nLmFkZFdhcm5pbmcocmVuZGVyZWRNZXNzYWdlKTtcblxuICAgICAgICB0aGlzLl9vdmVycmlkZGVuT3B0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlBYm91dERlcHJlY2F0ZWRPcHRpb25zICh3YXJuaW5nTG9nOiBXYXJuaW5nTG9nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKChuYW1lLCBvcHRpb24pID0+IG5hbWUgaW4gREVQUkVDQVRFRCAmJiBvcHRpb24udmFsdWUgIT09IHZvaWQgMCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb25OYW1lIGluIGRlcHJlY2F0ZWRPcHRpb25zKVxuICAgICAgICAgICAgd2FybmluZ0xvZy5hZGRXYXJuaW5nKGdldERlcHJlY2F0aW9uTWVzc2FnZShERVBSRUNBVEVEW29wdGlvbk5hbWVdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdGFydE9wdGlvbnMgKCk6IFRlc3RDYWZlU3RhcnRPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RuYW1lOiAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmhvc3RuYW1lKSxcbiAgICAgICAgICAgIHBvcnQxOiAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnBvcnQxKSxcbiAgICAgICAgICAgIHBvcnQyOiAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnBvcnQyKSxcbiAgICAgICAgICAgIHNzbDogICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLnNzbCksXG4gICAgICAgICAgICBkZXZlbG9wbWVudE1vZGU6ICAgIHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5kZXZlbG9wbWVudE1vZGUpLFxuICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6ICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMucmV0cnlUZXN0UGFnZXMpLFxuICAgICAgICAgICAgY2FjaGU6ICAgICAgICAgICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMuY2FjaGUpLFxuICAgICAgICAgICAgZGlzYWJsZUh0dHAyOiAgICAgICB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMuZGlzYWJsZUh0dHAyKSxcbiAgICAgICAgICAgIGRpc2FibGVDcm9zc0RvbWFpbjogdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRpc2FibGVDcm9zc0RvbWFpbiksXG4gICAgICAgICAgICBwcm94eWxlc3M6ICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5uYXRpdmVBdXRvbWF0aW9uKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheU9wdGlvbnMgKCk6IEJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheU9wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmV0cnlUZXN0UGFnZXM6IHRoaXMuZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5yZXRyeVRlc3RQYWdlcyksXG4gICAgICAgICAgICBwcm94eWxlc3M6ICAgICAgdGhpcy5nZXRPcHRpb24oT1BUSU9OX05BTUVTLm5hdGl2ZUF1dG9tYXRpb24pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrVW5zZWN1cmVEYXRhSW5KU09OQ29uZmlndXJhdGlvbiAob3B0czogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5faXNKU09OQ29uZmlndXJhdGlvbigpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGlmIChvcHRzPy5bT1BUSU9OX05BTUVTLmRhc2hib2FyZF0/LnRva2VuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5kYXNoYm9hcmRUb2tlbkluSlNPTik7XG4gICAgfVxuICAgIHByaXZhdGUgX3ByZXBhcmVGbGFnIChuYW1lOiBzdHJpbmcsIHNvdXJjZSA9IE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2Vuc3VyZU9wdGlvbihuYW1lLCB2b2lkIDAsIHNvdXJjZSk7XG5cbiAgICAgICAgb3B0aW9uLnZhbHVlID0gISFvcHRpb24udmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUZsYWdzICgpOiB2b2lkIHtcbiAgICAgICAgT1BUSU9OX0ZMQUdfTkFNRVMuZm9yRWFjaChuYW1lID0+IHRoaXMuX3ByZXBhcmVGbGFnKG5hbWUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlSW5pdEZsYWdzICgpOiB2b2lkIHtcbiAgICAgICAgT1BUSU9OX0lOSVRfRkxBR19OQU1FUy5mb3JFYWNoKG5hbWUgPT4gdGhpcy5fcHJlcGFyZUZsYWcobmFtZSwgT3B0aW9uU291cmNlLkRlZmF1bHQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ub3JtYWxpemVPcHRpb25zQWZ0ZXJMb2FkICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZVNzbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZUluaXRGbGFncygpO1xuICAgICAgICB0aGlzLl9wcmVwYXJlRmlsdGVyRm4oKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlQXJyYXlPcHRpb24oT1BUSU9OX05BTUVTLnNyYyk7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5T3B0aW9uKE9QVElPTl9OQU1FUy5icm93c2Vycyk7XG4gICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5T3B0aW9uKE9QVElPTl9OQU1FUy5jbGllbnRTY3JpcHRzKTtcbiAgICAgICAgdGhpcy5fcHJlcGFyZVJlcG9ydGVycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVGaWx0ZXJGbiAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbiA9IHRoaXMuX2Vuc3VyZU9wdGlvbihPUFRJT05fTkFNRVMuZmlsdGVyLCBERUZBVUxUX0ZJTFRFUl9GTiwgT3B0aW9uU291cmNlLkRlZmF1bHQpO1xuXG4gICAgICAgIGlmICghZmlsdGVyT3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlck9wdGlvblZhbHVlID0gZmlsdGVyT3B0aW9uLnZhbHVlIGFzIEZpbHRlck9wdGlvbjtcblxuICAgICAgICBpZiAoZmlsdGVyT3B0aW9uVmFsdWUudGVzdEdyZXApXG4gICAgICAgICAgICBmaWx0ZXJPcHRpb25WYWx1ZS50ZXN0R3JlcCA9IGdldEdyZXBPcHRpb25zKE9QVElPTl9OQU1FUy5maWx0ZXJUZXN0R3JlcCwgZmlsdGVyT3B0aW9uVmFsdWUudGVzdEdyZXAgYXMgc3RyaW5nKTtcblxuICAgICAgICBpZiAoZmlsdGVyT3B0aW9uVmFsdWUuZml4dHVyZUdyZXApXG4gICAgICAgICAgICBmaWx0ZXJPcHRpb25WYWx1ZS5maXh0dXJlR3JlcCA9IGdldEdyZXBPcHRpb25zKE9QVElPTl9OQU1FUy5maWx0ZXJGaXh0dXJlR3JlcCwgZmlsdGVyT3B0aW9uVmFsdWUuZml4dHVyZUdyZXAgYXMgc3RyaW5nKTtcblxuICAgICAgICBmaWx0ZXJPcHRpb24udmFsdWUgID0gZ2V0RmlsdGVyRm4oZmlsdGVyT3B0aW9uLnZhbHVlKSBhcyBGdW5jdGlvbjtcbiAgICAgICAgZmlsdGVyT3B0aW9uLnNvdXJjZSA9IE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Vuc3VyZVNjcmVlbnNob3RPcHRpb25zICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGF0aCAgICAgICAgPSByZXNvbHZlUGF0aFJlbGF0aXZlbHlDd2QoREVGQVVMVF9TQ1JFRU5TSE9UU19ESVJFQ1RPUlkpO1xuICAgICAgICBjb25zdCBzY3JlZW5zaG90cyA9IHRoaXMuX2Vuc3VyZU9wdGlvbihPUFRJT05fTkFNRVMuc2NyZWVuc2hvdHMsIHt9LCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbikudmFsdWUgYXMgRGljdGlvbmFyeTxzdHJpbmd8Ym9vbGVhbj47XG5cbiAgICAgICAgaWYgKCFzY3JlZW5zaG90cy5wYXRoKVxuICAgICAgICAgICAgc2NyZWVuc2hvdHMucGF0aCA9IHBhdGg7XG5cbiAgICAgICAgaWYgKHNjcmVlbnNob3RzLnRodW1ibmFpbHMgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHNjcmVlbnNob3RzLnRodW1ibmFpbHMgPSBERUZBVUxUX1NDUkVFTlNIT1RfVEhVTUJOQUlMUztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbnN1cmVTa2lwSnNPcHRpb25zICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZW5zdXJlT3B0aW9uKE9QVElPTl9OQU1FUy5za2lwSnNFcnJvcnMsIHZvaWQgMCwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZvaWQgMClcbiAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9ICEhb3B0aW9uLnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVSZXBvcnRlcnMgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXBvcnRlck9wdGlvbiA9IHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnJlcG9ydGVyXTtcblxuICAgICAgICBpZiAoIXJlcG9ydGVyT3B0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gY2FzdEFycmF5KHJlcG9ydGVyT3B0aW9uLnZhbHVlIGFzIFJlcG9ydGVyT3B0aW9uKTtcblxuICAgICAgICByZXBvcnRlck9wdGlvbi52YWx1ZSA9IHByZXBhcmVSZXBvcnRlcnMob3B0aW9uVmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVTc2xPcHRpb25zICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc3NsT3B0aW9ucyA9IHRoaXMuX29wdGlvbnNbT1BUSU9OX05BTUVTLnNzbF07XG5cbiAgICAgICAgaWYgKCFzc2xPcHRpb25zKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHNzbE9wdGlvbnMudmFsdWUgPSBhd2FpdCBnZXRTU0xPcHRpb25zKHNzbE9wdGlvbnMudmFsdWUgYXMgc3RyaW5nKSBhcyBEaWN0aW9uYXJ5PHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI+O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldERlZmF1bHRWYWx1ZXMgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnNlbGVjdG9yVGltZW91dCwgREVGQVVMVF9USU1FT1VULnNlbGVjdG9yLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuYXNzZXJ0aW9uVGltZW91dCwgREVGQVVMVF9USU1FT1VULmFzc2VydGlvbiwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnBhZ2VMb2FkVGltZW91dCwgREVGQVVMVF9USU1FT1VULnBhZ2VMb2FkLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuc3BlZWQsIERFRkFVTFRfU1BFRURfVkFMVUUsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5hcHBJbml0RGVsYXksIERFRkFVTFRfQVBQX0lOSVRfREVMQVksIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5jb25jdXJyZW5jeSwgREVGQVVMVF9DT05DVVJSRU5DWV9WQUxVRSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnNyYywgREVGQVVMVF9TT1VSQ0VfRElSRUNUT1JJRVMsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5kZXZlbG9wbWVudE1vZGUsIERFRkFVTFRfREVWRUxPUE1FTlRfTU9ERSwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLnJldHJ5VGVzdFBhZ2VzLCBERUZBVUxUX1JFVFJZX1RFU1RfUEFHRVMsIE9wdGlvblNvdXJjZS5Db25maWd1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlT3B0aW9uV2l0aFZhbHVlKE9QVElPTl9OQU1FUy5kaXNhYmxlSHR0cDIsIERFRkFVTFRfRElTQUJMRV9IVFRQMiwgT3B0aW9uU291cmNlLkNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB0aGlzLl9lbnN1cmVPcHRpb25XaXRoVmFsdWUoT1BUSU9OX05BTUVTLm5hdGl2ZUF1dG9tYXRpb24sIERFRkFVTFRfUFJPWFlMRVNTLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU9wdGlvbldpdGhWYWx1ZShPUFRJT05fTkFNRVMuZGlzYWJsZUNyb3NzRG9tYWluLCBERUZBVUxUX0RJU0FCTEVfQ1JPU1NfRE9NQUlOLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgdGhpcy5fZW5zdXJlU2NyZWVuc2hvdE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fZW5zdXJlU2tpcEpzT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVDb21waWxlck9wdGlvbnMgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSB0aGlzLl9lbnN1cmVPcHRpb24oT1BUSU9OX05BTUVTLmNvbXBpbGVyT3B0aW9ucywgZ2V0RGVmYXVsdENvbXBpbGVyT3B0aW9ucygpLCBPcHRpb25Tb3VyY2UuQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgY29tcGlsZXJPcHRpb25zLnZhbHVlID0gY29tcGlsZXJPcHRpb25zLnZhbHVlIHx8IGdldERlZmF1bHRDb21waWxlck9wdGlvbnMoKTtcblxuICAgICAgICBjb25zdCB0c0NvbmZpZ1BhdGggPSB0aGlzLmdldE9wdGlvbihPUFRJT05fTkFNRVMudHNDb25maWdQYXRoKTtcblxuICAgICAgICBpZiAodHNDb25maWdQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBjb21waWxlck9wdGlvblZhbHVlICAgICA9IGNvbXBpbGVyT3B0aW9ucy52YWx1ZSBhcyBDb21waWxlck9wdGlvbnM7XG4gICAgICAgICAgICBsZXQgdHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucyA9IGNvbXBpbGVyT3B0aW9uVmFsdWVbQ3VzdG9taXphYmxlQ29tcGlsZXJzLnR5cGVzY3JpcHRdIGFzIFR5cGVTY3JpcHRDb21waWxlck9wdGlvbnM7XG5cbiAgICAgICAgICAgIHR5cGVTY3JpcHRDb21waWxlck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBjb25maWdQYXRoOiB0c0NvbmZpZ1BhdGgsXG4gICAgICAgICAgICB9LCB0eXBlU2NyaXB0Q29tcGlsZXJPcHRpb25zKTtcblxuICAgICAgICAgICAgKGNvbXBpbGVyT3B0aW9ucy52YWx1ZSBhcyBDb21waWxlck9wdGlvbnMpW0N1c3RvbWl6YWJsZUNvbXBpbGVycy50eXBlc2NyaXB0XSA9IHR5cGVTY3JpcHRDb21waWxlck9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRCcm93c2VySW5mbyAoKTogUHJvbWlzZTxCcm93c2VySW5mb1NvdXJjZVtdPiB7XG4gICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCBicm93c2VycyA9IEFycmF5LmlzQXJyYXkodGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZSkgPyBbLi4udGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZV0gOiBbdGhpcy5fb3B0aW9ucy5icm93c2Vycy52YWx1ZV07XG5cbiAgICAgICAgY29uc3QgYnJvd3NlckluZm8gPSBhd2FpdCBQcm9taXNlLmFsbChicm93c2Vycy5tYXAoYnJvd3NlciA9PiBicm93c2VyUHJvdmlkZXJQb29sLmdldEJyb3dzZXJJbmZvKGJyb3dzZXIpKSk7XG5cbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4oYnJvd3NlckluZm8pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBfaXNDb25maWd1cmF0aW9uRmlsZUV4aXN0cyAoZmlsZVBhdGggPSB0aGlzLmZpbGVQYXRoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IGZpbGVFeGlzdHMgPSBhd2FpdCBzdXBlci5faXNDb25maWd1cmF0aW9uRmlsZUV4aXN0cyhmaWxlUGF0aCk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzICYmIHRoaXMuX2lzRXhwbGljaXRDb25maWcpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRUZXN0Y2FmZUNvbmZpZ3VyYXRpb25GaWxlLCBmaWxlUGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIGZpbGVFeGlzdHM7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgRklMRU5BTUVTICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBDT05GSUdVUkFUSU9OX0ZJTEVOQU1FUztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5zdXJlSG9zdG5hbWUgKGNhbGN1bGF0ZUZuOiBDYWxjdWxhdGVIb3N0bmFtZUZuID0gZ2V0VmFsaWRIb3N0bmFtZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgaG9zdG5hbWUgPSB0aGlzLmdldE9wdGlvbjxzdHJpbmc+KE9QVElPTl9OQU1FUy5ob3N0bmFtZSk7XG5cbiAgICAgICAgaG9zdG5hbWUgPSBhd2FpdCBjYWxjdWxhdGVGbihob3N0bmFtZSk7XG5cbiAgICAgICAgdGhpcy5tZXJnZU9wdGlvbnMoeyBob3N0bmFtZSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2FsY3VsYXRlSG9zdG5hbWUgKHsgcHJveHlsZXNzIH0gPSB7IHByb3h5bGVzczogZmFsc2UgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUhvc3RuYW1lKGFzeW5jIGhvc3RuYW1lID0+IHtcbiAgICAgICAgICAgIGlmIChwcm94eWxlc3MpXG4gICAgICAgICAgICAgICAgaG9zdG5hbWUgPSBMT0NBTEhPU1RfTkFNRVMuTE9DQUxIT1NUO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGhvc3RuYW1lID0gYXdhaXQgZ2V0VmFsaWRIb3N0bmFtZShob3N0bmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBob3N0bmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -130,7 +130,7 @@ exports.default = {
|
|
|
130
130
|
[types_1.RUNTIME_ERRORS.invalidCustomActionType]: `TestCafe cannot parse the "{actionName}" action, because the action definition is invalid. Format the definition in accordance with the custom actions guide: ${DOCUMENTATION_LINKS.CUSTOM_ACTIONS}`,
|
|
131
131
|
[types_1.RUNTIME_ERRORS.cannotImportESMInCommonsJS]: 'Cannot import the {esModule} ECMAScript module from {targetFile}. Use a dynamic import() statement or enable the --esm CLI flag.',
|
|
132
132
|
[types_1.RUNTIME_ERRORS.proxyInitializedMoreThanOnce]: 'The proxy was initialized more than once.',
|
|
133
|
-
[types_1.RUNTIME_ERRORS.setProxylessForUnsupportedBrowsers]: 'The
|
|
133
|
+
[types_1.RUNTIME_ERRORS.setProxylessForUnsupportedBrowsers]: 'The following browser(s) do not support the Native Automation mode: {browsers}.',
|
|
134
134
|
};
|
|
135
135
|
module.exports = exports.default;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9ydW50aW1lL3RlbXBsYXRlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0VBQWdFO0FBQ2hFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsZ0VBQWdFOzs7OztBQUVoRSxvQ0FBMEM7QUFDMUMsdUZBQThFO0FBQzlFLCtDQUFpRTtBQUNqRSxpR0FBZ0s7QUFFaEssTUFBTSxtQkFBbUIsR0FBRztJQUN4QixxQkFBcUIsRUFBRSxpR0FBaUc7SUFDeEgsZUFBZSxFQUFRLDhFQUE4RTtJQUNyRyxhQUFhLEVBQVUseUZBQXlGO0lBQ2hILGNBQWMsRUFBUyxxRkFBcUY7Q0FDL0csQ0FBQztBQUVGLGtCQUFlO0lBQ1gsQ0FBQyxzQkFBYyxDQUFDLG1DQUFtQyxDQUFDLEVBQUcseUVBQXlFO0lBQ2hJLENBQUMsc0JBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLHVGQUF1RjtJQUM5SSxDQUFDLHNCQUFjLENBQUMsbUJBQW1CLENBQUMsRUFBbUIseUlBQXlJO0lBQ2hNLENBQUMsc0JBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLDhFQUE4RTtJQUNySSxDQUFDLHNCQUFjLENBQUMsbUNBQW1DLENBQUMsRUFBRyxpREFBaUQ7SUFDeEcsQ0FBQyxzQkFBYyxDQUFDLGdDQUFnQyxDQUFDLEVBQU0sbURBQW1EO0lBQzFHLENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFxQiwwR0FBMEc7SUFDakssQ0FBQyxzQkFBYyxDQUFDLHVCQUF1QixDQUFDLEVBQWUsb0RBQW9EO0lBQzNHLENBQUMsc0JBQWMsQ0FBQyxhQUFhLENBQUMsRUFBeUIsbUNBQW1DO0lBQzFGLENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFxQixpRUFBaUU7UUFDakUsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixrREFBa0Q7UUFDbEQsOERBQThELG1CQUFtQixDQUFD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SUFBSSxDQUFDLCtFQUFpRCxDQUFDLENBQUMsR0FBRztJQUMxUSxDQUFDLHNCQUFjLENBQUMsNEJBQTRCLENBQUMsRUFBb0IsbVdBQW1XO0lBQ3BhLENBQUMsc0JBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFrQiw4SUFBK0ksbUJBQW1CLENBQUMsY0FBZSxFQUFFO0lBQ3JQLENBQUMsc0JBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUF5QixpS0FBa0ssbUJBQW1CLENBQUMsY0FBZSxFQUFFO0lBQ3hRLENBQUMsc0JBQWMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFzQixrSUFBa0k7SUFDbk0sQ0FBQyxzQkFBYyxDQUFDLDRCQUE0QixDQUFDLEVBQW9CLDJDQUEyQztJQUM1RyxDQUFDLHNCQUFjLENBQUMsa0NBQWtDLENBQUMsRUFBYywwRUFBMEU7Q0FDOUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdBUk5JTkc6IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci5cbi8vIERvIG5vdCB1c2UgYW55IGJyb3dzZXIgb3Igbm9kZS1zcGVjaWZpYyBBUEkhXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uRXJyb3JIaW50IGZyb20gJy4uLy4uL2Jyb3dzZXIvY29ubmVjdGlvbi9lcnJvci1oaW50cyc7XG5pbXBvcnQgeyBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IHsgU0tJUF9KU19FUlJPUlNfT1BUSU9OU19PQkpFQ1RfT1BUSU9OX05BTUVTLCBTS0lQX0pTX0VSUk9SU19DQUxMQkFDS19XSVRIX09QVElPTlNfT1BUSU9OX05BTUVTIH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9za2lwLWpzLWVycm9ycy1vcHRpb24tbmFtZXMnO1xuXG5jb25zdCBET0NVTUVOVEFUSU9OX0xJTktTID0ge1xuICAgIFRFU1RfU09VUkNFX1BBUkFNRVRFUjogJ2h0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDI2MzkvcmVmZXJlbmNlL2NvbW1hbmQtbGluZS1pbnRlcmZhY2UjZmlsZS1wYXRoZ2xvYi1wYXR0ZXJuJyxcbiAgICBGSUxURVJfU0VUVElOR1M6ICAgICAgICdodHRwczovL3Rlc3RjYWZlLmlvL2RvY3VtZW50YXRpb24vNDAyNjM4L3JlZmVyZW5jZS9jb25maWd1cmF0aW9uLWZpbGUjZmlsdGVyJyxcbiAgICBIRUFETEVTU19NT0RFOiAgICAgICAgICdodHRwczovL3Rlc3RjYWZlLmlvL2RvY3VtZW50YXRpb24vNDAyODI4L2d1aWRlcy9jb25jZXB0cy9icm93c2VycyN0ZXN0LWluLWhlYWRsZXNzLW1vZGUnLFxuICAgIENVU1RPTV9BQ1RJT05TOiAgICAgICAgJ2h0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDQxNTAvZ3VpZGVzL2FkdmFuY2VkLWd1aWRlcy9jdXN0b20tdGVzdC1hY3Rpb25zJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90Q3JlYXRlTXVsdGlwbGVMaXZlTW9kZVJ1bm5lcnNdOiAgJ0Nhbm5vdCBsYXVuY2ggbXVsdGlwbGUgbGl2ZSBtb2RlIGluc3RhbmNlcyBvZiB0aGUgVGVzdENhZmUgdGVzdCBydW5uZXIuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuTGl2ZU1vZGVSdW5uZXJNdWx0aXBsZVRpbWVzXTogJ0Nhbm5vdCBsYXVuY2ggdGhlIHNhbWUgbGl2ZSBtb2RlIGluc3RhbmNlIG9mIHRoZSBUZXN0Q2FmZSB0ZXN0IHJ1bm5lciBtdWx0aXBsZSB0aW1lcy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5icm93c2VyRGlzY29ubmVjdGVkXTogICAgICAgICAgICAgICAgICAnVGhlIHt1c2VyQWdlbnR9IGJyb3dzZXIgZGlzY29ubmVjdGVkLiBJZiB5b3UgZGlkIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB5b3Vyc2VsZiwgYnJvd3NlciBwZXJmb3JtYW5jZSBvciBuZXR3b3JrIGlzc3VlcyBtYXkgYmUgYXQgZmF1bHQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuQWdhaW5zdERpc2Nvbm5lY3RlZEJyb3dzZXJzXTogJ1RoZSBmb2xsb3dpbmcgYnJvd3NlcnMgZGlzY29ubmVjdGVkOiB7dXNlckFnZW50c30uIENhbm5vdCBydW4gZnVydGhlciB0ZXN0cy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50ZXN0UnVuUmVxdWVzdEluRGlzY29ubmVjdGVkQnJvd3Nlcl06ICAnXCJ7YnJvd3Nlcn1cIiBkaXNjb25uZWN0ZWQgZHVyaW5nIHRlc3QgZXhlY3V0aW9uLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEVzdGFibGlzaEJyb3dzZXJDb25uZWN0aW9uXTogICAgICdDYW5ub3QgZXN0YWJsaXNoIG9uZSBvciBtb3JlIGJyb3dzZXIgY29ubmVjdGlvbnMuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZEJyb3dzZXJdOiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBmaW5kIHRoZSBicm93c2VyLiBcInticm93c2VyfVwiIGlzIG5laXRoZXIgYSBrbm93biBicm93c2VyIGFsaWFzLCBub3IgYSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgZmlsZS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5icm93c2VyUHJvdmlkZXJOb3RGb3VuZF06ICAgICAgICAgICAgICAnQ2Fubm90IGZpbmQgdGhlIFwie3Byb3ZpZGVyTmFtZX1cIiBicm93c2VyIHByb3ZpZGVyLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmJyb3dzZXJOb3RTZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICdZb3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGEgYnJvd3Nlci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50ZXN0RmlsZXNOb3RGb3VuZF06ICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgdGVzdCBmaWxlcyBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOiBcIntjd2R9XCIuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDaGVjayBwYXR0ZXJucyBmb3IgZXJyb3JzOlxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne3NvdXJjZUxpc3R9XFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvciBsYXVuY2ggVGVzdENhZmUgZnJvbSBhIGRpZmZlcmVudCBkaXJlY3RvcnkuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3BlY2lmeSB0ZXN0IGxvY2F0aW9ucywgc2VlICR7RE9DVU1FTlRBVElPTl9MSU5LUy5URVNUX1NPVVJDRV9QQVJBTUVURVJ9LmAsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMubm9UZXN0c1RvUnVuXTogXCJTb3VyY2UgZmlsZXMgZG8gbm90IGNvbnRhaW4gdmFsaWQgJ2ZpeHR1cmUnIGFuZCAndGVzdCcgZGVjbGFyYXRpb25zLlwiLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLm5vVGVzdHNUb1J1bkR1ZUZpbHRlcmluZ106ICdObyB0ZXN0cyBtYXRjaCB5b3VyIGZpbHRlci5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNlZSAke0RPQ1VNRU5UQVRJT05fTElOS1MuRklMVEVSX1NFVFRJTkdTfS5gLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRSZXBvcnRlckZvckFsaWFzXTogICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntuYW1lfVwiIHJlcG9ydGVyIGRvZXMgbm90IGV4aXN0LiBDaGVjayB0aGUgcmVwb3J0ZXIgcGFyYW1ldGVyIGZvciBlcnJvcnMuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubXVsdGlwbGVTYW1lU3RyZWFtUmVwb3J0ZXJzXTogICAgICAgICAgICAgICAgICAgICAgICAnUmVwb3J0ZXJzIGNhbm5vdCBzaGFyZSBvdXRwdXQgc3RyZWFtcy4gVGhlIGZvbGxvd2luZyByZXBvcnRlcnMgaW50ZXJmZXJlIHdpdGggb25lIGFub3RoZXI6IFwie3JlcG9ydGVyc31cIi4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5vcHRpb25WYWx1ZUlzTm90VmFsaWRSZWdFeHBdOiAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5vcHRpb25WYWx1ZUlzTm90VmFsaWRLZXlWYWx1ZV06ICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGtleS12YWx1ZSBwYWlyLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRRdWFyYW50aW5lT3B0aW9uXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiBkb2VzIG5vdCBleGlzdC4gU3BlY2lmeSBcImF0dGVtcHRMaW1pdFwiIGFuZCBcInN1Y2Nlc3NUaHJlc2hvbGRcIiB0byBjb25maWd1cmUgcXVhcmFudGluZSBtb2RlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRRdWFyYW50aW5lUGFyYW1ldGVyc1JhdGlvXTogICAgICAgICAgICAgICAgICAgJ1RoZSB2YWx1ZSBvZiBcImF0dGVtcHRMaW1pdFwiICh7YXR0ZW1wdExpbWl0fSkgc2hvdWxkIGJlIGdyZWF0ZXIgdGhlbiB0aGUgdmFsdWUgb2YgXCJzdWNjZXNzVGhyZXNob2xkXCIgKHtzdWNjZXNzVGhyZXNob2xkfSkuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZEF0dGVtcHRMaW1pdFZhbHVlXTogICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIFwie2F0dGVtcHRMaW1pdH1cIiBwYXJhbWV0ZXIgb25seSBhY2NlcHRzIHZhbHVlcyBvZiB7TUlOX0FUVEVNUFRfTElNSVR9IGFuZCB1cC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkU3VjY2Vzc1RocmVzaG9sZFZhbHVlXTogICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7c3VjY2Vzc1RocmVzaG9sZH1cIiBwYXJhbWV0ZXIgb25seSBhY2NlcHRzIHZhbHVlcyBvZiB7TUlOX1NVQ0NFU1NfVEhSRVNIT0xEfSBhbmQgdXAuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFNwZWVkVmFsdWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3BlZWQgc2hvdWxkIGJlIGEgbnVtYmVyIGJldHdlZW4gMC4wMSBhbmQgMS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkQ29uY3VycmVuY3lGYWN0b3JdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgY29uY3VycmVuY3kgZmFjdG9yIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdERpdmlkZVJlbW90ZXNDb3VudEJ5Q29uY3VycmVuY3ldOiAgICAgICAgICAgICAgJ1RoZSBudW1iZXIgb2YgcmVtb3RlIGJyb3dzZXJzIHNob3VsZCBiZSBkaXZpc2libGUgYnkgdGhlIGNvbmN1cnJlbmN5IGZhY3Rvci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RTZXRDb25jdXJyZW5jeVdpdGhDRFBQb3J0XTogICAgICAgICAgICAgICAgICAgICdUaGUgdmFsdWUgb2YgdGhlIFwiY29uY3VycmVuY3lcIiBvcHRpb24gaW5jbHVkZXMgdGhlIENEUCBwb3J0LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnBvcnRzT3B0aW9uUmVxdWlyZXNUd29OdW1iZXJzXTogICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIi0tcG9ydHNcIiBhcmd1bWVudCBhY2NlcHRzIHR3byB2YWx1ZXMgYXQgYSB0aW1lLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnBvcnRJc05vdEZyZWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BvcnQge3BvcnROdW19IGlzIG9jY3VwaWVkIGJ5IGFub3RoZXIgcHJvY2Vzcy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkSG9zdG5hbWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcmVzb2x2ZSBob3N0bmFtZSBcIntob3N0bmFtZX1cIi4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kU3BlY2lmaWVkVGVzdFNvdXJjZV06ICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgZmluZCBhIHRlc3QgZmlsZSBhdCBcIntwYXRofVwiLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudEZ1bmN0aW9uQ29kZUlzTm90QUZ1bmN0aW9uXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIGEgQ2xpZW50RnVuY3Rpb24gYmVjYXVzZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGlzIHt0eXBlfSwgYW5kIG5vdCBhIGZ1bmN0aW9uLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnNlbGVjdG9ySW5pdGlhbGl6ZWRXaXRoV3JvbmdUeXBlXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIGEgU2VsZWN0b3IgYmVjYXVzZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGlzIHt0eXBlfSwgYW5kIG5vdCBvbmUgb2YgdGhlIGZvbGxvd2luZzogYSBDU1Mgc2VsZWN0b3Igc3RyaW5nLCBhIFNlbGVjdG9yIG9iamVjdCwgYSBub2RlIHNuYXBzaG90LCBhIGZ1bmN0aW9uLCBvciBhIFByb21pc2UgcmV0dXJuZWQgYnkgYSBTZWxlY3Rvci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jbGllbnRGdW5jdGlvbkNhbm5vdFJlc29sdmVUZXN0UnVuXTogICAgICAgICAgICAgICAgIFwieyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBjYW5ub3QgaW1wbGljaXRseSByZXNvbHZlIHRoZSB0ZXN0IHJ1biBpbiBjb250ZXh0IG9mIHdoaWNoIGl0IHNob3VsZCBiZSBleGVjdXRlZC4gSWYgeW91IG5lZWQgdG8gY2FsbCB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGZyb20gdGhlIE5vZGUuanMgQVBJIGNhbGxiYWNrLCBwYXNzIHRoZSB0ZXN0IGNvbnRyb2xsZXIgbWFudWFsbHkgdmlhIHsjaW5zdGFudGlhdGlvbkNhbGxzaXRlTmFtZX0ncyBgLndpdGgoeyBib3VuZFRlc3RSdW46IHQgfSlgIG1ldGhvZCBmaXJzdC4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgZXhlY3V0ZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IG91dHNpZGUgdGhlIHRlc3QgY29kZS5cIixcbiAgICBbUlVOVElNRV9FUlJPUlMucmVxdWVzdENhbm5vdFJlc29sdmVUZXN0UnVuXTogICAgICAgICAgICAgICAgICAgICAgICBcIidyZXF1ZXN0JyBjYW5ub3QgaW1wbGljaXRseSByZXNvbHZlIHRoZSB0ZXN0IHJ1biBpbiBjb250ZXh0IG9mIHdoaWNoIGl0IHNob3VsZCBiZSBleGVjdXRlZC4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgZXhlY3V0ZSAncmVxdWVzdCcgaW4gdGhlIGV4cGVyaW1lbnRhbCBkZWJ1ZyBtb2RlLlwiLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZWdlbmVyYXRvckluQ2xpZW50RnVuY3Rpb25Db2RlXTogICAgICAgICAgICAgICAgICAgIGB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGNvZGUsIGFyZ3VtZW50cyBvciBkZXBlbmRlbmNpZXMgY2Fubm90IGNvbnRhaW4gZ2VuZXJhdG9ycyBvciBcImFzeW5jL2F3YWl0XCIgc3ludGF4ICh1c2UgUHJvbWlzZXMgaW5zdGVhZCkuYCxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZENsaWVudEZ1bmN0aW9uVGVzdFJ1bkJpbmRpbmddOiAgICAgICAgICAgICAgICAnQ2Fubm90IHJlc29sdmUgdGhlIFwiYm91bmRUZXN0UnVuXCIgb3B0aW9uIGJlY2F1c2UgaXRzIHZhbHVlIGlzIG5vdCBhIHRlc3QgY29udHJvbGxlci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkVmFsdWVUeXBlXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7c210aGd9ICh7YWN0dWFsfSkgaXMgbm90IG9mIGV4cGVjdGVkIHR5cGUgKHt0eXBlfSkuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudW5zdXBwb3J0ZWRVcmxQcm90b2NvbF06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCB7d2hhdH06IFwie3VybH1cIi4gVGVzdENhZmUgY2Fubm90IGV4ZWN1dGUgdGhlIHRlc3QgYmVjYXVzZSB0aGUge3doYXR9IGluY2x1ZGVzIHRoZSB7cHJvdG9jb2x9IHByb3RvY29sLiBUZXN0Q2FmZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHByb3RvY29sczogaHR0cDovLywgaHR0cHM6Ly8gYW5kIGZpbGU6Ly8uJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudGVzdENvbnRyb2xsZXJQcm94eUNhbm5vdFJlc29sdmVUZXN0UnVuXTogICAgICAgICAgICBgQ2Fubm90IGltcGxpY2l0bHkgcmVzb2x2ZSB0aGUgdGVzdCBydW4gaW4gdGhlIGNvbnRleHQgb2Ygd2hpY2ggdGhlIHRlc3QgY29udHJvbGxlciBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkLiBVc2UgdGVzdCBmdW5jdGlvbidzICd0JyBhcmd1bWVudCBpbnN0ZWFkLmAsXG4gICAgW1JVTlRJTUVfRVJST1JTLnRpbWVMaW1pdGVkUHJvbWlzZVRpbWVvdXRFeHBpcmVkXTogICAgICAgICAgICAgICAgICAgJ0EgUHJvbWlzZSB0aW1lZCBvdXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90U2V0VmlkZW9PcHRpb25zV2l0aG91dEJhc2VWaWRlb1BhdGhTcGVjaWZpZWRdOiAnWW91IGNhbm5vdCBtYW5hZ2UgYWR2YW5jZWQgdmlkZW8gcGFyYW1ldGVycyB3aGVuIHRoZSB2aWRlbyByZWNvcmRpbmcgY2FwYWJpbGl0eSBpcyBvZmYuIFNwZWNpZnkgdGhlIHJvb3Qgc3RvcmFnZSBmb2xkZXIgZm9yIHZpZGVvIGNvbnRlbnQgdG8gZW5hYmxlIHZpZGVvIHJlY29yZGluZy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW5dOiAgICAgICAgICAgICAgICAgICAgICdZb3UgY2Fubm90IGNhbGwgdGhlIFwie21ldGhvZE5hbWV9XCIgbWV0aG9kIG1vcmUgdGhhbiBvbmNlLiBTcGVjaWZ5IGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgaW5zdGVhZC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkUmVwb3J0ZXJPdXRwdXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU3BlY2lmeSBhIGZpbGUgbmFtZSBvciBhIHdyaXRhYmxlIHN0cmVhbSBhcyB0aGUgcmVwb3J0ZXIncyBvdXRwdXQgdGFyZ2V0LlwiLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RSZWFkU1NMQ2VydEZpbGVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcmVhZCB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5IHRoZSBcIntvcHRpb259XCIgc3NsIG9wdGlvbiAoXCJ7cGF0aH1cIikuIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UHJlcGFyZVRlc3RzRHVlVG9FcnJvcl06ICdDYW5ub3QgcHJlcGFyZSB0ZXN0cyBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcjpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyTWVzc2FnZX0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFBhcnNlUmF3RmlsZV06ICdDYW5ub3QgcGFyc2UgYSByYXcgdGVzdCBmaWxlIGF0IFwie3BhdGh9XCIgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3I6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJNZXNzYWdlfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMudGVzdGVkQXBwRmFpbGVkV2l0aEVycm9yXTogJ1RoZSB3ZWIgYXBwbGljYXRpb24gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcjpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vyck1lc3NhZ2V9JyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy51bmFibGVUb09wZW5Ccm93c2VyXTogJ1VuYWJsZSB0byBvcGVuIHRoZSBcInthbGlhc31cIiBicm93c2VyIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJNZXNzYWdlfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMucmVxdWVzdEhvb2tDb25maWd1cmVBUElFcnJvcl06ICdBdHRlbXB0IHRvIGNvbmZpZ3VyZSBhIHJlcXVlc3QgaG9vayByZXN1bHRlZCBpbiB0aGUgZm9sbG93aW5nIGVycm9yOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tyZXF1ZXN0SG9va05hbWV9OiB7ZXJyTXNnfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuZm9yYmlkZGVuQ2hhcmF0ZXJzSW5TY3JlZW5zaG90UGF0aF06ICdUaGVyZSBhcmUgZm9yYmlkZGVuIGNoYXJhY3RlcnMgaW4gdGhlIFwie3NjcmVlbnNob3RQYXRofVwiIHtzY3JlZW5zaG90UGF0aFR5cGV9OlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB7Zm9yYmlkZGVuQ2hhcnNEZXNjcmlwdGlvbn0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRGRk1QRUddOiAnVGVzdENhZmUgY2Fubm90IHJlY29yZCB2aWRlb3MgYmVjYXVzZSBpdCBjYW5ub3QgbG9jYXRlIHRoZSBGRm1wZWcgZXhlY3V0YWJsZS4gVHJ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHNvbHV0aW9uczpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqIGFkZCB0aGUgcGF0aCBvZiB0aGUgRkZtcGVnIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKiBzcGVjaWZ5IHRoZSBwYXRoIG9mIHRoZSBGRm1wZWcgZXhlY3V0YWJsZSBpbiB0aGUgRkZNUEVHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgdGhlIGZmbXBlZ1BhdGggb3B0aW9uLFxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyogaW5zdGFsbCB0aGUgQGZmbXBlZy1pbnN0YWxsZXIvZmZtcGVnIG5wbSBwYWNrYWdlLicsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZFR5cGVzY3JpcHRDb25maWd1cmF0aW9uRmlsZV06ICAgICAgICAgICAgJ1wie2ZpbGVQYXRofVwiIGlzIG5vdCBhIHZhbGlkIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdEluaXRpYWxpemVySXNOb3RTcGVjaWZpZWRdOiAgICAgICAgICAgICdJbml0aWFsaXplIHlvdXIgY2xpZW50IHNjcmlwdCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBhIEphdmFTY3JpcHQgc2NyaXB0LCBhIEphdmFTY3JpcHQgZmlsZSBwYXRoLCBvciB0aGUgbmFtZSBvZiBhIEphdmFTY3JpcHQgbW9kdWxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdEJhc2VQYXRoSXNOb3RTcGVjaWZpZWRdOiAgICAgICAgICAgICAgICdTcGVjaWZ5IHRoZSBiYXNlIHBhdGggZm9yIHRoZSBjbGllbnQgc2NyaXB0IGZpbGUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2xpZW50U2NyaXB0SW5pdGlhbGl6ZXJNdWx0aXBsZUNvbnRlbnRTb3VyY2VzXTogICAgJ0NsaWVudCBzY3JpcHRzIGNhbiBvbmx5IGhhdmUgb25lIGluaXRpYWxpemVyOiBKYXZhU2NyaXB0IGNvZGUsIGEgSmF2YVNjcmlwdCBmaWxlIHBhdGgsIG9yIHRoZSBuYW1lIG9mIGEgSmF2YVNjcmlwdCBtb2R1bGUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90TG9hZENsaWVudFNjcmlwdEZyb21QYXRoXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBsb2FkIGEgY2xpZW50IHNjcmlwdCBmcm9tIHtwYXRofS5cXG57ZXJyb3JNZXNzYWdlfScsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdE1vZHVsZUVudHJ5UG9pbnRQYXRoQ2FsY3VsYXRpb25FcnJvcl06ICdBIGNsaWVudCBzY3JpcHQgdHJpZWQgdG8gbG9hZCBhIEphdmFTY3JpcHQgbW9kdWxlIHRoYXQgVGVzdENhZmUgY2Fubm90IGxvY2F0ZTpcXG5cXG57ZXJyb3JNZXNzYWdlfS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5tZXRob2RJc05vdEF2YWlsYWJsZUZvckFuSVBDSG9zdF06ICAgICAgICAgICAgICAgICAnVGhpcyBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBvbiBhIHNlcnZpY2UgaG9zdC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50b29MYXJnZUlQQ1BheWxvYWRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHNwZWNpZmllZCBwYXlsb2FkIGlzIHRvbyBsYXJnZSB0byBmb3JtIGFuIElQQyBwYWNrZXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubWFsZm9ybWVkSVBDTWVzc2FnZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBwcm9jZXNzIGEgbWFsZm9ybWVkIElQQyBtZXNzYWdlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnVuZXhwZWN0ZWRJUENIZWFkUGFja2V0XTogICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgY3JlYXRlIGFuIElQQyBtZXNzYWdlIGR1ZSB0byBhbiB1bmV4cGVjdGVkIElQQyBoZWFkIHBhY2tldC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy51bmV4cGVjdGVkSVBDQm9keVBhY2tldF06ICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IGNyZWF0ZSBhbiBJUEMgbWVzc2FnZSBkdWUgdG8gYW4gdW5leHBlY3RlZCBJUEMgYm9keSBwYWNrZXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudW5leHBlY3RlZElQQ1RhaWxQYWNrZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgYW4gSVBDIG1lc3NhZ2UgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgSVBDIHRhaWwgcGFja2V0LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFJ1bkxvY2FsTm9uSGVhZGxlc3NCcm93c2VyV2l0aG91dERpc3BsYXldOlxuICAgICAgICAnWW91ciBMaW51eCB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgYSBncmFwaGljIHN1YnN5c3RlbSB0byBydW4ge2Jyb3dzZXJBbGlhc30gd2l0aCBhIEdVSS4gJyArXG4gICAgICAgICdZb3UgY2FuIGxhdW5jaCB0aGUgYnJvd3NlciBpbiBoZWFkbGVzcyBtb2RlLiAnICtcbiAgICAgICAgJ0lmIHlvdSB1c2UgYSBwb3J0YWJsZSBicm93c2VyIGV4ZWN1dGFibGUsICcgK1xuICAgICAgICBcInNwZWNpZnkgdGhlIGJyb3dzZXIgYWxpYXMgYmVmb3JlIHRoZSBwYXRoIGluc3RlYWQgb2YgdGhlICdwYXRoJyBwcmVmaXguIFwiICtcbiAgICAgICAgYEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJHtET0NVTUVOVEFUSU9OX0xJTktTLkhFQURMRVNTX01PREV9YCxcblxuICAgIFtSVU5USU1FX0VSUk9SUy51bmNhdWdodEVycm9ySW5SZXBvcnRlcl06ICAgICAgICAgICAnVGhlIFwie21ldGhvZE5hbWV9XCIgbWV0aG9kIG9mIHRoZSBcIntyZXBvcnRlck5hbWV9XCIgcmVwb3J0ZXIgcHJvZHVjZWQgYW4gdW5jYXVnaHQgZXJyb3IuIEVycm9yIGRldGFpbHM6XFxue29yaWdpbmFsRXJyb3J9JyxcbiAgICBbUlVOVElNRV9FUlJPUlMucm9sZUluaXRpYWxpemVkV2l0aFJlbGF0aXZlVXJsXTogICAgJ1lvdSBjYW5ub3Qgc3BlY2lmeSByZWxhdGl2ZSBsb2dpbiBwYWdlIFVSTHMgaW4gdGhlIFJvbGUgY29uc3RydWN0b3IuIFVzZSBhbiBhYnNvbHV0ZSBVUkwuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudHlwZVNjcmlwdENvbXBpbGVyTG9hZGluZ0Vycm9yXTogICAgJ0Nhbm5vdCBsb2FkIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyLlxcbntvcmlnaW5FcnJvck1lc3NhZ2V9LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEN1c3RvbWl6ZVNwZWNpZmllZENvbXBpbGVyc106ICdZb3UgY2Fubm90IHNwZWNpZnkgb3B0aW9ucyBmb3IgdGhlIHtub25jdXN0b21pemFibGVDb21waWxlckxpc3R9IGNvbXBpbGVye3N1ZmZpeH0uJyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RFbmFibGVSZXRyeVRlc3RQYWdlc09wdGlvbl06XG4gICAgICAgICdDYW5ub3QgZW5hYmxlIHRoZSBcXCdyZXRyeVRlc3RQYWdlc1xcJyBvcHRpb24uIEFwcGx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byBzb2x1dGlvbnM6XFxuJyArXG4gICAgICAgICctLSBzZXQgXFwnbG9jYWxob3N0XFwnIGFzIHRoZSB2YWx1ZSBvZiB0aGUgXFwnaG9zdG5hbWVcXCcgb3B0aW9uXFxuJyArXG4gICAgICAgICctLSBydW4gVGVzdENhZmUgb3ZlciBIVFRQU1xcbicsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuYnJvd3NlckNvbm5lY3Rpb25FcnJvcl06ICAgICAgICAgICAgICAgJ3tvcmlnaW5FcnJvck1lc3NhZ2V9XFxue251bU9mTm90T3BlbmVkQ29ubmVjdGlvbn0gb2Yge251bU9mQWxsQ29ubmVjdGlvbnN9IGJyb3dzZXIgY29ubmVjdGlvbnMgaGF2ZSBub3QgYmVlbiBlc3RhYmxpc2hlZDpcXG57bGlzdE9mTm90T3BlbmVkQ29ubmVjdGlvbnN9XFxuXFxuSGludHM6XFxue2xpc3RPZkhpbnRzfScsXG4gICAgW0Jyb3dzZXJDb25uZWN0aW9uRXJyb3JIaW50LlRvb0hpZ2hDb25jdXJyZW5jeUZhY3Rvcl06ICdUaGUgaG9zdCBtYWNoaW5lIG1heSBub3QgYmUgcG93ZXJmdWwgZW5vdWdoIHRvIGhhbmRsZSB0aGUgc3BlY2lmaWVkIGNvbmN1cnJlbmN5IGZhY3RvciAoe2NvbmN1cnJlbmN5RmFjdG9yfSkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVHJ5IHRvIGRlY3JlYXNlIHRoZSBjb25jdXJyZW5jeSBmYWN0b3Igb3IgYWxsb2NhdGUgbW9yZSBjb21wdXRpbmcgcmVzb3VyY2VzIHRvIHRoZSBob3N0IG1hY2hpbmUuJyxcbiAgICBbQnJvd3NlckNvbm5lY3Rpb25FcnJvckhpbnQuVXNlQnJvd3NlckluaXRPcHRpb25dOiAgICAgICAgICAgICAgICdJbmNyZWFzZSB0aGUgdmFsdWUgb2YgdGhlIFwiYnJvd3NlckluaXRUaW1lb3V0XCIgb3B0aW9uIGlmIGl0IGlzIHRvbyBsb3cgKGN1cnJlbnRseToge2Jyb3dzZXJJbml0VGltZW91dE1zZ30pLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIGhvdyBsb25nIFRlc3RDYWZlIHdhaXRzIGZvciBicm93c2VycyB0byBiZSByZWFkeS4nLFxuICAgIFtCcm93c2VyQ29ubmVjdGlvbkVycm9ySGludC5SZXN0RXJyb3JDYXVzZXNdOiAgICAgICAgICAgICAgICAgICAgJ1RoZSBlcnJvciBjYW4gYWxzbyBiZSBjYXVzZWQgYnkgbmV0d29yayBpc3N1ZXMgb3IgcmVtb3RlIGRldmljZSBmYWlsdXJlLiBNYWtlIHN1cmUgdGhhdCB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbiBpcyBzdGFibGUgYW5kIHlvdSBjYW4gcmVhY2ggdGhlIHJlbW90ZSBkZXZpY2UuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZFRlc3RjYWZlQ29uZmlndXJhdGlvbkZpbGVdOiAgICAgICAgICAgICdDYW5ub3QgbG9jYXRlIGEgVGVzdENhZmUgY29uZmlndXJhdGlvbiBmaWxlIGF0IHtmaWxlUGF0aH0uIEVpdGhlciB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgb3IgdGhlIHBhdGggaXMgaW52YWxpZC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5kYXNoYm9hcmRUb2tlbkluSlNPTl06ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0luc2VjdXJlIHRva2VuIGRlY2xhcmF0aW9uOiBjYW5ub3QgZGVjbGFyZSBhIERhc2hib2FyZCB0b2tlbiBpbiBhIEpTT04gY29uZmlndXJhdGlvbiBmaWxlLiBVc2UgYSBKYXZhU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgZGVjbGFyZSBhIERhc2hib2FyZCB0b2tlbiB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiB0aGUgQ0xJLCB0aGUgVGVzdCBSdW5uZXIgQVBJLCB0aGUgVEVTVENBRkVfREFTSEJPQVJEX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnJlbGF0aXZlQmFzZVVybF06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHZhbHVlIG9mIHRoZSBiYXNlVXJsIGFyZ3VtZW50IGNhbm5vdCBiZSByZWxhdGl2ZTogXCJ7YmFzZVVybH1cIicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnJlcXVlc3RVcmxJbnZhbGlkVmFsdWVFcnJvcl06ICAgICAgICAgICAgICAgICAgICAnUmVxdWVzdGVkIHVybCBpc25cXCd0IHZhbGlkICh7YWN0dWFsVmFsdWV9KS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZXF1ZXN0UnVudGltZUVycm9yXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCBieSBhbiBlcnJvcjpcXG57bWVzc2FnZX0nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdFByb3BlcnR5XTogICAgICAgYFRoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiBkb2VzIG5vdCBleGlzdC4gVXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBjb25maWd1cmUgc2tpcEpzRXJyb3JzOiAke2dldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyhPYmplY3Qua2V5cyhTS0lQX0pTX0VSUk9SU19PUFRJT05TX09CSkVDVF9PUFRJT05fTkFNRVMpKX0uYCxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNQcm9wZXJ0eV06IGBUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuIFVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29uZmlndXJlIHNraXBKc0Vycm9ycyBjYWxsYmFjazogJHtnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcoT2JqZWN0LmtleXMoU0tJUF9KU19FUlJPUlNfQ0FMTEJBQ0tfV0lUSF9PUFRJT05TX09QVElPTl9OQU1FUykpfS5gLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkQ29tbWFuZEluSnNvbkNvbXBpbGVyXTogICAgICAgICAgICAgICAgICAgYFRlc3RDYWZlIHRlcm1pbmF0ZWQgdGhlIHRlc3QgcnVuLiBUaGUgXCJ7cGF0aH1cIiBmaWxlIGNvbnRhaW5zIGFuIHVua25vd24gQ2hyb21lIFVzZXIgRmxvdyBhY3Rpb24gXCJ7YWN0aW9ufVwiLiBSZW1vdmUgdGhlIGFjdGlvbiB0byBjb250aW51ZS4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBhcnRpY2xlIGZvciB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIHN1cHBvcnRlZCBDaHJvbWUgVXNlciBGbG93IGFjdGlvbnM6IGh0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDM5OTgvZ3VpZGVzL2V4cGVyaW1lbnRhbC1jYXBhYmlsaXRpZXMvY2hyb21lLXJlcGxheS1zdXBwb3J0I3N1cHBvcnRlZC1yZXBsYXktYWN0aW9uc2AsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDdXN0b21BY3Rpb25zT3B0aW9uVHlwZV06ICAgICAgICAgICAgICAgICBgVGhlIHZhbHVlIG9mIHRoZSBjdXN0b21BY3Rpb25zIG9wdGlvbiBkb2VzIG5vdCBiZWxvbmcgdG8gdHlwZSBPYmplY3QuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBmb3IgY3VzdG9tIGFjdGlvbiBzZXR1cCBpbnN0cnVjdGlvbnM6ICR7IERPQ1VNRU5UQVRJT05fTElOS1MuQ1VTVE9NX0FDVElPTlMgfWAsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDdXN0b21BY3Rpb25UeXBlXTogICAgICAgICAgICAgICAgICAgICAgICBgVGVzdENhZmUgY2Fubm90IHBhcnNlIHRoZSBcInthY3Rpb25OYW1lfVwiIGFjdGlvbiwgYmVjYXVzZSB0aGUgYWN0aW9uIGRlZmluaXRpb24gaXMgaW52YWxpZC4gRm9ybWF0IHRoZSBkZWZpbml0aW9uIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY3VzdG9tIGFjdGlvbnMgZ3VpZGU6ICR7IERPQ1VNRU5UQVRJT05fTElOS1MuQ1VTVE9NX0FDVElPTlMgfWAsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEltcG9ydEVTTUluQ29tbW9uc0pTXTogICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IGltcG9ydCB0aGUge2VzTW9kdWxlfSBFQ01BU2NyaXB0IG1vZHVsZSBmcm9tIHt0YXJnZXRGaWxlfS4gVXNlIGEgZHluYW1pYyBpbXBvcnQoKSBzdGF0ZW1lbnQgb3IgZW5hYmxlIHRoZSAtLWVzbSBDTEkgZmxhZy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5wcm94eUluaXRpYWxpemVkTW9yZVRoYW5PbmNlXTogICAgICAgICAgICAgICAgICAgJ1RoZSBwcm94eSB3YXMgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuc2V0UHJveHlsZXNzRm9yVW5zdXBwb3J0ZWRCcm93c2Vyc106ICAgICAgICAgICAgICdUaGUgXCJwcm94eWxlc3NcIiBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHticm93c2Vyc30gYnJvd3NlcntlbmRpbmd9LicsXG59O1xuIl19
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9ydW50aW1lL3RlbXBsYXRlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0VBQWdFO0FBQ2hFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsZ0VBQWdFOzs7OztBQUVoRSxvQ0FBMEM7QUFDMUMsdUZBQThFO0FBQzlFLCtDQUFpRTtBQUNqRSxpR0FBZ0s7QUFFaEssTUFBTSxtQkFBbUIsR0FBRztJQUN4QixxQkFBcUIsRUFBRSxpR0FBaUc7SUFDeEgsZUFBZSxFQUFRLDhFQUE4RTtJQUNyRyxhQUFhLEVBQVUseUZBQXlGO0lBQ2hILGNBQWMsRUFBUyxxRkFBcUY7Q0FDL0csQ0FBQztBQUVGLGtCQUFlO0lBQ1gsQ0FBQyxzQkFBYyxDQUFDLG1DQUFtQyxDQUFDLEVBQUcseUVBQXlFO0lBQ2hJLENBQUMsc0JBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLHVGQUF1RjtJQUM5SSxDQUFDLHNCQUFjLENBQUMsbUJBQW1CLENBQUMsRUFBbUIseUlBQXlJO0lBQ2hNLENBQUMsc0JBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLDhFQUE4RTtJQUNySSxDQUFDLHNCQUFjLENBQUMsbUNBQW1DLENBQUMsRUFBRyxpREFBaUQ7SUFDeEcsQ0FBQyxzQkFBYyxDQUFDLGdDQUFnQyxDQUFDLEVBQU0sbURBQW1EO0lBQzFHLENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFxQiwwR0FBMEc7SUFDakssQ0FBQyxzQkFBYyxDQUFDLHVCQUF1QixDQUFDLEVBQWUsb0RBQW9EO0lBQzNHLENBQUMsc0JBQWMsQ0FBQyxhQUFhLENBQUMsRUFBeUIsbUNBQW1DO0lBQzFGLENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFxQixpRUFBaUU7UUFDakUsZ0NBQWdDO1FBQ2hDLGtCQUFrQjtRQUNsQixrREFBa0Q7UUFDbEQsOERBQThELG1CQUFtQixDQUFD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SUFBSSxDQUFDLCtFQUFpRCxDQUFDLENBQUMsR0FBRztJQUMxUSxDQUFDLHNCQUFjLENBQUMsNEJBQTRCLENBQUMsRUFBb0IsbVdBQW1XO0lBQ3BhLENBQUMsc0JBQWMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFrQiw4SUFBK0ksbUJBQW1CLENBQUMsY0FBZSxFQUFFO0lBQ3JQLENBQUMsc0JBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUF5QixpS0FBa0ssbUJBQW1CLENBQUMsY0FBZSxFQUFFO0lBQ3hRLENBQUMsc0JBQWMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFzQixrSUFBa0k7SUFDbk0sQ0FBQyxzQkFBYyxDQUFDLDRCQUE0QixDQUFDLEVBQW9CLDJDQUEyQztJQUM1RyxDQUFDLHNCQUFjLENBQUMsa0NBQWtDLENBQUMsRUFBYyxpRkFBaUY7Q0FDckosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdBUk5JTkc6IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci5cbi8vIERvIG5vdCB1c2UgYW55IGJyb3dzZXIgb3Igbm9kZS1zcGVjaWZpYyBBUEkhXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmltcG9ydCB7IFJVTlRJTUVfRVJST1JTIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uRXJyb3JIaW50IGZyb20gJy4uLy4uL2Jyb3dzZXIvY29ubmVjdGlvbi9lcnJvci1oaW50cyc7XG5pbXBvcnQgeyBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IHsgU0tJUF9KU19FUlJPUlNfT1BUSU9OU19PQkpFQ1RfT1BUSU9OX05BTUVTLCBTS0lQX0pTX0VSUk9SU19DQUxMQkFDS19XSVRIX09QVElPTlNfT1BUSU9OX05BTUVTIH0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9za2lwLWpzLWVycm9ycy1vcHRpb24tbmFtZXMnO1xuXG5jb25zdCBET0NVTUVOVEFUSU9OX0xJTktTID0ge1xuICAgIFRFU1RfU09VUkNFX1BBUkFNRVRFUjogJ2h0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDI2MzkvcmVmZXJlbmNlL2NvbW1hbmQtbGluZS1pbnRlcmZhY2UjZmlsZS1wYXRoZ2xvYi1wYXR0ZXJuJyxcbiAgICBGSUxURVJfU0VUVElOR1M6ICAgICAgICdodHRwczovL3Rlc3RjYWZlLmlvL2RvY3VtZW50YXRpb24vNDAyNjM4L3JlZmVyZW5jZS9jb25maWd1cmF0aW9uLWZpbGUjZmlsdGVyJyxcbiAgICBIRUFETEVTU19NT0RFOiAgICAgICAgICdodHRwczovL3Rlc3RjYWZlLmlvL2RvY3VtZW50YXRpb24vNDAyODI4L2d1aWRlcy9jb25jZXB0cy9icm93c2VycyN0ZXN0LWluLWhlYWRsZXNzLW1vZGUnLFxuICAgIENVU1RPTV9BQ1RJT05TOiAgICAgICAgJ2h0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDQxNTAvZ3VpZGVzL2FkdmFuY2VkLWd1aWRlcy9jdXN0b20tdGVzdC1hY3Rpb25zJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90Q3JlYXRlTXVsdGlwbGVMaXZlTW9kZVJ1bm5lcnNdOiAgJ0Nhbm5vdCBsYXVuY2ggbXVsdGlwbGUgbGl2ZSBtb2RlIGluc3RhbmNlcyBvZiB0aGUgVGVzdENhZmUgdGVzdCBydW5uZXIuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuTGl2ZU1vZGVSdW5uZXJNdWx0aXBsZVRpbWVzXTogJ0Nhbm5vdCBsYXVuY2ggdGhlIHNhbWUgbGl2ZSBtb2RlIGluc3RhbmNlIG9mIHRoZSBUZXN0Q2FmZSB0ZXN0IHJ1bm5lciBtdWx0aXBsZSB0aW1lcy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5icm93c2VyRGlzY29ubmVjdGVkXTogICAgICAgICAgICAgICAgICAnVGhlIHt1c2VyQWdlbnR9IGJyb3dzZXIgZGlzY29ubmVjdGVkLiBJZiB5b3UgZGlkIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB5b3Vyc2VsZiwgYnJvd3NlciBwZXJmb3JtYW5jZSBvciBuZXR3b3JrIGlzc3VlcyBtYXkgYmUgYXQgZmF1bHQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UnVuQWdhaW5zdERpc2Nvbm5lY3RlZEJyb3dzZXJzXTogJ1RoZSBmb2xsb3dpbmcgYnJvd3NlcnMgZGlzY29ubmVjdGVkOiB7dXNlckFnZW50c30uIENhbm5vdCBydW4gZnVydGhlciB0ZXN0cy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50ZXN0UnVuUmVxdWVzdEluRGlzY29ubmVjdGVkQnJvd3Nlcl06ICAnXCJ7YnJvd3Nlcn1cIiBkaXNjb25uZWN0ZWQgZHVyaW5nIHRlc3QgZXhlY3V0aW9uLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEVzdGFibGlzaEJyb3dzZXJDb25uZWN0aW9uXTogICAgICdDYW5ub3QgZXN0YWJsaXNoIG9uZSBvciBtb3JlIGJyb3dzZXIgY29ubmVjdGlvbnMuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZEJyb3dzZXJdOiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBmaW5kIHRoZSBicm93c2VyLiBcInticm93c2VyfVwiIGlzIG5laXRoZXIgYSBrbm93biBicm93c2VyIGFsaWFzLCBub3IgYSBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgZmlsZS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5icm93c2VyUHJvdmlkZXJOb3RGb3VuZF06ICAgICAgICAgICAgICAnQ2Fubm90IGZpbmQgdGhlIFwie3Byb3ZpZGVyTmFtZX1cIiBicm93c2VyIHByb3ZpZGVyLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmJyb3dzZXJOb3RTZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICdZb3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGEgYnJvd3Nlci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50ZXN0RmlsZXNOb3RGb3VuZF06ICAgICAgICAgICAgICAgICAgICAnQ291bGQgbm90IGZpbmQgdGVzdCBmaWxlcyBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOiBcIntjd2R9XCIuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDaGVjayBwYXR0ZXJucyBmb3IgZXJyb3JzOlxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne3NvdXJjZUxpc3R9XFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvciBsYXVuY2ggVGVzdENhZmUgZnJvbSBhIGRpZmZlcmVudCBkaXJlY3RvcnkuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gc3BlY2lmeSB0ZXN0IGxvY2F0aW9ucywgc2VlICR7RE9DVU1FTlRBVElPTl9MSU5LUy5URVNUX1NPVVJDRV9QQVJBTUVURVJ9LmAsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMubm9UZXN0c1RvUnVuXTogXCJTb3VyY2UgZmlsZXMgZG8gbm90IGNvbnRhaW4gdmFsaWQgJ2ZpeHR1cmUnIGFuZCAndGVzdCcgZGVjbGFyYXRpb25zLlwiLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLm5vVGVzdHNUb1J1bkR1ZUZpbHRlcmluZ106ICdObyB0ZXN0cyBtYXRjaCB5b3VyIGZpbHRlci5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNlZSAke0RPQ1VNRU5UQVRJT05fTElOS1MuRklMVEVSX1NFVFRJTkdTfS5gLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRSZXBvcnRlckZvckFsaWFzXTogICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntuYW1lfVwiIHJlcG9ydGVyIGRvZXMgbm90IGV4aXN0LiBDaGVjayB0aGUgcmVwb3J0ZXIgcGFyYW1ldGVyIGZvciBlcnJvcnMuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubXVsdGlwbGVTYW1lU3RyZWFtUmVwb3J0ZXJzXTogICAgICAgICAgICAgICAgICAgICAgICAnUmVwb3J0ZXJzIGNhbm5vdCBzaGFyZSBvdXRwdXQgc3RyZWFtcy4gVGhlIGZvbGxvd2luZyByZXBvcnRlcnMgaW50ZXJmZXJlIHdpdGggb25lIGFub3RoZXI6IFwie3JlcG9ydGVyc31cIi4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5vcHRpb25WYWx1ZUlzTm90VmFsaWRSZWdFeHBdOiAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5vcHRpb25WYWx1ZUlzTm90VmFsaWRLZXlWYWx1ZV06ICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGtleS12YWx1ZSBwYWlyLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRRdWFyYW50aW5lT3B0aW9uXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiBkb2VzIG5vdCBleGlzdC4gU3BlY2lmeSBcImF0dGVtcHRMaW1pdFwiIGFuZCBcInN1Y2Nlc3NUaHJlc2hvbGRcIiB0byBjb25maWd1cmUgcXVhcmFudGluZSBtb2RlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRRdWFyYW50aW5lUGFyYW1ldGVyc1JhdGlvXTogICAgICAgICAgICAgICAgICAgJ1RoZSB2YWx1ZSBvZiBcImF0dGVtcHRMaW1pdFwiICh7YXR0ZW1wdExpbWl0fSkgc2hvdWxkIGJlIGdyZWF0ZXIgdGhlbiB0aGUgdmFsdWUgb2YgXCJzdWNjZXNzVGhyZXNob2xkXCIgKHtzdWNjZXNzVGhyZXNob2xkfSkuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZEF0dGVtcHRMaW1pdFZhbHVlXTogICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIFwie2F0dGVtcHRMaW1pdH1cIiBwYXJhbWV0ZXIgb25seSBhY2NlcHRzIHZhbHVlcyBvZiB7TUlOX0FUVEVNUFRfTElNSVR9IGFuZCB1cC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkU3VjY2Vzc1RocmVzaG9sZFZhbHVlXTogICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7c3VjY2Vzc1RocmVzaG9sZH1cIiBwYXJhbWV0ZXIgb25seSBhY2NlcHRzIHZhbHVlcyBvZiB7TUlOX1NVQ0NFU1NfVEhSRVNIT0xEfSBhbmQgdXAuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFNwZWVkVmFsdWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3BlZWQgc2hvdWxkIGJlIGEgbnVtYmVyIGJldHdlZW4gMC4wMSBhbmQgMS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkQ29uY3VycmVuY3lGYWN0b3JdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgY29uY3VycmVuY3kgZmFjdG9yIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdERpdmlkZVJlbW90ZXNDb3VudEJ5Q29uY3VycmVuY3ldOiAgICAgICAgICAgICAgJ1RoZSBudW1iZXIgb2YgcmVtb3RlIGJyb3dzZXJzIHNob3VsZCBiZSBkaXZpc2libGUgYnkgdGhlIGNvbmN1cnJlbmN5IGZhY3Rvci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RTZXRDb25jdXJyZW5jeVdpdGhDRFBQb3J0XTogICAgICAgICAgICAgICAgICAgICdUaGUgdmFsdWUgb2YgdGhlIFwiY29uY3VycmVuY3lcIiBvcHRpb24gaW5jbHVkZXMgdGhlIENEUCBwb3J0LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnBvcnRzT3B0aW9uUmVxdWlyZXNUd29OdW1iZXJzXTogICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIi0tcG9ydHNcIiBhcmd1bWVudCBhY2NlcHRzIHR3byB2YWx1ZXMgYXQgYSB0aW1lLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnBvcnRJc05vdEZyZWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BvcnQge3BvcnROdW19IGlzIG9jY3VwaWVkIGJ5IGFub3RoZXIgcHJvY2Vzcy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkSG9zdG5hbWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcmVzb2x2ZSBob3N0bmFtZSBcIntob3N0bmFtZX1cIi4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kU3BlY2lmaWVkVGVzdFNvdXJjZV06ICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgZmluZCBhIHRlc3QgZmlsZSBhdCBcIntwYXRofVwiLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudEZ1bmN0aW9uQ29kZUlzTm90QUZ1bmN0aW9uXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIGEgQ2xpZW50RnVuY3Rpb24gYmVjYXVzZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGlzIHt0eXBlfSwgYW5kIG5vdCBhIGZ1bmN0aW9uLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnNlbGVjdG9ySW5pdGlhbGl6ZWRXaXRoV3JvbmdUeXBlXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBpbml0aWFsaXplIGEgU2VsZWN0b3IgYmVjYXVzZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGlzIHt0eXBlfSwgYW5kIG5vdCBvbmUgb2YgdGhlIGZvbGxvd2luZzogYSBDU1Mgc2VsZWN0b3Igc3RyaW5nLCBhIFNlbGVjdG9yIG9iamVjdCwgYSBub2RlIHNuYXBzaG90LCBhIGZ1bmN0aW9uLCBvciBhIFByb21pc2UgcmV0dXJuZWQgYnkgYSBTZWxlY3Rvci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jbGllbnRGdW5jdGlvbkNhbm5vdFJlc29sdmVUZXN0UnVuXTogICAgICAgICAgICAgICAgIFwieyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBjYW5ub3QgaW1wbGljaXRseSByZXNvbHZlIHRoZSB0ZXN0IHJ1biBpbiBjb250ZXh0IG9mIHdoaWNoIGl0IHNob3VsZCBiZSBleGVjdXRlZC4gSWYgeW91IG5lZWQgdG8gY2FsbCB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGZyb20gdGhlIE5vZGUuanMgQVBJIGNhbGxiYWNrLCBwYXNzIHRoZSB0ZXN0IGNvbnRyb2xsZXIgbWFudWFsbHkgdmlhIHsjaW5zdGFudGlhdGlvbkNhbGxzaXRlTmFtZX0ncyBgLndpdGgoeyBib3VuZFRlc3RSdW46IHQgfSlgIG1ldGhvZCBmaXJzdC4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgZXhlY3V0ZSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IG91dHNpZGUgdGhlIHRlc3QgY29kZS5cIixcbiAgICBbUlVOVElNRV9FUlJPUlMucmVxdWVzdENhbm5vdFJlc29sdmVUZXN0UnVuXTogICAgICAgICAgICAgICAgICAgICAgICBcIidyZXF1ZXN0JyBjYW5ub3QgaW1wbGljaXRseSByZXNvbHZlIHRoZSB0ZXN0IHJ1biBpbiBjb250ZXh0IG9mIHdoaWNoIGl0IHNob3VsZCBiZSBleGVjdXRlZC4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgZXhlY3V0ZSAncmVxdWVzdCcgaW4gdGhlIGV4cGVyaW1lbnRhbCBkZWJ1ZyBtb2RlLlwiLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZWdlbmVyYXRvckluQ2xpZW50RnVuY3Rpb25Db2RlXTogICAgICAgICAgICAgICAgICAgIGB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGNvZGUsIGFyZ3VtZW50cyBvciBkZXBlbmRlbmNpZXMgY2Fubm90IGNvbnRhaW4gZ2VuZXJhdG9ycyBvciBcImFzeW5jL2F3YWl0XCIgc3ludGF4ICh1c2UgUHJvbWlzZXMgaW5zdGVhZCkuYCxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZENsaWVudEZ1bmN0aW9uVGVzdFJ1bkJpbmRpbmddOiAgICAgICAgICAgICAgICAnQ2Fubm90IHJlc29sdmUgdGhlIFwiYm91bmRUZXN0UnVuXCIgb3B0aW9uIGJlY2F1c2UgaXRzIHZhbHVlIGlzIG5vdCBhIHRlc3QgY29udHJvbGxlci4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkVmFsdWVUeXBlXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7c210aGd9ICh7YWN0dWFsfSkgaXMgbm90IG9mIGV4cGVjdGVkIHR5cGUgKHt0eXBlfSkuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudW5zdXBwb3J0ZWRVcmxQcm90b2NvbF06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCB7d2hhdH06IFwie3VybH1cIi4gVGVzdENhZmUgY2Fubm90IGV4ZWN1dGUgdGhlIHRlc3QgYmVjYXVzZSB0aGUge3doYXR9IGluY2x1ZGVzIHRoZSB7cHJvdG9jb2x9IHByb3RvY29sLiBUZXN0Q2FmZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHByb3RvY29sczogaHR0cDovLywgaHR0cHM6Ly8gYW5kIGZpbGU6Ly8uJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudGVzdENvbnRyb2xsZXJQcm94eUNhbm5vdFJlc29sdmVUZXN0UnVuXTogICAgICAgICAgICBgQ2Fubm90IGltcGxpY2l0bHkgcmVzb2x2ZSB0aGUgdGVzdCBydW4gaW4gdGhlIGNvbnRleHQgb2Ygd2hpY2ggdGhlIHRlc3QgY29udHJvbGxlciBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkLiBVc2UgdGVzdCBmdW5jdGlvbidzICd0JyBhcmd1bWVudCBpbnN0ZWFkLmAsXG4gICAgW1JVTlRJTUVfRVJST1JTLnRpbWVMaW1pdGVkUHJvbWlzZVRpbWVvdXRFeHBpcmVkXTogICAgICAgICAgICAgICAgICAgJ0EgUHJvbWlzZSB0aW1lZCBvdXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90U2V0VmlkZW9PcHRpb25zV2l0aG91dEJhc2VWaWRlb1BhdGhTcGVjaWZpZWRdOiAnWW91IGNhbm5vdCBtYW5hZ2UgYWR2YW5jZWQgdmlkZW8gcGFyYW1ldGVycyB3aGVuIHRoZSB2aWRlbyByZWNvcmRpbmcgY2FwYWJpbGl0eSBpcyBvZmYuIFNwZWNpZnkgdGhlIHJvb3Qgc3RvcmFnZSBmb2xkZXIgZm9yIHZpZGVvIGNvbnRlbnQgdG8gZW5hYmxlIHZpZGVvIHJlY29yZGluZy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5tdWx0aXBsZUFQSU1ldGhvZENhbGxGb3JiaWRkZW5dOiAgICAgICAgICAgICAgICAgICAgICdZb3UgY2Fubm90IGNhbGwgdGhlIFwie21ldGhvZE5hbWV9XCIgbWV0aG9kIG1vcmUgdGhhbiBvbmNlLiBTcGVjaWZ5IGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgaW5zdGVhZC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkUmVwb3J0ZXJPdXRwdXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU3BlY2lmeSBhIGZpbGUgbmFtZSBvciBhIHdyaXRhYmxlIHN0cmVhbSBhcyB0aGUgcmVwb3J0ZXIncyBvdXRwdXQgdGFyZ2V0LlwiLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RSZWFkU1NMQ2VydEZpbGVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcmVhZCB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5IHRoZSBcIntvcHRpb259XCIgc3NsIG9wdGlvbiAoXCJ7cGF0aH1cIikuIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UHJlcGFyZVRlc3RzRHVlVG9FcnJvcl06ICdDYW5ub3QgcHJlcGFyZSB0ZXN0cyBkdWUgdG8gdGhlIGZvbGxvd2luZyBlcnJvcjpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyTWVzc2FnZX0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFBhcnNlUmF3RmlsZV06ICdDYW5ub3QgcGFyc2UgYSByYXcgdGVzdCBmaWxlIGF0IFwie3BhdGh9XCIgZHVlIHRvIHRoZSBmb2xsb3dpbmcgZXJyb3I6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJNZXNzYWdlfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMudGVzdGVkQXBwRmFpbGVkV2l0aEVycm9yXTogJ1RoZSB3ZWIgYXBwbGljYXRpb24gZmFpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBlcnJvcjpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vyck1lc3NhZ2V9JyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy51bmFibGVUb09wZW5Ccm93c2VyXTogJ1VuYWJsZSB0byBvcGVuIHRoZSBcInthbGlhc31cIiBicm93c2VyIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJNZXNzYWdlfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMucmVxdWVzdEhvb2tDb25maWd1cmVBUElFcnJvcl06ICdBdHRlbXB0IHRvIGNvbmZpZ3VyZSBhIHJlcXVlc3QgaG9vayByZXN1bHRlZCBpbiB0aGUgZm9sbG93aW5nIGVycm9yOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tyZXF1ZXN0SG9va05hbWV9OiB7ZXJyTXNnfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuZm9yYmlkZGVuQ2hhcmF0ZXJzSW5TY3JlZW5zaG90UGF0aF06ICdUaGVyZSBhcmUgZm9yYmlkZGVuIGNoYXJhY3RlcnMgaW4gdGhlIFwie3NjcmVlbnNob3RQYXRofVwiIHtzY3JlZW5zaG90UGF0aFR5cGV9OlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB7Zm9yYmlkZGVuQ2hhcnNEZXNjcmlwdGlvbn0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEZpbmRGRk1QRUddOiAnVGVzdENhZmUgY2Fubm90IHJlY29yZCB2aWRlb3MgYmVjYXVzZSBpdCBjYW5ub3QgbG9jYXRlIHRoZSBGRm1wZWcgZXhlY3V0YWJsZS4gVHJ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHNvbHV0aW9uczpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqIGFkZCB0aGUgcGF0aCBvZiB0aGUgRkZtcGVnIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKiBzcGVjaWZ5IHRoZSBwYXRoIG9mIHRoZSBGRm1wZWcgZXhlY3V0YWJsZSBpbiB0aGUgRkZNUEVHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgdGhlIGZmbXBlZ1BhdGggb3B0aW9uLFxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyogaW5zdGFsbCB0aGUgQGZmbXBlZy1pbnN0YWxsZXIvZmZtcGVnIG5wbSBwYWNrYWdlLicsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZFR5cGVzY3JpcHRDb25maWd1cmF0aW9uRmlsZV06ICAgICAgICAgICAgJ1wie2ZpbGVQYXRofVwiIGlzIG5vdCBhIHZhbGlkIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdEluaXRpYWxpemVySXNOb3RTcGVjaWZpZWRdOiAgICAgICAgICAgICdJbml0aWFsaXplIHlvdXIgY2xpZW50IHNjcmlwdCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBhIEphdmFTY3JpcHQgc2NyaXB0LCBhIEphdmFTY3JpcHQgZmlsZSBwYXRoLCBvciB0aGUgbmFtZSBvZiBhIEphdmFTY3JpcHQgbW9kdWxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdEJhc2VQYXRoSXNOb3RTcGVjaWZpZWRdOiAgICAgICAgICAgICAgICdTcGVjaWZ5IHRoZSBiYXNlIHBhdGggZm9yIHRoZSBjbGllbnQgc2NyaXB0IGZpbGUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2xpZW50U2NyaXB0SW5pdGlhbGl6ZXJNdWx0aXBsZUNvbnRlbnRTb3VyY2VzXTogICAgJ0NsaWVudCBzY3JpcHRzIGNhbiBvbmx5IGhhdmUgb25lIGluaXRpYWxpemVyOiBKYXZhU2NyaXB0IGNvZGUsIGEgSmF2YVNjcmlwdCBmaWxlIHBhdGgsIG9yIHRoZSBuYW1lIG9mIGEgSmF2YVNjcmlwdCBtb2R1bGUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90TG9hZENsaWVudFNjcmlwdEZyb21QYXRoXTogICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBsb2FkIGEgY2xpZW50IHNjcmlwdCBmcm9tIHtwYXRofS5cXG57ZXJyb3JNZXNzYWdlfScsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudFNjcmlwdE1vZHVsZUVudHJ5UG9pbnRQYXRoQ2FsY3VsYXRpb25FcnJvcl06ICdBIGNsaWVudCBzY3JpcHQgdHJpZWQgdG8gbG9hZCBhIEphdmFTY3JpcHQgbW9kdWxlIHRoYXQgVGVzdENhZmUgY2Fubm90IGxvY2F0ZTpcXG5cXG57ZXJyb3JNZXNzYWdlfS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5tZXRob2RJc05vdEF2YWlsYWJsZUZvckFuSVBDSG9zdF06ICAgICAgICAgICAgICAgICAnVGhpcyBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBvbiBhIHNlcnZpY2UgaG9zdC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy50b29MYXJnZUlQQ1BheWxvYWRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHNwZWNpZmllZCBwYXlsb2FkIGlzIHRvbyBsYXJnZSB0byBmb3JtIGFuIElQQyBwYWNrZXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubWFsZm9ybWVkSVBDTWVzc2FnZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBwcm9jZXNzIGEgbWFsZm9ybWVkIElQQyBtZXNzYWdlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnVuZXhwZWN0ZWRJUENIZWFkUGFja2V0XTogICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgY3JlYXRlIGFuIElQQyBtZXNzYWdlIGR1ZSB0byBhbiB1bmV4cGVjdGVkIElQQyBoZWFkIHBhY2tldC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy51bmV4cGVjdGVkSVBDQm9keVBhY2tldF06ICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IGNyZWF0ZSBhbiBJUEMgbWVzc2FnZSBkdWUgdG8gYW4gdW5leHBlY3RlZCBJUEMgYm9keSBwYWNrZXQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudW5leHBlY3RlZElQQ1RhaWxQYWNrZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgYW4gSVBDIG1lc3NhZ2UgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgSVBDIHRhaWwgcGFja2V0LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFJ1bkxvY2FsTm9uSGVhZGxlc3NCcm93c2VyV2l0aG91dERpc3BsYXldOlxuICAgICAgICAnWW91ciBMaW51eCB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgYSBncmFwaGljIHN1YnN5c3RlbSB0byBydW4ge2Jyb3dzZXJBbGlhc30gd2l0aCBhIEdVSS4gJyArXG4gICAgICAgICdZb3UgY2FuIGxhdW5jaCB0aGUgYnJvd3NlciBpbiBoZWFkbGVzcyBtb2RlLiAnICtcbiAgICAgICAgJ0lmIHlvdSB1c2UgYSBwb3J0YWJsZSBicm93c2VyIGV4ZWN1dGFibGUsICcgK1xuICAgICAgICBcInNwZWNpZnkgdGhlIGJyb3dzZXIgYWxpYXMgYmVmb3JlIHRoZSBwYXRoIGluc3RlYWQgb2YgdGhlICdwYXRoJyBwcmVmaXguIFwiICtcbiAgICAgICAgYEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgJHtET0NVTUVOVEFUSU9OX0xJTktTLkhFQURMRVNTX01PREV9YCxcblxuICAgIFtSVU5USU1FX0VSUk9SUy51bmNhdWdodEVycm9ySW5SZXBvcnRlcl06ICAgICAgICAgICAnVGhlIFwie21ldGhvZE5hbWV9XCIgbWV0aG9kIG9mIHRoZSBcIntyZXBvcnRlck5hbWV9XCIgcmVwb3J0ZXIgcHJvZHVjZWQgYW4gdW5jYXVnaHQgZXJyb3IuIEVycm9yIGRldGFpbHM6XFxue29yaWdpbmFsRXJyb3J9JyxcbiAgICBbUlVOVElNRV9FUlJPUlMucm9sZUluaXRpYWxpemVkV2l0aFJlbGF0aXZlVXJsXTogICAgJ1lvdSBjYW5ub3Qgc3BlY2lmeSByZWxhdGl2ZSBsb2dpbiBwYWdlIFVSTHMgaW4gdGhlIFJvbGUgY29uc3RydWN0b3IuIFVzZSBhbiBhYnNvbHV0ZSBVUkwuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudHlwZVNjcmlwdENvbXBpbGVyTG9hZGluZ0Vycm9yXTogICAgJ0Nhbm5vdCBsb2FkIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyLlxcbntvcmlnaW5FcnJvck1lc3NhZ2V9LicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEN1c3RvbWl6ZVNwZWNpZmllZENvbXBpbGVyc106ICdZb3UgY2Fubm90IHNwZWNpZnkgb3B0aW9ucyBmb3IgdGhlIHtub25jdXN0b21pemFibGVDb21waWxlckxpc3R9IGNvbXBpbGVye3N1ZmZpeH0uJyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RFbmFibGVSZXRyeVRlc3RQYWdlc09wdGlvbl06XG4gICAgICAgICdDYW5ub3QgZW5hYmxlIHRoZSBcXCdyZXRyeVRlc3RQYWdlc1xcJyBvcHRpb24uIEFwcGx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHR3byBzb2x1dGlvbnM6XFxuJyArXG4gICAgICAgICctLSBzZXQgXFwnbG9jYWxob3N0XFwnIGFzIHRoZSB2YWx1ZSBvZiB0aGUgXFwnaG9zdG5hbWVcXCcgb3B0aW9uXFxuJyArXG4gICAgICAgICctLSBydW4gVGVzdENhZmUgb3ZlciBIVFRQU1xcbicsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuYnJvd3NlckNvbm5lY3Rpb25FcnJvcl06ICAgICAgICAgICAgICAgJ3tvcmlnaW5FcnJvck1lc3NhZ2V9XFxue251bU9mTm90T3BlbmVkQ29ubmVjdGlvbn0gb2Yge251bU9mQWxsQ29ubmVjdGlvbnN9IGJyb3dzZXIgY29ubmVjdGlvbnMgaGF2ZSBub3QgYmVlbiBlc3RhYmxpc2hlZDpcXG57bGlzdE9mTm90T3BlbmVkQ29ubmVjdGlvbnN9XFxuXFxuSGludHM6XFxue2xpc3RPZkhpbnRzfScsXG4gICAgW0Jyb3dzZXJDb25uZWN0aW9uRXJyb3JIaW50LlRvb0hpZ2hDb25jdXJyZW5jeUZhY3Rvcl06ICdUaGUgaG9zdCBtYWNoaW5lIG1heSBub3QgYmUgcG93ZXJmdWwgZW5vdWdoIHRvIGhhbmRsZSB0aGUgc3BlY2lmaWVkIGNvbmN1cnJlbmN5IGZhY3RvciAoe2NvbmN1cnJlbmN5RmFjdG9yfSkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVHJ5IHRvIGRlY3JlYXNlIHRoZSBjb25jdXJyZW5jeSBmYWN0b3Igb3IgYWxsb2NhdGUgbW9yZSBjb21wdXRpbmcgcmVzb3VyY2VzIHRvIHRoZSBob3N0IG1hY2hpbmUuJyxcbiAgICBbQnJvd3NlckNvbm5lY3Rpb25FcnJvckhpbnQuVXNlQnJvd3NlckluaXRPcHRpb25dOiAgICAgICAgICAgICAgICdJbmNyZWFzZSB0aGUgdmFsdWUgb2YgdGhlIFwiYnJvd3NlckluaXRUaW1lb3V0XCIgb3B0aW9uIGlmIGl0IGlzIHRvbyBsb3cgKGN1cnJlbnRseToge2Jyb3dzZXJJbml0VGltZW91dE1zZ30pLiBUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIGhvdyBsb25nIFRlc3RDYWZlIHdhaXRzIGZvciBicm93c2VycyB0byBiZSByZWFkeS4nLFxuICAgIFtCcm93c2VyQ29ubmVjdGlvbkVycm9ySGludC5SZXN0RXJyb3JDYXVzZXNdOiAgICAgICAgICAgICAgICAgICAgJ1RoZSBlcnJvciBjYW4gYWxzbyBiZSBjYXVzZWQgYnkgbmV0d29yayBpc3N1ZXMgb3IgcmVtb3RlIGRldmljZSBmYWlsdXJlLiBNYWtlIHN1cmUgdGhhdCB5b3VyIG5ldHdvcmsgY29ubmVjdGlvbiBpcyBzdGFibGUgYW5kIHlvdSBjYW4gcmVhY2ggdGhlIHJlbW90ZSBkZXZpY2UuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZFRlc3RjYWZlQ29uZmlndXJhdGlvbkZpbGVdOiAgICAgICAgICAgICdDYW5ub3QgbG9jYXRlIGEgVGVzdENhZmUgY29uZmlndXJhdGlvbiBmaWxlIGF0IHtmaWxlUGF0aH0uIEVpdGhlciB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgb3IgdGhlIHBhdGggaXMgaW52YWxpZC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5kYXNoYm9hcmRUb2tlbkluSlNPTl06ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0luc2VjdXJlIHRva2VuIGRlY2xhcmF0aW9uOiBjYW5ub3QgZGVjbGFyZSBhIERhc2hib2FyZCB0b2tlbiBpbiBhIEpTT04gY29uZmlndXJhdGlvbiBmaWxlLiBVc2UgYSBKYXZhU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgZGVjbGFyZSBhIERhc2hib2FyZCB0b2tlbiB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiB0aGUgQ0xJLCB0aGUgVGVzdCBSdW5uZXIgQVBJLCB0aGUgVEVTVENBRkVfREFTSEJPQVJEX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnJlbGF0aXZlQmFzZVVybF06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHZhbHVlIG9mIHRoZSBiYXNlVXJsIGFyZ3VtZW50IGNhbm5vdCBiZSByZWxhdGl2ZTogXCJ7YmFzZVVybH1cIicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnJlcXVlc3RVcmxJbnZhbGlkVmFsdWVFcnJvcl06ICAgICAgICAgICAgICAgICAgICAnUmVxdWVzdGVkIHVybCBpc25cXCd0IHZhbGlkICh7YWN0dWFsVmFsdWV9KS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5yZXF1ZXN0UnVudGltZUVycm9yXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSByZXF1ZXN0IHdhcyBpbnRlcnJ1cHRlZCBieSBhbiBlcnJvcjpcXG57bWVzc2FnZX0nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkU2tpcEpzRXJyb3JzT3B0aW9uc09iamVjdFByb3BlcnR5XTogICAgICAgYFRoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiBkb2VzIG5vdCBleGlzdC4gVXNlIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBjb25maWd1cmUgc2tpcEpzRXJyb3JzOiAke2dldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyhPYmplY3Qua2V5cyhTS0lQX0pTX0VSUk9SU19PUFRJT05TX09CSkVDVF9PUFRJT05fTkFNRVMpKX0uYCxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFNraXBKc0Vycm9yc0NhbGxiYWNrV2l0aE9wdGlvbnNQcm9wZXJ0eV06IGBUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuIFVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29uZmlndXJlIHNraXBKc0Vycm9ycyBjYWxsYmFjazogJHtnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcoT2JqZWN0LmtleXMoU0tJUF9KU19FUlJPUlNfQ0FMTEJBQ0tfV0lUSF9PUFRJT05TX09QVElPTl9OQU1FUykpfS5gLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkQ29tbWFuZEluSnNvbkNvbXBpbGVyXTogICAgICAgICAgICAgICAgICAgYFRlc3RDYWZlIHRlcm1pbmF0ZWQgdGhlIHRlc3QgcnVuLiBUaGUgXCJ7cGF0aH1cIiBmaWxlIGNvbnRhaW5zIGFuIHVua25vd24gQ2hyb21lIFVzZXIgRmxvdyBhY3Rpb24gXCJ7YWN0aW9ufVwiLiBSZW1vdmUgdGhlIGFjdGlvbiB0byBjb250aW51ZS4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBhcnRpY2xlIGZvciB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIHN1cHBvcnRlZCBDaHJvbWUgVXNlciBGbG93IGFjdGlvbnM6IGh0dHBzOi8vdGVzdGNhZmUuaW8vZG9jdW1lbnRhdGlvbi80MDM5OTgvZ3VpZGVzL2V4cGVyaW1lbnRhbC1jYXBhYmlsaXRpZXMvY2hyb21lLXJlcGxheS1zdXBwb3J0I3N1cHBvcnRlZC1yZXBsYXktYWN0aW9uc2AsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDdXN0b21BY3Rpb25zT3B0aW9uVHlwZV06ICAgICAgICAgICAgICAgICBgVGhlIHZhbHVlIG9mIHRoZSBjdXN0b21BY3Rpb25zIG9wdGlvbiBkb2VzIG5vdCBiZWxvbmcgdG8gdHlwZSBPYmplY3QuIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBmb3IgY3VzdG9tIGFjdGlvbiBzZXR1cCBpbnN0cnVjdGlvbnM6ICR7IERPQ1VNRU5UQVRJT05fTElOS1MuQ1VTVE9NX0FDVElPTlMgfWAsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDdXN0b21BY3Rpb25UeXBlXTogICAgICAgICAgICAgICAgICAgICAgICBgVGVzdENhZmUgY2Fubm90IHBhcnNlIHRoZSBcInthY3Rpb25OYW1lfVwiIGFjdGlvbiwgYmVjYXVzZSB0aGUgYWN0aW9uIGRlZmluaXRpb24gaXMgaW52YWxpZC4gRm9ybWF0IHRoZSBkZWZpbml0aW9uIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgY3VzdG9tIGFjdGlvbnMgZ3VpZGU6ICR7IERPQ1VNRU5UQVRJT05fTElOS1MuQ1VTVE9NX0FDVElPTlMgfWAsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEltcG9ydEVTTUluQ29tbW9uc0pTXTogICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IGltcG9ydCB0aGUge2VzTW9kdWxlfSBFQ01BU2NyaXB0IG1vZHVsZSBmcm9tIHt0YXJnZXRGaWxlfS4gVXNlIGEgZHluYW1pYyBpbXBvcnQoKSBzdGF0ZW1lbnQgb3IgZW5hYmxlIHRoZSAtLWVzbSBDTEkgZmxhZy4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5wcm94eUluaXRpYWxpemVkTW9yZVRoYW5PbmNlXTogICAgICAgICAgICAgICAgICAgJ1RoZSBwcm94eSB3YXMgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuc2V0UHJveHlsZXNzRm9yVW5zdXBwb3J0ZWRCcm93c2Vyc106ICAgICAgICAgICAgICdUaGUgZm9sbG93aW5nIGJyb3dzZXIocykgZG8gbm90IHN1cHBvcnQgdGhlIE5hdGl2ZSBBdXRvbWF0aW9uIG1vZGU6IHticm93c2Vyc30uJyxcbn07XG4iXX0=
|
|
@@ -106,13 +106,13 @@ class Bootstrapper {
|
|
|
106
106
|
})
|
|
107
107
|
.map(connection => connection.browserInfo.providerName);
|
|
108
108
|
if (unsupportedBrowsers.length)
|
|
109
|
-
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.setProxylessForUnsupportedBrowsers, (0, string_1.getConcatenatedValuesString)(unsupportedBrowsers)
|
|
109
|
+
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.setProxylessForUnsupportedBrowsers, (0, string_1.getConcatenatedValuesString)(unsupportedBrowsers));
|
|
110
110
|
}
|
|
111
111
|
async _getBrowserConnections(browserInfo) {
|
|
112
112
|
const { automated, remotes } = Bootstrapper._splitBrowserInfo(browserInfo);
|
|
113
113
|
if (remotes && remotes.length % this.concurrency)
|
|
114
114
|
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotDivideRemotesCountByConcurrency);
|
|
115
|
-
this.proxyless = this.configuration.getOption(option_names_1.default.
|
|
115
|
+
this.proxyless = this.configuration.getOption(option_names_1.default.nativeAutomation);
|
|
116
116
|
await this._setupProxy();
|
|
117
117
|
let browserConnections = this._createAutomatedConnections(automated);
|
|
118
118
|
this.assertUnsupportedBrowsersForProxylessMode(browserConnections);
|
|
@@ -278,4 +278,4 @@ class Bootstrapper {
|
|
|
278
278
|
}
|
|
279
279
|
exports.default = Bootstrapper;
|
|
280
280
|
module.exports = exports.default;
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bm5lci9ib290c3RyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FNZ0I7QUFFaEIsa0RBQTBCO0FBQzFCLGtFQUF1QztBQUN2QywyREFBbUM7QUFDbkMsdUVBQXVFO0FBQ3ZFLGdFQUF1QztBQUN2QywrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBQ2pELDhEQUFxQztBQUNyQywrRUFBcUQ7QUFDckQseUVBQThEO0FBQzlELDRDQUErRTtBQVMvRSwrRUFBc0Q7QUFDdEQsdUZBQWdFO0FBQ2hFLHlGQUErRDtBQUMvRCx5RUFBZ0Q7QUFHaEQsbUZBQXlEO0FBQ3pELHVFQUFtRTtBQUNuRSw2REFBdUQ7QUFDdkQsbUZBQXFFO0FBQ3JFLDJFQUFrRDtBQUNsRCxpRkFBeUQ7QUFFekQsa0ZBQWtGO0FBRWxGLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDO0FBMkI1QyxTQUFTLGNBQWMsQ0FBOEIsS0FBMEI7SUFDM0UsT0FBUSxLQUF5QixDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBYUQsTUFBcUIsWUFBWTtJQXlCN0IsWUFBb0IsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBb0I7UUFDMUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQWdCLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFvQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFxQixLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFpQixLQUFLLENBQUMsQ0FBQztRQUN2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QyxNQUFNLEVBQUUsR0FBb0IsSUFBQSxzQ0FBZ0IsR0FBRSxDQUFDO1FBQy9DLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxJQUFBLGNBQWlCLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXhFLElBQUksTUFBTSxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN0RCx1Q0FBWSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFFLG1CQUFtQixFQUFFLEVBQUUsSUFBRztRQUU1Rix1Q0FBWSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFFLG1CQUFtQixFQUFFLEVBQUUsSUFBRztJQUM1RixDQUFDO0lBRU0sMEJBQTBCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVuRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM1QyxVQUFVLENBQUMsK0JBQStCLEVBQUUsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSjtBQTNXRCwrQkEyV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGNodW5rLFxuICAgIHRpbWVzLFxuICAgIHVuaW9uLFxuICAgIGNhc3RBcnJheSxcbiAgICBmbGF0dGVuRGVlcCBhcyBmbGF0dGVuLFxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHByZXR0eVRpbWUgZnJvbSAncHJldHR5LWhydGltZSc7XG5pbXBvcnQgQ29tcGlsZXIgZnJvbSAnLi4vY29tcGlsZXInO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uLCB7IEJyb3dzZXJJbmZvIH0gZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uJztcbmltcG9ydCBCcm93c2VyU2V0IGZyb20gJy4vYnJvd3Nlci1zZXQnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IFRlc3RlZEFwcCBmcm9tICcuL3Rlc3RlZC1hcHAnO1xuaW1wb3J0IHBhcnNlRmlsZUxpc3QgZnJvbSAnLi4vdXRpbHMvcGFyc2UtZmlsZS1saXN0JztcbmltcG9ydCBsb2FkQ2xpZW50U2NyaXB0cyBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvbG9hZCc7XG5pbXBvcnQgeyBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcsIGdldFBsdXJhbFN1ZmZpeCB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5pbXBvcnQgeyBSZXBvcnRlclNvdXJjZSB9IGZyb20gJy4uL3JlcG9ydGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IENsaWVudFNjcmlwdCBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdCc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdC1pbml0JztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkgZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uL2dhdGV3YXknO1xuaW1wb3J0IHsgQ29tcGlsZXJBcmd1bWVudHMgfSBmcm9tICcuLi9jb21waWxlci9pbnRlcmZhY2VzJztcbmltcG9ydCBDb21waWxlclNlcnZpY2UgZnJvbSAnLi4vc2VydmljZXMvY29tcGlsZXIvaG9zdCc7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVySW5pdCwgQnJvd3NlclNldE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5pbXBvcnQgV0FSTklOR19NRVNTQUdFUyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbWVzc2FnZSc7XG5pbXBvcnQgZ3VhcmRUaW1lRXhlY3V0aW9uIGZyb20gJy4uL3V0aWxzL2d1YXJkLXRpbWUtZXhlY3V0aW9uJztcbmltcG9ydCBhc3luY0ZpbHRlciBmcm9tICcuLi91dGlscy9hc3luYy1maWx0ZXInO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCBNZXNzYWdlQnVzIGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtYnVzJztcbmltcG9ydCB3cmFwVGVzdEZ1bmN0aW9uIGZyb20gJy4uL2FwaS93cmFwLXRlc3QtZnVuY3Rpb24nO1xuaW1wb3J0IHsgYXNzZXJ0VHlwZSwgaXMgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZS90eXBlLWFzc2VydGlvbnMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IGFzc2VydFJlcXVlc3RIb29rVHlwZSBmcm9tICcuLi9hcGkvcmVxdWVzdC1ob29rcy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgdXNlclZhcmlhYmxlcyBmcm9tICcuLi9hcGkvdXNlci12YXJpYWJsZXMnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuLi9jb25maWd1cmF0aW9uL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgVGVzdENhZmVDb25maWd1cmF0aW9uIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vdGVzdGNhZmUtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5U3RhdHVzIGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbi9nYXRld2F5L3N0YXR1cyc7XG5cbmNvbnN0IERFQlVHX1NDT1BFID0gJ3Rlc3RjYWZlOmJvb3RzdHJhcHBlcic7XG5cbnR5cGUgVGVzdFNvdXJjZSA9IHVua25vd247XG5cbnR5cGUgQnJvd3NlckluZm9Tb3VyY2UgPSBCcm93c2VySW5mbyB8IEJyb3dzZXJDb25uZWN0aW9uO1xuXG5pbnRlcmZhY2UgUHJvbWlzZVN1Y2Nlc3M8VD4ge1xuICAgIHJlc3VsdDogVDtcbn1cblxuaW50ZXJmYWNlIFByb21pc2VFcnJvcjxFIGV4dGVuZHMgRXJyb3IgPSBFcnJvcj4ge1xuICAgIGVycm9yOiBFO1xufVxuXG5pbnRlcmZhY2UgQmFzaWNSdW50aW1lUmVzb3VyY2VzIHtcbiAgICBicm93c2VyU2V0OiBCcm93c2VyU2V0O1xuICAgIHRlc3RzOiBUZXN0W107XG4gICAgdGVzdGVkQXBwPzogVGVzdGVkQXBwO1xufVxuXG5pbnRlcmZhY2UgUnVubmFibGVDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzaWNSdW50aW1lUmVzb3VyY2VzIHtcbiAgICBjb21tb25DbGllbnRTY3JpcHRzOiBDbGllbnRTY3JpcHRbXTtcbiAgICBpZDogc3RyaW5nO1xufVxuXG50eXBlIFByb21pc2VSZXN1bHQ8VCwgRSBleHRlbmRzIEVycm9yID0gRXJyb3I+ID0gUHJvbWlzZVN1Y2Nlc3M8VD4gfCBQcm9taXNlRXJyb3I8RT47XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZUVycm9yPFQsIEUgZXh0ZW5kcyBFcnJvciA9IEVycm9yPiAodmFsdWU6IFByb21pc2VSZXN1bHQ8VCwgRT4pOiB2YWx1ZSBpcyBQcm9taXNlRXJyb3I8RT4ge1xuICAgIHJldHVybiAodmFsdWUgYXMgUHJvbWlzZUVycm9yPEU+KS5lcnJvciAhPT0gdm9pZCAwO1xufVxuXG5pbnRlcmZhY2UgU2VwYXJhdGVkQnJvd3NlckluZm8ge1xuICAgIHJlbW90ZXM6IEJyb3dzZXJDb25uZWN0aW9uW107XG4gICAgYXV0b21hdGVkOiBCcm93c2VySW5mb1tdO1xufVxuXG50eXBlIFByb21pc2VDb2xsZWN0aW9uPFQ+ID0ge1xuICAgIFtLIGluIGtleW9mIFRdOiBQcm9taXNlPFRbS10+XG59XG5cbnR5cGUgUmVzdWx0Q29sbGVjdGlvbjxUPiA9IHsgW1AgaW4ga2V5b2YgVF06IFByb21pc2VSZXN1bHQ8VFtQXT4gfTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9vdHN0cmFwcGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheTogQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5O1xuICAgIHB1YmxpYyBjb25jdXJyZW5jeTogbnVtYmVyO1xuICAgIHB1YmxpYyBzb3VyY2VzOiBUZXN0U291cmNlW107XG4gICAgcHVibGljIGJyb3dzZXJzOiBCcm93c2VySW5mb1NvdXJjZVtdO1xuICAgIHB1YmxpYyByZXBvcnRlcnM6IFJlcG9ydGVyU291cmNlW107XG4gICAgcHVibGljIGZpbHRlcj86IEZpbHRlckZ1bmN0aW9uO1xuICAgIHB1YmxpYyBhcHBDb21tYW5kPzogc3RyaW5nO1xuICAgIHB1YmxpYyBhcHBJbml0RGVsYXk/OiBudW1iZXI7XG4gICAgcHVibGljIHRzQ29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwdWJsaWMgY2xpZW50U2NyaXB0czogQ2xpZW50U2NyaXB0SW5pdFtdO1xuICAgIHB1YmxpYyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiBib29sZWFuO1xuICAgIHB1YmxpYyBwcm94eWxlc3M6IGJvb2xlYW47XG4gICAgcHVibGljIGNvbXBpbGVyT3B0aW9ucz86IENvbXBpbGVyT3B0aW9ucztcbiAgICBwdWJsaWMgYnJvd3NlckluaXRUaW1lb3V0PzogbnVtYmVyO1xuICAgIHB1YmxpYyBob29rcz86IEdsb2JhbEhvb2tzO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uOiBUZXN0Q2FmZUNvbmZpZ3VyYXRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyU2VydmljZT86IENvbXBpbGVyU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlQnVzOiBNZXNzYWdlQnVzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBURVNUU19DT01QSUxBVElPTl9VUFBFUkJPVU5EOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHsgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBjb21waWxlclNlcnZpY2UsIG1lc3NhZ2VCdXMsIGNvbmZpZ3VyYXRpb24gfTogQm9vdHN0cmFwcGVySW5pdCkge1xuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSA9IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSAgICAgICAgICAgICAgPSAxO1xuICAgICAgICB0aGlzLnNvdXJjZXMgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmJyb3dzZXJzICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlcG9ydGVycyAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlciAgICAgICAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5hcHBDb21tYW5kICAgICAgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuYXBwSW5pdERlbGF5ICAgICAgICAgICAgID0gdm9pZCAwO1xuICAgICAgICB0aGlzLnRzQ29uZmlnUGF0aCAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm94eWxlc3MgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21waWxlck9wdGlvbnMgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIgICAgICAgICAgICAgID0gZGVidWcoREVCVUdfU0NPUEUpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgICAgICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKG51bGwsIFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKG1lc3NhZ2VCdXMpKTtcbiAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2UgICAgICAgICAgPSBjb21waWxlclNlcnZpY2U7XG4gICAgICAgIHRoaXMubWVzc2FnZUJ1cyAgICAgICAgICAgICAgID0gbWVzc2FnZUJ1cztcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uICAgICAgICAgICAgPSBjb25maWd1cmF0aW9uO1xuXG4gICAgICAgIHRoaXMuVEVTVFNfQ09NUElMQVRJT05fVVBQRVJCT1VORCA9IDYwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRCcm93c2VyTmFtZSAoYnJvd3NlcjogQnJvd3NlckluZm9Tb3VyY2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3NlckluZm8uYnJvd3Nlck5hbWU7XG5cbiAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3Nlck5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3NwbGl0QnJvd3NlckluZm8gKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdKTogU2VwYXJhdGVkQnJvd3NlckluZm8ge1xuICAgICAgICBjb25zdCByZW1vdGVzOiBCcm93c2VyQ29ubmVjdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IGF1dG9tYXRlZDogQnJvd3NlckluZm9bXSAgICAgPSBbXTtcblxuICAgICAgICBicm93c2VySW5mby5mb3JFYWNoKGJyb3dzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGJyb3dzZXIgaW5zdGFuY2VvZiBCcm93c2VyQ29ubmVjdGlvbilcbiAgICAgICAgICAgICAgICByZW1vdGVzLnB1c2goYnJvd3Nlcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXV0b21hdGVkLnB1c2goYnJvd3Nlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHJlbW90ZXMsIGF1dG9tYXRlZCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUF1dG9tYXRlZENvbm5lY3Rpb25zIChicm93c2VySW5mbzogQnJvd3NlckluZm9bXSk6IEJyb3dzZXJDb25uZWN0aW9uW11bXSB7XG4gICAgICAgIGlmICghYnJvd3NlckluZm8pXG4gICAgICAgICAgICByZXR1cm4gW107XG5cbiAgICAgICAgcmV0dXJuIGJyb3dzZXJJbmZvLm1hcChicm93c2VyID0+IHRpbWVzKHRoaXMuY29uY3VycmVuY3ksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZU11bHRpcGxlV2luZG93czogdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzLFxuICAgICAgICAgICAgICAgIGRldmVsb3BtZW50TW9kZTogICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRldmVsb3BtZW50TW9kZSkgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICBwcm94eWxlc3M6ICAgICAgICAgICAgICB0aGlzLnByb3h5bGVzcyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgQnJvd3NlckNvbm5lY3Rpb24odGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIHsgLi4uYnJvd3NlciB9LCBmYWxzZSwgb3B0aW9ucywgdGhpcy5tZXNzYWdlQnVzKTtcblxuICAgICAgICAgICAgY29ubmVjdGlvbi5pbml0aWFsaXplKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QnJvd3NlclNldE9wdGlvbnMgKCk6IEJyb3dzZXJTZXRPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSxcbiAgICAgICAgICAgIGJyb3dzZXJJbml0VGltZW91dDogdGhpcy5icm93c2VySW5pdFRpbWVvdXQsXG4gICAgICAgICAgICB3YXJuaW5nTG9nOiAgICAgICAgIHRoaXMud2FybmluZ0xvZyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zZXR1cFByb3h5ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnN0YXR1cyA9PT0gQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5U3RhdHVzLmluaXRpYWxpemVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5jYWxjdWxhdGVIb3N0bmFtZSh7IHByb3h5bGVzczogdGhpcy5wcm94eWxlc3MgfSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuaW5pdGlhbGl6ZSh0aGlzLmNvbmZpZ3VyYXRpb24uc3RhcnRPcHRpb25zKTtcblxuICAgICAgICBpZiAodGhpcy5wcm94eWxlc3MpXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5zd2l0Y2hUb1Byb3h5bGVzcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXNzZXJ0VW5zdXBwb3J0ZWRCcm93c2Vyc0ZvclByb3h5bGVzc01vZGUgKGF1dG9tYXRlZEJyb3dzZXJDb25uZWN0aW9uczogQnJvd3NlckNvbm5lY3Rpb25bXVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wcm94eWxlc3MpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdW5zdXBwb3J0ZWRCcm93c2VycyA9IGZsYXR0ZW4oYXV0b21hdGVkQnJvd3NlckNvbm5lY3Rpb25zKVxuICAgICAgICAgICAgLmZpbHRlcihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWNvbm5lY3Rpb24ucHJvdmlkZXIuc3VwcG9ydFByb3h5bGVzcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmJyb3dzZXJJbmZvLnByb3ZpZGVyTmFtZSk7XG5cbiAgICAgICAgaWYgKHVuc3VwcG9ydGVkQnJvd3NlcnMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5zZXRQcm94eWxlc3NGb3JVbnN1cHBvcnRlZEJyb3dzZXJzLCBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcodW5zdXBwb3J0ZWRCcm93c2VycyksIGdldFBsdXJhbFN1ZmZpeCh1bnN1cHBvcnRlZEJyb3dzZXJzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0QnJvd3NlckNvbm5lY3Rpb25zIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSk6IFByb21pc2U8QnJvd3NlclNldD4ge1xuICAgICAgICBjb25zdCB7IGF1dG9tYXRlZCwgcmVtb3RlcyB9ID0gQm9vdHN0cmFwcGVyLl9zcGxpdEJyb3dzZXJJbmZvKGJyb3dzZXJJbmZvKTtcblxuICAgICAgICBpZiAocmVtb3RlcyAmJiByZW1vdGVzLmxlbmd0aCAlIHRoaXMuY29uY3VycmVuY3kpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLmNhbm5vdERpdmlkZVJlbW90ZXNDb3VudEJ5Q29uY3VycmVuY3kpO1xuXG4gICAgICAgIHRoaXMucHJveHlsZXNzID0gdGhpcy5jb25maWd1cmF0aW9uLmdldE9wdGlvbihPUFRJT05fTkFNRVMucHJveHlsZXNzKTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9zZXR1cFByb3h5KCk7XG5cbiAgICAgICAgbGV0IGJyb3dzZXJDb25uZWN0aW9ucyA9IHRoaXMuX2NyZWF0ZUF1dG9tYXRlZENvbm5lY3Rpb25zKGF1dG9tYXRlZCk7XG5cbiAgICAgICAgdGhpcy5hc3NlcnRVbnN1cHBvcnRlZEJyb3dzZXJzRm9yUHJveHlsZXNzTW9kZShicm93c2VyQ29ubmVjdGlvbnMpO1xuXG4gICAgICAgIHJlbW90ZXMuZm9yRWFjaChyZW1vdGVDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIHJlbW90ZUNvbm5lY3Rpb24ubWVzc2FnZUJ1cyA9IHRoaXMubWVzc2FnZUJ1cztcblxuICAgICAgICAgICAgcmVtb3RlQ29ubmVjdGlvbi5pbml0TWVzc2FnZUJ1cygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBicm93c2VyQ29ubmVjdGlvbnMgPSBicm93c2VyQ29ubmVjdGlvbnMuY29uY2F0KGNodW5rKHJlbW90ZXMsIHRoaXMuY29uY3VycmVuY3kpKTtcblxuICAgICAgICByZXR1cm4gQnJvd3NlclNldC5mcm9tKGJyb3dzZXJDb25uZWN0aW9ucywgdGhpcy5fZ2V0QnJvd3NlclNldE9wdGlvbnMoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZmlsdGVyVGVzdHMgKHRlc3RzOiBUZXN0W10sIHByZWRpY2F0ZTogRmlsdGVyRnVuY3Rpb24pOiBQcm9taXNlPFRlc3RbXT4ge1xuICAgICAgICByZXR1cm4gYXN5bmNGaWx0ZXIodGVzdHMsIHRlc3QgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdEZpeHR1cmUgPSB0ZXN0LmZpeHR1cmUgYXMgRml4dHVyZTtcblxuICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZShcbiAgICAgICAgICAgICAgICB0ZXN0Lm5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIHRlc3RGaXh0dXJlLm5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIHRlc3RGaXh0dXJlLnBhdGgsXG4gICAgICAgICAgICAgICAgdGVzdC5tZXRhLFxuICAgICAgICAgICAgICAgIHRlc3RGaXh0dXJlLm1ldGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9jb21waWxlVGVzdHMgKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCB9OiBDb21waWxlckFyZ3VtZW50cyk6IFByb21pc2U8VGVzdFtdPiB7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5iYXNlVXJsKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGVzbSAgICAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0T3B0aW9uKE9QVElPTl9OQU1FUy5lc20pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbXBpbGVyU2VydmljZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2UuaW5pdCgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlclNlcnZpY2Uuc2V0VXNlclZhcmlhYmxlcyh1c2VyVmFyaWFibGVzLnZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZXJTZXJ2aWNlLmdldFRlc3RzKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCBydW5uYWJsZUNvbmZpZ3VyYXRpb25JZCB9LCBiYXNlVXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBpbGVyID0gbmV3IENvbXBpbGVyKHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9ucywgeyBiYXNlVXJsLCBpc0NvbXBpbGVyU2VydmljZU1vZGU6IGZhbHNlLCBlc20gfSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbXBpbGVyLmdldFRlc3RzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXNzZXJ0R2xvYmFsSG9va3MgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaG9va3MpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuaG9va3MuZml4dHVyZT8uYmVmb3JlKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEJlZm9yZScsICdUaGUgZml4dHVyZS5nbG9iYWxCZWZvcmUgaG9vaycsIHRoaXMuaG9va3MuZml4dHVyZS5iZWZvcmUpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLmZpeHR1cmU/LmFmdGVyKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEFmdGVyJywgJ1RoZSBmaXh0dXJlLmdsb2JhbEFmdGVyIGhvb2snLCB0aGlzLmhvb2tzLmZpeHR1cmUuYWZ0ZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLnRlc3Q/LmJlZm9yZSlcbiAgICAgICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdnbG9iYWxCZWZvcmUnLCAnVGhlIHRlc3QuZ2xvYmFsQmVmb3JlIGhvb2snLCB0aGlzLmhvb2tzLnRlc3QuYmVmb3JlKTtcblxuICAgICAgICBpZiAodGhpcy5ob29rcy50ZXN0Py5hZnRlcilcbiAgICAgICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdnbG9iYWxBZnRlcicsICdUaGUgdGVzdC5nbG9iYWxBZnRlciBob29rJywgdGhpcy5ob29rcy50ZXN0LmFmdGVyKTtcblxuICAgICAgICBpZiAodGhpcy5ob29rcy5yZXF1ZXN0KVxuICAgICAgICAgICAgYXNzZXJ0UmVxdWVzdEhvb2tUeXBlKGZsYXR0ZW4oY2FzdEFycmF5KHRoaXMuaG9va3MucmVxdWVzdCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRHbG9iYWxIb29rc1RvVGVzdHMgKHRlc3RzOiBUZXN0W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhvb2tzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2Fzc2VydEdsb2JhbEhvb2tzKCk7XG5cbiAgICAgICAgY29uc3QgZml4dHVyZUJlZm9yZSA9IHRoaXMuaG9va3MuZml4dHVyZT8uYmVmb3JlIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IGZpeHR1cmVBZnRlciAgPSB0aGlzLmhvb2tzLmZpeHR1cmU/LmFmdGVyIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IHRlc3RCZWZvcmUgICAgPSB0aGlzLmhvb2tzLnRlc3Q/LmJlZm9yZSA/IHdyYXBUZXN0RnVuY3Rpb24odGhpcy5ob29rcy50ZXN0LmJlZm9yZSkgOiBudWxsO1xuICAgICAgICBjb25zdCB0ZXN0QWZ0ZXIgICAgID0gdGhpcy5ob29rcy50ZXN0Py5hZnRlciA/IHdyYXBUZXN0RnVuY3Rpb24odGhpcy5ob29rcy50ZXN0LmFmdGVyKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgICAgICAgPSB0aGlzLmhvb2tzLnJlcXVlc3QgfHwgW107XG5cbiAgICAgICAgdGVzdHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmZpeHR1cmUpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmZpeHR1cmUuZ2xvYmFsQmVmb3JlRm4gPSBpdGVtLmZpeHR1cmUuZ2xvYmFsQmVmb3JlRm4gfHwgZml4dHVyZUJlZm9yZTtcbiAgICAgICAgICAgICAgICBpdGVtLmZpeHR1cmUuZ2xvYmFsQWZ0ZXJGbiAgPSBpdGVtLmZpeHR1cmUuZ2xvYmFsQWZ0ZXJGbiB8fCBmaXh0dXJlQWZ0ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0uZ2xvYmFsQmVmb3JlRm4gPSB0ZXN0QmVmb3JlO1xuICAgICAgICAgICAgaXRlbS5nbG9iYWxBZnRlckZuICA9IHRlc3RBZnRlcjtcbiAgICAgICAgICAgIGl0ZW0ucmVxdWVzdEhvb2tzICAgPSB1bmlvbihmbGF0dGVuKGNhc3RBcnJheShyZXF1ZXN0KSksIGl0ZW0ucmVxdWVzdEhvb2tzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0VGVzdHMgKGlkOiBzdHJpbmcpOiBQcm9taXNlPFRlc3RbXT4ge1xuICAgICAgICBjb25zdCBjd2QgICAgICAgID0gcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgY29uc3Qgc291cmNlTGlzdCA9IGF3YWl0IHBhcnNlRmlsZUxpc3QodGhpcy5zb3VyY2VzLCBjd2QpO1xuXG4gICAgICAgIGlmICghc291cmNlTGlzdC5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLnRlc3RGaWxlc05vdEZvdW5kLCBjd2QsIGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyh0aGlzLnNvdXJjZXMsICdcXG4nLCAnJykpO1xuXG4gICAgICAgIGxldCB0ZXN0cyA9IGF3YWl0IGd1YXJkVGltZUV4ZWN1dGlvbihcbiAgICAgICAgICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuX2NvbXBpbGVUZXN0cyh7IHNvdXJjZUxpc3QsIGNvbXBpbGVyT3B0aW9uczogdGhpcy5jb21waWxlck9wdGlvbnMsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkOiBpZCB9KSxcbiAgICAgICAgICAgIGVsYXBzZWRUaW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyKGB0ZXN0cyBjb21waWxhdGlvbiB0b29rICR7cHJldHR5VGltZShlbGFwc2VkVGltZSl9YCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBbIGVsYXBzZWRTZWNvbmRzIF0gPSBlbGFwc2VkVGltZTtcblxuICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkU2Vjb25kcyA+IHRoaXMuVEVTVFNfQ09NUElMQVRJT05fVVBQRVJCT1VORClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJuaW5nTG9nLmFkZFdhcm5pbmcoV0FSTklOR19NRVNTQUdFUy50ZXN0c0NvbXBpbGF0aW9uVGFrZXNUb29Mb25nLCBwcmV0dHlUaW1lKGVsYXBzZWRUaW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdGVzdHNXaXRoT25seUZsYWcgPSB0ZXN0cy5maWx0ZXIodGVzdCA9PiB0ZXN0Lm9ubHkpO1xuXG4gICAgICAgIGlmICh0ZXN0c1dpdGhPbmx5RmxhZy5sZW5ndGgpXG4gICAgICAgICAgICB0ZXN0cyA9IHRlc3RzV2l0aE9ubHlGbGFnO1xuXG4gICAgICAgIGlmICghdGVzdHMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5ub1Rlc3RzVG9SdW4pO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcilcbiAgICAgICAgICAgIHRlc3RzID0gYXdhaXQgdGhpcy5fZmlsdGVyVGVzdHModGVzdHMsIHRoaXMuZmlsdGVyKTtcblxuICAgICAgICBpZiAoIXRlc3RzLmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMubm9UZXN0c1RvUnVuRHVlRmlsdGVyaW5nKTtcblxuICAgICAgICB0aGlzLl9zZXRHbG9iYWxIb29rc1RvVGVzdHModGVzdHMpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zdGFydFRlc3RlZEFwcCAoKTogUHJvbWlzZTxUZXN0ZWRBcHB8dW5kZWZpbmVkPiB7XG4gICAgICAgIGlmICghdGhpcy5hcHBDb21tYW5kKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICBjb25zdCB0ZXN0ZWRBcHAgPSBuZXcgVGVzdGVkQXBwKCk7XG5cbiAgICAgICAgYXdhaXQgdGVzdGVkQXBwLnN0YXJ0KHRoaXMuYXBwQ29tbWFuZCwgdGhpcy5hcHBJbml0RGVsYXkgYXMgbnVtYmVyKTtcblxuICAgICAgICByZXR1cm4gdGVzdGVkQXBwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2NhblVzZVBhcmFsbGVsQm9vdHN0cmFwcGluZyAoYnJvd3NlckluZm86IEJyb3dzZXJJbmZvU291cmNlW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFByb21pc2VzID0gYnJvd3NlckluZm8ubWFwKGJyb3dzZXIgPT4gYnJvd3Nlci5wcm92aWRlci5pc0xvY2FsQnJvd3Nlcih2b2lkIDAsIEJvb3RzdHJhcHBlci5fZ2V0QnJvd3Nlck5hbWUoYnJvd3NlcikpKTtcbiAgICAgICAgY29uc3QgaXNMb2NhbEJyb3dzZXJzID0gYXdhaXQgUHJvbWlzZS5hbGwoaXNMb2NhbFByb21pc2VzKTtcblxuICAgICAgICByZXR1cm4gaXNMb2NhbEJyb3dzZXJzLmV2ZXJ5KHJlc3VsdCA9PiByZXN1bHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2Jvb3RzdHJhcFNlcXVlbmNlIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSwgaWQ6IHN0cmluZyk6IFByb21pc2U8QmFzaWNSdW50aW1lUmVzb3VyY2VzPiB7XG4gICAgICAgIGNvbnN0IHRlc3RzICAgICAgPSBhd2FpdCB0aGlzLl9nZXRUZXN0cyhpZCk7XG4gICAgICAgIGNvbnN0IHRlc3RlZEFwcCAgPSBhd2FpdCB0aGlzLl9zdGFydFRlc3RlZEFwcCgpO1xuICAgICAgICBjb25zdCBicm93c2VyU2V0ID0gYXdhaXQgdGhpcy5fZ2V0QnJvd3NlckNvbm5lY3Rpb25zKGJyb3dzZXJJbmZvKTtcblxuICAgICAgICByZXR1cm4geyB0ZXN0cywgdGVzdGVkQXBwLCBicm93c2VyU2V0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfd3JhcEJvb3RzdHJhcHBpbmdQcm9taXNlPFQ+IChwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZTxQcm9taXNlUmVzdWx0PFQ+PiB7XG4gICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihyZXN1bHQgPT4gKHsgZXJyb3I6IHZvaWQgMCwgcmVzdWx0IH0pKVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+ICh7IHJlc3VsdDogdm9pZCAwLCBlcnJvciB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0Qm9vdHN0cmFwcGluZ0Vycm9yIChicm93c2VyU2V0U3RhdHVzOiBQcm9taXNlUmVzdWx0PEJyb3dzZXJTZXQ+LCB0ZXN0c1N0YXR1czogUHJvbWlzZVJlc3VsdDxUZXN0W10+LCB0ZXN0ZWRBcHBTdGF0dXM6IFByb21pc2VSZXN1bHQ8VGVzdGVkQXBwfHVuZGVmaW5lZD4pOiBQcm9taXNlPEVycm9yPiB7XG4gICAgICAgIGlmICghaXNQcm9taXNlRXJyb3IoYnJvd3NlclNldFN0YXR1cykpXG4gICAgICAgICAgICBhd2FpdCBicm93c2VyU2V0U3RhdHVzLnJlc3VsdC5kaXNwb3NlKCk7XG5cbiAgICAgICAgaWYgKCFpc1Byb21pc2VFcnJvcihicm93c2VyU2V0U3RhdHVzKSAmJiAhaXNQcm9taXNlRXJyb3IodGVzdGVkQXBwU3RhdHVzKSAmJiB0ZXN0ZWRBcHBTdGF0dXMucmVzdWx0KVxuICAgICAgICAgICAgYXdhaXQgdGVzdGVkQXBwU3RhdHVzLnJlc3VsdC5raWxsKCk7XG5cbiAgICAgICAgaWYgKGlzUHJvbWlzZUVycm9yKHRlc3RzU3RhdHVzKSlcbiAgICAgICAgICAgIHJldHVybiB0ZXN0c1N0YXR1cy5lcnJvcjtcblxuICAgICAgICBpZiAoaXNQcm9taXNlRXJyb3IodGVzdGVkQXBwU3RhdHVzKSlcbiAgICAgICAgICAgIHJldHVybiB0ZXN0ZWRBcHBTdGF0dXMuZXJyb3I7XG5cbiAgICAgICAgaWYgKGlzUHJvbWlzZUVycm9yKGJyb3dzZXJTZXRTdGF0dXMpKVxuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXJTZXRTdGF0dXMuZXJyb3I7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignVW5leHBlY3RlZCBjYWxsJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Qm9vdHN0cmFwcGluZ1Byb21pc2VzPFQ+IChhcmc6IFByb21pc2VDb2xsZWN0aW9uPFQ+KTogUHJvbWlzZUNvbGxlY3Rpb248UmVzdWx0Q29sbGVjdGlvbjxUPj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fSBhcyB1bmtub3duIGFzIFByb21pc2VDb2xsZWN0aW9uPFJlc3VsdENvbGxlY3Rpb248VD4+O1xuXG4gICAgICAgIGZvciAoY29uc3QgayBpbiBhcmcpXG4gICAgICAgICAgICByZXN1bHRba10gPSB0aGlzLl93cmFwQm9vdHN0cmFwcGluZ1Byb21pc2UoYXJnW2tdKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2Jvb3RzdHJhcFBhcmFsbGVsIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSwgaWQ6IHN0cmluZyk6IFByb21pc2U8QmFzaWNSdW50aW1lUmVzb3VyY2VzPiB7XG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBpbmdQcm9taXNlcyA9IHtcbiAgICAgICAgICAgIGJyb3dzZXJTZXQ6IHRoaXMuX2dldEJyb3dzZXJDb25uZWN0aW9ucyhicm93c2VySW5mbyksXG4gICAgICAgICAgICB0ZXN0czogICAgICB0aGlzLl9nZXRUZXN0cyhpZCksXG4gICAgICAgICAgICBhcHA6ICAgICAgICB0aGlzLl9zdGFydFRlc3RlZEFwcCgpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBpbmdSZXN1bHRQcm9taXNlcyA9IHRoaXMuX2dldEJvb3RzdHJhcHBpbmdQcm9taXNlcyhib290c3RyYXBwaW5nUHJvbWlzZXMpO1xuXG4gICAgICAgIGNvbnN0IGJvb3RzdHJhcHBpbmdSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgYm9vdHN0cmFwcGluZ1Jlc3VsdFByb21pc2VzLmJyb3dzZXJTZXQsXG4gICAgICAgICAgICBib290c3RyYXBwaW5nUmVzdWx0UHJvbWlzZXMudGVzdHMsXG4gICAgICAgICAgICBib290c3RyYXBwaW5nUmVzdWx0UHJvbWlzZXMuYXBwLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCBbYnJvd3NlclNldFJlc3VsdHMsIHRlc3RSZXN1bHRzLCBhcHBSZXN1bHRzXSA9IGJvb3RzdHJhcHBpbmdSZXN1bHRzO1xuXG4gICAgICAgIGlmIChpc1Byb21pc2VFcnJvcihicm93c2VyU2V0UmVzdWx0cykgfHwgaXNQcm9taXNlRXJyb3IodGVzdFJlc3VsdHMpIHx8IGlzUHJvbWlzZUVycm9yKGFwcFJlc3VsdHMpKVxuICAgICAgICAgICAgdGhyb3cgYXdhaXQgdGhpcy5fZ2V0Qm9vdHN0cmFwcGluZ0Vycm9yKC4uLmJvb3RzdHJhcHBpbmdSZXN1bHRzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJvd3NlclNldDogYnJvd3NlclNldFJlc3VsdHMucmVzdWx0LFxuICAgICAgICAgICAgdGVzdHM6ICAgICAgdGVzdFJlc3VsdHMucmVzdWx0LFxuICAgICAgICAgICAgdGVzdGVkQXBwOiAgYXBwUmVzdWx0cy5yZXN1bHQsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gQVBJXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZVJ1bm5hYmxlQ29uZmlndXJhdGlvbiAoKTogUHJvbWlzZTxSdW5uYWJsZUNvbmZpZ3VyYXRpb24+IHtcbiAgICAgICAgY29uc3QgaWQgICAgICAgICAgICAgICAgICA9IGdlbmVyYXRlVW5pcXVlSWQoKTtcbiAgICAgICAgY29uc3QgY29tbW9uQ2xpZW50U2NyaXB0cyA9IGF3YWl0IGxvYWRDbGllbnRTY3JpcHRzKHRoaXMuY2xpZW50U2NyaXB0cyk7XG5cbiAgICAgICAgaWYgKGF3YWl0IHRoaXMuX2NhblVzZVBhcmFsbGVsQm9vdHN0cmFwcGluZyh0aGlzLmJyb3dzZXJzKSlcbiAgICAgICAgICAgIHJldHVybiB7IC4uLmF3YWl0IHRoaXMuX2Jvb3RzdHJhcFBhcmFsbGVsKHRoaXMuYnJvd3NlcnMsIGlkKSwgY29tbW9uQ2xpZW50U2NyaXB0cywgaWQgfTtcblxuICAgICAgICByZXR1cm4geyAuLi5hd2FpdCB0aGlzLl9ib290c3RyYXBTZXF1ZW5jZSh0aGlzLmJyb3dzZXJzLCBpZCksIGNvbW1vbkNsaWVudFNjcmlwdHMsIGlkIH07XG4gICAgfVxuXG4gICAgcHVibGljIHJlc3RvcmVNZXNzYWdlQnVzTGlzdGVuZXJzICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbnMgPSB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5nZXRDb25uZWN0aW9ucygpO1xuXG4gICAgICAgIE9iamVjdC52YWx1ZXMoY29ubmVjdGlvbnMpLmZvckVhY2goY29ubmVjdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLmFzc2lnblRlc3RSdW5TdGFydEV2ZW50TGlzdGVuZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bm5lci9ib290c3RyYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FNZ0I7QUFFaEIsa0RBQTBCO0FBQzFCLGtFQUF1QztBQUN2QywyREFBbUM7QUFDbkMsdUVBQXVFO0FBQ3ZFLGdFQUF1QztBQUN2QywrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBQ2pELDhEQUFxQztBQUNyQywrRUFBcUQ7QUFDckQseUVBQThEO0FBQzlELDRDQUE4RDtBQVM5RCwrRUFBc0Q7QUFDdEQsdUZBQWdFO0FBQ2hFLHlGQUErRDtBQUMvRCx5RUFBZ0Q7QUFHaEQsbUZBQXlEO0FBQ3pELHVFQUFtRTtBQUNuRSw2REFBdUQ7QUFDdkQsbUZBQXFFO0FBQ3JFLDJFQUFrRDtBQUNsRCxpRkFBeUQ7QUFFekQsa0ZBQWtGO0FBRWxGLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDO0FBMkI1QyxTQUFTLGNBQWMsQ0FBOEIsS0FBMEI7SUFDM0UsT0FBUSxLQUF5QixDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBYUQsTUFBcUIsWUFBWTtJQXlCN0IsWUFBb0IsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBb0I7UUFDMUcsSUFBSSxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQWdCLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFvQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFxQixLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFpQixLQUFLLENBQUMsQ0FBQztRQUN2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QUFFLENBQUM7UUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUEsY0FBaUIsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEUsSUFBSSxNQUFNLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3RELHVDQUFZLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUUsbUJBQW1CLEVBQUUsRUFBRSxJQUFHO1FBRTVGLHVDQUFZLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUUsbUJBQW1CLEVBQUUsRUFBRSxJQUFHO0lBQzVGLENBQUM7SUFFTSwwQkFBMEI7UUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRW5FLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzVDLFVBQVUsQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBM1dELCtCQTJXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY2h1bmssXG4gICAgdGltZXMsXG4gICAgdW5pb24sXG4gICAgY2FzdEFycmF5LFxuICAgIGZsYXR0ZW5EZWVwIGFzIGZsYXR0ZW4sXG59IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgcHJldHR5VGltZSBmcm9tICdwcmV0dHktaHJ0aW1lJztcbmltcG9ydCBDb21waWxlciBmcm9tICcuLi9jb21waWxlcic7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb24sIHsgQnJvd3NlckluZm8gfSBmcm9tICcuLi9icm93c2VyL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IEJyb3dzZXJTZXQgZnJvbSAnLi9icm93c2VyLXNldCc7XG5pbXBvcnQgeyBHZW5lcmFsRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgVGVzdGVkQXBwIGZyb20gJy4vdGVzdGVkLWFwcCc7XG5pbXBvcnQgcGFyc2VGaWxlTGlzdCBmcm9tICcuLi91dGlscy9wYXJzZS1maWxlLWxpc3QnO1xuaW1wb3J0IGxvYWRDbGllbnRTY3JpcHRzIGZyb20gJy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9sb2FkJztcbmltcG9ydCB7IGdldENvbmNhdGVuYXRlZFZhbHVlc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5pbXBvcnQgeyBSZXBvcnRlclNvdXJjZSB9IGZyb20gJy4uL3JlcG9ydGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IENsaWVudFNjcmlwdCBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdCc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdC1pbml0JztcbmltcG9ydCBCcm93c2VyQ29ubmVjdGlvbkdhdGV3YXkgZnJvbSAnLi4vYnJvd3Nlci9jb25uZWN0aW9uL2dhdGV3YXknO1xuaW1wb3J0IHsgQ29tcGlsZXJBcmd1bWVudHMgfSBmcm9tICcuLi9jb21waWxlci9pbnRlcmZhY2VzJztcbmltcG9ydCBDb21waWxlclNlcnZpY2UgZnJvbSAnLi4vc2VydmljZXMvY29tcGlsZXIvaG9zdCc7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVySW5pdCwgQnJvd3NlclNldE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IFdhcm5pbmdMb2cgZnJvbSAnLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLWxvZyc7XG5pbXBvcnQgV0FSTklOR19NRVNTQUdFUyBmcm9tICcuLi9ub3RpZmljYXRpb25zL3dhcm5pbmctbWVzc2FnZSc7XG5pbXBvcnQgZ3VhcmRUaW1lRXhlY3V0aW9uIGZyb20gJy4uL3V0aWxzL2d1YXJkLXRpbWUtZXhlY3V0aW9uJztcbmltcG9ydCBhc3luY0ZpbHRlciBmcm9tICcuLi91dGlscy9hc3luYy1maWx0ZXInO1xuaW1wb3J0IEZpeHR1cmUgZnJvbSAnLi4vYXBpL3N0cnVjdHVyZS9maXh0dXJlJztcbmltcG9ydCBNZXNzYWdlQnVzIGZyb20gJy4uL3V0aWxzL21lc3NhZ2UtYnVzJztcbmltcG9ydCB3cmFwVGVzdEZ1bmN0aW9uIGZyb20gJy4uL2FwaS93cmFwLXRlc3QtZnVuY3Rpb24nO1xuaW1wb3J0IHsgYXNzZXJ0VHlwZSwgaXMgfSBmcm9tICcuLi9lcnJvcnMvcnVudGltZS90eXBlLWFzc2VydGlvbnMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVJZCB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IGFzc2VydFJlcXVlc3RIb29rVHlwZSBmcm9tICcuLi9hcGkvcmVxdWVzdC1ob29rcy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgdXNlclZhcmlhYmxlcyBmcm9tICcuLi9hcGkvdXNlci12YXJpYWJsZXMnO1xuaW1wb3J0IE9QVElPTl9OQU1FUyBmcm9tICcuLi9jb25maWd1cmF0aW9uL29wdGlvbi1uYW1lcyc7XG5pbXBvcnQgVGVzdENhZmVDb25maWd1cmF0aW9uIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vdGVzdGNhZmUtY29uZmlndXJhdGlvbic7XG5pbXBvcnQgQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5U3RhdHVzIGZyb20gJy4uL2Jyb3dzZXIvY29ubmVjdGlvbi9nYXRld2F5L3N0YXR1cyc7XG5cbmNvbnN0IERFQlVHX1NDT1BFID0gJ3Rlc3RjYWZlOmJvb3RzdHJhcHBlcic7XG5cbnR5cGUgVGVzdFNvdXJjZSA9IHVua25vd247XG5cbnR5cGUgQnJvd3NlckluZm9Tb3VyY2UgPSBCcm93c2VySW5mbyB8IEJyb3dzZXJDb25uZWN0aW9uO1xuXG5pbnRlcmZhY2UgUHJvbWlzZVN1Y2Nlc3M8VD4ge1xuICAgIHJlc3VsdDogVDtcbn1cblxuaW50ZXJmYWNlIFByb21pc2VFcnJvcjxFIGV4dGVuZHMgRXJyb3IgPSBFcnJvcj4ge1xuICAgIGVycm9yOiBFO1xufVxuXG5pbnRlcmZhY2UgQmFzaWNSdW50aW1lUmVzb3VyY2VzIHtcbiAgICBicm93c2VyU2V0OiBCcm93c2VyU2V0O1xuICAgIHRlc3RzOiBUZXN0W107XG4gICAgdGVzdGVkQXBwPzogVGVzdGVkQXBwO1xufVxuXG5pbnRlcmZhY2UgUnVubmFibGVDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzaWNSdW50aW1lUmVzb3VyY2VzIHtcbiAgICBjb21tb25DbGllbnRTY3JpcHRzOiBDbGllbnRTY3JpcHRbXTtcbiAgICBpZDogc3RyaW5nO1xufVxuXG50eXBlIFByb21pc2VSZXN1bHQ8VCwgRSBleHRlbmRzIEVycm9yID0gRXJyb3I+ID0gUHJvbWlzZVN1Y2Nlc3M8VD4gfCBQcm9taXNlRXJyb3I8RT47XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZUVycm9yPFQsIEUgZXh0ZW5kcyBFcnJvciA9IEVycm9yPiAodmFsdWU6IFByb21pc2VSZXN1bHQ8VCwgRT4pOiB2YWx1ZSBpcyBQcm9taXNlRXJyb3I8RT4ge1xuICAgIHJldHVybiAodmFsdWUgYXMgUHJvbWlzZUVycm9yPEU+KS5lcnJvciAhPT0gdm9pZCAwO1xufVxuXG5pbnRlcmZhY2UgU2VwYXJhdGVkQnJvd3NlckluZm8ge1xuICAgIHJlbW90ZXM6IEJyb3dzZXJDb25uZWN0aW9uW107XG4gICAgYXV0b21hdGVkOiBCcm93c2VySW5mb1tdO1xufVxuXG50eXBlIFByb21pc2VDb2xsZWN0aW9uPFQ+ID0ge1xuICAgIFtLIGluIGtleW9mIFRdOiBQcm9taXNlPFRbS10+XG59XG5cbnR5cGUgUmVzdWx0Q29sbGVjdGlvbjxUPiA9IHsgW1AgaW4ga2V5b2YgVF06IFByb21pc2VSZXN1bHQ8VFtQXT4gfTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9vdHN0cmFwcGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheTogQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5O1xuICAgIHB1YmxpYyBjb25jdXJyZW5jeTogbnVtYmVyO1xuICAgIHB1YmxpYyBzb3VyY2VzOiBUZXN0U291cmNlW107XG4gICAgcHVibGljIGJyb3dzZXJzOiBCcm93c2VySW5mb1NvdXJjZVtdO1xuICAgIHB1YmxpYyByZXBvcnRlcnM6IFJlcG9ydGVyU291cmNlW107XG4gICAgcHVibGljIGZpbHRlcj86IEZpbHRlckZ1bmN0aW9uO1xuICAgIHB1YmxpYyBhcHBDb21tYW5kPzogc3RyaW5nO1xuICAgIHB1YmxpYyBhcHBJbml0RGVsYXk/OiBudW1iZXI7XG4gICAgcHVibGljIHRzQ29uZmlnUGF0aD86IHN0cmluZztcbiAgICBwdWJsaWMgY2xpZW50U2NyaXB0czogQ2xpZW50U2NyaXB0SW5pdFtdO1xuICAgIHB1YmxpYyBkaXNhYmxlTXVsdGlwbGVXaW5kb3dzOiBib29sZWFuO1xuICAgIHB1YmxpYyBwcm94eWxlc3M6IGJvb2xlYW47XG4gICAgcHVibGljIGNvbXBpbGVyT3B0aW9ucz86IENvbXBpbGVyT3B0aW9ucztcbiAgICBwdWJsaWMgYnJvd3NlckluaXRUaW1lb3V0PzogbnVtYmVyO1xuICAgIHB1YmxpYyBob29rcz86IEdsb2JhbEhvb2tzO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uOiBUZXN0Q2FmZUNvbmZpZ3VyYXRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyU2VydmljZT86IENvbXBpbGVyU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdhcm5pbmdMb2c6IFdhcm5pbmdMb2c7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlQnVzOiBNZXNzYWdlQnVzO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBURVNUU19DT01QSUxBVElPTl9VUFBFUkJPVU5EOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHsgYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LCBjb21waWxlclNlcnZpY2UsIG1lc3NhZ2VCdXMsIGNvbmZpZ3VyYXRpb24gfTogQm9vdHN0cmFwcGVySW5pdCkge1xuICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheSA9IGJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheTtcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSAgICAgICAgICAgICAgPSAxO1xuICAgICAgICB0aGlzLnNvdXJjZXMgICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmJyb3dzZXJzICAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlcG9ydGVycyAgICAgICAgICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlciAgICAgICAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5hcHBDb21tYW5kICAgICAgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuYXBwSW5pdERlbGF5ICAgICAgICAgICAgID0gdm9pZCAwO1xuICAgICAgICB0aGlzLnRzQ29uZmlnUGF0aCAgICAgICAgICAgICA9IHZvaWQgMDtcbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm94eWxlc3MgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21waWxlck9wdGlvbnMgICAgICAgICAgPSB2b2lkIDA7XG4gICAgICAgIHRoaXMuZGVidWdMb2dnZXIgICAgICAgICAgICAgID0gZGVidWcoREVCVUdfU0NPUEUpO1xuICAgICAgICB0aGlzLndhcm5pbmdMb2cgICAgICAgICAgICAgICA9IG5ldyBXYXJuaW5nTG9nKG51bGwsIFdhcm5pbmdMb2cuY3JlYXRlQWRkV2FybmluZ0NhbGxiYWNrKG1lc3NhZ2VCdXMpKTtcbiAgICAgICAgdGhpcy5jb21waWxlclNlcnZpY2UgICAgICAgICAgPSBjb21waWxlclNlcnZpY2U7XG4gICAgICAgIHRoaXMubWVzc2FnZUJ1cyAgICAgICAgICAgICAgID0gbWVzc2FnZUJ1cztcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uICAgICAgICAgICAgPSBjb25maWd1cmF0aW9uO1xuXG4gICAgICAgIHRoaXMuVEVTVFNfQ09NUElMQVRJT05fVVBQRVJCT1VORCA9IDYwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRCcm93c2VyTmFtZSAoYnJvd3NlcjogQnJvd3NlckluZm9Tb3VyY2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoYnJvd3NlciBpbnN0YW5jZW9mIEJyb3dzZXJDb25uZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3NlckluZm8uYnJvd3Nlck5hbWU7XG5cbiAgICAgICAgcmV0dXJuIGJyb3dzZXIuYnJvd3Nlck5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3NwbGl0QnJvd3NlckluZm8gKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdKTogU2VwYXJhdGVkQnJvd3NlckluZm8ge1xuICAgICAgICBjb25zdCByZW1vdGVzOiBCcm93c2VyQ29ubmVjdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IGF1dG9tYXRlZDogQnJvd3NlckluZm9bXSAgICAgPSBbXTtcblxuICAgICAgICBicm93c2VySW5mby5mb3JFYWNoKGJyb3dzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGJyb3dzZXIgaW5zdGFuY2VvZiBCcm93c2VyQ29ubmVjdGlvbilcbiAgICAgICAgICAgICAgICByZW1vdGVzLnB1c2goYnJvd3Nlcik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXV0b21hdGVkLnB1c2goYnJvd3Nlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IHJlbW90ZXMsIGF1dG9tYXRlZCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUF1dG9tYXRlZENvbm5lY3Rpb25zIChicm93c2VySW5mbzogQnJvd3NlckluZm9bXSk6IEJyb3dzZXJDb25uZWN0aW9uW11bXSB7XG4gICAgICAgIGlmICghYnJvd3NlckluZm8pXG4gICAgICAgICAgICByZXR1cm4gW107XG5cbiAgICAgICAgcmV0dXJuIGJyb3dzZXJJbmZvLm1hcChicm93c2VyID0+IHRpbWVzKHRoaXMuY29uY3VycmVuY3ksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZU11bHRpcGxlV2luZG93czogdGhpcy5kaXNhYmxlTXVsdGlwbGVXaW5kb3dzLFxuICAgICAgICAgICAgICAgIGRldmVsb3BtZW50TW9kZTogICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmRldmVsb3BtZW50TW9kZSkgYXMgYm9vbGVhbixcbiAgICAgICAgICAgICAgICBwcm94eWxlc3M6ICAgICAgICAgICAgICB0aGlzLnByb3h5bGVzcyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgQnJvd3NlckNvbm5lY3Rpb24odGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXksIHsgLi4uYnJvd3NlciB9LCBmYWxzZSwgb3B0aW9ucywgdGhpcy5tZXNzYWdlQnVzKTtcblxuICAgICAgICAgICAgY29ubmVjdGlvbi5pbml0aWFsaXplKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0QnJvd3NlclNldE9wdGlvbnMgKCk6IEJyb3dzZXJTZXRPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbmN5OiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSxcbiAgICAgICAgICAgIGJyb3dzZXJJbml0VGltZW91dDogdGhpcy5icm93c2VySW5pdFRpbWVvdXQsXG4gICAgICAgICAgICB3YXJuaW5nTG9nOiAgICAgICAgIHRoaXMud2FybmluZ0xvZyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zZXR1cFByb3h5ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnN0YXR1cyA9PT0gQnJvd3NlckNvbm5lY3Rpb25HYXRld2F5U3RhdHVzLmluaXRpYWxpemVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5jYWxjdWxhdGVIb3N0bmFtZSh7IHByb3h5bGVzczogdGhpcy5wcm94eWxlc3MgfSk7XG5cbiAgICAgICAgdGhpcy5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkuaW5pdGlhbGl6ZSh0aGlzLmNvbmZpZ3VyYXRpb24uc3RhcnRPcHRpb25zKTtcblxuICAgICAgICBpZiAodGhpcy5wcm94eWxlc3MpXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5zd2l0Y2hUb1Byb3h5bGVzcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXNzZXJ0VW5zdXBwb3J0ZWRCcm93c2Vyc0ZvclByb3h5bGVzc01vZGUgKGF1dG9tYXRlZEJyb3dzZXJDb25uZWN0aW9uczogQnJvd3NlckNvbm5lY3Rpb25bXVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wcm94eWxlc3MpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdW5zdXBwb3J0ZWRCcm93c2VycyA9IGZsYXR0ZW4oYXV0b21hdGVkQnJvd3NlckNvbm5lY3Rpb25zKVxuICAgICAgICAgICAgLmZpbHRlcihjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWNvbm5lY3Rpb24ucHJvdmlkZXIuc3VwcG9ydFByb3h5bGVzcygpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoY29ubmVjdGlvbiA9PiBjb25uZWN0aW9uLmJyb3dzZXJJbmZvLnByb3ZpZGVyTmFtZSk7XG5cbiAgICAgICAgaWYgKHVuc3VwcG9ydGVkQnJvd3NlcnMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5zZXRQcm94eWxlc3NGb3JVbnN1cHBvcnRlZEJyb3dzZXJzLCBnZXRDb25jYXRlbmF0ZWRWYWx1ZXNTdHJpbmcodW5zdXBwb3J0ZWRCcm93c2VycykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldEJyb3dzZXJDb25uZWN0aW9ucyAoYnJvd3NlckluZm86IEJyb3dzZXJJbmZvU291cmNlW10pOiBQcm9taXNlPEJyb3dzZXJTZXQ+IHtcbiAgICAgICAgY29uc3QgeyBhdXRvbWF0ZWQsIHJlbW90ZXMgfSA9IEJvb3RzdHJhcHBlci5fc3BsaXRCcm93c2VySW5mbyhicm93c2VySW5mbyk7XG5cbiAgICAgICAgaWYgKHJlbW90ZXMgJiYgcmVtb3Rlcy5sZW5ndGggJSB0aGlzLmNvbmN1cnJlbmN5KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3REaXZpZGVSZW1vdGVzQ291bnRCeUNvbmN1cnJlbmN5KTtcblxuICAgICAgICB0aGlzLnByb3h5bGVzcyA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLm5hdGl2ZUF1dG9tYXRpb24pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX3NldHVwUHJveHkoKTtcblxuICAgICAgICBsZXQgYnJvd3NlckNvbm5lY3Rpb25zID0gdGhpcy5fY3JlYXRlQXV0b21hdGVkQ29ubmVjdGlvbnMoYXV0b21hdGVkKTtcblxuICAgICAgICB0aGlzLmFzc2VydFVuc3VwcG9ydGVkQnJvd3NlcnNGb3JQcm94eWxlc3NNb2RlKGJyb3dzZXJDb25uZWN0aW9ucyk7XG5cbiAgICAgICAgcmVtb3Rlcy5mb3JFYWNoKHJlbW90ZUNvbm5lY3Rpb24gPT4ge1xuICAgICAgICAgICAgcmVtb3RlQ29ubmVjdGlvbi5tZXNzYWdlQnVzID0gdGhpcy5tZXNzYWdlQnVzO1xuXG4gICAgICAgICAgICByZW1vdGVDb25uZWN0aW9uLmluaXRNZXNzYWdlQnVzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJyb3dzZXJDb25uZWN0aW9ucyA9IGJyb3dzZXJDb25uZWN0aW9ucy5jb25jYXQoY2h1bmsocmVtb3RlcywgdGhpcy5jb25jdXJyZW5jeSkpO1xuXG4gICAgICAgIHJldHVybiBCcm93c2VyU2V0LmZyb20oYnJvd3NlckNvbm5lY3Rpb25zLCB0aGlzLl9nZXRCcm93c2VyU2V0T3B0aW9ucygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9maWx0ZXJUZXN0cyAodGVzdHM6IFRlc3RbXSwgcHJlZGljYXRlOiBGaWx0ZXJGdW5jdGlvbik6IFByb21pc2U8VGVzdFtdPiB7XG4gICAgICAgIHJldHVybiBhc3luY0ZpbHRlcih0ZXN0cywgdGVzdCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Rml4dHVyZSA9IHRlc3QuZml4dHVyZSBhcyBGaXh0dXJlO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJlZGljYXRlKFxuICAgICAgICAgICAgICAgIHRlc3QubmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgdGVzdEZpeHR1cmUubmFtZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgdGVzdEZpeHR1cmUucGF0aCxcbiAgICAgICAgICAgICAgICB0ZXN0Lm1ldGEsXG4gICAgICAgICAgICAgICAgdGVzdEZpeHR1cmUubWV0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2NvbXBpbGVUZXN0cyAoeyBzb3VyY2VMaXN0LCBjb21waWxlck9wdGlvbnMsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkIH06IENvbXBpbGVyQXJndW1lbnRzKTogUHJvbWlzZTxUZXN0W10+IHtcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmJhc2VVcmwpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgZXNtICAgICA9IHRoaXMuY29uZmlndXJhdGlvbi5nZXRPcHRpb24oT1BUSU9OX05BTUVTLmVzbSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcGlsZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZS5pbml0KCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbXBpbGVyU2VydmljZS5zZXRVc2VyVmFyaWFibGVzKHVzZXJWYXJpYWJsZXMudmFsdWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlclNlcnZpY2UuZ2V0VGVzdHMoeyBzb3VyY2VMaXN0LCBjb21waWxlck9wdGlvbnMsIHJ1bm5hYmxlQ29uZmlndXJhdGlvbklkIH0sIGJhc2VVcmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29tcGlsZXIgPSBuZXcgQ29tcGlsZXIoc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zLCB7IGJhc2VVcmwsIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZTogZmFsc2UsIGVzbSB9KTtcblxuICAgICAgICByZXR1cm4gY29tcGlsZXIuZ2V0VGVzdHMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hc3NlcnRHbG9iYWxIb29rcyAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5ob29rcylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5ob29rcy5maXh0dXJlPy5iZWZvcmUpXG4gICAgICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnZ2xvYmFsQmVmb3JlJywgJ1RoZSBmaXh0dXJlLmdsb2JhbEJlZm9yZSBob29rJywgdGhpcy5ob29rcy5maXh0dXJlLmJlZm9yZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaG9va3MuZml4dHVyZT8uYWZ0ZXIpXG4gICAgICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnZ2xvYmFsQWZ0ZXInLCAnVGhlIGZpeHR1cmUuZ2xvYmFsQWZ0ZXIgaG9vaycsIHRoaXMuaG9va3MuZml4dHVyZS5hZnRlcik7XG5cbiAgICAgICAgaWYgKHRoaXMuaG9va3MudGVzdD8uYmVmb3JlKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEJlZm9yZScsICdUaGUgdGVzdC5nbG9iYWxCZWZvcmUgaG9vaycsIHRoaXMuaG9va3MudGVzdC5iZWZvcmUpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLnRlc3Q/LmFmdGVyKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2dsb2JhbEFmdGVyJywgJ1RoZSB0ZXN0Lmdsb2JhbEFmdGVyIGhvb2snLCB0aGlzLmhvb2tzLnRlc3QuYWZ0ZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvb2tzLnJlcXVlc3QpXG4gICAgICAgICAgICBhc3NlcnRSZXF1ZXN0SG9va1R5cGUoZmxhdHRlbihjYXN0QXJyYXkodGhpcy5ob29rcy5yZXF1ZXN0KSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEdsb2JhbEhvb2tzVG9UZXN0cyAodGVzdHM6IFRlc3RbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaG9va3MpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5fYXNzZXJ0R2xvYmFsSG9va3MoKTtcblxuICAgICAgICBjb25zdCBmaXh0dXJlQmVmb3JlID0gdGhpcy5ob29rcy5maXh0dXJlPy5iZWZvcmUgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgZml4dHVyZUFmdGVyICA9IHRoaXMuaG9va3MuZml4dHVyZT8uYWZ0ZXIgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgdGVzdEJlZm9yZSAgICA9IHRoaXMuaG9va3MudGVzdD8uYmVmb3JlID8gd3JhcFRlc3RGdW5jdGlvbih0aGlzLmhvb2tzLnRlc3QuYmVmb3JlKSA6IG51bGw7XG4gICAgICAgIGNvbnN0IHRlc3RBZnRlciAgICAgPSB0aGlzLmhvb2tzLnRlc3Q/LmFmdGVyID8gd3JhcFRlc3RGdW5jdGlvbih0aGlzLmhvb2tzLnRlc3QuYWZ0ZXIpIDogbnVsbDtcbiAgICAgICAgY29uc3QgcmVxdWVzdCAgICAgICA9IHRoaXMuaG9va3MucmVxdWVzdCB8fCBbXTtcblxuICAgICAgICB0ZXN0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZml4dHVyZSkge1xuICAgICAgICAgICAgICAgIGl0ZW0uZml4dHVyZS5nbG9iYWxCZWZvcmVGbiA9IGl0ZW0uZml4dHVyZS5nbG9iYWxCZWZvcmVGbiB8fCBmaXh0dXJlQmVmb3JlO1xuICAgICAgICAgICAgICAgIGl0ZW0uZml4dHVyZS5nbG9iYWxBZnRlckZuICA9IGl0ZW0uZml4dHVyZS5nbG9iYWxBZnRlckZuIHx8IGZpeHR1cmVBZnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5nbG9iYWxCZWZvcmVGbiA9IHRlc3RCZWZvcmU7XG4gICAgICAgICAgICBpdGVtLmdsb2JhbEFmdGVyRm4gID0gdGVzdEFmdGVyO1xuICAgICAgICAgICAgaXRlbS5yZXF1ZXN0SG9va3MgICA9IHVuaW9uKGZsYXR0ZW4oY2FzdEFycmF5KHJlcXVlc3QpKSwgaXRlbS5yZXF1ZXN0SG9va3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRUZXN0cyAoaWQ6IHN0cmluZyk6IFByb21pc2U8VGVzdFtdPiB7XG4gICAgICAgIGNvbnN0IGN3ZCAgICAgICAgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgICBjb25zdCBzb3VyY2VMaXN0ID0gYXdhaXQgcGFyc2VGaWxlTGlzdCh0aGlzLnNvdXJjZXMsIGN3ZCk7XG5cbiAgICAgICAgaWYgKCFzb3VyY2VMaXN0Lmxlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMudGVzdEZpbGVzTm90Rm91bmQsIGN3ZCwgZ2V0Q29uY2F0ZW5hdGVkVmFsdWVzU3RyaW5nKHRoaXMuc291cmNlcywgJ1xcbicsICcnKSk7XG5cbiAgICAgICAgbGV0IHRlc3RzID0gYXdhaXQgZ3VhcmRUaW1lRXhlY3V0aW9uKFxuICAgICAgICAgICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5fY29tcGlsZVRlc3RzKHsgc291cmNlTGlzdCwgY29tcGlsZXJPcHRpb25zOiB0aGlzLmNvbXBpbGVyT3B0aW9ucywgcnVubmFibGVDb25maWd1cmF0aW9uSWQ6IGlkIH0pLFxuICAgICAgICAgICAgZWxhcHNlZFRpbWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVidWdMb2dnZXIoYHRlc3RzIGNvbXBpbGF0aW9uIHRvb2sgJHtwcmV0dHlUaW1lKGVsYXBzZWRUaW1lKX1gKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IFsgZWxhcHNlZFNlY29uZHMgXSA9IGVsYXBzZWRUaW1lO1xuXG4gICAgICAgICAgICAgICAgaWYgKGVsYXBzZWRTZWNvbmRzID4gdGhpcy5URVNUU19DT01QSUxBVElPTl9VUFBFUkJPVU5EKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdMb2cuYWRkV2FybmluZyhXQVJOSU5HX01FU1NBR0VTLnRlc3RzQ29tcGlsYXRpb25UYWtlc1Rvb0xvbmcsIHByZXR0eVRpbWUoZWxhcHNlZFRpbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0ZXN0c1dpdGhPbmx5RmxhZyA9IHRlc3RzLmZpbHRlcih0ZXN0ID0+IHRlc3Qub25seSk7XG5cbiAgICAgICAgaWYgKHRlc3RzV2l0aE9ubHlGbGFnLmxlbmd0aClcbiAgICAgICAgICAgIHRlc3RzID0gdGVzdHNXaXRoT25seUZsYWc7XG5cbiAgICAgICAgaWYgKCF0ZXN0cy5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgR2VuZXJhbEVycm9yKFJVTlRJTUVfRVJST1JTLm5vVGVzdHNUb1J1bik7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyKVxuICAgICAgICAgICAgdGVzdHMgPSBhd2FpdCB0aGlzLl9maWx0ZXJUZXN0cyh0ZXN0cywgdGhpcy5maWx0ZXIpO1xuXG4gICAgICAgIGlmICghdGVzdHMubGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5ub1Rlc3RzVG9SdW5EdWVGaWx0ZXJpbmcpO1xuXG4gICAgICAgIHRoaXMuX3NldEdsb2JhbEhvb2tzVG9UZXN0cyh0ZXN0cyk7XG5cbiAgICAgICAgcmV0dXJuIHRlc3RzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3N0YXJ0VGVzdGVkQXBwICgpOiBQcm9taXNlPFRlc3RlZEFwcHx1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwcENvbW1hbmQpXG4gICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuXG4gICAgICAgIGNvbnN0IHRlc3RlZEFwcCA9IG5ldyBUZXN0ZWRBcHAoKTtcblxuICAgICAgICBhd2FpdCB0ZXN0ZWRBcHAuc3RhcnQodGhpcy5hcHBDb21tYW5kLCB0aGlzLmFwcEluaXREZWxheSBhcyBudW1iZXIpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0ZWRBcHA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY2FuVXNlUGFyYWxsZWxCb290c3RyYXBwaW5nIChicm93c2VySW5mbzogQnJvd3NlckluZm9Tb3VyY2VbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBpc0xvY2FsUHJvbWlzZXMgPSBicm93c2VySW5mby5tYXAoYnJvd3NlciA9PiBicm93c2VyLnByb3ZpZGVyLmlzTG9jYWxCcm93c2VyKHZvaWQgMCwgQm9vdHN0cmFwcGVyLl9nZXRCcm93c2VyTmFtZShicm93c2VyKSkpO1xuICAgICAgICBjb25zdCBpc0xvY2FsQnJvd3NlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChpc0xvY2FsUHJvbWlzZXMpO1xuXG4gICAgICAgIHJldHVybiBpc0xvY2FsQnJvd3NlcnMuZXZlcnkocmVzdWx0ID0+IHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfYm9vdHN0cmFwU2VxdWVuY2UgKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdLCBpZDogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1J1bnRpbWVSZXNvdXJjZXM+IHtcbiAgICAgICAgY29uc3QgdGVzdHMgICAgICA9IGF3YWl0IHRoaXMuX2dldFRlc3RzKGlkKTtcbiAgICAgICAgY29uc3QgdGVzdGVkQXBwICA9IGF3YWl0IHRoaXMuX3N0YXJ0VGVzdGVkQXBwKCk7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJTZXQgPSBhd2FpdCB0aGlzLl9nZXRCcm93c2VyQ29ubmVjdGlvbnMoYnJvd3NlckluZm8pO1xuXG4gICAgICAgIHJldHVybiB7IHRlc3RzLCB0ZXN0ZWRBcHAsIGJyb3dzZXJTZXQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF93cmFwQm9vdHN0cmFwcGluZ1Byb21pc2U8VD4gKHByb21pc2U6IFByb21pc2U8VD4pOiBQcm9taXNlPFByb21pc2VSZXN1bHQ8VD4+IHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiAoeyBlcnJvcjogdm9pZCAwLCByZXN1bHQgfSkpXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4gKHsgcmVzdWx0OiB2b2lkIDAsIGVycm9yIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRCb290c3RyYXBwaW5nRXJyb3IgKGJyb3dzZXJTZXRTdGF0dXM6IFByb21pc2VSZXN1bHQ8QnJvd3NlclNldD4sIHRlc3RzU3RhdHVzOiBQcm9taXNlUmVzdWx0PFRlc3RbXT4sIHRlc3RlZEFwcFN0YXR1czogUHJvbWlzZVJlc3VsdDxUZXN0ZWRBcHB8dW5kZWZpbmVkPik6IFByb21pc2U8RXJyb3I+IHtcbiAgICAgICAgaWYgKCFpc1Byb21pc2VFcnJvcihicm93c2VyU2V0U3RhdHVzKSlcbiAgICAgICAgICAgIGF3YWl0IGJyb3dzZXJTZXRTdGF0dXMucmVzdWx0LmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIWlzUHJvbWlzZUVycm9yKGJyb3dzZXJTZXRTdGF0dXMpICYmICFpc1Byb21pc2VFcnJvcih0ZXN0ZWRBcHBTdGF0dXMpICYmIHRlc3RlZEFwcFN0YXR1cy5yZXN1bHQpXG4gICAgICAgICAgICBhd2FpdCB0ZXN0ZWRBcHBTdGF0dXMucmVzdWx0LmtpbGwoKTtcblxuICAgICAgICBpZiAoaXNQcm9taXNlRXJyb3IodGVzdHNTdGF0dXMpKVxuICAgICAgICAgICAgcmV0dXJuIHRlc3RzU3RhdHVzLmVycm9yO1xuXG4gICAgICAgIGlmIChpc1Byb21pc2VFcnJvcih0ZXN0ZWRBcHBTdGF0dXMpKVxuICAgICAgICAgICAgcmV0dXJuIHRlc3RlZEFwcFN0YXR1cy5lcnJvcjtcblxuICAgICAgICBpZiAoaXNQcm9taXNlRXJyb3IoYnJvd3NlclNldFN0YXR1cykpXG4gICAgICAgICAgICByZXR1cm4gYnJvd3NlclNldFN0YXR1cy5lcnJvcjtcblxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdVbmV4cGVjdGVkIGNhbGwnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRCb290c3RyYXBwaW5nUHJvbWlzZXM8VD4gKGFyZzogUHJvbWlzZUNvbGxlY3Rpb248VD4pOiBQcm9taXNlQ29sbGVjdGlvbjxSZXN1bHRDb2xsZWN0aW9uPFQ+PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9IGFzIHVua25vd24gYXMgUHJvbWlzZUNvbGxlY3Rpb248UmVzdWx0Q29sbGVjdGlvbjxUPj47XG5cbiAgICAgICAgZm9yIChjb25zdCBrIGluIGFyZylcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHRoaXMuX3dyYXBCb290c3RyYXBwaW5nUHJvbWlzZShhcmdba10pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfYm9vdHN0cmFwUGFyYWxsZWwgKGJyb3dzZXJJbmZvOiBCcm93c2VySW5mb1NvdXJjZVtdLCBpZDogc3RyaW5nKTogUHJvbWlzZTxCYXNpY1J1bnRpbWVSZXNvdXJjZXM+IHtcbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGluZ1Byb21pc2VzID0ge1xuICAgICAgICAgICAgYnJvd3NlclNldDogdGhpcy5fZ2V0QnJvd3NlckNvbm5lY3Rpb25zKGJyb3dzZXJJbmZvKSxcbiAgICAgICAgICAgIHRlc3RzOiAgICAgIHRoaXMuX2dldFRlc3RzKGlkKSxcbiAgICAgICAgICAgIGFwcDogICAgICAgIHRoaXMuX3N0YXJ0VGVzdGVkQXBwKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGluZ1Jlc3VsdFByb21pc2VzID0gdGhpcy5fZ2V0Qm9vdHN0cmFwcGluZ1Byb21pc2VzKGJvb3RzdHJhcHBpbmdQcm9taXNlcyk7XG5cbiAgICAgICAgY29uc3QgYm9vdHN0cmFwcGluZ1Jlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICBib290c3RyYXBwaW5nUmVzdWx0UHJvbWlzZXMuYnJvd3NlclNldCxcbiAgICAgICAgICAgIGJvb3RzdHJhcHBpbmdSZXN1bHRQcm9taXNlcy50ZXN0cyxcbiAgICAgICAgICAgIGJvb3RzdHJhcHBpbmdSZXN1bHRQcm9taXNlcy5hcHAsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IFticm93c2VyU2V0UmVzdWx0cywgdGVzdFJlc3VsdHMsIGFwcFJlc3VsdHNdID0gYm9vdHN0cmFwcGluZ1Jlc3VsdHM7XG5cbiAgICAgICAgaWYgKGlzUHJvbWlzZUVycm9yKGJyb3dzZXJTZXRSZXN1bHRzKSB8fCBpc1Byb21pc2VFcnJvcih0ZXN0UmVzdWx0cykgfHwgaXNQcm9taXNlRXJyb3IoYXBwUmVzdWx0cykpXG4gICAgICAgICAgICB0aHJvdyBhd2FpdCB0aGlzLl9nZXRCb290c3RyYXBwaW5nRXJyb3IoLi4uYm9vdHN0cmFwcGluZ1Jlc3VsdHMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicm93c2VyU2V0OiBicm93c2VyU2V0UmVzdWx0cy5yZXN1bHQsXG4gICAgICAgICAgICB0ZXN0czogICAgICB0ZXN0UmVzdWx0cy5yZXN1bHQsXG4gICAgICAgICAgICB0ZXN0ZWRBcHA6ICBhcHBSZXN1bHRzLnJlc3VsdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBUElcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlUnVubmFibGVDb25maWd1cmF0aW9uICgpOiBQcm9taXNlPFJ1bm5hYmxlQ29uZmlndXJhdGlvbj4ge1xuICAgICAgICBjb25zdCBpZCAgICAgICAgICAgICAgICAgID0gZ2VuZXJhdGVVbmlxdWVJZCgpO1xuICAgICAgICBjb25zdCBjb21tb25DbGllbnRTY3JpcHRzID0gYXdhaXQgbG9hZENsaWVudFNjcmlwdHModGhpcy5jbGllbnRTY3JpcHRzKTtcblxuICAgICAgICBpZiAoYXdhaXQgdGhpcy5fY2FuVXNlUGFyYWxsZWxCb290c3RyYXBwaW5nKHRoaXMuYnJvd3NlcnMpKVxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYXdhaXQgdGhpcy5fYm9vdHN0cmFwUGFyYWxsZWwodGhpcy5icm93c2VycywgaWQpLCBjb21tb25DbGllbnRTY3JpcHRzLCBpZCB9O1xuXG4gICAgICAgIHJldHVybiB7IC4uLmF3YWl0IHRoaXMuX2Jvb3RzdHJhcFNlcXVlbmNlKHRoaXMuYnJvd3NlcnMsIGlkKSwgY29tbW9uQ2xpZW50U2NyaXB0cywgaWQgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzdG9yZU1lc3NhZ2VCdXNMaXN0ZW5lcnMgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9ucyA9IHRoaXMuYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LmdldENvbm5lY3Rpb25zKCk7XG5cbiAgICAgICAgT2JqZWN0LnZhbHVlcyhjb25uZWN0aW9ucykuZm9yRWFjaChjb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uYXNzaWduVGVzdFJ1blN0YXJ0RXZlbnRMaXN0ZW5lcigpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|