@fjall/components-infrastructure 0.86.1 → 0.87.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +3 -3
  2. package/dist/lib/app.d.ts +166 -6
  3. package/dist/lib/app.js +212 -20
  4. package/dist/lib/aspects/resourceInventory.d.ts +4 -4
  5. package/dist/lib/aspects/resourceInventory.js +3 -3
  6. package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
  7. package/dist/lib/config/aws/identityCenter.js +1 -5
  8. package/dist/lib/config/aws/organisation.js +1 -4
  9. package/dist/lib/index.d.ts +1 -0
  10. package/dist/lib/index.js +7 -1
  11. package/dist/lib/patterns/aws/buildkite.js +3 -2
  12. package/dist/lib/patterns/aws/cdn.d.ts +164 -0
  13. package/dist/lib/patterns/aws/cdn.js +264 -0
  14. package/dist/lib/patterns/aws/compute.d.ts +278 -59
  15. package/dist/lib/patterns/aws/compute.js +384 -188
  16. package/dist/lib/patterns/aws/connections.d.ts +46 -0
  17. package/dist/lib/patterns/aws/connections.js +159 -0
  18. package/dist/lib/patterns/aws/database.d.ts +124 -11
  19. package/dist/lib/patterns/aws/database.js +188 -66
  20. package/dist/lib/patterns/aws/hostedZone.js +1 -1
  21. package/dist/lib/patterns/aws/index.d.ts +3 -0
  22. package/dist/lib/patterns/aws/index.js +4 -1
  23. package/dist/lib/patterns/aws/interfaces/compute.d.ts +121 -0
  24. package/dist/lib/patterns/aws/interfaces/compute.js +48 -0
  25. package/dist/lib/patterns/aws/interfaces/connector.d.ts +183 -0
  26. package/dist/lib/patterns/aws/interfaces/connector.js +117 -0
  27. package/dist/lib/patterns/aws/interfaces/database.d.ts +136 -0
  28. package/dist/lib/patterns/aws/interfaces/database.js +65 -0
  29. package/dist/lib/patterns/aws/interfaces/index.d.ts +12 -0
  30. package/dist/lib/patterns/aws/interfaces/index.js +49 -0
  31. package/dist/lib/patterns/aws/interfaces/messaging.d.ts +146 -0
  32. package/dist/lib/patterns/aws/interfaces/messaging.js +56 -0
  33. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +403 -0
  34. package/dist/lib/patterns/aws/interfaces/pattern.js +36 -0
  35. package/dist/lib/patterns/aws/interfaces/storage.d.ts +136 -0
  36. package/dist/lib/patterns/aws/interfaces/storage.js +48 -0
  37. package/dist/lib/patterns/aws/messaging.d.ts +183 -0
  38. package/dist/lib/patterns/aws/messaging.js +239 -0
  39. package/dist/lib/patterns/aws/network.js +4 -4
  40. package/dist/lib/patterns/aws/pattern.d.ts +67 -0
  41. package/dist/lib/patterns/aws/pattern.js +69 -0
  42. package/dist/lib/patterns/aws/payload.d.ts +87 -0
  43. package/dist/lib/patterns/aws/payload.js +526 -0
  44. package/dist/lib/patterns/aws/storage.d.ts +127 -15
  45. package/dist/lib/patterns/aws/storage.js +234 -38
  46. package/dist/lib/resources/aws/backup/backupPlan.js +1 -6
  47. package/dist/lib/resources/aws/backup/backupVault.js +1 -2
  48. package/dist/lib/resources/aws/base/awsStack.d.ts +0 -2
  49. package/dist/lib/resources/aws/base/awsStack.js +1 -7
  50. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +71 -0
  51. package/dist/lib/resources/aws/cdn/cloudFront.js +176 -0
  52. package/dist/lib/resources/aws/cdn/index.d.ts +1 -0
  53. package/dist/lib/resources/aws/cdn/index.js +18 -0
  54. package/dist/lib/resources/aws/compute/ec2.d.ts +5 -0
  55. package/dist/lib/resources/aws/compute/ec2.js +33 -6
  56. package/dist/lib/resources/aws/compute/ecs.d.ts +32 -25
  57. package/dist/lib/resources/aws/compute/ecs.js +31 -115
  58. package/dist/lib/resources/aws/compute/lambda.d.ts +94 -5
  59. package/dist/lib/resources/aws/compute/lambda.js +209 -32
  60. package/dist/lib/resources/aws/database/database.js +1 -1
  61. package/dist/lib/resources/aws/database/dynamodb.d.ts +70 -0
  62. package/dist/lib/resources/aws/database/dynamodb.js +181 -0
  63. package/dist/lib/resources/aws/database/index.d.ts +1 -0
  64. package/dist/lib/resources/aws/database/index.js +2 -1
  65. package/dist/lib/resources/aws/database/migrationLambda.d.ts +80 -0
  66. package/dist/lib/resources/aws/database/migrationLambda.js +119 -0
  67. package/dist/lib/resources/aws/database/rdsAurora.d.ts +15 -0
  68. package/dist/lib/resources/aws/database/rdsAurora.js +41 -18
  69. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +12 -8
  70. package/dist/lib/resources/aws/database/rdsInstance.js +2 -2
  71. package/dist/lib/resources/aws/index.d.ts +2 -0
  72. package/dist/lib/resources/aws/index.js +3 -1
  73. package/dist/lib/resources/aws/messaging/eventbridge.d.ts +28 -0
  74. package/dist/lib/resources/aws/messaging/eventbridge.js +53 -0
  75. package/dist/lib/resources/aws/messaging/index.d.ts +3 -0
  76. package/dist/lib/resources/aws/messaging/index.js +20 -0
  77. package/dist/lib/resources/aws/messaging/sns.d.ts +35 -0
  78. package/dist/lib/resources/aws/messaging/sns.js +70 -0
  79. package/dist/lib/resources/aws/messaging/sqs.d.ts +105 -0
  80. package/dist/lib/resources/aws/messaging/sqs.js +231 -0
  81. package/dist/lib/resources/aws/messaging/utils.d.ts +3 -0
  82. package/dist/lib/resources/aws/messaging/utils.js +7 -0
  83. package/dist/lib/resources/aws/networking/ipam.js +1 -2
  84. package/dist/lib/resources/aws/networking/ipamPool.js +3 -2
  85. package/dist/lib/resources/aws/networking/vpc.js +1 -2
  86. package/dist/lib/resources/aws/storage/ecr.js +8 -5
  87. package/dist/lib/resources/aws/storage/s3.js +1 -2
  88. package/dist/lib/resources/aws/utilities/awsCustomResource.js +1 -1
  89. package/dist/lib/resources/aws/utilities/customResource.js +1 -1
  90. package/dist/lib/utils/getConfig.js +3 -2
  91. package/dist/lib/utils/index.d.ts +1 -0
  92. package/dist/lib/utils/index.js +2 -1
  93. package/dist/lib/utils/manifestWriter.d.ts +174 -0
  94. package/dist/lib/utils/manifestWriter.js +233 -0
  95. package/dist/lib/utils/standardTagsAspect.js +1 -8
  96. package/dist/lib/utils/validationLogger.d.ts +34 -0
  97. package/dist/lib/utils/validationLogger.js +83 -0
  98. package/package.json +3 -3
  99. package/dist/lib/__tests__/setup.d.ts +0 -48
  100. package/dist/lib/__tests__/setup.js +0 -1
  101. package/dist/lib/patterns/aws/cicdRole.d.ts +0 -67
  102. package/dist/lib/patterns/aws/cicdRole.js +0 -68
  103. package/dist/lib/resources/aws/cicd/cicdRole.d.ts +0 -65
  104. package/dist/lib/resources/aws/cicd/cicdRole.js +0 -191
  105. package/dist/lib/resources/aws/compute/ecsFreeTier.d.ts +0 -75
  106. package/dist/lib/resources/aws/compute/ecsFreeTier.js +0 -1
  107. package/dist/lib/resources/aws/compute/ecsSpot.d.ts +0 -75
  108. package/dist/lib/resources/aws/compute/ecsSpot.js +0 -1
  109. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.d.ts +0 -20
  110. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +0 -1
  111. package/dist/lib/resources/aws/utilities/cfnOutput.d.ts +0 -5
  112. package/dist/lib/resources/aws/utilities/cfnOutput.js +0 -1
@@ -105,9 +105,7 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
105
105
  });
106
106
  }
107
107
  createPermissionSet(props) {
108
- // Create permission sets
109
108
  for (const [name, config] of Object.entries(defaultPermissionSets)) {
110
- // Create Groups
111
109
  const group = new identityCenter_1.Group(this, `${name}Group`, {
112
110
  displayName: name,
113
111
  identityStoreId: this.identityStoreId,
@@ -122,7 +120,6 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
122
120
  tags: props.tags
123
121
  });
124
122
  permissionSet.node.addDependency(group);
125
- // Attach Policies to Permission Sets
126
123
  const attachManagedPolicy = new attachManagedPolicy_1.AttachManagedPolicy(this, `AttachManagedPolicy${name}`, {
127
124
  instanceArn: this.identityCenterArn,
128
125
  permissionSet: name,
@@ -136,7 +133,6 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
136
133
  value: group.getGroupId(),
137
134
  exportName: `${name}GroupId`
138
135
  });
139
- // Assign Groups to AWS Accounts
140
136
  for (const [accountName, accountId] of Object.entries(props.accounts)) {
141
137
  const permissionSetArn = permissionSet.getPermissionSetArn();
142
138
  const groupId = group.getGroupId();
@@ -159,4 +155,4 @@ class IdentityCenter extends aws_cdk_lib_1.NestedStack {
159
155
  }
160
156
  }
161
157
  exports.IdentityCenter = IdentityCenter;
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFFaEUsaURBSTZCO0FBQzdCLDZDQUE0RTtBQUM1RSx1RkFBb0Y7QUFFcEYscUVBQWtFO0FBQ2xFLDJFQUlnRDtBQUNoRCxvR0FBaUc7QUFDakcsbURBQTJDO0FBQzNDLDZDQUF1QztBQUN2QyxpREFBOEQ7QUFZOUQsTUFBTSxxQkFBcUIsR0FBd0M7SUFDakUsbUJBQW1CLEVBQUU7UUFDbkIsTUFBTSxFQUFFLDZDQUE2QztRQUNyRCxXQUFXLEVBQUUsMERBQTBEO0tBQ3hFO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsTUFBTSxFQUFFLHdDQUF3QztRQUNoRCxXQUFXLEVBQUUscURBQXFEO0tBQ25FO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsTUFBTSxFQUFFLGtEQUFrRDtRQUMxRCxXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQUVGLE1BQWEsY0FBZSxTQUFRLHlCQUFXO0lBSzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsc0dBQXNHO1FBQ3RHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLFVBQUksQ0FDbkMsSUFBSSxFQUNKLGtDQUFrQyxFQUNsQztZQUNFLFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQ3ZELFdBQVcsRUFBRSx3REFBd0Q7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Z0JBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksMkJBQVUsQ0FDL0IsSUFBSSxFQUNKLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxXQUFXLENBQUMsR0FBRyxJQUFJLFlBQVksRUFDcEQ7b0JBQ0UsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLGdCQUFnQixFQUFFLGdCQUFnQjtvQkFDbEMsYUFBYSxFQUFFLE9BQU87b0JBQ3RCLFdBQVcsRUFBRSxPQUFPO29CQUNwQixVQUFVLEVBQUUsYUFBYTtvQkFDekIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCO2lCQUNqQyxDQUNGLENBQUM7Z0JBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSwwQkFBUyxDQUN6QixJQUFJLEVBQ0osR0FBRyxJQUFBLHFDQUFpQixFQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksaUJBQWlCLEVBQ3pEO29CQUNFLGVBQWUsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7aUJBQ3RDLENBQ0YsQ0FBQztnQkFDRixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM5QyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWhMRCx3Q0FnTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjdXN0b21SZXNvdXJjZXMgZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnQsXG4gIFNlcnZpY2VQcmluY2lwYWxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IENmbk91dHB1dCwgTmVzdGVkU3RhY2ssIHR5cGUgTmVzdGVkU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IHR5cGUgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHN0cmlwQW5kQ2FtZWxDYXNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmlwQW5kQ2FtZWxDYXNlXCI7XG5pbXBvcnQge1xuICBHcm91cCxcbiAgUGVybWlzc2lvblNldCxcbiAgQXNzaWdubWVudFxufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7IEF0dGFjaE1hbmFnZWRQb2xpY3kgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvYXR0YWNoTWFuYWdlZFBvbGljeVwiO1xuaW1wb3J0IHsgVGltZVNsZWVwIH0gZnJvbSBcImNkay10aW1lLXNsZWVwXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTWFuYWdlZFBvbGljeSwgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuXG5pbnRlcmZhY2UgSWRlbnRpdHlDZW50ZXJQcm9wcyBleHRlbmRzIE5lc3RlZFN0YWNrUHJvcHMge1xuICBhY2NvdW50czogS2V5VmFsdWU7XG4gIHRhZ3M/OiBLZXlWYWx1ZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25TZXRDb25maWcge1xuICBQb2xpY3k6IHN0cmluZztcbiAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRlZmF1bHRQZXJtaXNzaW9uU2V0czogUmVjb3JkPHN0cmluZywgUGVybWlzc2lvblNldENvbmZpZz4gPSB7XG4gIEFkbWluaXN0cmF0b3JBY2Nlc3M6IHtcbiAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvQWRtaW5pc3RyYXRvckFjY2Vzc1wiLFxuICAgIERlc2NyaXB0aW9uOiBcIlBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkIEFkbWluaXN0cmF0b3JBY2Nlc3MgcG9saWN5XCJcbiAgfSxcbiAgUmVhZE9ubHlBY2Nlc3M6IHtcbiAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvUmVhZE9ubHlBY2Nlc3NcIixcbiAgICBEZXNjcmlwdGlvbjogXCJQZXJtaXNzaW9uIHNldCBmb3IgYXNzb2NpYXRlZCBSZWFkT25seUFjY2VzcyBwb2xpY3lcIlxuICB9LFxuICBCaWxsaW5nOiB7XG4gICAgUG9saWN5OiBcImFybjphd3M6aWFtOjphd3M6cG9saWN5L0FXU0JpbGxpbmdSZWFkT25seUFjY2Vzc1wiLFxuICAgIERlc2NyaXB0aW9uOiBcIlBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkIEJpbGxpbmcgcG9saWN5XCJcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIElkZW50aXR5Q2VudGVyIGV4dGVuZHMgTmVzdGVkU3RhY2sge1xuICBwdWJsaWMgaWRlbnRpdHlTdG9yZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBpZGVudGl0eUNlbnRlckFybjogc3RyaW5nO1xuICBwcml2YXRlIGlkZW50aXR5Q2VudGVySWFtUm9sZTogUm9sZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSWRlbnRpdHlDZW50ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jcmVhdGVJZGVudGl0eUNlbnRlcklhbVJvbGUoKTtcbiAgICB0aGlzLmxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlKCk7XG4gICAgdGhpcy5jcmVhdGVQZXJtaXNzaW9uU2V0KHByb3BzKTtcbiAgfVxuXG4gIGNyZWF0ZUlkZW50aXR5Q2VudGVySWFtUm9sZSgpIHtcbiAgICAvLyBSZW1vdmUgdGhpcyByb2xlLCBvciB1cGRhdGUgcGVybWlzc2lvbnMgd2hlbiB3ZSdyZSByZWFkeSB0byB0cm91Ymxlc2hvb3QgaW50ZXJtaXR0ZW50IHBvbGljeSBlcnJvcnNcbiAgICB0aGlzLmlkZW50aXR5Q2VudGVySWFtUm9sZSA9IG5ldyBSb2xlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSWRlbnRpdHlDZW50ZXJDdXN0b21SZXNvdXJjZVJvbGVcIixcbiAgICAgIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbChcImxhbWJkYS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJTaGFyZWQgcm9sZSBmb3IgYWxsIElkZW50aXR5IENlbnRlciBBd3NDdXN0b21SZXNvdXJjZXNcIixcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIlxuICAgICAgICAgICksXG4gICAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgICBcIkFXU1NTT01hc3RlckFjY291bnRBZG1pbmlzdHJhdG9yXCJcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgSWRlbnRpdHlDZW50ZXJDdXN0b21SZXNvdXJjZVBvbGljeTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1wic3NvOipcIiwgXCJpYW06KlwiXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICAvLyBSZW1vdmUgdGhpcyByb2xlLCBvciB1cGRhdGUgcGVybWlzc2lvbnMgd2hlbiB3ZSdyZSByZWFkeSB0byB0cm91Ymxlc2hvb3QgaW50ZXJtaXR0ZW50IHBvbGljeSBlcnJvcnNcbiAgICAvLyBjb25zdCBjZm5Sb2xlID0gdGhpcy5pZGVudGl0eUNlbnRlcklhbVJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZTtcbiAgICAvLyBjZm5Sb2xlLmFkZFByb3BlcnR5T3ZlcnJpZGUoXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcIiwge1xuICAgIC8vICAgVmVyc2lvbjogXCIyMDEyLTEwLTE3XCIsXG4gICAgLy8gICBTdGF0ZW1lbnQ6IFtcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgIC8vICAgICAgIFByaW5jaXBhbDoge1xuICAgIC8vICAgICAgICAgQVdTOiBcIipcIlxuICAgIC8vICAgICAgIH0sXG4gICAgLy8gICAgICAgQWN0aW9uOiBcInN0czpBc3N1bWVSb2xlXCJcbiAgICAvLyAgICAgfVxuICAgIC8vICAgXVxuICAgIC8vIH0pO1xuICB9XG5cbiAgbGlzdElkZW50aXR5Q2VudGVySW5zdGFuY2UoKSB7XG4gICAgY29uc3QgY3VzdG9tUmVzb3VyY2UgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgXCJMaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZVJlc291cmNlXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJsaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZVwiLFxuICAgICAgICBvbkNyZWF0ZToge1xuICAgICAgICAgIHNlcnZpY2U6IFwic3NvLWFkbWluXCIsXG4gICAgICAgICAgYWN0aW9uOiBcIkxpc3RJbnN0YW5jZXNDb21tYW5kXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgTWF4UmVzdWx0czogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjdXN0b21SZXNvdXJjZXMuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgICAgXCJsaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZVwiXG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICByb2xlOiB0aGlzLmlkZW50aXR5Q2VudGVySWFtUm9sZSxcbiAgICAgICAgLy8gVE9ETzogTG9jayBkb3duIHBlcm1pc3Npb25zLCB3aGVuIHdlJ3JlIHJlYWR5IHRvIHRyb3VibGVzaG9vdCBpbnRlcm1pdHRlbnQgcG9saWN5IGVycm9yc1xuICAgICAgICAvLyBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICAvLyAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAvLyB9KSxcbiAgICAgICAgLy8gcG9saWN5OiBjdXN0b21SZXNvdXJjZXMuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICAvLyAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAvLyAgICAgYWN0aW9uczogW1wic3NvOkxpc3RJbnN0YW5jZXNcIl0sXG4gICAgICAgIC8vICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgLy8gICB9KVxuICAgICAgICAvLyBdKSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6SWFtSWRlbnRpdHlDZW50ZXJcIlxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmlkZW50aXR5Q2VudGVyQXJuID0gY3VzdG9tUmVzb3VyY2UuZ2V0UmVzcG9uc2VGaWVsZChcbiAgICAgIFwiSW5zdGFuY2VzLjAuSW5zdGFuY2VBcm5cIlxuICAgICk7XG4gICAgdGhpcy5pZGVudGl0eVN0b3JlSWQgPSBjdXN0b21SZXNvdXJjZS5nZXRSZXNwb25zZUZpZWxkKFxuICAgICAgXCJJbnN0YW5jZXMuMC5JZGVudGl0eVN0b3JlSWRcIlxuICAgICk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcIklkZW50aXR5Q2VudGVyQXJuT3V0cHV0XCIsIHtcbiAgICAgIGtleTogXCJpZGVudGl0eUNlbnRlckFyblwiLFxuICAgICAgdmFsdWU6IHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4sXG4gICAgICBleHBvcnROYW1lOiBcImlkZW50aXR5Q2VudGVyQXJuXCJcbiAgICB9KTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiSWRlbnRpdHlTdG9yZUlkT3V0cHV0XCIsIHtcbiAgICAgIGtleTogXCJpZGVudGl0eVN0b3JlSURcIixcbiAgICAgIHZhbHVlOiB0aGlzLmlkZW50aXR5U3RvcmVJZCxcbiAgICAgIGV4cG9ydE5hbWU6IFwiaWRlbnRpdHlTdG9yZUlkXCJcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVBlcm1pc3Npb25TZXQocHJvcHM6IElkZW50aXR5Q2VudGVyUHJvcHMpIHtcbiAgICAvLyBDcmVhdGUgcGVybWlzc2lvbiBzZXRzXG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0UGVybWlzc2lvblNldHMpKSB7XG4gICAgICAvLyBDcmVhdGUgR3JvdXBzXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBHcm91cCh0aGlzLCBgJHtuYW1lfUdyb3VwYCwge1xuICAgICAgICBkaXNwbGF5TmFtZTogbmFtZSxcbiAgICAgICAgaWRlbnRpdHlTdG9yZUlkOiB0aGlzLmlkZW50aXR5U3RvcmVJZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBHcm91cCBmb3IgYXNzb2NpYXRlZCAke25hbWV9IHBlcm1pc3Npb24gc2V0YCxcbiAgICAgICAgcm9sZTogdGhpcy5pZGVudGl0eUNlbnRlcklhbVJvbGVcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwZXJtaXNzaW9uU2V0ID0gbmV3IFBlcm1pc3Npb25TZXQodGhpcywgYFBlcm1pc3Npb25TZXQke25hbWV9YCwge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBpbnN0YW5jZUFybjogdGhpcy5pZGVudGl0eUNlbnRlckFybixcbiAgICAgICAgZGVzY3JpcHRpb246IGNvbmZpZy5EZXNjcmlwdGlvbixcbiAgICAgICAgcm9sZTogdGhpcy5pZGVudGl0eUNlbnRlcklhbVJvbGUsXG4gICAgICAgIHRhZ3M6IHByb3BzLnRhZ3NcbiAgICAgIH0pO1xuICAgICAgcGVybWlzc2lvblNldC5ub2RlLmFkZERlcGVuZGVuY3koZ3JvdXApO1xuXG4gICAgICAvLyBBdHRhY2ggUG9saWNpZXMgdG8gUGVybWlzc2lvbiBTZXRzXG4gICAgICBjb25zdCBhdHRhY2hNYW5hZ2VkUG9saWN5ID0gbmV3IEF0dGFjaE1hbmFnZWRQb2xpY3koXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBBdHRhY2hNYW5hZ2VkUG9saWN5JHtuYW1lfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBpbnN0YW5jZUFybjogdGhpcy5pZGVudGl0eUNlbnRlckFybixcbiAgICAgICAgICBwZXJtaXNzaW9uU2V0OiBuYW1lLFxuICAgICAgICAgIHBlcm1pc3Npb25TZXRBcm46IHBlcm1pc3Npb25TZXQuZ2V0UGVybWlzc2lvblNldEFybigpLFxuICAgICAgICAgIG1hbmFnZWRQb2xpY3lBcm46IGNvbmZpZy5Qb2xpY3ksXG4gICAgICAgICAgcm9sZTogdGhpcy5pZGVudGl0eUNlbnRlcklhbVJvbGVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGF0dGFjaE1hbmFnZWRQb2xpY3kubm9kZS5hZGREZXBlbmRlbmN5KHBlcm1pc3Npb25TZXQpO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke25hbWV9R3JvdXBJZGAsIHtcbiAgICAgICAga2V5OiBgJHtuYW1lfUdyb3VwSWRgLFxuICAgICAgICB2YWx1ZTogZ3JvdXAuZ2V0R3JvdXBJZCgpLFxuICAgICAgICBleHBvcnROYW1lOiBgJHtuYW1lfUdyb3VwSWRgXG4gICAgICB9KTtcblxuICAgICAgLy8gQXNzaWduIEdyb3VwcyB0byBBV1MgQWNjb3VudHNcbiAgICAgIGZvciAoY29uc3QgW2FjY291bnROYW1lLCBhY2NvdW50SWRdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLmFjY291bnRzKSkge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9uU2V0QXJuID0gcGVybWlzc2lvblNldC5nZXRQZXJtaXNzaW9uU2V0QXJuKCk7XG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBncm91cC5nZXRHcm91cElkKCk7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgQXNzaWdubWVudChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3N0cmlwQW5kQ2FtZWxDYXNlKGFjY291bnROYW1lKX0ke25hbWV9QXNzaWdubWVudGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5zdGFuY2VBcm46IHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4sXG4gICAgICAgICAgICBwZXJtaXNzaW9uU2V0QXJuOiBwZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgICAgICAgcHJpbmNpcGFsVHlwZTogXCJHUk9VUFwiLFxuICAgICAgICAgICAgcHJpbmNpcGFsSWQ6IGdyb3VwSWQsXG4gICAgICAgICAgICB0YXJnZXRUeXBlOiBcIkFXU19BQ0NPVU5UXCIsXG4gICAgICAgICAgICB0YXJnZXRJZDogYWNjb3VudElkLFxuICAgICAgICAgICAgcm9sZTogdGhpcy5pZGVudGl0eUNlbnRlcklhbVJvbGVcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc2xlZXAgPSBuZXcgVGltZVNsZWVwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7c3RyaXBBbmRDYW1lbENhc2UoYWNjb3VudE5hbWUpfSR7bmFtZX1Bc3NpZ25tZW50U2xlZXBgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc3Ryb3lEdXJhdGlvbjogRHVyYXRpb24uc2Vjb25kcyg2MClcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHNsZWVwLm5vZGUuYWRkRGVwZW5kZW5jeShhdHRhY2hNYW5hZ2VkUG9saWN5KTtcbiAgICAgICAgYXNzaWdubWVudC5ub2RlLmFkZERlcGVuZGVuY3koc2xlZXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHlDZW50ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9pZGVudGl0eUNlbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFFaEUsaURBSTZCO0FBQzdCLDZDQUE0RTtBQUM1RSx1RkFBb0Y7QUFFcEYscUVBQWtFO0FBQ2xFLDJFQUlnRDtBQUNoRCxvR0FBaUc7QUFDakcsbURBQTJDO0FBQzNDLDZDQUF1QztBQUN2QyxpREFBOEQ7QUFZOUQsTUFBTSxxQkFBcUIsR0FBd0M7SUFDakUsbUJBQW1CLEVBQUU7UUFDbkIsTUFBTSxFQUFFLDZDQUE2QztRQUNyRCxXQUFXLEVBQUUsMERBQTBEO0tBQ3hFO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsTUFBTSxFQUFFLHdDQUF3QztRQUNoRCxXQUFXLEVBQUUscURBQXFEO0tBQ25FO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsTUFBTSxFQUFFLGtEQUFrRDtRQUMxRCxXQUFXLEVBQUUsOENBQThDO0tBQzVEO0NBQ0YsQ0FBQztBQUVGLE1BQWEsY0FBZSxTQUFRLHlCQUFXO0lBSzdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsc0dBQXNHO1FBQ3RHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLFVBQUksQ0FDbkMsSUFBSSxFQUNKLGtDQUFrQyxFQUNsQztZQUNFLFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQ3ZELFdBQVcsRUFBRSx3REFBd0Q7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RyxJQUFBLHFDQUFpQixFQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksWUFBWSxFQUNwRDtvQkFDRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtvQkFDbkMsZ0JBQWdCLEVBQUUsZ0JBQWdCO29CQUNsQyxhQUFhLEVBQUUsT0FBTztvQkFDdEIsV0FBVyxFQUFFLE9BQU87b0JBQ3BCLFVBQVUsRUFBRSxhQUFhO29CQUN6QixRQUFRLEVBQUUsU0FBUztvQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUI7aUJBQ2pDLENBQ0YsQ0FBQztnQkFFRixNQUFNLEtBQUssR0FBRyxJQUFJLDBCQUFTLENBQ3pCLElBQUksRUFDSixHQUFHLElBQUEscUNBQWlCLEVBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxpQkFBaUIsRUFDekQ7b0JBQ0UsZUFBZSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztpQkFDdEMsQ0FDRixDQUFDO2dCQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzlDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNUtELHdDQTRLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN1c3RvbVJlc291cmNlcyBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgUG9saWN5RG9jdW1lbnQsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgU2VydmljZVByaW5jaXBhbFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0LCBOZXN0ZWRTdGFjaywgdHlwZSBOZXN0ZWRTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgdHlwZSBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgc3RyaXBBbmRDYW1lbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaXBBbmRDYW1lbENhc2VcIjtcbmltcG9ydCB7XG4gIEdyb3VwLFxuICBQZXJtaXNzaW9uU2V0LFxuICBBc3NpZ25tZW50XG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlclwiO1xuaW1wb3J0IHsgQXR0YWNoTWFuYWdlZFBvbGljeSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hdHRhY2hNYW5hZ2VkUG9saWN5XCI7XG5pbXBvcnQgeyBUaW1lU2xlZXAgfSBmcm9tIFwiY2RrLXRpbWUtc2xlZXBcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5LCBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5cbmludGVyZmFjZSBJZGVudGl0eUNlbnRlclByb3BzIGV4dGVuZHMgTmVzdGVkU3RhY2tQcm9wcyB7XG4gIGFjY291bnRzOiBLZXlWYWx1ZTtcbiAgdGFncz86IEtleVZhbHVlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblNldENvbmZpZyB7XG4gIFBvbGljeTogc3RyaW5nO1xuICBEZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuY29uc3QgZGVmYXVsdFBlcm1pc3Npb25TZXRzOiBSZWNvcmQ8c3RyaW5nLCBQZXJtaXNzaW9uU2V0Q29uZmlnPiA9IHtcbiAgQWRtaW5pc3RyYXRvckFjY2Vzczoge1xuICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9BZG1pbmlzdHJhdG9yQWNjZXNzXCIsXG4gICAgRGVzY3JpcHRpb246IFwiUGVybWlzc2lvbiBzZXQgZm9yIGFzc29jaWF0ZWQgQWRtaW5pc3RyYXRvckFjY2VzcyBwb2xpY3lcIlxuICB9LFxuICBSZWFkT25seUFjY2Vzczoge1xuICAgIFBvbGljeTogXCJhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9SZWFkT25seUFjY2Vzc1wiLFxuICAgIERlc2NyaXB0aW9uOiBcIlBlcm1pc3Npb24gc2V0IGZvciBhc3NvY2lhdGVkIFJlYWRPbmx5QWNjZXNzIHBvbGljeVwiXG4gIH0sXG4gIEJpbGxpbmc6IHtcbiAgICBQb2xpY3k6IFwiYXJuOmF3czppYW06OmF3czpwb2xpY3kvQVdTQmlsbGluZ1JlYWRPbmx5QWNjZXNzXCIsXG4gICAgRGVzY3JpcHRpb246IFwiUGVybWlzc2lvbiBzZXQgZm9yIGFzc29jaWF0ZWQgQmlsbGluZyBwb2xpY3lcIlxuICB9XG59O1xuXG5leHBvcnQgY2xhc3MgSWRlbnRpdHlDZW50ZXIgZXh0ZW5kcyBOZXN0ZWRTdGFjayB7XG4gIHB1YmxpYyBpZGVudGl0eVN0b3JlSWQhOiBzdHJpbmc7XG4gIHB1YmxpYyBpZGVudGl0eUNlbnRlckFybiE6IHN0cmluZztcbiAgcHJpdmF0ZSBpZGVudGl0eUNlbnRlcklhbVJvbGUhOiBSb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJZGVudGl0eUNlbnRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmNyZWF0ZUlkZW50aXR5Q2VudGVySWFtUm9sZSgpO1xuICAgIHRoaXMubGlzdElkZW50aXR5Q2VudGVySW5zdGFuY2UoKTtcbiAgICB0aGlzLmNyZWF0ZVBlcm1pc3Npb25TZXQocHJvcHMpO1xuICB9XG5cbiAgY3JlYXRlSWRlbnRpdHlDZW50ZXJJYW1Sb2xlKCkge1xuICAgIC8vIFJlbW92ZSB0aGlzIHJvbGUsIG9yIHVwZGF0ZSBwZXJtaXNzaW9ucyB3aGVuIHdlJ3JlIHJlYWR5IHRvIHRyb3VibGVzaG9vdCBpbnRlcm1pdHRlbnQgcG9saWN5IGVycm9yc1xuICAgIHRoaXMuaWRlbnRpdHlDZW50ZXJJYW1Sb2xlID0gbmV3IFJvbGUoXG4gICAgICB0aGlzLFxuICAgICAgXCJJZGVudGl0eUNlbnRlckN1c3RvbVJlc291cmNlUm9sZVwiLFxuICAgICAge1xuICAgICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlNoYXJlZCByb2xlIGZvciBhbGwgSWRlbnRpdHkgQ2VudGVyIEF3c0N1c3RvbVJlc291cmNlc1wiLFxuICAgICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICAgIFwiQVdTU1NPTWFzdGVyQWNjb3VudEFkbWluaXN0cmF0b3JcIlxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICBJZGVudGl0eUNlbnRlckN1c3RvbVJlc291cmNlUG9saWN5OiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJzc286KlwiLCBcImlhbToqXCJdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIC8vIFJlbW92ZSB0aGlzIHJvbGUsIG9yIHVwZGF0ZSBwZXJtaXNzaW9ucyB3aGVuIHdlJ3JlIHJlYWR5IHRvIHRyb3VibGVzaG9vdCBpbnRlcm1pdHRlbnQgcG9saWN5IGVycm9yc1xuICAgIC8vIGNvbnN0IGNmblJvbGUgPSB0aGlzLmlkZW50aXR5Q2VudGVySWFtUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlO1xuICAgIC8vIGNmblJvbGUuYWRkUHJvcGVydHlPdmVycmlkZShcIkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFwiLCB7XG4gICAgLy8gICBWZXJzaW9uOiBcIjIwMTItMTAtMTdcIixcbiAgICAvLyAgIFN0YXRlbWVudDogW1xuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgLy8gICAgICAgUHJpbmNpcGFsOiB7XG4gICAgLy8gICAgICAgICBBV1M6IFwiKlwiXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgICBBY3Rpb246IFwic3RzOkFzc3VtZVJvbGVcIlxuICAgIC8vICAgICB9XG4gICAgLy8gICBdXG4gICAgLy8gfSk7XG4gIH1cblxuICBsaXN0SWRlbnRpdHlDZW50ZXJJbnN0YW5jZSgpIHtcbiAgICBjb25zdCBjdXN0b21SZXNvdXJjZSA9IG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBcIkxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlUmVzb3VyY2VcIixcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCIsXG4gICAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgICBhY3Rpb246IFwiTGlzdEluc3RhbmNlc0NvbW1hbmRcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBNYXhSZXN1bHRzOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICBcImxpc3RJZGVudGl0eUNlbnRlckluc3RhbmNlXCJcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IHRoaXMuaWRlbnRpdHlDZW50ZXJJYW1Sb2xlLFxuICAgICAgICAvLyBUT0RPOiBMb2NrIGRvd24gcGVybWlzc2lvbnMsIHdoZW4gd2UncmUgcmVhZHkgdG8gdHJvdWJsZXNob290IGludGVybWl0dGVudCBwb2xpY3kgZXJyb3JzXG4gICAgICAgIC8vIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TZGtDYWxscyh7XG4gICAgICAgIC8vICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgIC8vIH0pLFxuICAgICAgICAvLyBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgIC8vICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIC8vICAgICBhY3Rpb25zOiBbXCJzc286TGlzdEluc3RhbmNlc1wiXSxcbiAgICAgICAgLy8gICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAvLyAgIH0pXG4gICAgICAgIC8vIF0pLFxuICAgICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpJYW1JZGVudGl0eUNlbnRlclwiXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4gPSBjdXN0b21SZXNvdXJjZS5nZXRSZXNwb25zZUZpZWxkKFxuICAgICAgXCJJbnN0YW5jZXMuMC5JbnN0YW5jZUFyblwiXG4gICAgKTtcbiAgICB0aGlzLmlkZW50aXR5U3RvcmVJZCA9IGN1c3RvbVJlc291cmNlLmdldFJlc3BvbnNlRmllbGQoXG4gICAgICBcIkluc3RhbmNlcy4wLklkZW50aXR5U3RvcmVJZFwiXG4gICAgKTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiSWRlbnRpdHlDZW50ZXJBcm5PdXRwdXRcIiwge1xuICAgICAga2V5OiBcImlkZW50aXR5Q2VudGVyQXJuXCIsXG4gICAgICB2YWx1ZTogdGhpcy5pZGVudGl0eUNlbnRlckFybixcbiAgICAgIGV4cG9ydE5hbWU6IFwiaWRlbnRpdHlDZW50ZXJBcm5cIlxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJJZGVudGl0eVN0b3JlSWRPdXRwdXRcIiwge1xuICAgICAga2V5OiBcImlkZW50aXR5U3RvcmVJRFwiLFxuICAgICAgdmFsdWU6IHRoaXMuaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgZXhwb3J0TmFtZTogXCJpZGVudGl0eVN0b3JlSWRcIlxuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlUGVybWlzc2lvblNldChwcm9wczogSWRlbnRpdHlDZW50ZXJQcm9wcykge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdFBlcm1pc3Npb25TZXRzKSkge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgR3JvdXAodGhpcywgYCR7bmFtZX1Hcm91cGAsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgIGlkZW50aXR5U3RvcmVJZDogdGhpcy5pZGVudGl0eVN0b3JlSWQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgR3JvdXAgZm9yIGFzc29jaWF0ZWQgJHtuYW1lfSBwZXJtaXNzaW9uIHNldGAsXG4gICAgICAgIHJvbGU6IHRoaXMuaWRlbnRpdHlDZW50ZXJJYW1Sb2xlXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcGVybWlzc2lvblNldCA9IG5ldyBQZXJtaXNzaW9uU2V0KHRoaXMsIGBQZXJtaXNzaW9uU2V0JHtuYW1lfWAsIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgaW5zdGFuY2VBcm46IHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjb25maWcuRGVzY3JpcHRpb24sXG4gICAgICAgIHJvbGU6IHRoaXMuaWRlbnRpdHlDZW50ZXJJYW1Sb2xlLFxuICAgICAgICB0YWdzOiBwcm9wcy50YWdzXG4gICAgICB9KTtcbiAgICAgIHBlcm1pc3Npb25TZXQubm9kZS5hZGREZXBlbmRlbmN5KGdyb3VwKTtcblxuICAgICAgY29uc3QgYXR0YWNoTWFuYWdlZFBvbGljeSA9IG5ldyBBdHRhY2hNYW5hZ2VkUG9saWN5KFxuICAgICAgICB0aGlzLFxuICAgICAgICBgQXR0YWNoTWFuYWdlZFBvbGljeSR7bmFtZX1gLFxuICAgICAgICB7XG4gICAgICAgICAgaW5zdGFuY2VBcm46IHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4sXG4gICAgICAgICAgcGVybWlzc2lvblNldDogbmFtZSxcbiAgICAgICAgICBwZXJtaXNzaW9uU2V0QXJuOiBwZXJtaXNzaW9uU2V0LmdldFBlcm1pc3Npb25TZXRBcm4oKSxcbiAgICAgICAgICBtYW5hZ2VkUG9saWN5QXJuOiBjb25maWcuUG9saWN5LFxuICAgICAgICAgIHJvbGU6IHRoaXMuaWRlbnRpdHlDZW50ZXJJYW1Sb2xlXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBhdHRhY2hNYW5hZ2VkUG9saWN5Lm5vZGUuYWRkRGVwZW5kZW5jeShwZXJtaXNzaW9uU2V0KTtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtuYW1lfUdyb3VwSWRgLCB7XG4gICAgICAgIGtleTogYCR7bmFtZX1Hcm91cElkYCxcbiAgICAgICAgdmFsdWU6IGdyb3VwLmdldEdyb3VwSWQoKSxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7bmFtZX1Hcm91cElkYFxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3QgW2FjY291bnROYW1lLCBhY2NvdW50SWRdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLmFjY291bnRzKSkge1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9uU2V0QXJuID0gcGVybWlzc2lvblNldC5nZXRQZXJtaXNzaW9uU2V0QXJuKCk7XG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBncm91cC5nZXRHcm91cElkKCk7XG4gICAgICAgIGNvbnN0IGFzc2lnbm1lbnQgPSBuZXcgQXNzaWdubWVudChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3N0cmlwQW5kQ2FtZWxDYXNlKGFjY291bnROYW1lKX0ke25hbWV9QXNzaWdubWVudGAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5zdGFuY2VBcm46IHRoaXMuaWRlbnRpdHlDZW50ZXJBcm4sXG4gICAgICAgICAgICBwZXJtaXNzaW9uU2V0QXJuOiBwZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgICAgICAgcHJpbmNpcGFsVHlwZTogXCJHUk9VUFwiLFxuICAgICAgICAgICAgcHJpbmNpcGFsSWQ6IGdyb3VwSWQsXG4gICAgICAgICAgICB0YXJnZXRUeXBlOiBcIkFXU19BQ0NPVU5UXCIsXG4gICAgICAgICAgICB0YXJnZXRJZDogYWNjb3VudElkLFxuICAgICAgICAgICAgcm9sZTogdGhpcy5pZGVudGl0eUNlbnRlcklhbVJvbGVcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgc2xlZXAgPSBuZXcgVGltZVNsZWVwKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7c3RyaXBBbmRDYW1lbENhc2UoYWNjb3VudE5hbWUpfSR7bmFtZX1Bc3NpZ25tZW50U2xlZXBgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc3Ryb3lEdXJhdGlvbjogRHVyYXRpb24uc2Vjb25kcyg2MClcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHNsZWVwLm5vZGUuYWRkRGVwZW5kZW5jeShhdHRhY2hNYW5hZ2VkUG9saWN5KTtcbiAgICAgICAgYXNzaWdubWVudC5ub2RlLmFkZERlcGVuZGVuY3koc2xlZXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
@@ -35,14 +35,11 @@ class Organisation extends constructs_1.Construct {
35
35
  }
36
36
  addOrganisationUnitsAndAccounts(accounts, orgEmail) {
37
37
  for (const [environmentType, accountList] of Object.entries(accounts)) {
38
- // Create OU for each environment type
39
38
  const ouName = environmentType.charAt(0).toUpperCase() + environmentType.slice(1);
40
39
  const orgUnit = this.addOrganisationalUnit(`${ouName}OrganizationalUnit`, ouName);
41
- // Convert single account to array for uniform processing
42
40
  const accountsArray = Array.isArray(accountList)
43
41
  ? accountList
44
42
  : [accountList];
45
- // Add accounts to this OU
46
43
  for (const accountName of accountsArray) {
47
44
  const accountNameId = (0, stripAndCamelCase_1.stripAndCamelCase)(accountName);
48
45
  const importedAccount = this.existingAccounts?.find((account) => account.Name === accountName);
@@ -92,4 +89,4 @@ class Organisation extends constructs_1.Construct {
92
89
  }
93
90
  }
94
91
  exports.default = Organisation;
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3Mvb3JnYW5pc2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQStEO0FBQy9ELDJDQUF1QztBQUN2QyxxRUFBa0U7QUFFbEUsb0VBTXNDO0FBQ3RDLG1FQUE0RDtBQWM1RDs7R0FFRztBQUVILE1BQXFCLFlBQWEsU0FBUSxzQkFBUztJQVFqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMWCxhQUFRLEdBQWEsRUFBRSxDQUFDO1FBRXhCLHdCQUFtQixHQUF5QixFQUFFLENBQUM7UUFLckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sZUFBZSxDQUFDLGdCQUF3QjtRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZ0NBQVksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDM0QsVUFBVSxFQUFFLDhCQUFVLENBQUMsR0FBRztTQUMzQixDQUFDLENBQUM7UUFFSCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sbUJBQW1CLEdBQWlCO1lBQ3hDLDhCQUFVLENBQUMsc0JBQXNCO1lBQ2pDLDhCQUFVLENBQUMsVUFBVTtZQUNyQiw4QkFBVSxDQUFDLGFBQWE7WUFDeEIsOEJBQVUsQ0FBQyx5QkFBeUI7U0FDckMsQ0FBQztRQUVGLEtBQUssTUFBTSxVQUFVLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRU8sK0JBQStCLENBQ3JDLFFBQXdCLEVBQ3hCLFFBQWdCO1FBRWhCLEtBQUssTUFBTSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEUsc0NBQXNDO1lBQ3RDLE1BQU0sTUFBTSxHQUNWLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3hDLEdBQUcsTUFBTSxvQkFBb0IsRUFDN0IsTUFBTSxDQUNQLENBQUM7WUFFRix5REFBeUQ7WUFDekQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxXQUFXO2dCQUNiLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRWxCLDBCQUEwQjtZQUMxQixLQUFLLE1BQU0sV0FBVyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLGFBQWEsR0FBRyxJQUFBLHFDQUFpQixFQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUVyRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUNqRCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQzFDLENBQUM7Z0JBQ0YsTUFBTSxZQUFZLEdBQUcsZUFBZTtvQkFDbEMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLO29CQUN2QixDQUFDLENBQUMsSUFBQSwwQkFBZ0IsRUFBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBRTVELElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQ2IsR0FBRyxhQUFhLFNBQVMsRUFDekIsV0FBVyxFQUNYLFlBQVksRUFDWixFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsRUFDeEIsT0FBTyxDQUNSLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEVBQVUsRUFBRSxJQUFZO1FBQ3BELE1BQU0sRUFBRSxHQUFHLElBQUksc0NBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUMxQyxzQkFBc0IsRUFBRSxJQUFJO1lBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUk7WUFDOUIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLFVBQVUsQ0FDaEIsRUFBVSxFQUNWLElBQVksRUFDWixLQUFhLEVBQ2IsSUFBK0IsRUFDL0Isa0JBQXNDO1FBRXRDLE1BQU0sR0FBRyxHQUFHLElBQUksMkJBQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ2hDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsa0JBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRXBDLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtZQUM3QixHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDcEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVU7WUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQTlIRCwrQkE4SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIFRhZ3MsIHR5cGUgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHN0cmlwQW5kQ2FtZWxDYXNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmlwQW5kQ2FtZWxDYXNlXCI7XG5pbXBvcnQgeyB0eXBlIEFjY291bnQgYXMgRXhpc3RpbmdBY2NvdW50cyB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQWNjb3VudCxcbiAgRmVhdHVyZVNldCxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25hbFVuaXQsXG4gIFBvbGljeVR5cGVcbn0gZnJvbSBcIkBwZXBwZXJpemUvY2RrLW9yZ2FuaXphdGlvbnNcIjtcbmltcG9ydCBhZGRTdWZmaXhUb0VtYWlsIGZyb20gXCIuLi8uLi91dGlscy9hZGRTdWZmaXhUb0VtYWlsXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmludGVyZmFjZSBPcmdhbmlzYXRpb25Qcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbiAgb3JnRW1haWw6IHN0cmluZztcbiAgZXhpc3RpbmdBY2NvdW50cz86IEV4aXN0aW5nQWNjb3VudHNbXTtcbn1cblxudHlwZSBBY2NvdW50c0NvbmZpZyA9IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEEgY29uc3RydWN0IGZvciBjcmVhdGluZyBtdWx0aSBlbnZpcm9ubWVudCBvcmdhbmlzYXRpb25zIHdpdGggYSBwcm9kdWN0aW9uLCBzdGFnaW5nIGFuZCBkZXZlbG9wbWVudCBhY2NvdW50LlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZ2FuaXNhdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBhY2NvdW50SWQ6IENmbk91dHB1dDtcblxuICBwcml2YXRlIGV4aXN0aW5nQWNjb3VudHM/OiBFeGlzdGluZ0FjY291bnRzW107XG4gIHByaXZhdGUgYWNjb3VudHM6IEtleVZhbHVlID0ge307XG4gIHByaXZhdGUgb3JnYW5pc2F0aW9uOiBPcmdhbml6YXRpb247XG4gIHByaXZhdGUgb3JnYW5pc2F0aW9uYWxVbml0czogT3JnYW5pemF0aW9uYWxVbml0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5leGlzdGluZ0FjY291bnRzID0gcHJvcHMuZXhpc3RpbmdBY2NvdW50cztcbiAgICB0aGlzLmFkZE9yZ2FuaXNhdGlvbihwcm9wcy5vcmdhbmlzYXRpb25OYW1lKTtcbiAgICB0aGlzLmFkZE9yZ2FuaXNhdGlvblVuaXRzQW5kQWNjb3VudHMocHJvcHMuYWNjb3VudHMsIHByb3BzLm9yZ0VtYWlsKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkT3JnYW5pc2F0aW9uKG9yZ2FuaXNhdGlvbk5hbWU6IHN0cmluZykge1xuICAgIHRoaXMub3JnYW5pc2F0aW9uID0gbmV3IE9yZ2FuaXphdGlvbih0aGlzLCBvcmdhbmlzYXRpb25OYW1lLCB7XG4gICAgICBmZWF0dXJlU2V0OiBGZWF0dXJlU2V0LkFMTFxuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogVmFsaWRhdGUgdGhpcyBlbmFibGVzIHRydXN0ZWQgYWNjZXNzXG4gICAgdGhpcy5vcmdhbmlzYXRpb24uZW5hYmxlQXdzU2VydmljZUFjY2VzcyhcImFjY291bnQuYW1hem9uYXdzLmNvbVwiKTtcblxuICAgIGNvbnN0IGVuZm9yY2VkUG9saWN5VHlwZXM6IFBvbGljeVR5cGVbXSA9IFtcbiAgICAgIFBvbGljeVR5cGUuU0VSVklDRV9DT05UUk9MX1BPTElDWSxcbiAgICAgIFBvbGljeVR5cGUuVEFHX1BPTElDWSxcbiAgICAgIFBvbGljeVR5cGUuQkFDS1VQX1BPTElDWSxcbiAgICAgIFBvbGljeVR5cGUuQUlTRVJWSUNFU19PUFRfT1VUX1BPTElDWVxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHBvbGljeVR5cGUgb2YgZW5mb3JjZWRQb2xpY3lUeXBlcykge1xuICAgICAgdGhpcy5vcmdhbmlzYXRpb24uZW5hYmxlUG9saWN5VHlwZShwb2xpY3lUeXBlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZE9yZ2FuaXNhdGlvblVuaXRzQW5kQWNjb3VudHMoXG4gICAgYWNjb3VudHM6IEFjY291bnRzQ29uZmlnLFxuICAgIG9yZ0VtYWlsOiBzdHJpbmdcbiAgKSB7XG4gICAgZm9yIChjb25zdCBbZW52aXJvbm1lbnRUeXBlLCBhY2NvdW50TGlzdF0gb2YgT2JqZWN0LmVudHJpZXMoYWNjb3VudHMpKSB7XG4gICAgICAvLyBDcmVhdGUgT1UgZm9yIGVhY2ggZW52aXJvbm1lbnQgdHlwZVxuICAgICAgY29uc3Qgb3VOYW1lID1cbiAgICAgICAgZW52aXJvbm1lbnRUeXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZW52aXJvbm1lbnRUeXBlLnNsaWNlKDEpO1xuICAgICAgY29uc3Qgb3JnVW5pdCA9IHRoaXMuYWRkT3JnYW5pc2F0aW9uYWxVbml0KFxuICAgICAgICBgJHtvdU5hbWV9T3JnYW5pemF0aW9uYWxVbml0YCxcbiAgICAgICAgb3VOYW1lXG4gICAgICApO1xuXG4gICAgICAvLyBDb252ZXJ0IHNpbmdsZSBhY2NvdW50IHRvIGFycmF5IGZvciB1bmlmb3JtIHByb2Nlc3NpbmdcbiAgICAgIGNvbnN0IGFjY291bnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGFjY291bnRMaXN0KVxuICAgICAgICA/IGFjY291bnRMaXN0XG4gICAgICAgIDogW2FjY291bnRMaXN0XTtcblxuICAgICAgLy8gQWRkIGFjY291bnRzIHRvIHRoaXMgT1VcbiAgICAgIGZvciAoY29uc3QgYWNjb3VudE5hbWUgb2YgYWNjb3VudHNBcnJheSkge1xuICAgICAgICBjb25zdCBhY2NvdW50TmFtZUlkID0gc3RyaXBBbmRDYW1lbENhc2UoYWNjb3VudE5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGltcG9ydGVkQWNjb3VudCA9IHRoaXMuZXhpc3RpbmdBY2NvdW50cz8uZmluZChcbiAgICAgICAgICAoYWNjb3VudCkgPT4gYWNjb3VudC5OYW1lID09PSBhY2NvdW50TmFtZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhY2NvdW50RW1haWwgPSBpbXBvcnRlZEFjY291bnRcbiAgICAgICAgICA/IGltcG9ydGVkQWNjb3VudC5FbWFpbFxuICAgICAgICAgIDogYWRkU3VmZml4VG9FbWFpbChvcmdFbWFpbCwgYWNjb3VudE5hbWVJZC50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgICBpZiAoYWNjb3VudEVtYWlsKSB7XG4gICAgICAgICAgdGhpcy5hZGRBY2NvdW50KFxuICAgICAgICAgICAgYCR7YWNjb3VudE5hbWVJZH1BY2NvdW50YCxcbiAgICAgICAgICAgIGFjY291bnROYW1lLFxuICAgICAgICAgICAgYWNjb3VudEVtYWlsLFxuICAgICAgICAgICAgeyBlbnY6IGVudmlyb25tZW50VHlwZSB9LFxuICAgICAgICAgICAgb3JnVW5pdFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZE9yZ2FuaXNhdGlvbmFsVW5pdChpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBPcmdhbml6YXRpb25hbFVuaXQge1xuICAgIGNvbnN0IG91ID0gbmV3IE9yZ2FuaXphdGlvbmFsVW5pdCh0aGlzLCBpZCwge1xuICAgICAgb3JnYW5pemF0aW9uYWxVbml0TmFtZTogbmFtZSxcbiAgICAgIHBhcmVudDogdGhpcy5vcmdhbmlzYXRpb24ucm9vdCxcbiAgICAgIGltcG9ydE9uRHVwbGljYXRlOiB0cnVlXG4gICAgfSk7XG5cbiAgICB0aGlzLm9yZ2FuaXNhdGlvbmFsVW5pdHMucHVzaChvdSk7XG4gICAgcmV0dXJuIG91O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBY2NvdW50KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgdGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBvcmdhbmlzYXRpb25hbFVuaXQ6IE9yZ2FuaXphdGlvbmFsVW5pdFxuICApOiBBY2NvdW50IHtcbiAgICBjb25zdCBhY2MgPSBuZXcgQWNjb3VudCh0aGlzLCBpZCwge1xuICAgICAgYWNjb3VudE5hbWU6IG5hbWUsXG4gICAgICBlbWFpbDogZW1haWwsXG4gICAgICBwYXJlbnQ6IG9yZ2FuaXNhdGlvbmFsVW5pdCxcbiAgICAgIGltcG9ydE9uRHVwbGljYXRlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHRhZyBpbiB0YWdzKSB7XG4gICAgICBUYWdzLm9mKGFjYykuYWRkKHRhZywgdGFnc1t0YWddKTtcbiAgICB9XG5cbiAgICB0aGlzLmFjY291bnRzW25hbWVdID0gYWNjLmFjY291bnRJZDtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9SWRgLCB7XG4gICAgICBrZXk6IGAke2lkfUlkYCxcbiAgICAgIHZhbHVlOiBhY2MuYWNjb3VudElkLFxuICAgICAgZXhwb3J0TmFtZTogYCR7aWR9SWRgXG4gICAgfSk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1Bcm5gLCB7XG4gICAgICBrZXk6IGAke2lkfUFybmAsXG4gICAgICB2YWx1ZTogYWNjLmFjY291bnRBcm4sXG4gICAgICBleHBvcnROYW1lOiBgJHtpZH1Bcm5gXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgcHVibGljIGdldEFjY291bnRzKCkge1xuICAgIHJldHVybiB0aGlzLmFjY291bnRzO1xuICB9XG59XG4iXX0=
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3Mvb3JnYW5pc2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQStEO0FBQy9ELDJDQUF1QztBQUN2QyxxRUFBa0U7QUFFbEUsb0VBTXNDO0FBQ3RDLG1FQUE0RDtBQWM1RDs7R0FFRztBQUVILE1BQXFCLFlBQWEsU0FBUSxzQkFBUztJQVFqRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFMWCxhQUFRLEdBQWEsRUFBRSxDQUFDO1FBRXhCLHdCQUFtQixHQUF5QixFQUFFLENBQUM7UUFLckQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sZUFBZSxDQUFDLGdCQUF3QjtRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksZ0NBQVksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDM0QsVUFBVSxFQUFFLDhCQUFVLENBQUMsR0FBRztTQUMzQixDQUFDLENBQUM7UUFFSCw2Q0FBNkM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sbUJBQW1CLEdBQWlCO1lBQ3hDLDhCQUFVLENBQUMsc0JBQXNCO1lBQ2pDLDhCQUFVLENBQUMsVUFBVTtZQUNyQiw4QkFBVSxDQUFDLGFBQWE7WUFDeEIsOEJBQVUsQ0FBQyx5QkFBeUI7U0FDckMsQ0FBQztRQUVGLEtBQUssTUFB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RTtZQUM3QixHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDcEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVU7WUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQTNIRCwrQkEySEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIFRhZ3MsIHR5cGUgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHN0cmlwQW5kQ2FtZWxDYXNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmlwQW5kQ2FtZWxDYXNlXCI7XG5pbXBvcnQgeyB0eXBlIEFjY291bnQgYXMgRXhpc3RpbmdBY2NvdW50cyB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQWNjb3VudCxcbiAgRmVhdHVyZVNldCxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25hbFVuaXQsXG4gIFBvbGljeVR5cGVcbn0gZnJvbSBcIkBwZXBwZXJpemUvY2RrLW9yZ2FuaXphdGlvbnNcIjtcbmltcG9ydCBhZGRTdWZmaXhUb0VtYWlsIGZyb20gXCIuLi8uLi91dGlscy9hZGRTdWZmaXhUb0VtYWlsXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmludGVyZmFjZSBPcmdhbmlzYXRpb25Qcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbiAgb3JnRW1haWw6IHN0cmluZztcbiAgZXhpc3RpbmdBY2NvdW50cz86IEV4aXN0aW5nQWNjb3VudHNbXTtcbn1cblxudHlwZSBBY2NvdW50c0NvbmZpZyA9IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEEgY29uc3RydWN0IGZvciBjcmVhdGluZyBtdWx0aSBlbnZpcm9ubWVudCBvcmdhbmlzYXRpb25zIHdpdGggYSBwcm9kdWN0aW9uLCBzdGFnaW5nIGFuZCBkZXZlbG9wbWVudCBhY2NvdW50LlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yZ2FuaXNhdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBhY2NvdW50SWQhOiBDZm5PdXRwdXQ7XG5cbiAgcHJpdmF0ZSBleGlzdGluZ0FjY291bnRzPzogRXhpc3RpbmdBY2NvdW50c1tdO1xuICBwcml2YXRlIGFjY291bnRzOiBLZXlWYWx1ZSA9IHt9O1xuICBwcml2YXRlIG9yZ2FuaXNhdGlvbiE6IE9yZ2FuaXphdGlvbjtcbiAgcHJpdmF0ZSBvcmdhbmlzYXRpb25hbFVuaXRzOiBPcmdhbml6YXRpb25hbFVuaXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmV4aXN0aW5nQWNjb3VudHMgPSBwcm9wcy5leGlzdGluZ0FjY291bnRzO1xuICAgIHRoaXMuYWRkT3JnYW5pc2F0aW9uKHByb3BzLm9yZ2FuaXNhdGlvbk5hbWUpO1xuICAgIHRoaXMuYWRkT3JnYW5pc2F0aW9uVW5pdHNBbmRBY2NvdW50cyhwcm9wcy5hY2NvdW50cywgcHJvcHMub3JnRW1haWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRPcmdhbmlzYXRpb24ob3JnYW5pc2F0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5vcmdhbmlzYXRpb24gPSBuZXcgT3JnYW5pemF0aW9uKHRoaXMsIG9yZ2FuaXNhdGlvbk5hbWUsIHtcbiAgICAgIGZlYXR1cmVTZXQ6IEZlYXR1cmVTZXQuQUxMXG4gICAgfSk7XG5cbiAgICAvLyBUT0RPOiBWYWxpZGF0ZSB0aGlzIGVuYWJsZXMgdHJ1c3RlZCBhY2Nlc3NcbiAgICB0aGlzLm9yZ2FuaXNhdGlvbi5lbmFibGVBd3NTZXJ2aWNlQWNjZXNzKFwiYWNjb3VudC5hbWF6b25hd3MuY29tXCIpO1xuXG4gICAgY29uc3QgZW5mb3JjZWRQb2xpY3lUeXBlczogUG9saWN5VHlwZVtdID0gW1xuICAgICAgUG9saWN5VHlwZS5TRVJWSUNFX0NPTlRST0xfUE9MSUNZLFxuICAgICAgUG9saWN5VHlwZS5UQUdfUE9MSUNZLFxuICAgICAgUG9saWN5VHlwZS5CQUNLVVBfUE9MSUNZLFxuICAgICAgUG9saWN5VHlwZS5BSVNFUlZJQ0VTX09QVF9PVVRfUE9MSUNZXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgcG9saWN5VHlwZSBvZiBlbmZvcmNlZFBvbGljeVR5cGVzKSB7XG4gICAgICB0aGlzLm9yZ2FuaXNhdGlvbi5lbmFibGVQb2xpY3lUeXBlKHBvbGljeVR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkT3JnYW5pc2F0aW9uVW5pdHNBbmRBY2NvdW50cyhcbiAgICBhY2NvdW50czogQWNjb3VudHNDb25maWcsXG4gICAgb3JnRW1haWw6IHN0cmluZ1xuICApIHtcbiAgICBmb3IgKGNvbnN0IFtlbnZpcm9ubWVudFR5cGUsIGFjY291bnRMaXN0XSBvZiBPYmplY3QuZW50cmllcyhhY2NvdW50cykpIHtcbiAgICAgIGNvbnN0IG91TmFtZSA9XG4gICAgICAgIGVudmlyb25tZW50VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGVudmlyb25tZW50VHlwZS5zbGljZSgxKTtcbiAgICAgIGNvbnN0IG9yZ1VuaXQgPSB0aGlzLmFkZE9yZ2FuaXNhdGlvbmFsVW5pdChcbiAgICAgICAgYCR7b3VOYW1lfU9yZ2FuaXphdGlvbmFsVW5pdGAsXG4gICAgICAgIG91TmFtZVxuICAgICAgKTtcblxuICAgICAgY29uc3QgYWNjb3VudHNBcnJheSA9IEFycmF5LmlzQXJyYXkoYWNjb3VudExpc3QpXG4gICAgICAgID8gYWNjb3VudExpc3RcbiAgICAgICAgOiBbYWNjb3VudExpc3RdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY291bnROYW1lIG9mIGFjY291bnRzQXJyYXkpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudE5hbWVJZCA9IHN0cmlwQW5kQ2FtZWxDYXNlKGFjY291bnROYW1lKTtcblxuICAgICAgICBjb25zdCBpbXBvcnRlZEFjY291bnQgPSB0aGlzLmV4aXN0aW5nQWNjb3VudHM/LmZpbmQoXG4gICAgICAgICAgKGFjY291bnQpID0+IGFjY291bnQuTmFtZSA9PT0gYWNjb3VudE5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYWNjb3VudEVtYWlsID0gaW1wb3J0ZWRBY2NvdW50XG4gICAgICAgICAgPyBpbXBvcnRlZEFjY291bnQuRW1haWxcbiAgICAgICAgICA6IGFkZFN1ZmZpeFRvRW1haWwob3JnRW1haWwsIGFjY291bnROYW1lSWQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgaWYgKGFjY291bnRFbWFpbCkge1xuICAgICAgICAgIHRoaXMuYWRkQWNjb3VudChcbiAgICAgICAgICAgIGAke2FjY291bnROYW1lSWR9QWNjb3VudGAsXG4gICAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgIGFjY291bnRFbWFpbCxcbiAgICAgICAgICAgIHsgZW52OiBlbnZpcm9ubWVudFR5cGUgfSxcbiAgICAgICAgICAgIG9yZ1VuaXRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRPcmdhbmlzYXRpb25hbFVuaXQoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogT3JnYW5pemF0aW9uYWxVbml0IHtcbiAgICBjb25zdCBvdSA9IG5ldyBPcmdhbml6YXRpb25hbFVuaXQodGhpcywgaWQsIHtcbiAgICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWU6IG5hbWUsXG4gICAgICBwYXJlbnQ6IHRoaXMub3JnYW5pc2F0aW9uLnJvb3QsXG4gICAgICBpbXBvcnRPbkR1cGxpY2F0ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5vcmdhbmlzYXRpb25hbFVuaXRzLnB1c2gob3UpO1xuICAgIHJldHVybiBvdTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQWNjb3VudChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgb3JnYW5pc2F0aW9uYWxVbml0OiBPcmdhbml6YXRpb25hbFVuaXRcbiAgKTogQWNjb3VudCB7XG4gICAgY29uc3QgYWNjID0gbmV3IEFjY291bnQodGhpcywgaWQsIHtcbiAgICAgIGFjY291bnROYW1lOiBuYW1lLFxuICAgICAgZW1haWw6IGVtYWlsLFxuICAgICAgcGFyZW50OiBvcmdhbmlzYXRpb25hbFVuaXQsXG4gICAgICBpbXBvcnRPbkR1cGxpY2F0ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCB0YWcgaW4gdGFncykge1xuICAgICAgVGFncy5vZihhY2MpLmFkZCh0YWcsIHRhZ3NbdGFnXSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY2NvdW50c1tuYW1lXSA9IGFjYy5hY2NvdW50SWQ7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUlkYCwge1xuICAgICAga2V5OiBgJHtpZH1JZGAsXG4gICAgICB2YWx1ZTogYWNjLmFjY291bnRJZCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke2lkfUlkYFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9QXJuYCwge1xuICAgICAga2V5OiBgJHtpZH1Bcm5gLFxuICAgICAgdmFsdWU6IGFjYy5hY2NvdW50QXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7aWR9QXJuYFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvdW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50cztcbiAgfVxufVxuIl19
@@ -2,3 +2,4 @@ export * from "./patterns/aws";
2
2
  export * from "./utils";
3
3
  export * from "./resources";
4
4
  export * from "./app";
5
+ export { Code, Runtime, FunctionUrlAuthType } from "aws-cdk-lib/aws-lambda";
package/dist/lib/index.js CHANGED
@@ -14,8 +14,14 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.FunctionUrlAuthType = exports.Runtime = exports.Code = void 0;
17
18
  __exportStar(require("./patterns/aws"), exports);
18
19
  __exportStar(require("./utils"), exports);
19
20
  __exportStar(require("./resources"), exports);
20
21
  __exportStar(require("./app"), exports);
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3BhdHRlcm5zL2F3c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc291cmNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBwXCI7XG4iXX0=
22
+ // Re-export CDK Lambda types for use in generated infrastructure code
23
+ var aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
24
+ Object.defineProperty(exports, "Code", { enumerable: true, get: function () { return aws_lambda_1.Code; } });
25
+ Object.defineProperty(exports, "Runtime", { enumerable: true, get: function () { return aws_lambda_1.Runtime; } });
26
+ Object.defineProperty(exports, "FunctionUrlAuthType", { enumerable: true, get: function () { return aws_lambda_1.FunctionUrlAuthType; } });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBK0I7QUFDL0IsMENBQXdCO0FBQ3hCLDhDQUE0QjtBQUM1Qix3Q0FBc0I7QUFFdEIsc0VBQXNFO0FBQ3RFLHFEQUE0RTtBQUFuRSxrR0FBQSxJQUFJLE9BQUE7QUFBRSxxR0FBQSxPQUFPLE9BQUE7QUFBRSxpSEFBQSxtQkFBbUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3BhdHRlcm5zL2F3c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Jlc291cmNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBwXCI7XG5cbi8vIFJlLWV4cG9ydCBDREsgTGFtYmRhIHR5cGVzIGZvciB1c2UgaW4gZ2VuZXJhdGVkIGluZnJhc3RydWN0dXJlIGNvZGVcbmV4cG9ydCB7IENvZGUsIFJ1bnRpbWUsIEZ1bmN0aW9uVXJsQXV0aFR5cGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuIl19
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Buildkite = exports.BuildkiteDefaultProps = void 0;
4
4
  const aws_cdk_lib_1 = require("aws-cdk-lib");
5
5
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
6
+ const validationLogger_js_1 = require("../../utils/validationLogger.js");
6
7
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
7
8
  const aws_autoscaling_1 = require("aws-cdk-lib/aws-autoscaling");
8
9
  const aws_sam_1 = require("aws-cdk-lib/aws-sam");
@@ -98,7 +99,7 @@ class Buildkite extends aws_cdk_lib_1.Stack {
98
99
  });
99
100
  }
100
101
  else {
101
- console.warn("WARN:'BUILDKITE_PRIVATE_SSH_KEY' environment variable not declared. Skipping upload of private SSH key");
102
+ validationLogger_js_1.FjallLogger.warn("'BUILDKITE_PRIVATE_SSH_KEY' environment variable not declared. Skipping upload of private SSH key.");
102
103
  }
103
104
  // Encrypted Buildkite Agent Token
104
105
  const agentToken = new secrets_1.SecureStringParameter(this, `${id}AgentToken`, {
@@ -358,4 +359,4 @@ class Buildkite extends aws_cdk_lib_1.Stack {
358
359
  }
359
360
  exports.Buildkite = Buildkite;
360
361
  exports.default = Buildkite;
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXFFO0FBQ3JFLGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFHcEYsSUFBSyxZQUlKO0FBSkQsV0FBSyxZQUFZO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsNkJBQWEsQ0FBQTtJQUNiLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUFtRFksUUFBQSxxQkFBcUIsR0E4QzlCO0lBQ0YsZ0NBQWdDO0lBQ2hDLG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsT0FBTyxFQUFFLEVBQUU7SUFDWCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsTUFBTTtJQUMxQyxrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLDRCQUE0QixFQUFFLEtBQUs7SUFDbkMseUJBQXlCLEVBQUUsRUFBRTtJQUM3QiwyQkFBMkIsRUFBRSxPQUFPO0lBQ3BDLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsNEJBQTRCLEVBQUUsRUFBRTtJQUNoQywrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLGtDQUFrQyxFQUFFLEtBQUs7SUFDekMsa0NBQWtDLEVBQUUsRUFBRTtJQUN0QyxjQUFjLEVBQUUsU0FBUztJQUN6QixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxFQUFFLEVBQUUsc0JBQVksQ0FBQyxLQUFLLENBQUM7SUFDeEUsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixpQkFBaUIsRUFBRSxFQUFFO0lBQ3JCLGVBQWUsRUFBRSxHQUFHO0lBQ3BCLHlCQUF5QixFQUFFLFVBQVU7SUFDckMscUJBQXFCLEVBQUUsS0FBSztJQUM1QixzQkFBc0IsRUFBRSxFQUFFO0lBQzFCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsc0JBQXNCLEVBQUUsS0FBSztJQUM3QixlQUFlLEVBQUUsRUFBRTtJQUNuQix3QkFBd0IsRUFBRSxNQUFNO0lBQ2hDLG1CQUFtQixFQUFFLElBQUk7SUFDekIsZUFBZSxFQUFFLElBQUk7SUFDckIsdUJBQXVCLEVBQUUsSUFBSTtJQUM3Qiw4QkFBOEIsRUFBRSxJQUFJO0lBQ3BDLHdCQUF3QixFQUFFLEtBQUs7SUFDL0IscUJBQXFCLEVBQUUsS0FBSztJQUM1QixlQUFlLEVBQUUsSUFBSTtJQUNyQiw4QkFBOEIsRUFBRSxLQUFLO0lBQ3JDLHFCQUFxQixFQUFFLEVBQUU7SUFDekIsMENBQTBDLEVBQUUsT0FBTztJQUNuRCxPQUFPO0lBQ1AsV0FBVyxFQUFFLFVBQVU7SUFDdkIsS0FBSyxFQUFFLFVBQVU7Q0FDbEIsQ0FBQztBQUVGLE1BQWEsU0FBVSxTQUFRLG1CQUFLO0lBQ2xDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsMkRBQTJEO1FBQzNELE1BQU0sSUFBSSxHQUFHO1lBQ1gsR0FBRyxLQUFLLENBQUMsSUFBSTtZQUNiLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksVUFBVTtZQUNuRSw4QkFBOEIsRUFBRSxXQUFXO1lBQzNDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLHdEQUF3RDtTQUNqSCxDQUFDO1FBRUYsTUFBTTtRQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ3BDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixtQkFBbUIsRUFBRTtnQkFDbkI7b0JBQ0UsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNiLFVBQVUsRUFBRSxvQkFBVSxDQUFDLE1BQU07aUJBQzlCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxtQkFBbUI7UUFDbkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxrQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVqRSxrQkFBa0I7UUFDbEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGtCQUFRLENBQ3ZDLElBQUksRUFDSixHQUFHLEVBQUUsc0JBQXNCLENBQzVCLENBQUM7UUFDRixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMxQyxJQUFJLG9DQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQ2xELE9BQU8sRUFBRTtvQkFDUCwwQkFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO2lCQUN0RTtnQkFDRCxpQkFBaUIsRUFBRSxvQkFBb0I7YUFDeEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBSSxDQUNWLHdHQUF3RyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztRQUVELGtDQUFrQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLCtCQUFxQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFO1lBQ3BFLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsU0FBUyxFQUFFLHFCQUFxQjtZQUNoQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUI7WUFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztZQUMzRCxJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTztZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBRUgsaUNBQWlDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksVUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO1lBQ2pELFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVztZQUMxQixXQUFXLEVBQUUsMEJBQTBCO1lBQ3ZDLGNBQWMsRUFBRTtnQkFDZCxDQUFDLDRCQUE0QixDQUFDLEVBQUUsSUFBSSx3QkFBYyxDQUFDO29CQUNqRCxVQUFVLEVBQUU7d0JBQ1YsSUFBSSx5QkFBZSxDQUFDOzRCQUNsQixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7NEJBQ3hCLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQzt5QkFDdkMsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2dCQUNGLENBQUMseUJBQXlCLENBQUMsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQzlDLFVBQVUsRUFBRTt3QkFDVixJQUFJLHlCQUFlLENBQUM7NEJBQ2xCLE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDOzRCQUM3QixTQUFTLEVBQUU7Z0NBQ1QsZUFBZSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sYUFBYSxVQUFVLENBQUMsSUFBSSxFQUFFOzZCQUNyRjt5QkFDRixDQUFDO3FCQUNIO2lCQUNGLENBQUM7Z0JBQ0YsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDL0MsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQzs0QkFDaEMsU0FBUyxFQUFFO2dDQUNULG9CQUFvQixDQUFDLFNBQVM7Z0NBQzlCLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxJQUFJOzZCQUN0Qzt5QkFDRixDQUFDO3FCQUNIO2lCQUNGLENBQUM7Z0JBQ0YsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDMUMsVUFBVSxFQUFFO3dCQUNWLElBQUkseUJBQWUsQ0FBQzs0QkFDbEIsT0FBTyxFQUFFO2dDQUNQLGNBQWM7Z0NBQ2QsaUJBQWlCO2dDQUNqQixxQkFBcUI7Z0NBQ3JCLHdCQUF3QjtnQ0FDeEIsZUFBZTtnQ0FDZixjQUFjO2dDQUNkLGlCQUFpQjtnQ0FDakIsd0JBQXdCOzZCQUN6Qjs0QkFDRCxTQUFTLEVBQUU7Z0NBQ1QsY0FBYyxDQUFDLFNBQVM7Z0NBQ3hCLEdBQUcsY0FBYyxDQUFDLFNBQVMsSUFBSTs2QkFDaEM7eUJBQ0YsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2dCQUNGLENBQUMsa0JBQWtCLENBQUMsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQ3ZDLFVBQVUsRUFBRTt3QkFDVixJQUFJLHlCQUFlLENBQUM7NEJBQ2xCLE9BQU8sRUFBRTtnQ0FDUCwwQ0FBMEM7Z0NBQzFDLDBCQUEwQjtnQ0FDMUIsc0NBQXNDO2dDQUN0QyxrQkFBa0I7NkJBQ25COzRCQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQzt5QkFDakIsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2dCQUNGLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSx3QkFBYyxDQUFDO29CQUM5QixVQUFVLEVBQUU7d0JBQ1YsSUFBSSx5QkFBZSxDQUFDOzRCQUNsQixPQUFPLEVBQUU7Z0NBQ1AscUJBQXFCO2dDQUNyQixzQkFBc0I7Z0NBQ3RCLG1CQUFtQjtnQ0FDbkIsd0JBQXdCO2dDQUN4Qix5QkFBeUI7NkJBQzFCOzRCQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQzt5QkFDakIsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2dCQUNGLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSx3QkFBYyxDQUFDO29CQUMxQixVQUFVLEVBQUU7d0JBQ1YsSUFBSSx5QkFBZSxDQUFDOzRCQUNsQixPQUFPLEVBQUU7Z0NBQ1AsZ0NBQWdDO2dDQUNoQyxzQkFBc0I7Z0NBQ3RCLGtCQUFrQjtnQ0FDbEIsK0JBQStCO2dDQUMvQixrQ0FBa0M7Z0NBQ2xDLCtCQUErQjtnQ0FDL0IsZ0NBQWdDO2dDQUNoQyw2QkFBNkI7Z0NBQzdCLGdDQUFnQztnQ0FDaEMsMkJBQTJCO2dDQUMzQix5QkFBeUI7Z0NBQ3pCLHlCQUF5QjtnQ0FDekIseUJBQXlCO2dDQUN6Qix1QkFBdUI7NkJBQ3hCOzRCQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQzt5QkFDakIsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2FBQ0g7WUFDRCxTQUFTLEVBQUUsSUFBSSw0QkFBa0IsQ0FDL0IsSUFBSSwwQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxFQUNqRCxJQUFJLDBCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQzFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSwyQkFBaUIsRUFBRSxDQUFDO1FBRWxELGVBQWU7UUFDZixNQUFNLG1CQUFtQixHQUFHLGtCQUFRLENBQUMsUUFBUSxDQUFDO1lBQzVDLE9BQU8sRUFBRSxlQUFlO1NBQ3pCLENBQUMsQ0FBQztRQUNILG1CQUFtQixDQUFDLFdBQVcsQ0FDN0Isc0JBQXNCLEVBQ3RCLDRCQUE0QixDQUM3QixDQUFDO1FBQ0YsaUJBQWlCLENBQUMsT0FBTyxDQUN2Qix1QkFBYSxDQUFDLFlBQVksQ0FDeEIsbUJBQW1CLEVBQ25CLHVDQUF1QyxDQUN4QyxDQUNGLENBQUM7UUFFRixnQkFBZ0I7UUFDaEIsTUFBTSxvQkFBb0IsR0FBRyxrQkFBUSxDQUFDLFFBQVEsQ0FBQztZQUM3QyxPQUFPLEVBQUUsZ0JBQWdCO1NBQzFCLENBQUMsQ0FBQztRQUNILG9CQUFvQixDQUFDLFdBQVcsQ0FDOUIsc0NBQXNDLEtBQUssQ0FBQyxxQkFBcUIsTUFBTSxFQUN2RSxpQ0FBaUMsS0FBSyxDQUFDLGVBQWUsTUFBTSxFQUM1RCw2Q0FBNkMsQ0FDOUMsQ0FBQztRQUNGLGlCQUFpQixDQUFDLE9BQU8sQ0FDdkIsdUJBQWEsQ0FBQyxZQUFZLENBQ3hCLG9CQUFvQixFQUNwQix3Q0FBd0MsQ0FDekMsQ0FDRixDQUFDO1FBRUYsbUJBQW1CO1FBQ25CLE1BQU0sdUJBQXVCLEdBQUcsa0JBQVEsQ0FBQyxRQUFRLENBQUM7WUFDaEQsT0FBTyxFQUFFLGdCQUFnQjtTQUMxQixDQUFDLENBQUM7UUFDSCx1QkFBdUIsQ0FBQyxXQUFXLENBQ2pDLHdCQUF3QixLQUFLLENBQUMsOEJBQThCLE1BQU0sRUFDbEUsd0JBQXdCLEtBQUssQ0FBQyx3QkFBd0IsTUFBTSxFQUM1RCwrQkFBK0IsS0FBSyxDQUFDLHdCQUF3QixNQUFNLEVBQ25FLHNDQUFzQyxLQUFLLENBQUMscUJBQXFCLE1BQU0sRUFDdkUsdUNBQXVDLENBQ3hDLENBQUM7UUFDRixpQkFBaUIsQ0FBQyxPQUFPLENBQ3ZCLHVCQUFhLENBQUMsWUFBWSxDQUN4Qix1QkFBdUIsRUFDdkIsd0NBQXdDLENBQ3pDLENBQ0YsQ0FBQztRQUVGLE1BQU0sMkJBQTJCLEdBQUcsa0JBQVEsQ0FBQyxRQUFRLENBQUM7WUFDcEQsT0FBTyxFQUFFLGdCQUFnQjtTQUMxQixDQUFDLENBQUM7UUFDSCwyQkFBMkIsQ0FBQyxXQUFXLENBQ3JDLHlCQUF5QixFQUFFLE1BQU0sRUFDakMsNEJBQTRCLEtBQUssQ0FBQyxtQkFBbUIsTUFBTSxFQUMzRCxtQ0FBbUMsS0FBSyxDQUFDLGlCQUFpQixNQUFNLEVBQ2hFLDZCQUE2QixvQkFBb0IsQ0FBQyxVQUFVLE1BQU0sRUFDbEUsb0NBQW9DLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxNQUFNLEVBQzNELCtCQUErQixVQUFVLENBQUMsSUFBSSxNQUFNLEVBQ3BELGtDQUFrQyxLQUFLLENBQUMsaUJBQWlCLE1BQU0sRUFDL0QseUJBQXlCLEtBQUssQ0FBQyxrQkFBa0IsTUFBTSxFQUN2RCxvQ0FBb0MsS0FBSyxDQUFDLDRCQUE0QixNQUFNLEVBQzVFLGdDQUFnQyxLQUFLLENBQUMseUJBQXlCLE1BQU0sRUFDckUsb0NBQW9DLEtBQUssQ0FBQyw0QkFBNEIsTUFBTSxFQUM1RSw0QkFBNEIsS0FBSyxDQUFDLHFCQUFxQixNQUFNLEVBQzdELHdDQUF3QyxLQUFLLENBQUMsK0JBQStCLE1BQU0sRUFDbkYsb0NBQW9DLEtBQUssQ0FBQyxxQkFBcUIsTUFBTSxFQUNyRSw2Q0FBNkMsS0FBSyxDQUFDLDBDQUEwQyxNQUFNLEVBQ25HLG9CQUFvQixLQUFLLENBQUMsY0FBYyxNQUFNLEVBQzlDLHVDQUF1QyxLQUFLLENBQUMsOEJBQThCLE1BQU0sRUFDakYsdUNBQXVDLEtBQUssQ0FBQyxrQkFBa0IsTUFBTSxFQUNyRSwyQkFBMkIsS0FBSyxDQUFDLGVBQWUsTUFBTSxFQUN0RCxzQ0FBc0MsS0FBSyxDQUFDLHFCQUFxQixNQUFNLEVBQ3ZFLG1DQUFtQyxLQUFLLENBQUMsa0JBQWtCLE1BQU0sRUFDakUseUJBQXlCLEtBQUssQ0FBQyxlQUFlLE1BQU0sRUFDcEQsMkNBQTJDLEtBQUssQ0FBQyxrQ0FBa0MsTUFBTSxFQUN6RiwwQ0FBMEMsS0FBSyxDQUFDLGtDQUFrQyxNQUFNLEVBQ3hGLHVCQUF1QixLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sTUFBTSxFQUM5QywyQkFBMkIsS0FBSyxDQUFDLG1CQUFtQixNQUFNLEVBQzFELHVCQUF1QixLQUFLLENBQUMsZUFBZSxNQUFNLEVBQ2xELGdDQUFnQyxLQUFLLENBQUMsdUJBQXVCLE1BQU0sRUFDbkUsd0JBQXdCLEtBQUssQ0FBQyx3QkFBd0IsTUFBTSxFQUM1RCx3QkFBd0IsS0FBSyxDQUFDLDhCQUE4QixNQUFNLEVBQ2xFLGVBQWUsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLE1BQU0sRUFDdEMsNENBQTRDLENBQzdDLENBQUM7UUFFRixrQkFBa0I7UUFDbEIsaUJBQWlCLENBQUMsT0FBTyxDQUN2Qix1QkFBYSxDQUFDLFlBQVksQ0FDeEIsMkJBQTJCLEVBQzNCLHdDQUF3QyxDQUN6QyxDQUNGLENBQUM7UUFFRixrQkFBa0I7UUFDbEIsTUFBTSxjQUFjLEdBQUcsSUFBSSx3QkFBYyxDQUN2QyxJQUFJLEVBQ0osR0FBRyxFQUFFLHFCQUFxQixFQUMxQjtZQUNFLGtCQUFrQixFQUFFLHlCQUF5QjtZQUM3QyxZQUFZLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUNyQyxZQUFZLEVBQUUsc0JBQVksQ0FBQyxNQUFNLENBQUM7Z0JBQ2hDLElBQUksRUFBRSxnQ0FBZ0M7Z0JBQ3RDLE1BQU0sRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDeEIsT0FBTyxFQUFFO29CQUNQLENBQUMsa0NBQWtDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztpQkFDOUM7YUFDRixDQUFDO1lBQ0YsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixJQUFJLEVBQUUsU0FBUztZQUNmLFlBQVksRUFBRTtnQkFDWjtvQkFDRSxVQUFVLEVBQUUsV0FBVztvQkFDdkIsTUFBTSxFQUFFLDJCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO2lCQUNyRDthQUNGO1lBQ0Qsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixhQUFhLEVBQUUsS0FBSztZQUNwQix1QkFBdUIsRUFBRSxDQUFDO1lBQzFCLFVBQVUsRUFBRSxrQ0FBd0IsQ0FBQyxRQUFRO1lBQzdDLG9CQUFvQixFQUFFLElBQUk7U0FDM0IsQ0FDRixDQUFDO1FBRUYscURBQXFEO1FBQ3JELGtCQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLGtCQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFcEUsb0JBQW9CO1FBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxrQ0FBZ0IsQ0FDM0MsSUFBSSxFQUNKLEdBQUcsRUFBRSx1QkFBdUIsRUFDNUI7WUFDRSxHQUFHLEVBQUUsR0FBRztZQUNSLG9CQUFvQixFQUFFO2dCQUNwQixjQUFjLEVBQUUsY0FBYztnQkFDOUIscUJBQXFCLEVBQUU7b0JBQ3JCLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxzQkFBc0I7b0JBQ2pFLHNCQUFzQixFQUFFLHdDQUFzQixDQUFDLGtCQUFrQjtpQkFDbEU7Z0JBQ0QsdUJBQXVCLEVBQUU7b0JBQ3ZCO3dCQUNFLFlBQVksRUFBRSxLQUFLLENBQUMsaUJBQWlCO3FCQUN0QztpQkFDRjthQUNGO1lBQ0QsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDcEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDcEMsUUFBUSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5QixZQUFZLEVBQUUsQ0FBQyw4QkFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLFlBQVksRUFBRSw4QkFBWSxDQUFDLGVBQWUsRUFBRTtZQUM1QyxnQ0FBZ0MsRUFBRSxJQUFJO1lBQ3RDLG1CQUFtQixFQUFFO2dCQUNuQixtQ0FBaUIsQ0FBQywyQkFBMkI7Z0JBQzdDLG1DQUFpQixDQUFDLDZCQUE2QjthQUNoRDtZQUNELHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FDRixDQUFDO1FBRUYsU0FBUyxDQUFDLGtCQUFrQixDQUMxQixJQUFJLFlBQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLDhCQUE4QixFQUFFO1lBQ3BELFVBQVUsRUFBRTtnQkFDVixJQUFJLHlCQUFlLENBQUM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCwrQkFBK0I7d0JBQy9CLGlEQUFpRDtxQkFDbEQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2lCQUN2RCxDQUFDO2FBQ0g7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLHVEQUF1RDtRQUN2RCxJQUFJLHFDQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsMkJBQTJCLEVBQUU7WUFDNUQsWUFBWSxFQUFFLDhCQUE4QjtZQUM1QyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLFVBQVUsRUFBRTtvQkFDVixvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0I7b0JBQzNELGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUNsQztnQkFDRCxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxFQUFFLENBQ3ZDLDhCQUE4QixDQUMvQjthQUNGO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixNQUFNLEVBQUUsa0JBQWtCO2dCQUMxQixVQUFVLEVBQUU7b0JBQ1Ysb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsb0JBQW9CO29CQUMzRCxnQkFBZ0IsRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDbEM7Z0JBQ0Qsa0JBQWtCLEVBQUUscUNBQWtCLENBQUMsRUFBRSxDQUN2Qyw4QkFBOEIsQ0FDL0I7YUFDRjtZQUNELFlBQVksRUFBRSxxQ0FBcUM7U0FDcEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSx3QkFBYyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFO1lBQzNDLFFBQVEsRUFBRTtnQkFDUixhQUFhLEVBQ1gsbUZBQW1GO2dCQUNyRixlQUFlLEVBQUUsS0FBSyxDQUFDLDJCQUEyQjthQUNuRDtZQUNELFVBQVUsRUFBRTtnQkFDViw0QkFBNEIsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xELHVDQUF1QyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUs7Z0JBQ2pFLDBCQUEwQixFQUFFLEVBQUU7Z0JBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDcEMsaUJBQWlCLEVBQUUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQy9DLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDckMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxvQkFBb0I7Z0JBQzFELGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDcEMsc0JBQXNCLEVBQUUsR0FBRyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3pELG1CQUFtQixFQUFFLEtBQUssQ0FBQyx5QkFBeUI7Z0JBQ3BELGVBQWUsRUFBRSxLQUFLLENBQUMscUJBQXFCO2dCQUM1QyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTthQUM5QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVZRCw4QkE0WUM7QUFFRCxrQkFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgdHlwZSBTdGFja1Byb3BzLCBTdGFjaywgVGFncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29tcG9zaXRlUHJpbmNpcGFsLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBCbG9ja0RldmljZVZvbHVtZSxcbiAgSW5zdGFuY2VDbGFzcyxcbiAgSW5zdGFuY2VTaXplLFxuICBJbnN0YW5jZVR5cGUsXG4gIExhdW5jaFRlbXBsYXRlLFxuICBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMsXG4gIE1hY2hpbmVJbWFnZSxcbiAgTXVsdGlwYXJ0Qm9keSxcbiAgTXVsdGlwYXJ0VXNlckRhdGEsXG4gIFN1Ym5ldFR5cGUsXG4gIFVzZXJEYXRhXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3ksXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgQ2ZuQXBwbGljYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNhbVwiO1xuaW1wb3J0IHsgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IFBvbGljeSwgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IHsgUzNCdWNrZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG5pbXBvcnQgeyBTZWN1cmVTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgdHlwZSBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5lbnVtIGFnZW50UmVsZWFzZSB7XG4gIFNUQUJMRSA9IFwic3RhYmxlXCIsXG4gIEJFVEEgPSBcImJldGFcIixcbiAgRURHRSA9IFwiZWRnZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRraXRlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBzdHJpbmc7XG4gIGtleU5hbWU6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2U7XG4gIGJ1aWxka2l0ZUFnZW50VGFnczogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBib29sZWFuO1xuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvbjogc3RyaW5nO1xuICBsb2dSZXRlbnRpb25EYXlzOiBudW1iZXI7XG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIgfCBcImRhdGFkb2dcIiB8IFwib3BlbnRlbGVtZXRyeVwiO1xuICBidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kOiBudW1iZXI7XG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnM6IHN0cmluZztcbiAgYnVpbGRraXRlUXVldWU6IHN0cmluZztcbiAgYWdlbnRzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBzdHJpbmc7XG4gIGFnZW50RW52RmlsZVVybDogc3RyaW5nO1xuICBhdXRob3JpemVkVXNlcnNVcmw6IHN0cmluZztcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgYWdlbnRWb2x1bWVTaXplOiBudW1iZXI7XG4gIGFnZW50TWluSW5zdGFuY2VzOiBudW1iZXI7XG4gIGFnZW50TWF4SW5zdGFuY2VzOiBudW1iZXI7XG4gIHNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2Q6IHN0cmluZztcbiAgc2NhbGVyTWluUG9sbEludGVydmFsOiBzdHJpbmc7XG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgc2NhbGVPdXRGYWN0b3I6IHN0cmluZztcbiAgZWNyQWNjZXNzUG9saWN5OiBzdHJpbmc7XG4gIHNjYWxlSW5JZGxlUGVyaW9kOiBudW1iZXI7XG4gIHNjYWxlT3V0V2FpdGluZ0ZvckpvYnM6IGJvb2xlYW47XG4gIGRvY2tlck5ldHdvcmtpbmdQcm90b2NvbDogXCJpcHY0XCIgfCBcImR1YWxzdGFja1wiO1xuICBlbmFibGVTZWNyZXRzUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVFY3JQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogYm9vbGVhbjtcbiAgZW5hYmxlSW5zdGFuY2VTdG9yYWdlOiBib29sZWFuO1xuICBtb3VudFRtcGZzQXRUbXA6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogYm9vbGVhbjtcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBzdHJpbmc7XG4gIHBpcGVsaW5lU2lnbmluZ1ZlcmlmaWNhdGlvbkZhaWx1cmVCZWhhdmlvcjogXCJibG9ja1wiIHwgXCJ3YXJuXCI7XG4gIC8vIFRhZ3NcbiAgLy8gVE9ETzogTW92ZSB0aGVzZSBpbnRvIGEgc2luZ2xlIHRhZ3Mgb2JqZWN0XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJ1aWxka2l0ZURlZmF1bHRQcm9wczogUGljazxcbiAgQnVpbGRraXRlUHJvcHMsXG4gIC8vIEJ1aWxka2l0ZSBBZ2VudCBDb25maWd1cmF0aW9uXG4gIHwgXCJlbGFzdGljU3RhY2tWZXJzaW9uXCJcbiAgfCBcImtleU5hbWVcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRSZWxlYXNlXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGFnc1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXCJcbiAgfCBcImxvZ1JldGVudGlvbkRheXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZFwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kXCJcbiAgfCBcImJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2JcIlxuICB8IFwiYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uc1wiXG4gIHwgXCJidWlsZGtpdGVRdWV1ZVwiXG4gIHwgXCJhZ2VudHNQZXJJbnN0YW5jZVwiXG4gIHwgXCJib290c3RyYXBTY3JpcHRVcmxcIlxuICB8IFwiYWdlbnRFbnZGaWxlVXJsXCJcbiAgfCBcImF1dGhvcml6ZWRVc2Vyc1VybFwiXG4gIC8vIEluZnJhc3RydWN0dXJlXG4gIHwgXCJhZ2VudEluc3RhbmNlVHlwZVwiXG4gIHwgXCJhZ2VudFZvbHVtZVNpemVcIlxuICB8IFwiYWdlbnRNaW5JbnN0YW5jZXNcIlxuICB8IFwiYWdlbnRNYXhJbnN0YW5jZXNcIlxuICB8IFwic2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZXJNaW5Qb2xsSW50ZXJ2YWxcIlxuICB8IFwic3BvdENhcGFjaXR5UGVyY2VudGFnZVwiXG4gIHwgXCJzY2FsZU91dEZhY3RvclwiXG4gIHwgXCJzY2FsZUluSWRsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZU91dFdhaXRpbmdGb3JKb2JzXCJcbiAgfCBcImVjckFjY2Vzc1BvbGljeVwiXG4gIHwgXCJkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2xcIlxuICB8IFwiZW5hYmxlU2VjcmV0c1BsdWdpblwiXG4gIHwgXCJlbmFibGVFY3JQbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyTG9naW5QbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwXCJcbiAgfCBcImVuYWJsZURvY2tlckV4cGVyaW1lbnRhbFwiXG4gIHwgXCJlbmFibGVJbnN0YW5jZVN0b3JhZ2VcIlxuICB8IFwibW91bnRUbXBmc0F0VG1wXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc1wiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdLTVNLZXlcIlxuICB8IFwicGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yXCJcbiAgLy8gVGFnc1xuICB8IFwiZW52aXJvbm1lbnRcIlxuICB8IFwib3duZXJcIlxuPiA9IHtcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgZWxhc3RpY1N0YWNrVmVyc2lvbjogXCJ2Ni4zMC4wXCIsXG4gIGtleU5hbWU6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBmYWxzZSxcbiAgYnVpbGRraXRlQWdlbnRFeHBlcmltZW50czogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBcIjEuOC4wXCIsXG4gIGxvZ1JldGVudGlvbkRheXM6IDEsXG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IDYwLFxuICBidWlsZGtpdGVUZXJtaW5hdGVJbnN0YW5jZUFmdGVySm9iOiBmYWxzZSxcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogXCJcIixcbiAgYnVpbGRraXRlUXVldWU6IFwiZGVmYXVsdFwiLFxuICBhZ2VudHNQZXJJbnN0YW5jZTogMSxcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBcIlwiLFxuICBhZ2VudEVudkZpbGVVcmw6IFwiXCIsXG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogXCJcIixcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLk01LCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICBhZ2VudE1pbkluc3RhbmNlczogMCxcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IDEwLFxuICBhZ2VudFZvbHVtZVNpemU6IDI1MCxcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogXCIxIG1pbnV0ZVwiLFxuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IFwiMTBzXCIsXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IDc1LFxuICBzY2FsZU91dEZhY3RvcjogXCIxLjBcIixcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IDYwMCxcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogZmFsc2UsXG4gIGVjckFjY2Vzc1BvbGljeTogXCJcIixcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIixcbiAgZW5hYmxlU2VjcmV0c1BsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRWNyUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJMb2dpblBsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwOiB0cnVlLFxuICBlbmFibGVEb2NrZXJFeHBlcmltZW50YWw6IGZhbHNlLFxuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGZhbHNlLFxuICBtb3VudFRtcGZzQXRUbXA6IHRydWUsXG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogZmFsc2UsXG4gIHBpcGVsaW5lU2lnbmluZ0tNU0tleTogXCJcIixcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIsXG4gIC8vIFRhZ3NcbiAgZW52aXJvbm1lbnQ6IFwicGxhdGZvcm1cIixcbiAgb3duZXI6IFwiZW5naW5lZXJcIlxufTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxka2l0ZSBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxka2l0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgaW1tdXRhYmxlIGFuZCBlbmZvcmNlIHRoZSB0YWdzIGJlaW5nIHNldFxuICAgIGNvbnN0IHRhZ3MgPSB7XG4gICAgICAuLi5wcm9wcy50YWdzLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCB8fCBcInBsYXRmb3JtXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJidWlsZGtpdGVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcHJvcHMub3duZXIgfHwgXCJlbmdpbmVlclwiIC8vIFRPRE86IHRoaXMgd2lsbCBoYXZlIHRvIGJlIHRoZSBwbGF0Zm9ybSBhY2NvdW50IG5hbWU/XG4gICAgfTtcblxuICAgIC8vIFZQQ1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGModGhpcywgYCR7aWR9VnBjYCwge1xuICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgJHtpZH1gLFxuICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIC8vIEFydGlmYWN0cyBCdWNrZXRcbiAgICBjb25zdCBhcnRpZmFjdEJ1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBgJHtpZH1BcnRpZmFjdEJ1Y2tldGApO1xuXG4gICAgLy8gTWFuYWdlZCBTZWNyZXRzXG4gICAgY29uc3QgbWFuYWdlZFNlY3JldHNCdWNrZXQgPSBuZXcgUzNCdWNrZXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9TWFuYWdlZFNlY3JldHNCdWNrZXRgXG4gICAgKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWSkge1xuICAgICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgYCR7aWR9U3NoS2V5RGVwbG95bWVudGAsIHtcbiAgICAgICAgc291cmNlczogW1xuICAgICAgICAgIFNvdXJjZS5kYXRhKFwicHJpdmF0ZV9zc2hfa2V5XCIsIHByb2Nlc3MuZW52LkJVSUxES0lURV9QUklWQVRFX1NTSF9LRVkpXG4gICAgICAgIF0sXG4gICAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBtYW5hZ2VkU2VjcmV0c0J1Y2tldFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJXQVJOOidCVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3QgZGVjbGFyZWQuIFNraXBwaW5nIHVwbG9hZCBvZiBwcml2YXRlIFNTSCBrZXlcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFbmNyeXB0ZWQgQnVpbGRraXRlIEFnZW50IFRva2VuXG4gICAgY29uc3QgYWdlbnRUb2tlbiA9IG5ldyBTZWN1cmVTdHJpbmdQYXJhbWV0ZXIodGhpcywgYCR7aWR9QWdlbnRUb2tlbmAsIHtcbiAgICAgIG5hbWU6IGAvYnVpbGRraXRlL2FnZW50VG9rZW5gLFxuICAgICAgYWxpYXNOYW1lOiBgYnVpbGRraXRlQWdlbnRUb2tlbmAsXG4gICAgICB2YWx1ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOLFxuICAgICAgb3ZlcndyaXRlOiBwcm9jZXNzLmVudi5CVUlMREtJVEVfQUdFTlRfVE9LRU4gPyB0cnVlIDogZmFsc2UsXG4gICAgICB0YWdzOiB0YWdzLFxuICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICByZWdpb246IHRoaXMucmVnaW9uXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZGtpdGUgQWdlbnQgRXhlY3V0aW9uIFJvbGVcbiAgICBjb25zdCBhZ2VudFJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgJHtpZH1BZ2VudFJvbGVgLCB7XG4gICAgICByb2xlTmFtZTogYCR7aWR9QWdlbnRSb2xlYCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkJ1aWxka2l0ZSBBZ2VudCBJQU0gUm9sZVwiLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgW1wiZGVjcnlwdEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFthZ2VudFRva2VuLmNtay5rZXkua2V5QXJuXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJyZWFkQnVpbGRraXRlQWdlbnRUb2tlblwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52Py5yZWdpb259OiR7cHJvcHMuZW52Py5hY2NvdW50fTpwYXJhbWV0ZXIke2FnZW50VG9rZW4ubmFtZX1gXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZE1hbmFnZWRTZWNyZXRzQnVja2V0XCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJzMzpHZXQqXCIsIFwiczM6TGlzdCpcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIG1hbmFnZWRTZWNyZXRzQnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHttYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wid3JpdGVBcnRpZmFjdEJ1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RBY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFZlcnNpb25cIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFZlcnNpb25BY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOkxpc3RCdWNrZXRcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RWZXJzaW9uQWNsXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgYXJ0aWZhY3RCdWNrZXQuYnVja2V0QXJuLFxuICAgICAgICAgICAgICAgIGAke2FydGlmYWN0QnVja2V0LmJ1Y2tldEFybn0vKmBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJkZXNjcmliZUluc3RhbmNlXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpEZXNjcmliZUF1dG9TY2FsaW5nSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGFcIixcbiAgICAgICAgICAgICAgICBcImNsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tSZXNvdXJjZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlVGFnc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJsb2dnaW5nXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ0dyb3VwXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ1N0cmVhbVwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpQdXRMb2dFdmVudHNcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInNzbVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwic3NtOkRlc2NyaWJlSW5zdGFuY2VQcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgXCJzc206TGlzdEFzc29jaWF0aW9uc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOlB1dEludmVudG9yeVwiLFxuICAgICAgICAgICAgICAgIFwic3NtOlVwZGF0ZUluc3RhbmNlSW5mb3JtYXRpb25cIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOkNyZWF0ZUNvbnRyb2xDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVEYXRhQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkNvbnRyb2xDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpPcGVuRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkFja25vd2xlZGdlTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6RGVsZXRlTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6RmFpbE1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkdldEVuZHBvaW50XCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRNZXNzYWdlc1wiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6U2VuZFJlcGx5XCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICBhc3N1bWVkQnk6IG5ldyBDb21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiYXV0b3NjYWxpbmcuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKVxuICAgICAgKVxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEVDMiBVc2VyIERhdGFcbiAgICBjb25zdCBtdWx0aXBhcnRVc2VyRGF0YSA9IG5ldyBNdWx0aXBhcnRVc2VyRGF0YSgpO1xuXG4gICAgLy8gQ2xvdWQgQ29uZmlnXG4gICAgY29uc3QgY2xvdWRDb25maWdVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiI2Nsb3VkLWNvbmZpZ1wiXG4gICAgfSk7XG4gICAgY2xvdWRDb25maWdVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIFwiY2xvdWRfZmluYWxfbW9kdWxlczpcIixcbiAgICAgIFwiICAtIFtzY3JpcHRzLXVzZXIsIGFsd2F5c11cIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjbG91ZENvbmZpZ1VzZXJEYXRhLFxuICAgICAgICBcInRleHQvY2xvdWQtY29uZmlnOyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBNb3VudCBTdG9yYWdlXG4gICAgY29uc3QgbW91bnRTdG9yYWdlVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX01PVU5UX1RNUEZTX0FUX1RNUD0nJHtwcm9wcy5tb3VudFRtcGZzQXRUbXB9JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstbW91bnQtaW5zdGFuY2Utc3RvcmFnZS5zaFwiXG4gICAgKTtcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIG1vdW50U3RvcmFnZVVzZXJEYXRhLFxuICAgICAgICBcInRleHQveC1zaGVsbHNjcmlwdDsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gQ29uZmlndXJlIERvY2tlclxuICAgIGNvbnN0IGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgY29uZmlndXJlRG9ja2VyVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgRE9DS0VSX1VTRVJOU19SRU1BUD0nJHtwcm9wcy5lbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXB9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfRVhQRVJJTUVOVEFMPScke3Byb3BzLmVuYWJsZURvY2tlckV4cGVyaW1lbnRhbH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9ORVRXT1JLSU5HX1BST1RPQ09MPScke3Byb3BzLmRvY2tlck5ldHdvcmtpbmdQcm90b2NvbH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTkFCTEVfSU5TVEFOQ0VfU1RPUkFHRT0nJHtwcm9wcy5lbmFibGVJbnN0YW5jZVN0b3JhZ2V9JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstY29uZmlndXJlLWRvY2tlci5zaFwiXG4gICAgKTtcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhLFxuICAgICAgICBcInRleHQveC1zaGVsbHNjcmlwdDsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgaW5zdGFsbEVsYXN0aWNTdGFja1VzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgaW5zdGFsbEVsYXN0aWNTdGFja1VzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYEJVSUxES0lURV9TVEFDS19OQU1FPScke2lkfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NUQUNLX1ZFUlNJT049JyR7cHJvcHMuZWxhc3RpY1N0YWNrVmVyc2lvbn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TQ0FMRV9JTl9JRExFX1BFUklPRD0nJHtwcm9wcy5zY2FsZUluSWRsZVBlcmlvZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVD0nJHttYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXROYW1lfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NFQ1JFVFNfQlVDS0VUX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UT0tFTl9QQVRIPScke2FnZW50VG9rZW4ubmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVFNfUEVSX0lOU1RBTkNFPScke3Byb3BzLmFnZW50c1Blckluc3RhbmNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RBR1M9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUYWdzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RJTUVTVEFNUF9MSU5FUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0VYUEVSSU1FTlRTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVFJBQ0lOR19CQUNLRU5EPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmR9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfUkVMRUFTRT0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFJlbGVhc2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfQ0FOQ0VMX0dSQUNFX1BFUklPRD0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1NJR05JTkdfS01TX0tFWT0nJHtwcm9wcy5waXBlbGluZVNpZ25pbmdLTVNLZXl9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfU0lHTklOR19GQUlMVVJFX0JFSEFWSU9SPScke3Byb3BzLnBpcGVsaW5lU2lnbmluZ1ZlcmlmaWNhdGlvbkZhaWx1cmVCZWhhdmlvcn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9RVUVVRT0nJHtwcm9wcy5idWlsZGtpdGVRdWV1ZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FTkFCTEVfR0lUX01JUlJPUlM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VMQVNUSUNfQk9PVFNUUkFQX1NDUklQVD0nJHtwcm9wcy5ib290c3RyYXBTY3JpcHRVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5WX0ZJTEVfVVJMPScke3Byb3BzLmFnZW50RW52RmlsZVVybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTkFCTEVfSU5TVEFOQ0VfU1RPUkFHRT0nJHtwcm9wcy5lbmFibGVJbnN0YW5jZVN0b3JhZ2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQVVUSE9SSVpFRF9VU0VSU19VUkw9JyR7cHJvcHMuYXV0aG9yaXplZFVzZXJzVXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VDUl9QT0xJQ1k9JyR7cHJvcHMuZWNyQWNjZXNzUG9saWN5fScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1RFUk1JTkFURV9JTlNUQU5DRV9BRlRFUl9KT0I9JyR7cHJvcHMuYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYn0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BRERJVElPTkFMX1NVRE9fUEVSTUlTU0lPTlM9JyR7cHJvcHMuYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uc30nIFxcXFxgLFxuICAgICAgYEFXU19ERUZBVUxUX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgYFNFQ1JFVFNfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlU2VjcmV0c1BsdWdpbn0nIFxcXFxgLFxuICAgICAgYEVDUl9QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5lbmFibGVFY3JQbHVnaW59JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfTE9HSU5fUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlRG9ja2VyTG9naW5QbHVnaW59JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfRVhQRVJJTUVOVEFMPScke3Byb3BzLmVuYWJsZURvY2tlckV4cGVyaW1lbnRhbH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9VU0VSTlNfUkVNQVA9JyR7cHJvcHMuZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwfScgXFxcXGAsXG4gICAgICBgQVdTX1JFR0lPTj0nJHtwcm9wcy5lbnY/LnJlZ2lvbn0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1pbnN0YWxsLWVsYXN0aWMtc3RhY2suc2hcIlxuICAgICk7XG5cbiAgICAvLyBNZXJnZSBVc2VyIERhdGFcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIExhdW5jaCBUZW1wbGF0ZVxuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gbmV3IExhdW5jaFRlbXBsYXRlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfUFnZW50TGF1bmNoVGVtcGxhdGVgLFxuICAgICAge1xuICAgICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGBidWlsZGtpdGVMYXVuY2hUZW1wbGF0ZWAsXG4gICAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuYWdlbnRJbnN0YW5jZVR5cGUsXG4gICAgICAgIG1hY2hpbmVJbWFnZTogTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICAgICAgbmFtZTogXCJidWlsZGtpdGUtc3RhY2stbGludXgteDg2XzY0LSpcIixcbiAgICAgICAgICBvd25lcnM6IFtcIjE3Mjg0MDA2NDgzMlwiXSxcbiAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBbXCJibG9jay1kZXZpY2UtbWFwcGluZy52b2x1bWUtdHlwZVwiXTogW1wiZ3AzXCJdXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdXNlckRhdGE6IG11bHRpcGFydFVzZXJEYXRhLFxuICAgICAgICByb2xlOiBhZ2VudFJvbGUsXG4gICAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldmljZU5hbWU6IFwiL2Rldi94dmRhXCIsXG4gICAgICAgICAgICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lLmVicyhwcm9wcy5hZ2VudFZvbHVtZVNpemUpXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICAgIHJlcXVpcmVJbWRzdjI6IGZhbHNlLFxuICAgICAgICBodHRwUHV0UmVzcG9uc2VIb3BMaW1pdDogMixcbiAgICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgICBpbnN0YW5jZU1ldGFkYXRhVGFnczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBGdW5jdGlvbmFsIHRhZ3MgZm9yIGJ1aWxka2l0ZSBhZ2VudCBpZGVudGlmaWNhdGlvblxuICAgIFRhZ3Mub2YobGF1bmNoVGVtcGxhdGUpLmFkZChcIlJvbGVcIiwgXCJidWlsZGtpdGVBZ2VudFwiKTtcbiAgICBUYWdzLm9mKGxhdW5jaFRlbXBsYXRlKS5hZGQoXCJCdWlsZGtpdGVBZ2VudFJlbGVhc2VcIiwgYWdlbnRSZWxlYXNlLlNUQUJMRSk7XG4gICAgVGFncy5vZihsYXVuY2hUZW1wbGF0ZSkuYWRkKFwiQnVpbGRraXRlUXVldWVcIiwgcHJvcHMuYnVpbGRraXRlUXVldWUpO1xuXG4gICAgLy8gQXV0b3NjYWxpbmcgR3JvdXBcbiAgICBjb25zdCBhdXRvU2NhbGluZ0dyb3VwID0gbmV3IEF1dG9TY2FsaW5nR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9QWdlbnRBdXRvU2NhbGluZ0dyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIG1peGVkSW5zdGFuY2VzUG9saWN5OiB7XG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGU6IGxhdW5jaFRlbXBsYXRlLFxuICAgICAgICAgIGluc3RhbmNlc0Rpc3RyaWJ1dGlvbjoge1xuICAgICAgICAgICAgb25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHk6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBzcG90QWxsb2NhdGlvblN0cmF0ZWd5OiBTcG90QWxsb2NhdGlvblN0cmF0ZWd5LkNBUEFDSVRZX09QVElNSVpFRFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVPdmVycmlkZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLmFnZW50TWluSW5zdGFuY2VzLFxuICAgICAgICBtYXhDYXBhY2l0eTogcHJvcHMuYWdlbnRNYXhJbnN0YW5jZXMsXG4gICAgICAgIGNvb2xkb3duOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgZ3JvdXBNZXRyaWNzOiBbR3JvdXBNZXRyaWNzLmFsbCgpXSxcbiAgICAgICAgdXBkYXRlUG9saWN5OiBVcGRhdGVQb2xpY3kucmVwbGFjaW5nVXBkYXRlKCksXG4gICAgICAgIG5ld0luc3RhbmNlc1Byb3RlY3RlZEZyb21TY2FsZUluOiB0cnVlLFxuICAgICAgICB0ZXJtaW5hdGlvblBvbGljaWVzOiBbXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuT0xERVNUX0xBVU5DSF9DT05GSUdVUkFUSU9OLFxuICAgICAgICAgIFRlcm1pbmF0aW9uUG9saWN5LkNMT1NFU1RfVE9fTkVYVF9JTlNUQU5DRV9IT1VSXG4gICAgICAgIF0sXG4gICAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZVxuICAgICAgfVxuICAgICk7XG5cbiAgICBhZ2VudFJvbGUuYXR0YWNoSW5saW5lUG9saWN5KFxuICAgICAgbmV3IFBvbGljeSh0aGlzLCBgJHtpZH1VcGRhdGVBdXRvU2NhbGluZ0dyb3VwUG9saWN5YCwge1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6U2V0SW5zdGFuY2VIZWFsdGhcIixcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpUZXJtaW5hdGVJbnN0YW5jZUluQXV0b1NjYWxpbmdHcm91cFwiXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbYCR7YXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwQXJufWBdXG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQnVpbGRraXRlIFN1c3BlbmQgQXVzdG9zY2FsaW5nIEdyb3VwIEN1c3RvbSBSZXNvdXJjZVxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBgJHtpZH1TdXNwZW5kQXV0b3NjYWxpbmdQcm9jZXNzYCwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIixcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQXV0b1NjYWxpbmdcIixcbiAgICAgICAgYWN0aW9uOiBcInN1c3BlbmRQcm9jZXNzZXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICAgIFNjYWxpbmdQcm9jZXNzZXM6IFtcIkFaUmViYWxhbmNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICAgIGFjdGlvbjogXCJzdXNwZW5kUHJvY2Vzc2VzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6YnVpbGRraXRlU3VzcGVuZEF1dG9zY2FsaW5nXCJcbiAgICB9KTtcblxuICAgIG5ldyBDZm5BcHBsaWNhdGlvbih0aGlzLCBgJHtpZH1BZ2VudFNjYWxlcmAsIHtcbiAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGFwcGxpY2F0aW9uSWQ6XG4gICAgICAgICAgXCJhcm46YXdzOnNlcnZlcmxlc3NyZXBvOnVzLWVhc3QtMToxNzI4NDAwNjQ4MzI6YXBwbGljYXRpb25zL2J1aWxka2l0ZS1hZ2VudC1zY2FsZXJcIixcbiAgICAgICAgc2VtYW50aWNWZXJzaW9uOiBwcm9wcy5idWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb25cbiAgICAgIH0sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEJ1aWxka2l0ZUFnZW50VG9rZW5QYXJhbWV0ZXI6IGAke2FnZW50VG9rZW4ubmFtZX1gLFxuICAgICAgICBCdWlsZGtpdGVBZ2VudFRva2VuUGFyYW1ldGVyU3RvcmVLTVNLZXk6IGFnZW50VG9rZW4uY21rLmtleS5rZXlJZCxcbiAgICAgICAgUm9sZVBlcm1pc3Npb25zQm91bmRhcnlBUk46IFwiXCIsXG4gICAgICAgIEJ1aWxka2l0ZVF1ZXVlOiBwcm9wcy5idWlsZGtpdGVRdWV1ZSxcbiAgICAgICAgQWdlbnRzUGVySW5zdGFuY2U6IGAke3Byb3BzLmFnZW50c1Blckluc3RhbmNlfWAsXG4gICAgICAgIE1pblNpemU6IGAke3Byb3BzLmFnZW50TWluSW5zdGFuY2VzfWAsXG4gICAgICAgIE1heFNpemU6IGAke3Byb3BzLmFnZW50TWF4SW5zdGFuY2VzfWAsXG4gICAgICAgIEFnZW50QXV0b1NjYWxlR3JvdXA6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgIFNjYWxlT3V0RmFjdG9yOiBwcm9wcy5zY2FsZU91dEZhY3RvcixcbiAgICAgICAgU2NhbGVPdXRGb3JXYWl0aW5nSm9iczogYCR7cHJvcHMuc2NhbGVPdXRXYWl0aW5nRm9ySm9ic31gLFxuICAgICAgICBFdmVudFNjaGVkdWxlUGVyaW9kOiBwcm9wcy5zY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kLFxuICAgICAgICBNaW5Qb2xsSW50ZXJ2YWw6IHByb3BzLnNjYWxlck1pblBvbGxJbnRlcnZhbCxcbiAgICAgICAgTG9nUmV0ZW50aW9uRGF5czogYCR7cHJvcHMubG9nUmV0ZW50aW9uRGF5c31gXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQnVpbGRraXRlO1xuIl19
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXFFO0FBQ3JFLGlEQUs2QjtBQUM3Qix5RUFBOEQ7QUFDOUQsaURBWTZCO0FBQzdCLGlFQU1xQztBQUNyQyxpREFBcUQ7QUFDckQsbUVBQWtFO0FBQ2xFLHFFQUF5RTtBQUV6RSw0REFBeUQ7QUFDekQsaURBQXVEO0FBQ3ZELHlEQUF1RDtBQUN2RCx5REFBb0U7QUFDcEUsdUZBQW9GO0FBR3BGLElBQUssWUFJSjtBQUpELFdBQUssWUFBWTtJQUNmLGlDQUFpQixDQUFBO0lBQ2pCLDZCQUFhLENBQUE7SUFDYiw2QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBbURZLFFBQUEscUJBQXFCLEdBOEM5QjtJQUNGLGdDQUFnQztJQUNoQyxtQkFBbUIsRUFBRSxTQUFTO0lBQzlCLE9BQU8sRUFBRSxFQUFFO0lBQ1gscUJBQXFCLEVBQUUsWUFBWSxDQUFDLE1BQU07SUFDMUMsa0JBQWtCLEVBQUUsRUFBRTtJQUN0Qiw0QkFBNEIsRUFBRSxLQUFLO0lBQ25DLHlCQUF5QixFQUFFLEVBQUU7SUFDN0IsMkJBQTJCLEVBQUUsT0FBTztJQUNwQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLDRCQUE0QixFQUFFLEVBQUU7SUFDaEMsK0JBQStCLEVBQUUsRUFBRTtJQUNuQyxrQ0FBa0MsRUFBRSxLQUFLO0lBQ3pDLGtDQUFrQyxFQUFFLEVBQUU7SUFDdEMsY0FBYyxFQUFFLFNBQVM7SUFDekIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFLHNCQUFZLENBQUMsRUFBRSxDQUFD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L0MsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFO2dCQUNyQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3JDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtnQkFDMUQsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtnQkFDekQsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLHlCQUF5QjtnQkFDcEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQzVDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFO2FBQzlDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNVlELDhCQTRZQztBQUVELGtCQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCB0eXBlIFN0YWNrUHJvcHMsIFN0YWNrLCBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBDb21wb3NpdGVQcmluY2lwYWwsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7XG4gIEJsb2NrRGV2aWNlVm9sdW1lLFxuICBJbnN0YW5jZUNsYXNzLFxuICBJbnN0YW5jZVNpemUsXG4gIEluc3RhbmNlVHlwZSxcbiAgTGF1bmNoVGVtcGxhdGUsXG4gIExhdW5jaFRlbXBsYXRlSHR0cFRva2VucyxcbiAgTWFjaGluZUltYWdlLFxuICBNdWx0aXBhcnRCb2R5LFxuICBNdWx0aXBhcnRVc2VyRGF0YSxcbiAgU3VibmV0VHlwZSxcbiAgVXNlckRhdGFcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIEF1dG9TY2FsaW5nR3JvdXAsXG4gIEdyb3VwTWV0cmljcyxcbiAgU3BvdEFsbG9jYXRpb25TdHJhdGVneSxcbiAgVGVybWluYXRpb25Qb2xpY3ksXG4gIFVwZGF0ZVBvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWF1dG9zY2FsaW5nXCI7XG5pbXBvcnQgeyBDZm5BcHBsaWNhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2FtXCI7XG5pbXBvcnQgeyBQaHlzaWNhbFJlc291cmNlSWQgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgUG9saWN5LCBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5pbXBvcnQgeyBTM0J1Y2tldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFNlY3VyZVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmVudW0gYWdlbnRSZWxlYXNlIHtcbiAgU1RBQkxFID0gXCJzdGFibGVcIixcbiAgQkVUQSA9IFwiYmV0YVwiLFxuICBFREdFID0gXCJlZGdlXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGtpdGVQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIGVsYXN0aWNTdGFja1ZlcnNpb246IHN0cmluZztcbiAga2V5TmFtZTogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFJlbGVhc2U6IGFnZW50UmVsZWFzZTtcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXM6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHM6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBzdHJpbmc7XG4gIGxvZ1JldGVudGlvbkRheXM6IG51bWJlcjtcbiAgYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZDogXCJcIiB8IFwiZGF0YWRvZ1wiIHwgXCJvcGVudGVsZW1ldHJ5XCI7XG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IG51bWJlcjtcbiAgYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYjogYm9vbGVhbjtcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogc3RyaW5nO1xuICBidWlsZGtpdGVRdWV1ZTogc3RyaW5nO1xuICBhZ2VudHNQZXJJbnN0YW5jZTogbnVtYmVyO1xuICBib290c3RyYXBTY3JpcHRVcmw6IHN0cmluZztcbiAgYWdlbnRFbnZGaWxlVXJsOiBzdHJpbmc7XG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogc3RyaW5nO1xuICAvLyBJbmZyYXN0cnVjdHVyZVxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuICBhZ2VudFZvbHVtZVNpemU6IG51bWJlcjtcbiAgYWdlbnRNaW5JbnN0YW5jZXM6IG51bWJlcjtcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IG51bWJlcjtcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogc3RyaW5nO1xuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IHN0cmluZztcbiAgc3BvdENhcGFjaXR5UGVyY2VudGFnZTogbnVtYmVyO1xuICBzY2FsZU91dEZhY3Rvcjogc3RyaW5nO1xuICBlY3JBY2Nlc3NQb2xpY3k6IHN0cmluZztcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IG51bWJlcjtcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogYm9vbGVhbjtcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIiB8IFwiZHVhbHN0YWNrXCI7XG4gIGVuYWJsZVNlY3JldHNQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZUVjclBsdWdpbjogYm9vbGVhbjtcbiAgZW5hYmxlRG9ja2VyTG9naW5QbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcDogYm9vbGVhbjtcbiAgZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsOiBib29sZWFuO1xuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGJvb2xlYW47XG4gIG1vdW50VG1wZnNBdFRtcDogYm9vbGVhbjtcbiAgYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzOiBib29sZWFuO1xuICBwaXBlbGluZVNpZ25pbmdLTVNLZXk6IHN0cmluZztcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIgfCBcIndhcm5cIjtcbiAgLy8gVGFnc1xuICAvLyBUT0RPOiBNb3ZlIHRoZXNlIGludG8gYSBzaW5nbGUgdGFncyBvYmplY3RcbiAgdGFnczogS2V5VmFsdWU7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQnVpbGRraXRlRGVmYXVsdFByb3BzOiBQaWNrPFxuICBCdWlsZGtpdGVQcm9wcyxcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgfCBcImVsYXN0aWNTdGFja1ZlcnNpb25cIlxuICB8IFwia2V5TmFtZVwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFJlbGVhc2VcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUYWdzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRFeHBlcmltZW50c1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb25cIlxuICB8IFwibG9nUmV0ZW50aW9uRGF5c1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRyYWNpbmdCYWNrZW5kXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2RcIlxuICB8IFwiYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYlwiXG4gIHwgXCJidWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zXCJcbiAgfCBcImJ1aWxka2l0ZVF1ZXVlXCJcbiAgfCBcImFnZW50c1Blckluc3RhbmNlXCJcbiAgfCBcImJvb3RzdHJhcFNjcmlwdFVybFwiXG4gIHwgXCJhZ2VudEVudkZpbGVVcmxcIlxuICB8IFwiYXV0aG9yaXplZFVzZXJzVXJsXCJcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgfCBcImFnZW50SW5zdGFuY2VUeXBlXCJcbiAgfCBcImFnZW50Vm9sdW1lU2l6ZVwiXG4gIHwgXCJhZ2VudE1pbkluc3RhbmNlc1wiXG4gIHwgXCJhZ2VudE1heEluc3RhbmNlc1wiXG4gIHwgXCJzY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kXCJcbiAgfCBcInNjYWxlck1pblBvbGxJbnRlcnZhbFwiXG4gIHwgXCJzcG90Q2FwYWNpdHlQZXJjZW50YWdlXCJcbiAgfCBcInNjYWxlT3V0RmFjdG9yXCJcbiAgfCBcInNjYWxlSW5JZGxlUGVyaW9kXCJcbiAgfCBcInNjYWxlT3V0V2FpdGluZ0ZvckpvYnNcIlxuICB8IFwiZWNyQWNjZXNzUG9saWN5XCJcbiAgfCBcImRvY2tlck5ldHdvcmtpbmdQcm90b2NvbFwiXG4gIHwgXCJlbmFibGVTZWNyZXRzUGx1Z2luXCJcbiAgfCBcImVuYWJsZUVjclBsdWdpblwiXG4gIHwgXCJlbmFibGVEb2NrZXJMb2dpblBsdWdpblwiXG4gIHwgXCJlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXBcIlxuICB8IFwiZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsXCJcbiAgfCBcImVuYWJsZUluc3RhbmNlU3RvcmFnZVwiXG4gIHwgXCJtb3VudFRtcGZzQXRUbXBcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzXCJcbiAgfCBcInBpcGVsaW5lU2lnbmluZ0tNU0tleVwiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3JcIlxuICAvLyBUYWdzXG4gIHwgXCJlbnZpcm9ubWVudFwiXG4gIHwgXCJvd25lclwiXG4+ID0ge1xuICAvLyBCdWlsZGtpdGUgQWdlbnQgQ29uZmlndXJhdGlvblxuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBcInY2LjMwLjBcIixcbiAga2V5TmFtZTogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2UuU1RBQkxFLFxuICBidWlsZGtpdGVBZ2VudFRhZ3M6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXM6IGZhbHNlLFxuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb246IFwiMS44LjBcIixcbiAgbG9nUmV0ZW50aW9uRGF5czogMSxcbiAgYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZDogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRDYW5jZWxHcmFjZVBlcmlvZDogNjAsXG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGZhbHNlLFxuICBidWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zOiBcIlwiLFxuICBidWlsZGtpdGVRdWV1ZTogXCJkZWZhdWx0XCIsXG4gIGFnZW50c1Blckluc3RhbmNlOiAxLFxuICBib290c3RyYXBTY3JpcHRVcmw6IFwiXCIsXG4gIGFnZW50RW52RmlsZVVybDogXCJcIixcbiAgYXV0aG9yaXplZFVzZXJzVXJsOiBcIlwiLFxuICAvLyBJbmZyYXN0cnVjdHVyZVxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTUsIEluc3RhbmNlU2l6ZS5MQVJHRSksXG4gIGFnZW50TWluSW5zdGFuY2VzOiAwLFxuICBhZ2VudE1heEluc3RhbmNlczogMTAsXG4gIGFnZW50Vm9sdW1lU2l6ZTogMjUwLFxuICBzY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kOiBcIjEgbWludXRlXCIsXG4gIHNjYWxlck1pblBvbGxJbnRlcnZhbDogXCIxMHNcIixcbiAgc3BvdENhcGFjaXR5UGVyY2VudGFnZTogNzUsXG4gIHNjYWxlT3V0RmFjdG9yOiBcIjEuMFwiLFxuICBzY2FsZUluSWRsZVBlcmlvZDogNjAwLFxuICBzY2FsZU91dFdhaXRpbmdGb3JKb2JzOiBmYWxzZSxcbiAgZWNyQWNjZXNzUG9saWN5OiBcIlwiLFxuICBkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2w6IFwiaXB2NFwiLFxuICBlbmFibGVTZWNyZXRzUGx1Z2luOiB0cnVlLFxuICBlbmFibGVFY3JQbHVnaW46IHRydWUsXG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IHRydWUsXG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogZmFsc2UsXG4gIGVuYWJsZUluc3RhbmNlU3RvcmFnZTogZmFsc2UsXG4gIG1vdW50VG1wZnNBdFRtcDogdHJ1ZSxcbiAgYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzOiBmYWxzZSxcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBcIlwiLFxuICBwaXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3I6IFwiYmxvY2tcIixcbiAgLy8gVGFnc1xuICBlbnZpcm9ubWVudDogXCJwbGF0Zm9ybVwiLFxuICBvd25lcjogXCJlbmdpbmVlclwiXG59O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRraXRlIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRraXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIFRPRE86IE1ha2UgdGhpcyBpbW11dGFibGUgYW5kIGVuZm9yY2UgdGhlIHRhZ3MgYmVpbmcgc2V0XG4gICAgY29uc3QgdGFncyA9IHtcbiAgICAgIC4uLnByb3BzLnRhZ3MsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IHByb3BzLmVudmlyb25tZW50IHx8IFwicGxhdGZvcm1cIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImJ1aWxka2l0ZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBwcm9wcy5vd25lciB8fCBcImVuZ2luZWVyXCIgLy8gVE9ETzogdGhpcyB3aWxsIGhhdmUgdG8gYmUgdGhlIHBsYXRmb3JtIGFjY291bnQgbmFtZT9cbiAgICB9O1xuXG4gICAgLy8gVlBDXG4gICAgY29uc3QgdnBjID0gbmV3IFZwYyh0aGlzLCBgJHtpZH1WcGNgLCB7XG4gICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke2lkfWAsXG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQXJ0aWZhY3RzIEJ1Y2tldFxuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIGAke2lkfUFydGlmYWN0QnVja2V0YCk7XG5cbiAgICAvLyBNYW5hZ2VkIFNlY3JldHNcbiAgICBjb25zdCBtYW5hZ2VkU2VjcmV0c0J1Y2tldCA9IG5ldyBTM0J1Y2tldChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH1NYW5hZ2VkU2VjcmV0c0J1Y2tldGBcbiAgICApO1xuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKSB7XG4gICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBgJHtpZH1Tc2hLZXlEZXBsb3ltZW50YCwge1xuICAgICAgICBzb3VyY2VzOiBbXG4gICAgICAgICAgU291cmNlLmRhdGEoXCJwcml2YXRlX3NzaF9rZXlcIiwgcHJvY2Vzcy5lbnYuQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWSlcbiAgICAgICAgXSxcbiAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IG1hbmFnZWRTZWNyZXRzQnVja2V0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgXCInQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGRlY2xhcmVkLiBTa2lwcGluZyB1cGxvYWQgb2YgcHJpdmF0ZSBTU0gga2V5LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuY3J5cHRlZCBCdWlsZGtpdGUgQWdlbnQgVG9rZW5cbiAgICBjb25zdCBhZ2VudFRva2VuID0gbmV3IFNlY3VyZVN0cmluZ1BhcmFtZXRlcih0aGlzLCBgJHtpZH1BZ2VudFRva2VuYCwge1xuICAgICAgbmFtZTogYC9idWlsZGtpdGUvYWdlbnRUb2tlbmAsXG4gICAgICBhbGlhc05hbWU6IGBidWlsZGtpdGVBZ2VudFRva2VuYCxcbiAgICAgIHZhbHVlOiBwcm9jZXNzLmVudi5CVUlMREtJVEVfQUdFTlRfVE9LRU4sXG4gICAgICBvdmVyd3JpdGU6IHByb2Nlc3MuZW52LkJVSUxES0lURV9BR0VOVF9UT0tFTiA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb25cbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBBZ2VudCBFeGVjdXRpb24gUm9sZVxuICAgIGNvbnN0IGFnZW50Um9sZSA9IG5ldyBSb2xlKHRoaXMsIGAke2lkfUFnZW50Um9sZWAsIHtcbiAgICAgIHJvbGVOYW1lOiBgJHtpZH1BZ2VudFJvbGVgLFxuICAgICAgZGVzY3JpcHRpb246IFwiQnVpbGRraXRlIEFnZW50IElBTSBSb2xlXCIsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJkZWNyeXB0QnVpbGRraXRlQWdlbnRUb2tlblwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wia21zOkRlY3J5cHRcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2FnZW50VG9rZW4uY21rLmtleS5rZXlBcm5dXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInJlYWRCdWlsZGtpdGVBZ2VudFRva2VuXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtwcm9wcy5lbnY/LnJlZ2lvbn06JHtwcm9wcy5lbnY/LmFjY291bnR9OnBhcmFtZXRlciR7YWdlbnRUb2tlbi5uYW1lfWBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJyZWFkTWFuYWdlZFNlY3JldHNCdWNrZXRcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInMzOkdldCpcIiwgXCJzMzpMaXN0KlwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgbWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0QXJuLFxuICAgICAgICAgICAgICAgIGAke21hbmFnZWRTZWNyZXRzQnVja2V0LmJ1Y2tldEFybn0vKmBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJ3cml0ZUFydGlmYWN0QnVja2V0XCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdEFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0VmVyc2lvbkFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6TGlzdEJ1Y2tldFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RBY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdFZlcnNpb25BY2xcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBhcnRpZmFjdEJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgICAgYCR7YXJ0aWZhY3RCdWNrZXQuYnVja2V0QXJufS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImRlc2NyaWJlSW5zdGFuY2VcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcImF1dG9zY2FsaW5nOkRlc2NyaWJlQXV0b1NjYWxpbmdJbnN0YW5jZXNcIixcbiAgICAgICAgICAgICAgICBcImNsb3Vkd2F0Y2g6UHV0TWV0cmljRGF0YVwiLFxuICAgICAgICAgICAgICAgIFwiY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja1Jlc291cmNlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVUYWdzXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImxvZ2dpbmdcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nR3JvdXBcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOlB1dExvZ0V2ZW50c1wiLFxuICAgICAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ0dyb3Vwc1wiLFxuICAgICAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ1N0cmVhbXNcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wic3NtXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJzc206RGVzY3JpYmVJbnN0YW5jZVByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBcInNzbTpMaXN0QXNzb2NpYXRpb25zXCIsXG4gICAgICAgICAgICAgICAgXCJzc206UHV0SW52ZW50b3J5XCIsXG4gICAgICAgICAgICAgICAgXCJzc206VXBkYXRlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOkNyZWF0ZURhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpPcGVuQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5EYXRhQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6QWNrbm93bGVkZ2VNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpEZWxldGVNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpGYWlsTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6R2V0RW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkdldE1lc3NhZ2VzXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpTZW5kUmVwbHlcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGFzc3VtZWRCeTogbmV3IENvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJhdXRvc2NhbGluZy5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpXG4gICAgICApXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZGtpdGUgQWdlbnQgRUMyIFVzZXIgRGF0YVxuICAgIGNvbnN0IG11bHRpcGFydFVzZXJEYXRhID0gbmV3IE11bHRpcGFydFVzZXJEYXRhKCk7XG5cbiAgICAvLyBDbG91ZCBDb25maWdcbiAgICBjb25zdCBjbG91ZENvbmZpZ1VzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjY2xvdWQtY29uZmlnXCJcbiAgICB9KTtcbiAgICBjbG91ZENvbmZpZ1VzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgXCJjbG91ZF9maW5hbF9tb2R1bGVzOlwiLFxuICAgICAgXCIgIC0gW3NjcmlwdHMtdXNlciwgYWx3YXlzXVwiXG4gICAgKTtcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIGNsb3VkQ29uZmlnVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC9jbG91ZC1jb25maWc7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIE1vdW50IFN0b3JhZ2VcbiAgICBjb25zdCBtb3VudFN0b3JhZ2VVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIG1vdW50U3RvcmFnZVVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYEJVSUxES0lURV9FTkFCTEVfSU5TVEFOQ0VfU1RPUkFHRT0nJHtwcm9wcy5lbmFibGVJbnN0YW5jZVN0b3JhZ2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfTU9VTlRfVE1QRlNfQVRfVE1QPScke3Byb3BzLm1vdW50VG1wZnNBdFRtcH0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1tb3VudC1pbnN0YW5jZS1zdG9yYWdlLnNoXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgbW91bnRTdG9yYWdlVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBDb25maWd1cmUgRG9ja2VyXG4gICAgY29uc3QgY29uZmlndXJlRG9ja2VyVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBET0NLRVJfVVNFUk5TX1JFTUFQPScke3Byb3BzLmVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9FWFBFUklNRU5UQUw9JyR7cHJvcHMuZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX05FVFdPUktJTkdfUFJPVE9DT0w9JyR7cHJvcHMuZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1jb25maWd1cmUtZG9ja2VyLnNoXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY29uZmlndXJlRG9ja2VyVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX1NUQUNLX05BTUU9JyR7aWR9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfVkVSU0lPTj0nJHtwcm9wcy5lbGFzdGljU3RhY2tWZXJzaW9ufScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NDQUxFX0lOX0lETEVfUEVSSU9EPScke3Byb3BzLnNjYWxlSW5JZGxlUGVyaW9kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NFQ1JFVFNfQlVDS0VUPScke21hbmFnZWRTZWNyZXRzQnVja2V0LmJ1Y2tldE5hbWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0VDUkVUU19CVUNLRVRfUkVHSU9OPScke3Byb3BzLmVudj8ucmVnaW9ufScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RPS0VOX1BBVEg9JyR7YWdlbnRUb2tlbi5uYW1lfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UU19QRVJfSU5TVEFOQ0U9JyR7cHJvcHMuYWdlbnRzUGVySW5zdGFuY2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVEFHUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRhZ3N9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVElNRVNUQU1QX0xJTkVTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfRVhQRVJJTUVOVFM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRFeHBlcmltZW50c30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UUkFDSU5HX0JBQ0tFTkQ9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9SRUxFQVNFPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50UmVsZWFzZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9DQU5DRUxfR1JBQ0VfUEVSSU9EPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2R9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfU0lHTklOR19LTVNfS0VZPScke3Byb3BzLnBpcGVsaW5lU2lnbmluZ0tNU0tleX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9TSUdOSU5HX0ZBSUxVUkVfQkVIQVZJT1I9JyR7cHJvcHMucGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1FVRVVFPScke3Byb3BzLmJ1aWxka2l0ZVF1ZXVlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0VOQUJMRV9HSVRfTUlSUk9SUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudEVuYWJsZUdpdE1pcnJvcnN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRUxBU1RJQ19CT09UU1RSQVBfU0NSSVBUPScke3Byb3BzLmJvb3RzdHJhcFNjcmlwdFVybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTlZfRklMRV9VUkw9JyR7cHJvcHMuYWdlbnRFbnZGaWxlVXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BVVRIT1JJWkVEX1VTRVJTX1VSTD0nJHtwcm9wcy5hdXRob3JpemVkVXNlcnNVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRUNSX1BPTElDWT0nJHtwcm9wcy5lY3JBY2Nlc3NQb2xpY3l9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfVEVSTUlOQVRFX0lOU1RBTkNFX0FGVEVSX0pPQj0nJHtwcm9wcy5idWlsZGtpdGVUZXJtaW5hdGVJbnN0YW5jZUFmdGVySm9ifScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FERElUSU9OQUxfU1VET19QRVJNSVNTSU9OUz0nJHtwcm9wcy5idWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zfScgXFxcXGAsXG4gICAgICBgQVdTX0RFRkFVTFRfUkVHSU9OPScke3Byb3BzLmVudj8ucmVnaW9ufScgXFxcXGAsXG4gICAgICBgU0VDUkVUU19QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5lbmFibGVTZWNyZXRzUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRUNSX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZUVjclBsdWdpbn0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9MT0dJTl9QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5lbmFibGVEb2NrZXJMb2dpblBsdWdpbn0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9FWFBFUklNRU5UQUw9JyR7cHJvcHMuZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX1VTRVJOU19SRU1BUD0nJHtwcm9wcy5lbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXB9JyBcXFxcYCxcbiAgICAgIGBBV1NfUkVHSU9OPScke3Byb3BzLmVudj8ucmVnaW9ufScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLWluc3RhbGwtZWxhc3RpYy1zdGFjay5zaFwiXG4gICAgKTtcblxuICAgIC8vIE1lcmdlIFVzZXIgRGF0YVxuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgaW5zdGFsbEVsYXN0aWNTdGFja1VzZXJEYXRhLFxuICAgICAgICBcInRleHQveC1zaGVsbHNjcmlwdDsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gTGF1bmNoIFRlbXBsYXRlXG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGUgPSBuZXcgTGF1bmNoVGVtcGxhdGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9QWdlbnRMYXVuY2hUZW1wbGF0ZWAsXG4gICAgICB7XG4gICAgICAgIGxhdW5jaFRlbXBsYXRlTmFtZTogYGJ1aWxka2l0ZUxhdW5jaFRlbXBsYXRlYCxcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZSxcbiAgICAgICAgbWFjaGluZUltYWdlOiBNYWNoaW5lSW1hZ2UubG9va3VwKHtcbiAgICAgICAgICBuYW1lOiBcImJ1aWxka2l0ZS1zdGFjay1saW51eC14ODZfNjQtKlwiLFxuICAgICAgICAgIG93bmVyczogW1wiMTcyODQwMDY0ODMyXCJdLFxuICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIFtcImJsb2NrLWRldmljZS1tYXBwaW5nLnZvbHVtZS10eXBlXCJdOiBbXCJncDNcIl1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB1c2VyRGF0YTogbXVsdGlwYXJ0VXNlckRhdGEsXG4gICAgICAgIHJvbGU6IGFnZW50Um9sZSxcbiAgICAgICAgYmxvY2tEZXZpY2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICAgIHZvbHVtZTogQmxvY2tEZXZpY2VWb2x1bWUuZWJzKHByb3BzLmFnZW50Vm9sdW1lU2l6ZSlcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGRldGFpbGVkTW9uaXRvcmluZzogdHJ1ZSxcbiAgICAgICAgcmVxdWlyZUltZHN2MjogZmFsc2UsXG4gICAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgICBodHRwVG9rZW5zOiBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMuUkVRVUlSRUQsXG4gICAgICAgIGluc3RhbmNlTWV0YWRhdGFUYWdzOiB0cnVlXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEZ1bmN0aW9uYWwgdGFncyBmb3IgYnVpbGRraXRlIGFnZW50IGlkZW50aWZpY2F0aW9uXG4gICAgVGFncy5vZihsYXVuY2hUZW1wbGF0ZSkuYWRkKFwiUm9sZVwiLCBcImJ1aWxka2l0ZUFnZW50XCIpO1xuICAgIFRhZ3Mub2YobGF1bmNoVGVtcGxhdGUpLmFkZChcIkJ1aWxka2l0ZUFnZW50UmVsZWFzZVwiLCBhZ2VudFJlbGVhc2UuU1RBQkxFKTtcbiAgICBUYWdzLm9mKGxhdW5jaFRlbXBsYXRlKS5hZGQoXCJCdWlsZGtpdGVRdWV1ZVwiLCBwcm9wcy5idWlsZGtpdGVRdWV1ZSk7XG5cbiAgICAvLyBBdXRvc2NhbGluZyBHcm91cFxuICAgIGNvbnN0IGF1dG9TY2FsaW5nR3JvdXAgPSBuZXcgQXV0b1NjYWxpbmdHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH1BZ2VudEF1dG9TY2FsaW5nR3JvdXBgLFxuICAgICAge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgbWl4ZWRJbnN0YW5jZXNQb2xpY3k6IHtcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZTogbGF1bmNoVGVtcGxhdGUsXG4gICAgICAgICAgaW5zdGFuY2VzRGlzdHJpYnV0aW9uOiB7XG4gICAgICAgICAgICBvbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eTogcHJvcHMuc3BvdENhcGFjaXR5UGVyY2VudGFnZSxcbiAgICAgICAgICAgIHNwb3RBbGxvY2F0aW9uU3RyYXRlZ3k6IFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3kuQ0FQQUNJVFlfT1BUSU1JWkVEXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZU92ZXJyaWRlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmFnZW50SW5zdGFuY2VUeXBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBtaW5DYXBhY2l0eTogcHJvcHMuYWdlbnRNaW5JbnN0YW5jZXMsXG4gICAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5hZ2VudE1heEluc3RhbmNlcyxcbiAgICAgICAgY29vbGRvd246IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgICBncm91cE1ldHJpY3M6IFtHcm91cE1ldHJpY3MuYWxsKCldLFxuICAgICAgICB1cGRhdGVQb2xpY3k6IFVwZGF0ZVBvbGljeS5yZXBsYWNpbmdVcGRhdGUoKSxcbiAgICAgICAgbmV3SW5zdGFuY2VzUHJvdGVjdGVkRnJvbVNjYWxlSW46IHRydWUsXG4gICAgICAgIHRlcm1pbmF0aW9uUG9saWNpZXM6IFtcbiAgICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5PTERFU1RfTEFVTkNIX0NPTkZJR1VSQVRJT04sXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuQ0xPU0VTVF9UT19ORVhUX0lOU1RBTkNFX0hPVVJcbiAgICAgICAgXSxcbiAgICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGFnZW50Um9sZS5hdHRhY2hJbmxpbmVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5KHRoaXMsIGAke2lkfVVwZGF0ZUF1dG9TY2FsaW5nR3JvdXBQb2xpY3lgLCB7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpTZXRJbnN0YW5jZUhlYWx0aFwiLFxuICAgICAgICAgICAgICBcImF1dG9zY2FsaW5nOlRlcm1pbmF0ZUluc3RhbmNlSW5BdXRvU2NhbGluZ0dyb3VwXCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtgJHthdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBBcm59YF1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBCdWlsZGtpdGUgU3VzcGVuZCBBdXN0b3NjYWxpbmcgR3JvdXAgQ3VzdG9tIFJlc291cmNlXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIGAke2lkfVN1c3BlbmRBdXRvc2NhbGluZ1Byb2Nlc3NgLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQXV0b1NjYWxpbmdcIixcbiAgICAgICAgYWN0aW9uOiBcInN1c3BlbmRQcm9jZXNzZXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICAgIFNjYWxpbmdQcm9jZXNzZXM6IFtcIkFaUmViYWxhbmNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpidWlsZGtpdGVTdXNwZW5kQXV0b3NjYWxpbmdcIlxuICAgIH0pO1xuXG4gICAgbmV3IENmbkFwcGxpY2F0aW9uKHRoaXMsIGAke2lkfUFnZW50U2NhbGVyYCwge1xuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgYXBwbGljYXRpb25JZDpcbiAgICAgICAgICBcImFybjphd3M6c2VydmVybGVzc3JlcG86dXMtZWFzdC0xOjE3Mjg0MDA2NDgzMjphcHBsaWNhdGlvbnMvYnVpbGRraXRlLWFnZW50LXNjYWxlclwiLFxuICAgICAgICBzZW1hbnRpY1ZlcnNpb246IHByb3BzLmJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvblxuICAgICAgfSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlcjogYCR7YWdlbnRUb2tlbi5uYW1lfWAsXG4gICAgICAgIEJ1aWxka2l0ZUFnZW50VG9rZW5QYXJhbWV0ZXJTdG9yZUtNU0tleTogYWdlbnRUb2tlbi5jbWsua2V5LmtleUlkLFxuICAgICAgICBSb2xlUGVybWlzc2lvbnNCb3VuZGFyeUFSTjogXCJcIixcbiAgICAgICAgQnVpbGRraXRlUXVldWU6IHByb3BzLmJ1aWxka2l0ZVF1ZXVlLFxuICAgICAgICBBZ2VudHNQZXJJbnN0YW5jZTogYCR7cHJvcHMuYWdlbnRzUGVySW5zdGFuY2V9YCxcbiAgICAgICAgTWluU2l6ZTogYCR7cHJvcHMuYWdlbnRNaW5JbnN0YW5jZXN9YCxcbiAgICAgICAgTWF4U2l6ZTogYCR7cHJvcHMuYWdlbnRNYXhJbnN0YW5jZXN9YCxcbiAgICAgICAgQWdlbnRBdXRvU2NhbGVHcm91cDogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgU2NhbGVPdXRGYWN0b3I6IHByb3BzLnNjYWxlT3V0RmFjdG9yLFxuICAgICAgICBTY2FsZU91dEZvcldhaXRpbmdKb2JzOiBgJHtwcm9wcy5zY2FsZU91dFdhaXRpbmdGb3JKb2JzfWAsXG4gICAgICAgIEV2ZW50U2NoZWR1bGVQZXJpb2Q6IHByb3BzLnNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2QsXG4gICAgICAgIE1pblBvbGxJbnRlcnZhbDogcHJvcHMuc2NhbGVyTWluUG9sbEludGVydmFsLFxuICAgICAgICBMb2dSZXRlbnRpb25EYXlzOiBgJHtwcm9wcy5sb2dSZXRlbnRpb25EYXlzfWBcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWlsZGtpdGU7XG4iXX0=
@@ -0,0 +1,164 @@
1
+ import { type Construct } from "constructs";
2
+ import { type IBucket } from "aws-cdk-lib/aws-s3";
3
+ import { type IApplicationLoadBalancer } from "aws-cdk-lib/aws-elasticloadbalancingv2";
4
+ import { type ICertificate } from "aws-cdk-lib/aws-certificatemanager";
5
+ import { type ICachePolicy } from "aws-cdk-lib/aws-cloudfront";
6
+ import type App from "../../app";
7
+ import { CloudFrontDistribution, type CachePolicyPreset } from "../../resources/aws/cdn";
8
+ import { PrivateStorage, WebsiteStorage, PublicStorage } from "./storage";
9
+ import { type AnyCompute } from "./compute";
10
+ /**
11
+ * Union type for Fjall S3 storage classes.
12
+ */
13
+ type StorageResource = PrivateStorage | WebsiteStorage | PublicStorage;
14
+ /**
15
+ * S3 origin CDN props - use with S3 bucket
16
+ */
17
+ export interface S3CdnProps {
18
+ originType: "s3";
19
+ bucket: IBucket | StorageResource;
20
+ originPath?: string;
21
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
22
+ defaultAllowedMethods?: "GET_HEAD" | "GET_HEAD_OPTIONS" | "ALL";
23
+ behaviours?: SmartCdnBehaviour[];
24
+ domainNames?: string[];
25
+ certificate?: ICertificate;
26
+ comment?: string;
27
+ enableLogging?: boolean;
28
+ logBucket?: IBucket;
29
+ priceClass?: "PriceClass_100" | "PriceClass_200" | "PriceClass_All";
30
+ forwardHostHeader?: boolean;
31
+ }
32
+ /**
33
+ * ALB origin CDN props - use with Application Load Balancer
34
+ */
35
+ export interface AlbCdnProps {
36
+ originType: "alb";
37
+ loadBalancer: IApplicationLoadBalancer | AnyCompute;
38
+ protocolPolicy?: "HTTP_ONLY" | "HTTPS_ONLY" | "MATCH_VIEWER";
39
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
40
+ defaultAllowedMethods?: "GET_HEAD" | "GET_HEAD_OPTIONS" | "ALL";
41
+ behaviours?: SmartCdnBehaviour[];
42
+ domainNames?: string[];
43
+ certificate?: ICertificate;
44
+ comment?: string;
45
+ enableLogging?: boolean;
46
+ logBucket?: IBucket;
47
+ priceClass?: "PriceClass_100" | "PriceClass_200" | "PriceClass_All";
48
+ forwardHostHeader?: boolean;
49
+ }
50
+ /**
51
+ * HTTP origin CDN props - use with custom HTTP endpoint
52
+ */
53
+ export interface HttpCdnProps {
54
+ originType: "http";
55
+ domainName: string;
56
+ originPath?: string;
57
+ protocolPolicy?: "HTTP_ONLY" | "HTTPS_ONLY" | "MATCH_VIEWER";
58
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
59
+ defaultAllowedMethods?: "GET_HEAD" | "GET_HEAD_OPTIONS" | "ALL";
60
+ behaviours?: SmartCdnBehaviour[];
61
+ domainNames?: string[];
62
+ certificate?: ICertificate;
63
+ comment?: string;
64
+ enableLogging?: boolean;
65
+ logBucket?: IBucket;
66
+ priceClass?: "PriceClass_100" | "PriceClass_200" | "PriceClass_All";
67
+ forwardHostHeader?: boolean;
68
+ }
69
+ /**
70
+ * Smart origin CDN props - auto-detect origin type from Fjall resource
71
+ */
72
+ export interface SmartCdnProps {
73
+ originType: "auto";
74
+ origin: StorageResource | AnyCompute | string;
75
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
76
+ defaultAllowedMethods?: "GET_HEAD" | "GET_HEAD_OPTIONS" | "ALL";
77
+ behaviours?: SmartCdnBehaviour[];
78
+ domainNames?: string[];
79
+ certificate?: ICertificate;
80
+ comment?: string;
81
+ enableLogging?: boolean;
82
+ logBucket?: IBucket;
83
+ priceClass?: "PriceClass_100" | "PriceClass_200" | "PriceClass_All";
84
+ forwardHostHeader?: boolean;
85
+ }
86
+ export type ICdnProps = S3CdnProps | AlbCdnProps | HttpCdnProps | SmartCdnProps;
87
+ /**
88
+ * Smart behaviour type that accepts Fjall resources as origins.
89
+ * The factory will transform these to proper CdnBehaviour objects.
90
+ */
91
+ export interface SmartCdnBehaviour {
92
+ pathPattern: string;
93
+ origin: StorageResource | AnyCompute | string;
94
+ cachePolicy?: CachePolicyPreset | ICachePolicy;
95
+ allowedMethods?: "GET_HEAD" | "GET_HEAD_OPTIONS" | "ALL";
96
+ }
97
+ /**
98
+ * CDN wrapper class that extends CloudFrontDistribution with Fjall patterns.
99
+ */
100
+ export declare class Cdn extends CloudFrontDistribution {
101
+ constructor(scope: Construct, id: string, props: ICdnProps);
102
+ /**
103
+ * Resolve ICdnProps to CloudFrontDistributionProps.
104
+ */
105
+ private static resolveProps;
106
+ /**
107
+ * Transform smart behaviours to CdnBehaviour objects.
108
+ */
109
+ private static resolveBehaviours;
110
+ /**
111
+ * Resolve the default origin from ICdnProps.
112
+ */
113
+ private static resolveDefaultOrigin;
114
+ /**
115
+ * Auto-detect origin configuration from a Fjall resource.
116
+ */
117
+ private static detectOriginFromResource;
118
+ }
119
+ /**
120
+ * Factory for creating CDN (CloudFront) distributions.
121
+ *
122
+ * @example
123
+ * // S3 origin
124
+ * const assets = app.addStorage(StorageFactory.build("Assets", { bucketType: "private" }));
125
+ * app.addCdn(CdnFactory.build("AssetsCdn", {
126
+ * originType: "s3",
127
+ * bucket: assets
128
+ * }));
129
+ *
130
+ * @example
131
+ * // ALB origin (ECS)
132
+ * const api = app.addCompute(ComputeFactory.build("Api", { type: "ecs", ... }));
133
+ * app.addCdn(CdnFactory.build("ApiCdn", {
134
+ * originType: "alb",
135
+ * loadBalancer: api
136
+ * }));
137
+ *
138
+ * @example
139
+ * // Smart detection
140
+ * app.addCdn(CdnFactory.build("AppCdn", {
141
+ * originType: "auto",
142
+ * origin: assets
143
+ * }));
144
+ *
145
+ * @example
146
+ * // Custom domain
147
+ * app.addCdn(CdnFactory.build("AppCdn", {
148
+ * originType: "s3",
149
+ * bucket: assets,
150
+ * domainNames: ["app.example.com"],
151
+ * certificate: myCert
152
+ * }));
153
+ */
154
+ export declare class CdnFactory {
155
+ /**
156
+ * Build a CDN factory function.
157
+ *
158
+ * @param id - Unique identifier for the CDN
159
+ * @param props - CDN configuration properties
160
+ * @returns Factory function that creates the CDN when invoked
161
+ */
162
+ static build(id: string, props: ICdnProps): (_app: App, scope: Construct) => Cdn;
163
+ }
164
+ export {};