@jjrawlins/cdk-diff-pr-github-action 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.jsii +18 -18
  2. package/lib/CdkDiffIamTemplate.js +17 -6
  3. package/lib/CdkDiffIamTemplateStackSet.js +25 -6
  4. package/lib/CdkDiffStackWorkflow.js +1 -1
  5. package/lib/CdkDriftDetectionWorkflow.js +1 -1
  6. package/lib/CdkDriftIamTemplate.js +2 -2
  7. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/LICENSE +201 -0
  8. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/README.md +6 -0
  9. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-cjs/index.js +415 -0
  10. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-cjs/lib/aws/partitions.json +267 -0
  11. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/aws.js +10 -0
  12. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/index.js +6 -0
  13. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/index.js +3 -0
  14. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/isVirtualHostableS3Bucket.js +25 -0
  15. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/parseArn.js +18 -0
  16. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partition.js +41 -0
  17. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partitions.json +267 -0
  18. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/lib/isIpAddress.js +1 -0
  19. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/resolveDefaultAwsRegionalEndpointsConfig.js +21 -0
  20. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/resolveEndpoint.js +1 -0
  21. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/types/EndpointError.js +1 -0
  22. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/types/EndpointRuleObject.js +1 -0
  23. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/types/ErrorRuleObject.js +1 -0
  24. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/types/RuleSetObject.js +1 -0
  25. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/types/TreeRuleObject.js +1 -0
  26. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/types/index.js +6 -0
  27. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-es/types/shared.js +1 -0
  28. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/aws.d.ts +2 -0
  29. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/index.d.ts +6 -0
  30. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/lib/aws/index.d.ts +3 -0
  31. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/lib/aws/isVirtualHostableS3Bucket.d.ts +5 -0
  32. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/lib/aws/parseArn.d.ts +7 -0
  33. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/lib/aws/partition.d.ts +38 -0
  34. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/lib/isIpAddress.d.ts +1 -0
  35. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/resolveDefaultAwsRegionalEndpointsConfig.d.ts +56 -0
  36. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/resolveEndpoint.d.ts +1 -0
  37. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/aws.d.ts +2 -0
  38. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/index.d.ts +6 -0
  39. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/lib/aws/index.d.ts +3 -0
  40. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/lib/aws/isVirtualHostableS3Bucket.d.ts +4 -0
  41. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/lib/aws/parseArn.d.ts +2 -0
  42. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/lib/aws/partition.d.ts +28 -0
  43. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/lib/isIpAddress.d.ts +1 -0
  44. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/resolveDefaultAwsRegionalEndpointsConfig.d.ts +35 -0
  45. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/resolveEndpoint.d.ts +1 -0
  46. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/types/EndpointError.d.ts +1 -0
  47. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/types/EndpointRuleObject.d.ts +6 -0
  48. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/types/ErrorRuleObject.d.ts +1 -0
  49. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/types/RuleSetObject.d.ts +5 -0
  50. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/types/TreeRuleObject.d.ts +1 -0
  51. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/types/index.d.ts +6 -0
  52. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/ts3.4/types/shared.d.ts +12 -0
  53. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/types/EndpointError.d.ts +1 -0
  54. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/types/EndpointRuleObject.d.ts +1 -0
  55. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/types/ErrorRuleObject.d.ts +1 -0
  56. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/types/RuleSetObject.d.ts +1 -0
  57. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/types/TreeRuleObject.d.ts +1 -0
  58. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/types/index.d.ts +6 -0
  59. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/dist-types/types/shared.d.ts +1 -0
  60. package/node_modules/@aws-sdk/client-cloudformation/node_modules/@aws-sdk/util-endpoints/package.json +60 -0
  61. package/node_modules/@aws-sdk/client-cloudformation/package.json +2 -2
  62. package/package.json +2 -2
package/.jsii CHANGED
@@ -7,7 +7,7 @@
7
7
  ]
8
8
  },
9
9
  "bundled": {
10
- "@aws-sdk/client-cloudformation": "^3.982.0",
10
+ "@aws-sdk/client-cloudformation": "^3.983.0",
11
11
  "@types/crypto-js": "^4.2.2",
12
12
  "@types/js-yaml": "^4.0.9",
13
13
  "crypto-js": "^4.2.0",
@@ -3576,7 +3576,7 @@
3576
3576
  },
3577
3577
  "locationInModule": {
3578
3578
  "filename": "src/CdkDiffIamTemplate.ts",
3579
- "line": 440
3579
+ "line": 453
3580
3580
  },
3581
3581
  "parameters": [
3582
3582
  {
@@ -3590,7 +3590,7 @@
3590
3590
  "kind": "class",
3591
3591
  "locationInModule": {
3592
3592
  "filename": "src/CdkDiffIamTemplate.ts",
3593
- "line": 439
3593
+ "line": 452
3594
3594
  },
3595
3595
  "name": "CdkDiffIamTemplate",
3596
3596
  "symbolId": "src/CdkDiffIamTemplate:CdkDiffIamTemplate"
@@ -3825,7 +3825,7 @@
3825
3825
  "kind": "interface",
3826
3826
  "locationInModule": {
3827
3827
  "filename": "src/CdkDiffIamTemplate.ts",
3828
- "line": 426
3828
+ "line": 439
3829
3829
  },
3830
3830
  "name": "CdkDiffIamTemplateProps",
3831
3831
  "properties": [
@@ -3838,7 +3838,7 @@
3838
3838
  "immutable": true,
3839
3839
  "locationInModule": {
3840
3840
  "filename": "src/CdkDiffIamTemplate.ts",
3841
- "line": 428
3841
+ "line": 441
3842
3842
  },
3843
3843
  "name": "project",
3844
3844
  "type": {
@@ -3854,7 +3854,7 @@
3854
3854
  "immutable": true,
3855
3855
  "locationInModule": {
3856
3856
  "filename": "src/CdkDiffIamTemplate.ts",
3857
- "line": 430
3857
+ "line": 443
3858
3858
  },
3859
3859
  "name": "outputPath",
3860
3860
  "optional": true,
@@ -3879,7 +3879,7 @@
3879
3879
  },
3880
3880
  "locationInModule": {
3881
3881
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
3882
- "line": 526
3882
+ "line": 545
3883
3883
  },
3884
3884
  "parameters": [
3885
3885
  {
@@ -3893,7 +3893,7 @@
3893
3893
  "kind": "class",
3894
3894
  "locationInModule": {
3895
3895
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
3896
- "line": 525
3896
+ "line": 544
3897
3897
  },
3898
3898
  "name": "CdkDiffIamTemplateStackSet",
3899
3899
  "symbolId": "src/CdkDiffIamTemplateStackSet:CdkDiffIamTemplateStackSet"
@@ -4260,7 +4260,7 @@
4260
4260
  "kind": "interface",
4261
4261
  "locationInModule": {
4262
4262
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4263
- "line": 489
4263
+ "line": 508
4264
4264
  },
4265
4265
  "name": "CdkDiffIamTemplateStackSetProps",
4266
4266
  "properties": [
@@ -4273,7 +4273,7 @@
4273
4273
  "immutable": true,
4274
4274
  "locationInModule": {
4275
4275
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4276
- "line": 491
4276
+ "line": 510
4277
4277
  },
4278
4278
  "name": "project",
4279
4279
  "type": {
@@ -4289,7 +4289,7 @@
4289
4289
  "immutable": true,
4290
4290
  "locationInModule": {
4291
4291
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4292
- "line": 506
4292
+ "line": 525
4293
4293
  },
4294
4294
  "name": "autoDeployment",
4295
4295
  "optional": true,
@@ -4307,7 +4307,7 @@
4307
4307
  "immutable": true,
4308
4308
  "locationInModule": {
4309
4309
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4310
- "line": 514
4310
+ "line": 533
4311
4311
  },
4312
4312
  "name": "delegatedAdmin",
4313
4313
  "optional": true,
@@ -4324,7 +4324,7 @@
4324
4324
  "immutable": true,
4325
4325
  "locationInModule": {
4326
4326
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4327
- "line": 497
4327
+ "line": 516
4328
4328
  },
4329
4329
  "name": "outputPath",
4330
4330
  "optional": true,
@@ -4341,7 +4341,7 @@
4341
4341
  "immutable": true,
4342
4342
  "locationInModule": {
4343
4343
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4344
- "line": 503
4344
+ "line": 522
4345
4345
  },
4346
4346
  "name": "regions",
4347
4347
  "optional": true,
@@ -4363,7 +4363,7 @@
4363
4363
  "immutable": true,
4364
4364
  "locationInModule": {
4365
4365
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4366
- "line": 494
4366
+ "line": 513
4367
4367
  },
4368
4368
  "name": "stackSetName",
4369
4369
  "optional": true,
@@ -4380,7 +4380,7 @@
4380
4380
  "immutable": true,
4381
4381
  "locationInModule": {
4382
4382
  "filename": "src/CdkDiffIamTemplateStackSet.ts",
4383
- "line": 500
4383
+ "line": 519
4384
4384
  },
4385
4385
  "name": "targetOrganizationalUnitIds",
4386
4386
  "optional": true,
@@ -5393,6 +5393,6 @@
5393
5393
  "symbolId": "src/CdkDiffIamTemplateStackSet:StackSetRoleSelection"
5394
5394
  }
5395
5395
  },
5396
- "version": "1.2.1",
5397
- "fingerprint": "Cg6WNgbWGWEimKSa1rZTXI2lq0xsnUhbzKvaWjMep8Y="
5396
+ "version": "1.2.3",
5397
+ "fingerprint": "eMUE8ioACHf9D6uZBopD/Ew6Z36W03VXmyBSOln20o4="
5398
5398
  }
@@ -58,8 +58,8 @@ class CdkDiffIamTemplateGenerator {
58
58
  if (!skipOidcProvider) {
59
59
  lines.push(...this.generateOidcProviderLines());
60
60
  }
61
- // OIDC Role
62
- lines.push(...this.generateOidcRoleLines(oidcRoleName, githubOidc, skipOidcProvider));
61
+ // OIDC Role (needs permission to assume the changeset role)
62
+ lines.push(...this.generateOidcRoleLines(oidcRoleName, githubOidc, skipOidcProvider, props.roleName));
63
63
  // Changeset Role (trusts the created OIDC role)
64
64
  lines.push(...this.generateChangesetRoleWithOidcRef(props.roleName));
65
65
  // Outputs
@@ -172,7 +172,7 @@ class CdkDiffIamTemplateGenerator {
172
172
  '',
173
173
  ];
174
174
  }
175
- static generateOidcRoleLines(roleName, githubOidc, skipOidcProvider = false) {
175
+ static generateOidcRoleLines(roleName, githubOidc, skipOidcProvider = false, changesetRoleName) {
176
176
  const subjectClaims = this.buildSubjectClaims(githubOidc);
177
177
  const lines = [
178
178
  ' # GitHub OIDC Role - authenticates GitHub Actions workflows',
@@ -188,6 +188,17 @@ class CdkDiffIamTemplateGenerator {
188
188
  for (const claim of subjectClaims) {
189
189
  lines.push(` - '${claim}'`);
190
190
  }
191
+ // Add policy to allow assuming the changeset role (if specified)
192
+ if (changesetRoleName) {
193
+ lines.push(' Policies:');
194
+ lines.push(' - PolicyName: AssumeChangesetRole');
195
+ lines.push(' PolicyDocument:');
196
+ lines.push(" Version: '2012-10-17'");
197
+ lines.push(' Statement:');
198
+ lines.push(' - Effect: Allow');
199
+ lines.push(' Action: sts:AssumeRole');
200
+ lines.push(` Resource: !Sub 'arn:aws:iam::\${AWS::AccountId}:role/${changesetRoleName}'`);
201
+ }
191
202
  lines.push('');
192
203
  return lines;
193
204
  }
@@ -334,7 +345,7 @@ class CdkDiffIamTemplateGenerator {
334
345
  }
335
346
  exports.CdkDiffIamTemplateGenerator = CdkDiffIamTemplateGenerator;
336
347
  _a = JSII_RTTI_SYMBOL_1;
337
- CdkDiffIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateGenerator", version: "1.2.1" };
348
+ CdkDiffIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateGenerator", version: "1.2.3" };
338
349
  /**
339
350
  * Projen construct that emits a CloudFormation template with minimal IAM permissions
340
351
  * for the CDK Diff Stack Workflow.
@@ -357,5 +368,5 @@ class CdkDiffIamTemplate {
357
368
  }
358
369
  exports.CdkDiffIamTemplate = CdkDiffIamTemplate;
359
370
  _b = JSII_RTTI_SYMBOL_1;
360
- CdkDiffIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplate", version: "1.2.1" };
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Nka0RpZmZJYW1UZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFrQztBQW1EbEM7OztHQUdHO0FBQ0gsTUFBYSwyQkFBMkI7SUFDdEM7O09BRUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBdUM7UUFDN0QsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUM7UUFFckQsaUJBQWlCO1FBQ2pCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1lBQ3RGLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsZUFBdUIscUNBQXFDO1FBQ3ZGLE9BQU8sNkNBQTZDLFlBQVksOEVBQThFLENBQUM7SUFDakosQ0FBQztJQUVEOztPQUVHO0lBQ0ss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LE1BQU0sQ0FBQyw0QkFBNEI7UUFDekMsT0FBTztZQUNMLHdCQUF3QjtZQUN4QixrREFBa0Q7WUFDbEQseUNBQXlDO1lBQ3pDLGFBQWE7WUFDYiwwREFBMEQ7WUFDMUQsRUFBRTtZQUNGLHlCQUF5QjtZQUN6QixtREFBbUQ7WUFDbkQsa0NBQWtDO1lBQ2xDLGFBQWE7WUFDYiwyREFBMkQ7U0FDNUQsQ0FBQztJQUNKLENBQUM7O0FBNVdILGtFQTZXQzs7O0FBWUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGtCQUFrQjtJQUM3QixZQUFZLEtBQThCO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUkscUNBQXFDLENBQUM7UUFFN0Usd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLElBQUksaUJBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6RSxrQkFBa0I7UUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUU7WUFDbkQsV0FBVyxFQUNULDRIQUE0SDtZQUM5SCxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsMkJBQTJCLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDO1NBQ3BFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBZkgsZ0RBZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgR2l0SHViT2lkY0NvbmZpZyB9IGZyb20gJy4vQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQnO1xuXG4vKipcbiAqIFByb3BzIGZvciBnZW5lcmF0aW5nIENESyBEaWZmIElBTSB0ZW1wbGF0ZXMgKG5vIFByb2plbiBkZXBlbmRlbmN5KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzIHtcbiAgLyoqIE5hbWUgZm9yIHRoZSBjaGFuZ2VzZXQgSUFNIHJvbGUgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIHRoZSBleGlzdGluZyBHaXRIdWIgT0lEQyByb2xlIHRoYXQgY2FuIGFzc3VtZSB0aGlzIGNoYW5nZXNldCByb2xlLlxuICAgKiBSZXF1aXJlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIGZhbHNlIG9yIHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IG9pZGNSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWdpb24gZm9yIHRoZSBPSURDIHRydXN0IGNvbmRpdGlvbi5cbiAgICogT25seSB1c2VkIHdoZW4gb2lkY1JvbGVBcm4gaXMgcHJvdmlkZWQgKGV4dGVybmFsIE9JREMgcm9sZSkuXG4gICAqL1xuICByZWFkb25seSBvaWRjUmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBHaXRIdWIgT0lEQyByb2xlIHdpdGhpbiB0aGlzIHRlbXBsYXRlIGluc3RlYWQgb2YgdXNpbmcgYW4gZXhpc3Rpbmcgb25lLlxuICAgKiBXaGVuIHRydWUsIGdpdGh1Yk9pZGMgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCBhbmQgb2lkY1JvbGVBcm4gaXMgaWdub3JlZC5cbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZU9pZGNSb2xlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2l0SHViIE9JREMgcm9sZSB0byBjcmVhdGUuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIHRydWUuXG4gICAqIERlZmF1bHQ6ICdHaXRIdWJPSURDUm9sZSdcbiAgICovXG4gIHJlYWRvbmx5IG9pZGNSb2xlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIE9JREMgY29uZmlndXJhdGlvbiBmb3IgcmVwby9icmFuY2ggcmVzdHJpY3Rpb25zLlxuICAgKiBSZXF1aXJlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJPaWRjPzogR2l0SHViT2lkY0NvbmZpZztcblxuICAvKipcbiAgICogU2tpcCBjcmVhdGluZyB0aGUgT0lEQyBwcm92aWRlciAodXNlIGV4aXN0aW5nIG9uZSkuXG4gICAqIFNldCB0byB0cnVlIGlmIHRoZSBhY2NvdW50IGFscmVhZHkgaGFzIGEgR2l0SHViIE9JREMgcHJvdmlkZXIuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIHRydWUuXG4gICAqIERlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwT2lkY1Byb3ZpZGVyQ3JlYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFB1cmUgZ2VuZXJhdG9yIGNsYXNzIGZvciBDREsgRGlmZiBJQU0gdGVtcGxhdGVzLlxuICogTm8gUHJvamVuIGRlcGVuZGVuY3kgLSBjYW4gYmUgdXNlZCBpbiBhbnkgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvciB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgQ2xvdWRGb3JtYXRpb24gSUFNIHRlbXBsYXRlIGFzIGEgWUFNTCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgZ2VuZXJhdGVUZW1wbGF0ZShwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNyZWF0ZU9pZGNSb2xlID0gcHJvcHMuY3JlYXRlT2lkY1JvbGUgPz8gZmFsc2U7XG5cbiAgICAvLyBWYWxpZGF0ZSBwcm9wc1xuICAgIGlmIChjcmVhdGVPaWRjUm9sZSkge1xuICAgICAgaWYgKCFwcm9wcy5naXRodWJPaWRjKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZ2l0aHViT2lkYyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIHdoZW4gY3JlYXRlT2lkY1JvbGUgaXMgdHJ1ZScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXByb3BzLm9pZGNSb2xlQXJuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2lkY1JvbGVBcm4gaXMgcmVxdWlyZWQgd2hlbiBjcmVhdGVPaWRjUm9sZSBpcyBmYWxzZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9wcy5vaWRjUmVnaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2lkY1JlZ2lvbiBpcyByZXF1aXJlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIGZhbHNlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZU9pZGNSb2xlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVRlbXBsYXRlV2l0aE9pZGNSb2xlKHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVdpdGhFeHRlcm5hbE9pZGNSb2xlKHByb3BzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIEFXUyBDTEkgZGVwbG95IGNvbW1hbmQgZm9yIHRoZSBJQU0gdGVtcGxhdGUuXG4gICAqL1xuICBzdGF0aWMgZ2VuZXJhdGVEZXBsb3lDb21tYW5kKHRlbXBsYXRlUGF0aDogc3RyaW5nID0gJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVwbG95IC0tdGVtcGxhdGUtZmlsZSAke3RlbXBsYXRlUGF0aH0gLS1zdGFjay1uYW1lIGNkay1kaWZmLXdvcmtmbG93LWlhbS1yb2xlIC0tY2FwYWJpbGl0aWVzIENBUEFCSUxJVFlfTkFNRURfSUFNYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0ZW1wbGF0ZSB0aGF0IGNyZWF0ZXMgT0lEQyBwcm92aWRlciBhbmQgcm9sZSAoc2VsZi1jb250YWluZWQpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlV2l0aE9pZGNSb2xlKHByb3BzOiBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3JQcm9wcyk6IHN0cmluZyB7XG4gICAgY29uc3Qgb2lkY1JvbGVOYW1lID0gcHJvcHMub2lkY1JvbGVOYW1lID8/ICdHaXRIdWJPSURDUm9sZSc7XG4gICAgY29uc3Qgc2tpcE9pZGNQcm92aWRlciA9IHByb3BzLnNraXBPaWRjUHJvdmlkZXJDcmVhdGlvbiA/PyBmYWxzZTtcbiAgICBjb25zdCBnaXRodWJPaWRjID0gcHJvcHMuZ2l0aHViT2lkYyE7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICBcIkFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogJzIwMTAtMDktMDknXCIsXG4gICAgICBcIkRlc2NyaXB0aW9uOiAnR2l0SHViIE9JREMgYW5kIElBTSByb2xlcyBmb3IgQ0RLIERpZmYgU3RhY2sgV29ya2Zsb3cgY29uc3RydWN0J1wiLFxuICAgICAgJycsXG4gICAgICAnUmVzb3VyY2VzOicsXG4gICAgXTtcblxuICAgIC8vIE9JREMgUHJvdmlkZXIgKG9ubHkgaWYgbm90IHNraXBwaW5nKVxuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY1Byb3ZpZGVyTGluZXMoKSk7XG4gICAgfVxuXG4gICAgLy8gT0lEQyBSb2xlXG4gICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY1JvbGVMaW5lcyhvaWRjUm9sZU5hbWUsIGdpdGh1Yk9pZGMsIHNraXBPaWRjUHJvdmlkZXIpKTtcblxuICAgIC8vIENoYW5nZXNldCBSb2xlICh0cnVzdHMgdGhlIGNyZWF0ZWQgT0lEQyByb2xlKVxuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZUNoYW5nZXNldFJvbGVXaXRoT2lkY1JlZihwcm9wcy5yb2xlTmFtZSkpO1xuXG4gICAgLy8gT3V0cHV0c1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJ091dHB1dHM6Jyk7XG5cbiAgICBpZiAoIXNraXBPaWRjUHJvdmlkZXIpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNQcm92aWRlck91dHB1dExpbmVzKCkpO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNSb2xlT3V0cHV0TGluZXMoKSk7XG4gICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlQ2hhbmdlc2V0T3V0cHV0TGluZXMoKSk7XG5cbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGVtcGxhdGUgdGhhdCB1c2VzIGFuIGV4dGVybmFsIE9JREMgcm9sZSAob3JpZ2luYWwgYmVoYXZpb3IpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlV2l0aEV4dGVybmFsT2lkY1JvbGUocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIFwiQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAnMjAxMC0wOS0wOSdcIixcbiAgICAgIFwiRGVzY3JpcHRpb246ICdJQU0gcm9sZSBmb3IgQ0RLIERpZmYgU3RhY2sgV29ya2Zsb3cgY29uc3RydWN0J1wiLFxuICAgICAgJycsXG4gICAgICAnUGFyYW1ldGVyczonLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVBcm46JyxcbiAgICAgICcgICAgVHlwZTogU3RyaW5nJyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBleGlzdGluZyBHaXRIdWIgT0lEQyByb2xlIHRoYXQgY2FuIGFzc3VtZSB0aGlzIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgYCAgICBEZWZhdWx0OiAnJHtwcm9wcy5vaWRjUm9sZUFybn0nYCxcbiAgICAgICcnLFxuICAgICAgJ1Jlc291cmNlczonLFxuICAgICAgJyAgIyBDbG91ZEZvcm1hdGlvbiBDaGFuZ2VTZXQgUm9sZSAtIG1pbmltYWwgcGVybWlzc2lvbnMgZm9yIGNoYW5nZXNldCBvcGVyYXRpb25zJyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGU6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06OlJvbGUnLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyBwcm9wcy5yb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICAnICAgICAgICAgICAgICBBV1M6ICFSZWYgR2l0SHViT0lEQ1JvbGVBcm4nLFxuICAgICAgJyAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgJyAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICBhd3M6UmVxdWVzdGVkUmVnaW9uOiAnXCIgKyBwcm9wcy5vaWRjUmVnaW9uICsgXCInXCIsXG4gICAgICAnICAgICAgUG9saWNpZXM6JyxcbiAgICAgICcgICAgICAgIC0gUG9saWN5TmFtZTogQ2xvdWRGb3JtYXRpb25DaGFuZ2VTZXRBY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgICAgICMgQ2xvdWRGb3JtYXRpb24gY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpDcmVhdGVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVsZXRlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkxpc3RDaGFuZ2VTZXRzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWNjZXNzIChmb3IgY2hhbmdlc2V0IGNyZWF0aW9uKScsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkdldE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpQdXRPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6RGVsZXRlT2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkxpc3RCdWNrZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICBSZXNvdXJjZTonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKidcIixcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSovKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBwYXJhbWV0ZXIgYWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogIVN1YiAnYXJuOmF3czpzc206JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgSUFNIFBhc3NSb2xlIGZvciBDREsgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGlhbTpQYXNzUm9sZScsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnJyxcbiAgICAgICdPdXRwdXRzOicsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlQXJuOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ0FSTiBvZiB0aGUgQ0RLIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBDZGtDaGFuZ2VzZXRSb2xlLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlQXJuJ1wiLFxuICAgICAgJycsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlTmFtZTonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhUmVmIENka0NoYW5nZXNldFJvbGUnLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrQ2hhbmdlc2V0Um9sZU5hbWUnXCIsXG4gICAgXTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlT2lkY1Byb3ZpZGVyTGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICAjIEdpdEh1YiBPSURDIFByb3ZpZGVyJyxcbiAgICAgICcgIEdpdEh1Yk9JRENQcm92aWRlcjonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6T0lEQ1Byb3ZpZGVyJyxcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgJyAgICAgIFVybDogaHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbScsXG4gICAgICAnICAgICAgQ2xpZW50SWRMaXN0OicsXG4gICAgICAnICAgICAgICAtIHN0cy5hbWF6b25hd3MuY29tJyxcbiAgICAgICcgICAgICBUaHVtYnByaW50TGlzdDonLFxuICAgICAgJyAgICAgICAgLSA2OTM4ZmQ0ZDk4YmFiMDNmYWFkYjk3YjM0Mzk2ODMxZTM3ODBhZWExJyxcbiAgICAgICcgICAgICAgIC0gMWM1OGEzYTg1MThlODc1OWJmMDc1Yjc2Yjc1MGQ0ZjJkZjI2NGZjZCcsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUm9sZUxpbmVzKFxuICAgIHJvbGVOYW1lOiBzdHJpbmcsXG4gICAgZ2l0aHViT2lkYzogR2l0SHViT2lkY0NvbmZpZyxcbiAgICBza2lwT2lkY1Byb3ZpZGVyOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdWJqZWN0Q2xhaW1zID0gdGhpcy5idWlsZFN1YmplY3RDbGFpbXMoZ2l0aHViT2lkYyk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgICcgICMgR2l0SHViIE9JREMgUm9sZSAtIGF1dGhlbnRpY2F0ZXMgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dzJyxcbiAgICAgICcgIEdpdEh1Yk9JRENSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICBdO1xuXG4gICAgLy8gT25seSBhZGQgRGVwZW5kc09uIGlmIHdlJ3JlIGNyZWF0aW5nIHRoZSBwcm92aWRlclxuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCgnICAgIERlcGVuZHNPbjogR2l0SHViT0lEQ1Byb3ZpZGVyJyk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgXCIgICAgICAgICAgICAgIEZlZGVyYXRlZDogIVN1YiAnYXJuOmF3czppYW06OiR7QVdTOjpBY2NvdW50SWR9Om9pZGMtcHJvdmlkZXIvdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20nXCIsXG4gICAgICAnICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eScsXG4gICAgICAnICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICd0b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTphdWQnOiAnc3RzLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnICAgICAgICAgICAgICBTdHJpbmdMaWtlOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAndG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb206c3ViJzpcIixcbiAgICApO1xuXG4gICAgLy8gQWRkIHN1YmplY3QgY2xhaW1zXG4gICAgZm9yIChjb25zdCBjbGFpbSBvZiBzdWJqZWN0Q2xhaW1zKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAgICAgICAtICcke2NsYWltfSdgKTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWlsZFN1YmplY3RDbGFpbXMoZ2l0aHViT2lkYzogR2l0SHViT2lkY0NvbmZpZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFpbXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYnJhbmNoZXMgPSBnaXRodWJPaWRjLmJyYW5jaGVzID8/IFsnKiddO1xuXG4gICAgZm9yIChjb25zdCByZXBvIG9mIGdpdGh1Yk9pZGMucmVwb3NpdG9yaWVzKSB7XG4gICAgICBpZiAocmVwbyA9PT0gJyonKSB7XG4gICAgICAgIC8vIFdpbGRjYXJkIHJlcG8gLSBhbGxvdyBhbGwgcmVwb3Mgd2l0aCBicmFuY2ggcmVzdHJpY3Rpb25zXG4gICAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgICAgaWYgKGJyYW5jaCA9PT0gJyonKSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9LypgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qOnJlZjpyZWZzL2hlYWRzLyR7YnJhbmNofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3BlY2lmaWMgcmVwb1xuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICAgIGlmIChicmFuY2ggPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8ke3JlcG99OipgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8ke3JlcG99OnJlZjpyZWZzL2hlYWRzLyR7YnJhbmNofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBhbnkgYWRkaXRpb25hbCBjbGFpbXNcbiAgICBpZiAoZ2l0aHViT2lkYy5hZGRpdGlvbmFsQ2xhaW1zKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYWltIG9mIGdpdGh1Yk9pZGMuYWRkaXRpb25hbENsYWltcykge1xuICAgICAgICBmb3IgKGNvbnN0IHJlcG8gb2YgZ2l0aHViT2lkYy5yZXBvc2l0b3JpZXMpIHtcbiAgICAgICAgICBpZiAocmVwbyA9PT0gJyonKSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9Lyo6JHtjbGFpbX1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8ke3JlcG99OiR7Y2xhaW19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYWltcztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlQ2hhbmdlc2V0Um9sZVdpdGhPaWRjUmVmKHJvbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgICMgQ2xvdWRGb3JtYXRpb24gQ2hhbmdlU2V0IFJvbGUgLSBtaW5pbWFsIHBlcm1pc3Npb25zIGZvciBjaGFuZ2VzZXQgb3BlcmF0aW9ucycsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICAgICcgICAgRGVwZW5kc09uOiBHaXRIdWJPSURDUm9sZScsXG4gICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgIFwiICAgICAgUm9sZU5hbWU6ICdcIiArIHJvbGVOYW1lICsgXCInXCIsXG4gICAgICAnICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICBQcmluY2lwYWw6JyxcbiAgICAgICcgICAgICAgICAgICAgIEFXUzogIUdldEF0dCBHaXRIdWJPSURDUm9sZS5Bcm4nLFxuICAgICAgJyAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgJyAgICAgIFBvbGljaWVzOicsXG4gICAgICAnICAgICAgICAtIFBvbGljeU5hbWU6IENsb3VkRm9ybWF0aW9uQ2hhbmdlU2V0QWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgICAgICAjIENsb3VkRm9ybWF0aW9uIGNoYW5nZXNldCBvcGVyYXRpb25zJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpMaXN0Q2hhbmdlU2V0cycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrcycsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAjIENESyBib290c3RyYXAgYnVja2V0IGFjY2VzcyAoZm9yIGNoYW5nZXNldCBjcmVhdGlvbiknLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpHZXRPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6UHV0T2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkRlbGV0ZU9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpMaXN0QnVja2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgUmVzb3VyY2U6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSonXCIsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czpzMzo6OmNkay0ke0FXUzo6QWNjb3VudElkfS0ke0FXUzo6UmVnaW9ufS0qLyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAjIENESyBib290c3RyYXAgcGFyYW1ldGVyIGFjY2VzcycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXInLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcnNCeVBhdGgnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICFTdWIgJ2Fybjphd3M6c3NtOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9OnBhcmFtZXRlci9jZGstYm9vdHN0cmFwLyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAjIElBTSBQYXNzUm9sZSBmb3IgQ0RLIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBpYW06UGFzc1JvbGUnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICcqJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgICBDb25kaXRpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgICAnaWFtOlBhc3NlZFRvU2VydmljZSc6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJ1wiLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlT2lkY1Byb3ZpZGVyT3V0cHV0TGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICBHaXRIdWJPSURDUHJvdmlkZXJBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBHaXRIdWIgT0lEQyBwcm92aWRlcidcIixcbiAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgR2l0SHViT0lEQ1Byb3ZpZGVyLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1HaXRIdWJPSURDUHJvdmlkZXJBcm4nXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUm9sZU91dHB1dExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBHaXRIdWIgT0lEQyByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBHaXRIdWJPSURDUm9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tR2l0SHViT0lEQ1JvbGVBcm4nXCIsXG4gICAgICAnJyxcbiAgICAgICcgIEdpdEh1Yk9JRENSb2xlTmFtZTonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBHaXRIdWIgT0lEQyByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIVJlZiBHaXRIdWJPSURDUm9sZScsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1HaXRIdWJPSURDUm9sZU5hbWUnXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVDaGFuZ2VzZXRPdXRwdXRMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IENka0NoYW5nZXNldFJvbGUuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVBcm4nXCIsXG4gICAgICAnJyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgQ2RrQ2hhbmdlc2V0Um9sZScsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlTmFtZSdcIixcbiAgICBdO1xuICB9XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBQcm9qZW4taW50ZWdyYXRlZCBDREsgRGlmZiBJQU0gdGVtcGxhdGUgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRGlmZklhbVRlbXBsYXRlUHJvcHMgZXh0ZW5kcyBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3JQcm9wcyB7XG4gIC8qKiBQcm9qZW4gcHJvamVjdCBpbnN0YW5jZSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBhbnk7XG4gIC8qKiBPdXRwdXQgcGF0aCBmb3IgdGhlIHRlbXBsYXRlIGZpbGUgKGRlZmF1bHQ6ICdjZGstZGlmZi13b3JrZmxvdy1pYW0tdGVtcGxhdGUueWFtbCcpICovXG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvamVuIGNvbnN0cnVjdCB0aGF0IGVtaXRzIGEgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUgd2l0aCBtaW5pbWFsIElBTSBwZXJtaXNzaW9uc1xuICogZm9yIHRoZSBDREsgRGlmZiBTdGFjayBXb3JrZmxvdy5cbiAqXG4gKiBGb3Igbm9uLVByb2plbiBwcm9qZWN0cywgdXNlIGBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3JgIGRpcmVjdGx5LlxuICovXG5leHBvcnQgY2xhc3MgQ2RrRGlmZklhbVRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZVByb3BzKSB7XG4gICAgY29uc3Qgb3V0cHV0UGF0aCA9IHByb3BzLm91dHB1dFBhdGggPz8gJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJztcblxuICAgIC8vIEdlbmVyYXRlIHRlbXBsYXRlIHVzaW5nIHRoZSBnZW5lcmF0b3JcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvci5nZW5lcmF0ZVRlbXBsYXRlKHByb3BzKTtcbiAgICBuZXcgVGV4dEZpbGUocHJvcHMucHJvamVjdCwgb3V0cHV0UGF0aCwgeyBsaW5lczogdGVtcGxhdGUuc3BsaXQoJ1xcbicpIH0pO1xuXG4gICAgLy8gQWRkIGRlcGxveSB0YXNrXG4gICAgcHJvcHMucHJvamVjdC5hZGRUYXNrKCdkZXBsb3ktY2RrZGlmZi1pYW0tdGVtcGxhdGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0RlcGxveSB0aGUgQ0RLIERpZmYgSUFNIHRlbXBsYXRlIHZpYSBDbG91ZEZvcm1hdGlvbiAoYWNjZXB0cyBleHRyYSBBV1MgQ0xJIGFyZ3MsIGUuZy4sIC0tcGFyYW1ldGVyLW92ZXJyaWRlcyBLZXk9VmFsdWUuLi4pJyxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgICAgZXhlYzogQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yLmdlbmVyYXRlRGVwbG95Q29tbWFuZChvdXRwdXRQYXRoKSxcbiAgICB9KTtcbiAgfVxufVxuIl19
371
+ CdkDiffIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplate", version: "1.2.3" };
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Nka0RpZmZJYW1UZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFrQztBQW1EbEM7OztHQUdHO0FBQ0gsTUFBYSwyQkFBMkI7SUFDdEM7O09BRUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBdUM7UUFDN0QsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUM7UUFFckQsaUJBQWlCO1FBQ2pCLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1lBQ3RGLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDLG9DQUFvQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsZUFBdUIscUNBQXFDO1FBQ3ZGLE9BQU8sNkNBQTZDLFlBQVksOEVBQThFLENBQUM7SUFDakosQ0FBQztJQUVEOztPQUVHO0lBQ0ss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QUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLGtCQUFrQjtRQUNsQixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRTtZQUNuRCxXQUFXLEVBQ1QsNEhBQTRIO1lBQzlILFdBQVcsRUFBRSxJQUFJO1lBQ2pCLElBQUksRUFBRSwyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUM7U0FDcEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFmSCxnREFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBHaXRIdWJPaWRjQ29uZmlnIH0gZnJvbSAnLi9DZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldCc7XG5cbi8qKlxuICogUHJvcHMgZm9yIGdlbmVyYXRpbmcgQ0RLIERpZmYgSUFNIHRlbXBsYXRlcyAobm8gUHJvamVuIGRlcGVuZGVuY3kpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMge1xuICAvKiogTmFtZSBmb3IgdGhlIGNoYW5nZXNldCBJQU0gcm9sZSAqL1xuICByZWFkb25seSByb2xlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIGV4aXN0aW5nIEdpdEh1YiBPSURDIHJvbGUgdGhhdCBjYW4gYXNzdW1lIHRoaXMgY2hhbmdlc2V0IHJvbGUuXG4gICAqIFJlcXVpcmVkIHdoZW4gY3JlYXRlT2lkY1JvbGUgaXMgZmFsc2Ugb3IgdW5kZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgb2lkY1JvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlZ2lvbiBmb3IgdGhlIE9JREMgdHJ1c3QgY29uZGl0aW9uLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBvaWRjUm9sZUFybiBpcyBwcm92aWRlZCAoZXh0ZXJuYWwgT0lEQyByb2xlKS5cbiAgICovXG4gIHJlYWRvbmx5IG9pZGNSZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEdpdEh1YiBPSURDIHJvbGUgd2l0aGluIHRoaXMgdGVtcGxhdGUgaW5zdGVhZCBvZiB1c2luZyBhbiBleGlzdGluZyBvbmUuXG4gICAqIFdoZW4gdHJ1ZSwgZ2l0aHViT2lkYyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIGFuZCBvaWRjUm9sZUFybiBpcyBpZ25vcmVkLlxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlT2lkY1JvbGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBHaXRIdWIgT0lEQyByb2xlIHRvIGNyZWF0ZS5cbiAgICogT25seSB1c2VkIHdoZW4gY3JlYXRlT2lkY1JvbGUgaXMgdHJ1ZS5cbiAgICogRGVmYXVsdDogJ0dpdEh1Yk9JRENSb2xlJ1xuICAgKi9cbiAgcmVhZG9ubHkgb2lkY1JvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgT0lEQyBjb25maWd1cmF0aW9uIGZvciByZXBvL2JyYW5jaCByZXN0cmljdGlvbnMuXG4gICAqIFJlcXVpcmVkIHdoZW4gY3JlYXRlT2lkY1JvbGUgaXMgdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGdpdGh1Yk9pZGM/OiBHaXRIdWJPaWRjQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBTa2lwIGNyZWF0aW5nIHRoZSBPSURDIHByb3ZpZGVyICh1c2UgZXhpc3Rpbmcgb25lKS5cbiAgICogU2V0IHRvIHRydWUgaWYgdGhlIGFjY291bnQgYWxyZWFkeSBoYXMgYSBHaXRIdWIgT0lEQyBwcm92aWRlci5cbiAgICogT25seSB1c2VkIHdoZW4gY3JlYXRlT2lkY1JvbGUgaXMgdHJ1ZS5cbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBPaWRjUHJvdmlkZXJDcmVhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHVyZSBnZW5lcmF0b3IgY2xhc3MgZm9yIENESyBEaWZmIElBTSB0ZW1wbGF0ZXMuXG4gKiBObyBQcm9qZW4gZGVwZW5kZW5jeSAtIGNhbiBiZSB1c2VkIGluIGFueSBwcm9qZWN0LlxuICovXG5leHBvcnQgY2xhc3MgQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBDbG91ZEZvcm1hdGlvbiBJQU0gdGVtcGxhdGUgYXMgYSBZQU1MIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlKHByb3BzOiBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3JQcm9wcyk6IHN0cmluZyB7XG4gICAgY29uc3QgY3JlYXRlT2lkY1JvbGUgPSBwcm9wcy5jcmVhdGVPaWRjUm9sZSA/PyBmYWxzZTtcblxuICAgIC8vIFZhbGlkYXRlIHByb3BzXG4gICAgaWYgKGNyZWF0ZU9pZGNSb2xlKSB7XG4gICAgICBpZiAoIXByb3BzLmdpdGh1Yk9pZGMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnaXRodWJPaWRjIGNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWQgd2hlbiBjcmVhdGVPaWRjUm9sZSBpcyB0cnVlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghcHJvcHMub2lkY1JvbGVBcm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvaWRjUm9sZUFybiBpcyByZXF1aXJlZCB3aGVuIGNyZWF0ZU9pZGNSb2xlIGlzIGZhbHNlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXByb3BzLm9pZGNSZWdpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvaWRjUmVnaW9uIGlzIHJlcXVpcmVkIHdoZW4gY3JlYXRlT2lkY1JvbGUgaXMgZmFsc2UnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY3JlYXRlT2lkY1JvbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlVGVtcGxhdGVXaXRoT2lkY1JvbGUocHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVRlbXBsYXRlV2l0aEV4dGVybmFsT2lkY1JvbGUocHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgQVdTIENMSSBkZXBsb3kgY29tbWFuZCBmb3IgdGhlIElBTSB0ZW1wbGF0ZS5cbiAgICovXG4gIHN0YXRpYyBnZW5lcmF0ZURlcGxveUNvbW1hbmQodGVtcGxhdGVQYXRoOiBzdHJpbmcgPSAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXRlbXBsYXRlLnlhbWwnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXBsb3kgLS10ZW1wbGF0ZS1maWxlICR7dGVtcGxhdGVQYXRofSAtLXN0YWNrLW5hbWUgY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXJvbGUgLS1jYXBhYmlsaXRpZXMgQ0FQQUJJTElUWV9OQU1FRF9JQU1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRlbXBsYXRlIHRoYXQgY3JlYXRlcyBPSURDIHByb3ZpZGVyIGFuZCByb2xlIChzZWxmLWNvbnRhaW5lZClcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlVGVtcGxhdGVXaXRoT2lkY1JvbGUocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzKTogc3RyaW5nIHtcbiAgICBjb25zdCBvaWRjUm9sZU5hbWUgPSBwcm9wcy5vaWRjUm9sZU5hbWUgPz8gJ0dpdEh1Yk9JRENSb2xlJztcbiAgICBjb25zdCBza2lwT2lkY1Byb3ZpZGVyID0gcHJvcHMuc2tpcE9pZGNQcm92aWRlckNyZWF0aW9uID8/IGZhbHNlO1xuICAgIGNvbnN0IGdpdGh1Yk9pZGMgPSBwcm9wcy5naXRodWJPaWRjITtcblxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIFwiQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAnMjAxMC0wOS0wOSdcIixcbiAgICAgIFwiRGVzY3JpcHRpb246ICdHaXRIdWIgT0lEQyBhbmQgSUFNIHJvbGVzIGZvciBDREsgRGlmZiBTdGFjayBXb3JrZmxvdyBjb25zdHJ1Y3QnXCIsXG4gICAgICAnJyxcbiAgICAgICdSZXNvdXJjZXM6JyxcbiAgICBdO1xuXG4gICAgLy8gT0lEQyBQcm92aWRlciAob25seSBpZiBub3Qgc2tpcHBpbmcpXG4gICAgaWYgKCFza2lwT2lkY1Byb3ZpZGVyKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjUHJvdmlkZXJMaW5lcygpKTtcbiAgICB9XG5cbiAgICAvLyBPSURDIFJvbGUgKG5lZWRzIHBlcm1pc3Npb24gdG8gYXNzdW1lIHRoZSBjaGFuZ2VzZXQgcm9sZSlcbiAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjUm9sZUxpbmVzKG9pZGNSb2xlTmFtZSwgZ2l0aHViT2lkYywgc2tpcE9pZGNQcm92aWRlciwgcHJvcHMucm9sZU5hbWUpKTtcblxuICAgIC8vIENoYW5nZXNldCBSb2xlICh0cnVzdHMgdGhlIGNyZWF0ZWQgT0lEQyByb2xlKVxuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZUNoYW5nZXNldFJvbGVXaXRoT2lkY1JlZihwcm9wcy5yb2xlTmFtZSkpO1xuXG4gICAgLy8gT3V0cHV0c1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJ091dHB1dHM6Jyk7XG5cbiAgICBpZiAoIXNraXBPaWRjUHJvdmlkZXIpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNQcm92aWRlck91dHB1dExpbmVzKCkpO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNSb2xlT3V0cHV0TGluZXMoKSk7XG4gICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlQ2hhbmdlc2V0T3V0cHV0TGluZXMoKSk7XG5cbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGVtcGxhdGUgdGhhdCB1c2VzIGFuIGV4dGVybmFsIE9JREMgcm9sZSAob3JpZ2luYWwgYmVoYXZpb3IpXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVRlbXBsYXRlV2l0aEV4dGVybmFsT2lkY1JvbGUocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIFwiQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAnMjAxMC0wOS0wOSdcIixcbiAgICAgIFwiRGVzY3JpcHRpb246ICdJQU0gcm9sZSBmb3IgQ0RLIERpZmYgU3RhY2sgV29ya2Zsb3cgY29uc3RydWN0J1wiLFxuICAgICAgJycsXG4gICAgICAnUGFyYW1ldGVyczonLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVBcm46JyxcbiAgICAgICcgICAgVHlwZTogU3RyaW5nJyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBleGlzdGluZyBHaXRIdWIgT0lEQyByb2xlIHRoYXQgY2FuIGFzc3VtZSB0aGlzIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgYCAgICBEZWZhdWx0OiAnJHtwcm9wcy5vaWRjUm9sZUFybn0nYCxcbiAgICAgICcnLFxuICAgICAgJ1Jlc291cmNlczonLFxuICAgICAgJyAgIyBDbG91ZEZvcm1hdGlvbiBDaGFuZ2VTZXQgUm9sZSAtIG1pbmltYWwgcGVybWlzc2lvbnMgZm9yIGNoYW5nZXNldCBvcGVyYXRpb25zJyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGU6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06OlJvbGUnLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyBwcm9wcy5yb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICAnICAgICAgICAgICAgICBBV1M6ICFSZWYgR2l0SHViT0lEQ1JvbGVBcm4nLFxuICAgICAgJyAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgJyAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICBhd3M6UmVxdWVzdGVkUmVnaW9uOiAnXCIgKyBwcm9wcy5vaWRjUmVnaW9uICsgXCInXCIsXG4gICAgICAnICAgICAgUG9saWNpZXM6JyxcbiAgICAgICcgICAgICAgIC0gUG9saWN5TmFtZTogQ2xvdWRGb3JtYXRpb25DaGFuZ2VTZXRBY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgICAgICMgQ2xvdWRGb3JtYXRpb24gY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpDcmVhdGVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVsZXRlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkxpc3RDaGFuZ2VTZXRzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWNjZXNzIChmb3IgY2hhbmdlc2V0IGNyZWF0aW9uKScsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkdldE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpQdXRPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6RGVsZXRlT2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkxpc3RCdWNrZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICBSZXNvdXJjZTonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKidcIixcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSovKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBwYXJhbWV0ZXIgYWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogIVN1YiAnYXJuOmF3czpzc206JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgSUFNIFBhc3NSb2xlIGZvciBDREsgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGlhbTpQYXNzUm9sZScsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnJyxcbiAgICAgICdPdXRwdXRzOicsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlQXJuOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ0FSTiBvZiB0aGUgQ0RLIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBDZGtDaGFuZ2VzZXRSb2xlLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlQXJuJ1wiLFxuICAgICAgJycsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlTmFtZTonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhUmVmIENka0NoYW5nZXNldFJvbGUnLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrQ2hhbmdlc2V0Um9sZU5hbWUnXCIsXG4gICAgXTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlT2lkY1Byb3ZpZGVyTGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICAjIEdpdEh1YiBPSURDIFByb3ZpZGVyJyxcbiAgICAgICcgIEdpdEh1Yk9JRENQcm92aWRlcjonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6T0lEQ1Byb3ZpZGVyJyxcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgJyAgICAgIFVybDogaHR0cHM6Ly90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbScsXG4gICAgICAnICAgICAgQ2xpZW50SWRMaXN0OicsXG4gICAgICAnICAgICAgICAtIHN0cy5hbWF6b25hd3MuY29tJyxcbiAgICAgICcgICAgICBUaHVtYnByaW50TGlzdDonLFxuICAgICAgJyAgICAgICAgLSA2OTM4ZmQ0ZDk4YmFiMDNmYWFkYjk3YjM0Mzk2ODMxZTM3ODBhZWExJyxcbiAgICAgICcgICAgICAgIC0gMWM1OGEzYTg1MThlODc1OWJmMDc1Yjc2Yjc1MGQ0ZjJkZjI2NGZjZCcsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUm9sZUxpbmVzKFxuICAgIHJvbGVOYW1lOiBzdHJpbmcsXG4gICAgZ2l0aHViT2lkYzogR2l0SHViT2lkY0NvbmZpZyxcbiAgICBza2lwT2lkY1Byb3ZpZGVyOiBib29sZWFuID0gZmFsc2UsXG4gICAgY2hhbmdlc2V0Um9sZU5hbWU/OiBzdHJpbmcsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdWJqZWN0Q2xhaW1zID0gdGhpcy5idWlsZFN1YmplY3RDbGFpbXMoZ2l0aHViT2lkYyk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgICcgICMgR2l0SHViIE9JREMgUm9sZSAtIGF1dGhlbnRpY2F0ZXMgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dzJyxcbiAgICAgICcgIEdpdEh1Yk9JRENSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICBdO1xuXG4gICAgLy8gT25seSBhZGQgRGVwZW5kc09uIGlmIHdlJ3JlIGNyZWF0aW5nIHRoZSBwcm92aWRlclxuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCgnICAgIERlcGVuZHNPbjogR2l0SHViT0lEQ1Byb3ZpZGVyJyk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaChcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgXCIgICAgICAgICAgICAgIEZlZGVyYXRlZDogIVN1YiAnYXJuOmF3czppYW06OiR7QVdTOjpBY2NvdW50SWR9Om9pZGMtcHJvdmlkZXIvdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20nXCIsXG4gICAgICAnICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eScsXG4gICAgICAnICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICd0b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTphdWQnOiAnc3RzLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnICAgICAgICAgICAgICBTdHJpbmdMaWtlOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAndG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb206c3ViJzpcIixcbiAgICApO1xuXG4gICAgLy8gQWRkIHN1YmplY3QgY2xhaW1zXG4gICAgZm9yIChjb25zdCBjbGFpbSBvZiBzdWJqZWN0Q2xhaW1zKSB7XG4gICAgICBsaW5lcy5wdXNoKGAgICAgICAgICAgICAgICAgICAtICcke2NsYWltfSdgKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcG9saWN5IHRvIGFsbG93IGFzc3VtaW5nIHRoZSBjaGFuZ2VzZXQgcm9sZSAoaWYgc3BlY2lmaWVkKVxuICAgIGlmIChjaGFuZ2VzZXRSb2xlTmFtZSkge1xuICAgICAgbGluZXMucHVzaCgnICAgICAgUG9saWNpZXM6Jyk7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgICAgIC0gUG9saWN5TmFtZTogQXNzdW1lQ2hhbmdlc2V0Um9sZScpO1xuICAgICAgbGluZXMucHVzaCgnICAgICAgICAgIFBvbGljeURvY3VtZW50OicpO1xuICAgICAgbGluZXMucHVzaChcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiKTtcbiAgICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgIFN0YXRlbWVudDonKTtcbiAgICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93Jyk7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZScpO1xuICAgICAgbGluZXMucHVzaChgICAgICAgICAgICAgICAgIFJlc291cmNlOiAhU3ViICdhcm46YXdzOmlhbTo6XFwke0FXUzo6QWNjb3VudElkfTpyb2xlLyR7Y2hhbmdlc2V0Um9sZU5hbWV9J2ApO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIHJldHVybiBsaW5lcztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkU3ViamVjdENsYWltcyhnaXRodWJPaWRjOiBHaXRIdWJPaWRjQ29uZmlnKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYWltczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBicmFuY2hlcyA9IGdpdGh1Yk9pZGMuYnJhbmNoZXMgPz8gWycqJ107XG5cbiAgICBmb3IgKGNvbnN0IHJlcG8gb2YgZ2l0aHViT2lkYy5yZXBvc2l0b3JpZXMpIHtcbiAgICAgIGlmIChyZXBvID09PSAnKicpIHtcbiAgICAgICAgLy8gV2lsZGNhcmQgcmVwbyAtIGFsbG93IGFsbCByZXBvcyB3aXRoIGJyYW5jaCByZXN0cmljdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgYnJhbmNoZXMpIHtcbiAgICAgICAgICBpZiAoYnJhbmNoID09PSAnKicpIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vKmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9Lyo6cmVmOnJlZnMvaGVhZHMvJHticmFuY2h9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTcGVjaWZpYyByZXBvXG4gICAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgICAgaWYgKGJyYW5jaCA9PT0gJyonKSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9LyR7cmVwb306KmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9LyR7cmVwb306cmVmOnJlZnMvaGVhZHMvJHticmFuY2h9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGFueSBhZGRpdGlvbmFsIGNsYWltc1xuICAgIGlmIChnaXRodWJPaWRjLmFkZGl0aW9uYWxDbGFpbXMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xhaW0gb2YgZ2l0aHViT2lkYy5hZGRpdGlvbmFsQ2xhaW1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVwbyBvZiBnaXRodWJPaWRjLnJlcG9zaXRvcmllcykge1xuICAgICAgICAgIGlmIChyZXBvID09PSAnKicpIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vKjoke2NsYWltfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9LyR7cmVwb306JHtjbGFpbX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhaW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVDaGFuZ2VzZXRSb2xlV2l0aE9pZGNSZWYocm9sZU5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgIyBDbG91ZEZvcm1hdGlvbiBDaGFuZ2VTZXQgUm9sZSAtIG1pbmltYWwgcGVybWlzc2lvbnMgZm9yIGNoYW5nZXNldCBvcGVyYXRpb25zJyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGU6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06OlJvbGUnLFxuICAgICAgJyAgICBEZXBlbmRzT246IEdpdEh1Yk9JRENSb2xlJyxcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgJyAgICAgICAgICAgICAgQVdTOiAhR2V0QXR0IEdpdEh1Yk9JRENSb2xlLkFybicsXG4gICAgICAnICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZScsXG4gICAgICAnICAgICAgUG9saWNpZXM6JyxcbiAgICAgICcgICAgICAgIC0gUG9saWN5TmFtZTogQ2xvdWRGb3JtYXRpb25DaGFuZ2VTZXRBY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgICAgICMgQ2xvdWRGb3JtYXRpb24gY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpDcmVhdGVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVsZXRlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkxpc3RDaGFuZ2VTZXRzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWNjZXNzIChmb3IgY2hhbmdlc2V0IGNyZWF0aW9uKScsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkdldE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpQdXRPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6RGVsZXRlT2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkxpc3RCdWNrZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICBSZXNvdXJjZTonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKidcIixcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSovKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBwYXJhbWV0ZXIgYWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogIVN1YiAnYXJuOmF3czpzc206JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06cGFyYW1ldGVyL2Nkay1ib290c3RyYXAvKidcIixcbiAgICAgICcgICAgICAgICAgICAgICMgSUFNIFBhc3NSb2xlIGZvciBDREsgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGlhbTpQYXNzUm9sZScsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVPaWRjUHJvdmlkZXJPdXRwdXRMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgIEdpdEh1Yk9JRENQcm92aWRlckFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIEdpdEh1YiBPSURDIHByb3ZpZGVyJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBHaXRIdWJPSURDUHJvdmlkZXIuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUdpdEh1Yk9JRENQcm92aWRlckFybidcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNSb2xlT3V0cHV0TGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICBHaXRIdWJPSURDUm9sZUFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIEdpdEh1YiBPSURDIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IEdpdEh1Yk9JRENSb2xlLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1HaXRIdWJPSURDUm9sZUFybidcIixcbiAgICAgICcnLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIEdpdEh1YiBPSURDIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhUmVmIEdpdEh1Yk9JRENSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUdpdEh1Yk9JRENSb2xlTmFtZSdcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZUNoYW5nZXNldE91dHB1dExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZUFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgQ2RrQ2hhbmdlc2V0Um9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrQ2hhbmdlc2V0Um9sZUFybidcIixcbiAgICAgICcnLFxuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZU5hbWU6JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnTmFtZSBvZiB0aGUgQ0RLIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIVJlZiBDZGtDaGFuZ2VzZXRSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVOYW1lJ1wiLFxuICAgIF07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFByb2plbi1pbnRlZ3JhdGVkIENESyBEaWZmIElBTSB0ZW1wbGF0ZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVQcm9wcyBleHRlbmRzIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzIHtcbiAgLyoqIFByb2plbiBwcm9qZWN0IGluc3RhbmNlICovXG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTtcbiAgLyoqIE91dHB1dCBwYXRoIGZvciB0aGUgdGVtcGxhdGUgZmlsZSAoZGVmYXVsdDogJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJykgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9qZW4gY29uc3RydWN0IHRoYXQgZW1pdHMgYSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSB3aXRoIG1pbmltYWwgSUFNIHBlcm1pc3Npb25zXG4gKiBmb3IgdGhlIENESyBEaWZmIFN0YWNrIFdvcmtmbG93LlxuICpcbiAqIEZvciBub24tUHJvamVuIHByb2plY3RzLCB1c2UgYENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvcmAgZGlyZWN0bHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtEaWZmSWFtVGVtcGxhdGUge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlUHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXRlbXBsYXRlLnlhbWwnO1xuXG4gICAgLy8gR2VuZXJhdGUgdGVtcGxhdGUgdXNpbmcgdGhlIGdlbmVyYXRvclxuICAgIGNvbnN0IHRlbXBsYXRlID0gQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yLmdlbmVyYXRlVGVtcGxhdGUocHJvcHMpO1xuICAgIG5ldyBUZXh0RmlsZShwcm9wcy5wcm9qZWN0LCBvdXRwdXRQYXRoLCB7IGxpbmVzOiB0ZW1wbGF0ZS5zcGxpdCgnXFxuJykgfSk7XG5cbiAgICAvLyBBZGQgZGVwbG95IHRhc2tcbiAgICBwcm9wcy5wcm9qZWN0LmFkZFRhc2soJ2RlcGxveS1jZGtkaWZmLWlhbS10ZW1wbGF0ZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnRGVwbG95IHRoZSBDREsgRGlmZiBJQU0gdGVtcGxhdGUgdmlhIENsb3VkRm9ybWF0aW9uIChhY2NlcHRzIGV4dHJhIEFXUyBDTEkgYXJncywgZS5nLiwgLS1wYXJhbWV0ZXItb3ZlcnJpZGVzIEtleT1WYWx1ZS4uLiknLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICBleGVjOiBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3IuZ2VuZXJhdGVEZXBsb3lDb21tYW5kKG91dHB1dFBhdGgpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -73,8 +73,13 @@ class CdkDiffIamTemplateStackSetGenerator {
73
73
  if (!skipOidcProvider) {
74
74
  lines.push(...this.generateOidcProviderLines());
75
75
  }
76
- // OIDC Role
77
- lines.push(...this.generateOidcRoleLines(oidcRoleName, githubOidc, skipOidcProvider));
76
+ // OIDC Role (needs permissions to assume changeset/drift roles)
77
+ const targetRoleNames = [];
78
+ if (includeChangeset)
79
+ targetRoleNames.push(changesetRoleName);
80
+ if (includeDrift)
81
+ targetRoleNames.push(driftRoleName);
82
+ lines.push(...this.generateOidcRoleLines(oidcRoleName, githubOidc, skipOidcProvider, targetRoleNames));
78
83
  // Changeset/Drift roles
79
84
  if (includeChangeset) {
80
85
  lines.push(...this.generateChangesetRoleLines(changesetRoleName));
@@ -113,7 +118,7 @@ class CdkDiffIamTemplateStackSetGenerator {
113
118
  '',
114
119
  ];
115
120
  }
116
- static generateOidcRoleLines(roleName, githubOidc, skipOidcProvider = false) {
121
+ static generateOidcRoleLines(roleName, githubOidc, skipOidcProvider = false, targetRoleNames = []) {
117
122
  const subjectClaims = this.buildSubjectClaims(githubOidc);
118
123
  const lines = [
119
124
  ' # GitHub OIDC Role - authenticates GitHub Actions workflows',
@@ -129,6 +134,20 @@ class CdkDiffIamTemplateStackSetGenerator {
129
134
  for (const claim of subjectClaims) {
130
135
  lines.push(` - '${claim}'`);
131
136
  }
137
+ // Add policy to allow assuming the target roles (changeset/drift)
138
+ if (targetRoleNames.length > 0) {
139
+ lines.push(' Policies:');
140
+ lines.push(' - PolicyName: AssumeTargetRoles');
141
+ lines.push(' PolicyDocument:');
142
+ lines.push(" Version: '2012-10-17'");
143
+ lines.push(' Statement:');
144
+ lines.push(' - Effect: Allow');
145
+ lines.push(' Action: sts:AssumeRole');
146
+ lines.push(' Resource:');
147
+ for (const targetRoleName of targetRoleNames) {
148
+ lines.push(` - !Sub 'arn:aws:iam::\${AWS::AccountId}:role/${targetRoleName}'`);
149
+ }
150
+ }
132
151
  lines.push('');
133
152
  return lines;
134
153
  }
@@ -324,7 +343,7 @@ class CdkDiffIamTemplateStackSetGenerator {
324
343
  }
325
344
  exports.CdkDiffIamTemplateStackSetGenerator = CdkDiffIamTemplateStackSetGenerator;
326
345
  _a = JSII_RTTI_SYMBOL_1;
327
- CdkDiffIamTemplateStackSetGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSetGenerator", version: "1.2.1" };
346
+ CdkDiffIamTemplateStackSetGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSetGenerator", version: "1.2.3" };
328
347
  /**
329
348
  * Projen construct that creates a CloudFormation StackSet template for org-wide deployment of
330
349
  * GitHub OIDC provider, OIDC role, and CDK Diff/Drift IAM roles.
@@ -369,5 +388,5 @@ class CdkDiffIamTemplateStackSet {
369
388
  }
370
389
  exports.CdkDiffIamTemplateStackSet = CdkDiffIamTemplateStackSet;
371
390
  _b = JSII_RTTI_SYMBOL_1;
372
- CdkDiffIamTemplateStackSet[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSet", version: "1.2.1" };
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBa0M7QUFFbEM7O0dBRUc7QUFDSCxJQUFZLHFCQU9YO0FBUEQsV0FBWSxxQkFBcUI7SUFDL0IseURBQXlEO0lBQ3pELDBEQUFpQyxDQUFBO0lBQ2pDLGlEQUFpRDtJQUNqRCxrREFBeUIsQ0FBQTtJQUN6QixtQ0FBbUM7SUFDbkMsc0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFQVyxxQkFBcUIscUNBQXJCLHFCQUFxQixRQU9oQztBQWtHRDs7O0dBR0c7QUFDSCxNQUFhLG1DQUFtQztJQUM5Qzs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUErQztRQUNyRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDO1FBQzVELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLGtCQUFrQixDQUFDO1FBQ3hFLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDO1FBQzVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixJQUFJLEtBQUssQ0FBQztRQUVqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3RDLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGFBQWEsRUFDYixLQUFLLENBQUMsV0FBVyxFQUNqQixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7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Q3hCLDJCQUEyQixFQUFFLEtBQUssQ0FBQywyQkFBMkI7WUFDOUQsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNwQyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7U0FDckMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxnQkFBZ0IsR0FBMkI7WUFDL0MsaUJBQWlCLEVBQUUsc0RBQXNEO1lBQ3pFLGlCQUFpQixFQUFFLDhCQUE4QjtZQUNqRCwyQkFBMkIsRUFDekIseUhBQXlIO1lBQzNILDJCQUEyQixFQUFFLG9EQUFvRDtZQUNqRixpQkFBaUIsRUFBRSxrRUFBa0U7WUFDckYsbUJBQW1CLEVBQUUsZ0RBQWdEO1lBQ3JFLHlCQUF5QixFQUFFLDZDQUE2QztTQUN6RSxDQUFDO1FBRUYsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQzlCLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZDLFdBQVcsRUFBRSxRQUFRLEtBQUssaUJBQWlCO2dCQUMzQyxJQUFJLEVBQUUsT0FBTzthQUNkLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQXJDSCxnRUFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5cbi8qKlxuICogV2hpY2ggcm9sZXMgdG8gaW5jbHVkZSBpbiB0aGUgU3RhY2tTZXRcbiAqL1xuZXhwb3J0IGVudW0gU3RhY2tTZXRSb2xlU2VsZWN0aW9uIHtcbiAgLyoqIEluY2x1ZGUgb25seSB0aGUgY2hhbmdlc2V0IHJvbGUgKENka0NoYW5nZXNldFJvbGUpICovXG4gIENIQU5HRVNFVF9PTkxZID0gJ0NIQU5HRVNFVF9PTkxZJyxcbiAgLyoqIEluY2x1ZGUgb25seSB0aGUgZHJpZnQgcm9sZSAoQ2RrRHJpZnRSb2xlKSAqL1xuICBEUklGVF9PTkxZID0gJ0RSSUZUX09OTFknLFxuICAvKiogSW5jbHVkZSBib3RoIHJvbGVzIChkZWZhdWx0KSAqL1xuICBCT1RIID0gJ0JPVEgnLFxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFN0YWNrU2V0IGF1dG8tZGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrU2V0QXV0b0RlcGxveW1lbnQge1xuICAvKiogRW5hYmxlIGF1dG8tZGVwbG95bWVudCB0byBuZXcgYWNjb3VudHMgaW4gdGFyZ2V0IE9VcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKiBSZXRhaW4gc3RhY2tzIHdoZW4gYWNjb3VudCBsZWF2ZXMgT1UgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICByZWFkb25seSByZXRhaW5TdGFja3NPbkFjY291bnRSZW1vdmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHaXRIdWIgcmVwb3NpdG9yeSByZXN0cmljdGlvbnMgZm9yIE9JREMgYXV0aGVudGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJPaWRjQ29uZmlnIHtcbiAgLyoqXG4gICAqIEdpdEh1YiBvcmdhbml6YXRpb24gb3IgdXNlcm5hbWUgKGUuZy4sICdteS1vcmcnIG9yICdteS11c2VybmFtZScpXG4gICAqL1xuICByZWFkb25seSBvd25lcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IG5hbWVzIGFsbG93ZWQgdG8gYXNzdW1lIHRoZSByb2xlIChlLmcuLCBbJ3JlcG8xJywgJ3JlcG8yJ10pXG4gICAqIFVzZSBbJyonXSB0byBhbGxvdyBhbGwgcmVwb3MgaW4gdGhlIG9yZ2FuaXphdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yaWVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQnJhbmNoIHBhdHRlcm5zIGFsbG93ZWQgKGUuZy4sIFsnbWFpbicsICdyZWxlYXNlLyonXSlcbiAgICogRGVmYXVsdDogWycqJ10gKGFsbCBicmFuY2hlcylcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc3ViamVjdCBjbGFpbXMgZm9yIGZpbmUtZ3JhaW5lZCBhY2Nlc3NcbiAgICogZS5nLiwgWydwdWxsX3JlcXVlc3QnLCAnZW52aXJvbm1lbnQ6cHJvZHVjdGlvbiddXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQ2xhaW1zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIGdlbmVyYXRpbmcgU3RhY2tTZXQgdGVtcGxhdGVzIChubyBQcm9qZW4gZGVwZW5kZW5jeSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvclByb3BzIHtcbiAgLyoqIEdpdEh1YiBPSURDIGNvbmZpZ3VyYXRpb24gZm9yIHJlcG8vYnJhbmNoIHJlc3RyaWN0aW9ucyAqL1xuICByZWFkb25seSBnaXRodWJPaWRjOiBHaXRIdWJPaWRjQ29uZmlnO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBHaXRIdWIgT0lEQyByb2xlIChkZWZhdWx0OiAnR2l0SHViT0lEQ1JvbGUnKSAqL1xuICByZWFkb25seSBvaWRjUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIENka0NoYW5nZXNldFJvbGUgKGRlZmF1bHQ6ICdDZGtDaGFuZ2VzZXRSb2xlJykgKi9cbiAgcmVhZG9ubHkgY2hhbmdlc2V0Um9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIENka0RyaWZ0Um9sZSAoZGVmYXVsdDogJ0Nka0RyaWZ0Um9sZScpICovXG4gIHJlYWRvbmx5IGRyaWZ0Um9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIFdoaWNoIHJvbGVzIHRvIGluY2x1ZGUgKGRlZmF1bHQ6IEJPVEgpICovXG4gIHJlYWRvbmx5IHJvbGVTZWxlY3Rpb24/OiBTdGFja1NldFJvbGVTZWxlY3Rpb247XG5cbiAgLyoqIERlc2NyaXB0aW9uIGZvciB0aGUgU3RhY2tTZXQgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNraXAgY3JlYXRpbmcgdGhlIE9JREMgcHJvdmlkZXIgKHVzZSBleGlzdGluZyBvbmUpLlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiBhY2NvdW50cyBhbHJlYWR5IGhhdmUgYSBHaXRIdWIgT0lEQyBwcm92aWRlci5cbiAgICogVGhlIHRlbXBsYXRlIHdpbGwgcmVmZXJlbmNlIHRoZSBleGlzdGluZyBwcm92aWRlciBieSBBUk4uXG4gICAqIERlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwT2lkY1Byb3ZpZGVyQ3JlYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBnZW5lcmF0aW5nIFN0YWNrU2V0IENMSSBjb21tYW5kcyAobm8gUHJvamVuIGRlcGVuZGVuY3kpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRDb21tYW5kc1Byb3BzIHtcbiAgLyoqIE5hbWUgb2YgdGhlIFN0YWNrU2V0IChkZWZhdWx0OiAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXN0YWNrc2V0JykgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBQYXRoIHRvIHRoZSB0ZW1wbGF0ZSBmaWxlIChkZWZhdWx0OiAnY2RrLWRpZmYtd29ya2Zsb3ctc3RhY2tzZXQtdGVtcGxhdGUueWFtbCcpICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlUGF0aD86IHN0cmluZztcblxuICAvKiogVGFyZ2V0IE9VcyBmb3IgZGVwbG95bWVudCAoZS5nLiwgWydvdS14eHh4LXh4eHh4eHh4JywgJ3IteHh4eCddKSAqL1xuICByZWFkb25seSB0YXJnZXRPcmdhbml6YXRpb25hbFVuaXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKiogVGFyZ2V0IHJlZ2lvbnMgZm9yIGRlcGxveW1lbnQgKGUuZy4sIFsndXMtZWFzdC0xJywgJ2V1LXdlc3QtMSddKSAqL1xuICByZWFkb25seSByZWdpb25zPzogc3RyaW5nW107XG5cbiAgLyoqIEF1dG8tZGVwbG95bWVudCBjb25maWd1cmF0aW9uICovXG4gIHJlYWRvbmx5IGF1dG9EZXBsb3ltZW50PzogU3RhY2tTZXRBdXRvRGVwbG95bWVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1c2UgZGVsZWdhdGVkIGFkbWluIG1vZGUgZm9yIFN0YWNrU2V0IG9wZXJhdGlvbnMuXG4gICAqIElmIHRydWUsIGFkZHMgLS1jYWxsLWFzIERFTEVHQVRFRF9BRE1JTiB0byBjb21tYW5kcy5cbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZWdhdGVkQWRtaW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFB1cmUgZ2VuZXJhdG9yIGNsYXNzIGZvciBTdGFja1NldCB0ZW1wbGF0ZXMgYW5kIGNvbW1hbmRzLlxuICogTm8gUHJvamVuIGRlcGVuZGVuY3kgLSBjYW4gYmUgdXNlZCBpbiBhbnkgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBDbG91ZEZvcm1hdGlvbiBTdGFja1NldCB0ZW1wbGF0ZSBhcyBhIFlBTUwgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIGdlbmVyYXRlVGVtcGxhdGUocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9pZGNSb2xlTmFtZSA9IHByb3BzLm9pZGNSb2xlTmFtZSA/PyAnR2l0SHViT0lEQ1JvbGUnO1xuICAgIGNvbnN0IGNoYW5nZXNldFJvbGVOYW1lID0gcHJvcHMuY2hhbmdlc2V0Um9sZU5hbWUgPz8gJ0Nka0NoYW5nZXNldFJvbGUnO1xuICAgIGNvbnN0IGRyaWZ0Um9sZU5hbWUgPSBwcm9wcy5kcmlmdFJvbGVOYW1lID8/ICdDZGtEcmlmdFJvbGUnO1xuICAgIGNvbnN0IHJvbGVTZWxlY3Rpb24gPSBwcm9wcy5yb2xlU2VsZWN0aW9uID8/IFN0YWNrU2V0Um9sZVNlbGVjdGlvbi5CT1RIO1xuICAgIGNvbnN0IHNraXBPaWRjUHJvdmlkZXIgPSBwcm9wcy5za2lwT2lkY1Byb3ZpZGVyQ3JlYXRpb24gPz8gZmFsc2U7XG5cbiAgICBjb25zdCBsaW5lcyA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZUxpbmVzKFxuICAgICAgcHJvcHMuZ2l0aHViT2lkYyxcbiAgICAgIG9pZGNSb2xlTmFtZSxcbiAgICAgIGNoYW5nZXNldFJvbGVOYW1lLFxuICAgICAgZHJpZnRSb2xlTmFtZSxcbiAgICAgIHJvbGVTZWxlY3Rpb24sXG4gICAgICBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHNraXBPaWRjUHJvdmlkZXIsXG4gICAgKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBBV1MgQ0xJIGNvbW1hbmRzIGZvciBTdGFja1NldCBvcGVyYXRpb25zLlxuICAgKiBSZXR1cm5zIGEgbWFwIG9mIGNvbW1hbmQgbmFtZXMgdG8gc2hlbGwgY29tbWFuZHMuXG4gICAqL1xuICBzdGF0aWMgZ2VuZXJhdGVDb21tYW5kcyhwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRDb21tYW5kc1Byb3BzID0ge30pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzdGFja1NldE5hbWUgPSBwcm9wcy5zdGFja1NldE5hbWUgPz8gJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS1zdGFja3NldCc7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcHJvcHMudGVtcGxhdGVQYXRoID8/ICdjZGstZGlmZi13b3JrZmxvdy1zdGFja3NldC10ZW1wbGF0ZS55YW1sJztcbiAgICBjb25zdCByZWdpb25zID0gcHJvcHMucmVnaW9ucyA/PyBbJ3VzLWVhc3QtMSddO1xuICAgIGNvbnN0IHRhcmdldE9VcyA9IHByb3BzLnRhcmdldE9yZ2FuaXphdGlvbmFsVW5pdElkcyA/PyBbXTtcbiAgICBjb25zdCBhdXRvRGVwbG95RW5hYmxlZCA9IHByb3BzLmF1dG9EZXBsb3ltZW50Py5lbmFibGVkID8/IHRydWU7XG4gICAgY29uc3QgcmV0YWluU3RhY2tzID0gcHJvcHMuYXV0b0RlcGxveW1lbnQ/LnJldGFpblN0YWNrc09uQWNjb3VudFJlbW92YWwgPz8gZmFsc2U7XG4gICAgY29uc3QgZGVsZWdhdGVkQWRtaW4gPSBwcm9wcy5kZWxlZ2F0ZWRBZG1pbiA/PyB0cnVlO1xuICAgIGNvbnN0IGNhbGxBcyA9IGRlbGVnYXRlZEFkbWluID8gJyAtLWNhbGwtYXMgREVMRUdBVEVEX0FETUlOJyA6ICcnO1xuXG4gICAgY29uc3Qgb3VMaXN0ID0gdGFyZ2V0T1VzLmxlbmd0aCA+IDAgPyB0YXJnZXRPVXMuam9pbignLCcpIDogJzxPVV9JRFM+JztcbiAgICBjb25zdCByZWdpb25MaXN0ID0gcmVnaW9ucy5qb2luKCcgJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ3N0YWNrc2V0LWNyZWF0ZSc6IGBhd3MgY2xvdWRmb3JtYXRpb24gY3JlYXRlLXN0YWNrLXNldCAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSAtLXRlbXBsYXRlLWJvZHkgZmlsZTovLyR7dGVtcGxhdGVQYXRofSAtLWNhcGFiaWxpdGllcyBDQVBBQklMSVRZX05BTUVEX0lBTSAtLXBlcm1pc3Npb24tbW9kZWwgU0VSVklDRV9NQU5BR0VEIC0tYXV0by1kZXBsb3ltZW50IEVuYWJsZWQ9JHthdXRvRGVwbG95RW5hYmxlZH0sUmV0YWluU3RhY2tzT25BY2NvdW50UmVtb3ZhbD0ke3JldGFpblN0YWNrc30ke2NhbGxBc31gLFxuICAgICAgJ3N0YWNrc2V0LXVwZGF0ZSc6IGBhd3MgY2xvdWRmb3JtYXRpb24gdXBkYXRlLXN0YWNrLXNldCAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSAtLXRlbXBsYXRlLWJvZHkgZmlsZTovLyR7dGVtcGxhdGVQYXRofSAtLWNhcGFiaWxpdGllcyBDQVBBQklMSVRZX05BTUVEX0lBTSR7Y2FsbEFzfWAsXG4gICAgICAnc3RhY2tzZXQtZGVwbG95LWluc3RhbmNlcyc6IGBhd3MgY2xvdWRmb3JtYXRpb24gY3JlYXRlLXN0YWNrLWluc3RhbmNlcyAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSAtLWRlcGxveW1lbnQtdGFyZ2V0cyBPcmdhbml6YXRpb25hbFVuaXRJZHM9JHtvdUxpc3R9IC0tcmVnaW9ucyAke3JlZ2lvbkxpc3R9JHtjYWxsQXN9YCxcbiAgICAgICdzdGFja3NldC1kZWxldGUtaW5zdGFuY2VzJzogYGF3cyBjbG91ZGZvcm1hdGlvbiBkZWxldGUtc3RhY2staW5zdGFuY2VzIC0tc3RhY2stc2V0LW5hbWUgJHtzdGFja1NldE5hbWV9IC0tZGVwbG95bWVudC10YXJnZXRzIE9yZ2FuaXphdGlvbmFsVW5pdElkcz0ke291TGlzdH0gLS1yZWdpb25zICR7cmVnaW9uTGlzdH0gLS1uby1yZXRhaW4tc3RhY2tzJHtjYWxsQXN9YCxcbiAgICAgICdzdGFja3NldC1kZWxldGUnOiBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlbGV0ZS1zdGFjay1zZXQgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0ke2NhbGxBc31gLFxuICAgICAgJ3N0YWNrc2V0LWRlc2NyaWJlJzogYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFjay1zZXQgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0ke2NhbGxBc31gLFxuICAgICAgJ3N0YWNrc2V0LWxpc3QtaW5zdGFuY2VzJzogYGF3cyBjbG91ZGZvcm1hdGlvbiBsaXN0LXN0YWNrLWluc3RhbmNlcyAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSR7Y2FsbEFzfWAsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlVGVtcGxhdGVMaW5lcyhcbiAgICBnaXRodWJPaWRjOiBHaXRIdWJPaWRjQ29uZmlnLFxuICAgIG9pZGNSb2xlTmFtZTogc3RyaW5nLFxuICAgIGNoYW5nZXNldFJvbGVOYW1lOiBzdHJpbmcsXG4gICAgZHJpZnRSb2xlTmFtZTogc3RyaW5nLFxuICAgIHJvbGVTZWxlY3Rpb246IFN0YWNrU2V0Um9sZVNlbGVjdGlvbixcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICBza2lwT2lkY1Byb3ZpZGVyOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBkZXNjID0gZGVzY3JpcHRpb24gPz8gJ0dpdEh1YiBPSURDIGFuZCBJQU0gcm9sZXMgZm9yIENESyBEaWZmL0RyaWZ0IHdvcmtmbG93cyAoU3RhY2tTZXQgZGVwbG95bWVudCknO1xuXG4gICAgY29uc3QgaW5jbHVkZUNoYW5nZXNldCA9XG4gICAgICByb2xlU2VsZWN0aW9uID09PSBTdGFja1NldFJvbGVTZWxlY3Rpb24uQk9USCB8fCByb2xlU2VsZWN0aW9uID09PSBTdGFja1NldFJvbGVTZWxlY3Rpb24uQ0hBTkdFU0VUX09OTFk7XG4gICAgY29uc3QgaW5jbHVkZURyaWZ0ID1cbiAgICAgIHJvbGVTZWxlY3Rpb24gPT09IFN0YWNrU2V0Um9sZVNlbGVjdGlvbi5CT1RIIHx8IHJvbGVTZWxlY3Rpb24gPT09IFN0YWNrU2V0Um9sZVNlbGVjdGlvbi5EUklGVF9PTkxZO1xuXG4gICAgLy8gSGVhZGVyXG4gICAgbGluZXMucHVzaChcIkFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogJzIwMTAtMDktMDknXCIpO1xuICAgIGxpbmVzLnB1c2goYERlc2NyaXB0aW9uOiAnJHtkZXNjfSdgKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcblxuICAgIC8vIFJlc291cmNlc1xuICAgIGxpbmVzLnB1c2goJ1Jlc291cmNlczonKTtcblxuICAgIC8vIE9JREMgUHJvdmlkZXIgKG9ubHkgaWYgbm90IHNraXBwaW5nKVxuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY1Byb3ZpZGVyTGluZXMoKSk7XG4gICAgfVxuXG4gICAgLy8gT0lEQyBSb2xlXG4gICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY1JvbGVMaW5lcyhvaWRjUm9sZU5hbWUsIGdpdGh1Yk9pZGMsIHNraXBPaWRjUHJvdmlkZXIpKTtcblxuICAgIC8vIENoYW5nZXNldC9EcmlmdCByb2xlc1xuICAgIGlmIChpbmNsdWRlQ2hhbmdlc2V0KSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVDaGFuZ2VzZXRSb2xlTGluZXMoY2hhbmdlc2V0Um9sZU5hbWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZURyaWZ0KSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVEcmlmdFJvbGVMaW5lcyhkcmlmdFJvbGVOYW1lKSk7XG4gICAgfVxuXG4gICAgLy8gT3V0cHV0c1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJ091dHB1dHM6Jyk7XG4gICAgaWYgKCFza2lwT2lkY1Byb3ZpZGVyKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjT3V0cHV0TGluZXMoKSk7XG4gICAgfVxuXG4gICAgLy8gQWx3YXlzIG91dHB1dCB0aGUgT0lEQyByb2xlIEFSTlxuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNSb2xlT3V0cHV0TGluZXMoKSk7XG5cbiAgICBpZiAoaW5jbHVkZUNoYW5nZXNldCkge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlQ2hhbmdlc2V0T3V0cHV0TGluZXMoKSk7XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVEcmlmdCkge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlRHJpZnRPdXRwdXRMaW5lcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNQcm92aWRlckxpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgIyBHaXRIdWIgT0lEQyBQcm92aWRlcicsXG4gICAgICAnICBHaXRIdWJPSURDUHJvdmlkZXI6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06Ok9JRENQcm92aWRlcicsXG4gICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgICcgICAgICBVcmw6IGh0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20nLFxuICAgICAgJyAgICAgIENsaWVudElkTGlzdDonLFxuICAgICAgJyAgICAgICAgLSBzdHMuYW1hem9uYXdzLmNvbScsXG4gICAgICAnICAgICAgVGh1bWJwcmludExpc3Q6JyxcbiAgICAgICcgICAgICAgIC0gNjkzOGZkNGQ5OGJhYjAzZmFhZGI5N2IzNDM5NjgzMWUzNzgwYWVhMScsXG4gICAgICAnICAgICAgICAtIDFjNThhM2E4NTE4ZTg3NTliZjA3NWI3NmI3NTBkNGYyZGYyNjRmY2QnLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlT2lkY1JvbGVMaW5lcyhcbiAgICByb2xlTmFtZTogc3RyaW5nLFxuICAgIGdpdGh1Yk9pZGM6IEdpdEh1Yk9pZGNDb25maWcsXG4gICAgc2tpcE9pZGNQcm92aWRlcjogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3ViamVjdENsYWltcyA9IHRoaXMuYnVpbGRTdWJqZWN0Q2xhaW1zKGdpdGh1Yk9pZGMpO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICAnICAjIEdpdEh1YiBPSURDIFJvbGUgLSBhdXRoZW50aWNhdGVzIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93cycsXG4gICAgICAnICBHaXRIdWJPSURDUm9sZTonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6Um9sZScsXG4gICAgXTtcblxuICAgIC8vIE9ubHkgYWRkIERlcGVuZHNPbiBpZiB3ZSdyZSBjcmVhdGluZyB0aGUgcHJvdmlkZXJcbiAgICBpZiAoIXNraXBPaWRjUHJvdmlkZXIpIHtcbiAgICAgIGxpbmVzLnB1c2goJyAgICBEZXBlbmRzT246IEdpdEh1Yk9JRENQcm92aWRlcicpO1xuICAgIH1cblxuICAgIGxpbmVzLnB1c2goXG4gICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgIFwiICAgICAgUm9sZU5hbWU6ICdcIiArIHJvbGVOYW1lICsgXCInXCIsXG4gICAgICAnICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICBQcmluY2lwYWw6JyxcbiAgICAgIFwiICAgICAgICAgICAgICBGZWRlcmF0ZWQ6ICFTdWIgJ2Fybjphd3M6aWFtOjoke0FXUzo6QWNjb3VudElkfTpvaWRjLXByb3ZpZGVyL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tJ1wiLFxuICAgICAgJyAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHknLFxuICAgICAgJyAgICAgICAgICAgIENvbmRpdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAndG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb206YXVkJzogJ3N0cy5hbWF6b25hd3MuY29tJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgU3RyaW5nTGlrZTonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgJ3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tOnN1Yic6XCIsXG4gICAgKTtcblxuICAgIC8vIEFkZCBzdWJqZWN0IGNsYWltc1xuICAgIGZvciAoY29uc3QgY2xhaW0gb2Ygc3ViamVjdENsYWltcykge1xuICAgICAgbGluZXMucHVzaChgICAgICAgICAgICAgICAgICAgLSAnJHtjbGFpbX0nYCk7XG4gICAgfVxuXG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgcmV0dXJuIGxpbmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTdWJqZWN0Q2xhaW1zKGdpdGh1Yk9pZGM6IEdpdEh1Yk9pZGNDb25maWcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhaW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGJyYW5jaGVzID0gZ2l0aHViT2lkYy5icmFuY2hlcyA/PyBbJyonXTtcblxuICAgIGZvciAoY29uc3QgcmVwbyBvZiBnaXRodWJPaWRjLnJlcG9zaXRvcmllcykge1xuICAgICAgaWYgKHJlcG8gPT09ICcqJykge1xuICAgICAgICAvLyBXaWxkY2FyZCByZXBvIC0gYWxsb3cgYWxsIHJlcG9zIHdpdGggYnJhbmNoIHJlc3RyaWN0aW9uc1xuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICAgIGlmIChicmFuY2ggPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vKjpyZWY6cmVmcy9oZWFkcy8ke2JyYW5jaH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNwZWNpZmljIHJlcG9cbiAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgYnJhbmNoZXMpIHtcbiAgICAgICAgICBpZiAoYnJhbmNoID09PSAnKicpIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfToqYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfTpyZWY6cmVmcy9oZWFkcy8ke2JyYW5jaH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgYW55IGFkZGl0aW9uYWwgY2xhaW1zXG4gICAgaWYgKGdpdGh1Yk9pZGMuYWRkaXRpb25hbENsYWltcykge1xuICAgICAgZm9yIChjb25zdCBjbGFpbSBvZiBnaXRodWJPaWRjLmFkZGl0aW9uYWxDbGFpbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCByZXBvIG9mIGdpdGh1Yk9pZGMucmVwb3NpdG9yaWVzKSB7XG4gICAgICAgICAgaWYgKHJlcG8gPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qOiR7Y2xhaW19YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsYWltcy5wdXNoKGByZXBvOiR7Z2l0aHViT2lkYy5vd25lcn0vJHtyZXBvfToke2NsYWltfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGFpbXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZUNoYW5nZXNldFJvbGVMaW5lcyhyb2xlTmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICAjIENsb3VkRm9ybWF0aW9uIENoYW5nZVNldCBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZTonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6Um9sZScsXG4gICAgICAnICAgIERlcGVuZHNPbjogR2l0SHViT0lEQ1JvbGUnLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyByb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICAnICAgICAgICAgICAgICBBV1M6ICFHZXRBdHQgR2l0SHViT0lEQ1JvbGUuQXJuJyxcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyxcbiAgICAgICcgICAgICBQb2xpY2llczonLFxuICAgICAgJyAgICAgICAgLSBQb2xpY3lOYW1lOiBDbG91ZEZvcm1hdGlvbkNoYW5nZVNldEFjY2VzcycsXG4gICAgICAnICAgICAgICAgIFBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDbG91ZEZvcm1hdGlvbiBjaGFuZ2VzZXQgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdENoYW5nZVNldHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICcqJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIGJ1Y2tldCBhY2Nlc3MgKGZvciBjaGFuZ2VzZXQgY3JlYXRpb24pJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6R2V0T2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOlB1dE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpEZWxldGVPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6TGlzdEJ1Y2tldCcsXG4gICAgICAnICAgICAgICAgICAgICAgIFJlc291cmNlOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czpzMzo6OmNkay0ke0FXUzo6QWNjb3VudElkfS0ke0FXUzo6UmVnaW9ufS0qJ1wiLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKi8qJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIHBhcmFtZXRlciBhY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXJzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAhU3ViICdhcm46YXdzOnNzbToke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfTpwYXJhbWV0ZXIvY2RrLWJvb3RzdHJhcC8qJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBJQU0gUGFzc1JvbGUgZm9yIENESyBvcGVyYXRpb25zJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gaWFtOlBhc3NSb2xlJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgICAgJ2lhbTpQYXNzZWRUb1NlcnZpY2UnOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbSdcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZURyaWZ0Um9sZUxpbmVzKHJvbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgICMgQ2xvdWRGb3JtYXRpb24gRHJpZnQgRGV0ZWN0aW9uIFJvbGUgLSBtaW5pbWFsIHBlcm1pc3Npb25zIGZvciBkcmlmdCBkZXRlY3Rpb24gb3BlcmF0aW9ucycsXG4gICAgICAnICBDZGtEcmlmdFJvbGU6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06OlJvbGUnLFxuICAgICAgJyAgICBEZXBlbmRzT246IEdpdEh1Yk9JRENSb2xlJyxcbiAgICAgICcgICAgUHJvcGVydGllczonLFxuICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcm9sZU5hbWUgKyBcIidcIixcbiAgICAgICcgICAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIixcbiAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgIFByaW5jaXBhbDonLFxuICAgICAgJyAgICAgICAgICAgICAgQVdTOiAhR2V0QXR0IEdpdEh1Yk9JRENSb2xlLkFybicsXG4gICAgICAnICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZScsXG4gICAgICAnICAgICAgUG9saWNpZXM6JyxcbiAgICAgICcgICAgICAgIC0gUG9saWN5TmFtZTogQ2xvdWRGb3JtYXRpb25EcmlmdEFjY2VzcycsXG4gICAgICAnICAgICAgICAgIFBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDbG91ZEZvcm1hdGlvbiBkcmlmdCBkZXRlY3Rpb24gb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRldGVjdFN0YWNrRHJpZnQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja0RyaWZ0RGV0ZWN0aW9uU3RhdHVzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tSZXNvdXJjZURyaWZ0cycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrcycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpMaXN0U3RhY2tSZXNvdXJjZXMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGV0ZWN0U3RhY2tSZXNvdXJjZURyaWZ0JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNPdXRwdXRMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgIEdpdEh1Yk9JRENQcm92aWRlckFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIEdpdEh1YiBPSURDIHByb3ZpZGVyJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBHaXRIdWJPSURDUHJvdmlkZXIuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUdpdEh1Yk9JRENQcm92aWRlckFybidcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNSb2xlT3V0cHV0TGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICBHaXRIdWJPSURDUm9sZUFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIEdpdEh1YiBPSURDIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IEdpdEh1Yk9JRENSb2xlLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1HaXRIdWJPSURDUm9sZUFybidcIixcbiAgICAgICcnLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIEdpdEh1YiBPSURDIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhUmVmIEdpdEh1Yk9JRENSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUdpdEh1Yk9JRENSb2xlTmFtZSdcIixcbiAgICAgICcnLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZUNoYW5nZXNldE91dHB1dExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZUFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgQ2RrQ2hhbmdlc2V0Um9sZS5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrQ2hhbmdlc2V0Um9sZUFybidcIixcbiAgICAgICcnLFxuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZU5hbWU6JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnTmFtZSBvZiB0aGUgQ0RLIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIVJlZiBDZGtDaGFuZ2VzZXRSb2xlJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVOYW1lJ1wiLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlRHJpZnRPdXRwdXRMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgIENka0RyaWZ0Um9sZUFybjonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIENESyBkcmlmdCBkZXRlY3Rpb24gcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgQ2RrRHJpZnRSb2xlLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtEcmlmdFJvbGVBcm4nXCIsXG4gICAgICAnJyxcbiAgICAgICcgIENka0RyaWZ0Um9sZU5hbWU6JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnTmFtZSBvZiB0aGUgQ0RLIGRyaWZ0IGRldGVjdGlvbiByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIVJlZiBDZGtEcmlmdFJvbGUnLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrRHJpZnRSb2xlTmFtZSdcIixcbiAgICBdO1xuICB9XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBQcm9qZW4taW50ZWdyYXRlZCBTdGFja1NldCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldFByb3BzIGV4dGVuZHMgQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRHZW5lcmF0b3JQcm9wcyB7XG4gIC8qKiBQcm9qZW4gcHJvamVjdCBpbnN0YW5jZSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBhbnk7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIFN0YWNrU2V0IChkZWZhdWx0OiAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXN0YWNrc2V0JykgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBPdXRwdXQgcGF0aCBmb3IgdGhlIHRlbXBsYXRlIGZpbGUgKGRlZmF1bHQ6ICdjZGstZGlmZi13b3JrZmxvdy1zdGFja3NldC10ZW1wbGF0ZS55YW1sJykgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UGF0aD86IHN0cmluZztcblxuICAvKiogVGFyZ2V0IE9VcyBmb3IgZGVwbG95bWVudCAoZS5nLiwgWydvdS14eHh4LXh4eHh4eHh4JywgJ3IteHh4eCddKSAqL1xuICByZWFkb25seSB0YXJnZXRPcmdhbml6YXRpb25hbFVuaXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKiogVGFyZ2V0IHJlZ2lvbnMgZm9yIGRlcGxveW1lbnQgKGUuZy4sIFsndXMtZWFzdC0xJywgJ2V1LXdlc3QtMSddKSAqL1xuICByZWFkb25seSByZWdpb25zPzogc3RyaW5nW107XG5cbiAgLyoqIEF1dG8tZGVwbG95bWVudCBjb25maWd1cmF0aW9uICovXG4gIHJlYWRvbmx5IGF1dG9EZXBsb3ltZW50PzogU3RhY2tTZXRBdXRvRGVwbG95bWVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1c2UgZGVsZWdhdGVkIGFkbWluIG1vZGUgZm9yIFN0YWNrU2V0IG9wZXJhdGlvbnMuXG4gICAqIElmIHRydWUsIGFkZHMgLS1jYWxsLWFzIERFTEVHQVRFRF9BRE1JTiB0byBjb21tYW5kcy5cbiAgICogSWYgZmFsc2UsIGFzc3VtZXMgcnVubmluZyBmcm9tIHRoZSBtYW5hZ2VtZW50IGFjY291bnQuXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRlbGVnYXRlZEFkbWluPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQcm9qZW4gY29uc3RydWN0IHRoYXQgY3JlYXRlcyBhIENsb3VkRm9ybWF0aW9uIFN0YWNrU2V0IHRlbXBsYXRlIGZvciBvcmctd2lkZSBkZXBsb3ltZW50IG9mXG4gKiBHaXRIdWIgT0lEQyBwcm92aWRlciwgT0lEQyByb2xlLCBhbmQgQ0RLIERpZmYvRHJpZnQgSUFNIHJvbGVzLlxuICpcbiAqIFRoaXMgcHJvdmlkZXMgYSBzZWxmLWNvbnRhaW5lZCBwZXItYWNjb3VudCBkZXBsb3ltZW50IHdpdGggbm8gcm9sZSBjaGFpbmluZyByZXF1aXJlZC5cbiAqXG4gKiBGb3Igbm9uLVByb2plbiBwcm9qZWN0cywgdXNlIGBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvcmAgZGlyZWN0bHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldFByb3BzKSB7XG4gICAgY29uc3Qgb3V0cHV0UGF0aCA9IHByb3BzLm91dHB1dFBhdGggPz8gJ2Nkay1kaWZmLXdvcmtmbG93LXN0YWNrc2V0LXRlbXBsYXRlLnlhbWwnO1xuICAgIGNvbnN0IHN0YWNrU2V0TmFtZSA9IHByb3BzLnN0YWNrU2V0TmFtZSA/PyAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXN0YWNrc2V0JztcblxuICAgIC8vIEdlbmVyYXRlIHRlbXBsYXRlIHVzaW5nIHRoZSBnZW5lcmF0b3JcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yLmdlbmVyYXRlVGVtcGxhdGUocHJvcHMpO1xuICAgIG5ldyBUZXh0RmlsZShwcm9wcy5wcm9qZWN0LCBvdXRwdXRQYXRoLCB7IGxpbmVzOiB0ZW1wbGF0ZS5zcGxpdCgnXFxuJykgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSBjb21tYW5kcyBhbmQgYWRkIGFzIFByb2plbiB0YXNrc1xuICAgIGNvbnN0IGNvbW1hbmRzID0gQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRHZW5lcmF0b3IuZ2VuZXJhdGVDb21tYW5kcyh7XG4gICAgICBzdGFja1NldE5hbWUsXG4gICAgICB0ZW1wbGF0ZVBhdGg6IG91dHB1dFBhdGgsXG4gICAgICB0YXJnZXRPcmdhbml6YXRpb25hbFVuaXRJZHM6IHByb3BzLnRhcmdldE9yZ2FuaXphdGlvbmFsVW5pdElkcyxcbiAgICAgIHJlZ2lvbnM6IHByb3BzLnJlZ2lvbnMsXG4gICAgICBhdXRvRGVwbG95bWVudDogcHJvcHMuYXV0b0RlcGxveW1lbnQsXG4gICAgICBkZWxlZ2F0ZWRBZG1pbjogcHJvcHMuZGVsZWdhdGVkQWRtaW4sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0YXNrRGVzY3JpcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ3N0YWNrc2V0LWNyZWF0ZSc6ICdDcmVhdGUgdGhlIFN0YWNrU2V0IGZvciBvcmctd2lkZSBJQU0gcm9sZSBkZXBsb3ltZW50JyxcbiAgICAgICdzdGFja3NldC11cGRhdGUnOiAnVXBkYXRlIHRoZSBTdGFja1NldCB0ZW1wbGF0ZScsXG4gICAgICAnc3RhY2tzZXQtZGVwbG95LWluc3RhbmNlcyc6XG4gICAgICAgICdEZXBsb3kgc3RhY2sgaW5zdGFuY2VzIHRvIHRhcmdldCBPVXMgYW5kIHJlZ2lvbnMgKHBhc3MgLS1kZXBsb3ltZW50LXRhcmdldHMgT3JnYW5pemF0aW9uYWxVbml0SWRzPTxvdS1pZHM+IHRvIG92ZXJyaWRlKScsXG4gICAgICAnc3RhY2tzZXQtZGVsZXRlLWluc3RhbmNlcyc6ICdEZWxldGUgc3RhY2sgaW5zdGFuY2VzIGZyb20gdGFyZ2V0IE9VcyBhbmQgcmVnaW9ucycsXG4gICAgICAnc3RhY2tzZXQtZGVsZXRlJzogJ0RlbGV0ZSB0aGUgU3RhY2tTZXQgKHJlcXVpcmVzIGFsbCBpbnN0YW5jZXMgdG8gYmUgZGVsZXRlZCBmaXJzdCknLFxuICAgICAgJ3N0YWNrc2V0LWRlc2NyaWJlJzogJ0Rlc2NyaWJlIHRoZSBTdGFja1NldCBzdGF0dXMgYW5kIGNvbmZpZ3VyYXRpb24nLFxuICAgICAgJ3N0YWNrc2V0LWxpc3QtaW5zdGFuY2VzJzogJ0xpc3QgYWxsIHN0YWNrIGluc3RhbmNlcyBhbmQgdGhlaXIgc3RhdHVzZXMnLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFt0YXNrTmFtZSwgY29tbWFuZF0gb2YgT2JqZWN0LmVudHJpZXMoY29tbWFuZHMpKSB7XG4gICAgICBwcm9wcy5wcm9qZWN0LmFkZFRhc2sodGFza05hbWUsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHRhc2tEZXNjcmlwdGlvbnNbdGFza05hbWVdLFxuICAgICAgICByZWNlaXZlQXJnczogdGFza05hbWUgIT09ICdzdGFja3NldC1kZWxldGUnLFxuICAgICAgICBleGVjOiBjb21tYW5kLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
391
+ CdkDiffIamTemplateStackSet[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateStackSet", version: "1.2.3" };
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBa0M7QUFFbEM7O0dBRUc7QUFDSCxJQUFZLHFCQU9YO0FBUEQsV0FBWSxxQkFBcUI7SUFDL0IseURBQXlEO0lBQ3pELDBEQUFpQyxDQUFBO0lBQ2pDLGlEQUFpRDtJQUNqRCxrREFBeUIsQ0FBQTtJQUN6QixtQ0FBbUM7SUFDbkMsc0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFQVyxxQkFBcUIscUNBQXJCLHFCQUFxQixRQU9oQztBQWtHRDs7O0dBR0c7QUFDSCxNQUFhLG1DQUFtQztJQUM5Qzs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUErQztRQUNyRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDO1FBQzVELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLGtCQUFrQixDQUFDO1FBQ3hFLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDO1FBQzVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixJQUFJLEtBQUssQ0FBQztRQUVqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3RDLEtBQUssQ0FBQyxVQUFVLEVBQ2hCLFlBQVksRUFDWixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGFBQWEsRUFDYixLQUFLLENBQUMsV0FBVyxFQUNqQixnQkFBZ0IsQ0FDakIsQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQWlELEVBQUU7UUFDekUsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxnQ0FBZ0MsQ0FBQztRQUM1RSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLDBDQUEwQyxDQUFDO1FBQ3RGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsMkJBQTJCLElBQUksRUFBRSxDQUFDO1FBQzFELE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ2hFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsNEJBQTRCLElBQUksS0FBSyxDQUFDO1FBQ2pGLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVsRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3ZFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFckMsT0FBTztZQUNMLGlCQUFpQixFQUFFLHdEQUF3RCxZQUFZLDJCQUEyQixZQUFZLHFHQUFxRyxpQkFBaUIsaUNBQWlDLFlBQVksR0FBRyxNQUFNLEVBQUU7WUFDNVMsaUJBQWlCLEVBQUUsd0RBQXdELFlBQVksMkJBQTJCLFlBQVksdUNBQXVDLE1BQU0sRUFBRTtZQUM3SywyQkFBMkIsRUFBRSw4REFBOEQsWUFBWSwrQ0FBK0MsTUFBTSxjQUFjLFVBQVUsR0FBRyxNQUFNLEVBQUU7WUFDL0wsMkJBQTJCLEVBQUUsOERBQThELFlBQVksK0NBQStDLE1BQU0sY0FBYyxVQUFVLHNCQUFzQixNQUFNLEVBQUU7WUFDbE4saUJBQWlCLEVBQUUsd0RBQXdELFlBQVksR0FBRyxNQUFNLEVBQUU7WUFDbEcsbUJBQW1CLEVBQUUsMERBQTBELFlBQVksR0FBRyxNQUFNLEVBQUU7WUFDdEcseUJBQXlCLEVBQUUsNERBQTRELFlBQVksR0FBRyxNQUFNLEVBQUU7U0FDL0csQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCLENBQ2xDLFVBQTRCLEVBQzVCLFlBQW9CLEVBQ3BCLGlCQUF5QixFQUN6QixhQUFxQixFQUNyQixhQUFvQyxFQUNwQyxXQUFvQixFQUNwQixtQkFBNEIsS0FBSztRQUVqQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsV0FBVyxJQUFJLDhFQUE4RSxDQUFDO1FBRTNHLE1BQU0sZ0JBQWdCLEdBQ3BCLGFBQWEsS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLElBQUksYUFBYSxLQUFLLHFCQUFxQixDQUFDLGNBQWMsQ0FBQztRQUN6RyxNQUFNLFlBQVksR0FDaEIsYUFBYSxLQUFLLHFCQUFxQixDQUFDLElBQUksSUFBSSxhQUFhLEtBQUsscUJBQXFCLENBQUMsVUFBVSxDQUFDO1FBRXJHLFNBQVM7UUFDVCxLQUFLLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDckQsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsWUFBWTtRQUNaLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFekIsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsTUFBTSxlQUFlLEdBQWEsRUFBRSxDQUFDO1FBQ3JDLElBQUksZ0JBQWdCO1lBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELElBQUksWUFBWTtZQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFdkcsd0JBQXdCO1FBQ3hCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELFVBQVU7UUFDVixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDO1FBRWxELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLHlCQUF5QjtRQUN0QyxPQUFPO1lBQ0wsMEJBQTBCO1lBQzFCLHVCQUF1QjtZQUN2QixrQ0FBa0M7WUFDbEMsaUJBQWlCO1lBQ2pCLHdEQUF3RDtZQUN4RCxxQkFBcUI7WUFDckIsNkJBQTZCO1lBQzdCLHVCQUF1QjtZQUN2QixvREFBb0Q7WUFDcEQsb0RBQW9EO1lBQ3BELEVBQUU7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxxQkFBcUIsQ0FDbEMsUUFBZ0IsRUFDaEIsVUFBNEIsRUFDNUIsbUJBQTRCLEtBQUssRUFDakMsa0JBQTRCLEVBQUU7UUFFOUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTFELE1BQU0sS0FBSyxHQUFHO1lBQ1osK0RBQStEO1lBQy9ELG1CQUFtQjtZQUNuQiwwQkFBMEI7U0FDM0IsQ0FBQztRQUVGLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELEtBQUssQ0FBQyxJQUFJLENBQ1IsaUJBQWlCLEVBQ2pCLG1CQUFtQixHQUFHLFFBQVEsR0FBRyxHQUFHLEVBQ3BDLGlDQUFpQyxFQUNqQywrQkFBK0IsRUFDL0Isb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsa0hBQWtILEVBQ2xILG1EQUFtRCxFQUNuRCx3QkFBd0IsRUFDeEIsNkJBQTZCLEVBQzdCLGdGQUFnRixFQUNoRiwyQkFBMkIsRUFDM0IsNERBQTRELENBQzdELENBQUM7UUFFRixxQkFBcUI7UUFDckIsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxrRUFBa0U7UUFDbEUsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDdEQsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNoRCxLQUFLLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDckMsS0FBSyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQzVDLEtBQUssQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUNyRCxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEMsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDN0MsS0FBSyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUNsRyxDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsVUFBNEI7UUFDNUQsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMzQyxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDakIsMkRBQTJEO2dCQUMzRCxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUM5QixJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO29CQUM1QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLFVBQVUsQ0FBQyxLQUFLLHFCQUFxQixNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUNyRSxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZ0JBQWdCO2dCQUNoQixLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUM5QixJQUFJLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDcEQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxVQUFVLENBQUMsS0FBSyxJQUFJLElBQUksbUJBQW1CLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQzNFLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDaEQsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzNDLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsVUFBVSxDQUFDLEtBQUssTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUNyRCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQzNELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUFnQjtRQUN4RCxPQUFPO1lBQ0wsa0ZBQWtGO1lBQ2xGLHFCQUFxQjtZQUNyQiwwQkFBMEI7WUFDMUIsK0JBQStCO1lBQy9CLGlCQUFpQjtZQUNqQixtQkFBbUIsR0FBRyxRQUFRLEdBQUcsR0FBRztZQUNwQyxpQ0FBaUM7WUFDakMsK0JBQStCO1lBQy9CLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0Isd0JBQXdCO1lBQ3hCLCtDQUErQztZQUMvQyxvQ0FBb0M7WUFDcEMsaUJBQWlCO1lBQ2pCLHFEQUFxRDtZQUNyRCwyQkFBMkI7WUFDM0IsbUNBQW1DO1lBQ25DLHdCQUF3QjtZQUN4QixxREFBcUQ7WUFDckQsK0JBQStCO1lBQy9CLHlCQUF5QjtZQUN6QixvREFBb0Q7WUFDcEQsc0RBQXNEO1lBQ3RELG9EQUFvRDtZQUNwRCxtREFBbUQ7WUFDbkQsbURBQW1EO1lBQ25ELCtCQUErQjtZQUMvQixzRUFBc0U7WUFDdEUsK0JBQStCO1lBQy9CLHlCQUF5QjtZQUN6QixrQ0FBa0M7WUFDbEMsa0NBQWtDO1lBQ2xDLHFDQUFxQztZQUNyQyxtQ0FBbUM7WUFDbkMsMkJBQTJCO1lBQzNCLGdGQUFnRjtZQUNoRixrRkFBa0Y7WUFDbEYsZ0RBQWdEO1lBQ2hELCtCQUErQjtZQUMvQix5QkFBeUI7WUFDekIsc0NBQXNDO1lBQ3RDLHVDQUF1QztZQUN2Qyw2Q0FBNkM7WUFDN0MseUdBQXlHO1lBQ3pHLGlEQUFpRDtZQUNqRCwrQkFBK0I7WUFDL0IseUJBQXlCO1lBQ3pCLGtDQUFrQztZQUNsQywrQkFBK0I7WUFDL0IsNEJBQTRCO1lBQzVCLGlDQUFpQztZQUNqQywyRUFBMkU7WUFDM0UsRUFBRTtTQUNILENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQWdCO1FBQ3BELE9BQU87WUFDTCw4RkFBOEY7WUFDOUYsaUJBQWlCO1lBQ2pCLDBCQUEwQjtZQUMxQiwrQkFBK0I7WUFDL0IsaUJBQWlCO1lBQ2pCLG1CQUFtQixHQUFHLFFBQVEsR0FBRyxHQUFHO1lBQ3BDLGlDQUFpQztZQUNqQywrQkFBK0I7WUFDL0Isb0JBQW9CO1lBQ3BCLDJCQUEyQjtZQUMzQix3QkFBd0I7WUFDeEIsK0NBQStDO1lBQy9DLG9DQUFvQztZQUNwQyxpQkFBaUI7WUFDakIsaURBQWlEO1lBQ2pELDJCQUEyQjtZQUMzQixtQ0FBbUM7WUFDbkMsd0JBQXdCO1lBQ3hCLDJEQUEyRDtZQUMzRCwrQkFBK0I7WUFDL0IseUJBQXlCO1lBQ3pCLHFEQUFxRDtZQUNyRCxzRUFBc0U7WUFDdEUsZ0VBQWdFO1lBQ2hFLG1EQUFtRDtZQUNuRCx1REFBdUQ7WUFDdkQsNkRBQTZEO1lBQzdELCtCQUErQjtZQUMvQixFQUFFO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsdUJBQXVCO1FBQ3BDLE9BQU87WUFDTCwwQkFBMEI7WUFDMUIsb0RBQW9EO1lBQ3BELDJDQUEyQztZQUMzQyxhQUFhO1lBQ2IsNERBQTREO1lBQzVELEVBQUU7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQywyQkFBMkI7UUFDeEMsT0FBTztZQUNMLHNCQUFzQjtZQUN0QixnREFBZ0Q7WUFDaEQsdUNBQXVDO1lBQ3ZDLGFBQWE7WUFDYix3REFBd0Q7WUFDeEQsRUFBRTtZQUNGLHVCQUF1QjtZQUN2QixpREFBaUQ7WUFDakQsZ0NBQWdDO1lBQ2hDLGFBQWE7WUFDYix5REFBeUQ7WUFDekQsRUFBRTtTQUNILENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLDRCQUE0QjtRQUN6QyxPQUFPO1lBQ0wsd0JBQXdCO1lBQ3hCLGtEQUFrRDtZQUNsRCx5Q0FBeUM7WUFDekMsYUFBYTtZQUNiLDBEQUEwRDtZQUMxRCxFQUFFO1lBQ0YseUJBQXlCO1lBQ3pCLG1EQUFtRDtZQUNuRCxrQ0FBa0M7WUFDbEMsYUFBYTtZQUNiLDJEQUEyRDtZQUMzRCxFQUFFO1NBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsd0JBQXdCO1FBQ3JDLE9BQU87WUFDTCxvQkFBb0I7WUFDcEIsd0RBQXdEO1lBQ3hELHFDQUFxQztZQUNyQyxhQUFhO1lBQ2Isc0RBQXNEO1lBQ3RELEVBQUU7WUFDRixxQkFBcUI7WUFDckIseURBQXlEO1lBQ3pELDhCQUE4QjtZQUM5QixhQUFhO1lBQ2IsdURBQXVEO1NBQ3hELENBQUM7SUFDSixDQUFDOztBQW5ZSCxrRkFvWUM7OztBQWlDRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSwwQkFBMEI7SUFDckMsWUFBWSxLQUFzQztRQUNoRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLDBDQUEwQyxDQUFDO1FBQ2xGLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksZ0NBQWdDLENBQUM7UUFFNUUsd0NBQXdDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLG1DQUFtQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdFLElBQUksaUJBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6RSw0Q0FBNEM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsbUNBQW1DLENBQUMsZ0JBQWdCLENBQUM7WUFDcEUsWUFBWTtZQUNaLFlBQVksRUFBRSxVQUFVO1lBQ3hCLDJCQUEyQixFQUFFLEtBQUssQ0FBQywyQkFBMkI7WUFDOUQsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNwQyxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7U0FDckMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxnQkFBZ0IsR0FBMkI7WUFDL0MsaUJBQWlCLEVBQUUsc0RBQXNEO1lBQ3pFLGlCQUFpQixFQUFFLDhCQUE4QjtZQUNqRCwyQkFBMkIsRUFDekIseUhBQXlIO1lBQzNILDJCQUEyQixFQUFFLG9EQUFvRDtZQUNqRixpQkFBaUIsRUFBRSxrRUFBa0U7WUFDckYsbUJBQW1CLEVBQUUsZ0RBQWdEO1lBQ3JFLHlCQUF5QixFQUFFLDZDQUE2QztTQUN6RSxDQUFDO1FBRUYsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQzlCLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZDLFdBQVcsRUFBRSxRQUFRLEtBQUssaUJBQWlCO2dCQUMzQyxJQUFJLEVBQUUsT0FBTzthQUNkLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQXJDSCxnRUFzQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5cbi8qKlxuICogV2hpY2ggcm9sZXMgdG8gaW5jbHVkZSBpbiB0aGUgU3RhY2tTZXRcbiAqL1xuZXhwb3J0IGVudW0gU3RhY2tTZXRSb2xlU2VsZWN0aW9uIHtcbiAgLyoqIEluY2x1ZGUgb25seSB0aGUgY2hhbmdlc2V0IHJvbGUgKENka0NoYW5nZXNldFJvbGUpICovXG4gIENIQU5HRVNFVF9PTkxZID0gJ0NIQU5HRVNFVF9PTkxZJyxcbiAgLyoqIEluY2x1ZGUgb25seSB0aGUgZHJpZnQgcm9sZSAoQ2RrRHJpZnRSb2xlKSAqL1xuICBEUklGVF9PTkxZID0gJ0RSSUZUX09OTFknLFxuICAvKiogSW5jbHVkZSBib3RoIHJvbGVzIChkZWZhdWx0KSAqL1xuICBCT1RIID0gJ0JPVEgnLFxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFN0YWNrU2V0IGF1dG8tZGVwbG95bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrU2V0QXV0b0RlcGxveW1lbnQge1xuICAvKiogRW5hYmxlIGF1dG8tZGVwbG95bWVudCB0byBuZXcgYWNjb3VudHMgaW4gdGFyZ2V0IE9VcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG4gIC8qKiBSZXRhaW4gc3RhY2tzIHdoZW4gYWNjb3VudCBsZWF2ZXMgT1UgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICByZWFkb25seSByZXRhaW5TdGFja3NPbkFjY291bnRSZW1vdmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBHaXRIdWIgcmVwb3NpdG9yeSByZXN0cmljdGlvbnMgZm9yIE9JREMgYXV0aGVudGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJPaWRjQ29uZmlnIHtcbiAgLyoqXG4gICAqIEdpdEh1YiBvcmdhbml6YXRpb24gb3IgdXNlcm5hbWUgKGUuZy4sICdteS1vcmcnIG9yICdteS11c2VybmFtZScpXG4gICAqL1xuICByZWFkb25seSBvd25lcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IG5hbWVzIGFsbG93ZWQgdG8gYXNzdW1lIHRoZSByb2xlIChlLmcuLCBbJ3JlcG8xJywgJ3JlcG8yJ10pXG4gICAqIFVzZSBbJyonXSB0byBhbGxvdyBhbGwgcmVwb3MgaW4gdGhlIG9yZ2FuaXphdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yaWVzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQnJhbmNoIHBhdHRlcm5zIGFsbG93ZWQgKGUuZy4sIFsnbWFpbicsICdyZWxlYXNlLyonXSlcbiAgICogRGVmYXVsdDogWycqJ10gKGFsbCBicmFuY2hlcylcbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgc3ViamVjdCBjbGFpbXMgZm9yIGZpbmUtZ3JhaW5lZCBhY2Nlc3NcbiAgICogZS5nLiwgWydwdWxsX3JlcXVlc3QnLCAnZW52aXJvbm1lbnQ6cHJvZHVjdGlvbiddXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQ2xhaW1zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIGdlbmVyYXRpbmcgU3RhY2tTZXQgdGVtcGxhdGVzIChubyBQcm9qZW4gZGVwZW5kZW5jeSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvclByb3BzIHtcbiAgLyoqIEdpdEh1YiBPSURDIGNvbmZpZ3VyYXRpb24gZm9yIHJlcG8vYnJhbmNoIHJlc3RyaWN0aW9ucyAqL1xuICByZWFkb25seSBnaXRodWJPaWRjOiBHaXRIdWJPaWRjQ29uZmlnO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBHaXRIdWIgT0lEQyByb2xlIChkZWZhdWx0OiAnR2l0SHViT0lEQ1JvbGUnKSAqL1xuICByZWFkb25seSBvaWRjUm9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIENka0NoYW5nZXNldFJvbGUgKGRlZmF1bHQ6ICdDZGtDaGFuZ2VzZXRSb2xlJykgKi9cbiAgcmVhZG9ubHkgY2hhbmdlc2V0Um9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIENka0RyaWZ0Um9sZSAoZGVmYXVsdDogJ0Nka0RyaWZ0Um9sZScpICovXG4gIHJlYWRvbmx5IGRyaWZ0Um9sZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIFdoaWNoIHJvbGVzIHRvIGluY2x1ZGUgKGRlZmF1bHQ6IEJPVEgpICovXG4gIHJlYWRvbmx5IHJvbGVTZWxlY3Rpb24/OiBTdGFja1NldFJvbGVTZWxlY3Rpb247XG5cbiAgLyoqIERlc2NyaXB0aW9uIGZvciB0aGUgU3RhY2tTZXQgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNraXAgY3JlYXRpbmcgdGhlIE9JREMgcHJvdmlkZXIgKHVzZSBleGlzdGluZyBvbmUpLlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiBhY2NvdW50cyBhbHJlYWR5IGhhdmUgYSBHaXRIdWIgT0lEQyBwcm92aWRlci5cbiAgICogVGhlIHRlbXBsYXRlIHdpbGwgcmVmZXJlbmNlIHRoZSBleGlzdGluZyBwcm92aWRlciBieSBBUk4uXG4gICAqIERlZmF1bHQ6IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwT2lkY1Byb3ZpZGVyQ3JlYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciBnZW5lcmF0aW5nIFN0YWNrU2V0IENMSSBjb21tYW5kcyAobm8gUHJvamVuIGRlcGVuZGVuY3kpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRDb21tYW5kc1Byb3BzIHtcbiAgLyoqIE5hbWUgb2YgdGhlIFN0YWNrU2V0IChkZWZhdWx0OiAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXN0YWNrc2V0JykgKi9cbiAgcmVhZG9ubHkgc3RhY2tTZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBQYXRoIHRvIHRoZSB0ZW1wbGF0ZSBmaWxlIChkZWZhdWx0OiAnY2RrLWRpZmYtd29ya2Zsb3ctc3RhY2tzZXQtdGVtcGxhdGUueWFtbCcpICovXG4gIHJlYWRvbmx5IHRlbXBsYXRlUGF0aD86IHN0cmluZztcblxuICAvKiogVGFyZ2V0IE9VcyBmb3IgZGVwbG95bWVudCAoZS5nLiwgWydvdS14eHh4LXh4eHh4eHh4JywgJ3IteHh4eCddKSAqL1xuICByZWFkb25seSB0YXJnZXRPcmdhbml6YXRpb25hbFVuaXRJZHM/OiBzdHJpbmdbXTtcblxuICAvKiogVGFyZ2V0IHJlZ2lvbnMgZm9yIGRlcGxveW1lbnQgKGUuZy4sIFsndXMtZWFzdC0xJywgJ2V1LXdlc3QtMSddKSAqL1xuICByZWFkb25seSByZWdpb25zPzogc3RyaW5nW107XG5cbiAgLyoqIEF1dG8tZGVwbG95bWVudCBjb25maWd1cmF0aW9uICovXG4gIHJlYWRvbmx5IGF1dG9EZXBsb3ltZW50PzogU3RhY2tTZXRBdXRvRGVwbG95bWVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1c2UgZGVsZWdhdGVkIGFkbWluIG1vZGUgZm9yIFN0YWNrU2V0IG9wZXJhdGlvbnMuXG4gICAqIElmIHRydWUsIGFkZHMgLS1jYWxsLWFzIERFTEVHQVRFRF9BRE1JTiB0byBjb21tYW5kcy5cbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZWdhdGVkQWRtaW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFB1cmUgZ2VuZXJhdG9yIGNsYXNzIGZvciBTdGFja1NldCB0ZW1wbGF0ZXMgYW5kIGNvbW1hbmRzLlxuICogTm8gUHJvamVuIGRlcGVuZGVuY3kgLSBjYW4gYmUgdXNlZCBpbiBhbnkgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBDbG91ZEZvcm1hdGlvbiBTdGFja1NldCB0ZW1wbGF0ZSBhcyBhIFlBTUwgc3RyaW5nLlxuICAgKi9cbiAgc3RhdGljIGdlbmVyYXRlVGVtcGxhdGUocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9pZGNSb2xlTmFtZSA9IHByb3BzLm9pZGNSb2xlTmFtZSA/PyAnR2l0SHViT0lEQ1JvbGUnO1xuICAgIGNvbnN0IGNoYW5nZXNldFJvbGVOYW1lID0gcHJvcHMuY2hhbmdlc2V0Um9sZU5hbWUgPz8gJ0Nka0NoYW5nZXNldFJvbGUnO1xuICAgIGNvbnN0IGRyaWZ0Um9sZU5hbWUgPSBwcm9wcy5kcmlmdFJvbGVOYW1lID8/ICdDZGtEcmlmdFJvbGUnO1xuICAgIGNvbnN0IHJvbGVTZWxlY3Rpb24gPSBwcm9wcy5yb2xlU2VsZWN0aW9uID8/IFN0YWNrU2V0Um9sZVNlbGVjdGlvbi5CT1RIO1xuICAgIGNvbnN0IHNraXBPaWRjUHJvdmlkZXIgPSBwcm9wcy5za2lwT2lkY1Byb3ZpZGVyQ3JlYXRpb24gPz8gZmFsc2U7XG5cbiAgICBjb25zdCBsaW5lcyA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZUxpbmVzKFxuICAgICAgcHJvcHMuZ2l0aHViT2lkYyxcbiAgICAgIG9pZGNSb2xlTmFtZSxcbiAgICAgIGNoYW5nZXNldFJvbGVOYW1lLFxuICAgICAgZHJpZnRSb2xlTmFtZSxcbiAgICAgIHJvbGVTZWxlY3Rpb24sXG4gICAgICBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHNraXBPaWRjUHJvdmlkZXIsXG4gICAgKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBBV1MgQ0xJIGNvbW1hbmRzIGZvciBTdGFja1NldCBvcGVyYXRpb25zLlxuICAgKiBSZXR1cm5zIGEgbWFwIG9mIGNvbW1hbmQgbmFtZXMgdG8gc2hlbGwgY29tbWFuZHMuXG4gICAqL1xuICBzdGF0aWMgZ2VuZXJhdGVDb21tYW5kcyhwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRDb21tYW5kc1Byb3BzID0ge30pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzdGFja1NldE5hbWUgPSBwcm9wcy5zdGFja1NldE5hbWUgPz8gJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS1zdGFja3NldCc7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcHJvcHMudGVtcGxhdGVQYXRoID8/ICdjZGstZGlmZi13b3JrZmxvdy1zdGFja3NldC10ZW1wbGF0ZS55YW1sJztcbiAgICBjb25zdCByZWdpb25zID0gcHJvcHMucmVnaW9ucyA/PyBbJ3VzLWVhc3QtMSddO1xuICAgIGNvbnN0IHRhcmdldE9VcyA9IHByb3BzLnRhcmdldE9yZ2FuaXphdGlvbmFsVW5pdElkcyA/PyBbXTtcbiAgICBjb25zdCBhdXRvRGVwbG95RW5hYmxlZCA9IHByb3BzLmF1dG9EZXBsb3ltZW50Py5lbmFibGVkID8/IHRydWU7XG4gICAgY29uc3QgcmV0YWluU3RhY2tzID0gcHJvcHMuYXV0b0RlcGxveW1lbnQ/LnJldGFpblN0YWNrc09uQWNjb3VudFJlbW92YWwgPz8gZmFsc2U7XG4gICAgY29uc3QgZGVsZWdhdGVkQWRtaW4gPSBwcm9wcy5kZWxlZ2F0ZWRBZG1pbiA/PyB0cnVlO1xuICAgIGNvbnN0IGNhbGxBcyA9IGRlbGVnYXRlZEFkbWluID8gJyAtLWNhbGwtYXMgREVMRUdBVEVEX0FETUlOJyA6ICcnO1xuXG4gICAgY29uc3Qgb3VMaXN0ID0gdGFyZ2V0T1VzLmxlbmd0aCA+IDAgPyB0YXJnZXRPVXMuam9pbignLCcpIDogJzxPVV9JRFM+JztcbiAgICBjb25zdCByZWdpb25MaXN0ID0gcmVnaW9ucy5qb2luKCcgJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ3N0YWNrc2V0LWNyZWF0ZSc6IGBhd3MgY2xvdWRmb3JtYXRpb24gY3JlYXRlLXN0YWNrLXNldCAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSAtLXRlbXBsYXRlLWJvZHkgZmlsZTovLyR7dGVtcGxhdGVQYXRofSAtLWNhcGFiaWxpdGllcyBDQVBBQklMSVRZX05BTUVEX0lBTSAtLXBlcm1pc3Npb24tbW9kZWwgU0VSVklDRV9NQU5BR0VEIC0tYXV0by1kZXBsb3ltZW50IEVuYWJsZWQ9JHthdXRvRGVwbG95RW5hYmxlZH0sUmV0YWluU3RhY2tzT25BY2NvdW50UmVtb3ZhbD0ke3JldGFpblN0YWNrc30ke2NhbGxBc31gLFxuICAgICAgJ3N0YWNrc2V0LXVwZGF0ZSc6IGBhd3MgY2xvdWRmb3JtYXRpb24gdXBkYXRlLXN0YWNrLXNldCAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSAtLXRlbXBsYXRlLWJvZHkgZmlsZTovLyR7dGVtcGxhdGVQYXRofSAtLWNhcGFiaWxpdGllcyBDQVBBQklMSVRZX05BTUVEX0lBTSR7Y2FsbEFzfWAsXG4gICAgICAnc3RhY2tzZXQtZGVwbG95LWluc3RhbmNlcyc6IGBhd3MgY2xvdWRmb3JtYXRpb24gY3JlYXRlLXN0YWNrLWluc3RhbmNlcyAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSAtLWRlcGxveW1lbnQtdGFyZ2V0cyBPcmdhbml6YXRpb25hbFVuaXRJZHM9JHtvdUxpc3R9IC0tcmVnaW9ucyAke3JlZ2lvbkxpc3R9JHtjYWxsQXN9YCxcbiAgICAgICdzdGFja3NldC1kZWxldGUtaW5zdGFuY2VzJzogYGF3cyBjbG91ZGZvcm1hdGlvbiBkZWxldGUtc3RhY2staW5zdGFuY2VzIC0tc3RhY2stc2V0LW5hbWUgJHtzdGFja1NldE5hbWV9IC0tZGVwbG95bWVudC10YXJnZXRzIE9yZ2FuaXphdGlvbmFsVW5pdElkcz0ke291TGlzdH0gLS1yZWdpb25zICR7cmVnaW9uTGlzdH0gLS1uby1yZXRhaW4tc3RhY2tzJHtjYWxsQXN9YCxcbiAgICAgICdzdGFja3NldC1kZWxldGUnOiBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlbGV0ZS1zdGFjay1zZXQgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0ke2NhbGxBc31gLFxuICAgICAgJ3N0YWNrc2V0LWRlc2NyaWJlJzogYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFjay1zZXQgLS1zdGFjay1zZXQtbmFtZSAke3N0YWNrU2V0TmFtZX0ke2NhbGxBc31gLFxuICAgICAgJ3N0YWNrc2V0LWxpc3QtaW5zdGFuY2VzJzogYGF3cyBjbG91ZGZvcm1hdGlvbiBsaXN0LXN0YWNrLWluc3RhbmNlcyAtLXN0YWNrLXNldC1uYW1lICR7c3RhY2tTZXROYW1lfSR7Y2FsbEFzfWAsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlVGVtcGxhdGVMaW5lcyhcbiAgICBnaXRodWJPaWRjOiBHaXRIdWJPaWRjQ29uZmlnLFxuICAgIG9pZGNSb2xlTmFtZTogc3RyaW5nLFxuICAgIGNoYW5nZXNldFJvbGVOYW1lOiBzdHJpbmcsXG4gICAgZHJpZnRSb2xlTmFtZTogc3RyaW5nLFxuICAgIHJvbGVTZWxlY3Rpb246IFN0YWNrU2V0Um9sZVNlbGVjdGlvbixcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICBza2lwT2lkY1Byb3ZpZGVyOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBkZXNjID0gZGVzY3JpcHRpb24gPz8gJ0dpdEh1YiBPSURDIGFuZCBJQU0gcm9sZXMgZm9yIENESyBEaWZmL0RyaWZ0IHdvcmtmbG93cyAoU3RhY2tTZXQgZGVwbG95bWVudCknO1xuXG4gICAgY29uc3QgaW5jbHVkZUNoYW5nZXNldCA9XG4gICAgICByb2xlU2VsZWN0aW9uID09PSBTdGFja1NldFJvbGVTZWxlY3Rpb24uQk9USCB8fCByb2xlU2VsZWN0aW9uID09PSBTdGFja1NldFJvbGVTZWxlY3Rpb24uQ0hBTkdFU0VUX09OTFk7XG4gICAgY29uc3QgaW5jbHVkZURyaWZ0ID1cbiAgICAgIHJvbGVTZWxlY3Rpb24gPT09IFN0YWNrU2V0Um9sZVNlbGVjdGlvbi5CT1RIIHx8IHJvbGVTZWxlY3Rpb24gPT09IFN0YWNrU2V0Um9sZVNlbGVjdGlvbi5EUklGVF9PTkxZO1xuXG4gICAgLy8gSGVhZGVyXG4gICAgbGluZXMucHVzaChcIkFXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbjogJzIwMTAtMDktMDknXCIpO1xuICAgIGxpbmVzLnB1c2goYERlc2NyaXB0aW9uOiAnJHtkZXNjfSdgKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcblxuICAgIC8vIFJlc291cmNlc1xuICAgIGxpbmVzLnB1c2goJ1Jlc291cmNlczonKTtcblxuICAgIC8vIE9JREMgUHJvdmlkZXIgKG9ubHkgaWYgbm90IHNraXBwaW5nKVxuICAgIGlmICghc2tpcE9pZGNQcm92aWRlcikge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlT2lkY1Byb3ZpZGVyTGluZXMoKSk7XG4gICAgfVxuXG4gICAgLy8gT0lEQyBSb2xlIChuZWVkcyBwZXJtaXNzaW9ucyB0byBhc3N1bWUgY2hhbmdlc2V0L2RyaWZ0IHJvbGVzKVxuICAgIGNvbnN0IHRhcmdldFJvbGVOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoaW5jbHVkZUNoYW5nZXNldCkgdGFyZ2V0Um9sZU5hbWVzLnB1c2goY2hhbmdlc2V0Um9sZU5hbWUpO1xuICAgIGlmIChpbmNsdWRlRHJpZnQpIHRhcmdldFJvbGVOYW1lcy5wdXNoKGRyaWZ0Um9sZU5hbWUpO1xuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNSb2xlTGluZXMob2lkY1JvbGVOYW1lLCBnaXRodWJPaWRjLCBza2lwT2lkY1Byb3ZpZGVyLCB0YXJnZXRSb2xlTmFtZXMpKTtcblxuICAgIC8vIENoYW5nZXNldC9EcmlmdCByb2xlc1xuICAgIGlmIChpbmNsdWRlQ2hhbmdlc2V0KSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVDaGFuZ2VzZXRSb2xlTGluZXMoY2hhbmdlc2V0Um9sZU5hbWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZURyaWZ0KSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVEcmlmdFJvbGVMaW5lcyhkcmlmdFJvbGVOYW1lKSk7XG4gICAgfVxuXG4gICAgLy8gT3V0cHV0c1xuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIGxpbmVzLnB1c2goJ091dHB1dHM6Jyk7XG4gICAgaWYgKCFza2lwT2lkY1Byb3ZpZGVyKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLnRoaXMuZ2VuZXJhdGVPaWRjT3V0cHV0TGluZXMoKSk7XG4gICAgfVxuXG4gICAgLy8gQWx3YXlzIG91dHB1dCB0aGUgT0lEQyByb2xlIEFSTlxuICAgIGxpbmVzLnB1c2goLi4udGhpcy5nZW5lcmF0ZU9pZGNSb2xlT3V0cHV0TGluZXMoKSk7XG5cbiAgICBpZiAoaW5jbHVkZUNoYW5nZXNldCkge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlQ2hhbmdlc2V0T3V0cHV0TGluZXMoKSk7XG4gICAgfVxuXG4gICAgaWYgKGluY2x1ZGVEcmlmdCkge1xuICAgICAgbGluZXMucHVzaCguLi50aGlzLmdlbmVyYXRlRHJpZnRPdXRwdXRMaW5lcygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZU9pZGNQcm92aWRlckxpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgIyBHaXRIdWIgT0lEQyBQcm92aWRlcicsXG4gICAgICAnICBHaXRIdWJPSURDUHJvdmlkZXI6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06Ok9JRENQcm92aWRlcicsXG4gICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgICcgICAgICBVcmw6IGh0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20nLFxuICAgICAgJyAgICAgIENsaWVudElkTGlzdDonLFxuICAgICAgJyAgICAgICAgLSBzdHMuYW1hem9uYXdzLmNvbScsXG4gICAgICAnICAgICAgVGh1bWJwcmludExpc3Q6JyxcbiAgICAgICcgICAgICAgIC0gNjkzOGZkNGQ5OGJhYjAzZmFhZGI5N2IzNDM5NjgzMWUzNzgwYWVhMScsXG4gICAgICAnICAgICAgICAtIDFjNThhM2E4NTE4ZTg3NTliZjA3NWI3NmI3NTBkNGYyZGYyNjRmY2QnLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlT2lkY1JvbGVMaW5lcyhcbiAgICByb2xlTmFtZTogc3RyaW5nLFxuICAgIGdpdGh1Yk9pZGM6IEdpdEh1Yk9pZGNDb25maWcsXG4gICAgc2tpcE9pZGNQcm92aWRlcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHRhcmdldFJvbGVOYW1lczogc3RyaW5nW10gPSBbXSxcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN1YmplY3RDbGFpbXMgPSB0aGlzLmJ1aWxkU3ViamVjdENsYWltcyhnaXRodWJPaWRjKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgJyAgIyBHaXRIdWIgT0lEQyBSb2xlIC0gYXV0aGVudGljYXRlcyBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd3MnLFxuICAgICAgJyAgR2l0SHViT0lEQ1JvbGU6JyxcbiAgICAgICcgICAgVHlwZTogQVdTOjpJQU06OlJvbGUnLFxuICAgIF07XG5cbiAgICAvLyBPbmx5IGFkZCBEZXBlbmRzT24gaWYgd2UncmUgY3JlYXRpbmcgdGhlIHByb3ZpZGVyXG4gICAgaWYgKCFza2lwT2lkY1Byb3ZpZGVyKSB7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgRGVwZW5kc09uOiBHaXRIdWJPSURDUHJvdmlkZXInKTtcbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyByb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICBcIiAgICAgICAgICAgICAgRmVkZXJhdGVkOiAhU3ViICdhcm46YXdzOmlhbTo6JHtBV1M6OkFjY291bnRJZH06b2lkYy1wcm92aWRlci90b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbSdcIixcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5JyxcbiAgICAgICcgICAgICAgICAgICBDb25kaXRpb246JyxcbiAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgXCIgICAgICAgICAgICAgICAgJ3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tOmF1ZCc6ICdzdHMuYW1hem9uYXdzLmNvbSdcIixcbiAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0xpa2U6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICd0b2tlbi5hY3Rpb25zLmdpdGh1YnVzZXJjb250ZW50LmNvbTpzdWInOlwiLFxuICAgICk7XG5cbiAgICAvLyBBZGQgc3ViamVjdCBjbGFpbXNcbiAgICBmb3IgKGNvbnN0IGNsYWltIG9mIHN1YmplY3RDbGFpbXMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICAgICAgIC0gJyR7Y2xhaW19J2ApO1xuICAgIH1cblxuICAgIC8vIEFkZCBwb2xpY3kgdG8gYWxsb3cgYXNzdW1pbmcgdGhlIHRhcmdldCByb2xlcyAoY2hhbmdlc2V0L2RyaWZ0KVxuICAgIGlmICh0YXJnZXRSb2xlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgbGluZXMucHVzaCgnICAgICAgUG9saWNpZXM6Jyk7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgICAgIC0gUG9saWN5TmFtZTogQXNzdW1lVGFyZ2V0Um9sZXMnKTtcbiAgICAgIGxpbmVzLnB1c2goJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonKTtcbiAgICAgIGxpbmVzLnB1c2goXCIgICAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNydcIik7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICBTdGF0ZW1lbnQ6Jyk7XG4gICAgICBsaW5lcy5wdXNoKCcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycpO1xuICAgICAgbGluZXMucHVzaCgnICAgICAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGUnKTtcbiAgICAgIGxpbmVzLnB1c2goJyAgICAgICAgICAgICAgICBSZXNvdXJjZTonKTtcbiAgICAgIGZvciAoY29uc3QgdGFyZ2V0Um9sZU5hbWUgb2YgdGFyZ2V0Um9sZU5hbWVzKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czppYW06OlxcJHtBV1M6OkFjY291bnRJZH06cm9sZS8ke3RhcmdldFJvbGVOYW1lfSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICByZXR1cm4gbGluZXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWlsZFN1YmplY3RDbGFpbXMoZ2l0aHViT2lkYzogR2l0SHViT2lkY0NvbmZpZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFpbXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYnJhbmNoZXMgPSBnaXRodWJPaWRjLmJyYW5jaGVzID8/IFsnKiddO1xuXG4gICAgZm9yIChjb25zdCByZXBvIG9mIGdpdGh1Yk9pZGMucmVwb3NpdG9yaWVzKSB7XG4gICAgICBpZiAocmVwbyA9PT0gJyonKSB7XG4gICAgICAgIC8vIFdpbGRjYXJkIHJlcG8gLSBhbGxvdyBhbGwgcmVwb3Mgd2l0aCBicmFuY2ggcmVzdHJpY3Rpb25zXG4gICAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgICAgaWYgKGJyYW5jaCA9PT0gJyonKSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9LypgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8qOnJlZjpyZWZzL2hlYWRzLyR7YnJhbmNofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3BlY2lmaWMgcmVwb1xuICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICAgIGlmIChicmFuY2ggPT09ICcqJykge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8ke3JlcG99OipgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8ke3JlcG99OnJlZjpyZWZzL2hlYWRzLyR7YnJhbmNofWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBhbnkgYWRkaXRpb25hbCBjbGFpbXNcbiAgICBpZiAoZ2l0aHViT2lkYy5hZGRpdGlvbmFsQ2xhaW1zKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYWltIG9mIGdpdGh1Yk9pZGMuYWRkaXRpb25hbENsYWltcykge1xuICAgICAgICBmb3IgKGNvbnN0IHJlcG8gb2YgZ2l0aHViT2lkYy5yZXBvc2l0b3JpZXMpIHtcbiAgICAgICAgICBpZiAocmVwbyA9PT0gJyonKSB7XG4gICAgICAgICAgICBjbGFpbXMucHVzaChgcmVwbzoke2dpdGh1Yk9pZGMub3duZXJ9Lyo6JHtjbGFpbX1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xhaW1zLnB1c2goYHJlcG86JHtnaXRodWJPaWRjLm93bmVyfS8ke3JlcG99OiR7Y2xhaW19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYWltcztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlQ2hhbmdlc2V0Um9sZUxpbmVzKHJvbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgICMgQ2xvdWRGb3JtYXRpb24gQ2hhbmdlU2V0IFJvbGUgLSBtaW5pbWFsIHBlcm1pc3Npb25zIGZvciBjaGFuZ2VzZXQgb3BlcmF0aW9ucycsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlOicsXG4gICAgICAnICAgIFR5cGU6IEFXUzo6SUFNOjpSb2xlJyxcbiAgICAgICcgICAgRGVwZW5kc09uOiBHaXRIdWJPSURDUm9sZScsXG4gICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgIFwiICAgICAgUm9sZU5hbWU6ICdcIiArIHJvbGVOYW1lICsgXCInXCIsXG4gICAgICAnICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICBQcmluY2lwYWw6JyxcbiAgICAgICcgICAgICAgICAgICAgIEFXUzogIUdldEF0dCBHaXRIdWJPSURDUm9sZS5Bcm4nLFxuICAgICAgJyAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgJyAgICAgIFBvbGljaWVzOicsXG4gICAgICAnICAgICAgICAtIFBvbGljeU5hbWU6IENsb3VkRm9ybWF0aW9uQ2hhbmdlU2V0QWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgICAgICAjIENsb3VkRm9ybWF0aW9uIGNoYW5nZXNldCBvcGVyYXRpb25zJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlQ2hhbmdlU2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpMaXN0Q2hhbmdlU2V0cycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrcycsXG4gICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAjIENESyBib290c3RyYXAgYnVja2V0IGFjY2VzcyAoZm9yIGNoYW5nZXNldCBjcmVhdGlvbiknLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpHZXRPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6UHV0T2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkRlbGV0ZU9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpMaXN0QnVja2V0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgUmVzb3VyY2U6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSonXCIsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czpzMzo6OmNkay0ke0FXUzo6QWNjb3VudElkfS0ke0FXUzo6UmVnaW9ufS0qLyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAjIENESyBib290c3RyYXAgcGFyYW1ldGVyIGFjY2VzcycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXInLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcnNCeVBhdGgnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICFTdWIgJ2Fybjphd3M6c3NtOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9OnBhcmFtZXRlci9jZGstYm9vdHN0cmFwLyonXCIsXG4gICAgICAnICAgICAgICAgICAgICAjIElBTSBQYXNzUm9sZSBmb3IgQ0RLIG9wZXJhdGlvbnMnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBpYW06UGFzc1JvbGUnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICcqJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgICBDb25kaXRpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgICAgICAnaWFtOlBhc3NlZFRvU2VydmljZSc6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJ1wiLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlRHJpZnRSb2xlTGluZXMocm9sZU5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgIyBDbG91ZEZvcm1hdGlvbiBEcmlmdCBEZXRlY3Rpb24gUm9sZSAtIG1pbmltYWwgcGVybWlzc2lvbnMgZm9yIGRyaWZ0IGRldGVjdGlvbiBvcGVyYXRpb25zJyxcbiAgICAgICcgIENka0RyaWZ0Um9sZTonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6Um9sZScsXG4gICAgICAnICAgIERlcGVuZHNPbjogR2l0SHViT0lEQ1JvbGUnLFxuICAgICAgJyAgICBQcm9wZXJ0aWVzOicsXG4gICAgICBcIiAgICAgIFJvbGVOYW1lOiAnXCIgKyByb2xlTmFtZSArIFwiJ1wiLFxuICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgXCIgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgUHJpbmNpcGFsOicsXG4gICAgICAnICAgICAgICAgICAgICBBV1M6ICFHZXRBdHQgR2l0SHViT0lEQ1JvbGUuQXJuJyxcbiAgICAgICcgICAgICAgICAgICBBY3Rpb246IHN0czpBc3N1bWVSb2xlJyxcbiAgICAgICcgICAgICBQb2xpY2llczonLFxuICAgICAgJyAgICAgICAgLSBQb2xpY3lOYW1lOiBDbG91ZEZvcm1hdGlvbkRyaWZ0QWNjZXNzJyxcbiAgICAgICcgICAgICAgICAgUG9saWN5RG9jdW1lbnQ6JyxcbiAgICAgIFwiICAgICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAnICAgICAgICAgICAgICAjIENsb3VkRm9ybWF0aW9uIGRyaWZ0IGRldGVjdGlvbiBvcGVyYXRpb25zJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGV0ZWN0U3RhY2tEcmlmdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrRHJpZnREZXRlY3Rpb25TdGF0dXMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja1Jlc291cmNlRHJpZnRzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkxpc3RTdGFja1Jlc291cmNlcycsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXRlY3RTdGFja1Jlc291cmNlRHJpZnQnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICcqJ1wiLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlT2lkY091dHB1dExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgR2l0SHViT0lEQ1Byb3ZpZGVyQXJuOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ0FSTiBvZiB0aGUgR2l0SHViIE9JREMgcHJvdmlkZXInXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IEdpdEh1Yk9JRENQcm92aWRlci5Bcm4nLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tR2l0SHViT0lEQ1Byb3ZpZGVyQXJuJ1wiLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlT2lkY1JvbGVPdXRwdXRMaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICcgIEdpdEh1Yk9JRENSb2xlQXJuOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ0FSTiBvZiB0aGUgR2l0SHViIE9JREMgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgR2l0SHViT0lEQ1JvbGUuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUdpdEh1Yk9JRENSb2xlQXJuJ1wiLFxuICAgICAgJycsXG4gICAgICAnICBHaXRIdWJPSURDUm9sZU5hbWU6JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnTmFtZSBvZiB0aGUgR2l0SHViIE9JREMgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgR2l0SHViT0lEQ1JvbGUnLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tR2l0SHViT0lEQ1JvbGVOYW1lJ1wiLFxuICAgICAgJycsXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdlbmVyYXRlQ2hhbmdlc2V0T3V0cHV0TGluZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlQXJuOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ0FSTiBvZiB0aGUgQ0RLIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBDZGtDaGFuZ2VzZXRSb2xlLkFybicsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlQXJuJ1wiLFxuICAgICAgJycsXG4gICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlTmFtZTonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhUmVmIENka0NoYW5nZXNldFJvbGUnLFxuICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgIFwiICAgICAgTmFtZTogIVN1YiAnJHtBV1M6OlN0YWNrTmFtZX0tQ2RrQ2hhbmdlc2V0Um9sZU5hbWUnXCIsXG4gICAgICAnJyxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVEcmlmdE91dHB1dExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgJyAgQ2RrRHJpZnRSb2xlQXJuOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ0FSTiBvZiB0aGUgQ0RLIGRyaWZ0IGRldGVjdGlvbiByb2xlJ1wiLFxuICAgICAgJyAgICBWYWx1ZTogIUdldEF0dCBDZGtEcmlmdFJvbGUuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0RyaWZ0Um9sZUFybidcIixcbiAgICAgICcnLFxuICAgICAgJyAgQ2RrRHJpZnRSb2xlTmFtZTonLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdOYW1lIG9mIHRoZSBDREsgZHJpZnQgZGV0ZWN0aW9uIHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhUmVmIENka0RyaWZ0Um9sZScsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtEcmlmdFJvbGVOYW1lJ1wiLFxuICAgIF07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFByb2plbi1pbnRlZ3JhdGVkIFN0YWNrU2V0IGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0UHJvcHMgZXh0ZW5kcyBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvclByb3BzIHtcbiAgLyoqIFByb2plbiBwcm9qZWN0IGluc3RhbmNlICovXG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTtcblxuICAvKiogTmFtZSBvZiB0aGUgU3RhY2tTZXQgKGRlZmF1bHQ6ICdjZGstZGlmZi13b3JrZmxvdy1pYW0tc3RhY2tzZXQnKSAqL1xuICByZWFkb25seSBzdGFja1NldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIE91dHB1dCBwYXRoIGZvciB0aGUgdGVtcGxhdGUgZmlsZSAoZGVmYXVsdDogJ2Nkay1kaWZmLXdvcmtmbG93LXN0YWNrc2V0LXRlbXBsYXRlLnlhbWwnKSAqL1xuICByZWFkb25seSBvdXRwdXRQYXRoPzogc3RyaW5nO1xuXG4gIC8qKiBUYXJnZXQgT1VzIGZvciBkZXBsb3ltZW50IChlLmcuLCBbJ291LXh4eHgteHh4eHh4eHgnLCAnci14eHh4J10pICovXG4gIHJlYWRvbmx5IHRhcmdldE9yZ2FuaXphdGlvbmFsVW5pdElkcz86IHN0cmluZ1tdO1xuXG4gIC8qKiBUYXJnZXQgcmVnaW9ucyBmb3IgZGVwbG95bWVudCAoZS5nLiwgWyd1cy1lYXN0LTEnLCAnZXUtd2VzdC0xJ10pICovXG4gIHJlYWRvbmx5IHJlZ2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKiogQXV0by1kZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24gKi9cbiAgcmVhZG9ubHkgYXV0b0RlcGxveW1lbnQ/OiBTdGFja1NldEF1dG9EZXBsb3ltZW50O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBkZWxlZ2F0ZWQgYWRtaW4gbW9kZSBmb3IgU3RhY2tTZXQgb3BlcmF0aW9ucy5cbiAgICogSWYgdHJ1ZSwgYWRkcyAtLWNhbGwtYXMgREVMRUdBVEVEX0FETUlOIHRvIGNvbW1hbmRzLlxuICAgKiBJZiBmYWxzZSwgYXNzdW1lcyBydW5uaW5nIGZyb20gdGhlIG1hbmFnZW1lbnQgYWNjb3VudC5cbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZWdhdGVkQWRtaW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb2plbiBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGEgQ2xvdWRGb3JtYXRpb24gU3RhY2tTZXQgdGVtcGxhdGUgZm9yIG9yZy13aWRlIGRlcGxveW1lbnQgb2ZcbiAqIEdpdEh1YiBPSURDIHByb3ZpZGVyLCBPSURDIHJvbGUsIGFuZCBDREsgRGlmZi9EcmlmdCBJQU0gcm9sZXMuXG4gKlxuICogVGhpcyBwcm92aWRlcyBhIHNlbGYtY29udGFpbmVkIHBlci1hY2NvdW50IGRlcGxveW1lbnQgd2l0aCBubyByb2xlIGNoYWluaW5nIHJlcXVpcmVkLlxuICpcbiAqIEZvciBub24tUHJvamVuIHByb2plY3RzLCB1c2UgYENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0R2VuZXJhdG9yYCBkaXJlY3RseS5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0IHtcbiAgY29uc3RydWN0b3IocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZVN0YWNrU2V0UHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAnY2RrLWRpZmYtd29ya2Zsb3ctc3RhY2tzZXQtdGVtcGxhdGUueWFtbCc7XG4gICAgY29uc3Qgc3RhY2tTZXROYW1lID0gcHJvcHMuc3RhY2tTZXROYW1lID8/ICdjZGstZGlmZi13b3JrZmxvdy1pYW0tc3RhY2tzZXQnO1xuXG4gICAgLy8gR2VuZXJhdGUgdGVtcGxhdGUgdXNpbmcgdGhlIGdlbmVyYXRvclxuICAgIGNvbnN0IHRlbXBsYXRlID0gQ2RrRGlmZklhbVRlbXBsYXRlU3RhY2tTZXRHZW5lcmF0b3IuZ2VuZXJhdGVUZW1wbGF0ZShwcm9wcyk7XG4gICAgbmV3IFRleHRGaWxlKHByb3BzLnByb2plY3QsIG91dHB1dFBhdGgsIHsgbGluZXM6IHRlbXBsYXRlLnNwbGl0KCdcXG4nKSB9KTtcblxuICAgIC8vIEdlbmVyYXRlIGNvbW1hbmRzIGFuZCBhZGQgYXMgUHJvamVuIHRhc2tzXG4gICAgY29uc3QgY29tbWFuZHMgPSBDZGtEaWZmSWFtVGVtcGxhdGVTdGFja1NldEdlbmVyYXRvci5nZW5lcmF0ZUNvbW1hbmRzKHtcbiAgICAgIHN0YWNrU2V0TmFtZSxcbiAgICAgIHRlbXBsYXRlUGF0aDogb3V0cHV0UGF0aCxcbiAgICAgIHRhcmdldE9yZ2FuaXphdGlvbmFsVW5pdElkczogcHJvcHMudGFyZ2V0T3JnYW5pemF0aW9uYWxVbml0SWRzLFxuICAgICAgcmVnaW9uczogcHJvcHMucmVnaW9ucyxcbiAgICAgIGF1dG9EZXBsb3ltZW50OiBwcm9wcy5hdXRvRGVwbG95bWVudCxcbiAgICAgIGRlbGVnYXRlZEFkbWluOiBwcm9wcy5kZWxlZ2F0ZWRBZG1pbixcbiAgICB9KTtcblxuICAgIGNvbnN0IHRhc2tEZXNjcmlwdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnc3RhY2tzZXQtY3JlYXRlJzogJ0NyZWF0ZSB0aGUgU3RhY2tTZXQgZm9yIG9yZy13aWRlIElBTSByb2xlIGRlcGxveW1lbnQnLFxuICAgICAgJ3N0YWNrc2V0LXVwZGF0ZSc6ICdVcGRhdGUgdGhlIFN0YWNrU2V0IHRlbXBsYXRlJyxcbiAgICAgICdzdGFja3NldC1kZXBsb3ktaW5zdGFuY2VzJzpcbiAgICAgICAgJ0RlcGxveSBzdGFjayBpbnN0YW5jZXMgdG8gdGFyZ2V0IE9VcyBhbmQgcmVnaW9ucyAocGFzcyAtLWRlcGxveW1lbnQtdGFyZ2V0cyBPcmdhbml6YXRpb25hbFVuaXRJZHM9PG91LWlkcz4gdG8gb3ZlcnJpZGUpJyxcbiAgICAgICdzdGFja3NldC1kZWxldGUtaW5zdGFuY2VzJzogJ0RlbGV0ZSBzdGFjayBpbnN0YW5jZXMgZnJvbSB0YXJnZXQgT1VzIGFuZCByZWdpb25zJyxcbiAgICAgICdzdGFja3NldC1kZWxldGUnOiAnRGVsZXRlIHRoZSBTdGFja1NldCAocmVxdWlyZXMgYWxsIGluc3RhbmNlcyB0byBiZSBkZWxldGVkIGZpcnN0KScsXG4gICAgICAnc3RhY2tzZXQtZGVzY3JpYmUnOiAnRGVzY3JpYmUgdGhlIFN0YWNrU2V0IHN0YXR1cyBhbmQgY29uZmlndXJhdGlvbicsXG4gICAgICAnc3RhY2tzZXQtbGlzdC1pbnN0YW5jZXMnOiAnTGlzdCBhbGwgc3RhY2sgaW5zdGFuY2VzIGFuZCB0aGVpciBzdGF0dXNlcycsXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgW3Rhc2tOYW1lLCBjb21tYW5kXSBvZiBPYmplY3QuZW50cmllcyhjb21tYW5kcykpIHtcbiAgICAgIHByb3BzLnByb2plY3QuYWRkVGFzayh0YXNrTmFtZSwge1xuICAgICAgICBkZXNjcmlwdGlvbjogdGFza0Rlc2NyaXB0aW9uc1t0YXNrTmFtZV0sXG4gICAgICAgIHJlY2VpdmVBcmdzOiB0YXNrTmFtZSAhPT0gJ3N0YWNrc2V0LWRlbGV0ZScsXG4gICAgICAgIGV4ZWM6IGNvbW1hbmQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==