@dyanet/nestjs-config-aws 1.2.0-beta.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +5 -0
  2. package/dist/cjs/config-aws/src/config-manager.js +8 -8
  3. package/dist/cjs/config-aws/src/index.js +23 -23
  4. package/dist/cjs/config-aws/src/interfaces/config-manager.interface.js +1 -1
  5. package/dist/cjs/config-aws/src/loaders/env-file.loader.js +5 -5
  6. package/dist/cjs/config-aws/src/loaders/environment.loader.js +1 -1
  7. package/dist/cjs/config-aws/src/loaders/s3.loader.js +8 -8
  8. package/dist/cjs/config-aws/src/loaders/secrets-manager.loader.js +16 -9
  9. package/dist/cjs/config-aws/src/loaders/ssm-parameter-store.loader.js +6 -6
  10. package/dist/cjs/config-aws/src/utils/validation.util.js +6 -6
  11. package/dist/cjs/nestjs-config-aws/src/integration/services/async-config-helper.service.js +14 -6
  12. package/dist/cjs/nestjs-config-aws/src/integration/services/validation-integration.service.js +9 -6
  13. package/dist/esm/config-aws/src/config-manager.js +2 -2
  14. package/dist/esm/config-aws/src/index.js +10 -10
  15. package/dist/esm/config-aws/src/interfaces/config-manager.interface.js +1 -1
  16. package/dist/esm/config-aws/src/loaders/env-file.loader.js +3 -3
  17. package/dist/esm/config-aws/src/loaders/environment.loader.js +1 -1
  18. package/dist/esm/config-aws/src/loaders/s3.loader.js +3 -3
  19. package/dist/esm/config-aws/src/loaders/secrets-manager.loader.js +12 -5
  20. package/dist/esm/config-aws/src/loaders/ssm-parameter-store.loader.js +2 -2
  21. package/dist/esm/config-aws/src/utils/validation.util.js +2 -2
  22. package/dist/esm/nestjs-config-aws/src/integration/services/async-config-helper.service.js +14 -6
  23. package/dist/esm/nestjs-config-aws/src/integration/services/validation-integration.service.js +9 -6
  24. package/dist/esm/package.json +1 -0
  25. package/dist/types/config-aws/src/config-manager.d.ts +1 -1
  26. package/dist/types/config-aws/src/config-manager.d.ts.map +1 -1
  27. package/dist/types/config-aws/src/index.d.ts +16 -16
  28. package/dist/types/config-aws/src/index.d.ts.map +1 -1
  29. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts +1 -1
  30. package/dist/types/config-aws/src/interfaces/config-manager.interface.d.ts.map +1 -1
  31. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts +2 -2
  32. package/dist/types/config-aws/src/loaders/env-file.loader.d.ts.map +1 -1
  33. package/dist/types/config-aws/src/loaders/environment.loader.d.ts +2 -2
  34. package/dist/types/config-aws/src/loaders/environment.loader.d.ts.map +1 -1
  35. package/dist/types/config-aws/src/loaders/s3.loader.d.ts +2 -2
  36. package/dist/types/config-aws/src/loaders/s3.loader.d.ts.map +1 -1
  37. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts +3 -3
  38. package/dist/types/config-aws/src/loaders/secrets-manager.loader.d.ts.map +1 -1
  39. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts +2 -2
  40. package/dist/types/config-aws/src/loaders/ssm-parameter-store.loader.d.ts.map +1 -1
  41. package/dist/types/config-aws/src/utils/validation.util.d.ts +1 -1
  42. package/dist/types/config-aws/src/utils/validation.util.d.ts.map +1 -1
  43. package/dist/types/nestjs-config-aws/src/integration/services/async-config-helper.service.d.ts.map +1 -1
  44. package/dist/types/nestjs-config-aws/src/integration/services/validation-integration.service.d.ts.map +1 -1
  45. package/package.json +5 -5
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SecretsManagerLoader = void 0;
4
4
  const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
5
5
  const credential_providers_1 = require("@aws-sdk/credential-providers");
6
- const errors_1 = require("../errors");
6
+ const index_js_1 = require("../errors/index.js");
7
7
  /**
8
8
  * Loader that reads configuration from AWS Secrets Manager.
9
9
  * Supports environment-aware path construction.
@@ -54,11 +54,18 @@ class SecretsManagerLoader {
54
54
  }
55
55
  /**
56
56
  * Get the name of this loader for logging and debugging.
57
- * @returns The loader name with secret path
57
+ * @returns The loader name with secret path or base secret name if path cannot be built
58
58
  */
59
59
  getName() {
60
- const secretName = this.buildSecretName();
61
- return `SecretsManagerLoader(${secretName})`;
60
+ // Avoid calling buildSecretName() to prevent stack overflow when
61
+ // environment mapping is missing - buildSecretName() throws an error
62
+ // that includes getName() in the message, causing infinite recursion.
63
+ const envPrefix = this._config.environmentMapping[this._appEnv];
64
+ if (envPrefix) {
65
+ return `SecretsManagerLoader(/${envPrefix}${this._config.secretName})`;
66
+ }
67
+ // Fallback to base secret name when environment mapping is unavailable
68
+ return `SecretsManagerLoader(${this._config.secretName})`;
62
69
  }
63
70
  /**
64
71
  * Check if this loader is available in the current environment.
@@ -121,14 +128,14 @@ class SecretsManagerLoader {
121
128
  return {};
122
129
  }
123
130
  if (error.name === 'AccessDeniedException') {
124
- throw new errors_1.AWSServiceError(`Access denied when retrieving secret '${secretName}'. Check AWS credentials and permissions.`, 'SecretsManager', 'GetSecretValue', error);
131
+ throw new index_js_1.AWSServiceError(`Access denied when retrieving secret '${secretName}'. Check AWS credentials and permissions.`, 'SecretsManager', 'GetSecretValue', error);
125
132
  }
126
133
  if (error.name === 'InvalidRequestException') {
127
- throw new errors_1.AWSServiceError(`Invalid request when retrieving secret '${secretName}'. Check secret name format.`, 'SecretsManager', 'GetSecretValue', error);
134
+ throw new index_js_1.AWSServiceError(`Invalid request when retrieving secret '${secretName}'. Check secret name format.`, 'SecretsManager', 'GetSecretValue', error);
128
135
  }
129
136
  }
130
137
  // For other errors, wrap in AWSServiceError
131
- throw new errors_1.AWSServiceError(`Failed to retrieve secret '${secretName}' from AWS Secrets Manager: ${error instanceof Error ? error.message : String(error)}`, 'SecretsManager', 'GetSecretValue', error instanceof Error ? error : undefined);
138
+ throw new index_js_1.AWSServiceError(`Failed to retrieve secret '${secretName}' from AWS Secrets Manager: ${error instanceof Error ? error.message : String(error)}`, 'SecretsManager', 'GetSecretValue', error instanceof Error ? error : undefined);
132
139
  }
133
140
  }
134
141
  /**
@@ -138,7 +145,7 @@ class SecretsManagerLoader {
138
145
  buildSecretName() {
139
146
  const envPrefix = this._config.environmentMapping[this._appEnv];
140
147
  if (!envPrefix) {
141
- throw new errors_1.ConfigurationLoadError(`No environment mapping found for APP_ENV '${this._appEnv}'. ` +
148
+ throw new index_js_1.ConfigurationLoadError(`No environment mapping found for APP_ENV '${this._appEnv}'. ` +
142
149
  `Available environments: ${Object.keys(this._config.environmentMapping).join(', ')}`, this.getName());
143
150
  }
144
151
  return `/${envPrefix}${this._config.secretName}`;
@@ -159,4 +166,4 @@ class SecretsManagerLoader {
159
166
  }
160
167
  }
161
168
  exports.SecretsManagerLoader = SecretsManagerLoader;
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1tYW5hZ2VyLmxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2xvYWRlcnMvc2VjcmV0cy1tYW5hZ2VyLmxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFBOEY7QUFDOUYsd0VBQXNFO0FBSXRFLHNDQUFvRTtBQUVwRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQWEsb0JBQW9CO0lBQy9CLGdCQUFnQjtJQUNHLE9BQU8sQ0FBdUI7SUFDakQsZ0JBQWdCO0lBQ0csT0FBTyxDQUF1QztJQUNqRSxnQkFBZ0I7SUFDRyxPQUFPLENBQVM7SUFFbkMsWUFBWSxTQUFxQyxFQUFFO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUU1RSw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLG9CQUFvQjtZQUNyRCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLFdBQVc7WUFDakUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixJQUFJO2dCQUMvQyxXQUFXLEVBQUUsS0FBSztnQkFDbEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osVUFBVSxFQUFFLFlBQVk7YUFDekI7U0FDRixDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSw2Q0FBb0IsQ0FBQztZQUN0QyxXQUFXLEVBQUUsSUFBQSw0Q0FBcUIsR0FBRTtZQUNwQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1NBQzVCLENBQUMsQ0FBQztJQUNM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LENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUMvSCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUMzQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLCtCQUFzQixDQUM5Qiw2Q0FBNkMsSUFBSSxDQUFDLE9BQU8sS0FBSztnQkFDNUQsMkJBQTJCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUN0RixJQUFJLENBQUMsT0FBTyxFQUFFLENBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQjtRQUNuQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBcktELG9EQXFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdldFNlY3JldFZhbHVlQ29tbWFuZCwgU2VjcmV0c01hbmFnZXJDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcclxuaW1wb3J0IHsgZnJvbU5vZGVQcm92aWRlckNoYWluIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBDb25maWdMb2FkZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZy1sb2FkZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHR5cGUgeyBTZWNyZXRzTWFuYWdlckxvYWRlckNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VjcmV0cy1tYW5hZ2VyLWxvYWRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBV1NTZXJ2aWNlRXJyb3IsIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xyXG5cclxuLyoqXHJcbiAqIExvYWRlciB0aGF0IHJlYWRzIGNvbmZpZ3VyYXRpb24gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyLlxyXG4gKiBTdXBwb3J0cyBlbnZpcm9ubWVudC1hd2FyZSBwYXRoIGNvbnN0cnVjdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiAvLyBCYXNpYyB1c2FnZVxyXG4gKiBjb25zdCBsb2FkZXIgPSBuZXcgU2VjcmV0c01hbmFnZXJMb2FkZXIoe1xyXG4gKiAgIHNlY3JldE5hbWU6ICcvbXktYXBwL2NvbmZpZycsXHJcbiAqICAgcmVnaW9uOiAndXMtZWFzdC0xJ1xyXG4gKiB9KTtcclxuICpcclxuICogLy8gV2l0aCBlbnZpcm9ubWVudCBtYXBwaW5nXHJcbiAqIGNvbnN0IGxvYWRlciA9IG5ldyBTZWNyZXRzTWFuYWdlckxvYWRlcih7XHJcbiAqICAgc2VjcmV0TmFtZTogJy9teS1hcHAvY29uZmlnJyxcclxuICogICBlbnZpcm9ubWVudE1hcHBpbmc6IHtcclxuICogICAgIGRldmVsb3BtZW50OiAnZGV2JyxcclxuICogICAgIHN0YWdpbmc6ICdzdGcnLFxyXG4gKiAgICAgcHJvZHVjdGlvbjogJ3Byb2QnXHJcbiAqICAgfVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2VjcmV0c01hbmFnZXJMb2FkZXIgaW1wbGVtZW50cyBDb25maWdMb2FkZXIge1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NsaWVudDogU2VjcmV0c01hbmFnZXJDbGllbnQ7XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfY29uZmlnOiBSZXF1aXJlZDxTZWNyZXRzTWFuYWdlckxvYWRlckNvbmZpZz47XHJcbiAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBfYXBwRW52OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogU2VjcmV0c01hbmFnZXJMb2FkZXJDb25maWcgPSB7fSkge1xyXG4gICAgdGhpcy5fYXBwRW52ID0gcHJvY2Vzcy5lbnZbJ0FQUF9FTlYnXSB8fCBwcm9jZXNzLmVudlsnTk9ERV9FTlYnXSB8fCAnbG9jYWwnO1xyXG5cclxuICAgIC8vIFNldCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cclxuICAgIHRoaXMuX2NvbmZpZyA9IHtcclxuICAgICAgc2VjcmV0TmFtZTogY29uZmlnLnNlY3JldE5hbWUgfHwgJy9uZXN0anMtY29uZmlnLWF3cycsXHJcbiAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbiB8fCBwcm9jZXNzLmVudlsnQVdTX1JFR0lPTiddIHx8ICd1cy1lYXN0LTEnLFxyXG4gICAgICBlbnZpcm9ubWVudE1hcHBpbmc6IGNvbmZpZy5lbnZpcm9ubWVudE1hcHBpbmcgfHwge1xyXG4gICAgICAgIGRldmVsb3BtZW50OiAnZGV2JyxcclxuICAgICAgICB0ZXN0OiAndGVzdCcsXHJcbiAgICAgICAgcHJvZHVjdGlvbjogJ3Byb2R1Y3Rpb24nLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIEFXUyBTZWNyZXRzIE1hbmFnZXIgY2xpZW50XHJcbiAgICB0aGlzLl9jbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoe1xyXG4gICAgICBjcmVkZW50aWFsczogZnJvbU5vZGVQcm92aWRlckNoYWluKCksXHJcbiAgICAgIHJlZ2lvbjogdGhpcy5fY29uZmlnLnJlZ2lvbixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbmFtZSBvZiB0aGlzIGxvYWRlciBmb3IgbG9nZ2luZyBhbmQgZGVidWdnaW5nLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZXIgbmFtZSB3aXRoIHNlY3JldCBwYXRoXHJcbiAgICovXHJcbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IHRoaXMuYnVpbGRTZWNyZXROYW1lKCk7XHJcbiAgICByZXR1cm4gYFNlY3JldHNNYW5hZ2VyTG9hZGVyKCR7c2VjcmV0TmFtZX0pYDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoaXMgbG9hZGVyIGlzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0cnVlIGlmIG5vdCBpbiBsb2NhbCBlbnZpcm9ubWVudCBhbmQgQVdTIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGVcclxuICAgKi9cclxuICBhc3luYyBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIFNraXAgaW4gbG9jYWwgZW52aXJvbm1lbnRcclxuICAgIGlmICh0aGlzLl9hcHBFbnYgPT09ICdsb2NhbCcpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRlc3QgQVdTIGNyZWRlbnRpYWxzIGJ5IGF0dGVtcHRpbmcgdG8gZ2V0IGNhbGxlciBpZGVudGl0eVxyXG4gICAgICBhd2FpdCB0aGlzLl9jbGllbnQuY29uZmlnLmNyZWRlbnRpYWxzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZmlndXJhdGlvbiBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgc2VjcmV0XHJcbiAgICogQHRocm93cyBBV1NTZXJ2aWNlRXJyb3IgaWYgQVdTIG9wZXJhdGlvbiBmYWlsc1xyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkxvYWRFcnJvciBpZiBzZWNyZXQgY2Fubm90IGJlIHBhcnNlZFxyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xyXG4gICAgLy8gU2tpcCBsb2FkaW5nIGluIGxvY2FsIGVudmlyb25tZW50XHJcbiAgICBpZiAodGhpcy5fYXBwRW52ID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWNyZXROYW1lID0gdGhpcy5idWlsZFNlY3JldE5hbWUoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBjb21tYW5kID0gbmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBzZWNyZXROYW1lIH0pO1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2NsaWVudC5zZW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBKU09OLCBmYWxsYmFjayB0byBzdHJpbmcgdmFsdWVcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLlNlY3JldFN0cmluZyk7XHJcblxyXG4gICAgICAgIC8vIEVuc3VyZSB3ZSByZXR1cm4gYW4gb2JqZWN0IGZvciBjb25maWd1cmF0aW9uIG1lcmdpbmdcclxuICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcclxuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIElmIGl0J3Mgbm90IGFuIG9iamVjdCwgd3JhcCBpdCBpbiBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICAgICAgICByZXR1cm4geyBTRUNSRVRfVkFMVUU6IHBhcnNlZCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gSWYgSlNPTiBwYXJzaW5nIGZhaWxzLCB0cmVhdCBhcyBhIHNpbmdsZSBzdHJpbmcgdmFsdWVcclxuICAgICAgICByZXR1cm4geyBTRUNSRVRfVkFMVUU6IHJlc3BvbnNlLlNlY3JldFN0cmluZyB9O1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBIYW5kbGUgc3BlY2lmaWMgQVdTIGVycm9yc1xyXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbicpIHtcclxuICAgICAgICAgIC8vIFNlY3JldCBkb2Vzbid0IGV4aXN0IC0gdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgaW4gYWxsIGVudmlyb25tZW50c1xyXG4gICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgQVdTU2VydmljZUVycm9yKFxyXG4gICAgICAgICAgICBgQWNjZXNzIGRlbmllZCB3aGVuIHJldHJpZXZpbmcgc2VjcmV0ICcke3NlY3JldE5hbWV9Jy4gQ2hlY2sgQVdTIGNyZWRlbnRpYWxzIGFuZCBwZXJtaXNzaW9ucy5gLFxyXG4gICAgICAgICAgICAnU2VjcmV0c01hbmFnZXInLFxyXG4gICAgICAgICAgICAnR2V0U2VjcmV0VmFsdWUnLFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEFXU1NlcnZpY2VFcnJvcihcclxuICAgICAgICAgICAgYEludmFsaWQgcmVxdWVzdCB3aGVuIHJldHJpZXZpbmcgc2VjcmV0ICcke3NlY3JldE5hbWV9Jy4gQ2hlY2sgc2VjcmV0IG5hbWUgZm9ybWF0LmAsXHJcbiAgICAgICAgICAgICdTZWNyZXRzTWFuYWdlcicsXHJcbiAgICAgICAgICAgICdHZXRTZWNyZXRWYWx1ZScsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZvciBvdGhlciBlcnJvcnMsIHdyYXAgaW4gQVdTU2VydmljZUVycm9yXHJcbiAgICAgIHRocm93IG5ldyBBV1NTZXJ2aWNlRXJyb3IoXHJcbiAgICAgICAgYEZhaWxlZCB0byByZXRyaWV2ZSBzZWNyZXQgJyR7c2VjcmV0TmFtZX0nIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAnU2VjcmV0c01hbmFnZXInLFxyXG4gICAgICAgICdHZXRTZWNyZXRWYWx1ZScsXHJcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGQgdGhlIGVudmlyb25tZW50LWF3YXJlIHNlY3JldCBuYW1lL3BhdGguXHJcbiAgICogQHJldHVybnMgVGhlIGZ1bGwgc2VjcmV0IG5hbWUgd2l0aCBlbnZpcm9ubWVudCBwcmVmaXhcclxuICAgKi9cclxuICBidWlsZFNlY3JldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGVudlByZWZpeCA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudE1hcHBpbmdbdGhpcy5fYXBwRW52XTtcclxuXHJcbiAgICBpZiAoIWVudlByZWZpeCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkxvYWRFcnJvcihcclxuICAgICAgICBgTm8gZW52aXJvbm1lbnQgbWFwcGluZyBmb3VuZCBmb3IgQVBQX0VOViAnJHt0aGlzLl9hcHBFbnZ9Jy4gYCArXHJcbiAgICAgICAgICBgQXZhaWxhYmxlIGVudmlyb25tZW50czogJHtPYmplY3Qua2V5cyh0aGlzLl9jb25maWcuZW52aXJvbm1lbnRNYXBwaW5nKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgdGhpcy5nZXROYW1lKCksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGAvJHtlbnZQcmVmaXh9JHt0aGlzLl9jb25maWcuc2VjcmV0TmFtZX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcCBlbnZpcm9ubWVudC5cclxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBBUFBfRU5WIG9yIE5PREVfRU5WIHZhbHVlXHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXBwRW52O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBlbnZpcm9ubWVudCBtYXBwaW5nIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG1hcHBpbmcgcmVjb3JkXHJcbiAgICovXHJcbiAgZ2V0RW52aXJvbm1lbnRNYXBwaW5nKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY29uZmlnLmVudmlyb25tZW50TWFwcGluZyB9O1xyXG4gIH1cclxufVxyXG4iXX0=
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcmV0cy1tYW5hZ2VyLmxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZy1hd3Mvc3JjL2xvYWRlcnMvc2VjcmV0cy1tYW5hZ2VyLmxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFBOEY7QUFDOUYsd0VBQXNFO0FBSXRFLGlEQUE2RTtBQUU3RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQWEsb0JBQW9CO0lBQy9CLGdCQUFnQjtJQUNHLE9BQU8sQ0FBdUI7SUFDakQsZ0JBQWdCO0lBQ0csT0FBTyxDQUF1QztJQUNqRSxnQkFBZ0I7SUFDRyxPQUFPLENBQVM7SUFFbkMsWUFBWSxTQUFxQyxFQUFFO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQztRQUU1RSw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLG9CQUFvQjtZQUNyRCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLFdBQVc7WUFDakUsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQixJQUFJO2dCQUMvQyxXQUFXLEVBQUUsS0FBSztnQkFDbEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osVUFBVSxFQUFFLFlBQVk7YUFDekI7U0FDRixDQUFDO1FBRUYsd0NBQXdDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSw2Q0FBb0IsQ0FBQztZQUN0QyxXQUFXLEVBQUUsSUFBQSw0Q0FBcUIsR0FBRTtZQUNwQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1NBQzVCLENBQUMsQ0FBQztJQUNM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SSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQTVLRCxvREE0S0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsIFNlY3JldHNNYW5hZ2VyQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XHJcbmltcG9ydCB7IGZyb21Ob2RlUHJvdmlkZXJDaGFpbiB9IGZyb20gJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzJztcclxuXHJcbmltcG9ydCB0eXBlIHsgQ29uZmlnTG9hZGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jb25maWctbG9hZGVyLmludGVyZmFjZS5qcyc7XHJcbmltcG9ydCB0eXBlIHsgU2VjcmV0c01hbmFnZXJMb2FkZXJDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlY3JldHMtbWFuYWdlci1sb2FkZXIuaW50ZXJmYWNlLmpzJztcclxuaW1wb3J0IHsgQVdTU2VydmljZUVycm9yLCBDb25maWd1cmF0aW9uTG9hZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL2luZGV4LmpzJztcclxuXHJcbi8qKlxyXG4gKiBMb2FkZXIgdGhhdCByZWFkcyBjb25maWd1cmF0aW9uIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlci5cclxuICogU3VwcG9ydHMgZW52aXJvbm1lbnQtYXdhcmUgcGF0aCBjb25zdHJ1Y3Rpb24uXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogLy8gQmFzaWMgdXNhZ2VcclxuICogY29uc3QgbG9hZGVyID0gbmV3IFNlY3JldHNNYW5hZ2VyTG9hZGVyKHtcclxuICogICBzZWNyZXROYW1lOiAnL215LWFwcC9jb25maWcnLFxyXG4gKiAgIHJlZ2lvbjogJ3VzLWVhc3QtMSdcclxuICogfSk7XHJcbiAqXHJcbiAqIC8vIFdpdGggZW52aXJvbm1lbnQgbWFwcGluZ1xyXG4gKiBjb25zdCBsb2FkZXIgPSBuZXcgU2VjcmV0c01hbmFnZXJMb2FkZXIoe1xyXG4gKiAgIHNlY3JldE5hbWU6ICcvbXktYXBwL2NvbmZpZycsXHJcbiAqICAgZW52aXJvbm1lbnRNYXBwaW5nOiB7XHJcbiAqICAgICBkZXZlbG9wbWVudDogJ2RldicsXHJcbiAqICAgICBzdGFnaW5nOiAnc3RnJyxcclxuICogICAgIHByb2R1Y3Rpb246ICdwcm9kJ1xyXG4gKiAgIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFNlY3JldHNNYW5hZ2VyTG9hZGVyIGltcGxlbWVudHMgQ29uZmlnTG9hZGVyIHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jbGllbnQ6IFNlY3JldHNNYW5hZ2VyQ2xpZW50O1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NvbmZpZzogUmVxdWlyZWQ8U2VjcmV0c01hbmFnZXJMb2FkZXJDb25maWc+O1xyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2FwcEVudjogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNlY3JldHNNYW5hZ2VyTG9hZGVyQ29uZmlnID0ge30pIHtcclxuICAgIHRoaXMuX2FwcEVudiA9IHByb2Nlc3MuZW52WydBUFBfRU5WJ10gfHwgcHJvY2Vzcy5lbnZbJ05PREVfRU5WJ10gfHwgJ2xvY2FsJztcclxuXHJcbiAgICAvLyBTZXQgZGVmYXVsdCBjb25maWd1cmF0aW9uXHJcbiAgICB0aGlzLl9jb25maWcgPSB7XHJcbiAgICAgIHNlY3JldE5hbWU6IGNvbmZpZy5zZWNyZXROYW1lIHx8ICcvbmVzdGpzLWNvbmZpZy1hd3MnLFxyXG4gICAgICByZWdpb246IGNvbmZpZy5yZWdpb24gfHwgcHJvY2Vzcy5lbnZbJ0FXU19SRUdJT04nXSB8fCAndXMtZWFzdC0xJyxcclxuICAgICAgZW52aXJvbm1lbnRNYXBwaW5nOiBjb25maWcuZW52aXJvbm1lbnRNYXBwaW5nIHx8IHtcclxuICAgICAgICBkZXZlbG9wbWVudDogJ2RldicsXHJcbiAgICAgICAgdGVzdDogJ3Rlc3QnLFxyXG4gICAgICAgIHByb2R1Y3Rpb246ICdwcm9kdWN0aW9uJyxcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBBV1MgU2VjcmV0cyBNYW5hZ2VyIGNsaWVudFxyXG4gICAgdGhpcy5fY2xpZW50ID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KHtcclxuICAgICAgY3JlZGVudGlhbHM6IGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpLFxyXG4gICAgICByZWdpb246IHRoaXMuX2NvbmZpZy5yZWdpb24sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhpcyBsb2FkZXIgZm9yIGxvZ2dpbmcgYW5kIGRlYnVnZ2luZy5cclxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVyIG5hbWUgd2l0aCBzZWNyZXQgcGF0aCBvciBiYXNlIHNlY3JldCBuYW1lIGlmIHBhdGggY2Fubm90IGJlIGJ1aWx0XHJcbiAgICovXHJcbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgLy8gQXZvaWQgY2FsbGluZyBidWlsZFNlY3JldE5hbWUoKSB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IHdoZW5cclxuICAgIC8vIGVudmlyb25tZW50IG1hcHBpbmcgaXMgbWlzc2luZyAtIGJ1aWxkU2VjcmV0TmFtZSgpIHRocm93cyBhbiBlcnJvclxyXG4gICAgLy8gdGhhdCBpbmNsdWRlcyBnZXROYW1lKCkgaW4gdGhlIG1lc3NhZ2UsIGNhdXNpbmcgaW5maW5pdGUgcmVjdXJzaW9uLlxyXG4gICAgY29uc3QgZW52UHJlZml4ID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50TWFwcGluZ1t0aGlzLl9hcHBFbnZdO1xyXG4gICAgaWYgKGVudlByZWZpeCkge1xyXG4gICAgICByZXR1cm4gYFNlY3JldHNNYW5hZ2VyTG9hZGVyKC8ke2VudlByZWZpeH0ke3RoaXMuX2NvbmZpZy5zZWNyZXROYW1lfSlgO1xyXG4gICAgfVxyXG4gICAgLy8gRmFsbGJhY2sgdG8gYmFzZSBzZWNyZXQgbmFtZSB3aGVuIGVudmlyb25tZW50IG1hcHBpbmcgaXMgdW5hdmFpbGFibGVcclxuICAgIHJldHVybiBgU2VjcmV0c01hbmFnZXJMb2FkZXIoJHt0aGlzLl9jb25maWcuc2VjcmV0TmFtZX0pYDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIHRoaXMgbG9hZGVyIGlzIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0cnVlIGlmIG5vdCBpbiBsb2NhbCBlbnZpcm9ubWVudCBhbmQgQVdTIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGVcclxuICAgKi9cclxuICBhc3luYyBpc0F2YWlsYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIFNraXAgaW4gbG9jYWwgZW52aXJvbm1lbnRcclxuICAgIGlmICh0aGlzLl9hcHBFbnYgPT09ICdsb2NhbCcpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRlc3QgQVdTIGNyZWRlbnRpYWxzIGJ5IGF0dGVtcHRpbmcgdG8gZ2V0IGNhbGxlciBpZGVudGl0eVxyXG4gICAgICBhd2FpdCB0aGlzLl9jbGllbnQuY29uZmlnLmNyZWRlbnRpYWxzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZmlndXJhdGlvbiBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgc2VjcmV0XHJcbiAgICogQHRocm93cyBBV1NTZXJ2aWNlRXJyb3IgaWYgQVdTIG9wZXJhdGlvbiBmYWlsc1xyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkxvYWRFcnJvciBpZiBzZWNyZXQgY2Fubm90IGJlIHBhcnNlZFxyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xyXG4gICAgLy8gU2tpcCBsb2FkaW5nIGluIGxvY2FsIGVudmlyb25tZW50XHJcbiAgICBpZiAodGhpcy5fYXBwRW52ID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWNyZXROYW1lID0gdGhpcy5idWlsZFNlY3JldE5hbWUoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBjb21tYW5kID0gbmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBzZWNyZXROYW1lIH0pO1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2NsaWVudC5zZW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFRyeSB0byBwYXJzZSBhcyBKU09OLCBmYWxsYmFjayB0byBzdHJpbmcgdmFsdWVcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLlNlY3JldFN0cmluZyk7XHJcblxyXG4gICAgICAgIC8vIEVuc3VyZSB3ZSByZXR1cm4gYW4gb2JqZWN0IGZvciBjb25maWd1cmF0aW9uIG1lcmdpbmdcclxuICAgICAgICBpZiAodHlwZW9mIHBhcnNlZCA9PT0gJ29iamVjdCcgJiYgcGFyc2VkICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcclxuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIElmIGl0J3Mgbm90IGFuIG9iamVjdCwgd3JhcCBpdCBpbiBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0XHJcbiAgICAgICAgICByZXR1cm4geyBTRUNSRVRfVkFMVUU6IHBhcnNlZCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgLy8gSWYgSlNPTiBwYXJzaW5nIGZhaWxzLCB0cmVhdCBhcyBhIHNpbmdsZSBzdHJpbmcgdmFsdWVcclxuICAgICAgICByZXR1cm4geyBTRUNSRVRfVkFMVUU6IHJlc3BvbnNlLlNlY3JldFN0cmluZyB9O1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBIYW5kbGUgc3BlY2lmaWMgQVdTIGVycm9yc1xyXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbicpIHtcclxuICAgICAgICAgIC8vIFNlY3JldCBkb2Vzbid0IGV4aXN0IC0gdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgaW4gYWxsIGVudmlyb25tZW50c1xyXG4gICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgQVdTU2VydmljZUVycm9yKFxyXG4gICAgICAgICAgICBgQWNjZXNzIGRlbmllZCB3aGVuIHJldHJpZXZpbmcgc2VjcmV0ICcke3NlY3JldE5hbWV9Jy4gQ2hlY2sgQVdTIGNyZWRlbnRpYWxzIGFuZCBwZXJtaXNzaW9ucy5gLFxyXG4gICAgICAgICAgICAnU2VjcmV0c01hbmFnZXInLFxyXG4gICAgICAgICAgICAnR2V0U2VjcmV0VmFsdWUnLFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0ludmFsaWRSZXF1ZXN0RXhjZXB0aW9uJykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEFXU1NlcnZpY2VFcnJvcihcclxuICAgICAgICAgICAgYEludmFsaWQgcmVxdWVzdCB3aGVuIHJldHJpZXZpbmcgc2VjcmV0ICcke3NlY3JldE5hbWV9Jy4gQ2hlY2sgc2VjcmV0IG5hbWUgZm9ybWF0LmAsXHJcbiAgICAgICAgICAgICdTZWNyZXRzTWFuYWdlcicsXHJcbiAgICAgICAgICAgICdHZXRTZWNyZXRWYWx1ZScsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZvciBvdGhlciBlcnJvcnMsIHdyYXAgaW4gQVdTU2VydmljZUVycm9yXHJcbiAgICAgIHRocm93IG5ldyBBV1NTZXJ2aWNlRXJyb3IoXHJcbiAgICAgICAgYEZhaWxlZCB0byByZXRyaWV2ZSBzZWNyZXQgJyR7c2VjcmV0TmFtZX0nIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlcjogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAnU2VjcmV0c01hbmFnZXInLFxyXG4gICAgICAgICdHZXRTZWNyZXRWYWx1ZScsXHJcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGQgdGhlIGVudmlyb25tZW50LWF3YXJlIHNlY3JldCBuYW1lL3BhdGguXHJcbiAgICogQHJldHVybnMgVGhlIGZ1bGwgc2VjcmV0IG5hbWUgd2l0aCBlbnZpcm9ubWVudCBwcmVmaXhcclxuICAgKi9cclxuICBidWlsZFNlY3JldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGVudlByZWZpeCA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudE1hcHBpbmdbdGhpcy5fYXBwRW52XTtcclxuXHJcbiAgICBpZiAoIWVudlByZWZpeCkge1xyXG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkxvYWRFcnJvcihcclxuICAgICAgICBgTm8gZW52aXJvbm1lbnQgbWFwcGluZyBmb3VuZCBmb3IgQVBQX0VOViAnJHt0aGlzLl9hcHBFbnZ9Jy4gYCArXHJcbiAgICAgICAgICBgQXZhaWxhYmxlIGVudmlyb25tZW50czogJHtPYmplY3Qua2V5cyh0aGlzLl9jb25maWcuZW52aXJvbm1lbnRNYXBwaW5nKS5qb2luKCcsICcpfWAsXHJcbiAgICAgICAgdGhpcy5nZXROYW1lKCksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGAvJHtlbnZQcmVmaXh9JHt0aGlzLl9jb25maWcuc2VjcmV0TmFtZX1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcCBlbnZpcm9ubWVudC5cclxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBBUFBfRU5WIG9yIE5PREVfRU5WIHZhbHVlXHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXBwRW52O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBlbnZpcm9ubWVudCBtYXBwaW5nIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG1hcHBpbmcgcmVjb3JkXHJcbiAgICovXHJcbiAgZ2V0RW52aXJvbm1lbnRNYXBwaW5nKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY29uZmlnLmVudmlyb25tZW50TWFwcGluZyB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SSMParameterStoreLoader = void 0;
4
4
  const client_ssm_1 = require("@aws-sdk/client-ssm");
5
5
  const credential_providers_1 = require("@aws-sdk/credential-providers");
6
- const errors_1 = require("../errors");
6
+ const index_js_1 = require("../errors/index.js");
7
7
  /**
8
8
  * Loader that reads configuration from AWS SSM Parameter Store.
9
9
  * Supports environment-aware path construction, pagination, and decryption options.
@@ -132,14 +132,14 @@ class SSMParameterStoreLoader {
132
132
  return {};
133
133
  }
134
134
  if (error.name === 'AccessDeniedException') {
135
- throw new errors_1.AWSServiceError(`Access denied when retrieving parameters from path '${parameterPath}'. Check AWS credentials and permissions.`, 'SSM', 'GetParametersByPath', error);
135
+ throw new index_js_1.AWSServiceError(`Access denied when retrieving parameters from path '${parameterPath}'. Check AWS credentials and permissions.`, 'SSM', 'GetParametersByPath', error);
136
136
  }
137
137
  if (error.name === 'InvalidFilterKey' || error.name === 'InvalidFilterValue') {
138
- throw new errors_1.AWSServiceError(`Invalid parameter path '${parameterPath}'. Check path format.`, 'SSM', 'GetParametersByPath', error);
138
+ throw new index_js_1.AWSServiceError(`Invalid parameter path '${parameterPath}'. Check path format.`, 'SSM', 'GetParametersByPath', error);
139
139
  }
140
140
  }
141
141
  // For other errors, wrap in AWSServiceError
142
- throw new errors_1.AWSServiceError(`Failed to retrieve parameters from path '${parameterPath}' in AWS SSM Parameter Store: ${error instanceof Error ? error.message : String(error)}`, 'SSM', 'GetParametersByPath', error instanceof Error ? error : undefined);
142
+ throw new index_js_1.AWSServiceError(`Failed to retrieve parameters from path '${parameterPath}' in AWS SSM Parameter Store: ${error instanceof Error ? error.message : String(error)}`, 'SSM', 'GetParametersByPath', error instanceof Error ? error : undefined);
143
143
  }
144
144
  }
145
145
  /**
@@ -150,7 +150,7 @@ class SSMParameterStoreLoader {
150
150
  buildParameterPath() {
151
151
  const envPrefix = this._config.environmentMapping[this._appEnv];
152
152
  if (!envPrefix) {
153
- throw new errors_1.ConfigurationLoadError(`No environment mapping found for APP_ENV '${this._appEnv}'. ` +
153
+ throw new index_js_1.ConfigurationLoadError(`No environment mapping found for APP_ENV '${this._appEnv}'. ` +
154
154
  `Available environments: ${Object.keys(this._config.environmentMapping).join(', ')}`, this.getName());
155
155
  }
156
156
  return `/${envPrefix}${this._config.parameterPath}`;
@@ -196,4 +196,4 @@ class SSMParameterStoreLoader {
196
196
  }
197
197
  }
198
198
  exports.SSMParameterStoreLoader = SSMParameterStoreLoader;
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlci1zdG9yZS5sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9sb2FkZXJzL3NzbS1wYXJhbWV0ZXItc3RvcmUubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUE0RTtBQUM1RSx3RUFBc0U7QUFJdEUsc0NBQW9FO0FBRXBFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBYSx1QkFBdUI7SUFDbEMsZ0JBQWdCO0lBQ0csT0FBTyxDQUFZO0lBQ3RDLGdCQUFnQjtJQUNHLE9BQU8sQ0FBMEM7SUFDcEUsZ0JBQWdCO0lBQ0csT0FBTyxDQUFTO0lBRW5DLFlBQVksU0FBd0MsRUFBRTtRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUM7UUFFNUUsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsSUFBSSxhQUFhO1lBQ3BELE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksV0FBVztZQUNqRSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCLElBQUk7Z0JBQy9DLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixJQUFJLEVBQUUsTUFBTTtnQkFDWixVQUFVLEVBQUUsWUFBWTthQUN6QjtZQUNELGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUk7U0FDOUMsQ0FBQztRQUVGLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksc0JBQVMsQ0FBQztZQUMzQixXQUFXLEVBQUUsSUFBQSw0Q0FBcUIsR0FBRTtZQUNwQyxNQUFNLEVBQUUs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QUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLHNCQUFzQixDQUFDLGFBQWlDLEVBQUUsVUFBa0I7UUFDbEYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUM7UUFDeEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDL0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELCtDQUErQztRQUMvQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsNkJBQTZCO1FBQzdCLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gscUJBQXFCO1FBQ25CLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFwTkQsMERBb05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2V0UGFyYW1ldGVyc0J5UGF0aENvbW1hbmQsIFNTTUNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xyXG5pbXBvcnQgeyBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4gfSBmcm9tICdAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycyc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IENvbmZpZ0xvYWRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLWxvYWRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgdHlwZSB7IFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zc20tcGFyYW1ldGVyLXN0b3JlLWxvYWRlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBV1NTZXJ2aWNlRXJyb3IsIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xyXG5cclxuLyoqXHJcbiAqIExvYWRlciB0aGF0IHJlYWRzIGNvbmZpZ3VyYXRpb24gZnJvbSBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZS5cclxuICogU3VwcG9ydHMgZW52aXJvbm1lbnQtYXdhcmUgcGF0aCBjb25zdHJ1Y3Rpb24sIHBhZ2luYXRpb24sIGFuZCBkZWNyeXB0aW9uIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogLy8gQmFzaWMgdXNhZ2VcclxuICogY29uc3QgbG9hZGVyID0gbmV3IFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyKHtcclxuICogICBwYXJhbWV0ZXJQYXRoOiAnL215LWFwcC9jb25maWcnLFxyXG4gKiAgIHJlZ2lvbjogJ3VzLWVhc3QtMSdcclxuICogfSk7XHJcbiAqXHJcbiAqIC8vIFdpdGggZW52aXJvbm1lbnQgbWFwcGluZ1xyXG4gKiBjb25zdCBsb2FkZXIgPSBuZXcgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXIoe1xyXG4gKiAgIHBhcmFtZXRlclBhdGg6ICcvbXktYXBwL2NvbmZpZycsXHJcbiAqICAgZW52aXJvbm1lbnRNYXBwaW5nOiB7XHJcbiAqICAgICBkZXZlbG9wbWVudDogJ2RldicsXHJcbiAqICAgICBzdGFnaW5nOiAnc3RnJyxcclxuICogICAgIHByb2R1Y3Rpb246ICdwcm9kJ1xyXG4gKiAgIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyIGltcGxlbWVudHMgQ29uZmlnTG9hZGVyIHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jbGllbnQ6IFNTTUNsaWVudDtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb25maWc6IFJlcXVpcmVkPFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyQ29uZmlnPjtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hcHBFbnY6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlckNvbmZpZyA9IHt9KSB7XHJcbiAgICB0aGlzLl9hcHBFbnYgPSBwcm9jZXNzLmVudlsnQVBQX0VOViddIHx8IHByb2Nlc3MuZW52WydOT0RFX0VOViddIHx8ICdsb2NhbCc7XHJcblxyXG4gICAgLy8gU2V0IGRlZmF1bHQgY29uZmlndXJhdGlvblxyXG4gICAgdGhpcy5fY29uZmlnID0ge1xyXG4gICAgICBwYXJhbWV0ZXJQYXRoOiBjb25maWcucGFyYW1ldGVyUGF0aCB8fCAnL2NvbmZpZy1hd3MnLFxyXG4gICAgICByZWdpb246IGNvbmZpZy5yZWdpb24gfHwgcHJvY2Vzcy5lbnZbJ0FXU19SRUdJT04nXSB8fCAndXMtZWFzdC0xJyxcclxuICAgICAgZW52aXJvbm1lbnRNYXBwaW5nOiBjb25maWcuZW52aXJvbm1lbnRNYXBwaW5nIHx8IHtcclxuICAgICAgICBkZXZlbG9wbWVudDogJ2RldicsXHJcbiAgICAgICAgdGVzdDogJ3Rlc3QnLFxyXG4gICAgICAgIHByb2R1Y3Rpb246ICdwcm9kdWN0aW9uJyxcclxuICAgICAgfSxcclxuICAgICAgd2l0aERlY3J5cHRpb246IGNvbmZpZy53aXRoRGVjcnlwdGlvbiA/PyB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIEFXUyBTU00gY2xpZW50XHJcbiAgICB0aGlzLl9jbGllbnQgPSBuZXcgU1NNQ2xpZW50KHtcclxuICAgICAgY3JlZGVudGlhbHM6IGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpLFxyXG4gICAgICByZWdpb246IHRoaXMuX2NvbmZpZy5yZWdpb24sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhpcyBsb2FkZXIgZm9yIGxvZ2dpbmcgYW5kIGRlYnVnZ2luZy5cclxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVyIG5hbWUgd2l0aCBwYXJhbWV0ZXIgcGF0aFxyXG4gICAqL1xyXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSB0aGlzLmJ1aWxkUGFyYW1ldGVyUGF0aCgpO1xyXG4gICAgICByZXR1cm4gYFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyKCR7cGFyYW1ldGVyUGF0aH0pYDtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBGYWxsYmFjayBpZiBwYXRoIGNvbnN0cnVjdGlvbiBmYWlscyAoZS5nLiwgbWlzc2luZyBlbnYgbWFwcGluZylcclxuICAgICAgcmV0dXJuIGBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlcigke3RoaXMuX2NvbmZpZy5wYXJhbWV0ZXJQYXRofSlgO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgdGhpcyBsb2FkZXIgaXMgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRydWUgaWYgbm90IGluIGxvY2FsIGVudmlyb25tZW50IGFuZCBBV1MgY3JlZGVudGlhbHMgYXJlIGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIGFzeW5jIGlzQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gU2tpcCBpbiBsb2NhbCBlbnZpcm9ubWVudFxyXG4gICAgaWYgKHRoaXMuX2FwcEVudiA9PT0gJ2xvY2FsJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVGVzdCBBV1MgY3JlZGVudGlhbHMgYnkgYXR0ZW1wdGluZyB0byBnZXQgY2FsbGVyIGlkZW50aXR5XHJcbiAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5jb25maWcuY3JlZGVudGlhbHMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gQVdTIFNTTSBQYXJhbWV0ZXIgU3RvcmUuXHJcbiAgICogSW1wbGVtZW50cyByZWN1cnNpdmUgcGFyYW1ldGVyIGZldGNoaW5nIHdpdGggTmV4dFRva2VuIGhhbmRsaW5nIGZvciBwYWdpbmF0aW9uLlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNvbmZpZ3VyYXRpb24ga2V5LXZhbHVlIHBhaXJzIGZyb20gcGFyYW1ldGVyc1xyXG4gICAqIEB0aHJvd3MgQVdTU2VydmljZUVycm9yIGlmIEFXUyBvcGVyYXRpb24gZmFpbHNcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IgaWYgcGFyYW1ldGVyIHBhdGggY2Fubm90IGJlIGNvbnN0cnVjdGVkXHJcbiAgICovXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgICAvLyBTa2lwIGxvYWRpbmcgaW4gbG9jYWwgZW52aXJvbm1lbnRcclxuICAgIGlmICh0aGlzLl9hcHBFbnYgPT09ICdsb2NhbCcpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSB0aGlzLmJ1aWxkUGFyYW1ldGVyUGF0aCgpO1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0UGFyYW1ldGVyc0J5UGF0aENvbW1hbmQoe1xyXG4gICAgICAgICAgUGF0aDogcGFyYW1ldGVyUGF0aCxcclxuICAgICAgICAgIFJlY3Vyc2l2ZTogdHJ1ZSxcclxuICAgICAgICAgIFdpdGhEZWNyeXB0aW9uOiB0aGlzLl9jb25maWcud2l0aERlY3J5cHRpb24sXHJcbiAgICAgICAgICBOZXh0VG9rZW46IG5leHRUb2tlbixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9jbGllbnQuc2VuZChjb21tYW5kKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5QYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAvLyBObyBwYXJhbWV0ZXJzIGZvdW5kIC0gdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3JcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIHBhcmFtZXRlclxyXG4gICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcmVzcG9uc2UuUGFyYW1ldGVycykge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy50cmFuc2Zvcm1QYXJhbWV0ZXJOYW1lKHBhcmFtLk5hbWUsIHBhcmFtZXRlclBhdGgpO1xyXG5cclxuICAgICAgICAgIGlmIChrZXkgJiYgcGFyYW0uVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHBhcmFtLlZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmV4dFRva2VuID0gcmVzcG9uc2UuTmV4dFRva2VuO1xyXG4gICAgICB9IHdoaWxlIChuZXh0VG9rZW4pO1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIEhhbmRsZSBzcGVjaWZpYyBBV1MgZXJyb3JzXHJcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJyB8fCBlcnJvci5uYW1lID09PSAnUGFyYW1ldGVyTm90Rm91bmQnKSB7XHJcbiAgICAgICAgICAvLyBObyBwYXJhbWV0ZXJzIGZvdW5kIGF0IHBhdGggLSB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvclxyXG4gICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgQVdTU2VydmljZUVycm9yKFxyXG4gICAgICAgICAgICBgQWNjZXNzIGRlbmllZCB3aGVuIHJldHJpZXZpbmcgcGFyYW1ldGVycyBmcm9tIHBhdGggJyR7cGFyYW1ldGVyUGF0aH0nLiBDaGVjayBBV1MgY3JlZGVudGlhbHMgYW5kIHBlcm1pc3Npb25zLmAsXHJcbiAgICAgICAgICAgICdTU00nLFxyXG4gICAgICAgICAgICAnR2V0UGFyYW1ldGVyc0J5UGF0aCcsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnSW52YWxpZEZpbHRlcktleScgfHwgZXJyb3IubmFtZSA9PT0gJ0ludmFsaWRGaWx0ZXJWYWx1ZScpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBBV1NTZXJ2aWNlRXJyb3IoXHJcbiAgICAgICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlciBwYXRoICcke3BhcmFtZXRlclBhdGh9Jy4gQ2hlY2sgcGF0aCBmb3JtYXQuYCxcclxuICAgICAgICAgICAgJ1NTTScsXHJcbiAgICAgICAgICAgICdHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRm9yIG90aGVyIGVycm9ycywgd3JhcCBpbiBBV1NTZXJ2aWNlRXJyb3JcclxuICAgICAgdGhyb3cgbmV3IEFXU1NlcnZpY2VFcnJvcihcclxuICAgICAgICBgRmFpbGVkIHRvIHJldHJpZXZlIHBhcmFtZXRlcnMgZnJvbSBwYXRoICcke3BhcmFtZXRlclBhdGh9JyBpbiBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAnU1NNJyxcclxuICAgICAgICAnR2V0UGFyYW1ldGVyc0J5UGF0aCcsXHJcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIHRoZSBlbnZpcm9ubWVudC1hd2FyZSBwYXJhbWV0ZXIgcGF0aC5cclxuICAgKiBAcmV0dXJucyBUaGUgZnVsbCBwYXJhbWV0ZXIgcGF0aCB3aXRoIGVudmlyb25tZW50IHByZWZpeFxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkxvYWRFcnJvciBpZiBubyBlbnZpcm9ubWVudCBtYXBwaW5nIGZvdW5kXHJcbiAgICovXHJcbiAgYnVpbGRQYXJhbWV0ZXJQYXRoKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlbnZQcmVmaXggPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnRNYXBwaW5nW3RoaXMuX2FwcEVudl07XHJcblxyXG4gICAgaWYgKCFlbnZQcmVmaXgpIHtcclxuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IoXHJcbiAgICAgICAgYE5vIGVudmlyb25tZW50IG1hcHBpbmcgZm91bmQgZm9yIEFQUF9FTlYgJyR7dGhpcy5fYXBwRW52fScuIGAgK1xyXG4gICAgICAgICAgYEF2YWlsYWJsZSBlbnZpcm9ubWVudHM6ICR7T2JqZWN0LmtleXModGhpcy5fY29uZmlnLmVudmlyb25tZW50TWFwcGluZykuam9pbignLCAnKX1gLFxyXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgLyR7ZW52UHJlZml4fSR7dGhpcy5fY29uZmlnLnBhcmFtZXRlclBhdGh9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybSBwYXJhbWV0ZXIgbmFtZSBieSByZW1vdmluZyB0aGUgcHJlZml4IGFuZCBjb252ZXJ0aW5nIHRvIHVwcGVyY2FzZS5cclxuICAgKiBFeGFtcGxlOiAnL2Rldi9jb25maWctYXdzL2RhdGFiYXNlL2hvc3QnIC0+ICdEQVRBQkFTRV9IT1NUJ1xyXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBmdWxsIHBhcmFtZXRlciBuYW1lIGZyb20gQVdTXHJcbiAgICogQHBhcmFtIHBhdGhQcmVmaXggVGhlIHBhdGggcHJlZml4IHRvIHJlbW92ZVxyXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCBwYXJhbWV0ZXIgbmFtZSBvciBudWxsIGlmIGludmFsaWRcclxuICAgKi9cclxuICBwcml2YXRlIHRyYW5zZm9ybVBhcmFtZXRlck5hbWUocGFyYW1ldGVyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXRoUHJlZml4OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghcGFyYW1ldGVyTmFtZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdGhlIHBhdGggcHJlZml4XHJcbiAgICBsZXQga2V5ID0gcGFyYW1ldGVyTmFtZTtcclxuICAgIGlmIChrZXkuc3RhcnRzV2l0aChwYXRoUHJlZml4KSkge1xyXG4gICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKHBhdGhQcmVmaXgubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgbGVhZGluZyBzbGFzaCBpZiBwcmVzZW50XHJcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJy8nKSkge1xyXG4gICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbnZlcnQgc2xhc2hlcyB0byB1bmRlcnNjb3JlcyBhbmQgdXBwZXJjYXNlXHJcbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFwvL2csICdfJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gbnVsbCBmb3IgZW1wdHkga2V5c1xyXG4gICAgcmV0dXJuIGtleSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcCBlbnZpcm9ubWVudC5cclxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBBUFBfRU5WIG9yIE5PREVfRU5WIHZhbHVlXHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXBwRW52O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBlbnZpcm9ubWVudCBtYXBwaW5nIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG1hcHBpbmcgcmVjb3JkXHJcbiAgICovXHJcbiAgZ2V0RW52aXJvbm1lbnRNYXBwaW5nKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY29uZmlnLmVudmlyb25tZW50TWFwcGluZyB9O1xyXG4gIH1cclxufVxyXG4iXX0=
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NtLXBhcmFtZXRlci1zdG9yZS5sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9jb25maWctYXdzL3NyYy9sb2FkZXJzL3NzbS1wYXJhbWV0ZXItc3RvcmUubG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUE0RTtBQUM1RSx3RUFBc0U7QUFJdEUsaURBQTZFO0FBRTdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBYSx1QkFBdUI7SUFDbEMsZ0JBQWdCO0lBQ0csT0FBTyxDQUFZO0lBQ3RDLGdCQUFnQjtJQUNHLE9BQU8sQ0FBMEM7SUFDcEUsZ0JBQWdCO0lBQ0csT0FBTyxDQUFTO0lBRW5DLFlBQVksU0FBd0MsRUFBRTtRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUM7UUFFNUUsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsSUFBSSxhQUFhO1lBQ3BELE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksV0FBVztZQUNqRSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCLElBQUk7Z0JBQy9DLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixJQUFJLEVBQUUsTUFBTTtnQkFDWixVQUFVLEVBQUUsWUFBWTthQUN6QjtZQUNELGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxJQUFJLElBQUk7U0FDOUMsQ0FBQztRQUVGLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksc0JBQVMsQ0FBQztZQUMzQixXQUFXLEVBQUUsSUFBQSw0Q0FBcUIsR0FBRTtZQUNwQyxNQUFNLEVBQUUs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QUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLHNCQUFzQixDQUFDLGFBQWlDLEVBQUUsVUFBa0I7UUFDbEYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixJQUFJLEdBQUcsR0FBRyxhQUFhLENBQUM7UUFDeEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDL0IsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELCtDQUErQztRQUMvQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFNUMsNkJBQTZCO1FBQzdCLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gscUJBQXFCO1FBQ25CLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFwTkQsMERBb05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2V0UGFyYW1ldGVyc0J5UGF0aENvbW1hbmQsIFNTTUNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xyXG5pbXBvcnQgeyBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4gfSBmcm9tICdAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycyc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IENvbmZpZ0xvYWRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLWxvYWRlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgdHlwZSB7IFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyQ29uZmlnIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zc20tcGFyYW1ldGVyLXN0b3JlLWxvYWRlci5pbnRlcmZhY2UuanMnO1xyXG5pbXBvcnQgeyBBV1NTZXJ2aWNlRXJyb3IsIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvaW5kZXguanMnO1xyXG5cclxuLyoqXHJcbiAqIExvYWRlciB0aGF0IHJlYWRzIGNvbmZpZ3VyYXRpb24gZnJvbSBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZS5cclxuICogU3VwcG9ydHMgZW52aXJvbm1lbnQtYXdhcmUgcGF0aCBjb25zdHJ1Y3Rpb24sIHBhZ2luYXRpb24sIGFuZCBkZWNyeXB0aW9uIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogLy8gQmFzaWMgdXNhZ2VcclxuICogY29uc3QgbG9hZGVyID0gbmV3IFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyKHtcclxuICogICBwYXJhbWV0ZXJQYXRoOiAnL215LWFwcC9jb25maWcnLFxyXG4gKiAgIHJlZ2lvbjogJ3VzLWVhc3QtMSdcclxuICogfSk7XHJcbiAqXHJcbiAqIC8vIFdpdGggZW52aXJvbm1lbnQgbWFwcGluZ1xyXG4gKiBjb25zdCBsb2FkZXIgPSBuZXcgU1NNUGFyYW1ldGVyU3RvcmVMb2FkZXIoe1xyXG4gKiAgIHBhcmFtZXRlclBhdGg6ICcvbXktYXBwL2NvbmZpZycsXHJcbiAqICAgZW52aXJvbm1lbnRNYXBwaW5nOiB7XHJcbiAqICAgICBkZXZlbG9wbWVudDogJ2RldicsXHJcbiAqICAgICBzdGFnaW5nOiAnc3RnJyxcclxuICogICAgIHByb2R1Y3Rpb246ICdwcm9kJ1xyXG4gKiAgIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyIGltcGxlbWVudHMgQ29uZmlnTG9hZGVyIHtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jbGllbnQ6IFNTTUNsaWVudDtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9jb25maWc6IFJlcXVpcmVkPFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyQ29uZmlnPjtcclxuICAvKiogQGludGVybmFsICovXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hcHBFbnY6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoY29uZmlnOiBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlckNvbmZpZyA9IHt9KSB7XHJcbiAgICB0aGlzLl9hcHBFbnYgPSBwcm9jZXNzLmVudlsnQVBQX0VOViddIHx8IHByb2Nlc3MuZW52WydOT0RFX0VOViddIHx8ICdsb2NhbCc7XHJcblxyXG4gICAgLy8gU2V0IGRlZmF1bHQgY29uZmlndXJhdGlvblxyXG4gICAgdGhpcy5fY29uZmlnID0ge1xyXG4gICAgICBwYXJhbWV0ZXJQYXRoOiBjb25maWcucGFyYW1ldGVyUGF0aCB8fCAnL2NvbmZpZy1hd3MnLFxyXG4gICAgICByZWdpb246IGNvbmZpZy5yZWdpb24gfHwgcHJvY2Vzcy5lbnZbJ0FXU19SRUdJT04nXSB8fCAndXMtZWFzdC0xJyxcclxuICAgICAgZW52aXJvbm1lbnRNYXBwaW5nOiBjb25maWcuZW52aXJvbm1lbnRNYXBwaW5nIHx8IHtcclxuICAgICAgICBkZXZlbG9wbWVudDogJ2RldicsXHJcbiAgICAgICAgdGVzdDogJ3Rlc3QnLFxyXG4gICAgICAgIHByb2R1Y3Rpb246ICdwcm9kdWN0aW9uJyxcclxuICAgICAgfSxcclxuICAgICAgd2l0aERlY3J5cHRpb246IGNvbmZpZy53aXRoRGVjcnlwdGlvbiA/PyB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIEFXUyBTU00gY2xpZW50XHJcbiAgICB0aGlzLl9jbGllbnQgPSBuZXcgU1NNQ2xpZW50KHtcclxuICAgICAgY3JlZGVudGlhbHM6IGZyb21Ob2RlUHJvdmlkZXJDaGFpbigpLFxyXG4gICAgICByZWdpb246IHRoaXMuX2NvbmZpZy5yZWdpb24sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhpcyBsb2FkZXIgZm9yIGxvZ2dpbmcgYW5kIGRlYnVnZ2luZy5cclxuICAgKiBAcmV0dXJucyBUaGUgbG9hZGVyIG5hbWUgd2l0aCBwYXJhbWV0ZXIgcGF0aFxyXG4gICAqL1xyXG4gIGdldE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSB0aGlzLmJ1aWxkUGFyYW1ldGVyUGF0aCgpO1xyXG4gICAgICByZXR1cm4gYFNTTVBhcmFtZXRlclN0b3JlTG9hZGVyKCR7cGFyYW1ldGVyUGF0aH0pYDtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICAvLyBGYWxsYmFjayBpZiBwYXRoIGNvbnN0cnVjdGlvbiBmYWlscyAoZS5nLiwgbWlzc2luZyBlbnYgbWFwcGluZylcclxuICAgICAgcmV0dXJuIGBTU01QYXJhbWV0ZXJTdG9yZUxvYWRlcigke3RoaXMuX2NvbmZpZy5wYXJhbWV0ZXJQYXRofSlgO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgdGhpcyBsb2FkZXIgaXMgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRydWUgaWYgbm90IGluIGxvY2FsIGVudmlyb25tZW50IGFuZCBBV1MgY3JlZGVudGlhbHMgYXJlIGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIGFzeW5jIGlzQXZhaWxhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gU2tpcCBpbiBsb2NhbCBlbnZpcm9ubWVudFxyXG4gICAgaWYgKHRoaXMuX2FwcEVudiA9PT0gJ2xvY2FsJykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVGVzdCBBV1MgY3JlZGVudGlhbHMgYnkgYXR0ZW1wdGluZyB0byBnZXQgY2FsbGVyIGlkZW50aXR5XHJcbiAgICAgIGF3YWl0IHRoaXMuX2NsaWVudC5jb25maWcuY3JlZGVudGlhbHMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gQVdTIFNTTSBQYXJhbWV0ZXIgU3RvcmUuXHJcbiAgICogSW1wbGVtZW50cyByZWN1cnNpdmUgcGFyYW1ldGVyIGZldGNoaW5nIHdpdGggTmV4dFRva2VuIGhhbmRsaW5nIGZvciBwYWdpbmF0aW9uLlxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNvbmZpZ3VyYXRpb24ga2V5LXZhbHVlIHBhaXJzIGZyb20gcGFyYW1ldGVyc1xyXG4gICAqIEB0aHJvd3MgQVdTU2VydmljZUVycm9yIGlmIEFXUyBvcGVyYXRpb24gZmFpbHNcclxuICAgKiBAdGhyb3dzIENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IgaWYgcGFyYW1ldGVyIHBhdGggY2Fubm90IGJlIGNvbnN0cnVjdGVkXHJcbiAgICovXHJcbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XHJcbiAgICAvLyBTa2lwIGxvYWRpbmcgaW4gbG9jYWwgZW52aXJvbm1lbnRcclxuICAgIGlmICh0aGlzLl9hcHBFbnYgPT09ICdsb2NhbCcpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSB0aGlzLmJ1aWxkUGFyYW1ldGVyUGF0aCgpO1xyXG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBsZXQgbmV4dFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0UGFyYW1ldGVyc0J5UGF0aENvbW1hbmQoe1xyXG4gICAgICAgICAgUGF0aDogcGFyYW1ldGVyUGF0aCxcclxuICAgICAgICAgIFJlY3Vyc2l2ZTogdHJ1ZSxcclxuICAgICAgICAgIFdpdGhEZWNyeXB0aW9uOiB0aGlzLl9jb25maWcud2l0aERlY3J5cHRpb24sXHJcbiAgICAgICAgICBOZXh0VG9rZW46IG5leHRUb2tlbixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9jbGllbnQuc2VuZChjb21tYW5kKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5QYXJhbWV0ZXJzKSB7XHJcbiAgICAgICAgICAvLyBObyBwYXJhbWV0ZXJzIGZvdW5kIC0gdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3JcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUHJvY2VzcyBlYWNoIHBhcmFtZXRlclxyXG4gICAgICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcmVzcG9uc2UuUGFyYW1ldGVycykge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy50cmFuc2Zvcm1QYXJhbWV0ZXJOYW1lKHBhcmFtLk5hbWUsIHBhcmFtZXRlclBhdGgpO1xyXG5cclxuICAgICAgICAgIGlmIChrZXkgJiYgcGFyYW0uVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHBhcmFtLlZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbmV4dFRva2VuID0gcmVzcG9uc2UuTmV4dFRva2VuO1xyXG4gICAgICB9IHdoaWxlIChuZXh0VG9rZW4pO1xyXG5cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIEhhbmRsZSBzcGVjaWZpYyBBV1MgZXJyb3JzXHJcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJyB8fCBlcnJvci5uYW1lID09PSAnUGFyYW1ldGVyTm90Rm91bmQnKSB7XHJcbiAgICAgICAgICAvLyBObyBwYXJhbWV0ZXJzIGZvdW5kIGF0IHBhdGggLSB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvclxyXG4gICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgQVdTU2VydmljZUVycm9yKFxyXG4gICAgICAgICAgICBgQWNjZXNzIGRlbmllZCB3aGVuIHJldHJpZXZpbmcgcGFyYW1ldGVycyBmcm9tIHBhdGggJyR7cGFyYW1ldGVyUGF0aH0nLiBDaGVjayBBV1MgY3JlZGVudGlhbHMgYW5kIHBlcm1pc3Npb25zLmAsXHJcbiAgICAgICAgICAgICdTU00nLFxyXG4gICAgICAgICAgICAnR2V0UGFyYW1ldGVyc0J5UGF0aCcsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlcnJvci5uYW1lID09PSAnSW52YWxpZEZpbHRlcktleScgfHwgZXJyb3IubmFtZSA9PT0gJ0ludmFsaWRGaWx0ZXJWYWx1ZScpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBBV1NTZXJ2aWNlRXJyb3IoXHJcbiAgICAgICAgICAgIGBJbnZhbGlkIHBhcmFtZXRlciBwYXRoICcke3BhcmFtZXRlclBhdGh9Jy4gQ2hlY2sgcGF0aCBmb3JtYXQuYCxcclxuICAgICAgICAgICAgJ1NTTScsXHJcbiAgICAgICAgICAgICdHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRm9yIG90aGVyIGVycm9ycywgd3JhcCBpbiBBV1NTZXJ2aWNlRXJyb3JcclxuICAgICAgdGhyb3cgbmV3IEFXU1NlcnZpY2VFcnJvcihcclxuICAgICAgICBgRmFpbGVkIHRvIHJldHJpZXZlIHBhcmFtZXRlcnMgZnJvbSBwYXRoICcke3BhcmFtZXRlclBhdGh9JyBpbiBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCxcclxuICAgICAgICAnU1NNJyxcclxuICAgICAgICAnR2V0UGFyYW1ldGVyc0J5UGF0aCcsXHJcbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIHRoZSBlbnZpcm9ubWVudC1hd2FyZSBwYXJhbWV0ZXIgcGF0aC5cclxuICAgKiBAcmV0dXJucyBUaGUgZnVsbCBwYXJhbWV0ZXIgcGF0aCB3aXRoIGVudmlyb25tZW50IHByZWZpeFxyXG4gICAqIEB0aHJvd3MgQ29uZmlndXJhdGlvbkxvYWRFcnJvciBpZiBubyBlbnZpcm9ubWVudCBtYXBwaW5nIGZvdW5kXHJcbiAgICovXHJcbiAgYnVpbGRQYXJhbWV0ZXJQYXRoKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBlbnZQcmVmaXggPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnRNYXBwaW5nW3RoaXMuX2FwcEVudl07XHJcblxyXG4gICAgaWYgKCFlbnZQcmVmaXgpIHtcclxuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25Mb2FkRXJyb3IoXHJcbiAgICAgICAgYE5vIGVudmlyb25tZW50IG1hcHBpbmcgZm91bmQgZm9yIEFQUF9FTlYgJyR7dGhpcy5fYXBwRW52fScuIGAgK1xyXG4gICAgICAgICAgYEF2YWlsYWJsZSBlbnZpcm9ubWVudHM6ICR7T2JqZWN0LmtleXModGhpcy5fY29uZmlnLmVudmlyb25tZW50TWFwcGluZykuam9pbignLCAnKX1gLFxyXG4gICAgICAgIHRoaXMuZ2V0TmFtZSgpLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgLyR7ZW52UHJlZml4fSR7dGhpcy5fY29uZmlnLnBhcmFtZXRlclBhdGh9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYW5zZm9ybSBwYXJhbWV0ZXIgbmFtZSBieSByZW1vdmluZyB0aGUgcHJlZml4IGFuZCBjb252ZXJ0aW5nIHRvIHVwcGVyY2FzZS5cclxuICAgKiBFeGFtcGxlOiAnL2Rldi9jb25maWctYXdzL2RhdGFiYXNlL2hvc3QnIC0+ICdEQVRBQkFTRV9IT1NUJ1xyXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBmdWxsIHBhcmFtZXRlciBuYW1lIGZyb20gQVdTXHJcbiAgICogQHBhcmFtIHBhdGhQcmVmaXggVGhlIHBhdGggcHJlZml4IHRvIHJlbW92ZVxyXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCBwYXJhbWV0ZXIgbmFtZSBvciBudWxsIGlmIGludmFsaWRcclxuICAgKi9cclxuICBwcml2YXRlIHRyYW5zZm9ybVBhcmFtZXRlck5hbWUocGFyYW1ldGVyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXRoUHJlZml4OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghcGFyYW1ldGVyTmFtZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdGhlIHBhdGggcHJlZml4XHJcbiAgICBsZXQga2V5ID0gcGFyYW1ldGVyTmFtZTtcclxuICAgIGlmIChrZXkuc3RhcnRzV2l0aChwYXRoUHJlZml4KSkge1xyXG4gICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKHBhdGhQcmVmaXgubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgbGVhZGluZyBzbGFzaCBpZiBwcmVzZW50XHJcbiAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoJy8nKSkge1xyXG4gICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbnZlcnQgc2xhc2hlcyB0byB1bmRlcnNjb3JlcyBhbmQgdXBwZXJjYXNlXHJcbiAgICBrZXkgPSBrZXkucmVwbGFjZSgvXFwvL2csICdfJykudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gbnVsbCBmb3IgZW1wdHkga2V5c1xyXG4gICAgcmV0dXJuIGtleSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IGFwcCBlbnZpcm9ubWVudC5cclxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBBUFBfRU5WIG9yIE5PREVfRU5WIHZhbHVlXHJcbiAgICovXHJcbiAgZ2V0QXBwRW52KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXBwRW52O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBlbnZpcm9ubWVudCBtYXBwaW5nIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG1hcHBpbmcgcmVjb3JkXHJcbiAgICovXHJcbiAgZ2V0RW52aXJvbm1lbnRNYXBwaW5nKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY29uZmlnLmVudmlyb25tZW50TWFwcGluZyB9O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConfigValidationUtil = void 0;
4
- const errors_1 = require("../errors");
4
+ const index_js_1 = require("../errors/index.js");
5
5
  /**
6
6
  * Framework-agnostic validation utility for configuration values.
7
7
  * Provides methods for validating configuration objects against Zod schemas.
@@ -24,7 +24,7 @@ class ConfigValidationUtil {
24
24
  const contextMessage = context
25
25
  ? `Configuration validation failed for ${context}`
26
26
  : 'Configuration validation failed';
27
- throw new errors_1.ValidationError(contextMessage, errors);
27
+ throw new index_js_1.ValidationError(contextMessage, errors);
28
28
  }
29
29
  /**
30
30
  * Safely validates a value against a Zod schema without throwing.
@@ -38,7 +38,7 @@ class ConfigValidationUtil {
38
38
  return { success: true, data: result.data };
39
39
  }
40
40
  const errors = this.formatValidationErrors(result.error);
41
- const validationError = new errors_1.ValidationError('Configuration validation failed', errors);
41
+ const validationError = new index_js_1.ValidationError('Configuration validation failed', errors);
42
42
  return { success: false, error: validationError };
43
43
  }
44
44
  /**
@@ -103,14 +103,14 @@ class ConfigValidationUtil {
103
103
  return this.validate(schema, value, `${source} configuration`);
104
104
  }
105
105
  catch (error) {
106
- if (error instanceof errors_1.ValidationError) {
106
+ if (error instanceof index_js_1.ValidationError) {
107
107
  // Enhance the error with source information
108
108
  const enhancedMessage = `Configuration validation failed for source '${source}': ${error.message}`;
109
- throw new errors_1.ValidationError(enhancedMessage, error.validationErrors);
109
+ throw new index_js_1.ValidationError(enhancedMessage, error.validationErrors);
110
110
  }
111
111
  throw error;
112
112
  }
113
113
  }
114
114
  }
115
115
  exports.ConfigValidationUtil = ConfigValidationUtil;
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvdXRpbHMvdmFsaWRhdGlvbi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHNDQUE0QztBQUU1Qzs7O0dBR0c7QUFDSCxNQUFhLG9CQUFvQjtJQUMvQjs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FDYixNQUFTLEVBQ1QsS0FBYyxFQUNkLE9BQWdCO1FBRWhCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE1BQU0sY0FBYyxHQUFHLE9BQU87WUFDNUIsQ0FBQyxDQUFDLHVDQUF1QyxPQUFPLEVBQUU7WUFDbEQsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDO1FBRXRDLE1BQU0sSUFBSSx3QkFBZSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUNqQixNQUFTLEVBQ1QsS0FBYztRQUVkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFL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QUFnQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQzFCLE1BQVMsRUFDVCxLQUFjLEVBQ2QsTUFBYztRQUVkLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksd0JBQWUsRUFBRSxDQUFDO2dCQUNyQyw0Q0FBNEM7Z0JBQzVDLE1BQU0sZUFBZSxHQUFHLCtDQUErQyxNQUFNLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuRyxNQUFNLElBQUksd0JBQWUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckUsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZJRCxvREF1SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFpvZFR5cGUsIFpvZEVycm9yLCBUeXBlT2YgfSBmcm9tICd6b2QnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xyXG5cclxuLyoqXHJcbiAqIEZyYW1ld29yay1hZ25vc3RpYyB2YWxpZGF0aW9uIHV0aWxpdHkgZm9yIGNvbmZpZ3VyYXRpb24gdmFsdWVzLlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIGZvciB2YWxpZGF0aW5nIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBhZ2FpbnN0IFpvZCBzY2hlbWFzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRpb25VdGlsIHtcclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgYSB2YWx1ZSBhZ2FpbnN0IGEgWm9kIHNjaGVtYS5cclxuICAgKiBAcGFyYW0gc2NoZW1hIFRoZSBab2Qgc2NoZW1hIHRvIHZhbGlkYXRlIGFnYWluc3RcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHZhbGlkYXRlXHJcbiAgICogQHBhcmFtIGNvbnRleHQgT3B0aW9uYWwgY29udGV4dCBmb3IgZXJyb3IgbWVzc2FnZXNcclxuICAgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGFuZCB0cmFuc2Zvcm1lZCB2YWx1ZVxyXG4gICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcclxuICAgKi9cclxuICBzdGF0aWMgdmFsaWRhdGU8VCBleHRlbmRzIFpvZFR5cGU+KFxyXG4gICAgc2NoZW1hOiBULFxyXG4gICAgdmFsdWU6IHVua25vd24sXHJcbiAgICBjb250ZXh0Pzogc3RyaW5nLFxyXG4gICk6IFR5cGVPZjxUPiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZm9ybWF0VmFsaWRhdGlvbkVycm9ycyhyZXN1bHQuZXJyb3IpO1xyXG4gICAgY29uc3QgY29udGV4dE1lc3NhZ2UgPSBjb250ZXh0XHJcbiAgICAgID8gYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yICR7Y29udGV4dH1gXHJcbiAgICAgIDogJ0NvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQnO1xyXG5cclxuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoY29udGV4dE1lc3NhZ2UsIGVycm9ycyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYWZlbHkgdmFsaWRhdGVzIGEgdmFsdWUgYWdhaW5zdCBhIFpvZCBzY2hlbWEgd2l0aG91dCB0aHJvd2luZy5cclxuICAgKiBAcGFyYW0gc2NoZW1hIFRoZSBab2Qgc2NoZW1hIHRvIHZhbGlkYXRlIGFnYWluc3RcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHZhbGlkYXRlXHJcbiAgICogQHJldHVybnMgT2JqZWN0IHdpdGggc3VjY2VzcyBmbGFnIGFuZCBlaXRoZXIgZGF0YSBvciBlcnJvclxyXG4gICAqL1xyXG4gIHN0YXRpYyBzYWZlVmFsaWRhdGU8VCBleHRlbmRzIFpvZFR5cGU+KFxyXG4gICAgc2NoZW1hOiBULFxyXG4gICAgdmFsdWU6IHVua25vd24sXHJcbiAgKTogeyBzdWNjZXNzOiB0cnVlOyBkYXRhOiBUeXBlT2Y8VD4gfSB8IHsgc3VjY2VzczogZmFsc2U7IGVycm9yOiBWYWxpZGF0aW9uRXJyb3IgfSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LmRhdGEgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmZvcm1hdFZhbGlkYXRpb25FcnJvcnMocmVzdWx0LmVycm9yKTtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQnLCBlcnJvcnMpO1xyXG5cclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogdmFsaWRhdGlvbkVycm9yIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXRzIFpvZCB2YWxpZGF0aW9uIGVycm9ycyBpbnRvIGEgc3RydWN0dXJlZCBmb3JtYXQuXHJcbiAgICogQHBhcmFtIGVycm9yIFRoZSBab2RFcnJvciB0byBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBGb3JtYXR0ZWQgZXJyb3Igb2JqZWN0IG9yIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyBmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKGVycm9yOiBab2RFcnJvcik6IHVua25vd24ge1xyXG4gICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBlcnJvciBhdCB0aGUgcm9vdCBsZXZlbCwgcmV0dXJuIGp1c3QgdGhlIG1lc3NhZ2VcclxuICAgIGlmIChlcnJvci5pc3N1ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdO1xyXG4gICAgICBpZiAoaXNzdWUgJiYgQXJyYXkuaXNBcnJheShpc3N1ZS5wYXRoKSAmJiBpc3N1ZS5wYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9yIG11bHRpcGxlIGVycm9ycyBvciBuZXN0ZWQgcGF0aHMsIGNyZWF0ZSBhIHN0cnVjdHVyZWQgb2JqZWN0XHJcbiAgICByZXR1cm4gZXJyb3IuaXNzdWVzLnJlZHVjZShcclxuICAgICAgKGVycm9ycywgaXNzdWUpID0+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gaXNzdWUucGF0aC5qb2luKCcuJyk7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcGF0aCB8fCAncm9vdCc7XHJcblxyXG4gICAgICAgIGlmICghZXJyb3JzW2tleV0pIHtcclxuICAgICAgICAgIGVycm9yc1trZXldID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlcnJvcnNba2V5XS5wdXNoKHtcclxuICAgICAgICAgIG1lc3NhZ2U6IGlzc3VlLm1lc3NhZ2UsXHJcbiAgICAgICAgICBjb2RlOiBpc3N1ZS5jb2RlLFxyXG4gICAgICAgICAgcGF0aDogaXNzdWUucGF0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgICAgfSxcclxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgQXJyYXk8eyBtZXNzYWdlOiBzdHJpbmc7IGNvZGU6IHN0cmluZzsgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSB9Pj4sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UgZm9yIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsdXJlcy5cclxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIFpvZEVycm9yIHRvIGNyZWF0ZSBhIG1lc3NhZ2UgZm9yXHJcbiAgICogQHBhcmFtIGNvbnRleHQgT3B0aW9uYWwgY29udGV4dCBmb3IgdGhlIGVycm9yXHJcbiAgICogQHJldHVybnMgRGV0YWlsZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgY3JlYXRlRGV0YWlsZWRFcnJvck1lc3NhZ2UoZXJyb3I6IFpvZEVycm9yLCBjb250ZXh0Pzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbnRleHRQcmVmaXggPSBjb250ZXh0ID8gYCR7Y29udGV4dH06IGAgOiAnJztcclxuXHJcbiAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBjb25zdCBpc3N1ZSA9IGVycm9yLmlzc3Vlc1swXTtcclxuICAgICAgaWYgKGlzc3VlKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aFN0ciA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGAgYXQgJyR7aXNzdWUucGF0aC5qb2luKCcuJyl9J2AgOiAnJztcclxuICAgICAgICByZXR1cm4gYCR7Y29udGV4dFByZWZpeH0ke2lzc3VlLm1lc3NhZ2V9JHtwYXRoU3RyfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gZXJyb3IuaXNzdWVzLm1hcCgoaXNzdWUpID0+IHtcclxuICAgICAgY29uc3QgcGF0aFN0ciA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGAgYXQgJyR7aXNzdWUucGF0aC5qb2luKCcuJyl9J2AgOiAnJztcclxuICAgICAgcmV0dXJuIGAgIC0gJHtpc3N1ZS5tZXNzYWdlfSR7cGF0aFN0cn1gO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGAke2NvbnRleHRQcmVmaXh9TXVsdGlwbGUgdmFsaWRhdGlvbiBlcnJvcnM6XFxuJHtlcnJvck1lc3NhZ2VzLmpvaW4oJ1xcbicpfWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgY29uZmlndXJhdGlvbiB3aXRoIGVuaGFuY2VkIGVycm9yIGNvbnRleHQuXHJcbiAgICogQHBhcmFtIHNjaGVtYSBUaGUgWm9kIHNjaGVtYSB0byB2YWxpZGF0ZSBhZ2FpbnN0XHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB2YWxpZGF0ZVxyXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvZiB0aGUgY29uZmlndXJhdGlvbiAoZS5nLiwgJ2Vudmlyb25tZW50JywgJ3NlY3JldHMtbWFuYWdlcicpXHJcbiAgICogQHJldHVybnMgVGhlIHZhbGlkYXRlZCBjb25maWd1cmF0aW9uXHJcbiAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3Igd2l0aCBlbmhhbmNlZCBjb250ZXh0XHJcbiAgICovXHJcbiAgc3RhdGljIHZhbGlkYXRlQ29uZmlndXJhdGlvbjxUIGV4dGVuZHMgWm9kVHlwZT4oXHJcbiAgICBzY2hlbWE6IFQsXHJcbiAgICB2YWx1ZTogdW5rbm93bixcclxuICAgIHNvdXJjZTogc3RyaW5nLFxyXG4gICk6IFR5cGVPZjxUPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShzY2hlbWEsIHZhbHVlLCBgJHtzb3VyY2V9IGNvbmZpZ3VyYXRpb25gKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xyXG4gICAgICAgIC8vIEVuaGFuY2UgdGhlIGVycm9yIHdpdGggc291cmNlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgY29uc3QgZW5oYW5jZWRNZXNzYWdlID0gYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yIHNvdXJjZSAnJHtzb3VyY2V9JzogJHtlcnJvci5tZXNzYWdlfWA7XHJcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlbmhhbmNlZE1lc3NhZ2UsIGVycm9yLnZhbGlkYXRpb25FcnJvcnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlnLWF3cy9zcmMvdXRpbHMvdmFsaWRhdGlvbi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUFxRDtBQUVyRDs7O0dBR0c7QUFDSCxNQUFhLG9CQUFvQjtJQUMvQjs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FDYixNQUFTLEVBQ1QsS0FBYyxFQUNkLE9BQWdCO1FBRWhCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE1BQU0sY0FBYyxHQUFHLE9BQU87WUFDNUIsQ0FBQyxDQUFDLHVDQUF1QyxPQUFPLEVBQUU7WUFDbEQsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDO1FBRXRDLE1BQU0sSUFBSSwwQkFBZSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUNqQixNQUFTLEVBQ1QsS0FBYztRQUVkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdkMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFL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QUFnQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQzFCLE1BQVMsRUFDVCxLQUFjLEVBQ2QsTUFBYztRQUVkLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksMEJBQWUsRUFBRSxDQUFDO2dCQUNyQyw0Q0FBNEM7Z0JBQzVDLE1BQU0sZUFBZSxHQUFHLCtDQUErQyxNQUFNLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuRyxNQUFNLElBQUksMEJBQWUsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDckUsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZJRCxvREF1SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFpvZFR5cGUsIFpvZEVycm9yLCBUeXBlT2YgfSBmcm9tICd6b2QnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvaW5kZXguanMnO1xyXG5cclxuLyoqXHJcbiAqIEZyYW1ld29yay1hZ25vc3RpYyB2YWxpZGF0aW9uIHV0aWxpdHkgZm9yIGNvbmZpZ3VyYXRpb24gdmFsdWVzLlxyXG4gKiBQcm92aWRlcyBtZXRob2RzIGZvciB2YWxpZGF0aW5nIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyBhZ2FpbnN0IFpvZCBzY2hlbWFzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmZpZ1ZhbGlkYXRpb25VdGlsIHtcclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgYSB2YWx1ZSBhZ2FpbnN0IGEgWm9kIHNjaGVtYS5cclxuICAgKiBAcGFyYW0gc2NoZW1hIFRoZSBab2Qgc2NoZW1hIHRvIHZhbGlkYXRlIGFnYWluc3RcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHZhbGlkYXRlXHJcbiAgICogQHBhcmFtIGNvbnRleHQgT3B0aW9uYWwgY29udGV4dCBmb3IgZXJyb3IgbWVzc2FnZXNcclxuICAgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGFuZCB0cmFuc2Zvcm1lZCB2YWx1ZVxyXG4gICAqIEB0aHJvd3MgVmFsaWRhdGlvbkVycm9yIGlmIHZhbGlkYXRpb24gZmFpbHNcclxuICAgKi9cclxuICBzdGF0aWMgdmFsaWRhdGU8VCBleHRlbmRzIFpvZFR5cGU+KFxyXG4gICAgc2NoZW1hOiBULFxyXG4gICAgdmFsdWU6IHVua25vd24sXHJcbiAgICBjb250ZXh0Pzogc3RyaW5nLFxyXG4gICk6IFR5cGVPZjxUPiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZm9ybWF0VmFsaWRhdGlvbkVycm9ycyhyZXN1bHQuZXJyb3IpO1xyXG4gICAgY29uc3QgY29udGV4dE1lc3NhZ2UgPSBjb250ZXh0XHJcbiAgICAgID8gYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yICR7Y29udGV4dH1gXHJcbiAgICAgIDogJ0NvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQnO1xyXG5cclxuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoY29udGV4dE1lc3NhZ2UsIGVycm9ycyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYWZlbHkgdmFsaWRhdGVzIGEgdmFsdWUgYWdhaW5zdCBhIFpvZCBzY2hlbWEgd2l0aG91dCB0aHJvd2luZy5cclxuICAgKiBAcGFyYW0gc2NoZW1hIFRoZSBab2Qgc2NoZW1hIHRvIHZhbGlkYXRlIGFnYWluc3RcclxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHZhbGlkYXRlXHJcbiAgICogQHJldHVybnMgT2JqZWN0IHdpdGggc3VjY2VzcyBmbGFnIGFuZCBlaXRoZXIgZGF0YSBvciBlcnJvclxyXG4gICAqL1xyXG4gIHN0YXRpYyBzYWZlVmFsaWRhdGU8VCBleHRlbmRzIFpvZFR5cGU+KFxyXG4gICAgc2NoZW1hOiBULFxyXG4gICAgdmFsdWU6IHVua25vd24sXHJcbiAgKTogeyBzdWNjZXNzOiB0cnVlOyBkYXRhOiBUeXBlT2Y8VD4gfSB8IHsgc3VjY2VzczogZmFsc2U7IGVycm9yOiBWYWxpZGF0aW9uRXJyb3IgfSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuc2FmZVBhcnNlKHZhbHVlKTtcclxuXHJcbiAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LmRhdGEgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmZvcm1hdFZhbGlkYXRpb25FcnJvcnMocmVzdWx0LmVycm9yKTtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0NvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQnLCBlcnJvcnMpO1xyXG5cclxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IGZhbHNlLCBlcnJvcjogdmFsaWRhdGlvbkVycm9yIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXRzIFpvZCB2YWxpZGF0aW9uIGVycm9ycyBpbnRvIGEgc3RydWN0dXJlZCBmb3JtYXQuXHJcbiAgICogQHBhcmFtIGVycm9yIFRoZSBab2RFcnJvciB0byBmb3JtYXRcclxuICAgKiBAcmV0dXJucyBGb3JtYXR0ZWQgZXJyb3Igb2JqZWN0IG9yIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyBmb3JtYXRWYWxpZGF0aW9uRXJyb3JzKGVycm9yOiBab2RFcnJvcik6IHVua25vd24ge1xyXG4gICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBlcnJvciBhdCB0aGUgcm9vdCBsZXZlbCwgcmV0dXJuIGp1c3QgdGhlIG1lc3NhZ2VcclxuICAgIGlmIChlcnJvci5pc3N1ZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdO1xyXG4gICAgICBpZiAoaXNzdWUgJiYgQXJyYXkuaXNBcnJheShpc3N1ZS5wYXRoKSAmJiBpc3N1ZS5wYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9yIG11bHRpcGxlIGVycm9ycyBvciBuZXN0ZWQgcGF0aHMsIGNyZWF0ZSBhIHN0cnVjdHVyZWQgb2JqZWN0XHJcbiAgICByZXR1cm4gZXJyb3IuaXNzdWVzLnJlZHVjZShcclxuICAgICAgKGVycm9ycywgaXNzdWUpID0+IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gaXNzdWUucGF0aC5qb2luKCcuJyk7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcGF0aCB8fCAncm9vdCc7XHJcblxyXG4gICAgICAgIGlmICghZXJyb3JzW2tleV0pIHtcclxuICAgICAgICAgIGVycm9yc1trZXldID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlcnJvcnNba2V5XS5wdXNoKHtcclxuICAgICAgICAgIG1lc3NhZ2U6IGlzc3VlLm1lc3NhZ2UsXHJcbiAgICAgICAgICBjb2RlOiBpc3N1ZS5jb2RlLFxyXG4gICAgICAgICAgcGF0aDogaXNzdWUucGF0aCxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgICAgfSxcclxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgQXJyYXk8eyBtZXNzYWdlOiBzdHJpbmc7IGNvZGU6IHN0cmluZzsgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSB9Pj4sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UgZm9yIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsdXJlcy5cclxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIFpvZEVycm9yIHRvIGNyZWF0ZSBhIG1lc3NhZ2UgZm9yXHJcbiAgICogQHBhcmFtIGNvbnRleHQgT3B0aW9uYWwgY29udGV4dCBmb3IgdGhlIGVycm9yXHJcbiAgICogQHJldHVybnMgRGV0YWlsZWQgZXJyb3IgbWVzc2FnZSBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgY3JlYXRlRGV0YWlsZWRFcnJvck1lc3NhZ2UoZXJyb3I6IFpvZEVycm9yLCBjb250ZXh0Pzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbnRleHRQcmVmaXggPSBjb250ZXh0ID8gYCR7Y29udGV4dH06IGAgOiAnJztcclxuXHJcbiAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBjb25zdCBpc3N1ZSA9IGVycm9yLmlzc3Vlc1swXTtcclxuICAgICAgaWYgKGlzc3VlKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aFN0ciA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGAgYXQgJyR7aXNzdWUucGF0aC5qb2luKCcuJyl9J2AgOiAnJztcclxuICAgICAgICByZXR1cm4gYCR7Y29udGV4dFByZWZpeH0ke2lzc3VlLm1lc3NhZ2V9JHtwYXRoU3RyfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gZXJyb3IuaXNzdWVzLm1hcCgoaXNzdWUpID0+IHtcclxuICAgICAgY29uc3QgcGF0aFN0ciA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGAgYXQgJyR7aXNzdWUucGF0aC5qb2luKCcuJyl9J2AgOiAnJztcclxuICAgICAgcmV0dXJuIGAgIC0gJHtpc3N1ZS5tZXNzYWdlfSR7cGF0aFN0cn1gO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGAke2NvbnRleHRQcmVmaXh9TXVsdGlwbGUgdmFsaWRhdGlvbiBlcnJvcnM6XFxuJHtlcnJvck1lc3NhZ2VzLmpvaW4oJ1xcbicpfWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgY29uZmlndXJhdGlvbiB3aXRoIGVuaGFuY2VkIGVycm9yIGNvbnRleHQuXHJcbiAgICogQHBhcmFtIHNjaGVtYSBUaGUgWm9kIHNjaGVtYSB0byB2YWxpZGF0ZSBhZ2FpbnN0XHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB2YWxpZGF0ZVxyXG4gICAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvZiB0aGUgY29uZmlndXJhdGlvbiAoZS5nLiwgJ2Vudmlyb25tZW50JywgJ3NlY3JldHMtbWFuYWdlcicpXHJcbiAgICogQHJldHVybnMgVGhlIHZhbGlkYXRlZCBjb25maWd1cmF0aW9uXHJcbiAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3Igd2l0aCBlbmhhbmNlZCBjb250ZXh0XHJcbiAgICovXHJcbiAgc3RhdGljIHZhbGlkYXRlQ29uZmlndXJhdGlvbjxUIGV4dGVuZHMgWm9kVHlwZT4oXHJcbiAgICBzY2hlbWE6IFQsXHJcbiAgICB2YWx1ZTogdW5rbm93bixcclxuICAgIHNvdXJjZTogc3RyaW5nLFxyXG4gICk6IFR5cGVPZjxUPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShzY2hlbWEsIHZhbHVlLCBgJHtzb3VyY2V9IGNvbmZpZ3VyYXRpb25gKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xyXG4gICAgICAgIC8vIEVuaGFuY2UgdGhlIGVycm9yIHdpdGggc291cmNlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgY29uc3QgZW5oYW5jZWRNZXNzYWdlID0gYENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlsZWQgZm9yIHNvdXJjZSAnJHtzb3VyY2V9JzogJHtlcnJvci5tZXNzYWdlfWA7XHJcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlbmhhbmNlZE1lc3NhZ2UsIGVycm9yLnZhbGlkYXRpb25FcnJvcnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRocm93IGVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -296,8 +296,18 @@ let AsyncConfigHelperService = AsyncConfigHelperService_1 = class AsyncConfigHel
296
296
  this.logger.warn('Lazy factory called while loading, returning empty config');
297
297
  return {};
298
298
  }
299
- // Start loading configuration
300
- loadingPromise = this.loadConfigurationLazily();
299
+ // Start loading configuration and update cache when complete
300
+ loadingPromise = this.loadConfigurationLazily()
301
+ .then((config) => {
302
+ cachedConfig = config;
303
+ loadingPromise = null;
304
+ return config;
305
+ })
306
+ .catch((error) => {
307
+ loadingPromise = null;
308
+ this.logger.error('Lazy loading failed:', error);
309
+ return {};
310
+ });
301
311
  // Return empty config for now (will be populated on next call)
302
312
  this.logger.debug('Started lazy loading, returning empty config');
303
313
  return {};
@@ -312,10 +322,8 @@ let AsyncConfigHelperService = AsyncConfigHelperService_1 = class AsyncConfigHel
312
322
  this.logger.debug('Loading configuration lazily');
313
323
  const awsFactory = await this.createAsyncConfigFactory();
314
324
  const config = awsFactory();
315
- // Cache the configuration
316
- const cachedConfig = config;
317
325
  this.logger.debug('Lazy configuration loading completed');
318
- return cachedConfig;
326
+ return config;
319
327
  }
320
328
  catch (error) {
321
329
  const lazyError = error instanceof Error ? error : new Error(String(error));
@@ -355,4 +363,4 @@ exports.AsyncConfigHelperService = AsyncConfigHelperService = AsyncConfigHelperS
355
363
  __param(1, (0, common_1.Inject)(nestjs_config_integration_module_1.NESTJS_CONFIG_AWS_INTEGRATION_OPTIONS)),
356
364
  __metadata("design:paramtypes", [factory_registration_service_1.FactoryRegistrationService, Object])
357
365
  ], AsyncConfigHelperService);
358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtY29uZmlnLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL2FzeW5jLWNvbmZpZy1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXNFO0FBRXRFLGlGQUE0RTtBQUU1RSwwRkFBNEY7QUFFNUY7Ozs7R0FJRztBQUVJLElBQU0sd0JBQXdCLGdDQUE5QixNQUFNLHdCQUF3QjtJQUloQjtJQUVBO0lBTEYsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLDBCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBFLFlBQ21CLDBCQUFzRCxFQUV0RCxVQUE4QixFQUFFO1FBRmhDLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFFdEQsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7SUFDaEQsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLHdCQUF3QjtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQztZQUNILCtDQUErQztZQUMvQyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRS9FLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztnQkFDdkUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsTUFBTSxlQUFlLEdBQWtCLEdBQUcsRUFBRTtnQkFDMUMsTUFBTSxjQUFjLEdBQXdCLEVBQUUsQ0FBQztnQkFFL0MsS0FBSyxNQUFNLE9BQU8sSUFB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LEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsRixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YsQ0FBQTtBQTVYWSw0REFBd0I7bUNBQXhCLHdCQUF3QjtJQURwQyxJQUFBLG1CQUFVLEdBQUU7SUFNUixXQUFBLElBQUEsaUJBQVEsR0FBRSxDQUFBO0lBQUUsV0FBQSxJQUFBLGVBQU0sRUFBQyx3RUFBcUMsQ0FBQyxDQUFBO3FDQURiLHlEQUEwQjtHQUo5RCx3QkFBd0IsQ0E0WHBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTG9nZ2VyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQG5lc3Rqcy9jb21tb24nO1xyXG5pbXBvcnQgeyBDb25maWdGYWN0b3J5LCBDb25maWdNb2R1bGVPcHRpb25zIH0gZnJvbSAnQG5lc3Rqcy9jb25maWcnO1xyXG5pbXBvcnQgeyBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZSB9IGZyb20gJy4vZmFjdG9yeS1yZWdpc3RyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVncmF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZWdyYXRpb24tb3B0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBORVNUSlNfQ09ORklHX0FXU19JTlRFR1JBVElPTl9PUFRJT05TIH0gZnJvbSAnLi4vbmVzdGpzLWNvbmZpZy1pbnRlZ3JhdGlvbi5tb2R1bGUnO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBzZXJ2aWNlIGZvciBhc3luYyBjb25maWd1cmF0aW9uIHN1cHBvcnQgd2l0aCBAbmVzdGpzL2NvbmZpZy5cclxuICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3JpZXNcclxuICogYW5kIG1hbmFnaW5nIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGluIGFzeW5jIHNjZW5hcmlvcy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFzeW5jQ29uZmlnSGVscGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBuZXcgTG9nZ2VyKEFzeW5jQ29uZmlnSGVscGVyU2VydmljZS5uYW1lKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlOiBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkVTVEpTX0NPTkZJR19BV1NfSU5URUdSQVRJT05fT1BUSU9OUykgXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEludGVncmF0aW9uT3B0aW9ucyA9IHt9XHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3J5IHRoYXQgbG9hZHMgQVdTIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogVGhpcyBmYWN0b3J5IGNhbiBiZSB1c2VkIHdpdGggQG5lc3Rqcy9jb25maWcncyBsb2FkIGFycmF5LlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNvbmZpZ3VyYXRpb24gZmFjdG9yeVxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUFzeW5jQ29uZmlnRmFjdG9yeSgpOiBQcm9taXNlPENvbmZpZ0ZhY3Rvcnk+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBhc3luYyBjb25maWd1cmF0aW9uIGZhY3RvcnknKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gUmVnaXN0ZXIgQVdTIGZhY3RvcmllcyBhbmQgZ2V0IHRoZSBmaXJzdCBvbmVcclxuICAgICAgY29uc3QgYXdzRmFjdG9yaWVzID0gYXdhaXQgdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5yZWdpc3RlckZhY3RvcmllcygpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGF3c0ZhY3Rvcmllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdObyBBV1MgZmFjdG9yaWVzIGF2YWlsYWJsZSwgY3JlYXRpbmcgZW1wdHkgZmFjdG9yeScpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiAoe30pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhdGUgYSBjb21iaW5lZCBmYWN0b3J5IHRoYXQgbWVyZ2VzIGFsbCBBV1MgZmFjdG9yaWVzXHJcbiAgICAgIGNvbnN0IGNvbWJpbmVkRmFjdG9yeTogQ29uZmlnRmFjdG9yeSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZENvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAoY29uc3QgZmFjdG9yeSBvZiBhd3NGYWN0b3JpZXMpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnlDb25maWcgPSBmYWN0b3J5KCk7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29tYmluZWRDb25maWcsIGZhY3RvcnlDb25maWcpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEVycm9yIGV4ZWN1dGluZyBBV1MgZmFjdG9yeTpgLCBlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBjb21iaW5lZENvbmZpZztcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGVkIGFzeW5jIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSB3aXRoICR7YXdzRmFjdG9yaWVzLmxlbmd0aH0gQVdTIGZhY3Rvcmllc2ApO1xyXG4gICAgICByZXR1cm4gY29tYmluZWRGYWN0b3J5O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgZmFjdG9yeUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhc3luYyBjb25maWd1cmF0aW9uIGZhY3Rvcnk6JywgZmFjdG9yeUVycm9yKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEhhbmRsZSBlcnJvciBiYXNlZCBvbiBvcHRpb25zXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBmYWN0b3J5RXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBlbXB0eSBmYWN0b3J5IGFzIGZhbGxiYWNrXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignUmV0dXJuaW5nIGVtcHR5IGZhY3RvcnkgZHVlIHRvIEFXUyBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiAoe30pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBmYWN0b3J5RXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgbXVsdGlwbGUgYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgZm9yIG5hbWVzcGFjZXMuXHJcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBzZXBhcmF0ZSBmYWN0b3JpZXMgZm9yIGVhY2ggbmFtZXNwYWNlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gQXJyYXkgb2YgbmFtZXNwYWNlIG5hbWVzXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYXJyYXkgb2YgbmFtZXNwYWNlZCBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUFzeW5jTmFtZXNwYWNlZEZhY3RvcmllcyhuYW1lc3BhY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8Q29uZmlnRmFjdG9yeVtdPiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgYXN5bmMgbmFtZXNwYWNlZCBmYWN0b3JpZXMgZm9yOiAke25hbWVzcGFjZXMuam9pbignLCAnKX1gKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbmFtZXNwYWNlZEZhY3RvcmllcyA9IGF3YWl0IHRoaXMuZmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UucmVnaXN0ZXJOYW1lc3BhY2VkRmFjdG9yaWVzKG5hbWVzcGFjZXMpO1xyXG4gICAgICBcclxuICAgICAgaWYgKG5hbWVzcGFjZWRGYWN0b3JpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignTm8gbmFtZXNwYWNlZCBmYWN0b3JpZXMgYXZhaWxhYmxlLCBjcmVhdGluZyBlbXB0eSBmYWN0b3JpZXMnKTtcclxuICAgICAgICByZXR1cm4gbmFtZXNwYWNlcy5tYXAoKCkgPT4gKCkgPT4gKHt9KSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGVkICR7bmFtZXNwYWNlZEZhY3Rvcmllcy5sZW5ndGh9IGFzeW5jIG5hbWVzcGFjZWQgZmFjdG9yaWVzYCk7XHJcbiAgICAgIHJldHVybiBuYW1lc3BhY2VkRmFjdG9yaWVzO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgbmFtZXNwYWNlZEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhc3luYyBuYW1lc3BhY2VkIGZhY3RvcmllczonLCBuYW1lc3BhY2VkRXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgLy8gSGFuZGxlIGVycm9yIGJhc2VkIG9uIG9wdGlvbnNcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWlsT25Bd3NFcnJvcikge1xyXG4gICAgICAgIHRocm93IG5hbWVzcGFjZWRFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGVtcHR5IGZhY3RvcmllcyBhcyBmYWxsYmFja1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1JldHVybmluZyBlbXB0eSBuYW1lc3BhY2VkIGZhY3RvcmllcyBkdWUgdG8gQVdTIGVycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuIG5hbWVzcGFjZXMubWFwKCgpID0+ICgpID0+ICh7fSkpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBuYW1lc3BhY2VkRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gYXN5bmMgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24uXHJcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGZhY3RvcnkgdGhhdCBjYW4gcmVjZWl2ZSBpbmplY3RlZCBkZXBlbmRlbmNpZXMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGRlcGVuZGVuY2llcyAtIEFycmF5IG9mIGRlcGVuZGVuY3kgdG9rZW5zIHRvIGluamVjdFxyXG4gICAqIEByZXR1cm5zIEFzeW5jIGZhY3RvcnkgZnVuY3Rpb25cclxuICAgKi9cclxuICBjcmVhdGVBc3luY0ZhY3RvcnlXaXRoRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczogYW55W10gPSBbXSk6ICguLi5hcmdzOiBhbnlbXSkgPT4gUHJvbWlzZTxDb25maWdNb2R1bGVPcHRpb25zPiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgYXN5bmMgZmFjdG9yeSB3aXRoICR7ZGVwZW5kZW5jaWVzLmxlbmd0aH0gZGVwZW5kZW5jaWVzYCk7XHJcbiAgICBcclxuICAgIHJldHVybiBhc3luYyAoLi4uX2luamVjdGVkRGVwZW5kZW5jaWVzOiBhbnlbXSk6IFByb21pc2U8Q29uZmlnTW9kdWxlT3B0aW9ucz4gPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmcgYXN5bmMgZmFjdG9yeSB3aXRoIGRlcGVuZGVuY2llcycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENyZWF0ZSBBV1MgY29uZmlndXJhdGlvbiBmYWN0b3J5XHJcbiAgICAgICAgY29uc3QgYXdzRmFjdG9yeSA9IGF3YWl0IHRoaXMuY3JlYXRlQXN5bmNDb25maWdGYWN0b3J5KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQ3JlYXRlIGVuaGFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ09wdGlvbnM6IENvbmZpZ01vZHVsZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBsb2FkOiBbYXdzRmFjdG9yeV0sXHJcbiAgICAgICAgICBpc0dsb2JhbDogdGhpcy5vcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSxcclxuICAgICAgICAgIGNhY2hlOiB0aGlzLm9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmNhY2hlID8/IHRydWUsXHJcbiAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IHRoaXMub3B0aW9ucy5mYWN0b3J5T3B0aW9ucz8uZXhwYW5kVmFyaWFibGVzID8/IHRydWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQXN5bmMgZmFjdG9yeSB3aXRoIGRlcGVuZGVuY2llcyBleGVjdXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnT3B0aW9ucztcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBleGVjdXRlIGFzeW5jIGZhY3Rvcnkgd2l0aCBkZXBlbmRlbmNpZXM6JywgZGVwZW5kZW5jeUVycm9yKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBIYW5kbGUgZXJyb3IgYmFzZWQgb24gb3B0aW9uc1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICAgIHRocm93IGRlcGVuZGVuY3lFcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmV0dXJuIGJhc2ljIGNvbmZpZ3VyYXRpb24gYXMgZmFsbGJhY2tcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignUmV0dXJuaW5nIGJhc2ljIGNvbmZpZ3VyYXRpb24gZHVlIHRvIGRlcGVuZGVuY3kgZXJyb3InKTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxvYWQ6IFtdLFxyXG4gICAgICAgICAgICBpc0dsb2JhbDogdGhpcy5vcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgY2FjaGU6IHRoaXMub3B0aW9ucy5mYWN0b3J5T3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgZXhwYW5kVmFyaWFibGVzOiB0aGlzLm9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmV4cGFuZFZhcmlhYmxlcyA/PyB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhyb3cgZGVwZW5kZW5jeUVycm9yO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIGFzeW5jIGZhY3RvcnkgdGhhdCBtZXJnZXMgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9uLlxyXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmYWN0b3J5IHRoYXQgY2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbiBzb3VyY2VzLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBleGlzdGluZ0ZhY3RvcnkgLSBFeGlzdGluZyBjb25maWd1cmF0aW9uIGZhY3RvcnkgdG8gbWVyZ2Ugd2l0aFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIG1lcmdlZCBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVNZXJnZWRBc3luY0ZhY3RvcnkoZXhpc3RpbmdGYWN0b3J5PzogQ29uZmlnRmFjdG9yeSk6IFByb21pc2U8Q29uZmlnRmFjdG9yeT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0aW5nIG1lcmdlZCBhc3luYyBjb25maWd1cmF0aW9uIGZhY3RvcnknKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIEFXUyBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgICAgY29uc3QgYXdzRmFjdG9yeSA9IGF3YWl0IHRoaXMuY3JlYXRlQXN5bmNDb25maWdGYWN0b3J5KCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBJZiBubyBleGlzdGluZyBmYWN0b3J5LCByZXR1cm4gQVdTIGZhY3RvcnlcclxuICAgICAgaWYgKCFleGlzdGluZ0ZhY3RvcnkpIHtcclxuICAgICAgICByZXR1cm4gYXdzRmFjdG9yeTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYXRlIG1lcmdlZCBmYWN0b3J5XHJcbiAgICAgIGNvbnN0IG1lcmdlZEZhY3Rvcnk6IENvbmZpZ0ZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXdzQ29uZmlnID0gYXdzRmFjdG9yeSgpO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gZXhpc3RpbmdGYWN0b3J5KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gcHJlY2VkZW5jZVxyXG4gICAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSB0aGlzLm9wdGlvbnMucHJlY2VkZW5jZSB8fCAnYXdzLWZpcnN0JztcclxuICAgICAgICBcclxuICAgICAgICBpZiAocHJlY2VkZW5jZSA9PT0gJ2F3cy1maXJzdCcpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLmV4aXN0aW5nQ29uZmlnLCAuLi5hd3NDb25maWcgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByZWNlZGVuY2UgPT09ICdsb2NhbC1maXJzdCcpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLmF3c0NvbmZpZywgLi4uZXhpc3RpbmdDb25maWcgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gbWVyZ2UgLSBkZWVwIG1lcmdlIGJvdGggY29uZmlndXJhdGlvbnNcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRlZXBNZXJnZShleGlzdGluZ0NvbmZpZywgYXdzQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRlZCBtZXJnZWQgYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3J5Jyk7XHJcbiAgICAgIHJldHVybiBtZXJnZWRGYWN0b3J5O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgbWVyZ2VFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgbWVyZ2VkIGFzeW5jIGZhY3Rvcnk6JywgbWVyZ2VFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgZXJyb3IgYmFzZWQgb24gb3B0aW9uc1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbWVyZ2VFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGV4aXN0aW5nIGZhY3Rvcnkgb3IgZW1wdHkgZmFjdG9yeSBhcyBmYWxsYmFja1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1JldHVybmluZyBleGlzdGluZyBmYWN0b3J5IGR1ZSB0byBtZXJnZSBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiBleGlzdGluZ0ZhY3RvcnkgfHwgKCgpID0+ICh7fSkpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBtZXJnZUVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYXN5bmMgbW9kdWxlIHNldHVwLlxyXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggQ29uZmlnTW9kdWxlLmZvclJvb3QoKS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gYmFzZU9wdGlvbnMgLSBCYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmhhbmNlXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gZW5oYW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlQXN5bmNDb25maWdPcHRpb25zKGJhc2VPcHRpb25zOiBDb25maWdNb2R1bGVPcHRpb25zID0ge30pOiBQcm9taXNlPENvbmZpZ01vZHVsZU9wdGlvbnM+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBhc3luYyBjb25maWd1cmF0aW9uIG9wdGlvbnMnKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIEFXUyBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgICAgY29uc3QgYXdzRmFjdG9yeSA9IGF3YWl0IHRoaXMuY3JlYXRlQXN5bmNDb25maWdGYWN0b3J5KCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBNZXJnZSB3aXRoIGV4aXN0aW5nIGxvYWQgYXJyYXlcclxuICAgICAgY29uc3QgZXhpc3RpbmdMb2FkID0gYmFzZU9wdGlvbnMubG9hZCB8fCBbXTtcclxuICAgICAgY29uc3QgZW5oYW5jZWRMb2FkID0gWy4uLmV4aXN0aW5nTG9hZCwgYXdzRmFjdG9yeV07XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhdGUgZW5oYW5jZWQgb3B0aW9uc1xyXG4gICAgICBjb25zdCBlbmhhbmNlZE9wdGlvbnM6IENvbmZpZ01vZHVsZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXHJcbiAgICAgICAgbG9hZDogZW5oYW5jZWRMb2FkLFxyXG4gICAgICAgIGlzR2xvYmFsOiBiYXNlT3B0aW9ucy5pc0dsb2JhbCAhPT0gdW5kZWZpbmVkID8gYmFzZU9wdGlvbnMuaXNHbG9iYWwgOiAodGhpcy5vcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSksXHJcbiAgICAgICAgY2FjaGU6IGJhc2VPcHRpb25zLmNhY2hlICE9PSB1bmRlZmluZWQgPyBiYXNlT3B0aW9ucy5jYWNoZSA6ICh0aGlzLm9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmNhY2hlID8/IHRydWUpLFxyXG4gICAgICAgIGV4cGFuZFZhcmlhYmxlczogYmFzZU9wdGlvbnMuZXhwYW5kVmFyaWFibGVzICE9PSB1bmRlZmluZWQgPyBiYXNlT3B0aW9ucy5leHBhbmRWYXJpYWJsZXMgOiAodGhpcy5vcHRpb25zLmZhY3RvcnlPcHRpb25zPy5leHBhbmRWYXJpYWJsZXMgPz8gdHJ1ZSksXHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRlZCBhc3luYyBjb25maWd1cmF0aW9uIG9wdGlvbnMnKTtcclxuICAgICAgcmV0dXJuIGVuaGFuY2VkT3B0aW9ucztcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnNFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYXN5bmMgY29uZmlndXJhdGlvbiBvcHRpb25zOicsIG9wdGlvbnNFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgZXJyb3IgYmFzZWQgb24gb3B0aW9uc1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgb3B0aW9uc0Vycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gYmFzZSBvcHRpb25zIGFzIGZhbGxiYWNrXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignUmV0dXJuaW5nIGJhc2Ugb3B0aW9ucyBkdWUgdG8gYXN5bmMgZXJyb3InKTtcclxuICAgICAgICByZXR1cm4gYmFzZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRocm93IG9wdGlvbnNFcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIEFXUyBjb25maWd1cmF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYXN5bmMgbG9hZGluZy5cclxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgQVdTIGludGVncmF0aW9uIHNob3VsZCBiZSBlbmFibGVkLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGF2YWlsYWJpbGl0eSBzdGF0dXNcclxuICAgKi9cclxuICBhc3luYyBjaGVja0FzeW5jQXZhaWxhYmlsaXR5KCk6IFByb21pc2U8e1xyXG4gICAgaXNBdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgICBmYWN0b3JpZXNDb3VudDogbnVtYmVyO1xyXG4gICAgZXJyb3JzOiBzdHJpbmdbXTtcclxuICB9PiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ2hlY2tpbmcgYXN5bmMgY29uZmlndXJhdGlvbiBhdmFpbGFiaWxpdHknKTtcclxuICAgIFxyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXHJcbiAgICAgIGZhY3Rvcmllc0NvdW50OiAwLFxyXG4gICAgICBlcnJvcnM6IFtdIGFzIHN0cmluZ1tdXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyeSB0byByZWdpc3RlciBmYWN0b3JpZXMgdG8gY2hlY2sgYXZhaWxhYmlsaXR5XHJcbiAgICAgIGNvbnN0IGZhY3RvcmllcyA9IGF3YWl0IHRoaXMuZmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UucmVnaXN0ZXJGYWN0b3JpZXMoKTtcclxuICAgICAgXHJcbiAgICAgIHN0YXR1cy5pc0F2YWlsYWJsZSA9IGZhY3Rvcmllcy5sZW5ndGggPiAwO1xyXG4gICAgICBzdGF0dXMuZmFjdG9yaWVzQ291bnQgPSBmYWN0b3JpZXMubGVuZ3RoO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEFzeW5jIGF2YWlsYWJpbGl0eSBjaGVjazogYXZhaWxhYmxlPSR7c3RhdHVzLmlzQXZhaWxhYmxlfSwgZmFjdG9yaWVzPSR7c3RhdHVzLmZhY3Rvcmllc0NvdW50fWApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgYXZhaWxhYmlsaXR5RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHN0YXR1cy5lcnJvcnMucHVzaChhdmFpbGFiaWxpdHlFcnJvci5tZXNzYWdlKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0FzeW5jIGF2YWlsYWJpbGl0eSBjaGVjayBmYWlsZWQ6JywgYXZhaWxhYmlsaXR5RXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgbG9hZHMgY29uZmlndXJhdGlvbiBvbi1kZW1hbmQuXHJcbiAgICogVGhpcyBmYWN0b3J5IGRlbGF5cyBBV1MgY29uZmlndXJhdGlvbiBsb2FkaW5nIHVudGlsIGl0J3MgYWN0dWFsbHkgbmVlZGVkLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIENvbmZpZ3VyYXRpb24gZmFjdG9yeSB3aXRoIGxhenkgbG9hZGluZ1xyXG4gICAqL1xyXG4gIGNyZWF0ZUxhenlBc3luY0ZhY3RvcnkoKTogQ29uZmlnRmFjdG9yeSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRpbmcgbGF6eSBhc3luYyBjb25maWd1cmF0aW9uIGZhY3RvcnknKTtcclxuICAgIFxyXG4gICAgbGV0IGNhY2hlZENvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xyXG4gICAgbGV0IGxvYWRpbmdQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHwgbnVsbCA9IG51bGw7XHJcbiAgICBcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIC8vIFJldHVybiBjYWNoZWQgY29uZmlnIGlmIGF2YWlsYWJsZVxyXG4gICAgICBpZiAoY2FjaGVkQ29uZmlnICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZENvbmZpZztcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gSWYgYWxyZWFkeSBsb2FkaW5nLCB3YWl0IGZvciB0aGUgcHJvbWlzZVxyXG4gICAgICBpZiAobG9hZGluZ1Byb21pc2UpIHtcclxuICAgICAgICAvLyBGb3Igc3luY2hyb25vdXMgZmFjdG9yeSwgd2UgY2FuJ3Qgd2FpdCBmb3IgYXN5bmMgb3BlcmF0aW9uc1xyXG4gICAgICAgIC8vIFJldHVybiBlbXB0eSBjb25maWcgYW5kIGxldCB0aGUgcHJvbWlzZSByZXNvbHZlIGluIGJhY2tncm91bmRcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdMYXp5IGZhY3RvcnkgY2FsbGVkIHdoaWxlIGxvYWRpbmcsIHJldHVybmluZyBlbXB0eSBjb25maWcnKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFN0YXJ0IGxvYWRpbmcgY29uZmlndXJhdGlvblxyXG4gICAgICBsb2FkaW5nUHJvbWlzZSA9IHRoaXMubG9hZENvbmZpZ3VyYXRpb25MYXppbHkoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBlbXB0eSBjb25maWcgZm9yIG5vdyAod2lsbCBiZSBwb3B1bGF0ZWQgb24gbmV4dCBjYWxsKVxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU3RhcnRlZCBsYXp5IGxvYWRpbmcsIHJldHVybmluZyBlbXB0eSBjb25maWcnKTtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgY29uZmlndXJhdGlvbiBsYXppbHkgZm9yIHRoZSBsYXp5IGZhY3RvcnkuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY29uZmlndXJhdGlvbiBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkQ29uZmlndXJhdGlvbkxhemlseSgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIGNvbmZpZ3VyYXRpb24gbGF6aWx5Jyk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBhd3NGYWN0b3J5ID0gYXdhaXQgdGhpcy5jcmVhdGVBc3luY0NvbmZpZ0ZhY3RvcnkoKTtcclxuICAgICAgY29uc3QgY29uZmlnID0gYXdzRmFjdG9yeSgpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2FjaGUgdGhlIGNvbmZpZ3VyYXRpb25cclxuICAgICAgY29uc3QgY2FjaGVkQ29uZmlnID0gY29uZmlnO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xhenkgY29uZmlndXJhdGlvbiBsb2FkaW5nIGNvbXBsZXRlZCcpO1xyXG4gICAgICByZXR1cm4gY2FjaGVkQ29uZmlnO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgbGF6eUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignTGF6eSBjb25maWd1cmF0aW9uIGxvYWRpbmcgZmFpbGVkOicsIGxhenlFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gZW1wdHkgY29uZmlnIG9uIGVycm9yXHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZXAgbWVyZ2UgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cy5cclxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGFyZ2V0IG9iamVjdFxyXG4gICAqIEBwYXJhbSBzb3VyY2UgLSBTb3VyY2Ugb2JqZWN0XHJcbiAgICogQHJldHVybnMgTWVyZ2VkIG9iamVjdFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVlcE1lcmdlKHRhcmdldDogUmVjb3JkPHN0cmluZywgYW55Piwgc291cmNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLnRhcmdldCB9O1xyXG5cclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcclxuICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdFtrZXldICYmIHR5cGVvZiByZXN1bHRba2V5XSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocmVzdWx0W2tleV0pKSB7XHJcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuZGVlcE1lcmdlKHJlc3VsdFtrZXldLCB2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0geyAuLi52YWx1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbn0iXX0=
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtY29uZmlnLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2ludGVncmF0aW9uL3NlcnZpY2VzL2FzeW5jLWNvbmZpZy1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQXNFO0FBRXRFLGlGQUE0RTtBQUU1RSwwRkFBNEY7QUFFNUY7Ozs7R0FJRztBQUVJLElBQU0sd0JBQXdCLGdDQUE5QixNQUFNLHdCQUF3QjtJQUloQjtJQUVBO0lBTEYsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLDBCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBFLFlBQ21CLDBCQUFzRCxFQUV0RCxVQUE4QixFQUFFO1FBRmhDLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7UUFFdEQsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7SUFDaEQsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLHdCQUF3QjtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQztZQUNILCtDQUErQztZQUMvQyxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRS9FLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztnQkFDdkUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFFRCwwREFBMEQ7WUFDMUQsTUFBTSxlQUFlLEdBQWtCLEdBQUcsRUFBRTtnQkFDMUMsTUFBTSxjQUFjLEdBQXdCLEVBQUUsQ0FBQztnQkFFL0MsS0FBSyxNQUFNLE9BQU8sSUFB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QURwQyxJQUFBLG1CQUFVLEdBQUU7SUFNUixXQUFBLElBQUEsaUJBQVEsR0FBRSxDQUFBO0lBQUUsV0FBQSxJQUFBLGVBQU0sRUFBQyx3RUFBcUMsQ0FBQyxDQUFBO3FDQURiLHlEQUEwQjtHQUo5RCx3QkFBd0IsQ0FtWXBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTG9nZ2VyLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQG5lc3Rqcy9jb21tb24nO1xyXG5pbXBvcnQgeyBDb25maWdGYWN0b3J5LCBDb25maWdNb2R1bGVPcHRpb25zIH0gZnJvbSAnQG5lc3Rqcy9jb25maWcnO1xyXG5pbXBvcnQgeyBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZSB9IGZyb20gJy4vZmFjdG9yeS1yZWdpc3RyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEludGVncmF0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaW50ZWdyYXRpb24tb3B0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBORVNUSlNfQ09ORklHX0FXU19JTlRFR1JBVElPTl9PUFRJT05TIH0gZnJvbSAnLi4vbmVzdGpzLWNvbmZpZy1pbnRlZ3JhdGlvbi5tb2R1bGUnO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBzZXJ2aWNlIGZvciBhc3luYyBjb25maWd1cmF0aW9uIHN1cHBvcnQgd2l0aCBAbmVzdGpzL2NvbmZpZy5cclxuICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3JpZXNcclxuICogYW5kIG1hbmFnaW5nIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGluIGFzeW5jIHNjZW5hcmlvcy5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFzeW5jQ29uZmlnSGVscGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBuZXcgTG9nZ2VyKEFzeW5jQ29uZmlnSGVscGVyU2VydmljZS5uYW1lKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3RvcnlSZWdpc3RyYXRpb25TZXJ2aWNlOiBGYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkVTVEpTX0NPTkZJR19BV1NfSU5URUdSQVRJT05fT1BUSU9OUykgXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEludGVncmF0aW9uT3B0aW9ucyA9IHt9XHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3J5IHRoYXQgbG9hZHMgQVdTIGNvbmZpZ3VyYXRpb24uXHJcbiAgICogVGhpcyBmYWN0b3J5IGNhbiBiZSB1c2VkIHdpdGggQG5lc3Rqcy9jb25maWcncyBsb2FkIGFycmF5LlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNvbmZpZ3VyYXRpb24gZmFjdG9yeVxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUFzeW5jQ29uZmlnRmFjdG9yeSgpOiBQcm9taXNlPENvbmZpZ0ZhY3Rvcnk+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBhc3luYyBjb25maWd1cmF0aW9uIGZhY3RvcnknKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gUmVnaXN0ZXIgQVdTIGZhY3RvcmllcyBhbmQgZ2V0IHRoZSBmaXJzdCBvbmVcclxuICAgICAgY29uc3QgYXdzRmFjdG9yaWVzID0gYXdhaXQgdGhpcy5mYWN0b3J5UmVnaXN0cmF0aW9uU2VydmljZS5yZWdpc3RlckZhY3RvcmllcygpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGF3c0ZhY3Rvcmllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdObyBBV1MgZmFjdG9yaWVzIGF2YWlsYWJsZSwgY3JlYXRpbmcgZW1wdHkgZmFjdG9yeScpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiAoe30pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhdGUgYSBjb21iaW5lZCBmYWN0b3J5IHRoYXQgbWVyZ2VzIGFsbCBBV1MgZmFjdG9yaWVzXHJcbiAgICAgIGNvbnN0IGNvbWJpbmVkRmFjdG9yeTogQ29uZmlnRmFjdG9yeSA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBjb21iaW5lZENvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZvciAoY29uc3QgZmFjdG9yeSBvZiBhd3NGYWN0b3JpZXMpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnlDb25maWcgPSBmYWN0b3J5KCk7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29tYmluZWRDb25maWcsIGZhY3RvcnlDb25maWcpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYEVycm9yIGV4ZWN1dGluZyBBV1MgZmFjdG9yeTpgLCBlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBjb21iaW5lZENvbmZpZztcclxuICAgICAgfTtcclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGVkIGFzeW5jIGNvbmZpZ3VyYXRpb24gZmFjdG9yeSB3aXRoICR7YXdzRmFjdG9yaWVzLmxlbmd0aH0gQVdTIGZhY3Rvcmllc2ApO1xyXG4gICAgICByZXR1cm4gY29tYmluZWRGYWN0b3J5O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgZmFjdG9yeUVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhc3luYyBjb25maWd1cmF0aW9uIGZhY3Rvcnk6JywgZmFjdG9yeUVycm9yKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEhhbmRsZSBlcnJvciBiYXNlZCBvbiBvcHRpb25zXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICB0aHJvdyBmYWN0b3J5RXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBlbXB0eSBmYWN0b3J5IGFzIGZhbGxiYWNrXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignUmV0dXJuaW5nIGVtcHR5IGZhY3RvcnkgZHVlIHRvIEFXUyBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiAoe30pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBmYWN0b3J5RXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgbXVsdGlwbGUgYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3JpZXMgZm9yIG5hbWVzcGFjZXMuXHJcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBzZXBhcmF0ZSBmYWN0b3JpZXMgZm9yIGVhY2ggbmFtZXNwYWNlLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBuYW1lc3BhY2VzIC0gQXJyYXkgb2YgbmFtZXNwYWNlIG5hbWVzXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYXJyYXkgb2YgbmFtZXNwYWNlZCBjb25maWd1cmF0aW9uIGZhY3Rvcmllc1xyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUFzeW5jTmFtZXNwYWNlZEZhY3RvcmllcyhuYW1lc3BhY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8Q29uZmlnRmFjdG9yeVtdPiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgYXN5bmMgbmFtZXNwYWNlZCBmYWN0b3JpZXMgZm9yOiAke25hbWVzcGFjZXMuam9pbignLCAnKX1gKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbmFtZXNwYWNlZEZhY3RvcmllcyA9IGF3YWl0IHRoaXMuZmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UucmVnaXN0ZXJOYW1lc3BhY2VkRmFjdG9yaWVzKG5hbWVzcGFjZXMpO1xyXG4gICAgICBcclxuICAgICAgaWYgKG5hbWVzcGFjZWRGYWN0b3JpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignTm8gbmFtZXNwYWNlZCBmYWN0b3JpZXMgYXZhaWxhYmxlLCBjcmVhdGluZyBlbXB0eSBmYWN0b3JpZXMnKTtcclxuICAgICAgICByZXR1cm4gbmFtZXNwYWNlcy5tYXAoKCkgPT4gKCkgPT4gKHt9KSk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBDcmVhdGVkICR7bmFtZXNwYWNlZEZhY3Rvcmllcy5sZW5ndGh9IGFzeW5jIG5hbWVzcGFjZWQgZmFjdG9yaWVzYCk7XHJcbiAgICAgIHJldHVybiBuYW1lc3BhY2VkRmFjdG9yaWVzO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgbmFtZXNwYWNlZEVycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhc3luYyBuYW1lc3BhY2VkIGZhY3RvcmllczonLCBuYW1lc3BhY2VkRXJyb3IpO1xyXG4gICAgICBcclxuICAgICAgLy8gSGFuZGxlIGVycm9yIGJhc2VkIG9uIG9wdGlvbnNcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWlsT25Bd3NFcnJvcikge1xyXG4gICAgICAgIHRocm93IG5hbWVzcGFjZWRFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGVtcHR5IGZhY3RvcmllcyBhcyBmYWxsYmFja1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1JldHVybmluZyBlbXB0eSBuYW1lc3BhY2VkIGZhY3RvcmllcyBkdWUgdG8gQVdTIGVycm9yJyk7XHJcbiAgICAgICAgcmV0dXJuIG5hbWVzcGFjZXMubWFwKCgpID0+ICgpID0+ICh7fSkpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBuYW1lc3BhY2VkRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW4gYXN5bmMgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24uXHJcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGZhY3RvcnkgdGhhdCBjYW4gcmVjZWl2ZSBpbmplY3RlZCBkZXBlbmRlbmNpZXMuXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGRlcGVuZGVuY2llcyAtIEFycmF5IG9mIGRlcGVuZGVuY3kgdG9rZW5zIHRvIGluamVjdFxyXG4gICAqIEByZXR1cm5zIEFzeW5jIGZhY3RvcnkgZnVuY3Rpb25cclxuICAgKi9cclxuICBjcmVhdGVBc3luY0ZhY3RvcnlXaXRoRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczogYW55W10gPSBbXSk6ICguLi5hcmdzOiBhbnlbXSkgPT4gUHJvbWlzZTxDb25maWdNb2R1bGVPcHRpb25zPiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQ3JlYXRpbmcgYXN5bmMgZmFjdG9yeSB3aXRoICR7ZGVwZW5kZW5jaWVzLmxlbmd0aH0gZGVwZW5kZW5jaWVzYCk7XHJcbiAgICBcclxuICAgIHJldHVybiBhc3luYyAoLi4uX2luamVjdGVkRGVwZW5kZW5jaWVzOiBhbnlbXSk6IFByb21pc2U8Q29uZmlnTW9kdWxlT3B0aW9ucz4gPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdFeGVjdXRpbmcgYXN5bmMgZmFjdG9yeSB3aXRoIGRlcGVuZGVuY2llcycpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENyZWF0ZSBBV1MgY29uZmlndXJhdGlvbiBmYWN0b3J5XHJcbiAgICAgICAgY29uc3QgYXdzRmFjdG9yeSA9IGF3YWl0IHRoaXMuY3JlYXRlQXN5bmNDb25maWdGYWN0b3J5KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQ3JlYXRlIGVuaGFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ09wdGlvbnM6IENvbmZpZ01vZHVsZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBsb2FkOiBbYXdzRmFjdG9yeV0sXHJcbiAgICAgICAgICBpc0dsb2JhbDogdGhpcy5vcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSxcclxuICAgICAgICAgIGNhY2hlOiB0aGlzLm9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmNhY2hlID8/IHRydWUsXHJcbiAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IHRoaXMub3B0aW9ucy5mYWN0b3J5T3B0aW9ucz8uZXhwYW5kVmFyaWFibGVzID8/IHRydWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQXN5bmMgZmFjdG9yeSB3aXRoIGRlcGVuZGVuY2llcyBleGVjdXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnT3B0aW9ucztcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zdCBkZXBlbmRlbmN5RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBleGVjdXRlIGFzeW5jIGZhY3Rvcnkgd2l0aCBkZXBlbmRlbmNpZXM6JywgZGVwZW5kZW5jeUVycm9yKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBIYW5kbGUgZXJyb3IgYmFzZWQgb24gb3B0aW9uc1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFpbE9uQXdzRXJyb3IpIHtcclxuICAgICAgICAgIHRocm93IGRlcGVuZGVuY3lFcnJvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmV0dXJuIGJhc2ljIGNvbmZpZ3VyYXRpb24gYXMgZmFsbGJhY2tcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignUmV0dXJuaW5nIGJhc2ljIGNvbmZpZ3VyYXRpb24gZHVlIHRvIGRlcGVuZGVuY3kgZXJyb3InKTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGxvYWQ6IFtdLFxyXG4gICAgICAgICAgICBpc0dsb2JhbDogdGhpcy5vcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgY2FjaGU6IHRoaXMub3B0aW9ucy5mYWN0b3J5T3B0aW9ucz8uY2FjaGUgPz8gdHJ1ZSxcclxuICAgICAgICAgICAgZXhwYW5kVmFyaWFibGVzOiB0aGlzLm9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmV4cGFuZFZhcmlhYmxlcyA/PyB0cnVlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhyb3cgZGVwZW5kZW5jeUVycm9yO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFuIGFzeW5jIGZhY3RvcnkgdGhhdCBtZXJnZXMgd2l0aCBleGlzdGluZyBjb25maWd1cmF0aW9uLlxyXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBmYWN0b3J5IHRoYXQgY2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbiBzb3VyY2VzLlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBleGlzdGluZ0ZhY3RvcnkgLSBFeGlzdGluZyBjb25maWd1cmF0aW9uIGZhY3RvcnkgdG8gbWVyZ2Ugd2l0aFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIG1lcmdlZCBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgKi9cclxuICBhc3luYyBjcmVhdGVNZXJnZWRBc3luY0ZhY3RvcnkoZXhpc3RpbmdGYWN0b3J5PzogQ29uZmlnRmFjdG9yeSk6IFByb21pc2U8Q29uZmlnRmFjdG9yeT4ge1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NyZWF0aW5nIG1lcmdlZCBhc3luYyBjb25maWd1cmF0aW9uIGZhY3RvcnknKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIEFXUyBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgICAgY29uc3QgYXdzRmFjdG9yeSA9IGF3YWl0IHRoaXMuY3JlYXRlQXN5bmNDb25maWdGYWN0b3J5KCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBJZiBubyBleGlzdGluZyBmYWN0b3J5LCByZXR1cm4gQVdTIGZhY3RvcnlcclxuICAgICAgaWYgKCFleGlzdGluZ0ZhY3RvcnkpIHtcclxuICAgICAgICByZXR1cm4gYXdzRmFjdG9yeTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gQ3JlYXRlIG1lcmdlZCBmYWN0b3J5XHJcbiAgICAgIGNvbnN0IG1lcmdlZEZhY3Rvcnk6IENvbmZpZ0ZhY3RvcnkgPSAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXdzQ29uZmlnID0gYXdzRmFjdG9yeSgpO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlnID0gZXhpc3RpbmdGYWN0b3J5KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gcHJlY2VkZW5jZVxyXG4gICAgICAgIGNvbnN0IHByZWNlZGVuY2UgPSB0aGlzLm9wdGlvbnMucHJlY2VkZW5jZSB8fCAnYXdzLWZpcnN0JztcclxuICAgICAgICBcclxuICAgICAgICBpZiAocHJlY2VkZW5jZSA9PT0gJ2F3cy1maXJzdCcpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLmV4aXN0aW5nQ29uZmlnLCAuLi5hd3NDb25maWcgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByZWNlZGVuY2UgPT09ICdsb2NhbC1maXJzdCcpIHtcclxuICAgICAgICAgIHJldHVybiB7IC4uLmF3c0NvbmZpZywgLi4uZXhpc3RpbmdDb25maWcgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gbWVyZ2UgLSBkZWVwIG1lcmdlIGJvdGggY29uZmlndXJhdGlvbnNcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRlZXBNZXJnZShleGlzdGluZ0NvbmZpZywgYXdzQ29uZmlnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRlZCBtZXJnZWQgYXN5bmMgY29uZmlndXJhdGlvbiBmYWN0b3J5Jyk7XHJcbiAgICAgIHJldHVybiBtZXJnZWRGYWN0b3J5O1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgbWVyZ2VFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgbWVyZ2VkIGFzeW5jIGZhY3Rvcnk6JywgbWVyZ2VFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgZXJyb3IgYmFzZWQgb24gb3B0aW9uc1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgbWVyZ2VFcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGV4aXN0aW5nIGZhY3Rvcnkgb3IgZW1wdHkgZmFjdG9yeSBhcyBmYWxsYmFja1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrVG9Mb2NhbCkge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ1JldHVybmluZyBleGlzdGluZyBmYWN0b3J5IGR1ZSB0byBtZXJnZSBlcnJvcicpO1xyXG4gICAgICAgIHJldHVybiBleGlzdGluZ0ZhY3RvcnkgfHwgKCgpID0+ICh7fSkpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aHJvdyBtZXJnZUVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYXN5bmMgbW9kdWxlIHNldHVwLlxyXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggQ29uZmlnTW9kdWxlLmZvclJvb3QoKS5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gYmFzZU9wdGlvbnMgLSBCYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbmhhbmNlXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gZW5oYW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlQXN5bmNDb25maWdPcHRpb25zKGJhc2VPcHRpb25zOiBDb25maWdNb2R1bGVPcHRpb25zID0ge30pOiBQcm9taXNlPENvbmZpZ01vZHVsZU9wdGlvbnM+IHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBhc3luYyBjb25maWd1cmF0aW9uIG9wdGlvbnMnKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gQ3JlYXRlIEFXUyBjb25maWd1cmF0aW9uIGZhY3RvcnlcclxuICAgICAgY29uc3QgYXdzRmFjdG9yeSA9IGF3YWl0IHRoaXMuY3JlYXRlQXN5bmNDb25maWdGYWN0b3J5KCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBNZXJnZSB3aXRoIGV4aXN0aW5nIGxvYWQgYXJyYXlcclxuICAgICAgY29uc3QgZXhpc3RpbmdMb2FkID0gYmFzZU9wdGlvbnMubG9hZCB8fCBbXTtcclxuICAgICAgY29uc3QgZW5oYW5jZWRMb2FkID0gWy4uLmV4aXN0aW5nTG9hZCwgYXdzRmFjdG9yeV07XHJcbiAgICAgIFxyXG4gICAgICAvLyBDcmVhdGUgZW5oYW5jZWQgb3B0aW9uc1xyXG4gICAgICBjb25zdCBlbmhhbmNlZE9wdGlvbnM6IENvbmZpZ01vZHVsZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXHJcbiAgICAgICAgbG9hZDogZW5oYW5jZWRMb2FkLFxyXG4gICAgICAgIGlzR2xvYmFsOiBiYXNlT3B0aW9ucy5pc0dsb2JhbCAhPT0gdW5kZWZpbmVkID8gYmFzZU9wdGlvbnMuaXNHbG9iYWwgOiAodGhpcy5vcHRpb25zLnJlZ2lzdGVyR2xvYmFsbHkgPz8gdHJ1ZSksXHJcbiAgICAgICAgY2FjaGU6IGJhc2VPcHRpb25zLmNhY2hlICE9PSB1bmRlZmluZWQgPyBiYXNlT3B0aW9ucy5jYWNoZSA6ICh0aGlzLm9wdGlvbnMuZmFjdG9yeU9wdGlvbnM/LmNhY2hlID8/IHRydWUpLFxyXG4gICAgICAgIGV4cGFuZFZhcmlhYmxlczogYmFzZU9wdGlvbnMuZXhwYW5kVmFyaWFibGVzICE9PSB1bmRlZmluZWQgPyBiYXNlT3B0aW9ucy5leHBhbmRWYXJpYWJsZXMgOiAodGhpcy5vcHRpb25zLmZhY3RvcnlPcHRpb25zPy5leHBhbmRWYXJpYWJsZXMgPz8gdHJ1ZSksXHJcbiAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRlZCBhc3luYyBjb25maWd1cmF0aW9uIG9wdGlvbnMnKTtcclxuICAgICAgcmV0dXJuIGVuaGFuY2VkT3B0aW9ucztcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnNFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgYXN5bmMgY29uZmlndXJhdGlvbiBvcHRpb25zOicsIG9wdGlvbnNFcnJvcik7XHJcbiAgICAgIFxyXG4gICAgICAvLyBIYW5kbGUgZXJyb3IgYmFzZWQgb24gb3B0aW9uc1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhaWxPbkF3c0Vycm9yKSB7XHJcbiAgICAgICAgdGhyb3cgb3B0aW9uc0Vycm9yO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBSZXR1cm4gYmFzZSBvcHRpb25zIGFzIGZhbGxiYWNrXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmFsbGJhY2tUb0xvY2FsKSB7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignUmV0dXJuaW5nIGJhc2Ugb3B0aW9ucyBkdWUgdG8gYXN5bmMgZXJyb3InKTtcclxuICAgICAgICByZXR1cm4gYmFzZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHRocm93IG9wdGlvbnNFcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIEFXUyBjb25maWd1cmF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYXN5bmMgbG9hZGluZy5cclxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgQVdTIGludGVncmF0aW9uIHNob3VsZCBiZSBlbmFibGVkLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGF2YWlsYWJpbGl0eSBzdGF0dXNcclxuICAgKi9cclxuICBhc3luYyBjaGVja0FzeW5jQXZhaWxhYmlsaXR5KCk6IFByb21pc2U8e1xyXG4gICAgaXNBdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgICBmYWN0b3JpZXNDb3VudDogbnVtYmVyO1xyXG4gICAgZXJyb3JzOiBzdHJpbmdbXTtcclxuICB9PiB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ2hlY2tpbmcgYXN5bmMgY29uZmlndXJhdGlvbiBhdmFpbGFiaWxpdHknKTtcclxuICAgIFxyXG4gICAgY29uc3Qgc3RhdHVzID0ge1xyXG4gICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXHJcbiAgICAgIGZhY3Rvcmllc0NvdW50OiAwLFxyXG4gICAgICBlcnJvcnM6IFtdIGFzIHN0cmluZ1tdXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFRyeSB0byByZWdpc3RlciBmYWN0b3JpZXMgdG8gY2hlY2sgYXZhaWxhYmlsaXR5XHJcbiAgICAgIGNvbnN0IGZhY3RvcmllcyA9IGF3YWl0IHRoaXMuZmFjdG9yeVJlZ2lzdHJhdGlvblNlcnZpY2UucmVnaXN0ZXJGYWN0b3JpZXMoKTtcclxuICAgICAgXHJcbiAgICAgIHN0YXR1cy5pc0F2YWlsYWJsZSA9IGZhY3Rvcmllcy5sZW5ndGggPiAwO1xyXG4gICAgICBzdGF0dXMuZmFjdG9yaWVzQ291bnQgPSBmYWN0b3JpZXMubGVuZ3RoO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEFzeW5jIGF2YWlsYWJpbGl0eSBjaGVjazogYXZhaWxhYmxlPSR7c3RhdHVzLmlzQXZhaWxhYmxlfSwgZmFjdG9yaWVzPSR7c3RhdHVzLmZhY3Rvcmllc0NvdW50fWApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc3QgYXZhaWxhYmlsaXR5RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHN0YXR1cy5lcnJvcnMucHVzaChhdmFpbGFiaWxpdHlFcnJvci5tZXNzYWdlKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0FzeW5jIGF2YWlsYWJpbGl0eSBjaGVjayBmYWlsZWQ6JywgYXZhaWxhYmlsaXR5RXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgbG9hZHMgY29uZmlndXJhdGlvbiBvbi1kZW1hbmQuXHJcbiAgICogVGhpcyBmYWN0b3J5IGRlbGF5cyBBV1MgY29uZmlndXJhdGlvbiBsb2FkaW5nIHVudGlsIGl0J3MgYWN0dWFsbHkgbmVlZGVkLlxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIENvbmZpZ3VyYXRpb24gZmFjdG9yeSB3aXRoIGxhenkgbG9hZGluZ1xyXG4gICAqL1xyXG4gIGNyZWF0ZUxhenlBc3luY0ZhY3RvcnkoKTogQ29uZmlnRmFjdG9yeSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ3JlYXRpbmcgbGF6eSBhc3luYyBjb25maWd1cmF0aW9uIGZhY3RvcnknKTtcclxuICAgIFxyXG4gICAgbGV0IGNhY2hlZENvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xyXG4gICAgbGV0IGxvYWRpbmdQcm9taXNlOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHwgbnVsbCA9IG51bGw7XHJcbiAgICBcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgIC8vIFJldHVybiBjYWNoZWQgY29uZmlnIGlmIGF2YWlsYWJsZVxyXG4gICAgICBpZiAoY2FjaGVkQ29uZmlnICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlZENvbmZpZztcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gSWYgYWxyZWFkeSBsb2FkaW5nLCB3YWl0IGZvciB0aGUgcHJvbWlzZVxyXG4gICAgICBpZiAobG9hZGluZ1Byb21pc2UpIHtcclxuICAgICAgICAvLyBGb3Igc3luY2hyb25vdXMgZmFjdG9yeSwgd2UgY2FuJ3Qgd2FpdCBmb3IgYXN5bmMgb3BlcmF0aW9uc1xyXG4gICAgICAgIC8vIFJldHVybiBlbXB0eSBjb25maWcgYW5kIGxldCB0aGUgcHJvbWlzZSByZXNvbHZlIGluIGJhY2tncm91bmRcclxuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdMYXp5IGZhY3RvcnkgY2FsbGVkIHdoaWxlIGxvYWRpbmcsIHJldHVybmluZyBlbXB0eSBjb25maWcnKTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIFN0YXJ0IGxvYWRpbmcgY29uZmlndXJhdGlvbiBhbmQgdXBkYXRlIGNhY2hlIHdoZW4gY29tcGxldGVcclxuICAgICAgbG9hZGluZ1Byb21pc2UgPSB0aGlzLmxvYWRDb25maWd1cmF0aW9uTGF6aWx5KClcclxuICAgICAgICAudGhlbigoY29uZmlnKSA9PiB7XHJcbiAgICAgICAgICBjYWNoZWRDb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgICBsb2FkaW5nUHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICByZXR1cm4gY29uZmlnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgbG9hZGluZ1Byb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0xhenkgbG9hZGluZyBmYWlsZWQ6JywgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgLy8gUmV0dXJuIGVtcHR5IGNvbmZpZyBmb3Igbm93ICh3aWxsIGJlIHBvcHVsYXRlZCBvbiBuZXh0IGNhbGwpXHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTdGFydGVkIGxhenkgbG9hZGluZywgcmV0dXJuaW5nIGVtcHR5IGNvbmZpZycpO1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBjb25maWd1cmF0aW9uIGxhemlseSBmb3IgdGhlIGxhenkgZmFjdG9yeS5cclxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBjb25maWd1cmF0aW9uIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGxvYWRDb25maWd1cmF0aW9uTGF6aWx5KCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0xvYWRpbmcgY29uZmlndXJhdGlvbiBsYXppbHknKTtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IGF3c0ZhY3RvcnkgPSBhd2FpdCB0aGlzLmNyZWF0ZUFzeW5jQ29uZmlnRmFjdG9yeSgpO1xyXG4gICAgICBjb25zdCBjb25maWcgPSBhd3NGYWN0b3J5KCk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTGF6eSBjb25maWd1cmF0aW9uIGxvYWRpbmcgY29tcGxldGVkJyk7XHJcbiAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zdCBsYXp5RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdMYXp5IGNvbmZpZ3VyYXRpb24gbG9hZGluZyBmYWlsZWQ6JywgbGF6eUVycm9yKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFJldHVybiBlbXB0eSBjb25maWcgb24gZXJyb3JcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVlcCBtZXJnZSB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzLlxyXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgb2JqZWN0XHJcbiAgICogQHBhcmFtIHNvdXJjZSAtIFNvdXJjZSBvYmplY3RcclxuICAgKiBAcmV0dXJucyBNZXJnZWQgb2JqZWN0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZWVwTWVyZ2UodGFyZ2V0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udGFyZ2V0IH07XHJcblxyXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlKSkge1xyXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICBpZiAocmVzdWx0W2tleV0gJiYgdHlwZW9mIHJlc3VsdFtrZXldID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXN1bHRba2V5XSkpIHtcclxuICAgICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5kZWVwTWVyZ2UocmVzdWx0W2tleV0sIHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB7IC4uLnZhbHVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxufSJdfQ==