@aws-solutions-constructs/aws-apigateway-dynamodb 2.30.0 → 2.31.0

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,406 @@
1
+ {
2
+ "Description": "Integration Test for aws-apigateway-dynamodb",
3
+ "Resources": {
4
+ "existingtableE51CCC93": {
5
+ "Type": "AWS::DynamoDB::Table",
6
+ "Properties": {
7
+ "KeySchema": [
8
+ {
9
+ "AttributeName": "id",
10
+ "KeyType": "HASH"
11
+ }
12
+ ],
13
+ "AttributeDefinitions": [
14
+ {
15
+ "AttributeName": "id",
16
+ "AttributeType": "S"
17
+ }
18
+ ],
19
+ "BillingMode": "PAY_PER_REQUEST",
20
+ "PointInTimeRecoverySpecification": {
21
+ "PointInTimeRecoveryEnabled": true
22
+ },
23
+ "SSESpecification": {
24
+ "SSEEnabled": true
25
+ }
26
+ },
27
+ "UpdateReplacePolicy": "Retain",
28
+ "DeletionPolicy": "Retain"
29
+ },
30
+ "testapigatewaydynamodbadditionalrequesttemplatesApiAccessLogGroupAF75D750": {
31
+ "Type": "AWS::Logs::LogGroup",
32
+ "UpdateReplacePolicy": "Retain",
33
+ "DeletionPolicy": "Retain",
34
+ "Metadata": {
35
+ "cfn_nag": {
36
+ "rules_to_suppress": [
37
+ {
38
+ "id": "W86",
39
+ "reason": "Retention period for CloudWatchLogs LogGroups are set to 'Never Expire' to preserve customer data indefinitely"
40
+ },
41
+ {
42
+ "id": "W84",
43
+ "reason": "By default CloudWatchLogs LogGroups data is encrypted using the CloudWatch server-side encryption keys (AWS Managed Keys)"
44
+ }
45
+ ]
46
+ }
47
+ }
48
+ },
49
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C": {
50
+ "Type": "AWS::ApiGateway::RestApi",
51
+ "Properties": {
52
+ "EndpointConfiguration": {
53
+ "Types": [
54
+ "EDGE"
55
+ ]
56
+ },
57
+ "Name": "RestApi"
58
+ }
59
+ },
60
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiDeployment0AE7C47761b8949a9247c12493c939f05e630c9d": {
61
+ "Type": "AWS::ApiGateway::Deployment",
62
+ "Properties": {
63
+ "RestApiId": {
64
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C"
65
+ },
66
+ "Description": "Automatically created by the RestApi construct"
67
+ },
68
+ "DependsOn": [
69
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiidGET05129D15",
70
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiidA77CCE90"
71
+ ],
72
+ "Metadata": {
73
+ "cfn_nag": {
74
+ "rules_to_suppress": [
75
+ {
76
+ "id": "W45",
77
+ "reason": "ApiGateway has AccessLogging enabled in AWS::ApiGateway::Stage resource, but cfn_nag checkes for it in AWS::ApiGateway::Deployment resource"
78
+ }
79
+ ]
80
+ }
81
+ }
82
+ },
83
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiDeploymentStageprod33ED5D23": {
84
+ "Type": "AWS::ApiGateway::Stage",
85
+ "Properties": {
86
+ "RestApiId": {
87
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C"
88
+ },
89
+ "AccessLogSetting": {
90
+ "DestinationArn": {
91
+ "Fn::GetAtt": [
92
+ "testapigatewaydynamodbadditionalrequesttemplatesApiAccessLogGroupAF75D750",
93
+ "Arn"
94
+ ]
95
+ },
96
+ "Format": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"
97
+ },
98
+ "DeploymentId": {
99
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApiDeployment0AE7C47761b8949a9247c12493c939f05e630c9d"
100
+ },
101
+ "MethodSettings": [
102
+ {
103
+ "DataTraceEnabled": false,
104
+ "HttpMethod": "*",
105
+ "LoggingLevel": "INFO",
106
+ "ResourcePath": "/*"
107
+ }
108
+ ],
109
+ "StageName": "prod",
110
+ "TracingEnabled": true
111
+ }
112
+ },
113
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiidA77CCE90": {
114
+ "Type": "AWS::ApiGateway::Resource",
115
+ "Properties": {
116
+ "ParentId": {
117
+ "Fn::GetAtt": [
118
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C",
119
+ "RootResourceId"
120
+ ]
121
+ },
122
+ "PathPart": "{id}",
123
+ "RestApiId": {
124
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C"
125
+ }
126
+ }
127
+ },
128
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiidGET05129D15": {
129
+ "Type": "AWS::ApiGateway::Method",
130
+ "Properties": {
131
+ "HttpMethod": "GET",
132
+ "ResourceId": {
133
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApiidA77CCE90"
134
+ },
135
+ "RestApiId": {
136
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C"
137
+ },
138
+ "AuthorizationType": "AWS_IAM",
139
+ "Integration": {
140
+ "Credentials": {
141
+ "Fn::GetAtt": [
142
+ "testapigatewaydynamodbadditionalrequesttemplatesapigatewayroleFDAECAC6",
143
+ "Arn"
144
+ ]
145
+ },
146
+ "IntegrationHttpMethod": "POST",
147
+ "IntegrationResponses": [
148
+ {
149
+ "StatusCode": "200"
150
+ },
151
+ {
152
+ "ResponseTemplates": {
153
+ "text/html": "Error"
154
+ },
155
+ "SelectionPattern": "500",
156
+ "StatusCode": "500"
157
+ }
158
+ ],
159
+ "PassthroughBehavior": "NEVER",
160
+ "RequestParameters": {
161
+ "integration.request.header.Content-Type": "'application/json'"
162
+ },
163
+ "RequestTemplates": {
164
+ "application/json": {
165
+ "Fn::Join": [
166
+ "",
167
+ [
168
+ "{ \"TableName\": \"",
169
+ {
170
+ "Ref": "existingtableE51CCC93"
171
+ },
172
+ "\", \"KeyConditionExpression\": \"id = :v1\", \"ExpressionAttributeValues\": { \":v1\": { \"S\": \"$input.params('id')\" } } }"
173
+ ]
174
+ ]
175
+ }
176
+ },
177
+ "Type": "AWS",
178
+ "Uri": {
179
+ "Fn::Join": [
180
+ "",
181
+ [
182
+ "arn:",
183
+ {
184
+ "Ref": "AWS::Partition"
185
+ },
186
+ ":apigateway:",
187
+ {
188
+ "Ref": "AWS::Region"
189
+ },
190
+ ":dynamodb:action/Query"
191
+ ]
192
+ ]
193
+ }
194
+ },
195
+ "MethodResponses": [
196
+ {
197
+ "ResponseParameters": {
198
+ "method.response.header.Content-Type": true
199
+ },
200
+ "StatusCode": "200"
201
+ },
202
+ {
203
+ "ResponseParameters": {
204
+ "method.response.header.Content-Type": true
205
+ },
206
+ "StatusCode": "500"
207
+ }
208
+ ]
209
+ }
210
+ },
211
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiUsagePlan905D10C7": {
212
+ "Type": "AWS::ApiGateway::UsagePlan",
213
+ "Properties": {
214
+ "ApiStages": [
215
+ {
216
+ "ApiId": {
217
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C"
218
+ },
219
+ "Stage": {
220
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApiDeploymentStageprod33ED5D23"
221
+ },
222
+ "Throttle": {}
223
+ }
224
+ ]
225
+ }
226
+ },
227
+ "testapigatewaydynamodbadditionalrequesttemplatesLambdaRestApiCloudWatchRole51265771": {
228
+ "Type": "AWS::IAM::Role",
229
+ "Properties": {
230
+ "AssumeRolePolicyDocument": {
231
+ "Statement": [
232
+ {
233
+ "Action": "sts:AssumeRole",
234
+ "Effect": "Allow",
235
+ "Principal": {
236
+ "Service": "apigateway.amazonaws.com"
237
+ }
238
+ }
239
+ ],
240
+ "Version": "2012-10-17"
241
+ },
242
+ "Policies": [
243
+ {
244
+ "PolicyDocument": {
245
+ "Statement": [
246
+ {
247
+ "Action": [
248
+ "logs:CreateLogGroup",
249
+ "logs:CreateLogStream",
250
+ "logs:DescribeLogGroups",
251
+ "logs:DescribeLogStreams",
252
+ "logs:PutLogEvents",
253
+ "logs:GetLogEvents",
254
+ "logs:FilterLogEvents"
255
+ ],
256
+ "Effect": "Allow",
257
+ "Resource": {
258
+ "Fn::Join": [
259
+ "",
260
+ [
261
+ "arn:",
262
+ {
263
+ "Ref": "AWS::Partition"
264
+ },
265
+ ":logs:",
266
+ {
267
+ "Ref": "AWS::Region"
268
+ },
269
+ ":",
270
+ {
271
+ "Ref": "AWS::AccountId"
272
+ },
273
+ ":*"
274
+ ]
275
+ ]
276
+ }
277
+ }
278
+ ],
279
+ "Version": "2012-10-17"
280
+ },
281
+ "PolicyName": "LambdaRestApiCloudWatchRolePolicy"
282
+ }
283
+ ]
284
+ }
285
+ },
286
+ "testapigatewaydynamodbadditionalrequesttemplatesLambdaRestApiAccount8891474D": {
287
+ "Type": "AWS::ApiGateway::Account",
288
+ "Properties": {
289
+ "CloudWatchRoleArn": {
290
+ "Fn::GetAtt": [
291
+ "testapigatewaydynamodbadditionalrequesttemplatesLambdaRestApiCloudWatchRole51265771",
292
+ "Arn"
293
+ ]
294
+ }
295
+ },
296
+ "DependsOn": [
297
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C"
298
+ ]
299
+ },
300
+ "testapigatewaydynamodbadditionalrequesttemplatesapigatewayroleFDAECAC6": {
301
+ "Type": "AWS::IAM::Role",
302
+ "Properties": {
303
+ "AssumeRolePolicyDocument": {
304
+ "Statement": [
305
+ {
306
+ "Action": "sts:AssumeRole",
307
+ "Effect": "Allow",
308
+ "Principal": {
309
+ "Service": "apigateway.amazonaws.com"
310
+ }
311
+ }
312
+ ],
313
+ "Version": "2012-10-17"
314
+ }
315
+ }
316
+ },
317
+ "testapigatewaydynamodbadditionalrequesttemplatesapigatewayroleDefaultPolicy4C47B35E": {
318
+ "Type": "AWS::IAM::Policy",
319
+ "Properties": {
320
+ "PolicyDocument": {
321
+ "Statement": [
322
+ {
323
+ "Action": "dynamodb:Query",
324
+ "Effect": "Allow",
325
+ "Resource": {
326
+ "Fn::GetAtt": [
327
+ "existingtableE51CCC93",
328
+ "Arn"
329
+ ]
330
+ }
331
+ }
332
+ ],
333
+ "Version": "2012-10-17"
334
+ },
335
+ "PolicyName": "testapigatewaydynamodbadditionalrequesttemplatesapigatewayroleDefaultPolicy4C47B35E",
336
+ "Roles": [
337
+ {
338
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesapigatewayroleFDAECAC6"
339
+ }
340
+ ]
341
+ }
342
+ }
343
+ },
344
+ "Outputs": {
345
+ "testapigatewaydynamodbadditionalrequesttemplatesRestApiEndpoint855E7762": {
346
+ "Value": {
347
+ "Fn::Join": [
348
+ "",
349
+ [
350
+ "https://",
351
+ {
352
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApi03F6484C"
353
+ },
354
+ ".execute-api.",
355
+ {
356
+ "Ref": "AWS::Region"
357
+ },
358
+ ".",
359
+ {
360
+ "Ref": "AWS::URLSuffix"
361
+ },
362
+ "/",
363
+ {
364
+ "Ref": "testapigatewaydynamodbadditionalrequesttemplatesRestApiDeploymentStageprod33ED5D23"
365
+ },
366
+ "/"
367
+ ]
368
+ ]
369
+ }
370
+ }
371
+ },
372
+ "Parameters": {
373
+ "BootstrapVersion": {
374
+ "Type": "AWS::SSM::Parameter::Value<String>",
375
+ "Default": "/cdk-bootstrap/hnb659fds/version",
376
+ "Description": "Version of the CDK Bootstrap resources in this environment, automatically retrieved from SSM Parameter Store. [cdk:skip]"
377
+ }
378
+ },
379
+ "Rules": {
380
+ "CheckBootstrapVersion": {
381
+ "Assertions": [
382
+ {
383
+ "Assert": {
384
+ "Fn::Not": [
385
+ {
386
+ "Fn::Contains": [
387
+ [
388
+ "1",
389
+ "2",
390
+ "3",
391
+ "4",
392
+ "5"
393
+ ],
394
+ {
395
+ "Ref": "BootstrapVersion"
396
+ }
397
+ ]
398
+ }
399
+ ]
400
+ },
401
+ "AssertDescription": "CDK bootstrap stack version 6 required. Please run 'cdk bootstrap' with a recent version of the CDK CLI."
402
+ }
403
+ ]
404
+ }
405
+ }
406
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ // Imports
16
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
17
+ const lib_1 = require("../lib");
18
+ const core_1 = require("@aws-solutions-constructs/core");
19
+ const dynamodb = require("aws-cdk-lib/aws-dynamodb");
20
+ // Setup
21
+ const app = new aws_cdk_lib_1.App();
22
+ const stack = new aws_cdk_lib_1.Stack(app, core_1.generateIntegStackName(__filename));
23
+ stack.templateOptions.description = 'Integration Test for aws-apigateway-dynamodb';
24
+ const partitionKeyName = 'id';
25
+ const existingTableObj = new dynamodb.Table(stack, 'existing-table', {
26
+ partitionKey: {
27
+ name: partitionKeyName,
28
+ type: dynamodb.AttributeType.STRING,
29
+ },
30
+ pointInTimeRecovery: true,
31
+ encryption: dynamodb.TableEncryption.AWS_MANAGED,
32
+ billingMode: dynamodb.BillingMode.PAY_PER_REQUEST
33
+ });
34
+ new lib_1.ApiGatewayToDynamoDB(stack, 'test-api-gateway-dynamodb-additional-request-templates', {
35
+ existingTableObj,
36
+ allowCreateOperation: true,
37
+ createIntegrationResponses: [
38
+ {
39
+ statusCode: '200',
40
+ responseTemplates: {
41
+ 'text/html': 'OK'
42
+ }
43
+ }
44
+ ]
45
+ });
46
+ // Synth
47
+ app.synth();
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcuY3VzdG9tLWludGVncmF0aW9uLXJlc3BvbnNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImludGVnLmN1c3RvbS1pbnRlZ3JhdGlvbi1yZXNwb25zZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDViw2Q0FBeUM7QUFDekMsZ0NBQThDO0FBQzlDLHlEQUF3RTtBQUN4RSxxREFBcUQ7QUFFckQsUUFBUTtBQUNSLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssQ0FBQyxHQUFHLEVBQUUsNkJBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNqRSxLQUFLLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyw4Q0FBOEMsQ0FBQztBQUVuRixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUU5QixNQUFNLGdCQUFnQixHQUFHLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7SUFDbkUsWUFBWSxFQUFFO1FBQ1osSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixJQUFJLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNO0tBQ3BDO0lBQ0QsbUJBQW1CLEVBQUUsSUFBSTtJQUN6QixVQUFVLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXO0lBQ2hELFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLGVBQWU7Q0FDbEQsQ0FBQyxDQUFDO0FBRUgsSUFBSSwwQkFBb0IsQ0FBQyxLQUFLLEVBQUUsd0RBQXdELEVBQUU7SUFDeEYsZ0JBQWdCO0lBQ2hCLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsMEJBQTBCLEVBQUU7UUFDMUI7WUFDRSxVQUFVLEVBQUUsS0FBSztZQUNqQixpQkFBaUIsRUFBRTtnQkFDakIsV0FBVyxFQUFFLElBQUk7YUFDbEI7U0FDRjtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsUUFBUTtBQUNSLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEFwaUdhdGV3YXlUb0R5bmFtb0RCIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5cbi8vIFNldHVwXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsIGdlbmVyYXRlSW50ZWdTdGFja05hbWUoX19maWxlbmFtZSkpO1xuc3RhY2sudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uID0gJ0ludGVncmF0aW9uIFRlc3QgZm9yIGF3cy1hcGlnYXRld2F5LWR5bmFtb2RiJztcblxuY29uc3QgcGFydGl0aW9uS2V5TmFtZSA9ICdpZCc7XG5cbmNvbnN0IGV4aXN0aW5nVGFibGVPYmogPSBuZXcgZHluYW1vZGIuVGFibGUoc3RhY2ssICdleGlzdGluZy10YWJsZScsIHtcbiAgcGFydGl0aW9uS2V5OiB7XG4gICAgbmFtZTogcGFydGl0aW9uS2V5TmFtZSxcbiAgICB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyxcbiAgfSxcbiAgcG9pbnRJblRpbWVSZWNvdmVyeTogdHJ1ZSxcbiAgZW5jcnlwdGlvbjogZHluYW1vZGIuVGFibGVFbmNyeXB0aW9uLkFXU19NQU5BR0VELFxuICBiaWxsaW5nTW9kZTogZHluYW1vZGIuQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUXG59KTtcblxubmV3IEFwaUdhdGV3YXlUb0R5bmFtb0RCKHN0YWNrLCAndGVzdC1hcGktZ2F0ZXdheS1keW5hbW9kYi1hZGRpdGlvbmFsLXJlcXVlc3QtdGVtcGxhdGVzJywge1xuICBleGlzdGluZ1RhYmxlT2JqLFxuICBhbGxvd0NyZWF0ZU9wZXJhdGlvbjogdHJ1ZSxcbiAgY3JlYXRlSW50ZWdyYXRpb25SZXNwb25zZXM6IFtcbiAgICB7XG4gICAgICBzdGF0dXNDb2RlOiAnMjAwJyxcbiAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgICd0ZXh0L2h0bWwnOiAnT0snXG4gICAgICB9XG4gICAgfVxuICBdXG59KTtcblxuLy8gU3ludGhcbmFwcC5zeW50aCgpOyJdfQ==