@rentman/rm-core 1.1.10-4 → 1.1.11
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/changelog.md +186 -179
- package/dist/dist/classes/ApiFormatter.d.ts +1 -1
- package/dist/dist/classes/ColumnHandler.d.ts +2 -5
- package/dist/dist/classes/ItemResourceService.d.ts +0 -2
- package/dist/dist/interfaces/PromiseInterface.d.ts +3 -6
- package/dist/dist/models/CollectionEditResource.d.ts +4 -3
- package/dist/dist/models/CollectionEntry.d.ts +5 -7
- package/dist/dist/models/EditResource.d.ts +3 -2
- package/dist/dist/models/ItemResource.d.ts +1 -1
- package/dist/rm-core.js +62 -70
- package/dist/rm-core.min.js +1 -1
- package/package.json +35 -35
package/dist/rm-core.js
CHANGED
|
@@ -2390,8 +2390,10 @@ var ColumnHandler = /** @class */ (function () {
|
|
|
2390
2390
|
return this.promiseService.all(promises)
|
|
2391
2391
|
.then(function (response) {
|
|
2392
2392
|
var result = {};
|
|
2393
|
-
for (var
|
|
2393
|
+
for (var _i = 0, response_1 = response; _i < response_1.length; _i++) {
|
|
2394
|
+
var itemType = response_1[_i];
|
|
2394
2395
|
result[itemType] = response[itemType][itemType].id.name;
|
|
2396
|
+
}
|
|
2395
2397
|
return result;
|
|
2396
2398
|
}, this.errorHandler.reject);
|
|
2397
2399
|
};
|
|
@@ -3220,6 +3222,7 @@ var CreateRequest_CreateRequest = /** @class */ (function () {
|
|
|
3220
3222
|
|
|
3221
3223
|
// CONCATENATED MODULE: ./src/models/CollectionEntry.ts
|
|
3222
3224
|
|
|
3225
|
+
|
|
3223
3226
|
var CollectionEntry_currentId = 0;
|
|
3224
3227
|
var CollectionEntry_CollectionEntry = /** @class */ (function () {
|
|
3225
3228
|
function CollectionEntry(collectionEntryFactory, collectionEntryService, columnSetFactory, errorHandler, itemEntryService, itemRequestService, keyService, promiseService, queryService, itemType, options) {
|
|
@@ -3296,27 +3299,19 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
|
|
|
3296
3299
|
if (accumulator === void 0) { accumulator = []; }
|
|
3297
3300
|
return this.collectionEntryService.getIdArray(this.items, accumulator);
|
|
3298
3301
|
};
|
|
3299
|
-
// this doesn't revert updates
|
|
3300
|
-
CollectionEntry.prototype.revertChanges = function () {
|
|
3301
|
-
// save these before resetting the items property
|
|
3302
|
-
var addedItems = this.getAddedItems();
|
|
3303
|
-
var removedItems = this.getRemovedItems();
|
|
3304
|
-
this.items = this.initial.slice();
|
|
3305
|
-
this.handleAddedItemCallbacks([], removedItems);
|
|
3306
|
-
this.handleRemovedItemCallbacks([], addedItems);
|
|
3307
|
-
};
|
|
3308
3302
|
CollectionEntry.prototype.addItems = function (itemEntries, resultResource, updateInitial, callOnAdd, callOnActivate) {
|
|
3309
3303
|
if (updateInitial === void 0) { updateInitial = false; }
|
|
3304
|
+
if (callOnAdd === void 0) { callOnAdd = true; }
|
|
3305
|
+
if (callOnActivate === void 0) { callOnActivate = true; }
|
|
3310
3306
|
// local entry might be added multiple times (extend?)
|
|
3311
3307
|
if (itemEntries.length === 0)
|
|
3312
3308
|
return [];
|
|
3313
|
-
var
|
|
3309
|
+
var collectionResources = this.resources;
|
|
3314
3310
|
var parent = this.parent;
|
|
3315
3311
|
var parentColumn = this.columns.link;
|
|
3316
|
-
var entriesAddedToInitial = [];
|
|
3317
|
-
var entriesAddedToModified = [];
|
|
3318
3312
|
if (updateInitial) {
|
|
3319
3313
|
var initial = this.initial;
|
|
3314
|
+
var entriesAddedToInitial = [];
|
|
3320
3315
|
for (var _i = 0, itemEntries_1 = itemEntries; _i < itemEntries_1.length; _i++) {
|
|
3321
3316
|
var itemEntry = itemEntries_1[_i];
|
|
3322
3317
|
// when saving, items that might already be in modified are added to initial
|
|
@@ -3325,9 +3320,20 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
|
|
|
3325
3320
|
entriesAddedToInitial.push(itemEntry);
|
|
3326
3321
|
}
|
|
3327
3322
|
}
|
|
3323
|
+
if (entriesAddedToInitial.length > 0) {
|
|
3324
|
+
for (var _a = 0, collectionResources_1 = collectionResources; _a < collectionResources_1.length; _a++) {
|
|
3325
|
+
var collectionResource = collectionResources_1[_a];
|
|
3326
|
+
collectionResource.options.onAddInitial(entriesAddedToInitial, this);
|
|
3327
|
+
}
|
|
3328
|
+
}
|
|
3328
3329
|
}
|
|
3329
|
-
|
|
3330
|
-
|
|
3330
|
+
var modified = this.items;
|
|
3331
|
+
var entriesAddedToModified = [];
|
|
3332
|
+
var onActivateItem = callOnActivate && collectionResources.length > 0 ?
|
|
3333
|
+
collectionResources[0].options.onActivateItem :
|
|
3334
|
+
noop;
|
|
3335
|
+
for (var _b = 0, itemEntries_2 = itemEntries; _b < itemEntries_2.length; _b++) {
|
|
3336
|
+
var itemEntry = itemEntries_2[_b];
|
|
3331
3337
|
if (modified.indexOf(itemEntry) === -1) {
|
|
3332
3338
|
if (parent !== null) {
|
|
3333
3339
|
itemEntry.parent = parent;
|
|
@@ -3336,43 +3342,26 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
|
|
|
3336
3342
|
}
|
|
3337
3343
|
modified.push(itemEntry);
|
|
3338
3344
|
entriesAddedToModified.push(itemEntry);
|
|
3345
|
+
onActivateItem(itemEntry);
|
|
3339
3346
|
}
|
|
3340
3347
|
}
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
}
|
|
3353
|
-
}
|
|
3354
|
-
if (entriesAddedToModified.length === 0)
|
|
3355
|
-
return resultResource === null ? null : [];
|
|
3356
|
-
if (callOnActivate && collectionResources.length > 0) {
|
|
3357
|
-
var onActivateItem = collectionResources[0].options.onActivateItem;
|
|
3358
|
-
for (var _a = 0, entriesAddedToModified_1 = entriesAddedToModified; _a < entriesAddedToModified_1.length; _a++) {
|
|
3359
|
-
var addedItemEntry = entriesAddedToModified_1[_a];
|
|
3360
|
-
onActivateItem(addedItemEntry);
|
|
3361
|
-
}
|
|
3362
|
-
}
|
|
3363
|
-
var result = null;
|
|
3364
|
-
for (var _b = 0, collectionResources_2 = collectionResources; _b < collectionResources_2.length; _b++) {
|
|
3365
|
-
var collectionResource = collectionResources_2[_b];
|
|
3366
|
-
var addedResources = collectionResource.addItemResources(entriesAddedToModified);
|
|
3367
|
-
if (collectionResource === resultResource) {
|
|
3368
|
-
result = addedResources;
|
|
3369
|
-
if (callOnAdd)
|
|
3348
|
+
if (entriesAddedToModified.length > 0) {
|
|
3349
|
+
var result = void 0;
|
|
3350
|
+
for (var _c = 0, collectionResources_2 = collectionResources; _c < collectionResources_2.length; _c++) {
|
|
3351
|
+
var collectionResource = collectionResources_2[_c];
|
|
3352
|
+
var addedResources = collectionResource.addItemResources(entriesAddedToModified);
|
|
3353
|
+
if (collectionResource === resultResource) {
|
|
3354
|
+
result = addedResources;
|
|
3355
|
+
if (callOnAdd)
|
|
3356
|
+
collectionResource.callOnAdd(addedResources);
|
|
3357
|
+
}
|
|
3358
|
+
else
|
|
3370
3359
|
collectionResource.callOnAdd(addedResources);
|
|
3371
3360
|
}
|
|
3372
|
-
|
|
3373
|
-
collectionResource.callOnAdd(addedResources);
|
|
3361
|
+
return result;
|
|
3374
3362
|
}
|
|
3375
|
-
|
|
3363
|
+
else
|
|
3364
|
+
return resultResource === null ? null : [];
|
|
3376
3365
|
};
|
|
3377
3366
|
CollectionEntry.prototype.removeItems = function (idArray, resultResource, updateInitial, enableCallback) {
|
|
3378
3367
|
if (idArray.length === 0)
|
|
@@ -3387,15 +3376,10 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
|
|
|
3387
3376
|
}, resultResource, updateInitial, enableCallback);
|
|
3388
3377
|
};
|
|
3389
3378
|
CollectionEntry.prototype.handleRemovedItems = function (filterFunction, resultResource, updateInitial, enableCallback) {
|
|
3390
|
-
if (
|
|
3379
|
+
if (enableCallback === void 0) { enableCallback = true; }
|
|
3380
|
+
var collectionResources = this.resources;
|
|
3391
3381
|
var removedFromModified = this.collectionEntryService.filterArray(this.items, filterFunction);
|
|
3392
3382
|
var removedFromInitial = updateInitial ? this.collectionEntryService.filterArray(this.initial, filterFunction) : [];
|
|
3393
|
-
return this.handleRemovedItemCallbacks(removedFromInitial, removedFromModified, resultResource, enableCallback);
|
|
3394
|
-
};
|
|
3395
|
-
CollectionEntry.prototype.handleRemovedItemCallbacks = function (removedFromInitial, removedFromModified, resultResource, callOnRemove) {
|
|
3396
|
-
if (resultResource === void 0) { resultResource = null; }
|
|
3397
|
-
if (callOnRemove === void 0) { callOnRemove = true; }
|
|
3398
|
-
var collectionResources = this.resources;
|
|
3399
3383
|
if (removedFromInitial.length > 0) {
|
|
3400
3384
|
for (var _i = 0, collectionResources_3 = collectionResources; _i < collectionResources_3.length; _i++) {
|
|
3401
3385
|
var collectionResource = collectionResources_3[_i];
|
|
@@ -3414,7 +3398,7 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
|
|
|
3414
3398
|
var removedResources = collectionResource.removeItemResources(removedFromModified);
|
|
3415
3399
|
if (collectionResource === resultResource) {
|
|
3416
3400
|
result = removedResources;
|
|
3417
|
-
if (
|
|
3401
|
+
if (enableCallback)
|
|
3418
3402
|
collectionResource.callOnRemove(removedResources);
|
|
3419
3403
|
}
|
|
3420
3404
|
else
|
|
@@ -3558,10 +3542,22 @@ var CollectionEntry_CollectionEntry = /** @class */ (function () {
|
|
|
3558
3542
|
}
|
|
3559
3543
|
this.resources = newResources;
|
|
3560
3544
|
};
|
|
3561
|
-
|
|
3545
|
+
// this doesn't revert updates
|
|
3546
|
+
CollectionEntry.prototype.revertChanges = function () {
|
|
3562
3547
|
var resources = this.resources;
|
|
3548
|
+
var removedItems = this.getRemovedItems();
|
|
3549
|
+
var addedItems = this.getAddedItems();
|
|
3563
3550
|
for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {
|
|
3564
3551
|
var resource = resources_1[_i];
|
|
3552
|
+
resource.addItemResources(removedItems);
|
|
3553
|
+
resource.removeItemResources(addedItems);
|
|
3554
|
+
}
|
|
3555
|
+
this.items = this.initial.slice();
|
|
3556
|
+
};
|
|
3557
|
+
CollectionEntry.prototype.onItemsCreated = function (conversionMap) {
|
|
3558
|
+
var resources = this.resources;
|
|
3559
|
+
for (var _i = 0, resources_2 = resources; _i < resources_2.length; _i++) {
|
|
3560
|
+
var resource = resources_2[_i];
|
|
3565
3561
|
resource.rebuildMap();
|
|
3566
3562
|
resource.options.onItemsCreated(conversionMap);
|
|
3567
3563
|
}
|
|
@@ -4244,9 +4240,8 @@ var ItemResource = /** @class */ (function () {
|
|
|
4244
4240
|
this.columns = entry.columns.response[entry.columns.itemType];
|
|
4245
4241
|
entry.resources.push(this);
|
|
4246
4242
|
}
|
|
4247
|
-
ItemResource.prototype.
|
|
4248
|
-
return
|
|
4249
|
-
resource.transactions === undefined;
|
|
4243
|
+
ItemResource.prototype.isNew = function () {
|
|
4244
|
+
return this.entry.isLocal();
|
|
4250
4245
|
};
|
|
4251
4246
|
ItemResource.prototype.isLocal = function () {
|
|
4252
4247
|
return this.entry.isLocal();
|
|
@@ -4315,16 +4310,18 @@ var EditResource_EditResource = /** @class */ (function (_super) {
|
|
|
4315
4310
|
_this.fields = entry.modified;
|
|
4316
4311
|
return _this;
|
|
4317
4312
|
}
|
|
4313
|
+
EditResource.prototype.isNew = function () {
|
|
4314
|
+
return this.entry.isLocal() && this.transactions === undefined;
|
|
4315
|
+
};
|
|
4318
4316
|
EditResource.prototype.start = function () {
|
|
4319
4317
|
if (this.localCopies === undefined)
|
|
4320
4318
|
this.localCopies = [];
|
|
4321
4319
|
this.localCopies.push(this.copyFields());
|
|
4322
4320
|
};
|
|
4323
|
-
EditResource.prototype.rollback = function (
|
|
4324
|
-
if (callOnDeactivate === void 0) { callOnDeactivate = false; }
|
|
4321
|
+
EditResource.prototype.rollback = function () {
|
|
4325
4322
|
var itemEntry = this.entry;
|
|
4326
4323
|
this.apiFormatter.copyFields(this.localCopies.pop(), itemEntry.modified, itemEntry.columns.main);
|
|
4327
|
-
if (
|
|
4324
|
+
if (this.isNew() && this.localCopies.length === 0)
|
|
4328
4325
|
this.deactivate();
|
|
4329
4326
|
};
|
|
4330
4327
|
EditResource.prototype.commit = function (initial) {
|
|
@@ -5428,10 +5425,6 @@ var ItemResourceService_ItemResourceService = /** @class */ (function () {
|
|
|
5428
5425
|
}
|
|
5429
5426
|
return true;
|
|
5430
5427
|
};
|
|
5431
|
-
ItemResourceService.prototype.isNewResource = function (resource) {
|
|
5432
|
-
return resource.isLocal() &&
|
|
5433
|
-
resource.transactions === undefined;
|
|
5434
|
-
};
|
|
5435
5428
|
return ItemResourceService;
|
|
5436
5429
|
}());
|
|
5437
5430
|
|
|
@@ -5619,10 +5612,9 @@ var LocalCache_LocalCache = /** @class */ (function () {
|
|
|
5619
5612
|
var _this = this;
|
|
5620
5613
|
if (closeTab === void 0) { closeTab = false; }
|
|
5621
5614
|
if (parameters === void 0) { parameters = {}; }
|
|
5622
|
-
this.detectChanges();
|
|
5623
5615
|
this.disableChangesWatcher();
|
|
5624
5616
|
return (this.isLockable() ? this.lockService.fetchLock(this.rootItem) : this.promiseService.when()).then(function () {
|
|
5625
|
-
return _this.executeCallbacks('onBeforeSave', closeTab
|
|
5617
|
+
return _this.executeCallbacks('onBeforeSave', closeTab);
|
|
5626
5618
|
}, this.errorHandler.reject).then(function () {
|
|
5627
5619
|
var requestParameters = extend({}, _this.tabRequestParameters, parameters);
|
|
5628
5620
|
_this.tabRequestParameters = {};
|
|
@@ -6855,7 +6847,7 @@ var RequestColumnExpansionFactory_RequestColumnExpansionFactory = /** @class */
|
|
|
6855
6847
|
var main_RmCore = /** @class */ (function () {
|
|
6856
6848
|
function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseInterface) {
|
|
6857
6849
|
this.noop = noop;
|
|
6858
|
-
this.version = '1.1.
|
|
6850
|
+
this.version = '1.1.11';
|
|
6859
6851
|
this.apiFormatter = new ApiFormatter_ApiFormatter();
|
|
6860
6852
|
this.keyService = new KeyService_KeyService();
|
|
6861
6853
|
this.queryService = new QueryService();
|
|
@@ -7011,4 +7003,4 @@ function identity(value) {
|
|
|
7011
7003
|
/***/ })
|
|
7012
7004
|
/******/ ]);
|
|
7013
7005
|
});
|
|
7014
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7OztBQ2xGQSxnRDs7Ozs7Ozs7Ozs7OztBQ0FNLHNCQUF3QixNQUFNLEVBQUUsUUFBUTtJQUM3QyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFakIsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLEdBQUcsQ0FBQyxDQUFDLElBQU0sR0FB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QUMzQixJQUFJLENBQUMsNkJBQTZCLEVBQ2xDLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHFCQUFxQixDQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDOztBQUVLO0FBQ04sQ0FBQztBQUVLLGtCQUFvQixLQUFLO0lBQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcFNzQjtBQUNLO0FBQ0g7QUFFQztBQUNFIiwiZmlsZSI6InJtLWNvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wibW9tZW50XCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJtQ29yZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUm1Db3JlXCJdID0gZmFjdG9yeShyb290W1wibW9tZW50XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fMF9fKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX187IiwiZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dNZXJnZSAob2JqZWN0LCBkZWZhdWx0cykge1xyXG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcclxuXHRcdHJldHVybiBkZWZhdWx0cztcclxuXHJcblx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRzKSB7XHJcblx0XHRyZXN1bHRba2V5XSA9IG9iamVjdFtrZXldID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRkZWZhdWx0c1trZXldIDogb2JqZWN0W2tleV07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJvcGVydGllcyAob2JqZWN0KSB7XHJcblx0Ly8gQHRzLWlnbm9yZVxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJzdFByb3BlcnR5IChvYmplY3QpIHtcclxuXHRpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIGtleTtcclxuXHJcblx0cmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbkFycmF5IChuZWVkbGUsIGhheXN0YWNrKSB7XHJcblx0Zm9yIChjb25zdCBoYXkgb2YgaGF5c3RhY2spIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRpZiAobmVlZGxlID09IGhheSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPiAoc291cmNlOiBUW10sIGNhbGxiYWNrOiAoVCkgPT4gYm9vbGVhbikge1xyXG5cdGNvbnN0IGZpbHRlcmVkOiBUW10gPSBbXTtcclxuXHJcblx0Zm9yIChjb25zdCBzcmMgb2Ygc291cmNlKSB7XHJcblx0XHRpZiAoY2FsbGJhY2soc3JjKSlcclxuXHRcdFx0ZmlsdGVyZWQucHVzaChzcmMpO1xyXG5cdH1cclxuXHJcblx0aWYgKGZpbHRlcmVkLmxlbmd0aCA9PT0gc291cmNlLmxlbmd0aClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0ZW1wdHlBcnJheShzb3VyY2UpO1xyXG5cclxuXHRmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJlZClcclxuXHRcdHNvdXJjZS5wdXNoKGZpbHRlcik7XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBcnJheSAoYXJyYXkpIHtcclxuXHRhcnJheS5zcGxpY2UoMCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXRoRXhpc3RzIChzb3VyY2UsIHBhdGgpIHtcclxuXHRpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XHJcblx0XHRpZiAodHlwZW9mIHNvdXJjZVtwXSA9PT0gJ3VuZGVmaW5lZCcpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzb3VyY2UgPSBzb3VyY2VbcF07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGggKG9iamVjdCwgcGF0aCwgZGVmYXVsdHMpIHtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcclxuXHRcdGNvbnN0IHZhbHVlID0gcGF0aFtpXTtcclxuXHJcblx0XHRpZiAob2JqZWN0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvYmplY3RbdmFsdWVdID0gZGVmYXVsdHNbaV07XHJcblxyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3ZhbHVlXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoIChvYmplY3QsIHBhdGgsIGNyZWF0ZSA9IGZhbHNlKSB7XHJcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcclxuXHRcdG9iamVjdCA9IG9iamVjdFtwXTsgLy8gd29uJ3QgYWx0ZXIgdGhlIGNhbGxlcidzIHZhclxyXG5cclxuXHRcdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZCAmJiAhY3JlYXRlKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuLy8gVGFrZW4gZnJvbSBBbmd1bGFySlMsIGFkZGVkIGNvbW1lbnRzIHRvIGlnbm9yZSBUeXBlU2NyaXB0IGVycm9yc1xyXG5mdW5jdGlvbiBiYXNlRXh0ZW5kIChkc3QsIG9ianMsIGRlZXApIHtcclxuXHRmb3IgKGxldCBpID0gMCwgaWkgPSBvYmpzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcclxuXHRcdGNvbnN0IG9iaiA9IG9ianNbaV07XHJcblxyXG5cdFx0aWYgKCFpc09iamVjdChvYmopICYmICFpc0Z1bmN0aW9uKG9iaikpXHJcblx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG5cclxuXHRcdGZvciAobGV0IGogPSAwLCBqaiA9IGtleXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2pdO1xyXG5cdFx0XHRjb25zdCBzcmMgPSBvYmpba2V5XTtcclxuXHJcblx0XHRcdGlmIChkZWVwICYmIGlzT2JqZWN0KHNyYykpIHtcclxuXHRcdFx0XHRpZiAoaXNEYXRlKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IERhdGUoc3JjLnZhbHVlT2YoKSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBSZWdFeHAoc3JjKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHNyYy5ub2RlTmFtZSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmVOb2RlKHRydWUpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNFbGVtZW50KHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmICghaXNPYmplY3QoZHN0W2tleV0pKVxyXG5cdFx0XHRcdFx0XHRkc3Rba2V5XSA9IGlzQXJyYXkoc3JjKSA/IFtdIDoge307XHJcblxyXG5cdFx0XHRcdFx0YmFzZUV4dGVuZChkc3Rba2V5XSwgW3NyY10sIHRydWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkc3Rba2V5XSA9IHNyYztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGRzdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZCAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCBmYWxzZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSAoZHN0LCAuLi5hcmdzKSB7XHJcblx0cmV0dXJuIGJhc2VFeHRlbmQoZHN0LCBhcmdzLCB0cnVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0ICh2YWx1ZSkge1xyXG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL2lzb2JqZWN0NFxyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCbGFua09iamVjdCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBEYXRlXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ0V4cCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRWxlbWVudCAobm9kZSkge1xyXG5cdHJldHVybiAhIShub2RlICYmXHJcblx0XHQoXHJcblx0XHRcdG5vZGUubm9kZU5hbWUgIC8vIFdlIGFyZSBhIGRpcmVjdCBlbGVtZW50LlxyXG5cdFx0XHR8fCAobm9kZS5wcm9wICYmIG5vZGUuYXR0ciAmJiBub2RlLmZpbmQpXHJcblx0XHQpXHJcblx0KTsgIC8vIFdlIGhhdmUgYW4gb24gYW5kIGZpbmQgbWV0aG9kIHBhcnQgb2YgalF1ZXJ5IEFQSS5cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2luZG93IChvYmopIHtcclxuXHRyZXR1cm4gb2JqICYmIG9iai53aW5kb3cgPT09IG9iajtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyAobzEsIG8yKSB7XHJcblx0aWYgKG8xID09PSBvMilcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRpZiAobzEgPT09IG51bGwgfHwgbzIgPT09IG51bGwpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcclxuXHRpZiAobzEgIT09IG8xICYmIG8yICE9PSBvMilcclxuXHRcdHJldHVybiB0cnVlOyAvLyBOYU4gPT09IE5hTlxyXG5cclxuXHRjb25zdCB0MSA9IHR5cGVvZiBvMTtcclxuXHRjb25zdCB0MiA9IHR5cGVvZiBvMjtcclxuXHJcblx0bGV0IGxlbmd0aDtcclxuXHRsZXQga2V5O1xyXG5cdGxldCBrZXlTZXQ7XHJcblxyXG5cdGlmICh0MSA9PT0gdDIgJiYgdDEgPT09ICdvYmplY3QnKSB7XHJcblx0XHRpZiAoaXNBcnJheShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0FycmF5KG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRsZW5ndGggPSBvMS5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAobzEubGVuZ3RoID09PSBvMi5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGtleSA9IDA7IGtleSA8IGxlbmd0aDsga2V5KyspIHtcclxuXHRcdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0RhdGUobzEpKSB7XHJcblx0XHRcdGlmICghaXNEYXRlKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gc2ltcGxlQ29tcGFyZShvMS5nZXRUaW1lKCksIG8yLmdldFRpbWUoKSk7XHJcblx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzUmVnRXhwKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gbzEudG9TdHJpbmcoKSA9PT0gbzIudG9TdHJpbmcoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChpc1dpbmRvdyhvMSkgfHwgaXNXaW5kb3cobzIpIHx8IGlzQXJyYXkobzIpIHx8IGlzRGF0ZShvMikgfHwgaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGtleVNldCA9IGNyZWF0ZU1hcCgpO1xyXG5cdFx0XHRmb3IgKGtleSBpbiBvMSkge1xyXG5cdFx0XHRcdGlmIChpc0Z1bmN0aW9uKG8xW2tleV0pKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICghZXF1YWxzKG8xW2tleV0sIG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0XHRrZXlTZXRba2V5XSA9IHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGZvciAoa2V5IGluIG8yKSB7XHJcblx0XHRcdFx0aWYgKCEoa2V5IGluIGtleVNldCkgJiYgaXNEZWZpbmVkKG8yW2tleV0pICYmICFpc0Z1bmN0aW9uKG8yW2tleV0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlTWFwICgpIHtcclxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxufVxyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5mdW5jdGlvbiBzaW1wbGVDb21wYXJlIChhLCBiKSB7XHJcblx0cmV0dXJuIGEgPT09IGIgfHwgKGEgIT09IGEgJiYgYiAhPT0gYik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRPYmplY3RNYXhEZXB0aCAobWF4RGVwdGgpIHtcclxuXHRyZXR1cm4gaXNOdW1iZXIobWF4RGVwdGgpICYmIG1heERlcHRoID4gMDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHNvdXJjZSwgZGVzdGluYXRpb24/LCBtYXhEZXB0aD8pIHtcclxuXHRjb25zdCBzdGFja1NvdXJjZSA9IFtdO1xyXG5cdGNvbnN0IHN0YWNrRGVzdCA9IFtdO1xyXG5cclxuXHRtYXhEZXB0aCA9IGlzVmFsaWRPYmplY3RNYXhEZXB0aChtYXhEZXB0aCkgPyBtYXhEZXB0aCA6IE5hTjtcclxuXHJcblx0aWYgKGRlc3RpbmF0aW9uKSB7XHJcblx0XHRpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgU291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgaWRlbnRpY2FsLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEVtcHR5IHRoZSBkZXN0aW5hdGlvbiBvYmplY3RcclxuXHRcdGlmIChpc0FycmF5KGRlc3RpbmF0aW9uKSkge1xyXG5cdFx0XHRkZXN0aW5hdGlvbi5sZW5ndGggPSAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gZGVzdGluYXRpb24pXHJcblx0XHRcdFx0ZGVsZXRlIGRlc3RpbmF0aW9uW2tleV07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChzb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdHJldHVybiBjb3B5UmVjdXJzZShzb3VyY2UsIGRlc3RpbmF0aW9uLCBtYXhEZXB0aCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gY29weUVsZW1lbnQoc291cmNlLCBtYXhEZXB0aCk7XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlSZWN1cnNlIChfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aCkge1xyXG5cdFx0X21heERlcHRoLS07XHJcblxyXG5cdFx0aWYgKF9tYXhEZXB0aCA8IDApXHJcblx0XHRcdHJldHVybiAnLi4uJztcclxuXHJcblx0XHRpZiAoaXNBcnJheShfc291cmNlKSkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaWkgPSBfc291cmNlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb24ucHVzaChjb3B5RWxlbWVudChfc291cmNlW2ldLCBfbWF4RGVwdGgpKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChpc0JsYW5rT2JqZWN0KF9zb3VyY2UpKSB7XHJcblx0XHRcdC8vIGNyZWF0ZU1hcCgpIGZhc3QgcGF0aCAtLS0gU2FmZSB0byBhdm9pZCBoYXNPd25Qcm9wZXJ0eSBjaGVjayBiZWNhdXNlIHByb3RvdHlwZSBjaGFpbiBpcyBlbXB0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoX3NvdXJjZSAmJiB0eXBlb2YgX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHQvLyBTbG93IHBhdGgsIHdoaWNoIG11c3QgcmVseSBvbiBoYXNPd25Qcm9wZXJ0eVxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKF9zb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBTbG93ZXN0IHBhdGggLS0tIGhhc093blByb3BlcnR5IGNhbid0IGJlIGNhbGxlZCBhcyBhIG1ldGhvZFxyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBfc291cmNlKSB7XHJcblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfc291cmNlLCBrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weUVsZW1lbnQgKF9zb3VyY2UsIF9tYXhEZXB0aCA9IDUpIHtcclxuXHRcdC8vIFNpbXBsZSB2YWx1ZXNcclxuXHRcdGlmICghaXNPYmplY3QoX3NvdXJjZSkpXHJcblx0XHRcdHJldHVybiBfc291cmNlO1xyXG5cclxuXHRcdC8vIEFscmVhZHkgY29waWVkIHZhbHVlc1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Y29uc3QgaW5kZXggPSBzdGFja1NvdXJjZS5pbmRleE9mKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJldHVybiBzdGFja0Rlc3RbaW5kZXhdO1xyXG5cclxuXHRcdGlmIChpc1dpbmRvdyhfc291cmNlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgY29weSEgTWFraW5nIGNvcGllcyBvZiBXaW5kb3cgaW5zdGFuY2VzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG5lZWRzUmVjdXJzZSA9IGZhbHNlO1xyXG5cdFx0bGV0IF9kZXN0aW5hdGlvbiA9IGNvcHlUeXBlKF9zb3VyY2UpO1xyXG5cclxuXHRcdGlmIChfZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRfZGVzdGluYXRpb24gPSBpc0FycmF5KF9zb3VyY2UpID8gW10gOiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihfc291cmNlKSk7XHJcblx0XHRcdG5lZWRzUmVjdXJzZSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tTb3VyY2UucHVzaChfc291cmNlKTtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrRGVzdC5wdXNoKF9kZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIG5lZWRzUmVjdXJzZVxyXG5cdFx0XHQ/IGNvcHlSZWN1cnNlKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKVxyXG5cdFx0XHQ6IF9kZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlUeXBlIChfc291cmNlKSB7XHJcblx0XHRzd2l0Y2ggKHRvU3RyaW5nLmNhbGwoX3NvdXJjZSkpIHtcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQxNkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDMyQXJyYXldJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoY29weUVsZW1lbnQoX3NvdXJjZS5idWZmZXIpLCBfc291cmNlLmJ5dGVPZmZzZXQsIF9zb3VyY2UubGVuZ3RoKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQXJyYXlCdWZmZXJdJzpcclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwXHJcblx0XHRcdFx0aWYgKCFfc291cmNlLnNsaWNlKSB7XHJcblx0XHRcdFx0XHQvLyBJZiB3ZSdyZSBpbiB0aGlzIGNhc2Ugd2Uga25vdyB0aGUgZW52aXJvbm1lbnQgc3VwcG9ydHMgQXJyYXlCdWZmZXJcclxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXHJcblx0XHRcdFx0XHRjb25zdCBjb3BpZWQgPSBuZXcgQXJyYXlCdWZmZXIoX3NvdXJjZS5ieXRlTGVuZ3RoKTtcclxuXHRcdFx0XHRcdG5ldyBVaW50OEFycmF5KGNvcGllZCkuc2V0KG5ldyBVaW50OEFycmF5KF9zb3VyY2UpKTtcclxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdHJldHVybiBjb3BpZWQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBfc291cmNlLnNsaWNlKDApO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCb29sZWFuXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgTnVtYmVyXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRGF0ZV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihfc291cmNlLnZhbHVlT2YoKSk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFJlZ0V4cF0nOlxyXG5cdFx0XHRcdGNvbnN0IHJlID0gbmV3IFJlZ0V4cChfc291cmNlLl9zb3VyY2UsIF9zb3VyY2UudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pO1xyXG5cclxuXHRcdFx0XHRyZS5sYXN0SW5kZXggPSBfc291cmNlLmxhc3RJbmRleDtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBCbG9iXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKFtfc291cmNlXSwge3R5cGU6IF9zb3VyY2UudHlwZX0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpc0Z1bmN0aW9uKF9zb3VyY2UuY2xvbmVOb2RlKSkge1xyXG5cdFx0XHRyZXR1cm4gX3NvdXJjZS5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgY29weSwgZXF1YWxzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlGb3JtYXR0ZXIge1xyXG5cdE1PTUVOVF9JTlZBTElEID0gJ0ludmFsaWQgZGF0ZSc7XHJcblx0U0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCA9ICdZWVlZLU1NLUREW1RdSEg6bW06c3NaJztcclxuXHRTRVJWRVJfVElNRV9GT1JNQVQgPSAnSEg6bW06c3MnO1xyXG5cdFNFUlZFUl9EQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcclxuXHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlIChmaWVsZHMsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0ZmllbGRzW2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW4ucGF0aF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVzcG9uc2UgKGN1cnJlbnQsIGV4cGFuZGVkLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGN1cnJlbnRbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZXhwYW5kZWRbY29sdW1uLnBhdGhdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3QgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5mb3JtYXRSZXF1ZXN0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBtb2RpZmllZFtjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2hhbmdlcyAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogb2JqZWN0W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSkge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRvbGRWYWx1ZTogaW5pdGlhbFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdG5ld1ZhbHVlOiBtb2RpZmllZFtjb2x1bW5JZF0sXHJcblx0XHRcdFx0XHRcdGNvbHVtbjogY29sdW1uLmFwaUNvbHVtblxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weUZpZWxkcyAoc291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBzb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNoYWxsb3dDb3B5RmllbGRzIChzaGFsbG93U291cmNlLCBkZWVwU291cmNlLCBkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uLnBhdGg7XHJcblxyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5QYXRoXSA9IHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0c2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSA6XHJcblx0XHRcdFx0dGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGRlZXBTb3VyY2VbY29sdW1uUGF0aF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdHNldERlZmF1bHRWYWx1ZXMgKGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbi5pZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGaWVsZHMgKGNvbHVtblR5cGUsIGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kID09PSB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVNb21lbnRPYmplY3RzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUR1cmF0aW9ucyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaWQnOiAvLyBpZCB0eXBlc1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT0gc2Vjb25kOyAvLyB1c2Ugbm9uLXN0cmljdCBjb21wYXJpc29uXHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Nvb3JkaW5hdGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVGbG9hdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcclxuXHRcdFx0Y2FzZSAnYm9vbCc6IC8vIGJvb2xlYW4gdHlwZXNcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzogLy8gc3RyaW5nIHR5cGVzXHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PT0gc2Vjb25kO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBlcXVhbHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRmxvYXRzIChhLCBiKSB7XHJcblx0XHRjb25zdCBhYnNBID0gTWF0aC5hYnMoYSk7XHJcblx0XHRjb25zdCBhYnNCID0gTWF0aC5hYnMoYik7XHJcblx0XHRjb25zdCBkaWZmID0gTWF0aC5hYnMoYSAtIGIpO1xyXG5cclxuXHRcdGNvbnN0IEVQU0lMT04gPSAxLjE5ZS0wNztcclxuXHJcblx0XHQvLyBzaG9ydGN1dCwgaGFuZGxlcyBpbmZpbml0aWVzXHJcblx0XHRpZiAoYSA9PT0gYikge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAoYSA9PT0gMCB8fCBiID09PSAwIHx8IGRpZmYgPCBOdW1iZXIuTUlOX1ZBTFVFKSB7XHJcblx0XHRcdC8vIGEgb3IgYiBpcyB6ZXJvIG9yIGJvdGggYXJlIGV4dHJlbWVseSBjbG9zZSB0byBpdFxyXG5cdFx0XHQvLyByZWxhdGl2ZSBlcnJvciBpcyBsZXNzIG1lYW5pbmdmdWwgaGVyZVxyXG5cdFx0XHRyZXR1cm4gZGlmZiA8IChFUFNJTE9OICogTnVtYmVyLk1JTl9WQUxVRSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyB1c2UgcmVsYXRpdmUgZXJyb3JcclxuXHRcdFx0cmV0dXJuIGRpZmYgLyBNYXRoLm1pbigoYWJzQSArIGFic0IpLCBOdW1iZXIuTUFYX1ZBTFVFKSA8IEVQU0lMT047XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjb21wYXJlTW9tZW50T2JqZWN0cyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0aWYgKCFmaXJzdC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiAhc2Vjb25kLmlzVmFsaWQoKTtcclxuXHJcblx0XHRpZiAoIXNlY29uZC5pc1ZhbGlkKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gZmlyc3QgSVMgdmFsaWRcclxuXHJcblx0XHRyZXR1cm4gZmlyc3QuaXNTYW1lKHNlY29uZCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRHVyYXRpb25zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRyZXR1cm4gZmlyc3QuYXNNaWxsaXNlY29uZHMoKSA9PT0gc2Vjb25kLmFzTWlsbGlzZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZVZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlQ29sb3IodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyA/IEpTT04ucGFyc2UodmFsdWUpIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlVGltZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REYXRlKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3RDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZURhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBtb21lbnQuaW52YWxpZCgpIDogbW9tZW50KHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlID09PSBudWxsID8gMCA6IHZhbHVlLCAnc2Vjb25kcycpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlIDogJyMnICsgdmFsdWU7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZVRpbWUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVUSU1FX0ZPUk1BVCkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdERhdGUgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUuZm9ybWF0KHRoaXMuU0VSVkVSX0RBVEVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RHVyYXRpb24gKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuYXNTZWNvbmRzKCk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0Q29sb3IgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0XHRyZXR1cm4gJzAnO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmludmFsaWQoKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oKTtcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gJyMwMDAwMDAnO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGVtYWlsXHJcblx0XHRcdC8vIFx0XHRcdFx0XHR1cmxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGh0bWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGpzb25cclxuXHRcdFx0Ly8gXHRcdFx0XHRcdGRhdGFcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZpZWxkcyhjb2x1bW5UeXBlLCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uVHlwZSkpO1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gY29weSh2YWx1ZSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q2xvbmVGdW5jdGlvbiAoY29sdW1uVHlwZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRGF0ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsb25lRHVyYXRpb24gKGR1cmF0aW9uKSB7XHJcblx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKGR1cmF0aW9uKTtcclxuXHR9XHJcblxyXG5cdGNsb25lRGF0ZSAoZGF0ZSkge1xyXG5cdFx0cmV0dXJuIGRhdGUuY2xvbmUoKTtcclxuXHR9XHJcblxyXG5cdGlkZW50aXR5IChpbnB1dCkge1xyXG5cdFx0cmV0dXJuIGlucHV0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHRlbXBsYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIHBhcmFtczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIHZhbHVlczogYW55LCBwYXJlbnRUeXBlPzogSXRlbVR5cGUsIHBhcmVudElkPzogSXRlbUlkKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoaXRlbVR5cGUsIGl0ZW1JZCwgdmFsdWVzLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZHM6IEl0ZW1JZFtdKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGl0ZW1JZHMpKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1zOiBvYmplY3QsIGNvbHVtbnM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0U2tlbGV0b24gKHBhcmFtczogYW55LCByZXF1ZXN0Q2FuY2VsZXI/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMsIHJlcXVlc3RDYW5jZWxlcikpO1xyXG5cdH1cclxuXHJcblx0bW92ZUl0ZW1zIChwYXJlbnRUeXBlOiBJdGVtVHlwZSwgcGFyZW50SWQ6IEl0ZW1JZCwgaXRlbXM6IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtcykpO1xyXG5cdH1cclxuXHJcblx0Y29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5zOiBvYmplY3QsIHBhcmFtcz86IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zKSk7XHJcblx0fVxyXG5cclxuXHRxdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeTogb2JqZWN0LCBjb2x1bW5zOiBvYmplY3QsIGxpbWl0Pzogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMsIGxpbWl0KSk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzUmVzcG9uc2UgKHJlcXVlc3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gcmVxdWVzdC50aGVuKHJlc3BvbnNlID0+IHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZSkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVR5cGVNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yIHtcclxuXHRjb2x1bW5zOiBJdGVtVHlwZU1hcDtcclxuXHRpdGVtczogSXRlbVR5cGVNYXA7XHJcblx0bGlua3M6IEl0ZW1UeXBlTWFwO1xyXG5cdGNhY2hlYWJsZTogYm9vbGVhbjtcclxuXHRtYXA6IGFueTtcclxuXHJcblx0Y29sdW1uSW5kZXhNYXA6IGFueSA9IHt9O1xyXG5cdGNvbHVtbk1hcDogYW55ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyByZXNwb25zZTogYW55XHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSByZXNwb25zZS5jb2x1bW5zO1xyXG5cdFx0dGhpcy5pdGVtcyA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0dGhpcy5saW5rcyA9IHJlc3BvbnNlLmxpbmtzO1xyXG5cdFx0dGhpcy5jYWNoZWFibGUgPSByZXNwb25zZS5jYWNoZWFibGU7XHJcblx0XHR0aGlzLm1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHJcblx0XHR0aGlzLmNyZWF0ZUNvbHVtbk1hcHMoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbHVtbk1hcHMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5UeXBlIGluIHRoaXMuY29sdW1ucykge1xyXG5cdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdID0ge307XHJcblx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tjb2x1bW5UeXBlXVtpXTtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkluZGV4TWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBpO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uTWFwW2NvbHVtblR5cGVdW2NvbHVtbi5pZF0gPSBjb2x1bW47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbklkKSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGFbdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdXTtcclxuXHR9XHJcblxyXG5cdGZldGNoRGVyaXZlZE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMuZmV0Y2hWYWx1ZShpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW4uaWQpLFxyXG5cdFx0XHRcdGNvbHVtbixcclxuXHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkVmFsdWVzICh2YWx1ZSwgY29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcclxuXHRcdFx0bGV0IGNoaWxkVmFsdWU7XHJcblxyXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gbnVsbDtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmdldERlZmF1bHRWYWx1ZShjaGlsZENvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IHRoaXMuZmV0Y2hWYWx1ZShjb2x1bW4uaXRlbVR5cGUsIHZhbHVlLCBjaGlsZENvbHVtbi5pZCk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSBjaGlsZFZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRDb2x1bW4uaXNMZWFmKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoY2hpbGRWYWx1ZSwgY2hpbGRDb2x1bW4sIGRlc3RpbmF0aW9uKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3M6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcblx0XHRpZiAodGhpcy5pdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRpZiAoaXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmRhdGE7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRyZXN1bHRbdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXVtpXS5pZF0gPSBkYXRhW2ldO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpbmNsdWRlTGlua3MpIHtcclxuXHRcdFx0Y29uc3QgbGlua3MgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdLmxpbmtzO1xyXG5cdFx0XHRyZXN1bHQuX19saW5rcyA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBsaW5rVHlwZSBpbiBsaW5rcylcclxuXHRcdFx0XHRyZXN1bHQuX19saW5rc1tsaW5rVHlwZV0gPVxyXG5cdFx0XHRcdFx0dGhpcy5mZXRjaE9iamVjdEFycmF5KGxpbmtUeXBlLCBpbmNsdWRlTGlua3MsIGxpbmtzW2xpbmtUeXBlXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0QXJyYXkgKGl0ZW1UeXBlLCBpbmNsdWRlTGlua3MsIGlkQXJyYXkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0gW107XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IG51bGwpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlkQXJyYXkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0aWRBcnJheSA9IHRoaXMubGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoT2JqZWN0TWFwIChpdGVtVHlwZSwgY29sdW1uSWQsIGluY2x1ZGVMaW5rcywgcmV0dXJuS2V5cykge1xyXG5cdFx0Y29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge307XHJcblx0XHRjb25zdCBrZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbY29sdW1uSW5kZXhdO1xyXG5cdFx0XHRrZXlzLnB1c2goa2V5KTtcclxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCwgaW5jbHVkZUxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmV0dXJuS2V5cylcclxuXHRcdFx0cmV0dXJuIHtyZXN1bHQ6IHJlc3VsdCwga2V5czoga2V5c307XHJcblx0XHRlbHNlXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaEZpZWxkTWFwIChpdGVtVHlwZSwgY29sdW1uSWQpIHtcclxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0W2lkXSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2luZGV4XTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5BcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogUmVzcG9uc2VDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgYXBpQ29sdW1uIG9mIHRoaXMuY29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJlc3VsdC5wdXNoKGFwaUNvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uT2JqZWN0IChpdGVtVHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uc09iamVjdCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXA7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVSZXNvdXJjZSAoaXRlbVR5cGUsIGlkKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRvYmplY3Q6IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkKSxcclxuXHRcdFx0bGlua3M6IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5saW5rc1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGhhc0l0ZW1zIChpdGVtVHlwZSkge1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xyXG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxyXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcclxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcclxuXHRQUk9NSVNFRF9FWFBBTkQgPSAncHJvbWlzZWQtZXhwYW5kJyxcclxuXHRSRVNPTFZFID0gJ3Jlc29sdmUnLFxyXG5cdExPQ0FMID0gJ2xvY2FsJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XHJcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xyXG4iLCJpbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5U3RhdHVzLCBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzIHtcclxuXHRlbnRyaWVzOiBJdGVtRW50cnlFbnRyeVN0YXR1c01hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4gLy8gdG9kbzogcHJvbWlzZSByZXR1cm4gdHlwZVxyXG5cdCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gRU5UUllfU1RBVFVTKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbRU5UUllfU1RBVFVTW3N0YXR1c11dID0gW107XHJcblx0fVxyXG5cclxuXHRhZGQgKGVudHJ5U3RhdHVzOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+KTogdm9pZCB7XHJcblx0XHRjb25zdCBzdGF0dXMgPSBlbnRyeVN0YXR1cy5zdGF0dXM7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tzdGF0dXNdID0gW107XHJcblxyXG5cdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10ucHVzaChlbnRyeVN0YXR1cy5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRoYXNFbnRyaWVzIChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10pOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGhhc1JlcXVlc3RzICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoRW50cnkgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdGNhbGxiYWNrKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldFByb21pc2VzICgpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBwcm9taXNlczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlBST01JU0VELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHByb21pc2VzLnB1c2godGhpcy5nZXRQcm9taXNlKGVudHJ5KSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RJZHMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRJdGVtSWQoZW50cnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QXJyYXkgKCk6IEl0ZW1FbnRyeVtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzRW50cmllcyA9IHRoaXMuZW50cmllc1tzdGF0dXNdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXNFbnRyeSBvZiBzdGF0dXNFbnRyaWVzKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHN0YXR1c0VudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdGNvbXBpbGF0aW9uID0ge1xyXG5cdFx0Y3JlYXRlOiB7fSxcclxuXHRcdGRlbGV0ZToge30sXHJcblx0XHR1cGRhdGU6IHt9LFxyXG5cdFx0bW92ZToge31cclxuXHR9O1xyXG5cclxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cclxuXHRwcml2YXRlIG1vdmVBcnJheTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRwcml2YXRlIGRlbGV0ZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXHJcblx0KSB7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc1NpbmdsZUl0ZW1zKCk7XHJcblx0XHR0aGlzLnByb2Nlc3NDb2xsZWN0aW9ucyhjb2xsZWN0aW9uRW50cmllcyk7XHJcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XHJcblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiAnVm9pZCcsIGl0ZW1JZDogMH07XHJcblx0fVxyXG5cclxuXHRhZGRNb3ZlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5tb3ZlQXJyYXkucHVzaChpdGVtRW50cnkpO1xyXG5cdH1cclxuXHJcblx0YWRkRGVsZXRlRW50cnkgKGl0ZW1FbnRyeSwgcGFyZW50SWQsIHBhcmVudFR5cGUpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuZGVsZXRlTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB7cGFyZW50SWQ6IHBhcmVudElkLCBpdGVtOiBpdGVtRW50cnksIHBhcmVudFR5cGU6IHBhcmVudFR5cGV9XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZFVwZGF0ZUVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdHRoaXMuY29tcGlsYXRpb24udXBkYXRlLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkQ3JlYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0bGV0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cGFyZW50ID0gdGhpcy5nZXREZWZhdWx0UGFyZW50KCk7XHJcblxyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwge30sIHt9LCBpdGVtRW50cnldXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cG9zdFByb2Nlc3MgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZGVsZXRlRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtRW50cnkuaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKGRlbGV0ZUVudHJ5ID09PSB1bmRlZmluZWQgfHwgZGVsZXRlRW50cnlbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcclxuXHRcdFx0XHR0aGlzLmNvbXBpbGF0aW9uLm1vdmUsXHJcblx0XHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBbXV1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRkZWxldGUgZGVsZXRlRW50cnlbaXRlbUlkXTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZGVsZXRlTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdW2l0ZW1JZF0uaXRlbTtcclxuXHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xyXG5cclxuXHRcdFx0XHRpZiAoZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0ZGVzdGluYXRpb25baXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5zaW5nbGVJdGVtcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcykge1xyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyBhZGQgdGhlIGNvbGxlY3Rpb24gcGFyZW50IGlkIHRvIHRoZSBkZWxldGUgZW50cnkgKGluIGNhc2UgdGhlIGl0ZW0gaGFzIGJlZW4gbW92ZWQpXHJcblx0XHRcdGxldCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcykge1xyXG5cdFx0XHRcdGxldCBhZGRlZEl0ZW1zO1xyXG5cdFx0XHRcdGxldCByZW1vdmVkSXRlbXM7XHJcblxyXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XHJcblx0XHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xyXG5cdFx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0QWRkZWRJdGVtcygpO1xyXG5cdFx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFJlbW92ZWRJdGVtcygpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW0gb2YgYWRkZWRJdGVtcykge1xyXG5cdFx0XHRcdFx0aWYgKGFkZGVkSXRlbS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoYWRkZWRJdGVtKTtcclxuXHRcdFx0XHRcdGVsc2VcclxuXHRcdFx0XHRcdFx0dGhpcy5hZGRNb3ZlRW50cnkoYWRkZWRJdGVtKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW0gb2YgcmVtb3ZlZEl0ZW1zKVxyXG5cdFx0XHRcdFx0dGhpcy5hZGREZWxldGVFbnRyeShyZW1vdmVkSXRlbSwgcGFyZW50Lml0ZW1JZCwgcGFyZW50Lml0ZW1UeXBlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbXMoKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVkSXRlbSBvZiB1cGRhdGVkSXRlbXMpXHJcblx0XHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KHVwZGF0ZWRJdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2x1bW5JbmZvLFxyXG5cdEl0ZW1IYW5kbGVyXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBFbnRyeVBhcmVudCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGlzIG9uY2UgdGhlIGRvY3VtZW50IGNyZWF0aW9uIGhhcyBiZWVuIHVwZGF0ZWRcclxuXHRnZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5IChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWxiZWRyYWcnOlxyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVycmVnZWwnOlxyXG5cdFx0XHRjYXNlICdNaW5mYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gMTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gMjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcclxuXHRcdGlmIChtYXAgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyAoXHJcblx0XHRjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcclxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXHJcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcclxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXHJcblx0KSB7XHJcblx0XHRjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb24uY3JlYXRlLFxyXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24uY29sbGVjdGlvbnMsXHJcblx0XHRcdHBhcmFtZXRlcnMsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxyXG5cdFx0KS5ydW4oKTtcclxuXHRcdGNvbnN0IHJlc3BvbnNlczogQXJyYXk8UHJvbWlzZTxhbnk+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cylcclxuXHRcdFx0cmVzcG9uc2VzLnB1c2godGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdChyZXF1ZXN0LCBjb252ZXJzaW9uTWFwKS50aGVuKG5vdGlmeSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXNwb25zZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cclxuXHRcdGZ1bmN0aW9uIG5vdGlmeSAocmVzdWx0KSB7XHJcblx0XHRcdGlmIChvbkFmdGVyQ3JlYXRlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2soY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdCAocmVxdWVzdFJlc291cmNlLCBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocmVxdWVzdFJlc291cmNlLnJlcXVlc3QpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnNbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBuZXdJdGVtSWQ7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoZmllbGRzKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHJcblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gcmVzcG9uc2VNYXBbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHByaW9yaXRpemVkSXRlbVR5cGVzOiBzdHJpbmdbXVtdID0gW1tdLCBbXSwgW11dO1xyXG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXHJcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGVzIG9mIHByaW9yaXRpemVkSXRlbVR5cGVzKSB7XHJcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXHJcblx0XHRcdFx0dGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycyksXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcclxuXHR9XHJcblxyXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdHMgKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdHJldHVybiAoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxyXG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0ge307XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcclxuXHJcblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxyXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xyXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyA9IGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChjb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmdldCgpLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1VwZGF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXREZXJpdmVkKHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSlcclxuXHRcdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMpXHJcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3NhcnlcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0pKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xyXG5cdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aWRBcnJheS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaWRBcnJheSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignRGVsZXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxyXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCBwYXJlbnRJZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHJcblx0XHRmdW5jdGlvbiBleGVjdXRlTW92ZVJlcXVlc3QgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxyXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gc2VsZi5nZXRNYXBWYWx1ZShwYXJlbnRUeXBlLCBwYXJlbnRJZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxyXG5cdFx0XHRcdHNlbGYuYXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxyXG5cdFx0XHRcdFx0c2VsZi5idWlsZE1vdmVSZXF1ZXN0KGNvbXBpbGF0aW9uRW50cmllcylcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHNlbGYucHJvY2Vzc01vdmVSZXNwb25zZSgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHQvLyBUT0RPOiBwcm9jZXNzIHJlc3BvbnNlXHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XHJcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcclxuXHJcblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxyXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFx0Y29tcGlsYXRpb25FbnRyeS5wYXJlbnRJZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHQoPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50KS5pdGVtSWQsXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24ocmVtb3ZlQ29sbGVjdGlvbk1hcCwgJ3JlbW92ZUl0ZW1zJyk7XHJcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnkgKGNvbGxlY3Rpb25NYXAsIHBhcmVudElkLCBpdGVtRW50cnksIHZhbHVlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5LnBhcmVudC5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXHJcblx0XHRcdFt7fSwge30sIFtdXVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdHRydWVcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB3aXRoIHRoZSBuZXcgaXRlbSBzdHJ1Y3R1cmUsICphbGwqIGxvY2FsIGl0ZW1zIGFyZSBpbiB0aGUgc2luZ2xlIGl0ZW0gY2FjaGVcclxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSkge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHRcdFx0Y29uc3QgdXBkYXRlZENvbHVtbnM6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm99ID1cclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIWhhc1Byb3BlcnRpZXModXBkYXRlZENvbHVtbnMpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHVwZGF0ZWRDb2x1bW5zLmlkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXBbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXSk7XHJcblxyXG5cdFx0XHQvLyB3aGVuIHVwZGF0aW5nIGFuIGl0ZW0gdG8gcmVmZXIgdG8gYSBuZXdseSBjcmVhdGVkIGl0ZW0sIHRoZSB1cGRhdGVkIGl0ZW0gd2lsbCAqbm90KiBiZSBhZGRlZCB0b1xyXG5cdFx0XHQvLyBzaW5nbGUgaXRlbXMgKGUuZy4gbW92aW5nIGEgZnVuY3Rpb24gdG8gYSBuZXdseSBjcmVhdGVkIGZ1bmN0aW9uIGdyb3VwKVxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc2luZ2xlSXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXHJcblx0ZXhlY3V0ZSAoXHJcblx0XHRzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXHJcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXHJcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxyXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdGNvbnN0IGNoYW5nZXNDb21waWxhdGlvbiA9IHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3Qoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xyXG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhjaGFuZ2VzQ29tcGlsYXRpb24sIHBhcmFtZXRlcnMsIGNvbnZlcnNpb25NYXAsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlTW92ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLm1vdmUsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLnVwZGF0ZSwgcGFyYW1ldGVycyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sIC8vIGl0ZW0gaWQgY29udmVyc2lvbiBtYXBcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlJdGVtVHlwZU1hcCwgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRNQVlCRSA9ICdtYXliZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XHJcblx0ZW50cmllczogQ29sbGVjdGlvbkVudHJ5SXRlbVR5cGVNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBlbnRyeSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cnkpKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIGluIHVzZVxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0ucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChjb2xsZWN0aW9uRW50cnk/OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV0uaW5kZXhPZihjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdGlmIChpbmRleCA9PT0gLTEpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKTogQ29sbGVjdGlvbkVudHJ5W10ge1xyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdLnNsaWNlKCk7XHJcblx0fVxyXG5cclxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB0aGluayBvZiBiZXR0ZXIgbmFtZVxyXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hQYXJlbnQoY29sbGVjdGlvbkVudHJ5LCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuZ2V0Q3VycmVudFJlc291cmNlKCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT25seSByZXNvdXJjZXNcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cclxuXHQgKi9cclxuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZSwgaXRlbUlkKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMgdGhlIGl0ZW0gJ2JlbG9uZ3MnIGluLlxyXG5cdCAqL1xyXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge2ZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGZpZWxkcywgcGFyZW50KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoUmVzdWx0ID0gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCk7XHJcblxyXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cclxuXHRcdFx0aWYgKG1hdGNoUmVzdWx0ID09PSB0cnVlKSAvLyBtaWdodCBhbHNvIHJldHVybiAnbWF5YmUnXHJcblx0XHRcdFx0cmVzdWx0LmZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxyXG5cdFx0XHRcdHJlc3VsdC5tYXliZS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5LnN0cmluZyA9PT0gcXVlcnkuc3RyaW5nKVxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRCeUtleSAoaXRlbVR5cGUsIGVudHJ5S2V5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKGVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGUsIHJlc291cmNlS2V5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiBlbnRyeS5yZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRpZiAocmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMucmVzb3VyY2VLZXkgPT09IHJlc291cmNlS2V5KVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5UGFyc2VyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHQvLyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBjb2x1bW5zIHByb3BlcnR5LCBpdCB3aWxsIGJlIHJlcGxhY2VkIGluIHdoZW4gY29sdW1ucyBhcmUgZXhwYW5kZWRcclxuXHRjbG9uZU9wdGlvbnMgKG9wdGlvbnMsIHBhcmVudCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gZG9lcyBhIHNoYWxsb3cgY29weVxyXG5cclxuXHRcdHJlc3VsdC5xdWVyeVBhcmFtcyA9IHRoaXMuY2xvbmVRdWVyeVBhcmFtcyhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHRcdHJlc3VsdC5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsb25lUXVlcnlQYXJhbXMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHBhcmFtZXRlcnMpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSBwYXJhbWV0ZXJzW2tleV07XHJcblx0XHRcdGxldCBjbG9uZTtcclxuXHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLnNsaWNlKCk7IC8vIHdlJ3JlIG9ubHkgdXNpbmcgcHJpbWl0aXZlIGFycmF5c1xyXG5cdFx0XHRlbHNlIGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuY2xvbmUoKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWU7XHJcblxyXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNsb25lO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbHVtbnM6IFtdLFxyXG5cdFx0XHRcdHF1ZXJ5OiBudWxsLFxyXG5cdFx0XHRcdHF1ZXJ5SXRlbVR5cGU6IG51bGwsXHJcblx0XHRcdFx0cXVlcnlQYXJhbXM6IHt9LFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlLFxyXG5cdFx0XHRcdGxpbWl0OiBudWxsLFxyXG5cdFx0XHRcdGVudHJ5S2V5OiAnJ1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlUXVlcnkgKG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGxldCBxdWVyeTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnk7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc3QgbGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeToge2lkOiAnJnBhcmVudElkJ319O1xyXG5cdFx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zLnBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0bGlua2VkVG9RdWVyeSA6XHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKG9wdGlvbnMucXVlcnksIGxpbmtlZFRvUXVlcnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KHF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpO1xyXG5cclxuXHRcdHJldHVybiB7b2JqZWN0OiBwYXJzZWRRdWVyeVswXSwgc3RyaW5nOiBwYXJzZWRRdWVyeVsxXX07XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFjY3VtdWxhdG9yKTogSXRlbUlkW10ge1xyXG5cdFx0aWYgKGFjY3VtdWxhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGFjY3VtdWxhdG9yLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIGFjY3VtdWxhdG9yO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHtJdGVtRW50cnlbXX0gaXRlbUVudHJpZXNcclxuXHQgKiBAcGFyYW0geyhpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbn0gY2FsbGJhY2tcclxuXHQgKiBAcmV0dXJucyB7SXRlbUVudHJ5W119XHJcblx0ICpcclxuXHQgKiBmaWx0ZXIgYW4gYXJyYXkgYWNjb3JkaW5nIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gUmV0dXJuIHRoZSBlbnRyaWVzIHRoYXQgZmFpbGVkIHRoZSBjb25kaXRpb25cclxuXHQgKiBSZXBsYWNlIHRoZSBnaXZlbiBhcnJheSB3aXRoIHRoZSBlbnRyaWVzIHRoYXQgZGlkbid0IGZhaWwgdGhlIGNvbmRpdGlvbi5cclxuXHQgKi9cclxuXHRmaWx0ZXJBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBmaWx0ZXJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAoY2FsbGJhY2soaXRlbUVudHJ5KSlcclxuXHRcdFx0XHRmaWx0ZXJlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVtb3ZlZEVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW1vdmVkRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHJcblx0XHRpdGVtRW50cmllcy5sZW5ndGggPSBmaWx0ZXJlZEVudHJpZXMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbUVudHJpZXMubGVuZ3RoOyBpKyspXHJcblx0XHRcdGl0ZW1FbnRyaWVzW2ldID0gZmlsdGVyZWRFbnRyaWVzW2ldO1xyXG5cclxuXHRcdHJldHVybiByZW1vdmVkRW50cmllcztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZSxcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxyXG5cdENvbHVtbkV4cGFuc2lvbixcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtblNldCxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2UsXHJcblx0UXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSwgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSwgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBRdWVyeVBhcnNlckZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCwgQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIEVudHJ5UGFyZW50LCBFbnRyeVN0YXR1cywgSXRlbUVudHJ5UGFyZW50SWRNYXAsIEl0ZW1JZCxcclxuXHRJdGVtUmVzb3VyY2VJdGVtSWRNYXAsIEl0ZW1UeXBlXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkhhbmRsZXIge1xyXG5cdGVudHJpZXM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRnZXRQcm9taXNlcyAoc3RhdHVzUmVzb3VyY2U6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwKSB7XHJcblx0XHRjb25zdCBwcm9taXNlZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF07XHJcblx0XHRjb25zdCBwcm9taXNlZEV4cGFuZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWQpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkW3BhcmVudElkXSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZEV4cGFuZClcclxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRFeHBhbmRbcGFyZW50SWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdElkcyAoc3RhdHVzUmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IHJlc29sdmUgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUkVTT0xWRV07XHJcblx0XHRjb25zdCBleHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuRVhQQU5EXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHJlc29sdmUpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHJlc29sdmVbcGFyZW50SWRdLnBhcmVudC5pdGVtSWQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gZXhwYW5kKVxyXG5cdFx0XHRyZXN1bHQucHVzaChleHBhbmRbcGFyZW50SWRdLnBhcmVudC5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBlbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5ID0gZW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoZW50cnkubm90Zml0dGluZywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdGNvbGxlY3Rpb24uYWRkSXRlbXMoZW50cnkuZml0dGluZywgbnVsbCwgdHJ1ZSk7IC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXHJcblxyXG5cdFx0XHRpZiAoZW50cnkubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uTWF0Y2hlciAoKTogQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbdGhpcy5lbnRyaWVzXSwgdHJ1ZSwgdHJ1ZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nID0gbWFwRW50cnkuZml0dGluZztcclxuXHRcdFx0Y29uc3QgbWF5YmUgPSBtYXBFbnRyeS5tYXliZTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nSXRlbSBvZiBmaXR0aW5nKVxyXG5cdFx0XHRcdGlkQXJyYXkucHVzaChmaXR0aW5nSXRlbS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBtYXliZUl0ZW0gb2YgbWF5YmUpXHJcblx0XHRcdFx0aWRBcnJheS5wdXNoKG1heWJlSXRlbSk7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBtYXliZSwgYm9vbGVhbiBpbnN0ZWFkIG9mIG1lc3NhZ2VcclxuXHQvKipcclxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCAqL1xyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCk6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCBudWxsLCB1cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdGlmICh1cGRhdGVJbml0aWFsICYmIG1hcEVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXhwYW5kIChwYXJlbnRUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSwgbmV3Q29sdW1ucyk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlW10+IHtcclxuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHQvLyBUT0RPOiBmaWx0ZXIgbG9jYWwgaXRlbXM/XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XHJcblxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goKDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudCkuaXRlbUlkKTtcclxuXHJcblx0XHRcdGl0ZW1FbnRyaWVzID0gaXRlbUVudHJpZXMuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5pdGVtcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRudWxsLFxyXG5cdFx0XHRuZXdDb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKFxyXG5cdFx0XHRcdFx0bmV3Q29sdW1ucyxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtRW50cmllc1xyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSlcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeS5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9ucztcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGJhdGNoRXh0ZW5kIChcclxuXHRcdHBhcmVudFR5cGU6IHN0cmluZyxcclxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0cXVlcnlDYWxsYmFjayxcclxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSxcclxuXHRcdHJldHVybkFsbEl0ZW1zID0gZmFsc2VcclxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcD4ge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbGxlY3Rpb25zKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih7fSk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHRcdGxldCBpdGVtSWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gcXVlcnlDYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKTtcclxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKCg8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRpdGVtSWRBcnJheSA9IGl0ZW1JZEFycmF5LmNvbmNhdChjb2xsZWN0aW9uRW50cnkuZ2V0SWRBcnJheSgpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucykub2JqZWN0LFxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKGl0ZW1JZEFycmF5KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlID0gY29sbGVjdGlvbnNbcGFyZW50SWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5hZGRJdGVtcyggLy8gc2hvdWxkIGdvIGZpcnN0XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLml0ZW1zW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSByZXR1cm5BbGxJdGVtcyA/IGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRiYXRjaEZldGNoIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcclxuXHRcdGNvbnN0IHJlc291cmNlID0gdGhpcy5jcmVhdGVTdGF0dXNSZXNvdXJjZShwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwodGhpcy5nZXRQcm9taXNlcyhyZXNvdXJjZSkpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0SWRzID0gdGhpcy5nZXRSZXF1ZXN0SWRzKHJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0XHRcdFx0XHRudWxsIDpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3Qob3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKVswXSxcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zXHJcblx0XHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdHJlcXVlc3RJZHMsXHJcblx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUJhdGNoUmVzcG9uc2UocmVzb3VyY2UsIGl0ZW1FbnRyeVJlc291cmNlLCBpdGVtQ2FjaGUpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoaGFzUHJvcGVydGllcyhyZXNvdXJjZVtFTlRSWV9TVEFUVVMuTE9DQUxdKSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUJhdGNoUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNvdXJjZSxcclxuXHRcdFx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0XHRpdGVtQ2FjaGVcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmVzb3VyY2VbRU5UUllfU1RBVFVTLkNBQ0hFRF07XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVTdGF0dXNSZXNvdXJjZSAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXNJZCBpbiBFTlRSWV9TVEFUVVMpXHJcblx0XHRcdHJlc3VsdFtFTlRSWV9TVEFUVVNbc3RhdHVzSWRdXSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7IC8vIHVzZSBwcm9jZXNzRW50cnlPcHRpb25zIHRvIGNsb25lIFRPRE86IHVzZSBjbG9uZU9wdGlvbnNcclxuXHJcblx0XHRcdGxldCBzdGF0dXNSZXNvdXJjZTtcclxuXHJcblx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9O1xyXG5cclxuXHRcdFx0c3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblxyXG5cdFx0XHRyZXN1bHRbc3RhdHVzUmVzb3VyY2Uuc3RhdHVzXVtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2ggKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3Qgc3RhdHVzUmVzb3VyY2UgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cdFx0Y29uc3QgZW50cnkgPSBzdGF0dXNSZXNvdXJjZS5lbnRyeTtcclxuXHJcblx0XHRzd2l0Y2ggKHN0YXR1c1Jlc291cmNlLnN0YXR1cykge1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihlbnRyeSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2UudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVudHJ5LmV4cGFuZChvcHRpb25zLmNvbHVtbnMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlJFU09MVkU6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVJlbW90ZShlbnRyeSwgaXRlbUNhY2hlKTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuTE9DQUw6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUxvY2FsKGVudHJ5LCBpdGVtQ2FjaGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcclxuXHRcdGNvbnN0IGlzQ29sdW1uU3VwZXJzZXQgPSBjb2xsZWN0aW9uRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2Yob3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoIWNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdHJldHVybiBpc0NvbHVtblN1cGVyc2V0ID8gRU5UUllfU1RBVFVTLkNBQ0hFRCA6IEVOVFJZX1NUQVRVUy5FWFBBTkQ7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCA9IGZhbHNlO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkgPyBFTlRSWV9TVEFUVVMuTE9DQUwgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXNDb2x1bW5TdXBlcnNldCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ7XHJcblx0fVxyXG5cclxuXHRnZXREZWZlcnJlZEVudHJ5U3RhdHVzIChpdGVtVHlwZTogSXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpOiB7ZW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogYm9vbGVhbn0ge1xyXG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcclxuXHJcblx0XHRpZiAoIW9wdGlvbnMuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gZGVmZXJyZWRFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRSZXF1ZXN0Q29sdW1ucyhvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBmYWxzZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHtlbnRyeTogZGVmZXJyZWRFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBpc0RlZmVycmVkOiB0cnVlfTtcclxuXHR9XHJcblxyXG5cdGdldEVudHJ5U3RhdHVzIChpdGVtVHlwZTogSXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsRW50cmllczogQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSk6IEVudHJ5U3RhdHVzPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgcXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0bGV0IGlzRGVmZXJyZWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNMb2NhbChvcHRpb25zKSkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSBsb2NhbEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcclxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpfTtcclxuXHJcblx0XHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcclxuXHJcblx0XHRcdGlmIChpc0RlZmVycmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xyXG5cclxuXHRcdFx0Ly8gbmV3IGxvY2FsIGVudHJ5IGNyZWF0ZWQsIHNob3VsZCBiZSBhZGRlZCB0byBsb2NhbCBjYWNoZSBvbmx5XHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuTE9DQUx9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0Ly8gZW50cnkgYWxyZWFkeSBleGlzdHMgaW4gZ2xvYmFsIGNhY2hlLCBhZGQgdG8gbG9jYWwgY2FjaGVcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0ZW50cnk6IGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSxcclxuXHRcdFx0XHRzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdCh7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZH0gPSB0aGlzLmdldERlZmVycmVkRW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIHF1ZXJ5LCBkZWZlcnJlZEVudHJpZXMpKTtcclxuXHJcblx0XHRpZiAoaXNEZWZlcnJlZClcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XHJcblxyXG5cdFx0Ly8gbmV3IGdsb2JhbCBlbnRyeSBjcmVhdGVkLCBhZGQgdG8gYm90aCBsb2NhbCBhbmQgZ2xvYmFsIGNhY2hlXHJcblx0XHRsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR0aGlzLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5SRVNPTFZFfTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUJhdGNoUmVzcG9uc2UgKFxyXG5cdFx0c3RhdHVzUmVzb3VyY2UsXHJcblx0XHRpdGVtRW50cnlDb21wb3VuZDoge1xyXG5cdFx0XHRjb2x1bW5zOiBDb2x1bW5TZXQsXHJcblx0XHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvbixcclxuXHRcdFx0aXRlbXM/OiBJdGVtRW50cnlQYXJlbnRJZE1hcFxyXG5cdFx0fSxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlXHJcblx0KTogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5jYWNoZWQpXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5jYWNoZWRbcGFyZW50SWRdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZSkge1xyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UucmVzb2x2ZVtwYXJlbnRJZF0ucmVzb2x2ZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRpdGVtczogKDxJdGVtRW50cnlQYXJlbnRJZE1hcD4gaXRlbUVudHJ5Q29tcG91bmQuaXRlbXMpW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5leHBhbmQpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5leHBhbmRbcGFyZW50SWRdO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZENvbHVtbnMoPENvbHVtbkV4cGFuc2lvbj4gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uRXhwYW5zaW9uKTtcclxuXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5sb2NhbCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmxvY2FsW3BhcmVudElkXTtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGl0ZW1zOiBpdGVtQ2FjaGUuZ2V0QnlQYXJlbnQoXHJcblx0XHRcdFx0XHRcdHBhcmVudC5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCxcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUxvY2FsIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnM7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSksXHJcblx0XHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMsIGZhbHNlKVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVSZW1vdGUgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRsZXQgY29sdW1uU2V0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoY29sbGVjdGlvbkVudHJ5KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucyxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnBhcmVudCxcclxuXHRcdFx0XHRcdGNvbHVtblNldFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cmllcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5yZXNvbHZlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpdGVtczogaXRlbUVudHJpZXMuY29uY2F0KGl0ZW1DYWNoZS5nZXRMb2NhbEJ5UXVlcnkoaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5xdWVyeSkpLFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5TZXRcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsIChvcHRpb25zKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGlkZW50aXR5LCBJdGVtSWQgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcy8nO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRtYXA6IHtcclxuXHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXToge1xyXG5cdFx0XHRjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnlcclxuXHRcdFx0bWF0Y2hlczoge1xyXG5cdFx0XHRcdFtpdGVtSWQ6IG51bWJlcl06IHsgaXRlbTogSXRlbUVudHJ5LCBpc01hdGNoOiBib29sZWFuIH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVzOiBDb2xsZWN0aW9uQ2FjaGVbXSxcclxuXHRcdHByaXZhdGUgdXBkYXRlSW5pdGlhbDogYm9vbGVhbixcclxuXHRcdHByaXZhdGUgY2FsbE9uQWN0aXZhdGU6IGJvb2xlYW5cclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRleHBhbmQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uQ2FjaGUgb2YgdGhpcy5jb2xsZWN0aW9uQ2FjaGVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyaWVzID0gY29sbGVjdGlvbkNhY2hlLmdldEJ5SXRlbVR5cGUoaXRlbUVudHJ5Lml0ZW1UeXBlKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5ICBvZiBjb2xsZWN0aW9uRW50cmllcykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeUlkID0gY29sbGVjdGlvbkVudHJ5LmlkO1xyXG5cdFx0XHRcdGxldCBtYXRjaGVzO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5tYXBbY29sbGVjdGlvbkVudHJ5SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHR0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPSB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb25FbnRyeSwgbWF0Y2hlczoge30gfTtcclxuXHJcblx0XHRcdFx0bWF0Y2hlcyA9IHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXS5tYXRjaGVzO1xyXG5cclxuXHRcdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0bWF0Y2hlc1tpdGVtSWRdID0ge1xyXG5cdFx0XHRcdFx0aXRlbTogaXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0aXNNYXRjaDogcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdClcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHJcblx0XHRcdGlmICh0aGlzLmhhc0ZpdHRpbmdJdGVtcyhtYXBFbnRyeS5tYXRjaGVzKSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChtYXBFbnRyeS5jb2xsZWN0aW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkVG9Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUVudHJpZXMgPSBncm91cGVkSXRlbUVudHJpZXMuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXHJcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXHJcblx0XHRcdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoXHJcblx0XHRcdFx0XHRmaXR0aW5nSXRlbUVudHJpZXMsXHJcblx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAodGhpcy51cGRhdGVJbml0aWFsICYmIGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAocmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1JZHMgPSB0aGlzLmdyb3VwSXRlbUlkcyhtYXBFbnRyeS5tYXRjaGVzKS5maXR0aW5nO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlID09PSBudWxsIHx8IGNvbGxlY3Rpb25FbnRyeSAhPT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCByZXN1bHRSZXNvdXJjZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKCkge1xyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLm5vdEZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHQvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMoZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmcsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHRpZiAoZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ3JvdXBJdGVtRW50cmllcyAobWF0Y2hlcykge1xyXG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBtYXliZTogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBtYXRjaC5pdGVtO1xyXG5cdFx0XHRjb25zdCBpc01hdGNoID0gbWF0Y2guaXNNYXRjaDtcclxuXHJcblx0XHRcdGlmIChpc01hdGNoID09PSB0cnVlKVxyXG5cdFx0XHRcdGZpdHRpbmcucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChpc01hdGNoID09PSBmYWxzZSlcclxuXHRcdFx0XHRub3RGaXR0aW5nLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRtYXliZS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgZml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZywgbWF5YmU6IG1heWJlIH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdyb3VwSXRlbUlkcyAobWF0Y2hlcykge1xyXG5cdFx0Ly8gYWxzbyBpbmNsdWRlcyAnbWF5YmUnO1xyXG5cdFx0Y29uc3QgZml0dGluZzogSXRlbUlkW10gPSBbXTtcclxuXHRcdGNvbnN0IG5vdEZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcclxuXHJcblx0XHRcdChtYXRjaC5pc01hdGNoID09PSBmYWxzZSA/IG5vdEZpdHRpbmcgOiBmaXR0aW5nKS5wdXNoKG1hdGNoLml0ZW0uaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4geyBmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nIH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhhc0ZpdHRpbmdJdGVtcyAobWF0Y2hlcykge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRpZiAobWF0Y2hlc1tpdGVtSWRdLmlzTWF0Y2ggPT09IHRydWUpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlIHtcclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXRJdGVtczogZmFsc2UsXHJcblx0XHRcdFx0ZWRpdENvbGxlY3Rpb246IGZhbHNlLFxyXG5cdFx0XHRcdG1vZEluc3RhbnQ6IGZhbHNlLFxyXG5cdFx0XHRcdGVuYWJsZVNhdmU6IHRydWUsXHJcblx0XHRcdFx0b25JdGVtc0NyZWF0ZWQ6IG5vb3AsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsIC8vIG5lZWRlZCBmb3IgY29tcGFyaXNvblxyXG5cdFx0XHRcdG9uQWRkOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlOiBub29wLFxyXG5cdFx0XHRcdG9uQWRkSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRvblJlbW92ZUluaXRpYWw6IG5vb3AsXHJcblx0XHRcdFx0b25BY3RpdmF0ZUl0ZW06IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUl0ZW06IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZUNvbGxlY3Rpb246IG5vb3AsIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gaW4gTG9jYWxDYWNoZVxyXG5cdFx0XHRcdHJlc291cmNlS2V5OiBudWxsLCAvLyBUT0RPOiByZW1vdmVcclxuXHRcdFx0XHRjbGVhck9uVGFiQ2hhbmdlOiB0cnVlLFxyXG5cdFx0XHRcdGNsZWFyT25TdWJUYWJDaGFuZ2U6IHRydWUsXHJcblx0XHRcdFx0Y3VzdG9tOiBudWxsXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtUmVzb3VyY2VzOiBJdGVtUmVzb3VyY2VbXSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZS5lbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkNhY2hlIHtcclxuXHRjYWNoZSA9IHt9O1xyXG5cdGFsbENvbHVtbnMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbikge1xyXG5cdFx0aWYgKHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuY2FjaGVbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29uc3QgZW50cnkgPSB0aGlzLmNhY2hlW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XHJcblxyXG5cdFx0aWYgKGVudHJ5W2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRyZXR1cm4gZW50cnlbY29sdW1uSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0Q29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzcG9uc2VUeXBlIGluIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XHJcblxyXG5cdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxyXG5cdFx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdW2NvbHVtbklkXSA9IHRoaXMuc2V0Q29sdW1uKHJlc3BvbnNlVHlwZSwgY29sdW1uc1tjb2x1bW5JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcclxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJldHJpZXZlIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpOiB7IG1pc3Npbmc6IGFueVtdIHwgdHJ1ZSwgY2FjaGVkOiBvYmplY3QgfSB7XHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcclxuXHRcdFx0aWYgKHRoaXMuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdHJldHVybiB7Y2FjaGVkOiB0aGlzLmdldENvbHVtbnMoaXRlbVR5cGUpLCBtaXNzaW5nOiBbXX07XHJcblxyXG5cdFx0XHRyZXR1cm4ge2NhY2hlZDoge30sIG1pc3Npbmc6IHRydWV9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHJlcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xyXG5cdFx0Y29uc3QgcmVxdWVzdEFjY3VtdWxhdG9yID0gW107XHJcblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0cmV0dXJuIHttaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3IsIGNhY2hlZDogcmVwb25zZUFjY3VtdWxhdG9yfTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQWxsIChpdGVtVHlwZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyBbXSA6IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IGNvbHVtbnM7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XHJcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgJ2lkJywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXHJcblx0XHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW4sIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1uIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSB0aGlzLmdldENvbHVtbihpdGVtVHlwZSwgY29sdW1uLmlkKTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdW2NvbHVtbi5pZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG1pc3NpbmdEZXJpdmVkID0gW107XHJcblxyXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cclxuXHRcdGlmIChtaXNzaW5nRGVyaXZlZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBtaXNzaW5nUmVxdWVzdCA9IHt9O1xyXG5cdFx0bWlzc2luZ1JlcXVlc3RbY29sdW1uLmlkXSA9IG1pc3NpbmdEZXJpdmVkO1xyXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gobWlzc2luZ1JlcXVlc3QpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xyXG5cdFx0aWYgKHRoaXMuY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZVtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvblJlc3VsdCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb24ge1xyXG5cdGV4cGFuc2lvbk1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0fSA9IHt9O1xyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXHJcblx0XHRwdWJsaWMgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCkge1xyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XHJcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3RcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xyXG5cclxuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdCxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IHRoaXMuZXhwYW5kQ29sdW1uSW5mbyhjb2x1bW5TZXQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4cGFuZENvbHVtbkluZm8gKGNvbHVtblNldDogQ29sdW1uU2V0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RNZXJnZVJlc3VsdCA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtblNldC5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0XHQubWVyZ2VSZXNwb25zZUNvbHVtbnMoY29sdW1uU2V0LnJlc3BvbnNlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucylcclxuXHRcdFx0Lm1lcmdlZDtcclxuXHJcblx0XHRjb25zdCBtZXJnZWQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQubWVyZ2VkLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5kaWZmZXJlbmNlLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnMsIC8vIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBsb29rIHVwIHRoZSBwYXJlbnQgb2YgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRtZXJnZWQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgY29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uQ2FjaGUsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5IYW5kbGVyIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbiAoaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdGZldGNoSXRlbVR5cGVUcmFuc2xhdGlvbnMgKGl0ZW1UeXBlcyk6IFByb21pc2U8e1tpdGVtVHlwZTogc3RyaW5nXTogc3RyaW5nfT4ge1xyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFByb21pc2U8UmVzcG9uc2VDb2x1bW5NYXA+fSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxyXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcclxuXHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZSlcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0IChpdGVtVHlwZSwgY29sdW1ucywgcGFyYW1zID0ge2ZpbHRlcjogZmFsc2V9KTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXMpLnRoZW4oXHJcblx0XHRcdGNvbHVtblJlc291cmNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRjb2x1bW5zLFxyXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaCAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCBwYXJhbXM/KTogUHJvbWlzZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xyXG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblJlc291cmNlLm1pc3NpbmcgIT09IHRydWUgJiYgY29sdW1uUmVzb3VyY2UubWlzc2luZy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLCBwYXJhbXMpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcclxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcclxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmNhY2hlZFxyXG5cdFx0XHRcdCkubWVyZ2VkO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hBbGwgKGl0ZW1UeXBlKTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRsZXZlbDogbnVtYmVyO1xyXG5cdHBhdGg6IHN0cmluZztcclxuXHR0YWlsUGF0aDogc3RyaW5nO1xyXG5cdGl0ZW1UeXBlOiBzdHJpbmcgPSAnJztcclxuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XHJcblx0aXNMZWFmOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogYW55LCByZWFkb25seSBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbCkge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XHJcblxyXG5cdFx0dGhpcy5pZCA9IGNvbHVtbklkO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcclxuXHRcdFx0dGhpcy5sZXZlbCA9IDA7XHJcblx0XHRcdHRoaXMucGF0aCA9IGNvbHVtbklkO1xyXG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMTtcclxuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHRcdHRoaXMudGFpbFBhdGggPSBwYXJlbnQubGV2ZWwgPT09IDAgP1xyXG5cdFx0XHRcdGNvbHVtbklkIDpcclxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQge1JlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuY29uc3QgZW1wdHlPYmplY3QgPSB7fTtcclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcclxuXHRpZCA9ICsrY3VycmVudElkO1xyXG5cclxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XHJcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwID0gZW1wdHlPYmplY3Q7XHJcblxyXG5cdGxpbms6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbDtcclxuXHRtYWluOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRkZXJpdmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRyb290OiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRsZWFmOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRmb3JtYXR0ZWQ6IHttYWluOiBDb2x1bW5JbmZvW10sIGRlcml2ZWQ6IENvbHVtbkluZm9bXX0gPSB7bWFpbjogW10sIGRlcml2ZWQ6IFtdfTtcclxuXHRmaWx0ZXJlZDogQ29sdW1uSW5mb1tdID0gW107XHJcblx0Y3VzdG9tOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRzZWFyY2hhYmxlOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRpdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRub3RJdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgcmVxdWVzdDogUmVxdWVzdENvbHVtbnMsXHJcblx0KSB7XHJcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdCA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHR0aGlzLmVuYWJsZUNhY2hpbmcgPSBlbmFibGVDYWNoaW5nO1xyXG5cclxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcclxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRlbHNlXHJcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIGNvbHVtbnMpLm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gbWVyZ2VkUmVxdWVzdENvbHVtbnMgPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1N1cGVyc2V0T2YgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KGNvbHVtbnMsIHRoaXMucmVxdWVzdCwgdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0dGhpcy5yZXF1ZXN0ID0gW107XHJcblx0XHR0aGlzLnJlc3BvbnNlID0gdGhpcy5lbmFibGVDYWNoaW5nID9cclxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0dGhpcy5tYWluLnB1c2godGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgW10sIG51bGwsIHJlc3BvbnNlQ29sdW1ucykpO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gPG9iamVjdFtdPiB0aGlzLnJlcXVlc3Q7IC8vIHdlIGNhbiBhc3N1bWUgcmVxdWVzdENvbHVtbnMgaXMgYW4gYXJyYXkgaGVyZVxyXG5cclxuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcclxuXHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXHJcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbiAmJiB0aGlzLnJlc3BvbnNlW2l0ZW1UeXBlXS5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKCdpZCcsIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gIT09IG51bGwpXHJcblx0XHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFJlcXVlc3RDb2x1bW5JbmZvIChyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbHVtbi5pZDtcclxuXHJcblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcclxuXHJcblx0XHRjb25zdCByZXN1bHRSZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XHJcblxyXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIHBhcnNlZENvbHVtbi5jaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW5JbmZvIChjb2x1bW5JZCwgaXRlbVR5cGUsIGNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk6IENvbHVtbkluZm8ge1xyXG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2VDb2x1bW4sIHBhcmVudCk7XHJcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XHJcblxyXG5cdFx0aWYgKGlzRGVyaXZlZClcclxuXHRcdFx0dGhpcy5kZXJpdmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHRlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXHJcblx0XHRcdHRoaXNbY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5mb3JtYXR0ZWRbaXNEZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ21haW4nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmZpbHRlcmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmN1c3RvbS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXHJcblx0XHRcdHRoaXMubGluayA9IGNvbHVtbkluZm87XHJcblxyXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbHVtbkluZm8uaXRlbVR5cGUgPSByZXNwb25zZUNvbHVtbi5pdGVtVHlwZTtcclxuXHRcdGNvbHVtbkluZm8uY2hpbGRyZW4gPSBbXTtcclxuXHRcdGNvbHVtbkluZm8uaXNMZWFmID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uSWQgb2YgY2hpbGRyZW4pIHtcclxuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhcclxuXHRcdFx0XHRjaGlsZENvbHVtbklkLFxyXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLFxyXG5cdFx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRJbmZvID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sdW1uSW5mby5jaGlsZHJlbi5wdXNoKGNoaWxkSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkluZm87XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiwgUkVOREVSX0FTX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExvY2FsQ29sdW1uLCBSZXF1ZXN0Q29sdW1uLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGV4dGVuZCwgZ2V0Rmlyc3RQcm9wZXJ0eSwgaXNEZWZpbmVkIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5VdGlsIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5QYXRoIChjb2x1bW5zLCByZW5kZXJBcykge1xyXG5cdFx0bGV0IHNlcGVyYXRvciA9ICcnO1xyXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0cmVzdWx0ICs9IHNlcGVyYXRvciArIGNvbHVtbi5pZDtcclxuXHRcdFx0c2VwZXJhdG9yID0gQ09MVU1OX1NFUEVSQVRPUjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVuZGVyQXMgIT09IG51bGwpXHJcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldERhdGVGb3JtYXRPcHRpb25zIChjb2x1bW5UeXBlKSB7XHJcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcclxuXHJcblx0XHRjb25zdCBmb3JtYXRzID0ge1xyXG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXHJcblx0XHRcdCdKLU0nOiBub3cuZm9ybWF0KCdERC1NTScpLFxyXG5cdFx0XHQnaitGK1knOiBub3cuZm9ybWF0KCdEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdGJzogbm93LmZvcm1hdCgnTU1NJyksXHJcblx0XHRcdCdmJzogbm93LmZvcm1hdCgnTU1NTScpLFxyXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcclxuXHRcdFx0J2QnOiBub3cuZm9ybWF0KCdkZGQnKVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoY29sdW1uVHlwZSA9PT0gJ2RhdGV0aW1lJylcclxuXHRcdFx0ZXh0ZW5kKGZvcm1hdHMsIHtcclxuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxyXG5cdFx0XHRcdCdKLU0rSDppJzogbm93LmZvcm1hdCgnREQtTU0gSEg6bW0nKSxcclxuXHRcdFx0XHQnaitGK1krSDppJzogbm93LmZvcm1hdCgnREQgTU1NTSBZIEhIOm1tJyksXHJcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxyXG5cdFx0XHRcdCdIOmknOiBub3cuZm9ybWF0KCdISDptbScpLFxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gZm9ybWF0cztcclxuXHR9XHJcblxyXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxyXG5cdFx0XHRcdC8vIGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRmxvYXRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNJbnRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc0Zsb2F0Q29sdW1uKGNvbHVtbikgfHwgdGhpcy5pc0ludENvbHVtbihjb2x1bW4pO1xyXG5cdH1cclxuXHJcblx0aXNDdXN0b21Db2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XHJcblx0fVxyXG5cclxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbiwgaW5jbHVkZUlkID0gdHJ1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpZCc6XHJcblx0XHRcdFx0cmV0dXJuIGluY2x1ZGVJZDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNSZW5kZXJlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0ZpbHRlcmVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdC8vIHVnbHkgaGFjayA6LShcclxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1NlbGVjdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdibG9iJzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnb3JkZXInOlxyXG5cdFx0XHRjYXNlICdwYXJlbnRpZCc6XHJcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxyXG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XHJcblx0XHRcdGNhc2UgJ3Rva2VuJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW4sIGxvY2F0aW9uKSB7XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XHJcblx0fVxyXG5cclxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uKSB7XHJcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZ2V0RGVmYXVsdFdlaWdodCcsIGNvbHVtbik7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRcdHJldHVybiAwLjU7XHJcblxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiAxLjU7XHJcblxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIFsnPScsICc+JywgJzwnXTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IGNvbHVtbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHNlY29uZFxyXG5cdGlzQ29sdW1uU3Vic2V0IChmaXJzdCwgc2Vjb25kLCBzZWNvbmRUcnVlKSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kVHJ1ZTtcclxuXHJcblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY29sdW1uLCBzZWNvbmQpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcclxuXHRcdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0XHQpXHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XHJcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5zIHtcclxuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IFJlcXVlc3RDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY29sdW1uKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvcHlSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBSZXF1ZXN0Q29sdW1uKTogUmVxdWVzdENvbHVtbiB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIGNvbHVtbi5pZDtcclxuXHJcblx0XHRjb25zdCBjaGlsZHJlbjogUmVxdWVzdENvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pXHJcblx0XHRcdGNoaWxkcmVuLnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjaGlsZENvbHVtbikpO1xyXG5cclxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGNoaWxkcmVufTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XHJcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcclxuXHQgKi9cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogUmVxdWVzdENvbHVtbnMsIHNlY29uZDogUmVxdWVzdENvbHVtbnMpOiB7bWVyZ2VkOiBSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogUmVxdWVzdENvbHVtbnN9IHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xyXG5cclxuXHRcdGNvbnN0IG1lcmdlZDogUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xyXG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFkZGVkQ29sdW1uczogUmVxdWVzdENvbHVtbnMgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXHJcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKToge2lkOiBzdHJpbmcsIGNoaWxkcmVuOiBSZXF1ZXN0Q29sdW1uW119IHtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJztcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gaXNMZWFmID8gcmVxdWVzdENvbHVtbiA6IGdldEZpcnN0UHJvcGVydHkocmVxdWVzdENvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aWQ6IGNvbHVtbklkLFxyXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxyXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRzZWNvbmRbaXRlbVR5cGVdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQubWVyZ2VkO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XHJcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGZpcnN0KVxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zIChjb25maWdDb2x1bW5zLCBsb2NhbENvbHVtbnMsIHJlbW90ZUNvbHVtbkNhbGxiYWNrLCBsb2NhbENvbHVtbkNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgbG9jYWxDb2x1bW4gb2YgbG9jYWxDb2x1bW5zKVxyXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmZpZ0lkIG9mIGNvbmZpZ0NvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb25maWdJZFswXTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XHJcblx0XHRcdFx0cmVtb3RlQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGNvbHVtbklkLCBwYXJzZWRDb25maWdJZFsxXSk7XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcclxuXHRcdFx0aWYgKGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bG9jYWxDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdKTtcclxuXHRcdFx0ZGVsZXRlIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IG1vdmUgdG8gZnJvbnQtZW5kXHJcblx0Y29uc29saWRhdGVDb2x1bW5zIChcclxuXHRcdGNvbmZpZ0NvbHVtbnMsXHJcblx0XHRsb2NhbENvbHVtbnMsXHJcblx0XHRhZGRSZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbltdXHJcblx0KSB7XHJcblx0XHRjb25zdCBmaWx0ZXJlZExvY2FsQ29sdW1uczogTG9jYWxDb2x1bW5bXSA9IFtdO1xyXG5cdFx0bGV0IHJlcXVlc3RDb2x1bW5zID0gPFJlcXVlc3RDb2x1bW5bXT4gdGhpcy5jb3B5UmVxdWVzdENvbHVtbnMoYWRkUmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyhcclxuXHRcdFx0Y29uZmlnQ29sdW1ucyxcclxuXHRcdFx0bG9jYWxDb2x1bW5zLFxyXG5cdFx0XHQoXywgY29sdW1uSWQpID0+IHtcclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oY29sdW1uSWQuc3BsaXQoQ09MVU1OX1NFUEVSQVRPUiksIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KF8sIGxvY2FsQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0ZmlsdGVyZWRMb2NhbENvbHVtbnMucHVzaChsb2NhbENvbHVtbik7XHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgPSA8UmVxdWVzdENvbHVtbltdPiB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoXHJcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0XHRcdGxvY2FsQ29sdW1uLnZhbHVlT3B0aW9ucy5yZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHRcdCkubWVyZ2VkO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XHJcblx0fVxyXG5cclxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpWzBdLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbiAoY29sdW1uQXJyYXksIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbkFycmF5WzBdO1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xyXG5cclxuXHRcdGlmIChpc0xlYWYpIHtcclxuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcclxuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XHJcblx0XHRcdFx0W2NvbHVtbklkXTogW11cclxuXHRcdFx0fSkgLSAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihcclxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uT2JqZWN0IChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoYXJyYXlbaV0pID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uIChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gYXJyYXlbaV07XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRpZiAoY29sdW1uID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRcdHJldHVybiBpO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoY29sdW1uKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24sIENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RFbnRyeSwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3Qge1xyXG5cdHJlcXVlc3RzOiBDcmVhdGVSZXF1ZXN0RW50cnlbXSA9IFtdO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcclxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdFx0cHJpdmF0ZSBicmVha3VwQnlQYXJlbnQgPSBmYWxzZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSByZXF1ZXN0UmVzb3VyY2UuY29sdW1ucztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcclxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChjb2xsZWN0aW9uRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdFJlc291cmNlO1xyXG5cdH1cclxuXHJcblx0c2V0UmVxdWVzdFBhcmVudCAocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0gcmVxdWVzdFJlc291cmNlLnJlcXVlc3Q7XHJcblxyXG5cdFx0aWYgKHBhcmVudFR5cGUgPT09ICdWb2lkJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJlcXVlc3QucGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XHJcblx0XHRyZXF1ZXN0LnBhcmVudElkID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRydW4gKCkge1xyXG5cdFx0aWYgKHRoaXMuYnJlYWt1cEJ5UGFyZW50KSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcclxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkgPyBwYXJlbnRJZCA6IG51bGwsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gdGhpcy5jb21waWxhdGlvbikge1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuY29tcGlsYXRpb25bcGFyZW50VHlwZV07XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcclxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0aGFzUGFyZW50ID8gcGFyZW50SWQgOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2VcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXHJcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0cztcclxuXHR9XHJcblxyXG5cdGluaXRpYWxpemVSZXF1ZXN0ICgpOiBDcmVhdGVSZXF1ZXN0RW50cnkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0cmVxdWVzdDoge1xyXG5cdFx0XHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcclxuXHRcdFx0XHRpdGVtczoge30sXHJcblx0XHRcdFx0Y29sdW1uczoge31cclxuXHRcdFx0fSxcclxuXHRcdFx0Y29sdW1uczogdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKSxcclxuXHRcdFx0aXRlbXM6IHt9LFxyXG5cdFx0XHRjb2xsZWN0aW9uczogdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFt0aGlzLmxvY2FsQ29sbGVjdGlvbkNhY2hlLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXNdLFxyXG5cdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0KVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXMsIHJlcXVlc3RQYXJlbnRJZCwgZGVzdGluYXRpb24pIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBkZXN0aW5hdGlvbi5yZXF1ZXN0O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gZGVzdGluYXRpb24uaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAocmVxdWVzdC5pdGVtVHlwZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XHJcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgodGhpcy5wYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRcdGxldCBsaW5rcztcclxuXHJcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcclxuXHRcdFx0XHRcdHJlcXVlc3QucGFyZW50SWRbaXRlbUlkXSA9IHJlcXVlc3RQYXJlbnRJZDtcclxuXHJcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbGxlY3Rpb25zLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblxyXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblxyXG5cdFx0XHRcdGlmIChjaGlsZEVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRsaW5rcyA9IGl0ZW1SZXF1ZXN0LmxpbmtzID0ge307XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xyXG5cdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcclxuXHRcdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXS5wdXNoKGNoaWxkSWQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5JbmZvLCBDb2x1bW5TZXQsIGluQXJyYXksIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmxldCBjdXJyZW50SWQgPSAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeSB7XHJcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xyXG5cdHF1ZXJ5OiBhbnk7XHJcblx0Y29sdW1uczogQ29sdW1uU2V0O1xyXG5cclxuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XHJcblxyXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0aXRlbXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdHJlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHRkZWZlcnJlZDogYW55O1xyXG5cdHByb21pc2U6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PjtcclxuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0aGFzRWRpdFJlc291cmNlcyA9IGZhbHNlO1xyXG5cdGhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIG9wdGlvbnM6IGFueVxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcclxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcclxuXHJcblx0XHR0aGlzLml0ZW1UeXBlID0gaXRlbVR5cGU7XHJcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cdFx0dGhpcy5xdWVyeSA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAoaXRlbUVudHJ5Q29tcG91bmQ6IHtjb2x1bW5zOiBDb2x1bW5TZXQsIGl0ZW1zOiBJdGVtRW50cnlbXX0pOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1ucyA9IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnM7XHJcblx0XHR0aGlzLmluaXRpYWwgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcztcclxuXHRcdHRoaXMuaXRlbXMgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcy5zbGljZSgpO1xyXG5cclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcclxuXHJcblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XHJcblx0fVxyXG5cclxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGUsIGl0ZW1JZCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxyXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZCk6IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZCB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pdGVtSWQgPT09IGl0ZW1JZClcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChhY2N1bXVsYXRvciA9IFtdKTogSXRlbUlkW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcclxuXHR9XHJcblxyXG5cdC8vIHRoaXMgZG9lc24ndCByZXZlcnQgdXBkYXRlc1xyXG5cdHJldmVydENoYW5nZXMgKCkge1xyXG5cdFx0Ly8gc2F2ZSB0aGVzZSBiZWZvcmUgcmVzZXR0aW5nIHRoZSBpdGVtcyBwcm9wZXJ0eVxyXG5cdFx0Y29uc3QgYWRkZWRJdGVtcyA9IDxJdGVtRW50cnlbXT4gdGhpcy5nZXRBZGRlZEl0ZW1zKCk7XHJcblx0XHRjb25zdCByZW1vdmVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0UmVtb3ZlZEl0ZW1zKCk7XHJcblxyXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaW5pdGlhbC5zbGljZSgpO1xyXG5cclxuXHRcdHRoaXMuaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzKFtdLCByZW1vdmVkSXRlbXMpO1xyXG5cdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhbXSwgYWRkZWRJdGVtcyk7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtcyAoXHJcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxyXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXHJcblx0KTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxyXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XHJcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XHJcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIHdoZW4gc2F2aW5nLCBpdGVtcyB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW4gbW9kaWZpZWQgYXJlIGFkZGVkIHRvIGluaXRpYWxcclxuXHRcdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XHJcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcclxuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdFx0XHRcdGlmIChwYXJlbnRDb2x1bW4gIT09IG51bGwgJiYgaXRlbUVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhcclxuXHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLFxyXG5cdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0Y2FsbE9uQWRkLFxyXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzIChcclxuXHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10sXHJcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCxcclxuXHRcdGNhbGxPbkFkZDogYm9vbGVhbiA9IHRydWUsXHJcblx0XHRjYWxsT25BY3RpdmF0ZTogYm9vbGVhbiA9IHRydWVcclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwsIHRoaXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb01vZGlmaWVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xyXG5cclxuXHRcdGlmIChjYWxsT25BY3RpdmF0ZSAmJiBjb2xsZWN0aW9uUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y29uc3Qgb25BY3RpdmF0ZUl0ZW0gPSBjb2xsZWN0aW9uUmVzb3VyY2VzWzBdLm9wdGlvbnMub25BY3RpdmF0ZUl0ZW07XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbUVudHJ5IG9mIGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpXHJcblx0XHRcdFx0b25BY3RpdmF0ZUl0ZW0oYWRkZWRJdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xyXG5cdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcclxuXHJcblx0XHRcdFx0aWYgKGNhbGxPbkFkZClcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAhaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCBpZEFycmF5KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdHVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcclxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdHVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChcclxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRlbmFibGVDYWxsYmFjaz86IGJvb2xlYW5cclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEZyb21Nb2RpZmllZCA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLml0ZW1zLCBmaWx0ZXJGdW5jdGlvbik7XHJcblx0XHRjb25zdCByZW1vdmVkRnJvbUluaXRpYWwgPSB1cGRhdGVJbml0aWFsID8gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaW5pdGlhbCwgZmlsdGVyRnVuY3Rpb24pIDogW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MocmVtb3ZlZEZyb21Jbml0aWFsLCByZW1vdmVkRnJvbU1vZGlmaWVkLCByZXN1bHRSZXNvdXJjZSwgZW5hYmxlQ2FsbGJhY2spO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyAoXHJcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwsXHJcblx0XHRjYWxsT25SZW1vdmU6IGJvb2xlYW4gPSB0cnVlXHJcblx0KTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRpZiAocmVtb3ZlZEZyb21Jbml0aWFsLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vblJlbW92ZUluaXRpYWwocmVtb3ZlZEZyb21Jbml0aWFsLCB0aGlzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcclxuXHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEZyb21Nb2Qgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcclxuXHRcdFx0cmVtb3ZlZEZyb21Nb2QuZGVhY3RpdmF0ZVJlc291cmNlcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcclxuXHRcdFx0Y29uc3QgcmVtb3ZlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5yZW1vdmVJdGVtUmVzb3VyY2VzKHJlbW92ZWRGcm9tTW9kaWZpZWQpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSByZW1vdmVkUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRpZiAoY2FsbE9uUmVtb3ZlKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPblJlbW92ZShyZW1vdmVkUmVzb3VyY2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChuZXdDb2x1bW5zKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIG5ld0NvbHVtbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihuZXdDb2x1bW5zLCByZXNwb25zZSwgaXRlbVR5cGUsIHRoaXMuaXRlbXMpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcy5jYWxsKFxyXG5cdFx0XHRcdFx0dGhpcywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaykge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XHJcblxyXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0ZXh0ZW5kIChxdWVyeUNhbGxiYWNrLCBjb2xsZWN0aW9uUmVzb3VyY2UsIGNhbGxPbkFkZD8sIHVwZGF0ZUluaXRpYWw/KSB7XHJcblx0XHRjb25zdCBleHRlbmRlZFF1ZXJ5ID0gdGhpcy5leHRlbmRRdWVyeShxdWVyeUNhbGxiYWNrKS5vYmplY3Q7XHJcblx0XHRjb25zdCBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdGV4dGVuZGVkUXVlcnksXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmNyZWF0ZU5vdEluKHRoaXMuZ2V0SWRBcnJheSgpKVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0b2RvOiBhbHNvIGRvIHRoZSBsaW1pdCBjaGVjayBpbiBiYXRjaEV4dGVuZFxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0Ly8gV2hlbiB0aGVyZSdzIGEgbGltaXQgd2Ugd2FudCB0byBmZXRjaCBhbGwgaXRlbXMgYmVjYXVzZSB3ZSB3aWxsIGRvIHNvcnRpbmcgYW5kIHNwbGljaW5nIG9mIHRoZSBleGNlc3MgaXRlbXNcclxuXHRcdFx0dGhpcy5vcHRpb25zLmxpbWl0ICE9PSBudWxsID9cclxuXHRcdFx0XHRleHRlbmRlZFF1ZXJ5IDpcclxuXHRcdFx0XHRmdWxsUXVlcnlcclxuXHRcdCkudGhlbihyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Ly8gcmVtb3ZlQWJzZW50SXRlbXMocmVzcG9uc2UpOyBUT0RPOiB3ZSBjYW4gb25seSBkbyB0aGlzIHdoZW4gd2UgcmVxdWVzdCAqYWxsKiB0aGUgaXRlbXNcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1t0aGlzLml0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHRoaXMucGFyZW50LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGNhbGxPbkFkZCwgZmFsc2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdHF1ZXVlUmVsb2FkICgpIHtcclxuXHRcdHRoaXMucmVsb2FkUXVldWVkID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XHJcblx0fVxyXG5cclxuXHRleHBhbmRDb2x1bW5zIChjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBleHBhbnNpb25SZXN1bHQubWVyZ2VkO1xyXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHRoaXMuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xyXG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFVwZGF0ZWRJdGVtcyAoKSB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpICYmIGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aGFzQWRkZWRJdGVtcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XHJcblx0fVxyXG5cclxuXHRoYXNVcGRhdGVkSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgbW9kaWZpZWRJdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkSXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXHJcblx0XHRjb25zdCBjdXJyZW50UmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Ly8gd2UnbGwgYWRkIHRoZSBpdGVtIHJlc291cmNlcyBiYWNrIGluIGxhdGVyXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLm9wdGlvbnNbaXNTdWJ0YWJDaGFuZ2UgPyAnY2xlYXJPblN1YlRhYkNoYW5nZScgOiAnY2xlYXJPblRhYkNoYW5nZSddKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bmV3UmVzb3VyY2VzLnB1c2goY29sbGVjdGlvblJlc291cmNlKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UuZW50cnkucmVzb3VyY2VzLnB1c2goaXRlbVJlc291cmNlKTsgLy8gcmVzb3VyY2VzIHNob3VsZCBiZSBlbXB0eSBieSBub3cgOi0pXHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBuZXdSZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xyXG5cdFx0XHRyZXNvdXJjZS5vcHRpb25zLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0W2NvbHVtbi5pZF0gPSBjb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsb25lIChwYXJlbnQsIGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2xvbmVkSXRlbUVudHJ5IG9mIGNsb25lZEl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKHRoaXMub3B0aW9ucywgcGFyZW50KVxyXG5cdFx0KVxyXG5cdFx0XHQucmVzb2x2ZShcclxuXHRcdFx0XHR7Y29sdW1uczogdGhpcy5jb2x1bW5zLCBpdGVtczogY2xvbmVkSXRlbUVudHJpZXN9XHJcblx0XHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGZpbHRlckFycmF5IH0gZnJvbSAnLi4vY2xhc3Nlcy9VdGlsJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlSXRlbUlkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0aXRlbXM6IEl0ZW1SZXNvdXJjZVtdO1xyXG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge307XHJcblx0Y29sdW1ucztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcclxuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XHJcblx0XHR0aGlzLml0ZW1zID0gW107XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblxyXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHsgLy8gc2hvdWxkIGJlIGZhc3RcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XHJcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogb3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdGxldCBpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTtcclxuXHJcblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbVJlc291cmNlID0gY29uc3RydWN0b3IoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXHJcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxyXG5cdCAqXHJcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cclxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XHJcblx0ICovXHJcblx0cmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZpbHRlckFycmF5KFxyXG5cdFx0XHR0aGlzLml0ZW1zLFxyXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkFkZChpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNhbGxPblJlbW92ZSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHZvaWQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZpcnN0KGNhbGxiYWNrKSAhPT0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnkgKGFyZ3VtZW50KSB7XHJcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1hcCAoYXJndW1lbnQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXHJcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlZHVjZTxUPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgdmFsdWU6IFQpID0+IFQsIHZhbHVlOiBUKTogVCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSwgdmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXMsIGVuYWJsZUNhbGxiYWNrcyk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHQudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1IYW5kbGVyLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSBleHRlbmRzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0aXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0b3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0c3VwZXIoaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdHNhdmUgKCkge1xyXG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcclxuXHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ICE9PSBudWxsICYmIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCkpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFtdLCBbY29sbGVjdGlvbkVudHJ5XSk7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB1c2UgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHRtb3ZlSXRlbXMgKGlkQXJyYXksIGRlc3RpbmF0aW9uLCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBzYXZpbmcgZW5hYmxlZCcpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBpdGVtVHlwZSBtaXNtYXRjaCcpO1xyXG5cclxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gPEl0ZW1SZXNvdXJjZVtdPiBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2gocmVtb3ZlZEl0ZW1SZXNvdXJjZS5lbnRyeSk7XHJcblxyXG5cdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHJcblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheSwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrcyA9IHRydWU7XHJcblxyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IDxJdGVtUmVzb3VyY2VbXT4gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtIChpdGVtSWQsIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5LCBlbmFibGVDYWxsYmFja3MgPSB0cnVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRlbXBsYXRlKHRoaXMuZW50cnkuaXRlbVR5cGUpLnRoZW4odGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0XHRcdGxldCBpdGVtUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlc0FycmF5KSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWwoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5maWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWUuZGVyaXZlZFxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIHRoaXMsIGZhbHNlLCBmYWxzZSk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW0gKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhbdmFsdWVzXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtbkluZm8sIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBTExfUEVSTUlTU0lPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcclxuXHJcblx0ZGVmZXJSZXF1ZXN0ID0gZmFsc2U7XHJcblx0ZGVmZXJyZWQ7XHJcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xyXG5cclxuXHRpbml0aWFsOiBGaWVsZE1hcDtcclxuXHRtb2RpZmllZDogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5TZXRcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGRlZmVyIChkZWZlclJlcXVlc3QpOiB0aGlzIHtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3RcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVmZXJyZWQgKGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiB0aGlzIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcblx0XHR0aGlzLnByb2Nlc3MoaW5pdGlhbCwgZGVyaXZlZCk7XHJcblx0XHR0aGlzLnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJlamVjdCAoZXJyb3I/KTogdGhpcyB7XHJcblx0XHQvLyB0b2RvOiB0cmFuc2xhdGVkIGVycm9yXHJcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzIChpbml0aWFsLCBkZXJpdmVkKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSBpbml0aWFsO1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcclxuXHJcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWwgKGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OU307XHJcblxyXG5cdFx0dGhpcy51cGRhdGVGaWVsZHMoaW5pdGlhbCk7XHJcblx0XHR0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0XHR0aGlzLnNldE1vZGlmaWVkKG1vZGlmaWVkKTtcclxuXHJcblx0XHR0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xyXG5cdFx0dGhpcy5zZXRDcmVhdG9yKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRDcmVhdG9yICgpOiB0aGlzIHtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRvciA9IHRoaXMuYXV0aEludGVyZmFjZS5nZXRVc2VySWQoKTtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRlZCA9IG1vbWVudCgpO1xyXG5cdFx0dGhpcy5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmRDb252ZXJzaW9uTWFwKHRoaXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXHJcblx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdG5ld0l0ZW1JZCxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxyXG5cdFx0XHRjb2x1bW5zXHJcblx0XHQpO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkubW9kaWZpZWQgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUodGhpcy5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkuc2V0UGFyZW50KFxyXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xyXG5cdH1cclxuXHJcblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHMpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XHJcblx0XHRjb25zdCBmaWx0ZXJlZENvbHVtbnM6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb2x1bW5JZHMuaW5kZXhPZihjb2x1bW4uaWQpICE9PSAtMSlcclxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRcdGlmICghY29sdW1uLmlzTGVhZilcclxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlcml2ZWRbY29sdW1uLnBhdGhdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHR0aGlzLnJlc291cmNlcyA9IFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZVJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlczsgLy8gb24gb2YgdGhlIGRlYWN0aXZhdGUgY2FsbGJhY2tzIG1pZ2h0IGNhbGwgY2xlYXJSZXNvdXJjZXNcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0cmVzb3VyY2UuZGVhY3RpdmF0ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGRzICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdC8vIHRvZG86IHR5cGUgY29sdW1uRXhwYW5zaW9uUmVzdWx0XHJcblx0ZXhwYW5kIChtYWluLCBkZXJpdmVkLCBjb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLmRlcml2ZWQsXHJcblx0XHRcdGRlcml2ZWQsXHJcblx0XHRcdGRpZmZlcmVuY2UuZGVyaXZlZFxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Ly8ga2V5OiBpbml0aWFsIC8gbW9kaWZpZWRcclxuXHQvLyBmaWVsZHMgKmhhdmVuJ3QqIGJlZW4gZm9ybWF0dGVkIHlldFxyXG5cdHVwZGF0ZUZpZWxkcyAoc291cmNlLCBvdmVyd3JpdGUgPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xyXG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQubWFpbjtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShtb2RpZmllZCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtVmFsdWUgKGZpZWxkcywgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpZWxkc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0bGV0IG5ld1ZhbHVlO1xyXG5cclxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRuZXdWYWx1ZSA9IHRoaXMucGFyZW50Lml0ZW1JZDtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHRuZXdWYWx1ZSA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtRmllbGRzIChjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoaW5pdGlhbCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUobW9kaWZpZWQsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0ICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdChcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCkgPyB7fSA6IHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzZXREaXNwbGF5TmFtZSAoKTogdGhpcyB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XHJcblxyXG5cdFx0aWYgKHJlc3VsdClcclxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldERpc3BsYXlOYW1lICgpIHtcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcblxyXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cclxuXHRcdFx0XHRcdGZpZWxkcy5iZWRyaWpmIDogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXHJcblx0XHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkc1t0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZCh0aGlzLml0ZW1UeXBlKV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJldHVybkFsbCBSZXR1cm5zIGFsbCBpbml0aWFsIHZhbHVlcyBpZiB0cnVlXHJcblx0ICogQHJldHVybnMge09iamVjdH1cclxuXHQgKi9cclxuXHRnZXRDaGFuZ2VzIChyZXR1cm5BbGwgPSBmYWxzZSkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NrYWJsZSAoKSB7XHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFzQ2hhbmdlcyAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNldE1vZGlmaWVkICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmNsb25lKFxyXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcclxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0SW5pdGlhbCAodmFsdWVzLCBlbmFibGVDYWxsYmFja3M/KTogdGhpcyB7XHJcblx0XHRsZXQgcHJldmlvdXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxyXG5cdCAqL1xyXG5cdHNldE1vZGlmaWVkICh2YWx1ZXM/KTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gY29sdW1ucy5yZXNwb25zZVt0aGlzLml0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB7fTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxyXG5cdFx0XHRcdFx0XHQvLyBpZiAoREVWX01PREUpXHJcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHJcblx0XHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0XHRyZXNvdXJjZS5maWVsZHMgPSBtb2RpZmllZDtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldERlcml2ZWQgKHZhbHVlcyk6IHRoaXMge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCk6IHRoaXMge1xyXG5cdFx0dGhpcy5wYXJlbnQgPSB7XHJcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cyk6IHRoaXMge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XHJcblxyXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcclxuXHRjb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbn07XHJcblx0ZmllbGRzOiBGaWVsZE1hcDtcclxuXHRkZXJpdmVkOiBGaWVsZE1hcDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZW50cnkuZGVyaXZlZDtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblx0fVxyXG5cclxuXHRpc05ld1Jlc291cmNlIChyZXNvdXJjZSkge1xyXG5cdFx0cmV0dXJuIHJlc291cmNlLmVudHJ5LmlzTG9jYWwoKSAmJlxyXG5cdFx0XHRyZXNvdXJjZS50cmFuc2FjdGlvbnMgPT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuaXNMb2NhbCgpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmVudHJ5LnJlc291cmNlcztcclxuXHRcdGNvbnN0IGluZGV4ID0gcmVzb3VyY2VzLmluZGV4T2YodGhpcyk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGUodGhpcy5lbnRyeSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBWaWV3UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge0FwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgY3JlYXRlUGF0aCwgTG9ja1NlcnZpY2V9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRmllbGRNYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0UmVzb3VyY2UgZXh0ZW5kcyBJdGVtUmVzb3VyY2Uge1xyXG5cdGxvY2FsQ29waWVzOiBGaWVsZE1hcFtdID0gW107XHJcblx0dHJhbnNhY3Rpb25zOiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zKTtcclxuXHJcblx0XHRlbnRyeS5zZXRNb2RpZmllZCgpO1xyXG5cclxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQ7XHJcblx0fVxyXG5cclxuXHRzdGFydCAoKSB7XHJcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzID0gW107XHJcblxyXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcclxuXHR9XHJcblxyXG5cdHJvbGxiYWNrIChjYWxsT25EZWFjdGl2YXRlID0gZmFsc2UpIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmIChjYWxsT25EZWFjdGl2YXRlICYmIHRoaXMuaXNOZXdSZXNvdXJjZSh0aGlzKSAmJiB0aGlzLmxvY2FsQ29waWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0dGhpcy5kZWFjdGl2YXRlKCk7XHJcblx0fVxyXG5cclxuXHRjb21taXQgKGluaXRpYWwgPSBmYWxzZSkge1xyXG5cdFx0aWYgKCFpbml0aWFsKVxyXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzLnBvcCgpO1xyXG5cclxuXHRcdC8vIGNvbXBsZXRlZCB0cmFuc2FjdGlvbnNcclxuXHRcdGlmICh0aGlzLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLnRyYW5zYWN0aW9ucyA9IDA7XHJcblxyXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKztcclxuXHR9XHJcblxyXG5cdGdldExvY2FsQ29weSAoKSB7XHJcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmIChsb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBsb2NhbENvcGllc1tsb2NhbENvcGllcy5sZW5ndGggLSAxXTtcclxuXHR9XHJcblxyXG5cdGNvcHlGaWVsZHMgKGRlc3RpbmF0aW9uPykge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHJcblx0XHRpZiAoZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZGVzdGluYXRpb24gPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkubW9kaWZpZWQsIGRlc3RpbmF0aW9uLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHR9XHJcblxyXG5cdHNldEZpZWxkcyAodmFsdWVzLCBjYWxsT25DaGFuZ2UpIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcztcclxuXHRcdGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XHJcblx0XHRsZXQgcHJldmlvdXM7XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjYWxsT25DaGFuZ2UgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXHJcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdGhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UgJiYgaGFzQ2hhbmdlcylcclxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cykge1xyXG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAocGFyYW1ldGVycz8pIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBwYXJhbWV0ZXJNYXAgPSB7fTtcclxuXHJcblx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdFx0cGFyYW1ldGVyTWFwLFxyXG5cdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRcdFt7fSwgcGFyYW1ldGVyc11cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRpdGVtRW50cnkuaXNMb2NrYWJsZSgpID9cclxuXHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayhpdGVtRW50cnkpIDpcclxuXHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Ly8gYWRkVG9Db2xsZWN0aW9ucyBpcyBjYWxsZWQgaW4gY2hhbmdlc1Byb2Nlc3NvclxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3IuZXhlY3V0ZShbaXRlbUVudHJ5XSwgW10sIHBhcmFtZXRlck1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiLy8gc2hvdWxkIGJlIG9yZGVyZWQgYnkgZGVwZW5kZW5jeSFcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblZpZXdSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL1ZpZXdSZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vRWRpdFJlc291cmNlJztcclxuIiwiaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGUsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEl0ZW1IYW5kbGVyLFxyXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLFxyXG5cdExvY2FsQ2FjaGUsXHJcblx0UXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBMb2NhbENhY2hlRmFjdG9yeSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0QXV0aEludGVyZmFjZSxcclxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXHJcblx0UHJvbWlzZUludGVyZmFjZVxyXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxyXG5cdENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXHJcblx0SXRlbUlkLFxyXG5cdEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0SXRlbVJlc291cmNlSXRlbVR5cGVNYXAsXHJcblx0SXRlbVR5cGUsXHJcblx0VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCxcclxuXHRUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUFkbWluaXN0cmF0b3Ige1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBsb2NhbENhY2hlTWFuYWdlcjogTG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gaWQgY2FuIGJlIGEga2V5d29yZCBvciBhIGxvY2FsIGlkIChpbiBjYXNlIG9mIGEgcmVmcmVzaClcclxuXHRnZXRJdGVtRGVmaW5pdGlvbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IGFueSwgb3B0aW9uczogYW55KSB7XHJcblx0XHRjb25zdCBzdGF0ZUtleTogYW55ID0gdGhpcy5rZXlTZXJ2aWNlLnBhcnNlU3RhdGVLZXkoaXRlbUlkKTtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHtpdGVtVHlwZTogaXRlbVR5cGUsIG9wdGlvbnM6IG9wdGlvbnMsIGl0ZW1JZDogaXRlbUlkfTtcclxuXHJcblx0XHRpZiAoc3RhdGVLZXkgIT09IG51bGwpIHtcclxuXHRcdFx0c3dpdGNoIChzdGF0ZUtleS50eXBlKSB7XHJcblx0XHRcdFx0Y2FzZSAnbmV3JzpcclxuXHRcdFx0XHRcdC8vIGlmIChzdGF0ZUtleS50ZW1wbGF0ZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdFx0Ly8gXHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt0eXBlOiBzdGF0ZUtleS50ZW1wbGF0ZX07XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0Lml0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlICdkdXBsaWNhdGUnOlxyXG5cdFx0XHRcdFx0b3B0aW9ucy5kdXBsaWNhdGUgPSBzdGF0ZUtleS5pdGVtSWQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQpIC8vIHRvZG86IHJlZmFjdG9yIHRoaXNcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7fTtcclxuXHJcblx0XHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gc3RhdGVLZXkuaXRlbUlkO1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxEdXBsaWNhdGVJZCgpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0Lml0ZW1JZCA9IGl0ZW1JZDtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uTWF0Y2hlciAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhZGRUb1RhYjogYm9vbGVhbik6IENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIHRydWUpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdC8vIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBhcmUgbm8gY29sbGVjdGlvbnMgdG8gYWRkIHRoZSBpdGVtIHRvLCBidXQgd2Ugc3RpbGwgd2FudCB0byBzYXZlIHRoZSBpdGVtXHJcblx0XHRcdGlmIChhZGRUb1RhYilcclxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25NYXRjaGVyO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRpdGxlKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5SWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0Ly8gdG9kbyB0eXBlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAgfCBJdGVtRW50cnlcclxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoXHJcblx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQgIT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLm1haW4gOlxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZSxcclxuXHRcdFx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1zQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogbnVtYmVyW10sIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW1zKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkcyxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbXNCeVF1ZXJ5IChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBlbnRyeU9wdGlvbnMgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHt9O1xyXG5cclxuXHRcdHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSA9IGVudHJ5T3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkUGFyZW50Q29uZGl0aW9uKHF1ZXJ5LCBlbnRyeU9wdGlvbnMucGFyZW50KSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBlbnRyeU9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0RHVwbGljYXRlQnlJZCAoaXRlbVR5cGU6IHN0cmluZywgZHVwbGljYXRlSWQ6IG51bWJlciwgb3B0aW9uczogYW55KSB7XHJcblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvcHRpb25zID0ge307XHJcblxyXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCBkZWZpbml0aW9uID0gdGhpcy5nZXRJdGVtRGVmaW5pdGlvbihcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXREdXBsaWNhdGVTdGF0ZUtleShkdXBsaWNhdGVJZCksXHJcblx0XHRcdG9wdGlvbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0SXRlbUJ5RGVmKGRlZmluaXRpb24sIGZhbHNlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSByZXR1cm4gdmFsdWUgaXMgZGVwZW5kZWQgb24gdGhlIHJldHVybiBsaW5rcyBib29sZWFuLiB0cnVlIHJldHVybnMgdGhlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAuXHJcblx0ICogVGhlIHR5cGUgaGFzIHRvIGJlIGFzc2VydGVkIGF0IHVzZSBzaW5jZSB5b3Ugb25seSBrbm93IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0gb3B0aW9uc1xyXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0dXJuTGlua3NcclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUm9vdFxyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+fVxyXG5cdCAqL1xyXG5cdGdldE5ld1Jlc291cmNlIChcclxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRvcHRpb25zOiBhbnkgPSB7fSxcclxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRpc1Jvb3Q6IGJvb2xlYW4gPSBmYWxzZVxyXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IG1haW4gPSBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnlSZXNvdXJjZS5tYWluLCBvcHRpb25zLCBpc1Jvb3QpO1xyXG5cdFx0XHRcdGNvbnN0IGxpbmtlZCA9IHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCwgb3B0aW9ucywgdHJ1ZSk7IC8vIGRvIHRoaXMgYmVmb3JlaGFuZFxyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuTGlua3MgPyB7bWFpbjogbWFpbiwgbGlua2VkOiBsaW5rZWR9IDogbWFpbjtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXHJcblx0XHRcdG9wdGlvbnM6IHtcclxuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLCAvLyB3ZSBuZWVkIHRoZSBkZWZhdWx0IGNvbHVtbiB2YWx1ZVxyXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGdldExpbmtDb2xsZWN0aW9uc0RlZiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBsaW5rRmllbGQ6IHN0cmluZywgb3B0aW9uczogYW55KSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXHJcblx0XHRcdGxpbmtUeXBlOiBsaW5rVHlwZSxcclxuXHRcdFx0bGlua0lkQXJyYXk6IGxpbmtJZEFycmF5LFxyXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcclxuXHRcdFx0b3B0aW9uczoge1xyXG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGVudHJ5ID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXHJcblx0XHRcdFx0XHRlbnRyeSxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25Gcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxyXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxyXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBgcGFyZW50YCBpbiBvcHRpb25zXHJcblx0ICovXHJcblx0Z2V0TGlua0NvbGxlY3Rpb24gKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZDogbnVtYmVyLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IGxpbmtUeXBlLCBpdGVtSWQ6IGxpbmtJZH07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRlbnRyeU9wdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcclxuXHRcdFx0XHRcdGVudHJ5LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0TGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXHJcblx0XHRcdGxpbmtUeXBlLFxyXG5cdFx0XHRsaW5rSWRBcnJheSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXApID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKFxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRMaW5rQ29sbGVjdGlvbnNGcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcclxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rVHlwZSxcclxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcclxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcclxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlbXSkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMoXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcclxuXHRcdFx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEFsbExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSlcclxuXHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxyXG5cdFx0XHRcdFx0XHRsaW5rVHlwZSxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbbGlua1R5cGVdLFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5RGVmIChkZWZpbml0aW9uOiBhbnksIGlzUm9vdDogYm9vbGVhbikge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcclxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcclxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtSWQsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhkZWZpbml0aW9uLm9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGl0ZW1FbnRyeUNvbXBvdW5kID0+IHtcclxuXHRcdFx0XHRsZXQgbWFpbkVudHJ5OiBJdGVtRW50cnk7XHJcblxyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlDb21wb3VuZCBpbnN0YW5jZW9mIEl0ZW1FbnRyeSlcclxuXHRcdFx0XHRcdG1haW5FbnRyeSA9IGl0ZW1FbnRyeUNvbXBvdW5kO1xyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoaXRlbUVudHJ5Q29tcG91bmQubGlua2VkLCBkZWZpbml0aW9uLm9wdGlvbnMsIGZhbHNlKTtcclxuXHRcdFx0XHRcdG1haW5FbnRyeSA9IGl0ZW1FbnRyeUNvbXBvdW5kLm1haW47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobWFpbkVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMsIGlzUm9vdCk7IC8vIGlzUm9vdFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbG9uZUl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLCBvcHRpb25zOiBhbnkpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtUmVzb3VyY2UuZW50cnkuY2xvbmUoKSwgb3B0aW9ucywgZmFsc2UpO1xyXG5cdH1cclxuXHJcblx0Y2xvbmVDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSwgb3B0aW9uczogYW55LCBjb252ZXJzaW9uTWFwOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0bGV0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cGFyZW50ID0gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxyXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuY2xvbmUocGFyZW50LCBjb252ZXJzaW9uTWFwKSxcclxuXHRcdFx0b3B0aW9uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHNhdmVDdXJyZW50TG9jYWxDYWNoZSAoXHJcblx0XHRjbG9zZVRhYj86IGJvb2xlYW4sXHJcblx0XHRwYXJhbWV0ZXJzPzogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcclxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnNhdmUoY2xvc2VUYWIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKTtcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRDb2xsZWN0aW9ucyAoKTogQ29sbGVjdGlvbkNhY2hlIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5jb2xsZWN0aW9ucztcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRJdGVtcyAoKTogSXRlbUNhY2hlIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRDaGFuZ2VzICgpIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2l0ZW1BZG1pbmlzdHJhdG9yOiBObyByb290IGl0ZW0hJyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGxvY2FsQ2FjaGUucm9vdEl0ZW0sXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnNcclxuXHRcdCkucHJvY2VzcygpO1xyXG5cdH1cclxuXHJcblx0YWRkU2luZ2xlSXRlbSAoXHJcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnM6IGFueSxcclxuXHRcdGlzUm9vdD86IGJvb2xlYW4sXHJcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcclxuXHQpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSksIG9wdGlvbnMsIGlzUm9vdCk7XHJcblx0fVxyXG5cclxuXHRhZGRTaW5nbGVJdGVtcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBvcHRpb25zOiBhbnkpIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkQ29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnM6IGFueSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSBsb2NhbENhY2hlLmNvbGxlY3Rpb25zO1xyXG5cclxuXHRcdGlmICghY29sbGVjdGlvbkNhY2hlLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpXHJcblx0XHRcdGNvbGxlY3Rpb25DYWNoZS5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0xpbmtlZEl0ZW1zIChsaW5rZWRFbnRyaWVzOiBUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwW10sIG9wdGlvbnM6IGFueSwgYWRkVG9Db2xsZWN0aW9uczogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBlbnRyeS5pdGVtVHlwZTtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSBlbnRyeS5pdGVtRW50cmllcztcclxuXHRcdFx0bGV0IGNvbGxlY3Rpb25NYXRjaGVyO1xyXG5cclxuXHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0ucHVzaChsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlKSk7XHJcblxyXG5cdFx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGlmIChpdGVtVHlwZSA9PT0gJ1Byb2plY3Rub3RpdGllJykge1xyXG5cdFx0XHRcdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0XHRcdFx0bG9jYWxDYWNoZS50YWJSZXF1ZXN0UGFyYW1ldGVycyxcclxuXHRcdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFx0XHRcdFt7fSwge25vX25vdGlmaWNhdGlvbjogdHJ1ZX1dXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxyXG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5hZGRUb0NvbGxlY3Rpb25zKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbENhY2hlICgpOiBMb2NhbENhY2hlIHtcclxuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XHJcblx0fVxyXG5cclxuXHRyZXNldExvY2FsQ2FjaGUgKCkge1xyXG5cdFx0Y29uc3Qgb2xkTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMubG9jYWxDYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblxyXG5cdFx0b2xkTG9jYWxDYWNoZS5jbGVhclJlc291cmNlcygpO1xyXG5cclxuXHRcdHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuc2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpLCBsb2NhbENhY2hlKTtcclxuXHR9XHJcblxyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgdHJ1ZSlcclxuXHRcdFx0LmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcclxuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCBmYWxzZSlcclxuXHRcdFx0LnJlbW92ZUZyb21Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0c2F2ZUxvY2FsIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbVJlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5zZXREaXNwbGF5TmFtZSgpO1xyXG5cdFx0dGhpcy5hZGRUb0NvbGxlY3Rpb25zKFtpdGVtRW50cnldKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlSW50ZXJmYWNlLndoZW4oaXRlbVJlc291cmNlKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1JZE1hcCAoY29sbGVjdGlvbk1hcDogYW55LCBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBvbGRJZCBpbiBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG5ld0lkID0gY29udmVyc2lvbk1hcFtvbGRJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtvbGRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25NYXBbbmV3SWRdID0gY29sbGVjdGlvbk1hcFtvbGRJZF07XHJcblx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW29sZElkXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9uczogYW55LCBwcm9jZXNzT3B0aW9ucyA9IHRydWUpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHRwcm9jZXNzT3B0aW9ucyA/IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhyZXNvdXJjZU9wdGlvbnMpIDogcmVzb3VyY2VPcHRpb25zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xyXG5cdH1cclxuXHJcblx0b25CZWZvcmVTYXZlIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvbkJlZm9yZVNhdmUnLCBrZXksIGNhbGxiYWNrKTtcclxuXHR9XHJcblxyXG5cdG9uU2F2ZVN1Y2Nlc3MgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVN1Y2Nlc3MnLCBrZXksIGNhbGxiYWNrKTtcclxuXHR9XHJcblxyXG5cdG9uU2F2ZVdpdGhvdXRDbG9zaW5nIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGtleSwgY2FsbGJhY2spO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGUge1xyXG5cdGVudHJpZXM6IHtcclxuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0XHRbaXRlbUlkOiBudW1iZXJdOiBJdGVtRW50cnlcclxuXHRcdH1cclxuXHR9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGlmIChjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtSWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSBpbnN0YW5jZW9mIEl0ZW1FbnRyeSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dG9BcnJheSAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHR9XHJcblxyXG5cdGdldCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0XHJcblx0Y29udGFpbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0aWYgKHBhcmVudFR5cGUgPT09IHBhcmVudC5pdGVtVHlwZSAmJiBwYXJlbnRJZCA9PSBwYXJlbnQuaXRlbUlkKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgZW50cnlNYXAgPSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcclxuXHJcblx0XHRkZWxldGUgZW50cnlNYXBbb2xkSXRlbUlkXTtcclxuXHRcdHJldHVybiBlbnRyeU1hcFtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRtYXRjaFF1ZXJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcXVlcnkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxyXG5cdFx0KS5tYXRjaFF1ZXJ5KHF1ZXJ5Lm9iamVjdCkgPT09IHRydWU7IC8vIFRPRE86IG1heWJlP1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlTZXJ2aWNlIHtcclxuXHQvLyB0b2RvOiB0cmFuc2xhdGVcclxuXHR1bmRlZmluZWRJdGVtRXJyb3IgPSAnSGV0IG9wZ2V2cmFhZ2RlIGl0ZW0gYmVzdGFhdCBuaWV0IC8gSmUgaGVidCBuaWV0IHZvbGRvZW5kZSByZWNodGVuIG9tIGRpdCBpdGVtIHRlIGJla2lqa2VuJztcclxuXHRBTExfUEVSTUlTU0lPTlMgPSA3O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbHVtbnM6IHRydWUsXHJcblx0XHRcdFx0cGFyZW50OiBudWxsLFxyXG5cdFx0XHRcdHRlbXBsYXRlT3B0aW9uczoge30sXHJcblx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zOiB7fSxcclxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVMb2NhbENvbnZlcnNpb25NYXAgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGRvRXh0ZW5kID0gZmFsc2UsIGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkge1xyXG5cdFx0Y29uc3QgYXBpSXRlbUlkID0gYXBpUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XHJcblxyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gaXRlbUlkO1xyXG5cclxuXHRcdGlmIChkb0V4dGVuZClcclxuXHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIHJlc3VsdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZExvY2FsQ29udmVyc2lvbk1hcCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXVtwYXJlbnRJZF0ubGlua3M7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xyXG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcclxuXHJcblx0XHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgbmV3SXRlbUlkPzogSXRlbUlkKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0bGV0IGNvbnZlcnNpb25NYXBFbnRyeTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRjb252ZXJzaW9uTWFwRW50cnkgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdO1xyXG5cclxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bmV3SXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdHRoaXMuZXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29udmVyc2lvblZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdGJhdGNoQ2xvbmUgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Ly8gdGhlIHRoZSBpdGVtcyBtaWdodCByZWZlcmVuY2UgZWFjaCBvdGhlciwgc28gdXBkYXRlIHRoZSBjb252ZXJzaW9uIG1hcCBmaXJzdFxyXG5cdFx0dGhpcy5iYXRjaEV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJpZXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkuY2xvbmUoY29udmVyc2lvbk1hcCkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRGdWxsTmFtZSAoZmlyc3ROYW1lLCBpbmZpeCwgbGFzdE5hbWUpIHtcclxuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXHJcblx0XHRcdC5jb25jYXQoJyAnLCBpbmZpeCkudHJpbSgpIC8vIGluZml4IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcclxuXHRcdFx0LmNvbmNhdCgnICcsIGxhc3ROYW1lKTtcclxuXHR9XHJcblxyXG5cdGdldFRpdGxlRmllbGQgKGl0ZW1UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0V4ZW1wbGFhcic6XHJcblx0XHRcdFx0cmV0dXJuICdzZXJpZW51bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxyXG5cdFx0XHRcdHJldHVybiAnbnVtbWVyJztcclxuXHRcdFx0Y2FzZSAnRmlsZXMnOlxyXG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcclxuXHRcdFx0Y2FzZSAnRnVuY3RpZSc6XHJcblx0XHRcdGNhc2UgJ1N0YW5kYWFyZGZ1bmN0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XHJcblx0XHRcdGNhc2UgJ1Zvb3JyYWFkbXV0YXRpZSc6XHJcblx0XHRcdFx0cmV0dXJuICdvbXNjaHJpanZpbmcnO1xyXG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2NvZGUnO1xyXG5cdFx0XHRjYXNlICdCZXRhYWxtaWRkZWwnOlxyXG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XHJcblx0XHRcdGNhc2UgJ0JyaWVmcGFwaWVyJzpcclxuXHRcdFx0Y2FzZSAnVGF4Q2xhc3MnOlxyXG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxyXG5cdFx0XHRjYXNlICdDb25kaXRpb24nOlxyXG5cdFx0XHRjYXNlICdGYWN0dXVybW9tZW50JzpcclxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnR3Jvb3Rib2VrJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVyJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdJbmh1dXJtYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VydGFyaWVmJzpcclxuXHRcdFx0Y2FzZSAnTm90aXRpZSc6XHJcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ1N0YWZmZWxncm9lcCc6XHJcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxyXG5cdFx0XHRjYXNlICdUYWFrJzpcclxuXHRcdFx0Y2FzZSAnVGFnJzpcclxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxyXG5cdFx0XHRjYXNlICdUaWpkJzpcclxuXHRcdFx0Y2FzZSAnVGl0ZWwnOlxyXG5cdFx0XHRjYXNlICdUeXBlJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRcdHJldHVybiAnbmFhbSc7XHJcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHQvLyBjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Ly8gY2FzZSAnUGVyc29uJzpcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHQvLyBvbmx5IHVzZSBkaXNwbGF5bmFtZSBmb3IgaXRlbXMgdGhhdCBkb250J3QgaGF2ZSBhIHNpbXBsZSwgd3JpdGFibGUgbmFtZSBmaWVsZFxyXG5cdFx0XHRcdC8vIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGZvciB0ZW1wbGF0ZWQgaXRlbXNcclxuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlSZXNwb25zZVByb2Nlc3NvcixcclxuXHRCYXRjaFN0YXR1cyxcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtblV0aWwsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0S2V5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlc3BvbnNlLCBBcGlUZW1wbGF0ZUl0ZW1UeXBlTWFwLCBFbnRyeVN0YXR1cywgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsXHJcblx0VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCwgVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXQgfSBmcm9tICcuL0NvbHVtblNldCc7XHJcblxyXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbi8vIHRvZG8gbWFrZSBjbGFzc1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1IYW5kbGVyIHtcclxuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XHJcblx0dGVtcGxhdGVzOiBBcGlUZW1wbGF0ZUl0ZW1UeXBlTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaEl0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IGFueSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8SXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4ge1xyXG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJ5U3RhdHVzLmVudHJ5O1xyXG5cdFx0Y29uc3Qgc3RhdHVzID0gZW50cnlTdGF0dXMuc3RhdHVzO1xyXG5cclxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5MT0NBTCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpXHJcblx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHR0ZW1wbGF0ZSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG9wdGlvbnMucGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoaXRlbUVudHJ5LCBzdGF0dXMsIG9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0gaXRlbUlkc1xyXG5cdCAqIEBwYXJhbSBvcHRpb25zXHJcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbUVudHJ5W10+fVxyXG5cdCAqXHJcblx0ICogRm9yIGV2ZXJ5IGl0ZW1pZCBmaW5kIHRoZSBzdGF0dXMgb2YgdGhlIEl0ZW1FbnRyeSBhbmQgcmVzb2x2ZSB0aGUgcHJvbWlzZXMgc28gdGhlIHJlc3VsdCBpc1xyXG5cdCAqIGEgdXNhYmxlIEl0ZW1FbnRyeVxyXG5cdCAqL1xyXG5cclxuXHRmZXRjaEl0ZW1zIChpdGVtVHlwZSwgaXRlbUlkcywgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGl0ZW1JZHMpXHJcblx0XHRcdGJhdGNoU3RhdHVzLmFkZCg8RW50cnlTdGF0dXM8SXRlbUVudHJ5Pj4gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSkpO1xyXG5cclxuXHRcdHByb21pc2VzLmVudHJpZXMgPSBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNSZXF1ZXN0cygpKVxyXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCksIG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5MT0NBTF0pKVxyXG5cdFx0XHRwcm9taXNlcy50ZW1wbGF0ZSA9IHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4ocmVzb2x2ZWQgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmJhdGNoUmVzb2x2ZShpdGVtVHlwZSwgYmF0Y2hTdGF0dXMsIG9wdGlvbnMuY29sdW1ucywgcmVzb2x2ZWQsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUNhY2hlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLCBvcHRpb25zKTogUHJvbWlzZTxJdGVtRW50cnk+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdDtcclxuXHJcblx0XHRzd2l0Y2ggKHN0YXR1cykge1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cnkpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpLFxyXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zLCBvcHRpb25zLmNvbHVtbnMpLmRpZmZlcmVuY2U7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBbaXRlbUlkXSwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcclxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0ZGVmYXVsdDogLy8gRU5UUllfU1RBVFVTLlJFU09MVkU6XHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIFtpdGVtSWRdLCByZXF1ZXN0Q29sdW1ucykudGhlbihcclxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5yZXNvbHZlKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgaXRlbUlkQ29udmVyc2lvbiA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcclxuXHJcblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XHJcblxyXG5cdFx0aXRlbUVudHJ5XHJcblx0XHRcdC5wcm9jZXNzTG9jYWwodGVtcGxhdGUuZmllbGRzLCB7fSwge30sIGl0ZW1JZENvbnZlcnNpb24pXHJcblx0XHRcdC5zZXRDcmVhdG9yKClcclxuXHRcdFx0LnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRtYWluOiBpdGVtRW50cnksXHJcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGl0ZW1JZENvbnZlcnNpb24sIGxvY2FsSXRlbUNhY2hlKVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtblNldDogQ29sdW1uU2V0LCByZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkKSB7IC8vIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdHNcclxuXHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xyXG5cdFx0XHR0aGlzLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxyXG5cdFx0XHRpbml0aWFsLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0LnJvb3QpLFxyXG5cdFx0XHRjb2x1bW5TZXRcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaFRlbXBsYXRlIChpdGVtVHlwZTogc3RyaW5nLCB0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9LCB0ZW1wbGF0ZUNvbHVtbnM6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IGhhc1RlbXBsYXRlT3B0aW9ucyA9IGhhc1Byb3BlcnRpZXModGVtcGxhdGVPcHRpb25zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkl0ZW1UeXBlID0gZ2V0Rmlyc3RQcm9wZXJ0eSh0ZW1wbGF0ZUNvbHVtbnMpOyAvLyBpdCdzIHBvc3NpYmxlIHRvIGFkZCBjb2x1bW5zIHRvIGxpbmtlZCBpdGVtc1xyXG5cclxuXHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNhY2hlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGNhY2hlZFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcclxuXHRcdFx0XHQoXHJcblx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCB8fFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5VdGlsLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShcclxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGNhY2hlZFRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoW1xyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnRlbXBsYXRlKGl0ZW1UeXBlLCB0ZW1wbGF0ZU9wdGlvbnMpLFxyXG5cdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0e30gOlxyXG5cdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChjb2x1bW5JdGVtVHlwZSwgdGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSlcclxuXHRcdF0pLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZVJlc3BvbnNlOiBhbnkgPSByZXNvbHZlZFswXTtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXHJcblx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpLFxyXG5cdFx0XHRcdFx0cmVzb2x2ZWRbMV1cclxuXHRcdFx0XHQpLm1lcmdlZDtcclxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHtcclxuXHRcdFx0XHRcdGZpZWxkczogdGVtcGxhdGVSZXNwb25zZS5mZXRjaE9iamVjdChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHRlbXBsYXRlUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlOiB0ZW1wbGF0ZVJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zOiByZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucyAmJiB0ZW1wbGF0ZVJlc3BvbnNlLmNhY2hlYWJsZSlcclxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGVtcGxhdGU7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEVudHJ5U3RhdHVzIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHtcclxuXHRcdGxldCBpdGVtRW50cnk7XHJcblxyXG5cdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoaXRlbUlkKSkge1xyXG5cdFx0XHRpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSksIHN0YXR1czogRU5UUllfU1RBVFVTLkxPQ0FMfTtcclxuXHRcdH1cclxuXHJcblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpfTtcclxuXHJcblx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucy5jb2x1bW5zLCBvcHRpb25zLmRlZmVyUmVxdWVzdCk7XHJcblxyXG5cdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHR0aGlzLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0ZW50cnk6IGl0ZW1FbnRyeSxcclxuXHRcdFx0c3RhdHVzOiBvcHRpb25zLmRlZmVyUmVxdWVzdCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0aXNDb2x1bW5TdXBlcnNldCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LmlzTG9jYWwoKSB8fCBpdGVtRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2YoY29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBvcHRpb25zLmNvbHVtbnM7XHJcblxyXG5cdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXMuaXNDb2x1bW5TdXBlcnNldChpdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zKSA/XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEIDpcclxuXHRcdFx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmlzQ29sdW1uU3VwZXJzZXQoaXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1ucykpXHJcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5kZWZlcihmYWxzZSk7XHJcblxyXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSB7QmF0Y2hTdGF0dXN9IGJhdGNoU3RhdHVzXHJcblx0ICogQHBhcmFtIHJlcXVlc3RDb2x1bW5zXHJcblx0ICogQHBhcmFtIHJlc29sdmVkXHJcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxyXG5cdCAqXHJcblx0ICogZm9yIGV2ZXJ5IHR5cGUgb2YgZW50cnkgc3RhdHVzIHRoZXJlIGlzIGluIHRoaXMgYmF0Y2ggcmVxdWVzdCBtYWtlIHN1cmUgdGhlIGVudHJpZXMgZ2V0IHJlc29sdmVkLlxyXG5cdCAqIHRoZW4gcmV0dXJuIGEgYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBJdGVtRW50cnlBcnJheVxyXG5cdCAqL1xyXG5cdGJhdGNoUmVzb2x2ZSAoaXRlbVR5cGUsIGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1cywgcmVxdWVzdENvbHVtbnMsIHJlc29sdmVkLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogSXRlbUVudHJ5W10gfCBQcm9taXNlPGFueT4ge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2UgPSByZXNvbHZlZC5yZXF1ZXN0cztcclxuXHRcdGNvbnN0IGV4cGFuZFN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcclxuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xyXG5cclxuXHRcdGxldCBzdWNjZXNzID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhleHBhbmRTdGF0dXMpKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XHJcblxyXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFx0ZXhwYW5kU3RhdHVzLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKHJlc29sdmVTdGF0dXMpKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xyXG5cclxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRcdHJlc29sdmVTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0W0VOVFJZX1NUQVRVUy5MT0NBTF0sIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBudWxsLCByZXNvbHZlZC50ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHRvZG86IG5vIGl0ZW0gZXJyb3IgKHttZXNzYWdlOiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UudW5kZWZpbmVkSXRlbUVycm9yfSlcclxuXHRcdHJldHVybiBzdWNjZXNzID8gYmF0Y2hTdGF0dXMuZ2V0QXJyYXkoKSA6IHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCgpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxFbnRyaWVzIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxyXG5cdFx0dGVtcGxhdGUsXHJcblx0XHRpdGVtSWRDb252ZXJzaW9uOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZVxyXG5cdCk6IFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBbXSB7XHJcblx0XHRjb25zdCBhcGlSZXNwb25zZSA9IHRlbXBsYXRlLnJlc3BvbnNlO1xyXG5cdFx0Y29uc3QgY29sdW1uSW5mb01hcCA9IHt9O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0ge307XHJcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PHtpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXX0+ID0gW107XHJcblxyXG5cdFx0Ly8gVE9ETzogZGlzYWJsZSBjYWNoaW5nP1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBhcGlSZXNwb25zZS5pdGVtcykge1xyXG5cdFx0XHRpZiAoaXRlbVR5cGUgPT09IHBhcmVudFR5cGUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjcmVhdGVFbnRyaWVzID0gKHBhcmVudFR5cGUyLCBsb2NhbFBhcmVudElkMiwgYXBpUGFyZW50SWQpID0+IHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlMiwgaXRlbUlkOiBsb2NhbFBhcmVudElkMn07XHJcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0XHRpZiAoIWxpbmtzLmhhc093blByb3BlcnR5KGl0ZW1UeXBlKSlcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0XHQvLyB0aGUgaXRlbSBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0IGluIHRvcC1kb3duIG9yZGVyXHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKHtpdGVtVHlwZTogaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0gW119KTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBhcGlJdGVtSWQgb2YgaWRBcnJheSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxJdGVtSWQgPSBpdGVtSWRDb252ZXJzaW9uW2l0ZW1UeXBlXVthcGlJdGVtSWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsTGlua2VkKFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0bG9jYWxJdGVtSWQsXHJcblx0XHRcdFx0XHRcdGFwaVJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBhcGlJdGVtSWQpLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQsXHJcblx0XHRcdFx0XHRcdGNvbHVtbkluZm9NYXBbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRpdGVtSWRDb252ZXJzaW9uXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5TWFwW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdFx0Y3JlYXRlRW50cmllcyhpdGVtVHlwZSwgbG9jYWxJdGVtSWQsIGFwaUl0ZW1JZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdGNyZWF0ZUVudHJpZXMocGFyZW50VHlwZSwgbG9jYWxQYXJlbnRJZCwgYXBpUmVzcG9uc2UubGlua3NbcGFyZW50VHlwZV1bMF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkZWZlclJlcXVlc3QgPSB0cnVlLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKSB7XHJcblx0XHRjb25zdCB0aXRsZUZpZWxkID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQoaXRlbVR5cGUpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZldGNoSXRlbShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHtjb2x1bW5zOiBbdGl0bGVGaWVsZF0sIGRlZmVyUmVxdWVzdDogZGVmZXJSZXF1ZXN0fSksXHJcblx0XHRcdGxvY2FsSXRlbUNhY2hlXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdC8vIHRvZG86IEl0ZW1FbnRyeSB8IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXBcclxuXHRcdFx0KGVudHJ5OiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAoZW50cnkubWFpbiAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGVudHJ5Lm1haW4uZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XHJcblxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW1zIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWRzOiBJdGVtSWRbXSwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IGl0ZW1JZHN9LCB7W2l0ZW1UeXBlXTogY29sdW1uc30pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlSZXNwb25zZVByb2Nlc3NvciwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5TZXQsIEl0ZW1IYW5kbGVyLCBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlcXVlc3RTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0e2lkOiBpdGVtSWR9LFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdHF1ZXJ5ID0gY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCxcclxuXHRcdGNvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zXHJcblx0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zO1xyXG5cclxuXHRcdGNvbnN0IHBhcmFtcyA9IHtcclxuXHRcdFx0cmVxdWVzdFR5cGU6ICdxdWVyeScsXHJcblx0XHRcdGl0ZW1UeXBlOiBvcHRpb25zLnF1ZXJ5SXRlbVR5cGUgPT09IG51bGwgPyBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgOiBvcHRpb25zLnF1ZXJ5SXRlbVR5cGUsXHJcblx0XHRcdGNvbHVtbnM6IHtbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTogY29sdW1uc30sXHJcblx0XHRcdHF1ZXJ5OiBxdWVyeSxcclxuXHRcdFx0bGltaXQ6IG51bGxcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMubGltaXQgIT09IG51bGwpXHJcblx0XHRcdHBhcmFtcy5saW1pdCA9IG9wdGlvbnMubGltaXQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcyk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0TGlua0l0ZW1zIChwYXJlbnRUeXBlLCBwYXJlbnRJZEFycmF5LCBpdGVtVHlwZSwgcXVlcnksIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0e2lkOiBwYXJlbnRJZEFycmF5fSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpIDpcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdFx0XHRxdWVyeSxcclxuXHRcdFx0XHRcdHtsaW5rZWRUbzogcGFyZW50VHlwZSwgcXVlcnk6IHtpZDogcGFyZW50SWRBcnJheX19XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyAvLyBzaG91bGQgY29udGFpbiBhIGRlcml2ZWQgY29sdW1uIHRoYXQgcmVmZXJzIHRvIHRoZSBwYXJlbnRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NFeHBhbnNpb24gKHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc1Jlc3BvbnNlIChcclxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcclxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcclxuXHRcdGNvbHVtbkV4cGFuc2lvbj86IENvbHVtbkV4cGFuc2lvblxyXG5cdCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGlmIChjb2x1bW5FeHBhbnNpb24gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRjb2x1bW5TZXQuaXRlbVR5cGUsXHJcblx0XHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZSA/IHRydWUgOiBjb2x1bW5TZXQucmVxdWVzdCxcclxuXHRcdFx0XHRjb2x1bW5TZXQucmVzcG9uc2VcclxuXHRcdFx0KTtcclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtblNldC5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gY29sdW1uU2V0LnJvb3Q7XHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogQXJyYXk8UHJvbWlzZTxJdGVtRW50cnk+PiA9IFtdO1xyXG5cclxuXHRcdC8vIHNob3VsZCBiZSBmYXN0Li4uXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdGxldCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcclxuXHRcdFx0XHRcdGNvbHVtblNldFxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcclxuXHRcdFx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSxcclxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtblNldFxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaChpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcclxuXHRcdFx0cmVzb2x2ZWRFbnRyaWVzID0+IHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHJlc29sdmVkRW50cnkgb2YgcmVzb2x2ZWRFbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZWRFbnRyeSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdFx0XHQ8Q29sdW1uRXhwYW5zaW9uPiBjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cmllcztcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlQ2FjaGVkSXRlbSAoaXRlbUVudHJ5LCByZXNwb25zZSwgY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24pIHtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiBleHBhbnNpb25SZXN1bHQgPT09IG51bGwgP1xyXG5cdFx0XHRpdGVtRW50cnkgOlxyXG5cdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZCksXHJcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0XHRcdGV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlLnJvb3RcclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRcdGV4cGFuc2lvblJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0xpbmtSZXNwb25zZSAoXHJcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRjb25zdCBwYXJlbnRJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGVdO1xyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRBcnJheSkge1xyXG5cdFx0XHRwcm9taXNlc1twYXJlbnRJZF0gPSBwYXRoRXhpc3RzKHBhcmVudEl0ZW1zLCBbcGFyZW50SWQsICdsaW5rcycsIGl0ZW1UeXBlXSkgP1xyXG5cdFx0XHRcdHRoaXMucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRwYXJlbnRJdGVtc1twYXJlbnRJZF0ubGlua3NbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0e2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfSxcclxuXHRcdFx0XHRcdGNvbHVtblNldCxcclxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdCkgOlxyXG5cdFx0XHRcdFtdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcykudGhlbihcclxuXHRcdFx0cmVzb2x2ZWQgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRpdGVtczogcmVzb2x2ZWQsXHJcblx0XHRcdFx0XHRjb2x1bW5zOiBjb2x1bW5TZXQsXHJcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb246IGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXQ6IGZhbHNlLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLFxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogbm9vcFxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZU9wdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIGZpcnN0KSB7XHJcblx0XHRcdGlmIChmaXJzdFtrZXldICE9PSBzZWNvbmRba2V5XSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpc05ld1Jlc291cmNlIChyZXNvdXJjZTogRWRpdFJlc291cmNlKSB7XHJcblx0XHRyZXR1cm4gcmVzb3VyY2UuaXNMb2NhbCgpICYmXHJcblx0XHRcdHJlc291cmNlLnRyYW5zYWN0aW9ucyA9PT0gdW5kZWZpbmVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBEVVBMSUNBVEVfS0VZV09SRCwgRFVQTElDQVRFX1BSRUZJWCwgTkVXX0tFWVdPUkQsIE5FV19QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XHJcblx0c2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XHJcblxyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtVHlwZS5jb25jYXQodGhpcy5zZXBhcmF0b3IsIFN0cmluZyhpdGVtSWQpKTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25DYWNoZUtleSAocGFyZW50VHlwZTogc3RyaW5nLCBwYXJlbnRJZDogbnVtYmVyLCBjaGlsZFR5cGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHBhcmVudFR5cGUuY29uY2F0KHRoaXMuc2VwYXJhdG9yLCBTdHJpbmcocGFyZW50SWQpLCB0aGlzLnNlcGFyYXRvciwgY2hpbGRUeXBlKTtcclxuXHR9XHJcblxyXG5cdGdldENzc0tleSAoKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICdfJyk7XHJcblx0fVxyXG5cclxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKSB7XHJcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoTkVXX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6ICduZXcnLFxyXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcoTkVXX0tFWVdPUkQubGVuZ3RoKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdGlmIChzdGF0ZUtleS5pbmRleE9mKERVUExJQ0FURV9LRVlXT1JEKSA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0eXBlOiAnZHVwbGljYXRlJyxcclxuXHRcdFx0XHRpdGVtSWQ6IHN0YXRlS2V5LnN1YnN0cmluZyhEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIE5FV19LRVlXT1JEICsgdGVtcGxhdGVUeXBlO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxJZCAoKTogSXRlbUlkIHtcclxuXHRcdHJldHVybiArKE5FV19QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdGdldExvY2FsRHVwbGljYXRlSWQgKCk6IEl0ZW1JZCB7XHJcblx0XHRyZXR1cm4gKyhEVVBMSUNBVEVfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XHJcblx0fVxyXG5cclxuXHRnZXRSYW5kb21TdHJpbmcgKCkge1xyXG5cdFx0cmV0dXJuICgnJyArIE1hdGgucmFuZG9tKCkpLnNwbGl0KCcuJylbMV0uc3Vic3RyKDAsIDgpO1xyXG5cdH1cclxuXHJcblx0Ly8gbm90ZTogdGhlIGNoYW5nZXMgY29tcGlsZXIgdXNlcyB0aGlzXHJcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxyXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodGhpcy5pc05ld0lkKGl0ZW1JZCkgfHwgdGhpcy5pc0R1cGxpY2F0ZUlkKGl0ZW1JZCkpO1xyXG5cdH1cclxuXHJcblx0aXNOZXdJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgPT09IE5FV19LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIE5FV19QUkVGSVgubGVuZ3RoKSA9PT0gTkVXX1BSRUZJWDtcclxuXHR9XHJcblxyXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gaXRlbUlkID09PSBEVVBMSUNBVEVfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdExvY2tTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbVJlc291cmNlRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUlkQ29udmVyc2lvbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZSB7XHJcblx0aXRlbXM6IEl0ZW1DYWNoZTtcclxuXHRyb290SXRlbTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkO1xyXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblx0ZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cdHRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XHJcblxyXG5cdGNhbGxiYWNrcyA9IHtvbkJlZm9yZVNhdmU6IHt9LCBvblNhdmVTdWNjZXNzOiB7fSwgb25TYXZlV2l0aG91dENsb3Npbmc6IHt9fTtcclxuXHJcblx0Y2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcclxuXHRoYXNDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBpZDogc3RyaW5nID0gJydcclxuXHQpIHtcclxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290ID0gZmFsc2UpIHtcclxuXHRcdGlmIChpc1Jvb3QpXHJcblx0XHRcdHRoaXMucm9vdEl0ZW0gPSBpdGVtRW50cnk7XHJcblxyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpIHtcclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkFjdGl2YXRlSXRlbSA9IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtID0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbiA9XHJcblx0XHRcdChfY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJDb2xsZWN0aW9uKF9jb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgcmVzb3VyY2VPcHRpb25zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJpZXNbcGFyZW50SWRdLCByZXNvdXJjZU9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XHJcblx0XHR0aGlzLmNsZWFySXRlbUVudHJ5KGl0ZW1SZXNvdXJjZS5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRjbGVhckl0ZW1FbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcclxuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKGlzU3ViVGFiQ2hhbmdlID0gZmFsc2UpIHtcclxuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gY29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKGlzU3ViVGFiQ2hhbmdlKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMuY2xlYXIoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVNpbmdsZUl0ZW1zIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1zLmdldChpdGVtVHlwZSwgb2xkSXRlbUlkKTtcclxuXHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXHJcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XHJcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xyXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0fVxyXG5cclxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMpXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZXZlcnRDaGFuZ2VzKCk7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGRldGVjdENoYW5nZXMgKCkge1xyXG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLml0ZW1zLnNvbWUoXHJcblx0XHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpXHJcblx0XHRcdClcclxuXHRcdClcclxuXHRcdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRoaXMuY29sbGVjdGlvbnMuc29tZShcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbGxlY3Rpb25IYXNDaGFuZ2VzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkge1xyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzICYmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NrYWJsZSAoKSB7XHJcblx0XHRpZiAodGhpcy5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucm9vdEl0ZW0uaXNMb2NrYWJsZSgpO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAoXHJcblx0XHRjbG9zZVRhYiA9IGZhbHNlLFxyXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxyXG5cdFx0YnJlYWtVcEJ5UGFyZW50PzogYm9vbGVhbixcclxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXHJcblx0KSB7XHJcblx0XHR0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblxyXG5cdFx0cmV0dXJuICh0aGlzLmlzTG9ja2FibGUoKSA/IHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvbkJlZm9yZVNhdmUnLCBjbG9zZVRhYiwgdGhpcy5oYXNDaGFuZ2VzKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XHJcblxyXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShcclxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXHJcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcclxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcclxuXHRcdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuY2xlYXJMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVN1Y2Nlc3MnLCBjb252ZXJzaW9uTWFwKS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWNsb3NlVGFiKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGNvbnZlcnNpb25NYXAsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tzIChldmVudCwgLi4uYXJncykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNhbGxiYWNrc1tldmVudF0pXHJcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVuYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcclxuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XHJcblx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGlmICghdGhpcy5kZXRlY3RDaGFuZ2VzKCkpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQzMDAwXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZGlzYWJsZUNoYW5nZXNXYXRjaGVyICgpIHtcclxuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5jaGFuZ2VzSW50ZXJ2YWwpO1xyXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XHJcblx0XHR0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XSA9IGNhbGxiYWNrO1xyXG5cclxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XHJcblx0fVxyXG5cclxuXHRvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XHJcblx0bG9ja0l0ZW1zID0ge307XHJcblx0cHJvbWlzZXMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGdldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZSwgbWFwKSB7XHJcblx0XHRyZXR1cm4gY3JlYXRlUGF0aChcclxuXHRcdFx0bWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB2YWx1ZV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NrcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmxvY2tJdGVtcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdCAod2F0Y2hlZClcclxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XHJcblx0fVxyXG5cclxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXHJcblx0Ly8gaXMgYWxzbyB1c2VkIGJ5IGRlbGV0ZUxvY2tcclxuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9jayAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5wcm9taXNlcyk7XHJcblxyXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHByb21pc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihsb2NrSXRlbSA9PiB7XHJcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduID9cclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChsb2NrSXRlbS5tZXNzYWdlKSA6XHJcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKFxyXG5cdFx0XHQnTG9ja3Rva2VuJyxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0e2l0ZW10eXBlOiBpdGVtVHlwZSwgaXRlbTogaXRlbUlkfVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rcy5Mb2NrdG9rZW5bMF1cclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sIGVycm9yID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBlcnJvci5tZXNzYWdlXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcclxuXHRcdFx0XHQvLyB1bmRlZmluZWQ6IG5vdCByZXF1ZXN0ZWQgeWV0XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xyXG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZSgnTG9ja3Rva2VuJywgY2FjaGVkTG9jay5pZClcclxuXHRcdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhckxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xyXG5cdGRlc3RpbmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cHJvY2VzcyAoKSB7XHJcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcclxuXHRcdHRoaXMucHJvY2Vzc0l0ZW1zKHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSwgW3RoaXMucm9vdEl0ZW1FbnRyeV0sIHt9KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpdGVtVHlwZTogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQYXJlbnRNYXAgKGl0ZW1DYWNoZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0bGV0IG1hcEVudHJ5ID0gcmVzdWx0W3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBFbnRyeVtwYXJlbnRJZF0gPSB7fTtcclxuXHJcblx0XHRcdFx0bWFwRW50cnkgPSBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblxyXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NJdGVtcyAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbGlua0FjY3VtdWxhdG9yKSB7XHJcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xyXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XHJcblxyXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0Y29uc3QgY2hpbGRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENvbGxlY3Rpb25zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XHJcblx0XHRjb25zdCBoYXNMaW5rcyA9IGhhc1Byb3BlcnRpZXMobGlua3MpO1xyXG5cclxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXHJcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXMsIGxpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0aWYgKGhhc1ZhbHVlcylcclxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlc307XHJcblxyXG5cdFx0aWYgKGhhc0xpbmtzKVxyXG5cdFx0XHRyZXR1cm4ge2xpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLnBhcmVudE1hcFtwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5jb25zdCBNQVlCRSA9ICdtYXliZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyBmaWVsZHM6IEZpZWxkTWFwLFxyXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29tcGFyZVZhbHVlcyAodmFsdWUsIHF1ZXJ5VmFsdWUpIHtcclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlTW9tZW50T2JqZWN0cyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUR1cmF0aW9ucyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBxdWVyeVZhbHVlID09IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCBzdHJpbmcge1xyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hDb21wbGV4UXVlcnkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLmZpZWxkc1txdWVyeS5rZXldLCBxdWVyeSk7XHJcblxyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnkpIHtcclxuXHRcdGlmIChxdWVyeS5yZXZlcnNlKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRsZXQgbWF0Y2g7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcclxuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXHJcblx0XHRcdG1hdGNoID0gZmFsc2U7XHJcblx0XHRlbHNlXHJcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcclxuXHJcblx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICFtYXRjaCA6IG1hdGNoO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaENvbXBsZXhRdWVyeSAocXVlcnkpIHtcclxuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBxdWVyeS5jb25kaXRpb25zO1xyXG5cclxuXHRcdGxldCByZXN1bHQ7XHJcblx0XHRsZXQgdGVybWluYWw7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xyXG5cdFx0XHRjYXNlICdBTkQnOlxyXG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XHJcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnT1InOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRlcm1pbmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XHJcblxyXG5cdFx0XHRpZiAobWF0Y2ggPT09IHRlcm1pbmFsKVxyXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcclxuXHJcblx0XHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXHJcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBrZXkgPSBxdWVyeS5rZXk7XHJcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xyXG5cclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpIC8vIENvdWxkIGJlIGxpbmtlZFRvIGFuIGVtcHR5IG9iamVjdFxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHF1ZXJ5VmFsdWUgPT09ICdOT1cnKVxyXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5jb21wYXJhdG9yKSB7XHJcblx0XHRcdGNhc2UgJz0nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICchPSc6XHJcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICc8JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPCBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc8PSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz4nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz49JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPj0gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnSU4nOlxyXG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnTk9UIElOJzpcclxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRPQkogPSAwLFxyXG5cdFNUUiA9IDEsXHJcblx0U0VQID0gJzonXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlciB7XHJcblx0cXVlcnk6IGFueTtcclxuXHRwYXJhbWV0ZXJzOiBhbnk7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChxdWVyeSwgcGFyYW1ldGVycz8pIHtcclxuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcclxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWUpIHtcclxuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHZhbHVlLnNsaWNlKCkuc29ydCgpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24odmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhLCBiKSB7XHJcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcclxuXHRcdFx0cmV0dXJuIDA7XHJcblxyXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xyXG5cdH1cclxuXHJcblx0cGFyc2UgKHF1ZXJ5ID0gdGhpcy5xdWVyeSkge1xyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcclxuXHRcdFx0XHRxdWVyeS5saW5rZWRUbyxcclxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcclxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxyXG5cdFx0XHRcdHF1ZXJ5Lm5vdFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5ub3QgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcclxuXHRcdFx0XHRxdWVyeS5wYXJhbWV0ZXJzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXHJcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcclxuXHRcdFx0XHRxdWVyeS5vcGVyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcclxuXHRcdFx0XHRxdWVyeS5rZXksXHJcblx0XHRcdFx0cXVlcnkudmFsdWUsXHJcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChrZXkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoa2V5LCBxdWVyeVtrZXldKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTZWFyY2hRdWVyeSAodmFsdWUpIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e3NlYXJjaDogdmFsdWVbQ09OU1RBTlRTLk9CSl19LFxyXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDdXN0b21RdWVyeSAoY3VzdG9tLCBwYXJhbWV0ZXJzKSB7XHJcblx0XHRpZiAocGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdHtjdXN0b206IGN1c3RvbX0sXHJcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXHJcblx0XHRcdF07XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHRoaXMucGFyc2VDdXN0b21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjdXN0b206IGN1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXX0sXHJcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVBhcmFtZXRlcnMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XHJcblxyXG5cdFx0Y29uc3QgcXVlcnkgPSB7fTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XHJcblxyXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XHJcblxyXG5cdFx0XHRpZiAoaSA+IDApXHJcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XHJcblxyXG5cdFx0XHRzdHJpbmcgKz0gdmFsdWVbQ09OU1RBTlRTLlNUUl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTaW1wbGVRdWVyeSAoa2V5LCB2YWx1ZSwgY29tcGFyYXRvcj8pIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29tcGFyYXRvciA9IEFycmF5LmlzQXJyYXkodmFsdWVbQ09OU1RBTlRTLk9CSl0pID8gJ0lOJyA6ICc9JztcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvcjogY29tcGFyYXRvcn0sXHJcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUxpbmtlZFRvUXVlcnkgKGxpbmtlZFRvLCBxdWVyeSwgcmV2ZXJzZSwgbm90KSB7XHJcblx0XHRpZiAocXVlcnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cXVlcnkgPSB7fTtcclxuXHJcblx0XHRpZiAocmV2ZXJzZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXZlcnNlID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKG5vdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRub3QgPSBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxyXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUNvbXBsZXhRdWVyeSAoY29uZGl0aW9ucywgb3BlcmF0b3IpIHtcclxuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvcGVyYXRvciA9ICdBTkQnO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkQ29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGNvbmRpdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjb25kaXRpb25zOiBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5PQkpdLCBvcGVyYXRvcjogb3BlcmF0b3J9LFxyXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9ucykge1xyXG5cdFx0bGV0IHBhcnNlZENvbmRpdGlvbnM6IG9iamVjdFtdID0gW107XHJcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxyXG5cdFx0XHRwYXJzZWRDb25kaXRpb25zLnB1c2godGhpcy5wYXJzZShjb25kaXRpb24pKTtcclxuXHJcblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcnNlZENvbmRpdGlvbiBvZiBwYXJzZWRDb25kaXRpb25zKSB7XHJcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcclxuXHRcdFx0c3RyaW5nICs9IHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuU1RSXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JtYXRWYWx1ZSAodmFsdWUpIHtcclxuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcclxuXHJcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcmJykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XHJcblxyXG5cdFx0XHR2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogVW5kZWZpbmVkIHRlbXBsYXRlIHBhcmFtZXRlciBcXCcnICsga2V5ICsgJ1xcJycpO1xyXG5cclxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XHJcblx0XHR9XHJcblxyXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwgJycgKyBwcm9jZXNzZWRWYWx1ZV07XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGFkZEFuZENvbmRpdGlvbiAocXVlcnksIGNvbmRpdGlvbikge1xyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl19O1xyXG5cclxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXHJcblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xyXG5cdH1cclxuXHJcblx0YWRkT3JDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcclxuXHRcdGlmIChxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcclxuXHJcblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxyXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcclxuXHR9XHJcblxyXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xyXG5cdFx0bGV0IGxpbmtlZFRvUXVlcnk7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xyXG5cclxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xyXG5cclxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/IGxpbmtlZFRvUXVlcnkgOiB0aGlzLmFkZEFuZENvbmRpdGlvbihxdWVyeSwgbGlua2VkVG9RdWVyeSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVOb3RJbiAoaWRBcnJheSkge1xyXG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xyXG5cdHByaXZhdGUgY29sdW1ucyA9IHt9O1xyXG5cdHByaXZhdGUgY29sdW1uSW5mb0lkTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChjb2x1bW5JbmZvKSB7XHJcblx0XHRpZiAodGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0pXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcclxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSwgY29sdW1uSW5mby5yZXF1ZXN0KVxyXG5cdFx0XHQubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGdldCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbGxlY3Rpb25IYW5kbGVyLCBJdGVtSGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEZpZWxkTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0b25NZXNzYWdlUmVjZWl2ZWQgKG1lc3NhZ2U6IGFueSk6IGFueSB7XHJcblx0XHRzd2l0Y2ggKG1lc3NhZ2UuYm9keS5ldmVudFR5cGUpIHtcclxuXHRcdFx0Y2FzZSAndXBkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2NyZWF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdkZWxldGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnbGlua1RvJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZSgvKiBtZXNzYWdlICovKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdE1lc3NhZ2VWYWx1ZXMgKHZhbHVlcywgY29sdW1ucyk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcclxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0fSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRoaXMuZm9ybWF0TWVzc2FnZVZhbHVlcyhpdGVtLnZhbHVlcywgY29sdW1ucyksXHJcblx0XHRcdFx0cGFyZW50XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XHJcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRtYXliZTogW11cclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXHJcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XHJcblx0fVxyXG5cclxuXHRkZWZlckVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xyXG5cclxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKGZhbHNlKTtcclxuXHJcblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHR0aGlzLmRlZmVyRW50cnkuYmluZCh0aGlzKSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkU3RyaW5nKTtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcclxuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbaXRlbUlkXS5maXR0aW5nLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoXHJcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogcmVxdWVzdElkc30sIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5KSB7XHJcblx0XHRjb25zdCBpdGVtcyA9IGJvZHkuaXRlbXMuRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25JZCA9IGl0ZW1zW2l0ZW1JZF0ucGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcclxuXHJcblx0XHRcdGlmIChmdW5jdGlvbkVudHJ5ID09PSB1bmRlZmluZWQgfHwgZnVuY3Rpb25FbnRyeS5jb2x1bW5zLnJlc3BvbnNlLkZ1bmN0aWUubmV3Y2hhbmdlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGZ1bmN0aW9uRW50cnkpKTtcclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeSgnRnVuY3RpZScsIHtpZDogcmVxdWVzdElkc30sIHtGdW5jdGllOiBbJ25ld2NoYW5nZXMnXX0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXRJbml0aWFsKHtuZXdjaGFuZ2VzOiByZXNwb25zZVZhbHVlfSwgdHJ1ZSlcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZXNwb25zZSAoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcclxuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblxyXG5cdFx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XHJcblxyXG5cdFx0XHRpZiAoaXNOZXcpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZClcclxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBmYWxzZSlcclxuXHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXHJcblx0XHRcdFx0XHQucmVzb2x2ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2UpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XHJcblxyXG5cdFx0aWYgKGJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJylcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZSkge1xyXG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oYm9keS5pdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XHJcblxyXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCBpdGVtczogW119O1xyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETyFcclxuXHRoYW5kbGVMaW5rTW92ZSAoKSB7fVxyXG5cclxuLypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XHJcblx0XHRwcm9jZXNzTWVzc2FnZShcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIG1heWJlIGZpdHNcclxuXHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoYW5ndWxhci5pZGVudGl0eSwgZmFsc2UsIGZhbHNlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xyXG5cdFx0XHRcdC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGlkcywgbnVsbCwgbWVzc2FnZSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG4qL1xyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpRm9ybWF0dGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1BZG1pbmlzdHJhdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1V0aWwnO1xyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1c0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+KTogQmF0Y2hTdGF0dXMge1xyXG5cdFx0cmV0dXJuIG5ldyBCYXRjaFN0YXR1cyhcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0Z2V0SXRlbUlkLFxyXG5cdFx0XHRnZXRQcm9taXNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0c2luZ2xlSXRlbXMsXHJcblx0XHRcdGNvbGxlY3Rpb25zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0SXRlbUhhbmRsZXJcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzUHJvY2Vzc29yKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2VcclxuXHRcdCk7XHJcblx0fVxyXG5cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXHJcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtUmVxdWVzdFNlcnZpY2UsIEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4uL21vZGVscy8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9ucyk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FbnRyeShcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25NYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZTogYm9vbGVhbikge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbk1hdGNoZXIoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVzLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSwgSXRlbUhhbmRsZXIsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSwgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0SXRlbXMpXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyA9IHRydWU7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZWRpdENvbGxlY3Rpb24pIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgPSB0cnVlO1xyXG5cclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlKFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcclxuXHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uVmlld1Jlc291cmNlKHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgcmVxdWVzdENvbHVtbnM6IGFueSB8IGJvb2xlYW4sIHJlc3BvbnNlQ29sdW1uczogYW55KSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbihcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm9GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHBhcmVudDogQ29sdW1uSW5mbykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5JbmZvKGFwaUNvbHVtbiwgcGFyZW50KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXHJcblx0XHRlbmFibGVDYWNoaW5nPyxcclxuXHRcdGluY2x1ZGVJZENvbHVtbj9cclxuXHQpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS5yZXNvbHZlKHJlc3BvbnNlQ29sdW1ucywgZW5hYmxlQ2FjaGluZywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZVJlcXVlc3QsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb21waWxhdGlvbiwgY29sbGVjdGlvbkVudHJpZXMsIHBhcmFtZXRlck1hcCwgYnJlYWt1cEJ5UGFyZW50Pykge1xyXG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHRjb21waWxhdGlvbixcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XHJcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGNvbHVtblNldFN0dWIpIHtcclxuXHRcdHJldHVybiBuZXcgSXRlbUVudHJ5KFxyXG5cdFx0XHR0aGlzLnByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuYXV0aEludGVyZmFjZSxcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRjb2x1bW5TZXRTdHViXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWxMaW5rZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0bG9jYWxJdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwsXHJcblx0XHRjb2x1bW5TZXQ6IENvbHVtblNldCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXBcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgY29sdW1uU2V0KTtcclxuXHJcblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucHJvY2Vzc0xvY2FsKGluaXRpYWwsIHt9LCB7fSwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RMb2NhbCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlOiBhbnksXHJcblx0XHRtb2RpZmllZDogRmllbGRNYXAsXHJcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbCxcclxuXHRcdGNvbnZlcnNpb25NYXA/LFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRlbXBsYXRlLmNvbHVtbnMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb252ZXJzaW9uTWFwID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmNyZWF0ZUxvY2FsQ29udmVyc2lvbk1hcChpdGVtVHlwZSwgaXRlbUlkLCB0cnVlLCB0ZW1wbGF0ZS5yZXNwb25zZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdHRlbXBsYXRlLmNvbHVtbnMsXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5wcm9jZXNzTG9jYWwodGVtcGxhdGUuZmllbGRzLCBtb2RpZmllZCwgZGVyaXZlZCwgY29udmVyc2lvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3REZWZlcnJlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdGRlZmVyUmVxdWVzdDogYm9vbGVhblxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTdHViID0gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeVN0dWIuZGVmZXIoZGVmZXJSZXF1ZXN0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5U3R1YjtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoXHJcblx0XHRpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdGluaXRpYWw6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRjb2x1bW5JbmZvOiBDb2x1bW5TZXRcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0Y29sdW1uSW5mby5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLCAvLyBpbml0aWFsLmlkICh3aGVuIGluaXRpYWwgaXMgbm90IGEgdGVtcGxhdGUpXHJcblx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHQpLnByb2Nlc3MoXHJcblx0XHRcdGluaXRpYWwsIC8vIGNhbiBhbHNvIGJlIGEgdGVtcGxhdGVcclxuXHRcdFx0ZGVyaXZlZCxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ2hhbmdlc1Byb2Nlc3NvciwgSXRlbVJlc291cmNlU2VydmljZSwgTG9ja1NlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEVkaXRSZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UsIFZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yOiBDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zKSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRpZiAob3B0aW9ucy5lZGl0KSB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IsXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gbmV3IFZpZXdSZXNvdXJjZShcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucyk6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVkaXQpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBFZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdFx0dGhpcy5sb2NrU2VydmljZSxcclxuXHRcdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3IsXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHRpdGVtRW50cnksIG9wdGlvbnNcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmlld1Jlc291cmNlKFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0SXRlbVJlc291cmNlU2VydmljZSxcclxuXHRMb2NhbENhY2hlLFxyXG5cdExvY2tTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbVJlc291cmNlRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGlkPzogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gbmV3IExvY2FsQ2FjaGUoXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0aWRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlLCBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3QgKHJvb3RJdGVtOiBJdGVtRW50cnksIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSkge1xyXG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ocm9vdEl0ZW0sIHNpbmdsZUl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBRdWVyeU1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlclxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IFF1ZXJ5TWF0Y2hlciB7XHJcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5TWF0Y2hlcihcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRmaWVsZHMsXHJcblx0XHRcdHBhcmVudFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocXVlcnksIHBhcmFtZXRlcnM/KTogUXVlcnlQYXJzZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBRdWVyeVBhcnNlcihxdWVyeSwgcGFyYW1ldGVycyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXRGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0Q29sdW1uQ2FjaGUsXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblV0aWwsXG5cdEl0ZW1BZG1pbmlzdHJhdG9yLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NrU2VydmljZSxcblx0UXVlcnlTZXJ2aWNlLFxuXHRTb2NrZXRNZXNzYWdlSGFuZGxlclxufSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LFxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtbkluZm9GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblx0bm9vcCA9IG5vb3A7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xuXG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xuXG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XG5cblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xuXHRjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyO1xuXG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcblx0Y29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuXHRsb2NrU2VydmljZTogTG9ja1NlcnZpY2U7XG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk7XG5cblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0aXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeTtcblx0cmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS4xLjEwLTQnO1xuXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XG5cdFx0dGhpcy5rZXlTZXJ2aWNlID0gbmV3IEtleVNlcnZpY2UoKTtcblx0XHR0aGlzLnF1ZXJ5U2VydmljZSA9IG5ldyBRdWVyeVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xuXG5cdFx0dGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkgPSBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpRm9ybWF0dGVyKTtcblxuXHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UgPSBuZXcgQXBpUmVxdWVzdFNlcnZpY2UoZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZSwgdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5rZXlTZXJ2aWNlKTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UgPSBuZXcgSXRlbVJlc291cmNlU2VydmljZSgpO1xuXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5ID0gbmV3IEl0ZW1DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSA9IG5ldyBCYXRjaFN0YXR1c0ZhY3RvcnkocHJvbWlzZUludGVyZmFjZSk7XG5cblx0XHR0aGlzLmNvbHVtbkNhY2hlID0gbmV3IENvbHVtbkNhY2hlKHRoaXMuY29sdW1uVXRpbCk7XG5cdFx0dGhpcy5jb2x1bW5IYW5kbGVyID0gbmV3IENvbHVtbkhhbmRsZXIoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXG5cdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSA9IG5ldyBDb2x1bW5JbmZvRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSA9IG5ldyBDb2x1bW5TZXRGYWN0b3J5KHRoaXMuY29sdW1uSGFuZGxlciwgdGhpcy5jb2x1bW5VdGlsLCB0aGlzLmNvbHVtbkluZm9GYWN0b3J5KTtcblx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XG5cblx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkgPSBuZXcgSXRlbUVudHJ5RmFjdG9yeShcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbUhhbmRsZXIgPSBuZXcgSXRlbUhhbmRsZXIodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxuXHRcdCk7XG5cdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UgPSBuZXcgSXRlbVJlcXVlc3RTZXJ2aWNlKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IG5ldyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlKHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LCB0aGlzLnF1ZXJ5U2VydmljZSk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnlcblx0XHQpO1xuXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkgPSBuZXcgQ3JlYXRlUmVxdWVzdEZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XG5cdFx0KTtcblx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkgPSBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSh0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkpO1xuXHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkgPSBuZXcgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkodGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSA9IG5ldyBJdGVtUmVzb3VyY2VGYWN0b3J5KHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5ID0gbmV3IExvY2FsQ2FjaGVGYWN0b3J5KGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcblxuXHRcdHRoaXMuaXRlbUFkbWluaXN0cmF0b3IgPSBuZXcgSXRlbUFkbWluaXN0cmF0b3IoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0YXV0aEludGVyZmFjZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnksXG5cdFx0XHRsb2NhbENhY2hlTWFuYWdlcixcblx0XHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cblx0XHR0aGlzLnNvY2tldE1lc3NhZ2VIYW5kbGVyID0gbmV3IFNvY2tldE1lc3NhZ2VIYW5kbGVyKHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2Vcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wICgpIHtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5ICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL21haW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
7006
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvZXh0ZXJuYWwgXCJtb21lbnRcIiIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9VdGlsLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaUZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9BcGlSZXNwb25zZVByb2Nlc3Nvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQWRtaW5pc3RyYXRvci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbUVudHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVxdWVzdFNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvSXRlbVJlc291cmNlU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9LZXlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0xvY2FsQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9ja1NlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5TWF0Y2hlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVBhcnNlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9RdWVyeVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUmVxdWVzdENvbHVtbkV4cGFuc2lvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Tb2NrZXRNZXNzYWdlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0JhdGNoU3RhdHVzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2x1bW5JbmZvRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtblNldEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9DcmVhdGVSZXF1ZXN0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1DYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtRW50cnlGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbVJlc291cmNlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0xvY2FsQ2FjaGVGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5TWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9RdWVyeVBhcnNlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7OztBQ2xGQSxnRDs7Ozs7Ozs7Ozs7OztBQ0FNLHNCQUF3QixNQUFNLEVBQUUsUUFBUTtJQUM3QyxFQUFFLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFakIsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLEdBQUcsQ0FBQyxDQUFDLElBQU0sR0FB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QyxnQkFBZ0IsRUFDckIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQywrQkFBK0IsRUFDcEMsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxZQUFZLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFDcEUsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLElBQUksQ0FBQyw2QkFBNkIsRUFDbEMsSUFBSSxDQUFDLFlBQVksRUFDakIscUJBQXFCLENBQ3JCLENBQUM7SUFDSCxDQUFDO0lBQ0YsYUFBQztBQUFELENBQUM7O0FBRUs7QUFDTixDQUFDO0FBRUssa0JBQW9CLEtBQUs7SUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNkLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwU3NCO0FBQ0s7QUFDSDtBQUVDO0FBQ0UiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18wX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzBfXzsiLCJleHBvcnQgZnVuY3Rpb24gc2hhbGxvd01lcmdlIChvYmplY3QsIGRlZmF1bHRzKSB7XHJcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0cmV0dXJuIGRlZmF1bHRzO1xyXG5cclxuXHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcclxuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdGRlZmF1bHRzW2tleV0gOiBvYmplY3Rba2V5XTtcclxuXHR9XHJcblxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0aWVzIChvYmplY3QpIHtcclxuXHQvLyBAdHMtaWdub3JlXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0UHJvcGVydHkgKG9iamVjdCkge1xyXG5cdGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JylcclxuXHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXHJcblx0XHRyZXR1cm4ga2V5O1xyXG5cclxuXHRyZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluQXJyYXkgKG5lZWRsZSwgaGF5c3RhY2spIHtcclxuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdGlmIChuZWVkbGUgPT0gaGF5KVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFycmF5PFQ+IChzb3VyY2U6IFRbXSwgY2FsbGJhY2s6IChUKSA9PiBib29sZWFuKSB7XHJcblx0Y29uc3QgZmlsdGVyZWQ6IFRbXSA9IFtdO1xyXG5cclxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcclxuXHRcdGlmIChjYWxsYmFjayhzcmMpKVxyXG5cdFx0XHRmaWx0ZXJlZC5wdXNoKHNyYyk7XHJcblx0fVxyXG5cclxuXHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSBzb3VyY2UubGVuZ3RoKVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRlbXB0eUFycmF5KHNvdXJjZSk7XHJcblxyXG5cdGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcmVkKVxyXG5cdFx0c291cmNlLnB1c2goZmlsdGVyKTtcclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUFycmF5IChhcnJheSkge1xyXG5cdGFycmF5LnNwbGljZSgwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhFeGlzdHMgKHNvdXJjZSwgcGF0aCkge1xyXG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcclxuXHRcdGlmICh0eXBlb2Ygc291cmNlW3BdID09PSAndW5kZWZpbmVkJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHNvdXJjZSA9IHNvdXJjZVtwXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0aCAob2JqZWN0LCBwYXRoLCBkZWZhdWx0cykge1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xyXG5cclxuXHRcdGlmIChvYmplY3RbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcclxuXHJcblx0XHRvYmplY3QgPSBvYmplY3RbdmFsdWVdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGggKG9iamVjdCwgcGF0aCwgY3JlYXRlID0gZmFsc2UpIHtcclxuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3BdOyAvLyB3b24ndCBhbHRlciB0aGUgY2FsbGVyJ3MgdmFyXHJcblxyXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqZWN0O1xyXG59XHJcblxyXG4vLyBUYWtlbiBmcm9tIEFuZ3VsYXJKUywgYWRkZWQgY29tbWVudHMgdG8gaWdub3JlIFR5cGVTY3JpcHQgZXJyb3JzXHJcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xyXG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG5cdFx0Y29uc3Qgb2JqID0gb2Jqc1tpXTtcclxuXHJcblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcclxuXHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XHJcblx0XHRcdGNvbnN0IHNyYyA9IG9ialtrZXldO1xyXG5cclxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xyXG5cdFx0XHRcdGlmIChpc0RhdGUoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IFJlZ0V4cChzcmMpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc0VsZW1lbnQoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKCFpc09iamVjdChkc3Rba2V5XSkpXHJcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcclxuXHJcblx0XHRcdFx0XHRiYXNlRXh0ZW5kKGRzdFtrZXldLCBbc3JjXSwgdHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRzdFtrZXldID0gc3JjO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZHN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIGZhbHNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XHJcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XHJcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rT2JqZWN0ICh2YWx1ZSkge1xyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xyXG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50IChub2RlKSB7XHJcblx0cmV0dXJuICEhKG5vZGUgJiZcclxuXHRcdChcclxuXHRcdFx0bm9kZS5ub2RlTmFtZSAgLy8gV2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQuXHJcblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcclxuXHRcdClcclxuXHQpOyAgLy8gV2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJLlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3cgKG9iaikge1xyXG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcclxuXHRpZiAobzEgPT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXHJcblxyXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xyXG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xyXG5cclxuXHRsZXQgbGVuZ3RoO1xyXG5cdGxldCBrZXk7XHJcblx0bGV0IGtleVNldDtcclxuXHJcblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdGlmIChpc0FycmF5KG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcclxuXHJcblx0XHRcdGlmIChvMS5sZW5ndGggPT09IG8yLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xyXG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0RhdGUobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBzaW1wbGVDb21wYXJlKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgpKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XHJcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XHJcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XHJcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24obzFba2V5XSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGtleVNldFtrZXldID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChrZXkgaW4gbzIpIHtcclxuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVNYXAgKCkge1xyXG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXHJcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcclxuXHRyZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNWYWxpZE9iamVjdE1heERlcHRoIChtYXhEZXB0aCkge1xyXG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xyXG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XHJcblx0Y29uc3Qgc3RhY2tEZXN0ID0gW107XHJcblxyXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xyXG5cclxuXHRpZiAoZGVzdGluYXRpb24pIHtcclxuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRW1wdHkgdGhlIGRlc3RpbmF0aW9uIG9iamVjdFxyXG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcclxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIGNvcHlSZWN1cnNlKHNvdXJjZSwgZGVzdGluYXRpb24sIG1heERlcHRoKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBjb3B5RWxlbWVudChzb3VyY2UsIG1heERlcHRoKTtcclxuXHJcblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XHJcblx0XHRfbWF4RGVwdGgtLTtcclxuXHJcblx0XHRpZiAoX21heERlcHRoIDwgMClcclxuXHRcdFx0cmV0dXJuICcuLi4nO1xyXG5cclxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBpaSA9IF9zb3VyY2UubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG5cdFx0XHRcdF9kZXN0aW5hdGlvbi5wdXNoKGNvcHlFbGVtZW50KF9zb3VyY2VbaV0sIF9tYXhEZXB0aCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzQmxhbmtPYmplY3QoX3NvdXJjZSkpIHtcclxuXHRcdFx0Ly8gY3JlYXRlTWFwKCkgZmFzdCBwYXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBlIGNoYWluIGlzIGVtcHR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdC8vIFNsb3cgcGF0aCwgd2hpY2ggbXVzdCByZWx5IG9uIGhhc093blByb3BlcnR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2FuJ3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kXHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9zb3VyY2UsIGtleSkpIHtcclxuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBfZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb3B5RWxlbWVudCAoX3NvdXJjZSwgX21heERlcHRoID0gNSkge1xyXG5cdFx0Ly8gU2ltcGxlIHZhbHVlc1xyXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcclxuXHRcdFx0cmV0dXJuIF9zb3VyY2U7XHJcblxyXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XHJcblxyXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XHJcblx0XHRsZXQgX2Rlc3RpbmF0aW9uID0gY29weVR5cGUoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdF9kZXN0aW5hdGlvbiA9IGlzQXJyYXkoX3NvdXJjZSkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9zb3VyY2UpKTtcclxuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goX2Rlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXHJcblx0XHRcdD8gY29weVJlY3Vyc2UoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpXHJcblx0XHRcdDogX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weVR5cGUgKF9zb3VyY2UpIHtcclxuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihjb3B5RWxlbWVudChfc291cmNlLmJ1ZmZlciksIF9zb3VyY2UuYnl0ZU9mZnNldCwgX3NvdXJjZS5sZW5ndGgpO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTBcclxuXHRcdFx0XHRpZiAoIV9zb3VyY2Uuc2xpY2UpIHtcclxuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxyXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cclxuXHRcdFx0XHRcdGNvbnN0IGNvcGllZCA9IG5ldyBBcnJheUJ1ZmZlcihfc291cmNlLmJ5dGVMZW5ndGgpO1xyXG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xyXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNvcGllZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIF9zb3VyY2Uuc2xpY2UoMCk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBOdW1iZXJdJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKF9zb3VyY2UudmFsdWVPZigpKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XHJcblx0XHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKF9zb3VyY2UuX3NvdXJjZSwgX3NvdXJjZS50b1N0cmluZygpLm1hdGNoKC9bXi9dKiQvKVswXSk7XHJcblxyXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmU7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJsb2JdJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoW19zb3VyY2VdLCB7dHlwZTogX3NvdXJjZS50eXBlfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzRnVuY3Rpb24oX3NvdXJjZS5jbG9uZU5vZGUpKSB7XHJcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XHJcblx0TU9NRU5UX0lOVkFMSUQgPSAnSW52YWxpZCBkYXRlJztcclxuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xyXG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XHJcblx0U0VSVkVSX0RBVEVfRk9STUFUID0gJ1lZWVktTU0tREQnO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2UgKGZpZWxkcywgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHBhbmRSZXNwb25zZSAoY3VycmVudCwgZXhwYW5kZWQsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y3VycmVudFtjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBleHBhbmRlZFtjb2x1bW4ucGF0aF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdCAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGhhc0NoYW5nZXMgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3RbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjb3B5RmllbGRzIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0c2hhbGxvd0NvcHlGaWVsZHMgKHNoYWxsb3dTb3VyY2UsIGRlZXBTb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gc2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRzaGFsbG93U291cmNlW2NvbHVtblBhdGhdIDpcclxuXHRcdFx0XHR0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZGVlcFNvdXJjZVtjb2x1bW5QYXRoXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0c2V0RGVmYXVsdFZhbHVlcyAoZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUZpZWxkcyAoY29sdW1uVHlwZSwgZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xyXG5cdFx0XHRjYXNlICdib29sJzogLy8gYm9vbGVhbiB0eXBlc1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGbG9hdHMgKGEsIGIpIHtcclxuXHRcdGNvbnN0IGFic0EgPSBNYXRoLmFicyhhKTtcclxuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcclxuXHRcdGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhIC0gYik7XHJcblxyXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xyXG5cclxuXHRcdC8vIHNob3J0Y3V0LCBoYW5kbGVzIGluZmluaXRpZXNcclxuXHRcdGlmIChhID09PSBiKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmIChhID09PSAwIHx8IGIgPT09IDAgfHwgZGlmZiA8IE51bWJlci5NSU5fVkFMVUUpIHtcclxuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XHJcblx0XHRcdC8vIHJlbGF0aXZlIGVycm9yIGlzIGxlc3MgbWVhbmluZ2Z1bCBoZXJlXHJcblx0XHRcdHJldHVybiBkaWZmIDwgKEVQU0lMT04gKiBOdW1iZXIuTUlOX1ZBTFVFKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIHVzZSByZWxhdGl2ZSBlcnJvclxyXG5cdFx0XHRyZXR1cm4gZGlmZiAvIE1hdGgubWluKChhYnNBICsgYWJzQiksIE51bWJlci5NQVhfVkFMVUUpIDwgRVBTSUxPTjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRpZiAoIWZpcnN0LmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuICFzZWNvbmQuaXNWYWxpZCgpO1xyXG5cclxuXHRcdGlmICghc2Vjb25kLmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBmaXJzdCBJUyB2YWxpZFxyXG5cclxuXHRcdHJldHVybiBmaXJzdC5pc1NhbWUoc2Vjb25kKTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVEdXJhdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGVUaW1lKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdENvbG9yKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG1vbWVudC5pbnZhbGlkKCkgOiBtb21lbnQodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VEdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUgPT09IG51bGwgPyAwIDogdmFsdWUsICdzZWNvbmRzJyk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZUNvbG9yICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURVRJTUVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURV9GT1JNQVQpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaW50JzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiAnMCc7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuaW52YWxpZCgpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbigpO1xyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdHVybFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0aHRtbFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZGF0YVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb247XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEYXRlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmlkZW50aXR5O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2xvbmVEdXJhdGlvbiAoZHVyYXRpb24pIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xyXG5cdH1cclxuXHJcblx0Y2xvbmVEYXRlIChkYXRlKSB7XHJcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xyXG5cdH1cclxuXHJcblx0aWRlbnRpdHkgKGlucHV0KSB7XHJcblx0XHRyZXR1cm4gaW5wdXQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVxdWVzdFNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcGFyYW1zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnRlbXBsYXRlKGl0ZW1UeXBlLCBwYXJhbXMpKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgdmFsdWVzOiBhbnksIHBhcmVudFR5cGU/OiBJdGVtVHlwZSwgcGFyZW50SWQ/OiBJdGVtSWQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShpdGVtVHlwZSwgaXRlbUlkLCB2YWx1ZXMsIHBhcmVudFR5cGUsIHBhcmVudElkKSk7XHJcblx0fVxyXG5cclxuXHRkZWxldGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IG9iamVjdCwgY29sdW1uczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpKTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RTa2VsZXRvbiAocGFyYW1zOiBhbnksIHJlcXVlc3RDYW5jZWxlcj86IFByb21pc2U8YW55Pik6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcywgcmVxdWVzdENhbmNlbGVyKSk7XHJcblx0fVxyXG5cclxuXHRtb3ZlSXRlbXMgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtczogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XHJcblx0fVxyXG5cclxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IG9iamVjdCwgcGFyYW1zPzogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMpKTtcclxuXHR9XHJcblxyXG5cdHF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBvYmplY3QsIGNvbHVtbnM6IG9iamVjdCwgbGltaXQ/OiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucywgbGltaXQpKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlKSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZU1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xyXG5cdGNvbHVtbnM6IEl0ZW1UeXBlTWFwO1xyXG5cdGl0ZW1zOiBJdGVtVHlwZU1hcDtcclxuXHRsaW5rczogSXRlbVR5cGVNYXA7XHJcblx0Y2FjaGVhYmxlOiBib29sZWFuO1xyXG5cdG1hcDogYW55O1xyXG5cclxuXHRjb2x1bW5JbmRleE1hcDogYW55ID0ge307XHJcblx0Y29sdW1uTWFwOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcclxuXHQpIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IHJlc3BvbnNlLmNvbHVtbnM7XHJcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHR0aGlzLmxpbmtzID0gcmVzcG9uc2UubGlua3M7XHJcblx0XHR0aGlzLmNhY2hlYWJsZSA9IHJlc3BvbnNlLmNhY2hlYWJsZTtcclxuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xyXG5cclxuXHRcdHRoaXMuY3JlYXRlQ29sdW1uTWFwcygpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sdW1uTWFwcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdW2ldO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGNvbHVtbjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVt0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF1dO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXHJcblx0XHRcdFx0Y29sdW1uLFxyXG5cdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRsZXQgY2hpbGRWYWx1ZTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdGNoaWxkVmFsdWUgPSBudWxsO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gdGhpcy5mZXRjaFZhbHVlKGNvbHVtbi5pdGVtVHlwZSwgdmFsdWUsIGNoaWxkQ29sdW1uLmlkKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3QgKGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdGlmIChpdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YTtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHJlc3VsdFt0aGlzLmNvbHVtbnNbaXRlbVR5cGVdW2ldLmlkXSA9IGRhdGFbaV07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVMaW5rcykge1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XHJcblx0XHRcdHJlc3VsdC5fX2xpbmtzID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxyXG5cdFx0XHRcdHJlc3VsdC5fX2xpbmtzW2xpbmtUeXBlXSA9XHJcblx0XHRcdFx0XHR0aGlzLmZldGNoT2JqZWN0QXJyYXkobGlua1R5cGUsIGluY2x1ZGVMaW5rcywgbGlua3NbbGlua1R5cGVdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RBcnJheSAoaXRlbVR5cGUsIGluY2x1ZGVMaW5rcywgaWRBcnJheSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRpZEFycmF5ID0gdGhpcy5saW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSlcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcclxuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtjb2x1bW5JbmRleF07XHJcblx0XHRcdGtleXMucHVzaChrZXkpO1xyXG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkLCBpbmNsdWRlTGlua3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXR1cm5LZXlzKVxyXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcclxuXHRcdGVsc2VcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXN1bHRbaWRdID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbaW5kZXhdO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBSZXNwb25zZUNvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0LnB1c2goYXBpQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXBbaXRlbVR5cGVdO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5zT2JqZWN0ICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZSwgaWQpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9iamVjdDogdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQpLFxyXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0aGFzSXRlbXMgKGl0ZW1UeXBlKSB7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XHJcblx0Q0FDSEVEID0gJ2NhY2hlZCcsXHJcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxyXG5cdEVYUEFORCA9ICdleHBhbmQnLFxyXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxyXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXHJcblx0TE9DQUwgPSAnbG9jYWwnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBTExfUEVSTUlTU0lPTlMgPSAnNyc7XHJcblxyXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcclxuZXhwb3J0IGNvbnN0IFJFTkRFUl9BU19TRVBFUkFUT1IgPSAnOic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9LRVlXT1JEOiBzdHJpbmcgPSAnZHVwLSc7XHJcbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlTdGF0dXMsIEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXMge1xyXG5cdGVudHJpZXM6IEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1JZCxcclxuXHRcdHB1YmxpYyBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5PiAvLyB0b2RvOiBwcm9taXNlIHJldHVybiB0eXBlXHJcblx0KSB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXHJcblx0XHRcdHRoaXMuZW50cmllc1tFTlRSWV9TVEFUVVNbc3RhdHVzXV0gPSBbXTtcclxuXHR9XHJcblxyXG5cdGFkZCAoZW50cnlTdGF0dXM6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4pOiB2b2lkIHtcclxuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW3N0YXR1c10gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10gPSBbXTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbc3RhdHVzXS5wdXNoKGVudHJ5U3RhdHVzLmVudHJ5KTtcclxuXHR9XHJcblxyXG5cdGhhc0VudHJpZXMgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0aGFzUmVxdWVzdHMgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xyXG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXHJcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUFJPTUlTRUQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdElkcyAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRSwgRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0sXHJcblx0XHRcdGVudHJ5ID0+IHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmdldEl0ZW1JZChlbnRyeSkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRBcnJheSAoKTogSXRlbUVudHJ5W10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goc3RhdHVzRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0Y29tcGlsYXRpb24gPSB7XHJcblx0XHRjcmVhdGU6IHt9LFxyXG5cdFx0ZGVsZXRlOiB7fSxcclxuXHRcdHVwZGF0ZToge30sXHJcblx0XHRtb3ZlOiB7fVxyXG5cdH07XHJcblxyXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblxyXG5cdHByaXZhdGUgbW92ZUFycmF5OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdHByaXZhdGUgZGVsZXRlTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W11cclxuXHQpIHtcclxuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblxyXG5cdFx0dGhpcy5wcm9jZXNzU2luZ2xlSXRlbXMoKTtcclxuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25FbnRyaWVzKTtcclxuXHRcdHRoaXMucG9zdFByb2Nlc3MoKTtcclxuXHR9XHJcblxyXG5cdGdldERlZmF1bHRQYXJlbnQgKCk6IEVudHJ5UGFyZW50IHtcclxuXHRcdHJldHVybiB7aXRlbVR5cGU6ICdWb2lkJywgaXRlbUlkOiAwfTtcclxuXHR9XHJcblxyXG5cdGFkZE1vdmVFbnRyeSAoaXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLm1vdmVBcnJheS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0fVxyXG5cclxuXHRhZGREZWxldGVFbnRyeSAoaXRlbUVudHJ5LCBwYXJlbnRJZCwgcGFyZW50VHlwZSkge1xyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5kZWxldGVNYXAsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIHtwYXJlbnRJZDogcGFyZW50SWQsIGl0ZW06IGl0ZW1FbnRyeSwgcGFyZW50VHlwZTogcGFyZW50VHlwZX1dXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkVXBkYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0dGhpcy5jb21waWxhdGlvbi51cGRhdGUsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIGl0ZW1FbnRyeV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRDcmVhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XHJcblx0XHRsZXQgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcclxuXHJcblx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcclxuXHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB7fSwge30sIGl0ZW1FbnRyeV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwb3N0UHJvY2VzcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLm1vdmVBcnJheSkge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0XHRpZiAoZGVsZXRlRW50cnkgPT09IHVuZGVmaW5lZCB8fCBkZWxldGVFbnRyeVtpdGVtSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHQvLyBhc3N1bWUgdGhlIGl0ZW1FbnRyeSBoYXMgYSBwYXJlbnQgKG9yIHNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZylcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0Y29uc3QgZGVzdGluYXRpb24gPSBjcmVhdGVQYXRoKFxyXG5cdFx0XHRcdHRoaXMuY29tcGlsYXRpb24ubW92ZSxcclxuXHRcdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkXSxcclxuXHRcdFx0XHRbe30sIFtdXVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChkZWxldGVFbnRyeVtpdGVtSWRdKTtcclxuXHJcblx0XHRcdGRlbGV0ZSBkZWxldGVFbnRyeVtpdGVtSWRdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5kZWxldGVNYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5kZWxldGVNYXBbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtVHlwZV1baXRlbUlkXS5pdGVtO1xyXG5cdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XHJcblxyXG5cdFx0XHRcdGlmIChkZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NTaW5nbGVJdGVtcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLnNpbmdsZUl0ZW1zKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdHRoaXMuYWRkQ3JlYXRlRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAoaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NDb2xsZWN0aW9ucyAoY29sbGVjdGlvbkVudHJpZXMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIGFkZCB0aGUgY29sbGVjdGlvbiBwYXJlbnQgaWQgdG8gdGhlIGRlbGV0ZSBlbnRyeSAoaW4gY2FzZSB0aGUgaXRlbSBoYXMgYmVlbiBtb3ZlZClcclxuXHRcdFx0bGV0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRcdHBhcmVudCA9IHRoaXMuZ2V0RGVmYXVsdFBhcmVudCgpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0bGV0IGFkZGVkSXRlbXM7XHJcblx0XHRcdFx0bGV0IHJlbW92ZWRJdGVtcztcclxuXHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0xvY2FsKCkpIHtcclxuXHRcdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XHJcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRBZGRlZEl0ZW1zKCk7XHJcblx0XHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0UmVtb3ZlZEl0ZW1zKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbSBvZiBhZGRlZEl0ZW1zKSB7XHJcblx0XHRcdFx0XHRpZiAoYWRkZWRJdGVtLmlzTG9jYWwoKSlcclxuXHRcdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdFx0ZWxzZVxyXG5cdFx0XHRcdFx0XHR0aGlzLmFkZE1vdmVFbnRyeShhZGRlZEl0ZW0pO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbSBvZiByZW1vdmVkSXRlbXMpXHJcblx0XHRcdFx0XHR0aGlzLmFkZERlbGV0ZUVudHJ5KHJlbW92ZWRJdGVtLCBwYXJlbnQuaXRlbUlkLCBwYXJlbnQuaXRlbVR5cGUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtcygpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHVwZGF0ZWRJdGVtIG9mIHVwZGF0ZWRJdGVtcylcclxuXHRcdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkodXBkYXRlZEl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpRm9ybWF0dGVyLFxyXG5cdENoYW5nZXNDb21waWxhdGlvbixcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdENvbHVtbkluZm8sXHJcblx0SXRlbUhhbmRsZXJcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEVudHJ5UGFyZW50LCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoLCBnZXRQYXRoLCBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB3ZSBjYW4gcmVtb3ZlIHRoaXMgb25jZSB0aGUgZG9jdW1lbnQgY3JlYXRpb24gaGFzIGJlZW4gdXBkYXRlZFxyXG5cdGdldEl0ZW1UeXBlVXBkYXRlUHJpb3JpdHkgKGl0ZW1UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbGJlZHJhZyc6XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbCc6XHJcblx0XHRcdGNhc2UgJ01pbmZhY3R1dXInOlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0YnVpbGRNb3ZlUmVxdWVzdCAoY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcclxuXHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdHJlc3VsdFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TWFwVmFsdWUgKGl0ZW1UeXBlLCBpdGVtSWQsIG1hcCkge1xyXG5cdFx0aWYgKG1hcCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzIChcclxuXHRcdGNoYW5nZXNDb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcclxuXHRcdGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsXHJcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxyXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb21waWxhdGlvbi5jcmVhdGUsXHJcblx0XHRcdGNoYW5nZXNDb21waWxhdGlvbi5jb2xsZWN0aW9ucyxcclxuXHRcdFx0cGFyYW1ldGVycyxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpLnJ1bigpO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VzOiBBcnJheTxQcm9taXNlPGFueT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKVxyXG5cdFx0XHRyZXNwb25zZXMucHVzaCh0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0KHJlcXVlc3QsIGNvbnZlcnNpb25NYXApLnRoZW4obm90aWZ5KSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3BvbnNlcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gbm90aWZ5IChyZXN1bHQpIHtcclxuXHRcdFx0aWYgKG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2UsIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlTWFwID0gcmVzcG9uc2UubWFwO1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gcmVxdWVzdFJlc291cmNlLml0ZW1zO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1uc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuZ2V0TWFwVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgcmVzcG9uc2VNYXApO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKG5ld0l0ZW1JZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdDcmVhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZCA9IG5ld0l0ZW1JZDtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUZpZWxkcyhmaWVsZHMpO1xyXG5cclxuXHRcdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2VcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuYWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cclxuXHRcdFx0XHQvLyBleHRlbmQgY29udmVyc2lvbiBtYXBcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHJlc3BvbnNlTWFwKSB7XHJcblx0XHRcdFx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiByZXNwb25zZU1hcFtpdGVtVHlwZV0pXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSByZXNwb25zZU1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3QgcHJpb3JpdGl6ZWRJdGVtVHlwZXM6IHN0cmluZ1tdW10gPSBbW10sIFtdLCBbXV07XHJcblx0XHRsZXQgcmVxdWVzdENoYWluID0gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbilcclxuXHRcdFx0cHJpb3JpdGl6ZWRJdGVtVHlwZXNbdGhpcy5nZXRJdGVtVHlwZVVwZGF0ZVByaW9yaXR5KGl0ZW1UeXBlKV0ucHVzaChpdGVtVHlwZSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZXMgb2YgcHJpb3JpdGl6ZWRJdGVtVHlwZXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1UeXBlcy5sZW5ndGggPT09IDApXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRyZXF1ZXN0Q2hhaW4gPSByZXF1ZXN0Q2hhaW4udGhlbihcclxuXHRcdFx0XHR0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyhpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSxcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdENoYWluO1xyXG5cdH1cclxuXHJcblx0Ly8gY29uc3RydWN0IGEgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0cyAoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycykge1xyXG5cdFx0cmV0dXJuICgpID0+IHtcclxuXHRcdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXHJcblx0XHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVVcGRhdGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0sIHBhcmFtZXRlcnMpKTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzLCBwYXJhbWV0ZXJNYXApIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSB7fTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xyXG5cclxuXHRcdHJlcXVlc3RbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Ly8gd2UgbmVlZCB0byBkbyB0aGUgZm9ybWF0UmVxdWVzdCBjYWxsIGhlcmUgKGZpZWxkcyBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZClcclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XHJcblx0XHRcdC8vIFJNQ29yZSB0b2RvOiB0eXBlXHJcblx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0W2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XHJcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnMgPSBnZXRQYXRoKHBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblxyXG5cdFx0XHRpZiAocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zID0gY29sbGVjdGlvbk1hdGNoZXIuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcylcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMuZXhwYW5kKGNvbGxlY3Rpb24uY29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UudXBkYXRlSXRlbXMoaXRlbVR5cGUsIHJlcXVlc3QsIHJlcXVlc3RDb2x1bW5zLmdldCgpKS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0cmVxdWVzdENvbHVtbnMuZ2V0KCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignVXBkYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5LmluaXRpYWwsIHt9LCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdFx0LnNldERlcml2ZWQocmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGl0ZW1FbnRyeS5jb2x1bW5zLnJvb3QpKVxyXG5cdFx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcylcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdGZpZWxkcyxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb21waWxhdGlvbikgLy8gY2xlYXJpbmcgbm90IG5lY2Vzc2FyeVxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0IChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSB7XHJcblx0XHRjb25zdCBpZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRpZEFycmF5LnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpZEFycmF5KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZEFycmF5ID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgcmVzcG9uc2VJZEFycmF5KSlcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdEZWxldGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5yZW1vdmVGcm9tQ29sbGVjdGlvbnMoKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlTW92ZVJlcXVlc3RzIChjb21waWxhdGlvbiwgY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XHJcblx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29tcGlsYXRpb25bcGFyZW50VHlwZV0pXHJcblx0XHRcdFx0ZXhlY3V0ZU1vdmVSZXF1ZXN0KHBhcmVudFR5cGUsIHBhcmVudElkKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cclxuXHRcdGZ1bmN0aW9uIGV4ZWN1dGVNb3ZlUmVxdWVzdCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdFx0Ly8gb25seSB0aGUgcGFyZW50IGlkIGNvdWxkIGhhdmUgYmVlbiB1cGRhdGVkXHJcblx0XHRcdGNvbnN0IGNvbXBpbGF0aW9uRW50cmllcyA9IGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdW3BhcmVudElkXTtcclxuXHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSBzZWxmLmdldE1hcFZhbHVlKHBhcmVudFR5cGUsIHBhcmVudElkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdHJlcXVlc3RzLnB1c2goXHJcblx0XHRcdFx0c2VsZi5hcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMoXHJcblx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0bmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCA/IG5ld1BhcmVudElkIDogcGFyZW50SWQsXHJcblx0XHRcdFx0XHRzZWxmLmJ1aWxkTW92ZVJlcXVlc3QoY29tcGlsYXRpb25FbnRyaWVzKVxyXG5cdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0c2VsZi5wcm9jZXNzTW92ZVJlc3BvbnNlKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0c2VsZi5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzTW92ZVJlc3BvbnNlICgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdC8vIFRPRE86IHByb2Nlc3MgcmVzcG9uc2VcclxuXHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlbW92ZUNvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHRcdGNvbnN0IGFkZENvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbXBpbGF0aW9uRW50cnkgb2YgY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeTogSXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0cmVtb3ZlQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHRjb21waWxhdGlvbkVudHJ5LnBhcmVudElkLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcclxuXHRcdFx0XHRhZGRDb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRcdCg8RW50cnlQYXJlbnQ+IGl0ZW1FbnRyeS5wYXJlbnQpLml0ZW1JZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihyZW1vdmVDb2xsZWN0aW9uTWFwLCAncmVtb3ZlSXRlbXMnKTtcclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24oYWRkQ29sbGVjdGlvbk1hcCwgJ2FkZEl0ZW1zJyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFkZENvbGxlY3Rpb25NYXBFbnRyeSAoY29sbGVjdGlvbk1hcCwgcGFyZW50SWQsIGl0ZW1FbnRyeSwgdmFsdWUpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXBFbnRyeSA9IGNyZWF0ZVBhdGgoXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFtpdGVtRW50cnkucGFyZW50Lml0ZW1UeXBlLCBwYXJlbnRJZCwgaXRlbUVudHJ5Lml0ZW1UeXBlXSxcclxuXHRcdFx0W3t9LCB7fSwgW11dXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbGxlY3Rpb25NYXBFbnRyeS5wdXNoKHZhbHVlKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9yRWFjaENvbGxlY3Rpb24gKGNvbGxlY3Rpb25NYXAsIG1ldGhvZCkge1xyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5W21ldGhvZF0oXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIG5vdGU6IHdpdGggdGhlIG5ldyBpdGVtIHN0cnVjdHVyZSwgKmFsbCogbG9jYWwgaXRlbXMgYXJlIGluIHRoZSBzaW5nbGUgaXRlbSBjYWNoZVxyXG5cdHByaXZhdGUgb25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKSB7XHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29udmVyc2lvbk1hcCkpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cdFx0XHRjb25zdCB1cGRhdGVkQ29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5nZXRVcGRhdGVkSXRlbUNvbHVtbnMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucXVlcnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICghaGFzUHJvcGVydGllcyh1cGRhdGVkQ29sdW1ucykpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodXBkYXRlZENvbHVtbnMuaWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcFtjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdKTtcclxuXHJcblx0XHRcdC8vIHdoZW4gdXBkYXRpbmcgYW4gaXRlbSB0byByZWZlciB0byBhIG5ld2x5IGNyZWF0ZWQgaXRlbSwgdGhlIHVwZGF0ZWQgaXRlbSB3aWxsICpub3QqIGJlIGFkZGVkIHRvXHJcblx0XHRcdC8vIHNpbmdsZSBpdGVtcyAoZS5nLiBtb3ZpbmcgYSBmdW5jdGlvbiB0byBhIG5ld2x5IGNyZWF0ZWQgZnVuY3Rpb24gZ3JvdXApXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcclxuXHRcdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBzaW5nbGVJdGVtcykge1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0Y29uc3QgbmV3UGFyZW50SWQgPSB0aGlzLmdldE1hcFZhbHVlKHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdGlmIChuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBwcm9wZXIgb3JkZXI6IGNyZWF0ZSAtIG1vdmUgLSBkZWxldGUgLSB1cGRhdGVcclxuXHRleGVjdXRlIChcclxuXHRcdHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSxcclxuXHRcdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSxcclxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSB7fSxcclxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCkge1xyXG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSBjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb247XHJcblx0XHRjb25zdCBjb252ZXJzaW9uTWFwID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzKGNoYW5nZXNDb21waWxhdGlvbiwgcGFyYW1ldGVycywgY29udmVyc2lvbk1hcCwgYnJlYWt1cEJ5UGFyZW50LCBvbkFmdGVyQ3JlYXRlQ2FsbGJhY2spLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVNb3ZlUmVxdWVzdHMoY29tcGlsYXRpb24ubW92ZSwgY29udmVyc2lvbk1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcmlvcml0aXplVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHRcdFx0fSwgLy8gaXRlbSBpZCBjb252ZXJzaW9uIG1hcFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeUl0ZW1UeXBlTWFwLCBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZW51bSBDT05TVEFOVFMge1xyXG5cdE1BWUJFID0gJ21heWJlJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlIHtcclxuXHRlbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlJdGVtVHlwZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IGVudHJ5KVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRzb21lIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpOiBib29sZWFuIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGlmIChjYWxsYmFjayhlbnRyeSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgaW4gdXNlXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB2b2lkKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0Y2FsbGJhY2soZW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dG9BcnJheSAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0dGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXS5pbmRleE9mKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0aWYgKGluZGV4ID09PSAtMSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBzdHJpbmcpOiBDb2xsZWN0aW9uRW50cnlbXSB7XHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0uc2xpY2UoKTtcclxuXHR9XHJcblxyXG5cdG1hdGNoUGFyZW50IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHRoaW5rIG9mIGJldHRlciBuYW1lXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0UmVzb3VyY2VCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmdldEJ5UGFyZW50KHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5nZXRDdXJyZW50UmVzb3VyY2UoKTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25zQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPbmx5IHJlc291cmNlc1xyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGl0ZW1JZFxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFycmF5IG9mIGNvbGxlY3Rpb25zLlxyXG5cdCAqL1xyXG5cdGdldEJ5Q29udGFpbmluZ0l0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5nZXRJdGVtQnlJZChpdGVtSWQpICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJucyBhbiBhcnJheSBvZiBjb2xsZWN0aW9ucyB0aGUgaXRlbSAnYmVsb25ncycgaW4uXHJcblx0ICovXHJcblx0Z2V0QnlGaXR0aW5nSXRlbSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7Zml0dGluZzogW10sIG5vdGZpdHRpbmc6IFtdLCBtYXliZTogW119O1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Ly8gY29uc29sZS50aW1lKCdnZXRCeUZpdHRpbmdJdGVtJyk7XHJcblxyXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZmllbGRzLCBwYXJlbnQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2hSZXN1bHQgPSBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KTtcclxuXHJcblx0XHRcdC8vIFRPRE86IG1heWJlP1xyXG5cdFx0XHRpZiAobWF0Y2hSZXN1bHQgPT09IHRydWUpIC8vIG1pZ2h0IGFsc28gcmV0dXJuICdtYXliZSdcclxuXHRcdFx0XHRyZXN1bHQuZml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKG1hdGNoUmVzdWx0ID09PSBDT05TVEFOVFMuTUFZQkUpXHJcblx0XHRcdFx0cmVzdWx0Lm1heWJlLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdHJlc3VsdC5ub3RmaXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBjb25zb2xlLnRpbWVFbmQoJ2dldEJ5Rml0dGluZ0l0ZW0nKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGUsIHF1ZXJ5KTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkucXVlcnkuc3RyaW5nID09PSBxdWVyeS5zdHJpbmcpXHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldEJ5S2V5IChpdGVtVHlwZSwgZW50cnlLZXkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRpZiAoZW50cnkub3B0aW9ucy5lbnRyeUtleSA9PT0gZW50cnlLZXkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goZW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNvdXJjZUJ5S2V5IChpdGVtVHlwZSwgcmVzb3VyY2VLZXkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIGVudHJ5LnJlc291cmNlcykge1xyXG5cdFx0XHRcdGlmIChyZXNvdXJjZSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdC8vIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGNvbHVtbnMgcHJvcGVydHksIGl0IHdpbGwgYmUgcmVwbGFjZWQgaW4gd2hlbiBjb2x1bW5zIGFyZSBleHBhbmRlZFxyXG5cdGNsb25lT3B0aW9ucyAob3B0aW9ucywgcGFyZW50KSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpOyAvLyBkb2VzIGEgc2hhbGxvdyBjb3B5XHJcblxyXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cdFx0cmVzdWx0LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2xvbmVRdWVyeVBhcmFtcyAocGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcGFyYW1ldGVycykge1xyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcclxuXHRcdFx0bGV0IGNsb25lO1xyXG5cclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuc2xpY2UoKTsgLy8gd2UncmUgb25seSB1c2luZyBwcmltaXRpdmUgYXJyYXlzXHJcblx0XHRcdGVsc2UgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZTtcclxuXHJcblx0XHRcdHJlc3VsdFtrZXldID0gY2xvbmU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y29sdW1uczogW10sXHJcblx0XHRcdFx0cXVlcnk6IG51bGwsXHJcblx0XHRcdFx0cXVlcnlJdGVtVHlwZTogbnVsbCxcclxuXHRcdFx0XHRxdWVyeVBhcmFtczoge30sXHJcblx0XHRcdFx0cGFyZW50OiBudWxsLFxyXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZmFsc2UsXHJcblx0XHRcdFx0bGltaXQ6IG51bGwsXHJcblx0XHRcdFx0ZW50cnlLZXk6ICcnXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVRdWVyeSAob3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0bGV0IHF1ZXJ5O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zdCBsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiB7aWQ6ICcmcGFyZW50SWQnfX07XHJcblx0XHRcdG9wdGlvbnMucXVlcnlQYXJhbXMucGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xyXG5cclxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0XHRsaW5rZWRUb1F1ZXJ5IDpcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHtvYmplY3Q6IHBhcnNlZFF1ZXJ5WzBdLCBzdHJpbmc6IHBhcnNlZFF1ZXJ5WzFdfTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWNjdW11bGF0b3IpOiBJdGVtSWRbXSB7XHJcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0YWNjdW11bGF0b3IgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0YWNjdW11bGF0b3IucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0l0ZW1FbnRyeVtdfSBpdGVtRW50cmllc1xyXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xyXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cclxuXHQgKlxyXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxyXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxyXG5cdCAqL1xyXG5cdGZpbHRlckFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlbW92ZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtRW50cnkpKVxyXG5cdFx0XHRcdGZpbHRlcmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRyZW1vdmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlbW92ZWRFbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xyXG5cclxuXHRcdGl0ZW1FbnRyaWVzLmxlbmd0aCA9IGZpbHRlcmVkRW50cmllcy5sZW5ndGg7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcclxuXHRcdFx0aXRlbUVudHJpZXNbaV0gPSBmaWx0ZXJlZEVudHJpZXNbaV07XHJcblxyXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbk1hdGNoZXIsXHJcblx0Q29sdW1uRXhwYW5zaW9uLFxyXG5cdENvbHVtbkhhbmRsZXIsXHJcblx0Q29sdW1uU2V0LFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0S2V5U2VydmljZSxcclxuXHRRdWVyeVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwLCBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgRW50cnlQYXJlbnQsIEVudHJ5U3RhdHVzLCBJdGVtRW50cnlQYXJlbnRJZE1hcCwgSXRlbUlkLFxyXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCwgSXRlbVR5cGVcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSGFuZGxlciB7XHJcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHR9XHJcblxyXG5cdGdldFByb21pc2VzIChzdGF0dXNSZXNvdXJjZTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXApIHtcclxuXHRcdGNvbnN0IHByb21pc2VkID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlBST01JU0VEXTtcclxuXHRcdGNvbnN0IHByb21pc2VkRXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZClcclxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRbcGFyZW50SWRdKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkRXhwYW5kKVxyXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZEV4cGFuZFtwYXJlbnRJZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZXF1ZXN0SWRzIChzdGF0dXNSZXNvdXJjZSkge1xyXG5cdFx0Y29uc3QgcmVzb2x2ZSA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5SRVNPTFZFXTtcclxuXHRcdGNvbnN0IGV4cGFuZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcmVzb2x2ZSlcclxuXHRcdFx0cmVzdWx0LnB1c2gocmVzb2x2ZVtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBleHBhbmQpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGV4cGFuZFtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0ICovXHJcblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw/KSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnkgPSBlbnRyeS5jb2xsZWN0aW9uO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhlbnRyeS5ub3RmaXR0aW5nLCBudWxsLCB0cnVlKTtcclxuXHRcdFx0Y29sbGVjdGlvbi5hZGRJdGVtcyhlbnRyeS5maXR0aW5nLCBudWxsLCB0cnVlKTsgLy8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcclxuXHJcblx0XHRcdGlmIChlbnRyeS5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyICgpOiBDb2xsZWN0aW9uTWF0Y2hlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFt0aGlzLmVudHJpZXNdLCB0cnVlLCB0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0ICovXHJcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPywgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xyXG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdJdGVtIG9mIGZpdHRpbmcpXHJcblx0XHRcdFx0aWRBcnJheS5wdXNoKGZpdHRpbmdJdGVtLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IG1heWJlSXRlbSBvZiBtYXliZSlcclxuXHRcdFx0XHRpZEFycmF5LnB1c2gobWF5YmVJdGVtKTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IG1heWJlLCBib29sZWFuIGluc3RlYWQgb2YgbWVzc2FnZVxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0ICovXHJcblx0YWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMobWFwRW50cnkuZml0dGluZywgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmQgKHBhcmVudFR5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLCBuZXdDb2x1bW5zKTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VbXT4ge1xyXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0bGV0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0aXRlbUVudHJpZXMgPSBpdGVtRW50cmllcy5jb25jYXQoY29sbGVjdGlvbkVudHJ5Lml0ZW1zKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdG51bGwsXHJcblx0XHRcdG5ld0NvbHVtbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24oXHJcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5LmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHRlbmQgKFxyXG5cdFx0cGFyZW50VHlwZTogc3RyaW5nLFxyXG5cdFx0aXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRxdWVyeUNhbGxiYWNrLFxyXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLFxyXG5cdFx0cmV0dXJuQWxsSXRlbXMgPSBmYWxzZVxyXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlSXRlbUlkTWFwPiB7XHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29sbGVjdGlvbnMpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0bGV0IGl0ZW1JZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spO1xyXG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goKDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudCkuaXRlbUlkKTtcclxuXHJcblx0XHRcdGl0ZW1JZEFycmF5ID0gaXRlbUlkQXJyYXkuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5nZXRJZEFycmF5KCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4oaXRlbUlkQXJyYXkpXHJcblx0XHRcdCksXHJcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2UgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF07XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3RcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHJldHVybkFsbEl0ZW1zID8gY29sbGVjdGlvblJlc291cmNlLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGJhdGNoRmV0Y2ggKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2UgPSB0aGlzLmNyZWF0ZVN0YXR1c1Jlc291cmNlKHBhcmVudFR5cGUsIHBhcmVudElkQXJyYXksIGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbCh0aGlzLmdldFByb21pc2VzKHJlc291cmNlKSkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLmdldFJlcXVlc3RJZHMocmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHRcdFx0XHRcdG51bGwgOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpWzBdLFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShyZXNvdXJjZSwgaXRlbUVudHJ5UmVzb3VyY2UsIGl0ZW1DYWNoZSk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpLnRoZW4oXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcclxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1DYWNoZVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiByZXNvdXJjZVtFTlRSWV9TVEFUVVMuQ0FDSEVEXTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1c0lkIGluIEVOVFJZX1NUQVRVUylcclxuXHRcdFx0cmVzdWx0W0VOVFJZX1NUQVRVU1tzdGF0dXNJZF1dID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gdXNlIHByb2Nlc3NFbnRyeU9wdGlvbnMgdG8gY2xvbmUgVE9ETzogdXNlIGNsb25lT3B0aW9uc1xyXG5cclxuXHRcdFx0bGV0IHN0YXR1c1Jlc291cmNlO1xyXG5cclxuXHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCA9IHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH07XHJcblxyXG5cdFx0XHRzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcclxuXHJcblx0XHRcdHJlc3VsdFtzdGF0dXNSZXNvdXJjZS5zdGF0dXNdW3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblx0XHRjb25zdCBlbnRyeSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2U7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0Y29uc3QgaXNDb2x1bW5TdXBlcnNldCA9IGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zLmlzU3VwZXJzZXRPZihvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmICghY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0cmV0dXJuIGlzQ29sdW1uU3VwZXJzZXQgPyBFTlRSWV9TVEFUVVMuQ0FDSEVEIDogRU5UUllfU1RBVFVTLkVYUEFORDtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5MT0NBTCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpc0NvbHVtblN1cGVyc2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcclxuXHR9XHJcblxyXG5cdGdldERlZmVycmVkRW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcyk6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBib29sZWFufSB7XHJcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xyXG5cclxuXHRcdGlmICghb3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZFJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4ge2VudHJ5OiBkZWZlcnJlZEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIGlzRGVmZXJyZWQ6IHRydWV9O1xyXG5cdH1cclxuXHJcblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlKTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHRsZXQgaXNEZWZlcnJlZDtcclxuXHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKG9wdGlvbnMpKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IGxvY2FsRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xyXG5cclxuXHRcdFx0aWYgKGlzRGVmZXJyZWQpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XHJcblxyXG5cdFx0XHQvLyBuZXcgbG9jYWwgZW50cnkgY3JlYXRlZCwgc2hvdWxkIGJlIGFkZGVkIHRvIGxvY2FsIGNhY2hlIG9ubHlcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHQvLyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBnbG9iYWwgY2FjaGUsIGFkZCB0byBsb2NhbCBjYWNoZVxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLFxyXG5cdFx0XHRcdHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xyXG5cclxuXHRcdGlmIChpc0RlZmVycmVkKVxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcclxuXHJcblx0XHQvLyBuZXcgZ2xvYmFsIGVudHJ5IGNyZWF0ZWQsIGFkZCB0byBib3RoIGxvY2FsIGFuZCBnbG9iYWwgY2FjaGVcclxuXHRcdGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdHRoaXMuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlJFU09MVkV9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoXHJcblx0XHRzdGF0dXNSZXNvdXJjZSxcclxuXHRcdGl0ZW1FbnRyeUNvbXBvdW5kOiB7XHJcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldCxcclxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uLFxyXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwXHJcblx0XHR9LFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGVcclxuXHQpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmNhY2hlZClcclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmNhY2hlZFtwYXJlbnRJZF07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlKSB7XHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlW3BhcmVudElkXS5yZXNvbHZlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGl0ZW1zOiAoPEl0ZW1FbnRyeVBhcmVudElkTWFwPiBpdGVtRW50cnlDb21wb3VuZC5pdGVtcylbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmV4cGFuZCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmV4cGFuZFtwYXJlbnRJZF07XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyg8Q29sdW1uRXhwYW5zaW9uPiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmxvY2FsKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UubG9jYWxbcGFyZW50SWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSA8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1DYWNoZS5nZXRCeVBhcmVudChcclxuXHRcdFx0XHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkLFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVcclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlTG9jYWwgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucztcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtQ2FjaGUuZ2V0QnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucywgZmFsc2UpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGxldCBjb2x1bW5TZXQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucGFyZW50LFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtRW50cmllcy5jb25jYXQoaXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSksXHJcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIEl0ZW1JZCB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzLyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdG1hcDoge1xyXG5cdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiB7XHJcblx0XHRcdGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeVxyXG5cdFx0XHRtYXRjaGVzOiB7XHJcblx0XHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogeyBpdGVtOiBJdGVtRW50cnksIGlzTWF0Y2g6IGJvb2xlYW4gfVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLFxyXG5cdFx0cHJpdmF0ZSB1cGRhdGVJbml0aWFsOiBib29sZWFuLFxyXG5cdFx0cHJpdmF0ZSBjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25DYWNoZSBvZiB0aGlzLmNvbGxlY3Rpb25DYWNoZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlJdGVtVHlwZShpdGVtRW50cnkuaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgIG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XHJcblx0XHRcdFx0bGV0IG1hdGNoZXM7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9IHsgY29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fSB9O1xyXG5cclxuXHRcdFx0XHRtYXRjaGVzID0gdGhpcy5tYXBbY29sbGVjdGlvbkVudHJ5SWRdLm1hdGNoZXM7XHJcblxyXG5cdFx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRtYXRjaGVzW2l0ZW1JZF0gPSB7XHJcblx0XHRcdFx0XHRpdGVtOiBpdGVtRW50cnksXHJcblx0XHRcdFx0XHRpc01hdGNoOiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuaGFzRml0dGluZ0l0ZW1zKG1hcEVudHJ5Lm1hdGNoZXMpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG1hcEVudHJ5LmNvbGxlY3Rpb24pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGRUb0NvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtRW50cmllcyA9IGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcclxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcclxuXHRcdFx0XHRcdHJlc3VsdFJlc291cmNlLFxyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcclxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLnVwZGF0ZUluaXRpYWwgJiYgZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUlkcyA9IHRoaXMuZ3JvdXBJdGVtSWRzKG1hcEVudHJ5Lm1hdGNoZXMpLmZpdHRpbmc7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgPT09IG51bGwgfHwgY29sbGVjdGlvbkVudHJ5ICE9PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIHJlc3VsdFJlc291cmNlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhncm91cGVkSXRlbUVudHJpZXMubm90Rml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdGlmIChncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBncm91cEl0ZW1FbnRyaWVzIChtYXRjaGVzKSB7XHJcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcclxuXHRcdGNvbnN0IG1heWJlOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IG1hdGNoLml0ZW07XHJcblx0XHRcdGNvbnN0IGlzTWF0Y2ggPSBtYXRjaC5pc01hdGNoO1xyXG5cclxuXHRcdFx0aWYgKGlzTWF0Y2ggPT09IHRydWUpXHJcblx0XHRcdFx0Zml0dGluZy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKGlzTWF0Y2ggPT09IGZhbHNlKVxyXG5cdFx0XHRcdG5vdEZpdHRpbmcucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdG1heWJlLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4geyBmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nLCBtYXliZTogbWF5YmUgfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ3JvdXBJdGVtSWRzIChtYXRjaGVzKSB7XHJcblx0XHQvLyBhbHNvIGluY2x1ZGVzICdtYXliZSc7XHJcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xyXG5cclxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7IGZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcgfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFzRml0dGluZ0l0ZW1zIChtYXRjaGVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0uaXNNYXRjaCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdEl0ZW1zOiBmYWxzZSxcclxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXHJcblx0XHRcdFx0bW9kSW5zdGFudDogZmFsc2UsXHJcblx0XHRcdFx0ZW5hYmxlU2F2ZTogdHJ1ZSxcclxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcclxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCwgLy8gbmVlZGVkIGZvciBjb21wYXJpc29uXHJcblx0XHRcdFx0b25BZGQ6IG5vb3AsXHJcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXHJcblx0XHRcdFx0b25BZGRJbml0aWFsOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRvbkFjdGl2YXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlQ29sbGVjdGlvbjogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0cmVzb3VyY2VLZXk6IG51bGwsIC8vIFRPRE86IHJlbW92ZVxyXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXHJcblx0XHRcdFx0Y2xlYXJPblN1YlRhYkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0XHRjdXN0b206IG51bGxcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2FjaGUge1xyXG5cdGNhY2hlID0ge307XHJcblx0YWxsQ29sdW1ucyA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNldENvbHVtbiAoaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKSB7XHJcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5jYWNoZVtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRjb25zdCBlbnRyeSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSByZXNwb25zZUNvbHVtbi5pZDtcclxuXHJcblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVudHJ5W2NvbHVtbklkXSA9IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XHJcblx0fVxyXG5cclxuXHRzZXRDb2x1bW5zIChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSByZXNwb25zZUNvbHVtbnNbcmVzcG9uc2VUeXBlXTtcclxuXHJcblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXHJcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxyXG5cdFx0XHR0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmV0cmlldmUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk6IHsgbWlzc2luZzogYW55W10gfCB0cnVlLCBjYWNoZWQ6IG9iamVjdCB9IHtcclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHRpZiAodGhpcy5jb250YWluc0FsbChpdGVtVHlwZSkpXHJcblx0XHRcdFx0cmV0dXJuIHtjYWNoZWQ6IHRoaXMuZ2V0Q29sdW1ucyhpdGVtVHlwZSksIG1pc3Npbmc6IFtdfTtcclxuXHJcblx0XHRcdHJldHVybiB7Y2FjaGVkOiB7fSwgbWlzc2luZzogdHJ1ZX07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmVwb25zZUFjY3VtdWxhdG9yID0ge307XHJcblx0XHRjb25zdCByZXF1ZXN0QWNjdW11bGF0b3IgPSBbXTtcclxuXHJcblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVwb25zZUFjY3VtdWxhdG9yKTtcclxuXHJcblx0XHRyZXR1cm4ge21pc3Npbmc6IHJlcXVlc3RBY2N1bXVsYXRvciwgY2FjaGVkOiByZXBvbnNlQWNjdW11bGF0b3J9O1xyXG5cdH1cclxuXHJcblx0Y29udGFpbnNBbGwgKGl0ZW1UeXBlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGdldENvbHVtbnMgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogdGhpcy5jYWNoZVtpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRyZXN1bHRbaXRlbVR5cGVdID0gY29sdW1ucztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1ucyAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcclxuXHRcdC8vIGFsd2F5cyByZXRyaWV2ZSB0aGUgaWQgY29sdW1uXHJcblx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCAnaWQnLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucylcclxuXHRcdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW4gKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uKGl0ZW1UeXBlLCBjb2x1bW4uaWQpO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbWlzc2luZ0Rlcml2ZWQgPSBbXTtcclxuXHJcblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY29sdW1uLmNoaWxkcmVuLCBtaXNzaW5nRGVyaXZlZCwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XHJcblxyXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IG1pc3NpbmdSZXF1ZXN0ID0ge307XHJcblx0XHRtaXNzaW5nUmVxdWVzdFtjb2x1bW4uaWRdID0gbWlzc2luZ0Rlcml2ZWQ7XHJcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChtaXNzaW5nUmVxdWVzdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENvbHVtbiAoaXRlbVR5cGUsIGNvbHVtbklkKSB7XHJcblx0XHRpZiAodGhpcy5jYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNhY2hlW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uUmVzdWx0LCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbiB7XHJcblx0ZXhwYW5zaW9uTWFwOiB7W2NvbHVtblNldElkOiBudW1iZXJdOiBDb2x1bW5FeHBhbnNpb25SZXN1bHR9ID0ge307XHJcblx0cmVxdWVzdENvbHVtbnNUcnVlOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHB1YmxpYyByZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXHJcblx0KSB7XHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMgPT09IHRydWUpIHtcclxuXHRcdFx0Ly8gcmVxdWVzdENvbHVtbnMgc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheSwgd2hlbiBpdCBpcyB0cnVlIGRlcml2ZWQgY29sdW1uIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRydWU7XHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMgPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLnB1c2goY29sdW1uSWQpO1xyXG5cdFx0fSBlbHNlXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRydW4gKGNvbHVtblNldDogQ29sdW1uU2V0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHwgbnVsbCB7XHJcblx0XHRjb25zdCBjb2x1bW5TZXRJZCA9IGNvbHVtblNldC5pZDtcclxuXHJcblx0XHRpZiAodGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XHJcblxyXG5cdFx0Y29uc3QgaXNDb2x1bW5TdWJzZXQgPSB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQoXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0LFxyXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlXHJcblx0XHQpO1xyXG5cclxuXHRcdGlmIChpc0NvbHVtblN1YnNldClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0dGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdID0gdGhpcy5leHBhbmRDb2x1bW5JbmZvKGNvbHVtblNldCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhwYW5kQ29sdW1uSW5mbyAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQge1xyXG5cdFx0Y29uc3QgcmVxdWVzdE1lcmdlUmVzdWx0ID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVxdWVzdENvbHVtbnMoY29sdW1uU2V0LnJlcXVlc3QsIHRoaXMucmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0Y29uc3QgbWVyZ2VkUmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsXHJcblx0XHRcdC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhjb2x1bW5TZXQucmVzcG9uc2UsIHRoaXMucmVzcG9uc2VDb2x1bW5zKVxyXG5cdFx0XHQubWVyZ2VkO1xyXG5cclxuXHRcdGNvbnN0IG1lcmdlZCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5tZXJnZWQsXHJcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0KTtcclxuXHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0LmRpZmZlcmVuY2UsXHJcblx0XHRcdG1lcmdlZFJlc3BvbnNlQ29sdW1ucywgLy8gd2UgbmVlZCB0byBiZSBhYmxlIHRvIGxvb2sgdXAgdGhlIHBhcmVudCBvZiBkZXJpdmVkIGNvbHVtbnNcclxuXHRcdFx0ZmFsc2UsXHJcblx0XHRcdGZhbHNlXHJcblx0XHQpO1xyXG5cclxuXHRcdG1lcmdlZC5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSB8fCBjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlO1xyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5DYWNoZSwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblx0fVxuXG5cdHNldENvbHVtbnMgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRmZXRjaEl0ZW1UeXBlVHJhbnNsYXRpb25zIChpdGVtVHlwZXMpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxuXHRcdFx0cHJvbWlzZXNbaXRlbVR5cGVdID0gdGhpcy5mZXRjaChpdGVtVHlwZSwgWydpZCddKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcylcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0ge307XG5cblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIHJlc3BvbnNlKVxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHJlc3BvbnNlW2l0ZW1UeXBlXVtpdGVtVHlwZV0uaWQubmFtZTtcblxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdHJlcXVlc3QgKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMgPSB7ZmlsdGVyOiBmYWxzZX0pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xuXHRcdH07XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcGFyYW1zKS50aGVuKFxuXHRcdFx0Y29sdW1uUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2ggKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcGFyYW1zPyk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgY29sdW1uUmVzb3VyY2UgPSB0aGlzLmNhY2hlLnJldHJpZXZlKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucyk7XG5cblx0XHRpZiAoY29sdW1uUmVzb3VyY2UubWlzc2luZyAhPT0gdHJ1ZSAmJiBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sdW1uUmVzb3VyY2UuY2FjaGVkKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIGNvbHVtblJlc291cmNlLm1pc3NpbmcsIHBhcmFtcykudGhlbihyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoQWxsIChpdGVtVHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMuY2FjaGUuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIHRydWUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5JbmZvIHtcclxuXHRpZDogc3RyaW5nO1xyXG5cdGxldmVsOiBudW1iZXI7XHJcblx0cGF0aDogc3RyaW5nO1xyXG5cdHRhaWxQYXRoOiBzdHJpbmc7XHJcblx0aXRlbVR5cGU6IHN0cmluZyA9ICcnO1xyXG5cdGNoaWxkcmVuOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRpc0xlYWY6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAocmVhZG9ubHkgYXBpQ29sdW1uOiBhbnksIHJlYWRvbmx5IHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHJcblx0XHR0aGlzLmlkID0gY29sdW1uSWQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkge1xyXG5cdFx0XHR0aGlzLmxldmVsID0gMDtcclxuXHRcdFx0dGhpcy5wYXRoID0gY29sdW1uSWQ7XHJcblx0XHRcdHRoaXMudGFpbFBhdGggPSAnJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxO1xyXG5cdFx0XHR0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcclxuXHRcdFx0dGhpcy50YWlsUGF0aCA9IHBhcmVudC5sZXZlbCA9PT0gMCA/XHJcblx0XHRcdFx0Y29sdW1uSWQgOlxyXG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uSW5mbywgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7UmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQge1xyXG5cdGlkID0gKytjdXJyZW50SWQ7XHJcblxyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHRyZXNwb25zZTogUmVzcG9uc2VDb2x1bW5NYXAgPSBlbXB0eU9iamVjdDtcclxuXHJcblx0bGluazogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsO1xyXG5cdG1haW46IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGRlcml2ZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdHJvb3Q6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGxlYWY6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGZvcm1hdHRlZDoge21haW46IENvbHVtbkluZm9bXSwgZGVyaXZlZDogQ29sdW1uSW5mb1tdfSA9IHttYWluOiBbXSwgZGVyaXZlZDogW119O1xyXG5cdGZpbHRlcmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRjdXN0b206IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdHNlYXJjaGFibGU6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdG5vdEl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRlbmFibGVDYWNoaW5nOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZSxcclxuXHRcdHB1YmxpYyByZXF1ZXN0OiBSZXF1ZXN0Q29sdW1ucyxcclxuXHQpIHtcclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0ID09PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZyA9IHRydWUsIGluY2x1ZGVJZENvbHVtbiA9IHRydWUpOiB0aGlzIHtcclxuXHRcdHRoaXMuZW5hYmxlQ2FjaGluZyA9IGVuYWJsZUNhY2hpbmc7XHJcblxyXG5cdFx0aWYgKHRoaXMucmVxdWVzdENvbHVtbnNUcnVlKVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGVsc2VcclxuXHRcdFx0dGhpcy5wcm9jZXNzUmVxdWVzdENvbHVtbnMocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRjb25zdCBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMucmVxdWVzdCwgY29sdW1ucykubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMucmVxdWVzdCA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zO1xyXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzU3VwZXJzZXRPZiAoY29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQoY29sdW1ucywgdGhpcy5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHJcblx0XHR0aGlzLnJlcXVlc3QgPSBbXTtcclxuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1ucyh0aGlzLml0ZW1UeXBlLCB0cnVlLCByZXNwb25zZUNvbHVtbnMpIDpcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHR0aGlzLm1haW4ucHVzaCh0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBbXSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKSk7XHJcblx0XHRcdHRoaXMucmVxdWVzdC5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1JlcXVlc3RDb2x1bW5zIChyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbikge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSA8b2JqZWN0W10+IHRoaXMucmVxdWVzdDsgLy8gd2UgY2FuIGFzc3VtZSByZXF1ZXN0Q29sdW1ucyBpcyBhbiBhcnJheSBoZXJlXHJcblxyXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8ocmVxdWVzdENvbHVtbiwgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uSW5mbyA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcclxuXHRcdFx0XHR0aGlzLnJvb3QucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbaXRlbVR5cGVdLmlkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uSW5mbyAhPT0gbnVsbClcclxuXHRcdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29sdW1uLmlkO1xyXG5cclxuXHRcdGxldCByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmVuYWJsZUNhY2hpbmcpXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcclxuXHJcblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENvbHVtbkluZm8gKGNvbHVtbklkLCBpdGVtVHlwZSwgY2hpbGRyZW4sIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKTogQ29sdW1uSW5mbyB7XHJcblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZUNvbHVtbiwgcGFyZW50KTtcclxuXHRcdGNvbnN0IGlzRGVyaXZlZCA9IHBhcmVudCAhPT0gbnVsbDtcclxuXHJcblx0XHRpZiAoaXNEZXJpdmVkKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdGVsc2UgLy8gd2UgY291bGQgcG9zc2libHkgYWRkIGRlcml2ZWQgY29sdW1ucyB0byAnbm90SXRlbSdcclxuXHRcdFx0dGhpc1tjb2x1bW5VdGlsLmlzSXRlbUNvbHVtbihyZXNwb25zZUNvbHVtbikgPyAnaXRlbScgOiAnbm90SXRlbSddLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGb3JtYXR0ZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGaWx0ZXJlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuZmlsdGVyZWQucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLnNlYXJjaGFibGUucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc0N1c3RvbUNvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uLnR5cGUgPT09ICdsaW5rJylcclxuXHRcdFx0dGhpcy5saW5rID0gY29sdW1uSW5mbztcclxuXHJcblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMubGVhZi5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sdW1uSW5mby5pdGVtVHlwZSA9IHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlO1xyXG5cdFx0Y29sdW1uSW5mby5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0Y29sdW1uSW5mby5pc0xlYWYgPSBmYWxzZTtcclxuXHJcblx0XHQvLyBjb2x1bW5zIGlzICpub3QqIHRydWVcclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW5JZCBvZiBjaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBjaGlsZEluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uSWQsXHJcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXHJcblx0XHRcdFx0Y29sdW1uSW5mbyxcclxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChjaGlsZEluZm8gPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuLnB1c2goY2hpbGRJbmZvKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uSW5mbztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgTG9jYWxDb2x1bW4sIFJlcXVlc3RDb2x1bW4sIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblV0aWwge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnMsIHJlbmRlckFzKSB7XHJcblx0XHRsZXQgc2VwZXJhdG9yID0gJyc7XHJcblx0XHRsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRyZXN1bHQgKz0gc2VwZXJhdG9yICsgY29sdW1uLmlkO1xyXG5cdFx0XHRzZXBlcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcclxuXHRcdFx0cmVzdWx0ICs9IFJFTkRFUl9BU19TRVBFUkFUT1IgKyByZW5kZXJBcztcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGUpIHtcclxuXHRcdGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XHJcblx0XHRcdCdKLU0tWSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVknKSxcclxuXHRcdFx0J0otTSc6IG5vdy5mb3JtYXQoJ0RELU1NJyksXHJcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcclxuXHRcdFx0J0QraitGK1knOiBub3cuZm9ybWF0KCdkZGRkIEQgTU1NIFlZWVknKSxcclxuXHRcdFx0J0YnOiBub3cuZm9ybWF0KCdNTU0nKSxcclxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXHJcblx0XHRcdCdEJzogbm93LmZvcm1hdCgnZGRkZCcpLFxyXG5cdFx0XHQnZCc6IG5vdy5mb3JtYXQoJ2RkZCcpXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmIChjb2x1bW5UeXBlID09PSAnZGF0ZXRpbWUnKVxyXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xyXG5cdFx0XHRcdCdKLU0tWStIOmknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZIEhIOm1tJyksXHJcblx0XHRcdFx0J0otTStIOmknOiBub3cuZm9ybWF0KCdERC1NTSBISDptbScpLFxyXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcclxuXHRcdFx0XHQnRCtqK0YrWStIOmknOiBub3cuZm9ybWF0KCdkZGRkIEREIE1NTSBZIEhIOm1tJyksXHJcblx0XHRcdFx0J0g6aSc6IG5vdy5mb3JtYXQoJ0hIOm1tJyksXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBmb3JtYXRzO1xyXG5cdH1cclxuXHJcblx0aXNTdHJpbmdDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRcdC8vIGNhc2UgJ2h0bWwnOiAvLyBUT0RPOiBzb3J0IG9uIGZpbHRlcmVkIHZhbHVlXHJcblx0XHRcdFx0Ly8gY2FzZSAnZW51bSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGbG9hdENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdjdXJyZW50JzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0ludENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzTnVtYmVyQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiB0aGlzLmlzRmxvYXRDb2x1bW4oY29sdW1uKSB8fCB0aGlzLmlzSW50Q29sdW1uKGNvbHVtbik7XHJcblx0fVxyXG5cclxuXHRpc0N1c3RvbUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcclxuXHR9XHJcblxyXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2lkJzpcclxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEYXRlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRmlsdGVyZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0Ly8gdWdseSBoYWNrIDotKFxyXG5cdFx0aWYgKGNvbHVtbi5pZCA9PT0gJ3N0YWZmZWwnKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmdlbmVyYXRvciAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRm9ybWF0dGVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2Jsb2InOlxyXG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcclxuXHRcdFx0Y2FzZSAnZm9yY2V1cGRhdGUnOlxyXG5cdFx0XHRjYXNlICdpZCc6XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRjYXNlICdvcmRlcic6XHJcblx0XHRcdGNhc2UgJ3BhcmVudGlkJzpcclxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XHJcblx0XHRcdGNhc2UgJ3Bhc3N3b3JkJzpcclxuXHRcdFx0Y2FzZSAndG9rZW4nOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbiwgbG9jYXRpb24pIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcblx0XHRyZXR1cm4gKGxvY2F0aW9uICYgY29sdW1uLmxvY2F0aW9uKSAhPT0gMDtcclxuXHR9XHJcblxyXG5cdGlzRWRpdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0aWYgKGNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzU2VhcmNoYWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0V2VpZ2h0IChjb2x1bW4pIHtcclxuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdFx0cmV0dXJuIDAuNTtcclxuXHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdFx0cmV0dXJuIDEuNTtcclxuXHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gMjtcclxuXHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBbJz4nLCAnPCddO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHJldHVybnMgd2hldGhlciB0aGUgZmlyc3QgY29sdW1uIHNldCBpcyBhIHN1YnNldCBvZiB0aGUgc2Vjb25kXHJcblx0aXNDb2x1bW5TdWJzZXQgKGZpcnN0LCBzZWNvbmQsIHNlY29uZFRydWUpIHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiBzZWNvbmRUcnVlO1xyXG5cclxuXHRcdC8vIHdoZW4gc2Vjb25kVHJ1ZSBpcyB0aGUgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIGZvciBkZXJpdmVkIGNvbHVtbnNcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGZpcnN0KSB7XHJcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjb2x1bW4sIHNlY29uZCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Y29udGFpbnNDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdCF0aGlzLmNvbnRhaW5zQ29sdW1uKFxyXG5cdFx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcclxuXHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5NYXBbaXRlbVR5cGVdO1xyXG5cdFx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbcGFyc2VkQ29sdW1uLmlkXTtcclxuXHJcblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmICF0aGlzLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRyZW4sIHJlc3BvbnNlQ29sdW1uTWFwKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRjb3B5UmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKTogUmVxdWVzdENvbHVtbnMge1xyXG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdDogUmVxdWVzdENvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjb2x1bW4pKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IFJlcXVlc3RDb2x1bW4pOiBSZXF1ZXN0Q29sdW1uIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gY29sdW1uLmlkO1xyXG5cclxuXHRcdGNvbnN0IGNoaWxkcmVuOiBSZXF1ZXN0Q29sdW1uW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbilcclxuXHRcdFx0Y2hpbGRyZW4ucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNoaWxkQ29sdW1uKSk7XHJcblxyXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogY2hpbGRyZW59O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xyXG5cdCAqL1xyXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBSZXF1ZXN0Q29sdW1ucyk6IHttZXJnZWQ6IFJlcXVlc3RDb2x1bW5zLCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1uc30ge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcclxuXHJcblx0XHRpZiAoc2Vjb25kID09PSB0cnVlKVxyXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XHJcblxyXG5cdFx0Y29uc3QgbWVyZ2VkOiBSZXF1ZXN0Q29sdW1ucyA9IHRoaXMuY29weVJlcXVlc3RDb2x1bW5zKGZpcnN0KTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xyXG5cclxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxyXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcclxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XHJcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXHJcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4pOiB7aWQ6IHN0cmluZywgY2hpbGRyZW46IFJlcXVlc3RDb2x1bW5bXX0ge1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gdHlwZW9mIHJlcXVlc3RDb2x1bW4gPT09ICdzdHJpbmcnO1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBpc0xlYWYgPyByZXF1ZXN0Q29sdW1uIDogZ2V0Rmlyc3RQcm9wZXJ0eShyZXF1ZXN0Q29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpZDogY29sdW1uSWQsXHJcblx0XHRcdGNoaWxkcmVuOiBpc0xlYWYgPyBbXSA6IHJlcXVlc3RDb2x1bW5bY29sdW1uSWRdXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IGZpcnN0XHJcblx0ICogQHBhcmFtIHtvYmplY3R9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxyXG5cdCAqL1xyXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XHJcblx0XHRcdGlmIChzZWNvbmRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gZmlyc3RbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgbWVyZ2VSZXN1bHQgPSB0aGlzLm1lcmdlUmVzcG9uc2VDb2x1bW5NYXAoXHJcblx0XHRcdFx0Zmlyc3RbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XHJcblx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQuZGlmZmVyZW5jZTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHNlY29uZCkge1xyXG5cdFx0XHRpZiAoZmlyc3RbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcclxuXHRcdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XHJcblx0ICogQHBhcmFtIHthcnJheX0gc2Vjb25kXHJcblx0ICogQHJldHVybnMge29iamVjdH0gZGlmZmVyZW5jZTogdGhlIGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0LlxyXG5cdCAqL1xyXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5NYXAgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGNvbnN0IG1lcmdlZCA9IHt9O1xyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gZmlyc3QpXHJcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBzZWNvbmQpIHtcclxuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XHJcblx0XHRcdGRpZmZlcmVuY2VbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWxDb2x1bW5JZCAoY29sdW1uSWQpIHtcclxuXHRcdHJldHVybiBjb2x1bW5JZC5zdWJzdHJpbmcoMCwgMikgPT09ICdfXyc7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzQ29uZmlnQ29sdW1ucyAoY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbikpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4odGhpcy5wYXJzZUNvbmZpZ0NvbHVtbihjb2x1bW4pLCByZXF1ZXN0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgcmVtb3RlQ29sdW1uQ2FsbGJhY2ssIGxvY2FsQ29sdW1uQ2FsbGJhY2spIHtcclxuXHRcdGNvbnN0IGxvY2FsQ29sdW1uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBsb2NhbENvbHVtbiBvZiBsb2NhbENvbHVtbnMpXHJcblx0XHRcdGxvY2FsQ29sdW1uTWFwW2xvY2FsQ29sdW1uLmlkXSA9IGxvY2FsQ29sdW1uO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZmlnSWQgb2YgY29uZmlnQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBwYXJzZWRDb25maWdJZCA9IGNvbmZpZ0lkLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpO1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbmZpZ0lkWzBdO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW5JZCkpIHtcclxuXHRcdFx0XHRyZW1vdGVDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgY29sdW1uSWQsIHBhcnNlZENvbmZpZ0lkWzFdKTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGNvbHVtbiBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGluIGxvY2FsQ29sdW1uc1xyXG5cdFx0XHRpZiAobG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRsb2NhbENvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0pO1xyXG5cdFx0XHRkZWxldGUgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogbW92ZSB0byBmcm9udC1lbmRcclxuXHRjb25zb2xpZGF0ZUNvbHVtbnMgKFxyXG5cdFx0Y29uZmlnQ29sdW1ucyxcclxuXHRcdGxvY2FsQ29sdW1ucyxcclxuXHRcdGFkZFJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uW11cclxuXHQpIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkTG9jYWxDb2x1bW5zOiBMb2NhbENvbHVtbltdID0gW107XHJcblx0XHRsZXQgcmVxdWVzdENvbHVtbnMgPSA8UmVxdWVzdENvbHVtbltdPiB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhhZGRSZXF1ZXN0Q29sdW1ucyk7XHJcblxyXG5cdFx0dGhpcy5wcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zKFxyXG5cdFx0XHRjb25maWdDb2x1bW5zLFxyXG5cdFx0XHRsb2NhbENvbHVtbnMsXHJcblx0XHRcdChfLCBjb2x1bW5JZCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihjb2x1bW5JZC5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKSwgcmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoXywgbG9jYWxDb2x1bW4pID0+IHtcclxuXHRcdFx0XHRmaWx0ZXJlZExvY2FsQ29sdW1ucy5wdXNoKGxvY2FsQ29sdW1uKTtcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyA9IDxSZXF1ZXN0Q29sdW1uW10+IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhcclxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRcdFx0bG9jYWxDb2x1bW4udmFsdWVPcHRpb25zLnJlcXVlc3RDb2x1bW5zXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHtyZXF1ZXN0OiByZXF1ZXN0Q29sdW1ucywgbG9jYWw6IGZpbHRlcmVkTG9jYWxDb2x1bW5zfTtcclxuXHR9XHJcblxyXG5cdHBhcnNlQ29uZmlnQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiBjb2x1bW4uc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUilbMF0uc3BsaXQoQ09MVU1OX1NFUEVSQVRPUik7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzQ29uZmlnQ29sdW1uIChjb2x1bW5BcnJheSwgZGVzdGluYXRpb24pIHtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uQXJyYXlbMF07XHJcblx0XHRjb25zdCBpc0xlYWYgPSBjb2x1bW5BcnJheS5sZW5ndGggPT09IDE7XHJcblxyXG5cdFx0aWYgKGlzTGVhZikge1xyXG5cdFx0XHRpZiAoZGVzdGluYXRpb24uaW5kZXhPZihjb2x1bW5JZCkgPT09IC0xKVxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goY29sdW1uSWQpO1xyXG5cclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbk9iamVjdChjb2x1bW5JZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcclxuXHRcdFx0Y29sdW1uSW5kZXggPSBkZXN0aW5hdGlvbi5wdXNoKHtcclxuXHRcdFx0XHRbY29sdW1uSWRdOiBbXVxyXG5cdFx0XHR9KSAtIDE7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKFxyXG5cdFx0XHRjb2x1bW5BcnJheS5zbGljZSgxKSxcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbklkXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZpbmRDb2x1bW5PYmplY3QgKGNvbHVtbklkLCBhcnJheSkge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoZ2V0Rmlyc3RQcm9wZXJ0eShhcnJheVtpXSkgPT09IGNvbHVtbklkKVxyXG5cdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAtMTtcclxuXHR9XHJcblxyXG5cdGZpbmRDb2x1bW4gKGNvbHVtbklkLCBhcnJheSkge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW4gPSBhcnJheVtpXTtcclxuXHJcblx0XHRcdGlmICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdGlmIChjb2x1bW4gPT09IGNvbHVtbklkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGk7XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZ2V0Rmlyc3RQcm9wZXJ0eShjb2x1bW4pID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENoYW5nZXNDb21waWxhdGlvbiwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEVudHJ5LCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XHJcblx0cmVxdWVzdHM6IENyZWF0ZVJlcXVlc3RFbnRyeVtdID0gW107XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBwYXJhbWV0ZXJNYXA6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXHJcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XHJcblx0fVxyXG5cclxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzb3VyY2UucmVxdWVzdDtcclxuXHJcblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcclxuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJ1biAoKSB7XHJcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/IHBhcmVudElkIDogbnVsbCxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblx0XHRcdFx0Y29uc3QgaGFzUGFyZW50ID0gdGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyBwYXJlbnRJZCA6IG51bGwsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xyXG5cdH1cclxuXHJcblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZXF1ZXN0OiB7XHJcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxyXG5cdFx0XHRcdGl0ZW1zOiB7fSxcclxuXHRcdFx0XHRjb2x1bW5zOiB7fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxyXG5cdFx0XHRpdGVtczoge30sXHJcblx0XHRcdGNvbGxlY3Rpb25zOiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRmYWxzZVxyXG5cdFx0XHQpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllcywgcmVxdWVzdFBhcmVudElkLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcclxuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdFx0bGV0IGxpbmtzO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0cmVxdWVzdC5wYXJlbnRJZFtpdGVtSWRdID0gcmVxdWVzdFBhcmVudElkO1xyXG5cclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sbGVjdGlvbnMuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGxpbmtzID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxyXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2goY2hpbGRJZCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSwgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5JbmZvLCBDb2x1bW5TZXQsIGluQXJyYXksIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmxldCBjdXJyZW50SWQgPSAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeSB7XHJcblx0aWQ6IG51bWJlciA9IGN1cnJlbnRJZCsrO1xyXG5cdHF1ZXJ5OiBhbnk7XHJcblx0Y29sdW1uczogQ29sdW1uU2V0O1xyXG5cclxuXHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGw7XHJcblxyXG5cdGluaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0aXRlbXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdHJlc291cmNlczogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHRkZWZlcnJlZDogYW55O1xyXG5cdHByb21pc2U6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PjtcclxuXHRyZWxvYWRRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0aGFzRWRpdFJlc291cmNlcyA9IGZhbHNlO1xyXG5cdGhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIG9wdGlvbnM6IGFueVxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcclxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcclxuXHJcblx0XHR0aGlzLml0ZW1UeXBlID0gaXRlbVR5cGU7XHJcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cdFx0dGhpcy5xdWVyeSA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAoaXRlbUVudHJ5Q29tcG91bmQ6IHtjb2x1bW5zOiBDb2x1bW5TZXQsIGl0ZW1zOiBJdGVtRW50cnlbXX0pOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1ucyA9IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnM7XHJcblx0XHR0aGlzLmluaXRpYWwgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcztcclxuXHRcdHRoaXMuaXRlbXMgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcy5zbGljZSgpO1xyXG5cclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcclxuXHJcblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCk7XHJcblx0fVxyXG5cclxuXHRtYXRjaFBhcmVudCAoaXRlbVR5cGUsIGl0ZW1JZCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVkKVxyXG5cdFx0XHRjYWxsYmFjayhtb2QpO1xyXG5cdH1cclxuXHJcblx0Z2V0SXRlbUJ5SWQgKGl0ZW1JZCk6IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZCB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pdGVtSWQgPT09IGl0ZW1JZClcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChhY2N1bXVsYXRvciA9IFtdKTogSXRlbUlkW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5nZXRJZEFycmF5KHRoaXMuaXRlbXMsIGFjY3VtdWxhdG9yKTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1zIChpdGVtRW50cmllcywgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwgPSBmYWxzZSwgY2FsbE9uQWRkID0gdHJ1ZSwgY2FsbE9uQWN0aXZhdGUgPSB0cnVlKTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxyXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XHJcblxyXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpIHtcclxuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXHJcblx0XHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xyXG5cdFx0XHRcdFx0aW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGVudHJpZXNBZGRlZFRvSW5pdGlhbC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwsIHRoaXMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IG9uQWN0aXZhdGVJdGVtID0gY2FsbE9uQWN0aXZhdGUgJiYgY29sbGVjdGlvblJlc291cmNlcy5sZW5ndGggPiAwID9cclxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlc1swXS5vcHRpb25zLm9uQWN0aXZhdGVJdGVtIDpcclxuXHRcdFx0bm9vcDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xyXG5cdFx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHBhcmVudENvbHVtbiAhPT0gbnVsbCAmJiBpdGVtRW50cnkubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5Lm1vZGlmaWVkW3BhcmVudENvbHVtbi5pZF0gPSBwYXJlbnQuaXRlbUlkO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0bW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdGVudHJpZXNBZGRlZFRvTW9kaWZpZWQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdG9uQWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZW50cmllc0FkZGVkVG9Nb2RpZmllZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcclxuXHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcclxuXHRcdFx0XHRcdHJlc3VsdCA9IGFkZGVkUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjYWxsT25BZGQpXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xyXG5cdFx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9IGVsc2VcclxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjaz8pIHtcclxuXHRcdGlmIChpZEFycmF5Lmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcclxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkoaXRlbUVudHJ5Lml0ZW1JZCwgaWRBcnJheSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHJlc3VsdFJlc291cmNlLFxyXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRlbmFibGVDYWxsYmFja1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChyZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgZW5hYmxlQ2FsbGJhY2s/KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0sXHJcblx0XHRcdHJlc3VsdFJlc291cmNlLFxyXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRlbmFibGVDYWxsYmFja1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVJlbW92ZWRJdGVtcyAoZmlsdGVyRnVuY3Rpb24sIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBlbmFibGVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pdGVtcywgZmlsdGVyRnVuY3Rpb24pO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEZyb21Jbml0aWFsID0gdXBkYXRlSW5pdGlhbCA/IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLmluaXRpYWwsIGZpbHRlckZ1bmN0aW9uKSA6IFtdO1xyXG5cclxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uUmVtb3ZlSW5pdGlhbChyZW1vdmVkRnJvbUluaXRpYWwsIHRoaXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xyXG5cclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkRnJvbU1vZCBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKVxyXG5cdFx0XHRyZW1vdmVkRnJvbU1vZC5kZWFjdGl2YXRlUmVzb3VyY2VzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xyXG5cdFx0XHRjb25zdCByZW1vdmVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLnJlbW92ZUl0ZW1SZXNvdXJjZXMocmVtb3ZlZEZyb21Nb2RpZmllZCk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IHJlbW92ZWRSZXNvdXJjZXM7XHJcblxyXG5cdFx0XHRcdGlmIChlbmFibGVDYWxsYmFjaylcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZCAobmV3Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChuZXdDb2x1bW5zLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzKTtcclxuXHJcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXModGhpcywgdW5kZWZpbmVkLCBuZXdDb2x1bW5zKS50aGVuKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbaXRlbVR5cGVdO1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24obmV3Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlLCB0aGlzLml0ZW1zKTtcclxuXHJcblx0XHRcdFx0dGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMuY2FsbChcclxuXHRcdFx0XHRcdHRoaXMsIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiByZXNwb25zZUl0ZW1zW2l0ZW1FbnRyeS5pdGVtSWRdICE9PSB1bmRlZmluZWQgfHwgaXRlbUVudHJ5LmlzTG9jYWwoKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdHRydWVcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcclxuXHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2U7XHJcblx0fVxyXG5cclxuXHRleHRlbmRRdWVyeSAoY2FsbGJhY2spIHtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XHJcblxyXG5cdFx0aWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnF1ZXJ5O1xyXG5cclxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBjYWxsYmFjayhvcHRpb25zLnF1ZXJ5UGFyYW1zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgY29sbGVjdGlvblJlc291cmNlLCBjYWxsT25BZGQ/LCB1cGRhdGVJbml0aWFsPykge1xyXG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xyXG5cdFx0Y29uc3QgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoXHJcblx0XHRcdHRoaXMsXHJcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXHJcblx0XHRcdHRoaXMub3B0aW9ucy5saW1pdCAhPT0gbnVsbCA/XHJcblx0XHRcdFx0ZXh0ZW5kZWRRdWVyeSA6XHJcblx0XHRcdFx0ZnVsbFF1ZXJ5XHJcblx0XHQpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXHJcblx0XHRcdFx0XHR0aGlzLnBhcmVudCxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGl0ZW1FbnRyaWVzID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhpdGVtRW50cmllcywgY29sbGVjdGlvblJlc291cmNlLCB1cGRhdGVJbml0aWFsLCBjYWxsT25BZGQsIGZhbHNlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMucHJvbWlzZSA9IHByb21pc2UudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHByb21pc2U7XHJcblx0fVxyXG5cclxuXHRxdWV1ZVJlbG9hZCAoKSB7XHJcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XHJcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5wcm9taXNlU2VydmljZS5kZWZlcigpO1xyXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24pIHtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4odGhpcy5jb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zID0gZXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcclxuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAocmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHR0aGlzLmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGluaXRpYWwpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRVcGRhdGVkSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGhhc0FkZGVkSXRlbXMgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID4gdGhpcy5pbml0aWFsLmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdGhhc1JlbW92ZWRJdGVtcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmIChtb2RpZmllZEl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q3VycmVudFJlc291cmNlICgpIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdHJldHVybiByZXNvdXJjZXNbcmVzb3VyY2VzLmxlbmd0aCAtIDFdO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKGlzU3VidGFiQ2hhbmdlID0gZmFsc2UpIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtczsgLy8gVE9ETzogaW5pdGlhbFxyXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgbmV3UmVzb3VyY2VzOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHdlJ2xsIGFkZCB0aGUgaXRlbSByZXNvdXJjZXMgYmFjayBpbiBsYXRlclxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGN1cnJlbnRSZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMpXHJcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xyXG5cdH1cclxuXHJcblx0Ly8gdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXHJcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtcyA9IDxJdGVtRW50cnlbXT4gdGhpcy5nZXRSZW1vdmVkSXRlbXMoKTtcclxuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0QWRkZWRJdGVtcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XHJcblx0XHRcdHJlc291cmNlLmFkZEl0ZW1SZXNvdXJjZXMocmVtb3ZlZEl0ZW1zKTtcclxuXHRcdFx0cmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhhZGRlZEl0ZW1zKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XHJcblx0fVxyXG5cclxuXHRvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuXHRcdFx0cmVzb3VyY2UucmVidWlsZE1hcCgpO1xyXG5cdFx0XHRyZXNvdXJjZS5vcHRpb25zLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0VXBkYXRlZEl0ZW1Db2x1bW5zIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2NvbHVtbi5hcGlDb2x1bW4uaXRlbVR5cGVdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0W2NvbHVtbi5pZF0gPSBjb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsb25lIChwYXJlbnQsIGNvbnZlcnNpb25NYXA/OiBJdGVtSWRDb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2xvbmVkSXRlbUVudHJ5IG9mIGNsb25lZEl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKHRoaXMub3B0aW9ucywgcGFyZW50KVxyXG5cdFx0KVxyXG5cdFx0XHQucmVzb2x2ZShcclxuXHRcdFx0XHR7Y29sdW1uczogdGhpcy5jb2x1bW5zLCBpdGVtczogY2xvbmVkSXRlbUVudHJpZXN9XHJcblx0XHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGZpbHRlckFycmF5IH0gZnJvbSAnLi4vY2xhc3Nlcy9VdGlsJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlSXRlbUlkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0aXRlbXM6IEl0ZW1SZXNvdXJjZVtdO1xyXG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge307XHJcblx0Y29sdW1ucztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcclxuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XHJcblx0XHR0aGlzLml0ZW1zID0gW107XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblxyXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHsgLy8gc2hvdWxkIGJlIGZhc3RcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XHJcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogb3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdGxldCBpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTtcclxuXHJcblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbVJlc291cmNlID0gY29uc3RydWN0b3IoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXHJcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxyXG5cdCAqXHJcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cclxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XHJcblx0ICovXHJcblx0cmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZpbHRlckFycmF5KFxyXG5cdFx0XHR0aGlzLml0ZW1zLFxyXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkFkZChpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNhbGxPblJlbW92ZSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHZvaWQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZpcnN0KGNhbGxiYWNrKSAhPT0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnkgKGFyZ3VtZW50KSB7XHJcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1hcCAoYXJndW1lbnQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXHJcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlZHVjZTxUPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgdmFsdWU6IFQpID0+IFQsIHZhbHVlOiBUKTogVCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSwgdmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXMsIGVuYWJsZUNhbGxiYWNrcyk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHQudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1IYW5kbGVyLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5LCBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi9JdGVtRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRzYXZlICgpIHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zLmVuYWJsZVNhdmUpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignY29sbGVjdGlvblJlc291cmNlU2VydmljZTogU2F2aW5nIGRpc2FibGVkJyk7XHJcblxyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0bW92ZUl0ZW1zIChpZEFycmF5LCBkZXN0aW5hdGlvbiwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcclxuXHJcblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEl0ZW1SZXNvdXJjZSBvZiByZW1vdmVkSXRlbVJlc291cmNlcylcclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChyZW1vdmVkSXRlbVJlc291cmNlLmVudHJ5KTtcclxuXHJcblx0XHRkZXN0aW5hdGlvbi5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgZGVzdGluYXRpb24sIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cclxuXHRcdHJldHVybiByZW1vdmVkSXRlbVJlc291cmNlcztcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW1zIChpZEFycmF5LCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtIChpdGVtSWQsIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbXMgKHZhbHVlc0FycmF5LCBlbmFibGVDYWxsYmFja3MgPSB0cnVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRlbXBsYXRlKHRoaXMuZW50cnkuaXRlbVR5cGUpLnRoZW4odGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0XHRcdGxldCBpdGVtUmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlc0FycmF5KSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWwoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZSxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5maWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWUuZGVyaXZlZFxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aXRlbVJlc291cmNlcyA9IHRoaXMuZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIHRoaXMsIGZhbHNlLCBmYWxzZSk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW0gKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhbdmFsdWVzXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5jbGVhcih0aGlzLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtbkluZm8sIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBTExfUEVSTUlTU0lPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcclxuXHJcblx0ZGVmZXJSZXF1ZXN0ID0gZmFsc2U7XHJcblx0ZGVmZXJyZWQ7XHJcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xyXG5cclxuXHRpbml0aWFsOiBGaWVsZE1hcDtcclxuXHRtb2RpZmllZDogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdHB1YmxpYyBpdGVtSWQ6IEl0ZW1JZCxcclxuXHRcdHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5TZXRcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGRlZmVyIChkZWZlclJlcXVlc3QpOiB0aGlzIHtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSB0aGlzLnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3RcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVmZXJyZWQgKGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiB0aGlzIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcblx0XHR0aGlzLnByb2Nlc3MoaW5pdGlhbCwgZGVyaXZlZCk7XHJcblx0XHR0aGlzLnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJlamVjdCAoZXJyb3I/KTogdGhpcyB7XHJcblx0XHQvLyB0b2RvOiB0cmFuc2xhdGVkIGVycm9yXHJcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzIChpbml0aWFsLCBkZXJpdmVkKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSBpbml0aWFsO1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcclxuXHJcblx0XHRjb25zdCBmb3JtYXR0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZvcm1hdHRlZDtcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWwgKGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OU307XHJcblxyXG5cdFx0dGhpcy51cGRhdGVGaWVsZHMoaW5pdGlhbCk7XHJcblx0XHR0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0XHR0aGlzLnNldE1vZGlmaWVkKG1vZGlmaWVkKTtcclxuXHJcblx0XHR0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xyXG5cdFx0dGhpcy5zZXRDcmVhdG9yKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRDcmVhdG9yICgpOiB0aGlzIHtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRvciA9IHRoaXMuYXV0aEludGVyZmFjZS5nZXRVc2VySWQoKTtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRlZCA9IG1vbWVudCgpO1xyXG5cdFx0dGhpcy5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSB0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IG5ld0l0ZW1JZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5leHBhbmRDb252ZXJzaW9uTWFwKHRoaXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXHJcblx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdG5ld0l0ZW1JZCxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmdldEZpZWxkcygpLCB7fSwgY29sdW1ucy5tYWluKSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxyXG5cdFx0XHRjb2x1bW5zXHJcblx0XHQpO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkubW9kaWZpZWQgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUodGhpcy5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkuc2V0UGFyZW50KFxyXG5cdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdHBhcmVudElkID09PSB1bmRlZmluZWQgPyBwYXJlbnQuaXRlbUlkIDogcGFyZW50SWRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIGNsb25lZEVudHJ5O1xyXG5cdH1cclxuXHJcblx0cmVzZXREZXJpdmVkIChjb2x1bW5JZHMpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJvb3RDb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJvb3Q7XHJcblx0XHRjb25zdCBmaWx0ZXJlZENvbHVtbnM6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRcdGlmIChjb2x1bW5JZHMuaW5kZXhPZihjb2x1bW4uaWQpICE9PSAtMSlcclxuXHRcdFx0XHRmaWx0ZXJlZENvbHVtbnMucHVzaChjb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGZpbHRlcmVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0ZnVuY3Rpb24gcmVzZXREZXJpdmVkUmVjdXJzaXZlbHkgKGNvbHVtbnMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRcdGlmICghY29sdW1uLmlzTGVhZilcclxuXHRcdFx0XHRcdHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbik7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBzZWxmLmRlcml2ZWRbY29sdW1uLnBhdGhdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHR0aGlzLnJlc291cmNlcyA9IFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZVJlc291cmNlcyAoKTogdGhpcyB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlczsgLy8gb24gb2YgdGhlIGRlYWN0aXZhdGUgY2FsbGJhY2tzIG1pZ2h0IGNhbGwgY2xlYXJSZXNvdXJjZXNcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0cmVzb3VyY2UuZGVhY3RpdmF0ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGRzICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWw7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdC8vIHRvZG86IHR5cGUgY29sdW1uRXhwYW5zaW9uUmVzdWx0XHJcblx0ZXhwYW5kIChtYWluLCBkZXJpdmVkLCBjb2x1bW5FeHBhbnNpb25SZXN1bHQpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLmRlcml2ZWQsXHJcblx0XHRcdGRlcml2ZWQsXHJcblx0XHRcdGRpZmZlcmVuY2UuZGVyaXZlZFxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHR0aGlzLmFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Ly8ga2V5OiBpbml0aWFsIC8gbW9kaWZpZWRcclxuXHQvLyBmaWVsZHMgKmhhdmVuJ3QqIGJlZW4gZm9ybWF0dGVkIHlldFxyXG5cdHVwZGF0ZUZpZWxkcyAoc291cmNlLCBvdmVyd3JpdGUgPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xyXG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQubWFpbjtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSBzb3VyY2VbY29sdW1uSWRdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShtb2RpZmllZCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtVmFsdWUgKGZpZWxkcywgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpZWxkc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0bGV0IG5ld1ZhbHVlO1xyXG5cclxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRuZXdWYWx1ZSA9IHRoaXMucGFyZW50Lml0ZW1JZDtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHRuZXdWYWx1ZSA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtRmllbGRzIChjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoaW5pdGlhbCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUobW9kaWZpZWQsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0ICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVxdWVzdChcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCkgPyB7fSA6IHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzZXREaXNwbGF5TmFtZSAoKTogdGhpcyB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmdldERpc3BsYXlOYW1lKCk7XHJcblxyXG5cdFx0aWYgKHJlc3VsdClcclxuXHRcdFx0dGhpcy5tb2RpZmllZC5kaXNwbGF5bmFtZSA9IHJlc3VsdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldERpc3BsYXlOYW1lICgpIHtcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcblxyXG5cdFx0c3dpdGNoICh0aGlzLml0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRcdHJldHVybiBmaWVsZHMudHlwZSA9PT0gJ2JlZHJpamYnID9cclxuXHRcdFx0XHRcdGZpZWxkcy5iZWRyaWpmIDogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXHJcblx0XHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkc1t0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZCh0aGlzLml0ZW1UeXBlKV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0Jvb2xlYW59IHJldHVybkFsbCBSZXR1cm5zIGFsbCBpbml0aWFsIHZhbHVlcyBpZiB0cnVlXHJcblx0ICogQHJldHVybnMge09iamVjdH1cclxuXHQgKi9cclxuXHRnZXRDaGFuZ2VzIChyZXR1cm5BbGwgPSBmYWxzZSkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCAmJiAhcmV0dXJuQWxsKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NrYWJsZSAoKSB7XHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFzQ2hhbmdlcyAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmhhc0NoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNldE1vZGlmaWVkICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uLmlkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmNsb25lKFxyXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcclxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0SW5pdGlhbCAodmFsdWVzLCBlbmFibGVDYWxsYmFja3M/KTogdGhpcyB7XHJcblx0XHRsZXQgcHJldmlvdXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMuaW5pdGlhbFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHR0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxyXG5cdCAqL1xyXG5cdHNldE1vZGlmaWVkICh2YWx1ZXM/KTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gY29sdW1ucy5yZXNwb25zZVt0aGlzLml0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQgPSB7fTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxyXG5cdFx0XHRcdFx0XHQvLyBpZiAoREVWX01PREUpXHJcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHJcblx0XHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0XHRyZXNvdXJjZS5maWVsZHMgPSBtb2RpZmllZDtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldERlcml2ZWQgKHZhbHVlcyk6IHRoaXMge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCk6IHRoaXMge1xyXG5cdFx0dGhpcy5wYXJlbnQgPSB7XHJcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cyk6IHRoaXMge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XHJcblxyXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcclxuXHRjb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbn07XHJcblx0ZmllbGRzOiBGaWVsZE1hcDtcclxuXHRkZXJpdmVkOiBGaWVsZE1hcDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZW50cnkuZGVyaXZlZDtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblx0fVxyXG5cclxuXHRpc05ldyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5pc0xvY2FsKCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZSAoKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVmlld1Jlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0b3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMpO1xyXG5cclxuXHRcdHRoaXMuZmllbGRzID0gZW50cnkubW9kaWZpZWQgPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdGVudHJ5LmluaXRpYWwgOiBlbnRyeS5tb2RpZmllZDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtBcGlGb3JtYXR0ZXIsIENoYW5nZXNQcm9jZXNzb3IsIGNyZWF0ZVBhdGgsIExvY2tTZXJ2aWNlfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRWRpdFJlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRsb2NhbENvcGllczogRmllbGRNYXBbXSA9IFtdO1xyXG5cdHRyYW5zYWN0aW9uczogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3I6IENoYW5nZXNQcm9jZXNzb3IsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0ZW50cnkuc2V0TW9kaWZpZWQoKTtcclxuXHJcblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxuXHJcblx0aXNOZXcgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuaXNMb2NhbCgpICYmIHRoaXMudHJhbnNhY3Rpb25zID09PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRzdGFydCAoKSB7XHJcblx0XHRpZiAodGhpcy5sb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmxvY2FsQ29waWVzID0gW107XHJcblxyXG5cdFx0dGhpcy5sb2NhbENvcGllcy5wdXNoKHRoaXMuY29weUZpZWxkcygpKTtcclxuXHR9XHJcblxyXG5cdHJvbGxiYWNrICgpIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTmV3KCkgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG5cdH1cclxuXHJcblx0Y29tbWl0IChpbml0aWFsID0gZmFsc2UpIHtcclxuXHRcdGlmICghaW5pdGlhbClcclxuXHRcdFx0dGhpcy5sb2NhbENvcGllcy5wb3AoKTtcclxuXHJcblx0XHQvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXHJcblx0XHRpZiAodGhpcy50cmFuc2FjdGlvbnMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy50cmFuc2FjdGlvbnMgPSAwO1xyXG5cclxuXHRcdHRoaXMudHJhbnNhY3Rpb25zKys7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbENvcHkgKCkge1xyXG5cdFx0Y29uc3QgbG9jYWxDb3BpZXMgPSB0aGlzLmxvY2FsQ29waWVzO1xyXG5cclxuXHRcdGlmIChsb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAobG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gbG9jYWxDb3BpZXNbbG9jYWxDb3BpZXMubGVuZ3RoIC0gMV07XHJcblx0fVxyXG5cclxuXHRjb3B5RmllbGRzIChkZXN0aW5hdGlvbj8pIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblxyXG5cdFx0aWYgKGRlc3RpbmF0aW9uID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGRlc3RpbmF0aW9uID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaXRlbUVudHJ5Lm1vZGlmaWVkLCBkZXN0aW5hdGlvbiwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XHJcblx0fVxyXG5cclxuXHRzZXRGaWVsZHMgKHZhbHVlcywgY2FsbE9uQ2hhbmdlKSB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XHJcblx0XHRsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cdFx0bGV0IHByZXZpb3VzO1xyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y2FsbE9uQ2hhbmdlID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxyXG5cdFx0XHRwcmV2aW91cyA9IHRoaXMuY29weUZpZWxkcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKCdzZXRGaWVsZHM6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRmllbGRzKGNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uSWRdLCB2YWx1ZXNbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cdFx0XHRoYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoY2FsbE9uQ2hhbmdlICYmIGhhc0NoYW5nZXMpXHJcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXMpIHtcclxuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHR9XHJcblxyXG5cdHNhdmUgKHBhcmFtZXRlcnM/KSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3QgcGFyYW1ldGVyTWFwID0ge307XHJcblxyXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0XHRbe30sIHBhcmFtZXRlcnNdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0aXRlbUVudHJ5LmlzTG9ja2FibGUoKSA/XHJcblx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soaXRlbUVudHJ5KSA6XHJcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZS53aGVuKClcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3JcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yLmV4ZWN1dGUoW2l0ZW1FbnRyeV0sIFtdLCBwYXJhbWV0ZXJNYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0Q29sbGVjdGlvbk1hdGNoZXIsXHJcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbUVudHJ5U2VydmljZSxcclxuXHRJdGVtSGFuZGxlcixcclxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0S2V5U2VydmljZSxcclxuXHRMb2NhbENhY2hlLFxyXG5cdFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdEF1dGhJbnRlcmZhY2UsXHJcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxyXG5cdFByb21pc2VJbnRlcmZhY2VcclxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcclxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdEl0ZW1JZCxcclxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwLFxyXG5cdEl0ZW1UeXBlLFxyXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsXHJcblx0VGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1BZG1pbmlzdHJhdG9yIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdC8vIGlkIGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXHJcblx0Z2V0SXRlbURlZmluaXRpb24gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBhbnksIG9wdGlvbnM6IGFueSkge1xyXG5cdFx0Y29uc3Qgc3RhdGVLZXk6IGFueSA9IHRoaXMua2V5U2VydmljZS5wYXJzZVN0YXRlS2V5KGl0ZW1JZCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7aXRlbVR5cGU6IGl0ZW1UeXBlLCBvcHRpb25zOiBvcHRpb25zLCBpdGVtSWQ6IGl0ZW1JZH07XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5ICE9PSBudWxsKSB7XHJcblx0XHRcdHN3aXRjaCAoc3RhdGVLZXkudHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgJ25ldyc6XHJcblx0XHRcdFx0XHQvLyBpZiAoc3RhdGVLZXkudGVtcGxhdGUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRcdC8vIFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7dHlwZTogc3RhdGVLZXkudGVtcGxhdGV9O1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdC5pdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnZHVwbGljYXRlJzpcclxuXHRcdFx0XHRcdG9wdGlvbnMuZHVwbGljYXRlID0gc3RhdGVLZXkuaXRlbUlkO1xyXG5cclxuXHRcdFx0XHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9PT0gdW5kZWZpbmVkKSAvLyB0b2RvOiByZWZhY3RvciB0aGlzXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XHJcblxyXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IHN0YXRlS2V5Lml0ZW1JZDtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHQuaXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsRHVwbGljYXRlSWQoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC5pdGVtSWQgPSBpdGVtSWQ7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4pOiBDb2xsZWN0aW9uTWF0Y2hlciB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlLCB0cnVlKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHQvLyB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgaWYgdGhlcmUgYXJlIG5vIGNvbGxlY3Rpb25zIHRvIGFkZCB0aGUgaXRlbSB0bywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2F2ZSB0aGUgaXRlbVxyXG5cdFx0XHRpZiAoYWRkVG9UYWIpXHJcblx0XHRcdFx0bG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlcjtcclxuXHR9XHJcblxyXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hUaXRsZShpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QsIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdC8vIHRvZG8gdHlwZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwIHwgSXRlbUVudHJ5XHJcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogYW55KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UubGlua2VkICE9PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5tYWluIDpcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UsXHJcblx0XHRcdFx0XHRvcHRpb25zLFxyXG5cdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZHMsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1zQnlRdWVyeSAoaXRlbVR5cGU6IHN0cmluZywgcXVlcnk6IGFueSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7fTtcclxuXHJcblx0XHRyZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0gPSBlbnRyeU9wdGlvbnMuY29sdW1ucztcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZFBhcmVudENvbmRpdGlvbihxdWVyeSwgZW50cnlPcHRpb25zLnBhcmVudCksXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50LFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldER1cGxpY2F0ZUJ5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGR1cGxpY2F0ZUlkOiBudW1iZXIsIG9wdGlvbnM6IGFueSkge1xyXG5cdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0b3B0aW9ucyA9IHt9O1xyXG5cclxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XHJcblxyXG5cdFx0Y29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZ2V0SXRlbURlZmluaXRpb24oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0RHVwbGljYXRlU3RhdGVLZXkoZHVwbGljYXRlSWQpLFxyXG5cdFx0XHRvcHRpb25zXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeURlZihkZWZpbml0aW9uLCBmYWxzZSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGRlcGVuZGVkIG9uIHRoZSByZXR1cm4gbGlua3MgYm9vbGVhbi4gdHJ1ZSByZXR1cm5zIHRoZSBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLlxyXG5cdCAqIFRoZSB0eXBlIGhhcyB0byBiZSBhc3NlcnRlZCBhdCB1c2Ugc2luY2UgeW91IG9ubHkga25vdyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIG9wdGlvbnNcclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkxpbmtzXHJcblx0ICogQHBhcmFtIHtib29sZWFufSBpc1Jvb3RcclxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtUmVzb3VyY2U+IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPn1cclxuXHQgKi9cclxuXHRnZXROZXdSZXNvdXJjZSAoXHJcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxyXG5cdFx0b3B0aW9uczogYW55ID0ge30sXHJcblx0XHRyZXR1cm5MaW5rczogYm9vbGVhbiA9IGZhbHNlLFxyXG5cdFx0aXNSb290OiBib29sZWFuID0gZmFsc2VcclxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoaXRlbUVudHJ5UmVzb3VyY2U6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXApID0+IHtcclxuXHRcdFx0XHRjb25zdCBtYWluID0gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5UmVzb3VyY2UubWFpbiwgb3B0aW9ucywgaXNSb290KTtcclxuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIHRydWUpOyAvLyBkbyB0aGlzIGJlZm9yZWhhbmRcclxuXHJcblx0XHRcdFx0cmV0dXJuIHJldHVybkxpbmtzID8ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfSA6IG1haW47XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25EZWYgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxyXG5cdFx0XHRvcHRpb25zOiB7XHJcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcclxuXHRcdFx0XHRyZXNvdXJjZTogdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgbGlua0ZpZWxkOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxyXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXHJcblx0XHRcdGxpbmtJZEFycmF5OiBsaW5rSWRBcnJheSxcclxuXHRcdFx0bGlua0ZpZWxkOiBsaW5rRmllbGQsXHJcblx0XHRcdG9wdGlvbnM6IHtcclxuXHRcdFx0XHRlbnRyeTogdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxyXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb24gKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxyXG5cdFx0XHRcdFx0ZW50cnksXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcclxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcclxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlKTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgYHBhcmVudGAgaW4gb3B0aW9uc1xyXG5cdCAqL1xyXG5cdGdldExpbmtDb2xsZWN0aW9uIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWQ6IG51bWJlciwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBsaW5rVHlwZSwgaXRlbUlkOiBsaW5rSWR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0ZW50cnlPcHRpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXHJcblx0XHRcdFx0XHRlbnRyeSxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5iYXRjaEZldGNoKFxyXG5cdFx0XHRsaW5rVHlwZSxcclxuXHRcdFx0bGlua0lkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXHJcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXHJcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXHJcblx0XHRcdGRlZmluaXRpb24ubGlua1R5cGUsXHJcblx0XHRcdGRlZmluaXRpb24ubGlua0lkQXJyYXksXHJcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXHJcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcclxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcclxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKFxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2VcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGxpbmtUeXBlLCB7fSwge30pXHJcblx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmdldExpbmtDb2xsZWN0aW9ucyhcclxuXHRcdFx0XHRcdFx0bGlua1R5cGUsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeURlZiAoZGVmaW5pdGlvbjogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXHJcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXHJcblx0XHRcdGRlZmluaXRpb24uaXRlbUlkLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoZGVmaW5pdGlvbi5vcHRpb25zKSxcclxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRpdGVtRW50cnlDb21wb3VuZCA9PiB7XHJcblx0XHRcdFx0bGV0IG1haW5FbnRyeTogSXRlbUVudHJ5O1xyXG5cclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5Q29tcG91bmQgaW5zdGFuY2VvZiBJdGVtRW50cnkpXHJcblx0XHRcdFx0XHRtYWluRW50cnkgPSBpdGVtRW50cnlDb21wb3VuZDtcclxuXHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeUNvbXBvdW5kLmxpbmtlZCwgZGVmaW5pdGlvbi5vcHRpb25zLCBmYWxzZSk7XHJcblx0XHRcdFx0XHRtYWluRW50cnkgPSBpdGVtRW50cnlDb21wb3VuZC5tYWluO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKG1haW5FbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLCBpc1Jvb3QpOyAvLyBpc1Jvb3RcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xvbmVJdGVtIChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgb3B0aW9uczogYW55KTogSXRlbVJlc291cmNlIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbVJlc291cmNlLmVudHJ5LmNsb25lKCksIG9wdGlvbnMsIGZhbHNlKTtcclxuXHR9XHJcblxyXG5cdGNsb25lQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UsIG9wdGlvbnM6IGFueSwgY29udmVyc2lvbk1hcDogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRcdGxldCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHBhcmVudCA9IG51bGw7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcclxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmVudHJ5LmNsb25lKHBhcmVudCwgY29udmVyc2lvbk1hcCksXHJcblx0XHRcdG9wdGlvbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzYXZlQ3VycmVudExvY2FsQ2FjaGUgKFxyXG5cdFx0Y2xvc2VUYWI/OiBib29sZWFuLFxyXG5cdFx0cGFyYW1ldGVycz86IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXHJcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxyXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuY29sbGVjdGlvbnM7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50SXRlbXMgKCk6IEl0ZW1DYWNoZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXM7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50Q2hhbmdlcyAoKSB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ2FjaGUucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIScpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRsb2NhbENhY2hlLnJvb3RJdGVtLFxyXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxyXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zXHJcblx0XHQpLnByb2Nlc3MoKTtcclxuXHR9XHJcblxyXG5cdGFkZFNpbmdsZUl0ZW0gKFxyXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zOiBhbnksXHJcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxyXG5cdFx0bG9jYWxDYWNoZTogTG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpXHJcblx0KTogSXRlbVJlc291cmNlIHtcclxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpLCBvcHRpb25zLCBpc1Jvb3QpO1xyXG5cdH1cclxuXHJcblx0YWRkU2luZ2xlSXRlbXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogYW55KSB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtRW50cnksIG9wdGlvbnMsIGZhbHNlLCBsb2NhbENhY2hlKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcclxuXHJcblx0XHRpZiAoIWNvbGxlY3Rpb25DYWNoZS5jb250YWlucyhjb2xsZWN0aW9uRW50cnkpKVxyXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGUuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAobGlua2VkRW50cmllczogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdLCBvcHRpb25zOiBhbnksIGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2VJdGVtVHlwZU1hcCB7XHJcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gZW50cnkuaXRlbVR5cGU7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gZW50cnkuaXRlbUVudHJpZXM7XHJcblx0XHRcdGxldCBjb2xsZWN0aW9uTWF0Y2hlcjtcclxuXHJcblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIGZhbHNlKTtcclxuXHJcblx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXNbaXRlbVR5cGVdLnB1c2gobG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSkpO1xyXG5cclxuXHRcdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXRlbVR5cGUgPT09ICdQcm9qZWN0bm90aXRpZScpIHtcclxuXHRcdFx0XHRcdGNyZWF0ZVBhdGgoXHJcblx0XHRcdFx0XHRcdGxvY2FsQ2FjaGUudGFiUmVxdWVzdFBhcmFtZXRlcnMsXHJcblx0XHRcdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRcdFx0XHRbe30sIHtub19ub3RpZmljYXRpb246IHRydWV9XVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcclxuXHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIuYWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxDYWNoZSAoKTogTG9jYWxDYWNoZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCkpO1xyXG5cdH1cclxuXHJcblx0cmVzZXRMb2NhbENhY2hlICgpIHtcclxuXHRcdGNvbnN0IG9sZExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcclxuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdG9sZExvY2FsQ2FjaGUuY2xlYXJSZXNvdXJjZXMoKTtcclxuXHJcblx0XHR0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLnNldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSwgbG9jYWxDYWNoZSk7XHJcblx0fVxyXG5cclxuXHRhZGRUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIHRydWUpXHJcblx0XHRcdC5hZGRUb0NvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgZmFsc2UpXHJcblx0XHRcdC5yZW1vdmVGcm9tQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcclxuXHR9XHJcblxyXG5cdHNhdmVMb2NhbCAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1SZXNvdXJjZS5lbnRyeTtcclxuXHJcblx0XHRpdGVtRW50cnkuc2V0RGlzcGxheU5hbWUoKTtcclxuXHRcdHRoaXMuYWRkVG9Db2xsZWN0aW9ucyhbaXRlbUVudHJ5XSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKGl0ZW1SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtSWRNYXAgKGNvbGxlY3Rpb25NYXA6IGFueSwgY29udmVyc2lvbk1hcCkge1xyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXAgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGZvciAoY29uc3Qgb2xkSWQgaW4gY29udmVyc2lvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBuZXdJZCA9IGNvbnZlcnNpb25NYXBbb2xkSWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbb2xkSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwW25ld0lkXSA9IGNvbGxlY3Rpb25NYXBbb2xkSWRdO1xyXG5cdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtvbGRJZF07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnM6IGFueSwgcHJvY2Vzc09wdGlvbnMgPSB0cnVlKTogQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZENvbGxlY3Rpb24oXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcclxuXHRcdFx0cHJvY2Vzc09wdGlvbnMgPyB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMocmVzb3VyY2VPcHRpb25zKSA6IHJlc291cmNlT3B0aW9uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IGFueSwgaXNSb290OiBib29sZWFuKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcclxuXHR9XHJcblxyXG5cdG9uQmVmb3JlU2F2ZSAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25CZWZvcmVTYXZlJywga2V5LCBjYWxsYmFjayk7XHJcblx0fVxyXG5cclxuXHRvblNhdmVTdWNjZXNzIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcclxuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVTdWNjZXNzJywga2V5LCBjYWxsYmFjayk7XHJcblx0fVxyXG5cclxuXHRvblNhdmVXaXRob3V0Q2xvc2luZyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBrZXksIGNhbGxiYWNrKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcclxuXHRlbnRyaWVzOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgaW5zdGFuY2VvZiBJdGVtRW50cnkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0Y2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRnZXQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdGNvbnRhaW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcclxuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XHJcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XHJcblx0Ly8gdG9kbzogdHJhbnNsYXRlXHJcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XHJcblx0QUxMX1BFUk1JU1NJT05TID0gNztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiB0cnVlLFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxyXG5cdFx0XHRcdHRlbXBsYXRlQ29sdW1uczoge30sXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IGFwaVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcclxuXHJcblx0XHRpZiAoZG9FeHRlbmQpXHJcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbENvbnZlcnNpb25NYXAgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV1bcGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGxldCBjb252ZXJzaW9uTWFwRW50cnk7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcclxuXHJcblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHR0aGlzLmV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHR9XHJcblxyXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRiYXRjaENsb25lIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3RcclxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XHJcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxyXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXHJcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XHJcblx0fVxyXG5cclxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxyXG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxyXG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xyXG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcclxuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XHJcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcclxuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcclxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxyXG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XHJcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcclxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcclxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XHJcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XHJcblx0XHRcdGNhc2UgJ0luaHV1cic6XHJcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XHJcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxyXG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnVGFhayc6XHJcblx0XHRcdGNhc2UgJ1RhZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0Y2FzZSAnVGlqZCc6XHJcblx0XHRcdGNhc2UgJ1RpdGVsJzpcclxuXHRcdFx0Y2FzZSAnVHlwZSc6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xyXG5cdFx0XHQvLyBjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcclxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXHJcblx0QmF0Y2hTdGF0dXMsXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5VdGlsLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXNwb25zZSwgQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCwgRW50cnlTdGF0dXMsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLFxyXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsIFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBcclxufSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG4vLyB0b2RvIG1ha2UgY2xhc3NcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtSGFuZGxlciB7XHJcblx0ZW50cmllczogSXRlbUNhY2hlO1xyXG5cdHRlbXBsYXRlczogQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeSB8IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcclxuXHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyeVN0YXR1cy5lbnRyeTtcclxuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcclxuXHJcblx0XHRpZiAoc3RhdHVzID09PSBFTlRSWV9TVEFUVVMuTE9DQUwpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKVxyXG5cdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKGl0ZW1FbnRyeSwgc3RhdHVzLCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIGl0ZW1JZHNcclxuXHQgKiBAcGFyYW0gb3B0aW9uc1xyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1FbnRyeVtdPn1cclxuXHQgKlxyXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcclxuXHQgKiBhIHVzYWJsZSBJdGVtRW50cnlcclxuXHQgKi9cclxuXHJcblx0ZmV0Y2hJdGVtcyAoaXRlbVR5cGUsIGl0ZW1JZHMsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKVxyXG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoPEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4+IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpKTtcclxuXHJcblx0XHRwcm9taXNlcy5lbnRyaWVzID0gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzUmVxdWVzdHMoKSlcclxuXHRcdFx0cHJvbWlzZXMucmVxdWVzdHMgPSB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpLCBvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSlcclxuXHRcdFx0cHJvbWlzZXMudGVtcGxhdGUgPSB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5iYXRjaFJlc29sdmUoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLCBvcHRpb25zLmNvbHVtbnMsIHJlc29sdmVkLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVDYWNoZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3Q7XHJcblxyXG5cdFx0c3dpdGNoIChzdGF0dXMpIHtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbUVudHJ5KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5kaWZmZXJlbmNlO1xyXG5cclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgW2l0ZW1JZF0sIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgY29sdW1uRGlmZmVyZW5jZSwgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHRcdGRlZmF1bHQ6IC8vIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBbaXRlbUlkXSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZShcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMucmVzb2x2ZShyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJlc29sdmVMb2NhbCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGl0ZW1JZENvbnZlcnNpb24gPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcclxuXHJcblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpOyAvLyBjcmVhdGUgbmV3IG9iamVjdFxyXG5cclxuXHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQucHJvY2Vzc0xvY2FsKHRlbXBsYXRlLmZpZWxkcywge30sIHt9LCBpdGVtSWRDb252ZXJzaW9uKVxyXG5cdFx0XHQuc2V0Q3JlYXRvcigpXHJcblx0XHRcdC5yZXNvbHZlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bWFpbjogaXRlbUVudHJ5LFxyXG5cdFx0XHRsaW5rZWQ6IHRoaXMuY3JlYXRlTG9jYWxFbnRyaWVzKGl0ZW1UeXBlLCBpdGVtSWQsIHRlbXBsYXRlLCBpdGVtSWRDb252ZXJzaW9uLCBsb2NhbEl0ZW1DYWNoZSlcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRXhwYW5zaW9uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHQvLyBBbm90aGVyIHJlcXVlc3QgYWxyZWFkeSByZXF1ZXN0ZWQgdGhlIGNvbHVtbnMgd2UgbmVlZCBoZXJlLCBubyBuZWVkIHRvIGV4cGFuZCB0aGUgaXRlbSBhbmQgcmVzb2x2ZSBpdCAoYWxyZWFkeSBkb25lIGJ5IG90aGVyIHJlcXVlc3QpXHJcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmUoKTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVSZW1vdGUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5TZXQ6IENvbHVtblNldCwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBpbml0aWFsID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZCkgeyAvLyBxdWVyeSByZXR1cm5lZCBubyByZXN1bHRzXHJcblx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcclxuXHRcdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcclxuXHRcdFx0aW5pdGlhbCxcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldC5yb290KSxcclxuXHRcdFx0Y29sdW1uU2V0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcclxuXHJcblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0KFxyXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXHJcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcclxuXHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgP1xyXG5cdFx0XHRcdHt9IDpcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goY29sdW1uSXRlbVR5cGUsIHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0pXHJcblx0XHRdKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZTogYW55ID0gcmVzb2x2ZWRbMF07XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcclxuXHRcdFx0XHRcdHJlc29sdmVkWzFdXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XHJcblx0XHRcdFx0XHRmaWVsZHM6IHRlbXBsYXRlUmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucyksXHJcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uczogcmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXHJcblx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV0gPSB0ZW1wbGF0ZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB7XHJcblx0XHRsZXQgaXRlbUVudHJ5O1xyXG5cclxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcclxuXHRcdFx0aXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIGZhbHNlKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5kZWZlclJlcXVlc3QpO1xyXG5cclxuXHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGVudHJ5OiBpdGVtRW50cnksXHJcblx0XHRcdHN0YXR1czogb3B0aW9ucy5kZWZlclJlcXVlc3QgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGlzQ29sdW1uU3VwZXJzZXQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgfHwgaXRlbUVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKGNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0aGlzLmlzQ29sdW1uU3VwZXJzZXQoaXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1ucykgP1xyXG5cdFx0XHRcdEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5pc0NvbHVtblN1cGVyc2V0KGl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnMpKVxyXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcclxuXHJcblx0XHRpdGVtRW50cnkuZGVmZXIoZmFsc2UpO1xyXG5cclxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge0JhdGNoU3RhdHVzfSBiYXRjaFN0YXR1c1xyXG5cdCAqIEBwYXJhbSByZXF1ZXN0Q29sdW1uc1xyXG5cdCAqIEBwYXJhbSByZXNvbHZlZFxyXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cclxuXHQgKlxyXG5cdCAqIGZvciBldmVyeSB0eXBlIG9mIGVudHJ5IHN0YXR1cyB0aGVyZSBpcyBpbiB0aGlzIGJhdGNoIHJlcXVlc3QgbWFrZSBzdXJlIHRoZSBlbnRyaWVzIGdldCByZXNvbHZlZC5cclxuXHQgKiB0aGVuIHJldHVybiBhIGFycmF5IG9mIHRoZSByZXN1bHRpbmcgSXRlbUVudHJ5QXJyYXlcclxuXHQgKi9cclxuXHRiYXRjaFJlc29sdmUgKGl0ZW1UeXBlLCBiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXMsIHJlcXVlc3RDb2x1bW5zLCByZXNvbHZlZCwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IEl0ZW1FbnRyeVtdIHwgUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlID0gcmVzb2x2ZWQucmVxdWVzdHM7XHJcblx0XHRjb25zdCBleHBhbmRTdGF0dXMgPSBbRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XHJcblx0XHRjb25zdCByZXNvbHZlU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5SRVNPTFZFXTtcclxuXHJcblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xyXG5cclxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRcdGV4cGFuZFN0YXR1cywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihpdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRyZXNvbHZlU3RhdHVzLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlKSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuTE9DQUxdLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgbnVsbCwgcmVzb2x2ZWQudGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0b2RvOiBubyBpdGVtIGVycm9yICh7bWVzc2FnZTogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVuZGVmaW5lZEl0ZW1FcnJvcn0pXHJcblx0XHRyZXR1cm4gc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdGxvY2FsUGFyZW50SWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlLFxyXG5cdFx0aXRlbUlkQ29udmVyc2lvbjogSXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGVcclxuXHQpOiBUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwW10ge1xyXG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm9NYXAgPSB7fTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IHt9O1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTx7aXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W119PiA9IFtdO1xyXG5cclxuXHRcdC8vIFRPRE86IGRpc2FibGUgY2FjaGluZz9cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gYXBpUmVzcG9uc2UuaXRlbXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSBwYXJlbnRUeXBlKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChwYXJlbnRUeXBlMiwgbG9jYWxQYXJlbnRJZDIsIGFwaVBhcmVudElkKSA9PiB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IHtpdGVtVHlwZTogcGFyZW50VHlwZTIsIGl0ZW1JZDogbG9jYWxQYXJlbnRJZDJ9O1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGUyXVthcGlQYXJlbnRJZF0ubGlua3M7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XHJcblx0XHRcdFx0aWYgKCFsaW5rcy5oYXNPd25Qcm9wZXJ0eShpdGVtVHlwZSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Ly8gdGhlIGl0ZW0gZW50cmllcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdCBpbiB0b3AtZG93biBvcmRlclxyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaCh7aXRlbVR5cGU6IGl0ZW1UeXBlLCBpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdfSk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gaXRlbUlkQ29udmVyc2lvbltpdGVtVHlwZV1bYXBpSXRlbUlkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbExpbmtlZChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxyXG5cdFx0XHRcdFx0XHRhcGlSZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgYXBpSXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0cGFyZW50LFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0aXRlbUlkQ29udmVyc2lvblxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBhcGlJdGVtSWQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0ID0gdHJ1ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSkge1xyXG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyh7Y29sdW1uczogW3RpdGxlRmllbGRdLCBkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdH0pLFxyXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQvLyB0b2RvOiBJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwXHJcblx0XHRcdChlbnRyeTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKGVudHJ5Lm1haW4gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybiBlbnRyeS5tYWluLmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogSXRlbUlkW10sIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXF1ZXN0U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHtpZDogaXRlbUlkfSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRxdWVyeSA9IGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QsXHJcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xyXG5cdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucztcclxuXHJcblx0XHRjb25zdCBwYXJhbXMgPSB7XHJcblx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxyXG5cdFx0XHRpdGVtVHlwZTogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsID8gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlIDogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlLFxyXG5cdFx0XHRjb2x1bW5zOiB7W2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV06IGNvbHVtbnN9LFxyXG5cdFx0XHRxdWVyeTogcXVlcnksXHJcblx0XHRcdGxpbWl0OiBudWxsXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxyXG5cdFx0XHRwYXJhbXMubGltaXQgPSBvcHRpb25zLmxpbWl0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XHJcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdHtpZDogcGFyZW50SWRBcnJheX0sXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdFx0KSA6XHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRcdFx0cXVlcnksXHJcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgLy8gc2hvdWxkIGNvbnRhaW4gYSBkZXJpdmVkIGNvbHVtbiB0aGF0IHJlZmVycyB0byB0aGUgcGFyZW50XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzRXhwYW5zaW9uIChyZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAoXHJcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXHJcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb25cclxuXHQpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0Y29sdW1uU2V0Lml0ZW1UeXBlLFxyXG5cdFx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uU2V0LnJlcXVlc3QsXHJcblx0XHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2U8SXRlbUVudHJ5Pj4gPSBbXTtcclxuXHJcblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSkge1xyXG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtSWQsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0PENvbHVtbkV4cGFuc2lvbj4gY29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cclxuXHRcdFx0aXRlbUVudHJ5IDpcclxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxyXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXHJcblx0XHRcdFx0XHRjb2x1bW5TZXQsXHJcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHQpIDpcclxuXHRcdFx0XHRbXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRlZGl0OiBmYWxzZSxcclxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCxcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG5vb3BcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVPcHRpb25zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoZmlyc3Rba2V5XSAhPT0gc2Vjb25kW2tleV0pXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBEVVBMSUNBVEVfS0VZV09SRCwgRFVQTElDQVRFX1BSRUZJWCwgTkVXX0tFWVdPUkQsIE5FV19QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XHJcblx0c2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XHJcblxyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtVHlwZS5jb25jYXQodGhpcy5zZXBhcmF0b3IsIFN0cmluZyhpdGVtSWQpKTtcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25DYWNoZUtleSAocGFyZW50VHlwZTogc3RyaW5nLCBwYXJlbnRJZDogbnVtYmVyLCBjaGlsZFR5cGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHBhcmVudFR5cGUuY29uY2F0KHRoaXMuc2VwYXJhdG9yLCBTdHJpbmcocGFyZW50SWQpLCB0aGlzLnNlcGFyYXRvciwgY2hpbGRUeXBlKTtcclxuXHR9XHJcblxyXG5cdGdldENzc0tleSAoKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICdfJyk7XHJcblx0fVxyXG5cclxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKSB7XHJcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoTkVXX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6ICduZXcnLFxyXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcoTkVXX0tFWVdPUkQubGVuZ3RoKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdGlmIChzdGF0ZUtleS5pbmRleE9mKERVUExJQ0FURV9LRVlXT1JEKSA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0eXBlOiAnZHVwbGljYXRlJyxcclxuXHRcdFx0XHRpdGVtSWQ6IHN0YXRlS2V5LnN1YnN0cmluZyhEVVBMSUNBVEVfS0VZV09SRC5sZW5ndGgpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXREdXBsaWNhdGVTdGF0ZUtleSAoaXRlbUlkOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIE5FV19LRVlXT1JEICsgdGVtcGxhdGVUeXBlO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxJZCAoKTogSXRlbUlkIHtcclxuXHRcdHJldHVybiArKE5FV19QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdGdldExvY2FsRHVwbGljYXRlSWQgKCk6IEl0ZW1JZCB7XHJcblx0XHRyZXR1cm4gKyhEVVBMSUNBVEVfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XHJcblx0fVxyXG5cclxuXHRnZXRSYW5kb21TdHJpbmcgKCkge1xyXG5cdFx0cmV0dXJuICgnJyArIE1hdGgucmFuZG9tKCkpLnNwbGl0KCcuJylbMV0uc3Vic3RyKDAsIDgpO1xyXG5cdH1cclxuXHJcblx0Ly8gbm90ZTogdGhlIGNoYW5nZXMgY29tcGlsZXIgdXNlcyB0aGlzXHJcblx0Ly8gbWlnaHQgYmUgY2FsbGVkIHdpdGggdW5kZWZpbmVkIChpdGVtSGFuZGxlci5jcmVhdGVSZXF1ZXN0KVxyXG5cdGlzTG9jYWxJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgIT09IHVuZGVmaW5lZCAmJiAodGhpcy5pc05ld0lkKGl0ZW1JZCkgfHwgdGhpcy5pc0R1cGxpY2F0ZUlkKGl0ZW1JZCkpO1xyXG5cdH1cclxuXHJcblx0aXNOZXdJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtSWQgPT09IE5FV19LRVlXT1JEIHx8ICgnJyArIGl0ZW1JZCkuc3Vic3RyaW5nKDAsIE5FV19QUkVGSVgubGVuZ3RoKSA9PT0gTkVXX1BSRUZJWDtcclxuXHR9XHJcblxyXG5cdGlzRHVwbGljYXRlSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gaXRlbUlkID09PSBEVVBMSUNBVEVfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdExvY2tTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbVJlc291cmNlRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUlkQ29udmVyc2lvbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZSB7XHJcblx0aXRlbXM6IEl0ZW1DYWNoZTtcclxuXHRyb290SXRlbTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkO1xyXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblx0ZGVmZXJyZWRDb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cdHRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XHJcblxyXG5cdGNhbGxiYWNrcyA9IHtvbkJlZm9yZVNhdmU6IHt9LCBvblNhdmVTdWNjZXNzOiB7fSwgb25TYXZlV2l0aG91dENsb3Npbmc6IHt9fTtcclxuXHJcblx0Y2hhbmdlc0ludGVydmFsOiBudWxsIHwgbnVtYmVyID0gbnVsbDtcclxuXHRoYXNDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBpZDogc3RyaW5nID0gJydcclxuXHQpIHtcclxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdFx0dGhpcy5kZWZlcnJlZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290ID0gZmFsc2UpIHtcclxuXHRcdGlmIChpc1Jvb3QpXHJcblx0XHRcdHRoaXMucm9vdEl0ZW0gPSBpdGVtRW50cnk7XHJcblxyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHRcdG9wdGlvbnMub25EZWFjdGl2YXRlID0gKF9pdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkRlYWN0aXZhdGVJdGVtKF9pdGVtRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGl0ZW1FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpIHtcclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkFjdGl2YXRlSXRlbSA9IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtID0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbiA9XHJcblx0XHRcdChfY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJDb2xsZWN0aW9uKF9jb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgcmVzb3VyY2VPcHRpb25zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJpZXNbcGFyZW50SWRdLCByZXNvdXJjZU9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XHJcblx0XHR0aGlzLmNsZWFySXRlbUVudHJ5KGl0ZW1SZXNvdXJjZS5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRjbGVhckl0ZW1FbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcclxuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKGlzU3ViVGFiQ2hhbmdlID0gZmFsc2UpIHtcclxuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gY29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKGlzU3ViVGFiQ2hhbmdlKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMuY2xlYXIoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVNpbmdsZUl0ZW1zIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1zLmdldChpdGVtVHlwZSwgb2xkSXRlbUlkKTtcclxuXHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXHJcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XHJcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xyXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0fVxyXG5cclxuXHRyZXNldENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMpXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZXZlcnRDaGFuZ2VzKCk7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGRldGVjdENoYW5nZXMgKCkge1xyXG5cdFx0aWYgKHRoaXMuaGFzQ2hhbmdlcylcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLml0ZW1zLnNvbWUoXHJcblx0XHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpXHJcblx0XHRcdClcclxuXHRcdClcclxuXHRcdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFzQ2hhbmdlcyA9IHRoaXMuY29sbGVjdGlvbnMuc29tZShcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLmNvbGxlY3Rpb25IYXNDaGFuZ2VzKGNvbGxlY3Rpb25FbnRyeSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbGxlY3Rpb25IYXNDaGFuZ2VzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkge1xyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzICYmIChjb2xsZWN0aW9uRW50cnkuaGFzQWRkZWRJdGVtcygpIHx8IGNvbGxlY3Rpb25FbnRyeS5oYXNSZW1vdmVkSXRlbXMoKSkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgJiYgY29sbGVjdGlvbkVudHJ5Lmhhc1VwZGF0ZWRJdGVtcygpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NrYWJsZSAoKSB7XHJcblx0XHRpZiAodGhpcy5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucm9vdEl0ZW0uaXNMb2NrYWJsZSgpO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAoXHJcblx0XHRjbG9zZVRhYiA9IGZhbHNlLFxyXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxyXG5cdFx0YnJlYWtVcEJ5UGFyZW50PzogYm9vbGVhbixcclxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXHJcblx0KSB7XHJcblx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cclxuXHRcdHJldHVybiAodGhpcy5pc0xvY2thYmxlKCkgPyB0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKSA6IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25CZWZvcmVTYXZlJywgY2xvc2VUYWIpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RQYXJhbWV0ZXJzID0gZXh0ZW5kKHt9LCB0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKTtcclxuXHJcblx0XHRcdFx0dGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFxyXG5cdFx0XHRcdFx0dGhpcy5pdGVtcy50b0FycmF5KCksXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25zLnRvQXJyYXkoKSxcclxuXHRcdFx0XHRcdHJlcXVlc3RQYXJhbWV0ZXJzLFxyXG5cdFx0XHRcdFx0YnJlYWtVcEJ5UGFyZW50LFxyXG5cdFx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oY29udmVyc2lvbk1hcCA9PiB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5jbGVhckxvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRpZiAoIWNsb3NlVGFiKVxyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVTaW5nbGVJdGVtcyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlU3VjY2VzcycsIGNvbnZlcnNpb25NYXApLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICghY2xvc2VUYWIpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVdpdGhvdXRDbG9zaW5nJywgY29udmVyc2lvbk1hcCwgdHJ1ZSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5lbmFibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDYWxsYmFja3MgKGV2ZW50LCAuLi5hcmdzKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHRoaXMuY2FsbGJhY2tzW2V2ZW50XSlcclxuXHRcdFx0cmVzdWx0W2tleV0gPSB0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZW5hYmxlQ2hhbmdlc1dhdGNoZXIgKCkge1xyXG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsICE9PSBudWxsKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignQ2hhbmdlcyB3YXRjaGVyIGFscmVhZHkgcnVubmluZyEnLCB0aGlzKTtcclxuXHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IHNldEludGVydmFsKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLmRldGVjdENoYW5nZXMoKSlcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMuaXNMb2NrYWJsZSgpKVxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdDMwMDBcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRkaXNhYmxlQ2hhbmdlc1dhdGNoZXIgKCkge1xyXG5cdFx0aWYgKHRoaXMuY2hhbmdlc0ludGVydmFsID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLmNoYW5nZXNJbnRlcnZhbCk7XHJcblx0XHR0aGlzLmNoYW5nZXNJbnRlcnZhbCA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRyZWdpc3RlckNhbGxiYWNrIChldmVudDogc3RyaW5nLCBrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcclxuXHRcdHRoaXMuY2FsbGJhY2tzW2V2ZW50XVtrZXldID0gY2FsbGJhY2s7XHJcblxyXG5cdFx0cmV0dXJuICgpID0+IGRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XTtcclxuXHR9XHJcblxyXG5cdG9uRGVhY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5jbGVhckl0ZW1FbnRyeShpdGVtRW50cnkpO1xyXG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdG9uQWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2tTZXJ2aWNlIHtcclxuXHRsb2NrSXRlbXMgPSB7fTtcclxuXHRwcm9taXNlcyA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Z2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBtYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRzZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHZhbHVlLCBtYXApIHtcclxuXHRcdHJldHVybiBjcmVhdGVQYXRoKFxyXG5cdFx0XHRtYXAsXHJcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxyXG5cdFx0XHRbe30sIHZhbHVlXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldExvY2tzICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmxvY2tJdGVtcztcclxuXHR9XHJcblxyXG5cdGhhc0xvY2sgKGxvY2tUb2tlbklkKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMubG9ja0l0ZW1zKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24gJiYgbG9ja0l0ZW0uaWQgPT0gbG9ja1Rva2VuSWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0ICh3YXRjaGVkKVxyXG5cdGlzTG9ja2VkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbjtcclxuXHR9XHJcblxyXG5cdGdldE1lc3NhZ2UgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBsb2NrSXRlbS5tZXNzYWdlO1xyXG5cdH1cclxuXHJcblx0Ly8gZG9lcyBub3QgcmVqZWN0IHdoZW4gYSBmb3JlaWduIGxvY2sgaXMgZW5jb3VudGVyZWRcclxuXHQvLyBpcyBhbHNvIHVzZWQgYnkgZGVsZXRlTG9ja1xyXG5cdGZldGNoQ2FjaGVkTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2sgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5sb2NrSXRlbXMpO1xyXG5cclxuXHRcdGlmIChsb2NrICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4obG9jayk7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLnByb21pc2VzKTtcclxuXHJcblx0XHRpZiAocHJvbWlzZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcHJvbWlzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGxvY2tJdGVtID0+IHtcclxuXHRcdFx0XHRpZiAobG9ja0l0ZW0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybiBsb2NrSXRlbTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdExvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4obG9ja0l0ZW0gPT4ge1xyXG5cdFx0XHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ24gP1xyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGxvY2tJdGVtLm1lc3NhZ2UpIDpcclxuXHRcdFx0XHRcdGxvY2tJdGVtLnRva2VuO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0TG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jcmVhdGUoXHJcblx0XHRcdCdMb2NrdG9rZW4nLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHR7aXRlbXR5cGU6IGl0ZW1UeXBlLCBpdGVtOiBpdGVtSWR9XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXHJcblx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChcclxuXHRcdFx0XHRcdFx0J0xvY2t0b2tlbicsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzLkxvY2t0b2tlblswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRpZiAoZXJyb3IuY29kZSA9PT0gMzAxKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0aXNGb3JlaWduOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2VcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShpdGVtRW50cnksIHByb21pc2UsIHRoaXMucHJvbWlzZXMpO1xyXG5cdH1cclxuXHJcblx0ZGVsZXRlTG9jayAoaXRlbUVudHJ5KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaENhY2hlZExvY2soaXRlbUVudHJ5KS50aGVuKGNhY2hlZExvY2sgPT4ge1xyXG5cdFx0XHRcdC8vIHVuZGVmaW5lZDogbm90IHJlcXVlc3RlZCB5ZXRcclxuXHJcblx0XHRcdFx0aWYgKGNhY2hlZExvY2sgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0aWYgKGNhY2hlZExvY2suaXNGb3JlaWduKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKCdMb2NrdG9rZW4nLCBjYWNoZWRMb2NrLmlkKVxyXG5cdFx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyTG9jayAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuY29uc3QgRU1QVFlfRU5UUlkgPSB7fTtcclxuXHJcbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdHBhcmVudE1hcDogYW55ID0ge307XHJcblx0ZGVzdGluYXRpb246IGFueSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHJvb3RJdGVtRW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdHByaXZhdGUgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzICgpIHtcclxuXHRcdHRoaXMucGFyZW50TWFwID0gdGhpcy5jcmVhdGVQYXJlbnRNYXAodGhpcy5zaW5nbGVJdGVtQ2FjaGUpO1xyXG5cdFx0dGhpcy5wcm9jZXNzSXRlbXModGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLCBbdGhpcy5yb290SXRlbUVudHJ5XSwge30pO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGl0ZW1UeXBlOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZDogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1JZCxcclxuXHRcdFx0aXRlbXM6IHRoaXMuZGVzdGluYXRpb25cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNyZWF0ZVBhcmVudE1hcCAoaXRlbUNhY2hlKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpdGVtQ2FjaGUuZm9yRWFjaChcclxuXHRcdFx0aXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0XHRpZiAocGFyZW50ID09PSBudWxsKSAvLyB3ZSBkb24ndCBjYXJlIGZvciBpdGVtcyB0aGF0IGFyZSBub3QgbGlua2VkIHRvIHRoZSByb290IGl0ZW1cclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0Y29uc3QgcGFyZW50VHlwZSA9IHBhcmVudC5pdGVtVHlwZTtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbcGFyZW50VHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJlc3VsdFtwYXJlbnRUeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0XHRsZXQgbWFwRW50cnkgPSByZXN1bHRbcGFyZW50VHlwZV07XHJcblxyXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcEVudHJ5W3BhcmVudElkXSA9IHt9O1xyXG5cclxuXHRcdFx0XHRtYXBFbnRyeSA9IG1hcEVudHJ5W3BhcmVudElkXTtcclxuXHJcblx0XHRcdFx0aWYgKG1hcEVudHJ5W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW1zIChpdGVtVHlwZSwgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBsaW5rQWNjdW11bGF0b3IpIHtcclxuXHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGlmIChsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdFx0Ly8gZWFjaCBpdGVtIG9ubHkgaGFzIGEgc2luZ2xlIHBhcmVudCwgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzXHJcblx0XHRcdGlmICh0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdLnB1c2goaXRlbUlkKTtcclxuXHJcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gPSB0aGlzLnByb2Nlc3NJdGVtKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGNoaWxkSXRlbXMgPSB0aGlzLmdldEl0ZW1zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRjb25zdCBjaGlsZENvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q29sbGVjdGlvbnNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdGNvbnN0IHZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblx0XHRjb25zdCBsaW5rcyA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkSXRlbXMpXHJcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNoaWxkVHlwZSwgY2hpbGRJdGVtc1tjaGlsZFR5cGVdLCBsaW5rcyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY2hpbGRDb2xsZWN0aW9ucykge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMucXVlcnkgIT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUsIGNvbGxlY3Rpb25FbnRyeS5pdGVtcywgbGlua3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGhhc1ZhbHVlcyA9IGhhc1Byb3BlcnRpZXModmFsdWVzKTtcclxuXHRcdGNvbnN0IGhhc0xpbmtzID0gaGFzUHJvcGVydGllcyhsaW5rcyk7XHJcblxyXG5cdFx0aWYgKGhhc1ZhbHVlcyAmJiBoYXNMaW5rcylcclxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlcywgbGlua3M6IGxpbmtzfTtcclxuXHJcblx0XHRpZiAoaGFzVmFsdWVzKVxyXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzfTtcclxuXHJcblx0XHRpZiAoaGFzTGlua3MpXHJcblx0XHRcdHJldHVybiB7bGlua3M6IGxpbmtzfTtcclxuXHJcblx0XHRyZXR1cm4gRU1QVFlfRU5UUlk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEl0ZW1zQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMucGFyZW50TWFwW3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdGlmIChtYXBFbnRyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0cmV0dXJuIG1hcEVudHJ5W3BhcmVudElkXTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBBcGlGb3JtYXR0ZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzLCBpbkFycmF5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IE1BWUJFID0gJ21heWJlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXIge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIGZpZWxkczogRmllbGRNYXAsXHJcblx0XHRwdWJsaWMgcGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb21wYXJlVmFsdWVzICh2YWx1ZSwgcXVlcnlWYWx1ZSkge1xyXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudChxdWVyeVZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVNb21lbnRPYmplY3RzKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24ocXVlcnlWYWx1ZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlRHVyYXRpb25zKHF1ZXJ5VmFsdWUsIHZhbHVlKTtcclxuXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHF1ZXJ5VmFsdWUgPT0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRtYXRjaFF1ZXJ5IChxdWVyeTogYW55KTogYm9vbGVhbiB8IHN0cmluZyB7XHJcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hMaW5rZWRUb1F1ZXJ5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaENvbXBsZXhRdWVyeShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHRoaXMuZmllbGRzW3F1ZXJ5LmtleV0sIHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgcXVlcnkhIFBhcnNlZD8nKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hMaW5rZWRUb1F1ZXJ5IChxdWVyeSkge1xyXG5cdFx0aWYgKHF1ZXJ5LnJldmVyc2UpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGxldCBtYXRjaDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xyXG5cdFx0ZWxzZSBpZiAocXVlcnkubGlua2VkVG8gIT09IHBhcmVudC5pdGVtVHlwZSlcclxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcclxuXHRcdGVsc2VcclxuXHRcdFx0bWF0Y2ggPSB0aGlzLm1hdGNoU2ltcGxlUXVlcnkocGFyZW50Lml0ZW1JZCwgcXVlcnkucXVlcnkpO1xyXG5cclxuXHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkubm90ID8gIW1hdGNoIDogbWF0Y2g7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoQ29tcGxleFF1ZXJ5IChxdWVyeSkge1xyXG5cdFx0Y29uc3QgY29uZGl0aW9ucyA9IHF1ZXJ5LmNvbmRpdGlvbnM7XHJcblxyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHRcdGxldCB0ZXJtaW5hbDtcclxuXHJcblx0XHRzd2l0Y2ggKHF1ZXJ5Lm9wZXJhdG9yKSB7XHJcblx0XHRcdGNhc2UgJ0FORCc6XHJcblx0XHRcdFx0cmVzdWx0ID0gdHJ1ZTtcclxuXHRcdFx0XHR0ZXJtaW5hbCA9IGZhbHNlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdPUic6XHJcblx0XHRcdFx0cmVzdWx0ID0gZmFsc2U7XHJcblx0XHRcdFx0dGVybWluYWwgPSB0cnVlO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBvcGVyYXRvcicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSB0aGlzLm1hdGNoUXVlcnkoY29uZGl0aW9uKTtcclxuXHJcblx0XHRcdGlmIChtYXRjaCA9PT0gdGVybWluYWwpXHJcblx0XHRcdFx0cmV0dXJuIHRlcm1pbmFsO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcclxuXHRcdFx0XHRyZXN1bHQgPSBNQVlCRTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaFNpbXBsZVF1ZXJ5ICh2YWx1ZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGtleSA9IHF1ZXJ5LmtleTtcclxuXHRcdGxldCBxdWVyeVZhbHVlID0gcXVlcnkudmFsdWU7XHJcblxyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSkgLy8gQ291bGQgYmUgbGlua2VkVG8gYW4gZW1wdHkgb2JqZWN0XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignUmVxdWlyZWQgZmllbGQnLCBrZXksICdub3QgZm91bmQgZm9yJywgdGhpcy5pdGVtVHlwZSk7XHJcblx0XHRcdHJldHVybiBNQVlCRTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocXVlcnlWYWx1ZSA9PT0gJ05PVycpXHJcblx0XHRcdHF1ZXJ5VmFsdWUgPSBtb21lbnQoKTtcclxuXHJcblx0XHRzd2l0Y2ggKHF1ZXJ5LmNvbXBhcmF0b3IpIHtcclxuXHRcdFx0Y2FzZSAnPSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJyE9JzpcclxuXHRcdFx0XHRyZXR1cm4gIXRoaXMuY29tcGFyZVZhbHVlcyh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJzwnOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJzw9JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPD0gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID4gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPj0nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+PSBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICdJTic6XHJcblx0XHRcdFx0cmV0dXJuIGluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICdOT1QgSU4nOlxyXG5cdFx0XHRcdHJldHVybiAhaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIGNvbXBhcmF0b3I6ICcgKyBxdWVyeS5jb21wYXJhdG9yICsgJyBpbiBxdWVyeSAnICsgcXVlcnkpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IGdldEZpcnN0UHJvcGVydHkgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZW51bSBDT05TVEFOVFMge1xyXG5cdE9CSiA9IDAsXHJcblx0U1RSID0gMSxcclxuXHRTRVAgPSAnOidcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyIHtcclxuXHRxdWVyeTogYW55O1xyXG5cdHBhcmFtZXRlcnM6IGFueTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHF1ZXJ5LCBwYXJhbWV0ZXJzPykge1xyXG5cdFx0dGhpcy5xdWVyeSA9IHF1ZXJ5O1xyXG5cdFx0dGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1ZhbHVlICh2YWx1ZSkge1xyXG5cdFx0Ly8gYWxnb3JpdGhtIGlzIG5vdCBpbXBvcnRhbnQsIGFzIGxvbmcgYXMgYWxsIGFycmF5cyBhcmUgc29ydGVkIHRoZSBzYW1lIHdheVxyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdmFsdWUuc2xpY2UoKS5zb3J0KCk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXHJcblx0XHRcdHJldHVybiBtb21lbnQodmFsdWUpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbih2YWx1ZSkpXHJcblx0XHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29tcGFyZVBhcnNlZFF1ZXJpZXMgKGEsIGIpIHtcclxuXHRcdGlmIChhW0NPTlNUQU5UUy5TVFJdID09PSBiW0NPTlNUQU5UUy5TVFJdKVxyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHJcblx0XHRyZXR1cm4gYVtDT05TVEFOVFMuU1RSXSA+IGJbQ09OU1RBTlRTLlNUUl0gPyAxIDogLTE7XHJcblx0fVxyXG5cclxuXHRwYXJzZSAocXVlcnkgPSB0aGlzLnF1ZXJ5KSB7XHJcblx0XHRpZiAocXVlcnkubGlua2VkVG8gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VMaW5rZWRUb1F1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmxpbmtlZFRvLFxyXG5cdFx0XHRcdHF1ZXJ5LnF1ZXJ5LFxyXG5cdFx0XHRcdHF1ZXJ5LnJldmVyc2UsXHJcblx0XHRcdFx0cXVlcnkubm90XHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5Lm5vdCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBcIk5vdFwiIG5vdCBzdXBwb3J0ZWQnKTtcclxuXHJcblx0XHRpZiAocXVlcnkuY3VzdG9tICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ3VzdG9tUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkuY3VzdG9tLFxyXG5cdFx0XHRcdHF1ZXJ5LnBhcmFtZXRlcnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkuc2VhcmNoICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2VhcmNoUXVlcnkocXVlcnkuc2VhcmNoKTtcclxuXHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUNvbXBsZXhRdWVyeShcclxuXHRcdFx0XHRxdWVyeS5jb25kaXRpb25zLFxyXG5cdFx0XHRcdHF1ZXJ5Lm9wZXJhdG9yXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmtleSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmtleSxcclxuXHRcdFx0XHRxdWVyeS52YWx1ZSxcclxuXHRcdFx0XHRxdWVyeS5jb21wYXJhdG9yXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0Y29uc3Qga2V5ID0gZ2V0Rmlyc3RQcm9wZXJ0eShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKGtleSA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIFt7fSwgJ3t9J107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShrZXksIHF1ZXJ5W2tleV0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZVNlYXJjaFF1ZXJ5ICh2YWx1ZSkge1xyXG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7c2VhcmNoOiB2YWx1ZVtDT05TVEFOVFMuT0JKXX0sXHJcblx0XHRcdCdbJyArICdzZWFyY2gnICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVF1ZXJ5IChjdXN0b20sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGlmIChwYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0e2N1c3RvbTogY3VzdG9tfSxcclxuXHRcdFx0XHQnWycgKyBjdXN0b20gKyAnXSdcclxuXHRcdFx0XTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRQYXJhbWV0ZXJzID0gdGhpcy5wYXJzZUN1c3RvbVBhcmFtZXRlcnMocGFyYW1ldGVycyk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2N1c3RvbTogY3VzdG9tLCBwYXJhbWV0ZXJzOiBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5PQkpdfSxcclxuXHRcdFx0J1snICsgY3VzdG9tICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUGFyYW1ldGVycyAocGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnNvcnQoKTtcclxuXHJcblx0XHRjb25zdCBxdWVyeSA9IHt9O1xyXG5cdFx0bGV0IHN0cmluZyA9ICcnO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzW2ldO1xyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUocGFyYW1ldGVyc1trZXldKTtcclxuXHJcblx0XHRcdHF1ZXJ5W2tleV0gPSB2YWx1ZVtDT05TVEFOVFMuT0JKXTtcclxuXHJcblx0XHRcdGlmIChpID4gMClcclxuXHRcdFx0XHRzdHJpbmcgKz0gQ09OU1RBTlRTLlNFUDtcclxuXHJcblx0XHRcdHN0cmluZyArPSB2YWx1ZVtDT05TVEFOVFMuU1RSXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZVNpbXBsZVF1ZXJ5IChrZXksIHZhbHVlLCBjb21wYXJhdG9yPykge1xyXG5cdFx0dmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRpZiAoY29tcGFyYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb21wYXJhdG9yID0gQXJyYXkuaXNBcnJheSh2YWx1ZVtDT05TVEFOVFMuT0JKXSkgPyAnSU4nIDogJz0nO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtrZXk6IGtleSwgdmFsdWU6IHZhbHVlW0NPTlNUQU5UUy5PQkpdLCBjb21wYXJhdG9yOiBjb21wYXJhdG9yfSxcclxuXHRcdFx0J1snICsgY29tcGFyYXRvciArIENPTlNUQU5UUy5TRVAgKyBrZXkgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlTGlua2VkVG9RdWVyeSAobGlua2VkVG8sIHF1ZXJ5LCByZXZlcnNlLCBub3QpIHtcclxuXHRcdGlmIChxdWVyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRxdWVyeSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXZlcnNlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldmVyc2UgPSBmYWxzZTtcclxuXHJcblx0XHRpZiAobm90ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5vdCA9IGZhbHNlO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFF1ZXJ5ID0gdGhpcy5wYXJzZShxdWVyeSk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2xpbmtlZFRvOiBsaW5rZWRUbywgcXVlcnk6IHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5PQkpdLCByZXZlcnNlOiByZXZlcnNlLCBub3Q6IG5vdH0sXHJcblx0XHRcdCdbJyArICdsaW5rZWRUbycgKyBDT05TVEFOVFMuU0VQICsgbGlua2VkVG8gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUXVlcnlbQ09OU1RBTlRTLlNUUl0gKyBDT05TVEFOVFMuU0VQICsgcmV2ZXJzZSArIENPTlNUQU5UUy5TRVAgKyBub3QgKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ29tcGxleFF1ZXJ5IChjb25kaXRpb25zLCBvcGVyYXRvcikge1xyXG5cdFx0aWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9wZXJhdG9yID0gJ0FORCc7XHJcblx0XHRlbHNlXHJcblx0XHRcdG9wZXJhdG9yID0gb3BlcmF0b3IudG9VcHBlckNhc2UoKTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRDb25kaXRpb25zID0gdGhpcy5wYXJzZUNvbmRpdGlvbnMoY29uZGl0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2NvbmRpdGlvbnM6IHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLk9CSl0sIG9wZXJhdG9yOiBvcGVyYXRvcn0sXHJcblx0XHRcdCdbJyArIG9wZXJhdG9yICsgcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDb25kaXRpb25zIChjb25kaXRpb25zKSB7XHJcblx0XHRsZXQgcGFyc2VkQ29uZGl0aW9uczogb2JqZWN0W10gPSBbXTtcclxuXHRcdGNvbnN0IHF1ZXJ5OiBvYmplY3RbXSA9IFtdO1xyXG5cdFx0bGV0IHN0cmluZyA9ICcnO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNvbmRpdGlvbnMpXHJcblx0XHRcdHBhcnNlZENvbmRpdGlvbnMucHVzaCh0aGlzLnBhcnNlKGNvbmRpdGlvbikpO1xyXG5cclxuXHRcdHBhcnNlZENvbmRpdGlvbnMgPSBwYXJzZWRDb25kaXRpb25zLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcGFyZVBhcnNlZFF1ZXJpZXMoYSwgYikpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyc2VkQ29uZGl0aW9uIG9mIHBhcnNlZENvbmRpdGlvbnMpIHtcclxuXHRcdFx0cXVlcnkucHVzaChwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLk9CSl0pO1xyXG5cdFx0XHRzdHJpbmcgKz0gcGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5TVFJdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvcm1hdFZhbHVlICh2YWx1ZSkge1xyXG5cdFx0bGV0IHByb2Nlc3NlZFZhbHVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyYnKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygxKTtcclxuXHJcblx0XHRcdHZhbHVlID0gdGhpcy5wYXJhbWV0ZXJzW2tleV07XHJcblxyXG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5UGFyc2VyOiBVbmRlZmluZWQgdGVtcGxhdGUgcGFyYW1ldGVyIFxcJycgKyBrZXkgKyAnXFwnJyk7XHJcblxyXG5cdFx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsIGtleSArICc+JyArIHZhbHVlXTtcclxuXHRcdH1cclxuXHJcblx0XHRwcm9jZXNzZWRWYWx1ZSA9IHRoaXMucHJvY2Vzc1ZhbHVlKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCAnJyArIHByb2Nlc3NlZFZhbHVlXTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0YWRkQW5kQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XHJcblx0XHRpZiAocXVlcnkuY29uZGl0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxyXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXX07XHJcblxyXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cclxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XHJcblx0fVxyXG5cclxuXHRhZGRPckNvbmRpdGlvbiAocXVlcnksIGNvbmRpdGlvbikge1xyXG5cdFx0aWYgKHF1ZXJ5Lm9wZXJhdG9yID09PSAnb3InKVxyXG5cdFx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xyXG5cclxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXHJcblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IFtxdWVyeSwgY29uZGl0aW9uXSwgb3BlcmF0b3I6ICdvcid9O1xyXG5cdH1cclxuXHJcblx0YWRkUGFyZW50Q29uZGl0aW9uIChxdWVyeSwgcGFyZW50KSB7XHJcblx0XHRsZXQgbGlua2VkVG9RdWVyeTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gcXVlcnk7XHJcblxyXG5cdFx0bGlua2VkVG9RdWVyeSA9IHtsaW5rZWRUbzogcGFyZW50Lml0ZW1UeXBlLCBxdWVyeTogcGFyZW50Lml0ZW1JZH07XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID8gbGlua2VkVG9RdWVyeSA6IHRoaXMuYWRkQW5kQ29uZGl0aW9uKHF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZU5vdEluIChpZEFycmF5KSB7XHJcblx0XHRyZXR1cm4ge2NvbXBhcmF0b3I6ICdOT1QgSU4nLCBrZXk6ICdpZCcsIHZhbHVlOiBpZEFycmF5fTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4vQ29sdW1uVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB7XHJcblx0cHJpdmF0ZSBjb2x1bW5zID0ge307XHJcblx0cHJpdmF0ZSBjb2x1bW5JbmZvSWRNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRleHBhbmQgKGNvbHVtbkluZm8pIHtcclxuXHRcdGlmICh0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSlcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uSW5mby5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0XHQubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdLCBjb2x1bW5JbmZvLnJlcXVlc3QpXHJcblx0XHRcdC5tZXJnZWQ7XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0gPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0Z2V0ICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbnM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sbGVjdGlvbkhhbmRsZXIsIEl0ZW1IYW5kbGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgRmllbGRNYXAsIEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTb2NrZXRNZXNzYWdlSGFuZGxlciB7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRvbk1lc3NhZ2VSZWNlaXZlZCAobWVzc2FnZTogYW55KTogYW55IHtcclxuXHRcdHN3aXRjaCAobWVzc2FnZS5ib2R5LmV2ZW50VHlwZSkge1xyXG5cdFx0XHRjYXNlICd1cGRhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVVwZGF0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnY3JlYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVDcmVhdGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2RlbGV0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlRGVsZXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdsaW5rVG8nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUxpbmtNb3ZlKC8qIG1lc3NhZ2UgKi8pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0TWVzc2FnZVZhbHVlcyAodmFsdWVzLCBjb2x1bW5zKTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBjb2x1bW5zKVxyXG5cdFx0XHRyZXN1bHRbY29sdW1uSWRdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW5zW2NvbHVtbklkXS50eXBlLCB2YWx1ZXNbY29sdW1uSWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvbk1hcCAoaXRlbVR5cGUsIGl0ZW1zLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IHtbaXRlbUlkOiBudW1iZXJdOiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHR9ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IGl0ZW1zW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW0ucGFyZW50ICE9PSBudWxsID8gaXRlbS5wYXJlbnQgOiB7fTtcclxuXHJcblx0XHRcdHJlc3VsdFtpdGVtSWRdID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Rml0dGluZ0l0ZW0oXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dGhpcy5mb3JtYXRNZXNzYWdlVmFsdWVzKGl0ZW0udmFsdWVzLCBjb2x1bW5zKSxcclxuXHRcdFx0XHRwYXJlbnRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z3JvdXBCeUNvbGxlY3Rpb25JZCAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1tzdGF0dXNdKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xyXG5cclxuXHRcdFx0XHRcdGlmIChyZXN1bHRbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXSA9IHtcclxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdGZpdHRpbmc6IFtdLFxyXG5cdFx0XHRcdFx0XHRcdG5vdGZpdHRpbmc6IFtdLFxyXG5cdFx0XHRcdFx0XHRcdG1heWJlOiBbXVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdW3N0YXR1c10ucHVzaChcclxuXHRcdFx0XHRcdFx0c3RhdHVzID09PSAnZml0dGluZycgPyB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpIDogaXRlbUlkXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZXF1ZXN0Q29sdW1ucyAoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0NvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuZml0dGluZztcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0NvbGxlY3Rpb24gb2YgZml0dGluZ0NvbGxlY3Rpb25zKVxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoZml0dGluZ0NvbGxlY3Rpb24uY29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcclxuXHR9XHJcblxyXG5cdGRlZmVyRW50cnkgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSBpdGVtRW50cnkuZGVmZXJyZWQ7XHJcblxyXG5cdFx0aWYgKGRlZmVycmVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXIoZmFsc2UpO1xyXG5cclxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlLnRoZW4oXHJcblx0XHRcdHRoaXMuZGVmZXJFbnRyeS5iaW5kKHRoaXMpLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTWVzc2FnZSAoYm9keSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBib2R5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbk1hcChpdGVtVHlwZSwgYm9keS5pdGVtc1tpdGVtVHlwZV0sIGJvZHkuY29sdW1uc1tpdGVtVHlwZV0pO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5zKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWRTdHJpbmcgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWRTdHJpbmcpO1xyXG5cdFx0XHRjb25zdCBpdGVtSWQgPSAraXRlbUlkU3RyaW5nO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGl0ZW1FbnRyeSkpO1xyXG5cdFx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtpdGVtSWRdLmZpdHRpbmcubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChcclxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCBmYWxzZSlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHJlcXVlc3RJZHMucHVzaChpdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApKTsgLy8gY29sbGVjdGlvbk1hcCBtaWdodCBjb250YWluICdtYXliZScgbWF0Y2hlc1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiByZXF1ZXN0SWRzfSwgcmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUgKGJvZHkpIHtcclxuXHRcdGNvbnN0IGl0ZW1zID0gYm9keS5pdGVtcy5GdW5jdGlvbkNoYW5nZXNSZXNvbHZlO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xyXG5cdFx0XHRjb25zdCBmdW5jdGlvbklkID0gaXRlbXNbaXRlbUlkXS5wYXJlbnQuaXRlbUlkO1xyXG5cdFx0XHRjb25zdCBmdW5jdGlvbkVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGZ1bmN0aW9uSWQpO1xyXG5cclxuXHRcdFx0aWYgKGZ1bmN0aW9uRW50cnkgPT09IHVuZGVmaW5lZCB8fCBmdW5jdGlvbkVudHJ5LmNvbHVtbnMucmVzcG9uc2UuRnVuY3RpZS5uZXdjaGFuZ2VzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoZnVuY3Rpb25FbnRyeSkpO1xyXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goZnVuY3Rpb25JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KCdGdW5jdGllJywge2lkOiByZXF1ZXN0SWRzfSwge0Z1bmN0aWU6IFsnbmV3Y2hhbmdlcyddfSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJZHMgPSByZXNwb25zZS5saW5rcy5GdW5jdGllO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXNwb25zZUlkcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT4gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldCgnRnVuY3RpZScsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdFx0XHRcdHt9LFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVzcG9uc2VWYWx1ZSA9IHJlc3BvbnNlLmZldGNoVmFsdWUoJ0Z1bmN0aWUnLCBpdGVtSWQsICduZXdjaGFuZ2VzJyk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlVmFsdWUgPT09IHByZXZpb3VzLm5ld2NoYW5nZXMpXHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdFx0LnNldEluaXRpYWwoe25ld2NoYW5nZXM6IHJlc3BvbnNlVmFsdWV9LCB0cnVlKVxyXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxyXG5cdFx0XHRcdFx0XHQucmVzb2x2ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVJlc3BvbnNlIChpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlcXVlc3RJZHMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gPEl0ZW1FbnRyeT4gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdFx0Y29uc3QgaXNOZXcgPSBpdGVtRW50cnkuaW5pdGlhbCA9PT0gdW5kZWZpbmVkO1xyXG5cdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcclxuXHJcblx0XHRcdFx0aWYgKGlzTmV3KVxyXG5cdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IGRlcml2ZWQgPSByZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSW5mby5yb290KTtcclxuXHJcblx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKGZpZWxkcywgZGVyaXZlZCwgY29sdW1uSW5mbyk7XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0XHRcdHt9LFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmIChleHBhbnNpb25SZXN1bHQgIT09IG51bGwpXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKGZpZWxkcywgZGVyaXZlZCwgZXhwYW5zaW9uUmVzdWx0KTtcclxuXHJcblx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHQuc2V0RGVyaXZlZChkZXJpdmVkKVxyXG5cdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMsIGZhbHNlKVxyXG5cdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdC5yZXNvbHZlKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNyZWF0ZSAobWVzc2FnZSkge1xyXG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcclxuXHJcblx0XHRpZiAoYm9keS5pdGVtVHlwZSA9PT0gJ0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUnKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZShib2R5KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShib2R5KS50aGVuKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5hZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlVXBkYXRlIChtZXNzYWdlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzTWVzc2FnZShtZXNzYWdlLmJvZHkpLnRoZW4oXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25NYXAsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRGVsZXRlIChtZXNzYWdlKSB7XHJcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGJvZHkuaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlDb250YWluaW5nSXRlbShib2R5Lml0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID0ge2NvbGxlY3Rpb246IGNvbGxlY3Rpb24sIGl0ZW1zOiBbXX07XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXS5pdGVtcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRtYXBFbnRyeS5jb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKG1hcEVudHJ5Lml0ZW1zLCBudWxsLCB0cnVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPIVxyXG5cdGhhbmRsZUxpbmtNb3ZlICgpIHt9XHJcblxyXG4vKlx0aGFuZGxlTGlua01vdmUgKG1lc3NhZ2UpIHtcclxuXHRcdHByb2Nlc3NNZXNzYWdlKFxyXG5cdFx0XHRtZXNzYWdlLFxyXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHQvLyBmaXRzIGluIHRoaXMgY29sbGVjdGlvbiwgdG9kbzogZ2V0IHRoZSBvbGQgY29sbGVjdGlvbiBpdCBiZWxvbmdlZCB0b1xyXG5cdFx0XHRcdGNvbGxlY3Rpb24ubW92ZUl0ZW1zKGl0ZW1FbnRyaWVzLCBudWxsLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gbWF5YmUgZml0c1xyXG5cdFx0XHRcdC8vIHRvZG86IGFsc28gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgb2xkIGNvbGxlY3Rpb25cclxuXHRcdFx0XHRjb2xsZWN0aW9uLmV4dGVuZChhbmd1bGFyLmlkZW50aXR5LCBmYWxzZSwgZmFsc2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaWRzKSB7XHJcblx0XHRcdFx0Ly8gbm90IGZpdHRpbmcgaW4gdGhpcyBjb2xsZWN0aW9uLCByZW1vdmUgaXQgP1xyXG5cdFx0XHRcdGNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMoaWRzLCBudWxsLCBtZXNzYWdlKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcbiovXHJcbn1cclxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlGb3JtYXR0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0FwaVJlcXVlc3RTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3Nvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3Nvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkNhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm8nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uVXRpbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUFkbWluaXN0cmF0b3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXF1ZXN0U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vS2V5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9ja1NlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Tb2NrZXRNZXNzYWdlSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vVXRpbCc7XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChyZXNwb25zZTogYW55KSB7XHJcblx0XHRyZXR1cm4gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yKHRoaXMuYXBpRm9ybWF0dGVyLCByZXNwb25zZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEJhdGNoU3RhdHVzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoU3RhdHVzRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1JZCwgZ2V0UHJvbWlzZTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBQcm9taXNlPEl0ZW1FbnRyeT4pOiBCYXRjaFN0YXR1cyB7XHJcblx0XHRyZXR1cm4gbmV3IEJhdGNoU3RhdHVzKFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHRnZXRJdGVtSWQsXHJcblx0XHRcdGdldFByb21pc2VcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSk6IENoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNDb21waWxhdGlvbihcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHRzaW5nbGVJdGVtcyxcclxuXHRcdFx0Y29sbGVjdGlvbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpRm9ybWF0dGVyLFxyXG5cdENoYW5nZXNQcm9jZXNzb3IsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRJdGVtSGFuZGxlclxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKTogQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0XHRyZXR1cm4gbmV3IENoYW5nZXNQcm9jZXNzb3IoXHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25DYWNoZShcclxuXHRcdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsIEl0ZW1FbnRyeVNlcnZpY2UsIEl0ZW1SZXF1ZXN0U2VydmljZSwgS2V5U2VydmljZSwgUXVlcnlTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zKTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVudHJ5KFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbk1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uTWF0Y2hlcihcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZXMsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRWRpdFJlc291cmNlLCBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVkaXRJdGVtcylcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0Q29sbGVjdGlvbikge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyA9IHRydWU7XHJcblxyXG5cdFx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25FZGl0UmVzb3VyY2UoXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IENvbGxlY3Rpb25WaWV3UmVzb3VyY2UodGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCByZXF1ZXN0Q29sdW1uczogYW55IHwgYm9vbGVhbiwgcmVzcG9uc2VDb2x1bW5zOiBhbnkpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkluZm8gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mb0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGNvbnN0cnVjdCAoYXBpQ29sdW1uOiBSZXNwb25zZUNvbHVtbiwgcGFyZW50OiBDb2x1bW5JbmZvKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkluZm8oYXBpQ29sdW1uLCBwYXJlbnQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5IYW5kbGVyLCBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblNldEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHByaXZhdGUgY29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5TZXQoXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxyXG5cdFx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCxcclxuXHRcdGVuYWJsZUNhY2hpbmc/LFxyXG5cdFx0aW5jbHVkZUlkQ29sdW1uP1xyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpLnJlc29sdmUocmVzcG9uc2VDb2x1bW5zLCBlbmFibGVDYWNoaW5nLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uSGFuZGxlciwgQ3JlYXRlUmVxdWVzdCwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVSZXF1ZXN0RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGNvbXBpbGF0aW9uLCBjb2xsZWN0aW9uRW50cmllcywgcGFyYW1ldGVyTWFwLCBicmVha3VwQnlQYXJlbnQ/KSB7XHJcblx0XHRyZXR1cm4gbmV3IENyZWF0ZVJlcXVlc3QoXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdGNvbXBpbGF0aW9uLFxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcclxuXHRcdFx0cGFyYW1ldGVyTWFwLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKTogSXRlbUNhY2hlIHtcclxuXHRcdHJldHVybiBuZXcgSXRlbUNhY2hlKHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgQ29sdW1uU2V0LCBJdGVtRW50cnlTZXJ2aWNlLCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBdXRoSW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uU2V0U3R1Yikge1xyXG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnkoXHJcblx0XHRcdHRoaXMucHJvbWlzZUludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5hdXRoSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdGNvbHVtblNldFN0dWJcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RMb2NhbExpbmtlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRsb2NhbEl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcclxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxyXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBjb2x1bW5TZXQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5wcm9jZXNzTG9jYWwoaW5pdGlhbCwge30sIHt9LCBjb252ZXJzaW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdExvY2FsIChcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0dGVtcGxhdGU6IGFueSxcclxuXHRcdG1vZGlmaWVkOiBGaWVsZE1hcCxcclxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsLFxyXG5cdFx0Y29udmVyc2lvbk1hcD8sXHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGVtcGxhdGUuY29sdW1ucy5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnZlcnNpb25NYXAgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsIC8vIGluaXRpYWwuaWQgKHdoZW4gaW5pdGlhbCBpcyBub3QgYSB0ZW1wbGF0ZSlcclxuXHRcdFx0dGVtcGxhdGUuY29sdW1ucyxcclxuXHRcdCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnByb2Nlc3NMb2NhbCh0ZW1wbGF0ZS5maWVsZHMsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdERlZmVycmVkIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuXHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeVN0dWIgPSB0aGlzLmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5U3R1Yi5kZWZlcihkZWZlclJlcXVlc3QpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnlTdHViO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXHJcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcclxuXHRcdGNvbHVtbkluZm86IENvbHVtblNldFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsIC8vIGluaXRpYWwuaWQgKHdoZW4gaW5pdGlhbCBpcyBub3QgYSB0ZW1wbGF0ZSlcclxuXHRcdFx0Y29sdW1uSW5mbyxcclxuXHRcdCkucHJvY2VzcyhcclxuXHRcdFx0aW5pdGlhbCwgLy8gY2FuIGFsc28gYmUgYSB0ZW1wbGF0ZVxyXG5cdFx0XHRkZXJpdmVkLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDaGFuZ2VzUHJvY2Vzc29yLCBJdGVtUmVzb3VyY2VTZXJ2aWNlLCBMb2NrU2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3I6IENoYW5nZXNQcm9jZXNzb3IsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnMpIHtcclxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdGlmIChvcHRpb25zLmVkaXQpIHtcclxuXHRcdFx0XHRyZXR1cm4gbmV3IEVkaXRSZXNvdXJjZShcclxuXHRcdFx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrU2VydmljZSxcclxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiBuZXcgVmlld1Jlc291cmNlKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogSXRlbVJlc291cmNlIHtcclxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZWRpdCkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEVkaXRSZXNvdXJjZShcclxuXHRcdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxyXG5cdFx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSwgb3B0aW9uc1xyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWaWV3UmVzb3VyY2UoXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcblx0SXRlbVJlc291cmNlU2VydmljZSxcblx0TG9jYWxDYWNoZSxcblx0TG9ja1NlcnZpY2Vcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblxuXHR9XG5cblx0Y29uc3RydWN0IChpZD86IHN0cmluZykge1xuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxuXHRcdFx0dGhpcy5sb2NrU2VydmljZSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxuXHRcdFx0aWRcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0IChyb290SXRlbTogSXRlbUVudHJ5LCBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUpIHtcclxuXHRcdHJldHVybiBuZXcgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uKHJvb3RJdGVtLCBzaW5nbGVJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciwgUXVlcnlNYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXJcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpOiBRdWVyeU1hdGNoZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBRdWVyeU1hdGNoZXIoXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRwYXJlbnRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5UGFyc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXJGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHF1ZXJ5LCBwYXJhbWV0ZXJzPyk6IFF1ZXJ5UGFyc2VyIHtcclxuXHRcdHJldHVybiBuZXcgUXVlcnlQYXJzZXIocXVlcnksIHBhcmFtZXRlcnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsLCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbihcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQmF0Y2hTdGF0dXNGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ3JlYXRlUmVxdWVzdEZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1DYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcnNlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5JztcclxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0QXBpUmVxdWVzdFNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdENvbHVtbkNhY2hlLFxyXG5cdENvbHVtbkhhbmRsZXIsXHJcblx0Q29sdW1uVXRpbCxcclxuXHRJdGVtQWRtaW5pc3RyYXRvcixcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEl0ZW1IYW5kbGVyLFxyXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2UsXHJcblx0TG9ja1NlcnZpY2UsXHJcblx0UXVlcnlTZXJ2aWNlLFxyXG5cdFNvY2tldE1lc3NhZ2VIYW5kbGVyXHJcbn0gZnJvbSAnLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnksXHJcblx0QmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q29sdW1uSW5mb0ZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRMb2NhbENhY2hlRmFjdG9yeSxcclxuXHRNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXHJcblx0UXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdEF1dGhJbnRlcmZhY2UsXHJcblx0RXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxyXG5cdFByb21pc2VJbnRlcmZhY2VcclxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XHJcblx0dmVyc2lvbjogc3RyaW5nO1xyXG5cdG5vb3AgPSBub29wO1xyXG5cclxuXHRhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcjtcclxuXHRrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlO1xyXG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xyXG5cdGNvbHVtblV0aWw6IENvbHVtblV0aWw7XHJcblxyXG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xyXG5cclxuXHRpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlO1xyXG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XHJcblxyXG5cdGl0ZW1BZG1pbmlzdHJhdG9yOiBJdGVtQWRtaW5pc3RyYXRvcjtcclxuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcclxuXHRjb2x1bW5DYWNoZTogQ29sdW1uQ2FjaGU7XHJcblx0Y29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcjtcclxuXHJcblx0aXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeTtcclxuXHRjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5O1xyXG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XHJcblx0Y29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk7XHJcblxyXG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcclxuXHRjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXI7XHJcblx0bG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlO1xyXG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XHJcblx0Y29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZTtcclxuXHRjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5O1xyXG5cclxuXHRxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5O1xyXG5cdGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3Rvcnk7XHJcblx0cmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xyXG5cdGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XHJcblx0Y2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5O1xyXG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XHJcblx0Y29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeTtcclxuXHRjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3Rvcnk7XHJcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xyXG5cdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3Rvcnk7XHJcblx0bG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5O1xyXG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XHJcblx0cXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3Rvcnk7XHJcblx0YmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3Rvcnk7XHJcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xyXG5cclxuXHRhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2U7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxyXG5cdFx0YXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdGVycm9ySGFuZGxlckludGVyZmFjZTogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdFx0dGhpcy52ZXJzaW9uID0gJzEuMS4xMSc7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XHJcblx0XHR0aGlzLmtleVNlcnZpY2UgPSBuZXcgS2V5U2VydmljZSgpO1xyXG5cdFx0dGhpcy5xdWVyeVNlcnZpY2UgPSBuZXcgUXVlcnlTZXJ2aWNlKCk7XHJcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xyXG5cclxuXHRcdHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XHJcblxyXG5cdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSA9IG5ldyBBcGlSZXF1ZXN0U2VydmljZShleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XHJcblxyXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5rZXlTZXJ2aWNlKTtcclxuXHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSA9IG5ldyBJdGVtUmVzb3VyY2VTZXJ2aWNlKCk7XHJcblxyXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XHJcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VJbnRlcmZhY2UpO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcclxuXHRcdHRoaXMuY29sdW1uSGFuZGxlciA9IG5ldyBDb2x1bW5IYW5kbGVyKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5ID0gbmV3IENvbHVtbkluZm9GYWN0b3J5KCk7XHJcblx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkgPSBuZXcgQ29sdW1uU2V0RmFjdG9yeSh0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uVXRpbCwgdGhpcy5jb2x1bW5JbmZvRmFjdG9yeSk7XHJcblx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XHJcblxyXG5cdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5ID0gbmV3IEl0ZW1FbnRyeUZhY3RvcnkoXHJcblx0XHRcdGF1dGhJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcih0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0KTtcclxuXHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlID0gbmV3IEl0ZW1SZXF1ZXN0U2VydmljZSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xyXG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UodGhpcy5xdWVyeVBhcnNlckZhY3RvcnksIHRoaXMucXVlcnlTZXJ2aWNlKTtcclxuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xyXG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSk7XHJcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkgPSBuZXcgSXRlbVJlc291cmNlRmFjdG9yeSh0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2VcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcclxuXHJcblx0XHR0aGlzLml0ZW1BZG1pbmlzdHJhdG9yID0gbmV3IEl0ZW1BZG1pbmlzdHJhdG9yKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnksXHJcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxyXG5cdFx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc29ja2V0TWVzc2FnZUhhbmRsZXIgPSBuZXcgU29ja2V0TWVzc2FnZUhhbmRsZXIocHJvbWlzZUludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBub29wICgpIHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5ICh2YWx1ZSkge1xyXG5cdHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL21haW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|