@fjall/components-infrastructure 0.1.11 → 0.1.17

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 (75) hide show
  1. package/dist/lib/config/aws/identityCenter.d.ts +3 -4
  2. package/dist/lib/config/aws/identityCenter.js +7 -2
  3. package/dist/lib/config/aws/identityCenterGroupMembership.d.ts +10 -0
  4. package/dist/lib/config/aws/identityCenterGroupMembership.js +96 -0
  5. package/dist/lib/config/aws/identityCenterUser.js +3 -3
  6. package/dist/lib/config/aws/index.d.ts +0 -1
  7. package/dist/lib/config/aws/index.js +1 -2
  8. package/dist/lib/config/aws/ipamPoolId.d.ts +1 -0
  9. package/dist/lib/config/aws/ipamPoolId.js +5 -3
  10. package/dist/lib/config/aws/organisation.d.ts +9 -9
  11. package/dist/lib/config/aws/organisation.js +31 -61
  12. package/dist/lib/config/aws/organisationsAccess.d.ts +10 -0
  13. package/dist/lib/config/aws/organisationsAccess.js +40 -0
  14. package/dist/lib/patterns/aws/basicApp.d.ts +3 -2
  15. package/dist/lib/patterns/aws/basicApp.js +5 -5
  16. package/dist/lib/patterns/aws/buildkite.d.ts +37 -28
  17. package/dist/lib/patterns/aws/buildkite.js +66 -40
  18. package/dist/lib/patterns/aws/freeTierApp.d.ts +2 -1
  19. package/dist/lib/patterns/aws/freeTierApp.js +5 -5
  20. package/dist/lib/patterns/aws/managedAccount.js +5 -4
  21. package/dist/lib/patterns/aws/managedIdentityCenter.d.ts +4 -0
  22. package/dist/lib/patterns/aws/managedIdentityCenter.js +24 -0
  23. package/dist/lib/patterns/aws/managedOrganisation.d.ts +8 -7
  24. package/dist/lib/patterns/aws/managedOrganisation.js +22 -16
  25. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +1 -0
  26. package/dist/lib/patterns/aws/spotInstanceApp.js +4 -4
  27. package/dist/lib/resources/aws/awsStack.d.ts +2 -2
  28. package/dist/lib/resources/aws/awsStack.js +3 -3
  29. package/dist/lib/resources/aws/database/rdsFreeTier.js +2 -2
  30. package/dist/lib/resources/aws/networking/ipamPool.js +21 -18
  31. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -1
  32. package/dist/lib/resources/aws/networking/vpc.js +5 -3
  33. package/dist/lib/resources/aws/secrets/kms.js +2 -2
  34. package/dist/lib/utils/getAccountId.js +5 -4
  35. package/dist/lib/utils/getAsync.d.ts +10 -0
  36. package/dist/lib/utils/getAsync.js +37 -0
  37. package/dist/lib/utils/getCidr.js +4 -4
  38. package/dist/lib/utils/getConfig.d.ts +4 -2
  39. package/dist/lib/utils/getConfig.js +20 -16
  40. package/dist/lib/utils/usersConfig.js +2 -2
  41. package/package.json +28 -24
  42. package/dist/lib/config/aws/delegateHostedZoneRole.d.ts +0 -5
  43. package/dist/lib/config/aws/delegateHostedZoneRole.js +0 -77
  44. package/dist/lib/config/aws/ipamPool.d.ts +0 -5
  45. package/dist/lib/config/aws/ipamPool.js +0 -56
  46. package/dist/lib/config/aws/ipamPoolResourceShare.d.ts +0 -5
  47. package/dist/lib/config/aws/ipamPoolResourceShare.js +0 -42
  48. package/dist/lib/config/aws/ramEnableSharing.d.ts +0 -5
  49. package/dist/lib/config/aws/ramEnableSharing.js +0 -35
  50. package/dist/lib/config/aws/users.d.ts +0 -5
  51. package/dist/lib/config/aws/users.js +0 -126
  52. package/dist/lib/config/fjall/hostedZones/fjall.io.d.ts +0 -10
  53. package/dist/lib/config/fjall/hostedZones/fjall.io.js +0 -25
  54. package/dist/lib/resources/aws/constant/ecr.d.ts +0 -12
  55. package/dist/lib/resources/aws/constant/ecr.js +0 -30
  56. package/dist/lib/resources/aws/constant/vpc.d.ts +0 -26
  57. package/dist/lib/resources/aws/constant/vpc.js +0 -63
  58. package/dist/lib/resources/aws/networking/hostedZone.d.ts +0 -21
  59. package/dist/lib/resources/aws/networking/hostedZone.js +0 -68
  60. package/dist/lib/resources/aws/store/alias.d.ts +0 -5
  61. package/dist/lib/resources/aws/store/alias.js +0 -13
  62. package/dist/lib/resources/aws/store/database.d.ts +0 -18
  63. package/dist/lib/resources/aws/store/database.js +0 -33
  64. package/dist/lib/resources/aws/store/index.d.ts +0 -7
  65. package/dist/lib/resources/aws/store/index.js +0 -24
  66. package/dist/lib/resources/aws/store/kms.d.ts +0 -14
  67. package/dist/lib/resources/aws/store/kms.js +0 -34
  68. package/dist/lib/resources/aws/store/parameter.d.ts +0 -26
  69. package/dist/lib/resources/aws/store/parameter.js +0 -100
  70. package/dist/lib/resources/aws/store/rds.d.ts +0 -25
  71. package/dist/lib/resources/aws/store/rds.js +0 -132
  72. package/dist/lib/resources/aws/store/s3.d.ts +0 -11
  73. package/dist/lib/resources/aws/store/s3.js +0 -43
  74. package/dist/lib/resources/aws/store/secret.d.ts +0 -26
  75. package/dist/lib/resources/aws/store/secret.js +0 -55
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActivateOrganisationsAccess = void 0;
4
+ const customResources = require("aws-cdk-lib/custom-resources");
5
+ const constructs_1 = require("constructs");
6
+ const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
7
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
8
+ class ActivateOrganisationsAccess extends constructs_1.Construct {
9
+ constructor(scope, id, props) {
10
+ super(scope, id);
11
+ new awsCustomResource_1.AwsCustomResource(this, "activateOrganisationsAccess", {
12
+ functionName: "activateOrganisationsAccess",
13
+ onCreate: {
14
+ service: "cloudformation",
15
+ action: "ActivateOrganizationsAccessCommand",
16
+ parameters: {},
17
+ physicalResourceId: customResources.PhysicalResourceId.of("activateOrganisationsAccess")
18
+ },
19
+ resourceType: "Custom::ActivateOrganisationsAccess",
20
+ policy: customResources.AwsCustomResourcePolicy.fromStatements([
21
+ new aws_iam_1.PolicyStatement({
22
+ actions: ["iam:GetRole"],
23
+ resources: [
24
+ "*" // TODO: Figure out what access is required here
25
+ ],
26
+ effect: aws_iam_1.Effect.ALLOW
27
+ }),
28
+ new aws_iam_1.PolicyStatement({
29
+ actions: ["cloudformation:ActivateOrganizationsAccess"],
30
+ resources: [
31
+ `arn:aws:cloudformation:${props.region}:${props.account}:stackset/*`
32
+ ],
33
+ effect: aws_iam_1.Effect.ALLOW
34
+ })
35
+ ])
36
+ });
37
+ }
38
+ }
39
+ exports.ActivateOrganisationsAccess = ActivateOrganisationsAccess;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uc0FjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL29yZ2FuaXNhdGlvbnNBY2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0VBQWdFO0FBQ2hFLDJDQUF1QztBQUV2Qyx1RkFBb0Y7QUFDcEYsaURBQThEO0FBUTlELE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFDeEQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBdUM7UUFFdkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSw2QkFBNkIsRUFBRTtZQUN6RCxZQUFZLEVBQUUsNkJBQTZCO1lBQzNDLFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixNQUFNLEVBQUUsb0NBQW9DO2dCQUM1QyxVQUFVLEVBQUUsRUFBRTtnQkFDZCxrQkFBa0IsRUFBRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUN2RCw2QkFBNkIsQ0FDOUI7YUFDRjtZQUNELFlBQVksRUFBRSxxQ0FBcUM7WUFDbkQsTUFBTSxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUM7Z0JBQzdELElBQUkseUJBQWUsQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUN4QixTQUFTLEVBQUU7d0JBQ1QsR0FBRyxDQUFDLGdEQUFnRDtxQkFDckQ7b0JBQ0QsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztpQkFDckIsQ0FBQztnQkFDRixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLDRDQUE0QyxDQUFDO29CQUN2RCxTQUFTLEVBQUU7d0JBQ1QsMEJBQTBCLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sYUFBYTtxQkFDckU7b0JBQ0QsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztpQkFDckIsQ0FBQzthQUNILENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFyQ0Qsa0VBcUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbnRlcmZhY2UgQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgYWNjb3VudDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2VzcyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2Vzc1wiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwiYWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzXCIsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcImNsb3VkZm9ybWF0aW9uXCIsXG4gICAgICAgIGFjdGlvbjogXCJBY3RpdmF0ZU9yZ2FuaXphdGlvbnNBY2Nlc3NDb21tYW5kXCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL3YzL2xhdGVzdC9jbGllbnQvY2xvdWRmb3JtYXRpb24vY29tbWFuZC9BY3RpdmF0ZU9yZ2FuaXphdGlvbnNBY2Nlc3NDb21tYW5kL1xuICAgICAgICBwYXJhbWV0ZXJzOiB7fSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwiYWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OkFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2Vzc1wiLFxuICAgICAgcG9saWN5OiBjdXN0b21SZXNvdXJjZXMuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJpYW06R2V0Um9sZVwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIFwiKlwiIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2hhdCBhY2Nlc3MgaXMgcmVxdWlyZWQgaGVyZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1dcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcImNsb3VkZm9ybWF0aW9uOkFjdGl2YXRlT3JnYW5pemF0aW9uc0FjY2Vzc1wiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOiR7cHJvcHMucmVnaW9ufToke3Byb3BzLmFjY291bnR9OnN0YWNrc2V0LypgXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPV1xuICAgICAgICB9KVxuICAgICAgXSlcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -15,15 +15,16 @@ export interface BasicAppPropDefaults {
15
15
  containerPort: number;
16
16
  }
17
17
  export interface BasicAppProps {
18
- account?: string;
18
+ accountId?: string;
19
19
  clusterName?: string;
20
20
  containerCommand?: string[];
21
21
  containerEnvironment?: KeyValue;
22
22
  containerPort?: number;
23
23
  containerSecrets?: string[];
24
+ environment: string;
24
25
  owner?: string;
25
26
  parentDomain?: string;
26
- environment: string;
27
+ accountName: string;
27
28
  listenerPort?: number;
28
29
  protocol?: Protocol;
29
30
  region?: string;
@@ -14,7 +14,7 @@ class BasicApp {
14
14
  const stackProps = this.getStackProps(props);
15
15
  this.vpcStack = new awsStack_1.default(`${id}Network`, [], stackProps)
16
16
  .addNetwork(vpc_1.Vpc.build(`${id}Vpc`, {
17
- environment: props.environment,
17
+ accountName: props.accountName,
18
18
  region: props.region,
19
19
  tags: props.tags
20
20
  }))
@@ -61,9 +61,9 @@ class BasicApp {
61
61
  if (!props)
62
62
  return;
63
63
  return {
64
- account: props.account,
64
+ accountId: props.accountId,
65
65
  region: props.region,
66
- environment: props.environment
66
+ accountName: props.accountName
67
67
  };
68
68
  }
69
69
  getProps(id, rawProps) {
@@ -71,7 +71,7 @@ class BasicApp {
71
71
  tags: {
72
72
  "fjall:costAllocation:service": "app",
73
73
  "fjall:costAllocation:environment": rawProps.environment || "production",
74
- "fjall:costAllocation:owner": rawProps.owner || "Engineer"
74
+ "fjall:costAllocation:owner": rawProps.owner || "engineer"
75
75
  },
76
76
  scalingType: ecs_1.ScalingType.CPU,
77
77
  protocol: rawProps.parentDomain ? ecs_1.Protocol.HTTPS : ecs_1.Protocol.HTTP,
@@ -87,4 +87,4 @@ class BasicApp {
87
87
  }
88
88
  exports.BasicApp = BasicApp;
89
89
  exports.default = BasicApp;
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2Jhc2ljQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUF1RTtBQUN2RSw0REFBeUQ7QUFDekQseURBSXlDO0FBQ3pDLG9FQUE2RDtBQUM3RCx5REFBcUQ7QUFDckQseURBQWtEO0FBQ2xELDZDQUEwQztBQXdDMUMsTUFBYSxRQUFRO0lBTW5CLFlBQVksRUFBVSxFQUFFLFFBQXVCO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGtCQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDO2FBQ3pELFVBQVUsQ0FDVCxTQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FBQyxDQUNIO2FBQ0Esb0JBQW9CLENBQUMsYUFBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksa0JBQVEsQ0FDL0IsR0FBRyxFQUFFLFVBQVUsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLFVBQVUsQ0FDWDthQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3RDLFdBQVcsQ0FBQyxrQkFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVoRCx1SEFBdUg7UUFFdkgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQy9DLEdBQUcsRUFBRSxVQUFVLENBQ0osQ0FBQztRQUVkLE1BQU0saUJBQWlCLEdBQW9CLEVBQUUsQ0FBQztRQUM5QyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixLQUFLLE1BQU0sWUFBWSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDakQsaUJBQWlCLENBQUMsWUFBWSxDQUFDLEdBQUcseUJBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkU7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FDeEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRTtZQUMxQixVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDeEQsaUJBQWlCLEVBQUUsaUJBQWlCO1lBQ3BDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxrQkFBUSxDQUM5QixHQUFHLEVBQUUsU0FBUyxFQUNkLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDckQsVUFBVSxDQUNYO2FBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDdEMsV0FBVyxDQUNWLGFBQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRTtZQUM1QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLDRFQUE0RTtZQUM1RSxrQkFBa0IsRUFBRSxVQUFVLENBQUMsV0FBVztZQUMxQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7WUFDaEQsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLGdCQUFnQixFQUFFLGlCQUFpQjtZQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtZQUNuRCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUU7WUFDL0MsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQjtZQUNwRCx1QkFBdUIsRUFBRSxLQUFLLENBQUMsdUJBQXVCO1lBQ3RELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDLENBQ0g7YUFDQSxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLE9BQU87WUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FDTixFQUFVLEVBQ1YsUUFBdUI7UUFFdkIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsSUFBSSxFQUFFO2dCQUNKLDhCQUE4QixFQUFFLEtBQUs7Z0JBQ3JDLGtDQUFrQyxFQUNoQyxRQUFRLENBQUMsV0FBVyxJQUFJLFlBQVk7Z0JBQ3RDLDRCQUE0QixFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksVUFBVTthQUMzRDtZQUNELFdBQVcsRUFBRSxpQkFBVyxDQUFDLEdBQUc7WUFDNUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQVEsQ0FBQyxJQUFJO1lBQ2hFLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUztZQUMzQixXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVM7U0FDNUIsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixHQUFHLFFBQVE7U0FDWixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBL0dELDRCQStHQztBQUNELGtCQUFlLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBd3NTdGFjaywgeyBBd3NTdGFja1Byb3BzIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvYXdzU3RhY2tcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG5pbXBvcnQgRmFyZ2F0ZSwge1xuICBDb250YWluZXJTZWNyZXQsXG4gIFNjYWxpbmdUeXBlLFxuICBQcm90b2NvbFxufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQgeyBFY3IgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG5pbXBvcnQgeyBTZWNyZXRWYWx1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSU1hbmFnZWRQb2xpY3ksIFBvbGljeURvY3VtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbi8qKlxuICogSW50ZXJzZWN0ZWQgd2l0aCBCYXNpY0FwcFByb3BzIGluIHRoZSBnZXRQcm9wcyBtZXRob2QuIFRoaXMgYWxsb3dzIHRoZSBCYXNpY0FwcCBjb25zdHJ1Y3RcbiAqIHRvIHRyZWF0IHRoZXNlIGFzIHJlcXVpcmVkIHByb3BlcnRpZXMgYW5kIGF2b2lkIGNvbnN0YW50IG51bGwgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBcHBQcm9wRGVmYXVsdHMge1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgY2x1c3Rlck5hbWU6IHN0cmluZztcbiAgcHJvdG9jb2w6IFByb3RvY29sO1xuICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGU7XG4gIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BzIHtcbiAgYWNjb3VudD86IHN0cmluZztcbiAgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lckNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgY29udGFpbmVyRW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcbiAgY29udGFpbmVyUG9ydD86IG51bWJlcjtcbiAgY29udGFpbmVyU2VjcmV0cz86IHN0cmluZ1tdO1xuICAvLyBUaGUgdGVhbS9kb21haW4vYnVzaW5lc3MtdW5pdCB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGlzIHNlcnZpY2VcbiAgb3duZXI/OiBzdHJpbmc7XG4gIHBhcmVudERvbWFpbj86IHN0cmluZzsgLy8gRml4IHRvIG1ha2UgYSBkZXBlbmRlbmN5IG9mIHByb3RvY29sXG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIGxpc3RlbmVyUG9ydD86IG51bWJlcjtcbiAgcHJvdG9jb2w/OiBQcm90b2NvbDtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBzY2FsaW5nVHlwZT86IFNjYWxpbmdUeXBlO1xuICBzZXJ2aWNlTmFtZT86IHN0cmluZztcbiAgdGFza1JvbGVJbmxpbmVQb2xpY2llcz86IHtcbiAgICBbbmFtZTogc3RyaW5nXTogUG9saWN5RG9jdW1lbnQ7XG4gIH07XG4gIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzPzogSU1hbmFnZWRQb2xpY3lbXTtcbiAgdGFncz86IEtleVZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgQmFzaWNBcHAge1xuICBwcml2YXRlIHZwY1N0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBkYXRhYmFzZVN0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBzZWNyZXRTdGFjazogQXdzU3RhY2s7XG4gIHByaXZhdGUgY29tcHV0ZVN0YWNrOiBBd3NTdGFjaztcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCByYXdQcm9wczogQmFzaWNBcHBQcm9wcykge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhpZCwgcmF3UHJvcHMpO1xuICAgIGNvbnN0IHN0YWNrUHJvcHMgPSB0aGlzLmdldFN0YWNrUHJvcHMocHJvcHMpO1xuXG4gICAgdGhpcy52cGNTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1OZXR3b3JrYCwgW10sIHN0YWNrUHJvcHMpXG4gICAgICAuYWRkTmV0d29yayhcbiAgICAgICAgVnBjLmJ1aWxkKGAke2lkfVZwY2AsIHtcbiAgICAgICAgICBlbnZpcm9ubWVudDogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICAgICAgdGFnczogcHJvcHMudGFnc1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLmFkZENvbnRhaW5lclJlZ2lzdHJ5KEVjci5idWlsZChgJHtpZH1FY3JgKSk7XG5cbiAgICB0aGlzLmRhdGFiYXNlU3RhY2sgPSBuZXcgQXdzU3RhY2soXG4gICAgICBgJHtpZH1EYXRhYmFzZWAsXG4gICAgICB0aGlzLnZwY1N0YWNrLFxuICAgICAgc3RhY2tQcm9wc1xuICAgIClcbiAgICAgIC5hZGROZXR3b3JrKHRoaXMudnBjU3RhY2suZ2V0TmV0d29yaygpKVxuICAgICAgLmFkZFJlc291cmNlKERhdGFiYXNlLmJ1aWxkKGAke2lkfURhdGFiYXNlYCkpO1xuXG4gICAgLy9UT0RPOiB2YWxpZGF0ZSBpZCBkb2VzIG5vdCBjb250YWluIHNwZWNpYWwgY2hhcmFjdGVycyAobm8gaHlwaGVucyAtIG5vIHNsYXNoZXMgZXRjKSBkYXRhYmFzZSBpbnN0YW5jZXMgd29uJ3QgYWxsb3cgaXRcblxuICAgIGNvbnN0IGRiUmVzb3VyY2UgPSB0aGlzLmRhdGFiYXNlU3RhY2suZ2V0UmVzb3VyY2UoXG4gICAgICBgJHtpZH1EYXRhYmFzZWBcbiAgICApIGFzIERhdGFiYXNlO1xuXG4gICAgY29uc3Qgc2VjcmV0T2JqZWN0VmFsdWU6IENvbnRhaW5lclNlY3JldCA9IHt9O1xuICAgIGlmIChwcm9wcy5jb250YWluZXJTZWNyZXRzKSB7XG4gICAgICBmb3IgKGNvbnN0IHNlY3JldE9iamVjdCBvZiBwcm9wcy5jb250YWluZXJTZWNyZXRzKSB7XG4gICAgICAgIHNlY3JldE9iamVjdFZhbHVlW3NlY3JldE9iamVjdF0gPSBTZWNyZXRWYWx1ZS51bnNhZmVQbGFpblRleHQoXCJcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZWNyZXRTdGFjayA9IG5ldyBBd3NTdGFjayhgJHtpZH1TZWNyZXRgLCBbXSwgc3RhY2tQcm9wcykuYWRkUmVzb3VyY2UoXG4gICAgICBTZWNyZXQuYnVpbGQoYCR7aWR9U2VjcmV0YCwge1xuICAgICAgICBzZWNyZXROYW1lOiBgLyR7cHJvcHMuY2x1c3Rlck5hbWV9LyR7cHJvcHMuc2VydmljZU5hbWV9YCxcbiAgICAgICAgc2VjcmV0T2JqZWN0VmFsdWU6IHNlY3JldE9iamVjdFZhbHVlLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmNvbXB1dGVTdGFjayA9IG5ldyBBd3NTdGFjayhcbiAgICAgIGAke2lkfUNvbXB1dGVgLFxuICAgICAgW3RoaXMudnBjU3RhY2ssIHRoaXMuZGF0YWJhc2VTdGFjaywgdGhpcy5zZWNyZXRTdGFja10sXG4gICAgICBzdGFja1Byb3BzXG4gICAgKVxuICAgICAgLmFkZE5ldHdvcmsodGhpcy52cGNTdGFjay5nZXROZXR3b3JrKCkpXG4gICAgICAuYWRkUmVzb3VyY2UoXG4gICAgICAgIEZhcmdhdGUuYnVpbGQoYCR7aWR9RmFyZ2F0ZWAsIHtcbiAgICAgICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3BzLnByb3RvY29sLFxuICAgICAgICAgIC8vVE9ETzogVGhpcyBzaG91bGQgd29yayB2aWEgbGluZSAxMjYsIGJ1dCBkb2Vzbid0IHdvcmsgKGF0IGxlYXN0IG9uIHVwZGF0ZSlcbiAgICAgICAgICBkYXRhYmFzZUNvbm5lY3Rpb246IGRiUmVzb3VyY2UuY29ubmVjdGlvbnMsXG4gICAgICAgICAgY29udGFpbmVyQ29tbWFuZDogcHJvcHMuY29udGFpbmVyQ29tbWFuZCxcbiAgICAgICAgICBjb250YWluZXJFbnZpcm9ubWVudDogcHJvcHMuY29udGFpbmVyRW52aXJvbm1lbnQsXG4gICAgICAgICAgY29udGFpbmVyUG9ydDogcHJvcHMuY29udGFpbmVyUG9ydCxcbiAgICAgICAgICBjb250YWluZXJTZWNyZXRzOiBzZWNyZXRPYmplY3RWYWx1ZSxcbiAgICAgICAgICBlY3JSZXBvc2l0b3J5OiB0aGlzLnZwY1N0YWNrLmdldENvbnRhaW5lclJlZ2lzdHJ5KCksXG4gICAgICAgICAgcGFyZW50RG9tYWluOiBwcm9wcy5wYXJlbnREb21haW4/LnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgbGlzdGVuZXJQb3J0OiBwcm9wcy5saXN0ZW5lclBvcnQsXG4gICAgICAgICAgc2NhbGluZ1R5cGU6IHByb3BzLnNjYWxpbmdUeXBlLFxuICAgICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICB0YXNrUm9sZUlubGluZVBvbGljaWVzOiBwcm9wcy50YXNrUm9sZUlubGluZVBvbGljaWVzLFxuICAgICAgICAgIHRhc2tSb2xlTWFuYWdlZFBvbGljaWVzOiBwcm9wcy50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuY29ubmVjdChgJHtpZH1GYXJnYXRlYCwgYCR7aWR9RGF0YWJhc2VgLCA1NDMyKTtcbiAgfVxuXG4gIGdldFN0YWNrUHJvcHMocHJvcHM6IEJhc2ljQXBwUHJvcHMpOiBBd3NTdGFja1Byb3BzIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXByb3BzKSByZXR1cm47XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudDogcHJvcHMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfTtcbiAgfVxuXG4gIGdldFByb3BzKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcmF3UHJvcHM6IEJhc2ljQXBwUHJvcHNcbiAgKTogQmFzaWNBcHBQcm9wcyAmIEJhc2ljQXBwUHJvcERlZmF1bHRzIHtcbiAgICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICB0YWdzOiB7XG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImFwcFwiLFxuICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6XG4gICAgICAgICAgcmF3UHJvcHMuZW52aXJvbm1lbnQgfHwgXCJwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcmF3UHJvcHMub3duZXIgfHwgXCJFbmdpbmVlclwiXG4gICAgICB9LFxuICAgICAgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlLkNQVSxcbiAgICAgIHByb3RvY29sOiByYXdQcm9wcy5wYXJlbnREb21haW4gPyBQcm90b2NvbC5IVFRQUyA6IFByb3RvY29sLkhUVFAsXG4gICAgICBjb250YWluZXJQb3J0OiAzMDAwLFxuICAgICAgc2VydmljZU5hbWU6IGAke2lkfVNlcnZpY2VgLFxuICAgICAgY2x1c3Rlck5hbWU6IGAke2lkfUNsdXN0ZXJgXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0UHJvcHMsXG4gICAgICAuLi5yYXdQcm9wc1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEJhc2ljQXBwO1xuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNBcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2Jhc2ljQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUF1RTtBQUN2RSw0REFBeUQ7QUFDekQseURBSXlDO0FBQ3pDLG9FQUE2RDtBQUM3RCx5REFBcUQ7QUFDckQseURBQWtEO0FBQ2xELDZDQUEwQztBQXlDMUMsTUFBYSxRQUFRO0lBTW5CLFlBQVksRUFBVSxFQUFFLFFBQXVCO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGtCQUFRLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDO2FBQ3pELFVBQVUsQ0FDVCxTQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDcEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FBQyxDQUNIO2FBQ0Esb0JBQW9CLENBQUMsYUFBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksa0JBQVEsQ0FDL0IsR0FBRyxFQUFFLFVBQVUsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLFVBQVUsQ0FDWDthQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3RDLFdBQVcsQ0FBQyxrQkFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFD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RDtZQUNELFdBQVcsRUFBRSxpQkFBVyxDQUFDLEdBQUc7WUFDNUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGNBQVEsQ0FBQyxJQUFJO1lBQ2hFLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUztZQUMzQixXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVM7U0FDNUIsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixHQUFHLFFBQVE7U0FDWixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBL0dELDRCQStHQztBQUNELGtCQUFlLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBd3NTdGFjaywgeyBBd3NTdGFja1Byb3BzIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvYXdzU3RhY2tcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG5pbXBvcnQgRmFyZ2F0ZSwge1xuICBDb250YWluZXJTZWNyZXQsXG4gIFNjYWxpbmdUeXBlLFxuICBQcm90b2NvbFxufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IERhdGFiYXNlIGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2RhdGFiYXNlL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQgeyBFY3IgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG5pbXBvcnQgeyBTZWNyZXRWYWx1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSU1hbmFnZWRQb2xpY3ksIFBvbGljeURvY3VtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbi8qKlxuICogSW50ZXJzZWN0ZWQgd2l0aCBCYXNpY0FwcFByb3BzIGluIHRoZSBnZXRQcm9wcyBtZXRob2QuIFRoaXMgYWxsb3dzIHRoZSBCYXNpY0FwcCBjb25zdHJ1Y3RcbiAqIHRvIHRyZWF0IHRoZXNlIGFzIHJlcXVpcmVkIHByb3BlcnRpZXMgYW5kIGF2b2lkIGNvbnN0YW50IG51bGwgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaWNBcHBQcm9wRGVmYXVsdHMge1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgY2x1c3Rlck5hbWU6IHN0cmluZztcbiAgcHJvdG9jb2w6IFByb3RvY29sO1xuICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGU7XG4gIGNvbnRhaW5lclBvcnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNpY0FwcFByb3BzIHtcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICBjbHVzdGVyTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyQ29tbWFuZD86IHN0cmluZ1tdO1xuICBjb250YWluZXJFbnZpcm9ubWVudD86IEtleVZhbHVlO1xuICBjb250YWluZXJQb3J0PzogbnVtYmVyO1xuICBjb250YWluZXJTZWNyZXRzPzogc3RyaW5nW107XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIC8vIFRoZSB0ZWFtL2RvbWFpbi9idXNpbmVzcy11bml0IHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMgc2VydmljZVxuICBvd25lcj86IHN0cmluZztcbiAgcGFyZW50RG9tYWluPzogc3RyaW5nOyAvLyBGaXggdG8gbWFrZSBhIGRlcGVuZGVuY3kgb2YgcHJvdG9jb2xcbiAgYWNjb3VudE5hbWU6IHN0cmluZztcbiAgbGlzdGVuZXJQb3J0PzogbnVtYmVyO1xuICBwcm90b2NvbD86IFByb3RvY29sO1xuICByZWdpb24/OiBzdHJpbmc7XG4gIHNjYWxpbmdUeXBlPzogU2NhbGluZ1R5cGU7XG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xuICB0YXNrUm9sZUlubGluZVBvbGljaWVzPzoge1xuICAgIFtuYW1lOiBzdHJpbmddOiBQb2xpY3lEb2N1bWVudDtcbiAgfTtcbiAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM/OiBJTWFuYWdlZFBvbGljeVtdO1xuICB0YWdzPzogS2V5VmFsdWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNpY0FwcCB7XG4gIHByaXZhdGUgdnBjU3RhY2s6IEF3c1N0YWNrO1xuICBwcml2YXRlIGRhdGFiYXNlU3RhY2s6IEF3c1N0YWNrO1xuICBwcml2YXRlIHNlY3JldFN0YWNrOiBBd3NTdGFjaztcbiAgcHJpdmF0ZSBjb21wdXRlU3RhY2s6IEF3c1N0YWNrO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHJhd1Byb3BzOiBCYXNpY0FwcFByb3BzKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKGlkLCByYXdQcm9wcyk7XG4gICAgY29uc3Qgc3RhY2tQcm9wcyA9IHRoaXMuZ2V0U3RhY2tQcm9wcyhwcm9wcyk7XG5cbiAgICB0aGlzLnZwY1N0YWNrID0gbmV3IEF3c1N0YWNrKGAke2lkfU5ldHdvcmtgLCBbXSwgc3RhY2tQcm9wcylcbiAgICAgIC5hZGROZXR3b3JrKFxuICAgICAgICBWcGMuYnVpbGQoYCR7aWR9VnBjYCwge1xuICAgICAgICAgIGFjY291bnROYW1lOiBwcm9wcy5hY2NvdW50TmFtZSxcbiAgICAgICAgICByZWdpb246IHByb3BzLnJlZ2lvbixcbiAgICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuYWRkQ29udGFpbmVyUmVnaXN0cnkoRWNyLmJ1aWxkKGAke2lkfUVjcmApKTtcblxuICAgIHRoaXMuZGF0YWJhc2VTdGFjayA9IG5ldyBBd3NTdGFjayhcbiAgICAgIGAke2lkfURhdGFiYXNlYCxcbiAgICAgIHRoaXMudnBjU3RhY2ssXG4gICAgICBzdGFja1Byb3BzXG4gICAgKVxuICAgICAgLmFkZE5ldHdvcmsodGhpcy52cGNTdGFjay5nZXROZXR3b3JrKCkpXG4gICAgICAuYWRkUmVzb3VyY2UoRGF0YWJhc2UuYnVpbGQoYCR7aWR9RGF0YWJhc2VgKSk7XG5cbiAgICAvL1RPRE86IHZhbGlkYXRlIGlkIGRvZXMgbm90IGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzIChubyBoeXBoZW5zIC0gbm8gc2xhc2hlcyBldGMpIGRhdGFiYXNlIGluc3RhbmNlcyB3b24ndCBhbGxvdyBpdFxuXG4gICAgY29uc3QgZGJSZXNvdXJjZSA9IHRoaXMuZGF0YWJhc2VTdGFjay5nZXRSZXNvdXJjZShcbiAgICAgIGAke2lkfURhdGFiYXNlYFxuICAgICkgYXMgRGF0YWJhc2U7XG5cbiAgICBjb25zdCBzZWNyZXRPYmplY3RWYWx1ZTogQ29udGFpbmVyU2VjcmV0ID0ge307XG4gICAgaWYgKHByb3BzLmNvbnRhaW5lclNlY3JldHMpIHtcbiAgICAgIGZvciAoY29uc3Qgc2VjcmV0T2JqZWN0IG9mIHByb3BzLmNvbnRhaW5lclNlY3JldHMpIHtcbiAgICAgICAgc2VjcmV0T2JqZWN0VmFsdWVbc2VjcmV0T2JqZWN0XSA9IFNlY3JldFZhbHVlLnVuc2FmZVBsYWluVGV4dChcIlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlY3JldFN0YWNrID0gbmV3IEF3c1N0YWNrKGAke2lkfVNlY3JldGAsIFtdLCBzdGFja1Byb3BzKS5hZGRSZXNvdXJjZShcbiAgICAgIFNlY3JldC5idWlsZChgJHtpZH1TZWNyZXRgLCB7XG4gICAgICAgIHNlY3JldE5hbWU6IGAvJHtwcm9wcy5jbHVzdGVyTmFtZX0vJHtwcm9wcy5zZXJ2aWNlTmFtZX1gLFxuICAgICAgICBzZWNyZXRPYmplY3RWYWx1ZTogc2VjcmV0T2JqZWN0VmFsdWUsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuY29tcHV0ZVN0YWNrID0gbmV3IEF3c1N0YWNrKFxuICAgICAgYCR7aWR9Q29tcHV0ZWAsXG4gICAgICBbdGhpcy52cGNTdGFjaywgdGhpcy5kYXRhYmFzZVN0YWNrLCB0aGlzLnNlY3JldFN0YWNrXSxcbiAgICAgIHN0YWNrUHJvcHNcbiAgICApXG4gICAgICAuYWRkTmV0d29yayh0aGlzLnZwY1N0YWNrLmdldE5ldHdvcmsoKSlcbiAgICAgIC5hZGRSZXNvdXJjZShcbiAgICAgICAgRmFyZ2F0ZS5idWlsZChgJHtpZH1GYXJnYXRlYCwge1xuICAgICAgICAgIGNsdXN0ZXJOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcbiAgICAgICAgICBwcm90b2NvbDogcHJvcHMucHJvdG9jb2wsXG4gICAgICAgICAgLy9UT0RPOiBUaGlzIHNob3VsZCB3b3JrIHZpYSBsaW5lIDEyNiwgYnV0IGRvZXNuJ3Qgd29yayAoYXQgbGVhc3Qgb24gdXBkYXRlKVxuICAgICAgICAgIGRhdGFiYXNlQ29ubmVjdGlvbjogZGJSZXNvdXJjZS5jb25uZWN0aW9ucyxcbiAgICAgICAgICBjb250YWluZXJDb21tYW5kOiBwcm9wcy5jb250YWluZXJDb21tYW5kLFxuICAgICAgICAgIGNvbnRhaW5lckVudmlyb25tZW50OiBwcm9wcy5jb250YWluZXJFbnZpcm9ubWVudCxcbiAgICAgICAgICBjb250YWluZXJQb3J0OiBwcm9wcy5jb250YWluZXJQb3J0LFxuICAgICAgICAgIGNvbnRhaW5lclNlY3JldHM6IHNlY3JldE9iamVjdFZhbHVlLFxuICAgICAgICAgIGVjclJlcG9zaXRvcnk6IHRoaXMudnBjU3RhY2suZ2V0Q29udGFpbmVyUmVnaXN0cnkoKSxcbiAgICAgICAgICBwYXJlbnREb21haW46IHByb3BzLnBhcmVudERvbWFpbj8udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBsaXN0ZW5lclBvcnQ6IHByb3BzLmxpc3RlbmVyUG9ydCxcbiAgICAgICAgICBzY2FsaW5nVHlwZTogcHJvcHMuc2NhbGluZ1R5cGUsXG4gICAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHByb3BzLnRhc2tSb2xlSW5saW5lUG9saWNpZXMsXG4gICAgICAgICAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM6IHByb3BzLnRhc2tSb2xlTWFuYWdlZFBvbGljaWVzLFxuICAgICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5jb25uZWN0KGAke2lkfUZhcmdhdGVgLCBgJHtpZH1EYXRhYmFzZWAsIDU0MzIpO1xuICB9XG5cbiAgZ2V0U3RhY2tQcm9wcyhwcm9wczogQmFzaWNBcHBQcm9wcyk6IEF3c1N0YWNrUHJvcHMgfCB1bmRlZmluZWQge1xuICAgIGlmICghcHJvcHMpIHJldHVybjtcblxuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICAgIHJlZ2lvbjogcHJvcHMucmVnaW9uLFxuICAgICAgYWNjb3VudE5hbWU6IHByb3BzLmFjY291bnROYW1lXG4gICAgfTtcbiAgfVxuXG4gIGdldFByb3BzKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcmF3UHJvcHM6IEJhc2ljQXBwUHJvcHNcbiAgKTogQmFzaWNBcHBQcm9wcyAmIEJhc2ljQXBwUHJvcERlZmF1bHRzIHtcbiAgICBjb25zdCBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICB0YWdzOiB7XG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImFwcFwiLFxuICAgICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6XG4gICAgICAgICAgcmF3UHJvcHMuZW52aXJvbm1lbnQgfHwgXCJwcm9kdWN0aW9uXCIsXG4gICAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcmF3UHJvcHMub3duZXIgfHwgXCJlbmdpbmVlclwiXG4gICAgICB9LFxuICAgICAgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlLkNQVSxcbiAgICAgIHByb3RvY29sOiByYXdQcm9wcy5wYXJlbnREb21haW4gPyBQcm90b2NvbC5IVFRQUyA6IFByb3RvY29sLkhUVFAsXG4gICAgICBjb250YWluZXJQb3J0OiAzMDAwLFxuICAgICAgc2VydmljZU5hbWU6IGAke2lkfVNlcnZpY2VgLFxuICAgICAgY2x1c3Rlck5hbWU6IGAke2lkfUNsdXN0ZXJgXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0UHJvcHMsXG4gICAgICAuLi5yYXdQcm9wc1xuICAgIH07XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEJhc2ljQXBwO1xuIl19
@@ -8,42 +8,51 @@ declare enum agentRelease {
8
8
  EDGE = "edge"
9
9
  }
10
10
  export interface BuildkiteProps extends StackProps {
11
- environment: string;
11
+ accountName: string;
12
12
  elasticStackVersion: string;
13
- agentScalerVersion: string;
14
- queueName: string;
15
- spotCapacityPercentage: number;
13
+ keyName: string;
14
+ buildkiteAgentRelease: agentRelease;
15
+ buildkiteAgentTags: string;
16
+ buildkiteAgentTimestampLines: boolean;
17
+ buildkiteAgentExperiments: string;
18
+ buildkiteAgentScalerVersion: string;
19
+ logRetentionDays: number;
20
+ buildkiteAgentTracingBackend: "" | "datadog" | "opentelemetry";
21
+ buildkiteAgentCancelGracePeriod: number;
22
+ buildkiteTerminateInstanceAfterJob: boolean;
23
+ buildkiteAdditionalSudoPermissions: string;
24
+ buildkiteQueue: string;
25
+ agentsPerInstance: number;
26
+ bootstrapScriptUrl: string;
27
+ agentEnvFileUrl: string;
28
+ authorizedUsersUrl: string;
16
29
  agentInstanceType: InstanceType;
17
30
  agentVolumeSize: number;
18
31
  agentMinInstances: number;
19
32
  agentMaxInstances: number;
20
- instanceStorage: boolean;
21
- dockerUserNamespaceRemap: boolean;
22
- dockerExperimental: boolean;
23
- scaleInPeriod: number;
24
- agentsPerInstance: number;
25
- agentTags: string;
26
- timestampLines: boolean;
27
- experiments: string;
28
- tracingBackend: string;
29
- agentRelease: agentRelease;
30
- gitMirrors: boolean;
31
- bootstrapScript: string;
32
- envFileUrl: string;
33
- authorizedUsersUrl: string;
34
- ecrAccessPolicy: string;
35
- instanceTerminationAfterJob: boolean;
36
- sudoPermissions: string;
37
- tags: KeyValue;
38
- secretsPluginEnabled: boolean;
39
- ecrPluginEnabled: boolean;
40
- dockerLoginPluginEnabled: boolean;
33
+ scalerEventSchedulePeriod: string;
34
+ scalerMinPollInterval: string;
35
+ spotCapacityPercentage: number;
41
36
  scaleOutFactor: string;
37
+ ecrAccessPolicy: string;
38
+ scaleInIdlePeriod: number;
42
39
  scaleOutWaitingForJobs: boolean;
43
- eventScheduledPeriod: string;
44
- minPollInterval: string;
40
+ dockerNetworkingProtocol: "ipv4" | "dualstack";
41
+ enableSecretsPlugin: boolean;
42
+ enableEcrPlugin: boolean;
43
+ enableDockerLoginPlugin: boolean;
44
+ enableDockerUserNamespaceRemap: boolean;
45
+ enableDockerExperimental: boolean;
46
+ enableInstanceStorage: boolean;
47
+ mountTmpfsAtTmp: boolean;
48
+ buildkiteAgentEnableGitMirrors: boolean;
49
+ pipelineSigningKMSKey: string;
50
+ pipelineSigningVerificationFailureBehavior: "block" | "warn";
51
+ tags: KeyValue;
52
+ environment: string;
53
+ owner?: string;
45
54
  }
46
- export declare const BuildkiteDefaultProps: Pick<BuildkiteProps, "elasticStackVersion" | "agentScalerVersion" | "spotCapacityPercentage" | "agentInstanceType" | "agentVolumeSize" | "agentMinInstances" | "agentMaxInstances" | "instanceStorage" | "dockerUserNamespaceRemap" | "dockerExperimental" | "scaleInPeriod" | "agentsPerInstance" | "agentTags" | "timestampLines" | "experiments" | "tracingBackend" | "agentRelease" | "gitMirrors" | "bootstrapScript" | "envFileUrl" | "authorizedUsersUrl" | "ecrAccessPolicy" | "instanceTerminationAfterJob" | "sudoPermissions" | "secretsPluginEnabled" | "ecrPluginEnabled" | "dockerLoginPluginEnabled" | "scaleOutFactor" | "scaleOutWaitingForJobs" | "eventScheduledPeriod" | "minPollInterval">;
55
+ export declare const BuildkiteDefaultProps: Pick<BuildkiteProps, "elasticStackVersion" | "keyName" | "buildkiteAgentRelease" | "buildkiteAgentTags" | "buildkiteAgentTimestampLines" | "buildkiteAgentExperiments" | "buildkiteAgentScalerVersion" | "logRetentionDays" | "buildkiteAgentTracingBackend" | "buildkiteAgentCancelGracePeriod" | "buildkiteTerminateInstanceAfterJob" | "buildkiteAdditionalSudoPermissions" | "buildkiteQueue" | "agentsPerInstance" | "bootstrapScriptUrl" | "agentEnvFileUrl" | "authorizedUsersUrl" | "agentInstanceType" | "agentVolumeSize" | "agentMinInstances" | "agentMaxInstances" | "scalerEventSchedulePeriod" | "scalerMinPollInterval" | "spotCapacityPercentage" | "scaleOutFactor" | "scaleInIdlePeriod" | "scaleOutWaitingForJobs" | "ecrAccessPolicy" | "dockerNetworkingProtocol" | "enableSecretsPlugin" | "enableEcrPlugin" | "enableDockerLoginPlugin" | "enableDockerUserNamespaceRemap" | "enableDockerExperimental" | "enableInstanceStorage" | "mountTmpfsAtTmp" | "buildkiteAgentEnableGitMirrors" | "pipelineSigningKMSKey" | "pipelineSigningVerificationFailureBehavior" | "environment" | "owner">;
47
56
  export declare class Buildkite extends Stack {
48
57
  constructor(scope: Construct, id: string, props: BuildkiteProps);
49
58
  }
@@ -21,44 +21,64 @@ var agentRelease;
21
21
  agentRelease["EDGE"] = "edge";
22
22
  })(agentRelease || (agentRelease = {}));
23
23
  exports.BuildkiteDefaultProps = {
24
- elasticStackVersion: "v6.7.1",
25
- agentScalerVersion: "1.6.0",
26
- agentInstanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.M4, aws_ec2_1.InstanceSize.LARGE),
27
- agentVolumeSize: 250,
24
+ // Buildkite Agent Configuration
25
+ elasticStackVersion: "v6.30.0",
26
+ keyName: "",
27
+ buildkiteAgentRelease: agentRelease.STABLE,
28
+ buildkiteAgentTags: "",
29
+ buildkiteAgentTimestampLines: false,
30
+ buildkiteAgentExperiments: "",
31
+ buildkiteAgentScalerVersion: "1.8.0",
32
+ logRetentionDays: 1,
33
+ buildkiteAgentTracingBackend: "",
34
+ buildkiteAgentCancelGracePeriod: 60,
35
+ buildkiteTerminateInstanceAfterJob: false,
36
+ buildkiteAdditionalSudoPermissions: "",
37
+ buildkiteQueue: "default",
38
+ agentsPerInstance: 1,
39
+ bootstrapScriptUrl: "",
40
+ agentEnvFileUrl: "",
41
+ authorizedUsersUrl: "",
42
+ // Infrastructure
43
+ agentInstanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.M5, aws_ec2_1.InstanceSize.LARGE),
28
44
  agentMinInstances: 0,
29
45
  agentMaxInstances: 10,
30
- agentsPerInstance: 1,
31
- agentRelease: agentRelease.STABLE,
46
+ agentVolumeSize: 250,
47
+ scalerEventSchedulePeriod: "1 minute",
48
+ scalerMinPollInterval: "10s",
32
49
  spotCapacityPercentage: 75,
33
- scaleInPeriod: 600,
34
- instanceStorage: false,
35
- instanceTerminationAfterJob: false,
36
- dockerUserNamespaceRemap: true,
37
- dockerExperimental: false,
38
- secretsPluginEnabled: true,
39
- ecrPluginEnabled: true,
40
- dockerLoginPluginEnabled: true,
41
- timestampLines: false,
42
- gitMirrors: false,
43
50
  scaleOutFactor: "1.0",
51
+ scaleInIdlePeriod: 600,
44
52
  scaleOutWaitingForJobs: false,
45
- eventScheduledPeriod: "1 minute",
46
- minPollInterval: "10s",
47
- agentTags: "",
48
- experiments: "",
49
- tracingBackend: "",
50
- bootstrapScript: "",
51
- envFileUrl: "",
52
- authorizedUsersUrl: "",
53
53
  ecrAccessPolicy: "",
54
- sudoPermissions: ""
54
+ dockerNetworkingProtocol: "ipv4",
55
+ enableSecretsPlugin: true,
56
+ enableEcrPlugin: true,
57
+ enableDockerLoginPlugin: true,
58
+ enableDockerUserNamespaceRemap: true,
59
+ enableDockerExperimental: false,
60
+ enableInstanceStorage: false,
61
+ mountTmpfsAtTmp: true,
62
+ buildkiteAgentEnableGitMirrors: false,
63
+ pipelineSigningKMSKey: "",
64
+ pipelineSigningVerificationFailureBehavior: "block",
65
+ // Tags
66
+ environment: "platform",
67
+ owner: "engineer"
55
68
  };
56
69
  class Buildkite extends aws_cdk_lib_1.Stack {
57
70
  constructor(scope, id, props) {
58
71
  super(scope, id, props);
72
+ // TODO: Make this immutable and enforce the tags being set
73
+ const tags = {
74
+ ...props.tags,
75
+ "fjall:costAllocation:environment": props.environment || "platform",
76
+ "fjall:costAllocation:service": "buildkite",
77
+ "fjall:costAllocation:owner": props.owner || "engineer" // TODO: this will have to be the platform account name?
78
+ };
59
79
  // VPC
60
80
  const vpc = new vpc_1.Vpc(this, "buildkite", {
61
- environment: props.environment,
81
+ accountName: props.accountName,
62
82
  tags: props.tags,
63
83
  subnetConfiguration: [
64
84
  {
@@ -88,7 +108,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
88
108
  aliasName: `buildkiteAgentToken`,
89
109
  value: process.env.BUILDKITE_AGENT_TOKEN,
90
110
  overwrite: process.env.BUILDKITE_AGENT_TOKEN ? true : false,
91
- tags: props.tags,
111
+ tags: tags,
92
112
  accountId: this.account,
93
113
  region: this.region
94
114
  });
@@ -211,18 +231,18 @@ class Buildkite extends aws_cdk_lib_1.Stack {
211
231
  const mountStorageUserData = aws_ec2_1.UserData.forLinux({
212
232
  shebang: "#!/bin/bash -v"
213
233
  });
214
- mountStorageUserData.addCommands(`BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.instanceStorage}' \\`, "/usr/local/bin/bk-mount-instance-storage.sh");
234
+ mountStorageUserData.addCommands(`BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.enableInstanceStorage}' \\`, `BUILDKITE_MOUNT_TMPFS_AT_TMP='${props.mountTmpfsAtTmp}' \\`, "/usr/local/bin/bk-mount-instance-storage.sh");
215
235
  multipartUserData.addPart(aws_ec2_1.MultipartBody.fromUserData(mountStorageUserData, "text/x-shellscript; charset='us-ascii'"));
216
236
  // Configure Docker
217
237
  const configureDockerUserData = aws_ec2_1.UserData.forLinux({
218
238
  shebang: "#!/bin/bash -v"
219
239
  });
220
- configureDockerUserData.addCommands(`DOCKER_USERNS_REMAP='${props.dockerUserNamespaceRemap}' \\`, `DOCKER_EXPERIMENTAL='${props.dockerExperimental}' \\`, `BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.instanceStorage}' \\`, "/usr/local/bin/bk-configure-docker.sh");
240
+ configureDockerUserData.addCommands(`DOCKER_USERNS_REMAP='${props.enableDockerUserNamespaceRemap}' \\`, `DOCKER_EXPERIMENTAL='${props.enableDockerExperimental}' \\`, `DOCKER_NETWORKING_PROTOCOL='${props.dockerNetworkingProtocol}' \\`, `BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.enableInstanceStorage}' \\`, "/usr/local/bin/bk-configure-docker.sh");
221
241
  multipartUserData.addPart(aws_ec2_1.MultipartBody.fromUserData(configureDockerUserData, "text/x-shellscript; charset='us-ascii'"));
222
242
  const installElasticStackUserData = aws_ec2_1.UserData.forLinux({
223
243
  shebang: "#!/bin/bash -v"
224
244
  });
225
- installElasticStackUserData.addCommands(`BUILDKITE_STACK_NAME='${id}' \\`, `BUILDKITE_STACK_VERSION='${props.elasticStackVersion}' \\`, `BUILDKITE_SCALE_IN_IDLE_PERIOD='${props.scaleInPeriod}' \\`, `BUILDKITE_SECRETS_BUCKET='${managedSecretsBucket.bucketName}' \\`, `BUILDKITE_SECRETS_BUCKET_REGION='${props.env?.region}' \\`, `BUILDKITE_AGENT_TOKEN_PATH='${agentToken.name}' \\`, `BUILDKITE_AGENTS_PER_INSTANCE='${props.agentsPerInstance}' \\`, `BUILDKITE_AGENT_TAGS='${props.agentTags}' \\`, `BUILDKITE_AGENT_TIMESTAMP_LINES='${props.timestampLines}' \\`, `BUILDKITE_AGENT_EXPERIMENTS='${props.experiments}' \\`, `BUILDKITE_AGENT_TRACING_BACKEND='${props.tracingBackend}' \\`, `BUILDKITE_AGENT_RELEASE='${props.agentRelease}' \\`, `BUILDKITE_QUEUE='${props.queueName}' \\`, `BUILDKITE_AGENT_ENABLE_GIT_MIRRORS='${props.gitMirrors}' \\`, `BUILDKITE_ELASTIC_BOOTSTRAP_SCRIPT='${props.bootstrapScript}' \\`, `BUILDKITE_ENV_FILE_URL='${props.envFileUrl}' \\`, `BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.instanceStorage}' \\`, `BUILDKITE_AUTHORIZED_USERS_URL='${props.authorizedUsersUrl}' \\`, `BUILDKITE_ECR_POLICY='${props.ecrAccessPolicy}' \\`, `BUILDKITE_TERMINATE_INSTANCE_AFTER_JOB='${props.instanceTerminationAfterJob}' \\`, `BUILDKITE_ADDITIONAL_SUDO_PERMISSIONS='${props.sudoPermissions}' \\`, `AWS_DEFAULT_REGION='${props.env?.region}' \\`, `SECRETS_PLUGIN_ENABLED='${props.secretsPluginEnabled}' \\`, `ECR_PLUGIN_ENABLED='${props.ecrPluginEnabled}' \\`, `DOCKER_LOGIN_PLUGIN_ENABLED='${props.dockerLoginPluginEnabled}' \\`, `DOCKER_EXPERIMENTAL='${props.dockerExperimental}' \\`, `AWS_REGION='${props.env?.region}' \\`, "/usr/local/bin/bk-install-elastic-stack.sh");
245
+ installElasticStackUserData.addCommands(`BUILDKITE_STACK_NAME='${id}' \\`, `BUILDKITE_STACK_VERSION='${props.elasticStackVersion}' \\`, `BUILDKITE_SCALE_IN_IDLE_PERIOD='${props.scaleInIdlePeriod}' \\`, `BUILDKITE_SECRETS_BUCKET='${managedSecretsBucket.bucketName}' \\`, `BUILDKITE_SECRETS_BUCKET_REGION='${props.env?.region}' \\`, `BUILDKITE_AGENT_TOKEN_PATH='${agentToken.name}' \\`, `BUILDKITE_AGENTS_PER_INSTANCE='${props.agentsPerInstance}' \\`, `BUILDKITE_AGENT_TAGS='${props.buildkiteAgentTags}' \\`, `BUILDKITE_AGENT_TIMESTAMP_LINES='${props.buildkiteAgentTimestampLines}' \\`, `BUILDKITE_AGENT_EXPERIMENTS='${props.buildkiteAgentExperiments}' \\`, `BUILDKITE_AGENT_TRACING_BACKEND='${props.buildkiteAgentTracingBackend}' \\`, `BUILDKITE_AGENT_RELEASE='${props.buildkiteAgentRelease}' \\`, `BUILDKITE_AGENT_CANCEL_GRACE_PERIOD='${props.buildkiteAgentCancelGracePeriod}' \\`, `BUILDKITE_AGENT_SIGNING_KMS_KEY='${props.pipelineSigningKMSKey}' \\`, `BUILDKITE_AGENT_SIGNING_FAILURE_BEHAVIOR='${props.pipelineSigningVerificationFailureBehavior}' \\`, `BUILDKITE_QUEUE='${props.buildkiteQueue}' \\`, `BUILDKITE_AGENT_ENABLE_GIT_MIRRORS='${props.buildkiteAgentEnableGitMirrors}' \\`, `BUILDKITE_ELASTIC_BOOTSTRAP_SCRIPT='${props.bootstrapScriptUrl}' \\`, `BUILDKITE_ENV_FILE_URL='${props.agentEnvFileUrl}' \\`, `BUILDKITE_ENABLE_INSTANCE_STORAGE='${props.enableInstanceStorage}' \\`, `BUILDKITE_AUTHORIZED_USERS_URL='${props.authorizedUsersUrl}' \\`, `BUILDKITE_ECR_POLICY='${props.ecrAccessPolicy}' \\`, `BUILDKITE_TERMINATE_INSTANCE_AFTER_JOB='${props.buildkiteTerminateInstanceAfterJob}' \\`, `BUILDKITE_ADDITIONAL_SUDO_PERMISSIONS='${props.buildkiteAdditionalSudoPermissions}' \\`, `AWS_DEFAULT_REGION='${props.env?.region}' \\`, `SECRETS_PLUGIN_ENABLED='${props.enableSecretsPlugin}' \\`, `ECR_PLUGIN_ENABLED='${props.enableEcrPlugin}' \\`, `DOCKER_LOGIN_PLUGIN_ENABLED='${props.enableDockerLoginPlugin}' \\`, `DOCKER_EXPERIMENTAL='${props.enableDockerExperimental}' \\`, `DOCKER_USERNS_REMAP='${props.enableDockerUserNamespaceRemap}' \\`, `AWS_REGION='${props.env?.region}' \\`, "/usr/local/bin/bk-install-elastic-stack.sh");
226
246
  // Merge User Data
227
247
  multipartUserData.addPart(aws_ec2_1.MultipartBody.fromUserData(installElasticStackUserData, "text/x-shellscript; charset='us-ascii'"));
228
248
  // Launch Template
@@ -253,10 +273,10 @@ class Buildkite extends aws_cdk_lib_1.Stack {
253
273
  (0, tagResource_1.default)(launchTemplate, {
254
274
  "fjall:costAllocation:environment": props.environment,
255
275
  "fjall:costAllocation:service": "buildkite",
256
- "fjall:costAllocation:owner": "platform",
276
+ "fjall:costAllocation:owner": props.owner || "engineer",
257
277
  Role: "buildkiteAgent",
258
278
  BuildkiteAgentRelease: agentRelease.STABLE,
259
- BuildkiteQueue: props.queueName
279
+ BuildkiteQueue: props.buildkiteQueue
260
280
  });
261
281
  // Autoscaling Group
262
282
  const autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "agentAutoScalingGroup", {
@@ -266,7 +286,12 @@ class Buildkite extends aws_cdk_lib_1.Stack {
266
286
  instancesDistribution: {
267
287
  onDemandPercentageAboveBaseCapacity: props.spotCapacityPercentage,
268
288
  spotAllocationStrategy: aws_autoscaling_1.SpotAllocationStrategy.CAPACITY_OPTIMIZED
269
- }
289
+ },
290
+ launchTemplateOverrides: [
291
+ {
292
+ instanceType: props.agentInstanceType
293
+ }
294
+ ]
270
295
  },
271
296
  minCapacity: props.agentMinInstances,
272
297
  maxCapacity: props.agentMaxInstances,
@@ -294,7 +319,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
294
319
  (0, tagResource_1.default)(autoScalingGroup, {
295
320
  "fjall:costAllocation:environment": props.environment,
296
321
  "fjall:costAllocation:service": "buildkite",
297
- "fjall:costAllocation:owner": "platform"
322
+ "fjall:costAllocation:owner": props.owner || "engineer"
298
323
  });
299
324
  // Buildkite Suspend Austoscaling Group Custom Resource
300
325
  new awsCustomResource_1.AwsCustomResource(this, "suspendAutoscalingProcess", {
@@ -322,25 +347,26 @@ class Buildkite extends aws_cdk_lib_1.Stack {
322
347
  new aws_sam_1.CfnApplication(this, "agentScaler", {
323
348
  location: {
324
349
  applicationId: "arn:aws:serverlessrepo:us-east-1:172840064832:applications/buildkite-agent-scaler",
325
- semanticVersion: props.agentScalerVersion
350
+ semanticVersion: props.buildkiteAgentScalerVersion
326
351
  },
327
352
  parameters: {
328
353
  BuildkiteAgentTokenParameter: `${agentToken.name}`,
329
- BuildkiteAgentTokenParameterStoreKMSKey: agentToken.cmk.key.keyArn,
354
+ BuildkiteAgentTokenParameterStoreKMSKey: agentToken.cmk.key.keyId,
330
355
  RolePermissionsBoundaryARN: "",
331
- BuildkiteQueue: props.queueName,
356
+ BuildkiteQueue: props.buildkiteQueue,
332
357
  AgentsPerInstance: `${props.agentsPerInstance}`,
333
358
  MinSize: `${props.agentMinInstances}`,
334
359
  MaxSize: `${props.agentMaxInstances}`,
335
360
  AgentAutoScaleGroup: autoScalingGroup.autoScalingGroupName,
336
361
  ScaleOutFactor: props.scaleOutFactor,
337
362
  ScaleOutForWaitingJobs: `${props.scaleOutWaitingForJobs}`,
338
- EventSchedulePeriod: props.eventScheduledPeriod,
339
- MinPollInterval: props.minPollInterval
363
+ EventSchedulePeriod: props.scalerEventSchedulePeriod,
364
+ MinPollInterval: props.scalerMinPollInterval,
365
+ LogRetentionDays: `${props.logRetentionDays}`
340
366
  }
341
367
  });
342
368
  }
343
369
  }
344
370
  exports.Buildkite = Buildkite;
345
371
  exports.default = Buildkite;
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBEO0FBQzFELGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFDcEYseURBQWtEO0FBR2xELElBQUssWUFJSjtBQUpELFdBQUssWUFBWTtJQUNmLGlDQUFpQixDQUFBO0lBQ2pCLDZCQUFhLENBQUE7SUFDYiw2QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBdUNZLFFBQUEscUJBQXFCLEdBaUM5QjtJQUNGLG1CQUFtQixFQUFFLFFBQVE7SUFDN0Isa0JBQWtCLEVBQUUsT0FBTztJQUMzQixpQkFBaUIsRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztJQUN4RSxlQUFlLEVBQUUsR0FBRztJQUNwQixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGlCQUFpQixFQUFFLEVBQUU7SUFDckIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07SUFDakMsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQixhQUFhLEVBQUUsR0FBRztJQUNsQixlQUFlLEVBQUUsS0FBSztJQUN0QiwyQkFBMkIsRUFBRSxLQUFLO0lBQ2xDLHdCQUF3QixFQUFFLElBQUk7SUFDOUIsa0JBQWtCLEVBQUUsS0FBSztJQUN6QixvQkFBb0IsRUFBRSxJQUFJO0lBQzFCLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsd0JBQXdCLEVBQUUsSUFBSTtJQUM5Qixj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LE1BQU07Z0JBQ2xFLDBCQUEwQixFQUFFLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDL0IsaUJBQWlCLEVBQUUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQy9DLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDckMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0I7Z0JBQzFELGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDcEMsc0JBQXNCLEVBQUUsR0FBRyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3pELG1CQUFtQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7Z0JBQy9DLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTthQUN2QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVYRCw4QkE0WEM7QUFFRCxrQkFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2tQcm9wcywgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIENvbXBvc2l0ZVByaW5jaXBhbCxcbiAgU2VydmljZVByaW5jaXBhbCxcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgQmxvY2tEZXZpY2VWb2x1bWUsXG4gIEluc3RhbmNlQ2xhc3MsXG4gIEluc3RhbmNlU2l6ZSxcbiAgSW5zdGFuY2VUeXBlLFxuICBMYXVuY2hUZW1wbGF0ZSxcbiAgTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLFxuICBNYWNoaW5lSW1hZ2UsXG4gIE11bHRpcGFydEJvZHksXG4gIE11bHRpcGFydFVzZXJEYXRhLFxuICBTdWJuZXRUeXBlLFxuICBVc2VyRGF0YVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHtcbiAgQXV0b1NjYWxpbmdHcm91cCxcbiAgR3JvdXBNZXRyaWNzLFxuICBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LFxuICBUZXJtaW5hdGlvblBvbGljeSxcbiAgVXBkYXRlUG9saWN5XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcbmltcG9ydCB7IENmbkFwcGxpY2F0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zYW1cIjtcbmltcG9ydCB7IFBoeXNpY2FsUmVzb3VyY2VJZCB9IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgUG9saWN5LCBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5pbXBvcnQgeyBTM0J1Y2tldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFNlY3VyZVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgdGFnUmVzb3VyY2UgZnJvbSBcIi4uLy4uL3V0aWxzL3RhZ1Jlc291cmNlXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5lbnVtIGFnZW50UmVsZWFzZSB7XG4gIFNUQUJMRSA9IFwic3RhYmxlXCIsXG4gIEJFVEEgPSBcImJldGFcIixcbiAgRURHRSA9IFwiZWRnZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRraXRlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZWxhc3RpY1N0YWNrVmVyc2lvbjogc3RyaW5nO1xuICBhZ2VudFNjYWxlclZlcnNpb246IHN0cmluZztcbiAgcXVldWVOYW1lOiBzdHJpbmc7XG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgYWdlbnRWb2x1bWVTaXplOiBudW1iZXI7XG4gIGFnZW50TWluSW5zdGFuY2VzOiBudW1iZXI7XG4gIGFnZW50TWF4SW5zdGFuY2VzOiBudW1iZXI7XG4gIGluc3RhbmNlU3RvcmFnZTogYm9vbGVhbjtcbiAgZG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwOiBib29sZWFuO1xuICBkb2NrZXJFeHBlcmltZW50YWw6IGJvb2xlYW47XG4gIHNjYWxlSW5QZXJpb2Q6IG51bWJlcjtcbiAgYWdlbnRzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgYWdlbnRUYWdzOiBzdHJpbmc7XG4gIHRpbWVzdGFtcExpbmVzOiBib29sZWFuO1xuICBleHBlcmltZW50czogc3RyaW5nO1xuICB0cmFjaW5nQmFja2VuZDogc3RyaW5nO1xuICBhZ2VudFJlbGVhc2U6IGFnZW50UmVsZWFzZTtcbiAgZ2l0TWlycm9yczogYm9vbGVhbjtcbiAgYm9vdHN0cmFwU2NyaXB0OiBzdHJpbmc7XG4gIGVudkZpbGVVcmw6IHN0cmluZztcbiAgYXV0aG9yaXplZFVzZXJzVXJsOiBzdHJpbmc7XG4gIGVjckFjY2Vzc1BvbGljeTogc3RyaW5nO1xuICBpbnN0YW5jZVRlcm1pbmF0aW9uQWZ0ZXJKb2I6IGJvb2xlYW47XG4gIHN1ZG9QZXJtaXNzaW9uczogc3RyaW5nO1xuICB0YWdzOiBLZXlWYWx1ZTtcbiAgc2VjcmV0c1BsdWdpbkVuYWJsZWQ6IGJvb2xlYW47XG4gIGVjclBsdWdpbkVuYWJsZWQ6IGJvb2xlYW47XG4gIGRvY2tlckxvZ2luUGx1Z2luRW5hYmxlZDogYm9vbGVhbjtcbiAgc2NhbGVPdXRGYWN0b3I6IHN0cmluZztcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogYm9vbGVhbjtcbiAgZXZlbnRTY2hlZHVsZWRQZXJpb2Q6IHN0cmluZztcbiAgbWluUG9sbEludGVydmFsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCdWlsZGtpdGVEZWZhdWx0UHJvcHM6IFBpY2s8XG4gIEJ1aWxka2l0ZVByb3BzLFxuICB8IFwiZWxhc3RpY1N0YWNrVmVyc2lvblwiXG4gIHwgXCJhZ2VudFNjYWxlclZlcnNpb25cIlxuICB8IFwic3BvdENhcGFjaXR5UGVyY2VudGFnZVwiXG4gIHwgXCJhZ2VudEluc3RhbmNlVHlwZVwiXG4gIHwgXCJhZ2VudFZvbHVtZVNpemVcIlxuICB8IFwiYWdlbnRNaW5JbnN0YW5jZXNcIlxuICB8IFwiYWdlbnRNYXhJbnN0YW5jZXNcIlxuICB8IFwiaW5zdGFuY2VTdG9yYWdlXCJcbiAgfCBcImRvY2tlclVzZXJOYW1lc3BhY2VSZW1hcFwiXG4gIHwgXCJkb2NrZXJFeHBlcmltZW50YWxcIlxuICB8IFwic2NhbGVJblBlcmlvZFwiXG4gIHwgXCJhZ2VudHNQZXJJbnN0YW5jZVwiXG4gIHwgXCJhZ2VudFRhZ3NcIlxuICB8IFwidGltZXN0YW1wTGluZXNcIlxuICB8IFwiZXhwZXJpbWVudHNcIlxuICB8IFwidHJhY2luZ0JhY2tlbmRcIlxuICB8IFwiYWdlbnRSZWxlYXNlXCJcbiAgfCBcImdpdE1pcnJvcnNcIlxuICB8IFwiYm9vdHN0cmFwU2NyaXB0XCJcbiAgfCBcImVudkZpbGVVcmxcIlxuICB8IFwiYXV0aG9yaXplZFVzZXJzVXJsXCJcbiAgfCBcImVjckFjY2Vzc1BvbGljeVwiXG4gIHwgXCJpbnN0YW5jZVRlcm1pbmF0aW9uQWZ0ZXJKb2JcIlxuICB8IFwic3Vkb1Blcm1pc3Npb25zXCJcbiAgfCBcInNlY3JldHNQbHVnaW5FbmFibGVkXCJcbiAgfCBcImVjclBsdWdpbkVuYWJsZWRcIlxuICB8IFwiZG9ja2VyTG9naW5QbHVnaW5FbmFibGVkXCJcbiAgfCBcInNjYWxlT3V0RmFjdG9yXCJcbiAgfCBcInNjYWxlT3V0V2FpdGluZ0ZvckpvYnNcIlxuICB8IFwiZXZlbnRTY2hlZHVsZWRQZXJpb2RcIlxuICB8IFwibWluUG9sbEludGVydmFsXCJcbj4gPSB7XG4gIGVsYXN0aWNTdGFja1ZlcnNpb246IFwidjYuNy4xXCIsXG4gIGFnZW50U2NhbGVyVmVyc2lvbjogXCIxLjYuMFwiLFxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTQsIEluc3RhbmNlU2l6ZS5MQVJHRSksXG4gIGFnZW50Vm9sdW1lU2l6ZTogMjUwLFxuICBhZ2VudE1pbkluc3RhbmNlczogMCxcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IDEwLFxuICBhZ2VudHNQZXJJbnN0YW5jZTogMSxcbiAgYWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2UuU1RBQkxFLFxuICBzcG90Q2FwYWNpdHlQZXJjZW50YWdlOiA3NSxcbiAgc2NhbGVJblBlcmlvZDogNjAwLFxuICBpbnN0YW5jZVN0b3JhZ2U6IGZhbHNlLFxuICBpbnN0YW5jZVRlcm1pbmF0aW9uQWZ0ZXJKb2I6IGZhbHNlLFxuICBkb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IHRydWUsXG4gIGRvY2tlckV4cGVyaW1lbnRhbDogZmFsc2UsXG4gIHNlY3JldHNQbHVnaW5FbmFibGVkOiB0cnVlLFxuICBlY3JQbHVnaW5FbmFibGVkOiB0cnVlLFxuICBkb2NrZXJMb2dpblBsdWdpbkVuYWJsZWQ6IHRydWUsXG4gIHRpbWVzdGFtcExpbmVzOiBmYWxzZSxcbiAgZ2l0TWlycm9yczogZmFsc2UsXG4gIHNjYWxlT3V0RmFjdG9yOiBcIjEuMFwiLFxuICBzY2FsZU91dFdhaXRpbmdGb3JKb2JzOiBmYWxzZSxcbiAgZXZlbnRTY2hlZHVsZWRQZXJpb2Q6IFwiMSBtaW51dGVcIixcbiAgbWluUG9sbEludGVydmFsOiBcIjEwc1wiLFxuICBhZ2VudFRhZ3M6IFwiXCIsXG4gIGV4cGVyaW1lbnRzOiBcIlwiLFxuICB0cmFjaW5nQmFja2VuZDogXCJcIixcbiAgYm9vdHN0cmFwU2NyaXB0OiBcIlwiLFxuICBlbnZGaWxlVXJsOiBcIlwiLFxuICBhdXRob3JpemVkVXNlcnNVcmw6IFwiXCIsXG4gIGVjckFjY2Vzc1BvbGljeTogXCJcIixcbiAgc3Vkb1Blcm1pc3Npb25zOiBcIlwiXG59O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRraXRlIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRraXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIFZQQ1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGModGhpcywgXCJidWlsZGtpdGVcIiwge1xuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke2lkfWAsXG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQXJ0aWZhY3RzIEJ1Y2tldFxuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIFwiYXJ0aWZhY3RCdWNrZXRcIik7XG5cbiAgICAvLyBNYW5hZ2VkIFNlY3JldHNcbiAgICBjb25zdCBtYW5hZ2VkU2VjcmV0c0J1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBcIm1hbmFnZWRTZWNyZXRzQnVja2V0XCIpO1xuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKSB7XG4gICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcImJ1aWxka2l0ZVNzaEtleVwiLCB7XG4gICAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgICBTb3VyY2UuZGF0YShcInByaXZhdGVfc3NoX2tleVwiLCBwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKVxuICAgICAgICBdLFxuICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogbWFuYWdlZFNlY3JldHNCdWNrZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiV0FSTjonQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGRlY2xhcmVkLiBTa2lwcGluZyB1cGxvYWQgb2YgcHJpdmF0ZSBTU0gga2V5XCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRW5jcnlwdGVkIEJ1aWxka2l0ZSBBZ2VudCBUb2tlblxuICAgIGNvbnN0IGFnZW50VG9rZW4gPSBuZXcgU2VjdXJlU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiYWdlbnRUb2tlblwiLCB7XG4gICAgICBuYW1lOiBgL2J1aWxka2l0ZS9hZ2VudFRva2VuYCxcbiAgICAgIGFsaWFzTmFtZTogYGJ1aWxka2l0ZUFnZW50VG9rZW5gLFxuICAgICAgdmFsdWU6IHByb2Nlc3MuZW52LkJVSUxES0lURV9BR0VOVF9UT0tFTixcbiAgICAgIG92ZXJ3cml0ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIGFjY291bnRJZDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvblxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEV4ZWN1dGlvbiBSb2xlXG4gICAgY29uc3QgYWdlbnRSb2xlID0gbmV3IFJvbGUodGhpcywgXCJhZ2VudElhbVJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IGAke2lkfUFnZW50Um9sZWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJCdWlsZGtpdGUgQWdlbnQgSUFNIFJvbGVcIixcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFtcImRlY3J5cHRCdWlsZGtpdGVBZ2VudFRva2VuXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYWdlbnRUb2tlbi5jbWsua2V5LmtleUFybl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudj8ucmVnaW9ufToke3Byb3BzLmVudj8uYWNjb3VudH06cGFyYW1ldGVyJHthZ2VudFRva2VuLm5hbWV9YFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInJlYWRNYW5hZ2VkU2VjcmV0c0J1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wiczM6R2V0KlwiLCBcInMzOkxpc3QqXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBtYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgICAgYCR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0QXJufS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcIndyaXRlQXJ0aWZhY3RCdWNrZXRcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uQWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdEFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0VmVyc2lvbkFjbFwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGFydGlmYWN0QnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHthcnRpZmFjdEJ1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiZGVzY3JpYmVJbnN0YW5jZVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6RGVzY3JpYmVBdXRvU2NhbGluZ0luc3RhbmNlc1wiLFxuICAgICAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpQdXRNZXRyaWNEYXRhXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VcIixcbiAgICAgICAgICAgICAgICBcImVjMjpEZXNjcmliZVRhZ3NcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wibG9nZ2luZ1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nR3JvdXBzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJzc21cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInNzbTpEZXNjcmliZUluc3RhbmNlUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOkxpc3RBc3NvY2lhdGlvbnNcIixcbiAgICAgICAgICAgICAgICBcInNzbTpQdXRJbnZlbnRvcnlcIixcbiAgICAgICAgICAgICAgICBcInNzbTpVcGRhdGVJbnN0YW5jZUluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpBY2tub3dsZWRnZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkRlbGV0ZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkZhaWxNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6R2V0TWVzc2FnZXNcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOlNlbmRSZXBseVwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImF1dG9zY2FsaW5nLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIilcbiAgICAgIClcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBBZ2VudCBFQzIgVXNlciBEYXRhXG4gICAgY29uc3QgbXVsdGlwYXJ0VXNlckRhdGEgPSBuZXcgTXVsdGlwYXJ0VXNlckRhdGEoKTtcblxuICAgIC8vIENsb3VkIENvbmZpZ1xuICAgIGNvbnN0IGNsb3VkQ29uZmlnVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiNjbG91ZC1jb25maWdcIlxuICAgIH0pO1xuICAgIGNsb3VkQ29uZmlnVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBcImNsb3VkX2ZpbmFsX21vZHVsZXM6XCIsXG4gICAgICBcIiAgLSBbc2NyaXB0cy11c2VyLCBhbHdheXNdXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY2xvdWRDb25maWdVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gTW91bnQgU3RvcmFnZVxuICAgIGNvbnN0IG1vdW50U3RvcmFnZVVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgbW91bnRTdG9yYWdlVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1tb3VudC1pbnN0YW5jZS1zdG9yYWdlLnNoXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgbW91bnRTdG9yYWdlVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBDb25maWd1cmUgRG9ja2VyXG4gICAgY29uc3QgY29uZmlndXJlRG9ja2VyVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBET0NLRVJfVVNFUk5TX1JFTUFQPScke3Byb3BzLmRvY2tlclVzZXJOYW1lc3BhY2VSZW1hcH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9FWFBFUklNRU5UQUw9JyR7cHJvcHMuZG9ja2VyRXhwZXJpbWVudGFsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1jb25maWd1cmUtZG9ja2VyLnNoXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY29uZmlndXJlRG9ja2VyVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX1NUQUNLX05BTUU9JyR7aWR9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfVkVSU0lPTj0nJHtwcm9wcy5lbGFzdGljU3RhY2tWZXJzaW9ufScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NDQUxFX0lOX0lETEVfUEVSSU9EPScke3Byb3BzLnNjYWxlSW5QZXJpb2R9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0VDUkVUU19CVUNLRVQ9JyR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0TmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVE9LRU5fUEFUSD0nJHthZ2VudFRva2VuLm5hbWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRTX1BFUl9JTlNUQU5DRT0nJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UQUdTPScke3Byb3BzLmFnZW50VGFnc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9USU1FU1RBTVBfTElORVM9JyR7cHJvcHMudGltZXN0YW1wTGluZXN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfRVhQRVJJTUVOVFM9JyR7cHJvcHMuZXhwZXJpbWVudHN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVFJBQ0lOR19CQUNLRU5EPScke3Byb3BzLnRyYWNpbmdCYWNrZW5kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1JFTEVBU0U9JyR7cHJvcHMuYWdlbnRSZWxlYXNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1FVRVVFPScke3Byb3BzLnF1ZXVlTmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FTkFCTEVfR0lUX01JUlJPUlM9JyR7cHJvcHMuZ2l0TWlycm9yc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTEFTVElDX0JPT1RTVFJBUF9TQ1JJUFQ9JyR7cHJvcHMuYm9vdHN0cmFwU2NyaXB0fScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOVl9GSUxFX1VSTD0nJHtwcm9wcy5lbnZGaWxlVXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BVVRIT1JJWkVEX1VTRVJTX1VSTD0nJHtwcm9wcy5hdXRob3JpemVkVXNlcnNVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRUNSX1BPTElDWT0nJHtwcm9wcy5lY3JBY2Nlc3NQb2xpY3l9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfVEVSTUlOQVRFX0lOU1RBTkNFX0FGVEVSX0pPQj0nJHtwcm9wcy5pbnN0YW5jZVRlcm1pbmF0aW9uQWZ0ZXJKb2J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQURESVRJT05BTF9TVURPX1BFUk1JU1NJT05TPScke3Byb3BzLnN1ZG9QZXJtaXNzaW9uc30nIFxcXFxgLFxuICAgICAgYEFXU19ERUZBVUxUX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgYFNFQ1JFVFNfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuc2VjcmV0c1BsdWdpbkVuYWJsZWR9JyBcXFxcYCxcbiAgICAgIGBFQ1JfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZWNyUGx1Z2luRW5hYmxlZH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9MT0dJTl9QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5kb2NrZXJMb2dpblBsdWdpbkVuYWJsZWR9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfRVhQRVJJTUVOVEFMPScke3Byb3BzLmRvY2tlckV4cGVyaW1lbnRhbH0nIFxcXFxgLFxuICAgICAgYEFXU19SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstaW5zdGFsbC1lbGFzdGljLXN0YWNrLnNoXCJcbiAgICApO1xuXG4gICAgLy8gTWVyZ2UgVXNlciBEYXRhXG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBMYXVuY2ggVGVtcGxhdGVcbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZSA9IG5ldyBMYXVuY2hUZW1wbGF0ZSh0aGlzLCBcImFnZW50TGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBgYnVpbGRraXRlTGF1bmNoVGVtcGxhdGVgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICAgIG5hbWU6IFwiYnVpbGRraXRlLXN0YWNrLWxpbnV4LXg4Nl82NC0qXCIsXG4gICAgICAgIG93bmVyczogW1wiMTcyODQwMDY0ODMyXCJdLFxuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgW1wiYmxvY2stZGV2aWNlLW1hcHBpbmcudm9sdW1lLXR5cGVcIl06IFtcImdwM1wiXVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBtdWx0aXBhcnRVc2VyRGF0YSxcbiAgICAgIHJvbGU6IGFnZW50Um9sZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lLmVicyhwcm9wcy5hZ2VudFZvbHVtZVNpemUpXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICByZXF1aXJlSW1kc3YyOiBmYWxzZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWVcbiAgICB9KTtcblxuICAgIHRhZ1Jlc291cmNlKGxhdW5jaFRlbXBsYXRlLCB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiYnVpbGRraXRlXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IFwicGxhdGZvcm1cIixcbiAgICAgIFJvbGU6IFwiYnVpbGRraXRlQWdlbnRcIixcbiAgICAgIEJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgICAgIEJ1aWxka2l0ZVF1ZXVlOiBwcm9wcy5xdWV1ZU5hbWVcbiAgICB9KTtcblxuICAgIC8vIEF1dG9zY2FsaW5nIEdyb3VwXG4gICAgY29uc3QgYXV0b1NjYWxpbmdHcm91cCA9IG5ldyBBdXRvU2NhbGluZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiYWdlbnRBdXRvU2NhbGluZ0dyb3VwXCIsXG4gICAgICB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICBtaXhlZEluc3RhbmNlc1BvbGljeToge1xuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlOiBsYXVuY2hUZW1wbGF0ZSxcbiAgICAgICAgICBpbnN0YW5jZXNEaXN0cmlidXRpb246IHtcbiAgICAgICAgICAgIG9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5OiBwcm9wcy5zcG90Q2FwYWNpdHlQZXJjZW50YWdlLFxuICAgICAgICAgICAgc3BvdEFsbG9jYXRpb25TdHJhdGVneTogU3BvdEFsbG9jYXRpb25TdHJhdGVneS5DQVBBQ0lUWV9PUFRJTUlaRURcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1pbkNhcGFjaXR5OiBwcm9wcy5hZ2VudE1pbkluc3RhbmNlcyxcbiAgICAgICAgbWF4Q2FwYWNpdHk6IHByb3BzLmFnZW50TWF4SW5zdGFuY2VzLFxuICAgICAgICBjb29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgIGdyb3VwTWV0cmljczogW0dyb3VwTWV0cmljcy5hbGwoKV0sXG4gICAgICAgIHVwZGF0ZVBvbGljeTogVXBkYXRlUG9saWN5LnJlcGxhY2luZ1VwZGF0ZSgpLFxuICAgICAgICBuZXdJbnN0YW5jZXNQcm90ZWN0ZWRGcm9tU2NhbGVJbjogdHJ1ZSxcbiAgICAgICAgdGVybWluYXRpb25Qb2xpY2llczogW1xuICAgICAgICAgIFRlcm1pbmF0aW9uUG9saWN5Lk9MREVTVF9MQVVOQ0hfQ09ORklHVVJBVElPTixcbiAgICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5DTE9TRVNUX1RPX05FWFRfSU5TVEFOQ0VfSE9VUlxuICAgICAgICBdLFxuICAgICAgICBzc21TZXNzaW9uUGVybWlzc2lvbnM6IHRydWVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgYWdlbnRSb2xlLmF0dGFjaElubGluZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3kodGhpcywgXCJ1cGRhdGVBdXRvU2NhbGluZ0dyb3VwXCIsIHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICBcImF1dG9zY2FsaW5nOlNldEluc3RhbmNlSGVhbHRoXCIsXG4gICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6VGVybWluYXRlSW5zdGFuY2VJbkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW2Ake2F1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cEFybn1gXVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRhZ1Jlc291cmNlKGF1dG9TY2FsaW5nR3JvdXAsIHtcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogcHJvcHMuZW52aXJvbm1lbnQsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJidWlsZGtpdGVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJwbGF0Zm9ybVwiXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZGtpdGUgU3VzcGVuZCBBdXN0b3NjYWxpbmcgR3JvdXAgQ3VzdG9tIFJlc291cmNlXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwic3VzcGVuZEF1dG9zY2FsaW5nUHJvY2Vzc1wiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQXV0b1NjYWxpbmdcIixcbiAgICAgICAgYWN0aW9uOiBcInN1c3BlbmRQcm9jZXNzZXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICAgIFNjYWxpbmdQcm9jZXNzZXM6IFtcIkFaUmViYWxhbmNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpidWlsZGtpdGVTdXNwZW5kQXV0b3NjYWxpbmdcIlxuICAgIH0pO1xuXG4gICAgbmV3IENmbkFwcGxpY2F0aW9uKHRoaXMsIFwiYWdlbnRTY2FsZXJcIiwge1xuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgYXBwbGljYXRpb25JZDpcbiAgICAgICAgICBcImFybjphd3M6c2VydmVybGVzc3JlcG86dXMtZWFzdC0xOjE3Mjg0MDA2NDgzMjphcHBsaWNhdGlvbnMvYnVpbGRraXRlLWFnZW50LXNjYWxlclwiLFxuICAgICAgICBzZW1hbnRpY1ZlcnNpb246IHByb3BzLmFnZW50U2NhbGVyVmVyc2lvblxuICAgICAgfSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlcjogYCR7YWdlbnRUb2tlbi5uYW1lfWAsXG4gICAgICAgIEJ1aWxka2l0ZUFnZW50VG9rZW5QYXJhbWV0ZXJTdG9yZUtNU0tleTogYWdlbnRUb2tlbi5jbWsua2V5LmtleUFybixcbiAgICAgICAgUm9sZVBlcm1pc3Npb25zQm91bmRhcnlBUk46IFwiXCIsXG4gICAgICAgIEJ1aWxka2l0ZVF1ZXVlOiBwcm9wcy5xdWV1ZU5hbWUsXG4gICAgICAgIEFnZW50c1Blckluc3RhbmNlOiBgJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX1gLFxuICAgICAgICBNaW5TaXplOiBgJHtwcm9wcy5hZ2VudE1pbkluc3RhbmNlc31gLFxuICAgICAgICBNYXhTaXplOiBgJHtwcm9wcy5hZ2VudE1heEluc3RhbmNlc31gLFxuICAgICAgICBBZ2VudEF1dG9TY2FsZUdyb3VwOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICBTY2FsZU91dEZhY3RvcjogcHJvcHMuc2NhbGVPdXRGYWN0b3IsXG4gICAgICAgIFNjYWxlT3V0Rm9yV2FpdGluZ0pvYnM6IGAke3Byb3BzLnNjYWxlT3V0V2FpdGluZ0ZvckpvYnN9YCxcbiAgICAgICAgRXZlbnRTY2hlZHVsZVBlcmlvZDogcHJvcHMuZXZlbnRTY2hlZHVsZWRQZXJpb2QsXG4gICAgICAgIE1pblBvbGxJbnRlcnZhbDogcHJvcHMubWluUG9sbEludGVydmFsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnVpbGRraXRlO1xuIl19
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBEO0FBQzFELGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFDcEYseURBQWtEO0FBR2xELElBQUssWUFJSjtBQUpELFdBQUssWUFBWTtJQUNmLGlDQUFpQixDQUFBO0lBQ2pCLDZCQUFhLENBQUE7SUFDYiw2QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBbURZLFFBQUEscUJBQXFCLEdBOEM5QjtJQUNGLGdDQUFnQztJQUNoQyxtQkFBbUIsRUFBRSxTQUFTO0lBQzlCLE9BQU8sRUFBRSxFQUFFO0lBQ1gscUJBQXFCLEVBQUUsWUFBWSxDQUFDLE1BQU07SUFDMUMsa0JBQWtCLEVBQUUsRUFBRTtJQUN0Qiw0QkFBNEIsRUFBRSxLQUFLO0lBQ25DLHlCQUF5QixFQUFFLEVBQUU7SUFDN0IsMkJBQTJCLEVBQUUsT0FBTztJQUNwQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLDRCQUE0QixFQUFFLEVBQUU7SUFDaEMsK0JBQStCLEVBQUUsRUFBRTtJQUNuQyxrQ0FBa0MsRUFBRSxLQUFLO0lBQ3pDLGtDQUFrQyxFQUFFLEVBQUU7SUFDdEMsY0FBYyxFQUFFLFNBQVM7SUFDekIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFLHNCQUFZLENBQUMsRUFBRSxDQUFD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RUFBRTtnQkFDL0MsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3JDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtnQkFDMUQsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtnQkFDekQsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLHlCQUF5QjtnQkFDcEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQzVDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFO2FBQzlDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBaFpELDhCQWdaQztBQUVELGtCQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCBTdGFja1Byb3BzLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29tcG9zaXRlUHJpbmNpcGFsLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBCbG9ja0RldmljZVZvbHVtZSxcbiAgSW5zdGFuY2VDbGFzcyxcbiAgSW5zdGFuY2VTaXplLFxuICBJbnN0YW5jZVR5cGUsXG4gIExhdW5jaFRlbXBsYXRlLFxuICBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMsXG4gIE1hY2hpbmVJbWFnZSxcbiAgTXVsdGlwYXJ0Qm9keSxcbiAgTXVsdGlwYXJ0VXNlckRhdGEsXG4gIFN1Ym5ldFR5cGUsXG4gIFVzZXJEYXRhXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3ksXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgQ2ZuQXBwbGljYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNhbVwiO1xuaW1wb3J0IHsgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL25ldHdvcmtpbmcvdnBjXCI7XG5pbXBvcnQgeyBQb2xpY3ksIFJvbGUgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW1cIjtcbmltcG9ydCB7IFMzQnVja2V0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgU2VjdXJlU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB0YWdSZXNvdXJjZSBmcm9tIFwiLi4vLi4vdXRpbHMvdGFnUmVzb3VyY2VcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmVudW0gYWdlbnRSZWxlYXNlIHtcbiAgU1RBQkxFID0gXCJzdGFibGVcIixcbiAgQkVUQSA9IFwiYmV0YVwiLFxuICBFREdFID0gXCJlZGdlXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGtpdGVQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50TmFtZTogc3RyaW5nO1xuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBzdHJpbmc7XG4gIGtleU5hbWU6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2U7XG4gIGJ1aWxka2l0ZUFnZW50VGFnczogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBib29sZWFuO1xuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvbjogc3RyaW5nO1xuICBsb2dSZXRlbnRpb25EYXlzOiBudW1iZXI7XG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIgfCBcImRhdGFkb2dcIiB8IFwib3BlbnRlbGVtZXRyeVwiO1xuICBidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kOiBudW1iZXI7XG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnM6IHN0cmluZztcbiAgYnVpbGRraXRlUXVldWU6IHN0cmluZztcbiAgYWdlbnRzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBzdHJpbmc7XG4gIGFnZW50RW52RmlsZVVybDogc3RyaW5nO1xuICBhdXRob3JpemVkVXNlcnNVcmw6IHN0cmluZztcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgYWdlbnRWb2x1bWVTaXplOiBudW1iZXI7XG4gIGFnZW50TWluSW5zdGFuY2VzOiBudW1iZXI7XG4gIGFnZW50TWF4SW5zdGFuY2VzOiBudW1iZXI7XG4gIHNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2Q6IHN0cmluZztcbiAgc2NhbGVyTWluUG9sbEludGVydmFsOiBzdHJpbmc7XG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgc2NhbGVPdXRGYWN0b3I6IHN0cmluZztcbiAgZWNyQWNjZXNzUG9saWN5OiBzdHJpbmc7XG4gIHNjYWxlSW5JZGxlUGVyaW9kOiBudW1iZXI7XG4gIHNjYWxlT3V0V2FpdGluZ0ZvckpvYnM6IGJvb2xlYW47XG4gIGRvY2tlck5ldHdvcmtpbmdQcm90b2NvbDogXCJpcHY0XCIgfCBcImR1YWxzdGFja1wiO1xuICBlbmFibGVTZWNyZXRzUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVFY3JQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogYm9vbGVhbjtcbiAgZW5hYmxlSW5zdGFuY2VTdG9yYWdlOiBib29sZWFuO1xuICBtb3VudFRtcGZzQXRUbXA6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogYm9vbGVhbjtcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBzdHJpbmc7XG4gIHBpcGVsaW5lU2lnbmluZ1ZlcmlmaWNhdGlvbkZhaWx1cmVCZWhhdmlvcjogXCJibG9ja1wiIHwgXCJ3YXJuXCI7XG4gIC8vIFRhZ3NcbiAgLy8gVE9ETzogTW92ZSB0aGVzZSBpbnRvIGEgc2luZ2xlIHRhZ3Mgb2JqZWN0XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJ1aWxka2l0ZURlZmF1bHRQcm9wczogUGljazxcbiAgQnVpbGRraXRlUHJvcHMsXG4gIC8vIEJ1aWxka2l0ZSBBZ2VudCBDb25maWd1cmF0aW9uXG4gIHwgXCJlbGFzdGljU3RhY2tWZXJzaW9uXCJcbiAgfCBcImtleU5hbWVcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRSZWxlYXNlXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGFnc1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXCJcbiAgfCBcImxvZ1JldGVudGlvbkRheXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZFwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kXCJcbiAgfCBcImJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2JcIlxuICB8IFwiYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uc1wiXG4gIHwgXCJidWlsZGtpdGVRdWV1ZVwiXG4gIHwgXCJhZ2VudHNQZXJJbnN0YW5jZVwiXG4gIHwgXCJib290c3RyYXBTY3JpcHRVcmxcIlxuICB8IFwiYWdlbnRFbnZGaWxlVXJsXCJcbiAgfCBcImF1dGhvcml6ZWRVc2Vyc1VybFwiXG4gIC8vIEluZnJhc3RydWN0dXJlXG4gIHwgXCJhZ2VudEluc3RhbmNlVHlwZVwiXG4gIHwgXCJhZ2VudFZvbHVtZVNpemVcIlxuICB8IFwiYWdlbnRNaW5JbnN0YW5jZXNcIlxuICB8IFwiYWdlbnRNYXhJbnN0YW5jZXNcIlxuICB8IFwic2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZXJNaW5Qb2xsSW50ZXJ2YWxcIlxuICB8IFwic3BvdENhcGFjaXR5UGVyY2VudGFnZVwiXG4gIHwgXCJzY2FsZU91dEZhY3RvclwiXG4gIHwgXCJzY2FsZUluSWRsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZU91dFdhaXRpbmdGb3JKb2JzXCJcbiAgfCBcImVjckFjY2Vzc1BvbGljeVwiXG4gIHwgXCJkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2xcIlxuICB8IFwiZW5hYmxlU2VjcmV0c1BsdWdpblwiXG4gIHwgXCJlbmFibGVFY3JQbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyTG9naW5QbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwXCJcbiAgfCBcImVuYWJsZURvY2tlckV4cGVyaW1lbnRhbFwiXG4gIHwgXCJlbmFibGVJbnN0YW5jZVN0b3JhZ2VcIlxuICB8IFwibW91bnRUbXBmc0F0VG1wXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc1wiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdLTVNLZXlcIlxuICB8IFwicGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yXCJcbiAgLy8gVGFnc1xuICB8IFwiZW52aXJvbm1lbnRcIlxuICB8IFwib3duZXJcIlxuPiA9IHtcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgZWxhc3RpY1N0YWNrVmVyc2lvbjogXCJ2Ni4zMC4wXCIsXG4gIGtleU5hbWU6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBmYWxzZSxcbiAgYnVpbGRraXRlQWdlbnRFeHBlcmltZW50czogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBcIjEuOC4wXCIsXG4gIGxvZ1JldGVudGlvbkRheXM6IDEsXG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IDYwLFxuICBidWlsZGtpdGVUZXJtaW5hdGVJbnN0YW5jZUFmdGVySm9iOiBmYWxzZSxcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogXCJcIixcbiAgYnVpbGRraXRlUXVldWU6IFwiZGVmYXVsdFwiLFxuICBhZ2VudHNQZXJJbnN0YW5jZTogMSxcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBcIlwiLFxuICBhZ2VudEVudkZpbGVVcmw6IFwiXCIsXG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogXCJcIixcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLk01LCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICBhZ2VudE1pbkluc3RhbmNlczogMCxcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IDEwLFxuICBhZ2VudFZvbHVtZVNpemU6IDI1MCxcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogXCIxIG1pbnV0ZVwiLFxuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IFwiMTBzXCIsXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IDc1LFxuICBzY2FsZU91dEZhY3RvcjogXCIxLjBcIixcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IDYwMCxcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogZmFsc2UsXG4gIGVjckFjY2Vzc1BvbGljeTogXCJcIixcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIixcbiAgZW5hYmxlU2VjcmV0c1BsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRWNyUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJMb2dpblBsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwOiB0cnVlLFxuICBlbmFibGVEb2NrZXJFeHBlcmltZW50YWw6IGZhbHNlLFxuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGZhbHNlLFxuICBtb3VudFRtcGZzQXRUbXA6IHRydWUsXG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogZmFsc2UsXG4gIHBpcGVsaW5lU2lnbmluZ0tNU0tleTogXCJcIixcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIsXG4gIC8vIFRhZ3NcbiAgZW52aXJvbm1lbnQ6IFwicGxhdGZvcm1cIixcbiAgb3duZXI6IFwiZW5naW5lZXJcIlxufTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxka2l0ZSBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxka2l0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgaW1tdXRhYmxlIGFuZCBlbmZvcmNlIHRoZSB0YWdzIGJlaW5nIHNldFxuICAgIGNvbnN0IHRhZ3MgPSB7XG4gICAgICAuLi5wcm9wcy50YWdzLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCB8fCBcInBsYXRmb3JtXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJidWlsZGtpdGVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcHJvcHMub3duZXIgfHwgXCJlbmdpbmVlclwiIC8vIFRPRE86IHRoaXMgd2lsbCBoYXZlIHRvIGJlIHRoZSBwbGF0Zm9ybSBhY2NvdW50IG5hbWU/XG4gICAgfTtcblxuICAgIC8vIFZQQ1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGModGhpcywgXCJidWlsZGtpdGVcIiwge1xuICAgICAgYWNjb3VudE5hbWU6IHByb3BzLmFjY291bnROYW1lLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke2lkfWAsXG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQXJ0aWZhY3RzIEJ1Y2tldFxuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIFwiYXJ0aWZhY3RCdWNrZXRcIik7XG5cbiAgICAvLyBNYW5hZ2VkIFNlY3JldHNcbiAgICBjb25zdCBtYW5hZ2VkU2VjcmV0c0J1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBcIm1hbmFnZWRTZWNyZXRzQnVja2V0XCIpO1xuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKSB7XG4gICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcImJ1aWxka2l0ZVNzaEtleVwiLCB7XG4gICAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgICBTb3VyY2UuZGF0YShcInByaXZhdGVfc3NoX2tleVwiLCBwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKVxuICAgICAgICBdLFxuICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogbWFuYWdlZFNlY3JldHNCdWNrZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiV0FSTjonQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGRlY2xhcmVkLiBTa2lwcGluZyB1cGxvYWQgb2YgcHJpdmF0ZSBTU0gga2V5XCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRW5jcnlwdGVkIEJ1aWxka2l0ZSBBZ2VudCBUb2tlblxuICAgIGNvbnN0IGFnZW50VG9rZW4gPSBuZXcgU2VjdXJlU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiYWdlbnRUb2tlblwiLCB7XG4gICAgICBuYW1lOiBgL2J1aWxka2l0ZS9hZ2VudFRva2VuYCxcbiAgICAgIGFsaWFzTmFtZTogYGJ1aWxka2l0ZUFnZW50VG9rZW5gLFxuICAgICAgdmFsdWU6IHByb2Nlc3MuZW52LkJVSUxES0lURV9BR0VOVF9UT0tFTixcbiAgICAgIG92ZXJ3cml0ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdGFnczogdGFncyxcbiAgICAgIGFjY291bnRJZDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvblxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEV4ZWN1dGlvbiBSb2xlXG4gICAgY29uc3QgYWdlbnRSb2xlID0gbmV3IFJvbGUodGhpcywgXCJhZ2VudElhbVJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IGAke2lkfUFnZW50Um9sZWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJCdWlsZGtpdGUgQWdlbnQgSUFNIFJvbGVcIixcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFtcImRlY3J5cHRCdWlsZGtpdGVBZ2VudFRva2VuXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYWdlbnRUb2tlbi5jbWsua2V5LmtleUFybl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudj8ucmVnaW9ufToke3Byb3BzLmVudj8uYWNjb3VudH06cGFyYW1ldGVyJHthZ2VudFRva2VuLm5hbWV9YFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInJlYWRNYW5hZ2VkU2VjcmV0c0J1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wiczM6R2V0KlwiLCBcInMzOkxpc3QqXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBtYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgICAgYCR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0QXJufS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcIndyaXRlQXJ0aWZhY3RCdWNrZXRcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uQWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdEFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0VmVyc2lvbkFjbFwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGFydGlmYWN0QnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHthcnRpZmFjdEJ1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiZGVzY3JpYmVJbnN0YW5jZVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6RGVzY3JpYmVBdXRvU2NhbGluZ0luc3RhbmNlc1wiLFxuICAgICAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpQdXRNZXRyaWNEYXRhXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VcIixcbiAgICAgICAgICAgICAgICBcImVjMjpEZXNjcmliZVRhZ3NcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wibG9nZ2luZ1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nR3JvdXBzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJzc21cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInNzbTpEZXNjcmliZUluc3RhbmNlUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOkxpc3RBc3NvY2lhdGlvbnNcIixcbiAgICAgICAgICAgICAgICBcInNzbTpQdXRJbnZlbnRvcnlcIixcbiAgICAgICAgICAgICAgICBcInNzbTpVcGRhdGVJbnN0YW5jZUluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpBY2tub3dsZWRnZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkRlbGV0ZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkZhaWxNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6R2V0TWVzc2FnZXNcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOlNlbmRSZXBseVwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImF1dG9zY2FsaW5nLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIilcbiAgICAgIClcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBBZ2VudCBFQzIgVXNlciBEYXRhXG4gICAgY29uc3QgbXVsdGlwYXJ0VXNlckRhdGEgPSBuZXcgTXVsdGlwYXJ0VXNlckRhdGEoKTtcblxuICAgIC8vIENsb3VkIENvbmZpZ1xuICAgIGNvbnN0IGNsb3VkQ29uZmlnVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiNjbG91ZC1jb25maWdcIlxuICAgIH0pO1xuICAgIGNsb3VkQ29uZmlnVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBcImNsb3VkX2ZpbmFsX21vZHVsZXM6XCIsXG4gICAgICBcIiAgLSBbc2NyaXB0cy11c2VyLCBhbHdheXNdXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY2xvdWRDb25maWdVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gTW91bnQgU3RvcmFnZVxuICAgIGNvbnN0IG1vdW50U3RvcmFnZVVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgbW91bnRTdG9yYWdlVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9NT1VOVF9UTVBGU19BVF9UTVA9JyR7cHJvcHMubW91bnRUbXBmc0F0VG1wfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLW1vdW50LWluc3RhbmNlLXN0b3JhZ2Uuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIENvbmZpZ3VyZSBEb2NrZXJcbiAgICBjb25zdCBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYERPQ0tFUl9VU0VSTlNfUkVNQVA9JyR7cHJvcHMuZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfTkVUV09SS0lOR19QUk9UT0NPTD0nJHtwcm9wcy5kb2NrZXJOZXR3b3JraW5nUHJvdG9jb2x9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLWNvbmZpZ3VyZS1kb2NrZXIuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfTkFNRT0nJHtpZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TVEFDS19WRVJTSU9OPScke3Byb3BzLmVsYXN0aWNTdGFja1ZlcnNpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0NBTEVfSU5fSURMRV9QRVJJT0Q9JyR7cHJvcHMuc2NhbGVJbklkbGVQZXJpb2R9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0VDUkVUU19CVUNLRVQ9JyR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0TmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVE9LRU5fUEFUSD0nJHthZ2VudFRva2VuLm5hbWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRTX1BFUl9JTlNUQU5DRT0nJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UQUdTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VGFnc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9USU1FU1RBTVBfTElORVM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUaW1lc3RhbXBMaW5lc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FWFBFUklNRU5UUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RSQUNJTkdfQkFDS0VORD0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRyYWNpbmdCYWNrZW5kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1JFTEVBU0U9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRSZWxlYXNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0NBTkNFTF9HUkFDRV9QRVJJT0Q9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRDYW5jZWxHcmFjZVBlcmlvZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9TSUdOSU5HX0tNU19LRVk9JyR7cHJvcHMucGlwZWxpbmVTaWduaW5nS01TS2V5fScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1NJR05JTkdfRkFJTFVSRV9CRUhBVklPUj0nJHtwcm9wcy5waXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfUVVFVUU9JyR7cHJvcHMuYnVpbGRraXRlUXVldWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfRU5BQkxFX0dJVF9NSVJST1JTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTEFTVElDX0JPT1RTVFJBUF9TQ1JJUFQ9JyR7cHJvcHMuYm9vdHN0cmFwU2NyaXB0VXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOVl9GSUxFX1VSTD0nJHtwcm9wcy5hZ2VudEVudkZpbGVVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FVVEhPUklaRURfVVNFUlNfVVJMPScke3Byb3BzLmF1dGhvcml6ZWRVc2Vyc1VybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FQ1JfUE9MSUNZPScke3Byb3BzLmVjckFjY2Vzc1BvbGljeX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9URVJNSU5BVEVfSU5TVEFOQ0VfQUZURVJfSk9CPScke3Byb3BzLmJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQURESVRJT05BTF9TVURPX1BFUk1JU1NJT05TPScke3Byb3BzLmJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnN9JyBcXFxcYCxcbiAgICAgIGBBV1NfREVGQVVMVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBTRUNSRVRTX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZVNlY3JldHNQbHVnaW59JyBcXFxcYCxcbiAgICAgIGBFQ1JfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlRWNyUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0xPR0lOX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZURvY2tlckxvZ2luUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfVVNFUk5TX1JFTUFQPScke3Byb3BzLmVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcH0nIFxcXFxgLFxuICAgICAgYEFXU19SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstaW5zdGFsbC1lbGFzdGljLXN0YWNrLnNoXCJcbiAgICApO1xuXG4gICAgLy8gTWVyZ2UgVXNlciBEYXRhXG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBMYXVuY2ggVGVtcGxhdGVcbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZSA9IG5ldyBMYXVuY2hUZW1wbGF0ZSh0aGlzLCBcImFnZW50TGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBgYnVpbGRraXRlTGF1bmNoVGVtcGxhdGVgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICAgIG5hbWU6IFwiYnVpbGRraXRlLXN0YWNrLWxpbnV4LXg4Nl82NC0qXCIsXG4gICAgICAgIG93bmVyczogW1wiMTcyODQwMDY0ODMyXCJdLFxuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgW1wiYmxvY2stZGV2aWNlLW1hcHBpbmcudm9sdW1lLXR5cGVcIl06IFtcImdwM1wiXVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBtdWx0aXBhcnRVc2VyRGF0YSxcbiAgICAgIHJvbGU6IGFnZW50Um9sZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lLmVicyhwcm9wcy5hZ2VudFZvbHVtZVNpemUpXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICByZXF1aXJlSW1kc3YyOiBmYWxzZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWVcbiAgICB9KTtcblxuICAgIHRhZ1Jlc291cmNlKGxhdW5jaFRlbXBsYXRlLCB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IFwiYnVpbGRraXRlXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IHByb3BzLm93bmVyIHx8IFwiZW5naW5lZXJcIixcbiAgICAgIFJvbGU6IFwiYnVpbGRraXRlQWdlbnRcIixcbiAgICAgIEJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgICAgIEJ1aWxka2l0ZVF1ZXVlOiBwcm9wcy5idWlsZGtpdGVRdWV1ZVxuICAgIH0pO1xuXG4gICAgLy8gQXV0b3NjYWxpbmcgR3JvdXBcbiAgICBjb25zdCBhdXRvU2NhbGluZ0dyb3VwID0gbmV3IEF1dG9TY2FsaW5nR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJhZ2VudEF1dG9TY2FsaW5nR3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIG1peGVkSW5zdGFuY2VzUG9saWN5OiB7XG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGU6IGxhdW5jaFRlbXBsYXRlLFxuICAgICAgICAgIGluc3RhbmNlc0Rpc3RyaWJ1dGlvbjoge1xuICAgICAgICAgICAgb25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHk6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzcG90QWxsb2NhdGlvblN0cmF0ZWd5OiBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LkNBUEFDSVRZX09QVElNSVpFRFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVPdmVycmlkZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLmFnZW50TWluSW5zdGFuY2VzLFxuICAgICAgICBtYXhDYXBhY2l0eTogcHJvcHMuYWdlbnRNYXhJbnN0YW5jZXMsXG4gICAgICAgIGNvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgZ3JvdXBNZXRyaWNzOiBbR3JvdXBNZXRyaWNzLmFsbCgpXSxcbiAgICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICAgIG5ld0luc3RhbmNlc1Byb3RlY3RlZEZyb21TY2FsZUluOiB0cnVlLFxuICAgICAgICB0ZXJtaW5hdGlvblBvbGljaWVzOiBbXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICAgIFRlcm1pbmF0aW9uUG9saWN5LkNMT1NFU1RfVE9fTkVYVF9JTlNUQU5DRV9IT1VSXG4gICAgICAgIF0sXG4gICAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBhZ2VudFJvbGUuYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCBcInVwZGF0ZUF1dG9TY2FsaW5nR3JvdXBcIiwge1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6U2V0SW5zdGFuY2VIZWFsdGhcIixcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpUZXJtaW5hdGVJbnN0YW5jZUluQXV0b1NjYWxpbmdHcm91cFwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbYCR7YXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwQXJufWBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGFnUmVzb3VyY2UoYXV0b1NjYWxpbmdHcm91cCwge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImJ1aWxka2l0ZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBwcm9wcy5vd25lciB8fCBcImVuZ2luZWVyXCJcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBTdXNwZW5kIEF1c3Rvc2NhbGluZyBHcm91cCBDdXN0b20gUmVzb3VyY2VcbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJzdXNwZW5kQXV0b3NjYWxpbmdQcm9jZXNzXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCIsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICAgIGFjdGlvbjogXCJzdXNwZW5kUHJvY2Vzc2VzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OmJ1aWxka2l0ZVN1c3BlbmRBdXRvc2NhbGluZ1wiXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuQXBwbGljYXRpb24odGhpcywgXCJhZ2VudFNjYWxlclwiLCB7XG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBhcHBsaWNhdGlvbklkOlxuICAgICAgICAgIFwiYXJuOmF3czpzZXJ2ZXJsZXNzcmVwbzp1cy1lYXN0LTE6MTcyODQwMDY0ODMyOmFwcGxpY2F0aW9ucy9idWlsZGtpdGUtYWdlbnQtc2NhbGVyXCIsXG4gICAgICAgIHNlbWFudGljVmVyc2lvbjogcHJvcHMuYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXG4gICAgICB9LFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBCdWlsZGtpdGVBZ2VudFRva2VuUGFyYW1ldGVyOiBgJHthZ2VudFRva2VuLm5hbWV9YCxcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlclN0b3JlS01TS2V5OiBhZ2VudFRva2VuLmNtay5rZXkua2V5SWQsXG4gICAgICAgIFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5QVJOOiBcIlwiLFxuICAgICAgICBCdWlsZGtpdGVRdWV1ZTogcHJvcHMuYnVpbGRraXRlUXVldWUsXG4gICAgICAgIEFnZW50c1Blckluc3RhbmNlOiBgJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX1gLFxuICAgICAgICBNaW5TaXplOiBgJHtwcm9wcy5hZ2VudE1pbkluc3RhbmNlc31gLFxuICAgICAgICBNYXhTaXplOiBgJHtwcm9wcy5hZ2VudE1heEluc3RhbmNlc31gLFxuICAgICAgICBBZ2VudEF1dG9TY2FsZUdyb3VwOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICBTY2FsZU91dEZhY3RvcjogcHJvcHMuc2NhbGVPdXRGYWN0b3IsXG4gICAgICAgIFNjYWxlT3V0Rm9yV2FpdGluZ0pvYnM6IGAke3Byb3BzLnNjYWxlT3V0V2FpdGluZ0ZvckpvYnN9YCxcbiAgICAgICAgRXZlbnRTY2hlZHVsZVBlcmlvZDogcHJvcHMuc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZCxcbiAgICAgICAgTWluUG9sbEludGVydmFsOiBwcm9wcy5zY2FsZXJNaW5Qb2xsSW50ZXJ2YWwsXG4gICAgICAgIExvZ1JldGVudGlvbkRheXM6IGAke3Byb3BzLmxvZ1JldGVudGlvbkRheXN9YFxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxka2l0ZTtcbiJdfQ==
@@ -21,9 +21,10 @@ export interface BasicAppProps {
21
21
  containerEnvironment?: KeyValue;
22
22
  containerPort?: number;
23
23
  containerSecrets?: string[];
24
+ environment?: string;
24
25
  owner?: string;
25
26
  parentDomain?: string;
26
- environment: string;
27
+ accountName: string;
27
28
  listenerPort?: number;
28
29
  region?: string;
29
30
  scalingType?: ScalingType;