@aws-cdk-testing/cli-integ 3.36.3 → 3.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/aws.d.ts CHANGED
@@ -12,6 +12,7 @@ import { SSMClient } from '@aws-sdk/client-ssm';
12
12
  import { SSOClient } from '@aws-sdk/client-sso';
13
13
  import { STSClient } from '@aws-sdk/client-sts';
14
14
  import type { AwsCredentialIdentity } from '@smithy/types';
15
+ export declare const CREDENTIAL_ENV_VARS: string[];
15
16
  export declare class AwsClients {
16
17
  /** A random string to use for temporary resources, like roles (should preferably match unique test-specific randomString) */
17
18
  private readonly randomString;
package/lib/aws.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AwsClients = void 0;
3
+ exports.AwsClients = exports.CREDENTIAL_ENV_VARS = void 0;
4
4
  exports.isStackMissingError = isStackMissingError;
5
5
  exports.isBucketMissingError = isBucketMissingError;
6
6
  exports.retry = retry;
@@ -22,6 +22,11 @@ const client_sso_1 = require("@aws-sdk/client-sso");
22
22
  const client_sts_1 = require("@aws-sdk/client-sts");
23
23
  const credential_providers_1 = require("@aws-sdk/credential-providers");
24
24
  const util_retry_1 = require("@smithy/util-retry");
25
+ exports.CREDENTIAL_ENV_VARS = [
26
+ 'AWS_ACCESS_KEY_ID',
27
+ 'AWS_SECRET_ACCESS_KEY',
28
+ 'AWS_SESSION_TOKEN',
29
+ ];
25
30
  class AwsClients {
26
31
  randomString;
27
32
  region;
@@ -349,4 +354,4 @@ function chainableCredentials(region) {
349
354
  function isAwsCredentialIdentity(x) {
350
355
  return Boolean(x && typeof x === 'object' && x.accessKeyId);
351
356
  }
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdUQSxrREFFQztBQUVELG9EQUVDO0FBVUQsc0JBc0JDO0FBaUJELDBDQUVDO0FBRUQsc0JBRUM7QUFTRCxzREFxQkM7QUFuWkQsMEVBTXdDO0FBQ3hDLDhEQUFvRDtBQUNwRCxvREFBeUU7QUFDekUsa0VBQTZEO0FBQzdELG9EQUFnRDtBQUNoRCxvREFBOEo7QUFDOUosMERBQXNEO0FBQ3RELGtEQU00QjtBQUM1Qiw0RUFBdUU7QUFDdkUsb0RBQWdEO0FBQ2hELG9EQUFnRDtBQUNoRCxvREFBZ0Q7QUFDaEQsb0RBQTZGO0FBQzdGLHdFQUErRTtBQUUvRSxtREFBNkQ7QUFTN0QsTUFBYSxVQUFVO0lBNEJGO0lBQ0Q7SUFDQztJQUNEO0lBOUJYLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQW9CLEVBQUUsTUFBYyxFQUFFLFFBQStCLEVBQUUsTUFBNkI7UUFDbEksT0FBTyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBb0IsRUFBRSxNQUFjLEVBQUUsTUFBNkI7UUFDL0YsT0FBTyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFZ0IsT0FBTyxHQUE0QixFQUFFLENBQUM7SUFDdEMsTUFBTSxDQUFlO0lBRXRCLGNBQWMsQ0FBdUI7SUFDckMsRUFBRSxDQUFXO0lBQ2IsR0FBRyxDQUFZO0lBQ2YsU0FBUyxDQUFrQjtJQUMzQixHQUFHLENBQVk7SUFDZixHQUFHLENBQVk7SUFDZixHQUFHLENBQVk7SUFDZixHQUFHLENBQVk7SUFDZixHQUFHLENBQVk7SUFDZixNQUFNLENBQWU7SUFDckIsR0FBRyxDQUFZO0lB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QkFBbUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUYseURBQXlEO1FBQ3pELGlFQUFpRTtRQUNqRSx1Q0FBdUM7UUFDdkMsT0FBTyxJQUFBLDhCQUFPLEVBQUM7WUFDYixZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUU7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxPQUFPLElBQUEsNENBQXFCLEVBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsQ0FBTTtJQUNyQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIERlbGV0ZVN0YWNrQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kLFxuICB0eXBlIFN0YWNrLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgRHluYW1vREIgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xuaW1wb3J0IHsgRGVsZXRlUmVwb3NpdG9yeUNvbW1hbmQsIEVDUkNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3InO1xuaW1wb3J0IHsgRUNSUFVCTElDQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjci1wdWJsaWMnO1xuaW1wb3J0IHsgRUNTQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcyc7XG5pbXBvcnQgeyBDcmVhdGVSb2xlQ29tbWFuZCwgRGVsZXRlUm9sZUNvbW1hbmQsIERlbGV0ZVJvbGVQb2xpY3lDb21tYW5kLCBJQU1DbGllbnQsIExpc3RSb2xlUG9saWNpZXNDb21tYW5kLCBQdXRSb2xlUG9saWN5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHsgTGFtYmRhQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQge1xuICBTM0NsaWVudCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmQsXG4gIExpc3RPYmplY3RWZXJzaW9uc0NvbW1hbmQsXG4gIHR5cGUgT2JqZWN0SWRlbnRpZmllcixcbiAgRGVsZXRlQnVja2V0Q29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7IFNlY3JldHNNYW5hZ2VyQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgeyBTTlNDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc25zJztcbmltcG9ydCB7IFNTTUNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgU1NPQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNzbyc7XG5pbXBvcnQgeyBBc3N1bWVSb2xlQ29tbWFuZCwgU1RTQ2xpZW50LCBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3RzJztcbmltcG9ydCB7IGZyb21JbmksIGZyb21Ob2RlUHJvdmlkZXJDaGFpbiB9IGZyb20gJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzJztcbmltcG9ydCB0eXBlIHsgQXdzQ3JlZGVudGlhbElkZW50aXR5LCBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciwgTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyB9IGZyb20gJ0BzbWl0aHkvdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgfSBmcm9tICdAc21pdGh5L3V0aWwtcmV0cnknO1xuXG5pbnRlcmZhY2UgQ2xpZW50Q29uZmlnIHtcbiAgcmVhZG9ubHkgY3JlZGVudGlhbHM6IEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyIHwgQXdzQ3JlZGVudGlhbElkZW50aXR5O1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcmV0cnlTdHJhdGVneTogQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3k7XG4gIHJlYWRvbmx5IHJlcXVlc3RIYW5kbGVyPzogTm9kZUh0dHBIYW5kbGVyT3B0aW9ucztcbn1cblxuZXhwb3J0IGNsYXNzIEF3c0NsaWVudHMge1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGZvcklkZW50aXR5KHJhbmRvbVN0cmluZzogc3RyaW5nLCByZWdpb246IHN0cmluZywgaWRlbnRpdHk6IEF3c0NyZWRlbnRpYWxJZGVudGl0eSwgb3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IEF3c0NsaWVudHMocmFuZG9tU3RyaW5nLCByZWdpb24sIG91dHB1dCwgaWRlbnRpdHkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhc3luYyBmb3JSZWdpb24ocmFuZG9tU3RyaW5nOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nLCBvdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgQXdzQ2xpZW50cyhyYW5kb21TdHJpbmcsIHJlZ2lvbiwgb3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xlYW51cDogKCgpID0+IFByb21pc2U8dm9pZD4pW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENsaWVudENvbmZpZztcblxuICBwdWJsaWMgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb246IENsb3VkRm9ybWF0aW9uQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgczM6IFMzQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgZWNyOiBFQ1JDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBlY3JQdWJsaWM6IEVDUlBVQkxJQ0NsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGVjczogRUNTQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvOiBTU09DbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBzc206IFNTTUNsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHNuczogU05TQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgaWFtOiBJQU1DbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IExhbWJkYUNsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHN0czogU1RTQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0c01hbmFnZXI6IFNlY3JldHNNYW5hZ2VyQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgZHluYW1vRGI6IER5bmFtb0RCO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgLyoqIEEgcmFuZG9tIHN0cmluZyB0byB1c2UgZm9yIHRlbXBvcmFyeSByZXNvdXJjZXMsIGxpa2Ugcm9sZXMgKHNob3VsZCBwcmVmZXJhYmx5IG1hdGNoIHVuaXF1ZSB0ZXN0LXNwZWNpZmljIHJhbmRvbVN0cmluZykgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhbmRvbVN0cmluZzogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtLFxuICAgIHB1YmxpYyByZWFkb25seSBpZGVudGl0eT86IEF3c0NyZWRlbnRpYWxJZGVudGl0eSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgY3JlZGVudGlhbHM6IHRoaXMuaWRlbnRpdHkgPz8gY2hhaW5hYmxlQ3JlZGVudGlhbHModGhpcy5yZWdpb24pLFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSg5LCAoYXR0ZW1wdDogbnVtYmVyKSA9PiBhdHRlbXB0ICoqIDUwMCksXG4gICAgfTtcblxuICAgIHRoaXMuY2xvdWRGb3JtYXRpb24gPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuczMgPSBuZXcgUzNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuZWNyID0gbmV3IEVDUkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5lY3JQdWJsaWMgPSBuZXcgRUNSUFVCTElDQ2xpZW50KHsgLi4udGhpcy5jb25maWcsIHJlZ2lvbjogJ3VzLWVhc3QtMScgLyogcHVibGljIGdhbGxlcnkgaXMgb25seSBhdmFpbGFibGUgaW4gdXMtZWFzdC0xICovIH0pO1xuICAgIHRoaXMuZWNzID0gbmV3IEVDU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zc28gPSBuZXcgU1NPQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnNzbSA9IG5ldyBTU01DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuc25zID0gbmV3IFNOU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5pYW0gPSBuZXcgSUFNQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBMYW1iZGFDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuc3RzID0gbmV3IFNUU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zZWNyZXRzTWFuYWdlciA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5keW5hbW9EYiA9IG5ldyBEeW5hbW9EQih0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ2xlYW51cChjbGVhbnVwOiAoKSA9PiBQcm9taXNlPGFueT4pIHtcbiAgICB0aGlzLmNsZWFudXAucHVzaChjbGVhbnVwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCkge1xuICAgIGZvciAoY29uc3QgY2xlYW51cCBvZiB0aGlzLmNsZWFudXApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsZWFudXAoKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLm91dHB1dC53cml0ZShg4pqg77iPIEVycm9yIGR1cmluZyBjbGVhbnVwOiAke2UubWVzc2FnZX1cXG5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbGVhbnVwLnNwbGljZSgwLCB0aGlzLmNsZWFudXAubGVuZ3RoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhY2NvdW50KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gUmVkdWNlICMgb2YgcmV0cmllcywgd2UgdXNlIHRoaXMgYXMgYSBjaXJjdWl0IGJyZWFrZXIgZm9yIGRldGVjdGluZyBuby1jb25maWdcbiAgICBjb25zdCBzdHNDbGllbnQgPSBuZXcgU1RTQ2xpZW50KHtcbiAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZy5jcmVkZW50aWFscyxcbiAgICAgIHJlZ2lvbjogdGhpcy5jb25maWcucmVnaW9uLFxuICAgICAgbWF4QXR0ZW1wdHM6IDIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKGF3YWl0IHN0c0NsaWVudC5zZW5kKG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pKSkuQWNjb3VudCE7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGNsaWVudHMgYWxyZWFkeSBoYXMgYW4gZXN0YWJsaXNoZWQgaWRlbnRpdHkgKHZpYSBhdG1vc3BoZXJlIGZvciBleGFtcGxlKSxcbiAgICogcmV0dXJuIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIG1hcCBhY3RpdmF0aW5nIGl0LlxuICAgKlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIGlkZW50aXR5RW52KCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ID8ge1xuICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6IHRoaXMuaWRlbnRpdHkuYWNjZXNzS2V5SWQsXG4gICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6IHRoaXMuaWRlbnRpdHkuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgQVdTX1NFU1NJT05fVE9LRU46IHRoaXMuaWRlbnRpdHkuc2Vzc2lvblRva2VuISxcblxuICAgICAgLy8gdW5zZXQgYW55IHByZXZpb3VzbHkgdXNlZCBwcm9maWxlIGJlY2F1c2UgdGhlIFNESyB3aWxsIHByZWZlclxuICAgICAgLy8gdGhpcyBvdmVyIHN0YXRpYyBlbnYgY3JlZGVudGlhbHMuIHRoaXMgaXMgcmVsZXZhbnQgZm9yIHRlc3RzIHJ1bm5pbmcgb24gQ29kZUJ1aWxkXG4gICAgICAvLyBiZWNhdXNlIHdlIHVzZSBhIHByb2ZpbGUgYXMgb3VyIG1haW4gY3JlZGVudGlhbHMgc291cmNlLlxuICAgICAgQVdTX1BST0ZJTEU6ICcnLFxuICAgIH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgY3VycmVudCBpZGVudGl0eSBvciBpZGVudGl0eSBwcm92aWRlciB0byBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWRlbnRpYWxzKCkge1xuICAgIGNvbnN0IHggPSB0aGlzLmNvbmZpZy5jcmVkZW50aWFscztcbiAgICBpZiAoaXNBd3NDcmVkZW50aWFsSWRlbnRpdHkoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgICByZXR1cm4geCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVN0YWNrcyguLi5zdGFja05hbWVzOiBzdHJpbmdbXSkge1xuICAgIGlmIChzdGFja05hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIHB1cnBvc2VseSBkbyBhbGwgc3RhY2tzIHNlcmlhbGx5LCBiZWNhdXNlIHRoZXkndmUgYmVlbiBvcmRlcmVkXG4gICAgLy8gdG8gZG8gdGhlIGJvb3RzdHJhcCBzdGFjayBsYXN0LlxuICAgIGZvciAoY29uc3Qgc3RhY2tOYW1lIG9mIHN0YWNrTmFtZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmQoe1xuICAgICAgICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlbGV0ZVN0YWNrQ29tbWFuZCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgcmV0cnkodGhpcy5vdXRwdXQsIGBEZWxldGluZyAke3N0YWNrTmFtZX1gLCByZXRyeS5mb3JTZWNvbmRzKDYwMCksIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5zdGFja1N0YXR1cyhzdGFja05hbWUpO1xuICAgICAgICBpZiAoc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzLmVuZHNXaXRoKCdfRkFJTEVEJykpIHtcbiAgICAgICAgICB0aHJvdyByZXRyeS5hYm9ydChuZXcgRXJyb3IoYCcke3N0YWNrTmFtZX0nIGlzIGluIHN0YXRlICcke3N0YXR1c30nYCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVsZXRlIG9mICcke3N0YWNrTmFtZX0nIG5vdCBjb21wbGV0ZSB5ZXQsIHN0YXR1czogJyR7c3RhdHVzfSdgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YWNrU3RhdHVzKHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICkuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXM7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoaXNTdGFja01pc3NpbmdFcnJvcihlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1wdHlCdWNrZXQoYnVja2V0TmFtZTogc3RyaW5nLCBvcHRpb25zPzogeyBieXBhc3NHb3Zlcm5hbmNlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3Qgb2JqZWN0cyA9IGF3YWl0IHRoaXMuczMuc2VuZChcbiAgICAgIG5ldyBMaXN0T2JqZWN0VmVyc2lvbnNDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRlbGV0ZXMgPSBbLi4uKG9iamVjdHMuVmVyc2lvbnMgfHwgW10pLCAuLi4ob2JqZWN0cy5EZWxldGVNYXJrZXJzIHx8IFtdKV0ucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvYmouVmVyc2lvbklkICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb2JqLktleSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjLnB1c2goeyBLZXk6IG9iai5LZXksIFZlcnNpb25JZDogb2JqLlZlcnNpb25JZCB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iai5LZXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjYy5wdXNoKHsgS2V5OiBvYmouS2V5IH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBPYmplY3RJZGVudGlmaWVyW10pO1xuXG4gICAgaWYgKGRlbGV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuczMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVPYmplY3RzQ29tbWFuZCh7XG4gICAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgT2JqZWN0czogZGVsZXRlcyxcbiAgICAgICAgICBRdWlldDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIEJ5cGFzc0dvdmVybmFuY2VSZXRlbnRpb246IG9wdGlvbnM/LmJ5cGFzc0dvdmVybmFuY2UgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVJbWFnZVJlcG9zaXRvcnkocmVwb3NpdG9yeU5hbWU6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZWNyLnNlbmQoXG4gICAgICBuZXcgRGVsZXRlUmVwb3NpdG9yeUNvbW1hbmQoe1xuICAgICAgICByZXBvc2l0b3J5TmFtZTogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVCdWNrZXQoYnVja2V0TmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW1wdHlCdWNrZXQoYnVja2V0TmFtZSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuczMuc2VuZChcbiAgICAgICAgbmV3IERlbGV0ZUJ1Y2tldENvbW1hbmQoe1xuICAgICAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGlzQnVja2V0TWlzc2luZ0Vycm9yKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJvbGUgdGhhdCB3aWxsIGJlIGNsZWFuZWQgdXAgd2hlbiB0aGUgQXdzQ2xpZW50cyBvYmplY3QgaXMgY2xlYW5lZCB1cFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRlbXBvcmFyeVJvbGUobmFtZVByZWZpeDogc3RyaW5nLCBhc3N1bWVSb2xlUG9saWN5U3RhdGVtZW50czogYW55W10sIHBvbGljeVN0YXRlbWVudHM6IGFueVtdKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmlhbS5zZW5kKG5ldyBDcmVhdGVSb2xlQ29tbWFuZCh7XG4gICAgICBSb2xlTmFtZTogYCR7bmFtZVByZWZpeH0tJHt0aGlzLnJhbmRvbVN0cmluZ31gLFxuICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgU3RhdGVtZW50OiBhc3N1bWVSb2xlUG9saWN5U3RhdGVtZW50cyxcbiAgICAgIH0sIHVuZGVmaW5lZCwgMiksXG4gICAgICBUYWdzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBLZXk6ICdkZWxldGVtZScsXG4gICAgICAgICAgVmFsdWU6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSkpO1xuICAgIGF3YWl0IHRoaXMuaWFtLnNlbmQobmV3IFB1dFJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgIFJvbGVOYW1lOiBgJHtuYW1lUHJlZml4fS0ke3RoaXMucmFuZG9tU3RyaW5nfWAsXG4gICAgICBQb2xpY3lOYW1lOiAnRGVmYXVsdFBvbGljeScsXG4gICAgICBQb2xpY3lEb2N1bWVudDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgIFN0YXRlbWVudDogcG9saWN5U3RhdGVtZW50cyxcbiAgICAgIH0sIHVuZGVmaW5lZCwgMiksXG4gICAgfSkpO1xuXG4gICAgdGhpcy5hZGRDbGVhbnVwKCgpID0+IHRoaXMuZGVsZXRlUm9sZShyZXNwb25zZS5Sb2xlIS5Sb2xlTmFtZSEpKTtcblxuICAgIHJldHVybiByZXNwb25zZS5Sb2xlPy5Bcm4gPz8gJypDcmVhdGVSb2xlIGRpZCBub3QgcmV0dXJuIGFuIEFSTionO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHdhaXRGb3JBc3N1bWVSb2xlKHJvbGVBcm46IHN0cmluZykge1xuICAgIGF3YWl0IHJldHJ5T25NYXRjaGluZ0Vycm9ycyhcbiAgICAgICgpID0+IHRoaXMuc3RzLnNlbmQobmV3IEFzc3VtZVJvbGVDb21tYW5kKHtcbiAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAndGVzdC1leGlzdGVuY2UnLFxuICAgICAgfSkpLFxuICAgICAgWydBY2Nlc3NEZW5pZWQnXSxcbiAgICAgIHJldHJ5LmZvclNlY29uZHMoNjApLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlUm9sZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwb2xpY2llc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5pYW0uc2VuZChuZXcgTGlzdFJvbGVQb2xpY2llc0NvbW1hbmQoe1xuICAgICAgUm9sZU5hbWU6IG5hbWUsXG4gICAgfSkpO1xuXG4gICAgZm9yIChjb25zdCBwb2xpY3lOYW1lIG9mIHBvbGljaWVzUmVzcG9uc2UuUG9saWN5TmFtZXMgPz8gW10pIHtcbiAgICAgIGF3YWl0IHRoaXMuaWFtLnNlbmQobmV3IERlbGV0ZVJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgICAgUm9sZU5hbWU6IG5hbWUsXG4gICAgICAgIFBvbGljeU5hbWU6IHBvbGljeU5hbWUsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoe1xuICAgICAgUm9sZU5hbWU6IG5hbWUsXG4gICAgfSkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWNrTWlzc2luZ0Vycm9yKGU6IEVycm9yKSB7XG4gIHJldHVybiBlLm1lc3NhZ2UuaW5kZXhPZignZG9lcyBub3QgZXhpc3QnKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCdWNrZXRNaXNzaW5nRXJyb3IoZTogRXJyb3IpIHtcbiAgcmV0dXJuIGUubWVzc2FnZS5pbmRleE9mKCdkb2VzIG5vdCBleGlzdCcpID4gLTE7XG59XG5cbi8qKlxuICogUmV0cnkgYW4gYXN5bmMgb3BlcmF0aW9uIHVudGlsIGEgZGVhZGxpbmUgaXMgaGl0LlxuICpcbiAqIFVzZSBgcmV0cnkuZm9yU2Vjb25kcygpYCB0byBjb25zdHJ1Y3QgYSBkZWFkbGluZSByZWxhdGl2ZSB0byByaWdodCBub3cuXG4gKlxuICogRXhjZXB0aW9ucyB3aWxsIGNhdXNlIHRoZSBvcGVyYXRpb24gdG8gcmV0cnkuIFVzZSBgcmV0cnkuYWJvcnRgIHRvIGFubm90YXRlIGFuIGV4Y2VwdGlvblxuICogdG8gc3RvcCB0aGUgcmV0cnkgYW5kIGVuZCBpbiBhIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeTxBPihcbiAgb3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0sXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBkZWFkbGluZTogRGF0ZSxcbiAgYmxvY2s6ICgpID0+IFByb21pc2U8QT4sXG4pOiBQcm9taXNlPEE+IHtcbiAgbGV0IGkgPSAwO1xuICBvdXRwdXQud3JpdGUoYPCfkoggJHtvcGVyYXRpb259XFxuYCk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGJsb2NrKCk7XG4gICAgICBvdXRwdXQud3JpdGUoYPCfkoggJHtvcGVyYXRpb259OiBzdWNjZWVkZWQgYWZ0ZXIgJHtpfSBhdHRlbXB0c1xcbmApO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLmFib3J0IHx8IERhdGUubm93KCkgPiBkZWFkbGluZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29wZXJhdGlvbn06IGRpZCBub3Qgc3VjY2VlZCBhZnRlciAke2l9IGF0dGVtcHRzOiAke2V9YCk7XG4gICAgICB9XG4gICAgICBvdXRwdXQud3JpdGUoYOKPsyAke29wZXJhdGlvbn0gKCR7ZS5tZXNzYWdlfSlcXG5gKTtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYSBkZWFkbGluZSBmb3IgdGhlIGByZXRyeWAgZnVuY3Rpb24gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZS5cbiAqL1xucmV0cnkuZm9yU2Vjb25kcyA9IChzZWNvbmRzOiBudW1iZXIpOiBEYXRlID0+IHtcbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgKyBzZWNvbmRzICogMTAwMCk7XG59O1xuXG4vKipcbiAqIEFubm90YXRlIGFuIGVycm9yIHRvIHN0b3AgdGhlIHJldHJ5aW5nXG4gKi9cbnJldHJ5LmFib3J0ID0gKGU6IEVycm9yKTogRXJyb3IgPT4ge1xuICAoZSBhcyBhbnkpLmFib3J0ID0gdHJ1ZTtcbiAgcmV0dXJuIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb3V0cHV0RnJvbVN0YWNrKGtleTogc3RyaW5nLCBzdGFjazogU3RhY2spOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKHN0YWNrLk91dHB1dHMgPz8gW10pLmZpbmQoKG8pID0+IG8uT3V0cHV0S2V5ID09PSBrZXkpPy5PdXRwdXRWYWx1ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvaykgPT4gc2V0VGltZW91dChvaywgbXMpKTtcbn1cblxuLyoqXG4gKiBSZXRyeSBhbiBhc3luYyBvcGVyYXRpb24gd2l0aCBlcnJvciBmaWx0ZXJpbmcgdW50aWwgYSBkZWFkbGluZSBpcyBoaXQuXG4gKlxuICogVXNlIGByZXRyeS5mb3JTZWNvbmRzKClgIHRvIGNvbnN0cnVjdCBhIGRlYWRsaW5lIHJlbGF0aXZlIHRvIHJpZ2h0IG5vdy5cbiAqXG4gKiBPbmx5IHJldHJpZXMgb24gZXJyb3JzIHdpdGggbWF0Y2hpbmcgbmFtZXMgaW4gZXJyb3JOYW1lcyBhcnJheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5T25NYXRjaGluZ0Vycm9yczxUPihcbiAgb3BlcmF0aW9uOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBlcnJvck5hbWVzOiBzdHJpbmdbXSxcbiAgZGVhZGxpbmU6IERhdGUsXG4gIGludGVydmFsOiBudW1iZXIgPSA1MDAwLFxuKTogUHJvbWlzZTxUPiB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaSsrO1xuICAgICAgcmV0dXJuIGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKERhdGUubm93KCkgPiBkZWFkbGluZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gZGlkIG5vdCBzdWNjZWVkIGFmdGVyICR7aX0gYXR0ZW1wdHM6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghZXJyb3JOYW1lcy5pbmNsdWRlcyhlLm5hbWUpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcChpbnRlcnZhbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoYWluYWJsZUNyZWRlbnRpYWxzKHJlZ2lvbjogc3RyaW5nKTogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIge1xuICBpZiAoKHByb2Nlc3MuZW52LkNPREVCVUlMRF9CVUlMRF9BUk4gfHwgcHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9JRCkgJiYgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUpIHtcbiAgICAvLyBpbiBjb2RlYnVpbGQgd2UgbXVzdCBhc3N1bWUgdGhlIHJvbGUgdGhhdCB0aGUgY2RrIHVzZXNcbiAgICAvLyBvdGhlcndpc2UgY3JlZGVudGlhbHMgd2lsbCBqdXN0IGJlIHBpY2tlZCB1cCBieSB0aGUgbm9ybWFsIHNka1xuICAgIC8vIGhldXJpc3RpY3MgYW5kIGV4cGlyZSBhZnRlciBhbiBob3VyLlxuICAgIHJldHVybiBmcm9tSW5pKHtcbiAgICAgIGNsaWVudENvbmZpZzogeyByZWdpb24gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSBqdXN0IGdldCB3aGF0J3MgZGVmYXVsdFxuICByZXR1cm4gZnJvbU5vZGVQcm92aWRlckNoYWluKHsgY2xpZW50Q29uZmlnOiB7IHJlZ2lvbiB9IH0pO1xufVxuXG5mdW5jdGlvbiBpc0F3c0NyZWRlbnRpYWxJZGVudGl0eSh4OiBhbnkpOiB4IGlzIEF3c0NyZWRlbnRpYWxJZGVudGl0eSB7XG4gIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHguYWNjZXNzS2V5SWQpO1xufVxuIl19
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThUQSxrREFFQztBQUVELG9EQUVDO0FBVUQsc0JBc0JDO0FBaUJELDBDQUVDO0FBRUQsc0JBRUM7QUFTRCxzREFxQkM7QUF6WkQsMEVBTXdDO0FBQ3hDLDhEQUFvRDtBQUNwRCxvREFBeUU7QUFDekUsa0VBQTZEO0FBQzdELG9EQUFnRDtBQUNoRCxvREFBOEo7QUFDOUosMERBQXNEO0FBQ3RELGtEQU00QjtBQUM1Qiw0RUFBdUU7QUFDdkUsb0RBQWdEO0FBQ2hELG9EQUFnRDtBQUNoRCxvREFBZ0Q7QUFDaEQsb0RBQTZGO0FBQzdGLHdFQUErRTtBQUUvRSxtREFBNkQ7QUFTaEQsUUFBQSxtQkFBbUIsR0FBRztJQUNqQyxtQkFBbUI7SUFDbkIsdUJBQXVCO0lBQ3ZCLG1CQUFtQjtDQUNwQixDQUFDO0FBRUYsTUFBYSxVQUFVO0lBNEJGO0lBQ0Q7SUFDQztJQUNEO0lBOUJYLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQW9CLEVBQUUsTUFBYyxFQUFFLFFBQStCLEVBQUUsTUFBNkI7UUFDbEksT0FBTyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBb0IsRUFBRSxNQUFjLEVBQUUsTUFBNkI7UUFDL0YsT0FBTyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFZ0IsT0FBTyxHQUE0QixFQUFFLENBQUM7SUFDdEMsTUFBTSxDQUFlO0lBRXRCLGNBQWMsQ0FBdUI7SUFDckMsRUFBRSxDQUFXO0lBQ2IsR0FBRyxDQUFZO0lBQ2YsU0FBUyxDQUFrQjtJQUMzQixHQUFHLENBQVk7SUFDZixHQUFHLENBQVk7SUFDZixH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Q0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsTUFBYztJQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUYseURBQXlEO1FBQ3pELGlFQUFpRTtRQUNqRSx1Q0FBdUM7UUFDdkMsT0FBTyxJQUFBLDhCQUFPLEVBQUM7WUFDYixZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUU7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxPQUFPLElBQUEsNENBQXFCLEVBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsQ0FBTTtJQUNyQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIERlbGV0ZVN0YWNrQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kLFxuICB0eXBlIFN0YWNrLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgRHluYW1vREIgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xuaW1wb3J0IHsgRGVsZXRlUmVwb3NpdG9yeUNvbW1hbmQsIEVDUkNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3InO1xuaW1wb3J0IHsgRUNSUFVCTElDQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjci1wdWJsaWMnO1xuaW1wb3J0IHsgRUNTQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjcyc7XG5pbXBvcnQgeyBDcmVhdGVSb2xlQ29tbWFuZCwgRGVsZXRlUm9sZUNvbW1hbmQsIERlbGV0ZVJvbGVQb2xpY3lDb21tYW5kLCBJQU1DbGllbnQsIExpc3RSb2xlUG9saWNpZXNDb21tYW5kLCBQdXRSb2xlUG9saWN5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1pYW0nO1xuaW1wb3J0IHsgTGFtYmRhQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5pbXBvcnQge1xuICBTM0NsaWVudCxcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmQsXG4gIExpc3RPYmplY3RWZXJzaW9uc0NvbW1hbmQsXG4gIHR5cGUgT2JqZWN0SWRlbnRpZmllcixcbiAgRGVsZXRlQnVja2V0Q29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7IFNlY3JldHNNYW5hZ2VyQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgeyBTTlNDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc25zJztcbmltcG9ydCB7IFNTTUNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zc20nO1xuaW1wb3J0IHsgU1NPQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNzbyc7XG5pbXBvcnQgeyBBc3N1bWVSb2xlQ29tbWFuZCwgU1RTQ2xpZW50LCBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3RzJztcbmltcG9ydCB7IGZyb21JbmksIGZyb21Ob2RlUHJvdmlkZXJDaGFpbiB9IGZyb20gJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzJztcbmltcG9ydCB0eXBlIHsgQXdzQ3JlZGVudGlhbElkZW50aXR5LCBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciwgTm9kZUh0dHBIYW5kbGVyT3B0aW9ucyB9IGZyb20gJ0BzbWl0aHkvdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgfSBmcm9tICdAc21pdGh5L3V0aWwtcmV0cnknO1xuXG5pbnRlcmZhY2UgQ2xpZW50Q29uZmlnIHtcbiAgcmVhZG9ubHkgY3JlZGVudGlhbHM6IEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyIHwgQXdzQ3JlZGVudGlhbElkZW50aXR5O1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcmV0cnlTdHJhdGVneTogQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3k7XG4gIHJlYWRvbmx5IHJlcXVlc3RIYW5kbGVyPzogTm9kZUh0dHBIYW5kbGVyT3B0aW9ucztcbn1cblxuZXhwb3J0IGNvbnN0IENSRURFTlRJQUxfRU5WX1ZBUlMgPSBbXG4gICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAnQVdTX1NFU1NJT05fVE9LRU4nLFxuXTtcblxuZXhwb3J0IGNsYXNzIEF3c0NsaWVudHMge1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGZvcklkZW50aXR5KHJhbmRvbVN0cmluZzogc3RyaW5nLCByZWdpb246IHN0cmluZywgaWRlbnRpdHk6IEF3c0NyZWRlbnRpYWxJZGVudGl0eSwgb3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IEF3c0NsaWVudHMocmFuZG9tU3RyaW5nLCByZWdpb24sIG91dHB1dCwgaWRlbnRpdHkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhc3luYyBmb3JSZWdpb24ocmFuZG9tU3RyaW5nOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nLCBvdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBuZXcgQXdzQ2xpZW50cyhyYW5kb21TdHJpbmcsIHJlZ2lvbiwgb3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2xlYW51cDogKCgpID0+IFByb21pc2U8dm9pZD4pW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENsaWVudENvbmZpZztcblxuICBwdWJsaWMgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb246IENsb3VkRm9ybWF0aW9uQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgczM6IFMzQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgZWNyOiBFQ1JDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBlY3JQdWJsaWM6IEVDUlBVQkxJQ0NsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGVjczogRUNTQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvOiBTU09DbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBzc206IFNTTUNsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHNuczogU05TQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgaWFtOiBJQU1DbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IExhbWJkYUNsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHN0czogU1RTQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjcmV0c01hbmFnZXI6IFNlY3JldHNNYW5hZ2VyQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgZHluYW1vRGI6IER5bmFtb0RCO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgLyoqIEEgcmFuZG9tIHN0cmluZyB0byB1c2UgZm9yIHRlbXBvcmFyeSByZXNvdXJjZXMsIGxpa2Ugcm9sZXMgKHNob3VsZCBwcmVmZXJhYmx5IG1hdGNoIHVuaXF1ZSB0ZXN0LXNwZWNpZmljIHJhbmRvbVN0cmluZykgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhbmRvbVN0cmluZzogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtLFxuICAgIHB1YmxpYyByZWFkb25seSBpZGVudGl0eT86IEF3c0NyZWRlbnRpYWxJZGVudGl0eSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgY3JlZGVudGlhbHM6IHRoaXMuaWRlbnRpdHkgPz8gY2hhaW5hYmxlQ3JlZGVudGlhbHModGhpcy5yZWdpb24pLFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSg5LCAoYXR0ZW1wdDogbnVtYmVyKSA9PiBhdHRlbXB0ICoqIDUwMCksXG4gICAgfTtcblxuICAgIHRoaXMuY2xvdWRGb3JtYXRpb24gPSBuZXcgQ2xvdWRGb3JtYXRpb25DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuczMgPSBuZXcgUzNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuZWNyID0gbmV3IEVDUkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5lY3JQdWJsaWMgPSBuZXcgRUNSUFVCTElDQ2xpZW50KHsgLi4udGhpcy5jb25maWcsIHJlZ2lvbjogJ3VzLWVhc3QtMScgLyogcHVibGljIGdhbGxlcnkgaXMgb25seSBhdmFpbGFibGUgaW4gdXMtZWFzdC0xICovIH0pO1xuICAgIHRoaXMuZWNzID0gbmV3IEVDU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zc28gPSBuZXcgU1NPQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnNzbSA9IG5ldyBTU01DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuc25zID0gbmV3IFNOU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5pYW0gPSBuZXcgSUFNQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBMYW1iZGFDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuc3RzID0gbmV3IFNUU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zZWNyZXRzTWFuYWdlciA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5keW5hbW9EYiA9IG5ldyBEeW5hbW9EQih0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ2xlYW51cChjbGVhbnVwOiAoKSA9PiBQcm9taXNlPGFueT4pIHtcbiAgICB0aGlzLmNsZWFudXAucHVzaChjbGVhbnVwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKCkge1xuICAgIGZvciAoY29uc3QgY2xlYW51cCBvZiB0aGlzLmNsZWFudXApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsZWFudXAoKTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLm91dHB1dC53cml0ZShg4pqg77iPIEVycm9yIGR1cmluZyBjbGVhbnVwOiAke2UubWVzc2FnZX1cXG5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbGVhbnVwLnNwbGljZSgwLCB0aGlzLmNsZWFudXAubGVuZ3RoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhY2NvdW50KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gUmVkdWNlICMgb2YgcmV0cmllcywgd2UgdXNlIHRoaXMgYXMgYSBjaXJjdWl0IGJyZWFrZXIgZm9yIGRldGVjdGluZyBuby1jb25maWdcbiAgICBjb25zdCBzdHNDbGllbnQgPSBuZXcgU1RTQ2xpZW50KHtcbiAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZy5jcmVkZW50aWFscyxcbiAgICAgIHJlZ2lvbjogdGhpcy5jb25maWcucmVnaW9uLFxuICAgICAgbWF4QXR0ZW1wdHM6IDIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKGF3YWl0IHN0c0NsaWVudC5zZW5kKG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pKSkuQWNjb3VudCE7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGNsaWVudHMgYWxyZWFkeSBoYXMgYW4gZXN0YWJsaXNoZWQgaWRlbnRpdHkgKHZpYSBhdG1vc3BoZXJlIGZvciBleGFtcGxlKSxcbiAgICogcmV0dXJuIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIG1hcCBhY3RpdmF0aW5nIGl0LlxuICAgKlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIGlkZW50aXR5RW52KCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5ID8ge1xuICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6IHRoaXMuaWRlbnRpdHkuYWNjZXNzS2V5SWQsXG4gICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6IHRoaXMuaWRlbnRpdHkuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgQVdTX1NFU1NJT05fVE9LRU46IHRoaXMuaWRlbnRpdHkuc2Vzc2lvblRva2VuISxcblxuICAgICAgLy8gdW5zZXQgYW55IHByZXZpb3VzbHkgdXNlZCBwcm9maWxlIGJlY2F1c2UgdGhlIFNESyB3aWxsIHByZWZlclxuICAgICAgLy8gdGhpcyBvdmVyIHN0YXRpYyBlbnYgY3JlZGVudGlhbHMuIHRoaXMgaXMgcmVsZXZhbnQgZm9yIHRlc3RzIHJ1bm5pbmcgb24gQ29kZUJ1aWxkXG4gICAgICAvLyBiZWNhdXNlIHdlIHVzZSBhIHByb2ZpbGUgYXMgb3VyIG1haW4gY3JlZGVudGlhbHMgc291cmNlLlxuICAgICAgQVdTX1BST0ZJTEU6ICcnLFxuICAgIH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgY3VycmVudCBpZGVudGl0eSBvciBpZGVudGl0eSBwcm92aWRlciB0byBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWRlbnRpYWxzKCkge1xuICAgIGNvbnN0IHggPSB0aGlzLmNvbmZpZy5jcmVkZW50aWFscztcbiAgICBpZiAoaXNBd3NDcmVkZW50aWFsSWRlbnRpdHkoeCkpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgICByZXR1cm4geCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVN0YWNrcyguLi5zdGFja05hbWVzOiBzdHJpbmdbXSkge1xuICAgIGlmIChzdGFja05hbWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIHB1cnBvc2VseSBkbyBhbGwgc3RhY2tzIHNlcmlhbGx5LCBiZWNhdXNlIHRoZXkndmUgYmVlbiBvcmRlcmVkXG4gICAgLy8gdG8gZG8gdGhlIGJvb3RzdHJhcCBzdGFjayBsYXN0LlxuICAgIGZvciAoY29uc3Qgc3RhY2tOYW1lIG9mIHN0YWNrTmFtZXMpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IFVwZGF0ZVRlcm1pbmF0aW9uUHJvdGVjdGlvbkNvbW1hbmQoe1xuICAgICAgICAgIEVuYWJsZVRlcm1pbmF0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuY2xvdWRGb3JtYXRpb24uc2VuZChcbiAgICAgICAgbmV3IERlbGV0ZVN0YWNrQ29tbWFuZCh7XG4gICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgcmV0cnkodGhpcy5vdXRwdXQsIGBEZWxldGluZyAke3N0YWNrTmFtZX1gLCByZXRyeS5mb3JTZWNvbmRzKDYwMCksIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5zdGFja1N0YXR1cyhzdGFja05hbWUpO1xuICAgICAgICBpZiAoc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgc3RhdHVzLmVuZHNXaXRoKCdfRkFJTEVEJykpIHtcbiAgICAgICAgICB0aHJvdyByZXRyeS5hYm9ydChuZXcgRXJyb3IoYCcke3N0YWNrTmFtZX0nIGlzIGluIHN0YXRlICcke3N0YXR1c30nYCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVsZXRlIG9mICcke3N0YWNrTmFtZX0nIG5vdCBjb21wbGV0ZSB5ZXQsIHN0YXR1czogJyR7c3RhdHVzfSdgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YWNrU3RhdHVzKHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICAgIG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgICAgICAgICAgU3RhY2tOYW1lOiBzdGFja05hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICkuU3RhY2tzPy5bMF0uU3RhY2tTdGF0dXM7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoaXNTdGFja01pc3NpbmdFcnJvcihlKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1wdHlCdWNrZXQoYnVja2V0TmFtZTogc3RyaW5nLCBvcHRpb25zPzogeyBieXBhc3NHb3Zlcm5hbmNlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3Qgb2JqZWN0cyA9IGF3YWl0IHRoaXMuczMuc2VuZChcbiAgICAgIG5ldyBMaXN0T2JqZWN0VmVyc2lvbnNDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRlbGV0ZXMgPSBbLi4uKG9iamVjdHMuVmVyc2lvbnMgfHwgW10pLCAuLi4ob2JqZWN0cy5EZWxldGVNYXJrZXJzIHx8IFtdKV0ucmVkdWNlKChhY2MsIG9iaikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvYmouVmVyc2lvbklkICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb2JqLktleSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjLnB1c2goeyBLZXk6IG9iai5LZXksIFZlcnNpb25JZDogb2JqLlZlcnNpb25JZCB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iai5LZXkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFjYy5wdXNoKHsgS2V5OiBvYmouS2V5IH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBPYmplY3RJZGVudGlmaWVyW10pO1xuXG4gICAgaWYgKGRlbGV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuczMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVPYmplY3RzQ29tbWFuZCh7XG4gICAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgT2JqZWN0czogZGVsZXRlcyxcbiAgICAgICAgICBRdWlldDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIEJ5cGFzc0dvdmVybmFuY2VSZXRlbnRpb246IG9wdGlvbnM/LmJ5cGFzc0dvdmVybmFuY2UgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVJbWFnZVJlcG9zaXRvcnkocmVwb3NpdG9yeU5hbWU6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuZWNyLnNlbmQoXG4gICAgICBuZXcgRGVsZXRlUmVwb3NpdG9yeUNvbW1hbmQoe1xuICAgICAgICByZXBvc2l0b3J5TmFtZTogcmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVCdWNrZXQoYnVja2V0TmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW1wdHlCdWNrZXQoYnVja2V0TmFtZSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuczMuc2VuZChcbiAgICAgICAgbmV3IERlbGV0ZUJ1Y2tldENvbW1hbmQoe1xuICAgICAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKGlzQnVja2V0TWlzc2luZ0Vycm9yKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJvbGUgdGhhdCB3aWxsIGJlIGNsZWFuZWQgdXAgd2hlbiB0aGUgQXdzQ2xpZW50cyBvYmplY3QgaXMgY2xlYW5lZCB1cFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRlbXBvcmFyeVJvbGUobmFtZVByZWZpeDogc3RyaW5nLCBhc3N1bWVSb2xlUG9saWN5U3RhdGVtZW50czogYW55W10sIHBvbGljeVN0YXRlbWVudHM6IGFueVtdKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmlhbS5zZW5kKG5ldyBDcmVhdGVSb2xlQ29tbWFuZCh7XG4gICAgICBSb2xlTmFtZTogYCR7bmFtZVByZWZpeH0tJHt0aGlzLnJhbmRvbVN0cmluZ31gLFxuICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgU3RhdGVtZW50OiBhc3N1bWVSb2xlUG9saWN5U3RhdGVtZW50cyxcbiAgICAgIH0sIHVuZGVmaW5lZCwgMiksXG4gICAgICBUYWdzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBLZXk6ICdkZWxldGVtZScsXG4gICAgICAgICAgVmFsdWU6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSkpO1xuICAgIGF3YWl0IHRoaXMuaWFtLnNlbmQobmV3IFB1dFJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgIFJvbGVOYW1lOiBgJHtuYW1lUHJlZml4fS0ke3RoaXMucmFuZG9tU3RyaW5nfWAsXG4gICAgICBQb2xpY3lOYW1lOiAnRGVmYXVsdFBvbGljeScsXG4gICAgICBQb2xpY3lEb2N1bWVudDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgIFN0YXRlbWVudDogcG9saWN5U3RhdGVtZW50cyxcbiAgICAgIH0sIHVuZGVmaW5lZCwgMiksXG4gICAgfSkpO1xuXG4gICAgdGhpcy5hZGRDbGVhbnVwKCgpID0+IHRoaXMuZGVsZXRlUm9sZShyZXNwb25zZS5Sb2xlIS5Sb2xlTmFtZSEpKTtcblxuICAgIHJldHVybiByZXNwb25zZS5Sb2xlPy5Bcm4gPz8gJypDcmVhdGVSb2xlIGRpZCBub3QgcmV0dXJuIGFuIEFSTionO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHdhaXRGb3JBc3N1bWVSb2xlKHJvbGVBcm46IHN0cmluZykge1xuICAgIGF3YWl0IHJldHJ5T25NYXRjaGluZ0Vycm9ycyhcbiAgICAgICgpID0+IHRoaXMuc3RzLnNlbmQobmV3IEFzc3VtZVJvbGVDb21tYW5kKHtcbiAgICAgICAgUm9sZUFybjogcm9sZUFybixcbiAgICAgICAgUm9sZVNlc3Npb25OYW1lOiAndGVzdC1leGlzdGVuY2UnLFxuICAgICAgfSkpLFxuICAgICAgWydBY2Nlc3NEZW5pZWQnXSxcbiAgICAgIHJldHJ5LmZvclNlY29uZHMoNjApLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlUm9sZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwb2xpY2llc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5pYW0uc2VuZChuZXcgTGlzdFJvbGVQb2xpY2llc0NvbW1hbmQoe1xuICAgICAgUm9sZU5hbWU6IG5hbWUsXG4gICAgfSkpO1xuXG4gICAgZm9yIChjb25zdCBwb2xpY3lOYW1lIG9mIHBvbGljaWVzUmVzcG9uc2UuUG9saWN5TmFtZXMgPz8gW10pIHtcbiAgICAgIGF3YWl0IHRoaXMuaWFtLnNlbmQobmV3IERlbGV0ZVJvbGVQb2xpY3lDb21tYW5kKHtcbiAgICAgICAgUm9sZU5hbWU6IG5hbWUsXG4gICAgICAgIFBvbGljeU5hbWU6IHBvbGljeU5hbWUsXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5pYW0uc2VuZChuZXcgRGVsZXRlUm9sZUNvbW1hbmQoe1xuICAgICAgUm9sZU5hbWU6IG5hbWUsXG4gICAgfSkpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWNrTWlzc2luZ0Vycm9yKGU6IEVycm9yKSB7XG4gIHJldHVybiBlLm1lc3NhZ2UuaW5kZXhPZignZG9lcyBub3QgZXhpc3QnKSA+IC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCdWNrZXRNaXNzaW5nRXJyb3IoZTogRXJyb3IpIHtcbiAgcmV0dXJuIGUubWVzc2FnZS5pbmRleE9mKCdkb2VzIG5vdCBleGlzdCcpID4gLTE7XG59XG5cbi8qKlxuICogUmV0cnkgYW4gYXN5bmMgb3BlcmF0aW9uIHVudGlsIGEgZGVhZGxpbmUgaXMgaGl0LlxuICpcbiAqIFVzZSBgcmV0cnkuZm9yU2Vjb25kcygpYCB0byBjb25zdHJ1Y3QgYSBkZWFkbGluZSByZWxhdGl2ZSB0byByaWdodCBub3cuXG4gKlxuICogRXhjZXB0aW9ucyB3aWxsIGNhdXNlIHRoZSBvcGVyYXRpb24gdG8gcmV0cnkuIFVzZSBgcmV0cnkuYWJvcnRgIHRvIGFubm90YXRlIGFuIGV4Y2VwdGlvblxuICogdG8gc3RvcCB0aGUgcmV0cnkgYW5kIGVuZCBpbiBhIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXRyeTxBPihcbiAgb3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0sXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBkZWFkbGluZTogRGF0ZSxcbiAgYmxvY2s6ICgpID0+IFByb21pc2U8QT4sXG4pOiBQcm9taXNlPEE+IHtcbiAgbGV0IGkgPSAwO1xuICBvdXRwdXQud3JpdGUoYPCfkoggJHtvcGVyYXRpb259XFxuYCk7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGkrKztcbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGJsb2NrKCk7XG4gICAgICBvdXRwdXQud3JpdGUoYPCfkoggJHtvcGVyYXRpb259OiBzdWNjZWVkZWQgYWZ0ZXIgJHtpfSBhdHRlbXB0c1xcbmApO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLmFib3J0IHx8IERhdGUubm93KCkgPiBkZWFkbGluZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29wZXJhdGlvbn06IGRpZCBub3Qgc3VjY2VlZCBhZnRlciAke2l9IGF0dGVtcHRzOiAke2V9YCk7XG4gICAgICB9XG4gICAgICBvdXRwdXQud3JpdGUoYOKPsyAke29wZXJhdGlvbn0gKCR7ZS5tZXNzYWdlfSlcXG5gKTtcbiAgICAgIGF3YWl0IHNsZWVwKDUwMDApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1ha2UgYSBkZWFkbGluZSBmb3IgdGhlIGByZXRyeWAgZnVuY3Rpb24gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZS5cbiAqL1xucmV0cnkuZm9yU2Vjb25kcyA9IChzZWNvbmRzOiBudW1iZXIpOiBEYXRlID0+IHtcbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgKyBzZWNvbmRzICogMTAwMCk7XG59O1xuXG4vKipcbiAqIEFubm90YXRlIGFuIGVycm9yIHRvIHN0b3AgdGhlIHJldHJ5aW5nXG4gKi9cbnJldHJ5LmFib3J0ID0gKGU6IEVycm9yKTogRXJyb3IgPT4ge1xuICAoZSBhcyBhbnkpLmFib3J0ID0gdHJ1ZTtcbiAgcmV0dXJuIGU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb3V0cHV0RnJvbVN0YWNrKGtleTogc3RyaW5nLCBzdGFjazogU3RhY2spOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gKHN0YWNrLk91dHB1dHMgPz8gW10pLmZpbmQoKG8pID0+IG8uT3V0cHV0S2V5ID09PSBrZXkpPy5PdXRwdXRWYWx1ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvaykgPT4gc2V0VGltZW91dChvaywgbXMpKTtcbn1cblxuLyoqXG4gKiBSZXRyeSBhbiBhc3luYyBvcGVyYXRpb24gd2l0aCBlcnJvciBmaWx0ZXJpbmcgdW50aWwgYSBkZWFkbGluZSBpcyBoaXQuXG4gKlxuICogVXNlIGByZXRyeS5mb3JTZWNvbmRzKClgIHRvIGNvbnN0cnVjdCBhIGRlYWRsaW5lIHJlbGF0aXZlIHRvIHJpZ2h0IG5vdy5cbiAqXG4gKiBPbmx5IHJldHJpZXMgb24gZXJyb3JzIHdpdGggbWF0Y2hpbmcgbmFtZXMgaW4gZXJyb3JOYW1lcyBhcnJheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5T25NYXRjaGluZ0Vycm9yczxUPihcbiAgb3BlcmF0aW9uOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBlcnJvck5hbWVzOiBzdHJpbmdbXSxcbiAgZGVhZGxpbmU6IERhdGUsXG4gIGludGVydmFsOiBudW1iZXIgPSA1MDAwLFxuKTogUHJvbWlzZTxUPiB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaSsrO1xuICAgICAgcmV0dXJuIGF3YWl0IG9wZXJhdGlvbigpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKERhdGUubm93KCkgPiBkZWFkbGluZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gZGlkIG5vdCBzdWNjZWVkIGFmdGVyICR7aX0gYXR0ZW1wdHM6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghZXJyb3JOYW1lcy5pbmNsdWRlcyhlLm5hbWUpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcChpbnRlcnZhbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoYWluYWJsZUNyZWRlbnRpYWxzKHJlZ2lvbjogc3RyaW5nKTogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIge1xuICBpZiAoKHByb2Nlc3MuZW52LkNPREVCVUlMRF9CVUlMRF9BUk4gfHwgcHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9JRCkgJiYgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUpIHtcbiAgICAvLyBpbiBjb2RlYnVpbGQgd2UgbXVzdCBhc3N1bWUgdGhlIHJvbGUgdGhhdCB0aGUgY2RrIHVzZXNcbiAgICAvLyBvdGhlcndpc2UgY3JlZGVudGlhbHMgd2lsbCBqdXN0IGJlIHBpY2tlZCB1cCBieSB0aGUgbm9ybWFsIHNka1xuICAgIC8vIGhldXJpc3RpY3MgYW5kIGV4cGlyZSBhZnRlciBhbiBob3VyLlxuICAgIHJldHVybiBmcm9tSW5pKHtcbiAgICAgIGNsaWVudENvbmZpZzogeyByZWdpb24gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSBqdXN0IGdldCB3aGF0J3MgZGVmYXVsdFxuICByZXR1cm4gZnJvbU5vZGVQcm92aWRlckNoYWluKHsgY2xpZW50Q29uZmlnOiB7IHJlZ2lvbiB9IH0pO1xufVxuXG5mdW5jdGlvbiBpc0F3c0NyZWRlbnRpYWxJZGVudGl0eSh4OiBhbnkpOiB4IGlzIEF3c0NyZWRlbnRpYWxJZGVudGl0eSB7XG4gIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHguYWNjZXNzS2V5SWQpO1xufVxuIl19
package/lib/corking.d.ts CHANGED
@@ -2,9 +2,20 @@
2
2
  * Routines for corking stdout and stderr
3
3
  */
4
4
  import * as stream from 'stream';
5
+ /**
6
+ * Register values to be replaced with a placeholder in all buffered output
7
+ */
8
+ export declare function registerSecrets(...values: Array<string>): void;
9
+ /**
10
+ * Replace every registered secret in the given text with a placeholder
11
+ */
12
+ export declare function redactSecrets(text: string): string;
5
13
  export declare class MemoryStream extends stream.Writable {
6
14
  private parts;
7
15
  _write(chunk: Buffer, _encoding: string, callback: (error?: Error | null) => void): void;
16
+ /**
17
+ * The buffered output, with all registered secrets redacted
18
+ */
8
19
  buffer(): Buffer<ArrayBuffer>;
9
20
  clear(): void;
10
21
  flushTo(strm: NodeJS.WritableStream): Promise<void>;
package/lib/corking.js CHANGED
@@ -34,18 +34,48 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.MemoryStream = void 0;
37
+ exports.registerSecrets = registerSecrets;
38
+ exports.redactSecrets = redactSecrets;
37
39
  /**
38
40
  * Routines for corking stdout and stderr
39
41
  */
40
42
  const stream = __importStar(require("stream"));
43
+ /**
44
+ * Values that must be scrubbed from any buffered test output
45
+ *
46
+ * Registered values are process-global because `MemoryStream`s are created per test,
47
+ * while credentials are established once per worker process.
48
+ */
49
+ const SECRETS = new Set();
50
+ /**
51
+ * Register values to be replaced with a placeholder in all buffered output
52
+ */
53
+ function registerSecrets(...values) {
54
+ for (const value of values) {
55
+ SECRETS.add(value);
56
+ }
57
+ }
58
+ /**
59
+ * Replace every registered secret in the given text with a placeholder
60
+ */
61
+ function redactSecrets(text) {
62
+ let ret = text;
63
+ for (const secret of SECRETS) {
64
+ ret = ret.split(secret).join('<REDACTED>');
65
+ }
66
+ return ret;
67
+ }
41
68
  class MemoryStream extends stream.Writable {
42
69
  parts = new Array();
43
70
  _write(chunk, _encoding, callback) {
44
71
  this.parts.push(chunk);
45
72
  callback();
46
73
  }
74
+ /**
75
+ * The buffered output, with all registered secrets redacted
76
+ */
47
77
  buffer() {
48
- return Buffer.concat(this.parts);
78
+ return Buffer.from(redactSecrets(Buffer.concat(this.parts).toString()));
49
79
  }
50
80
  clear() {
51
81
  this.parts.splice(0, this.parts.length);
@@ -62,4 +92,4 @@ class MemoryStream extends stream.Writable {
62
92
  }
63
93
  }
64
94
  exports.MemoryStream = MemoryStream;
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ya2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvcmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwrQ0FBaUM7QUFFakMsTUFBYSxZQUFhLFNBQVEsTUFBTSxDQUFDLFFBQVE7SUFDdkMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFN0IsTUFBTSxDQUFDLEtBQWEsRUFBRSxTQUFpQixFQUFFLFFBQXdDO1FBQ3RGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBMkI7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBM0JELG9DQTJCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUm91dGluZXMgZm9yIGNvcmtpbmcgc3Rkb3V0IGFuZCBzdGRlcnJcbiAqL1xuaW1wb3J0ICogYXMgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5cbmV4cG9ydCBjbGFzcyBNZW1vcnlTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uV3JpdGFibGUge1xuICBwcml2YXRlIHBhcnRzID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcblxuICBwdWJsaWMgX3dyaXRlKGNodW5rOiBCdWZmZXIsIF9lbmNvZGluZzogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wYXJ0cy5wdXNoKGNodW5rKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgcHVibGljIGJ1ZmZlcigpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdCh0aGlzLnBhcnRzKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwLCB0aGlzLnBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmx1c2hUbyhzdHJtOiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbHVzaGVkID0gc3RybS53cml0ZSh0aGlzLmJ1ZmZlcigpKTtcbiAgICBpZiAoIWZsdXNoZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShvayA9PiBzdHJtLm9uY2UoJ2RyYWluJywgb2spKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlcigpLnRvU3RyaW5nKCk7XG4gIH1cbn1cbiJdfQ==
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ya2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvcmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLDBDQUlDO0FBS0Qsc0NBTUM7QUEvQkQ7O0dBRUc7QUFDSCwrQ0FBaUM7QUFFakM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0FBRWxDOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEdBQUcsTUFBcUI7SUFDdEQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUMsSUFBWTtJQUN4QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDZixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBYSxZQUFhLFNBQVEsTUFBTSxDQUFDLFFBQVE7SUFDdkMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFFN0IsTUFBTSxDQUFDLEtBQWEsRUFBRSxTQUFpQixFQUFFLFFBQXdDO1FBQ3RGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTTtRQUNYLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBMkI7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBOUJELG9DQThCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUm91dGluZXMgZm9yIGNvcmtpbmcgc3Rkb3V0IGFuZCBzdGRlcnJcbiAqL1xuaW1wb3J0ICogYXMgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5cbi8qKlxuICogVmFsdWVzIHRoYXQgbXVzdCBiZSBzY3J1YmJlZCBmcm9tIGFueSBidWZmZXJlZCB0ZXN0IG91dHB1dFxuICpcbiAqIFJlZ2lzdGVyZWQgdmFsdWVzIGFyZSBwcm9jZXNzLWdsb2JhbCBiZWNhdXNlIGBNZW1vcnlTdHJlYW1gcyBhcmUgY3JlYXRlZCBwZXIgdGVzdCxcbiAqIHdoaWxlIGNyZWRlbnRpYWxzIGFyZSBlc3RhYmxpc2hlZCBvbmNlIHBlciB3b3JrZXIgcHJvY2Vzcy5cbiAqL1xuY29uc3QgU0VDUkVUUyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHZhbHVlcyB0byBiZSByZXBsYWNlZCB3aXRoIGEgcGxhY2Vob2xkZXIgaW4gYWxsIGJ1ZmZlcmVkIG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJTZWNyZXRzKC4uLnZhbHVlczogQXJyYXk8c3RyaW5nPikge1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIFNFQ1JFVFMuYWRkKHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcGxhY2UgZXZlcnkgcmVnaXN0ZXJlZCBzZWNyZXQgaW4gdGhlIGdpdmVuIHRleHQgd2l0aCBhIHBsYWNlaG9sZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWRhY3RTZWNyZXRzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCByZXQgPSB0ZXh0O1xuICBmb3IgKGNvbnN0IHNlY3JldCBvZiBTRUNSRVRTKSB7XG4gICAgcmV0ID0gcmV0LnNwbGl0KHNlY3JldCkuam9pbignPFJFREFDVEVEPicpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNZW1vcnlTdHJlYW0gZXh0ZW5kcyBzdHJlYW0uV3JpdGFibGUge1xuICBwcml2YXRlIHBhcnRzID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcblxuICBwdWJsaWMgX3dyaXRlKGNodW5rOiBCdWZmZXIsIF9lbmNvZGluZzogc3RyaW5nLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5wYXJ0cy5wdXNoKGNodW5rKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBidWZmZXJlZCBvdXRwdXQsIHdpdGggYWxsIHJlZ2lzdGVyZWQgc2VjcmV0cyByZWRhY3RlZFxuICAgKi9cbiAgcHVibGljIGJ1ZmZlcigpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocmVkYWN0U2VjcmV0cyhCdWZmZXIuY29uY2F0KHRoaXMucGFydHMpLnRvU3RyaW5nKCkpKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwLCB0aGlzLnBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmx1c2hUbyhzdHJtOiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbHVzaGVkID0gc3RybS53cml0ZSh0aGlzLmJ1ZmZlcigpKTtcbiAgICBpZiAoIWZsdXNoZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShvayA9PiBzdHJtLm9uY2UoJ2RyYWluJywgb2spKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlcigpLnRvU3RyaW5nKCk7XG4gIH1cbn1cbiJdfQ==
package/lib/integ-test.js CHANGED
@@ -37,7 +37,9 @@ exports.integTest = integTest;
37
37
  exports.randomString = randomString;
38
38
  const fs = __importStar(require("fs"));
39
39
  const path = __importStar(require("path"));
40
+ const aws_1 = require("./aws");
40
41
  const corking_1 = require("./corking");
42
+ (0, corking_1.registerSecrets)(...aws_1.CREDENTIAL_ENV_VARS.map(v => process.env[v]));
41
43
  const SKIP_TESTS = [
42
44
  ...readSkipFile(path.join(__dirname, '..', 'skip-tests.txt')),
43
45
  ...readSkipFile(process.env.CDK_INTEG_SKIP_TESTS_FILE),
@@ -236,4 +238,4 @@ function readSkipFile(filePath) {
236
238
  return [];
237
239
  }
238
240
  }
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWctdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ0EsOEJBZ0dDO0FBa0JELG9DQUdDO0FBckpELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsdUNBQXlDO0FBRXpDLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdELEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUM7SUFDdEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztDQUN2RCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFeEMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQzFCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsc0ZBQXNGO0FBQ3RGLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQztBQUVuRCxzRUFBc0U7QUFDdEUsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBVW5COztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUN2QixJQUFZLEVBQ1os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QUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IE1lbW9yeVN0cmVhbSB9IGZyb20gJy4vY29ya2luZyc7XG5cbmNvbnN0IFNLSVBfVEVTVFMgPSBbXG4gIC4uLnJlYWRTa2lwRmlsZShwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAnc2tpcC10ZXN0cy50eHQnKSksXG4gIC4uLnJlYWRTa2lwRmlsZShwcm9jZXNzLmVudi5DREtfSU5URUdfU0tJUF9URVNUU19GSUxFKSxcbiAgLi4uKHByb2Nlc3MuZW52LkNES19JTlRFR19TS0lQX1RFU1RTID8/ICcnKS5zcGxpdCgnLCcpLFxuXS5tYXAoeCA9PiB4LnRyaW0oKSlcbiAgLmZpbHRlcih4ID0+IHggJiYgIXguc3RhcnRzV2l0aCgnIycpKTtcblxuaWYgKFNLSVBfVEVTVFMubGVuZ3RoID4gMCkge1xuICBwcm9jZXNzLnN0ZGVyci53cml0ZShg4oS577iPIFNraXBwaW5nIHRlc3RzOiAke0pTT04uc3RyaW5naWZ5KFNLSVBfVEVTVFMpfVxcbmApO1xufVxuXG4vLyBXaGV0aGVyIHdlIHdhbnQgdG8gc3RvcCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSwgZm9yIHF1aWNrZXIgZGVidWdnaW5nIChob3BlZnVsbHkpLlxuY29uc3QgRkFJTF9GQVNUID0gcHJvY2Vzcy5lbnYuRkFJTF9GQVNUID09PSAndHJ1ZSc7XG5cbi8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGUgc3VpdGUgaGFzIGZhaWxlZC4gSWYgc28sIHdlIHN0b3AgcnVubmluZy5cbmxldCBmYWlsZWQgPSBmYWxzZTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q29udGV4dCB7XG4gIHJlYWRvbmx5IHJhbmRvbVN0cmluZzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtO1xuICBsb2coczogc3RyaW5nKTogdm9pZDtcbiAgcmVwb3J0V2FpdFRpbWUobXM6IG51bWJlcik6IHZvaWQ7XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGZvciBqZXN0J3MgJ3Rlc3QnIHdoaWNoIHRha2VzIHJlZ3Jlc3Npb24tZGlzYWJsZWQgdGVzdHMgaW50byBhY2NvdW50IGFuZCBwcmludHMgYSBiYW5uZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludGVnVGVzdChcbiAgbmFtZTogc3RyaW5nLFxuICBjYWxsYmFjazogKGNvbnRleHQ6IFRlc3RDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LFxuICB0aW1lb3V0TWlsbGlzPzogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGNvbnN0IHJ1bm5lciA9IHNob3VsZFNraXAobmFtZSkgPyB0ZXN0LnNraXAgOiB0ZXN0O1xuXG4gIGplc3QucmV0cnlUaW1lcyhwYXJzZUludChwcm9jZXNzLmVudi5KRVNUX1JFVFJZX1RJTUVTID8/ICcwJykpO1xuXG4gIHJ1bm5lcihuYW1lLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IE1lbW9yeVN0cmVhbSgpO1xuXG4gICAgb3V0cHV0LndyaXRlKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuJyk7XG4gICAgb3V0cHV0LndyaXRlKGAke25hbWV9XFxuYCk7XG4gICAgb3V0cHV0LndyaXRlKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuJyk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IHdhaXRUaW1lID0gMDtcblxuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBbSU5URUcgVEVTVDo6JHtuYW1lfV0gU3RhcnRpbmcgKHBpZCAke3Byb2Nlc3MucGlkfSkuLi5cXG5gKTtcbiAgICBtYXliZVByaW50TWVtb3J5VXNhZ2UobmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChGQUlMX0ZBU1QgJiYgZmFpbGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRkFJTF9GQVNUIHJlcXVlc3RlZCBhbmQgY3VycmVudGx5IGZhaWxpbmcuIFN0b3BwaW5nIHRlc3QgZWFybHkuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldCA9IGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICByYW5kb21TdHJpbmc6IHJhbmRvbVN0cmluZygpLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsb2coczogc3RyaW5nKSB7XG4gICAgICAgICAgb3V0cHV0LndyaXRlKGAke3N9XFxuYCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlcG9ydFdhaXRUaW1lKG4pIHtcbiAgICAgICAgICB3YWl0VGltZSArPSBuO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdyaXRlTG9nKG5hbWUsIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQudG9TdHJpbmcoKSxcbiAgICAgICAgdG90YWxEdXJhdGlvbjogRGF0ZS5ub3coKSAtIHN0YXJ0LFxuICAgICAgICB3YWl0VGltZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gUHJpbnQgdGhlIGJ1ZmZlcmVkIG91dHB1dCwgb25seSBpZiB0aGUgdGVzdCBmYWlscy5cbiAgICAgIGZhaWxlZCA9IHRydWU7XG5cbiAgICAgIG91dHB1dC53cml0ZShlLm1lc3NhZ2UpO1xuICAgICAgb3V0cHV0LndyaXRlKGUuc3RhY2spO1xuXG4gICAgICBhd2FpdCB3cml0ZUxvZyhuYW1lLCB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBvdXRwdXQ6IG91dHB1dC50b1N0cmluZygpLFxuICAgICAgICB0b3RhbER1cmF0aW9uOiBEYXRlLm5vdygpIC0gc3RhcnQsXG4gICAgICAgIHdhaXRUaW1lLFxuICAgICAgfSk7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgW0lOVEVHIFRFU1Q6OiR7bmFtZX1dIEZhaWxlZDogJHtlfVxcbmApO1xuXG4gICAgICBjb25zdCBpc0dpdEh1YiA9ICEhcHJvY2Vzcy5lbnYuR0lUSFVCX1JVTl9JRDtcblxuICAgICAgaWYgKGlzR2l0SHViKSB7XG4gICAgICAgIC8vIEdpdEh1YiBBY3Rpb25zIGNvbXBhdGlibGUgb3V0cHV0IGZvcm1hdHRpbmdcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy93cml0aW5nLXdvcmtmbG93cy9jaG9vc2luZy13aGF0LXlvdXItd29ya2Zsb3ctZG9lcy93b3JrZmxvdy1jb21tYW5kcy1mb3ItZ2l0aHViLWFjdGlvbnMjc2V0dGluZy1hbi1lcnJvci1tZXNzYWdlXG4gICAgICAgIGxldCB3cml0dGVuID0gcHJvY2Vzcy5zdGRlcnIud3JpdGUoYDo6ZXJyb3IgdGl0bGU9RmFpbGVkICR7bmFtZX06OiR7ZS5tZXNzYWdlfVxcbmApO1xuICAgICAgICBpZiAoIXdyaXR0ZW4pIHtcbiAgICAgICAgICAvLyBXYWl0IGZvciBkcmFpblxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChvaykgPT4gcHJvY2Vzcy5zdGRlcnIub25jZSgnZHJhaW4nLCBvaykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbnQgb3V0cHV0IG9ubHkgaWYgdGhlIHRlc3QgZmFpbHMuIFVzZSAnY29uc29sZS5sb2cnIHNvIHRoZSBvdXRwdXQgaXMgYnVmZmVyZWQgYnlcbiAgICAgICAgLy8gamVzdCBhbmQgcHJpbnRzIHdpdGhvdXQgYSBzdGFjayB0cmFjZSAoaWYgdmVyYm9zZTogZmFsc2UpLlxuICAgICAgICB3cml0dGVuID0gcHJvY2Vzcy5zdGRvdXQud3JpdGUoW1xuICAgICAgICAgIGA6Omdyb3VwOjpGYWlsdXJlIGRldGFpbHM6ICR7bmFtZX0gKGNsaWNrIHRvIGV4cGFuZClcXG5gLFxuICAgICAgICAgIGAke291dHB1dC5idWZmZXIoKS50b1N0cmluZygpfVxcbmAsXG4gICAgICAgICAgJzo6ZW5kZ3JvdXA6OlxcbicsXG4gICAgICAgIF0uam9pbignJykpO1xuICAgICAgICBpZiAoIXdyaXR0ZW4pIHtcbiAgICAgICAgICAvLyBXYWl0IGZvciBkcmFpblxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChvaykgPT4gcHJvY2Vzcy5zdGRvdXQub25jZSgnZHJhaW4nLCBvaykpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVc2UgJ2NvbnNvbGUubG9nJyBzbyB0aGUgb3V0cHV0IGlzIGJ1ZmZlcmVkIGJ5XG4gICAgICAgIC8vIGplc3QgYW5kIHByaW50cyB3aXRob3V0IGEgc3RhY2sgdHJhY2UgKGlmIHZlcmJvc2U6IGZhbHNlKS5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5sb2cob3V0cHV0LmJ1ZmZlcigpLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgW0lOVEVHIFRFU1Q6OiR7bmFtZX1dIERvbmUgKCR7aHVtYW5UaW1lKGR1cmF0aW9uKX0pLlxcbmApO1xuICAgICAgbWF5YmVQcmludE1lbW9yeVVzYWdlKG5hbWUpO1xuICAgIH1cbiAgfSwgdGltZW91dE1pbGxpcyk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFNraXAodGVzdE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gU0tJUF9URVNUUy5pbmNsdWRlcyh0ZXN0TmFtZSk7XG59XG5cbmZ1bmN0aW9uIG1heWJlUHJpbnRNZW1vcnlVc2FnZSh0ZXN0TmFtZTogc3RyaW5nKSB7XG4gIGlmIChwcm9jZXNzLmVudi5JTlRFR19NRU1PUllfREVCVUcgIT09ICd0cnVlJykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBtZW1vcnlVc2FnZSA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKSBhcyBhbnk7XG4gIGNvbnN0IHJlcG9ydDogYW55ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1lbW9yeVVzYWdlKSkge1xuICAgIHJlcG9ydFtrZXldID0gYCR7TWF0aC5yb3VuZCh2YWx1ZSBhcyBudW1iZXIgLyAxMDI0IC8gMTAyNCl9IE1CYDtcbiAgfVxuICBwcm9jZXNzLnN0ZGVyci53cml0ZShgW0lOVEVHIFRFU1Q6OiR7dGVzdE5hbWV9XSBNZW1vcnkgVXNhZ2U6ICR7SlNPTi5zdHJpbmdpZnkocmVwb3J0KX1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgLy8gQ3JhenlcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJycpO1xufVxuXG4vKipcbiAqIFdyaXRlIGxvZyBmaWxlc1xuICpcbiAqIFdyaXRlIGEgdGV4dCBsb2cgdG8gYCR7SU5URUdfTE9HU30vW0ZBSUxFRC1dZGVzY3JpcHRpb24tb2YtdGVzdC50eHRgLCBhbmQgYSBzaW5nbGVcbiAqIGxpbmUgb2YgYSBNYXJrZG93biB0YWJsZSB0byBgJHtJTlRFR19MT0dTfS9tZC8xLWRlc2NyaXB0aW9uLW9mLXRlc3QubWRgLlxuICpcbiAqIFRoZSBsYXR0ZXIgYXJlIGRlc2lnbmVkIHRvIGJlIGdsb2JjYXR0ZWQgdG8gJEdJVEhVQl9TVEVQX1NVTU1BUlkgYWZ0ZXIgdGVzdHNcbiAqICh3ZSBkb24ndCB3cml0ZSB0aGVyZSBkaXJlY3RseSB0byBhdm9pZCBjb25jdXJyZW5jeSBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXNcbiAqIHJlYWRpbmcgYW5kIG11dGF0aW5nIHRoZSBzYW1lIGZpbGUpLlxuICpcbiAqIFdlIGRvIHVzZSBgYXRvbWljV3JpdGVgIHRvIHdyaXRlIGZpbGVzIC0tIGl0J3Mgb25seSBuZWNlc3NhcnkgZm9yIHRoZSBoZWFkZXIgZmlsZSxcbiAqIHdoaWNoIGdldHMgb3ZlcndyaXR0ZW4gYnkgZXZlcnkgdGVzdCwganVzdCB0byBtYWtlIHN1cmUgaXQgcHJvcGVybHkgZXhpc3RzIChzaG91bGRuJ3RcbiAqIGVuZCB1cCBlbXB0eSBvciB3aXRoIGludGVybGVhdmVkIGNvbnRlbnRzKS4gVGhlIG90aGVyIHdyaXRlcyBhcmUgbm90XG4gKiBjb250ZW5kZWQgYW5kIGRvbid0IG5lZWQgdG8gYmUgYXRvbWljLCBidXQgdGhlIGZ1bmN0aW9uIGlzIGp1c3QgZXJnb25vbWljIHRvIHVzZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVMb2codGVzdE5hbWU6IHN0cmluZywgcmVzdWx0OiB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIG91dHB1dDogc3RyaW5nO1xuICB0b3RhbER1cmF0aW9uOiBudW1iZXI7XG4gIHdhaXRUaW1lOiBudW1iZXI7XG59KSB7XG4gIGlmIChwcm9jZXNzLmVudi5JTlRFR19MT0dTKSB7XG4gICAgLy8gV3JpdGUgdGhlIGxvZyBmaWxlXG4gICAgY29uc3Qgc2x1ZyA9IHNsdWdpZnkodGVzdE5hbWUpO1xuICAgIGNvbnN0IGxvZ0ZpbGVOYW1lID0gYCR7cHJvY2Vzcy5lbnYuSU5URUdfTE9HU30vJHtyZXN1bHQuc3VjY2VzcyA/ICcnIDogJ0ZBSUxFRC0nfSR7c2x1Z30udHh0YDtcbiAgICBhd2FpdCBhdG9taWNXcml0ZShsb2dGaWxlTmFtZSwgcmVzdWx0Lm91dHB1dCk7XG5cbiAgICAvLyBXcml0ZSBhIHJvdyBmb3IgdGhlIG1hcmtkb3duIHRhYmxlXG4gICAgLy8gU29ydCBmYWlsdXJlcyBiZWZvcmUgc3VjY2Vzc2VzLCBhbmQgdGhlIHRhYmxlIGhlYWRlciBiZWZvcmUgYWxsXG4gICAgY29uc3QgbWRGaWxlTmFtZSA9IGAke3Byb2Nlc3MuZW52LklOVEVHX0xPR1N9L21kLyR7cmVzdWx0LnN1Y2Nlc3MgPyAnMicgOiAnMSd9LSR7c2x1Z30ubWRgO1xuICAgIGNvbnN0IGNvbHVtbnM6IEFycmF5PFtzdHJpbmcsIHN0cmluZ10+ID0gW1xuICAgICAgWydSZXN1bHQnLCByZXN1bHQuc3VjY2VzcyA/ICdwYXNzIOKchScgOiAnZmFpbCDinYwnXSxcbiAgICAgIFsnVGVzdCBOYW1lJywgdGVzdE5hbWVdLFxuICAgICAgWydUZXN0IER1cmF0aW9uJywgaHVtYW5UaW1lKHJlc3VsdC50b3RhbER1cmF0aW9uIC0gcmVzdWx0LndhaXRUaW1lKV0sXG4gICAgICBbJ1dhaXQgVGltZScsIHJlc3VsdC53YWl0VGltZSA+IDAgPyBodW1hblRpbWUocmVzdWx0LndhaXRUaW1lKSA6ICctJ10sXG4gICAgXTtcbiAgICBhd2FpdCBhdG9taWNXcml0ZShgJHtwcm9jZXNzLmVudi5JTlRFR19MT0dTfS9tZC8wLWhlYWRlci5tZGAsIFtcbiAgICAgIGB8ICR7Y29sdW1ucy5tYXAoKFtjb2wsIF92YWxdKSA9PiBjb2wpLmpvaW4oJyB8ICcpfSB8YCxcbiAgICAgIGB8ICR7Y29sdW1ucy5tYXAoKCkgPT4gJy0tLS0tLS0tLS0tJykuam9pbignIHwgJyl9IHxgLFxuICAgIF0ubWFwKHggPT4gYCR7eH1cXG5gKS5qb2luKCcnKSk7XG4gICAgYXdhaXQgYXRvbWljV3JpdGUobWRGaWxlTmFtZSxcbiAgICAgIGB8ICR7Y29sdW1ucy5tYXAoKFtfY29sLCB2YWxdKSA9PiB2YWwpLmpvaW4oJyB8ICcpfSB8XFxuYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaHVtYW5UaW1lKGRlbHRhOiBudW1iZXIpIHtcbiAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuXG4gIGNvbnN0IFMgPSAxMDAwO1xuICBjb25zdCBNID0gNjAgKiBTO1xuICBjb25zdCBIID0gNjAgKiBNO1xuXG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihkZWx0YSAvIEgpO1xuICBpZiAoaG91cnMgPiAwKSB7XG4gICAgY29tcG9uZW50cy5wdXNoKGAke2hvdXJzfWhgKTtcbiAgICBkZWx0YSAtPSBob3VycyAqIEg7XG4gIH1cbiAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoZGVsdGEgLyBNKTtcbiAgaWYgKG1pbnV0ZXMgPiAwKSB7XG4gICAgY29tcG9uZW50cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGRlbHRhIC09IG1pbnV0ZXMgKiBNO1xuICB9XG4gIGNvbnN0IHNlY29uZHMgPSBNYXRoLmZsb29yKGRlbHRhIC8gUyk7XG4gIGlmIChzZWNvbmRzID4gMCkge1xuICAgIGNvbXBvbmVudHMucHVzaChgJHtzZWNvbmRzfXNgKTtcbiAgICBkZWx0YSAtPSBzZWNvbmRzICogUztcbiAgfVxuICBjb21wb25lbnRzLnB1c2goYCR7ZGVsdGF9bXNgKTtcblxuICAvLyBSZXRhaW4gdGhlIDIgbW9zdCBzaWduaWZpY2FudCBjb21wb25lbnRzXG4gIHJldHVybiBjb21wb25lbnRzLnNsaWNlKDAsIDIpLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBzbHVnaWZ5KHg6IHN0cmluZykge1xuICByZXR1cm4geC5yZXBsYWNlKC9bXmEtekEtWjAtOV8sXSsvZywgJy0nKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXRvbWljV3JpdGUoZmlsZU5hbWU6IHN0cmluZywgY29udGVudHM6IHN0cmluZykge1xuICBhd2FpdCBmcy5wcm9taXNlcy5ta2RpcihwYXRoLmRpcm5hbWUoZmlsZU5hbWUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCB0bXAgPSBgJHtmaWxlTmFtZX0uJHtwcm9jZXNzLnBpZH1gO1xuICBhd2FpdCBmcy5wcm9taXNlcy53cml0ZUZpbGUodG1wLCBjb250ZW50cyk7XG4gIGF3YWl0IGZzLnByb21pc2VzLnJlbmFtZSh0bXAsIGZpbGVOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVhZFNraXBGaWxlKGZpbGVQYXRoPzogc3RyaW5nKTogc3RyaW5nW10ge1xuICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KS5zcGxpdCgnXFxuJyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWctdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQ0EsOEJBZ0dDO0FBa0JELG9DQUdDO0FBeEpELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsK0JBQTRDO0FBQzVDLHVDQUEwRDtBQUUxRCxJQUFBLHlCQUFlLEVBQUMsR0FBRyx5QkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDLENBQUMsQ0FBQztBQUVsRSxNQUFNLFVBQVUsR0FBRztJQUNqQixHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM3RCxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO0lBQ3RELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Q0FDdkQsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDakIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXhDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUMxQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELHNGQUFzRjtBQUN0RixNQUFNLFNBQVMsR0FBRyxP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QztBQUMxQyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsUUFBaUI7SUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDUkVERU5USUFMX0VOVl9WQVJTIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHsgTWVtb3J5U3RyZWFtLCByZWdpc3RlclNlY3JldHMgfSBmcm9tICcuL2NvcmtpbmcnO1xuXG5yZWdpc3RlclNlY3JldHMoLi4uQ1JFREVOVElBTF9FTlZfVkFSUy5tYXAodiA9PiBwcm9jZXNzLmVudlt2XSEpKTtcblxuY29uc3QgU0tJUF9URVNUUyA9IFtcbiAgLi4ucmVhZFNraXBGaWxlKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdza2lwLXRlc3RzLnR4dCcpKSxcbiAgLi4ucmVhZFNraXBGaWxlKHByb2Nlc3MuZW52LkNES19JTlRFR19TS0lQX1RFU1RTX0ZJTEUpLFxuICAuLi4ocHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX1NLSVBfVEVTVFMgPz8gJycpLnNwbGl0KCcsJyksXG5dLm1hcCh4ID0+IHgudHJpbSgpKVxuICAuZmlsdGVyKHggPT4geCAmJiAheC5zdGFydHNXaXRoKCcjJykpO1xuXG5pZiAoU0tJUF9URVNUUy5sZW5ndGggPiAwKSB7XG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKGDihLnvuI8gU2tpcHBpbmcgdGVzdHM6ICR7SlNPTi5zdHJpbmdpZnkoU0tJUF9URVNUUyl9XFxuYCk7XG59XG5cbi8vIFdoZXRoZXIgd2Ugd2FudCB0byBzdG9wIGFmdGVyIHRoZSBmaXJzdCBmYWlsdXJlLCBmb3IgcXVpY2tlciBkZWJ1Z2dpbmcgKGhvcGVmdWxseSkuXG5jb25zdCBGQUlMX0ZBU1QgPSBwcm9jZXNzLmVudi5GQUlMX0ZBU1QgPT09ICd0cnVlJztcblxuLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZSBzdWl0ZSBoYXMgZmFpbGVkLiBJZiBzbywgd2Ugc3RvcCBydW5uaW5nLlxubGV0IGZhaWxlZCA9IGZhbHNlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDb250ZXh0IHtcbiAgcmVhZG9ubHkgcmFuZG9tU3RyaW5nOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW07XG4gIGxvZyhzOiBzdHJpbmcpOiB2b2lkO1xuICByZXBvcnRXYWl0VGltZShtczogbnVtYmVyKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgZm9yIGplc3QncyAndGVzdCcgd2hpY2ggdGFrZXMgcmVncmVzc2lvbi1kaXNhYmxlZCB0ZXN0cyBpbnRvIGFjY291bnQgYW5kIHByaW50cyBhIGJhbm5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gaW50ZWdUZXN0KFxuICBuYW1lOiBzdHJpbmcsXG4gIGNhbGxiYWNrOiAoY29udGV4dDogVGVzdENvbnRleHQpID0+IFByb21pc2U8dm9pZD4sXG4gIHRpbWVvdXRNaWxsaXM/OiBudW1iZXIsXG4pOiB2b2lkIHtcbiAgY29uc3QgcnVubmVyID0gc2hvdWxkU2tpcChuYW1lKSA/IHRlc3Quc2tpcCA6IHRlc3Q7XG5cbiAgamVzdC5yZXRyeVRpbWVzKHBhcnNlSW50KHByb2Nlc3MuZW52LkpFU1RfUkVUUllfVElNRVMgPz8gJzAnKSk7XG5cbiAgcnVubmVyKG5hbWUsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgTWVtb3J5U3RyZWFtKCk7XG5cbiAgICBvdXRwdXQud3JpdGUoJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4nKTtcbiAgICBvdXRwdXQud3JpdGUoYCR7bmFtZX1cXG5gKTtcbiAgICBvdXRwdXQud3JpdGUoJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4nKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgd2FpdFRpbWUgPSAwO1xuXG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFtJTlRFRyBURVNUOjoke25hbWV9XSBTdGFydGluZyAocGlkICR7cHJvY2Vzcy5waWR9KS4uLlxcbmApO1xuICAgIG1heWJlUHJpbnRNZW1vcnlVc2FnZShuYW1lKTtcbiAgICB0cnkge1xuICAgICAgaWYgKEZBSUxfRkFTVCAmJiBmYWlsZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGQUlMX0ZBU1QgcmVxdWVzdGVkIGFuZCBjdXJyZW50bHkgZmFpbGluZy4gU3RvcHBpbmcgdGVzdCBlYXJseS4nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmV0ID0gYXdhaXQgY2FsbGJhY2soe1xuICAgICAgICBvdXRwdXQsXG4gICAgICAgIHJhbmRvbVN0cmluZzogcmFuZG9tU3RyaW5nKCksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxvZyhzOiBzdHJpbmcpIHtcbiAgICAgICAgICBvdXRwdXQud3JpdGUoYCR7c31cXG5gKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVwb3J0V2FpdFRpbWUobikge1xuICAgICAgICAgIHdhaXRUaW1lICs9IG47XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgd3JpdGVMb2cobmFtZSwge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBvdXRwdXQ6IG91dHB1dC50b1N0cmluZygpLFxuICAgICAgICB0b3RhbER1cmF0aW9uOiBEYXRlLm5vdygpIC0gc3RhcnQsXG4gICAgICAgIHdhaXRUaW1lLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBQcmludCB0aGUgYnVmZmVyZWQgb3V0cHV0LCBvbmx5IGlmIHRoZSB0ZXN0IGZhaWxzLlxuICAgICAgZmFpbGVkID0gdHJ1ZTtcblxuICAgICAgb3V0cHV0LndyaXRlKGUubWVzc2FnZSk7XG4gICAgICBvdXRwdXQud3JpdGUoZS5zdGFjayk7XG5cbiAgICAgIGF3YWl0IHdyaXRlTG9nKG5hbWUsIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG91dHB1dDogb3V0cHV0LnRvU3RyaW5nKCksXG4gICAgICAgIHRvdGFsRHVyYXRpb246IERhdGUubm93KCkgLSBzdGFydCxcbiAgICAgICAgd2FpdFRpbWUsXG4gICAgICB9KTtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBbSU5URUcgVEVTVDo6JHtuYW1lfV0gRmFpbGVkOiAke2V9XFxuYCk7XG5cbiAgICAgIGNvbnN0IGlzR2l0SHViID0gISFwcm9jZXNzLmVudi5HSVRIVUJfUlVOX0lEO1xuXG4gICAgICBpZiAoaXNHaXRIdWIpIHtcbiAgICAgICAgLy8gR2l0SHViIEFjdGlvbnMgY29tcGF0aWJsZSBvdXRwdXQgZm9ybWF0dGluZ1xuICAgICAgICAvLyBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3dyaXRpbmctd29ya2Zsb3dzL2Nob29zaW5nLXdoYXQteW91ci13b3JrZmxvdy1kb2VzL3dvcmtmbG93LWNvbW1hbmRzLWZvci1naXRodWItYWN0aW9ucyNzZXR0aW5nLWFuLWVycm9yLW1lc3NhZ2VcbiAgICAgICAgbGV0IHdyaXR0ZW4gPSBwcm9jZXNzLnN0ZGVyci53cml0ZShgOjplcnJvciB0aXRsZT1GYWlsZWQgJHtuYW1lfTo6JHtlLm1lc3NhZ2V9XFxuYCk7XG4gICAgICAgIGlmICghd3JpdHRlbikge1xuICAgICAgICAgIC8vIFdhaXQgZm9yIGRyYWluXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKG9rKSA9PiBwcm9jZXNzLnN0ZGVyci5vbmNlKCdkcmFpbicsIG9rKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcmludCBvdXRwdXQgb25seSBpZiB0aGUgdGVzdCBmYWlscy4gVXNlICdjb25zb2xlLmxvZycgc28gdGhlIG91dHB1dCBpcyBidWZmZXJlZCBieVxuICAgICAgICAvLyBqZXN0IGFuZCBwcmludHMgd2l0aG91dCBhIHN0YWNrIHRyYWNlIChpZiB2ZXJib3NlOiBmYWxzZSkuXG4gICAgICAgIHdyaXR0ZW4gPSBwcm9jZXNzLnN0ZG91dC53cml0ZShbXG4gICAgICAgICAgYDo6Z3JvdXA6OkZhaWx1cmUgZGV0YWlsczogJHtuYW1lfSAoY2xpY2sgdG8gZXhwYW5kKVxcbmAsXG4gICAgICAgICAgYCR7b3V0cHV0LmJ1ZmZlcigpLnRvU3RyaW5nKCl9XFxuYCxcbiAgICAgICAgICAnOjplbmRncm91cDo6XFxuJyxcbiAgICAgICAgXS5qb2luKCcnKSk7XG4gICAgICAgIGlmICghd3JpdHRlbikge1xuICAgICAgICAgIC8vIFdhaXQgZm9yIGRyYWluXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKG9rKSA9PiBwcm9jZXNzLnN0ZG91dC5vbmNlKCdkcmFpbicsIG9rKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZSAnY29uc29sZS5sb2cnIHNvIHRoZSBvdXRwdXQgaXMgYnVmZmVyZWQgYnlcbiAgICAgICAgLy8gamVzdCBhbmQgcHJpbnRzIHdpdGhvdXQgYSBzdGFjayB0cmFjZSAoaWYgdmVyYm9zZTogZmFsc2UpLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZyhvdXRwdXQuYnVmZmVyKCkudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydDtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBbSU5URUcgVEVTVDo6JHtuYW1lfV0gRG9uZSAoJHtodW1hblRpbWUoZHVyYXRpb24pfSkuXFxuYCk7XG4gICAgICBtYXliZVByaW50TWVtb3J5VXNhZ2UobmFtZSk7XG4gICAgfVxuICB9LCB0aW1lb3V0TWlsbGlzKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkU2tpcCh0ZXN0TmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBTS0lQX1RFU1RTLmluY2x1ZGVzKHRlc3ROYW1lKTtcbn1cblxuZnVuY3Rpb24gbWF5YmVQcmludE1lbW9yeVVzYWdlKHRlc3ROYW1lOiBzdHJpbmcpIHtcbiAgaWYgKHByb2Nlc3MuZW52LklOVEVHX01FTU9SWV9ERUJVRyAhPT0gJ3RydWUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG1lbW9yeVVzYWdlID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpIGFzIGFueTtcbiAgY29uc3QgcmVwb3J0OiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWVtb3J5VXNhZ2UpKSB7XG4gICAgcmVwb3J0W2tleV0gPSBgJHtNYXRoLnJvdW5kKHZhbHVlIGFzIG51bWJlciAvIDEwMjQgLyAxMDI0KX0gTUJgO1xuICB9XG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBbSU5URUcgVEVTVDo6JHt0ZXN0TmFtZX1dIE1lbW9yeSBVc2FnZTogJHtKU09OLnN0cmluZ2lmeShyZXBvcnQpfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKCkge1xuICAvLyBDcmF6eVxuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXowLTldKy9nLCAnJyk7XG59XG5cbi8qKlxuICogV3JpdGUgbG9nIGZpbGVzXG4gKlxuICogV3JpdGUgYSB0ZXh0IGxvZyB0byBgJHtJTlRFR19MT0dTfS9bRkFJTEVELV1kZXNjcmlwdGlvbi1vZi10ZXN0LnR4dGAsIGFuZCBhIHNpbmdsZVxuICogbGluZSBvZiBhIE1hcmtkb3duIHRhYmxlIHRvIGAke0lOVEVHX0xPR1N9L21kLzEtZGVzY3JpcHRpb24tb2YtdGVzdC5tZGAuXG4gKlxuICogVGhlIGxhdHRlciBhcmUgZGVzaWduZWQgdG8gYmUgZ2xvYmNhdHRlZCB0byAkR0lUSFVCX1NURVBfU1VNTUFSWSBhZnRlciB0ZXN0c1xuICogKHdlIGRvbid0IHdyaXRlIHRoZXJlIGRpcmVjdGx5IHRvIGF2b2lkIGNvbmN1cnJlbmN5IGlzc3VlcyB3aXRoIG11bHRpcGxlIHByb2Nlc3Nlc1xuICogcmVhZGluZyBhbmQgbXV0YXRpbmcgdGhlIHNhbWUgZmlsZSkuXG4gKlxuICogV2UgZG8gdXNlIGBhdG9taWNXcml0ZWAgdG8gd3JpdGUgZmlsZXMgLS0gaXQncyBvbmx5IG5lY2Vzc2FyeSBmb3IgdGhlIGhlYWRlciBmaWxlLFxuICogd2hpY2ggZ2V0cyBvdmVyd3JpdHRlbiBieSBldmVyeSB0ZXN0LCBqdXN0IHRvIG1ha2Ugc3VyZSBpdCBwcm9wZXJseSBleGlzdHMgKHNob3VsZG4ndFxuICogZW5kIHVwIGVtcHR5IG9yIHdpdGggaW50ZXJsZWF2ZWQgY29udGVudHMpLiBUaGUgb3RoZXIgd3JpdGVzIGFyZSBub3RcbiAqIGNvbnRlbmRlZCBhbmQgZG9uJ3QgbmVlZCB0byBiZSBhdG9taWMsIGJ1dCB0aGUgZnVuY3Rpb24gaXMganVzdCBlcmdvbm9taWMgdG8gdXNlLlxuICovXG5hc3luYyBmdW5jdGlvbiB3cml0ZUxvZyh0ZXN0TmFtZTogc3RyaW5nLCByZXN1bHQ6IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgb3V0cHV0OiBzdHJpbmc7XG4gIHRvdGFsRHVyYXRpb246IG51bWJlcjtcbiAgd2FpdFRpbWU6IG51bWJlcjtcbn0pIHtcbiAgaWYgKHByb2Nlc3MuZW52LklOVEVHX0xPR1MpIHtcbiAgICAvLyBXcml0ZSB0aGUgbG9nIGZpbGVcbiAgICBjb25zdCBzbHVnID0gc2x1Z2lmeSh0ZXN0TmFtZSk7XG4gICAgY29uc3QgbG9nRmlsZU5hbWUgPSBgJHtwcm9jZXNzLmVudi5JTlRFR19MT0dTfS8ke3Jlc3VsdC5zdWNjZXNzID8gJycgOiAnRkFJTEVELSd9JHtzbHVnfS50eHRgO1xuICAgIGF3YWl0IGF0b21pY1dyaXRlKGxvZ0ZpbGVOYW1lLCByZXN1bHQub3V0cHV0KTtcblxuICAgIC8vIFdyaXRlIGEgcm93IGZvciB0aGUgbWFya2Rvd24gdGFibGVcbiAgICAvLyBTb3J0IGZhaWx1cmVzIGJlZm9yZSBzdWNjZXNzZXMsIGFuZCB0aGUgdGFibGUgaGVhZGVyIGJlZm9yZSBhbGxcbiAgICBjb25zdCBtZEZpbGVOYW1lID0gYCR7cHJvY2Vzcy5lbnYuSU5URUdfTE9HU30vbWQvJHtyZXN1bHQuc3VjY2VzcyA/ICcyJyA6ICcxJ30tJHtzbHVnfS5tZGA7XG4gICAgY29uc3QgY29sdW1uczogQXJyYXk8W3N0cmluZywgc3RyaW5nXT4gPSBbXG4gICAgICBbJ1Jlc3VsdCcsIHJlc3VsdC5zdWNjZXNzID8gJ3Bhc3Mg4pyFJyA6ICdmYWlsIOKdjCddLFxuICAgICAgWydUZXN0IE5hbWUnLCB0ZXN0TmFtZV0sXG4gICAgICBbJ1Rlc3QgRHVyYXRpb24nLCBodW1hblRpbWUocmVzdWx0LnRvdGFsRHVyYXRpb24gLSByZXN1bHQud2FpdFRpbWUpXSxcbiAgICAgIFsnV2FpdCBUaW1lJywgcmVzdWx0LndhaXRUaW1lID4gMCA/IGh1bWFuVGltZShyZXN1bHQud2FpdFRpbWUpIDogJy0nXSxcbiAgICBdO1xuICAgIGF3YWl0IGF0b21pY1dyaXRlKGAke3Byb2Nlc3MuZW52LklOVEVHX0xPR1N9L21kLzAtaGVhZGVyLm1kYCwgW1xuICAgICAgYHwgJHtjb2x1bW5zLm1hcCgoW2NvbCwgX3ZhbF0pID0+IGNvbCkuam9pbignIHwgJyl9IHxgLFxuICAgICAgYHwgJHtjb2x1bW5zLm1hcCgoKSA9PiAnLS0tLS0tLS0tLS0nKS5qb2luKCcgfCAnKX0gfGAsXG4gICAgXS5tYXAoeCA9PiBgJHt4fVxcbmApLmpvaW4oJycpKTtcbiAgICBhd2FpdCBhdG9taWNXcml0ZShtZEZpbGVOYW1lLFxuICAgICAgYHwgJHtjb2x1bW5zLm1hcCgoW19jb2wsIHZhbF0pID0+IHZhbCkuam9pbignIHwgJyl9IHxcXG5gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBodW1hblRpbWUoZGVsdGE6IG51bWJlcikge1xuICBjb25zdCBjb21wb25lbnRzID0gW107XG5cbiAgY29uc3QgUyA9IDEwMDA7XG4gIGNvbnN0IE0gPSA2MCAqIFM7XG4gIGNvbnN0IEggPSA2MCAqIE07XG5cbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKGRlbHRhIC8gSCk7XG4gIGlmIChob3VycyA+IDApIHtcbiAgICBjb21wb25lbnRzLnB1c2goYCR7aG91cnN9aGApO1xuICAgIGRlbHRhIC09IGhvdXJzICogSDtcbiAgfVxuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihkZWx0YSAvIE0pO1xuICBpZiAobWludXRlcyA+IDApIHtcbiAgICBjb21wb25lbnRzLnB1c2goYCR7bWludXRlc31tYCk7XG4gICAgZGVsdGEgLT0gbWludXRlcyAqIE07XG4gIH1cbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGguZmxvb3IoZGVsdGEgLyBTKTtcbiAgaWYgKHNlY29uZHMgPiAwKSB7XG4gICAgY29tcG9uZW50cy5wdXNoKGAke3NlY29uZHN9c2ApO1xuICAgIGRlbHRhIC09IHNlY29uZHMgKiBTO1xuICB9XG4gIGNvbXBvbmVudHMucHVzaChgJHtkZWx0YX1tc2ApO1xuXG4gIC8vIFJldGFpbiB0aGUgMiBtb3N0IHNpZ25pZmljYW50IGNvbXBvbmVudHNcbiAgcmV0dXJuIGNvbXBvbmVudHMuc2xpY2UoMCwgMikuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnkoeDogc3RyaW5nKSB7XG4gIHJldHVybiB4LnJlcGxhY2UoL1teYS16QS1aMC05XyxdKy9nLCAnLScpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhdG9taWNXcml0ZShmaWxlTmFtZTogc3RyaW5nLCBjb250ZW50czogc3RyaW5nKSB7XG4gIGF3YWl0IGZzLnByb21pc2VzLm1rZGlyKHBhdGguZGlybmFtZShmaWxlTmFtZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHRtcCA9IGAke2ZpbGVOYW1lfS4ke3Byb2Nlc3MucGlkfWA7XG4gIGF3YWl0IGZzLnByb21pc2VzLndyaXRlRmlsZSh0bXAsIGNvbnRlbnRzKTtcbiAgYXdhaXQgZnMucHJvbWlzZXMucmVuYW1lKHRtcCwgZmlsZU5hbWUpO1xufVxuXG5mdW5jdGlvbiByZWFkU2tpcEZpbGUoZmlsZVBhdGg/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGlmICghZmlsZVBhdGgpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnNwbGl0KCdcXG4nKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=
package/lib/regions.d.ts CHANGED
@@ -3,7 +3,3 @@ export declare function allBut(exclude: string[]): string[];
3
3
  * Regions that don't support CloudFormation Stack Refactoring
4
4
  */
5
5
  export declare const STACK_REFACTORING_REGIONS: string[];
6
- /**
7
- * Regions that don't support AWS::Bedrock::Agent
8
- */
9
- export declare const BEDROCK_AGENT_REGIONS: string[];
package/lib/regions.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BEDROCK_AGENT_REGIONS = exports.STACK_REFACTORING_REGIONS = void 0;
3
+ exports.STACK_REFACTORING_REGIONS = void 0;
4
4
  exports.allBut = allBut;
5
5
  /**
6
6
  * Regions supported by atmosphere
@@ -51,19 +51,4 @@ exports.STACK_REFACTORING_REGIONS = allBut([
51
51
  'ap-southeast-7',
52
52
  'mx-central-1',
53
53
  ]);
54
- /**
55
- * Regions that don't support AWS::Bedrock::Agent
56
- */
57
- exports.BEDROCK_AGENT_REGIONS = allBut([
58
- 'af-south-1',
59
- 'ap-east-1',
60
- 'ap-southeast-3',
61
- 'ap-southeast-4',
62
- 'ap-southeast-5',
63
- 'ap-southeast-7',
64
- 'ca-west-1',
65
- 'il-central-1',
66
- 'mx-central-1',
67
- 'us-west-1',
68
- ]);
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlZ2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0NBLHdCQUVDO0FBMUNEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUc7SUFDbEIsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztJQUNYLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxjQUFjO0lBQ2QsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsWUFBWTtJQUNaLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUNYLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLFdBQVc7SUFDWCxjQUFjO0lBRWQsOENBQThDO0lBQzlDLGtCQUFrQjtJQUNsQixnQkFBZ0I7Q0FDakIsQ0FBQztBQUVGLFNBQWdCLE1BQU0sQ0FBQyxPQUFpQjtJQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7R0FFRztBQUNVLFFBQUEseUJBQXlCLEdBQUcsTUFBTSxDQUFDO0lBQzlDLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsY0FBYztDQUNmLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRyxNQUFNLENBQUM7SUFDMUMsWUFBWTtJQUNaLFdBQVc7SUFDWCxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLGNBQWM7SUFDZCxjQUFjO0lBQ2QsV0FBVztDQUNaLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVnaW9ucyBzdXBwb3J0ZWQgYnkgYXRtb3NwaGVyZVxuICovXG5jb25zdCBBTExfUkVHSU9OUyA9IFtcbiAgJ3VzLWVhc3QtMScsXG4gICd1cy1lYXN0LTInLFxuICAndXMtd2VzdC0xJyxcbiAgJ3VzLXdlc3QtMicsXG4gICdhcC1zb3V0aC0xJyxcbiAgJ2FwLW5vcnRoZWFzdC0xJyxcbiAgJ2FwLW5vcnRoZWFzdC0yJyxcbiAgJ2FwLW5vcnRoZWFzdC0zJyxcbiAgJ2FwLXNvdXRoZWFzdC0xJyxcbiAgJ2FwLXNvdXRoZWFzdC0yJyxcbiAgJ2NhLWNlbnRyYWwtMScsXG4gICdldS1jZW50cmFsLTEnLFxuICAnZXUtd2VzdC0xJyxcbiAgJ2V1LXdlc3QtMicsXG4gICdldS13ZXN0LTMnLFxuICAnZXUtbm9ydGgtMScsXG4gICdzYS1lYXN0LTEnLFxuICAnYWYtc291dGgtMScsXG4gICdhcC1lYXN0LTEnLFxuICAnYXAtc291dGgtMicsXG4gICdhcC1zb3V0aGVhc3QtNCcsXG4gICdldS1jZW50cmFsLTInLFxuICAnZXUtc291dGgtMScsXG4gICdhcC1zb3V0aGVhc3QtMycsXG4gICdldS1zb3V0aC0yJyxcbiAgJ2lsLWNlbnRyYWwtMScsXG4gICdhcC1zb3V0aGVhc3QtNScsXG4gICdhcC1zb3V0aGVhc3QtNycsXG4gICdjYS13ZXN0LTEnLFxuICAnbXgtY2VudHJhbC0xJyxcblxuICAvLyBjdXJyZW50bHkgZXhwZXJpZW5jaW5nIHNlcnZpY2UgZGlzcnVwdGlvbnMuXG4gIC8vICdtZS1jZW50cmFsLTEnLFxuICAvLyAnbWUtc291dGgtMScsXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gYWxsQnV0KGV4Y2x1ZGU6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KEFMTF9SRUdJT05TLmZpbHRlcigocikgPT4gIWV4Y2x1ZGUuaW5jbHVkZXMocikpKSk7XG59XG5cbi8qKlxuICogUmVnaW9ucyB0aGF0IGRvbid0IHN1cHBvcnQgQ2xvdWRGb3JtYXRpb24gU3RhY2sgUmVmYWN0b3JpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFNUQUNLX1JFRkFDVE9SSU5HX1JFR0lPTlMgPSBhbGxCdXQoW1xuICAnYXAtc291dGhlYXN0LTUnLFxuICAnYXAtc291dGhlYXN0LTcnLFxuICAnbXgtY2VudHJhbC0xJyxcbl0pO1xuXG4vKipcbiAqIFJlZ2lvbnMgdGhhdCBkb24ndCBzdXBwb3J0IEFXUzo6QmVkcm9jazo6QWdlbnRcbiAqL1xuZXhwb3J0IGNvbnN0IEJFRFJPQ0tfQUdFTlRfUkVHSU9OUyA9IGFsbEJ1dChbXG4gICdhZi1zb3V0aC0xJyxcbiAgJ2FwLWVhc3QtMScsXG4gICdhcC1zb3V0aGVhc3QtMycsXG4gICdhcC1zb3V0aGVhc3QtNCcsXG4gICdhcC1zb3V0aGVhc3QtNScsXG4gICdhcC1zb3V0aGVhc3QtNycsXG4gICdjYS13ZXN0LTEnLFxuICAnaWwtY2VudHJhbC0xJyxcbiAgJ214LWNlbnRyYWwtMScsXG4gICd1cy13ZXN0LTEnLFxuXSk7XG4iXX0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlZ2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0NBLHdCQUVDO0FBMUNEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLEdBQUc7SUFDbEIsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztJQUNYLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxjQUFjO0lBQ2QsV0FBVztJQUNYLFdBQVc7SUFDWCxXQUFXO0lBQ1gsWUFBWTtJQUNaLFdBQVc7SUFDWCxZQUFZO0lBQ1osV0FBVztJQUNYLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLFdBQVc7SUFDWCxjQUFjO0lBRWQsOENBQThDO0lBQzlDLGtCQUFrQjtJQUNsQixnQkFBZ0I7Q0FDakIsQ0FBQztBQUVGLFNBQWdCLE1BQU0sQ0FBQyxPQUFpQjtJQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7R0FFRztBQUNVLFFBQUEseUJBQXlCLEdBQUcsTUFBTSxDQUFDO0lBQzlDLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsY0FBYztDQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVnaW9ucyBzdXBwb3J0ZWQgYnkgYXRtb3NwaGVyZVxuICovXG5jb25zdCBBTExfUkVHSU9OUyA9IFtcbiAgJ3VzLWVhc3QtMScsXG4gICd1cy1lYXN0LTInLFxuICAndXMtd2VzdC0xJyxcbiAgJ3VzLXdlc3QtMicsXG4gICdhcC1zb3V0aC0xJyxcbiAgJ2FwLW5vcnRoZWFzdC0xJyxcbiAgJ2FwLW5vcnRoZWFzdC0yJyxcbiAgJ2FwLW5vcnRoZWFzdC0zJyxcbiAgJ2FwLXNvdXRoZWFzdC0xJyxcbiAgJ2FwLXNvdXRoZWFzdC0yJyxcbiAgJ2NhLWNlbnRyYWwtMScsXG4gICdldS1jZW50cmFsLTEnLFxuICAnZXUtd2VzdC0xJyxcbiAgJ2V1LXdlc3QtMicsXG4gICdldS13ZXN0LTMnLFxuICAnZXUtbm9ydGgtMScsXG4gICdzYS1lYXN0LTEnLFxuICAnYWYtc291dGgtMScsXG4gICdhcC1lYXN0LTEnLFxuICAnYXAtc291dGgtMicsXG4gICdhcC1zb3V0aGVhc3QtNCcsXG4gICdldS1jZW50cmFsLTInLFxuICAnZXUtc291dGgtMScsXG4gICdhcC1zb3V0aGVhc3QtMycsXG4gICdldS1zb3V0aC0yJyxcbiAgJ2lsLWNlbnRyYWwtMScsXG4gICdhcC1zb3V0aGVhc3QtNScsXG4gICdhcC1zb3V0aGVhc3QtNycsXG4gICdjYS13ZXN0LTEnLFxuICAnbXgtY2VudHJhbC0xJyxcblxuICAvLyBjdXJyZW50bHkgZXhwZXJpZW5jaW5nIHNlcnZpY2UgZGlzcnVwdGlvbnMuXG4gIC8vICdtZS1jZW50cmFsLTEnLFxuICAvLyAnbWUtc291dGgtMScsXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gYWxsQnV0KGV4Y2x1ZGU6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KEFMTF9SRUdJT05TLmZpbHRlcigocikgPT4gIWV4Y2x1ZGUuaW5jbHVkZXMocikpKSk7XG59XG5cbi8qKlxuICogUmVnaW9ucyB0aGF0IGRvbid0IHN1cHBvcnQgQ2xvdWRGb3JtYXRpb24gU3RhY2sgUmVmYWN0b3JpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFNUQUNLX1JFRkFDVE9SSU5HX1JFR0lPTlMgPSBhbGxCdXQoW1xuICAnYXAtc291dGhlYXN0LTUnLFxuICAnYXAtc291dGhlYXN0LTcnLFxuICAnbXgtY2VudHJhbC0xJyxcbl0pO1xuXG4iXX0=
package/lib/with-aws.js CHANGED
@@ -7,6 +7,7 @@ exports.withAws = withAws;
7
7
  exports.regionPool = regionPool;
8
8
  const cdk_atmosphere_client_1 = require("@cdklabs/cdk-atmosphere-client");
9
9
  const aws_1 = require("./aws");
10
+ const corking_1 = require("./corking");
10
11
  const resource_pool_1 = require("./resource-pool");
11
12
  function atmosphereEnabled() {
12
13
  const enabled = process.env.CDK_INTEG_ATMOSPHERE_ENABLED;
@@ -57,6 +58,7 @@ function withAws(block, options = {}) {
57
58
  });
58
59
  let outcome = 'success';
59
60
  context.reportWaitTime(Date.now() - start);
61
+ (0, corking_1.registerSecrets)(allocation.credentials.accessKeyId, allocation.credentials.secretAccessKey, allocation.credentials.sessionToken);
60
62
  try {
61
63
  const aws = await aws_1.AwsClients.forIdentity(context.randomString, allocation.environment.region, {
62
64
  accessKeyId: allocation.credentials.accessKeyId,
@@ -132,4 +134,4 @@ async function sanityCheck(aws) {
132
134
  }
133
135
  }
134
136
  let sanityChecked;
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLWF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLDhDQUdDO0FBRUQsZ0RBTUM7QUFFRCx3Q0FNQztBQXlCRCwwQkFtRUM7QUFHRCxnQ0FXQztBQW5JRCwwRUFBa0U7QUFDbEUsK0JBQW1DO0FBRW5DLG1EQUErQztBQUcvQyxTQUFnQixpQkFBaUI7SUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztJQUN6RCxPQUFPLE9BQU8sS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLEdBQUcsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUM7SUFDeEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFnQixjQUFjO0lBQzVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUM7SUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFvQkQ7Ozs7R0FJRztBQUNILFNBQWdCLE9BQU8sQ0FDckIsS0FBMkUsRUFDM0UsVUFBNkIsRUFBRTtJQUUvQiwwSEFBMEg7SUFDMUgsc0dBQXNHO0lBQ3RHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUVqQyxPQUFPLEtBQUssRUFBRSxPQUFVLEVBQUUsRUFBRTtRQUMxQixNQUFNLGdCQUFnQixH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bGFicy9jZGstYXRtb3NwaGVyZS1jbGllbnQnO1xuaW1wb3J0IHsgQXRtb3NwaGVyZUNsaWVudCB9IGZyb20gJ0BjZGtsYWJzL2Nkay1hdG1vc3BoZXJlLWNsaWVudCc7XG5pbXBvcnQgeyBBd3NDbGllbnRzIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHR5cGUgeyBUZXN0Q29udGV4dCB9IGZyb20gJy4vaW50ZWctdGVzdCc7XG5pbXBvcnQgeyBSZXNvdXJjZVBvb2wgfSBmcm9tICcuL3Jlc291cmNlLXBvb2wnO1xuaW1wb3J0IHR5cGUgeyBEaXNhYmxlQm9vdHN0cmFwQ29udGV4dCB9IGZyb20gJy4vd2l0aC1jZGstYXBwJztcblxuZXhwb3J0IGZ1bmN0aW9uIGF0bW9zcGhlcmVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICBjb25zdCBlbmFibGVkID0gcHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5BQkxFRDtcbiAgcmV0dXJuIGVuYWJsZWQgPT09ICd0cnVlJyB8fCBlbmFibGVkID09PSAnMSc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudi5DREtfSU5URUdfQVRNT1NQSEVSRV9FTkRQT0lOVDtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5EUE9JTlQgaXMgbm90IGRlZmluZWQnKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlUG9vbCgpIHtcbiAgY29uc3QgdmFsdWUgPSBwcm9jZXNzLmVudi5DREtfSU5URUdfQVRNT1NQSEVSRV9QT09MO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDREtfSU5URUdfQVRNT1NQSEVSRV9QT09MIGlzIG5vdCBkZWZpbmVkJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgdHlwZSBBd3NDb250ZXh0ID0geyByZWFkb25seSBhd3M6IEF3c0NsaWVudHMgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBd3NDb250ZXh0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSB0ZXN0IGVudmlyb25tZW50IHRvIGJlIGluIG9uZSBvZiB0aGVzZSByZWdpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHJlZ2lvbnMgYXJlIHBvc3NpYmxlXG4gICAqL1xuICByZWFkb25seSByZWdpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvIG5vdCBib290c3RyYXAgdGhlIGVudlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUJvb3RzdHJhcD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYSBibG9jayB3aXRoIGFuIEFXUyBjbGllbnQgc2V0dXBcbiAqXG4gKiBBbGxvY2F0ZSB0aGUgbmV4dCByZWdpb24gZnJvbSB0aGUgUkVHSU9OIHBvb2wgYW5kIGRpc3Bvc2UgaXQgYWZ0ZXJ3YXJkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBd3M8QSBleHRlbmRzIFRlc3RDb250ZXh0PihcbiAgYmxvY2s6IChjb250ZXh0OiBBICYgQXdzQ29udGV4dCAmIERpc2FibGVCb290c3RyYXBDb250ZXh0KSA9PiBQcm9taXNlPHZvaWQ+LFxuICBvcHRpb25zOiBBd3NDb250ZXh0T3B0aW9ucyA9IHt9LFxuKTogKGNvbnRleHQ6IEEpID0+IFByb21pc2U8dm9pZD4ge1xuICAvLyBTZXQgYSBoaWdoIEplc3QgdGltZW91dCBiZWNhdXNlIGl0IGluY2x1ZGVzIHRoZSB0aW1lIHdhaXRpbmcgZm9yIGxvY2tzOyBhY2NvdW50IGZvciB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lLlxuICAvLyBUaGlzIGlzIG5vdCB0aGUgYWN0dWFsIHRlc3QgZXhlY3V0aW9uIHRpbWUuIFRoZSBlZmZlY3RpdmUgdGVzdCB0aW1lb3V0IGlzIGhhbmRsZWQgYnkgd2l0aFRpbWVvdXQoKS5cbiAgamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7XG5cbiAgcmV0dXJuIGFzeW5jIChjb250ZXh0OiBBKSA9PiB7XG4gICAgY29uc3QgZGlzYWJsZUJvb3RzdHJhcCA9IG9wdGlvbnMuZGlzYWJsZUJvb3RzdHJhcCA/PyBmYWxzZTtcblxuICAgIGlmIChhdG1vc3BoZXJlRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBhdG1vc3BoZXJlID0gbmV3IEF0bW9zcGhlcmVDbGllbnQoYXRtb3NwaGVyZUVuZHBvaW50KCksIHtcbiAgICAgICAgbG9nU3RyZWFtOiBjb250ZXh0Lm91dHB1dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb25zdHJhaW50czogQ29uc3RyYWludFtdID0gW107XG4gICAgICBpZiAob3B0aW9ucy5yZWdpb25zKSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdyZWdpb24nLFxuICAgICAgICAgIHZhbHVlOiBbLi4ub3B0aW9ucy5yZWdpb25zXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGFsbG9jYXRpb24gPSBhd2FpdCBhdG1vc3BoZXJlLmFjcXVpcmUoe1xuICAgICAgICBwb29sOiBhdG1vc3BoZXJlUG9vbCgpLFxuICAgICAgICByZXF1ZXN0ZXI6IGNvbnRleHQubmFtZSxcbiAgICAgICAgdGltZW91dFNlY29uZHM6IDYwICogMzAsXG4gICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgfSk7XG4gICAgICBsZXQgb3V0Y29tZSA9ICdzdWNjZXNzJztcbiAgICAgIGNvbnRleHQucmVwb3J0V2FpdFRpbWUoRGF0ZS5ub3coKSAtIHN0YXJ0KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXdzID0gYXdhaXQgQXdzQ2xpZW50cy5mb3JJZGVudGl0eShjb250ZXh0LnJhbmRvbVN0cmluZywgYWxsb2NhdGlvbi5lbnZpcm9ubWVudC5yZWdpb24sIHtcbiAgICAgICAgICBhY2Nlc3NLZXlJZDogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCxcbiAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGFsbG9jYXRpb24uY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgYWNjb3VudElkOiBhbGxvY2F0aW9uLmVudmlyb25tZW50LmFjY291bnQsXG4gICAgICAgIH0sIGNvbnRleHQub3V0cHV0KTtcbiAgICAgICAgYXdhaXQgc2FuaXR5Q2hlY2soYXdzKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBibG9jayh7IC4uLmNvbnRleHQsIGRpc2FibGVCb290c3RyYXAsIGF3cyB9KTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgb3V0Y29tZSA9ICdmYWlsdXJlJztcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGF3cy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGF0bW9zcGhlcmUucmVsZWFzZShhbGxvY2F0aW9uLmlkLCBvdXRjb21lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlZ2lvblBvb2woKS51c2luZyhhc3luYyAocmVnaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGF3cyA9IGF3YWl0IEF3c0NsaWVudHMuZm9yUmVnaW9uKGNvbnRleHQucmFuZG9tU3RyaW5nLCByZWdpb24sIGNvbnRleHQub3V0cHV0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzYW5pdHlDaGVjayhhd3MpO1xuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKHsgLi4uY29udGV4dCwgZGlzYWJsZUJvb3RzdHJhcCwgYXdzIH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGF3cy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxubGV0IF9yZWdpb25Qb29sOiB1bmRlZmluZWQgfCBSZXNvdXJjZVBvb2w7XG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uUG9vbCgpOiBSZXNvdXJjZVBvb2wge1xuICBpZiAoX3JlZ2lvblBvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBfcmVnaW9uUG9vbDtcbiAgfVxuXG4gIGNvbnN0IFJFR0lPTlMgPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OU1xuICAgID8gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTlMuc3BsaXQoJywnKVxuICAgIDogW3Byb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OID8/ICd1cy1lYXN0LTEnXTtcblxuICBfcmVnaW9uUG9vbCA9IFJlc291cmNlUG9vbC53aXRoUmVzb3VyY2VzKCdhd3NfcmVnaW9ucycsIFJFR0lPTlMpO1xuICByZXR1cm4gX3JlZ2lvblBvb2w7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIG9uZS10aW1lIHF1aWNrIHNhbml0eSBjaGVjayB0aGF0IHRoZSBBV1MgY2xpZW50cyBoYXZlIHByb3Blcmx5IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHNcbiAqXG4gKiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBjYWxscyBhcmUgZ29pbmcgdG8gZmFpbCBhbmQgdGhleSdsbCBiZSByZXRyaWVkIGFuZCBldmVyeXRoaW5nIHdpbGwgdGFrZVxuICogZm9yZXZlciBiZWZvcmUgdGhlIHVzZXIgbm90aWNlcyBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uLlxuICpcbiAqIFdlIGNhbid0IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNpbmNlIGNyZWRlbnRpYWxzIGNvdWxkIGNvbWUgZnJvbVxuICogYW55d2hlcmUsIHNvIGRvIHNpbXBsZSBhY2NvdW50IHJldHJpZXZhbC5cbiAqXG4gKiBPbmx5IGRvIGl0IG9uY2UgcGVyIHByb2Nlc3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhbml0eUNoZWNrKGF3czogQXdzQ2xpZW50cykge1xuICBpZiAoc2FuaXR5Q2hlY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF3cy5hY2NvdW50KCk7XG4gICAgICBzYW5pdHlDaGVja2VkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHNhbml0eUNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQVdTIGNyZWRlbnRpYWxzIHByb2JhYmx5IG5vdCBjb25maWd1cmVkLCBnb3QgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBpZiAoIXNhbml0eUNoZWNrZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXUyBjcmVkZW50aWFscyBwcm9iYWJseSBub3QgY29uZmlndXJlZCwgc2VlIHByZXZpb3VzIGVycm9yJyk7XG4gIH1cbn1cbmxldCBzYW5pdHlDaGVja2VkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuIl19
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3aXRoLWF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLDhDQUdDO0FBRUQsZ0RBTUM7QUFFRCx3Q0FNQztBQXlCRCwwQkF5RUM7QUFHRCxnQ0FXQztBQTFJRCwwRUFBa0U7QUFDbEUsK0JBQW1DO0FBQ25DLHVDQUE0QztBQUU1QyxtREFBK0M7QUFHL0MsU0FBZ0IsaUJBQWlCO0lBQy9CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7SUFDekQsT0FBTyxPQUFPLEtBQUssTUFBTSxJQUFJLE9BQU8sS0FBSyxHQUFHLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQWdCLGtCQUFrQjtJQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDO0lBQ3hELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBZ0IsY0FBYztJQUM1QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO0lBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBb0JEOzs7O0dBSUc7QUFDSCxTQUFnQixPQUFPLENBQ3JCLEtBQTJFLEVBQzNFLFVBQTZCLEVBQUU7SUFFL0IsMEhBQTBIO0lBQzFILHNHQUFzRztJQUN0RyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFFakMsT0FBTyxLQUFLLEVBQUUsT0FBVSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDO1FBRTNELElBQUksaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksd0NBQWdCLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtnQkFDNUQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFpQixFQUFFLENBQUM7WUFDckMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ2YsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO2lCQUM1QixDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sVUFBVSxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDMUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtnQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUN2QixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQ3ZCLFdBQVc7YUFDWixDQUFDLENBQUM7WUFDSCxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUM7WUFDeEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFFM0MsSUFBQSx5QkFBZSxFQUNiLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUNsQyxVQUFVLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFDdEMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQ3BDLENBQUM7WUFFRixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFO29CQUM1RixXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXO29CQUMvQyxlQUFlLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxlQUFlO29CQUN2RCxZQUFZLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxZQUFZO29CQUNqRCxTQUFTLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPO2lCQUMxQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkIsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRXZCLElBQUksQ0FBQztvQkFDSCxPQUFPLE1BQU0sS0FBSyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztnQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO29CQUNoQixPQUFPLEdBQUcsU0FBUyxDQUFDO29CQUNwQixNQUFNLENBQUMsQ0FBQztnQkFDVixDQUFDO3dCQUFTLENBQUM7b0JBQ1QsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsTUFBTSxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUN6QyxNQUFNLEdBQUcsR0FBRyxNQUFNLGdCQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckYsSUFBSSxDQUFDO29CQUNILE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUV2QixPQUFPLE1BQU0sS0FBSyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDNUQsQ0FBQzt3QkFBUyxDQUFDO29CQUNULE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELElBQUksV0FBcUMsQ0FBQztBQUMxQyxTQUFnQixVQUFVO0lBQ3hCLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzlCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVc7UUFDckMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxXQUFXLENBQUMsQ0FBQztJQUU5RSxXQUFXLEdBQUcsNEJBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFlO0lBQ3hDLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDakYsQ0FBQztBQUNILENBQUM7QUFDRCxJQUFJLGFBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnN0cmFpbnQgfSBmcm9tICdAY2RrbGFicy9jZGstYXRtb3NwaGVyZS1jbGllbnQnO1xuaW1wb3J0IHsgQXRtb3NwaGVyZUNsaWVudCB9IGZyb20gJ0BjZGtsYWJzL2Nkay1hdG1vc3BoZXJlLWNsaWVudCc7XG5pbXBvcnQgeyBBd3NDbGllbnRzIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHsgcmVnaXN0ZXJTZWNyZXRzIH0gZnJvbSAnLi9jb3JraW5nJztcbmltcG9ydCB0eXBlIHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgUmVzb3VyY2VQb29sIH0gZnJvbSAnLi9yZXNvdXJjZS1wb29sJztcbmltcG9ydCB0eXBlIHsgRGlzYWJsZUJvb3RzdHJhcENvbnRleHQgfSBmcm9tICcuL3dpdGgtY2RrLWFwcCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdG1vc3BoZXJlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgZW5hYmxlZCA9IHByb2Nlc3MuZW52LkNES19JTlRFR19BVE1PU1BIRVJFX0VOQUJMRUQ7XG4gIHJldHVybiBlbmFibGVkID09PSAndHJ1ZScgfHwgZW5hYmxlZCA9PT0gJzEnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXRtb3NwaGVyZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX0FUTU9TUEhFUkVfRU5EUE9JTlQ7XG4gIGlmICghdmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NES19JTlRFR19BVE1PU1BIRVJFX0VORFBPSU5UIGlzIG5vdCBkZWZpbmVkJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXRtb3NwaGVyZVBvb2woKSB7XG4gIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuQ0RLX0lOVEVHX0FUTU9TUEhFUkVfUE9PTDtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0RLX0lOVEVHX0FUTU9TUEhFUkVfUE9PTCBpcyBub3QgZGVmaW5lZCcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IHR5cGUgQXdzQ29udGV4dCA9IHsgcmVhZG9ubHkgYXdzOiBBd3NDbGllbnRzIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzQ29udGV4dE9wdGlvbnMge1xuICAvKipcbiAgICogUmVxdWVzdCB0aGUgdGVzdCBlbnZpcm9ubWVudCB0byBiZSBpbiBvbmUgb2YgdGhlc2UgcmVnaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFsbCByZWdpb25zIGFyZSBwb3NzaWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEbyBub3QgYm9vdHN0cmFwIHRoZSBlbnZcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVCb290c3RyYXA/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEhpZ2hlciBvcmRlciBmdW5jdGlvbiB0byBleGVjdXRlIGEgYmxvY2sgd2l0aCBhbiBBV1MgY2xpZW50IHNldHVwXG4gKlxuICogQWxsb2NhdGUgdGhlIG5leHQgcmVnaW9uIGZyb20gdGhlIFJFR0lPTiBwb29sIGFuZCBkaXNwb3NlIGl0IGFmdGVyd2FyZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQXdzPEEgZXh0ZW5kcyBUZXN0Q29udGV4dD4oXG4gIGJsb2NrOiAoY29udGV4dDogQSAmIEF3c0NvbnRleHQgJiBEaXNhYmxlQm9vdHN0cmFwQ29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgb3B0aW9uczogQXdzQ29udGV4dE9wdGlvbnMgPSB7fSxcbik6IChjb250ZXh0OiBBKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gU2V0IGEgaGlnaCBKZXN0IHRpbWVvdXQgYmVjYXVzZSBpdCBpbmNsdWRlcyB0aGUgdGltZSB3YWl0aW5nIGZvciBsb2NrczsgYWNjb3VudCBmb3Igd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZS5cbiAgLy8gVGhpcyBpcyBub3QgdGhlIGFjdHVhbCB0ZXN0IGV4ZWN1dGlvbiB0aW1lLiBUaGUgZWZmZWN0aXZlIHRlc3QgdGltZW91dCBpcyBoYW5kbGVkIGJ5IHdpdGhUaW1lb3V0KCkuXG4gIGplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApO1xuXG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGNvbnN0IGRpc2FibGVCb290c3RyYXAgPSBvcHRpb25zLmRpc2FibGVCb290c3RyYXAgPz8gZmFsc2U7XG5cbiAgICBpZiAoYXRtb3NwaGVyZUVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgYXRtb3NwaGVyZSA9IG5ldyBBdG1vc3BoZXJlQ2xpZW50KGF0bW9zcGhlcmVFbmRwb2ludCgpLCB7XG4gICAgICAgIGxvZ1N0cmVhbTogY29udGV4dC5vdXRwdXQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXSA9IFtdO1xuICAgICAgaWYgKG9wdGlvbnMucmVnaW9ucykge1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiAncmVnaW9uJyxcbiAgICAgICAgICB2YWx1ZTogWy4uLm9wdGlvbnMucmVnaW9uc10sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBhbGxvY2F0aW9uID0gYXdhaXQgYXRtb3NwaGVyZS5hY3F1aXJlKHtcbiAgICAgICAgcG9vbDogYXRtb3NwaGVyZVBvb2woKSxcbiAgICAgICAgcmVxdWVzdGVyOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgIHRpbWVvdXRTZWNvbmRzOiA2MCAqIDMwLFxuICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgIH0pO1xuICAgICAgbGV0IG91dGNvbWUgPSAnc3VjY2Vzcyc7XG4gICAgICBjb250ZXh0LnJlcG9ydFdhaXRUaW1lKERhdGUubm93KCkgLSBzdGFydCk7XG5cbiAgICAgIHJlZ2lzdGVyU2VjcmV0cyhcbiAgICAgICAgYWxsb2NhdGlvbi5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCxcbiAgICAgICAgYWxsb2NhdGlvbi5jcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXksXG4gICAgICAgIGFsbG9jYXRpb24uY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuLFxuICAgICAgKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYXdzID0gYXdhaXQgQXdzQ2xpZW50cy5mb3JJZGVudGl0eShjb250ZXh0LnJhbmRvbVN0cmluZywgYWxsb2NhdGlvbi5lbnZpcm9ubWVudC5yZWdpb24sIHtcbiAgICAgICAgICBhY2Nlc3NLZXlJZDogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5hY2Nlc3NLZXlJZCxcbiAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGFsbG9jYXRpb24uY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgICAgIHNlc3Npb25Ub2tlbjogYWxsb2NhdGlvbi5jcmVkZW50aWFscy5zZXNzaW9uVG9rZW4sXG4gICAgICAgICAgYWNjb3VudElkOiBhbGxvY2F0aW9uLmVudmlyb25tZW50LmFjY291bnQsXG4gICAgICAgIH0sIGNvbnRleHQub3V0cHV0KTtcbiAgICAgICAgYXdhaXQgc2FuaXR5Q2hlY2soYXdzKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBibG9jayh7IC4uLmNvbnRleHQsIGRpc2FibGVCb290c3RyYXAsIGF3cyB9KTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgb3V0Y29tZSA9ICdmYWlsdXJlJztcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGF3cy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGF0bW9zcGhlcmUucmVsZWFzZShhbGxvY2F0aW9uLmlkLCBvdXRjb21lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlZ2lvblBvb2woKS51c2luZyhhc3luYyAocmVnaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGF3cyA9IGF3YWl0IEF3c0NsaWVudHMuZm9yUmVnaW9uKGNvbnRleHQucmFuZG9tU3RyaW5nLCByZWdpb24sIGNvbnRleHQub3V0cHV0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBzYW5pdHlDaGVjayhhd3MpO1xuXG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGJsb2NrKHsgLi4uY29udGV4dCwgZGlzYWJsZUJvb3RzdHJhcCwgYXdzIH0pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGF3cy5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cblxubGV0IF9yZWdpb25Qb29sOiB1bmRlZmluZWQgfCBSZXNvdXJjZVBvb2w7XG5leHBvcnQgZnVuY3Rpb24gcmVnaW9uUG9vbCgpOiBSZXNvdXJjZVBvb2wge1xuICBpZiAoX3JlZ2lvblBvb2wgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBfcmVnaW9uUG9vbDtcbiAgfVxuXG4gIGNvbnN0IFJFR0lPTlMgPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OU1xuICAgID8gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTlMuc3BsaXQoJywnKVxuICAgIDogW3Byb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OID8/ICd1cy1lYXN0LTEnXTtcblxuICBfcmVnaW9uUG9vbCA9IFJlc291cmNlUG9vbC53aXRoUmVzb3VyY2VzKCdhd3NfcmVnaW9ucycsIFJFR0lPTlMpO1xuICByZXR1cm4gX3JlZ2lvblBvb2w7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIG9uZS10aW1lIHF1aWNrIHNhbml0eSBjaGVjayB0aGF0IHRoZSBBV1MgY2xpZW50cyBoYXZlIHByb3Blcmx5IGNvbmZpZ3VyZWQgY3JlZGVudGlhbHNcbiAqXG4gKiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBjYWxscyBhcmUgZ29pbmcgdG8gZmFpbCBhbmQgdGhleSdsbCBiZSByZXRyaWVkIGFuZCBldmVyeXRoaW5nIHdpbGwgdGFrZVxuICogZm9yZXZlciBiZWZvcmUgdGhlIHVzZXIgbm90aWNlcyBhIHNpbXBsZSBtaXNjb25maWd1cmF0aW9uLlxuICpcbiAqIFdlIGNhbid0IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNpbmNlIGNyZWRlbnRpYWxzIGNvdWxkIGNvbWUgZnJvbVxuICogYW55d2hlcmUsIHNvIGRvIHNpbXBsZSBhY2NvdW50IHJldHJpZXZhbC5cbiAqXG4gKiBPbmx5IGRvIGl0IG9uY2UgcGVyIHByb2Nlc3MuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNhbml0eUNoZWNrKGF3czogQXdzQ2xpZW50cykge1xuICBpZiAoc2FuaXR5Q2hlY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGF3cy5hY2NvdW50KCk7XG4gICAgICBzYW5pdHlDaGVja2VkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHNhbml0eUNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQVdTIGNyZWRlbnRpYWxzIHByb2JhYmx5IG5vdCBjb25maWd1cmVkLCBnb3QgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBpZiAoIXNhbml0eUNoZWNrZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXUyBjcmVkZW50aWFscyBwcm9iYWJseSBub3QgY29uZmlndXJlZCwgc2VlIHByZXZpb3VzIGVycm9yJyk7XG4gIH1cbn1cbmxldCBzYW5pdHlDaGVja2VkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuIl19
@@ -39,6 +39,25 @@ export declare function withDefaultFixture(block: (context: TestFixture) => Prom
39
39
  export declare function withSpecificFixture(appName: string, block: (context: TestFixture) => Promise<void>, options?: CdkAppContextOptions): (context: TestContext) => Promise<void>;
40
40
  export declare function withExtendedTimeoutFixture(block: (context: TestFixture) => Promise<void>, options?: CdkAppContextOptions): (context: TestContext) => Promise<void>;
41
41
  export declare function withCDKMigrateFixture(language: string, block: (content: TestFixture) => Promise<void>, options?: CdkAppContextOptions): (context: TestContext) => Promise<void>;
42
+ /**
43
+ * Higher order function to add context values to the test app
44
+ *
45
+ * The context is written to the app's `cdk.json`, merged with the
46
+ * framework-provided defaults (like the random bootstrap qualifier) and any
47
+ * context added by enclosing `withAppContext` blocks. May be nested any
48
+ * number of times; inner blocks override outer blocks on key conflicts.
49
+ *
50
+ * Example:
51
+ *
52
+ * ```ts
53
+ * integTest('my test', withDefaultFixture(withAppContext({
54
+ * '@aws-cdk/core:newStyleStackSynthesis': 'true',
55
+ * }, async (fixture) => {
56
+ * // ...
57
+ * })));
58
+ * ```
59
+ */
60
+ export declare function withAppContext(context: Record<string, string>, block: (fixture: TestFixture) => Promise<void>): (fixture: TestFixture) => Promise<void>;
42
61
  /**
43
62
  * Retry wrapper that executes a test callback up to maxAttempts times
44
63
  *
@@ -182,8 +201,38 @@ export declare class TestFixture extends ShellHelper {
182
201
  readonly cli: ITestCliSource;
183
202
  readonly cdkAssets: ITestCliSource;
184
203
  readonly library: ITestLibrarySource;
204
+ private readonly appContext;
185
205
  constructor(integTestDir: string, stackNamePrefix: string, output: NodeJS.WritableStream, aws: AwsClients, randomString: string);
186
206
  log(s: string): void;
207
+ /**
208
+ * Add context values for the test app, and write them to the app's `cdk.json`
209
+ *
210
+ * Values passed here accumulate with earlier calls, and override the
211
+ * framework-provided defaults (like the bootstrap qualifier). Command-line
212
+ * `--context` arguments still take precedence over all of these.
213
+ */
214
+ addAppContext(context: Record<string, string>, dir?: string): Promise<void>;
215
+ /**
216
+ * Remove a context value for the test app, and update the app's `cdk.json`
217
+ *
218
+ * Note: this only prevents the key from being written by this fixture;
219
+ * a value already present in the app's own `cdk.json` is left alone.
220
+ */
221
+ removeAppContext(key: string, dir?: string): Promise<void>;
222
+ /**
223
+ * Merge the accumulated app context into the app's `cdk.json`
224
+ *
225
+ * Also points `toolkitStackName` at the fixture's bootstrap stack, so that
226
+ * commands that look up the bootstrap stack by name (e.g. large-template
227
+ * deploys and refactors that need the staging bucket) find it without the
228
+ * test having to pass `--toolkit-stack-name` everywhere. Command-line
229
+ * arguments still take precedence.
230
+ *
231
+ * Called by the fixture factories as soon as the app directory exists;
232
+ * tests normally don't need to call this directly (use `addAppContext`
233
+ * or wrap the test block in `withAppContext` instead).
234
+ */
235
+ writeAppContext(dir?: string): Promise<void>;
187
236
  /**
188
237
  * Login to the public ECR gallery using the current AWS credentials.
189
238
  * Use this if your test needs to directly pull images outside of a `cdk` or `cdk-assets` command.
@@ -215,6 +264,13 @@ export declare class TestFixture extends ShellHelper {
215
264
  CI: string;
216
265
  };
217
266
  template(stackName: string): any;
267
+ /**
268
+ * Look up the ECR repository name of this fixture's bootstrap stack
269
+ *
270
+ * Expects the environment to have been bootstrapped already with
271
+ * `toolkitStackName: fixture.bootstrapStackName` (or via `ensureBootstrapped`,
272
+ * which uses that stack name by default).
273
+ */
218
274
  bootstrapRepoName(): Promise<string>;
219
275
  get bootstrapStackName(): string;
220
276
  fullStackName(stackName: string): string;