@fjall/components-infrastructure 0.87.20 → 0.88.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/dist/lib/app.d.ts +13 -17
  2. package/dist/lib/app.js +56 -40
  3. package/dist/lib/config/aws/accountId.js +1 -2
  4. package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
  5. package/dist/lib/config/aws/costAllocationTags.js +3 -4
  6. package/dist/lib/config/aws/identityCenter.js +1 -2
  7. package/dist/lib/config/aws/identityCenterGroupMembership.js +1 -6
  8. package/dist/lib/config/aws/index.d.ts +0 -1
  9. package/dist/lib/config/aws/index.js +1 -2
  10. package/dist/lib/config/aws/ipamDelegateAdmin.js +1 -2
  11. package/dist/lib/config/aws/ipamPoolId.js +1 -2
  12. package/dist/lib/config/aws/organisationId.js +1 -2
  13. package/dist/lib/config/aws/organisationsAccess.js +1 -2
  14. package/dist/lib/config/aws/ramSharing.js +1 -2
  15. package/dist/lib/patterns/aws/account.d.ts +12 -0
  16. package/dist/lib/patterns/aws/account.js +59 -0
  17. package/dist/lib/patterns/aws/buildkite.js +1 -2
  18. package/dist/lib/patterns/aws/cdn.d.ts +5 -10
  19. package/dist/lib/patterns/aws/cdn.js +5 -13
  20. package/dist/lib/patterns/aws/compute.d.ts +20 -3
  21. package/dist/lib/patterns/aws/compute.js +29 -5
  22. package/dist/lib/patterns/aws/database.d.ts +1 -1
  23. package/dist/lib/patterns/aws/database.js +16 -13
  24. package/dist/lib/patterns/aws/index.d.ts +4 -3
  25. package/dist/lib/patterns/aws/index.js +6 -4
  26. package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -1
  27. package/dist/lib/patterns/aws/interfaces/index.js +8 -5
  28. package/dist/lib/patterns/aws/interfaces/organisation.d.ts +22 -0
  29. package/dist/lib/patterns/aws/interfaces/organisation.js +28 -0
  30. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +5 -5
  31. package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
  32. package/dist/lib/patterns/aws/interfaces/storage.d.ts +10 -120
  33. package/dist/lib/patterns/aws/interfaces/storage.js +6 -43
  34. package/dist/lib/patterns/aws/organisation.d.ts +51 -0
  35. package/dist/lib/patterns/aws/organisation.js +150 -0
  36. package/dist/lib/patterns/aws/organisationFactory.d.ts +20 -0
  37. package/dist/lib/patterns/aws/organisationFactory.js +24 -0
  38. package/dist/lib/patterns/aws/pattern.d.ts +1 -1
  39. package/dist/lib/patterns/aws/pattern.js +1 -1
  40. package/dist/lib/patterns/aws/payload.d.ts +6 -5
  41. package/dist/lib/patterns/aws/payload.js +92 -42
  42. package/dist/lib/patterns/aws/platform.d.ts +11 -0
  43. package/dist/lib/patterns/aws/platform.js +29 -0
  44. package/dist/lib/patterns/aws/storage.d.ts +40 -125
  45. package/dist/lib/patterns/aws/storage.js +63 -191
  46. package/dist/lib/resources/aws/compute/ec2.d.ts +1 -1
  47. package/dist/lib/resources/aws/compute/ec2.js +3 -4
  48. package/dist/lib/resources/aws/compute/ecs.d.ts +6 -9
  49. package/dist/lib/resources/aws/compute/ecs.js +58 -26
  50. package/dist/lib/resources/aws/compute/lambda.d.ts +2 -0
  51. package/dist/lib/resources/aws/compute/lambda.js +11 -6
  52. package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
  53. package/dist/lib/resources/aws/database/rdsAurora.js +16 -16
  54. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
  55. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +14 -10
  56. package/dist/lib/resources/aws/database/rdsInstance.d.ts +5 -4
  57. package/dist/lib/resources/aws/database/rdsInstance.js +18 -7
  58. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +1 -2
  59. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -2
  60. package/dist/lib/resources/aws/iam/identityCenter/group.js +1 -4
  61. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +1 -4
  62. package/dist/lib/resources/aws/index.d.ts +1 -0
  63. package/dist/lib/resources/aws/index.js +2 -1
  64. package/dist/lib/resources/aws/logging/cloudTrail.js +7 -4
  65. package/dist/lib/resources/aws/networking/ipamPool.js +21 -3
  66. package/dist/lib/resources/aws/organisation/index.d.ts +4 -0
  67. package/dist/lib/resources/aws/organisation/index.js +10 -0
  68. package/dist/lib/resources/aws/organisation/organisation.d.ts +12 -0
  69. package/dist/lib/resources/aws/organisation/organisation.js +14 -0
  70. package/dist/lib/resources/aws/organisation/organisationAccount.d.ts +18 -0
  71. package/dist/lib/resources/aws/organisation/organisationAccount.js +31 -0
  72. package/dist/lib/resources/aws/organisation/organisationPolicy.d.ts +13 -0
  73. package/dist/lib/resources/aws/organisation/organisationPolicy.js +32 -0
  74. package/dist/lib/resources/aws/organisation/organisationalUnit.d.ts +10 -0
  75. package/dist/lib/resources/aws/organisation/organisationalUnit.js +9 -0
  76. package/dist/lib/resources/aws/secrets/kms.js +10 -7
  77. package/dist/lib/resources/aws/secrets/parameter.js +1 -2
  78. package/dist/lib/resources/aws/storage/ecr.d.ts +3 -1
  79. package/dist/lib/resources/aws/storage/ecr.js +5 -3
  80. package/dist/lib/resources/aws/storage/s3.d.ts +6 -39
  81. package/dist/lib/resources/aws/storage/s3.js +31 -34
  82. package/dist/lib/utils/capitaliseString.d.ts +12 -0
  83. package/dist/lib/utils/capitaliseString.js +30 -0
  84. package/dist/lib/utils/capitalizeString.d.ts +11 -0
  85. package/dist/lib/utils/capitalizeString.js +24 -1
  86. package/dist/lib/utils/getConfig.d.ts +1 -0
  87. package/dist/lib/utils/getConfig.js +9 -1
  88. package/dist/lib/utils/index.d.ts +1 -0
  89. package/dist/lib/utils/index.js +2 -1
  90. package/dist/lib/utils/resourceNaming.d.ts +22 -19
  91. package/dist/lib/utils/resourceNaming.js +42 -35
  92. package/package.json +3 -4
@@ -19,6 +19,8 @@ export interface LambdaFunctionProps {
19
19
  vpc?: IVpc;
20
20
  timeout?: number;
21
21
  memorySize?: number;
22
+ /** Ephemeral storage size in MiB */
23
+ ephemeralStorageSize?: number;
22
24
  inlinePolicy: PolicyStatement[];
23
25
  enableFunctionUrl?: boolean;
24
26
  functionUrlAuthType?: FunctionUrlAuthType;
@@ -72,8 +72,12 @@ class LambdaFunction extends aws_lambda_1.Function {
72
72
  ? aws_cdk_lib_1.Duration.seconds(props.timeout)
73
73
  : aws_cdk_lib_1.Duration.seconds(300),
74
74
  memorySize: props.memorySize || 128,
75
+ ephemeralStorageSize: props.ephemeralStorageSize
76
+ ? aws_cdk_lib_1.Size.mebibytes(props.ephemeralStorageSize)
77
+ : undefined,
75
78
  description: props.lambdaDescription || `${id} Lambda`,
76
- environment: props.environment
79
+ environment: props.environment,
80
+ logRetention: aws_logs_1.RetentionDays.ONE_WEEK
77
81
  });
78
82
  this.addPoliciesToRole(props.inlinePolicy);
79
83
  this.addSecretsSupport(props.secrets, props.ssmSecretsPath, props.secretsImport, props.appName, props.functionName, props.architecture);
@@ -90,16 +94,17 @@ class LambdaFunction extends aws_lambda_1.Function {
90
94
  description: `${id} Function URL`
91
95
  });
92
96
  }
97
+ new aws_cdk_lib_1.CfnOutput(this, `${id}FunctionArn`, {
98
+ key: `${id}FunctionArn`,
99
+ value: this.functionArn,
100
+ description: `${id} Function ARN`
101
+ });
93
102
  if (props.scheduleExpression) {
94
103
  const rule = new aws_events_1.Rule(this, `${id}ScheduleRule`, {
95
104
  schedule: aws_events_1.Schedule.expression(props.scheduleExpression)
96
105
  });
97
106
  rule.addTarget(new aws_events_targets_1.LambdaFunction(this));
98
107
  }
99
- new aws_logs_1.LogGroup(this, `${id}LogGroup`, {
100
- logGroupName: `/aws/lambda/${this.functionName}`,
101
- retention: aws_logs_1.RetentionDays.ONE_WEEK
102
- });
103
108
  }
104
109
  /**
105
110
  * The Lambda's execution role (auto-generated by CDK)
@@ -312,4 +317,4 @@ class LambdaFunction extends aws_lambda_1.Function {
312
317
  }
313
318
  }
314
319
  exports.LambdaFunction = LambdaFunction;
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELHVEQVdnQztBQUNoQyx5REFBbUQ7QUFDbkQsbUZBSzhDO0FBQzlDLCtDQUE0RDtBQUM1RCxpREFBMEU7QUFDMUUsaURBQTREO0FBQzVELHVEQUEyRTtBQUMzRSx1RUFBZ0Y7QUFDaEYsbURBQStEO0FBQy9ELHVFQUF3RDtBQUl4RCwrQkFBa0M7QUFHbEMsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsMEZBQTBGO0lBQzFGLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLG1GQUFtRjtJQUNuRixpQkFBaUIsRUFBRSxJQUFJO0NBQ2YsQ0FBQztBQXVDWCxNQUFhLGlCQUFrQixTQUFRLDhCQUFpQjtJQUN0RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsSUFBSSxFQUFFLElBQUEsU0FBSSxHQUFFO1lBQ1osT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxtQkFBbUI7WUFDaEUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7Z0JBQzlDLENBQUMsQ0FBQyxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lB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QUM7WUFDaEIsVUFBVSxFQUFFO2dCQUNWLFlBQVksRUFBRTtvQkFDWixnQkFBZ0IsRUFBRSxPQUFPLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCO2lCQUMvRDthQUNGO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQzFCLFlBQXFCLEVBQ3JCLE9BQWdCLEVBQ2hCLFlBQXFCO1FBRXJCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRTtnQkFDakUsOENBQThDO2dCQUM5QyxnRkFBZ0YsQ0FDbkYsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksT0FBTyxXQUFXLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQXJaRCx3Q0FxWkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjaywgU2l6ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU2luZ2xldG9uRnVuY3Rpb24gYXMgc2luZ2xldG9uRnVuY3Rpb24sXG4gIEZ1bmN0aW9uLFxuICB0eXBlIENvZGUsXG4gIHR5cGUgUnVudGltZSxcbiAgQXJjaGl0ZWN0dXJlLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnMsXG4gIHR5cGUgSW52b2tlTW9kZSxcbiAgU3RhcnRpbmdQb3NpdGlvbixcbiAgTGF5ZXJWZXJzaW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBGYWN0TmFtZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9yZWdpb24taW5mb1wiO1xuaW1wb3J0IHtcbiAgU3FzRXZlbnRTb3VyY2UsXG4gIER5bmFtb0V2ZW50U291cmNlLFxuICBTM0V2ZW50U291cmNlLFxuICB0eXBlIFMzRXZlbnRTb3VyY2VQcm9wc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzXCI7XG5pbXBvcnQgeyB0eXBlIEJ1Y2tldCwgRXZlbnRUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCB0eXBlIElSb2xlLCBFZmZlY3QgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBJVnBjLCBTdWJuZXRUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFJ1bGUsIFNjaGVkdWxlLCB0eXBlIEV2ZW50UGF0dGVybiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiBhcyBMYW1iZGFUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5pbXBvcnQgeyBMb2dHcm91cCwgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBJUXVldWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IHR5cGUgS2V5VmFsdWUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0SW1wb3J0IH0gZnJvbSBcIi4uL3NlY3JldHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuLi9uZXR3b3JraW5nL3ZwY1wiO1xuXG4vKipcbiAqIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24gY29uZmlndXJhdGlvbi5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvdXNlcmd1aWRlL3BzLWludGVncmF0aW9uLWxhbWJkYS1leHRlbnNpb25zLmh0bWxcbiAqL1xuY29uc3QgU0VDUkVUU19FWFRFTlNJT04gPSB7XG4gIC8qKiBFeHRlbnNpb24gdmVyc2lvbiBmb3IgUmVnaW9uSW5mbyBsb29rdXAgKG1hdGNoZXMgUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzKSAqL1xuICBWRVJTSU9OOiBcIjEuMC4xMDNcIixcbiAgLyoqIENhY2hlIFRUTCBpbiBzZWNvbmRzIC0gNjBzIHN1cHBvcnRzIHNlY3JldCByb3RhdGlvbiB3aGlsZSByZWR1Y2luZyBBUEkgY2FsbHMgKi9cbiAgQ0FDSEVfVFRMX1NFQ09ORFM6IFwiNjBcIlxufSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFGdW5jdGlvblByb3BzIHtcbiAgY29kZTogQ29kZTtcbiAgaGFuZGxlcjogc3RyaW5nO1xuICBsYW1iZGFEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBydW50aW1lOiBSdW50aW1lO1xuICAvKiogTGFtYmRhIENQVSBhcmNoaXRlY3R1cmUuIERlZmF1bHQ6IHg4Nl82NCAqL1xuICBhcmNoaXRlY3R1cmU/OiBBcmNoaXRlY3R1cmU7XG4gIHZwYz86IElWcGM7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIG1lbW9yeVNpemU/OiBudW1iZXI7XG4gIGlubGluZVBvbGljeTogUG9saWN5U3RhdGVtZW50W107XG5cbiAgZW5hYmxlRnVuY3Rpb25Vcmw/OiBib29sZWFuO1xuICBmdW5jdGlvblVybEF1dGhUeXBlPzogRnVuY3Rpb25VcmxBdXRoVHlwZTtcbiAgZnVuY3Rpb25VcmxDb3JzPzogRnVuY3Rpb25VcmxDb3JzT3B0aW9ucztcbiAgLyoqIEludm9rZSBtb2RlIGZvciBGdW5jdGlvbiBVUkwuIFVzZSBSRVNQT05TRV9TVFJFQU0gZm9yIExhbWJkYSBzdHJlYW1pbmcuICovXG4gIGZ1bmN0aW9uVXJsSW52b2tlTW9kZT86IEludm9rZU1vZGU7XG5cbiAgZW52aXJvbm1lbnQ/OiBLZXlWYWx1ZTtcblxuICB0YWdzPzogS2V5VmFsdWU7XG5cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIHNlY3JldHM/OiBzdHJpbmdbXTtcbiAgc3NtU2VjcmV0c1BhdGg/OiBzdHJpbmc7XG4gIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+O1xuICBhcHBOYW1lPzogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xldG9uRnVuY3Rpb25Qcm9wcyBleHRlbmRzIExhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICB1dWlkPzogc3RyaW5nO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFNpbmdsZXRvbkZ1bmN0aW9uIGV4dGVuZHMgc2luZ2xldG9uRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2luZ2xldG9uRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB1dWlkOiB1dWlkKCksXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMubGFtYmRhRGVzY3JpcHRpb24gfHwgYCR7aWR9IHNpbmdsZXRvbiBsYW1iZGFgLFxuICAgICAgcnVudGltZTogcHJvcHMucnVudGltZSxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICAgICAgICA/IFNpemUubWViaWJ5dGVzKHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplKVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRQb2xpY2llc1RvUm9sZShwcm9wcy5pbmxpbmVQb2xpY3kpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEncyBleGVjdXRpb24gcm9sZSAoYXV0by1nZW5lcmF0ZWQgYnkgQ0RLKVxuICAgKi9cbiAgcHVibGljIGdldCBleGVjdXRpb25Sb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQb2xpY2llc1RvUm9sZShzdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSkge1xuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFGdW5jdGlvbiBleHRlbmRzIEZ1bmN0aW9uIHtcbiAgcHJpdmF0ZSBmdW5jdGlvblVybFZhbHVlPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMYW1iZGFGdW5jdGlvblByb3BzKSB7XG4gICAgLy8gRXhwbGljaXRseSBzZXQgc3VibmV0IHNlbGVjdGlvbiB0byBtYXRjaCBWUEMgZW5kcG9pbnQgcGxhY2VtZW50XG4gICAgLy8gLSBXaXRoIE5BVDogUFJJVkFURV9XSVRIX0VHUkVTUyAoY2FuIGFjY2VzcyBpbnRlcm5ldCB2aWEgTkFUKVxuICAgIC8vIC0gV2l0aG91dCBOQVQ6IFBSSVZBVEVfSVNPTEFURUQgKGNhbiBhY2Nlc3MgVlBDIGVuZHBvaW50cyBvbmx5LCBubyBpbnRlcm5ldClcbiAgICBsZXQgdnBjU3VibmV0cztcbiAgICBpZiAocHJvcHMudnBjKSB7XG4gICAgICBjb25zdCBoYXNOYXRHYXRld2F5cyA9XG4gICAgICAgIHByb3BzLnZwYyBpbnN0YW5jZW9mIFZwYyA/IHByb3BzLnZwYy5oYXNOYXRHYXRld2F5cyA6IHRydWU7XG4gICAgICB2cGNTdWJuZXRzID0ge1xuICAgICAgICBzdWJuZXRUeXBlOiBoYXNOYXRHYXRld2F5c1xuICAgICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICAgICAgOiBTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhwcm9wcy50aW1lb3V0KVxuICAgICAgICA6IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUgfHwgMTI4LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBMYW1iZGFgLFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFBvbGljaWVzVG9Sb2xlKHByb3BzLmlubGluZVBvbGljeSk7XG5cbiAgICB0aGlzLmFkZFNlY3JldHNTdXBwb3J0KFxuICAgICAgcHJvcHMuc2VjcmV0cyxcbiAgICAgIHByb3BzLnNzbVNlY3JldHNQYXRoLFxuICAgICAgcHJvcHMuc2VjcmV0c0ltcG9ydCxcbiAgICAgIHByb3BzLmFwcE5hbWUsXG4gICAgICBwcm9wcy5mdW5jdGlvbk5hbWUsXG4gICAgICBwcm9wcy5hcmNoaXRlY3R1cmVcbiAgICApO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZUZ1bmN0aW9uVXJsKSB7XG4gICAgICBjb25zdCBmdW5jdGlvblVybCA9IHRoaXMuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgICBhdXRoVHlwZTogcHJvcHMuZnVuY3Rpb25VcmxBdXRoVHlwZSB8fCBGdW5jdGlvblVybEF1dGhUeXBlLkFXU19JQU0sXG4gICAgICAgIGNvcnM6IHByb3BzLmZ1bmN0aW9uVXJsQ29ycyxcbiAgICAgICAgaW52b2tlTW9kZTogcHJvcHMuZnVuY3Rpb25VcmxJbnZva2VNb2RlXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5mdW5jdGlvblVybFZhbHVlID0gZnVuY3Rpb25VcmwudXJsO1xuXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUZ1bmN0aW9uVXJsYCwge1xuICAgICAgICBrZXk6IGAke2lkfUZ1bmN0aW9uVXJsYCxcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uVXJsLnVybCxcbiAgICAgICAgZGVzY3JpcHRpb246IGAke2lkfSBGdW5jdGlvbiBVUkxgXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2NoZWR1bGVFeHByZXNzaW9uKSB7XG4gICAgICBjb25zdCBydWxlID0gbmV3IFJ1bGUodGhpcywgYCR7aWR9U2NoZWR1bGVSdWxlYCwge1xuICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuZXhwcmVzc2lvbihwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24pXG4gICAgICB9KTtcbiAgICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFUYXJnZXQodGhpcykpO1xuICAgIH1cblxuICAgIG5ldyBMb2dHcm91cCh0aGlzLCBgJHtpZH1Mb2dHcm91cGAsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7dGhpcy5mdW5jdGlvbk5hbWV9YCxcbiAgICAgIHJldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEncyBleGVjdXRpb24gcm9sZSAoYXV0by1nZW5lcmF0ZWQgYnkgQ0RLKVxuICAgKi9cbiAgcHVibGljIGdldCBleGVjdXRpb25Sb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgTGFtYmRhIGZ1bmN0aW9uIFVSTCBpZiBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9uVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25VcmxWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gU1FTIHF1ZXVlIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBtZXNzYWdlcyBhcnJpdmUgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcHVibGljIGFkZFNxc0V2ZW50U291cmNlKFxuICAgIHF1ZXVlOiBJUXVldWUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgICAgIG1heEJhdGNoaW5nV2luZG93PzogbnVtYmVyO1xuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgU3FzRXZlbnRTb3VyY2UocXVldWUsIHtcbiAgICAgIGJhdGNoU2l6ZTogb3B0aW9ucz8uYmF0Y2hTaXplID8/IDEwLFxuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IG9wdGlvbnM/Lm1heEJhdGNoaW5nV2luZG93XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhvcHRpb25zLm1heEJhdGNoaW5nV2luZG93KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiBvcHRpb25zPy5yZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcyA/PyB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgRHluYW1vREIgdGFibGUgc3RyZWFtIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBpdGVtcyBhcmUgbW9kaWZpZWQgaW4gdGhlIHRhYmxlLlxuICAgKiBSZXF1aXJlcyBEeW5hbW9EQiBTdHJlYW1zIHRvIGJlIGVuYWJsZWQgb24gdGhlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIGFkZER5bmFtb0RiRXZlbnRTb3VyY2UoXG4gICAgdGFibGU6IElUYWJsZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAgICAgc3RhcnRpbmdQb3NpdGlvbj86IFwiVFJJTV9IT1JJWk9OXCIgfCBcIkxBVEVTVFwiO1xuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c/OiBudW1iZXI7XG4gICAgICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAgICAgcGFyYWxsZWxpemF0aW9uRmFjdG9yPzogbnVtYmVyO1xuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRpbmdQb3NpdGlvbiA9XG4gICAgICBvcHRpb25zPy5zdGFydGluZ1Bvc2l0aW9uID09PSBcIlRSSU1fSE9SSVpPTlwiXG4gICAgICAgID8gU3RhcnRpbmdQb3NpdGlvbi5UUklNX0hPUklaT05cbiAgICAgICAgOiBTdGFydGluZ1Bvc2l0aW9uLkxBVEVTVDtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IER5bmFtb0V2ZW50U291cmNlKHRhYmxlLCB7XG4gICAgICBzdGFydGluZ1Bvc2l0aW9uLFxuICAgICAgYmF0Y2hTaXplOiBvcHRpb25zPy5iYXRjaFNpemUgPz8gMTAwLFxuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IG9wdGlvbnM/Lm1heEJhdGNoaW5nV2luZG93XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhvcHRpb25zLm1heEJhdGNoaW5nV2luZG93KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IG9wdGlvbnM/LnJldHJ5QXR0ZW1wdHMsXG4gICAgICBwYXJhbGxlbGl6YXRpb25GYWN0b3I6IG9wdGlvbnM/LnBhcmFsbGVsaXphdGlvbkZhY3RvcixcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiBvcHRpb25zPy5yZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcyA/PyB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIFMzIGJ1Y2tldCBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gb2JqZWN0cyBhcmUgY3JlYXRlZCwgbW9kaWZpZWQsIG9yIGRlbGV0ZWQuXG4gICAqIFVzZWZ1bCBmb3IgSVNSIGNhY2hlIGludmFsaWRhdGlvbiBhbmQgZmlsZSBwcm9jZXNzaW5nIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyBhZGRTM0V2ZW50U291cmNlKFxuICAgIGJ1Y2tldDogQnVja2V0LFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBldmVudHM/OiBBcnJheTxcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEXCJcbiAgICAgICAgfCBcIk9CSkVDVF9SRU1PVkVEXCJcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEX1BVVFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRF9QT1NUXCJcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEX0NPUFlcIlxuICAgICAgICB8IFwiT0JKRUNUX1JFTU9WRURfREVMRVRFXCJcbiAgICAgID47XG4gICAgICBmaWx0ZXJzPzogQXJyYXk8eyBwcmVmaXg/OiBzdHJpbmc7IHN1ZmZpeD86IHN0cmluZyB9PjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50VHlwZXMgPSAob3B0aW9ucz8uZXZlbnRzID8/IFtcIk9CSkVDVF9DUkVBVEVEXCJdKS5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX0NSRUFURUQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfUkVNT1ZFRFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX1JFTU9WRUQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9QVVRcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEX1BVVDtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9DUkVBVEVEX1BPU1RcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEX1BPU1Q7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9DT1BZXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9DT1BZO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX1JFTU9WRURfREVMRVRFXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfUkVNT1ZFRF9ERUxFVEU7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBldmVudDtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUzMgZXZlbnQgdHlwZTogJHtfZXhoYXVzdGl2ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgczNFdmVudFNvdXJjZVByb3BzOiBTM0V2ZW50U291cmNlUHJvcHMgPSB7XG4gICAgICBldmVudHM6IGV2ZW50VHlwZXMsXG4gICAgICBmaWx0ZXJzOiBvcHRpb25zPy5maWx0ZXJzXG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IFMzRXZlbnRTb3VyY2UoYnVja2V0LCBzM0V2ZW50U291cmNlUHJvcHMpO1xuICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBFdmVudEJyaWRnZSBydWxlIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBldmVudHMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gYXJlIHB1Ymxpc2hlZC5cbiAgICogVXNlZnVsIGZvciBzY2hlZHVsZWQgam9icywgY3Jvc3Mtc2VydmljZSBldmVudCBoYW5kbGluZywgYW5kIGN1c3RvbSBldmVudCBwYXR0ZXJucy5cbiAgICovXG4gIHB1YmxpYyBhZGRFdmVudEJyaWRnZUV2ZW50U291cmNlKFxuICAgIHJ1bGVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHNjaGVkdWxlPzogc3RyaW5nO1xuICAgICAgZXZlbnRQYXR0ZXJuPzogRXZlbnRQYXR0ZXJuO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfVxuICApOiBSdWxlIHtcbiAgICBpZiAoIW9wdGlvbnMuc2NoZWR1bGUgJiYgIW9wdGlvbnMuZXZlbnRQYXR0ZXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRXZlbnRCcmlkZ2UgcnVsZSByZXF1aXJlcyBlaXRoZXIgc2NoZWR1bGUgb3IgZXZlbnRQYXR0ZXJuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKHRoaXMsIHJ1bGVJZCwge1xuICAgICAgc2NoZWR1bGU6IG9wdGlvbnMuc2NoZWR1bGVcbiAgICAgICAgPyBTY2hlZHVsZS5leHByZXNzaW9uKG9wdGlvbnMuc2NoZWR1bGUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnRQYXR0ZXJuOiBvcHRpb25zLmV2ZW50UGF0dGVybixcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uXG4gICAgfSk7XG5cbiAgICBydWxlLmFkZFRhcmdldChuZXcgTGFtYmRhVGFyZ2V0KHRoaXMpKTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUG9saWNpZXNUb1JvbGUoc3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2VjcmV0cyBzdXBwb3J0IHVzaW5nIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24uXG4gICAqXG4gICAqIFRoZSBleHRlbnNpb24gZmV0Y2hlcyBzZWNyZXRzIGF0IHJ1bnRpbWUgZnJvbTpcbiAgICogLSBTU00gUGFyYW1ldGVyIFN0b3JlOiB2aWEgaHR0cDovL2xvY2FsaG9zdDoyNzczL3N5c3RlbXNtYW5hZ2VyL3BhcmFtZXRlcnMvZ2V0XG4gICAqIC0gU2VjcmV0cyBNYW5hZ2VyOiB2aWEgaHR0cDovL2xvY2FsaG9zdDoyNzczL3NlY3JldHNtYW5hZ2VyL2dldFxuICAgKlxuICAgKiBUaGlzIHJlcGxhY2VzIHRoZSBpbnNlY3VyZSB1bnNhZmVVbndyYXAoKSBwYXR0ZXJuIHdoaWNoIHJlc29sdmVkIHNlY3JldHMgYXRcbiAgICogZGVwbG95IHRpbWUgYW5kIGV4cG9zZWQgdGhlbSBpbiBMYW1iZGEgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c1N1cHBvcnQoXG4gICAgc2VjcmV0cz86IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+LFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nLFxuICAgIGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoYXNTZWNyZXRzTWFuYWdlciA9XG4gICAgICBzZWNyZXRzSW1wb3J0ICYmIE9iamVjdC5rZXlzKHNlY3JldHNJbXBvcnQpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzU3NtU2VjcmV0cyA9IChzZWNyZXRzPy5sZW5ndGggPz8gMCkgPiAwO1xuXG4gICAgaWYgKCFoYXNTZWNyZXRzTWFuYWdlciAmJiAhaGFzU3NtU2VjcmV0cykgcmV0dXJuO1xuXG4gICAgdGhpcy5hZGRTZWNyZXRzRXh0ZW5zaW9uTGF5ZXIoYXJjaGl0ZWN0dXJlKTtcblxuICAgIGlmIChoYXNTZWNyZXRzTWFuYWdlcikge1xuICAgICAgdGhpcy5hZGRTZWNyZXRzTWFuYWdlclN1cHBvcnQoc2VjcmV0c0ltcG9ydCk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1NzbVNlY3JldHMpIHtcbiAgICAgIHRoaXMuYWRkU3NtU2VjcmV0c1N1cHBvcnQoXG4gICAgICAgIHNlY3JldHMhLFxuICAgICAgICBzc21TZWNyZXRzUGF0aCxcbiAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgZnVuY3Rpb25OYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24gbGF5ZXIuXG4gICAqIFVzZXMgQ0RLJ3MgcmVnaW9uYWxGYWN0KCkgdG8gcmVzb2x2ZSB0aGUgY29ycmVjdCBBUk4gYXQgZGVwbG95IHRpbWUsXG4gICAqIGhhbmRsaW5nIHRoZSBmYWN0IHRoYXQgQVdTIHB1Ymxpc2hlcyB0aGUgbGF5ZXIgZnJvbSBkaWZmZXJlbnQgYWNjb3VudHNcbiAgICogaW4gZGlmZmVyZW50IHJlZ2lvbnMuIFRoaXMgYXBwcm9hY2ggd29ya3Mgd2l0aCBDREsgdG9rZW5zLlxuICAgKiBDb25maWd1cmVzIGNhY2hlIFRUTCBmb3Igcm90YXRpb24gc3VwcG9ydC5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c0V4dGVuc2lvbkxheWVyKGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgYXJjaFN0cmluZyA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IEFyY2hpdGVjdHVyZS5BUk1fNjQgPyBcImFybTY0XCIgOiBcIng4Nl82NFwiO1xuXG4gICAgY29uc3QgZmFjdE5hbWUgPSBGYWN0TmFtZS5wYXJhbXNBbmRTZWNyZXRzTGFtYmRhTGF5ZXIoXG4gICAgICBTRUNSRVRTX0VYVEVOU0lPTi5WRVJTSU9OLFxuICAgICAgYXJjaFN0cmluZ1xuICAgICk7XG5cbiAgICBjb25zdCBsYXllckFybiA9IHN0YWNrLnJlZ2lvbmFsRmFjdChmYWN0TmFtZSk7XG5cbiAgICB0aGlzLmFkZExheWVycyhcbiAgICAgIExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLm5vZGUuaWR9U2VjcmV0c0V4dGVuc2lvbmAsXG4gICAgICAgIGxheWVyQXJuXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlNFQ1JFVFNfTUFOQUdFUl9UVExcIixcbiAgICAgIFNFQ1JFVFNfRVhURU5TSU9OLkNBQ0hFX1RUTF9TRUNPTkRTXG4gICAgKTtcbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJTU01fUEFSQU1FVEVSX1NUT1JFX1RUTFwiLFxuICAgICAgU0VDUkVUU19FWFRFTlNJT04uQ0FDSEVfVFRMX1NFQ09ORFNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBTZWNyZXRzIE1hbmFnZXIgc3VwcG9ydCBmb3IgQ0RLLW1hbmFnZWQgc2VjcmV0cyAoZS5nLiwgZGF0YWJhc2UgY3JlZGVudGlhbHMpLlxuICAgKiBTdG9yZXMgQVJOICsgZmllbGQgYXMgZW52IHZhcnMgLSB0aGUgTGFtYmRhIEV4dGVuc2lvbiBmZXRjaGVzIGFjdHVhbCB2YWx1ZXMgYXQgcnVudGltZS5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c01hbmFnZXJTdXBwb3J0KFxuICAgIHNlY3JldHNJbXBvcnQ6IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD5cbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRJbXBvcnRdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3JldHNJbXBvcnQpKSB7XG4gICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5ub2RlLmlkfUltcG9ydGVkU2VjcmV0JHtrZXl9YCxcbiAgICAgICAgc2VjcmV0SW1wb3J0Lm5hbWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfQVJOYCwgc2VjcmV0LnNlY3JldEFybik7XG4gICAgICBpZiAoc2VjcmV0SW1wb3J0LmZpZWxkKSB7XG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfRklFTERgLCBzZWNyZXRJbXBvcnQuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBzZWNyZXQuZ3JhbnRSZWFkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpEZXNjcmliZUtleVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICBcImttczpWaWFTZXJ2aWNlXCI6IGBzZWNyZXRzbWFuYWdlci4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBzdXBwb3J0IGZvciB1c2VyLW1hbmFnZWQgc2VjcmV0cyAodmlhIGZqYWxsIHNlY3JldCBhZGQpLlxuICAgKiBTdG9yZXMgYmFzZSBwYXRoIGFuZCBzZWNyZXQgbmFtZXMgYXMgZW52IHZhcnMgZm9yIGNvbnN1bWVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGFkZFNzbVNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM6IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5kZXJpdmVTc21TZWNyZXRzUGF0aChcbiAgICAgIHNzbVNlY3JldHNQYXRoLFxuICAgICAgYXBwTmFtZSxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFwiU1NNX1NFQ1JFVFNfUEFUSFwiLCBiYXNlUGF0aCk7XG4gICAgdGhpcy5hZGRFbnZpcm9ubWVudChcIlNTTV9TRUNSRVRfTkFNRVNcIiwgc2VjcmV0cy5qb2luKFwiLFwiKSk7XG5cbiAgICBjb25zdCBzY29wZWRQYXRoID0gYXBwTmFtZSA/IGAvJHthcHBOYW1lfS8qYCA6IGAke2Jhc2VQYXRofS8qYDtcbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtTdGFjay5vZih0aGlzKS5yZWdpb259Oio6cGFyYW1ldGVyJHtzY29wZWRQYXRofWBcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgIFwia21zOlZpYVNlcnZpY2VcIjogYHNzbS4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgU1NNIHNlY3JldHMgcGF0aCBmb3IgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICogUGF0dGVybjogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlU3NtU2VjcmV0c1BhdGgoXG4gICAgZXhwbGljaXRQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGV4cGxpY2l0UGF0aCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0UGF0aDtcbiAgICB9XG5cbiAgICBpZiAoIWFwcE5hbWUgfHwgIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhbWJkYSBmdW5jdGlvbiBoYXMgc2VjcmV0cyBkZWZpbmVkIGJ1dCBubyBzc21TZWNyZXRzUGF0aCBpcyBzZXQgXCIgK1xuICAgICAgICAgIFwiYW5kIGFwcE5hbWUvZnVuY3Rpb25OYW1lIGFyZSBub3QgYXZhaWxhYmxlLiBcIiArXG4gICAgICAgICAgXCJFaXRoZXIgc2V0IHNzbVNlY3JldHNQYXRoIGV4cGxpY2l0bHksIG9yIGVuc3VyZSBBcHAuZ2V0TmFtZSgpIHJldHVybnMgYSB2YWx1ZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYC8ke2FwcE5hbWV9L2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gO1xuICB9XG59XG4iXX0=
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELHVEQVdnQztBQUNoQyx5REFBbUQ7QUFDbkQsbUZBSzhDO0FBQzlDLCtDQUE0RDtBQUM1RCxpREFBMEU7QUFDMUUsaURBQTREO0FBQzVELHVEQUEyRTtBQUMzRSx1RUFBZ0Y7QUFDaEYsbURBQXFEO0FBQ3JELHVFQUF3RDtBQUl4RCwrQkFBa0M7QUFHbEMsMkNBQXdDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsMEZBQTBGO0lBQzFGLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLG1GQUFtRjtJQUNuRixpQkFBaUIsRUFBRSxJQUFJO0NBQ2YsQ0FBQztBQXlDWCxNQUFhLGlCQUFrQixTQUFRLDhCQUFpQjtJQUN0RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsSUFBSSxFQUFFLElBQUEsU0FBSSxHQUFFO1lBQ1osT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEdBQUcsRUFBRSxtQkFBbUI7WUFDaEUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7Z0JBQzlDLENBQUMsQ0FBQyxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lB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QUFVLEVBQUU7YUFDaEU7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLENBQ2xCLElBQUkseUJBQWUsQ0FBQztZQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUN4QixTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDaEIsVUFBVSxFQUFFO2dCQUNWLFlBQVksRUFBRTtvQkFDWixnQkFBZ0IsRUFBRSxPQUFPLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCO2lCQUMvRDthQUNGO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQzFCLFlBQXFCLEVBQ3JCLE9BQWdCLEVBQ2hCLFlBQXFCO1FBRXJCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRTtnQkFDakUsOENBQThDO2dCQUM5QyxnRkFBZ0YsQ0FDbkYsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksT0FBTyxXQUFXLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQTFaRCx3Q0EwWkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjaywgU2l6ZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgU2luZ2xldG9uRnVuY3Rpb24gYXMgc2luZ2xldG9uRnVuY3Rpb24sXG4gIEZ1bmN0aW9uLFxuICB0eXBlIENvZGUsXG4gIHR5cGUgUnVudGltZSxcbiAgQXJjaGl0ZWN0dXJlLFxuICBGdW5jdGlvblVybEF1dGhUeXBlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnMsXG4gIHR5cGUgSW52b2tlTW9kZSxcbiAgU3RhcnRpbmdQb3NpdGlvbixcbiAgTGF5ZXJWZXJzaW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBGYWN0TmFtZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9yZWdpb24taW5mb1wiO1xuaW1wb3J0IHtcbiAgU3FzRXZlbnRTb3VyY2UsXG4gIER5bmFtb0V2ZW50U291cmNlLFxuICBTM0V2ZW50U291cmNlLFxuICB0eXBlIFMzRXZlbnRTb3VyY2VQcm9wc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzXCI7XG5pbXBvcnQgeyB0eXBlIEJ1Y2tldCwgRXZlbnRUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCB0eXBlIElSb2xlLCBFZmZlY3QgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBJVnBjLCBTdWJuZXRUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IFJ1bGUsIFNjaGVkdWxlLCB0eXBlIEV2ZW50UGF0dGVybiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiBhcyBMYW1iZGFUYXJnZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIElRdWV1ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3FzXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHlwZSBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXRJbXBvcnQgfSBmcm9tIFwiLi4vc2VjcmV0c1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uL25ldHdvcmtpbmcvdnBjXCI7XG5cbi8qKlxuICogQVdTIFBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTGFtYmRhIEV4dGVuc2lvbiBjb25maWd1cmF0aW9uLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3lzdGVtcy1tYW5hZ2VyL2xhdGVzdC91c2VyZ3VpZGUvcHMtaW50ZWdyYXRpb24tbGFtYmRhLWV4dGVuc2lvbnMuaHRtbFxuICovXG5jb25zdCBTRUNSRVRTX0VYVEVOU0lPTiA9IHtcbiAgLyoqIEV4dGVuc2lvbiB2ZXJzaW9uIGZvciBSZWdpb25JbmZvIGxvb2t1cCAobWF0Y2hlcyBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMpICovXG4gIFZFUlNJT046IFwiMS4wLjEwM1wiLFxuICAvKiogQ2FjaGUgVFRMIGluIHNlY29uZHMgLSA2MHMgc3VwcG9ydHMgc2VjcmV0IHJvdGF0aW9uIHdoaWxlIHJlZHVjaW5nIEFQSSBjYWxscyAqL1xuICBDQUNIRV9UVExfU0VDT05EUzogXCI2MFwiXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICBjb2RlOiBDb2RlO1xuICBoYW5kbGVyOiBzdHJpbmc7XG4gIGxhbWJkYURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICByb2xlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bnRpbWU6IFJ1bnRpbWU7XG4gIC8qKiBMYW1iZGEgQ1BVIGFyY2hpdGVjdHVyZS4gRGVmYXVsdDogeDg2XzY0ICovXG4gIGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcbiAgdnBjPzogSVZwYztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgbWVtb3J5U2l6ZT86IG51bWJlcjtcbiAgLyoqIEVwaGVtZXJhbCBzdG9yYWdlIHNpemUgaW4gTWlCICovXG4gIGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyO1xuICBpbmxpbmVQb2xpY3k6IFBvbGljeVN0YXRlbWVudFtdO1xuXG4gIGVuYWJsZUZ1bmN0aW9uVXJsPzogYm9vbGVhbjtcbiAgZnVuY3Rpb25VcmxBdXRoVHlwZT86IEZ1bmN0aW9uVXJsQXV0aFR5cGU7XG4gIGZ1bmN0aW9uVXJsQ29ycz86IEZ1bmN0aW9uVXJsQ29yc09wdGlvbnM7XG4gIC8qKiBJbnZva2UgbW9kZSBmb3IgRnVuY3Rpb24gVVJMLiBVc2UgUkVTUE9OU0VfU1RSRUFNIGZvciBMYW1iZGEgc3RyZWFtaW5nLiAqL1xuICBmdW5jdGlvblVybEludm9rZU1vZGU/OiBJbnZva2VNb2RlO1xuXG4gIGVudmlyb25tZW50PzogS2V5VmFsdWU7XG5cbiAgdGFncz86IEtleVZhbHVlO1xuXG4gIHNjaGVkdWxlRXhwcmVzc2lvbj86IHN0cmluZztcblxuICBzZWNyZXRzPzogc3RyaW5nW107XG4gIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nO1xuICBzZWNyZXRzSW1wb3J0PzogUmVjb3JkPHN0cmluZywgU2VjcmV0SW1wb3J0PjtcbiAgYXBwTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZXRvbkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBMYW1iZGFGdW5jdGlvblByb3BzIHtcbiAgdXVpZD86IHN0cmluZztcbiAgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBTaW5nbGV0b25GdW5jdGlvbiBleHRlbmRzIHNpbmdsZXRvbkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNpbmdsZXRvbkZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdXVpZDogdXVpZCgpLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmxhbWJkYURlc2NyaXB0aW9uIHx8IGAke2lkfSBzaW5nbGV0b24gbGFtYmRhYCxcbiAgICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWUsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogcHJvcHMuZXBoZW1lcmFsU3RvcmFnZVNpemVcbiAgICAgICAgPyBTaXplLm1lYmlieXRlcyhwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkUG9saWNpZXNUb1JvbGUocHJvcHMuaW5saW5lUG9saWN5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhJ3MgZXhlY3V0aW9uIHJvbGUgKGF1dG8tZ2VuZXJhdGVkIGJ5IENESylcbiAgICovXG4gIHB1YmxpYyBnZXQgZXhlY3V0aW9uUm9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm9sZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUG9saWNpZXNUb1JvbGUoc3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gIHByaXZhdGUgZnVuY3Rpb25VcmxWYWx1ZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTGFtYmRhRnVuY3Rpb25Qcm9wcykge1xuICAgIC8vIEV4cGxpY2l0bHkgc2V0IHN1Ym5ldCBzZWxlY3Rpb24gdG8gbWF0Y2ggVlBDIGVuZHBvaW50IHBsYWNlbWVudFxuICAgIC8vIC0gV2l0aCBOQVQ6IFBSSVZBVEVfV0lUSF9FR1JFU1MgKGNhbiBhY2Nlc3MgaW50ZXJuZXQgdmlhIE5BVClcbiAgICAvLyAtIFdpdGhvdXQgTkFUOiBQUklWQVRFX0lTT0xBVEVEIChjYW4gYWNjZXNzIFZQQyBlbmRwb2ludHMgb25seSwgbm8gaW50ZXJuZXQpXG4gICAgbGV0IHZwY1N1Ym5ldHM7XG4gICAgaWYgKHByb3BzLnZwYykge1xuICAgICAgY29uc3QgaGFzTmF0R2F0ZXdheXMgPVxuICAgICAgICBwcm9wcy52cGMgaW5zdGFuY2VvZiBWcGMgPyBwcm9wcy52cGMuaGFzTmF0R2F0ZXdheXMgOiB0cnVlO1xuICAgICAgdnBjU3VibmV0cyA9IHtcbiAgICAgICAgc3VibmV0VHlwZTogaGFzTmF0R2F0ZXdheXNcbiAgICAgICAgICA/IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgICAgICAgIDogU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICB2cGNTdWJuZXRzLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dFxuICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMocHJvcHMudGltZW91dClcbiAgICAgICAgOiBEdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplIHx8IDEyOCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICAgICAgICA/IFNpemUubWViaWJ5dGVzKHByb3BzLmVwaGVtZXJhbFN0b3JhZ2VTaXplKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5sYW1iZGFEZXNjcmlwdGlvbiB8fCBgJHtpZH0gTGFtYmRhYCxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5PTkVfV0VFS1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRQb2xpY2llc1RvUm9sZShwcm9wcy5pbmxpbmVQb2xpY3kpO1xuXG4gICAgdGhpcy5hZGRTZWNyZXRzU3VwcG9ydChcbiAgICAgIHByb3BzLnNlY3JldHMsXG4gICAgICBwcm9wcy5zc21TZWNyZXRzUGF0aCxcbiAgICAgIHByb3BzLnNlY3JldHNJbXBvcnQsXG4gICAgICBwcm9wcy5hcHBOYW1lLFxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lLFxuICAgICAgcHJvcHMuYXJjaGl0ZWN0dXJlXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy5lbmFibGVGdW5jdGlvblVybCkge1xuICAgICAgY29uc3QgZnVuY3Rpb25VcmwgPSB0aGlzLmFkZEZ1bmN0aW9uVXJsKHtcbiAgICAgICAgYXV0aFR5cGU6IHByb3BzLmZ1bmN0aW9uVXJsQXV0aFR5cGUgfHwgRnVuY3Rpb25VcmxBdXRoVHlwZS5BV1NfSUFNLFxuICAgICAgICBjb3JzOiBwcm9wcy5mdW5jdGlvblVybENvcnMsXG4gICAgICAgIGludm9rZU1vZGU6IHByb3BzLmZ1bmN0aW9uVXJsSW52b2tlTW9kZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZnVuY3Rpb25VcmxWYWx1ZSA9IGZ1bmN0aW9uVXJsLnVybDtcblxuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1GdW5jdGlvblVybGAsIHtcbiAgICAgICAga2V5OiBgJHtpZH1GdW5jdGlvblVybGAsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvblVybC51cmwsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtpZH0gRnVuY3Rpb24gVVJMYFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1GdW5jdGlvbkFybmAsIHtcbiAgICAgIGtleTogYCR7aWR9RnVuY3Rpb25Bcm5gLFxuICAgICAgdmFsdWU6IHRoaXMuZnVuY3Rpb25Bcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYCR7aWR9IEZ1bmN0aW9uIEFSTmBcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24pIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSBuZXcgUnVsZSh0aGlzLCBgJHtpZH1TY2hlZHVsZVJ1bGVgLCB7XG4gICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5leHByZXNzaW9uKHByb3BzLnNjaGVkdWxlRXhwcmVzc2lvbilcbiAgICAgIH0pO1xuICAgICAgcnVsZS5hZGRUYXJnZXQobmV3IExhbWJkYVRhcmdldCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEncyBleGVjdXRpb24gcm9sZSAoYXV0by1nZW5lcmF0ZWQgYnkgQ0RLKVxuICAgKi9cbiAgcHVibGljIGdldCBleGVjdXRpb25Sb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgTGFtYmRhIGZ1bmN0aW9uIFVSTCBpZiBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9uVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25VcmxWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gU1FTIHF1ZXVlIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBtZXNzYWdlcyBhcnJpdmUgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcHVibGljIGFkZFNxc0V2ZW50U291cmNlKFxuICAgIHF1ZXVlOiBJUXVldWUsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGJhdGNoU2l6ZT86IG51bWJlcjtcbiAgICAgIG1heEJhdGNoaW5nV2luZG93PzogbnVtYmVyO1xuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgU3FzRXZlbnRTb3VyY2UocXVldWUsIHtcbiAgICAgIGJhdGNoU2l6ZTogb3B0aW9ucz8uYmF0Y2hTaXplID8/IDEwLFxuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IG9wdGlvbnM/Lm1heEJhdGNoaW5nV2luZG93XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhvcHRpb25zLm1heEJhdGNoaW5nV2luZG93KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiBvcHRpb25zPy5yZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcyA/PyB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgRHluYW1vREIgdGFibGUgc3RyZWFtIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBpdGVtcyBhcmUgbW9kaWZpZWQgaW4gdGhlIHRhYmxlLlxuICAgKiBSZXF1aXJlcyBEeW5hbW9EQiBTdHJlYW1zIHRvIGJlIGVuYWJsZWQgb24gdGhlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIGFkZER5bmFtb0RiRXZlbnRTb3VyY2UoXG4gICAgdGFibGU6IElUYWJsZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgYmF0Y2hTaXplPzogbnVtYmVyO1xuICAgICAgc3RhcnRpbmdQb3NpdGlvbj86IFwiVFJJTV9IT1JJWk9OXCIgfCBcIkxBVEVTVFwiO1xuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c/OiBudW1iZXI7XG4gICAgICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAgICAgcGFyYWxsZWxpemF0aW9uRmFjdG9yPzogbnVtYmVyO1xuICAgICAgcmVwb3J0QmF0Y2hJdGVtRmFpbHVyZXM/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRpbmdQb3NpdGlvbiA9XG4gICAgICBvcHRpb25zPy5zdGFydGluZ1Bvc2l0aW9uID09PSBcIlRSSU1fSE9SSVpPTlwiXG4gICAgICAgID8gU3RhcnRpbmdQb3NpdGlvbi5UUklNX0hPUklaT05cbiAgICAgICAgOiBTdGFydGluZ1Bvc2l0aW9uLkxBVEVTVDtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IER5bmFtb0V2ZW50U291cmNlKHRhYmxlLCB7XG4gICAgICBzdGFydGluZ1Bvc2l0aW9uLFxuICAgICAgYmF0Y2hTaXplOiBvcHRpb25zPy5iYXRjaFNpemUgPz8gMTAwLFxuICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IG9wdGlvbnM/Lm1heEJhdGNoaW5nV2luZG93XG4gICAgICAgID8gRHVyYXRpb24uc2Vjb25kcyhvcHRpb25zLm1heEJhdGNoaW5nV2luZG93KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IG9wdGlvbnM/LnJldHJ5QXR0ZW1wdHMsXG4gICAgICBwYXJhbGxlbGl6YXRpb25GYWN0b3I6IG9wdGlvbnM/LnBhcmFsbGVsaXphdGlvbkZhY3RvcixcbiAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiBvcHRpb25zPy5yZXBvcnRCYXRjaEl0ZW1GYWlsdXJlcyA/PyB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIFMzIGJ1Y2tldCBhcyBhbiBldmVudCBzb3VyY2UgZm9yIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgTGFtYmRhIHdoZW4gb2JqZWN0cyBhcmUgY3JlYXRlZCwgbW9kaWZpZWQsIG9yIGRlbGV0ZWQuXG4gICAqIFVzZWZ1bCBmb3IgSVNSIGNhY2hlIGludmFsaWRhdGlvbiBhbmQgZmlsZSBwcm9jZXNzaW5nIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyBhZGRTM0V2ZW50U291cmNlKFxuICAgIGJ1Y2tldDogQnVja2V0LFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBldmVudHM/OiBBcnJheTxcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEXCJcbiAgICAgICAgfCBcIk9CSkVDVF9SRU1PVkVEXCJcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEX1BVVFwiXG4gICAgICAgIHwgXCJPQkpFQ1RfQ1JFQVRFRF9QT1NUXCJcbiAgICAgICAgfCBcIk9CSkVDVF9DUkVBVEVEX0NPUFlcIlxuICAgICAgICB8IFwiT0JKRUNUX1JFTU9WRURfREVMRVRFXCJcbiAgICAgID47XG4gICAgICBmaWx0ZXJzPzogQXJyYXk8eyBwcmVmaXg/OiBzdHJpbmc7IHN1ZmZpeD86IHN0cmluZyB9PjtcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50VHlwZXMgPSAob3B0aW9ucz8uZXZlbnRzID8/IFtcIk9CSkVDVF9DUkVBVEVEXCJdKS5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX0NSRUFURUQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfUkVNT1ZFRFwiOlxuICAgICAgICAgIHJldHVybiBFdmVudFR5cGUuT0JKRUNUX1JFTU9WRUQ7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9QVVRcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEX1BVVDtcbiAgICAgICAgY2FzZSBcIk9CSkVDVF9DUkVBVEVEX1BPU1RcIjpcbiAgICAgICAgICByZXR1cm4gRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVEX1BPU1Q7XG4gICAgICAgIGNhc2UgXCJPQkpFQ1RfQ1JFQVRFRF9DT1BZXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfQ1JFQVRFRF9DT1BZO1xuICAgICAgICBjYXNlIFwiT0JKRUNUX1JFTU9WRURfREVMRVRFXCI6XG4gICAgICAgICAgcmV0dXJuIEV2ZW50VHlwZS5PQkpFQ1RfUkVNT1ZFRF9ERUxFVEU7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBldmVudDtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUzMgZXZlbnQgdHlwZTogJHtfZXhoYXVzdGl2ZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgczNFdmVudFNvdXJjZVByb3BzOiBTM0V2ZW50U291cmNlUHJvcHMgPSB7XG4gICAgICBldmVudHM6IGV2ZW50VHlwZXMsXG4gICAgICBmaWx0ZXJzOiBvcHRpb25zPy5maWx0ZXJzXG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IFMzRXZlbnRTb3VyY2UoYnVja2V0LCBzM0V2ZW50U291cmNlUHJvcHMpO1xuICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnRTb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBFdmVudEJyaWRnZSBydWxlIGFzIGFuIGV2ZW50IHNvdXJjZSBmb3IgdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBMYW1iZGEgd2hlbiBldmVudHMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gYXJlIHB1Ymxpc2hlZC5cbiAgICogVXNlZnVsIGZvciBzY2hlZHVsZWQgam9icywgY3Jvc3Mtc2VydmljZSBldmVudCBoYW5kbGluZywgYW5kIGN1c3RvbSBldmVudCBwYXR0ZXJucy5cbiAgICovXG4gIHB1YmxpYyBhZGRFdmVudEJyaWRnZUV2ZW50U291cmNlKFxuICAgIHJ1bGVJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHNjaGVkdWxlPzogc3RyaW5nO1xuICAgICAgZXZlbnRQYXR0ZXJuPzogRXZlbnRQYXR0ZXJuO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfVxuICApOiBSdWxlIHtcbiAgICBpZiAoIW9wdGlvbnMuc2NoZWR1bGUgJiYgIW9wdGlvbnMuZXZlbnRQYXR0ZXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRXZlbnRCcmlkZ2UgcnVsZSByZXF1aXJlcyBlaXRoZXIgc2NoZWR1bGUgb3IgZXZlbnRQYXR0ZXJuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSdWxlKHRoaXMsIHJ1bGVJZCwge1xuICAgICAgc2NoZWR1bGU6IG9wdGlvbnMuc2NoZWR1bGVcbiAgICAgICAgPyBTY2hlZHVsZS5leHByZXNzaW9uKG9wdGlvbnMuc2NoZWR1bGUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnRQYXR0ZXJuOiBvcHRpb25zLmV2ZW50UGF0dGVybixcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uXG4gICAgfSk7XG5cbiAgICBydWxlLmFkZFRhcmdldChuZXcgTGFtYmRhVGFyZ2V0KHRoaXMpKTtcbiAgICByZXR1cm4gcnVsZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUG9saWNpZXNUb1JvbGUoc3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10pIHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2VjcmV0cyBzdXBwb3J0IHVzaW5nIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24uXG4gICAqXG4gICAqIFRoZSBleHRlbnNpb24gZmV0Y2hlcyBzZWNyZXRzIGF0IHJ1bnRpbWUgZnJvbTpcbiAgICogLSBTU00gUGFyYW1ldGVyIFN0b3JlOiB2aWEgaHR0cDovL2xvY2FsaG9zdDoyNzczL3N5c3RlbXNtYW5hZ2VyL3BhcmFtZXRlcnMvZ2V0XG4gICAqIC0gU2VjcmV0cyBNYW5hZ2VyOiB2aWEgaHR0cDovL2xvY2FsaG9zdDoyNzczL3NlY3JldHNtYW5hZ2VyL2dldFxuICAgKlxuICAgKiBUaGlzIHJlcGxhY2VzIHRoZSBpbnNlY3VyZSB1bnNhZmVVbndyYXAoKSBwYXR0ZXJuIHdoaWNoIHJlc29sdmVkIHNlY3JldHMgYXRcbiAgICogZGVwbG95IHRpbWUgYW5kIGV4cG9zZWQgdGhlbSBpbiBMYW1iZGEgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c1N1cHBvcnQoXG4gICAgc2VjcmV0cz86IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+LFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nLFxuICAgIGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBoYXNTZWNyZXRzTWFuYWdlciA9XG4gICAgICBzZWNyZXRzSW1wb3J0ICYmIE9iamVjdC5rZXlzKHNlY3JldHNJbXBvcnQpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgaGFzU3NtU2VjcmV0cyA9IChzZWNyZXRzPy5sZW5ndGggPz8gMCkgPiAwO1xuXG4gICAgaWYgKCFoYXNTZWNyZXRzTWFuYWdlciAmJiAhaGFzU3NtU2VjcmV0cykgcmV0dXJuO1xuXG4gICAgdGhpcy5hZGRTZWNyZXRzRXh0ZW5zaW9uTGF5ZXIoYXJjaGl0ZWN0dXJlKTtcblxuICAgIGlmIChoYXNTZWNyZXRzTWFuYWdlcikge1xuICAgICAgdGhpcy5hZGRTZWNyZXRzTWFuYWdlclN1cHBvcnQoc2VjcmV0c0ltcG9ydCk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1NzbVNlY3JldHMpIHtcbiAgICAgIHRoaXMuYWRkU3NtU2VjcmV0c1N1cHBvcnQoXG4gICAgICAgIHNlY3JldHMhLFxuICAgICAgICBzc21TZWNyZXRzUGF0aCxcbiAgICAgICAgYXBwTmFtZSxcbiAgICAgICAgZnVuY3Rpb25OYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIEFXUyBQYXJhbWV0ZXJzIGFuZCBTZWNyZXRzIExhbWJkYSBFeHRlbnNpb24gbGF5ZXIuXG4gICAqIFVzZXMgQ0RLJ3MgcmVnaW9uYWxGYWN0KCkgdG8gcmVzb2x2ZSB0aGUgY29ycmVjdCBBUk4gYXQgZGVwbG95IHRpbWUsXG4gICAqIGhhbmRsaW5nIHRoZSBmYWN0IHRoYXQgQVdTIHB1Ymxpc2hlcyB0aGUgbGF5ZXIgZnJvbSBkaWZmZXJlbnQgYWNjb3VudHNcbiAgICogaW4gZGlmZmVyZW50IHJlZ2lvbnMuIFRoaXMgYXBwcm9hY2ggd29ya3Mgd2l0aCBDREsgdG9rZW5zLlxuICAgKiBDb25maWd1cmVzIGNhY2hlIFRUTCBmb3Igcm90YXRpb24gc3VwcG9ydC5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c0V4dGVuc2lvbkxheWVyKGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgYXJjaFN0cmluZyA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IEFyY2hpdGVjdHVyZS5BUk1fNjQgPyBcImFybTY0XCIgOiBcIng4Nl82NFwiO1xuXG4gICAgY29uc3QgZmFjdE5hbWUgPSBGYWN0TmFtZS5wYXJhbXNBbmRTZWNyZXRzTGFtYmRhTGF5ZXIoXG4gICAgICBTRUNSRVRTX0VYVEVOU0lPTi5WRVJTSU9OLFxuICAgICAgYXJjaFN0cmluZ1xuICAgICk7XG5cbiAgICBjb25zdCBsYXllckFybiA9IHN0YWNrLnJlZ2lvbmFsRmFjdChmYWN0TmFtZSk7XG5cbiAgICB0aGlzLmFkZExheWVycyhcbiAgICAgIExheWVyVmVyc2lvbi5mcm9tTGF5ZXJWZXJzaW9uQXJuKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHt0aGlzLm5vZGUuaWR9U2VjcmV0c0V4dGVuc2lvbmAsXG4gICAgICAgIGxheWVyQXJuXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlNFQ1JFVFNfTUFOQUdFUl9UVExcIixcbiAgICAgIFNFQ1JFVFNfRVhURU5TSU9OLkNBQ0hFX1RUTF9TRUNPTkRTXG4gICAgKTtcbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJTU01fUEFSQU1FVEVSX1NUT1JFX1RUTFwiLFxuICAgICAgU0VDUkVUU19FWFRFTlNJT04uQ0FDSEVfVFRMX1NFQ09ORFNcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBTZWNyZXRzIE1hbmFnZXIgc3VwcG9ydCBmb3IgQ0RLLW1hbmFnZWQgc2VjcmV0cyAoZS5nLiwgZGF0YWJhc2UgY3JlZGVudGlhbHMpLlxuICAgKiBTdG9yZXMgQVJOICsgZmllbGQgYXMgZW52IHZhcnMgLSB0aGUgTGFtYmRhIEV4dGVuc2lvbiBmZXRjaGVzIGFjdHVhbCB2YWx1ZXMgYXQgcnVudGltZS5cbiAgICovXG4gIHByaXZhdGUgYWRkU2VjcmV0c01hbmFnZXJTdXBwb3J0KFxuICAgIHNlY3JldHNJbXBvcnQ6IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD5cbiAgKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzZWNyZXRJbXBvcnRdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3JldHNJbXBvcnQpKSB7XG4gICAgICBjb25zdCBzZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7dGhpcy5ub2RlLmlkfUltcG9ydGVkU2VjcmV0JHtrZXl9YCxcbiAgICAgICAgc2VjcmV0SW1wb3J0Lm5hbWVcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfQVJOYCwgc2VjcmV0LnNlY3JldEFybik7XG4gICAgICBpZiAoc2VjcmV0SW1wb3J0LmZpZWxkKSB7XG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoYCR7a2V5fV9TRUNSRVRfRklFTERgLCBzZWNyZXRJbXBvcnQuZmllbGQpO1xuICAgICAgfVxuXG4gICAgICBzZWNyZXQuZ3JhbnRSZWFkKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpEZXNjcmliZUtleVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICBcImttczpWaWFTZXJ2aWNlXCI6IGBzZWNyZXRzbWFuYWdlci4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgU1NNIFBhcmFtZXRlciBTdG9yZSBzdXBwb3J0IGZvciB1c2VyLW1hbmFnZWQgc2VjcmV0cyAodmlhIGZqYWxsIHNlY3JldCBhZGQpLlxuICAgKiBTdG9yZXMgYmFzZSBwYXRoIGFuZCBzZWNyZXQgbmFtZXMgYXMgZW52IHZhcnMgZm9yIGNvbnN1bWVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIGFkZFNzbVNlY3JldHNTdXBwb3J0KFxuICAgIHNlY3JldHM6IHN0cmluZ1tdLFxuICAgIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gdGhpcy5kZXJpdmVTc21TZWNyZXRzUGF0aChcbiAgICAgIHNzbVNlY3JldHNQYXRoLFxuICAgICAgYXBwTmFtZSxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICk7XG5cbiAgICB0aGlzLmFkZEVudmlyb25tZW50KFwiU1NNX1NFQ1JFVFNfUEFUSFwiLCBiYXNlUGF0aCk7XG4gICAgdGhpcy5hZGRFbnZpcm9ubWVudChcIlNTTV9TRUNSRVRfTkFNRVNcIiwgc2VjcmV0cy5qb2luKFwiLFwiKSk7XG5cbiAgICBjb25zdCBzY29wZWRQYXRoID0gYXBwTmFtZSA/IGAvJHthcHBOYW1lfS8qYCA6IGAke2Jhc2VQYXRofS8qYDtcbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtTdGFjay5vZih0aGlzKS5yZWdpb259Oio6cGFyYW1ldGVyJHtzY29wZWRQYXRofWBcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcImttczpEZWNyeXB0XCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgIFwia21zOlZpYVNlcnZpY2VcIjogYHNzbS4ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXJpdmUgU1NNIHNlY3JldHMgcGF0aCBmb3IgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICogUGF0dGVybjogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICovXG4gIHByaXZhdGUgZGVyaXZlU3NtU2VjcmV0c1BhdGgoXG4gICAgZXhwbGljaXRQYXRoPzogc3RyaW5nLFxuICAgIGFwcE5hbWU/OiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKGV4cGxpY2l0UGF0aCkge1xuICAgICAgcmV0dXJuIGV4cGxpY2l0UGF0aDtcbiAgICB9XG5cbiAgICBpZiAoIWFwcE5hbWUgfHwgIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxhbWJkYSBmdW5jdGlvbiBoYXMgc2VjcmV0cyBkZWZpbmVkIGJ1dCBubyBzc21TZWNyZXRzUGF0aCBpcyBzZXQgXCIgK1xuICAgICAgICAgIFwiYW5kIGFwcE5hbWUvZnVuY3Rpb25OYW1lIGFyZSBub3QgYXZhaWxhYmxlLiBcIiArXG4gICAgICAgICAgXCJFaXRoZXIgc2V0IHNzbVNlY3JldHNQYXRoIGV4cGxpY2l0bHksIG9yIGVuc3VyZSBBcHAuZ2V0TmFtZSgpIHJldHVybnMgYSB2YWx1ZS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYC8ke2FwcE5hbWV9L2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gO1xuICB9XG59XG4iXX0=
@@ -46,6 +46,7 @@ interface RdsProps {
46
46
  }
47
47
  export declare class RdsAurora extends Construct implements IConnectable {
48
48
  connections: Connections;
49
+ private readonly constructId;
49
50
  private port;
50
51
  private engineConfig;
51
52
  private databaseCluster;
@@ -9,10 +9,12 @@ const constructs_1 = require("constructs");
9
9
  const iam_1 = require("../iam");
10
10
  const secrets_1 = require("../secrets");
11
11
  const resourceNaming_1 = require("../../../utils/resourceNaming");
12
+ const capitaliseString_1 = require("../../../utils/capitaliseString");
12
13
  const database_1 = require("../../../patterns/aws/database");
13
14
  class RdsAurora extends constructs_1.Construct {
14
15
  constructor(scope, id, props) {
15
16
  super(scope, id);
17
+ this.constructId = id;
16
18
  this.port = props.port ?? 35255;
17
19
  // PostgreSQL fallback for direct usage - ensure engine and engineConfig match
18
20
  this.engineConfig = props.engineConfig ?? {
@@ -31,13 +33,13 @@ class RdsAurora extends constructs_1.Construct {
31
33
  // Global secondary clusters import replicated secret instead of creating new
32
34
  if (props.isGlobalSecondary) {
33
35
  this.databaseCredentials = new secrets_1.Secret(this, `${props.databaseName}Credentials`, {
34
- secretName: resourceNaming_1.ResourceNaming.credentialsSecretName(props.databaseName),
36
+ secretName: resourceNaming_1.ResourceNaming.credentialsSecretName(id),
35
37
  importExisting: true
36
38
  });
37
39
  }
38
40
  else {
39
41
  this.databaseCredentials = new secrets_1.Secret(this, `${props.databaseName}Credentials`, {
40
- secretName: resourceNaming_1.ResourceNaming.credentialsSecretName(props.databaseName),
42
+ secretName: resourceNaming_1.ResourceNaming.credentialsSecretName(id),
41
43
  generateSecretString: {
42
44
  secretStringTemplate: JSON.stringify({ username }),
43
45
  excludePunctuation: true,
@@ -75,7 +77,7 @@ class RdsAurora extends constructs_1.Construct {
75
77
  });
76
78
  const writerConfig = props.writer ?? {};
77
79
  const writerPI = writerConfig.enablePerformanceInsights ?? piEnabled;
78
- const writerSuffix = writerConfig.identifierSuffix ?? "primary-writer";
80
+ const writerSuffix = writerConfig.identifierSuffix;
79
81
  const performanceInsightsRetention = this.getPerformanceInsightRetention(piConfig?.retentionPeriod ?? 7);
80
82
  const databaseName = props.databaseName || id;
81
83
  const writer = aws_rds_1.ClusterInstance.serverlessV2(`${databaseName}Writer`, {
@@ -86,7 +88,7 @@ class RdsAurora extends constructs_1.Construct {
86
88
  performanceInsightRetention: writerPI
87
89
  ? performanceInsightsRetention
88
90
  : undefined,
89
- instanceIdentifier: resourceNaming_1.ResourceNaming.writerInstanceId(databaseName, writerSuffix),
91
+ instanceIdentifier: resourceNaming_1.ResourceNaming.writerInstanceId(id, writerSuffix),
90
92
  caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1,
91
93
  publiclyAccessible: props.publiclyAccessible,
92
94
  ...(writerConfig.availabilityZone && {
@@ -117,8 +119,7 @@ class RdsAurora extends constructs_1.Construct {
117
119
  backup: { retention: aws_cdk_lib_1.Duration.days(props.backupRetention ?? 14) },
118
120
  storageEncrypted: true,
119
121
  ...(storageEncryptionKey && { storageEncryptionKey }),
120
- clusterIdentifier: props.clusterIdentifier?.toLowerCase() ||
121
- resourceNaming_1.ResourceNaming.clusterId(props.databaseName || id),
122
+ clusterIdentifier: props.clusterIdentifier?.toLowerCase() || resourceNaming_1.ResourceNaming.clusterId(id),
122
123
  monitoringInterval: props.monitoringInterval || aws_cdk_lib_1.Duration.minutes(1),
123
124
  preferredMaintenanceWindow: props.preferredMaintenanceWindow || "Sat:12:30-Sat:20:30",
124
125
  port: this.port,
@@ -133,7 +134,7 @@ class RdsAurora extends constructs_1.Construct {
133
134
  ? {}
134
135
  : {
135
136
  credentials: aws_rds_1.Credentials.fromSecret(this.databaseCredentials.secret),
136
- defaultDatabaseName: props.databaseName || `${id.replace("Rds", "")}`
137
+ defaultDatabaseName: (props.databaseName || id.replace("Rds", "")).replace(/[^a-zA-Z0-9]/g, "")
137
138
  };
138
139
  if (props.snapshotIdentifier) {
139
140
  // Create from snapshot - credentials need SnapshotCredentials type
@@ -201,7 +202,7 @@ class RdsAurora extends constructs_1.Construct {
201
202
  enablePerformanceInsights: enablePI,
202
203
  performanceInsightEncryptionKey: enablePI ? piKey : undefined,
203
204
  performanceInsightRetention: enablePI ? piRetention : undefined,
204
- instanceIdentifier: resourceNaming_1.ResourceNaming.readerInstanceId(props.databaseName, index + 1, config.identifierSuffix),
205
+ instanceIdentifier: resourceNaming_1.ResourceNaming.readerInstanceId(this.constructId, index + 1, config.identifierSuffix),
205
206
  caCertificate: aws_rds_1.CaCertificate.RDS_CA_RSA4096_G1,
206
207
  publiclyAccessible: props.publiclyAccessible,
207
208
  ...(config.availabilityZone && {
@@ -216,7 +217,7 @@ class RdsAurora extends constructs_1.Construct {
216
217
  subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
217
218
  };
218
219
  this.databaseProxy = new aws_rds_1.DatabaseProxy(this, `${props.databaseName}DatabaseProxy`, {
219
- dbProxyName: resourceNaming_1.ResourceNaming.proxyName(props.databaseName),
220
+ dbProxyName: resourceNaming_1.ResourceNaming.proxyName(this.constructId),
220
221
  proxyTarget: aws_rds_1.ProxyTarget.fromCluster(this.databaseCluster),
221
222
  secrets: [this.databaseCredentials.secret],
222
223
  securityGroups: [securityGroup],
@@ -229,9 +230,10 @@ class RdsAurora extends constructs_1.Construct {
229
230
  maxConnectionsPercent: proxyConfig.maxConnections,
230
231
  maxIdleConnectionsPercent: proxyConfig.maxIdleConnections
231
232
  });
232
- new aws_cdk_lib_1.CfnOutput(this, `${props.databaseName}ProxyEndpointOutput`, {
233
- key: `${props.databaseName}ProxyEndpoint`,
234
- exportName: `${props.databaseName}ProxyEndpoint`,
233
+ const outputName = (0, capitaliseString_1.toPascalCase)(props.databaseName || this.constructId);
234
+ new aws_cdk_lib_1.CfnOutput(this, `${outputName}ProxyEndpointOutput`, {
235
+ key: `${outputName}ProxyEndpoint`,
236
+ exportName: `${outputName}ProxyEndpoint`,
235
237
  value: this.databaseProxy.endpoint
236
238
  });
237
239
  }
@@ -241,7 +243,7 @@ class RdsAurora extends constructs_1.Construct {
241
243
  rotationConfig?.automaticallyAfter) ||
242
244
  aws_cdk_lib_1.Duration.days(30);
243
245
  const masterSecret = new secrets_1.Secret(this, `${props.databaseName}MasterSecret`, {
244
- secretName: resourceNaming_1.ResourceNaming.masterSecretName(props.databaseName)
246
+ secretName: resourceNaming_1.ResourceNaming.masterSecretName(this.constructId)
245
247
  });
246
248
  new aws_secretsmanager_1.SecretRotation(this, `${props.databaseName}SecretRotation`, {
247
249
  application: new aws_secretsmanager_1.SecretRotationApplication(this.engineConfig.rotationAppName, "1.1.367", { isMultiUser: true }),
@@ -283,12 +285,10 @@ class RdsAurora extends constructs_1.Construct {
283
285
  return aws_rds_1.PerformanceInsightRetention.MONTHS_6;
284
286
  case 372:
285
287
  return aws_rds_1.PerformanceInsightRetention.MONTHS_12;
286
- case 731:
287
- return aws_rds_1.PerformanceInsightRetention.LONG_TERM;
288
288
  default:
289
289
  return aws_rds_1.PerformanceInsightRetention.MONTHS_1;
290
290
  }
291
291
  }
292
292
  }
293
293
  exports.RdsAurora = RdsAurora;
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzQXVyb3JhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFpRTtBQUVqRSxpREFRNkI7QUFDN0IsaURBa0I2QjtBQUM3Qix1RUFHd0M7QUFDeEMsMkNBQXVDO0FBQ3ZDLGdDQUF1QztBQUN2Qyx3Q0FBd0Q7QUFDeEQsa0VBQStEO0FBQy9ELDZEQVd3QztBQTJDeEMsTUFBYSxTQUFVLFNBQVEsc0JBQVM7SUFVdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFlO1FBQ3ZELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUVoQyw4RUFBOEU7UUFDOUUsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJO1lBQ3hDLGVBQWUsRUFBRSxVQUFVO1lBQzNCLGFBQWEsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUU7WUFDdkMsZUFBZSxFQUFFLDhDQUE4QztTQUNoRSxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixLQUFLLEtBQUssQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FDWixTQUFTLElBQUksT0FBTyxLQUFLLENBQUMsbUJBQW1CLEtBQUssUUFBUTtZQUN4RCxDQUFDLENBQUMsS0FBSyxDQUFDLG1CQUFtQjtZQUMzQixDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWhCLDhFQUE4RTtRQUM5RSxNQUFNLFFBQVEsR0FDWixLQUFLLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDLGdCQUFnQjtZQUNoRCxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFF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QUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTyw4QkFBOEIsQ0FDcEMsSUFBYTtRQUViLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLENBQUM7Z0JBQ0osT0FBTyxxQ0FBMkIsQ0FBQyxPQUFPLENBQUM7WUFDN0MsS0FBSyxFQUFFO2dCQUNMLE9BQU8scUNBQTJCLENBQUMsUUFBUSxDQUFDO1lBQzlDLEtBQUssRUFBRTtnQkFDTCxPQUFPLHFDQUEyQixDQUFDLFFBQVEsQ0FBQztZQUM5QyxLQUFLLEdBQUc7Z0JBQ04sT0FBTyxxQ0FBMkIsQ0FBQyxRQUFRLENBQUM7WUFDOUMsS0FBSyxHQUFHO2dCQUNOLE9BQU8scUNBQTJCLENBQUMsU0FBUyxDQUFDO1lBQy9DLEtBQUssR0FBRztnQkFDTixPQUFPLHFDQUEyQixDQUFDLFNBQVMsQ0FBQztZQUMvQztnQkFDRSxPQUFPLHFDQUEyQixDQUFDLFFBQVEsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBeFpELDhCQXdaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgSUtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQge1xuICBDb25uZWN0aW9ucyxcbiAgdHlwZSBJQ29ubmVjdGFibGUsXG4gIHR5cGUgSVNlY3VyaXR5R3JvdXAsXG4gIHR5cGUgSVZwYyxcbiAgUGVlcixcbiAgUG9ydCxcbiAgU3VibmV0VHlwZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHtcbiAgQXVyb3JhUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBDYUNlcnRpZmljYXRlLFxuICBDbHVzdGVySW5zdGFuY2UsXG4gIENyZWRlbnRpYWxzLFxuICBEYXRhYmFzZUNsdXN0ZXIsXG4gIHR5cGUgRGF0YWJhc2VDbHVzdGVyUHJvcHMsXG4gIERhdGFiYXNlQ2x1c3RlckZyb21TbmFwc2hvdCxcbiAgdHlwZSBEYXRhYmFzZUNsdXN0ZXJGcm9tU25hcHNob3RQcm9wcyxcbiAgRGF0YWJhc2VDbHVzdGVyRW5naW5lLFxuICB0eXBlIENmbkRCQ2x1c3RlcixcbiAgRGF0YWJhc2VQcm94eSxcbiAgdHlwZSBJQ2x1c3RlckVuZ2luZSxcbiAgdHlwZSBJQ2x1c3Rlckluc3RhbmNlLFxuICBQYXJhbWV0ZXJHcm91cCxcbiAgUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLFxuICBQcm94eVRhcmdldCxcbiAgU25hcHNob3RDcmVkZW50aWFsc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuaW1wb3J0IHtcbiAgU2VjcmV0Um90YXRpb24sXG4gIFNlY3JldFJvdGF0aW9uQXBwbGljYXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgeyBDdXN0b21lck1hbmFnZWRLZXksIFNlY3JldCB9IGZyb20gXCIuLi9zZWNyZXRzXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU5hbWluZyB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXNvdXJjZU5hbWluZ1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbmdpbmVDb25maWcsXG4gIHR5cGUgUHJveHlDb25maWcsXG4gIHR5cGUgQ3JlZGVudGlhbHNDb25maWcsXG4gIHR5cGUgQXVyb3JhRW5jcnlwdGlvbkNvbmZpZyxcbiAgdHlwZSBBdXJvcmFXcml0ZXJDb25maWcsXG4gIHR5cGUgQXVyb3JhUmVhZGVyc0NvbmZpZyxcbiAgdHlwZSBBdXJvcmFSZWFkZXJDb25maWcsXG4gIHR5cGUgUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyxcbiAgaXNBd3NNYW5hZ2VkS2V5LFxuICBpc0NNS1JlcXVlc3RlZFxufSBmcm9tIFwiLi4vLi4vLi4vcGF0dGVybnMvYXdzL2RhdGFiYXNlXCI7XG5cbmludGVyZmFjZSBSZHNQcm9wcyB7XG4gIHZwYzogSVZwYztcbiAgZGF0YWJhc2VOYW1lPzogc3RyaW5nO1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgZW5naW5lQ29uZmlnPzogRW5naW5lQ29uZmlnO1xuICBjbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIGVuY3J5cHRpb24/OiBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgcGVyZm9ybWFuY2VJbnNpZ2h0cz86IFBlcmZvcm1hbmNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgLyoqIFNraXBzIHNlY3JldCByb3RhdGlvbiBmb3Igc2Vjb25kYXJ5IGNsdXN0ZXJzIGluIGdsb2JhbCBkYXRhYmFzZSAqL1xuICBpc0dsb2JhbFNlY29uZGFyeT86IGJvb2xlYW47XG4gIHNlY3JldFJlcGxpY2FSZWdpb25zPzogc3RyaW5nW107XG4gIGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93IGFjY2VzcyBmcm9tIFZQQyBDSURSIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcyB3aXRoIExhbWJkYSkgKi9cbiAgYWxsb3dWcGNBY2Nlc3M/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFrZSBkYXRhYmFzZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZyb20gdGhlIGludGVybmV0LlxuICAgKiBXQVJOSU5HOiBUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnRcbiAgICogb3Igd2hlbiBidWlsZGluZyBQYXlsb2FkIGFwcHMgbG9jYWxseSB0aGF0IG5lZWQgZGF0YWJhc2UgYWNjZXNzLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBkYXRhYmFzZSBpcyBwbGFjZWQgaW4gcHVibGljIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSVAgYWRkcmVzcyB0byBhbGxvdyBhY2Nlc3MgZnJvbSB3aGVuIHB1YmxpY2x5QWNjZXNzaWJsZSBpcyB0cnVlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhY2Nlc3MgaXMgcmVzdHJpY3RlZCB0byBWUEMgb25seSBldmVuIHdoZW4gcHVibGljLlxuICAgKiBGb3JtYXQ6IENJRFIgbm90YXRpb24gKGUuZy4sIFwiMjAzLjAuMTEzLjAvMzJcIiBmb3Igc2luZ2xlIElQKVxuICAgKi9cbiAgYWxsb3dlZElwQ2lkcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJkc0F1cm9yYSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSBwb3J0OiBudW1iZXI7XG4gIHByaXZhdGUgZW5naW5lQ29uZmlnOiBFbmdpbmVDb25maWc7XG4gIHByaXZhdGUgZGF0YWJhc2VDbHVzdGVyOiBEYXRhYmFzZUNsdXN0ZXI7XG4gIHByaXZhdGUgZGF0YWJhc2VQcm94eT86IERhdGFiYXNlUHJveHk7XG4gIHByaXZhdGUgZGF0YWJhc2VDcmVkZW50aWFsczogU2VjcmV0O1xuICBwcml2YXRlIGNmbkNsdXN0ZXI/OiBDZm5EQkNsdXN0ZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJkc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucG9ydCA9IHByb3BzLnBvcnQgPz8gMzUyNTU7XG5cbiAgICAvLyBQb3N0Z3JlU1FMIGZhbGxiYWNrIGZvciBkaXJlY3QgdXNhZ2UgLSBlbnN1cmUgZW5naW5lIGFuZCBlbmdpbmVDb25maWcgbWF0Y2hcbiAgICB0aGlzLmVuZ2luZUNvbmZpZyA9IHByb3BzLmVuZ2luZUNvbmZpZyA/PyB7XG4gICAgICBkZWZhdWx0VXNlcm5hbWU6IFwicG9zdGdyZXNcIixcbiAgICAgIHNzbFBhcmFtZXRlcnM6IHsgXCJyZHMuZm9yY2Vfc3NsXCI6IFwiMVwiIH0sXG4gICAgICByb3RhdGlvbkFwcE5hbWU6IFwiU2VjcmV0c01hbmFnZXJSRFNQb3N0Z3JlU1FMUm90YXRpb25NdWx0aVVzZXJcIlxuICAgIH07XG5cbiAgICBjb25zdCBwaUVuYWJsZWQgPSBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzICE9PSBmYWxzZTtcbiAgICBjb25zdCBwaUNvbmZpZyA9XG4gICAgICBwaUVuYWJsZWQgJiYgdHlwZW9mIHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gVXNlcm5hbWUgcHJpb3JpdHk6IHNuYXBzaG90VXNlcm5hbWUgPiBjcmVkZW50aWFscy51c2VybmFtZSA+IGVuZ2luZSBkZWZhdWx0XG4gICAgY29uc3QgdXNlcm5hbWUgPVxuICAgICAgcHJvcHMuc25hcHNob3RJZGVudGlmaWVyICYmIHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICAgICAgPyBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgICAgIDogKHByb3BzLmNyZWRlbnRpYWxzPy51c2VybmFtZSA/PyB0aGlzLmVuZ2luZUNvbmZpZy5kZWZhdWx0VXNlcm5hbWUpO1xuXG4gICAgLy8gR2xvYmFsIHNlY29uZGFyeSBjbHVzdGVycyBpbXBvcnQgcmVwbGljYXRlZCBzZWNyZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBuZXdcbiAgICBpZiAocHJvcHMuaXNHbG9iYWxTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscyA9IG5ldyBTZWNyZXQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWNyZXROYW1lOiBSZXNvdXJjZU5hbWluZy5jcmVkZW50aWFsc1NlY3JldE5hbWUocHJvcHMuZGF0YWJhc2VOYW1lISksXG4gICAgICAgICAgaW1wb3J0RXhpc3Rpbmc6IHRydWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzID0gbmV3IFNlY3JldChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfUNyZWRlbnRpYWxzYCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3JldE5hbWU6IFJlc291cmNlTmFtaW5nLmNyZWRlbnRpYWxzU2VjcmV0TmFtZShwcm9wcy5kYXRhYmFzZU5hbWUhKSxcbiAgICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHsgdXNlcm5hbWUgfSksXG4gICAgICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgICAgICBpbmNsdWRlU3BhY2U6IGZhbHNlLFxuICAgICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVwbGljYVJlZ2lvbnM6IHByb3BzLnNlY3JldFJlcGxpY2FSZWdpb25zXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmFnZUVuY3J5cHRpb25LZXkgPSBpc0NNS1JlcXVlc3RlZChwcm9wcy5lbmNyeXB0aW9uPy5zdG9yYWdlS2V5KVxuICAgICAgPyBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfUNsdXN0ZXJFbmNyeXB0aW9uS2V5YCxcbiAgICAgICAgICB7IGFsaWFzTmFtZTogYGNtay9yZHMvJHtwcm9wcy5kYXRhYmFzZU5hbWV9L2VuY3J5cHRpb25LZXlgIH1cbiAgICAgICAgKS5rZXlcbiAgICAgIDogaXNBd3NNYW5hZ2VkS2V5KHByb3BzLmVuY3J5cHRpb24/LnN0b3JhZ2VLZXkpIHx8XG4gICAgICAgICAgcHJvcHMuZW5jcnlwdGlvbj8uc3RvcmFnZUtleSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkIC8vIEFXUyBNYW5hZ2VkIChkZWZhdWx0KVxuICAgICAgICA6IHByb3BzLmVuY3J5cHRpb24/LnN0b3JhZ2VLZXk7IC8vIFVzZSBwcm92aWRlZCBJS2V5XG5cbiAgICBjb25zdCBwZXJmb3JtYW5jZUluc2lnaHRzS2V5ID1cbiAgICAgIHBpRW5hYmxlZCAmJiBpc0NNS1JlcXVlc3RlZChwaUNvbmZpZz8uZW5jcnlwdGlvbktleSlcbiAgICAgICAgPyBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1QZXJmb3JtYW5jZUluc2lnaHRzS2V5YCxcbiAgICAgICAgICAgIHsgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRhdGFiYXNlTmFtZX0vSW5zaWdodHNLZXlgIH1cbiAgICAgICAgICApLmtleVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNsdXN0ZXJTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgYCR7aWR9U2VjdXJpdHlHcm91cGAsIHtcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCBmb3IgQXVyb3JhIGNsdXN0ZXIgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgIH0pO1xuXG4gICAgY2x1c3RlclNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICBjbHVzdGVyU2VjdXJpdHlHcm91cCxcbiAgICAgIFBvcnQudGNwKHRoaXMucG9ydClcbiAgICApO1xuXG4gICAgLy8gQWxsb3cgVlBDLXdpZGUgYWNjZXNzIHdoZW4gZW5hYmxlZCAoYXZvaWRzIGNyb3NzLXN0YWNrIGN5Y2xpYyBkZXBlbmRlbmNpZXMpXG4gICAgaWYgKHByb3BzLmFsbG93VnBjQWNjZXNzKSB7XG4gICAgICBjbHVzdGVyU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgUGVlci5pcHY0KHByb3BzLnZwYy52cGNDaWRyQmxvY2spLFxuICAgICAgICBQb3J0LnRjcCh0aGlzLnBvcnQpLFxuICAgICAgICBcIkFsbG93IGFjY2VzcyBmcm9tIFZQQyBDSURSXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgZXh0ZXJuYWwgYWNjZXNzIHdoZW4gcHVibGljbHkgYWNjZXNzaWJsZSB3aXRoIGFsbG93ZWQgSVBcbiAgICBpZiAocHJvcHMucHVibGljbHlBY2Nlc3NpYmxlICYmIHByb3BzLmFsbG93ZWRJcENpZHIpIHtcbiAgICAgIGNsdXN0ZXJTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBQZWVyLmlwdjQocHJvcHMuYWxsb3dlZElwQ2lkciksXG4gICAgICAgIFBvcnQudGNwKHRoaXMucG9ydCksXG4gICAgICAgIFwiQWxsb3cgZXh0ZXJuYWwgYWNjZXNzIGZyb20gYWxsb3dlZCBJUFwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoe1xuICAgICAgc2VjdXJpdHlHcm91cHM6IFtjbHVzdGVyU2VjdXJpdHlHcm91cF0sXG4gICAgICBkZWZhdWx0UG9ydDogUG9ydC50Y3AodGhpcy5wb3J0KVxuICAgIH0pO1xuXG4gICAgY29uc3Qgd3JpdGVyQ29uZmlnID0gcHJvcHMud3JpdGVyID8/IHt9O1xuICAgIGNvbnN0IHdyaXRlclBJID0gd3JpdGVyQ29uZmlnLmVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHMgPz8gcGlFbmFibGVkO1xuICAgIGNvbnN0IHdyaXRlclN1ZmZpeCA9IHdyaXRlckNvbmZpZy5pZGVudGlmaWVyU3VmZml4ID8/IFwicHJpbWFyeS13cml0ZXJcIjtcbiAgICBjb25zdCBwZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uID0gdGhpcy5nZXRQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24oXG4gICAgICBwaUNvbmZpZz8ucmV0ZW50aW9uUGVyaW9kID8/IDdcbiAgICApO1xuICAgIGNvbnN0IGRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZSB8fCBpZDtcblxuICAgIGNvbnN0IHdyaXRlciA9IENsdXN0ZXJJbnN0YW5jZS5zZXJ2ZXJsZXNzVjIoYCR7ZGF0YWJhc2VOYW1lfVdyaXRlcmAsIHtcbiAgICAgIGVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM6IHdyaXRlclBJLFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0RW5jcnlwdGlvbktleTogd3JpdGVyUElcbiAgICAgICAgPyBwZXJmb3JtYW5jZUluc2lnaHRzS2V5XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uOiB3cml0ZXJQSVxuICAgICAgICA/IHBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb25cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IFJlc291cmNlTmFtaW5nLndyaXRlckluc3RhbmNlSWQoXG4gICAgICAgIGRhdGFiYXNlTmFtZSxcbiAgICAgICAgd3JpdGVyU3VmZml4XG4gICAgICApLFxuICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgLi4uKHdyaXRlckNvbmZpZy5hdmFpbGFiaWxpdHlab25lICYmIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogd3JpdGVyQ29uZmlnLmF2YWlsYWJpbGl0eVpvbmVcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWFkZXJzID0gdGhpcy5idWlsZFJlYWRlcnMoXG4gICAgICBwcm9wcyxcbiAgICAgIHBpRW5hYmxlZCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHNLZXksXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgfHxcbiAgICAgIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFQb3N0Z3Jlcyh7XG4gICAgICAgIHZlcnNpb246IEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbi5vZihcIjE2LjZcIiwgXCIxNlwiKVxuICAgICAgfSk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJHcm91cCA9IG5ldyBQYXJhbWV0ZXJHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UGFyYW1ldGVyR3JvdXBgLFxuICAgICAge1xuICAgICAgICBlbmdpbmUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUGFyYW1ldGVyIGdyb3VwIGZvciAke3Byb3BzLmRhdGFiYXNlTmFtZX0gd2l0aCBzZWN1cml0eSBkZWZhdWx0c2AsXG4gICAgICAgIHBhcmFtZXRlcnM6IHRoaXMuZW5naW5lQ29uZmlnLnNzbFBhcmFtZXRlcnNcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVXNlIHB1YmxpYyBzdWJuZXRzIHdoZW4gcHVibGljbHkgYWNjZXNzaWJsZSwgb3RoZXJ3aXNlIHByaXZhdGVcbiAgICBjb25zdCB2cGNTdWJuZXRzID0gcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlXG4gICAgICA/IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUMgfVxuICAgICAgOiB7IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9O1xuXG4gICAgLy8gQ29tbW9uIHByb3BzIHNoYXJlZCBhY3Jvc3MgYWxsIGNsdXN0ZXIgY3JlYXRpb24gcGF0aHNcbiAgICBjb25zdCBiYXNlQ2x1c3RlclByb3BzID0ge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB2cGNTdWJuZXRzLFxuICAgICAgc2VjdXJpdHlHcm91cHM6IFtjbHVzdGVyU2VjdXJpdHlHcm91cF0gYXMgSVNlY3VyaXR5R3JvdXBbXSxcbiAgICAgIGVuZ2luZSxcbiAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgYmFja3VwOiB7IHJldGVudGlvbjogRHVyYXRpb24uZGF5cyhwcm9wcy5iYWNrdXBSZXRlbnRpb24gPz8gMTQpIH0sXG4gICAgICBzdG9yYWdlRW5jcnlwdGVkOiB0cnVlLFxuICAgICAgLi4uKHN0b3JhZ2VFbmNyeXB0aW9uS2V5ICYmIHsgc3RvcmFnZUVuY3J5cHRpb25LZXkgfSksXG4gICAgICBjbHVzdGVySWRlbnRpZmllcjpcbiAgICAgICAgcHJvcHMuY2x1c3RlcklkZW50aWZpZXI/LnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgUmVzb3VyY2VOYW1pbmcuY2x1c3RlcklkKHByb3BzLmRhdGFiYXNlTmFtZSB8fCBpZCksXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCB8fCBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6XG4gICAgICAgIHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93IHx8IFwiU2F0OjEyOjMwLVNhdDoyMDozMFwiLFxuICAgICAgcG9ydDogdGhpcy5wb3J0LFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5TTkFQU0hPVCxcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uID8/IHRydWUsXG4gICAgICBpYW1BdXRoZW50aWNhdGlvbjogdHJ1ZSxcbiAgICAgIHdyaXRlcixcbiAgICAgIHJlYWRlcnNcbiAgICB9O1xuXG4gICAgLy8gQ3JlZGVudGlhbHMgYW5kIGRhdGFiYXNlIG5hbWUgZm9yIG5vbi1nbG9iYWwtc2Vjb25kYXJ5IGNsdXN0ZXJzXG4gICAgY29uc3QgcHJpbWFyeUNsdXN0ZXJQcm9wcyA9IHByb3BzLmlzR2xvYmFsU2Vjb25kYXJ5XG4gICAgICA/IHt9XG4gICAgICA6IHtcbiAgICAgICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMuZnJvbVNlY3JldCh0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0KSxcbiAgICAgICAgICBkZWZhdWx0RGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUgfHwgYCR7aWQucmVwbGFjZShcIlJkc1wiLCBcIlwiKX1gXG4gICAgICAgIH07XG5cbiAgICBpZiAocHJvcHMuc25hcHNob3RJZGVudGlmaWVyKSB7XG4gICAgICAvLyBDcmVhdGUgZnJvbSBzbmFwc2hvdCAtIGNyZWRlbnRpYWxzIG5lZWQgU25hcHNob3RDcmVkZW50aWFscyB0eXBlXG4gICAgICBjb25zdCBzbmFwc2hvdENyZWRlbnRpYWxzID0gcHJvcHMuaXNHbG9iYWxTZWNvbmRhcnlcbiAgICAgICAgPyB7fVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBTbmFwc2hvdENyZWRlbnRpYWxzLmZyb21TZWNyZXQoXG4gICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXRcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9O1xuXG4gICAgICB0aGlzLmRhdGFiYXNlQ2x1c3RlciA9IG5ldyBEYXRhYmFzZUNsdXN0ZXJGcm9tU25hcHNob3QoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke2lkfURhdGFiYXNlYCxcbiAgICAgICAgLy8gVHlwZSBhc3NlcnRpb246IENESydzIFNuYXBzaG90Q3JlZGVudGlhbHMudXNlcm5hbWUgaXMgc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgIC8vIGJ1dCBEYXRhYmFzZUNsdXN0ZXJGcm9tU25hcHNob3RQcm9wcyBleHBlY3RzIHN0cmluZy4gV29ya3MgYXQgcnVudGltZS5cbiAgICAgICAge1xuICAgICAgICAgIC4uLmJhc2VDbHVzdGVyUHJvcHMsXG4gICAgICAgICAgLi4uc25hcHNob3RDcmVkZW50aWFscyxcbiAgICAgICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllclxuICAgICAgICB9IGFzIERhdGFiYXNlQ2x1c3RlckZyb21TbmFwc2hvdFByb3BzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IGNsdXN0ZXJcbiAgICAgIHRoaXMuZGF0YWJhc2VDbHVzdGVyID0gbmV3IERhdGFiYXNlQ2x1c3RlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7aWR9RGF0YWJhc2VgLFxuICAgICAgICAvLyBUeXBlIGFzc2VydGlvbjogc3ByZWFkIHR5cGVzIGRvbid0IHByZXNlcnZlIHJlcXVpcmVkIHByb3BlcnR5IG5hcnJvd2luZ1xuICAgICAgICB7IC4uLmJhc2VDbHVzdGVyUHJvcHMsIC4uLnByaW1hcnlDbHVzdGVyUHJvcHMgfSBhcyBEYXRhYmFzZUNsdXN0ZXJQcm9wc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNmbkNsdXN0ZXIgPSB0aGlzLmRhdGFiYXNlQ2x1c3Rlci5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5EQkNsdXN0ZXI7XG5cbiAgICAvLyBHbG9iYWwgc2Vjb25kYXJ5IGNsdXN0ZXJzIGNhbid0IHNwZWNpZnkgdGhlc2UgcHJvcGVydGllc1xuICAgIGlmIChwcm9wcy5pc0dsb2JhbFNlY29uZGFyeSAmJiB0aGlzLmNmbkNsdXN0ZXIpIHtcbiAgICAgIHRoaXMuY2ZuQ2x1c3Rlci5tYXN0ZXJVc2VybmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2ZuQ2x1c3Rlci5tYXN0ZXJVc2VyUGFzc3dvcmQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNmbkNsdXN0ZXIuZGF0YWJhc2VOYW1lID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3h5RW5hYmxlZCA9IHByb3BzLnByb3h5ICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucHJveHkgIT09IGZhbHNlO1xuICAgIGlmIChwcm94eUVuYWJsZWQpIHtcbiAgICAgIHRoaXMuYWRkUHJveHkocHJvcHMsIGNsdXN0ZXJTZWN1cml0eUdyb3VwKTtcbiAgICB9XG5cbiAgICAvLyBTZWNyZXQgcm90YXRpb24gZW5hYmxlZCBieSBkZWZhdWx0IChvcHQtb3V0IHdpdGggc2VjcmV0Um90YXRpb246IGZhbHNlKVxuICAgIGlmICghcHJvcHMuaXNHbG9iYWxTZWNvbmRhcnkpIHtcbiAgICAgIGNvbnN0IHNlY3JldFJvdGF0aW9uRGlzYWJsZWQgPVxuICAgICAgICBwcm9wcy5jcmVkZW50aWFscz8uc2VjcmV0Um90YXRpb24gPT09IGZhbHNlO1xuICAgICAgaWYgKCFzZWNyZXRSb3RhdGlvbkRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuYWRkU2VjcmV0Um90YXRpb24ocHJvcHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSZWFkZXJzKFxuICAgIHByb3BzOiBSZHNQcm9wcyxcbiAgICBkZWZhdWx0UElFbmFibGVkOiBib29sZWFuLFxuICAgIHBpS2V5PzogSUtleSxcbiAgICBwaVJldGVudGlvbj86IFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvblxuICApOiBJQ2x1c3Rlckluc3RhbmNlW10ge1xuICAgIGlmIChwcm9wcy5yZWFkZXJzID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGxldCByZWFkZXJDb25maWdzOiBBdXJvcmFSZWFkZXJDb25maWdbXTtcbiAgICBpZiAocHJvcHMucmVhZGVycz8uaW5zdGFuY2VzKSB7XG4gICAgICByZWFkZXJDb25maWdzID0gcHJvcHMucmVhZGVycy5pbnN0YW5jZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gcHJvcHMucmVhZGVycz8uY291bnQgPz8gMTtcbiAgICAgIHJlYWRlckNvbmZpZ3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBjb3VudCB9LCAoXywgaSkgPT4gKHtcbiAgICAgICAgc2NhbGVXaXRoV3JpdGVyOiBpID09PSAwXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdFBJID1cbiAgICAgIHByb3BzLnJlYWRlcnMgJiYgXCJkZWZhdWx0RW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0c1wiIGluIHByb3BzLnJlYWRlcnNcbiAgICAgICAgPyAocHJvcHMucmVhZGVycy5kZWZhdWx0RW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cyA/PyBkZWZhdWx0UElFbmFibGVkKVxuICAgICAgICA6IGRlZmF1bHRQSUVuYWJsZWQ7XG5cbiAgICByZXR1cm4gcmVhZGVyQ29uZmlncy5tYXAoKGNvbmZpZywgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGVuYWJsZVBJID0gY29uZmlnLmVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHMgPz8gZGVmYXVsdFBJO1xuICAgICAgY29uc3QgX2lkZW50aWZpZXIgPSBjb25maWcuaWRlbnRpZmllclN1ZmZpeCA/PyBgcmVhZGVyLSR7aW5kZXggKyAxfWA7XG5cbiAgICAgIHJldHVybiBDbHVzdGVySW5zdGFuY2Uuc2VydmVybGVzc1YyKFxuICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmVhZGVyJHtpbmRleCArIDF9YCxcbiAgICAgICAge1xuICAgICAgICAgIHNjYWxlV2l0aFdyaXRlcjogY29uZmlnLnNjYWxlV2l0aFdyaXRlciA/PyBpbmRleCA9PT0gMCxcbiAgICAgICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiBlbmFibGVQSSxcbiAgICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRFbmNyeXB0aW9uS2V5OiBlbmFibGVQSSA/IHBpS2V5IDogdW5kZWZpbmVkLFxuICAgICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbjogZW5hYmxlUEkgPyBwaVJldGVudGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IFJlc291cmNlTmFtaW5nLnJlYWRlckluc3RhbmNlSWQoXG4gICAgICAgICAgICBwcm9wcy5kYXRhYmFzZU5hbWUhLFxuICAgICAgICAgICAgaW5kZXggKyAxLFxuICAgICAgICAgICAgY29uZmlnLmlkZW50aWZpZXJTdWZmaXhcbiAgICAgICAgICApLFxuICAgICAgICAgIGNhQ2VydGlmaWNhdGU6IENhQ2VydGlmaWNhdGUuUkRTX0NBX1JTQTQwOTZfRzEsXG4gICAgICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUsXG4gICAgICAgICAgLi4uKGNvbmZpZy5hdmFpbGFiaWxpdHlab25lICYmIHtcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IGNvbmZpZy5hdmFpbGFiaWxpdHlab25lXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUHJveHkocHJvcHM6IFJkc1Byb3BzLCBzZWN1cml0eUdyb3VwOiBTZWN1cml0eUdyb3VwKTogdm9pZCB7XG4gICAgY29uc3QgcHJveHlDb25maWcgPSBwcm9wcy5wcm94eSBhcyBQcm94eUNvbmZpZztcbiAgICBjb25zdCB2cGNTdWJuZXRzID0gcHJveHlDb25maWcudnBjU3VibmV0cyA/PyB7XG4gICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICB9O1xuXG4gICAgdGhpcy5kYXRhYmFzZVByb3h5ID0gbmV3IERhdGFiYXNlUHJveHkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfURhdGFiYXNlUHJveHlgLFxuICAgICAge1xuICAgICAgICBkYlByb3h5TmFtZTogUmVzb3VyY2VOYW1pbmcucHJveHlOYW1lKHByb3BzLmRhdGFiYXNlTmFtZSEpLFxuICAgICAgICBwcm94eVRhcmdldDogUHJveHlUYXJnZXQuZnJvbUNsdXN0ZXIodGhpcy5kYXRhYmFzZUNsdXN0ZXIpLFxuICAgICAgICBzZWNyZXRzOiBbdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldF0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbc2VjdXJpdHlHcm91cF0sXG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICB2cGNTdWJuZXRzLFxuICAgICAgICByZXF1aXJlVExTOiBwcm94eUNvbmZpZy5yZXF1aXJlVExTID8/IHRydWUsXG4gICAgICAgIGJvcnJvd1RpbWVvdXQ6IHByb3h5Q29uZmlnLmNvbm5lY3Rpb25Cb3Jyb3dUaW1lb3V0XG4gICAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKHByb3h5Q29uZmlnLmNvbm5lY3Rpb25Cb3Jyb3dUaW1lb3V0KVxuICAgICAgICAgIDogRHVyYXRpb24uc2Vjb25kcygxMjApLFxuICAgICAgICBtYXhDb25uZWN0aW9uc1BlcmNlbnQ6IHByb3h5Q29uZmlnLm1heENvbm5lY3Rpb25zLFxuICAgICAgICBtYXhJZGxlQ29ubmVjdGlvbnNQZXJjZW50OiBwcm94eUNvbmZpZy5tYXhJZGxlQ29ubmVjdGlvbnNcbiAgICAgIH1cbiAgICApO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UHJveHlFbmRwb2ludE91dHB1dGAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVByb3h5RW5kcG9pbnRgLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVByb3h5RW5kcG9pbnRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGF0YWJhc2VQcm94eS5lbmRwb2ludFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRTZWNyZXRSb3RhdGlvbihwcm9wczogUmRzUHJvcHMpOiB2b2lkIHtcbiAgICBjb25zdCByb3RhdGlvbkNvbmZpZyA9IHByb3BzLmNyZWRlbnRpYWxzPy5zZWNyZXRSb3RhdGlvbjtcbiAgICBjb25zdCByb3RhdGlvblBlcmlvZCA9XG4gICAgICAodHlwZW9mIHJvdGF0aW9uQ29uZmlnID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHJvdGF0aW9uQ29uZmlnPy5hdXRvbWF0aWNhbGx5QWZ0ZXIpIHx8XG4gICAgICBEdXJhdGlvbi5kYXlzKDMwKTtcblxuICAgIGNvbnN0IG1hc3RlclNlY3JldCA9IG5ldyBTZWNyZXQodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfU1hc3RlclNlY3JldGAsIHtcbiAgICAgIHNlY3JldE5hbWU6IFJlc291cmNlTmFtaW5nLm1hc3RlclNlY3JldE5hbWUocHJvcHMuZGF0YWJhc2VOYW1lISlcbiAgICB9KTtcblxuICAgIG5ldyBTZWNyZXRSb3RhdGlvbih0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9U2VjcmV0Um90YXRpb25gLCB7XG4gICAgICBhcHBsaWNhdGlvbjogbmV3IFNlY3JldFJvdGF0aW9uQXBwbGljYXRpb24oXG4gICAgICAgIHRoaXMuZW5naW5lQ29uZmlnLnJvdGF0aW9uQXBwTmFtZSxcbiAgICAgICAgXCIxLjEuMzY3XCIsXG4gICAgICAgIHsgaXNNdWx0aVVzZXI6IHRydWUgfVxuICAgICAgKSxcbiAgICAgIHNlY3JldDogdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldCxcbiAgICAgIG1hc3RlclNlY3JldDogbWFzdGVyU2VjcmV0LnNlY3JldCxcbiAgICAgIHRhcmdldDogdGhpcy5kYXRhYmFzZUNsdXN0ZXIsXG4gICAgICB2cGM6IHRoaXMuZGF0YWJhc2VDbHVzdGVyLnZwYyxcbiAgICAgIGF1dG9tYXRpY2FsbHlBZnRlcjogcm90YXRpb25QZXJpb2RcbiAgICB9KTtcbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIC8vIFJldHVybiBwcm94eSBlbmRwb2ludCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBjbHVzdGVyIGVuZHBvaW50XG4gICAgaWYgKHRoaXMuZGF0YWJhc2VQcm94eSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VQcm94eS5lbmRwb2ludDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2VDbHVzdGVyLmNsdXN0ZXJFbmRwb2ludC5ob3N0bmFtZTtcbiAgfVxuXG4gIGdldEhvc3RQb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnBvcnQpO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHMoKTogU2VjcmV0IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzO1xuICB9XG5cbiAgZ2V0Q2ZuQ2x1c3RlcigpOiBDZm5EQkNsdXN0ZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNmbkNsdXN0ZXI7XG4gIH1cblxuICBnZXREYXRhYmFzZUNsdXN0ZXIoKTogRGF0YWJhc2VDbHVzdGVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZUNsdXN0ZXI7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbihcbiAgICBkYXlzPzogbnVtYmVyXG4gICk6IFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbiB7XG4gICAgc3dpdGNoIChkYXlzKSB7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uREVGQVVMVDtcbiAgICAgIGNhc2UgMzE6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzE7XG4gICAgICBjYXNlIDkzOlxuICAgICAgICByZXR1cm4gUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLk1PTlRIU18zO1xuICAgICAgY2FzZSAxODY6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzY7XG4gICAgICBjYXNlIDM3MjpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5NT05USFNfMTI7XG4gICAgICBjYXNlIDczMTpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5MT05HX1RFUk07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLk1PTlRIU18xO1xuICAgIH1cbiAgfVxufVxuIl19
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzQXVyb3JhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvZGF0YWJhc2UvcmRzQXVyb3JhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFpRTtBQUVqRSxpREFRNkI7QUFDN0IsaURBa0I2QjtBQUM3Qix1RUFHd0M7QUFDeEMsMkNBQXVDO0FBQ3ZDLGdDQUF1QztBQUN2Qyx3Q0FBd0Q7QUFDeEQsa0VBQStEO0FBQy9ELHNFQUErRDtBQUMvRCw2REFXd0M7QUEyQ3hDLE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBV3RDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7UUFFaEMsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSTtZQUN4QyxlQUFlLEVBQUUsVUFBVTtZQUMzQixhQUFhLEVBQUUsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLGVBQWUsRUFBRSw4Q0FBOEM7U0FDaEUsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQ1osU0FBUyxJQUFJLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixLQUFLLFFBQVE7WUFDeEQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7WUFDM0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVoQiw4RUFBOEU7UUFDOUUsTUFBTSxRQUFRLEdBQ1osS0FBSyxDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0I7WUFDaEQsQ0FBQyxDQUFDLEtBQUssQ0FB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VztRQUNULE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTyw4QkFBOEIsQ0FDcEMsSUFBYTtRQUViLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLENBQUM7Z0JBQ0osT0FBTyxxQ0FBMkIsQ0FBQyxPQUFPLENBQUM7WUFDN0MsS0FBSyxFQUFFO2dCQUNMLE9BQU8scUNBQTJCLENBQUMsUUFBUSxDQUFDO1lBQzlDLEtBQUssRUFBRTtnQkFDTCxPQUFPLHFDQUEyQixDQUFDLFFBQVEsQ0FBQztZQUM5QyxLQUFLLEdBQUc7Z0JBQ04sT0FBTyxxQ0FBMkIsQ0FBQyxRQUFRLENBQUM7WUFDOUMsS0FBSyxHQUFHO2dCQUNOLE9BQU8scUNBQTJCLENBQUMsU0FBUyxDQUFDO1lBQy9DO2dCQUNFLE9BQU8scUNBQTJCLENBQUMsUUFBUSxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF2WkQsOEJBdVpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0LCBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgdHlwZSBJS2V5IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1rbXNcIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgdHlwZSBJU2VjdXJpdHlHcm91cCxcbiAgdHlwZSBJVnBjLFxuICBQZWVyLFxuICBQb3J0LFxuICBTdWJuZXRUeXBlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIENhQ2VydGlmaWNhdGUsXG4gIENsdXN0ZXJJbnN0YW5jZSxcbiAgQ3JlZGVudGlhbHMsXG4gIERhdGFiYXNlQ2x1c3RlcixcbiAgdHlwZSBEYXRhYmFzZUNsdXN0ZXJQcm9wcyxcbiAgRGF0YWJhc2VDbHVzdGVyRnJvbVNuYXBzaG90LFxuICB0eXBlIERhdGFiYXNlQ2x1c3RlckZyb21TbmFwc2hvdFByb3BzLFxuICBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUsXG4gIHR5cGUgQ2ZuREJDbHVzdGVyLFxuICBEYXRhYmFzZVByb3h5LFxuICB0eXBlIElDbHVzdGVyRW5naW5lLFxuICB0eXBlIElDbHVzdGVySW5zdGFuY2UsXG4gIFBhcmFtZXRlckdyb3VwLFxuICBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24sXG4gIFByb3h5VGFyZ2V0LFxuICBTbmFwc2hvdENyZWRlbnRpYWxzXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtcmRzXCI7XG5pbXBvcnQge1xuICBTZWNyZXRSb3RhdGlvbixcbiAgU2VjcmV0Um90YXRpb25BcHBsaWNhdGlvblxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEtleSwgU2VjcmV0IH0gZnJvbSBcIi4uL3NlY3JldHNcIjtcbmltcG9ydCB7IFJlc291cmNlTmFtaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3Jlc291cmNlTmFtaW5nXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZ1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbmdpbmVDb25maWcsXG4gIHR5cGUgUHJveHlDb25maWcsXG4gIHR5cGUgQ3JlZGVudGlhbHNDb25maWcsXG4gIHR5cGUgQXVyb3JhRW5jcnlwdGlvbkNvbmZpZyxcbiAgdHlwZSBBdXJvcmFXcml0ZXJDb25maWcsXG4gIHR5cGUgQXVyb3JhUmVhZGVyc0NvbmZpZyxcbiAgdHlwZSBBdXJvcmFSZWFkZXJDb25maWcsXG4gIHR5cGUgUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyxcbiAgaXNBd3NNYW5hZ2VkS2V5LFxuICBpc0NNS1JlcXVlc3RlZFxufSBmcm9tIFwiLi4vLi4vLi4vcGF0dGVybnMvYXdzL2RhdGFiYXNlXCI7XG5cbmludGVyZmFjZSBSZHNQcm9wcyB7XG4gIHZwYzogSVZwYztcbiAgZGF0YWJhc2VOYW1lPzogc3RyaW5nO1xuICBlbmdpbmU/OiBJQ2x1c3RlckVuZ2luZTtcbiAgZW5naW5lQ29uZmlnPzogRW5naW5lQ29uZmlnO1xuICBjbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgd3JpdGVyPzogQXVyb3JhV3JpdGVyQ29uZmlnO1xuICByZWFkZXJzPzogQXVyb3JhUmVhZGVyc0NvbmZpZyB8IGZhbHNlO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHNDb25maWc7XG4gIGVuY3J5cHRpb24/OiBBdXJvcmFFbmNyeXB0aW9uQ29uZmlnO1xuICBiYWNrdXBSZXRlbnRpb24/OiBudW1iZXI7XG4gIG1vbml0b3JpbmdJbnRlcnZhbD86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdz86IHN0cmluZztcbiAgcG9ydD86IG51bWJlcjtcbiAgcGVyZm9ybWFuY2VJbnNpZ2h0cz86IFBlcmZvcm1hbmNlSW5zaWdodHNDb25maWcgfCBmYWxzZTtcbiAgLyoqIFNraXBzIHNlY3JldCByb3RhdGlvbiBmb3Igc2Vjb25kYXJ5IGNsdXN0ZXJzIGluIGdsb2JhbCBkYXRhYmFzZSAqL1xuICBpc0dsb2JhbFNlY29uZGFyeT86IGJvb2xlYW47XG4gIHNlY3JldFJlcGxpY2FSZWdpb25zPzogc3RyaW5nW107XG4gIGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBjbHVzdGVyIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93IGFjY2VzcyBmcm9tIFZQQyBDSURSIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcyB3aXRoIExhbWJkYSkgKi9cbiAgYWxsb3dWcGNBY2Nlc3M/OiBib29sZWFuO1xuICAvKipcbiAgICogTWFrZSBkYXRhYmFzZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGZyb20gdGhlIGludGVybmV0LlxuICAgKiBXQVJOSU5HOiBUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnRcbiAgICogb3Igd2hlbiBidWlsZGluZyBQYXlsb2FkIGFwcHMgbG9jYWxseSB0aGF0IG5lZWQgZGF0YWJhc2UgYWNjZXNzLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBkYXRhYmFzZSBpcyBwbGFjZWQgaW4gcHVibGljIHN1Ym5ldHMuXG4gICAqL1xuICBwdWJsaWNseUFjY2Vzc2libGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSVAgYWRkcmVzcyB0byBhbGxvdyBhY2Nlc3MgZnJvbSB3aGVuIHB1YmxpY2x5QWNjZXNzaWJsZSBpcyB0cnVlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBhY2Nlc3MgaXMgcmVzdHJpY3RlZCB0byBWUEMgb25seSBldmVuIHdoZW4gcHVibGljLlxuICAgKiBGb3JtYXQ6IENJRFIgbm90YXRpb24gKGUuZy4sIFwiMjAzLjAuMTEzLjAvMzJcIiBmb3Igc2luZ2xlIElQKVxuICAgKi9cbiAgYWxsb3dlZElwQ2lkcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJkc0F1cm9yYSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25zdHJ1Y3RJZDogc3RyaW5nO1xuICBwcml2YXRlIHBvcnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBlbmdpbmVDb25maWc6IEVuZ2luZUNvbmZpZztcbiAgcHJpdmF0ZSBkYXRhYmFzZUNsdXN0ZXI6IERhdGFiYXNlQ2x1c3RlcjtcbiAgcHJpdmF0ZSBkYXRhYmFzZVByb3h5PzogRGF0YWJhc2VQcm94eTtcbiAgcHJpdmF0ZSBkYXRhYmFzZUNyZWRlbnRpYWxzOiBTZWNyZXQ7XG4gIHByaXZhdGUgY2ZuQ2x1c3Rlcj86IENmbkRCQ2x1c3RlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3RJZCA9IGlkO1xuICAgIHRoaXMucG9ydCA9IHByb3BzLnBvcnQgPz8gMzUyNTU7XG5cbiAgICAvLyBQb3N0Z3JlU1FMIGZhbGxiYWNrIGZvciBkaXJlY3QgdXNhZ2UgLSBlbnN1cmUgZW5naW5lIGFuZCBlbmdpbmVDb25maWcgbWF0Y2hcbiAgICB0aGlzLmVuZ2luZUNvbmZpZyA9IHByb3BzLmVuZ2luZUNvbmZpZyA/PyB7XG4gICAgICBkZWZhdWx0VXNlcm5hbWU6IFwicG9zdGdyZXNcIixcbiAgICAgIHNzbFBhcmFtZXRlcnM6IHsgXCJyZHMuZm9yY2Vfc3NsXCI6IFwiMVwiIH0sXG4gICAgICByb3RhdGlvbkFwcE5hbWU6IFwiU2VjcmV0c01hbmFnZXJSRFNQb3N0Z3JlU1FMUm90YXRpb25NdWx0aVVzZXJcIlxuICAgIH07XG5cbiAgICBjb25zdCBwaUVuYWJsZWQgPSBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzICE9PSBmYWxzZTtcbiAgICBjb25zdCBwaUNvbmZpZyA9XG4gICAgICBwaUVuYWJsZWQgJiYgdHlwZW9mIHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gVXNlcm5hbWUgcHJpb3JpdHk6IHNuYXBzaG90VXNlcm5hbWUgPiBjcmVkZW50aWFscy51c2VybmFtZSA+IGVuZ2luZSBkZWZhdWx0XG4gICAgY29uc3QgdXNlcm5hbWUgPVxuICAgICAgcHJvcHMuc25hcHNob3RJZGVudGlmaWVyICYmIHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICAgICAgPyBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgICAgIDogKHByb3BzLmNyZWRlbnRpYWxzPy51c2VybmFtZSA/PyB0aGlzLmVuZ2luZUNvbmZpZy5kZWZhdWx0VXNlcm5hbWUpO1xuXG4gICAgLy8gR2xvYmFsIHNlY29uZGFyeSBjbHVzdGVycyBpbXBvcnQgcmVwbGljYXRlZCBzZWNyZXQgaW5zdGVhZCBvZiBjcmVhdGluZyBuZXdcbiAgICBpZiAocHJvcHMuaXNHbG9iYWxTZWNvbmRhcnkpIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscyA9IG5ldyBTZWNyZXQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWNyZXROYW1lOiBSZXNvdXJjZU5hbWluZy5jcmVkZW50aWFsc1NlY3JldE5hbWUoaWQpLFxuICAgICAgICAgIGltcG9ydEV4aXN0aW5nOiB0cnVlXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscyA9IG5ldyBTZWNyZXQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DcmVkZW50aWFsc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWNyZXROYW1lOiBSZXNvdXJjZU5hbWluZy5jcmVkZW50aWFsc1NlY3JldE5hbWUoaWQpLFxuICAgICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoeyB1c2VybmFtZSB9KSxcbiAgICAgICAgICAgIGV4Y2x1ZGVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGluY2x1ZGVTcGFjZTogZmFsc2UsXG4gICAgICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogXCJwYXNzd29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXBsaWNhUmVnaW9uczogcHJvcHMuc2VjcmV0UmVwbGljYVJlZ2lvbnNcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yYWdlRW5jcnlwdGlvbktleSA9IGlzQ01LUmVxdWVzdGVkKHByb3BzLmVuY3J5cHRpb24/LnN0b3JhZ2VLZXkpXG4gICAgICA/IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9Q2x1c3RlckVuY3J5cHRpb25LZXlgLFxuICAgICAgICAgIHsgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRhdGFiYXNlTmFtZX0vZW5jcnlwdGlvbktleWAgfVxuICAgICAgICApLmtleVxuICAgICAgOiBpc0F3c01hbmFnZWRLZXkocHJvcHMuZW5jcnlwdGlvbj8uc3RvcmFnZUtleSkgfHxcbiAgICAgICAgICBwcm9wcy5lbmNyeXB0aW9uPy5zdG9yYWdlS2V5ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWQgLy8gQVdTIE1hbmFnZWQgKGRlZmF1bHQpXG4gICAgICAgIDogcHJvcHMuZW5jcnlwdGlvbj8uc3RvcmFnZUtleTsgLy8gVXNlIHByb3ZpZGVkIElLZXlcblxuICAgIGNvbnN0IHBlcmZvcm1hbmNlSW5zaWdodHNLZXkgPVxuICAgICAgcGlFbmFibGVkICYmIGlzQ01LUmVxdWVzdGVkKHBpQ29uZmlnPy5lbmNyeXB0aW9uS2V5KVxuICAgICAgICA/IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVBlcmZvcm1hbmNlSW5zaWdodHNLZXlgLFxuICAgICAgICAgICAgeyBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGF0YWJhc2VOYW1lfS9JbnNpZ2h0c0tleWAgfVxuICAgICAgICAgICkua2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY2x1c3RlclNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBgJHtpZH1TZWN1cml0eUdyb3VwYCwge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciBBdXJvcmEgY2x1c3RlciAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgfSk7XG5cbiAgICBjbHVzdGVyU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgIGNsdXN0ZXJTZWN1cml0eUdyb3VwLFxuICAgICAgUG9ydC50Y3AodGhpcy5wb3J0KVxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBWUEMtd2lkZSBhY2Nlc3Mgd2hlbiBlbmFibGVkIChhdm9pZHMgY3Jvc3Mtc3RhY2sgY3ljbGljIGRlcGVuZGVuY2llcylcbiAgICBpZiAocHJvcHMuYWxsb3dWcGNBY2Nlc3MpIHtcbiAgICAgIGNsdXN0ZXJTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBQZWVyLmlwdjQocHJvcHMudnBjLnZwY0NpZHJCbG9jayksXG4gICAgICAgIFBvcnQudGNwKHRoaXMucG9ydCksXG4gICAgICAgIFwiQWxsb3cgYWNjZXNzIGZyb20gVlBDIENJRFJcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBleHRlcm5hbCBhY2Nlc3Mgd2hlbiBwdWJsaWNseSBhY2Nlc3NpYmxlIHdpdGggYWxsb3dlZCBJUFxuICAgIGlmIChwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUgJiYgcHJvcHMuYWxsb3dlZElwQ2lkcikge1xuICAgICAgY2x1c3RlclNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgIFBlZXIuaXB2NChwcm9wcy5hbGxvd2VkSXBDaWRyKSxcbiAgICAgICAgUG9ydC50Y3AodGhpcy5wb3J0KSxcbiAgICAgICAgXCJBbGxvdyBleHRlcm5hbCBhY2Nlc3MgZnJvbSBhbGxvd2VkIElQXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7XG4gICAgICBzZWN1cml0eUdyb3VwczogW2NsdXN0ZXJTZWN1cml0eUdyb3VwXSxcbiAgICAgIGRlZmF1bHRQb3J0OiBQb3J0LnRjcCh0aGlzLnBvcnQpXG4gICAgfSk7XG5cbiAgICBjb25zdCB3cml0ZXJDb25maWcgPSBwcm9wcy53cml0ZXIgPz8ge307XG4gICAgY29uc3Qgd3JpdGVyUEkgPSB3cml0ZXJDb25maWcuZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cyA/PyBwaUVuYWJsZWQ7XG4gICAgY29uc3Qgd3JpdGVyU3VmZml4ID0gd3JpdGVyQ29uZmlnLmlkZW50aWZpZXJTdWZmaXg7XG4gICAgY29uc3QgcGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvbiA9IHRoaXMuZ2V0UGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uKFxuICAgICAgcGlDb25maWc/LnJldGVudGlvblBlcmlvZCA/PyA3XG4gICAgKTtcbiAgICBjb25zdCBkYXRhYmFzZU5hbWUgPSBwcm9wcy5kYXRhYmFzZU5hbWUgfHwgaWQ7XG5cbiAgICBjb25zdCB3cml0ZXIgPSBDbHVzdGVySW5zdGFuY2Uuc2VydmVybGVzc1YyKGAke2RhdGFiYXNlTmFtZX1Xcml0ZXJgLCB7XG4gICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiB3cml0ZXJQSSxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodEVuY3J5cHRpb25LZXk6IHdyaXRlclBJXG4gICAgICAgID8gcGVyZm9ybWFuY2VJbnNpZ2h0c0tleVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbjogd3JpdGVyUElcbiAgICAgICAgPyBwZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaW5zdGFuY2VJZGVudGlmaWVyOiBSZXNvdXJjZU5hbWluZy53cml0ZXJJbnN0YW5jZUlkKGlkLCB3cml0ZXJTdWZmaXgpLFxuICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgLi4uKHdyaXRlckNvbmZpZy5hdmFpbGFiaWxpdHlab25lICYmIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogd3JpdGVyQ29uZmlnLmF2YWlsYWJpbGl0eVpvbmVcbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWFkZXJzID0gdGhpcy5idWlsZFJlYWRlcnMoXG4gICAgICBwcm9wcyxcbiAgICAgIHBpRW5hYmxlZCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHNLZXksXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzUmV0ZW50aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgfHxcbiAgICAgIERhdGFiYXNlQ2x1c3RlckVuZ2luZS5hdXJvcmFQb3N0Z3Jlcyh7XG4gICAgICAgIHZlcnNpb246IEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbi5vZihcIjE2LjZcIiwgXCIxNlwiKVxuICAgICAgfSk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJHcm91cCA9IG5ldyBQYXJhbWV0ZXJHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UGFyYW1ldGVyR3JvdXBgLFxuICAgICAge1xuICAgICAgICBlbmdpbmUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgUGFyYW1ldGVyIGdyb3VwIGZvciAke3Byb3BzLmRhdGFiYXNlTmFtZX0gd2l0aCBzZWN1cml0eSBkZWZhdWx0c2AsXG4gICAgICAgIHBhcmFtZXRlcnM6IHRoaXMuZW5naW5lQ29uZmlnLnNzbFBhcmFtZXRlcnNcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVXNlIHB1YmxpYyBzdWJuZXRzIHdoZW4gcHVibGljbHkgYWNjZXNzaWJsZSwgb3RoZXJ3aXNlIHByaXZhdGVcbiAgICBjb25zdCB2cGNTdWJuZXRzID0gcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlXG4gICAgICA/IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUMgfVxuICAgICAgOiB7IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9O1xuXG4gICAgLy8gQ29tbW9uIHByb3BzIHNoYXJlZCBhY3Jvc3MgYWxsIGNsdXN0ZXIgY3JlYXRpb24gcGF0aHNcbiAgICBjb25zdCBiYXNlQ2x1c3RlclByb3BzID0ge1xuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB2cGNTdWJuZXRzLFxuICAgICAgc2VjdXJpdHlHcm91cHM6IFtjbHVzdGVyU2VjdXJpdHlHcm91cF0gYXMgSVNlY3VyaXR5R3JvdXBbXSxcbiAgICAgIGVuZ2luZSxcbiAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgYmFja3VwOiB7IHJldGVudGlvbjogRHVyYXRpb24uZGF5cyhwcm9wcy5iYWNrdXBSZXRlbnRpb24gPz8gMTQpIH0sXG4gICAgICBzdG9yYWdlRW5jcnlwdGVkOiB0cnVlLFxuICAgICAgLi4uKHN0b3JhZ2VFbmNyeXB0aW9uS2V5ICYmIHsgc3RvcmFnZUVuY3J5cHRpb25LZXkgfSksXG4gICAgICBjbHVzdGVySWRlbnRpZmllcjpcbiAgICAgICAgcHJvcHMuY2x1c3RlcklkZW50aWZpZXI/LnRvTG93ZXJDYXNlKCkgfHwgUmVzb3VyY2VOYW1pbmcuY2x1c3RlcklkKGlkKSxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsIHx8IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzpcbiAgICAgICAgcHJvcHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3cgfHwgXCJTYXQ6MTI6MzAtU2F0OjIwOjMwXCIsXG4gICAgICBwb3J0OiB0aGlzLnBvcnQsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlNOQVBTSE9ULFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24gPz8gdHJ1ZSxcbiAgICAgIGlhbUF1dGhlbnRpY2F0aW9uOiB0cnVlLFxuICAgICAgd3JpdGVyLFxuICAgICAgcmVhZGVyc1xuICAgIH07XG5cbiAgICAvLyBDcmVkZW50aWFscyBhbmQgZGF0YWJhc2UgbmFtZSBmb3Igbm9uLWdsb2JhbC1zZWNvbmRhcnkgY2x1c3RlcnNcbiAgICBjb25zdCBwcmltYXJ5Q2x1c3RlclByb3BzID0gcHJvcHMuaXNHbG9iYWxTZWNvbmRhcnlcbiAgICAgID8ge31cbiAgICAgIDoge1xuICAgICAgICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscy5mcm9tU2VjcmV0KHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXQpLFxuICAgICAgICAgIGRlZmF1bHREYXRhYmFzZU5hbWU6IChcbiAgICAgICAgICAgIHByb3BzLmRhdGFiYXNlTmFtZSB8fCBpZC5yZXBsYWNlKFwiUmRzXCIsIFwiXCIpXG4gICAgICAgICAgKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgXCJcIilcbiAgICAgICAgfTtcblxuICAgIGlmIChwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIpIHtcbiAgICAgIC8vIENyZWF0ZSBmcm9tIHNuYXBzaG90IC0gY3JlZGVudGlhbHMgbmVlZCBTbmFwc2hvdENyZWRlbnRpYWxzIHR5cGVcbiAgICAgIGNvbnN0IHNuYXBzaG90Q3JlZGVudGlhbHMgPSBwcm9wcy5pc0dsb2JhbFNlY29uZGFyeVxuICAgICAgICA/IHt9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFNuYXBzaG90Q3JlZGVudGlhbHMuZnJvbVNlY3JldChcbiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH07XG5cbiAgICAgIHRoaXMuZGF0YWJhc2VDbHVzdGVyID0gbmV3IERhdGFiYXNlQ2x1c3RlckZyb21TbmFwc2hvdChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7aWR9RGF0YWJhc2VgLFxuICAgICAgICAvLyBUeXBlIGFzc2VydGlvbjogQ0RLJ3MgU25hcHNob3RDcmVkZW50aWFscy51c2VybmFtZSBpcyBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgLy8gYnV0IERhdGFiYXNlQ2x1c3RlckZyb21TbmFwc2hvdFByb3BzIGV4cGVjdHMgc3RyaW5nLiBXb3JrcyBhdCBydW50aW1lLlxuICAgICAgICB7XG4gICAgICAgICAgLi4uYmFzZUNsdXN0ZXJQcm9wcyxcbiAgICAgICAgICAuLi5zbmFwc2hvdENyZWRlbnRpYWxzLFxuICAgICAgICAgIHNuYXBzaG90SWRlbnRpZmllcjogcHJvcHMuc25hcHNob3RJZGVudGlmaWVyXG4gICAgICAgIH0gYXMgRGF0YWJhc2VDbHVzdGVyRnJvbVNuYXBzaG90UHJvcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgY2x1c3RlclxuICAgICAgdGhpcy5kYXRhYmFzZUNsdXN0ZXIgPSBuZXcgRGF0YWJhc2VDbHVzdGVyKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtpZH1EYXRhYmFzZWAsXG4gICAgICAgIC8vIFR5cGUgYXNzZXJ0aW9uOiBzcHJlYWQgdHlwZXMgZG9uJ3QgcHJlc2VydmUgcmVxdWlyZWQgcHJvcGVydHkgbmFycm93aW5nXG4gICAgICAgIHsgLi4uYmFzZUNsdXN0ZXJQcm9wcywgLi4ucHJpbWFyeUNsdXN0ZXJQcm9wcyB9IGFzIERhdGFiYXNlQ2x1c3RlclByb3BzXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY2ZuQ2x1c3RlciA9IHRoaXMuZGF0YWJhc2VDbHVzdGVyLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmbkRCQ2x1c3RlcjtcblxuICAgIC8vIEdsb2JhbCBzZWNvbmRhcnkgY2x1c3RlcnMgY2FuJ3Qgc3BlY2lmeSB0aGVzZSBwcm9wZXJ0aWVzXG4gICAgaWYgKHByb3BzLmlzR2xvYmFsU2Vjb25kYXJ5ICYmIHRoaXMuY2ZuQ2x1c3Rlcikge1xuICAgICAgdGhpcy5jZm5DbHVzdGVyLm1hc3RlclVzZXJuYW1lID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jZm5DbHVzdGVyLm1hc3RlclVzZXJQYXNzd29yZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2ZuQ2x1c3Rlci5kYXRhYmFzZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcHJveHlFbmFibGVkID0gcHJvcHMucHJveHkgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5wcm94eSAhPT0gZmFsc2U7XG4gICAgaWYgKHByb3h5RW5hYmxlZCkge1xuICAgICAgdGhpcy5hZGRQcm94eShwcm9wcywgY2x1c3RlclNlY3VyaXR5R3JvdXApO1xuICAgIH1cblxuICAgIC8vIFNlY3JldCByb3RhdGlvbiBlbmFibGVkIGJ5IGRlZmF1bHQgKG9wdC1vdXQgd2l0aCBzZWNyZXRSb3RhdGlvbjogZmFsc2UpXG4gICAgaWYgKCFwcm9wcy5pc0dsb2JhbFNlY29uZGFyeSkge1xuICAgICAgY29uc3Qgc2VjcmV0Um90YXRpb25EaXNhYmxlZCA9XG4gICAgICAgIHByb3BzLmNyZWRlbnRpYWxzPy5zZWNyZXRSb3RhdGlvbiA9PT0gZmFsc2U7XG4gICAgICBpZiAoIXNlY3JldFJvdGF0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5hZGRTZWNyZXRSb3RhdGlvbihwcm9wcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlYWRlcnMoXG4gICAgcHJvcHM6IFJkc1Byb3BzLFxuICAgIGRlZmF1bHRQSUVuYWJsZWQ6IGJvb2xlYW4sXG4gICAgcGlLZXk/OiBJS2V5LFxuICAgIHBpUmV0ZW50aW9uPzogUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uXG4gICk6IElDbHVzdGVySW5zdGFuY2VbXSB7XG4gICAgaWYgKHByb3BzLnJlYWRlcnMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbGV0IHJlYWRlckNvbmZpZ3M6IEF1cm9yYVJlYWRlckNvbmZpZ1tdO1xuICAgIGlmIChwcm9wcy5yZWFkZXJzPy5pbnN0YW5jZXMpIHtcbiAgICAgIHJlYWRlckNvbmZpZ3MgPSBwcm9wcy5yZWFkZXJzLmluc3RhbmNlcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY291bnQgPSBwcm9wcy5yZWFkZXJzPy5jb3VudCA/PyAxO1xuICAgICAgcmVhZGVyQ29uZmlncyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBpKSA9PiAoe1xuICAgICAgICBzY2FsZVdpdGhXcml0ZXI6IGkgPT09IDBcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0UEkgPVxuICAgICAgcHJvcHMucmVhZGVycyAmJiBcImRlZmF1bHRFbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzXCIgaW4gcHJvcHMucmVhZGVyc1xuICAgICAgICA/IChwcm9wcy5yZWFkZXJzLmRlZmF1bHRFbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzID8/IGRlZmF1bHRQSUVuYWJsZWQpXG4gICAgICAgIDogZGVmYXVsdFBJRW5hYmxlZDtcblxuICAgIHJldHVybiByZWFkZXJDb25maWdzLm1hcCgoY29uZmlnLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZW5hYmxlUEkgPSBjb25maWcuZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0cyA/PyBkZWZhdWx0UEk7XG4gICAgICBjb25zdCBfaWRlbnRpZmllciA9IGNvbmZpZy5pZGVudGlmaWVyU3VmZml4ID8/IGByZWFkZXItJHtpbmRleCArIDF9YDtcblxuICAgICAgcmV0dXJuIENsdXN0ZXJJbnN0YW5jZS5zZXJ2ZXJsZXNzVjIoXG4gICAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZWFkZXIke2luZGV4ICsgMX1gLFxuICAgICAgICB7XG4gICAgICAgICAgc2NhbGVXaXRoV3JpdGVyOiBjb25maWcuc2NhbGVXaXRoV3JpdGVyID8/IGluZGV4ID09PSAwLFxuICAgICAgICAgIGVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM6IGVuYWJsZVBJLFxuICAgICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodEVuY3J5cHRpb25LZXk6IGVuYWJsZVBJID8gcGlLZXkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uOiBlbmFibGVQSSA/IHBpUmV0ZW50aW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogUmVzb3VyY2VOYW1pbmcucmVhZGVySW5zdGFuY2VJZChcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0SWQsXG4gICAgICAgICAgICBpbmRleCArIDEsXG4gICAgICAgICAgICBjb25maWcuaWRlbnRpZmllclN1ZmZpeFxuICAgICAgICAgICksXG4gICAgICAgICAgY2FDZXJ0aWZpY2F0ZTogQ2FDZXJ0aWZpY2F0ZS5SRFNfQ0FfUlNBNDA5Nl9HMSxcbiAgICAgICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgICAgICAuLi4oY29uZmlnLmF2YWlsYWJpbGl0eVpvbmUgJiYge1xuICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogY29uZmlnLmF2YWlsYWJpbGl0eVpvbmVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQcm94eShwcm9wczogUmRzUHJvcHMsIHNlY3VyaXR5R3JvdXA6IFNlY3VyaXR5R3JvdXApOiB2b2lkIHtcbiAgICBjb25zdCBwcm94eUNvbmZpZyA9IHByb3BzLnByb3h5IGFzIFByb3h5Q29uZmlnO1xuICAgIGNvbnN0IHZwY1N1Ym5ldHMgPSBwcm94eUNvbmZpZy52cGNTdWJuZXRzID8/IHtcbiAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU1xuICAgIH07XG5cbiAgICB0aGlzLmRhdGFiYXNlUHJveHkgPSBuZXcgRGF0YWJhc2VQcm94eShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9RGF0YWJhc2VQcm94eWAsXG4gICAgICB7XG4gICAgICAgIGRiUHJveHlOYW1lOiBSZXNvdXJjZU5hbWluZy5wcm94eU5hbWUodGhpcy5jb25zdHJ1Y3RJZCksXG4gICAgICAgIHByb3h5VGFyZ2V0OiBQcm94eVRhcmdldC5mcm9tQ2x1c3Rlcih0aGlzLmRhdGFiYXNlQ2x1c3RlciksXG4gICAgICAgIHNlY3JldHM6IFt0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0XSxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtzZWN1cml0eUdyb3VwXSxcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICAgIHJlcXVpcmVUTFM6IHByb3h5Q29uZmlnLnJlcXVpcmVUTFMgPz8gdHJ1ZSxcbiAgICAgICAgYm9ycm93VGltZW91dDogcHJveHlDb25maWcuY29ubmVjdGlvbkJvcnJvd1RpbWVvdXRcbiAgICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMocHJveHlDb25maWcuY29ubmVjdGlvbkJvcnJvd1RpbWVvdXQpXG4gICAgICAgICAgOiBEdXJhdGlvbi5zZWNvbmRzKDEyMCksXG4gICAgICAgIG1heENvbm5lY3Rpb25zUGVyY2VudDogcHJveHlDb25maWcubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgIG1heElkbGVDb25uZWN0aW9uc1BlcmNlbnQ6IHByb3h5Q29uZmlnLm1heElkbGVDb25uZWN0aW9uc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBvdXRwdXROYW1lID0gdG9QYXNjYWxDYXNlKHByb3BzLmRhdGFiYXNlTmFtZSB8fCB0aGlzLmNvbnN0cnVjdElkKTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9UHJveHlFbmRwb2ludE91dHB1dGAsIHtcbiAgICAgIGtleTogYCR7b3V0cHV0TmFtZX1Qcm94eUVuZHBvaW50YCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke291dHB1dE5hbWV9UHJveHlFbmRwb2ludGAsXG4gICAgICB2YWx1ZTogdGhpcy5kYXRhYmFzZVByb3h5LmVuZHBvaW50XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFNlY3JldFJvdGF0aW9uKHByb3BzOiBSZHNQcm9wcyk6IHZvaWQge1xuICAgIGNvbnN0IHJvdGF0aW9uQ29uZmlnID0gcHJvcHMuY3JlZGVudGlhbHM/LnNlY3JldFJvdGF0aW9uO1xuICAgIGNvbnN0IHJvdGF0aW9uUGVyaW9kID1cbiAgICAgICh0eXBlb2Ygcm90YXRpb25Db25maWcgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgcm90YXRpb25Db25maWc/LmF1dG9tYXRpY2FsbHlBZnRlcikgfHxcbiAgICAgIER1cmF0aW9uLmRheXMoMzApO1xuXG4gICAgY29uc3QgbWFzdGVyU2VjcmV0ID0gbmV3IFNlY3JldCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9TWFzdGVyU2VjcmV0YCwge1xuICAgICAgc2VjcmV0TmFtZTogUmVzb3VyY2VOYW1pbmcubWFzdGVyU2VjcmV0TmFtZSh0aGlzLmNvbnN0cnVjdElkKVxuICAgIH0pO1xuXG4gICAgbmV3IFNlY3JldFJvdGF0aW9uKHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1TZWNyZXRSb3RhdGlvbmAsIHtcbiAgICAgIGFwcGxpY2F0aW9uOiBuZXcgU2VjcmV0Um90YXRpb25BcHBsaWNhdGlvbihcbiAgICAgICAgdGhpcy5lbmdpbmVDb25maWcucm90YXRpb25BcHBOYW1lLFxuICAgICAgICBcIjEuMS4zNjdcIixcbiAgICAgICAgeyBpc011bHRpVXNlcjogdHJ1ZSB9XG4gICAgICApLFxuICAgICAgc2VjcmV0OiB0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0LFxuICAgICAgbWFzdGVyU2VjcmV0OiBtYXN0ZXJTZWNyZXQuc2VjcmV0LFxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFiYXNlQ2x1c3RlcixcbiAgICAgIHZwYzogdGhpcy5kYXRhYmFzZUNsdXN0ZXIudnBjLFxuICAgICAgYXV0b21hdGljYWxseUFmdGVyOiByb3RhdGlvblBlcmlvZFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0SG9zdEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgLy8gUmV0dXJuIHByb3h5IGVuZHBvaW50IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNsdXN0ZXIgZW5kcG9pbnRcbiAgICBpZiAodGhpcy5kYXRhYmFzZVByb3h5KSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhYmFzZVByb3h5LmVuZHBvaW50O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZUNsdXN0ZXIuY2x1c3RlckVuZHBvaW50Lmhvc3RuYW1lO1xuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMucG9ydCk7XG4gIH1cblxuICBnZXRDcmVkZW50aWFscygpOiBTZWNyZXQge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHM7XG4gIH1cblxuICBnZXRDZm5DbHVzdGVyKCk6IENmbkRCQ2x1c3RlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2ZuQ2x1c3RlcjtcbiAgfVxuXG4gIGdldERhdGFiYXNlQ2x1c3RlcigpOiBEYXRhYmFzZUNsdXN0ZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlQ2x1c3RlcjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uKFxuICAgIGRheXM/OiBudW1iZXJcbiAgKTogUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uIHtcbiAgICBzd2l0Y2ggKGRheXMpIHtcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5ERUZBVUxUO1xuICAgICAgY2FzZSAzMTpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5NT05USFNfMTtcbiAgICAgIGNhc2UgOTM6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzM7XG4gICAgICBjYXNlIDE4NjpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5NT05USFNfNjtcbiAgICAgIGNhc2UgMzcyOlxuICAgICAgICByZXR1cm4gUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLk1PTlRIU18xMjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzE7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -52,6 +52,7 @@ interface RdsAuroraGlobalProps {
52
52
  }
53
53
  export declare class RdsAuroraGlobal extends Construct implements IConnectable {
54
54
  connections: Connections;
55
+ private readonly constructId;
55
56
  private globalCluster?;
56
57
  private primaryCluster?;
57
58
  private regionalCluster?;