cdk8s-aws-cdk 0.0.7 → 0.0.9
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/.gitattributes +11 -0
- package/.jsii +363 -9
- package/API.md +120 -13
- package/CODE_OF_CONDUCT.md +3 -0
- package/DCO +34 -0
- package/SECURITY.md +5 -0
- package/git-hooks/README.md +9 -0
- package/git-hooks/prepare-commit-msg +18 -0
- package/git-hooks/setup.sh +10 -0
- package/lib/adapter.d.ts +0 -1
- package/lib/adapter.js +6 -8
- package/lib/chart.d.ts +0 -1
- package/lib/chart.js +1 -1
- package/lib/imports/cloudcontrol.services.k8s.aws.d.ts +0 -1
- package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts +0 -1
- package/lib/imports/dynamotables-dynamodb.services.k8s.aws.js +10 -15
- package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts +0 -1
- package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.js +3 -5
- package/lib/imports/fieldexports-services.k8s.aws.d.ts +0 -1
- package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts +0 -1
- package/lib/imports/iampolicies-iam.services.k8s.aws.js +2 -3
- package/lib/imports/iamroles-iam.services.k8s.aws.d.ts +0 -1
- package/lib/imports/iamroles-iam.services.k8s.aws.js +3 -4
- package/lib/imports/k8s.d.ts +0 -1
- package/lib/imports/k8s.js +316 -515
- package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts +0 -1
- package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.js +7 -8
- package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts +0 -1
- package/lib/imports/lambdafunctions-lambda.services.k8s.aws.js +8 -11
- package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts +0 -1
- package/lib/imports/rdsdbinstances-rds.services.k8s.aws.js +6 -7
- package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts +0 -1
- package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.js +3 -4
- package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts +0 -1
- package/lib/imports/s3buckets-s3.services.k8s.aws.js +37 -64
- package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts +0 -1
- package/lib/imports/sfnmachines-sfn.services.k8s.aws.js +3 -5
- package/lib/imports/snstopics-sns.services.k8s.aws.d.ts +0 -1
- package/lib/imports/snstopics-sns.services.k8s.aws.js +2 -3
- package/lib/index.d.ts +0 -1
- package/lib/mappers/base.d.ts +0 -1
- package/lib/mappers/base.js +1 -1
- package/lib/mappers/ec2-security-group.d.ts +0 -1
- package/lib/mappers/ec2-security-group.js +3 -3
- package/lib/mappers/iam-policy.d.ts +0 -1
- package/lib/mappers/iam-policy.js +3 -3
- package/lib/mappers/iam-role.d.ts +0 -1
- package/lib/mappers/iam-role.js +3 -3
- package/lib/mappers/index.d.ts +0 -1
- package/lib/mappers/lambda-function.d.ts +0 -1
- package/lib/mappers/lambda-function.js +3 -3
- package/lib/mappers/rds-db-instance.d.ts +0 -1
- package/lib/mappers/rds-db-instance.js +3 -3
- package/lib/mappers/rds-db-subnet-group.d.ts +0 -1
- package/lib/mappers/rds-db-subnet-group.js +3 -3
- package/lib/mappers/s3-bucket.d.ts +0 -1
- package/lib/mappers/s3-bucket.js +4 -5
- package/package.json +24 -25
- package/changelog.md +0 -2
- package/examples/rds-db-instance/cdk.out/RdsDBInstanceStack.assets.json +0 -19
- package/examples/rds-db-instance/cdk.out/cdk.out +0 -1
- package/examples/rds-db-instance/cdk.out/manifest.json +0 -230
- package/examples/rds-db-instance/cdk.out/tree.json +0 -171
- package/lib/adapter.d.ts.map +0 -1
- package/lib/chart.d.ts.map +0 -1
- package/lib/imports/cloudcontrol.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/dynamotables-dynamodb.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/ec2securitygroups-ec2.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/fieldexports-services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/iampolicies-iam.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/iamroles-iam.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/k8s.d.ts.map +0 -1
- package/lib/imports/lambdaeventsourcemappings-lambda.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/lambdafunctions-lambda.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/rdsdbinstances-rds.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/rdsdbsubnetgroups-rds.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/s3buckets-s3.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/sfnmachines-sfn.services.k8s.aws.d.ts.map +0 -1
- package/lib/imports/snstopics-sns.services.k8s.aws.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/mappers/base.d.ts.map +0 -1
- package/lib/mappers/ec2-security-group.d.ts.map +0 -1
- package/lib/mappers/iam-policy.d.ts.map +0 -1
- package/lib/mappers/iam-role.d.ts.map +0 -1
- package/lib/mappers/index.d.ts.map +0 -1
- package/lib/mappers/lambda-function.d.ts.map +0 -1
- package/lib/mappers/rds-db-instance.d.ts.map +0 -1
- package/lib/mappers/rds-db-subnet-group.d.ts.map +0 -1
- package/lib/mappers/s3-bucket.d.ts.map +0 -1
- package/releasetag.txt +0 -1
- package/version.txt +0 -1
|
@@ -74,14 +74,13 @@ exports.toJson_BucketProps = toJson_BucketProps;
|
|
|
74
74
|
*/
|
|
75
75
|
/* eslint-disable max-len, quote-props */
|
|
76
76
|
function toJson_BucketSpec(obj) {
|
|
77
|
-
var _a, _b, _c, _d;
|
|
78
77
|
if (obj === undefined) {
|
|
79
78
|
return undefined;
|
|
80
79
|
}
|
|
81
80
|
const result = {
|
|
82
81
|
'accelerate': toJson_BucketSpecAccelerate(obj.accelerate),
|
|
83
82
|
'acl': obj.acl,
|
|
84
|
-
'analytics':
|
|
83
|
+
'analytics': obj.analytics?.map(y => toJson_BucketSpecAnalytics(y)),
|
|
85
84
|
'cors': toJson_BucketSpecCors(obj.cors),
|
|
86
85
|
'createBucketConfiguration': toJson_BucketSpecCreateBucketConfiguration(obj.createBucketConfiguration),
|
|
87
86
|
'encryption': toJson_BucketSpecEncryption(obj.encryption),
|
|
@@ -90,11 +89,11 @@ function toJson_BucketSpec(obj) {
|
|
|
90
89
|
'grantReadACP': obj.grantReadAcp,
|
|
91
90
|
'grantWrite': obj.grantWrite,
|
|
92
91
|
'grantWriteACP': obj.grantWriteAcp,
|
|
93
|
-
'intelligentTiering':
|
|
94
|
-
'inventory':
|
|
92
|
+
'intelligentTiering': obj.intelligentTiering?.map(y => toJson_BucketSpecIntelligentTiering(y)),
|
|
93
|
+
'inventory': obj.inventory?.map(y => toJson_BucketSpecInventory(y)),
|
|
95
94
|
'lifecycle': toJson_BucketSpecLifecycle(obj.lifecycle),
|
|
96
95
|
'logging': toJson_BucketSpecLogging(obj.logging),
|
|
97
|
-
'metrics':
|
|
96
|
+
'metrics': obj.metrics?.map(y => toJson_BucketSpecMetrics(y)),
|
|
98
97
|
'name': obj.name,
|
|
99
98
|
'notification': toJson_BucketSpecNotification(obj.notification),
|
|
100
99
|
'objectLockEnabledForBucket': obj.objectLockEnabledForBucket,
|
|
@@ -148,12 +147,11 @@ exports.toJson_BucketSpecAnalytics = toJson_BucketSpecAnalytics;
|
|
|
148
147
|
*/
|
|
149
148
|
/* eslint-disable max-len, quote-props */
|
|
150
149
|
function toJson_BucketSpecCors(obj) {
|
|
151
|
-
var _a;
|
|
152
150
|
if (obj === undefined) {
|
|
153
151
|
return undefined;
|
|
154
152
|
}
|
|
155
153
|
const result = {
|
|
156
|
-
'corsRules':
|
|
154
|
+
'corsRules': obj.corsRules?.map(y => toJson_BucketSpecCorsCorsRules(y)),
|
|
157
155
|
};
|
|
158
156
|
// filter undefined values
|
|
159
157
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -179,12 +177,11 @@ exports.toJson_BucketSpecCreateBucketConfiguration = toJson_BucketSpecCreateBuck
|
|
|
179
177
|
*/
|
|
180
178
|
/* eslint-disable max-len, quote-props */
|
|
181
179
|
function toJson_BucketSpecEncryption(obj) {
|
|
182
|
-
var _a;
|
|
183
180
|
if (obj === undefined) {
|
|
184
181
|
return undefined;
|
|
185
182
|
}
|
|
186
183
|
const result = {
|
|
187
|
-
'rules':
|
|
184
|
+
'rules': obj.rules?.map(y => toJson_BucketSpecEncryptionRules(y)),
|
|
188
185
|
};
|
|
189
186
|
// filter undefined values
|
|
190
187
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -195,7 +192,6 @@ exports.toJson_BucketSpecEncryption = toJson_BucketSpecEncryption;
|
|
|
195
192
|
*/
|
|
196
193
|
/* eslint-disable max-len, quote-props */
|
|
197
194
|
function toJson_BucketSpecIntelligentTiering(obj) {
|
|
198
|
-
var _a;
|
|
199
195
|
if (obj === undefined) {
|
|
200
196
|
return undefined;
|
|
201
197
|
}
|
|
@@ -203,7 +199,7 @@ function toJson_BucketSpecIntelligentTiering(obj) {
|
|
|
203
199
|
'filter': toJson_BucketSpecIntelligentTieringFilter(obj.filter),
|
|
204
200
|
'id': obj.id,
|
|
205
201
|
'status': obj.status,
|
|
206
|
-
'tierings':
|
|
202
|
+
'tierings': obj.tierings?.map(y => toJson_BucketSpecIntelligentTieringTierings(y)),
|
|
207
203
|
};
|
|
208
204
|
// filter undefined values
|
|
209
205
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -214,7 +210,6 @@ exports.toJson_BucketSpecIntelligentTiering = toJson_BucketSpecIntelligentTierin
|
|
|
214
210
|
*/
|
|
215
211
|
/* eslint-disable max-len, quote-props */
|
|
216
212
|
function toJson_BucketSpecInventory(obj) {
|
|
217
|
-
var _a;
|
|
218
213
|
if (obj === undefined) {
|
|
219
214
|
return undefined;
|
|
220
215
|
}
|
|
@@ -224,7 +219,7 @@ function toJson_BucketSpecInventory(obj) {
|
|
|
224
219
|
'id': obj.id,
|
|
225
220
|
'includedObjectVersions': obj.includedObjectVersions,
|
|
226
221
|
'isEnabled': obj.isEnabled,
|
|
227
|
-
'optionalFields':
|
|
222
|
+
'optionalFields': obj.optionalFields?.map(y => y),
|
|
228
223
|
'schedule': toJson_BucketSpecInventorySchedule(obj.schedule),
|
|
229
224
|
};
|
|
230
225
|
// filter undefined values
|
|
@@ -236,12 +231,11 @@ exports.toJson_BucketSpecInventory = toJson_BucketSpecInventory;
|
|
|
236
231
|
*/
|
|
237
232
|
/* eslint-disable max-len, quote-props */
|
|
238
233
|
function toJson_BucketSpecLifecycle(obj) {
|
|
239
|
-
var _a;
|
|
240
234
|
if (obj === undefined) {
|
|
241
235
|
return undefined;
|
|
242
236
|
}
|
|
243
237
|
const result = {
|
|
244
|
-
'rules':
|
|
238
|
+
'rules': obj.rules?.map(y => toJson_BucketSpecLifecycleRules(y)),
|
|
245
239
|
};
|
|
246
240
|
// filter undefined values
|
|
247
241
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -283,14 +277,13 @@ exports.toJson_BucketSpecMetrics = toJson_BucketSpecMetrics;
|
|
|
283
277
|
*/
|
|
284
278
|
/* eslint-disable max-len, quote-props */
|
|
285
279
|
function toJson_BucketSpecNotification(obj) {
|
|
286
|
-
var _a, _b, _c;
|
|
287
280
|
if (obj === undefined) {
|
|
288
281
|
return undefined;
|
|
289
282
|
}
|
|
290
283
|
const result = {
|
|
291
|
-
'lambdaFunctionConfigurations':
|
|
292
|
-
'queueConfigurations':
|
|
293
|
-
'topicConfigurations':
|
|
284
|
+
'lambdaFunctionConfigurations': obj.lambdaFunctionConfigurations?.map(y => toJson_BucketSpecNotificationLambdaFunctionConfigurations(y)),
|
|
285
|
+
'queueConfigurations': obj.queueConfigurations?.map(y => toJson_BucketSpecNotificationQueueConfigurations(y)),
|
|
286
|
+
'topicConfigurations': obj.topicConfigurations?.map(y => toJson_BucketSpecNotificationTopicConfigurations(y)),
|
|
294
287
|
};
|
|
295
288
|
// filter undefined values
|
|
296
289
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -301,12 +294,11 @@ exports.toJson_BucketSpecNotification = toJson_BucketSpecNotification;
|
|
|
301
294
|
*/
|
|
302
295
|
/* eslint-disable max-len, quote-props */
|
|
303
296
|
function toJson_BucketSpecOwnershipControls(obj) {
|
|
304
|
-
var _a;
|
|
305
297
|
if (obj === undefined) {
|
|
306
298
|
return undefined;
|
|
307
299
|
}
|
|
308
300
|
const result = {
|
|
309
|
-
'rules':
|
|
301
|
+
'rules': obj.rules?.map(y => toJson_BucketSpecOwnershipControlsRules(y)),
|
|
310
302
|
};
|
|
311
303
|
// filter undefined values
|
|
312
304
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -335,13 +327,12 @@ exports.toJson_BucketSpecPublicAccessBlock = toJson_BucketSpecPublicAccessBlock;
|
|
|
335
327
|
*/
|
|
336
328
|
/* eslint-disable max-len, quote-props */
|
|
337
329
|
function toJson_BucketSpecReplication(obj) {
|
|
338
|
-
var _a;
|
|
339
330
|
if (obj === undefined) {
|
|
340
331
|
return undefined;
|
|
341
332
|
}
|
|
342
333
|
const result = {
|
|
343
334
|
'role': obj.role,
|
|
344
|
-
'rules':
|
|
335
|
+
'rules': obj.rules?.map(y => toJson_BucketSpecReplicationRules(y)),
|
|
345
336
|
};
|
|
346
337
|
// filter undefined values
|
|
347
338
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -367,12 +358,11 @@ exports.toJson_BucketSpecRequestPayment = toJson_BucketSpecRequestPayment;
|
|
|
367
358
|
*/
|
|
368
359
|
/* eslint-disable max-len, quote-props */
|
|
369
360
|
function toJson_BucketSpecTagging(obj) {
|
|
370
|
-
var _a;
|
|
371
361
|
if (obj === undefined) {
|
|
372
362
|
return undefined;
|
|
373
363
|
}
|
|
374
364
|
const result = {
|
|
375
|
-
'tagSet':
|
|
365
|
+
'tagSet': obj.tagSet?.map(y => toJson_BucketSpecTaggingTagSet(y)),
|
|
376
366
|
};
|
|
377
367
|
// filter undefined values
|
|
378
368
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -398,7 +388,6 @@ exports.toJson_BucketSpecVersioning = toJson_BucketSpecVersioning;
|
|
|
398
388
|
*/
|
|
399
389
|
/* eslint-disable max-len, quote-props */
|
|
400
390
|
function toJson_BucketSpecWebsite(obj) {
|
|
401
|
-
var _a;
|
|
402
391
|
if (obj === undefined) {
|
|
403
392
|
return undefined;
|
|
404
393
|
}
|
|
@@ -406,7 +395,7 @@ function toJson_BucketSpecWebsite(obj) {
|
|
|
406
395
|
'errorDocument': toJson_BucketSpecWebsiteErrorDocument(obj.errorDocument),
|
|
407
396
|
'indexDocument': toJson_BucketSpecWebsiteIndexDocument(obj.indexDocument),
|
|
408
397
|
'redirectAllRequestsTo': toJson_BucketSpecWebsiteRedirectAllRequestsTo(obj.redirectAllRequestsTo),
|
|
409
|
-
'routingRules':
|
|
398
|
+
'routingRules': obj.routingRules?.map(y => toJson_BucketSpecWebsiteRoutingRules(y)),
|
|
410
399
|
};
|
|
411
400
|
// filter undefined values
|
|
412
401
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -449,15 +438,14 @@ exports.toJson_BucketSpecAnalyticsStorageClassAnalysis = toJson_BucketSpecAnalyt
|
|
|
449
438
|
*/
|
|
450
439
|
/* eslint-disable max-len, quote-props */
|
|
451
440
|
function toJson_BucketSpecCorsCorsRules(obj) {
|
|
452
|
-
var _a, _b, _c, _d;
|
|
453
441
|
if (obj === undefined) {
|
|
454
442
|
return undefined;
|
|
455
443
|
}
|
|
456
444
|
const result = {
|
|
457
|
-
'allowedHeaders':
|
|
458
|
-
'allowedMethods':
|
|
459
|
-
'allowedOrigins':
|
|
460
|
-
'exposeHeaders':
|
|
445
|
+
'allowedHeaders': obj.allowedHeaders?.map(y => y),
|
|
446
|
+
'allowedMethods': obj.allowedMethods?.map(y => y),
|
|
447
|
+
'allowedOrigins': obj.allowedOrigins?.map(y => y),
|
|
448
|
+
'exposeHeaders': obj.exposeHeaders?.map(y => y),
|
|
461
449
|
'id': obj.id,
|
|
462
450
|
'maxAgeSeconds': obj.maxAgeSeconds,
|
|
463
451
|
};
|
|
@@ -564,7 +552,6 @@ exports.toJson_BucketSpecInventorySchedule = toJson_BucketSpecInventorySchedule;
|
|
|
564
552
|
*/
|
|
565
553
|
/* eslint-disable max-len, quote-props */
|
|
566
554
|
function toJson_BucketSpecLifecycleRules(obj) {
|
|
567
|
-
var _a, _b;
|
|
568
555
|
if (obj === undefined) {
|
|
569
556
|
return undefined;
|
|
570
557
|
}
|
|
@@ -574,10 +561,10 @@ function toJson_BucketSpecLifecycleRules(obj) {
|
|
|
574
561
|
'filter': toJson_BucketSpecLifecycleRulesFilter(obj.filter),
|
|
575
562
|
'id': obj.id,
|
|
576
563
|
'noncurrentVersionExpiration': toJson_BucketSpecLifecycleRulesNoncurrentVersionExpiration(obj.noncurrentVersionExpiration),
|
|
577
|
-
'noncurrentVersionTransitions':
|
|
564
|
+
'noncurrentVersionTransitions': obj.noncurrentVersionTransitions?.map(y => toJson_BucketSpecLifecycleRulesNoncurrentVersionTransitions(y)),
|
|
578
565
|
'prefix': obj.prefix,
|
|
579
566
|
'status': obj.status,
|
|
580
|
-
'transitions':
|
|
567
|
+
'transitions': obj.transitions?.map(y => toJson_BucketSpecLifecycleRulesTransitions(y)),
|
|
581
568
|
};
|
|
582
569
|
// filter undefined values
|
|
583
570
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -588,13 +575,12 @@ exports.toJson_BucketSpecLifecycleRules = toJson_BucketSpecLifecycleRules;
|
|
|
588
575
|
*/
|
|
589
576
|
/* eslint-disable max-len, quote-props */
|
|
590
577
|
function toJson_BucketSpecLoggingLoggingEnabled(obj) {
|
|
591
|
-
var _a;
|
|
592
578
|
if (obj === undefined) {
|
|
593
579
|
return undefined;
|
|
594
580
|
}
|
|
595
581
|
const result = {
|
|
596
582
|
'targetBucket': obj.targetBucket,
|
|
597
|
-
'targetGrants':
|
|
583
|
+
'targetGrants': obj.targetGrants?.map(y => toJson_BucketSpecLoggingLoggingEnabledTargetGrants(y)),
|
|
598
584
|
'targetPrefix': obj.targetPrefix,
|
|
599
585
|
};
|
|
600
586
|
// filter undefined values
|
|
@@ -624,12 +610,11 @@ exports.toJson_BucketSpecMetricsFilter = toJson_BucketSpecMetricsFilter;
|
|
|
624
610
|
*/
|
|
625
611
|
/* eslint-disable max-len, quote-props */
|
|
626
612
|
function toJson_BucketSpecNotificationLambdaFunctionConfigurations(obj) {
|
|
627
|
-
var _a;
|
|
628
613
|
if (obj === undefined) {
|
|
629
614
|
return undefined;
|
|
630
615
|
}
|
|
631
616
|
const result = {
|
|
632
|
-
'events':
|
|
617
|
+
'events': obj.events?.map(y => y),
|
|
633
618
|
'filter': toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilter(obj.filter),
|
|
634
619
|
'id': obj.id,
|
|
635
620
|
'lambdaFunctionARN': obj.lambdaFunctionArn,
|
|
@@ -643,12 +628,11 @@ exports.toJson_BucketSpecNotificationLambdaFunctionConfigurations = toJson_Bucke
|
|
|
643
628
|
*/
|
|
644
629
|
/* eslint-disable max-len, quote-props */
|
|
645
630
|
function toJson_BucketSpecNotificationQueueConfigurations(obj) {
|
|
646
|
-
var _a;
|
|
647
631
|
if (obj === undefined) {
|
|
648
632
|
return undefined;
|
|
649
633
|
}
|
|
650
634
|
const result = {
|
|
651
|
-
'events':
|
|
635
|
+
'events': obj.events?.map(y => y),
|
|
652
636
|
'filter': toJson_BucketSpecNotificationQueueConfigurationsFilter(obj.filter),
|
|
653
637
|
'id': obj.id,
|
|
654
638
|
'queueARN': obj.queueArn,
|
|
@@ -662,12 +646,11 @@ exports.toJson_BucketSpecNotificationQueueConfigurations = toJson_BucketSpecNoti
|
|
|
662
646
|
*/
|
|
663
647
|
/* eslint-disable max-len, quote-props */
|
|
664
648
|
function toJson_BucketSpecNotificationTopicConfigurations(obj) {
|
|
665
|
-
var _a;
|
|
666
649
|
if (obj === undefined) {
|
|
667
650
|
return undefined;
|
|
668
651
|
}
|
|
669
652
|
const result = {
|
|
670
|
-
'events':
|
|
653
|
+
'events': obj.events?.map(y => y),
|
|
671
654
|
'filter': toJson_BucketSpecNotificationTopicConfigurationsFilter(obj.filter),
|
|
672
655
|
'id': obj.id,
|
|
673
656
|
'topicARN': obj.topicArn,
|
|
@@ -797,13 +780,12 @@ exports.toJson_BucketSpecWebsiteRoutingRules = toJson_BucketSpecWebsiteRoutingRu
|
|
|
797
780
|
*/
|
|
798
781
|
/* eslint-disable max-len, quote-props */
|
|
799
782
|
function toJson_BucketSpecAnalyticsFilterAnd(obj) {
|
|
800
|
-
var _a;
|
|
801
783
|
if (obj === undefined) {
|
|
802
784
|
return undefined;
|
|
803
785
|
}
|
|
804
786
|
const result = {
|
|
805
787
|
'prefix': obj.prefix,
|
|
806
|
-
'tags':
|
|
788
|
+
'tags': obj.tags?.map(y => toJson_BucketSpecAnalyticsFilterAndTags(y)),
|
|
807
789
|
};
|
|
808
790
|
// filter undefined values
|
|
809
791
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -862,13 +844,12 @@ exports.toJson_BucketSpecEncryptionRulesApplyServerSideEncryptionByDefault = toJ
|
|
|
862
844
|
*/
|
|
863
845
|
/* eslint-disable max-len, quote-props */
|
|
864
846
|
function toJson_BucketSpecIntelligentTieringFilterAnd(obj) {
|
|
865
|
-
var _a;
|
|
866
847
|
if (obj === undefined) {
|
|
867
848
|
return undefined;
|
|
868
849
|
}
|
|
869
850
|
const result = {
|
|
870
851
|
'prefix': obj.prefix,
|
|
871
|
-
'tags':
|
|
852
|
+
'tags': obj.tags?.map(y => toJson_BucketSpecIntelligentTieringFilterAndTags(y)),
|
|
872
853
|
};
|
|
873
854
|
// filter undefined values
|
|
874
855
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -929,12 +910,11 @@ exports.toJson_BucketSpecLifecycleRulesAbortIncompleteMultipartUpload = toJson_B
|
|
|
929
910
|
*/
|
|
930
911
|
/* eslint-disable max-len, quote-props */
|
|
931
912
|
function toJson_BucketSpecLifecycleRulesExpiration(obj) {
|
|
932
|
-
var _a;
|
|
933
913
|
if (obj === undefined) {
|
|
934
914
|
return undefined;
|
|
935
915
|
}
|
|
936
916
|
const result = {
|
|
937
|
-
'date':
|
|
917
|
+
'date': obj.date?.toISOString(),
|
|
938
918
|
'days': obj.days,
|
|
939
919
|
'expiredObjectDeleteMarker': obj.expiredObjectDeleteMarker,
|
|
940
920
|
};
|
|
@@ -995,12 +975,11 @@ exports.toJson_BucketSpecLifecycleRulesNoncurrentVersionTransitions = toJson_Buc
|
|
|
995
975
|
*/
|
|
996
976
|
/* eslint-disable max-len, quote-props */
|
|
997
977
|
function toJson_BucketSpecLifecycleRulesTransitions(obj) {
|
|
998
|
-
var _a;
|
|
999
978
|
if (obj === undefined) {
|
|
1000
979
|
return undefined;
|
|
1001
980
|
}
|
|
1002
981
|
const result = {
|
|
1003
|
-
'date':
|
|
982
|
+
'date': obj.date?.toISOString(),
|
|
1004
983
|
'days': obj.days,
|
|
1005
984
|
'storageClass': obj.storageClass,
|
|
1006
985
|
};
|
|
@@ -1029,14 +1008,13 @@ exports.toJson_BucketSpecLoggingLoggingEnabledTargetGrants = toJson_BucketSpecLo
|
|
|
1029
1008
|
*/
|
|
1030
1009
|
/* eslint-disable max-len, quote-props */
|
|
1031
1010
|
function toJson_BucketSpecMetricsFilterAnd(obj) {
|
|
1032
|
-
var _a;
|
|
1033
1011
|
if (obj === undefined) {
|
|
1034
1012
|
return undefined;
|
|
1035
1013
|
}
|
|
1036
1014
|
const result = {
|
|
1037
1015
|
'accessPointARN': obj.accessPointArn,
|
|
1038
1016
|
'prefix': obj.prefix,
|
|
1039
|
-
'tags':
|
|
1017
|
+
'tags': obj.tags?.map(y => toJson_BucketSpecMetricsFilterAndTags(y)),
|
|
1040
1018
|
};
|
|
1041
1019
|
// filter undefined values
|
|
1042
1020
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -1289,13 +1267,12 @@ exports.toJson_BucketSpecInventoryDestinationS3BucketDestinationEncryption = toJ
|
|
|
1289
1267
|
*/
|
|
1290
1268
|
/* eslint-disable max-len, quote-props */
|
|
1291
1269
|
function toJson_BucketSpecLifecycleRulesFilterAnd(obj) {
|
|
1292
|
-
var _a;
|
|
1293
1270
|
if (obj === undefined) {
|
|
1294
1271
|
return undefined;
|
|
1295
1272
|
}
|
|
1296
1273
|
const result = {
|
|
1297
1274
|
'prefix': obj.prefix,
|
|
1298
|
-
'tags':
|
|
1275
|
+
'tags': obj.tags?.map(y => toJson_BucketSpecLifecycleRulesFilterAndTags(y)),
|
|
1299
1276
|
};
|
|
1300
1277
|
// filter undefined values
|
|
1301
1278
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -1357,12 +1334,11 @@ exports.toJson_BucketSpecMetricsFilterAndTags = toJson_BucketSpecMetricsFilterAn
|
|
|
1357
1334
|
*/
|
|
1358
1335
|
/* eslint-disable max-len, quote-props */
|
|
1359
1336
|
function toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKey(obj) {
|
|
1360
|
-
var _a;
|
|
1361
1337
|
if (obj === undefined) {
|
|
1362
1338
|
return undefined;
|
|
1363
1339
|
}
|
|
1364
1340
|
const result = {
|
|
1365
|
-
'filterRules':
|
|
1341
|
+
'filterRules': obj.filterRules?.map(y => toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKeyFilterRules(y)),
|
|
1366
1342
|
};
|
|
1367
1343
|
// filter undefined values
|
|
1368
1344
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -1373,12 +1349,11 @@ exports.toJson_BucketSpecNotificationLambdaFunctionConfigurationsFilterKey = toJ
|
|
|
1373
1349
|
*/
|
|
1374
1350
|
/* eslint-disable max-len, quote-props */
|
|
1375
1351
|
function toJson_BucketSpecNotificationQueueConfigurationsFilterKey(obj) {
|
|
1376
|
-
var _a;
|
|
1377
1352
|
if (obj === undefined) {
|
|
1378
1353
|
return undefined;
|
|
1379
1354
|
}
|
|
1380
1355
|
const result = {
|
|
1381
|
-
'filterRules':
|
|
1356
|
+
'filterRules': obj.filterRules?.map(y => toJson_BucketSpecNotificationQueueConfigurationsFilterKeyFilterRules(y)),
|
|
1382
1357
|
};
|
|
1383
1358
|
// filter undefined values
|
|
1384
1359
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -1389,12 +1364,11 @@ exports.toJson_BucketSpecNotificationQueueConfigurationsFilterKey = toJson_Bucke
|
|
|
1389
1364
|
*/
|
|
1390
1365
|
/* eslint-disable max-len, quote-props */
|
|
1391
1366
|
function toJson_BucketSpecNotificationTopicConfigurationsFilterKey(obj) {
|
|
1392
|
-
var _a;
|
|
1393
1367
|
if (obj === undefined) {
|
|
1394
1368
|
return undefined;
|
|
1395
1369
|
}
|
|
1396
1370
|
const result = {
|
|
1397
|
-
'filterRules':
|
|
1371
|
+
'filterRules': obj.filterRules?.map(y => toJson_BucketSpecNotificationTopicConfigurationsFilterKeyFilterRules(y)),
|
|
1398
1372
|
};
|
|
1399
1373
|
// filter undefined values
|
|
1400
1374
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -1467,13 +1441,12 @@ exports.toJson_BucketSpecReplicationRulesDestinationReplicationTime = toJson_Buc
|
|
|
1467
1441
|
*/
|
|
1468
1442
|
/* eslint-disable max-len, quote-props */
|
|
1469
1443
|
function toJson_BucketSpecReplicationRulesFilterAnd(obj) {
|
|
1470
|
-
var _a;
|
|
1471
1444
|
if (obj === undefined) {
|
|
1472
1445
|
return undefined;
|
|
1473
1446
|
}
|
|
1474
1447
|
const result = {
|
|
1475
1448
|
'prefix': obj.prefix,
|
|
1476
|
-
'tags':
|
|
1449
|
+
'tags': obj.tags?.map(y => toJson_BucketSpecReplicationRulesFilterAndTags(y)),
|
|
1477
1450
|
};
|
|
1478
1451
|
// filter undefined values
|
|
1479
1452
|
return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
|
|
@@ -1669,4 +1642,4 @@ function toJson_BucketSpecReplicationRulesFilterAndTags(obj) {
|
|
|
1669
1642
|
}
|
|
1670
1643
|
exports.toJson_BucketSpecReplicationRulesFilterAndTags = toJson_BucketSpecReplicationRulesFilterAndTags;
|
|
1671
1644
|
/* eslint-enable max-len, quote-props */
|
|
1672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczNidWNrZXRzLXMzLnNlcnZpY2VzLms4cy5hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wb3J0cy9zM2J1Y2tldHMtczMuc2VydmljZXMuazhzLmF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQkFBcUI7QUFDckIsaUNBQXVFO0FBSXZFOzs7O0dBSUc7QUFDSCxNQUFhLE1BQU8sU0FBUSxpQkFBUztJQXVCbkM7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFxQixFQUFFO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxNQUFNLENBQUMsR0FBRztZQUNiLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUF6QkQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFxQixFQUFFO1FBQzVDLE9BQU87WUFDTCxHQUFHLE1BQU0sQ0FBQyxHQUFHO1lBQ2IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFlRDs7T0FFRztJQUNJLE1BQU07UUFDWCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEMsT0FBTztZQUNMLEdBQUcsTUFBTSxDQUFDLEdBQUc7WUFDYixHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztTQUNoQyxDQUFDO0lBQ0osQ0FBQzs7QUE5Q0gsd0JBK0NDO0FBOUNDOztHQUVHO0FBQ29CLFVBQUcsR0FBcUI7SUFDN0MsVUFBVSxFQUFFLDhCQUE4QjtJQUMxQyxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7QUErREo7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0Isa0JBQWtCLENBQUMsR0FBNEI7SUFDN0QsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7S0FBRTtJQUM1QyxNQUFN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QUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBUkQsd0dBUUM7QUFDRCx3Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmF0ZWQgYnkgY2RrOHNcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBpT2JqZWN0TWV0YWRhdGEsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIEJ1Y2tldCBpcyB0aGUgU2NoZW1hIGZvciB0aGUgQnVja2V0cyBBUElcbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFxuICovXG5leHBvcnQgY2xhc3MgQnVja2V0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiQnVja2V0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzMy5zZXJ2aWNlcy5rOHMuYXdzL3YxYWxwaGExJyxcbiAgICBraW5kOiAnQnVja2V0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiQnVja2V0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEJ1Y2tldFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5CdWNrZXQuR1ZLLFxuICAgICAgLi4udG9Kc29uX0J1Y2tldFByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkJ1Y2tldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVja2V0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uQnVja2V0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5CdWNrZXQuR1ZLLFxuICAgICAgLi4udG9Kc29uX0J1Y2tldFByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQnVja2V0IGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBCdWNrZXRzIEFQSVxuICpcbiAqIEBzY2hlbWEgQnVja2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEJ1Y2tldFNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBCdWNrZXQuXG4gICAqIEluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uLCBhIEJ1Y2tldCBpcyBhIHJlc291cmNlLiBBbiBBbWF6b24gUzMgYnVja2V0IG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLCBhbmQgdGhlIG5hbWVzcGFjZSBpcyBzaGFyZWQgYnkgYWxsIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBCdWNrZXRTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRQcm9wcyhvYmo6IEJ1Y2tldFByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fQnVja2V0U3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQnVja2V0U3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIEJ1Y2tldC5cbiAqIEluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uLCBhIEJ1Y2tldCBpcyBhIHJlc291cmNlLiBBbiBBbWF6b24gUzMgYnVja2V0IG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLCBhbmQgdGhlIG5hbWVzcGFjZSBpcyBzaGFyZWQgYnkgYWxsIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlYyB7XG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHRyYW5zZmVyIGFjY2VsZXJhdGlvbiBzdGF0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2FjY2VsZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY2VsZXJhdGU/OiBCdWNrZXRTcGVjQWNjZWxlcmF0ZTtcblxuICAvKipcbiAgICogVGhlIGNhbm5lZCBBQ0wgdG8gYXBwbHkgdG8gdGhlIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2FjbFxuICAgKi9cbiAgcmVhZG9ubHkgYWNsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjYW5hbHl0aWNzXG4gICAqL1xuICByZWFkb25seSBhbmFseXRpY3M/OiBCdWNrZXRTcGVjQW5hbHl0aWNzW107XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRW5hYmxpbmcgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2NvcnMuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjY29yc1xuICAgKi9cbiAgcmVhZG9ubHkgY29ycz86IEJ1Y2tldFNwZWNDb3JzO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24/OiBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2VuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBCdWNrZXRTcGVjRW5jcnlwdGlvbjtcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdGhlIHJlYWQsIHdyaXRlLCByZWFkIEFDUCwgYW5kIHdyaXRlIEFDUCBwZXJtaXNzaW9ucyBvbiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRGdWxsQ29udHJvbFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRGdWxsQ29udHJvbD86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gbGlzdCB0aGUgb2JqZWN0cyBpbiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRSZWFkXG4gICAqL1xuICByZWFkb25seSBncmFudFJlYWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBncmFudGVlIHRvIHJlYWQgdGhlIGJ1Y2tldCBBQ0wuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNncmFudFJlYWRBQ1BcbiAgICovXG4gIHJlYWRvbmx5IGdyYW50UmVhZEFjcD86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gY3JlYXRlIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuXG4gICAqIEZvciB0aGUgYnVja2V0IGFuZCBvYmplY3Qgb3duZXJzIG9mIGV4aXN0aW5nIG9iamVjdHMsIGFsc28gYWxsb3dzIGRlbGV0aW9ucyBhbmQgb3ZlcndyaXRlcyBvZiB0aG9zZSBvYmplY3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRXcml0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRXcml0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gd3JpdGUgdGhlIEFDTCBmb3IgdGhlIGFwcGxpY2FibGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRXcml0ZUFDUFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRXcml0ZUFjcD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2ludGVsbGlnZW50VGllcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgaW50ZWxsaWdlbnRUaWVyaW5nPzogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjaW52ZW50b3J5XG4gICAqL1xuICByZWFkb25seSBpbnZlbnRvcnk/OiBCdWNrZXRTcGVjSW52ZW50b3J5W107XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgbGlmZWN5Y2xlIHJ1bGVzLiBZb3UgY2FuIGFkZCBhcyBtYW55IGFzIDEsMDAwIHJ1bGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbGlmZWN5Y2xlXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIGxvZ2dpbmcgc3RhdHVzIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbG9nZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZz86IEJ1Y2tldFNwZWNMb2dnaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljcz86IEJ1Y2tldFNwZWNNZXRyaWNzW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBidWNrZXQgdG8gY3JlYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1Y2tldC4gSWYgdGhpcyBlbGVtZW50IGlzIGVtcHR5LCBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbm90aWZpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb24/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCBTMyBPYmplY3QgTG9jayB0byBiZSBlbmFibGVkIGZvciB0aGUgbmV3IGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI29iamVjdExvY2tFbmFibGVkRm9yQnVja2V0XG4gICAqL1xuICByZWFkb25seSBvYmplY3RMb2NrRW5hYmxlZEZvckJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBPd25lcnNoaXBDb250cm9scyAoQnVja2V0T3duZXJQcmVmZXJyZWQgb3IgT2JqZWN0V3JpdGVyKSB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoaXMgQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI293bmVyc2hpcENvbnRyb2xzXG4gICAqL1xuICByZWFkb25seSBvd25lcnNoaXBDb250cm9scz86IEJ1Y2tldFNwZWNPd25lcnNoaXBDb250cm9scztcblxuICAvKipcbiAgICogVGhlIGJ1Y2tldCBwb2xpY3kgYXMgYSBKU09OIGRvY3VtZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjcG9saWN5XG4gICAqL1xuICByZWFkb25seSBwb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBQdWJsaWNBY2Nlc3NCbG9jayBjb25maWd1cmF0aW9uIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhpcyBBbWF6b24gUzMgYnVja2V0LiBZb3UgY2FuIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIGFueSBjb21iaW5hdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlbiBBbWF6b24gUzMgY29uc2lkZXJzIGEgYnVja2V0IG9yIG9iamVjdCBwdWJsaWMsIHNlZSBUaGUgTWVhbmluZyBvZiBcIlB1YmxpY1wiIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9hY2Nlc3MtY29udHJvbC1ibG9jay1wdWJsaWMtYWNjZXNzLmh0bWwjYWNjZXNzLWNvbnRyb2wtYmxvY2stcHVibGljLWFjY2Vzcy1wb2xpY3ktc3RhdHVzKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNwdWJsaWNBY2Nlc3NCbG9ja1xuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWNjZXNzQmxvY2s/OiBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2s7XG5cbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIGZvciByZXBsaWNhdGlvbiBydWxlcy4gWW91IGNhbiBhZGQgdXAgdG8gMSwwMDAgcnVsZXMuIFRoZSBtYXhpbXVtIHNpemUgb2YgYSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGlzIDIgTUIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNyZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb247XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgUGF5ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNyZXF1ZXN0UGF5bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFBheW1lbnQ/OiBCdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQ7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgdGhlIFRhZ1NldCBhbmQgVGFnIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFnZ2luZz86IEJ1Y2tldFNwZWNUYWdnaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHZlcnNpb25pbmcgc3RhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyN2ZXJzaW9uaW5nXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uaW5nPzogQnVja2V0U3BlY1ZlcnNpb25pbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyN3ZWJzaXRlXG4gICAqL1xuICByZWFkb25seSB3ZWJzaXRlPzogQnVja2V0U3BlY1dlYnNpdGU7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlYyhvYmo6IEJ1Y2tldFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY2NlbGVyYXRlJzogdG9Kc29uX0J1Y2tldFNwZWNBY2NlbGVyYXRlKG9iai5hY2NlbGVyYXRlKSxcbiAgICAnYWNsJzogb2JqLmFjbCxcbiAgICAnYW5hbHl0aWNzJzogb2JqLmFuYWx5dGljcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3MoeSkpLFxuICAgICdjb3JzJzogdG9Kc29uX0J1Y2tldFNwZWNDb3JzKG9iai5jb3JzKSxcbiAgICAnY3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbihvYmouY3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiksXG4gICAgJ2VuY3J5cHRpb24nOiB0b0pzb25fQnVja2V0U3BlY0VuY3J5cHRpb24ob2JqLmVuY3J5cHRpb24pLFxuICAgICdncmFudEZ1bGxDb250cm9sJzogb2JqLmdyYW50RnVsbENvbnRyb2wsXG4gICAgJ2dyYW50UmVhZCc6IG9iai5ncmFudFJlYWQsXG4gICAgJ2dyYW50UmVhZEFDUCc6IG9iai5ncmFudFJlYWRBY3AsXG4gICAgJ2dyYW50V3JpdGUnOiBvYmouZ3JhbnRXcml0ZSxcbiAgICAnZ3JhbnRXcml0ZUFDUCc6IG9iai5ncmFudFdyaXRlQWNwLFxuICAgICdpbnRlbGxpZ2VudFRpZXJpbmcnOiBvYmouaW50ZWxsaWdlbnRUaWVyaW5nPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyh5KSksXG4gICAgJ2ludmVudG9yeSc6IG9iai5pbnZlbnRvcnk/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5KHkpKSxcbiAgICAnbGlmZWN5Y2xlJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGUob2JqLmxpZmVjeWNsZSksXG4gICAgJ2xvZ2dpbmcnOiB0b0pzb25fQnVja2V0U3BlY0xvZ2dpbmcob2JqLmxvZ2dpbmcpLFxuICAgICdtZXRyaWNzJzogb2JqLm1ldHJpY3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljcyh5KSksXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbm90aWZpY2F0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb24ob2JqLm5vdGlmaWNhdGlvbiksXG4gICAgJ29iamVjdExvY2tFbmFibGVkRm9yQnVja2V0Jzogb2JqLm9iamVjdExvY2tFbmFibGVkRm9yQnVja2V0LFxuICAgICdvd25lcnNoaXBDb250cm9scyc6IHRvSnNvbl9CdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMob2JqLm93bmVyc2hpcENvbnRyb2xzKSxcbiAgICAncG9saWN5Jzogb2JqLnBvbGljeSxcbiAgICAncHVibGljQWNjZXNzQmxvY2snOiB0b0pzb25fQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrKG9iai5wdWJsaWNBY2Nlc3NCbG9jayksXG4gICAgJ3JlcGxpY2F0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvbihvYmoucmVwbGljYXRpb24pLFxuICAgICdyZXF1ZXN0UGF5bWVudCc6IHRvSnNvbl9CdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQob2JqLnJlcXVlc3RQYXltZW50KSxcbiAgICAndGFnZ2luZyc6IHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZyhvYmoudGFnZ2luZyksXG4gICAgJ3ZlcnNpb25pbmcnOiB0b0pzb25fQnVja2V0U3BlY1ZlcnNpb25pbmcob2JqLnZlcnNpb25pbmcpLFxuICAgICd3ZWJzaXRlJzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlKG9iai53ZWJzaXRlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHRyYW5zZmVyIGFjY2VsZXJhdGlvbiBzdGF0ZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBY2NlbGVyYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FjY2VsZXJhdGUge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQWNjZWxlcmF0ZSNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQWNjZWxlcmF0ZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FjY2VsZXJhdGUob2JqOiBCdWNrZXRTcGVjQWNjZWxlcmF0ZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbnkgYW5hbHlzZXMgZm9yIHRoZSBhbmFseXRpY3MgZmlsdGVyIG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsdGVyIHVzZWQgdG8gZGVzY3JpYmUgYSBzZXQgb2Ygb2JqZWN0cyBmb3IgYW5hbHlzZXMuIEEgZmlsdGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBwcmVmaXgsIG9uZSB0YWcsIG9yIG9uZSBjb25qdW5jdGlvbiAoQW5hbHl0aWNzQW5kT3BlcmF0b3IpLiBJZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQsIGFsbCBvYmplY3RzIHdpbGwgYmUgY29uc2lkZXJlZCBpbiBhbnkgYW5hbHlzaXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljcyNmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljcyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBkYXRhIHJlbGF0ZWQgdG8gYWNjZXNzIHBhdHRlcm5zIHRvIGJlIGNvbGxlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYW5hbHl6ZSB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3NlcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzI3N0b3JhZ2VDbGFzc0FuYWx5c2lzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3NBbmFseXNpcz86IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzKG9iajogQnVja2V0U3BlY0FuYWx5dGljcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnc3RvcmFnZUNsYXNzQW5hbHlzaXMnOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzKG9iai5zdG9yYWdlQ2xhc3NBbmFseXNpcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBjcm9zcy1vcmlnaW4gYWNjZXNzIGNvbmZpZ3VyYXRpb24gZm9yIG9iamVjdHMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBFbmFibGluZyBDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvY29ycy5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQ29yc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNDb3JzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnMjY29yc1J1bGVzXG4gICAqL1xuICByZWFkb25seSBjb3JzUnVsZXM/OiBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNDb3JzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQ29ycyhvYmo6IEJ1Y2tldFNwZWNDb3JzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY29yc1J1bGVzJzogb2JqLmNvcnNSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNDb3JzQ29yc1J1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNDcmVhdGVCdWNrZXRDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiNsb2NhdGlvbkNvbnN0cmFpbnRcbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uQ29uc3RyYWludD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24ob2JqOiBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2xvY2F0aW9uQ29uc3RyYWludCc6IG9iai5sb2NhdGlvbkNvbnN0cmFpbnQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0VuY3J5cHRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjRW5jcnlwdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uKG9iajogQnVja2V0U3BlY0VuY3J5cHRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBjb25maWd1cmF0aW9uIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICogRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MsIHNlZSBTdG9yYWdlIGNsYXNzIGZvciBhdXRvbWF0aWNhbGx5IG9wdGltaXppbmcgZnJlcXVlbnRseSBhbmQgaW5mcmVxdWVudGx5IGFjY2Vzc2VkIG9iamVjdHMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3N0b3JhZ2UtY2xhc3MtaW50cm8uaHRtbCNzYy1keW5hbWljLWRhdGEtYWNjZXNzKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBGaWx0ZXIgaXMgdXNlZCB0byBpZGVudGlmeSBvYmplY3RzIHRoYXQgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgY29uZmlndXJhdGlvbiBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyN0aWVyaW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgdGllcmluZ3M/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nVGllcmluZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgICAndGllcmluZ3MnOiBvYmoudGllcmluZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nVGllcmluZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgR0VUIEJ1Y2tldCBpbnZlbnRvcnkgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRHRVRJbnZlbnRvcnlDb25maWcuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnkge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5I2Rlc3RpbmF0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbj86IEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIGludmVudG9yeSBmaWx0ZXIuIFRoZSBpbnZlbnRvcnkgb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IEJ1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNpbmNsdWRlZE9iamVjdFZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlZE9iamVjdFZlcnNpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnkjaXNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnkjb3B0aW9uYWxGaWVsZHNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRmllbGRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgc2NoZWR1bGUgZm9yIGdlbmVyYXRpbmcgaW52ZW50b3J5IHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNzY2hlZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBCdWNrZXRTcGVjSW52ZW50b3J5U2NoZWR1bGU7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0ludmVudG9yeScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeShvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb24ob2JqLmRlc3RpbmF0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXIob2JqLmZpbHRlciksXG4gICAgJ2lkJzogb2JqLmlkLFxuICAgICdpbmNsdWRlZE9iamVjdFZlcnNpb25zJzogb2JqLmluY2x1ZGVkT2JqZWN0VmVyc2lvbnMsXG4gICAgJ2lzRW5hYmxlZCc6IG9iai5pc0VuYWJsZWQsXG4gICAgJ29wdGlvbmFsRmllbGRzJzogb2JqLm9wdGlvbmFsRmllbGRzPy5tYXAoeSA9PiB5KSxcbiAgICAnc2NoZWR1bGUnOiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeVNjaGVkdWxlKG9iai5zY2hlZHVsZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBsaWZlY3ljbGUgcnVsZXMuIFlvdSBjYW4gYWRkIGFzIG1hbnkgYXMgMSwwMDAgcnVsZXMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGUjcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZShvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBsb2dnaW5nIHN0YXR1cyBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xvZ2dpbmcge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHdoZXJlIGxvZ3MgYXJlIHN0b3JlZCBhbmQgdGhlIHByZWZpeCB0aGF0IEFtYXpvbiBTMyBhc3NpZ25zIHRvIGFsbCBsb2cgb2JqZWN0IGtleXMgZm9yIGEgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBVVCBCdWNrZXQgbG9nZ2luZyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVGxvZ2dpbmcuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nI2xvZ2dpbmdFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nRW5hYmxlZD86IEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQ7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xvZ2dpbmcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nKG9iajogQnVja2V0U3BlY0xvZ2dpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdsb2dnaW5nRW5hYmxlZCc6IHRvSnNvbl9CdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkKG9iai5sb2dnaW5nRW5hYmxlZCksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ2xvdWRXYXRjaCByZXF1ZXN0IG1ldHJpY3MgKHNwZWNpZmllZCBieSB0aGUgbWV0cmljcyBjb25maWd1cmF0aW9uIElEKSBmcm9tIGFuIEFtYXpvbiBTMyBidWNrZXQuIElmIHlvdSdyZSB1cGRhdGluZyBhbiBleGlzdGluZyBtZXRyaWNzIGNvbmZpZ3VyYXRpb24sIG5vdGUgdGhhdCB0aGlzIGlzIGEgZnVsbCByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgbWV0cmljcyBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8ga2VlcCwgdGhleSBhcmUgZXJhc2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFB1dEJ1Y2tldE1ldHJpY3NDb25maWd1cmF0aW9uIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUTWV0cmljQ29uZmlndXJhdGlvbi5odG1sKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3Mge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZpbHRlci4gVGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBvbmx5IGluY2x1ZGVzIG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS4gQSBmaWx0ZXIgbXVzdCBiZSBhIHByZWZpeCwgYW4gb2JqZWN0IHRhZywgYW4gYWNjZXNzIHBvaW50IEFSTiwgb3IgYSBjb25qdW5jdGlvbiAoTWV0cmljc0FuZE9wZXJhdG9yKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQdXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvbiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvQVBJX1B1dEJ1Y2tldE1ldHJpY3NDb25maWd1cmF0aW9uLmh0bWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY01ldHJpY3NGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3MjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNNZXRyaWNzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljcyhvYmo6IEJ1Y2tldFNwZWNNZXRyaWNzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1Y2tldC4gSWYgdGhpcyBlbGVtZW50IGlzIGVtcHR5LCBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uI2xhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb24jcXVldWVDb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcXVldWVDb25maWd1cmF0aW9ucz86IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbiN0b3BpY0NvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSB0b3BpY0NvbmZpZ3VyYXRpb25zPzogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2xhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMnOiBvYmoubGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zKHkpKSxcbiAgICAncXVldWVDb25maWd1cmF0aW9ucyc6IG9iai5xdWV1ZUNvbmZpZ3VyYXRpb25zPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnMoeSkpLFxuICAgICd0b3BpY0NvbmZpZ3VyYXRpb25zJzogb2JqLnRvcGljQ29uZmlndXJhdGlvbnM/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9ucyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIE93bmVyc2hpcENvbnRyb2xzIChCdWNrZXRPd25lclByZWZlcnJlZCBvciBPYmplY3RXcml0ZXIpIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhpcyBBbWF6b24gUzMgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IEJ1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMob2JqOiBCdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgUHVibGljQWNjZXNzQmxvY2sgY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoaXMgQW1hem9uIFMzIGJ1Y2tldC4gWW91IGNhbiBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBhbnkgY29tYmluYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoZW4gQW1hem9uIFMzIGNvbnNpZGVycyBhIGJ1Y2tldCBvciBvYmplY3QgcHVibGljLCBzZWUgVGhlIE1lYW5pbmcgb2YgXCJQdWJsaWNcIiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvYWNjZXNzLWNvbnRyb2wtYmxvY2stcHVibGljLWFjY2Vzcy5odG1sI2FjY2Vzcy1jb250cm9sLWJsb2NrLXB1YmxpYy1hY2Nlc3MtcG9saWN5LXN0YXR1cykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrI2Jsb2NrUHVibGljQUNMc1xuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tQdWJsaWNBY0xzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2sjYmxvY2tQdWJsaWNQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrUHVibGljUG9saWN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2sjaWdub3JlUHVibGljQUNMc1xuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlUHVibGljQWNMcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrI3Jlc3RyaWN0UHVibGljQnVja2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzdHJpY3RQdWJsaWNCdWNrZXRzPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2snIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNQdWJsaWNBY2Nlc3NCbG9jayhvYmo6IEJ1Y2tldFNwZWNQdWJsaWNBY2Nlc3NCbG9jayB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Jsb2NrUHVibGljQUNMcyc6IG9iai5ibG9ja1B1YmxpY0FjTHMsXG4gICAgJ2Jsb2NrUHVibGljUG9saWN5Jzogb2JqLmJsb2NrUHVibGljUG9saWN5LFxuICAgICdpZ25vcmVQdWJsaWNBQ0xzJzogb2JqLmlnbm9yZVB1YmxpY0FjTHMsXG4gICAgJ3Jlc3RyaWN0UHVibGljQnVja2V0cyc6IG9iai5yZXN0cmljdFB1YmxpY0J1Y2tldHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgZm9yIHJlcGxpY2F0aW9uIHJ1bGVzLiBZb3UgY2FuIGFkZCB1cCB0byAxLDAwMCBydWxlcy4gVGhlIG1heGltdW0gc2l6ZSBvZiBhIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gaXMgMiBNQi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiNyb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncm9sZSc6IG9iai5yb2xlLFxuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIFBheWVyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50I3BheWVyXG4gICAqL1xuICByZWFkb25seSBwYXllcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXF1ZXN0UGF5bWVudChvYmo6IEJ1Y2tldFNwZWNSZXF1ZXN0UGF5bWVudCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3BheWVyJzogb2JqLnBheWVyLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIFRhZ1NldCBhbmQgVGFnIGVsZW1lbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjVGFnZ2luZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNUYWdnaW5nI3RhZ1NldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFnU2V0PzogQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXRbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjVGFnZ2luZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1RhZ2dpbmcob2JqOiBCdWNrZXRTcGVjVGFnZ2luZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RhZ1NldCc6IG9iai50YWdTZXQ/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldCh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBzZXR0aW5nIHRoZSB2ZXJzaW9uaW5nIHN0YXRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1ZlcnNpb25pbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjVmVyc2lvbmluZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNWZXJzaW9uaW5nI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNWZXJzaW9uaW5nJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjVmVyc2lvbmluZyhvYmo6IEJ1Y2tldFNwZWNWZXJzaW9uaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSByZXF1ZXN0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjZXJyb3JEb2N1bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JEb2N1bWVudD86IEJ1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgU3VmZml4IGVsZW1lbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjaW5kZXhEb2N1bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhEb2N1bWVudD86IEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSByZWRpcmVjdCBiZWhhdmlvciBvZiBhbGwgcmVxdWVzdHMgdG8gYSB3ZWJzaXRlIGVuZHBvaW50IG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjcmVkaXJlY3RBbGxSZXF1ZXN0c1RvXG4gICAqL1xuICByZWFkb25seSByZWRpcmVjdEFsbFJlcXVlc3RzVG8/OiBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjV2Vic2l0ZSNyb3V0aW5nUnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRpbmdSdWxlcz86IEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1dlYnNpdGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlKG9iajogQnVja2V0U3BlY1dlYnNpdGUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlcnJvckRvY3VtZW50JzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudChvYmouZXJyb3JEb2N1bWVudCksXG4gICAgJ2luZGV4RG9jdW1lbnQnOiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVJbmRleERvY3VtZW50KG9iai5pbmRleERvY3VtZW50KSxcbiAgICAncmVkaXJlY3RBbGxSZXF1ZXN0c1RvJzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvKG9iai5yZWRpcmVjdEFsbFJlcXVlc3RzVG8pLFxuICAgICdyb3V0aW5nUnVsZXMnOiBvYmoucm91dGluZ1J1bGVzPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBmaWx0ZXIgdXNlZCB0byBkZXNjcmliZSBhIHNldCBvZiBvYmplY3RzIGZvciBhbmFseXNlcy4gQSBmaWx0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHByZWZpeCwgb25lIHRhZywgb3Igb25lIGNvbmp1bmN0aW9uIChBbmFseXRpY3NBbmRPcGVyYXRvcikuIElmIG5vIGZpbHRlciBpcyBwcm92aWRlZCwgYWxsIG9iamVjdHMgd2lsbCBiZSBjb25zaWRlcmVkIGluIGFueSBhbmFseXNpcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyIHtcbiAgLyoqXG4gICAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcyBpbiBhbnkgY29tYmluYXRpb24sIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXIob2JqOiBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYW5kJzogdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBkYXRhIHJlbGF0ZWQgdG8gYWNjZXNzIHBhdHRlcm5zIHRvIGJlIGNvbGxlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYW5hbHl6ZSB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3NlcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyB7XG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIGRhdGEgcmVsYXRlZCB0byB0aGUgc3RvcmFnZSBjbGFzcyBhbmFseXNpcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBmb3IgZXhwb3J0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyNkYXRhRXhwb3J0XG4gICAqL1xuICByZWFkb25seSBkYXRhRXhwb3J0PzogQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydDtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2RhdGFFeHBvcnQnOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydChvYmouZGF0YUV4cG9ydCksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGEgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBydWxlIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnNDb3JzUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRIZWFkZXJzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkSGVhZGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRNZXRob2RzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRPcmlnaW5zXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkT3JpZ2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2V4cG9zZUhlYWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGV4cG9zZUhlYWRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnNDb3JzUnVsZXMjbWF4QWdlU2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4QWdlU2Vjb25kcz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0NvcnNDb3JzUnVsZXMob2JqOiBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FsbG93ZWRIZWFkZXJzJzogb2JqLmFsbG93ZWRIZWFkZXJzPy5tYXAoeSA9PiB5KSxcbiAgICAnYWxsb3dlZE1ldGhvZHMnOiBvYmouYWxsb3dlZE1ldGhvZHM/Lm1hcCh5ID0+IHkpLFxuICAgICdhbGxvd2VkT3JpZ2lucyc6IG9iai5hbGxvd2VkT3JpZ2lucz8ubWFwKHkgPT4geSksXG4gICAgJ2V4cG9zZUhlYWRlcnMnOiBvYmouZXhwb3NlSGVhZGVycz8ubWFwKHkgPT4geSksXG4gICAgJ2lkJzogb2JqLmlkLFxuICAgICdtYXhBZ2VTZWNvbmRzJzogb2JqLm1heEFnZVNlY29uZHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzIHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHRvIGFwcGx5IHRvIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuIElmIGEgUFVUIE9iamVjdCByZXF1ZXN0IGRvZXNuJ3Qgc3BlY2lmeSBhbnkgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgdGhpcyBkZWZhdWx0IGVuY3J5cHRpb24gd2lsbCBiZSBhcHBsaWVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBVVCBCdWNrZXQgZW5jcnlwdGlvbiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVGVuY3J5cHRpb24uaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMjYXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdD86IEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMjYnVja2V0S2V5RW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0S2V5RW5hYmxlZD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlcyhvYmo6IEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0JzogdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KG9iai5hcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KSxcbiAgICAnYnVja2V0S2V5RW5hYmxlZCc6IG9iai5idWNrZXRLZXlFbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBGaWx0ZXIgaXMgdXNlZCB0byBpZGVudGlmeSBvYmplY3RzIHRoYXQgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgY29uZmlndXJhdGlvbiBhcHBsaWVzIHRvLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIHNwZWNpZnlpbmcgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBmaWx0ZXJzLiBUaGUgZmlsdGVycyBkZXRlcm1pbmUgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIob2JqOiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYW5kJzogdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MgaXMgZGVzaWduZWQgdG8gb3B0aW1pemUgc3RvcmFnZSBjb3N0cyBieSBhdXRvbWF0aWNhbGx5IG1vdmluZyBkYXRhIHRvIHRoZSBtb3N0IGNvc3QtZWZmZWN0aXZlIHN0b3JhZ2UgYWNjZXNzIHRpZXIsIHdpdGhvdXQgYWRkaXRpb25hbCBvcGVyYXRpb25hbCBvdmVyaGVhZC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyNhY2Nlc3NUaWVyXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NUaWVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyNkYXlzXG4gICAqL1xuICByZWFkb25seSBkYXlzPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1RpZXJpbmdzKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1RpZXJpbmdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWNjZXNzVGllcic6IG9iai5hY2Nlc3NUaWVyLFxuICAgICdkYXlzJzogb2JqLmRheXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBDb250YWlucyB0aGUgYnVja2V0IG5hbWUsIGZpbGUgZm9ybWF0LCBidWNrZXQgb3duZXIgKG9wdGlvbmFsKSwgYW5kIHByZWZpeCAob3B0aW9uYWwpIHdoZXJlIGludmVudG9yeSByZXN1bHRzIGFyZSBwdWJsaXNoZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uI3MzQnVja2V0RGVzdGluYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzQnVja2V0RGVzdGluYXRpb24/OiBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnczNCdWNrZXREZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uKG9iai5zM0J1Y2tldERlc3RpbmF0aW9uKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgYW4gaW52ZW50b3J5IGZpbHRlci4gVGhlIGludmVudG9yeSBvbmx5IGluY2x1ZGVzIG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeUZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyKG9iajogQnVja2V0U3BlY0ludmVudG9yeUZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBzY2hlZHVsZSBmb3IgZ2VuZXJhdGluZyBpbnZlbnRvcnkgcmVzdWx0cy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSNmcmVxdWVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGZyZXF1ZW5jeT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW52ZW50b3J5U2NoZWR1bGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZShvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZyZXF1ZW5jeSc6IG9iai5mcmVxdWVuY3ksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBsaWZlY3ljbGUgcnVsZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXlzIHNpbmNlIHRoZSBpbml0aWF0aW9uIG9mIGFuIGluY29tcGxldGUgbXVsdGlwYXJ0IHVwbG9hZCB0aGF0IEFtYXpvbiBTMyB3aWxsIHdhaXQgYmVmb3JlIHBlcm1hbmVudGx5IHJlbW92aW5nIGFsbCBwYXJ0cyBvZiB0aGUgdXBsb2FkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEFib3J0aW5nIEluY29tcGxldGUgTXVsdGlwYXJ0IFVwbG9hZHMgVXNpbmcgYSBCdWNrZXQgTGlmZWN5Y2xlIFBvbGljeSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbCNtcHUtYWJvcnQtaW5jb21wbGV0ZS1tcHUtbGlmZWN5Y2xlLWNvbmZpZykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNhYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcbiAgICovXG4gIHJlYWRvbmx5IGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZD86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0Fib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNleHBpcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRXhwaXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEZpbHRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IG9iamVjdHMgdGhhdCBhIExpZmVjeWNsZSBSdWxlIGFwcGxpZXMgdG8uIEEgRmlsdGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiBQcmVmaXgsIFRhZywgb3IgQW5kIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZW4gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgZXhwaXJlLiBVcG9uIGV4cGlyYXRpb24sIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IEFtYXpvbiBTMyBkZWxldGUgbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgYXQgYSBzcGVjaWZpYyBwZXJpb2QgaW4gdGhlIG9iamVjdCdzIGxpZmV0aW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbj86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyN0cmFuc2l0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdGlvbnM/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNUcmFuc2l0aW9uc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0Fib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZChvYmouYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKSxcbiAgICAnZXhwaXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uKG9iai5leHBpcmF0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlcihvYmouZmlsdGVyKSxcbiAgICAnaWQnOiBvYmouaWQsXG4gICAgJ25vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb24ob2JqLm5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbiksXG4gICAgJ25vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMnOiBvYmoubm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMoeSkpLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICAgICd0cmFuc2l0aW9ucyc6IG9iai50cmFuc2l0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZXNjcmliZXMgd2hlcmUgbG9ncyBhcmUgc3RvcmVkIGFuZCB0aGUgcHJlZml4IHRoYXQgQW1hem9uIFMzIGFzc2lnbnMgdG8gYWxsIGxvZyBvYmplY3Qga2V5cyBmb3IgYSBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUFVUIEJ1Y2tldCBsb2dnaW5nIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUbG9nZ2luZy5odG1sKSBpbiB0aGUgQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQjdGFyZ2V0QnVja2V0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXRCdWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZCN0YXJnZXRHcmFudHNcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyYW50cz86IEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkI3RhcmdldFByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UHJlZml4Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndGFyZ2V0QnVja2V0Jzogb2JqLnRhcmdldEJ1Y2tldCxcbiAgICAndGFyZ2V0R3JhbnRzJzogb2JqLnRhcmdldEdyYW50cz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMoeSkpLFxuICAgICd0YXJnZXRQcmVmaXgnOiBvYmoudGFyZ2V0UHJlZml4LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIG1ldHJpY3MgY29uZmlndXJhdGlvbiBmaWx0ZXIuIFRoZSBtZXRyaWNzIGNvbmZpZ3VyYXRpb24gb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuIEEgZmlsdGVyIG11c3QgYmUgYSBwcmVmaXgsIGFuIG9iamVjdCB0YWcsIGFuIGFjY2VzcyBwb2ludCBBUk4sIG9yIGEgY29uanVuY3Rpb24gKE1ldHJpY3NBbmRPcGVyYXRvcikuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUHV0QnVja2V0TWV0cmljc0NvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL0FQSV9QdXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvbi5odG1sKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciNhY2Nlc3NQb2ludEFSTlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzUG9pbnRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcywgYW5kIGFuIG9iamVjdCBtdXN0IG1hdGNoIGFsbCBvZiB0aGUgcHJlZGljYXRlcyBpbiBvcmRlciBmb3IgdGhlIGZpbHRlciB0byBhcHBseS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc1BvaW50QVJOJzogb2JqLmFjY2Vzc1BvaW50QXJuLFxuICAgICdhbmQnOiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyhvYmoudGFnKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmb3IgTGFtYmRhIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMjZXZlbnRzXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmcgcnVsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBrZXkgbmFtZSBmaWx0ZXJpbmcsIHNlZSBDb25maWd1cmluZyBFdmVudCBOb3RpZmljYXRpb25zIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGNvbmZpZ3VyYXRpb25zIGluIGEgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIElmIHlvdSBkb24ndCBwcm92aWRlIG9uZSwgQW1hem9uIFMzIHdpbGwgYXNzaWduIGFuIElELlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucyNsYW1iZGFGdW5jdGlvbkFSTlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb25Bcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdldmVudHMnOiBvYmouZXZlbnRzPy5tYXAoeSA9PiB5KSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnbGFtYmRhRnVuY3Rpb25BUk4nOiBvYmoubGFtYmRhRnVuY3Rpb25Bcm4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaXNoaW5nIG1lc3NhZ2VzIHRvIGFuIEFtYXpvbiBTaW1wbGUgUXVldWUgU2VydmljZSAoQW1hem9uIFNRUykgcXVldWUgd2hlbiBBbWF6b24gUzMgZGV0ZWN0cyBzcGVjaWZpZWQgZXZlbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zI2V2ZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBvYmplY3Qga2V5IG5hbWUgZmlsdGVyaW5nIHJ1bGVzLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQga2V5IG5hbWUgZmlsdGVyaW5nLCBzZWUgQ29uZmlndXJpbmcgRXZlbnQgTm90aWZpY2F0aW9ucyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvTm90aWZpY2F0aW9uSG93VG8uaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBjb25maWd1cmF0aW9ucyBpbiBhIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBvbmUsIEFtYXpvbiBTMyB3aWxsIGFzc2lnbiBhbiBJRC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnMjcXVldWVBUk5cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlQXJuPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyhvYmo6IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZXZlbnRzJzogb2JqLmV2ZW50cz8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcihvYmouZmlsdGVyKSxcbiAgICAnaWQnOiBvYmouaWQsXG4gICAgJ3F1ZXVlQVJOJzogb2JqLnF1ZXVlQXJuLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaWNhdGlvbiBvZiBtZXNzYWdlcyB0byBhbiBBbWF6b24gU2ltcGxlIE5vdGlmaWNhdGlvbiBTZXJ2aWNlIChBbWF6b24gU05TKSB0b3BpYyB3aGVuIEFtYXpvbiBTMyBkZXRlY3RzIHNwZWNpZmllZCBldmVudHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMjZXZlbnRzXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmcgcnVsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBrZXkgbmFtZSBmaWx0ZXJpbmcsIHNlZSBDb25maWd1cmluZyBFdmVudCBOb3RpZmljYXRpb25zIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGNvbmZpZ3VyYXRpb25zIGluIGEgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIElmIHlvdSBkb24ndCBwcm92aWRlIG9uZSwgQW1hem9uIFMzIHdpbGwgYXNzaWduIGFuIElELlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9ucyN0b3BpY0FSTlxuICAgKi9cbiAgcmVhZG9ubHkgdG9waWNBcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdldmVudHMnOiBvYmouZXZlbnRzPy5tYXAoeSA9PiB5KSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAndG9waWNBUk4nOiBvYmoudG9waWNBcm4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciBhbiBvd25lcnNoaXAgY29udHJvbCBydWxlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHNSdWxlcyB7XG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIGVsZW1lbnQgZm9yIG9iamVjdCBvd25lcnNoaXAgZm9yIGEgYnVja2V0J3Mgb3duZXJzaGlwIGNvbnRyb2xzLlxuICAgKiBCdWNrZXRPd25lclByZWZlcnJlZCAtIE9iamVjdHMgdXBsb2FkZWQgdG8gdGhlIGJ1Y2tldCBjaGFuZ2Ugb3duZXJzaGlwIHRvIHRoZSBidWNrZXQgb3duZXIgaWYgdGhlIG9iamVjdHMgYXJlIHVwbG9hZGVkIHdpdGggdGhlIGJ1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wgY2FubmVkIEFDTC5cbiAgICogT2JqZWN0V3JpdGVyIC0gVGhlIHVwbG9hZGluZyBhY2NvdW50IHdpbGwgb3duIHRoZSBvYmplY3QgaWYgdGhlIG9iamVjdCBpcyB1cGxvYWRlZCB3aXRoIHRoZSBidWNrZXQtb3duZXItZnVsbC1jb250cm9sIGNhbm5lZCBBQ0wuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMjb2JqZWN0T3duZXJzaGlwXG4gICAqL1xuICByZWFkb25seSBvYmplY3RPd25lcnNoaXA/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzKG9iajogQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvYmplY3RPd25lcnNoaXAnOiBvYmoub2JqZWN0T3duZXJzaGlwLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB3aGljaCBBbWF6b24gUzMgb2JqZWN0cyB0byByZXBsaWNhdGUgYW5kIHdoZXJlIHRvIHN0b3JlIHRoZSByZXBsaWNhcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHJlcGxpY2F0ZXMgZGVsZXRlIG1hcmtlcnMuIElmIHlvdSBzcGVjaWZ5IGEgRmlsdGVyIGluIHlvdXIgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgeW91IG11c3QgYWxzbyBpbmNsdWRlIGEgRGVsZXRlTWFya2VyUmVwbGljYXRpb24gZWxlbWVudC4gSWYgeW91ciBGaWx0ZXIgaW5jbHVkZXMgYSBUYWcgZWxlbWVudCwgdGhlIERlbGV0ZU1hcmtlclJlcGxpY2F0aW9uIFN0YXR1cyBtdXN0IGJlIHNldCB0byBEaXNhYmxlZCwgYmVjYXVzZSBBbWF6b24gUzMgZG9lcyBub3Qgc3VwcG9ydCByZXBsaWNhdGluZyBkZWxldGUgbWFya2VycyBmb3IgdGFnLWJhc2VkIHJ1bGVzLiBGb3IgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uLCBzZWUgQmFzaWMgUnVsZSBDb25maWd1cmF0aW9uIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tY29uZmlnLW1pbi1ydWxlLWNvbmZpZykuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2RlbGV0ZS1tYXJrZXItcmVwbGljYXRpb24uaHRtbCkuXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCBBbWF6b24gUzMgaGFuZGxlcyByZXBsaWNhdGlvbiBvZiBkZWxldGUgbWFya2VycyBkaWZmZXJlbnRseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tYmFja3dhcmQtY29tcGF0LWNvbnNpZGVyYXRpb25zKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNkZWxldGVNYXJrZXJSZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlTWFya2VyUmVwbGljYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0RlbGV0ZU1hcmtlclJlcGxpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCBhbmFseXNpcyBvciBjb25maWd1cmF0aW9uIHJlc3VsdHMgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQgYW5kIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNkZXN0aW5hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIHJlcGxpY2F0ZSBleGlzdGluZyBzb3VyY2UgYnVja2V0IG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVwbGljYXRpbmcgRXhpc3RpbmcgT2JqZWN0cyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24td2hhdC1pcy1pc25vdC1yZXBsaWNhdGVkLmh0bWwjZXhpc3Rpbmctb2JqZWN0LXJlcGxpY2F0aW9uKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMjZXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbj86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbjtcblxuICAvKipcbiAgICogQSBmaWx0ZXIgdGhhdCBpZGVudGlmaWVzIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcmVwbGljYXRpb24gcnVsZSBhcHBsaWVzLiBBIEZpbHRlciBtdXN0IHNwZWNpZnkgZXhhY3RseSBvbmUgUHJlZml4LCBUYWcsIG9yIGFuIEFuZCBjaGlsZCBlbGVtZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3ByaW9yaXR5XG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBjb250YWluZXIgdGhhdCBkZXNjcmliZXMgYWRkaXRpb25hbCBmaWx0ZXJzIGZvciBpZGVudGlmeWluZyB0aGUgc291cmNlIG9iamVjdHMgdGhhdCB5b3Ugd2FudCB0byByZXBsaWNhdGUuIFlvdSBjYW4gY2hvb3NlIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSByZXBsaWNhdGlvbiBvZiB0aGVzZSBvYmplY3RzLiBDdXJyZW50bHksIEFtYXpvbiBTMyBzdXBwb3J0cyBvbmx5IHRoZSBmaWx0ZXIgdGhhdCB5b3UgY2FuIHNwZWNpZnkgZm9yIG9iamVjdHMgY3JlYXRlZCB3aXRoIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdXNpbmcgYSBjdXN0b21lciBtYW5hZ2VkIGtleSBzdG9yZWQgaW4gQW1hem9uIFdlYiBTZXJ2aWNlcyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChTU0UtS01TKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNzb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlU2VsZWN0aW9uQ3JpdGVyaWE/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyhvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVsZXRlTWFya2VyUmVwbGljYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbihvYmouZGVsZXRlTWFya2VyUmVwbGljYXRpb24pLFxuICAgICdkZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uKG9iai5kZXN0aW5hdGlvbiksXG4gICAgJ2V4aXN0aW5nT2JqZWN0UmVwbGljYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKG9iai5leGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAncHJpb3JpdHknOiBvYmoucHJpb3JpdHksXG4gICAgJ3NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEob2JqLnNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhKSxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNUYWdnaW5nVGFnU2V0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXQja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXQjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNUYWdnaW5nVGFnU2V0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldChvYmo6IEJ1Y2tldFNwZWNUYWdnaW5nVGFnU2V0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGVycm9yIGluZm9ybWF0aW9uLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50I2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50KG9iajogQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSBTdWZmaXggZWxlbWVudC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCNzdWZmaXhcbiAgICovXG4gIHJlYWRvbmx5IHN1ZmZpeD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZUluZGV4RG9jdW1lbnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudChvYmo6IEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N1ZmZpeCc6IG9iai5zdWZmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSByZWRpcmVjdCBiZWhhdmlvciBvZiBhbGwgcmVxdWVzdHMgdG8gYSB3ZWJzaXRlIGVuZHBvaW50IG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUb1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSZWRpcmVjdEFsbFJlcXVlc3RzVG8jaG9zdE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGhvc3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvI3Byb3RvY29sXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSZWRpcmVjdEFsbFJlcXVlc3RzVG8ob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2hvc3ROYW1lJzogb2JqLmhvc3ROYW1lLFxuICAgICdwcm90b2NvbCc6IG9iai5wcm90b2NvbCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHJlZGlyZWN0IGJlaGF2aW9yIGFuZCB3aGVuIGEgcmVkaXJlY3QgaXMgYXBwbGllZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm91dGluZyBydWxlcywgc2VlIENvbmZpZ3VyaW5nIGFkdmFuY2VkIGNvbmRpdGlvbmFsIHJlZGlyZWN0cyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvaG93LXRvLXBhZ2UtcmVkaXJlY3QuaHRtbCNhZHZhbmNlZC1jb25kaXRpb25hbC1yZWRpcmVjdHMpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGRlc2NyaWJpbmcgYSBjb25kaXRpb24gdGhhdCBtdXN0IGJlIG1ldCBmb3IgdGhlIHNwZWNpZmllZCByZWRpcmVjdCB0byBhcHBseS4gRm9yIGV4YW1wbGUsIDEuIElmIHJlcXVlc3QgaXMgZm9yIHBhZ2VzIGluIHRoZSAvZG9jcyBmb2xkZXIsIHJlZGlyZWN0IHRvIHRoZSAvZG9jdW1lbnRzIGZvbGRlci4gMi4gSWYgcmVxdWVzdCByZXN1bHRzIGluIEhUVFAgZXJyb3IgNHh4LCByZWRpcmVjdCByZXF1ZXN0IHRvIGFub3RoZXIgaG9zdCB3aGVyZSB5b3UgbWlnaHQgcHJvY2VzcyB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMjY29uZGl0aW9uXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyByZXF1ZXN0cyBhcmUgcmVkaXJlY3RlZC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCB5b3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSB0byByZXR1cm4uXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMjcmVkaXJlY3RcbiAgICovXG4gIHJlYWRvbmx5IHJlZGlyZWN0PzogQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdDtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2NvbmRpdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbihvYmouY29uZGl0aW9uKSxcbiAgICAncmVkaXJlY3QnOiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdChvYmoucmVkaXJlY3QpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcyBpbiBhbnkgY29tYmluYXRpb24sIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQjcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCN0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kKG9iajogQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZ3MnOiBvYmoudGFncz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJUYWcja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGRhdGEgcmVsYXRlZCB0byB0aGUgc3RvcmFnZSBjbGFzcyBhbmFseXNpcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBmb3IgZXhwb3J0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQge1xuICAvKipcbiAgICogV2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydCNkZXN0aW5hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydCNvdXRwdXRTY2hlbWFWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRTY2hlbWFWZXJzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQob2JqOiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVzdGluYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uKG9iai5kZXN0aW5hdGlvbiksXG4gICAgJ291dHB1dFNjaGVtYVZlcnNpb24nOiBvYmoub3V0cHV0U2NoZW1hVmVyc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0byBhcHBseSB0byBuZXcgb2JqZWN0cyBpbiB0aGUgYnVja2V0LiBJZiBhIFBVVCBPYmplY3QgcmVxdWVzdCBkb2Vzbid0IHNwZWNpZnkgYW55IHNlcnZlci1zaWRlIGVuY3J5cHRpb24sIHRoaXMgZGVmYXVsdCBlbmNyeXB0aW9uIHdpbGwgYmUgYXBwbGllZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQVVQgQnVja2V0IGVuY3J5cHRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRQVVRlbmNyeXB0aW9uLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgQVBJIFJlZmVyZW5jZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzQXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdCNrbXNNYXN0ZXJLZXlJRFxuICAgKi9cbiAgcmVhZG9ubHkga21zTWFzdGVyS2V5SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQjc3NlQWxnb3JpdGhtXG4gICAqL1xuICByZWFkb25seSBzc2VBbGdvcml0aG0/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KG9iajogQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrbXNNYXN0ZXJLZXlJRCc6IG9iai5rbXNNYXN0ZXJLZXlJZCxcbiAgICAnc3NlQWxnb3JpdGhtJzogb2JqLnNzZUFsZ29yaXRobSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIGZpbHRlcnMuIFRoZSBmaWx0ZXJzIGRldGVybWluZSB0aGUgc3Vic2V0IG9mIG9iamVjdHMgdG8gd2hpY2ggdGhlIHJ1bGUgYXBwbGllcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kI3RhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFnc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQob2JqOiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAndGFncyc6IG9iai50YWdzPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJUYWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclRhZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBidWNrZXQgbmFtZSwgZmlsZSBmb3JtYXQsIGJ1Y2tldCBvd25lciAob3B0aW9uYWwpLCBhbmQgcHJlZml4IChvcHRpb25hbCkgd2hlcmUgaW52ZW50b3J5IHJlc3VsdHMgYXJlIHB1Ymxpc2hlZC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNhY2NvdW50SURcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI2J1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyB0aGUgdHlwZSBvZiBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzZWQgdG8gZW5jcnlwdCB0aGUgaW52ZW50b3J5IHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNmb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24ob2JqOiBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWNjb3VudElEJzogb2JqLmFjY291bnRJZCxcbiAgICAnYnVja2V0Jzogb2JqLmJ1Y2tldCxcbiAgICAnZW5jcnlwdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvbihvYmouZW5jcnlwdGlvbiksXG4gICAgJ2Zvcm1hdCc6IG9iai5mb3JtYXQsXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkYXlzIHNpbmNlIHRoZSBpbml0aWF0aW9uIG9mIGFuIGluY29tcGxldGUgbXVsdGlwYXJ0IHVwbG9hZCB0aGF0IEFtYXpvbiBTMyB3aWxsIHdhaXQgYmVmb3JlIHBlcm1hbmVudGx5IHJlbW92aW5nIGFsbCBwYXJ0cyBvZiB0aGUgdXBsb2FkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEFib3J0aW5nIEluY29tcGxldGUgTXVsdGlwYXJ0IFVwbG9hZHMgVXNpbmcgYSBCdWNrZXQgTGlmZWN5Y2xlIFBvbGljeSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbCNtcHUtYWJvcnQtaW5jb21wbGV0ZS1tcHUtbGlmZWN5Y2xlLWNvbmZpZykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkI2RheXNBZnRlckluaXRpYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRheXNBZnRlckluaXRpYXRpb24/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXlzQWZ0ZXJJbml0aWF0aW9uJzogb2JqLmRheXNBZnRlckluaXRpYXRpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRXhwaXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uI2RhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24jZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgZGF5cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uI2V4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4cGlyZWRPYmplY3REZWxldGVNYXJrZXI/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24ob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGF0ZSc6IG9iai5kYXRlPy50b0lTT1N0cmluZygpLFxuICAgICdkYXlzJzogb2JqLmRheXMsXG4gICAgJ2V4cGlyZWRPYmplY3REZWxldGVNYXJrZXInOiBvYmouZXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlcixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgRmlsdGVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgb2JqZWN0cyB0aGF0IGEgTGlmZWN5Y2xlIFJ1bGUgYXBwbGllcyB0by4gQSBGaWx0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIFByZWZpeCwgVGFnLCBvciBBbmQgc3BlY2lmaWVkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgdXNlZCBpbiBhIExpZmVjeWNsZSBSdWxlIEZpbHRlciB0byBhcHBseSBhIGxvZ2ljYWwgQU5EIHRvIHR3byBvciBtb3JlIHByZWRpY2F0ZXMuIFRoZSBMaWZlY3ljbGUgUnVsZSB3aWxsIGFwcGx5IHRvIGFueSBvYmplY3QgbWF0Y2hpbmcgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIGNvbmZpZ3VyZWQgaW5zaWRlIHRoZSBBbmQgb3BlcmF0b3IuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyI2FuZFxuICAgKi9cbiAgcmVhZG9ubHkgYW5kPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciN0YWdcbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlcihvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FuZCc6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJUYWcob2JqLnRhZyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHdoZW4gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgZXhwaXJlLiBVcG9uIGV4cGlyYXRpb24sIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IEFtYXpvbiBTMyBkZWxldGUgbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgYXQgYSBzcGVjaWZpYyBwZXJpb2QgaW4gdGhlIG9iamVjdCdzIGxpZmV0aW1lLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uI25vbmN1cnJlbnREYXlzXG4gICAqL1xuICByZWFkb25seSBub25jdXJyZW50RGF5cz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbihvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25vbmN1cnJlbnREYXlzJzogb2JqLm5vbmN1cnJlbnREYXlzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIHRyYW5zaXRpb24gcnVsZSB0aGF0IGRlc2NyaWJlcyB3aGVuIG5vbmN1cnJlbnQgb2JqZWN0cyB0cmFuc2l0aW9uIHRvIHRoZSBTVEFOREFSRF9JQSwgT05FWk9ORV9JQSwgSU5URUxMSUdFTlRfVElFUklORywgR0xBQ0lFUiwgb3IgREVFUF9BUkNISVZFIHN0b3JhZ2UgY2xhc3MuIElmIHlvdXIgYnVja2V0IGlzIHZlcnNpb25pbmctZW5hYmxlZCAob3IgdmVyc2lvbmluZyBpcyBzdXNwZW5kZWQpLCB5b3UgY2FuIHNldCB0aGlzIGFjdGlvbiB0byByZXF1ZXN0IHRoYXQgQW1hem9uIFMzIHRyYW5zaXRpb24gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgdG8gdGhlIFNUQU5EQVJEX0lBLCBPTkVaT05FX0lBLCBJTlRFTExJR0VOVF9USUVSSU5HLCBHTEFDSUVSLCBvciBERUVQX0FSQ0hJVkUgc3RvcmFnZSBjbGFzcyBhdCBhIHNwZWNpZmljIHBlcmlvZCBpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMjbm9uY3VycmVudERheXNcbiAgICovXG4gIHJlYWRvbmx5IG5vbmN1cnJlbnREYXlzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMjc3RvcmFnZUNsYXNzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3M/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucyhvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdub25jdXJyZW50RGF5cyc6IG9iai5ub25jdXJyZW50RGF5cyxcbiAgICAnc3RvcmFnZUNsYXNzJzogb2JqLnN0b3JhZ2VDbGFzcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hlbiBhbiBvYmplY3QgdHJhbnNpdGlvbnMgdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFMzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIHJ1bGVzLCBzZWUgVHJhbnNpdGlvbmluZyBPYmplY3RzIFVzaW5nIEFtYXpvbiBTMyBMaWZlY3ljbGUgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNUcmFuc2l0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zI2RhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zI2RheXNcbiAgICovXG4gIHJlYWRvbmx5IGRheXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMjc3RvcmFnZUNsYXNzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3M/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRlJzogb2JqLmRhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgJ2RheXMnOiBvYmouZGF5cyxcbiAgICAnc3RvcmFnZUNsYXNzJzogb2JqLnN0b3JhZ2VDbGFzcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGdyYW50aW5nIGluZm9ybWF0aW9uLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMge1xuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgcGVyc29uIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50cyNncmFudGVlXG4gICAqL1xuICByZWFkb25seSBncmFudGVlPzogQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50cyNwZXJtaXNzaW9uXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZ3JhbnRlZSc6IHRvSnNvbl9CdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZShvYmouZ3JhbnRlZSksXG4gICAgJ3Blcm1pc3Npb24nOiBvYmoucGVybWlzc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbmp1bmN0aW9uIChsb2dpY2FsIEFORCkgb2YgcHJlZGljYXRlcywgd2hpY2ggaXMgdXNlZCBpbiBldmFsdWF0aW5nIGEgbWV0cmljcyBmaWx0ZXIuIFRoZSBvcGVyYXRvciBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHByZWRpY2F0ZXMsIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgaW4gb3JkZXIgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQjYWNjZXNzUG9pbnRBUk5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc1BvaW50QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kI3RhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQob2JqOiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc1BvaW50QVJOJzogb2JqLmFjY2Vzc1BvaW50QXJuLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICd0YWdzJzogb2JqLnRhZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgcmVwbGljYXRlcyBkZWxldGUgbWFya2Vycy4gSWYgeW91IHNwZWNpZnkgYSBGaWx0ZXIgaW4geW91ciByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgYSBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiBlbGVtZW50LiBJZiB5b3VyIEZpbHRlciBpbmNsdWRlcyBhIFRhZyBlbGVtZW50LCB0aGUgRGVsZXRlTWFya2VyUmVwbGljYXRpb24gU3RhdHVzIG11c3QgYmUgc2V0IHRvIERpc2FibGVkLCBiZWNhdXNlIEFtYXpvbiBTMyBkb2VzIG5vdCBzdXBwb3J0IHJlcGxpY2F0aW5nIGRlbGV0ZSBtYXJrZXJzIGZvciB0YWctYmFzZWQgcnVsZXMuIEZvciBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3JlcGxpY2F0aW9uLWFkZC1jb25maWcuaHRtbCNyZXBsaWNhdGlvbi1jb25maWctbWluLXJ1bGUtY29uZmlnKS5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2RlbGV0ZS1tYXJrZXItcmVwbGljYXRpb24uaHRtbCkuXG4gKiBJZiB5b3UgYXJlIHVzaW5nIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgQW1hem9uIFMzIGhhbmRsZXMgcmVwbGljYXRpb24gb2YgZGVsZXRlIG1hcmtlcnMgZGlmZmVyZW50bHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24tYWRkLWNvbmZpZy5odG1sI3JlcGxpY2F0aW9uLWJhY2t3YXJkLWNvbXBhdC1jb25zaWRlcmF0aW9ucykuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0RlbGV0ZU1hcmtlclJlcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVsZXRlTWFya2VyUmVwbGljYXRpb24jc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbihvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVsZXRlTWFya2VyUmVwbGljYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0byBwdWJsaXNoIGFuYWx5c2lzIG9yIGNvbmZpZ3VyYXRpb24gcmVzdWx0cyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBhbmQgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFjY2VzcyBjb250cm9sIGZvciByZXBsaWNhcy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2FjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbkFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2FjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldD86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGEgZGVzdGluYXRpb24gZm9yIHJlcGxpY2F0ZWQgb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2VuY3J5cHRpb25Db25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBjb250YWluZXIgc3BlY2lmeWluZyByZXBsaWNhdGlvbiBtZXRyaWNzLXJlbGF0ZWQgc2V0dGluZ3MgZW5hYmxpbmcgcmVwbGljYXRpb24gbWV0cmljcyBhbmQgZXZlbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb24jbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljcz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSByZWxhdGVkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgd2hldGhlciBTMyBSVEMgaXMgZW5hYmxlZCBhbmQgdGhlIHRpbWUgd2hlbiBhbGwgb2JqZWN0cyBhbmQgb3BlcmF0aW9ucyBvbiBvYmplY3RzIG11c3QgYmUgcmVwbGljYXRlZC4gTXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBhIE1ldHJpY3MgYmxvY2suXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNyZXBsaWNhdGlvblRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uVGltZT86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNzdG9yYWdlQ2xhc3NcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VDbGFzcz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uKG9iai5hY2Nlc3NDb250cm9sVHJhbnNsYXRpb24pLFxuICAgICdhY2NvdW50Jzogb2JqLmFjY291bnQsXG4gICAgJ2J1Y2tldCc6IG9iai5idWNrZXQsXG4gICAgJ2VuY3J5cHRpb25Db25maWd1cmF0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbihvYmouZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pLFxuICAgICdtZXRyaWNzJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzKG9iai5tZXRyaWNzKSxcbiAgICAncmVwbGljYXRpb25UaW1lJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWUob2JqLnJlcGxpY2F0aW9uVGltZSksXG4gICAgJ3N0b3JhZ2VDbGFzcyc6IG9iai5zdG9yYWdlQ2xhc3MsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byByZXBsaWNhdGUgZXhpc3Rpbmcgc291cmNlIGJ1Y2tldCBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlcGxpY2F0aW5nIEV4aXN0aW5nIE9iamVjdHMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3JlcGxpY2F0aW9uLXdoYXQtaXMtaXNub3QtcmVwbGljYXRlZC5odG1sI2V4aXN0aW5nLW9iamVjdC1yZXBsaWNhdGlvbikgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IGlkZW50aWZpZXMgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSByZXBsaWNhdGlvbiBydWxlIGFwcGxpZXMuIEEgRmlsdGVyIG11c3Qgc3BlY2lmeSBleGFjdGx5IG9uZSBQcmVmaXgsIFRhZywgb3IgYW4gQW5kIGNoaWxkIGVsZW1lbnQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyIHtcbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHJ1bGUgZmlsdGVycy4gVGhlIGZpbHRlcnMgZGV0ZXJtaW5lIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiBUaGlzIGVsZW1lbnQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbHRlci5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICogSWYgeW91IHNwZWNpZnkgYm90aCBhIFByZWZpeCBhbmQgYSBUYWcgZmlsdGVyLCB3cmFwIHRoZXNlIGZpbHRlcnMgaW4gICAgYW4gQW5kIHRhZy5cbiAgICogKiBJZiB5b3Ugc3BlY2lmeSBhIGZpbHRlciBiYXNlZCBvbiBtdWx0aXBsZSB0YWdzLCB3cmFwIHRoZSBUYWcgZWxlbWVudHMgICAgaW4gYW4gQW5kIHRhZy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FuZCc6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZChvYmouYW5kKSxcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAndGFnJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIHRoYXQgZGVzY3JpYmVzIGFkZGl0aW9uYWwgZmlsdGVycyBmb3IgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBvYmplY3RzIHRoYXQgeW91IHdhbnQgdG8gcmVwbGljYXRlLiBZb3UgY2FuIGNob29zZSB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcmVwbGljYXRpb24gb2YgdGhlc2Ugb2JqZWN0cy4gQ3VycmVudGx5LCBBbWF6b24gUzMgc3VwcG9ydHMgb25seSB0aGUgZmlsdGVyIHRoYXQgeW91IGNhbiBzcGVjaWZ5IGZvciBvYmplY3RzIGNyZWF0ZWQgd2l0aCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzaW5nIGEgY3VzdG9tZXIgbWFuYWdlZCBrZXkgc3RvcmVkIGluIEFtYXpvbiBXZWIgU2VydmljZXMgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoU1NFLUtNUykuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYSB7XG4gIC8qKlxuICAgKiBBIGZpbHRlciB0aGF0IHlvdSBjYW4gc3BlY2lmeSBmb3Igc2VsZWN0aW9uIGZvciBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLiBBbWF6b24gUzMgZG9lc24ndCByZXBsaWNhdGUgcmVwbGljYSBtb2RpZmljYXRpb25zIGJ5IGRlZmF1bHQuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uICh3aGVuIEZpbHRlciBpcyBzcGVjaWZpZWQpLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBlbGVtZW50IGFuZCBzZXQgdGhlIHN0YXR1cyB0byBFbmFibGVkIHRvIHJlcGxpY2F0ZSBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLlxuICAgKiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgRmlsdGVyIGVsZW1lbnQsIEFtYXpvbiBTMyBhc3N1bWVzIHRoYXQgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGVhcmxpZXIgdmVyc2lvbiwgVjEuIEluIHRoZSBlYXJsaWVyIHZlcnNpb24sIHRoaXMgZWxlbWVudCBpcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhI3JlcGxpY2FNb2RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhTW9kaWZpY2F0aW9ucz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFSZXBsaWNhTW9kaWZpY2F0aW9ucztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGZpbHRlciBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBvZiBTMyBvYmplY3RzIGVuY3J5cHRlZCB3aXRoIEFtYXpvbiBXZWIgU2VydmljZXMgS01TLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEjc3NlS01TRW5jcnlwdGVkT2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgc3NlS21zRW5jcnlwdGVkT2JqZWN0cz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFTc2VLbXNFbmNyeXB0ZWRPYmplY3RzO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVwbGljYU1vZGlmaWNhdGlvbnMnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVJlcGxpY2FNb2RpZmljYXRpb25zKG9iai5yZXBsaWNhTW9kaWZpY2F0aW9ucyksXG4gICAgJ3NzZUtNU0VuY3J5cHRlZE9iamVjdHMnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMob2JqLnNzZUttc0VuY3J5cHRlZE9iamVjdHMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBkZXNjcmliaW5nIGEgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoZSBzcGVjaWZpZWQgcmVkaXJlY3QgdG8gYXBwbHkuIEZvciBleGFtcGxlLCAxLiBJZiByZXF1ZXN0IGlzIGZvciBwYWdlcyBpbiB0aGUgL2RvY3MgZm9sZGVyLCByZWRpcmVjdCB0byB0aGUgL2RvY3VtZW50cyBmb2xkZXIuIDIuIElmIHJlcXVlc3QgcmVzdWx0cyBpbiBIVFRQIGVycm9yIDR4eCwgcmVkaXJlY3QgcmVxdWVzdCB0byBhbm90aGVyIGhvc3Qgd2hlcmUgeW91IG1pZ2h0IHByb2Nlc3MgdGhlIGVycm9yLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNDb25kaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uI2h0dHBFcnJvckNvZGVSZXR1cm5lZEVxdWFsc1xuICAgKi9cbiAgcmVhZG9ubHkgaHR0cEVycm9yQ29kZVJldHVybmVkRXF1YWxzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uI2tleVByZWZpeEVxdWFsc1xuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4RXF1YWxzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbihvYmo6IEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaHR0cEVycm9yQ29kZVJldHVybmVkRXF1YWxzJzogb2JqLmh0dHBFcnJvckNvZGVSZXR1cm5lZEVxdWFscyxcbiAgICAna2V5UHJlZml4RXF1YWxzJzogb2JqLmtleVByZWZpeEVxdWFscyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IHJlcXVlc3RzIGFyZSByZWRpcmVjdGVkLiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IsIHlvdSBjYW4gc3BlY2lmeSBhIGRpZmZlcmVudCBlcnJvciBjb2RlIHRvIHJldHVybi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc1JlZGlyZWN0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdCNob3N0TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdCNodHRwUmVkaXJlY3RDb2RlXG4gICAqL1xuICByZWFkb25seSBodHRwUmVkaXJlY3RDb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcmVwbGFjZUtleVByZWZpeFdpdGhcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VLZXlQcmVmaXhXaXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcmVwbGFjZUtleVdpdGhcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VLZXlXaXRoPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3Qob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc1JlZGlyZWN0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaG9zdE5hbWUnOiBvYmouaG9zdE5hbWUsXG4gICAgJ2h0dHBSZWRpcmVjdENvZGUnOiBvYmouaHR0cFJlZGlyZWN0Q29kZSxcbiAgICAncHJvdG9jb2wnOiBvYmoucHJvdG9jb2wsXG4gICAgJ3JlcGxhY2VLZXlQcmVmaXhXaXRoJzogb2JqLnJlcGxhY2VLZXlQcmVmaXhXaXRoLFxuICAgICdyZXBsYWNlS2V5V2l0aCc6IG9iai5yZXBsYWNlS2V5V2l0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogV2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uI3MzQnVja2V0RGVzdGluYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzQnVja2V0RGVzdGluYXRpb24/OiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnczNCdWNrZXREZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uKG9iai5zM0J1Y2tldERlc3RpbmF0aW9uKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbnMgdGhlIHR5cGUgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB1c2VkIHRvIGVuY3J5cHQgdGhlIGludmVudG9yeSByZXN1bHRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHVzZSBvZiBTU0UtS01TIHRvIGVuY3J5cHQgZGVsaXZlcmVkIGludmVudG9yeSByZXBvcnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uI3NzZUtNU1xuICAgKi9cbiAgcmVhZG9ubHkgc3NlS21zPzogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uKG9iajogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzc2VLTVMnOiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXMob2JqLnNzZUttcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIGluIGEgTGlmZWN5Y2xlIFJ1bGUgRmlsdGVyIHRvIGFwcGx5IGEgbG9naWNhbCBBTkQgdG8gdHdvIG9yIG1vcmUgcHJlZGljYXRlcy4gVGhlIExpZmVjeWNsZSBSdWxlIHdpbGwgYXBwbHkgdG8gYW55IG9iamVjdCBtYXRjaGluZyBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgY29uZmlndXJlZCBpbnNpZGUgdGhlIEFuZCBvcGVyYXRvci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQjdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZChvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZ3MnOiBvYmoudGFncz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJUYWcjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyVGFnIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgcGVyc29uIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbnMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWUjZGlzcGxheU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlI2VtYWlsQWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxBZGRyZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSN0eXBlX1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSN1UklcbiAgICovXG4gIHJlYWRvbmx5IHVSaT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWUob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Rpc3BsYXlOYW1lJzogb2JqLmRpc3BsYXlOYW1lLFxuICAgICdlbWFpbEFkZHJlc3MnOiBvYmouZW1haWxBZGRyZXNzLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAndHlwZV8nOiBvYmoudHlwZSxcbiAgICAndVJJJzogb2JqLnVSaSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3Mge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmRUYWdzI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3MnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kVGFncyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBpbmZvcm1hdGlvbiBhYm91dCBhY2Nlc3MgY29udHJvbCBmb3IgcmVwbGljYXMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbkFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24jb3duZXJcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24ob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnb3duZXInOiBvYmoub3duZXIsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGEgZGVzdGluYXRpb24gZm9yIHJlcGxpY2F0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiNyZXBsaWNhS01TS2V5SURcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2FLbXNLZXlJZD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbihvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlcGxpY2FLTVNLZXlJRCc6IG9iai5yZXBsaWNhS21zS2V5SWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyByZXBsaWNhdGlvbiBtZXRyaWNzLXJlbGF0ZWQgc2V0dGluZ3MgZW5hYmxpbmcgcmVwbGljYXRpb24gbWV0cmljcyBhbmQgZXZlbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyB7XG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIHRoZSB0aW1lIHZhbHVlIGZvciBTMyBSZXBsaWNhdGlvbiBUaW1lIENvbnRyb2wgKFMzIFJUQykgYW5kIHJlcGxpY2F0aW9uIG1ldHJpY3MgRXZlbnRUaHJlc2hvbGQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3MjZXZlbnRUaHJlc2hvbGRcbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50VGhyZXNob2xkPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3Mob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V2ZW50VGhyZXNob2xkJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQob2JqLmV2ZW50VGhyZXNob2xkKSxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSByZWxhdGVkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgd2hldGhlciBTMyBSVEMgaXMgZW5hYmxlZCBhbmQgdGhlIHRpbWUgd2hlbiBhbGwgb2JqZWN0cyBhbmQgb3BlcmF0aW9ucyBvbiBvYmplY3RzIG11c3QgYmUgcmVwbGljYXRlZC4gTXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBhIE1ldHJpY3MgYmxvY2suXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWUjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIHNwZWNpZnlpbmcgdGhlIHRpbWUgdmFsdWUgZm9yIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSBhbmQgcmVwbGljYXRpb24gbWV0cmljcyBFdmVudFRocmVzaG9sZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lI3RpbWVcbiAgICovXG4gIHJlYWRvbmx5IHRpbWU/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lVGltZTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gICAgJ3RpbWUnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUob2JqLnRpbWUpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHJ1bGUgZmlsdGVycy4gVGhlIGZpbHRlcnMgZGV0ZXJtaW5lIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiBUaGlzIGVsZW1lbnQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbHRlci5cbiAqIEZvciBleGFtcGxlOlxuICogKiBJZiB5b3Ugc3BlY2lmeSBib3RoIGEgUHJlZml4IGFuZCBhIFRhZyBmaWx0ZXIsIHdyYXAgdGhlc2UgZmlsdGVycyBpbiAgICBhbiBBbmQgdGFnLlxuICogKiBJZiB5b3Ugc3BlY2lmeSBhIGZpbHRlciBiYXNlZCBvbiBtdWx0aXBsZSB0YWdzLCB3cmFwIHRoZSBUYWcgZWxlbWVudHMgICAgaW4gYW4gQW5kIHRhZy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZCN0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICd0YWdzJzogb2JqLnRhZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IHlvdSBjYW4gc3BlY2lmeSBmb3Igc2VsZWN0aW9uIGZvciBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLiBBbWF6b24gUzMgZG9lc24ndCByZXBsaWNhdGUgcmVwbGljYSBtb2RpZmljYXRpb25zIGJ5IGRlZmF1bHQuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uICh3aGVuIEZpbHRlciBpcyBzcGVjaWZpZWQpLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBlbGVtZW50IGFuZCBzZXQgdGhlIHN0YXR1cyB0byBFbmFibGVkIHRvIHJlcGxpY2F0ZSBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLlxuICogSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIEZpbHRlciBlbGVtZW50LCBBbWF6b24gUzMgYXNzdW1lcyB0aGF0IHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGlzIHRoZSBlYXJsaWVyIHZlcnNpb24sIFYxLiBJbiB0aGUgZWFybGllciB2ZXJzaW9uLCB0aGlzIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVJlcGxpY2FNb2RpZmljYXRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBmaWx0ZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gb2YgUzMgb2JqZWN0cyBlbmNyeXB0ZWQgd2l0aCBBbWF6b24gV2ViIFNlcnZpY2VzIEtNUy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFTc2VLbXNFbmNyeXB0ZWRPYmplY3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cyNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24jYnVja2V0XG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNidWNrZXRBY2NvdW50SURcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI2Zvcm1hdFxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24jcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbihvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdidWNrZXQnOiBvYmouYnVja2V0LFxuICAgICdidWNrZXRBY2NvdW50SUQnOiBvYmouYnVja2V0QWNjb3VudElkLFxuICAgICdmb3JtYXQnOiBvYmouZm9ybWF0LFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgdXNlIG9mIFNTRS1LTVMgdG8gZW5jcnlwdCBkZWxpdmVyZWQgaW52ZW50b3J5IHJlcG9ydHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvblNzZUttc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXMja2V5SURcbiAgICovXG4gIHJlYWRvbmx5IGtleUlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvblNzZUttcyhvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5SUQnOiBvYmoua2V5SWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3Mge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmRUYWdzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3Mob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBBbWF6b24gUzMgb2JqZWN0IGtleSBuYW1lIHRvIGZpbHRlciBvbiBhbmQgd2hldGhlciB0byBmaWx0ZXIgb24gdGhlIHN1ZmZpeCBvciBwcmVmaXggb2YgdGhlIGtleSBuYW1lLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyhvYmo6IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgQW1hem9uIFMzIG9iamVjdCBrZXkgbmFtZSB0byBmaWx0ZXIgb24gYW5kIHdoZXRoZXIgdG8gZmlsdGVyIG9uIHRoZSBzdWZmaXggb3IgcHJlZml4IG9mIHRoZSBrZXkgbmFtZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIEFtYXpvbiBTMyBvYmplY3Qga2V5IG5hbWUgdG8gZmlsdGVyIG9uIGFuZCB3aGV0aGVyIHRvIGZpbHRlciBvbiB0aGUgc3VmZml4IG9yIHByZWZpeCBvZiB0aGUga2V5IG5hbWUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB2YWx1ZSBmb3IgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpIGFuZCByZXBsaWNhdGlvbiBtZXRyaWNzIEV2ZW50VGhyZXNob2xkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljc0V2ZW50VGhyZXNob2xkI21pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbnV0ZXM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZChvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtaW51dGVzJzogb2JqLm1pbnV0ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB2YWx1ZSBmb3IgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpIGFuZCByZXBsaWNhdGlvbiBtZXRyaWNzIEV2ZW50VGhyZXNob2xkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lVGltZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWVUaW1lI21pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbnV0ZXM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWVUaW1lKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtaW51dGVzJzogb2JqLm1pbnV0ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kVGFncyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3Mob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuIl19
|
|
1645
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczNidWNrZXRzLXMzLnNlcnZpY2VzLms4cy5hd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW1wb3J0cy9zM2J1Y2tldHMtczMuc2VydmljZXMuazhzLmF3cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQkFBcUI7QUFDckIsaUNBQXVFO0FBSXZFOzs7O0dBSUc7QUFDSCxNQUFhLE1BQU8sU0FBUSxpQkFBUztJQXVCbkM7Ozs7O09BS0c7SUFDSCxZQUFtQixLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUFxQixFQUFFO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxNQUFNLENBQUMsR0FBRztZQUNiLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUF6QkQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFxQixFQUFFO1FBQzVDLE9BQU87WUFDTCxHQUFHLE1BQU0sQ0FBQyxHQUFHO1lBQ2IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFlRDs7T0FFRztJQUNJLE1BQU07UUFDWCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEMsT0FBTztZQUNMLEdBQUcsTUFBTSxDQUFDLEdBQUc7WUFDYixHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztTQUNoQyxDQUFDO0lBQ0osQ0FBQzs7QUE5Q0gsd0JBK0NDO0FBOUNDOztHQUVHO0FBQ29CLFVBQUcsR0FBcUI7SUFDN0MsVUFBVSxFQUFFLDhCQUE4QjtJQUMxQyxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7QUErREo7O0dBRUc7QUFDSCx5Q0FBeUM7QUFDekMsU0FBZ0Isa0JBQWtCLENBQUMsR0FBNEI7SUFDN0QsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQUUsT0FBTyxTQUFTLENBQUM7S0FBRTtJQUM1QyxNQUFN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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBUkQsd0dBUUM7QUFDRCx3Q0FBd0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZW5lcmF0ZWQgYnkgY2RrOHNcbmltcG9ydCB7IEFwaU9iamVjdCwgQXBpT2JqZWN0TWV0YWRhdGEsIEdyb3VwVmVyc2lvbktpbmQgfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuXG4vKipcbiAqIEJ1Y2tldCBpcyB0aGUgU2NoZW1hIGZvciB0aGUgQnVja2V0cyBBUElcbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFxuICovXG5leHBvcnQgY2xhc3MgQnVja2V0IGV4dGVuZHMgQXBpT2JqZWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFwaVZlcnNpb24gYW5kIGtpbmQgZm9yIFwiQnVja2V0XCJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR1ZLOiBHcm91cFZlcnNpb25LaW5kID0ge1xuICAgIGFwaVZlcnNpb246ICdzMy5zZXJ2aWNlcy5rOHMuYXdzL3YxYWxwaGExJyxcbiAgICBraW5kOiAnQnVja2V0JyxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVycyBhIEt1YmVybmV0ZXMgbWFuaWZlc3QgZm9yIFwiQnVja2V0XCIuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gaW5saW5lIHJlc291cmNlIG1hbmlmZXN0cyBpbnNpZGUgb3RoZXIgb2JqZWN0cyAoZS5nLiBhcyB0ZW1wbGF0ZXMpLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFuaWZlc3QocHJvcHM6IEJ1Y2tldFByb3BzID0ge30pOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5CdWNrZXQuR1ZLLFxuICAgICAgLi4udG9Kc29uX0J1Y2tldFByb3BzKHByb3BzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBcIkJ1Y2tldFwiIEFQSSBvYmplY3RcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBvYmplY3RcbiAgICogQHBhcmFtIGlkIGEgc2NvcGUtbG9jYWwgbmFtZSBmb3IgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgaW5pdGlhbGl6YXRpb24gcHJvcHNcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVja2V0UHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4uQnVja2V0LkdWSyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIG9iamVjdCB0byBLdWJlcm5ldGVzIEpTT04uXG4gICAqL1xuICBwdWJsaWMgdG9Kc29uKCk6IGFueSB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzdXBlci50b0pzb24oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5CdWNrZXQuR1ZLLFxuICAgICAgLi4udG9Kc29uX0J1Y2tldFByb3BzKHJlc29sdmVkKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQnVja2V0IGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBCdWNrZXRzIEFQSVxuICpcbiAqIEBzY2hlbWEgQnVja2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0UHJvcHMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXQjbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogQXBpT2JqZWN0TWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIEJ1Y2tldFNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBCdWNrZXQuXG4gICAqIEluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uLCBhIEJ1Y2tldCBpcyBhIHJlc291cmNlLiBBbiBBbWF6b24gUzMgYnVja2V0IG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLCBhbmQgdGhlIG5hbWVzcGFjZSBpcyBzaGFyZWQgYnkgYWxsIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0I3NwZWNcbiAgICovXG4gIHJlYWRvbmx5IHNwZWM/OiBCdWNrZXRTcGVjO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFByb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRQcm9wcyhvYmo6IEJ1Y2tldFByb3BzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWV0YWRhdGEnOiBvYmoubWV0YWRhdGEsXG4gICAgJ3NwZWMnOiB0b0pzb25fQnVja2V0U3BlYyhvYmouc3BlYyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQnVja2V0U3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIHN0YXRlIG9mIEJ1Y2tldC5cbiAqIEluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uLCBhIEJ1Y2tldCBpcyBhIHJlc291cmNlLiBBbiBBbWF6b24gUzMgYnVja2V0IG5hbWUgaXMgZ2xvYmFsbHkgdW5pcXVlLCBhbmQgdGhlIG5hbWVzcGFjZSBpcyBzaGFyZWQgYnkgYWxsIEFtYXpvbiBXZWIgU2VydmljZXMgYWNjb3VudHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlYyB7XG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHRyYW5zZmVyIGFjY2VsZXJhdGlvbiBzdGF0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2FjY2VsZXJhdGVcbiAgICovXG4gIHJlYWRvbmx5IGFjY2VsZXJhdGU/OiBCdWNrZXRTcGVjQWNjZWxlcmF0ZTtcblxuICAvKipcbiAgICogVGhlIGNhbm5lZCBBQ0wgdG8gYXBwbHkgdG8gdGhlIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2FjbFxuICAgKi9cbiAgcmVhZG9ubHkgYWNsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjYW5hbHl0aWNzXG4gICAqL1xuICByZWFkb25seSBhbmFseXRpY3M/OiBCdWNrZXRTcGVjQW5hbHl0aWNzW107XG5cbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRW5hYmxpbmcgQ3Jvc3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2NvcnMuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjY29yc1xuICAgKi9cbiAgcmVhZG9ubHkgY29ycz86IEJ1Y2tldFNwZWNDb3JzO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24/OiBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2VuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBCdWNrZXRTcGVjRW5jcnlwdGlvbjtcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdGhlIHJlYWQsIHdyaXRlLCByZWFkIEFDUCwgYW5kIHdyaXRlIEFDUCBwZXJtaXNzaW9ucyBvbiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRGdWxsQ29udHJvbFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRGdWxsQ29udHJvbD86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gbGlzdCB0aGUgb2JqZWN0cyBpbiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRSZWFkXG4gICAqL1xuICByZWFkb25seSBncmFudFJlYWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBncmFudGVlIHRvIHJlYWQgdGhlIGJ1Y2tldCBBQ0wuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNncmFudFJlYWRBQ1BcbiAgICovXG4gIHJlYWRvbmx5IGdyYW50UmVhZEFjcD86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gY3JlYXRlIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuXG4gICAqIEZvciB0aGUgYnVja2V0IGFuZCBvYmplY3Qgb3duZXJzIG9mIGV4aXN0aW5nIG9iamVjdHMsIGFsc28gYWxsb3dzIGRlbGV0aW9ucyBhbmQgb3ZlcndyaXRlcyBvZiB0aG9zZSBvYmplY3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRXcml0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRXcml0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGdyYW50ZWUgdG8gd3JpdGUgdGhlIEFDTCBmb3IgdGhlIGFwcGxpY2FibGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjZ3JhbnRXcml0ZUFDUFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JhbnRXcml0ZUFjcD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI2ludGVsbGlnZW50VGllcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgaW50ZWxsaWdlbnRUaWVyaW5nPzogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjaW52ZW50b3J5XG4gICAqL1xuICByZWFkb25seSBpbnZlbnRvcnk/OiBCdWNrZXRTcGVjSW52ZW50b3J5W107XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgbGlmZWN5Y2xlIHJ1bGVzLiBZb3UgY2FuIGFkZCBhcyBtYW55IGFzIDEsMDAwIHJ1bGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbGlmZWN5Y2xlXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIGxvZ2dpbmcgc3RhdHVzIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbG9nZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZz86IEJ1Y2tldFNwZWNMb2dnaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljcz86IEJ1Y2tldFNwZWNNZXRyaWNzW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBidWNrZXQgdG8gY3JlYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1Y2tldC4gSWYgdGhpcyBlbGVtZW50IGlzIGVtcHR5LCBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjbm90aWZpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb24/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCBTMyBPYmplY3QgTG9jayB0byBiZSBlbmFibGVkIGZvciB0aGUgbmV3IGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI29iamVjdExvY2tFbmFibGVkRm9yQnVja2V0XG4gICAqL1xuICByZWFkb25seSBvYmplY3RMb2NrRW5hYmxlZEZvckJ1Y2tldD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBPd25lcnNoaXBDb250cm9scyAoQnVja2V0T3duZXJQcmVmZXJyZWQgb3IgT2JqZWN0V3JpdGVyKSB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoaXMgQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjI293bmVyc2hpcENvbnRyb2xzXG4gICAqL1xuICByZWFkb25seSBvd25lcnNoaXBDb250cm9scz86IEJ1Y2tldFNwZWNPd25lcnNoaXBDb250cm9scztcblxuICAvKipcbiAgICogVGhlIGJ1Y2tldCBwb2xpY3kgYXMgYSBKU09OIGRvY3VtZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjcG9saWN5XG4gICAqL1xuICByZWFkb25seSBwb2xpY3k/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBQdWJsaWNBY2Nlc3NCbG9jayBjb25maWd1cmF0aW9uIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhpcyBBbWF6b24gUzMgYnVja2V0LiBZb3UgY2FuIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIGFueSBjb21iaW5hdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hlbiBBbWF6b24gUzMgY29uc2lkZXJzIGEgYnVja2V0IG9yIG9iamVjdCBwdWJsaWMsIHNlZSBUaGUgTWVhbmluZyBvZiBcIlB1YmxpY1wiIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9hY2Nlc3MtY29udHJvbC1ibG9jay1wdWJsaWMtYWNjZXNzLmh0bWwjYWNjZXNzLWNvbnRyb2wtYmxvY2stcHVibGljLWFjY2Vzcy1wb2xpY3ktc3RhdHVzKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNwdWJsaWNBY2Nlc3NCbG9ja1xuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWNjZXNzQmxvY2s/OiBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2s7XG5cbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIGZvciByZXBsaWNhdGlvbiBydWxlcy4gWW91IGNhbiBhZGQgdXAgdG8gMSwwMDAgcnVsZXMuIFRoZSBtYXhpbXVtIHNpemUgb2YgYSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGlzIDIgTUIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNyZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb247XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgUGF5ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyNyZXF1ZXN0UGF5bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFBheW1lbnQ/OiBCdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQ7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgdGhlIFRhZ1NldCBhbmQgVGFnIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWMjdGFnZ2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgdGFnZ2luZz86IEJ1Y2tldFNwZWNUYWdnaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHZlcnNpb25pbmcgc3RhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyN2ZXJzaW9uaW5nXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uaW5nPzogQnVja2V0U3BlY1ZlcnNpb25pbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBmb3IgdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlYyN3ZWJzaXRlXG4gICAqL1xuICByZWFkb25seSB3ZWJzaXRlPzogQnVja2V0U3BlY1dlYnNpdGU7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlYycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlYyhvYmo6IEJ1Y2tldFNwZWMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY2NlbGVyYXRlJzogdG9Kc29uX0J1Y2tldFNwZWNBY2NlbGVyYXRlKG9iai5hY2NlbGVyYXRlKSxcbiAgICAnYWNsJzogb2JqLmFjbCxcbiAgICAnYW5hbHl0aWNzJzogb2JqLmFuYWx5dGljcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3MoeSkpLFxuICAgICdjb3JzJzogdG9Kc29uX0J1Y2tldFNwZWNDb3JzKG9iai5jb3JzKSxcbiAgICAnY3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbihvYmouY3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiksXG4gICAgJ2VuY3J5cHRpb24nOiB0b0pzb25fQnVja2V0U3BlY0VuY3J5cHRpb24ob2JqLmVuY3J5cHRpb24pLFxuICAgICdncmFudEZ1bGxDb250cm9sJzogb2JqLmdyYW50RnVsbENvbnRyb2wsXG4gICAgJ2dyYW50UmVhZCc6IG9iai5ncmFudFJlYWQsXG4gICAgJ2dyYW50UmVhZEFDUCc6IG9iai5ncmFudFJlYWRBY3AsXG4gICAgJ2dyYW50V3JpdGUnOiBvYmouZ3JhbnRXcml0ZSxcbiAgICAnZ3JhbnRXcml0ZUFDUCc6IG9iai5ncmFudFdyaXRlQWNwLFxuICAgICdpbnRlbGxpZ2VudFRpZXJpbmcnOiBvYmouaW50ZWxsaWdlbnRUaWVyaW5nPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyh5KSksXG4gICAgJ2ludmVudG9yeSc6IG9iai5pbnZlbnRvcnk/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5KHkpKSxcbiAgICAnbGlmZWN5Y2xlJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGUob2JqLmxpZmVjeWNsZSksXG4gICAgJ2xvZ2dpbmcnOiB0b0pzb25fQnVja2V0U3BlY0xvZ2dpbmcob2JqLmxvZ2dpbmcpLFxuICAgICdtZXRyaWNzJzogb2JqLm1ldHJpY3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljcyh5KSksXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAnbm90aWZpY2F0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb24ob2JqLm5vdGlmaWNhdGlvbiksXG4gICAgJ29iamVjdExvY2tFbmFibGVkRm9yQnVja2V0Jzogb2JqLm9iamVjdExvY2tFbmFibGVkRm9yQnVja2V0LFxuICAgICdvd25lcnNoaXBDb250cm9scyc6IHRvSnNvbl9CdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMob2JqLm93bmVyc2hpcENvbnRyb2xzKSxcbiAgICAncG9saWN5Jzogb2JqLnBvbGljeSxcbiAgICAncHVibGljQWNjZXNzQmxvY2snOiB0b0pzb25fQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrKG9iai5wdWJsaWNBY2Nlc3NCbG9jayksXG4gICAgJ3JlcGxpY2F0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvbihvYmoucmVwbGljYXRpb24pLFxuICAgICdyZXF1ZXN0UGF5bWVudCc6IHRvSnNvbl9CdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQob2JqLnJlcXVlc3RQYXltZW50KSxcbiAgICAndGFnZ2luZyc6IHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZyhvYmoudGFnZ2luZyksXG4gICAgJ3ZlcnNpb25pbmcnOiB0b0pzb25fQnVja2V0U3BlY1ZlcnNpb25pbmcob2JqLnZlcnNpb25pbmcpLFxuICAgICd3ZWJzaXRlJzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlKG9iai53ZWJzaXRlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHNldHRpbmcgdGhlIHRyYW5zZmVyIGFjY2VsZXJhdGlvbiBzdGF0ZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBY2NlbGVyYXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FjY2VsZXJhdGUge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQWNjZWxlcmF0ZSNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQWNjZWxlcmF0ZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FjY2VsZXJhdGUob2JqOiBCdWNrZXRTcGVjQWNjZWxlcmF0ZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBhbnkgYW5hbHlzZXMgZm9yIHRoZSBhbmFseXRpY3MgZmlsdGVyIG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlsdGVyIHVzZWQgdG8gZGVzY3JpYmUgYSBzZXQgb2Ygb2JqZWN0cyBmb3IgYW5hbHlzZXMuIEEgZmlsdGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBwcmVmaXgsIG9uZSB0YWcsIG9yIG9uZSBjb25qdW5jdGlvbiAoQW5hbHl0aWNzQW5kT3BlcmF0b3IpLiBJZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQsIGFsbCBvYmplY3RzIHdpbGwgYmUgY29uc2lkZXJlZCBpbiBhbnkgYW5hbHlzaXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljcyNmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljcyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBkYXRhIHJlbGF0ZWQgdG8gYWNjZXNzIHBhdHRlcm5zIHRvIGJlIGNvbGxlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYW5hbHl6ZSB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3NlcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzI3N0b3JhZ2VDbGFzc0FuYWx5c2lzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3NBbmFseXNpcz86IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzKG9iajogQnVja2V0U3BlY0FuYWx5dGljcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnc3RvcmFnZUNsYXNzQW5hbHlzaXMnOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzKG9iai5zdG9yYWdlQ2xhc3NBbmFseXNpcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBjcm9zcy1vcmlnaW4gYWNjZXNzIGNvbmZpZ3VyYXRpb24gZm9yIG9iamVjdHMgaW4gYW4gQW1hem9uIFMzIGJ1Y2tldC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBFbmFibGluZyBDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvY29ycy5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQ29yc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNDb3JzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnMjY29yc1J1bGVzXG4gICAqL1xuICByZWFkb25seSBjb3JzUnVsZXM/OiBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNDb3JzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQ29ycyhvYmo6IEJ1Y2tldFNwZWNDb3JzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY29yc1J1bGVzJzogb2JqLmNvcnNSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNDb3JzQ29yc1J1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNDcmVhdGVCdWNrZXRDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiNsb2NhdGlvbkNvbnN0cmFpbnRcbiAgICovXG4gIHJlYWRvbmx5IGxvY2F0aW9uQ29uc3RyYWludD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0NyZWF0ZUJ1Y2tldENvbmZpZ3VyYXRpb24ob2JqOiBCdWNrZXRTcGVjQ3JlYXRlQnVja2V0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2xvY2F0aW9uQ29uc3RyYWludCc6IG9iai5sb2NhdGlvbkNvbnN0cmFpbnQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlLWVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0VuY3J5cHRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjRW5jcnlwdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uKG9iajogQnVja2V0U3BlY0VuY3J5cHRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBjb25maWd1cmF0aW9uIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICogRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MsIHNlZSBTdG9yYWdlIGNsYXNzIGZvciBhdXRvbWF0aWNhbGx5IG9wdGltaXppbmcgZnJlcXVlbnRseSBhbmQgaW5mcmVxdWVudGx5IGFjY2Vzc2VkIG9iamVjdHMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3N0b3JhZ2UtY2xhc3MtaW50cm8uaHRtbCNzYy1keW5hbWljLWRhdGEtYWNjZXNzKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBGaWx0ZXIgaXMgdXNlZCB0byBpZGVudGlmeSBvYmplY3RzIHRoYXQgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgY29uZmlndXJhdGlvbiBhcHBsaWVzIHRvLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmcjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyN0aWVyaW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgdGllcmluZ3M/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nVGllcmluZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgICAndGllcmluZ3MnOiBvYmoudGllcmluZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nVGllcmluZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW52ZW50b3J5IGNvbmZpZ3VyYXRpb24gZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgR0VUIEJ1Y2tldCBpbnZlbnRvcnkgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRHRVRJbnZlbnRvcnlDb25maWcuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnkge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5I2Rlc3RpbmF0aW9uXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbj86IEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIGludmVudG9yeSBmaWx0ZXIuIFRoZSBpbnZlbnRvcnkgb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlcj86IEJ1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNpbmNsdWRlZE9iamVjdFZlcnNpb25zXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlZE9iamVjdFZlcnNpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnkjaXNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnkjb3B0aW9uYWxGaWVsZHNcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRmllbGRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgc2NoZWR1bGUgZm9yIGdlbmVyYXRpbmcgaW52ZW50b3J5IHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeSNzY2hlZHVsZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiBCdWNrZXRTcGVjSW52ZW50b3J5U2NoZWR1bGU7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0ludmVudG9yeScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeShvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb24ob2JqLmRlc3RpbmF0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXIob2JqLmZpbHRlciksXG4gICAgJ2lkJzogb2JqLmlkLFxuICAgICdpbmNsdWRlZE9iamVjdFZlcnNpb25zJzogb2JqLmluY2x1ZGVkT2JqZWN0VmVyc2lvbnMsXG4gICAgJ2lzRW5hYmxlZCc6IG9iai5pc0VuYWJsZWQsXG4gICAgJ29wdGlvbmFsRmllbGRzJzogb2JqLm9wdGlvbmFsRmllbGRzPy5tYXAoeSA9PiB5KSxcbiAgICAnc2NoZWR1bGUnOiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeVNjaGVkdWxlKG9iai5zY2hlZHVsZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBsaWZlY3ljbGUgcnVsZXMuIFlvdSBjYW4gYWRkIGFzIG1hbnkgYXMgMSwwMDAgcnVsZXMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGUjcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZShvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBsb2dnaW5nIHN0YXR1cyBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xvZ2dpbmcge1xuICAvKipcbiAgICogRGVzY3JpYmVzIHdoZXJlIGxvZ3MgYXJlIHN0b3JlZCBhbmQgdGhlIHByZWZpeCB0aGF0IEFtYXpvbiBTMyBhc3NpZ25zIHRvIGFsbCBsb2cgb2JqZWN0IGtleXMgZm9yIGEgYnVja2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBVVCBCdWNrZXQgbG9nZ2luZyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVGxvZ2dpbmcuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nI2xvZ2dpbmdFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nRW5hYmxlZD86IEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQ7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xvZ2dpbmcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nKG9iajogQnVja2V0U3BlY0xvZ2dpbmcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdsb2dnaW5nRW5hYmxlZCc6IHRvSnNvbl9CdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkKG9iai5sb2dnaW5nRW5hYmxlZCksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ2xvdWRXYXRjaCByZXF1ZXN0IG1ldHJpY3MgKHNwZWNpZmllZCBieSB0aGUgbWV0cmljcyBjb25maWd1cmF0aW9uIElEKSBmcm9tIGFuIEFtYXpvbiBTMyBidWNrZXQuIElmIHlvdSdyZSB1cGRhdGluZyBhbiBleGlzdGluZyBtZXRyaWNzIGNvbmZpZ3VyYXRpb24sIG5vdGUgdGhhdCB0aGlzIGlzIGEgZnVsbCByZXBsYWNlbWVudCBvZiB0aGUgZXhpc3RpbmcgbWV0cmljcyBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8ga2VlcCwgdGhleSBhcmUgZXJhc2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFB1dEJ1Y2tldE1ldHJpY3NDb25maWd1cmF0aW9uIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUTWV0cmljQ29uZmlndXJhdGlvbi5odG1sKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3Mge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbWV0cmljcyBjb25maWd1cmF0aW9uIGZpbHRlci4gVGhlIG1ldHJpY3MgY29uZmlndXJhdGlvbiBvbmx5IGluY2x1ZGVzIG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS4gQSBmaWx0ZXIgbXVzdCBiZSBhIHByZWZpeCwgYW4gb2JqZWN0IHRhZywgYW4gYWNjZXNzIHBvaW50IEFSTiwgb3IgYSBjb25qdW5jdGlvbiAoTWV0cmljc0FuZE9wZXJhdG9yKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQdXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvbiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvQVBJX1B1dEJ1Y2tldE1ldHJpY3NDb25maWd1cmF0aW9uLmh0bWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY01ldHJpY3NGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3MjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNNZXRyaWNzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljcyhvYmo6IEJ1Y2tldFNwZWNNZXRyaWNzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGJ1Y2tldC4gSWYgdGhpcyBlbGVtZW50IGlzIGVtcHR5LCBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb2ZmIGZvciB0aGUgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uI2xhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb24jcXVldWVDb25maWd1cmF0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcXVldWVDb25maWd1cmF0aW9ucz86IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zW107XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbiN0b3BpY0NvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSB0b3BpY0NvbmZpZ3VyYXRpb25zPzogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2xhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMnOiBvYmoubGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zKHkpKSxcbiAgICAncXVldWVDb25maWd1cmF0aW9ucyc6IG9iai5xdWV1ZUNvbmZpZ3VyYXRpb25zPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnMoeSkpLFxuICAgICd0b3BpY0NvbmZpZ3VyYXRpb25zJzogb2JqLnRvcGljQ29uZmlndXJhdGlvbnM/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9ucyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIE93bmVyc2hpcENvbnRyb2xzIChCdWNrZXRPd25lclByZWZlcnJlZCBvciBPYmplY3RXcml0ZXIpIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhpcyBBbWF6b24gUzMgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IEJ1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMob2JqOiBCdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgUHVibGljQWNjZXNzQmxvY2sgY29uZmlndXJhdGlvbiB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoaXMgQW1hem9uIFMzIGJ1Y2tldC4gWW91IGNhbiBlbmFibGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBhbnkgY29tYmluYXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoZW4gQW1hem9uIFMzIGNvbnNpZGVycyBhIGJ1Y2tldCBvciBvYmplY3QgcHVibGljLCBzZWUgVGhlIE1lYW5pbmcgb2YgXCJQdWJsaWNcIiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvYWNjZXNzLWNvbnRyb2wtYmxvY2stcHVibGljLWFjY2Vzcy5odG1sI2FjY2Vzcy1jb250cm9sLWJsb2NrLXB1YmxpYy1hY2Nlc3MtcG9saWN5LXN0YXR1cykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrI2Jsb2NrUHVibGljQUNMc1xuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tQdWJsaWNBY0xzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2sjYmxvY2tQdWJsaWNQb2xpY3lcbiAgICovXG4gIHJlYWRvbmx5IGJsb2NrUHVibGljUG9saWN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2sjaWdub3JlUHVibGljQUNMc1xuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlUHVibGljQWNMcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1B1YmxpY0FjY2Vzc0Jsb2NrI3Jlc3RyaWN0UHVibGljQnVja2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzdHJpY3RQdWJsaWNCdWNrZXRzPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUHVibGljQWNjZXNzQmxvY2snIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNQdWJsaWNBY2Nlc3NCbG9jayhvYmo6IEJ1Y2tldFNwZWNQdWJsaWNBY2Nlc3NCbG9jayB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Jsb2NrUHVibGljQUNMcyc6IG9iai5ibG9ja1B1YmxpY0FjTHMsXG4gICAgJ2Jsb2NrUHVibGljUG9saWN5Jzogb2JqLmJsb2NrUHVibGljUG9saWN5LFxuICAgICdpZ25vcmVQdWJsaWNBQ0xzJzogb2JqLmlnbm9yZVB1YmxpY0FjTHMsXG4gICAgJ3Jlc3RyaWN0UHVibGljQnVja2V0cyc6IG9iai5yZXN0cmljdFB1YmxpY0J1Y2tldHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgZm9yIHJlcGxpY2F0aW9uIHJ1bGVzLiBZb3UgY2FuIGFkZCB1cCB0byAxLDAwMCBydWxlcy4gVGhlIG1heGltdW0gc2l6ZSBvZiBhIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gaXMgMiBNQi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiNyb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncm9sZSc6IG9iai5yb2xlLFxuICAgICdydWxlcyc6IG9iai5ydWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIFBheWVyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcXVlc3RQYXltZW50I3BheWVyXG4gICAqL1xuICByZWFkb25seSBwYXllcj86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVxdWVzdFBheW1lbnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXF1ZXN0UGF5bWVudChvYmo6IEJ1Y2tldFNwZWNSZXF1ZXN0UGF5bWVudCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3BheWVyJzogb2JqLnBheWVyLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIFRhZ1NldCBhbmQgVGFnIGVsZW1lbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjVGFnZ2luZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNUYWdnaW5nI3RhZ1NldFxuICAgKi9cbiAgcmVhZG9ubHkgdGFnU2V0PzogQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXRbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjVGFnZ2luZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1RhZ2dpbmcob2JqOiBCdWNrZXRTcGVjVGFnZ2luZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3RhZ1NldCc6IG9iai50YWdTZXQ/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldCh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciBzZXR0aW5nIHRoZSB2ZXJzaW9uaW5nIHN0YXRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1ZlcnNpb25pbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjVmVyc2lvbmluZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNWZXJzaW9uaW5nI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNWZXJzaW9uaW5nJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjVmVyc2lvbmluZyhvYmo6IEJ1Y2tldFNwZWNWZXJzaW9uaW5nIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSByZXF1ZXN0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZSB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjZXJyb3JEb2N1bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JEb2N1bWVudD86IEJ1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgU3VmZml4IGVsZW1lbnQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjaW5kZXhEb2N1bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhEb2N1bWVudD86IEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSByZWRpcmVjdCBiZWhhdmlvciBvZiBhbGwgcmVxdWVzdHMgdG8gYSB3ZWJzaXRlIGVuZHBvaW50IG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGUjcmVkaXJlY3RBbGxSZXF1ZXN0c1RvXG4gICAqL1xuICByZWFkb25seSByZWRpcmVjdEFsbFJlcXVlc3RzVG8/OiBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjV2Vic2l0ZSNyb3V0aW5nUnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRpbmdSdWxlcz86IEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1dlYnNpdGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlKG9iajogQnVja2V0U3BlY1dlYnNpdGUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlcnJvckRvY3VtZW50JzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudChvYmouZXJyb3JEb2N1bWVudCksXG4gICAgJ2luZGV4RG9jdW1lbnQnOiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVJbmRleERvY3VtZW50KG9iai5pbmRleERvY3VtZW50KSxcbiAgICAncmVkaXJlY3RBbGxSZXF1ZXN0c1RvJzogdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvKG9iai5yZWRpcmVjdEFsbFJlcXVlc3RzVG8pLFxuICAgICdyb3V0aW5nUnVsZXMnOiBvYmoucm91dGluZ1J1bGVzPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBmaWx0ZXIgdXNlZCB0byBkZXNjcmliZSBhIHNldCBvZiBvYmplY3RzIGZvciBhbmFseXNlcy4gQSBmaWx0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHByZWZpeCwgb25lIHRhZywgb3Igb25lIGNvbmp1bmN0aW9uIChBbmFseXRpY3NBbmRPcGVyYXRvcikuIElmIG5vIGZpbHRlciBpcyBwcm92aWRlZCwgYWxsIG9iamVjdHMgd2lsbCBiZSBjb25zaWRlcmVkIGluIGFueSBhbmFseXNpcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyIHtcbiAgLyoqXG4gICAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcyBpbiBhbnkgY29tYmluYXRpb24sIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXIob2JqOiBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYW5kJzogdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBkYXRhIHJlbGF0ZWQgdG8gYWNjZXNzIHBhdHRlcm5zIHRvIGJlIGNvbGxlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gYW5hbHl6ZSB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZGlmZmVyZW50IHN0b3JhZ2UgY2xhc3NlcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyB7XG4gIC8qKlxuICAgKiBDb250YWluZXIgZm9yIGRhdGEgcmVsYXRlZCB0byB0aGUgc3RvcmFnZSBjbGFzcyBhbmFseXNpcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBmb3IgZXhwb3J0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyNkYXRhRXhwb3J0XG4gICAqL1xuICByZWFkb25seSBkYXRhRXhwb3J0PzogQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydDtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2RhdGFFeHBvcnQnOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydChvYmouZGF0YUV4cG9ydCksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGEgY3Jvc3Mtb3JpZ2luIGFjY2VzcyBydWxlIGZvciBhbiBBbWF6b24gUzMgYnVja2V0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnNDb3JzUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRIZWFkZXJzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkSGVhZGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRNZXRob2RzXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2FsbG93ZWRPcmlnaW5zXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkT3JpZ2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNDb3JzQ29yc1J1bGVzI2V4cG9zZUhlYWRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGV4cG9zZUhlYWRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0NvcnNDb3JzUnVsZXMjbWF4QWdlU2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4QWdlU2Vjb25kcz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0NvcnNDb3JzUnVsZXMob2JqOiBCdWNrZXRTcGVjQ29yc0NvcnNSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FsbG93ZWRIZWFkZXJzJzogb2JqLmFsbG93ZWRIZWFkZXJzPy5tYXAoeSA9PiB5KSxcbiAgICAnYWxsb3dlZE1ldGhvZHMnOiBvYmouYWxsb3dlZE1ldGhvZHM/Lm1hcCh5ID0+IHkpLFxuICAgICdhbGxvd2VkT3JpZ2lucyc6IG9iai5hbGxvd2VkT3JpZ2lucz8ubWFwKHkgPT4geSksXG4gICAgJ2V4cG9zZUhlYWRlcnMnOiBvYmouZXhwb3NlSGVhZGVycz8ubWFwKHkgPT4geSksXG4gICAgJ2lkJzogb2JqLmlkLFxuICAgICdtYXhBZ2VTZWNvbmRzJzogb2JqLm1heEFnZVNlY29uZHMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzIHtcbiAgLyoqXG4gICAqIERlc2NyaWJlcyB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHRvIGFwcGx5IHRvIG5ldyBvYmplY3RzIGluIHRoZSBidWNrZXQuIElmIGEgUFVUIE9iamVjdCByZXF1ZXN0IGRvZXNuJ3Qgc3BlY2lmeSBhbnkgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgdGhpcyBkZWZhdWx0IGVuY3J5cHRpb24gd2lsbCBiZSBhcHBsaWVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFBVVCBCdWNrZXQgZW5jcnlwdGlvbiAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9BUEkvUkVTVEJ1Y2tldFBVVGVuY3J5cHRpb24uaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMjYXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgYXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdD86IEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMjYnVja2V0S2V5RW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0S2V5RW5hYmxlZD86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlcyhvYmo6IEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0JzogdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KG9iai5hcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KSxcbiAgICAnYnVja2V0S2V5RW5hYmxlZCc6IG9iai5idWNrZXRLZXlFbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBGaWx0ZXIgaXMgdXNlZCB0byBpZGVudGlmeSBvYmplY3RzIHRoYXQgdGhlIFMzIEludGVsbGlnZW50LVRpZXJpbmcgY29uZmlndXJhdGlvbiBhcHBsaWVzIHRvLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIHNwZWNpZnlpbmcgUzMgSW50ZWxsaWdlbnQtVGllcmluZyBmaWx0ZXJzLiBUaGUgZmlsdGVycyBkZXRlcm1pbmUgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSBydWxlIGFwcGxpZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQ7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXIob2JqOiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYW5kJzogdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIHN0b3JhZ2UgY2xhc3MgaXMgZGVzaWduZWQgdG8gb3B0aW1pemUgc3RvcmFnZSBjb3N0cyBieSBhdXRvbWF0aWNhbGx5IG1vdmluZyBkYXRhIHRvIHRoZSBtb3N0IGNvc3QtZWZmZWN0aXZlIHN0b3JhZ2UgYWNjZXNzIHRpZXIsIHdpdGhvdXQgYWRkaXRpb25hbCBvcGVyYXRpb25hbCBvdmVyaGVhZC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyNhY2Nlc3NUaWVyXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NUaWVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncyNkYXlzXG4gICAqL1xuICByZWFkb25seSBkYXlzPzogbnVtYmVyO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdUaWVyaW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1RpZXJpbmdzKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ1RpZXJpbmdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWNjZXNzVGllcic6IG9iai5hY2Nlc3NUaWVyLFxuICAgICdkYXlzJzogb2JqLmRheXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpbnZlbnRvcnkgY29uZmlndXJhdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBDb250YWlucyB0aGUgYnVja2V0IG5hbWUsIGZpbGUgZm9ybWF0LCBidWNrZXQgb3duZXIgKG9wdGlvbmFsKSwgYW5kIHByZWZpeCAob3B0aW9uYWwpIHdoZXJlIGludmVudG9yeSByZXN1bHRzIGFyZSBwdWJsaXNoZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uI3MzQnVja2V0RGVzdGluYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzQnVja2V0RGVzdGluYXRpb24/OiBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnczNCdWNrZXREZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uKG9iai5zM0J1Y2tldERlc3RpbmF0aW9uKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgYW4gaW52ZW50b3J5IGZpbHRlci4gVGhlIGludmVudG9yeSBvbmx5IGluY2x1ZGVzIG9iamVjdHMgdGhhdCBtZWV0IHRoZSBmaWx0ZXIncyBjcml0ZXJpYS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlGaWx0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeUZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RmlsdGVyKG9iajogQnVja2V0U3BlY0ludmVudG9yeUZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBzY2hlZHVsZSBmb3IgZ2VuZXJhdGluZyBpbnZlbnRvcnkgcmVzdWx0cy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSNmcmVxdWVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGZyZXF1ZW5jeT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW52ZW50b3J5U2NoZWR1bGUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZShvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnlTY2hlZHVsZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ZyZXF1ZW5jeSc6IG9iai5mcmVxdWVuY3ksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBsaWZlY3ljbGUgcnVsZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzIGluIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkYXlzIHNpbmNlIHRoZSBpbml0aWF0aW9uIG9mIGFuIGluY29tcGxldGUgbXVsdGlwYXJ0IHVwbG9hZCB0aGF0IEFtYXpvbiBTMyB3aWxsIHdhaXQgYmVmb3JlIHBlcm1hbmVudGx5IHJlbW92aW5nIGFsbCBwYXJ0cyBvZiB0aGUgdXBsb2FkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEFib3J0aW5nIEluY29tcGxldGUgTXVsdGlwYXJ0IFVwbG9hZHMgVXNpbmcgYSBCdWNrZXQgTGlmZWN5Y2xlIFBvbGljeSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbCNtcHUtYWJvcnQtaW5jb21wbGV0ZS1tcHUtbGlmZWN5Y2xlLWNvbmZpZykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNhYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcbiAgICovXG4gIHJlYWRvbmx5IGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZD86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0Fib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNleHBpcmF0aW9uXG4gICAqL1xuICByZWFkb25seSBleHBpcmF0aW9uPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRXhwaXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIEZpbHRlciBpcyB1c2VkIHRvIGlkZW50aWZ5IG9iamVjdHMgdGhhdCBhIExpZmVjeWNsZSBSdWxlIGFwcGxpZXMgdG8uIEEgRmlsdGVyIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBvZiBQcmVmaXgsIFRhZywgb3IgQW5kIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZW4gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgZXhwaXJlLiBVcG9uIGV4cGlyYXRpb24sIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IEFtYXpvbiBTMyBkZWxldGUgbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgYXQgYSBzcGVjaWZpYyBwZXJpb2QgaW4gdGhlIG9iamVjdCdzIGxpZmV0aW1lLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyNub25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IG5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbj86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXMjcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcyN0cmFuc2l0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdGlvbnM/OiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNUcmFuc2l0aW9uc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0Fib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZChvYmouYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKSxcbiAgICAnZXhwaXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uKG9iai5leHBpcmF0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlcihvYmouZmlsdGVyKSxcbiAgICAnaWQnOiBvYmouaWQsXG4gICAgJ25vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb24ob2JqLm5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbiksXG4gICAgJ25vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMnOiBvYmoubm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMoeSkpLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICAgICd0cmFuc2l0aW9ucyc6IG9iai50cmFuc2l0aW9ucz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZXNjcmliZXMgd2hlcmUgbG9ncyBhcmUgc3RvcmVkIGFuZCB0aGUgcHJlZml4IHRoYXQgQW1hem9uIFMzIGFzc2lnbnMgdG8gYWxsIGxvZyBvYmplY3Qga2V5cyBmb3IgYSBidWNrZXQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUFVUIEJ1Y2tldCBsb2dnaW5nIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L0FQSS9SRVNUQnVja2V0UFVUbG9nZ2luZy5odG1sKSBpbiB0aGUgQW1hem9uIFMzIEFQSSBSZWZlcmVuY2UuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQjdGFyZ2V0QnVja2V0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXRCdWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZCN0YXJnZXRHcmFudHNcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyYW50cz86IEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNbXTtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkI3RhcmdldFByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UHJlZml4Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWQob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAndGFyZ2V0QnVja2V0Jzogb2JqLnRhcmdldEJ1Y2tldCxcbiAgICAndGFyZ2V0R3JhbnRzJzogb2JqLnRhcmdldEdyYW50cz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMoeSkpLFxuICAgICd0YXJnZXRQcmVmaXgnOiBvYmoudGFyZ2V0UHJlZml4LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBhIG1ldHJpY3MgY29uZmlndXJhdGlvbiBmaWx0ZXIuIFRoZSBtZXRyaWNzIGNvbmZpZ3VyYXRpb24gb25seSBpbmNsdWRlcyBvYmplY3RzIHRoYXQgbWVldCB0aGUgZmlsdGVyJ3MgY3JpdGVyaWEuIEEgZmlsdGVyIG11c3QgYmUgYSBwcmVmaXgsIGFuIG9iamVjdCB0YWcsIGFuIGFjY2VzcyBwb2ludCBBUk4sIG9yIGEgY29uanVuY3Rpb24gKE1ldHJpY3NBbmRPcGVyYXRvcikuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUHV0QnVja2V0TWV0cmljc0NvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL0FQSV9QdXRCdWNrZXRNZXRyaWNzQ29uZmlndXJhdGlvbi5odG1sKS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciNhY2Nlc3NQb2ludEFSTlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzUG9pbnRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcywgYW5kIGFuIG9iamVjdCBtdXN0IG1hdGNoIGFsbCBvZiB0aGUgcHJlZGljYXRlcyBpbiBvcmRlciBmb3IgdGhlIGZpbHRlciB0byBhcHBseS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc1BvaW50QVJOJzogb2JqLmFjY2Vzc1BvaW50QXJuLFxuICAgICdhbmQnOiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyhvYmoudGFnKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyB0aGUgY29uZmlndXJhdGlvbiBmb3IgTGFtYmRhIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMjZXZlbnRzXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmcgcnVsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBrZXkgbmFtZSBmaWx0ZXJpbmcsIHNlZSBDb25maWd1cmluZyBFdmVudCBOb3RpZmljYXRpb25zIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGNvbmZpZ3VyYXRpb25zIGluIGEgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIElmIHlvdSBkb24ndCBwcm92aWRlIG9uZSwgQW1hem9uIFMzIHdpbGwgYXNzaWduIGFuIElELlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9ucyNsYW1iZGFGdW5jdGlvbkFSTlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb25Bcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdldmVudHMnOiBvYmouZXZlbnRzPy5tYXAoeSA9PiB5KSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAnbGFtYmRhRnVuY3Rpb25BUk4nOiBvYmoubGFtYmRhRnVuY3Rpb25Bcm4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaXNoaW5nIG1lc3NhZ2VzIHRvIGFuIEFtYXpvbiBTaW1wbGUgUXVldWUgU2VydmljZSAoQW1hem9uIFNRUykgcXVldWUgd2hlbiBBbWF6b24gUzMgZGV0ZWN0cyBzcGVjaWZpZWQgZXZlbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zI2V2ZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBvYmplY3Qga2V5IG5hbWUgZmlsdGVyaW5nIHJ1bGVzLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQga2V5IG5hbWUgZmlsdGVyaW5nLCBzZWUgQ29uZmlndXJpbmcgRXZlbnQgTm90aWZpY2F0aW9ucyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvTm90aWZpY2F0aW9uSG93VG8uaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBjb25maWd1cmF0aW9ucyBpbiBhIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uLiBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBvbmUsIEFtYXpvbiBTMyB3aWxsIGFzc2lnbiBhbiBJRC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyNpZFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnMjcXVldWVBUk5cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlQXJuPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9ucyhvYmo6IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZXZlbnRzJzogb2JqLmV2ZW50cz8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbHRlcic6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcihvYmouZmlsdGVyKSxcbiAgICAnaWQnOiBvYmouaWQsXG4gICAgJ3F1ZXVlQVJOJzogb2JqLnF1ZXVlQXJuLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uIGZvciBwdWJsaWNhdGlvbiBvZiBtZXNzYWdlcyB0byBhbiBBbWF6b24gU2ltcGxlIE5vdGlmaWNhdGlvbiBTZXJ2aWNlIChBbWF6b24gU05TKSB0b3BpYyB3aGVuIEFtYXpvbiBTMyBkZXRlY3RzIHNwZWNpZmllZCBldmVudHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMjZXZlbnRzXG4gICAqL1xuICByZWFkb25seSBldmVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIG9iamVjdCBrZXkgbmFtZSBmaWx0ZXJpbmcgcnVsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCBrZXkgbmFtZSBmaWx0ZXJpbmcsIHNlZSBDb25maWd1cmluZyBFdmVudCBOb3RpZmljYXRpb25zIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Ob3RpZmljYXRpb25Ib3dUby5odG1sKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMjZmlsdGVyXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXI/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcjtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGNvbmZpZ3VyYXRpb25zIGluIGEgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIElmIHlvdSBkb24ndCBwcm92aWRlIG9uZSwgQW1hem9uIFMzIHdpbGwgYXNzaWduIGFuIElELlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9ucyN0b3BpY0FSTlxuICAgKi9cbiAgcmVhZG9ubHkgdG9waWNBcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdldmVudHMnOiBvYmouZXZlbnRzPy5tYXAoeSA9PiB5KSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAndG9waWNBUk4nOiBvYmoudG9waWNBcm4sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGNvbnRhaW5lciBlbGVtZW50IGZvciBhbiBvd25lcnNoaXAgY29udHJvbCBydWxlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjT3duZXJzaGlwQ29udHJvbHNSdWxlcyB7XG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIGVsZW1lbnQgZm9yIG9iamVjdCBvd25lcnNoaXAgZm9yIGEgYnVja2V0J3Mgb3duZXJzaGlwIGNvbnRyb2xzLlxuICAgKiBCdWNrZXRPd25lclByZWZlcnJlZCAtIE9iamVjdHMgdXBsb2FkZWQgdG8gdGhlIGJ1Y2tldCBjaGFuZ2Ugb3duZXJzaGlwIHRvIHRoZSBidWNrZXQgb3duZXIgaWYgdGhlIG9iamVjdHMgYXJlIHVwbG9hZGVkIHdpdGggdGhlIGJ1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wgY2FubmVkIEFDTC5cbiAgICogT2JqZWN0V3JpdGVyIC0gVGhlIHVwbG9hZGluZyBhY2NvdW50IHdpbGwgb3duIHRoZSBvYmplY3QgaWYgdGhlIG9iamVjdCBpcyB1cGxvYWRlZCB3aXRoIHRoZSBidWNrZXQtb3duZXItZnVsbC1jb250cm9sIGNhbm5lZCBBQ0wuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMjb2JqZWN0T3duZXJzaGlwXG4gICAqL1xuICByZWFkb25seSBvYmplY3RPd25lcnNoaXA/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNPd25lcnNoaXBDb250cm9sc1J1bGVzKG9iajogQnVja2V0U3BlY093bmVyc2hpcENvbnRyb2xzUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvYmplY3RPd25lcnNoaXAnOiBvYmoub2JqZWN0T3duZXJzaGlwLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB3aGljaCBBbWF6b24gUzMgb2JqZWN0cyB0byByZXBsaWNhdGUgYW5kIHdoZXJlIHRvIHN0b3JlIHRoZSByZXBsaWNhcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgQW1hem9uIFMzIHJlcGxpY2F0ZXMgZGVsZXRlIG1hcmtlcnMuIElmIHlvdSBzcGVjaWZ5IGEgRmlsdGVyIGluIHlvdXIgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgeW91IG11c3QgYWxzbyBpbmNsdWRlIGEgRGVsZXRlTWFya2VyUmVwbGljYXRpb24gZWxlbWVudC4gSWYgeW91ciBGaWx0ZXIgaW5jbHVkZXMgYSBUYWcgZWxlbWVudCwgdGhlIERlbGV0ZU1hcmtlclJlcGxpY2F0aW9uIFN0YXR1cyBtdXN0IGJlIHNldCB0byBEaXNhYmxlZCwgYmVjYXVzZSBBbWF6b24gUzMgZG9lcyBub3Qgc3VwcG9ydCByZXBsaWNhdGluZyBkZWxldGUgbWFya2VycyBmb3IgdGFnLWJhc2VkIHJ1bGVzLiBGb3IgYW4gZXhhbXBsZSBjb25maWd1cmF0aW9uLCBzZWUgQmFzaWMgUnVsZSBDb25maWd1cmF0aW9uIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tY29uZmlnLW1pbi1ydWxlLWNvbmZpZykuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2RlbGV0ZS1tYXJrZXItcmVwbGljYXRpb24uaHRtbCkuXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgYW4gZWFybGllciB2ZXJzaW9uIG9mIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCBBbWF6b24gUzMgaGFuZGxlcyByZXBsaWNhdGlvbiBvZiBkZWxldGUgbWFya2VycyBkaWZmZXJlbnRseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBCYWNrd2FyZCBDb21wYXRpYmlsaXR5IChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9yZXBsaWNhdGlvbi1hZGQtY29uZmlnLmh0bWwjcmVwbGljYXRpb24tYmFja3dhcmQtY29tcGF0LWNvbnNpZGVyYXRpb25zKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNkZWxldGVNYXJrZXJSZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlTWFya2VyUmVwbGljYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0RlbGV0ZU1hcmtlclJlcGxpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCBhbmFseXNpcyBvciBjb25maWd1cmF0aW9uIHJlc3VsdHMgZm9yIGFuIEFtYXpvbiBTMyBidWNrZXQgYW5kIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNkZXN0aW5hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIHJlcGxpY2F0ZSBleGlzdGluZyBzb3VyY2UgYnVja2V0IG9iamVjdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVwbGljYXRpbmcgRXhpc3RpbmcgT2JqZWN0cyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24td2hhdC1pcy1pc25vdC1yZXBsaWNhdGVkLmh0bWwjZXhpc3Rpbmctb2JqZWN0LXJlcGxpY2F0aW9uKSBpbiB0aGUgQW1hem9uIFMzIFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMjZXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbj86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbjtcblxuICAvKipcbiAgICogQSBmaWx0ZXIgdGhhdCBpZGVudGlmaWVzIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcmVwbGljYXRpb24gcnVsZSBhcHBsaWVzLiBBIEZpbHRlciBtdXN0IHNwZWNpZnkgZXhhY3RseSBvbmUgUHJlZml4LCBUYWcsIG9yIGFuIEFuZCBjaGlsZCBlbGVtZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI2ZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXMjaWRcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3ByaW9yaXR5XG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogQSBjb250YWluZXIgdGhhdCBkZXNjcmliZXMgYWRkaXRpb25hbCBmaWx0ZXJzIGZvciBpZGVudGlmeWluZyB0aGUgc291cmNlIG9iamVjdHMgdGhhdCB5b3Ugd2FudCB0byByZXBsaWNhdGUuIFlvdSBjYW4gY2hvb3NlIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSByZXBsaWNhdGlvbiBvZiB0aGVzZSBvYmplY3RzLiBDdXJyZW50bHksIEFtYXpvbiBTMyBzdXBwb3J0cyBvbmx5IHRoZSBmaWx0ZXIgdGhhdCB5b3UgY2FuIHNwZWNpZnkgZm9yIG9iamVjdHMgY3JlYXRlZCB3aXRoIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gdXNpbmcgYSBjdXN0b21lciBtYW5hZ2VkIGtleSBzdG9yZWQgaW4gQW1hem9uIFdlYiBTZXJ2aWNlcyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChTU0UtS01TKS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyNzb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlU2VsZWN0aW9uQ3JpdGVyaWE/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlcyhvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVsZXRlTWFya2VyUmVwbGljYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbihvYmouZGVsZXRlTWFya2VyUmVwbGljYXRpb24pLFxuICAgICdkZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uKG9iai5kZXN0aW5hdGlvbiksXG4gICAgJ2V4aXN0aW5nT2JqZWN0UmVwbGljYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKG9iai5leGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKSxcbiAgICAnZmlsdGVyJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyKG9iai5maWx0ZXIpLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAncHJpb3JpdHknOiBvYmoucHJpb3JpdHksXG4gICAgJ3NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEob2JqLnNvdXJjZVNlbGVjdGlvbkNyaXRlcmlhKSxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNUYWdnaW5nVGFnU2V0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXQja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1RhZ2dpbmdUYWdTZXQjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNUYWdnaW5nVGFnU2V0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjVGFnZ2luZ1RhZ1NldChvYmo6IEJ1Y2tldFNwZWNUYWdnaW5nVGFnU2V0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGVycm9yIGluZm9ybWF0aW9uLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50I2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlRXJyb3JEb2N1bWVudCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50KG9iajogQnVja2V0U3BlY1dlYnNpdGVFcnJvckRvY3VtZW50IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIHRoZSBTdWZmaXggZWxlbWVudC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCNzdWZmaXhcbiAgICovXG4gIHJlYWRvbmx5IHN1ZmZpeD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZUluZGV4RG9jdW1lbnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudChvYmo6IEJ1Y2tldFNwZWNXZWJzaXRlSW5kZXhEb2N1bWVudCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N1ZmZpeCc6IG9iai5zdWZmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSByZWRpcmVjdCBiZWhhdmlvciBvZiBhbGwgcmVxdWVzdHMgdG8gYSB3ZWJzaXRlIGVuZHBvaW50IG9mIGFuIEFtYXpvbiBTMyBidWNrZXQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUb1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSZWRpcmVjdEFsbFJlcXVlc3RzVG8jaG9zdE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGhvc3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUmVkaXJlY3RBbGxSZXF1ZXN0c1RvI3Byb3RvY29sXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSZWRpcmVjdEFsbFJlcXVlc3RzVG8ob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJlZGlyZWN0QWxsUmVxdWVzdHNUbyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2hvc3ROYW1lJzogb2JqLmhvc3ROYW1lLFxuICAgICdwcm90b2NvbCc6IG9iai5wcm90b2NvbCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHJlZGlyZWN0IGJlaGF2aW9yIGFuZCB3aGVuIGEgcmVkaXJlY3QgaXMgYXBwbGllZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcm91dGluZyBydWxlcywgc2VlIENvbmZpZ3VyaW5nIGFkdmFuY2VkIGNvbmRpdGlvbmFsIHJlZGlyZWN0cyAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvaG93LXRvLXBhZ2UtcmVkaXJlY3QuaHRtbCNhZHZhbmNlZC1jb25kaXRpb25hbC1yZWRpcmVjdHMpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGRlc2NyaWJpbmcgYSBjb25kaXRpb24gdGhhdCBtdXN0IGJlIG1ldCBmb3IgdGhlIHNwZWNpZmllZCByZWRpcmVjdCB0byBhcHBseS4gRm9yIGV4YW1wbGUsIDEuIElmIHJlcXVlc3QgaXMgZm9yIHBhZ2VzIGluIHRoZSAvZG9jcyBmb2xkZXIsIHJlZGlyZWN0IHRvIHRoZSAvZG9jdW1lbnRzIGZvbGRlci4gMi4gSWYgcmVxdWVzdCByZXN1bHRzIGluIEhUVFAgZXJyb3IgNHh4LCByZWRpcmVjdCByZXF1ZXN0IHRvIGFub3RoZXIgaG9zdCB3aGVyZSB5b3UgbWlnaHQgcHJvY2VzcyB0aGUgZXJyb3IuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMjY29uZGl0aW9uXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyByZXF1ZXN0cyBhcmUgcmVkaXJlY3RlZC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCB5b3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgZXJyb3IgY29kZSB0byByZXR1cm4uXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMjcmVkaXJlY3RcbiAgICovXG4gIHJlYWRvbmx5IHJlZGlyZWN0PzogQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdDtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXMob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2NvbmRpdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbihvYmouY29uZGl0aW9uKSxcbiAgICAncmVkaXJlY3QnOiB0b0pzb25fQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdChvYmoucmVkaXJlY3QpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29uanVuY3Rpb24gKGxvZ2ljYWwgQU5EKSBvZiBwcmVkaWNhdGVzLCB3aGljaCBpcyB1c2VkIGluIGV2YWx1YXRpbmcgYSBtZXRyaWNzIGZpbHRlci4gVGhlIG9wZXJhdG9yIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gcHJlZGljYXRlcyBpbiBhbnkgY29tYmluYXRpb24sIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmQjcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCN0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kKG9iajogQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZ3MnOiBvYmoudGFncz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzKHkpKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJUYWcja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlclRhZyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGRhdGEgcmVsYXRlZCB0byB0aGUgc3RvcmFnZSBjbGFzcyBhbmFseXNpcyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBmb3IgZXhwb3J0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQge1xuICAvKipcbiAgICogV2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydCNkZXN0aW5hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb24/OiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydCNvdXRwdXRTY2hlbWFWZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRTY2hlbWFWZXJzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnQob2JqOiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGVzdGluYXRpb24nOiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uKG9iai5kZXN0aW5hdGlvbiksXG4gICAgJ291dHB1dFNjaGVtYVZlcnNpb24nOiBvYmoub3V0cHV0U2NoZW1hVmVyc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIGRlZmF1bHQgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0byBhcHBseSB0byBuZXcgb2JqZWN0cyBpbiB0aGUgYnVja2V0LiBJZiBhIFBVVCBPYmplY3QgcmVxdWVzdCBkb2Vzbid0IHNwZWNpZnkgYW55IHNlcnZlci1zaWRlIGVuY3J5cHRpb24sIHRoaXMgZGVmYXVsdCBlbmNyeXB0aW9uIHdpbGwgYmUgYXBwbGllZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBQVVQgQnVja2V0IGVuY3J5cHRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvQVBJL1JFU1RCdWNrZXRQVVRlbmNyeXB0aW9uLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgQVBJIFJlZmVyZW5jZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjRW5jcnlwdGlvblJ1bGVzQXBwbHlTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdCNrbXNNYXN0ZXJLZXlJRFxuICAgKi9cbiAgcmVhZG9ubHkga21zTWFzdGVyS2V5SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQjc3NlQWxnb3JpdGhtXG4gICAqL1xuICByZWFkb25seSBzc2VBbGdvcml0aG0/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNFbmNyeXB0aW9uUnVsZXNBcHBseVNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0KG9iajogQnVja2V0U3BlY0VuY3J5cHRpb25SdWxlc0FwcGx5U2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrbXNNYXN0ZXJLZXlJRCc6IG9iai5rbXNNYXN0ZXJLZXlJZCxcbiAgICAnc3NlQWxnb3JpdGhtJzogb2JqLnNzZUFsZ29yaXRobSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBmb3Igc3BlY2lmeWluZyBTMyBJbnRlbGxpZ2VudC1UaWVyaW5nIGZpbHRlcnMuIFRoZSBmaWx0ZXJzIGRldGVybWluZSB0aGUgc3Vic2V0IG9mIG9iamVjdHMgdG8gd2hpY2ggdGhlIHJ1bGUgYXBwbGllcy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kI3RhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFnc1tdO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmQob2JqOiBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAndGFncyc6IG9iai50YWdzPy5tYXAoeSA9PiB0b0pzb25fQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJUYWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlclRhZyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBidWNrZXQgbmFtZSwgZmlsZSBmb3JtYXQsIGJ1Y2tldCBvd25lciAob3B0aW9uYWwpLCBhbmQgcHJlZml4IChvcHRpb25hbCkgd2hlcmUgaW52ZW50b3J5IHJlc3VsdHMgYXJlIHB1Ymxpc2hlZC5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNhY2NvdW50SURcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI2J1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyB0aGUgdHlwZSBvZiBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzZWQgdG8gZW5jcnlwdCB0aGUgaW52ZW50b3J5IHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNmb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24ob2JqOiBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWNjb3VudElEJzogb2JqLmFjY291bnRJZCxcbiAgICAnYnVja2V0Jzogb2JqLmJ1Y2tldCxcbiAgICAnZW5jcnlwdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvbihvYmouZW5jcnlwdGlvbiksXG4gICAgJ2Zvcm1hdCc6IG9iai5mb3JtYXQsXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBkYXlzIHNpbmNlIHRoZSBpbml0aWF0aW9uIG9mIGFuIGluY29tcGxldGUgbXVsdGlwYXJ0IHVwbG9hZCB0aGF0IEFtYXpvbiBTMyB3aWxsIHdhaXQgYmVmb3JlIHBlcm1hbmVudGx5IHJlbW92aW5nIGFsbCBwYXJ0cyBvZiB0aGUgdXBsb2FkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEFib3J0aW5nIEluY29tcGxldGUgTXVsdGlwYXJ0IFVwbG9hZHMgVXNpbmcgYSBCdWNrZXQgTGlmZWN5Y2xlIFBvbGljeSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvbXB1b3ZlcnZpZXcuaHRtbCNtcHUtYWJvcnQtaW5jb21wbGV0ZS1tcHUtbGlmZWN5Y2xlLWNvbmZpZykgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkI2RheXNBZnRlckluaXRpYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRheXNBZnRlckluaXRpYXRpb24/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXlzQWZ0ZXJJbml0aWF0aW9uJzogb2JqLmRheXNBZnRlckluaXRpYXRpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXhwaXJhdGlvbiBmb3IgdGhlIGxpZmVjeWNsZSBvZiB0aGUgb2JqZWN0LlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRXhwaXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uI2RhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24jZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgZGF5cz86IG51bWJlcjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uI2V4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4cGlyZWRPYmplY3REZWxldGVNYXJrZXI/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0V4cGlyYXRpb24ob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNFeHBpcmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZGF0ZSc6IG9iai5kYXRlPy50b0lTT1N0cmluZygpLFxuICAgICdkYXlzJzogb2JqLmRheXMsXG4gICAgJ2V4cGlyZWRPYmplY3REZWxldGVNYXJrZXInOiBvYmouZXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlcixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgRmlsdGVyIGlzIHVzZWQgdG8gaWRlbnRpZnkgb2JqZWN0cyB0aGF0IGEgTGlmZWN5Y2xlIFJ1bGUgYXBwbGllcyB0by4gQSBGaWx0ZXIgbXVzdCBoYXZlIGV4YWN0bHkgb25lIG9mIFByZWZpeCwgVGFnLCBvciBBbmQgc3BlY2lmaWVkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgdXNlZCBpbiBhIExpZmVjeWNsZSBSdWxlIEZpbHRlciB0byBhcHBseSBhIGxvZ2ljYWwgQU5EIHRvIHR3byBvciBtb3JlIHByZWRpY2F0ZXMuIFRoZSBMaWZlY3ljbGUgUnVsZSB3aWxsIGFwcGx5IHRvIGFueSBvYmplY3QgbWF0Y2hpbmcgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIGNvbmZpZ3VyZWQgaW5zaWRlIHRoZSBBbmQgb3BlcmF0b3IuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyI2FuZFxuICAgKi9cbiAgcmVhZG9ubHkgYW5kPzogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciN0YWdcbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXInIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlcihvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FuZCc6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQob2JqLmFuZCksXG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZyc6IHRvSnNvbl9CdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJUYWcob2JqLnRhZyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHdoZW4gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgZXhwaXJlLiBVcG9uIGV4cGlyYXRpb24sIEFtYXpvbiBTMyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSBub25jdXJyZW50IG9iamVjdCB2ZXJzaW9ucy4gWW91IHNldCB0aGlzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIGFjdGlvbiBvbiBhIGJ1Y2tldCB0aGF0IGhhcyB2ZXJzaW9uaW5nIGVuYWJsZWQgKG9yIHN1c3BlbmRlZCkgdG8gcmVxdWVzdCB0aGF0IEFtYXpvbiBTMyBkZWxldGUgbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgYXQgYSBzcGVjaWZpYyBwZXJpb2QgaW4gdGhlIG9iamVjdCdzIGxpZmV0aW1lLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uI25vbmN1cnJlbnREYXlzXG4gICAqL1xuICByZWFkb25seSBub25jdXJyZW50RGF5cz86IG51bWJlcjtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbihvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25vbmN1cnJlbnREYXlzJzogb2JqLm5vbmN1cnJlbnREYXlzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIHRyYW5zaXRpb24gcnVsZSB0aGF0IGRlc2NyaWJlcyB3aGVuIG5vbmN1cnJlbnQgb2JqZWN0cyB0cmFuc2l0aW9uIHRvIHRoZSBTVEFOREFSRF9JQSwgT05FWk9ORV9JQSwgSU5URUxMSUdFTlRfVElFUklORywgR0xBQ0lFUiwgb3IgREVFUF9BUkNISVZFIHN0b3JhZ2UgY2xhc3MuIElmIHlvdXIgYnVja2V0IGlzIHZlcnNpb25pbmctZW5hYmxlZCAob3IgdmVyc2lvbmluZyBpcyBzdXNwZW5kZWQpLCB5b3UgY2FuIHNldCB0aGlzIGFjdGlvbiB0byByZXF1ZXN0IHRoYXQgQW1hem9uIFMzIHRyYW5zaXRpb24gbm9uY3VycmVudCBvYmplY3QgdmVyc2lvbnMgdG8gdGhlIFNUQU5EQVJEX0lBLCBPTkVaT05FX0lBLCBJTlRFTExJR0VOVF9USUVSSU5HLCBHTEFDSUVSLCBvciBERUVQX0FSQ0hJVkUgc3RvcmFnZSBjbGFzcyBhdCBhIHNwZWNpZmljIHBlcmlvZCBpbiB0aGUgb2JqZWN0J3MgbGlmZXRpbWUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMjbm9uY3VycmVudERheXNcbiAgICovXG4gIHJlYWRvbmx5IG5vbmN1cnJlbnREYXlzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMjc3RvcmFnZUNsYXNzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3M/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9ucyhvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc05vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdub25jdXJyZW50RGF5cyc6IG9iai5ub25jdXJyZW50RGF5cyxcbiAgICAnc3RvcmFnZUNsYXNzJzogb2JqLnN0b3JhZ2VDbGFzcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hlbiBhbiBvYmplY3QgdHJhbnNpdGlvbnMgdG8gYSBzcGVjaWZpZWQgc3RvcmFnZSBjbGFzcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIFMzIGxpZmVjeWNsZSBjb25maWd1cmF0aW9uIHJ1bGVzLCBzZWUgVHJhbnNpdGlvbmluZyBPYmplY3RzIFVzaW5nIEFtYXpvbiBTMyBMaWZlY3ljbGUgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbCkgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNUcmFuc2l0aW9ucyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zI2RhdGVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGU/OiBEYXRlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zI2RheXNcbiAgICovXG4gIHJlYWRvbmx5IGRheXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMjc3RvcmFnZUNsYXNzXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlQ2xhc3M/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc1RyYW5zaXRpb25zKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzVHJhbnNpdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRlJzogb2JqLmRhdGU/LnRvSVNPU3RyaW5nKCksXG4gICAgJ2RheXMnOiBvYmouZGF5cyxcbiAgICAnc3RvcmFnZUNsYXNzJzogb2JqLnN0b3JhZ2VDbGFzcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb250YWluZXIgZm9yIGdyYW50aW5nIGluZm9ybWF0aW9uLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMge1xuICAvKipcbiAgICogQ29udGFpbmVyIGZvciB0aGUgcGVyc29uIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50cyNncmFudGVlXG4gICAqL1xuICByZWFkb25seSBncmFudGVlPzogQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50cyNwZXJtaXNzaW9uXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHMob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZ3JhbnRlZSc6IHRvSnNvbl9CdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZShvYmouZ3JhbnRlZSksXG4gICAgJ3Blcm1pc3Npb24nOiBvYmoucGVybWlzc2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbmp1bmN0aW9uIChsb2dpY2FsIEFORCkgb2YgcHJlZGljYXRlcywgd2hpY2ggaXMgdXNlZCBpbiBldmFsdWF0aW5nIGEgbWV0cmljcyBmaWx0ZXIuIFRoZSBvcGVyYXRvciBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIHByZWRpY2F0ZXMsIGFuZCBhbiBvYmplY3QgbXVzdCBtYXRjaCBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgaW4gb3JkZXIgZm9yIHRoZSBmaWx0ZXIgdG8gYXBwbHkuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQjYWNjZXNzUG9pbnRBUk5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc1BvaW50QXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kI3RhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmQob2JqOiBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc1BvaW50QVJOJzogb2JqLmFjY2Vzc1BvaW50QXJuLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICd0YWdzJzogb2JqLnRhZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgb2JqZWN0IGtleSBuYW1lIGZpbHRlcmluZyBydWxlcy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGtleSBuYW1lIGZpbHRlcmluZywgc2VlIENvbmZpZ3VyaW5nIEV2ZW50IE5vdGlmaWNhdGlvbnMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L05vdGlmaWNhdGlvbkhvd1RvLmh0bWwpIGluIHRoZSBBbWF6b24gUzMgVXNlciBHdWlkZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIG9iamVjdCBrZXkgbmFtZSBwcmVmaXggYW5kIHN1ZmZpeCBmaWx0ZXJpbmcgcnVsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleShvYmoua2V5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgd2hldGhlciBBbWF6b24gUzMgcmVwbGljYXRlcyBkZWxldGUgbWFya2Vycy4gSWYgeW91IHNwZWNpZnkgYSBGaWx0ZXIgaW4geW91ciByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgYSBEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiBlbGVtZW50LiBJZiB5b3VyIEZpbHRlciBpbmNsdWRlcyBhIFRhZyBlbGVtZW50LCB0aGUgRGVsZXRlTWFya2VyUmVwbGljYXRpb24gU3RhdHVzIG11c3QgYmUgc2V0IHRvIERpc2FibGVkLCBiZWNhdXNlIEFtYXpvbiBTMyBkb2VzIG5vdCBzdXBwb3J0IHJlcGxpY2F0aW5nIGRlbGV0ZSBtYXJrZXJzIGZvciB0YWctYmFzZWQgcnVsZXMuIEZvciBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3JlcGxpY2F0aW9uLWFkZC1jb25maWcuaHRtbCNyZXBsaWNhdGlvbi1jb25maWctbWluLXJ1bGUtY29uZmlnKS5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlbGV0ZSBtYXJrZXIgcmVwbGljYXRpb24sIHNlZSBCYXNpYyBSdWxlIENvbmZpZ3VyYXRpb24gKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L2RlbGV0ZS1tYXJrZXItcmVwbGljYXRpb24uaHRtbCkuXG4gKiBJZiB5b3UgYXJlIHVzaW5nIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiwgQW1hem9uIFMzIGhhbmRsZXMgcmVwbGljYXRpb24gb2YgZGVsZXRlIG1hcmtlcnMgZGlmZmVyZW50bHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvcmVwbGljYXRpb24tYWRkLWNvbmZpZy5odG1sI3JlcGxpY2F0aW9uLWJhY2t3YXJkLWNvbXBhdC1jb25zaWRlcmF0aW9ucykuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0RlbGV0ZU1hcmtlclJlcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVsZXRlTWFya2VyUmVwbGljYXRpb24jc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZWxldGVNYXJrZXJSZXBsaWNhdGlvbihvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVsZXRlTWFya2VyUmVwbGljYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0byBwdWJsaXNoIGFuYWx5c2lzIG9yIGNvbmZpZ3VyYXRpb24gcmVzdWx0cyBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCBhbmQgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFjY2VzcyBjb250cm9sIGZvciByZXBsaWNhcy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2FjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbkFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2FjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldD86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGEgZGVzdGluYXRpb24gZm9yIHJlcGxpY2F0ZWQgb2JqZWN0cy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uI2VuY3J5cHRpb25Db25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBjb250YWluZXIgc3BlY2lmeWluZyByZXBsaWNhdGlvbiBtZXRyaWNzLXJlbGF0ZWQgc2V0dGluZ3MgZW5hYmxpbmcgcmVwbGljYXRpb24gbWV0cmljcyBhbmQgZXZlbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb24jbWV0cmljc1xuICAgKi9cbiAgcmVhZG9ubHkgbWV0cmljcz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSByZWxhdGVkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgd2hldGhlciBTMyBSVEMgaXMgZW5hYmxlZCBhbmQgdGhlIHRpbWUgd2hlbiBhbGwgb2JqZWN0cyBhbmQgb3BlcmF0aW9ucyBvbiBvYmplY3RzIG11c3QgYmUgcmVwbGljYXRlZC4gTXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBhIE1ldHJpY3MgYmxvY2suXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNyZXBsaWNhdGlvblRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2F0aW9uVGltZT86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWU7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiNzdG9yYWdlQ2xhc3NcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VDbGFzcz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uKG9iai5hY2Nlc3NDb250cm9sVHJhbnNsYXRpb24pLFxuICAgICdhY2NvdW50Jzogb2JqLmFjY291bnQsXG4gICAgJ2J1Y2tldCc6IG9iai5idWNrZXQsXG4gICAgJ2VuY3J5cHRpb25Db25maWd1cmF0aW9uJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbihvYmouZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24pLFxuICAgICdtZXRyaWNzJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzKG9iai5tZXRyaWNzKSxcbiAgICAncmVwbGljYXRpb25UaW1lJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWUob2JqLnJlcGxpY2F0aW9uVGltZSksXG4gICAgJ3N0b3JhZ2VDbGFzcyc6IG9iai5zdG9yYWdlQ2xhc3MsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byByZXBsaWNhdGUgZXhpc3Rpbmcgc291cmNlIGJ1Y2tldCBvYmplY3RzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFJlcGxpY2F0aW5nIEV4aXN0aW5nIE9iamVjdHMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L3JlcGxpY2F0aW9uLXdoYXQtaXMtaXNub3QtcmVwbGljYXRlZC5odG1sI2V4aXN0aW5nLW9iamVjdC1yZXBsaWNhdGlvbikgaW4gdGhlIEFtYXpvbiBTMyBVc2VyIEd1aWRlLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uI3N0YXR1c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRXhpc3RpbmdPYmplY3RSZXBsaWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNFeGlzdGluZ09iamVjdFJlcGxpY2F0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IGlkZW50aWZpZXMgdGhlIHN1YnNldCBvZiBvYmplY3RzIHRvIHdoaWNoIHRoZSByZXBsaWNhdGlvbiBydWxlIGFwcGxpZXMuIEEgRmlsdGVyIG11c3Qgc3BlY2lmeSBleGFjdGx5IG9uZSBQcmVmaXgsIFRhZywgb3IgYW4gQW5kIGNoaWxkIGVsZW1lbnQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyIHtcbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHJ1bGUgZmlsdGVycy4gVGhlIGZpbHRlcnMgZGV0ZXJtaW5lIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiBUaGlzIGVsZW1lbnQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbHRlci5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICogSWYgeW91IHNwZWNpZnkgYm90aCBhIFByZWZpeCBhbmQgYSBUYWcgZmlsdGVyLCB3cmFwIHRoZXNlIGZpbHRlcnMgaW4gICAgYW4gQW5kIHRhZy5cbiAgICogKiBJZiB5b3Ugc3BlY2lmeSBhIGZpbHRlciBiYXNlZCBvbiBtdWx0aXBsZSB0YWdzLCB3cmFwIHRoZSBUYWcgZWxlbWVudHMgICAgaW4gYW4gQW5kIHRhZy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlciNhbmRcbiAgICovXG4gIHJlYWRvbmx5IGFuZD86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXIjdGFnXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlcicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXIob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlciB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FuZCc6IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZChvYmouYW5kKSxcbiAgICAncHJlZml4Jzogb2JqLnByZWZpeCxcbiAgICAndGFnJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnKG9iai50YWcpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIHRoYXQgZGVzY3JpYmVzIGFkZGl0aW9uYWwgZmlsdGVycyBmb3IgaWRlbnRpZnlpbmcgdGhlIHNvdXJjZSBvYmplY3RzIHRoYXQgeW91IHdhbnQgdG8gcmVwbGljYXRlLiBZb3UgY2FuIGNob29zZSB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcmVwbGljYXRpb24gb2YgdGhlc2Ugb2JqZWN0cy4gQ3VycmVudGx5LCBBbWF6b24gUzMgc3VwcG9ydHMgb25seSB0aGUgZmlsdGVyIHRoYXQgeW91IGNhbiBzcGVjaWZ5IGZvciBvYmplY3RzIGNyZWF0ZWQgd2l0aCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHVzaW5nIGEgY3VzdG9tZXIgbWFuYWdlZCBrZXkgc3RvcmVkIGluIEFtYXpvbiBXZWIgU2VydmljZXMgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoU1NFLUtNUykuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYSB7XG4gIC8qKlxuICAgKiBBIGZpbHRlciB0aGF0IHlvdSBjYW4gc3BlY2lmeSBmb3Igc2VsZWN0aW9uIGZvciBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLiBBbWF6b24gUzMgZG9lc24ndCByZXBsaWNhdGUgcmVwbGljYSBtb2RpZmljYXRpb25zIGJ5IGRlZmF1bHQuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uICh3aGVuIEZpbHRlciBpcyBzcGVjaWZpZWQpLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBlbGVtZW50IGFuZCBzZXQgdGhlIHN0YXR1cyB0byBFbmFibGVkIHRvIHJlcGxpY2F0ZSBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLlxuICAgKiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgRmlsdGVyIGVsZW1lbnQsIEFtYXpvbiBTMyBhc3N1bWVzIHRoYXQgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gaXMgdGhlIGVhcmxpZXIgdmVyc2lvbiwgVjEuIEluIHRoZSBlYXJsaWVyIHZlcnNpb24sIHRoaXMgZWxlbWVudCBpcyBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhI3JlcGxpY2FNb2RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhTW9kaWZpY2F0aW9ucz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFSZXBsaWNhTW9kaWZpY2F0aW9ucztcblxuICAvKipcbiAgICogQSBjb250YWluZXIgZm9yIGZpbHRlciBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBvZiBTMyBvYmplY3RzIGVuY3J5cHRlZCB3aXRoIEFtYXpvbiBXZWIgU2VydmljZXMgS01TLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEjc3NlS01TRW5jcnlwdGVkT2JqZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgc3NlS21zRW5jcnlwdGVkT2JqZWN0cz86IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFTc2VLbXNFbmNyeXB0ZWRPYmplY3RzO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWEob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVwbGljYU1vZGlmaWNhdGlvbnMnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVJlcGxpY2FNb2RpZmljYXRpb25zKG9iai5yZXBsaWNhTW9kaWZpY2F0aW9ucyksXG4gICAgJ3NzZUtNU0VuY3J5cHRlZE9iamVjdHMnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMob2JqLnNzZUttc0VuY3J5cHRlZE9iamVjdHMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBkZXNjcmliaW5nIGEgY29uZGl0aW9uIHRoYXQgbXVzdCBiZSBtZXQgZm9yIHRoZSBzcGVjaWZpZWQgcmVkaXJlY3QgdG8gYXBwbHkuIEZvciBleGFtcGxlLCAxLiBJZiByZXF1ZXN0IGlzIGZvciBwYWdlcyBpbiB0aGUgL2RvY3MgZm9sZGVyLCByZWRpcmVjdCB0byB0aGUgL2RvY3VtZW50cyBmb2xkZXIuIDIuIElmIHJlcXVlc3QgcmVzdWx0cyBpbiBIVFRQIGVycm9yIDR4eCwgcmVkaXJlY3QgcmVxdWVzdCB0byBhbm90aGVyIGhvc3Qgd2hlcmUgeW91IG1pZ2h0IHByb2Nlc3MgdGhlIGVycm9yLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNDb25kaXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uI2h0dHBFcnJvckNvZGVSZXR1cm5lZEVxdWFsc1xuICAgKi9cbiAgcmVhZG9ubHkgaHR0cEVycm9yQ29kZVJldHVybmVkRXF1YWxzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uI2tleVByZWZpeEVxdWFsc1xuICAgKi9cbiAgcmVhZG9ubHkga2V5UHJlZml4RXF1YWxzPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc0NvbmRpdGlvbihvYmo6IEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzQ29uZGl0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaHR0cEVycm9yQ29kZVJldHVybmVkRXF1YWxzJzogb2JqLmh0dHBFcnJvckNvZGVSZXR1cm5lZEVxdWFscyxcbiAgICAna2V5UHJlZml4RXF1YWxzJzogb2JqLmtleVByZWZpeEVxdWFscyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgaG93IHJlcXVlc3RzIGFyZSByZWRpcmVjdGVkLiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IsIHlvdSBjYW4gc3BlY2lmeSBhIGRpZmZlcmVudCBlcnJvciBjb2RlIHRvIHJldHVybi5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc1JlZGlyZWN0IHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdCNob3N0TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1dlYnNpdGVSb3V0aW5nUnVsZXNSZWRpcmVjdCNodHRwUmVkaXJlY3RDb2RlXG4gICAqL1xuICByZWFkb25seSBodHRwUmVkaXJlY3RDb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcmVwbGFjZUtleVByZWZpeFdpdGhcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VLZXlQcmVmaXhXaXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QjcmVwbGFjZUtleVdpdGhcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxhY2VLZXlXaXRoPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3QnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNXZWJzaXRlUm91dGluZ1J1bGVzUmVkaXJlY3Qob2JqOiBCdWNrZXRTcGVjV2Vic2l0ZVJvdXRpbmdSdWxlc1JlZGlyZWN0IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaG9zdE5hbWUnOiBvYmouaG9zdE5hbWUsXG4gICAgJ2h0dHBSZWRpcmVjdENvZGUnOiBvYmouaHR0cFJlZGlyZWN0Q29kZSxcbiAgICAncHJvdG9jb2wnOiBvYmoucHJvdG9jb2wsXG4gICAgJ3JlcGxhY2VLZXlQcmVmaXhXaXRoJzogb2JqLnJlcGxhY2VLZXlQcmVmaXhXaXRoLFxuICAgICdyZXBsYWNlS2V5V2l0aCc6IG9iai5yZXBsYWNlS2V5V2l0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogV2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uI3MzQnVja2V0RGVzdGluYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzQnVja2V0RGVzdGluYXRpb24/OiBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uKG9iajogQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnczNCdWNrZXREZXN0aW5hdGlvbic6IHRvSnNvbl9CdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uKG9iai5zM0J1Y2tldERlc3RpbmF0aW9uKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludGVsbGlnZW50VGllcmluZ0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW50ZWxsaWdlbnRUaWVyaW5nRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNJbnRlbGxpZ2VudFRpZXJpbmdGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbnMgdGhlIHR5cGUgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB1c2VkIHRvIGVuY3J5cHQgdGhlIGludmVudG9yeSByZXN1bHRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHVzZSBvZiBTU0UtS01TIHRvIGVuY3J5cHQgZGVsaXZlcmVkIGludmVudG9yeSByZXBvcnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uI3NzZUtNU1xuICAgKi9cbiAgcmVhZG9ubHkgc3NlS21zPzogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXM7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uKG9iajogQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzc2VLTVMnOiB0b0pzb25fQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXMob2JqLnNzZUttcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhpcyBpcyB1c2VkIGluIGEgTGlmZWN5Y2xlIFJ1bGUgRmlsdGVyIHRvIGFwcGx5IGEgbG9naWNhbCBBTkQgdG8gdHdvIG9yIG1vcmUgcHJlZGljYXRlcy4gVGhlIExpZmVjeWNsZSBSdWxlIHdpbGwgYXBwbHkgdG8gYW55IG9iamVjdCBtYXRjaGluZyBhbGwgb2YgdGhlIHByZWRpY2F0ZXMgY29uZmlndXJlZCBpbnNpZGUgdGhlIEFuZCBvcGVyYXRvci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQjdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3NbXTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZChvYmo6IEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZCB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3ByZWZpeCc6IG9iai5wcmVmaXgsXG4gICAgJ3RhZ3MnOiBvYmoudGFncz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJUYWcjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlclRhZycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyVGFnIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgcGVyc29uIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbnMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWUjZGlzcGxheU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlI2VtYWlsQWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxBZGRyZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMb2dnaW5nTG9nZ2luZ0VuYWJsZWRUYXJnZXRHcmFudHNHcmFudGVlI2lkXG4gICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSN0eXBlX1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSN1UklcbiAgICovXG4gIHJlYWRvbmx5IHVSaT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0xvZ2dpbmdMb2dnaW5nRW5hYmxlZFRhcmdldEdyYW50c0dyYW50ZWUob2JqOiBCdWNrZXRTcGVjTG9nZ2luZ0xvZ2dpbmdFbmFibGVkVGFyZ2V0R3JhbnRzR3JhbnRlZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Rpc3BsYXlOYW1lJzogb2JqLmRpc3BsYXlOYW1lLFxuICAgICdlbWFpbEFkZHJlc3MnOiBvYmouZW1haWxBZGRyZXNzLFxuICAgICdpZCc6IG9iai5pZCxcbiAgICAndHlwZV8nOiBvYmoudHlwZSxcbiAgICAndVJJJzogb2JqLnVSaSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBvZiBhIGtleSB2YWx1ZSBuYW1lIHBhaXIuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3Mge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3Mja2V5XG4gICAqL1xuICByZWFkb25seSBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY01ldHJpY3NGaWx0ZXJBbmRUYWdzI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTWV0cmljc0ZpbHRlckFuZFRhZ3MnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kVGFncyhvYmo6IEJ1Y2tldFNwZWNNZXRyaWNzRmlsdGVyQW5kVGFncyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2tleSc6IG9iai5rZXksXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBvYmplY3Qga2V5IG5hbWUgcHJlZml4IGFuZCBzdWZmaXggZmlsdGVyaW5nIHJ1bGVzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgY29udGFpbmVycyBmb3IgdGhlIGtleS12YWx1ZSBwYWlyIHRoYXQgZGVmaW5lcyB0aGUgY3JpdGVyaWEgZm9yIHRoZSBmaWx0ZXIgcnVsZS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleSNmaWx0ZXJSdWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyUnVsZXM/OiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXknIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5KG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXkgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdmaWx0ZXJSdWxlcyc6IG9iai5maWx0ZXJSdWxlcz8ubWFwKHkgPT4gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBpbmZvcm1hdGlvbiBhYm91dCBhY2Nlc3MgY29udHJvbCBmb3IgcmVwbGljYXMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbkFjY2Vzc0NvbnRyb2xUcmFuc2xhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24jb3duZXJcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25BY2Nlc3NDb250cm9sVHJhbnNsYXRpb24ob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uQWNjZXNzQ29udHJvbFRyYW5zbGF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnb3duZXInOiBvYmoub3duZXIsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIGVuY3J5cHRpb24tcmVsYXRlZCBpbmZvcm1hdGlvbiBmb3IgYW4gQW1hem9uIFMzIGJ1Y2tldCB0aGF0IGlzIGEgZGVzdGluYXRpb24gZm9yIHJlcGxpY2F0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiNyZXBsaWNhS01TS2V5SURcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2FLbXNLZXlJZD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbihvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25FbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3JlcGxpY2FLTVNLZXlJRCc6IG9iai5yZXBsaWNhS21zS2V5SWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyByZXBsaWNhdGlvbiBtZXRyaWNzLXJlbGF0ZWQgc2V0dGluZ3MgZW5hYmxpbmcgcmVwbGljYXRpb24gbWV0cmljcyBhbmQgZXZlbnRzLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyB7XG4gIC8qKlxuICAgKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIHRoZSB0aW1lIHZhbHVlIGZvciBTMyBSZXBsaWNhdGlvbiBUaW1lIENvbnRyb2wgKFMzIFJUQykgYW5kIHJlcGxpY2F0aW9uIG1ldHJpY3MgRXZlbnRUaHJlc2hvbGQuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3MjZXZlbnRUaHJlc2hvbGRcbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50VGhyZXNob2xkPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZDtcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3Mob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V2ZW50VGhyZXNob2xkJzogdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQob2JqLmV2ZW50VGhyZXNob2xkKSxcbiAgICAnc3RhdHVzJzogb2JqLnN0YXR1cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGNvbnRhaW5lciBzcGVjaWZ5aW5nIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSByZWxhdGVkIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgd2hldGhlciBTMyBSVEMgaXMgZW5hYmxlZCBhbmQgdGhlIHRpbWUgd2hlbiBhbGwgb2JqZWN0cyBhbmQgb3BlcmF0aW9ucyBvbiBvYmplY3RzIG11c3QgYmUgcmVwbGljYXRlZC4gTXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBhIE1ldHJpY3MgYmxvY2suXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWUjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29udGFpbmVyIHNwZWNpZnlpbmcgdGhlIHRpbWUgdmFsdWUgZm9yIFMzIFJlcGxpY2F0aW9uIFRpbWUgQ29udHJvbCAoUzMgUlRDKSBhbmQgcmVwbGljYXRpb24gbWV0cmljcyBFdmVudFRocmVzaG9sZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lI3RpbWVcbiAgICovXG4gIHJlYWRvbmx5IHRpbWU/OiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lVGltZTtcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gICAgJ3RpbWUnOiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUob2JqLnRpbWUpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBzcGVjaWZ5aW5nIHJ1bGUgZmlsdGVycy4gVGhlIGZpbHRlcnMgZGV0ZXJtaW5lIHRoZSBzdWJzZXQgb2Ygb2JqZWN0cyB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiBUaGlzIGVsZW1lbnQgaXMgcmVxdWlyZWQgb25seSBpZiB5b3Ugc3BlY2lmeSBtb3JlIHRoYW4gb25lIGZpbHRlci5cbiAqIEZvciBleGFtcGxlOlxuICogKiBJZiB5b3Ugc3BlY2lmeSBib3RoIGEgUHJlZml4IGFuZCBhIFRhZyBmaWx0ZXIsIHdyYXAgdGhlc2UgZmlsdGVycyBpbiAgICBhbiBBbmQgdGFnLlxuICogKiBJZiB5b3Ugc3BlY2lmeSBhIGZpbHRlciBiYXNlZCBvbiBtdWx0aXBsZSB0YWdzLCB3cmFwIHRoZSBUYWcgZWxlbWVudHMgICAgaW4gYW4gQW5kIHRhZy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZCNwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZCN0YWdzXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzW107XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICd0YWdzJzogb2JqLnRhZ3M/Lm1hcCh5ID0+IHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3MoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIG9mIGEga2V5IHZhbHVlIG5hbWUgcGFpci5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZyNrZXlcbiAgICovXG4gIHJlYWRvbmx5IGtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlclRhZyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyVGFnKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJUYWcgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIGZpbHRlciB0aGF0IHlvdSBjYW4gc3BlY2lmeSBmb3Igc2VsZWN0aW9uIGZvciBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLiBBbWF6b24gUzMgZG9lc24ndCByZXBsaWNhdGUgcmVwbGljYSBtb2RpZmljYXRpb25zIGJ5IGRlZmF1bHQuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uICh3aGVuIEZpbHRlciBpcyBzcGVjaWZpZWQpLCB5b3UgY2FuIHNwZWNpZnkgdGhpcyBlbGVtZW50IGFuZCBzZXQgdGhlIHN0YXR1cyB0byBFbmFibGVkIHRvIHJlcGxpY2F0ZSBtb2RpZmljYXRpb25zIG9uIHJlcGxpY2FzLlxuICogSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIEZpbHRlciBlbGVtZW50LCBBbWF6b24gUzMgYXNzdW1lcyB0aGF0IHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGlzIHRoZSBlYXJsaWVyIHZlcnNpb24sIFYxLiBJbiB0aGUgZWFybGllciB2ZXJzaW9uLCB0aGlzIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMjc3RhdHVzXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVJlcGxpY2FNb2RpZmljYXRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhUmVwbGljYU1vZGlmaWNhdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdzdGF0dXMnOiBvYmouc3RhdHVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgY29udGFpbmVyIGZvciBmaWx0ZXIgaW5mb3JtYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gb2YgUzMgb2JqZWN0cyBlbmNyeXB0ZWQgd2l0aCBBbWF6b24gV2ViIFNlcnZpY2VzIEtNUy5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzU291cmNlU2VsZWN0aW9uQ3JpdGVyaWFTc2VLbXNFbmNyeXB0ZWRPYmplY3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cyNzdGF0dXNcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1cz86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNTb3VyY2VTZWxlY3Rpb25Dcml0ZXJpYVNzZUttc0VuY3J5cHRlZE9iamVjdHMob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc1NvdXJjZVNlbGVjdGlvbkNyaXRlcmlhU3NlS21zRW5jcnlwdGVkT2JqZWN0cyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ3N0YXR1cyc6IG9iai5zdGF0dXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gcHVibGlzaCB0aGUgYW5hbHl0aWNzIHJlc3VsdHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24jYnVja2V0XG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbiNidWNrZXRBY2NvdW50SURcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldEFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjQW5hbHl0aWNzU3RvcmFnZUNsYXNzQW5hbHlzaXNEYXRhRXhwb3J0RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uI2Zvcm1hdFxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24jcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY0FuYWx5dGljc1N0b3JhZ2VDbGFzc0FuYWx5c2lzRGF0YUV4cG9ydERlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbihvYmo6IEJ1Y2tldFNwZWNBbmFseXRpY3NTdG9yYWdlQ2xhc3NBbmFseXNpc0RhdGFFeHBvcnREZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdidWNrZXQnOiBvYmouYnVja2V0LFxuICAgICdidWNrZXRBY2NvdW50SUQnOiBvYmouYnVja2V0QWNjb3VudElkLFxuICAgICdmb3JtYXQnOiBvYmouZm9ybWF0LFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgdXNlIG9mIFNTRS1LTVMgdG8gZW5jcnlwdCBkZWxpdmVyZWQgaW52ZW50b3J5IHJlcG9ydHMuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvblNzZUttc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY0ludmVudG9yeURlc3RpbmF0aW9uUzNCdWNrZXREZXN0aW5hdGlvbkVuY3J5cHRpb25Tc2VLbXMja2V5SURcbiAgICovXG4gIHJlYWRvbmx5IGtleUlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjSW52ZW50b3J5RGVzdGluYXRpb25TM0J1Y2tldERlc3RpbmF0aW9uRW5jcnlwdGlvblNzZUttcyhvYmo6IEJ1Y2tldFNwZWNJbnZlbnRvcnlEZXN0aW5hdGlvblMzQnVja2V0RGVzdGluYXRpb25FbmNyeXB0aW9uU3NlS21zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5SUQnOiBvYmoua2V5SWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY0xpZmVjeWNsZVJ1bGVzRmlsdGVyQW5kVGFnc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3Mge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmRUYWdzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3MnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNMaWZlY3ljbGVSdWxlc0ZpbHRlckFuZFRhZ3Mob2JqOiBCdWNrZXRTcGVjTGlmZWN5Y2xlUnVsZXNGaWx0ZXJBbmRUYWdzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAna2V5Jzogb2JqLmtleSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBBbWF6b24gUzMgb2JqZWN0IGtleSBuYW1lIHRvIGZpbHRlciBvbiBhbmQgd2hldGhlciB0byBmaWx0ZXIgb24gdGhlIHN1ZmZpeCBvciBwcmVmaXggb2YgdGhlIGtleSBuYW1lLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uTGFtYmRhRnVuY3Rpb25Db25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY05vdGlmaWNhdGlvbkxhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyhvYmo6IEJ1Y2tldFNwZWNOb3RpZmljYXRpb25MYW1iZGFGdW5jdGlvbkNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICduYW1lJzogb2JqLm5hbWUsXG4gICAgJ3ZhbHVlJzogb2JqLnZhbHVlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgQW1hem9uIFMzIG9iamVjdCBrZXkgbmFtZSB0byBmaWx0ZXIgb24gYW5kIHdoZXRoZXIgdG8gZmlsdGVyIG9uIHRoZSBzdWZmaXggb3IgcHJlZml4IG9mIHRoZSBrZXkgbmFtZS5cbiAqXG4gKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY05vdGlmaWNhdGlvblF1ZXVlQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyNuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMjdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNOb3RpZmljYXRpb25RdWV1ZUNvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMob2JqOiBCdWNrZXRTcGVjTm90aWZpY2F0aW9uUXVldWVDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIEFtYXpvbiBTMyBvYmplY3Qga2V5IG5hbWUgdG8gZmlsdGVyIG9uIGFuZCB3aGV0aGVyIHRvIGZpbHRlciBvbiB0aGUgc3VmZml4IG9yIHByZWZpeCBvZiB0aGUga2V5IG5hbWUuXG4gKlxuICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNOb3RpZmljYXRpb25Ub3BpY0NvbmZpZ3VyYXRpb25zRmlsdGVyS2V5RmlsdGVyUnVsZXMjbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzI3ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjTm90aWZpY2F0aW9uVG9waWNDb25maWd1cmF0aW9uc0ZpbHRlcktleUZpbHRlclJ1bGVzKG9iajogQnVja2V0U3BlY05vdGlmaWNhdGlvblRvcGljQ29uZmlndXJhdGlvbnNGaWx0ZXJLZXlGaWx0ZXJSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAndmFsdWUnOiBvYmoudmFsdWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB2YWx1ZSBmb3IgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpIGFuZCByZXBsaWNhdGlvbiBtZXRyaWNzIEV2ZW50VGhyZXNob2xkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQge1xuICAvKipcbiAgICogQHNjaGVtYSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uTWV0cmljc0V2ZW50VGhyZXNob2xkI21pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbnV0ZXM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvbk1ldHJpY3NFdmVudFRocmVzaG9sZChvYmo6IEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25NZXRyaWNzRXZlbnRUaHJlc2hvbGQgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtaW51dGVzJzogb2JqLm1pbnV0ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgc3BlY2lmeWluZyB0aGUgdGltZSB2YWx1ZSBmb3IgUzMgUmVwbGljYXRpb24gVGltZSBDb250cm9sIChTMyBSVEMpIGFuZCByZXBsaWNhdGlvbiBtZXRyaWNzIEV2ZW50VGhyZXNob2xkLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0Rlc3RpbmF0aW9uUmVwbGljYXRpb25UaW1lVGltZSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWVUaW1lI21pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG1pbnV0ZXM/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRGVzdGluYXRpb25SZXBsaWNhdGlvblRpbWVUaW1lKG9iajogQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNEZXN0aW5hdGlvblJlcGxpY2F0aW9uVGltZVRpbWUgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtaW51dGVzJzogb2JqLm1pbnV0ZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBjb250YWluZXIgb2YgYSBrZXkgdmFsdWUgbmFtZSBwYWlyLlxuICpcbiAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzI2tleVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEJ1Y2tldFNwZWNSZXBsaWNhdGlvblJ1bGVzRmlsdGVyQW5kVGFncyN2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQnVja2V0U3BlY1JlcGxpY2F0aW9uUnVsZXNGaWx0ZXJBbmRUYWdzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3Mob2JqOiBCdWNrZXRTcGVjUmVwbGljYXRpb25SdWxlc0ZpbHRlckFuZFRhZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdrZXknOiBvYmoua2V5LFxuICAgICd2YWx1ZSc6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuIl19
|