@aws-solutions-constructs/core 2.58.1 → 2.60.0

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.
@@ -12,7 +12,7 @@
12
12
  * and limitations under the License.
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.SuppressCfnNagLambdaWarnings = exports.CreateShortUniqueTestName = exports.CreateApiAuthorizer = exports.CreateTestApi = exports.expectNonexistence = exports.expectKmsKeyAttachedToCorrectResource = exports.CreateTestCache = exports.suppressCustomHandlerCfnNagWarnings = exports.getFakeCertificate = exports.getTestVpc = exports.generateIntegStackName = exports.CreateScrapBucket = exports.fakeEcrRepoArn = void 0;
15
+ exports.SuppressCfnNagLambdaWarnings = exports.CreateShortUniqueTestName = exports.CreateApiAuthorizer = exports.CreateTestApi = exports.expectNonexistence = exports.expectKmsKeyAttachedToCorrectResource = exports.CreateTestCache = exports.suppressCustomHandlerCfnNagWarnings = exports.CreateTestStateMachineDefinitionBody = exports.getFakeCertificate = exports.getTestVpc = exports.generateIntegStackName = exports.CreateScrapBucket = exports.fakeEcrRepoArn = void 0;
16
16
  const aws_s3_1 = require("aws-cdk-lib/aws-s3");
17
17
  const aws_cdk_lib_1 = require("aws-cdk-lib");
18
18
  const vpc_helper_1 = require("../lib/vpc-helper");
@@ -26,6 +26,8 @@ const acm = require("aws-cdk-lib/aws-certificatemanager");
26
26
  const elasticache_defaults_1 = require("../lib/elasticache-defaults");
27
27
  const assertions_1 = require("aws-cdk-lib/assertions");
28
28
  const lambda = require("aws-cdk-lib/aws-lambda");
29
+ const sfn = require("aws-cdk-lib/aws-stepfunctions");
30
+ const sftasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
29
31
  const api = require("aws-cdk-lib/aws-apigateway");
30
32
  exports.fakeEcrRepoArn = 'arn:aws:ecr:us-east-1:123456789012:repository/fake-repo';
31
33
  // Creates a bucket used for testing - minimal properties, destroyed after test
@@ -94,6 +96,20 @@ function getFakeCertificate(scope, id) {
94
96
  return acm.Certificate.fromCertificateArn(scope, id, "arn:aws:acm:us-east-1:123456789012:certificate/11112222-3333-1234-1234-123456789012");
95
97
  }
96
98
  exports.getFakeCertificate = getFakeCertificate;
99
+ // Creates a bucket used for testing - minimal properties, destroyed after test
100
+ function CreateTestStateMachineDefinitionBody(scope, id) {
101
+ const smStep = new lambda.Function(scope, `lambda${id}`, {
102
+ code: new lambda.InlineCode("exports.handler = async (event) => console.log(event)"),
103
+ runtime: lambda.Runtime.NODEJS_20_X,
104
+ handler: "index.handler",
105
+ });
106
+ const task = new sftasks.LambdaInvoke(scope, `task${id}`, {
107
+ lambdaFunction: smStep,
108
+ });
109
+ SuppressCfnNagLambdaWarnings(aws_cdk_lib_1.Stack.of(scope));
110
+ return sfn.DefinitionBody.fromChainable(task);
111
+ }
112
+ exports.CreateTestStateMachineDefinitionBody = CreateTestStateMachineDefinitionBody;
97
113
  function suppressCustomHandlerCfnNagWarnings(stack, handlerId) {
98
114
  stack.node.children.forEach(child => {
99
115
  if (child.node.id === handlerId) {
@@ -241,4 +257,4 @@ function SuppressCfnNagLambdaWarnings(stack) {
241
257
  aws_cdk_lib_1.Aspects.of(stack).add(new CfnNagLambdaAspect());
242
258
  }
243
259
  exports.SuppressCfnNagLambdaWarnings = SuppressCfnNagLambdaWarnings;
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUlILCtDQUEyRTtBQUMzRSw2Q0FBMkY7QUFDM0Ysa0RBQTZDO0FBQzdDLHNEQUE0RjtBQUM1Rix3Q0FBa0U7QUFDbEUsa0VBQW9FO0FBQ3BFLDZCQUE2QjtBQUM3QixxREFBcUQ7QUFDckQsMkNBQTJDO0FBQzNDLDBEQUEwRDtBQUUxRCxzRUFBa0U7QUFDbEUsdURBQXlEO0FBQ3pELGlEQUFpRDtBQUNqRCxrREFBa0Q7QUFFckMsUUFBQSxjQUFjLEdBQUcseURBQXlELENBQUM7QUFFeEYsK0VBQStFO0FBQy9FLFNBQWdCLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO0lBRXZGLElBQUksS0FBSyxFQUFFLHNCQUFzQixFQUFFO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztLQUN4RTtJQUVELHdDQUF3QztJQUN4QyxNQUFNLFlBQVksR0FBZ0I7UUFDaEMsU0FBUyxFQUFFLElBQUk7UUFDZixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsVUFBVSxFQUFFLHlCQUFnQixDQUFDLFVBQVU7UUFDdkMsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQztJQUVGLDBCQUEwQjtJQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUU5RCwwREFBMEQ7SUFDMUQsSUFBSSxnQkFBNkIsQ0FBQztJQUNsQyxJQUFJLEtBQUssRUFBRTtRQUNULGdCQUFnQixHQUFHLHFCQUFhLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3ZEO1NBQU07UUFDTCxnQkFBZ0IsR0FBRyxZQUFZLENB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R0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsT0FBTyxnQkFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBSkQsOERBSUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsNEJBQTRCLENBQUMsS0FBWTtJQUN2RCxxQkFBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELG9FQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCdWNrZXQsIEJ1Y2tldFByb3BzLCBCdWNrZXRFbmNyeXB0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ2ZuUmVzb3VyY2UsIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBBc3BlY3RzLCBJQXNwZWN0LCBBd3MsIEZuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBidWlsZFZwYyB9IGZyb20gJy4uL2xpYi92cGMtaGVscGVyJztcbmltcG9ydCB7IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMsIERlZmF1bHRJc29sYXRlZFZwY1Byb3BzIH0gZnJvbSAnLi4vbGliL3ZwYy1kZWZhdWx0cyc7XG5pbXBvcnQgeyBvdmVycmlkZVByb3BzLCBhZGRDZm5TdXBwcmVzc1J1bGVzIH0gZnJvbSBcIi4uL2xpYi91dGlsc1wiO1xuaW1wb3J0IHsgY3JlYXRlQ2FjaGVTdWJuZXRHcm91cCAgfSBmcm9tIFwiLi4vbGliL2VsYXN0aWNhY2hlLWhlbHBlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNhY2hlIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lbGFzdGljYWNoZSc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBhY20gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlcic7XG5pbXBvcnQgeyBDZm5GdW5jdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBHZXREZWZhdWx0Q2FjaGVQb3J0IH0gZnJvbSBcIi4uL2xpYi9lbGFzdGljYWNoZS1kZWZhdWx0c1wiO1xuaW1wb3J0IHsgTWF0Y2gsIFRlbXBsYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCAqIGFzIGFwaSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcblxuZXhwb3J0IGNvbnN0IGZha2VFY3JSZXBvQXJuID0gJ2Fybjphd3M6ZWNyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6cmVwb3NpdG9yeS9mYWtlLXJlcG8nO1xuXG4vLyBDcmVhdGVzIGEgYnVja2V0IHVzZWQgZm9yIHRlc3RpbmcgLSBtaW5pbWFsIHByb3BlcnRpZXMsIGRlc3Ryb3llZCBhZnRlciB0ZXN0XG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlU2NyYXBCdWNrZXQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBCdWNrZXRQcm9wcyB8IGFueSkge1xuXG4gIGlmIChwcm9wcz8uc2VydmVyQWNjZXNzTG9nc0J1Y2tldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRvbid0IHRyeSB0byBzZW5kIGEgbG9nIGJ1Y2tldCB0byBDcmVhdGVTY3JhcEJ1Y2tldFwiKTtcbiAgfVxuXG4gIC8vIEJhc2ljIHByb3BzIGZvciBzY3JhcCBhbmQgbG9nIGJ1Y2tldHNcbiAgY29uc3QgZGVmYXVsdFByb3BzOiBCdWNrZXRQcm9wcyA9IHtcbiAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICBlbmZvcmNlU1NMOiB0cnVlXG4gIH07XG5cbiAgLy8gQ3JlYXRlIGJhc2ljIGxvZyBidWNrZXRcbiAgY29uc3QgbG9nQnVja2V0ID0gbmV3IEJ1Y2tldChzY29wZSwgYCR7aWR9TG9nYCwgZGVmYXVsdFByb3BzKTtcblxuICAvLyBDb21iaW5lIGJhc2ljIHByb3BzIHdpdGggc3BlY2lhbCBwcm9wcyBmcm9tIHRlc3QgY2xpZW50XG4gIGxldCBzeW50aGVzaXplZFByb3BzOiBCdWNrZXRQcm9wcztcbiAgaWYgKHByb3BzKSB7XG4gICAgc3ludGhlc2l6ZWRQcm9wcyA9IG92ZXJyaWRlUHJvcHMoZGVmYXVsdFByb3BzLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgc3ludGhlc2l6ZWRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiAgfVxuXG4gIC8vIEZpbmFsbHkgLSBzZXQgdXAgbG9nZ2luZyBmb3IgdGhlIHNjcmFwIGJ1Y2tldFxuICBjb25zdCBmaW5hbFByb3BzID0gb3ZlcnJpZGVQcm9wcyhzeW50aGVzaXplZFByb3BzLCB7IHNlcnZlckFjY2Vzc0xvZ3NCdWNrZXQ6IGxvZ0J1Y2tldCB9KTtcblxuICBjb25zdCBzY3JpcHRCdWNrZXQgPSBuZXcgQnVja2V0KFxuICAgIHNjb3BlLFxuICAgIGlkLFxuICAgIGZpbmFsUHJvcHNcbiAgKTtcblxuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxvZ0J1Y2tldCwgW1xuICAgIHtcbiAgICAgIGlkOiBcIlczNVwiLFxuICAgICAgcmVhc29uOiBcIlRoaXMgaXMgYSBsb2cgYnVja2V0XCIsXG4gICAgfVxuICBdKTtcblxuICByZXR1cm4gc2NyaXB0QnVja2V0O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBzdGFjayBuYW1lIGZvciBJbnRlZ3JhdGlvbiB0ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIG9mIHRoZSBpbnRlZyB0ZXN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGEgc3RyaW5nIHdpdGggY3VycmVudCBmaWxlbmFtZSBhZnRlciByZW1vdmluZyBhbnl0aGluZyBiZWZvcmUgdGhlIHByZWZpeCAnLicgYW5kIHN1ZmZpeCAnLmpzJ1xuICogZS5nLiAnaW50ZWcuYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVELmpzJyB3aWxsIHJldHVybiAnYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVEJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZmlsZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHBhdGguZXh0bmFtZShmaWxlbmFtZSkpO1xuICBjb25zdCBzdGFja25hbWUgPSBmaWxlLnNsaWNlKGZpbGUubGFzdEluZGV4T2YoJy4nKSArIDEpLnJlcGxhY2UoL18vZywgJy0nKTtcbiAgcmV0dXJuIHN0YWNrbmFtZTtcbn1cblxuLy8gSGVscGVyIEZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlc3RWcGMoc3RhY2s6IFN0YWNrLCBwdWJsaWNGYWNpbmc6IGJvb2xlYW4gPSB0cnVlLCB1c2VyVnBjUHJvcHM/OiBlYzIuVnBjUHJvcHMpIHtcbiAgcmV0dXJuIGJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBwdWJsaWNGYWNpbmcgP1xuICAgICAgRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpIDpcbiAgICAgIERlZmF1bHRJc29sYXRlZFZwY1Byb3BzKCksXG4gICAgY29uc3RydWN0VnBjUHJvcHM6IHtcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogdHJ1ZSxcbiAgICAgIGVuYWJsZURuc1N1cHBvcnQ6IHRydWUsXG4gICAgICBpcEFkZHJlc3NlczogZWMyLklwQWRkcmVzc2VzLmNpZHIoJzE3Mi4xNjguMC4wLzE2JyksXG4gICAgfSxcbiAgICB1c2VyVnBjUHJvcHNcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGYWtlQ2VydGlmaWNhdGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyk6IGFjbS5JQ2VydGlmaWNhdGUge1xuICByZXR1cm4gYWNtLkNlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICBzY29wZSxcbiAgICBpZCxcbiAgICBcImFybjphd3M6YWNtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Y2VydGlmaWNhdGUvMTExMTIyMjItMzMzMy0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyXCJcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHByZXNzQ3VzdG9tSGFuZGxlckNmbk5hZ1dhcm5pbmdzKHN0YWNrOiBTdGFjaywgaGFuZGxlcklkOiBzdHJpbmcpIHtcbiAgc3RhY2subm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICBpZiAoY2hpbGQubm9kZS5pZCA9PT0gaGFuZGxlcklkKSB7XG4gICAgICBjb25zdCBoYW5kbGVyRnVuY3Rpb24gPSBjaGlsZC5ub2RlLmZpbmRDaGlsZCgnSGFuZGxlcicpIGFzIENmbkZ1bmN0aW9uO1xuICAgICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhoYW5kbGVyRnVuY3Rpb24sIFt7IGlkOiBcIlc1OFwiLCByZWFzb246IFwiQ0RLIGdlbmVyYXRlZCBjdXN0b20gcmVzb3VyY2VcIn1dKTtcbiAgICAgIGFkZENmblN1cHByZXNzUnVsZXMoaGFuZGxlckZ1bmN0aW9uLCBbeyBpZDogXCJXODlcIiwgcmVhc29uOiBcIkNESyBnZW5lcmF0ZWQgY3VzdG9tIHJlc291cmNlXCJ9XSk7XG4gICAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGhhbmRsZXJGdW5jdGlvbiwgW3sgaWQ6IFwiVzkyXCIsIHJlYXNvbjogXCJDREsgZ2VuZXJhdGVkIGN1c3RvbSByZXNvdXJjZVwifV0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVUZXN0Q2FjaGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgdnBjOiBlYzIuSVZwYywgcG9ydD86IG51bWJlcikge1xuICBjb25zdCBjYWNoZVBvcnQgPSBwb3J0ID8/IEdldERlZmF1bHRDYWNoZVBvcnQoKTtcblxuICAvLyBDcmVhdGUgdGhlIHN1Ym5ldCBncm91cCBmcm9tIGFsbCB0aGUgaXNvbGF0ZWQgc3VibmV0cyBpbiB0aGUgVlBDXG4gIGNvbnN0IHN1Ym5ldEdyb3VwID0gY3JlYXRlQ2FjaGVTdWJuZXRHcm91cChzY29wZSwgdnBjLCBpZCk7XG4gIGNvbnN0IGVtcHR5U0cgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAoc2NvcGUsIGAke2lkfS1jYWNoZXNnYCwge1xuICAgIHZwYyxcbiAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICB9KTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhlbXB0eVNHLCBbeyBpZDogXCJXNDBcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoZW1wdHlTRywgW3sgaWQ6IFwiVzVcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoZW1wdHlTRywgW3sgaWQ6IFwiVzM2XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuXG4gIGNvbnN0IGNhY2hlUHJvcHMgPSB7XG4gICAgY2x1c3Rlck5hbWU6IGAke2lkfS1jZGstY2x1c3RlcmAsXG4gICAgY2FjaGVOb2RlVHlwZTogXCJjYWNoZS50My5tZWRpdW1cIixcbiAgICBlbmdpbmU6IFwibWVtY2FjaGVkXCIsXG4gICAgbnVtQ2FjaGVOb2RlczogMixcbiAgICBwb3J0OiBjYWNoZVBvcnQsXG4gICAgYXpNb2RlOiBcImNyb3NzLWF6XCIsXG4gICAgdnBjU2VjdXJpdHlHcm91cElkczogW2VtcHR5U0cuc2VjdXJpdHlHcm91cElkXSxcbiAgICBjYWNoZVN1Ym5ldEdyb3VwTmFtZTogc3VibmV0R3JvdXAuY2FjaGVTdWJuZXRHcm91cE5hbWUsXG4gIH07XG5cbiAgY29uc3QgbmV3Q2FjaGUgPSBuZXcgY2FjaGUuQ2ZuQ2FjaGVDbHVzdGVyKFxuICAgIHNjb3BlLFxuICAgIGAke2lkfS1jbHVzdGVyYCxcbiAgICBjYWNoZVByb3BzXG4gICk7XG4gIG5ld0NhY2hlLmFkZERlcGVuZGVuY3koc3VibmV0R3JvdXApO1xuICByZXR1cm4gbmV3Q2FjaGU7XG59XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IGEgS01TIGtleSB3aXRoIGEgc3BlY2lmaWMgZGVzY3JpcHRpb24gZXhpc3RzIG9uIGEgcmVzb3VyY2VcbiAqXG4gKiBAcGFyYW0gc3RhY2sgVGhlIENsb3VkRm9ybWF0aW9uIFN0YWNrIHRoYXQgY29udGFpbnMgdGhlIHRvIHZhbGlkYXRlLlxuICogQHBhcmFtIHBhcmVudFJlc291cmNlVHlwZSBUaGUgdHlwZSBvZiBDbG91ZEZvcm1hdGlvbiBSZXNvdXJjZSB0aGF0IHNob3VsZCBoYXZlIHRoZSBrZXkgc2V0IG9uIGl0LCBlLmcuLCBgQVdTOjpTTlM6OlRvcGljYCwgZXRjLi4uXG4gKiBAcGFyYW0gZGVzY3JpcHRpb24gVGhlIHZhbHVlIG9mIHRoZSBEZXNjcmlwdGlvbiBwcm9wZXJ0eSBvbiB0aGUgS01TIEtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0S21zS2V5QXR0YWNoZWRUb0NvcnJlY3RSZXNvdXJjZShzdGFjazogU3RhY2ssIHBhcmVudFJlc291cmNlVHlwZTogc3RyaW5nLCBrZXlEZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgY29uc3QgcmVzb3VyY2UgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OktNUzo6S2V5Jywge1xuICAgIFByb3BlcnRpZXM6IHtcbiAgICAgIERlc2NyaXB0aW9uOiBNYXRjaC5leGFjdChrZXlEZXNjcmlwdGlvbilcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IFsgbG9naWNhbElkIF0gPSBPYmplY3Qua2V5cyhyZXNvdXJjZSk7XG4gIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKHBhcmVudFJlc291cmNlVHlwZSwge1xuICAgIEttc01hc3RlcktleUlkOiB7XG4gICAgICBcIkZuOjpHZXRBdHRcIjogW1xuICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgIFwiQXJuXCJcbiAgICAgIF1cbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0Tm9uZXhpc3RlbmNlKHN0YWNrOiBTdGFjaywgdHlwZTogc3RyaW5nLCBwcm9wczogb2JqZWN0KSB7XG4gIGNvbnN0IHNob3VsZEZpbmROb3RoaW5nID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKHR5cGUsIHByb3BzKTtcbiAgZXhwZWN0KE9iamVjdC5rZXlzKHNob3VsZEZpbmROb3RoaW5nKS5sZW5ndGgpLnRvRXF1YWwoMCk7XG59XG5cbi8vIHByaXZhdGUgaGVscGVyIGNsYXNzIHRvIHN1cHByZXNzIHRoZSBzdGFuZGFyZCBjZm4gbmFnIHdhcm5pbmdzIGZvciBsYW1iZGEgZnVuY3Rpb25zIHVzZWQgaW4gaW50ZWcgdGVzdHNcbmNsYXNzIENmbk5hZ0xhbWJkYUFzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwdWJsaWMgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc291cmNlID0gbm9kZSBhcyBDZm5SZXNvdXJjZTtcbiAgICBpZiAocmVzb3VyY2UuY2ZuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJykge1xuICAgICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhyZXNvdXJjZSwgW1xuICAgICAgICB7IGlkOiAnVzU4JywgcmVhc29uOiAnVGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgY3JlYXRlZCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgcGFydCBvZiBhbiBhY3R1YWwgY29uc3RydWN0JyB9LFxuICAgICAgICB7IGlkOiAnVzg5JywgcmVhc29uOiAnVGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgY3JlYXRlZCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgcGFydCBvZiBhbiBhY3R1YWwgY29uc3RydWN0JyB9LFxuICAgICAgICB7IGlkOiAnVzkyJywgcmVhc29uOiAnVGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgY3JlYXRlZCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgcGFydCBvZiBhbiBhY3R1YWwgY29uc3RydWN0JyB9XG4gICAgICBdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZVRlc3RBcGkoc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nKTogYXBpLkxhbWJkYVJlc3RBcGkge1xuICBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssIGAke2lkfUZ1bmN0aW9uYCwge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgfSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMobGFtYmRhRnVuY3Rpb24sIFt7IGlkOiBcIlc1OFwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhsYW1iZGFGdW5jdGlvbiwgW3sgaWQ6IFwiVzg5XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxhbWJkYUZ1bmN0aW9uLCBbeyBpZDogXCJXOTJcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG5cbiAgY29uc3QgcmVzdEFwaSA9IG5ldyBhcGkuTGFtYmRhUmVzdEFwaShzdGFjaywgYCR7aWR9QXBpYCwge1xuICAgIGhhbmRsZXI6IGxhbWJkYUZ1bmN0aW9uLFxuICAgIGRlZmF1bHRNZXRob2RPcHRpb25zOiB7XG4gICAgICBhdXRob3JpemF0aW9uVHlwZTogYXBpLkF1dGhvcml6YXRpb25UeXBlLkNVU1RPTSxcbiAgICAgIGF1dGhvcml6ZXI6IENyZWF0ZUFwaUF1dGhvcml6ZXIoc3RhY2ssIGAke2lkfS1hdXRob3JpemVyYClcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG5ld0RlcGxveW1lbnQgPSByZXN0QXBpLmxhdGVzdERlcGxveW1lbnQ7XG4gIGlmIChuZXdEZXBsb3ltZW50KSB7XG4gICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdEZXBsb3ltZW50LCBbXG4gICAgICB7IGlkOiBcIlc2OFwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH0sXG4gICAgXSk7XG4gIH1cblxuICBjb25zdCBuZXdNZXRob2QgPSByZXN0QXBpLm1ldGhvZHNbMF07XG4gIGFkZENmblN1cHByZXNzUnVsZXMobmV3TWV0aG9kLCBbeyBpZDogXCJXNTlcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGNvbnN0IG5ld01ldGhvZFR3byA9IHJlc3RBcGkubWV0aG9kc1sxXTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdNZXRob2RUd28sIFt7IGlkOiBcIlc1OVwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcblxuICBjb25zdCBuZXdTdGFnZSA9IHJlc3RBcGkuZGVwbG95bWVudFN0YWdlO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKG5ld1N0YWdlLCBbeyBpZDogXCJXNjRcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMobmV3U3RhZ2UsIFt7IGlkOiBcIlc2OVwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcblxuICByZXR1cm4gcmVzdEFwaTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZUFwaUF1dGhvcml6ZXIoc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nKTogYXBpLklBdXRob3JpemVyIHtcbiAgY29uc3QgYXV0aEZuID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgYCR7aWR9QXV0aEZ1bmN0aW9uYCwge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YLFxuICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgfSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoYXV0aEZuLCBbeyBpZDogXCJXNThcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoYXV0aEZuLCBbeyBpZDogXCJXODlcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoYXV0aEZuLCBbeyBpZDogXCJXOTJcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG5cbiAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBhcGkuUmVxdWVzdEF1dGhvcml6ZXIoc3RhY2ssIGlkLCB7XG4gICAgaGFuZGxlcjogYXV0aEZuLFxuICAgIGlkZW50aXR5U291cmNlczogW2FwaS5JZGVudGl0eVNvdXJjZS5oZWFkZXIoJ0F1dGhvcml6YXRpb24nKV1cbiAgfSk7XG5cbiAgcmV0dXJuIGF1dGhvcml6ZXI7XG59XG5cbi8vIENyZWF0ZSBhIHNob3J0LCB1bmlxdWUgdG8gdGhpcyBzdGFjayBuYW1lXG4vLyB0ZWNobmljYWxseSB0aGlzIGlzIG5vdCAxMDAlIE9LLCBhcyBpdCBvbmx5IHVzZXMgYSBwb3J0aW9uIG9mIHRoZVxuLy8gc3RhY2sgZ3VpZCAtIGJ1dCBpdCdzIGZvciB0ZXN0cyBvbmx5IHNvIGlmIHRoZSBsYXN0IHNlZ21lbnQgb2YgMiBzdGFjayBndWlkcyBjb2xsaWRlIHNvbWVkYXlcbi8vIChWRVJZIHVubGlrZWx5KSwganVzdCBydW5uaW5nIGFnYWluIHNob3VsZCB0YWtlIGNhcmUgb2YgaXQuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlU2hvcnRVbmlxdWVUZXN0TmFtZShzdHViOiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RhY2tHdWlkID0gRm4uc2VsZWN0KDIsIEZuLnNwbGl0KCcvJywgYCR7QXdzLlNUQUNLX0lEfWApKTtcbiAgY29uc3QgZ3VpZFBvcnRpb24gPSBGbi5zZWxlY3QoNCwgRm4uc3BsaXQoJy0nLCBzdGFja0d1aWQpKTtcbiAgcmV0dXJuIEZuLmpvaW4oXCItXCIsIFtzdHViLCAgZ3VpZFBvcnRpb25dKTtcbn1cblxuLyoqXG4gKiBVc2VkIHRvIHN1cHByZXNzIGNmbiBuYWcgVzU4LCBXODksIGFuZCBXOTIgcnVsZXMgb24gbGFtYmRhIGludGVncmF0aW9uIHRlc3QgcmVzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBzdGFjayAtIFRoZSBzdGFjayB0byBzdXBwcmVzcyBjZm4gbmFnIGxhbWJkYSBydWxlcyBvblxuICovXG5leHBvcnQgZnVuY3Rpb24gU3VwcHJlc3NDZm5OYWdMYW1iZGFXYXJuaW5ncyhzdGFjazogU3RhY2spIHtcbiAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBDZm5OYWdMYW1iZGFBc3BlY3QoKSk7XG59XG4iXX0=
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUlILCtDQUEyRTtBQUMzRSw2Q0FBMkY7QUFDM0Ysa0RBQTZDO0FBQzdDLHNEQUE0RjtBQUM1Rix3Q0FBa0U7QUFDbEUsa0VBQW1FO0FBQ25FLDZCQUE2QjtBQUM3QixxREFBcUQ7QUFDckQsMkNBQTJDO0FBQzNDLDBEQUEwRDtBQUUxRCxzRUFBa0U7QUFDbEUsdURBQXlEO0FBQ3pELGlEQUFpRDtBQUNqRCxxREFBcUQ7QUFDckQsK0RBQStEO0FBQy9ELGtEQUFrRDtBQUVyQyxRQUFBLGNBQWMsR0FBRyx5REFBeUQsQ0FBQztBQUV4RiwrRUFBK0U7QUFDL0UsU0FBZ0IsaUJBQWlCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7SUFFdkYsSUFBSSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQsd0NBQXdDO0lBQ3hDLE1BQU0sWUFBWSxHQUFnQjtRQUNoQyxTQUFTLEVBQUUsSUFBSTtRQUNmLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE9BQU87UUFDcEMsaUJBQWlCLEVBQUUsSUFBSTtRQUN2QixVQUFVLEVBQUUseUJBQWdCLENBQUMsVUFBVTtRQUN2QyxVQUFVLEVBQUUsSUFBSTtLQUNqQixDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksZUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTlELDBEQUEwRDtJQUMxRCxJQUFJLGdCQUE2QixDQUFDO0lBQ2xDLElBQUksS0FBSyxFQUFFO1FBQ1QsZ0JBQWdCLEdBQUcscUJBQWEsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDdkQ7U0FB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S0FBSyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUN0RCxPQUFPLEVBQUUsTUFBTTtRQUNmLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQzlELENBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFoQkQsa0RBZ0JDO0FBRUQsNENBQTRDO0FBQzVDLG9FQUFvRTtBQUNwRSwrRkFBK0Y7QUFDL0YsOERBQThEO0FBQzlELFNBQWdCLHlCQUF5QixDQUFDLElBQVk7SUFDcEQsTUFBTSxTQUFTLEdBQUcsZ0JBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLGdCQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLGlCQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sV0FBVyxHQUFHLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRCxPQUFPLGdCQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFKRCw4REFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiw0QkFBNEIsQ0FBQyxLQUFZO0lBQ3ZELHFCQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsb0VBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0UHJvcHMsIEJ1Y2tldEVuY3J5cHRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDZm5SZXNvdXJjZSwgUmVtb3ZhbFBvbGljeSwgU3RhY2ssIEFzcGVjdHMsIElBc3BlY3QsIEF3cywgRm4gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IGJ1aWxkVnBjIH0gZnJvbSAnLi4vbGliL3ZwYy1oZWxwZXInO1xuaW1wb3J0IHsgRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcywgRGVmYXVsdElzb2xhdGVkVnBjUHJvcHMgfSBmcm9tICcuLi9saWIvdnBjLWRlZmF1bHRzJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMsIGFkZENmblN1cHByZXNzUnVsZXMgfSBmcm9tIFwiLi4vbGliL3V0aWxzXCI7XG5pbXBvcnQgeyBjcmVhdGVDYWNoZVN1Ym5ldEdyb3VwIH0gZnJvbSBcIi4uL2xpYi9lbGFzdGljYWNoZS1oZWxwZXJcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjYWNoZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2FjaGUnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0IHsgQ2ZuRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgR2V0RGVmYXVsdENhY2hlUG9ydCB9IGZyb20gXCIuLi9saWIvZWxhc3RpY2FjaGUtZGVmYXVsdHNcIjtcbmltcG9ydCB7IE1hdGNoLCBUZW1wbGF0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zXCI7XG5pbXBvcnQgKiBhcyBzZnRhc2tzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrc1wiO1xuaW1wb3J0ICogYXMgYXBpIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheVwiO1xuXG5leHBvcnQgY29uc3QgZmFrZUVjclJlcG9Bcm4gPSAnYXJuOmF3czplY3I6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpyZXBvc2l0b3J5L2Zha2UtcmVwbyc7XG5cbi8vIENyZWF0ZXMgYSBidWNrZXQgdXNlZCBmb3IgdGVzdGluZyAtIG1pbmltYWwgcHJvcGVydGllcywgZGVzdHJveWVkIGFmdGVyIHRlc3RcbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVTY3JhcEJ1Y2tldChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IEJ1Y2tldFByb3BzIHwgYW55KSB7XG5cbiAgaWYgKHByb3BzPy5zZXJ2ZXJBY2Nlc3NMb2dzQnVja2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRG9uJ3QgdHJ5IHRvIHNlbmQgYSBsb2cgYnVja2V0IHRvIENyZWF0ZVNjcmFwQnVja2V0XCIpO1xuICB9XG5cbiAgLy8gQmFzaWMgcHJvcHMgZm9yIHNjcmFwIGFuZCBsb2cgYnVja2V0c1xuICBjb25zdCBkZWZhdWx0UHJvcHM6IEJ1Y2tldFByb3BzID0ge1xuICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIGVuZm9yY2VTU0w6IHRydWVcbiAgfTtcblxuICAvLyBDcmVhdGUgYmFzaWMgbG9nIGJ1Y2tldFxuICBjb25zdCBsb2dCdWNrZXQgPSBuZXcgQnVja2V0KHNjb3BlLCBgJHtpZH1Mb2dgLCBkZWZhdWx0UHJvcHMpO1xuXG4gIC8vIENvbWJpbmUgYmFzaWMgcHJvcHMgd2l0aCBzcGVjaWFsIHByb3BzIGZyb20gdGVzdCBjbGllbnRcbiAgbGV0IHN5bnRoZXNpemVkUHJvcHM6IEJ1Y2tldFByb3BzO1xuICBpZiAocHJvcHMpIHtcbiAgICBzeW50aGVzaXplZFByb3BzID0gb3ZlcnJpZGVQcm9wcyhkZWZhdWx0UHJvcHMsIHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICBzeW50aGVzaXplZFByb3BzID0gZGVmYXVsdFByb3BzO1xuICB9XG5cbiAgLy8gRmluYWxseSAtIHNldCB1cCBsb2dnaW5nIGZvciB0aGUgc2NyYXAgYnVja2V0XG4gIGNvbnN0IGZpbmFsUHJvcHMgPSBvdmVycmlkZVByb3BzKHN5bnRoZXNpemVkUHJvcHMsIHsgc2VydmVyQWNjZXNzTG9nc0J1Y2tldDogbG9nQnVja2V0IH0pO1xuXG4gIGNvbnN0IHNjcmlwdEJ1Y2tldCA9IG5ldyBCdWNrZXQoXG4gICAgc2NvcGUsXG4gICAgaWQsXG4gICAgZmluYWxQcm9wc1xuICApO1xuXG4gIGFkZENmblN1cHByZXNzUnVsZXMobG9nQnVja2V0LCBbXG4gICAge1xuICAgICAgaWQ6IFwiVzM1XCIsXG4gICAgICByZWFzb246IFwiVGhpcyBpcyBhIGxvZyBidWNrZXRcIixcbiAgICB9XG4gIF0pO1xuXG4gIHJldHVybiBzY3JpcHRCdWNrZXQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHN0YWNrIG5hbWUgZm9yIEludGVncmF0aW9uIHRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGludGVnIHRlc3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gYSBzdHJpbmcgd2l0aCBjdXJyZW50IGZpbGVuYW1lIGFmdGVyIHJlbW92aW5nIGFueXRoaW5nIGJlZm9yZSB0aGUgcHJlZml4ICcuJyBhbmQgc3VmZml4ICcuanMnXG4gKiBlLmcuICdpbnRlZy5hcGlnYXRld2F5LWR5bmFtb2RiLUNSVUQuanMnIHdpbGwgcmV0dXJuICdhcGlnYXRld2F5LWR5bmFtb2RiLUNSVUQnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmaWxlID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgcGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gIGNvbnN0IHN0YWNrbmFtZSA9IGZpbGUuc2xpY2UoZmlsZS5sYXN0SW5kZXhPZignLicpICsgMSkucmVwbGFjZSgvXy9nLCAnLScpO1xuICByZXR1cm4gc3RhY2tuYW1lO1xufVxuXG4vLyBIZWxwZXIgRnVuY3Rpb25zXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVzdFZwYyhzdGFjazogU3RhY2ssIHB1YmxpY0ZhY2luZzogYm9vbGVhbiA9IHRydWUsIHVzZXJWcGNQcm9wcz86IGVjMi5WcGNQcm9wcykge1xuICByZXR1cm4gYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IHB1YmxpY0ZhY2luZyA/XG4gICAgICBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCkgOlxuICAgICAgRGVmYXVsdElzb2xhdGVkVnBjUHJvcHMoKSxcbiAgICBjb25zdHJ1Y3RWcGNQcm9wczoge1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcignMTcyLjE2OC4wLjAvMTYnKSxcbiAgICB9LFxuICAgIHVzZXJWcGNQcm9wc1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZha2VDZXJ0aWZpY2F0ZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogYWNtLklDZXJ0aWZpY2F0ZSB7XG4gIHJldHVybiBhY20uQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgIHNjb3BlLFxuICAgIGlkLFxuICAgIFwiYXJuOmF3czphY206dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpjZXJ0aWZpY2F0ZS8xMTExMjIyMi0zMzMzLTEyMzQtMTIzNC0xMjM0NTY3ODkwMTJcIlxuICApO1xufVxuXG4vLyBDcmVhdGVzIGEgYnVja2V0IHVzZWQgZm9yIHRlc3RpbmcgLSBtaW5pbWFsIHByb3BlcnRpZXMsIGRlc3Ryb3llZCBhZnRlciB0ZXN0XG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlVGVzdFN0YXRlTWFjaGluZURlZmluaXRpb25Cb2R5KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpOiBzZm4uRGVmaW5pdGlvbkJvZHkge1xuXG4gIGNvbnN0IHNtU3RlcCA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc2NvcGUsIGBsYW1iZGEke2lkfWAsIHtcbiAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoXG4gICAgICBcImV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4gY29uc29sZS5sb2coZXZlbnQpXCJcbiAgICApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICB9KTtcblxuICBjb25zdCB0YXNrID0gbmV3IHNmdGFza3MuTGFtYmRhSW52b2tlKHNjb3BlLCBgdGFzayR7aWR9YCwge1xuICAgIGxhbWJkYUZ1bmN0aW9uOiBzbVN0ZXAsXG4gIH0pO1xuXG4gIFN1cHByZXNzQ2ZuTmFnTGFtYmRhV2FybmluZ3MoU3RhY2sub2Yoc2NvcGUpKTtcblxuICByZXR1cm4gc2ZuLkRlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUodGFzayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwcmVzc0N1c3RvbUhhbmRsZXJDZm5OYWdXYXJuaW5ncyhzdGFjazogU3RhY2ssIGhhbmRsZXJJZDogc3RyaW5nKSB7XG4gIHN0YWNrLm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgaWYgKGNoaWxkLm5vZGUuaWQgPT09IGhhbmRsZXJJZCkge1xuICAgICAgY29uc3QgaGFuZGxlckZ1bmN0aW9uID0gY2hpbGQubm9kZS5maW5kQ2hpbGQoJ0hhbmRsZXInKSBhcyBDZm5GdW5jdGlvbjtcbiAgICAgIGFkZENmblN1cHByZXNzUnVsZXMoaGFuZGxlckZ1bmN0aW9uLCBbeyBpZDogXCJXNThcIiwgcmVhc29uOiBcIkNESyBnZW5lcmF0ZWQgY3VzdG9tIHJlc291cmNlXCIgfV0pO1xuICAgICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhoYW5kbGVyRnVuY3Rpb24sIFt7IGlkOiBcIlc4OVwiLCByZWFzb246IFwiQ0RLIGdlbmVyYXRlZCBjdXN0b20gcmVzb3VyY2VcIiB9XSk7XG4gICAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGhhbmRsZXJGdW5jdGlvbiwgW3sgaWQ6IFwiVzkyXCIsIHJlYXNvbjogXCJDREsgZ2VuZXJhdGVkIGN1c3RvbSByZXNvdXJjZVwiIH1dKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlVGVzdENhY2hlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHZwYzogZWMyLklWcGMsIHBvcnQ/OiBudW1iZXIpIHtcbiAgY29uc3QgY2FjaGVQb3J0ID0gcG9ydCA/PyBHZXREZWZhdWx0Q2FjaGVQb3J0KCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBzdWJuZXQgZ3JvdXAgZnJvbSBhbGwgdGhlIGlzb2xhdGVkIHN1Ym5ldHMgaW4gdGhlIFZQQ1xuICBjb25zdCBzdWJuZXRHcm91cCA9IGNyZWF0ZUNhY2hlU3VibmV0R3JvdXAoc2NvcGUsIHZwYywgaWQpO1xuICBjb25zdCBlbXB0eVNHID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHNjb3BlLCBgJHtpZH0tY2FjaGVzZ2AsIHtcbiAgICB2cGMsXG4gICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgfSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoZW1wdHlTRywgW3sgaWQ6IFwiVzQwXCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGVtcHR5U0csIFt7IGlkOiBcIlc1XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGVtcHR5U0csIFt7IGlkOiBcIlczNlwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcblxuICBjb25zdCBjYWNoZVByb3BzID0ge1xuICAgIGNsdXN0ZXJOYW1lOiBgJHtpZH0tY2RrLWNsdXN0ZXJgLFxuICAgIGNhY2hlTm9kZVR5cGU6IFwiY2FjaGUudDMubWVkaXVtXCIsXG4gICAgZW5naW5lOiBcIm1lbWNhY2hlZFwiLFxuICAgIG51bUNhY2hlTm9kZXM6IDIsXG4gICAgcG9ydDogY2FjaGVQb3J0LFxuICAgIGF6TW9kZTogXCJjcm9zcy1helwiLFxuICAgIHZwY1NlY3VyaXR5R3JvdXBJZHM6IFtlbXB0eVNHLnNlY3VyaXR5R3JvdXBJZF0sXG4gICAgY2FjaGVTdWJuZXRHcm91cE5hbWU6IHN1Ym5ldEdyb3VwLmNhY2hlU3VibmV0R3JvdXBOYW1lLFxuICB9O1xuXG4gIGNvbnN0IG5ld0NhY2hlID0gbmV3IGNhY2hlLkNmbkNhY2hlQ2x1c3RlcihcbiAgICBzY29wZSxcbiAgICBgJHtpZH0tY2x1c3RlcmAsXG4gICAgY2FjaGVQcm9wc1xuICApO1xuICBuZXdDYWNoZS5hZGREZXBlbmRlbmN5KHN1Ym5ldEdyb3VwKTtcbiAgcmV0dXJuIG5ld0NhY2hlO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCBhIEtNUyBrZXkgd2l0aCBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIGV4aXN0cyBvbiBhIHJlc291cmNlXG4gKlxuICogQHBhcmFtIHN0YWNrIFRoZSBDbG91ZEZvcm1hdGlvbiBTdGFjayB0aGF0IGNvbnRhaW5zIHRoZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSBwYXJlbnRSZXNvdXJjZVR5cGUgVGhlIHR5cGUgb2YgQ2xvdWRGb3JtYXRpb24gUmVzb3VyY2UgdGhhdCBzaG91bGQgaGF2ZSB0aGUga2V5IHNldCBvbiBpdCwgZS5nLiwgYEFXUzo6U05TOjpUb3BpY2AsIGV0Yy4uLlxuICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSB2YWx1ZSBvZiB0aGUgRGVzY3JpcHRpb24gcHJvcGVydHkgb24gdGhlIEtNUyBLZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEttc0tleUF0dGFjaGVkVG9Db3JyZWN0UmVzb3VyY2Uoc3RhY2s6IFN0YWNrLCBwYXJlbnRSZXNvdXJjZVR5cGU6IHN0cmluZywga2V5RGVzY3JpcHRpb246IHN0cmluZykge1xuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIGNvbnN0IHJlc291cmNlID0gdGVtcGxhdGUuZmluZFJlc291cmNlcygnQVdTOjpLTVM6OktleScsIHtcbiAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICBEZXNjcmlwdGlvbjogTWF0Y2guZXhhY3Qoa2V5RGVzY3JpcHRpb24pXG4gICAgfVxuICB9KTtcblxuICBjb25zdCBbbG9naWNhbElkXSA9IE9iamVjdC5rZXlzKHJlc291cmNlKTtcbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMocGFyZW50UmVzb3VyY2VUeXBlLCB7XG4gICAgS21zTWFzdGVyS2V5SWQ6IHtcbiAgICAgIFwiRm46OkdldEF0dFwiOiBbXG4gICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgXCJBcm5cIlxuICAgICAgXVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3ROb25leGlzdGVuY2Uoc3RhY2s6IFN0YWNrLCB0eXBlOiBzdHJpbmcsIHByb3BzOiBvYmplY3QpIHtcbiAgY29uc3Qgc2hvdWxkRmluZE5vdGhpbmcgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXModHlwZSwgcHJvcHMpO1xuICBleHBlY3QoT2JqZWN0LmtleXMoc2hvdWxkRmluZE5vdGhpbmcpLmxlbmd0aCkudG9FcXVhbCgwKTtcbn1cblxuLy8gcHJpdmF0ZSBoZWxwZXIgY2xhc3MgdG8gc3VwcHJlc3MgdGhlIHN0YW5kYXJkIGNmbiBuYWcgd2FybmluZ3MgZm9yIGxhbWJkYSBmdW5jdGlvbnMgdXNlZCBpbiBpbnRlZyB0ZXN0c1xuY2xhc3MgQ2ZuTmFnTGFtYmRhQXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHB1YmxpYyB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBub2RlIGFzIENmblJlc291cmNlO1xuICAgIGlmIChyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKHJlc291cmNlLCBbXG4gICAgICAgIHsgaWQ6ICdXNTgnLCByZWFzb246ICdUaGlzIExhbWJkYSBGdW5jdGlvbiBpcyBjcmVhdGVkIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCBwYXJ0IG9mIGFuIGFjdHVhbCBjb25zdHJ1Y3QnIH0sXG4gICAgICAgIHsgaWQ6ICdXODknLCByZWFzb246ICdUaGlzIExhbWJkYSBGdW5jdGlvbiBpcyBjcmVhdGVkIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCBwYXJ0IG9mIGFuIGFjdHVhbCBjb25zdHJ1Y3QnIH0sXG4gICAgICAgIHsgaWQ6ICdXOTInLCByZWFzb246ICdUaGlzIExhbWJkYSBGdW5jdGlvbiBpcyBjcmVhdGVkIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCBwYXJ0IG9mIGFuIGFjdHVhbCBjb25zdHJ1Y3QnIH1cbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlVGVzdEFwaShzdGFjazogU3RhY2ssIGlkOiBzdHJpbmcpOiBhcGkuTGFtYmRhUmVzdEFwaSB7XG4gIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgYCR7aWR9RnVuY3Rpb25gLCB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgaGFuZGxlcjogXCIuaGFuZGxlclwiLFxuICB9KTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhsYW1iZGFGdW5jdGlvbiwgW3sgaWQ6IFwiVzU4XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxhbWJkYUZ1bmN0aW9uLCBbeyBpZDogXCJXODlcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMobGFtYmRhRnVuY3Rpb24sIFt7IGlkOiBcIlc5MlwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcblxuICBjb25zdCByZXN0QXBpID0gbmV3IGFwaS5MYW1iZGFSZXN0QXBpKHN0YWNrLCBgJHtpZH1BcGlgLCB7XG4gICAgaGFuZGxlcjogbGFtYmRhRnVuY3Rpb24sXG4gICAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IHtcbiAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBhcGkuQXV0aG9yaXphdGlvblR5cGUuQ1VTVE9NLFxuICAgICAgYXV0aG9yaXplcjogQ3JlYXRlQXBpQXV0aG9yaXplcihzdGFjaywgYCR7aWR9LWF1dGhvcml6ZXJgKVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGVwbG95bWVudCA9IHJlc3RBcGkubGF0ZXN0RGVwbG95bWVudDtcbiAgaWYgKG5ld0RlcGxveW1lbnQpIHtcbiAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKG5ld0RlcGxveW1lbnQsIFtcbiAgICAgIHsgaWQ6IFwiVzY4XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfSxcbiAgICBdKTtcbiAgfVxuXG4gIGNvbnN0IG5ld01ldGhvZCA9IHJlc3RBcGkubWV0aG9kc1swXTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdNZXRob2QsIFt7IGlkOiBcIlc1OVwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgY29uc3QgbmV3TWV0aG9kVHdvID0gcmVzdEFwaS5tZXRob2RzWzFdO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKG5ld01ldGhvZFR3bywgW3sgaWQ6IFwiVzU5XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuXG4gIGNvbnN0IG5ld1N0YWdlID0gcmVzdEFwaS5kZXBsb3ltZW50U3RhZ2U7XG4gIGFkZENmblN1cHByZXNzUnVsZXMobmV3U3RhZ2UsIFt7IGlkOiBcIlc2NFwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdTdGFnZSwgW3sgaWQ6IFwiVzY5XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuXG4gIHJldHVybiByZXN0QXBpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlQXBpQXV0aG9yaXplcihzdGFjazogU3RhY2ssIGlkOiBzdHJpbmcpOiBhcGkuSUF1dGhvcml6ZXIge1xuICBjb25zdCBhdXRoRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCBgJHtpZH1BdXRoRnVuY3Rpb25gLCB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gsXG4gICAgaGFuZGxlcjogXCIuaGFuZGxlclwiLFxuICB9KTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhhdXRoRm4sIFt7IGlkOiBcIlc1OFwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhhdXRoRm4sIFt7IGlkOiBcIlc4OVwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhhdXRoRm4sIFt7IGlkOiBcIlc5MlwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcblxuICBjb25zdCBhdXRob3JpemVyID0gbmV3IGFwaS5SZXF1ZXN0QXV0aG9yaXplcihzdGFjaywgaWQsIHtcbiAgICBoYW5kbGVyOiBhdXRoRm4sXG4gICAgaWRlbnRpdHlTb3VyY2VzOiBbYXBpLklkZW50aXR5U291cmNlLmhlYWRlcignQXV0aG9yaXphdGlvbicpXVxuICB9KTtcblxuICByZXR1cm4gYXV0aG9yaXplcjtcbn1cblxuLy8gQ3JlYXRlIGEgc2hvcnQsIHVuaXF1ZSB0byB0aGlzIHN0YWNrIG5hbWVcbi8vIHRlY2huaWNhbGx5IHRoaXMgaXMgbm90IDEwMCUgT0ssIGFzIGl0IG9ubHkgdXNlcyBhIHBvcnRpb24gb2YgdGhlXG4vLyBzdGFjayBndWlkIC0gYnV0IGl0J3MgZm9yIHRlc3RzIG9ubHkgc28gaWYgdGhlIGxhc3Qgc2VnbWVudCBvZiAyIHN0YWNrIGd1aWRzIGNvbGxpZGUgc29tZWRheVxuLy8gKFZFUlkgdW5saWtlbHkpLCBqdXN0IHJ1bm5pbmcgYWdhaW4gc2hvdWxkIHRha2UgY2FyZSBvZiBpdC5cbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVTaG9ydFVuaXF1ZVRlc3ROYW1lKHN0dWI6IHN0cmluZykge1xuICBjb25zdCBzdGFja0d1aWQgPSBGbi5zZWxlY3QoMiwgRm4uc3BsaXQoJy8nLCBgJHtBd3MuU1RBQ0tfSUR9YCkpO1xuICBjb25zdCBndWlkUG9ydGlvbiA9IEZuLnNlbGVjdCg0LCBGbi5zcGxpdCgnLScsIHN0YWNrR3VpZCkpO1xuICByZXR1cm4gRm4uam9pbihcIi1cIiwgW3N0dWIsIGd1aWRQb3J0aW9uXSk7XG59XG5cbi8qKlxuICogVXNlZCB0byBzdXBwcmVzcyBjZm4gbmFnIFc1OCwgVzg5LCBhbmQgVzkyIHJ1bGVzIG9uIGxhbWJkYSBpbnRlZ3JhdGlvbiB0ZXN0IHJlc291cmNlcy5cbiAqXG4gKiBAcGFyYW0gc3RhY2sgLSBUaGUgc3RhY2sgdG8gc3VwcHJlc3MgY2ZuIG5hZyBsYW1iZGEgcnVsZXMgb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFN1cHByZXNzQ2ZuTmFnTGFtYmRhV2FybmluZ3Moc3RhY2s6IFN0YWNrKSB7XG4gIEFzcGVjdHMub2Yoc3RhY2spLmFkZChuZXcgQ2ZuTmFnTGFtYmRhQXNwZWN0KCkpO1xufVxuIl19