testcafe 2.6.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/bin/testcafe-with-v8-flag-filter.js +10 -16
- package/lib/api/exportable-lib/index.js +1 -11
- package/lib/api/structure/test.js +4 -11
- package/lib/api/test-controller/index.js +3 -10
- package/lib/api/test-run-tracker.js +1 -1
- package/lib/assertions/executor.js +2 -11
- package/lib/browser/connection/gateway/index.js +3 -4
- package/lib/cli/argument-parser/index.js +1 -3
- package/lib/cli/cli.js +3 -11
- package/lib/client/automation/index.js +49 -36
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.js +13 -5
- package/lib/client/core/index.js +14 -8
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/driver/index.js +19 -20
- package/lib/client/driver/index.min.js +1 -1
- package/lib/compiler/babel/load-libs.js +3 -3
- package/lib/compiler/compilers.js +6 -6
- package/lib/compiler/index.js +3 -3
- package/lib/compiler/interfaces.js +1 -1
- package/lib/compiler/test-file/add-export-api.js +3 -3
- package/lib/compiler/test-file/api-based.js +5 -34
- package/lib/compiler/test-file/formats/es-next/compiler.js +4 -4
- package/lib/compiler/test-file/formats/typescript/compiler.js +5 -5
- package/lib/configuration/option-names.js +1 -2
- package/lib/errors/runtime/templates.js +1 -2
- package/lib/errors/types.js +2 -3
- package/lib/index.js +1 -3
- package/lib/live/bootstrapper.js +3 -3
- package/lib/live/test-runner.js +5 -5
- package/lib/native-automation/add-custom-debug-formatters.js +3 -2
- package/lib/native-automation/client/event-descriptor.js +11 -5
- package/lib/native-automation/client/input.js +3 -7
- package/lib/native-automation/request-hooks/event-provider.js +4 -1
- package/lib/native-automation/request-pipeline/context-info.js +4 -1
- package/lib/native-automation/request-pipeline/index.js +39 -19
- package/lib/native-automation/request-pipeline/safe-api.js +10 -7
- package/lib/native-automation/request-pipeline/special-handlers.js +16 -13
- package/lib/native-automation/resource-injector.js +7 -7
- package/lib/native-automation/types.js +1 -1
- package/lib/native-automation/utils/cdp.js +3 -2
- package/lib/role/role.js +4 -39
- package/lib/runner/bootstrapper.js +4 -11
- package/lib/runner/browser-job.js +4 -5
- package/lib/runner/fixture-hook-controller.js +1 -7
- package/lib/runner/index.js +6 -53
- package/lib/runner/interfaces.js +1 -1
- package/lib/runner/task/index.js +2 -4
- package/lib/runner/test-run-controller.js +2 -4
- package/lib/test-run/bookmark.js +5 -23
- package/lib/test-run/commands/service.js +2 -3
- package/lib/test-run/commands/utils.js +4 -2
- package/lib/test-run/index.js +9 -132
- package/lib/testcafe.js +1 -9
- package/lib/utils/debug-loggers.js +4 -2
- package/lib/utils/parse-user-agent.js +17 -2
- package/package.json +3 -4
- package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
- package/lib/dashboard/config-storage.js +0 -26
- package/lib/dashboard/connector.js +0 -84
- package/lib/dashboard/documentation-url.js +0 -6
- package/lib/dashboard/formatting.js +0 -26
- package/lib/dashboard/get-dashboard-url.js +0 -10
- package/lib/dashboard/get-default-project-link.js +0 -23
- package/lib/dashboard/get-env-options.js +0 -26
- package/lib/dashboard/index.js +0 -145
- package/lib/dashboard/interfaces.js +0 -3
- package/lib/dashboard/messages.js +0 -21
- package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
- package/lib/services/compiler/host.js +0 -370
- package/lib/services/compiler/interfaces.js +0 -3
- package/lib/services/compiler/io.js +0 -10
- package/lib/services/compiler/protocol.js +0 -17
- package/lib/services/compiler/service-loader.js +0 -18
- package/lib/services/compiler/service.js +0 -362
- package/lib/services/compiler/test-run-proxy.js +0 -157
- package/lib/services/interfaces.js +0 -3
- package/lib/services/process-title.js +0 -10
- package/lib/services/serialization/prepare-options.js +0 -23
- package/lib/services/serialization/replicator/create-replicator.js +0 -58
- package/lib/services/serialization/replicator/interfaces.js +0 -3
- package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
- package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
- package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
- package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -67
- package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
- package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
- package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
- package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
- package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
- package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
- package/lib/services/serialization/test-structure.js +0 -91
- package/lib/services/utils/ipc/interfaces.js +0 -29
- package/lib/services/utils/ipc/io.js +0 -109
- package/lib/services/utils/ipc/message.js +0 -84
- package/lib/services/utils/ipc/packet.js +0 -57
- package/lib/services/utils/ipc/proxy.js +0 -94
- package/lib/services/utils/ipc/transport.js +0 -65
- package/lib/services/utils/method-should-not-be-called-error.js +0 -10
|
@@ -31,13 +31,9 @@ class NativeAutomationInput {
|
|
|
31
31
|
async executeInsertText(text) {
|
|
32
32
|
return this._dispatchEventFn.single(types_1.EventType.InsertText, { text });
|
|
33
33
|
}
|
|
34
|
-
async createMouseMoveEvent(currPosition) {
|
|
34
|
+
async createMouseMoveEvent(currPosition, modifiers) {
|
|
35
35
|
const options = await event_descriptor_1.default.createMouseEventOptions('mouseMoved', {
|
|
36
|
-
options: {
|
|
37
|
-
clientX: currPosition.x,
|
|
38
|
-
clientY: currPosition.y,
|
|
39
|
-
button: 'none',
|
|
40
|
-
},
|
|
36
|
+
options: Object.assign({ clientX: currPosition.x, clientY: currPosition.y, button: 'none' }, modifiers),
|
|
41
37
|
});
|
|
42
38
|
return {
|
|
43
39
|
type: types_1.EventType.Mouse,
|
|
@@ -47,4 +43,4 @@ class NativeAutomationInput {
|
|
|
47
43
|
}
|
|
48
44
|
exports.default = NativeAutomationInput;
|
|
49
45
|
module.exports = exports.default;
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vY2xpZW50L2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0NBQXFDO0FBSXJDLDBFQUFvRDtBQUdwRCxNQUFxQixxQkFBcUI7SUFFdEMsWUFBYSxlQUFnQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0lBQzVDLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFFLE9BQVk7UUFDaEMsTUFBTSxZQUFZLEdBQUcsTUFBTSwwQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFFLE9BQVk7UUFDOUIsTUFBTSxZQUFZLEdBQUcsTUFBTSwwQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEcsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxPQUFPLENBQUUsT0FBeUI7UUFDckMsTUFBTSxZQUFZLEdBQUcsMEJBQWtCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDTSxLQUFLLENBQUUsT0FBeUI7UUFDbkMsTUFBTSxZQUFZLEdBQUcsMEJBQWtCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxvQkFBb0IsQ0FBRSxhQUFvQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBRSxJQUFZO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBRSxZQUFvQyxFQUFFLFNBQW9CO1FBQ3pGLE1BQU0sT0FBTyxHQUFHLE1BQU0sMEJBQWtCLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFO1lBQzNFLE9BQU8sa0JBQ0gsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQ3ZCLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUN2QixNQUFNLEVBQUcsTUFBTSxJQUNaLFNBQVMsQ0FDZjtTQUNKLENBQUMsQ0FBQztRQUVILE9BQU87WUFDSCxJQUFJLEVBQUUsaUJBQVMsQ0FBQyxLQUFLO1lBQ3JCLE9BQU87U0FDVixDQUFDO0lBQ04sQ0FBQztDQUNKO0FBcERELHdDQW9EQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEF4aXNWYWx1ZXNEYXRhIH0gZnJvbSAnLi4vLi4vY2xpZW50L2NvcmUvdXRpbHMvdmFsdWVzL2F4aXMtdmFsdWVzJztcbmltcG9ydCB7IFNpbXVsYXRlZEtleUluZm8gfSBmcm9tICcuL2tleS1wcmVzcy91dGlscyc7XG5pbXBvcnQgeyBEaXNwYXRjaEV2ZW50Rm4gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCBDRFBFdmVudERlc2NyaXB0b3IgZnJvbSAnLi9ldmVudC1kZXNjcmlwdG9yJztcbmltcG9ydCB7IE1vZGlmaWVycyB9IGZyb20gJy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29wdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBdXRvbWF0aW9uSW5wdXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3BhdGNoRXZlbnRGbjogRGlzcGF0Y2hFdmVudEZuO1xuICAgIGNvbnN0cnVjdG9yIChkaXNwYXRjaEV2ZW50Rm46IERpc3BhdGNoRXZlbnRGbikge1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50Rm4gPSBkaXNwYXRjaEV2ZW50Rm47XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG1vdXNlRG93biAob3B0aW9uczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGV2ZW50T3B0aW9ucyA9IGF3YWl0IENEUEV2ZW50RGVzY3JpcHRvci5jcmVhdGVNb3VzZUV2ZW50T3B0aW9ucygnbW91c2VQcmVzc2VkJywgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoRXZlbnRGbi5zaW5nbGUoRXZlbnRUeXBlLk1vdXNlLCBldmVudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBtb3VzZVVwIChvcHRpb25zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXZlbnRPcHRpb25zID0gYXdhaXQgQ0RQRXZlbnREZXNjcmlwdG9yLmNyZWF0ZU1vdXNlRXZlbnRPcHRpb25zKCdtb3VzZVJlbGVhc2VkJywgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoRXZlbnRGbi5zaW5nbGUoRXZlbnRUeXBlLk1vdXNlLCBldmVudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBrZXlEb3duIChvcHRpb25zOiBTaW11bGF0ZWRLZXlJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGV2ZW50T3B0aW9ucyA9IENEUEV2ZW50RGVzY3JpcHRvci5jcmVhdGVLZXlEb3duT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hFdmVudEZuLnNpbmdsZShFdmVudFR5cGUuS2V5Ym9hcmQsIGV2ZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIHB1YmxpYyBrZXlVcCAob3B0aW9uczogU2ltdWxhdGVkS2V5SW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBldmVudE9wdGlvbnMgPSBDRFBFdmVudERlc2NyaXB0b3IuY3JlYXRlS2V5VXBPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaEV2ZW50Rm4uc2luZ2xlKEV2ZW50VHlwZS5LZXlib2FyZCwgZXZlbnRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0ZUV2ZW50U2VxdWVuY2UgKGV2ZW50U2VxdWVuY2U6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaEV2ZW50Rm4uc2VxdWVuY2UoZXZlbnRTZXF1ZW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVJbnNlcnRUZXh0ICh0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hFdmVudEZuLnNpbmdsZShFdmVudFR5cGUuSW5zZXJ0VGV4dCwgeyB0ZXh0IH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVNb3VzZU1vdmVFdmVudCAoY3VyclBvc2l0aW9uOiBBeGlzVmFsdWVzRGF0YTxudW1iZXI+LCBtb2RpZmllcnM6IE1vZGlmaWVycyk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBDRFBFdmVudERlc2NyaXB0b3IuY3JlYXRlTW91c2VFdmVudE9wdGlvbnMoJ21vdXNlTW92ZWQnLCB7XG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgY2xpZW50WDogY3VyclBvc2l0aW9uLngsXG4gICAgICAgICAgICAgICAgY2xpZW50WTogY3VyclBvc2l0aW9uLnksXG4gICAgICAgICAgICAgICAgYnV0dG9uOiAgJ25vbmUnLFxuICAgICAgICAgICAgICAgIC4uLm1vZGlmaWVycyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuTW91c2UsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -30,6 +30,9 @@ class NativeAutomationRequestHookEventProvider extends testcafe_hammerhead_1.Req
|
|
|
30
30
|
if (!this.hasRequestEventListeners())
|
|
31
31
|
return false;
|
|
32
32
|
const { pipelineContext, eventFactory } = contextInfo.getContextData(event);
|
|
33
|
+
// NOTE: A long request can be responded after the test is finished.
|
|
34
|
+
if (!eventFactory)
|
|
35
|
+
return false;
|
|
33
36
|
eventFactory.update(event);
|
|
34
37
|
await pipelineContext.onRequestHookConfigureResponse(this, eventFactory);
|
|
35
38
|
if (eventFactory.headersModified)
|
|
@@ -49,4 +52,4 @@ class NativeAutomationRequestHookEventProvider extends testcafe_hammerhead_1.Req
|
|
|
49
52
|
}
|
|
50
53
|
exports.default = NativeAutomationRequestHookEventProvider;
|
|
51
54
|
module.exports = exports.default;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZEQUk2QjtBQUk3Qiw0Q0FBc0Q7QUFDdEQsc0NBQWtEO0FBS2xELE1BQXFCLHdDQUF5QyxTQUFRLDhDQUF3QjtJQUNsRixNQUFNLENBQUMsb0JBQW9CLENBQUUsT0FBd0M7UUFDekUsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBOEIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBRSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWdMO1FBQy9RLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsTUFBTSxLQUFJLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQsWUFBb0QsQ0FBQyxlQUFlLENBQUMsWUFBc0IsQ0FBQyxDQUFDO1lBRTlGLE9BQU87U0FDVjtRQUdELE1BQU0scUJBQXFCLEdBQUcsd0NBQXdDLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLHFCQUFxQjtZQUN0QixPQUFPO1FBRVgsTUFBTSxXQUFXLEdBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RixNQUFNLFlBQVksR0FBRyxJQUFBLDRCQUFtQixFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJELFlBQW9ELENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFFLEtBQXlCLEVBQUUsV0FBK0M7UUFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPO1FBRVgsTUFBTSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVFLE1BQU0sZUFBZSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBRSxLQUF5QixFQUFFLFlBQTJCLEVBQUUsV0FBK0MsRUFBRSxNQUFtQjtRQUNqSixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUVqQixNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUUsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxZQUFZO1lBQ2IsT0FBTyxLQUFLLENBQUM7UUFFaEIsWUFBb0QsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEUsTUFBTSxlQUFlLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpFLElBQUssWUFBb0QsQ0FBQyxlQUFlO1lBQ3JFLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSx3Q0FBd0MsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM1RCxlQUFlO1lBQ2YsWUFBWTtZQUNaLFlBQVk7WUFDWixLQUFLO1lBQ0wsTUFBTTtTQUNULENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxTQUFTLEVBQUMsRUFBRTtZQUN4RSxNQUFNLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFsRUQsMkRBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksXG4gICAgT25SZXNwb25zZUV2ZW50RGF0YSxcbiAgICBSZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRSZXNwb25zZUFzQnVmZmVyIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IGlzUHJlZmxpZ2h0UmVxdWVzdCB9IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvIGZyb20gJy4uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlciBleHRlbmRzIFJlcXVlc3RIb29rRXZlbnRQcm92aWRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2hhc1Jlc3BvbnNlV2l0aEJvZHkgKGNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub25SZXNwb25zZUV2ZW50RGF0YS5zb21lKChldmVudERhdGE6IE9uUmVzcG9uc2VFdmVudERhdGEpID0+IGV2ZW50RGF0YS5vcHRzLmluY2x1ZGVCb2R5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfc2V0UmVzcG9uc2VCb2R5ICh7IHBpcGVsaW5lQ29udGV4dCwgcmVzb3VyY2VCb2R5LCBldmVudEZhY3RvcnksIGV2ZW50LCBjbGllbnQgfTogeyBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGkgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAocmVzb3VyY2VCb2R5Py5sZW5ndGggfHwgaXNQcmVmbGlnaHRSZXF1ZXN0KGV2ZW50KSkge1xuICAgICAgICAgICAgKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuc2V0UmVzcG9uc2VCb2R5KHJlc291cmNlQm9keSBhcyBCdWZmZXIpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IGhhc09uUmVzcG9uc2VXaXRoQm9keSA9IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX2hhc1Jlc3BvbnNlV2l0aEJvZHkocGlwZWxpbmVDb250ZXh0KTtcblxuICAgICAgICBpZiAoIWhhc09uUmVzcG9uc2VXaXRoQm9keSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXNwb25zZU9iaiAgPSBhd2FpdCBjbGllbnQuRmV0Y2guZ2V0UmVzcG9uc2VCb2R5KHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGdldFJlc3BvbnNlQXNCdWZmZXIocmVzcG9uc2VPYmopO1xuXG4gICAgICAgIChldmVudEZhY3RvcnkgYXMgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkpLnNldFJlc3BvbnNlQm9keShyZXNwb25zZUJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvblJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNvbnRleHRJbmZvOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMoKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH0gPSBjb250ZXh0SW5mby5nZXRDb250ZXh0RGF0YShldmVudCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0Lm9uUmVxdWVzdEhvb2tSZXF1ZXN0KHRoaXMsIGV2ZW50RmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uUmVzcG9uc2UgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgY29udGV4dEluZm86IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8sIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVlc3RFdmVudExpc3RlbmVycygpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IGNvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICAvLyBOT1RFOiBBIGxvbmcgcmVxdWVzdCBjYW4gYmUgcmVzcG9uZGVkIGFmdGVyIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLlxuICAgICAgICBpZiAoIWV2ZW50RmFjdG9yeSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAoZXZlbnRGYWN0b3J5IGFzIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5KS51cGRhdGUoZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5vblJlcXVlc3RIb29rQ29uZmlndXJlUmVzcG9uc2UodGhpcywgZXZlbnRGYWN0b3J5KTtcblxuICAgICAgICBpZiAoKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuaGVhZGVyc01vZGlmaWVkKVxuICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuXG4gICAgICAgIGF3YWl0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX3NldFJlc3BvbnNlQm9keSh7XG4gICAgICAgICAgICBwaXBlbGluZUNvbnRleHQsXG4gICAgICAgICAgICByZXNvdXJjZUJvZHksXG4gICAgICAgICAgICBldmVudEZhY3RvcnksXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocGlwZWxpbmVDb250ZXh0Lm9uUmVzcG9uc2VFdmVudERhdGEubWFwKGFzeW5jIGV2ZW50RGF0YSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQub25SZXF1ZXN0SG9va1Jlc3BvbnNlKHRoaXMsIGV2ZW50RmFjdG9yeSwgZXZlbnREYXRhLnJ1bGUsIGV2ZW50RGF0YS5vcHRzKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJldHVybiBtb2RpZmllZDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -7,6 +7,7 @@ const pipeline_context_1 = __importDefault(require("../request-hooks/pipeline-co
|
|
|
7
7
|
const request_paused_event_based_1 = __importDefault(require("../request-hooks/event-factory/request-paused-event-based"));
|
|
8
8
|
const cdp_1 = require("../utils/cdp");
|
|
9
9
|
const frame_navigated_event_based_1 = __importDefault(require("../request-hooks/event-factory/frame-navigated-event-based"));
|
|
10
|
+
const debug_loggers_1 = require("../../utils/debug-loggers");
|
|
10
11
|
class NativeAutomationRequestContextInfo {
|
|
11
12
|
constructor(testRunBridge) {
|
|
12
13
|
this._pipelineContexts = {};
|
|
@@ -33,12 +34,14 @@ class NativeAutomationRequestContextInfo {
|
|
|
33
34
|
const pipelineContext = this._createPipelineContext(requestId);
|
|
34
35
|
const eventFactory = this._createEventFactory(event);
|
|
35
36
|
pipelineContext.setRequestOptions(eventFactory);
|
|
37
|
+
(0, debug_loggers_1.requestPipelineContextLogger)('initialized %s', requestId);
|
|
36
38
|
}
|
|
37
39
|
dispose(requestId) {
|
|
38
40
|
if (!requestId)
|
|
39
41
|
return;
|
|
40
42
|
delete this._pipelineContexts[requestId];
|
|
41
43
|
delete this._eventFactories[requestId];
|
|
44
|
+
(0, debug_loggers_1.requestPipelineContextLogger)('disposed %s', requestId);
|
|
42
45
|
}
|
|
43
46
|
getPipelineContext(requestId) {
|
|
44
47
|
return this._pipelineContexts[requestId];
|
|
@@ -52,4 +55,4 @@ class NativeAutomationRequestContextInfo {
|
|
|
52
55
|
}
|
|
53
56
|
exports.default = NativeAutomationRequestContextInfo;
|
|
54
57
|
module.exports = exports.default;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUZBQWdGO0FBQ2hGLDJIQUE0RztBQUs1RyxzQ0FBa0U7QUFFbEUsNkhBQThHO0FBQzlHLDZEQUF5RTtBQU96RSxNQUFxQixrQ0FBa0M7SUFLbkQsWUFBb0IsYUFBNEI7UUFDNUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxHQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFNLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRU8sc0JBQXNCLENBQUUsU0FBaUI7UUFDN0MsTUFBTSxlQUFlLEdBQUcsSUFBSSwwQkFBK0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsZUFBZSxDQUFDO1FBRXBELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFTyxtQkFBbUIsQ0FBRSxLQUErQztRQUN4RSxNQUFNLFNBQVMsR0FBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFNLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFBLDBCQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLG9DQUFtQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxxQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFMUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUM7UUFFL0MsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLGdCQUFnQixDQUFFLFNBQWlCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sSUFBSSxDQUFFLEtBQStDO1FBQ3hELE1BQU0sU0FBUyxHQUFTLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsTUFBTSxZQUFZLEdBQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhELGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVoRCxJQUFBLDRDQUE0QixFQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDTSxPQUFPLENBQUUsU0FBa0I7UUFDOUIsSUFBSSxDQUFDLFNBQVM7WUFDVixPQUFPO1FBRVgsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZDLElBQUEsNENBQTRCLEVBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxrQkFBa0IsQ0FBRSxTQUFpQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sY0FBYyxDQUFFLEtBQStDO1FBQ2xFLE1BQU0sU0FBUyxHQUFTLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBL0RELHFEQStEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBUZXN0UnVuQnJpZGdlIGZyb20gJy4vdGVzdC1ydW4tYnJpZGdlJztcbmltcG9ydCB7IGdldFJlcXVlc3RJZCwgaXNSZXF1ZXN0UGF1c2VkRXZlbnQgfSBmcm9tICcuLi91dGlscy9jZHAnO1xuaW1wb3J0IHsgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvZXZlbnQtZmFjdG9yeS9mcmFtZS1uYXZpZ2F0ZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IHsgcmVxdWVzdFBpcGVsaW5lQ29udGV4dExvZ2dlciB9IGZyb20gJy4uLy4uL3V0aWxzL2RlYnVnLWxvZ2dlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHREYXRhIHtcbiAgICBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQ7XG4gICAgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BpcGVsaW5lQ29udGV4dHM6IERpY3Rpb25hcnk8TmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRGYWN0b3JpZXM6IERpY3Rpb25hcnk8QmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlKSB7XG4gICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXMgICA9IHt9O1xuICAgICAgICB0aGlzLl90ZXN0UnVuQnJpZGdlICAgID0gdGVzdFJ1bkJyaWRnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVQaXBlbGluZUNvbnRleHQgKHJlcXVlc3RJZDogc3RyaW5nKTogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG5cbiAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0c1tyZXF1ZXN0SWRdID0gcGlwZWxpbmVDb250ZXh0O1xuXG4gICAgICAgIHJldHVybiBwaXBlbGluZUNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRXZlbnRGYWN0b3J5IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50IHwgRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IEJhc2VSZXF1ZXN0SG9va0V2ZW50RmFjdG9yeSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCAgICA9IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCAgICA9IGdldFJlcXVlc3RJZChldmVudCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSA9IGlzUmVxdWVzdFBhdXNlZEV2ZW50KGV2ZW50KSA/IG5ldyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeShldmVudCwgc2Vzc2lvbklkKSA6IG5ldyBGcmFtZU5hdmlnYXRlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkoZXZlbnQsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXSA9IGV2ZW50RmFjdG9yeTtcblxuICAgICAgICByZXR1cm4gZXZlbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEV2ZW50RmFjdG9yeSAocmVxdWVzdElkOiBzdHJpbmcpOiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkICAgICAgID0gZ2V0UmVxdWVzdElkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY3JlYXRlUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSAgICA9IHRoaXMuX2NyZWF0ZUV2ZW50RmFjdG9yeShldmVudCk7XG5cbiAgICAgICAgcGlwZWxpbmVDb250ZXh0LnNldFJlcXVlc3RPcHRpb25zKGV2ZW50RmFjdG9yeSk7XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lQ29udGV4dExvZ2dlcignaW5pdGlhbGl6ZWQgJXMnLCByZXF1ZXN0SWQpO1xuICAgIH1cbiAgICBwdWJsaWMgZGlzcG9zZSAocmVxdWVzdElkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghcmVxdWVzdElkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGRlbGV0ZSB0aGlzLl9waXBlbGluZUNvbnRleHRzW3JlcXVlc3RJZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudEZhY3Rvcmllc1tyZXF1ZXN0SWRdO1xuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUNvbnRleHRMb2dnZXIoJ2Rpc3Bvc2VkICVzJywgcmVxdWVzdElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGlwZWxpbmVDb250ZXh0IChyZXF1ZXN0SWQ6IHN0cmluZyk6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGlwZWxpbmVDb250ZXh0c1tyZXF1ZXN0SWRdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0RGF0YSAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBDb250ZXh0RGF0YSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCAgICAgICA9IGdldFJlcXVlc3RJZChldmVudCk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IHRoaXMuZ2V0UGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSAgICA9IHRoaXMuX2dldEV2ZW50RmFjdG9yeShyZXF1ZXN0SWQpO1xuXG4gICAgICAgIHJldHVybiB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH07XG4gICAgfVxufVxuIl19
|
|
@@ -63,7 +63,9 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
63
63
|
await pipelineContext.handleMockError(this.requestHookEventProvider);
|
|
64
64
|
(0, debug_loggers_1.requestPipelineMockLogger)('%s\n%s', event.networkId, pipelineContext.mock.error);
|
|
65
65
|
}
|
|
66
|
-
async _handleMockResponse(mockedResponse, pipelineContext, event) {
|
|
66
|
+
async _handleMockResponse(mockedResponse, pipelineContext, event, sessionId) {
|
|
67
|
+
if (this._stopped)
|
|
68
|
+
return;
|
|
67
69
|
const mockedResponseBodyStr = mockedResponse.getBody().toString();
|
|
68
70
|
const fulfillInfo = {
|
|
69
71
|
requestId: event.requestId,
|
|
@@ -72,14 +74,14 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
72
74
|
body: mockedResponseBodyStr,
|
|
73
75
|
};
|
|
74
76
|
if (pipelineContext.reqOpts.isAjax)
|
|
75
|
-
await this._resourceInjector.processNonProxiedContent(fulfillInfo, this._client);
|
|
77
|
+
await this._resourceInjector.processNonProxiedContent(fulfillInfo, this._client, sessionId);
|
|
76
78
|
else {
|
|
77
79
|
await this._resourceInjector.processHTMLPageContent(fulfillInfo, {
|
|
78
80
|
isIframe: false,
|
|
79
81
|
contextStorage: this.contextStorage,
|
|
80
|
-
}, this._client);
|
|
82
|
+
}, this._client, sessionId);
|
|
81
83
|
}
|
|
82
|
-
(0, debug_loggers_1.requestPipelineMockLogger)(`
|
|
84
|
+
(0, debug_loggers_1.requestPipelineMockLogger)(`sent mocked response for the ${event.requestId}`);
|
|
83
85
|
}
|
|
84
86
|
_createContinueResponseRequest(event, modified) {
|
|
85
87
|
const continueResponseRequest = {
|
|
@@ -100,9 +102,9 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
100
102
|
await pipelineContext.prepareInjectableUserScripts(eventFactory, this._testRunBridge.getUserScripts());
|
|
101
103
|
return pipelineContext.injectableUserScripts;
|
|
102
104
|
}
|
|
103
|
-
async _respondToOtherRequest(event) {
|
|
105
|
+
async _respondToOtherRequest(event, sessionId) {
|
|
104
106
|
if ((0, testcafe_hammerhead_1.isRedirectStatusCode)(event.responseStatusCode)) {
|
|
105
|
-
await (0, safe_api_1.safeContinueResponse)(this._client, { requestId: event.requestId });
|
|
107
|
+
await (0, safe_api_1.safeContinueResponse)(this._client, { requestId: event.requestId }, sessionId);
|
|
106
108
|
return;
|
|
107
109
|
}
|
|
108
110
|
const resourceInfo = await this._resourceInjector.getDocumentResourceInfo(event, this._client);
|
|
@@ -134,13 +136,13 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
134
136
|
restoringStorages: this.restoringStorages,
|
|
135
137
|
contextStorage: this.contextStorage,
|
|
136
138
|
userScripts,
|
|
137
|
-
}, this._client);
|
|
139
|
+
}, this._client, sessionId);
|
|
138
140
|
this._contextInfo.dispose((0, cdp_1.getRequestId)(event));
|
|
139
141
|
this.restoringStorages = null;
|
|
140
142
|
}
|
|
141
143
|
else {
|
|
142
144
|
const continueResponseRequest = this._createContinueResponseRequest(event, modified);
|
|
143
|
-
await (0, safe_api_1.safeContinueResponse)(this._client, continueResponseRequest);
|
|
145
|
+
await (0, safe_api_1.safeContinueResponse)(this._client, continueResponseRequest, sessionId);
|
|
144
146
|
this._contextInfo.dispose((0, cdp_1.getRequestId)(event));
|
|
145
147
|
}
|
|
146
148
|
}
|
|
@@ -171,14 +173,14 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
171
173
|
return (0, errors_1.failedToFindDNSError)(event.request.url);
|
|
172
174
|
return new Error(event.responseErrorReason);
|
|
173
175
|
}
|
|
174
|
-
async _tryRespondToOtherRequest(event) {
|
|
176
|
+
async _tryRespondToOtherRequest(event, sessionId) {
|
|
175
177
|
try {
|
|
176
178
|
if (event.responseErrorReason && this._shouldRedirectToErrorPage(event)) {
|
|
177
179
|
const error = this._createError(event);
|
|
178
180
|
await this._resourceInjector.redirectToErrorPage(this._client, error, event.request.url);
|
|
179
181
|
}
|
|
180
182
|
else
|
|
181
|
-
await this._respondToOtherRequest(event);
|
|
183
|
+
await this._respondToOtherRequest(event, sessionId);
|
|
182
184
|
}
|
|
183
185
|
catch (err) {
|
|
184
186
|
if (event.networkId && this._failedRequestIds.includes(event.networkId)) {
|
|
@@ -188,25 +190,27 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
188
190
|
throw err;
|
|
189
191
|
}
|
|
190
192
|
}
|
|
191
|
-
async _handleOtherRequests(event) {
|
|
193
|
+
async _handleOtherRequests(event, sessionId) {
|
|
192
194
|
(0, debug_loggers_1.requestPipelineOtherRequestLogger)('%r', event);
|
|
193
195
|
if (!event.responseErrorReason && ((0, cdp_1.isRequest)(event) || (0, testcafe_hammerhead_1.isRedirectStatusCode)(event.responseStatusCode))) {
|
|
194
196
|
this._contextInfo.init(event);
|
|
195
197
|
await this.requestHookEventProvider.onRequest(event, this._contextInfo);
|
|
196
|
-
const pipelineContext = this._contextInfo.getPipelineContext(
|
|
198
|
+
const pipelineContext = this._contextInfo.getPipelineContext((0, cdp_1.getRequestId)(event));
|
|
197
199
|
if (!pipelineContext || !pipelineContext.mock)
|
|
198
|
-
await (0, safe_api_1.safeContinueRequest)(this._client, event, this._createContinueEventArgs(event, pipelineContext.reqOpts));
|
|
200
|
+
await (0, safe_api_1.safeContinueRequest)(this._client, event, sessionId, this._createContinueEventArgs(event, pipelineContext.reqOpts));
|
|
199
201
|
else {
|
|
202
|
+
(0, debug_loggers_1.requestPipelineMockLogger)('begin mocking request %r', event);
|
|
200
203
|
const mockedResponse = await pipelineContext.getMockResponse();
|
|
201
204
|
await this._handleMockErrorIfNecessary(pipelineContext, event);
|
|
202
205
|
const mockedResponseEvent = (0, cdp_1.createRequestPausedEventForResponse)(mockedResponse, event);
|
|
203
206
|
await this.requestHookEventProvider.onResponse(mockedResponseEvent, mockedResponse.getBody(), this._contextInfo, this._client);
|
|
204
|
-
await this._handleMockResponse(mockedResponse, pipelineContext, event);
|
|
207
|
+
await this._handleMockResponse(mockedResponse, pipelineContext, event, sessionId);
|
|
205
208
|
this._contextInfo.dispose((0, cdp_1.getRequestId)(event));
|
|
209
|
+
(0, debug_loggers_1.requestPipelineMockLogger)('end mocking request %r', event);
|
|
206
210
|
}
|
|
207
211
|
}
|
|
208
212
|
else
|
|
209
|
-
await this._tryRespondToOtherRequest(event);
|
|
213
|
+
await this._tryRespondToOtherRequest(event, sessionId);
|
|
210
214
|
}
|
|
211
215
|
_getUploadPostData(event) {
|
|
212
216
|
if (!event.request.postData)
|
|
@@ -238,14 +242,30 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
238
242
|
await this._client.Fetch.enable({
|
|
239
243
|
patterns: ALL_REQUESTS_DATA,
|
|
240
244
|
});
|
|
241
|
-
this._client.
|
|
245
|
+
await this._client.Target.setAutoAttach({
|
|
246
|
+
autoAttach: true,
|
|
247
|
+
waitForDebuggerOnStart: true,
|
|
248
|
+
flatten: true,
|
|
249
|
+
});
|
|
250
|
+
// NOTE: We need to enable the Fetch domain for iframe targets
|
|
251
|
+
// to intercept some requests. We need to use the `sessionId` option
|
|
252
|
+
// in continueRequest/continueResponse/fulfillRequest methods
|
|
253
|
+
await this._client.Target.on('attachedToTarget', async (event) => {
|
|
254
|
+
// @ts-ignore
|
|
255
|
+
await this._client.Runtime.runIfWaitingForDebugger(event.sessionId);
|
|
256
|
+
if (event.targetInfo.type !== 'worker')
|
|
257
|
+
// @ts-ignore
|
|
258
|
+
await this._client.Fetch.enable({ patterns: ALL_REQUESTS_DATA }, event.sessionId);
|
|
259
|
+
});
|
|
260
|
+
// @ts-ignore
|
|
261
|
+
this._client.Fetch.on('requestPaused', async (event, sessionId) => {
|
|
242
262
|
if (this._stopped)
|
|
243
263
|
return;
|
|
244
264
|
const specialRequestHandler = (0, special_handlers_1.default)(event, this.options, this._specialServiceRoutes);
|
|
245
265
|
if (specialRequestHandler)
|
|
246
|
-
await specialRequestHandler(event, this._client, this.options);
|
|
266
|
+
await specialRequestHandler(event, this._client, this.options, sessionId);
|
|
247
267
|
else
|
|
248
|
-
await this._handleOtherRequests(event);
|
|
268
|
+
await this._handleOtherRequests(event, sessionId);
|
|
249
269
|
});
|
|
250
270
|
this._client.Page.on('frameNavigated', async (event) => {
|
|
251
271
|
(0, debug_loggers_1.requestPipelineLogger)('%f', event);
|
|
@@ -306,4 +326,4 @@ class NativeAutomationRequestPipeline extends api_base_1.default {
|
|
|
306
326
|
}
|
|
307
327
|
exports.default = NativeAutomationRequestPipeline;
|
|
308
328
|
module.exports = exports.default;
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFnQztBQVdoQyxxRkFBdUY7QUFDdkYsNkVBQWlGO0FBQ2pGLDhDQUEwRDtBQUUxRCxzQ0FLc0I7QUFFdEIsaUVBQXlDO0FBUXpDLDZEQUltQztBQUVuQyw2REFPNkI7QUFJN0IsMEVBQTBEO0FBQzFELHlDQUF1RTtBQUN2RSwyREFBa0Q7QUFDbEQsMkRBQXdEO0FBQ3hELHdFQUE4QztBQUM5QyxrRUFBZ0U7QUFDaEUsc0NBQXNFO0FBR3RFLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFvQixDQUFDO0FBQzVFLE1BQU0sb0JBQW9CLEdBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFvQixDQUFDO0FBRTdFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRXhFLE1BQXFCLCtCQUFnQyxTQUFRLGtCQUF1QjtJQWFoRixZQUFvQixTQUFpQixFQUFFLE1BQW1CLEVBQUUsT0FBb0M7UUFDNUYsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsR0FBYSxJQUFJLHlCQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFlBQVksR0FBZSxJQUFJLHNCQUFrQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMscUJBQXFCLEdBQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksd0JBQXdDLEVBQUUsQ0FBQztRQUMvRSxJQUFJLENBQUMsaUJBQWlCLEdBQVUsSUFBSSwyQkFBZ0IsQ0FB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QU0sRUFBRSxDQUFDO0lBQ3JDLENBQUM7Q0FDSjtBQTVZRCxrREE0WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGcmFtZU5hdmlnYXRlZEV2ZW50ID0gUHJvdG9jb2wuUGFnZS5GcmFtZU5hdmlnYXRlZEV2ZW50O1xuaW1wb3J0IExvYWRpbmdGYWlsZWRFdmVudCA9IFByb3RvY29sLk5ldHdvcmsuTG9hZGluZ0ZhaWxlZEV2ZW50O1xuaW1wb3J0IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5pbXBvcnQgRnJhbWVUcmVlID0gUHJvdG9jb2wuUGFnZS5GcmFtZVRyZWU7XG5pbXBvcnQgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuaW1wb3J0IFJlcXVlc3RQYXR0ZXJuID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdHRlcm47XG5pbXBvcnQgQ2VydGlmaWNhdGVFcnJvckV2ZW50ID0gUHJvdG9jb2wuU2VjdXJpdHkuQ2VydGlmaWNhdGVFcnJvckV2ZW50O1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlcic7XG5pbXBvcnQgUmVzb3VyY2VJbmplY3RvciwgeyBSZXNvdXJjZUluamVjdG9yT3B0aW9ucyB9IGZyb20gJy4uL3Jlc291cmNlLWluamVjdG9yJztcbmltcG9ydCB7IGNvbnZlcnRUb0hlYWRlckVudHJpZXMgfSBmcm9tICcuLi91dGlscy9oZWFkZXJzJztcblxuaW1wb3J0IHtcbiAgICBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZSxcbiAgICBnZXRSZXF1ZXN0SWQsXG4gICAgaXNSZXF1ZXN0LFxuICAgIGlzVW5hdXRob3JpemVkLFxufSBmcm9tICcuLi91dGlscy9jZHAnO1xuXG5pbXBvcnQgRVJST1JfUk9VVEUgZnJvbSAnLi4vZXJyb3Itcm91dGUnO1xuXG5pbXBvcnQge1xuICAgIENvbnRpbnVlUmVxdWVzdEFyZ3MsXG4gICAgU2Vzc2lvblN0b3JhZ2VJbmZvLFxuICAgIFNwZWNpYWxTZXJ2aWNlUm91dGVzLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7XG4gICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIsXG4gICAgcmVxdWVzdFBpcGVsaW5lT3RoZXJSZXF1ZXN0TG9nZ2VyLFxufSBmcm9tICcuLi8uLi91dGlscy9kZWJ1Zy1sb2dnZXJzJztcblxuaW1wb3J0IHtcbiAgICBJbmNvbWluZ01lc3NhZ2VMaWtlLFxuICAgIGlzUmVkaXJlY3RTdGF0dXNDb2RlLFxuICAgIFNQRUNJQUxfQkxBTktfUEFHRSxcbiAgICBTdG9yYWdlc1NuYXBzaG90LFxuICAgIGluamVjdFVwbG9hZCxcbiAgICBjb250ZW50VHlwZVV0aWxzLFxufSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcblxuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCB7IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgZ2V0U3BlY2lhbFJlcXVlc3RIYW5kbGVyIGZyb20gJy4vc3BlY2lhbC1oYW5kbGVycyc7XG5pbXBvcnQgeyBzYWZlQ29udGludWVSZXF1ZXN0LCBzYWZlQ29udGludWVSZXNwb25zZSB9IGZyb20gJy4vc2FmZS1hcGknO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25BcGlCYXNlIGZyb20gJy4uL2FwaS1iYXNlJztcbmltcG9ydCB7IHJlc2VuZEF1dGhSZXF1ZXN0IH0gZnJvbSAnLi9yZXNlbmRBdXRoUmVxdWVzdCc7XG5pbXBvcnQgVGVzdFJ1bkJyaWRnZSBmcm9tICcuL3Rlc3QtcnVuLWJyaWRnZSc7XG5pbXBvcnQgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RDb250ZXh0SW5mbyBmcm9tICcuL2NvbnRleHQtaW5mbyc7XG5pbXBvcnQgeyBmYWlsZWRUb0ZpbmRETlNFcnJvciwgc3NsQ2VydGlmaWNhdGVFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5cblxuY29uc3QgQUxMX1JFUVVFU1RfUkVTUE9OU0VTID0geyByZXF1ZXN0U3RhZ2U6ICdSZXF1ZXN0JyB9IGFzIFJlcXVlc3RQYXR0ZXJuO1xuY29uc3QgQUxMX1JFUVVFU1RfUkVRVUVTVFMgID0geyByZXF1ZXN0U3RhZ2U6ICdSZXNwb25zZScgfSBhcyBSZXF1ZXN0UGF0dGVybjtcblxuY29uc3QgQUxMX1JFUVVFU1RTX0RBVEEgPSBbQUxMX1JFUVVFU1RfUkVRVUVTVFMsIEFMTF9SRVFVRVNUX1JFU1BPTlNFU107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0UGlwZWxpbmUgZXh0ZW5kcyBOYXRpdmVBdXRvbWF0aW9uQXBpQmFzZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGVzdFJ1bkJyaWRnZTogVGVzdFJ1bkJyaWRnZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250ZXh0SW5mbzogTmF0aXZlQXV0b21hdGlvblJlcXVlc3RDb250ZXh0SW5mbztcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyO1xuICAgIHB1YmxpYyByZXN0b3JpbmdTdG9yYWdlczogU3RvcmFnZXNTbmFwc2hvdCB8IG51bGw7XG4gICAgcHVibGljIGNvbnRleHRTdG9yYWdlOiBTZXNzaW9uU3RvcmFnZUluZm8gfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Jlc291cmNlSW5qZWN0b3I6IFJlc291cmNlSW5qZWN0b3I7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3BlY2lhbFNlcnZpY2VSb3V0ZXM6IFNwZWNpYWxTZXJ2aWNlUm91dGVzO1xuICAgIHByaXZhdGUgX3N0b3BwZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfY3VycmVudEZyYW1lVHJlZTogRnJhbWVUcmVlIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mYWlsZWRSZXF1ZXN0SWRzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIF9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvcjogQ2VydGlmaWNhdGVFcnJvckV2ZW50IHwgbnVsbDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoYnJvd3NlcklkOiBzdHJpbmcsIGNsaWVudDogUHJvdG9jb2xBcGksIG9wdGlvbnM6IE5hdGl2ZUF1dG9tYXRpb25Jbml0T3B0aW9ucykge1xuICAgICAgICBzdXBlcihicm93c2VySWQsIGNsaWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fdGVzdFJ1bkJyaWRnZSAgICAgICAgICAgPSBuZXcgVGVzdFJ1bkJyaWRnZShicm93c2VySWQpO1xuICAgICAgICB0aGlzLl9jb250ZXh0SW5mbyAgICAgICAgICAgICA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvKHRoaXMuX3Rlc3RSdW5CcmlkZ2UpO1xuICAgICAgICB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyAgICA9IHRoaXMuX2dldFNwZWNpYWxTZXJ2aWNlUm91dGVzKCk7XG4gICAgICAgIHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyID0gbmV3IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIoKTtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VJbmplY3RvciAgICAgICAgPSBuZXcgUmVzb3VyY2VJbmplY3Rvcih0aGlzLl90ZXN0UnVuQnJpZGdlKTtcbiAgICAgICAgdGhpcy5fc3RvcHBlZCAgICAgICAgICAgICAgICAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lVHJlZSAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzICAgICAgICA9IFtdO1xuICAgICAgICB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuY29udGV4dFN0b3JhZ2UgICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbnNGb3JSZXNvdXJjZUluamVjdG9yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0T3B0aW9uc0ZvclJlc291cmNlSW5qZWN0b3IgKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fY3JlYXRlUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMoKTtcblxuICAgICAgICB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVzb3VyY2VJbmplY3Rvck9wdGlvbnMgKCk6IFJlc291cmNlSW5qZWN0b3JPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNwZWNpYWxTZXJ2aWNlUm91dGVzOiB0aGlzLl9zcGVjaWFsU2VydmljZVJvdXRlcyxcbiAgICAgICAgICAgIGRldmVsb3BtZW50TW9kZTogICAgICB0aGlzLm9wdGlvbnMuZGV2ZWxvcG1lbnRNb2RlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNwZWNpYWxTZXJ2aWNlUm91dGVzICgpOiBTcGVjaWFsU2VydmljZVJvdXRlcyB7XG4gICAgICAgIGNvbnN0IGJyb3dzZXJDb25uZWN0aW9uID0gdGhpcy5fdGVzdFJ1bkJyaWRnZS5nZXRCcm93c2VyQ29ubmVjdGlvbigpO1xuICAgICAgICBjb25zdCBwcm94eSAgICAgICAgICAgICA9IGJyb3dzZXJDb25uZWN0aW9uLmJyb3dzZXJDb25uZWN0aW9uR2F0ZXdheS5wcm94eTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JQYWdlMTogICAgICAgICAgcHJveHkucmVzb2x2ZVJlbGF0aXZlU2VydmljZVVybChFUlJPUl9ST1VURSwgcHJveHkuc2VydmVyMUluZm8uZG9tYWluKSxcbiAgICAgICAgICAgIGVycm9yUGFnZTI6ICAgICAgICAgIHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoRVJST1JfUk9VVEUsIHByb3h5LnNlcnZlcjJJbmZvLmRvbWFpbiksXG4gICAgICAgICAgICBpZGxlUGFnZTogICAgICAgICAgICBicm93c2VyQ29ubmVjdGlvbi5pZGxlVXJsLFxuICAgICAgICAgICAgb3BlbkZpbGVQcm90b2NvbFVybDogYnJvd3NlckNvbm5lY3Rpb24ub3BlbkZpbGVQcm90b2NvbFVybCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVNb2NrRXJyb3JJZk5lY2Vzc2FyeSAocGlwZWxpbmVDb250ZXh0OiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0LCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghcGlwZWxpbmVDb250ZXh0Lm1vY2suaGFzRXJyb3IpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0LmhhbmRsZU1vY2tFcnJvcih0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlcik7XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTW9ja0xvZ2dlcignJXNcXG4lcycsIGV2ZW50Lm5ldHdvcmtJZCwgcGlwZWxpbmVDb250ZXh0Lm1vY2suZXJyb3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU1vY2tSZXNwb25zZSAobW9ja2VkUmVzcG9uc2U6IEluY29taW5nTWVzc2FnZUxpa2UsIHBpcGVsaW5lQ29udGV4dDogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZUJvZHlTdHIgPSAobW9ja2VkUmVzcG9uc2UuZ2V0Qm9keSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoKTtcblxuICAgICAgICBjb25zdCBmdWxmaWxsSW5mbyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgcmVzcG9uc2VDb2RlOiAgICBtb2NrZWRSZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzOiBjb252ZXJ0VG9IZWFkZXJFbnRyaWVzKG1vY2tlZFJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICAgICAgYm9keTogICAgICAgICAgICBtb2NrZWRSZXNwb25zZUJvZHlTdHIsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHBpcGVsaW5lQ29udGV4dC5yZXFPcHRzLmlzQWpheClcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc05vblByb3hpZWRDb250ZW50KGZ1bGZpbGxJbmZvLCB0aGlzLl9jbGllbnQpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucHJvY2Vzc0hUTUxQYWdlQ29udGVudChmdWxmaWxsSW5mbywge1xuICAgICAgICAgICAgICAgIGlzSWZyYW1lOiAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZXh0U3RvcmFnZTogdGhpcy5jb250ZXh0U3RvcmFnZSxcbiAgICAgICAgICAgIH0sIHRoaXMuX2NsaWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKGBNb2NrIHJlcXVlc3QgJHtldmVudC5yZXF1ZXN0SWR9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ29udGludWVSZXNwb25zZVJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIG1vZGlmaWVkOiBib29sZWFuKTogQ29udGludWVSZXNwb25zZVJlcXVlc3Qge1xuICAgICAgICBjb25zdCBjb250aW51ZVJlc3BvbnNlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkLFxuICAgICAgICB9IGFzIENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0O1xuXG4gICAgICAgIGlmIChtb2RpZmllZCkge1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VIZWFkZXJzID0gZXZlbnQucmVzcG9uc2VIZWFkZXJzO1xuICAgICAgICAgICAgY29udGludWVSZXNwb25zZVJlcXVlc3QucmVzcG9uc2VDb2RlICAgID0gZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC5yZXNvdXJjZVR5cGUgPT09ICdEb2N1bWVudCdcbiAgICAgICAgICAgICYmICF0aGlzLl9pc0lmcmFtZShldmVudC5mcmFtZUlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRVc2VyU2NyaXB0cyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IHRoaXMuX2NvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQucHJlcGFyZUluamVjdGFibGVVc2VyU2NyaXB0cyhldmVudEZhY3RvcnksIHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0VXNlclNjcmlwdHMoKSk7XG5cbiAgICAgICAgcmV0dXJuIHBpcGVsaW5lQ29udGV4dC5pbmplY3RhYmxlVXNlclNjcmlwdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcmVzcG9uZFRvT3RoZXJSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChpc1JlZGlyZWN0U3RhdHVzQ29kZShldmVudC5yZXNwb25zZVN0YXR1c0NvZGUpKSB7XG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZSh0aGlzLl9jbGllbnQsIHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc291cmNlSW5mbyA9IGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IuZ2V0RG9jdW1lbnRSZXNvdXJjZUluZm8oZXZlbnQsIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgaWYgKHJlc291cmNlSW5mby5lcnJvcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFJlZGlyZWN0VG9FcnJvclBhZ2UoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5yZWRpcmVjdFRvRXJyb3JQYWdlKHRoaXMuX2NsaWVudCwgcmVzb3VyY2VJbmZvLmVycm9yLCBldmVudC5yZXF1ZXN0LnVybCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RpZmllZCA9IGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVzcG9uc2UoZXZlbnQsIHJlc291cmNlSW5mby5ib2R5LCB0aGlzLl9jb250ZXh0SW5mbywgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICBpZiAodGhpcy5fbmVlZEluamVjdFJlc291cmNlcyhldmVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGZpbGxJbmZvID0ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogICAgICAgZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyczogZXZlbnQucmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlQ29kZTogICAgZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcixcbiAgICAgICAgICAgICAgICBib2R5OiAgICAgICAgICAgIChyZXNvdXJjZUluZm8uYm9keSBhcyBCdWZmZXIpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9IGFzIEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdDtcblxuICAgICAgICAgICAgLy8gTk9URTogU3RyYW5nZSBiZWhhdmlvciBvZiB0aGUgQ0RQIEFQSTpcbiAgICAgICAgICAgIC8vIGlmIHdlIHBhc3MgdGhlIGVtcHR5IFwicmVzcG9uc2VTdGF0dXNUZXh0XCIgdmFsdWUsIHdlIGdldCBhbiBlcnJvciAnSW52YWxpZCBzdGF0dXMgY29kZSBvciBwaHJhc2UnLlxuICAgICAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlU3RhdHVzVGV4dCAhPT0gJycpXG4gICAgICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VQaHJhc2UgPSBldmVudC5yZXNwb25zZVN0YXR1c1RleHQ7XG5cbiAgICAgICAgICAgIGlmIChpc1VuYXV0aG9yaXplZChldmVudC5yZXNwb25zZVN0YXR1c0NvZGUgYXMgbnVtYmVyKSlcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl90cnlBdXRob3JpemVXaXRoSHR0cEJhc2ljQXV0aENyZWRlbnRpYWxzKGV2ZW50LCBmdWxmaWxsSW5mbyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJTY3JpcHRzID0gYXdhaXQgdGhpcy5fZ2V0VXNlclNjcmlwdHMoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NIVE1MUGFnZUNvbnRlbnQoXG4gICAgICAgICAgICAgICAgZnVsZmlsbEluZm8sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpc0lmcmFtZTogICAgICAgICAgdGhpcy5faXNJZnJhbWUoZXZlbnQuZnJhbWVJZCksXG4gICAgICAgICAgICAgICAgICAgIHVybDogICAgICAgICAgICAgICBldmVudC5yZXF1ZXN0LnVybCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yaW5nU3RvcmFnZXM6IHRoaXMucmVzdG9yaW5nU3RvcmFnZXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRTdG9yYWdlOiAgICB0aGlzLmNvbnRleHRTdG9yYWdlLFxuICAgICAgICAgICAgICAgICAgICB1c2VyU2NyaXB0cyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVzdG9yaW5nU3RvcmFnZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29udGludWVSZXNwb25zZVJlcXVlc3QgPSB0aGlzLl9jcmVhdGVDb250aW51ZVJlc3BvbnNlUmVxdWVzdChldmVudCwgbW9kaWZpZWQpO1xuXG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZSh0aGlzLl9jbGllbnQsIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0KTtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX25lZWRJbmplY3RSZXNvdXJjZXMgKGV2ZW50OiBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGV2ZW50LnJlc291cmNlVHlwZSAhPT0gJ0RvY3VtZW50JylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IGV2ZW50LnJlc3BvbnNlSGVhZGVyc1xuICAgICAgICAgICAgPy5maW5kKGhlYWRlciA9PiBoZWFkZXIubmFtZS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJylcbiAgICAgICAgICAgID8udmFsdWU7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRUeXBlVXRpbHMuaXNQYWdlKGNvbnRlbnRUeXBlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF90cnlBdXRob3JpemVXaXRoSHR0cEJhc2ljQXV0aENyZWRlbnRpYWxzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBmdWxmaWxsSW5mbzogRnVsZmlsbFJlcXVlc3RSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5fdGVzdFJ1bi5nZXRBdXRoQ3JlZGVudGlhbHMoKTtcblxuICAgICAgICBpZiAoIWNyZWRlbnRpYWxzKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGF1dGhSZXF1ZXN0ID0gYXdhaXQgcmVzZW5kQXV0aFJlcXVlc3QoZXZlbnQucmVxdWVzdCwgY3JlZGVudGlhbHMpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXV0aFJlcXVlc3QgIT09ICdzdHJpbmcnICYmICFpc1VuYXV0aG9yaXplZChhdXRoUmVxdWVzdC5zdGF0dXMpKSB7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZUNvZGUgPSBhdXRoUmVxdWVzdC5zdGF0dXM7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5ib2R5ID0gYXV0aFJlcXVlc3QuYm9keS50b1N0cmluZygpO1xuICAgICAgICAgICAgZnVsZmlsbEluZm8ucmVzcG9uc2VQaHJhc2UgPSBhdXRoUmVxdWVzdC5zdGF0dXNUZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRXJyb3IgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQpOiBFcnJvciB7XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvcilcbiAgICAgICAgICAgIHJldHVybiBzc2xDZXJ0aWZpY2F0ZUVycm9yKHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yLmVycm9yVHlwZSk7XG5cbiAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gPT09ICdOYW1lTm90UmVzb2x2ZWQnKVxuICAgICAgICAgICAgcmV0dXJuIGZhaWxlZFRvRmluZEROU0Vycm9yKGV2ZW50LnJlcXVlc3QudXJsKTtcblxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3RyeVJlc3BvbmRUb090aGVyUmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gJiYgdGhpcy5fc2hvdWxkUmVkaXJlY3RUb0Vycm9yUGFnZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX2NyZWF0ZUVycm9yKGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucmVkaXJlY3RUb0Vycm9yUGFnZSh0aGlzLl9jbGllbnQsIGVycm9yLCBldmVudC5yZXF1ZXN0LnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzcG9uZFRvT3RoZXJSZXF1ZXN0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQubmV0d29ya0lkICYmIHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMuaW5jbHVkZXMoZXZlbnQubmV0d29ya0lkKSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZSh0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLCBldmVudC5uZXR3b3JrSWQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVPdGhlclJlcXVlc3RzIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZU90aGVyUmVxdWVzdExvZ2dlcignJXInLCBldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5yZXNwb25zZUVycm9yUmVhc29uICYmIChpc1JlcXVlc3QoZXZlbnQpIHx8IGlzUmVkaXJlY3RTdGF0dXNDb2RlKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSkpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5pbml0KGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXF1ZXN0KGV2ZW50LCB0aGlzLl9jb250ZXh0SW5mbyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IHRoaXMuX2NvbnRleHRJbmZvLmdldFBpcGVsaW5lQ29udGV4dChldmVudC5uZXR3b3JrSWQgYXMgc3RyaW5nKTtcblxuICAgICAgICAgICAgaWYgKCFwaXBlbGluZUNvbnRleHQgfHwgIXBpcGVsaW5lQ29udGV4dC5tb2NrKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlcXVlc3QodGhpcy5fY2xpZW50LCBldmVudCwgdGhpcy5fY3JlYXRlQ29udGludWVFdmVudEFyZ3MoZXZlbnQsIHBpcGVsaW5lQ29udGV4dC5yZXFPcHRzKSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZSA9IGF3YWl0IHBpcGVsaW5lQ29udGV4dC5nZXRNb2NrUmVzcG9uc2UoKTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU1vY2tFcnJvcklmTmVjZXNzYXJ5KHBpcGVsaW5lQ29udGV4dCwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VkUmVzcG9uc2VFdmVudCA9IGNyZWF0ZVJlcXVlc3RQYXVzZWRFdmVudEZvclJlc3BvbnNlKG1vY2tlZFJlc3BvbnNlLCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5vblJlc3BvbnNlKG1vY2tlZFJlc3BvbnNlRXZlbnQsIG1vY2tlZFJlc3BvbnNlLmdldEJvZHkoKSwgdGhpcy5fY29udGV4dEluZm8sIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVNb2NrUmVzcG9uc2UobW9ja2VkUmVzcG9uc2UsIHBpcGVsaW5lQ29udGV4dCwgZXZlbnQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl90cnlSZXNwb25kVG9PdGhlclJlcXVlc3QoZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFVwbG9hZFBvc3REYXRhIChldmVudDogUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdXNlZEV2ZW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFldmVudC5yZXF1ZXN0LnBvc3REYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcblxuICAgICAgICBjb25zdCBjb250ZW50VHlwZUhlYWRlciA9IGV2ZW50LnJlcXVlc3QuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBwb3N0RGF0YSAgICAgICAgICA9IEJ1ZmZlci5mcm9tKGV2ZW50LnJlcXVlc3QucG9zdERhdGEsICd1dGYtOCcpO1xuICAgICAgICBjb25zdCBib2R5V2l0aFVwbG9hZHMgICA9IGluamVjdFVwbG9hZChjb250ZW50VHlwZUhlYWRlciwgcG9zdERhdGEpO1xuXG4gICAgICAgIHJldHVybiBib2R5V2l0aFVwbG9hZHMgPyBib2R5V2l0aFVwbG9hZHMudG9TdHJpbmcoJ2Jhc2U2NCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RvcEZyYW1lTmF2aWdhdGlvbiAoZXZlbnQ6IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnR5cGUgPT09ICdOYXZpZ2F0aW9uJ1xuICAgICAgICAgICAgJiYgIWV2ZW50LmZyYW1lLnBhcmVudElkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3VwZGF0ZUN1cnJlbnRGcmFtZVRyZWUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBOT1RFOiBEdWUgdG8gQ0RQIHJlc3RyaWN0aW9ucyAoaXQgaGFuZ3MpLCB3ZSBjYW4ndCBnZXQgdGhlIGZyYW1lIHRyZWVcbiAgICAgICAgLy8gcmlnaHQgYmVmb3JlIGluamVjdGluZyBzZXJ2aWNlIHNjcmlwdHMuXG4gICAgICAgIC8vIFNvLCB3ZSBhcmUgZm9yY2VkIHRyYWNraW5nIGZyYW1lcyB0cmVlLlxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9jbGllbnQuUGFnZS5nZXRGcmFtZVRyZWUoKTtcblxuICAgICAgICB0aGlzLl9jdXJyZW50RnJhbWVUcmVlID0gcmVzdWx0LmZyYW1lVHJlZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lmcmFtZSAoZnJhbWVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudEZyYW1lVHJlZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudEZyYW1lVHJlZS5mcmFtZS5pZCAhPT0gZnJhbWVJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3RhcnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAvLyBOT1RFOiBXZSBhcmUgZm9yY2VkIHRvIGhhbmRsZSBhbGwgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBhdCBvbmNlXG4gICAgICAgIC8vIGJlY2F1c2UgQ0RQIEFQSSBkb2VzIG5vdCBhbGxvdyBzcGVjaWZ5aW5nIHJlcXVlc3QgZmlsdGVyaW5nIGJlaGF2aW9yIGZvciBkaWZmZXJlbnQgaGFuZGxlcnMuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5GZXRjaC5lbmFibGUoe1xuICAgICAgICAgICAgcGF0dGVybnM6IEFMTF9SRVFVRVNUU19EQVRBLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuRmV0Y2gub24oJ3JlcXVlc3RQYXVzZWQnLCBhc3luYyAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIgPSBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIoZXZlbnQsIHRoaXMub3B0aW9ucywgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMpO1xuXG4gICAgICAgICAgICBpZiAoc3BlY2lhbFJlcXVlc3RIYW5kbGVyKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNwZWNpYWxSZXF1ZXN0SGFuZGxlcihldmVudCwgdGhpcy5fY2xpZW50LCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU90aGVyUmVxdWVzdHMoZXZlbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuUGFnZS5vbignZnJhbWVOYXZpZ2F0ZWQnLCBhc3luYyAoZXZlbnQ6IEZyYW1lTmF2aWdhdGVkRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcignJWYnLCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdG9wRnJhbWVOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICAgICAgICAgIHx8IGV2ZW50LmZyYW1lLnVybCAhPT0gU1BFQ0lBTF9CTEFOS19QQUdFKVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uaW5pdChldmVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVzZXJTY3JpcHRzID0gYXdhaXQgdGhpcy5fZ2V0VXNlclNjcmlwdHMoZXZlbnQpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NBYm91dEJsYW5rUGFnZShldmVudCwgdXNlclNjcmlwdHMsIHRoaXMuY29udGV4dFN0b3JhZ2UsIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5QYWdlLm9uKCdmcmFtZVN0YXJ0ZWRMb2FkaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fdXBkYXRlQ3VycmVudEZyYW1lVHJlZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuTmV0d29yay5vbignbG9hZGluZ0ZhaWxlZCcsIGFzeW5jIChldmVudDogTG9hZGluZ0ZhaWxlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoJyVsJywgZXZlbnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9mYWlsZWRSZXF1ZXN0SWRzLnB1c2goZXZlbnQucmVxdWVzdElkKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LnJlcXVlc3RJZClcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGV2ZW50LnJlcXVlc3RJZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5QYWdlLnNldEJ5cGFzc0NTUCh7IGVuYWJsZWQ6IHRydWUgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlNlY3VyaXR5LmVuYWJsZSgpO1xuXG4gICAgICAgIHRoaXMuX2NsaWVudC5TZWN1cml0eS5vbignY2VydGlmaWNhdGVFcnJvcicsIGFzeW5jIChldmVudDogQ2VydGlmaWNhdGVFcnJvckV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ2VydGlmaWNhdGVFcnJvciA9IGV2ZW50O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RvcCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N0b3BwZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkaXNwb3NlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LkZldGNoLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVDb250aW51ZUV2ZW50QXJncyAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCwgcmVxT3B0czogYW55KTogQ29udGludWVSZXF1ZXN0QXJncyB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVkVXJsICA9IG5ldyBVUkwoZXZlbnQucmVxdWVzdC51cmwpO1xuICAgICAgICBjb25zdCBob3N0ICAgICAgICAgPSBtb2RpZmllZFVybC5ob3N0O1xuXG4gICAgICAgIGxldCBob3N0TW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHBvcnRNb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChtb2RpZmllZFVybC5ob3N0bmFtZSAhPT0gcmVxT3B0cy5ob3N0bmFtZSkge1xuICAgICAgICAgICAgbW9kaWZpZWRVcmwuaG9zdG5hbWUgPSByZXFPcHRzLmhvc3RuYW1lO1xuICAgICAgICAgICAgaG9zdE1vZGlmaWVkICAgICAgICAgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vZGlmaWVkVXJsLnBvcnQgIT09IHJlcU9wdHMucG9ydCkge1xuICAgICAgICAgICAgbW9kaWZpZWRVcmwucG9ydCA9IHJlcU9wdHMucG9ydDtcbiAgICAgICAgICAgIHBvcnRNb2RpZmllZCAgICAgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhvc3QgIT09IHJlcU9wdHMuaG9zdCkge1xuICAgICAgICAgICAgY29uc3QgeyBwb3J0LCBob3N0bmFtZSB9ID0gbmV3IFVSTChyZXFPcHRzLnByb3RvY29sICsgJy8vJyArIHJlcU9wdHMuaG9zdCk7XG5cbiAgICAgICAgICAgIGlmICghaG9zdE1vZGlmaWVkKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVkVXJsLmhvc3RuYW1lID0gaG9zdG5hbWU7XG5cbiAgICAgICAgICAgIGlmICghcG9ydE1vZGlmaWVkKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVkVXJsLnBvcnQgPSBwb3J0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zdERhdGEgPSB0aGlzLl9nZXRVcGxvYWRQb3N0RGF0YShldmVudCk7XG4gICAgICAgIGNvbnN0IHVybCAgICAgID0gbW9kaWZpZWRVcmwudG9TdHJpbmcoKSAhPT0gZXZlbnQucmVxdWVzdC51cmwgPyBtb2RpZmllZFVybC50b1N0cmluZygpIDogdm9pZCAwO1xuICAgICAgICBjb25zdCBtZXRob2QgICA9IHJlcU9wdHMubWV0aG9kO1xuXG4gICAgICAgIHJldHVybiB7IHBvc3REYXRhLCB1cmwsIG1ldGhvZCB9O1xuICAgIH1cbn1cbiJdfQ==
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFnQztBQVdoQyxxRkFBdUY7QUFDdkYsNkVBQWlGO0FBQ2pGLDhDQUEwRDtBQUUxRCxzQ0FLc0I7QUFFdEIsaUVBQXlDO0FBU3pDLDZEQUltQztBQUVuQyw2REFPNkI7QUFJN0IsMEVBQTBEO0FBQzFELHlDQUF1RTtBQUN2RSwyREFBa0Q7QUFDbEQsMkRBQXdEO0FBQ3hELHdFQUE4QztBQUM5QyxrRUFBZ0U7QUFDaEUsc0NBQXNFO0FBR3RFLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFvQixDQUFDO0FBQzVFLE1BQU0sb0JBQW9CLEdBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFvQixDQUFDO0FBRTdFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRXhFLE1BQXFCLCtCQUFnQyxTQUFRLGtCQUF1QjtJQWFoRixZQUFvQixTQUFpQixFQUFFLE1BQW1CLEVBQUUsT0FBb0M7UUFDNUYsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsR0FBYSxJQUFJLHlCQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFlBQVksR0FBZSxJQUFJLHNCQUFrQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMscUJBQXFCLEdBQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksd0JBQXdDLEVBQUUsQ0FBQztRQUMvRSxJQUFJLENBQUMsaUJBQWlCLEdBQVUsSUFBSSwyQkFBZ0IsQ0FB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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW1vdmUgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGcmFtZU5hdmlnYXRlZEV2ZW50ID0gUHJvdG9jb2wuUGFnZS5GcmFtZU5hdmlnYXRlZEV2ZW50O1xuaW1wb3J0IExvYWRpbmdGYWlsZWRFdmVudCA9IFByb3RvY29sLk5ldHdvcmsuTG9hZGluZ0ZhaWxlZEV2ZW50O1xuaW1wb3J0IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guQ29udGludWVSZXNwb25zZVJlcXVlc3Q7XG5pbXBvcnQgRnJhbWVUcmVlID0gUHJvdG9jb2wuUGFnZS5GcmFtZVRyZWU7XG5pbXBvcnQgRnVsZmlsbFJlcXVlc3RSZXF1ZXN0ID0gUHJvdG9jb2wuRmV0Y2guRnVsZmlsbFJlcXVlc3RSZXF1ZXN0O1xuaW1wb3J0IFJlcXVlc3RQYXR0ZXJuID0gUHJvdG9jb2wuRmV0Y2guUmVxdWVzdFBhdHRlcm47XG5pbXBvcnQgQ2VydGlmaWNhdGVFcnJvckV2ZW50ID0gUHJvdG9jb2wuU2VjdXJpdHkuQ2VydGlmaWNhdGVFcnJvckV2ZW50O1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlcic7XG5pbXBvcnQgUmVzb3VyY2VJbmplY3RvciwgeyBSZXNvdXJjZUluamVjdG9yT3B0aW9ucyB9IGZyb20gJy4uL3Jlc291cmNlLWluamVjdG9yJztcbmltcG9ydCB7IGNvbnZlcnRUb0hlYWRlckVudHJpZXMgfSBmcm9tICcuLi91dGlscy9oZWFkZXJzJztcblxuaW1wb3J0IHtcbiAgICBjcmVhdGVSZXF1ZXN0UGF1c2VkRXZlbnRGb3JSZXNwb25zZSxcbiAgICBnZXRSZXF1ZXN0SWQsXG4gICAgaXNSZXF1ZXN0LFxuICAgIGlzVW5hdXRob3JpemVkLFxufSBmcm9tICcuLi91dGlscy9jZHAnO1xuXG5pbXBvcnQgRVJST1JfUk9VVEUgZnJvbSAnLi4vZXJyb3Itcm91dGUnO1xuXG5pbXBvcnQge1xuICAgIENvbnRpbnVlUmVxdWVzdEFyZ3MsXG4gICAgU2Vzc2lvbklkLFxuICAgIFNlc3Npb25TdG9yYWdlSW5mbyxcbiAgICBTcGVjaWFsU2VydmljZVJvdXRlcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge1xuICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcixcbiAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyLFxuICAgIHJlcXVlc3RQaXBlbGluZU90aGVyUmVxdWVzdExvZ2dlcixcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5cbmltcG9ydCB7XG4gICAgSW5jb21pbmdNZXNzYWdlTGlrZSxcbiAgICBpc1JlZGlyZWN0U3RhdHVzQ29kZSxcbiAgICBTUEVDSUFMX0JMQU5LX1BBR0UsXG4gICAgU3RvcmFnZXNTbmFwc2hvdCxcbiAgICBpbmplY3RVcGxvYWQsXG4gICAgY29udGVudFR5cGVVdGlscyxcbn0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5cbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvcGlwZWxpbmUtY29udGV4dCc7XG5pbXBvcnQgeyBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IGdldFNwZWNpYWxSZXF1ZXN0SGFuZGxlciBmcm9tICcuL3NwZWNpYWwtaGFuZGxlcnMnO1xuaW1wb3J0IHsgc2FmZUNvbnRpbnVlUmVxdWVzdCwgc2FmZUNvbnRpbnVlUmVzcG9uc2UgfSBmcm9tICcuL3NhZmUtYXBpJztcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uQXBpQmFzZSBmcm9tICcuLi9hcGktYmFzZSc7XG5pbXBvcnQgeyByZXNlbmRBdXRoUmVxdWVzdCB9IGZyb20gJy4vcmVzZW5kQXV0aFJlcXVlc3QnO1xuaW1wb3J0IFRlc3RSdW5CcmlkZ2UgZnJvbSAnLi90ZXN0LXJ1bi1icmlkZ2UnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8gZnJvbSAnLi9jb250ZXh0LWluZm8nO1xuaW1wb3J0IHsgZmFpbGVkVG9GaW5kRE5TRXJyb3IsIHNzbENlcnRpZmljYXRlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5cbmNvbnN0IEFMTF9SRVFVRVNUX1JFU1BPTlNFUyA9IHsgcmVxdWVzdFN0YWdlOiAnUmVxdWVzdCcgfSBhcyBSZXF1ZXN0UGF0dGVybjtcbmNvbnN0IEFMTF9SRVFVRVNUX1JFUVVFU1RTICA9IHsgcmVxdWVzdFN0YWdlOiAnUmVzcG9uc2UnIH0gYXMgUmVxdWVzdFBhdHRlcm47XG5cbmNvbnN0IEFMTF9SRVFVRVNUU19EQVRBID0gW0FMTF9SRVFVRVNUX1JFUVVFU1RTLCBBTExfUkVRVUVTVF9SRVNQT05TRVNdO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdFBpcGVsaW5lIGV4dGVuZHMgTmF0aXZlQXV0b21hdGlvbkFwaUJhc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rlc3RSdW5CcmlkZ2U6IFRlc3RSdW5CcmlkZ2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udGV4dEluZm86IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm87XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjogTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlcjtcbiAgICBwdWJsaWMgcmVzdG9yaW5nU3RvcmFnZXM6IFN0b3JhZ2VzU25hcHNob3QgfCBudWxsO1xuICAgIHB1YmxpYyBjb250ZXh0U3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VJbmZvIHwgbnVsbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvdXJjZUluamVjdG9yOiBSZXNvdXJjZUluamVjdG9yO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NwZWNpYWxTZXJ2aWNlUm91dGVzOiBTcGVjaWFsU2VydmljZVJvdXRlcztcbiAgICBwcml2YXRlIF9zdG9wcGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2N1cnJlbnRGcmFtZVRyZWU6IEZyYW1lVHJlZSB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmFpbGVkUmVxdWVzdElkczogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBfcGVuZGluZ0NlcnRpZmljYXRlRXJyb3I6IENlcnRpZmljYXRlRXJyb3JFdmVudCB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKGJyb3dzZXJJZDogc3RyaW5nLCBjbGllbnQ6IFByb3RvY29sQXBpLCBvcHRpb25zOiBOYXRpdmVBdXRvbWF0aW9uSW5pdE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoYnJvd3NlcklkLCBjbGllbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3Rlc3RSdW5CcmlkZ2UgICAgICAgICAgID0gbmV3IFRlc3RSdW5CcmlkZ2UoYnJvd3NlcklkKTtcbiAgICAgICAgdGhpcy5fY29udGV4dEluZm8gICAgICAgICAgICAgPSBuZXcgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RDb250ZXh0SW5mbyh0aGlzLl90ZXN0UnVuQnJpZGdlKTtcbiAgICAgICAgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMgICAgPSB0aGlzLl9nZXRTcGVjaWFsU2VydmljZVJvdXRlcygpO1xuICAgICAgICB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlciA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyKCk7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlSW5qZWN0b3IgICAgICAgID0gbmV3IFJlc291cmNlSW5qZWN0b3IodGhpcy5fdGVzdFJ1bkJyaWRnZSk7XG4gICAgICAgIHRoaXMuX3N0b3BwZWQgICAgICAgICAgICAgICAgID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRGcmFtZVRyZWUgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmFpbGVkUmVxdWVzdElkcyAgICAgICAgPSBbXTtcbiAgICAgICAgdGhpcy5yZXN0b3JpbmdTdG9yYWdlcyAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbnRleHRTdG9yYWdlICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9zZXRPcHRpb25zRm9yUmVzb3VyY2VJbmplY3RvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldE9wdGlvbnNGb3JSZXNvdXJjZUluamVjdG9yICgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuX2NyZWF0ZVJlc291cmNlSW5qZWN0b3JPcHRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZVJlc291cmNlSW5qZWN0b3JPcHRpb25zICgpOiBSZXNvdXJjZUluamVjdG9yT3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcGVjaWFsU2VydmljZVJvdXRlczogdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMsXG4gICAgICAgICAgICBkZXZlbG9wbWVudE1vZGU6ICAgICAgdGhpcy5vcHRpb25zLmRldmVsb3BtZW50TW9kZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRTcGVjaWFsU2VydmljZVJvdXRlcyAoKTogU3BlY2lhbFNlcnZpY2VSb3V0ZXMge1xuICAgICAgICBjb25zdCBicm93c2VyQ29ubmVjdGlvbiA9IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0QnJvd3NlckNvbm5lY3Rpb24oKTtcbiAgICAgICAgY29uc3QgcHJveHkgICAgICAgICAgICAgPSBicm93c2VyQ29ubmVjdGlvbi5icm93c2VyQ29ubmVjdGlvbkdhdGV3YXkucHJveHk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yUGFnZTE6ICAgICAgICAgIHByb3h5LnJlc29sdmVSZWxhdGl2ZVNlcnZpY2VVcmwoRVJST1JfUk9VVEUsIHByb3h5LnNlcnZlcjFJbmZvLmRvbWFpbiksXG4gICAgICAgICAgICBlcnJvclBhZ2UyOiAgICAgICAgICBwcm94eS5yZXNvbHZlUmVsYXRpdmVTZXJ2aWNlVXJsKEVSUk9SX1JPVVRFLCBwcm94eS5zZXJ2ZXIySW5mby5kb21haW4pLFxuICAgICAgICAgICAgaWRsZVBhZ2U6ICAgICAgICAgICAgYnJvd3NlckNvbm5lY3Rpb24uaWRsZVVybCxcbiAgICAgICAgICAgIG9wZW5GaWxlUHJvdG9jb2xVcmw6IGJyb3dzZXJDb25uZWN0aW9uLm9wZW5GaWxlUHJvdG9jb2xVcmwsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTW9ja0Vycm9ySWZOZWNlc3NhcnkgKHBpcGVsaW5lQ29udGV4dDogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIXBpcGVsaW5lQ29udGV4dC5tb2NrLmhhc0Vycm9yKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5oYW5kbGVNb2NrRXJyb3IodGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIpO1xuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoJyVzXFxuJXMnLCBldmVudC5uZXR3b3JrSWQsIHBpcGVsaW5lQ29udGV4dC5tb2NrLmVycm9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9oYW5kbGVNb2NrUmVzcG9uc2UgKG1vY2tlZFJlc3BvbnNlOiBJbmNvbWluZ01lc3NhZ2VMaWtlLCBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQsIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLl9zdG9wcGVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG1vY2tlZFJlc3BvbnNlQm9keVN0ciA9IChtb2NrZWRSZXNwb25zZS5nZXRCb2R5KCkgYXMgQnVmZmVyKS50b1N0cmluZygpO1xuXG4gICAgICAgIGNvbnN0IGZ1bGZpbGxJbmZvID0ge1xuICAgICAgICAgICAgcmVxdWVzdElkOiAgICAgICBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgICAgICByZXNwb25zZUNvZGU6ICAgIG1vY2tlZFJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgICByZXNwb25zZUhlYWRlcnM6IGNvbnZlcnRUb0hlYWRlckVudHJpZXMobW9ja2VkUmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgICAgICBib2R5OiAgICAgICAgICAgIG1vY2tlZFJlc3BvbnNlQm9keVN0cixcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocGlwZWxpbmVDb250ZXh0LnJlcU9wdHMuaXNBamF4KVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzTm9uUHJveGllZENvbnRlbnQoZnVsZmlsbEluZm8sIHRoaXMuX2NsaWVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLnByb2Nlc3NIVE1MUGFnZUNvbnRlbnQoZnVsZmlsbEluZm8sIHtcbiAgICAgICAgICAgICAgICBpc0lmcmFtZTogICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGV4dFN0b3JhZ2U6IHRoaXMuY29udGV4dFN0b3JhZ2UsXG4gICAgICAgICAgICB9LCB0aGlzLl9jbGllbnQsIHNlc3Npb25JZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKGBzZW50IG1vY2tlZCByZXNwb25zZSBmb3IgdGhlICR7ZXZlbnQucmVxdWVzdElkfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBtb2RpZmllZDogYm9vbGVhbik6IENvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0IHtcbiAgICAgICAgY29uc3QgY29udGludWVSZXNwb25zZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICByZXF1ZXN0SWQ6IGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgfSBhcyBDb250aW51ZVJlc3BvbnNlUmVxdWVzdDtcblxuICAgICAgICBpZiAobW9kaWZpZWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0LnJlc3BvbnNlSGVhZGVycyA9IGV2ZW50LnJlc3BvbnNlSGVhZGVycztcbiAgICAgICAgICAgIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0LnJlc3BvbnNlQ29kZSAgICA9IGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSBhcyBudW1iZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWVSZXNwb25zZVJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvdWxkUmVkaXJlY3RUb0Vycm9yUGFnZSAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQucmVzb3VyY2VUeXBlID09PSAnRG9jdW1lbnQnXG4gICAgICAgICAgICAmJiAhdGhpcy5faXNJZnJhbWUoZXZlbnQuZnJhbWVJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0VXNlclNjcmlwdHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQgfCBGcmFtZU5hdmlnYXRlZEV2ZW50KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH0gPSB0aGlzLl9jb250ZXh0SW5mby5nZXRDb250ZXh0RGF0YShldmVudCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0LnByZXBhcmVJbmplY3RhYmxlVXNlclNjcmlwdHMoZXZlbnRGYWN0b3J5LCB0aGlzLl90ZXN0UnVuQnJpZGdlLmdldFVzZXJTY3JpcHRzKCkpO1xuXG4gICAgICAgIHJldHVybiBwaXBlbGluZUNvbnRleHQuaW5qZWN0YWJsZVVzZXJTY3JpcHRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3Jlc3BvbmRUb090aGVyUmVxdWVzdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKGlzUmVkaXJlY3RTdGF0dXNDb2RlKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSkpIHtcbiAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlc3BvbnNlKHRoaXMuX2NsaWVudCwgeyByZXF1ZXN0SWQ6IGV2ZW50LnJlcXVlc3RJZCB9LCBzZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvdXJjZUluZm8gPSBhd2FpdCB0aGlzLl9yZXNvdXJjZUluamVjdG9yLmdldERvY3VtZW50UmVzb3VyY2VJbmZvKGV2ZW50LCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgIGlmIChyZXNvdXJjZUluZm8uZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zaG91bGRSZWRpcmVjdFRvRXJyb3JQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucmVkaXJlY3RUb0Vycm9yUGFnZSh0aGlzLl9jbGllbnQsIHJlc291cmNlSW5mby5lcnJvciwgZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kaWZpZWQgPSBhd2FpdCB0aGlzLnJlcXVlc3RIb29rRXZlbnRQcm92aWRlci5vblJlc3BvbnNlKGV2ZW50LCByZXNvdXJjZUluZm8uYm9keSwgdGhpcy5fY29udGV4dEluZm8sIHRoaXMuX2NsaWVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX25lZWRJbmplY3RSZXNvdXJjZXMoZXZlbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxmaWxsSW5mbyA9IHtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SWQ6ICAgICAgIGV2ZW50LnJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgICByZXNwb25zZUhlYWRlcnM6IGV2ZW50LnJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgICAgICAgICByZXNwb25zZUNvZGU6ICAgIGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSBhcyBudW1iZXIsXG4gICAgICAgICAgICAgICAgYm9keTogICAgICAgICAgICAocmVzb3VyY2VJbmZvLmJvZHkgYXMgQnVmZmVyKS50b1N0cmluZygpLFxuICAgICAgICAgICAgfSBhcyBGdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5cbiAgICAgICAgICAgIC8vIE5PVEU6IFN0cmFuZ2UgYmVoYXZpb3Igb2YgdGhlIENEUCBBUEk6XG4gICAgICAgICAgICAvLyBpZiB3ZSBwYXNzIHRoZSBlbXB0eSBcInJlc3BvbnNlU3RhdHVzVGV4dFwiIHZhbHVlLCB3ZSBnZXQgYW4gZXJyb3IgJ0ludmFsaWQgc3RhdHVzIGNvZGUgb3IgcGhyYXNlJy5cbiAgICAgICAgICAgIGlmIChldmVudC5yZXNwb25zZVN0YXR1c1RleHQgIT09ICcnKVxuICAgICAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlUGhyYXNlID0gZXZlbnQucmVzcG9uc2VTdGF0dXNUZXh0O1xuXG4gICAgICAgICAgICBpZiAoaXNVbmF1dGhvcml6ZWQoZXZlbnQucmVzcG9uc2VTdGF0dXNDb2RlIGFzIG51bWJlcikpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fdHJ5QXV0aG9yaXplV2l0aEh0dHBCYXNpY0F1dGhDcmVkZW50aWFscyhldmVudCwgZnVsZmlsbEluZm8pO1xuXG4gICAgICAgICAgICBjb25zdCB1c2VyU2NyaXB0cyA9IGF3YWl0IHRoaXMuX2dldFVzZXJTY3JpcHRzKGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzSFRNTFBhZ2VDb250ZW50KFxuICAgICAgICAgICAgICAgIGZ1bGZpbGxJbmZvLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaXNJZnJhbWU6ICAgICAgICAgIHRoaXMuX2lzSWZyYW1lKGV2ZW50LmZyYW1lSWQpLFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICAgICAgICAgICAgICAgZXZlbnQucmVxdWVzdC51cmwsXG4gICAgICAgICAgICAgICAgICAgIHJlc3RvcmluZ1N0b3JhZ2VzOiB0aGlzLnJlc3RvcmluZ1N0b3JhZ2VzLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0U3RvcmFnZTogICAgdGhpcy5jb250ZXh0U3RvcmFnZSxcbiAgICAgICAgICAgICAgICAgICAgdXNlclNjcmlwdHMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGllbnQsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVzdG9yaW5nU3RvcmFnZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29udGludWVSZXNwb25zZVJlcXVlc3QgPSB0aGlzLl9jcmVhdGVDb250aW51ZVJlc3BvbnNlUmVxdWVzdChldmVudCwgbW9kaWZpZWQpO1xuXG4gICAgICAgICAgICBhd2FpdCBzYWZlQ29udGludWVSZXNwb25zZSh0aGlzLl9jbGllbnQsIGNvbnRpbnVlUmVzcG9uc2VSZXF1ZXN0LCBzZXNzaW9uSWQpO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbmVlZEluamVjdFJlc291cmNlcyAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZXZlbnQucmVzb3VyY2VUeXBlICE9PSAnRG9jdW1lbnQnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gZXZlbnQucmVzcG9uc2VIZWFkZXJzXG4gICAgICAgICAgICA/LmZpbmQoaGVhZGVyID0+IGhlYWRlci5uYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKVxuICAgICAgICAgICAgPy52YWx1ZTtcblxuICAgICAgICBpZiAoY29udGVudFR5cGUpXG4gICAgICAgICAgICByZXR1cm4gY29udGVudFR5cGVVdGlscy5pc1BhZ2UoY29udGVudFR5cGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3RyeUF1dGhvcml6ZVdpdGhIdHRwQmFzaWNBdXRoQ3JlZGVudGlhbHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGZ1bGZpbGxJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSB0aGlzLl90ZXN0UnVuLmdldEF1dGhDcmVkZW50aWFscygpO1xuXG4gICAgICAgIGlmICghY3JlZGVudGlhbHMpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgYXV0aFJlcXVlc3QgPSBhd2FpdCByZXNlbmRBdXRoUmVxdWVzdChldmVudC5yZXF1ZXN0LCBjcmVkZW50aWFscyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhdXRoUmVxdWVzdCAhPT0gJ3N0cmluZycgJiYgIWlzVW5hdXRob3JpemVkKGF1dGhSZXF1ZXN0LnN0YXR1cykpIHtcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLnJlc3BvbnNlQ29kZSA9IGF1dGhSZXF1ZXN0LnN0YXR1cztcbiAgICAgICAgICAgIGZ1bGZpbGxJbmZvLmJvZHkgPSBhdXRoUmVxdWVzdC5ib2R5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBmdWxmaWxsSW5mby5yZXNwb25zZVBocmFzZSA9IGF1dGhSZXF1ZXN0LnN0YXR1c1RleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVFcnJvciAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCk6IEVycm9yIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDZXJ0aWZpY2F0ZUVycm9yKVxuICAgICAgICAgICAgcmV0dXJuIHNzbENlcnRpZmljYXRlRXJyb3IodGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IuZXJyb3JUeXBlKTtcblxuICAgICAgICBpZiAoZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbiA9PT0gJ05hbWVOb3RSZXNvbHZlZCcpXG4gICAgICAgICAgICByZXR1cm4gZmFpbGVkVG9GaW5kRE5TRXJyb3IoZXZlbnQucmVxdWVzdC51cmwpO1xuXG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IoZXZlbnQucmVzcG9uc2VFcnJvclJlYXNvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdHJ5UmVzcG9uZFRvT3RoZXJSZXF1ZXN0IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnJlc3BvbnNlRXJyb3JSZWFzb24gJiYgdGhpcy5fc2hvdWxkUmVkaXJlY3RUb0Vycm9yUGFnZShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX2NyZWF0ZUVycm9yKGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3Jlc291cmNlSW5qZWN0b3IucmVkaXJlY3RUb0Vycm9yUGFnZSh0aGlzLl9jbGllbnQsIGVycm9yLCBldmVudC5yZXF1ZXN0LnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzcG9uZFRvT3RoZXJSZXF1ZXN0KGV2ZW50LCBzZXNzaW9uSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5uZXR3b3JrSWQgJiYgdGhpcy5fZmFpbGVkUmVxdWVzdElkcy5pbmNsdWRlcyhldmVudC5uZXR3b3JrSWQpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlKHRoaXMuX2ZhaWxlZFJlcXVlc3RJZHMsIGV2ZW50Lm5ldHdvcmtJZCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2hhbmRsZU90aGVyUmVxdWVzdHMgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZU90aGVyUmVxdWVzdExvZ2dlcignJXInLCBldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5yZXNwb25zZUVycm9yUmVhc29uICYmIChpc1JlcXVlc3QoZXZlbnQpIHx8IGlzUmVkaXJlY3RTdGF0dXNDb2RlKGV2ZW50LnJlc3BvbnNlU3RhdHVzQ29kZSkpKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5pbml0KGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIub25SZXF1ZXN0KGV2ZW50LCB0aGlzLl9jb250ZXh0SW5mbyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IHRoaXMuX2NvbnRleHRJbmZvLmdldFBpcGVsaW5lQ29udGV4dChnZXRSZXF1ZXN0SWQoZXZlbnQpKTtcblxuICAgICAgICAgICAgaWYgKCFwaXBlbGluZUNvbnRleHQgfHwgIXBpcGVsaW5lQ29udGV4dC5tb2NrKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNhZmVDb250aW51ZVJlcXVlc3QodGhpcy5fY2xpZW50LCBldmVudCwgc2Vzc2lvbklkLCB0aGlzLl9jcmVhdGVDb250aW51ZUV2ZW50QXJncyhldmVudCwgcGlwZWxpbmVDb250ZXh0LnJlcU9wdHMpKTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RQaXBlbGluZU1vY2tMb2dnZXIoJ2JlZ2luIG1vY2tpbmcgcmVxdWVzdCAlcicsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1vY2tlZFJlc3BvbnNlID0gYXdhaXQgcGlwZWxpbmVDb250ZXh0LmdldE1vY2tSZXNwb25zZSgpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlTW9ja0Vycm9ySWZOZWNlc3NhcnkocGlwZWxpbmVDb250ZXh0LCBldmVudCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtb2NrZWRSZXNwb25zZUV2ZW50ID0gY3JlYXRlUmVxdWVzdFBhdXNlZEV2ZW50Rm9yUmVzcG9uc2UobW9ja2VkUmVzcG9uc2UsIGV2ZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVxdWVzdEhvb2tFdmVudFByb3ZpZGVyLm9uUmVzcG9uc2UobW9ja2VkUmVzcG9uc2VFdmVudCwgbW9ja2VkUmVzcG9uc2UuZ2V0Qm9keSgpLCB0aGlzLl9jb250ZXh0SW5mbywgdGhpcy5fY2xpZW50KTtcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZU1vY2tSZXNwb25zZShtb2NrZWRSZXNwb25zZSwgcGlwZWxpbmVDb250ZXh0LCBldmVudCwgc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmRpc3Bvc2UoZ2V0UmVxdWVzdElkKGV2ZW50KSk7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVNb2NrTG9nZ2VyKCdlbmQgbW9ja2luZyByZXF1ZXN0ICVyJywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3RyeVJlc3BvbmRUb090aGVyUmVxdWVzdChldmVudCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRVcGxvYWRQb3N0RGF0YSAoZXZlbnQ6IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghZXZlbnQucmVxdWVzdC5wb3N0RGF0YSlcbiAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG5cbiAgICAgICAgY29uc3QgY29udGVudFR5cGVIZWFkZXIgPSBldmVudC5yZXF1ZXN0LmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcG9zdERhdGEgICAgICAgICAgPSBCdWZmZXIuZnJvbShldmVudC5yZXF1ZXN0LnBvc3REYXRhLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgYm9keVdpdGhVcGxvYWRzICAgPSBpbmplY3RVcGxvYWQoY29udGVudFR5cGVIZWFkZXIsIHBvc3REYXRhKTtcblxuICAgICAgICByZXR1cm4gYm9keVdpdGhVcGxvYWRzID8gYm9keVdpdGhVcGxvYWRzLnRvU3RyaW5nKCdiYXNlNjQnKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90b3BGcmFtZU5hdmlnYXRpb24gKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC50eXBlID09PSAnTmF2aWdhdGlvbidcbiAgICAgICAgICAgICYmICFldmVudC5mcmFtZS5wYXJlbnRJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF91cGRhdGVDdXJyZW50RnJhbWVUcmVlICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTk9URTogRHVlIHRvIENEUCByZXN0cmljdGlvbnMgKGl0IGhhbmdzKSwgd2UgY2FuJ3QgZ2V0IHRoZSBmcmFtZSB0cmVlXG4gICAgICAgIC8vIHJpZ2h0IGJlZm9yZSBpbmplY3Rpbmcgc2VydmljZSBzY3JpcHRzLlxuICAgICAgICAvLyBTbywgd2UgYXJlIGZvcmNlZCB0cmFja2luZyBmcmFtZXMgdHJlZS5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fY2xpZW50LlBhZ2UuZ2V0RnJhbWVUcmVlKCk7XG5cbiAgICAgICAgdGhpcy5fY3VycmVudEZyYW1lVHJlZSA9IHJlc3VsdC5mcmFtZVRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaXNJZnJhbWUgKGZyYW1lSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuX2N1cnJlbnRGcmFtZVRyZWUpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRGcmFtZVRyZWUuZnJhbWUuaWQgIT09IGZyYW1lSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0YXJ0ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgLy8gTk9URTogV2UgYXJlIGZvcmNlZCB0byBoYW5kbGUgYWxsIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgYXQgb25jZVxuICAgICAgICAvLyBiZWNhdXNlIENEUCBBUEkgZG9lcyBub3QgYWxsb3cgc3BlY2lmeWluZyByZXF1ZXN0IGZpbHRlcmluZyBiZWhhdmlvciBmb3IgZGlmZmVyZW50IGhhbmRsZXJzLlxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuRmV0Y2guZW5hYmxlKHtcbiAgICAgICAgICAgIHBhdHRlcm5zOiBBTExfUkVRVUVTVFNfREFUQSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlRhcmdldC5zZXRBdXRvQXR0YWNoKHtcbiAgICAgICAgICAgIGF1dG9BdHRhY2g6ICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICB3YWl0Rm9yRGVidWdnZXJPblN0YXJ0OiB0cnVlLFxuICAgICAgICAgICAgZmxhdHRlbjogICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBlbmFibGUgdGhlIEZldGNoIGRvbWFpbiBmb3IgaWZyYW1lIHRhcmdldHNcbiAgICAgICAgLy8gdG8gaW50ZXJjZXB0IHNvbWUgcmVxdWVzdHMuIFdlIG5lZWQgdG8gdXNlIHRoZSBgc2Vzc2lvbklkYCBvcHRpb25cbiAgICAgICAgLy8gaW4gY29udGludWVSZXF1ZXN0L2NvbnRpbnVlUmVzcG9uc2UvZnVsZmlsbFJlcXVlc3QgbWV0aG9kc1xuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuVGFyZ2V0Lm9uKCdhdHRhY2hlZFRvVGFyZ2V0JywgYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xpZW50LlJ1bnRpbWUucnVuSWZXYWl0aW5nRm9yRGVidWdnZXIoZXZlbnQuc2Vzc2lvbklkKTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldEluZm8udHlwZSAhPT0gJ3dvcmtlcicpXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5GZXRjaC5lbmFibGUoeyBwYXR0ZXJuczogQUxMX1JFUVVFU1RTX0RBVEEgfSwgZXZlbnQuc2Vzc2lvbklkKTtcblxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuX2NsaWVudC5GZXRjaC5vbigncmVxdWVzdFBhdXNlZCcsIGFzeW5jIChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BwZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBzcGVjaWFsUmVxdWVzdEhhbmRsZXIgPSBnZXRTcGVjaWFsUmVxdWVzdEhhbmRsZXIoZXZlbnQsIHRoaXMub3B0aW9ucywgdGhpcy5fc3BlY2lhbFNlcnZpY2VSb3V0ZXMpO1xuXG4gICAgICAgICAgICBpZiAoc3BlY2lhbFJlcXVlc3RIYW5kbGVyKVxuICAgICAgICAgICAgICAgIGF3YWl0IHNwZWNpYWxSZXF1ZXN0SGFuZGxlcihldmVudCwgdGhpcy5fY2xpZW50LCB0aGlzLm9wdGlvbnMsIHNlc3Npb25JZCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlT3RoZXJSZXF1ZXN0cyhldmVudCwgc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50LlBhZ2Uub24oJ2ZyYW1lTmF2aWdhdGVkJywgYXN5bmMgKGV2ZW50OiBGcmFtZU5hdmlnYXRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoJyVmJywgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RvcEZyYW1lTmF2aWdhdGlvbihldmVudClcbiAgICAgICAgICAgICAgICB8fCBldmVudC5mcmFtZS51cmwgIT09IFNQRUNJQUxfQkxBTktfUEFHRSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRJbmZvLmluaXQoZXZlbnQpO1xuXG4gICAgICAgICAgICBjb25zdCB1c2VyU2NyaXB0cyA9IGF3YWl0IHRoaXMuX2dldFVzZXJTY3JpcHRzKGV2ZW50KTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVzb3VyY2VJbmplY3Rvci5wcm9jZXNzQWJvdXRCbGFua1BhZ2UoZXZlbnQsIHVzZXJTY3JpcHRzLCB0aGlzLmNvbnRleHRTdG9yYWdlLCB0aGlzLl9jbGllbnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0SW5mby5kaXNwb3NlKGdldFJlcXVlc3RJZChldmVudCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuUGFnZS5vbignZnJhbWVTdGFydGVkTG9hZGluZycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3VwZGF0ZUN1cnJlbnRGcmFtZVRyZWUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50Lk5ldHdvcmsub24oJ2xvYWRpbmdGYWlsZWQnLCBhc3luYyAoZXZlbnQ6IExvYWRpbmdGYWlsZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKCclbCcsIGV2ZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fZmFpbGVkUmVxdWVzdElkcy5wdXNoKGV2ZW50LnJlcXVlc3RJZCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5yZXF1ZXN0SWQpXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dEluZm8uZGlzcG9zZShldmVudC5yZXF1ZXN0SWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCB0aGlzLl9jbGllbnQuUGFnZS5zZXRCeXBhc3NDU1AoeyBlbmFibGVkOiB0cnVlIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5TZWN1cml0eS5lbmFibGUoKTtcblxuICAgICAgICB0aGlzLl9jbGllbnQuU2VjdXJpdHkub24oJ2NlcnRpZmljYXRlRXJyb3InLCBhc3luYyAoZXZlbnQ6IENlcnRpZmljYXRlRXJyb3JFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NlcnRpZmljYXRlRXJyb3IgPSBldmVudDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0b3AgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdG9wcGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGlzcG9zZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5GZXRjaC5kaXNhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlQ29udGludWVFdmVudEFyZ3MgKGV2ZW50OiBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQsIHJlcU9wdHM6IGFueSk6IENvbnRpbnVlUmVxdWVzdEFyZ3Mge1xuICAgICAgICBjb25zdCBtb2RpZmllZFVybCAgPSBuZXcgVVJMKGV2ZW50LnJlcXVlc3QudXJsKTtcbiAgICAgICAgY29uc3QgaG9zdCAgICAgICAgID0gbW9kaWZpZWRVcmwuaG9zdDtcblxuICAgICAgICBsZXQgaG9zdE1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBwb3J0TW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAobW9kaWZpZWRVcmwuaG9zdG5hbWUgIT09IHJlcU9wdHMuaG9zdG5hbWUpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkVXJsLmhvc3RuYW1lID0gcmVxT3B0cy5ob3N0bmFtZTtcbiAgICAgICAgICAgIGhvc3RNb2RpZmllZCAgICAgICAgID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RpZmllZFVybC5wb3J0ICE9PSByZXFPcHRzLnBvcnQpIHtcbiAgICAgICAgICAgIG1vZGlmaWVkVXJsLnBvcnQgPSByZXFPcHRzLnBvcnQ7XG4gICAgICAgICAgICBwb3J0TW9kaWZpZWQgICAgID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChob3N0ICE9PSByZXFPcHRzLmhvc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcG9ydCwgaG9zdG5hbWUgfSA9IG5ldyBVUkwocmVxT3B0cy5wcm90b2NvbCArICcvLycgKyByZXFPcHRzLmhvc3QpO1xuXG4gICAgICAgICAgICBpZiAoIWhvc3RNb2RpZmllZClcbiAgICAgICAgICAgICAgICBtb2RpZmllZFVybC5ob3N0bmFtZSA9IGhvc3RuYW1lO1xuXG4gICAgICAgICAgICBpZiAoIXBvcnRNb2RpZmllZClcbiAgICAgICAgICAgICAgICBtb2RpZmllZFVybC5wb3J0ID0gcG9ydDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc3REYXRhID0gdGhpcy5fZ2V0VXBsb2FkUG9zdERhdGEoZXZlbnQpO1xuICAgICAgICBjb25zdCB1cmwgICAgICA9IG1vZGlmaWVkVXJsLnRvU3RyaW5nKCkgIT09IGV2ZW50LnJlcXVlc3QudXJsID8gbW9kaWZpZWRVcmwudG9TdHJpbmcoKSA6IHZvaWQgMDtcbiAgICAgICAgY29uc3QgbWV0aG9kICAgPSByZXFPcHRzLm1ldGhvZDtcblxuICAgICAgICByZXR1cm4geyBwb3N0RGF0YSwgdXJsLCBtZXRob2QgfTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -19,31 +19,34 @@ async function connectionResetGuard(handleRequestFn, handleErrorFn) {
|
|
|
19
19
|
throw err;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
async function safeContinueResponse(client, data) {
|
|
22
|
+
async function safeContinueResponse(client, data, sessionId) {
|
|
23
23
|
const isPausedEvent = (0, cdp_1.isRequestPausedEvent)(data);
|
|
24
24
|
await connectionResetGuard(async () => {
|
|
25
25
|
const param = isPausedEvent
|
|
26
26
|
? { requestId: data.requestId }
|
|
27
27
|
: data;
|
|
28
|
-
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
await client.Fetch.continueResponse(param, sessionId);
|
|
29
30
|
}, err => {
|
|
30
31
|
const formatter = isPausedEvent ? '%r' : '%s';
|
|
31
32
|
(0, debug_loggers_1.requestPipelineLogger)(`Fetch.continueResponse. Unhandled error %s during processing ${formatter}`, err, data);
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
35
|
exports.safeContinueResponse = safeContinueResponse;
|
|
35
|
-
async function safeFulfillRequest(client, fulfillInfo) {
|
|
36
|
+
async function safeFulfillRequest(client, fulfillInfo, sessionId) {
|
|
36
37
|
await connectionResetGuard(async () => {
|
|
37
|
-
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
await client.Fetch.fulfillRequest(fulfillInfo, sessionId);
|
|
38
40
|
}, err => {
|
|
39
41
|
(0, debug_loggers_1.requestPipelineLogger)(`Fetch.fulfillRequest. Unhandled error %s during processing %s`, err, fulfillInfo.requestId);
|
|
40
42
|
});
|
|
41
43
|
}
|
|
42
44
|
exports.safeFulfillRequest = safeFulfillRequest;
|
|
43
|
-
async function safeContinueRequest(client, event, continueRequestArgs) {
|
|
45
|
+
async function safeContinueRequest(client, event, sessionId, continueRequestArgs) {
|
|
44
46
|
const { postData, method, url } = continueRequestArgs || {};
|
|
45
47
|
await connectionResetGuard(async () => {
|
|
46
|
-
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
await client.Fetch.continueRequest({ requestId: event.requestId, postData, method, url }, sessionId);
|
|
47
50
|
}, err => {
|
|
48
51
|
(0, debug_loggers_1.requestPipelineLogger)(`Fetch.continueRequest. Unhandled error %s during processing %r`, err, event);
|
|
49
52
|
});
|
|
@@ -60,4 +63,4 @@ async function safeFailRequest(client, event, errorReason = 'Aborted') {
|
|
|
60
63
|
});
|
|
61
64
|
}
|
|
62
65
|
exports.safeFailRequest = safeFailRequest;
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9zYWZlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBa0U7QUFNbEUsc0NBQW9EO0FBR3BELE1BQU0sc0NBQXNDLEdBQUcseUJBQXlCLENBQUM7QUFFekUsaUdBQWlHO0FBQ2pHLG1FQUFtRTtBQUNuRSxpREFBaUQ7QUFDakQsMERBQTBEO0FBRTFELEtBQUssVUFBVSxvQkFBb0IsQ0FBRSxlQUFvQyxFQUFFLGFBQWlDO0lBQ3hHLElBQUk7UUFDQSxNQUFNLGVBQWUsRUFBRSxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxHQUFRLEVBQUU7UUFDYixJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssc0NBQXNDO1lBQ3RELE9BQU87UUFFWCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxHQUFHLENBQUM7S0FDYjtBQUNMLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQUUsTUFBbUIsRUFBRSxJQUFrRCxFQUFFLFNBQW9CO0lBQ3JJLE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQW9CLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFFakQsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLEtBQUssR0FBRyxhQUFhO1lBQ3ZCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFWCxhQUFhO1FBQ2IsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDTCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTlDLElBQUEscUNBQXFCLEVBQUMsZ0VBQWdFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFmRCxvREFlQztBQUVNLEtBQUssVUFBVSxrQkFBa0IsQ0FBRSxNQUFtQixFQUFFLFdBQWtDLEVBQUUsU0FBb0I7SUFDbkgsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxhQUFhO1FBQ2IsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ0wsSUFBQSxxQ0FBcUIsRUFBQywrREFBK0QsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQVBELGdEQU9DO0FBRU0sS0FBSyxVQUFVLG1CQUFtQixDQUFFLE1BQW1CLEVBQUUsS0FBeUIsRUFBRSxTQUFvQixFQUFFLG1CQUF5QztJQUN0SixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7SUFFNUQsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxhQUFhO1FBQ2IsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDekcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ0wsSUFBQSxxQ0FBcUIsRUFBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEcsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBVEQsa0RBU0M7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUFFLE1BQW1CLEVBQUUsS0FBeUIsRUFBRSxjQUEyQixTQUFTO0lBQ3ZILE1BQU0sb0JBQW9CLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUMzQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsV0FBVztTQUNkLENBQUMsQ0FBQztJQUNQLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNMLElBQUEscUNBQXFCLEVBQUMsNERBQTRELEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFURCwwQ0FTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGdWxmaWxsUmVxdWVzdFJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5GdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5pbXBvcnQgQ29udGludWVSZXNwb25zZVJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5Db250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbmltcG9ydCBFcnJvclJlYXNvbiA9IFByb3RvY29sLk5ldHdvcmsuRXJyb3JSZWFzb247XG5pbXBvcnQgeyBpc1JlcXVlc3RQYXVzZWRFdmVudCB9IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5pbXBvcnQgeyBDb250aW51ZVJlcXVlc3RBcmdzLCBTZXNzaW9uSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IElOVkFMSURfSU5URVJDRVBURURfUkVTUE9OU0VfRVJST1JfTVNHID0gJ0ludmFsaWQgSW50ZXJjZXB0aW9uSWQuJztcblxuLy8gSW4gc29tZSBjYXNlcyAoYSByZXF1ZXN0IHdhcyBhYm9ydGVkLCBhbnkgcGFnZSB0aGF0IGluaXRpYXRlZCB0aGUgcmVxdWVzdCBkb2Vzbid0IGV4aXN0LCBldGMuKVxuLy8gQ2hyb21lIERlYnVnIFByb3RvY29sIGRvZXNuJ3QgYWxsb3cgdG8gY29udGludWUgcmVxdWVzdCBwaXBlbGluZVxuLy8gYW5kIHJhaXNlcyB0aGUgXCJJbnZhbGlkIEludGVyY2VwdGlvbklkXCIgZXJyb3IuXG4vLyBXZSB1c2UgdGhlIHNpbXBsZXN0IHdheSB0byBmaXggaXQgLSBvbWl0IHN1Y2ggYW4gZXJyb3IuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3Rpb25SZXNldEd1YXJkIChoYW5kbGVSZXF1ZXN0Rm46ICgpID0+IFByb21pc2U8dm9pZD4sIGhhbmRsZUVycm9yRm46IChlcnI6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVJlcXVlc3RGbigpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSBJTlZBTElEX0lOVEVSQ0VQVEVEX1JFU1BPTlNFX0VSUk9SX01TRylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBoYW5kbGVFcnJvckZuKGVycik7XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhZmVDb250aW51ZVJlc3BvbnNlIChjbGllbnQ6IFByb3RvY29sQXBpLCBkYXRhOiBSZXF1ZXN0UGF1c2VkRXZlbnQgfCBDb250aW51ZVJlc3BvbnNlUmVxdWVzdCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc1BhdXNlZEV2ZW50ID0gaXNSZXF1ZXN0UGF1c2VkRXZlbnQoZGF0YSk7XG5cbiAgICBhd2FpdCBjb25uZWN0aW9uUmVzZXRHdWFyZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gaXNQYXVzZWRFdmVudFxuICAgICAgICAgICAgPyB7IHJlcXVlc3RJZDogZGF0YS5yZXF1ZXN0SWQgfVxuICAgICAgICAgICAgOiBkYXRhO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYXdhaXQgY2xpZW50LkZldGNoLmNvbnRpbnVlUmVzcG9uc2UocGFyYW0sIHNlc3Npb25JZCk7XG4gICAgfSwgZXJyID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gaXNQYXVzZWRFdmVudCA/ICclcicgOiAnJXMnO1xuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcihgRmV0Y2guY29udGludWVSZXNwb25zZS4gVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICR7Zm9ybWF0dGVyfWAsIGVyciwgZGF0YSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlRnVsZmlsbFJlcXVlc3QgKGNsaWVudDogUHJvdG9jb2xBcGksIGZ1bGZpbGxJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF3YWl0IGNsaWVudC5GZXRjaC5mdWxmaWxsUmVxdWVzdChmdWxmaWxsSW5mbywgc2Vzc2lvbklkKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoYEZldGNoLmZ1bGZpbGxSZXF1ZXN0LiBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJXNgLCBlcnIsIGZ1bGZpbGxJbmZvLnJlcXVlc3RJZCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlQ29udGludWVSZXF1ZXN0IChjbGllbnQ6IFByb3RvY29sQXBpLCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCwgY29udGludWVSZXF1ZXN0QXJncz86IENvbnRpbnVlUmVxdWVzdEFyZ3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHBvc3REYXRhLCBtZXRob2QsIHVybCB9ID0gY29udGludWVSZXF1ZXN0QXJncyB8fCB7fTtcblxuICAgIGF3YWl0IGNvbm5lY3Rpb25SZXNldEd1YXJkKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhd2FpdCBjbGllbnQuRmV0Y2guY29udGludWVSZXF1ZXN0KHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQsIHBvc3REYXRhLCBtZXRob2QsIHVybCB9LCBzZXNzaW9uSWQpO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcihgRmV0Y2guY29udGludWVSZXF1ZXN0LiBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJXJgLCBlcnIsIGV2ZW50KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhZmVGYWlsUmVxdWVzdCAoY2xpZW50OiBQcm90b2NvbEFwaSwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgZXJyb3JSZWFzb246IEVycm9yUmVhc29uID0gJ0Fib3J0ZWQnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBjbGllbnQuRmV0Y2guZmFpbFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgICAgICBlcnJvclJlYXNvbixcbiAgICAgICAgfSk7XG4gICAgfSwgZXJyID0+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKGBGZXRjaC5mYWlsUmVxdWVzdC4gVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICVzYCwgZXJyLCBldmVudC5yZXF1ZXN0SWQpO1xuICAgIH0pO1xufVxuIl19
|