@rio-cloud/cdk-v2-constructs 6.0.1 → 6.2.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.
@@ -0,0 +1,330 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RunnerRoles = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
6
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
+ const aws_s3_1 = require("aws-cdk-lib/aws-s3");
8
+ const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
9
+ const constructs_1 = require("constructs");
10
+ const rio_landing_zone_1 = require("../../../rio-landing-zone");
11
+ /**
12
+ * This construct provides a set of base roles for gitlab runners in order to build, test, validate and deploy applications
13
+ * on RIO. The roles need to be assumed during job runtime to perform more permissive actions, such as creating certificates to
14
+ * authenticate towards the RIO MSK, pushing docker images to ECR, performing a secrets backup, deploying stacks,
15
+ * or to publish an SPA to a S3 bucket. Do not assume the deployment role unless needed.
16
+ * The base role can be the default role attached to GitLab runners.
17
+ * The role allows to read various basic parameters such as the NIST data mirror, the OSS license bucket, DataDog keys
18
+ * and to pull ECR images form public Gallery or the specified account in the environment.
19
+ * The Role ARNs are export using CFNOutputs. Use the outputs to configure environment variables in your GitLab group.
20
+ */
21
+ class RunnerRoles extends constructs_1.Construct {
22
+ constructor(scope, id, props) {
23
+ super(scope, id);
24
+ const accountNameParameter = rio_landing_zone_1.RioLandingZone.getAccountNameParameter(scope);
25
+ const teamNameParameter = rio_landing_zone_1.RioLandingZone.getTeamIdentifierParameter(scope);
26
+ const nistMirrorParameter = aws_ssm_1.StringParameter.fromStringParameterName(this, 'NistMirrorParameter', '/config/nist-data-mirror/url');
27
+ const ossLicensesBucketParameter = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'OssLicensesBucketParameter', {
28
+ parameterName: '/config/oss-licenses/bucket-name',
29
+ });
30
+ const ossLicensesBucket = aws_s3_1.Bucket.fromBucketName(this, 'OssLicensesBucket', ossLicensesBucketParameter.stringValue);
31
+ const ddApiKeyParam = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'DataDogApiKeyParam', {
32
+ parameterName: '/rio/config/datadog-integration/api-key',
33
+ });
34
+ const ddSiteParam = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'DataDogSiteParam', {
35
+ parameterName: '/rio/config/datadog-integration/site',
36
+ });
37
+ const kafkaIntegrationPolicy = aws_iam_1.ManagedPolicy.fromManagedPolicyArn(this, 'KafkaIntegrationPolicy', aws_cdk_lib_1.Fn.importValue('kafka-integration-policy-arn'));
38
+ this.runnerBaseRole = new aws_iam_1.Role(this, 'GlRunnerBuildRole', {
39
+ assumedBy: new aws_iam_1.ServicePrincipal('ec2.amazonaws.com', {}),
40
+ inlinePolicies: {
41
+ CdkSynthLookUp: aws_iam_1.PolicyDocument.fromJson({
42
+ Version: '2012-10-17',
43
+ Statement: [
44
+ {
45
+ Effect: 'Allow',
46
+ Action: ['s3:*Object', 's3:ListBucket', 's3:GetBucketLocation'],
47
+ Resource: ['arn:aws:s3:::cdktoolkit-*'],
48
+ },
49
+ {
50
+ Sid: 'assumerole',
51
+ Effect: 'Allow',
52
+ Action: ['sts:AssumeRole', 'iam:PassRole'],
53
+ Resource: ['arn:aws:iam::*:role/cdk-readOnlyRole', 'arn:aws:iam::*:role/cdk-hnb659fds-lookup-role-*'],
54
+ },
55
+ {
56
+ Sid: 'pullEcrImages',
57
+ Effect: 'Allow',
58
+ Action: [
59
+ 'ecr:BatchCheckLayerAvailability',
60
+ 'ecr:BatchGetImage',
61
+ 'ecr:DescribeImages',
62
+ 'ecr:DescribeRepositories',
63
+ 'ecr:GetDownloadUrlForLayer',
64
+ ],
65
+ Resource: [`${props.env.account}.dkr.ecr.${props.env.region}.amazonaws.com/*`],
66
+ },
67
+ ],
68
+ }),
69
+ },
70
+ });
71
+ this.runnerBaseRole.node.defaultChild.overrideLogicalId('GlRunnerBuildRole');
72
+ nistMirrorParameter.grantRead(this.runnerBaseRole);
73
+ ossLicensesBucketParameter.grantRead(this.runnerBaseRole);
74
+ ossLicensesBucket.grantReadWrite(this.runnerBaseRole);
75
+ accountNameParameter.grantRead(this.runnerBaseRole);
76
+ teamNameParameter.grantRead(this.runnerBaseRole);
77
+ ddApiKeyParam.grantRead(this.runnerBaseRole);
78
+ ddSiteParam.grantRead(this.runnerBaseRole);
79
+ aws_ecr_1.PublicGalleryAuthorizationToken.grantRead(this.runnerBaseRole);
80
+ const webContentPublishRole = new aws_iam_1.Role(this, 'GlRunnerS3WebContentDeployRole', {
81
+ roleName: 'gl-runner-web-content-s3-deploy-role',
82
+ assumedBy: this.runnerBaseRole,
83
+ inlinePolicies: {
84
+ PublishWebContentOnS3: aws_iam_1.PolicyDocument.fromJson({
85
+ Version: '2012-10-17',
86
+ Statement: [
87
+ {
88
+ Effect: 'Allow',
89
+ Action: [
90
+ 's3:Abort*',
91
+ 's3:DeleteObject*',
92
+ 's3:GetBucket*',
93
+ 's3:GetObject*',
94
+ 's3:List*',
95
+ 's3:PutObject',
96
+ 's3:PutObjectLegalHold',
97
+ 's3:PutObjectRetention',
98
+ 's3:PutObjectTagging',
99
+ 's3:PutObjectVersionTagging',
100
+ ],
101
+ Resource: ['arn:aws:s3:::*'],
102
+ },
103
+ {
104
+ Action: [
105
+ 'ssm:DescribeParameters',
106
+ 'ssm:GetParameter',
107
+ 'ssm:GetParameterHistory',
108
+ 'ssm:GetParameters',
109
+ 'ssm:GetParametersByPath',
110
+ ],
111
+ Effect: 'Allow',
112
+ Resource: [
113
+ `arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/config/*`,
114
+ `arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/secret/*`,
115
+ ],
116
+ },
117
+ ],
118
+ }),
119
+ },
120
+ });
121
+ webContentPublishRole.node.defaultChild.overrideLogicalId('GlRunnerS3WebContentDeployRole');
122
+ const createMSKCertRole = new aws_iam_1.Role(this, 'GlRunnerCreateAndSignCertRole', {
123
+ roleName: 'gl-runner-create-and-sign-rio-msk-cert-role',
124
+ assumedBy: this.runnerBaseRole,
125
+ inlinePolicies: {
126
+ ParameterStoreReadKeyStore: aws_iam_1.PolicyDocument.fromJson({
127
+ Version: '2012-10-17',
128
+ Statement: [
129
+ {
130
+ Action: [
131
+ 'ssm:DescribeParameters',
132
+ 'ssm:GetParameter',
133
+ 'ssm:GetParameterHistory',
134
+ 'ssm:GetParameters',
135
+ 'ssm:GetParametersByPath',
136
+ ],
137
+ Effect: 'Allow',
138
+ Resource: [
139
+ `arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/config/*`,
140
+ `arn:aws:ssm:${props.env.region}:${props.env.account}:parameter/secret/*`,
141
+ ],
142
+ },
143
+ ],
144
+ }),
145
+ SecretsManagerReadKeyStore: aws_iam_1.PolicyDocument.fromJson({
146
+ Version: '2012-10-17',
147
+ Statement: [
148
+ {
149
+ Action: [
150
+ 'secretsmanager:DescribeSecret',
151
+ 'secretsmanager:GetSecretValue',
152
+ 'secretsmanager:GetResourcePolicy',
153
+ 'secretsmanager:ListSecretVersionIds',
154
+ ],
155
+ Effect: 'Allow',
156
+ Resource: [
157
+ `arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/secret/*/service-keystore-password-??????`,
158
+ `arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/secret/*/service-keystore-password`,
159
+ `arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/config/*/service-keystore-password-??????`,
160
+ `arn:aws:secretsmanager:${props.env.region}:${props.env.account}:secret:/config/*/service-keystore-password`,
161
+ ],
162
+ },
163
+ ],
164
+ }),
165
+ },
166
+ managedPolicies: [kafkaIntegrationPolicy],
167
+ });
168
+ accountNameParameter.grantRead(createMSKCertRole);
169
+ teamNameParameter.grantRead(this.runnerBaseRole);
170
+ createMSKCertRole.node.defaultChild.overrideLogicalId('GlRunnerCreateAndSignCertRole');
171
+ const ecrDeployRole = new aws_iam_1.Role(this, 'GlRunnerECRDeployRole', {
172
+ roleName: 'gl-runner-deploy-to-ecr-role',
173
+ assumedBy: this.runnerBaseRole,
174
+ inlinePolicies: {
175
+ DeployToECR: aws_iam_1.PolicyDocument.fromJson({
176
+ Version: '2012-10-17',
177
+ Statement: [
178
+ {
179
+ Action: [
180
+ 'ecr:BatchCheckLayerAvailability',
181
+ 'ecr:BatchGetImage',
182
+ 'ecr:CompleteLayerUpload',
183
+ 'ecr:GetDownloadUrlForLayer',
184
+ 'ecr:InitiateLayerUpload',
185
+ 'ecr:PutImage',
186
+ 'ecr:UploadLayerPart',
187
+ 'ecr:GetAuthorizationToken',
188
+ 'ecr:DescribeRepositories',
189
+ ],
190
+ Effect: 'Allow',
191
+ Resource: [`${props.env.account}.dkr.ecr.${props.env.region}.amazonaws.com/*`],
192
+ },
193
+ ],
194
+ }),
195
+ },
196
+ });
197
+ aws_ecr_1.PublicGalleryAuthorizationToken.grantRead(ecrDeployRole);
198
+ ecrDeployRole.node.defaultChild.overrideLogicalId('GlRunnerECRDeployRole');
199
+ const iamPolicyKMS = new aws_iam_1.PolicyStatement({
200
+ actions: ['kms:Decrypt'],
201
+ resources: ['arn:aws:kms:*:903404386550:key/*', `arn:aws:kms:*:${props.env.account}:key/*`],
202
+ conditions: {
203
+ 'ForAnyValue:StringLike': {
204
+ 'kms:ResourceAliases': 'alias/rio-lz-backup-key*',
205
+ },
206
+ },
207
+ });
208
+ const iamPolicyLambdaExecution = new aws_iam_1.PolicyStatement({
209
+ actions: ['lambda:InvokeFunction'],
210
+ resources: [`arn:aws:lambda:eu-west-1:${props.env.account}:function:SecretsRestoreHandler`],
211
+ });
212
+ const secretsBackUpRole = new aws_iam_1.Role(this, 'GlRunnerSecretsBackupRole', {
213
+ roleName: 'gl-runner-secrets-backup-role',
214
+ assumedBy: this.runnerBaseRole,
215
+ inlinePolicies: {
216
+ SecretsBackup: new aws_iam_1.PolicyDocument({ statements: [iamPolicyKMS, iamPolicyLambdaExecution] }),
217
+ },
218
+ });
219
+ secretsBackUpRole.node.defaultChild.overrideLogicalId('GlRunnerSecretsBackupRole');
220
+ const deployRole = new aws_iam_1.Role(this, 'GlRunnerCDKDeployRole', {
221
+ roleName: 'gl-runner-cdk-deploy-role',
222
+ assumedBy: this.runnerBaseRole,
223
+ managedPolicies: [kafkaIntegrationPolicy], // required to create Kafka topics and publish event specification in deploy jobs
224
+ inlinePolicies: {
225
+ CdkDeploy: aws_iam_1.PolicyDocument.fromJson({
226
+ Version: '2012-10-17',
227
+ Statement: [
228
+ {
229
+ Effect: 'Allow',
230
+ Action: [
231
+ 'cloudformation:DescribeStacks',
232
+ 'cloudformation:CreateChangeSet',
233
+ 'cloudformation:DescribeChangeSet',
234
+ 'cloudformation:ExecuteChangeSet',
235
+ 'cloudformation:DescribeStackEvents',
236
+ 'cloudformation:DeleteChangeSet',
237
+ 'cloudformation:GetTemplate',
238
+ ],
239
+ Resource: [`arn:aws:cloudformation:${props.env.region}:${props.env.account}:stack/*`],
240
+ },
241
+ {
242
+ Effect: 'Allow',
243
+ Action: ['s3:*Object', 's3:ListBucket', 's3:GetBucketLocation'],
244
+ Resource: ['arn:aws:s3:::cdktoolkit-*'],
245
+ },
246
+ {
247
+ Sid: 'assumerole',
248
+ Effect: 'Allow',
249
+ Action: ['sts:AssumeRole', 'iam:PassRole'],
250
+ Resource: [
251
+ 'arn:aws:iam::*:role/cdk-readOnlyRole',
252
+ 'arn:aws:iam::*:role/cdk-hnb659fds-deploy-role-*',
253
+ 'arn:aws:iam::*:role/cdk-hnb659fds-file-publishing-*',
254
+ 'arn:aws:iam::*:role/cdk-hnb659fds-lookup-role-*',
255
+ ],
256
+ },
257
+ ],
258
+ }),
259
+ CfnDeploy: aws_iam_1.PolicyDocument.fromJson({
260
+ Version: '2012-10-17',
261
+ Statement: [
262
+ {
263
+ Effect: 'Allow',
264
+ Action: ['*'],
265
+ Resource: [`arn:aws:cloudformation:${props.env.region}:${props.env.account}:stack/*`],
266
+ Condition: {
267
+ 'ForAnyValue:StringEquals': {
268
+ 'aws:CalledVia': 'cloudformation.amazonaws.com',
269
+ },
270
+ },
271
+ },
272
+ ],
273
+ }),
274
+ },
275
+ });
276
+ deployRole.node.defaultChild.overrideLogicalId('GlRunnerCDKDeployRole');
277
+ const glRunnerCdkDeployRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployRoleArn', {
278
+ value: deployRole.roleArn,
279
+ exportName: 'gl-runner-cdk-deploy-role-arn',
280
+ });
281
+ glRunnerCdkDeployRoleArn.overrideLogicalId('GlRunnerCDKDeployRoleArn');
282
+ const glRunnerCdkDeployRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployRoleName', {
283
+ value: deployRole.roleName,
284
+ exportName: 'gl-runner-cdk-deploy-role-name',
285
+ });
286
+ glRunnerCdkDeployRoleName.overrideLogicalId('GlRunnerCDKDeployRoleName');
287
+ const glRunnerCdkCreateAndSignCertRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKCreateAndSignCertRoleName', {
288
+ value: createMSKCertRole.roleName,
289
+ exportName: 'gl-runner-cdk-create-and-sign-msk-cert-role-name',
290
+ });
291
+ glRunnerCdkCreateAndSignCertRoleName.overrideLogicalId('GlRunnerCDKCreateAndSignCertRoleName');
292
+ const glRunnerCdkCreateAndSignCertRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKCreateAndSignCertRoleArn', {
293
+ value: createMSKCertRole.roleArn,
294
+ exportName: 'gl-runner-cdk-create-and-sign-msk-cert-role-arn',
295
+ });
296
+ glRunnerCdkCreateAndSignCertRoleArn.overrideLogicalId('GlRunnerCDKCreateAndSignCertRoleArn');
297
+ const glRunnerCdkPublishWebContentRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKPublishWebContentRoleName', {
298
+ value: webContentPublishRole.roleName,
299
+ exportName: 'gl-runner-cdk-publish-web-content-on-s3-role-name',
300
+ });
301
+ glRunnerCdkPublishWebContentRoleName.overrideLogicalId('GlRunnerCDKPublishWebContentRoleName');
302
+ const glRunnerCdkPublishWebContentRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKPublishWebContentRoleArn', {
303
+ value: webContentPublishRole.roleArn,
304
+ exportName: 'gl-runner-cdk-publish-web-content-on-s3-role-arn',
305
+ });
306
+ glRunnerCdkPublishWebContentRoleArn.overrideLogicalId('GlRunnerCDKPublishWebContentRoleArn');
307
+ const glRunnerCdkDeployToEcrRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployToEcrRoleName', {
308
+ value: ecrDeployRole.roleName,
309
+ exportName: 'gl-runner-cdk-deploy-to-ecr-role-name',
310
+ });
311
+ glRunnerCdkDeployToEcrRoleName.overrideLogicalId('GlRunnerCDKDeployToEcrRoleName');
312
+ const glRunnerCdkDeployToEcrRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKDeployToEcrRoleArn', {
313
+ value: ecrDeployRole.roleArn,
314
+ exportName: 'gl-runner-cdk-deploy-to-ecr-role-arn',
315
+ });
316
+ glRunnerCdkDeployToEcrRoleArn.overrideLogicalId('GlRunnerCDKDeployToEcrRoleArn');
317
+ const glRunnerCdkSecretsBackupRoleName = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKSecretsBackupRoleName', {
318
+ value: secretsBackUpRole.roleName,
319
+ exportName: 'gl-runner-cdk-secrets-backup-role-name',
320
+ });
321
+ glRunnerCdkSecretsBackupRoleName.overrideLogicalId('GlRunnerCDKSecretsBackupRoleName');
322
+ const glRunnerCdkSecretsBackupRoleArn = new aws_cdk_lib_1.CfnOutput(scope, 'GlRunnerCDKSecretsBackupRoleArn', {
323
+ value: secretsBackUpRole.roleArn,
324
+ exportName: 'gl-runner-cdk-secrets-backup-role-arn',
325
+ });
326
+ glRunnerCdkSecretsBackupRoleArn.overrideLogicalId('GlRunnerCDKSecretsBackupRoleArn');
327
+ }
328
+ }
329
+ exports.RunnerRoles = RunnerRoles;
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLXJvbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9ydW5uZXItcm9sZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdFO0FBQ2hFLGlEQUFzRTtBQUN0RSxpREFPNkI7QUFDN0IsK0NBQTRDO0FBQzVDLGlEQUFzRDtBQUN0RCwyQ0FBdUM7QUFDdkMsZ0VBQTJEO0FBTTNEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBRXhDLFlBQVksS0FBWSxFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUMxRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sb0JBQW9CLEdBQUcsaUNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzRSxNQUFNLGlCQUFpQixHQUFHLGlDQUFjLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0UsTUFBTSxtQkFBbUIsR0FBRyx5QkFBZSxDQUFDLHVCQUF1QixDQUNqRSxJQUFJLEVBQ0oscUJBQXFCLEVBQ3JCLDhCQUE4QixDQUMvQixDQUFDO1FBRUYsTUFBTSwwQkFBMEIsR0FBRyx5QkFBZSxDQUFDLDZCQUE2QixDQUM5RSxJQUFJLEVBQ0osNEJBQTRCLEVBQzVCO1lBQ0UsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUNGLENBQUM7UUFDRixNQUFNLGlCQUFpQixHQUFHLGVBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRW5ILE1BQU0sYUFBYSxHQUFHLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQzlGLGFBQWEsRUFBRSx5Q0FBeUM7U0FDekQsQ0FBQyxDQUFDO1FBQ0gsTUFB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O1lBQzVGLEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTtZQUM3QixVQUFVLEVBQUUsdUNBQXVDO1NBQ3BELENBQUMsQ0FBQztRQUNILDhCQUE4QixDQUFDLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDbkYsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLHVCQUFTLENBQUMsS0FBSyxFQUFFLCtCQUErQixFQUFFO1lBQzFGLEtBQUssRUFBRSxhQUFhLENBQUMsT0FBTztZQUM1QixVQUFVLEVBQUUsc0NBQXNDO1NBQ25ELENBQUMsQ0FBQztRQUNILDZCQUE2QixDQUFDLGlCQUFpQixDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFakYsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLHVCQUFTLENBQUMsS0FBSyxFQUFFLGtDQUFrQyxFQUFFO1lBQ2hHLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO1lBQ2pDLFVBQVUsRUFBRSx3Q0FBd0M7U0FDckQsQ0FBQyxDQUFDO1FBQ0gsZ0NBQWdDLENBQUMsaUJBQWlCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN2RixNQUFNLCtCQUErQixHQUFHLElBQUksdUJBQVMsQ0FBQyxLQUFLLEVBQUUsaUNBQWlDLEVBQUU7WUFDOUYsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE9BQU87WUFDaEMsVUFBVSxFQUFFLHVDQUF1QztTQUNwRCxDQUFDLENBQUM7UUFDSCwrQkFBK0IsQ0FBQyxpQkFBaUIsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7Q0FDRjtBQS9VRCxrQ0ErVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIEVudmlyb25tZW50LCBGbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQge1xuICBDZm5Sb2xlLFxuICBNYW5hZ2VkUG9saWN5LFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUmlvTGFuZGluZ1pvbmUgfSBmcm9tICcuLi8uLi8uLi9yaW8tbGFuZGluZy16b25lJztcblxuZXhwb3J0IGludGVyZmFjZSBSdW5uZXJSb2xlUHJvcHMge1xuICBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIFRoaXMgY29uc3RydWN0IHByb3ZpZGVzIGEgc2V0IG9mIGJhc2Ugcm9sZXMgZm9yIGdpdGxhYiBydW5uZXJzIGluIG9yZGVyIHRvIGJ1aWxkLCB0ZXN0LCB2YWxpZGF0ZSBhbmQgZGVwbG95IGFwcGxpY2F0aW9uc1xuICogb24gUklPLiBUaGUgcm9sZXMgbmVlZCB0byBiZSBhc3N1bWVkIGR1cmluZyBqb2IgcnVudGltZSB0byBwZXJmb3JtIG1vcmUgcGVybWlzc2l2ZSBhY3Rpb25zLCBzdWNoIGFzIGNyZWF0aW5nIGNlcnRpZmljYXRlcyB0b1xuICogYXV0aGVudGljYXRlIHRvd2FyZHMgdGhlIFJJTyBNU0ssIHB1c2hpbmcgZG9ja2VyIGltYWdlcyB0byBFQ1IsIHBlcmZvcm1pbmcgYSBzZWNyZXRzIGJhY2t1cCwgZGVwbG95aW5nIHN0YWNrcyxcbiAqIG9yIHRvIHB1Ymxpc2ggYW4gU1BBIHRvIGEgUzMgYnVja2V0LiBEbyBub3QgYXNzdW1lIHRoZSBkZXBsb3ltZW50IHJvbGUgdW5sZXNzIG5lZWRlZC5cbiAqIFRoZSBiYXNlIHJvbGUgY2FuIGJlIHRoZSBkZWZhdWx0IHJvbGUgYXR0YWNoZWQgdG8gR2l0TGFiIHJ1bm5lcnMuXG4gKiBUaGUgcm9sZSBhbGxvd3MgdG8gcmVhZCB2YXJpb3VzIGJhc2ljIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgTklTVCBkYXRhIG1pcnJvciwgdGhlIE9TUyBsaWNlbnNlIGJ1Y2tldCwgRGF0YURvZyBrZXlzXG4gKiBhbmQgdG8gcHVsbCBFQ1IgaW1hZ2VzIGZvcm0gcHVibGljIEdhbGxlcnkgb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50IGluIHRoZSBlbnZpcm9ubWVudC5cbiAqIFRoZSBSb2xlIEFSTnMgYXJlIGV4cG9ydCB1c2luZyBDRk5PdXRwdXRzLiBVc2UgdGhlIG91dHB1dHMgdG8gY29uZmlndXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB5b3VyIEdpdExhYiBncm91cC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lclJvbGVzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgcnVubmVyQmFzZVJvbGU6IFJvbGU7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bm5lclJvbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgYWNjb3VudE5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcihzY29wZSk7XG4gICAgY29uc3QgdGVhbU5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcihzY29wZSk7XG5cbiAgICBjb25zdCBuaXN0TWlycm9yUGFyYW1ldGVyID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdOaXN0TWlycm9yUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICApO1xuXG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyJyxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBvc3NMaWNlbnNlc0J1Y2tldCA9IEJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLCAnT3NzTGljZW5zZXNCdWNrZXQnLCBvc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5zdHJpbmdWYWx1ZSk7XG5cbiAgICBjb25zdCBkZEFwaUtleVBhcmFtID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdEYXRhRG9nQXBpS2V5UGFyYW0nLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiAnL3Jpby9jb25maWcvZGF0YWRvZy1pbnRlZ3JhdGlvbi9hcGkta2V5JyxcbiAgICB9KTtcbiAgICBjb25zdCBkZFNpdGVQYXJhbSA9IFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnRGF0YURvZ1NpdGVQYXJhbScsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6ICcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL3NpdGUnLFxuICAgIH0pO1xuXG4gICAgY29uc3Qga2Fma2FJbnRlZ3JhdGlvblBvbGljeSA9IE1hbmFnZWRQb2xpY3kuZnJvbU1hbmFnZWRQb2xpY3lBcm4oXG4gICAgICB0aGlzLFxuICAgICAgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knLFxuICAgICAgRm4uaW1wb3J0VmFsdWUoJ2thZmthLWludGVncmF0aW9uLXBvbGljeS1hcm4nKSxcbiAgICApO1xuXG4gICAgdGhpcy5ydW5uZXJCYXNlUm9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckJ1aWxkUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJywge30pLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQ2RrU3ludGhMb29rVXA6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3MzOipPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCcsICdzMzpHZXRCdWNrZXRMb2NhdGlvbiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6Y2RrdG9vbGtpdC0qJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTaWQ6ICdhc3N1bWVyb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnc3RzOkFzc3VtZVJvbGUnLCAnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLXJlYWRPbmx5Um9sZScsICdhcm46YXdzOmlhbTo6Kjpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtKiddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2lkOiAncHVsbEVjckltYWdlcycsXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpEZXNjcmliZUltYWdlcycsXG4gICAgICAgICAgICAgICAgJ2VjcjpEZXNjcmliZVJlcG9zaXRvcmllcycsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtgJHtwcm9wcy5lbnYuYWNjb3VudH0uZGtyLmVjci4ke3Byb3BzLmVudi5yZWdpb259LmFtYXpvbmF3cy5jb20vKmBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKHRoaXMucnVubmVyQmFzZVJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQnVpbGRSb2xlJyk7XG4gICAgbmlzdE1pcnJvclBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIGFjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICB0ZWFtTmFtZVBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgZGRBcGlLZXlQYXJhbS5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgZGRTaXRlUGFyYW0uZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIFB1YmxpY0dhbGxlcnlBdXRob3JpemF0aW9uVG9rZW4uZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuXG4gICAgY29uc3Qgd2ViQ29udGVudFB1Ymxpc2hSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyUzNXZWJDb250ZW50RGVwbG95Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLXdlYi1jb250ZW50LXMzLWRlcGxveS1yb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFB1Ymxpc2hXZWJDb250ZW50T25TMzogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAnczM6QWJvcnQqJyxcbiAgICAgICAgICAgICAgICAnczM6RGVsZXRlT2JqZWN0KicsXG4gICAgICAgICAgICAgICAgJ3MzOkdldEJ1Y2tldConLFxuICAgICAgICAgICAgICAgICdzMzpHZXRPYmplY3QqJyxcbiAgICAgICAgICAgICAgICAnczM6TGlzdConLFxuICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3QnLFxuICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RMZWdhbEhvbGQnLFxuICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RSZXRlbnRpb24nLFxuICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RUYWdnaW5nJyxcbiAgICAgICAgICAgICAgICAnczM6UHV0T2JqZWN0VmVyc2lvblRhZ2dpbmcnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6KiddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ3NzbTpEZXNjcmliZVBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9jb25maWcvKmAsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cGFyYW1ldGVyL3NlY3JldC8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgICh3ZWJDb250ZW50UHVibGlzaFJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyUzNXZWJDb250ZW50RGVwbG95Um9sZScpO1xuXG4gICAgY29uc3QgY3JlYXRlTVNLQ2VydFJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJDcmVhdGVBbmRTaWduQ2VydFJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1jcmVhdGUtYW5kLXNpZ24tcmlvLW1zay1jZXJ0LXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgUGFyYW1ldGVyU3RvcmVSZWFkS2V5U3RvcmU6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdzc206RGVzY3JpYmVQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcicsXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpwYXJhbWV0ZXIvY29uZmlnLypgLFxuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9zZWNyZXQvKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBTZWNyZXRzTWFuYWdlclJlYWRLZXlTdG9yZTogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkRlc2NyaWJlU2VjcmV0JyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRSZXNvdXJjZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkxpc3RTZWNyZXRWZXJzaW9uSWRzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c2VjcmV0Oi9zZWNyZXQvKi9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkLT8/Pz8/P2AsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L3NlY3JldC8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNlY3JldHNtYW5hZ2VyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c2VjcmV0Oi9jb25maWcvKi9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkLT8/Pz8/P2AsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L2NvbmZpZy8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtrYWZrYUludGVncmF0aW9uUG9saWN5XSxcbiAgICB9KTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoY3JlYXRlTVNLQ2VydFJvbGUpO1xuICAgIHRlYW1OYW1lUGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICAoY3JlYXRlTVNLQ2VydFJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ3JlYXRlQW5kU2lnbkNlcnRSb2xlJyk7XG5cbiAgICBjb25zdCBlY3JEZXBsb3lSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyRUNSRGVwbG95Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWRlcGxveS10by1lY3Itcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBEZXBsb3lUb0VDUjogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknLFxuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hHZXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpDb21wbGV0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAgICAgICAnZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXInLFxuICAgICAgICAgICAgICAgICdlY3I6SW5pdGlhdGVMYXllclVwbG9hZCcsXG4gICAgICAgICAgICAgICAgJ2VjcjpQdXRJbWFnZScsXG4gICAgICAgICAgICAgICAgJ2VjcjpVcGxvYWRMYXllclBhcnQnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJyxcbiAgICAgICAgICAgICAgICAnZWNyOkRlc2NyaWJlUmVwb3NpdG9yaWVzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW2Ake3Byb3BzLmVudi5hY2NvdW50fS5ka3IuZWNyLiR7cHJvcHMuZW52LnJlZ2lvbn0uYW1hem9uYXdzLmNvbS8qYF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuLmdyYW50UmVhZChlY3JEZXBsb3lSb2xlKTtcbiAgICAoZWNyRGVwbG95Um9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJFQ1JEZXBsb3lSb2xlJyk7XG5cbiAgICBjb25zdCBpYW1Qb2xpY3lLTVMgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGFjdGlvbnM6IFsna21zOkRlY3J5cHQnXSxcbiAgICAgIHJlc291cmNlczogWydhcm46YXdzOmttczoqOjkwMzQwNDM4NjU1MDprZXkvKicsIGBhcm46YXdzOmttczoqOiR7cHJvcHMuZW52LmFjY291bnR9OmtleS8qYF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdMaWtlJzoge1xuICAgICAgICAgICdrbXM6UmVzb3VyY2VBbGlhc2VzJzogJ2FsaWFzL3Jpby1sei1iYWNrdXAta2V5KicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGlhbVBvbGljeUxhbWJkYUV4ZWN1dGlvbiA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlRnVuY3Rpb24nXSxcbiAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmxhbWJkYTpldS13ZXN0LTE6JHtwcm9wcy5lbnYuYWNjb3VudH06ZnVuY3Rpb246U2VjcmV0c1Jlc3RvcmVIYW5kbGVyYF0sXG4gICAgfSk7XG4gICAgY29uc3Qgc2VjcmV0c0JhY2tVcFJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJTZWNyZXRzQmFja3VwUm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLXNlY3JldHMtYmFja3VwLXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgU2VjcmV0c0JhY2t1cDogbmV3IFBvbGljeURvY3VtZW50KHsgc3RhdGVtZW50czogW2lhbVBvbGljeUtNUywgaWFtUG9saWN5TGFtYmRhRXhlY3V0aW9uXSB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKHNlY3JldHNCYWNrVXBSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lclNlY3JldHNCYWNrdXBSb2xlJyk7XG5cbiAgICBjb25zdCBkZXBsb3lSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtrYWZrYUludGVncmF0aW9uUG9saWN5XSwgLy8gcmVxdWlyZWQgdG8gY3JlYXRlIEthZmthIHRvcGljcyBhbmQgcHVibGlzaCBldmVudCBzcGVjaWZpY2F0aW9uIGluIGRlcGxveSBqb2JzXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBDZGtEZXBsb3k6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpFeGVjdXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja0V2ZW50cycsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkdldFRlbXBsYXRlJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnN0YWNrLypgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3MzOipPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCcsICdzMzpHZXRCdWNrZXRMb2NhdGlvbiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6Y2RrdG9vbGtpdC0qJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTaWQ6ICdhc3N1bWVyb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnc3RzOkFzc3VtZVJvbGUnLCAnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLXJlYWRPbmx5Um9sZScsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1kZXBsb3ktcm9sZS0qJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWZpbGUtcHVibGlzaGluZy0qJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLSonLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgICAgQ2ZuRGVwbG95OiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWycqJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbYGFybjphd3M6Y2xvdWRmb3JtYXRpb246JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzdGFjay8qYF0sXG4gICAgICAgICAgICAgIENvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdFcXVhbHMnOiB7XG4gICAgICAgICAgICAgICAgICAnYXdzOkNhbGxlZFZpYSc6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKGRlcGxveVJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ0RLRGVwbG95Um9sZScpO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lSb2xlQXJuID0gbmV3IENmbk91dHB1dChzY29wZSwgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZUFybicsIHtcbiAgICAgIHZhbHVlOiBkZXBsb3lSb2xlLnJvbGVBcm4sXG4gICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZS1hcm4nLFxuICAgIH0pO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJDREtEZXBsb3lSb2xlQXJuJyk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoc2NvcGUsICdHbFJ1bm5lckNES0RlcGxveVJvbGVOYW1lJywge1xuICAgICAgdmFsdWU6IGRlcGxveVJvbGUucm9sZU5hbWUsXG4gICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZS1uYW1lJyxcbiAgICB9KTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lckNES0RlcGxveVJvbGVOYW1lJyk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lJywge1xuICAgICAgdmFsdWU6IGNyZWF0ZU1TS0NlcnRSb2xlLnJvbGVOYW1lLFxuICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstY3JlYXRlLWFuZC1zaWduLW1zay1jZXJ0LXJvbGUtbmFtZScsXG4gICAgfSk7XG4gICAgZ2xSdW5uZXJDZGtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUnKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybiA9IG5ldyBDZm5PdXRwdXQoc2NvcGUsICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybicsIHtcbiAgICAgIHZhbHVlOiBjcmVhdGVNU0tDZXJ0Um9sZS5yb2xlQXJuLFxuICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstY3JlYXRlLWFuZC1zaWduLW1zay1jZXJ0LXJvbGUtYXJuJyxcbiAgICB9KTtcbiAgICBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4nKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoc2NvcGUsICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUnLCB7XG4gICAgICB2YWx1ZTogd2ViQ29udGVudFB1Ymxpc2hSb2xlLnJvbGVOYW1lLFxuICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstcHVibGlzaC13ZWItY29udGVudC1vbi1zMy1yb2xlLW5hbWUnLFxuICAgIH0pO1xuICAgIGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVOYW1lJyk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4nLCB7XG4gICAgICB2YWx1ZTogd2ViQ29udGVudFB1Ymxpc2hSb2xlLnJvbGVBcm4sXG4gICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1wdWJsaXNoLXdlYi1jb250ZW50LW9uLXMzLXJvbGUtYXJuJyxcbiAgICB9KTtcbiAgICBnbFJ1bm5lckNka1B1Ymxpc2hXZWJDb250ZW50Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4nKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoc2NvcGUsICdHbFJ1bm5lckNES0RlcGxveVRvRWNyUm9sZU5hbWUnLCB7XG4gICAgICB2YWx1ZTogZWNyRGVwbG95Um9sZS5yb2xlTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS10by1lY3Itcm9sZS1uYW1lJyxcbiAgICB9KTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlTmFtZScpO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlQXJuID0gbmV3IENmbk91dHB1dChzY29wZSwgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlQXJuJywge1xuICAgICAgdmFsdWU6IGVjckRlcGxveVJvbGUucm9sZUFybixcbiAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS10by1lY3Itcm9sZS1hcm4nLFxuICAgIH0pO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lckNES0RlcGxveVRvRWNyUm9sZUFybicpO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZU5hbWUnLCB7XG4gICAgICB2YWx1ZTogc2VjcmV0c0JhY2tVcFJvbGUucm9sZU5hbWUsXG4gICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1zZWNyZXRzLWJhY2t1cC1yb2xlLW5hbWUnLFxuICAgIH0pO1xuICAgIGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlTmFtZScpO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZUFybicsIHtcbiAgICAgIHZhbHVlOiBzZWNyZXRzQmFja1VwUm9sZS5yb2xlQXJuLFxuICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstc2VjcmV0cy1iYWNrdXAtcm9sZS1hcm4nLFxuICAgIH0pO1xuICAgIGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ0RLU2VjcmV0c0JhY2t1cFJvbGVBcm4nKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,7 @@
1
+ import { Construct } from 'constructs';
2
+ /**
3
+ * The construct creates a service linked role required to run GitLab Runners using Spot EC2 instances.
4
+ */
5
+ export declare class SpotServiceLinkedRole extends Construct {
6
+ constructor(scope: Construct, id: string);
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpotServiceLinkedRole = void 0;
4
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
5
+ const constructs_1 = require("constructs");
6
+ /**
7
+ * The construct creates a service linked role required to run GitLab Runners using Spot EC2 instances.
8
+ */
9
+ class SpotServiceLinkedRole extends constructs_1.Construct {
10
+ constructor(scope, id) {
11
+ super(scope, id);
12
+ new aws_iam_1.CfnServiceLinkedRole(scope, 'Ec2SpotServiceLinkedRole', {
13
+ awsServiceName: 'spot.amazonaws.com',
14
+ });
15
+ }
16
+ }
17
+ exports.SpotServiceLinkedRole = SpotServiceLinkedRole;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdC1yb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9zcG90LXJvbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQTJEO0FBQzNELDJDQUF1QztBQUd2Qzs7R0FFRztBQUNILE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFDbEQsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLDhCQUFvQixDQUFDLEtBQUssRUFBRSwwQkFBMEIsRUFBRTtZQUMxRCxjQUFjLEVBQUUsb0JBQW9CO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVBELHNEQU9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuU2VydmljZUxpbmtlZFJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5cbi8qKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGVzIGEgc2VydmljZSBsaW5rZWQgcm9sZSByZXF1aXJlZCB0byBydW4gR2l0TGFiIFJ1bm5lcnMgdXNpbmcgU3BvdCBFQzIgaW5zdGFuY2VzLlxuICovXG5leHBvcnQgY2xhc3MgU3BvdFNlcnZpY2VMaW5rZWRSb2xlIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgbmV3IENmblNlcnZpY2VMaW5rZWRSb2xlKHNjb3BlLCAnRWMyU3BvdFNlcnZpY2VMaW5rZWRSb2xlJywge1xuICAgICAgYXdzU2VydmljZU5hbWU6ICdzcG90LmFtYXpvbmF3cy5jb20nLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -177,6 +177,13 @@ export interface KafkaTopicV4Props {
177
177
  * @defaultValue undefined
178
178
  */
179
179
  readonly logCompactionProperties?: LogCompactionProperties;
180
+ /**
181
+ * Specify whether the topic should be backed up automatically or not.
182
+ * It could just be enabled, if the topic is compacted and the RecoveryPolicy is 'recoverable'.
183
+ *
184
+ * @defaultValue undefined
185
+ */
186
+ readonly managedBackupEnabled?: boolean;
180
187
  }
181
188
  /**
182
189
  * The Topics target audience
@@ -43,9 +43,11 @@ class KafkaTopicV4 extends constructs_1.Construct {
43
43
  Version: '4',
44
44
  Audience: props.metadata.audience,
45
45
  RecoveryPolicy: props.metadata.recoveryPolicy,
46
+ ManagedBackupEnabled: props.managedBackupEnabled,
46
47
  },
47
48
  });
48
49
  this.node.addValidation(validator(props));
50
+ this.node.addValidation(backupPropertiesValidator(props));
49
51
  }
50
52
  }
51
53
  exports.KafkaTopicV4 = KafkaTopicV4;
@@ -75,6 +77,20 @@ const validator = (props) => {
75
77
  },
76
78
  };
77
79
  };
80
+ const backupPropertiesValidator = (props) => {
81
+ return {
82
+ validate: () => {
83
+ const result = [];
84
+ if (props.managedBackupEnabled && !props.isLogCompacted) {
85
+ result.push('Invalid [managedBackupEnabled]: managed backup can only be enabled for log compacted topics.');
86
+ }
87
+ if (props.managedBackupEnabled && props.metadata.recoveryPolicy !== 'recoverable') {
88
+ result.push('Invalid [managedBackupEnabled]: topics with managedBackupEnabled have to have recovery policy "recoverable".');
89
+ }
90
+ return result;
91
+ },
92
+ };
93
+ };
78
94
  const mapProperties = (scope, props) => {
79
95
  const teamEmail = rio_landing_zone_1.RioLandingZone.getTeamEmailParameter(scope).stringValue;
80
96
  const events = props.metadata.events.map(source => {
@@ -107,4 +123,4 @@ const mapProperties = (scope, props) => {
107
123
  },
108
124
  };
109
125
  };
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2Fma2EtdG9waWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2Fma2Eva2Fma2EtdG9waWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBaUU7QUFDakUsbUNBQW1DO0FBQ25DLDJDQUFtRDtBQUNuRCx5REFBMEU7QUFDMUUsMERBQXFEO0FBeU5yRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFFdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBR2pCLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUV6RSxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFVBQVUsRUFBRTtnQkFDVixHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dCQUM3QixPQUFPLEVBQUUsR0FBRzthQUNiO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7QUFqQkgsZ0NBa0JDOzs7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBRXpDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFVBQVUsRUFBRTtnQkFDVixHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dCQUM3QixPQUFPLEVBQUUs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QUM1RCxXQUFXLENBQUMsWUFBWSxDQUN0QixrREFBa0QsS0FBSyxDQUFDLElBQUksaUJBQWlCLEVBQzdFO3NEQUNnRCxLQUFLLENBQUMsSUFBSTtDQUMvRCxDQUNJLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTztRQUNMLFlBQVksRUFBRSwrREFBK0Q7UUFDN0UsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ3JCLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVc7UUFDdkMsTUFBTSxFQUFFLE1BQU07UUFDZCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1FBQzVDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDO1FBQy9DLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUU7UUFDbkUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDOUYsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixJQUFJLEtBQUs7UUFDN0QsYUFBYSxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUMxRCxTQUFTLEVBQUUsU0FBUztRQUNwQixHQUFHLEVBQUU7WUFDSCxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDdEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTTtTQUN6QjtLQUNGLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgQ2ZuUmVzb3VyY2UsIEFubm90YXRpb25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgS2Fma2FFdmVudFNwZWMsIEthZmthRXZlbnRTcGVjU291cmNlIH0gZnJvbSAnLi9rYWZrYS1ldmVudC1zcGVjJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vcmlvLWxhbmRpbmctem9uZSc7XG5cbi8qKlxuICogV3JhcHBlciBmb3IgYWxsIG1ldGEgZGF0YSBvZiBhIHRvcGljLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNNZXRhRGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgc3BlY3Mgb2YgdGhlIGV2ZW50cyBvbiB0aGF0IHRvcGljXG4gICAqL1xuICByZWFkb25seSBldmVudHM6IEthZmthRXZlbnRTcGVjU291cmNlW107XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgaW50ZW50IG9mIHRoZSB0b3BpYy4gVGhpcyBtaWdodCBiZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXZlbnRzIG9uIHRoYXQgdG9waWNcbiAgICogb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvZHVjZXIgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBldmVudHMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGFsbCBtZXRhIGRhdGEgb2YgYSB2NCB0b3BpYyBzcGVjLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNNZXRhRGF0YVY0IHtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBzcGVjcyBvZiB0aGUgZXZlbnRzIG9uIHRoYXQgdG9waWNcbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50czogS2Fma2FFdmVudFNwZWNTb3VyY2VbXTtcblxuICAvKipcbiAgICogRGVzY3JpYmVzIHRoZSBpbnRlbnQgb2YgdGhlIHRvcGljLiBUaGlzIG1pZ2h0IGJlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBldmVudHMgb24gdGhhdCB0b3BpY1xuICAgKiBvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9kdWNlciBhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGV2ZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhIHRvcGljIGlzIG1lYW50IGZvciBjb21wb25lbnQgaW50ZXJuYWwgdXNhZ2Ugb25seSBvciBpZiBvdGhlciBzZXJ2aWNlcyBjb3VsZFxuICAgKiB1c2UgaXQgdG9vLlxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaWVuY2U6IFRvcGljQXVkaWVuY2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgcHJvZHVjZXIgd2lsbCByZXN0b3JlIHRoZSBkYXRhIGluIGNhc2Ugb2YgYSBkaXNhc3RlciBvciBub3QuXG4gICAqL1xuICByZWFkb25seSByZWNvdmVyeVBvbGljeTogVG9waWNSZWNvdmVyeVBvbGljeTtcbn1cblxuLyoqXG4gKiBSZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIHRvcGljLlxuICpcbiAqIHN0cmluZ3MgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgQ05BTUUgb2YgdGhlIGNlcnRpZmljYXRlIG9mIHRoZSBLYWZrYSBjbGllbnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthQWNsU3RhdGVtZW50IHtcbiAgLyoqXG4gICogTGlzdCBvZiBjbGllbnRzIHRoYXQgc2hvdWxkIGdldCB3cml0ZSBwZXJtaXNzaW9uc1xuICAqL1xuICByZWFkb25seSB3cml0ZTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY2xpZW50cyB0aGF0IHNob3VsZCBnZXQgcmVhZCBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVhZDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY2xpZW50cyB0aGF0IHNob3VsZCBnZXQgZGVsZXRlIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBBdHRlbnRpb246IE9ubHkgdXNlIERlbGV0aW9uIHBvbGljeSBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchXG4gICAqIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgZm9yIEtTdHJlYW0gYW5kIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gZGVsZXRlIG1lc3NhZ2VzIGFuZCB0aGUgdG9waWMuPGJyPlxuICAgKiBJZiB5b3UganVzdCB3YW50IHRvIFwiZGVsZXRlXCIgYSBtZXNzYWdlIG9uIGEgbG9nIGNvbXBhY3RlZCB0b3BpYywgeW91IHNob3VsZCBub3Qgc2V0IHRoaXMgcGVybWlzc2lvbiBhbmQgc2VuZCBhIHRvbWJzdG9uZSBtZXNzYWdlIGluc3RlYWQuXG4gICAqL1xuICByZWFkb25seSBkZWxldGU/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciBhbGwgbG9nIGNvbXBhY3Rpb24gcmVsYXRlZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSB0byByZXRhaW4gZGVsZXRlIHRvbWJzdG9uZSBtYXJrZXJzIGZvciBsb2cgY29tcGFjdGVkIHRvcGljcztcbiAgICogVGhlIHNvZnQgbGltaXQgaXMgMTAgZGF5cyBidXQgY2FuIGJlIGluY3JlYXNlZCB1cG9uIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdFZhbHVlIDEgZGF5XG4gICAqL1xuICByZWFkb25seSBkZWxldGVSZXRlbnRpb24/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBUaGUgY3VycmVudCBzZXJ2aWNlIGxpbWl0cyBjYW4gYmUgZm91bmQgaW4gdGhlIHRvcGljIGxpbWl0cyBjb25maWd1cmF0aW9uIG9mIHRoZSB0b3BpYyBtYW5hZ2VyLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9jb2xsYWJvcmF0aW9uLm1zaS5hdWRpLmNvbS9zdGFzaC9wcm9qZWN0cy9SU0VWVEJVL3JlcG9zL3RvcGljLW1hbmFnZXIvYnJvd3NlL2NvbmZpZy90b3BpYy1zZXJ2aWNlLWxpbWl0cy55YW1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FUb3BpY1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgdG9waWM7IGhhcyB0byBtYXRjaCBwYXR0ZXJuIFtBLVphLXowLTkuLV0rXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZGVncmVlIG9mIHBhcmFsbGVsaXNtIG9mIHRoZSB0b3BpYzsgc2hvdWxkIGJlIGluY3JlYXNlZCBmb3JcbiAgICogbGFyZ2UgZXhwZWN0ZWQgbG9hZHMgKGUuZy4sIDI1IGZvciByaW8uYXNzZXQtaW90LWV2ZW50cykuXG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDEwIHBhcnRpdGlvbnMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IG51bWJlck9mUGFydGl0aW9uczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiByZXBsaWNhdGlvbiBvZiBtZXNzYWdlczsgaGFzIHRvIGJlIGJldHdlZW4gMSBhbmQgdGhlIG51bWJlciBvZiBicm9rZXJzIChjdXJyZW50bHkgMykuXG4gICAqIEBkZWZhdWx0VmFsdWUgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25GYWN0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWUgaG93IGxvbmcgbWVzc2FnZXMgYXJlIHJldGFpbmVkIG9uIEthZmthIGNsdXN0ZXI7XG4gICAqXG4gICAqIFdlIHJlY29tbWVuZCAzMCBkYXlzIGZvciBnZW5lcmFsIGV2ZW50cyBhbmQgNyBkYXlzIGZvciBzZW5zb3IgZXZlbnRzIGFuZCBvdGhlciBoaWdoLWxvYWQgY2FzZXMuXG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDMgdG8gMzAgZGF5cyBidXQgY2FuIGJlIGluY3JlYXNlZCB1cG9uIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdFZhbHVlIDcgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byAnZmFsc2UsIHRoZSB0b3BpYydzIGRhdGEgd2lsbCBiZSBkZWxldGVkIG9uIEthZmthIDEwIGRheXMgYWZ0ZXIgc3RhY2sgZGVsZXRpb24uXG4gICAqIElmIHNldCB0byAndHJ1ZScsIGl0IHdpbGwgYmUgZGVsZXRlZCBpbW1lZGlhdGVseSBhZnRlciBzdGFjayBkZWxldGlvbi5cbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFudERlbGV0aW9uRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRhZGF0YSBvZiB0aGUgdG9waWMuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogS2Fma2FUb3BpY01ldGFEYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRvIHRoZSB0b3BpYydzIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBhY2w6IEthZmthQWNsU3RhdGVtZW50O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIHRvcGljIGlzIGxvZyBjb21wYWN0ZWQgb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2dDb21wYWN0ZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE11c3Qgb25seSBiZSBwcm92aWRlZCBpZiAnaXNMb2dDb21wYWN0ZWQnIGlzICd0cnVlJy5cbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzPzogTG9nQ29tcGFjdGlvblByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgc2VydmljZSBsaW1pdHMgY2FuIGJlIGZvdW5kIGluIHRoZSB0b3BpYyBsaW1pdHMgY29uZmlndXJhdGlvbiBvZiB0aGUgdG9waWMgbWFuYWdlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vY29sbGFib3JhdGlvbi5tc2kuYXVkaS5jb20vc3Rhc2gvcHJvamVjdHMvUlNFVlRCVS9yZXBvcy90b3BpYy1tYW5hZ2VyL2Jyb3dzZS9jb25maWcvdG9waWMtc2VydmljZS1saW1pdHMueWFtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNWNFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgdG9waWM7IGhhcyB0byBtYXRjaCBwYXR0ZXJuIFtBLVphLXowLTkuLV0rXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZGVncmVlIG9mIHBhcmFsbGVsaXNtIG9mIHRoZSB0b3BpYzsgc2hvdWxkIGJlIGluY3JlYXNlZCBmb3JcbiAgICogbGFyZ2UgZXhwZWN0ZWQgbG9hZHMgKGUuZy4sIDI1IGZvciByaW8uYXNzZXQtaW90LWV2ZW50cykuXG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDEwIHBhcnRpdGlvbnMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IG51bWJlck9mUGFydGl0aW9uczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiByZXBsaWNhdGlvbiBvZiBtZXNzYWdlczsgaGFzIHRvIGJlIGJldHdlZW4gMSBhbmQgdGhlIG51bWJlciBvZiBicm9rZXJzIChjdXJyZW50bHkgMykuXG4gICAqIEBkZWZhdWx0VmFsdWUgM1xuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb25GYWN0b3I/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRpbWUgaG93IGxvbmcgbWVzc2FnZXMgYXJlIHJldGFpbmVkIG9uIEthZmthIGNsdXN0ZXI7XG4gICAqXG4gICAqIFdlIHJlY29tbWVuZCAzMCBkYXlzIGZvciBnZW5lcmFsIGV2ZW50cyBhbmQgNyBkYXlzIGZvciBzZW5zb3IgZXZlbnRzIGFuZCBvdGhlciBoaWdoLWxvYWQgY2FzZXMuXG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDMgdG8gMzAgZGF5cyBidXQgY2FuIGJlIGluY3JlYXNlZCB1cG9uIHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdFZhbHVlIDcgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byAnZmFsc2UsIHRoZSB0b3BpYydzIGRhdGEgd2lsbCBiZSBkZWxldGVkIG9uIEthZmthIDEwIGRheXMgYWZ0ZXIgc3RhY2sgZGVsZXRpb24uXG4gICAqIElmIHNldCB0byAndHJ1ZScsIGl0IHdpbGwgYmUgZGVsZXRlZCBpbW1lZGlhdGVseSBhZnRlciBzdGFjayBkZWxldGlvbi5cbiAgICogQGRlZmF1bHRWYWx1ZSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFudERlbGV0aW9uRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRhZGF0YSBvZiB0aGUgdG9waWMuXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YTogS2Fma2FUb3BpY01ldGFEYXRhVjQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdG8gdGhlIHRvcGljJ3MgZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGFjbDogS2Fma2FBY2xTdGF0ZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgdG9waWMgaXMgbG9nIGNvbXBhY3RlZCBvciBub3QuXG4gICAqL1xuICByZWFkb25seSBpc0xvZ0NvbXBhY3RlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogTXVzdCBvbmx5IGJlIHByb3ZpZGVkIGlmICdpc0xvZ0NvbXBhY3RlZCcgaXMgJ3RydWUnLlxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nQ29tcGFjdGlvblByb3BlcnRpZXM/OiBMb2dDb21wYWN0aW9uUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBUaGUgVG9waWNzIHRhcmdldCBhdWRpZW5jZVxuICovXG5leHBvcnQgdHlwZSBUb3BpY0F1ZGllbmNlID0gJ2NvbXBvbmVudC1pbnRlcm5hbCcgfCAnY29tcGFueS1pbnRlcm5hbCc7XG5cbi8qKlxuICogVGhlIFRvcGljcyByZWNvdmVyeSBwb2xpY3kgZ3VhcmFudGVlZCBieSB0aGUgcHJvZHVjZXJcbiAqL1xuZXhwb3J0IHR5cGUgVG9waWNSZWNvdmVyeVBvbGljeSA9ICdub25lJyB8ICdyZWNvdmVyYWJsZSc7XG5cbi8qKlxuICogQ29uc3RydWN0IHRvIGNyZWF0ZSBhIGthZmthIHRvcGljLlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgS2Fma2FUb3BpY1Y0fSBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBjbGFzcyBLYWZrYVRvcGljIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS2Fma2FUb3BpY1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuXG4gICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRGVwcmVjYXRpb24oJ0thZmthVG9waWMnLCBcIlVzZSAnS2Fma2FUb3BpY1Y0JyFcIik7XG5cbiAgICBuZXcgQ2ZuUmVzb3VyY2UodGhpcywgJ0thZmthVG9waWMnLCB7XG4gICAgICB0eXBlOiAnQ3VzdG9tOjpLYWZrYVRvcGljJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4ubWFwUHJvcGVydGllcyh0aGlzLCBwcm9wcyksXG4gICAgICAgIFZlcnNpb246ICczJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih2YWxpZGF0b3IocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCB0byBjcmVhdGUgYSBrYWZrYSB0b3BpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIEthZmthVG9waWNWNCBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEthZmthVG9waWNWNFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBDZm5SZXNvdXJjZSh0aGlzLCAnS2Fma2FUb3BpYycsIHtcbiAgICAgIHR5cGU6ICdDdXN0b206OkthZmthVG9waWMnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5tYXBQcm9wZXJ0aWVzKHRoaXMsIHByb3BzKSxcbiAgICAgICAgVmVyc2lvbjogJzQnLFxuICAgICAgICBBdWRpZW5jZTogcHJvcHMubWV0YWRhdGEuYXVkaWVuY2UsXG4gICAgICAgIFJlY292ZXJ5UG9saWN5OiBwcm9wcy5tZXRhZGF0YS5yZWNvdmVyeVBvbGljeSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih2YWxpZGF0b3IocHJvcHMpKTtcbiAgfVxufVxuXG5jb25zdCB2YWxpZGF0b3IgPSAocHJvcHM6IEthZmthVG9waWNQcm9wcykgPT4ge1xuICByZXR1cm4ge1xuICAgIHZhbGlkYXRlOiAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmICghcHJvcHMubmFtZS5tYXRjaCgvXltBLVphLXowLTkuLV0rJC8pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtuYW1lXTogZXhwZWN0aW5nIHRvcGljIG5hbWUgdG8gbWF0Y2ggdGhlIHJlZyBleHAgYFtBLVphLXowLTkuLV0rYC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLm51bWJlck9mUGFydGl0aW9ucykgfHwgcHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zIDwgMSkge1xuICAgICAgICByZXN1bHQucHVzaChgSW52YWxpZCBbbnVtYmVyT2ZQYXJ0aXRpb25zXTogZXhwZWN0aW5nIG51bWJlciBvZiBwYXJ0aXRpb25zIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlciBidXQgZ290ICR7cHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zfS5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocHJvcHMucmVwbGljYXRpb25GYWN0b3IpIHx8IHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yIDwgMSB8fCBwcm9wcy5yZXBsaWNhdGlvbkZhY3RvciA+IDMpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtyZXBsaWNhdGlvbkZhY3Rvcl06IGV4cGVjdGluZyBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLm1ldGFkYXRhLmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW21ldGFkYXRhXTogZXhwZWN0aW5nIFtldmVudHNdIHRvIGhhdmUgYXQgbGVhc3Qgb24gZWxlbWVudC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcm9wcy5pc0xvZ0NvbXBhY3RlZCAmJiBwcm9wcy5sb2dDb21wYWN0aW9uUHJvcGVydGllcykge1xuICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbG9nQ29tcGFjdGlvblByb3BlcnRpZXNdOiBsb2cgY29tcGFjdGlvbiBpcyBkaXNhYmxlZCBzbyBwcm9wZXJ0aWVzIG11c3QgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH07XG59O1xuXG5jb25zdCBtYXBQcm9wZXJ0aWVzID0gKHNjb3BlOiBJQ29uc3RydWN0LCBwcm9wczogS2Fma2FUb3BpY1Byb3BzIHwgS2Fma2FUb3BpY1Y0UHJvcHMpID0+IHtcbiAgY29uc3QgdGVhbUVtYWlsID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbUVtYWlsUGFyYW1ldGVyKHNjb3BlKS5zdHJpbmdWYWx1ZTtcblxuICBjb25zdCBldmVudHMgPSBwcm9wcy5tZXRhZGF0YS5ldmVudHMubWFwKHNvdXJjZSA9PiB7XG4gICAgbmV3IEthZmthRXZlbnRTcGVjKHNjb3BlLCBgJHtzb3VyY2UuZXZlbnROYW1lLnJlcGxhY2UoL1xcLi9nLCAnXycpfS1FdmVudFNwZWNgLCB7IHNvdXJjZSB9KTtcbiAgICByZXR1cm4gc291cmNlLmV2ZW50TmFtZTtcbiAgfSk7XG5cbiAgY29uc3QgZGVsZXRlUmV0ZW50aW9uRHVyYXRpb24gPSBwcm9wcy5sb2dDb21wYWN0aW9uUHJvcGVydGllcz8uZGVsZXRlUmV0ZW50aW9uID8/IER1cmF0aW9uLmRheXMoNyk7XG4gIGlmIChwcm9wcy5hY2wuZGVsZXRlICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5hY2wuZGVsZXRlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IGNkay5Bbm5vdGF0aW9ucy5vZihjZGsuU3RhY2sub2Yoc2NvcGUpKTtcbiAgICBhbm5vdGF0aW9ucy5hZGRXYXJuaW5nVjIoXG4gICAgICBgQHJpby1jbG91ZC9jZGstdjItY29uc3RydWN0cy9rYWZrYS9rYWZrYS10b3BpYy8ke3Byb3BzLm5hbWV9L0RlbGV0aW9uUG9saWN5YCxcbiAgICAgIGBcbiDinYwgWW91IGhhdmUgc2V0IFwiZGVsZXRlXCIgcGVybWlzc2lvbiBmb3Iga2Fma2EtdG9waWMgJHtwcm9wcy5uYW1lfS4gWW91IHByb2JhYmx5IGRvIG5vdCBuZWVkIHRoaXMuIFBsZWFzZSB1c2UgdGhpcyBvbmx5IGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIFNlcnZpY2VUb2tlbjogJ2Fybjphd3M6c25zOmV1LXdlc3QtMToxODY5OTM3NTc3MzQ6ZHAtdG9waWMtbWFuYWdlci1zbnMtdG9waWMnLFxuICAgIFRvcGljTmFtZTogcHJvcHMubmFtZSxcbiAgICBEZXNjcmlwdGlvbjogcHJvcHMubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgRXZlbnRzOiBldmVudHMsXG4gICAgTnVtYmVyT2ZQYXJ0aXRpb25zOiBwcm9wcy5udW1iZXJPZlBhcnRpdGlvbnMsXG4gICAgUmVwbGljYXRpb25GYWN0b3I6IHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yID8/IDMsXG4gICAgUmV0ZW50aW9uTXM6IChwcm9wcy5yZXRlbnRpb24gPz8gRHVyYXRpb24uZGF5cyg3KSkudG9NaWxsaXNlY29uZHMoKSxcbiAgICBEZWxldGVSZXRlbnRpb25NczogcHJvcHMuaXNMb2dDb21wYWN0ZWQgPyBkZWxldGVSZXRlbnRpb25EdXJhdGlvbi50b01pbGxpc2Vjb25kcygpIDogdW5kZWZpbmVkLFxuICAgIEluc3RhbnREZWxldGlvbkVuYWJsZWQ6IHByb3BzLmluc3RhbnREZWxldGlvbkVuYWJsZWQgPz8gZmFsc2UsXG4gICAgQ2xlYW51cFBvbGljeTogcHJvcHMuaXNMb2dDb21wYWN0ZWQgPyAnY29tcGFjdCcgOiAnZGVsZXRlJyxcbiAgICBUZWFtRW1haWw6IHRlYW1FbWFpbCxcbiAgICBBQ0w6IHtcbiAgICAgIFJlYWQ6IHByb3BzLmFjbC5yZWFkLFxuICAgICAgV3JpdGU6IHByb3BzLmFjbC53cml0ZSxcbiAgICAgIERlbGV0ZTogcHJvcHMuYWNsLmRlbGV0ZSxcbiAgICB9LFxuICB9O1xufTsiXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2Fma2EtdG9waWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2Fma2Eva2Fma2EtdG9waWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBaUU7QUFDakUsbUNBQW1DO0FBQ25DLDJDQUFtRDtBQUNuRCx5REFBMEU7QUFDMUUsMERBQXFEO0FBaU9yRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFFdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBR2pCLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUV6RSxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFVBQVUsRUFBRTtnQkFDVixHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dCQUM3QixPQUFPLEVBQUUsR0FBRzthQUNiO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7QUFqQkgsZ0NBa0JDOzs7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBRXpDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUNsQyxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFVBQVUsRUFBRTtnQkFDVixHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO2dCQUM3QixPQUFPLEVBQUUs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Q0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFO1FBQ25FLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzlGLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxLQUFLO1FBQzdELGFBQWEsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7UUFDMUQsU0FBUyxFQUFFLFNBQVM7UUFDcEIsR0FBRyxFQUFFO1lBQ0gsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUNwQixLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07U0FDekI7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIENmblJlc291cmNlLCBBbm5vdGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEthZmthRXZlbnRTcGVjLCBLYWZrYUV2ZW50U3BlY1NvdXJjZSB9IGZyb20gJy4va2Fma2EtZXZlbnQtc3BlYyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG4vKipcbiAqIFdyYXBwZXIgZm9yIGFsbCBtZXRhIGRhdGEgb2YgYSB0b3BpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYVRvcGljTWV0YURhdGEge1xuICAvKipcbiAgICogVGhlIGV2ZW50IHNwZWNzIG9mIHRoZSBldmVudHMgb24gdGhhdCB0b3BpY1xuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzOiBLYWZrYUV2ZW50U3BlY1NvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIGludGVudCBvZiB0aGUgdG9waWMuIFRoaXMgbWlnaHQgYmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV2ZW50cyBvbiB0aGF0IHRvcGljXG4gICAqIG9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2R1Y2VyIGFuZCB0aGUgY29udGV4dCBvZiB0aGUgZXZlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciBhbGwgbWV0YSBkYXRhIG9mIGEgdjQgdG9waWMgc3BlYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYVRvcGljTWV0YURhdGFWNCB7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgc3BlY3Mgb2YgdGhlIGV2ZW50cyBvbiB0aGF0IHRvcGljXG4gICAqL1xuICByZWFkb25seSBldmVudHM6IEthZmthRXZlbnRTcGVjU291cmNlW107XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgaW50ZW50IG9mIHRoZSB0b3BpYy4gVGhpcyBtaWdodCBiZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXZlbnRzIG9uIHRoYXQgdG9waWNcbiAgICogb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvZHVjZXIgYW5kIHRoZSBjb250ZXh0IG9mIHRoZSBldmVudHMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgYSB0b3BpYyBpcyBtZWFudCBmb3IgY29tcG9uZW50IGludGVybmFsIHVzYWdlIG9ubHkgb3IgaWYgb3RoZXIgc2VydmljZXMgY291bGRcbiAgICogdXNlIGl0IHRvby5cbiAgICovXG4gIHJlYWRvbmx5IGF1ZGllbmNlOiBUb3BpY0F1ZGllbmNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIHByb2R1Y2VyIHdpbGwgcmVzdG9yZSB0aGUgZGF0YSBpbiBjYXNlIG9mIGEgZGlzYXN0ZXIgb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3ZlcnlQb2xpY3k6IFRvcGljUmVjb3ZlcnlQb2xpY3k7XG59XG5cbi8qKlxuICogUmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoZSB0b3BpYy5cbiAqXG4gKiBzdHJpbmdzIGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIENOQU1FIG9mIHRoZSBjZXJ0aWZpY2F0ZSBvZiB0aGUgS2Fma2EgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYUFjbFN0YXRlbWVudCB7XG4gIC8qKlxuICAqIExpc3Qgb2YgY2xpZW50cyB0aGF0IHNob3VsZCBnZXQgd3JpdGUgcGVybWlzc2lvbnNcbiAgKi9cbiAgcmVhZG9ubHkgd3JpdGU6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGNsaWVudHMgdGhhdCBzaG91bGQgZ2V0IHJlYWQgcGVybWlzc2lvbnNcbiAgICovXG4gIHJlYWRvbmx5IHJlYWQ6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGNsaWVudHMgdGhhdCBzaG91bGQgZ2V0IGRlbGV0ZSBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQXR0ZW50aW9uOiBPbmx5IHVzZSBEZWxldGlvbiBwb2xpY3kgaWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIVxuICAgKiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBLU3RyZWFtIGFuZCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGRlbGV0ZSBtZXNzYWdlcyBhbmQgdGhlIHRvcGljLjxicj5cbiAgICogSWYgeW91IGp1c3Qgd2FudCB0byBcImRlbGV0ZVwiIGEgbWVzc2FnZSBvbiBhIGxvZyBjb21wYWN0ZWQgdG9waWMsIHlvdSBzaG91bGQgbm90IHNldCB0aGlzIHBlcm1pc3Npb24gYW5kIHNlbmQgYSB0b21ic3RvbmUgbWVzc2FnZSBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgYWxsIGxvZyBjb21wYWN0aW9uIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dDb21wYWN0aW9uUHJvcGVydGllcyB7XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgdG8gcmV0YWluIGRlbGV0ZSB0b21ic3RvbmUgbWFya2VycyBmb3IgbG9nIGNvbXBhY3RlZCB0b3BpY3M7XG4gICAqIFRoZSBzb2Z0IGxpbWl0IGlzIDEwIGRheXMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICogQGRlZmF1bHRWYWx1ZSAxIGRheVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlUmV0ZW50aW9uPzogRHVyYXRpb247XG59XG5cbi8qKlxuICogVGhlIGN1cnJlbnQgc2VydmljZSBsaW1pdHMgY2FuIGJlIGZvdW5kIGluIHRoZSB0b3BpYyBsaW1pdHMgY29uZmlndXJhdGlvbiBvZiB0aGUgdG9waWMgbWFuYWdlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vY29sbGFib3JhdGlvbi5tc2kuYXVkaS5jb20vc3Rhc2gvcHJvamVjdHMvUlNFVlRCVS9yZXBvcy90b3BpYy1tYW5hZ2VyL2Jyb3dzZS9jb25maWcvdG9waWMtc2VydmljZS1saW1pdHMueWFtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthZmthVG9waWNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIG5hbWUgb2YgdGhlIHRvcGljOyBoYXMgdG8gbWF0Y2ggcGF0dGVybiBbQS1aYS16MC05Li1dK1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiBwYXJhbGxlbGlzbSBvZiB0aGUgdG9waWM7IHNob3VsZCBiZSBpbmNyZWFzZWQgZm9yXG4gICAqIGxhcmdlIGV4cGVjdGVkIGxvYWRzIChlLmcuLCAyNSBmb3IgcmlvLmFzc2V0LWlvdC1ldmVudHMpLlxuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAxMCBwYXJ0aXRpb25zIGJ1dCBjYW4gYmUgaW5jcmVhc2VkIHVwb24gcmVxdWVzdHMuXG4gICAqL1xuICByZWFkb25seSBudW1iZXJPZlBhcnRpdGlvbnM6IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmaW5lcyBkZWdyZWUgb2YgcmVwbGljYXRpb24gb2YgbWVzc2FnZXM7IGhhcyB0byBiZSBiZXR3ZWVuIDEgYW5kIHRoZSBudW1iZXIgb2YgYnJva2VycyAoY3VycmVudGx5IDMpLlxuICAgKiBAZGVmYXVsdFZhbHVlIDNcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uRmFjdG9yPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lIGhvdyBsb25nIG1lc3NhZ2VzIGFyZSByZXRhaW5lZCBvbiBLYWZrYSBjbHVzdGVyO1xuICAgKlxuICAgKiBXZSByZWNvbW1lbmQgMzAgZGF5cyBmb3IgZ2VuZXJhbCBldmVudHMgYW5kIDcgZGF5cyBmb3Igc2Vuc29yIGV2ZW50cyBhbmQgb3RoZXIgaGlnaC1sb2FkIGNhc2VzLlxuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAzIHRvIDMwIGRheXMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICogQGRlZmF1bHRWYWx1ZSA3IGRheXNcbiAgICovXG4gIHJlYWRvbmx5IHJldGVudGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gJ2ZhbHNlLCB0aGUgdG9waWMncyBkYXRhIHdpbGwgYmUgZGVsZXRlZCBvbiBLYWZrYSAxMCBkYXlzIGFmdGVyIHN0YWNrIGRlbGV0aW9uLlxuICAgKiBJZiBzZXQgdG8gJ3RydWUnLCBpdCB3aWxsIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgc3RhY2sgZGVsZXRpb24uXG4gICAqIEBkZWZhdWx0VmFsdWUgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbnREZWxldGlvbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0YWRhdGEgb2YgdGhlIHRvcGljLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE6IEthZmthVG9waWNNZXRhRGF0YTtcblxuICAvKipcbiAgICogVGhlIHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0byB0aGUgdG9waWMncyBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNsOiBLYWZrYUFjbFN0YXRlbWVudDtcblxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSB0b3BpYyBpcyBsb2cgY29tcGFjdGVkIG9yIG5vdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9nQ29tcGFjdGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNdXN0IG9ubHkgYmUgcHJvdmlkZWQgaWYgJ2lzTG9nQ29tcGFjdGVkJyBpcyAndHJ1ZScuXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBsb2dDb21wYWN0aW9uUHJvcGVydGllcz86IExvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzO1xufVxuXG4vKipcbiAqIFRoZSBjdXJyZW50IHNlcnZpY2UgbGltaXRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdG9waWMgbGltaXRzIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHRvcGljIG1hbmFnZXIuXG4gKlxuICogQHNlZSBodHRwczovL2NvbGxhYm9yYXRpb24ubXNpLmF1ZGkuY29tL3N0YXNoL3Byb2plY3RzL1JTRVZUQlUvcmVwb3MvdG9waWMtbWFuYWdlci9icm93c2UvY29uZmlnL3RvcGljLXNlcnZpY2UtbGltaXRzLnlhbWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYWZrYVRvcGljVjRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIG5hbWUgb2YgdGhlIHRvcGljOyBoYXMgdG8gbWF0Y2ggcGF0dGVybiBbQS1aYS16MC05Li1dK1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRlZ3JlZSBvZiBwYXJhbGxlbGlzbSBvZiB0aGUgdG9waWM7IHNob3VsZCBiZSBpbmNyZWFzZWQgZm9yXG4gICAqIGxhcmdlIGV4cGVjdGVkIGxvYWRzIChlLmcuLCAyNSBmb3IgcmlvLmFzc2V0LWlvdC1ldmVudHMpLlxuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAxMCBwYXJ0aXRpb25zIGJ1dCBjYW4gYmUgaW5jcmVhc2VkIHVwb24gcmVxdWVzdHMuXG4gICAqL1xuICByZWFkb25seSBudW1iZXJPZlBhcnRpdGlvbnM6IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmaW5lcyBkZWdyZWUgb2YgcmVwbGljYXRpb24gb2YgbWVzc2FnZXM7IGhhcyB0byBiZSBiZXR3ZWVuIDEgYW5kIHRoZSBudW1iZXIgb2YgYnJva2VycyAoY3VycmVudGx5IDMpLlxuICAgKiBAZGVmYXVsdFZhbHVlIDNcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uRmFjdG9yPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaW1lIGhvdyBsb25nIG1lc3NhZ2VzIGFyZSByZXRhaW5lZCBvbiBLYWZrYSBjbHVzdGVyO1xuICAgKlxuICAgKiBXZSByZWNvbW1lbmQgMzAgZGF5cyBmb3IgZ2VuZXJhbCBldmVudHMgYW5kIDcgZGF5cyBmb3Igc2Vuc29yIGV2ZW50cyBhbmQgb3RoZXIgaGlnaC1sb2FkIGNhc2VzLlxuICAgKiBUaGUgc29mdCBsaW1pdCBpcyAzIHRvIDMwIGRheXMgYnV0IGNhbiBiZSBpbmNyZWFzZWQgdXBvbiByZXF1ZXN0cy5cbiAgICogQGRlZmF1bHRWYWx1ZSA3IGRheXNcbiAgICovXG4gIHJlYWRvbmx5IHJldGVudGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gJ2ZhbHNlLCB0aGUgdG9waWMncyBkYXRhIHdpbGwgYmUgZGVsZXRlZCBvbiBLYWZrYSAxMCBkYXlzIGFmdGVyIHN0YWNrIGRlbGV0aW9uLlxuICAgKiBJZiBzZXQgdG8gJ3RydWUnLCBpdCB3aWxsIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgc3RhY2sgZGVsZXRpb24uXG4gICAqIEBkZWZhdWx0VmFsdWUgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbnREZWxldGlvbkVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0YWRhdGEgb2YgdGhlIHRvcGljLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWRhdGE6IEthZmthVG9waWNNZXRhRGF0YVY0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRvIHRoZSB0b3BpYydzIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBhY2w6IEthZmthQWNsU3RhdGVtZW50O1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgdGhlIHRvcGljIGlzIGxvZyBjb21wYWN0ZWQgb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2dDb21wYWN0ZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE11c3Qgb25seSBiZSBwcm92aWRlZCBpZiAnaXNMb2dDb21wYWN0ZWQnIGlzICd0cnVlJy5cbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0NvbXBhY3Rpb25Qcm9wZXJ0aWVzPzogTG9nQ29tcGFjdGlvblByb3BlcnRpZXM7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgdG9waWMgc2hvdWxkIGJlIGJhY2tlZCB1cCBhdXRvbWF0aWNhbGx5IG9yIG5vdC5cbiAgICogSXQgY291bGQganVzdCBiZSBlbmFibGVkLCBpZiB0aGUgdG9waWMgaXMgY29tcGFjdGVkIGFuZCB0aGUgUmVjb3ZlcnlQb2xpY3kgaXMgJ3JlY292ZXJhYmxlJy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IG1hbmFnZWRCYWNrdXBFbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgVG9waWNzIHRhcmdldCBhdWRpZW5jZVxuICovXG5leHBvcnQgdHlwZSBUb3BpY0F1ZGllbmNlID0gJ2NvbXBvbmVudC1pbnRlcm5hbCcgfCAnY29tcGFueS1pbnRlcm5hbCc7XG5cbi8qKlxuICogVGhlIFRvcGljcyByZWNvdmVyeSBwb2xpY3kgZ3VhcmFudGVlZCBieSB0aGUgcHJvZHVjZXJcbiAqL1xuZXhwb3J0IHR5cGUgVG9waWNSZWNvdmVyeVBvbGljeSA9ICdub25lJyB8ICdyZWNvdmVyYWJsZSc7XG5cbi8qKlxuICogQ29uc3RydWN0IHRvIGNyZWF0ZSBhIGthZmthIHRvcGljLlxuICpcbiAqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgS2Fma2FUb3BpY1Y0fSBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBjbGFzcyBLYWZrYVRvcGljIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS2Fma2FUb3BpY1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuXG4gICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRGVwcmVjYXRpb24oJ0thZmthVG9waWMnLCBcIlVzZSAnS2Fma2FUb3BpY1Y0JyFcIik7XG5cbiAgICBuZXcgQ2ZuUmVzb3VyY2UodGhpcywgJ0thZmthVG9waWMnLCB7XG4gICAgICB0eXBlOiAnQ3VzdG9tOjpLYWZrYVRvcGljJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4ubWFwUHJvcGVydGllcyh0aGlzLCBwcm9wcyksXG4gICAgICAgIFZlcnNpb246ICczJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih2YWxpZGF0b3IocHJvcHMpKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCB0byBjcmVhdGUgYSBrYWZrYSB0b3BpYy5cbiAqL1xuZXhwb3J0IGNsYXNzIEthZmthVG9waWNWNCBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEthZmthVG9waWNWNFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBDZm5SZXNvdXJjZSh0aGlzLCAnS2Fma2FUb3BpYycsIHtcbiAgICAgIHR5cGU6ICdDdXN0b206OkthZmthVG9waWMnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5tYXBQcm9wZXJ0aWVzKHRoaXMsIHByb3BzKSxcbiAgICAgICAgVmVyc2lvbjogJzQnLFxuICAgICAgICBBdWRpZW5jZTogcHJvcHMubWV0YWRhdGEuYXVkaWVuY2UsXG4gICAgICAgIFJlY292ZXJ5UG9saWN5OiBwcm9wcy5tZXRhZGF0YS5yZWNvdmVyeVBvbGljeSxcbiAgICAgICAgTWFuYWdlZEJhY2t1cEVuYWJsZWQ6IHByb3BzLm1hbmFnZWRCYWNrdXBFbmFibGVkLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHZhbGlkYXRvcihwcm9wcykpO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKGJhY2t1cFByb3BlcnRpZXNWYWxpZGF0b3IocHJvcHMpKTtcbiAgfVxufVxuXG5jb25zdCB2YWxpZGF0b3IgPSAocHJvcHM6IEthZmthVG9waWNQcm9wcykgPT4ge1xuICByZXR1cm4ge1xuICAgIHZhbGlkYXRlOiAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmICghcHJvcHMubmFtZS5tYXRjaCgvXltBLVphLXowLTkuLV0rJC8pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtuYW1lXTogZXhwZWN0aW5nIHRvcGljIG5hbWUgdG8gbWF0Y2ggdGhlIHJlZyBleHAgYFtBLVphLXowLTkuLV0rYC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLm51bWJlck9mUGFydGl0aW9ucykgfHwgcHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zIDwgMSkge1xuICAgICAgICByZXN1bHQucHVzaChgSW52YWxpZCBbbnVtYmVyT2ZQYXJ0aXRpb25zXTogZXhwZWN0aW5nIG51bWJlciBvZiBwYXJ0aXRpb25zIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlciBidXQgZ290ICR7cHJvcHMubnVtYmVyT2ZQYXJ0aXRpb25zfS5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAoIU51bWJlci5pc0ludGVnZXIocHJvcHMucmVwbGljYXRpb25GYWN0b3IpIHx8IHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yIDwgMSB8fCBwcm9wcy5yZXBsaWNhdGlvbkZhY3RvciA+IDMpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKCdJbnZhbGlkIFtyZXBsaWNhdGlvbkZhY3Rvcl06IGV4cGVjdGluZyBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BzLm1ldGFkYXRhLmV2ZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW21ldGFkYXRhXTogZXhwZWN0aW5nIFtldmVudHNdIHRvIGhhdmUgYXQgbGVhc3Qgb24gZWxlbWVudC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcm9wcy5pc0xvZ0NvbXBhY3RlZCAmJiBwcm9wcy5sb2dDb21wYWN0aW9uUHJvcGVydGllcykge1xuICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbG9nQ29tcGFjdGlvblByb3BlcnRpZXNdOiBsb2cgY29tcGFjdGlvbiBpcyBkaXNhYmxlZCBzbyBwcm9wZXJ0aWVzIG11c3QgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gIH07XG59O1xuXG5jb25zdCBiYWNrdXBQcm9wZXJ0aWVzVmFsaWRhdG9yID0gKHByb3BzOiBLYWZrYVRvcGljVjRQcm9wcykgPT4ge1xuICByZXR1cm4ge1xuICAgIHZhbGlkYXRlOiAoKTogc3RyaW5nW10gPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmIChwcm9wcy5tYW5hZ2VkQmFja3VwRW5hYmxlZCAmJiAhcHJvcHMuaXNMb2dDb21wYWN0ZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJ0ludmFsaWQgW21hbmFnZWRCYWNrdXBFbmFibGVkXTogbWFuYWdlZCBiYWNrdXAgY2FuIG9ubHkgYmUgZW5hYmxlZCBmb3IgbG9nIGNvbXBhY3RlZCB0b3BpY3MuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wcy5tYW5hZ2VkQmFja3VwRW5hYmxlZCAmJiBwcm9wcy5tZXRhZGF0YS5yZWNvdmVyeVBvbGljeSAhPT0gJ3JlY292ZXJhYmxlJykge1xuICAgICAgICByZXN1bHQucHVzaCgnSW52YWxpZCBbbWFuYWdlZEJhY2t1cEVuYWJsZWRdOiB0b3BpY3Mgd2l0aCBtYW5hZ2VkQmFja3VwRW5hYmxlZCBoYXZlIHRvIGhhdmUgcmVjb3ZlcnkgcG9saWN5IFwicmVjb3ZlcmFibGVcIi4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9O1xuXG59O1xuXG5jb25zdCBtYXBQcm9wZXJ0aWVzID0gKHNjb3BlOiBJQ29uc3RydWN0LCBwcm9wczogS2Fma2FUb3BpY1Byb3BzIHwgS2Fma2FUb3BpY1Y0UHJvcHMpID0+IHtcbiAgY29uc3QgdGVhbUVtYWlsID0gUmlvTGFuZGluZ1pvbmUuZ2V0VGVhbUVtYWlsUGFyYW1ldGVyKHNjb3BlKS5zdHJpbmdWYWx1ZTtcblxuICBjb25zdCBldmVudHMgPSBwcm9wcy5tZXRhZGF0YS5ldmVudHMubWFwKHNvdXJjZSA9PiB7XG4gICAgbmV3IEthZmthRXZlbnRTcGVjKHNjb3BlLCBgJHtzb3VyY2UuZXZlbnROYW1lLnJlcGxhY2UoL1xcLi9nLCAnXycpfS1FdmVudFNwZWNgLCB7IHNvdXJjZSB9KTtcbiAgICByZXR1cm4gc291cmNlLmV2ZW50TmFtZTtcbiAgfSk7XG5cbiAgY29uc3QgZGVsZXRlUmV0ZW50aW9uRHVyYXRpb24gPSBwcm9wcy5sb2dDb21wYWN0aW9uUHJvcGVydGllcz8uZGVsZXRlUmV0ZW50aW9uID8/IER1cmF0aW9uLmRheXMoNyk7XG4gIGlmIChwcm9wcy5hY2wuZGVsZXRlICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5hY2wuZGVsZXRlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IGNkay5Bbm5vdGF0aW9ucy5vZihjZGsuU3RhY2sub2Yoc2NvcGUpKTtcbiAgICBhbm5vdGF0aW9ucy5hZGRXYXJuaW5nVjIoXG4gICAgICBgQHJpby1jbG91ZC9jZGstdjItY29uc3RydWN0cy9rYWZrYS9rYWZrYS10b3BpYy8ke3Byb3BzLm5hbWV9L0RlbGV0aW9uUG9saWN5YCxcbiAgICAgIGBcbiDinYwgWW91IGhhdmUgc2V0IFwiZGVsZXRlXCIgcGVybWlzc2lvbiBmb3Iga2Fma2EtdG9waWMgJHtwcm9wcy5uYW1lfS4gWW91IHByb2JhYmx5IGRvIG5vdCBuZWVkIHRoaXMuIFBsZWFzZSB1c2UgdGhpcyBvbmx5IGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy5cbmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIFNlcnZpY2VUb2tlbjogJ2Fybjphd3M6c25zOmV1LXdlc3QtMToxODY5OTM3NTc3MzQ6ZHAtdG9waWMtbWFuYWdlci1zbnMtdG9waWMnLFxuICAgIFRvcGljTmFtZTogcHJvcHMubmFtZSxcbiAgICBEZXNjcmlwdGlvbjogcHJvcHMubWV0YWRhdGEuZGVzY3JpcHRpb24sXG4gICAgRXZlbnRzOiBldmVudHMsXG4gICAgTnVtYmVyT2ZQYXJ0aXRpb25zOiBwcm9wcy5udW1iZXJPZlBhcnRpdGlvbnMsXG4gICAgUmVwbGljYXRpb25GYWN0b3I6IHByb3BzLnJlcGxpY2F0aW9uRmFjdG9yID8/IDMsXG4gICAgUmV0ZW50aW9uTXM6IChwcm9wcy5yZXRlbnRpb24gPz8gRHVyYXRpb24uZGF5cyg3KSkudG9NaWxsaXNlY29uZHMoKSxcbiAgICBEZWxldGVSZXRlbnRpb25NczogcHJvcHMuaXNMb2dDb21wYWN0ZWQgPyBkZWxldGVSZXRlbnRpb25EdXJhdGlvbi50b01pbGxpc2Vjb25kcygpIDogdW5kZWZpbmVkLFxuICAgIEluc3RhbnREZWxldGlvbkVuYWJsZWQ6IHByb3BzLmluc3RhbnREZWxldGlvbkVuYWJsZWQgPz8gZmFsc2UsXG4gICAgQ2xlYW51cFBvbGljeTogcHJvcHMuaXNMb2dDb21wYWN0ZWQgPyAnY29tcGFjdCcgOiAnZGVsZXRlJyxcbiAgICBUZWFtRW1haWw6IHRlYW1FbWFpbCxcbiAgICBBQ0w6IHtcbiAgICAgIFJlYWQ6IHByb3BzLmFjbC5yZWFkLFxuICAgICAgV3JpdGU6IHByb3BzLmFjbC53cml0ZSxcbiAgICAgIERlbGV0ZTogcHJvcHMuYWNsLmRlbGV0ZSxcbiAgICB9LFxuICB9O1xufTsiXX0=
package/mkdocs.yaml ADDED
@@ -0,0 +1,12 @@
1
+ site_name: 'RIO Kafka backup documentation'
2
+
3
+ nav:
4
+ - "User Guide": index.md
5
+ - "Developer Guide": developers-readme.md
6
+ - "API Docs": API.md
7
+ - "Changelog": changelog.md
8
+ - "CDK v1 Migration Guide": migration_guide.md
9
+ - "Contribution": contribution.md
10
+
11
+ plugins:
12
+ - techdocs-core
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "main": "lib/index.js",
17
17
  "license": "Apache-2.0",
18
- "version": "6.0.1",
18
+ "version": "6.2.1",
19
19
  "types": "lib/index.d.ts",
20
20
  "stability": "stable",
21
21
  "exports": {
@@ -40,7 +40,7 @@
40
40
  "compareUrlFormat": "{{host}}/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2F{{previousTag}}&sourceBranch=refs%2Ftags%2F{{currentTag}}",
41
41
  "issueUrlFormat": "https://jira.collaboration-man.com/browse/{{id}}",
42
42
  "scripts": {
43
- "postbump": "git add API.md"
43
+ "postbump": "git add docs/API.md"
44
44
  }
45
45
  },
46
46
  "scripts": {
@@ -51,8 +51,9 @@
51
51
  "bump": "commit-and-tag-version -a",
52
52
  "test": "jest --coverage",
53
53
  "test:watch": "jest --watch",
54
- "eslint": "eslint --ext .ts,.tsx --fix --no-error-on-unmatched-pattern src test",
55
- "docgen": "jsii-docgen",
54
+ "eslint": "eslint --ext .ts,.tsx --no-error-on-unmatched-pattern src test",
55
+ "eslint-fix": "eslint --ext .ts,.tsx --fix --no-error-on-unmatched-pattern src test",
56
+ "docgen": "jsii-docgen -o ./docs/API.md",
56
57
  "cdk": "cdk",
57
58
  "release:check": "node release-commit-check.js",
58
59
  "release:build": "npm run build && npm run docgen && npm run bump",
@@ -99,6 +100,9 @@
99
100
  "@datadog/datadog-api-client": "^1.24.0",
100
101
  "js-yaml": "~4.1.0"
101
102
  },
103
+ "optionalDependencies": {
104
+ "@pepperize/cdk-autoscaling-gitlab-runner": "^0.2.613"
105
+ },
102
106
  "bundledDependencies": [
103
107
  "js-yaml"
104
108
  ],
package/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "6.0.1"
2
+ "version": "6.2.1"
3
3
  }
File without changes