@aws-cdk/toolkit-lib 1.19.1 → 1.19.3

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 (80) hide show
  1. package/build-info.json +2 -2
  2. package/db.json.gz +0 -0
  3. package/lib/actions/bootstrap/private/helpers.js +2 -2
  4. package/lib/actions/diff/private/helpers.js +6 -6
  5. package/lib/actions/refactor/private/mapping-helpers.js +3 -3
  6. package/lib/api/aws-auth/awscli-compatible.js +2 -2
  7. package/lib/api/aws-auth/base-credentials.js +2 -2
  8. package/lib/api/aws-auth/credential-plugins.js +3 -3
  9. package/lib/api/aws-auth/sdk-provider.js +6 -6
  10. package/lib/api/aws-auth/sdk.js +3 -3
  11. package/lib/api/bootstrap/bootstrap-environment.js +12 -12
  12. package/lib/api/cloud-assembly/context-store.js +2 -2
  13. package/lib/api/cloud-assembly/private/context-aware-source.js +2 -2
  14. package/lib/api/cloud-assembly/private/exec.d.ts +3 -0
  15. package/lib/api/cloud-assembly/private/exec.js +38 -5
  16. package/lib/api/cloud-assembly/private/helpers.js +2 -2
  17. package/lib/api/cloud-assembly/private/prepare-source.js +2 -2
  18. package/lib/api/cloud-assembly/private/stack-assembly.js +6 -6
  19. package/lib/api/cloud-assembly/source-builder.js +2 -2
  20. package/lib/api/cloud-assembly/stack-collection.js +8 -4
  21. package/lib/api/cloudformation/evaluate-cloudformation-template.js +2 -2
  22. package/lib/api/cloudformation/stack-helpers.js +2 -2
  23. package/lib/api/cloudformation/template-body-parameter.js +3 -3
  24. package/lib/api/context.js +2 -2
  25. package/lib/api/deployments/asset-publishing.js +3 -3
  26. package/lib/api/deployments/assets.js +5 -5
  27. package/lib/api/deployments/cfn-api.js +9 -9
  28. package/lib/api/deployments/checks.js +5 -5
  29. package/lib/api/deployments/deploy-stack.js +7 -7
  30. package/lib/api/deployments/deployment-result.js +2 -2
  31. package/lib/api/deployments/deployments.js +12 -12
  32. package/lib/api/drift/drift.js +3 -3
  33. package/lib/api/environment/environment-access.js +5 -5
  34. package/lib/api/environment/environment-resources.js +8 -8
  35. package/lib/api/garbage-collection/garbage-collector.js +7 -7
  36. package/lib/api/garbage-collection/progress-printer.js +2 -2
  37. package/lib/api/garbage-collection/stack-refresh.js +3 -3
  38. package/lib/api/hotswap/appsync-mapping-templates.js +2 -2
  39. package/lib/api/hotswap/bedrock-agentcore-runtimes.js +6 -6
  40. package/lib/api/hotswap/common.js +4 -4
  41. package/lib/api/hotswap/hotswap-deployments.js +2 -2
  42. package/lib/api/hotswap/lambda-functions.js +2 -2
  43. package/lib/api/notices/cached-data-source.js +2 -2
  44. package/lib/api/notices/web-data-source.js +9 -9
  45. package/lib/api/plugin/plugin.js +5 -5
  46. package/lib/api/refactoring/context.js +4 -4
  47. package/lib/api/refactoring/graph.js +3 -3
  48. package/lib/api/refactoring/index.js +5 -5
  49. package/lib/api/refactoring/stack-definitions.js +2 -2
  50. package/lib/api/resource-import/importer.js +2 -2
  51. package/lib/api/rwlock.js +3 -3
  52. package/lib/api/settings.js +3 -3
  53. package/lib/api/stack-events/stack-activity-monitor.d.ts +41 -4
  54. package/lib/api/stack-events/stack-activity-monitor.js +99 -9
  55. package/lib/api/stack-events/stack-event-poller.d.ts +5 -2
  56. package/lib/api/stack-events/stack-event-poller.js +7 -5
  57. package/lib/api/toolkit-info.js +9 -9
  58. package/lib/api/work-graph/work-graph-builder.js +3 -3
  59. package/lib/api/work-graph/work-graph.js +4 -4
  60. package/lib/context-providers/ami.js +2 -2
  61. package/lib/context-providers/cc-api-provider.js +9 -9
  62. package/lib/context-providers/hosted-zones.js +4 -4
  63. package/lib/context-providers/index.js +3 -3
  64. package/lib/context-providers/keys.js +3 -3
  65. package/lib/context-providers/load-balancers.js +10 -10
  66. package/lib/context-providers/security-groups.js +5 -5
  67. package/lib/context-providers/ssm-parameters.js +3 -3
  68. package/lib/context-providers/vpcs.js +7 -7
  69. package/lib/index_bg.wasm +0 -0
  70. package/lib/private/activity-printer/base.js +5 -5
  71. package/lib/private/activity-printer/current.js +2 -2
  72. package/lib/toolkit/toolkit-error.d.ts +31 -5
  73. package/lib/toolkit/toolkit-error.js +54 -14
  74. package/lib/toolkit/toolkit.js +21 -16
  75. package/lib/util/cloudformation.d.ts +18 -1
  76. package/lib/util/cloudformation.js +29 -3
  77. package/lib/util/directories.js +2 -2
  78. package/lib/util/objects.js +3 -3
  79. package/lib/util/version-range.js +5 -5
  80. package/package.json +11 -11
@@ -50,7 +50,7 @@ class PluginHost {
50
50
  // @see https://nodejs.org/api/modules.html#requireresolverequest-options
51
51
  // Not using `withCause()` here, since the node error contains a "Require Stack"
52
52
  // as part of the error message that is inherently useless to our users.
53
- throw new toolkit_error_1.ToolkitError(`Unable to resolve plug-in: Cannot find module '${moduleSpec}': ${e}`);
53
+ throw new toolkit_error_1.ToolkitError('PluginResolveFailed', `Unable to resolve plug-in: Cannot find module '${moduleSpec}': ${e}`);
54
54
  }
55
55
  }
56
56
  /**
@@ -67,7 +67,7 @@ class PluginHost {
67
67
  const plugin = require(resolved);
68
68
  /* eslint-enable */
69
69
  if (!isPlugin(plugin)) {
70
- throw new toolkit_error_1.ToolkitError(`Module ${resolved} is not a valid plug-in, or has an unsupported version.`);
70
+ throw new toolkit_error_1.ToolkitError('InvalidPlugin', `Module ${resolved} is not a valid plug-in, or has an unsupported version.`);
71
71
  }
72
72
  if (plugin.init) {
73
73
  plugin.init(this);
@@ -75,7 +75,7 @@ class PluginHost {
75
75
  this.alreadyLoaded.add(resolved);
76
76
  }
77
77
  catch (e) {
78
- throw toolkit_error_1.ToolkitError.withCause(`Unable to load plug-in '${resolved}'`, e);
78
+ throw toolkit_error_1.ToolkitError.withCause('PluginLoadFailed', `Unable to load plug-in '${resolved}'`, e);
79
79
  }
80
80
  function isPlugin(x) {
81
81
  return x != null && x.version === '1';
@@ -124,10 +124,10 @@ class PluginHost {
124
124
  */
125
125
  registerContextProviderAlpha(pluginProviderName, provider) {
126
126
  if (!(0, context_provider_plugin_1.isContextProviderPlugin)(provider)) {
127
- throw new toolkit_error_1.ToolkitError(`Object you gave me does not look like a ContextProviderPlugin: ${(0, util_1.inspect)(provider)}`);
127
+ throw new toolkit_error_1.ToolkitError('InvalidContextProvider', `Object you gave me does not look like a ContextProviderPlugin: ${(0, util_1.inspect)(provider)}`);
128
128
  }
129
129
  this.contextProviderPlugins[pluginProviderName] = provider;
130
130
  }
131
131
  }
132
132
  exports.PluginHost = PluginHost;
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQix1RUFBZ0c7QUFDaEcsK0RBQTJEO0FBRTNELDJDQUF5QztBQUV6Qzs7Ozs7O0dBTUc7QUFDSCxNQUFhLFVBQVU7SUFDckI7OztPQUdHO0lBQ2EseUJBQXlCLEdBQUcsSUFBSSxLQUFLLEVBQTRCLENBQUM7SUFFbEUsc0JBQXNCLEdBQTBDLEVBQUUsQ0FBQztJQUU1RSxNQUFNLENBQVc7SUFFUCxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVuRDs7Ozs7Ozs7O09BU0c7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQWtCLEVBQUUsTUFBZ0I7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxrQkFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsUUFBUSxTQUFTLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVLENBQUMsVUFBa0I7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLCtFQUErRTtZQUMvRSx5RUFBeUU7WUFDekUsZ0ZBQWdGO1lBQ2hGLHdFQUF3RTtZQUN4RSxNQUFNLElBQUksNEJBQVksQ0FBQyxrREFBa0QsVUFBVSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLFFBQWdCO1FBQzdCLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTztZQUNULENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSw0QkFBWSxDQUFDLFVBQVUsUUFBUSx5REFBeUQsQ0FBQyxDQUFDO1lBQ3RHLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSw0QkFBWSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELFNBQVMsUUFBUSxDQUFDLENBQU07WUFDdEIsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGdDQUFnQyxDQUFDLE1BQWdDO1FBQ3RFLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQStCRztJQUNJLDRCQUE0QixDQUFDLGtCQUEwQixFQUFFLFFBQStCO1FBQzdGLElBQUksQ0FBQyxJQUFBLGlEQUF1QixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLDRCQUFZLENBQUMsa0VBQWtFLElBQUEsY0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzdELENBQUM7Q0FDRjtBQTdIRCxnQ0E2SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnNwZWN0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgdHlwZSB7IENyZWRlbnRpYWxQcm92aWRlclNvdXJjZSwgSVBsdWdpbkhvc3QsIFBsdWdpbiB9IGZyb20gJ0Bhd3MtY2RrL2NsaS1wbHVnaW4tY29udHJhY3QnO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0UHJvdmlkZXJQbHVnaW4sIGlzQ29udGV4dFByb3ZpZGVyUGx1Z2luIH0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLXBsdWdpbic7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHR5cGUgeyBJSW9Ib3N0IH0gZnJvbSAnLi4vaW8nO1xuaW1wb3J0IHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcblxuLyoqXG4gKiBDbGFzcyB0byBtYW5hZ2UgYSBwbHVnaW4gY29sbGVjdGlvblxuICpcbiAqIEl0IHByb3ZpZGVzIGEgYGxvYWQoKWAgZnVuY3Rpb24gdGhhdCBsb2FkcyBhIEphdmFTY3JpcHRcbiAqIG1vZHVsZSBmcm9tIGRpc2ssIGFuZCBnaXZlcyBpdCBhY2Nlc3MgdG8gdGhlIGBJUGx1Z2luSG9zdGAgaW50ZXJmYWNlXG4gKiB0byByZWdpc3RlciBpdHNlbGYuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Ib3N0IGltcGxlbWVudHMgSVBsdWdpbkhvc3Qge1xuICAvKipcbiAgICogQWNjZXNzIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VzLiBOZXcgc291cmNlcyBjYW5cbiAgICogYmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgK3JlZ2lzdGVyQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKyBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcyA9IG5ldyBBcnJheTxDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2U+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHRQcm92aWRlclBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIENvbnRleHRQcm92aWRlclBsdWdpbj4gPSB7fTtcblxuICBwdWJsaWMgaW9Ib3N0PzogSUlvSG9zdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFscmVhZHlMb2FkZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvKipcbiAgICogTG9hZHMgYSBwbHVnLWluIGludG8gdGhpcyBQbHVnaW5Ib3N0LlxuICAgKlxuICAgKiBXaWxsIHVzZSBgcmVxdWlyZS5yZXNvbHZlKClgIHRvIGdldCB0aGUgbW9zdCBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbiBvZiB3aGF0XG4gICAqIGNvZGUgd2lsbCBnZXQgbG9hZGVkIGluIGVycm9yIG1lc3NhZ2VzLiBBcyBzdWNoLCBpdCB3aWxsIG5vdCB3b3JrIGluXG4gICAqIHVuaXQgdGVzdHMgd2l0aCBKZXN0IHZpcnR1YWwgbW9kdWxlcyBiZWNhdWFzZSBvZiBcXDxodHRwczovL2dpdGh1Yi5jb20vamVzdGpzL2plc3QvaXNzdWVzLzk1NDNcXD4uXG4gICAqXG4gICAqIEBwYXJhbSBtb2R1bGVTcGVjIC0gdGhlIHNwZWNpZmljYXRpb24gKHBhdGggb3IgbmFtZSkgb2YgdGhlIHBsdWctaW4gbW9kdWxlIHRvIGJlIGxvYWRlZC5cbiAgICogQHBhcmFtIGlvSG9zdCAtIHRoZSBJL08gaG9zdCB0byB1c2UgZm9yIHByaW50aW5nIHByb2dyZXNzIGluZm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbG9hZChtb2R1bGVTcGVjOiBzdHJpbmcsIGlvSG9zdD86IElJb0hvc3QpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHRoaXMuX2RvUmVzb2x2ZShtb2R1bGVTcGVjKTtcbiAgICBpZiAoaW9Ib3N0KSB7XG4gICAgICBhd2FpdCBJb0hlbHBlci5mcm9tSW9Ib3N0KGlvSG9zdCwgJ2luaXQnKS5kZWZhdWx0cy5kZWJ1ZyhgTG9hZGluZyBwbHVnLWluOiAke3Jlc29sdmVkfSBmcm9tICR7bW9kdWxlU3BlY31gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RvTG9hZChyZXNvbHZlZCk7XG4gIH1cblxuICAvKipcbiAgICogRG8gdGhlIHJlc29sdmluZyBvZiBhIG1vZHVsZSBzdHJpbmcgdG8gYW4gYWN0dWFsIHBhdGhcbiAgICovXG4gIHByaXZhdGUgX2RvUmVzb2x2ZShtb2R1bGVTcGVjOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUucmVzb2x2ZShtb2R1bGVTcGVjKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGFjY29yZGluZyB0byBOb2RlLmpzIGRvY3MgYE1PRFVMRV9OT1RfRk9VTkRgIGlzIHRoZSBvbmx5IHBvc3NpYmxlIGVycm9yIGhlcmVcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9tb2R1bGVzLmh0bWwjcmVxdWlyZXJlc29sdmVyZXF1ZXN0LW9wdGlvbnNcbiAgICAgIC8vIE5vdCB1c2luZyBgd2l0aENhdXNlKClgIGhlcmUsIHNpbmNlIHRoZSBub2RlIGVycm9yIGNvbnRhaW5zIGEgXCJSZXF1aXJlIFN0YWNrXCJcbiAgICAgIC8vIGFzIHBhcnQgb2YgdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBpcyBpbmhlcmVudGx5IHVzZWxlc3MgdG8gb3VyIHVzZXJzLlxuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgVW5hYmxlIHRvIHJlc29sdmUgcGx1Zy1pbjogQ2Fubm90IGZpbmQgbW9kdWxlICcke21vZHVsZVNwZWN9JzogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEbyB0aGUgbG9hZGluZyBnaXZlbiBhbiBhbHJlYWR5LXJlc29sdmVkIG1vZHVsZSBuYW1lXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9kb0xvYWQocmVzb2x2ZWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5hbHJlYWR5TG9hZGVkLmhhcyhyZXNvbHZlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKHJlc29sdmVkKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICAgIGlmICghaXNQbHVnaW4ocGx1Z2luKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBNb2R1bGUgJHtyZXNvbHZlZH0gaXMgbm90IGEgdmFsaWQgcGx1Zy1pbiwgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHZlcnNpb24uYCk7XG4gICAgICB9XG4gICAgICBpZiAocGx1Z2luLmluaXQpIHtcbiAgICAgICAgcGx1Z2luLmluaXQodGhpcyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWxyZWFkeUxvYWRlZC5hZGQocmVzb2x2ZWQpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgVG9vbGtpdEVycm9yLndpdGhDYXVzZShgVW5hYmxlIHRvIGxvYWQgcGx1Zy1pbiAnJHtyZXNvbHZlZH0nYCwgZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNQbHVnaW4oeDogYW55KTogeCBpcyBQbHVnaW4ge1xuICAgICAgcmV0dXJuIHggIT0gbnVsbCAmJiB4LnZlcnNpb24gPT09ICcxJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIHBsdWctaW5zIHRvIHJlZ2lzdGVyIG5ldyBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIC0gYSBuZXcgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlIHRvIHJlZ2lzdGVyLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKHNvdXJjZTogQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKSB7XG4gICAgLy8gRm9yd2FyZCB0byB0aGUgcmlnaHQgY3JlZGVudGlhbHMtcmVsYXRlZCBwbHVnaW4gaG9zdFxuICAgIHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5wdXNoKHNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogKEVYUEVSSU1FTlRBTCkgQWxsb3cgcGx1Z2lucyB0byByZWdpc3RlciBjb250ZXh0IHByb3ZpZGVyc1xuICAgKlxuICAgKiBDb250ZXh0IHByb3ZpZGVycyBhcmUgb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiAgIGdldFZhbHVlKGFyZ3M6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xuICAgKiBgYGBcbiAgICpcbiAgICogQ3VycmVudGx5LCB0aGV5IGNhbm5vdCByZXVzZSB0aGUgQ0RLJ3MgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcywgc28gdGhleVxuICAgKiBtdXN0IGJlIHByZXBhcmVkIHRvIGVpdGhlciBub3QgbWFrZSBBV1MgY2FsbHMgb3IgdXNlIHRoZWlyIG93biBzb3VyY2Ugb2ZcbiAgICogQVdTIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLCBhbmQgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGludGVybmFsbHkgYXQgQW1hem9uXG4gICAqIGFzIGEgdHJpYWwuXG4gICAqXG4gICAqIEFmdGVyIHJlZ2lzdGVyaW5nIHdpdGggJ215LXBsdWdpbi1uYW1lJywgdGhlIHByb3ZpZGVyIG11c3QgYmUgYWRkcmVzc2VkIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IHZhbHVlID0gQ29udGV4dFByb3ZpZGVyLmdldFZhbHVlKHRoaXMsIHtcbiAgICogICBwcm92aWRlck5hbWU6ICdwbHVnaW4nLFxuICAgKiAgIHByb3BzOiB7XG4gICAqICAgICBwbHVnaW5OYW1lOiAnbXktcGx1Z2luLW5hbWUnLFxuICAgKiAgICAgbXlQYXJhbWV0ZXIxOiAneHl6JyxcbiAgICogICB9LFxuICAgKiAgIGluY2x1ZGVFbnZpcm9ubWVudDogdHJ1ZSB8IGZhbHNlLFxuICAgKiAgIGR1bW15VmFsdWU6ICd3aGF0LXRvLXJldHVybi1vbi10aGUtZmlyc3QtcGFzcycsXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXJBbHBoYShwbHVnaW5Qcm92aWRlck5hbWU6IHN0cmluZywgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlclBsdWdpbikge1xuICAgIGlmICghaXNDb250ZXh0UHJvdmlkZXJQbHVnaW4ocHJvdmlkZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBPYmplY3QgeW91IGdhdmUgbWUgZG9lcyBub3QgbG9vayBsaWtlIGEgQ29udGV4dFByb3ZpZGVyUGx1Z2luOiAke2luc3BlY3QocHJvdmlkZXIpfWApO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHRQcm92aWRlclBsdWdpbnNbcGx1Z2luUHJvdmlkZXJOYW1lXSA9IHByb3ZpZGVyO1xuICB9XG59XG4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUUvQix1RUFBZ0c7QUFDaEcsK0RBQTJEO0FBRTNELDJDQUF5QztBQUV6Qzs7Ozs7O0dBTUc7QUFDSCxNQUFhLFVBQVU7SUFDckI7OztPQUdHO0lBQ2EseUJBQXlCLEdBQUcsSUFBSSxLQUFLLEVBQTRCLENBQUM7SUFFbEUsc0JBQXNCLEdBQTBDLEVBQUUsQ0FBQztJQUU1RSxNQUFNLENBQVc7SUFFUCxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVuRDs7Ozs7Ozs7O09BU0c7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQWtCLEVBQUUsTUFBZ0I7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxrQkFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsUUFBUSxTQUFTLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVLENBQUMsVUFBa0I7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLCtFQUErRTtZQUMvRSx5RUFBeUU7WUFDekUsZ0ZBQWdGO1lBQ2hGLHdFQUF3RTtZQUN4RSxNQUFNLElBQUksNEJBQVksQ0FBQyxxQkFBcUIsRUFBRSxrREFBa0QsVUFBVSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkgsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLFFBQWdCO1FBQzdCLElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTztZQUNULENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSw0QkFBWSxDQUFDLGVBQWUsRUFBRSxVQUFVLFFBQVEseURBQXlELENBQUMsQ0FBQztZQUN2SCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sNEJBQVksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsMkJBQTJCLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFNO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQ0FBZ0MsQ0FBQyxNQUFnQztRQUN0RSx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0ErQkc7SUFDSSw0QkFBNEIsQ0FBQyxrQkFBMEIsRUFBRSxRQUErQjtRQUM3RixJQUFJLENBQUMsSUFBQSxpREFBdUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSw0QkFBWSxDQUFDLHdCQUF3QixFQUFFLGtFQUFrRSxJQUFBLGNBQU8sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUksQ0FBQztRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUE3SEQsZ0NBNkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2UsIElQbHVnaW5Ib3N0LCBQbHVnaW4gfSBmcm9tICdAYXdzLWNkay9jbGktcGx1Z2luLWNvbnRyYWN0JztcbmltcG9ydCB7IHR5cGUgQ29udGV4dFByb3ZpZGVyUGx1Z2luLCBpc0NvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci1wbHVnaW4nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB0eXBlIHsgSUlvSG9zdCB9IGZyb20gJy4uL2lvJztcbmltcG9ydCB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5cbi8qKlxuICogQ2xhc3MgdG8gbWFuYWdlIGEgcGx1Z2luIGNvbGxlY3Rpb25cbiAqXG4gKiBJdCBwcm92aWRlcyBhIGBsb2FkKClgIGZ1bmN0aW9uIHRoYXQgbG9hZHMgYSBKYXZhU2NyaXB0XG4gKiBtb2R1bGUgZnJvbSBkaXNrLCBhbmQgZ2l2ZXMgaXQgYWNjZXNzIHRvIHRoZSBgSVBsdWdpbkhvc3RgIGludGVyZmFjZVxuICogdG8gcmVnaXN0ZXIgaXRzZWxmLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luSG9zdCBpbXBsZW1lbnRzIElQbHVnaW5Ib3N0IHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy4gTmV3IHNvdXJjZXMgY2FuXG4gICAqIGJlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlICtyZWdpc3RlckNyZWRlbnRpYWxQcm92aWRlclNvdXJjZSsgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMgPSBuZXcgQXJyYXk8Q3JlZGVudGlhbFByb3ZpZGVyU291cmNlPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0UHJvdmlkZXJQbHVnaW5zOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0UHJvdmlkZXJQbHVnaW4+ID0ge307XG5cbiAgcHVibGljIGlvSG9zdD86IElJb0hvc3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbHJlYWR5TG9hZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgcGx1Zy1pbiBpbnRvIHRoaXMgUGx1Z2luSG9zdC5cbiAgICpcbiAgICogV2lsbCB1c2UgYHJlcXVpcmUucmVzb2x2ZSgpYCB0byBnZXQgdGhlIG1vc3QgYWNjdXJhdGUgcmVwcmVzZW50YXRpb24gb2Ygd2hhdFxuICAgKiBjb2RlIHdpbGwgZ2V0IGxvYWRlZCBpbiBlcnJvciBtZXNzYWdlcy4gQXMgc3VjaCwgaXQgd2lsbCBub3Qgd29yayBpblxuICAgKiB1bml0IHRlc3RzIHdpdGggSmVzdCB2aXJ0dWFsIG1vZHVsZXMgYmVjYXVhc2Ugb2YgXFw8aHR0cHM6Ly9naXRodWIuY29tL2plc3Rqcy9qZXN0L2lzc3Vlcy85NTQzXFw+LlxuICAgKlxuICAgKiBAcGFyYW0gbW9kdWxlU3BlYyAtIHRoZSBzcGVjaWZpY2F0aW9uIChwYXRoIG9yIG5hbWUpIG9mIHRoZSBwbHVnLWluIG1vZHVsZSB0byBiZSBsb2FkZWQuXG4gICAqIEBwYXJhbSBpb0hvc3QgLSB0aGUgSS9PIGhvc3QgdG8gdXNlIGZvciBwcmludGluZyBwcm9ncmVzcyBpbmZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvYWQobW9kdWxlU3BlYzogc3RyaW5nLCBpb0hvc3Q/OiBJSW9Ib3N0KSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLl9kb1Jlc29sdmUobW9kdWxlU3BlYyk7XG4gICAgaWYgKGlvSG9zdCkge1xuICAgICAgYXdhaXQgSW9IZWxwZXIuZnJvbUlvSG9zdChpb0hvc3QsICdpbml0JykuZGVmYXVsdHMuZGVidWcoYExvYWRpbmcgcGx1Zy1pbjogJHtyZXNvbHZlZH0gZnJvbSAke21vZHVsZVNwZWN9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kb0xvYWQocmVzb2x2ZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERvIHRoZSByZXNvbHZpbmcgb2YgYSBtb2R1bGUgc3RyaW5nIHRvIGFuIGFjdHVhbCBwYXRoXG4gICAqL1xuICBwcml2YXRlIF9kb1Jlc29sdmUobW9kdWxlU3BlYzogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUobW9kdWxlU3BlYyk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBhY2NvcmRpbmcgdG8gTm9kZS5qcyBkb2NzIGBNT0RVTEVfTk9UX0ZPVU5EYCBpcyB0aGUgb25seSBwb3NzaWJsZSBlcnJvciBoZXJlXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvbW9kdWxlcy5odG1sI3JlcXVpcmVyZXNvbHZlcmVxdWVzdC1vcHRpb25zXG4gICAgICAvLyBOb3QgdXNpbmcgYHdpdGhDYXVzZSgpYCBoZXJlLCBzaW5jZSB0aGUgbm9kZSBlcnJvciBjb250YWlucyBhIFwiUmVxdWlyZSBTdGFja1wiXG4gICAgICAvLyBhcyBwYXJ0IG9mIHRoZSBlcnJvciBtZXNzYWdlIHRoYXQgaXMgaW5oZXJlbnRseSB1c2VsZXNzIHRvIG91ciB1c2Vycy5cbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1BsdWdpblJlc29sdmVGYWlsZWQnLCBgVW5hYmxlIHRvIHJlc29sdmUgcGx1Zy1pbjogQ2Fubm90IGZpbmQgbW9kdWxlICcke21vZHVsZVNwZWN9JzogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEbyB0aGUgbG9hZGluZyBnaXZlbiBhbiBhbHJlYWR5LXJlc29sdmVkIG1vZHVsZSBuYW1lXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9kb0xvYWQocmVzb2x2ZWQ6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5hbHJlYWR5TG9hZGVkLmhhcyhyZXNvbHZlZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKHJlc29sdmVkKTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICAgIGlmICghaXNQbHVnaW4ocGx1Z2luKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdJbnZhbGlkUGx1Z2luJywgYE1vZHVsZSAke3Jlc29sdmVkfSBpcyBub3QgYSB2YWxpZCBwbHVnLWluLCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbi5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChwbHVnaW4uaW5pdCkge1xuICAgICAgICBwbHVnaW4uaW5pdCh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbHJlYWR5TG9hZGVkLmFkZChyZXNvbHZlZCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBUb29sa2l0RXJyb3Iud2l0aENhdXNlKCdQbHVnaW5Mb2FkRmFpbGVkJywgYFVuYWJsZSB0byBsb2FkIHBsdWctaW4gJyR7cmVzb2x2ZWR9J2AsIGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUGx1Z2luKHg6IGFueSk6IHggaXMgUGx1Z2luIHtcbiAgICAgIHJldHVybiB4ICE9IG51bGwgJiYgeC52ZXJzaW9uID09PSAnMSc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBwbHVnLWlucyB0byByZWdpc3RlciBuZXcgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZSAtIGEgbmV3IENyZWRlbnRpYWxQcm92aWRlclNvdXJjZSB0byByZWdpc3Rlci5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckNyZWRlbnRpYWxQcm92aWRlclNvdXJjZShzb3VyY2U6IENyZWRlbnRpYWxQcm92aWRlclNvdXJjZSkge1xuICAgIC8vIEZvcndhcmQgdG8gdGhlIHJpZ2h0IGNyZWRlbnRpYWxzLXJlbGF0ZWQgcGx1Z2luIGhvc3RcbiAgICB0aGlzLmNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMucHVzaChzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIChFWFBFUklNRU5UQUwpIEFsbG93IHBsdWdpbnMgdG8gcmVnaXN0ZXIgY29udGV4dCBwcm92aWRlcnNcbiAgICpcbiAgICogQ29udGV4dCBwcm92aWRlcnMgYXJlIG9iamVjdHMgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZDpcbiAgICpcbiAgICogYGBgdHNcbiAgICogICBnZXRWYWx1ZShhcmdzOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFByb21pc2U8YW55PjtcbiAgICogYGBgXG4gICAqXG4gICAqIEN1cnJlbnRseSwgdGhleSBjYW5ub3QgcmV1c2UgdGhlIENESydzIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMsIHNvIHRoZXlcbiAgICogbXVzdCBiZSBwcmVwYXJlZCB0byBlaXRoZXIgbm90IG1ha2UgQVdTIGNhbGxzIG9yIHVzZSB0aGVpciBvd24gc291cmNlIG9mXG4gICAqIEFXUyBjcmVkZW50aWFscy5cbiAgICpcbiAgICogVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCwgYW5kIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbnRlcm5hbGx5IGF0IEFtYXpvblxuICAgKiBhcyBhIHRyaWFsLlxuICAgKlxuICAgKiBBZnRlciByZWdpc3RlcmluZyB3aXRoICdteS1wbHVnaW4tbmFtZScsIHRoZSBwcm92aWRlciBtdXN0IGJlIGFkZHJlc3NlZCBhcyBmb2xsb3dzOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCB2YWx1ZSA9IENvbnRleHRQcm92aWRlci5nZXRWYWx1ZSh0aGlzLCB7XG4gICAqICAgcHJvdmlkZXJOYW1lOiAncGx1Z2luJyxcbiAgICogICBwcm9wczoge1xuICAgKiAgICAgcGx1Z2luTmFtZTogJ215LXBsdWdpbi1uYW1lJyxcbiAgICogICAgIG15UGFyYW1ldGVyMTogJ3h5eicsXG4gICAqICAgfSxcbiAgICogICBpbmNsdWRlRW52aXJvbm1lbnQ6IHRydWUgfCBmYWxzZSxcbiAgICogICBkdW1teVZhbHVlOiAnd2hhdC10by1yZXR1cm4tb24tdGhlLWZpcnN0LXBhc3MnLFxuICAgKiB9KVxuICAgKiBgYGBcbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyQWxwaGEocGx1Z2luUHJvdmlkZXJOYW1lOiBzdHJpbmcsIHByb3ZpZGVyOiBDb250ZXh0UHJvdmlkZXJQbHVnaW4pIHtcbiAgICBpZiAoIWlzQ29udGV4dFByb3ZpZGVyUGx1Z2luKHByb3ZpZGVyKSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignSW52YWxpZENvbnRleHRQcm92aWRlcicsIGBPYmplY3QgeW91IGdhdmUgbWUgZG9lcyBub3QgbG9vayBsaWtlIGEgQ29udGV4dFByb3ZpZGVyUGx1Z2luOiAke2luc3BlY3QocHJvdmlkZXIpfWApO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHRQcm92aWRlclBsdWdpbnNbcGx1Z2luUHJvdmlkZXJOYW1lXSA9IHByb3ZpZGVyO1xuICB9XG59XG4iXX0=
@@ -78,7 +78,7 @@ class RefactoringContext {
78
78
  }
79
79
  if (bootstrapVersion != null && bootstrapVersion < 28) {
80
80
  const environment = `aws://${this.environment.account}/${this.environment.region}`;
81
- throw new toolkit_error_1.ToolkitError(`The CDK toolkit stack in environment ${environment} doesn't support refactoring. Please run 'cdk bootstrap ${environment}' to update it.`);
81
+ throw new toolkit_error_1.ToolkitError('BootstrapVersionTooLow', `The CDK toolkit stack in environment ${environment} doesn't support refactoring. Please run 'cdk bootstrap ${environment}' to update it.`);
82
82
  }
83
83
  }
84
84
  async findRoleToAssume(sdkProvider) {
@@ -103,7 +103,7 @@ class RefactoringContext {
103
103
  }
104
104
  if (roleArns.size !== 1) {
105
105
  // Unlikely to happen. But if it does, we can't proceed
106
- throw new toolkit_error_1.ToolkitError(`Multiple stacks in environment aws://${env.account}/${env.region} have different deployment role ARNs. Cannot proceed.`);
106
+ throw new toolkit_error_1.ToolkitError('MultipleDeploymentRoles', `Multiple stacks in environment aws://${env.account}/${env.region} have different deployment role ARNs. Cannot proceed.`);
107
107
  }
108
108
  const arn = Array.from(roleArns)[0];
109
109
  if (arn != null) {
@@ -171,7 +171,7 @@ function resourceMoves(before, after, direction = 'direct', ignoreModifications
171
171
  message.push('');
172
172
  message.push('Hint: by default, only deployed stacks that have the same name as a local stack are included.');
173
173
  message.push('If you want to include additional deployed stacks for comparison, re-run the command with the option \'--additional-stack-name=<STACK>\' for each stack.');
174
- throw new toolkit_error_1.ToolkitError(message.join('\n'));
174
+ throw new toolkit_error_1.ToolkitError('RefactorResourceMismatch', message.join('\n'));
175
175
  }
176
176
  return Object.values(removeUnmovedResources(zip(digestsBefore, digestsAfter)));
177
177
  }
@@ -328,4 +328,4 @@ async function replaceAwsPlaceholders(object, aws) {
328
328
  },
329
329
  });
330
330
  }
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd1lBLHdEQTJCQztBQW5hRCw0REFBc0U7QUFFdEUsb0VBQXNFO0FBR3RFLHFEQUFxRTtBQUVyRSxxQ0FBa0Q7QUFDbEQsK0RBQTJEO0FBQzNELDBDQUFxRDtBQUdyRCxnREFBOEQ7QUFFOUQsc0NBQWlDO0FBa0JqQzs7R0FFRztBQUNILE1BQWEsa0JBQWtCO0lBQ1osU0FBUyxHQUFzQixFQUFFLENBQUM7SUFDbEMsY0FBYyxHQUFtQixFQUFFLENBQUM7SUFDcEMsV0FBVyxDQUF3QjtJQUNuQyxhQUFhLENBQVU7SUFDeEIsV0FBVyxDQUFjO0lBRXpDLFlBQVksS0FBZ0M7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUV6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QUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3ZELENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLE1BQVMsRUFDVCxHQUFTO0lBRVQsSUFBSSxTQUFTLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDekIsTUFBTSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLEtBQUssSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDN0MsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRixPQUFPLDRDQUF1QixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDbEQsS0FBSyxDQUFDLE1BQU07WUFDVixPQUFPLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELEtBQUssQ0FBQyxTQUFTO1lBQ2IsT0FBTyxDQUFDLE1BQU0sT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDckMsQ0FBQztRQUNELEtBQUssQ0FBQyxTQUFTO1lBQ2IsT0FBTyxTQUFTLEVBQUUsQ0FBQztRQUNyQixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlZmF1bHRBd3NDbGllbnQsIHR5cGUgSUF3cyB9IGZyb20gJ0Bhd3MtY2RrL2Nkay1hc3NldHMtbGliJztcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRQbGFjZWhvbGRlcnMgfSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUgeyBTdGFja0RlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvblN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2F0aW9uLCBSZXNvdXJjZU1hcHBpbmcgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB0eXBlIHsgR3JhcGhEaXJlY3Rpb24gfSBmcm9tICcuL2RpZ2VzdCc7XG5pbXBvcnQgeyBjb21wdXRlUmVzb3VyY2VEaWdlc3RzIH0gZnJvbSAnLi9kaWdlc3QnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IGVxdWFsU2V0cywgc2V0RGlmZiB9IGZyb20gJy4uLy4uL3V0aWwvc2V0cyc7XG5pbXBvcnQgdHlwZSB7IFNESyB9IGZyb20gJy4uL2F3cy1hdXRoL3Nkayc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkgfSBmcm9tICcuLi9lbnZpcm9ubWVudCc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vaW8vcHJpdmF0ZSc7XG5pbXBvcnQgeyBNb2RlIH0gZnJvbSAnLi4vcGx1Z2luJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIG1vdmVzIG9mIGEgcmVzb3VyY2UgZnJvbSBvbmUgbG9jYXRpb25cbiAqIHRvIGFub3RoZXIuIEluIHRoZSBpZGVhbCBjYXNlLCB0aGVyZSBpcyBvbmx5IG9uZSBzb3VyY2UgYW5kIG9ubHkgb25lXG4gKiBkZXN0aW5hdGlvbi5cbiAqL1xudHlwZSBSZXNvdXJjZU1vdmUgPSBbUmVzb3VyY2VMb2NhdGlvbltdLCBSZXNvdXJjZUxvY2F0aW9uW11dO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZmFjdG9yaW5nQ29udGV4dE9wdGlvbnMge1xuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQ7XG4gIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIG92ZXJyaWRlcz86IFJlc291cmNlTWFwcGluZ1tdO1xuICBhc3N1bWVSb2xlQXJuPzogc3RyaW5nO1xuICBpZ25vcmVNb2RpZmljYXRpb25zPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFbmNhcHN1bGF0ZXMgdGhlIGluZm9ybWF0aW9uIGZvciByZWZhY3RvcmluZyByZXNvdXJjZXMgaW4gYSBzaW5nbGUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWZhY3RvcmluZ0NvbnRleHQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXBwaW5nczogUmVzb3VyY2VNYXBwaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbWJpZ3VvdXNNb3ZlczogUmVzb3VyY2VNb3ZlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFzc3VtZVJvbGVBcm4/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQ7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJlZmFjdG9yaW5nQ29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gcHJvcHMuZW52aXJvbm1lbnQ7XG4gICAgY29uc3QgbW92ZXMgPSByZXNvdXJjZU1vdmVzKHByb3BzLmRlcGxveWVkU3RhY2tzLCBwcm9wcy5sb2NhbFN0YWNrcywgJ2RpcmVjdCcsIHByb3BzLmlnbm9yZU1vZGlmaWNhdGlvbnMpO1xuICAgIGNvbnN0IGFkZGl0aW9uYWxPdmVycmlkZXMgPSBzdHJ1Y3R1cmFsT3ZlcnJpZGVzKHByb3BzLmRlcGxveWVkU3RhY2tzLCBwcm9wcy5sb2NhbFN0YWNrcyk7XG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gKHByb3BzLm92ZXJyaWRlcyA/PyBbXSkuY29uY2F0KGFkZGl0aW9uYWxPdmVycmlkZXMpO1xuICAgIGNvbnN0IFtub25BbWJpZ3VvdXNNb3ZlcywgYW1iaWd1b3VzTW92ZXNdID0gcGFydGl0aW9uQnlBbWJpZ3VpdHkob3ZlcnJpZGVzLCBtb3Zlcyk7XG4gICAgdGhpcy5hbWJpZ3VvdXNNb3ZlcyA9IGFtYmlndW91c01vdmVzO1xuICAgIHRoaXMubG9jYWxTdGFja3MgPSBwcm9wcy5sb2NhbFN0YWNrcztcbiAgICB0aGlzLmFzc3VtZVJvbGVBcm4gPSBwcm9wcy5hc3N1bWVSb2xlQXJuO1xuXG4gICAgdGhpcy5fbWFwcGluZ3MgPSByZXNvdXJjZU1hcHBpbmdzKG5vbkFtYmlndW91c01vdmVzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYW1iaWd1b3VzUGF0aHMoKTogW3N0cmluZ1tdLCBzdHJpbmdbXV1bXSB7XG4gICAgcmV0dXJuIHRoaXMuYW1iaWd1b3VzTW92ZXMubWFwKChbYSwgYl0pID0+IFtjb252ZXJ0KGEpLCBjb252ZXJ0KGIpXSk7XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0KGxvY2F0aW9uczogUmVzb3VyY2VMb2NhdGlvbltdKTogc3RyaW5nW10ge1xuICAgICAgcmV0dXJuIGxvY2F0aW9ucy5tYXAoKGwpID0+IGwudG9QYXRoKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWFwcGluZ3MoKTogUmVzb3VyY2VNYXBwaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9tYXBwaW5ncztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBleGVjdXRlKHN0YWNrRGVmaW5pdGlvbnM6IFN0YWNrRGVmaW5pdGlvbltdLCBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGlvSGVscGVyOiBJb0hlbHBlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm1hcHBpbmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtZVJvbGVBcm4gPSB0aGlzLmFzc3VtZVJvbGVBcm4gPz8gYXdhaXQgdGhpcy5maW5kUm9sZVRvQXNzdW1lKHNka1Byb3ZpZGVyKTtcbiAgICBjb25zdCBzZGsgPSAoXG4gICAgICBhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCh0aGlzLmVudmlyb25tZW50LCBNb2RlLkZvcldyaXRpbmcsIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybixcbiAgICAgIH0pXG4gICAgKS5zZGs7XG5cbiAgICBhd2FpdCB0aGlzLmNoZWNrQm9vdHN0cmFwVmVyc2lvbihzZGssIGlvSGVscGVyKTtcblxuICAgIGNvbnN0IGNmbiA9IHNkay5jbG91ZEZvcm1hdGlvbigpO1xuICAgIGNvbnN0IG1hcHBpbmdzID0gdGhpcy5tYXBwaW5ncztcblxuICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgUmVzb3VyY2VNYXBwaW5nczogbWFwcGluZ3MubWFwKChtKSA9PiBtLnRvQ2xvdWRGb3JtYXRpb24oKSksXG4gICAgICBTdGFja0RlZmluaXRpb25zOiBzdGFja0RlZmluaXRpb25zLFxuICAgIH07XG4gICAgY29uc3QgcmVmYWN0b3IgPSBhd2FpdCBjZm4uY3JlYXRlU3RhY2tSZWZhY3RvcihpbnB1dCk7XG5cbiAgICBhd2FpdCBjZm4ud2FpdFVudGlsU3RhY2tSZWZhY3RvckNyZWF0ZUNvbXBsZXRlKHtcbiAgICAgIFN0YWNrUmVmYWN0b3JJZDogcmVmYWN0b3IuU3RhY2tSZWZhY3RvcklkLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY2ZuLmV4ZWN1dGVTdGFja1JlZmFjdG9yKHtcbiAgICAgIFN0YWNrUmVmYWN0b3JJZDogcmVmYWN0b3IuU3RhY2tSZWZhY3RvcklkLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgY2ZuLndhaXRVbnRpbFN0YWNrUmVmYWN0b3JFeGVjdXRlQ29tcGxldGUoe1xuICAgICAgU3RhY2tSZWZhY3RvcklkOiByZWZhY3Rvci5TdGFja1JlZmFjdG9ySWQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrQm9vdHN0cmFwVmVyc2lvbihzZGs6IFNESywgaW9IZWxwZXI6IElvSGVscGVyKSB7XG4gICAgY29uc3QgZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSA9IG5ldyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5KCk7XG4gICAgY29uc3QgZW52UmVzb3VyY2VzID0gZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeS5mb3IodGhpcy5lbnZpcm9ubWVudCwgc2RrLCBpb0hlbHBlcik7XG4gICAgbGV0IGJvb3RzdHJhcFZlcnNpb246IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGdldCB0aGUgYm9vdHN0cmFwIHZlcnNpb25cbiAgICAgIGJvb3RzdHJhcFZlcnNpb24gPSAoYXdhaXQgZW52UmVzb3VyY2VzLmxvb2t1cFRvb2xraXQoKSkudmVyc2lvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBCdXQgaWYgd2UgY2FuJ3QsIGtlZXAgZ29pbmcuIE1heWJlIHdlIGNhbiBzdGlsbCBzdWNjZWVkLlxuICAgIH1cbiAgICBpZiAoYm9vdHN0cmFwVmVyc2lvbiAhPSBudWxsICYmIGJvb3RzdHJhcFZlcnNpb24gPCAyOCkge1xuICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBgYXdzOi8vJHt0aGlzLmVudmlyb25tZW50LmFjY291bnR9LyR7dGhpcy5lbnZpcm9ubWVudC5yZWdpb259YDtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgIGBUaGUgQ0RLIHRvb2xraXQgc3RhY2sgaW4gZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH0gZG9lc24ndCBzdXBwb3J0IHJlZmFjdG9yaW5nLiBQbGVhc2UgcnVuICdjZGsgYm9vdHN0cmFwICR7ZW52aXJvbm1lbnR9JyB0byB1cGRhdGUgaXQuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kUm9sZVRvQXNzdW1lKHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcik6IFByb21pc2UgPCBzdHJpbmcgfCB1bmRlZmluZWQgPiB7XG4gICAgLy8gVG8gZXhlY3V0ZSBhIHJlZmFjdG9yLCB3ZSBuZWVkIHRoZSBkZXBsb3ltZW50IHJvbGUgQVJOIGZvciB0aGUgZ2l2ZW5cbiAgICAvLyBlbnZpcm9ubWVudC4gTW9zdCB0b29sa2l0IGNvbW1hbmRzIGdldCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggcm9sZXMgdG9cbiAgICAvLyBhc3N1bWUgZnJvbSB0aGUgY2xvdWQgYXNzZW1ibHkgKGFuZCB1bHRpbWF0ZWx5IGZyb20gdGhlIENESyBmcmFtZXdvcmspLiBSZWZhY3RvclxuICAgIC8vIGlzIGRpZmZlcmVudCBiZWNhdXNlIGl0IGlzIG5vdCB0aGUgYXBwbGljYXRpb24vZnJhbWV3b3JrIHRoYXQgZGljdGF0ZXMgd2hhdCB0aGVcbiAgICAvLyB0b29sa2l0IHNob3VsZCBkbywgYnV0IGl0IGlzIHRoZSB0b29sa2l0IGl0c2VsZiB0aGF0IGhhcyB0byBmaWd1cmUgaXQgb3V0LlxuICAgIC8vXG4gICAgLy8gTmV2ZXJ0aGVsZXNzLCB0aGUgY2xvdWQgYXNzZW1ibHkgaXMgdGhlIG1vc3QgcmVsaWFibGUgc291cmNlIGZvciB0aGlzIGtpbmQgb2ZcbiAgICAvLyBpbmZvcm1hdGlvbi4gRm9yIHRoZSBkZXBsb3ltZW50IHJvbGUgQVJOLCBpbiBwYXJ0aWN1bGFyLCB3aGF0IHdlIGRvIGhlcmVcbiAgICAvLyBpcyBsb29rIGF0IGFsbCB0aGUgc3RhY2tzIGZvciBhIGdpdmVuIGVudmlyb25tZW50IGluIHRoZSBjbG91ZCBhc3NlbWJseSBhbmRcbiAgICAvLyBleHRyYWN0IHRoZSBkZXBsb3ltZW50IHJvbGUgQVJOIHRoYXQgaXMgY29tbW9uIHRvIGFsbCBvZiB0aGVtLiBJZiBubyByb2xlIGlzXG4gICAgLy8gZm91bmQsIHdlIGdvIGFoZWFkIHdpdGhvdXQgYXNzdW1pbmcgYSByb2xlLiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJvbGUsXG4gICAgLy8gd2UgY29uc2lkZXIgdGhhdCBhbiBpbnZhcmlhbnQgd2FzIHZpb2xhdGVkLCBhbmQgdGhyb3cgYW4gZXJyb3IuXG5cbiAgICBjb25zdCBlbnYgPSB0aGlzLmVudmlyb25tZW50O1xuICAgIGNvbnN0IHJvbGVBcm5zID0gbmV3IFNldChcbiAgICAgIHRoaXMubG9jYWxTdGFja3NcbiAgICAgICAgLmZpbHRlcigocykgPT4gcy5lbnZpcm9ubWVudC5hY2NvdW50ID09PSBlbnYuYWNjb3VudCAmJiBzLmVudmlyb25tZW50LnJlZ2lvbiA9PT0gZW52LnJlZ2lvbilcbiAgICAgICAgLm1hcCgocykgPT4gcy5hc3N1bWVSb2xlQXJuKSxcbiAgICApO1xuXG4gICAgaWYgKHJvbGVBcm5zLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJvbGVBcm5zLnNpemUgIT09IDEpIHtcbiAgICAgIC8vIFVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmIGl0IGRvZXMsIHdlIGNhbid0IHByb2NlZWRcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgIGBNdWx0aXBsZSBzdGFja3MgaW4gZW52aXJvbm1lbnQgYXdzOi8vJHtlbnYuYWNjb3VudH0vJHtlbnYucmVnaW9ufSBoYXZlIGRpZmZlcmVudCBkZXBsb3ltZW50IHJvbGUgQVJOcy4gQ2Fubm90IHByb2NlZWQuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJuID0gQXJyYXkuZnJvbShyb2xlQXJucylbMF07XG4gICAgaWYgKGFybiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByZXNvbHZlZEVudiA9IGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChlbnYpO1xuICAgICAgY29uc3QgcmVnaW9uID0gcmVzb2x2ZWRFbnYucmVnaW9uO1xuICAgICAgcmV0dXJuIChhd2FpdCByZXBsYWNlQXdzUGxhY2Vob2xkZXJzKHsgcmVnaW9uLCBhc3N1bWVSb2xlQXJuOiBhcm4gfSwgbmV3IERlZmF1bHRBd3NDbGllbnQoKSkpLmFzc3VtZVJvbGVBcm47XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCBhIHJvbGUgQVJOLCB3ZSBjYW4gcHJvY2VlZCB3aXRob3V0IGFzc3VtaW5nIGEgcm9sZS5cbiAgICAvLyBNYXliZSB0aGUgZGVmYXVsdCBjcmVkZW50aWFscyBoYXZlIHBlcm1pc3Npb25zIHRvIGRvIHdoYXQgd2UgbmVlZC5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGF1dG9tYXRpYyBsaXN0IG9mIG92ZXJyaWRlcyB0aGF0IGNhbiBiZSBkZWR1Y2VkIGZyb20gdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3Bwb3NpdGUgcmVzb3VyY2UgZ3JhcGguXG4gKiBTdXBwb3NlIHdlIGhhdmUgdGhlIGZvbGxvd2luZyByZXNvdXJjZSBncmFwaDpcbiAqXG4gKiAgICAgQSAtLT4gQlxuICogICAgIEMgLS0+IERcbiAqXG4gKiBzdWNoIHRoYXQgQiBhbmQgRCBhcmUgaWRlbnRpY2FsLCBidXQgQSBpcyBkaWZmZXJlbnQgZnJvbSBDLiBUaGVuIGRpZ2VzdChCKSA9IGRpZ2VzdChEKS4gSWYgYm90aCByZXNvdXJjZXMgYXJlIG1vdmVkLFxuICogd2UgaGF2ZSBhbiBhbWJpZ3VpdHkuIEJ1dCBpZiB3ZSByZXZlcnNlIHRoZSBhcnJvd3M6XG4gKlxuICogICAgIEEgPC0tIEJcbiAqICAgICBDIDwtLSBEXG4gKlxuICogdGhlbiBkaWdlc3QoQikg4omgIGRpZ2VzdChEKSwgYmVjYXVzZSB0aGV5IG5vdyBoYXZlIGRpZmZlcmVudCBkZXBlbmRlbmNpZXMuIElmIHdlIGNvbXB1dGUgdGhlIG1hcHBpbmdzIGZyb20gdGhpc1xuICogb3Bwb3NpdGUgZ3JhcGgsIHdlIGNhbiB1c2UgdGhlbSBhcyBhIHNldCBvZiBvdmVycmlkZXMgdG8gZGlzYW1iaWd1YXRlIHRoZSBvcmlnaW5hbCBtb3Zlcy5cbiAqXG4gKi9cbmZ1bmN0aW9uIHN0cnVjdHVyYWxPdmVycmlkZXMoZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSwgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSk6IFJlc291cmNlTWFwcGluZ1tdIHtcbiAgY29uc3QgbW92ZXMgPSByZXNvdXJjZU1vdmVzKGRlcGxveWVkU3RhY2tzLCBsb2NhbFN0YWNrcywgJ29wcG9zaXRlJywgdHJ1ZSk7XG4gIGNvbnN0IFtub25BbWJpZ3VvdXNNb3Zlc10gPSBwYXJ0aXRpb25CeUFtYmlndWl0eShbXSwgbW92ZXMpO1xuICByZXR1cm4gcmVzb3VyY2VNYXBwaW5ncyhub25BbWJpZ3VvdXNNb3Zlcyk7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlTW92ZXMoXG4gIGJlZm9yZTogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBhZnRlcjogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBkaXJlY3Rpb246IEdyYXBoRGlyZWN0aW9uID0gJ2RpcmVjdCcsXG4gIGlnbm9yZU1vZGlmaWNhdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSk6IFJlc291cmNlTW92ZVtdIHtcbiAgY29uc3QgZGlnZXN0c0JlZm9yZSA9IHJlc291cmNlRGlnZXN0cyhiZWZvcmUsIGRpcmVjdGlvbik7XG4gIGNvbnN0IGRpZ2VzdHNBZnRlciA9IHJlc291cmNlRGlnZXN0cyhhZnRlciwgZGlyZWN0aW9uKTtcblxuICBpZiAoIShpZ25vcmVNb2RpZmljYXRpb25zIHx8IGlzb21vcnBoaWMoZGlnZXN0c0JlZm9yZSwgZGlnZXN0c0FmdGVyKSkpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gWydBIHJlZmFjdG9yIG9wZXJhdGlvbiBjYW5ub3QgYWRkLCByZW1vdmUgb3IgdXBkYXRlIHJlc291cmNlcy4gT25seSByZXNvdXJjZSBtb3ZlcyBhbmQgcmVuYW1lcyBhcmUgYWxsb3dlZC4nXTtcblxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSAoYTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPiwgYjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPikgPT4ge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc2V0RGlmZihuZXcgU2V0KE9iamVjdC5rZXlzKGEpKSwgbmV3IFNldChPYmplY3Qua2V5cyhiKSkpKS5mbGF0TWFwKGsgPT4gYVtrXSEpXG4gICAgICAgIC5tYXAoeCA9PiBgICAtICR7eC50b1BhdGgoKX1gKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhY2tOYW1lcyA9IChzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSkgPT5cbiAgICAgIHN0YWNrcy5sZW5ndGggPT09IDBcbiAgICAgICAgPyAnTk9ORSdcbiAgICAgICAgOiBzdGFja3NcbiAgICAgICAgICAubWFwKChzKSA9PiBzLnN0YWNrTmFtZSlcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICBjb25zdCBvbmx5RGVwbG95ZWQgPSBkaWZmZXJlbmNlKGRpZ2VzdHNCZWZvcmUsIGRpZ2VzdHNBZnRlcik7XG4gICAgY29uc3Qgb25seUxvY2FsID0gZGlmZmVyZW5jZShkaWdlc3RzQWZ0ZXIsIGRpZ2VzdHNCZWZvcmUpO1xuXG4gICAgaWYgKG9ubHlEZXBsb3llZC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXNzYWdlLnB1c2goYFRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBwcmVzZW50IG9ubHkgaW4gdGhlIEFXUyBlbnZpcm9ubWVudDpcXG4ke29ubHlEZXBsb3llZH1gKTtcbiAgICB9XG5cbiAgICBpZiAob25seUxvY2FsLmxlbmd0aCA+IDApIHtcbiAgICAgIG1lc3NhZ2UucHVzaChgXFxuVGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIHByZXNlbnQgb25seSBpbiB5b3VyIENESyBhcHBsaWNhdGlvbjpcXG4ke29ubHlMb2NhbH1gKTtcbiAgICB9XG5cbiAgICBtZXNzYWdlLnB1c2goJycpO1xuICAgIG1lc3NhZ2UucHVzaCgnVGhlIGZvbGxvd2luZyBzdGFja3Mgd2VyZSB1c2VkIGluIHRoZSBjb21wYXJpc29uOicpO1xuICAgIG1lc3NhZ2UucHVzaCggYCAgLSBEZXBsb3llZDogJHtzdGFja05hbWVzKGJlZm9yZSl9YCk7XG4gICAgbWVzc2FnZS5wdXNoKCBgICAtIExvY2FsOiAke3N0YWNrTmFtZXMoYWZ0ZXIpfWApO1xuICAgIG1lc3NhZ2UucHVzaCgnJyk7XG4gICAgbWVzc2FnZS5wdXNoKCdIaW50OiBieSBkZWZhdWx0LCBvbmx5IGRlcGxveWVkIHN0YWNrcyB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhIGxvY2FsIHN0YWNrIGFyZSBpbmNsdWRlZC4nKTtcbiAgICBtZXNzYWdlLnB1c2goJ0lmIHlvdSB3YW50IHRvIGluY2x1ZGUgYWRkaXRpb25hbCBkZXBsb3llZCBzdGFja3MgZm9yIGNvbXBhcmlzb24sIHJlLXJ1biB0aGUgY29tbWFuZCB3aXRoIHRoZSBvcHRpb24gXFwnLS1hZGRpdGlvbmFsLXN0YWNrLW5hbWU9PFNUQUNLPlxcJyBmb3IgZWFjaCBzdGFjay4nKTtcblxuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IobWVzc2FnZS5qb2luKCdcXG4nKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZW1vdmVVbm1vdmVkUmVzb3VyY2VzKHppcChkaWdlc3RzQmVmb3JlLCBkaWdlc3RzQWZ0ZXIpKSk7XG59XG5cbi8qKlxuICogV2hldGhlciB0d28gc2V0cyBvZiByZXNvdXJjZXMgaGF2ZSB0aGUgc2FtZSBlbGVtZW50cyAodW5pcXVlbHkgaWRlbnRpZmllZCBieSB0aGUgZGlnZXN0KSwgYW5kXG4gKiBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGxvY2F0aW9ucy4gVGhlIGxvY2F0aW9ucyB0aGVtc2VsdmVzIG1heSBiZSBkaWZmZXJlbnQuXG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWMoYTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPiwgYjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPik6IGJvb2xlYW4ge1xuICBjb25zdCBzYW1lS2V5cyA9IGVxdWFsU2V0cyhuZXcgU2V0KE9iamVjdC5rZXlzKGEpKSwgbmV3IFNldChPYmplY3Qua2V5cyhiKSkpO1xuICByZXR1cm4gc2FtZUtleXMgJiYgT2JqZWN0LmVudHJpZXMoYSkuZXZlcnkoKFtkaWdlc3QsIGxvY2F0aW9uc10pID0+IGxvY2F0aW9ucy5sZW5ndGggPT09IGJbZGlnZXN0XS5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVVbm1vdmVkUmVzb3VyY2VzKG1vdmVzOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+KTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VNb3ZlPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtoYXNoLCBbYmVmb3JlLCBhZnRlcl1dIG9mIE9iamVjdC5lbnRyaWVzKG1vdmVzKSkge1xuICAgIGNvbnN0IGNvbW1vbiA9IGJlZm9yZS5maWx0ZXIoKGIpID0+IGFmdGVyLnNvbWUoKGEpID0+IGEuZXF1YWxUbyhiKSkpO1xuICAgIHJlc3VsdFtoYXNoXSA9IFtcbiAgICAgIGJlZm9yZS5maWx0ZXIoKGIpID0+ICFjb21tb24uc29tZSgoYykgPT4gYi5lcXVhbFRvKGMpKSksXG4gICAgICBhZnRlci5maWx0ZXIoKGEpID0+ICFjb21tb24uc29tZSgoYykgPT4gYS5lcXVhbFRvKGMpKSksXG4gICAgXTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRm9yIGVhY2ggaGFzaCwgaWRlbnRpZnlpbmcgYSBzaW5nbGUgcmVzb3VyY2UsIHppcCB0aGUgdHdvIGxpc3RzIG9mIGxvY2F0aW9ucyxcbiAqIHByb2R1Y2luZyBhIHJlc291cmNlIG1vdmVcbiAqL1xuZnVuY3Rpb24gemlwKFxuICBtMTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbiAgbTI6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4sXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+ID0ge307XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhtMSkpIHtcbiAgICBpZiAoaGFzaCBpbiBtMikge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW2xvY2F0aW9ucywgbTJbaGFzaF1dO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25zLCBbXV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbaGFzaCwgbG9jYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhtMikpIHtcbiAgICBpZiAoIShoYXNoIGluIG0xKSkge1xuICAgICAgcmVzdWx0W2hhc2hdID0gW1tdLCBsb2NhdGlvbnNdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgYSBsaXN0IG9mIHBhaXJzIFtkaWdlc3QsIGxvY2F0aW9uXSBmb3IgZWFjaCByZXNvdXJjZSBpbiB0aGUgc3RhY2suXG4gKi9cbmZ1bmN0aW9uIHJlc291cmNlRGlnZXN0cyhzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSwgZGlyZWN0aW9uOiBHcmFwaERpcmVjdGlvbik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4ge1xuICAvLyBpbmRleCBzdGFja3MgYnkgbmFtZVxuICBjb25zdCBzdGFja3NCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgQ2xvdWRGb3JtYXRpb25TdGFjaz4oKTtcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3MpIHtcbiAgICBzdGFja3NCeU5hbWUuc2V0KHN0YWNrLnN0YWNrTmFtZSwgc3RhY2spO1xuICB9XG5cbiAgY29uc3QgZGlnZXN0cyA9IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMoc3RhY2tzLCBkaXJlY3Rpb24pO1xuXG4gIHJldHVybiBncm91cEJ5S2V5KFxuICAgIE9iamVjdC5lbnRyaWVzKGRpZ2VzdHMpLm1hcCgoW2xvYywgZGlnZXN0XSkgPT4ge1xuICAgICAgY29uc3QgW3N0YWNrTmFtZSwgbG9naWNhbElkXSA9IGxvYy5zcGxpdCgnLicpO1xuICAgICAgY29uc3QgbG9jYXRpb246IFJlc291cmNlTG9jYXRpb24gPSBuZXcgUmVzb3VyY2VMb2NhdGlvbihzdGFja3NCeU5hbWUuZ2V0KHN0YWNrTmFtZSkhLCBsb2dpY2FsSWQpO1xuICAgICAgcmV0dXJuIFtkaWdlc3QsIGxvY2F0aW9uXTtcbiAgICB9KSxcbiAgKTtcblxuICBmdW5jdGlvbiBncm91cEJ5S2V5PEE+KGVudHJpZXM6IFtzdHJpbmcsIEFdW10pOiBSZWNvcmQ8c3RyaW5nLCBBW10+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEFbXT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgIGlmIChrZXkgaW4gcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBbWJpZ3VvdXNNb3ZlKG1vdmU6IFJlc291cmNlTW92ZSk6IGJvb2xlYW4ge1xuICBjb25zdCBbcHJlLCBwb3N0XSA9IG1vdmU7XG5cbiAgLy8gQSBtb3ZlIGlzIGNvbnNpZGVyZWQgYW1iaWd1b3VzIGlmIHR3byBjb25kaXRpb25zIGFyZSBtZXQ6XG4gIC8vICAxLiBCb3RoIHNpZGVzIGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQgKG90aGVyd2lzZSwgaXQncyBqdXN0IGFkZGl0aW9uIG9yIGRlbGV0aW9uKVxuICAvLyAgMi4gQXQgbGVhc3Qgb25lIHNpZGUgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudFxuICByZXR1cm4gcHJlLmxlbmd0aCA+IDAgJiYgcG9zdC5sZW5ndGggPiAwICYmIChwcmUubGVuZ3RoID4gMSB8fCBwb3N0Lmxlbmd0aCA+IDEpO1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZU1hcHBpbmdzKG1vdmVtZW50czogUmVzb3VyY2VNb3ZlW10pOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gIHJldHVybiBtb3ZlbWVudHNcbiAgICAuZmlsdGVyKChbcHJlLCBwb3N0XSkgPT4gcHJlLmxlbmd0aCA9PT0gMSAmJiBwb3N0Lmxlbmd0aCA9PT0gMSAmJiAhcHJlWzBdLmVxdWFsVG8ocG9zdFswXSkpXG4gICAgLm1hcCgoW3ByZSwgcG9zdF0pID0+IG5ldyBSZXNvdXJjZU1hcHBpbmcocHJlWzBdLCBwb3N0WzBdKSk7XG59XG5cbi8qKlxuICogUGFydGl0aW9ucyBhIGxpc3Qgb2YgbW92ZXMgaW50byBub24tYW1iaWd1b3VzIGFuZCBhbWJpZ3VvdXMgbW92ZXMuXG4gKiBAcGFyYW0gb3ZlcnJpZGVzIC0gVGhlIGxpc3Qgb2Ygb3ZlcnJpZGVzIHRvIGRpc2FtYmlndWF0ZSBtb3Zlc1xuICogQHBhcmFtIG1vdmVzIC0gYSBwYWlyIG9mIGxpc3RzIG9mIG1vdmVzLiBGaXJzdDogbm9uLWFtYmlndW91cywgc2Vjb25kOiBhbWJpZ3VvdXNcbiAqL1xuZnVuY3Rpb24gcGFydGl0aW9uQnlBbWJpZ3VpdHkob3ZlcnJpZGVzOiBSZXNvdXJjZU1hcHBpbmdbXSwgbW92ZXM6IFJlc291cmNlTW92ZVtdKTogW1Jlc291cmNlTW92ZVtdLCBSZXNvdXJjZU1vdmVbXV0ge1xuICBjb25zdCBhbWJpZ3VvdXM6IFJlc291cmNlTW92ZVtdID0gW107XG4gIGNvbnN0IG5vbkFtYmlndW91czogUmVzb3VyY2VNb3ZlW10gPSBbXTtcblxuICBmb3IgKGxldCBtb3ZlIG9mIG1vdmVzKSB7XG4gICAgaWYgKCFpc0FtYmlndW91c01vdmUobW92ZSkpIHtcbiAgICAgIG5vbkFtYmlndW91cy5wdXNoKG1vdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IG92ZXJyaWRlIG9mIG92ZXJyaWRlcykge1xuICAgICAgICBjb25zdCByZXNvbHZlZE1vdmUgPSByZXNvbHZlKG92ZXJyaWRlLCBtb3ZlKTtcbiAgICAgICAgaWYgKHJlc29sdmVkTW92ZSAhPSBudWxsKSB7XG4gICAgICAgICAgbm9uQW1iaWd1b3VzLnB1c2gocmVzb2x2ZWRNb3ZlKTtcbiAgICAgICAgICBtb3ZlID0gcmVtb3ZlKG92ZXJyaWRlLCBtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT25lIGxhc3QgY2hhbmNlIHRvIGJlIG5vbi1hbWJpZ3VvdXNcbiAgICAgIGlmICghaXNBbWJpZ3VvdXNNb3ZlKG1vdmUpKSB7XG4gICAgICAgIG5vbkFtYmlndW91cy5wdXNoKG1vdmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW1iaWd1b3VzLnB1c2gobW92ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZShvdmVycmlkZTogUmVzb3VyY2VNYXBwaW5nLCBtb3ZlOiBSZXNvdXJjZU1vdmUpOiBSZXNvdXJjZU1vdmUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IFtwcmUsIHBvc3RdID0gbW92ZTtcbiAgICBjb25zdCBzb3VyY2UgPSBwcmUuZmluZCgobG9jKSA9PiBsb2MuZXF1YWxUbyhvdmVycmlkZS5zb3VyY2UpKTtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHBvc3QuZmluZCgobG9jKSA9PiBsb2MuZXF1YWxUbyhvdmVycmlkZS5kZXN0aW5hdGlvbikpO1xuICAgIHJldHVybiAoc291cmNlICYmIGRlc3RpbmF0aW9uKSA/IFtbc291cmNlXSwgW2Rlc3RpbmF0aW9uXV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUob3ZlcnJpZGU6IFJlc291cmNlTWFwcGluZywgbW92ZTogUmVzb3VyY2VNb3ZlKTogUmVzb3VyY2VNb3ZlIHtcbiAgICBjb25zdCBbcHJlLCBwb3N0XSA9IG1vdmU7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByZS5maWx0ZXIobG9jID0+ICFsb2MuZXF1YWxUbyhvdmVycmlkZS5zb3VyY2UpKSxcbiAgICAgIHBvc3QuZmlsdGVyKGxvYyA9PiAhbG9jLmVxdWFsVG8ob3ZlcnJpZGUuZGVzdGluYXRpb24pKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIFtub25BbWJpZ3VvdXMsIGFtYmlndW91c107XG59XG5cbi8qKlxuICogUmVwbGFjZSB0aGUge0FDQ09VTlR9IGFuZCB7UkVHSU9OfSBwbGFjZWhvbGRlcnMgaW4gYWxsIHN0cmluZ3MgZm91bmQgaW4gYSBjb21wbGV4IG9iamVjdC5cbiAqXG4gKiBEdXBsaWNhdGVkIGJldHdlZW4gY2RrLWFzc2V0cyBhbmQgYXdzLWNkayBDTEkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgZ29vZCBzaW5nbGUgcGxhY2UgdG8gcHV0IGl0XG4gKiAodGhleSdyZSBub21pbmFsbHkgaW5kZXBlbmRlbnQgdG9vbHMpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUF3c1BsYWNlaG9sZGVyczxBIGV4dGVuZHMgeyByZWdpb24/OiBzdHJpbmcgfT4oXG4gIG9iamVjdDogQSxcbiAgYXdzOiBJQXdzLFxuKTogUHJvbWlzZTxBPiB7XG4gIGxldCBwYXJ0aXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcCA9IGF3YWl0IGF3cy5kaXNjb3ZlclBhcnRpdGlvbigpO1xuICAgIHBhcnRpdGlvbiA9ICgpID0+IFByb21pc2UucmVzb2x2ZShwKTtcbiAgICByZXR1cm4gcDtcbiAgfTtcblxuICBsZXQgYWNjb3VudCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gYXdhaXQgYXdzLmRpc2NvdmVyQ3VycmVudEFjY291bnQoKTtcbiAgICBhY2NvdW50ID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGEpO1xuICAgIHJldHVybiBhO1xuICB9O1xuXG4gIHJldHVybiBFbnZpcm9ubWVudFBsYWNlaG9sZGVycy5yZXBsYWNlQXN5bmMob2JqZWN0LCB7XG4gICAgYXN5bmMgcmVnaW9uKCkge1xuICAgICAgcmV0dXJuIG9iamVjdC5yZWdpb24gPz8gYXdzLmRpc2NvdmVyRGVmYXVsdFJlZ2lvbigpO1xuICAgIH0sXG4gICAgYXN5bmMgYWNjb3VudElkKCkge1xuICAgICAgcmV0dXJuIChhd2FpdCBhY2NvdW50KCkpLmFjY291bnRJZDtcbiAgICB9LFxuICAgIGFzeW5jIHBhcnRpdGlvbigpIHtcbiAgICAgIHJldHVybiBwYXJ0aXRpb24oKTtcbiAgICB9LFxuICB9KTtcbn1cblxuIl19
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMFlBLHdEQTJCQztBQXJhRCw0REFBc0U7QUFFdEUsb0VBQXNFO0FBR3RFLHFEQUFxRTtBQUVyRSxxQ0FBa0Q7QUFDbEQsK0RBQTJEO0FBQzNELDBDQUFxRDtBQUdyRCxnREFBOEQ7QUFFOUQsc0NBQWlDO0FBa0JqQzs7R0FFRztBQUNILE1BQWEsa0JBQWtCO0lBQ1osU0FBUyxHQUFzQixFQUFFLENBQUM7SUFDbEMsY0FBYyxHQUFtQixFQUFFLENBQUM7SUFDcEMsV0FBVyxDQUF3QjtJQUNuQyxhQUFhLENBQVU7SUFDeEIsV0FBVyxDQUFjO0lBRXpDLFlBQVksS0FBZ0M7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFHLE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUV6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aWVudCwgdHlwZSBJQXdzIH0gZnJvbSAnQGF3cy1jZGsvY2RrLWFzc2V0cy1saWInO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudCB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFBsYWNlaG9sZGVycyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFN0YWNrRGVmaW5pdGlvbiB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgdHlwZSB7IENsb3VkRm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFJlc291cmNlTG9jYXRpb24sIFJlc291cmNlTWFwcGluZyB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHR5cGUgeyBHcmFwaERpcmVjdGlvbiB9IGZyb20gJy4vZGlnZXN0JztcbmltcG9ydCB7IGNvbXB1dGVSZXNvdXJjZURpZ2VzdHMgfSBmcm9tICcuL2RpZ2VzdCc7XG5pbXBvcnQgeyBUb29sa2l0RXJyb3IgfSBmcm9tICcuLi8uLi90b29sa2l0L3Rvb2xraXQtZXJyb3InO1xuaW1wb3J0IHsgZXF1YWxTZXRzLCBzZXREaWZmIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXRzJztcbmltcG9ydCB0eXBlIHsgU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgvc2RrJztcbmltcG9ydCB0eXBlIHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9zZGstcHJvdmlkZXInO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSB9IGZyb20gJy4uL2Vudmlyb25tZW50JztcbmltcG9ydCB0eXBlIHsgSW9IZWxwZXIgfSBmcm9tICcuLi9pby9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzZXQgb2YgcG9zc2libGUgbW92ZXMgb2YgYSByZXNvdXJjZSBmcm9tIG9uZSBsb2NhdGlvblxuICogdG8gYW5vdGhlci4gSW4gdGhlIGlkZWFsIGNhc2UsIHRoZXJlIGlzIG9ubHkgb25lIHNvdXJjZSBhbmQgb25seSBvbmVcbiAqIGRlc3RpbmF0aW9uLlxuICovXG50eXBlIFJlc291cmNlTW92ZSA9IFtSZXNvdXJjZUxvY2F0aW9uW10sIFJlc291cmNlTG9jYXRpb25bXV07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmYWN0b3JpbmdDb250ZXh0T3B0aW9ucyB7XG4gIGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcbiAgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgb3ZlcnJpZGVzPzogUmVzb3VyY2VNYXBwaW5nW107XG4gIGFzc3VtZVJvbGVBcm4/OiBzdHJpbmc7XG4gIGlnbm9yZU1vZGlmaWNhdGlvbnM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyB0aGUgaW5mb3JtYXRpb24gZm9yIHJlZmFjdG9yaW5nIHJlc291cmNlcyBpbiBhIHNpbmdsZSBlbnZpcm9ubWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZmFjdG9yaW5nQ29udGV4dCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hcHBpbmdzOiBSZXNvdXJjZU1hcHBpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGFtYmlndW91c01vdmVzOiBSZXNvdXJjZU1vdmVbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzdW1lUm9sZUFybj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVmYWN0b3JpbmdDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBwcm9wcy5lbnZpcm9ubWVudDtcbiAgICBjb25zdCBtb3ZlcyA9IHJlc291cmNlTW92ZXMocHJvcHMuZGVwbG95ZWRTdGFja3MsIHByb3BzLmxvY2FsU3RhY2tzLCAnZGlyZWN0JywgcHJvcHMuaWdub3JlTW9kaWZpY2F0aW9ucyk7XG4gICAgY29uc3QgYWRkaXRpb25hbE92ZXJyaWRlcyA9IHN0cnVjdHVyYWxPdmVycmlkZXMocHJvcHMuZGVwbG95ZWRTdGFja3MsIHByb3BzLmxvY2FsU3RhY2tzKTtcbiAgICBjb25zdCBvdmVycmlkZXMgPSAocHJvcHMub3ZlcnJpZGVzID8/IFtdKS5jb25jYXQoYWRkaXRpb25hbE92ZXJyaWRlcyk7XG4gICAgY29uc3QgW25vbkFtYmlndW91c01vdmVzLCBhbWJpZ3VvdXNNb3Zlc10gPSBwYXJ0aXRpb25CeUFtYmlndWl0eShvdmVycmlkZXMsIG1vdmVzKTtcbiAgICB0aGlzLmFtYmlndW91c01vdmVzID0gYW1iaWd1b3VzTW92ZXM7XG4gICAgdGhpcy5sb2NhbFN0YWNrcyA9IHByb3BzLmxvY2FsU3RhY2tzO1xuICAgIHRoaXMuYXNzdW1lUm9sZUFybiA9IHByb3BzLmFzc3VtZVJvbGVBcm47XG5cbiAgICB0aGlzLl9tYXBwaW5ncyA9IHJlc291cmNlTWFwcGluZ3Mobm9uQW1iaWd1b3VzTW92ZXMpO1xuICB9XG5cbiAgcHVibGljIGdldCBhbWJpZ3VvdXNQYXRocygpOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdIHtcbiAgICByZXR1cm4gdGhpcy5hbWJpZ3VvdXNNb3Zlcy5tYXAoKFthLCBiXSkgPT4gW2NvbnZlcnQoYSksIGNvbnZlcnQoYildKTtcblxuICAgIGZ1bmN0aW9uIGNvbnZlcnQobG9jYXRpb25zOiBSZXNvdXJjZUxvY2F0aW9uW10pOiBzdHJpbmdbXSB7XG4gICAgICByZXR1cm4gbG9jYXRpb25zLm1hcCgobCkgPT4gbC50b1BhdGgoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBtYXBwaW5ncygpOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcHBpbmdzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGV4ZWN1dGUoc3RhY2tEZWZpbml0aW9uczogU3RhY2tEZWZpbml0aW9uW10sIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlciwgaW9IZWxwZXI6IElvSGVscGVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubWFwcGluZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1lUm9sZUFybiA9IHRoaXMuYXNzdW1lUm9sZUFybiA/PyBhd2FpdCB0aGlzLmZpbmRSb2xlVG9Bc3N1bWUoc2RrUHJvdmlkZXIpO1xuICAgIGNvbnN0IHNkayA9IChcbiAgICAgIGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KHRoaXMuZW52aXJvbm1lbnQsIE1vZGUuRm9yV3JpdGluZywge1xuICAgICAgICBhc3N1bWVSb2xlQXJuLFxuICAgICAgfSlcbiAgICApLnNkaztcblxuICAgIGF3YWl0IHRoaXMuY2hlY2tCb290c3RyYXBWZXJzaW9uKHNkaywgaW9IZWxwZXIpO1xuXG4gICAgY29uc3QgY2ZuID0gc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG4gICAgY29uc3QgbWFwcGluZ3MgPSB0aGlzLm1hcHBpbmdzO1xuXG4gICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICBSZXNvdXJjZU1hcHBpbmdzOiBtYXBwaW5ncy5tYXAoKG0pID0+IG0udG9DbG91ZEZvcm1hdGlvbigpKSxcbiAgICAgIFN0YWNrRGVmaW5pdGlvbnM6IHN0YWNrRGVmaW5pdGlvbnMsXG4gICAgfTtcbiAgICBjb25zdCByZWZhY3RvciA9IGF3YWl0IGNmbi5jcmVhdGVTdGFja1JlZmFjdG9yKGlucHV0KTtcblxuICAgIGF3YWl0IGNmbi53YWl0VW50aWxTdGFja1JlZmFjdG9yQ3JlYXRlQ29tcGxldGUoe1xuICAgICAgU3RhY2tSZWZhY3RvcklkOiByZWZhY3Rvci5TdGFja1JlZmFjdG9ySWQsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjZm4uZXhlY3V0ZVN0YWNrUmVmYWN0b3Ioe1xuICAgICAgU3RhY2tSZWZhY3RvcklkOiByZWZhY3Rvci5TdGFja1JlZmFjdG9ySWQsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBjZm4ud2FpdFVudGlsU3RhY2tSZWZhY3RvckV4ZWN1dGVDb21wbGV0ZSh7XG4gICAgICBTdGFja1JlZmFjdG9ySWQ6IHJlZmFjdG9yLlN0YWNrUmVmYWN0b3JJZCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tCb290c3RyYXBWZXJzaW9uKHNkazogU0RLLCBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5ID0gbmV3IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkoKTtcbiAgICBjb25zdCBlbnZSZXNvdXJjZXMgPSBlbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5LmZvcih0aGlzLmVudmlyb25tZW50LCBzZGssIGlvSGVscGVyKTtcbiAgICBsZXQgYm9vdHN0cmFwVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gZ2V0IHRoZSBib290c3RyYXAgdmVyc2lvblxuICAgICAgYm9vdHN0cmFwVmVyc2lvbiA9IChhd2FpdCBlbnZSZXNvdXJjZXMubG9va3VwVG9vbGtpdCgpKS52ZXJzaW9uO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIEJ1dCBpZiB3ZSBjYW4ndCwga2VlcCBnb2luZy4gTWF5YmUgd2UgY2FuIHN0aWxsIHN1Y2NlZWQuXG4gICAgfVxuICAgIGlmIChib290c3RyYXBWZXJzaW9uICE9IG51bGwgJiYgYm9vdHN0cmFwVmVyc2lvbiA8IDI4KSB7XG4gICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGBhd3M6Ly8ke3RoaXMuZW52aXJvbm1lbnQuYWNjb3VudH0vJHt0aGlzLmVudmlyb25tZW50LnJlZ2lvbn1gO1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgJ0Jvb3RzdHJhcFZlcnNpb25Ub29Mb3cnLFxuICAgICAgICBgVGhlIENESyB0b29sa2l0IHN0YWNrIGluIGVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9IGRvZXNuJ3Qgc3VwcG9ydCByZWZhY3RvcmluZy4gUGxlYXNlIHJ1biAnY2RrIGJvb3RzdHJhcCAke2Vudmlyb25tZW50fScgdG8gdXBkYXRlIGl0LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZFJvbGVUb0Fzc3VtZShzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIpOiBQcm9taXNlIDwgc3RyaW5nIHwgdW5kZWZpbmVkID4ge1xuICAgIC8vIFRvIGV4ZWN1dGUgYSByZWZhY3Rvciwgd2UgbmVlZCB0aGUgZGVwbG95bWVudCByb2xlIEFSTiBmb3IgdGhlIGdpdmVuXG4gICAgLy8gZW52aXJvbm1lbnQuIE1vc3QgdG9vbGtpdCBjb21tYW5kcyBnZXQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIHJvbGVzIHRvXG4gICAgLy8gYXNzdW1lIGZyb20gdGhlIGNsb3VkIGFzc2VtYmx5IChhbmQgdWx0aW1hdGVseSBmcm9tIHRoZSBDREsgZnJhbWV3b3JrKS4gUmVmYWN0b3JcbiAgICAvLyBpcyBkaWZmZXJlbnQgYmVjYXVzZSBpdCBpcyBub3QgdGhlIGFwcGxpY2F0aW9uL2ZyYW1ld29yayB0aGF0IGRpY3RhdGVzIHdoYXQgdGhlXG4gICAgLy8gdG9vbGtpdCBzaG91bGQgZG8sIGJ1dCBpdCBpcyB0aGUgdG9vbGtpdCBpdHNlbGYgdGhhdCBoYXMgdG8gZmlndXJlIGl0IG91dC5cbiAgICAvL1xuICAgIC8vIE5ldmVydGhlbGVzcywgdGhlIGNsb3VkIGFzc2VtYmx5IGlzIHRoZSBtb3N0IHJlbGlhYmxlIHNvdXJjZSBmb3IgdGhpcyBraW5kIG9mXG4gICAgLy8gaW5mb3JtYXRpb24uIEZvciB0aGUgZGVwbG95bWVudCByb2xlIEFSTiwgaW4gcGFydGljdWxhciwgd2hhdCB3ZSBkbyBoZXJlXG4gICAgLy8gaXMgbG9vayBhdCBhbGwgdGhlIHN0YWNrcyBmb3IgYSBnaXZlbiBlbnZpcm9ubWVudCBpbiB0aGUgY2xvdWQgYXNzZW1ibHkgYW5kXG4gICAgLy8gZXh0cmFjdCB0aGUgZGVwbG95bWVudCByb2xlIEFSTiB0aGF0IGlzIGNvbW1vbiB0byBhbGwgb2YgdGhlbS4gSWYgbm8gcm9sZSBpc1xuICAgIC8vIGZvdW5kLCB3ZSBnbyBhaGVhZCB3aXRob3V0IGFzc3VtaW5nIGEgcm9sZS4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByb2xlLFxuICAgIC8vIHdlIGNvbnNpZGVyIHRoYXQgYW4gaW52YXJpYW50IHdhcyB2aW9sYXRlZCwgYW5kIHRocm93IGFuIGVycm9yLlxuXG4gICAgY29uc3QgZW52ID0gdGhpcy5lbnZpcm9ubWVudDtcbiAgICBjb25zdCByb2xlQXJucyA9IG5ldyBTZXQoXG4gICAgICB0aGlzLmxvY2FsU3RhY2tzXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMuZW52aXJvbm1lbnQuYWNjb3VudCA9PT0gZW52LmFjY291bnQgJiYgcy5lbnZpcm9ubWVudC5yZWdpb24gPT09IGVudi5yZWdpb24pXG4gICAgICAgIC5tYXAoKHMpID0+IHMuYXNzdW1lUm9sZUFybiksXG4gICAgKTtcblxuICAgIGlmIChyb2xlQXJucy5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChyb2xlQXJucy5zaXplICE9PSAxKSB7XG4gICAgICAvLyBVbmxpa2VseSB0byBoYXBwZW4uIEJ1dCBpZiBpdCBkb2VzLCB3ZSBjYW4ndCBwcm9jZWVkXG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAnTXVsdGlwbGVEZXBsb3ltZW50Um9sZXMnLFxuICAgICAgICBgTXVsdGlwbGUgc3RhY2tzIGluIGVudmlyb25tZW50IGF3czovLyR7ZW52LmFjY291bnR9LyR7ZW52LnJlZ2lvbn0gaGF2ZSBkaWZmZXJlbnQgZGVwbG95bWVudCByb2xlIEFSTnMuIENhbm5vdCBwcm9jZWVkLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFybiA9IEFycmF5LmZyb20ocm9sZUFybnMpWzBdO1xuICAgIGlmIChhcm4gIT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRFbnYgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoZW52KTtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IHJlc29sdmVkRW52LnJlZ2lvbjtcbiAgICAgIHJldHVybiAoYXdhaXQgcmVwbGFjZUF3c1BsYWNlaG9sZGVycyh7IHJlZ2lvbiwgYXNzdW1lUm9sZUFybjogYXJuIH0sIG5ldyBEZWZhdWx0QXdzQ2xpZW50KCkpKS5hc3N1bWVSb2xlQXJuO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGNvdWxkbid0IGZpbmQgYSByb2xlIEFSTiwgd2UgY2FuIHByb2NlZWQgd2l0aG91dCBhc3N1bWluZyBhIHJvbGUuXG4gICAgLy8gTWF5YmUgdGhlIGRlZmF1bHQgY3JlZGVudGlhbHMgaGF2ZSBwZXJtaXNzaW9ucyB0byBkbyB3aGF0IHdlIG5lZWQuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhdXRvbWF0aWMgbGlzdCBvZiBvdmVycmlkZXMgdGhhdCBjYW4gYmUgZGVkdWNlZCBmcm9tIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG9wcG9zaXRlIHJlc291cmNlIGdyYXBoLlxuICogU3VwcG9zZSB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVzb3VyY2UgZ3JhcGg6XG4gKlxuICogICAgIEEgLS0+IEJcbiAqICAgICBDIC0tPiBEXG4gKlxuICogc3VjaCB0aGF0IEIgYW5kIEQgYXJlIGlkZW50aWNhbCwgYnV0IEEgaXMgZGlmZmVyZW50IGZyb20gQy4gVGhlbiBkaWdlc3QoQikgPSBkaWdlc3QoRCkuIElmIGJvdGggcmVzb3VyY2VzIGFyZSBtb3ZlZCxcbiAqIHdlIGhhdmUgYW4gYW1iaWd1aXR5LiBCdXQgaWYgd2UgcmV2ZXJzZSB0aGUgYXJyb3dzOlxuICpcbiAqICAgICBBIDwtLSBCXG4gKiAgICAgQyA8LS0gRFxuICpcbiAqIHRoZW4gZGlnZXN0KEIpIOKJoCBkaWdlc3QoRCksIGJlY2F1c2UgdGhleSBub3cgaGF2ZSBkaWZmZXJlbnQgZGVwZW5kZW5jaWVzLiBJZiB3ZSBjb21wdXRlIHRoZSBtYXBwaW5ncyBmcm9tIHRoaXNcbiAqIG9wcG9zaXRlIGdyYXBoLCB3ZSBjYW4gdXNlIHRoZW0gYXMgYSBzZXQgb2Ygb3ZlcnJpZGVzIHRvIGRpc2FtYmlndWF0ZSB0aGUgb3JpZ2luYWwgbW92ZXMuXG4gKlxuICovXG5mdW5jdGlvbiBzdHJ1Y3R1cmFsT3ZlcnJpZGVzKGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pOiBSZXNvdXJjZU1hcHBpbmdbXSB7XG4gIGNvbnN0IG1vdmVzID0gcmVzb3VyY2VNb3ZlcyhkZXBsb3llZFN0YWNrcywgbG9jYWxTdGFja3MsICdvcHBvc2l0ZScsIHRydWUpO1xuICBjb25zdCBbbm9uQW1iaWd1b3VzTW92ZXNdID0gcGFydGl0aW9uQnlBbWJpZ3VpdHkoW10sIG1vdmVzKTtcbiAgcmV0dXJuIHJlc291cmNlTWFwcGluZ3Mobm9uQW1iaWd1b3VzTW92ZXMpO1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZU1vdmVzKFxuICBiZWZvcmU6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgYWZ0ZXI6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSxcbiAgZGlyZWN0aW9uOiBHcmFwaERpcmVjdGlvbiA9ICdkaXJlY3QnLFxuICBpZ25vcmVNb2RpZmljYXRpb25zOiBib29sZWFuID0gZmFsc2UpOiBSZXNvdXJjZU1vdmVbXSB7XG4gIGNvbnN0IGRpZ2VzdHNCZWZvcmUgPSByZXNvdXJjZURpZ2VzdHMoYmVmb3JlLCBkaXJlY3Rpb24pO1xuICBjb25zdCBkaWdlc3RzQWZ0ZXIgPSByZXNvdXJjZURpZ2VzdHMoYWZ0ZXIsIGRpcmVjdGlvbik7XG5cbiAgaWYgKCEoaWdub3JlTW9kaWZpY2F0aW9ucyB8fCBpc29tb3JwaGljKGRpZ2VzdHNCZWZvcmUsIGRpZ2VzdHNBZnRlcikpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IFsnQSByZWZhY3RvciBvcGVyYXRpb24gY2Fubm90IGFkZCwgcmVtb3ZlIG9yIHVwZGF0ZSByZXNvdXJjZXMuIE9ubHkgcmVzb3VyY2UgbW92ZXMgYW5kIHJlbmFtZXMgYXJlIGFsbG93ZWQuJ107XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlID0gKGE6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4sIGI6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTG9jYXRpb25bXT4pID0+IHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHNldERpZmYobmV3IFNldChPYmplY3Qua2V5cyhhKSksIG5ldyBTZXQoT2JqZWN0LmtleXMoYikpKSkuZmxhdE1hcChrID0+IGFba10hKVxuICAgICAgICAubWFwKHggPT4gYCAgLSAke3gudG9QYXRoKCl9YClcbiAgICAgICAgLnNvcnQoKVxuICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHN0YWNrTmFtZXMgPSAoc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pID0+XG4gICAgICBzdGFja3MubGVuZ3RoID09PSAwXG4gICAgICAgID8gJ05PTkUnXG4gICAgICAgIDogc3RhY2tzXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5zdGFja05hbWUpXG4gICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgIC5qb2luKCcsICcpO1xuXG4gICAgY29uc3Qgb25seURlcGxveWVkID0gZGlmZmVyZW5jZShkaWdlc3RzQmVmb3JlLCBkaWdlc3RzQWZ0ZXIpO1xuICAgIGNvbnN0IG9ubHlMb2NhbCA9IGRpZmZlcmVuY2UoZGlnZXN0c0FmdGVyLCBkaWdlc3RzQmVmb3JlKTtcblxuICAgIGlmIChvbmx5RGVwbG95ZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVzc2FnZS5wdXNoKGBUaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgcHJlc2VudCBvbmx5IGluIHRoZSBBV1MgZW52aXJvbm1lbnQ6XFxuJHtvbmx5RGVwbG95ZWR9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9ubHlMb2NhbC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXNzYWdlLnB1c2goYFxcblRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBwcmVzZW50IG9ubHkgaW4geW91ciBDREsgYXBwbGljYXRpb246XFxuJHtvbmx5TG9jYWx9YCk7XG4gICAgfVxuXG4gICAgbWVzc2FnZS5wdXNoKCcnKTtcbiAgICBtZXNzYWdlLnB1c2goJ1RoZSBmb2xsb3dpbmcgc3RhY2tzIHdlcmUgdXNlZCBpbiB0aGUgY29tcGFyaXNvbjonKTtcbiAgICBtZXNzYWdlLnB1c2goIGAgIC0gRGVwbG95ZWQ6ICR7c3RhY2tOYW1lcyhiZWZvcmUpfWApO1xuICAgIG1lc3NhZ2UucHVzaCggYCAgLSBMb2NhbDogJHtzdGFja05hbWVzKGFmdGVyKX1gKTtcbiAgICBtZXNzYWdlLnB1c2goJycpO1xuICAgIG1lc3NhZ2UucHVzaCgnSGludDogYnkgZGVmYXVsdCwgb25seSBkZXBsb3llZCBzdGFja3MgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYSBsb2NhbCBzdGFjayBhcmUgaW5jbHVkZWQuJyk7XG4gICAgbWVzc2FnZS5wdXNoKCdJZiB5b3Ugd2FudCB0byBpbmNsdWRlIGFkZGl0aW9uYWwgZGVwbG95ZWQgc3RhY2tzIGZvciBjb21wYXJpc29uLCByZS1ydW4gdGhlIGNvbW1hbmQgd2l0aCB0aGUgb3B0aW9uIFxcJy0tYWRkaXRpb25hbC1zdGFjay1uYW1lPTxTVEFDSz5cXCcgZm9yIGVhY2ggc3RhY2suJyk7XG5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdSZWZhY3RvclJlc291cmNlTWlzbWF0Y2gnLCBtZXNzYWdlLmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlbW92ZVVubW92ZWRSZXNvdXJjZXMoemlwKGRpZ2VzdHNCZWZvcmUsIGRpZ2VzdHNBZnRlcikpKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHR3byBzZXRzIG9mIHJlc291cmNlcyBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzICh1bmlxdWVseSBpZGVudGlmaWVkIGJ5IHRoZSBkaWdlc3QpLCBhbmRcbiAqIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgc2FtZSBudW1iZXIgb2YgbG9jYXRpb25zLiBUaGUgbG9jYXRpb25zIHRoZW1zZWx2ZXMgbWF5IGJlIGRpZmZlcmVudC5cbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpYyhhOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+LCBiOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+KTogYm9vbGVhbiB7XG4gIGNvbnN0IHNhbWVLZXlzID0gZXF1YWxTZXRzKG5ldyBTZXQoT2JqZWN0LmtleXMoYSkpLCBuZXcgU2V0KE9iamVjdC5rZXlzKGIpKSk7XG4gIHJldHVybiBzYW1lS2V5cyAmJiBPYmplY3QuZW50cmllcyhhKS5ldmVyeSgoW2RpZ2VzdCwgbG9jYXRpb25zXSkgPT4gbG9jYXRpb25zLmxlbmd0aCA9PT0gYltkaWdlc3RdLmxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVVubW92ZWRSZXNvdXJjZXMobW92ZXM6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4pOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+IHtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZU1vdmU+ID0ge307XG4gIGZvciAoY29uc3QgW2hhc2gsIFtiZWZvcmUsIGFmdGVyXV0gb2YgT2JqZWN0LmVudHJpZXMobW92ZXMpKSB7XG4gICAgY29uc3QgY29tbW9uID0gYmVmb3JlLmZpbHRlcigoYikgPT4gYWZ0ZXIuc29tZSgoYSkgPT4gYS5lcXVhbFRvKGIpKSk7XG4gICAgcmVzdWx0W2hhc2hdID0gW1xuICAgICAgYmVmb3JlLmZpbHRlcigoYikgPT4gIWNvbW1vbi5zb21lKChjKSA9PiBiLmVxdWFsVG8oYykpKSxcbiAgICAgIGFmdGVyLmZpbHRlcigoYSkgPT4gIWNvbW1vbi5zb21lKChjKSA9PiBhLmVxdWFsVG8oYykpKSxcbiAgICBdO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBGb3IgZWFjaCBoYXNoLCBpZGVudGlmeWluZyBhIHNpbmdsZSByZXNvdXJjZSwgemlwIHRoZSB0d28gbGlzdHMgb2YgbG9jYXRpb25zLFxuICogcHJvZHVjaW5nIGEgcmVzb3VyY2UgbW92ZVxuICovXG5mdW5jdGlvbiB6aXAoXG4gIG0xOiBSZWNvcmQ8c3RyaW5nLCBSZXNvdXJjZUxvY2F0aW9uW10+LFxuICBtMjogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPixcbik6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlc291cmNlTW92ZT4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKG0xKSkge1xuICAgIGlmIChoYXNoIGluIG0yKSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbbG9jYXRpb25zLCBtMltoYXNoXV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtoYXNoXSA9IFtsb2NhdGlvbnMsIFtdXTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IFtoYXNoLCBsb2NhdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKG0yKSkge1xuICAgIGlmICghKGhhc2ggaW4gbTEpKSB7XG4gICAgICByZXN1bHRbaGFzaF0gPSBbW10sIGxvY2F0aW9uc107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhIGxpc3Qgb2YgcGFpcnMgW2RpZ2VzdCwgbG9jYXRpb25dIGZvciBlYWNoIHJlc291cmNlIGluIHRoZSBzdGFjay5cbiAqL1xuZnVuY3Rpb24gcmVzb3VyY2VEaWdlc3RzKHN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdLCBkaXJlY3Rpb246IEdyYXBoRGlyZWN0aW9uKTogUmVjb3JkPHN0cmluZywgUmVzb3VyY2VMb2NhdGlvbltdPiB7XG4gIC8vIGluZGV4IHN0YWNrcyBieSBuYW1lXG4gIGNvbnN0IHN0YWNrc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBDbG91ZEZvcm1hdGlvblN0YWNrPigpO1xuICBmb3IgKGNvbnN0IHN0YWNrIG9mIHN0YWNrcykge1xuICAgIHN0YWNrc0J5TmFtZS5zZXQoc3RhY2suc3RhY2tOYW1lLCBzdGFjayk7XG4gIH1cblxuICBjb25zdCBkaWdlc3RzID0gY29tcHV0ZVJlc291cmNlRGlnZXN0cyhzdGFja3MsIGRpcmVjdGlvbik7XG5cbiAgcmV0dXJuIGdyb3VwQnlLZXkoXG4gICAgT2JqZWN0LmVudHJpZXMoZGlnZXN0cykubWFwKChbbG9jLCBkaWdlc3RdKSA9PiB7XG4gICAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gbG9jLnNwbGl0KCcuJyk7XG4gICAgICBjb25zdCBsb2NhdGlvbjogUmVzb3VyY2VMb2NhdGlvbiA9IG5ldyBSZXNvdXJjZUxvY2F0aW9uKHN0YWNrc0J5TmFtZS5nZXQoc3RhY2tOYW1lKSEsIGxvZ2ljYWxJZCk7XG4gICAgICByZXR1cm4gW2RpZ2VzdCwgbG9jYXRpb25dO1xuICAgIH0pLFxuICApO1xuXG4gIGZ1bmN0aW9uIGdyb3VwQnlLZXk8QT4oZW50cmllczogW3N0cmluZywgQV1bXSk6IFJlY29yZDxzdHJpbmcsIEFbXT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgQVtdPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cmllcykge1xuICAgICAgaWYgKGtleSBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FtYmlndW91c01vdmUobW92ZTogUmVzb3VyY2VNb3ZlKTogYm9vbGVhbiB7XG4gIGNvbnN0IFtwcmUsIHBvc3RdID0gbW92ZTtcblxuICAvLyBBIG1vdmUgaXMgY29uc2lkZXJlZCBhbWJpZ3VvdXMgaWYgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgLy8gIDEuIEJvdGggc2lkZXMgaGF2ZSBhdCBsZWFzdCBvbmUgZWxlbWVudCAob3RoZXJ3aXNlLCBpdCdzIGp1c3QgYWRkaXRpb24gb3IgZGVsZXRpb24pXG4gIC8vICAyLiBBdCBsZWFzdCBvbmUgc2lkZSBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50XG4gIHJldHVybiBwcmUubGVuZ3RoID4gMCAmJiBwb3N0Lmxlbmd0aCA+IDAgJiYgKHByZS5sZW5ndGggPiAxIHx8IHBvc3QubGVuZ3RoID4gMSk7XG59XG5cbmZ1bmN0aW9uIHJlc291cmNlTWFwcGluZ3MobW92ZW1lbnRzOiBSZXNvdXJjZU1vdmVbXSk6IFJlc291cmNlTWFwcGluZ1tdIHtcbiAgcmV0dXJuIG1vdmVtZW50c1xuICAgIC5maWx0ZXIoKFtwcmUsIHBvc3RdKSA9PiBwcmUubGVuZ3RoID09PSAxICYmIHBvc3QubGVuZ3RoID09PSAxICYmICFwcmVbMF0uZXF1YWxUbyhwb3N0WzBdKSlcbiAgICAubWFwKChbcHJlLCBwb3N0XSkgPT4gbmV3IFJlc291cmNlTWFwcGluZyhwcmVbMF0sIHBvc3RbMF0pKTtcbn1cblxuLyoqXG4gKiBQYXJ0aXRpb25zIGEgbGlzdCBvZiBtb3ZlcyBpbnRvIG5vbi1hbWJpZ3VvdXMgYW5kIGFtYmlndW91cyBtb3Zlcy5cbiAqIEBwYXJhbSBvdmVycmlkZXMgLSBUaGUgbGlzdCBvZiBvdmVycmlkZXMgdG8gZGlzYW1iaWd1YXRlIG1vdmVzXG4gKiBAcGFyYW0gbW92ZXMgLSBhIHBhaXIgb2YgbGlzdHMgb2YgbW92ZXMuIEZpcnN0OiBub24tYW1iaWd1b3VzLCBzZWNvbmQ6IGFtYmlndW91c1xuICovXG5mdW5jdGlvbiBwYXJ0aXRpb25CeUFtYmlndWl0eShvdmVycmlkZXM6IFJlc291cmNlTWFwcGluZ1tdLCBtb3ZlczogUmVzb3VyY2VNb3ZlW10pOiBbUmVzb3VyY2VNb3ZlW10sIFJlc291cmNlTW92ZVtdXSB7XG4gIGNvbnN0IGFtYmlndW91czogUmVzb3VyY2VNb3ZlW10gPSBbXTtcbiAgY29uc3Qgbm9uQW1iaWd1b3VzOiBSZXNvdXJjZU1vdmVbXSA9IFtdO1xuXG4gIGZvciAobGV0IG1vdmUgb2YgbW92ZXMpIHtcbiAgICBpZiAoIWlzQW1iaWd1b3VzTW92ZShtb3ZlKSkge1xuICAgICAgbm9uQW1iaWd1b3VzLnB1c2gobW92ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGUgb2Ygb3ZlcnJpZGVzKSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkTW92ZSA9IHJlc29sdmUob3ZlcnJpZGUsIG1vdmUpO1xuICAgICAgICBpZiAocmVzb2x2ZWRNb3ZlICE9IG51bGwpIHtcbiAgICAgICAgICBub25BbWJpZ3VvdXMucHVzaChyZXNvbHZlZE1vdmUpO1xuICAgICAgICAgIG1vdmUgPSByZW1vdmUob3ZlcnJpZGUsIG1vdmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBPbmUgbGFzdCBjaGFuY2UgdG8gYmUgbm9uLWFtYmlndW91c1xuICAgICAgaWYgKCFpc0FtYmlndW91c01vdmUobW92ZSkpIHtcbiAgICAgICAgbm9uQW1iaWd1b3VzLnB1c2gobW92ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbWJpZ3VvdXMucHVzaChtb3ZlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlKG92ZXJyaWRlOiBSZXNvdXJjZU1hcHBpbmcsIG1vdmU6IFJlc291cmNlTW92ZSk6IFJlc291cmNlTW92ZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgW3ByZSwgcG9zdF0gPSBtb3ZlO1xuICAgIGNvbnN0IHNvdXJjZSA9IHByZS5maW5kKChsb2MpID0+IGxvYy5lcXVhbFRvKG92ZXJyaWRlLnNvdXJjZSkpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gcG9zdC5maW5kKChsb2MpID0+IGxvYy5lcXVhbFRvKG92ZXJyaWRlLmRlc3RpbmF0aW9uKSk7XG4gICAgcmV0dXJuIChzb3VyY2UgJiYgZGVzdGluYXRpb24pID8gW1tzb3VyY2VdLCBbZGVzdGluYXRpb25dXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZShvdmVycmlkZTogUmVzb3VyY2VNYXBwaW5nLCBtb3ZlOiBSZXNvdXJjZU1vdmUpOiBSZXNvdXJjZU1vdmUge1xuICAgIGNvbnN0IFtwcmUsIHBvc3RdID0gbW92ZTtcbiAgICByZXR1cm4gW1xuICAgICAgcHJlLmZpbHRlcihsb2MgPT4gIWxvYy5lcXVhbFRvKG92ZXJyaWRlLnNvdXJjZSkpLFxuICAgICAgcG9zdC5maWx0ZXIobG9jID0+ICFsb2MuZXF1YWxUbyhvdmVycmlkZS5kZXN0aW5hdGlvbikpLFxuICAgIF07XG4gIH1cblxuICByZXR1cm4gW25vbkFtYmlndW91cywgYW1iaWd1b3VzXTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHRoZSB7QUNDT1VOVH0gYW5kIHtSRUdJT059IHBsYWNlaG9sZGVycyBpbiBhbGwgc3RyaW5ncyBmb3VuZCBpbiBhIGNvbXBsZXggb2JqZWN0LlxuICpcbiAqIER1cGxpY2F0ZWQgYmV0d2VlbiBjZGstYXNzZXRzIGFuZCBhd3MtY2RrIENMSSBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBnb29kIHNpbmdsZSBwbGFjZSB0byBwdXQgaXRcbiAqICh0aGV5J3JlIG5vbWluYWxseSBpbmRlcGVuZGVudCB0b29scykuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQXdzUGxhY2Vob2xkZXJzPEEgZXh0ZW5kcyB7IHJlZ2lvbj86IHN0cmluZyB9PihcbiAgb2JqZWN0OiBBLFxuICBhd3M6IElBd3MsXG4pOiBQcm9taXNlPEE+IHtcbiAgbGV0IHBhcnRpdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwID0gYXdhaXQgYXdzLmRpc2NvdmVyUGFydGl0aW9uKCk7XG4gICAgcGFydGl0aW9uID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHApO1xuICAgIHJldHVybiBwO1xuICB9O1xuXG4gIGxldCBhY2NvdW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBhd2FpdCBhd3MuZGlzY292ZXJDdXJyZW50QWNjb3VudCgpO1xuICAgIGFjY291bnQgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoYSk7XG4gICAgcmV0dXJuIGE7XG4gIH07XG5cbiAgcmV0dXJuIEVudmlyb25tZW50UGxhY2Vob2xkZXJzLnJlcGxhY2VBc3luYyhvYmplY3QsIHtcbiAgICBhc3luYyByZWdpb24oKSB7XG4gICAgICByZXR1cm4gb2JqZWN0LnJlZ2lvbiA/PyBhd3MuZGlzY292ZXJEZWZhdWx0UmVnaW9uKCk7XG4gICAgfSxcbiAgICBhc3luYyBhY2NvdW50SWQoKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGFjY291bnQoKSkuYWNjb3VudElkO1xuICAgIH0sXG4gICAgYXN5bmMgcGFydGl0aW9uKCkge1xuICAgICAgcmV0dXJuIHBhcnRpdGlvbigpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4iXX0=
@@ -104,13 +104,13 @@ class ResourceGraph {
104
104
  }
105
105
  inNeighbors(node) {
106
106
  if (!(node in this.edges)) {
107
- throw new toolkit_error_1.ToolkitError(`Node ${node} not found in the graph`);
107
+ throw new toolkit_error_1.ToolkitError('RefactorGraphNodeNotFound', `Node ${node} not found in the graph`);
108
108
  }
109
109
  return Array.from(this.reverseEdges[node] || []);
110
110
  }
111
111
  outNeighbors(node) {
112
112
  if (!(node in this.edges)) {
113
- throw new toolkit_error_1.ToolkitError(`Node ${node} not found in the graph`);
113
+ throw new toolkit_error_1.ToolkitError('RefactorGraphNodeNotFound', `Node ${node} not found in the graph`);
114
114
  }
115
115
  return Array.from(this.edges[node] || []);
116
116
  }
@@ -122,4 +122,4 @@ class ResourceGraph {
122
122
  }
123
123
  }
124
124
  exports.ResourceGraph = ResourceGraph;
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBMkQ7QUFFM0Q7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDakIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFrRDtRQUN6RSxNQUFNLE9BQU8sR0FBdUQsTUFBTSxDQUFDLFdBQVcsQ0FDcEYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7YUFDcEUsR0FBRyxDQUNGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FNekQsQ0FDSixDQUNKLENBQ0YsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDNUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFxQyxDQUNqRixDQUNGLENBQ0YsQ0FBQztRQUVGLDJCQUEyQjtRQUMz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RUFBRSxDQUFDO2dCQUNqQixJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFZO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksNEJBQVksQ0FBQyxRQUFRLElBQUkseUJBQXlCLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFZO1FBQzlCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksNEJBQVksQ0FBQyxRQUFRLElBQUkseUJBQXlCLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGO0FBakpELHNDQWlKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25SZXNvdXJjZSwgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcblxuLyoqXG4gKiBBbiBpbW11dGFibGUgZGlyZWN0ZWQgZ3JhcGggb2YgcmVzb3VyY2VzIGZyb20gbXVsdGlwbGUgQ2xvdWRGb3JtYXRpb24gc3RhY2tzLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VHcmFwaCB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0YWNrcyhzdGFja3M6IE9taXQ8Q2xvdWRGb3JtYXRpb25TdGFjaywgJ2Vudmlyb25tZW50Jz5bXSk6IFJlc291cmNlR3JhcGgge1xuICAgIGNvbnN0IGV4cG9ydHM6IHsgW3A6IHN0cmluZ106IHsgc3RhY2tOYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfSB9ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgc3RhY2tzLmZsYXRNYXAoKHMpID0+XG4gICAgICAgIE9iamVjdC52YWx1ZXMocy50ZW1wbGF0ZS5PdXRwdXRzID8/IHt9KVxuICAgICAgICAgIC5maWx0ZXIoKG8pID0+IG8uRXhwb3J0ICE9IG51bGwgJiYgdHlwZW9mIG8uRXhwb3J0Lk5hbWUgPT09ICdzdHJpbmcnKVxuICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAobykgPT5cbiAgICAgICAgICAgICAgW28uRXhwb3J0Lk5hbWUsIHsgc3RhY2tOYW1lOiBzLnN0YWNrTmFtZSwgdmFsdWU6IG8uVmFsdWUgfV0gYXMgW1xuICAgICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBhbnk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgc3RhY2tzLmZsYXRNYXAoKHMpID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHMudGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9KS5tYXAoXG4gICAgICAgICAgKFtpZCwgcmVzXSkgPT4gW2Ake3Muc3RhY2tOYW1lfS4ke2lkfWAsIHJlc10gYXMgW3N0cmluZywgQ2xvdWRGb3JtYXRpb25SZXNvdXJjZV0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyAxLiBCdWlsZCBhZGphY2VuY3kgbGlzdHNcbiAgICBjb25zdCBlZGdlczogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0ge307XG4gICAgY29uc3QgcmV2ZXJzZUVkZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHJlc291cmNlcykpIHtcbiAgICAgIGVkZ2VzW2lkXSA9IG5ldyBTZXQoKTtcbiAgICAgIHJldmVyc2VFZGdlc1tpZF0gPSBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgLy8gMi4gRGV0ZWN0IGRlcGVuZGVuY2llcyBieSBzZWFyY2hpbmcgZm9yIFJlZi9Gbjo6R2V0QXR0XG4gICAgY29uc3QgZmluZERlcGVuZGVuY2llcyA9IChzdGFja05hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIFtdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5mbGF0TWFwKChyZXMpID0+IGZpbmREZXBlbmRlbmNpZXMoc3RhY2tOYW1lLCByZXMpKTtcbiAgICAgIH1cbiAgICAgIGlmICgnUmVmJyBpbiB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gW2Ake3N0YWNrTmFtZX0uJHt2YWx1ZS5SZWZ9YF07XG4gICAgICB9XG4gICAgICBpZiAoJ0ZuOjpHZXRBdHQnIGluIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJlZlRhcmdldCA9IEFycmF5LmlzQXJyYXkodmFsdWVbJ0ZuOjpHZXRBdHQnXSlcbiAgICAgICAgICA/IHZhbHVlWydGbjo6R2V0QXR0J11bMF1cbiAgICAgICAgICA6IHZhbHVlWydGbjo6R2V0QXR0J10uc3BsaXQoJy4nKVswXTtcbiAgICAgICAgcmV0dXJuIFtgJHtzdGFja05hbWV9LiR7cmVmVGFyZ2V0fWBdO1xuICAgICAgfVxuICAgICAgaWYgKCdGbjo6SW1wb3J0VmFsdWUnIGluIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGV4cCA9IGV4cG9ydHNbdmFsdWVbJ0ZuOjpJbXBvcnRWYWx1ZSddXTtcbiAgICAgICAgaWYgKGV4cCAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdiA9IGV4cC52YWx1ZTtcbiAgICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCdGbjo6R2V0QXR0JyBpbiB2KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkID0gQXJyYXkuaXNBcnJheSh2WydGbjo6R2V0QXR0J10pID8gdlsnRm46OkdldEF0dCddWzBdIDogdlsnRm46OkdldEF0dCddLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICAgIHJldHVybiBbYCR7ZXhwLnN0YWNrTmFtZX0uJHtpZH1gXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnUmVmJyBpbiB2KSB7XG4gICAgICAgICAgICAgIHJldHVybiBbYCR7ZXhwLnN0YWNrTmFtZX0uJHt2LlJlZn1gXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtgJHtleHAuc3RhY2tOYW1lfS4ke3Z9YF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICgnRGVwZW5kc09uJyBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5EZXBlbmRzT24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4udmFsdWUuRGVwZW5kc09uLm1hcCgocjogc3RyaW5nKSA9PiBgJHtzdGFja05hbWV9LiR7cn1gKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goYCR7c3RhY2tOYW1lfS4ke3ZhbHVlLkRlcGVuZHNPbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goLi4uT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmxhdE1hcCgocmVzKSA9PiBmaW5kRGVwZW5kZW5jaWVzKHN0YWNrTmFtZSwgcmVzKSkpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBbaWQsIHJlc10gb2YgT2JqZWN0LmVudHJpZXMocmVzb3VyY2VzKSkge1xuICAgICAgY29uc3Qgc3RhY2tOYW1lID0gaWQuc3BsaXQoJy4nKVswXTtcbiAgICAgIGNvbnN0IGRlcHMgPSBmaW5kRGVwZW5kZW5jaWVzKHN0YWNrTmFtZSwgcmVzIHx8IHt9KTtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgICAgaWYgKGRlcCBpbiByZXNvdXJjZXMgJiYgZGVwICE9PSBpZCkge1xuICAgICAgICAgIGVkZ2VzW2lkXS5hZGQoZGVwKTtcbiAgICAgICAgICByZXZlcnNlRWRnZXNbZGVwXS5hZGQoaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUdyYXBoKGVkZ2VzLCByZXZlcnNlRWRnZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlZGdlczogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV2ZXJzZUVkZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSB7fTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGVkZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sIHJldmVyc2VFZGdlczogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+KSB7XG4gICAgdGhpcy5lZGdlcyA9IGVkZ2VzO1xuICAgIHRoaXMucmV2ZXJzZUVkZ2VzID0gcmV2ZXJzZUVkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNvcnRlZCBub2RlcyBpbiB0b3BvbG9naWNhbCBvcmRlci5cbiAgICovXG4gIGdldCBzb3J0ZWROb2RlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG91dERlZ3JlZSA9IE9iamVjdC5rZXlzKHRoaXMuZWRnZXMpLnJlZHVjZSgoYWNjLCBrKSA9PiB7XG4gICAgICBhY2Nba10gPSB0aGlzLmVkZ2VzW2tdLnNpemU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pO1xuXG4gICAgY29uc3QgcXVldWUgPSBPYmplY3Qua2V5cyhvdXREZWdyZWUpLmZpbHRlcigoaykgPT4gb3V0RGVncmVlW2tdID09PSAwKTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2RlID0gcXVldWUuc2hpZnQoKSE7XG4gICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIGZvciAoY29uc3Qgbnh0IG9mIHRoaXMucmV2ZXJzZUVkZ2VzW25vZGVdKSB7XG4gICAgICAgIG91dERlZ3JlZVtueHRdLS07XG4gICAgICAgIGlmIChvdXREZWdyZWVbbnh0XSA9PT0gMCkge1xuICAgICAgICAgIHF1ZXVlLnB1c2gobnh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGluTmVpZ2hib3JzKG5vZGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIShub2RlIGluIHRoaXMuZWRnZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBOb2RlICR7bm9kZX0gbm90IGZvdW5kIGluIHRoZSBncmFwaGApO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJldmVyc2VFZGdlc1tub2RlXSB8fCBbXSk7XG4gIH1cblxuICBwdWJsaWMgb3V0TmVpZ2hib3JzKG5vZGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIShub2RlIGluIHRoaXMuZWRnZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBOb2RlICR7bm9kZX0gbm90IGZvdW5kIGluIHRoZSBncmFwaGApO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVkZ2VzW25vZGVdIHx8IFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFub3RoZXIgZ3JhcGggd2l0aCB0aGUgc2FtZSBub2RlcywgYnV0IHdpdGggdGhlIGVkZ2VzIGludmVydGVkXG4gICAqL1xuICBwdWJsaWMgb3Bwb3NpdGUoKTogUmVzb3VyY2VHcmFwaCB7XG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUdyYXBoKHRoaXMucmV2ZXJzZUVkZ2VzLCB0aGlzLmVkZ2VzKTtcbiAgfVxufVxuIl19
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBMkQ7QUFFM0Q7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDakIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFrRDtRQUN6RSxNQUFNLE9BQU8sR0FBdUQsTUFBTSxDQUFDLFdBQVcsQ0FDcEYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7YUFDcEUsR0FBRyxDQUNGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FNekQsQ0FDSixDQUNKLENBQ0YsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FDNUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFxQyxDQUNqRixDQUNGLENBQ0YsQ0FBQztRQUVGLDJCQUEyQjtRQUMz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RUFBRSxDQUFDO2dCQUNqQixJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxJQUFZO1FBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksNEJBQVksQ0FBQywyQkFBMkIsRUFBRSxRQUFRLElBQUkseUJBQXlCLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFZO1FBQzlCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksNEJBQVksQ0FBQywyQkFBMkIsRUFBRSxRQUFRLElBQUkseUJBQXlCLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNGO0FBakpELHNDQWlKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25SZXNvdXJjZSwgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcblxuLyoqXG4gKiBBbiBpbW11dGFibGUgZGlyZWN0ZWQgZ3JhcGggb2YgcmVzb3VyY2VzIGZyb20gbXVsdGlwbGUgQ2xvdWRGb3JtYXRpb24gc3RhY2tzLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VHcmFwaCB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0YWNrcyhzdGFja3M6IE9taXQ8Q2xvdWRGb3JtYXRpb25TdGFjaywgJ2Vudmlyb25tZW50Jz5bXSk6IFJlc291cmNlR3JhcGgge1xuICAgIGNvbnN0IGV4cG9ydHM6IHsgW3A6IHN0cmluZ106IHsgc3RhY2tOYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfSB9ID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgc3RhY2tzLmZsYXRNYXAoKHMpID0+XG4gICAgICAgIE9iamVjdC52YWx1ZXMocy50ZW1wbGF0ZS5PdXRwdXRzID8/IHt9KVxuICAgICAgICAgIC5maWx0ZXIoKG8pID0+IG8uRXhwb3J0ICE9IG51bGwgJiYgdHlwZW9mIG8uRXhwb3J0Lk5hbWUgPT09ICdzdHJpbmcnKVxuICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAobykgPT5cbiAgICAgICAgICAgICAgW28uRXhwb3J0Lk5hbWUsIHsgc3RhY2tOYW1lOiBzLnN0YWNrTmFtZSwgdmFsdWU6IG8uVmFsdWUgfV0gYXMgW1xuICAgICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBhbnk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICApLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzb3VyY2VzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgc3RhY2tzLmZsYXRNYXAoKHMpID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHMudGVtcGxhdGUuUmVzb3VyY2VzID8/IHt9KS5tYXAoXG4gICAgICAgICAgKFtpZCwgcmVzXSkgPT4gW2Ake3Muc3RhY2tOYW1lfS4ke2lkfWAsIHJlc10gYXMgW3N0cmluZywgQ2xvdWRGb3JtYXRpb25SZXNvdXJjZV0sXG4gICAgICAgICksXG4gICAgICApLFxuICAgICk7XG5cbiAgICAvLyAxLiBCdWlsZCBhZGphY2VuY3kgbGlzdHNcbiAgICBjb25zdCBlZGdlczogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0ge307XG4gICAgY29uc3QgcmV2ZXJzZUVkZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHJlc291cmNlcykpIHtcbiAgICAgIGVkZ2VzW2lkXSA9IG5ldyBTZXQoKTtcbiAgICAgIHJldmVyc2VFZGdlc1tpZF0gPSBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgLy8gMi4gRGV0ZWN0IGRlcGVuZGVuY2llcyBieSBzZWFyY2hpbmcgZm9yIFJlZi9Gbjo6R2V0QXR0XG4gICAgY29uc3QgZmluZERlcGVuZGVuY2llcyA9IChzdGFja05hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIFtdO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5mbGF0TWFwKChyZXMpID0+IGZpbmREZXBlbmRlbmNpZXMoc3RhY2tOYW1lLCByZXMpKTtcbiAgICAgIH1cbiAgICAgIGlmICgnUmVmJyBpbiB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gW2Ake3N0YWNrTmFtZX0uJHt2YWx1ZS5SZWZ9YF07XG4gICAgICB9XG4gICAgICBpZiAoJ0ZuOjpHZXRBdHQnIGluIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJlZlRhcmdldCA9IEFycmF5LmlzQXJyYXkodmFsdWVbJ0ZuOjpHZXRBdHQnXSlcbiAgICAgICAgICA/IHZhbHVlWydGbjo6R2V0QXR0J11bMF1cbiAgICAgICAgICA6IHZhbHVlWydGbjo6R2V0QXR0J10uc3BsaXQoJy4nKVswXTtcbiAgICAgICAgcmV0dXJuIFtgJHtzdGFja05hbWV9LiR7cmVmVGFyZ2V0fWBdO1xuICAgICAgfVxuICAgICAgaWYgKCdGbjo6SW1wb3J0VmFsdWUnIGluIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGV4cCA9IGV4cG9ydHNbdmFsdWVbJ0ZuOjpJbXBvcnRWYWx1ZSddXTtcbiAgICAgICAgaWYgKGV4cCAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdiA9IGV4cC52YWx1ZTtcbiAgICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKCdGbjo6R2V0QXR0JyBpbiB2KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkID0gQXJyYXkuaXNBcnJheSh2WydGbjo6R2V0QXR0J10pID8gdlsnRm46OkdldEF0dCddWzBdIDogdlsnRm46OkdldEF0dCddLnNwbGl0KCcuJylbMF07XG4gICAgICAgICAgICAgIHJldHVybiBbYCR7ZXhwLnN0YWNrTmFtZX0uJHtpZH1gXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgnUmVmJyBpbiB2KSB7XG4gICAgICAgICAgICAgIHJldHVybiBbYCR7ZXhwLnN0YWNrTmFtZX0uJHt2LlJlZn1gXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtgJHtleHAuc3RhY2tOYW1lfS4ke3Z9YF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICgnRGVwZW5kc09uJyBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZS5EZXBlbmRzT24pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4udmFsdWUuRGVwZW5kc09uLm1hcCgocjogc3RyaW5nKSA9PiBgJHtzdGFja05hbWV9LiR7cn1gKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goYCR7c3RhY2tOYW1lfS4ke3ZhbHVlLkRlcGVuZHNPbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goLi4uT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZmxhdE1hcCgocmVzKSA9PiBmaW5kRGVwZW5kZW5jaWVzKHN0YWNrTmFtZSwgcmVzKSkpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBbaWQsIHJlc10gb2YgT2JqZWN0LmVudHJpZXMocmVzb3VyY2VzKSkge1xuICAgICAgY29uc3Qgc3RhY2tOYW1lID0gaWQuc3BsaXQoJy4nKVswXTtcbiAgICAgIGNvbnN0IGRlcHMgPSBmaW5kRGVwZW5kZW5jaWVzKHN0YWNrTmFtZSwgcmVzIHx8IHt9KTtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgICAgaWYgKGRlcCBpbiByZXNvdXJjZXMgJiYgZGVwICE9PSBpZCkge1xuICAgICAgICAgIGVkZ2VzW2lkXS5hZGQoZGVwKTtcbiAgICAgICAgICByZXZlcnNlRWRnZXNbZGVwXS5hZGQoaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUdyYXBoKGVkZ2VzLCByZXZlcnNlRWRnZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlZGdlczogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV2ZXJzZUVkZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSB7fTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGVkZ2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXQ8c3RyaW5nPj4sIHJldmVyc2VFZGdlczogUmVjb3JkPHN0cmluZywgU2V0PHN0cmluZz4+KSB7XG4gICAgdGhpcy5lZGdlcyA9IGVkZ2VzO1xuICAgIHRoaXMucmV2ZXJzZUVkZ2VzID0gcmV2ZXJzZUVkZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNvcnRlZCBub2RlcyBpbiB0b3BvbG9naWNhbCBvcmRlci5cbiAgICovXG4gIGdldCBzb3J0ZWROb2RlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG91dERlZ3JlZSA9IE9iamVjdC5rZXlzKHRoaXMuZWRnZXMpLnJlZHVjZSgoYWNjLCBrKSA9PiB7XG4gICAgICBhY2Nba10gPSB0aGlzLmVkZ2VzW2tdLnNpemU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4pO1xuXG4gICAgY29uc3QgcXVldWUgPSBPYmplY3Qua2V5cyhvdXREZWdyZWUpLmZpbHRlcigoaykgPT4gb3V0RGVncmVlW2tdID09PSAwKTtcblxuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2RlID0gcXVldWUuc2hpZnQoKSE7XG4gICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIGZvciAoY29uc3Qgbnh0IG9mIHRoaXMucmV2ZXJzZUVkZ2VzW25vZGVdKSB7XG4gICAgICAgIG91dERlZ3JlZVtueHRdLS07XG4gICAgICAgIGlmIChvdXREZWdyZWVbbnh0XSA9PT0gMCkge1xuICAgICAgICAgIHF1ZXVlLnB1c2gobnh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGluTmVpZ2hib3JzKG5vZGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIShub2RlIGluIHRoaXMuZWRnZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdSZWZhY3RvckdyYXBoTm9kZU5vdEZvdW5kJywgYE5vZGUgJHtub2RlfSBub3QgZm91bmQgaW4gdGhlIGdyYXBoYCk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucmV2ZXJzZUVkZ2VzW25vZGVdIHx8IFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBvdXROZWlnaGJvcnMobm9kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGlmICghKG5vZGUgaW4gdGhpcy5lZGdlcykpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoJ1JlZmFjdG9yR3JhcGhOb2RlTm90Rm91bmQnLCBgTm9kZSAke25vZGV9IG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGhgKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lZGdlc1tub2RlXSB8fCBbXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbm90aGVyIGdyYXBoIHdpdGggdGhlIHNhbWUgbm9kZXMsIGJ1dCB3aXRoIHRoZSBlZGdlcyBpbnZlcnRlZFxuICAgKi9cbiAgcHVibGljIG9wcG9zaXRlKCk6IFJlc291cmNlR3JhcGgge1xuICAgIHJldHVybiBuZXcgUmVzb3VyY2VHcmFwaCh0aGlzLnJldmVyc2VFZGdlcywgdGhpcy5lZGdlcyk7XG4gIH1cbn1cbiJdfQ==
@@ -44,7 +44,7 @@ async function usePrescribedMappings(mappingGroups, sdkProvider) {
44
44
  const destinations = new Set();
45
45
  for (const destination of Object.values(group.resources)) {
46
46
  if (destinations.has(destination)) {
47
- throw new toolkit_error_1.ToolkitError(`Duplicate destination resource '${destination}' in environment ${group.account}/${group.region}`);
47
+ throw new toolkit_error_1.ToolkitError('DuplicateDestinationResource', `Duplicate destination resource '${destination}' in environment ${group.account}/${group.region}`);
48
48
  }
49
49
  destinations.add(destination);
50
50
  }
@@ -53,10 +53,10 @@ async function usePrescribedMappings(mappingGroups, sdkProvider) {
53
53
  for (const group of stackGroups) {
54
54
  for (const [source, destination] of Object.entries(group.resources)) {
55
55
  if (!inUse(source, group.stacks)) {
56
- throw new toolkit_error_1.ToolkitError(`Source resource '${source}' does not exist in environment ${group.account}/${group.region}`);
56
+ throw new toolkit_error_1.ToolkitError('SourceResourceNotFound', `Source resource '${source}' does not exist in environment ${group.account}/${group.region}`);
57
57
  }
58
58
  if (inUse(destination, group.stacks)) {
59
- throw new toolkit_error_1.ToolkitError(`Destination resource '${destination}' already in use in environment ${group.account}/${group.region}`);
59
+ throw new toolkit_error_1.ToolkitError('DestinationResourceInUse', `Destination resource '${destination}' already in use in environment ${group.account}/${group.region}`);
60
60
  }
61
61
  const environment = environmentOf(group);
62
62
  const src = makeLocation(source, environment, group.stacks);
@@ -68,7 +68,7 @@ async function usePrescribedMappings(mappingGroups, sdkProvider) {
68
68
  function inUse(location, stacks) {
69
69
  const [stackName, logicalId] = location.split('.');
70
70
  if (stackName == null || logicalId == null) {
71
- throw new toolkit_error_1.ToolkitError(`Invalid location '${location}'`);
71
+ throw new toolkit_error_1.ToolkitError('InvalidResourceLocation', `Invalid location '${location}'`);
72
72
  }
73
73
  const stack = stacks.find((s) => s.stackName === stackName);
74
74
  return stack != null && stack.template.Resources?.[logicalId] != null;
@@ -162,4 +162,4 @@ async function groupStacks(sdkProvider, localStacks, additionalStackNames) {
162
162
  }
163
163
  return groups;
164
164
  }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLHNEQXVGQztBQUVELDREQXFCQztBQW1CRCx3RUFHQztBQUVELGtEQUVDO0FBRUQsMERBRUM7QUFXRCxrQ0FrQ0M7QUF4TkQsc0VBSXNDO0FBRXRDLHFDQUEyRDtBQUUzRCxzQ0FBaUM7QUFDakMsd0NBQStDO0FBRS9DLHFEQUFxRTtBQUNyRSxxQ0FBc0M7QUFFdEMsK0RBQTJEO0FBQzNELHdEQUFnRDtBQUVoRCw0Q0FBMEI7QUFjbkIsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxhQUE2QixFQUM3QixXQUF3QjtJQU14QixNQUFNLFdBQVcsR0FBNkIsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxVQUFVLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkgsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNmLEdBQUcsS0FBSztZQUNSLE1BQU07U0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELEtBQUssSUFBSSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2QyxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sSUFBSSw0QkFBWSxDQUNwQixtQ0FBbUMsV0FBVyxvQkFBb0IsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQ2xHLENBQUM7WUFDSixDQUFDO1lBQ0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7SUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxJQUFJLDRCQUFZLENBQUMsb0JBQW9CLE1BQU0sbUNBQW1DLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdkgsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLDRCQUFZLENBQ3BCLHlCQUF5QixXQUFXLG1DQUFtQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDdkcsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLGdDQUFlLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztJQUVkLFNBQVMsS0FBSyxDQUFDLFFBQWdCLEVBQUUsTUFBNkI7UUFDNUQsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLDRCQUFZLENBQUMscUJBQXFCLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDNUQsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFtQjtRQUN4QyxPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUyxZQUFZLENBQ25CLEdBQVcsRUFDWCxXQUE4QixFQUM5QixTQUFnQyxFQUFFO1FBRWxDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRTVELE9BQU8sSUFBSSxpQ0FBZ0IsQ0FDekI7WUFDRSxTQUFTO1lBQ1QsV0FBVztZQUNYLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLEVBQUU7U0FDaEMsRUFDRCxTQUFTLENBQ1YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxXQUF3QixFQUN4QixXQUE4QixFQUM5QixVQUFvQjtJQUVwQixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsYUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBRWxHLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFBLDJCQUFvQixFQUFDLHFCQUFxQixDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNsRixPQUFPO1lBQ0wsV0FBVztZQUNYLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFFBQVE7U0FDVCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBQSxvQkFBTSxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXpCLHdFQUF3RTtJQUN4RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELEtBQUssVUFBVSxVQUFVLENBQ3ZCLFdBQXdCLEVBQ3hCLFdBQThCO0lBRTlCLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxhQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7SUFFbEcsT0FBTyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFDN0IsaUJBQWlCLEVBQUU7WUFDakIsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQiwwQkFBMEI7WUFDMUIsaUJBQWlCO1lBQ2pCLG1CQUFtQjtTQUNwQjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQiw4QkFBOEIsQ0FBQyxXQUE4QjtJQUMzRSxNQUFNLEdBQUcsR0FBRyxTQUFTLFdBQVcsQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pFLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBQSxvREFBMkIsRUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsUUFBd0I7SUFDMUQsT0FBTyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUEseUNBQWdCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLEtBQTZCO0lBQ25FLE9BQU8sY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFBLDZDQUFvQixFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxFQUEyQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxJQUFJLDJCQUFpQixFQUFFLENBQUM7SUFDdkMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ1gsT0FBTyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFdBQVcsQ0FBQyxXQUF3QixFQUFFLFdBQWtDLEVBQUUsb0JBQThCO0lBQzVILE1BQU0sWUFBWSxHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRS9ELEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sR0FBRyxHQUFHLElBQUEsbUJBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUEsY0FBTyxFQUFDLFdBQVcsRUFDbEQsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSxtQkFBVSxFQUFDLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUM3RSxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQWlCLEVBQUUsQ0FBQztJQUNoQyxLQUFLLElBQUksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQzNDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ2hHLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUYsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsQ0FBQztRQUMzQyxNQUFNLGNBQWMsR0FBRyxNQUFNLFVBQVUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEUsTUFBTSxVQUFVLEdBQUcsY0FBYzthQUM5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBVSxDQUFDO2FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxjQUFjLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTVGLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixXQUFXO1lBQ1gsY0FBYztZQUNkLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHR5cGUgeyBUeXBlZE1hcHBpbmcgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7XG4gIGZvcm1hdEFtYmlndW91c01hcHBpbmdzIGFzIGZtdEFtYmlndW91c01hcHBpbmdzLFxuICBmb3JtYXRFbnZpcm9ubWVudFNlY3Rpb25IZWFkZXIgYXMgZm10RW52aXJvbm1lbnRTZWN0aW9uSGVhZGVyLFxuICBmb3JtYXRUeXBlZE1hcHBpbmdzIGFzIGZtdFR5cGVkTWFwcGluZ3MsXG59IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHR5cGUgeyBTdGFja1N1bW1hcnkgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgZGVzZXJpYWxpemVTdHJ1Y3R1cmUsIGluZGV4QnkgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB0eXBlIHsgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi9hd3MtYXV0aC9wcml2YXRlJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4nO1xuaW1wb3J0IHsgU3RyaW5nV3JpdGVTdHJlYW0gfSBmcm9tICcuLi9zdHJlYW1zJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25TdGFjayB9IGZyb20gJy4vY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgUmVzb3VyY2VMb2NhdGlvbiwgUmVzb3VyY2VNYXBwaW5nIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBoYXNoT2JqZWN0IH0gZnJvbSAnLi9kaWdlc3QnO1xuaW1wb3J0IHR5cGUgeyBNYXBwaW5nR3JvdXAgfSBmcm9tICcuLi8uLi9hY3Rpb25zJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBwTGltaXQgfSBmcm9tICcuLi8uLi91dGlsL2NvbmN1cnJlbmN5JztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0JztcblxuaW50ZXJmYWNlIFN0YWNrR3JvdXAge1xuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG59XG5cbmludGVyZmFjZSBTdGFja0dyb3VwIHtcbiAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50O1xuICBsb2NhbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xuICBkZXBsb3llZFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXNlUHJlc2NyaWJlZE1hcHBpbmdzKFxuICBtYXBwaW5nR3JvdXBzOiBNYXBwaW5nR3JvdXBbXSxcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuKTogUHJvbWlzZTxSZXNvdXJjZU1hcHBpbmdbXT4ge1xuICBpbnRlcmZhY2UgTWFwcGluZ0dyb3VwV2l0aFN0YWNrcyBleHRlbmRzIE1hcHBpbmdHcm91cCB7XG4gICAgc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIH1cblxuICBjb25zdCBzdGFja0dyb3VwczogTWFwcGluZ0dyb3VwV2l0aFN0YWNrc1tdID0gW107XG4gIGZvciAoY29uc3QgZ3JvdXAgb2YgbWFwcGluZ0dyb3Vwcykge1xuICAgIGNvbnN0IHN1bW1hcmllcyA9IGF3YWl0IGxpc3RTdGFja3Moc2RrUHJvdmlkZXIsIGVudmlyb25tZW50T2YoZ3JvdXApKTtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBnZXREZXBsb3llZFN0YWNrc0J5TmFtZXMoc2RrUHJvdmlkZXIsIGVudmlyb25tZW50T2YoZ3JvdXApLCBzdW1tYXJpZXMubWFwKHMgPT4gcy5TdGFja05hbWUhKSk7XG4gICAgc3RhY2tHcm91cHMucHVzaCh7XG4gICAgICAuLi5ncm91cCxcbiAgICAgIHN0YWNrcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHRoYXQgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSBkZXN0aW5hdGlvbnNcbiAgZm9yIChsZXQgZ3JvdXAgb2Ygc3RhY2tHcm91cHMpIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgZGVzdGluYXRpb24gb2YgT2JqZWN0LnZhbHVlcyhncm91cC5yZXNvdXJjZXMpKSB7XG4gICAgICBpZiAoZGVzdGluYXRpb25zLmhhcyhkZXN0aW5hdGlvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihcbiAgICAgICAgICBgRHVwbGljYXRlIGRlc3RpbmF0aW9uIHJlc291cmNlICcke2Rlc3RpbmF0aW9ufScgaW4gZW52aXJvbm1lbnQgJHtncm91cC5hY2NvdW50fS8ke2dyb3VwLnJlZ2lvbn1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVzdGluYXRpb25zLmFkZChkZXN0aW5hdGlvbik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZXNvdXJjZU1hcHBpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwIG9mIHN0YWNrR3JvdXBzKSB7XG4gICAgZm9yIChjb25zdCBbc291cmNlLCBkZXN0aW5hdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXAucmVzb3VyY2VzKSkge1xuICAgICAgaWYgKCFpblVzZShzb3VyY2UsIGdyb3VwLnN0YWNrcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgU291cmNlIHJlc291cmNlICcke3NvdXJjZX0nIGRvZXMgbm90IGV4aXN0IGluIGVudmlyb25tZW50ICR7Z3JvdXAuYWNjb3VudH0vJHtncm91cC5yZWdpb259YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpblVzZShkZXN0aW5hdGlvbiwgZ3JvdXAuc3RhY2tzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgIGBEZXN0aW5hdGlvbiByZXNvdXJjZSAnJHtkZXN0aW5hdGlvbn0nIGFscmVhZHkgaW4gdXNlIGluIGVudmlyb25tZW50ICR7Z3JvdXAuYWNjb3VudH0vJHtncm91cC5yZWdpb259YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudE9mKGdyb3VwKTtcbiAgICAgIGNvbnN0IHNyYyA9IG1ha2VMb2NhdGlvbihzb3VyY2UsIGVudmlyb25tZW50LCBncm91cC5zdGFja3MpO1xuICAgICAgY29uc3QgZHN0ID0gbWFrZUxvY2F0aW9uKGRlc3RpbmF0aW9uLCBlbnZpcm9ubWVudCk7XG4gICAgICByZXN1bHQucHVzaChuZXcgUmVzb3VyY2VNYXBwaW5nKHNyYywgZHN0KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG5cbiAgZnVuY3Rpb24gaW5Vc2UobG9jYXRpb246IHN0cmluZywgc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gbG9jYXRpb24uc3BsaXQoJy4nKTtcbiAgICBpZiAoc3RhY2tOYW1lID09IG51bGwgfHwgbG9naWNhbElkID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYEludmFsaWQgbG9jYXRpb24gJyR7bG9jYXRpb259J2ApO1xuICAgIH1cbiAgICBjb25zdCBzdGFjayA9IHN0YWNrcy5maW5kKChzKSA9PiBzLnN0YWNrTmFtZSA9PT0gc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gc3RhY2sgIT0gbnVsbCAmJiBzdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXM/Lltsb2dpY2FsSWRdICE9IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBlbnZpcm9ubWVudE9mKGdyb3VwOiBNYXBwaW5nR3JvdXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogZ3JvdXAuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogZ3JvdXAucmVnaW9uLFxuICAgICAgbmFtZTogJycsXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VMb2NhdGlvbihcbiAgICBsb2M6IHN0cmluZyxcbiAgICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gICAgc3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10gPSBbXSxcbiAgKTogUmVzb3VyY2VMb2NhdGlvbiB7XG4gICAgY29uc3QgW3N0YWNrTmFtZSwgbG9naWNhbElkXSA9IGxvYy5zcGxpdCgnLicpO1xuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzLmZpbmQoKHMpID0+IHMuc3RhY2tOYW1lID09PSBzdGFja05hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBSZXNvdXJjZUxvY2F0aW9uKFxuICAgICAge1xuICAgICAgICBzdGFja05hbWUsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICB0ZW1wbGF0ZTogc3RhY2s/LnRlbXBsYXRlID8/IHt9LFxuICAgICAgfSxcbiAgICAgIGxvZ2ljYWxJZCxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZXBsb3llZFN0YWNrc0J5TmFtZXMoXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50LFxuICBzdGFja05hbWVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8Q2xvdWRGb3JtYXRpb25TdGFja1tdPiB7XG4gIGNvbnN0IGNmbiA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudCwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG5cbiAgY29uc3Qgbm9ybWFsaXplID0gYXN5bmMgKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVDb21tYW5kT3V0cHV0ID0gYXdhaXQgY2ZuLmdldFRlbXBsYXRlKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBkZXNlcmlhbGl6ZVN0cnVjdHVyZSh0ZW1wbGF0ZUNvbW1hbmRPdXRwdXQuVGVtcGxhdGVCb2R5ID8/ICd7fScpO1xuICAgIHJldHVybiB7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIHN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgdGVtcGxhdGUsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBsaW1pdCA9IHBMaW1pdCgyMCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gIHJldHVybiBQcm9taXNlLmFsbChzdGFja05hbWVzLm1hcChzID0+IGxpbWl0KCgpID0+IG5vcm1hbGl6ZShzKSkpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdFN0YWNrcyhcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4pOiBQcm9taXNlPFN0YWNrU3VtbWFyeVtdPiB7XG4gIGNvbnN0IGNmbiA9IChhd2FpdCBzZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudCwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrLmNsb3VkRm9ybWF0aW9uKCk7XG5cbiAgcmV0dXJuIGNmbi5wYWdpbmF0ZWRMaXN0U3RhY2tzKHtcbiAgICBTdGFja1N0YXR1c0ZpbHRlcjogW1xuICAgICAgJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAnVVBEQVRFX0NPTVBMRVRFJyxcbiAgICAgICdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgICAgJ0lNUE9SVF9DT01QTEVURScsXG4gICAgICAnUk9MTEJBQ0tfQ09NUExFVEUnLFxuICAgIF0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RW52aXJvbm1lbnRTZWN0aW9uSGVhZGVyKGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCkge1xuICBjb25zdCBlbnYgPSBgYXdzOi8vJHtlbnZpcm9ubWVudC5hY2NvdW50fS8ke2Vudmlyb25tZW50LnJlZ2lvbn1gO1xuICByZXR1cm4gZm9ybWF0VG9TdHJlYW0oc3RyZWFtID0+IGZtdEVudmlyb25tZW50U2VjdGlvbkhlYWRlcihzdHJlYW0sIGVudikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VHlwZWRNYXBwaW5ncyhtYXBwaW5nczogVHlwZWRNYXBwaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gZm9ybWF0VG9TdHJlYW0oKHN0cmVhbSkgPT4gZm10VHlwZWRNYXBwaW5ncyhzdHJlYW0sIG1hcHBpbmdzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBbWJpZ3VvdXNNYXBwaW5ncyhwYXRoczogW3N0cmluZ1tdLCBzdHJpbmdbXV1bXSk6IHN0cmluZyB7XG4gIHJldHVybiBmb3JtYXRUb1N0cmVhbSgoc3RyZWFtKSA9PiBmbXRBbWJpZ3VvdXNNYXBwaW5ncyhzdHJlYW0sIHBhdGhzKSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRvU3RyZWFtKGNiOiAoc3RyZWFtOiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pID0+IHZvaWQpOiBzdHJpbmcge1xuICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyaW5nV3JpdGVTdHJlYW0oKTtcbiAgY2Ioc3RyZWFtKTtcbiAgcmV0dXJuIHN0cmVhbS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIHN0YWNrIGdyb3VwcywgZWFjaCBjb250YWluaW5nIHRoZSBsb2NhbCBzdGFja3MgYW5kIHRoZSBkZXBsb3llZCBzdGFja3MgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncm91cFN0YWNrcyhzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW10sIGFkZGl0aW9uYWxTdGFja05hbWVzOiBzdHJpbmdbXSkge1xuICBjb25zdCBlbnZpcm9ubWVudHM6IE1hcDxzdHJpbmcsIGN4YXBpLkVudmlyb25tZW50PiA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IHN0YWNrIG9mIGxvY2FsU3RhY2tzKSB7XG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBhd2FpdCBzZGtQcm92aWRlci5yZXNvbHZlRW52aXJvbm1lbnQoc3RhY2suZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IGtleSA9IGhhc2hPYmplY3QoZW52aXJvbm1lbnQpO1xuICAgIGVudmlyb25tZW50cy5zZXQoa2V5LCBlbnZpcm9ubWVudCk7XG4gIH1cblxuICBjb25zdCBsb2NhbEJ5RW52aXJvbm1lbnQgPSBhd2FpdCBpbmRleEJ5KGxvY2FsU3RhY2tzLFxuICAgIGFzeW5jIChzKSA9PiBoYXNoT2JqZWN0KGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzLmVudmlyb25tZW50KSksXG4gICk7XG5cbiAgY29uc3QgZ3JvdXBzOiBTdGFja0dyb3VwW10gPSBbXTtcbiAgZm9yIChsZXQga2V5IG9mIGxvY2FsQnlFbnZpcm9ubWVudC5rZXlzKCkpIHtcbiAgICBjb25zdCBsb2NhbCA9IGxvY2FsQnlFbnZpcm9ubWVudC5nZXQoa2V5KSE7XG4gICAgY29uc3QgaGFzTG9jYWxDb3VudGVycGFydCA9IChzdGFja05hbWU6IHN0cmluZykgPT4gbG9jYWwuc29tZSgobCkgPT4gbC5zdGFja05hbWUgPT09IHN0YWNrTmFtZSk7XG4gICAgY29uc3Qgd2FzRXhwbGljaXRseVByb3ZpZGVkID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiBhZGRpdGlvbmFsU3RhY2tOYW1lcy5pbmNsdWRlcyhzdGFja05hbWUpO1xuXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudHMuZ2V0KGtleSkhO1xuICAgIGNvbnN0IHN0YWNrU3VtbWFyaWVzID0gYXdhaXQgbGlzdFN0YWNrcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnQpO1xuICAgIGNvbnN0IHN0YWNrTmFtZXMgPSBzdGFja1N1bW1hcmllc1xuICAgICAgLm1hcChzID0+IHMuU3RhY2tOYW1lISlcbiAgICAgIC5maWx0ZXIocyA9PiBoYXNMb2NhbENvdW50ZXJwYXJ0KHMpIHx8IHdhc0V4cGxpY2l0bHlQcm92aWRlZChzKSk7XG4gICAgY29uc3QgZGVwbG95ZWRTdGFja3MgPSBhd2FpdCBnZXREZXBsb3llZFN0YWNrc0J5TmFtZXMoc2RrUHJvdmlkZXIsIGVudmlyb25tZW50LCBzdGFja05hbWVzKTtcblxuICAgIGdyb3Vwcy5wdXNoKHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgZGVwbG95ZWRTdGFja3MsXG4gICAgICBsb2NhbFN0YWNrczogbG9jYWwsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXBzO1xufVxuIl19
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLHNEQXlGQztBQUVELDREQXFCQztBQW1CRCx3RUFHQztBQUVELGtEQUVDO0FBRUQsMERBRUM7QUFXRCxrQ0FrQ0M7QUExTkQsc0VBSXNDO0FBRXRDLHFDQUEyRDtBQUUzRCxzQ0FBaUM7QUFDakMsd0NBQStDO0FBRS9DLHFEQUFxRTtBQUNyRSxxQ0FBc0M7QUFFdEMsK0RBQTJEO0FBQzNELHdEQUFnRDtBQUVoRCw0Q0FBMEI7QUFjbkIsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxhQUE2QixFQUM3QixXQUF3QjtJQU14QixNQUFNLFdBQVcsR0FBNkIsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxLQUFLLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxVQUFVLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLE1BQU0sd0JBQXdCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkgsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNmLEdBQUcsS0FBSztZQUNSLE1BQU07U0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELEtBQUssSUFBSSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2QyxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxZQUFZLENB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LE1BQU0sY0FBYyxHQUFHLE1BQU0sVUFBVSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRSxNQUFNLFVBQVUsR0FBRyxjQUFjO2FBQzlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFVLENBQUM7YUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUkscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLGNBQWMsR0FBRyxNQUFNLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFNUYsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLFdBQVc7WUFDWCxjQUFjO1lBQ2QsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgdHlwZSB7IFR5cGVkTWFwcGluZyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkZm9ybWF0aW9uLWRpZmYnO1xuaW1wb3J0IHtcbiAgZm9ybWF0QW1iaWd1b3VzTWFwcGluZ3MgYXMgZm10QW1iaWd1b3VzTWFwcGluZ3MsXG4gIGZvcm1hdEVudmlyb25tZW50U2VjdGlvbkhlYWRlciBhcyBmbXRFbnZpcm9ubWVudFNlY3Rpb25IZWFkZXIsXG4gIGZvcm1hdFR5cGVkTWFwcGluZ3MgYXMgZm10VHlwZWRNYXBwaW5ncyxcbn0gZnJvbSAnQGF3cy1jZGsvY2xvdWRmb3JtYXRpb24tZGlmZic7XG5pbXBvcnQgdHlwZSB7IFN0YWNrU3VtbWFyeSB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBkZXNlcmlhbGl6ZVN0cnVjdHVyZSwgaW5kZXhCeSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3ByaXZhdGUnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL3BsdWdpbic7XG5pbXBvcnQgeyBTdHJpbmdXcml0ZVN0cmVhbSB9IGZyb20gJy4uL3N0cmVhbXMnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvblN0YWNrIH0gZnJvbSAnLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBSZXNvdXJjZUxvY2F0aW9uLCBSZXNvdXJjZU1hcHBpbmcgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IGhhc2hPYmplY3QgfSBmcm9tICcuL2RpZ2VzdCc7XG5pbXBvcnQgdHlwZSB7IE1hcHBpbmdHcm91cCB9IGZyb20gJy4uLy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vdG9vbGtpdC90b29sa2l0LWVycm9yJztcbmltcG9ydCB7IHBMaW1pdCB9IGZyb20gJy4uLy4uL3V0aWwvY29uY3VycmVuY3knO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQnO1xuXG5pbnRlcmZhY2UgU3RhY2tHcm91cCB7XG4gIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudDtcbiAgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgZGVwbG95ZWRTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbn1cblxuaW50ZXJmYWNlIFN0YWNrR3JvdXAge1xuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQ7XG4gIGxvY2FsU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG4gIGRlcGxveWVkU3RhY2tzOiBDbG91ZEZvcm1hdGlvblN0YWNrW107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1c2VQcmVzY3JpYmVkTWFwcGluZ3MoXG4gIG1hcHBpbmdHcm91cHM6IE1hcHBpbmdHcm91cFtdLFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4pOiBQcm9taXNlPFJlc291cmNlTWFwcGluZ1tdPiB7XG4gIGludGVyZmFjZSBNYXBwaW5nR3JvdXBXaXRoU3RhY2tzIGV4dGVuZHMgTWFwcGluZ0dyb3VwIHtcbiAgICBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrR3JvdXBzOiBNYXBwaW5nR3JvdXBXaXRoU3RhY2tzW10gPSBbXTtcbiAgZm9yIChjb25zdCBncm91cCBvZiBtYXBwaW5nR3JvdXBzKSB7XG4gICAgY29uc3Qgc3VtbWFyaWVzID0gYXdhaXQgbGlzdFN0YWNrcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnRPZihncm91cCkpO1xuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IGdldERlcGxveWVkU3RhY2tzQnlOYW1lcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnRPZihncm91cCksIHN1bW1hcmllcy5tYXAocyA9PiBzLlN0YWNrTmFtZSEpKTtcbiAgICBzdGFja0dyb3Vwcy5wdXNoKHtcbiAgICAgIC4uLmdyb3VwLFxuICAgICAgc3RhY2tzLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGhhdCB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIGRlc3RpbmF0aW9uc1xuICBmb3IgKGxldCBncm91cCBvZiBzdGFja0dyb3Vwcykge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBkZXN0aW5hdGlvbiBvZiBPYmplY3QudmFsdWVzKGdyb3VwLnJlc291cmNlcykpIHtcbiAgICAgIGlmIChkZXN0aW5hdGlvbnMuaGFzKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgICdEdXBsaWNhdGVEZXN0aW5hdGlvblJlc291cmNlJyxcbiAgICAgICAgICBgRHVwbGljYXRlIGRlc3RpbmF0aW9uIHJlc291cmNlICcke2Rlc3RpbmF0aW9ufScgaW4gZW52aXJvbm1lbnQgJHtncm91cC5hY2NvdW50fS8ke2dyb3VwLnJlZ2lvbn1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVzdGluYXRpb25zLmFkZChkZXN0aW5hdGlvbik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBSZXNvdXJjZU1hcHBpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGdyb3VwIG9mIHN0YWNrR3JvdXBzKSB7XG4gICAgZm9yIChjb25zdCBbc291cmNlLCBkZXN0aW5hdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXAucmVzb3VyY2VzKSkge1xuICAgICAgaWYgKCFpblVzZShzb3VyY2UsIGdyb3VwLnN0YWNrcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignU291cmNlUmVzb3VyY2VOb3RGb3VuZCcsIGBTb3VyY2UgcmVzb3VyY2UgJyR7c291cmNlfScgZG9lcyBub3QgZXhpc3QgaW4gZW52aXJvbm1lbnQgJHtncm91cC5hY2NvdW50fS8ke2dyb3VwLnJlZ2lvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluVXNlKGRlc3RpbmF0aW9uLCBncm91cC5zdGFja3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICAgJ0Rlc3RpbmF0aW9uUmVzb3VyY2VJblVzZScsXG4gICAgICAgICAgYERlc3RpbmF0aW9uIHJlc291cmNlICcke2Rlc3RpbmF0aW9ufScgYWxyZWFkeSBpbiB1c2UgaW4gZW52aXJvbm1lbnQgJHtncm91cC5hY2NvdW50fS8ke2dyb3VwLnJlZ2lvbn1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50T2YoZ3JvdXApO1xuICAgICAgY29uc3Qgc3JjID0gbWFrZUxvY2F0aW9uKHNvdXJjZSwgZW52aXJvbm1lbnQsIGdyb3VwLnN0YWNrcyk7XG4gICAgICBjb25zdCBkc3QgPSBtYWtlTG9jYXRpb24oZGVzdGluYXRpb24sIGVudmlyb25tZW50KTtcbiAgICAgIHJlc3VsdC5wdXNoKG5ldyBSZXNvdXJjZU1hcHBpbmcoc3JjLCBkc3QpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcblxuICBmdW5jdGlvbiBpblVzZShsb2NhdGlvbjogc3RyaW5nLCBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtzdGFja05hbWUsIGxvZ2ljYWxJZF0gPSBsb2NhdGlvbi5zcGxpdCgnLicpO1xuICAgIGlmIChzdGFja05hbWUgPT0gbnVsbCB8fCBsb2dpY2FsSWQgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcignSW52YWxpZFJlc291cmNlTG9jYXRpb24nLCBgSW52YWxpZCBsb2NhdGlvbiAnJHtsb2NhdGlvbn0nYCk7XG4gICAgfVxuICAgIGNvbnN0IHN0YWNrID0gc3RhY2tzLmZpbmQoKHMpID0+IHMuc3RhY2tOYW1lID09PSBzdGFja05hbWUpO1xuICAgIHJldHVybiBzdGFjayAhPSBudWxsICYmIHN0YWNrLnRlbXBsYXRlLlJlc291cmNlcz8uW2xvZ2ljYWxJZF0gIT0gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVudmlyb25tZW50T2YoZ3JvdXA6IE1hcHBpbmdHcm91cCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50OiBncm91cC5hY2NvdW50LFxuICAgICAgcmVnaW9uOiBncm91cC5yZWdpb24sXG4gICAgICBuYW1lOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZUxvY2F0aW9uKFxuICAgIGxvYzogc3RyaW5nLFxuICAgIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbiAgICBzdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSA9IFtdLFxuICApOiBSZXNvdXJjZUxvY2F0aW9uIHtcbiAgICBjb25zdCBbc3RhY2tOYW1lLCBsb2dpY2FsSWRdID0gbG9jLnNwbGl0KCcuJyk7XG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZmluZCgocykgPT4gcy5zdGFja05hbWUgPT09IHN0YWNrTmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IFJlc291cmNlTG9jYXRpb24oXG4gICAgICB7XG4gICAgICAgIHN0YWNrTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIHRlbXBsYXRlOiBzdGFjaz8udGVtcGxhdGUgPz8ge30sXG4gICAgICB9LFxuICAgICAgbG9naWNhbElkLFxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlcGxveWVkU3RhY2tzQnlOYW1lcyhcbiAgc2RrUHJvdmlkZXI6IFNka1Byb3ZpZGVyLFxuICBlbnZpcm9ubWVudDogY3hhcGkuRW52aXJvbm1lbnQsXG4gIHN0YWNrTmFtZXM6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvblN0YWNrW10+IHtcbiAgY29uc3QgY2ZuID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KGVudmlyb25tZW50LCBNb2RlLkZvclJlYWRpbmcpKS5zZGsuY2xvdWRGb3JtYXRpb24oKTtcblxuICBjb25zdCBub3JtYWxpemUgPSBhc3luYyAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZUNvbW1hbmRPdXRwdXQgPSBhd2FpdCBjZm4uZ2V0VGVtcGxhdGUoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IGRlc2VyaWFsaXplU3RydWN0dXJlKHRlbXBsYXRlQ29tbWFuZE91dHB1dC5UZW1wbGF0ZUJvZHkgPz8gJ3t9Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudmlyb25tZW50LFxuICAgICAgc3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICB0ZW1wbGF0ZSxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IGxpbWl0ID0gcExpbWl0KDIwKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgcmV0dXJuIFByb21pc2UuYWxsKHN0YWNrTmFtZXMubWFwKHMgPT4gbGltaXQoKCkgPT4gbm9ybWFsaXplKHMpKSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0U3RhY2tzKFxuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXIsXG4gIGVudmlyb25tZW50OiBjeGFwaS5FbnZpcm9ubWVudCxcbik6IFByb21pc2U8U3RhY2tTdW1tYXJ5W10+IHtcbiAgY29uc3QgY2ZuID0gKGF3YWl0IHNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50KGVudmlyb25tZW50LCBNb2RlLkZvclJlYWRpbmcpKS5zZGsuY2xvdWRGb3JtYXRpb24oKTtcblxuICByZXR1cm4gY2ZuLnBhZ2luYXRlZExpc3RTdGFja3Moe1xuICAgIFN0YWNrU3RhdHVzRmlsdGVyOiBbXG4gICAgICAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICdVUERBVEVfQ09NUExFVEUnLFxuICAgICAgJ1VQREFURV9ST0xMQkFDS19DT01QTEVURScsXG4gICAgICAnSU1QT1JUX0NPTVBMRVRFJyxcbiAgICAgICdST0xMQkFDS19DT01QTEVURScsXG4gICAgXSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbnZpcm9ubWVudFNlY3Rpb25IZWFkZXIoZW52aXJvbm1lbnQ6IGN4YXBpLkVudmlyb25tZW50KSB7XG4gIGNvbnN0IGVudiA9IGBhd3M6Ly8ke2Vudmlyb25tZW50LmFjY291bnR9LyR7ZW52aXJvbm1lbnQucmVnaW9ufWA7XG4gIHJldHVybiBmb3JtYXRUb1N0cmVhbShzdHJlYW0gPT4gZm10RW52aXJvbm1lbnRTZWN0aW9uSGVhZGVyKHN0cmVhbSwgZW52KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUeXBlZE1hcHBpbmdzKG1hcHBpbmdzOiBUeXBlZE1hcHBpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBmb3JtYXRUb1N0cmVhbSgoc3RyZWFtKSA9PiBmbXRUeXBlZE1hcHBpbmdzKHN0cmVhbSwgbWFwcGluZ3MpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFtYmlndW91c01hcHBpbmdzKHBhdGhzOiBbc3RyaW5nW10sIHN0cmluZ1tdXVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZvcm1hdFRvU3RyZWFtKChzdHJlYW0pID0+IGZtdEFtYmlndW91c01hcHBpbmdzKHN0cmVhbSwgcGF0aHMpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VG9TdHJlYW0oY2I6IChzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkgPT4gdm9pZCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJpbmdXcml0ZVN0cmVhbSgpO1xuICBjYihzdHJlYW0pO1xuICByZXR1cm4gc3RyZWFtLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2Ygc3RhY2sgZ3JvdXBzLCBlYWNoIGNvbnRhaW5pbmcgdGhlIGxvY2FsIHN0YWNrcyBhbmQgdGhlIGRlcGxveWVkIHN0YWNrcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyb3VwU3RhY2tzKHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlciwgbG9jYWxTdGFja3M6IENsb3VkRm9ybWF0aW9uU3RhY2tbXSwgYWRkaXRpb25hbFN0YWNrTmFtZXM6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGVudmlyb25tZW50czogTWFwPHN0cmluZywgY3hhcGkuRW52aXJvbm1lbnQ+ID0gbmV3IE1hcCgpO1xuXG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgbG9jYWxTdGFja3MpIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGF3YWl0IHNka1Byb3ZpZGVyLnJlc29sdmVFbnZpcm9ubWVudChzdGFjay5lbnZpcm9ubWVudCk7XG4gICAgY29uc3Qga2V5ID0gaGFzaE9iamVjdChlbnZpcm9ubWVudCk7XG4gICAgZW52aXJvbm1lbnRzLnNldChrZXksIGVudmlyb25tZW50KTtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsQnlFbnZpcm9ubWVudCA9IGF3YWl0IGluZGV4QnkobG9jYWxTdGFja3MsXG4gICAgYXN5bmMgKHMpID0+IGhhc2hPYmplY3QoYXdhaXQgc2RrUHJvdmlkZXIucmVzb2x2ZUVudmlyb25tZW50KHMuZW52aXJvbm1lbnQpKSxcbiAgKTtcblxuICBjb25zdCBncm91cHM6IFN0YWNrR3JvdXBbXSA9IFtdO1xuICBmb3IgKGxldCBrZXkgb2YgbG9jYWxCeUVudmlyb25tZW50LmtleXMoKSkge1xuICAgIGNvbnN0IGxvY2FsID0gbG9jYWxCeUVudmlyb25tZW50LmdldChrZXkpITtcbiAgICBjb25zdCBoYXNMb2NhbENvdW50ZXJwYXJ0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiBsb2NhbC5zb21lKChsKSA9PiBsLnN0YWNrTmFtZSA9PT0gc3RhY2tOYW1lKTtcbiAgICBjb25zdCB3YXNFeHBsaWNpdGx5UHJvdmlkZWQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IGFkZGl0aW9uYWxTdGFja05hbWVzLmluY2x1ZGVzKHN0YWNrTmFtZSk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50cy5nZXQoa2V5KSE7XG4gICAgY29uc3Qgc3RhY2tTdW1tYXJpZXMgPSBhd2FpdCBsaXN0U3RhY2tzKHNka1Byb3ZpZGVyLCBlbnZpcm9ubWVudCk7XG4gICAgY29uc3Qgc3RhY2tOYW1lcyA9IHN0YWNrU3VtbWFyaWVzXG4gICAgICAubWFwKHMgPT4gcy5TdGFja05hbWUhKVxuICAgICAgLmZpbHRlcihzID0+IGhhc0xvY2FsQ291bnRlcnBhcnQocykgfHwgd2FzRXhwbGljaXRseVByb3ZpZGVkKHMpKTtcbiAgICBjb25zdCBkZXBsb3llZFN0YWNrcyA9IGF3YWl0IGdldERlcGxveWVkU3RhY2tzQnlOYW1lcyhzZGtQcm92aWRlciwgZW52aXJvbm1lbnQsIHN0YWNrTmFtZXMpO1xuXG4gICAgZ3JvdXBzLnB1c2goe1xuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBkZXBsb3llZFN0YWNrcyxcbiAgICAgIGxvY2FsU3RhY2tzOiBsb2NhbCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBncm91cHM7XG59XG4iXX0=
@@ -84,7 +84,7 @@ async function generateStackDefinitions(mappings, deployedStacks, localStacks, e
84
84
  await ioHelper.defaults.error(util.format(`The template for stack "${largeStack.stackName}" is ${templateSize}KiB. ` +
85
85
  `Templates larger than ${LARGE_TEMPLATE_SIZE_KB}KiB must be uploaded to S3.\n` +
86
86
  'Run the following command in order to setup an S3 bucket in this environment, and then re-refactor:\n\n', chalk.blue(`\t$ cdk bootstrap ${environment.name}\n`)));
87
- throw new toolkit_error_1.ToolkitError('Template too large to refactor ("cdk bootstrap" is required)');
87
+ throw new toolkit_error_1.ToolkitError('TemplateTooLargeToRefactor', 'Template too large to refactor ("cdk bootstrap" is required)');
88
88
  }
89
89
  const stackDefinitions = [];
90
90
  for (const stack of stacksToProcess) {
@@ -117,4 +117,4 @@ async function generateStackDefinitions(mappings, deployedStacks, localStacks, e
117
117
  }
118
118
  return stackDefinitions;
119
119
  }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay1kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSw0REE0SUM7QUE5SkQsa0NBQWtDO0FBR2xDLCtCQUErQjtBQUUvQiwrREFBMkQ7QUFDM0QscUNBQXlDO0FBRXpDLGdEQUE4RDtBQUU5RCxzQ0FBaUM7QUFDakMseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3QyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLHlCQUF5QixHQUFHLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUV6RCxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLFFBQTJCLEVBQzNCLGNBQXFDLEVBQ3JDLFdBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLFdBQXdCLEVBQ3hCLFFBQWtCO0lBRWxCLE1BQU0sZ0JBQWdCLEdBQXFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEgsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUMxQyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsRUFBRSxRQUFRLENBQUM7UUFFakQsaUZBQWlGO1FBQ2pGLDBGQUEwRjtRQUMxRixxRkFBcUY7UUFDckYsbUJBQW1CO1FBQ25CLElBQUksZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFdBQVcs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LENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBTdGFja0RlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvblN0YWNrLCBSZXNvdXJjZU1hcHBpbmcgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBjb250ZW50SGFzaCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL3BsdWdpbic7XG4vLyBuYW1lc3BhY2Ugb2JqZWN0IGltcG9ydHMgd29uJ3Qgd29yayBpbiB0aGUgYnVuZGxlIGZvciBmdW5jdGlvbiBleHBvcnRzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZSgnZmFzdC1kZWVwLWVxdWFsJyk7XG5cbmNvbnN0IExBUkdFX1RFTVBMQVRFX1NJWkVfS0IgPSA1MDtcbmNvbnN0IExBUkdFX1RFTVBMQVRFX1NJWkVfQllURVMgPSBMQVJHRV9URU1QTEFURV9TSVpFX0tCICogMTAyNDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU3RhY2tEZWZpbml0aW9ucyhcbiAgbWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ1tdLFxuICBkZXBsb3llZFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBsb2NhbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuKTogUHJvbWlzZTxTdGFja0RlZmluaXRpb25bXT4ge1xuICBjb25zdCBkZXBsb3llZFN0YWNrTWFwOiBNYXA8c3RyaW5nLCBDbG91ZEZvcm1hdGlvblN0YWNrPiA9IG5ldyBNYXAoZGVwbG95ZWRTdGFja3MubWFwKChzKSA9PiBbcy5zdGFja05hbWUsIHNdKSk7XG5cbiAgLy8gRm9yIGV2ZXJ5IGxvY2FsIHN0YWNrIHRoYXQgaXMgYWxzbyBkZXBsb3llZCwgdXBkYXRlIHRoZSBsb2NhbCB0ZW1wbGF0ZSxcbiAgLy8gb3ZlcndyaXRpbmcgaXRzIENES01ldGFkYXRhIHJlc291cmNlIHdpdGggdGhlIG9uZSBmcm9tIHRoZSBkZXBsb3llZCBzdGFja1xuICBmb3IgKGNvbnN0IGxvY2FsU3RhY2sgb2YgbG9jYWxTdGFja3MpIHtcbiAgICBjb25zdCBkZXBsb3llZFN0YWNrID0gZGVwbG95ZWRTdGFja01hcC5nZXQobG9jYWxTdGFjay5zdGFja05hbWUpO1xuICAgIGNvbnN0IGxvY2FsVGVtcGxhdGUgPSBsb2NhbFN0YWNrLnRlbXBsYXRlO1xuICAgIGNvbnN0IGRlcGxveWVkVGVtcGxhdGUgPSBkZXBsb3llZFN0YWNrPy50ZW1wbGF0ZTtcblxuICAgIC8vIFRoZSBDREtNZXRhZGF0YSByZXNvdXJjZSBpcyBuZXZlciBwYXJ0IG9mIGEgcmVmYWN0b3IuIFNvIGF0IHRoaXMgcG9pbnQgd2UgbmVlZFxuICAgIC8vIHRvIGFkanVzdCB0aGUgdGVtcGxhdGUgd2Ugd2lsbCBzZW5kIHRvIHRoZSBBUEkgdG8gbWFrZSBzdXJlIGl0IGhhcyB0aGUgc2FtZSBDREtNZXRhZGF0YVxuICAgIC8vIGFzIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZS4gQW5kIGlmIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZSBkb2Vzbid0IGhhdmUgYW55LCB3ZSBjYW5ub3RcbiAgICAvLyBzZW5kIGFueSBlaXRoZXIuXG4gICAgaWYgKGRlcGxveWVkVGVtcGxhdGU/LlJlc291cmNlcz8uQ0RLTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgICAgbG9jYWxUZW1wbGF0ZS5SZXNvdXJjZXMgPSBsb2NhbFRlbXBsYXRlLlJlc291cmNlcyA/PyB7fTtcbiAgICAgIGxvY2FsVGVtcGxhdGUuUmVzb3VyY2VzLkNES01ldGFkYXRhID0gZGVwbG95ZWRUZW1wbGF0ZS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBsb2NhbFRlbXBsYXRlLlJlc291cmNlcz8uQ0RLTWV0YWRhdGE7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RhY2tzVG9Qcm9jZXNzID0gbG9jYWxTdGFja3MuZmlsdGVyKChsb2NhbFN0YWNrKSA9PiB7XG4gICAgY29uc3QgZGVwbG95ZWRTdGFjayA9IGRlcGxveWVkU3RhY2tNYXAuZ2V0KGxvY2FsU3RhY2suc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gIWRlcGxveWVkU3RhY2sgfHwgIWRlZXBFcXVhbChsb2NhbFN0YWNrLnRlbXBsYXRlLCBkZXBsb3llZFN0YWNrLnRlbXBsYXRlKTtcbiAgfSk7XG5cbiAgLy8gTm93LCBmb3IgZXZlcnkgc3RhY2sgbmFtZSB0aGF0IGFwcGVhcnMgaW4gdGhlIG1hcHBpbmdzLCBidXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGxvY2FsIHN0YWNrcyxcbiAgLy8gd2UgbmVlZCB0byB0YWtlIGl0cyAoZGVwbG95ZWQpIHRlbXBsYXRlIGFuZCByZW1vdmUgYWxsIHRoZSByZXNvdXJjZXMgdGhhdCBhcHBlYXIgaW4gdGhlIHNvdXJjZXNcbiAgLy8gcGFydCBvZiB0aGUgbWFwcGluZ3MuIEZvciBleGFtcGxlLCBpZiB0aGUgbWFwcGluZ3MgY29udGFpbnMgYW4gZW50cnkgbGlrZTpcbiAgLy8gIC0gU3RhY2tCLkZvbyAtPiBTdGFja0EuQmFyXG4gIC8vIGFuZCBTdGFja0IgZG9lcyBub3QgZXhpc3QgbG9jYWxseSwgd2UgbmVlZCB0byB0YWtlIFN0YWNrQidzIHRlbXBsYXRlLCBhbmQgcmVtb3ZlIHRoZSByZXNvdXJjZSBGb28sXG4gIC8vIGFuZCBpbmNsdWRlIHRoaXMgbW9kaWZpZWQgdGVtcGxhdGUgZm9yIFN0YWNrQiBpbiB0aGUgc3RhY2sgZGVmaW5pdGlvbnMuXG4gIGZvciAobGV0IG1hcHBpbmcgb2YgbWFwcGluZ3MpIHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBtYXBwaW5nLnNvdXJjZS5zdGFja05hbWU7XG4gICAgaWYgKCFsb2NhbFN0YWNrcy5zb21lKHMgPT4gcy5zdGFja05hbWUgPT09IHN0YWNrTmFtZSkpIHtcbiAgICAgIGNvbnN0IGRlcGxveWVkU3RhY2sgPSBkZXBsb3llZFN0YWNrTWFwLmdldChzdGFja05hbWUpO1xuICAgICAgZGVsZXRlIGRlcGxveWVkU3RhY2s/LnRlbXBsYXRlLlJlc291cmNlcz8uW21hcHBpbmcuc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkXTtcblxuICAgICAgZGVsZXRlIGRlcGxveWVkU3RhY2s/LnRlbXBsYXRlLk91dHB1dHM7XG5cbiAgICAgIGlmIChkZXBsb3llZFN0YWNrICYmICFzdGFja3NUb1Byb2Nlc3Muc29tZShzID0+IHMuc3RhY2tOYW1lID09PSBzdGFja05hbWUpKSB7XG4gICAgICAgIHN0YWNrc1RvUHJvY2Vzcy5wdXNoKGRlcGxveWVkU3RhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBzdGFja3MgY3JlYXRlZCBieSB0aGUgcmVmYWN0b3IsIENsb3VkRm9ybWF0aW9uIGRvZXMgbm90IGFsbG93IFJ1bGVzIG9yIFBhcmFtZXRlcnNcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3NUb1Byb2Nlc3MpIHtcbiAgICBpZiAoIWRlcGxveWVkU3RhY2tzLnNvbWUoZGVwbG95ZWQgPT4gZGVwbG95ZWQuc3RhY2tOYW1lID09PSBzdGFjay5zdGFja05hbWUpKSB7XG4gICAgICBpZiAoJ1J1bGVzJyBpbiBzdGFjay50ZW1wbGF0ZSkge1xuICAgICAgICBkZWxldGUgc3RhY2sudGVtcGxhdGUuUnVsZXM7XG4gICAgICB9XG4gICAgICBpZiAoJ1BhcmFtZXRlcnMnIGluIHN0YWNrLnRlbXBsYXRlKSB7XG4gICAgICAgIGRlbGV0ZSBzdGFjay50ZW1wbGF0ZS5QYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFueSB0ZW1wbGF0ZXMgYXJlIGxhcmdlIGVub3VnaCB0byByZXF1aXJlIFMzIHVwbG9hZFxuICBjb25zdCBoYXNMYXJnZVRlbXBsYXRlcyA9IHN0YWNrc1RvUHJvY2Vzcy5zb21lKFxuICAgIHN0YWNrID0+IEpTT04uc3RyaW5naWZ5KHN0YWNrLnRlbXBsYXRlKS5sZW5ndGggPiBMQVJHRV9URU1QTEFURV9TSVpFX0JZVEVTLFxuICApO1xuXG4gIC8vIElmIG5vIGxhcmdlIHRlbXBsYXRlcywgdXNlIFRlbXBsYXRlQm9keSBmb3IgYWxsXG4gIGlmICghaGFzTGFyZ2VUZW1wbGF0ZXMpIHtcbiAgICByZXR1cm4gc3RhY2tzVG9Qcm9jZXNzLm1hcChzdGFjayA9PiAoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFjay5zdGFja05hbWUsXG4gICAgICBUZW1wbGF0ZUJvZHk6IEpTT04uc3RyaW5naWZ5KHN0YWNrLnRlbXBsYXRlKSxcbiAgICB9KSk7XG4gIH1cblxuICBjb25zdCBzZGsgPSAoYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIE1vZGUuRm9yV3JpdGluZykpLnNkaztcbiAgY29uc3QgZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSA9IG5ldyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5KCk7XG4gIGNvbnN0IGVudlJlc291cmNlcyA9IGVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkuZm9yKGVudmlyb25tZW50LCBzZGssIGlvSGVscGVyKTtcbiAgY29uc3QgdG9vbGtpdEluZm8gPSBhd2FpdCBlbnZSZXNvdXJjZXMubG9va3VwVG9vbGtpdCgpO1xuXG4gIGlmICghdG9vbGtpdEluZm8uZm91bmQpIHtcbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBsYXJnZSB0ZW1wbGF0ZSB0byBpbmNsdWRlIGluIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgY29uc3QgbGFyZ2VTdGFjayA9IHN0YWNrc1RvUHJvY2Vzcy5maW5kKFxuICAgICAgc3RhY2sgPT4gSlNPTi5zdHJpbmdpZnkoc3RhY2sudGVtcGxhdGUpLmxlbmd0aCA+IExBUkdFX1RFTVBMQVRFX1NJWkVfQllURVMsXG4gICAgKSE7IC8vIE11c3QgZXhpc3Qgc2luY2UgaGFzTGFyZ2VUZW1wbGF0ZXMgaXMgdHJ1ZVxuXG4gICAgY29uc3QgdGVtcGxhdGVTaXplID0gTWF0aC5yb3VuZChKU09OLnN0cmluZ2lmeShsYXJnZVN0YWNrLnRlbXBsYXRlKS5sZW5ndGggLyAxMDI0KTtcblxuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmVycm9yKFxuICAgICAgdXRpbC5mb3JtYXQoXG4gICAgICAgIGBUaGUgdGVtcGxhdGUgZm9yIHN0YWNrIFwiJHtsYXJnZVN0YWNrLnN0YWNrTmFtZX1cIiBpcyAke3RlbXBsYXRlU2l6ZX1LaUIuIGAgK1xuICAgICAgICBgVGVtcGxhdGVzIGxhcmdlciB0aGFuICR7TEFSR0VfVEVNUExBVEVfU0laRV9LQn1LaUIgbXVzdCBiZSB1cGxvYWRlZCB0byBTMy5cXG5gICtcbiAgICAgICAgJ1J1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gb3JkZXIgdG8gc2V0dXAgYW4gUzMgYnVja2V0IGluIHRoaXMgZW52aXJvbm1lbnQsIGFuZCB0aGVuIHJlLXJlZmFjdG9yOlxcblxcbicsXG4gICAgICAgIGNoYWxrLmJsdWUoYFxcdCQgY2RrIGJvb3RzdHJhcCAke2Vudmlyb25tZW50Lm5hbWV9XFxuYCksXG4gICAgICApLFxuICAgICk7XG5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdUZW1wbGF0ZSB0b28gbGFyZ2UgdG8gcmVmYWN0b3IgKFwiY2RrIGJvb3RzdHJhcFwiIGlzIHJlcXVpcmVkKScpO1xuICB9XG5cbiAgY29uc3Qgc3RhY2tEZWZpbml0aW9uczogU3RhY2tEZWZpbml0aW9uW10gPSBbXTtcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3NUb1Byb2Nlc3MpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUpzb24gPSBKU09OLnN0cmluZ2lmeShzdGFjay50ZW1wbGF0ZSk7XG5cbiAgICAvLyBJZiB0ZW1wbGF0ZSBpcyBzbWFsbCBlbm91Z2gsIHVzZSBUZW1wbGF0ZUJvZHlcbiAgICBpZiAodGVtcGxhdGVKc29uLmxlbmd0aCA8PSBMQVJHRV9URU1QTEFURV9TSVpFX0JZVEVTKSB7XG4gICAgICBzdGFja0RlZmluaXRpb25zLnB1c2goe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgVGVtcGxhdGVCb2R5OiB0ZW1wbGF0ZUpzb24sXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFRlbXBsYXRlIGlzIHRvbyBsYXJnZSwgdXBsb2FkIHRvIFMzXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUga2V5IGZvciB0aGlzIHRlbXBsYXRlXG4gICAgY29uc3QgdGVtcGxhdGVIYXNoID0gY29udGVudEhhc2godGVtcGxhdGVKc29uKTtcbiAgICBjb25zdCBrZXkgPSBgY2RrLXJlZmFjdG9yLyR7c3RhY2suc3RhY2tOYW1lfS8ke3RlbXBsYXRlSGFzaH0uanNvbmA7XG5cbiAgICBjb25zdCBzMyA9IHNkay5zMygpO1xuICAgIGF3YWl0IHMzLnVwbG9hZCh7XG4gICAgICBCdWNrZXQ6IHRvb2xraXRJbmZvLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IGtleSxcbiAgICAgIEJvZHk6IHRlbXBsYXRlSnNvbixcbiAgICAgIENvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZVVSTCA9IGAke3Rvb2xraXRJbmZvLmJ1Y2tldFVybH0vJHtrZXl9YDtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgU3RvcmluZyB0ZW1wbGF0ZSBmb3Igc3RhY2sgJHtzdGFjay5zdGFja05hbWV9IGluIFMzIGF0OiAke3RlbXBsYXRlVVJMfWApO1xuXG4gICAgc3RhY2tEZWZpbml0aW9ucy5wdXNoKHtcbiAgICAgIFN0YWNrTmFtZTogc3RhY2suc3RhY2tOYW1lLFxuICAgICAgVGVtcGxhdGVVUkw6IHRlbXBsYXRlVVJMLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrRGVmaW5pdGlvbnM7XG59XG4iXX0=
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGFjay1kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSw0REE0SUM7QUE5SkQsa0NBQWtDO0FBR2xDLCtCQUErQjtBQUUvQiwrREFBMkQ7QUFDM0QscUNBQXlDO0FBRXpDLGdEQUE4RDtBQUU5RCxzQ0FBaUM7QUFDakMseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUU3QyxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLHlCQUF5QixHQUFHLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUV6RCxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLFFBQTJCLEVBQzNCLGNBQXFDLEVBQ3JDLFdBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLFdBQXdCLEVBQ3hCLFFBQWtCO0lBRWxCLE1BQU0sZ0JBQWdCLEdBQXFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEgsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUMxQyxNQUFNLGdCQUFnQixHQUFHLGFBQWEsRUFBRSxRQUFRLENBQUM7UUFFakQsaUZBQWlGO1FBQ2pGLDBGQUEwRjtRQUMxRixxRkFBcUY7UUFDckYsbUJBQW1CO1FBQ25CLElBQUksZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFdBQVcs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LE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0aWwgZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBTdGFja0RlZmluaXRpb24gfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvblN0YWNrLCBSZXNvdXJjZU1hcHBpbmcgfSBmcm9tICcuL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFRvb2xraXRFcnJvciB9IGZyb20gJy4uLy4uL3Rvb2xraXQvdG9vbGtpdC1lcnJvcic7XG5pbXBvcnQgeyBjb250ZW50SGFzaCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoL3Nkay1wcm92aWRlcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgTW9kZSB9IGZyb20gJy4uL3BsdWdpbic7XG4vLyBuYW1lc3BhY2Ugb2JqZWN0IGltcG9ydHMgd29uJ3Qgd29yayBpbiB0aGUgYnVuZGxlIGZvciBmdW5jdGlvbiBleHBvcnRzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZSgnZmFzdC1kZWVwLWVxdWFsJyk7XG5cbmNvbnN0IExBUkdFX1RFTVBMQVRFX1NJWkVfS0IgPSA1MDtcbmNvbnN0IExBUkdFX1RFTVBMQVRFX1NJWkVfQllURVMgPSBMQVJHRV9URU1QTEFURV9TSVpFX0tCICogMTAyNDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlU3RhY2tEZWZpbml0aW9ucyhcbiAgbWFwcGluZ3M6IFJlc291cmNlTWFwcGluZ1tdLFxuICBkZXBsb3llZFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBsb2NhbFN0YWNrczogQ2xvdWRGb3JtYXRpb25TdGFja1tdLFxuICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbiAgaW9IZWxwZXI6IElvSGVscGVyLFxuKTogUHJvbWlzZTxTdGFja0RlZmluaXRpb25bXT4ge1xuICBjb25zdCBkZXBsb3llZFN0YWNrTWFwOiBNYXA8c3RyaW5nLCBDbG91ZEZvcm1hdGlvblN0YWNrPiA9IG5ldyBNYXAoZGVwbG95ZWRTdGFja3MubWFwKChzKSA9PiBbcy5zdGFja05hbWUsIHNdKSk7XG5cbiAgLy8gRm9yIGV2ZXJ5IGxvY2FsIHN0YWNrIHRoYXQgaXMgYWxzbyBkZXBsb3llZCwgdXBkYXRlIHRoZSBsb2NhbCB0ZW1wbGF0ZSxcbiAgLy8gb3ZlcndyaXRpbmcgaXRzIENES01ldGFkYXRhIHJlc291cmNlIHdpdGggdGhlIG9uZSBmcm9tIHRoZSBkZXBsb3llZCBzdGFja1xuICBmb3IgKGNvbnN0IGxvY2FsU3RhY2sgb2YgbG9jYWxTdGFja3MpIHtcbiAgICBjb25zdCBkZXBsb3llZFN0YWNrID0gZGVwbG95ZWRTdGFja01hcC5nZXQobG9jYWxTdGFjay5zdGFja05hbWUpO1xuICAgIGNvbnN0IGxvY2FsVGVtcGxhdGUgPSBsb2NhbFN0YWNrLnRlbXBsYXRlO1xuICAgIGNvbnN0IGRlcGxveWVkVGVtcGxhdGUgPSBkZXBsb3llZFN0YWNrPy50ZW1wbGF0ZTtcblxuICAgIC8vIFRoZSBDREtNZXRhZGF0YSByZXNvdXJjZSBpcyBuZXZlciBwYXJ0IG9mIGEgcmVmYWN0b3IuIFNvIGF0IHRoaXMgcG9pbnQgd2UgbmVlZFxuICAgIC8vIHRvIGFkanVzdCB0aGUgdGVtcGxhdGUgd2Ugd2lsbCBzZW5kIHRvIHRoZSBBUEkgdG8gbWFrZSBzdXJlIGl0IGhhcyB0aGUgc2FtZSBDREtNZXRhZGF0YVxuICAgIC8vIGFzIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZS4gQW5kIGlmIHRoZSBkZXBsb3llZCB0ZW1wbGF0ZSBkb2Vzbid0IGhhdmUgYW55LCB3ZSBjYW5ub3RcbiAgICAvLyBzZW5kIGFueSBlaXRoZXIuXG4gICAgaWYgKGRlcGxveWVkVGVtcGxhdGU/LlJlc291cmNlcz8uQ0RLTWV0YWRhdGEgIT0gbnVsbCkge1xuICAgICAgbG9jYWxUZW1wbGF0ZS5SZXNvdXJjZXMgPSBsb2NhbFRlbXBsYXRlLlJlc291cmNlcyA/PyB7fTtcbiAgICAgIGxvY2FsVGVtcGxhdGUuUmVzb3VyY2VzLkNES01ldGFkYXRhID0gZGVwbG95ZWRUZW1wbGF0ZS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBsb2NhbFRlbXBsYXRlLlJlc291cmNlcz8uQ0RLTWV0YWRhdGE7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RhY2tzVG9Qcm9jZXNzID0gbG9jYWxTdGFja3MuZmlsdGVyKChsb2NhbFN0YWNrKSA9PiB7XG4gICAgY29uc3QgZGVwbG95ZWRTdGFjayA9IGRlcGxveWVkU3RhY2tNYXAuZ2V0KGxvY2FsU3RhY2suc3RhY2tOYW1lKTtcbiAgICByZXR1cm4gIWRlcGxveWVkU3RhY2sgfHwgIWRlZXBFcXVhbChsb2NhbFN0YWNrLnRlbXBsYXRlLCBkZXBsb3llZFN0YWNrLnRlbXBsYXRlKTtcbiAgfSk7XG5cbiAgLy8gTm93LCBmb3IgZXZlcnkgc3RhY2sgbmFtZSB0aGF0IGFwcGVhcnMgaW4gdGhlIG1hcHBpbmdzLCBidXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGxvY2FsIHN0YWNrcyxcbiAgLy8gd2UgbmVlZCB0byB0YWtlIGl0cyAoZGVwbG95ZWQpIHRlbXBsYXRlIGFuZCByZW1vdmUgYWxsIHRoZSByZXNvdXJjZXMgdGhhdCBhcHBlYXIgaW4gdGhlIHNvdXJjZXNcbiAgLy8gcGFydCBvZiB0aGUgbWFwcGluZ3MuIEZvciBleGFtcGxlLCBpZiB0aGUgbWFwcGluZ3MgY29udGFpbnMgYW4gZW50cnkgbGlrZTpcbiAgLy8gIC0gU3RhY2tCLkZvbyAtPiBTdGFja0EuQmFyXG4gIC8vIGFuZCBTdGFja0IgZG9lcyBub3QgZXhpc3QgbG9jYWxseSwgd2UgbmVlZCB0byB0YWtlIFN0YWNrQidzIHRlbXBsYXRlLCBhbmQgcmVtb3ZlIHRoZSByZXNvdXJjZSBGb28sXG4gIC8vIGFuZCBpbmNsdWRlIHRoaXMgbW9kaWZpZWQgdGVtcGxhdGUgZm9yIFN0YWNrQiBpbiB0aGUgc3RhY2sgZGVmaW5pdGlvbnMuXG4gIGZvciAobGV0IG1hcHBpbmcgb2YgbWFwcGluZ3MpIHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBtYXBwaW5nLnNvdXJjZS5zdGFja05hbWU7XG4gICAgaWYgKCFsb2NhbFN0YWNrcy5zb21lKHMgPT4gcy5zdGFja05hbWUgPT09IHN0YWNrTmFtZSkpIHtcbiAgICAgIGNvbnN0IGRlcGxveWVkU3RhY2sgPSBkZXBsb3llZFN0YWNrTWFwLmdldChzdGFja05hbWUpO1xuICAgICAgZGVsZXRlIGRlcGxveWVkU3RhY2s/LnRlbXBsYXRlLlJlc291cmNlcz8uW21hcHBpbmcuc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkXTtcblxuICAgICAgZGVsZXRlIGRlcGxveWVkU3RhY2s/LnRlbXBsYXRlLk91dHB1dHM7XG5cbiAgICAgIGlmIChkZXBsb3llZFN0YWNrICYmICFzdGFja3NUb1Byb2Nlc3Muc29tZShzID0+IHMuc3RhY2tOYW1lID09PSBzdGFja05hbWUpKSB7XG4gICAgICAgIHN0YWNrc1RvUHJvY2Vzcy5wdXNoKGRlcGxveWVkU3RhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBzdGFja3MgY3JlYXRlZCBieSB0aGUgcmVmYWN0b3IsIENsb3VkRm9ybWF0aW9uIGRvZXMgbm90IGFsbG93IFJ1bGVzIG9yIFBhcmFtZXRlcnNcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3NUb1Byb2Nlc3MpIHtcbiAgICBpZiAoIWRlcGxveWVkU3RhY2tzLnNvbWUoZGVwbG95ZWQgPT4gZGVwbG95ZWQuc3RhY2tOYW1lID09PSBzdGFjay5zdGFja05hbWUpKSB7XG4gICAgICBpZiAoJ1J1bGVzJyBpbiBzdGFjay50ZW1wbGF0ZSkge1xuICAgICAgICBkZWxldGUgc3RhY2sudGVtcGxhdGUuUnVsZXM7XG4gICAgICB9XG4gICAgICBpZiAoJ1BhcmFtZXRlcnMnIGluIHN0YWNrLnRlbXBsYXRlKSB7XG4gICAgICAgIGRlbGV0ZSBzdGFjay50ZW1wbGF0ZS5QYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFueSB0ZW1wbGF0ZXMgYXJlIGxhcmdlIGVub3VnaCB0byByZXF1aXJlIFMzIHVwbG9hZFxuICBjb25zdCBoYXNMYXJnZVRlbXBsYXRlcyA9IHN0YWNrc1RvUHJvY2Vzcy5zb21lKFxuICAgIHN0YWNrID0+IEpTT04uc3RyaW5naWZ5KHN0YWNrLnRlbXBsYXRlKS5sZW5ndGggPiBMQVJHRV9URU1QTEFURV9TSVpFX0JZVEVTLFxuICApO1xuXG4gIC8vIElmIG5vIGxhcmdlIHRlbXBsYXRlcywgdXNlIFRlbXBsYXRlQm9keSBmb3IgYWxsXG4gIGlmICghaGFzTGFyZ2VUZW1wbGF0ZXMpIHtcbiAgICByZXR1cm4gc3RhY2tzVG9Qcm9jZXNzLm1hcChzdGFjayA9PiAoe1xuICAgICAgU3RhY2tOYW1lOiBzdGFjay5zdGFja05hbWUsXG4gICAgICBUZW1wbGF0ZUJvZHk6IEpTT04uc3RyaW5naWZ5KHN0YWNrLnRlbXBsYXRlKSxcbiAgICB9KSk7XG4gIH1cblxuICBjb25zdCBzZGsgPSAoYXdhaXQgc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIE1vZGUuRm9yV3JpdGluZykpLnNkaztcbiAgY29uc3QgZW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSA9IG5ldyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5KCk7XG4gIGNvbnN0IGVudlJlc291cmNlcyA9IGVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkuZm9yKGVudmlyb25tZW50LCBzZGssIGlvSGVscGVyKTtcbiAgY29uc3QgdG9vbGtpdEluZm8gPSBhd2FpdCBlbnZSZXNvdXJjZXMubG9va3VwVG9vbGtpdCgpO1xuXG4gIGlmICghdG9vbGtpdEluZm8uZm91bmQpIHtcbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBsYXJnZSB0ZW1wbGF0ZSB0byBpbmNsdWRlIGluIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgY29uc3QgbGFyZ2VTdGFjayA9IHN0YWNrc1RvUHJvY2Vzcy5maW5kKFxuICAgICAgc3RhY2sgPT4gSlNPTi5zdHJpbmdpZnkoc3RhY2sudGVtcGxhdGUpLmxlbmd0aCA+IExBUkdFX1RFTVBMQVRFX1NJWkVfQllURVMsXG4gICAgKSE7IC8vIE11c3QgZXhpc3Qgc2luY2UgaGFzTGFyZ2VUZW1wbGF0ZXMgaXMgdHJ1ZVxuXG4gICAgY29uc3QgdGVtcGxhdGVTaXplID0gTWF0aC5yb3VuZChKU09OLnN0cmluZ2lmeShsYXJnZVN0YWNrLnRlbXBsYXRlKS5sZW5ndGggLyAxMDI0KTtcblxuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLmVycm9yKFxuICAgICAgdXRpbC5mb3JtYXQoXG4gICAgICAgIGBUaGUgdGVtcGxhdGUgZm9yIHN0YWNrIFwiJHtsYXJnZVN0YWNrLnN0YWNrTmFtZX1cIiBpcyAke3RlbXBsYXRlU2l6ZX1LaUIuIGAgK1xuICAgICAgICBgVGVtcGxhdGVzIGxhcmdlciB0aGFuICR7TEFSR0VfVEVNUExBVEVfU0laRV9LQn1LaUIgbXVzdCBiZSB1cGxvYWRlZCB0byBTMy5cXG5gICtcbiAgICAgICAgJ1J1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gb3JkZXIgdG8gc2V0dXAgYW4gUzMgYnVja2V0IGluIHRoaXMgZW52aXJvbm1lbnQsIGFuZCB0aGVuIHJlLXJlZmFjdG9yOlxcblxcbicsXG4gICAgICAgIGNoYWxrLmJsdWUoYFxcdCQgY2RrIGJvb3RzdHJhcCAke2Vudmlyb25tZW50Lm5hbWV9XFxuYCksXG4gICAgICApLFxuICAgICk7XG5cbiAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdUZW1wbGF0ZVRvb0xhcmdlVG9SZWZhY3RvcicsICdUZW1wbGF0ZSB0b28gbGFyZ2UgdG8gcmVmYWN0b3IgKFwiY2RrIGJvb3RzdHJhcFwiIGlzIHJlcXVpcmVkKScpO1xuICB9XG5cbiAgY29uc3Qgc3RhY2tEZWZpbml0aW9uczogU3RhY2tEZWZpbml0aW9uW10gPSBbXTtcbiAgZm9yIChjb25zdCBzdGFjayBvZiBzdGFja3NUb1Byb2Nlc3MpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUpzb24gPSBKU09OLnN0cmluZ2lmeShzdGFjay50ZW1wbGF0ZSk7XG5cbiAgICAvLyBJZiB0ZW1wbGF0ZSBpcyBzbWFsbCBlbm91Z2gsIHVzZSBUZW1wbGF0ZUJvZHlcbiAgICBpZiAodGVtcGxhdGVKc29uLmxlbmd0aCA8PSBMQVJHRV9URU1QTEFURV9TSVpFX0JZVEVTKSB7XG4gICAgICBzdGFja0RlZmluaXRpb25zLnB1c2goe1xuICAgICAgICBTdGFja05hbWU6IHN0YWNrLnN0YWNrTmFtZSxcbiAgICAgICAgVGVtcGxhdGVCb2R5OiB0ZW1wbGF0ZUpzb24sXG4gICAgICB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFRlbXBsYXRlIGlzIHRvbyBsYXJnZSwgdXBsb2FkIHRvIFMzXG4gICAgLy8gR2VuZXJhdGUgYSB1bmlxdWUga2V5IGZvciB0aGlzIHRlbXBsYXRlXG4gICAgY29uc3QgdGVtcGxhdGVIYXNoID0gY29udGVudEhhc2godGVtcGxhdGVKc29uKTtcbiAgICBjb25zdCBrZXkgPSBgY2RrLXJlZmFjdG9yLyR7c3RhY2suc3RhY2tOYW1lfS8ke3RlbXBsYXRlSGFzaH0uanNvbmA7XG5cbiAgICBjb25zdCBzMyA9IHNkay5zMygpO1xuICAgIGF3YWl0IHMzLnVwbG9hZCh7XG4gICAgICBCdWNrZXQ6IHRvb2xraXRJbmZvLmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IGtleSxcbiAgICAgIEJvZHk6IHRlbXBsYXRlSnNvbixcbiAgICAgIENvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZVVSTCA9IGAke3Rvb2xraXRJbmZvLmJ1Y2tldFVybH0vJHtrZXl9YDtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy5kZWJ1ZyhgU3RvcmluZyB0ZW1wbGF0ZSBmb3Igc3RhY2sgJHtzdGFjay5zdGFja05hbWV9IGluIFMzIGF0OiAke3RlbXBsYXRlVVJMfWApO1xuXG4gICAgc3RhY2tEZWZpbml0aW9ucy5wdXNoKHtcbiAgICAgIFN0YWNrTmFtZTogc3RhY2suc3RhY2tOYW1lLFxuICAgICAgVGVtcGxhdGVVUkw6IHRlbXBsYXRlVVJMLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHN0YWNrRGVmaW5pdGlvbnM7XG59XG4iXX0=