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.
Files changed (112) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/bin/testcafe-with-v8-flag-filter.js +10 -16
  3. package/lib/api/exportable-lib/index.js +1 -11
  4. package/lib/api/structure/test.js +4 -11
  5. package/lib/api/test-controller/index.js +3 -10
  6. package/lib/api/test-run-tracker.js +1 -1
  7. package/lib/assertions/executor.js +2 -11
  8. package/lib/browser/connection/gateway/index.js +3 -4
  9. package/lib/cli/argument-parser/index.js +1 -3
  10. package/lib/cli/cli.js +3 -11
  11. package/lib/client/automation/index.js +49 -36
  12. package/lib/client/automation/index.min.js +1 -1
  13. package/lib/client/browser/idle-page/index.js +13 -5
  14. package/lib/client/core/index.js +14 -8
  15. package/lib/client/core/index.min.js +1 -1
  16. package/lib/client/driver/index.js +19 -20
  17. package/lib/client/driver/index.min.js +1 -1
  18. package/lib/compiler/babel/load-libs.js +3 -3
  19. package/lib/compiler/compilers.js +6 -6
  20. package/lib/compiler/index.js +3 -3
  21. package/lib/compiler/interfaces.js +1 -1
  22. package/lib/compiler/test-file/add-export-api.js +3 -3
  23. package/lib/compiler/test-file/api-based.js +5 -34
  24. package/lib/compiler/test-file/formats/es-next/compiler.js +4 -4
  25. package/lib/compiler/test-file/formats/typescript/compiler.js +5 -5
  26. package/lib/configuration/option-names.js +1 -2
  27. package/lib/errors/runtime/templates.js +1 -2
  28. package/lib/errors/types.js +2 -3
  29. package/lib/index.js +1 -3
  30. package/lib/live/bootstrapper.js +3 -3
  31. package/lib/live/test-runner.js +5 -5
  32. package/lib/native-automation/add-custom-debug-formatters.js +3 -2
  33. package/lib/native-automation/client/event-descriptor.js +11 -5
  34. package/lib/native-automation/client/input.js +3 -7
  35. package/lib/native-automation/request-hooks/event-provider.js +4 -1
  36. package/lib/native-automation/request-pipeline/context-info.js +4 -1
  37. package/lib/native-automation/request-pipeline/index.js +39 -19
  38. package/lib/native-automation/request-pipeline/safe-api.js +10 -7
  39. package/lib/native-automation/request-pipeline/special-handlers.js +16 -13
  40. package/lib/native-automation/resource-injector.js +7 -7
  41. package/lib/native-automation/types.js +1 -1
  42. package/lib/native-automation/utils/cdp.js +3 -2
  43. package/lib/role/role.js +4 -39
  44. package/lib/runner/bootstrapper.js +4 -11
  45. package/lib/runner/browser-job.js +4 -5
  46. package/lib/runner/fixture-hook-controller.js +1 -7
  47. package/lib/runner/index.js +6 -53
  48. package/lib/runner/interfaces.js +1 -1
  49. package/lib/runner/task/index.js +2 -4
  50. package/lib/runner/test-run-controller.js +2 -4
  51. package/lib/test-run/bookmark.js +5 -23
  52. package/lib/test-run/commands/service.js +2 -3
  53. package/lib/test-run/commands/utils.js +4 -2
  54. package/lib/test-run/index.js +9 -132
  55. package/lib/testcafe.js +1 -9
  56. package/lib/utils/debug-loggers.js +4 -2
  57. package/lib/utils/parse-user-agent.js +17 -2
  58. package/package.json +3 -4
  59. package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
  60. package/lib/dashboard/config-storage.js +0 -26
  61. package/lib/dashboard/connector.js +0 -84
  62. package/lib/dashboard/documentation-url.js +0 -6
  63. package/lib/dashboard/formatting.js +0 -26
  64. package/lib/dashboard/get-dashboard-url.js +0 -10
  65. package/lib/dashboard/get-default-project-link.js +0 -23
  66. package/lib/dashboard/get-env-options.js +0 -26
  67. package/lib/dashboard/index.js +0 -145
  68. package/lib/dashboard/interfaces.js +0 -3
  69. package/lib/dashboard/messages.js +0 -21
  70. package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
  71. package/lib/services/compiler/host.js +0 -370
  72. package/lib/services/compiler/interfaces.js +0 -3
  73. package/lib/services/compiler/io.js +0 -10
  74. package/lib/services/compiler/protocol.js +0 -17
  75. package/lib/services/compiler/service-loader.js +0 -18
  76. package/lib/services/compiler/service.js +0 -362
  77. package/lib/services/compiler/test-run-proxy.js +0 -157
  78. package/lib/services/interfaces.js +0 -3
  79. package/lib/services/process-title.js +0 -10
  80. package/lib/services/serialization/prepare-options.js +0 -23
  81. package/lib/services/serialization/replicator/create-replicator.js +0 -58
  82. package/lib/services/serialization/replicator/interfaces.js +0 -3
  83. package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
  84. package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
  85. package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
  86. package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
  87. package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -67
  88. package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
  89. package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
  90. package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
  91. package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
  92. package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
  93. package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
  94. package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
  95. package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
  96. package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
  97. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
  98. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
  99. package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
  100. package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
  101. package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
  102. package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
  103. package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
  104. package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
  105. package/lib/services/serialization/test-structure.js +0 -91
  106. package/lib/services/utils/ipc/interfaces.js +0 -29
  107. package/lib/services/utils/ipc/io.js +0 -109
  108. package/lib/services/utils/ipc/message.js +0 -84
  109. package/lib/services/utils/ipc/packet.js +0 -57
  110. package/lib/services/utils/ipc/proxy.js +0 -94
  111. package/lib/services/utils/ipc/transport.js +0 -65
  112. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vY2xpZW50L2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0NBQXFDO0FBSXJDLDBFQUFvRDtBQUVwRCxNQUFxQixxQkFBcUI7SUFFdEMsWUFBYSxlQUFnQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO0lBQzVDLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFFLE9BQVk7UUFDaEMsTUFBTSxZQUFZLEdBQUcsTUFBTSwwQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFFLE9BQVk7UUFDOUIsTUFBTSxZQUFZLEdBQUcsTUFBTSwwQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEcsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxPQUFPLENBQUUsT0FBeUI7UUFDckMsTUFBTSxZQUFZLEdBQUcsMEJBQWtCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDTSxLQUFLLENBQUUsT0FBeUI7UUFDbkMsTUFBTSxZQUFZLEdBQUcsMEJBQWtCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGlCQUFTLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxvQkFBb0IsQ0FBRSxhQUFvQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBRSxJQUFZO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxpQkFBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBRSxZQUFvQztRQUNuRSxNQUFNLE9BQU8sR0FBRyxNQUFNLDBCQUFrQixDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRTtZQUMzRSxPQUFPLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3ZCLE1BQU0sRUFBRyxNQUFNO2FBQ2xCO1NBQ0osQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNILElBQUksRUFBRSxpQkFBUyxDQUFDLEtBQUs7WUFDckIsT0FBTztTQUNWLENBQUM7SUFDTixDQUFDO0NBQ0o7QUFuREQsd0NBbURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQXhpc1ZhbHVlc0RhdGEgfSBmcm9tICcuLi8uLi9jbGllbnQvY29yZS91dGlscy92YWx1ZXMvYXhpcy12YWx1ZXMnO1xuaW1wb3J0IHsgU2ltdWxhdGVkS2V5SW5mbyB9IGZyb20gJy4va2V5LXByZXNzL3V0aWxzJztcbmltcG9ydCB7IERpc3BhdGNoRXZlbnRGbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IENEUEV2ZW50RGVzY3JpcHRvciBmcm9tICcuL2V2ZW50LWRlc2NyaXB0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXRpdmVBdXRvbWF0aW9uSW5wdXQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3BhdGNoRXZlbnRGbjogRGlzcGF0Y2hFdmVudEZuO1xuICAgIGNvbnN0cnVjdG9yIChkaXNwYXRjaEV2ZW50Rm46IERpc3BhdGNoRXZlbnRGbikge1xuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50Rm4gPSBkaXNwYXRjaEV2ZW50Rm47XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG1vdXNlRG93biAob3B0aW9uczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGV2ZW50T3B0aW9ucyA9IGF3YWl0IENEUEV2ZW50RGVzY3JpcHRvci5jcmVhdGVNb3VzZUV2ZW50T3B0aW9ucygnbW91c2VQcmVzc2VkJywgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoRXZlbnRGbi5zaW5nbGUoRXZlbnRUeXBlLk1vdXNlLCBldmVudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBtb3VzZVVwIChvcHRpb25zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXZlbnRPcHRpb25zID0gYXdhaXQgQ0RQRXZlbnREZXNjcmlwdG9yLmNyZWF0ZU1vdXNlRXZlbnRPcHRpb25zKCdtb3VzZVJlbGVhc2VkJywgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoRXZlbnRGbi5zaW5nbGUoRXZlbnRUeXBlLk1vdXNlLCBldmVudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBrZXlEb3duIChvcHRpb25zOiBTaW11bGF0ZWRLZXlJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGV2ZW50T3B0aW9ucyA9IENEUEV2ZW50RGVzY3JpcHRvci5jcmVhdGVLZXlEb3duT3B0aW9ucyhvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hFdmVudEZuLnNpbmdsZShFdmVudFR5cGUuS2V5Ym9hcmQsIGV2ZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIHB1YmxpYyBrZXlVcCAob3B0aW9uczogU2ltdWxhdGVkS2V5SW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBldmVudE9wdGlvbnMgPSBDRFBFdmVudERlc2NyaXB0b3IuY3JlYXRlS2V5VXBPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaEV2ZW50Rm4uc2luZ2xlKEV2ZW50VHlwZS5LZXlib2FyZCwgZXZlbnRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhlY3V0ZUV2ZW50U2VxdWVuY2UgKGV2ZW50U2VxdWVuY2U6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaEV2ZW50Rm4uc2VxdWVuY2UoZXZlbnRTZXF1ZW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVJbnNlcnRUZXh0ICh0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hFdmVudEZuLnNpbmdsZShFdmVudFR5cGUuSW5zZXJ0VGV4dCwgeyB0ZXh0IH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVNb3VzZU1vdmVFdmVudCAoY3VyclBvc2l0aW9uOiBBeGlzVmFsdWVzRGF0YTxudW1iZXI+KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IENEUEV2ZW50RGVzY3JpcHRvci5jcmVhdGVNb3VzZUV2ZW50T3B0aW9ucygnbW91c2VNb3ZlZCcsIHtcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBjdXJyUG9zaXRpb24ueCxcbiAgICAgICAgICAgICAgICBjbGllbnRZOiBjdXJyUG9zaXRpb24ueSxcbiAgICAgICAgICAgICAgICBidXR0b246ICAnbm9uZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogRXZlbnRUeXBlLk1vdXNlLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1ob29rcy9ldmVudC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZEQUk2QjtBQUk3Qiw0Q0FBc0Q7QUFDdEQsc0NBQWtEO0FBS2xELE1BQXFCLHdDQUF5QyxTQUFRLDhDQUF3QjtJQUNsRixNQUFNLENBQUMsb0JBQW9CLENBQUUsT0FBd0M7UUFDekUsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBOEIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBRSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWdMO1FBQy9RLElBQUksQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsTUFBTSxLQUFJLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEQsWUFBb0QsQ0FBQyxlQUFlLENBQUMsWUFBc0IsQ0FBQyxDQUFDO1lBRTlGLE9BQU87U0FDVjtRQUdELE1BQU0scUJBQXFCLEdBQUcsd0NBQXdDLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLHFCQUFxQjtZQUN0QixPQUFPO1FBRVgsTUFBTSxXQUFXLEdBQUksTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RixNQUFNLFlBQVksR0FBRyxJQUFBLDRCQUFtQixFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXJELFlBQW9ELENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFFLEtBQXlCLEVBQUUsV0FBK0M7UUFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPO1FBRVgsTUFBTSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVFLE1BQU0sZUFBZSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBRSxLQUF5QixFQUFFLFlBQTJCLEVBQUUsV0FBK0MsRUFBRSxNQUFtQjtRQUNqSixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoQyxPQUFPLEtBQUssQ0FBQztRQUVqQixNQUFNLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0UsWUFBb0QsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEUsTUFBTSxlQUFlLENBQUMsOEJBQThCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpFLElBQUssWUFBb0QsQ0FBQyxlQUFlO1lBQ3JFLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsTUFBTSx3Q0FBd0MsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM1RCxlQUFlO1lBQ2YsWUFBWTtZQUNaLFlBQVk7WUFDWixLQUFLO1lBQ0wsTUFBTTtTQUNULENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxTQUFTLEVBQUMsRUFBRTtZQUN4RSxNQUFNLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUE5REQsMkRBOERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksXG4gICAgT25SZXNwb25zZUV2ZW50RGF0YSxcbiAgICBSZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIsXG59IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IHsgUHJvdG9jb2xBcGkgfSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgeyBnZXRSZXNwb25zZUFzQnVmZmVyIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCB7IGlzUHJlZmxpZ2h0UmVxdWVzdCB9IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvIGZyb20gJy4uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQXV0b21hdGlvblJlcXVlc3RIb29rRXZlbnRQcm92aWRlciBleHRlbmRzIFJlcXVlc3RIb29rRXZlbnRQcm92aWRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2hhc1Jlc3BvbnNlV2l0aEJvZHkgKGNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub25SZXNwb25zZUV2ZW50RGF0YS5zb21lKChldmVudERhdGE6IE9uUmVzcG9uc2VFdmVudERhdGEpID0+IGV2ZW50RGF0YS5vcHRzLmluY2x1ZGVCb2R5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBfc2V0UmVzcG9uc2VCb2R5ICh7IHBpcGVsaW5lQ29udGV4dCwgcmVzb3VyY2VCb2R5LCBldmVudEZhY3RvcnksIGV2ZW50LCBjbGllbnQgfTogeyBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3RvcnksIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNsaWVudDogUHJvdG9jb2xBcGkgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAocmVzb3VyY2VCb2R5Py5sZW5ndGggfHwgaXNQcmVmbGlnaHRSZXF1ZXN0KGV2ZW50KSkge1xuICAgICAgICAgICAgKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuc2V0UmVzcG9uc2VCb2R5KHJlc291cmNlQm9keSBhcyBCdWZmZXIpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IGhhc09uUmVzcG9uc2VXaXRoQm9keSA9IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX2hhc1Jlc3BvbnNlV2l0aEJvZHkocGlwZWxpbmVDb250ZXh0KTtcblxuICAgICAgICBpZiAoIWhhc09uUmVzcG9uc2VXaXRoQm9keSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXNwb25zZU9iaiAgPSBhd2FpdCBjbGllbnQuRmV0Y2guZ2V0UmVzcG9uc2VCb2R5KHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQgfSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGdldFJlc3BvbnNlQXNCdWZmZXIocmVzcG9uc2VPYmopO1xuXG4gICAgICAgIChldmVudEZhY3RvcnkgYXMgUmVxdWVzdFBhdXNlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkpLnNldFJlc3BvbnNlQm9keShyZXNwb25zZUJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvblJlcXVlc3QgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGNvbnRleHRJbmZvOiBOYXRpdmVBdXRvbWF0aW9uUmVxdWVzdENvbnRleHRJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5oYXNSZXF1ZXN0RXZlbnRMaXN0ZW5lcnMoKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IHBpcGVsaW5lQ29udGV4dCwgZXZlbnRGYWN0b3J5IH0gPSBjb250ZXh0SW5mby5nZXRDb250ZXh0RGF0YShldmVudCk7XG5cbiAgICAgICAgYXdhaXQgcGlwZWxpbmVDb250ZXh0Lm9uUmVxdWVzdEhvb2tSZXF1ZXN0KHRoaXMsIGV2ZW50RmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9uUmVzcG9uc2UgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIHJlc291cmNlQm9keTogQnVmZmVyIHwgbnVsbCwgY29udGV4dEluZm86IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8sIGNsaWVudDogUHJvdG9jb2xBcGkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IG1vZGlmaWVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc1JlcXVlc3RFdmVudExpc3RlbmVycygpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHsgcGlwZWxpbmVDb250ZXh0LCBldmVudEZhY3RvcnkgfSA9IGNvbnRleHRJbmZvLmdldENvbnRleHREYXRhKGV2ZW50KTtcblxuICAgICAgICAoZXZlbnRGYWN0b3J5IGFzIFJlcXVlc3RQYXVzZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5KS51cGRhdGUoZXZlbnQpO1xuXG4gICAgICAgIGF3YWl0IHBpcGVsaW5lQ29udGV4dC5vblJlcXVlc3RIb29rQ29uZmlndXJlUmVzcG9uc2UodGhpcywgZXZlbnRGYWN0b3J5KTtcblxuICAgICAgICBpZiAoKGV2ZW50RmFjdG9yeSBhcyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSkuaGVhZGVyc01vZGlmaWVkKVxuICAgICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuXG4gICAgICAgIGF3YWl0IE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0SG9va0V2ZW50UHJvdmlkZXIuX3NldFJlc3BvbnNlQm9keSh7XG4gICAgICAgICAgICBwaXBlbGluZUNvbnRleHQsXG4gICAgICAgICAgICByZXNvdXJjZUJvZHksXG4gICAgICAgICAgICBldmVudEZhY3RvcnksXG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocGlwZWxpbmVDb250ZXh0Lm9uUmVzcG9uc2VFdmVudERhdGEubWFwKGFzeW5jIGV2ZW50RGF0YSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBwaXBlbGluZUNvbnRleHQub25SZXF1ZXN0SG9va1Jlc3BvbnNlKHRoaXMsIGV2ZW50RmFjdG9yeSwgZXZlbnREYXRhLnJ1bGUsIGV2ZW50RGF0YS5vcHRzKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHJldHVybiBtb2RpZmllZDtcbiAgICB9XG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25hdGl2ZS1hdXRvbWF0aW9uL3JlcXVlc3QtcGlwZWxpbmUvY29udGV4dC1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EseUZBQWdGO0FBQ2hGLDJIQUE0RztBQUs1RyxzQ0FBa0U7QUFFbEUsNkhBQThHO0FBTzlHLE1BQXFCLGtDQUFrQztJQUtuRCxZQUFvQixhQUE0QjtRQUM1QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQU0sYUFBYSxDQUFDO0lBQzNDLENBQUM7SUFFTyxzQkFBc0IsQ0FBRSxTQUFpQjtRQUM3QyxNQUFNLGVBQWUsR0FBRyxJQUFJLDBCQUErQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxlQUFlLENBQUM7UUFFcEQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVPLG1CQUFtQixDQUFFLEtBQStDO1FBQ3hFLE1BQU0sU0FBUyxHQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQU0sSUFBQSxrQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUEsMEJBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksb0NBQW1DLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLHFDQUFvQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUxSyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUUvQyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sZ0JBQWdCLENBQUUsU0FBaUI7UUFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxJQUFJLENBQUUsS0FBK0M7UUFDeEQsTUFBTSxTQUFTLEdBQVMsSUFBQSxrQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxNQUFNLFlBQVksR0FBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDTSxPQUFPLENBQUUsU0FBa0I7UUFDOUIsSUFBSSxDQUFDLFNBQVM7WUFDVixPQUFPO1FBRVgsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxrQkFBa0IsQ0FBRSxTQUFpQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU0sY0FBYyxDQUFFLEtBQStDO1FBQ2xFLE1BQU0sU0FBUyxHQUFTLElBQUEsa0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxZQUFZLEdBQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDN0MsQ0FBQztDQUNKO0FBM0RELHFEQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9jb25maWd1cmF0aW9uL2ludGVyZmFjZXMnO1xuaW1wb3J0IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9waXBlbGluZS1jb250ZXh0JztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeSBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2V2ZW50LWZhY3RvcnkvcmVxdWVzdC1wYXVzZWQtZXZlbnQtYmFzZWQnO1xuaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sJztcbmltcG9ydCBSZXF1ZXN0UGF1c2VkRXZlbnQgPSBQcm90b2NvbC5GZXRjaC5SZXF1ZXN0UGF1c2VkRXZlbnQ7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudCA9IFByb3RvY29sLlBhZ2UuRnJhbWVOYXZpZ2F0ZWRFdmVudDtcbmltcG9ydCBUZXN0UnVuQnJpZGdlIGZyb20gJy4vdGVzdC1ydW4tYnJpZGdlJztcbmltcG9ydCB7IGdldFJlcXVlc3RJZCwgaXNSZXF1ZXN0UGF1c2VkRXZlbnQgfSBmcm9tICcuLi91dGlscy9jZHAnO1xuaW1wb3J0IHsgQmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgRnJhbWVOYXZpZ2F0ZWRFdmVudEJhc2VkRXZlbnRGYWN0b3J5IGZyb20gJy4uL3JlcXVlc3QtaG9va3MvZXZlbnQtZmFjdG9yeS9mcmFtZS1uYXZpZ2F0ZWQtZXZlbnQtYmFzZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHREYXRhIHtcbiAgICBwaXBlbGluZUNvbnRleHQ6IE5hdGl2ZUF1dG9tYXRpb25QaXBlbGluZUNvbnRleHQ7XG4gICAgZXZlbnRGYWN0b3J5OiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUF1dG9tYXRpb25SZXF1ZXN0Q29udGV4dEluZm8ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BpcGVsaW5lQ29udGV4dHM6IERpY3Rpb25hcnk8TmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRGYWN0b3JpZXM6IERpY3Rpb25hcnk8QmFzZVJlcXVlc3RIb29rRXZlbnRGYWN0b3J5PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yICh0ZXN0UnVuQnJpZGdlOiBUZXN0UnVuQnJpZGdlKSB7XG4gICAgICAgIHRoaXMuX3BpcGVsaW5lQ29udGV4dHMgPSB7fTtcbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXMgICA9IHt9O1xuICAgICAgICB0aGlzLl90ZXN0UnVuQnJpZGdlICAgID0gdGVzdFJ1bkJyaWRnZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVQaXBlbGluZUNvbnRleHQgKHJlcXVlc3RJZDogc3RyaW5nKTogTmF0aXZlQXV0b21hdGlvblBpcGVsaW5lQ29udGV4dCB7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lQ29udGV4dCA9IG5ldyBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG5cbiAgICAgICAgdGhpcy5fcGlwZWxpbmVDb250ZXh0c1tyZXF1ZXN0SWRdID0gcGlwZWxpbmVDb250ZXh0O1xuXG4gICAgICAgIHJldHVybiBwaXBlbGluZUNvbnRleHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRXZlbnRGYWN0b3J5IChldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50IHwgRnJhbWVOYXZpZ2F0ZWRFdmVudCk6IEJhc2VSZXF1ZXN0SG9va0V2ZW50RmFjdG9yeSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCAgICA9IHRoaXMuX3Rlc3RSdW5CcmlkZ2UuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCAgICA9IGdldFJlcXVlc3RJZChldmVudCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSA9IGlzUmVxdWVzdFBhdXNlZEV2ZW50KGV2ZW50KSA/IG5ldyBSZXF1ZXN0UGF1c2VkRXZlbnRCYXNlZEV2ZW50RmFjdG9yeShldmVudCwgc2Vzc2lvbklkKSA6IG5ldyBGcmFtZU5hdmlnYXRlZEV2ZW50QmFzZWRFdmVudEZhY3RvcnkoZXZlbnQsIHNlc3Npb25JZCk7XG5cbiAgICAgICAgdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXSA9IGV2ZW50RmFjdG9yeTtcblxuICAgICAgICByZXR1cm4gZXZlbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEV2ZW50RmFjdG9yeSAocmVxdWVzdElkOiBzdHJpbmcpOiBCYXNlUmVxdWVzdEhvb2tFdmVudEZhY3Rvcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRGYWN0b3JpZXNbcmVxdWVzdElkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdCAoZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCB8IEZyYW1lTmF2aWdhdGVkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdElkICAgICAgID0gZ2V0UmVxdWVzdElkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVDb250ZXh0ID0gdGhpcy5fY3JlYXRlUGlwZWxpbmVDb250ZXh0KHJlcXVlc3RJZCk7XG4gICAgICAgIGNvbnN0IGV2ZW50RmFjdG9yeSAgICA9IHRoaXMuX2NyZWF0ZUV2ZW50RmFjdG9yeShldmVudCk7XG5cbiAgICAgICAgcGlwZWxpbmVDb250ZXh0LnNldFJlcXVlc3RPcHRpb25zKGV2ZW50RmFjdG9yeSk7XG4gICAgfVxuICAgIHB1YmxpYyBkaXNwb3NlIChyZXF1ZXN0SWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0SWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3BpcGVsaW5lQ29udGV4dHNbcmVxdWVzdElkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50RmFjdG9yaWVzW3JlcXVlc3RJZF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBpcGVsaW5lQ29udGV4dCAocmVxdWVzdElkOiBzdHJpbmcpOiBOYXRpdmVBdXRvbWF0aW9uUGlwZWxpbmVDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpcGVsaW5lQ29udGV4dHNbcmVxdWVzdElkXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dERhdGEgKGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQgfCBGcmFtZU5hdmlnYXRlZEV2ZW50KTogQ29udGV4dERhdGEge1xuICAgICAgICBjb25zdCByZXF1ZXN0SWQgICAgICAgPSBnZXRSZXF1ZXN0SWQoZXZlbnQpO1xuICAgICAgICBjb25zdCBwaXBlbGluZUNvbnRleHQgPSB0aGlzLmdldFBpcGVsaW5lQ29udGV4dChyZXF1ZXN0SWQpO1xuICAgICAgICBjb25zdCBldmVudEZhY3RvcnkgICAgPSB0aGlzLl9nZXRFdmVudEZhY3RvcnkocmVxdWVzdElkKTtcblxuICAgICAgICByZXR1cm4geyBwaXBlbGluZUNvbnRleHQsIGV2ZW50RmFjdG9yeSB9O1xuICAgIH1cbn1cbiJdfQ==
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)(`Mock request ${event.requestId}`);
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(event.networkId);
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.Fetch.on('requestPaused', async (event) => {
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
- await client.Fetch.continueResponse(param);
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
- await client.Fetch.fulfillRequest(fulfillInfo);
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
- await client.Fetch.continueRequest({ requestId: event.requestId, postData, method, url });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9zYWZlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBa0U7QUFNbEUsc0NBQW9EO0FBR3BELE1BQU0sc0NBQXNDLEdBQUcseUJBQXlCLENBQUM7QUFFekUsaUdBQWlHO0FBQ2pHLG1FQUFtRTtBQUNuRSxpREFBaUQ7QUFDakQsMERBQTBEO0FBRTFELEtBQUssVUFBVSxvQkFBb0IsQ0FBRSxlQUFvQyxFQUFFLGFBQWlDO0lBQ3hHLElBQUk7UUFDQSxNQUFNLGVBQWUsRUFBRSxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxHQUFRLEVBQUU7UUFDYixJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssc0NBQXNDO1lBQ3RELE9BQU87UUFFWCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxHQUFHLENBQUM7S0FDYjtBQUNMLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQUUsTUFBbUIsRUFBRSxJQUFrRDtJQUMvRyxNQUFNLGFBQWEsR0FBRyxJQUFBLDBCQUFvQixFQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpELE1BQU0sb0JBQW9CLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsYUFBYTtZQUN2QixDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDO1FBRVgsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNMLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFOUMsSUFBQSxxQ0FBcUIsRUFBQyxnRUFBZ0UsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQWRELG9EQWNDO0FBRU0sS0FBSyxVQUFVLGtCQUFrQixDQUFFLE1BQW1CLEVBQUUsV0FBa0M7SUFDN0YsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNMLElBQUEscUNBQXFCLEVBQUMsK0RBQStELEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2SCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFORCxnREFNQztBQUVNLEtBQUssVUFBVSxtQkFBbUIsQ0FBRSxNQUFtQixFQUFFLEtBQXlCLEVBQUUsbUJBQXlDO0lBQ2hJLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUU1RCxNQUFNLG9CQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xDLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUYsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ0wsSUFBQSxxQ0FBcUIsRUFBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEcsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBUkQsa0RBUUM7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUFFLE1BQW1CLEVBQUUsS0FBeUIsRUFBRSxjQUEyQixTQUFTO0lBQ3ZILE1BQU0sb0JBQW9CLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUMzQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsV0FBVztTQUNkLENBQUMsQ0FBQztJQUNQLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNMLElBQUEscUNBQXFCLEVBQUMsNERBQTRELEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFURCwwQ0FTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGdWxmaWxsUmVxdWVzdFJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5GdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5pbXBvcnQgQ29udGludWVSZXNwb25zZVJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5Db250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbmltcG9ydCBFcnJvclJlYXNvbiA9IFByb3RvY29sLk5ldHdvcmsuRXJyb3JSZWFzb247XG5pbXBvcnQgeyBpc1JlcXVlc3RQYXVzZWRFdmVudCB9IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5pbXBvcnQgeyBDb250aW51ZVJlcXVlc3RBcmdzIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBJTlZBTElEX0lOVEVSQ0VQVEVEX1JFU1BPTlNFX0VSUk9SX01TRyA9ICdJbnZhbGlkIEludGVyY2VwdGlvbklkLic7XG5cbi8vIEluIHNvbWUgY2FzZXMgKGEgcmVxdWVzdCB3YXMgYWJvcnRlZCwgYW55IHBhZ2UgdGhhdCBpbml0aWF0ZWQgdGhlIHJlcXVlc3QgZG9lc24ndCBleGlzdCwgZXRjLilcbi8vIENocm9tZSBEZWJ1ZyBQcm90b2NvbCBkb2Vzbid0IGFsbG93IHRvIGNvbnRpbnVlIHJlcXVlc3QgcGlwZWxpbmVcbi8vIGFuZCByYWlzZXMgdGhlIFwiSW52YWxpZCBJbnRlcmNlcHRpb25JZFwiIGVycm9yLlxuLy8gV2UgdXNlIHRoZSBzaW1wbGVzdCB3YXkgdG8gZml4IGl0IC0gb21pdCBzdWNoIGFuIGVycm9yLlxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0aW9uUmVzZXRHdWFyZCAoaGFuZGxlUmVxdWVzdEZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+LCBoYW5kbGVFcnJvckZuOiAoZXJyOiBhbnkpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBoYW5kbGVSZXF1ZXN0Rm4oKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubWVzc2FnZSA9PT0gSU5WQUxJRF9JTlRFUkNFUFRFRF9SRVNQT05TRV9FUlJPUl9NU0cpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaGFuZGxlRXJyb3JGbihlcnIpO1xuXG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlQ29udGludWVSZXNwb25zZSAoY2xpZW50OiBQcm90b2NvbEFwaSwgZGF0YTogUmVxdWVzdFBhdXNlZEV2ZW50IHwgQ29udGludWVSZXNwb25zZVJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc1BhdXNlZEV2ZW50ID0gaXNSZXF1ZXN0UGF1c2VkRXZlbnQoZGF0YSk7XG5cbiAgICBhd2FpdCBjb25uZWN0aW9uUmVzZXRHdWFyZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gaXNQYXVzZWRFdmVudFxuICAgICAgICAgICAgPyB7IHJlcXVlc3RJZDogZGF0YS5yZXF1ZXN0SWQgfVxuICAgICAgICAgICAgOiBkYXRhO1xuXG4gICAgICAgIGF3YWl0IGNsaWVudC5GZXRjaC5jb250aW51ZVJlc3BvbnNlKHBhcmFtKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBpc1BhdXNlZEV2ZW50ID8gJyVyJyA6ICclcyc7XG5cbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKGBGZXRjaC5jb250aW51ZVJlc3BvbnNlLiBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJHtmb3JtYXR0ZXJ9YCwgZXJyLCBkYXRhKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhZmVGdWxmaWxsUmVxdWVzdCAoY2xpZW50OiBQcm90b2NvbEFwaSwgZnVsZmlsbEluZm86IEZ1bGZpbGxSZXF1ZXN0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNvbm5lY3Rpb25SZXNldEd1YXJkKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LkZldGNoLmZ1bGZpbGxSZXF1ZXN0KGZ1bGZpbGxJbmZvKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoYEZldGNoLmZ1bGZpbGxSZXF1ZXN0LiBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJXNgLCBlcnIsIGZ1bGZpbGxJbmZvLnJlcXVlc3RJZCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlQ29udGludWVSZXF1ZXN0IChjbGllbnQ6IFByb3RvY29sQXBpLCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBjb250aW51ZVJlcXVlc3RBcmdzPzogQ29udGludWVSZXF1ZXN0QXJncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcG9zdERhdGEsIG1ldGhvZCwgdXJsIH0gPSBjb250aW51ZVJlcXVlc3RBcmdzIHx8IHt9O1xuXG4gICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBjbGllbnQuRmV0Y2guY29udGludWVSZXF1ZXN0KHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQsIHBvc3REYXRhLCBtZXRob2QsIHVybCB9KTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoYEZldGNoLmNvbnRpbnVlUmVxdWVzdC4gVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICVyYCwgZXJyLCBldmVudCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlRmFpbFJlcXVlc3QgKGNsaWVudDogUHJvdG9jb2xBcGksIGV2ZW50OiBSZXF1ZXN0UGF1c2VkRXZlbnQsIGVycm9yUmVhc29uOiBFcnJvclJlYXNvbiA9ICdBYm9ydGVkJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGNvbm5lY3Rpb25SZXNldEd1YXJkKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LkZldGNoLmZhaWxSZXF1ZXN0KHtcbiAgICAgICAgICAgIHJlcXVlc3RJZDogZXZlbnQucmVxdWVzdElkLFxuICAgICAgICAgICAgZXJyb3JSZWFzb24sXG4gICAgICAgIH0pO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcihgRmV0Y2guZmFpbFJlcXVlc3QuIFVuaGFuZGxlZCBlcnJvciAlcyBkdXJpbmcgcHJvY2Vzc2luZyAlc2AsIGVyciwgZXZlbnQucmVxdWVzdElkKTtcbiAgICB9KTtcbn1cbiJdfQ==
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmF0aXZlLWF1dG9tYXRpb24vcmVxdWVzdC1waXBlbGluZS9zYWZlLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBa0U7QUFNbEUsc0NBQW9EO0FBR3BELE1BQU0sc0NBQXNDLEdBQUcseUJBQXlCLENBQUM7QUFFekUsaUdBQWlHO0FBQ2pHLG1FQUFtRTtBQUNuRSxpREFBaUQ7QUFDakQsMERBQTBEO0FBRTFELEtBQUssVUFBVSxvQkFBb0IsQ0FBRSxlQUFvQyxFQUFFLGFBQWlDO0lBQ3hHLElBQUk7UUFDQSxNQUFNLGVBQWUsRUFBRSxDQUFDO0tBQzNCO0lBQ0QsT0FBTyxHQUFRLEVBQUU7UUFDYixJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssc0NBQXNDO1lBQ3RELE9BQU87UUFFWCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxHQUFHLENBQUM7S0FDYjtBQUNMLENBQUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQUUsTUFBbUIsRUFBRSxJQUFrRCxFQUFFLFNBQW9CO0lBQ3JJLE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQW9CLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFFakQsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLEtBQUssR0FBRyxhQUFhO1lBQ3ZCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFWCxhQUFhO1FBQ2IsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7UUFDTCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTlDLElBQUEscUNBQXFCLEVBQUMsZ0VBQWdFLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFmRCxvREFlQztBQUVNLEtBQUssVUFBVSxrQkFBa0IsQ0FBRSxNQUFtQixFQUFFLFdBQWtDLEVBQUUsU0FBb0I7SUFDbkgsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxhQUFhO1FBQ2IsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ0wsSUFBQSxxQ0FBcUIsRUFBQywrREFBK0QsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQVBELGdEQU9DO0FBRU0sS0FBSyxVQUFVLG1CQUFtQixDQUFFLE1BQW1CLEVBQUUsS0FBeUIsRUFBRSxTQUFvQixFQUFFLG1CQUF5QztJQUN0SixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7SUFFNUQsTUFBTSxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxhQUFhO1FBQ2IsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDekcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ0wsSUFBQSxxQ0FBcUIsRUFBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEcsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBVEQsa0RBU0M7QUFFTSxLQUFLLFVBQVUsZUFBZSxDQUFFLE1BQW1CLEVBQUUsS0FBeUIsRUFBRSxjQUEyQixTQUFTO0lBQ3ZILE1BQU0sb0JBQW9CLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDbEMsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUMzQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsV0FBVztTQUNkLENBQUMsQ0FBQztJQUNQLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNMLElBQUEscUNBQXFCLEVBQUMsNERBQTRELEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFURCwwQ0FTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3RvY29sQXBpIH0gZnJvbSAnY2hyb21lLXJlbW90ZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2Vycyc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IFJlcXVlc3RQYXVzZWRFdmVudCA9IFByb3RvY29sLkZldGNoLlJlcXVlc3RQYXVzZWRFdmVudDtcbmltcG9ydCBGdWxmaWxsUmVxdWVzdFJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5GdWxmaWxsUmVxdWVzdFJlcXVlc3Q7XG5pbXBvcnQgQ29udGludWVSZXNwb25zZVJlcXVlc3QgPSBQcm90b2NvbC5GZXRjaC5Db250aW51ZVJlc3BvbnNlUmVxdWVzdDtcbmltcG9ydCBFcnJvclJlYXNvbiA9IFByb3RvY29sLk5ldHdvcmsuRXJyb3JSZWFzb247XG5pbXBvcnQgeyBpc1JlcXVlc3RQYXVzZWRFdmVudCB9IGZyb20gJy4uL3V0aWxzL2NkcCc7XG5pbXBvcnQgeyBDb250aW51ZVJlcXVlc3RBcmdzLCBTZXNzaW9uSWQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IElOVkFMSURfSU5URVJDRVBURURfUkVTUE9OU0VfRVJST1JfTVNHID0gJ0ludmFsaWQgSW50ZXJjZXB0aW9uSWQuJztcblxuLy8gSW4gc29tZSBjYXNlcyAoYSByZXF1ZXN0IHdhcyBhYm9ydGVkLCBhbnkgcGFnZSB0aGF0IGluaXRpYXRlZCB0aGUgcmVxdWVzdCBkb2Vzbid0IGV4aXN0LCBldGMuKVxuLy8gQ2hyb21lIERlYnVnIFByb3RvY29sIGRvZXNuJ3QgYWxsb3cgdG8gY29udGludWUgcmVxdWVzdCBwaXBlbGluZVxuLy8gYW5kIHJhaXNlcyB0aGUgXCJJbnZhbGlkIEludGVyY2VwdGlvbklkXCIgZXJyb3IuXG4vLyBXZSB1c2UgdGhlIHNpbXBsZXN0IHdheSB0byBmaXggaXQgLSBvbWl0IHN1Y2ggYW4gZXJyb3IuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3Rpb25SZXNldEd1YXJkIChoYW5kbGVSZXF1ZXN0Rm46ICgpID0+IFByb21pc2U8dm9pZD4sIGhhbmRsZUVycm9yRm46IChlcnI6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZVJlcXVlc3RGbigpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKGVyci5tZXNzYWdlID09PSBJTlZBTElEX0lOVEVSQ0VQVEVEX1JFU1BPTlNFX0VSUk9SX01TRylcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBoYW5kbGVFcnJvckZuKGVycik7XG5cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhZmVDb250aW51ZVJlc3BvbnNlIChjbGllbnQ6IFByb3RvY29sQXBpLCBkYXRhOiBSZXF1ZXN0UGF1c2VkRXZlbnQgfCBDb250aW51ZVJlc3BvbnNlUmVxdWVzdCwgc2Vzc2lvbklkOiBTZXNzaW9uSWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc1BhdXNlZEV2ZW50ID0gaXNSZXF1ZXN0UGF1c2VkRXZlbnQoZGF0YSk7XG5cbiAgICBhd2FpdCBjb25uZWN0aW9uUmVzZXRHdWFyZChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gaXNQYXVzZWRFdmVudFxuICAgICAgICAgICAgPyB7IHJlcXVlc3RJZDogZGF0YS5yZXF1ZXN0SWQgfVxuICAgICAgICAgICAgOiBkYXRhO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYXdhaXQgY2xpZW50LkZldGNoLmNvbnRpbnVlUmVzcG9uc2UocGFyYW0sIHNlc3Npb25JZCk7XG4gICAgfSwgZXJyID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gaXNQYXVzZWRFdmVudCA/ICclcicgOiAnJXMnO1xuXG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcihgRmV0Y2guY29udGludWVSZXNwb25zZS4gVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICR7Zm9ybWF0dGVyfWAsIGVyciwgZGF0YSk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlRnVsZmlsbFJlcXVlc3QgKGNsaWVudDogUHJvdG9jb2xBcGksIGZ1bGZpbGxJbmZvOiBGdWxmaWxsUmVxdWVzdFJlcXVlc3QsIHNlc3Npb25JZDogU2Vzc2lvbklkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF3YWl0IGNsaWVudC5GZXRjaC5mdWxmaWxsUmVxdWVzdChmdWxmaWxsSW5mbywgc2Vzc2lvbklkKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgICByZXF1ZXN0UGlwZWxpbmVMb2dnZXIoYEZldGNoLmZ1bGZpbGxSZXF1ZXN0LiBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJXNgLCBlcnIsIGZ1bGZpbGxJbmZvLnJlcXVlc3RJZCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYWZlQ29udGludWVSZXF1ZXN0IChjbGllbnQ6IFByb3RvY29sQXBpLCBldmVudDogUmVxdWVzdFBhdXNlZEV2ZW50LCBzZXNzaW9uSWQ6IFNlc3Npb25JZCwgY29udGludWVSZXF1ZXN0QXJncz86IENvbnRpbnVlUmVxdWVzdEFyZ3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHBvc3REYXRhLCBtZXRob2QsIHVybCB9ID0gY29udGludWVSZXF1ZXN0QXJncyB8fCB7fTtcblxuICAgIGF3YWl0IGNvbm5lY3Rpb25SZXNldEd1YXJkKGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhd2FpdCBjbGllbnQuRmV0Y2guY29udGludWVSZXF1ZXN0KHsgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQsIHBvc3REYXRhLCBtZXRob2QsIHVybCB9LCBzZXNzaW9uSWQpO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICAgIHJlcXVlc3RQaXBlbGluZUxvZ2dlcihgRmV0Y2guY29udGludWVSZXF1ZXN0LiBVbmhhbmRsZWQgZXJyb3IgJXMgZHVyaW5nIHByb2Nlc3NpbmcgJXJgLCBlcnIsIGV2ZW50KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhZmVGYWlsUmVxdWVzdCAoY2xpZW50OiBQcm90b2NvbEFwaSwgZXZlbnQ6IFJlcXVlc3RQYXVzZWRFdmVudCwgZXJyb3JSZWFzb246IEVycm9yUmVhc29uID0gJ0Fib3J0ZWQnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgY29ubmVjdGlvblJlc2V0R3VhcmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBjbGllbnQuRmV0Y2guZmFpbFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVxdWVzdElkOiBldmVudC5yZXF1ZXN0SWQsXG4gICAgICAgICAgICBlcnJvclJlYXNvbixcbiAgICAgICAgfSk7XG4gICAgfSwgZXJyID0+IHtcbiAgICAgICAgcmVxdWVzdFBpcGVsaW5lTG9nZ2VyKGBGZXRjaC5mYWlsUmVxdWVzdC4gVW5oYW5kbGVkIGVycm9yICVzIGR1cmluZyBwcm9jZXNzaW5nICVzYCwgZXJyLCBldmVudC5yZXF1ZXN0SWQpO1xuICAgIH0pO1xufVxuIl19