@aws-solutions-constructs/aws-apigateway-dynamodb 2.91.0 → 2.92.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.
- package/.jsii +30 -4
- package/README.adoc +1 -1
- package/lib/index.d.ts +9 -4
- package/lib/index.js +109 -94
- package/package.json +6 -6
package/.jsii
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"url": "https://aws.amazon.com"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@aws-solutions-constructs/core": "2.
|
|
12
|
-
"aws-cdk-lib": "^2.
|
|
11
|
+
"@aws-solutions-constructs/core": "2.92.1",
|
|
12
|
+
"aws-cdk-lib": "^2.212.0",
|
|
13
13
|
"constructs": "^10.0.0"
|
|
14
14
|
},
|
|
15
15
|
"dependencyClosure": {
|
|
@@ -446,6 +446,19 @@
|
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
448
|
},
|
|
449
|
+
"aws-cdk-lib.aws_arcregionswitch": {
|
|
450
|
+
"targets": {
|
|
451
|
+
"dotnet": {
|
|
452
|
+
"package": "Amazon.CDK.AWS.ARCRegionSwitch"
|
|
453
|
+
},
|
|
454
|
+
"java": {
|
|
455
|
+
"package": "software.amazon.awscdk.services.arcregionswitch"
|
|
456
|
+
},
|
|
457
|
+
"python": {
|
|
458
|
+
"module": "aws_cdk.aws_arcregionswitch"
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
},
|
|
449
462
|
"aws-cdk-lib.aws_arczonalshift": {
|
|
450
463
|
"targets": {
|
|
451
464
|
"dotnet": {
|
|
@@ -2683,6 +2696,19 @@
|
|
|
2683
2696
|
}
|
|
2684
2697
|
}
|
|
2685
2698
|
},
|
|
2699
|
+
"aws-cdk-lib.aws_observabilityadmin": {
|
|
2700
|
+
"targets": {
|
|
2701
|
+
"dotnet": {
|
|
2702
|
+
"package": "Amazon.CDK.AWS.ObservabilityAdmin"
|
|
2703
|
+
},
|
|
2704
|
+
"java": {
|
|
2705
|
+
"package": "software.amazon.awscdk.services.observabilityadmin"
|
|
2706
|
+
},
|
|
2707
|
+
"python": {
|
|
2708
|
+
"module": "aws_cdk.aws_observabilityadmin"
|
|
2709
|
+
}
|
|
2710
|
+
}
|
|
2711
|
+
},
|
|
2686
2712
|
"aws-cdk-lib.aws_odb": {
|
|
2687
2713
|
"targets": {
|
|
2688
2714
|
"dotnet": {
|
|
@@ -4753,6 +4779,6 @@
|
|
|
4753
4779
|
"symbolId": "lib/index:ApiGatewayToDynamoDBProps"
|
|
4754
4780
|
}
|
|
4755
4781
|
},
|
|
4756
|
-
"version": "2.
|
|
4757
|
-
"fingerprint": "
|
|
4782
|
+
"version": "2.92.1",
|
|
4783
|
+
"fingerprint": "zBDtVKtypO5mY34zX0HvcugYpsW7bOsSZ6XAmfozFN8="
|
|
4758
4784
|
}
|
package/README.adoc
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
:info_title: aws-apigateway-dynamodb
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
image:https://img.shields.io/badge/
|
|
10
|
+
image:https://img.shields.io/badge/cfn--resources-stable-success.svg?style=for-the-badge[Stability:Stable]
|
|
11
11
|
|
|
12
12
|
____
|
|
13
13
|
All classes are under active development and subject to non-backward
|
package/lib/index.d.ts
CHANGED
|
@@ -287,13 +287,18 @@ export declare class ApiGatewayToDynamoDB extends Construct {
|
|
|
287
287
|
* @access public
|
|
288
288
|
*/
|
|
289
289
|
constructor(scope: Construct, id: string, props: ApiGatewayToDynamoDBProps);
|
|
290
|
+
private ImplementDeleteOperation;
|
|
291
|
+
private ImplementUpdateOperation;
|
|
292
|
+
private ImplementReadOperation;
|
|
293
|
+
private ImplementCreateOperation;
|
|
294
|
+
private CheckAllResutsProps;
|
|
290
295
|
private CheckReadRequestProps;
|
|
291
296
|
private CheckUpdateRequestProps;
|
|
292
297
|
private CheckDeleteRequestProps;
|
|
293
298
|
private CheckCreateRequestProps;
|
|
294
|
-
private
|
|
295
|
-
private
|
|
296
|
-
private
|
|
297
|
-
private
|
|
299
|
+
private CreateOperationRequired;
|
|
300
|
+
private ReadOperationRequired;
|
|
301
|
+
private UpdateOperationRequired;
|
|
302
|
+
private DeleteOperationRequired;
|
|
298
303
|
private addActionToPolicy;
|
|
299
304
|
}
|
package/lib/index.js
CHANGED
|
@@ -24,22 +24,7 @@ class ApiGatewayToDynamoDB extends constructs_1.Construct {
|
|
|
24
24
|
super(scope, id);
|
|
25
25
|
defaults.CheckDynamoDBProps(props);
|
|
26
26
|
defaults.CheckApiProps(props);
|
|
27
|
-
|
|
28
|
-
throw new Error(`The 'allowCreateOperation' property must be set to true when setting any of the following: ` +
|
|
29
|
-
`'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses'`);
|
|
30
|
-
}
|
|
31
|
-
if (this.CheckReadRequestProps(props)) {
|
|
32
|
-
throw new Error(`The 'allowReadOperation' property must be set to true or undefined when setting any of the following: ` +
|
|
33
|
-
`'readRequestTemplate', 'additionalReadRequestTemplates', 'readIntegrationResponses'`);
|
|
34
|
-
}
|
|
35
|
-
if (this.CheckUpdateRequestProps(props)) {
|
|
36
|
-
throw new Error(`The 'allowUpdateOperation' property must be set to true when setting any of the following: ` +
|
|
37
|
-
`'updateRequestTemplate', 'additionalUpdateRequestTemplates', 'updateIntegrationResponses'`);
|
|
38
|
-
}
|
|
39
|
-
if (this.CheckDeleteRequestProps(props)) {
|
|
40
|
-
throw new Error(`The 'allowDeleteOperation' property must be set to true when setting any of the following: ` +
|
|
41
|
-
`'deleteRequestTemplate', 'additionalDeleteRequestTemplates', 'deleteIntegrationResponses'`);
|
|
42
|
-
}
|
|
27
|
+
this.CheckAllResutsProps(props);
|
|
43
28
|
// Set the default props for DynamoDB table
|
|
44
29
|
const dynamoTableProps = defaults.consolidateProps(defaults.GetDefaultTableProps(props.dynamoTableProps), props.dynamoTableProps);
|
|
45
30
|
let partitionKeyName = dynamoTableProps.partitionKey.name;
|
|
@@ -68,71 +53,25 @@ class ApiGatewayToDynamoDB extends constructs_1.Construct {
|
|
|
68
53
|
const apiGatewayResource = this.apiGateway.root.addResource("{" + resourceName + "}");
|
|
69
54
|
// Setup API Gateway Method
|
|
70
55
|
// Create
|
|
71
|
-
if (this.
|
|
72
|
-
|
|
73
|
-
const createRequestTemplate = props.createRequestTemplate.replace("${Table}", this.dynamoTable.tableName);
|
|
74
|
-
this.addActionToPolicy("dynamodb:PutItem");
|
|
75
|
-
const createMethodOptions = props.createMethodResponses ? { methodResponses: props.createMethodResponses } : {};
|
|
76
|
-
defaults.addProxyMethodToApiResource({
|
|
77
|
-
service: "dynamodb",
|
|
78
|
-
action: "PutItem",
|
|
79
|
-
apiGatewayRole: this.apiGatewayRole,
|
|
80
|
-
apiMethod: "POST",
|
|
81
|
-
apiResource: this.apiGateway.root,
|
|
82
|
-
requestTemplate: createRequestTemplate,
|
|
83
|
-
additionalRequestTemplates: props.additionalCreateRequestTemplates,
|
|
84
|
-
integrationResponses: props.createIntegrationResponses,
|
|
85
|
-
methodOptions: createMethodOptions
|
|
86
|
-
});
|
|
56
|
+
if (this.CreateOperationRequired(props)) {
|
|
57
|
+
this.ImplementCreateOperation(props);
|
|
87
58
|
}
|
|
88
59
|
// Read
|
|
89
|
-
if (this.
|
|
90
|
-
|
|
91
|
-
`{ \
|
|
92
|
-
"TableName": "${this.dynamoTable.tableName}", \
|
|
93
|
-
"KeyConditionExpression": "${partitionKeyName} = :v1", \
|
|
94
|
-
"ExpressionAttributeValues": { \
|
|
95
|
-
":v1": { \
|
|
96
|
-
"S": "$input.params('${resourceName}')" \
|
|
97
|
-
} \
|
|
98
|
-
} \
|
|
99
|
-
}`;
|
|
100
|
-
this.addActionToPolicy("dynamodb:Query");
|
|
101
|
-
const readMethodOptions = props.readMethodResponses ? { methodResponses: props.readMethodResponses } : {};
|
|
102
|
-
defaults.addProxyMethodToApiResource({
|
|
103
|
-
service: "dynamodb",
|
|
104
|
-
action: "Query",
|
|
105
|
-
apiGatewayRole: this.apiGatewayRole,
|
|
106
|
-
apiMethod: "GET",
|
|
107
|
-
apiResource: apiGatewayResource,
|
|
108
|
-
requestTemplate: readRequestTemplate,
|
|
109
|
-
additionalRequestTemplates: props.additionalReadRequestTemplates,
|
|
110
|
-
integrationResponses: props.readIntegrationResponses,
|
|
111
|
-
methodOptions: readMethodOptions
|
|
112
|
-
});
|
|
60
|
+
if (this.ReadOperationRequired(props)) {
|
|
61
|
+
this.ImplementReadOperation(props, partitionKeyName, resourceName, apiGatewayResource);
|
|
113
62
|
}
|
|
114
63
|
// Update
|
|
115
|
-
if (this.
|
|
116
|
-
|
|
117
|
-
const updateRequestTemplate = props.updateRequestTemplate.replace("${Table}", this.dynamoTable.tableName);
|
|
118
|
-
this.addActionToPolicy("dynamodb:UpdateItem");
|
|
119
|
-
const updateMethodOptions = props.updateMethodResponses ? { methodResponses: props.updateMethodResponses } : {};
|
|
120
|
-
defaults.addProxyMethodToApiResource({
|
|
121
|
-
service: "dynamodb",
|
|
122
|
-
action: "UpdateItem",
|
|
123
|
-
apiGatewayRole: this.apiGatewayRole,
|
|
124
|
-
apiMethod: "PUT",
|
|
125
|
-
apiResource: apiGatewayResource,
|
|
126
|
-
requestTemplate: updateRequestTemplate,
|
|
127
|
-
additionalRequestTemplates: props.additionalUpdateRequestTemplates,
|
|
128
|
-
integrationResponses: props.updateIntegrationResponses,
|
|
129
|
-
methodOptions: updateMethodOptions
|
|
130
|
-
});
|
|
64
|
+
if (this.UpdateOperationRequired(props)) {
|
|
65
|
+
this.ImplementUpdateOperation(props, apiGatewayResource);
|
|
131
66
|
}
|
|
132
67
|
// Delete
|
|
133
|
-
if (this.
|
|
134
|
-
|
|
135
|
-
|
|
68
|
+
if (this.DeleteOperationRequired(props)) {
|
|
69
|
+
this.ImplementDeleteOperation(props, partitionKeyName, resourceName, apiGatewayResource);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
ImplementDeleteOperation(props, partitionKeyName, resourceName, apiGatewayResource) {
|
|
73
|
+
const deleteRequestTemplate = props.deleteRequestTemplate ??
|
|
74
|
+
`{ \
|
|
136
75
|
"TableName": "${this.dynamoTable.tableName}", \
|
|
137
76
|
"Key": { \
|
|
138
77
|
"${partitionKeyName}": { \
|
|
@@ -141,19 +80,95 @@ class ApiGatewayToDynamoDB extends constructs_1.Construct {
|
|
|
141
80
|
}, \
|
|
142
81
|
"ReturnValues": "ALL_OLD" \
|
|
143
82
|
}`;
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
83
|
+
this.addActionToPolicy("dynamodb:DeleteItem");
|
|
84
|
+
const deleteMethodOptions = props.deleteMethodResponses ? { methodResponses: props.deleteMethodResponses } : {};
|
|
85
|
+
defaults.addProxyMethodToApiResource({
|
|
86
|
+
service: "dynamodb",
|
|
87
|
+
action: "DeleteItem",
|
|
88
|
+
apiGatewayRole: this.apiGatewayRole,
|
|
89
|
+
apiMethod: "DELETE",
|
|
90
|
+
apiResource: apiGatewayResource,
|
|
91
|
+
requestTemplate: deleteRequestTemplate,
|
|
92
|
+
additionalRequestTemplates: props.additionalDeleteRequestTemplates,
|
|
93
|
+
integrationResponses: props.deleteIntegrationResponses,
|
|
94
|
+
methodOptions: deleteMethodOptions
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
ImplementUpdateOperation(props, apiGatewayResource) {
|
|
98
|
+
// ImplementUpdateOperation confirmed the existence of updateRequestTemplate
|
|
99
|
+
const updateRequestTemplate = props.updateRequestTemplate.replace("${Table}", this.dynamoTable.tableName);
|
|
100
|
+
this.addActionToPolicy("dynamodb:UpdateItem");
|
|
101
|
+
const updateMethodOptions = props.updateMethodResponses ? { methodResponses: props.updateMethodResponses } : {};
|
|
102
|
+
defaults.addProxyMethodToApiResource({
|
|
103
|
+
service: "dynamodb",
|
|
104
|
+
action: "UpdateItem",
|
|
105
|
+
apiGatewayRole: this.apiGatewayRole,
|
|
106
|
+
apiMethod: "PUT",
|
|
107
|
+
apiResource: apiGatewayResource,
|
|
108
|
+
requestTemplate: updateRequestTemplate,
|
|
109
|
+
additionalRequestTemplates: props.additionalUpdateRequestTemplates,
|
|
110
|
+
integrationResponses: props.updateIntegrationResponses,
|
|
111
|
+
methodOptions: updateMethodOptions
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
ImplementReadOperation(props, partitionKeyName, resourceName, apiGatewayResource) {
|
|
115
|
+
const readRequestTemplate = props.readRequestTemplate ??
|
|
116
|
+
`{ \
|
|
117
|
+
"TableName": "${this.dynamoTable.tableName}", \
|
|
118
|
+
"KeyConditionExpression": "${partitionKeyName} = :v1", \
|
|
119
|
+
"ExpressionAttributeValues": { \
|
|
120
|
+
":v1": { \
|
|
121
|
+
"S": "$input.params('${resourceName}')" \
|
|
122
|
+
} \
|
|
123
|
+
} \
|
|
124
|
+
}`;
|
|
125
|
+
this.addActionToPolicy("dynamodb:Query");
|
|
126
|
+
const readMethodOptions = props.readMethodResponses ? { methodResponses: props.readMethodResponses } : {};
|
|
127
|
+
defaults.addProxyMethodToApiResource({
|
|
128
|
+
service: "dynamodb",
|
|
129
|
+
action: "Query",
|
|
130
|
+
apiGatewayRole: this.apiGatewayRole,
|
|
131
|
+
apiMethod: "GET",
|
|
132
|
+
apiResource: apiGatewayResource,
|
|
133
|
+
requestTemplate: readRequestTemplate,
|
|
134
|
+
additionalRequestTemplates: props.additionalReadRequestTemplates,
|
|
135
|
+
integrationResponses: props.readIntegrationResponses,
|
|
136
|
+
methodOptions: readMethodOptions
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
ImplementCreateOperation(props) {
|
|
140
|
+
// ImplementCreateOperation has confirmed that createRequestTemplate exists)
|
|
141
|
+
const createRequestTemplate = props.createRequestTemplate.replace("${Table}", this.dynamoTable.tableName);
|
|
142
|
+
this.addActionToPolicy("dynamodb:PutItem");
|
|
143
|
+
const createMethodOptions = props.createMethodResponses ? { methodResponses: props.createMethodResponses } : {};
|
|
144
|
+
defaults.addProxyMethodToApiResource({
|
|
145
|
+
service: "dynamodb",
|
|
146
|
+
action: "PutItem",
|
|
147
|
+
apiGatewayRole: this.apiGatewayRole,
|
|
148
|
+
apiMethod: "POST",
|
|
149
|
+
apiResource: this.apiGateway.root,
|
|
150
|
+
requestTemplate: createRequestTemplate,
|
|
151
|
+
additionalRequestTemplates: props.additionalCreateRequestTemplates,
|
|
152
|
+
integrationResponses: props.createIntegrationResponses,
|
|
153
|
+
methodOptions: createMethodOptions
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
CheckAllResutsProps(props) {
|
|
157
|
+
if (this.CheckCreateRequestProps(props)) {
|
|
158
|
+
throw new Error(`The 'allowCreateOperation' property must be set to true when setting any of the following: ` +
|
|
159
|
+
`'createRequestTemplate', 'additionalCreateRequestTemplates', 'createIntegrationResponses'`);
|
|
160
|
+
}
|
|
161
|
+
if (this.CheckReadRequestProps(props)) {
|
|
162
|
+
throw new Error(`The 'allowReadOperation' property must be set to true or undefined when setting any of the following: ` +
|
|
163
|
+
`'readRequestTemplate', 'additionalReadRequestTemplates', 'readIntegrationResponses'`);
|
|
164
|
+
}
|
|
165
|
+
if (this.CheckUpdateRequestProps(props)) {
|
|
166
|
+
throw new Error(`The 'allowUpdateOperation' property must be set to true when setting any of the following: ` +
|
|
167
|
+
`'updateRequestTemplate', 'additionalUpdateRequestTemplates', 'updateIntegrationResponses'`);
|
|
168
|
+
}
|
|
169
|
+
if (this.CheckDeleteRequestProps(props)) {
|
|
170
|
+
throw new Error(`The 'allowDeleteOperation' property must be set to true when setting any of the following: ` +
|
|
171
|
+
`'deleteRequestTemplate', 'additionalDeleteRequestTemplates', 'deleteIntegrationResponses'`);
|
|
157
172
|
}
|
|
158
173
|
}
|
|
159
174
|
CheckReadRequestProps(props) {
|
|
@@ -184,25 +199,25 @@ class ApiGatewayToDynamoDB extends constructs_1.Construct {
|
|
|
184
199
|
}
|
|
185
200
|
return false;
|
|
186
201
|
}
|
|
187
|
-
|
|
202
|
+
CreateOperationRequired(props) {
|
|
188
203
|
if (props.allowCreateOperation && props.allowCreateOperation === true && props.createRequestTemplate) {
|
|
189
204
|
return true;
|
|
190
205
|
}
|
|
191
206
|
return false;
|
|
192
207
|
}
|
|
193
|
-
|
|
208
|
+
ReadOperationRequired(props) {
|
|
194
209
|
if (props.allowReadOperation === undefined || props.allowReadOperation === true) {
|
|
195
210
|
return true;
|
|
196
211
|
}
|
|
197
212
|
return false;
|
|
198
213
|
}
|
|
199
|
-
|
|
214
|
+
UpdateOperationRequired(props) {
|
|
200
215
|
if (props.allowUpdateOperation && props.allowUpdateOperation === true && props.updateRequestTemplate) {
|
|
201
216
|
return true;
|
|
202
217
|
}
|
|
203
218
|
return false;
|
|
204
219
|
}
|
|
205
|
-
|
|
220
|
+
DeleteOperationRequired(props) {
|
|
206
221
|
if (props.allowDeleteOperation && props.allowDeleteOperation === true) {
|
|
207
222
|
return true;
|
|
208
223
|
}
|
|
@@ -219,5 +234,5 @@ class ApiGatewayToDynamoDB extends constructs_1.Construct {
|
|
|
219
234
|
}
|
|
220
235
|
exports.ApiGatewayToDynamoDB = ApiGatewayToDynamoDB;
|
|
221
236
|
_a = JSII_RTTI_SYMBOL_1;
|
|
222
|
-
ApiGatewayToDynamoDB[_a] = { fqn: "@aws-solutions-constructs/aws-apigateway-dynamodb.ApiGatewayToDynamoDB", version: "2.
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWNBLDJDQUEyQztBQUMzQywyREFBMkQ7QUFDM0Qsd0ZBQXdGO0FBQ3hGLDJDQUF1QztBQUV2Qyx5REFBOEU7QUEwUDlFOztHQUVHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQU1qRDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQztRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkY7Z0JBQzNHLDJGQUEyRixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3R0FBd0c7Z0JBQ3RILHFGQUFxRixDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkY7Z0JBQzNHLDJGQUEyRixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RkFBNkY7Z0JBQzNHLDJGQUEyRixDQUFDLENBQUM7UUFDakcsQ0FBQztRQUVELDJDQUEyQztRQUMzQyxNQUFNLGdCQUFnQixHQUF3QixR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c09DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgYXBpIGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGR5bmFtb2RiIGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBnZXRQYXJ0aXRpb25LZXlOYW1lRnJvbVRhYmxlIH0gZnJvbSAnQGF3cy1zb2x1dGlvbnMtY29uc3RydWN0cy9jb3JlJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgQXBpR2F0ZXdheVRvRHluYW1vREIgY2xhc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyB7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZHluYW1vVGFibGVQcm9wcz86IGR5bmFtb2RiLlRhYmxlUHJvcHM7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBEeW5hbW9EQiB0YWJsZSBvYmplY3QsIHByb3ZpZGluZyBib3RoIHRoaXMgYW5kIGBkeW5hbW9UYWJsZVByb3BzYCB3aWxsIGNhdXNlIGFuIGVycm9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nVGFibGVPYmo/OiBkeW5hbW9kYi5UYWJsZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXItcHJvdmlkZWQgcHJvcHMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBBUEkgR2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BlcnRpZXMgYXJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBhcGlHYXRld2F5UHJvcHM/OiBhcGkuUmVzdEFwaVByb3BzO1xuICAvKipcbiAgICogV2hldGhlciB0byBjcmVhdGUgYSBVc2FnZSBQbGFuIGF0dGFjaGVkIHRvIHRoZSBBUEkuIE11c3QgYmUgdHJ1ZSBpZlxuICAgKiBhcGlHYXRld2F5UHJvcHMuZGVmYXVsdE1ldGhvZE9wdGlvbnMuYXBpS2V5UmVxdWlyZWQgaXMgdHJ1ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUgKHRvIG1hdGNoIGxlZ2FjeSBiZWhhdmlvcilcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZVVzYWdlUGxhbj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJlc291cmNlIG5hbWUgb24gdGhlIEFQSVxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWZ1bCBpZiB5b3VyIGludGVncmF0aW9uIGRvZXMgbm90IGRpcmVjdGx5IHVzZSB0aGUgcGFydGl0aW9uIGtleSBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGFydGl0aW9uIGtleSBuYW1lLCByZXRyaWV2ZWQgZnJvbSB0aGUgRHluYW1vREIgdGFibGUgb2JqZWN0XG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlcGxveSBhbiBBUEkgR2F0ZXdheSBNZXRob2QgZm9yIFBPU1QgSFRUUCBvcGVyYXRpb25zIG9uIHRoZSBEeW5hbW9EQiB0YWJsZSAoaS5lLiBkeW5hbW9kYjpQdXRJdGVtKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dDcmVhdGVPcGVyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogQVBJIEdhdGV3YXkgUmVxdWVzdCBUZW1wbGF0ZSBmb3IgdGhlIGNyZWF0ZSBtZXRob2QgZm9yIHRoZSBkZWZhdWx0IGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgaWYgdGhlIGBhbGxvd0NyZWF0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlUmVxdWVzdFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgQ3JlYXRlIFJlcXVlc3QgVGVtcGxhdGVzIGZvciBjb250ZW50LXR5cGVzIG90aGVyIHRoYW4gYGFwcGxpY2F0aW9uL2pzb25gLlxuICAgKiBVc2UgdGhlIGBjcmVhdGVSZXF1ZXN0VGVtcGxhdGVgIHByb3BlcnR5IHRvIHNldCB0aGUgcmVxdWVzdCB0ZW1wbGF0ZSBmb3IgdGhlIGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dDcmVhdGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxDcmVhdGVSZXF1ZXN0VGVtcGxhdGVzPzogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZzsgfTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgSW50ZWdyYXRpb24gUmVzcG9uc2UgZm9yIHRoZSBjcmVhdGUgbWV0aG9kLlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYGFsbG93Q3JlYXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbe3N0YXR1c0NvZGU6XCIyMDBcIn0se3N0YXR1c0NvZGU6XCI1MDBcIixyZXNwb25zZVRlbXBsYXRlczp7XCJ0ZXh0L2h0bWxcIjpcIkVycm9yXCJ9LHNlbGVjdGlvblBhdHRlcm46XCI1MDBcIn1dXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcz86IGFwaS5JbnRlZ3JhdGlvblJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IE1ldGhvZCBSZXNwb25zZXMgZm9yIHRoZSBjcmVhdGUgYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfVxuICAgKiAgIH0sXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH0sXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVNZXRob2RSZXNwb25zZXM/OiBhcGkuTWV0aG9kUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IGFuIEFQSSBHYXRld2F5IE1ldGhvZCBmb3IgR0VUIEhUVFAgb3BlcmF0aW9ucyBvbiBEeW5hbW9EQiB0YWJsZSAoaS5lLiBkeW5hbW9kYjpRdWVyeSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dSZWFkT3BlcmF0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFQSSBHYXRld2F5IFJlcXVlc3QgVGVtcGxhdGUgZm9yIHRoZSByZWFkIG1ldGhvZCBmb3IgdGhlIGRlZmF1bHQgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdGVtcGxhdGUgb25seSBzdXBwb3J0cyBhIHBhcnRpdGlvbiBrZXkgYW5kIG5vdCBwYXJ0aXRpb24gKyBzb3J0IGtleXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHsgXFxcbiAgICogICAgICAgXCJUYWJsZU5hbWVcIjogXCJEWU5BTU9EQl9UQUJMRV9OQU1FXCIsIFxcXG4gICAqICAgICAgIFwiS2V5Q29uZGl0aW9uRXhwcmVzc2lvblwiOiBcIlBBUlRJVElPTl9LRVlfTkFNRSA9IDp2MVwiLCBcXFxuICAgKiAgICAgICBcIkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNcIjogeyBcXFxuICAgKiAgICAgICAgIFwiOnYxXCI6IHsgXFxcbiAgICogICAgICAgICAgIFwiU1wiOiBcIiRpbnB1dC5wYXJhbXMoJ1BBUlRJVElPTl9LRVlfTkFNRScpXCIgXFxcbiAgICogICAgICAgICB9IFxcXG4gICAqICAgICAgIH0gXFxcbiAgICogICAgIH1gXG4gICAqL1xuICByZWFkb25seSByZWFkUmVxdWVzdFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgUmVhZCBSZXF1ZXN0IFRlbXBsYXRlcyBmb3IgY29udGVudC10eXBlcyBvdGhlciB0aGFuIGBhcHBsaWNhdGlvbi9qc29uYC5cbiAgICogVXNlIHRoZSBgcmVhZFJlcXVlc3RUZW1wbGF0ZWAgcHJvcGVydHkgdG8gc2V0IHRoZSByZXF1ZXN0IHRlbXBsYXRlIGZvciB0aGUgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsUmVhZFJlcXVlc3RUZW1wbGF0ZXM/OiB7IFtjb250ZW50VHlwZTogc3RyaW5nXTogc3RyaW5nOyB9O1xuICAvKipcbiAgICogT3B0aW9uYWwsIGN1c3RvbSBBUEkgR2F0ZXdheSBJbnRlZ3JhdGlvbiBSZXNwb25zZSBmb3IgdGhlIHJlYWQgbWV0aG9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFt7c3RhdHVzQ29kZTpcIjIwMFwifSx7c3RhdHVzQ29kZTpcIjUwMFwiLHJlc3BvbnNlVGVtcGxhdGVzOntcInRleHQvaHRtbFwiOlwiRXJyb3JcIn0sc2VsZWN0aW9uUGF0dGVybjpcIjUwMFwifV1cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRJbnRlZ3JhdGlvblJlc3BvbnNlcz86IGFwaS5JbnRlZ3JhdGlvblJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IE1ldGhvZCBSZXNwb25zZXMgZm9yIHRoZSByZWFkIGFjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH1cbiAgICogICB9LFxuICAgKiAgIHtcbiAgICogICAgIHN0YXR1c0NvZGU6IFwiNTAwXCIsXG4gICAqICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICogICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAqICAgICB9LFxuICAgKiAgIH1cbiAgICogXVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE1ldGhvZFJlc3BvbnNlcz86IGFwaS5NZXRob2RSZXNwb25zZVtdO1xuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgQVBJIEdhdGV3YXkgTWV0aG9kIGZvciBQVVQgSFRUUCBvcGVyYXRpb25zIG9uIER5bmFtb0RCIHRhYmxlIChpLmUuIGR5bmFtb2RiOlVwZGF0ZUl0ZW0pLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbGxvd1VwZGF0ZU9wZXJhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBSZXF1ZXN0IFRlbXBsYXRlIGZvciB0aGUgdXBkYXRlIG1ldGhvZC5cbiAgICogVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCBpZiB0aGUgYGFsbG93VXBkYXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVSZXF1ZXN0VGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBVcGRhdGUgUmVxdWVzdCBUZW1wbGF0ZXMgZm9yIGNvbnRlbnQtdHlwZXMgb3RoZXIgdGhhbiBgYXBwbGljYXRpb24vanNvbmAuXG4gICAqIFVzZSB0aGUgYHVwZGF0ZVJlcXVlc3RUZW1wbGF0ZWAgcHJvcGVydHkgdG8gc2V0IHRoZSByZXF1ZXN0IHRlbXBsYXRlIGZvciB0aGUgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGBhbGxvd1VwZGF0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFVwZGF0ZVJlcXVlc3RUZW1wbGF0ZXM/OiB7IFtjb250ZW50VHlwZTogc3RyaW5nXTogc3RyaW5nOyB9O1xuICAvKipcbiAgICogT3B0aW9uYWwsIGN1c3RvbSBBUEkgR2F0ZXdheSBJbnRlZ3JhdGlvbiBSZXNwb25zZSBmb3IgdGhlIHVwZGF0ZSBtZXRob2QuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dVcGRhdGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFt7c3RhdHVzQ29kZTpcIjIwMFwifSx7c3RhdHVzQ29kZTpcIjUwMFwiLHJlc3BvbnNlVGVtcGxhdGVzOntcInRleHQvaHRtbFwiOlwiRXJyb3JcIn0sc2VsZWN0aW9uUGF0dGVybjpcIjUwMFwifV1cbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzPzogYXBpLkludGVncmF0aW9uUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgTWV0aG9kIFJlc3BvbnNlcyBmb3IgdGhlIHVwZGF0ZSBhY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW1xuICAgKiAgIHtcbiAgICogICAgIHN0YXR1c0NvZGU6IFwiMjAwXCIsXG4gICAqICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICogICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAqICAgICB9XG4gICAqICAgfSxcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjUwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfSxcbiAgICogICB9XG4gICAqIF1cbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZU1ldGhvZFJlc3BvbnNlcz86IGFwaS5NZXRob2RSZXNwb25zZVtdO1xuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgQVBJIEdhdGV3YXkgTWV0aG9kIGZvciBERUxFVEUgSFRUUCBvcGVyYXRpb25zIG9uIER5bmFtb0RCIHRhYmxlIChpLmUuIGR5bmFtb2RiOkRlbGV0ZUl0ZW0pLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0RlbGV0ZU9wZXJhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBSZXF1ZXN0IFRlbXBsYXRlIGZvciB0aGUgZGVsZXRlIG1ldGhvZCBmb3IgdGhlIGRlZmF1bHQgYGFwcGxpY2F0aW9uL2pzb25gIGNvbnRlbnQtdHlwZS5cbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGBhbGxvd0RlbGV0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHsgXFxcbiAgICogICAgICAgXCJUYWJsZU5hbWVcIjogXCJEWU5BTU9EQl9UQUJMRV9OQU1FXCIsIFxcXG4gICAqICAgICAgIFwiS2V5XCI6IHsgXFxcbiAgICogICAgICAgICBcIiR7cGFydGl0aW9uS2V5TmFtZX1cIjogeyBcXFxuICAgKiAgICAgICAgICAgXCJTXCI6IFwiJGlucHV0LnBhcmFtcygnUEFSVElUSU9OX0tFWV9OQU1FJylcIiBcXFxuICAgKiAgICAgICAgICAgfSBcXFxuICAgKiAgICAgICAgIH0sIFxcXG4gICAqICAgICAgIFwiUmV0dXJuVmFsdWVzXCI6IFwiQUxMX09MRFwiIFxcXG4gICAqICAgICB9YFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlUmVxdWVzdFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgRGVsZXRlIHJlcXVlc3QgdGVtcGxhdGVzIGZvciBjb250ZW50LXR5cGVzIG90aGVyIHRoYW4gYGFwcGxpY2F0aW9uL2pzb25gLlxuICAgKiBVc2UgdGhlIGBkZWxldGVSZXF1ZXN0VGVtcGxhdGVgIHByb3BlcnR5IHRvIHNldCB0aGUgcmVxdWVzdCB0ZW1wbGF0ZSBmb3IgdGhlIGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dEZWxldGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxEZWxldGVSZXF1ZXN0VGVtcGxhdGVzPzogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZzsgfTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgSW50ZWdyYXRpb24gUmVzcG9uc2UgZm9yIHRoZSBkZWxldGUgbWV0aG9kLlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYGFsbG93RGVsZXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbe3N0YXR1c0NvZGU6XCIyMDBcIn0se3N0YXR1c0NvZGU6XCI1MDBcIixyZXNwb25zZVRlbXBsYXRlczp7XCJ0ZXh0L2h0bWxcIjpcIkVycm9yXCJ9LHNlbGVjdGlvblBhdHRlcm46XCI1MDBcIn1dXG4gICAqL1xuICByZWFkb25seSBkZWxldGVJbnRlZ3JhdGlvblJlc3BvbnNlcz86IGFwaS5JbnRlZ3JhdGlvblJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IE1ldGhvZCBSZXNwb25zZXMgZm9yIHRoZSBkZWxldGUgYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfVxuICAgKiAgIH0sXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH0sXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSBkZWxldGVNZXRob2RSZXNwb25zZXM/OiBhcGkuTWV0aG9kUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIFVzZXIgcHJvdmlkZWQgcHJvcHMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBDbG91ZFdhdGNoTG9ncyBMb2dHcm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BzIGFyZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cFByb3BzPzogbG9ncy5Mb2dHcm91cFByb3BzO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFRoZSBBcGlHYXRld2F5VG9EeW5hbW9EQiBjbGFzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXlUb0R5bmFtb0RCIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGR5bmFtb1RhYmxlOiBkeW5hbW9kYi5UYWJsZTtcbiAgcHVibGljIHJlYWRvbmx5IGFwaUdhdGV3YXlSb2xlOiBpYW0uUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGFwaUdhdGV3YXk6IGFwaS5SZXN0QXBpO1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpR2F0ZXdheUNsb3VkV2F0Y2hSb2xlPzogaWFtLlJvbGU7XG4gIHB1YmxpYyByZWFkb25seSBhcGlHYXRld2F5TG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXA7XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBBcGlHYXRld2F5VG9EeW5hbW9EQiBjbGFzcy5cbiAgICogQHBhcmFtIHtjZGsuQXBwfSBzY29wZSAtIHJlcHJlc2VudHMgdGhlIHNjb3BlIGZvciBhbGwgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gdGhpcyBpcyBhIGEgc2NvcGUtdW5pcXVlIGlkLlxuICAgKiBAcGFyYW0ge0Nsb3VkRnJvbnRUb0FwaUdhdGV3YXlUb0xhbWJkYVByb3BzfSBwcm9wcyAtIHVzZXIgcHJvdmlkZWQgcHJvcHMgZm9yIHRoZSBjb25zdHJ1Y3QuXG4gICAqIEBzaW5jZSAwLjguMFxuICAgKiBAYWNjZXNzIHB1YmxpY1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGRlZmF1bHRzLkNoZWNrRHluYW1vREJQcm9wcyhwcm9wcyk7XG4gICAgZGVmYXVsdHMuQ2hlY2tBcGlQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAodGhpcy5DaGVja0NyZWF0ZVJlcXVlc3RQcm9wcyhwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdhbGxvd0NyZWF0ZU9wZXJhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHNldHRpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmc6IGAgK1xuICAgICAgICBgJ2NyZWF0ZVJlcXVlc3RUZW1wbGF0ZScsICdhZGRpdGlvbmFsQ3JlYXRlUmVxdWVzdFRlbXBsYXRlcycsICdjcmVhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcydgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuQ2hlY2tSZWFkUmVxdWVzdFByb3BzKHByb3BzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ2FsbG93UmVhZE9wZXJhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBvciB1bmRlZmluZWQgd2hlbiBzZXR0aW5nIGFueSBvZiB0aGUgZm9sbG93aW5nOiBgICtcbiAgICAgICAgYCdyZWFkUmVxdWVzdFRlbXBsYXRlJywgJ2FkZGl0aW9uYWxSZWFkUmVxdWVzdFRlbXBsYXRlcycsICdyZWFkSW50ZWdyYXRpb25SZXNwb25zZXMnYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLkNoZWNrVXBkYXRlUmVxdWVzdFByb3BzKHByb3BzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ2FsbG93VXBkYXRlT3BlcmF0aW9uJyBwcm9wZXJ0eSBtdXN0IGJlIHNldCB0byB0cnVlIHdoZW4gc2V0dGluZyBhbnkgb2YgdGhlIGZvbGxvd2luZzogYCArXG4gICAgICAgIGAndXBkYXRlUmVxdWVzdFRlbXBsYXRlJywgJ2FkZGl0aW9uYWxVcGRhdGVSZXF1ZXN0VGVtcGxhdGVzJywgJ3VwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzJ2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5DaGVja0RlbGV0ZVJlcXVlc3RQcm9wcyhwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdhbGxvd0RlbGV0ZU9wZXJhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHNldHRpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmc6IGAgK1xuICAgICAgICBgJ2RlbGV0ZVJlcXVlc3RUZW1wbGF0ZScsICdhZGRpdGlvbmFsRGVsZXRlUmVxdWVzdFRlbXBsYXRlcycsICdkZWxldGVJbnRlZ3JhdGlvblJlc3BvbnNlcydgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIER5bmFtb0RCIHRhYmxlXG4gICAgY29uc3QgZHluYW1vVGFibGVQcm9wczogZHluYW1vZGIuVGFibGVQcm9wcyA9IGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoXG4gICAgICBkZWZhdWx0cy5HZXREZWZhdWx0VGFibGVQcm9wcyhwcm9wcy5keW5hbW9UYWJsZVByb3BzKSxcbiAgICAgIHByb3BzLmR5bmFtb1RhYmxlUHJvcHMpO1xuICAgIGxldCBwYXJ0aXRpb25LZXlOYW1lID0gZHluYW1vVGFibGVQcm9wcy5wYXJ0aXRpb25LZXkubmFtZTtcblxuICAgIGlmIChwcm9wcy5leGlzdGluZ1RhYmxlT2JqKSB7XG4gICAgICBwYXJ0aXRpb25LZXlOYW1lID0gZ2V0UGFydGl0aW9uS2V5TmFtZUZyb21UYWJsZShwcm9wcy5leGlzdGluZ1RhYmxlT2JqKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBwcm9wcy5yZXNvdXJjZU5hbWUgPz8gcGFydGl0aW9uS2V5TmFtZTtcblxuICAgIC8vIFNpbmNlIHdlIGFyZSBvbmx5IGludm9raW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhbiBleGlzdGluZyBUYWJsZSBvciB0YWJsZVByb3BzLFxuICAgIC8vIChub3QgYSB0YWJsZSBpbnRlcmZhY2UpLCB3ZSBrbm93IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYWx3YXlzIHJldHVyblxuICAgIC8vIGEgVGFibGUgb2JqZWN0IGFuZCB3ZSBjYW4gZm9yY2UgYXNzaWdubWVudCB0byB0aGUgZHluYW1vVGFibGUgcHJvcGVydHkuXG4gICAgY29uc3QgYnVpbGREeW5hbW9EQlRhYmxlUmVzcG9uc2UgPSBkZWZhdWx0cy5idWlsZER5bmFtb0RCVGFibGUodGhpcywge1xuICAgICAgZXhpc3RpbmdUYWJsZU9iajogcHJvcHMuZXhpc3RpbmdUYWJsZU9iaixcbiAgICAgIGR5bmFtb1RhYmxlUHJvcHM6IHByb3BzLmR5bmFtb1RhYmxlUHJvcHNcbiAgICB9KTtcbiAgICB0aGlzLmR5bmFtb1RhYmxlID0gYnVpbGREeW5hbW9EQlRhYmxlUmVzcG9uc2UudGFibGVPYmplY3QhO1xuXG4gICAgLy8gU2V0dXAgdGhlIEFQSSBHYXRld2F5XG4gICAgY29uc3QgZ2xvYmFsUmVzdEFwaVJlc3BvbnNlID0gZGVmYXVsdHMuR2xvYmFsUmVzdEFwaSh0aGlzLCBwcm9wcy5hcGlHYXRld2F5UHJvcHMsIHByb3BzLmxvZ0dyb3VwUHJvcHMsIHByb3BzLmNyZWF0ZVVzYWdlUGxhbik7XG4gICAgdGhpcy5hcGlHYXRld2F5ID0gZ2xvYmFsUmVzdEFwaVJlc3BvbnNlLmFwaTtcbiAgICB0aGlzLmFwaUdhdGV3YXlDbG91ZFdhdGNoUm9sZSA9IGdsb2JhbFJlc3RBcGlSZXNwb25zZS5yb2xlO1xuICAgIHRoaXMuYXBpR2F0ZXdheUxvZ0dyb3VwID0gZ2xvYmFsUmVzdEFwaVJlc3BvbnNlLmxvZ0dyb3VwO1xuXG4gICAgLy8gU2V0dXAgdGhlIEFQSSBHYXRld2F5IHJvbGVcbiAgICB0aGlzLmFwaUdhdGV3YXlSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdhcGktZ2F0ZXdheS1yb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpXG4gICAgfSk7XG5cbiAgICAvLyBTZXR1cCB0aGUgQVBJIEdhdGV3YXkgUmVzb3VyY2VcbiAgICBjb25zdCBhcGlHYXRld2F5UmVzb3VyY2U6IGFwaS5SZXNvdXJjZSA9IHRoaXMuYXBpR2F0ZXdheS5yb290LmFkZFJlc291cmNlKFwie1wiICsgcmVzb3VyY2VOYW1lICsgXCJ9XCIpO1xuXG4gICAgLy8gU2V0dXAgQVBJIEdhdGV3YXkgTWV0aG9kXG4gICAgLy8gQ3JlYXRlXG4gICAgaWYgKHRoaXMuSW1wbGVtZW50Q3JlYXRlT3BlcmF0aW9uKHByb3BzKSkge1xuICAgICAgLy8gSW1wbGVtZW50Q3JlYXRlT3BlcmF0aW9uIGhhcyBjb25maXJtZWQgdGhhdCBjcmVhdGVSZXF1ZXN0VGVtcGxhdGUgZXhpc3RzKVxuICAgICAgY29uc3QgY3JlYXRlUmVxdWVzdFRlbXBsYXRlID0gcHJvcHMuY3JlYXRlUmVxdWVzdFRlbXBsYXRlIS5yZXBsYWNlKFwiJHtUYWJsZX1cIiwgdGhpcy5keW5hbW9UYWJsZS50YWJsZU5hbWUpO1xuICAgICAgdGhpcy5hZGRBY3Rpb25Ub1BvbGljeShcImR5bmFtb2RiOlB1dEl0ZW1cIik7XG4gICAgICBjb25zdCBjcmVhdGVNZXRob2RPcHRpb25zOiBhcGkuTWV0aG9kT3B0aW9ucyA9IHByb3BzLmNyZWF0ZU1ldGhvZFJlc3BvbnNlcyA/IHsgbWV0aG9kUmVzcG9uc2VzOiBwcm9wcy5jcmVhdGVNZXRob2RSZXNwb25zZXMgfSA6IHt9O1xuICAgICAgZGVmYXVsdHMuYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHtcbiAgICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgICBhY3Rpb246IFwiUHV0SXRlbVwiLFxuICAgICAgICBhcGlHYXRld2F5Um9sZTogdGhpcy5hcGlHYXRld2F5Um9sZSxcbiAgICAgICAgYXBpTWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgYXBpUmVzb3VyY2U6IHRoaXMuYXBpR2F0ZXdheS5yb290LFxuICAgICAgICByZXF1ZXN0VGVtcGxhdGU6IGNyZWF0ZVJlcXVlc3RUZW1wbGF0ZSxcbiAgICAgICAgYWRkaXRpb25hbFJlcXVlc3RUZW1wbGF0ZXM6IHByb3BzLmFkZGl0aW9uYWxDcmVhdGVSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogcHJvcHMuY3JlYXRlSW50ZWdyYXRpb25SZXNwb25zZXMsXG4gICAgICAgIG1ldGhvZE9wdGlvbnM6IGNyZWF0ZU1ldGhvZE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBSZWFkXG4gICAgaWYgKHRoaXMuSW1wbGVtZW50UmVhT3BlcmF0aW9uKHByb3BzKSkge1xuICAgICAgY29uc3QgcmVhZFJlcXVlc3RUZW1wbGF0ZSA9IHByb3BzLnJlYWRSZXF1ZXN0VGVtcGxhdGUgPz9cbiAgICAgICAgYHsgXFxcbiAgICAgICAgICBcIlRhYmxlTmFtZVwiOiBcIiR7dGhpcy5keW5hbW9UYWJsZS50YWJsZU5hbWV9XCIsIFxcXG4gICAgICAgICAgXCJLZXlDb25kaXRpb25FeHByZXNzaW9uXCI6IFwiJHtwYXJ0aXRpb25LZXlOYW1lfSA9IDp2MVwiLCBcXFxuICAgICAgICAgIFwiRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlc1wiOiB7IFxcXG4gICAgICAgICAgICBcIjp2MVwiOiB7IFxcXG4gICAgICAgICAgICAgIFwiU1wiOiBcIiRpbnB1dC5wYXJhbXMoJyR7cmVzb3VyY2VOYW1lfScpXCIgXFxcbiAgICAgICAgICAgIH0gXFxcbiAgICAgICAgICB9IFxcXG4gICAgICAgIH1gO1xuXG4gICAgICB0aGlzLmFkZEFjdGlvblRvUG9saWN5KFwiZHluYW1vZGI6UXVlcnlcIik7XG4gICAgICBjb25zdCByZWFkTWV0aG9kT3B0aW9uczogYXBpLk1ldGhvZE9wdGlvbnMgPSBwcm9wcy5yZWFkTWV0aG9kUmVzcG9uc2VzID8geyBtZXRob2RSZXNwb25zZXM6IHByb3BzLnJlYWRNZXRob2RSZXNwb25zZXMgfSA6IHt9O1xuICAgICAgZGVmYXVsdHMuYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHtcbiAgICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgICBhY3Rpb246IFwiUXVlcnlcIixcbiAgICAgICAgYXBpR2F0ZXdheVJvbGU6IHRoaXMuYXBpR2F0ZXdheVJvbGUsXG4gICAgICAgIGFwaU1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgYXBpUmVzb3VyY2U6IGFwaUdhdGV3YXlSZXNvdXJjZSxcbiAgICAgICAgcmVxdWVzdFRlbXBsYXRlOiByZWFkUmVxdWVzdFRlbXBsYXRlLFxuICAgICAgICBhZGRpdGlvbmFsUmVxdWVzdFRlbXBsYXRlczogcHJvcHMuYWRkaXRpb25hbFJlYWRSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogcHJvcHMucmVhZEludGVncmF0aW9uUmVzcG9uc2VzLFxuICAgICAgICBtZXRob2RPcHRpb25zOiByZWFkTWV0aG9kT3B0aW9uc1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFVwZGF0ZVxuICAgIGlmICh0aGlzLkltcGxlbWVudFVwZGF0ZU9wZXJhdGlvbihwcm9wcykpIHtcbiAgICAgIC8vIEltcGxlbWVudFVwZGF0ZU9wZXJhdGlvbiBjb25maXJtZWQgdGhlIGV4aXN0ZW5jZSBvZiB1cGRhdGVSZXF1ZXN0VGVtcGxhdGVcbiAgICAgIGNvbnN0IHVwZGF0ZVJlcXVlc3RUZW1wbGF0ZSA9IHByb3BzLnVwZGF0ZVJlcXVlc3RUZW1wbGF0ZSEucmVwbGFjZShcIiR7VGFibGV9XCIsIHRoaXMuZHluYW1vVGFibGUudGFibGVOYW1lKTtcbiAgICAgIHRoaXMuYWRkQWN0aW9uVG9Qb2xpY3koXCJkeW5hbW9kYjpVcGRhdGVJdGVtXCIpO1xuICAgICAgY29uc3QgdXBkYXRlTWV0aG9kT3B0aW9uczogYXBpLk1ldGhvZE9wdGlvbnMgPSBwcm9wcy51cGRhdGVNZXRob2RSZXNwb25zZXMgPyB7IG1ldGhvZFJlc3BvbnNlczogcHJvcHMudXBkYXRlTWV0aG9kUmVzcG9uc2VzIH0gOiB7fTtcbiAgICAgIGRlZmF1bHRzLmFkZFByb3h5TWV0aG9kVG9BcGlSZXNvdXJjZSh7XG4gICAgICAgIHNlcnZpY2U6IFwiZHluYW1vZGJcIixcbiAgICAgICAgYWN0aW9uOiBcIlVwZGF0ZUl0ZW1cIixcbiAgICAgICAgYXBpR2F0ZXdheVJvbGU6IHRoaXMuYXBpR2F0ZXdheVJvbGUsXG4gICAgICAgIGFwaU1ldGhvZDogXCJQVVRcIixcbiAgICAgICAgYXBpUmVzb3VyY2U6IGFwaUdhdGV3YXlSZXNvdXJjZSxcbiAgICAgICAgcmVxdWVzdFRlbXBsYXRlOiB1cGRhdGVSZXF1ZXN0VGVtcGxhdGUsXG4gICAgICAgIGFkZGl0aW9uYWxSZXF1ZXN0VGVtcGxhdGVzOiBwcm9wcy5hZGRpdGlvbmFsVXBkYXRlUmVxdWVzdFRlbXBsYXRlcyxcbiAgICAgICAgaW50ZWdyYXRpb25SZXNwb25zZXM6IHByb3BzLnVwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzLFxuICAgICAgICBtZXRob2RPcHRpb25zOiB1cGRhdGVNZXRob2RPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gRGVsZXRlXG4gICAgaWYgKHRoaXMuSW1wbGVtZW50RGVsZXRlT3BlcmF0aW9uKHByb3BzKSkge1xuICAgICAgY29uc3QgZGVsZXRlUmVxdWVzdFRlbXBsYXRlID0gcHJvcHMuZGVsZXRlUmVxdWVzdFRlbXBsYXRlID8/XG4gICAgICAgIGB7IFxcXG4gICAgICAgICAgXCJUYWJsZU5hbWVcIjogXCIke3RoaXMuZHluYW1vVGFibGUudGFibGVOYW1lfVwiLCBcXFxuICAgICAgICAgIFwiS2V5XCI6IHsgXFxcbiAgICAgICAgICAgIFwiJHtwYXJ0aXRpb25LZXlOYW1lfVwiOiB7IFxcXG4gICAgICAgICAgICAgIFwiU1wiOiBcIiRpbnB1dC5wYXJhbXMoJyR7cmVzb3VyY2VOYW1lfScpXCIgXFxcbiAgICAgICAgICAgICAgfSBcXFxuICAgICAgICAgICAgfSwgXFxcbiAgICAgICAgICBcIlJldHVyblZhbHVlc1wiOiBcIkFMTF9PTERcIiBcXFxuICAgICAgICB9YDtcblxuICAgICAgdGhpcy5hZGRBY3Rpb25Ub1BvbGljeShcImR5bmFtb2RiOkRlbGV0ZUl0ZW1cIik7XG4gICAgICBjb25zdCBkZWxldGVNZXRob2RPcHRpb25zOiBhcGkuTWV0aG9kT3B0aW9ucyA9IHByb3BzLmRlbGV0ZU1ldGhvZFJlc3BvbnNlcyA/IHsgbWV0aG9kUmVzcG9uc2VzOiBwcm9wcy5kZWxldGVNZXRob2RSZXNwb25zZXMgfSA6IHt9O1xuICAgICAgZGVmYXVsdHMuYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHtcbiAgICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgICBhY3Rpb246IFwiRGVsZXRlSXRlbVwiLFxuICAgICAgICBhcGlHYXRld2F5Um9sZTogdGhpcy5hcGlHYXRld2F5Um9sZSxcbiAgICAgICAgYXBpTWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICBhcGlSZXNvdXJjZTogYXBpR2F0ZXdheVJlc291cmNlLFxuICAgICAgICByZXF1ZXN0VGVtcGxhdGU6IGRlbGV0ZVJlcXVlc3RUZW1wbGF0ZSxcbiAgICAgICAgYWRkaXRpb25hbFJlcXVlc3RUZW1wbGF0ZXM6IHByb3BzLmFkZGl0aW9uYWxEZWxldGVSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogcHJvcHMuZGVsZXRlSW50ZWdyYXRpb25SZXNwb25zZXMsXG4gICAgICAgIG1ldGhvZE9wdGlvbnM6IGRlbGV0ZU1ldGhvZE9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgQ2hlY2tSZWFkUmVxdWVzdFByb3BzKHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKTogYm9vbGVhbiB7XG4gICAgaWYgKChwcm9wcy5yZWFkUmVxdWVzdFRlbXBsYXRlIHx8IHByb3BzLmFkZGl0aW9uYWxSZWFkUmVxdWVzdFRlbXBsYXRlcyB8fCBwcm9wcy5yZWFkSW50ZWdyYXRpb25SZXNwb25zZXMpXG4gICAgICAgICYmIHByb3BzLmFsbG93UmVhZE9wZXJhdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBDaGVja1VwZGF0ZVJlcXVlc3RQcm9wcyhwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmICgocHJvcHMudXBkYXRlUmVxdWVzdFRlbXBsYXRlIHx8IHByb3BzLmFkZGl0aW9uYWxVcGRhdGVSZXF1ZXN0VGVtcGxhdGVzIHx8IHByb3BzLnVwZGF0ZUludGVncmF0aW9uUmVzcG9uc2VzKVxuICAgICAgICAmJiBwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIENoZWNrRGVsZXRlUmVxdWVzdFByb3BzKHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKTogYm9vbGVhbiB7XG4gICAgaWYgKChwcm9wcy5kZWxldGVSZXF1ZXN0VGVtcGxhdGUgfHwgcHJvcHMuYWRkaXRpb25hbERlbGV0ZVJlcXVlc3RUZW1wbGF0ZXMgfHwgcHJvcHMuZGVsZXRlSW50ZWdyYXRpb25SZXNwb25zZXMpXG4gICAgICAgICYmIHByb3BzLmFsbG93RGVsZXRlT3BlcmF0aW9uICE9PSB0cnVlKSAge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgQ2hlY2tDcmVhdGVSZXF1ZXN0UHJvcHMocHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpOiBib29sZWFuIHtcbiAgICBpZiAoKHByb3BzLmNyZWF0ZVJlcXVlc3RUZW1wbGF0ZSB8fCBwcm9wcy5hZGRpdGlvbmFsQ3JlYXRlUmVxdWVzdFRlbXBsYXRlcyB8fCBwcm9wcy5jcmVhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcylcbiAgICAgICAgJiYgcHJvcHMuYWxsb3dDcmVhdGVPcGVyYXRpb24gIT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudENyZWF0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd0NyZWF0ZU9wZXJhdGlvbiAmJiBwcm9wcy5hbGxvd0NyZWF0ZU9wZXJhdGlvbiA9PT0gdHJ1ZSAmJiBwcm9wcy5jcmVhdGVSZXF1ZXN0VGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudFJlYU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd1JlYWRPcGVyYXRpb24gPT09IHVuZGVmaW5lZCB8fCBwcm9wcy5hbGxvd1JlYWRPcGVyYXRpb24gPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudFVwZGF0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiAmJiBwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiA9PT0gdHJ1ZSAmJiBwcm9wcy51cGRhdGVSZXF1ZXN0VGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudERlbGV0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd0RlbGV0ZU9wZXJhdGlvbiAmJiBwcm9wcy5hbGxvd0RlbGV0ZU9wZXJhdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQWN0aW9uVG9Qb2xpY3koYWN0aW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFwaUdhdGV3YXlSb2xlLmFkZFRvUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICB0aGlzLmR5bmFtb1RhYmxlLnRhYmxlQXJuXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogW2Ake2FjdGlvbn1gXVxuICAgIH0pKTtcbiAgfVxufSJdfQ==
|
|
237
|
+
ApiGatewayToDynamoDB[_a] = { fqn: "@aws-solutions-constructs/aws-apigateway-dynamodb.ApiGatewayToDynamoDB", version: "2.92.1" };
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWNBLDJDQUEyQztBQUMzQywyREFBMkQ7QUFDM0Qsd0ZBQXdGO0FBQ3hGLDJDQUF1QztBQUV2Qyx5REFBOEU7QUEwUDlFOztHQUVHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSxzQkFBUztJQU1qRDs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQztRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoQywyQ0FBMkM7UUFDM0MsTUFBTSxnQkFBZ0IsR0FBd0IsUUFBUSxDQUFDLGdCQUFnQixDQUNyRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQ3JELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUUxRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLGdCQUFnQixHQUFHLElBQUEsbUNBQTRCLEVBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksZ0JBQWdCLENBQUM7UUFFNUQsaUZBQWlGO1FBQ2pGLDhFQUE4RTtRQUM5RSwwRUFBMEU7UUFDMUUsTUFBTSwwQkFBMEIsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO1lBQ25FLGdCQUFnQixFQUFFLEtBQUssQ0FB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LEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3JHLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQWdDO1FBQzlELElBQUksS0FBSyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0RSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFjO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUN0RCxTQUFTLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2FBQzFCO1lBQ0QsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztTQUN2QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7O0FBaFFILG9EQWlRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICdAYXdzLXNvbHV0aW9ucy1jb25zdHJ1Y3RzL2NvcmUnO1xuLy8gTm90ZTogVG8gZW5zdXJlIENES3YyIGNvbXBhdGliaWxpdHksIGtlZXAgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIENvbnN0cnVjdCBzZXBhcmF0ZVxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0IHsgZ2V0UGFydGl0aW9uS2V5TmFtZUZyb21UYWJsZSB9IGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgcHJvcGVydGllcyBmb3IgdGhlIEFwaUdhdGV3YXlUb0R5bmFtb0RCIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcHMgYXJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGR5bmFtb1RhYmxlUHJvcHM/OiBkeW5hbW9kYi5UYWJsZVByb3BzO1xuICAvKipcbiAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgRHluYW1vREIgdGFibGUgb2JqZWN0LCBwcm92aWRpbmcgYm90aCB0aGlzIGFuZCBgZHluYW1vVGFibGVQcm9wc2Agd2lsbCBjYXVzZSBhbiBlcnJvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1RhYmxlT2JqPzogZHluYW1vZGIuVGFibGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyLXByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgQVBJIEdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wZXJ0aWVzIGFyZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpR2F0ZXdheVByb3BzPzogYXBpLlJlc3RBcGlQcm9wcztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGEgVXNhZ2UgUGxhbiBhdHRhY2hlZCB0byB0aGUgQVBJLiBNdXN0IGJlIHRydWUgaWZcbiAgICogYXBpR2F0ZXdheVByb3BzLmRlZmF1bHRNZXRob2RPcHRpb25zLmFwaUtleVJlcXVpcmVkIGlzIHRydWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlICh0byBtYXRjaCBsZWdhY3kgYmVoYXZpb3IpXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVVc2FnZVBsYW4/OiBib29sZWFuXG4gIC8qKlxuICAgKiBPcHRpb25hbCByZXNvdXJjZSBuYW1lIG9uIHRoZSBBUElcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VmdWwgaWYgeW91ciBpbnRlZ3JhdGlvbiBkb2VzIG5vdCBkaXJlY3RseSB1c2UgdGhlIHBhcnRpdGlvbiBrZXkgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBhcnRpdGlvbiBrZXkgbmFtZSwgcmV0cmlldmVkIGZyb20gdGhlIER5bmFtb0RCIHRhYmxlIG9iamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0byBkZXBsb3kgYW4gQVBJIEdhdGV3YXkgTWV0aG9kIGZvciBQT1NUIEhUVFAgb3BlcmF0aW9ucyBvbiB0aGUgRHluYW1vREIgdGFibGUgKGkuZS4gZHluYW1vZGI6UHV0SXRlbSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93Q3JlYXRlT3BlcmF0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFQSSBHYXRld2F5IFJlcXVlc3QgVGVtcGxhdGUgZm9yIHRoZSBjcmVhdGUgbWV0aG9kIGZvciB0aGUgZGVmYXVsdCBgYXBwbGljYXRpb24vanNvbmAgY29udGVudC10eXBlLlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHJlcXVpcmVkIGlmIHRoZSBgYWxsb3dDcmVhdGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZVJlcXVlc3RUZW1wbGF0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIENyZWF0ZSBSZXF1ZXN0IFRlbXBsYXRlcyBmb3IgY29udGVudC10eXBlcyBvdGhlciB0aGFuIGBhcHBsaWNhdGlvbi9qc29uYC5cbiAgICogVXNlIHRoZSBgY3JlYXRlUmVxdWVzdFRlbXBsYXRlYCBwcm9wZXJ0eSB0byBzZXQgdGhlIHJlcXVlc3QgdGVtcGxhdGUgZm9yIHRoZSBgYXBwbGljYXRpb24vanNvbmAgY29udGVudC10eXBlLlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYGFsbG93Q3JlYXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQ3JlYXRlUmVxdWVzdFRlbXBsYXRlcz86IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBzdHJpbmc7IH07XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IEludGVncmF0aW9uIFJlc3BvbnNlIGZvciB0aGUgY3JlYXRlIG1ldGhvZC5cbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGBhbGxvd0NyZWF0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW3tzdGF0dXNDb2RlOlwiMjAwXCJ9LHtzdGF0dXNDb2RlOlwiNTAwXCIscmVzcG9uc2VUZW1wbGF0ZXM6e1widGV4dC9odG1sXCI6XCJFcnJvclwifSxzZWxlY3Rpb25QYXR0ZXJuOlwiNTAwXCJ9XVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlSW50ZWdyYXRpb25SZXNwb25zZXM/OiBhcGkuSW50ZWdyYXRpb25SZXNwb25zZVtdO1xuICAvKipcbiAgICogT3B0aW9uYWwsIGN1c3RvbSBBUEkgR2F0ZXdheSBNZXRob2QgUmVzcG9uc2VzIGZvciB0aGUgY3JlYXRlIGFjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH1cbiAgICogICB9LFxuICAgKiAgIHtcbiAgICogICAgIHN0YXR1c0NvZGU6IFwiNTAwXCIsXG4gICAqICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICogICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAqICAgICB9LFxuICAgKiAgIH1cbiAgICogXVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlTWV0aG9kUmVzcG9uc2VzPzogYXBpLk1ldGhvZFJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRlcGxveSBhbiBBUEkgR2F0ZXdheSBNZXRob2QgZm9yIEdFVCBIVFRQIG9wZXJhdGlvbnMgb24gRHluYW1vREIgdGFibGUgKGkuZS4gZHluYW1vZGI6UXVlcnkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93UmVhZE9wZXJhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBUEkgR2F0ZXdheSBSZXF1ZXN0IFRlbXBsYXRlIGZvciB0aGUgcmVhZCBtZXRob2QgZm9yIHRoZSBkZWZhdWx0IGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHRlbXBsYXRlIG9ubHkgc3VwcG9ydHMgYSBwYXJ0aXRpb24ga2V5IGFuZCBub3QgcGFydGl0aW9uICsgc29ydCBrZXlzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGB7IFxcXG4gICAqICAgICAgIFwiVGFibGVOYW1lXCI6IFwiRFlOQU1PREJfVEFCTEVfTkFNRVwiLCBcXFxuICAgKiAgICAgICBcIktleUNvbmRpdGlvbkV4cHJlc3Npb25cIjogXCJQQVJUSVRJT05fS0VZX05BTUUgPSA6djFcIiwgXFxcbiAgICogICAgICAgXCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzXCI6IHsgXFxcbiAgICogICAgICAgICBcIjp2MVwiOiB7IFxcXG4gICAqICAgICAgICAgICBcIlNcIjogXCIkaW5wdXQucGFyYW1zKCdQQVJUSVRJT05fS0VZX05BTUUnKVwiIFxcXG4gICAqICAgICAgICAgfSBcXFxuICAgKiAgICAgICB9IFxcXG4gICAqICAgICB9YFxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZFJlcXVlc3RUZW1wbGF0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFJlYWQgUmVxdWVzdCBUZW1wbGF0ZXMgZm9yIGNvbnRlbnQtdHlwZXMgb3RoZXIgdGhhbiBgYXBwbGljYXRpb24vanNvbmAuXG4gICAqIFVzZSB0aGUgYHJlYWRSZXF1ZXN0VGVtcGxhdGVgIHByb3BlcnR5IHRvIHNldCB0aGUgcmVxdWVzdCB0ZW1wbGF0ZSBmb3IgdGhlIGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFJlYWRSZXF1ZXN0VGVtcGxhdGVzPzogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZzsgfTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgSW50ZWdyYXRpb24gUmVzcG9uc2UgZm9yIHRoZSByZWFkIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbe3N0YXR1c0NvZGU6XCIyMDBcIn0se3N0YXR1c0NvZGU6XCI1MDBcIixyZXNwb25zZVRlbXBsYXRlczp7XCJ0ZXh0L2h0bWxcIjpcIkVycm9yXCJ9LHNlbGVjdGlvblBhdHRlcm46XCI1MDBcIn1dXG4gICAqL1xuICByZWFkb25seSByZWFkSW50ZWdyYXRpb25SZXNwb25zZXM/OiBhcGkuSW50ZWdyYXRpb25SZXNwb25zZVtdO1xuICAvKipcbiAgICogT3B0aW9uYWwsIGN1c3RvbSBBUEkgR2F0ZXdheSBNZXRob2QgUmVzcG9uc2VzIGZvciB0aGUgcmVhZCBhY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW1xuICAgKiAgIHtcbiAgICogICAgIHN0YXR1c0NvZGU6IFwiMjAwXCIsXG4gICAqICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICogICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAqICAgICB9XG4gICAqICAgfSxcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjUwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfSxcbiAgICogICB9XG4gICAqIF1cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRNZXRob2RSZXNwb25zZXM/OiBhcGkuTWV0aG9kUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IEFQSSBHYXRld2F5IE1ldGhvZCBmb3IgUFVUIEhUVFAgb3BlcmF0aW9ucyBvbiBEeW5hbW9EQiB0YWJsZSAoaS5lLiBkeW5hbW9kYjpVcGRhdGVJdGVtKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dVcGRhdGVPcGVyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogQVBJIEdhdGV3YXkgUmVxdWVzdCBUZW1wbGF0ZSBmb3IgdGhlIHVwZGF0ZSBtZXRob2QuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgaWYgdGhlIGBhbGxvd1VwZGF0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlUmVxdWVzdFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgVXBkYXRlIFJlcXVlc3QgVGVtcGxhdGVzIGZvciBjb250ZW50LXR5cGVzIG90aGVyIHRoYW4gYGFwcGxpY2F0aW9uL2pzb25gLlxuICAgKiBVc2UgdGhlIGB1cGRhdGVSZXF1ZXN0VGVtcGxhdGVgIHByb3BlcnR5IHRvIHNldCB0aGUgcmVxdWVzdCB0ZW1wbGF0ZSBmb3IgdGhlIGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dVcGRhdGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxVcGRhdGVSZXF1ZXN0VGVtcGxhdGVzPzogeyBbY29udGVudFR5cGU6IHN0cmluZ106IHN0cmluZzsgfTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsLCBjdXN0b20gQVBJIEdhdGV3YXkgSW50ZWdyYXRpb24gUmVzcG9uc2UgZm9yIHRoZSB1cGRhdGUgbWV0aG9kLlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYGFsbG93VXBkYXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbe3N0YXR1c0NvZGU6XCIyMDBcIn0se3N0YXR1c0NvZGU6XCI1MDBcIixyZXNwb25zZVRlbXBsYXRlczp7XCJ0ZXh0L2h0bWxcIjpcIkVycm9yXCJ9LHNlbGVjdGlvblBhdHRlcm46XCI1MDBcIn1dXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcz86IGFwaS5JbnRlZ3JhdGlvblJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IE1ldGhvZCBSZXNwb25zZXMgZm9yIHRoZSB1cGRhdGUgYWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtcbiAgICogICB7XG4gICAqICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgKiAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAqICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGVcIjogdHJ1ZVxuICAgKiAgICAgfVxuICAgKiAgIH0sXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCI1MDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH0sXG4gICAqICAgfVxuICAgKiBdXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVNZXRob2RSZXNwb25zZXM/OiBhcGkuTWV0aG9kUmVzcG9uc2VbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGVwbG95IEFQSSBHYXRld2F5IE1ldGhvZCBmb3IgREVMRVRFIEhUVFAgb3BlcmF0aW9ucyBvbiBEeW5hbW9EQiB0YWJsZSAoaS5lLiBkeW5hbW9kYjpEZWxldGVJdGVtKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dEZWxldGVPcGVyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogQVBJIEdhdGV3YXkgUmVxdWVzdCBUZW1wbGF0ZSBmb3IgdGhlIGRlbGV0ZSBtZXRob2QgZm9yIHRoZSBkZWZhdWx0IGBhcHBsaWNhdGlvbi9qc29uYCBjb250ZW50LXR5cGUuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZSBgYWxsb3dEZWxldGVPcGVyYXRpb25gIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGB7IFxcXG4gICAqICAgICAgIFwiVGFibGVOYW1lXCI6IFwiRFlOQU1PREJfVEFCTEVfTkFNRVwiLCBcXFxuICAgKiAgICAgICBcIktleVwiOiB7IFxcXG4gICAqICAgICAgICAgXCIke3BhcnRpdGlvbktleU5hbWV9XCI6IHsgXFxcbiAgICogICAgICAgICAgIFwiU1wiOiBcIiRpbnB1dC5wYXJhbXMoJ1BBUlRJVElPTl9LRVlfTkFNRScpXCIgXFxcbiAgICogICAgICAgICAgIH0gXFxcbiAgICogICAgICAgICB9LCBcXFxuICAgKiAgICAgICBcIlJldHVyblZhbHVlc1wiOiBcIkFMTF9PTERcIiBcXFxuICAgKiAgICAgfWBcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0ZVJlcXVlc3RUZW1wbGF0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIERlbGV0ZSByZXF1ZXN0IHRlbXBsYXRlcyBmb3IgY29udGVudC10eXBlcyBvdGhlciB0aGFuIGBhcHBsaWNhdGlvbi9qc29uYC5cbiAgICogVXNlIHRoZSBgZGVsZXRlUmVxdWVzdFRlbXBsYXRlYCBwcm9wZXJ0eSB0byBzZXQgdGhlIHJlcXVlc3QgdGVtcGxhdGUgZm9yIHRoZSBgYXBwbGljYXRpb24vanNvbmAgY29udGVudC10eXBlLlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBpZiB0aGUgYGFsbG93RGVsZXRlT3BlcmF0aW9uYCBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsRGVsZXRlUmVxdWVzdFRlbXBsYXRlcz86IHsgW2NvbnRlbnRUeXBlOiBzdHJpbmddOiBzdHJpbmc7IH07XG4gIC8qKlxuICAgKiBPcHRpb25hbCwgY3VzdG9tIEFQSSBHYXRld2F5IEludGVncmF0aW9uIFJlc3BvbnNlIGZvciB0aGUgZGVsZXRlIG1ldGhvZC5cbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGBhbGxvd0RlbGV0ZU9wZXJhdGlvbmAgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW3tzdGF0dXNDb2RlOlwiMjAwXCJ9LHtzdGF0dXNDb2RlOlwiNTAwXCIscmVzcG9uc2VUZW1wbGF0ZXM6e1widGV4dC9odG1sXCI6XCJFcnJvclwifSxzZWxlY3Rpb25QYXR0ZXJuOlwiNTAwXCJ9XVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlSW50ZWdyYXRpb25SZXNwb25zZXM/OiBhcGkuSW50ZWdyYXRpb25SZXNwb25zZVtdO1xuICAvKipcbiAgICogT3B0aW9uYWwsIGN1c3RvbSBBUEkgR2F0ZXdheSBNZXRob2QgUmVzcG9uc2VzIGZvciB0aGUgZGVsZXRlIGFjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBbXG4gICAqICAge1xuICAgKiAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICogICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgKiAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6IHRydWVcbiAgICogICAgIH1cbiAgICogICB9LFxuICAgKiAgIHtcbiAgICogICAgIHN0YXR1c0NvZGU6IFwiNTAwXCIsXG4gICAqICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICogICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlXG4gICAqICAgICB9LFxuICAgKiAgIH1cbiAgICogXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlTWV0aG9kUmVzcG9uc2VzPzogYXBpLk1ldGhvZFJlc3BvbnNlW107XG4gIC8qKlxuICAgKiBVc2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgQ2xvdWRXYXRjaExvZ3MgTG9nR3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBwcm9wcyBhcmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXBQcm9wcz86IGxvZ3MuTG9nR3JvdXBQcm9wcztcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBUaGUgQXBpR2F0ZXdheVRvRHluYW1vREIgY2xhc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlHYXRld2F5VG9EeW5hbW9EQiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBkeW5hbW9UYWJsZTogZHluYW1vZGIuVGFibGU7XG4gIHB1YmxpYyByZWFkb25seSBhcGlHYXRld2F5Um9sZTogaWFtLlJvbGU7XG4gIHB1YmxpYyByZWFkb25seSBhcGlHYXRld2F5OiBhcGkuUmVzdEFwaTtcbiAgcHVibGljIHJlYWRvbmx5IGFwaUdhdGV3YXlDbG91ZFdhdGNoUm9sZT86IGlhbS5Sb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpR2F0ZXdheUxvZ0dyb3VwOiBsb2dzLkxvZ0dyb3VwO1xuICAvKipcbiAgICogQHN1bW1hcnkgQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgQXBpR2F0ZXdheVRvRHluYW1vREIgY2xhc3MuXG4gICAqIEBwYXJhbSB7Y2RrLkFwcH0gc2NvcGUgLSByZXByZXNlbnRzIHRoZSBzY29wZSBmb3IgYWxsIHRoZSByZXNvdXJjZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIHRoaXMgaXMgYSBhIHNjb3BlLXVuaXF1ZSBpZC5cbiAgICogQHBhcmFtIHtDbG91ZEZyb250VG9BcGlHYXRld2F5VG9MYW1iZGFQcm9wc30gcHJvcHMgLSB1c2VyIHByb3ZpZGVkIHByb3BzIGZvciB0aGUgY29uc3RydWN0LlxuICAgKiBAc2luY2UgMC44LjBcbiAgICogQGFjY2VzcyBwdWJsaWNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBkZWZhdWx0cy5DaGVja0R5bmFtb0RCUHJvcHMocHJvcHMpO1xuICAgIGRlZmF1bHRzLkNoZWNrQXBpUHJvcHMocHJvcHMpO1xuXG4gICAgdGhpcy5DaGVja0FsbFJlc3V0c1Byb3BzKHByb3BzKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgRHluYW1vREIgdGFibGVcbiAgICBjb25zdCBkeW5hbW9UYWJsZVByb3BzOiBkeW5hbW9kYi5UYWJsZVByb3BzID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhcbiAgICAgIGRlZmF1bHRzLkdldERlZmF1bHRUYWJsZVByb3BzKHByb3BzLmR5bmFtb1RhYmxlUHJvcHMpLFxuICAgICAgcHJvcHMuZHluYW1vVGFibGVQcm9wcyk7XG4gICAgbGV0IHBhcnRpdGlvbktleU5hbWUgPSBkeW5hbW9UYWJsZVByb3BzLnBhcnRpdGlvbktleS5uYW1lO1xuXG4gICAgaWYgKHByb3BzLmV4aXN0aW5nVGFibGVPYmopIHtcbiAgICAgIHBhcnRpdGlvbktleU5hbWUgPSBnZXRQYXJ0aXRpb25LZXlOYW1lRnJvbVRhYmxlKHByb3BzLmV4aXN0aW5nVGFibGVPYmopO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlTmFtZSA9IHByb3BzLnJlc291cmNlTmFtZSA/PyBwYXJ0aXRpb25LZXlOYW1lO1xuXG4gICAgLy8gU2luY2Ugd2UgYXJlIG9ubHkgaW52b2tpbmcgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIGV4aXN0aW5nIFRhYmxlIG9yIHRhYmxlUHJvcHMsXG4gICAgLy8gKG5vdCBhIHRhYmxlIGludGVyZmFjZSksIHdlIGtub3cgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBhbHdheXMgcmV0dXJuXG4gICAgLy8gYSBUYWJsZSBvYmplY3QgYW5kIHdlIGNhbiBmb3JjZSBhc3NpZ25tZW50IHRvIHRoZSBkeW5hbW9UYWJsZSBwcm9wZXJ0eS5cbiAgICBjb25zdCBidWlsZER5bmFtb0RCVGFibGVSZXNwb25zZSA9IGRlZmF1bHRzLmJ1aWxkRHluYW1vREJUYWJsZSh0aGlzLCB7XG4gICAgICBleGlzdGluZ1RhYmxlT2JqOiBwcm9wcy5leGlzdGluZ1RhYmxlT2JqLFxuICAgICAgZHluYW1vVGFibGVQcm9wczogcHJvcHMuZHluYW1vVGFibGVQcm9wc1xuICAgIH0pO1xuICAgIHRoaXMuZHluYW1vVGFibGUgPSBidWlsZER5bmFtb0RCVGFibGVSZXNwb25zZS50YWJsZU9iamVjdCE7XG5cbiAgICAvLyBTZXR1cCB0aGUgQVBJIEdhdGV3YXlcbiAgICBjb25zdCBnbG9iYWxSZXN0QXBpUmVzcG9uc2UgPSBkZWZhdWx0cy5HbG9iYWxSZXN0QXBpKHRoaXMsIHByb3BzLmFwaUdhdGV3YXlQcm9wcywgcHJvcHMubG9nR3JvdXBQcm9wcywgcHJvcHMuY3JlYXRlVXNhZ2VQbGFuKTtcbiAgICB0aGlzLmFwaUdhdGV3YXkgPSBnbG9iYWxSZXN0QXBpUmVzcG9uc2UuYXBpO1xuICAgIHRoaXMuYXBpR2F0ZXdheUNsb3VkV2F0Y2hSb2xlID0gZ2xvYmFsUmVzdEFwaVJlc3BvbnNlLnJvbGU7XG4gICAgdGhpcy5hcGlHYXRld2F5TG9nR3JvdXAgPSBnbG9iYWxSZXN0QXBpUmVzcG9uc2UubG9nR3JvdXA7XG5cbiAgICAvLyBTZXR1cCB0aGUgQVBJIEdhdGV3YXkgcm9sZVxuICAgIHRoaXMuYXBpR2F0ZXdheVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ2FwaS1nYXRld2F5LXJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJylcbiAgICB9KTtcblxuICAgIC8vIFNldHVwIHRoZSBBUEkgR2F0ZXdheSBSZXNvdXJjZVxuICAgIGNvbnN0IGFwaUdhdGV3YXlSZXNvdXJjZTogYXBpLlJlc291cmNlID0gdGhpcy5hcGlHYXRld2F5LnJvb3QuYWRkUmVzb3VyY2UoXCJ7XCIgKyByZXNvdXJjZU5hbWUgKyBcIn1cIik7XG5cbiAgICAvLyBTZXR1cCBBUEkgR2F0ZXdheSBNZXRob2RcbiAgICAvLyBDcmVhdGVcbiAgICBpZiAodGhpcy5DcmVhdGVPcGVyYXRpb25SZXF1aXJlZChwcm9wcykpIHtcbiAgICAgIHRoaXMuSW1wbGVtZW50Q3JlYXRlT3BlcmF0aW9uKHByb3BzKTtcbiAgICB9XG4gICAgLy8gUmVhZFxuICAgIGlmICh0aGlzLlJlYWRPcGVyYXRpb25SZXF1aXJlZChwcm9wcykpIHtcbiAgICAgIHRoaXMuSW1wbGVtZW50UmVhZE9wZXJhdGlvbihwcm9wcywgcGFydGl0aW9uS2V5TmFtZSwgcmVzb3VyY2VOYW1lLCBhcGlHYXRld2F5UmVzb3VyY2UpO1xuICAgIH1cbiAgICAvLyBVcGRhdGVcbiAgICBpZiAodGhpcy5VcGRhdGVPcGVyYXRpb25SZXF1aXJlZChwcm9wcykpIHtcbiAgICAgIHRoaXMuSW1wbGVtZW50VXBkYXRlT3BlcmF0aW9uKHByb3BzLCBhcGlHYXRld2F5UmVzb3VyY2UpO1xuICAgIH1cbiAgICAvLyBEZWxldGVcbiAgICBpZiAodGhpcy5EZWxldGVPcGVyYXRpb25SZXF1aXJlZChwcm9wcykpIHtcbiAgICAgIHRoaXMuSW1wbGVtZW50RGVsZXRlT3BlcmF0aW9uKHByb3BzLCBwYXJ0aXRpb25LZXlOYW1lLCByZXNvdXJjZU5hbWUsIGFwaUdhdGV3YXlSZXNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBJbXBsZW1lbnREZWxldGVPcGVyYXRpb24ocHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25LZXlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaUdhdGV3YXlSZXNvdXJjZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwaS5SZXNvdXJjZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlbGV0ZVJlcXVlc3RUZW1wbGF0ZSA9IHByb3BzLmRlbGV0ZVJlcXVlc3RUZW1wbGF0ZSA/P1xuICAgICAgICBgeyBcXFxuICAgICAgICAgIFwiVGFibGVOYW1lXCI6IFwiJHt0aGlzLmR5bmFtb1RhYmxlLnRhYmxlTmFtZX1cIiwgXFxcbiAgICAgICAgICBcIktleVwiOiB7IFxcXG4gICAgICAgICAgICBcIiR7cGFydGl0aW9uS2V5TmFtZX1cIjogeyBcXFxuICAgICAgICAgICAgICBcIlNcIjogXCIkaW5wdXQucGFyYW1zKCcke3Jlc291cmNlTmFtZX0nKVwiIFxcXG4gICAgICAgICAgICAgIH0gXFxcbiAgICAgICAgICAgIH0sIFxcXG4gICAgICAgICAgXCJSZXR1cm5WYWx1ZXNcIjogXCJBTExfT0xEXCIgXFxcbiAgICAgICAgfWA7XG5cbiAgICB0aGlzLmFkZEFjdGlvblRvUG9saWN5KFwiZHluYW1vZGI6RGVsZXRlSXRlbVwiKTtcbiAgICBjb25zdCBkZWxldGVNZXRob2RPcHRpb25zOiBhcGkuTWV0aG9kT3B0aW9ucyA9IHByb3BzLmRlbGV0ZU1ldGhvZFJlc3BvbnNlcyA/IHsgbWV0aG9kUmVzcG9uc2VzOiBwcm9wcy5kZWxldGVNZXRob2RSZXNwb25zZXMgfSA6IHt9O1xuICAgIGRlZmF1bHRzLmFkZFByb3h5TWV0aG9kVG9BcGlSZXNvdXJjZSh7XG4gICAgICBzZXJ2aWNlOiBcImR5bmFtb2RiXCIsXG4gICAgICBhY3Rpb246IFwiRGVsZXRlSXRlbVwiLFxuICAgICAgYXBpR2F0ZXdheVJvbGU6IHRoaXMuYXBpR2F0ZXdheVJvbGUsXG4gICAgICBhcGlNZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICBhcGlSZXNvdXJjZTogYXBpR2F0ZXdheVJlc291cmNlLFxuICAgICAgcmVxdWVzdFRlbXBsYXRlOiBkZWxldGVSZXF1ZXN0VGVtcGxhdGUsXG4gICAgICBhZGRpdGlvbmFsUmVxdWVzdFRlbXBsYXRlczogcHJvcHMuYWRkaXRpb25hbERlbGV0ZVJlcXVlc3RUZW1wbGF0ZXMsXG4gICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogcHJvcHMuZGVsZXRlSW50ZWdyYXRpb25SZXNwb25zZXMsXG4gICAgICBtZXRob2RPcHRpb25zOiBkZWxldGVNZXRob2RPcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudFVwZGF0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcywgYXBpR2F0ZXdheVJlc291cmNlOiBhcGkuUmVzb3VyY2UpOiB2b2lkIHtcbiAgICAvLyBJbXBsZW1lbnRVcGRhdGVPcGVyYXRpb24gY29uZmlybWVkIHRoZSBleGlzdGVuY2Ugb2YgdXBkYXRlUmVxdWVzdFRlbXBsYXRlXG4gICAgY29uc3QgdXBkYXRlUmVxdWVzdFRlbXBsYXRlID0gcHJvcHMudXBkYXRlUmVxdWVzdFRlbXBsYXRlIS5yZXBsYWNlKFwiJHtUYWJsZX1cIiwgdGhpcy5keW5hbW9UYWJsZS50YWJsZU5hbWUpO1xuICAgIHRoaXMuYWRkQWN0aW9uVG9Qb2xpY3koXCJkeW5hbW9kYjpVcGRhdGVJdGVtXCIpO1xuICAgIGNvbnN0IHVwZGF0ZU1ldGhvZE9wdGlvbnM6IGFwaS5NZXRob2RPcHRpb25zID0gcHJvcHMudXBkYXRlTWV0aG9kUmVzcG9uc2VzID8geyBtZXRob2RSZXNwb25zZXM6IHByb3BzLnVwZGF0ZU1ldGhvZFJlc3BvbnNlcyB9IDoge307XG4gICAgZGVmYXVsdHMuYWRkUHJveHlNZXRob2RUb0FwaVJlc291cmNlKHtcbiAgICAgIHNlcnZpY2U6IFwiZHluYW1vZGJcIixcbiAgICAgIGFjdGlvbjogXCJVcGRhdGVJdGVtXCIsXG4gICAgICBhcGlHYXRld2F5Um9sZTogdGhpcy5hcGlHYXRld2F5Um9sZSxcbiAgICAgIGFwaU1ldGhvZDogXCJQVVRcIixcbiAgICAgIGFwaVJlc291cmNlOiBhcGlHYXRld2F5UmVzb3VyY2UsXG4gICAgICByZXF1ZXN0VGVtcGxhdGU6IHVwZGF0ZVJlcXVlc3RUZW1wbGF0ZSxcbiAgICAgIGFkZGl0aW9uYWxSZXF1ZXN0VGVtcGxhdGVzOiBwcm9wcy5hZGRpdGlvbmFsVXBkYXRlUmVxdWVzdFRlbXBsYXRlcyxcbiAgICAgIGludGVncmF0aW9uUmVzcG9uc2VzOiBwcm9wcy51cGRhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcyxcbiAgICAgIG1ldGhvZE9wdGlvbnM6IHVwZGF0ZU1ldGhvZE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgSW1wbGVtZW50UmVhZE9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25LZXlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpR2F0ZXdheVJlc291cmNlOiBhcGkuUmVzb3VyY2UpOiB2b2lkIHtcbiAgICBjb25zdCByZWFkUmVxdWVzdFRlbXBsYXRlID0gcHJvcHMucmVhZFJlcXVlc3RUZW1wbGF0ZSA/P1xuICAgICAgICBgeyBcXFxuICAgICAgICAgIFwiVGFibGVOYW1lXCI6IFwiJHt0aGlzLmR5bmFtb1RhYmxlLnRhYmxlTmFtZX1cIiwgXFxcbiAgICAgICAgICBcIktleUNvbmRpdGlvbkV4cHJlc3Npb25cIjogXCIke3BhcnRpdGlvbktleU5hbWV9ID0gOnYxXCIsIFxcXG4gICAgICAgICAgXCJFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzXCI6IHsgXFxcbiAgICAgICAgICAgIFwiOnYxXCI6IHsgXFxcbiAgICAgICAgICAgICAgXCJTXCI6IFwiJGlucHV0LnBhcmFtcygnJHtyZXNvdXJjZU5hbWV9JylcIiBcXFxuICAgICAgICAgICAgfSBcXFxuICAgICAgICAgIH0gXFxcbiAgICAgICAgfWA7XG5cbiAgICB0aGlzLmFkZEFjdGlvblRvUG9saWN5KFwiZHluYW1vZGI6UXVlcnlcIik7XG4gICAgY29uc3QgcmVhZE1ldGhvZE9wdGlvbnM6IGFwaS5NZXRob2RPcHRpb25zID0gcHJvcHMucmVhZE1ldGhvZFJlc3BvbnNlcyA/IHsgbWV0aG9kUmVzcG9uc2VzOiBwcm9wcy5yZWFkTWV0aG9kUmVzcG9uc2VzIH0gOiB7fTtcbiAgICBkZWZhdWx0cy5hZGRQcm94eU1ldGhvZFRvQXBpUmVzb3VyY2Uoe1xuICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgYWN0aW9uOiBcIlF1ZXJ5XCIsXG4gICAgICBhcGlHYXRld2F5Um9sZTogdGhpcy5hcGlHYXRld2F5Um9sZSxcbiAgICAgIGFwaU1ldGhvZDogXCJHRVRcIixcbiAgICAgIGFwaVJlc291cmNlOiBhcGlHYXRld2F5UmVzb3VyY2UsXG4gICAgICByZXF1ZXN0VGVtcGxhdGU6IHJlYWRSZXF1ZXN0VGVtcGxhdGUsXG4gICAgICBhZGRpdGlvbmFsUmVxdWVzdFRlbXBsYXRlczogcHJvcHMuYWRkaXRpb25hbFJlYWRSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgaW50ZWdyYXRpb25SZXNwb25zZXM6IHByb3BzLnJlYWRJbnRlZ3JhdGlvblJlc3BvbnNlcyxcbiAgICAgIG1ldGhvZE9wdGlvbnM6IHJlYWRNZXRob2RPcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIEltcGxlbWVudENyZWF0ZU9wZXJhdGlvbihwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IHZvaWQge1xuICAgIC8vIEltcGxlbWVudENyZWF0ZU9wZXJhdGlvbiBoYXMgY29uZmlybWVkIHRoYXQgY3JlYXRlUmVxdWVzdFRlbXBsYXRlIGV4aXN0cylcbiAgICBjb25zdCBjcmVhdGVSZXF1ZXN0VGVtcGxhdGUgPSBwcm9wcy5jcmVhdGVSZXF1ZXN0VGVtcGxhdGUhLnJlcGxhY2UoXCIke1RhYmxlfVwiLCB0aGlzLmR5bmFtb1RhYmxlLnRhYmxlTmFtZSk7XG4gICAgdGhpcy5hZGRBY3Rpb25Ub1BvbGljeShcImR5bmFtb2RiOlB1dEl0ZW1cIik7XG4gICAgY29uc3QgY3JlYXRlTWV0aG9kT3B0aW9uczogYXBpLk1ldGhvZE9wdGlvbnMgPSBwcm9wcy5jcmVhdGVNZXRob2RSZXNwb25zZXMgPyB7IG1ldGhvZFJlc3BvbnNlczogcHJvcHMuY3JlYXRlTWV0aG9kUmVzcG9uc2VzIH0gOiB7fTtcbiAgICBkZWZhdWx0cy5hZGRQcm94eU1ldGhvZFRvQXBpUmVzb3VyY2Uoe1xuICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgYWN0aW9uOiBcIlB1dEl0ZW1cIixcbiAgICAgIGFwaUdhdGV3YXlSb2xlOiB0aGlzLmFwaUdhdGV3YXlSb2xlLFxuICAgICAgYXBpTWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIGFwaVJlc291cmNlOiB0aGlzLmFwaUdhdGV3YXkucm9vdCxcbiAgICAgIHJlcXVlc3RUZW1wbGF0ZTogY3JlYXRlUmVxdWVzdFRlbXBsYXRlLFxuICAgICAgYWRkaXRpb25hbFJlcXVlc3RUZW1wbGF0ZXM6IHByb3BzLmFkZGl0aW9uYWxDcmVhdGVSZXF1ZXN0VGVtcGxhdGVzLFxuICAgICAgaW50ZWdyYXRpb25SZXNwb25zZXM6IHByb3BzLmNyZWF0ZUludGVncmF0aW9uUmVzcG9uc2VzLFxuICAgICAgbWV0aG9kT3B0aW9uczogY3JlYXRlTWV0aG9kT3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBDaGVja0FsbFJlc3V0c1Byb3BzKHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuQ2hlY2tDcmVhdGVSZXF1ZXN0UHJvcHMocHJvcHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnYWxsb3dDcmVhdGVPcGVyYXRpb24nIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIHRydWUgd2hlbiBzZXR0aW5nIGFueSBvZiB0aGUgZm9sbG93aW5nOiBgICtcbiAgICAgICAgYCdjcmVhdGVSZXF1ZXN0VGVtcGxhdGUnLCAnYWRkaXRpb25hbENyZWF0ZVJlcXVlc3RUZW1wbGF0ZXMnLCAnY3JlYXRlSW50ZWdyYXRpb25SZXNwb25zZXMnYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLkNoZWNrUmVhZFJlcXVlc3RQcm9wcyhwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdhbGxvd1JlYWRPcGVyYXRpb24nIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIHRydWUgb3IgdW5kZWZpbmVkIHdoZW4gc2V0dGluZyBhbnkgb2YgdGhlIGZvbGxvd2luZzogYCArXG4gICAgICAgIGAncmVhZFJlcXVlc3RUZW1wbGF0ZScsICdhZGRpdGlvbmFsUmVhZFJlcXVlc3RUZW1wbGF0ZXMnLCAncmVhZEludGVncmF0aW9uUmVzcG9uc2VzJ2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy5DaGVja1VwZGF0ZVJlcXVlc3RQcm9wcyhwcm9wcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdhbGxvd1VwZGF0ZU9wZXJhdGlvbicgcHJvcGVydHkgbXVzdCBiZSBzZXQgdG8gdHJ1ZSB3aGVuIHNldHRpbmcgYW55IG9mIHRoZSBmb2xsb3dpbmc6IGAgK1xuICAgICAgICBgJ3VwZGF0ZVJlcXVlc3RUZW1wbGF0ZScsICdhZGRpdGlvbmFsVXBkYXRlUmVxdWVzdFRlbXBsYXRlcycsICd1cGRhdGVJbnRlZ3JhdGlvblJlc3BvbnNlcydgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuQ2hlY2tEZWxldGVSZXF1ZXN0UHJvcHMocHJvcHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnYWxsb3dEZWxldGVPcGVyYXRpb24nIHByb3BlcnR5IG11c3QgYmUgc2V0IHRvIHRydWUgd2hlbiBzZXR0aW5nIGFueSBvZiB0aGUgZm9sbG93aW5nOiBgICtcbiAgICAgICAgYCdkZWxldGVSZXF1ZXN0VGVtcGxhdGUnLCAnYWRkaXRpb25hbERlbGV0ZVJlcXVlc3RUZW1wbGF0ZXMnLCAnZGVsZXRlSW50ZWdyYXRpb25SZXNwb25zZXMnYCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBDaGVja1JlYWRSZXF1ZXN0UHJvcHMocHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpOiBib29sZWFuIHtcbiAgICBpZiAoKHByb3BzLnJlYWRSZXF1ZXN0VGVtcGxhdGUgfHwgcHJvcHMuYWRkaXRpb25hbFJlYWRSZXF1ZXN0VGVtcGxhdGVzIHx8IHByb3BzLnJlYWRJbnRlZ3JhdGlvblJlc3BvbnNlcylcbiAgICAgICAgJiYgcHJvcHMuYWxsb3dSZWFkT3BlcmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIENoZWNrVXBkYXRlUmVxdWVzdFByb3BzKHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKTogYm9vbGVhbiB7XG4gICAgaWYgKChwcm9wcy51cGRhdGVSZXF1ZXN0VGVtcGxhdGUgfHwgcHJvcHMuYWRkaXRpb25hbFVwZGF0ZVJlcXVlc3RUZW1wbGF0ZXMgfHwgcHJvcHMudXBkYXRlSW50ZWdyYXRpb25SZXNwb25zZXMpXG4gICAgICAgICYmIHByb3BzLmFsbG93VXBkYXRlT3BlcmF0aW9uICE9PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgQ2hlY2tEZWxldGVSZXF1ZXN0UHJvcHMocHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpOiBib29sZWFuIHtcbiAgICBpZiAoKHByb3BzLmRlbGV0ZVJlcXVlc3RUZW1wbGF0ZSB8fCBwcm9wcy5hZGRpdGlvbmFsRGVsZXRlUmVxdWVzdFRlbXBsYXRlcyB8fCBwcm9wcy5kZWxldGVJbnRlZ3JhdGlvblJlc3BvbnNlcylcbiAgICAgICAgJiYgcHJvcHMuYWxsb3dEZWxldGVPcGVyYXRpb24gIT09IHRydWUpICB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBDaGVja0NyZWF0ZVJlcXVlc3RQcm9wcyhwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmICgocHJvcHMuY3JlYXRlUmVxdWVzdFRlbXBsYXRlIHx8IHByb3BzLmFkZGl0aW9uYWxDcmVhdGVSZXF1ZXN0VGVtcGxhdGVzIHx8IHByb3BzLmNyZWF0ZUludGVncmF0aW9uUmVzcG9uc2VzKVxuICAgICAgICAmJiBwcm9wcy5hbGxvd0NyZWF0ZU9wZXJhdGlvbiAhPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgQ3JlYXRlT3BlcmF0aW9uUmVxdWlyZWQocHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpOiBib29sZWFuIHtcbiAgICBpZiAocHJvcHMuYWxsb3dDcmVhdGVPcGVyYXRpb24gJiYgcHJvcHMuYWxsb3dDcmVhdGVPcGVyYXRpb24gPT09IHRydWUgJiYgcHJvcHMuY3JlYXRlUmVxdWVzdFRlbXBsYXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBSZWFkT3BlcmF0aW9uUmVxdWlyZWQocHJvcHM6IEFwaUdhdGV3YXlUb0R5bmFtb0RCUHJvcHMpOiBib29sZWFuIHtcbiAgICBpZiAocHJvcHMuYWxsb3dSZWFkT3BlcmF0aW9uID09PSB1bmRlZmluZWQgfHwgcHJvcHMuYWxsb3dSZWFkT3BlcmF0aW9uID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBVcGRhdGVPcGVyYXRpb25SZXF1aXJlZChwcm9wczogQXBpR2F0ZXdheVRvRHluYW1vREJQcm9wcyk6IGJvb2xlYW4ge1xuICAgIGlmIChwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiAmJiBwcm9wcy5hbGxvd1VwZGF0ZU9wZXJhdGlvbiA9PT0gdHJ1ZSAmJiBwcm9wcy51cGRhdGVSZXF1ZXN0VGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIERlbGV0ZU9wZXJhdGlvblJlcXVpcmVkKHByb3BzOiBBcGlHYXRld2F5VG9EeW5hbW9EQlByb3BzKTogYm9vbGVhbiB7XG4gICAgaWYgKHByb3BzLmFsbG93RGVsZXRlT3BlcmF0aW9uICYmIHByb3BzLmFsbG93RGVsZXRlT3BlcmF0aW9uID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBY3Rpb25Ub1BvbGljeShhY3Rpb246IHN0cmluZykge1xuICAgIHRoaXMuYXBpR2F0ZXdheVJvbGUuYWRkVG9Qb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIHRoaXMuZHluYW1vVGFibGUudGFibGVBcm5cbiAgICAgIF0sXG4gICAgICBhY3Rpb25zOiBbYCR7YWN0aW9ufWBdXG4gICAgfSkpO1xuICB9XG59Il19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-solutions-constructs/aws-apigateway-dynamodb",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.92.1",
|
|
4
4
|
"description": "CDK Constructs for AWS API Gateway and Amazon DynamoDB integration.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -55,15 +55,15 @@
|
|
|
55
55
|
}
|
|
56
56
|
},
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@aws-solutions-constructs/core": "2.
|
|
58
|
+
"@aws-solutions-constructs/core": "2.92.1",
|
|
59
59
|
"constructs": "^10.0.0"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
62
|
+
"@aws-cdk/integ-tests-alpha": "2.212.0-alpha.0",
|
|
63
63
|
"@types/jest": "^27.4.0",
|
|
64
64
|
"@types/node": "^10.3.0",
|
|
65
65
|
"constructs": "^10.0.0",
|
|
66
|
-
"aws-cdk-lib": "2.
|
|
66
|
+
"aws-cdk-lib": "2.212.0"
|
|
67
67
|
},
|
|
68
68
|
"jest": {
|
|
69
69
|
"moduleFileExtensions": [
|
|
@@ -80,9 +80,9 @@
|
|
|
80
80
|
]
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
|
-
"@aws-solutions-constructs/core": "2.
|
|
83
|
+
"@aws-solutions-constructs/core": "2.92.1",
|
|
84
84
|
"constructs": "^10.0.0",
|
|
85
|
-
"aws-cdk-lib": "^2.
|
|
85
|
+
"aws-cdk-lib": "^2.212.0"
|
|
86
86
|
},
|
|
87
87
|
"keywords": [
|
|
88
88
|
"aws",
|