cdk-dms-replication 0.0.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.
- package/.jsii +13491 -0
- package/API.md +8606 -0
- package/LICENSE +202 -0
- package/README.md +883 -0
- package/cdk.context.json +1 -0
- package/integ/sample-app.ts +229 -0
- package/lib/dms-roles.d.ts +14 -0
- package/lib/dms-roles.js +42 -0
- package/lib/endpoint-settings.d.ts +419 -0
- package/lib/endpoint-settings.js +3 -0
- package/lib/endpoint.d.ts +143 -0
- package/lib/endpoint.js +402 -0
- package/lib/enums.d.ts +231 -0
- package/lib/enums.js +266 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +49 -0
- package/lib/migration-pipeline.d.ts +253 -0
- package/lib/migration-pipeline.js +218 -0
- package/lib/replication-instance.d.ts +99 -0
- package/lib/replication-instance.js +93 -0
- package/lib/replication-task.d.ts +72 -0
- package/lib/replication-task.js +46 -0
- package/lib/serverless-pipeline.d.ts +196 -0
- package/lib/serverless-pipeline.js +271 -0
- package/lib/table-mappings.d.ts +178 -0
- package/lib/table-mappings.js +283 -0
- package/lib/task-settings.d.ts +228 -0
- package/lib/task-settings.js +291 -0
- package/package.json +170 -0
- package/scripts/sync-instance-classes.js +213 -0
package/lib/endpoint.js
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DmsEndpoint = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const cdk = require("aws-cdk-lib");
|
|
7
|
+
const dms = require("aws-cdk-lib/aws-dms");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
const enums_1 = require("./enums");
|
|
10
|
+
/**
|
|
11
|
+
* A DMS endpoint construct supporting every engine that DMS supports.
|
|
12
|
+
*
|
|
13
|
+
* Set `engine` to the desired {@link EndpointEngine} and supply the
|
|
14
|
+
* matching `*Settings` property. All other `*Settings` properties are
|
|
15
|
+
* ignored at runtime.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // MySQL source
|
|
19
|
+
* new DmsEndpoint(this, 'Source', {
|
|
20
|
+
* endpointType: EndpointType.SOURCE,
|
|
21
|
+
* engine: EndpointEngine.MYSQL,
|
|
22
|
+
* serverName: 'mysql.example.com',
|
|
23
|
+
* port: 3306,
|
|
24
|
+
* username: 'dms_user',
|
|
25
|
+
* password: cdk.SecretValue.ssmSecure('/dms/mysql/password'),
|
|
26
|
+
* databaseName: 'mydb',
|
|
27
|
+
* });
|
|
28
|
+
*/
|
|
29
|
+
class DmsEndpoint extends constructs_1.Construct {
|
|
30
|
+
static validateEngineEndpointType(engine, endpointType) {
|
|
31
|
+
if (endpointType === enums_1.EndpointType.SOURCE &&
|
|
32
|
+
DmsEndpoint.TARGET_ONLY_ENGINES.includes(engine)) {
|
|
33
|
+
throw new Error(`Engine '${engine}' is only supported as a TARGET endpoint, not as a SOURCE.`);
|
|
34
|
+
}
|
|
35
|
+
if (endpointType === enums_1.EndpointType.TARGET &&
|
|
36
|
+
DmsEndpoint.SOURCE_ONLY_ENGINES.includes(engine)) {
|
|
37
|
+
throw new Error(`Engine '${engine}' is only supported as a SOURCE endpoint, not as a TARGET.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
constructor(scope, id, props) {
|
|
41
|
+
super(scope, id);
|
|
42
|
+
DmsEndpoint.validateEngineEndpointType(props.engine, props.endpointType);
|
|
43
|
+
const endpointIdentifier = props.endpointIdentifier ??
|
|
44
|
+
cdk.Names.uniqueResourceName(this, { maxLength: 63 }).toLowerCase();
|
|
45
|
+
this.cfnEndpoint = new dms.CfnEndpoint(this, 'Resource', {
|
|
46
|
+
endpointType: props.endpointType,
|
|
47
|
+
engineName: props.engine,
|
|
48
|
+
endpointIdentifier,
|
|
49
|
+
serverName: props.serverName,
|
|
50
|
+
port: props.port,
|
|
51
|
+
username: props.username,
|
|
52
|
+
password: props.password?.unsafeUnwrap(),
|
|
53
|
+
databaseName: props.databaseName,
|
|
54
|
+
extraConnectionAttributes: props.extraConnectionAttributes,
|
|
55
|
+
certificateArn: props.certificateArn,
|
|
56
|
+
sslMode: props.sslMode ?? 'none',
|
|
57
|
+
// Engine-specific settings — only one should be set per endpoint
|
|
58
|
+
mySqlSettings: this.buildMySqlSettings(props),
|
|
59
|
+
postgreSqlSettings: this.buildPostgreSqlSettings(props),
|
|
60
|
+
oracleSettings: this.buildOracleSettings(props),
|
|
61
|
+
microsoftSqlServerSettings: this.buildSqlServerSettings(props),
|
|
62
|
+
sybaseSettings: this.buildSapAseSettings(props),
|
|
63
|
+
ibmDb2Settings: this.buildDb2Settings(props),
|
|
64
|
+
mongoDbSettings: this.buildMongoDbSettings(props),
|
|
65
|
+
s3Settings: this.buildS3Settings(props),
|
|
66
|
+
dynamoDbSettings: this.buildDynamoDbSettings(props),
|
|
67
|
+
redshiftSettings: this.buildRedshiftSettings(props),
|
|
68
|
+
kinesisSettings: this.buildKinesisSettings(props),
|
|
69
|
+
kafkaSettings: this.buildKafkaSettings(props),
|
|
70
|
+
elasticsearchSettings: this.buildOpenSearchSettings(props),
|
|
71
|
+
neptuneSettings: this.buildNeptuneSettings(props),
|
|
72
|
+
redisSettings: this.buildRedisSettings(props),
|
|
73
|
+
docDbSettings: this.buildDocDbSettings(props),
|
|
74
|
+
});
|
|
75
|
+
this.cfnEndpoint.applyRemovalPolicy(props.removalPolicy ?? cdk.RemovalPolicy.DESTROY);
|
|
76
|
+
this.endpointArn = this.cfnEndpoint.ref;
|
|
77
|
+
}
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Private mapping helpers — translate typed interfaces to CFN property shapes
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
buildMySqlSettings(props) {
|
|
82
|
+
const s = props.mySqlSettings;
|
|
83
|
+
if (!s)
|
|
84
|
+
return undefined;
|
|
85
|
+
return {
|
|
86
|
+
afterConnectScript: s.afterConnectScript,
|
|
87
|
+
cleanSourceMetadataOnMismatch: s.cleanSourceMetadataOnMismatch,
|
|
88
|
+
eventsPollInterval: s.eventsPollInterval,
|
|
89
|
+
maxFileSize: s.maxFileSize,
|
|
90
|
+
parallelLoadThreads: s.parallelLoadThreads,
|
|
91
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
92
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
93
|
+
serverTimezone: s.serverTimezone,
|
|
94
|
+
targetDbType: s.targetDbType,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
buildPostgreSqlSettings(props) {
|
|
98
|
+
const s = props.postgreSqlSettings;
|
|
99
|
+
if (!s)
|
|
100
|
+
return undefined;
|
|
101
|
+
return {
|
|
102
|
+
afterConnectScript: s.afterConnectScript,
|
|
103
|
+
captureDdls: s.captureDdls,
|
|
104
|
+
ddlArtifactsSchema: s.ddlArtifactsSchema,
|
|
105
|
+
executeTimeout: s.executeTimeout,
|
|
106
|
+
failTasksOnLobTruncation: s.failTasksOnLobTruncation,
|
|
107
|
+
heartbeatEnable: s.heartbeatEnable,
|
|
108
|
+
heartbeatFrequency: s.heartbeatFrequency,
|
|
109
|
+
heartbeatSchema: s.heartbeatSchema,
|
|
110
|
+
mapBooleanAsBoolean: s.mapBooleanAsBoolean,
|
|
111
|
+
maxFileSize: s.maxFileSize,
|
|
112
|
+
pluginName: s.pluginName,
|
|
113
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
114
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
115
|
+
slotName: s.slotName,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
buildOracleSettings(props) {
|
|
119
|
+
const s = props.oracleSettings;
|
|
120
|
+
if (!s)
|
|
121
|
+
return undefined;
|
|
122
|
+
return {
|
|
123
|
+
accessAlternateDirectly: s.accessAlternateDirectly,
|
|
124
|
+
addSupplementalLogging: s.addSupplementalLogging,
|
|
125
|
+
additionalArchivedLogDestId: s.additionalArchivedLogDestId,
|
|
126
|
+
allowSelectNestedTables: s.allowSelectNestedTables,
|
|
127
|
+
archivedLogDestId: s.archivedLogDestId,
|
|
128
|
+
archivedLogsOnly: s.archivedLogsOnly,
|
|
129
|
+
asmPassword: s.asmPassword?.unsafeUnwrap(),
|
|
130
|
+
asmServer: s.asmServer,
|
|
131
|
+
asmUser: s.asmUser,
|
|
132
|
+
charLengthSemantics: s.charLengthSemantics,
|
|
133
|
+
directPathNoLog: s.directPathNoLog,
|
|
134
|
+
directPathParallelLoad: s.directPathParallelLoad,
|
|
135
|
+
enableHomogenousTablespace: s.enableHomogenousTablespace,
|
|
136
|
+
extraArchivedLogDestIds: s.extraArchivedLogDestIds,
|
|
137
|
+
failTasksOnLobTruncation: s.failTasksOnLobTruncation,
|
|
138
|
+
numberDatatypeScale: s.numberDatatypeScale,
|
|
139
|
+
oraclePathPrefix: s.oraclePathPrefix,
|
|
140
|
+
parallelAsmReadThreads: s.parallelAsmReadThreads,
|
|
141
|
+
readAheadBlocks: s.readAheadBlocks,
|
|
142
|
+
readTableSpaceName: s.readTableSpaceName,
|
|
143
|
+
retryInterval: s.retryInterval,
|
|
144
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
145
|
+
secretsManagerOracleAsmAccessRoleArn: s.secretsManagerOracleAsmAccessRoleArn,
|
|
146
|
+
secretsManagerOracleAsmSecretId: s.secretsManagerOracleAsmSecretId,
|
|
147
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
148
|
+
securityDbEncryptionName: s.securityDbEncryptionName,
|
|
149
|
+
useAlternateFolderForOnline: s.useAlternateFolderForOnline,
|
|
150
|
+
useBFile: s.useBFile,
|
|
151
|
+
useDirectPathFullLoad: s.useDirectPathFullLoad,
|
|
152
|
+
useLogminerReader: s.useLogminerReader,
|
|
153
|
+
usePathPrefix: s.usePathPrefix,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
buildSqlServerSettings(props) {
|
|
157
|
+
const s = props.sqlServerSettings;
|
|
158
|
+
if (!s)
|
|
159
|
+
return undefined;
|
|
160
|
+
return {
|
|
161
|
+
bcpPacketSize: s.bcpPacketSize,
|
|
162
|
+
controlTablesFileGroup: s.controlTablesFileGroup,
|
|
163
|
+
querySingleAlwaysOnNode: s.querySingleAlwaysOnNode,
|
|
164
|
+
readBackupOnly: s.readBackupOnly,
|
|
165
|
+
safeguardPolicy: s.safeguardPolicy,
|
|
166
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
167
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
168
|
+
useBcpFullLoad: s.useBcpFullLoad,
|
|
169
|
+
useThirdPartyBackupDevice: s.useThirdPartyBackupDevice,
|
|
170
|
+
trimSpaceInChar: s.trimSpaceInChar,
|
|
171
|
+
tlogAccessMode: s.tlogAccessMode,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
buildSapAseSettings(props) {
|
|
175
|
+
const s = props.sapAseSettings;
|
|
176
|
+
if (!s)
|
|
177
|
+
return undefined;
|
|
178
|
+
return {
|
|
179
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
180
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
buildDb2Settings(props) {
|
|
184
|
+
const s = props.db2Settings;
|
|
185
|
+
if (!s)
|
|
186
|
+
return undefined;
|
|
187
|
+
return {
|
|
188
|
+
currentLsn: s.currentLsn,
|
|
189
|
+
maxKBytesPerRead: s.maxKBytesPerRead,
|
|
190
|
+
setDataCaptureChanges: s.setDataCaptureChanges,
|
|
191
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
192
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
buildMongoDbSettings(props) {
|
|
196
|
+
const s = props.mongoDbSettings;
|
|
197
|
+
if (!s)
|
|
198
|
+
return undefined;
|
|
199
|
+
return {
|
|
200
|
+
authMechanism: s.authMechanism,
|
|
201
|
+
authSource: s.authSource,
|
|
202
|
+
authType: s.authType,
|
|
203
|
+
docsToInvestigate: s.docsToInvestigate?.toString(),
|
|
204
|
+
extractDocId: s.extractDocId?.toString(),
|
|
205
|
+
nestingLevel: s.nestingLevel,
|
|
206
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
207
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
buildDocDbSettings(props) {
|
|
211
|
+
if (props.engine !== enums_1.EndpointEngine.DOCDB)
|
|
212
|
+
return undefined;
|
|
213
|
+
const s = props.mongoDbSettings;
|
|
214
|
+
if (!s)
|
|
215
|
+
return undefined;
|
|
216
|
+
return {
|
|
217
|
+
docsToInvestigate: s.docsToInvestigate,
|
|
218
|
+
extractDocId: s.extractDocId,
|
|
219
|
+
nestingLevel: s.nestingLevel,
|
|
220
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
221
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
buildS3Settings(props) {
|
|
225
|
+
const s = props.s3Settings;
|
|
226
|
+
if (!s)
|
|
227
|
+
return undefined;
|
|
228
|
+
return {
|
|
229
|
+
bucketName: s.bucketName,
|
|
230
|
+
bucketFolder: s.bucketFolder,
|
|
231
|
+
serviceAccessRoleArn: s.serviceAccessRoleArn,
|
|
232
|
+
addColumnName: s.addColumnName,
|
|
233
|
+
cdcInsertsAndUpdates: s.cdcInsertsAndUpdates,
|
|
234
|
+
cdcInsertsOnly: s.cdcInsertsOnly,
|
|
235
|
+
cdcMaxBatchInterval: s.cdcMaxBatchInterval,
|
|
236
|
+
cdcMinFileSize: s.cdcMinFileSize,
|
|
237
|
+
cdcPath: s.cdcPath,
|
|
238
|
+
csvDelimiter: s.csvDelimiter,
|
|
239
|
+
csvNoSupValue: s.csvNoSupValue,
|
|
240
|
+
csvNullValue: s.csvNullValue,
|
|
241
|
+
csvRowDelimiter: s.csvRowDelimiter,
|
|
242
|
+
dataFormat: s.dataFormat,
|
|
243
|
+
datePartitionDelimiter: s.datePartitionDelimiter,
|
|
244
|
+
datePartitionEnabled: s.datePartitionEnabled,
|
|
245
|
+
datePartitionSequence: s.datePartitionSequence,
|
|
246
|
+
dictPageSizeLimit: s.dictPageSizeLimit,
|
|
247
|
+
enableStatistics: s.enableStatistics,
|
|
248
|
+
encodingType: s.encodingType,
|
|
249
|
+
encryptionMode: s.encryptionMode,
|
|
250
|
+
externalTableDefinition: s.externalTableDefinition,
|
|
251
|
+
ignoreHeaderRows: s.ignoreHeaderRows,
|
|
252
|
+
includeOpForFullLoad: s.includeOpForFullLoad,
|
|
253
|
+
maxFileSize: s.maxFileSize,
|
|
254
|
+
parquetTimestampInMillisecond: s.parquetTimestampInMillisecond,
|
|
255
|
+
parquetVersion: s.parquetVersion,
|
|
256
|
+
preserveTransactions: s.preserveTransactions,
|
|
257
|
+
rfc4180: s.rfc4180,
|
|
258
|
+
rowGroupLength: s.rowGroupLength,
|
|
259
|
+
serverSideEncryptionKmsKeyId: s.serverSideEncryptionKmsKeyId,
|
|
260
|
+
timestampColumnName: s.timestampColumnName,
|
|
261
|
+
useCsvNoSupValue: s.useCsvNoSupValue,
|
|
262
|
+
useTaskStartTimeForFullLoadTimestamp: s.useTaskStartTimeForFullLoadTimestamp,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
buildDynamoDbSettings(props) {
|
|
266
|
+
const s = props.dynamoDbSettings;
|
|
267
|
+
if (!s)
|
|
268
|
+
return undefined;
|
|
269
|
+
return { serviceAccessRoleArn: s.serviceAccessRoleArn };
|
|
270
|
+
}
|
|
271
|
+
buildRedshiftSettings(props) {
|
|
272
|
+
const s = props.redshiftSettings;
|
|
273
|
+
if (!s)
|
|
274
|
+
return undefined;
|
|
275
|
+
return {
|
|
276
|
+
acceptAnyDate: s.acceptAnyDate,
|
|
277
|
+
afterConnectScript: s.afterConnectScript,
|
|
278
|
+
bucketFolder: s.bucketFolder,
|
|
279
|
+
bucketName: s.bucketName,
|
|
280
|
+
caseSensitiveNames: s.caseSensitiveNames,
|
|
281
|
+
compUpdate: s.compUpdate,
|
|
282
|
+
connectionTimeout: s.connectionTimeout,
|
|
283
|
+
dateFormat: s.dateFormat,
|
|
284
|
+
emptyAsNull: s.emptyAsNull,
|
|
285
|
+
encryptionMode: s.encryptionMode,
|
|
286
|
+
explicitIds: s.explicitIds,
|
|
287
|
+
fileTransferUploadStreams: s.fileTransferUploadStreams,
|
|
288
|
+
loadTimeout: s.loadTimeout,
|
|
289
|
+
maxFileSize: s.maxFileSize,
|
|
290
|
+
removeQuotes: s.removeQuotes,
|
|
291
|
+
replaceInvalidChars: s.replaceInvalidChars,
|
|
292
|
+
replaceChars: s.replaceChars,
|
|
293
|
+
secretsManagerAccessRoleArn: s.secretsManagerAccessRoleArn,
|
|
294
|
+
secretsManagerSecretId: s.secretsManagerSecretId,
|
|
295
|
+
serverSideEncryptionKmsKeyId: s.serverSideEncryptionKmsKeyId,
|
|
296
|
+
serviceAccessRoleArn: s.serviceAccessRoleArn,
|
|
297
|
+
timeFormat: s.timeFormat,
|
|
298
|
+
trimBlanks: s.trimBlanks,
|
|
299
|
+
truncateColumns: s.truncateColumns,
|
|
300
|
+
writeBufferSize: s.writeBufferSize,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
buildKinesisSettings(props) {
|
|
304
|
+
const s = props.kinesisSettings;
|
|
305
|
+
if (!s)
|
|
306
|
+
return undefined;
|
|
307
|
+
return {
|
|
308
|
+
streamArn: s.streamArn,
|
|
309
|
+
serviceAccessRoleArn: s.serviceAccessRoleArn,
|
|
310
|
+
includeControlDetails: s.includeControlDetails,
|
|
311
|
+
includeNullAndEmpty: s.includeNullAndEmpty,
|
|
312
|
+
includePartitionValue: s.includePartitionValue,
|
|
313
|
+
includeTableAlterOperations: s.includeTableAlterOperations,
|
|
314
|
+
includeTransactionDetails: s.includeTransactionDetails,
|
|
315
|
+
messageFormat: s.messageFormat,
|
|
316
|
+
noHexPrefix: s.noHexPrefix,
|
|
317
|
+
partitionIncludeSchemaTable: s.partitionIncludeSchemaTable,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
buildKafkaSettings(props) {
|
|
321
|
+
const s = props.kafkaSettings;
|
|
322
|
+
if (!s)
|
|
323
|
+
return undefined;
|
|
324
|
+
return {
|
|
325
|
+
broker: s.broker,
|
|
326
|
+
topic: s.topic,
|
|
327
|
+
includeControlDetails: s.includeControlDetails,
|
|
328
|
+
includeNullAndEmpty: s.includeNullAndEmpty,
|
|
329
|
+
includePartitionValue: s.includePartitionValue,
|
|
330
|
+
includeTableAlterOperations: s.includeTableAlterOperations,
|
|
331
|
+
includeTransactionDetails: s.includeTransactionDetails,
|
|
332
|
+
messageFormat: s.messageFormat,
|
|
333
|
+
messageMaxBytes: s.messageMaxBytes,
|
|
334
|
+
noHexPrefix: s.noHexPrefix,
|
|
335
|
+
partitionIncludeSchemaTable: s.partitionIncludeSchemaTable,
|
|
336
|
+
securityProtocol: s.securityProtocol,
|
|
337
|
+
saslUserName: s.saslUsername,
|
|
338
|
+
saslPassword: s.saslPassword?.unsafeUnwrap(),
|
|
339
|
+
sslCaCertificateArn: s.sslCaCertificateArn,
|
|
340
|
+
sslClientCertificateArn: s.sslClientCertificateArn,
|
|
341
|
+
sslClientKeyArn: s.sslClientKeyArn,
|
|
342
|
+
sslClientKeyPassword: s.sslClientKeyPassword?.unsafeUnwrap(),
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
buildOpenSearchSettings(props) {
|
|
346
|
+
const s = props.openSearchSettings;
|
|
347
|
+
if (!s)
|
|
348
|
+
return undefined;
|
|
349
|
+
return {
|
|
350
|
+
endpointUri: s.endpointUri,
|
|
351
|
+
serviceAccessRoleArn: s.serviceAccessRoleArn,
|
|
352
|
+
errorRetryDuration: s.errorRetryDuration,
|
|
353
|
+
fullLoadErrorPercentage: s.fullLoadErrorPercentage,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
buildNeptuneSettings(props) {
|
|
357
|
+
const s = props.neptuneSettings;
|
|
358
|
+
if (!s)
|
|
359
|
+
return undefined;
|
|
360
|
+
return {
|
|
361
|
+
s3BucketName: s.s3BucketName,
|
|
362
|
+
s3BucketFolder: s.s3BucketFolder,
|
|
363
|
+
serviceAccessRoleArn: s.serviceAccessRoleArn,
|
|
364
|
+
errorRetryDuration: s.errorRetryDuration,
|
|
365
|
+
iamAuthEnabled: s.iamAuthEnabled,
|
|
366
|
+
maxFileSize: s.maxFileSize,
|
|
367
|
+
maxRetryCount: s.maxRetryCount,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
buildRedisSettings(props) {
|
|
371
|
+
const s = props.redisSettings;
|
|
372
|
+
if (!s)
|
|
373
|
+
return undefined;
|
|
374
|
+
return {
|
|
375
|
+
serverName: s.serverName,
|
|
376
|
+
port: s.port ?? 6379,
|
|
377
|
+
sslSecurityProtocol: s.sslSecurityProtocol,
|
|
378
|
+
authType: s.authType,
|
|
379
|
+
authUserName: s.authUserName,
|
|
380
|
+
authPassword: s.authPassword?.unsafeUnwrap(),
|
|
381
|
+
sslCaCertificateArn: s.sslCaCertificateArn,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
exports.DmsEndpoint = DmsEndpoint;
|
|
386
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
387
|
+
DmsEndpoint[_a] = { fqn: "cdk-dms-replication.DmsEndpoint", version: "0.0.0" };
|
|
388
|
+
// ---------------------------------------------------------------------------
|
|
389
|
+
// Static validation data — declared first to satisfy member-ordering rules
|
|
390
|
+
// ---------------------------------------------------------------------------
|
|
391
|
+
DmsEndpoint.TARGET_ONLY_ENGINES = [
|
|
392
|
+
enums_1.EndpointEngine.DYNAMODB,
|
|
393
|
+
enums_1.EndpointEngine.KINESIS,
|
|
394
|
+
enums_1.EndpointEngine.KAFKA,
|
|
395
|
+
enums_1.EndpointEngine.OPENSEARCH,
|
|
396
|
+
enums_1.EndpointEngine.NEPTUNE,
|
|
397
|
+
enums_1.EndpointEngine.REDIS,
|
|
398
|
+
];
|
|
399
|
+
DmsEndpoint.SOURCE_ONLY_ENGINES = [
|
|
400
|
+
enums_1.EndpointEngine.IBM_DB2_ZOS,
|
|
401
|
+
];
|
|
402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZW5kcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUF1QztBQWtCdkMsbUNBQXVEO0FBbUl2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFrQmhDLE1BQU0sQ0FBQywwQkFBMEIsQ0FDdkMsTUFBc0IsRUFDdEIsWUFBMEI7UUFFMUIsSUFDRSxZQUFZLEtBQUssb0JBQVksQ0FBQyxNQUFNO1lBQ3BDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQ2hELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLFdBQVcsTUFBTSw0REFBNEQsQ0FDOUUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUNFLFlBQVksS0FBSyxvQkFBWSxDQUFDLE1BQU07WUFDcEMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFDaEQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsV0FBVyxNQUFNLDREQUE0RCxDQUM5RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFZRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsV0FBVyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXpFLE1BQU0sa0JBQWtCLEdBQ3RCLEtBQUssQ0FBQyxrQkFBa0I7WUFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV0RSxJQUFJLENBQUMs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QUFJLElBQUksSUFBSTtZQUNwQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1lBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtZQUNwQixZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVk7WUFDNUIsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFO1lBQzVDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxtQkFBbUI7U0FDM0MsQ0FBQztJQUNKLENBQUM7O0FBL2FILGtDQWliQzs7O0FBaGJDLDhFQUE4RTtBQUM5RSwyRUFBMkU7QUFDM0UsOEVBQThFO0FBRXRELCtCQUFtQixHQUFxQjtJQUM5RCxzQkFBYyxDQUFDLFFBQVE7SUFDdkIsc0JBQWMsQ0FBQyxPQUFPO0lBQ3RCLHNCQUFjLENBQUMsS0FBSztJQUNwQixzQkFBYyxDQUFDLFVBQVU7SUFDekIsc0JBQWMsQ0FBQyxPQUFPO0lBQ3RCLHNCQUFjLENBQUMsS0FBSztDQUNyQixDQUFDO0FBRXNCLCtCQUFtQixHQUFxQjtJQUM5RCxzQkFBYyxDQUFDLFdBQVc7Q0FDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBkbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWRtcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7XG4gIERiMlNldHRpbmdzLFxuICBEeW5hbW9EYlNldHRpbmdzLFxuICBLYWZrYVNldHRpbmdzLFxuICBLaW5lc2lzU2V0dGluZ3MsXG4gIE1vbmdvRGJTZXR0aW5ncyxcbiAgTXlTcWxTZXR0aW5ncyxcbiAgTmVwdHVuZVNldHRpbmdzLFxuICBPcGVuU2VhcmNoU2V0dGluZ3MsXG4gIE9yYWNsZVNldHRpbmdzLFxuICBQb3N0Z3JlU3FsU2V0dGluZ3MsXG4gIFJlZGlzU2V0dGluZ3MsXG4gIFJlZHNoaWZ0U2V0dGluZ3MsXG4gIFMzU2V0dGluZ3MsXG4gIFNhcEFzZVNldHRpbmdzLFxuICBTcWxTZXJ2ZXJTZXR0aW5ncyxcbn0gZnJvbSAnLi9lbmRwb2ludC1zZXR0aW5ncyc7XG5pbXBvcnQgeyBFbmRwb2ludEVuZ2luZSwgRW5kcG9pbnRUeXBlIH0gZnJvbSAnLi9lbnVtcyc7XG5cbi8qKlxuICogTWluaW1hbCBjb250cmFjdCBmb3IgYSBETVMgZW5kcG9pbnQgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHNvdXJjZSBvciB0YXJnZXRcbiAqIGluIGEge0BsaW5rIERtc1JlcGxpY2F0aW9uVGFza30gb3Ige0BsaW5rIERtc01pZ3JhdGlvblBpcGVsaW5lfS5cbiAqXG4gKiBVc2UgdGhpcyBpbnRlcmZhY2Ugd2hlbiByZWZlcmVuY2luZyBhbiBlbmRwb2ludCBjcmVhdGVkIG91dHNpZGUgb2YgdGhpc1xuICogY29uc3RydWN0IChlLmcuIGJ5IEFSTikuIEZvciBlbmRwb2ludHMgY3JlYXRlZCBieSB0aGlzIGxpYnJhcnksIHVzZSB0aGVcbiAqIGNvbmNyZXRlIHtAbGluayBEbXNFbmRwb2ludH0gY2xhc3MgZGlyZWN0bHkg4oCUIGl0IGV4cG9zZXMgYGNmbkVuZHBvaW50YFxuICogZm9yIEwxIGVzY2FwZS1oYXRjaCBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURtc0VuZHBvaW50IHtcbiAgLyoqIEFSTiBvZiB0aGUgRE1TIGVuZHBvaW50LiAqL1xuICByZWFkb25seSBlbmRwb2ludEFybjogc3RyaW5nO1xufVxuXG4vKiogUHJvcHMgZm9yIHtAbGluayBEbXNFbmRwb2ludH0uICovXG5leHBvcnQgaW50ZXJmYWNlIERtc0VuZHBvaW50UHJvcHMge1xuICAvKiogV2hldGhlciB0aGlzIGlzIGEgc291cmNlIG9yIHRhcmdldCBlbmRwb2ludC4gKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGU7XG5cbiAgLyoqIERhdGFiYXNlIGVuZ2luZSBmb3IgdGhpcyBlbmRwb2ludC4gKi9cbiAgcmVhZG9ubHkgZW5naW5lOiBFbmRwb2ludEVuZ2luZTtcblxuICAvKipcbiAgICogTG9naWNhbCBpZGVudGlmaWVyIG9mIHRoZSBlbmRwb2ludCAodXNlZCBhcyB0aGUgRE1TIGVuZHBvaW50IGlkZW50aWZpZXIpLlxuICAgKiBBdXRvLWdlbmVyYXRlZCBmcm9tIHRoZSBjb25zdHJ1Y3QgSUQgaWYgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRJZGVudGlmaWVyPzogc3RyaW5nO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ29tbW9uIGNvbm5lY3Rpb24gc2V0dGluZ3MgKHVzZWQgZm9yIG1vc3QgZW5naW5lIHR5cGVzKVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIERhdGFiYXNlIHNlcnZlciBob3N0bmFtZSBvciBJUCBhZGRyZXNzLiAqL1xuICByZWFkb25seSBzZXJ2ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBEYXRhYmFzZSBwb3J0LiAqL1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuXG4gIC8qKiBEYXRhYmFzZSB1c2VyIG5hbWUuIFVzZWQgd2hlbiBub3QgdXNpbmcgU2VjcmV0cyBNYW5hZ2VyLiAqL1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWJhc2UgcGFzc3dvcmQuXG4gICAqXG4gICAqIEB3YXJuaW5nIFRoZSByZXNvbHZlZCB2YWx1ZSBpcyBzdG9yZWQgYXMgKipwbGFpbnRleHQqKiBpbiB0aGUgQ2xvdWRGb3JtYXRpb25cbiAgICogdGVtcGxhdGUgYW5kIHN0YXRlIGZpbGUuIEZvciBwcm9kdWN0aW9uIHdvcmtsb2FkcywgdXNlIFNlY3JldHMgTWFuYWdlclxuICAgKiBpbnN0ZWFkOiBzZXQgYHNlY3JldHNNYW5hZ2VyU2VjcmV0SWRgIGFuZCBgc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuYFxuICAgKiBpbiB0aGUgZW5naW5lLXNwZWNpZmljIHNldHRpbmdzIChlLmcuIGBteVNxbFNldHRpbmdzYCwgYHBvc3RncmVTcWxTZXR0aW5nc2ApXG4gICAqIGFuZCBvbWl0IHRoaXMgcHJvcGVydHkgZW50aXJlbHkuXG4gICAqL1xuICByZWFkb25seSBwYXNzd29yZD86IGNkay5TZWNyZXRWYWx1ZTtcblxuICAvKiogRGF0YWJhc2UgbmFtZSBvbiB0aGUgZW5kcG9pbnQuICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgY29ubmVjdGlvbiBhdHRyaWJ1dGVzIGFzIGEgc2VtaWNvbG9uLXNlcGFyYXRlZCBzdHJpbmcuXG4gICAqIFJlZmVyIHRvIHRoZSBETVMgZG9jdW1lbnRhdGlvbiBmb3IgZW5naW5lLXNwZWNpZmljIGF0dHJpYnV0ZXMuXG4gICAqL1xuICByZWFkb25seSBleHRyYUNvbm5lY3Rpb25BdHRyaWJ1dGVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIFNTTCBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgY2VydGlmaWNhdGUuXG4gICAqIFJlcXVpcmVkIHdoZW4gc3NsTW9kZSBpcyAndmVyaWZ5LWNhJyBvciAndmVyaWZ5LWZ1bGwnLlxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNTTCBtb2RlIGZvciB0aGUgY29ubmVjdGlvbi5cbiAgICogQGRlZmF1bHQgXCJub25lXCJcbiAgICovXG4gIHJlYWRvbmx5IHNzbE1vZGU/OiBzdHJpbmc7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFbmdpbmUtc3BlY2lmaWMgc2V0dGluZ3MgKHNldCBvbmx5IHRoZSBvbmUgbWF0Y2hpbmcgYGVuZ2luZWApXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogU2V0dGluZ3MgZm9yIE15U1FMIG9yIE1hcmlhREIgZW5kcG9pbnRzLiAqL1xuICByZWFkb25seSBteVNxbFNldHRpbmdzPzogTXlTcWxTZXR0aW5ncztcblxuICAvKiogU2V0dGluZ3MgZm9yIFBvc3RncmVTUUwgb3IgQXVyb3JhIFBvc3RncmVTUUwgZW5kcG9pbnRzLiAqL1xuICByZWFkb25seSBwb3N0Z3JlU3FsU2V0dGluZ3M/OiBQb3N0Z3JlU3FsU2V0dGluZ3M7XG5cbiAgLyoqIFNldHRpbmdzIGZvciBPcmFjbGUgZW5kcG9pbnRzLiAqL1xuICByZWFkb25seSBvcmFjbGVTZXR0aW5ncz86IE9yYWNsZVNldHRpbmdzO1xuXG4gIC8qKiBTZXR0aW5ncyBmb3IgTWljcm9zb2Z0IFNRTCBTZXJ2ZXIgZW5kcG9pbnRzLiAqL1xuICByZWFkb25seSBzcWxTZXJ2ZXJTZXR0aW5ncz86IFNxbFNlcnZlclNldHRpbmdzO1xuXG4gIC8qKiBTZXR0aW5ncyBmb3IgU0FQIEFTRSAoU3liYXNlKSBlbmRwb2ludHMuICovXG4gIHJlYWRvbmx5IHNhcEFzZVNldHRpbmdzPzogU2FwQXNlU2V0dGluZ3M7XG5cbiAgLyoqIFNldHRpbmdzIGZvciBJQk0gRGIyIExVVyBlbmRwb2ludHMuICovXG4gIHJlYWRvbmx5IGRiMlNldHRpbmdzPzogRGIyU2V0dGluZ3M7XG5cbiAgLyoqIFNldHRpbmdzIGZvciBNb25nb0RCIG9yIEFtYXpvbiBEb2N1bWVudERCIGVuZHBvaW50cy4gKi9cbiAgcmVhZG9ubHkgbW9uZ29EYlNldHRpbmdzPzogTW9uZ29EYlNldHRpbmdzO1xuXG4gIC8qKiBTZXR0aW5ncyBmb3IgQW1hem9uIFMzIGVuZHBvaW50cy4gKi9cbiAgcmVhZG9ubHkgczNTZXR0aW5ncz86IFMzU2V0dGluZ3M7XG5cbiAgLyoqIFNldHRpbmdzIGZvciBBbWF6b24gRHluYW1vREIgdGFyZ2V0IGVuZHBvaW50cy4gKi9cbiAgcmVhZG9ubHkgZHluYW1vRGJTZXR0aW5ncz86IER5bmFtb0RiU2V0dGluZ3M7XG5cbiAgLyoqIFNldHRpbmdzIGZvciBBbWF6b24gUmVkc2hpZnQgdGFyZ2V0IGVuZHBvaW50cy4gKi9cbiAgcmVhZG9ubHkgcmVkc2hpZnRTZXR0aW5ncz86IFJlZHNoaWZ0U2V0dGluZ3M7XG5cbiAgLyoqIFNldHRpbmdzIGZvciBBbWF6b24gS2luZXNpcyBEYXRhIFN0cmVhbXMgdGFyZ2V0IGVuZHBvaW50cy4gKi9cbiAgcmVhZG9ubHkga2luZXNpc1NldHRpbmdzPzogS2luZXNpc1NldHRpbmdzO1xuXG4gIC8qKiBTZXR0aW5ncyBmb3IgQXBhY2hlIEthZmthIChhbmQgQW1hem9uIE1TSykgdGFyZ2V0IGVuZHBvaW50cy4gKi9cbiAgcmVhZG9ubHkga2Fma2FTZXR0aW5ncz86IEthZmthU2V0dGluZ3M7XG5cbiAgLyoqIFNldHRpbmdzIGZvciBBbWF6b24gT3BlblNlYXJjaCBTZXJ2aWNlIHRhcmdldCBlbmRwb2ludHMuICovXG4gIHJlYWRvbmx5IG9wZW5TZWFyY2hTZXR0aW5ncz86IE9wZW5TZWFyY2hTZXR0aW5ncztcblxuICAvKiogU2V0dGluZ3MgZm9yIEFtYXpvbiBOZXB0dW5lIHRhcmdldCBlbmRwb2ludHMuICovXG4gIHJlYWRvbmx5IG5lcHR1bmVTZXR0aW5ncz86IE5lcHR1bmVTZXR0aW5ncztcblxuICAvKiogU2V0dGluZ3MgZm9yIEFtYXpvbiBFbGFzdGlDYWNoZSBmb3IgUmVkaXMgdGFyZ2V0IGVuZHBvaW50cy4gKi9cbiAgcmVhZG9ubHkgcmVkaXNTZXR0aW5ncz86IFJlZGlzU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciB0aGUgZW5kcG9pbnQgcmVzb3VyY2UuXG4gICAqIEBkZWZhdWx0IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBBIERNUyBlbmRwb2ludCBjb25zdHJ1Y3Qgc3VwcG9ydGluZyBldmVyeSBlbmdpbmUgdGhhdCBETVMgc3VwcG9ydHMuXG4gKlxuICogU2V0IGBlbmdpbmVgIHRvIHRoZSBkZXNpcmVkIHtAbGluayBFbmRwb2ludEVuZ2luZX0gYW5kIHN1cHBseSB0aGVcbiAqIG1hdGNoaW5nIGAqU2V0dGluZ3NgIHByb3BlcnR5LiBBbGwgb3RoZXIgYCpTZXR0aW5nc2AgcHJvcGVydGllcyBhcmVcbiAqIGlnbm9yZWQgYXQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXlTUUwgc291cmNlXG4gKiBuZXcgRG1zRW5kcG9pbnQodGhpcywgJ1NvdXJjZScsIHtcbiAqICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGUuU09VUkNFLFxuICogICBlbmdpbmU6IEVuZHBvaW50RW5naW5lLk1ZU1FMLFxuICogICBzZXJ2ZXJOYW1lOiAnbXlzcWwuZXhhbXBsZS5jb20nLFxuICogICBwb3J0OiAzMzA2LFxuICogICB1c2VybmFtZTogJ2Rtc191c2VyJyxcbiAqICAgcGFzc3dvcmQ6IGNkay5TZWNyZXRWYWx1ZS5zc21TZWN1cmUoJy9kbXMvbXlzcWwvcGFzc3dvcmQnKSxcbiAqICAgZGF0YWJhc2VOYW1lOiAnbXlkYicsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIERtc0VuZHBvaW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSURtc0VuZHBvaW50IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFN0YXRpYyB2YWxpZGF0aW9uIGRhdGEg4oCUIGRlY2xhcmVkIGZpcnN0IHRvIHNhdGlzZnkgbWVtYmVyLW9yZGVyaW5nIHJ1bGVzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRBUkdFVF9PTkxZX0VOR0lORVM6IEVuZHBvaW50RW5naW5lW10gPSBbXG4gICAgRW5kcG9pbnRFbmdpbmUuRFlOQU1PREIsXG4gICAgRW5kcG9pbnRFbmdpbmUuS0lORVNJUyxcbiAgICBFbmRwb2ludEVuZ2luZS5LQUZLQSxcbiAgICBFbmRwb2ludEVuZ2luZS5PUEVOU0VBUkNILFxuICAgIEVuZHBvaW50RW5naW5lLk5FUFRVTkUsXG4gICAgRW5kcG9pbnRFbmdpbmUuUkVESVMsXG4gIF07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU09VUkNFX09OTFlfRU5HSU5FUzogRW5kcG9pbnRFbmdpbmVbXSA9IFtcbiAgICBFbmRwb2ludEVuZ2luZS5JQk1fREIyX1pPUyxcbiAgXTtcblxuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0ZUVuZ2luZUVuZHBvaW50VHlwZShcbiAgICBlbmdpbmU6IEVuZHBvaW50RW5naW5lLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlLFxuICApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBlbmRwb2ludFR5cGUgPT09IEVuZHBvaW50VHlwZS5TT1VSQ0UgJiZcbiAgICAgIERtc0VuZHBvaW50LlRBUkdFVF9PTkxZX0VOR0lORVMuaW5jbHVkZXMoZW5naW5lKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRW5naW5lICcke2VuZ2luZX0nIGlzIG9ubHkgc3VwcG9ydGVkIGFzIGEgVEFSR0VUIGVuZHBvaW50LCBub3QgYXMgYSBTT1VSQ0UuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGVuZHBvaW50VHlwZSA9PT0gRW5kcG9pbnRUeXBlLlRBUkdFVCAmJlxuICAgICAgRG1zRW5kcG9pbnQuU09VUkNFX09OTFlfRU5HSU5FUy5pbmNsdWRlcyhlbmdpbmUpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFbmdpbmUgJyR7ZW5naW5lfScgaXMgb25seSBzdXBwb3J0ZWQgYXMgYSBTT1VSQ0UgZW5kcG9pbnQsIG5vdCBhcyBhIFRBUkdFVC5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSW5zdGFuY2UgZmllbGRzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBDbG91ZEZvcm1hdGlvbiBlbmRwb2ludCByZXNvdXJjZS4gKi9cbiAgcmVhZG9ubHkgY2ZuRW5kcG9pbnQ6IGRtcy5DZm5FbmRwb2ludDtcblxuICAvKiogQVJOIG9mIHRoZSBETVMgZW5kcG9pbnQuICovXG4gIHJlYWRvbmx5IGVuZHBvaW50QXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgRG1zRW5kcG9pbnQudmFsaWRhdGVFbmdpbmVFbmRwb2ludFR5cGUocHJvcHMuZW5naW5lLCBwcm9wcy5lbmRwb2ludFR5cGUpO1xuXG4gICAgY29uc3QgZW5kcG9pbnRJZGVudGlmaWVyID1cbiAgICAgIHByb3BzLmVuZHBvaW50SWRlbnRpZmllciA/P1xuICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogNjMgfSkudG9Mb3dlckNhc2UoKTtcblxuICAgIHRoaXMuY2ZuRW5kcG9pbnQgPSBuZXcgZG1zLkNmbkVuZHBvaW50KHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGVuZHBvaW50VHlwZTogcHJvcHMuZW5kcG9pbnRUeXBlLFxuICAgICAgZW5naW5lTmFtZTogcHJvcHMuZW5naW5lLFxuICAgICAgZW5kcG9pbnRJZGVudGlmaWVyLFxuICAgICAgc2VydmVyTmFtZTogcHJvcHMuc2VydmVyTmFtZSxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICB1c2VybmFtZTogcHJvcHMudXNlcm5hbWUsXG4gICAgICBwYXNzd29yZDogcHJvcHMucGFzc3dvcmQ/LnVuc2FmZVVud3JhcCgpLFxuICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICBleHRyYUNvbm5lY3Rpb25BdHRyaWJ1dGVzOiBwcm9wcy5leHRyYUNvbm5lY3Rpb25BdHRyaWJ1dGVzLFxuICAgICAgY2VydGlmaWNhdGVBcm46IHByb3BzLmNlcnRpZmljYXRlQXJuLFxuICAgICAgc3NsTW9kZTogcHJvcHMuc3NsTW9kZSA/PyAnbm9uZScsXG5cbiAgICAgIC8vIEVuZ2luZS1zcGVjaWZpYyBzZXR0aW5ncyDigJQgb25seSBvbmUgc2hvdWxkIGJlIHNldCBwZXIgZW5kcG9pbnRcbiAgICAgIG15U3FsU2V0dGluZ3M6IHRoaXMuYnVpbGRNeVNxbFNldHRpbmdzKHByb3BzKSxcbiAgICAgIHBvc3RncmVTcWxTZXR0aW5nczogdGhpcy5idWlsZFBvc3RncmVTcWxTZXR0aW5ncyhwcm9wcyksXG4gICAgICBvcmFjbGVTZXR0aW5nczogdGhpcy5idWlsZE9yYWNsZVNldHRpbmdzKHByb3BzKSxcbiAgICAgIG1pY3Jvc29mdFNxbFNlcnZlclNldHRpbmdzOiB0aGlzLmJ1aWxkU3FsU2VydmVyU2V0dGluZ3MocHJvcHMpLFxuICAgICAgc3liYXNlU2V0dGluZ3M6IHRoaXMuYnVpbGRTYXBBc2VTZXR0aW5ncyhwcm9wcyksXG4gICAgICBpYm1EYjJTZXR0aW5nczogdGhpcy5idWlsZERiMlNldHRpbmdzKHByb3BzKSxcbiAgICAgIG1vbmdvRGJTZXR0aW5nczogdGhpcy5idWlsZE1vbmdvRGJTZXR0aW5ncyhwcm9wcyksXG4gICAgICBzM1NldHRpbmdzOiB0aGlzLmJ1aWxkUzNTZXR0aW5ncyhwcm9wcyksXG4gICAgICBkeW5hbW9EYlNldHRpbmdzOiB0aGlzLmJ1aWxkRHluYW1vRGJTZXR0aW5ncyhwcm9wcyksXG4gICAgICByZWRzaGlmdFNldHRpbmdzOiB0aGlzLmJ1aWxkUmVkc2hpZnRTZXR0aW5ncyhwcm9wcyksXG4gICAgICBraW5lc2lzU2V0dGluZ3M6IHRoaXMuYnVpbGRLaW5lc2lzU2V0dGluZ3MocHJvcHMpLFxuICAgICAga2Fma2FTZXR0aW5nczogdGhpcy5idWlsZEthZmthU2V0dGluZ3MocHJvcHMpLFxuICAgICAgZWxhc3RpY3NlYXJjaFNldHRpbmdzOiB0aGlzLmJ1aWxkT3BlblNlYXJjaFNldHRpbmdzKHByb3BzKSxcbiAgICAgIG5lcHR1bmVTZXR0aW5nczogdGhpcy5idWlsZE5lcHR1bmVTZXR0aW5ncyhwcm9wcyksXG4gICAgICByZWRpc1NldHRpbmdzOiB0aGlzLmJ1aWxkUmVkaXNTZXR0aW5ncyhwcm9wcyksXG4gICAgICBkb2NEYlNldHRpbmdzOiB0aGlzLmJ1aWxkRG9jRGJTZXR0aW5ncyhwcm9wcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNmbkVuZHBvaW50LmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIHRoaXMuZW5kcG9pbnRBcm4gPSB0aGlzLmNmbkVuZHBvaW50LnJlZjtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBQcml2YXRlIG1hcHBpbmcgaGVscGVycyDigJQgdHJhbnNsYXRlIHR5cGVkIGludGVyZmFjZXMgdG8gQ0ZOIHByb3BlcnR5IHNoYXBlc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGJ1aWxkTXlTcWxTZXR0aW5ncyhcbiAgICBwcm9wczogRG1zRW5kcG9pbnRQcm9wcyxcbiAgKTogZG1zLkNmbkVuZHBvaW50Lk15U3FsU2V0dGluZ3NQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcyA9IHByb3BzLm15U3FsU2V0dGluZ3M7XG4gICAgaWYgKCFzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBhZnRlckNvbm5lY3RTY3JpcHQ6IHMuYWZ0ZXJDb25uZWN0U2NyaXB0LFxuICAgICAgY2xlYW5Tb3VyY2VNZXRhZGF0YU9uTWlzbWF0Y2g6IHMuY2xlYW5Tb3VyY2VNZXRhZGF0YU9uTWlzbWF0Y2gsXG4gICAgICBldmVudHNQb2xsSW50ZXJ2YWw6IHMuZXZlbnRzUG9sbEludGVydmFsLFxuICAgICAgbWF4RmlsZVNpemU6IHMubWF4RmlsZVNpemUsXG4gICAgICBwYXJhbGxlbExvYWRUaHJlYWRzOiBzLnBhcmFsbGVsTG9hZFRocmVhZHMsXG4gICAgICBzZWNyZXRzTWFuYWdlckFjY2Vzc1JvbGVBcm46IHMuc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuLFxuICAgICAgc2VjcmV0c01hbmFnZXJTZWNyZXRJZDogcy5zZWNyZXRzTWFuYWdlclNlY3JldElkLFxuICAgICAgc2VydmVyVGltZXpvbmU6IHMuc2VydmVyVGltZXpvbmUsXG4gICAgICB0YXJnZXREYlR5cGU6IHMudGFyZ2V0RGJUeXBlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUG9zdGdyZVNxbFNldHRpbmdzKFxuICAgIHByb3BzOiBEbXNFbmRwb2ludFByb3BzLFxuICApOiBkbXMuQ2ZuRW5kcG9pbnQuUG9zdGdyZVNxbFNldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBwcm9wcy5wb3N0Z3JlU3FsU2V0dGluZ3M7XG4gICAgaWYgKCFzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBhZnRlckNvbm5lY3RTY3JpcHQ6IHMuYWZ0ZXJDb25uZWN0U2NyaXB0LFxuICAgICAgY2FwdHVyZURkbHM6IHMuY2FwdHVyZURkbHMsXG4gICAgICBkZGxBcnRpZmFjdHNTY2hlbWE6IHMuZGRsQXJ0aWZhY3RzU2NoZW1hLFxuICAgICAgZXhlY3V0ZVRpbWVvdXQ6IHMuZXhlY3V0ZVRpbWVvdXQsXG4gICAgICBmYWlsVGFza3NPbkxvYlRydW5jYXRpb246IHMuZmFpbFRhc2tzT25Mb2JUcnVuY2F0aW9uLFxuICAgICAgaGVhcnRiZWF0RW5hYmxlOiBzLmhlYXJ0YmVhdEVuYWJsZSxcbiAgICAgIGhlYXJ0YmVhdEZyZXF1ZW5jeTogcy5oZWFydGJlYXRGcmVxdWVuY3ksXG4gICAgICBoZWFydGJlYXRTY2hlbWE6IHMuaGVhcnRiZWF0U2NoZW1hLFxuICAgICAgbWFwQm9vbGVhbkFzQm9vbGVhbjogcy5tYXBCb29sZWFuQXNCb29sZWFuLFxuICAgICAgbWF4RmlsZVNpemU6IHMubWF4RmlsZVNpemUsXG4gICAgICBwbHVnaW5OYW1lOiBzLnBsdWdpbk5hbWUsXG4gICAgICBzZWNyZXRzTWFuYWdlckFjY2Vzc1JvbGVBcm46IHMuc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuLFxuICAgICAgc2VjcmV0c01hbmFnZXJTZWNyZXRJZDogcy5zZWNyZXRzTWFuYWdlclNlY3JldElkLFxuICAgICAgc2xvdE5hbWU6IHMuc2xvdE5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRPcmFjbGVTZXR0aW5ncyhcbiAgICBwcm9wczogRG1zRW5kcG9pbnRQcm9wcyxcbiAgKTogZG1zLkNmbkVuZHBvaW50Lk9yYWNsZVNldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBwcm9wcy5vcmFjbGVTZXR0aW5ncztcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc0FsdGVybmF0ZURpcmVjdGx5OiBzLmFjY2Vzc0FsdGVybmF0ZURpcmVjdGx5LFxuICAgICAgYWRkU3VwcGxlbWVudGFsTG9nZ2luZzogcy5hZGRTdXBwbGVtZW50YWxMb2dnaW5nLFxuICAgICAgYWRkaXRpb25hbEFyY2hpdmVkTG9nRGVzdElkOiBzLmFkZGl0aW9uYWxBcmNoaXZlZExvZ0Rlc3RJZCxcbiAgICAgIGFsbG93U2VsZWN0TmVzdGVkVGFibGVzOiBzLmFsbG93U2VsZWN0TmVzdGVkVGFibGVzLFxuICAgICAgYXJjaGl2ZWRMb2dEZXN0SWQ6IHMuYXJjaGl2ZWRMb2dEZXN0SWQsXG4gICAgICBhcmNoaXZlZExvZ3NPbmx5OiBzLmFyY2hpdmVkTG9nc09ubHksXG4gICAgICBhc21QYXNzd29yZDogcy5hc21QYXNzd29yZD8udW5zYWZlVW53cmFwKCksXG4gICAgICBhc21TZXJ2ZXI6IHMuYXNtU2VydmVyLFxuICAgICAgYXNtVXNlcjogcy5hc21Vc2VyLFxuICAgICAgY2hhckxlbmd0aFNlbWFudGljczogcy5jaGFyTGVuZ3RoU2VtYW50aWNzLFxuICAgICAgZGlyZWN0UGF0aE5vTG9nOiBzLmRpcmVjdFBhdGhOb0xvZyxcbiAgICAgIGRpcmVjdFBhdGhQYXJhbGxlbExvYWQ6IHMuZGlyZWN0UGF0aFBhcmFsbGVsTG9hZCxcbiAgICAgIGVuYWJsZUhvbW9nZW5vdXNUYWJsZXNwYWNlOiBzLmVuYWJsZUhvbW9nZW5vdXNUYWJsZXNwYWNlLFxuICAgICAgZXh0cmFBcmNoaXZlZExvZ0Rlc3RJZHM6IHMuZXh0cmFBcmNoaXZlZExvZ0Rlc3RJZHMsXG4gICAgICBmYWlsVGFza3NPbkxvYlRydW5jYXRpb246IHMuZmFpbFRhc2tzT25Mb2JUcnVuY2F0aW9uLFxuICAgICAgbnVtYmVyRGF0YXR5cGVTY2FsZTogcy5udW1iZXJEYXRhdHlwZVNjYWxlLFxuICAgICAgb3JhY2xlUGF0aFByZWZpeDogcy5vcmFjbGVQYXRoUHJlZml4LFxuICAgICAgcGFyYWxsZWxBc21SZWFkVGhyZWFkczogcy5wYXJhbGxlbEFzbVJlYWRUaHJlYWRzLFxuICAgICAgcmVhZEFoZWFkQmxvY2tzOiBzLnJlYWRBaGVhZEJsb2NrcyxcbiAgICAgIHJlYWRUYWJsZVNwYWNlTmFtZTogcy5yZWFkVGFibGVTcGFjZU5hbWUsXG4gICAgICByZXRyeUludGVydmFsOiBzLnJldHJ5SW50ZXJ2YWwsXG4gICAgICBzZWNyZXRzTWFuYWdlckFjY2Vzc1JvbGVBcm46IHMuc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuLFxuICAgICAgc2VjcmV0c01hbmFnZXJPcmFjbGVBc21BY2Nlc3NSb2xlQXJuOiBzLnNlY3JldHNNYW5hZ2VyT3JhY2xlQXNtQWNjZXNzUm9sZUFybixcbiAgICAgIHNlY3JldHNNYW5hZ2VyT3JhY2xlQXNtU2VjcmV0SWQ6IHMuc2VjcmV0c01hbmFnZXJPcmFjbGVBc21TZWNyZXRJZCxcbiAgICAgIHNlY3JldHNNYW5hZ2VyU2VjcmV0SWQ6IHMuc2VjcmV0c01hbmFnZXJTZWNyZXRJZCxcbiAgICAgIHNlY3VyaXR5RGJFbmNyeXB0aW9uTmFtZTogcy5zZWN1cml0eURiRW5jcnlwdGlvbk5hbWUsXG4gICAgICB1c2VBbHRlcm5hdGVGb2xkZXJGb3JPbmxpbmU6IHMudXNlQWx0ZXJuYXRlRm9sZGVyRm9yT25saW5lLFxuICAgICAgdXNlQkZpbGU6IHMudXNlQkZpbGUsXG4gICAgICB1c2VEaXJlY3RQYXRoRnVsbExvYWQ6IHMudXNlRGlyZWN0UGF0aEZ1bGxMb2FkLFxuICAgICAgdXNlTG9nbWluZXJSZWFkZXI6IHMudXNlTG9nbWluZXJSZWFkZXIsXG4gICAgICB1c2VQYXRoUHJlZml4OiBzLnVzZVBhdGhQcmVmaXgsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTcWxTZXJ2ZXJTZXR0aW5ncyhcbiAgICBwcm9wczogRG1zRW5kcG9pbnRQcm9wcyxcbiAgKTogZG1zLkNmbkVuZHBvaW50Lk1pY3Jvc29mdFNxbFNlcnZlclNldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBwcm9wcy5zcWxTZXJ2ZXJTZXR0aW5ncztcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJjcFBhY2tldFNpemU6IHMuYmNwUGFja2V0U2l6ZSxcbiAgICAgIGNvbnRyb2xUYWJsZXNGaWxlR3JvdXA6IHMuY29udHJvbFRhYmxlc0ZpbGVHcm91cCxcbiAgICAgIHF1ZXJ5U2luZ2xlQWx3YXlzT25Ob2RlOiBzLnF1ZXJ5U2luZ2xlQWx3YXlzT25Ob2RlLFxuICAgICAgcmVhZEJhY2t1cE9ubHk6IHMucmVhZEJhY2t1cE9ubHksXG4gICAgICBzYWZlZ3VhcmRQb2xpY3k6IHMuc2FmZWd1YXJkUG9saWN5LFxuICAgICAgc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuOiBzLnNlY3JldHNNYW5hZ2VyQWNjZXNzUm9sZUFybixcbiAgICAgIHNlY3JldHNNYW5hZ2VyU2VjcmV0SWQ6IHMuc2VjcmV0c01hbmFnZXJTZWNyZXRJZCxcbiAgICAgIHVzZUJjcEZ1bGxMb2FkOiBzLnVzZUJjcEZ1bGxMb2FkLFxuICAgICAgdXNlVGhpcmRQYXJ0eUJhY2t1cERldmljZTogcy51c2VUaGlyZFBhcnR5QmFja3VwRGV2aWNlLFxuICAgICAgdHJpbVNwYWNlSW5DaGFyOiBzLnRyaW1TcGFjZUluQ2hhcixcbiAgICAgIHRsb2dBY2Nlc3NNb2RlOiBzLnRsb2dBY2Nlc3NNb2RlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2FwQXNlU2V0dGluZ3MoXG4gICAgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMsXG4gICk6IGRtcy5DZm5FbmRwb2ludC5TeWJhc2VTZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gcHJvcHMuc2FwQXNlU2V0dGluZ3M7XG4gICAgaWYgKCFzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBzZWNyZXRzTWFuYWdlckFjY2Vzc1JvbGVBcm46IHMuc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuLFxuICAgICAgc2VjcmV0c01hbmFnZXJTZWNyZXRJZDogcy5zZWNyZXRzTWFuYWdlclNlY3JldElkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGIyU2V0dGluZ3MoXG4gICAgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMsXG4gICk6IGRtcy5DZm5FbmRwb2ludC5JYm1EYjJTZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gcHJvcHMuZGIyU2V0dGluZ3M7XG4gICAgaWYgKCFzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50THNuOiBzLmN1cnJlbnRMc24sXG4gICAgICBtYXhLQnl0ZXNQZXJSZWFkOiBzLm1heEtCeXRlc1BlclJlYWQsXG4gICAgICBzZXREYXRhQ2FwdHVyZUNoYW5nZXM6IHMuc2V0RGF0YUNhcHR1cmVDaGFuZ2VzLFxuICAgICAgc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuOiBzLnNlY3JldHNNYW5hZ2VyQWNjZXNzUm9sZUFybixcbiAgICAgIHNlY3JldHNNYW5hZ2VyU2VjcmV0SWQ6IHMuc2VjcmV0c01hbmFnZXJTZWNyZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE1vbmdvRGJTZXR0aW5ncyhcbiAgICBwcm9wczogRG1zRW5kcG9pbnRQcm9wcyxcbiAgKTogZG1zLkNmbkVuZHBvaW50Lk1vbmdvRGJTZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gcHJvcHMubW9uZ29EYlNldHRpbmdzO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgYXV0aE1lY2hhbmlzbTogcy5hdXRoTWVjaGFuaXNtLFxuICAgICAgYXV0aFNvdXJjZTogcy5hdXRoU291cmNlLFxuICAgICAgYXV0aFR5cGU6IHMuYXV0aFR5cGUsXG4gICAgICBkb2NzVG9JbnZlc3RpZ2F0ZTogcy5kb2NzVG9JbnZlc3RpZ2F0ZT8udG9TdHJpbmcoKSxcbiAgICAgIGV4dHJhY3REb2NJZDogcy5leHRyYWN0RG9jSWQ/LnRvU3RyaW5nKCksXG4gICAgICBuZXN0aW5nTGV2ZWw6IHMubmVzdGluZ0xldmVsLFxuICAgICAgc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuOiBzLnNlY3JldHNNYW5hZ2VyQWNjZXNzUm9sZUFybixcbiAgICAgIHNlY3JldHNNYW5hZ2VyU2VjcmV0SWQ6IHMuc2VjcmV0c01hbmFnZXJTZWNyZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERvY0RiU2V0dGluZ3MoXG4gICAgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMsXG4gICk6IGRtcy5DZm5FbmRwb2ludC5Eb2NEYlNldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5lbmdpbmUgIT09IEVuZHBvaW50RW5naW5lLkRPQ0RCKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHMgPSBwcm9wcy5tb25nb0RiU2V0dGluZ3M7XG4gICAgaWYgKCFzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBkb2NzVG9JbnZlc3RpZ2F0ZTogcy5kb2NzVG9JbnZlc3RpZ2F0ZSxcbiAgICAgIGV4dHJhY3REb2NJZDogcy5leHRyYWN0RG9jSWQsXG4gICAgICBuZXN0aW5nTGV2ZWw6IHMubmVzdGluZ0xldmVsLFxuICAgICAgc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuOiBzLnNlY3JldHNNYW5hZ2VyQWNjZXNzUm9sZUFybixcbiAgICAgIHNlY3JldHNNYW5hZ2VyU2VjcmV0SWQ6IHMuc2VjcmV0c01hbmFnZXJTZWNyZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFMzU2V0dGluZ3MoXG4gICAgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMsXG4gICk6IGRtcy5DZm5FbmRwb2ludC5TM1NldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBwcm9wcy5zM1NldHRpbmdzO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0TmFtZTogcy5idWNrZXROYW1lLFxuICAgICAgYnVja2V0Rm9sZGVyOiBzLmJ1Y2tldEZvbGRlcixcbiAgICAgIHNlcnZpY2VBY2Nlc3NSb2xlQXJuOiBzLnNlcnZpY2VBY2Nlc3NSb2xlQXJuLFxuICAgICAgYWRkQ29sdW1uTmFtZTogcy5hZGRDb2x1bW5OYW1lLFxuICAgICAgY2RjSW5zZXJ0c0FuZFVwZGF0ZXM6IHMuY2RjSW5zZXJ0c0FuZFVwZGF0ZXMsXG4gICAgICBjZGNJbnNlcnRzT25seTogcy5jZGNJbnNlcnRzT25seSxcbiAgICAgIGNkY01heEJhdGNoSW50ZXJ2YWw6IHMuY2RjTWF4QmF0Y2hJbnRlcnZhbCxcbiAgICAgIGNkY01pbkZpbGVTaXplOiBzLmNkY01pbkZpbGVTaXplLFxuICAgICAgY2RjUGF0aDogcy5jZGNQYXRoLFxuICAgICAgY3N2RGVsaW1pdGVyOiBzLmNzdkRlbGltaXRlcixcbiAgICAgIGNzdk5vU3VwVmFsdWU6IHMuY3N2Tm9TdXBWYWx1ZSxcbiAgICAgIGNzdk51bGxWYWx1ZTogcy5jc3ZOdWxsVmFsdWUsXG4gICAgICBjc3ZSb3dEZWxpbWl0ZXI6IHMuY3N2Um93RGVsaW1pdGVyLFxuICAgICAgZGF0YUZvcm1hdDogcy5kYXRhRm9ybWF0LFxuICAgICAgZGF0ZVBhcnRpdGlvbkRlbGltaXRlcjogcy5kYXRlUGFydGl0aW9uRGVsaW1pdGVyLFxuICAgICAgZGF0ZVBhcnRpdGlvbkVuYWJsZWQ6IHMuZGF0ZVBhcnRpdGlvbkVuYWJsZWQsXG4gICAgICBkYXRlUGFydGl0aW9uU2VxdWVuY2U6IHMuZGF0ZVBhcnRpdGlvblNlcXVlbmNlLFxuICAgICAgZGljdFBhZ2VTaXplTGltaXQ6IHMuZGljdFBhZ2VTaXplTGltaXQsXG4gICAgICBlbmFibGVTdGF0aXN0aWNzOiBzLmVuYWJsZVN0YXRpc3RpY3MsXG4gICAgICBlbmNvZGluZ1R5cGU6IHMuZW5jb2RpbmdUeXBlLFxuICAgICAgZW5jcnlwdGlvbk1vZGU6IHMuZW5jcnlwdGlvbk1vZGUsXG4gICAgICBleHRlcm5hbFRhYmxlRGVmaW5pdGlvbjogcy5leHRlcm5hbFRhYmxlRGVmaW5pdGlvbixcbiAgICAgIGlnbm9yZUhlYWRlclJvd3M6IHMuaWdub3JlSGVhZGVyUm93cyxcbiAgICAgIGluY2x1ZGVPcEZvckZ1bGxMb2FkOiBzLmluY2x1ZGVPcEZvckZ1bGxMb2FkLFxuICAgICAgbWF4RmlsZVNpemU6IHMubWF4RmlsZVNpemUsXG4gICAgICBwYXJxdWV0VGltZXN0YW1wSW5NaWxsaXNlY29uZDogcy5wYXJxdWV0VGltZXN0YW1wSW5NaWxsaXNlY29uZCxcbiAgICAgIHBhcnF1ZXRWZXJzaW9uOiBzLnBhcnF1ZXRWZXJzaW9uLFxuICAgICAgcHJlc2VydmVUcmFuc2FjdGlvbnM6IHMucHJlc2VydmVUcmFuc2FjdGlvbnMsXG4gICAgICByZmM0MTgwOiBzLnJmYzQxODAsXG4gICAgICByb3dHcm91cExlbmd0aDogcy5yb3dHcm91cExlbmd0aCxcbiAgICAgIHNlcnZlclNpZGVFbmNyeXB0aW9uS21zS2V5SWQ6IHMuc2VydmVyU2lkZUVuY3J5cHRpb25LbXNLZXlJZCxcbiAgICAgIHRpbWVzdGFtcENvbHVtbk5hbWU6IHMudGltZXN0YW1wQ29sdW1uTmFtZSxcbiAgICAgIHVzZUNzdk5vU3VwVmFsdWU6IHMudXNlQ3N2Tm9TdXBWYWx1ZSxcbiAgICAgIHVzZVRhc2tTdGFydFRpbWVGb3JGdWxsTG9hZFRpbWVzdGFtcDogcy51c2VUYXNrU3RhcnRUaW1lRm9yRnVsbExvYWRUaW1lc3RhbXAsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGREeW5hbW9EYlNldHRpbmdzKFxuICAgIHByb3BzOiBEbXNFbmRwb2ludFByb3BzLFxuICApOiBkbXMuQ2ZuRW5kcG9pbnQuRHluYW1vRGJTZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gcHJvcHMuZHluYW1vRGJTZXR0aW5ncztcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgc2VydmljZUFjY2Vzc1JvbGVBcm46IHMuc2VydmljZUFjY2Vzc1JvbGVBcm4gfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSZWRzaGlmdFNldHRpbmdzKFxuICAgIHByb3BzOiBEbXNFbmRwb2ludFByb3BzLFxuICApOiBkbXMuQ2ZuRW5kcG9pbnQuUmVkc2hpZnRTZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gcHJvcHMucmVkc2hpZnRTZXR0aW5ncztcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2VwdEFueURhdGU6IHMuYWNjZXB0QW55RGF0ZSxcbiAgICAgIGFmdGVyQ29ubmVjdFNjcmlwdDogcy5hZnRlckNvbm5lY3RTY3JpcHQsXG4gICAgICBidWNrZXRGb2xkZXI6IHMuYnVja2V0Rm9sZGVyLFxuICAgICAgYnVja2V0TmFtZTogcy5idWNrZXROYW1lLFxuICAgICAgY2FzZVNlbnNpdGl2ZU5hbWVzOiBzLmNhc2VTZW5zaXRpdmVOYW1lcyxcbiAgICAgIGNvbXBVcGRhdGU6IHMuY29tcFVwZGF0ZSxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0OiBzLmNvbm5lY3Rpb25UaW1lb3V0LFxuICAgICAgZGF0ZUZvcm1hdDogcy5kYXRlRm9ybWF0LFxuICAgICAgZW1wdHlBc051bGw6IHMuZW1wdHlBc051bGwsXG4gICAgICBlbmNyeXB0aW9uTW9kZTogcy5lbmNyeXB0aW9uTW9kZSxcbiAgICAgIGV4cGxpY2l0SWRzOiBzLmV4cGxpY2l0SWRzLFxuICAgICAgZmlsZVRyYW5zZmVyVXBsb2FkU3RyZWFtczogcy5maWxlVHJhbnNmZXJVcGxvYWRTdHJlYW1zLFxuICAgICAgbG9hZFRpbWVvdXQ6IHMubG9hZFRpbWVvdXQsXG4gICAgICBtYXhGaWxlU2l6ZTogcy5tYXhGaWxlU2l6ZSxcbiAgICAgIHJlbW92ZVF1b3Rlczogcy5yZW1vdmVRdW90ZXMsXG4gICAgICByZXBsYWNlSW52YWxpZENoYXJzOiBzLnJlcGxhY2VJbnZhbGlkQ2hhcnMsXG4gICAgICByZXBsYWNlQ2hhcnM6IHMucmVwbGFjZUNoYXJzLFxuICAgICAgc2VjcmV0c01hbmFnZXJBY2Nlc3NSb2xlQXJuOiBzLnNlY3JldHNNYW5hZ2VyQWNjZXNzUm9sZUFybixcbiAgICAgIHNlY3JldHNNYW5hZ2VyU2VjcmV0SWQ6IHMuc2VjcmV0c01hbmFnZXJTZWNyZXRJZCxcbiAgICAgIHNlcnZlclNpZGVFbmNyeXB0aW9uS21zS2V5SWQ6IHMuc2VydmVyU2lkZUVuY3J5cHRpb25LbXNLZXlJZCxcbiAgICAgIHNlcnZpY2VBY2Nlc3NSb2xlQXJuOiBzLnNlcnZpY2VBY2Nlc3NSb2xlQXJuLFxuICAgICAgdGltZUZvcm1hdDogcy50aW1lRm9ybWF0LFxuICAgICAgdHJpbUJsYW5rczogcy50cmltQmxhbmtzLFxuICAgICAgdHJ1bmNhdGVDb2x1bW5zOiBzLnRydW5jYXRlQ29sdW1ucyxcbiAgICAgIHdyaXRlQnVmZmVyU2l6ZTogcy53cml0ZUJ1ZmZlclNpemUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRLaW5lc2lzU2V0dGluZ3MoXG4gICAgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMsXG4gICk6IGRtcy5DZm5FbmRwb2ludC5LaW5lc2lzU2V0dGluZ3NQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcyA9IHByb3BzLmtpbmVzaXNTZXR0aW5ncztcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cmVhbUFybjogcy5zdHJlYW1Bcm4sXG4gICAgICBzZXJ2aWNlQWNjZXNzUm9sZUFybjogcy5zZXJ2aWNlQWNjZXNzUm9sZUFybixcbiAgICAgIGluY2x1ZGVDb250cm9sRGV0YWlsczogcy5pbmNsdWRlQ29udHJvbERldGFpbHMsXG4gICAgICBpbmNsdWRlTnVsbEFuZEVtcHR5OiBzLmluY2x1ZGVOdWxsQW5kRW1wdHksXG4gICAgICBpbmNsdWRlUGFydGl0aW9uVmFsdWU6IHMuaW5jbHVkZVBhcnRpdGlvblZhbHVlLFxuICAgICAgaW5jbHVkZVRhYmxlQWx0ZXJPcGVyYXRpb25zOiBzLmluY2x1ZGVUYWJsZUFsdGVyT3BlcmF0aW9ucyxcbiAgICAgIGluY2x1ZGVUcmFuc2FjdGlvbkRldGFpbHM6IHMuaW5jbHVkZVRyYW5zYWN0aW9uRGV0YWlscyxcbiAgICAgIG1lc3NhZ2VGb3JtYXQ6IHMubWVzc2FnZUZvcm1hdCxcbiAgICAgIG5vSGV4UHJlZml4OiBzLm5vSGV4UHJlZml4LFxuICAgICAgcGFydGl0aW9uSW5jbHVkZVNjaGVtYVRhYmxlOiBzLnBhcnRpdGlvbkluY2x1ZGVTY2hlbWFUYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEthZmthU2V0dGluZ3MoXG4gICAgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMsXG4gICk6IGRtcy5DZm5FbmRwb2ludC5LYWZrYVNldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBwcm9wcy5rYWZrYVNldHRpbmdzO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgYnJva2VyOiBzLmJyb2tlcixcbiAgICAgIHRvcGljOiBzLnRvcGljLFxuICAgICAgaW5jbHVkZUNvbnRyb2xEZXRhaWxzOiBzLmluY2x1ZGVDb250cm9sRGV0YWlscyxcbiAgICAgIGluY2x1ZGVOdWxsQW5kRW1wdHk6IHMuaW5jbHVkZU51bGxBbmRFbXB0eSxcbiAgICAgIGluY2x1ZGVQYXJ0aXRpb25WYWx1ZTogcy5pbmNsdWRlUGFydGl0aW9uVmFsdWUsXG4gICAgICBpbmNsdWRlVGFibGVBbHRlck9wZXJhdGlvbnM6IHMuaW5jbHVkZVRhYmxlQWx0ZXJPcGVyYXRpb25zLFxuICAgICAgaW5jbHVkZVRyYW5zYWN0aW9uRGV0YWlsczogcy5pbmNsdWRlVHJhbnNhY3Rpb25EZXRhaWxzLFxuICAgICAgbWVzc2FnZUZvcm1hdDogcy5tZXNzYWdlRm9ybWF0LFxuICAgICAgbWVzc2FnZU1heEJ5dGVzOiBzLm1lc3NhZ2VNYXhCeXRlcyxcbiAgICAgIG5vSGV4UHJlZml4OiBzLm5vSGV4UHJlZml4LFxuICAgICAgcGFydGl0aW9uSW5jbHVkZVNjaGVtYVRhYmxlOiBzLnBhcnRpdGlvbkluY2x1ZGVTY2hlbWFUYWJsZSxcbiAgICAgIHNlY3VyaXR5UHJvdG9jb2w6IHMuc2VjdXJpdHlQcm90b2NvbCxcbiAgICAgIHNhc2xVc2VyTmFtZTogcy5zYXNsVXNlcm5hbWUsXG4gICAgICBzYXNsUGFzc3dvcmQ6IHMuc2FzbFBhc3N3b3JkPy51bnNhZmVVbndyYXAoKSxcbiAgICAgIHNzbENhQ2VydGlmaWNhdGVBcm46IHMuc3NsQ2FDZXJ0aWZpY2F0ZUFybixcbiAgICAgIHNzbENsaWVudENlcnRpZmljYXRlQXJuOiBzLnNzbENsaWVudENlcnRpZmljYXRlQXJuLFxuICAgICAgc3NsQ2xpZW50S2V5QXJuOiBzLnNzbENsaWVudEtleUFybixcbiAgICAgIHNzbENsaWVudEtleVBhc3N3b3JkOiBzLnNzbENsaWVudEtleVBhc3N3b3JkPy51bnNhZmVVbndyYXAoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE9wZW5TZWFyY2hTZXR0aW5ncyhcbiAgICBwcm9wczogRG1zRW5kcG9pbnRQcm9wcyxcbiAgKTogZG1zLkNmbkVuZHBvaW50LkVsYXN0aWNzZWFyY2hTZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gcHJvcHMub3BlblNlYXJjaFNldHRpbmdzO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgZW5kcG9pbnRVcmk6IHMuZW5kcG9pbnRVcmksXG4gICAgICBzZXJ2aWNlQWNjZXNzUm9sZUFybjogcy5zZXJ2aWNlQWNjZXNzUm9sZUFybixcbiAgICAgIGVycm9yUmV0cnlEdXJhdGlvbjogcy5lcnJvclJldHJ5RHVyYXRpb24sXG4gICAgICBmdWxsTG9hZEVycm9yUGVyY2VudGFnZTogcy5mdWxsTG9hZEVycm9yUGVyY2VudGFnZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE5lcHR1bmVTZXR0aW5ncyhcbiAgICBwcm9wczogRG1zRW5kcG9pbnRQcm9wcyxcbiAgKTogZG1zLkNmbkVuZHBvaW50Lk5lcHR1bmVTZXR0aW5nc1Byb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzID0gcHJvcHMubmVwdHVuZVNldHRpbmdzO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgczNCdWNrZXROYW1lOiBzLnMzQnVja2V0TmFtZSxcbiAgICAgIHMzQnVja2V0Rm9sZGVyOiBzLnMzQnVja2V0Rm9sZGVyLFxuICAgICAgc2VydmljZUFjY2Vzc1JvbGVBcm46IHMuc2VydmljZUFjY2Vzc1JvbGVBcm4sXG4gICAgICBlcnJvclJldHJ5RHVyYXRpb246IHMuZXJyb3JSZXRyeUR1cmF0aW9uLFxuICAgICAgaWFtQXV0aEVuYWJsZWQ6IHMuaWFtQXV0aEVuYWJsZWQsXG4gICAgICBtYXhGaWxlU2l6ZTogcy5tYXhGaWxlU2l6ZSxcbiAgICAgIG1heFJldHJ5Q291bnQ6IHMubWF4UmV0cnlDb3VudCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlZGlzU2V0dGluZ3MoXG4gICAgcHJvcHM6IERtc0VuZHBvaW50UHJvcHMsXG4gICk6IGRtcy5DZm5FbmRwb2ludC5SZWRpc1NldHRpbmdzUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBwcm9wcy5yZWRpc1NldHRpbmdzO1xuICAgIGlmICghcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2VydmVyTmFtZTogcy5zZXJ2ZXJOYW1lLFxuICAgICAgcG9ydDogcy5wb3J0ID8/IDYzNzksXG4gICAgICBzc2xTZWN1cml0eVByb3RvY29sOiBzLnNzbFNlY3VyaXR5UHJvdG9jb2wsXG4gICAgICBhdXRoVHlwZTogcy5hdXRoVHlwZSxcbiAgICAgIGF1dGhVc2VyTmFtZTogcy5hdXRoVXNlck5hbWUsXG4gICAgICBhdXRoUGFzc3dvcmQ6IHMuYXV0aFBhc3N3b3JkPy51bnNhZmVVbndyYXAoKSxcbiAgICAgIHNzbENhQ2VydGlmaWNhdGVBcm46IHMuc3NsQ2FDZXJ0aWZpY2F0ZUFybixcbiAgICB9O1xuICB9XG5cbn1cbiJdfQ==
|