testcafe 3.4.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/skip-js-errors/index.js +1 -1
- package/lib/api/test-controller/index.js +4 -4
- package/lib/browser/connection/gateway/index.js +10 -1
- package/lib/browser/connection/index.js +9 -1
- package/lib/browser/connection/service-routes.js +2 -1
- package/lib/browser/provider/built-in/dedicated/base.js +7 -3
- package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +5 -3
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +44 -28
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils.js +31 -0
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +18 -15
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +3 -3
- package/lib/browser/provider/index.js +14 -3
- package/lib/browser/provider/plugin-host.js +5 -2
- package/lib/cli/argument-parser/index.js +4 -1
- package/lib/client/automation/index.js +28 -5
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.js +1 -0
- package/lib/client/core/index.js +21 -5
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/style.js +6 -2
- package/lib/client/driver/generate-id.js +4 -2
- package/lib/client/driver/index.js +94 -24
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/iframe.js.mustache +11 -1
- package/lib/client/test-run/index.js.mustache +25 -18
- package/lib/client/ui/index.js +41 -16
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/styles.css +1 -0
- package/lib/client-functions/client-function-builder.js +3 -3
- package/lib/client-functions/selectors/selector-builder.js +3 -3
- package/lib/configuration/default-values.js +3 -2
- package/lib/configuration/option-names.js +3 -1
- package/lib/configuration/run-option-names.js +2 -1
- package/lib/configuration/screenshot-option-names.js +2 -1
- package/lib/configuration/testcafe-configuration.js +3 -1
- package/lib/configuration/types.js +1 -1
- package/lib/native-automation/index.js +40 -6
- package/lib/native-automation/request-pipeline/index.js +9 -5
- package/lib/native-automation/request-pipeline/special-handlers.js +19 -5
- package/lib/native-automation/request-pipeline/test-run-bridge.js +4 -3
- package/lib/native-automation/types.js +1 -1
- package/lib/notifications/warning-message.js +2 -1
- package/lib/reporter/command/command-formatter.js +5 -5
- package/lib/runner/browser-job.js +3 -2
- package/lib/runner/fixture-hook-controller.js +14 -5
- package/lib/runner/index.js +13 -6
- package/lib/runner/task/index.js +3 -2
- package/lib/runner/test-run-controller.js +5 -1
- package/lib/screenshots/capturer.js +7 -5
- package/lib/screenshots/index.js +4 -3
- package/lib/test-run/bookmark.js +1 -1
- package/lib/test-run/browser-manipulation-queue.js +2 -1
- package/lib/test-run/commands/actions.js +3 -3
- package/lib/test-run/commands/browser-manipulation.js +2 -1
- package/lib/test-run/commands/execute-client-function.js +47 -0
- package/lib/test-run/commands/observation.js +10 -38
- package/lib/test-run/commands/service.js +3 -2
- package/lib/test-run/commands/validations/initializers.js +3 -3
- package/lib/test-run/index.js +20 -11
- package/lib/test-run/session-controller.js +3 -3
- package/lib/utils/path-pattern.js +8 -5
- package/package.json +3 -3
- package/ts-defs/index.d.ts +4 -0
- package/ts-defs/selectors.d.ts +4 -0
- package/ts-defs/testcafe-scripts.d.ts +4 -0
|
@@ -24,11 +24,14 @@ const ALL_REQUESTS_DATA = [ALL_REQUEST_REQUESTS, ALL_REQUEST_RESPONSES];
|
|
|
24
24
|
const TARGET_INFO_TYPE = {
|
|
25
25
|
iframe: 'iframe',
|
|
26
26
|
worker: 'worker',
|
|
27
|
+
serviceWorker: 'service_worker',
|
|
27
28
|
};
|
|
28
29
|
class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
29
|
-
constructor(browserId, client, options) {
|
|
30
|
+
constructor(browserId, windowId, client, isMainWindow, options) {
|
|
30
31
|
super(browserId, client, options);
|
|
31
|
-
this._testRunBridge = new test_run_bridge_1.default(browserId);
|
|
32
|
+
this._testRunBridge = new test_run_bridge_1.default(browserId, windowId);
|
|
33
|
+
this._windowId = windowId;
|
|
34
|
+
this._isMainWindow = isMainWindow;
|
|
32
35
|
this._contextInfo = new context_info_1.default(this._testRunBridge);
|
|
33
36
|
this._specialServiceRoutes = this._getSpecialServiceRoutes();
|
|
34
37
|
this.requestHookEventProvider = new event_provider_1.default();
|
|
@@ -264,7 +267,8 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
264
267
|
await this._client.Target.on('attachedToTarget', async (event) => {
|
|
265
268
|
const isIFrame = event.targetInfo.type === TARGET_INFO_TYPE.iframe;
|
|
266
269
|
const isWorker = event.targetInfo.type === TARGET_INFO_TYPE.worker;
|
|
267
|
-
|
|
270
|
+
const isServiceWorker = event.targetInfo.type === TARGET_INFO_TYPE.serviceWorker;
|
|
271
|
+
if (!isIFrame && !isWorker && !isServiceWorker)
|
|
268
272
|
return;
|
|
269
273
|
await (0, safe_api_1.connectionResetGuard)(async () => {
|
|
270
274
|
// @ts-ignore
|
|
@@ -283,7 +287,7 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
283
287
|
return;
|
|
284
288
|
const specialRequestHandler = (0, special_handlers_1.default)(event, this.options, this._specialServiceRoutes);
|
|
285
289
|
if (specialRequestHandler)
|
|
286
|
-
await specialRequestHandler(event, this._client, this.options, sessionId);
|
|
290
|
+
await specialRequestHandler(event, this._client, this._isMainWindow, this.options, sessionId);
|
|
287
291
|
else
|
|
288
292
|
await this._handleOtherRequests(event, sessionId);
|
|
289
293
|
});
|
|
@@ -361,4 +365,4 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
361
365
|
}
|
|
362
366
|
exports.default = NativeAutomationRequestPipeline;
|
|
363
367
|
module.exports = exports.default;
|
|
364
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFnQztBQVloQyxxRkFBdUY7QUFDdkYsNkVBQWlGO0FBQ2pGLDhDQUEwRDtBQUUxRCxzQ0FLc0I7QUFFdEIsaUVBQXlDO0FBU3pDLDZEQUltQztBQUVuQyw2REFPNkI7QUFJN0IsMEVBQTBEO0FBQzFELHlDQUlvQjtBQUNwQiwyREFBa0Q7QUFDbEQsMkRBQXdEO0FBQ3hELHdFQUE4QztBQUM5QyxrRUFBZ0U7QUFDaEUsc0NBQXNFO0FBR3RFLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFvQixDQUFDO0FBQzVFLE1BQU0sb0JBQW9CLEdBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFvQixDQUFDO0FBRTdFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRXhFLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsTUFBTSxFQUFFLFFBQVE7Q0FDbkIsQ0FBQztBQUVGLE1BQXFCLCtCQUFnQyxTQUFRLGtCQUF1QjtJQWFoRixZQUFvQixTQUFpQixFQUFFLE1BQW1CLEVBQUUsT0FBb0M7UUFDNUYsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsR0FBYSxJQUFJLHlCQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFlBQVksR0FBZSxJQUFJLHNCQUFrQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMscUJBQXFCLEdBQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLHdC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SyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFbkcsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRU8saUNBQWlDLENBQUUsT0FBaUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTztZQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0o7QUFoZEQsa0RBZ2RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVtb3ZlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBMb2FkaW5nRmFpbGVkRXZlbnQgPSBQcm90b2NvbC5OZXR3b3JrLkxvYWRpbmdGYWlsZWRFdmVudDtcbmltcG9ydCBDb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IFByb3RvY29sLkZldGNoLkNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuaW1wb3J0IEZyYW1lVHJlZSA9IFByb3RvY29sLlBhZ2UuRnJhbWVUcmVlO1xuaW1wb3J0IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCA9IFByb3RvY29sLkZldGNoLkZ1bGZpbGxSZXF1ZXN0UmVxdWVzdDtcbmltcG9ydCBSZXF1ZXN0UGF0dGVybiA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXR0ZXJuO1xuaW1wb3J0IENlcnRpZmljYXRlRXJyb3JFdmVudCA9IFByb3RvY29sLlNlY3VyaXR5LkNlcnRpZmljYXRlRXJyb3JFdmVudDtcbmltcG9ydCBIZWFkZXJFbnRyeSA9IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5O1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlcic7XG5pbXBvcnQgUmVzb3VyY2VJbmplY3RvciwgeyBSZXNvdXJjZUluamVjdG9yT3B0aW9ucyB9IGZyb20gJy4uL3Jlc291cmNlLWluamVjdG9yJztcbmltcG9ydCB7IGNvbnZlcnRUb0hlYWRlckVudHJpZXMgfSBmcm9tICcuLi91dGlscy9oZWFkZXJzJztcblxuaW1wb3J0IHtcbiAgICBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZSxcbiAgICBnZXRSZXF1ZXN0SWQsXG4gICAgaXNSZXF1ZXN0LFxuICAgIGlzVW5hdXRob3JpemVkLFxufSBmcm9tICcuLi91dGlscy9jZHAnO1xuXG5pbXBvcnQgRVJST1JfUk9VVEUgZnJvbSAnLi4vZXJyb3Itcm91dGUnO1xuXG5pbXBvcnQge1xuICAgIENvbnRpbnVlUmVxdWVzdEFyZ3MsXG4gICAgU2Vzc2lvbklkLFxuICAgIFNlc3Npb25TdG9yYWdlSW5mbyxcbiAgICBTcGVjaWFsU2VydmljZVJvdXRlcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge1xuICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcixcbiAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZU90aGVyUmVxdWVzdExvZ2dlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5cbmltcG9ydCB7XG4gICAgSW5jb21pbmdNZXNzYWdlTGlrZSxcbiAgICBpc1JlZGlyZWN0U3RhdHVzQ29kZSxcbiAgICBTUEVDSUFMX0JMQU5LX1BBR0UsXG4gICAgU3RvcmFnZXNTbmFwc2hvdCxcbiAgICBpbmplY3RVcGxvYWQsXG4gICAgY29udGVudFR5cGVVdGlscyxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvcGlwZWxpbmUtY29udGV4dCc7XG5pbXBvcnQgeyBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IGdldFNwZWNpYWxSZXF1ZXN0SGFuZGxlciBmcm9tICcuL3NwZWNpYWwtaGFuZGxlcnMnO1xuaW1wb3J0IHtcbiAgICBjb25uZWN0aW9uUmVzZXRHdWFyZCxcbiAgICBzYWZlQ29udGludWVSZXF1ZXN0LFxuICAgIHNhZmVDb250aW51ZVJlc3BvbnNlLFxufSBmcm9tICcuL3NhZmUtYXBpJztcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uQXBpQmFzZSBmcm9tICcuLi9hcGktYmFzZSc7XG5pbXBvcnQgeyByZXNlbmRBdXRoUmVxdWVzdCB9IGZyb20gJy4vcmVzZW5kQXV0aFJlcXVlc3QnO1xuaW1wb3J0IFRlc3RSdW5CcmlkZ2UgZnJvbSAnLi90ZXN0LXJ1bi1icmlkZ2UnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8gZnJvbSAnLi9jb250ZXh0LWluZm8nO1xuaW1wb3J0IHsgZmFpbGVkVG9GaW5kRE5TRXJyb3IsIHNzbENlcnRpZmljYXRlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5cbmNvbnN0IEFMTF9SRVFVRVNUX1JFU1BPTlNFUyA9IHsgcmVxdWVzdFN0YWdlOiAnUmVxdWVzdCcgfSBhcyBSZXF1ZXN0UGF0dGVybjtcbmNvbnN0IEFMTF9SRVFVRVNUX1JFUVVFU1RTICA9IHsgcmVxdWVzdFN0YWdlOiAnUmVzcG9uc2UnIH0gYXMgUmVxdWVzdFBhdHRlcm47XG5cbmNvbnN0IEFMTF9SRVFVRVNUU19EQVRBID0gW0FMTF9SRVFVRVNUX1JFUVVFU1RTLCBBTExfUkVRVUVTVF9SRVNQT05TRVNdO1xuXG5jb25zdCBUQVJHRVRfSU5GT19UWVBFID0ge1xuICAgIGlmcmFtZTogJ2lmcmFtZScsXG4gICAgd29ya2VyOiAnd29ya2VyJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUgZXh0ZW5kcyBOYXRpdmVBdXRvbWF0aW9uQXBpQmFzZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVzdFJ1bkJyaWRnZTogVGVzdFJ1bkJyaWRnZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZXh0SW5mbzogTmF0aXZlQXV0b21hdGlvblJlcXVlc3RDb250ZXh0SW5mbztcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyO1xuICAgIHB1YmxpYyByZXN0b3JpbmdTdG9yYWdlczogU3RvcmFnZXNTbmFwc2hvdCB8IG51bGw7XG4gICAgcHVibGljIGNvbnRleHRTdG9yYWdlOiBTZXNzaW9uU3RvcmFnZUluZm8gfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlSW5qZWN0b3I6IFJlc291cmNlSW5qZWN0b3I7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3BlY2lhbFNlcnZpY2VSb3V0ZXM6IFNwZWNpYWxTZXJ2aWNlUm91dGVzO1xuICAgIHByaXZhdGUgX3N0b3BwZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfY3VycmVudEZyYW1lVHJlZTogRnJhbWVUcmVlIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mYWlsZWRSZXF1ZXN0SWRzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvcjogQ2VydGlmaWNhdGVFcnJvckV2ZW50IHwgbnVsbDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoYnJvd3NlcklkOiBzdHJpbmcsIGNsaWVudDogUHJvdG9jb2xBcGksIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucykge1xuICAgICAgICBzdXBlcihicm93c2VySWQsIGNsaWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fdGVzdFJ1bkJyaWRnZSAgICAgICAgICAgPSBuZXcgVGVzdFJ1bkJyaWRnZShicm93c2VySWQpO1xuICAgICAgICB0aGlzLl9jb250ZXh0SW5mbyAgICAgICAgICAgICA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvKHRoaXMuX3Rlc3RSdW5CcmlkZ2UpO1xuICAgICAgICB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyAgICA9IHRoaXMuX2dldFNwZWNpYWxTZXJ2aWNlUm91dGVzKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyID0gbmV3IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VJbmplY3RvciAgICAgICAgPSBuZXcgUmVzb3VyY2VJbmplY3Rvcih0aGlzLl90ZXN0UnVuQnJpZGdlKTtcbiAgICAgICAgdGhpcy5fc3RvcHBlZCAgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lVHJlZSAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuY29udGV4dFN0b3JhZ2UgICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbnNGb3JSZXNvdXJjZUluamVjdG9yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0T3B0aW9uc0ZvclJlc291cmNlSW5qZWN0b3IgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY3JlYXRlUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMgKCk6IFJlc291cmNlSW5qZWN0b3JPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNwZWNpYWxTZXJ2aWNlUm91dGVzOiB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyxcbiAgICAgICAgICAgIGRldmVsb3BtZW50TW9kZTogICAgICB0aGlzLm9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNwZWNpYWxTZXJ2aWNlUm91dGVzICgpOiBTcGVjaWFsU2VydmljZVJvdXRlcyB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uID0gdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRCcm93c2VyQ29ubmVjdGlvbigpO1xuICAgICAgICBjb25zdCBwcm94eSAgICAgICAgICAgICA9IGJyb3dzZXJDb25uZWN0aW9uLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JQYWdlMTogICAgICAgICAgcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChFUlJPUl9ST1VURSwgcHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGVycm9yUGFnZTI6ICAgICAgICAgIHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoRVJST1JfUk9VVEUsIHByb3h5LnNlcnZlcjJJbmZvLmRvbWFpbiksXG4gICAgICAgICAgICBpZGxlUGFnZTogICAgICAgICAgICBicm93c2VyQ29ubmVjdGlvbi5pZGxlVXJsLFxuICAgICAgICAgICAgb3BlbkZpbGVQcm90b2NvbFVybDogYnJvd3NlckNvbm5lY3Rpb24ub3BlbkZpbGVQcm90b2NvbFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVNb2NrRXJyb3JJZk5lY2Vzc2FyeSAocGlwZWxpbmVDb250ZXh0OiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0LCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghcGlwZWxpbmVDb250ZXh0Lm1vY2suaGFzRXJyb3IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0LmhhbmRsZU1vY2tFcnJvcih0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlcik7XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcignJXNcXG4lcycsIGV2ZW50Lm5ldHdvcmtJZCwgcGlwZWxpbmVDb250ZXh0Lm1vY2suZXJyb3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU1vY2tSZXNwb25zZSAobW9ja2VkUmVzcG9uc2U6IEluY29taW5nTWVzc2FnZUxpa2UsIHBpcGVsaW5lQ29udGV4dDogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2VCb2R5U3RyID0gKG1vY2tlZFJlc3BvbnNlLmdldEJvZHkoKSBhcyBCdWZmZXIpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgY29uc3QgZnVsZmlsbEluZm8gPSB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgIGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgbW9ja2VkUmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogY29udmVydFRvSGVhZGVyRW50cmllcyhtb2NrZWRSZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgbW9ja2VkUmVzcG9uc2VCb2R5U3RyLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChwaXBlbGluZUNvbnRleHQucmVxT3B0cy5pc0FqYXhcbiAgICAgICAgICAgIHx8ICFOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lLl9pc1BhZ2UoZnVsZmlsbEluZm8ucmVzcG9uc2VIZWFkZXJzKSlcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc05vblByb3hpZWRDb250ZW50KGZ1bGZpbGxJbmZvLCB0aGlzLl9jbGllbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0hUTUxQYWdlQ29udGVudChmdWxmaWxsSW5mbywge1xuICAgICAgICAgICAgICAgIGlzSWZyYW1lOiAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0U3RvcmFnZTogdGhpcy5jb250ZXh0U3RvcmFnZSxcbiAgICAgICAgICAgICAgICB1c2VyU2NyaXB0cyxcbiAgICAgICAgICAgIH0sIHRoaXMuX2NsaWVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoYHNlbnQgbW9ja2VkIHJlc3BvbnNlIGZvciB0aGUgJHtldmVudC5yZXF1ZXN0SWR9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ29udGludWVSZXNwb25zZVJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIG1vZGlmaWVkOiBib29sZWFuKTogQ29udGludWVSZXNwb25zZVJlcXVlc3Qge1xuICAgICAgICBjb25zdCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkLFxuICAgICAgICB9IGFzIENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuXG4gICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VIZWFkZXJzID0gZXZlbnQucmVzcG9uc2VIZWFkZXJzO1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VDb2RlICAgID0gZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC5yZXNvdXJjZVR5cGUgPT09ICdEb2N1bWVudCdcbiAgICAgICAgICAgICYmICF0aGlzLl9pc0lmcmFtZShldmVudC5mcmFtZUlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRVc2VyU2NyaXB0cyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IHRoaXMuX2NvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQucHJlcGFyZUluamVjdGFibGVVc2VyU2NyaXB0cyhldmVudEZhY3RvcnksIHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0VXNlclNjcmlwdHMoKSk7XG5cbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29udGV4dC5pbmplY3RhYmxlVXNlclNjcmlwdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVzcG9uZFRvT3RoZXJSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoaXNSZWRpcmVjdFN0YXR1c0NvZGUoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlKSkge1xuICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVzcG9uc2UodGhpcy5fY2xpZW50LCB7IHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkIH0sIHNlc3Npb25JZCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc291cmNlSW5mbyA9IGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IuZ2V0RG9jdW1lbnRSZXNvdXJjZUluZm8oZXZlbnQsIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSW5mby5lcnJvcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5yZWRpcmVjdFRvRXJyb3JQYWdlKHRoaXMuX2NsaWVudCwgcmVzb3VyY2VJbmZvLmVycm9yLCBldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RpZmllZCA9IGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVzcG9uc2UoZXZlbnQsIHJlc291cmNlSW5mby5ib2R5LCB0aGlzLl9jb250ZXh0SW5mbywgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICBpZiAodGhpcy5fbmVlZEluamVjdFJlc291cmNlcyhldmVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGZpbGxJbmZvID0ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogZXZlbnQucmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICBib2R5OiAgICAgICAgICAgIChyZXNvdXJjZUluZm8uYm9keSBhcyBCdWZmZXIpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9IGFzIEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdDtcblxuICAgICAgICAgICAgLy8gTk9URTogU3RyYW5nZSBiZWhhdmlvciBvZiB0aGUgQ0RQIEFQSTpcbiAgICAgICAgICAgIC8vIGlmIHdlIHBhc3MgdGhlIGVtcHR5IFwicmVzcG9uc2VTdGF0dXNUZXh0XCIgdmFsdWUsIHdlIGdldCBhbiBlcnJvciAnSW52YWxpZCBzdGF0dXMgY29kZSBvciBwaHJhc2UnLlxuICAgICAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlU3RhdHVzVGV4dCAhPT0gJycpXG4gICAgICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VQaHJhc2UgPSBldmVudC5yZXNwb25zZVN0YXR1c1RleHQ7XG5cbiAgICAgICAgICAgIGlmIChpc1VuYXV0aG9yaXplZChldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyKSlcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl90cnlBdXRob3JpemVXaXRoSHR0cEJhc2ljQXV0aENyZWRlbnRpYWxzKGV2ZW50LCBmdWxmaWxsSW5mbyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJTY3JpcHRzID0gYXdhaXQgdGhpcy5fZ2V0VXNlclNjcmlwdHMoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NIVE1MUGFnZUNvbnRlbnQoXG4gICAgICAgICAgICAgICAgZnVsZmlsbEluZm8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpc0lmcmFtZTogICAgICAgICAgdGhpcy5faXNJZnJhbWUoZXZlbnQuZnJhbWVJZCksXG4gICAgICAgICAgICAgICAgICAgIHVybDogICAgICAgICAgICAgICBldmVudC5yZXF1ZXN0LnVybCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yaW5nU3RvcmFnZXM6IHRoaXMucmVzdG9yaW5nU3RvcmFnZXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRTdG9yYWdlOiAgICB0aGlzLmNvbnRleHRTdG9yYWdlLFxuICAgICAgICAgICAgICAgICAgICB1c2VyU2NyaXB0cyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudCwgc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcblxuICAgICAgICAgICAgdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IHRoaXMuX2NyZWF0ZUNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0KGV2ZW50LCBtb2RpZmllZCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlc3BvbnNlKHRoaXMuX2NsaWVudCwgY29udGludWVSZXNwb25zZVJlcXVlc3QsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfaXNQYWdlIChyZXNwb25zZUhlYWRlcnM6IEhlYWRlckVudHJ5W10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZUhlYWRlcnNcbiAgICAgICAgICAgID8uZmluZChoZWFkZXIgPT4gaGVhZGVyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpXG4gICAgICAgICAgICA/LnZhbHVlO1xuXG4gICAgICAgIGlmIChjb250ZW50VHlwZSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50VHlwZVV0aWxzLmlzUGFnZShjb250ZW50VHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbmVlZEluamVjdFJlc291cmNlcyAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZXZlbnQucmVzb3VyY2VUeXBlICE9PSAnRG9jdW1lbnQnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lLl9pc1BhZ2UoZXZlbnQucmVzcG9uc2VIZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF90cnlBdXRob3JpemVXaXRoSHR0cEJhc2ljQXV0aENyZWRlbnRpYWxzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBmdWxmaWxsSW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5fdGVzdFJ1bi5nZXRBdXRoQ3JlZGVudGlhbHMoKTtcblxuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGF1dGhSZXF1ZXN0ID0gYXdhaXQgcmVzZW5kQXV0aFJlcXVlc3QoZXZlbnQucmVxdWVzdCwgY3JlZGVudGlhbHMpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXV0aFJlcXVlc3QgIT09ICdzdHJpbmcnICYmICFpc1VuYXV0aG9yaXplZChhdXRoUmVxdWVzdC5zdGF0dXMpKSB7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZUNvZGUgICAgPSBhdXRoUmVxdWVzdC5zdGF0dXM7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5ib2R5ICAgICAgICAgICAgPSBhdXRoUmVxdWVzdC5ib2R5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZVBocmFzZSAgPSBhdXRoUmVxdWVzdC5zdGF0dXNUZXh0O1xuICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VIZWFkZXJzID0gY29udmVydFRvSGVhZGVyRW50cmllcyhhdXRoUmVxdWVzdC5oZWFkZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUVycm9yIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogRXJyb3Ige1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IpXG4gICAgICAgICAgICByZXR1cm4gc3NsQ2VydGlmaWNhdGVFcnJvcih0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvci5lcnJvclR5cGUpO1xuXG4gICAgICAgIGlmIChldmVudC5yZXNwb25zZUVycm9yUmVhc29uID09PSAnTmFtZU5vdFJlc29sdmVkJylcbiAgICAgICAgICAgIHJldHVybiBmYWlsZWRUb0ZpbmRETlNFcnJvcihldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihldmVudC5yZXNwb25zZUVycm9yUmVhc29uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF90cnlSZXNwb25kVG9PdGhlclJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbiAmJiB0aGlzLl9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5fY3JlYXRlRXJyb3IoZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5yZWRpcmVjdFRvRXJyb3JQYWdlKHRoaXMuX2NsaWVudCwgZXJyb3IsIGV2ZW50LnJlcXVlc3QudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNwb25kVG9PdGhlclJlcXVlc3QoZXZlbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm5ldHdvcmtJZCAmJiB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLmluY2x1ZGVzKGV2ZW50Lm5ldHdvcmtJZCkpIHtcbiAgICAgICAgICAgICAgICByZW1vdmUodGhpcy5fZmFpbGVkUmVxdWVzdElkcywgZXZlbnQubmV0d29ya0lkKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlT3RoZXJSZXF1ZXN0cyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lT3RoZXJSZXF1ZXN0TG9nZ2VyKCclcicsIGV2ZW50KTtcblxuICAgICAgICBpZiAoIWV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gJiYgKGlzUmVxdWVzdChldmVudCkgfHwgaXNSZWRpcmVjdFN0YXR1c0NvZGUoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmluaXQoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5vblJlcXVlc3QoZXZlbnQsIHRoaXMuX2NvbnRleHRJbmZvKTtcblxuICAgICAgICAgICAgY29uc3QgcGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY29udGV4dEluZm8uZ2V0UGlwZWxpbmVDb250ZXh0KGdldFJlcXVlc3RJZChldmVudCkpO1xuXG4gICAgICAgICAgICBpZiAoIXBpcGVsaW5lQ29udGV4dCB8fCAhcGlwZWxpbmVDb250ZXh0Lm1vY2spXG4gICAgICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVxdWVzdCh0aGlzLl9jbGllbnQsIGV2ZW50LCBzZXNzaW9uSWQsIHRoaXMuX2NyZWF0ZUNvbnRpbnVlRXZlbnRBcmdzKGV2ZW50LCBwaXBlbGluZUNvbnRleHQ/LnJlcU9wdHMpKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoJ2JlZ2luIG1vY2tpbmcgcmVxdWVzdCAlcicsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vY2tlZFJlc3BvbnNlID0gYXdhaXQgcGlwZWxpbmVDb250ZXh0LmdldE1vY2tSZXNwb25zZSgpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlTW9ja0Vycm9ySWZOZWNlc3NhcnkocGlwZWxpbmVDb250ZXh0LCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZUV2ZW50ID0gY3JlYXRlUmVxdWVzdFBhdXNlZEV2ZW50Rm9yUmVzcG9uc2UobW9ja2VkUmVzcG9uc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVzcG9uc2UobW9ja2VkUmVzcG9uc2VFdmVudCwgbW9ja2VkUmVzcG9uc2UuZ2V0Qm9keSgpLCB0aGlzLl9jb250ZXh0SW5mbywgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU1vY2tSZXNwb25zZShtb2NrZWRSZXNwb25zZSwgcGlwZWxpbmVDb250ZXh0LCBldmVudCwgc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKCdlbmQgbW9ja2luZyByZXF1ZXN0ICVyJywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeVJlc3BvbmRUb090aGVyUmVxdWVzdChldmVudCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRVcGxvYWRQb3N0RGF0YSAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghZXZlbnQucmVxdWVzdC5wb3N0RGF0YSlcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG5cbiAgICAgICAgY29uc3QgY29udGVudFR5cGVIZWFkZXIgPSBldmVudC5yZXF1ZXN0LmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcG9zdERhdGEgICAgICAgICAgPSBCdWZmZXIuZnJvbShldmVudC5yZXF1ZXN0LnBvc3REYXRhLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgYm9keVdpdGhVcGxvYWRzICAgPSBpbmplY3RVcGxvYWQoY29udGVudFR5cGVIZWFkZXIsIHBvc3REYXRhKTtcblxuICAgICAgICByZXR1cm4gYm9keVdpdGhVcGxvYWRzID8gYm9keVdpdGhVcGxvYWRzLnRvU3RyaW5nKCdiYXNlNjQnKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90b3BGcmFtZU5hdmlnYXRpb24gKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC50eXBlID09PSAnTmF2aWdhdGlvbidcbiAgICAgICAgICAgICYmICFldmVudC5mcmFtZS5wYXJlbnRJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF91cGRhdGVDdXJyZW50RnJhbWVUcmVlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTk9URTogRHVlIHRvIENEUCByZXN0cmljdGlvbnMgKGl0IGhhbmdzKSwgd2UgY2FuJ3QgZ2V0IHRoZSBmcmFtZSB0cmVlXG4gICAgICAgIC8vIHJpZ2h0IGJlZm9yZSBpbmplY3Rpbmcgc2VydmljZSBzY3JpcHRzLlxuICAgICAgICAvLyBTbywgd2UgYXJlIGZvcmNlZCB0cmFja2luZyBmcmFtZXMgdHJlZS5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fY2xpZW50LlBhZ2UuZ2V0RnJhbWVUcmVlKCk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lVHJlZSA9IHJlc3VsdC5mcmFtZVRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNJZnJhbWUgKGZyYW1lSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRGcmFtZVRyZWUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGcmFtZVRyZWUuZnJhbWUuaWQgIT09IGZyYW1lSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTk9URTogV2UgYXJlIGZvcmNlZCB0byBoYW5kbGUgYWxsIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgYXQgb25jZVxuICAgICAgICAvLyBiZWNhdXNlIENEUCBBUEkgZG9lcyBub3QgYWxsb3cgc3BlY2lmeWluZyByZXF1ZXN0IGZpbHRlcmluZyBiZWhhdmlvciBmb3IgZGlmZmVyZW50IGhhbmRsZXJzLlxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuRmV0Y2guZW5hYmxlKHtcbiAgICAgICAgICAgIHBhdHRlcm5zOiBBTExfUkVRVUVTVFNfREFUQSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlRhcmdldC5zZXRBdXRvQXR0YWNoKHtcbiAgICAgICAgICAgIGF1dG9BdHRhY2g6ICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB3YWl0Rm9yRGVidWdnZXJPblN0YXJ0OiB0cnVlLFxuICAgICAgICAgICAgZmxhdHRlbjogICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBlbmFibGUgdGhlIEZldGNoIGRvbWFpbiBmb3IgaWZyYW1lIHRhcmdldHNcbiAgICAgICAgLy8gdG8gaW50ZXJjZXB0IHNvbWUgcmVxdWVzdHMuIFdlIG5lZWQgdG8gdXNlIHRoZSBgc2Vzc2lvbklkYCBvcHRpb25cbiAgICAgICAgLy8gaW4gY29udGludWVSZXF1ZXN0L2NvbnRpbnVlUmVzcG9uc2UvZnVsZmlsbFJlcXVlc3QgbWV0aG9kc1xuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuVGFyZ2V0Lm9uKCdhdHRhY2hlZFRvVGFyZ2V0JywgYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNJRnJhbWUgPSBldmVudC50YXJnZXRJbmZvLnR5cGUgPT09IFRBUkdFVF9JTkZPX1RZUEUuaWZyYW1lO1xuICAgICAgICAgICAgY29uc3QgaXNXb3JrZXIgPSBldmVudC50YXJnZXRJbmZvLnR5cGUgPT09IFRBUkdFVF9JTkZPX1RZUEUud29ya2VyO1xuXG4gICAgICAgICAgICBpZiAoIWlzSUZyYW1lICYmICFpc1dvcmtlcilcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb25SZXNldEd1YXJkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlJ1bnRpbWUucnVuSWZXYWl0aW5nRm9yRGVidWdnZXIoZXZlbnQuc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc0lGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5GZXRjaC5lbmFibGUoeyBwYXR0ZXJuczogQUxMX1JFUVVFU1RTX0RBVEEgfSwgZXZlbnQuc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcihgVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICVzYCwgZXJyLCBldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLl9jbGllbnQuRmV0Y2gub24oJ3JlcXVlc3RQYXVzZWQnLCBhc3luYyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgc3BlY2lhbFJlcXVlc3RIYW5kbGVyID0gZ2V0U3BlY2lhbFJlcXVlc3RIYW5kbGVyKGV2ZW50LCB0aGlzLm9wdGlvbnMsIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzKTtcblxuICAgICAgICAgICAgaWYgKHNwZWNpYWxSZXF1ZXN0SGFuZGxlcilcbiAgICAgICAgICAgICAgICBhd2FpdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIoZXZlbnQsIHRoaXMuX2NsaWVudCwgdGhpcy5vcHRpb25zLCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU90aGVyUmVxdWVzdHMoZXZlbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5QYWdlLm9uKCdmcmFtZU5hdmlnYXRlZCcsIGFzeW5jIChldmVudDogRnJhbWVOYXZpZ2F0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKCclZicsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl90b3BGcmFtZU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICAgICAgICAgICAgfHwgZXZlbnQuZnJhbWUudXJsICE9PSBTUEVDSUFMX0JMQU5LX1BBR0UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5pbml0KGV2ZW50KTtcblxuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0Fib3V0QmxhbmtQYWdlKGV2ZW50LCB1c2VyU2NyaXB0cywgdGhpcy5jb250ZXh0U3RvcmFnZSwgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50LlBhZ2Uub24oJ2ZyYW1lU3RhcnRlZExvYWRpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl91cGRhdGVDdXJyZW50RnJhbWVUcmVlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5OZXR3b3JrLm9uKCdsb2FkaW5nRmFpbGVkJywgYXN5bmMgKGV2ZW50OiBMb2FkaW5nRmFpbGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcignJWwnLCBldmVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMucHVzaChldmVudC5yZXF1ZXN0SWQpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQucmVxdWVzdElkKVxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZXZlbnQucmVxdWVzdElkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlBhZ2Uuc2V0QnlwYXNzQ1NQKHsgZW5hYmxlZDogdHJ1ZSB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuU2VjdXJpdHkuZW5hYmxlKCk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50LlNlY3VyaXR5Lm9uKCdjZXJ0aWZpY2F0ZUVycm9yJywgYXN5bmMgKGV2ZW50OiBDZXJ0aWZpY2F0ZUVycm9yRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yID0gZXZlbnQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3RvcHBlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRpc3Bvc2UgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuRmV0Y2guZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJlcXVlc3RPcHRpb25zTW9kaWZpZWRCeVJlcXVlc3RIb29rIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50LCByZXFPcHRzOiBhbnkpOiBDb250aW51ZVJlcXVlc3RBcmdzIHtcbiAgICAgICAgaWYgKCFyZXFPcHRzKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgICAgIGxldCBtb2RpZmllclVybDogYW55ID0gdm9pZCAwO1xuXG4gICAgICAgIGlmIChyZXFPcHRzLl9jaGFuZ2VkVXJsUHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyVXJsID0gbmV3IFVSTChldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbmdlZFVybFByb3BlcnR5IG9mIHJlcU9wdHMuX2NoYW5nZWRVcmxQcm9wZXJ0aWVzKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVXJsW2NoYW5nZWRVcmxQcm9wZXJ0eS5uYW1lXSA9IGNoYW5nZWRVcmxQcm9wZXJ0eS52YWx1ZTtcblxuICAgICAgICAgICAgbW9kaWZpZXJVcmwgPSBtb2RpZmllclVybC50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuX2Zvcm1hdEhlYWRlcnNGb3JDb250aW51ZVJlc3BvbnNlKGV2ZW50LnJlcXVlc3QuaGVhZGVycyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2VkSGVhZGVyIG9mIHJlcU9wdHMuX2NoYW5nZWRIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRIZWFkZXIgPSBoZWFkZXJzLmZpbmQoaGVhZGVyID0+IGhlYWRlci5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IGNoYW5nZWRIZWFkZXIubmFtZSkgYXMgSGVhZGVyRW50cnk7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRIZWFkZXIpXG4gICAgICAgICAgICAgICAgdGFyZ2V0SGVhZGVyLnZhbHVlID0gY2hhbmdlZEhlYWRlci52YWx1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBoZWFkZXJzLnB1c2goeyBuYW1lOiBjaGFuZ2VkSGVhZGVyLm5hbWUsIHZhbHVlOiBjaGFuZ2VkSGVhZGVyLnZhbHVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZW1vdmVkSGVhZGVyIG9mIHJlcU9wdHMuX3JlbW92ZWRIZWFkZXJzKVxuICAgICAgICAgICAgcmVtb3ZlKGhlYWRlcnMsIGhlYWRlciA9PiBoZWFkZXIubmFtZS50b0xvd2VyQ2FzZSgpID09PSByZW1vdmVkSGVhZGVyLm5hbWUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cmw6ICAgIG1vZGlmaWVyVXJsLFxuICAgICAgICAgICAgbWV0aG9kOiByZXFPcHRzLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ29udGludWVFdmVudEFyZ3MgKGV2ZW50OiBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQsIHJlcU9wdHM6IGFueSk6IENvbnRpbnVlUmVxdWVzdEFyZ3Mge1xuICAgICAgICBjb25zdCBjb250aW51ZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHBvc3REYXRhOiB0aGlzLl9nZXRVcGxvYWRQb3N0RGF0YShldmVudCksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJlcU9wdHMpXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbnRpbnVlRXZlbnRBcmdzLCB0aGlzLl9nZXRSZXF1ZXN0T3B0aW9uc01vZGlmaWVkQnlSZXF1ZXN0SG9vayhldmVudCwgcmVxT3B0cykpO1xuXG4gICAgICAgIHJldHVybiBjb250aW51ZUV2ZW50QXJncztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mb3JtYXRIZWFkZXJzRm9yQ29udGludWVSZXNwb25zZSAoaGVhZGVyczogUHJvdG9jb2wuTmV0d29yay5IZWFkZXJzKTogUHJvdG9jb2wuRmV0Y2guSGVhZGVyRW50cnlbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIGhlYWRlcnMpXG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IG5hbWU6IGhlYWRlciwgdmFsdWU6IGhlYWRlcnNbaGVhZGVyXSB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiJdfQ==
|
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFnQztBQVloQyxxRkFBdUY7QUFDdkYsNkVBQWlGO0FBQ2pGLDhDQUEwRDtBQUUxRCxzQ0FLc0I7QUFFdEIsaUVBQXlDO0FBU3pDLDZEQUltQztBQUVuQyw2REFPNkI7QUFJN0IsMEVBQTBEO0FBQzFELHlDQUlvQjtBQUNwQiwyREFBa0Q7QUFDbEQsMkRBQXdEO0FBQ3hELHdFQUE4QztBQUM5QyxrRUFBZ0U7QUFDaEUsc0NBQXNFO0FBRXRFLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFvQixDQUFDO0FBQzVFLE1BQU0sb0JBQW9CLEdBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFvQixDQUFDO0FBRTdFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRXhFLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsTUFBTSxFQUFTLFFBQVE7SUFDdkIsTUFBTSxFQUFTLFFBQVE7SUFDdkIsYUFBYSxFQUFFLGdCQUFnQjtDQUNsQyxDQUFDO0FBRUYsTUFBcUIsK0JBQWdDLFNBQVEsa0JBQXVCO0lBZWhGLFlBQW9CLFNBQWlCLEVBQUUsUUFBZ0IsRUFBRSxNQUFtQixFQUFFLFlBQXFCLEVBQUUsT0FBb0M7UUFDckksS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsR0FBYSxJQUFJLHlCQUFhLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQWtCLFFBQVEsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFjLFlBQVksQ0FBQztRQUM3QyxJQUFJLENB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QU8sQ0FBQyxNQUFNO1lBQ3RCLE9BQU87U0FDVixDQUFDO0lBQ04sQ0FBQztJQUVPLHdCQUF3QixDQUFFLEtBQXdDLEVBQUUsT0FBWTtRQUNwRixNQUFNLGlCQUFpQixHQUFHO1lBQ3RCLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1NBQzNDLENBQUM7UUFFRixJQUFJLE9BQU87WUFDUCxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVuRyxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUFFTyxpQ0FBaUMsQ0FBRSxPQUFpQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFFbEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTFELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDSjtBQXJkRCxrREFxZEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGcmFtZU5hdmlnYXRlZEV2ZW50ID0gUHJvdG9jb2wuUGFnZS5GcmFtZU5hdmlnYXRlZEV2ZW50O1xuaW1wb3J0IExvYWRpbmdGYWlsZWRFdmVudCA9IFByb3RvY29sLk5ldHdvcmsuTG9hZGluZ0ZhaWxlZEV2ZW50O1xuaW1wb3J0IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5pbXBvcnQgRnJhbWVUcmVlID0gUHJvdG9jb2wuUGFnZS5GcmFtZVRyZWU7XG5pbXBvcnQgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuaW1wb3J0IFJlcXVlc3RQYXR0ZXJuID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdHRlcm47XG5pbXBvcnQgQ2VydGlmaWNhdGVFcnJvckV2ZW50ID0gUHJvdG9jb2wuU2VjdXJpdHkuQ2VydGlmaWNhdGVFcnJvckV2ZW50O1xuaW1wb3J0IEhlYWRlckVudHJ5ID0gUHJvdG9jb2wuRmV0Y2guSGVhZGVyRW50cnk7XG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlciBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2V2ZW50LXByb3ZpZGVyJztcbmltcG9ydCBSZXNvdXJjZUluamVjdG9yLCB7IFJlc291cmNlSW5qZWN0b3JPcHRpb25zIH0gZnJvbSAnLi4vcmVzb3VyY2UtaW5qZWN0b3InO1xuaW1wb3J0IHsgY29udmVydFRvSGVhZGVyRW50cmllcyB9IGZyb20gJy4uL3V0aWxzL2hlYWRlcnMnO1xuXG5pbXBvcnQge1xuICAgIGNyZWF0ZVJlcXVlc3RQYXVzZWRFdmVudEZvclJlc3BvbnNlLFxuICAgIGdldFJlcXVlc3RJZCxcbiAgICBpc1JlcXVlc3QsXG4gICAgaXNVbmF1dGhvcml6ZWQsXG59IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5cbmltcG9ydCBFUlJPUl9ST1VURSBmcm9tICcuLi9lcnJvci1yb3V0ZSc7XG5cbmltcG9ydCB7XG4gICAgQ29udGludWVSZXF1ZXN0QXJncyxcbiAgICBTZXNzaW9uSWQsXG4gICAgU2Vzc2lvblN0b3JhZ2VJbmZvLFxuICAgIFNwZWNpYWxTZXJ2aWNlUm91dGVzLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7XG4gICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIsXG4gICAgcmVxdWVzdFBpcGVsaW5lT3RoZXJSZXF1ZXN0TG9nZ2VyLFxufSBmcm9tICcuLi8uLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcblxuaW1wb3J0IHtcbiAgICBJbmNvbWluZ01lc3NhZ2VMaWtlLFxuICAgIGlzUmVkaXJlY3RTdGF0dXNDb2RlLFxuICAgIFNQRUNJQUxfQkxBTktfUEFHRSxcbiAgICBTdG9yYWdlc1NuYXBzaG90LFxuICAgIGluamVjdFVwbG9hZCxcbiAgICBjb250ZW50VHlwZVV0aWxzLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCB7IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgZ2V0U3BlY2lhbFJlcXVlc3RIYW5kbGVyIGZyb20gJy4vc3BlY2lhbC1oYW5kbGVycyc7XG5pbXBvcnQge1xuICAgIGNvbm5lY3Rpb25SZXNldEd1YXJkLFxuICAgIHNhZmVDb250aW51ZVJlcXVlc3QsXG4gICAgc2FmZUNvbnRpbnVlUmVzcG9uc2UsXG59IGZyb20gJy4vc2FmZS1hcGknO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25BcGlCYXNlIGZyb20gJy4uL2FwaS1iYXNlJztcbmltcG9ydCB7IHJlc2VuZEF1dGhSZXF1ZXN0IH0gZnJvbSAnLi9yZXNlbmRBdXRoUmVxdWVzdCc7XG5pbXBvcnQgVGVzdFJ1bkJyaWRnZSBmcm9tICcuL3Rlc3QtcnVuLWJyaWRnZSc7XG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RDb250ZXh0SW5mbyBmcm9tICcuL2NvbnRleHQtaW5mbyc7XG5pbXBvcnQgeyBmYWlsZWRUb0ZpbmRETlNFcnJvciwgc3NsQ2VydGlmaWNhdGVFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmNvbnN0IEFMTF9SRVFVRVNUX1JFU1BPTlNFUyA9IHsgcmVxdWVzdFN0YWdlOiAnUmVxdWVzdCcgfSBhcyBSZXF1ZXN0UGF0dGVybjtcbmNvbnN0IEFMTF9SRVFVRVNUX1JFUVVFU1RTICA9IHsgcmVxdWVzdFN0YWdlOiAnUmVzcG9uc2UnIH0gYXMgUmVxdWVzdFBhdHRlcm47XG5cbmNvbnN0IEFMTF9SRVFVRVNUU19EQVRBID0gW0FMTF9SRVFVRVNUX1JFUVVFU1RTLCBBTExfUkVRVUVTVF9SRVNQT05TRVNdO1xuXG5jb25zdCBUQVJHRVRfSU5GT19UWVBFID0ge1xuICAgIGlmcmFtZTogICAgICAgICdpZnJhbWUnLFxuICAgIHdvcmtlcjogICAgICAgICd3b3JrZXInLFxuICAgIHNlcnZpY2VXb3JrZXI6ICdzZXJ2aWNlX3dvcmtlcicsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lIGV4dGVuZHMgTmF0aXZlQXV0b21hdGlvbkFwaUJhc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3dpbmRvd0lkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNNYWluV2luZG93OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rlc3RSdW5CcmlkZ2U6IFRlc3RSdW5CcmlkZ2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udGV4dEluZm86IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm87XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjogTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjtcbiAgICBwdWJsaWMgcmVzdG9yaW5nU3RvcmFnZXM6IFN0b3JhZ2VzU25hcHNob3QgfCBudWxsO1xuICAgIHB1YmxpYyBjb250ZXh0U3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VJbmZvIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvdXJjZUluamVjdG9yOiBSZXNvdXJjZUluamVjdG9yO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NwZWNpYWxTZXJ2aWNlUm91dGVzOiBTcGVjaWFsU2VydmljZVJvdXRlcztcbiAgICBwcml2YXRlIF9zdG9wcGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2N1cnJlbnRGcmFtZVRyZWU6IEZyYW1lVHJlZSB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmFpbGVkUmVxdWVzdElkczogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBfcGVuZGluZ0NlcnRpZmljYXRlRXJyb3I6IENlcnRpZmljYXRlRXJyb3JFdmVudCB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGJyb3dzZXJJZDogc3RyaW5nLCB3aW5kb3dJZDogc3RyaW5nLCBjbGllbnQ6IFByb3RvY29sQXBpLCBpc01haW5XaW5kb3c6IGJvb2xlYW4sIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucykge1xuICAgICAgICBzdXBlcihicm93c2VySWQsIGNsaWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fdGVzdFJ1bkJyaWRnZSAgICAgICAgICAgPSBuZXcgVGVzdFJ1bkJyaWRnZShicm93c2VySWQsIHdpbmRvd0lkKTtcbiAgICAgICAgdGhpcy5fd2luZG93SWQgICAgICAgICAgICAgICAgPSB3aW5kb3dJZDtcbiAgICAgICAgdGhpcy5faXNNYWluV2luZG93ICAgICAgICAgICAgPSBpc01haW5XaW5kb3c7XG4gICAgICAgIHRoaXMuX2NvbnRleHRJbmZvICAgICAgICAgICAgID0gbmV3IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8odGhpcy5fdGVzdFJ1bkJyaWRnZSk7XG4gICAgICAgIHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzICAgID0gdGhpcy5fZ2V0U3BlY2lhbFNlcnZpY2VSb3V0ZXMoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIgPSBuZXcgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlcigpO1xuICAgICAgICB0aGlzLl9yZXNvdXJjZUluamVjdG9yICAgICAgICA9IG5ldyBSZXNvdXJjZUluamVjdG9yKHRoaXMuX3Rlc3RSdW5CcmlkZ2UpO1xuICAgICAgICB0aGlzLl9zdG9wcGVkICAgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWVUcmVlICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMgICAgICAgID0gW107XG4gICAgICAgIHRoaXMucmVzdG9yaW5nU3RvcmFnZXMgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb250ZXh0U3RvcmFnZSAgICAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvciA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uc0ZvclJlc291cmNlSW5qZWN0b3IoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRPcHRpb25zRm9yUmVzb3VyY2VJbmplY3RvciAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9jcmVhdGVSZXNvdXJjZUluamVjdG9yT3B0aW9ucygpO1xuXG4gICAgICAgIHRoaXMuX3Jlc291cmNlSW5qZWN0b3Iuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVSZXNvdXJjZUluamVjdG9yT3B0aW9ucyAoKTogUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3BlY2lhbFNlcnZpY2VSb3V0ZXM6IHRoaXMuX3NwZWNpYWxTZXJ2aWNlUm91dGVzLFxuICAgICAgICAgICAgZGV2ZWxvcG1lbnRNb2RlOiAgICAgIHRoaXMub3B0aW9ucy5kZXZlbG9wbWVudE1vZGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0U3BlY2lhbFNlcnZpY2VSb3V0ZXMgKCk6IFNwZWNpYWxTZXJ2aWNlUm91dGVzIHtcbiAgICAgICAgY29uc3QgYnJvd3NlckNvbm5lY3Rpb24gPSB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldEJyb3dzZXJDb25uZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHByb3h5ICAgICAgICAgICAgID0gYnJvd3NlckNvbm5lY3Rpb24uYnJvd3NlckNvbm5lY3Rpb25HYXRld2F5LnByb3h5O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvclBhZ2UxOiAgICAgICAgICBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKEVSUk9SX1JPVVRFLCBwcm94eS5zZXJ2ZXIxSW5mby5kb21haW4pLFxuICAgICAgICAgICAgZXJyb3JQYWdlMjogICAgICAgICAgcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChFUlJPUl9ST1VURSwgcHJveHkuc2VydmVyMkluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGlkbGVQYWdlOiAgICAgICAgICAgIGJyb3dzZXJDb25uZWN0aW9uLmlkbGVVcmwsXG4gICAgICAgICAgICBvcGVuRmlsZVByb3RvY29sVXJsOiBicm93c2VyQ29ubmVjdGlvbi5vcGVuRmlsZVByb3RvY29sVXJsLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU1vY2tFcnJvcklmTmVjZXNzYXJ5IChwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQsIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFwaXBlbGluZUNvbnRleHQubW9jay5oYXNFcnJvcilcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQuaGFuZGxlTW9ja0Vycm9yKHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyKTtcblxuICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKCclc1xcbiVzJywgZXZlbnQubmV0d29ya0lkLCBwaXBlbGluZUNvbnRleHQubW9jay5lcnJvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTW9ja1Jlc3BvbnNlIChtb2NrZWRSZXNwb25zZTogSW5jb21pbmdNZXNzYWdlTGlrZSwgcGlwZWxpbmVDb250ZXh0OiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0LCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fc3RvcHBlZClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZUJvZHlTdHIgPSAobW9ja2VkUmVzcG9uc2UuZ2V0Qm9keSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoKTtcblxuICAgICAgICBjb25zdCBmdWxmaWxsSW5mbyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBtb2NrZWRSZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKG1vY2tlZFJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICAgICAgYm9keTogICAgICAgICAgICBtb2NrZWRSZXNwb25zZUJvZHlTdHIsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBpcGVsaW5lQ29udGV4dC5yZXFPcHRzLmlzQWpheFxuICAgICAgICAgICAgfHwgIU5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUuX2lzUGFnZShmdWxmaWxsSW5mby5yZXNwb25zZUhlYWRlcnMpKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzTm9uUHJveGllZENvbnRlbnQoZnVsZmlsbEluZm8sIHRoaXMuX2NsaWVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyU2NyaXB0cyA9IGF3YWl0IHRoaXMuX2dldFVzZXJTY3JpcHRzKGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzSFRNTFBhZ2VDb250ZW50KGZ1bGZpbGxJbmZvLCB7XG4gICAgICAgICAgICAgICAgaXNJZnJhbWU6ICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRleHRTdG9yYWdlOiB0aGlzLmNvbnRleHRTdG9yYWdlLFxuICAgICAgICAgICAgICAgIHVzZXJTY3JpcHRzLFxuICAgICAgICAgICAgfSwgdGhpcy5fY2xpZW50LCBzZXNzaW9uSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcihgc2VudCBtb2NrZWQgcmVzcG9uc2UgZm9yIHRoZSAke2V2ZW50LnJlcXVlc3RJZH1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVDb250aW51ZVJlc3BvbnNlUmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgbW9kaWZpZWQ6IGJvb2xlYW4pOiBDb250aW51ZVJlc3BvbnNlUmVxdWVzdCB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgIH0gYXMgQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5cbiAgICAgICAgaWYgKG1vZGlmaWVkKSB7XG4gICAgICAgICAgICBjb250aW51ZVJlc3BvbnNlUmVxdWVzdC5yZXNwb25zZUhlYWRlcnMgPSBldmVudC5yZXNwb25zZUhlYWRlcnM7XG4gICAgICAgICAgICBjb250aW51ZVJlc3BvbnNlUmVxdWVzdC5yZXNwb25zZUNvZGUgICAgPSBldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlVHlwZSA9PT0gJ0RvY3VtZW50J1xuICAgICAgICAgICAgJiYgIXRoaXMuX2lzSWZyYW1lKGV2ZW50LmZyYW1lSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldFVzZXJTY3JpcHRzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50IHwgRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgeyBwaXBlbGluZUNvbnRleHQsIGV2ZW50RmFjdG9yeSB9ID0gdGhpcy5fY29udGV4dEluZm8uZ2V0Q29udGV4dERhdGEoZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5wcmVwYXJlSW5qZWN0YWJsZVVzZXJTY3JpcHRzKGV2ZW50RmFjdG9yeSwgdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRVc2VyU2NyaXB0cygpKTtcblxuICAgICAgICByZXR1cm4gcGlwZWxpbmVDb250ZXh0LmluamVjdGFibGVVc2VyU2NyaXB0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9yZXNwb25kVG9PdGhlclJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChpc1JlZGlyZWN0U3RhdHVzQ29kZShldmVudC5yZXNwb25zZVN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZSh0aGlzLl9jbGllbnQsIHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSwgc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2VJbmZvID0gYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5nZXREb2N1bWVudFJlc291cmNlSW5mbyhldmVudCwgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICBpZiAocmVzb3VyY2VJbmZvLmVycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc2hvdWxkUmVkaXJlY3RUb0Vycm9yUGFnZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnJlZGlyZWN0VG9FcnJvclBhZ2UodGhpcy5fY2xpZW50LCByZXNvdXJjZUluZm8uZXJyb3IsIGV2ZW50LnJlcXVlc3QudXJsKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGlmaWVkID0gYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXNwb25zZShldmVudCwgcmVzb3VyY2VJbmZvLmJvZHksIHRoaXMuX2NvbnRleHRJbmZvLCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9uZWVkSW5qZWN0UmVzb3VyY2VzKGV2ZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZnVsZmlsbEluZm8gPSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiAgICAgICBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBldmVudC5yZXNwb25zZUhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyLFxuICAgICAgICAgICAgICAgIGJvZHk6ICAgICAgICAgICAgKHJlc291cmNlSW5mby5ib2R5IGFzIEJ1ZmZlcikudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIH0gYXMgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuXG4gICAgICAgICAgICAvLyBOT1RFOiBTdHJhbmdlIGJlaGF2aW9yIG9mIHRoZSBDRFAgQVBJOlxuICAgICAgICAgICAgLy8gaWYgd2UgcGFzcyB0aGUgZW1wdHkgXCJyZXNwb25zZVN0YXR1c1RleHRcIiB2YWx1ZSwgd2UgZ2V0IGFuIGVycm9yICdJbnZhbGlkIHN0YXR1cyBjb2RlIG9yIHBocmFzZScuXG4gICAgICAgICAgICBpZiAoZXZlbnQucmVzcG9uc2VTdGF0dXNUZXh0ICE9PSAnJylcbiAgICAgICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZVBocmFzZSA9IGV2ZW50LnJlc3BvbnNlU3RhdHVzVGV4dDtcblxuICAgICAgICAgICAgaWYgKGlzVW5hdXRob3JpemVkKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSBhcyBudW1iZXIpKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeUF1dGhvcml6ZVdpdGhIdHRwQmFzaWNBdXRoQ3JlZGVudGlhbHMoZXZlbnQsIGZ1bGZpbGxJbmZvKTtcblxuICAgICAgICAgICAgY29uc3QgdXNlclNjcmlwdHMgPSBhd2FpdCB0aGlzLl9nZXRVc2VyU2NyaXB0cyhldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0hUTUxQYWdlQ29udGVudChcbiAgICAgICAgICAgICAgICBmdWxmaWxsSW5mbyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlzSWZyYW1lOiAgICAgICAgICB0aGlzLl9pc0lmcmFtZShldmVudC5mcmFtZUlkKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAgICAgICAgICAgICAgIGV2ZW50LnJlcXVlc3QudXJsLFxuICAgICAgICAgICAgICAgICAgICByZXN0b3JpbmdTdG9yYWdlczogdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dFN0b3JhZ2U6ICAgIHRoaXMuY29udGV4dFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHVzZXJTY3JpcHRzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50LCBzZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuXG4gICAgICAgICAgICB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gdGhpcy5fY3JlYXRlQ29udGludWVSZXNwb25zZVJlcXVlc3QoZXZlbnQsIG1vZGlmaWVkKTtcblxuICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVzcG9uc2UodGhpcy5fY2xpZW50LCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCwgc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9pc1BhZ2UgKHJlc3BvbnNlSGVhZGVyczogSGVhZGVyRW50cnlbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlSGVhZGVyc1xuICAgICAgICAgICAgPy5maW5kKGhlYWRlciA9PiBoZWFkZXIubmFtZS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJylcbiAgICAgICAgICAgID8udmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlVXRpbHMuaXNQYWdlKGNvbnRlbnRUeXBlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9uZWVkSW5qZWN0UmVzb3VyY2VzIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChldmVudC5yZXNvdXJjZVR5cGUgIT09ICdEb2N1bWVudCcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUuX2lzUGFnZShldmVudC5yZXNwb25zZUhlYWRlcnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3RyeUF1dGhvcml6ZVdpdGhIdHRwQmFzaWNBdXRoQ3JlZGVudGlhbHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGZ1bGZpbGxJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLl90ZXN0UnVuLmdldEF1dGhDcmVkZW50aWFscygpO1xuXG4gICAgICAgIGlmICghY3JlZGVudGlhbHMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgYXV0aFJlcXVlc3QgPSBhd2FpdCByZXNlbmRBdXRoUmVxdWVzdChldmVudC5yZXF1ZXN0LCBjcmVkZW50aWFscyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhdXRoUmVxdWVzdCAhPT0gJ3N0cmluZycgJiYgIWlzVW5hdXRob3JpemVkKGF1dGhSZXF1ZXN0LnN0YXR1cykpIHtcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlQ29kZSAgICA9IGF1dGhSZXF1ZXN0LnN0YXR1cztcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLmJvZHkgICAgICAgICAgICA9IGF1dGhSZXF1ZXN0LmJvZHkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlUGhyYXNlICA9IGF1dGhSZXF1ZXN0LnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZUhlYWRlcnMgPSBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKGF1dGhSZXF1ZXN0LmhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRXJyb3IgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBFcnJvciB7XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvcilcbiAgICAgICAgICAgIHJldHVybiBzc2xDZXJ0aWZpY2F0ZUVycm9yKHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yLmVycm9yVHlwZSk7XG5cbiAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gPT09ICdOYW1lTm90UmVzb2x2ZWQnKVxuICAgICAgICAgICAgcmV0dXJuIGZhaWxlZFRvRmluZEROU0Vycm9yKGV2ZW50LnJlcXVlc3QudXJsKTtcblxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3RyeVJlc3BvbmRUb090aGVyUmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChldmVudC5yZXNwb25zZUVycm9yUmVhc29uICYmIHRoaXMuX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9jcmVhdGVFcnJvcihldmVudCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnJlZGlyZWN0VG9FcnJvclBhZ2UodGhpcy5fY2xpZW50LCBlcnJvciwgZXZlbnQucmVxdWVzdC51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc3BvbmRUb090aGVyUmVxdWVzdChldmVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQubmV0d29ya0lkICYmIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMuaW5jbHVkZXMoZXZlbnQubmV0d29ya0lkKSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLCBldmVudC5uZXR3b3JrSWQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVPdGhlclJlcXVlc3RzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVPdGhlclJlcXVlc3RMb2dnZXIoJyVyJywgZXZlbnQpO1xuXG4gICAgICAgIGlmICghZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbiAmJiAoaXNSZXF1ZXN0KGV2ZW50KSB8fCBpc1JlZGlyZWN0U3RhdHVzQ29kZShldmVudC5yZXNwb25zZVN0YXR1c0NvZGUpKSkge1xuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uaW5pdChldmVudCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVxdWVzdChldmVudCwgdGhpcy5fY29udGV4dEluZm8pO1xuXG4gICAgICAgICAgICBjb25zdCBwaXBlbGluZUNvbnRleHQgPSB0aGlzLl9jb250ZXh0SW5mby5nZXRQaXBlbGluZUNvbnRleHQoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIGlmICghcGlwZWxpbmVDb250ZXh0IHx8ICFwaXBlbGluZUNvbnRleHQubW9jaylcbiAgICAgICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXF1ZXN0KHRoaXMuX2NsaWVudCwgZXZlbnQsIHNlc3Npb25JZCwgdGhpcy5fY3JlYXRlQ29udGludWVFdmVudEFyZ3MoZXZlbnQsIHBpcGVsaW5lQ29udGV4dD8ucmVxT3B0cykpO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcignYmVnaW4gbW9ja2luZyByZXF1ZXN0ICVyJywgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2UgPSBhd2FpdCBwaXBlbGluZUNvbnRleHQuZ2V0TW9ja1Jlc3BvbnNlKCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVNb2NrRXJyb3JJZk5lY2Vzc2FyeShwaXBlbGluZUNvbnRleHQsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vY2tlZFJlc3BvbnNlRXZlbnQgPSBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZShtb2NrZWRSZXNwb25zZSwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXNwb25zZShtb2NrZWRSZXNwb25zZUV2ZW50LCBtb2NrZWRSZXNwb25zZS5nZXRCb2R5KCksIHRoaXMuX2NvbnRleHRJbmZvLCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlTW9ja1Jlc3BvbnNlKG1vY2tlZFJlc3BvbnNlLCBwaXBlbGluZUNvbnRleHQsIGV2ZW50LCBzZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcblxuICAgICAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoJ2VuZCBtb2NraW5nIHJlcXVlc3QgJXInLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdHJ5UmVzcG9uZFRvT3RoZXJSZXF1ZXN0KGV2ZW50LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFVwbG9hZFBvc3REYXRhIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFldmVudC5yZXF1ZXN0LnBvc3REYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICBjb25zdCBjb250ZW50VHlwZUhlYWRlciA9IGV2ZW50LnJlcXVlc3QuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwb3N0RGF0YSAgICAgICAgICA9IEJ1ZmZlci5mcm9tKGV2ZW50LnJlcXVlc3QucG9zdERhdGEsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCBib2R5V2l0aFVwbG9hZHMgICA9IGluamVjdFVwbG9hZChjb250ZW50VHlwZUhlYWRlciwgcG9zdERhdGEpO1xuXG4gICAgICAgIHJldHVybiBib2R5V2l0aFVwbG9hZHMgPyBib2R5V2l0aFVwbG9hZHMudG9TdHJpbmcoJ2Jhc2U2NCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RvcEZyYW1lTmF2aWdhdGlvbiAoZXZlbnQ6IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnR5cGUgPT09ICdOYXZpZ2F0aW9uJ1xuICAgICAgICAgICAgJiYgIWV2ZW50LmZyYW1lLnBhcmVudElkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3VwZGF0ZUN1cnJlbnRGcmFtZVRyZWUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBOT1RFOiBEdWUgdG8gQ0RQIHJlc3RyaWN0aW9ucyAoaXQgaGFuZ3MpLCB3ZSBjYW4ndCBnZXQgdGhlIGZyYW1lIHRyZWVcbiAgICAgICAgLy8gcmlnaHQgYmVmb3JlIGluamVjdGluZyBzZXJ2aWNlIHNjcmlwdHMuXG4gICAgICAgIC8vIFNvLCB3ZSBhcmUgZm9yY2VkIHRyYWNraW5nIGZyYW1lcyB0cmVlLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9jbGllbnQuUGFnZS5nZXRGcmFtZVRyZWUoKTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWVUcmVlID0gcmVzdWx0LmZyYW1lVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lmcmFtZSAoZnJhbWVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudEZyYW1lVHJlZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEZyYW1lVHJlZS5mcmFtZS5pZCAhPT0gZnJhbWVJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBOT1RFOiBXZSBhcmUgZm9yY2VkIHRvIGhhbmRsZSBhbGwgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBhdCBvbmNlXG4gICAgICAgIC8vIGJlY2F1c2UgQ0RQIEFQSSBkb2VzIG5vdCBhbGxvdyBzcGVjaWZ5aW5nIHJlcXVlc3QgZmlsdGVyaW5nIGJlaGF2aW9yIGZvciBkaWZmZXJlbnQgaGFuZGxlcnMuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5GZXRjaC5lbmFibGUoe1xuICAgICAgICAgICAgcGF0dGVybnM6IEFMTF9SRVFVRVNUU19EQVRBLFxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuVGFyZ2V0LnNldEF1dG9BdHRhY2goe1xuICAgICAgICAgICAgYXV0b0F0dGFjaDogICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgIHdhaXRGb3JEZWJ1Z2dlck9uU3RhcnQ6IHRydWUsXG4gICAgICAgICAgICBmbGF0dGVuOiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIGVuYWJsZSB0aGUgRmV0Y2ggZG9tYWluIGZvciBpZnJhbWUgdGFyZ2V0c1xuICAgICAgICAvLyB0byBpbnRlcmNlcHQgc29tZSByZXF1ZXN0cy4gV2UgbmVlZCB0byB1c2UgdGhlIGBzZXNzaW9uSWRgIG9wdGlvblxuICAgICAgICAvLyBpbiBjb250aW51ZVJlcXVlc3QvY29udGludWVSZXNwb25zZS9mdWxmaWxsUmVxdWVzdCBtZXRob2RzXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5UYXJnZXQub24oJ2F0dGFjaGVkVG9UYXJnZXQnLCBhc3luYyBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0lGcmFtZSAgICAgICAgPSBldmVudC50YXJnZXRJbmZvLnR5cGUgPT09IFRBUkdFVF9JTkZPX1RZUEUuaWZyYW1lO1xuICAgICAgICAgICAgY29uc3QgaXNXb3JrZXIgICAgICAgID0gZXZlbnQudGFyZ2V0SW5mby50eXBlID09PSBUQVJHRVRfSU5GT19UWVBFLndvcmtlcjtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VydmljZVdvcmtlciA9IGV2ZW50LnRhcmdldEluZm8udHlwZSA9PT0gVEFSR0VUX0lORk9fVFlQRS5zZXJ2aWNlV29ya2VyO1xuXG4gICAgICAgICAgICBpZiAoIWlzSUZyYW1lICYmICFpc1dvcmtlciAmJiAhaXNTZXJ2aWNlV29ya2VyKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuUnVudGltZS5ydW5JZldhaXRpbmdGb3JEZWJ1Z2dlcihldmVudC5zZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzSUZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LkZldGNoLmVuYWJsZSh7IHBhdHRlcm5zOiBBTExfUkVRVUVTVFNfREFUQSB9LCBldmVudC5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKGBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJXNgLCBlcnIsIGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuX2NsaWVudC5GZXRjaC5vbigncmVxdWVzdFBhdXNlZCcsIGFzeW5jIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIgPSBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIoZXZlbnQsIHRoaXMub3B0aW9ucywgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMpO1xuXG4gICAgICAgICAgICBpZiAoc3BlY2lhbFJlcXVlc3RIYW5kbGVyKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNwZWNpYWxSZXF1ZXN0SGFuZGxlcihldmVudCwgdGhpcy5fY2xpZW50LCB0aGlzLl9pc01haW5XaW5kb3csIHRoaXMub3B0aW9ucywgc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVPdGhlclJlcXVlc3RzKGV2ZW50LCBzZXNzaW9uSWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuUGFnZS5vbignZnJhbWVOYXZpZ2F0ZWQnLCBhc3luYyAoZXZlbnQ6IEZyYW1lTmF2aWdhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcignJWYnLCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdG9wRnJhbWVOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICAgICAgICAgIHx8IGV2ZW50LmZyYW1lLnVybCAhPT0gU1BFQ0lBTF9CTEFOS19QQUdFKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uaW5pdChldmVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJTY3JpcHRzID0gYXdhaXQgdGhpcy5fZ2V0VXNlclNjcmlwdHMoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NBYm91dEJsYW5rUGFnZShldmVudCwgdXNlclNjcmlwdHMsIHRoaXMuY29udGV4dFN0b3JhZ2UsIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5QYWdlLm9uKCdmcmFtZVN0YXJ0ZWRMb2FkaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlQ3VycmVudEZyYW1lVHJlZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuTmV0d29yay5vbignbG9hZGluZ0ZhaWxlZCcsIGFzeW5jIChldmVudDogTG9hZGluZ0ZhaWxlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoJyVsJywgZXZlbnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLnB1c2goZXZlbnQucmVxdWVzdElkKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcXVlc3RJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGV2ZW50LnJlcXVlc3RJZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5QYWdlLnNldEJ5cGFzc0NTUCh7IGVuYWJsZWQ6IHRydWUgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlNlY3VyaXR5LmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5TZWN1cml0eS5vbignY2VydGlmaWNhdGVFcnJvcicsIGFzeW5jIChldmVudDogQ2VydGlmaWNhdGVFcnJvckV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvciA9IGV2ZW50O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N0b3BwZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkaXNwb3NlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LkZldGNoLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRSZXF1ZXN0T3B0aW9uc01vZGlmaWVkQnlSZXF1ZXN0SG9vayAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCwgcmVxT3B0czogYW55KTogQ29udGludWVSZXF1ZXN0QXJncyB7XG4gICAgICAgIGlmICghcmVxT3B0cylcbiAgICAgICAgICAgIHJldHVybiB7fTtcblxuICAgICAgICBsZXQgbW9kaWZpZXJVcmw6IGFueSA9IHZvaWQgMDtcblxuICAgICAgICBpZiAocmVxT3B0cy5fY2hhbmdlZFVybFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBtb2RpZmllclVybCA9IG5ldyBVUkwoZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZWRVcmxQcm9wZXJ0eSBvZiByZXFPcHRzLl9jaGFuZ2VkVXJsUHJvcGVydGllcylcbiAgICAgICAgICAgICAgICBtb2RpZmllclVybFtjaGFuZ2VkVXJsUHJvcGVydHkubmFtZV0gPSBjaGFuZ2VkVXJsUHJvcGVydHkudmFsdWU7XG5cbiAgICAgICAgICAgIG1vZGlmaWVyVXJsID0gbW9kaWZpZXJVcmwudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLl9mb3JtYXRIZWFkZXJzRm9yQ29udGludWVSZXNwb25zZShldmVudC5yZXF1ZXN0LmhlYWRlcnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlZEhlYWRlciBvZiByZXFPcHRzLl9jaGFuZ2VkSGVhZGVycykge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0SGVhZGVyID0gaGVhZGVycy5maW5kKGhlYWRlciA9PiBoZWFkZXIubmFtZS50b0xvd2VyQ2FzZSgpID09PSBjaGFuZ2VkSGVhZGVyLm5hbWUpIGFzIEhlYWRlckVudHJ5O1xuXG4gICAgICAgICAgICBpZiAodGFyZ2V0SGVhZGVyKVxuICAgICAgICAgICAgICAgIHRhcmdldEhlYWRlci52YWx1ZSA9IGNoYW5nZWRIZWFkZXIudmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaGVhZGVycy5wdXNoKHsgbmFtZTogY2hhbmdlZEhlYWRlci5uYW1lLCB2YWx1ZTogY2hhbmdlZEhlYWRlci52YWx1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZEhlYWRlciBvZiByZXFPcHRzLl9yZW1vdmVkSGVhZGVycylcbiAgICAgICAgICAgIHJlbW92ZShoZWFkZXJzLCBoZWFkZXIgPT4gaGVhZGVyLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcmVtb3ZlZEhlYWRlci5uYW1lKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXJsOiAgICBtb2RpZmllclVybCxcbiAgICAgICAgICAgIG1ldGhvZDogcmVxT3B0cy5tZXRob2QsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUNvbnRpbnVlRXZlbnRBcmdzIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50LCByZXFPcHRzOiBhbnkpOiBDb250aW51ZVJlcXVlc3RBcmdzIHtcbiAgICAgICAgY29uc3QgY29udGludWVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBwb3N0RGF0YTogdGhpcy5fZ2V0VXBsb2FkUG9zdERhdGEoZXZlbnQpLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXFPcHRzKVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb250aW51ZUV2ZW50QXJncywgdGhpcy5fZ2V0UmVxdWVzdE9wdGlvbnNNb2RpZmllZEJ5UmVxdWVzdEhvb2soZXZlbnQsIHJlcU9wdHMpKTtcblxuICAgICAgICByZXR1cm4gY29udGludWVFdmVudEFyZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9ybWF0SGVhZGVyc0ZvckNvbnRpbnVlUmVzcG9uc2UgKGhlYWRlcnM6IFByb3RvY29sLk5ldHdvcmsuSGVhZGVycyk6IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5W10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiBoZWFkZXJzKVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBuYW1lOiBoZWFkZXIsIHZhbHVlOiBoZWFkZXJzW2hlYWRlcl0gfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -19,7 +19,7 @@ async function handleRequestPauseEvent(event, client, sessionId) {
|
|
|
19
19
|
}
|
|
20
20
|
const internalRequest = {
|
|
21
21
|
condition: (event) => !event.networkId && event.resourceType !== 'Document' && !event.request.url,
|
|
22
|
-
handler: async (event, client, options, sessionId) => {
|
|
22
|
+
handler: async (event, client, isMainWindow, options, sessionId) => {
|
|
23
23
|
(0, debug_loggers_1.requestPipelineInternalRequestLogger)('%r', event);
|
|
24
24
|
await handleRequestPauseEvent(event, client, sessionId);
|
|
25
25
|
},
|
|
@@ -33,9 +33,23 @@ const serviceRequest = {
|
|
|
33
33
|
return false;
|
|
34
34
|
return options.serviceDomains.some(domain => url.startsWith(domain));
|
|
35
35
|
},
|
|
36
|
-
handler: async (event, client, options, sessionId) => {
|
|
36
|
+
handler: async (event, client, isMainWindow, options, sessionId) => {
|
|
37
37
|
(0, debug_loggers_1.requestPipelineServiceRequestLogger)('%r', event);
|
|
38
|
-
|
|
38
|
+
try {
|
|
39
|
+
await handleRequestPauseEvent(event, client, sessionId);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (isMainWindow) {
|
|
43
|
+
(0, debug_loggers_1.requestPipelineServiceRequestLogger)('Failed to process request in main window: %s', event.request.url);
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// NOTE: Sometimes, a child window sends a heartbeat request and then immediately closes.
|
|
48
|
+
// In these situations, we need to catch errors because we can't handle this request correctly
|
|
49
|
+
// when the cdpClient has already closed.
|
|
50
|
+
(0, debug_loggers_1.requestPipelineServiceRequestLogger)('Failed to process request in child window: %s', event.request.url);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
39
53
|
},
|
|
40
54
|
};
|
|
41
55
|
const defaultFaviconRequest = {
|
|
@@ -43,7 +57,7 @@ const defaultFaviconRequest = {
|
|
|
43
57
|
const parsedUrl = new URL(event.request.url);
|
|
44
58
|
return parsedUrl.pathname === injectables_1.DEFAULT_FAVICON_PATH;
|
|
45
59
|
},
|
|
46
|
-
handler: async (event, client, options, sessionId) => {
|
|
60
|
+
handler: async (event, client, isMainWindow, options, sessionId) => {
|
|
47
61
|
(0, debug_loggers_1.requestPipelineLogger)('%r', event);
|
|
48
62
|
if ((0, cdp_1.isRequest)(event))
|
|
49
63
|
await (0, safe_api_1.safeContinueRequest)(client, event, sessionId);
|
|
@@ -73,4 +87,4 @@ function getSpecialRequestHandler(event, options, serviceRoutes) {
|
|
|
73
87
|
}
|
|
74
88
|
exports.default = getSpecialRequestHandler;
|
|
75
89
|
module.exports = exports.default;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1oYW5kbGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uYXRpdmUtYXV0b21hdGlvbi9yZXF1ZXN0LXBpcGVsaW5lL3NwZWNpYWwtaGFuZGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSwwREFBZ0U7QUFPaEUsNkRBSW1DO0FBRW5DLHNDQUF5QztBQUN6QywyQ0FBMEQ7QUFDMUQseURBQWdEO0FBQ2hELG9FQUEyQztBQUMzQyw0Q0FBaUQ7QUFDakQseUNBSW9CO0FBRXBCLEtBQUssVUFBVSx1QkFBdUIsQ0FBRSxLQUF5QixFQUFFLE1BQW1CLEVBQUUsU0FBb0I7SUFDeEcsSUFBSSxJQUFBLGVBQVMsRUFBQyxLQUFLLENBQUM7UUFDaEIsTUFBTSxJQUFBLDhCQUFtQixFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7O1FBRXBELE1BQU0sSUFBQSwrQkFBb0IsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFHRCxNQUFNLGVBQWUsR0FBRztJQUNwQixTQUFTLEVBQUUsQ0FBQyxLQUF5QixFQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUc7SUFDOUgsT0FBTyxFQUFJLEtBQUssRUFBRSxLQUF5QixFQUFFLE1BQW1CLEVBQUUsT0FBb0MsRUFBRSxTQUFvQixFQUFpQixFQUFFO1FBQzNJLElBQUEsb0RBQW9DLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxELE1BQU0sdUJBQXVCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ2MsQ0FBQztBQUVwQixNQUFNLGNBQWMsR0FBRztJQUNuQixTQUFTLEVBQUUsQ0FBQyxLQUF5QixFQUFFLE9BQW9DLEVBQUUsYUFBbUMsRUFBVyxFQUFFO1FBQ3pILE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBRTlCLG9EQUFvRDtRQUNwRCxJQUFJLEdBQUcsS0FBSyxhQUFhLENBQUMsVUFBVTtlQUM3QixHQUFHLEtBQUssYUFBYSxDQUFDLFVBQVU7WUFDbkMsT0FBTyxLQUFLLENBQUM7UUFFakIsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUF5QixFQUFFLE1BQW1CLEVBQUUsT0FBb0MsRUFBRSxTQUFvQixFQUFpQixFQUFFO1FBQ3pJLElBQUEsbURBQW1DLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWpELE1BQU0sdUJBQXVCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0NBQ2MsQ0FBQztBQUVwQixNQUFNLHFCQUFxQixHQUFHO0lBQzFCLFNBQVMsRUFBRSxDQUFDLEtBQXlCLEVBQVcsRUFBRTtRQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdDLE9BQU8sU0FBUyxDQUFDLFFBQVEsS0FBSyxrQ0FBb0IsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUF5QixFQUFFLE1BQW1CLEVBQUUsT0FBb0MsRUFBRSxTQUFvQixFQUFpQixFQUFFO1FBQ3pJLElBQUEscUNBQXFCLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRW5DLElBQUksSUFBQSxlQUFTLEVBQUMsS0FBSyxDQUFDO1lBQ2hCLE1BQU0sSUFBQSw4QkFBbUIsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssK0JBQVcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxtQ0FBbUM7Z0JBQ3pGLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLHFCQUFVLEVBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUV4RCxNQUFNLElBQUEsNkJBQWtCLEVBQUMsTUFBTSxFQUFFO29CQUM3QixTQUFTLEVBQVEsS0FBSyxDQUFDLFNBQVM7b0JBQ2hDLFlBQVksRUFBSywrQkFBVyxDQUFDLEVBQUU7b0JBQy9CLGVBQWUsRUFBRSxDQUFFLHVDQUEyQixDQUFFO29CQUNoRCxJQUFJLEVBQWEsSUFBQSx1QkFBYyxFQUFDLE9BQU8sQ0FBQztpQkFDM0MsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNqQjs7Z0JBRUcsTUFBTSxJQUFBLCtCQUFvQixFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDNUQ7SUFDTCxDQUFDO0NBQ2MsQ0FBQztBQUVwQixNQUFNLHdCQUF3QixHQUFHO0lBQzdCLGVBQWU7SUFDZixjQUFjO0lBQ2QscUJBQXFCO0NBQ3hCLENBQUM7QUFFRixTQUF3Qix3QkFBd0IsQ0FBRSxLQUF5QixFQUFFLE9BQXFDLEVBQUUsYUFBb0M7SUFDcEosTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUU3RyxPQUFPLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN4RSxDQUFDO0FBSkQsMkNBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCB7IERFRkFVTFRfRkFWSUNPTl9QQVRIIH0gZnJvbSAnLi4vLi4vYXNzZXRzL2luamVjdGFibGVzJztcbmltcG9ydCB7XG4gICAgUmVxdWVzdEhhbmRsZXIsXG4gICAgU2Vzc2lvbklkLFxuICAgIFNwZWNpYWxTZXJ2aWNlUm91dGVzLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBQcm90b2NvbEFwaSB9IGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgcmVxdWVzdFBpcGVsaW5lSW50ZXJuYWxSZXF1ZXN0TG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcixcbiAgICByZXF1ZXN0UGlwZWxpbmVTZXJ2aWNlUmVxdWVzdExvZ2dlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5pbXBvcnQgeyBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgaXNSZXF1ZXN0IH0gZnJvbSAnLi4vdXRpbHMvY2RwJztcbmltcG9ydCB7IEZBVklDT05fQ09OVEVOVF9UWVBFX0hFQURFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN0YXR1c0NvZGVzIH0gZnJvbSAnaHR0cC1zdGF0dXMtY29kZXMnO1xuaW1wb3J0IGxvYWRBc3NldHMgZnJvbSAnLi4vLi4vbG9hZC1hc3NldHMnO1xuaW1wb3J0IHsgdG9CYXNlNjRTdHJpbmcgfSBmcm9tICcuLi91dGlscy9zdHJpbmcnO1xuaW1wb3J0IHtcbiAgICBzYWZlQ29udGludWVSZXF1ZXN0LFxuICAgIHNhZmVDb250aW51ZVJlc3BvbnNlLFxuICAgIHNhZmVGdWxmaWxsUmVxdWVzdCxcbn0gZnJvbSAnLi9zYWZlLWFwaSc7XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RQYXVzZUV2ZW50IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjbGllbnQ6IFByb3RvY29sQXBpLCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChpc1JlcXVlc3QoZXZlbnQpKVxuICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXF1ZXN0KGNsaWVudCwgZXZlbnQsIHNlc3Npb25JZCk7XG4gICAgZWxzZVxuICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZShjbGllbnQsIGV2ZW50LCBzZXNzaW9uSWQpO1xufVxuXG5cbmNvbnN0IGludGVybmFsUmVxdWVzdCA9IHtcbiAgICBjb25kaXRpb246IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiA9PiAhZXZlbnQubmV0d29ya0lkICYmIGV2ZW50LnJlc291cmNlVHlwZSAhPT0gJ0RvY3VtZW50JyAmJiAhZXZlbnQucmVxdWVzdC51cmwsXG4gICAgaGFuZGxlcjogICBhc3luYyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgY2xpZW50OiBQcm90b2NvbEFwaSwgb3B0aW9uczogTmF0aXZlQXV0b21hdGlvbkluaXRPcHRpb25zLCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVJbnRlcm5hbFJlcXVlc3RMb2dnZXIoJyVyJywgZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IGhhbmRsZVJlcXVlc3RQYXVzZUV2ZW50KGV2ZW50LCBjbGllbnQsIHNlc3Npb25JZCk7XG4gICAgfSxcbn0gYXMgUmVxdWVzdEhhbmRsZXI7XG5cbmNvbnN0IHNlcnZpY2VSZXF1ZXN0ID0ge1xuICAgIGNvbmRpdGlvbjogKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucywgc2VydmljZVJvdXRlczogU3BlY2lhbFNlcnZpY2VSb3V0ZXMpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgdXJsID0gZXZlbnQucmVxdWVzdC51cmw7XG5cbiAgICAgICAgLy8gTk9URTogdGhlIHNlcnZpY2UgJ0Vycm9yIHBhZ2UnIHNob3VsZCBiZSBwcm94aWVkLlxuICAgICAgICBpZiAodXJsID09PSBzZXJ2aWNlUm91dGVzLmVycm9yUGFnZTFcbiAgICAgICAgICAgIHx8IHVybCA9PT0gc2VydmljZVJvdXRlcy5lcnJvclBhZ2UyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLnNlcnZpY2VEb21haW5zLnNvbWUoZG9tYWluID0+IHVybC5zdGFydHNXaXRoKGRvbWFpbikpO1xuICAgIH0sXG4gICAgaGFuZGxlcjogYXN5bmMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGksIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucywgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lU2VydmljZVJlcXVlc3RMb2dnZXIoJyVyJywgZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IGhhbmRsZVJlcXVlc3RQYXVzZUV2ZW50KGV2ZW50LCBjbGllbnQsIHNlc3Npb25JZCk7XG4gICAgfSxcbn0gYXMgUmVxdWVzdEhhbmRsZXI7XG5cbmNvbnN0IGRlZmF1bHRGYXZpY29uUmVxdWVzdCA9IHtcbiAgICBjb25kaXRpb246IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwoZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWRVcmwucGF0aG5hbWUgPT09IERFRkFVTFRfRkFWSUNPTl9QQVRIO1xuICAgIH0sXG4gICAgaGFuZGxlcjogYXN5bmMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGksIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucywgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKCclcicsIGV2ZW50KTtcblxuICAgICAgICBpZiAoaXNSZXF1ZXN0KGV2ZW50KSlcbiAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlcXVlc3QoY2xpZW50LCBldmVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlID09PSBTdGF0dXNDb2Rlcy5OT1RfRk9VTkQpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lbHktaWZcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZhdkljb24gfSA9IGxvYWRBc3NldHMob3B0aW9ucy5kZXZlbG9wbWVudE1vZGUpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgc2FmZUZ1bGZpbGxSZXF1ZXN0KGNsaWVudCwge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgIGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBTdGF0dXNDb2Rlcy5PSyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBbIEZBVklDT05fQ09OVEVOVF9UWVBFX0hFQURFUiBdLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiAgICAgICAgICAgIHRvQmFzZTY0U3RyaW5nKGZhdkljb24pLFxuICAgICAgICAgICAgICAgIH0sIHNlc3Npb25JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXdhaXQgc2FmZUNvbnRpbnVlUmVzcG9uc2UoY2xpZW50LCBldmVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgIH0sXG59IGFzIFJlcXVlc3RIYW5kbGVyO1xuXG5jb25zdCBTUEVDSUFMX1JFUVVFU1RfSEFORExFUlMgPSBbXG4gICAgaW50ZXJuYWxSZXF1ZXN0LFxuICAgIHNlcnZpY2VSZXF1ZXN0LFxuICAgIGRlZmF1bHRGYXZpY29uUmVxdWVzdCxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNwZWNpYWxSZXF1ZXN0SGFuZGxlciAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgb3B0aW9ucz86IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucywgc2VydmljZVJvdXRlcz86IFNwZWNpYWxTZXJ2aWNlUm91dGVzKTogYW55IHtcbiAgICBjb25zdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIgPSBTUEVDSUFMX1JFUVVFU1RfSEFORExFUlMuZmluZChoID0+IGguY29uZGl0aW9uKGV2ZW50LCBvcHRpb25zLCBzZXJ2aWNlUm91dGVzKSk7XG5cbiAgICByZXR1cm4gc3BlY2lhbFJlcXVlc3RIYW5kbGVyID8gc3BlY2lhbFJlcXVlc3RIYW5kbGVyLmhhbmRsZXIgOiBudWxsO1xufVxuXG4iXX0=
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY2lhbC1oYW5kbGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9uYXRpdmUtYXV0b21hdGlvbi9yZXF1ZXN0LXBpcGVsaW5lL3NwZWNpYWwtaGFuZGxlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSwwREFBZ0U7QUFPaEUsNkRBSW1DO0FBRW5DLHNDQUF5QztBQUN6QywyQ0FBMEQ7QUFDMUQseURBQWdEO0FBQ2hELG9FQUEyQztBQUMzQyw0Q0FBaUQ7QUFDakQseUNBSW9CO0FBRXBCLEtBQUssVUFBVSx1QkFBdUIsQ0FBRSxLQUF5QixFQUFFLE1BQW1CLEVBQUUsU0FBb0I7SUFDeEcsSUFBSSxJQUFBLGVBQVMsRUFBQyxLQUFLLENBQUM7UUFDaEIsTUFBTSxJQUFBLDhCQUFtQixFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7O1FBRXBELE1BQU0sSUFBQSwrQkFBb0IsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFHRCxNQUFNLGVBQWUsR0FBRztJQUNwQixTQUFTLEVBQUUsQ0FBQyxLQUF5QixFQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUc7SUFDOUgsT0FBTyxFQUFJLEtBQUssRUFBRSxLQUF5QixFQUFFLE1BQW1CLEVBQUUsWUFBcUIsRUFBRSxPQUFvQyxFQUFFLFNBQW9CLEVBQWlCLEVBQUU7UUFDbEssSUFBQSxvREFBb0MsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEQsTUFBTSx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDYyxDQUFDO0FBRXBCLE1BQU0sY0FBYyxHQUFHO0lBQ25CLFNBQVMsRUFBRSxD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QixHQUFHLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRTdHLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hFLENBQUM7QUFKRCwyQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgUmVxdWVzdFBhdXNlZEV2ZW50ID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50O1xuaW1wb3J0IHsgREVGQVVMVF9GQVZJQ09OX1BBVEggfSBmcm9tICcuLi8uLi9hc3NldHMvaW5qZWN0YWJsZXMnO1xuaW1wb3J0IHtcbiAgICBSZXF1ZXN0SGFuZGxlcixcbiAgICBTZXNzaW9uSWQsXG4gICAgU3BlY2lhbFNlcnZpY2VSb3V0ZXMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICByZXF1ZXN0UGlwZWxpbmVJbnRlcm5hbFJlcXVlc3RMb2dnZXIsXG4gICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZVNlcnZpY2VSZXF1ZXN0TG9nZ2VyLFxufSBmcm9tICcuLi8uLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcbmltcG9ydCB7IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBpc1JlcXVlc3QgfSBmcm9tICcuLi91dGlscy9jZHAnO1xuaW1wb3J0IHsgRkFWSUNPTl9DT05URU5UX1RZUEVfSEVBREVSIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XG5pbXBvcnQgbG9hZEFzc2V0cyBmcm9tICcuLi8uLi9sb2FkLWFzc2V0cyc7XG5pbXBvcnQgeyB0b0Jhc2U2NFN0cmluZyB9IGZyb20gJy4uL3V0aWxzL3N0cmluZyc7XG5pbXBvcnQge1xuICAgIHNhZmVDb250aW51ZVJlcXVlc3QsXG4gICAgc2FmZUNvbnRpbnVlUmVzcG9uc2UsXG4gICAgc2FmZUZ1bGZpbGxSZXF1ZXN0LFxufSBmcm9tICcuL3NhZmUtYXBpJztcblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFBhdXNlRXZlbnQgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGksIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGlzUmVxdWVzdChldmVudCkpXG4gICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlcXVlc3QoY2xpZW50LCBldmVudCwgc2Vzc2lvbklkKTtcbiAgICBlbHNlXG4gICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlc3BvbnNlKGNsaWVudCwgZXZlbnQsIHNlc3Npb25JZCk7XG59XG5cblxuY29uc3QgaW50ZXJuYWxSZXF1ZXN0ID0ge1xuICAgIGNvbmRpdGlvbjogKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuID0+ICFldmVudC5uZXR3b3JrSWQgJiYgZXZlbnQucmVzb3VyY2VUeXBlICE9PSAnRG9jdW1lbnQnICYmICFldmVudC5yZXF1ZXN0LnVybCxcbiAgICBoYW5kbGVyOiAgIGFzeW5jIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjbGllbnQ6IFByb3RvY29sQXBpLCBpc01haW5XaW5kb3c6IGJvb2xlYW4sIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucywgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lSW50ZXJuYWxSZXF1ZXN0TG9nZ2VyKCclcicsIGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBoYW5kbGVSZXF1ZXN0UGF1c2VFdmVudChldmVudCwgY2xpZW50LCBzZXNzaW9uSWQpO1xuICAgIH0sXG59IGFzIFJlcXVlc3RIYW5kbGVyO1xuXG5jb25zdCBzZXJ2aWNlUmVxdWVzdCA9IHtcbiAgICBjb25kaXRpb246IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBvcHRpb25zOiBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMsIHNlcnZpY2VSb3V0ZXM6IFNwZWNpYWxTZXJ2aWNlUm91dGVzKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGV2ZW50LnJlcXVlc3QudXJsO1xuXG4gICAgICAgIC8vIE5PVEU6IHRoZSBzZXJ2aWNlICdFcnJvciBwYWdlJyBzaG91bGQgYmUgcHJveGllZC5cbiAgICAgICAgaWYgKHVybCA9PT0gc2VydmljZVJvdXRlcy5lcnJvclBhZ2UxXG4gICAgICAgICAgICB8fCB1cmwgPT09IHNlcnZpY2VSb3V0ZXMuZXJyb3JQYWdlMilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5zZXJ2aWNlRG9tYWlucy5zb21lKGRvbWFpbiA9PiB1cmwuc3RhcnRzV2l0aChkb21haW4pKTtcbiAgICB9LFxuICAgIGhhbmRsZXI6IGFzeW5jIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjbGllbnQ6IFByb3RvY29sQXBpLCBpc01haW5XaW5kb3c6IGJvb2xlYW4sIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucywgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lU2VydmljZVJlcXVlc3RMb2dnZXIoJyVyJywgZXZlbnQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGVSZXF1ZXN0UGF1c2VFdmVudChldmVudCwgY2xpZW50LCBzZXNzaW9uSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChpc01haW5XaW5kb3cpIHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVTZXJ2aWNlUmVxdWVzdExvZ2dlcignRmFpbGVkIHRvIHByb2Nlc3MgcmVxdWVzdCBpbiBtYWluIHdpbmRvdzogJXMnLCBldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBTb21ldGltZXMsIGEgY2hpbGQgd2luZG93IHNlbmRzIGEgaGVhcnRiZWF0IHJlcXVlc3QgYW5kIHRoZW4gaW1tZWRpYXRlbHkgY2xvc2VzLlxuICAgICAgICAgICAgICAgIC8vIEluIHRoZXNlIHNpdHVhdGlvbnMsIHdlIG5lZWQgdG8gY2F0Y2ggZXJyb3JzIGJlY2F1c2Ugd2UgY2FuJ3QgaGFuZGxlIHRoaXMgcmVxdWVzdCBjb3JyZWN0bHlcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBjZHBDbGllbnQgaGFzIGFscmVhZHkgY2xvc2VkLlxuICAgICAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZVNlcnZpY2VSZXF1ZXN0TG9nZ2VyKCdGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0IGluIGNoaWxkIHdpbmRvdzogJXMnLCBldmVudC5yZXF1ZXN0LnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxufSBhcyBSZXF1ZXN0SGFuZGxlcjtcblxuY29uc3QgZGVmYXVsdEZhdmljb25SZXF1ZXN0ID0ge1xuICAgIGNvbmRpdGlvbjogKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFVybC5wYXRobmFtZSA9PT0gREVGQVVMVF9GQVZJQ09OX1BBVEg7XG4gICAgfSxcbiAgICBoYW5kbGVyOiBhc3luYyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgY2xpZW50OiBQcm90b2NvbEFwaSwgaXNNYWluV2luZG93OiBib29sZWFuLCBvcHRpb25zOiBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcignJXInLCBldmVudCk7XG5cbiAgICAgICAgaWYgKGlzUmVxdWVzdChldmVudCkpXG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXF1ZXN0KGNsaWVudCwgZXZlbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSA9PT0gU3RhdHVzQ29kZXMuTk9UX0ZPVU5EKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG4gICAgICAgICAgICAgICAgY29uc3QgeyBmYXZJY29uIH0gPSBsb2FkQXNzZXRzKG9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHNhZmVGdWxmaWxsUmVxdWVzdChjbGllbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdElkOiAgICAgICBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgU3RhdHVzQ29kZXMuT0ssXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogWyBGQVZJQ09OX0NPTlRFTlRfVFlQRV9IRUFERVIgXSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogICAgICAgICAgICB0b0Jhc2U2NFN0cmluZyhmYXZJY29uKSxcbiAgICAgICAgICAgICAgICB9LCBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlc3BvbnNlKGNsaWVudCwgZXZlbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIH1cbiAgICB9LFxufSBhcyBSZXF1ZXN0SGFuZGxlcjtcblxuY29uc3QgU1BFQ0lBTF9SRVFVRVNUX0hBTkRMRVJTID0gW1xuICAgIGludGVybmFsUmVxdWVzdCxcbiAgICBzZXJ2aWNlUmVxdWVzdCxcbiAgICBkZWZhdWx0RmF2aWNvblJlcXVlc3QsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIG9wdGlvbnM/OiBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMsIHNlcnZpY2VSb3V0ZXM/OiBTcGVjaWFsU2VydmljZVJvdXRlcyk6IFJlcXVlc3RIYW5kbGVyWydoYW5kbGVyJ10gfCBudWxsIHtcbiAgICBjb25zdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIgPSBTUEVDSUFMX1JFUVVFU1RfSEFORExFUlMuZmluZChoID0+IGguY29uZGl0aW9uKGV2ZW50LCBvcHRpb25zLCBzZXJ2aWNlUm91dGVzKSk7XG5cbiAgICByZXR1cm4gc3BlY2lhbFJlcXVlc3RIYW5kbGVyID8gc3BlY2lhbFJlcXVlc3RIYW5kbGVyLmhhbmRsZXIgOiBudWxsO1xufVxuXG4iXX0=
|
|
@@ -5,8 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const connection_1 = __importDefault(require("../../browser/connection"));
|
|
7
7
|
class TestRunBridge {
|
|
8
|
-
constructor(browserId) {
|
|
8
|
+
constructor(browserId, windowId) {
|
|
9
9
|
this._browserId = browserId;
|
|
10
|
+
this._windowId = windowId;
|
|
10
11
|
}
|
|
11
12
|
getBrowserConnection() {
|
|
12
13
|
return connection_1.default.getById(this._browserId);
|
|
@@ -40,7 +41,7 @@ class TestRunBridge {
|
|
|
40
41
|
async getTaskScript({ isIframe }) {
|
|
41
42
|
const browserConnection = this.getBrowserConnection();
|
|
42
43
|
const proxy = browserConnection.browserConnectionGateway.proxy;
|
|
43
|
-
const windowId =
|
|
44
|
+
const windowId = this._windowId;
|
|
44
45
|
// @ts-ignore
|
|
45
46
|
return await this.getCurrentTestRun().session.getTaskScript({
|
|
46
47
|
referer: '',
|
|
@@ -54,4 +55,4 @@ class TestRunBridge {
|
|
|
54
55
|
}
|
|
55
56
|
exports.default = TestRunBridge;
|
|
56
57
|
module.exports = exports.default;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tYnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL3JlcXVlc3QtcGlwZWxpbmUvdGVzdC1ydW4tYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsMEVBQXlEO0FBSXpELE1BQXFCLGFBQWE7SUFHOUIsWUFBb0IsU0FBaUIsRUFBRSxRQUFnQjtRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRU0sb0JBQW9CO1FBQ3ZCLE9BQU8sb0JBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQXNCLENBQUM7SUFDM0UsQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRXRELE9BQU8saUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRU0sWUFBWTs7UUFDZixPQUFPLENBQUEsTUFBQSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsMENBQUUsRUFBRSxLQUFJLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRU0sY0FBYztRQUNqQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVoRCxJQUFJLENBQUMsY0FBYztZQUNmLE9BQU8sRUFBRSxDQUFDO1FBRWQsT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUNqRCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3ZCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRWhELElBQUksQ0FBQyxjQUFjO1lBQ2YsT0FBTyxFQUFFLENBQUM7UUFFZCxPQUFPLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO0lBQzdDLENBQUM7SUFFTSxtQkFBbUI7UUFDdEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFaEQsSUFBSSxDQUFDLGNBQWM7WUFDZixPQUFPLEVBQUUsQ0FBQztRQUVkLE9BQU8sY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDNUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUUsRUFBRSxRQUFRLEVBQThCO1FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQWUsaUJBQWlCLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDO1FBQzNFLE1BQU0sUUFBUSxHQUFZLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFekMsYUFBYTtRQUNiLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3hELE9BQU8sRUFBTSxFQUFFO1lBQ2YsU0FBUyxFQUFJLEVBQUU7WUFDZixXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUcsS0FBSyxDQUFDLFdBQVc7WUFDOUIsUUFBUTtZQUNSLFFBQVE7U0FDWCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUFoRUQsZ0NBZ0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlc3RSdW4gZnJvbSAnLi4vLi4vdGVzdC1ydW4nO1xuaW1wb3J0IEJyb3dzZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL2Jyb3dzZXIvY29ubmVjdGlvbic7XG5pbXBvcnQgeyBVc2VyU2NyaXB0IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFJ1bkJyaWRnZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfYnJvd3NlcklkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfd2luZG93SWQ6IHN0cmluZztcbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGJyb3dzZXJJZDogc3RyaW5nLCB3aW5kb3dJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Jyb3dzZXJJZCA9IGJyb3dzZXJJZDtcbiAgICAgICAgdGhpcy5fd2luZG93SWQgPSB3aW5kb3dJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnJvd3NlckNvbm5lY3Rpb24gKCk6IEJyb3dzZXJDb25uZWN0aW9uIHtcbiAgICAgICAgcmV0dXJuIEJyb3dzZXJDb25uZWN0aW9uLmdldEJ5SWQodGhpcy5fYnJvd3NlcklkKSBhcyBCcm93c2VyQ29ubmVjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFRlc3RSdW4gKCk6IFRlc3RSdW4ge1xuICAgICAgICBjb25zdCBicm93c2VyQ29ubmVjdGlvbiA9IHRoaXMuZ2V0QnJvd3NlckNvbm5lY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gYnJvd3NlckNvbm5lY3Rpb24uZ2V0Q3VycmVudFRlc3RSdW4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2Vzc2lvbklkICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50VGVzdFJ1bigpPy5pZCB8fCAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VXNlclNjcmlwdHMgKCk6IFVzZXJTY3JpcHRbXSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUZXN0UnVuID0gdGhpcy5nZXRDdXJyZW50VGVzdFJ1bigpO1xuXG4gICAgICAgIGlmICghY3VycmVudFRlc3RSdW4pXG4gICAgICAgICAgICByZXR1cm4gW107XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXN0UnVuLmluamVjdGFibGUudXNlclNjcmlwdHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluamVjdGFibGVTY3JpcHRzICgpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUZXN0UnVuID0gdGhpcy5nZXRDdXJyZW50VGVzdFJ1bigpO1xuXG4gICAgICAgIGlmICghY3VycmVudFRlc3RSdW4pXG4gICAgICAgICAgICByZXR1cm4gW107XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXN0UnVuLmluamVjdGFibGUuc2NyaXB0cztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5qZWN0YWJsZVN0eWxlcyAoKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBjdXJyZW50VGVzdFJ1biA9IHRoaXMuZ2V0Q3VycmVudFRlc3RSdW4oKTtcblxuICAgICAgICBpZiAoIWN1cnJlbnRUZXN0UnVuKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50VGVzdFJ1bi5pbmplY3RhYmxlLnN0eWxlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza1NjcmlwdCAoeyBpc0lmcmFtZSB9OiBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uID0gdGhpcy5nZXRCcm93c2VyQ29ubmVjdGlvbigpO1xuICAgICAgICBjb25zdCBwcm94eSAgICAgICAgICAgICA9IGJyb3dzZXJDb25uZWN0aW9uLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eTtcbiAgICAgICAgY29uc3Qgd2luZG93SWQgICAgICAgICAgPSB0aGlzLl93aW5kb3dJZDtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEN1cnJlbnRUZXN0UnVuKCkuc2Vzc2lvbi5nZXRUYXNrU2NyaXB0KHtcbiAgICAgICAgICAgIHJlZmVyZXI6ICAgICAnJyxcbiAgICAgICAgICAgIGNvb2tpZVVybDogICAnJyxcbiAgICAgICAgICAgIHdpdGhQYXlsb2FkOiB0cnVlLFxuICAgICAgICAgICAgc2VydmVySW5mbzogIHByb3h5LnNlcnZlcjFJbmZvLFxuICAgICAgICAgICAgd2luZG93SWQsXG4gICAgICAgICAgICBpc0lmcmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -9,4 +9,4 @@ var EventType;
|
|
|
9
9
|
EventType[EventType["Delay"] = 3] = "Delay";
|
|
10
10
|
EventType[EventType["InsertText"] = 4] = "InsertText";
|
|
11
11
|
})(EventType = exports.EventType || (exports.EventType = {}));
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBa0NBLElBQVksU0FNWDtBQU5ELFdBQVksU0FBUztJQUNqQiwyQ0FBSyxDQUFBO0lBQ0wsaURBQVEsQ0FBQTtJQUNSLDJDQUFLLENBQUE7SUFDTCwyQ0FBSyxDQUFBO0lBQ0wscURBQVUsQ0FBQTtBQUNkLENBQUMsRUFOVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQU1wQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgUmVxdWVzdFBhdXNlZEV2ZW50ID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50O1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgeyBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMgfSBmcm9tICcuLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHsgU3RvcmFnZXNTbmFwc2hvdCB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlY2lhbFNlcnZpY2VSb3V0ZXMge1xuICAgIGVycm9yUGFnZTE6IHN0cmluZztcbiAgICBlcnJvclBhZ2UyOiBzdHJpbmc7XG4gICAgb3BlbkZpbGVQcm90b2NvbFVybDogc3RyaW5nO1xuICAgIGlkbGVQYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRSZXNvdXJjZUluZm8ge1xuICAgIGVycm9yOiBhbnk7XG4gICAgYm9keTogQnVmZmVyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SGFuZGxlciB7XG4gICAgY29uZGl0aW9uOiAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgb3B0aW9ucz86IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucywgc2VydmljZVJvdXRlcz86IFNwZWNpYWxTZXJ2aWNlUm91dGVzKSA9PiBib29sZWFuO1xuICAgIGhhbmRsZXI6IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjbGllbnQ6IFByb3RvY29sQXBpLCBpc01haW5XaW5kb3c6IGJvb2xlYW4sIG9wdGlvbnM/OiBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMsIHNlc3Npb25JZD86IFNlc3Npb25JZCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmplY3RhYmxlUmVzb3VyY2VzT3B0aW9ucyB7XG4gICAgaXNJZnJhbWU6IGJvb2xlYW47XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIHJlc3RvcmluZ1N0b3JhZ2VzPzogU3RvcmFnZXNTbmFwc2hvdCB8IG51bGw7XG4gICAgY29udGV4dFN0b3JhZ2U/OiBTZXNzaW9uU3RvcmFnZUluZm87XG4gICAgdXNlclNjcmlwdHM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IHR5cGUgU2Vzc2lvblN0b3JhZ2VJbmZvID0gRGljdGlvbmFyeTxEaWN0aW9uYXJ5PHN0cmluZz4+IHwgbnVsbDtcblxuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBNb3VzZSxcbiAgICBLZXlib2FyZCxcbiAgICBUb3VjaCxcbiAgICBEZWxheSxcbiAgICBJbnNlcnRUZXh0LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRpbnVlUmVxdWVzdEFyZ3Mge1xuICAgIHBvc3REYXRhPzogc3RyaW5nO1xuICAgIG1ldGhvZD86IHN0cmluZztcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgaGVhZGVycz86IFByb3RvY29sLkZldGNoLkhlYWRlckVudHJ5W107XG59XG5cbmV4cG9ydCB0eXBlIFNlc3Npb25JZCA9IHN0cmluZyB8IHVuZGVmaW5lZDtcbiJdfQ==
|
|
@@ -6,6 +6,7 @@ exports.default = {
|
|
|
6
6
|
screenshotMarkNotFound: 'Unable to locate the page area in the browser window screenshot at {screenshotPath}, because the page area mark with ID {markId} is not found in the screenshot.',
|
|
7
7
|
screenshotsFullPageNotSupported: 'TestCafe does not support full-page screenshots in {browserAlias}.',
|
|
8
8
|
screenshotRewritingError: 'The file at "{screenshotPath}" already exists. It has just been rewritten with a recent screenshot. This situation can possibly cause issues. To avoid them, make sure that each screenshot has a unique path. If a test runs in multiple browsers, consider including the user agent in the screenshot path or generate a unique identifier in another way.',
|
|
9
|
+
screenshotPathOverridesPathPattern: 'The t.takeScreenshot method includes two conflicting parameters: "path" ({customPath}) and "pathPattern" ({customPathPattern}). TestCafe applied the "path" parameter, and ignored the "pathPattern" parameter. Remove one of the parameters to dismiss this warning.',
|
|
9
10
|
browserManipulationsOnRemoteBrowser: 'The screenshot and window resize functionalities are not supported in a remote browser. They can function only if the browser is running on the same machine and in the same environment as the TestCafe server.',
|
|
10
11
|
screenshotNotSupportedByBrowserProvider: 'The screenshot functionality is not supported by the "{providerName}" browser provider.',
|
|
11
12
|
videoNotSupportedByBrowser: 'Video recording is not supported by the "{browserAlias}" browser.',
|
|
@@ -48,4 +49,4 @@ exports.default = {
|
|
|
48
49
|
elementOverlapped: 'TestCafe cannot interact with the {expected} element because another element obstructs it.\nWhen something overlaps the action target, TestCafe performs the action with the topmost element at the original target\'s location.\nThe following element with a greater z-order replaced the original action target: {actual}.\nReview your code to prevent this behavior.',
|
|
49
50
|
};
|
|
50
51
|
module.exports = exports.default;
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZy1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWU7SUFDWCxtQkFBbUIsRUFBc0IseUxBQXlMO0lBQ2xPLGVBQWUsRUFBMEIsa0VBQWtFO0lBQzNHLHNCQUFzQixFQUFtQixrS0FBa0s7SUFDM00sK0JBQStCLEVBQVUsb0VBQW9FO0lBQzdHLHdCQUF3QixFQUFpQiw4VkFBOFY7SUFDdlksbUNBQW1DLEVBQU0sa05BQWtOO0lBQzNQLHVDQUF1QyxFQUFFLHlGQUF5RjtJQUNsSSwwQkFBMEIsRUFBZSxtRUFBbUU7SUFDNUcsb0JBQW9CLEVBQXFCLDhRQUE4UTtJQUN2VCxtQ0FBbUMsRUFBTSw0RkFBNEY7SUFDckkscUNBQXFDLEVBQUksa0dBQWtHO0lBQzNJLFdBQVcsRUFBOEIsa0VBQWtFO0lBQzNHLGFBQWEsRUFBNEIsb0VBQW9FO0lBQzdHLCtCQUErQixFQUFVLHNGQUFzRjtJQUMvSCxvQkFBb0IsRUFBcUIsb0NBQW9DO0lBQzdFLDJCQUEyQixFQUFjLGlGQUFpRjtJQUMxSCxxQ0FBcUMsRUFBSSxnR0FBZ0c7SUFFekksK0JBQStCLEVBQUUsOENBQThDO1FBQzlDLGtFQUFrRTtRQUNsRSw0REFBNEQ7UUFDNUQsNENBQTRDO0lBRTdFLHFCQUFxQixFQUFFLDRGQUE0RjtRQUM1RixJQUFJO1FBQ0osT0FBTztJQUU5QiwyQkFBMkIsRUFBRSxrRUFBa0U7UUFDbEUsSUFBSTtRQUNKLE9BQU87SUFFcEMsa0RBQWtELEVBQUUsMkdBQTJHO1FBQzNHLGdJQUFnSTtRQUNoSSxJQUFJO1FBQ0osK0RBQStEO0lBRW5ILDZCQUE2QixFQUFPLGlEQUFpRDtJQUNyRixrQ0FBa0MsRUFBRSxzRkFBc0Y7SUFDMUgsd0JBQXdCLEVBQVksa0pBQWtKO0lBQ3RMLDhCQUE4QixFQUFNLDJKQUEySjtJQUMvTCwrQkFBK0IsRUFBSyxtSUFBbUk7SUFDdksseUJBQXlCLEVBQVcsMFJBQTBSO0lBQzlULDhCQUE4QixFQUFNLGdNQUFnTTtJQUNwTyw0QkFBNEIsRUFBUSwrTkFBK047SUFDblEsZ0NBQWdDLEVBQUksa0hBQWtIO0lBQ3RKLDRCQUE0QixFQUFRLGdHQUFnRztJQUNwSSxhQUFhLEVBQXVCLCtGQUErRjtJQUNuSSw0QkFBNEIsRUFBUSx3SkFBd0o7SUFDNUwsK0JBQStCLEVBQUsscVVBQXFVO0lBQ3pXLGlCQUFpQixFQUFtQiwyV0FBMlc7Q0FDbFosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgICBzY3JlZW5zaG90c0Rpc2FibGVkOiAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zaG90cyBhcmUgZGlzYWJsZWQuIFRvIHRha2Ugc2NyZWVuc2hvdHMsIHJlbW92ZSB0aGUgXCItLWRpc2FibGUtc2NyZWVuc2hvdHNcIiBjb21tYW5kIGxpbmUgZmxhZyBvciBzZXQgdGhlIFwiZGlzYWJsZVNjcmVlbnNob3RzXCIgb3B0aW9uIHRvIFwiZmFsc2VcIiBpbiB0aGUgQVBJIG9yIGNvbmZpZ3VyYXRpb24gZmlsZS4nLFxuICAgIHNjcmVlbnNob3RFcnJvcjogICAgICAgICAgICAgICAgICAgICAgICAgJ1dhcyB1bmFibGUgdG8gdGFrZSBhIHNjcmVlbnNob3QgZHVlIHRvIGFuIGVycm9yLlxcblxcbntlcnJNZXNzYWdlfScsXG4gICAgc2NyZWVuc2hvdE1hcmtOb3RGb3VuZDogICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIGxvY2F0ZSB0aGUgcGFnZSBhcmVhIGluIHRoZSBicm93c2VyIHdpbmRvdyBzY3JlZW5zaG90IGF0IHtzY3JlZW5zaG90UGF0aH0sIGJlY2F1c2UgdGhlIHBhZ2UgYXJlYSBtYXJrIHdpdGggSUQge21hcmtJZH0gaXMgbm90IGZvdW5kIGluIHRoZSBzY3JlZW5zaG90LicsXG4gICAgc2NyZWVuc2hvdHNGdWxsUGFnZU5vdFN1cHBvcnRlZDogICAgICAgICAnVGVzdENhZmUgZG9lcyBub3Qgc3VwcG9ydCBmdWxsLXBhZ2Ugc2NyZWVuc2hvdHMgaW4ge2Jyb3dzZXJBbGlhc30uJyxcbiAgICBzY3JlZW5zaG90UmV3cml0aW5nRXJyb3I6ICAgICAgICAgICAgICAgICdUaGUgZmlsZSBhdCBcIntzY3JlZW5zaG90UGF0aH1cIiBhbHJlYWR5IGV4aXN0cy4gSXQgaGFzIGp1c3QgYmVlbiByZXdyaXR0ZW4gd2l0aCBhIHJlY2VudCBzY3JlZW5zaG90LiBUaGlzIHNpdHVhdGlvbiBjYW4gcG9zc2libHkgY2F1c2UgaXNzdWVzLiBUbyBhdm9pZCB0aGVtLCBtYWtlIHN1cmUgdGhhdCBlYWNoIHNjcmVlbnNob3QgaGFzIGEgdW5pcXVlIHBhdGguIElmIGEgdGVzdCBydW5zIGluIG11bHRpcGxlIGJyb3dzZXJzLCBjb25zaWRlciBpbmNsdWRpbmcgdGhlIHVzZXIgYWdlbnQgaW4gdGhlIHNjcmVlbnNob3QgcGF0aCBvciBnZW5lcmF0ZSBhIHVuaXF1ZSBpZGVudGlmaWVyIGluIGFub3RoZXIgd2F5LicsXG4gICAgYnJvd3Nlck1hbmlwdWxhdGlvbnNPblJlbW90ZUJyb3dzZXI6ICAgICAnVGhlIHNjcmVlbnNob3QgYW5kIHdpbmRvdyByZXNpemUgZnVuY3Rpb25hbGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGEgcmVtb3RlIGJyb3dzZXIuIFRoZXkgY2FuIGZ1bmN0aW9uIG9ubHkgaWYgdGhlIGJyb3dzZXIgaXMgcnVubmluZyBvbiB0aGUgc2FtZSBtYWNoaW5lIGFuZCBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudCBhcyB0aGUgVGVzdENhZmUgc2VydmVyLicsXG4gICAgc2NyZWVuc2hvdE5vdFN1cHBvcnRlZEJ5QnJvd3NlclByb3ZpZGVyOiAnVGhlIHNjcmVlbnNob3QgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcIntwcm92aWRlck5hbWV9XCIgYnJvd3NlciBwcm92aWRlci4nLFxuICAgIHZpZGVvTm90U3VwcG9ydGVkQnlCcm93c2VyOiAgICAgICAgICAgICAgJ1ZpZGVvIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcInticm93c2VyQWxpYXN9XCIgYnJvd3Nlci4nLFxuICAgIHZpZGVvQnJvd3NlclJlc2l6aW5nOiAgICAgICAgICAgICAgICAgICAgJ1RoZSBicm93c2VyIHdpbmRvdyB3YXMgcmVzaXplZCBkdXJpbmcgdGhlIFwie3Rlc3ROYW1lfVwiIHRlc3Qgd2hpbGUgVGVzdENhZmUgcmVjb3JkZWQgYSB2aWRlby4gVGVzdENhZmUgY2Fubm90IGFkanVzdCB0aGUgdmlkZW8gcmVzb2x1dGlvbiBkdXJpbmcgcmVjb3JkaW5nLiBBcyBhIHJlc3VsdCwgdGhlIHZpZGVvIGNvbnRlbnQgbWF5IGFwcGVhciBicm9rZW4uIERvIG5vdCByZXNpemUgdGhlIGJyb3dzZXIgd2luZG93IHdoZW4gVGVzdENhZmUgcmVjb3JkcyBhIHZpZGVvLicsXG4gICAgcmVzaXplTm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXI6ICAgICAnVGhlIHdpbmRvdyByZXNpemUgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcIntwcm92aWRlck5hbWV9XCIgYnJvd3NlciBwcm92aWRlci4nLFxuICAgIG1heGltaXplTm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXI6ICAgJ1RoZSB3aW5kb3cgbWF4aW1pemF0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgXCJ7cHJvdmlkZXJOYW1lfVwiIGJyb3dzZXIgcHJvdmlkZXIuJyxcbiAgICByZXNpemVFcnJvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXYXMgdW5hYmxlIHRvIHJlc2l6ZSB0aGUgd2luZG93IGR1ZSB0byBhbiBlcnJvci5cXG5cXG57ZXJyTWVzc2FnZX0nLFxuICAgIG1heGltaXplRXJyb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dhcyB1bmFibGUgdG8gbWF4aW1pemUgdGhlIHdpbmRvdyBkdWUgdG8gYW4gZXJyb3IuXFxuXFxue2Vyck1lc3NhZ2V9JyxcbiAgICByZXF1ZXN0TW9ja0NPUlNWYWxpZGF0aW9uRmFpbGVkOiAgICAgICAgICd7UmVxdWVzdEhvb2t9OiBDT1JTIHZhbGlkYXRpb24gZmFpbGVkIGZvciBhIHJlcXVlc3Qgc3BlY2lmaWVkIGFzIHtyZXF1ZXN0RmlsdGVyUnVsZX0nLFxuICAgIGRlYnVnSW5IZWFkbGVzc0Vycm9yOiAgICAgICAgICAgICAgICAgICAgJ1lvdSBjYW5ub3QgZGVidWcgaW4gaGVhZGxlc3MgbW9kZS4nLFxuICAgIGNvbmZpZ09wdGlvbnNXZXJlT3ZlcnJpZGRlbjogICAgICAgICAgICAgJ1RoZSB7b3B0aW9uc1N0cmluZ30gb3B0aW9ue3N1ZmZpeH0gZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgYmUgaWdub3JlZC4nLFxuICAgIGNhbm5vdE92ZXJyaWRlVHlwZVNjcmlwdENvbmZpZ09wdGlvbnM6ICAgJ1lvdSBjYW5ub3Qgb3ZlcnJpZGUgdGhlIFwie29wdGlvbk5hbWV9XCIgY29tcGlsZXIgb3B0aW9uIGluIHRoZSBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZS5cXG4nLFxuXG4gICAgY2Fubm90RmluZFdpbmRvd0Rlc2NyaXB0b3JFcnJvcjogJ0NvdWxkIG5vdCBmaW5kIHRoZSBcInticm93c2VyQWxpYXN9XCIgd2luZG93LiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdENhZmUgaXMgdW5hYmxlIHRvIHJlc2l6ZSB0aGUgd2luZG93IG9yIHRha2Ugc2NyZWVuc2hvdHMuXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJyZWQgd2hpbGUgVGVzdENhZmUgd2FzIHNlYXJjaGluZyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIHRoZSB3aW5kb3cgZGVzY3JpcHRvcjpcXG5cXG57ZXJyTWVzc2FnZX0nLFxuXG4gICAgY2Fubm90RmluZFNTTENlcnRGaWxlOiAnVW5hYmxlIHRvIGZpbmQgdGhlIFwie3BhdGh9XCIgZmlsZSwgc3BlY2lmaWVkIGJ5IHRoZSBcIntvcHRpb259XCIgc3NsIG9wdGlvbi4gRXJyb3IgZGV0YWlsczpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBjYW5ub3RGaW5kQ29uZmlndXJhdGlvbkZpbGU6ICdVbmFibGUgdG8gZmluZCB0aGUgXCJ7cGF0aH1cIiBjb25maWd1cmF0aW9uIGZpbGUuIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vycn0nLFxuXG4gICAgcHJvYmxlbWF0aWNQYXRoUGF0dGVyblBsYWNlaG9sZGVyRm9yVmlkZW9SZWNvcmRpbmc6ICdUZXN0Q2FmZSBjb3VsZCBub3QgYXBwbHkgdGhlIGZvbGxvd2luZyB2aWRlbyByZWNvcmRpbmcgc2F2ZSBwYXRoIHBhdHRlcm57c3VmZml4fToge3BsYWNlSG9sZGVyUGF0dGVybn0uXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZb3UgbWF5IGVuY291bnRlciB0aGlzIGJlaGF2aW9yIHdoZW4geW91IGVuYWJsZSB0aGUgXCJzaW5nbGVGaWxlXCIgdmlkZW8gcmVjb3JkaW5nIG9wdGlvbiBhbmQgdXNlIHRlc3Qtc3BlY2lmaWMgcGF0aCBwYXR0ZXJucy5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHBsYWNlaG9sZGVye3N1ZmZpeH0ge3ZlcmJ9IHJlcGxhY2VkIHdpdGggYW4gZW1wdHkgc3RyaW5nLicsXG5cbiAgICBjbGllbnRTY3JpcHRzV2l0aEVtcHR5Q29udGVudDogICAgICAnVGhlIGNsaWVudCBzY3JpcHQgeW91IHRyaWVkIHRvIGluamVjdCBpcyBlbXB0eS4nLFxuICAgIGNsaWVudFNjcmlwdHNXaXRoRHVwbGljYXRlZENvbnRlbnQ6ICdZb3UgaW5qZWN0ZWQgdGhlIGZvbGxvd2luZyBjbGllbnQgc2NyaXB0e3N1ZmZpeH0gc2V2ZXJhbCB0aW1lczpcXG57ZHVwbGljYXRlZFNjcmlwdHN9JyxcbiAgICBhc3NlcnRlZFNlbGVjdG9ySW5zdGFuY2U6ICAgICAgICAgICAnWW91IHBhc3NlZCBhIFNlbGVjdG9yIG9iamVjdCB0byBcXCd0LmV4cGVjdCgpXFwnLlxcbklmIHlvdSB3YW50IHRvIGNoZWNrIHRoYXQgYSBtYXRjaGVkIGVsZW1lbnQgZXhpc3RzLCBwYXNzIHRoZSBcXCdzZWxlY3Rvci5leGlzdHNcXCcgdmFsdWUgaW5zdGVhZC4nLFxuICAgIGFzc2VydGVkQ2xpZW50RnVuY3Rpb25JbnN0YW5jZTogICAgICdZb3UgcGFzc2VkIGEgQ2xpZW50RnVuY3Rpb24gb2JqZWN0IHRvIFxcJ3QuZXhwZWN0KClcXCcuXFxuSWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uXFwncyByZXR1cm4gdmFsdWUsIHVzZSBwYXJlbnRoZXNlcyB0byBjYWxsIHRoZSBmdW5jdGlvbjogZm5OYW1lKCkuJyxcbiAgICBtdWx0aXBsZVdpbmRvd3NGb3VuZEJ5UHJlZGljYXRlOiAgICAnVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBwYXNzZWQgdG8gdGhlIFxcJ3N3aXRjaFRvV2luZG93XFwnIG1ldGhvZCBtYXRjaGVkIG11bHRpcGxlIHdpbmRvd3MuIFRoZSBmaXJzdCBtYXRjaGluZyB3aW5kb3cgd2FzIGFjdGl2YXRlZC4nLFxuICAgIGV4Y2Vzc2l2ZUF3YWl0SW5Bc3NlcnRpb246ICAgICAgICAgICdZb3UgcGFzc2VkIGEgRE9NIHNuYXBzaG90IHByb3BlcnR5IHRvIHRoZSBhc3NlcnRpb25cXCdzIFxcJ3QuZXhwZWN0KClcXCcgbWV0aG9kLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQgYW5kIHRoaXMgdmFsdWUgaXMgbm8gbG9uZ2VyIHVwZGF0ZWQuIFRvIGVuc3VyZSB0aGF0IHRoZSBhc3NlcnRpb24gdmVyaWZpZXMgYW4gdXAtdG8tZGF0ZSB2YWx1ZSwgcGFzcyB0aGUgc2VsZWN0b3IgcHJvcGVydHkgd2l0aG91dCBcXCdhd2FpdFxcJy4nLFxuICAgIG1pc3NpbmdBd2FpdE9uU25hcHNob3RQcm9wZXJ0eTogICAgICdZb3UgdXNlZCBhIERPTSBzbmFwc2hvdCBwcm9wZXJ0eSB3aXRob3V0IFxcJ2F3YWl0XFwnLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQuIElmIHlvdSBuZWVkIHRvIHVzZSB0aGUgcHJvcGVydHkgdmFsdWUsIHVzZSBcXCdhd2FpdFxcJyB0byByZXNvbHZlIHRoZSBQcm9taXNlLicsXG4gICAgcmV0cnlUZXN0UGFnZXNJc05vdFN1cHBvcnRlZDogICAgICAgJ0Nhbm5vdCBlbmFibGUgdGhlIFxcJ3JldHJ5VGVzdFBhZ2VzXFwnIG9wdGlvbiBpbiBcInticm93c2VyQWxpYXN9XCIuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIHZlcnNpb24gb2YgXCJ7YnJvd3NlckFsaWFzfVwiIHN1cHBvcnRzIHRoZSBTZXJ2aWNlIFdvcmtlciBBUEkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2aWNlX1dvcmtlcl9BUEkpLlxcbicsXG4gICAgYnJvd3NlclByb3ZpZGVyRHJvcE9mUGVyZm9ybWFuY2U6ICAgJ1dlIGRldGVjdGVkIFxcJ3ticm93c2VyTmFtZX1cXCcgcnVucyBzbG93bHkuIFRyeSB0byBmcmVlIHVwIG9yIGFsbG9jYXRlIG1vcmUgc3lzdGVtIHJlc291cmNlcyBvbiBpdHMgaG9zdCBtYWNoaW5lLicsXG4gICAgdGVzdHNDb21waWxhdGlvblRha2VzVG9vTG9uZzogICAgICAgJ1Rlc3RzIHRvb2sgdG9vIGxvbmcgdG8gY29tcGlsZSAoe2NvbXBpbGVUaW1lfSkuIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGhhcyBubyBleGNlc3NpdmUgaW1wb3J0cy4nLFxuICAgIGRlcHJlY2F0ZWRBUEk6ICAgICAgICAgICAgICAgICAgICAgICd7QVBJfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gVXNlIHtyZXBsYWNlbWVudH0gaW5zdGVhZC4nLFxuICAgIHVuYXdhaXRlZE1ldGhvZFdpdGhBc3NlcnRpb246ICAgICAgIFwiQW4gYXN5bmNocm9ub3VzIG1ldGhvZCB0aGF0IHlvdSBkbyBub3QgYXdhaXQgaW5jbHVkZXMgYW4gYXNzZXJ0aW9uLiBJbnNwZWN0IHRoYXQgbWV0aG9kJ3MgZXhlY3V0aW9uIGNoYWluIGFuZCBhZGQgdGhlICdhd2FpdCcga2V5d29yZCB3aGVyZSBuZWNlc3NhcnkuXCIsXG4gICAgbXVsdGlwbGVDb25maWd1cmF0aW9uRmlsZXNGb3VuZDogICAgJ1Rlc3RDYWZlIGRldGVjdGVkIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBmaWxlLlxcblRvIHByZXZlbnQgY29uZmlndXJhdGlvbiBjb25mbGljdHMsIFRlc3RDYWZlIHdpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eToge3BhdGh9LlxcblJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjogaHR0cHM6Ly90ZXN0Y2FmZS5pby9kb2N1bWVudGF0aW9uLzQwMjYzOC9yZWZlcmVuY2UvY29uZmlndXJhdGlvbi1maWxlP3NlYXJjaCNjb25maWd1cmF0aW9uLWZpbGUtcHJpb3JpdHknLFxuICAgIGVsZW1lbnRPdmVybGFwcGVkOiAgICAgICAgICAgICAgICAgICdUZXN0Q2FmZSBjYW5ub3QgaW50ZXJhY3Qgd2l0aCB0aGUge2V4cGVjdGVkfSBlbGVtZW50IGJlY2F1c2UgYW5vdGhlciBlbGVtZW50IG9ic3RydWN0cyBpdC5cXG5XaGVuIHNvbWV0aGluZyBvdmVybGFwcyB0aGUgYWN0aW9uIHRhcmdldCwgVGVzdENhZmUgcGVyZm9ybXMgdGhlIGFjdGlvbiB3aXRoIHRoZSB0b3Btb3N0IGVsZW1lbnQgYXQgdGhlIG9yaWdpbmFsIHRhcmdldFxcJ3MgbG9jYXRpb24uXFxuVGhlIGZvbGxvd2luZyBlbGVtZW50IHdpdGggYSBncmVhdGVyIHotb3JkZXIgcmVwbGFjZWQgdGhlIG9yaWdpbmFsIGFjdGlvbiB0YXJnZXQ6IHthY3R1YWx9LlxcblJldmlldyB5b3VyIGNvZGUgdG8gcHJldmVudCB0aGlzIGJlaGF2aW9yLicsXG59O1xuXG4iXX0=
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybmluZy1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0JBQWU7SUFDWCxtQkFBbUIsRUFBc0IseUxBQXlMO0lBQ2xPLGVBQWUsRUFBMEIsa0VBQWtFO0lBQzNHLHNCQUFzQixFQUFtQixrS0FBa0s7SUFDM00sK0JBQStCLEVBQVUsb0VBQW9FO0lBQzdHLHdCQUF3QixFQUFpQiw4VkFBOFY7SUFDdlksa0NBQWtDLEVBQU8sd1FBQXdRO0lBQ2pULG1DQUFtQyxFQUFNLGtOQUFrTjtJQUMzUCx1Q0FBdUMsRUFBRSx5RkFBeUY7SUFDbEksMEJBQTBCLEVBQWUsbUVBQW1FO0lBQzVHLG9CQUFvQixFQUFxQiw4UUFBOFE7SUFDdlQsbUNBQW1DLEVBQU0sNEZBQTRGO0lBQ3JJLHFDQUFxQyxFQUFJLGtHQUFrRztJQUMzSSxXQUFXLEVBQThCLGtFQUFrRTtJQUMzRyxhQUFhLEVBQTRCLG9FQUFvRTtJQUM3RywrQkFBK0IsRUFBVSxzRkFBc0Y7SUFDL0gsb0JBQW9CLEVBQXFCLG9DQUFvQztJQUM3RSwyQkFBMkIsRUFBYyxpRkFBaUY7SUFDMUgscUNBQXFDLEVBQUksZ0dBQWdHO0lBRXpJLCtCQUErQixFQUFFLDhDQUE4QztRQUM5QyxrRUFBa0U7UUFDbEUsNERBQTREO1FBQzVELDRDQUE0QztJQUU3RSxxQkFBcUIsRUFBRSw0RkFBNEY7UUFDNUYsSUFBSTtRQUNKLE9BQU87SUFFOUIsMkJBQTJCLEVBQUUsa0VBQWtFO1FBQ2xFLElBQUk7UUFDSixPQUFPO0lBRXBDLGtEQUFrRCxFQUFFLDJHQUEyRztRQUMzRyxnSUFBZ0k7UUFDaEksSUFBSTtRQUNKLCtEQUErRDtJQUVuSCw2QkFBNkIsRUFBTyxpREFBaUQ7SUFDckYsa0NBQWtDLEVBQUUsc0ZBQXNGO0lBQzFILHdCQUF3QixFQUFZLGtKQUFrSjtJQUN0TCw4QkFBOEIsRUFBTSwySkFBMko7SUFDL0wsK0JBQStCLEVBQUssbUlBQW1JO0lBQ3ZLLHlCQUF5QixFQUFXLDBSQUEwUjtJQUM5VCw4QkFBOEIsRUFBTSxnTUFBZ007SUFDcE8sNEJBQTRCLEVBQVEsK05BQStOO0lBQ25RLGdDQUFnQyxFQUFJLGtIQUFrSDtJQUN0Siw0QkFBNEIsRUFBUSxnR0FBZ0c7SUFDcEksYUFBYSxFQUF1QiwrRkFBK0Y7SUFDbkksNEJBQTRCLEVBQVEsd0pBQXdKO0lBQzVMLCtCQUErQixFQUFLLHFVQUFxVTtJQUN6VyxpQkFBaUIsRUFBbUIsMldBQTJXO0NBQ2xaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gICAgc2NyZWVuc2hvdHNEaXNhYmxlZDogICAgICAgICAgICAgICAgICAgICAnU2NyZWVuc2hvdHMgYXJlIGRpc2FibGVkLiBUbyB0YWtlIHNjcmVlbnNob3RzLCByZW1vdmUgdGhlIFwiLS1kaXNhYmxlLXNjcmVlbnNob3RzXCIgY29tbWFuZCBsaW5lIGZsYWcgb3Igc2V0IHRoZSBcImRpc2FibGVTY3JlZW5zaG90c1wiIG9wdGlvbiB0byBcImZhbHNlXCIgaW4gdGhlIEFQSSBvciBjb25maWd1cmF0aW9uIGZpbGUuJyxcbiAgICBzY3JlZW5zaG90RXJyb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICdXYXMgdW5hYmxlIHRvIHRha2UgYSBzY3JlZW5zaG90IGR1ZSB0byBhbiBlcnJvci5cXG5cXG57ZXJyTWVzc2FnZX0nLFxuICAgIHNjcmVlbnNob3RNYXJrTm90Rm91bmQ6ICAgICAgICAgICAgICAgICAgJ1VuYWJsZSB0byBsb2NhdGUgdGhlIHBhZ2UgYXJlYSBpbiB0aGUgYnJvd3NlciB3aW5kb3cgc2NyZWVuc2hvdCBhdCB7c2NyZWVuc2hvdFBhdGh9LCBiZWNhdXNlIHRoZSBwYWdlIGFyZWEgbWFyayB3aXRoIElEIHttYXJrSWR9IGlzIG5vdCBmb3VuZCBpbiB0aGUgc2NyZWVuc2hvdC4nLFxuICAgIHNjcmVlbnNob3RzRnVsbFBhZ2VOb3RTdXBwb3J0ZWQ6ICAgICAgICAgJ1Rlc3RDYWZlIGRvZXMgbm90IHN1cHBvcnQgZnVsbC1wYWdlIHNjcmVlbnNob3RzIGluIHticm93c2VyQWxpYXN9LicsXG4gICAgc2NyZWVuc2hvdFJld3JpdGluZ0Vycm9yOiAgICAgICAgICAgICAgICAnVGhlIGZpbGUgYXQgXCJ7c2NyZWVuc2hvdFBhdGh9XCIgYWxyZWFkeSBleGlzdHMuIEl0IGhhcyBqdXN0IGJlZW4gcmV3cml0dGVuIHdpdGggYSByZWNlbnQgc2NyZWVuc2hvdC4gVGhpcyBzaXR1YXRpb24gY2FuIHBvc3NpYmx5IGNhdXNlIGlzc3Vlcy4gVG8gYXZvaWQgdGhlbSwgbWFrZSBzdXJlIHRoYXQgZWFjaCBzY3JlZW5zaG90IGhhcyBhIHVuaXF1ZSBwYXRoLiBJZiBhIHRlc3QgcnVucyBpbiBtdWx0aXBsZSBicm93c2VycywgY29uc2lkZXIgaW5jbHVkaW5nIHRoZSB1c2VyIGFnZW50IGluIHRoZSBzY3JlZW5zaG90IHBhdGggb3IgZ2VuZXJhdGUgYSB1bmlxdWUgaWRlbnRpZmllciBpbiBhbm90aGVyIHdheS4nLFxuICAgIHNjcmVlbnNob3RQYXRoT3ZlcnJpZGVzUGF0aFBhdHRlcm46ICAgICAgJ1RoZSB0LnRha2VTY3JlZW5zaG90IG1ldGhvZCBpbmNsdWRlcyB0d28gY29uZmxpY3RpbmcgcGFyYW1ldGVyczogXCJwYXRoXCIgKHtjdXN0b21QYXRofSkgIGFuZCBcInBhdGhQYXR0ZXJuXCIgKHtjdXN0b21QYXRoUGF0dGVybn0pLiBUZXN0Q2FmZSBhcHBsaWVkIHRoZSBcInBhdGhcIiBwYXJhbWV0ZXIsIGFuZCBpZ25vcmVkIHRoZSBcInBhdGhQYXR0ZXJuXCIgcGFyYW1ldGVyLiBSZW1vdmUgb25lIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIGRpc21pc3MgdGhpcyB3YXJuaW5nLicsXG4gICAgYnJvd3Nlck1hbmlwdWxhdGlvbnNPblJlbW90ZUJyb3dzZXI6ICAgICAnVGhlIHNjcmVlbnNob3QgYW5kIHdpbmRvdyByZXNpemUgZnVuY3Rpb25hbGl0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGEgcmVtb3RlIGJyb3dzZXIuIFRoZXkgY2FuIGZ1bmN0aW9uIG9ubHkgaWYgdGhlIGJyb3dzZXIgaXMgcnVubmluZyBvbiB0aGUgc2FtZSBtYWNoaW5lIGFuZCBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudCBhcyB0aGUgVGVzdENhZmUgc2VydmVyLicsXG4gICAgc2NyZWVuc2hvdE5vdFN1cHBvcnRlZEJ5QnJvd3NlclByb3ZpZGVyOiAnVGhlIHNjcmVlbnNob3QgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcIntwcm92aWRlck5hbWV9XCIgYnJvd3NlciBwcm92aWRlci4nLFxuICAgIHZpZGVvTm90U3VwcG9ydGVkQnlCcm93c2VyOiAgICAgICAgICAgICAgJ1ZpZGVvIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcInticm93c2VyQWxpYXN9XCIgYnJvd3Nlci4nLFxuICAgIHZpZGVvQnJvd3NlclJlc2l6aW5nOiAgICAgICAgICAgICAgICAgICAgJ1RoZSBicm93c2VyIHdpbmRvdyB3YXMgcmVzaXplZCBkdXJpbmcgdGhlIFwie3Rlc3ROYW1lfVwiIHRlc3Qgd2hpbGUgVGVzdENhZmUgcmVjb3JkZWQgYSB2aWRlby4gVGVzdENhZmUgY2Fubm90IGFkanVzdCB0aGUgdmlkZW8gcmVzb2x1dGlvbiBkdXJpbmcgcmVjb3JkaW5nLiBBcyBhIHJlc3VsdCwgdGhlIHZpZGVvIGNvbnRlbnQgbWF5IGFwcGVhciBicm9rZW4uIERvIG5vdCByZXNpemUgdGhlIGJyb3dzZXIgd2luZG93IHdoZW4gVGVzdENhZmUgcmVjb3JkcyBhIHZpZGVvLicsXG4gICAgcmVzaXplTm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXI6ICAgICAnVGhlIHdpbmRvdyByZXNpemUgZnVuY3Rpb25hbGl0eSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBcIntwcm92aWRlck5hbWV9XCIgYnJvd3NlciBwcm92aWRlci4nLFxuICAgIG1heGltaXplTm90U3VwcG9ydGVkQnlCcm93c2VyUHJvdmlkZXI6ICAgJ1RoZSB3aW5kb3cgbWF4aW1pemF0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgXCJ7cHJvdmlkZXJOYW1lfVwiIGJyb3dzZXIgcHJvdmlkZXIuJyxcbiAgICByZXNpemVFcnJvcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXYXMgdW5hYmxlIHRvIHJlc2l6ZSB0aGUgd2luZG93IGR1ZSB0byBhbiBlcnJvci5cXG5cXG57ZXJyTWVzc2FnZX0nLFxuICAgIG1heGltaXplRXJyb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dhcyB1bmFibGUgdG8gbWF4aW1pemUgdGhlIHdpbmRvdyBkdWUgdG8gYW4gZXJyb3IuXFxuXFxue2Vyck1lc3NhZ2V9JyxcbiAgICByZXF1ZXN0TW9ja0NPUlNWYWxpZGF0aW9uRmFpbGVkOiAgICAgICAgICd7UmVxdWVzdEhvb2t9OiBDT1JTIHZhbGlkYXRpb24gZmFpbGVkIGZvciBhIHJlcXVlc3Qgc3BlY2lmaWVkIGFzIHtyZXF1ZXN0RmlsdGVyUnVsZX0nLFxuICAgIGRlYnVnSW5IZWFkbGVzc0Vycm9yOiAgICAgICAgICAgICAgICAgICAgJ1lvdSBjYW5ub3QgZGVidWcgaW4gaGVhZGxlc3MgbW9kZS4nLFxuICAgIGNvbmZpZ09wdGlvbnNXZXJlT3ZlcnJpZGRlbjogICAgICAgICAgICAgJ1RoZSB7b3B0aW9uc1N0cmluZ30gb3B0aW9ue3N1ZmZpeH0gZnJvbSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgYmUgaWdub3JlZC4nLFxuICAgIGNhbm5vdE92ZXJyaWRlVHlwZVNjcmlwdENvbmZpZ09wdGlvbnM6ICAgJ1lvdSBjYW5ub3Qgb3ZlcnJpZGUgdGhlIFwie29wdGlvbk5hbWV9XCIgY29tcGlsZXIgb3B0aW9uIGluIHRoZSBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZS5cXG4nLFxuXG4gICAgY2Fubm90RmluZFdpbmRvd0Rlc2NyaXB0b3JFcnJvcjogJ0NvdWxkIG5vdCBmaW5kIHRoZSBcInticm93c2VyQWxpYXN9XCIgd2luZG93LiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdENhZmUgaXMgdW5hYmxlIHRvIHJlc2l6ZSB0aGUgd2luZG93IG9yIHRha2Ugc2NyZWVuc2hvdHMuXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJyZWQgd2hpbGUgVGVzdENhZmUgd2FzIHNlYXJjaGluZyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIHRoZSB3aW5kb3cgZGVzY3JpcHRvcjpcXG5cXG57ZXJyTWVzc2FnZX0nLFxuXG4gICAgY2Fubm90RmluZFNTTENlcnRGaWxlOiAnVW5hYmxlIHRvIGZpbmQgdGhlIFwie3BhdGh9XCIgZmlsZSwgc3BlY2lmaWVkIGJ5IHRoZSBcIntvcHRpb259XCIgc3NsIG9wdGlvbi4gRXJyb3IgZGV0YWlsczpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBjYW5ub3RGaW5kQ29uZmlndXJhdGlvbkZpbGU6ICdVbmFibGUgdG8gZmluZCB0aGUgXCJ7cGF0aH1cIiBjb25maWd1cmF0aW9uIGZpbGUuIEVycm9yIGRldGFpbHM6XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vycn0nLFxuXG4gICAgcHJvYmxlbWF0aWNQYXRoUGF0dGVyblBsYWNlaG9sZGVyRm9yVmlkZW9SZWNvcmRpbmc6ICdUZXN0Q2FmZSBjb3VsZCBub3QgYXBwbHkgdGhlIGZvbGxvd2luZyB2aWRlbyByZWNvcmRpbmcgc2F2ZSBwYXRoIHBhdHRlcm57c3VmZml4fToge3BsYWNlSG9sZGVyUGF0dGVybn0uXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZb3UgbWF5IGVuY291bnRlciB0aGlzIGJlaGF2aW9yIHdoZW4geW91IGVuYWJsZSB0aGUgXCJzaW5nbGVGaWxlXCIgdmlkZW8gcmVjb3JkaW5nIG9wdGlvbiBhbmQgdXNlIHRlc3Qtc3BlY2lmaWMgcGF0aCBwYXR0ZXJucy5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHBsYWNlaG9sZGVye3N1ZmZpeH0ge3ZlcmJ9IHJlcGxhY2VkIHdpdGggYW4gZW1wdHkgc3RyaW5nLicsXG5cbiAgICBjbGllbnRTY3JpcHRzV2l0aEVtcHR5Q29udGVudDogICAgICAnVGhlIGNsaWVudCBzY3JpcHQgeW91IHRyaWVkIHRvIGluamVjdCBpcyBlbXB0eS4nLFxuICAgIGNsaWVudFNjcmlwdHNXaXRoRHVwbGljYXRlZENvbnRlbnQ6ICdZb3UgaW5qZWN0ZWQgdGhlIGZvbGxvd2luZyBjbGllbnQgc2NyaXB0e3N1ZmZpeH0gc2V2ZXJhbCB0aW1lczpcXG57ZHVwbGljYXRlZFNjcmlwdHN9JyxcbiAgICBhc3NlcnRlZFNlbGVjdG9ySW5zdGFuY2U6ICAgICAgICAgICAnWW91IHBhc3NlZCBhIFNlbGVjdG9yIG9iamVjdCB0byBcXCd0LmV4cGVjdCgpXFwnLlxcbklmIHlvdSB3YW50IHRvIGNoZWNrIHRoYXQgYSBtYXRjaGVkIGVsZW1lbnQgZXhpc3RzLCBwYXNzIHRoZSBcXCdzZWxlY3Rvci5leGlzdHNcXCcgdmFsdWUgaW5zdGVhZC4nLFxuICAgIGFzc2VydGVkQ2xpZW50RnVuY3Rpb25JbnN0YW5jZTogICAgICdZb3UgcGFzc2VkIGEgQ2xpZW50RnVuY3Rpb24gb2JqZWN0IHRvIFxcJ3QuZXhwZWN0KClcXCcuXFxuSWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uXFwncyByZXR1cm4gdmFsdWUsIHVzZSBwYXJlbnRoZXNlcyB0byBjYWxsIHRoZSBmdW5jdGlvbjogZm5OYW1lKCkuJyxcbiAgICBtdWx0aXBsZVdpbmRvd3NGb3VuZEJ5UHJlZGljYXRlOiAgICAnVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBwYXNzZWQgdG8gdGhlIFxcJ3N3aXRjaFRvV2luZG93XFwnIG1ldGhvZCBtYXRjaGVkIG11bHRpcGxlIHdpbmRvd3MuIFRoZSBmaXJzdCBtYXRjaGluZyB3aW5kb3cgd2FzIGFjdGl2YXRlZC4nLFxuICAgIGV4Y2Vzc2l2ZUF3YWl0SW5Bc3NlcnRpb246ICAgICAgICAgICdZb3UgcGFzc2VkIGEgRE9NIHNuYXBzaG90IHByb3BlcnR5IHRvIHRoZSBhc3NlcnRpb25cXCdzIFxcJ3QuZXhwZWN0KClcXCcgbWV0aG9kLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQgYW5kIHRoaXMgdmFsdWUgaXMgbm8gbG9uZ2VyIHVwZGF0ZWQuIFRvIGVuc3VyZSB0aGF0IHRoZSBhc3NlcnRpb24gdmVyaWZpZXMgYW4gdXAtdG8tZGF0ZSB2YWx1ZSwgcGFzcyB0aGUgc2VsZWN0b3IgcHJvcGVydHkgd2l0aG91dCBcXCdhd2FpdFxcJy4nLFxuICAgIG1pc3NpbmdBd2FpdE9uU25hcHNob3RQcm9wZXJ0eTogICAgICdZb3UgdXNlZCBhIERPTSBzbmFwc2hvdCBwcm9wZXJ0eSB3aXRob3V0IFxcJ2F3YWl0XFwnLiBUaGUgcHJvcGVydHkgdmFsdWUgaXMgYXNzaWduZWQgd2hlbiB0aGUgc25hcHNob3QgaXMgcmVzb2x2ZWQuIElmIHlvdSBuZWVkIHRvIHVzZSB0aGUgcHJvcGVydHkgdmFsdWUsIHVzZSBcXCdhd2FpdFxcJyB0byByZXNvbHZlIHRoZSBQcm9taXNlLicsXG4gICAgcmV0cnlUZXN0UGFnZXNJc05vdFN1cHBvcnRlZDogICAgICAgJ0Nhbm5vdCBlbmFibGUgdGhlIFxcJ3JldHJ5VGVzdFBhZ2VzXFwnIG9wdGlvbiBpbiBcInticm93c2VyQWxpYXN9XCIuIFBsZWFzZSBlbnN1cmUgdGhhdCB5b3VyIHZlcnNpb24gb2YgXCJ7YnJvd3NlckFsaWFzfVwiIHN1cHBvcnRzIHRoZSBTZXJ2aWNlIFdvcmtlciBBUEkgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2aWNlX1dvcmtlcl9BUEkpLlxcbicsXG4gICAgYnJvd3NlclByb3ZpZGVyRHJvcE9mUGVyZm9ybWFuY2U6ICAgJ1dlIGRldGVjdGVkIFxcJ3ticm93c2VyTmFtZX1cXCcgcnVucyBzbG93bHkuIFRyeSB0byBmcmVlIHVwIG9yIGFsbG9jYXRlIG1vcmUgc3lzdGVtIHJlc291cmNlcyBvbiBpdHMgaG9zdCBtYWNoaW5lLicsXG4gICAgdGVzdHNDb21waWxhdGlvblRha2VzVG9vTG9uZzogICAgICAgJ1Rlc3RzIHRvb2sgdG9vIGxvbmcgdG8gY29tcGlsZSAoe2NvbXBpbGVUaW1lfSkuIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGhhcyBubyBleGNlc3NpdmUgaW1wb3J0cy4nLFxuICAgIGRlcHJlY2F0ZWRBUEk6ICAgICAgICAgICAgICAgICAgICAgICd7QVBJfSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gVXNlIHtyZXBsYWNlbWVudH0gaW5zdGVhZC4nLFxuICAgIHVuYXdhaXRlZE1ldGhvZFdpdGhBc3NlcnRpb246ICAgICAgIFwiQW4gYXN5bmNocm9ub3VzIG1ldGhvZCB0aGF0IHlvdSBkbyBub3QgYXdhaXQgaW5jbHVkZXMgYW4gYXNzZXJ0aW9uLiBJbnNwZWN0IHRoYXQgbWV0aG9kJ3MgZXhlY3V0aW9uIGNoYWluIGFuZCBhZGQgdGhlICdhd2FpdCcga2V5d29yZCB3aGVyZSBuZWNlc3NhcnkuXCIsXG4gICAgbXVsdGlwbGVDb25maWd1cmF0aW9uRmlsZXNGb3VuZDogICAgJ1Rlc3RDYWZlIGRldGVjdGVkIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBmaWxlLlxcblRvIHByZXZlbnQgY29uZmlndXJhdGlvbiBjb25mbGljdHMsIFRlc3RDYWZlIHdpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eToge3BhdGh9LlxcblJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgYXJ0aWNsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjogaHR0cHM6Ly90ZXN0Y2FmZS5pby9kb2N1bWVudGF0aW9uLzQwMjYzOC9yZWZlcmVuY2UvY29uZmlndXJhdGlvbi1maWxlP3NlYXJjaCNjb25maWd1cmF0aW9uLWZpbGUtcHJpb3JpdHknLFxuICAgIGVsZW1lbnRPdmVybGFwcGVkOiAgICAgICAgICAgICAgICAgICdUZXN0Q2FmZSBjYW5ub3QgaW50ZXJhY3Qgd2l0aCB0aGUge2V4cGVjdGVkfSBlbGVtZW50IGJlY2F1c2UgYW5vdGhlciBlbGVtZW50IG9ic3RydWN0cyBpdC5cXG5XaGVuIHNvbWV0aGluZyBvdmVybGFwcyB0aGUgYWN0aW9uIHRhcmdldCwgVGVzdENhZmUgcGVyZm9ybXMgdGhlIGFjdGlvbiB3aXRoIHRoZSB0b3Btb3N0IGVsZW1lbnQgYXQgdGhlIG9yaWdpbmFsIHRhcmdldFxcJ3MgbG9jYXRpb24uXFxuVGhlIGZvbGxvd2luZyBlbGVtZW50IHdpdGggYSBncmVhdGVyIHotb3JkZXIgcmVwbGFjZWQgdGhlIG9yaWdpbmFsIGFjdGlvbiB0YXJnZXQ6IHthY3R1YWx9LlxcblJldmlldyB5b3VyIGNvZGUgdG8gcHJldmVudCB0aGlzIGJlaGF2aW9yLicsXG59O1xuXG4iXX0=
|
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.CommandFormatter = void 0;
|
|
7
7
|
const lodash_1 = require("lodash");
|
|
8
|
-
const
|
|
8
|
+
const execute_client_function_1 = require("../../test-run/commands/execute-client-function");
|
|
9
9
|
const actions_1 = require("../../test-run/commands/actions");
|
|
10
10
|
const replicator_1 = require("../../client-functions/replicator");
|
|
11
11
|
const diff_1 = __importDefault(require("../../utils/diff"));
|
|
@@ -22,9 +22,9 @@ class CommandFormatter {
|
|
|
22
22
|
}
|
|
23
23
|
format() {
|
|
24
24
|
const formattedCommand = { type: this._command.type, actionId: this._command.actionId };
|
|
25
|
-
if (this._command instanceof
|
|
25
|
+
if (this._command instanceof execute_client_function_1.ExecuteSelectorCommand)
|
|
26
26
|
formattedCommand.selector = this._prepareSelector(this._command, 'selector');
|
|
27
|
-
else if (this._command instanceof
|
|
27
|
+
else if (this._command instanceof execute_client_function_1.ExecuteClientFunctionCommand)
|
|
28
28
|
formattedCommand.clientFn = this._prepareClientFunction(this._command);
|
|
29
29
|
else if (this._command instanceof actions_1.UseRoleCommand)
|
|
30
30
|
formattedCommand.role = this._prepareRole(this._command);
|
|
@@ -95,7 +95,7 @@ class CommandFormatter {
|
|
|
95
95
|
const sourceProperties = this._command.getReportedProperties();
|
|
96
96
|
sourceProperties.forEach((key) => {
|
|
97
97
|
const property = this._command[key];
|
|
98
|
-
if (property instanceof
|
|
98
|
+
if (property instanceof execute_client_function_1.ExecuteSelectorCommand)
|
|
99
99
|
formattedCommand[key] = this._prepareSelector(property, key);
|
|
100
100
|
else if (isCommandOptions(property)) {
|
|
101
101
|
const modifiedOptions = CommandFormatter._getModifiedOptions(property);
|
|
@@ -119,4 +119,4 @@ class CommandFormatter {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
exports.CommandFormatter = CommandFormatter;
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3J0ZXIvY29tbWFuZC9jb21tYW5kLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBaUM7QUFDakMscUVBQTJHO0FBQzNHLDZEQU95QztBQUV6QyxrRUFBNEY7QUFJNUYsNERBQW9DO0FBRXBDLDZEQUl5QztBQUl6QyxNQUFNLDZCQUE2QixHQUFHLFVBQVUsQ0FBQztBQUVqRCxTQUFTLGdCQUFnQixDQUFFLEdBQVc7SUFDbEMsT0FBTyxHQUFHLFlBQVksdUJBQWEsSUFBSSxHQUFHLFlBQVksa0NBQXdCLElBQUksR0FBRyxZQUFZLDBCQUFnQixDQUFDO0FBQ3RILENBQUM7QUFFRCxNQUFhLGdCQUFnQjtJQUt6QixZQUFvQixPQUFvQixFQUFFLE1BQWU7UUFKakQsY0FBUyxHQUFrQixFQUFFLENBQUM7UUFLbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVNLE1BQU07UUFDVCxNQUFNLGdCQUFnQixHQUFxQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUxRyxJQUFJLElBQUksQ0FBQyxRQUFRLFlBQVksb0NBQXNCO1lBQy9DLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUM1RSxJQUFJLElBQUksQ0FBQyxRQUFRLFlBQVksMENBQTRCO1lBQzFELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3RFLElB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Q0FBQyxNQUFNO1lBQ3RDLE9BQU87UUFFWCxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFnQixFQUFDLElBQUksa0NBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBRSxjQUFzQjtRQUN0RCxNQUFNLFdBQVcsR0FBTSxjQUFjLENBQUMsV0FBZ0MsQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXpDLE9BQU8sSUFBQSxjQUFJLEVBQUMsY0FBb0MsRUFBRSxjQUFvQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNKO0FBeklELDRDQXlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCwgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcbmltcG9ydCB7XG4gICAgTmF2aWdhdGVUb0NvbW1hbmQsXG4gICAgUHJlc3NLZXlDb21tYW5kLFxuICAgIFJ1bkN1c3RvbUFjdGlvbkNvbW1hbmQsXG4gICAgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsXG4gICAgVHlwZVRleHRDb21tYW5kLFxuICAgIFVzZVJvbGVDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHsgY3JlYXRlUmVwbGljYXRvciwgU2VsZWN0b3JOb2RlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9yZXBsaWNhdG9yJztcbmltcG9ydCB7IEZvcm1hdHRlZENvbW1hbmQsIFNlbGVjdG9ySW5mbyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IGRpZmYgZnJvbSAnLi4vLi4vdXRpbHMvZGlmZic7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uT3B0aW9ucyxcbiAgICBSZXNpemVUb0ZpdERldmljZU9wdGlvbnMsXG4gICAgQXNzZXJ0aW9uT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb3B0aW9ucyc7XG5cbmltcG9ydCB7IENvbW1hbmRCYXNlIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYmFzZSc7XG5cbmNvbnN0IENPTkZJREVOVElBTF9JTkZPX1BMQUNFSE9MREVSID0gJyoqKioqKioqJztcblxuZnVuY3Rpb24gaXNDb21tYW5kT3B0aW9ucyAob2JqOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQWN0aW9uT3B0aW9ucyB8fCBvYmogaW5zdGFuY2VvZiBSZXNpemVUb0ZpdERldmljZU9wdGlvbnMgfHwgb2JqIGluc3RhbmNlb2YgQXNzZXJ0aW9uT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1hbmRGb3JtYXR0ZXIge1xuICAgIHByaXZhdGUgX2VsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tbWFuZDogQ29tbWFuZEJhc2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzdWx0OiB1bmtub3duO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChjb21tYW5kOiBDb21tYW5kQmFzZSwgcmVzdWx0OiB1bmtub3duKSB7XG4gICAgICAgIHRoaXMuX2NvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdCAoKTogRm9ybWF0dGVkQ29tbWFuZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZENvbW1hbmQ6IEZvcm1hdHRlZENvbW1hbmQgPSB7IHR5cGU6IHRoaXMuX2NvbW1hbmQudHlwZSwgYWN0aW9uSWQ6IHRoaXMuX2NvbW1hbmQuYWN0aW9uSWQgfTtcblxuICAgICAgICBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIEV4ZWN1dGVTZWxlY3RvckNvbW1hbmQpXG4gICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kLnNlbGVjdG9yID0gdGhpcy5fcHJlcGFyZVNlbGVjdG9yKHRoaXMuX2NvbW1hbmQsICdzZWxlY3RvcicpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQuY2xpZW50Rm4gPSB0aGlzLl9wcmVwYXJlQ2xpZW50RnVuY3Rpb24odGhpcy5fY29tbWFuZCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBVc2VSb2xlQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQucm9sZSA9IHRoaXMuX3ByZXBhcmVSb2xlKHRoaXMuX2NvbW1hbmQpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgTmF2aWdhdGVUb0NvbW1hbmQpXG4gICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kLnVybCA9IHRoaXMuX3ByZXBhcmVVcmwodGhpcy5fY29tbWFuZCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQuZGlhbG9nSGFuZGxlciA9IHRoaXMuX3ByZXBhcmVEaWFsb2dIYW5kbGVyKHRoaXMuX2NvbW1hbmQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qcm9wZXJ0aWVzKHRoaXMuX2NvbW1hbmQsIGZvcm1hdHRlZENvbW1hbmQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgUnVuQ3VzdG9tQWN0aW9uQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQuYWN0aW9uUmVzdWx0ID0gdGhpcy5fcmVzdWx0O1xuXG4gICAgICAgIHRoaXMuX21hc2tDb25maWRlbnRpYWxJbmZvKGZvcm1hdHRlZENvbW1hbmQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRDb21tYW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21hc2tDb25maWRlbnRpYWxJbmZvIChjb21tYW5kOiBGb3JtYXR0ZWRDb21tYW5kKTogdm9pZCB7XG4gICAgICAgIGlmICghKGNvbW1hbmQub3B0aW9ucyBhcyBhbnkpPy5jb25maWRlbnRpYWwpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBUeXBlVGV4dENvbW1hbmQpXG4gICAgICAgICAgICBjb21tYW5kLnRleHQgPSBDT05GSURFTlRJQUxfSU5GT19QTEFDRUhPTERFUjtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIFByZXNzS2V5Q29tbWFuZClcbiAgICAgICAgICAgIGNvbW1hbmQua2V5cyA9IENPTkZJREVOVElBTF9JTkZPX1BMQUNFSE9MREVSO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEVsZW1lbnRCeVByb3BlcnR5TmFtZSAocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVNlbGVjdG9yRWxlbWVudHMoKTtcblxuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOlxuICAgICAgICAgICAgY2FzZSAnc3RhcnRTZWxlY3Rvcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzWzBdO1xuICAgICAgICAgICAgY2FzZSAnZW5kU2VsZWN0b3InOlxuICAgICAgICAgICAgY2FzZSAnZGVzdGluYXRpb25TZWxlY3Rvcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVTZWxlY3RvciAoY29tbWFuZDogRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTZWxlY3RvckluZm8ge1xuICAgICAgICBjb25zdCBzZWxlY3RvckNoYWluID0gY29tbWFuZC5hcGlGbkNoYWluIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uICAgID0gc2VsZWN0b3JDaGFpbi5qb2luKCcnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdG9ySW5mbyA9IHsgZXhwcmVzc2lvbiB9O1xuXG4gICAgICAgIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fcmVzdWx0KVxuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnRCeVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAgIGlmIChlbGVtZW50KVxuICAgICAgICAgICAgcmVzdWx0LmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgICAgIGlmIChjb21tYW5kLnRpbWVvdXQpXG4gICAgICAgICAgICByZXN1bHQudGltZW91dCA9IGNvbW1hbmQudGltZW91dCBhcyBudW1iZXI7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlQ2xpZW50RnVuY3Rpb24gKGNvbW1hbmQ6IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogY29tbWFuZC5mbkNvZGUsXG4gICAgICAgICAgICBhcmdzOiBjb21tYW5kLmFyZ3NbMF0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZURpYWxvZ0hhbmRsZXIgKGNvbW1hbmQ6IFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVDbGllbnRGdW5jdGlvbihjb21tYW5kLmRpYWxvZ0hhbmRsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVSb2xlIChjb21tYW5kOiBVc2VSb2xlQ29tbWFuZCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHsgbG9naW5VcmwsIG9wdHMsIHBoYXNlIH0gPSBjb21tYW5kLnJvbGU7XG5cbiAgICAgICAgcmV0dXJuIHsgbG9naW5VcmwsIG9wdGlvbnM6IG9wdHMsIHBoYXNlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVVybCAoY29tbWFuZDogTmF2aWdhdGVUb0NvbW1hbmQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gY29tbWFuZC51cmw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXNzaWduUHJvcGVydGllcyAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGZvcm1hdHRlZENvbW1hbmQ6IEZvcm1hdHRlZENvbW1hbmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21tYW5kLmdldFJlcG9ydGVkUHJvcGVydGllcylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBzb3VyY2VQcm9wZXJ0aWVzID0gdGhpcy5fY29tbWFuZC5nZXRSZXBvcnRlZFByb3BlcnRpZXMoKTtcblxuICAgICAgICBzb3VyY2VQcm9wZXJ0aWVzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuX2NvbW1hbmRba2V5XTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5IGluc3RhbmNlb2YgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZClcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kW2tleV0gPSB0aGlzLl9wcmVwYXJlU2VsZWN0b3IocHJvcGVydHksIGtleSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRPcHRpb25zKHByb3BlcnR5IGFzIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllZE9wdGlvbnMgPSBDb21tYW5kRm9ybWF0dGVyLl9nZXRNb2RpZmllZE9wdGlvbnMocHJvcGVydHkgYXMgb2JqZWN0KTtcblxuICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShtb2RpZmllZE9wdGlvbnMpKVxuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kW2tleV0gPSBtb2RpZmllZE9wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZFtrZXldID0gcHJvcGVydHk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Vuc3VyZVNlbGVjdG9yRWxlbWVudHMgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc3VsdCB8fCB0aGlzLl9lbGVtZW50cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGNyZWF0ZVJlcGxpY2F0b3IobmV3IFNlbGVjdG9yTm9kZVRyYW5zZm9ybSgpKS5kZWNvZGUodGhpcy5fcmVzdWx0KTtcblxuICAgICAgICB0aGlzLl9lbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoZGVjb2RlZCkgPyBkZWNvZGVkIDogW2RlY29kZWRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRNb2RpZmllZE9wdGlvbnMgKGNvbW1hbmRPcHRpb25zOiBvYmplY3QpOiBEaWN0aW9uYXJ5PG9iamVjdD4ge1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciAgICA9IGNvbW1hbmRPcHRpb25zLmNvbnN0cnVjdG9yIGFzIE9iamVjdENvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuXG4gICAgICAgIHJldHVybiBkaWZmKGRlZmF1bHRPcHRpb25zIGFzIERpY3Rpb25hcnk8b2JqZWN0PiwgY29tbWFuZE9wdGlvbnMgYXMgRGljdGlvbmFyeTxvYmplY3Q+KTtcbiAgICB9XG59XG4iXX0=
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVwb3J0ZXIvY29tbWFuZC9jb21tYW5kLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FBaUM7QUFDakMsNkZBQXVIO0FBQ3ZILDZEQU95QztBQUV6QyxrRUFBNEY7QUFJNUYsNERBQW9DO0FBRXBDLDZEQUl5QztBQUl6QyxNQUFNLDZCQUE2QixHQUFHLFVBQVUsQ0FBQztBQUVqRCxTQUFTLGdCQUFnQixDQUFFLEdBQVc7SUFDbEMsT0FBTyxHQUFHLFlBQVksdUJBQWEsSUFBSSxHQUFHLFlBQVksa0NBQXdCLElBQUksR0FBRyxZQUFZLDBCQUFnQixDQUFDO0FBQ3RILENBQUM7QUFFRCxNQUFhLGdCQUFnQjtJQUt6QixZQUFvQixPQUFvQixFQUFFLE1BQWU7UUFKakQsY0FBUyxHQUFrQixFQUFFLENBQUM7UUFLbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVNLE1BQU07UUFDVCxNQUFNLGdCQUFnQixHQUFxQixFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUxRyxJQUFJLElBQUksQ0FBQyxRQUFRLFlBQVksZ0RBQXNCO1lBQy9DLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUM1RSxJQUFJLElBQUksQ0FBQyxRQUFRLFlBQVksc0RBQTRCO1lBQzFELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3RFLElB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Q0FBQyxNQUFNO1lBQ3RDLE9BQU87UUFFWCxNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFnQixFQUFDLElBQUksa0NBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBRSxjQUFzQjtRQUN0RCxNQUFNLFdBQVcsR0FBTSxjQUFjLENBQUMsV0FBZ0MsQ0FBQztRQUN2RSxNQUFNLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXpDLE9BQU8sSUFBQSxjQUFJLEVBQUMsY0FBb0MsRUFBRSxjQUFvQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNKO0FBeklELDRDQXlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCwgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2V4ZWN1dGUtY2xpZW50LWZ1bmN0aW9uJztcbmltcG9ydCB7XG4gICAgTmF2aWdhdGVUb0NvbW1hbmQsXG4gICAgUHJlc3NLZXlDb21tYW5kLFxuICAgIFJ1bkN1c3RvbUFjdGlvbkNvbW1hbmQsXG4gICAgU2V0TmF0aXZlRGlhbG9nSGFuZGxlckNvbW1hbmQsXG4gICAgVHlwZVRleHRDb21tYW5kLFxuICAgIFVzZVJvbGVDb21tYW5kLFxufSBmcm9tICcuLi8uLi90ZXN0LXJ1bi9jb21tYW5kcy9hY3Rpb25zJztcblxuaW1wb3J0IHsgY3JlYXRlUmVwbGljYXRvciwgU2VsZWN0b3JOb2RlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9yZXBsaWNhdG9yJztcbmltcG9ydCB7IEZvcm1hdHRlZENvbW1hbmQsIFNlbGVjdG9ySW5mbyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IGRpZmYgZnJvbSAnLi4vLi4vdXRpbHMvZGlmZic7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uT3B0aW9ucyxcbiAgICBSZXNpemVUb0ZpdERldmljZU9wdGlvbnMsXG4gICAgQXNzZXJ0aW9uT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb3B0aW9ucyc7XG5cbmltcG9ydCB7IENvbW1hbmRCYXNlIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYmFzZSc7XG5cbmNvbnN0IENPTkZJREVOVElBTF9JTkZPX1BMQUNFSE9MREVSID0gJyoqKioqKioqJztcblxuZnVuY3Rpb24gaXNDb21tYW5kT3B0aW9ucyAob2JqOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQWN0aW9uT3B0aW9ucyB8fCBvYmogaW5zdGFuY2VvZiBSZXNpemVUb0ZpdERldmljZU9wdGlvbnMgfHwgb2JqIGluc3RhbmNlb2YgQXNzZXJ0aW9uT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1hbmRGb3JtYXR0ZXIge1xuICAgIHByaXZhdGUgX2VsZW1lbnRzOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tbWFuZDogQ29tbWFuZEJhc2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVzdWx0OiB1bmtub3duO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChjb21tYW5kOiBDb21tYW5kQmFzZSwgcmVzdWx0OiB1bmtub3duKSB7XG4gICAgICAgIHRoaXMuX2NvbW1hbmQgPSBjb21tYW5kO1xuICAgICAgICB0aGlzLl9yZXN1bHQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1hdCAoKTogRm9ybWF0dGVkQ29tbWFuZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZENvbW1hbmQ6IEZvcm1hdHRlZENvbW1hbmQgPSB7IHR5cGU6IHRoaXMuX2NvbW1hbmQudHlwZSwgYWN0aW9uSWQ6IHRoaXMuX2NvbW1hbmQuYWN0aW9uSWQgfTtcblxuICAgICAgICBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIEV4ZWN1dGVTZWxlY3RvckNvbW1hbmQpXG4gICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kLnNlbGVjdG9yID0gdGhpcy5fcHJlcGFyZVNlbGVjdG9yKHRoaXMuX2NvbW1hbmQsICdzZWxlY3RvcicpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQuY2xpZW50Rm4gPSB0aGlzLl9wcmVwYXJlQ2xpZW50RnVuY3Rpb24odGhpcy5fY29tbWFuZCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBVc2VSb2xlQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQucm9sZSA9IHRoaXMuX3ByZXBhcmVSb2xlKHRoaXMuX2NvbW1hbmQpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgTmF2aWdhdGVUb0NvbW1hbmQpXG4gICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kLnVybCA9IHRoaXMuX3ByZXBhcmVVcmwodGhpcy5fY29tbWFuZCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBTZXROYXRpdmVEaWFsb2dIYW5kbGVyQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQuZGlhbG9nSGFuZGxlciA9IHRoaXMuX3ByZXBhcmVEaWFsb2dIYW5kbGVyKHRoaXMuX2NvbW1hbmQpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLl9hc3NpZ25Qcm9wZXJ0aWVzKHRoaXMuX2NvbW1hbmQsIGZvcm1hdHRlZENvbW1hbmQpO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb21tYW5kIGluc3RhbmNlb2YgUnVuQ3VzdG9tQWN0aW9uQ29tbWFuZClcbiAgICAgICAgICAgIGZvcm1hdHRlZENvbW1hbmQuYWN0aW9uUmVzdWx0ID0gdGhpcy5fcmVzdWx0O1xuXG4gICAgICAgIHRoaXMuX21hc2tDb25maWRlbnRpYWxJbmZvKGZvcm1hdHRlZENvbW1hbmQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRDb21tYW5kO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21hc2tDb25maWRlbnRpYWxJbmZvIChjb21tYW5kOiBGb3JtYXR0ZWRDb21tYW5kKTogdm9pZCB7XG4gICAgICAgIGlmICghKGNvbW1hbmQub3B0aW9ucyBhcyBhbnkpPy5jb25maWRlbnRpYWwpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbW1hbmQgaW5zdGFuY2VvZiBUeXBlVGV4dENvbW1hbmQpXG4gICAgICAgICAgICBjb21tYW5kLnRleHQgPSBDT05GSURFTlRJQUxfSU5GT19QTEFDRUhPTERFUjtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fY29tbWFuZCBpbnN0YW5jZW9mIFByZXNzS2V5Q29tbWFuZClcbiAgICAgICAgICAgIGNvbW1hbmQua2V5cyA9IENPTkZJREVOVElBTF9JTkZPX1BMQUNFSE9MREVSO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEVsZW1lbnRCeVByb3BlcnR5TmFtZSAocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVNlbGVjdG9yRWxlbWVudHMoKTtcblxuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0b3InOlxuICAgICAgICAgICAgY2FzZSAnc3RhcnRTZWxlY3Rvcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzWzBdO1xuICAgICAgICAgICAgY2FzZSAnZW5kU2VsZWN0b3InOlxuICAgICAgICAgICAgY2FzZSAnZGVzdGluYXRpb25TZWxlY3Rvcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRzWzBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVTZWxlY3RvciAoY29tbWFuZDogRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTZWxlY3RvckluZm8ge1xuICAgICAgICBjb25zdCBzZWxlY3RvckNoYWluID0gY29tbWFuZC5hcGlGbkNoYWluIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBleHByZXNzaW9uICAgID0gc2VsZWN0b3JDaGFpbi5qb2luKCcnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQ6IFNlbGVjdG9ySW5mbyA9IHsgZXhwcmVzc2lvbiB9O1xuXG4gICAgICAgIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fcmVzdWx0KVxuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnRCeVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpO1xuXG4gICAgICAgIGlmIChlbGVtZW50KVxuICAgICAgICAgICAgcmVzdWx0LmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgICAgIGlmIChjb21tYW5kLnRpbWVvdXQpXG4gICAgICAgICAgICByZXN1bHQudGltZW91dCA9IGNvbW1hbmQudGltZW91dCBhcyBudW1iZXI7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmVwYXJlQ2xpZW50RnVuY3Rpb24gKGNvbW1hbmQ6IEV4ZWN1dGVDbGllbnRGdW5jdGlvbkNvbW1hbmQpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZTogY29tbWFuZC5mbkNvZGUsXG4gICAgICAgICAgICBhcmdzOiBjb21tYW5kLmFyZ3NbMF0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZURpYWxvZ0hhbmRsZXIgKGNvbW1hbmQ6IFNldE5hdGl2ZURpYWxvZ0hhbmRsZXJDb21tYW5kKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVDbGllbnRGdW5jdGlvbihjb21tYW5kLmRpYWxvZ0hhbmRsZXIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVSb2xlIChjb21tYW5kOiBVc2VSb2xlQ29tbWFuZCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHsgbG9naW5VcmwsIG9wdHMsIHBoYXNlIH0gPSBjb21tYW5kLnJvbGU7XG5cbiAgICAgICAgcmV0dXJuIHsgbG9naW5VcmwsIG9wdGlvbnM6IG9wdHMsIHBoYXNlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVVybCAoY29tbWFuZDogTmF2aWdhdGVUb0NvbW1hbmQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gY29tbWFuZC51cmw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXNzaWduUHJvcGVydGllcyAoY29tbWFuZDogQ29tbWFuZEJhc2UsIGZvcm1hdHRlZENvbW1hbmQ6IEZvcm1hdHRlZENvbW1hbmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb21tYW5kLmdldFJlcG9ydGVkUHJvcGVydGllcylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBzb3VyY2VQcm9wZXJ0aWVzID0gdGhpcy5fY29tbWFuZC5nZXRSZXBvcnRlZFByb3BlcnRpZXMoKTtcblxuICAgICAgICBzb3VyY2VQcm9wZXJ0aWVzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuX2NvbW1hbmRba2V5XTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5IGluc3RhbmNlb2YgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZClcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kW2tleV0gPSB0aGlzLl9wcmVwYXJlU2VsZWN0b3IocHJvcGVydHksIGtleSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpc0NvbW1hbmRPcHRpb25zKHByb3BlcnR5IGFzIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllZE9wdGlvbnMgPSBDb21tYW5kRm9ybWF0dGVyLl9nZXRNb2RpZmllZE9wdGlvbnMocHJvcGVydHkgYXMgb2JqZWN0KTtcblxuICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eShtb2RpZmllZE9wdGlvbnMpKVxuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRDb21tYW5kW2tleV0gPSBtb2RpZmllZE9wdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkQ29tbWFuZFtrZXldID0gcHJvcGVydHk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Vuc3VyZVNlbGVjdG9yRWxlbWVudHMgKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc3VsdCB8fCB0aGlzLl9lbGVtZW50cy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGNyZWF0ZVJlcGxpY2F0b3IobmV3IFNlbGVjdG9yTm9kZVRyYW5zZm9ybSgpKS5kZWNvZGUodGhpcy5fcmVzdWx0KTtcblxuICAgICAgICB0aGlzLl9lbGVtZW50cyA9IEFycmF5LmlzQXJyYXkoZGVjb2RlZCkgPyBkZWNvZGVkIDogW2RlY29kZWRdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIF9nZXRNb2RpZmllZE9wdGlvbnMgKGNvbW1hbmRPcHRpb25zOiBvYmplY3QpOiBEaWN0aW9uYXJ5PG9iamVjdD4ge1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciAgICA9IGNvbW1hbmRPcHRpb25zLmNvbnN0cnVjdG9yIGFzIE9iamVjdENvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IG5ldyBjb25zdHJ1Y3RvcigpO1xuXG4gICAgICAgIHJldHVybiBkaWZmKGRlZmF1bHRPcHRpb25zIGFzIERpY3Rpb25hcnk8b2JqZWN0PiwgY29tbWFuZE9wdGlvbnMgYXMgRGljdGlvbmFyeTxvYmplY3Q+KTtcbiAgICB9XG59XG4iXX0=
|