@rentman/rm-core 1.1.15-1 → 1.1.15
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/dist/dist/classes/KeyService.d.ts +1 -2
- package/dist/rm-core.js +9 -16
- package/dist/rm-core.min.js +1 -1
- package/package.json +35 -35
package/dist/rm-core.js
CHANGED
|
@@ -4328,17 +4328,20 @@ var KeyService_KeyService = /** @class */ (function () {
|
|
|
4328
4328
|
KeyService.prototype.getSingleKey = function (itemType, itemId) {
|
|
4329
4329
|
return itemType.concat(this.separator, String(itemId));
|
|
4330
4330
|
};
|
|
4331
|
+
KeyService.prototype.getCollectionCacheKey = function (parentType, parentId, childType) {
|
|
4332
|
+
return parentType.concat(this.separator, String(parentId), this.separator, childType);
|
|
4333
|
+
};
|
|
4331
4334
|
KeyService.prototype.getCssKey = function () {
|
|
4332
4335
|
return Array.prototype.join.call(arguments, '_');
|
|
4333
4336
|
};
|
|
4334
4337
|
KeyService.prototype.parseStateKey = function (stateKey) {
|
|
4335
4338
|
stateKey = stateKey.toString();
|
|
4336
|
-
if (
|
|
4339
|
+
if (stateKey.indexOf(constants["f" /* NEW_KEYWORD */]) === 0)
|
|
4337
4340
|
return {
|
|
4338
4341
|
type: 0 /* New */,
|
|
4339
4342
|
template: stateKey.substring(constants["f" /* NEW_KEYWORD */].length)
|
|
4340
4343
|
};
|
|
4341
|
-
if (
|
|
4344
|
+
if (stateKey.indexOf(constants["c" /* DUPLICATE_KEYWORD */]) === 0)
|
|
4342
4345
|
return {
|
|
4343
4346
|
type: 1 /* Duplicate */,
|
|
4344
4347
|
itemId: stateKey.substring(constants["c" /* DUPLICATE_KEYWORD */].length)
|
|
@@ -4351,16 +4354,6 @@ var KeyService_KeyService = /** @class */ (function () {
|
|
|
4351
4354
|
KeyService.prototype.getNewStateKey = function (templateType) {
|
|
4352
4355
|
return constants["f" /* NEW_KEYWORD */] + templateType;
|
|
4353
4356
|
};
|
|
4354
|
-
KeyService.prototype.isDuplicateStateKey = function (stateKey) {
|
|
4355
|
-
if (typeof stateKey === 'number')
|
|
4356
|
-
return false;
|
|
4357
|
-
return stateKey.substring(0, constants["c" /* DUPLICATE_KEYWORD */].length) === constants["c" /* DUPLICATE_KEYWORD */];
|
|
4358
|
-
};
|
|
4359
|
-
KeyService.prototype.isNewStateKey = function (stateKey) {
|
|
4360
|
-
if (typeof stateKey === 'number')
|
|
4361
|
-
return false;
|
|
4362
|
-
return stateKey.substring(0, constants["f" /* NEW_KEYWORD */].length) === constants["f" /* NEW_KEYWORD */];
|
|
4363
|
-
};
|
|
4364
4357
|
KeyService.prototype.getLocalId = function () {
|
|
4365
4358
|
return +(constants["g" /* NEW_PREFIX */] + this.getRandomString());
|
|
4366
4359
|
};
|
|
@@ -4376,10 +4369,10 @@ var KeyService_KeyService = /** @class */ (function () {
|
|
|
4376
4369
|
return itemId !== undefined && (this.isNewId(itemId) || this.isDuplicateId(itemId));
|
|
4377
4370
|
};
|
|
4378
4371
|
KeyService.prototype.isNewId = function (itemId) {
|
|
4379
|
-
return
|
|
4372
|
+
return itemId === constants["f" /* NEW_KEYWORD */] || ('' + itemId).substring(0, constants["g" /* NEW_PREFIX */].length) === constants["g" /* NEW_PREFIX */];
|
|
4380
4373
|
};
|
|
4381
4374
|
KeyService.prototype.isDuplicateId = function (itemId) {
|
|
4382
|
-
return
|
|
4375
|
+
return itemId === constants["c" /* DUPLICATE_KEYWORD */] || ('' + itemId).substring(0, constants["d" /* DUPLICATE_PREFIX */].length) === constants["d" /* DUPLICATE_PREFIX */];
|
|
4383
4376
|
};
|
|
4384
4377
|
return KeyService;
|
|
4385
4378
|
}());
|
|
@@ -7294,7 +7287,7 @@ var EditResource_EditResource = /** @class */ (function (_super) {
|
|
|
7294
7287
|
var RmCore = /** @class */ (function () {
|
|
7295
7288
|
function RmCore(externalApiRequestService, localCacheManager, authInterface, errorHandlerInterface, promiseInterface) {
|
|
7296
7289
|
this.noop = noop;
|
|
7297
|
-
this.version = '1.1.15
|
|
7290
|
+
this.version = '1.1.15';
|
|
7298
7291
|
this.apiFormatter = new _classes__WEBPACK_IMPORTED_MODULE_0__[/* ApiFormatter */ "a"]();
|
|
7299
7292
|
this.keyService = new _classes__WEBPACK_IMPORTED_MODULE_0__[/* KeyService */ "y"]();
|
|
7300
7293
|
this.queryService = new _classes__WEBPACK_IMPORTED_MODULE_0__[/* QueryService */ "E"]();
|
|
@@ -7364,4 +7357,4 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
7364
7357
|
/***/ })
|
|
7365
7358
|
/******/ ]);
|
|
7366
7359
|
});
|
|
7367
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1V0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQXBpRm9ybWF0dGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaVJlcXVlc3RTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaVJlc3BvbnNlUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0tleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9jYWxDYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NrU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlNYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5UGFyc2VyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1NvY2tldE1lc3NhZ2VIYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS9leHRlcm5hbCBcIm1vbWVudFwiIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQmF0Y2hTdGF0dXNGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkluZm9GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU2V0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5UGFyc2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbWFpbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBWSxZQU9YO0FBUEQsV0FBWSxZQUFZO0lBQ3ZCLGlDQUFpQjtJQUNqQixxQ0FBcUI7SUFDckIsaUNBQWlCO0lBQ2pCLG1EQUFtQztJQUNuQyxtQ0FBbUI7SUFDbkIsK0JBQWU7QUFDaEIsQ0FBQyxFQVBXLFlB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LElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLGtGQUErQixFQUFFLENBQUM7UUFFN0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksa0VBQWlCLENBQzdDLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsYUFBYSxFQUNiLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsd0JBQXdCLEVBQzdCLElBQUksQ0FBQyx5QkFBeUIsRUFDOUIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixxQkFBcUIsRUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixpQkFBaUIsRUFDakIsSUFBSSxDQUFDLCtCQUErQixFQUNwQyxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FDakIsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLHFFQUFvQixDQUFDLGdCQUFnQixFQUNwRSxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxDQUFDLDZCQUE2QixFQUNsQyxJQUFJLENBQUMsWUFBWSxFQUNqQixxQkFBcUIsQ0FDckIsQ0FBQztJQUNILENBQUM7SUFDRixhQUFDO0FBQUQsQ0FBQzs7QUFFSztBQUNOLENBQUM7QUFFSyxrQkFBb0IsS0FBSztJQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2QsQ0FBQzs7Ozs7Ozs7Ozs7O0FDcFNxQyIsImZpbGUiOiJybS1jb3JlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcIm1vbWVudFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJtQ29yZVwiXSA9IGZhY3Rvcnkocm9vdFtcIm1vbWVudFwiXSk7XG59KSh3aW5kb3csIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzNfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1KTtcbiIsImV4cG9ydCBlbnVtIEVOVFJZX1NUQVRVUyB7XHJcblx0Q0FDSEVEID0gJ2NhY2hlZCcsXHJcblx0UFJPTUlTRUQgPSAncHJvbWlzZWQnLFxyXG5cdEVYUEFORCA9ICdleHBhbmQnLFxyXG5cdFBST01JU0VEX0VYUEFORCA9ICdwcm9taXNlZC1leHBhbmQnLFxyXG5cdFJFU09MVkUgPSAncmVzb2x2ZScsXHJcblx0TE9DQUwgPSAnbG9jYWwnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBTExfUEVSTUlTU0lPTlMgPSAnNyc7XHJcblxyXG5leHBvcnQgY29uc3QgQ09MVU1OX1NFUEVSQVRPUiA9ICc+JztcclxuZXhwb3J0IGNvbnN0IFJFTkRFUl9BU19TRVBFUkFUT1IgPSAnOic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX1BSRUZJWDogc3RyaW5nID0gJy0xJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9QUkVGSVg6IHN0cmluZyA9ICctMic7XHJcblxyXG5leHBvcnQgY29uc3QgTkVXX0tFWVdPUkQ6IHN0cmluZyA9ICduZXctJztcclxuZXhwb3J0IGNvbnN0IERVUExJQ0FURV9LRVlXT1JEOiBzdHJpbmcgPSAnZHVwLSc7XHJcbiIsImV4cG9ydCBmdW5jdGlvbiBzaGFsbG93TWVyZ2UgKG9iamVjdCwgZGVmYXVsdHMpIHtcclxuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRyZXR1cm4gZGVmYXVsdHM7XHJcblxyXG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xyXG5cdFx0cmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XSA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0ZGVmYXVsdHNba2V5XSA6IG9iamVjdFtrZXldO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Byb3BlcnRpZXMgKG9iamVjdCkge1xyXG5cdC8vIEB0cy1pZ25vcmVcclxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3RQcm9wZXJ0eSAob2JqZWN0KSB7XHJcblx0aWYgKHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKVxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdClcclxuXHRcdHJldHVybiBrZXk7XHJcblxyXG5cdHJldHVybiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5BcnJheSAobmVlZGxlLCBoYXlzdGFjaykge1xyXG5cdGZvciAoY29uc3QgaGF5IG9mIGhheXN0YWNrKSB7XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0aWYgKG5lZWRsZSA9PSBoYXkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQXJyYXk8VD4gKHNvdXJjZTogVFtdLCBjYWxsYmFjazogKFQpID0+IGJvb2xlYW4pIHtcclxuXHRjb25zdCBmaWx0ZXJlZDogVFtdID0gW107XHJcblxyXG5cdGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZSkge1xyXG5cdFx0aWYgKGNhbGxiYWNrKHNyYykpXHJcblx0XHRcdGZpbHRlcmVkLnB1c2goc3JjKTtcclxuXHR9XHJcblxyXG5cdGlmIChmaWx0ZXJlZC5sZW5ndGggPT09IHNvdXJjZS5sZW5ndGgpXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdGVtcHR5QXJyYXkoc291cmNlKTtcclxuXHJcblx0Zm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVyZWQpXHJcblx0XHRzb3VyY2UucHVzaChmaWx0ZXIpO1xyXG5cclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QXJyYXkgKGFycmF5KSB7XHJcblx0YXJyYXkuc3BsaWNlKDApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGF0aEV4aXN0cyAoc291cmNlLCBwYXRoKSB7XHJcblx0aWYgKHR5cGVvZiBzb3VyY2UgPT09ICd1bmRlZmluZWQnKVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xyXG5cdFx0aWYgKHR5cGVvZiBzb3VyY2VbcF0gPT09ICd1bmRlZmluZWQnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0c291cmNlID0gc291cmNlW3BdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQYXRoIChvYmplY3QsIHBhdGgsIGRlZmF1bHRzKSB7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCB2YWx1ZSA9IHBhdGhbaV07XHJcblxyXG5cdFx0aWYgKG9iamVjdFt2YWx1ZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0b2JqZWN0W3ZhbHVlXSA9IGRlZmF1bHRzW2ldO1xyXG5cclxuXHRcdG9iamVjdCA9IG9iamVjdFt2YWx1ZV07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqZWN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGF0aCAob2JqZWN0LCBwYXRoLCBjcmVhdGUgPSBmYWxzZSkge1xyXG5cdGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdGZvciAoY29uc3QgcCBvZiBwYXRoKSB7XHJcblx0XHRvYmplY3QgPSBvYmplY3RbcF07IC8vIHdvbid0IGFsdGVyIHRoZSBjYWxsZXIncyB2YXJcclxuXHJcblx0XHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQgJiYgIWNyZWF0ZSlcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBvYmplY3Q7XHJcbn1cclxuXHJcbi8vIFRha2VuIGZyb20gQW5ndWxhckpTLCBhZGRlZCBjb21tZW50cyB0byBpZ25vcmUgVHlwZVNjcmlwdCBlcnJvcnNcclxuZnVuY3Rpb24gYmFzZUV4dGVuZCAoZHN0LCBvYmpzLCBkZWVwKSB7XHJcblx0Zm9yIChsZXQgaSA9IDAsIGlpID0gb2Jqcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XHJcblx0XHRjb25zdCBvYmogPSBvYmpzW2ldO1xyXG5cclxuXHRcdGlmICghaXNPYmplY3Qob2JqKSAmJiAhaXNGdW5jdGlvbihvYmopKVxyXG5cdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcclxuXHJcblx0XHRmb3IgKGxldCBqID0gMCwgamogPSBrZXlzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tqXTtcclxuXHRcdFx0Y29uc3Qgc3JjID0gb2JqW2tleV07XHJcblxyXG5cdFx0XHRpZiAoZGVlcCAmJiBpc09iamVjdChzcmMpKSB7XHJcblx0XHRcdFx0aWYgKGlzRGF0ZShzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IG5ldyBEYXRlKHNyYy52YWx1ZU9mKCkpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgUmVnRXhwKHNyYyk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChzcmMubm9kZU5hbWUpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gc3JjLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzRWxlbWVudChzcmMpKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZSgpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoIWlzT2JqZWN0KGRzdFtrZXldKSlcclxuXHRcdFx0XHRcdFx0ZHN0W2tleV0gPSBpc0FycmF5KHNyYykgPyBbXSA6IHt9O1xyXG5cclxuXHRcdFx0XHRcdGJhc2VFeHRlbmQoZHN0W2tleV0sIFtzcmNdLCB0cnVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZHN0W2tleV0gPSBzcmM7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiBkc3Q7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQgKGRzdCwgLi4uYXJncykge1xyXG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgZmFsc2UpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UgKGRzdCwgLi4uYXJncykge1xyXG5cdHJldHVybiBiYXNlRXh0ZW5kKGRzdCwgYXJncywgdHJ1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCAodmFsdWUpIHtcclxuXHQvLyBodHRwOi8vanNwZXJmLmNvbS9pc29iamVjdDRcclxuXHRyZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQmxhbmtPYmplY3QgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlICh2YWx1ZSkge1xyXG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdFeHAgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbiAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnQgKG5vZGUpIHtcclxuXHRyZXR1cm4gISEobm9kZSAmJlxyXG5cdFx0KFxyXG5cdFx0XHRub2RlLm5vZGVOYW1lICAvLyBXZSBhcmUgYSBkaXJlY3QgZWxlbWVudC5cclxuXHRcdFx0fHwgKG5vZGUucHJvcCAmJiBub2RlLmF0dHIgJiYgbm9kZS5maW5kKVxyXG5cdFx0KVxyXG5cdCk7ICAvLyBXZSBoYXZlIGFuIG9uIGFuZCBmaW5kIG1ldGhvZCBwYXJ0IG9mIGpRdWVyeSBBUEkuXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dpbmRvdyAob2JqKSB7XHJcblx0cmV0dXJuIG9iaiAmJiBvYmoud2luZG93ID09PSBvYmo7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMgKG8xLCBvMikge1xyXG5cdGlmIChvMSA9PT0gbzIpXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0aWYgKG8xID09PSBudWxsIHx8IG8yID09PSBudWxsKVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXHJcblx0aWYgKG8xICE9PSBvMSAmJiBvMiAhPT0gbzIpXHJcblx0XHRyZXR1cm4gdHJ1ZTsgLy8gTmFOID09PSBOYU5cclxuXHJcblx0Y29uc3QgdDEgPSB0eXBlb2YgbzE7XHJcblx0Y29uc3QgdDIgPSB0eXBlb2YgbzI7XHJcblxyXG5cdGxldCBsZW5ndGg7XHJcblx0bGV0IGtleTtcclxuXHRsZXQga2V5U2V0O1xyXG5cclxuXHRpZiAodDEgPT09IHQyICYmIHQxID09PSAnb2JqZWN0Jykge1xyXG5cdFx0aWYgKGlzQXJyYXkobzEpKSB7XHJcblx0XHRcdGlmICghaXNBcnJheShvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0bGVuZ3RoID0gbzEubGVuZ3RoO1xyXG5cclxuXHRcdFx0aWYgKG8xLmxlbmd0aCA9PT0gbzIubGVuZ3RoKSB7XHJcblx0XHRcdFx0Zm9yIChrZXkgPSAwOyBrZXkgPCBsZW5ndGg7IGtleSsrKSB7XHJcblx0XHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoaXNEYXRlKG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzRGF0ZShvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0cmV0dXJuIHNpbXBsZUNvbXBhcmUobzEuZ2V0VGltZSgpLCBvMi5nZXRUaW1lKCkpO1xyXG5cdFx0fSBlbHNlIGlmIChpc1JlZ0V4cChvMSkpIHtcclxuXHRcdFx0aWYgKCFpc1JlZ0V4cChvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0cmV0dXJuIG8xLnRvU3RyaW5nKCkgPT09IG8yLnRvU3RyaW5nKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoaXNXaW5kb3cobzEpIHx8IGlzV2luZG93KG8yKSB8fCBpc0FycmF5KG8yKSB8fCBpc0RhdGUobzIpIHx8IGlzUmVnRXhwKG8yKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRrZXlTZXQgPSBjcmVhdGVNYXAoKTtcclxuXHRcdFx0Zm9yIChrZXkgaW4gbzEpIHtcclxuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihvMVtrZXldKSlcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRpZiAoIWVxdWFscyhvMVtrZXldLCBvMltrZXldKSlcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdFx0a2V5U2V0W2tleV0gPSB0cnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGtleSBpbiBvMikge1xyXG5cdFx0XHRcdGlmICghKGtleSBpbiBrZXlTZXQpICYmIGlzRGVmaW5lZChvMltrZXldKSAmJiAhaXNGdW5jdGlvbihvMltrZXldKSlcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU1hcCAoKSB7XHJcblx0cmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbn1cclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcclxuZnVuY3Rpb24gc2ltcGxlQ29tcGFyZSAoYSwgYikge1xyXG5cdHJldHVybiBhID09PSBiIHx8IChhICE9PSBhICYmIGIgIT09IGIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1ZhbGlkT2JqZWN0TWF4RGVwdGggKG1heERlcHRoKSB7XHJcblx0cmV0dXJuIGlzTnVtYmVyKG1heERlcHRoKSAmJiBtYXhEZXB0aCA+IDA7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5IChzb3VyY2UsIGRlc3RpbmF0aW9uPywgbWF4RGVwdGg/KSB7XHJcblx0Y29uc3Qgc3RhY2tTb3VyY2UgPSBbXTtcclxuXHRjb25zdCBzdGFja0Rlc3QgPSBbXTtcclxuXHJcblx0bWF4RGVwdGggPSBpc1ZhbGlkT2JqZWN0TWF4RGVwdGgobWF4RGVwdGgpID8gbWF4RGVwdGggOiBOYU47XHJcblxyXG5cdGlmIChkZXN0aW5hdGlvbikge1xyXG5cdFx0aWYgKHNvdXJjZSA9PT0gZGVzdGluYXRpb24pIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIGlkZW50aWNhbC4nKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBFbXB0eSB0aGUgZGVzdGluYXRpb24gb2JqZWN0XHJcblx0XHRpZiAoaXNBcnJheShkZXN0aW5hdGlvbikpIHtcclxuXHRcdFx0ZGVzdGluYXRpb24ubGVuZ3RoID0gMDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGRlc3RpbmF0aW9uKVxyXG5cdFx0XHRcdGRlbGV0ZSBkZXN0aW5hdGlvbltrZXldO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrU291cmNlLnB1c2goc291cmNlKTtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrRGVzdC5wdXNoKGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRyZXR1cm4gY29weVJlY3Vyc2Uoc291cmNlLCBkZXN0aW5hdGlvbiwgbWF4RGVwdGgpO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGNvcHlFbGVtZW50KHNvdXJjZSwgbWF4RGVwdGgpO1xyXG5cclxuXHRmdW5jdGlvbiBjb3B5UmVjdXJzZSAoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpIHtcclxuXHRcdF9tYXhEZXB0aC0tO1xyXG5cclxuXHRcdGlmIChfbWF4RGVwdGggPCAwKVxyXG5cdFx0XHRyZXR1cm4gJy4uLic7XHJcblxyXG5cdFx0aWYgKGlzQXJyYXkoX3NvdXJjZSkpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGlpID0gX3NvdXJjZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XHJcblx0XHRcdFx0X2Rlc3RpbmF0aW9uLnB1c2goY29weUVsZW1lbnQoX3NvdXJjZVtpXSwgX21heERlcHRoKSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoaXNCbGFua09iamVjdChfc291cmNlKSkge1xyXG5cdFx0XHQvLyBjcmVhdGVNYXAoKSBmYXN0IHBhdGggLS0tIFNhZmUgdG8gYXZvaWQgaGFzT3duUHJvcGVydHkgY2hlY2sgYmVjYXVzZSBwcm90b3R5cGUgY2hhaW4gaXMgZW1wdHlcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xyXG5cdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKF9zb3VyY2UgJiYgdHlwZW9mIF9zb3VyY2UuaGFzT3duUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0Ly8gU2xvdyBwYXRoLCB3aGljaCBtdXN0IHJlbHkgb24gaGFzT3duUHJvcGVydHlcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xyXG5cdFx0XHRcdGlmIChfc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gU2xvd2VzdCBwYXRoIC0tLSBoYXNPd25Qcm9wZXJ0eSBjYW4ndCBiZSBjYWxsZWQgYXMgYSBtZXRob2RcclxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gX3NvdXJjZSkge1xyXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX3NvdXJjZSwga2V5KSkge1xyXG5cdFx0XHRcdFx0X2Rlc3RpbmF0aW9uW2tleV0gPSBjb3B5RWxlbWVudChfc291cmNlW2tleV0sIF9tYXhEZXB0aCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIF9kZXN0aW5hdGlvbjtcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGNvcHlFbGVtZW50IChfc291cmNlLCBfbWF4RGVwdGggPSA1KSB7XHJcblx0XHQvLyBTaW1wbGUgdmFsdWVzXHJcblx0XHRpZiAoIWlzT2JqZWN0KF9zb3VyY2UpKVxyXG5cdFx0XHRyZXR1cm4gX3NvdXJjZTtcclxuXHJcblx0XHQvLyBBbHJlYWR5IGNvcGllZCB2YWx1ZXNcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdGNvbnN0IGluZGV4ID0gc3RhY2tTb3VyY2UuaW5kZXhPZihfc291cmNlKTtcclxuXHJcblx0XHRpZiAoaW5kZXggIT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gc3RhY2tEZXN0W2luZGV4XTtcclxuXHJcblx0XHRpZiAoaXNXaW5kb3coX3NvdXJjZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGNvcHkhIE1ha2luZyBjb3BpZXMgb2YgV2luZG93IGluc3RhbmNlcyBpcyBub3Qgc3VwcG9ydGVkLicpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBuZWVkc1JlY3Vyc2UgPSBmYWxzZTtcclxuXHRcdGxldCBfZGVzdGluYXRpb24gPSBjb3B5VHlwZShfc291cmNlKTtcclxuXHJcblx0XHRpZiAoX2Rlc3RpbmF0aW9uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0X2Rlc3RpbmF0aW9uID0gaXNBcnJheShfc291cmNlKSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3NvdXJjZSkpO1xyXG5cdFx0XHRuZWVkc1JlY3Vyc2UgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdHN0YWNrU291cmNlLnB1c2goX3NvdXJjZSk7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja0Rlc3QucHVzaChfZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdHJldHVybiBuZWVkc1JlY3Vyc2VcclxuXHRcdFx0PyBjb3B5UmVjdXJzZShfc291cmNlLCBfZGVzdGluYXRpb24sIF9tYXhEZXB0aClcclxuXHRcdFx0OiBfZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb3B5VHlwZSAoX3NvdXJjZSkge1xyXG5cdFx0c3dpdGNoICh0b1N0cmluZy5jYWxsKF9zb3VyY2UpKSB7XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50OEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgSW50MTZBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDMyQXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDMyQXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBGbG9hdDY0QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50OEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MTZBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQzMkFycmF5XSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKGNvcHlFbGVtZW50KF9zb3VyY2UuYnVmZmVyKSwgX3NvdXJjZS5ieXRlT2Zmc2V0LCBfc291cmNlLmxlbmd0aCk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEFycmF5QnVmZmVyXSc6XHJcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMFxyXG5cdFx0XHRcdGlmICghX3NvdXJjZS5zbGljZSkge1xyXG5cdFx0XHRcdFx0Ly8gSWYgd2UncmUgaW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGVudmlyb25tZW50IHN1cHBvcnRzIEFycmF5QnVmZmVyXHJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xyXG5cdFx0XHRcdFx0Y29uc3QgY29waWVkID0gbmV3IEFycmF5QnVmZmVyKF9zb3VyY2UuYnl0ZUxlbmd0aCk7XHJcblx0XHRcdFx0XHRuZXcgVWludDhBcnJheShjb3BpZWQpLnNldChuZXcgVWludDhBcnJheShfc291cmNlKSk7XHJcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlICovXHJcblx0XHRcdFx0XHRyZXR1cm4gY29waWVkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gX3NvdXJjZS5zbGljZSgwKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IE51bWJlcl0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFN0cmluZ10nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IERhdGVdJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoX3NvdXJjZS52YWx1ZU9mKCkpO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBSZWdFeHBdJzpcclxuXHRcdFx0XHRjb25zdCByZSA9IG5ldyBSZWdFeHAoX3NvdXJjZS5fc291cmNlLCBfc291cmNlLnRvU3RyaW5nKCkubWF0Y2goL1teL10qJC8pWzBdKTtcclxuXHJcblx0XHRcdFx0cmUubGFzdEluZGV4ID0gX3NvdXJjZS5sYXN0SW5kZXg7XHJcblxyXG5cdFx0XHRcdHJldHVybiByZTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgQmxvYl0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3RvcihbX3NvdXJjZV0sIHt0eXBlOiBfc291cmNlLnR5cGV9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXNGdW5jdGlvbihfc291cmNlLmNsb25lTm9kZSkpIHtcclxuXHRcdFx0cmV0dXJuIF9zb3VyY2UuY2xvbmVOb2RlKHRydWUpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IGNvcHksIGVxdWFscyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpRm9ybWF0dGVyIHtcclxuXHRNT01FTlRfSU5WQUxJRCA9ICdJbnZhbGlkIGRhdGUnO1xyXG5cdFNFUlZFUl9EQVRFVElNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzWic7XHJcblx0U0VSVkVSX1RJTUVfRk9STUFUID0gJ0hIOm1tOnNzJztcclxuXHRTRVJWRVJfREFURV9GT1JNQVQgPSAnWVlZWS1NTS1ERCc7XHJcblxyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZSAoZmllbGRzLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGZpZWxkc1tjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBmaWVsZHNbY29sdW1uLnBhdGhdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlc3BvbnNlIChjdXJyZW50LCBleHBhbmRlZCwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjdXJyZW50W2NvbHVtbi5wYXRoXSA9IHRoaXMuZm9ybWF0UmVzcG9uc2VWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGV4cGFuZGVkW2NvbHVtbi5wYXRoXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0IChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuZm9ybWF0UmVxdWVzdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgbW9kaWZpZWRbY29sdW1uSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aGFzQ2hhbmdlcyAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGdldENoYW5nZXMgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IG9iamVjdFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHRcdFx0Y29uc3QgYXBpQ29sdW1uID0gY29sdW1uLmFwaUNvbHVtbjtcclxuXHJcblx0XHRcdGlmIChhcGlDb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAoIXRoaXMuY29tcGFyZUZpZWxkcyhhcGlDb2x1bW4udHlwZSwgaW5pdGlhbFtjb2x1bW5JZF0sIG1vZGlmaWVkW2NvbHVtbklkXSkpIHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaChcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0b2xkVmFsdWU6IGluaXRpYWxbY29sdW1uSWRdLFxyXG5cdFx0XHRcdFx0XHRuZXdWYWx1ZTogbW9kaWZpZWRbY29sdW1uSWRdLFxyXG5cdFx0XHRcdFx0XHRjb2x1bW46IGNvbHVtbi5hcGlDb2x1bW5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvcHlGaWVsZHMgKHNvdXJjZSwgZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xyXG5cclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSB0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgc291cmNlW2NvbHVtblBhdGhdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRzaGFsbG93Q29weUZpZWxkcyAoc2hhbGxvd1NvdXJjZSwgZGVlcFNvdXJjZSwgZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbi5wYXRoO1xyXG5cclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uUGF0aF0gPSBzaGFsbG93U291cmNlW2NvbHVtblBhdGhdICE9PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdHNoYWxsb3dTb3VyY2VbY29sdW1uUGF0aF0gOlxyXG5cdFx0XHRcdHRoaXMuY2xvbmUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBkZWVwU291cmNlW2NvbHVtblBhdGhdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRzZXREZWZhdWx0VmFsdWVzIChkZXN0aW5hdGlvbiwgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW4uaWRdID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRjb21wYXJlRmllbGRzIChjb2x1bW5UeXBlLCBmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHNlY29uZCA9PT0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGlmIChzZWNvbmQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlTW9tZW50T2JqZWN0cyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVEdXJhdGlvbnMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2lkJzogLy8gaWQgdHlwZXNcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09IHNlY29uZDsgLy8gdXNlIG5vbi1zdHJpY3QgY29tcGFyaXNvblxyXG5cdFx0XHRjYXNlICdjdXJyZW50JzpcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xyXG5cdFx0XHRjYXNlICdmaWxlc2l6ZSc6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmxvYXRzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2Jvb2wnOiAvLyBib29sZWFuIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICdlbWFpbCc6IC8vIHN0cmluZyB0eXBlc1xyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gZmlyc3QgPT09IHNlY29uZDtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZXF1YWxzKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29tcGFyZUZsb2F0cyAoYSwgYikge1xyXG5cdFx0Y29uc3QgYWJzQSA9IE1hdGguYWJzKGEpO1xyXG5cdFx0Y29uc3QgYWJzQiA9IE1hdGguYWJzKGIpO1xyXG5cdFx0Y29uc3QgZGlmZiA9IE1hdGguYWJzKGEgLSBiKTtcclxuXHJcblx0XHRjb25zdCBFUFNJTE9OID0gMS4xOWUtMDc7XHJcblxyXG5cdFx0Ly8gc2hvcnRjdXQsIGhhbmRsZXMgaW5maW5pdGllc1xyXG5cdFx0aWYgKGEgPT09IGIpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2UgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCB8fCBkaWZmIDwgTnVtYmVyLk1JTl9WQUxVRSkge1xyXG5cdFx0XHQvLyBhIG9yIGIgaXMgemVybyBvciBib3RoIGFyZSBleHRyZW1lbHkgY2xvc2UgdG8gaXRcclxuXHRcdFx0Ly8gcmVsYXRpdmUgZXJyb3IgaXMgbGVzcyBtZWFuaW5nZnVsIGhlcmVcclxuXHRcdFx0cmV0dXJuIGRpZmYgPCAoRVBTSUxPTiAqIE51bWJlci5NSU5fVkFMVUUpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gdXNlIHJlbGF0aXZlIGVycm9yXHJcblx0XHRcdHJldHVybiBkaWZmIC8gTWF0aC5taW4oKGFic0EgKyBhYnNCKSwgTnVtYmVyLk1BWF9WQUxVRSkgPCBFUFNJTE9OO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29tcGFyZU1vbWVudE9iamVjdHMgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGlmICghZmlyc3QuaXNWYWxpZCgpKVxyXG5cdFx0XHRyZXR1cm4gIXNlY29uZC5pc1ZhbGlkKCk7XHJcblxyXG5cdFx0aWYgKCFzZWNvbmQuaXNWYWxpZCgpKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIGZpcnN0IElTIHZhbGlkXHJcblxyXG5cdFx0cmV0dXJuIGZpcnN0LmlzU2FtZShzZWNvbmQpO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUR1cmF0aW9ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0cmV0dXJuIGZpcnN0LmFzTWlsbGlzZWNvbmRzKCkgPT09IHNlY29uZC5hc01pbGxpc2Vjb25kcygpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRGF0ZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUNvbG9yKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlc3BvbnNlRHVyYXRpb24odmFsdWUpO1xyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gMCA/IG51bGwgOiB2YWx1ZTtcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSAvIDEwMDAwMDA7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdFZhbHVlIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZVRpbWUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0RGF0ZSh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXF1ZXN0Q29sb3IodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdER1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VEYXRlICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gbW9tZW50LmludmFsaWQoKSA6IG1vbWVudCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZUR1cmF0aW9uICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSA9PT0gbnVsbCA/IDAgOiB2YWx1ZSwgJ3NlY29uZHMnKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlQ29sb3IgKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdmFsdWUuY2hhckF0KDApID09PSAnIycgPyB2YWx1ZSA6ICcjJyArIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdERhdGVUaW1lICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFVElNRV9GT1JNQVQpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REYXRlICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlLmZvcm1hdCh0aGlzLlNFUlZFUl9EQVRFX0ZPUk1BVCkgOiBudWxsO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdER1cmF0aW9uICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmFzU2Vjb25kcygpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdENvbG9yICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUuc3Vic3RyaW5nKDEpIDogdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRjYXNlICdkb3VibGUnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0Y2FzZSAnZW51bSc6XHJcblx0XHRcdFx0cmV0dXJuICcwJztcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5pbnZhbGlkKCk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKCk7XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuICcjMDAwMDAwJztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHRcdC8vIFx0XHRcdFx0XHRlbWFpbFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0dXJsXHJcblx0XHRcdC8vIFx0XHRcdFx0XHRodG1sXHJcblx0XHRcdC8vIFx0XHRcdFx0XHRqc29uXHJcblx0XHRcdC8vIFx0XHRcdFx0XHRkYXRhXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0RlZmF1bHRWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbXBhcmVGaWVsZHMoY29sdW1uVHlwZSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtblR5cGUpKTtcclxuXHR9XHJcblxyXG5cdGNsb25lIChjb2x1bW5UeXBlLCB2YWx1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW5UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZUR1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdFx0cmV0dXJuIGNvcHkodmFsdWUpO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENsb25lRnVuY3Rpb24gKGNvbHVtblR5cGUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbjtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jbG9uZURhdGU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaWRlbnRpdHk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbG9uZUR1cmF0aW9uIChkdXJhdGlvbikge1xyXG5cdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbihkdXJhdGlvbik7XHJcblx0fVxyXG5cclxuXHRjbG9uZURhdGUgKGRhdGUpIHtcclxuXHRcdHJldHVybiBkYXRlLmNsb25lKCk7XHJcblx0fVxyXG5cclxuXHRpZGVudGl0eSAoaW5wdXQpIHtcclxuXHRcdHJldHVybiBpbnB1dDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlSZXF1ZXN0U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5OiBBcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHR0ZW1wbGF0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBwYXJhbXM6IGFueSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UudGVtcGxhdGUoaXRlbVR5cGUsIHBhcmFtcykpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCB2YWx1ZXM6IGFueSwgcGFyZW50VHlwZT86IEl0ZW1UeXBlLCBwYXJlbnRJZD86IEl0ZW1JZCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKGl0ZW1UeXBlLCBpdGVtSWQsIHZhbHVlcywgcGFyZW50VHlwZSwgcGFyZW50SWQpKTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWRzOiBJdGVtSWRbXSk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UuZGVsZXRlKGl0ZW1UeXBlLCBpdGVtSWRzKSk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtcyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtczogb2JqZWN0LCBjb2x1bW5zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdFNrZWxldG9uIChwYXJhbXM6IGFueSwgcmVxdWVzdENhbmNlbGVyPzogUHJvbWlzZTxhbnk+KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zLCByZXF1ZXN0Q2FuY2VsZXIpKTtcclxuXHR9XHJcblxyXG5cdG1vdmVJdGVtcyAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1zOiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbXMpKTtcclxuXHR9XHJcblxyXG5cdGNvbHVtbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uczogb2JqZWN0LCBwYXJhbXM/OiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNvbHVtbnMoaXRlbVR5cGUsIGNvbHVtbnMsIHBhcmFtcykpO1xyXG5cdH1cclxuXHJcblx0cXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnk6IG9iamVjdCwgY29sdW1uczogb2JqZWN0LCBsaW1pdD86IG9iamVjdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zLCBsaW1pdCkpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc1Jlc3BvbnNlIChyZXF1ZXN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHJlcXVlc3QudGhlbihyZXNwb25zZSA9PiB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2UpKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1UeXBlTWFwLCBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBcGlSZXNwb25zZVByb2Nlc3NvciB7XHJcblx0Y29sdW1uczogSXRlbVR5cGVNYXA7XHJcblx0aXRlbXM6IEl0ZW1UeXBlTWFwO1xyXG5cdGxpbmtzOiBJdGVtVHlwZU1hcDtcclxuXHRjYWNoZWFibGU6IGJvb2xlYW47XHJcblx0bWFwOiBhbnk7XHJcblxyXG5cdGNvbHVtbkluZGV4TWFwOiBhbnkgPSB7fTtcclxuXHRjb2x1bW5NYXA6IGFueSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwdWJsaWMgcmVzcG9uc2U6IGFueVxyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gcmVzcG9uc2UuY29sdW1ucztcclxuXHRcdHRoaXMuaXRlbXMgPSByZXNwb25zZS5pdGVtcztcclxuXHRcdHRoaXMubGlua3MgPSByZXNwb25zZS5saW5rcztcclxuXHRcdHRoaXMuY2FjaGVhYmxlID0gcmVzcG9uc2UuY2FjaGVhYmxlO1xyXG5cdFx0dGhpcy5tYXAgPSByZXNwb25zZS5tYXA7XHJcblxyXG5cdFx0dGhpcy5jcmVhdGVDb2x1bW5NYXBzKCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2x1bW5NYXBzICgpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uVHlwZSBpbiB0aGlzLmNvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXSA9IHt9O1xyXG5cdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV0ubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbY29sdW1uVHlwZV1baV07XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5JbmRleE1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gaTtcclxuXHRcdFx0XHR0aGlzLmNvbHVtbk1hcFtjb2x1bW5UeXBlXVtjb2x1bW4uaWRdID0gY29sdW1uO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmZXRjaFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JZCkge1xyXG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhW3RoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXV07XHJcblx0fVxyXG5cclxuXHRmZXRjaERlcml2ZWRPYmplY3QgKGl0ZW1UeXBlLCBpdGVtSWQsIHJvb3RDb2x1bW5zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xyXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhcclxuXHRcdFx0XHR0aGlzLmZldGNoVmFsdWUoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uLmlkKSxcclxuXHRcdFx0XHRjb2x1bW4sXHJcblx0XHRcdFx0cmVzdWx0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoRGVyaXZlZFZhbHVlcyAodmFsdWUsIGNvbHVtbiwgZGVzdGluYXRpb24pIHtcclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGxldCBjaGlsZFZhbHVlO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XHJcblx0XHRcdFx0Y2hpbGRWYWx1ZSA9IG51bGw7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY2hpbGRDb2x1bW4ucGF0aF0gPSB0aGlzLmFwaUZvcm1hdHRlci5nZXREZWZhdWx0VmFsdWUoY2hpbGRDb2x1bW4uYXBpQ29sdW1uLnR5cGUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNoaWxkVmFsdWUgPSB0aGlzLmZldGNoVmFsdWUoY29sdW1uLml0ZW1UeXBlLCB2YWx1ZSwgY2hpbGRDb2x1bW4uaWQpO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gY2hpbGRWYWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNoaWxkQ29sdW1uLmlzTGVhZilcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuZmV0Y2hEZXJpdmVkVmFsdWVzKGNoaWxkVmFsdWUsIGNoaWxkQ29sdW1uLCBkZXN0aW5hdGlvbik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmZXRjaE9iamVjdCAoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG5cdFx0aWYgKHRoaXMuaXRlbXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0aWYgKGl0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRjb25zdCBkYXRhID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5kYXRhO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0cmVzdWx0W3RoaXMuY29sdW1uc1tpdGVtVHlwZV1baV0uaWRdID0gZGF0YVtpXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5jbHVkZUxpbmtzKSB7XHJcblx0XHRcdGNvbnN0IGxpbmtzID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baXRlbUlkXS5saW5rcztcclxuXHRcdFx0cmVzdWx0Ll9fbGlua3MgPSB7fTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgbGlua1R5cGUgaW4gbGlua3MpXHJcblx0XHRcdFx0cmVzdWx0Ll9fbGlua3NbbGlua1R5cGVdID1cclxuXHRcdFx0XHRcdHRoaXMuZmV0Y2hPYmplY3RBcnJheShsaW5rVHlwZSwgaW5jbHVkZUxpbmtzLCBsaW5rc1tsaW5rVHlwZV0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaE9iamVjdEFycmF5IChpdGVtVHlwZSwgaW5jbHVkZUxpbmtzLCBpZEFycmF5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IGFueSA9IFtdO1xyXG5cclxuXHRcdGlmIChpZEFycmF5ID09PSBudWxsKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaW5jbHVkZUxpbmtzKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChpZEFycmF5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGlkQXJyYXkgPSB0aGlzLmxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpZEFycmF5KVxyXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaE9iamVjdE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkLCBpbmNsdWRlTGlua3MsIHJldHVybktleXMpIHtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5jb2x1bW5JbmRleE1hcFtpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xyXG5cdFx0Y29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2lkXS5kYXRhW2NvbHVtbkluZGV4XTtcclxuXHRcdFx0a2V5cy5wdXNoKGtleSk7XHJcblx0XHRcdHJlc3VsdFtrZXldID0gdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQsIGluY2x1ZGVMaW5rcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJldHVybktleXMpXHJcblx0XHRcdHJldHVybiB7cmVzdWx0OiByZXN1bHQsIGtleXM6IGtleXN9O1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hGaWVsZE1hcCAoaXRlbVR5cGUsIGNvbHVtbklkKSB7XHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy5pdGVtc1tpdGVtVHlwZV0pXHJcblx0XHRcdHJlc3VsdFtpZF0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtpbmRleF07XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoQ29sdW1uQXJyYXkgKGl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IFJlc3BvbnNlQ29sdW1uW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGFwaUNvbHVtbiBvZiB0aGlzLmNvbHVtbnNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXN1bHQucHVzaChhcGlDb2x1bW4pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbk9iamVjdCAoaXRlbVR5cGUpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcFtpdGVtVHlwZV07XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbnNPYmplY3QgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1uTWFwO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlUmVzb3VyY2UgKGl0ZW1UeXBlLCBpZCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0b2JqZWN0OiB0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpZCksXHJcblx0XHRcdGxpbmtzOiB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0ubGlua3NcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRoYXNJdGVtcyAoaXRlbVR5cGUpIHtcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRJZEFycmF5IChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVN0YXR1cywgSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAsIEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1cyB7XHJcblx0ZW50cmllczogSXRlbUVudHJ5RW50cnlTdGF0dXNNYXAgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gSXRlbUlkLFxyXG5cdFx0cHVibGljIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+IC8vIHRvZG86IHByb21pc2UgcmV0dXJuIHR5cGVcclxuXHQpIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIEVOVFJZX1NUQVRVUylcclxuXHRcdFx0dGhpcy5lbnRyaWVzW0VOVFJZX1NUQVRVU1tzdGF0dXNdXSA9IFtdO1xyXG5cdH1cclxuXHJcblx0YWRkIChlbnRyeVN0YXR1czogRW50cnlTdGF0dXM8SXRlbUVudHJ5Pik6IHZvaWQge1xyXG5cdFx0Y29uc3Qgc3RhdHVzID0gZW50cnlTdGF0dXMuc3RhdHVzO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbc3RhdHVzXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbc3RhdHVzXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuZW50cmllc1tzdGF0dXNdLnB1c2goZW50cnlTdGF0dXMuZW50cnkpO1xyXG5cdH1cclxuXHJcblx0aGFzRW50cmllcyAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdKTogYm9vbGVhbiB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xyXG5cdFx0XHRpZiAodGhpcy5lbnRyaWVzW3N0YXR1c10ubGVuZ3RoID4gMClcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRoYXNSZXF1ZXN0cyAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuUkVTT0xWRSwgRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0pO1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaEVudHJ5IChzdGF0dXNBcnJheTogRU5UUllfU1RBVFVTW10sIGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIG9mIHN0YXR1c0FycmF5KSB7XHJcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcclxuXHRcdFx0XHRjYWxsYmFjayhzdGF0dXNFbnRyeSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRQcm9taXNlcyAoKTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IEFycmF5PFByb21pc2U8SXRlbUVudHJ5Pj4gPSBbXTtcclxuXHJcblx0XHR0aGlzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0W0VOVFJZX1NUQVRVUy5QUk9NSVNFRCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0sXHJcblx0XHRcdGVudHJ5ID0+IHtcclxuXHRcdFx0XHRwcm9taXNlcy5wdXNoKHRoaXMuZ2V0UHJvbWlzZShlbnRyeSkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChwcm9taXNlcyk7XHJcblx0fVxyXG5cclxuXHRnZXRSZXF1ZXN0SWRzICgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHR0aGlzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0W0VOVFJZX1NUQVRVUy5SRVNPTFZFLCBFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXSxcclxuXHRcdFx0ZW50cnkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuZ2V0SXRlbUlkKGVudHJ5KSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEFycmF5ICgpOiBJdGVtRW50cnlbXSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IHN0YXR1c0VudHJpZXMgPSB0aGlzLmVudHJpZXNbc3RhdHVzXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzRW50cnkgb2Ygc3RhdHVzRW50cmllcylcclxuXHRcdFx0XHRyZXN1bHQucHVzaChzdGF0dXNFbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IEVudHJ5UGFyZW50IH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZXNDb21waWxhdGlvbiB7XG5cdGNvbXBpbGF0aW9uID0ge1xuXHRcdGNyZWF0ZToge30sXG5cdFx0ZGVsZXRlOiB7fSxcblx0XHR1cGRhdGU6IHt9LFxuXHRcdG1vdmU6IHt9XG5cdH07XG5cblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcblxuXHRwcml2YXRlIG1vdmVBcnJheTogSXRlbUVudHJ5W10gPSBbXTtcblx0cHJpdmF0ZSBkZWxldGVNYXAgPSB7fTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdHB1YmxpYyBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXG5cdFx0Y29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVtdXG5cdCkge1xuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHR0aGlzLnByb2Nlc3NTaW5nbGVJdGVtcygpO1xuXHRcdHRoaXMucHJvY2Vzc0NvbGxlY3Rpb25zKGNvbGxlY3Rpb25FbnRyaWVzKTtcblx0XHR0aGlzLnBvc3RQcm9jZXNzKCk7XG5cdH1cblxuXHRnZXREZWZhdWx0UGFyZW50ICgpOiBFbnRyeVBhcmVudCB7XG5cdFx0cmV0dXJuIHtpdGVtVHlwZTogJ1ZvaWQnLCBpdGVtSWQ6IDB9O1xuXHR9XG5cblx0YWRkTW92ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHR0aGlzLm1vdmVBcnJheS5wdXNoKGl0ZW1FbnRyeSk7XG5cdH1cblxuXHRhZGREZWxldGVFbnRyeSAoaXRlbUVudHJ5LCBwYXJlbnRJZCwgcGFyZW50VHlwZSkge1xuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmRlbGV0ZU1hcCxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCB7cGFyZW50SWQ6IHBhcmVudElkLCBpdGVtOiBpdGVtRW50cnksIHBhcmVudFR5cGU6IHBhcmVudFR5cGV9XVxuXHRcdCk7XG5cdH1cblxuXHRhZGRVcGRhdGVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuY29tcGlsYXRpb24udXBkYXRlLFxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIGl0ZW1FbnRyeV1cblx0XHQpO1xuXHR9XG5cblx0YWRkQ3JlYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdGxldCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcblx0XHRcdHBhcmVudCA9IHRoaXMuZ2V0RGVmYXVsdFBhcmVudCgpO1xuXG5cdFx0Y3JlYXRlUGF0aChcblx0XHRcdHRoaXMuY29tcGlsYXRpb24uY3JlYXRlLFxuXHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCwgaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwge30sIHt9LCBpdGVtRW50cnldXG5cdFx0KTtcblx0fVxuXG5cdHBvc3RQcm9jZXNzICgpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLm1vdmVBcnJheSkge1xuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcblx0XHRcdGNvbnN0IGRlbGV0ZUVudHJ5ID0gdGhpcy5kZWxldGVNYXBbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcblxuXHRcdFx0aWYgKGRlbGV0ZUVudHJ5ID09PSB1bmRlZmluZWQgfHwgZGVsZXRlRW50cnlbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Ly8gYXNzdW1lIHRoZSBpdGVtRW50cnkgaGFzIGEgcGFyZW50IChvciBzb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3JvbmcpXG5cdFx0XHRjb25zdCBwYXJlbnQgPSA8RW50cnlQYXJlbnQ+IGl0ZW1FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gY3JlYXRlUGF0aChcblx0XHRcdFx0dGhpcy5jb21waWxhdGlvbi5tb3ZlLFxuXHRcdFx0XHRbcGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkXSxcblx0XHRcdFx0W3t9LCBbXV1cblx0XHRcdCk7XG5cblx0XHRcdGRlc3RpbmF0aW9uLnB1c2goZGVsZXRlRW50cnlbaXRlbUlkXSk7XG5cblx0XHRcdGRlbGV0ZSBkZWxldGVFbnRyeVtpdGVtSWRdO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5kZWxldGVNYXApIHtcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXSkge1xuXHRcdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdLml0ZW07XG5cdFx0XHRcdGNvbnN0IGRlc3RpbmF0aW9uID0gdGhpcy5jb21waWxhdGlvbi5kZWxldGU7XG5cblx0XHRcdFx0aWYgKGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzU2luZ2xlSXRlbXMgKCkge1xuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHRoaXMuc2luZ2xlSXRlbXMpIHtcblx0XHRcdGlmIChpdGVtRW50cnkuaXNMb2NhbCgpKVxuXHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0XHRlbHNlIGlmIChpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxuXHRcdFx0XHR0aGlzLmFkZFVwZGF0ZUVudHJ5KGl0ZW1FbnRyeSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcblx0XHRcdHRoaXMuY29sbGVjdGlvbnMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Ly8gYWRkIHRoZSBjb2xsZWN0aW9uIHBhcmVudCBpZCB0byB0aGUgZGVsZXRlIGVudHJ5IChpbiBjYXNlIHRoZSBpdGVtIGhhcyBiZWVuIG1vdmVkKVxuXHRcdFx0bGV0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XG5cblx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRcdHBhcmVudCA9IHRoaXMuZ2V0RGVmYXVsdFBhcmVudCgpO1xuXG5cdFx0XHRsZXQgYWRkZWRJdGVtcztcblx0XHRcdGxldCByZW1vdmVkSXRlbXM7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpKSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuaXRlbXM7XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IFtdO1xuXHRcdFx0fSBlbHNlIGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcykge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldEFkZGVkSXRlbXMoKTtcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFJlbW92ZWRJdGVtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IFtdO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW0gb2YgYWRkZWRJdGVtcykgeyAvLyBpdCBpcyBwb3NzaWJsZSB0byBtb3ZlIGFuIGV4aXN0aW5nIGl0ZW0gdG8gYSBuZXcgY29sbGVjdGlvblxuXHRcdFx0XHRpZiAoYWRkZWRJdGVtLmlzTG9jYWwoKSlcblx0XHRcdFx0XHR0aGlzLmFkZENyZWF0ZUVudHJ5KGFkZGVkSXRlbSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0aGlzLmFkZE1vdmVFbnRyeShhZGRlZEl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtIG9mIHJlbW92ZWRJdGVtcylcblx0XHRcdFx0dGhpcy5hZGREZWxldGVFbnRyeShyZW1vdmVkSXRlbSwgcGFyZW50Lml0ZW1JZCwgcGFyZW50Lml0ZW1UeXBlKTtcblxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcykge1xuXHRcdFx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1zKCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCB1cGRhdGVkSXRlbSBvZiB1cGRhdGVkSXRlbXMpXG5cdFx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeSh1cGRhdGVkSXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRDb2x1bW5JbmZvLFxyXG5cdEl0ZW1IYW5kbGVyXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLCBFbnRyeVBhcmVudCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCwgZ2V0UGF0aCwgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGVzZSBvbmNlIHRoZSBkb2N1bWVudCBjcmVhdGlvbiBoYXMgYmVlbiB1cGRhdGVkXHJcblx0Z2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eSAoaXRlbVR5cGUpIHtcclxuXHRcdHN3aXRjaCAoaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsYmVkcmFnJzpcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cnJlZ2VsJzpcclxuXHRcdFx0Y2FzZSAnTWluZmFjdHV1cic6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0RvY3VtZW50SXRlbVR5cGUgKGl0ZW1UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0Jvbic6XHJcblx0XHRcdGNhc2UgJ09mZmVydGUnOlxyXG5cdFx0XHRjYXNlICdDb250cmFjdCc6XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWxib24nOlxyXG5cdFx0XHRjYXNlICdDb250YWN0Ym9uJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVyYm9uJzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcmJvbic6XHJcblx0XHRcdGNhc2UgJ1JlcGFyYXRpZWJvbic6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnYm9uJzpcclxuXHRcdFx0Y2FzZSAnQWFubWFuaW5nJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRpc0RvY3VtZW50VXBkYXRlIChjb21waWxhdGlvbikge1xyXG5cdFx0Y29uc3QgdXBkYXRlQ29tcGlsYXRpb24gPSBjb21waWxhdGlvbi51cGRhdGU7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB1cGRhdGVDb21waWxhdGlvbikge1xyXG5cdFx0XHRpZiAodGhpcy5pc0RvY3VtZW50SXRlbVR5cGUoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGJ1aWxkTW92ZVJlcXVlc3QgKGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5Lml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldE1hcFZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcclxuXHRcdGlmIChtYXAgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyAoXHJcblx0XHRjaGFuZ2VzQ29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcclxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXHJcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcclxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXHJcblx0KSB7XHJcblx0XHRjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb24uY3JlYXRlLFxyXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24uY29sbGVjdGlvbnMsXHJcblx0XHRcdHBhcmFtZXRlcnMsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxyXG5cdFx0KS5ydW4oKTtcclxuXHRcdGNvbnN0IHJlc3BvbnNlczogQXJyYXk8UHJvbWlzZTxhbnk+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cylcclxuXHRcdFx0cmVzcG9uc2VzLnB1c2godGhpcy5leGVjdXRlQ3JlYXRlUmVxdWVzdChyZXF1ZXN0LCBjb252ZXJzaW9uTWFwKS50aGVuKG5vdGlmeSkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXNwb25zZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cclxuXHRcdGZ1bmN0aW9uIG5vdGlmeSAocmVzdWx0KSB7XHJcblx0XHRcdGlmIChvbkFmdGVyQ3JlYXRlQ2FsbGJhY2sgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2soY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdCAocmVxdWVzdFJlc291cmNlLCBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocmVxdWVzdFJlc291cmNlLnJlcXVlc3QpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZU1hcCA9IHJlc3BvbnNlLm1hcDtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5pdGVtcztcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0LmNvbHVtbnNbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtSWQgPSB0aGlzLmdldE1hcFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIHJlc3BvbnNlTWFwKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignQ3JlYXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgbmV3SXRlbUlkKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZXhwYW5kUmVzb3VyY2UgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQgPSBuZXdJdGVtSWQ7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVGaWVsZHMoZmllbGRzKTtcclxuXHJcblx0XHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0XHRcdFx0XHRcdGV4cGFuZFJlc291cmNlXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmVxdWVzdFJlc291cmNlLmNvbGxlY3Rpb25zLmFkZFRvQ29sbGVjdGlvbnMoKTtcclxuXHJcblx0XHRcdFx0Ly8gZXh0ZW5kIGNvbnZlcnNpb24gbWFwXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZU1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gcmVzcG9uc2VNYXBbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVtpdGVtSWRdID0gcmVzcG9uc2VNYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IHByaW9yaXRpemVkSXRlbVR5cGVzOiBzdHJpbmdbXVtdID0gW1tdLCBbXSwgW11dO1xyXG5cdFx0bGV0IHJlcXVlc3RDaGFpbiA9IHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pXHJcblx0XHRcdHByaW9yaXRpemVkSXRlbVR5cGVzW3RoaXMuZ2V0SXRlbVR5cGVVcGRhdGVQcmlvcml0eShpdGVtVHlwZSldLnB1c2goaXRlbVR5cGUpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGVzIG9mIHByaW9yaXRpemVkSXRlbVR5cGVzKSB7XHJcblx0XHRcdGlmIChpdGVtVHlwZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0cmVxdWVzdENoYWluID0gcmVxdWVzdENoYWluLnRoZW4oXHJcblx0XHRcdFx0dGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdHMoaXRlbVR5cGVzLCBjb21waWxhdGlvbiwgcGFyYW1ldGVycyksXHJcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3RDaGFpbjtcclxuXHR9XHJcblxyXG5cdC8vIGNvbnN0cnVjdCBhIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0cHJpdmF0ZSBleGVjdXRlVXBkYXRlUmVxdWVzdHMgKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpIHtcclxuXHRcdHJldHVybiAoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgb2YgaXRlbVR5cGVzKVxyXG5cdFx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlVXBkYXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdLCBwYXJhbWV0ZXJzKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllcywgcGFyYW1ldGVyTWFwKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0ge307XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcclxuXHJcblx0XHRyZXF1ZXN0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdC8vIHdlIG5lZWQgdG8gZG8gdGhlIGZvcm1hdFJlcXVlc3QgY2FsbCBoZXJlIChmaWVsZHMgbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQpXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtSWRdO1xyXG5cdFx0XHQvLyBSTUNvcmUgdG9kbzogdHlwZVxyXG5cdFx0XHRjb25zdCBpdGVtUmVxdWVzdDogYW55ID0gcmVxdWVzdFtpdGVtVHlwZV1baXRlbUlkXSA9IHt9O1xyXG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aChwYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRpdGVtUmVxdWVzdC52YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyA9IGNvbGxlY3Rpb25NYXRjaGVyLmdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMpXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLmV4cGFuZChjb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnVwZGF0ZUl0ZW1zKGl0ZW1UeXBlLCByZXF1ZXN0LCByZXF1ZXN0Q29sdW1ucy5nZXQoKSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLmdldCgpLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChmaWVsZHMgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ1VwZGF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5pbml0aWFsLCB7fSwgaXRlbUVudHJ5LmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXREZXJpdmVkKHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpdGVtRW50cnkuY29sdW1ucy5yb290KSlcclxuXHRcdFx0XHRcdFx0LnVwZGF0ZUZpZWxkcyhmaWVsZHMpXHJcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGV4cGFuZFJlc291cmNlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMsXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbmRSZXNvdXJjZS5kaWZmZXJlbmNlLnJvb3QpLFxyXG5cdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3RzIChjb21waWxhdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29tcGlsYXRpb24pIC8vIGNsZWFyaW5nIG5vdCBuZWNlc3NhcnlcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh0aGlzLmV4ZWN1dGVEZWxldGVSZXF1ZXN0KGl0ZW1UeXBlLCBjb21waWxhdGlvbltpdGVtVHlwZV0pKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVxdWVzdHMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlRGVsZXRlUmVxdWVzdCAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xyXG5cdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aWRBcnJheS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaWRBcnJheSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRBcnJheSA9IHJlc3BvbnNlLml0ZW1zO1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5nZXRDb2xsZWN0aW9uTWF0Y2hlcigpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0aWYgKCFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIHJlc3BvbnNlSWRBcnJheSkpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybignRGVsZXRlIGZhaWxlZCEnLCBpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZU1vdmVSZXF1ZXN0cyAoY29tcGlsYXRpb24sIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cdFx0Y29uc3QgcmVxdWVzdHM6IEFycmF5PFByb21pc2U8QXBpUmVzcG9uc2U+PiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb21waWxhdGlvbikge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbXBpbGF0aW9uW3BhcmVudFR5cGVdKVxyXG5cdFx0XHRcdGV4ZWN1dGVNb3ZlUmVxdWVzdChwYXJlbnRUeXBlLCBwYXJlbnRJZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHJcblx0XHRmdW5jdGlvbiBleGVjdXRlTW92ZVJlcXVlc3QgKHBhcmVudFR5cGUsIHBhcmVudElkKSB7XHJcblx0XHRcdC8vIG9ubHkgdGhlIHBhcmVudCBpZCBjb3VsZCBoYXZlIGJlZW4gdXBkYXRlZFxyXG5cdFx0XHRjb25zdCBjb21waWxhdGlvbkVudHJpZXMgPSBjb21waWxhdGlvbltwYXJlbnRUeXBlXVtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gc2VsZi5nZXRNYXBWYWx1ZShwYXJlbnRUeXBlLCBwYXJlbnRJZCwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0cy5wdXNoKFxyXG5cdFx0XHRcdHNlbGYuYXBpUmVxdWVzdFNlcnZpY2UubW92ZUl0ZW1zKFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQgPyBuZXdQYXJlbnRJZCA6IHBhcmVudElkLFxyXG5cdFx0XHRcdFx0c2VsZi5idWlsZE1vdmVSZXF1ZXN0KGNvbXBpbGF0aW9uRW50cmllcylcclxuXHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHNlbGYucHJvY2Vzc01vdmVSZXNwb25zZSgvKiByZXNwb25zZSwgKi9jb21waWxhdGlvbkVudHJpZXMpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHNlbGYuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc01vdmVSZXNwb25zZSAoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKSB7XHJcblx0XHQvLyBUT0RPOiBwcm9jZXNzIHJlc3BvbnNlXHJcblxyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZW1vdmVDb2xsZWN0aW9uTWFwID0ge307XHJcblx0XHRjb25zdCBhZGRDb2xsZWN0aW9uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb21waWxhdGlvbkVudHJ5IG9mIGNvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnk6IEl0ZW1FbnRyeSA9IGNvbXBpbGF0aW9uRW50cnkuaXRlbTtcclxuXHJcblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxyXG5cdFx0XHRcdHJlbW92ZUNvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFx0Y29tcGlsYXRpb25FbnRyeS5wYXJlbnRJZCxcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0aXRlbUVudHJ5Lml0ZW1JZFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5hZGRDb2xsZWN0aW9uTWFwRW50cnkoXHJcblx0XHRcdFx0YWRkQ29sbGVjdGlvbk1hcCxcclxuXHRcdFx0XHQoPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50KS5pdGVtSWQsXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZm9yRWFjaENvbGxlY3Rpb24ocmVtb3ZlQ29sbGVjdGlvbk1hcCwgJ3JlbW92ZUl0ZW1zJyk7XHJcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKGFkZENvbGxlY3Rpb25NYXAsICdhZGRJdGVtcycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhZGRDb2xsZWN0aW9uTWFwRW50cnkgKGNvbGxlY3Rpb25NYXAsIHBhcmVudElkLCBpdGVtRW50cnksIHZhbHVlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwRW50cnkgPSBjcmVhdGVQYXRoKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5LnBhcmVudC5pdGVtVHlwZSwgcGFyZW50SWQsIGl0ZW1FbnRyeS5pdGVtVHlwZV0sXHJcblx0XHRcdFt7fSwge30sIFtdXVxyXG5cdFx0KTtcclxuXHJcblx0XHRjb2xsZWN0aW9uTWFwRW50cnkucHVzaCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvckVhY2hDb2xsZWN0aW9uIChjb2xsZWN0aW9uTWFwLCBtZXRob2QpIHtcclxuXHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXSkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF0pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeVttZXRob2RdKFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW3BhcmVudFR5cGVdW3BhcmVudElkXVtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdHRydWVcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBub3RlOiB3aXRoIHRoZSBuZXcgaXRlbSBzdHJ1Y3R1cmUsICphbGwqIGxvY2FsIGl0ZW1zIGFyZSBpbiB0aGUgc2luZ2xlIGl0ZW0gY2FjaGVcclxuXHRwcml2YXRlIG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sIGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uRW50cnlbXSkge1xyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKGNvbnZlcnNpb25NYXApKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgb2YgY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHRcdFx0Y29uc3QgdXBkYXRlZENvbHVtbnM6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm99ID1cclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZ2V0VXBkYXRlZEl0ZW1Db2x1bW5zKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cGFyZW50Lml0ZW1JZCA9IG5ld1BhcmVudElkO1xyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIWhhc1Byb3BlcnRpZXModXBkYXRlZENvbHVtbnMpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHVwZGF0ZWRDb2x1bW5zLmlkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5Lm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXBbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXSk7XHJcblxyXG5cdFx0XHQvLyB3aGVuIHVwZGF0aW5nIGFuIGl0ZW0gdG8gcmVmZXIgdG8gYSBuZXdseSBjcmVhdGVkIGl0ZW0sIHRoZSB1cGRhdGVkIGl0ZW0gd2lsbCAqbm90KiBiZSBhZGRlZCB0b1xyXG5cdFx0XHQvLyBzaW5nbGUgaXRlbXMgKGUuZy4gbW92aW5nIGEgZnVuY3Rpb24gdG8gYSBuZXdseSBjcmVhdGVkIGZ1bmN0aW9uIGdyb3VwKVxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBjb2xsZWN0aW9uRW50cnkuaXRlbXMpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2Ygc2luZ2xlSXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdGNvbnN0IG5ld1BhcmVudElkID0gdGhpcy5nZXRNYXBWYWx1ZShwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRpZiAobmV3UGFyZW50SWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcHJvcGVyIG9yZGVyOiBjcmVhdGUgLSBtb3ZlIC0gZGVsZXRlIC0gdXBkYXRlXHJcblx0ZXhlY3V0ZSAoXHJcblx0XHRzaW5nbGVJdGVtczogSXRlbUVudHJ5W10sXHJcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10sXHJcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXHJcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxyXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IHRoaXMuZXJyb3JIYW5kbGVyO1xyXG5cdFx0Y29uc3QgY2hhbmdlc0NvbXBpbGF0aW9uID0gdGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cdFx0Y29uc3QgY29tcGlsYXRpb24gPSBjaGFuZ2VzQ29tcGlsYXRpb24uY29tcGlsYXRpb247XHJcblx0XHRjb25zdCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XHJcblxyXG5cdFx0bGV0IHByb21pc2VDaGFpbiA9IHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3RzKFxyXG5cdFx0XHRjaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0XHRcdHBhcmFtZXRlcnMsXHJcblx0XHRcdGNvbnZlcnNpb25NYXAsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudCxcclxuXHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVNb3ZlUmVxdWVzdHMoY29tcGlsYXRpb24ubW92ZSwgY29udmVyc2lvbk1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHR0aGlzLm9uSXRlbXNDcmVhdGVkKGNvbnZlcnNpb25NYXAsIHNpbmdsZUl0ZW1zLCBjb2xsZWN0aW9ucyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBlcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAodGhpcy5pc0RvY3VtZW50VXBkYXRlKGNvbXBpbGF0aW9uKSkge1xyXG5cdFx0XHRwcm9taXNlQ2hhaW4gPSBwcm9taXNlQ2hhaW4udGhlbihcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cHJvbWlzZUNoYWluID0gcHJvbWlzZUNoYWluLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucHJpb3JpdGl6ZVVwZGF0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLnVwZGF0ZSwgcGFyYW1ldGVycyk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCkudGhlbihcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdHMoY29tcGlsYXRpb24uZGVsZXRlKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcHJvbWlzZUNoYWluLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRNQVlCRSA9ICdtYXliZSdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XHJcblx0ZW50cmllczoge1xyXG5cdFx0W2l0ZW1UeXBlOiBzdHJpbmddOiB7XHJcblx0XHRcdFtjb2xsZWN0aW9uRW50cnlJZDogbnVtYmVyXTogQ29sbGVjdGlvbkVudHJ5XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb250YWlucyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGVudHJpZXNbY29sbGVjdGlvbkVudHJ5LmlkXSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBib29sZWFuKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gZW50cmllcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2soZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIGluIHVzZVxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKGVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVudHJpZXNbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmV0dXJuIGVudHJpZXNbaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF0gPSBjb2xsZWN0aW9uRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoY29sbGVjdGlvbkVudHJ5PzogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5lbnRyaWVzID0ge307XHJcblxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXRoaXMuY29udGFpbnMoY29sbGVjdGlvbkVudHJ5KSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5lbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV1bY29sbGVjdGlvbkVudHJ5LmlkXTtcclxuXHR9XHJcblxyXG5cdGdldEJ5SXRlbVR5cGUgKGl0ZW1UeXBlOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbZW50cnlJZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRtYXRjaFBhcmVudCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB0aGluayBvZiBiZXR0ZXIgbmFtZVxyXG5cdGdldEJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGVudHJpZXNbZW50cnlJZF0sIHBhcmVudFR5cGUsIHBhcmVudElkKSlcclxuXHRcdFx0XHRyZXR1cm4gZW50cmllc1tlbnRyeUlkXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlQYXJlbnQgKHBhcmVudFR5cGUsIHBhcmVudElkLCBpdGVtVHlwZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5nZXRCeVBhcmVudChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuZ2V0Q3VycmVudFJlc291cmNlKCk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tpdGVtVHlwZV1bZW50cnlJZF07XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm1hdGNoUGFyZW50KGNvbGxlY3Rpb25FbnRyeSwgcGFyZW50VHlwZSwgcGFyZW50SWQpKVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPbmx5IHJlc291cmNlc1xyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEludGVnZXJ9IGl0ZW1JZFxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFycmF5IG9mIGNvbGxlY3Rpb25zLlxyXG5cdCAqL1xyXG5cdGdldEJ5Q29udGFpbmluZ0l0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuZ2V0SXRlbUJ5SWQoaXRlbUlkKSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbnMgdGhlIGl0ZW0gJ2JlbG9uZ3MnIGluLlxyXG5cdCAqL1xyXG5cdGdldEJ5Rml0dGluZ0l0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgZmllbGRzOiBGaWVsZE1hcCwgcGFyZW50OiBFbnRyeVBhcmVudE51bGwpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQgPSB7Zml0dGluZzogW10sIG5vdGZpdHRpbmc6IFtdLCBtYXliZTogW119O1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Ly8gY29uc29sZS50aW1lKCdnZXRCeUZpdHRpbmdJdGVtJyk7XHJcblxyXG5cdFx0Y29uc3QgcXVlcnlNYXRjaGVyID0gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZmllbGRzLCBwYXJlbnQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XHJcblx0XHRcdGNvbnN0IG1hdGNoUmVzdWx0ID0gcXVlcnlNYXRjaGVyLm1hdGNoUXVlcnkoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5Lm9iamVjdCk7XHJcblxyXG5cdFx0XHQvLyBUT0RPOiBtYXliZT9cclxuXHRcdFx0aWYgKG1hdGNoUmVzdWx0ID09PSB0cnVlKSAvLyBtaWdodCBhbHNvIHJldHVybiAnbWF5YmUnXHJcblx0XHRcdFx0cmVzdWx0LmZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlIGlmIChtYXRjaFJlc3VsdCA9PT0gQ09OU1RBTlRTLk1BWUJFKVxyXG5cdFx0XHRcdHJlc3VsdC5tYXliZS5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRyZXN1bHQubm90Zml0dGluZy5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gY29uc29sZS50aW1lRW5kKCdnZXRCeUZpdHRpbmdJdGVtJyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlLCBxdWVyeSk6IENvbGxlY3Rpb25FbnRyeSB8IG51bGwge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkucXVlcnkuc3RyaW5nID09PSBxdWVyeS5zdHJpbmcpXHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdldEJ5S2V5IChpdGVtVHlwZSwgZW50cnlLZXkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBDb2xsZWN0aW9uRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gZW50cmllc1tlbnRyeUlkXTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5lbnRyeUtleSA9PT0gZW50cnlLZXkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVzb3VyY2VCeUtleSAoaXRlbVR5cGUsIHJlc291cmNlS2V5KSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvblJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IHJlc291cmNlcyA9IGVudHJpZXNbZW50cnlJZF0ucmVzb3VyY2VzO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRpZiAocmVzb3VyY2Uub3B0aW9ucy5yZXNvdXJjZUtleSA9PT0gcmVzb3VyY2VLZXkpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaChyZXNvdXJjZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeVBhcnNlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gbm8gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgY29sdW1ucyBwcm9wZXJ0eSwgaXQgd2lsbCBiZSByZXBsYWNlZCBpbiB3aGVuIGNvbHVtbnMgYXJlIGV4cGFuZGVkXHJcblx0Y2xvbmVPcHRpb25zIChvcHRpb25zLCBwYXJlbnQpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7IC8vIGRvZXMgYSBzaGFsbG93IGNvcHlcclxuXHJcblx0XHRyZXN1bHQucXVlcnlQYXJhbXMgPSB0aGlzLmNsb25lUXVlcnlQYXJhbXMob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblx0XHRyZXN1bHQucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbG9uZVF1ZXJ5UGFyYW1zIChwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwYXJhbWV0ZXJzKSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyc1trZXldO1xyXG5cdFx0XHRsZXQgY2xvbmU7XHJcblxyXG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5zbGljZSgpOyAvLyB3ZSdyZSBvbmx5IHVzaW5nIHByaW1pdGl2ZSBhcnJheXNcclxuXHRcdFx0ZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlLmNsb25lKCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjbG9uZSA9IHZhbHVlO1xyXG5cclxuXHRcdFx0cmVzdWx0W2tleV0gPSBjbG9uZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiBbXSxcclxuXHRcdFx0XHRxdWVyeTogbnVsbCxcclxuXHRcdFx0XHRxdWVyeUl0ZW1UeXBlOiBudWxsLFxyXG5cdFx0XHRcdHF1ZXJ5UGFyYW1zOiB7fSxcclxuXHRcdFx0XHRwYXJlbnQ6IG51bGwsXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZSxcclxuXHRcdFx0XHRsaW1pdDogbnVsbCxcclxuXHRcdFx0XHRlbnRyeUtleTogJydcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVF1ZXJ5IChvcHRpb25zKSB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHJcblx0XHRsZXQgcXVlcnk7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5O1xyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGNvbnN0IGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHtpZDogJyZwYXJlbnRJZCd9fTtcclxuXHRcdFx0b3B0aW9ucy5xdWVyeVBhcmFtcy5wYXJlbnRJZCA9IHBhcmVudC5pdGVtSWQ7XHJcblxyXG5cdFx0XHRxdWVyeSA9IG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHRcdGxpbmtlZFRvUXVlcnkgOlxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihvcHRpb25zLnF1ZXJ5LCBsaW5rZWRUb1F1ZXJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChxdWVyeSwgb3B0aW9ucy5xdWVyeVBhcmFtcykucGFyc2UoKTtcclxuXHJcblx0XHRyZXR1cm4ge29iamVjdDogcGFyc2VkUXVlcnlbMF0sIHN0cmluZzogcGFyc2VkUXVlcnlbMV19O1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCBhY2N1bXVsYXRvcik6IEl0ZW1JZFtdIHtcclxuXHRcdGlmIChhY2N1bXVsYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRhY2N1bXVsYXRvciA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRhY2N1bXVsYXRvci5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cclxuXHRcdHJldHVybiBhY2N1bXVsYXRvcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7SXRlbUVudHJ5W119IGl0ZW1FbnRyaWVzXHJcblx0ICogQHBhcmFtIHsoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW59IGNhbGxiYWNrXHJcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxyXG5cdCAqXHJcblx0ICogZmlsdGVyIGFuIGFycmF5IGFjY29yZGluZyB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uIFJldHVybiB0aGUgZW50cmllcyB0aGF0IGZhaWxlZCB0aGUgY29uZGl0aW9uXHJcblx0ICogUmVwbGFjZSB0aGUgZ2l2ZW4gYXJyYXkgd2l0aCB0aGUgZW50cmllcyB0aGF0IGRpZG4ndCBmYWlsIHRoZSBjb25kaXRpb24uXHJcblx0ICovXHJcblx0ZmlsdGVyQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdChjYWxsYmFjayhpdGVtRW50cnkpID8gZmlsdGVyZWRFbnRyaWVzIDogcmVtb3ZlZEVudHJpZXMpLnB1c2goaXRlbUVudHJ5KTtcclxuXHJcblx0XHRpZiAocmVtb3ZlZEVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XHJcblxyXG5cdFx0aXRlbUVudHJpZXMubGVuZ3RoID0gZmlsdGVyZWRFbnRyaWVzLmxlbmd0aDtcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1FbnRyaWVzLmxlbmd0aDsgaSsrKVxyXG5cdFx0XHRpdGVtRW50cmllc1tpXSA9IGZpbHRlcmVkRW50cmllc1tpXTtcclxuXHJcblx0XHRyZXR1cm4gcmVtb3ZlZEVudHJpZXM7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGUsXHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRDb2xsZWN0aW9uTWF0Y2hlcixcclxuXHRDb2x1bW5FeHBhbnNpb24sXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5TZXQsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLFxyXG5cdFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksIENvbGxlY3Rpb25FbnRyeUZhY3RvcnksIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgUXVlcnlQYXJzZXJGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXAsIENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCBFbnRyeVBhcmVudCwgRW50cnlTdGF0dXMsIEl0ZW1FbnRyeVBhcmVudElkTWFwLCBJdGVtSWQsXHJcblx0SXRlbVJlc291cmNlSXRlbUlkTWFwLCBJdGVtVHlwZVxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25IYW5kbGVyIHtcclxuXHRlbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlGYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVBhcnNlckZhY3Rvcnk6IFF1ZXJ5UGFyc2VyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0Z2V0UHJvbWlzZXMgKHN0YXR1c1Jlc291cmNlOiBDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCkge1xyXG5cdFx0Y29uc3QgcHJvbWlzZWQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURdO1xyXG5cdFx0Y29uc3QgcHJvbWlzZWRFeHBhbmQgPSBzdGF0dXNSZXNvdXJjZVtFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkKVxyXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZFtwYXJlbnRJZF0pO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcHJvbWlzZWRFeHBhbmQpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHByb21pc2VkRXhwYW5kW3BhcmVudElkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RJZHMgKHN0YXR1c1Jlc291cmNlKSB7XHJcblx0XHRjb25zdCByZXNvbHZlID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xyXG5cdFx0Y29uc3QgZXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLkVYUEFORF07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiByZXNvbHZlKVxyXG5cdFx0XHRyZXN1bHQucHVzaChyZXNvbHZlW3BhcmVudElkXS5wYXJlbnQuaXRlbUlkKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGV4cGFuZClcclxuXHRcdFx0cmVzdWx0LnB1c2goZXhwYW5kW3BhcmVudElkXS5wYXJlbnQuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbD8pIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgZW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeSA9IGVudHJ5LmNvbGxlY3Rpb247XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGVudHJ5Lm5vdGZpdHRpbmcsIG51bGwsIHRydWUpO1xyXG5cdFx0XHRjb2xsZWN0aW9uLmFkZEl0ZW1zKGVudHJ5LmZpdHRpbmcsIG51bGwsIHRydWUpOyAvLyBkb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggaW5pdGlhbFxyXG5cclxuXHRcdFx0aWYgKGVudHJ5Lm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKCk6IENvbGxlY3Rpb25NYXRjaGVyIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW3RoaXMuZW50cmllc10sIHRydWUsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw/LCByZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgZml0dGluZyA9IG1hcEVudHJ5LmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IG1heWJlID0gbWFwRW50cnkubWF5YmU7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgaWRBcnJheTogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgZml0dGluZ0l0ZW0gb2YgZml0dGluZylcclxuXHRcdFx0XHRpZEFycmF5LnB1c2goZml0dGluZ0l0ZW0uaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgbWF5YmVJdGVtIG9mIG1heWJlKVxyXG5cdFx0XHRcdGlkQXJyYXkucHVzaChtYXliZUl0ZW0pO1xyXG5cclxuXHRcdFx0aWYgKHJlc3VsdFJlc291cmNlICE9PSBudWxsICYmIGNvbGxlY3Rpb25FbnRyeSA9PT0gcmVzdWx0UmVzb3VyY2UuZW50cnkpXHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHJlc3VsdFJlc291cmNlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCBudWxsLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogbWF5YmUsIGJvb2xlYW4gaW5zdGVhZCBvZiBtZXNzYWdlXHJcblx0LyoqXHJcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQgKi9cclxuXHRhZGRUb0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCByZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpOiBJdGVtUmVzb3VyY2VbXSB7XHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhtYXBFbnRyeS5maXR0aW5nLCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMobWFwRW50cnkuZml0dGluZywgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XHJcblxyXG5cdFx0XHRpZiAodXBkYXRlSW5pdGlhbCAmJiBtYXBFbnRyeS5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4cGFuZCAocGFyZW50VHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sIG5ld0NvbHVtbnMpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVtdPiB7XHJcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblx0XHRsZXQgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Ly8gVE9ETzogZmlsdGVyIGxvY2FsIGl0ZW1zP1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xyXG5cclxuXHRcdFx0cGFyZW50SWRBcnJheS5wdXNoKCg8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQpLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRpdGVtRW50cmllcyA9IGl0ZW1FbnRyaWVzLmNvbmNhdChjb2xsZWN0aW9uRW50cnkuaXRlbXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0bnVsbCxcclxuXHRcdFx0bmV3Q29sdW1uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihcclxuXHRcdFx0XHRcdG5ld0NvbHVtbnMsXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXNcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnkuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbnM7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4dGVuZCAoXHJcblx0XHRwYXJlbnRUeXBlOiBzdHJpbmcsXHJcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdHF1ZXJ5Q2FsbGJhY2ssXHJcblx0XHRjb2xsZWN0aW9uczogQ29sbGVjdGlvblJlc291cmNlW10sXHJcblx0XHRyZXR1cm5BbGxJdGVtcyA9IGZhbHNlXHJcblx0KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VJdGVtSWRNYXA+IHtcclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb2xsZWN0aW9ucykpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oe30pO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblx0XHRsZXQgaXRlbUlkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IHF1ZXJ5Q2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF0uZW50cnk7XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjayk7XHJcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0aXRlbUlkQXJyYXkgPSBpdGVtSWRBcnJheS5jb25jYXQoY29sbGVjdGlvbkVudHJ5LmdldElkQXJyYXkoKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RMaW5rSXRlbXMoXHJcblx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24oXHJcblx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpLm9iamVjdCxcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbihpdGVtSWRBcnJheSlcclxuXHRcdFx0KSxcclxuXHRcdFx0b3B0aW9ucy5jb2x1bW5zXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0xpbmtSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdHBhcmVudElkQXJyYXksXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnkuYWRkSXRlbXMoIC8vIHNob3VsZCBnbyBmaXJzdFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5pdGVtc1twYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gcmV0dXJuQWxsSXRlbXMgPyBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMgOiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hGZXRjaCAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdHBhcmVudElkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XHJcblx0XHRjb25zdCByZXNvdXJjZSA9IHRoaXMuY3JlYXRlU3RhdHVzUmVzb3VyY2UocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHRoaXMuZ2V0UHJvbWlzZXMocmVzb3VyY2UpKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdElkcyA9IHRoaXMuZ2V0UmVxdWVzdElkcyhyZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxyXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdFx0b3B0aW9ucy5xdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0XHRcdFx0bnVsbCA6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnkuY29uc3RydWN0KG9wdGlvbnMucXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKClbMF0sXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1uc1xyXG5cdFx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRyZXF1ZXN0SWRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKHJlc291cmNlLCBpdGVtRW50cnlSZXNvdXJjZSwgaXRlbUNhY2hlKTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGhhc1Byb3BlcnRpZXMocmVzb3VyY2VbRU5UUllfU1RBVFVTLkxPQ0FMXSkpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucykudGhlbihcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVCYXRjaFJlc3BvbnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2UsXHJcblx0XHRcdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5jb2x1bW5zLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0aXRlbUNhY2hlXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHJlc291cmNlW0VOVFJZX1NUQVRVUy5DQUNIRURdO1xyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlU3RhdHVzUmVzb3VyY2UgKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzSWQgaW4gRU5UUllfU1RBVFVTKVxyXG5cdFx0XHRyZXN1bHRbRU5UUllfU1RBVFVTW3N0YXR1c0lkXV0gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpOyAvLyB1c2UgcHJvY2Vzc0VudHJ5T3B0aW9ucyB0byBjbG9uZSBUT0RPOiB1c2UgY2xvbmVPcHRpb25zXHJcblxyXG5cdFx0XHRsZXQgc3RhdHVzUmVzb3VyY2U7XHJcblxyXG5cdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlLCBpdGVtSWQ6IHBhcmVudElkfTtcclxuXHJcblx0XHRcdHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgZW50cnlPcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cclxuXHRcdFx0cmVzdWx0W3N0YXR1c1Jlc291cmNlLnN0YXR1c11bcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IHN0YXR1c1Jlc291cmNlID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcclxuXHRcdGNvbnN0IGVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0c3dpdGNoIChzdGF0dXNSZXNvdXJjZS5zdGF0dXMpIHtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oZW50cnkpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EOlxyXG5cdFx0XHRcdHJldHVybiBlbnRyeS5wcm9taXNlLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbnRyeS5leHBhbmQob3B0aW9ucy5jb2x1bW5zKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVSZW1vdGUoZW50cnksIGl0ZW1DYWNoZSk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkxPQ0FMOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChlbnRyeSwgaXRlbUNhY2hlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENhY2hlZEVudHJ5U3RhdHVzIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk6IEVOVFJZX1NUQVRVUyB7XHJcblx0XHRjb25zdCBpc0NvbHVtblN1cGVyc2V0ID0gY29sbGVjdGlvbkVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKCFjb2xsZWN0aW9uRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRyZXR1cm4gaXNDb2x1bW5TdXBlcnNldCA/IEVOVFJZX1NUQVRVUy5DQUNIRUQgOiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZWxvYWRRdWV1ZWQgPSBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkuaXNMb2NhbCgpID8gRU5UUllfU1RBVFVTLkxPQ0FMIDogRU5UUllfU1RBVFVTLlJFU09MVkU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGlzQ29sdW1uU3VwZXJzZXQgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cdH1cclxuXHJcblx0Z2V0RGVmZXJyZWRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zLCBxdWVyeSwgZGVmZXJyZWRFbnRyaWVzKToge2VudHJ5OiBDb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGJvb2xlYW59IHtcclxuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XHJcblxyXG5cdFx0aWYgKCFvcHRpb25zLmRlZmVyUmVxdWVzdCkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IGRlZmVycmVkRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbCkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kUmVxdWVzdENvbHVtbnMob3B0aW9ucy5jb2x1bW5zKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgaXNEZWZlcnJlZDogZmFsc2V9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiB7ZW50cnk6IGRlZmVycmVkRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KSwgaXNEZWZlcnJlZDogdHJ1ZX07XHJcblx0fVxyXG5cclxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbEVudHJpZXM6IENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUpOiBFbnRyeVN0YXR1czxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IHF1ZXJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNyZWF0ZVF1ZXJ5KG9wdGlvbnMpO1xyXG5cdFx0bGV0IGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdGxldCBpc0RlZmVycmVkO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTG9jYWwob3B0aW9ucykpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gbG9jYWxFbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0XHQoe2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWR9ID0gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBxdWVyeSwgZGVmZXJyZWRFbnRyaWVzKSk7XHJcblxyXG5cdFx0XHRpZiAoaXNEZWZlcnJlZClcclxuXHRcdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcclxuXHJcblx0XHRcdC8vIG5ldyBsb2NhbCBlbnRyeSBjcmVhdGVkLCBzaG91bGQgYmUgYWRkZWQgdG8gbG9jYWwgY2FjaGUgb25seVxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIHN0YXR1czogRU5UUllfU1RBVFVTLkxPQ0FMfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xyXG5cclxuXHRcdC8vIGVudHJ5IGFscmVhZHkgZXhpc3RzIGluIGdsb2JhbCBjYWNoZSwgYWRkIHRvIGxvY2FsIGNhY2hlXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGVudHJ5OiBsb2NhbEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksXHJcblx0XHRcdFx0c3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucylcclxuXHRcdFx0fTtcclxuXHJcblx0XHQoe2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWR9ID0gdGhpcy5nZXREZWZlcnJlZEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBvcHRpb25zLCBxdWVyeSwgZGVmZXJyZWRFbnRyaWVzKSk7XHJcblxyXG5cdFx0aWYgKGlzRGVmZXJyZWQpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUFJPTUlTRUR9O1xyXG5cclxuXHRcdC8vIG5ldyBnbG9iYWwgZW50cnkgY3JlYXRlZCwgYWRkIHRvIGJvdGggbG9jYWwgYW5kIGdsb2JhbCBjYWNoZVxyXG5cdFx0bG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiBFTlRSWV9TVEFUVVMuUkVTT0xWRX07XHJcblx0fVxyXG5cclxuXHRoYW5kbGVCYXRjaFJlc3BvbnNlIChcclxuXHRcdHN0YXR1c1Jlc291cmNlLFxyXG5cdFx0aXRlbUVudHJ5Q29tcG91bmQ6IHtcclxuXHRcdFx0Y29sdW1uczogQ29sdW1uU2V0LFxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb24sXHJcblx0XHRcdGl0ZW1zPzogSXRlbUVudHJ5UGFyZW50SWRNYXBcclxuXHRcdH0sXHJcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZVxyXG5cdCk6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuY2FjaGVkKVxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gc3RhdHVzUmVzb3VyY2UuY2FjaGVkW3BhcmVudElkXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLnJlc29sdmUpIHtcclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLnJlc29sdmVbcGFyZW50SWRdLnJlc29sdmUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0aXRlbXM6ICg8SXRlbUVudHJ5UGFyZW50SWRNYXA+IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zKVtwYXJlbnRJZF0sXHJcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UuZXhwYW5kKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UuZXhwYW5kW3BhcmVudElkXTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHBhbmRDb2x1bW5zKDxDb2x1bW5FeHBhbnNpb24+IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gc3RhdHVzUmVzb3VyY2UubG9jYWwpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkgPSBzdGF0dXNSZXNvdXJjZS5sb2NhbFtwYXJlbnRJZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRpdGVtczogaXRlbUNhY2hlLmdldEJ5UGFyZW50KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQuaXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHBhcmVudC5pdGVtSWQsXHJcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnNcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVMb2NhbCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0aXRlbXM6IGl0ZW1DYWNoZS5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpLFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zLCBmYWxzZSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlUmVtb3RlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgaXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT4ge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0bGV0IGNvbHVtblNldDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKGNvbGxlY3Rpb25FbnRyeSkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnMsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQsXHJcblx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0aXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnkucmVzb2x2ZShcclxuXHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0aXRlbXM6IGl0ZW1FbnRyaWVzLmNvbmNhdChpdGVtQ2FjaGUuZ2V0TG9jYWxCeVF1ZXJ5KGl0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkucXVlcnkpKSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAob3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBpZGVudGl0eSwgSXRlbUlkIH0gZnJvbSAnLi4vJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMvJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uTWF0Y2hlciB7XHJcblx0bWFwOiB7XHJcblx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IHtcclxuXHRcdFx0Y29sbGVjdGlvbjogQ29sbGVjdGlvbkVudHJ5XHJcblx0XHRcdG1hdGNoZXM6IHtcclxuXHRcdFx0XHRbaXRlbUlkOiBudW1iZXJdOiB7IGl0ZW06IEl0ZW1FbnRyeSwgaXNNYXRjaDogYm9vbGVhbiB9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sXHJcblx0XHRwcml2YXRlIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sXHJcblx0XHRwcml2YXRlIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRpdGVtRW50cnkucGFyZW50XHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkNhY2hlIG9mIHRoaXMuY29sbGVjdGlvbkNhY2hlcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IGNvbGxlY3Rpb25DYWNoZS5nZXRCeUl0ZW1UeXBlKGl0ZW1FbnRyeS5pdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSAgb2YgY29sbGVjdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnlJZCA9IGNvbGxlY3Rpb25FbnRyeS5pZDtcclxuXHRcdFx0XHRsZXQgbWF0Y2hlcztcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0dGhpcy5tYXBbY29sbGVjdGlvbkVudHJ5SWRdID0geyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uRW50cnksIG1hdGNoZXM6IHt9IH07XHJcblxyXG5cdFx0XHRcdG1hdGNoZXMgPSB0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0ubWF0Y2hlcztcclxuXHJcblx0XHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdG1hdGNoZXNbaXRlbUlkXSA9IHtcclxuXHRcdFx0XHRcdGl0ZW06IGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdGlzTWF0Y2g6IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zICgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblxyXG5cdFx0XHRpZiAodGhpcy5oYXNGaXR0aW5nSXRlbXMobWFwRW50cnkubWF0Y2hlcykpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2gobWFwRW50cnkuY29sbGVjdGlvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZFRvQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcclxuXHRcdFx0Y29uc3QgZml0dGluZ0l0ZW1FbnRyaWVzID0gZ3JvdXBlZEl0ZW1FbnRyaWVzLmZpdHRpbmc7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gY29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxyXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKFxyXG5cdFx0XHRcdFx0Zml0dGluZ0l0ZW1FbnRyaWVzLFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFjdGl2YXRlXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMudXBkYXRlSW5pdGlhbCAmJiBncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQ29sbGVjdGlvbnMgKHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCkge1xyXG5cdFx0bGV0IHJlc3VsdDogSXRlbVJlc291cmNlW10gfCBudWxsID0gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtSWRzID0gdGhpcy5ncm91cEl0ZW1JZHMobWFwRW50cnkubWF0Y2hlcykuZml0dGluZztcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCB8fCBjb2xsZWN0aW9uRW50cnkgIT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhmaXR0aW5nSXRlbUlkcywgcmVzdWx0UmVzb3VyY2UsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIG51bGwsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUZyb21BbmRBZGRUb0NvbGxlY3Rpb25zICgpIHtcclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIHRoaXMubWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5tYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gbWFwRW50cnkuY29sbGVjdGlvbjtcclxuXHRcdFx0Y29uc3QgZ3JvdXBlZEl0ZW1FbnRyaWVzID0gdGhpcy5ncm91cEl0ZW1FbnRyaWVzKG1hcEVudHJ5Lm1hdGNoZXMpO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5ub3RGaXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0Ly8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0aWYgKGdyb3VwZWRJdGVtRW50cmllcy5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5leHRlbmQoaWRlbnRpdHksIG51bGwsIHRydWUsIHRoaXMudXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdyb3VwSXRlbUVudHJpZXMgKG1hdGNoZXMpIHtcclxuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0Y29uc3QgbWF5YmU6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gbWF0Y2hlcykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IG1hdGNoZXNbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gbWF0Y2guaXRlbTtcclxuXHRcdFx0Y29uc3QgaXNNYXRjaCA9IG1hdGNoLmlzTWF0Y2g7XHJcblxyXG5cdFx0XHRpZiAoaXNNYXRjaCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRmaXR0aW5nLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpXHJcblx0XHRcdFx0bm90Rml0dGluZy5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0bWF5YmUucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7IGZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcsIG1heWJlOiBtYXliZSB9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBncm91cEl0ZW1JZHMgKG1hdGNoZXMpIHtcclxuXHRcdC8vIGFsc28gaW5jbHVkZXMgJ21heWJlJztcclxuXHRcdGNvbnN0IGZpdHRpbmc6IEl0ZW1JZFtdID0gW107XHJcblx0XHRjb25zdCBub3RGaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHQobWF0Y2guaXNNYXRjaCA9PT0gZmFsc2UgPyBub3RGaXR0aW5nIDogZml0dGluZykucHVzaChtYXRjaC5pdGVtLml0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHsgZml0dGluZzogZml0dGluZywgbm90Rml0dGluZzogbm90Rml0dGluZyB9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoYXNGaXR0aW5nSXRlbXMgKG1hdGNoZXMpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0aWYgKG1hdGNoZXNbaXRlbUlkXS5pc01hdGNoID09PSB0cnVlKVxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSB7XHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRlZGl0SXRlbXM6IGZhbHNlLFxyXG5cdFx0XHRcdGVkaXRDb2xsZWN0aW9uOiBmYWxzZSxcclxuXHRcdFx0XHRtb2RJbnN0YW50OiBmYWxzZSxcclxuXHRcdFx0XHRlbmFibGVTYXZlOiB0cnVlLFxyXG5cdFx0XHRcdG9uSXRlbXNDcmVhdGVkOiBub29wLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBub29wLCAvLyBuZWVkZWQgZm9yIGNvbXBhcmlzb25cclxuXHRcdFx0XHRvbkFkZDogbm9vcCxcclxuXHRcdFx0XHRvblJlbW92ZTogbm9vcCxcclxuXHRcdFx0XHRvbkFkZEluaXRpYWw6IG5vb3AsXHJcblx0XHRcdFx0b25SZW1vdmVJbml0aWFsOiBub29wLFxyXG5cdFx0XHRcdG9uQWN0aXZhdGVJdGVtOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGVJdGVtOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGVDb2xsZWN0aW9uOiBub29wLCAvLyB3aWxsIGJlIG92ZXJ3cml0dGVuIGluIExvY2FsQ2FjaGVcclxuXHRcdFx0XHRyZXNvdXJjZUtleTogbnVsbCwgLy8gVE9ETzogcmVtb3ZlXHJcblx0XHRcdFx0Y2xlYXJPblRhYkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0XHRjbGVhck9uU3ViVGFiQ2hhbmdlOiB0cnVlLFxyXG5cdFx0XHRcdGN1c3RvbTogbnVsbFxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbiwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkNhY2hlIHtcblx0Y2FjaGU6IFJlc3BvbnNlQ29sdW1uTWFwID0ge307XG5cdGFsbENvbHVtbnM6IHtbaXRlbVR5cGU6IHN0cmluZ106IGJvb2xlYW59ID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGU7XG5cblx0XHRpZiAoY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRjYWNoZVtpdGVtVHlwZV0gPSB7fTtcblxuXHRcdGNvbnN0IGVudHJ5ID0gY2FjaGVbaXRlbVR5cGVdO1xuXHRcdGNvbnN0IGNvbHVtbklkID0gcmVzcG9uc2VDb2x1bW4uaWQ7XG5cblx0XHRpZiAoZW50cnlbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXG5cdFx0XHRlbnRyeVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcblxuXHRcdHJldHVybiBlbnRyeVtjb2x1bW5JZF07XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCByZXNwb25zZVR5cGUgaW4gcmVzcG9uc2VDb2x1bW5zKSB7XG5cdFx0XHRjb25zdCBjb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5zW3Jlc3BvbnNlVHlwZV07XG5cblx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdID0ge307XG5cblx0XHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcblx0XHRcdFx0cmVzdWx0W3Jlc3BvbnNlVHlwZV1bY29sdW1uSWRdID0gdGhpcy5zZXRDb2x1bW4ocmVzcG9uc2VUeXBlLCBjb2x1bW5zW2NvbHVtbklkXSk7XG5cdFx0fVxuXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKVxuXHRcdFx0dGhpcy5hbGxDb2x1bW5zW2l0ZW1UeXBlXSA9IHRydWU7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0cmlldmUgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnNcblx0KToge2NhY2hlZDogUmVzcG9uc2VDb2x1bW5NYXAsIG1pc3Npbmc6IFJlcXVlc3RDb2x1bW5zfSB7XG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5jb250YWluc0FsbChpdGVtVHlwZSkpXG5cdFx0XHRcdHJldHVybiB7Y2FjaGVkOiB0aGlzLmdldENvbHVtbnMoaXRlbVR5cGUpLCBtaXNzaW5nOiBbXX07XG5cblx0XHRcdHJldHVybiB7Y2FjaGVkOiB7fSwgbWlzc2luZzogdHJ1ZX07XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzcG9uc2VBY2N1bXVsYXRvciA9IHt9O1xuXHRcdGNvbnN0IHJlcXVlc3RBY2N1bXVsYXRvciA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0cmV0dXJuIHtjYWNoZWQ6IHJlc3BvbnNlQWNjdW11bGF0b3IsIG1pc3Npbmc6IHJlcXVlc3RBY2N1bXVsYXRvcn07XG5cdH1cblxuXHRjb250YWluc0FsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPT09IHRydWU7XG5cdH1cblxuXHRnZXRDb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0cmV0dXJuIHtbaXRlbVR5cGVdOiBjYWNoZVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IFtdIDogY2FjaGVbaXRlbVR5cGVdfTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5bXSxcblx0XHRyZXF1ZXN0QWNjdW11bGF0b3I6IFJlcXVlc3RDb2x1bW5bXSxcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB2b2lkIHtcblx0XHQvLyBhbHdheXMgcmV0cmlldmUgdGhlIGlkIGNvbHVtblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW4oaXRlbVR5cGUsICdpZCcsIHJlcXVlc3RBY2N1bXVsYXRvciwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpXG5cdFx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXRyaWV2ZUNvbHVtbiAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW46IFJlcXVlc3RDb2x1bW4sXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbltdLFxuXHRcdHJlc3BvbnNlQWNjdW11bGF0b3I6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSB0aGlzLmdldENvbHVtbihpdGVtVHlwZSwgY29sdW1uLmlkKTtcblxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXF1ZXN0QWNjdW11bGF0b3IucHVzaChyZXF1ZXN0Q29sdW1uKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID0ge307XG5cblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXVtjb2x1bW4uaWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG1pc3NpbmdEZXJpdmVkID0gW107XG5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1ucyhyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY29sdW1uLmNoaWxkcmVuLCBtaXNzaW5nRGVyaXZlZCwgcmVzcG9uc2VBY2N1bXVsYXRvcik7XG5cblx0XHRpZiAobWlzc2luZ0Rlcml2ZWQubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2goe1tjb2x1bW4uaWRdOiBtaXNzaW5nRGVyaXZlZH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgY29sdW1uSWQ6IHN0cmluZyk6IFJlc3BvbnNlQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjYWNoZSA9IHRoaXMuY2FjaGVbaXRlbVR5cGVdO1xuXG5cdFx0aWYgKGNhY2hlID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRyZXR1cm4gY2FjaGVbY29sdW1uSWRdO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2x1bW5TZXQsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvblJlc3VsdCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb24ge1xyXG5cdGV4cGFuc2lvbk1hcDoge1tjb2x1bW5TZXRJZDogbnVtYmVyXTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0fSA9IHt9O1xyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXHJcblx0XHRwdWJsaWMgcmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxyXG5cdCkge1xyXG5cdFx0aWYgKHJlcXVlc3RDb2x1bW5zID09PSB0cnVlKSB7XHJcblx0XHRcdC8vIHJlcXVlc3RDb2x1bW5zIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXksIHdoZW4gaXQgaXMgdHJ1ZSBkZXJpdmVkIGNvbHVtbiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvc3RcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucy5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0cnVuIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0SWQgPSBjb2x1bW5TZXQuaWQ7XHJcblxyXG5cdFx0aWYgKHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xyXG5cclxuXHRcdGNvbnN0IGlzQ29sdW1uU3Vic2V0ID0gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRjb2x1bW5TZXQucmVxdWVzdCxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZVxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAoaXNDb2x1bW5TdWJzZXQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXSA9IHRoaXMuZXhwYW5kQ29sdW1uSW5mbyhjb2x1bW5TZXQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4cGFuZENvbHVtbkluZm8gKGNvbHVtblNldDogQ29sdW1uU2V0KTogQ29sdW1uRXhwYW5zaW9uUmVzdWx0IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RNZXJnZVJlc3VsdCA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKGNvbHVtblNldC5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdGNvbnN0IG1lcmdlZFJlc3BvbnNlQ29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0XHQubWVyZ2VSZXNwb25zZUNvbHVtbnMoY29sdW1uU2V0LnJlc3BvbnNlLCB0aGlzLnJlc3BvbnNlQ29sdW1ucylcclxuXHRcdFx0Lm1lcmdlZDtcclxuXHJcblx0XHRjb25zdCBtZXJnZWQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQubWVyZ2VkLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdHRoaXMuaXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RNZXJnZVJlc3VsdC5kaWZmZXJlbmNlLFxyXG5cdFx0XHRtZXJnZWRSZXNwb25zZUNvbHVtbnMsIC8vIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBsb29rIHVwIHRoZSBwYXJlbnQgb2YgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHJcblx0XHRtZXJnZWQucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgfHwgY29sdW1uU2V0LnJlcXVlc3RDb2x1bW5zVHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uQ2FjaGUsIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW4sIFJlc3BvbnNlQ29sdW1uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sdW1uSGFuZGxlciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjYWNoZTogQ29sdW1uQ2FjaGUsXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXG5cdCkge1xuXHR9XG5cblx0c2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uOiBSZXNwb25zZUNvbHVtbik6IFJlc3BvbnNlQ29sdW1uIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcblx0fVxuXG5cdHNldENvbHVtbnMgKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXG5cdFx0cmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiBSZXNwb25zZUNvbHVtbk1hcCB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XG5cdH1cblxuXHRmZXRjaEl0ZW1UeXBlVHJhbnNsYXRpb25zIChpdGVtVHlwZXM6IEl0ZW1UeXBlW10pOiBQcm9taXNlPHtbaXRlbVR5cGU6IHN0cmluZ106IHN0cmluZ30+IHtcblx0XHRjb25zdCBwcm9taXNlczoge1tpdGVtVHlwZTogc3RyaW5nXTogUHJvbWlzZTxSZXNwb25zZUNvbHVtbk1hcD59ID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIGl0ZW1UeXBlcylcblx0XHRcdHByb21pc2VzW2l0ZW1UeXBlXSA9IHRoaXMuZmV0Y2goaXRlbVR5cGUsIFsnaWQnXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpXG5cdFx0XHQudGhlbihcblx0XHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xuXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiByZXNwb25zZSlcblx0XHRcdFx0XHRcdHJlc3VsdFtpdGVtVHlwZV0gPSByZXNwb25zZVtpdGVtVHlwZV1baXRlbVR5cGVdLmlkLm5hbWU7XG5cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRyZXF1ZXN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLCBwYXJhbXMgPSB7ZmlsdGVyOiBmYWxzZX0pOiBQcm9taXNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7W2l0ZW1UeXBlXTogY29sdW1uc307XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcGFyYW1zKS50aGVuKFxuXHRcdFx0Y29sdW1uUmVzb3VyY2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jYWNoZS5zZXRDb2x1bW5zKFxuXHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdGNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0ZmV0Y2ggKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLCBwYXJhbXM/KTogUHJvbWlzZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdGNvbnN0IGNvbHVtblJlc291cmNlID0gdGhpcy5jYWNoZS5yZXRyaWV2ZShpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMpO1xuXG5cdFx0aWYgKGNvbHVtblJlc291cmNlLm1pc3NpbmcgIT09IHRydWUgJiYgY29sdW1uUmVzb3VyY2UubWlzc2luZy5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbHVtblJlc291cmNlLmNhY2hlZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCBjb2x1bW5SZXNvdXJjZS5taXNzaW5nLCBwYXJhbXMpLnRoZW4oXG5cdFx0XHRyZXNwb25zZUNvbHVtbnMgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyxcblx0XHRcdFx0XHRjb2x1bW5SZXNvdXJjZS5jYWNoZWRcblx0XHRcdFx0KS5tZXJnZWQ7XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoQWxsIChpdGVtVHlwZTogSXRlbVR5cGUpOiBQcm9taXNlPFJlc3BvbnNlQ29sdW1uTWFwPiB7XG5cdFx0aWYgKHRoaXMuY2FjaGUuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbih0aGlzLmNhY2hlLmdldENvbHVtbnMoaXRlbVR5cGUpKTtcblxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3QoaXRlbVR5cGUsIHRydWUpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5JbmZvIHtcclxuXHRpZDogc3RyaW5nO1xyXG5cdGxldmVsOiBudW1iZXI7XHJcblx0cGF0aDogc3RyaW5nO1xyXG5cdHRhaWxQYXRoOiBzdHJpbmc7XHJcblx0aXRlbVR5cGU6IHN0cmluZyA9ICcnO1xyXG5cdGNoaWxkcmVuOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRpc0xlYWY6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAocmVhZG9ubHkgYXBpQ29sdW1uOiBhbnksIHJlYWRvbmx5IHBhcmVudDogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHJcblx0XHR0aGlzLmlkID0gY29sdW1uSWQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkge1xyXG5cdFx0XHR0aGlzLmxldmVsID0gMDtcclxuXHRcdFx0dGhpcy5wYXRoID0gY29sdW1uSWQ7XHJcblx0XHRcdHRoaXMudGFpbFBhdGggPSAnJztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxO1xyXG5cdFx0XHR0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcclxuXHRcdFx0dGhpcy50YWlsUGF0aCA9IHBhcmVudC5sZXZlbCA9PT0gMCA/XHJcblx0XHRcdFx0Y29sdW1uSWQgOlxyXG5cdFx0XHRcdHBhcmVudC50YWlsUGF0aCArIENPTFVNTl9TRVBFUkFUT1IgKyBjb2x1bW5JZDtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uSW5mbywgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7UmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uTWFwfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5jb25zdCBlbXB0eU9iamVjdCA9IHt9O1xyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXQge1xyXG5cdGlkID0gKytjdXJyZW50SWQ7XHJcblxyXG5cdHJlcXVlc3RDb2x1bW5zVHJ1ZTogYm9vbGVhbjtcclxuXHRyZXNwb25zZTogUmVzcG9uc2VDb2x1bW5NYXAgPSBlbXB0eU9iamVjdDtcclxuXHJcblx0bGluazogQ29sdW1uSW5mbyB8IG51bGwgPSBudWxsO1xyXG5cdG1haW46IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGRlcml2ZWQ6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdHJvb3Q6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGxlYWY6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGZvcm1hdHRlZDoge21haW46IENvbHVtbkluZm9bXSwgZGVyaXZlZDogQ29sdW1uSW5mb1tdfSA9IHttYWluOiBbXSwgZGVyaXZlZDogW119O1xyXG5cdGZpbHRlcmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRjdXN0b206IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdHNlYXJjaGFibGU6IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdGl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cdG5vdEl0ZW06IENvbHVtbkluZm9bXSA9IFtdO1xyXG5cclxuXHRlbmFibGVDYWNoaW5nOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZSxcclxuXHRcdHB1YmxpYyByZXF1ZXN0OiBSZXF1ZXN0Q29sdW1ucyxcclxuXHQpIHtcclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdGhpcy5yZXF1ZXN0ID09PSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAocmVzcG9uc2VDb2x1bW5zOiBSZXNwb25zZUNvbHVtbk1hcCwgZW5hYmxlQ2FjaGluZyA9IHRydWUsIGluY2x1ZGVJZENvbHVtbiA9IHRydWUpOiB0aGlzIHtcclxuXHRcdHRoaXMuZW5hYmxlQ2FjaGluZyA9IGVuYWJsZUNhY2hpbmc7XHJcblxyXG5cdFx0aWYgKHRoaXMucmVxdWVzdENvbHVtbnNUcnVlKVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZUNvbHVtbnMocmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGVsc2VcclxuXHRcdFx0dGhpcy5wcm9jZXNzUmVxdWVzdENvbHVtbnMocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kUmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRjb25zdCBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMucmVxdWVzdCwgY29sdW1ucykubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMucmVxdWVzdCA9IG1lcmdlZFJlcXVlc3RDb2x1bW5zO1xyXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzU3VwZXJzZXRPZiAoY29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtblV0aWwuaXNDb2x1bW5TdWJzZXQoY29sdW1ucywgdGhpcy5yZXF1ZXN0LCB0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NSZXNwb25zZUNvbHVtbnMgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHJcblx0XHR0aGlzLnJlcXVlc3QgPSBbXTtcclxuXHRcdHRoaXMucmVzcG9uc2UgPSB0aGlzLmVuYWJsZUNhY2hpbmcgP1xyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuc2V0Q29sdW1ucyh0aGlzLml0ZW1UeXBlLCB0cnVlLCByZXNwb25zZUNvbHVtbnMpIDpcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHR0aGlzLm1haW4ucHVzaCh0aGlzLmdldENvbHVtbkluZm8oY29sdW1uSWQsIGl0ZW1UeXBlLCBbXSwgbnVsbCwgcmVzcG9uc2VDb2x1bW5zKSk7XHJcblx0XHRcdHRoaXMucmVxdWVzdC5wdXNoKGNvbHVtbklkKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1JlcXVlc3RDb2x1bW5zIChyZXNwb25zZUNvbHVtbnMsIGluY2x1ZGVJZENvbHVtbikge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0aGlzLml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSA8b2JqZWN0W10+IHRoaXMucmVxdWVzdDsgLy8gd2UgY2FuIGFzc3VtZSByZXF1ZXN0Q29sdW1ucyBpcyBhbiBhcnJheSBoZXJlXHJcblxyXG5cdFx0dGhpcy5yZXNwb25zZSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3RDb2x1bW4gb2YgcmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8ocmVxdWVzdENvbHVtbiwgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uSW5mbyA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMubWFpbi5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdFx0aWYgKCFjb2x1bW5JbmZvLmlzTGVhZilcclxuXHRcdFx0XHR0aGlzLnJvb3QucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaW5jbHVkZUlkQ29sdW1uICYmIHRoaXMucmVzcG9uc2VbaXRlbVR5cGVdLmlkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbkluZm8oJ2lkJywgaXRlbVR5cGUsIG51bGwsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uSW5mbyAhPT0gbnVsbClcclxuXHRcdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UmVxdWVzdENvbHVtbkluZm8gKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucykge1xyXG5cdFx0Y29uc3QgcGFyc2VkQ29sdW1uID0gdGhpcy5jb2x1bW5VdGlsLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gcGFyc2VkQ29sdW1uLmlkO1xyXG5cclxuXHRcdGxldCByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV1bY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignTm8gYXBpIGNvbHVtbiBmb3IgcmVxdWVzdCBjb2x1bW4nLCBjb2x1bW5JZCwgJ2ZvciBpdGVtVHlwZScsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmVuYWJsZUNhY2hpbmcpXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gdGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbihpdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW4pO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdFJlc3BvbnNlID0gdGhpcy5yZXNwb25zZTtcclxuXHJcblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdGlmIChyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXVtjb2x1bW5JZF0gPSByZXNwb25zZUNvbHVtbjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgcGFyc2VkQ29sdW1uLmNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENvbHVtbkluZm8gKGNvbHVtbklkLCBpdGVtVHlwZSwgY2hpbGRyZW4sIHBhcmVudCwgcmVzcG9uc2VDb2x1bW5zKTogQ29sdW1uSW5mbyB7XHJcblx0XHRjb25zdCBjb2x1bW5VdGlsID0gdGhpcy5jb2x1bW5VdGlsO1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtbkluZm9GYWN0b3J5LmNvbnN0cnVjdChyZXNwb25zZUNvbHVtbiwgcGFyZW50KTtcclxuXHRcdGNvbnN0IGlzRGVyaXZlZCA9IHBhcmVudCAhPT0gbnVsbDtcclxuXHJcblx0XHRpZiAoaXNEZXJpdmVkKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWQucHVzaChjb2x1bW5JbmZvKTtcclxuXHRcdGVsc2UgLy8gd2UgY291bGQgcG9zc2libHkgYWRkIGRlcml2ZWQgY29sdW1ucyB0byAnbm90SXRlbSdcclxuXHRcdFx0dGhpc1tjb2x1bW5VdGlsLmlzSXRlbUNvbHVtbihyZXNwb25zZUNvbHVtbikgPyAnaXRlbScgOiAnbm90SXRlbSddLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGb3JtYXR0ZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmZvcm1hdHRlZFtpc0Rlcml2ZWQgPyAnZGVyaXZlZCcgOiAnbWFpbiddLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNGaWx0ZXJlZENvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuZmlsdGVyZWQucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc1NlYXJjaGFibGVDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLnNlYXJjaGFibGUucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRpZiAoY29sdW1uVXRpbC5pc0N1c3RvbUNvbHVtbihyZXNwb25zZUNvbHVtbikpXHJcblx0XHRcdHRoaXMuY3VzdG9tLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uLnR5cGUgPT09ICdsaW5rJylcclxuXHRcdFx0dGhpcy5saW5rID0gY29sdW1uSW5mbztcclxuXHJcblx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMubGVhZi5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdFx0cmV0dXJuIGNvbHVtbkluZm87XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sdW1uSW5mby5pdGVtVHlwZSA9IHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlO1xyXG5cdFx0Y29sdW1uSW5mby5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0Y29sdW1uSW5mby5pc0xlYWYgPSBmYWxzZTtcclxuXHJcblx0XHQvLyBjb2x1bW5zIGlzICpub3QqIHRydWVcclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW5JZCBvZiBjaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBjaGlsZEluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uSWQsXHJcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsXHJcblx0XHRcdFx0Y29sdW1uSW5mbyxcclxuXHRcdFx0XHRyZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChjaGlsZEluZm8gPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRjb2x1bW5JbmZvLmNoaWxkcmVuLnB1c2goY2hpbGRJbmZvKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uSW5mbztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBDT0xVTU5fU0VQRVJBVE9SLCBSRU5ERVJfQVNfU0VQRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgTG9jYWxDb2x1bW4sIFJlcXVlc3RDb2x1bW4sIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZXh0ZW5kLCBnZXRGaXJzdFByb3BlcnR5LCBpc0RlZmluZWQgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtblV0aWwge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbHVtblBhdGggKGNvbHVtbnMsIHJlbmRlckFzKSB7XHJcblx0XHRsZXQgc2VwZXJhdG9yID0gJyc7XHJcblx0XHRsZXQgcmVzdWx0ID0gJyc7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRyZXN1bHQgKz0gc2VwZXJhdG9yICsgY29sdW1uLmlkO1xyXG5cdFx0XHRzZXBlcmF0b3IgPSBDT0xVTU5fU0VQRVJBVE9SO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW5kZXJBcyAhPT0gbnVsbClcclxuXHRcdFx0cmVzdWx0ICs9IFJFTkRFUl9BU19TRVBFUkFUT1IgKyByZW5kZXJBcztcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RGF0ZUZvcm1hdE9wdGlvbnMgKGNvbHVtblR5cGUpIHtcclxuXHRcdGNvbnN0IG5vdyA9IG1vbWVudCgpO1xyXG5cclxuXHRcdGNvbnN0IGZvcm1hdHMgPSB7XHJcblx0XHRcdCdKLU0tWSc6IG5vdy5mb3JtYXQoJ0RELU1NLVlZWVknKSxcclxuXHRcdFx0J0otTSc6IG5vdy5mb3JtYXQoJ0RELU1NJyksXHJcblx0XHRcdCdqK0YrWSc6IG5vdy5mb3JtYXQoJ0QgTU1NIFlZWVknKSxcclxuXHRcdFx0J0QraitGK1knOiBub3cuZm9ybWF0KCdkZGRkIEQgTU1NIFlZWVknKSxcclxuXHRcdFx0J0YnOiBub3cuZm9ybWF0KCdNTU0nKSxcclxuXHRcdFx0J2YnOiBub3cuZm9ybWF0KCdNTU1NJyksXHJcblx0XHRcdCdEJzogbm93LmZvcm1hdCgnZGRkZCcpLFxyXG5cdFx0XHQnZCc6IG5vdy5mb3JtYXQoJ2RkZCcpXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmIChjb2x1bW5UeXBlID09PSAnZGF0ZXRpbWUnKVxyXG5cdFx0XHRleHRlbmQoZm9ybWF0cywge1xyXG5cdFx0XHRcdCdKLU0tWStIOmknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZIEhIOm1tJyksXHJcblx0XHRcdFx0J0otTStIOmknOiBub3cuZm9ybWF0KCdERC1NTSBISDptbScpLFxyXG5cdFx0XHRcdCdqK0YrWStIOmknOiBub3cuZm9ybWF0KCdERCBNTU1NIFkgSEg6bW0nKSxcclxuXHRcdFx0XHQnRCtqK0YrWStIOmknOiBub3cuZm9ybWF0KCdkZGRkIEREIE1NTSBZIEhIOm1tJyksXHJcblx0XHRcdFx0J0g6aSc6IG5vdy5mb3JtYXQoJ0hIOm1tJyksXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBmb3JtYXRzO1xyXG5cdH1cclxuXHJcblx0aXNTdHJpbmdDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRcdC8vIGNhc2UgJ2h0bWwnOiAvLyBUT0RPOiBzb3J0IG9uIGZpbHRlcmVkIHZhbHVlXHJcblx0XHRcdFx0Ly8gY2FzZSAnZW51bSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNGbG9hdENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6IC8vIGZsb2F0aW5nIHBvaW50IHR5cGVzXHJcblx0XHRcdGNhc2UgJ3ZvbHVtZSc6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZGltZW5zaW9uJzpcclxuXHRcdFx0Y2FzZSAncG93ZXInOlxyXG5cdFx0XHRjYXNlICdjdXJyZW50JzpcclxuXHRcdFx0Y2FzZSAncHJpY2UnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0ludENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2ludCc6IC8vIGludGVnZXIgdHlwZXNcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAncXVhbnRpdHknOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzTnVtYmVyQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiB0aGlzLmlzRmxvYXRDb2x1bW4oY29sdW1uKSB8fCB0aGlzLmlzSW50Q29sdW1uKGNvbHVtbik7XHJcblx0fVxyXG5cclxuXHRpc0N1c3RvbUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLmZpZWxkdHlwZSA9PT0gJ2N1c3RvbWZpZWxkJztcclxuXHR9XHJcblxyXG5cdGlzSXRlbUNvbHVtbiAoY29sdW1uLCBpbmNsdWRlSWQgPSB0cnVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2lkJzpcclxuXHRcdFx0XHRyZXR1cm4gaW5jbHVkZUlkO1xyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEYXRlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1JlbmRlcmVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRmlsdGVyZWRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0Ly8gdWdseSBoYWNrIDotKFxyXG5cdFx0aWYgKGNvbHVtbi5pZCA9PT0gJ3N0YWZmZWwnKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmdlbmVyYXRvciAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0Y2FzZSAndGV4dHJlcGxhY2UnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRm9ybWF0dGVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzU2VsZWN0YWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2Jsb2InOlxyXG5cdFx0XHRjYXNlICdjb29yZGluYXRlJzpcclxuXHRcdFx0Y2FzZSAnZm9yY2V1cGRhdGUnOlxyXG5cdFx0XHRjYXNlICdpZCc6XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRjYXNlICdvcmRlcic6XHJcblx0XHRcdGNhc2UgJ3BhcmVudGlkJzpcclxuXHRcdFx0Y2FzZSAncGFyZW50dHlwZSc6XHJcblx0XHRcdGNhc2UgJ3Bhc3N3b3JkJzpcclxuXHRcdFx0Y2FzZSAndG9rZW4nOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGhhc0xvY2F0aW9uUHJvcGVydHkgKGNvbHVtbiwgbG9jYXRpb24pIHtcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1iaXR3aXNlXHJcblx0XHRyZXR1cm4gKGxvY2F0aW9uICYgY29sdW1uLmxvY2F0aW9uKSAhPT0gMDtcclxuXHR9XHJcblxyXG5cdGlzRWRpdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0aWYgKGNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGlzU2VhcmNoYWJsZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdodG1sJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXREZWZhdWx0V2VpZ2h0IChjb2x1bW4pIHtcclxuXHRcdC8vIFx0XHRcdGNvbnNvbGUubG9nKCdnZXREZWZhdWx0V2VpZ2h0JywgY29sdW1uKTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RvdWJsZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAnYm9vbCc6XHJcblx0XHRcdGNhc2UgJ2ludCc6XHJcblx0XHRcdGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdFx0cmV0dXJuIDAuNTtcclxuXHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdpdGVtJzpcclxuXHRcdFx0Y2FzZSAnbGluayc6XHJcblx0XHRcdFx0cmV0dXJuIDEuNTtcclxuXHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gMjtcclxuXHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIDE7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDb21wYXJhdG9ycyAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3dlaWdodCc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJz4nLCAnPCddO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiBbJz4nLCAnPCddO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBbJz0nLCAnIT0nXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHJldHVybnMgd2hldGhlciB0aGUgZmlyc3QgY29sdW1uIHNldCBpcyBhIHN1YnNldCBvZiB0aGUgc2Vjb25kXHJcblx0aXNDb2x1bW5TdWJzZXQgKGZpcnN0LCBzZWNvbmQsIHNlY29uZFRydWUpIHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiBzZWNvbmRUcnVlO1xyXG5cclxuXHRcdC8vIHdoZW4gc2Vjb25kVHJ1ZSBpcyB0aGUgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrIGZvciBkZXJpdmVkIGNvbHVtbnNcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGZpcnN0KSB7XHJcblx0XHRcdGlmICghdGhpcy5jb250YWluc0NvbHVtbihjb2x1bW4sIHNlY29uZCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Y29udGFpbnNDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPT09ICdzdHJpbmcnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdCF0aGlzLmNvbnRhaW5zQ29sdW1uKFxyXG5cdFx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF1bY29sdW1uLmlkXVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZSAoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IHBhcnNlZENvbHVtbi5jaGlsZHJlbjtcclxuXHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2VDb2x1bW5NYXBbaXRlbVR5cGVdO1xyXG5cdFx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW5zID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbcGFyc2VkQ29sdW1uLmlkXTtcclxuXHJcblx0XHRcdGlmIChyZXNwb25zZUNvbHVtbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGlmIChjaGlsZHJlbi5sZW5ndGggPiAwICYmICF0aGlzLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShyZXNwb25zZUNvbHVtbi5pdGVtVHlwZSwgY2hpbGRyZW4sIHJlc3BvbnNlQ29sdW1uTWFwKSlcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRjb3B5UmVxdWVzdENvbHVtbnMgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKTogUmVxdWVzdENvbHVtbnMge1xyXG5cdFx0aWYgKGNvbHVtbnMgPT09IHRydWUpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdDogUmVxdWVzdENvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjb2x1bW4pKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29weVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW46IFJlcXVlc3RDb2x1bW4pOiBSZXF1ZXN0Q29sdW1uIHtcclxuXHRcdGNvbnN0IGNvbHVtbiA9IHRoaXMucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gY29sdW1uLmlkO1xyXG5cclxuXHRcdGNvbnN0IGNoaWxkcmVuOiBSZXF1ZXN0Q29sdW1uW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbilcclxuXHRcdFx0Y2hpbGRyZW4ucHVzaCh0aGlzLmNvcHlSZXF1ZXN0Q29sdW1uKGNoaWxkQ29sdW1uKSk7XHJcblxyXG5cdFx0cmV0dXJuIHtbY29sdW1uLmlkXTogY2hpbGRyZW59O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlmZmVyZW5jZTogY29sdW1ucyB0aGF0IGFyZSBpbiBzZWNvbmQsIGJ1dCBub3QgaW4gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7QXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nICdtZXJnZWQnIGFuZCAnZGlmZmVyZW5jZScgcHJvcGVydGllc1xyXG5cdCAqL1xyXG5cdG1lcmdlUmVxdWVzdENvbHVtbnMgKGZpcnN0OiBSZXF1ZXN0Q29sdW1ucywgc2Vjb25kOiBSZXF1ZXN0Q29sdW1ucyk6IHttZXJnZWQ6IFJlcXVlc3RDb2x1bW5zLCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1uc30ge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB0cnVlKSAvLyA9PT0gb3BlcmF0b3IgbmVlZGVkIGhlcmVcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IFtdfTtcclxuXHJcblx0XHRpZiAoc2Vjb25kID09PSB0cnVlKVxyXG5cdFx0XHRyZXR1cm4ge21lcmdlZDogdHJ1ZSwgZGlmZmVyZW5jZTogdHJ1ZX07XHJcblxyXG5cdFx0Y29uc3QgbWVyZ2VkOiBSZXF1ZXN0Q29sdW1ucyA9IHRoaXMuY29weVJlcXVlc3RDb2x1bW5zKGZpcnN0KTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2U6IFJlcXVlc3RDb2x1bW5zID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygc2Vjb25kKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oY29sdW1uLCBtZXJnZWQpO1xyXG5cclxuXHRcdFx0aWYgKGFkZGVkQ29sdW1uICE9PSBudWxsKVxyXG5cdFx0XHRcdGRpZmZlcmVuY2UucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5maW5kQ29sdW1uKGNvbHVtbi5pZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcclxuXHRcdFx0ZGVzdGluYXRpb24ucHVzaChyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0cmV0dXJuIHJlcXVlc3RDb2x1bW47XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRkZXN0aW5hdGlvbltjb2x1bW5JbmRleF0gPSB7XHJcblx0XHRcdFx0W2NvbHVtbi5pZF06IFtdXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWRkZWRDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGNvbnN0IGFkZGVkQ29sdW1uID0gdGhpcy5tZXJnZVJlcXVlc3RDb2x1bW4oXHJcblx0XHRcdFx0Y2hpbGRDb2x1bW4sXHJcblx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRhZGRlZENvbHVtbnMucHVzaChhZGRlZENvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFkZGVkQ29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdFtjb2x1bW4uaWRdOiBhZGRlZENvbHVtbnNcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwYXJzZVJlcXVlc3RDb2x1bW4gKHJlcXVlc3RDb2x1bW4pOiB7aWQ6IHN0cmluZywgY2hpbGRyZW46IFJlcXVlc3RDb2x1bW5bXX0ge1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gdHlwZW9mIHJlcXVlc3RDb2x1bW4gPT09ICdzdHJpbmcnO1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBpc0xlYWYgPyByZXF1ZXN0Q29sdW1uIDogZ2V0Rmlyc3RQcm9wZXJ0eShyZXF1ZXN0Q29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpZDogY29sdW1uSWQsXHJcblx0XHRcdGNoaWxkcmVuOiBpc0xlYWYgPyBbXSA6IHJlcXVlc3RDb2x1bW5bY29sdW1uSWRdXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTWVyZ2VzIHR3byBzZXRzIG9mIHJlc3BvbnNlIGNvbHVtbnMuXHJcblx0ICogQHBhcmFtIHtvYmplY3R9IGZpcnN0XHJcblx0ICogQHBhcmFtIHtvYmplY3R9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIGEgJ21lcmdlZCcgYW5kIGEgJ2RpZmZlcmVuY2UnIHByb3BlcnR5LlxyXG5cdCAqL1xyXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGZpcnN0KSB7XHJcblx0XHRcdGlmIChzZWNvbmRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gZmlyc3RbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgbWVyZ2VSZXN1bHQgPSB0aGlzLm1lcmdlUmVzcG9uc2VDb2x1bW5NYXAoXHJcblx0XHRcdFx0Zmlyc3RbaXRlbVR5cGVdLFxyXG5cdFx0XHRcdHNlY29uZFtpdGVtVHlwZV1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdG1lcmdlZFtpdGVtVHlwZV0gPSBtZXJnZVJlc3VsdC5tZXJnZWQ7XHJcblx0XHRcdGRpZmZlcmVuY2VbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQuZGlmZmVyZW5jZTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHNlY29uZCkge1xyXG5cdFx0XHRpZiAoZmlyc3RbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gc2Vjb25kW2l0ZW1UeXBlXTtcclxuXHRcdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IGZpcnN0XHJcblx0ICogQHBhcmFtIHthcnJheX0gc2Vjb25kXHJcblx0ICogQHJldHVybnMge29iamVjdH0gZGlmZmVyZW5jZTogdGhlIGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0LlxyXG5cdCAqL1xyXG5cdG1lcmdlUmVzcG9uc2VDb2x1bW5NYXAgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdGNvbnN0IG1lcmdlZCA9IHt9O1xyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gZmlyc3QpXHJcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBmaXJzdFtjb2x1bW5JZF07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiBzZWNvbmQpIHtcclxuXHRcdFx0aWYgKGlzRGVmaW5lZChmaXJzdFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bWVyZ2VkW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XHJcblx0XHRcdGRpZmZlcmVuY2VbY29sdW1uSWRdID0gc2Vjb25kW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ge21lcmdlZDogbWVyZ2VkLCBkaWZmZXJlbmNlOiBkaWZmZXJlbmNlfTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWxDb2x1bW5JZCAoY29sdW1uSWQpIHtcclxuXHRcdHJldHVybiBjb2x1bW5JZC5zdWJzdHJpbmcoMCwgMikgPT09ICdfXyc7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzQ29uZmlnQ29sdW1ucyAoY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNMb2NhbENvbHVtbklkKGNvbHVtbikpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4odGhpcy5wYXJzZUNvbmZpZ0NvbHVtbihjb2x1bW4pLCByZXF1ZXN0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMb2NhbENvbmZpZ0NvbHVtbnMgKGNvbmZpZ0NvbHVtbnMsIGxvY2FsQ29sdW1ucywgcmVtb3RlQ29sdW1uQ2FsbGJhY2ssIGxvY2FsQ29sdW1uQ2FsbGJhY2spIHtcclxuXHRcdGNvbnN0IGxvY2FsQ29sdW1uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBsb2NhbENvbHVtbiBvZiBsb2NhbENvbHVtbnMpXHJcblx0XHRcdGxvY2FsQ29sdW1uTWFwW2xvY2FsQ29sdW1uLmlkXSA9IGxvY2FsQ29sdW1uO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZmlnSWQgb2YgY29uZmlnQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBwYXJzZWRDb25maWdJZCA9IGNvbmZpZ0lkLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpO1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbmZpZ0lkWzBdO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW5JZCkpIHtcclxuXHRcdFx0XHRyZW1vdGVDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgY29sdW1uSWQsIHBhcnNlZENvbmZpZ0lkWzFdKTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIGNvbHVtbiBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGluIGxvY2FsQ29sdW1uc1xyXG5cdFx0XHRpZiAobG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRsb2NhbENvbHVtbkNhbGxiYWNrKGNvbmZpZ0lkLCBsb2NhbENvbHVtbk1hcFtjb2x1bW5JZF0pO1xyXG5cdFx0XHRkZWxldGUgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogbW92ZSB0byBmcm9udC1lbmRcclxuXHRjb25zb2xpZGF0ZUNvbHVtbnMgKFxyXG5cdFx0Y29uZmlnQ29sdW1ucyxcclxuXHRcdGxvY2FsQ29sdW1ucyxcclxuXHRcdGFkZFJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uW11cclxuXHQpIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkTG9jYWxDb2x1bW5zOiBMb2NhbENvbHVtbltdID0gW107XHJcblx0XHRsZXQgcmVxdWVzdENvbHVtbnMgPSA8UmVxdWVzdENvbHVtbltdPiB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhhZGRSZXF1ZXN0Q29sdW1ucyk7XHJcblxyXG5cdFx0dGhpcy5wcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zKFxyXG5cdFx0XHRjb25maWdDb2x1bW5zLFxyXG5cdFx0XHRsb2NhbENvbHVtbnMsXHJcblx0XHRcdChfLCBjb2x1bW5JZCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihjb2x1bW5JZC5zcGxpdChDT0xVTU5fU0VQRVJBVE9SKSwgcmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoXywgbG9jYWxDb2x1bW4pID0+IHtcclxuXHRcdFx0XHRmaWx0ZXJlZExvY2FsQ29sdW1ucy5wdXNoKGxvY2FsQ29sdW1uKTtcclxuXHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyA9IDxSZXF1ZXN0Q29sdW1uW10+IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1ucyhcclxuXHRcdFx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRcdFx0bG9jYWxDb2x1bW4udmFsdWVPcHRpb25zLnJlcXVlc3RDb2x1bW5zXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHtyZXF1ZXN0OiByZXF1ZXN0Q29sdW1ucywgbG9jYWw6IGZpbHRlcmVkTG9jYWxDb2x1bW5zfTtcclxuXHR9XHJcblxyXG5cdHBhcnNlQ29uZmlnQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHJldHVybiBjb2x1bW4uc3BsaXQoUkVOREVSX0FTX1NFUEVSQVRPUilbMF0uc3BsaXQoQ09MVU1OX1NFUEVSQVRPUik7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzQ29uZmlnQ29sdW1uIChjb2x1bW5BcnJheSwgZGVzdGluYXRpb24pIHtcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uQXJyYXlbMF07XHJcblx0XHRjb25zdCBpc0xlYWYgPSBjb2x1bW5BcnJheS5sZW5ndGggPT09IDE7XHJcblxyXG5cdFx0aWYgKGlzTGVhZikge1xyXG5cdFx0XHRpZiAoZGVzdGluYXRpb24uaW5kZXhPZihjb2x1bW5JZCkgPT09IC0xKVxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uLnB1c2goY29sdW1uSWQpO1xyXG5cclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbk9iamVjdChjb2x1bW5JZCwgZGVzdGluYXRpb24pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5JbmRleCA9PT0gLTEpIHtcclxuXHRcdFx0Y29sdW1uSW5kZXggPSBkZXN0aW5hdGlvbi5wdXNoKHtcclxuXHRcdFx0XHRbY29sdW1uSWRdOiBbXVxyXG5cdFx0XHR9KSAtIDE7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKFxyXG5cdFx0XHRjb2x1bW5BcnJheS5zbGljZSgxKSxcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbklkXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGZpbmRDb2x1bW5PYmplY3QgKGNvbHVtbklkLCBhcnJheSkge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRpZiAoZ2V0Rmlyc3RQcm9wZXJ0eShhcnJheVtpXSkgPT09IGNvbHVtbklkKVxyXG5cdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAtMTtcclxuXHR9XHJcblxyXG5cdGZpbmRDb2x1bW4gKGNvbHVtbklkLCBhcnJheSkge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW4gPSBhcnJheVtpXTtcclxuXHJcblx0XHRcdGlmICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRcdGlmIChjb2x1bW4gPT09IGNvbHVtbklkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGk7XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoZ2V0Rmlyc3RQcm9wZXJ0eShjb2x1bW4pID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENoYW5nZXNDb21waWxhdGlvbiwgQ29sbGVjdGlvbkNhY2hlLCBDb2xsZWN0aW9uSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ3JlYXRlUmVxdWVzdEVudHJ5LCBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdCB7XHJcblx0cmVxdWVzdHM6IENyZWF0ZVJlcXVlc3RFbnRyeVtdID0gW107XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb21waWxhdGlvbjogQ2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdFx0cHJpdmF0ZSBsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBwYXJhbWV0ZXJNYXA6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsXHJcblx0XHRwcml2YXRlIGJyZWFrdXBCeVBhcmVudCA9IGZhbHNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRmaW5hbGl6ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZTogQ3JlYXRlUmVxdWVzdEVudHJ5KSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cmllcyA9IHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHJlcXVlc3RSZXNvdXJjZS5jb2x1bW5zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0UmVzb3VyY2U7XHJcblx0fVxyXG5cclxuXHRzZXRSZXF1ZXN0UGFyZW50IChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0UmVzb3VyY2UucmVxdWVzdDtcclxuXHJcblx0XHRpZiAocGFyZW50VHlwZSA9PT0gJ1ZvaWQnKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmVxdWVzdC5wYXJlbnRUeXBlID0gcGFyZW50VHlwZTtcclxuXHRcdHJlcXVlc3QucGFyZW50SWQgPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJ1biAoKSB7XHJcblx0XHRpZiAodGhpcy5icmVha3VwQnlQYXJlbnQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRUeXBlIGluIHRoaXMuY29tcGlsYXRpb24pIHtcclxuXHRcdFx0XHRjb25zdCBwYXJlbnRNYXAgPSB0aGlzLmNvbXBpbGF0aW9uW3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHBhcmVudE1hcCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50SWQpKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldFJlcXVlc3RQYXJlbnQocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSA/IHBhcmVudElkIDogbnVsbCxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdFJlc291cmNlXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0UmVzb3VyY2UgPSB0aGlzLmluaXRpYWxpemVSZXF1ZXN0KCk7XHJcblx0XHRcdFx0Y29uc3QgaGFzUGFyZW50ID0gdGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGxldCB2YWxpZFJlcXVlc3QgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KFxyXG5cdFx0XHRcdFx0XHRwYXJlbnRNYXBbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHRoYXNQYXJlbnQgPyBwYXJlbnRJZCA6IG51bGwsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHR2YWxpZFJlcXVlc3QgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHZhbGlkUmVxdWVzdClcclxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdHMucHVzaCh0aGlzLmZpbmFsaXplUmVxdWVzdChyZXF1ZXN0UmVzb3VyY2UpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlcXVlc3RzO1xyXG5cdH1cclxuXHJcblx0aW5pdGlhbGl6ZVJlcXVlc3QgKCk6IENyZWF0ZVJlcXVlc3RFbnRyeSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRyZXF1ZXN0OiB7XHJcblx0XHRcdFx0cmVxdWVzdFR5cGU6ICdjcmVhdGUnLFxyXG5cdFx0XHRcdGl0ZW1zOiB7fSxcclxuXHRcdFx0XHRjb2x1bW5zOiB7fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2x1bW5zOiB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpLFxyXG5cdFx0XHRpdGVtczoge30sXHJcblx0XHRcdGNvbGxlY3Rpb25zOiB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0W3RoaXMubG9jYWxDb2xsZWN0aW9uQ2FjaGUsIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllc10sXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRmYWxzZVxyXG5cdFx0XHQpXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHRlbmRSZXF1ZXN0IChpdGVtRW50cmllcywgcmVxdWVzdFBhcmVudElkLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IGRlc3RpbmF0aW9uLnJlcXVlc3Q7XHJcblx0XHRjb25zdCBpdGVtRW50cnlNYXAgPSBkZXN0aW5hdGlvbi5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChyZXF1ZXN0Lml0ZW1UeXBlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0XHRyZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtRW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHRjb25zdCBjaGlsZEVudHJpZXMgPSBnZXRQYXRoKHRoaXMuY29tcGlsYXRpb24sIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3QuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcclxuXHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJzID0gZ2V0UGF0aCh0aGlzLnBhcmFtZXRlck1hcCwgW2l0ZW1UeXBlLCBpdGVtSWRdKTtcclxuXHJcblx0XHRcdFx0bGV0IGxpbmtzO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdFBhcmVudElkICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0cmVxdWVzdC5wYXJlbnRJZFtpdGVtSWRdID0gcmVxdWVzdFBhcmVudElkO1xyXG5cclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5jb2x1bW5zLmV4cGFuZChpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sbGVjdGlvbnMuZXhwYW5kKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHRcdFx0XHRpdGVtUmVxdWVzdC5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuXHJcblx0XHRcdFx0aWYgKGNoaWxkRW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGxpbmtzID0gaXRlbVJlcXVlc3QubGlua3MgPSB7fTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRFbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdID0gW107XHJcblxyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjaGlsZElkIGluIGNoaWxkRW50cmllc1tjaGlsZFR5cGVdKVxyXG5cdFx0XHRcdFx0XHRsaW5rc1tjaGlsZFR5cGVdLnB1c2goY2hpbGRJZCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR0aGlzLmV4dGVuZFJlcXVlc3QoY2hpbGRFbnRyaWVzLCBudWxsLCBkZXN0aW5hdGlvbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcblx0Q29sbGVjdGlvbkNhY2hlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvbk1hdGNoZXIsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdEl0ZW1DYWNoZSxcblx0SXRlbUVudHJ5U2VydmljZSxcblx0SXRlbUhhbmRsZXIsXG5cdEl0ZW1SZXF1ZXN0U2VydmljZSxcblx0S2V5U2VydmljZSxcblx0TG9jYWxDYWNoZSxcblx0UXVlcnlTZXJ2aWNlXG59IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBMb2NhbENhY2hlRmFjdG9yeSwgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeVxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsXG5cdENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwLFxuXHRDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRJdGVtRGVmaW5pdGlvbixcblx0SXRlbUlkLFxuXHRJdGVtSWRDb252ZXJzaW9uTWFwLFxuXHRJdGVtT3B0aW9ucyxcblx0SXRlbVJlc291cmNlSXRlbVR5cGVNYXAsXG5cdEl0ZW1UeXBlLFxuXHRTdGF0ZUtleVR5cGUsXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsXG5cdFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcblxuZXhwb3J0IGNsYXNzIEl0ZW1BZG1pbmlzdHJhdG9yIHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxuXHRcdHByaXZhdGUgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZUZhY3Rvcnk6IExvY2FsQ2FjaGVGYWN0b3J5LFxuXHRcdHByaXZhdGUgbG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgbW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeTogTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRwcml2YXRlIHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxuXHQpIHtcblxuXHR9XG5cblx0Ly8gc3RhdGVLZXkgY2FuIGJlIGEga2V5d29yZCBvciBhIGxvY2FsIGlkIChpbiBjYXNlIG9mIGEgcmVmcmVzaClcblx0Z2V0SXRlbURlZmluaXRpb24gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgc3RhdGVLZXk6IG51bWJlciB8IHN0cmluZywgb3B0aW9uczogSXRlbU9wdGlvbnMpOiBJdGVtRGVmaW5pdGlvbiB7XG5cdFx0Y29uc3QgcGFyc2VkU3RhdGVLZXkgPSB0aGlzLmtleVNlcnZpY2UucGFyc2VTdGF0ZUtleSg8c3RyaW5nPiBzdGF0ZUtleSk7XG5cblx0XHRpZiAocGFyc2VkU3RhdGVLZXkgPT09IG51bGwpXG5cdFx0XHRyZXR1cm4ge2l0ZW1UeXBlOiBpdGVtVHlwZSwgaXRlbUlkOiA8bnVtYmVyPiBzdGF0ZUtleSwgb3B0aW9uczogb3B0aW9ucywgaXNOZXc6IGZhbHNlfTtcblxuXHRcdGxldCBpdGVtSWQ7XG5cblx0XHRzd2l0Y2ggKHBhcnNlZFN0YXRlS2V5LnR5cGUpIHtcblx0XHRcdGNhc2UgU3RhdGVLZXlUeXBlLk5ldzpcblx0XHRcdFx0Ly8gaWYgKHN0YXRlS2V5LnRlbXBsYXRlLmxlbmd0aCA+IDApXG5cdFx0XHRcdC8vIFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPSB7dHlwZTogc3RhdGVLZXkudGVtcGxhdGV9O1xuXG5cdFx0XHRcdGl0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTdGF0ZUtleVR5cGUuRHVwbGljYXRlOlxuXHRcdFx0XHRvcHRpb25zLmR1cGxpY2F0ZSA9IHBhcnNlZFN0YXRlS2V5Lml0ZW1JZDtcblxuXHRcdFx0XHRpZiAob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkgLy8gdG9kbzogcmVmYWN0b3IgdGhpc1xuXHRcdFx0XHRcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge307XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLml0ZW0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID0gcGFyc2VkU3RhdGVLZXkuaXRlbUlkO1xuXG5cdFx0XHRcdGl0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbER1cGxpY2F0ZUlkKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdHJldHVybiB7aXRlbVR5cGU6IGl0ZW1UeXBlLCBpdGVtSWQ6IGl0ZW1JZCwgb3B0aW9uczogb3B0aW9ucywgaXNOZXc6IHRydWV9O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbk1hdGNoZXIgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWRkVG9UYWI6IGJvb2xlYW4pOiBDb2xsZWN0aW9uTWF0Y2hlciB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIHRydWUpO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdC8vIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB0aGVyZSBhcmUgbm8gY29sbGVjdGlvbnMgdG8gYWRkIHRoZSBpdGVtIHRvLCBidXQgd2Ugc3RpbGwgd2FudCB0byBzYXZlIHRoZSBpdGVtXG5cdFx0XHRpZiAoYWRkVG9UYWIpXG5cdFx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMuYWRkKGl0ZW1FbnRyeSk7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb2xsZWN0aW9uTWF0Y2hlcjtcblx0fVxuXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoVGl0bGUoaXRlbVR5cGUsIGl0ZW1JZCwgZGVmZXJSZXF1ZXN0LCB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcyk7XG5cdH1cblxuXHRnZXRJdGVtQnlJZCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZCxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQvLyB0b2RvIHR5cGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCB8IEl0ZW1FbnRyeVxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKFxuXHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLmxpbmtlZCAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLm1haW4gOlxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UsXG5cdFx0XHRcdFx0b3B0aW9ucyxcblx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IG51bWJlcltdLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtcyhcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0aXRlbUlkcyxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtc0J5UXVlcnkgKGl0ZW1UeXBlOiBzdHJpbmcsIHF1ZXJ5OiBhbnksIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge307XG5cblx0XHRyZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0gPSBlbnRyeU9wdGlvbnMuY29sdW1ucztcblxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRQYXJlbnRDb25kaXRpb24ocXVlcnksIGVudHJ5T3B0aW9ucy5wYXJlbnQpLFxuXHRcdFx0cmVxdWVzdENvbHVtbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbaXRlbVR5cGVdLFxuXHRcdFx0XHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQsXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgZW50cnlPcHRpb25zLmNvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cmllczogSXRlbUVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlcyhpdGVtRW50cmllcywgb3B0aW9ucyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldER1cGxpY2F0ZUJ5SWQgKGl0ZW1UeXBlOiBzdHJpbmcsIGR1cGxpY2F0ZUlkOiBudW1iZXIsIG9wdGlvbnM6IGFueSkge1xuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRvcHRpb25zID0ge307XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0Y29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZ2V0SXRlbURlZmluaXRpb24oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXREdXBsaWNhdGVTdGF0ZUtleShkdXBsaWNhdGVJZCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzLmdldEl0ZW1CeURlZihkZWZpbml0aW9uLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJldHVybiB2YWx1ZSBpcyBkZXBlbmRlZCBvbiB0aGUgcmV0dXJuIGxpbmtzIGJvb2xlYW4uIHRydWUgcmV0dXJucyB0aGUgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcC5cblx0ICogVGhlIHR5cGUgaGFzIHRvIGJlIGFzc2VydGVkIGF0IHVzZSBzaW5jZSB5b3Ugb25seSBrbm93IHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtVHlwZVxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHJldHVybkxpbmtzXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNSb290XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+fVxuXHQgKi9cblx0Z2V0TmV3UmVzb3VyY2UgKFxuXHRcdGl0ZW1UeXBlOiBzdHJpbmcsXG5cdFx0b3B0aW9uczogYW55ID0ge30sXG5cdFx0cmV0dXJuTGlua3M6IGJvb2xlYW4gPSBmYWxzZSxcblx0XHRpc1Jvb3Q/OiBib29sZWFuXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlPiB8IFByb21pc2U8VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdG9wdGlvbnMuZWRpdCA9IHRydWU7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyeVJlc291cmNlOiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG1haW4gPSBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnlSZXNvdXJjZS5tYWluLCBvcHRpb25zLCBpc1Jvb3QsIHRydWUpO1xuXHRcdFx0XHRjb25zdCBsaW5rZWQgPSB0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQsIG9wdGlvbnMsIHRydWUpOyAvLyBkbyB0aGlzIGJlZm9yZWhhbmRcblxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuTGlua3MgPyB7bWFpbjogbWFpbiwgbGlua2VkOiBsaW5rZWR9IDogbWFpbjtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkRlZiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGl0ZW1UeXBlOiBpdGVtVHlwZSxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSwgLy8gd2UgbmVlZCB0aGUgZGVmYXVsdCBjb2x1bW4gdmFsdWVcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNEZWYgKGxpbmtUeXBlOiBzdHJpbmcsIGxpbmtJZEFycmF5OiBudW1iZXJbXSwgaXRlbVR5cGU6IHN0cmluZywgbGlua0ZpZWxkOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRsaW5rVHlwZTogbGlua1R5cGUsXG5cdFx0XHRsaW5rSWRBcnJheTogbGlua0lkQXJyYXksXG5cdFx0XHRsaW5rRmllbGQ6IGxpbmtGaWVsZCxcblx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0ZW50cnk6IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdFx0cmVzb3VyY2U6IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uIChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxuXHRcdFx0XHRcdGVudHJ5LFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRDb2xsZWN0aW9uRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdGVudHJ5ID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKGVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2UpO1xuXG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAZGVwcmVjYXRlZCwgdXNlIGBwYXJlbnRgIGluIG9wdGlvbnNcblx0ICovXG5cdGdldExpbmtDb2xsZWN0aW9uIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWQ6IG51bWJlciwgaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgZW50cnlPcHRpb25zID0gdGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xuXG5cdFx0ZW50cnlPcHRpb25zLnBhcmVudCA9IHtpdGVtVHlwZTogbGlua1R5cGUsIGl0ZW1JZDogbGlua0lkfTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmZldGNoKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRlbnRyeU9wdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChlbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdFx0XHRlbnRyeSxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlUGFyZW50SWRNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXksXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRMaW5rQ29sbGVjdGlvbnNGcm9tRGVmIChkZWZpbml0aW9uOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYmF0Y2hGZXRjaChcblx0XHRcdGRlZmluaXRpb24ubGlua1R5cGUsXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtJZEFycmF5LFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5lbnRyeSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5kZWZlcnJlZENvbGxlY3Rpb25zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2VzKFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxuXHRcdFx0XHRcdGRlZmluaXRpb24ub3B0aW9ucy5yZXNvdXJjZVxuXHRcdFx0XHQpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXRBbGxMaW5rQ29sbGVjdGlvbnMgKGxpbmtUeXBlOiBzdHJpbmcsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXA+IHtcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShsaW5rVHlwZSwge30sIHt9KVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRMaW5rQ29sbGVjdGlvbnMoXG5cdFx0XHRcdFx0XHRsaW5rVHlwZSxcblx0XHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2xpbmtUeXBlXSxcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0XHRcdFx0b3B0aW9uc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdFx0KTtcblx0fVxuXG5cdGdldEl0ZW1CeURlZiAoZGVmaW5pdGlvbjogSXRlbURlZmluaXRpb24sIGlzUm9vdD86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaEl0ZW0oXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtSWQsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoZGVmaW5pdGlvbi5vcHRpb25zKSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXNcblx0XHQpLnRoZW4oXG5cdFx0XHRpdGVtRW50cnlDb21wb3VuZCA9PiB7XG5cdFx0XHRcdGxldCBtYWluRW50cnk6IEl0ZW1FbnRyeTtcblxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5Q29tcG91bmQgaW5zdGFuY2VvZiBJdGVtRW50cnkpXG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gaXRlbUVudHJ5Q29tcG91bmQ7XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucHJvY2Vzc0xpbmtlZEl0ZW1zKGl0ZW1FbnRyeUNvbXBvdW5kLmxpbmtlZCwgZGVmaW5pdGlvbi5vcHRpb25zLCBmYWxzZSk7XG5cdFx0XHRcdFx0bWFpbkVudHJ5ID0gaXRlbUVudHJ5Q29tcG91bmQubWFpbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShtYWluRW50cnksIGRlZmluaXRpb24ub3B0aW9ucywgaXNSb290LCBkZWZpbml0aW9uLmlzTmV3KTsgLy8gaXNSb290XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGNsb25lSXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIG9wdGlvbnM6IGFueSk6IEl0ZW1SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkU2luZ2xlSXRlbShpdGVtUmVzb3VyY2UuZW50cnkuY2xvbmUoKSwgb3B0aW9ucywgZmFsc2UpO1xuXHR9XG5cblx0Y2xvbmVDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSwgb3B0aW9uczogYW55LCBjb252ZXJzaW9uTWFwOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdGxldCBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZClcblx0XHRcdHBhcmVudCA9IG51bGw7XG5cblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmVudHJ5LmNsb25lKHBhcmVudCwgY29udmVyc2lvbk1hcCksXG5cdFx0XHRvcHRpb25zXG5cdFx0KTtcblx0fVxuXG5cdHNhdmVDdXJyZW50TG9jYWxDYWNoZSAoXG5cdFx0Y2xvc2VUYWI/OiBib29sZWFuLFxuXHRcdHBhcmFtZXRlcnM/OiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcblx0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnNhdmUoY2xvc2VUYWIsIHBhcmFtZXRlcnMsIGJyZWFrdXBCeVBhcmVudCwgb25BZnRlckNyZWF0ZUNhbGxiYWNrKTtcblx0fVxuXG5cdGdldEN1cnJlbnRDb2xsZWN0aW9ucyAoKTogQ29sbGVjdGlvbkNhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkuY29sbGVjdGlvbnM7XG5cdH1cblxuXHRnZXRDdXJyZW50SXRlbXMgKCk6IEl0ZW1DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLml0ZW1zO1xuXHR9XG5cblx0Z2V0Q3VycmVudENoYW5nZXMgKCkge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdGlmIChsb2NhbENhY2hlLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2l0ZW1BZG1pbmlzdHJhdG9yOiBObyByb290IGl0ZW0gZm9yIGxvY2FsIGNhY2hlICcgKyBsb2NhbENhY2hlLmlkKTtcblxuXHRcdHJldHVybiB0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkuY29uc3RydWN0KFxuXHRcdFx0bG9jYWxDYWNoZS5yb290SXRlbSxcblx0XHRcdGxvY2FsQ2FjaGUuaXRlbXMsXG5cdFx0XHRsb2NhbENhY2hlLmNvbGxlY3Rpb25zXG5cdFx0KS5wcm9jZXNzKCk7XG5cdH1cblxuXHRhZGRTaW5nbGVJdGVtIChcblx0XHRpdGVtRW50cnk6IEl0ZW1FbnRyeSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyxcblx0XHRpc1Jvb3Q/OiBib29sZWFuLFxuXHRcdGxvY2FsQ2FjaGU6IExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKVxuXHQpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpLCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnMpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXG5cdFx0XHRyZXN1bHQucHVzaCh0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBmYWxzZSwgbG9jYWxDYWNoZSkpO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGFkZENvbGxlY3Rpb24gKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zOiBhbnkpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uQ2FjaGUgPSBsb2NhbENhY2hlLmNvbGxlY3Rpb25zO1xuXG5cdFx0Y29sbGVjdGlvbkNhY2hlLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0KTtcblx0fVxuXG5cdHByb2Nlc3NMaW5rZWRJdGVtcyAoXG5cdFx0bGlua2VkRW50cmllczogVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFtdLFxuXHRcdG9wdGlvbnM6IEl0ZW1PcHRpb25zLFxuXHRcdGFkZFRvQ29sbGVjdGlvbnM6IGJvb2xlYW5cblx0KTogSXRlbVJlc291cmNlSXRlbVR5cGVNYXAge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0ge307XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGxpbmtlZEVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gZW50cnkuaXRlbVR5cGU7XG5cdFx0XHRjb25zdCBpdGVtRW50cmllcyA9IGVudHJ5Lml0ZW1FbnRyaWVzO1xuXHRcdFx0bGV0IGNvbGxlY3Rpb25NYXRjaGVyO1xuXG5cdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0Y29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoW2xvY2FsQ2FjaGUuY29sbGVjdGlvbnNdLCBmYWxzZSwgZmFsc2UpO1xuXG5cdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXSA9IFtdO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xuXHRcdFx0XHRpdGVtUmVzb3VyY2VzW2l0ZW1UeXBlXS5wdXNoKGxvY2FsQ2FjaGUuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucykpO1xuXG5cdFx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmV4cGFuZChpdGVtRW50cnkpO1xuXG5cdFx0XHRcdGlmIChpdGVtVHlwZSA9PT0gJ1Byb2plY3Rub3RpdGllJykge1xuXHRcdFx0XHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHRcdFx0XHRsb2NhbENhY2hlLnRhYlJlcXVlc3RQYXJhbWV0ZXJzLFxuXHRcdFx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRcdFx0XHRbe30sIHtub19ub3RpZmljYXRpb246IHRydWV9XVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gdGhlIGl0ZW1FbnRyaWVzIGFyZSBpbiB0b3AtZG93biBvcmRlciwgc28gY2FsbCBmb3IgZWFjaCBpdGVtIHR5cGUgc2VwYXJhdGVseVxuXHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLmFkZFRvQ29sbGVjdGlvbnMoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcblx0fVxuXG5cdGdldExvY2FsQ2FjaGUgKCk6IExvY2FsQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLmdldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSk7XG5cdH1cblxuXHRyZXNldExvY2FsQ2FjaGUgKCkge1xuXHRcdGNvbnN0IG9sZExvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5sb2NhbENhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcblxuXHRcdG9sZExvY2FsQ2FjaGUuY2xlYXJSZXNvdXJjZXMoKTtcblxuXHRcdHRoaXMubG9jYWxDYWNoZU1hbmFnZXIuc2V0Q3VycmVudExvY2FsQ2FjaGUodGhpcy5hdXRoSW50ZXJmYWNlLmdldFVuaXF1ZVVzZXJJZCgpLCBsb2NhbENhY2hlKTtcblx0fVxuXG5cdGFkZFRvQ29sbGVjdGlvbnMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgcmVzdWx0Q29sbGVjdGlvblJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoaXRlbUVudHJpZXMsIHRydWUpXG5cdFx0XHQuYWRkVG9Db2xsZWN0aW9ucyhyZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2UpO1xuXHR9XG5cblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSkge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCBmYWxzZSlcblx0XHRcdC5yZW1vdmVGcm9tQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHNhdmVMb2NhbCAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcblx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtUmVzb3VyY2UuZW50cnk7XG5cblx0XHRpdGVtRW50cnkuc2V0RGlzcGxheU5hbWUoKTtcblx0XHR0aGlzLmFkZFRvQ29sbGVjdGlvbnMoW2l0ZW1FbnRyeV0pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZUludGVyZmFjZS53aGVuKGl0ZW1SZXNvdXJjZSk7XG5cdH1cblxuXHR1cGRhdGVJdGVtSWRNYXAgKGNvbGxlY3Rpb25NYXA6IGFueSwgY29udmVyc2lvbk1hcCkge1xuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRmb3IgKGNvbnN0IG9sZElkIGluIGNvbnZlcnNpb25NYXApIHtcblx0XHRcdGNvbnN0IG5ld0lkID0gY29udmVyc2lvbk1hcFtvbGRJZF07XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW29sZElkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRjb250aW51ZTtcblxuXHRcdFx0Y29sbGVjdGlvbk1hcFtuZXdJZF0gPSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHRcdGRlbGV0ZSBjb2xsZWN0aW9uTWFwW29sZElkXTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnM6IGFueSwgcHJvY2Vzc09wdGlvbnMgPSB0cnVlKTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRDb2xsZWN0aW9uKFxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LFxuXHRcdFx0cHJvY2Vzc09wdGlvbnMgPyB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMocmVzb3VyY2VPcHRpb25zKSA6IHJlc291cmNlT3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBhbnksIGlzUm9vdDogYm9vbGVhbikge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbUVudHJ5LCBvcHRpb25zLCBpc1Jvb3QpO1xuXHR9XG5cblx0b25CZWZvcmVTYXZlIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25CZWZvcmVTYXZlJywga2V5LCBjYWxsYmFjayk7XG5cdH1cblxuXHRvblNhdmVTdWNjZXNzIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlU3VjY2VzcycsIGtleSwgY2FsbGJhY2spO1xuXHR9XG5cblx0b25TYXZlV2l0aG91dENsb3NpbmcgKGtleTogc3RyaW5nLCBjYWxsYmFjaykge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5yZWdpc3RlckNhbGxiYWNrKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGtleSwgY2FsbGJhY2spO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtQ2FjaGUge1xyXG5cdGVudHJpZXM6IHtcclxuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0XHRbaXRlbUlkOiBudW1iZXJdOiBJdGVtRW50cnlcclxuXHRcdH1cclxuXHR9ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0c29tZSAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbikge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGlmIChjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goZW50cmllc1tpdGVtSWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0QnlRdWVyeSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJpZXNbaXRlbUlkXTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMubWF0Y2hRdWVyeShpdGVtRW50cnksIHF1ZXJ5KSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSBpbnN0YW5jZW9mIEl0ZW1FbnRyeSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zm9yRWFjaCAoY2FsbGJhY2s6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdm9pZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRjYWxsYmFjayh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dG9BcnJheSAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHR9XHJcblxyXG5cdGdldCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0XHJcblx0Y29udGFpbnMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGl0ZW1UeXBlOiBJdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0aWYgKHBhcmVudFR5cGUgPT09IHBhcmVudC5pdGVtVHlwZSAmJiBwYXJlbnRJZCA9PSBwYXJlbnQuaXRlbUlkKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1JZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9sZEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgZW50cnlNYXAgPSB0aGlzLmVudHJpZXNbaXRlbUVudHJ5Lml0ZW1UeXBlXTtcclxuXHJcblx0XHRkZWxldGUgZW50cnlNYXBbb2xkSXRlbUlkXTtcclxuXHRcdHJldHVybiBlbnRyeU1hcFtpdGVtRW50cnkuaXRlbUlkXSA9IGl0ZW1FbnRyeTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRtYXRjaFF1ZXJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcXVlcnkpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxyXG5cdFx0KS5tYXRjaFF1ZXJ5KHF1ZXJ5Lm9iamVjdCkgPT09IHRydWU7IC8vIFRPRE86IG1heWJlP1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlTZXJ2aWNlIHtcclxuXHQvLyB0b2RvOiB0cmFuc2xhdGVcclxuXHR1bmRlZmluZWRJdGVtRXJyb3IgPSAnSGV0IG9wZ2V2cmFhZ2RlIGl0ZW0gYmVzdGFhdCBuaWV0IC8gSmUgaGVidCBuaWV0IHZvbGRvZW5kZSByZWNodGVuIG9tIGRpdCBpdGVtIHRlIGJla2lqa2VuJztcclxuXHRBTExfUEVSTUlTU0lPTlMgPSA3O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRwcm9jZXNzT3B0aW9ucyAob3B0aW9ucykge1xyXG5cdFx0cmV0dXJuIHNoYWxsb3dNZXJnZShcclxuXHRcdFx0b3B0aW9ucyxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbHVtbnM6IHRydWUsXHJcblx0XHRcdFx0cGFyZW50OiBudWxsLFxyXG5cdFx0XHRcdHRlbXBsYXRlT3B0aW9uczoge30sXHJcblx0XHRcdFx0dGVtcGxhdGVDb2x1bW5zOiB7fSxcclxuXHRcdFx0XHRkZWZlclJlcXVlc3Q6IGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVMb2NhbENvbnZlcnNpb25NYXAgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGRvRXh0ZW5kID0gZmFsc2UsIGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkge1xyXG5cdFx0Y29uc3QgYXBpSXRlbUlkID0gYXBpUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRDb252ZXJzaW9uTWFwID0ge307XHJcblxyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IHt9O1xyXG5cdFx0cmVzdWx0W2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gaXRlbUlkO1xyXG5cclxuXHRcdGlmIChkb0V4dGVuZClcclxuXHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIHJlc3VsdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZExvY2FsQ29udmVyc2lvbk1hcCAocGFyZW50VHlwZTogSXRlbVR5cGUsIHBhcmVudElkOiBJdGVtSWQsIGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgbGlua3MgPSBhcGlSZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXVtwYXJlbnRJZF0ubGlua3M7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBsaW5rcykge1xyXG5cdFx0XHRjb25zdCBpZEFycmF5ID0gbGlua3NbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXVthcGlJdGVtSWRdID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcclxuXHJcblx0XHRcdFx0dGhpcy5leHBhbmRMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGFwaUl0ZW1JZCwgYXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCwgbmV3SXRlbUlkPzogSXRlbUlkKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0bGV0IGNvbnZlcnNpb25NYXBFbnRyeTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRjb252ZXJzaW9uTWFwRW50cnkgPSBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdO1xyXG5cclxuXHRcdGlmIChuZXdJdGVtSWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bmV3SXRlbUlkID0gdGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcEVudHJ5W2l0ZW1JZF0gPSBuZXdJdGVtSWQ7XHJcblx0fVxyXG5cclxuXHRiYXRjaEV4cGFuZENvbnZlcnNpb25NYXAgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdHRoaXMuZXhwYW5kQ29udmVyc2lvbk1hcChpdGVtRW50cnksIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29udmVyc2lvblZhbHVlIChpdGVtVHlwZSwgaXRlbUlkLCBtYXApIHtcclxuXHRcdGlmIChtYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIG1hcFtpdGVtVHlwZV1baXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdGJhdGNoQ2xvbmUgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Ly8gdGhlIHRoZSBpdGVtcyBtaWdodCByZWZlcmVuY2UgZWFjaCBvdGhlciwgc28gdXBkYXRlIHRoZSBjb252ZXJzaW9uIG1hcCBmaXJzdFxyXG5cdFx0dGhpcy5iYXRjaEV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJpZXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkuY2xvbmUoY29udmVyc2lvbk1hcCkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRGdWxsTmFtZSAoZmlyc3ROYW1lLCBpbmZpeCwgbGFzdE5hbWUpIHtcclxuXHRcdHJldHVybiBmaXJzdE5hbWUudHJpbSgpXHJcblx0XHRcdC5jb25jYXQoJyAnLCBpbmZpeCkudHJpbSgpIC8vIGluZml4IGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcclxuXHRcdFx0LmNvbmNhdCgnICcsIGxhc3ROYW1lKTtcclxuXHR9XHJcblxyXG5cdGdldFRpdGxlRmllbGQgKGl0ZW1UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0V4ZW1wbGFhcic6XHJcblx0XHRcdFx0cmV0dXJuICdzZXJpZW51bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXInOlxyXG5cdFx0XHRcdHJldHVybiAnbnVtbWVyJztcclxuXHRcdFx0Y2FzZSAnRmlsZXMnOlxyXG5cdFx0XHRcdHJldHVybiAnZnJpZW5kbHluYW1lJztcclxuXHRcdFx0Y2FzZSAnRnVuY3RpZSc6XHJcblx0XHRcdGNhc2UgJ1N0YW5kYWFyZGZ1bmN0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnbmFhbWludGVybic7XHJcblx0XHRcdGNhc2UgJ1Zvb3JyYWFkbXV0YXRpZSc6XHJcblx0XHRcdFx0cmV0dXJuICdvbXNjaHJpanZpbmcnO1xyXG5cdFx0XHRjYXNlICdCYXJjb2RlJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2NvZGUnO1xyXG5cdFx0XHRjYXNlICdCZXRhYWxtaWRkZWwnOlxyXG5cdFx0XHRjYXNlICdCZXRhbGluZ3Njb25kaXRpZSc6XHJcblx0XHRcdGNhc2UgJ0JyaWVmcGFwaWVyJzpcclxuXHRcdFx0Y2FzZSAnVGF4Q2xhc3MnOlxyXG5cdFx0XHRjYXNlICdUYXhTY2hlbWEnOlxyXG5cdFx0XHRjYXNlICdDb25kaXRpb24nOlxyXG5cdFx0XHRjYXNlICdGYWN0dXVybW9tZW50JzpcclxuXHRcdFx0Y2FzZSAnRnVuY3RpZWdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnR3Jvb3Rib2VrJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVyJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVyZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdJbmh1dXJtYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWwnOlxyXG5cdFx0XHRjYXNlICdNYXRlcmlhYWxDYXQnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VydGFyaWVmJzpcclxuXHRcdFx0Y2FzZSAnTm90aXRpZSc6XHJcblx0XHRcdGNhc2UgJ1BsYW5uaW5nbWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ1N0YWZmZWxncm9lcCc6XHJcblx0XHRcdGNhc2UgJ1N1YnByb2plY3QnOlxyXG5cdFx0XHRjYXNlICdUYWFrJzpcclxuXHRcdFx0Y2FzZSAnVGFnJzpcclxuXHRcdFx0Y2FzZSAnVGVtcGxhdGUnOlxyXG5cdFx0XHRjYXNlICdUaWpkJzpcclxuXHRcdFx0Y2FzZSAnVGl0ZWwnOlxyXG5cdFx0XHRjYXNlICdUeXBlJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRcdHJldHVybiAnbmFhbSc7XHJcblx0XHRcdC8vIGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHQvLyBjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Ly8gY2FzZSAnUGVyc29uJzpcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHQvLyBvbmx5IHVzZSBkaXNwbGF5bmFtZSBmb3IgaXRlbXMgdGhhdCBkb250J3QgaGF2ZSBhIHNpbXBsZSwgd3JpdGFibGUgbmFtZSBmaWVsZFxyXG5cdFx0XHRcdC8vIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIGZvciB0ZW1wbGF0ZWQgaXRlbXNcclxuXHRcdFx0XHRyZXR1cm4gJ2Rpc3BsYXluYW1lJztcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlSZXNwb25zZVByb2Nlc3NvcixcclxuXHRCYXRjaFN0YXR1cyxcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtblV0aWwsXHJcblx0SXRlbUNhY2hlLFxyXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0S2V5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFTlRSWV9TVEFUVVMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdEFwaVJlc3BvbnNlLCBBcGlUZW1wbGF0ZUl0ZW1UeXBlTWFwLCBFbnRyeVN0YXR1cywgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsXHJcblx0VGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCwgVGVtcGxhdGVSZXNwb25zZUxpbmtlZEl0ZW1FbnRyeU1hcFxyXG59IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uIH0gZnJvbSAnLi9Db2x1bW5FeHBhbnNpb24nO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXQgfSBmcm9tICcuL0NvbHVtblNldCc7XHJcblxyXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5LCBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbi8vIHRvZG8gbWFrZSBjbGFzc1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1IYW5kbGVyIHtcclxuXHRlbnRyaWVzOiBJdGVtQ2FjaGU7XHJcblx0dGVtcGxhdGVzOiBBcGlUZW1wbGF0ZUl0ZW1UeXBlTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgYmF0Y2hTdGF0dXNGYWN0b3J5OiBCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0XHR0aGlzLmVudHJpZXMgPSB0aGlzLml0ZW1DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaEl0ZW0gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IGFueSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8SXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcD4ge1xyXG5cdFx0Y29uc3QgZW50cnlTdGF0dXMgPSB0aGlzLmdldEVudHJ5U3RhdHVzKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGVudHJ5U3RhdHVzLmVudHJ5O1xyXG5cdFx0Y29uc3Qgc3RhdHVzID0gZW50cnlTdGF0dXMuc3RhdHVzO1xyXG5cclxuXHRcdGlmIChzdGF0dXMgPT09IEVOVFJZX1NUQVRVUy5MT0NBTCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5mZXRjaFRlbXBsYXRlKGl0ZW1UeXBlLCBvcHRpb25zLnRlbXBsYXRlT3B0aW9ucywgb3B0aW9ucy50ZW1wbGF0ZUNvbHVtbnMpXHJcblx0XHRcdFx0LnRoZW4oXHJcblx0XHRcdFx0XHR0ZW1wbGF0ZSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVMb2NhbChpdGVtRW50cnksIG9wdGlvbnMucGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5lcnJvckhhbmRsZXIucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoaXRlbUVudHJ5LCBzdGF0dXMsIG9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0gaXRlbUlkc1xyXG5cdCAqIEBwYXJhbSBvcHRpb25zXHJcblx0ICogQHJldHVybnMge1Byb21pc2U8SXRlbUVudHJ5W10+fVxyXG5cdCAqXHJcblx0ICogRm9yIGV2ZXJ5IGl0ZW1pZCBmaW5kIHRoZSBzdGF0dXMgb2YgdGhlIEl0ZW1FbnRyeSBhbmQgcmVzb2x2ZSB0aGUgcHJvbWlzZXMgc28gdGhlIHJlc3VsdCBpc1xyXG5cdCAqIGEgdXNhYmxlIEl0ZW1FbnRyeVxyXG5cdCAqL1xyXG5cclxuXHRmZXRjaEl0ZW1zIChpdGVtVHlwZSwgaXRlbUlkcywgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IGJhdGNoU3RhdHVzID0gdGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZXM6IGFueSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGl0ZW1JZHMpXHJcblx0XHRcdGJhdGNoU3RhdHVzLmFkZCg8RW50cnlTdGF0dXM8SXRlbUVudHJ5Pj4gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSkpO1xyXG5cclxuXHRcdHByb21pc2VzLmVudHJpZXMgPSBiYXRjaFN0YXR1cy5nZXRQcm9taXNlcygpO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNSZXF1ZXN0cygpKVxyXG5cdFx0XHRwcm9taXNlcy5yZXF1ZXN0cyA9IHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBiYXRjaFN0YXR1cy5nZXRSZXF1ZXN0SWRzKCksIG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoW0VOVFJZX1NUQVRVUy5MT0NBTF0pKVxyXG5cdFx0XHRwcm9taXNlcy50ZW1wbGF0ZSA9IHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4ocmVzb2x2ZWQgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmJhdGNoUmVzb2x2ZShpdGVtVHlwZSwgYmF0Y2hTdGF0dXMsIG9wdGlvbnMuY29sdW1ucywgcmVzb2x2ZWQsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUNhY2hlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLCBvcHRpb25zKTogUHJvbWlzZTxJdGVtRW50cnk+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gaXRlbUVudHJ5LmNvbHVtbnMucmVxdWVzdDtcclxuXHJcblx0XHRzd2l0Y2ggKHN0YXR1cykge1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5DQUNIRUQ6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtRW50cnkpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRDpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZUNhY2hlZChcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpLFxyXG5cdFx0XHRcdFx0XHRcdG9wdGlvbnNcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5FWFBBTkQ6XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRGlmZmVyZW5jZSA9IHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlcXVlc3RDb2x1bW5zKHJlcXVlc3RDb2x1bW5zLCBvcHRpb25zLmNvbHVtbnMpLmRpZmZlcmVuY2U7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBbaXRlbUlkXSwgY29sdW1uRGlmZmVyZW5jZSkudGhlbihcclxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBjb2x1bW5EaWZmZXJlbmNlLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdFx0ZGVmYXVsdDogLy8gRU5UUllfU1RBVFVTLlJFU09MVkU6XHJcblx0XHRcdFx0dGhpcy5yZXF1ZXN0SXRlbXMoaXRlbVR5cGUsIFtpdGVtSWRdLCByZXF1ZXN0Q29sdW1ucykudGhlbihcclxuXHRcdFx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZXNvbHZlUmVtb3RlKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5yZXNvbHZlKHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVzb2x2ZUxvY2FsIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgcGFyZW50LCB0ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgaXRlbUlkQ29udmVyc2lvbiA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5jb2x1bW5zID0gdGVtcGxhdGUuY29sdW1ucztcclxuXHJcblx0XHRpZiAocGFyZW50ICE9PSBudWxsKVxyXG5cdFx0XHRpdGVtRW50cnkuc2V0UGFyZW50KHBhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZCk7IC8vIGNyZWF0ZSBuZXcgb2JqZWN0XHJcblxyXG5cdFx0aXRlbUVudHJ5XHJcblx0XHRcdC5wcm9jZXNzTG9jYWwodGVtcGxhdGUuZmllbGRzLCB7fSwge30sIGl0ZW1JZENvbnZlcnNpb24pXHJcblx0XHRcdC5zZXRDcmVhdG9yKClcclxuXHRcdFx0LnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRtYWluOiBpdGVtRW50cnksXHJcblx0XHRcdGxpbmtlZDogdGhpcy5jcmVhdGVMb2NhbEVudHJpZXMoaXRlbVR5cGUsIGl0ZW1JZCwgdGVtcGxhdGUsIGl0ZW1JZENvbnZlcnNpb24sIGxvY2FsSXRlbUNhY2hlKVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVFeHBhbnNpb24gKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdC8vIEFub3RoZXIgcmVxdWVzdCBhbHJlYWR5IHJlcXVlc3RlZCB0aGUgY29sdW1ucyB3ZSBuZWVkIGhlcmUsIG5vIG5lZWQgdG8gZXhwYW5kIHRoZSBpdGVtIGFuZCByZXNvbHZlIGl0IChhbHJlYWR5IGRvbmUgYnkgb3RoZXIgcmVxdWVzdClcclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBpdGVtRW50cnk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZSgpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtblNldDogQ29sdW1uU2V0LCByZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkKSB7IC8vIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdHNcclxuXHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xyXG5cdFx0XHR0aGlzLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxyXG5cdFx0XHRpbml0aWFsLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uU2V0LnJvb3QpLFxyXG5cdFx0XHRjb2x1bW5TZXRcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmZXRjaFRlbXBsYXRlIChpdGVtVHlwZTogc3RyaW5nLCB0ZW1wbGF0ZU9wdGlvbnM6IGFueSA9IHt9LCB0ZW1wbGF0ZUNvbHVtbnM6IGFueSA9IHt9KTogUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IGhhc1RlbXBsYXRlT3B0aW9ucyA9IGhhc1Byb3BlcnRpZXModGVtcGxhdGVPcHRpb25zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkl0ZW1UeXBlID0gZ2V0Rmlyc3RQcm9wZXJ0eSh0ZW1wbGF0ZUNvbHVtbnMpOyAvLyBpdCdzIHBvc3NpYmxlIHRvIGFkZCBjb2x1bW5zIHRvIGxpbmtlZCBpdGVtc1xyXG5cclxuXHRcdGlmICghaGFzVGVtcGxhdGVPcHRpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNhY2hlZFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXNbaXRlbVR5cGVdO1xyXG5cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGNhY2hlZFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiZcclxuXHRcdFx0XHQoXHJcblx0XHRcdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCB8fFxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5VdGlsLnJlc3BvbnNlQ29sdW1uc0F2YWlsYWJsZShcclxuXHRcdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGNhY2hlZFRlbXBsYXRlLnJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjYWNoZWRUZW1wbGF0ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoW1xyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnRlbXBsYXRlKGl0ZW1UeXBlLCB0ZW1wbGF0ZU9wdGlvbnMpLFxyXG5cdFx0XHRjb2x1bW5JdGVtVHlwZSA9PT0gbnVsbCA/XHJcblx0XHRcdFx0e30gOlxyXG5cdFx0XHRcdHRoaXMuY29sdW1uSGFuZGxlci5mZXRjaChjb2x1bW5JdGVtVHlwZSwgdGVtcGxhdGVDb2x1bW5zW2NvbHVtbkl0ZW1UeXBlXSlcclxuXHRcdF0pLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZVJlc3BvbnNlOiBhbnkgPSByZXNvbHZlZFswXTtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXNwb25zZUNvbHVtbnMoXHJcblx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpLFxyXG5cdFx0XHRcdFx0cmVzb2x2ZWRbMV1cclxuXHRcdFx0XHQpLm1lcmdlZDtcclxuXHRcdFx0XHRjb25zdCB0ZW1wbGF0ZSA9IHtcclxuXHRcdFx0XHRcdGZpZWxkczogdGVtcGxhdGVSZXNwb25zZS5mZXRjaE9iamVjdChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdHRlbXBsYXRlUmVzcG9uc2UubGlua3NbaXRlbVR5cGVdWzBdXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlOiB0ZW1wbGF0ZVJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zOiByZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucyAmJiB0ZW1wbGF0ZVJlc3BvbnNlLmNhY2hlYWJsZSlcclxuXHRcdFx0XHRcdHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXSA9IHRlbXBsYXRlO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGVtcGxhdGU7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldEVudHJ5U3RhdHVzIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBFbnRyeVN0YXR1czxJdGVtRW50cnk+IHtcclxuXHRcdGxldCBpdGVtRW50cnk7XHJcblxyXG5cdFx0aWYgKHRoaXMua2V5U2VydmljZS5pc0xvY2FsSWQoaXRlbUlkKSkge1xyXG5cdFx0XHRpdGVtRW50cnkgPSBsb2NhbEl0ZW1DYWNoZS5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogaXRlbUVudHJ5LCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSksIHN0YXR1czogRU5UUllfU1RBVFVTLkxPQ0FMfTtcclxuXHRcdH1cclxuXHJcblx0XHRpdGVtRW50cnkgPSB0aGlzLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSksIHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhpdGVtRW50cnksIG9wdGlvbnMpfTtcclxuXHJcblx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0RGVmZXJyZWQoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucy5jb2x1bW5zLCBvcHRpb25zLmRlZmVyUmVxdWVzdCk7XHJcblxyXG5cdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHR0aGlzLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0ZW50cnk6IGl0ZW1FbnRyeSxcclxuXHRcdFx0c3RhdHVzOiBvcHRpb25zLmRlZmVyUmVxdWVzdCA/IEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0aXNDb2x1bW5TdXBlcnNldCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LmlzTG9jYWwoKSB8fCBpdGVtRW50cnkuY29sdW1ucy5pc1N1cGVyc2V0T2YoY29sdW1ucyk7XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSBvcHRpb25zLmNvbHVtbnM7XHJcblxyXG5cdFx0aWYgKGl0ZW1FbnRyeS5pc0RlZmVycmVkKCkpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuUkVTT0xWRTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXMuaXNDb2x1bW5TdXBlcnNldChpdGVtRW50cnksIHJlcXVlc3RDb2x1bW5zKSA/XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEIDpcclxuXHRcdFx0XHRFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmlzQ29sdW1uU3VwZXJzZXQoaXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1ucykpXHJcblx0XHRcdHJldHVybiBFTlRSWV9TVEFUVVMuQ0FDSEVEO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5kZWZlcihmYWxzZSk7XHJcblxyXG5cdFx0cmV0dXJuIEVOVFJZX1NUQVRVUy5FWFBBTkQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBpdGVtVHlwZVxyXG5cdCAqIEBwYXJhbSB7QmF0Y2hTdGF0dXN9IGJhdGNoU3RhdHVzXHJcblx0ICogQHBhcmFtIHJlcXVlc3RDb2x1bW5zXHJcblx0ICogQHBhcmFtIHJlc29sdmVkXHJcblx0ICogQHJldHVybnMge0l0ZW1FbnRyeVtdfVxyXG5cdCAqXHJcblx0ICogZm9yIGV2ZXJ5IHR5cGUgb2YgZW50cnkgc3RhdHVzIHRoZXJlIGlzIGluIHRoaXMgYmF0Y2ggcmVxdWVzdCBtYWtlIHN1cmUgdGhlIGVudHJpZXMgZ2V0IHJlc29sdmVkLlxyXG5cdCAqIHRoZW4gcmV0dXJuIGEgYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBJdGVtRW50cnlBcnJheVxyXG5cdCAqL1xyXG5cdGJhdGNoUmVzb2x2ZSAoaXRlbVR5cGUsIGJhdGNoU3RhdHVzOiBCYXRjaFN0YXR1cywgcmVxdWVzdENvbHVtbnMsIHJlc29sdmVkLCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogSXRlbUVudHJ5W10gfCBQcm9taXNlPGFueT4ge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2UgPSByZXNvbHZlZC5yZXF1ZXN0cztcclxuXHRcdGNvbnN0IGV4cGFuZFN0YXR1cyA9IFtFTlRSWV9TVEFUVVMuRVhQQU5ELCBFTlRSWV9TVEFUVVMuUFJPTUlTRURfRVhQQU5EXTtcclxuXHRcdGNvbnN0IHJlc29sdmVTdGF0dXMgPSBbRU5UUllfU1RBVFVTLlJFU09MVkVdO1xyXG5cclxuXHRcdGxldCBzdWNjZXNzID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhleHBhbmRTdGF0dXMpKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSk7XHJcblxyXG5cdFx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFx0ZXhwYW5kU3RhdHVzLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5yZXNvbHZlRXhwYW5zaW9uKGl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uLCByZXNwb25zZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKHJlc29sdmVTdGF0dXMpKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xyXG5cclxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRcdHJlc29sdmVTdGF0dXMsIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5yZXNvbHZlUmVtb3RlKGl0ZW1FbnRyeSwgY29sdW1uSW5mbywgcmVzcG9uc2UpID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRzdWNjZXNzID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0W0VOVFJZX1NUQVRVUy5MT0NBTF0sIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBudWxsLCByZXNvbHZlZC50ZW1wbGF0ZSwgbG9jYWxJdGVtQ2FjaGUpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHRvZG86IG5vIGl0ZW0gZXJyb3IgKHttZXNzYWdlOiB0aGlzLml0ZW1FbnRyeVNlcnZpY2UudW5kZWZpbmVkSXRlbUVycm9yfSlcclxuXHRcdHJldHVybiBzdWNjZXNzID8gYmF0Y2hTdGF0dXMuZ2V0QXJyYXkoKSA6IHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdCgpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxFbnRyaWVzIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0bG9jYWxQYXJlbnRJZDogSXRlbUlkLFxyXG5cdFx0dGVtcGxhdGUsXHJcblx0XHRpdGVtSWRDb252ZXJzaW9uOiBJdGVtSWRDb252ZXJzaW9uTWFwLFxyXG5cdFx0bG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdGV4Y2x1ZGVJdGVtVHlwZXM6IEl0ZW1UeXBlW10gPSBbXVxyXG5cdCk6IFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBbXSB7XHJcblx0XHRjb25zdCBhcGlSZXNwb25zZSA9IHRlbXBsYXRlLnJlc3BvbnNlO1xyXG5cdFx0Y29uc3QgY29sdW1uSW5mb01hcCA9IHt9O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0ge307XHJcblx0XHRjb25zdCByZXN1bHQ6IEFycmF5PHtpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXX0+ID0gW107XHJcblxyXG5cdFx0Ly8gVE9ETzogZGlzYWJsZSBjYWNoaW5nP1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBhcGlSZXNwb25zZS5pdGVtcykge1xyXG5cdFx0XHRpZiAoaXRlbVR5cGUgPT09IHBhcmVudFR5cGUgfHwgZXhjbHVkZUl0ZW1UeXBlcy5pbmRleE9mKGl0ZW1UeXBlKSAhPT0gLTEpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHR0ZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjcmVhdGVFbnRyaWVzID0gKHBhcmVudFR5cGUyLCBsb2NhbFBhcmVudElkMiwgYXBpUGFyZW50SWQpID0+IHtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0ge2l0ZW1UeXBlOiBwYXJlbnRUeXBlMiwgaXRlbUlkOiBsb2NhbFBhcmVudElkMn07XHJcblx0XHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZTJdW2FwaVBhcmVudElkXS5saW5rcztcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0XHRpZiAoZXhjbHVkZUl0ZW1UeXBlcy5pbmRleE9mKGl0ZW1UeXBlKSAhPT0gLTEpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKCFsaW5rcy5oYXNPd25Qcm9wZXJ0eShpdGVtVHlwZSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Ly8gdGhlIGl0ZW0gZW50cmllcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdCBpbiB0b3AtZG93biBvcmRlclxyXG5cdFx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHQucHVzaCh7aXRlbVR5cGU6IGl0ZW1UeXBlLCBpdGVtRW50cmllczogaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9IFtdfSk7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgYXBpSXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGxvY2FsSXRlbUlkID0gaXRlbUlkQ29udmVyc2lvbltpdGVtVHlwZV1bYXBpSXRlbUlkXTtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbExpbmtlZChcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdGxvY2FsSXRlbUlkLFxyXG5cdFx0XHRcdFx0XHRhcGlSZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgYXBpSXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0cGFyZW50LFxyXG5cdFx0XHRcdFx0XHRjb2x1bW5JbmZvTWFwW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0aXRlbUlkQ29udmVyc2lvblxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRsb2NhbEl0ZW1DYWNoZS5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRcdGNyZWF0ZUVudHJpZXMoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBhcGlJdGVtSWQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxuXHJcblx0XHRjcmVhdGVFbnRyaWVzKHBhcmVudFR5cGUsIGxvY2FsUGFyZW50SWQsIGFwaVJlc3BvbnNlLmxpbmtzW3BhcmVudFR5cGVdWzBdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUaXRsZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgZGVmZXJSZXF1ZXN0ID0gdHJ1ZSwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSkge1xyXG5cdFx0Y29uc3QgdGl0bGVGaWVsZCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKGl0ZW1UeXBlKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mZXRjaEl0ZW0oXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyh7Y29sdW1uczogW3RpdGxlRmllbGRdLCBkZWZlclJlcXVlc3Q6IGRlZmVyUmVxdWVzdH0pLFxyXG5cdFx0XHRsb2NhbEl0ZW1DYWNoZVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQvLyB0b2RvOiBJdGVtRW50cnkgfCBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwXHJcblx0XHRcdChlbnRyeTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKGVudHJ5Lm1haW4gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHJldHVybiBlbnRyeS5tYWluLmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZ2V0RmllbGRzKClbdGl0bGVGaWVsZF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtcyAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkczogSXRlbUlkW10sIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShpdGVtVHlwZSwge2lkOiBpdGVtSWRzfSwge1tpdGVtVHlwZV06IGNvbHVtbnN9KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpUmVzcG9uc2VQcm9jZXNzb3IsIENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uU2V0LCBJdGVtSGFuZGxlciwgUXVlcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UsIEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXF1ZXN0U2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW0gKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbnMpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHtcclxuXHRcdFx0W2l0ZW1UeXBlXTogY29sdW1uc1xyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHtpZDogaXRlbUlkfSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRxdWVyeSA9IGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QsXHJcblx0XHRjb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1uc1xyXG5cdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IG9wdGlvbnMgPSBjb2xsZWN0aW9uRW50cnkub3B0aW9ucztcclxuXHJcblx0XHRjb25zdCBwYXJhbXMgPSB7XHJcblx0XHRcdHJlcXVlc3RUeXBlOiAncXVlcnknLFxyXG5cdFx0XHRpdGVtVHlwZTogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlID09PSBudWxsID8gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlIDogb3B0aW9ucy5xdWVyeUl0ZW1UeXBlLFxyXG5cdFx0XHRjb2x1bW5zOiB7W2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV06IGNvbHVtbnN9LFxyXG5cdFx0XHRxdWVyeTogcXVlcnksXHJcblx0XHRcdGxpbWl0OiBudWxsXHJcblx0XHR9O1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmxpbWl0ICE9PSBudWxsKVxyXG5cdFx0XHRwYXJhbXMubGltaXQgPSBvcHRpb25zLmxpbWl0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RTa2VsZXRvbihwYXJhbXMpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExpbmtJdGVtcyAocGFyZW50VHlwZSwgcGFyZW50SWRBcnJheSwgaXRlbVR5cGUsIHF1ZXJ5LCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XHJcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcclxuXHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdHtpZDogcGFyZW50SWRBcnJheX0sXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdFx0KSA6XHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRcdFx0cXVlcnksXHJcblx0XHRcdFx0XHR7bGlua2VkVG86IHBhcmVudFR5cGUsIHF1ZXJ5OiB7aWQ6IHBhcmVudElkQXJyYXl9fVxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgLy8gc2hvdWxkIGNvbnRhaW4gYSBkZXJpdmVkIGNvbHVtbiB0aGF0IHJlZmVycyB0byB0aGUgcGFyZW50XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzRXhwYW5zaW9uIChyZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkge1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKVxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcclxuXHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkV4cGFuc2lvbjtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAoXHJcblx0XHRyZXNwb25zZTogQXBpUmVzcG9uc2UsXHJcblx0XHRpZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRjb2x1bW5FeHBhbnNpb24/OiBDb2x1bW5FeHBhbnNpb25cclxuXHQpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRpZiAoY29sdW1uRXhwYW5zaW9uID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0Y29sdW1uU2V0Lml0ZW1UeXBlLFxyXG5cdFx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWUgPyB0cnVlIDogY29sdW1uU2V0LnJlcXVlc3QsXHJcblx0XHRcdFx0Y29sdW1uU2V0LnJlc3BvbnNlXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5TZXQuaXRlbVR5cGU7XHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IGNvbHVtblNldC5yb290O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEFycmF5PFByb21pc2U8SXRlbUVudHJ5Pj4gPSBbXTtcclxuXHJcblx0XHQvLyBzaG91bGQgYmUgZmFzdC4uLlxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSkge1xyXG5cdFx0XHRsZXQgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRpdGVtSWQsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbUVudHJ5LmRlZmVyUmVxdWVzdCkge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKSxcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucyksXHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5TZXRcclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2goaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2UpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cmllcy5wdXNoKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkRW50cmllcyA9PiB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCByZXNvbHZlZEVudHJ5IG9mIHJlc29sdmVkRW50cmllcykge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdHJlc29sdmVkRW50cnksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0PENvbHVtbkV4cGFuc2lvbj4gY29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJpZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUNhY2hlZEl0ZW0gKGl0ZW1FbnRyeSwgcmVzcG9uc2UsIGNvbHVtbkV4cGFuc2lvbjogQ29sdW1uRXhwYW5zaW9uKSB7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsID9cclxuXHRcdFx0aXRlbUVudHJ5IDpcclxuXHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaE9iamVjdChpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWQpLFxyXG5cdFx0XHRcdHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdFx0XHRleHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZS5yb290XHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XHRleHBhbnNpb25SZXN1bHRcclxuXHRcdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NMaW5rUmVzcG9uc2UgKFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0Y29uc3QgY29sdW1uU2V0ID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgcGFyZW50SXRlbXMgPSByZXNwb25zZS5pdGVtc1twYXJlbnRUeXBlXTtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkQXJyYXkpIHtcclxuXHRcdFx0cHJvbWlzZXNbcGFyZW50SWRdID0gcGF0aEV4aXN0cyhwYXJlbnRJdGVtcywgW3BhcmVudElkLCAnbGlua3MnLCBpdGVtVHlwZV0pID9cclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cGFyZW50SXRlbXNbcGFyZW50SWRdLmxpbmtzW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH0sXHJcblx0XHRcdFx0XHRjb2x1bW5TZXQsXHJcblx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHQpIDpcclxuXHRcdFx0XHRbXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpLnRoZW4oXHJcblx0XHRcdHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0aXRlbXM6IHJlc29sdmVkLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uOiBjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRlZGl0OiBmYWxzZSxcclxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCxcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG5vb3BcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVPcHRpb25zIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoZmlyc3Rba2V5XSAhPT0gc2Vjb25kW2tleV0pXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBEVVBMSUNBVEVfS0VZV09SRCwgRFVQTElDQVRFX1BSRUZJWCwgTkVXX0tFWVdPUkQsIE5FV19QUkVGSVggfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQsIFN0YXRlS2V5LCBTdGF0ZUtleVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgS2V5U2VydmljZSB7XHJcblx0c2VwYXJhdG9yOiBzdHJpbmcgPSAnOic7XHJcblxyXG5cdGNvbnN0cnVjdG9yICgpIHt9XHJcblxyXG5cdGdldFNpbmdsZUtleSAoaXRlbVR5cGU6IHN0cmluZywgaXRlbUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBpdGVtVHlwZS5jb25jYXQodGhpcy5zZXBhcmF0b3IsIFN0cmluZyhpdGVtSWQpKTtcclxuXHR9XHJcblxyXG5cdGdldENzc0tleSAoKSB7XHJcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChhcmd1bWVudHMsICdfJyk7XHJcblx0fVxyXG5cclxuXHRwYXJzZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nKTogU3RhdGVLZXkgfCBudWxsIHtcclxuXHRcdHN0YXRlS2V5ID0gc3RhdGVLZXkudG9TdHJpbmcoKTtcclxuXHJcblx0XHRpZiAodGhpcy5pc05ld1N0YXRlS2V5KHN0YXRlS2V5KSlcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHR0eXBlOiBTdGF0ZUtleVR5cGUuTmV3LFxyXG5cdFx0XHRcdHRlbXBsYXRlOiBzdGF0ZUtleS5zdWJzdHJpbmcoTkVXX0tFWVdPUkQubGVuZ3RoKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdGlmICh0aGlzLmlzRHVwbGljYXRlU3RhdGVLZXkoc3RhdGVLZXkpKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUsXHJcblx0XHRcdFx0aXRlbUlkOiBzdGF0ZUtleS5zdWJzdHJpbmcoRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0RHVwbGljYXRlU3RhdGVLZXkgKGl0ZW1JZDogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBEVVBMSUNBVEVfS0VZV09SRCArIGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGdldE5ld1N0YXRlS2V5ICh0ZW1wbGF0ZVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gTkVXX0tFWVdPUkQgKyB0ZW1wbGF0ZVR5cGU7XHJcblx0fVxyXG5cclxuXHRpc0R1cGxpY2F0ZVN0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodHlwZW9mIHN0YXRlS2V5ID09PSAnbnVtYmVyJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBzdGF0ZUtleS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKSA9PT0gRFVQTElDQVRFX0tFWVdPUkQ7XHJcblx0fVxyXG5cclxuXHRpc05ld1N0YXRlS2V5IChzdGF0ZUtleTogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodHlwZW9mIHN0YXRlS2V5ID09PSAnbnVtYmVyJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBzdGF0ZUtleS5zdWJzdHJpbmcoMCwgTkVXX0tFWVdPUkQubGVuZ3RoKSA9PT0gTkVXX0tFWVdPUkQ7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbElkICgpOiBJdGVtSWQge1xyXG5cdFx0cmV0dXJuICsoTkVXX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxEdXBsaWNhdGVJZCAoKTogSXRlbUlkIHtcclxuXHRcdHJldHVybiArKERVUExJQ0FURV9QUkVGSVggKyB0aGlzLmdldFJhbmRvbVN0cmluZygpKTtcclxuXHR9XHJcblxyXG5cdGdldFJhbmRvbVN0cmluZyAoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiAoJycgKyBNYXRoLnJhbmRvbSgpKS5zcGxpdCgnLicpWzFdLnN1YnN0cigwLCA4KTtcclxuXHR9XHJcblxyXG5cdC8vIG5vdGU6IHRoZSBjaGFuZ2VzIGNvbXBpbGVyIHVzZXMgdGhpc1xyXG5cdC8vIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIHVuZGVmaW5lZCAoaXRlbUhhbmRsZXIuY3JlYXRlUmVxdWVzdClcclxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHRoaXMuaXNOZXdJZChpdGVtSWQpIHx8IHRoaXMuaXNEdXBsaWNhdGVJZChpdGVtSWQpKTtcclxuXHR9XHJcblxyXG5cdGlzTmV3SWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc05ld1N0YXRlS2V5KGl0ZW1JZCkgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgTkVXX1BSRUZJWC5sZW5ndGgpID09PSBORVdfUFJFRklYO1xyXG5cdH1cclxuXHJcblx0aXNEdXBsaWNhdGVJZCAoaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmlzRHVwbGljYXRlU3RhdGVLZXkoaXRlbUlkKSB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBEVVBMSUNBVEVfUFJFRklYLmxlbmd0aCkgPT09IERVUExJQ0FURV9QUkVGSVg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdExvY2tTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbVJlc291cmNlRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbU9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGUge1xyXG5cdGl0ZW1zOiBJdGVtQ2FjaGU7XHJcblx0cm9vdEl0ZW06IEl0ZW1FbnRyeSB8IHVuZGVmaW5lZDtcclxuXHRjb2xsZWN0aW9uczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cdGRlZmVycmVkQ29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHR0YWJSZXF1ZXN0UGFyYW1ldGVycyA9IHt9O1xyXG5cclxuXHRjYWxsYmFja3MgPSB7b25CZWZvcmVTYXZlOiB7fSwgb25TYXZlU3VjY2Vzczoge30sIG9uU2F2ZVdpdGhvdXRDbG9zaW5nOiB7fX07XHJcblxyXG5cdGNoYW5nZXNJbnRlcnZhbDogbnVsbCB8IG51bWJlciA9IG51bGw7XHJcblx0aGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgaWQ6IHN0cmluZyA9ICcnXHJcblx0KSB7XHJcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdFx0dGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zLCBpc1Jvb3Q6IGJvb2xlYW4gPSBmYWxzZSwgaXNOZXc/OiBib29sZWFuKSB7XHJcblx0XHRpZiAoaXNSb290KVxyXG5cdFx0XHR0aGlzLnJvb3RJdGVtID0gaXRlbUVudHJ5O1xyXG5cclxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblx0XHRvcHRpb25zLm9uRGVhY3RpdmF0ZSA9IChfaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMub25EZWFjdGl2YXRlSXRlbShfaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LmNvbnN0cnVjdChpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgb3B0aW9uczogSXRlbU9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIHJlc291cmNlT3B0aW9ucykge1xyXG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uQWN0aXZhdGVJdGVtID0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uQWN0aXZhdGVJdGVtKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmVzb3VyY2VPcHRpb25zLm9uRGVhY3RpdmF0ZUl0ZW0gPSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHRoaXMub25EZWFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uID1cclxuXHRcdFx0KF9jb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkgPT4gdGhpcy5jbGVhckNvbGxlY3Rpb24oX2NvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoY29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyAoY29sbGVjdGlvbkVudHJpZXM6IENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLCByZXNvdXJjZU9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbkVudHJpZXMpXHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShjb2xsZWN0aW9uRW50cmllc1twYXJlbnRJZF0sIHJlc291cmNlT3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNsZWFySXRlbSAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpIHtcclxuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbVJlc291cmNlLmVudHJ5KTtcclxuXHR9XHJcblxyXG5cdGNsZWFySXRlbUVudHJ5IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5pdGVtcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhckNvbGxlY3Rpb24gKGNvbGxlY3Rpb25SZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBjb2xsZWN0aW9uUmVzb3VyY2UuZW50cnk7XHJcblxyXG5cdFx0dGhpcy5jb2xsZWN0aW9ucy5jbGVhcihjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0Y29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJUYWJDaGFuZ2UgPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5pdGVtcy5mb3JFYWNoKFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiBjb2xsZWN0aW9uRW50cnkuY2xlYXJSZXNvdXJjZXMoaXNTdWJUYWJDaGFuZ2UpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuZGVmZXJyZWRDb2xsZWN0aW9ucy5jbGVhcigpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlU2luZ2xlSXRlbXMgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gY29udmVyc2lvbk1hcCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IG9sZEl0ZW1JZCBpbiBjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbXMuZ2V0KGl0ZW1UeXBlLCBvbGRJdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0dGhpcy5pdGVtcy51cGRhdGVJdGVtSWQoaXRlbUVudHJ5LCBvbGRJdGVtSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXNvdXJjZXMgd2lsbCBiZSBjbGVhcmVkIGxhdGVyIChjbGVhciBmdW5jdGlvbilcclxuXHRyZXZlcnRDaGFuZ2VzICgpIHtcclxuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuZm9yRWFjaChcclxuXHRcdFx0KGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSA9PiB0aGlzLnJlc2V0Q29sbGVjdGlvbihjb2xsZWN0aW9uRW50cnkpXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmlzTG9ja2FibGUoKSA/XHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZGVsZXRlTG9jayh0aGlzLnJvb3RJdGVtKSA6XHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0cmVzZXRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSk6IHZvaWQge1xyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzKVxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmV2ZXJ0Q2hhbmdlcygpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgY29sbGVjdGlvbkVudHJ5Lml0ZW1zKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNldE1vZGlmaWVkKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRkZXRlY3RDaGFuZ2VzICgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmhhc0NoYW5nZXMpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5pdGVtcy5zb21lKFxyXG5cdFx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKVxyXG5cdFx0XHQpXHJcblx0XHQpXHJcblx0XHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmhhc0NoYW5nZXMgPSB0aGlzLmNvbGxlY3Rpb25zLnNvbWUoXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5jb2xsZWN0aW9uSGFzQ2hhbmdlcyhjb2xsZWN0aW9uRW50cnkpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFzQ2hhbmdlcyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcyAmJiAoY29sbGVjdGlvbkVudHJ5Lmhhc0FkZGVkSXRlbXMoKSB8fCBjb2xsZWN0aW9uRW50cnkuaGFzUmVtb3ZlZEl0ZW1zKCkpKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzICYmIGNvbGxlY3Rpb25FbnRyeS5oYXNVcGRhdGVkSXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdGlzTG9ja2FibGUgKCkge1xyXG5cdFx0aWYgKHRoaXMucm9vdEl0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnJvb3RJdGVtLmlzTG9ja2FibGUoKTtcclxuXHR9XHJcblxyXG5cdHNhdmUgKFxyXG5cdFx0Y2xvc2VUYWIgPSBmYWxzZSxcclxuXHRcdHBhcmFtZXRlcnM6IENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAgPSB7fSxcclxuXHRcdGJyZWFrVXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCkge1xyXG5cdFx0dGhpcy5kaXNhYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHJcblx0XHRyZXR1cm4gKHRoaXMuaXNMb2NrYWJsZSgpID8gdGhpcy5sb2NrU2VydmljZS5mZXRjaExvY2soPEl0ZW1FbnRyeT4gdGhpcy5yb290SXRlbSkgOiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKSkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uQmVmb3JlU2F2ZScsIGNsb3NlVGFiKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXF1ZXN0UGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgdGhpcy50YWJSZXF1ZXN0UGFyYW1ldGVycywgcGFyYW1ldGVycyk7XHJcblxyXG5cdFx0XHRcdHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShcclxuXHRcdFx0XHRcdHRoaXMuaXRlbXMudG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9ucy50b0FycmF5KCksXHJcblx0XHRcdFx0XHRyZXF1ZXN0UGFyYW1ldGVycyxcclxuXHRcdFx0XHRcdGJyZWFrVXBCeVBhcmVudCxcclxuXHRcdFx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGNvbnZlcnNpb25NYXAgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuY2xlYXJMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0aWYgKCFjbG9zZVRhYilcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2luZ2xlSXRlbXMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVDYWxsYmFja3MoJ29uU2F2ZVN1Y2Nlc3MnLCBjb252ZXJzaW9uTWFwKS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWNsb3NlVGFiKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvblNhdmVXaXRob3V0Q2xvc2luZycsIGNvbnZlcnNpb25NYXAsIHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZW5hYmxlQ2hhbmdlc1dhdGNoZXIoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ2FsbGJhY2tzIChldmVudCwgLi4uYXJncykge1xyXG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3NbZXZlbnRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpXHJcblx0XHRcdHJlc3VsdFtrZXldID0gY2FsbGJhY2tzW2tleV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVuYWJsZUNoYW5nZXNXYXRjaGVyICgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCAhPT0gbnVsbCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ0NoYW5nZXMgd2F0Y2hlciBhbHJlYWR5IHJ1bm5pbmchJywgdGhpcyk7XHJcblx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGlmICghdGhpcy5kZXRlY3RDaGFuZ2VzKCkpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLmlzTG9ja2FibGUoKSlcclxuXHRcdFx0XHRcdHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQzMDAwXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZGlzYWJsZUNoYW5nZXNXYXRjaGVyICgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmNoYW5nZXNJbnRlcnZhbCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5jaGFuZ2VzSW50ZXJ2YWwpO1xyXG5cdFx0dGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cmVnaXN0ZXJDYWxsYmFjayAoZXZlbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIGNhbGxiYWNrKTogKCkgPT4gdm9pZCB7XHJcblx0XHR0aGlzLmNhbGxiYWNrc1tldmVudF1ba2V5XSA9IGNhbGxiYWNrO1xyXG5cclxuXHRcdHJldHVybiAoKSA9PiBkZWxldGUgdGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV07XHJcblx0fVxyXG5cclxuXHRvbkRlYWN0aXZhdGVJdGVtIChpdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuY2xlYXJJdGVtRW50cnkoaXRlbUVudHJ5KTtcclxuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRvbkFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLml0ZW1zLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0Ly8gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NrU2VydmljZSB7XHJcblx0bG9ja0l0ZW1zID0ge307XHJcblx0cHJvbWlzZXMgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGdldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgbWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0c2V0VmFsdWUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCB2YWx1ZSwgbWFwKSB7XHJcblx0XHRyZXR1cm4gY3JlYXRlUGF0aChcclxuXHRcdFx0bWFwLFxyXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0W3t9LCB2YWx1ZV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NrcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2NrSXRlbXM7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NrIChsb2NrVG9rZW5JZCkge1xyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiB0aGlzLmxvY2tJdGVtcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdGlmICghbG9ja0l0ZW0uaXNGb3JlaWduICYmIGxvY2tJdGVtLmlkID09IGxvY2tUb2tlbklkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdCAod2F0Y2hlZClcclxuXHRpc0xvY2tlZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBsb2NrSXRlbS5pc0ZvcmVpZ247XHJcblx0fVxyXG5cclxuXHRnZXRNZXNzYWdlIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGxvY2tJdGVtID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9ja0l0ZW0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbilcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbG9ja0l0ZW0ubWVzc2FnZTtcclxuXHR9XHJcblxyXG5cdC8vIGRvZXMgbm90IHJlamVjdCB3aGVuIGEgZm9yZWlnbiBsb2NrIGlzIGVuY291bnRlcmVkXHJcblx0Ly8gaXMgYWxzbyB1c2VkIGJ5IGRlbGV0ZUxvY2tcclxuXHRmZXRjaENhY2hlZExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMubG9ja0l0ZW1zKTtcclxuXHJcblx0XHRpZiAobG9jayAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGxvY2spO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmdldFZhbHVlKGl0ZW1FbnRyeSwgdGhpcy5wcm9taXNlcyk7XHJcblxyXG5cdFx0aWYgKHByb21pc2UgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHByb21pc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihsb2NrSXRlbSA9PiB7XHJcblx0XHRcdFx0aWYgKGxvY2tJdGVtICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnJlcXVlc3RMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKGxvY2tJdGVtID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduID9cclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChsb2NrSXRlbS5tZXNzYWdlKSA6XHJcblx0XHRcdFx0XHRsb2NrSXRlbS50b2tlbjtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdExvY2sgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0Y29uc3QgcHJvbWlzZSA9IHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY3JlYXRlKFxyXG5cdFx0XHQnTG9ja3Rva2VuJyxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLmdldExvY2FsSWQoKSxcclxuXHRcdFx0e2l0ZW10eXBlOiBpdGVtVHlwZSwgaXRlbTogaXRlbUlkfVxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdCdMb2NrdG9rZW4nLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rcy5Mb2NrdG9rZW5bMF1cclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sIGVycm9yID0+IHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0aWYgKGVycm9yLmNvZGUgPT09IDMwMSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdGlzRm9yZWlnbjogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlOiBlcnJvci5tZXNzYWdlXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMubG9ja0l0ZW1zXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuc2V0VmFsdWUoaXRlbUVudHJ5LCBwcm9taXNlLCB0aGlzLnByb21pc2VzKTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hDYWNoZWRMb2NrKGl0ZW1FbnRyeSkudGhlbihjYWNoZWRMb2NrID0+IHtcclxuXHRcdFx0XHQvLyB1bmRlZmluZWQ6IG5vdCByZXF1ZXN0ZWQgeWV0XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGlmIChjYWNoZWRMb2NrLmlzRm9yZWlnbikge1xyXG5cdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZSgnTG9ja3Rva2VuJywgY2FjaGVkTG9jay5pZClcclxuXHRcdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhckxvY2soaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhckxvY2sgKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMubG9ja0l0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIGRlbGV0ZSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmNvbnN0IEVNUFRZX0VOVFJZID0ge307XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRwYXJlbnRNYXA6IGFueSA9IHt9O1xyXG5cdGRlc3RpbmF0aW9uOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSByb290SXRlbUVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwcml2YXRlIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0cHJvY2VzcyAoKSB7XHJcblx0XHR0aGlzLnBhcmVudE1hcCA9IHRoaXMuY3JlYXRlUGFyZW50TWFwKHRoaXMuc2luZ2xlSXRlbUNhY2hlKTtcclxuXHRcdHRoaXMucHJvY2Vzc0l0ZW1zKHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSwgW3RoaXMucm9vdEl0ZW1FbnRyeV0sIHt9KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRpdGVtVHlwZTogdGhpcy5yb290SXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtSWQsXHJcblx0XHRcdGl0ZW1zOiB0aGlzLmRlc3RpbmF0aW9uXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjcmVhdGVQYXJlbnRNYXAgKGl0ZW1DYWNoZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0aXRlbUNhY2hlLmZvckVhY2goXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbCkgLy8gd2UgZG9uJ3QgY2FyZSBmb3IgaXRlbXMgdGhhdCBhcmUgbm90IGxpbmtlZCB0byB0aGUgcm9vdCBpdGVtXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnQuaXRlbVR5cGU7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3BhcmVudFR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbcGFyZW50VHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdFx0bGV0IG1hcEVudHJ5ID0gcmVzdWx0W3BhcmVudFR5cGVdO1xyXG5cclxuXHRcdFx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBFbnRyeVtwYXJlbnRJZF0gPSB7fTtcclxuXHJcblx0XHRcdFx0bWFwRW50cnkgPSBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblxyXG5cdFx0XHRcdGlmIChtYXBFbnRyeVtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdG1hcEVudHJ5W2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NJdGVtcyAoaXRlbVR5cGUsIGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgbGlua0FjY3VtdWxhdG9yKSB7XHJcblx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAobGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRsaW5rQWNjdW11bGF0b3JbaXRlbVR5cGVdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdC8vIGVhY2ggaXRlbSBvbmx5IGhhcyBhIHNpbmdsZSBwYXJlbnQsIHNvIHdlIGNhbiBzYWZlbHkgZG8gdGhpc1xyXG5cdFx0XHRpZiAodGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXS5wdXNoKGl0ZW1JZCk7XHJcblxyXG5cdFx0XHR0aGlzLmRlc3RpbmF0aW9uW2l0ZW1UeXBlXVtpdGVtSWRdID0gdGhpcy5wcm9jZXNzSXRlbShpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5nZXRJdGVtc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0Y29uc3QgY2hpbGRDb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlLmdldENvbGxlY3Rpb25zQnlQYXJlbnQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRjb25zdCB2YWx1ZXMgPSBpdGVtRW50cnkuZm9ybWF0UmVxdWVzdCgpO1xyXG5cdFx0Y29uc3QgbGlua3MgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkVHlwZSBpbiBjaGlsZEl0ZW1zKVxyXG5cdFx0XHR0aGlzLnByb2Nlc3NJdGVtcyhjaGlsZFR5cGUsIGNoaWxkSXRlbXNbY2hpbGRUeXBlXSwgbGlua3MpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNoaWxkQ29sbGVjdGlvbnMpIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLnF1ZXJ5ICE9PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlLCBjb2xsZWN0aW9uRW50cnkuaXRlbXMsIGxpbmtzKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBoYXNWYWx1ZXMgPSBoYXNQcm9wZXJ0aWVzKHZhbHVlcyk7XHJcblx0XHRjb25zdCBoYXNMaW5rcyA9IGhhc1Byb3BlcnRpZXMobGlua3MpO1xyXG5cclxuXHRcdGlmIChoYXNWYWx1ZXMgJiYgaGFzTGlua3MpXHJcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXMsIGxpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0aWYgKGhhc1ZhbHVlcylcclxuXHRcdFx0cmV0dXJuIHt2YWx1ZXM6IHZhbHVlc307XHJcblxyXG5cdFx0aWYgKGhhc0xpbmtzKVxyXG5cdFx0XHRyZXR1cm4ge2xpbmtzOiBsaW5rc307XHJcblxyXG5cdFx0cmV0dXJuIEVNUFRZX0VOVFJZO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJdGVtc0J5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLnBhcmVudE1hcFtwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRpZiAobWFwRW50cnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdGlmIChtYXBFbnRyeVtwYXJlbnRJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdHJldHVybiBtYXBFbnRyeVtwYXJlbnRJZF07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQXBpRm9ybWF0dGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1UeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcywgaW5BcnJheSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5jb25zdCBNQVlCRSA9ICdtYXliZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyBmaWVsZHM6IEZpZWxkTWFwLFxyXG5cdFx0cHVibGljIHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29tcGFyZVZhbHVlcyAodmFsdWUsIHF1ZXJ5VmFsdWUpIHtcclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQocXVlcnlWYWx1ZSkpXHJcblx0XHRcdHJldHVybiB0aGlzLmFwaUZvcm1hdHRlci5jb21wYXJlTW9tZW50T2JqZWN0cyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHF1ZXJ5VmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZUR1cmF0aW9ucyhxdWVyeVZhbHVlLCB2YWx1ZSk7XHJcblxyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBxdWVyeVZhbHVlID09IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAocXVlcnk6IGFueSk6IGJvb2xlYW4gfCBzdHJpbmcge1xyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoTGlua2VkVG9RdWVyeShxdWVyeSk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hDb21wbGV4UXVlcnkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubWF0Y2hTaW1wbGVRdWVyeSh0aGlzLmZpZWxkc1txdWVyeS5rZXldLCBxdWVyeSk7XHJcblxyXG5cdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHF1ZXJ5KSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIHF1ZXJ5ISBQYXJzZWQ/Jyk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoTGlua2VkVG9RdWVyeSAocXVlcnkpIHtcclxuXHRcdGlmIChxdWVyeS5yZXZlcnNlKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRsZXQgbWF0Y2g7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0bWF0Y2ggPSBmYWxzZTtcclxuXHRcdGVsc2UgaWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSBwYXJlbnQuaXRlbVR5cGUpXHJcblx0XHRcdG1hdGNoID0gZmFsc2U7XHJcblx0XHRlbHNlXHJcblx0XHRcdG1hdGNoID0gdGhpcy5tYXRjaFNpbXBsZVF1ZXJ5KHBhcmVudC5pdGVtSWQsIHF1ZXJ5LnF1ZXJ5KTtcclxuXHJcblx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblxyXG5cdFx0cmV0dXJuIHF1ZXJ5Lm5vdCA/ICFtYXRjaCA6IG1hdGNoO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaENvbXBsZXhRdWVyeSAocXVlcnkpIHtcclxuXHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBxdWVyeS5jb25kaXRpb25zO1xyXG5cclxuXHRcdGxldCByZXN1bHQ7XHJcblx0XHRsZXQgdGVybWluYWw7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5vcGVyYXRvcikge1xyXG5cdFx0XHRjYXNlICdBTkQnOlxyXG5cdFx0XHRcdHJlc3VsdCA9IHRydWU7XHJcblx0XHRcdFx0dGVybWluYWwgPSBmYWxzZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnT1InOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGZhbHNlO1xyXG5cdFx0XHRcdHRlcm1pbmFsID0gdHJ1ZTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaFF1ZXJ5KGNvbmRpdGlvbik7XHJcblxyXG5cdFx0XHRpZiAobWF0Y2ggPT09IHRlcm1pbmFsKVxyXG5cdFx0XHRcdHJldHVybiB0ZXJtaW5hbDtcclxuXHJcblx0XHRcdGlmIChtYXRjaCA9PT0gTUFZQkUpXHJcblx0XHRcdFx0cmVzdWx0ID0gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hTaW1wbGVRdWVyeSAodmFsdWUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBrZXkgPSBxdWVyeS5rZXk7XHJcblx0XHRsZXQgcXVlcnlWYWx1ZSA9IHF1ZXJ5LnZhbHVlO1xyXG5cclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpIC8vIENvdWxkIGJlIGxpbmtlZFRvIGFuIGVtcHR5IG9iamVjdFxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ1JlcXVpcmVkIGZpZWxkJywga2V5LCAnbm90IGZvdW5kIGZvcicsIHRoaXMuaXRlbVR5cGUpO1xyXG5cdFx0XHRyZXR1cm4gTUFZQkU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHF1ZXJ5VmFsdWUgPT09ICdOT1cnKVxyXG5cdFx0XHRxdWVyeVZhbHVlID0gbW9tZW50KCk7XHJcblxyXG5cdFx0c3dpdGNoIChxdWVyeS5jb21wYXJhdG9yKSB7XHJcblx0XHRcdGNhc2UgJz0nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICchPSc6XHJcblx0XHRcdFx0cmV0dXJuICF0aGlzLmNvbXBhcmVWYWx1ZXModmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRjYXNlICc8JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPCBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc8PSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDw9IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz4nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA+IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJz49JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPj0gcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnSU4nOlxyXG5cdFx0XHRcdHJldHVybiBpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnTk9UIElOJzpcclxuXHRcdFx0XHRyZXR1cm4gIWluQXJyYXkodmFsdWUsIHF1ZXJ5VmFsdWUpO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBjb21wYXJhdG9yOiAnICsgcXVlcnkuY29tcGFyYXRvciArICcgaW4gcXVlcnkgJyArIHF1ZXJ5KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBnZXRGaXJzdFByb3BlcnR5IH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmVudW0gQ09OU1RBTlRTIHtcclxuXHRPQkogPSAwLFxyXG5cdFNUUiA9IDEsXHJcblx0U0VQID0gJzonXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlciB7XHJcblx0cXVlcnk6IGFueTtcclxuXHRwYXJhbWV0ZXJzOiBhbnk7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChxdWVyeSwgcGFyYW1ldGVycz8pIHtcclxuXHRcdHRoaXMucXVlcnkgPSBxdWVyeTtcclxuXHRcdHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NWYWx1ZSAodmFsdWUpIHtcclxuXHRcdC8vIGFsZ29yaXRobSBpcyBub3QgaW1wb3J0YW50LCBhcyBsb25nIGFzIGFsbCBhcnJheXMgYXJlIHNvcnRlZCB0aGUgc2FtZSB3YXlcclxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHZhbHVlLnNsaWNlKCkuc29ydCgpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNNb21lbnQodmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50KHZhbHVlKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzRHVyYXRpb24odmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gbW9tZW50LmR1cmF0aW9uKHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbXBhcmVQYXJzZWRRdWVyaWVzIChhLCBiKSB7XHJcblx0XHRpZiAoYVtDT05TVEFOVFMuU1RSXSA9PT0gYltDT05TVEFOVFMuU1RSXSlcclxuXHRcdFx0cmV0dXJuIDA7XHJcblxyXG5cdFx0cmV0dXJuIGFbQ09OU1RBTlRTLlNUUl0gPiBiW0NPTlNUQU5UUy5TVFJdID8gMSA6IC0xO1xyXG5cdH1cclxuXHJcblx0cGFyc2UgKHF1ZXJ5ID0gdGhpcy5xdWVyeSkge1xyXG5cdFx0aWYgKHF1ZXJ5LmxpbmtlZFRvICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlTGlua2VkVG9RdWVyeShcclxuXHRcdFx0XHRxdWVyeS5saW5rZWRUbyxcclxuXHRcdFx0XHRxdWVyeS5xdWVyeSxcclxuXHRcdFx0XHRxdWVyeS5yZXZlcnNlLFxyXG5cdFx0XHRcdHF1ZXJ5Lm5vdFxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5ub3QgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogXCJOb3RcIiBub3Qgc3VwcG9ydGVkJyk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmN1c3RvbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUN1c3RvbVF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmN1c3RvbSxcclxuXHRcdFx0XHRxdWVyeS5wYXJhbWV0ZXJzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LnNlYXJjaCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVNlYXJjaFF1ZXJ5KHF1ZXJ5LnNlYXJjaCk7XHJcblxyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDb21wbGV4UXVlcnkoXHJcblx0XHRcdFx0cXVlcnkuY29uZGl0aW9ucyxcclxuXHRcdFx0XHRxdWVyeS5vcGVyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5rZXkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTaW1wbGVRdWVyeShcclxuXHRcdFx0XHRxdWVyeS5rZXksXHJcblx0XHRcdFx0cXVlcnkudmFsdWUsXHJcblx0XHRcdFx0cXVlcnkuY29tcGFyYXRvclxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGtleSA9IGdldEZpcnN0UHJvcGVydHkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChrZXkgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBbe30sICd7fSddO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoa2V5LCBxdWVyeVtrZXldKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTZWFyY2hRdWVyeSAodmFsdWUpIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e3NlYXJjaDogdmFsdWVbQ09OU1RBTlRTLk9CSl19LFxyXG5cdFx0XHQnWycgKyAnc2VhcmNoJyArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDdXN0b21RdWVyeSAoY3VzdG9tLCBwYXJhbWV0ZXJzKSB7XHJcblx0XHRpZiAocGFyYW1ldGVycyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gW1xyXG5cdFx0XHRcdHtjdXN0b206IGN1c3RvbX0sXHJcblx0XHRcdFx0J1snICsgY3VzdG9tICsgJ10nXHJcblx0XHRcdF07XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUGFyYW1ldGVycyA9IHRoaXMucGFyc2VDdXN0b21QYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjdXN0b206IGN1c3RvbSwgcGFyYW1ldGVyczogcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuT0JKXX0sXHJcblx0XHRcdCdbJyArIGN1c3RvbSArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRQYXJhbWV0ZXJzW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUN1c3RvbVBhcmFtZXRlcnMgKHBhcmFtZXRlcnMpIHtcclxuXHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5zb3J0KCk7XHJcblxyXG5cdFx0Y29uc3QgcXVlcnkgPSB7fTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0ga2V5c1tpXTtcclxuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKHBhcmFtZXRlcnNba2V5XSk7XHJcblxyXG5cdFx0XHRxdWVyeVtrZXldID0gdmFsdWVbQ09OU1RBTlRTLk9CSl07XHJcblxyXG5cdFx0XHRpZiAoaSA+IDApXHJcblx0XHRcdFx0c3RyaW5nICs9IENPTlNUQU5UUy5TRVA7XHJcblxyXG5cdFx0XHRzdHJpbmcgKz0gdmFsdWVbQ09OU1RBTlRTLlNUUl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VTaW1wbGVRdWVyeSAoa2V5LCB2YWx1ZSwgY29tcGFyYXRvcj8pIHtcclxuXHRcdHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKGNvbXBhcmF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0Y29tcGFyYXRvciA9IEFycmF5LmlzQXJyYXkodmFsdWVbQ09OU1RBTlRTLk9CSl0pID8gJ0lOJyA6ICc9JztcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7a2V5OiBrZXksIHZhbHVlOiB2YWx1ZVtDT05TVEFOVFMuT0JKXSwgY29tcGFyYXRvcjogY29tcGFyYXRvcn0sXHJcblx0XHRcdCdbJyArIGNvbXBhcmF0b3IgKyBDT05TVEFOVFMuU0VQICsga2V5ICsgQ09OU1RBTlRTLlNFUCArIHZhbHVlW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUxpbmtlZFRvUXVlcnkgKGxpbmtlZFRvLCBxdWVyeSwgcmV2ZXJzZSwgbm90KSB7XHJcblx0XHRpZiAocXVlcnkgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cXVlcnkgPSB7fTtcclxuXHJcblx0XHRpZiAocmV2ZXJzZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXZlcnNlID0gZmFsc2U7XHJcblxyXG5cdFx0aWYgKG5vdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRub3QgPSBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBwYXJzZWRRdWVyeSA9IHRoaXMucGFyc2UocXVlcnkpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtsaW5rZWRUbzogbGlua2VkVG8sIHF1ZXJ5OiBwYXJzZWRRdWVyeVtDT05TVEFOVFMuT0JKXSwgcmV2ZXJzZTogcmV2ZXJzZSwgbm90OiBub3R9LFxyXG5cdFx0XHQnWycgKyAnbGlua2VkVG8nICsgQ09OU1RBTlRTLlNFUCArIGxpbmtlZFRvICsgQ09OU1RBTlRTLlNFUCArIHBhcnNlZFF1ZXJ5W0NPTlNUQU5UUy5TVFJdICsgQ09OU1RBTlRTLlNFUCArIHJldmVyc2UgKyBDT05TVEFOVFMuU0VQICsgbm90ICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUNvbXBsZXhRdWVyeSAoY29uZGl0aW9ucywgb3BlcmF0b3IpIHtcclxuXHRcdGlmIChvcGVyYXRvciA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRvcGVyYXRvciA9ICdBTkQnO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRvcGVyYXRvciA9IG9wZXJhdG9yLnRvVXBwZXJDYXNlKCk7XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkQ29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGNvbmRpdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtjb25kaXRpb25zOiBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5PQkpdLCBvcGVyYXRvcjogb3BlcmF0b3J9LFxyXG5cdFx0XHQnWycgKyBvcGVyYXRvciArIHBhcnNlZENvbmRpdGlvbnNbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ29uZGl0aW9ucyAoY29uZGl0aW9ucykge1xyXG5cdFx0bGV0IHBhcnNlZENvbmRpdGlvbnM6IG9iamVjdFtdID0gW107XHJcblx0XHRjb25zdCBxdWVyeTogb2JqZWN0W10gPSBbXTtcclxuXHRcdGxldCBzdHJpbmcgPSAnJztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBjb25kaXRpb25zKVxyXG5cdFx0XHRwYXJzZWRDb25kaXRpb25zLnB1c2godGhpcy5wYXJzZShjb25kaXRpb24pKTtcclxuXHJcblx0XHRwYXJzZWRDb25kaXRpb25zID0gcGFyc2VkQ29uZGl0aW9ucy5zb3J0KChhLCBiKSA9PiB0aGlzLmNvbXBhcmVQYXJzZWRRdWVyaWVzKGEsIGIpKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcnNlZENvbmRpdGlvbiBvZiBwYXJzZWRDb25kaXRpb25zKSB7XHJcblx0XHRcdHF1ZXJ5LnB1c2gocGFyc2VkQ29uZGl0aW9uW0NPTlNUQU5UUy5PQkpdKTtcclxuXHRcdFx0c3RyaW5nICs9IHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuU1RSXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gW3F1ZXJ5LCBzdHJpbmddO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JtYXRWYWx1ZSAodmFsdWUpIHtcclxuXHRcdGxldCBwcm9jZXNzZWRWYWx1ZTtcclxuXHJcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcmJykge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XHJcblxyXG5cdFx0XHR2YWx1ZSA9IHRoaXMucGFyYW1ldGVyc1trZXldO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeVBhcnNlcjogVW5kZWZpbmVkIHRlbXBsYXRlIHBhcmFtZXRlciBcXCcnICsga2V5ICsgJ1xcJycpO1xyXG5cclxuXHRcdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gW3Byb2Nlc3NlZFZhbHVlLCBrZXkgKyAnPicgKyB2YWx1ZV07XHJcblx0XHR9XHJcblxyXG5cdFx0cHJvY2Vzc2VkVmFsdWUgPSB0aGlzLnByb2Nlc3NWYWx1ZSh2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwgJycgKyBwcm9jZXNzZWRWYWx1ZV07XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGFkZEFuZENvbmRpdGlvbiAocXVlcnksIGNvbmRpdGlvbikge1xyXG5cdFx0aWYgKHF1ZXJ5LmNvbmRpdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl19O1xyXG5cclxuXHRcdC8vIHdlIGhhdmUgYW4gJ2FuZCcgY29uZGl0aW9uXHJcblx0XHRyZXR1cm4ge2NvbmRpdGlvbnM6IHF1ZXJ5LmNvbmRpdGlvbnMuY29uY2F0KGNvbmRpdGlvbil9O1xyXG5cdH1cclxuXHJcblx0YWRkT3JDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcclxuXHRcdGlmIChxdWVyeS5vcGVyYXRvciA9PT0gJ29yJylcclxuXHRcdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcclxuXHJcblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxyXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBbcXVlcnksIGNvbmRpdGlvbl0sIG9wZXJhdG9yOiAnb3InfTtcclxuXHR9XHJcblxyXG5cdGFkZFBhcmVudENvbmRpdGlvbiAocXVlcnksIHBhcmVudCkge1xyXG5cdFx0bGV0IGxpbmtlZFRvUXVlcnk7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHF1ZXJ5O1xyXG5cclxuXHRcdGxpbmtlZFRvUXVlcnkgPSB7bGlua2VkVG86IHBhcmVudC5pdGVtVHlwZSwgcXVlcnk6IHBhcmVudC5pdGVtSWR9O1xyXG5cclxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/IGxpbmtlZFRvUXVlcnkgOiB0aGlzLmFkZEFuZENvbmRpdGlvbihxdWVyeSwgbGlua2VkVG9RdWVyeSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVOb3RJbiAoaWRBcnJheSkge1xyXG5cdFx0cmV0dXJuIHtjb21wYXJhdG9yOiAnTk9UIElOJywga2V5OiAnaWQnLCB2YWx1ZTogaWRBcnJheX07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwgfSBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24ge1xyXG5cdHByaXZhdGUgY29sdW1ucyA9IHt9O1xyXG5cdHByaXZhdGUgY29sdW1uSW5mb0lkTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kIChjb2x1bW5JbmZvKSB7XHJcblx0XHRpZiAodGhpcy5jb2x1bW5JbmZvSWRNYXBbY29sdW1uSW5mby5pZF0pXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbHVtbkluZm8uaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblV0aWxcclxuXHRcdFx0Lm1lcmdlUmVxdWVzdENvbHVtbnModGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSwgY29sdW1uSW5mby5yZXF1ZXN0KVxyXG5cdFx0XHQubWVyZ2VkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGdldCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5zO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbGxlY3Rpb25IYW5kbGVyLCBJdGVtSGFuZGxlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q29sdW1uU2V0RmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uTWF0Y2hSZXN1bHQsIEZpZWxkTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU29ja2V0TWVzc2FnZUhhbmRsZXIge1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgaXRlbUVudHJ5RmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSByZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTogUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0b25NZXNzYWdlUmVjZWl2ZWQgKG1lc3NhZ2U6IGFueSk6IGFueSB7XHJcblx0XHRzd2l0Y2ggKG1lc3NhZ2UuYm9keS5ldmVudFR5cGUpIHtcclxuXHRcdFx0Y2FzZSAndXBkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVVcGRhdGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2NyZWF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQ3JlYXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdkZWxldGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZURlbGV0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnbGlua1RvJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVMaW5rTW92ZSgvKiBtZXNzYWdlICovKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdE1lc3NhZ2VWYWx1ZXMgKHZhbHVlcywgY29sdW1ucyk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gY29sdW1ucylcclxuXHRcdFx0cmVzdWx0W2NvbHVtbklkXSA9IHRoaXMuYXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uc1tjb2x1bW5JZF0udHlwZSwgdmFsdWVzW2NvbHVtbklkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25NYXAgKGl0ZW1UeXBlLCBpdGVtcywgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiB7W2l0ZW1JZDogbnVtYmVyXTogQ29sbGVjdGlvbk1hdGNoUmVzdWx0fSA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW0gPSBpdGVtc1tpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtLnBhcmVudCAhPT0gbnVsbCA/IGl0ZW0ucGFyZW50IDoge307XHJcblxyXG5cdFx0XHRyZXN1bHRbaXRlbUlkXSA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUZpdHRpbmdJdGVtKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRoaXMuZm9ybWF0TWVzc2FnZVZhbHVlcyhpdGVtLnZhbHVlcywgY29sdW1ucyksXHJcblx0XHRcdFx0cGFyZW50XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnlDb2xsZWN0aW9uSWQgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBzdGF0dXMgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNbc3RhdHVzXSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbi5pZDtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzdWx0W2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF0gPSB7XHJcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvbjogY29sbGVjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRub3RmaXR0aW5nOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRtYXliZTogW11cclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRyZXN1bHRbY29sbGVjdGlvbklkXVtzdGF0dXNdLnB1c2goXHJcblx0XHRcdFx0XHRcdHN0YXR1cyA9PT0gJ2ZpdHRpbmcnID8gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKSA6IGl0ZW1JZFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdENvbHVtbnMgKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9uTWFwW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLmZpdHRpbmc7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdDb2xsZWN0aW9uIG9mIGZpdHRpbmdDb2xsZWN0aW9ucylcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGZpdHRpbmdDb2xsZWN0aW9uLmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvbi5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb24uZ2V0KCk7XHJcblx0fVxyXG5cclxuXHRkZWZlckVudHJ5IChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gaXRlbUVudHJ5LmRlZmVycmVkO1xyXG5cclxuXHRcdGlmIChkZWZlcnJlZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVyKGZhbHNlKTtcclxuXHJcblx0XHRyZXR1cm4gZGVmZXJyZWQucHJvbWlzZS50aGVuKFxyXG5cdFx0XHR0aGlzLmRlZmVyRW50cnkuYmluZCh0aGlzKSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc01lc3NhZ2UgKGJvZHkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gYm9keS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25NYXAoaXRlbVR5cGUsIGJvZHkuaXRlbXNbaXRlbVR5cGVdLCBib2R5LmNvbHVtbnNbaXRlbVR5cGVdKTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1ucyhpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkU3RyaW5nIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkU3RyaW5nKTtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gK2l0ZW1JZFN0cmluZztcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShpdGVtRW50cnkpKTtcclxuXHRcdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25NYXBbaXRlbUlkXS5maXR0aW5nLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoXHJcblx0XHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgZmFsc2UpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRyZXF1ZXN0SWRzLnB1c2goaXRlbUlkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5ncm91cEJ5Q29sbGVjdGlvbklkKGl0ZW1UeXBlLCBjb2xsZWN0aW9uTWFwKSk7IC8vIGNvbGxlY3Rpb25NYXAgbWlnaHQgY29udGFpbiAnbWF5YmUnIG1hdGNoZXNcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogcmVxdWVzdElkc30sIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShpdGVtVHlwZSwgcmVxdWVzdElkcywgcmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlIChib2R5KSB7XHJcblx0XHRjb25zdCBpdGVtcyA9IGJvZHkuaXRlbXMuRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZTtcclxuXHRcdGNvbnN0IGRlZmVycmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlcXVlc3RJZHM6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbXMpIHtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25JZCA9IGl0ZW1zW2l0ZW1JZF0ucGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0Y29uc3QgZnVuY3Rpb25FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBmdW5jdGlvbklkKTtcclxuXHJcblx0XHRcdGlmIChmdW5jdGlvbkVudHJ5ID09PSB1bmRlZmluZWQgfHwgZnVuY3Rpb25FbnRyeS5jb2x1bW5zLnJlc3BvbnNlLkZ1bmN0aWUubmV3Y2hhbmdlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZGVmZXJyZWRFbnRyaWVzLnB1c2godGhpcy5kZWZlckVudHJ5KGZ1bmN0aW9uRW50cnkpKTtcclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGZ1bmN0aW9uSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChkZWZlcnJlZEVudHJpZXMpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeSgnRnVuY3RpZScsIHtpZDogcmVxdWVzdElkc30sIHtGdW5jdGllOiBbJ25ld2NoYW5nZXMnXX0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSWRzID0gcmVzcG9uc2UubGlua3MuRnVuY3RpZTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVzcG9uc2VJZHMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoJ0Z1bmN0aWUnLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMubWFpblxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IHJlc3BvbnNlVmFsdWUgPSByZXNwb25zZS5mZXRjaFZhbHVlKCdGdW5jdGllJywgaXRlbUlkLCAnbmV3Y2hhbmdlcycpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZVZhbHVlID09PSBwcmV2aW91cy5uZXdjaGFuZ2VzKVxyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5XHJcblx0XHRcdFx0XHRcdC5zZXRJbml0aWFsKHtuZXdjaGFuZ2VzOiByZXNwb25zZVZhbHVlfSwgdHJ1ZSlcclxuXHRcdFx0XHRcdFx0LmNhbGxPbkNoYW5nZShwcmV2aW91cylcclxuXHRcdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZXNwb25zZSAoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiByZXF1ZXN0SWRzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IDxJdGVtRW50cnk+IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblx0XHRcdGNvbnN0IGlzTmV3ID0gaXRlbUVudHJ5LmluaXRpYWwgPT09IHVuZGVmaW5lZDtcclxuXHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KCk7XHJcblxyXG5cdFx0XHRcdGlmIChpc05ldylcclxuXHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5jbGVhcihpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBkZXJpdmVkID0gcmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbkluZm8ucm9vdCk7XHJcblxyXG5cdFx0XHRpZiAoaXNOZXcpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChmaWVsZHMsIGRlcml2ZWQsIGNvbHVtbkluZm8pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdFx0XHR7fSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ICE9PSBudWxsKVxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChmaWVsZHMsIGRlcml2ZWQsIGV4cGFuc2lvblJlc3VsdCk7XHJcblxyXG5cdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0LnNldERlcml2ZWQoZGVyaXZlZClcclxuXHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzLCBmYWxzZSlcclxuXHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXHJcblx0XHRcdFx0XHQucmVzb2x2ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVDcmVhdGUgKG1lc3NhZ2UpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XHJcblxyXG5cdFx0aWYgKGJvZHkuaXRlbVR5cGUgPT09ICdGdW5jdGlvbkNoYW5nZXNSZXNvbHZlJylcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc0Z1bmN0aW9uQ2hhbmdlc1Jlc29sdmUoYm9keSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UoYm9keSkudGhlbihcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuYWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVVwZGF0ZSAobWVzc2FnZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc01lc3NhZ2UobWVzc2FnZS5ib2R5KS50aGVuKFxyXG5cdFx0XHRjb2xsZWN0aW9uTWFwID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyhjb2xsZWN0aW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLmNhdGNoKHRoaXMuZXJyb3JIYW5kbGVyLm5vdGlmeUVycm9yKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZURlbGV0ZSAobWVzc2FnZSkge1xyXG5cdFx0Y29uc3QgYm9keSA9IG1lc3NhZ2UuYm9keTtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25NYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBib2R5Lml0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmdldEJ5Q29udGFpbmluZ0l0ZW0oYm9keS5pdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XHJcblxyXG5cdFx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXSA9IHtjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLCBpdGVtczogW119O1xyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0uaXRlbXMucHVzaChpdGVtSWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IGNvbGxlY3Rpb25NYXBbY29sbGVjdGlvbklkXTtcclxuXHRcdFx0bWFwRW50cnkuY29sbGVjdGlvbi5yZW1vdmVJdGVtcyhtYXBFbnRyeS5pdGVtcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbigpO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETyFcclxuXHRoYW5kbGVMaW5rTW92ZSAoKSB7fVxyXG5cclxuLypcdGhhbmRsZUxpbmtNb3ZlIChtZXNzYWdlKSB7XHJcblx0XHRwcm9jZXNzTWVzc2FnZShcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0Ly8gZml0cyBpbiB0aGlzIGNvbGxlY3Rpb24sIHRvZG86IGdldCB0aGUgb2xkIGNvbGxlY3Rpb24gaXQgYmVsb25nZWQgdG9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLm1vdmVJdGVtcyhpdGVtRW50cmllcywgbnVsbCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIG1heWJlIGZpdHNcclxuXHRcdFx0XHQvLyB0b2RvOiBhbHNvIHJlbW92ZSB0aGVtIGZyb20gdGhlIG9sZCBjb2xsZWN0aW9uXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5leHRlbmQoYW5ndWxhci5pZGVudGl0eSwgZmFsc2UsIGZhbHNlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZnVuY3Rpb24gKGNvbGxlY3Rpb24sIGlkcykge1xyXG5cdFx0XHRcdC8vIG5vdCBmaXR0aW5nIGluIHRoaXMgY29sbGVjdGlvbiwgcmVtb3ZlIGl0ID9cclxuXHRcdFx0XHRjb2xsZWN0aW9uLnJlbW92ZUl0ZW1zKGlkcywgbnVsbCwgbWVzc2FnZSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG4qL1xyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpRm9ybWF0dGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXF1ZXN0U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3InO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5DYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5JbmZvJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblV0aWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1BZG1pbmlzdHJhdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0tleVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2FsQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0xvY2tTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5U2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vU29ja2V0TWVzc2FnZUhhbmRsZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1V0aWwnO1xyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzNfXzsiLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAocHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcikge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocmVzcG9uc2U6IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBBcGlSZXNwb25zZVByb2Nlc3Nvcih0aGlzLmFwaUZvcm1hdHRlciwgcmVzcG9uc2UpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBCYXRjaFN0YXR1cyB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBCYXRjaFN0YXR1c0ZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGdldEl0ZW1JZDogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtSWQsIGdldFByb21pc2U6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gUHJvbWlzZTxJdGVtRW50cnk+KTogQmF0Y2hTdGF0dXMge1xyXG5cdFx0cmV0dXJuIG5ldyBCYXRjaFN0YXR1cyhcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0Z2V0SXRlbUlkLFxyXG5cdFx0XHRnZXRQcm9taXNlXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4vJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pOiBDaGFuZ2VzQ29tcGlsYXRpb24ge1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzQ29tcGlsYXRpb24oXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0c2luZ2xlSXRlbXMsXHJcblx0XHRcdGNvbGxlY3Rpb25zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdEFwaUZvcm1hdHRlcixcclxuXHRDaGFuZ2VzUHJvY2Vzc29yLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0SXRlbUhhbmRsZXJcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IENoYW5nZXNQcm9jZXNzb3Ige1xyXG5cdFx0cmV0dXJuIG5ldyBDaGFuZ2VzUHJvY2Vzc29yKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2VcclxuXHRcdCk7XHJcblx0fVxyXG5cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uQ2FjaGUoXHJcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLCBJdGVtRW50cnlTZXJ2aWNlLCBJdGVtUmVxdWVzdFNlcnZpY2UsIEtleVNlcnZpY2UsIFF1ZXJ5U2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4uL21vZGVscy8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHB1YmxpYyBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnMpOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRW50cnkoXHJcblx0XHRcdHRoaXMsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbk1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5IHtcblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxuXHQpIHtcblx0fVxuXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkNhY2hlczogQ29sbGVjdGlvbkNhY2hlW10sIHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4sIGNhbGxPbkFjdGl2YXRlOiBib29sZWFuKSB7XG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uTWF0Y2hlcihcblx0XHRcdHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSxcblx0XHRcdGNvbGxlY3Rpb25DYWNoZXMsXG5cdFx0XHR1cGRhdGVJbml0aWFsLFxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcblx0XHQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLCBJdGVtSGFuZGxlciwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSwgSXRlbUVudHJ5RmFjdG9yeSwgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRWRpdFJlc291cmNlLCBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHVibGljIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHVibGljIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgY29sbGVjdGlvblJlc291cmNlU2VydmljZTogQ29sbGVjdGlvblJlc291cmNlU2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lZGl0SXRlbXMpXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyA9IHRydWU7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZWRpdENvbGxlY3Rpb24pIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgPSB0cnVlO1xyXG5cclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uRWRpdFJlc291cmNlKHRoaXMsIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG5ldyBDb2xsZWN0aW9uVmlld1Jlc291cmNlKHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkV4cGFuc2lvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IHN0cmluZywgcmVxdWVzdENvbHVtbnM6IGFueSB8IGJvb2xlYW4sIHJlc3BvbnNlQ29sdW1uczogYW55KSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtbkV4cGFuc2lvbihcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbHVtbkluZm9GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGFwaUNvbHVtbjogUmVzcG9uc2VDb2x1bW4sIHBhcmVudDogQ29sdW1uSW5mbykge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5JbmZvKGFwaUNvbHVtbiwgcGFyZW50KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSGFuZGxlciwgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtbkluZm9GYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZXRGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWwsXHJcblx0XHRwcml2YXRlIGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uU2V0KFxyXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbCxcclxuXHRcdFx0dGhpcy5jb2x1bW5JbmZvRmFjdG9yeSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcclxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsXHJcblx0XHRlbmFibGVDYWNoaW5nPyxcclxuXHRcdGluY2x1ZGVJZENvbHVtbj9cclxuXHQpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKS5yZXNvbHZlKHJlc3BvbnNlQ29sdW1ucywgZW5hYmxlQ2FjaGluZywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkhhbmRsZXIsIENyZWF0ZVJlcXVlc3QsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3JlYXRlUmVxdWVzdEZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uTWF0Y2hlckZhY3Rvcnk6IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChjb21waWxhdGlvbiwgY29sbGVjdGlvbkVudHJpZXMsIHBhcmFtZXRlck1hcCwgYnJlYWt1cEJ5UGFyZW50Pykge1xyXG5cdFx0cmV0dXJuIG5ldyBDcmVhdGVSZXF1ZXN0KFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHRjb21waWxhdGlvbixcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJpZXMsXHJcblx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0YnJlYWt1cEJ5UGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtQ2FjaGUgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCk6IEl0ZW1DYWNoZSB7XHJcblx0XHRyZXR1cm4gbmV3IEl0ZW1DYWNoZSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENvbHVtblNldCwgSXRlbUVudHJ5U2VydmljZSwgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXV0aEludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgRmllbGRNYXAsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1FbnRyeUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBhdXRoSW50ZXJmYWNlOiBBdXRoSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcclxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RTdHViIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBjb2x1bW5TZXRTdHViKSB7XHJcblx0XHRyZXR1cm4gbmV3IEl0ZW1FbnRyeShcclxuXHRcdFx0dGhpcyxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0Y29sdW1uU2V0U3R1YlxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdExvY2FsTGlua2VkIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGxvY2FsSXRlbUlkOiBJdGVtSWQsXHJcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcclxuXHRcdHBhcmVudDogRW50cnlQYXJlbnROdWxsLFxyXG5cdFx0Y29sdW1uU2V0OiBDb2x1bW5TZXQsXHJcblx0XHRjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwXHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgbG9jYWxJdGVtSWQsIGNvbHVtblNldCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnByb2Nlc3NMb2NhbChpbml0aWFsLCB7fSwge30sIGNvbnZlcnNpb25NYXApO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0TG9jYWwgKFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHR0ZW1wbGF0ZTogYW55LFxyXG5cdFx0bW9kaWZpZWQ6IEZpZWxkTWFwLFxyXG5cdFx0ZGVyaXZlZDogRmllbGRNYXAsXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGwsXHJcblx0XHRjb252ZXJzaW9uTWFwPyxcclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSB0ZW1wbGF0ZS5jb2x1bW5zLml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChjb252ZXJzaW9uTWFwID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29udmVyc2lvbk1hcCA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5jcmVhdGVMb2NhbENvbnZlcnNpb25NYXAoaXRlbVR5cGUsIGl0ZW1JZCwgdHJ1ZSwgdGVtcGxhdGUucmVzcG9uc2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCwgLy8gaW5pdGlhbC5pZCAod2hlbiBpbml0aWFsIGlzIG5vdCBhIHRlbXBsYXRlKVxyXG5cdFx0XHR0ZW1wbGF0ZS5jb2x1bW5zLFxyXG5cdFx0KTtcclxuXHJcblx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnkucHJvY2Vzc0xvY2FsKHRlbXBsYXRlLmZpZWxkcywgbW9kaWZpZWQsIGRlcml2ZWQsIGNvbnZlcnNpb25NYXApO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0RGVmZXJyZWQgKFxyXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXHJcblx0XHRkZWZlclJlcXVlc3Q6IGJvb2xlYW5cclxuXHQpOiBJdGVtRW50cnkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5U3R1YiA9IHRoaXMuY29uc3RydWN0U3R1YihcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnNcclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHJcblx0XHRpdGVtRW50cnlTdHViLmRlZmVyKGRlZmVyUmVxdWVzdCk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeVN0dWI7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKFxyXG5cdFx0aXRlbUlkOiBJdGVtSWQsXHJcblx0XHRpbml0aWFsOiBGaWVsZE1hcCxcclxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxyXG5cdFx0Y29sdW1uSW5mbzogQ29sdW1uU2V0XHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdGNvbHVtbkluZm8uaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1JZCwgLy8gaW5pdGlhbC5pZCAod2hlbiBpbml0aWFsIGlzIG5vdCBhIHRlbXBsYXRlKVxyXG5cdFx0XHRjb2x1bW5JbmZvLFxyXG5cdFx0KS5wcm9jZXNzKFxyXG5cdFx0XHRpbml0aWFsLCAvLyBjYW4gYWxzbyBiZSBhIHRlbXBsYXRlXHJcblx0XHRcdGRlcml2ZWQsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIENoYW5nZXNQcm9jZXNzb3IsIEl0ZW1SZXNvdXJjZVNlcnZpY2UsIExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFZGl0UmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlLCBWaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVzb3VyY2VGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwdWJsaWMgY2hhbmdlc1Byb2Nlc3NvcjogQ2hhbmdlc1Byb2Nlc3NvcixcclxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Z2V0Q29uc3RydWN0b3IgKG9wdGlvbnM6IEl0ZW1PcHRpb25zKTogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0cmV0dXJuIG9wdGlvbnMuZWRpdCA/XHJcblx0XHRcdFx0bmV3IEVkaXRSZXNvdXJjZSh0aGlzLCBpdGVtRW50cnksIG9wdGlvbnMpIDpcclxuXHRcdFx0XHRuZXcgVmlld1Jlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucyk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogSXRlbU9wdGlvbnMsIGlzTmV3PzogYm9vbGVhbik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiBvcHRpb25zLmVkaXQgP1xyXG5cdFx0XHRuZXcgRWRpdFJlc291cmNlKHRoaXMsIGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNOZXcpIDpcclxuXHRcdFx0bmV3IFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdExvY2FsQ2FjaGUsXHJcblx0TG9ja1NlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtUmVzb3VyY2VGYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9jYWxDYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk6IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5OiBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaWQ/OiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBuZXcgTG9jYWxDYWNoZShcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLFxyXG5cdFx0XHRpZFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlLCBJdGVtQ2FjaGUsIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdCAocm9vdEl0ZW06IEl0ZW1FbnRyeSwgc2luZ2xlSXRlbUNhY2hlOiBJdGVtQ2FjaGUsIGNvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlKSB7XHJcblx0XHRyZXR1cm4gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbihyb290SXRlbSwgc2luZ2xlSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGUpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcGlGb3JtYXR0ZXIsIFF1ZXJ5TWF0Y2hlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeU1hdGNoZXJGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKTogUXVlcnlNYXRjaGVyIHtcclxuXHRcdHJldHVybiBuZXcgUXVlcnlNYXRjaGVyKFxyXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdGZpZWxkcyxcclxuXHRcdFx0cGFyZW50XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBRdWVyeVBhcnNlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChxdWVyeSwgcGFyYW1ldGVycz8pOiBRdWVyeVBhcnNlciB7XHJcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5UGFyc2VyKHF1ZXJ5LCBwYXJhbWV0ZXJzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoKSB7XHJcblx0XHRyZXR1cm4gbmV3IFJlcXVlc3RDb2x1bW5FeHBhbnNpb24oXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0JhdGNoU3RhdHVzRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25DYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mb0ZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtblNldEZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NyZWF0ZVJlcXVlc3RGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlNYXRjaGVyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlQYXJzZXJGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSc7XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vbWFpbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZhY3Rvcmllcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xyXG4iLCJpbXBvcnQgeyBDb2x1bW5FeHBhbnNpb24sIENvbHVtbkluZm8sIENvbHVtblNldCwgaW5BcnJheSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEVudHJ5UGFyZW50TnVsbCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSBjdXJyZW50SWQrKztcclxuXHRxdWVyeTogYW55O1xyXG5cdGNvbHVtbnM6IENvbHVtblNldDtcclxuXHJcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xyXG5cclxuXHRpbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdGl0ZW1zOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRyZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblx0ZGVmZXJyZWQ6IGFueTtcclxuXHRwcm9taXNlOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeT47XHJcblx0cmVsb2FkUXVldWVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdGhhc0VkaXRSZXNvdXJjZXMgPSBmYWxzZTtcclxuXHRoYXNJdGVtRWRpdFJlc291cmNlcyA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cHVibGljIG9wdGlvbnM6IGFueVxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IGZhY3RvcnkucHJvbWlzZVNlcnZpY2UuZGVmZXIoKTtcclxuXHRcdHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTtcclxuXHJcblx0XHR0aGlzLml0ZW1UeXBlID0gaXRlbVR5cGU7XHJcblx0XHR0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cdFx0dGhpcy5xdWVyeSA9IGZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGZhY3RvcnkuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0aXNEZWZlcnJlZCAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlIChpdGVtRW50cnlDb21wb3VuZDoge2NvbHVtbnM6IENvbHVtblNldCwgaXRlbXM6IEl0ZW1FbnRyeVtdfSk6IENvbGxlY3Rpb25FbnRyeSB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IHRoaXMuZGVmZXJyZWQ7XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zID0gaXRlbUVudHJ5Q29tcG91bmQuY29sdW1ucztcclxuXHRcdHRoaXMuaW5pdGlhbCA9IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zO1xyXG5cdFx0dGhpcy5pdGVtcyA9IGl0ZW1FbnRyeUNvbXBvdW5kLml0ZW1zLnNsaWNlKCk7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hQYXJlbnQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHQvLyA9PSB0byBjb21wYXJlIGl0ZW1JZHNcclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcGFyZW50Lml0ZW1UeXBlID09PSBpdGVtVHlwZSAmJiBwYXJlbnQuaXRlbUlkID09IGl0ZW1JZDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllZClcclxuXHRcdFx0Y2FsbGJhY2sobW9kKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQpOiBJdGVtRW50cnkgfCB1bmRlZmluZWQge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuaXRlbUlkID09PSBpdGVtSWQpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoYWNjdW11bGF0b3I6IEl0ZW1JZFtdID0gW10pOiBJdGVtSWRbXSB7XHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZ2V0SWRBcnJheSh0aGlzLml0ZW1zLCBhY2N1bXVsYXRvcik7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtcyAoXHJcblx0XHRpdGVtRW50cmllczogSXRlbUVudHJ5W10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRjYWxsT25BZGQ/OiBib29sZWFuLFxyXG5cdFx0Y2FsbE9uQWN0aXZhdGU/OiBib29sZWFuXHJcblx0KTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdC8vIGxvY2FsIGVudHJ5IG1pZ2h0IGJlIGFkZGVkIG11bHRpcGxlIHRpbWVzIChleHRlbmQ/KVxyXG5cdFx0aWYgKGl0ZW1FbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0Y29uc3QgcGFyZW50Q29sdW1uID0gdGhpcy5jb2x1bW5zLmxpbms7XHJcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCBlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmICh1cGRhdGVJbml0aWFsKSB7XHJcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIHdoZW4gc2F2aW5nLCBpdGVtcyB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW4gbW9kaWZpZWQgYXJlIGFkZGVkIHRvIGluaXRpYWxcclxuXHRcdFx0XHRpZiAoaW5pdGlhbC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XHJcblx0XHRcdFx0XHRpbml0aWFsLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpIHtcclxuXHRcdFx0XHRpZiAocGFyZW50ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRpdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdFx0XHRcdGlmIChwYXJlbnRDb2x1bW4gIT09IG51bGwgJiYgaXRlbUVudHJ5Lm1vZGlmaWVkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5tb2RpZmllZFtwYXJlbnRDb2x1bW4uaWRdID0gcGFyZW50Lml0ZW1JZDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdG1vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhcclxuXHRcdFx0ZW50cmllc0FkZGVkVG9Jbml0aWFsLFxyXG5cdFx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkLFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0Y2FsbE9uQWRkLFxyXG5cdFx0XHRjYWxsT25BY3RpdmF0ZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFuZGxlQWRkZWRJdGVtQ2FsbGJhY2tzIChcclxuXHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbDogSXRlbUVudHJ5W10sXHJcblx0XHRlbnRyaWVzQWRkZWRUb01vZGlmaWVkOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCxcclxuXHRcdGNhbGxPbkFkZDogYm9vbGVhbiA9IHRydWUsXHJcblx0XHRjYWxsT25BY3RpdmF0ZTogYm9vbGVhbiA9IHRydWVcclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb0luaXRpYWwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uQWRkSW5pdGlhbChlbnRyaWVzQWRkZWRUb0luaXRpYWwsIHRoaXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChlbnRyaWVzQWRkZWRUb01vZGlmaWVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xyXG5cclxuXHRcdGlmIChjYWxsT25BY3RpdmF0ZSAmJiBjb2xsZWN0aW9uUmVzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Y29uc3Qgb25BY3RpdmF0ZUl0ZW0gPSBjb2xsZWN0aW9uUmVzb3VyY2VzWzBdLm9wdGlvbnMub25BY3RpdmF0ZUl0ZW07XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFkZGVkSXRlbUVudHJ5IG9mIGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpXHJcblx0XHRcdFx0b25BY3RpdmF0ZUl0ZW0oYWRkZWRJdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xyXG5cdFx0XHRjb25zdCBhZGRlZFJlc291cmNlcyA9IGNvbGxlY3Rpb25SZXNvdXJjZS5hZGRJdGVtUmVzb3VyY2VzKGVudHJpZXNBZGRlZFRvTW9kaWZpZWQpO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZSA9PT0gcmVzdWx0UmVzb3VyY2UpIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBhZGRlZFJlc291cmNlcztcclxuXHJcblx0XHRcdFx0aWYgKGNhbGxPbkFkZClcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25BZGQoYWRkZWRSZXNvdXJjZXMpO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbXMgKFxyXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcclxuXHRcdGVuYWJsZUNhbGxiYWNrPzogYm9vbGVhblxyXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHRpZiAoaWRBcnJheS5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbXMoXHJcblx0XHRcdGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KGl0ZW1FbnRyeS5pdGVtSWQsIGlkQXJyYXkpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsPzogYm9vbGVhbixcclxuXHRcdGVuYWJsZUNhbGxiYWNrPzogYm9vbGVhblxyXG5cdCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRyZXN1bHRSZXNvdXJjZSxcclxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVSZW1vdmVkSXRlbXMgKFxyXG5cdFx0ZmlsdGVyRnVuY3Rpb246IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gYm9vbGVhbixcclxuXHRcdHJlc3VsdFJlc291cmNlPzogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCxcclxuXHRcdHVwZGF0ZUluaXRpYWw6IGJvb2xlYW4gPSBmYWxzZSxcclxuXHRcdGVuYWJsZUNhbGxiYWNrPzogYm9vbGVhblxyXG5cdCkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEZyb21Nb2RpZmllZCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pdGVtcywgZmlsdGVyRnVuY3Rpb24pO1xyXG5cdFx0bGV0IHJlbW92ZWRGcm9tSW5pdGlhbDtcclxuXHJcblx0XHRpZiAodXBkYXRlSW5pdGlhbClcclxuXHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gY29sbGVjdGlvbkVudHJ5U2VydmljZS5maWx0ZXJBcnJheSh0aGlzLmluaXRpYWwsIGZpbHRlckZ1bmN0aW9uKTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHQvLyByZW1vdmUgYWxsICpsb2NhbCogaXRlbXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIG1vZGlmaWVkIGZyb20gaW5pdGlhbCwgdG9vXHJcblx0XHRcdGNvbnN0IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgcmVtb3ZlZEVudHJ5IG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpIHtcclxuXHRcdFx0XHRpZiAocmVtb3ZlZEVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRcdGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5wdXNoKHJlbW92ZWRFbnRyeSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkoXHJcblx0XHRcdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdFx0XHRpdGVtRW50cnkgPT4gbG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTFcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyhyZW1vdmVkRnJvbUluaXRpYWwsIHJlbW92ZWRGcm9tTW9kaWZpZWQsIHJlc3VsdFJlc291cmNlLCBlbmFibGVDYWxsYmFjayk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzIChcclxuXHRcdHJlbW92ZWRGcm9tSW5pdGlhbDogSXRlbUVudHJ5W10sXHJcblx0XHRyZW1vdmVkRnJvbU1vZGlmaWVkOiBJdGVtRW50cnlbXSxcclxuXHRcdHJlc3VsdFJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsID0gbnVsbCxcclxuXHRcdGNhbGxPblJlbW92ZTogYm9vbGVhbiA9IHRydWVcclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdGlmIChyZW1vdmVkRnJvbUluaXRpYWwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zLm9uUmVtb3ZlSW5pdGlhbChyZW1vdmVkRnJvbUluaXRpYWwsIHRoaXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdFJlc291cmNlID09PSBudWxsID8gbnVsbCA6IFtdO1xyXG5cclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkRW50cnkgb2YgcmVtb3ZlZEZyb21Nb2RpZmllZClcclxuXHRcdFx0cmVtb3ZlZEVudHJ5LmRlYWN0aXZhdGVSZXNvdXJjZXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2VzKSB7XHJcblx0XHRcdGNvbnN0IHJlbW92ZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UucmVtb3ZlSXRlbVJlc291cmNlcyhyZW1vdmVkRnJvbU1vZGlmaWVkKTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gcmVtb3ZlZFJlc291cmNlcztcclxuXHJcblx0XHRcdFx0aWYgKGNhbGxPblJlbW92ZSlcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5jYWxsT25SZW1vdmUocmVtb3ZlZFJlc291cmNlcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZCAobmV3Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAobmV3Q29sdW1ucy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4odGhpcyk7XHJcblxyXG5cdFx0dGhpcy5wcm9taXNlID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKHRoaXMsIHVuZGVmaW5lZCwgbmV3Q29sdW1ucykudGhlbihyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VJdGVtcyA9IHJlc3BvbnNlLml0ZW1zW2l0ZW1UeXBlXTtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzRXhwYW5zaW9uKG5ld0NvbHVtbnMsIHJlc3BvbnNlLCBpdGVtVHlwZSwgdGhpcy5pdGVtcyk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zLmNhbGwoXHJcblx0XHRcdFx0XHR0aGlzLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzcG9uc2VJdGVtc1tpdGVtRW50cnkuaXRlbUlkXSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW1FbnRyeS5pc0xvY2FsKCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0XHR0cnVlXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0dGhpcy5leHBhbmRDb2x1bW5zKGNvbHVtbkV4cGFuc2lvbik7XHJcblxyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlO1xyXG5cdH1cclxuXHJcblx0ZXh0ZW5kUXVlcnkgKGNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuXHRcdGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5xdWVyeTtcclxuXHJcblx0XHRvcHRpb25zLnF1ZXJ5UGFyYW1zID0gY2FsbGJhY2sob3B0aW9ucy5xdWVyeVBhcmFtcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucXVlcnkgPSB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgY29sbGVjdGlvblJlc291cmNlLCBjYWxsT25BZGQ/LCB1cGRhdGVJbml0aWFsPykge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGVycm9ySGFuZGxlciA9IGZhY3RvcnkuZXJyb3JIYW5kbGVyO1xyXG5cdFx0Y29uc3QgZXh0ZW5kZWRRdWVyeSA9IHRoaXMuZXh0ZW5kUXVlcnkocXVlcnlDYWxsYmFjaykub2JqZWN0O1xyXG5cdFx0Y29uc3QgZnVsbFF1ZXJ5ID0gZmFjdG9yeS5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRleHRlbmRlZFF1ZXJ5LFxyXG5cdFx0XHRmYWN0b3J5LnF1ZXJ5U2VydmljZS5jcmVhdGVOb3RJbih0aGlzLmdldElkQXJyYXkoKSlcclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdG9kbzogYWxzbyBkbyB0aGUgbGltaXQgY2hlY2sgaW4gYmF0Y2hFeHRlbmRcclxuXHRcdGNvbnN0IHByb21pc2UgPSBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0SXRlbXMoXHJcblx0XHRcdHRoaXMsXHJcblx0XHRcdC8vIFdoZW4gdGhlcmUncyBhIGxpbWl0IHdlIHdhbnQgdG8gZmV0Y2ggYWxsIGl0ZW1zIGJlY2F1c2Ugd2Ugd2lsbCBkbyBzb3J0aW5nIGFuZCBzcGxpY2luZyBvZiB0aGUgZXhjZXNzIGl0ZW1zXHJcblx0XHRcdHRoaXMub3B0aW9ucy5saW1pdCAhPT0gbnVsbCA/XHJcblx0XHRcdFx0ZXh0ZW5kZWRRdWVyeSA6XHJcblx0XHRcdFx0ZnVsbFF1ZXJ5XHJcblx0XHQpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdC8vIHJlbW92ZUFic2VudEl0ZW1zKHJlc3BvbnNlKTsgVE9ETzogd2UgY2FuIG9ubHkgZG8gdGhpcyB3aGVuIHdlIHJlcXVlc3QgKmFsbCogdGhlIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NSZXNwb25zZShcclxuXHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UubGlua3NbdGhpcy5pdGVtVHlwZV0sXHJcblx0XHRcdFx0XHR0aGlzLnBhcmVudCxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uc1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihpdGVtRW50cmllcyA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGNvbGxlY3Rpb25SZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCwgY2FsbE9uQWRkLCBmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5wcm9taXNlID0gcHJvbWlzZS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHByb21pc2U7XHJcblx0fVxyXG5cclxuXHRxdWV1ZVJlbG9hZCAoKSB7XHJcblx0XHR0aGlzLnJlbG9hZFF1ZXVlZCA9IHRydWU7XHJcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XHJcblx0fVxyXG5cclxuXHRleHBhbmRDb2x1bW5zIChjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bih0aGlzLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChleHBhbnNpb25SZXN1bHQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnMgPSBleHBhbnNpb25SZXN1bHQubWVyZ2VkO1xyXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMpIHtcclxuXHRcdHRoaXMuY29sdW1ucy5leHBhbmRSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHR0aGlzLm9wdGlvbnMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5yZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0Z2V0QWRkZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlbW92ZWRJdGVtcyAocmV0dXJuSXRlbUlkcyA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTxJdGVtRW50cnkgfCBJdGVtSWQ+ID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaW5pdGlhbCkge1xyXG5cdFx0XHRpZiAobW9kaWZpZWQuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChyZXR1cm5JdGVtSWRzID8gaXRlbUVudHJ5Lml0ZW1JZCA6IGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFVwZGF0ZWRJdGVtcyAoKSB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKCFpdGVtRW50cnkuaXNMb2NhbCgpICYmIGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aGFzQWRkZWRJdGVtcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggPiB0aGlzLmluaXRpYWwubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0aGFzUmVtb3ZlZEl0ZW1zICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmluaXRpYWwubGVuZ3RoID4gdGhpcy5pdGVtcy5sZW5ndGg7XHJcblx0fVxyXG5cclxuXHRoYXNVcGRhdGVkSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgbW9kaWZpZWRJdGVtRW50cnkgb2YgbW9kaWZpZWQpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkSXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRDdXJyZW50UmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc291cmNlc1tyZXNvdXJjZXMubGVuZ3RoIC0gMV07XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlcyAoaXNTdWJ0YWJDaGFuZ2UgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXMgPSB0aGlzLml0ZW1zOyAvLyBUT0RPOiBpbml0aWFsXHJcblx0XHRjb25zdCBjdXJyZW50UmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBuZXdSZXNvdXJjZXM6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Ly8gd2UnbGwgYWRkIHRoZSBpdGVtIHJlc291cmNlcyBiYWNrIGluIGxhdGVyXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0aXRlbUVudHJ5LmNsZWFyUmVzb3VyY2VzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY3VycmVudFJlc291cmNlcykge1xyXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlLm9wdGlvbnNbaXNTdWJ0YWJDaGFuZ2UgPyAnY2xlYXJPblN1YlRhYkNoYW5nZScgOiAnY2xlYXJPblRhYkNoYW5nZSddKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bmV3UmVzb3VyY2VzLnB1c2goY29sbGVjdGlvblJlc291cmNlKTtcclxuXHJcblx0XHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZS5pdGVtcylcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UuZW50cnkucmVzb3VyY2VzLnB1c2goaXRlbVJlc291cmNlKTsgLy8gcmVzb3VyY2VzIHNob3VsZCBiZSBlbXB0eSBieSBub3cgOi0pXHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBuZXdSZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHQvLyB0aGlzIGRvZXNuJ3QgcmV2ZXJ0IHVwZGF0ZXNcclxuXHRyZXZlcnRDaGFuZ2VzICgpIHtcclxuXHRcdC8vIHNhdmUgdGhlc2UgYmVmb3JlIHJlc2V0dGluZyB0aGUgaXRlbXMgcHJvcGVydHlcclxuXHRcdGNvbnN0IGFkZGVkSXRlbXMgPSA8SXRlbUVudHJ5W10+IHRoaXMuZ2V0QWRkZWRJdGVtcygpO1xyXG5cdFx0Y29uc3QgcmVtb3ZlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldFJlbW92ZWRJdGVtcygpO1xyXG5cclxuXHRcdHRoaXMuaXRlbXMgPSB0aGlzLmluaXRpYWwuc2xpY2UoKTtcclxuXHJcblx0XHR0aGlzLmhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyhbXSwgcmVtb3ZlZEl0ZW1zKTtcclxuXHRcdHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MoW10sIGFkZGVkSXRlbXMpO1xyXG5cdH1cclxuXHJcblx0b25JdGVtc0NyZWF0ZWQgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XHJcblx0XHRcdHJlc291cmNlLnJlYnVpbGRNYXAoKTtcclxuXHRcdFx0cmVzb3VyY2Uub3B0aW9ucy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldFVwZGF0ZWRJdGVtQ29sdW1ucyAoY29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgaXRlbUNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuaXRlbTtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1tjb2x1bW5JZDogc3RyaW5nXTogQ29sdW1uSW5mb30gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRpZiAoY29udmVyc2lvbk1hcFtjb2x1bW4uYXBpQ29sdW1uLml0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW4uaWRdID0gY29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAocGFyZW50LCBjb252ZXJzaW9uTWFwPzogSXRlbUlkQ29udmVyc2lvbk1hcCkge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHRcdGNvbnN0IGNsb25lZEl0ZW1FbnRyaWVzID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmJhdGNoQ2xvbmUodGhpcy5pdGVtcywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjbG9uZWRJdGVtRW50cnkgb2YgY2xvbmVkSXRlbUVudHJpZXMpXHJcblx0XHRcdGNsb25lZEl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRmYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY2xvbmVPcHRpb25zKHRoaXMub3B0aW9ucywgcGFyZW50KVxyXG5cdFx0KVxyXG5cdFx0XHQucmVzb2x2ZShcclxuXHRcdFx0XHR7Y29sdW1uczogdGhpcy5jb2x1bW5zLCBpdGVtczogY2xvbmVkSXRlbUVudHJpZXN9XHJcblx0XHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGZpbHRlckFycmF5IH0gZnJvbSAnLi4vY2xhc3Nlcy9VdGlsJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlSXRlbUlkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5IH0gZnJvbSAnLi9Db2xsZWN0aW9uRW50cnknO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZSB7XHJcblx0aXRlbXM6IEl0ZW1SZXNvdXJjZVtdO1xyXG5cdGl0ZW1JZE1hcDogSXRlbVJlc291cmNlSXRlbUlkTWFwID0ge307XHJcblx0Y29sdW1ucztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gZW50cnkuY29sdW1ucy5yZXNwb25zZTtcclxuXHRcdHRoaXMuaXRlbUlkTWFwID0ge307XHJcblx0XHR0aGlzLml0ZW1zID0gW107XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblxyXG5cdFx0dGhpcy5hZGRJdGVtUmVzb3VyY2VzKGVudHJ5Lml0ZW1zKTtcclxuXHR9XHJcblxyXG5cdGdldEl0ZW1CeUlkIChpdGVtSWQ6IG51bWJlcik6IEl0ZW1SZXNvdXJjZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtSWRNYXBbaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHJlYnVpbGRNYXAgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpdGVtSWRNYXAgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGl0ZW1JZE1hcFtpdGVtUmVzb3VyY2UuZW50cnkuaXRlbUlkXSA9IGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IGl0ZW1JZE1hcDtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHsgLy8gc2hvdWxkIGJlIGZhc3RcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0gdGhpcy5pdGVtSWRNYXA7XHJcblx0XHRjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5nZXRDb25zdHJ1Y3RvcihcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGVkaXQ6IG9wdGlvbnMuZWRpdEl0ZW1zLFxyXG5cdFx0XHRcdG9uQ2hhbmdlOiBvcHRpb25zLm9uQ2hhbmdlLFxyXG5cdFx0XHRcdG9uRGVhY3RpdmF0ZTogb3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHJcblx0XHRcdGxldCBpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZTtcclxuXHJcblx0XHRcdGlmIChpdGVtSWRNYXBbaXRlbUlkXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbVJlc291cmNlID0gY29uc3RydWN0b3IoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRpdGVtcy5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0aXRlbUlkTWFwW2l0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XHJcblx0XHRcdH0gZWxzZVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGl0ZW1JZE1hcFtpdGVtSWRdO1xyXG5cclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIGl0ZW1FbnRyaWVzXHJcblx0ICogQHJldHVybnMge0l0ZW1SZXNvdXJjZVtdfVxyXG5cdCAqXHJcblx0ICogUmV0dXJucyB0aGUgSXRlbXJlc291cmNlcyB0aGF0IHdoZXJlIHJlbW92ZWQgQ29sbGVjdGlvbi5cclxuXHQgKiBGaWx0ZXJzIG9uIEl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gSXRlbUVudHJ5XHJcblx0ICovXHJcblx0cmVtb3ZlSXRlbVJlc291cmNlcyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZpbHRlckFycmF5KFxyXG5cdFx0XHR0aGlzLml0ZW1zLFxyXG5cdFx0XHRpdGVtUmVzb3VyY2UgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdFx0XHRpZiAoaXRlbVJlc291cmNlLmVudHJ5ID09PSBpdGVtRW50cnkpIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuaXRlbUlkTWFwW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNhbGxPbkFkZCAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkFkZChpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNhbGxPblJlbW92ZSAoaXRlbVJlc291cmNlczogSXRlbVJlc291cmNlW10pIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vblJlbW92ZShpdGVtUmVzb3VyY2VzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IHZvaWQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSk7XHJcblx0fVxyXG5cclxuXHRmaWx0ZXIgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Zmlyc3QgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVJlc291cmNlIG9mIGl0ZW1SZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSkpXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmZpcnN0KGNhbGxiYWNrKSAhPT0gbnVsbDtcclxuXHR9XHJcblxyXG5cdGdyb3VwQnkgKGFyZ3VtZW50KSB7XHJcblx0XHRjb25zdCBpdGVtc1Jlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gaXRlbVJlc291cmNlLmZpZWxkc1thcmd1bWVudF07XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtc1Jlc291cmNlcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gYXJndW1lbnQoaXRlbVJlc291cmNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHZhbHVlID09PSBudWxsKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmIChyZXN1bHRbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXN1bHRbdmFsdWVdID0gW107XHJcblxyXG5cdFx0XHRcdHJlc3VsdFt2YWx1ZV0ucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdG1hcCAoYXJndW1lbnQpIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgbGVuZ3RoID0gaXRlbVJlc291cmNlcy5sZW5ndGg7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQXJyYXkobGVuZ3RoKTtcclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGl0ZW1SZXNvdXJjZXNbaV0uZmllbGRzW2FyZ3VtZW50XTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXHJcblx0XHRcdFx0cmVzdWx0W2ldID0gYXJndW1lbnQoaXRlbVJlc291cmNlc1tpXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlZHVjZTxUPiAoY2FsbGJhY2s6IChpdGVtUmVzb3VyY2U6IEl0ZW1SZXNvdXJjZSwgdmFsdWU6IFQpID0+IFQsIHZhbHVlOiBUKTogVCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKGl0ZW1SZXNvdXJjZSwgdmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZCAocXVlcnlDYWxsYmFjaywgcmV0dXJuQWxsSXRlbXMsIGVuYWJsZUNhbGxiYWNrcyk6IFByb21pc2U8SXRlbVJlc291cmNlW10+IHtcclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0ZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5leHRlbmQocXVlcnlDYWxsYmFjaywgdGhpcywgZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHQudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuQWxsSXRlbXMgPyB0aGlzLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlICgpOiB2b2lkIHtcclxuXHRcdHRoaXMub3B0aW9ucy5vbkRlYWN0aXZhdGVDb2xsZWN0aW9uKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZSAoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGluZGV4ID0gY29sbGVjdGlvblJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtUmVzb3VyY2UuY2xlYXJSZXNvdXJjZSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGl0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25FZGl0UmVzb3VyY2UgZXh0ZW5kcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0b3B0aW9uc1xyXG5cdCkge1xyXG5cdFx0c3VwZXIoZmFjdG9yeS5pdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAoKSB7XHJcblx0XHRpZiAoIXRoaXMub3B0aW9ucy5lbmFibGVTYXZlKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IFNhdmluZyBkaXNhYmxlZCcpO1xyXG5cclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gY29sbGVjdGlvbkVudHJ5LnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ICE9PSBudWxsICYmIGZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQocGFyZW50Lml0ZW1JZCkpXHJcblx0XHRcdHJldHVybiBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0XHRyZXR1cm4gZmFjdG9yeS5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeS5jb25zdHJ1Y3QoKS5leGVjdXRlKFtdLCBbY29sbGVjdGlvbkVudHJ5XSk7XHJcblx0fVxyXG5cclxuXHQvLyBUT0RPOiB1c2UgY2FsbGJhY2sgZnVuY3Rpb25cclxuXHRtb3ZlSXRlbXMgKGlkQXJyYXksIGRlc3RpbmF0aW9uLCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZW50cnk7XHJcblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVuYWJsZVNhdmUgfHwgb3B0aW9ucy5tb2RJbnN0YW50KVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBzYXZpbmcgZW5hYmxlZCcpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGUgIT09IGRlc3RpbmF0aW9uLmVudHJ5Lml0ZW1UeXBlKVxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENhbm5vdCBtb3ZlIGl0ZW1zOiBpdGVtVHlwZSBtaXNtYXRjaCcpO1xyXG5cclxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2VzID0gPEl0ZW1SZXNvdXJjZVtdPiBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlbW92ZWRJdGVtUmVzb3VyY2Ugb2YgcmVtb3ZlZEl0ZW1SZXNvdXJjZXMpXHJcblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2gocmVtb3ZlZEl0ZW1SZXNvdXJjZS5lbnRyeSk7XHJcblxyXG5cdFx0ZGVzdGluYXRpb24uZW50cnkuYWRkSXRlbXMoaXRlbUVudHJpZXMsIGRlc3RpbmF0aW9uLCBmYWxzZSwgZW5hYmxlQ2FsbGJhY2tzKTtcclxuXHJcblx0XHRyZXR1cm4gcmVtb3ZlZEl0ZW1SZXNvdXJjZXM7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtcyAoaWRBcnJheSwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrcyA9IHRydWU7XHJcblxyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IDxJdGVtUmVzb3VyY2VbXT4gdGhpcy5lbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdGlmICh0aGlzLm9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2F2ZSgpLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdFx0dGhpcy5jYWxsT25SZW1vdmUoaXRlbVJlc291cmNlcyk7XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbihpdGVtUmVzb3VyY2VzKTtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW0gKGl0ZW1JZCwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW1vdmVJdGVtcyhbaXRlbUlkXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW1zICh2YWx1ZXNBcnJheSwgZW5hYmxlQ2FsbGJhY2tzID0gdHJ1ZSkge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHJcblx0XHRyZXR1cm4gZmFjdG9yeS5pdGVtSGFuZGxlci5mZXRjaFRlbXBsYXRlKHRoaXMuZW50cnkuaXRlbVR5cGUpLnRoZW4oXHJcblx0XHRcdHRlbXBsYXRlID0+IHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdFx0XHRsZXQgaXRlbVJlc291cmNlcztcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXNBcnJheSkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdExvY2FsKFxyXG5cdFx0XHRcdFx0XHRcdGZhY3Rvcnkua2V5U2VydmljZS5nZXRMb2NhbElkKCksXHJcblx0XHRcdFx0XHRcdFx0dGVtcGxhdGUsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWUuZmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlLmRlcml2ZWRcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZXMgPSB0aGlzLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCB0aGlzLCBmYWxzZSwgZmFsc2UpO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxyXG5cdFx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWRkKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlcztcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbSAodmFsdWVzLCBlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKFt2YWx1ZXNdLCBlbmFibGVDYWxsYmFja3MpLnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXNbMF07XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuY2xlYXIodGhpcywgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ29sdW1uSW5mbywgQ29sdW1uU2V0IH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFMTF9QRVJNSVNTSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5sZXQgY3VycmVudElkID0gMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnkge1xyXG5cdGlkOiBudW1iZXIgPSArK2N1cnJlbnRJZDtcclxuXHJcblx0ZGVmZXJSZXF1ZXN0ID0gZmFsc2U7XHJcblx0ZGVmZXJyZWQ7XHJcblx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsO1xyXG5cclxuXHRpbml0aWFsOiBGaWVsZE1hcDtcclxuXHRtb2RpZmllZDogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdHJlc291cmNlczogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBzdHJpbmcsXHJcblx0XHRwdWJsaWMgaXRlbUlkOiBJdGVtSWQsXHJcblx0XHRwdWJsaWMgY29sdW1uczogQ29sdW1uU2V0XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRkZWZlciAoZGVmZXJSZXF1ZXN0KTogdGhpcyB7XHJcblx0XHR0aGlzLmRlZmVycmVkID0gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLmRlZmVyUmVxdWVzdCA9IGRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdC8vIHRoZSByZXNvbHZlIGZ1bmN0aW9uIG1pZ2h0IGRlZmVyIHRoZSBpdGVtIGFnYWluLCBzbyBkZWxldGUgdGhlIHByb3BlcnRpZXMgZmlyc3RcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdGRlZmVycmVkLnJlc29sdmUodGhpcyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRGVmZXJyZWQgKGluaXRpYWwsIGRlcml2ZWQsIGNvbHVtbnMpOiB0aGlzIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcblx0XHR0aGlzLnByb2Nlc3MoaW5pdGlhbCwgZGVyaXZlZCk7XHJcblx0XHR0aGlzLnJlc29sdmUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmZXJyZWQgIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHJlamVjdCAoZXJyb3I/KTogdGhpcyB7XHJcblx0XHQvLyB0b2RvOiB0cmFuc2xhdGVkIGVycm9yXHJcblx0XHR0aGlzLmRlZmVycmVkLnJlamVjdChlcnJvcik7XHJcblxyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJyZWQ7XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzIChpbml0aWFsLCBkZXJpdmVkKTogdGhpcyB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQ7XHJcblxyXG5cdFx0dGhpcy5pbml0aWFsID0gaW5pdGlhbDtcclxuXHRcdHRoaXMuZGVyaXZlZCA9IGRlcml2ZWQ7XHJcblxyXG5cdFx0YXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKHRoaXMuaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucy5tYWluKTtcclxuXHRcdGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmRlcml2ZWQsIGZvcm1hdHRlZENvbHVtbnMuZGVyaXZlZCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWwgKGluaXRpYWwsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHR0aGlzLmluaXRpYWwgPSB7cGVybWlzc2lvbnM6IEFMTF9QRVJNSVNTSU9OU307XHJcblxyXG5cdFx0dGhpcy51cGRhdGVGaWVsZHMoaW5pdGlhbCk7XHJcblx0XHR0aGlzLnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblx0XHR0aGlzLnNldE1vZGlmaWVkKG1vZGlmaWVkKTtcclxuXHJcblx0XHR0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xyXG5cdFx0dGhpcy5zZXRDcmVhdG9yKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXRDcmVhdG9yICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGF1dGhJbnRlcmZhY2UgPSB0aGlzLmZhY3RvcnkuYXV0aEludGVyZmFjZTtcclxuXHJcblx0XHR0aGlzLm1vZGlmaWVkLmNyZWF0b3IgPSBhdXRoSW50ZXJmYWNlLmdldFVzZXJJZCgpO1xyXG5cdFx0dGhpcy5tb2RpZmllZC5jcmVhdGVkID0gbW9tZW50KCk7XHJcblx0XHR0aGlzLmRlcml2ZWRbJ2NyZWF0b3I+ZGlzcGxheW5hbWUnXSA9IGF1dGhJbnRlcmZhY2UuZ2V0VXNlckRpc3BsYXluYW1lKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSBmYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeVNlcnZpY2UgPSBmYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XHJcblx0XHRjb25zdCBuZXdJdGVtSWQgPSBpdGVtRW50cnlTZXJ2aWNlLmV4cGFuZENvbnZlcnNpb25NYXAodGhpcywgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Ly8gd2UnbGwgY29weSBtb2RpZmllZCB0byByZXN1bHQuaW5pdGlhbCAoaW5pdGlhbCBtYXkgYmUgYSB0ZW1wbGF0ZSlcclxuXHRcdGNvbnN0IGNsb25lZEVudHJ5ID0gZmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdG5ld0l0ZW1JZCxcclxuXHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5nZXRGaWVsZHMoKSwge30sIGNvbHVtbnMubWFpbiksXHJcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZGVyaXZlZCwge30sIGNvbHVtbnMuZGVyaXZlZCksXHJcblx0XHRcdGNvbHVtbnNcclxuXHRcdCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRjbG9uZWRFbnRyeS5tb2RpZmllZCA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGNsb25lZEVudHJ5LmluaXRpYWwsIHt9LCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZCA9IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0Q29udmVyc2lvblZhbHVlKHRoaXMuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnNldFBhcmVudChcclxuXHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxyXG5cdFx0XHRwYXJlbnRJZCA9PT0gdW5kZWZpbmVkID8gcGFyZW50Lml0ZW1JZCA6IHBhcmVudElkXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBjbG9uZWRFbnRyeTtcclxuXHR9XHJcblxyXG5cdHJlc2V0RGVyaXZlZCAoY29sdW1uSWRzKTogdGhpcyB7XHJcblx0XHRjb25zdCBzZWxmID0gdGhpcztcclxuXHJcblx0XHRjb25zdCByb290Q29sdW1ucyA9IHRoaXMuY29sdW1ucy5yb290O1xyXG5cdFx0Y29uc3QgZmlsdGVyZWRDb2x1bW5zOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiByb290Q29sdW1ucykge1xyXG5cdFx0XHRpZiAoY29sdW1uSWRzLmluZGV4T2YoY29sdW1uLmlkKSAhPT0gLTEpXHJcblx0XHRcdFx0ZmlsdGVyZWRDb2x1bW5zLnB1c2goY29sdW1uKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShmaWx0ZXJlZENvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZ1bmN0aW9uIHJlc2V0RGVyaXZlZFJlY3Vyc2l2ZWx5IChjb2x1bW5zKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRpZiAoIWNvbHVtbi5pc0xlYWYpXHJcblx0XHRcdFx0XHRyZXNldERlcml2ZWRSZWN1cnNpdmVseShjb2x1bW4uY2hpbGRyZW4pO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgc2VsZi5kZXJpdmVkW2NvbHVtbi5wYXRoXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKCk6IHRoaXMge1xyXG5cdFx0dGhpcy5yZXNvdXJjZXMgPSBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGRlYWN0aXZhdGVSZXNvdXJjZXMgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7IC8vIG9uIG9mIHRoZSBkZWFjdGl2YXRlIGNhbGxiYWNrcyBtaWdodCBjYWxsIGNsZWFyUmVzb3VyY2VzXHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXHJcblx0XHRcdHJlc291cmNlLmRlYWN0aXZhdGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldEZpZWxkcyAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3RcclxuXHQvLyB0b2RvOiB0eXBlIGNvbHVtbkV4cGFuc2lvblJlc3VsdFxyXG5cdGV4cGFuZCAobWFpbiwgZGVyaXZlZCwgY29sdW1uRXhwYW5zaW9uUmVzdWx0KTogdGhpcyB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgZGlmZmVyZW5jZSA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5kaWZmZXJlbmNlO1xyXG5cdFx0dGhpcy5jb2x1bW5zID0gY29sdW1uRXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcclxuXHJcblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5kZXJpdmVkLFxyXG5cdFx0XHRkZXJpdmVkLFxyXG5cdFx0XHRkaWZmZXJlbmNlLmRlcml2ZWRcclxuXHRcdCk7XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHRtYWluLFxyXG5cdFx0XHRkaWZmZXJlbmNlLm1haW5cclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvLyBrZXk6IGluaXRpYWwgLyBtb2RpZmllZFxyXG5cdC8vIGZpZWxkcyAqaGF2ZW4ndCogYmVlbiBmb3JtYXR0ZWQgeWV0XHJcblx0dXBkYXRlRmllbGRzIChzb3VyY2UsIG92ZXJ3cml0ZSA9IHRydWUpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGFwaUZvcm1hdHRlciA9IHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XHJcblx0XHRjb25zdCBtYWluQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xyXG5cdFx0Y29uc3QgZm9ybWF0dGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5mb3JtYXR0ZWQubWFpbjtcclxuXHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0aWYgKG1vZGlmaWVkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdFx0aWYgKG92ZXJ3cml0ZSB8fCBhcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdFx0bW9kaWZpZWRbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0YXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKG1vZGlmaWVkLCBmb3JtYXR0ZWRDb2x1bW5zKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBtYWluQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbi5pZDtcclxuXHJcblx0XHRcdGluaXRpYWxbY29sdW1uSWRdID0gc291cmNlW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHJcblx0XHRhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UoaW5pdGlhbCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtVmFsdWUgKGZpZWxkcywgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGFwaUNvbHVtbi5pZDtcclxuXHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGZpZWxkc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0bGV0IG5ld1ZhbHVlO1xyXG5cclxuXHRcdGlmIChhcGlDb2x1bW4udHlwZSA9PT0gJ2xpbmsnICYmIGN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmICh0aGlzLnBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0XHRuZXdWYWx1ZSA9IHRoaXMucGFyZW50Lml0ZW1JZDtcclxuXHRcdH0gZWxzZVxyXG5cdFx0XHRuZXdWYWx1ZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZShhcGlDb2x1bW4uaXRlbVR5cGUsIGN1cnJlbnRWYWx1ZSwgY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0aWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdGZpZWxkc1tjb2x1bW5JZF0gPSBuZXdWYWx1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHVwZGF0ZUl0ZW1GaWVsZHMgKGNvbnZlcnNpb25NYXApOiB0aGlzIHtcclxuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGl0ZW1Db2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZShpbml0aWFsLCBhcGlDb2x1bW4sIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0aWYgKG1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLnVwZGF0ZUl0ZW1WYWx1ZShtb2RpZmllZCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3QgKCkge1xyXG5cdFx0Y29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4ge307XHJcblxyXG5cdFx0cmV0dXJuIGZhY3RvcnkuYXBpRm9ybWF0dGVyLmZvcm1hdFJlcXVlc3QoXHJcblx0XHRcdGZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpID8ge30gOiB0aGlzLmluaXRpYWwsXHJcblx0XHRcdHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c2V0RGlzcGxheU5hbWUgKCk6IHRoaXMge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5nZXREaXNwbGF5TmFtZSgpO1xyXG5cclxuXHRcdGlmIChyZXN1bHQpXHJcblx0XHRcdHRoaXMubW9kaWZpZWQuZGlzcGxheW5hbWUgPSByZXN1bHQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXREaXNwbGF5TmFtZSAoKSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gdGhpcy5mYWN0b3J5Lml0ZW1FbnRyeVNlcnZpY2U7XHJcblx0XHRjb25zdCBmaWVsZHMgPSB0aGlzLmdldEZpZWxkcygpO1xyXG5cclxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdDb250YWN0JzpcclxuXHRcdFx0XHRyZXR1cm4gZmllbGRzLnR5cGUgPT09ICdiZWRyaWpmJyA/XHJcblx0XHRcdFx0XHRmaWVsZHMuYmVkcmlqZiA6IGl0ZW1FbnRyeVNlcnZpY2UuZ2V0RnVsbE5hbWUoXHJcblx0XHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdFx0ZmllbGRzLnR1c3NlbnZvZWdzZWwsXHJcblx0XHRcdFx0XHRcdGZpZWxkcy5uYWFtXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnUGVyc29uJzpcclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5U2VydmljZS5nZXRGdWxsTmFtZShcclxuXHRcdFx0XHRcdGZpZWxkcy52b29ybmFhbSxcclxuXHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0ZmllbGRzLmFjaHRlcm5hYW1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRjYXNlICdSZXBhcmF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmRlcml2ZWRbJ21hdGVyaWFhbD5uYWFtJ107IC8vIFRPRE8hXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkc1tpdGVtRW50cnlTZXJ2aWNlLmdldFRpdGxlRmllbGQodGhpcy5pdGVtVHlwZSldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5BbGwgUmV0dXJucyBhbGwgaW5pdGlhbCB2YWx1ZXMgaWYgdHJ1ZVxyXG5cdCAqIEByZXR1cm5zIHtPYmplY3R9XHJcblx0ICovXHJcblx0Z2V0Q2hhbmdlcyAocmV0dXJuQWxsID0gZmFsc2UpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQgJiYgIXJldHVybkFsbClcclxuXHRcdFx0cmV0dXJuIFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmdldENoYW5nZXMoXHJcblx0XHRcdHRoaXMuaW5pdGlhbCxcclxuXHRcdFx0cmV0dXJuQWxsID8ge30gOiB0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZCh0aGlzLml0ZW1JZCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2thYmxlICgpIHtcclxuXHRcdGlmICh0aGlzLmlzTG9jYWwoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHN3aXRjaCAodGhpcy5pdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdQcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XHJcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXInOlxyXG5cdFx0XHRjYXNlICdWb2VydHVpZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoYXNDaGFuZ2VzICgpIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5oYXNDaGFuZ2VzKFxyXG5cdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdHRoaXMubW9kaWZpZWQsXHJcblx0XHRcdHRoaXMuY29sdW1ucy5tYWluXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzZXRNb2RpZmllZCAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1haW47XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbi5pZF0gPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNsb25lKFxyXG5cdFx0XHRcdGNvbHVtbi5hcGlDb2x1bW4udHlwZSxcclxuXHRcdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uLmlkXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0SW5pdGlhbCAodmFsdWVzLCBlbmFibGVDYWxsYmFja3M/KTogdGhpcyB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0bGV0IHByZXZpb3VzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLmluaXRpYWxbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UoYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5pbml0aWFsLCB7fSwgdGhpcy5jb2x1bW5zLm1haW4pKTtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdHByZXZpb3VzID0gYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5tb2RpZmllZCwge30sIHRoaXMuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERvZXMgYSBzaGFsbG93IGNvcHkgb2YgdmFsdWVzIVxyXG5cdCAqL1xyXG5cdHNldE1vZGlmaWVkICh2YWx1ZXM/KTogdGhpcyB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IGNvbHVtbnMucmVzcG9uc2VbdGhpcy5pdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHRcdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkID0ge307XHJcblxyXG5cdFx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0YXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMubWFpbik7XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5zaGFsbG93Q29weUZpZWxkcyh2YWx1ZXMsIGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcykge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tjb2x1bW5JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHQvLyB0b2RvOiBkZXYgbW9kZSBjb25zdGFudFxyXG5cdFx0XHRcdFx0XHQvLyBpZiAoREVWX01PREUpXHJcblx0XHRcdFx0XHRcdC8vIFx0Y29uc29sZS53YXJuKCdzZXRNb2RpZmllZDogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHJcblx0XHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcylcclxuXHRcdFx0XHRyZXNvdXJjZS5maWVsZHMgPSBtb2RpZmllZDtcclxuXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldERlcml2ZWQgKHZhbHVlcyk6IHRoaXMge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLmRlcml2ZWRba2V5XSA9IHZhbHVlc1trZXldO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCk6IHRoaXMge1xyXG5cdFx0dGhpcy5wYXJlbnQgPSB7XHJcblx0XHRcdGl0ZW1UeXBlOiBwYXJlbnRUeXBlLFxyXG5cdFx0XHRpdGVtSWQ6IHBhcmVudElkXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91cyk6IHRoaXMge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnJlc291cmNlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgaXRlbVJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaV07XHJcblxyXG5cdFx0XHRpZiAoaXRlbVJlc291cmNlICE9PSBudWxsKVxyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZS5vcHRpb25zLm9uQ2hhbmdlKGl0ZW1SZXNvdXJjZSwgcHJldmlvdXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlIHtcclxuXHRjb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBSZXNwb25zZUNvbHVtbn07XHJcblx0ZmllbGRzOiBGaWVsZE1hcDtcclxuXHRkZXJpdmVkOiBGaWVsZE1hcDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRwdWJsaWMgb3B0aW9ucyxcclxuXHRcdHByb3RlY3RlZCByZWFkb25seSBfaXNOZXc6IGJvb2xlYW4gPSBmYWxzZVxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXJpdmVkID0gZW50cnkuZGVyaXZlZDtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2VbZW50cnkuY29sdW1ucy5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZW50cnkucmVzb3VyY2VzLnB1c2godGhpcyk7XHJcblx0fVxyXG5cclxuXHRpc05ldyAoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5faXNOZXc7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmlzTG9jYWwoKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2UgKCkge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5lbnRyeS5yZXNvdXJjZXM7XHJcblx0XHRjb25zdCBpbmRleCA9IHJlc291cmNlcy5pbmRleE9mKHRoaXMpO1xyXG5cclxuXHRcdGlmIChpbmRleCAhPT0gLTEpXHJcblx0XHRcdHJlc291cmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZSAoKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlKHRoaXMuZW50cnkpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVmlld1Jlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRlbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0b3B0aW9ucyxcclxuXHRcdGlzTmV3PzogYm9vbGVhblxyXG5cdCkge1xyXG5cdFx0c3VwZXIoZW50cnksIG9wdGlvbnMsIGlzTmV3KTtcclxuXHJcblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRlbnRyeS5pbml0aWFsIDogZW50cnkubW9kaWZpZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IGNyZWF0ZVBhdGggfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEZpZWxkTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRWRpdFJlc291cmNlIGV4dGVuZHMgSXRlbVJlc291cmNlIHtcclxuXHRsb2NhbENvcGllczogRmllbGRNYXBbXSA9IFtdO1xyXG5cdHRyYW5zYWN0aW9uczogbnVtYmVyID0gMDtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpc05ldz86IGJvb2xlYW5cclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zLCBpc05ldyk7XHJcblxyXG5cdFx0ZW50cnkuc2V0TW9kaWZpZWQoKTtcclxuXHJcblx0XHR0aGlzLmZpZWxkcyA9IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxuXHJcblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2lzTmV3ICYmIHRoaXMudHJhbnNhY3Rpb25zID09PSAwO1xyXG5cdH1cclxuXHJcblx0c3RhcnQgKCk6IHRoaXMge1xyXG5cdFx0aWYgKHRoaXMubG9jYWxDb3BpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5sb2NhbENvcGllcyA9IFtdO1xyXG5cclxuXHRcdHRoaXMubG9jYWxDb3BpZXMucHVzaCh0aGlzLmNvcHlGaWVsZHMoKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyb2xsYmFjayAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cclxuXHRcdHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmxvY2FsQ29waWVzLnBvcCgpLCBpdGVtRW50cnkubW9kaWZpZWQsIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTmV3KCkgJiYgdGhpcy5sb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y29tbWl0IChpbml0aWFsID0gZmFsc2UpOiB0aGlzIHtcclxuXHRcdGlmICghaW5pdGlhbClcclxuXHRcdFx0dGhpcy5sb2NhbENvcGllcy5wb3AoKTtcclxuXHJcblx0XHR0aGlzLnRyYW5zYWN0aW9ucysrOyAvLyBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zXHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbENvcHkgKCk6IEZpZWxkTWFwIHwgbnVsbCB7XHJcblx0XHRjb25zdCBsb2NhbENvcGllcyA9IHRoaXMubG9jYWxDb3BpZXM7XHJcblxyXG5cdFx0aWYgKGxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGlmIChsb2NhbENvcGllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdHJldHVybiBsb2NhbENvcGllc1tsb2NhbENvcGllcy5sZW5ndGggLSAxXTtcclxuXHR9XHJcblxyXG5cdGNvcHlGaWVsZHMgKGRlc3RpbmF0aW9uOiBGaWVsZE1hcCA9IHt9KTogRmllbGRNYXAge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGl0ZW1FbnRyeS5tb2RpZmllZCwgZGVzdGluYXRpb24sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cdH1cclxuXHJcblx0c2V0RmllbGRzICh2YWx1ZXM6IEZpZWxkTWFwLCBjYWxsT25DaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xyXG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XHJcblx0XHRsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG5cdFx0bGV0IHByZXZpb3VzO1xyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UpXHJcblx0XHRcdHByZXZpb3VzID0gdGhpcy5jb3B5RmllbGRzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gY29sdW1uc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0XHRpZiAoY29sdW1uID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ3NldEZpZWxkczogbm8gY29sdW1uIGZvdW5kIGZvcicsIGNvbHVtbklkKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29tcGFyZUZpZWxkcyhjb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbklkXSwgdmFsdWVzW2NvbHVtbklkXSkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHRcdFx0aGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGNhbGxPbkNoYW5nZSAmJiBoYXNDaGFuZ2VzKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjYWxsT25DaGFuZ2UgKHByZXZpb3VzOiBGaWVsZE1hcCk6IHRoaXMge1xyXG5cdFx0dGhpcy5lbnRyeS5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2F2ZSAocGFyYW1ldGVycz8pOiBQcm9taXNlPHRoaXM+IHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3QgcGFyYW1ldGVyTWFwID0ge307XHJcblxyXG5cdFx0aWYgKHBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjcmVhdGVQYXRoKFxyXG5cdFx0XHRcdHBhcmFtZXRlck1hcCxcclxuXHRcdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcclxuXHRcdFx0XHRbe30sIHBhcmFtZXRlcnNdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0aXRlbUVudHJ5LmlzTG9ja2FibGUoKSA/XHJcblx0XHRcdFx0ZmFjdG9yeS5sb2NrU2VydmljZS5mZXRjaExvY2soaXRlbUVudHJ5KSA6XHJcblx0XHRcdFx0ZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKClcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdC8vIGFkZFRvQ29sbGVjdGlvbnMgaXMgY2FsbGVkIGluIGNoYW5nZXNQcm9jZXNzb3JcclxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeS5jaGFuZ2VzUHJvY2Vzc29yLmV4ZWN1dGUoW2l0ZW1FbnRyeV0sIFtdLCBwYXJhbWV0ZXJNYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsIi8vIHNob3VsZCBiZSBvcmRlcmVkIGJ5IGRlcGVuZGVuY3khXHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uUmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1FbnRyeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9WaWV3UmVzb3VyY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0VkaXRSZXNvdXJjZSc7XHJcbiIsImltcG9ydCB7XHJcblx0QXBpRm9ybWF0dGVyLFxyXG5cdEFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcclxuXHRDb2x1bW5DYWNoZSxcclxuXHRDb2x1bW5IYW5kbGVyLFxyXG5cdENvbHVtblV0aWwsXHJcblx0SXRlbUFkbWluaXN0cmF0b3IsXHJcblx0SXRlbUVudHJ5U2VydmljZSxcclxuXHRJdGVtSGFuZGxlcixcclxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0SXRlbVJlc291cmNlU2VydmljZSxcclxuXHRLZXlTZXJ2aWNlLFxyXG5cdExvY2tTZXJ2aWNlLFxyXG5cdFF1ZXJ5U2VydmljZSxcclxuXHRTb2NrZXRNZXNzYWdlSGFuZGxlclxyXG59IGZyb20gJy4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdEJhdGNoU3RhdHVzRmFjdG9yeSxcclxuXHRDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENvbHVtbkluZm9GYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0Q3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0SXRlbUNhY2hlRmFjdG9yeSxcclxuXHRJdGVtRW50cnlGYWN0b3J5LFxyXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0TG9jYWxDYWNoZUZhY3RvcnksXHJcblx0TW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRRdWVyeU1hdGNoZXJGYWN0b3J5LFxyXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRBdXRoSW50ZXJmYWNlLFxyXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcclxuXHRQcm9taXNlSW50ZXJmYWNlXHJcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSbUNvcmUge1xyXG5cdHZlcnNpb246IHN0cmluZztcclxuXHRub29wID0gbm9vcDtcclxuXHJcblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XHJcblx0a2V5U2VydmljZTogS2V5U2VydmljZTtcclxuXHRxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZTtcclxuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xyXG5cclxuXHRhcGlSZXNwb25zZVByb2Nlc3NvckZhY3Rvcnk6IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTtcclxuXHJcblx0aXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZTtcclxuXHRpdGVtUmVzb3VyY2VTZXJ2aWNlOiBJdGVtUmVzb3VyY2VTZXJ2aWNlO1xyXG5cclxuXHRpdGVtQWRtaW5pc3RyYXRvcjogSXRlbUFkbWluaXN0cmF0b3I7XHJcblx0aXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2U7XHJcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xyXG5cdGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXI7XHJcblxyXG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XHJcblx0Y29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeTtcclxuXHRjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5O1xyXG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xyXG5cclxuXHRpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXI7XHJcblx0Y29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xyXG5cdGxvY2tTZXJ2aWNlOiBMb2NrU2VydmljZTtcclxuXHRjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlO1xyXG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XHJcblx0Y29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeTtcclxuXHJcblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcclxuXHRpdGVtQ2FjaGVGYWN0b3J5OiBJdGVtQ2FjaGVGYWN0b3J5O1xyXG5cdHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeTtcclxuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xyXG5cdGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTtcclxuXHRjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xyXG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XHJcblx0Y29sdW1uSW5mb0ZhY3Rvcnk6IENvbHVtbkluZm9GYWN0b3J5O1xyXG5cdGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeTtcclxuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xyXG5cdGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeTtcclxuXHRtb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xyXG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xyXG5cdGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5O1xyXG5cdHNvY2tldE1lc3NhZ2VIYW5kbGVyOiBTb2NrZXRNZXNzYWdlSGFuZGxlcjtcclxuXHJcblx0YXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcclxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXHJcblx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2U6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByb21pc2VJbnRlcmZhY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHRcdHRoaXMudmVyc2lvbiA9ICcxLjEuMTUtMSc7XHJcblxyXG5cdFx0dGhpcy5hcGlGb3JtYXR0ZXIgPSBuZXcgQXBpRm9ybWF0dGVyKCk7XHJcblx0XHR0aGlzLmtleVNlcnZpY2UgPSBuZXcgS2V5U2VydmljZSgpO1xyXG5cdFx0dGhpcy5xdWVyeVNlcnZpY2UgPSBuZXcgUXVlcnlTZXJ2aWNlKCk7XHJcblx0XHR0aGlzLmNvbHVtblV0aWwgPSBuZXcgQ29sdW1uVXRpbCgpO1xyXG5cclxuXHRcdHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XHJcblxyXG5cdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSA9IG5ldyBBcGlSZXF1ZXN0U2VydmljZShleHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLCB0aGlzLmFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSk7XHJcblxyXG5cdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlID0gbmV3IEl0ZW1FbnRyeVNlcnZpY2UodGhpcy5rZXlTZXJ2aWNlKTtcclxuXHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSA9IG5ldyBJdGVtUmVzb3VyY2VTZXJ2aWNlKCk7XHJcblxyXG5cdFx0dGhpcy5sb2NrU2VydmljZSA9IG5ldyBMb2NrU2VydmljZShcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkgPSBuZXcgUXVlcnlNYXRjaGVyRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XHJcblx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnkgPSBuZXcgSXRlbUNhY2hlRmFjdG9yeSh0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkpO1xyXG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VJbnRlcmZhY2UpO1xyXG5cclxuXHRcdHRoaXMuY29sdW1uQ2FjaGUgPSBuZXcgQ29sdW1uQ2FjaGUodGhpcy5jb2x1bW5VdGlsKTtcclxuXHRcdHRoaXMuY29sdW1uSGFuZGxlciA9IG5ldyBDb2x1bW5IYW5kbGVyKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uQ2FjaGUsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbHVtbkluZm9GYWN0b3J5ID0gbmV3IENvbHVtbkluZm9GYWN0b3J5KCk7XHJcblx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkgPSBuZXcgQ29sdW1uU2V0RmFjdG9yeSh0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uVXRpbCwgdGhpcy5jb2x1bW5JbmZvRmFjdG9yeSk7XHJcblx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblNldEZhY3RvcnksIHRoaXMuY29sdW1uVXRpbCk7XHJcblxyXG5cdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5ID0gbmV3IEl0ZW1FbnRyeUZhY3RvcnkoXHJcblx0XHRcdGF1dGhJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5pdGVtSGFuZGxlciA9IG5ldyBJdGVtSGFuZGxlcih0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uVXRpbFxyXG5cdFx0KTtcclxuXHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlID0gbmV3IEl0ZW1SZXF1ZXN0U2VydmljZSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5UGFyc2VyRmFjdG9yeSgpO1xyXG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlID0gbmV3IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UodGhpcy5xdWVyeVBhcnNlckZhY3RvcnksIHRoaXMucXVlcnlTZXJ2aWNlKTtcclxuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeShcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIgPSBuZXcgQ29sbGVjdGlvbkhhbmRsZXIoXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5xdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSA9IG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSh0aGlzLmNvbHVtblV0aWwpO1xyXG5cdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSA9IG5ldyBDcmVhdGVSZXF1ZXN0RmFjdG9yeShcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG5cdFx0KTtcclxuXHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSk7XHJcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkgPSBuZXcgSXRlbVJlc291cmNlRmFjdG9yeSh0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLFxyXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2VcclxuXHRcdCk7XHJcblx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkgPSBuZXcgQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2VcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLFxyXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkoKTtcclxuXHJcblx0XHR0aGlzLml0ZW1BZG1pbmlzdHJhdG9yID0gbmV3IEl0ZW1BZG1pbmlzdHJhdG9yKFxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXHJcblx0XHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXHJcblx0XHRcdHRoaXMubG9jYWxDYWNoZUZhY3RvcnksXHJcblx0XHRcdGxvY2FsQ2FjaGVNYW5hZ2VyLFxyXG5cdFx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc29ja2V0TWVzc2FnZUhhbmRsZXIgPSBuZXcgU29ja2V0TWVzc2FnZUhhbmRsZXIocHJvbWlzZUludGVyZmFjZSxcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBub29wICgpIHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5ICh2YWx1ZSkge1xyXG5cdHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0l0ZW1UeXBlc0NvbGxlY3Rpb24nO1xyXG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
7360
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9SbUNvcmUvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL1JtQ29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY29uc3RhbnRzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1V0aWwudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQXBpRm9ybWF0dGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaVJlcXVlc3RTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0FwaVJlc3BvbnNlUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0JhdGNoU3RhdHVzLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NoYW5nZXNDb21waWxhdGlvbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DaGFuZ2VzUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2xsZWN0aW9uRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25NYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uQ2FjaGUudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0NvbHVtbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uSW5mby50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Db2x1bW5TZXQudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvQ29sdW1uVXRpbC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9DcmVhdGVSZXF1ZXN0LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1BZG1pbmlzdHJhdG9yLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1DYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtRW50cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1IYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0l0ZW1SZXF1ZXN0U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9JdGVtUmVzb3VyY2VTZXJ2aWNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL0tleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvTG9jYWxDYWNoZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Mb2NrU2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24udHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2NsYXNzZXMvUXVlcnlNYXRjaGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5UGFyc2VyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1F1ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvY2xhc3Nlcy9SZXF1ZXN0Q29sdW1uRXhwYW5zaW9uLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL1NvY2tldE1lc3NhZ2VIYW5kbGVyLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9jbGFzc2VzL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS9leHRlcm5hbCBcIm1vbWVudFwiIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQmF0Y2hTdGF0dXNGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sbGVjdGlvbkNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbGxlY3Rpb25FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Db2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uRXhwYW5zaW9uRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NvbHVtbkluZm9GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvQ29sdW1uU2V0RmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0NyZWF0ZVJlcXVlc3RGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvSXRlbUNhY2hlRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL0l0ZW1FbnRyeUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9JdGVtUmVzb3VyY2VGYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvTG9jYWxDYWNoZUZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2ZhY3Rvcmllcy9Nb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvUXVlcnlNYXRjaGVyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1F1ZXJ5UGFyc2VyRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvZmFjdG9yaWVzL1JlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9mYWN0b3JpZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvbkVudHJ5LnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblJlc291cmNlLnRzIiwid2VicGFjazovL1JtQ29yZS8uL3NyYy9tb2RlbHMvQ29sbGVjdGlvblZpZXdSZXNvdXJjZS50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbW9kZWxzL0NvbGxlY3Rpb25FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtRW50cnkudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9JdGVtUmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9WaWV3UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9FZGl0UmVzb3VyY2UudHMiLCJ3ZWJwYWNrOi8vUm1Db3JlLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvbWFpbi50cyIsIndlYnBhY2s6Ly9SbUNvcmUvLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUEwQyxnQ0FBZ0M7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBd0Qsa0JBQWtCO0FBQzFFO0FBQ0EseURBQWlELGNBQWM7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUF5QyxpQ0FBaUM7QUFDMUUsd0hBQWdILG1CQUFtQixFQUFFO0FBQ3JJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7OztBQUdBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBWSxZQU9YO0FBUEQsV0FBWSxZQUFZO0lBQ3ZCLGlDQUFpQjtJQUNqQixxQ0FBcUI7SUFDckIsaUNBQWlCO0lBQ2pCLG1EQUFtQztJQUNuQyxtQ0FBbUI7SUFDbkIsK0JBQWU7QUFDaEIsQ0FBQyxFQVBXLFlB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QUksQ0FBQyxnQkFBZ0IsRUFDckIscUJBQXFCLEVBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsaUJBQWlCLEVBQ2pCLElBQUksQ0FBQywrQkFBK0IsRUFDcEMsZ0JBQWdCLEVBQ2hCLElBQUksQ0FBQyxZQUFZLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxxRUFBb0IsQ0FBQyxnQkFBZ0IsRUFDcEUsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLElBQUksQ0FBQyw2QkFBNkIsRUFDbEMsSUFBSSxDQUFDLFlBQVksRUFDakIscUJBQXFCLENBQ3JCLENBQUM7SUFDSCxDQUFDO0lBQ0YsYUFBQztBQUFELENBQUM7O0FBRUs7QUFDTixDQUFDO0FBRUssa0JBQW9CLEtBQUs7SUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNkLENBQUM7Ozs7Ozs7Ozs7OztBQ3BTcUMiLCJmaWxlIjoicm0tY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIm1vbWVudFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJtb21lbnRcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUm1Db3JlXCJdID0gZmFjdG9yeShyZXF1aXJlKFwibW9tZW50XCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJSbUNvcmVcIl0gPSBmYWN0b3J5KHJvb3RbXCJtb21lbnRcIl0pO1xufSkod2luZG93LCBmdW5jdGlvbihfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNSk7XG4iLCJleHBvcnQgZW51bSBFTlRSWV9TVEFUVVMge1xyXG5cdENBQ0hFRCA9ICdjYWNoZWQnLFxyXG5cdFBST01JU0VEID0gJ3Byb21pc2VkJyxcclxuXHRFWFBBTkQgPSAnZXhwYW5kJyxcclxuXHRQUk9NSVNFRF9FWFBBTkQgPSAncHJvbWlzZWQtZXhwYW5kJyxcclxuXHRSRVNPTFZFID0gJ3Jlc29sdmUnLFxyXG5cdExPQ0FMID0gJ2xvY2FsJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQUxMX1BFUk1JU1NJT05TID0gJzcnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTFVNTl9TRVBFUkFUT1IgPSAnPic7XHJcbmV4cG9ydCBjb25zdCBSRU5ERVJfQVNfU0VQRVJBVE9SID0gJzonO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19QUkVGSVg6IHN0cmluZyA9ICctMSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfUFJFRklYOiBzdHJpbmcgPSAnLTInO1xyXG5cclxuZXhwb3J0IGNvbnN0IE5FV19LRVlXT1JEOiBzdHJpbmcgPSAnbmV3LSc7XHJcbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfS0VZV09SRDogc3RyaW5nID0gJ2R1cC0nO1xyXG4iLCJleHBvcnQgZnVuY3Rpb24gc2hhbGxvd01lcmdlIChvYmplY3QsIGRlZmF1bHRzKSB7XHJcblx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0cmV0dXJuIGRlZmF1bHRzO1xyXG5cclxuXHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gZGVmYXVsdHMpIHtcclxuXHRcdHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV0gPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdGRlZmF1bHRzW2tleV0gOiBvYmplY3Rba2V5XTtcclxuXHR9XHJcblxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoYXNQcm9wZXJ0aWVzIChvYmplY3QpIHtcclxuXHQvLyBAdHMtaWdub3JlXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0UHJvcGVydHkgKG9iamVjdCkge1xyXG5cdGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0JylcclxuXHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpXHJcblx0XHRyZXR1cm4ga2V5O1xyXG5cclxuXHRyZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluQXJyYXkgKG5lZWRsZSwgaGF5c3RhY2spIHtcclxuXHRmb3IgKGNvbnN0IGhheSBvZiBoYXlzdGFjaykge1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdGlmIChuZWVkbGUgPT0gaGF5KVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckFycmF5PFQ+IChzb3VyY2U6IFRbXSwgY2FsbGJhY2s6IChUKSA9PiBib29sZWFuKSB7XHJcblx0Y29uc3QgZmlsdGVyZWQ6IFRbXSA9IFtdO1xyXG5cclxuXHRmb3IgKGNvbnN0IHNyYyBvZiBzb3VyY2UpIHtcclxuXHRcdGlmIChjYWxsYmFjayhzcmMpKVxyXG5cdFx0XHRmaWx0ZXJlZC5wdXNoKHNyYyk7XHJcblx0fVxyXG5cclxuXHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSBzb3VyY2UubGVuZ3RoKVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRlbXB0eUFycmF5KHNvdXJjZSk7XHJcblxyXG5cdGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcmVkKVxyXG5cdFx0c291cmNlLnB1c2goZmlsdGVyKTtcclxuXHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUFycmF5IChhcnJheSkge1xyXG5cdGFycmF5LnNwbGljZSgwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhFeGlzdHMgKHNvdXJjZSwgcGF0aCkge1xyXG5cdGlmICh0eXBlb2Ygc291cmNlID09PSAndW5kZWZpbmVkJylcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0Zm9yIChjb25zdCBwIG9mIHBhdGgpIHtcclxuXHRcdGlmICh0eXBlb2Ygc291cmNlW3BdID09PSAndW5kZWZpbmVkJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHNvdXJjZSA9IHNvdXJjZVtwXTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGF0aCAob2JqZWN0LCBwYXRoLCBkZWZhdWx0cykge1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgdmFsdWUgPSBwYXRoW2ldO1xyXG5cclxuXHRcdGlmIChvYmplY3RbdmFsdWVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG9iamVjdFt2YWx1ZV0gPSBkZWZhdWx0c1tpXTtcclxuXHJcblx0XHRvYmplY3QgPSBvYmplY3RbdmFsdWVdO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGggKG9iamVjdCwgcGF0aCwgY3JlYXRlID0gZmFsc2UpIHtcclxuXHRpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRmb3IgKGNvbnN0IHAgb2YgcGF0aCkge1xyXG5cdFx0b2JqZWN0ID0gb2JqZWN0W3BdOyAvLyB3b24ndCBhbHRlciB0aGUgY2FsbGVyJ3MgdmFyXHJcblxyXG5cdFx0aWYgKG9iamVjdCA9PT0gdW5kZWZpbmVkICYmICFjcmVhdGUpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gb2JqZWN0O1xyXG59XHJcblxyXG4vLyBUYWtlbiBmcm9tIEFuZ3VsYXJKUywgYWRkZWQgY29tbWVudHMgdG8gaWdub3JlIFR5cGVTY3JpcHQgZXJyb3JzXHJcbmZ1bmN0aW9uIGJhc2VFeHRlbmQgKGRzdCwgb2JqcywgZGVlcCkge1xyXG5cdGZvciAobGV0IGkgPSAwLCBpaSA9IG9ianMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xyXG5cdFx0Y29uc3Qgb2JqID0gb2Jqc1tpXTtcclxuXHJcblx0XHRpZiAoIWlzT2JqZWN0KG9iaikgJiYgIWlzRnVuY3Rpb24ob2JqKSlcclxuXHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaiA9IDAsIGpqID0ga2V5cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbal07XHJcblx0XHRcdGNvbnN0IHNyYyA9IG9ialtrZXldO1xyXG5cclxuXHRcdFx0aWYgKGRlZXAgJiYgaXNPYmplY3Qoc3JjKSkge1xyXG5cdFx0XHRcdGlmIChpc0RhdGUoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBuZXcgRGF0ZShzcmMudmFsdWVPZigpKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGlzUmVnRXhwKHNyYykpIHtcclxuXHRcdFx0XHRcdGRzdFtrZXldID0gbmV3IFJlZ0V4cChzcmMpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoc3JjLm5vZGVOYW1lKSB7XHJcblx0XHRcdFx0XHRkc3Rba2V5XSA9IHNyYy5jbG9uZU5vZGUodHJ1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChpc0VsZW1lbnQoc3JjKSkge1xyXG5cdFx0XHRcdFx0ZHN0W2tleV0gPSBzcmMuY2xvbmUoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKCFpc09iamVjdChkc3Rba2V5XSkpXHJcblx0XHRcdFx0XHRcdGRzdFtrZXldID0gaXNBcnJheShzcmMpID8gW10gOiB7fTtcclxuXHJcblx0XHRcdFx0XHRiYXNlRXh0ZW5kKGRzdFtrZXldLCBbc3JjXSwgdHJ1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRzdFtrZXldID0gc3JjO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZHN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIGZhbHNlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlIChkc3QsIC4uLmFyZ3MpIHtcclxuXHRyZXR1cm4gYmFzZUV4dGVuZChkc3QsIGFyZ3MsIHRydWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QgKHZhbHVlKSB7XHJcblx0Ly8gaHR0cDovL2pzcGVyZi5jb20vaXNvYmplY3Q0XHJcblx0cmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0JsYW5rT2JqZWN0ICh2YWx1ZSkge1xyXG5cdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlciAodmFsdWUpIHtcclxuXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSAodmFsdWUpIHtcclxuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IERhdGVdJztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVnRXhwICh2YWx1ZSkge1xyXG5cdHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4gKHZhbHVlKSB7XHJcblx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50IChub2RlKSB7XHJcblx0cmV0dXJuICEhKG5vZGUgJiZcclxuXHRcdChcclxuXHRcdFx0bm9kZS5ub2RlTmFtZSAgLy8gV2UgYXJlIGEgZGlyZWN0IGVsZW1lbnQuXHJcblx0XHRcdHx8IChub2RlLnByb3AgJiYgbm9kZS5hdHRyICYmIG5vZGUuZmluZClcclxuXHRcdClcclxuXHQpOyAgLy8gV2UgaGF2ZSBhbiBvbiBhbmQgZmluZCBtZXRob2QgcGFydCBvZiBqUXVlcnkgQVBJLlxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNXaW5kb3cgKG9iaikge1xyXG5cdHJldHVybiBvYmogJiYgb2JqLndpbmRvdyA9PT0gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkICh2YWx1ZSkge1xyXG5cdHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzIChvMSwgbzIpIHtcclxuXHRpZiAobzEgPT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdGlmIChvMSA9PT0gbnVsbCB8fCBvMiA9PT0gbnVsbClcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxyXG5cdGlmIChvMSAhPT0gbzEgJiYgbzIgIT09IG8yKVxyXG5cdFx0cmV0dXJuIHRydWU7IC8vIE5hTiA9PT0gTmFOXHJcblxyXG5cdGNvbnN0IHQxID0gdHlwZW9mIG8xO1xyXG5cdGNvbnN0IHQyID0gdHlwZW9mIG8yO1xyXG5cclxuXHRsZXQgbGVuZ3RoO1xyXG5cdGxldCBrZXk7XHJcblx0bGV0IGtleVNldDtcclxuXHJcblx0aWYgKHQxID09PSB0MiAmJiB0MSA9PT0gJ29iamVjdCcpIHtcclxuXHRcdGlmIChpc0FycmF5KG8xKSkge1xyXG5cdFx0XHRpZiAoIWlzQXJyYXkobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdGxlbmd0aCA9IG8xLmxlbmd0aDtcclxuXHJcblx0XHRcdGlmIChvMS5sZW5ndGggPT09IG8yLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZvciAoa2V5ID0gMDsga2V5IDwgbGVuZ3RoOyBrZXkrKykge1xyXG5cdFx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzRGF0ZShvMSkpIHtcclxuXHRcdFx0aWYgKCFpc0RhdGUobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBzaW1wbGVDb21wYXJlKG8xLmdldFRpbWUoKSwgbzIuZ2V0VGltZSgpKTtcclxuXHRcdH0gZWxzZSBpZiAoaXNSZWdFeHAobzEpKSB7XHJcblx0XHRcdGlmICghaXNSZWdFeHAobzIpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJldHVybiBvMS50b1N0cmluZygpID09PSBvMi50b1N0cmluZygpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGlzV2luZG93KG8xKSB8fCBpc1dpbmRvdyhvMikgfHwgaXNBcnJheShvMikgfHwgaXNEYXRlKG8yKSB8fCBpc1JlZ0V4cChvMikpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdFx0a2V5U2V0ID0gY3JlYXRlTWFwKCk7XHJcblx0XHRcdGZvciAoa2V5IGluIG8xKSB7XHJcblx0XHRcdFx0aWYgKGlzRnVuY3Rpb24obzFba2V5XSkpXHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0aWYgKCFlcXVhbHMobzFba2V5XSwgbzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGtleVNldFtrZXldID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChrZXkgaW4gbzIpIHtcclxuXHRcdFx0XHRpZiAoIShrZXkgaW4ga2V5U2V0KSAmJiBpc0RlZmluZWQobzJba2V5XSkgJiYgIWlzRnVuY3Rpb24obzJba2V5XSkpXHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVNYXAgKCkge1xyXG5cdHJldHVybiBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXHJcbmZ1bmN0aW9uIHNpbXBsZUNvbXBhcmUgKGEsIGIpIHtcclxuXHRyZXR1cm4gYSA9PT0gYiB8fCAoYSAhPT0gYSAmJiBiICE9PSBiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNWYWxpZE9iamVjdE1heERlcHRoIChtYXhEZXB0aCkge1xyXG5cdHJldHVybiBpc051bWJlcihtYXhEZXB0aCkgJiYgbWF4RGVwdGggPiAwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weSAoc291cmNlLCBkZXN0aW5hdGlvbj8sIG1heERlcHRoPykge1xyXG5cdGNvbnN0IHN0YWNrU291cmNlID0gW107XHJcblx0Y29uc3Qgc3RhY2tEZXN0ID0gW107XHJcblxyXG5cdG1heERlcHRoID0gaXNWYWxpZE9iamVjdE1heERlcHRoKG1heERlcHRoKSA/IG1heERlcHRoIDogTmFOO1xyXG5cclxuXHRpZiAoZGVzdGluYXRpb24pIHtcclxuXHRcdGlmIChzb3VyY2UgPT09IGRlc3RpbmF0aW9uKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBpZGVudGljYWwuJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRW1wdHkgdGhlIGRlc3RpbmF0aW9uIG9iamVjdFxyXG5cdFx0aWYgKGlzQXJyYXkoZGVzdGluYXRpb24pKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLmxlbmd0aCA9IDA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBkZXN0aW5hdGlvbilcclxuXHRcdFx0XHRkZWxldGUgZGVzdGluYXRpb25ba2V5XTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKHNvdXJjZSk7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja0Rlc3QucHVzaChkZXN0aW5hdGlvbik7XHJcblxyXG5cdFx0cmV0dXJuIGNvcHlSZWN1cnNlKHNvdXJjZSwgZGVzdGluYXRpb24sIG1heERlcHRoKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBjb3B5RWxlbWVudChzb3VyY2UsIG1heERlcHRoKTtcclxuXHJcblx0ZnVuY3Rpb24gY29weVJlY3Vyc2UgKF9zb3VyY2UsIF9kZXN0aW5hdGlvbiwgX21heERlcHRoKSB7XHJcblx0XHRfbWF4RGVwdGgtLTtcclxuXHJcblx0XHRpZiAoX21heERlcHRoIDwgMClcclxuXHRcdFx0cmV0dXJuICcuLi4nO1xyXG5cclxuXHRcdGlmIChpc0FycmF5KF9zb3VyY2UpKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBpaSA9IF9zb3VyY2UubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xyXG5cdFx0XHRcdF9kZXN0aW5hdGlvbi5wdXNoKGNvcHlFbGVtZW50KF9zb3VyY2VbaV0sIF9tYXhEZXB0aCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGlzQmxhbmtPYmplY3QoX3NvdXJjZSkpIHtcclxuXHRcdFx0Ly8gY3JlYXRlTWFwKCkgZmFzdCBwYXRoIC0tLSBTYWZlIHRvIGF2b2lkIGhhc093blByb3BlcnR5IGNoZWNrIGJlY2F1c2UgcHJvdG90eXBlIGNoYWluIGlzIGVtcHR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChfc291cmNlICYmIHR5cGVvZiBfc291cmNlLmhhc093blByb3BlcnR5ID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdC8vIFNsb3cgcGF0aCwgd2hpY2ggbXVzdCByZWx5IG9uIGhhc093blByb3BlcnR5XHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoX3NvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcblx0XHRcdFx0XHRfZGVzdGluYXRpb25ba2V5XSA9IGNvcHlFbGVtZW50KF9zb3VyY2Vba2V5XSwgX21heERlcHRoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIFNsb3dlc3QgcGF0aCAtLS0gaGFzT3duUHJvcGVydHkgY2FuJ3QgYmUgY2FsbGVkIGFzIGEgbWV0aG9kXHJcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIF9zb3VyY2UpIHtcclxuXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9zb3VyY2UsIGtleSkpIHtcclxuXHRcdFx0XHRcdF9kZXN0aW5hdGlvbltrZXldID0gY29weUVsZW1lbnQoX3NvdXJjZVtrZXldLCBfbWF4RGVwdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBfZGVzdGluYXRpb247XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBjb3B5RWxlbWVudCAoX3NvdXJjZSwgX21heERlcHRoID0gNSkge1xyXG5cdFx0Ly8gU2ltcGxlIHZhbHVlc1xyXG5cdFx0aWYgKCFpc09iamVjdChfc291cmNlKSlcclxuXHRcdFx0cmV0dXJuIF9zb3VyY2U7XHJcblxyXG5cdFx0Ly8gQWxyZWFkeSBjb3BpZWQgdmFsdWVzXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRjb25zdCBpbmRleCA9IHN0YWNrU291cmNlLmluZGV4T2YoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKGluZGV4ICE9PSAtMSlcclxuXHRcdFx0cmV0dXJuIHN0YWNrRGVzdFtpbmRleF07XHJcblxyXG5cdFx0aWYgKGlzV2luZG93KF9zb3VyY2UpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBjb3B5ISBNYWtpbmcgY29waWVzIG9mIFdpbmRvdyBpbnN0YW5jZXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbmVlZHNSZWN1cnNlID0gZmFsc2U7XHJcblx0XHRsZXQgX2Rlc3RpbmF0aW9uID0gY29weVR5cGUoX3NvdXJjZSk7XHJcblxyXG5cdFx0aWYgKF9kZXN0aW5hdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdF9kZXN0aW5hdGlvbiA9IGlzQXJyYXkoX3NvdXJjZSkgPyBbXSA6IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9zb3VyY2UpKTtcclxuXHRcdFx0bmVlZHNSZWN1cnNlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRzdGFja1NvdXJjZS5wdXNoKF9zb3VyY2UpO1xyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0c3RhY2tEZXN0LnB1c2goX2Rlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRyZXR1cm4gbmVlZHNSZWN1cnNlXHJcblx0XHRcdD8gY29weVJlY3Vyc2UoX3NvdXJjZSwgX2Rlc3RpbmF0aW9uLCBfbWF4RGVwdGgpXHJcblx0XHRcdDogX2Rlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gY29weVR5cGUgKF9zb3VyY2UpIHtcclxuXHRcdHN3aXRjaCAodG9TdHJpbmcuY2FsbChfc291cmNlKSkge1xyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBJbnQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQzMkFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDhBcnJheV0nOlxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSc6XHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgVWludDE2QXJyYXldJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBVaW50MzJBcnJheV0nOlxyXG5cdFx0XHRcdHJldHVybiBuZXcgX3NvdXJjZS5jb25zdHJ1Y3Rvcihjb3B5RWxlbWVudChfc291cmNlLmJ1ZmZlciksIF9zb3VyY2UuYnl0ZU9mZnNldCwgX3NvdXJjZS5sZW5ndGgpO1xyXG5cclxuXHRcdFx0Y2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxyXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFMTBcclxuXHRcdFx0XHRpZiAoIV9zb3VyY2Uuc2xpY2UpIHtcclxuXHRcdFx0XHRcdC8vIElmIHdlJ3JlIGluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBlbnZpcm9ubWVudCBzdXBwb3J0cyBBcnJheUJ1ZmZlclxyXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cclxuXHRcdFx0XHRcdGNvbnN0IGNvcGllZCA9IG5ldyBBcnJheUJ1ZmZlcihfc291cmNlLmJ5dGVMZW5ndGgpO1xyXG5cdFx0XHRcdFx0bmV3IFVpbnQ4QXJyYXkoY29waWVkKS5zZXQobmV3IFVpbnQ4QXJyYXkoX3NvdXJjZSkpO1xyXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNvcGllZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIF9zb3VyY2Uuc2xpY2UoMCk7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJvb2xlYW5dJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBOdW1iZXJdJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBTdHJpbmddJzpcclxuXHRcdFx0Y2FzZSAnW29iamVjdCBEYXRlXSc6XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBfc291cmNlLmNvbnN0cnVjdG9yKF9zb3VyY2UudmFsdWVPZigpKTtcclxuXHJcblx0XHRcdGNhc2UgJ1tvYmplY3QgUmVnRXhwXSc6XHJcblx0XHRcdFx0Y29uc3QgcmUgPSBuZXcgUmVnRXhwKF9zb3VyY2UuX3NvdXJjZSwgX3NvdXJjZS50b1N0cmluZygpLm1hdGNoKC9bXi9dKiQvKVswXSk7XHJcblxyXG5cdFx0XHRcdHJlLmxhc3RJbmRleCA9IF9zb3VyY2UubGFzdEluZGV4O1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gcmU7XHJcblxyXG5cdFx0XHRjYXNlICdbb2JqZWN0IEJsb2JdJzpcclxuXHRcdFx0XHRyZXR1cm4gbmV3IF9zb3VyY2UuY29uc3RydWN0b3IoW19zb3VyY2VdLCB7dHlwZTogX3NvdXJjZS50eXBlfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGlzRnVuY3Rpb24oX3NvdXJjZS5jbG9uZU5vZGUpKSB7XHJcblx0XHRcdHJldHVybiBfc291cmNlLmNsb25lTm9kZSh0cnVlKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBjb3B5LCBlcXVhbHMgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaUZvcm1hdHRlciB7XHJcblx0TU9NRU5UX0lOVkFMSUQgPSAnSW52YWxpZCBkYXRlJztcclxuXHRTRVJWRVJfREFURVRJTUVfRk9STUFUID0gJ1lZWVktTU0tRERbVF1ISDptbTpzc1onO1xyXG5cdFNFUlZFUl9USU1FX0ZPUk1BVCA9ICdISDptbTpzcyc7XHJcblx0U0VSVkVSX0RBVEVfRk9STUFUID0gJ1lZWVktTU0tREQnO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2UgKGZpZWxkcywgY29sdW1ucykge1xyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRmaWVsZHNbY29sdW1uLnBhdGhdID0gdGhpcy5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZmllbGRzW2NvbHVtbi5wYXRoXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRleHBhbmRSZXNwb25zZSAoY3VycmVudCwgZXhwYW5kZWQsIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y3VycmVudFtjb2x1bW4ucGF0aF0gPSB0aGlzLmZvcm1hdFJlc3BvbnNlVmFsdWUoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBleHBhbmRlZFtjb2x1bW4ucGF0aF0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVxdWVzdCAoaW5pdGlhbCwgbW9kaWZpZWQsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmZvcm1hdFJlcXVlc3RWYWx1ZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIG1vZGlmaWVkW2NvbHVtbklkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGhhc0NoYW5nZXMgKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbklkID0gY29sdW1uLmlkO1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKGFwaUNvbHVtbi5yZWFkT25seSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5jb21wYXJlRmllbGRzKGFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRDaGFuZ2VzIChpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBvYmplY3RbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblx0XHRcdGNvbnN0IGFwaUNvbHVtbiA9IGNvbHVtbi5hcGlDb2x1bW47XHJcblxyXG5cdFx0XHRpZiAoYXBpQ29sdW1uLnJlYWRPbmx5KVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0aWYgKCF0aGlzLmNvbXBhcmVGaWVsZHMoYXBpQ29sdW1uLnR5cGUsIGluaXRpYWxbY29sdW1uSWRdLCBtb2RpZmllZFtjb2x1bW5JZF0pKSB7XHJcblx0XHRcdFx0cmVzdWx0LnB1c2goXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdG9sZFZhbHVlOiBpbml0aWFsW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0bmV3VmFsdWU6IG1vZGlmaWVkW2NvbHVtbklkXSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uOiBjb2x1bW4uYXBpQ29sdW1uXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjb3B5RmllbGRzIChzb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gdGhpcy5jbG9uZShjb2x1bW4uYXBpQ29sdW1uLnR5cGUsIHNvdXJjZVtjb2x1bW5QYXRoXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0c2hhbGxvd0NvcHlGaWVsZHMgKHNoYWxsb3dTb3VyY2UsIGRlZXBTb3VyY2UsIGRlc3RpbmF0aW9uLCBjb2x1bW5zKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW4ucGF0aDtcclxuXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtblBhdGhdID0gc2hhbGxvd1NvdXJjZVtjb2x1bW5QYXRoXSAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRzaGFsbG93U291cmNlW2NvbHVtblBhdGhdIDpcclxuXHRcdFx0XHR0aGlzLmNsb25lKGNvbHVtbi5hcGlDb2x1bW4udHlwZSwgZGVlcFNvdXJjZVtjb2x1bW5QYXRoXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0c2V0RGVmYXVsdFZhbHVlcyAoZGVzdGluYXRpb24sIGNvbHVtbnMpIHtcclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uLmlkXSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNvbHVtbi5hcGlDb2x1bW4udHlwZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGRlc3RpbmF0aW9uO1xyXG5cdH1cclxuXHJcblx0Y29tcGFyZUZpZWxkcyAoY29sdW1uVHlwZSwgZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBzZWNvbmQgPT09IHVuZGVmaW5lZDtcclxuXHJcblx0XHRpZiAoc2Vjb25kID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZU1vbWVudE9iamVjdHMoZmlyc3QsIHNlY29uZCk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRHVyYXRpb25zKGZpcnN0LCBzZWNvbmQpO1xyXG5cdFx0XHRjYXNlICdpZCc6IC8vIGlkIHR5cGVzXHJcblx0XHRcdGNhc2UgJ2l0ZW0nOlxyXG5cdFx0XHRjYXNlICdsaW5rJzpcclxuXHRcdFx0Y2FzZSAnY2hpbGQnOlxyXG5cdFx0XHRjYXNlICdzaWJsaW5nJzpcclxuXHRcdFx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0XHRcdHJldHVybiBmaXJzdCA9PSBzZWNvbmQ7IC8vIHVzZSBub24tc3RyaWN0IGNvbXBhcmlzb25cclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ2Rpc3RhbmNlJzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzogLy8gZmxvYXRpbmcgcG9pbnQgdHlwZXNcclxuXHRcdFx0Y2FzZSAnZmlsZXNpemUnOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcGFyZUZsb2F0cyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdFx0Y2FzZSAnaW50JzogLy8gaW50ZWdlciB0eXBlc1xyXG5cdFx0XHRjYXNlICdib29sJzogLy8gYm9vbGVhbiB0eXBlc1xyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOiAvLyBzdHJpbmcgdHlwZXNcclxuXHRcdFx0Y2FzZSAncGhvbmUnOlxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIGZpcnN0ID09PSBzZWNvbmQ7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGVxdWFscyhmaXJzdCwgc2Vjb25kKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVGbG9hdHMgKGEsIGIpIHtcclxuXHRcdGNvbnN0IGFic0EgPSBNYXRoLmFicyhhKTtcclxuXHRcdGNvbnN0IGFic0IgPSBNYXRoLmFicyhiKTtcclxuXHRcdGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhIC0gYik7XHJcblxyXG5cdFx0Y29uc3QgRVBTSUxPTiA9IDEuMTllLTA3O1xyXG5cclxuXHRcdC8vIHNob3J0Y3V0LCBoYW5kbGVzIGluZmluaXRpZXNcclxuXHRcdGlmIChhID09PSBiKSB7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmIChhID09PSAwIHx8IGIgPT09IDAgfHwgZGlmZiA8IE51bWJlci5NSU5fVkFMVUUpIHtcclxuXHRcdFx0Ly8gYSBvciBiIGlzIHplcm8gb3IgYm90aCBhcmUgZXh0cmVtZWx5IGNsb3NlIHRvIGl0XHJcblx0XHRcdC8vIHJlbGF0aXZlIGVycm9yIGlzIGxlc3MgbWVhbmluZ2Z1bCBoZXJlXHJcblx0XHRcdHJldHVybiBkaWZmIDwgKEVQU0lMT04gKiBOdW1iZXIuTUlOX1ZBTFVFKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIHVzZSByZWxhdGl2ZSBlcnJvclxyXG5cdFx0XHRyZXR1cm4gZGlmZiAvIE1hdGgubWluKChhYnNBICsgYWJzQiksIE51bWJlci5NQVhfVkFMVUUpIDwgRVBTSUxPTjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbXBhcmVNb21lbnRPYmplY3RzIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRpZiAoIWZpcnN0LmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuICFzZWNvbmQuaXNWYWxpZCgpO1xyXG5cclxuXHRcdGlmICghc2Vjb25kLmlzVmFsaWQoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBmaXJzdCBJUyB2YWxpZFxyXG5cclxuXHRcdHJldHVybiBmaXJzdC5pc1NhbWUoc2Vjb25kKTtcclxuXHR9XHJcblxyXG5cdGNvbXBhcmVEdXJhdGlvbnMgKGZpcnN0LCBzZWNvbmQpIHtcclxuXHRcdHJldHVybiBmaXJzdC5hc01pbGxpc2Vjb25kcygpID09PSBzZWNvbmQuYXNNaWxsaXNlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlVmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZURhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVzcG9uc2VDb2xvcih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5mb3JtYXRSZXNwb25zZUR1cmF0aW9uKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcclxuXHRcdFx0Y2FzZSAnbnVtYmVyJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IDAgPyBudWxsIDogdmFsdWU7XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RWYWx1ZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGVUaW1lKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdERhdGUodmFsdWUpO1xyXG5cdFx0XHRjYXNlICdjb2xvcic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0UmVxdWVzdENvbG9yKHZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmZvcm1hdFJlcXVlc3REdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSAwID8gbnVsbCA6IHZhbHVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlc3BvbnNlRGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG1vbWVudC5pbnZhbGlkKCkgOiBtb21lbnQodmFsdWUpO1xyXG5cdH1cclxuXHJcblx0Zm9ybWF0UmVzcG9uc2VEdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24odmFsdWUgPT09IG51bGwgPyAwIDogdmFsdWUsICdzZWNvbmRzJyk7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXNwb25zZUNvbG9yICh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlLmNoYXJBdCgwKSA9PT0gJyMnID8gdmFsdWUgOiAnIycgKyB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REYXRlVGltZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURVRJTUVfRk9STUFUKSA6IG51bGw7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0RGF0ZSAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZS5mb3JtYXQodGhpcy5TRVJWRVJfREFURV9GT1JNQVQpIDogbnVsbDtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3REdXJhdGlvbiAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5hc1NlY29uZHMoKTtcclxuXHR9XHJcblxyXG5cdGZvcm1hdFJlcXVlc3RDb2xvciAodmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZS5jaGFyQXQoMCkgPT09ICcjJyA/IHZhbHVlLnN1YnN0cmluZygxKSA6IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFZhbHVlIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnaW50JzpcclxuXHRcdFx0Y2FzZSAnZG91YmxlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRjYXNlICdjaGlsZCc6XHJcblx0XHRcdGNhc2UgJ3NpYmxpbmcnOlxyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHRjYXNlICdib29sJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiAnMCc7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRcdHJldHVybiBtb21lbnQuaW52YWxpZCgpO1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbigpO1xyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRcdHJldHVybiAnIzAwMDAwMCc7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZW1haWxcclxuXHRcdFx0Ly8gXHRcdFx0XHRcdHVybFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0aHRtbFxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0anNvblxyXG5cdFx0XHQvLyBcdFx0XHRcdFx0ZGF0YVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEZWZhdWx0VmFsdWUgKGNvbHVtblR5cGUsIHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGNvbHVtblR5cGUsIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZShjb2x1bW5UeXBlKSk7XHJcblx0fVxyXG5cclxuXHRjbG9uZSAoY29sdW1uVHlwZSwgdmFsdWUpIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uVHlwZSkge1xyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEdXJhdGlvbih2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XHJcblx0XHRcdGNhc2UgJ2pzb24nOlxyXG5cdFx0XHRcdHJldHVybiBjb3B5KHZhbHVlKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDbG9uZUZ1bmN0aW9uIChjb2x1bW5UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtblR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNsb25lRHVyYXRpb247XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2xvbmVEYXRlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmlkZW50aXR5O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y2xvbmVEdXJhdGlvbiAoZHVyYXRpb24pIHtcclxuXHRcdHJldHVybiBtb21lbnQuZHVyYXRpb24oZHVyYXRpb24pO1xyXG5cdH1cclxuXHJcblx0Y2xvbmVEYXRlIChkYXRlKSB7XHJcblx0XHRyZXR1cm4gZGF0ZS5jbG9uZSgpO1xyXG5cdH1cclxuXHJcblx0aWRlbnRpdHkgKGlucHV0KSB7XHJcblx0XHRyZXR1cm4gaW5wdXQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVxdWVzdFNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0dGVtcGxhdGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcGFyYW1zOiBhbnkpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnRlbXBsYXRlKGl0ZW1UeXBlLCBwYXJhbXMpKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZSAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgdmFsdWVzOiBhbnksIHBhcmVudFR5cGU/OiBJdGVtVHlwZSwgcGFyZW50SWQ/OiBJdGVtSWQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShpdGVtVHlwZSwgaXRlbUlkLCB2YWx1ZXMsIHBhcmVudFR5cGUsIHBhcmVudElkKSk7XHJcblx0fVxyXG5cclxuXHRkZWxldGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkczogSXRlbUlkW10pOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLmRlbGV0ZShpdGVtVHlwZSwgaXRlbUlkcykpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbXM6IG9iamVjdCwgY29sdW1uczogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpKTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RTa2VsZXRvbiAocGFyYW1zOiBhbnksIHJlcXVlc3RDYW5jZWxlcj86IFByb21pc2U8YW55Pik6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NSZXNwb25zZSh0aGlzLmV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHBhcmFtcywgcmVxdWVzdENhbmNlbGVyKSk7XHJcblx0fVxyXG5cclxuXHRtb3ZlSXRlbXMgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtczogb2JqZWN0KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5tb3ZlSXRlbXMocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1zKSk7XHJcblx0fVxyXG5cclxuXHRjb2x1bW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbnM6IG9iamVjdCwgcGFyYW1zPzogYW55KTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1Jlc3BvbnNlKHRoaXMuZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZS5jb2x1bW5zKGl0ZW1UeXBlLCBjb2x1bW5zLCBwYXJhbXMpKTtcclxuXHR9XHJcblxyXG5cdHF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5OiBvYmplY3QsIGNvbHVtbnM6IG9iamVjdCwgbGltaXQ/OiBvYmplY3QpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5wcm9jZXNzUmVzcG9uc2UodGhpcy5leHRlcm5hbEFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucywgbGltaXQpKTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NSZXNwb25zZSAocmVxdWVzdCk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5hcGlSZXNwb25zZVByb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KHJlc3BvbnNlKSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZU1hcCwgUmVzcG9uc2VDb2x1bW4gfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXBpUmVzcG9uc2VQcm9jZXNzb3Ige1xyXG5cdGNvbHVtbnM6IEl0ZW1UeXBlTWFwO1xyXG5cdGl0ZW1zOiBJdGVtVHlwZU1hcDtcclxuXHRsaW5rczogSXRlbVR5cGVNYXA7XHJcblx0Y2FjaGVhYmxlOiBib29sZWFuO1xyXG5cdG1hcDogYW55O1xyXG5cclxuXHRjb2x1bW5JbmRleE1hcDogYW55ID0ge307XHJcblx0Y29sdW1uTWFwOiBhbnkgPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGFwaUZvcm1hdHRlcjogQXBpRm9ybWF0dGVyLFxyXG5cdFx0cHVibGljIHJlc3BvbnNlOiBhbnlcclxuXHQpIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IHJlc3BvbnNlLmNvbHVtbnM7XHJcblx0XHR0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XHJcblx0XHR0aGlzLmxpbmtzID0gcmVzcG9uc2UubGlua3M7XHJcblx0XHR0aGlzLmNhY2hlYWJsZSA9IHJlc3BvbnNlLmNhY2hlYWJsZTtcclxuXHRcdHRoaXMubWFwID0gcmVzcG9uc2UubWFwO1xyXG5cclxuXHRcdHRoaXMuY3JlYXRlQ29sdW1uTWFwcygpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlQ29sdW1uTWFwcyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtblR5cGUgaW4gdGhpcy5jb2x1bW5zKSB7XHJcblx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV0gPSB7fTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2NvbHVtblR5cGVdW2ldO1xyXG5cdFx0XHRcdHRoaXMuY29sdW1uSW5kZXhNYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGk7XHJcblx0XHRcdFx0dGhpcy5jb2x1bW5NYXBbY29sdW1uVHlwZV1bY29sdW1uLmlkXSA9IGNvbHVtbjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgY29sdW1uSWQpIHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YVt0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF1dO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hEZXJpdmVkT2JqZWN0IChpdGVtVHlwZSwgaXRlbUlkLCByb290Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5mZXRjaERlcml2ZWRWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5mZXRjaFZhbHVlKGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtbi5pZCksXHJcblx0XHRcdFx0Y29sdW1uLFxyXG5cdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaERlcml2ZWRWYWx1ZXMgKHZhbHVlLCBjb2x1bW4sIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRsZXQgY2hpbGRWYWx1ZTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG5cdFx0XHRcdGNoaWxkVmFsdWUgPSBudWxsO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NoaWxkQ29sdW1uLnBhdGhdID0gdGhpcy5hcGlGb3JtYXR0ZXIuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkQ29sdW1uLmFwaUNvbHVtbi50eXBlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjaGlsZFZhbHVlID0gdGhpcy5mZXRjaFZhbHVlKGNvbHVtbi5pdGVtVHlwZSwgdmFsdWUsIGNoaWxkQ29sdW1uLmlkKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbltjaGlsZENvbHVtbi5wYXRoXSA9IGNoaWxkVmFsdWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjaGlsZENvbHVtbi5pc0xlYWYpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLmZldGNoRGVyaXZlZFZhbHVlcyhjaGlsZFZhbHVlLCBjaGlsZENvbHVtbiwgZGVzdGluYXRpb24pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3QgKGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rczogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuXHRcdGlmICh0aGlzLml0ZW1zW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdGlmIChpdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0uZGF0YTtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHJlc3VsdFt0aGlzLmNvbHVtbnNbaXRlbVR5cGVdW2ldLmlkXSA9IGRhdGFbaV07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVMaW5rcykge1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IHRoaXMuaXRlbXNbaXRlbVR5cGVdW2l0ZW1JZF0ubGlua3M7XHJcblx0XHRcdHJlc3VsdC5fX2xpbmtzID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtUeXBlIGluIGxpbmtzKVxyXG5cdFx0XHRcdHJlc3VsdC5fX2xpbmtzW2xpbmtUeXBlXSA9XHJcblx0XHRcdFx0XHR0aGlzLmZldGNoT2JqZWN0QXJyYXkobGlua1R5cGUsIGluY2x1ZGVMaW5rcywgbGlua3NbbGlua1R5cGVdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RBcnJheSAoaXRlbVR5cGUsIGluY2x1ZGVMaW5rcywgaWRBcnJheSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBhbnkgPSBbXTtcclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gbnVsbCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGluY2x1ZGVMaW5rcykpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaWRBcnJheSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRpZEFycmF5ID0gdGhpcy5saW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgaWRBcnJheSlcclxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBpbmNsdWRlTGlua3MpKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hPYmplY3RNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCwgaW5jbHVkZUxpbmtzLCByZXR1cm5LZXlzKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1trZXk6IHN0cmluZ106IGFueX0gPSB7fTtcclxuXHRcdGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRjb25zdCBrZXkgPSB0aGlzLml0ZW1zW2l0ZW1UeXBlXVtpZF0uZGF0YVtjb2x1bW5JbmRleF07XHJcblx0XHRcdGtleXMucHVzaChrZXkpO1xyXG5cdFx0XHRyZXN1bHRba2V5XSA9IHRoaXMuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGlkLCBpbmNsdWRlTGlua3MpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyZXR1cm5LZXlzKVxyXG5cdFx0XHRyZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBrZXlzOiBrZXlzfTtcclxuXHRcdGVsc2VcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoRmllbGRNYXAgKGl0ZW1UeXBlLCBjb2x1bW5JZCkge1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbkluZGV4TWFwW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGlkIGluIHRoaXMuaXRlbXNbaXRlbVR5cGVdKVxyXG5cdFx0XHRyZXN1bHRbaWRdID0gdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmRhdGFbaW5kZXhdO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaENvbHVtbkFycmF5IChpdGVtVHlwZSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBSZXNwb25zZUNvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBhcGlDb2x1bW4gb2YgdGhpcy5jb2x1bW5zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmVzdWx0LnB1c2goYXBpQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5PYmplY3QgKGl0ZW1UeXBlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5NYXBbaXRlbVR5cGVdO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hDb2x1bW5zT2JqZWN0ICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmNvbHVtbk1hcDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVJlc291cmNlIChpdGVtVHlwZSwgaWQpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdG9iamVjdDogdGhpcy5mZXRjaE9iamVjdChpdGVtVHlwZSwgaWQpLFxyXG5cdFx0XHRsaW5rczogdGhpcy5pdGVtc1tpdGVtVHlwZV1baWRdLmxpbmtzXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0aGFzSXRlbXMgKGl0ZW1UeXBlKSB7XHJcblx0XHQvLyBAdHMtaWdub3JlXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0SWRBcnJheSAoaXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLml0ZW1zW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRyZXN1bHQucHVzaChpdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEVOVFJZX1NUQVRVUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlTdGF0dXMsIEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwLCBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXMge1xyXG5cdGVudHJpZXM6IEl0ZW1FbnRyeUVudHJ5U3RhdHVzTWFwID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgZ2V0SXRlbUlkOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IEl0ZW1JZCxcclxuXHRcdHB1YmxpYyBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5PiAvLyB0b2RvOiBwcm9taXNlIHJldHVybiB0eXBlXHJcblx0KSB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBpbiBFTlRSWV9TVEFUVVMpXHJcblx0XHRcdHRoaXMuZW50cmllc1tFTlRSWV9TVEFUVVNbc3RhdHVzXV0gPSBbXTtcclxuXHR9XHJcblxyXG5cdGFkZCAoZW50cnlTdGF0dXM6IEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4pOiB2b2lkIHtcclxuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW3N0YXR1c10gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0dGhpcy5lbnRyaWVzW3N0YXR1c10gPSBbXTtcclxuXHJcblx0XHR0aGlzLmVudHJpZXNbc3RhdHVzXS5wdXNoKGVudHJ5U3RhdHVzLmVudHJ5KTtcclxuXHR9XHJcblxyXG5cdGhhc0VudHJpZXMgKHN0YXR1c0FycmF5OiBFTlRSWV9TVEFUVVNbXSk6IGJvb2xlYW4ge1xyXG5cdFx0Zm9yIChjb25zdCBzdGF0dXMgb2Ygc3RhdHVzQXJyYXkpIHtcclxuXHRcdFx0aWYgKHRoaXMuZW50cmllc1tzdGF0dXNdLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0aGFzUmVxdWVzdHMgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaGFzRW50cmllcyhbRU5UUllfU1RBVFVTLlJFU09MVkUsIEVOVFJZX1NUQVRVUy5FWFBBTkQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdKTtcclxuXHR9XHJcblxyXG5cdGZvckVhY2hFbnRyeSAoc3RhdHVzQXJyYXk6IEVOVFJZX1NUQVRVU1tdLCBjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKSB7XHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1cyBvZiBzdGF0dXNBcnJheSkge1xyXG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXHJcblx0XHRcdFx0Y2FsbGJhY2soc3RhdHVzRW50cnkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0UHJvbWlzZXMgKCk6IFByb21pc2U8SXRlbUVudHJ5W10+IHtcclxuXHRcdGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUFJPTUlTRUQsIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkRdLFxyXG5cdFx0XHRlbnRyeSA9PiB7XHJcblx0XHRcdFx0cHJvbWlzZXMucHVzaCh0aGlzLmdldFByb21pc2UoZW50cnkpKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocHJvbWlzZXMpO1xyXG5cdH1cclxuXHJcblx0Z2V0UmVxdWVzdElkcyAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0dGhpcy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuUkVTT0xWRSwgRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF0sXHJcblx0XHRcdGVudHJ5ID0+IHtcclxuXHRcdFx0XHRyZXN1bHQucHVzaCh0aGlzLmdldEl0ZW1JZChlbnRyeSkpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRBcnJheSAoKTogSXRlbUVudHJ5W10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIHRoaXMuZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBzdGF0dXNFbnRyaWVzID0gdGhpcy5lbnRyaWVzW3N0YXR1c107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHN0YXR1c0VudHJ5IG9mIHN0YXR1c0VudHJpZXMpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goc3RhdHVzRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBFbnRyeVBhcmVudCB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VzQ29tcGlsYXRpb24ge1xuXHRjb21waWxhdGlvbiA9IHtcblx0XHRjcmVhdGU6IHt9LFxuXHRcdGRlbGV0ZToge30sXG5cdFx0dXBkYXRlOiB7fSxcblx0XHRtb3ZlOiB7fVxuXHR9O1xuXG5cdGNvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XG5cblx0cHJpdmF0ZSBtb3ZlQXJyYXk6IEl0ZW1FbnRyeVtdID0gW107XG5cdHByaXZhdGUgZGVsZXRlTWFwID0ge307XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcblx0XHRwdWJsaWMgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxuXHRcdGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlbXVxuXHQpIHtcblx0XHR0aGlzLmNvbGxlY3Rpb25zID0gdGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xuXG5cdFx0dGhpcy5wcm9jZXNzU2luZ2xlSXRlbXMoKTtcblx0XHR0aGlzLnByb2Nlc3NDb2xsZWN0aW9ucyhjb2xsZWN0aW9uRW50cmllcyk7XG5cdFx0dGhpcy5wb3N0UHJvY2VzcygpO1xuXHR9XG5cblx0Z2V0RGVmYXVsdFBhcmVudCAoKTogRW50cnlQYXJlbnQge1xuXHRcdHJldHVybiB7aXRlbVR5cGU6ICdWb2lkJywgaXRlbUlkOiAwfTtcblx0fVxuXG5cdGFkZE1vdmVFbnRyeSAoaXRlbUVudHJ5KSB7XG5cdFx0dGhpcy5tb3ZlQXJyYXkucHVzaChpdGVtRW50cnkpO1xuXHR9XG5cblx0YWRkRGVsZXRlRW50cnkgKGl0ZW1FbnRyeSwgcGFyZW50SWQsIHBhcmVudFR5cGUpIHtcblx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0dGhpcy5kZWxldGVNYXAsXG5cdFx0XHRbaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkXSxcblx0XHRcdFt7fSwge3BhcmVudElkOiBwYXJlbnRJZCwgaXRlbTogaXRlbUVudHJ5LCBwYXJlbnRUeXBlOiBwYXJlbnRUeXBlfV1cblx0XHQpO1xuXHR9XG5cblx0YWRkVXBkYXRlRW50cnkgKGl0ZW1FbnRyeSkge1xuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLnVwZGF0ZSxcblx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0W3t9LCBpdGVtRW50cnldXG5cdFx0KTtcblx0fVxuXG5cdGFkZENyZWF0ZUVudHJ5IChpdGVtRW50cnkpIHtcblx0XHRsZXQgcGFyZW50ID0gaXRlbUVudHJ5LnBhcmVudDtcblxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXG5cdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcblxuXHRcdGNyZWF0ZVBhdGgoXG5cdFx0XHR0aGlzLmNvbXBpbGF0aW9uLmNyZWF0ZSxcblx0XHRcdFtwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQsIGl0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXG5cdFx0XHRbe30sIHt9LCB7fSwgaXRlbUVudHJ5XVxuXHRcdCk7XG5cdH1cblxuXHRwb3N0UHJvY2VzcyAoKSB7XG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgdGhpcy5tb3ZlQXJyYXkpIHtcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XG5cdFx0XHRjb25zdCBkZWxldGVFbnRyeSA9IHRoaXMuZGVsZXRlTWFwW2l0ZW1FbnRyeS5pdGVtVHlwZV07XG5cblx0XHRcdGlmIChkZWxldGVFbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGRlbGV0ZUVudHJ5W2l0ZW1JZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFzc3VtZSB0aGUgaXRlbUVudHJ5IGhhcyBhIHBhcmVudCAob3Igc29tZXRoaW5nIHdlbnQgc2VyaW91c2x5IHdyb25nKVxuXHRcdFx0Y29uc3QgcGFyZW50ID0gPEVudHJ5UGFyZW50PiBpdGVtRW50cnkucGFyZW50O1xuXG5cdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IGNyZWF0ZVBhdGgoXG5cdFx0XHRcdHRoaXMuY29tcGlsYXRpb24ubW92ZSxcblx0XHRcdFx0W3BhcmVudC5pdGVtVHlwZSwgcGFyZW50Lml0ZW1JZF0sXG5cdFx0XHRcdFt7fSwgW11dXG5cdFx0XHQpO1xuXG5cdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGRlbGV0ZUVudHJ5W2l0ZW1JZF0pO1xuXG5cdFx0XHRkZWxldGUgZGVsZXRlRW50cnlbaXRlbUlkXTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIHRoaXMuZGVsZXRlTWFwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmRlbGV0ZU1hcFtpdGVtVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSB0aGlzLmRlbGV0ZU1hcFtpdGVtVHlwZV1baXRlbUlkXS5pdGVtO1xuXHRcdFx0XHRjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuY29tcGlsYXRpb24uZGVsZXRlO1xuXG5cdFx0XHRcdGlmIChkZXN0aW5hdGlvbltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0XHRkZXN0aW5hdGlvbltpdGVtVHlwZV0ucHVzaChpdGVtRW50cnkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1NpbmdsZUl0ZW1zICgpIHtcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiB0aGlzLnNpbmdsZUl0ZW1zKSB7XG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzTG9jYWwoKSlcblx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdFx0ZWxzZSBpZiAoaXRlbUVudHJ5Lmhhc0NoYW5nZXMoKSlcblx0XHRcdFx0dGhpcy5hZGRVcGRhdGVFbnRyeShpdGVtRW50cnkpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc0NvbGxlY3Rpb25zIChjb2xsZWN0aW9uRW50cmllcykge1xuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25zLmFkZChjb2xsZWN0aW9uRW50cnkpO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIGFkZCB0aGUgY29sbGVjdGlvbiBwYXJlbnQgaWQgdG8gdGhlIGRlbGV0ZSBlbnRyeSAoaW4gY2FzZSB0aGUgaXRlbSBoYXMgYmVlbiBtb3ZlZClcblx0XHRcdGxldCBwYXJlbnQgPSBjb2xsZWN0aW9uRW50cnkucGFyZW50O1xuXG5cdFx0XHRpZiAocGFyZW50ID09PSBudWxsKVxuXHRcdFx0XHRwYXJlbnQgPSB0aGlzLmdldERlZmF1bHRQYXJlbnQoKTtcblxuXHRcdFx0bGV0IGFkZGVkSXRlbXM7XG5cdFx0XHRsZXQgcmVtb3ZlZEl0ZW1zO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSkge1xuXHRcdFx0XHRhZGRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1zO1xuXHRcdFx0XHRyZW1vdmVkSXRlbXMgPSBbXTtcblx0XHRcdH0gZWxzZSBpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMpIHtcblx0XHRcdFx0YWRkZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRBZGRlZEl0ZW1zKCk7XG5cdFx0XHRcdHJlbW92ZWRJdGVtcyA9IGNvbGxlY3Rpb25FbnRyeS5nZXRSZW1vdmVkSXRlbXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFkZGVkSXRlbXMgPSBbXTtcblx0XHRcdFx0cmVtb3ZlZEl0ZW1zID0gW107XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgYWRkZWRJdGVtIG9mIGFkZGVkSXRlbXMpIHsgLy8gaXQgaXMgcG9zc2libGUgdG8gbW92ZSBhbiBleGlzdGluZyBpdGVtIHRvIGEgbmV3IGNvbGxlY3Rpb25cblx0XHRcdFx0aWYgKGFkZGVkSXRlbS5pc0xvY2FsKCkpXG5cdFx0XHRcdFx0dGhpcy5hZGRDcmVhdGVFbnRyeShhZGRlZEl0ZW0pO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dGhpcy5hZGRNb3ZlRW50cnkoYWRkZWRJdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbSBvZiByZW1vdmVkSXRlbXMpXG5cdFx0XHRcdHRoaXMuYWRkRGVsZXRlRW50cnkocmVtb3ZlZEl0ZW0sIHBhcmVudC5pdGVtSWQsIHBhcmVudC5pdGVtVHlwZSk7XG5cblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMpIHtcblx0XHRcdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gY29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtcygpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlZEl0ZW0gb2YgdXBkYXRlZEl0ZW1zKVxuXHRcdFx0XHRcdHRoaXMuYWRkVXBkYXRlRW50cnkodXBkYXRlZEl0ZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbkhhbmRsZXIsXHJcblx0Q29sdW1uSW5mbyxcclxuXHRJdGVtSGFuZGxlclxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCwgRW50cnlQYXJlbnQsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGNyZWF0ZVBhdGgsIGdldFBhdGgsIGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3Ige1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uSGFuZGxlcjogQ29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNyZWF0ZVJlcXVlc3RGYWN0b3J5OiBDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IHdlIGNhbiByZW1vdmUgdGhlc2Ugb25jZSB0aGUgZG9jdW1lbnQgY3JlYXRpb24gaGFzIGJlZW4gdXBkYXRlZFxyXG5cdGdldEl0ZW1UeXBlVXBkYXRlUHJpb3JpdHkgKGl0ZW1UeXBlKSB7XHJcblx0XHRzd2l0Y2ggKGl0ZW1UeXBlKSB7XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbGJlZHJhZyc6XHJcblx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdGNhc2UgJ0ZhY3R1dXJyZWdlbCc6XHJcblx0XHRcdGNhc2UgJ01pbmZhY3R1dXInOlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNEb2N1bWVudEl0ZW1UeXBlIChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdCb24nOlxyXG5cdFx0XHRjYXNlICdPZmZlcnRlJzpcclxuXHRcdFx0Y2FzZSAnQ29udHJhY3QnOlxyXG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsYm9uJzpcclxuXHRcdFx0Y2FzZSAnQ29udGFjdGJvbic6XHJcblx0XHRcdGNhc2UgJ0luaHV1cmJvbic6XHJcblx0XHRcdGNhc2UgJ01lZGV3ZXJrZXJib24nOlxyXG5cdFx0XHRjYXNlICdSZXBhcmF0aWVib24nOlxyXG5cdFx0XHRjYXNlICdWb2VydHVpZ2Jvbic6XHJcblx0XHRcdGNhc2UgJ0Fhbm1hbmluZyc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0aXNEb2N1bWVudFVwZGF0ZSAoY29tcGlsYXRpb24pIHtcclxuXHRcdGNvbnN0IHVwZGF0ZUNvbXBpbGF0aW9uID0gY29tcGlsYXRpb24udXBkYXRlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdXBkYXRlQ29tcGlsYXRpb24pIHtcclxuXHRcdFx0aWYgKHRoaXMuaXNEb2N1bWVudEl0ZW1UeXBlKGl0ZW1UeXBlKSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRidWlsZE1vdmVSZXF1ZXN0IChjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gY29tcGlsYXRpb25FbnRyeS5pdGVtO1xyXG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0cmVzdWx0W2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0cmVzdWx0W2l0ZW1UeXBlXS5wdXNoKGl0ZW1FbnRyeS5pdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRNYXBWYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleGVjdXRlQ3JlYXRlUmVxdWVzdHMgKFxyXG5cdFx0Y2hhbmdlc0NvbXBpbGF0aW9uOiBDaGFuZ2VzQ29tcGlsYXRpb24sXHJcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRcdGJyZWFrdXBCeVBhcmVudD86IGJvb2xlYW4sXHJcblx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2s/OiAoY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCkgPT4gdm9pZFxyXG5cdCkge1xyXG5cdFx0Y29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uLmNyZWF0ZSxcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLmNvbGxlY3Rpb25zLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnRcclxuXHRcdCkucnVuKCk7XHJcblx0XHRjb25zdCByZXNwb25zZXM6IEFycmF5PFByb21pc2U8YW55Pj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpXHJcblx0XHRcdHJlc3BvbnNlcy5wdXNoKHRoaXMuZXhlY3V0ZUNyZWF0ZVJlcXVlc3QocmVxdWVzdCwgY29udmVyc2lvbk1hcCkudGhlbihub3RpZnkpKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwocmVzcG9uc2VzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHJcblx0XHRmdW5jdGlvbiBub3RpZnkgKHJlc3VsdCkge1xyXG5cdFx0XHRpZiAob25BZnRlckNyZWF0ZUNhbGxiYWNrICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNyZWF0ZVJlcXVlc3QgKHJlcXVlc3RSZXNvdXJjZSwgY29udmVyc2lvbk1hcCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucmVxdWVzdFNrZWxldG9uKHJlcXVlc3RSZXNvdXJjZS5yZXF1ZXN0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VNYXAgPSByZXNwb25zZS5tYXA7XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCk7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuaXRlbXM7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2UucmVxdWVzdC5jb2x1bW5zW2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1FbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSBpdGVtRW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbUlkID0gdGhpcy5nZXRNYXBWYWx1ZShpdGVtVHlwZSwgaXRlbUlkLCByZXNwb25zZU1hcCk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0NyZWF0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Y29uc3QgZmllbGRzID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIG5ld0l0ZW1JZCk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGV4cGFuZFJlc291cmNlID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkID0gbmV3SXRlbUlkO1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkudXBkYXRlRmllbGRzKGZpZWxkcyk7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5kUmVzb3VyY2UgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkuZXhwYW5kKFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBuZXdJdGVtSWQsIGV4cGFuZFJlc291cmNlLmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdFx0XHRcdFx0XHRleHBhbmRSZXNvdXJjZVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJlcXVlc3RSZXNvdXJjZS5jb2xsZWN0aW9ucy5hZGRUb0NvbGxlY3Rpb25zKCk7XHJcblxyXG5cdFx0XHRcdC8vIGV4dGVuZCBjb252ZXJzaW9uIG1hcFxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2VNYXApIHtcclxuXHRcdFx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0XHRjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHJlc3BvbnNlTWFwW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1baXRlbUlkXSA9IHJlc3BvbnNlTWFwW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcmlvcml0aXplVXBkYXRlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCBwcmlvcml0aXplZEl0ZW1UeXBlczogc3RyaW5nW11bXSA9IFtbXSwgW10sIFtdXTtcclxuXHRcdGxldCByZXF1ZXN0Q2hhaW4gPSB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKVxyXG5cdFx0XHRwcmlvcml0aXplZEl0ZW1UeXBlc1t0aGlzLmdldEl0ZW1UeXBlVXBkYXRlUHJpb3JpdHkoaXRlbVR5cGUpXS5wdXNoKGl0ZW1UeXBlKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlcyBvZiBwcmlvcml0aXplZEl0ZW1UeXBlcykge1xyXG5cdFx0XHRpZiAoaXRlbVR5cGVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHJlcXVlc3RDaGFpbiA9IHJlcXVlc3RDaGFpbi50aGVuKFxyXG5cdFx0XHRcdHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzKGl0ZW1UeXBlcywgY29tcGlsYXRpb24sIHBhcmFtZXRlcnMpLFxyXG5cdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0Q2hhaW47XHJcblx0fVxyXG5cclxuXHQvLyBjb25zdHJ1Y3QgYSBjYWxsYmFjayBmdW5jdGlvblxyXG5cdHByaXZhdGUgZXhlY3V0ZVVwZGF0ZVJlcXVlc3RzIChpdGVtVHlwZXMsIGNvbXBpbGF0aW9uLCBwYXJhbWV0ZXJzKSB7XHJcblx0XHRyZXR1cm4gKCkgPT4ge1xyXG5cdFx0XHRjb25zdCByZXF1ZXN0czogQXJyYXk8UHJvbWlzZTxBcGlSZXNwb25zZT4+ID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIG9mIGl0ZW1UeXBlcylcclxuXHRcdFx0XHRyZXF1ZXN0cy5wdXNoKHRoaXMuZXhlY3V0ZVVwZGF0ZVJlcXVlc3QoaXRlbVR5cGUsIGNvbXBpbGF0aW9uW2l0ZW1UeXBlXSwgcGFyYW1ldGVycykpO1xyXG5cclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVVcGRhdGVSZXF1ZXN0IChpdGVtVHlwZSwgaXRlbUVudHJpZXMsIHBhcmFtZXRlck1hcCkge1xyXG5cdFx0Y29uc3QgcmVxdWVzdCA9IHt9O1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hdGNoZXIgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmdldENvbGxlY3Rpb25NYXRjaGVyKCk7XHJcblxyXG5cdFx0cmVxdWVzdFtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHQvLyB3ZSBuZWVkIHRvIGRvIHRoZSBmb3JtYXRSZXF1ZXN0IGNhbGwgaGVyZSAoZmllbGRzIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkKVxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbUlkXTtcclxuXHRcdFx0Ly8gUk1Db3JlIHRvZG86IHR5cGVcclxuXHRcdFx0Y29uc3QgaXRlbVJlcXVlc3Q6IGFueSA9IHJlcXVlc3RbaXRlbVR5cGVdW2l0ZW1JZF0gPSB7fTtcclxuXHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgocGFyYW1ldGVyTWFwLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xyXG5cclxuXHRcdFx0aXRlbVJlcXVlc3QudmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHJcblx0XHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMgPSBjb2xsZWN0aW9uTWF0Y2hlci5nZXRDb2xsZWN0aW9uc1dpdGhGaXR0aW5nSXRlbXMoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKVxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucy5leHBhbmQoY29sbGVjdGlvbi5jb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS51cGRhdGVJdGVtcyhpdGVtVHlwZSwgcmVxdWVzdCwgcmVxdWVzdENvbHVtbnMuZ2V0KCkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucy5nZXQoKSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IGl0ZW1FbnRyaWVzW2l0ZW1JZF07XHJcblx0XHRcdFx0XHRjb25zdCBmaWVsZHMgPSByZXNwb25zZS5mZXRjaE9iamVjdChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZmllbGRzID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKCdVcGRhdGUgZmFpbGVkIScsIGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkuaW5pdGlhbCwge30sIGl0ZW1FbnRyeS5jb2x1bW5zLm1haW4pO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0XHQuc2V0RGVyaXZlZChyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgaXRlbUVudHJ5LmNvbHVtbnMucm9vdCkpXHJcblx0XHRcdFx0XHRcdC51cGRhdGVGaWVsZHMoZmllbGRzKVxyXG5cdFx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBleHBhbmRSZXNvdXJjZSA9IGNvbHVtbkV4cGFuc2lvbi5ydW4oaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRcdGlmIChleHBhbmRSZXNvdXJjZSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmV4cGFuZChcclxuXHRcdFx0XHRcdFx0ZmllbGRzLFxyXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5kUmVzb3VyY2UuZGlmZmVyZW5jZS5yb290KSxcclxuXHRcdFx0XHRcdFx0ZXhwYW5kUmVzb3VyY2VcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5yZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVEZWxldGVSZXF1ZXN0cyAoY29tcGlsYXRpb24pIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbXBpbGF0aW9uKSAvLyBjbGVhcmluZyBub3QgbmVjZXNzYXJ5XHJcblx0XHRcdHJlcXVlc3RzLnB1c2godGhpcy5leGVjdXRlRGVsZXRlUmVxdWVzdChpdGVtVHlwZSwgY29tcGlsYXRpb25baXRlbVR5cGVdKSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlcXVlc3RzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZURlbGV0ZVJlcXVlc3QgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcclxuXHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGlkQXJyYXkucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoaXRlbVR5cGUsIGlkQXJyYXkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkQXJyYXkgPSByZXNwb25zZS5pdGVtcztcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZ2V0Q29sbGVjdGlvbk1hdGNoZXIoKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGlmICghaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCByZXNwb25zZUlkQXJyYXkpKVxyXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oJ0RlbGV0ZSBmYWlsZWQhJywgaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyLnJlbW92ZUZyb21Db2xsZWN0aW9ucygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGV4ZWN1dGVNb3ZlUmVxdWVzdHMgKGNvbXBpbGF0aW9uLCBjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCBzZWxmID0gdGhpcztcclxuXHRcdGNvbnN0IHJlcXVlc3RzOiBBcnJheTxQcm9taXNlPEFwaVJlc3BvbnNlPj4gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29tcGlsYXRpb24pIHtcclxuXHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBjb21waWxhdGlvbltwYXJlbnRUeXBlXSlcclxuXHRcdFx0XHRleGVjdXRlTW92ZVJlcXVlc3QocGFyZW50VHlwZSwgcGFyZW50SWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbChyZXF1ZXN0cyk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gZXhlY3V0ZU1vdmVSZXF1ZXN0IChwYXJlbnRUeXBlLCBwYXJlbnRJZCkge1xyXG5cdFx0XHQvLyBvbmx5IHRoZSBwYXJlbnQgaWQgY291bGQgaGF2ZSBiZWVuIHVwZGF0ZWRcclxuXHRcdFx0Y29uc3QgY29tcGlsYXRpb25FbnRyaWVzID0gY29tcGlsYXRpb25bcGFyZW50VHlwZV1bcGFyZW50SWRdO1xyXG5cdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHNlbGYuZ2V0TWFwVmFsdWUocGFyZW50VHlwZSwgcGFyZW50SWQsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0cmVxdWVzdHMucHVzaChcclxuXHRcdFx0XHRzZWxmLmFwaVJlcXVlc3RTZXJ2aWNlLm1vdmVJdGVtcyhcclxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRuZXdQYXJlbnRJZCAhPT0gdW5kZWZpbmVkID8gbmV3UGFyZW50SWQgOiBwYXJlbnRJZCxcclxuXHRcdFx0XHRcdHNlbGYuYnVpbGRNb3ZlUmVxdWVzdChjb21waWxhdGlvbkVudHJpZXMpXHJcblx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRzZWxmLnByb2Nlc3NNb3ZlUmVzcG9uc2UoLyogcmVzcG9uc2UsICovY29tcGlsYXRpb25FbnRyaWVzKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRzZWxmLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NNb3ZlUmVzcG9uc2UgKC8qIHJlc3BvbnNlLCAqL2NvbXBpbGF0aW9uRW50cmllcykge1xyXG5cdFx0Ly8gVE9ETzogcHJvY2VzcyByZXNwb25zZVxyXG5cclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVtb3ZlQ29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cdFx0Y29uc3QgYWRkQ29sbGVjdGlvbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29tcGlsYXRpb25FbnRyeSBvZiBjb21waWxhdGlvbkVudHJpZXMpIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5OiBJdGVtRW50cnkgPSBjb21waWxhdGlvbkVudHJ5Lml0ZW07XHJcblxyXG5cdFx0XHR0aGlzLmFkZENvbGxlY3Rpb25NYXBFbnRyeShcclxuXHRcdFx0XHRyZW1vdmVDb2xsZWN0aW9uTWFwLFxyXG5cdFx0XHRcdGNvbXBpbGF0aW9uRW50cnkucGFyZW50SWQsXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5pdGVtSWRcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMuYWRkQ29sbGVjdGlvbk1hcEVudHJ5KFxyXG5cdFx0XHRcdGFkZENvbGxlY3Rpb25NYXAsXHJcblx0XHRcdFx0KDxFbnRyeVBhcmVudD4gaXRlbUVudHJ5LnBhcmVudCkuaXRlbUlkLFxyXG5cdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmZvckVhY2hDb2xsZWN0aW9uKHJlbW92ZUNvbGxlY3Rpb25NYXAsICdyZW1vdmVJdGVtcycpO1xyXG5cdFx0dGhpcy5mb3JFYWNoQ29sbGVjdGlvbihhZGRDb2xsZWN0aW9uTWFwLCAnYWRkSXRlbXMnKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYWRkQ29sbGVjdGlvbk1hcEVudHJ5IChjb2xsZWN0aW9uTWFwLCBwYXJlbnRJZCwgaXRlbUVudHJ5LCB2YWx1ZSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbk1hcEVudHJ5ID0gY3JlYXRlUGF0aChcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCxcclxuXHRcdFx0W2l0ZW1FbnRyeS5wYXJlbnQuaXRlbVR5cGUsIHBhcmVudElkLCBpdGVtRW50cnkuaXRlbVR5cGVdLFxyXG5cdFx0XHRbe30sIHt9LCBbXV1cclxuXHRcdCk7XHJcblxyXG5cdFx0Y29sbGVjdGlvbk1hcEVudHJ5LnB1c2godmFsdWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JFYWNoQ29sbGVjdGlvbiAoY29sbGVjdGlvbk1hcCwgbWV0aG9kKSB7XHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV0pIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbGxlY3Rpb25NYXBbcGFyZW50VHlwZV1bcGFyZW50SWRdKSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnlbbWV0aG9kXShcclxuXHRcdFx0XHRcdFx0Y29sbGVjdGlvbk1hcFtwYXJlbnRUeXBlXVtwYXJlbnRJZF1baXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0XHR0cnVlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gbm90ZTogd2l0aCB0aGUgbmV3IGl0ZW0gc3RydWN0dXJlLCAqYWxsKiBsb2NhbCBpdGVtcyBhcmUgaW4gdGhlIHNpbmdsZSBpdGVtIGNhY2hlXHJcblx0cHJpdmF0ZSBvbkl0ZW1zQ3JlYXRlZCAoY29udmVyc2lvbk1hcCwgc2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLCBjb2xsZWN0aW9uczogQ29sbGVjdGlvbkVudHJ5W10pIHtcclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhjb252ZXJzaW9uTWFwKSlcclxuXHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbkVudHJ5IG9mIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblx0XHRcdGNvbnN0IHVwZGF0ZWRDb2x1bW5zOiB7W2NvbHVtbklkOiBzdHJpbmddOiBDb2x1bW5JbmZvfSA9XHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmdldFVwZGF0ZWRJdGVtQ29sdW1ucyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdHBhcmVudC5pdGVtSWQgPSBuZXdQYXJlbnRJZDtcclxuXHRcdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5xdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShjb2xsZWN0aW9uRW50cnkub3B0aW9ucyk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlci5lbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCFoYXNQcm9wZXJ0aWVzKHVwZGF0ZWRDb2x1bW5zKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh1cGRhdGVkQ29sdW1ucy5pZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV0pO1xyXG5cclxuXHRcdFx0Ly8gd2hlbiB1cGRhdGluZyBhbiBpdGVtIHRvIHJlZmVyIHRvIGEgbmV3bHkgY3JlYXRlZCBpdGVtLCB0aGUgdXBkYXRlZCBpdGVtIHdpbGwgKm5vdCogYmUgYWRkZWQgdG9cclxuXHRcdFx0Ly8gc2luZ2xlIGl0ZW1zIChlLmcuIG1vdmluZyBhIGZ1bmN0aW9uIHRvIGEgbmV3bHkgY3JlYXRlZCBmdW5jdGlvbiBncm91cClcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgY29sbGVjdGlvbkVudHJ5Lml0ZW1zKVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIHNpbmdsZUl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRpdGVtRW50cnkudXBkYXRlSXRlbUZpZWxkcyhjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRjb25zdCBuZXdQYXJlbnRJZCA9IHRoaXMuZ2V0TWFwVmFsdWUocGFyZW50Lml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdFx0aWYgKG5ld1BhcmVudElkICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkID0gbmV3UGFyZW50SWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIHByb3BlciBvcmRlcjogY3JlYXRlIC0gbW92ZSAtIGRlbGV0ZSAtIHVwZGF0ZVxyXG5cdGV4ZWN1dGUgKFxyXG5cdFx0c2luZ2xlSXRlbXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdLFxyXG5cdFx0cGFyYW1ldGVyczogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCA9IHt9LFxyXG5cdFx0YnJlYWt1cEJ5UGFyZW50PzogYm9vbGVhbixcclxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXHJcblx0KSB7XHJcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSB0aGlzLmVycm9ySGFuZGxlcjtcclxuXHRcdGNvbnN0IGNoYW5nZXNDb21waWxhdGlvbiA9IHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeS5jb25zdHJ1Y3Qoc2luZ2xlSXRlbXMsIGNvbGxlY3Rpb25zKTtcclxuXHRcdGNvbnN0IGNvbXBpbGF0aW9uID0gY2hhbmdlc0NvbXBpbGF0aW9uLmNvbXBpbGF0aW9uO1xyXG5cdFx0Y29uc3QgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdGxldCBwcm9taXNlQ2hhaW4gPSB0aGlzLmV4ZWN1dGVDcmVhdGVSZXF1ZXN0cyhcclxuXHRcdFx0Y2hhbmdlc0NvbXBpbGF0aW9uLFxyXG5cdFx0XHRwYXJhbWV0ZXJzLFxyXG5cdFx0XHRjb252ZXJzaW9uTWFwLFxyXG5cdFx0XHRicmVha3VwQnlQYXJlbnQsXHJcblx0XHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFja1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlTW92ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLm1vdmUsIGNvbnZlcnNpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0dGhpcy5vbkl0ZW1zQ3JlYXRlZChjb252ZXJzaW9uTWFwLCBzaW5nbGVJdGVtcywgY29sbGVjdGlvbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNEb2N1bWVudFVwZGF0ZShjb21waWxhdGlvbikpIHtcclxuXHRcdFx0cHJvbWlzZUNoYWluID0gcHJvbWlzZUNoYWluLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCkudGhlbihcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wcmlvcml0aXplVXBkYXRlUmVxdWVzdHMoY29tcGlsYXRpb24udXBkYXRlLCBwYXJhbWV0ZXJzKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHByb21pc2VDaGFpbiA9IHByb21pc2VDaGFpbi50aGVuKFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnByaW9yaXRpemVVcGRhdGVSZXF1ZXN0cyhjb21waWxhdGlvbi51cGRhdGUsIHBhcmFtZXRlcnMpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHQpLnRoZW4oXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZURlbGV0ZVJlcXVlc3RzKGNvbXBpbGF0aW9uLmRlbGV0ZSk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHByb21pc2VDaGFpbi50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnNpb25NYXA7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaFJlc3VsdCwgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5lbnVtIENPTlNUQU5UUyB7XHJcblx0TUFZQkUgPSAnbWF5YmUnXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ2FjaGUge1xyXG5cdGVudHJpZXM6IHtcclxuXHRcdFtpdGVtVHlwZTogc3RyaW5nXToge1xyXG5cdFx0XHRbY29sbGVjdGlvbkVudHJ5SWQ6IG51bWJlcl06IENvbGxlY3Rpb25FbnRyeVxyXG5cdFx0fVxyXG5cdH0gPSB7fTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBxdWVyeU1hdGNoZXJGYWN0b3J5OiBRdWVyeU1hdGNoZXJGYWN0b3J5XHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29udGFpbnMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBlbnRyaWVzW2NvbGxlY3Rpb25FbnRyeS5pZF0gIT09IHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGVudHJpZXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBlbnRyeUlkIGluIGVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdKSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCBpbiB1c2VcclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRjYWxsYmFjayhlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR0b0FycmF5ICgpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSlcclxuXHRcdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2l0ZW1UeXBlXVtlbnRyeUlkXSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGFkZCAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcztcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbnRyaWVzW2l0ZW1UeXBlXSA9IHt9O1xyXG5cclxuXHRcdHJldHVybiBlbnRyaWVzW2l0ZW1UeXBlXVtjb2xsZWN0aW9uRW50cnkuaWRdID0gY29sbGVjdGlvbkVudHJ5O1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKGNvbGxlY3Rpb25FbnRyeT86IENvbGxlY3Rpb25FbnRyeSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuZW50cmllcyA9IHt9O1xyXG5cclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKGNvbGxlY3Rpb25FbnRyeSkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdW2NvbGxlY3Rpb25FbnRyeS5pZF07XHJcblx0fVxyXG5cclxuXHRnZXRCeUl0ZW1UeXBlIChpdGVtVHlwZTogc3RyaW5nKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHQucHVzaChlbnRyaWVzW2VudHJ5SWRdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0bWF0Y2hQYXJlbnQgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWQpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vID09IHRvIGNvbXBhcmUgaXRlbUlkc1xyXG5cdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdHJldHVybiBwYXJlbnQuaXRlbVR5cGUgPT09IGl0ZW1UeXBlICYmIHBhcmVudC5pdGVtSWQgPT0gaXRlbUlkO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdGhpbmsgb2YgYmV0dGVyIG5hbWVcclxuXHRnZXRCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTogQ29sbGVjdGlvbkVudHJ5IHwgbnVsbCB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChlbnRyaWVzW2VudHJ5SWRdLCBwYXJlbnRUeXBlLCBwYXJlbnRJZCkpXHJcblx0XHRcdFx0cmV0dXJuIGVudHJpZXNbZW50cnlJZF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRSZXNvdXJjZUJ5UGFyZW50IChwYXJlbnRUeXBlLCBwYXJlbnRJZCwgaXRlbVR5cGUpOiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IHRoaXMuZ2V0QnlQYXJlbnQocGFyZW50VHlwZSwgcGFyZW50SWQsIGl0ZW1UeXBlKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmdldEN1cnJlbnRSZXNvdXJjZSgpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q29sbGVjdGlvbnNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzW2l0ZW1UeXBlXSkge1xyXG5cdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbaXRlbVR5cGVdW2VudHJ5SWRdO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5tYXRjaFBhcmVudChjb2xsZWN0aW9uRW50cnksIHBhcmVudFR5cGUsIHBhcmVudElkKSlcclxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT25seSByZXNvdXJjZXNcclxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge1N0cmluZ3xJbnRlZ2VyfSBpdGVtSWRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBcnJheSBvZiBjb2xsZWN0aW9ucy5cclxuXHQgKi9cclxuXHRnZXRCeUNvbnRhaW5pbmdJdGVtIChpdGVtVHlwZSwgaXRlbUlkKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LmdldEl0ZW1CeUlkKGl0ZW1JZCkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbGxlY3Rpb25zIHRoZSBpdGVtICdiZWxvbmdzJyBpbi5cclxuXHQgKi9cclxuXHRnZXRCeUZpdHRpbmdJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGZpZWxkczogRmllbGRNYXAsIHBhcmVudDogRW50cnlQYXJlbnROdWxsKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbk1hdGNoUmVzdWx0ID0ge2ZpdHRpbmc6IFtdLCBub3RmaXR0aW5nOiBbXSwgbWF5YmU6IFtdfTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZSgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5TWF0Y2hlciA9IHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGZpZWxkcywgcGFyZW50KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBlbnRyaWVzW2VudHJ5SWRdO1xyXG5cdFx0XHRjb25zdCBtYXRjaFJlc3VsdCA9IHF1ZXJ5TWF0Y2hlci5tYXRjaFF1ZXJ5KGNvbGxlY3Rpb25FbnRyeS5xdWVyeS5vYmplY3QpO1xyXG5cclxuXHRcdFx0Ly8gVE9ETzogbWF5YmU/XHJcblx0XHRcdGlmIChtYXRjaFJlc3VsdCA9PT0gdHJ1ZSkgLy8gbWlnaHQgYWxzbyByZXR1cm4gJ21heWJlJ1xyXG5cdFx0XHRcdHJlc3VsdC5maXR0aW5nLnB1c2goY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdFx0ZWxzZSBpZiAobWF0Y2hSZXN1bHQgPT09IENPTlNUQU5UUy5NQVlCRSlcclxuXHRcdFx0XHRyZXN1bHQubWF5YmUucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0cmVzdWx0Lm5vdGZpdHRpbmcucHVzaChjb2xsZWN0aW9uRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNvbnNvbGUudGltZUVuZCgnZ2V0QnlGaXR0aW5nSXRlbScpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRCeVF1ZXJ5IChpdGVtVHlwZSwgcXVlcnkpOiBDb2xsZWN0aW9uRW50cnkgfCBudWxsIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnF1ZXJ5LnN0cmluZyA9PT0gcXVlcnkuc3RyaW5nKVxyXG5cdFx0XHRcdHJldHVybiBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXRCeUtleSAoaXRlbVR5cGUsIGVudHJ5S2V5KSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogQ29sbGVjdGlvbkVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgZW50cnlJZCBpbiBlbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGVudHJpZXNbZW50cnlJZF07XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuZW50cnlLZXkgPT09IGVudHJ5S2V5KVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGNvbGxlY3Rpb25FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlc291cmNlQnlLZXkgKGl0ZW1UeXBlLCByZXNvdXJjZUtleSkge1xyXG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0aWYgKGVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGVudHJ5SWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCByZXNvdXJjZXMgPSBlbnRyaWVzW2VudHJ5SWRdLnJlc291cmNlcztcclxuXHJcblx0XHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKSB7XHJcblx0XHRcdFx0aWYgKHJlc291cmNlLm9wdGlvbnMucmVzb3VyY2VLZXkgPT09IHJlc291cmNlS2V5KVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2gocmVzb3VyY2UpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcblxyXG5pbXBvcnQgeyBRdWVyeVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUXVlcnlQYXJzZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgc2hhbGxvd01lcmdlIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdC8vIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIGNvbHVtbnMgcHJvcGVydHksIGl0IHdpbGwgYmUgcmVwbGFjZWQgaW4gd2hlbiBjb2x1bW5zIGFyZSBleHBhbmRlZFxyXG5cdGNsb25lT3B0aW9ucyAob3B0aW9ucywgcGFyZW50KSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpOyAvLyBkb2VzIGEgc2hhbGxvdyBjb3B5XHJcblxyXG5cdFx0cmVzdWx0LnF1ZXJ5UGFyYW1zID0gdGhpcy5jbG9uZVF1ZXJ5UGFyYW1zKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cdFx0cmVzdWx0LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2xvbmVRdWVyeVBhcmFtcyAocGFyYW1ldGVycykge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcGFyYW1ldGVycykge1xyXG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcclxuXHRcdFx0bGV0IGNsb25lO1xyXG5cclxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG5cdFx0XHRcdGNsb25lID0gdmFsdWUuc2xpY2UoKTsgLy8gd2UncmUgb25seSB1c2luZyBwcmltaXRpdmUgYXJyYXlzXHJcblx0XHRcdGVsc2UgaWYgKG1vbWVudC5pc01vbWVudCh2YWx1ZSkpXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZS5jbG9uZSgpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y2xvbmUgPSB2YWx1ZTtcclxuXHJcblx0XHRcdHJlc3VsdFtrZXldID0gY2xvbmU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y29sdW1uczogW10sXHJcblx0XHRcdFx0cXVlcnk6IG51bGwsXHJcblx0XHRcdFx0cXVlcnlJdGVtVHlwZTogbnVsbCxcclxuXHRcdFx0XHRxdWVyeVBhcmFtczoge30sXHJcblx0XHRcdFx0cGFyZW50OiBudWxsLFxyXG5cdFx0XHRcdGRlZmVyUmVxdWVzdDogZmFsc2UsXHJcblx0XHRcdFx0bGltaXQ6IG51bGwsXHJcblx0XHRcdFx0ZW50cnlLZXk6ICcnXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVRdWVyeSAob3B0aW9ucykge1xyXG5cdFx0Y29uc3QgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XHJcblxyXG5cdFx0bGV0IHF1ZXJ5O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHF1ZXJ5ID0gb3B0aW9ucy5xdWVyeTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zdCBsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiB7aWQ6ICcmcGFyZW50SWQnfX07XHJcblx0XHRcdG9wdGlvbnMucXVlcnlQYXJhbXMucGFyZW50SWQgPSBwYXJlbnQuaXRlbUlkO1xyXG5cclxuXHRcdFx0cXVlcnkgPSBvcHRpb25zLnF1ZXJ5ID09PSBudWxsID9cclxuXHRcdFx0XHRsaW5rZWRUb1F1ZXJ5IDpcclxuXHRcdFx0XHR0aGlzLnF1ZXJ5U2VydmljZS5hZGRBbmRDb25kaXRpb24ob3B0aW9ucy5xdWVyeSwgbGlua2VkVG9RdWVyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeS5jb25zdHJ1Y3QocXVlcnksIG9wdGlvbnMucXVlcnlQYXJhbXMpLnBhcnNlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHtvYmplY3Q6IHBhcnNlZFF1ZXJ5WzBdLCBzdHJpbmc6IHBhcnNlZFF1ZXJ5WzFdfTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSwgYWNjdW11bGF0b3IpOiBJdGVtSWRbXSB7XHJcblx0XHRpZiAoYWNjdW11bGF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0YWNjdW11bGF0b3IgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0YWNjdW11bGF0b3IucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHJcblx0XHRyZXR1cm4gYWNjdW11bGF0b3I7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge0l0ZW1FbnRyeVtdfSBpdGVtRW50cmllc1xyXG5cdCAqIEBwYXJhbSB7KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBib29sZWFufSBjYWxsYmFja1xyXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cclxuXHQgKlxyXG5cdCAqIGZpbHRlciBhbiBhcnJheSBhY2NvcmRpbmcgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBSZXR1cm4gdGhlIGVudHJpZXMgdGhhdCBmYWlsZWQgdGhlIGNvbmRpdGlvblxyXG5cdCAqIFJlcGxhY2UgdGhlIGdpdmVuIGFycmF5IHdpdGggdGhlIGVudHJpZXMgdGhhdCBkaWRuJ3QgZmFpbCB0aGUgY29uZGl0aW9uLlxyXG5cdCAqL1xyXG5cdGZpbHRlckFycmF5IChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGNvbnN0IGZpbHRlcmVkRW50cmllczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRcdGNvbnN0IHJlbW92ZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHQoY2FsbGJhY2soaXRlbUVudHJ5KSA/IGZpbHRlcmVkRW50cmllcyA6IHJlbW92ZWRFbnRyaWVzKS5wdXNoKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0aWYgKHJlbW92ZWRFbnRyaWVzLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xyXG5cclxuXHRcdGl0ZW1FbnRyaWVzLmxlbmd0aCA9IGZpbHRlcmVkRW50cmllcy5sZW5ndGg7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtRW50cmllcy5sZW5ndGg7IGkrKylcclxuXHRcdFx0aXRlbUVudHJpZXNbaV0gPSBmaWx0ZXJlZEVudHJpZXNbaV07XHJcblxyXG5cdFx0cmV0dXJuIHJlbW92ZWRFbnRyaWVzO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkNhY2hlLFxyXG5cdENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0Q29sbGVjdGlvbk1hdGNoZXIsXHJcblx0Q29sdW1uRXhwYW5zaW9uLFxyXG5cdENvbHVtbkhhbmRsZXIsXHJcblx0Q29sdW1uU2V0LFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0S2V5U2VydmljZSxcclxuXHRRdWVyeVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LCBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LCBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksIENvbHVtblNldEZhY3RvcnksIFF1ZXJ5UGFyc2VyRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG5cdENvbGxlY3Rpb25FbnRyeUJhdGNoU3RhdHVzTWFwLCBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgRW50cnlQYXJlbnQsIEVudHJ5U3RhdHVzLCBJdGVtRW50cnlQYXJlbnRJZE1hcCwgSXRlbUlkLFxyXG5cdEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCwgSXRlbVR5cGVcclxufSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBoYXNQcm9wZXJ0aWVzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSGFuZGxlciB7XHJcblx0ZW50cmllczogQ29sbGVjdGlvbkNhY2hlO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sdW1uSGFuZGxlcjogQ29sdW1uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5RmFjdG9yeTogQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlRmFjdG9yeTogQ29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcXVlcnlQYXJzZXJGYWN0b3J5OiBRdWVyeVBhcnNlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHRcdHRoaXMuZW50cmllcyA9IHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHR9XHJcblxyXG5cdGdldFByb21pc2VzIChzdGF0dXNSZXNvdXJjZTogQ29sbGVjdGlvbkVudHJ5QmF0Y2hTdGF0dXNNYXApIHtcclxuXHRcdGNvbnN0IHByb21pc2VkID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlBST01JU0VEXTtcclxuXHRcdGNvbnN0IHByb21pc2VkRXhwYW5kID0gc3RhdHVzUmVzb3VyY2VbRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwcm9taXNlZClcclxuXHRcdFx0cmVzdWx0LnB1c2gocHJvbWlzZWRbcGFyZW50SWRdKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHByb21pc2VkRXhwYW5kKVxyXG5cdFx0XHRyZXN1bHQucHVzaChwcm9taXNlZEV4cGFuZFtwYXJlbnRJZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZXF1ZXN0SWRzIChzdGF0dXNSZXNvdXJjZSkge1xyXG5cdFx0Y29uc3QgcmVzb2x2ZSA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5SRVNPTFZFXTtcclxuXHRcdGNvbnN0IGV4cGFuZCA9IHN0YXR1c1Jlc291cmNlW0VOVFJZX1NUQVRVUy5FWFBBTkRdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcmVzb2x2ZSlcclxuXHRcdFx0cmVzdWx0LnB1c2gocmVzb2x2ZVtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBleHBhbmQpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGV4cGFuZFtwYXJlbnRJZF0ucGFyZW50Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0ICovXHJcblx0cmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMgKGNvbGxlY3Rpb25NYXAsIHVwZGF0ZUluaXRpYWw/KSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uRW50cnkgPSBlbnRyeS5jb2xsZWN0aW9uO1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhlbnRyeS5ub3RmaXR0aW5nLCBudWxsLCB0cnVlKTtcclxuXHRcdFx0Y29sbGVjdGlvbi5hZGRJdGVtcyhlbnRyeS5maXR0aW5nLCBudWxsLCB0cnVlKTsgLy8gZG9lc24ndCBkbyBhbnl0aGluZyB3aXRoIGluaXRpYWxcclxuXHJcblx0XHRcdGlmIChlbnRyeS5tYXliZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyICgpOiBDb2xsZWN0aW9uTWF0Y2hlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFt0aGlzLmVudHJpZXNdLCB0cnVlLCB0cnVlKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0ICovXHJcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChjb2xsZWN0aW9uTWFwLCB1cGRhdGVJbml0aWFsPywgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKSB7XHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGZpdHRpbmcgPSBtYXBFbnRyeS5maXR0aW5nO1xyXG5cdFx0XHRjb25zdCBtYXliZSA9IG1hcEVudHJ5Lm1heWJlO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGlkQXJyYXk6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGZpdHRpbmdJdGVtIG9mIGZpdHRpbmcpXHJcblx0XHRcdFx0aWRBcnJheS5wdXNoKGZpdHRpbmdJdGVtLml0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IG1heWJlSXRlbSBvZiBtYXliZSlcclxuXHRcdFx0XHRpZEFycmF5LnB1c2gobWF5YmVJdGVtKTtcclxuXHJcblx0XHRcdGlmIChyZXN1bHRSZXNvdXJjZSAhPT0gbnVsbCAmJiBjb2xsZWN0aW9uRW50cnkgPT09IHJlc3VsdFJlc291cmNlLmVudHJ5KVxyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhpZEFycmF5LCByZXN1bHRSZXNvdXJjZSwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHRcdGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgbnVsbCwgdXBkYXRlSW5pdGlhbCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IG1heWJlLCBib29sZWFuIGluc3RlYWQgb2YgbWVzc2FnZVxyXG5cdC8qKlxyXG5cdCAqIEBkZXByZWNhdGVkLCB1c2UgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XHJcblx0ICovXHJcblx0YWRkVG9Db2xsZWN0aW9ucyAoY29sbGVjdGlvbk1hcCwgdXBkYXRlSW5pdGlhbDogYm9vbGVhbiwgcmVzdWx0UmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwgPSBudWxsKTogSXRlbVJlc291cmNlW10ge1xyXG5cdFx0bGV0IHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IG1hcEVudHJ5ID0gY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkuYWRkSXRlbXMobWFwRW50cnkuZml0dGluZywgcmVzdWx0UmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmFkZEl0ZW1zKG1hcEVudHJ5LmZpdHRpbmcsIG51bGwsIHVwZGF0ZUluaXRpYWwpO1xyXG5cclxuXHRcdFx0aWYgKHVwZGF0ZUluaXRpYWwgJiYgbWFwRW50cnkubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB1cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmQgKHBhcmVudFR5cGU6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLCBuZXdDb2x1bW5zKTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VbXT4ge1xyXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGNvbGxlY3Rpb25zKTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0bGV0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIFRPRE86IGZpbHRlciBsb2NhbCBpdGVtcz9cclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IGNvbGxlY3Rpb25zW3BhcmVudElkXS5lbnRyeTtcclxuXHJcblx0XHRcdHBhcmVudElkQXJyYXkucHVzaCgoPEVudHJ5UGFyZW50PiBjb2xsZWN0aW9uRW50cnkucGFyZW50KS5pdGVtSWQpO1xyXG5cclxuXHRcdFx0aXRlbUVudHJpZXMgPSBpdGVtRW50cmllcy5jb25jYXQoY29sbGVjdGlvbkVudHJ5Lml0ZW1zKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0cGFyZW50SWRBcnJheSxcclxuXHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdG51bGwsXHJcblx0XHRcdG5ld0NvbHVtbnNcclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NFeHBhbnNpb24oXHJcblx0XHRcdFx0XHRuZXdDb2x1bW5zLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KVxyXG5cdFx0XHRcdFx0Y29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5LmV4cGFuZENvbHVtbnMoY29sdW1uRXhwYW5zaW9uKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGNvbGxlY3Rpb25zO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHRlbmQgKFxyXG5cdFx0cGFyZW50VHlwZTogc3RyaW5nLFxyXG5cdFx0aXRlbVR5cGU6IHN0cmluZyxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRxdWVyeUNhbGxiYWNrLFxyXG5cdFx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25SZXNvdXJjZVtdLFxyXG5cdFx0cmV0dXJuQWxsSXRlbXMgPSBmYWxzZVxyXG5cdCk6IFByb21pc2U8SXRlbVJlc291cmNlSXRlbUlkTWFwPiB7XHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMoY29sbGVjdGlvbnMpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHt9KTtcclxuXHJcblx0XHRjb25zdCBwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0bGV0IGl0ZW1JZEFycmF5OiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdG9wdGlvbnMucXVlcnlQYXJhbXMgPSBxdWVyeUNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvbnNbcGFyZW50SWRdLmVudHJ5O1xyXG5cclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spO1xyXG5cdFx0XHRwYXJlbnRJZEFycmF5LnB1c2goKDxFbnRyeVBhcmVudD4gY29sbGVjdGlvbkVudHJ5LnBhcmVudCkuaXRlbUlkKTtcclxuXHJcblx0XHRcdGl0ZW1JZEFycmF5ID0gaXRlbUlkQXJyYXkuY29uY2F0KGNvbGxlY3Rpb25FbnRyeS5nZXRJZEFycmF5KCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5yZXF1ZXN0TGlua0l0ZW1zKFxyXG5cdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkQW5kQ29uZGl0aW9uKFxyXG5cdFx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKS5vYmplY3QsXHJcblx0XHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4oaXRlbUlkQXJyYXkpXHJcblx0XHRcdCksXHJcblx0XHRcdG9wdGlvbnMuY29sdW1uc1xyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnByb2Nlc3NMaW5rUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHBhcmVudFR5cGUsXHJcblx0XHRcdFx0XHRwYXJlbnRJZEFycmF5LFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGl0ZW1FbnRyeVJlc291cmNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2UgPSBjb2xsZWN0aW9uc1twYXJlbnRJZF07XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5LmFkZEl0ZW1zKCAvLyBzaG91bGQgZ28gZmlyc3RcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJ5UmVzb3VyY2UuaXRlbXNbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHJldHVybkFsbEl0ZW1zID8gY29sbGVjdGlvblJlc291cmNlLml0ZW1zIDogaXRlbVJlc291cmNlcztcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGJhdGNoRmV0Y2ggKFxyXG5cdFx0cGFyZW50VHlwZTogSXRlbVR5cGUsXHJcblx0XHRwYXJlbnRJZEFycmF5OiBJdGVtSWRbXSxcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdGxvY2FsQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGUsXHJcblx0XHRkZWZlcnJlZENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlXHJcblx0KTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcD4ge1xyXG5cdFx0Y29uc3QgcmVzb3VyY2UgPSB0aGlzLmNyZWF0ZVN0YXR1c1Jlc291cmNlKHBhcmVudFR5cGUsIHBhcmVudElkQXJyYXksIGl0ZW1UeXBlLCBvcHRpb25zLCBsb2NhbENvbGxlY3Rpb25DYWNoZSwgZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGUpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLmFsbCh0aGlzLmdldFByb21pc2VzKHJlc291cmNlKSkudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLmdldFJlcXVlc3RJZHMocmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdExpbmtJdGVtcyhcclxuXHRcdFx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRcdG9wdGlvbnMucXVlcnkgPT09IG51bGwgP1xyXG5cdFx0XHRcdFx0XHRcdG51bGwgOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucXVlcnlQYXJzZXJGYWN0b3J5LmNvbnN0cnVjdChvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLnF1ZXJ5UGFyYW1zKS5wYXJzZSgpWzBdLFxyXG5cdFx0XHRcdFx0XHRvcHRpb25zLmNvbHVtbnNcclxuXHRcdFx0XHRcdCkudGhlbihcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB0aGlzLml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzTGlua1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRcdFx0XHRwYXJlbnRUeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVxdWVzdElkcyxcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9uc1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KS50aGVuKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShyZXNvdXJjZSwgaXRlbUVudHJ5UmVzb3VyY2UsIGl0ZW1DYWNoZSk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChoYXNQcm9wZXJ0aWVzKHJlc291cmNlW0VOVFJZX1NUQVRVUy5MT0NBTF0pKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCBvcHRpb25zLmNvbHVtbnMpLnRoZW4oXHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1ucyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlQmF0Y2hSZXNwb25zZShcclxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zOiB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMuY29sdW1ucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1DYWNoZVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiByZXNvdXJjZVtFTlRSWV9TVEFUVVMuQ0FDSEVEXTtcclxuXHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVN0YXR1c1Jlc291cmNlIChcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0bG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpOiBDb2xsZWN0aW9uRW50cnlCYXRjaFN0YXR1c01hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHN0YXR1c0lkIGluIEVOVFJZX1NUQVRVUylcclxuXHRcdFx0cmVzdWx0W0VOVFJZX1NUQVRVU1tzdGF0dXNJZF1dID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTsgLy8gdXNlIHByb2Nlc3NFbnRyeU9wdGlvbnMgdG8gY2xvbmUgVE9ETzogdXNlIGNsb25lT3B0aW9uc1xyXG5cclxuXHRcdFx0bGV0IHN0YXR1c1Jlc291cmNlO1xyXG5cclxuXHRcdFx0ZW50cnlPcHRpb25zLnBhcmVudCA9IHtpdGVtVHlwZTogcGFyZW50VHlwZSwgaXRlbUlkOiBwYXJlbnRJZH07XHJcblxyXG5cdFx0XHRzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucywgbG9jYWxDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkQ29sbGVjdGlvbkNhY2hlKTtcclxuXHJcblx0XHRcdHJlc3VsdFtzdGF0dXNSZXNvdXJjZS5zdGF0dXNdW3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRmZXRjaCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRsb2NhbENvbGxlY3Rpb25DYWNoZTogQ29sbGVjdGlvbkNhY2hlLFxyXG5cdFx0ZGVmZXJyZWRDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZVxyXG5cdCk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBzdGF0dXNSZXNvdXJjZSA9IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIG9wdGlvbnMsIGxvY2FsQ29sbGVjdGlvbkNhY2hlLCBkZWZlcnJlZENvbGxlY3Rpb25DYWNoZSk7XHJcblx0XHRjb25zdCBlbnRyeSA9IHN0YXR1c1Jlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdHN3aXRjaCAoc3RhdHVzUmVzb3VyY2Uuc3RhdHVzKSB7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkNBQ0hFRDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKGVudHJ5KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LnByb21pc2U7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLkVYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XHJcblx0XHRcdGNhc2UgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDpcclxuXHRcdFx0XHRyZXR1cm4gZW50cnkucHJvbWlzZS50aGVuKFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZW50cnkuZXhwYW5kKG9wdGlvbnMuY29sdW1ucyk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUkVTT0xWRTpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlUmVtb3RlKGVudHJ5LCBpdGVtQ2FjaGUpO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5MT0NBTDpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoZW50cnksIGl0ZW1DYWNoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRDYWNoZWRFbnRyeVN0YXR1cyAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpOiBFTlRSWV9TVEFUVVMge1xyXG5cdFx0Y29uc3QgaXNDb2x1bW5TdXBlcnNldCA9IGNvbGxlY3Rpb25FbnRyeS5jb2x1bW5zLmlzU3VwZXJzZXRPZihvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmICghY29sbGVjdGlvbkVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0cmV0dXJuIGlzQ29sdW1uU3VwZXJzZXQgPyBFTlRSWV9TVEFUVVMuQ0FDSEVEIDogRU5UUllfU1RBVFVTLkVYUEFORDtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5LnJlbG9hZFF1ZXVlZCkge1xyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkucmVsb2FkUXVldWVkID0gZmFsc2U7XHJcblxyXG5cdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LmlzTG9jYWwoKSA/IEVOVFJZX1NUQVRVUy5MT0NBTCA6IEVOVFJZX1NUQVRVUy5SRVNPTFZFO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpc0NvbHVtblN1cGVyc2V0ID8gRU5UUllfU1RBVFVTLlBST01JU0VEIDogRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcclxuXHR9XHJcblxyXG5cdGdldERlZmVycmVkRW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcyk6IHtlbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkOiBib29sZWFufSB7XHJcblx0XHRsZXQgY29sbGVjdGlvbkVudHJ5O1xyXG5cclxuXHRcdGlmICghb3B0aW9ucy5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgb3B0aW9ucyk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSBkZWZlcnJlZEVudHJpZXMuZ2V0QnlRdWVyeShpdGVtVHlwZSwgcXVlcnkpO1xyXG5cclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkgIT09IG51bGwpIHtcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4cGFuZFJlcXVlc3RDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7XHJcblxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIGlzRGVmZXJyZWQ6IGZhbHNlfTtcclxuXHRcdH1cclxuXHJcblx0XHRjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCBvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4ge2VudHJ5OiBkZWZlcnJlZEVudHJpZXMuYWRkKGNvbGxlY3Rpb25FbnRyeSksIGlzRGVmZXJyZWQ6IHRydWV9O1xyXG5cdH1cclxuXHJcblx0Z2V0RW50cnlTdGF0dXMgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgb3B0aW9ucywgbG9jYWxFbnRyaWVzOiBDb2xsZWN0aW9uQ2FjaGUsIGRlZmVycmVkRW50cmllczogQ29sbGVjdGlvbkNhY2hlKTogRW50cnlTdGF0dXM8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBxdWVyeSA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5jcmVhdGVRdWVyeShvcHRpb25zKTtcclxuXHRcdGxldCBjb2xsZWN0aW9uRW50cnk7XHJcblx0XHRsZXQgaXNEZWZlcnJlZDtcclxuXHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKG9wdGlvbnMpKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSA9IGxvY2FsRW50cmllcy5nZXRCeVF1ZXJ5KGl0ZW1UeXBlLCBxdWVyeSk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvbkVudHJ5ICE9PSBudWxsKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGNvbGxlY3Rpb25FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xyXG5cclxuXHRcdFx0aWYgKGlzRGVmZXJyZWQpXHJcblx0XHRcdFx0cmV0dXJuIHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5QUk9NSVNFRH07XHJcblxyXG5cdFx0XHQvLyBuZXcgbG9jYWwgZW50cnkgY3JlYXRlZCwgc2hvdWxkIGJlIGFkZGVkIHRvIGxvY2FsIGNhY2hlIG9ubHlcclxuXHRcdFx0cmV0dXJuIHtlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldEJ5UXVlcnkoaXRlbVR5cGUsIHF1ZXJ5KTtcclxuXHJcblx0XHQvLyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBpbiBnbG9iYWwgY2FjaGUsIGFkZCB0byBsb2NhbCBjYWNoZVxyXG5cdFx0aWYgKGNvbGxlY3Rpb25FbnRyeSAhPT0gbnVsbClcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRlbnRyeTogbG9jYWxFbnRyaWVzLmFkZChjb2xsZWN0aW9uRW50cnkpLFxyXG5cdFx0XHRcdHN0YXR1czogdGhpcy5nZXRDYWNoZWRFbnRyeVN0YXR1cyhjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0KHtlbnRyeTogY29sbGVjdGlvbkVudHJ5LCBpc0RlZmVycmVkfSA9IHRoaXMuZ2V0RGVmZXJyZWRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgb3B0aW9ucywgcXVlcnksIGRlZmVycmVkRW50cmllcykpO1xyXG5cclxuXHRcdGlmIChpc0RlZmVycmVkKVxyXG5cdFx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlBST01JU0VEfTtcclxuXHJcblx0XHQvLyBuZXcgZ2xvYmFsIGVudHJ5IGNyZWF0ZWQsIGFkZCB0byBib3RoIGxvY2FsIGFuZCBnbG9iYWwgY2FjaGVcclxuXHRcdGxvY2FsRW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdHRoaXMuZW50cmllcy5hZGQoY29sbGVjdGlvbkVudHJ5KTtcclxuXHJcblx0XHRyZXR1cm4ge2VudHJ5OiBjb2xsZWN0aW9uRW50cnksIHN0YXR1czogRU5UUllfU1RBVFVTLlJFU09MVkV9O1xyXG5cdH1cclxuXHJcblx0aGFuZGxlQmF0Y2hSZXNwb25zZSAoXHJcblx0XHRzdGF0dXNSZXNvdXJjZSxcclxuXHRcdGl0ZW1FbnRyeUNvbXBvdW5kOiB7XHJcblx0XHRcdGNvbHVtbnM6IENvbHVtblNldCxcclxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uLFxyXG5cdFx0XHRpdGVtcz86IEl0ZW1FbnRyeVBhcmVudElkTWFwXHJcblx0XHR9LFxyXG5cdFx0aXRlbUNhY2hlOiBJdGVtQ2FjaGVcclxuXHQpOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmNhY2hlZClcclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IHN0YXR1c1Jlc291cmNlLmNhY2hlZFtwYXJlbnRJZF07XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlKSB7XHJcblx0XHRcdHJlc3VsdFtwYXJlbnRJZF0gPSBzdGF0dXNSZXNvdXJjZS5yZXNvbHZlW3BhcmVudElkXS5yZXNvbHZlKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGl0ZW1zOiAoPEl0ZW1FbnRyeVBhcmVudElkTWFwPiBpdGVtRW50cnlDb21wb3VuZC5pdGVtcylbcGFyZW50SWRdLFxyXG5cdFx0XHRcdFx0Y29sdW1uczogaXRlbUVudHJ5Q29tcG91bmQuY29sdW1uc1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmV4cGFuZCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSA9IHN0YXR1c1Jlc291cmNlLmV4cGFuZFtwYXJlbnRJZF07XHJcblxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuZXhwYW5kQ29sdW1ucyg8Q29sdW1uRXhwYW5zaW9uPiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0cmVzdWx0W3BhcmVudElkXSA9IGNvbGxlY3Rpb25FbnRyeTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIHN0YXR1c1Jlc291cmNlLmxvY2FsKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5ID0gc3RhdHVzUmVzb3VyY2UubG9jYWxbcGFyZW50SWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSA8RW50cnlQYXJlbnQ+IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0aXRlbXM6IGl0ZW1DYWNoZS5nZXRCeVBhcmVudChcclxuXHRcdFx0XHRcdFx0cGFyZW50Lml0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQuaXRlbUlkLFxyXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVcclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHRjb2x1bW5zOiBpdGVtRW50cnlDb21wb3VuZC5jb2x1bW5zXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlTG9jYWwgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBpdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IFByb21pc2U8Q29sbGVjdGlvbkVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnMuY29sdW1ucztcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVyLmZldGNoKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykudGhlbihcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtQ2FjaGUuZ2V0QnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSxcclxuXHRcdFx0XHRcdFx0Y29sdW1uczogdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucywgZmFsc2UpXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVJlbW90ZSAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksIGl0ZW1DYWNoZTogSXRlbUNhY2hlKTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGxldCBjb2x1bW5TZXQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyhjb2xsZWN0aW9uRW50cnkpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb2x1bW5TZXQgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbVR5cGUsXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5jb2x1bW5zLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UsXHJcblx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cnkucGFyZW50LFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdGl0ZW1FbnRyaWVzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gY29sbGVjdGlvbkVudHJ5LnJlc29sdmUoXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGl0ZW1zOiBpdGVtRW50cmllcy5jb25jYXQoaXRlbUNhY2hlLmdldExvY2FsQnlRdWVyeShpdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5LnF1ZXJ5KSksXHJcblx0XHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldFxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGlzTG9jYWwgKG9wdGlvbnMpIHtcclxuXHRcdGNvbnN0IHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgaWRlbnRpdHksIEl0ZW1JZCB9IGZyb20gJy4uLyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzLyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbk1hdGNoZXIge1xyXG5cdG1hcDoge1xyXG5cdFx0W2NvbGxlY3Rpb25FbnRyeUlkOiBudW1iZXJdOiB7XHJcblx0XHRcdGNvbGxlY3Rpb246IENvbGxlY3Rpb25FbnRyeVxyXG5cdFx0XHRtYXRjaGVzOiB7XHJcblx0XHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogeyBpdGVtOiBJdGVtRW50cnksIGlzTWF0Y2g6IGJvb2xlYW4gfVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLFxyXG5cdFx0cHJpdmF0ZSB1cGRhdGVJbml0aWFsOiBib29sZWFuLFxyXG5cdFx0cHJpdmF0ZSBjYWxsT25BY3RpdmF0ZTogYm9vbGVhblxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBxdWVyeU1hdGNoZXIgPSB0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0aXRlbUVudHJ5LnBhcmVudFxyXG5cdFx0KTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25DYWNoZSBvZiB0aGlzLmNvbGxlY3Rpb25DYWNoZXMpIHtcclxuXHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBjb2xsZWN0aW9uQ2FjaGUuZ2V0QnlJdGVtVHlwZShpdGVtRW50cnkuaXRlbVR5cGUpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uRW50cnkgIG9mIGNvbGxlY3Rpb25FbnRyaWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5SWQgPSBjb2xsZWN0aW9uRW50cnkuaWQ7XHJcblx0XHRcdFx0bGV0IG1hdGNoZXM7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm1hcFtjb2xsZWN0aW9uRW50cnlJZF0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdHRoaXMubWFwW2NvbGxlY3Rpb25FbnRyeUlkXSA9IHsgY29sbGVjdGlvbjogY29sbGVjdGlvbkVudHJ5LCBtYXRjaGVzOiB7fSB9O1xyXG5cclxuXHRcdFx0XHRtYXRjaGVzID0gdGhpcy5tYXBbY29sbGVjdGlvbkVudHJ5SWRdLm1hdGNoZXM7XHJcblxyXG5cdFx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRtYXRjaGVzW2l0ZW1JZF0gPSB7XHJcblx0XHRcdFx0XHRpdGVtOiBpdGVtRW50cnksXHJcblx0XHRcdFx0XHRpc01hdGNoOiBxdWVyeU1hdGNoZXIubWF0Y2hRdWVyeShjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0KVxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGdldENvbGxlY3Rpb25zV2l0aEZpdHRpbmdJdGVtcyAoKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IENvbGxlY3Rpb25FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuaGFzRml0dGluZ0l0ZW1zKG1hcEVudHJ5Lm1hdGNoZXMpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKG1hcEVudHJ5LmNvbGxlY3Rpb24pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRhZGRUb0NvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBncm91cGVkSXRlbUVudHJpZXMgPSB0aGlzLmdyb3VwSXRlbUVudHJpZXMobWFwRW50cnkubWF0Y2hlcyk7XHJcblx0XHRcdGNvbnN0IGZpdHRpbmdJdGVtRW50cmllcyA9IGdyb3VwZWRJdGVtRW50cmllcy5maXR0aW5nO1xyXG5cclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25FbnRyeS5pc0RlZmVycmVkKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgIT09IG51bGwgJiYgY29sbGVjdGlvbkVudHJ5ID09PSByZXN1bHRSZXNvdXJjZS5lbnRyeSkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcclxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcclxuXHRcdFx0XHRcdHJlc3VsdFJlc291cmNlLFxyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVJbml0aWFsLFxyXG5cdFx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHRcdHRoaXMuY2FsbE9uQWN0aXZhdGVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhcclxuXHRcdFx0XHRcdGZpdHRpbmdJdGVtRW50cmllcyxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dGhpcy5jYWxsT25BY3RpdmF0ZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLnVwZGF0ZUluaXRpYWwgJiYgZ3JvdXBlZEl0ZW1FbnRyaWVzLm1heWJlLmxlbmd0aCA+IDApXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LmV4dGVuZChpZGVudGl0eSwgbnVsbCwgdHJ1ZSwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlRnJvbUNvbGxlY3Rpb25zIChyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwpIHtcclxuXHRcdGxldCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uSWQgaW4gdGhpcy5tYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSB0aGlzLm1hcFtjb2xsZWN0aW9uSWRdO1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBtYXBFbnRyeS5jb2xsZWN0aW9uO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nSXRlbUlkcyA9IHRoaXMuZ3JvdXBJdGVtSWRzKG1hcEVudHJ5Lm1hdGNoZXMpLmZpdHRpbmc7XHJcblxyXG5cdFx0XHRpZiAocmVzdWx0UmVzb3VyY2UgPT09IG51bGwgfHwgY29sbGVjdGlvbkVudHJ5ICE9PSByZXN1bHRSZXNvdXJjZS5lbnRyeSlcclxuXHRcdFx0XHRyZXN1bHQgPSBjb2xsZWN0aW9uRW50cnkucmVtb3ZlSXRlbXMoZml0dGluZ0l0ZW1JZHMsIHJlc3VsdFJlc291cmNlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0XHRlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGZpdHRpbmdJdGVtSWRzLCBudWxsLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVGcm9tQW5kQWRkVG9Db2xsZWN0aW9ucyAoKSB7XHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25JZCBpbiB0aGlzLm1hcCkge1xyXG5cdFx0XHRjb25zdCBtYXBFbnRyeSA9IHRoaXMubWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeSA9IG1hcEVudHJ5LmNvbGxlY3Rpb247XHJcblx0XHRcdGNvbnN0IGdyb3VwZWRJdGVtRW50cmllcyA9IHRoaXMuZ3JvdXBJdGVtRW50cmllcyhtYXBFbnRyeS5tYXRjaGVzKTtcclxuXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5yZW1vdmVJdGVtcyhncm91cGVkSXRlbUVudHJpZXMubm90Rml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdC8vIGRvZXNuJ3QgZG8gYW55dGhpbmcgd2l0aCBpbml0aWFsXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5hZGRJdGVtcyhncm91cGVkSXRlbUVudHJpZXMuZml0dGluZywgbnVsbCwgdGhpcy51cGRhdGVJbml0aWFsKTtcclxuXHJcblx0XHRcdGlmIChncm91cGVkSXRlbUVudHJpZXMubWF5YmUubGVuZ3RoID4gMClcclxuXHRcdFx0XHRjb2xsZWN0aW9uRW50cnkuZXh0ZW5kKGlkZW50aXR5LCBudWxsLCB0cnVlLCB0aGlzLnVwZGF0ZUluaXRpYWwpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBncm91cEl0ZW1FbnRyaWVzIChtYXRjaGVzKSB7XHJcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcclxuXHRcdGNvbnN0IG1heWJlOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIG1hdGNoZXMpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2ggPSBtYXRjaGVzW2l0ZW1JZF07XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IG1hdGNoLml0ZW07XHJcblx0XHRcdGNvbnN0IGlzTWF0Y2ggPSBtYXRjaC5pc01hdGNoO1xyXG5cclxuXHRcdFx0aWYgKGlzTWF0Y2ggPT09IHRydWUpXHJcblx0XHRcdFx0Zml0dGluZy5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdGVsc2UgaWYgKGlzTWF0Y2ggPT09IGZhbHNlKVxyXG5cdFx0XHRcdG5vdEZpdHRpbmcucHVzaChpdGVtRW50cnkuaXRlbUlkKTtcclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHRcdG1heWJlLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4geyBmaXR0aW5nOiBmaXR0aW5nLCBub3RGaXR0aW5nOiBub3RGaXR0aW5nLCBtYXliZTogbWF5YmUgfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ3JvdXBJdGVtSWRzIChtYXRjaGVzKSB7XHJcblx0XHQvLyBhbHNvIGluY2x1ZGVzICdtYXliZSc7XHJcblx0XHRjb25zdCBmaXR0aW5nOiBJdGVtSWRbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgbm90Rml0dGluZzogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoID0gbWF0Y2hlc1tpdGVtSWRdO1xyXG5cclxuXHRcdFx0KG1hdGNoLmlzTWF0Y2ggPT09IGZhbHNlID8gbm90Rml0dGluZyA6IGZpdHRpbmcpLnB1c2gobWF0Y2guaXRlbS5pdGVtSWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7IGZpdHRpbmc6IGZpdHRpbmcsIG5vdEZpdHRpbmc6IG5vdEZpdHRpbmcgfTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFzRml0dGluZ0l0ZW1zIChtYXRjaGVzKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBtYXRjaGVzKSB7XHJcblx0XHRcdGlmIChtYXRjaGVzW2l0ZW1JZF0uaXNNYXRjaCA9PT0gdHJ1ZSlcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi8nO1xyXG5pbXBvcnQgeyBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBzaGFsbG93TWVyZ2UgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Uge1xyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdEl0ZW1zOiBmYWxzZSxcclxuXHRcdFx0XHRlZGl0Q29sbGVjdGlvbjogZmFsc2UsXHJcblx0XHRcdFx0bW9kSW5zdGFudDogZmFsc2UsXHJcblx0XHRcdFx0ZW5hYmxlU2F2ZTogdHJ1ZSxcclxuXHRcdFx0XHRvbkl0ZW1zQ3JlYXRlZDogbm9vcCxcclxuXHRcdFx0XHRvbkNoYW5nZTogbm9vcCwgLy8gbmVlZGVkIGZvciBjb21wYXJpc29uXHJcblx0XHRcdFx0b25BZGQ6IG5vb3AsXHJcblx0XHRcdFx0b25SZW1vdmU6IG5vb3AsXHJcblx0XHRcdFx0b25BZGRJbml0aWFsOiBub29wLFxyXG5cdFx0XHRcdG9uUmVtb3ZlSW5pdGlhbDogbm9vcCxcclxuXHRcdFx0XHRvbkFjdGl2YXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlSXRlbTogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlQ29sbGVjdGlvbjogbm9vcCwgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBpbiBMb2NhbENhY2hlXHJcblx0XHRcdFx0cmVzb3VyY2VLZXk6IG51bGwsIC8vIFRPRE86IHJlbW92ZVxyXG5cdFx0XHRcdGNsZWFyT25UYWJDaGFuZ2U6IHRydWUsXHJcblx0XHRcdFx0Y2xlYXJPblN1YlRhYkNoYW5nZTogdHJ1ZSxcclxuXHRcdFx0XHRjdXN0b206IG51bGxcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1JZFtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZCk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xuaW1wb3J0IHsgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW4sIFJlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbiwgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5DYWNoZSB7XG5cdGNhY2hlOiBSZXNwb25zZUNvbHVtbk1hcCA9IHt9O1xuXHRhbGxDb2x1bW5zOiB7W2l0ZW1UeXBlOiBzdHJpbmddOiBib29sZWFufSA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcblx0KSB7XG5cdH1cblxuXHRzZXRDb2x1bW4gKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVzcG9uc2VDb2x1bW46IFJlc3BvbnNlQ29sdW1uKSB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlO1xuXG5cdFx0aWYgKGNhY2hlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0Y2FjaGVbaXRlbVR5cGVdID0ge307XG5cblx0XHRjb25zdCBlbnRyeSA9IGNhY2hlW2l0ZW1UeXBlXTtcblx0XHRjb25zdCBjb2x1bW5JZCA9IHJlc3BvbnNlQ29sdW1uLmlkO1xuXG5cdFx0aWYgKGVudHJ5W2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0ZW50cnlbY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XG5cblx0XHRyZXR1cm4gZW50cnlbY29sdW1uSWRdO1xuXHR9XG5cblx0c2V0Q29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyxcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwXG5cdCk6IFJlc3BvbnNlQ29sdW1uTWFwIHtcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdGZvciAoY29uc3QgcmVzcG9uc2VUeXBlIGluIHJlc3BvbnNlQ29sdW1ucykge1xuXHRcdFx0Y29uc3QgY29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uc1tyZXNwb25zZVR5cGVdO1xuXG5cdFx0XHRyZXN1bHRbcmVzcG9uc2VUeXBlXSA9IHt9O1xuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXG5cdFx0XHRcdHJlc3VsdFtyZXNwb25zZVR5cGVdW2NvbHVtbklkXSA9IHRoaXMuc2V0Q29sdW1uKHJlc3BvbnNlVHlwZSwgY29sdW1uc1tjb2x1bW5JZF0pO1xuXHRcdH1cblxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSlcblx0XHRcdHRoaXMuYWxsQ29sdW1uc1tpdGVtVHlwZV0gPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJldHJpZXZlIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zXG5cdCk6IHtjYWNoZWQ6IFJlc3BvbnNlQ29sdW1uTWFwLCBtaXNzaW5nOiBSZXF1ZXN0Q29sdW1uc30ge1xuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGFpbnNBbGwoaXRlbVR5cGUpKVxuXHRcdFx0XHRyZXR1cm4ge2NhY2hlZDogdGhpcy5nZXRDb2x1bW5zKGl0ZW1UeXBlKSwgbWlzc2luZzogW119O1xuXG5cdFx0XHRyZXR1cm4ge2NhY2hlZDoge30sIG1pc3Npbmc6IHRydWV9O1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3BvbnNlQWNjdW11bGF0b3IgPSB7fTtcblx0XHRjb25zdCByZXF1ZXN0QWNjdW11bGF0b3IgPSBbXTtcblxuXHRcdHRoaXMucmV0cmlldmVDb2x1bW5zKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblxuXHRcdHJldHVybiB7Y2FjaGVkOiByZXNwb25zZUFjY3VtdWxhdG9yLCBtaXNzaW5nOiByZXF1ZXN0QWNjdW11bGF0b3J9O1xuXHR9XG5cblx0Y29udGFpbnNBbGwgKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmFsbENvbHVtbnNbaXRlbVR5cGVdID09PSB0cnVlO1xuXHR9XG5cblx0Z2V0Q29sdW1ucyAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZTtcblxuXHRcdHJldHVybiB7W2l0ZW1UeXBlXTogY2FjaGVbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyBbXSA6IGNhY2hlW2l0ZW1UeXBlXX07XG5cdH1cblxuXHRwcml2YXRlIHJldHJpZXZlQ29sdW1ucyAoXG5cdFx0aXRlbVR5cGU6IEl0ZW1UeXBlLFxuXHRcdHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cmVxdWVzdEFjY3VtdWxhdG9yOiBSZXF1ZXN0Q29sdW1uW10sXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogdm9pZCB7XG5cdFx0Ly8gYWx3YXlzIHJldHJpZXZlIHRoZSBpZCBjb2x1bW5cblx0XHR0aGlzLnJldHJpZXZlQ29sdW1uKGl0ZW1UeXBlLCAnaWQnLCByZXF1ZXN0QWNjdW11bGF0b3IsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKVxuXHRcdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbihpdGVtVHlwZSwgcmVxdWVzdENvbHVtbiwgcmVxdWVzdEFjY3VtdWxhdG9yLCByZXNwb25zZUFjY3VtdWxhdG9yKTtcblx0fVxuXG5cdHByaXZhdGUgcmV0cmlldmVDb2x1bW4gKFxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcblx0XHRyZXF1ZXN0Q29sdW1uOiBSZXF1ZXN0Q29sdW1uLFxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvcjogUmVzcG9uc2VDb2x1bW5bXSxcblx0XHRyZXNwb25zZUFjY3VtdWxhdG9yOiBSZXNwb25zZUNvbHVtbk1hcFxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtblV0aWwucGFyc2VSZXF1ZXN0Q29sdW1uKHJlcXVlc3RDb2x1bW4pO1xuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gdGhpcy5nZXRDb2x1bW4oaXRlbVR5cGUsIGNvbHVtbi5pZCk7XG5cblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVxdWVzdEFjY3VtdWxhdG9yLnB1c2gocmVxdWVzdENvbHVtbik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHJlc3BvbnNlQWNjdW11bGF0b3JbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXG5cdFx0XHRyZXNwb25zZUFjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IHt9O1xuXG5cdFx0cmVzcG9uc2VBY2N1bXVsYXRvcltpdGVtVHlwZV1bY29sdW1uLmlkXSA9IHJlc3BvbnNlQ29sdW1uO1xuXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXG5cdFx0XHRyZXR1cm47XG5cblx0XHRjb25zdCBtaXNzaW5nRGVyaXZlZCA9IFtdO1xuXG5cdFx0dGhpcy5yZXRyaWV2ZUNvbHVtbnMocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNvbHVtbi5jaGlsZHJlbiwgbWlzc2luZ0Rlcml2ZWQsIHJlc3BvbnNlQWNjdW11bGF0b3IpO1xuXG5cdFx0aWYgKG1pc3NpbmdEZXJpdmVkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdHJlcXVlc3RBY2N1bXVsYXRvci5wdXNoKHtbY29sdW1uLmlkXTogbWlzc2luZ0Rlcml2ZWR9KTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0Q29sdW1uIChpdGVtVHlwZTogSXRlbVR5cGUsIGNvbHVtbklkOiBzdHJpbmcpOiBSZXNwb25zZUNvbHVtbiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlW2l0ZW1UeXBlXTtcblxuXHRcdGlmIChjYWNoZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0cmV0dXJuIGNhY2hlW2NvbHVtbklkXTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sdW1uU2V0LCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbHVtblNldEZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25SZXN1bHQsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uRXhwYW5zaW9uIHtcclxuXHRleHBhbnNpb25NYXA6IHtbY29sdW1uU2V0SWQ6IG51bWJlcl06IENvbHVtbkV4cGFuc2lvblJlc3VsdH0gPSB7fTtcclxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbCxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgcmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0cHVibGljIHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcclxuXHQpIHtcclxuXHRcdGlmIChyZXF1ZXN0Q29sdW1ucyA9PT0gdHJ1ZSkge1xyXG5cdFx0XHQvLyByZXF1ZXN0Q29sdW1ucyBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LCB3aGVuIGl0IGlzIHRydWUgZGVyaXZlZCBjb2x1bW4gaW5mb3JtYXRpb24gd2lsbCBiZSBsb3N0XHJcblx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdKVxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdENvbHVtbnMucHVzaChjb2x1bW5JZCk7XHJcblx0XHR9IGVsc2VcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHJ1biAoY29sdW1uU2V0OiBDb2x1bW5TZXQpOiBDb2x1bW5FeHBhbnNpb25SZXN1bHQgfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbHVtblNldElkID0gY29sdW1uU2V0LmlkO1xyXG5cclxuXHRcdGlmICh0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMuZXhwYW5zaW9uTWFwW2NvbHVtblNldElkXTtcclxuXHJcblx0XHRjb25zdCBpc0NvbHVtblN1YnNldCA9IHRoaXMuY29sdW1uVXRpbC5pc0NvbHVtblN1YnNldChcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0Y29sdW1uU2V0LnJlcXVlc3QsXHJcblx0XHRcdGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWVcclxuXHRcdCk7XHJcblxyXG5cdFx0aWYgKGlzQ29sdW1uU3Vic2V0KVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHR0aGlzLmV4cGFuc2lvbk1hcFtjb2x1bW5TZXRJZF0gPSB0aGlzLmV4cGFuZENvbHVtbkluZm8oY29sdW1uU2V0KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5leHBhbnNpb25NYXBbY29sdW1uU2V0SWRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBleHBhbmRDb2x1bW5JbmZvIChjb2x1bW5TZXQ6IENvbHVtblNldCk6IENvbHVtbkV4cGFuc2lvblJlc3VsdCB7XHJcblx0XHRjb25zdCByZXF1ZXN0TWVyZ2VSZXN1bHQgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhjb2x1bW5TZXQucmVxdWVzdCwgdGhpcy5yZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHRjb25zdCBtZXJnZWRSZXNwb25zZUNvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWxcclxuXHRcdFx0Lm1lcmdlUmVzcG9uc2VDb2x1bW5zKGNvbHVtblNldC5yZXNwb25zZSwgdGhpcy5yZXNwb25zZUNvbHVtbnMpXHJcblx0XHRcdC5tZXJnZWQ7XHJcblxyXG5cdFx0Y29uc3QgbWVyZ2VkID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdE1lcmdlUmVzdWx0Lm1lcmdlZCxcclxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHR0aGlzLml0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0TWVyZ2VSZXN1bHQuZGlmZmVyZW5jZSxcclxuXHRcdFx0bWVyZ2VkUmVzcG9uc2VDb2x1bW5zLCAvLyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gbG9vayB1cCB0aGUgcGFyZW50IG9mIGRlcml2ZWQgY29sdW1uc1xyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0ZmFsc2VcclxuXHRcdCk7XHJcblxyXG5cdFx0bWVyZ2VkLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdENvbHVtbnNUcnVlIHx8IGNvbHVtblNldC5yZXF1ZXN0Q29sdW1uc1RydWU7XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkNhY2hlLCBDb2x1bW5VdGlsIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSwgRXJyb3JIYW5kbGVySW50ZXJmYWNlLCBQcm9taXNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJdGVtVHlwZSwgUmVxdWVzdENvbHVtbnMsIFJlc3BvbnNlQ29sdW1uLCBSZXNwb25zZUNvbHVtbk1hcCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkhhbmRsZXIge1xuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBhcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgY2FjaGU6IENvbHVtbkNhY2hlLFxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxuXHQpIHtcblx0fVxuXG5cdHNldENvbHVtbiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbjogUmVzcG9uc2VDb2x1bW4pOiBSZXNwb25zZUNvbHVtbiB7XG5cdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1uKGl0ZW1UeXBlLCByZXNwb25zZUNvbHVtbik7XG5cdH1cblxuXHRzZXRDb2x1bW5zIChcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxuXHRcdHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXBcblx0KTogUmVzcG9uc2VDb2x1bW5NYXAge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLnNldENvbHVtbnMoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xuXHR9XG5cblx0ZmV0Y2hJdGVtVHlwZVRyYW5zbGF0aW9ucyAoaXRlbVR5cGVzOiBJdGVtVHlwZVtdKTogUHJvbWlzZTx7W2l0ZW1UeXBlOiBzdHJpbmddOiBzdHJpbmd9PiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IHtbaXRlbVR5cGU6IHN0cmluZ106IFByb21pc2U8UmVzcG9uc2VDb2x1bW5NYXA+fSA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBvZiBpdGVtVHlwZXMpXG5cdFx0XHRwcm9taXNlc1tpdGVtVHlwZV0gPSB0aGlzLmZldGNoKGl0ZW1UeXBlLCBbJ2lkJ10pO1xuXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKVxuXHRcdFx0LnRoZW4oXG5cdFx0XHRcdHJlc3BvbnNlID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gcmVzcG9uc2UpXG5cdFx0XHRcdFx0XHRyZXN1bHRbaXRlbVR5cGVdID0gcmVzcG9uc2VbaXRlbVR5cGVdW2l0ZW1UeXBlXS5pZC5uYW1lO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0XHQpO1xuXHR9XG5cblx0cmVxdWVzdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucywgcGFyYW1zID0ge2ZpbHRlcjogZmFsc2V9KTogUHJvbWlzZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1tpdGVtVHlwZV06IGNvbHVtbnN9O1xuXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UuY29sdW1ucyhpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHBhcmFtcykudGhlbihcblx0XHRcdGNvbHVtblJlc291cmNlID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2FjaGUuc2V0Q29sdW1ucyhcblx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRjb2x1bW5zLFxuXHRcdFx0XHRcdGNvbHVtblJlc291cmNlLmZldGNoQ29sdW1uc09iamVjdCgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGZldGNoIChpdGVtVHlwZTogSXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucywgcGFyYW1zPyk6IFByb21pc2U8UmVzcG9uc2VDb2x1bW5NYXA+IHtcblx0XHRjb25zdCBjb2x1bW5SZXNvdXJjZSA9IHRoaXMuY2FjaGUucmV0cmlldmUoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zKTtcblxuXHRcdGlmIChjb2x1bW5SZXNvdXJjZS5taXNzaW5nICE9PSB0cnVlICYmIGNvbHVtblJlc291cmNlLm1pc3NpbmcubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihjb2x1bW5SZXNvdXJjZS5jYWNoZWQpO1xuXG5cdFx0cmV0dXJuIHRoaXMucmVxdWVzdChpdGVtVHlwZSwgY29sdW1uUmVzb3VyY2UubWlzc2luZywgcGFyYW1zKS50aGVuKFxuXHRcdFx0cmVzcG9uc2VDb2x1bW5zID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sdW1uVXRpbC5tZXJnZVJlc3BvbnNlQ29sdW1ucyhcblx0XHRcdFx0XHRyZXNwb25zZUNvbHVtbnMsXG5cdFx0XHRcdFx0Y29sdW1uUmVzb3VyY2UuY2FjaGVkXG5cdFx0XHRcdCkubWVyZ2VkO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRmZXRjaEFsbCAoaXRlbVR5cGU6IEl0ZW1UeXBlKTogUHJvbWlzZTxSZXNwb25zZUNvbHVtbk1hcD4ge1xuXHRcdGlmICh0aGlzLmNhY2hlLmNvbnRhaW5zQWxsKGl0ZW1UeXBlKSlcblx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4odGhpcy5jYWNoZS5nZXRDb2x1bW5zKGl0ZW1UeXBlKSk7XG5cblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0KGl0ZW1UeXBlLCB0cnVlKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uSW5mbyB7XHJcblx0aWQ6IHN0cmluZztcclxuXHRsZXZlbDogbnVtYmVyO1xyXG5cdHBhdGg6IHN0cmluZztcclxuXHR0YWlsUGF0aDogc3RyaW5nO1xyXG5cdGl0ZW1UeXBlOiBzdHJpbmcgPSAnJztcclxuXHRjaGlsZHJlbjogQ29sdW1uSW5mb1tdID0gW107XHJcblx0aXNMZWFmOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKHJlYWRvbmx5IGFwaUNvbHVtbjogYW55LCByZWFkb25seSBwYXJlbnQ6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbCkge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XHJcblxyXG5cdFx0dGhpcy5pZCA9IGNvbHVtbklkO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcclxuXHRcdFx0dGhpcy5sZXZlbCA9IDA7XHJcblx0XHRcdHRoaXMucGF0aCA9IGNvbHVtbklkO1xyXG5cdFx0XHR0aGlzLnRhaWxQYXRoID0gJyc7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMTtcclxuXHRcdFx0dGhpcy5wYXRoID0gcGFyZW50LnBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHRcdHRoaXMudGFpbFBhdGggPSBwYXJlbnQubGV2ZWwgPT09IDAgP1xyXG5cdFx0XHRcdGNvbHVtbklkIDpcclxuXHRcdFx0XHRwYXJlbnQudGFpbFBhdGggKyBDT0xVTU5fU0VQRVJBVE9SICsgY29sdW1uSWQ7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtbkluZm8sIENvbHVtblV0aWwgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mb0ZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQge1JlcXVlc3RDb2x1bW5zLCBSZXNwb25zZUNvbHVtbk1hcH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuY29uc3QgZW1wdHlPYmplY3QgPSB7fTtcclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0IHtcclxuXHRpZCA9ICsrY3VycmVudElkO1xyXG5cclxuXHRyZXF1ZXN0Q29sdW1uc1RydWU6IGJvb2xlYW47XHJcblx0cmVzcG9uc2U6IFJlc3BvbnNlQ29sdW1uTWFwID0gZW1wdHlPYmplY3Q7XHJcblxyXG5cdGxpbms6IENvbHVtbkluZm8gfCBudWxsID0gbnVsbDtcclxuXHRtYWluOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRkZXJpdmVkOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRyb290OiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRsZWFmOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRmb3JtYXR0ZWQ6IHttYWluOiBDb2x1bW5JbmZvW10sIGRlcml2ZWQ6IENvbHVtbkluZm9bXX0gPSB7bWFpbjogW10sIGRlcml2ZWQ6IFtdfTtcclxuXHRmaWx0ZXJlZDogQ29sdW1uSW5mb1tdID0gW107XHJcblx0Y3VzdG9tOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRzZWFyY2hhYmxlOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRpdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHRub3RJdGVtOiBDb2x1bW5JbmZvW10gPSBbXTtcclxuXHJcblx0ZW5hYmxlQ2FjaGluZzogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnksXHJcblx0XHRwdWJsaWMgaXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgcmVxdWVzdDogUmVxdWVzdENvbHVtbnMsXHJcblx0KSB7XHJcblx0XHR0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSA9IHRoaXMucmVxdWVzdCA9PT0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmUgKHJlc3BvbnNlQ29sdW1uczogUmVzcG9uc2VDb2x1bW5NYXAsIGVuYWJsZUNhY2hpbmcgPSB0cnVlLCBpbmNsdWRlSWRDb2x1bW4gPSB0cnVlKTogdGhpcyB7XHJcblx0XHR0aGlzLmVuYWJsZUNhY2hpbmcgPSBlbmFibGVDYWNoaW5nO1xyXG5cclxuXHRcdGlmICh0aGlzLnJlcXVlc3RDb2x1bW5zVHJ1ZSlcclxuXHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2VDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucyk7XHJcblx0XHRlbHNlXHJcblx0XHRcdHRoaXMucHJvY2Vzc1JlcXVlc3RDb2x1bW5zKHJlc3BvbnNlQ29sdW1ucywgaW5jbHVkZUlkQ29sdW1uKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGV4cGFuZFJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0Y29uc3QgbWVyZ2VkUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyh0aGlzLnJlcXVlc3QsIGNvbHVtbnMpLm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLnJlcXVlc3QgPSBtZXJnZWRSZXF1ZXN0Q29sdW1ucztcclxuXHRcdHRoaXMucmVxdWVzdENvbHVtbnNUcnVlID0gbWVyZ2VkUmVxdWVzdENvbHVtbnMgPT09IHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1N1cGVyc2V0T2YgKGNvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb2x1bW5VdGlsLmlzQ29sdW1uU3Vic2V0KGNvbHVtbnMsIHRoaXMucmVxdWVzdCwgdGhpcy5yZXF1ZXN0Q29sdW1uc1RydWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzUmVzcG9uc2VDb2x1bW5zIChyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0dGhpcy5yZXF1ZXN0ID0gW107XHJcblx0XHR0aGlzLnJlc3BvbnNlID0gdGhpcy5lbmFibGVDYWNoaW5nID9cclxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLnNldENvbHVtbnModGhpcy5pdGVtVHlwZSwgdHJ1ZSwgcmVzcG9uc2VDb2x1bW5zKSA6XHJcblx0XHRcdHJlc3BvbnNlQ29sdW1ucztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0dGhpcy5tYWluLnB1c2godGhpcy5nZXRDb2x1bW5JbmZvKGNvbHVtbklkLCBpdGVtVHlwZSwgW10sIG51bGwsIHJlc3BvbnNlQ29sdW1ucykpO1xyXG5cdFx0XHR0aGlzLnJlcXVlc3QucHVzaChjb2x1bW5JZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHByb2Nlc3NSZXF1ZXN0Q29sdW1ucyAocmVzcG9uc2VDb2x1bW5zLCBpbmNsdWRlSWRDb2x1bW4pIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gPG9iamVjdFtdPiB0aGlzLnJlcXVlc3Q7IC8vIHdlIGNhbiBhc3N1bWUgcmVxdWVzdENvbHVtbnMgaXMgYW4gYXJyYXkgaGVyZVxyXG5cclxuXHRcdHRoaXMucmVzcG9uc2UgPSB7fTtcclxuXHJcblx0XHRpZiAocmVxdWVzdENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZXF1ZXN0Q29sdW1uIG9mIHJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKHJlcXVlc3RDb2x1bW4sIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gPT09IG51bGwpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLm1haW4ucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdGlmICghY29sdW1uSW5mby5pc0xlYWYpXHJcblx0XHRcdFx0dGhpcy5yb290LnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGluY2x1ZGVJZENvbHVtbiAmJiB0aGlzLnJlc3BvbnNlW2l0ZW1UeXBlXS5pZCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbkluZm8gPSB0aGlzLmdldFJlcXVlc3RDb2x1bW5JbmZvKCdpZCcsIGl0ZW1UeXBlLCBudWxsLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbkluZm8gIT09IG51bGwpXHJcblx0XHRcdFx0dGhpcy5tYWluLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFJlcXVlc3RDb2x1bW5JbmZvIChyZXF1ZXN0Q29sdW1uLCBpdGVtVHlwZSwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHBhcnNlZENvbHVtbiA9IHRoaXMuY29sdW1uVXRpbC5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IHBhcnNlZENvbHVtbi5pZDtcclxuXHJcblx0XHRsZXQgcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0aWYgKHJlc3BvbnNlQ29sdW1uc1tpdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmVzcG9uc2VDb2x1bW4gPSByZXNwb25zZUNvbHVtbnNbaXRlbVR5cGVdW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oJ05vIGFwaSBjb2x1bW4gZm9yIHJlcXVlc3QgY29sdW1uJywgY29sdW1uSWQsICdmb3IgaXRlbVR5cGUnLCBpdGVtVHlwZSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5lbmFibGVDYWNoaW5nKVxyXG5cdFx0XHRyZXNwb25zZUNvbHVtbiA9IHRoaXMuY29sdW1uSGFuZGxlci5zZXRDb2x1bW4oaXRlbVR5cGUsIHJlc3BvbnNlQ29sdW1uKTtcclxuXHJcblx0XHRjb25zdCByZXN1bHRSZXNwb25zZSA9IHRoaXMucmVzcG9uc2U7XHJcblxyXG5cdFx0aWYgKHJlc3VsdFJlc3BvbnNlW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV0gPSB7fTtcclxuXHJcblx0XHRpZiAocmVzdWx0UmVzcG9uc2VbaXRlbVR5cGVdW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXN1bHRSZXNwb25zZVtpdGVtVHlwZV1bY29sdW1uSWRdID0gcmVzcG9uc2VDb2x1bW47XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sdW1uSW5mbyhjb2x1bW5JZCwgaXRlbVR5cGUsIHBhcnNlZENvbHVtbi5jaGlsZHJlbiwgcGFyZW50LCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDb2x1bW5JbmZvIChjb2x1bW5JZCwgaXRlbVR5cGUsIGNoaWxkcmVuLCBwYXJlbnQsIHJlc3BvbnNlQ29sdW1ucyk6IENvbHVtbkluZm8ge1xyXG5cdFx0Y29uc3QgY29sdW1uVXRpbCA9IHRoaXMuY29sdW1uVXRpbDtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW2l0ZW1UeXBlXVtjb2x1bW5JZF07XHJcblx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5JbmZvRmFjdG9yeS5jb25zdHJ1Y3QocmVzcG9uc2VDb2x1bW4sIHBhcmVudCk7XHJcblx0XHRjb25zdCBpc0Rlcml2ZWQgPSBwYXJlbnQgIT09IG51bGw7XHJcblxyXG5cdFx0aWYgKGlzRGVyaXZlZClcclxuXHRcdFx0dGhpcy5kZXJpdmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblx0XHRlbHNlIC8vIHdlIGNvdWxkIHBvc3NpYmx5IGFkZCBkZXJpdmVkIGNvbHVtbnMgdG8gJ25vdEl0ZW0nXHJcblx0XHRcdHRoaXNbY29sdW1uVXRpbC5pc0l0ZW1Db2x1bW4ocmVzcG9uc2VDb2x1bW4pID8gJ2l0ZW0nIDogJ25vdEl0ZW0nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRm9ybWF0dGVkQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5mb3JtYXR0ZWRbaXNEZXJpdmVkID8gJ2Rlcml2ZWQnIDogJ21haW4nXS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChjb2x1bW5VdGlsLmlzRmlsdGVyZWRDb2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmZpbHRlcmVkLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNTZWFyY2hhYmxlQ29sdW1uKHJlc3BvbnNlQ29sdW1uKSlcclxuXHRcdFx0dGhpcy5zZWFyY2hhYmxlLnB1c2goY29sdW1uSW5mbyk7XHJcblxyXG5cdFx0aWYgKGNvbHVtblV0aWwuaXNDdXN0b21Db2x1bW4ocmVzcG9uc2VDb2x1bW4pKVxyXG5cdFx0XHR0aGlzLmN1c3RvbS5wdXNoKGNvbHVtbkluZm8pO1xyXG5cclxuXHRcdGlmIChyZXNwb25zZUNvbHVtbi50eXBlID09PSAnbGluaycpXHJcblx0XHRcdHRoaXMubGluayA9IGNvbHVtbkluZm87XHJcblxyXG5cdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLmxlYWYucHVzaChjb2x1bW5JbmZvKTtcclxuXHJcblx0XHRcdHJldHVybiBjb2x1bW5JbmZvO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbHVtbkluZm8uaXRlbVR5cGUgPSByZXNwb25zZUNvbHVtbi5pdGVtVHlwZTtcclxuXHRcdGNvbHVtbkluZm8uY2hpbGRyZW4gPSBbXTtcclxuXHRcdGNvbHVtbkluZm8uaXNMZWFmID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gY29sdW1ucyBpcyAqbm90KiB0cnVlXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uSWQgb2YgY2hpbGRyZW4pIHtcclxuXHRcdFx0Y29uc3QgY2hpbGRJbmZvID0gdGhpcy5nZXRSZXF1ZXN0Q29sdW1uSW5mbyhcclxuXHRcdFx0XHRjaGlsZENvbHVtbklkLFxyXG5cdFx0XHRcdHJlc3BvbnNlQ29sdW1uLml0ZW1UeXBlLFxyXG5cdFx0XHRcdGNvbHVtbkluZm8sXHJcblx0XHRcdFx0cmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRJbmZvID09PSBudWxsKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sdW1uSW5mby5jaGlsZHJlbi5wdXNoKGNoaWxkSW5mbyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGNvbHVtbkluZm87XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ09MVU1OX1NFUEVSQVRPUiwgUkVOREVSX0FTX1NFUEVSQVRPUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExvY2FsQ29sdW1uLCBSZXF1ZXN0Q29sdW1uLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGV4dGVuZCwgZ2V0Rmlyc3RQcm9wZXJ0eSwgaXNEZWZpbmVkIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5VdGlsIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRnZXRDb2x1bW5QYXRoIChjb2x1bW5zLCByZW5kZXJBcykge1xyXG5cdFx0bGV0IHNlcGVyYXRvciA9ICcnO1xyXG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0cmVzdWx0ICs9IHNlcGVyYXRvciArIGNvbHVtbi5pZDtcclxuXHRcdFx0c2VwZXJhdG9yID0gQ09MVU1OX1NFUEVSQVRPUjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVuZGVyQXMgIT09IG51bGwpXHJcblx0XHRcdHJlc3VsdCArPSBSRU5ERVJfQVNfU0VQRVJBVE9SICsgcmVuZGVyQXM7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldERhdGVGb3JtYXRPcHRpb25zIChjb2x1bW5UeXBlKSB7XHJcblx0XHRjb25zdCBub3cgPSBtb21lbnQoKTtcclxuXHJcblx0XHRjb25zdCBmb3JtYXRzID0ge1xyXG5cdFx0XHQnSi1NLVknOiBub3cuZm9ybWF0KCdERC1NTS1ZWVlZJyksXHJcblx0XHRcdCdKLU0nOiBub3cuZm9ybWF0KCdERC1NTScpLFxyXG5cdFx0XHQnaitGK1knOiBub3cuZm9ybWF0KCdEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdEK2orRitZJzogbm93LmZvcm1hdCgnZGRkZCBEIE1NTSBZWVlZJyksXHJcblx0XHRcdCdGJzogbm93LmZvcm1hdCgnTU1NJyksXHJcblx0XHRcdCdmJzogbm93LmZvcm1hdCgnTU1NTScpLFxyXG5cdFx0XHQnRCc6IG5vdy5mb3JtYXQoJ2RkZGQnKSxcclxuXHRcdFx0J2QnOiBub3cuZm9ybWF0KCdkZGQnKVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoY29sdW1uVHlwZSA9PT0gJ2RhdGV0aW1lJylcclxuXHRcdFx0ZXh0ZW5kKGZvcm1hdHMsIHtcclxuXHRcdFx0XHQnSi1NLVkrSDppJzogbm93LmZvcm1hdCgnREQtTU0tWVlZWSBISDptbScpLFxyXG5cdFx0XHRcdCdKLU0rSDppJzogbm93LmZvcm1hdCgnREQtTU0gSEg6bW0nKSxcclxuXHRcdFx0XHQnaitGK1krSDppJzogbm93LmZvcm1hdCgnREQgTU1NTSBZIEhIOm1tJyksXHJcblx0XHRcdFx0J0QraitGK1krSDppJzogbm93LmZvcm1hdCgnZGRkZCBERCBNTU0gWSBISDptbScpLFxyXG5cdFx0XHRcdCdIOmknOiBub3cuZm9ybWF0KCdISDptbScpLFxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gZm9ybWF0cztcclxuXHR9XHJcblxyXG5cdGlzU3RyaW5nQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICdwaG9uZSc6XHJcblx0XHRcdGNhc2UgJ3VybCc6XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0XHQvLyBjYXNlICdodG1sJzogLy8gVE9ETzogc29ydCBvbiBmaWx0ZXJlZCB2YWx1ZVxyXG5cdFx0XHRcdC8vIGNhc2UgJ2VudW0nOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRmxvYXRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOiAvLyBmbG9hdGluZyBwb2ludCB0eXBlc1xyXG5cdFx0XHRjYXNlICd2b2x1bWUnOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdkaXN0YW5jZSc6XHJcblx0XHRcdGNhc2UgJ2RpbWVuc2lvbic6XHJcblx0XHRcdGNhc2UgJ3Bvd2VyJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVudCc6XHJcblx0XHRcdGNhc2UgJ3ByaWNlJzpcclxuXHRcdFx0Y2FzZSAncGVyY2VudGFnZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNJbnRDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpbnQnOiAvLyBpbnRlZ2VyIHR5cGVzXHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ3F1YW50aXR5JzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc051bWJlckNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pc0Zsb2F0Q29sdW1uKGNvbHVtbikgfHwgdGhpcy5pc0ludENvbHVtbihjb2x1bW4pO1xyXG5cdH1cclxuXHJcblx0aXNDdXN0b21Db2x1bW4gKGNvbHVtbikge1xyXG5cdFx0cmV0dXJuIGNvbHVtbi5maWVsZHR5cGUgPT09ICdjdXN0b21maWVsZCc7XHJcblx0fVxyXG5cclxuXHRpc0l0ZW1Db2x1bW4gKGNvbHVtbiwgaW5jbHVkZUlkID0gdHJ1ZSkge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdpZCc6XHJcblx0XHRcdFx0cmV0dXJuIGluY2x1ZGVJZDtcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2NoaWxkJzpcclxuXHRcdFx0Y2FzZSAnc2libGluZyc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzRGF0ZUNvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aXNSZW5kZXJlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0ZpbHRlcmVkQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdC8vIHVnbHkgaGFjayA6LShcclxuXHRcdGlmIChjb2x1bW4uaWQgPT09ICdzdGFmZmVsJylcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5nZW5lcmF0b3IgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAndm9sdW1lJzpcclxuXHRcdFx0Y2FzZSAnd2VpZ2h0JzpcclxuXHRcdFx0Y2FzZSAnZGlzdGFuY2UnOlxyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICdxdWFudGl0eSc6XHJcblx0XHRcdGNhc2UgJ2VtYWlsJzpcclxuXHRcdFx0Y2FzZSAndXJsJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdGNhc2UgJ3RleHRyZXBsYWNlJzpcclxuXHRcdFx0Y2FzZSAnbG9uZ3RleHQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0Zvcm1hdHRlZENvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ3RpbWUnOlxyXG5cdFx0XHRjYXNlICdkdXJhdGlvbic6XHJcblx0XHRcdGNhc2UgJ2NvbG9yJzpcclxuXHRcdFx0Y2FzZSAnanNvbic6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ2ZpbGVzaXplJzpcclxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc1NlbGVjdGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdibG9iJzpcclxuXHRcdFx0Y2FzZSAnY29vcmRpbmF0ZSc6XHJcblx0XHRcdGNhc2UgJ2ZvcmNldXBkYXRlJzpcclxuXHRcdFx0Y2FzZSAnaWQnOlxyXG5cdFx0XHRjYXNlICdqc29uJzpcclxuXHRcdFx0Y2FzZSAnb3JkZXInOlxyXG5cdFx0XHRjYXNlICdwYXJlbnRpZCc6XHJcblx0XHRcdGNhc2UgJ3BhcmVudHR5cGUnOlxyXG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XHJcblx0XHRcdGNhc2UgJ3Rva2VuJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRoYXNMb2NhdGlvblByb3BlcnR5IChjb2x1bW4sIGxvY2F0aW9uKSB7XHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG5cdFx0cmV0dXJuIChsb2NhdGlvbiAmIGNvbHVtbi5sb2NhdGlvbikgIT09IDA7XHJcblx0fVxyXG5cclxuXHRpc0VkaXRhYmxlQ29sdW1uIChjb2x1bW4pIHtcclxuXHRcdGlmIChjb2x1bW4ucmVhZE9ubHkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ2RhdGUnOlxyXG5cdFx0XHRjYXNlICdkYXRldGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRpc1NlYXJjaGFibGVDb2x1bW4gKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdlbWFpbCc6XHJcblx0XHRcdGNhc2UgJ3Bob25lJzpcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2xvbmd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaHRtbCc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0RGVmYXVsdFdlaWdodCAoY29sdW1uKSB7XHJcblx0XHQvLyBcdFx0XHRjb25zb2xlLmxvZygnZ2V0RGVmYXVsdFdlaWdodCcsIGNvbHVtbik7XHJcblxyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkb3VibGUnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdGNhc2UgJ2Jvb2wnOlxyXG5cdFx0XHRjYXNlICdpbnQnOlxyXG5cdFx0XHRjYXNlICdwZXJjZW50YWdlJzpcclxuXHRcdFx0Y2FzZSAnY29sb3InOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdwb3dlcic6XHJcblx0XHRcdGNhc2UgJ2N1cnJlbnQnOlxyXG5cdFx0XHRcdHJldHVybiAwLjU7XHJcblxyXG5cdFx0XHRjYXNlICd1cmwnOlxyXG5cdFx0XHRjYXNlICdlbnVtJzpcclxuXHRcdFx0Y2FzZSAnZW1haWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0JzpcclxuXHRcdFx0Y2FzZSAnaXRlbSc6XHJcblx0XHRcdGNhc2UgJ2xpbmsnOlxyXG5cdFx0XHRcdHJldHVybiAxLjU7XHJcblxyXG5cdFx0XHRjYXNlICdsb25ndGV4dCc6XHJcblx0XHRcdGNhc2UgJ2h0bWwnOlxyXG5cdFx0XHRjYXNlICd0ZXh0cmVwbGFjZSc6XHJcblx0XHRcdFx0cmV0dXJuIDI7XHJcblxyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0Y2FzZSAnZGF0ZXRpbWUnOlxyXG5cdFx0XHRjYXNlICd0aW1lJzpcclxuXHRcdFx0Y2FzZSAnZHVyYXRpb24nOlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Z2V0Q29tcGFyYXRvcnMgKGNvbHVtbikge1xyXG5cdFx0c3dpdGNoIChjb2x1bW4udHlwZSkge1xyXG5cdFx0XHRjYXNlICdkaW1lbnNpb24nOlxyXG5cdFx0XHRjYXNlICd3ZWlnaHQnOlxyXG5cdFx0XHRjYXNlICdwcmljZSc6XHJcblx0XHRcdFx0cmV0dXJuIFsnPScsICc+JywgJzwnXTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdGNhc2UgJ2RhdGV0aW1lJzpcclxuXHRcdFx0Y2FzZSAndGltZSc6XHJcblx0XHRcdGNhc2UgJ2R1cmF0aW9uJzpcclxuXHRcdFx0XHRyZXR1cm4gWyc+JywgJzwnXTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gWyc9JywgJyE9J107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyByZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IGNvbHVtbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhlIHNlY29uZFxyXG5cdGlzQ29sdW1uU3Vic2V0IChmaXJzdCwgc2Vjb25kLCBzZWNvbmRUcnVlKSB7XHJcblx0XHRpZiAoZmlyc3QgPT09IHRydWUpIC8vID09PSBvcGVyYXRvciBuZWVkZWQgaGVyZVxyXG5cdFx0XHRyZXR1cm4gc2Vjb25kVHJ1ZTtcclxuXHJcblx0XHQvLyB3aGVuIHNlY29uZFRydWUgaXMgdGhlIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBmb3IgZGVyaXZlZCBjb2x1bW5zXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnNDb2x1bW4oY29sdW1uLCBzZWNvbmQpKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGNvbnRhaW5zQ29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0aWYgKGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID09PSAnc3RyaW5nJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2hpbGRDb2x1bW4gb2YgY29sdW1uLmNoaWxkcmVuKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQhdGhpcy5jb250YWluc0NvbHVtbihcclxuXHRcdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdW2NvbHVtbi5pZF1cclxuXHRcdFx0XHQpXHJcblx0XHRcdClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRyZXNwb25zZUNvbHVtbnNBdmFpbGFibGUgKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2VDb2x1bW5NYXApIHtcclxuXHRcdGZvciAoY29uc3QgcmVxdWVzdENvbHVtbiBvZiByZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBwYXJzZWRDb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBwYXJzZWRDb2x1bW4uY2hpbGRyZW47XHJcblx0XHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlQ29sdW1uTWFwW2l0ZW1UeXBlXTtcclxuXHRcdFx0bGV0IHJlc3BvbnNlQ29sdW1uO1xyXG5cclxuXHRcdFx0aWYgKHJlc3BvbnNlQ29sdW1ucyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uID0gcmVzcG9uc2VDb2x1bW5zW3BhcnNlZENvbHVtbi5pZF07XHJcblxyXG5cdFx0XHRpZiAocmVzcG9uc2VDb2x1bW4gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiAhdGhpcy5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUocmVzcG9uc2VDb2x1bW4uaXRlbVR5cGUsIGNoaWxkcmVuLCByZXNwb25zZUNvbHVtbk1hcCkpXHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Y29weVJlcXVlc3RDb2x1bW5zIChjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucyk6IFJlcXVlc3RDb2x1bW5zIHtcclxuXHRcdGlmIChjb2x1bW5zID09PSB0cnVlKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRjb25zdCByZXN1bHQ6IFJlcXVlc3RDb2x1bW5bXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY29weVJlcXVlc3RDb2x1bW4oY29sdW1uKSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvcHlSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uOiBSZXF1ZXN0Q29sdW1uKTogUmVxdWVzdENvbHVtbiB7XHJcblx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLnBhcnNlUmVxdWVzdENvbHVtbihyZXF1ZXN0Q29sdW1uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcclxuXHRcdFx0cmV0dXJuIGNvbHVtbi5pZDtcclxuXHJcblx0XHRjb25zdCBjaGlsZHJlbjogUmVxdWVzdENvbHVtbltdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZENvbHVtbiBvZiBjb2x1bW4uY2hpbGRyZW4pXHJcblx0XHRcdGNoaWxkcmVuLnB1c2godGhpcy5jb3B5UmVxdWVzdENvbHVtbihjaGlsZENvbHVtbikpO1xyXG5cclxuXHRcdHJldHVybiB7W2NvbHVtbi5pZF06IGNoaWxkcmVufTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERpZmZlcmVuY2U6IGNvbHVtbnMgdGhhdCBhcmUgaW4gc2Vjb25kLCBidXQgbm90IGluIGZpcnN0XHJcblx0ICogQHBhcmFtIHtBcnJheX0gZmlyc3RcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyAnbWVyZ2VkJyBhbmQgJ2RpZmZlcmVuY2UnIHByb3BlcnRpZXNcclxuXHQgKi9cclxuXHRtZXJnZVJlcXVlc3RDb2x1bW5zIChmaXJzdDogUmVxdWVzdENvbHVtbnMsIHNlY29uZDogUmVxdWVzdENvbHVtbnMpOiB7bWVyZ2VkOiBSZXF1ZXN0Q29sdW1ucywgZGlmZmVyZW5jZTogUmVxdWVzdENvbHVtbnN9IHtcclxuXHRcdGlmIChmaXJzdCA9PT0gdHJ1ZSkgLy8gPT09IG9wZXJhdG9yIG5lZWRlZCBoZXJlXHJcblx0XHRcdHJldHVybiB7bWVyZ2VkOiB0cnVlLCBkaWZmZXJlbmNlOiBbXX07XHJcblxyXG5cdFx0aWYgKHNlY29uZCA9PT0gdHJ1ZSlcclxuXHRcdFx0cmV0dXJuIHttZXJnZWQ6IHRydWUsIGRpZmZlcmVuY2U6IHRydWV9O1xyXG5cclxuXHRcdGNvbnN0IG1lcmdlZDogUmVxdWVzdENvbHVtbnMgPSB0aGlzLmNvcHlSZXF1ZXN0Q29sdW1ucyhmaXJzdCk7XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlOiBSZXF1ZXN0Q29sdW1ucyA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIHNlY29uZCkge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKGNvbHVtbiwgbWVyZ2VkKTtcclxuXHJcblx0XHRcdGlmIChhZGRlZENvbHVtbiAhPT0gbnVsbClcclxuXHRcdFx0XHRkaWZmZXJlbmNlLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB7bWVyZ2VkOiBtZXJnZWQsIGRpZmZlcmVuY2U6IGRpZmZlcmVuY2V9O1xyXG5cdH1cclxuXHJcblx0bWVyZ2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uLCBkZXN0aW5hdGlvbikge1xyXG5cdFx0Y29uc3QgY29sdW1uID0gdGhpcy5wYXJzZVJlcXVlc3RDb2x1bW4ocmVxdWVzdENvbHVtbik7XHJcblx0XHRjb25zdCBjb2x1bW5JbmRleCA9IHRoaXMuZmluZENvbHVtbihjb2x1bW4uaWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGRlc3RpbmF0aW9uLnB1c2gocmVxdWVzdENvbHVtbik7XHJcblx0XHRcdHJldHVybiByZXF1ZXN0Q29sdW1uO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAodHlwZW9mIGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0ZGVzdGluYXRpb25bY29sdW1uSW5kZXhdID0ge1xyXG5cdFx0XHRcdFtjb2x1bW4uaWRdOiBbXVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFkZGVkQ29sdW1uczogUmVxdWVzdENvbHVtbnMgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNoaWxkQ29sdW1uIG9mIGNvbHVtbi5jaGlsZHJlbikge1xyXG5cdFx0XHRjb25zdCBhZGRlZENvbHVtbiA9IHRoaXMubWVyZ2VSZXF1ZXN0Q29sdW1uKFxyXG5cdFx0XHRcdGNoaWxkQ29sdW1uLFxyXG5cdFx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW4uaWRdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRpZiAoYWRkZWRDb2x1bW4gIT09IG51bGwpXHJcblx0XHRcdFx0YWRkZWRDb2x1bW5zLnB1c2goYWRkZWRDb2x1bW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhZGRlZENvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRbY29sdW1uLmlkXTogYWRkZWRDb2x1bW5zXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0cGFyc2VSZXF1ZXN0Q29sdW1uIChyZXF1ZXN0Q29sdW1uKToge2lkOiBzdHJpbmcsIGNoaWxkcmVuOiBSZXF1ZXN0Q29sdW1uW119IHtcclxuXHRcdGNvbnN0IGlzTGVhZiA9IHR5cGVvZiByZXF1ZXN0Q29sdW1uID09PSAnc3RyaW5nJztcclxuXHRcdGNvbnN0IGNvbHVtbklkID0gaXNMZWFmID8gcmVxdWVzdENvbHVtbiA6IGdldEZpcnN0UHJvcGVydHkocmVxdWVzdENvbHVtbik7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aWQ6IGNvbHVtbklkLFxyXG5cdFx0XHRjaGlsZHJlbjogaXNMZWFmID8gW10gOiByZXF1ZXN0Q29sdW1uW2NvbHVtbklkXVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lcmdlcyB0d28gc2V0cyBvZiByZXNwb25zZSBjb2x1bW5zLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBzZWNvbmRcclxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyBhICdtZXJnZWQnIGFuZCBhICdkaWZmZXJlbmNlJyBwcm9wZXJ0eS5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Y29uc3QgbWVyZ2VkID0ge307XHJcblx0XHRjb25zdCBkaWZmZXJlbmNlID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBmaXJzdCkge1xyXG5cdFx0XHRpZiAoc2Vjb25kW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IGZpcnN0W2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IG1lcmdlUmVzdWx0ID0gdGhpcy5tZXJnZVJlc3BvbnNlQ29sdW1uTWFwKFxyXG5cdFx0XHRcdGZpcnN0W2l0ZW1UeXBlXSxcclxuXHRcdFx0XHRzZWNvbmRbaXRlbVR5cGVdXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRtZXJnZWRbaXRlbVR5cGVdID0gbWVyZ2VSZXN1bHQubWVyZ2VkO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2l0ZW1UeXBlXSA9IG1lcmdlUmVzdWx0LmRpZmZlcmVuY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBzZWNvbmQpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bWVyZ2VkW2l0ZW1UeXBlXSA9IHNlY29uZFtpdGVtVHlwZV07XHJcblx0XHRcdFx0ZGlmZmVyZW5jZVtpdGVtVHlwZV0gPSBzZWNvbmRbaXRlbVR5cGVdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge2FycmF5fSBmaXJzdFxyXG5cdCAqIEBwYXJhbSB7YXJyYXl9IHNlY29uZFxyXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IGRpZmZlcmVuY2U6IHRoZSBjb2x1bW5zIHRoYXQgYXJlIGluIHNlY29uZCwgYnV0IG5vdCBpbiBmaXJzdC5cclxuXHQgKi9cclxuXHRtZXJnZVJlc3BvbnNlQ29sdW1uTWFwIChmaXJzdCwgc2Vjb25kKSB7XHJcblx0XHRjb25zdCBtZXJnZWQgPSB7fTtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGZpcnN0KVxyXG5cdFx0XHRtZXJnZWRbY29sdW1uSWRdID0gZmlyc3RbY29sdW1uSWRdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gc2Vjb25kKSB7XHJcblx0XHRcdGlmIChpc0RlZmluZWQoZmlyc3RbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdG1lcmdlZFtjb2x1bW5JZF0gPSBzZWNvbmRbY29sdW1uSWRdO1xyXG5cdFx0XHRkaWZmZXJlbmNlW2NvbHVtbklkXSA9IHNlY29uZFtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHttZXJnZWQ6IG1lcmdlZCwgZGlmZmVyZW5jZTogZGlmZmVyZW5jZX07XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsQ29sdW1uSWQgKGNvbHVtbklkKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uSWQuc3Vic3RyaW5nKDAsIDIpID09PSAnX18nO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbnMgKGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzTG9jYWxDb2x1bW5JZChjb2x1bW4pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy5wcm9jZXNzQ29uZmlnQ29sdW1uKHRoaXMucGFyc2VDb25maWdDb2x1bW4oY29sdW1uKSwgcmVxdWVzdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTG9jYWxDb25maWdDb2x1bW5zIChjb25maWdDb2x1bW5zLCBsb2NhbENvbHVtbnMsIHJlbW90ZUNvbHVtbkNhbGxiYWNrLCBsb2NhbENvbHVtbkNhbGxiYWNrKSB7XHJcblx0XHRjb25zdCBsb2NhbENvbHVtbk1hcCA9IHt9O1xyXG5cclxuXHRcdGZvciAoY29uc3QgbG9jYWxDb2x1bW4gb2YgbG9jYWxDb2x1bW5zKVxyXG5cdFx0XHRsb2NhbENvbHVtbk1hcFtsb2NhbENvbHVtbi5pZF0gPSBsb2NhbENvbHVtbjtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbmZpZ0lkIG9mIGNvbmZpZ0NvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgcGFyc2VkQ29uZmlnSWQgPSBjb25maWdJZC5zcGxpdChSRU5ERVJfQVNfU0VQRVJBVE9SKTtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBwYXJzZWRDb25maWdJZFswXTtcclxuXHJcblx0XHRcdGlmICghdGhpcy5pc0xvY2FsQ29sdW1uSWQoY29sdW1uSWQpKSB7XHJcblx0XHRcdFx0cmVtb3RlQ29sdW1uQ2FsbGJhY2soY29uZmlnSWQsIGNvbHVtbklkLCBwYXJzZWRDb25maWdJZFsxXSk7XHJcblxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBjb2x1bW4gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpbiBsb2NhbENvbHVtbnNcclxuXHRcdFx0aWYgKGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0bG9jYWxDb2x1bW5DYWxsYmFjayhjb25maWdJZCwgbG9jYWxDb2x1bW5NYXBbY29sdW1uSWRdKTtcclxuXHRcdFx0ZGVsZXRlIGxvY2FsQ29sdW1uTWFwW2NvbHVtbklkXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIFRPRE86IG1vdmUgdG8gZnJvbnQtZW5kXHJcblx0Y29uc29saWRhdGVDb2x1bW5zIChcclxuXHRcdGNvbmZpZ0NvbHVtbnMsXHJcblx0XHRsb2NhbENvbHVtbnMsXHJcblx0XHRhZGRSZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbltdXHJcblx0KSB7XHJcblx0XHRjb25zdCBmaWx0ZXJlZExvY2FsQ29sdW1uczogTG9jYWxDb2x1bW5bXSA9IFtdO1xyXG5cdFx0bGV0IHJlcXVlc3RDb2x1bW5zID0gPFJlcXVlc3RDb2x1bW5bXT4gdGhpcy5jb3B5UmVxdWVzdENvbHVtbnMoYWRkUmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0xvY2FsQ29uZmlnQ29sdW1ucyhcclxuXHRcdFx0Y29uZmlnQ29sdW1ucyxcclxuXHRcdFx0bG9jYWxDb2x1bW5zLFxyXG5cdFx0XHQoXywgY29sdW1uSWQpID0+IHtcclxuXHRcdFx0XHR0aGlzLnByb2Nlc3NDb25maWdDb2x1bW4oY29sdW1uSWQuc3BsaXQoQ09MVU1OX1NFUEVSQVRPUiksIHJlcXVlc3RDb2x1bW5zKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KF8sIGxvY2FsQ29sdW1uKSA9PiB7XHJcblx0XHRcdFx0ZmlsdGVyZWRMb2NhbENvbHVtbnMucHVzaChsb2NhbENvbHVtbik7XHJcblx0XHRcdFx0cmVxdWVzdENvbHVtbnMgPSA8UmVxdWVzdENvbHVtbltdPiB0aGlzLm1lcmdlUmVxdWVzdENvbHVtbnMoXHJcblx0XHRcdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0XHRcdGxvY2FsQ29sdW1uLnZhbHVlT3B0aW9ucy5yZXF1ZXN0Q29sdW1uc1xyXG5cdFx0XHRcdCkubWVyZ2VkO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB7cmVxdWVzdDogcmVxdWVzdENvbHVtbnMsIGxvY2FsOiBmaWx0ZXJlZExvY2FsQ29sdW1uc307XHJcblx0fVxyXG5cclxuXHRwYXJzZUNvbmZpZ0NvbHVtbiAoY29sdW1uKSB7XHJcblx0XHRyZXR1cm4gY29sdW1uLnNwbGl0KFJFTkRFUl9BU19TRVBFUkFUT1IpWzBdLnNwbGl0KENPTFVNTl9TRVBFUkFUT1IpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0NvbmZpZ0NvbHVtbiAoY29sdW1uQXJyYXksIGRlc3RpbmF0aW9uKSB7XHJcblx0XHRjb25zdCBjb2x1bW5JZCA9IGNvbHVtbkFycmF5WzBdO1xyXG5cdFx0Y29uc3QgaXNMZWFmID0gY29sdW1uQXJyYXkubGVuZ3RoID09PSAxO1xyXG5cclxuXHRcdGlmIChpc0xlYWYpIHtcclxuXHRcdFx0aWYgKGRlc3RpbmF0aW9uLmluZGV4T2YoY29sdW1uSWQpID09PSAtMSlcclxuXHRcdFx0XHRkZXN0aW5hdGlvbi5wdXNoKGNvbHVtbklkKTtcclxuXHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgY29sdW1uSW5kZXggPSB0aGlzLmZpbmRDb2x1bW5PYmplY3QoY29sdW1uSWQsIGRlc3RpbmF0aW9uKTtcclxuXHJcblx0XHRpZiAoY29sdW1uSW5kZXggPT09IC0xKSB7XHJcblx0XHRcdGNvbHVtbkluZGV4ID0gZGVzdGluYXRpb24ucHVzaCh7XHJcblx0XHRcdFx0W2NvbHVtbklkXTogW11cclxuXHRcdFx0fSkgLSAxO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucHJvY2Vzc0NvbmZpZ0NvbHVtbihcclxuXHRcdFx0Y29sdW1uQXJyYXkuc2xpY2UoMSksXHJcblx0XHRcdGRlc3RpbmF0aW9uW2NvbHVtbkluZGV4XVtjb2x1bW5JZF1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uT2JqZWN0IChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoYXJyYXlbaV0pID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRyZXR1cm4gaTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fVxyXG5cclxuXHRmaW5kQ29sdW1uIChjb2x1bW5JZCwgYXJyYXkpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uID0gYXJyYXlbaV07XHJcblxyXG5cdFx0XHRpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0XHRpZiAoY29sdW1uID09PSBjb2x1bW5JZClcclxuXHRcdFx0XHRcdHJldHVybiBpO1xyXG5cclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGdldEZpcnN0UHJvcGVydHkoY29sdW1uKSA9PT0gY29sdW1uSWQpXHJcblx0XHRcdFx0cmV0dXJuIGk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDaGFuZ2VzQ29tcGlsYXRpb24sIENvbGxlY3Rpb25DYWNoZSwgQ29sbGVjdGlvbkhhbmRsZXIsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LCBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENyZWF0ZVJlcXVlc3RFbnRyeSwgQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3Qge1xyXG5cdHJlcXVlc3RzOiBDcmVhdGVSZXF1ZXN0RW50cnlbXSA9IFtdO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29tcGlsYXRpb246IENoYW5nZXNDb21waWxhdGlvbixcclxuXHRcdHByaXZhdGUgbG9jYWxDb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSxcclxuXHRcdHByaXZhdGUgcGFyYW1ldGVyTWFwOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwLFxyXG5cdFx0cHJpdmF0ZSBicmVha3VwQnlQYXJlbnQgPSBmYWxzZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZmluYWxpemVSZXF1ZXN0IChyZXF1ZXN0UmVzb3VyY2U6IENyZWF0ZVJlcXVlc3RFbnRyeSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSByZXF1ZXN0UmVzb3VyY2UuY29sbGVjdGlvbnMuZ2V0Q29sbGVjdGlvbnNXaXRoRml0dGluZ0l0ZW1zKCk7XHJcblx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSByZXF1ZXN0UmVzb3VyY2UuY29sdW1ucztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjb2xsZWN0aW9uRW50cmllcylcclxuXHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChjb2xsZWN0aW9uRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0cmVxdWVzdFJlc291cmNlLnJlcXVlc3QuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvbi5nZXQoKTtcclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdFJlc291cmNlO1xyXG5cdH1cclxuXHJcblx0c2V0UmVxdWVzdFBhcmVudCAocGFyZW50VHlwZSwgcmVxdWVzdFJlc291cmNlKSB7XHJcblx0XHRjb25zdCByZXF1ZXN0ID0gcmVxdWVzdFJlc291cmNlLnJlcXVlc3Q7XHJcblxyXG5cdFx0aWYgKHBhcmVudFR5cGUgPT09ICdWb2lkJylcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJlcXVlc3QucGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XHJcblx0XHRyZXF1ZXN0LnBhcmVudElkID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRydW4gKCkge1xyXG5cdFx0aWYgKHRoaXMuYnJlYWt1cEJ5UGFyZW50KSB7XHJcblx0XHRcdGZvciAoY29uc3QgcGFyZW50VHlwZSBpbiB0aGlzLmNvbXBpbGF0aW9uKSB7XHJcblx0XHRcdFx0Y29uc3QgcGFyZW50TWFwID0gdGhpcy5jb21waWxhdGlvbltwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBpbiBwYXJlbnRNYXApIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudElkKSlcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcclxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRSZXF1ZXN0UGFyZW50KHBhcmVudFR5cGUsIHJlcXVlc3RSZXNvdXJjZSkgPyBwYXJlbnRJZCA6IG51bGwsXHJcblx0XHRcdFx0XHRcdHJlcXVlc3RSZXNvdXJjZVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKGNvbnN0IHBhcmVudFR5cGUgaW4gdGhpcy5jb21waWxhdGlvbikge1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudE1hcCA9IHRoaXMuY29tcGlsYXRpb25bcGFyZW50VHlwZV07XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFJlc291cmNlID0gdGhpcy5pbml0aWFsaXplUmVxdWVzdCgpO1xyXG5cdFx0XHRcdGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuc2V0UmVxdWVzdFBhcmVudChwYXJlbnRUeXBlLCByZXF1ZXN0UmVzb3VyY2UpO1xyXG5cclxuXHRcdFx0XHRsZXQgdmFsaWRSZXF1ZXN0ID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50SWQgaW4gcGFyZW50TWFwKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnRJZCkpXHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuZXh0ZW5kUmVxdWVzdChcclxuXHRcdFx0XHRcdFx0cGFyZW50TWFwW3BhcmVudElkXSxcclxuXHRcdFx0XHRcdFx0aGFzUGFyZW50ID8gcGFyZW50SWQgOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRyZXF1ZXN0UmVzb3VyY2VcclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0dmFsaWRSZXF1ZXN0ID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICh2YWxpZFJlcXVlc3QpXHJcblx0XHRcdFx0XHR0aGlzLnJlcXVlc3RzLnB1c2godGhpcy5maW5hbGl6ZVJlcXVlc3QocmVxdWVzdFJlc291cmNlKSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0cztcclxuXHR9XHJcblxyXG5cdGluaXRpYWxpemVSZXF1ZXN0ICgpOiBDcmVhdGVSZXF1ZXN0RW50cnkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0cmVxdWVzdDoge1xyXG5cdFx0XHRcdHJlcXVlc3RUeXBlOiAnY3JlYXRlJyxcclxuXHRcdFx0XHRpdGVtczoge30sXHJcblx0XHRcdFx0Y29sdW1uczoge31cclxuXHRcdFx0fSxcclxuXHRcdFx0Y29sdW1uczogdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKSxcclxuXHRcdFx0aXRlbXM6IHt9LFxyXG5cdFx0XHRjb2xsZWN0aW9uczogdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFt0aGlzLmxvY2FsQ29sbGVjdGlvbkNhY2hlLCB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXNdLFxyXG5cdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0KVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXh0ZW5kUmVxdWVzdCAoaXRlbUVudHJpZXMsIHJlcXVlc3RQYXJlbnRJZCwgZGVzdGluYXRpb24pIHtcclxuXHRcdGNvbnN0IHJlcXVlc3QgPSBkZXN0aW5hdGlvbi5yZXF1ZXN0O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5TWFwID0gZGVzdGluYXRpb24uaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtVHlwZSBpbiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRpZiAocmVxdWVzdC5pdGVtVHlwZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJlcXVlc3QuaXRlbVR5cGUgPSBpdGVtVHlwZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnlNYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdID0ge307XHJcblx0XHRcdFx0cmVxdWVzdC5pdGVtc1tpdGVtVHlwZV0gPSB7fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gaXRlbUVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbUVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0XHRcdFx0Y29uc3QgY2hpbGRFbnRyaWVzID0gZ2V0UGF0aCh0aGlzLmNvbXBpbGF0aW9uLCBbaXRlbVR5cGUsIGl0ZW1JZF0pO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1SZXF1ZXN0OiBhbnkgPSByZXF1ZXN0Lml0ZW1zW2l0ZW1UeXBlXVtpdGVtSWRdID0ge307XHJcblx0XHRcdFx0Y29uc3QgcGFyYW1ldGVycyA9IGdldFBhdGgodGhpcy5wYXJhbWV0ZXJNYXAsIFtpdGVtVHlwZSwgaXRlbUlkXSk7XHJcblxyXG5cdFx0XHRcdGxldCBsaW5rcztcclxuXHJcblx0XHRcdFx0aWYgKHJlcXVlc3RQYXJlbnRJZCAhPT0gbnVsbClcclxuXHRcdFx0XHRcdHJlcXVlc3QucGFyZW50SWRbaXRlbUlkXSA9IHJlcXVlc3RQYXJlbnRJZDtcclxuXHJcblx0XHRcdFx0ZGVzdGluYXRpb24uY29sdW1ucy5leHBhbmQoaXRlbUVudHJ5LmNvbHVtbnMpO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uLmNvbGxlY3Rpb25zLmV4cGFuZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdW2l0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblxyXG5cdFx0XHRcdGl0ZW1SZXF1ZXN0LnZhbHVlcyA9IGl0ZW1FbnRyeS5mb3JtYXRSZXF1ZXN0KCk7XHJcblx0XHRcdFx0aXRlbVJlcXVlc3QucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XHJcblxyXG5cdFx0XHRcdGlmIChjaGlsZEVudHJpZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRsaW5rcyA9IGl0ZW1SZXF1ZXN0LmxpbmtzID0ge307XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgY2hpbGRUeXBlIGluIGNoaWxkRW50cmllcykge1xyXG5cdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdGZvciAoY29uc3QgY2hpbGRJZCBpbiBjaGlsZEVudHJpZXNbY2hpbGRUeXBlXSlcclxuXHRcdFx0XHRcdFx0bGlua3NbY2hpbGRUeXBlXS5wdXNoKGNoaWxkSWQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0dGhpcy5leHRlbmRSZXF1ZXN0KGNoaWxkRW50cmllcywgbnVsbCwgZGVzdGluYXRpb24pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XG5cdENvbGxlY3Rpb25DYWNoZSxcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0Q29sbGVjdGlvbkhhbmRsZXIsXG5cdENvbGxlY3Rpb25NYXRjaGVyLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRJdGVtQ2FjaGUsXG5cdEl0ZW1FbnRyeVNlcnZpY2UsXG5cdEl0ZW1IYW5kbGVyLFxuXHRJdGVtUmVxdWVzdFNlcnZpY2UsXG5cdEtleVNlcnZpY2UsXG5cdExvY2FsQ2FjaGUsXG5cdFF1ZXJ5U2VydmljZVxufSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgQ29sdW1uU2V0RmFjdG9yeSwgTG9jYWxDYWNoZUZhY3RvcnksIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnlcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcbmltcG9ydCB7XG5cdEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxuXHRBdXRoSW50ZXJmYWNlLFxuXHRFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRQcm9taXNlSW50ZXJmYWNlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwLFxuXHRDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcCxcblx0Q3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0SXRlbURlZmluaXRpb24sXG5cdEl0ZW1JZCxcblx0SXRlbUlkQ29udmVyc2lvbk1hcCxcblx0SXRlbU9wdGlvbnMsXG5cdEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwLFxuXHRJdGVtVHlwZSxcblx0U3RhdGVLZXlUeXBlLFxuXHRUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwLFxuXHRUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwXG59IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBJdGVtQWRtaW5pc3RyYXRvciB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcblx0XHRwcml2YXRlIGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlOiBDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLFxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgaXRlbUVudHJ5U2VydmljZTogSXRlbUVudHJ5U2VydmljZSxcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcblx0XHRwcml2YXRlIGl0ZW1SZXF1ZXN0U2VydmljZTogSXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVGYWN0b3J5OiBMb2NhbENhY2hlRmFjdG9yeSxcblx0XHRwcml2YXRlIGxvY2FsQ2FjaGVNYW5hZ2VyOiBMb2NhbENhY2hlTWFuYWdlckludGVyZmFjZSxcblx0XHRwcml2YXRlIG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0cHJpdmF0ZSBwcm9taXNlSW50ZXJmYWNlOiBQcm9taXNlSW50ZXJmYWNlLFxuXHRcdHByaXZhdGUgcXVlcnlTZXJ2aWNlOiBRdWVyeVNlcnZpY2Vcblx0KSB7XG5cblx0fVxuXG5cdC8vIHN0YXRlS2V5IGNhbiBiZSBhIGtleXdvcmQgb3IgYSBsb2NhbCBpZCAoaW4gY2FzZSBvZiBhIHJlZnJlc2gpXG5cdGdldEl0ZW1EZWZpbml0aW9uIChpdGVtVHlwZTogSXRlbVR5cGUsIHN0YXRlS2V5OiBudW1iZXIgfCBzdHJpbmcsIG9wdGlvbnM6IEl0ZW1PcHRpb25zKTogSXRlbURlZmluaXRpb24ge1xuXHRcdGNvbnN0IHBhcnNlZFN0YXRlS2V5ID0gdGhpcy5rZXlTZXJ2aWNlLnBhcnNlU3RhdGVLZXkoPHN0cmluZz4gc3RhdGVLZXkpO1xuXG5cdFx0aWYgKHBhcnNlZFN0YXRlS2V5ID09PSBudWxsKVxuXHRcdFx0cmV0dXJuIHtpdGVtVHlwZTogaXRlbVR5cGUsIGl0ZW1JZDogPG51bWJlcj4gc3RhdGVLZXksIG9wdGlvbnM6IG9wdGlvbnMsIGlzTmV3OiBmYWxzZX07XG5cblx0XHRsZXQgaXRlbUlkO1xuXG5cdFx0c3dpdGNoIChwYXJzZWRTdGF0ZUtleS50eXBlKSB7XG5cdFx0XHRjYXNlIFN0YXRlS2V5VHlwZS5OZXc6XG5cdFx0XHRcdC8vIGlmIChzdGF0ZUtleS50ZW1wbGF0ZS5sZW5ndGggPiAwKVxuXHRcdFx0XHQvLyBcdG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID0ge3R5cGU6IHN0YXRlS2V5LnRlbXBsYXRlfTtcblxuXHRcdFx0XHRpdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU3RhdGVLZXlUeXBlLkR1cGxpY2F0ZTpcblx0XHRcdFx0b3B0aW9ucy5kdXBsaWNhdGUgPSBwYXJzZWRTdGF0ZUtleS5pdGVtSWQ7XG5cblx0XHRcdFx0aWYgKG9wdGlvbnMudGVtcGxhdGVPcHRpb25zID09PSB1bmRlZmluZWQpIC8vIHRvZG86IHJlZmFjdG9yIHRoaXNcblx0XHRcdFx0XHRvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyA9IHt9O1xuXG5cdFx0XHRcdGlmIChvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pdGVtID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0b3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuaXRlbSA9IHBhcnNlZFN0YXRlS2V5Lml0ZW1JZDtcblxuXHRcdFx0XHRpdGVtSWQgPSB0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxEdXBsaWNhdGVJZCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRyZXR1cm4ge2l0ZW1UeXBlOiBpdGVtVHlwZSwgaXRlbUlkOiBpdGVtSWQsIG9wdGlvbnM6IG9wdGlvbnMsIGlzTmV3OiB0cnVlfTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25NYXRjaGVyIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGFkZFRvVGFiOiBib29sZWFuKTogQ29sbGVjdGlvbk1hdGNoZXIge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblx0XHRjb25zdCBjb2xsZWN0aW9uTWF0Y2hlciA9IHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChbbG9jYWxDYWNoZS5jb2xsZWN0aW9uc10sIGZhbHNlLCB0cnVlKTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XG5cdFx0XHQvLyB0aGlzIGlzIG9ubHkgcmVsZXZhbnQgaWYgdGhlcmUgYXJlIG5vIGNvbGxlY3Rpb25zIHRvIGFkZCB0aGUgaXRlbSB0bywgYnV0IHdlIHN0aWxsIHdhbnQgdG8gc2F2ZSB0aGUgaXRlbVxuXHRcdFx0aWYgKGFkZFRvVGFiKVxuXHRcdFx0XHRsb2NhbENhY2hlLml0ZW1zLmFkZChpdGVtRW50cnkpO1xuXG5cdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29sbGVjdGlvbk1hdGNoZXI7XG5cdH1cblxuXHRmZXRjaFRpdGxlIChpdGVtVHlwZSwgaXRlbUlkLCBkZWZlclJlcXVlc3QpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtSGFuZGxlci5mZXRjaFRpdGxlKGl0ZW1UeXBlLCBpdGVtSWQsIGRlZmVyUmVxdWVzdCwgdGhpcy5nZXRMb2NhbENhY2hlKCkuaXRlbXMpO1xuXHR9XG5cblx0Z2V0SXRlbUJ5SWQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8SXRlbVJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHRpdGVtSWQsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0Ly8gdG9kbyB0eXBlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAgfCBJdGVtRW50cnlcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShcblx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5saW5rZWQgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdFx0XHRpdGVtRW50cnlSZXNvdXJjZS5tYWluIDpcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeVJlc291cmNlLFxuXHRcdFx0XHRcdG9wdGlvbnMsXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBpdGVtSWRzOiBudW1iZXJbXSwgb3B0aW9uczogYW55KTogUHJvbWlzZTxJdGVtUmVzb3VyY2VbXT4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLml0ZW1IYW5kbGVyLmZldGNoSXRlbXMoXG5cdFx0XHRpdGVtVHlwZSxcblx0XHRcdGl0ZW1JZHMsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0KGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2VzKGl0ZW1FbnRyaWVzLCBvcHRpb25zKTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0SXRlbXNCeVF1ZXJ5IChpdGVtVHlwZTogc3RyaW5nLCBxdWVyeTogYW55LCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuaXRlbUVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHt9O1xuXG5cdFx0cmVxdWVzdENvbHVtbnNbaXRlbVR5cGVdID0gZW50cnlPcHRpb25zLmNvbHVtbnM7XG5cblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5xdWVyeShcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2UuYWRkUGFyZW50Q29uZGl0aW9uKHF1ZXJ5LCBlbnRyeU9wdGlvbnMucGFyZW50KSxcblx0XHRcdHJlcXVlc3RDb2x1bW5zXG5cdFx0KS50aGVuKFxuXHRcdFx0cmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc1Jlc3BvbnNlKFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXSxcblx0XHRcdFx0XHRlbnRyeU9wdGlvbnMucGFyZW50LFxuXHRcdFx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIGVudHJ5T3B0aW9ucy5jb2x1bW5zLCByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSlcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpLnRoZW4oXG5cdFx0XHQoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZXMoaXRlbUVudHJpZXMsIG9wdGlvbnMpO1xuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRnZXREdXBsaWNhdGVCeUlkIChpdGVtVHlwZTogc3RyaW5nLCBkdXBsaWNhdGVJZDogbnVtYmVyLCBvcHRpb25zOiBhbnkpIHtcblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0b3B0aW9ucyA9IHt9O1xuXG5cdFx0b3B0aW9ucy5lZGl0ID0gdHJ1ZTtcblxuXHRcdGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmdldEl0ZW1EZWZpbml0aW9uKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0RHVwbGljYXRlU3RhdGVLZXkoZHVwbGljYXRlSWQpLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5nZXRJdGVtQnlEZWYoZGVmaW5pdGlvbiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSByZXR1cm4gdmFsdWUgaXMgZGVwZW5kZWQgb24gdGhlIHJldHVybiBsaW5rcyBib29sZWFuLiB0cnVlIHJldHVybnMgdGhlIFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAuXG5cdCAqIFRoZSB0eXBlIGhhcyB0byBiZSBhc3NlcnRlZCBhdCB1c2Ugc2luY2UgeW91IG9ubHkga25vdyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVR5cGVcblx0ICogQHBhcmFtIG9wdGlvbnNcblx0ICogQHBhcmFtIHtib29sZWFufSByZXR1cm5MaW5rc1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUm9vdFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxJdGVtUmVzb3VyY2U+IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwPn1cblx0ICovXG5cdGdldE5ld1Jlc291cmNlIChcblx0XHRpdGVtVHlwZTogc3RyaW5nLFxuXHRcdG9wdGlvbnM6IGFueSA9IHt9LFxuXHRcdHJldHVybkxpbmtzOiBib29sZWFuID0gZmFsc2UsXG5cdFx0aXNSb290PzogYm9vbGVhblxuXHQpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZT4gfCBQcm9taXNlPFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRvcHRpb25zLmVkaXQgPSB0cnVlO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtc1xuXHRcdCkudGhlbihcblx0XHRcdChpdGVtRW50cnlSZXNvdXJjZTogVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYWluID0gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UoaXRlbUVudHJ5UmVzb3VyY2UubWFpbiwgb3B0aW9ucywgaXNSb290LCB0cnVlKTtcblx0XHRcdFx0Y29uc3QgbGlua2VkID0gdGhpcy5wcm9jZXNzTGlua2VkSXRlbXMoaXRlbUVudHJ5UmVzb3VyY2UubGlua2VkLCBvcHRpb25zLCB0cnVlKTsgLy8gZG8gdGhpcyBiZWZvcmVoYW5kXG5cblx0XHRcdFx0cmV0dXJuIHJldHVybkxpbmtzID8ge21haW46IG1haW4sIGxpbmtlZDogbGlua2VkfSA6IG1haW47XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldENvbGxlY3Rpb25EZWYgKGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRpdGVtVHlwZTogaXRlbVR5cGUsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksIC8vIHdlIG5lZWQgdGhlIGRlZmF1bHQgY29sdW1uIHZhbHVlXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRGVmIChsaW5rVHlwZTogc3RyaW5nLCBsaW5rSWRBcnJheTogbnVtYmVyW10sIGl0ZW1UeXBlOiBzdHJpbmcsIGxpbmtGaWVsZDogc3RyaW5nLCBvcHRpb25zOiBhbnkpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0aXRlbVR5cGU6IGl0ZW1UeXBlLFxuXHRcdFx0bGlua1R5cGU6IGxpbmtUeXBlLFxuXHRcdFx0bGlua0lkQXJyYXk6IGxpbmtJZEFycmF5LFxuXHRcdFx0bGlua0ZpZWxkOiBsaW5rRmllbGQsXG5cdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdGVudHJ5OiB0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRcdHJlc291cmNlOiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbiAoaXRlbVR5cGU6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2U+IHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdFx0XHRlbnRyeSxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q29sbGVjdGlvbkZyb21EZWYgKGRlZmluaXRpb246IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLml0ZW1UeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5vcHRpb25zLmVudHJ5LFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHRlbnRyeSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShlbnRyeSwgZGVmaW5pdGlvbi5vcHRpb25zLnJlc291cmNlKTtcblxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQsIHVzZSBgcGFyZW50YCBpbiBvcHRpb25zXG5cdCAqL1xuXHRnZXRMaW5rQ29sbGVjdGlvbiAobGlua1R5cGU6IHN0cmluZywgbGlua0lkOiBudW1iZXIsIGl0ZW1UeXBlOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8Q29sbGVjdGlvblJlc291cmNlPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IGVudHJ5T3B0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdGVudHJ5T3B0aW9ucy5wYXJlbnQgPSB7aXRlbVR5cGU6IGxpbmtUeXBlLCBpdGVtSWQ6IGxpbmtJZH07XG5cblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0aW9uSGFuZGxlci5mZXRjaChcblx0XHRcdGl0ZW1UeXBlLFxuXHRcdFx0ZW50cnlPcHRpb25zLFxuXHRcdFx0bG9jYWxDYWNoZS5pdGVtcyxcblx0XHRcdGxvY2FsQ2FjaGUuY29sbGVjdGlvbnMsXG5cdFx0XHRsb2NhbENhY2hlLmRlZmVycmVkQ29sbGVjdGlvbnNcblx0XHQpLnRoZW4oXG5cdFx0XHQoZW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoXG5cdFx0XHRcdFx0ZW50cnksXG5cdFx0XHRcdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldExpbmtDb2xsZWN0aW9ucyAobGlua1R5cGU6IHN0cmluZywgbGlua0lkQXJyYXk6IG51bWJlcltdLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25SZXNvdXJjZVBhcmVudElkTWFwPiB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRsaW5rVHlwZSxcblx0XHRcdGxpbmtJZEFycmF5LFxuXHRcdFx0aXRlbVR5cGUsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXApID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucylcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0TGlua0NvbGxlY3Rpb25zRnJvbURlZiAoZGVmaW5pdGlvbjogYW55KTogUHJvbWlzZTxDb2xsZWN0aW9uUmVzb3VyY2VQYXJlbnRJZE1hcD4ge1xuXHRcdGNvbnN0IGxvY2FsQ2FjaGUgPSB0aGlzLmdldExvY2FsQ2FjaGUoKTtcblxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmJhdGNoRmV0Y2goXG5cdFx0XHRkZWZpbml0aW9uLmxpbmtUeXBlLFxuXHRcdFx0ZGVmaW5pdGlvbi5saW5rSWRBcnJheSxcblx0XHRcdGRlZmluaXRpb24uaXRlbVR5cGUsXG5cdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMuZW50cnksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9ucyxcblx0XHRcdGxvY2FsQ2FjaGUuZGVmZXJyZWRDb2xsZWN0aW9uc1xuXHRcdCkudGhlbihcblx0XHRcdChjb2xsZWN0aW9uRW50cmllczogQ29sbGVjdGlvbkVudHJ5W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2FsQ2FjaGUuY3JlYXRlQ29sbGVjdGlvblJlc291cmNlcyhcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50cmllcyxcblx0XHRcdFx0XHRkZWZpbml0aW9uLm9wdGlvbnMucmVzb3VyY2Vcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHQpO1xuXHR9XG5cblx0Z2V0QWxsTGlua0NvbGxlY3Rpb25zIChsaW5rVHlwZTogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBQcm9taXNlPENvbGxlY3Rpb25FbnRyeVBhcmVudElkTWFwPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkobGlua1R5cGUsIHt9LCB7fSlcblx0XHRcdC50aGVuKFxuXHRcdFx0XHRyZXNwb25zZSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0TGlua0NvbGxlY3Rpb25zKFxuXHRcdFx0XHRcdFx0bGlua1R5cGUsXG5cdFx0XHRcdFx0XHRyZXNwb25zZS5saW5rc1tsaW5rVHlwZV0sXG5cdFx0XHRcdFx0XHRpdGVtVHlwZSxcblx0XHRcdFx0XHRcdG9wdGlvbnNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3Rcblx0XHRcdCk7XG5cdH1cblxuXHRnZXRJdGVtQnlEZWYgKGRlZmluaXRpb246IEl0ZW1EZWZpbml0aW9uLCBpc1Jvb3Q/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUhhbmRsZXIuZmV0Y2hJdGVtKFxuXHRcdFx0ZGVmaW5pdGlvbi5pdGVtVHlwZSxcblx0XHRcdGRlZmluaXRpb24uaXRlbUlkLFxuXHRcdFx0dGhpcy5pdGVtRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKGRlZmluaXRpb24ub3B0aW9ucyksXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zXG5cdFx0KS50aGVuKFxuXHRcdFx0aXRlbUVudHJ5Q29tcG91bmQgPT4ge1xuXHRcdFx0XHRsZXQgbWFpbkVudHJ5OiBJdGVtRW50cnk7XG5cblx0XHRcdFx0aWYgKGl0ZW1FbnRyeUNvbXBvdW5kIGluc3RhbmNlb2YgSXRlbUVudHJ5KVxuXHRcdFx0XHRcdG1haW5FbnRyeSA9IGl0ZW1FbnRyeUNvbXBvdW5kO1xuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnByb2Nlc3NMaW5rZWRJdGVtcyhpdGVtRW50cnlDb21wb3VuZC5saW5rZWQsIGRlZmluaXRpb24ub3B0aW9ucywgZmFsc2UpO1xuXHRcdFx0XHRcdG1haW5FbnRyeSA9IGl0ZW1FbnRyeUNvbXBvdW5kLm1haW47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobWFpbkVudHJ5LCBkZWZpbml0aW9uLm9wdGlvbnMsIGlzUm9vdCwgZGVmaW5pdGlvbi5pc05ldyk7IC8vIGlzUm9vdFxuXHRcdFx0fSxcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxuXHRcdCk7XG5cdH1cblxuXHRjbG9uZUl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlLCBvcHRpb25zOiBhbnkpOiBJdGVtUmVzb3VyY2Uge1xuXHRcdHJldHVybiB0aGlzLmFkZFNpbmdsZUl0ZW0oaXRlbVJlc291cmNlLmVudHJ5LmNsb25lKCksIG9wdGlvbnMsIGZhbHNlKTtcblx0fVxuXG5cdGNsb25lQ29sbGVjdGlvbiAoY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UsIG9wdGlvbnM6IGFueSwgY29udmVyc2lvbk1hcDogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRsZXQgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG5cblx0XHRpZiAocGFyZW50ID09PSB1bmRlZmluZWQpXG5cdFx0XHRwYXJlbnQgPSBudWxsO1xuXG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdGNvbGxlY3Rpb25SZXNvdXJjZS5lbnRyeS5jbG9uZShwYXJlbnQsIGNvbnZlcnNpb25NYXApLFxuXHRcdFx0b3B0aW9uc1xuXHRcdCk7XG5cdH1cblxuXHRzYXZlQ3VycmVudExvY2FsQ2FjaGUgKFxuXHRcdGNsb3NlVGFiPzogYm9vbGVhbixcblx0XHRwYXJhbWV0ZXJzPzogQ3JlYXRlUmVxdWVzdFBhcmFtZXRlck1hcCxcblx0XHRicmVha3VwQnlQYXJlbnQ/OiBib29sZWFuLFxuXHRcdG9uQWZ0ZXJDcmVhdGVDYWxsYmFjaz86IChjb252ZXJzaW9uTWFwOiBJdGVtSWRDb252ZXJzaW9uTWFwKSA9PiB2b2lkXG5cdCkge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5zYXZlKGNsb3NlVGFiLCBwYXJhbWV0ZXJzLCBicmVha3VwQnlQYXJlbnQsIG9uQWZ0ZXJDcmVhdGVDYWxsYmFjayk7XG5cdH1cblxuXHRnZXRDdXJyZW50Q29sbGVjdGlvbnMgKCk6IENvbGxlY3Rpb25DYWNoZSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLmNvbGxlY3Rpb25zO1xuXHR9XG5cblx0Z2V0Q3VycmVudEl0ZW1zICgpOiBJdGVtQ2FjaGUge1xuXHRcdHJldHVybiB0aGlzLmdldExvY2FsQ2FjaGUoKS5pdGVtcztcblx0fVxuXG5cdGdldEN1cnJlbnRDaGFuZ2VzICgpIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cblx0XHRpZiAobG9jYWxDYWNoZS5yb290SXRlbSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpdGVtQWRtaW5pc3RyYXRvcjogTm8gcm9vdCBpdGVtIGZvciBsb2NhbCBjYWNoZSAnICsgbG9jYWxDYWNoZS5pZCk7XG5cblx0XHRyZXR1cm4gdGhpcy5tb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LmNvbnN0cnVjdChcblx0XHRcdGxvY2FsQ2FjaGUucm9vdEl0ZW0sXG5cdFx0XHRsb2NhbENhY2hlLml0ZW1zLFxuXHRcdFx0bG9jYWxDYWNoZS5jb2xsZWN0aW9uc1xuXHRcdCkucHJvY2VzcygpO1xuXHR9XG5cblx0YWRkU2luZ2xlSXRlbSAoXG5cdFx0aXRlbUVudHJ5OiBJdGVtRW50cnksXG5cdFx0b3B0aW9uczogSXRlbU9wdGlvbnMsXG5cdFx0aXNSb290PzogYm9vbGVhbixcblx0XHRsb2NhbENhY2hlOiBMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKClcblx0KTogSXRlbVJlc291cmNlIHtcblx0XHRyZXR1cm4gbG9jYWxDYWNoZS5jcmVhdGVJdGVtUmVzb3VyY2UobG9jYWxDYWNoZS5pdGVtcy5hZGQoaXRlbUVudHJ5KSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdGFkZFNpbmdsZUl0ZW1zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zKSB7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMuZ2V0TG9jYWxDYWNoZSgpO1xuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcblxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgZmFsc2UsIGxvY2FsQ2FjaGUpKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRhZGRDb2xsZWN0aW9uIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgb3B0aW9uczogYW55KTogQ29sbGVjdGlvblJlc291cmNlIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbkNhY2hlID0gbG9jYWxDYWNoZS5jb2xsZWN0aW9ucztcblxuXHRcdGNvbGxlY3Rpb25DYWNoZS5hZGQoY29sbGVjdGlvbkVudHJ5KTtcblxuXHRcdHJldHVybiBsb2NhbENhY2hlLmNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZShcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKVxuXHRcdCk7XG5cdH1cblxuXHRwcm9jZXNzTGlua2VkSXRlbXMgKFxuXHRcdGxpbmtlZEVudHJpZXM6IFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBbXSxcblx0XHRvcHRpb25zOiBJdGVtT3B0aW9ucyxcblx0XHRhZGRUb0NvbGxlY3Rpb25zOiBib29sZWFuXG5cdCk6IEl0ZW1SZXNvdXJjZUl0ZW1UeXBlTWFwIHtcblx0XHRjb25zdCBsb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5rZWRFbnRyaWVzKSB7XG5cdFx0XHRjb25zdCBpdGVtVHlwZSA9IGVudHJ5Lml0ZW1UeXBlO1xuXHRcdFx0Y29uc3QgaXRlbUVudHJpZXMgPSBlbnRyeS5pdGVtRW50cmllcztcblx0XHRcdGxldCBjb2xsZWN0aW9uTWF0Y2hlcjtcblxuXHRcdFx0aWYgKGFkZFRvQ29sbGVjdGlvbnMpXG5cdFx0XHRcdGNvbGxlY3Rpb25NYXRjaGVyID0gdGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkuY29uc3RydWN0KFtsb2NhbENhY2hlLmNvbGxlY3Rpb25zXSwgZmFsc2UsIGZhbHNlKTtcblxuXHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0gPSBbXTtcblxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcblx0XHRcdFx0aXRlbVJlc291cmNlc1tpdGVtVHlwZV0ucHVzaChsb2NhbENhY2hlLmNyZWF0ZUl0ZW1SZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMpKTtcblxuXHRcdFx0XHRpZiAoYWRkVG9Db2xsZWN0aW9ucylcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5leHBhbmQoaXRlbUVudHJ5KTtcblxuXHRcdFx0XHRpZiAoaXRlbVR5cGUgPT09ICdQcm9qZWN0bm90aXRpZScpIHtcblx0XHRcdFx0XHRjcmVhdGVQYXRoKFxuXHRcdFx0XHRcdFx0bG9jYWxDYWNoZS50YWJSZXF1ZXN0UGFyYW1ldGVycyxcblx0XHRcdFx0XHRcdFtpdGVtRW50cnkuaXRlbVR5cGUsIGl0ZW1FbnRyeS5pdGVtSWRdLFxuXHRcdFx0XHRcdFx0W3t9LCB7bm9fbm90aWZpY2F0aW9uOiB0cnVlfV1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHRoZSBpdGVtRW50cmllcyBhcmUgaW4gdG9wLWRvd24gb3JkZXIsIHNvIGNhbGwgZm9yIGVhY2ggaXRlbSB0eXBlIHNlcGFyYXRlbHlcblx0XHRcdGlmIChhZGRUb0NvbGxlY3Rpb25zKVxuXHRcdFx0XHRjb2xsZWN0aW9uTWF0Y2hlci5hZGRUb0NvbGxlY3Rpb25zKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XG5cdH1cblxuXHRnZXRMb2NhbENhY2hlICgpOiBMb2NhbENhY2hlIHtcblx0XHRyZXR1cm4gdGhpcy5sb2NhbENhY2hlTWFuYWdlci5nZXRDdXJyZW50TG9jYWxDYWNoZSh0aGlzLmF1dGhJbnRlcmZhY2UuZ2V0VW5pcXVlVXNlcklkKCkpO1xuXHR9XG5cblx0cmVzZXRMb2NhbENhY2hlICgpIHtcblx0XHRjb25zdCBvbGRMb2NhbENhY2hlID0gdGhpcy5nZXRMb2NhbENhY2hlKCk7XG5cdFx0Y29uc3QgbG9jYWxDYWNoZSA9IHRoaXMubG9jYWxDYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XG5cblx0XHRvbGRMb2NhbENhY2hlLmNsZWFyUmVzb3VyY2VzKCk7XG5cblx0XHR0aGlzLmxvY2FsQ2FjaGVNYW5hZ2VyLnNldEN1cnJlbnRMb2NhbENhY2hlKHRoaXMuYXV0aEludGVyZmFjZS5nZXRVbmlxdWVVc2VySWQoKSwgbG9jYWxDYWNoZSk7XG5cdH1cblxuXHRhZGRUb0NvbGxlY3Rpb25zIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSkge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxlY3Rpb25NYXRjaGVyKGl0ZW1FbnRyaWVzLCB0cnVlKVxuXHRcdFx0LmFkZFRvQ29sbGVjdGlvbnMocmVzdWx0Q29sbGVjdGlvblJlc291cmNlKTtcblx0fVxuXG5cdHJlbW92ZUZyb21Db2xsZWN0aW9ucyAoaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLCByZXN1bHRDb2xsZWN0aW9uUmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsZWN0aW9uTWF0Y2hlcihpdGVtRW50cmllcywgZmFsc2UpXG5cdFx0XHQucmVtb3ZlRnJvbUNvbGxlY3Rpb25zKHJlc3VsdENvbGxlY3Rpb25SZXNvdXJjZSk7XG5cdH1cblxuXHRzYXZlTG9jYWwgKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gaXRlbVJlc291cmNlLmVudHJ5O1xuXG5cdFx0aXRlbUVudHJ5LnNldERpc3BsYXlOYW1lKCk7XG5cdFx0dGhpcy5hZGRUb0NvbGxlY3Rpb25zKFtpdGVtRW50cnldKTtcblxuXHRcdHJldHVybiB0aGlzLnByb21pc2VJbnRlcmZhY2Uud2hlbihpdGVtUmVzb3VyY2UpO1xuXHR9XG5cblx0dXBkYXRlSXRlbUlkTWFwIChjb2xsZWN0aW9uTWFwOiBhbnksIGNvbnZlcnNpb25NYXApIHtcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0Zm9yIChjb25zdCBvbGRJZCBpbiBjb252ZXJzaW9uTWFwKSB7XG5cdFx0XHRjb25zdCBuZXdJZCA9IGNvbnZlcnNpb25NYXBbb2xkSWRdO1xuXG5cdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtvbGRJZF0gPT09IHVuZGVmaW5lZClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdGNvbGxlY3Rpb25NYXBbbmV3SWRdID0gY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0XHRkZWxldGUgY29sbGVjdGlvbk1hcFtvbGRJZF07XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlQ29sbGVjdGlvblJlc291cmNlIChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zOiBhbnksIHByb2Nlc3NPcHRpb25zID0gdHJ1ZSk6IENvbGxlY3Rpb25SZXNvdXJjZSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkQ29sbGVjdGlvbihcblx0XHRcdGNvbGxlY3Rpb25FbnRyeSxcblx0XHRcdHByb2Nlc3NPcHRpb25zID8gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKHJlc291cmNlT3B0aW9ucykgOiByZXNvdXJjZU9wdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlSXRlbVJlc291cmNlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgb3B0aW9uczogYW55LCBpc1Jvb3Q6IGJvb2xlYW4pIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRTaW5nbGVJdGVtKGl0ZW1FbnRyeSwgb3B0aW9ucywgaXNSb290KTtcblx0fVxuXG5cdG9uQmVmb3JlU2F2ZSAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uQmVmb3JlU2F2ZScsIGtleSwgY2FsbGJhY2spO1xuXHR9XG5cblx0b25TYXZlU3VjY2VzcyAoa2V5OiBzdHJpbmcsIGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxDYWNoZSgpLnJlZ2lzdGVyQ2FsbGJhY2soJ29uU2F2ZVN1Y2Nlc3MnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxuXG5cdG9uU2F2ZVdpdGhvdXRDbG9zaW5nIChrZXk6IHN0cmluZywgY2FsbGJhY2spIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbENhY2hlKCkucmVnaXN0ZXJDYWxsYmFjaygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBrZXksIGNhbGxiYWNrKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUXVlcnlNYXRjaGVyRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUNhY2hlIHtcclxuXHRlbnRyaWVzOiB7XHJcblx0XHRbaXRlbVR5cGU6IHN0cmluZ106IHtcclxuXHRcdFx0W2l0ZW1JZDogbnVtYmVyXTogSXRlbUVudHJ5XHJcblx0XHR9XHJcblx0fSA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHNvbWUgKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4pIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRpZiAoY2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKSlcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlJdGVtVHlwZSAoaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XHJcblx0XHRjb25zdCBlbnRyaWVzID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAoZW50cmllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKGVudHJpZXNbaXRlbUlkXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldEJ5UXVlcnkgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcXVlcnkpIHtcclxuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXNbaXRlbVR5cGVdO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGlmIChlbnRyaWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gZW50cmllcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyaWVzW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmICh0aGlzLm1hdGNoUXVlcnkoaXRlbUVudHJ5LCBxdWVyeSkpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxCeVF1ZXJ5IChpdGVtVHlwZTogSXRlbVR5cGUsIHF1ZXJ5KSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgaW5zdGFuY2VvZiBJdGVtRW50cnkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRpZiAodGhpcy5tYXRjaFF1ZXJ5KGl0ZW1FbnRyeSwgcXVlcnkpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZvckVhY2ggKGNhbGxiYWNrOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IHZvaWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0Y2FsbGJhY2sodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvQXJyYXkgKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5lbnRyaWVzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pXHJcblx0XHRcdFx0cmVzdWx0LnB1c2godGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0YWRkIChpdGVtRW50cnk6IEl0ZW1FbnRyeSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHR0aGlzLmVudHJpZXNbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRnZXQgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQgfCBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0aGlzLmVudHJpZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHQvLyBzaG91bGQgYmUgZmFzdFxyXG5cdGNvbnRhaW5zIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50cmllc1tpdGVtVHlwZV1baXRlbUlkXSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Z2V0QnlQYXJlbnQgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBpdGVtVHlwZTogSXRlbVR5cGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5lbnRyaWVzW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIHRoaXMuZW50cmllc1tpdGVtVHlwZV0pIHtcclxuXHRcdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBpdGVtRW50cnkucGFyZW50O1xyXG5cclxuXHRcdFx0aWYgKHBhcmVudCA9PT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRcdGlmIChwYXJlbnRUeXBlID09PSBwYXJlbnQuaXRlbVR5cGUgJiYgcGFyZW50SWQgPT0gcGFyZW50Lml0ZW1JZClcclxuXHRcdFx0XHRyZXN1bHQucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtSWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvbGRJdGVtSWQpIHtcclxuXHRcdGNvbnN0IGVudHJ5TWFwID0gdGhpcy5lbnRyaWVzW2l0ZW1FbnRyeS5pdGVtVHlwZV07XHJcblxyXG5cdFx0ZGVsZXRlIGVudHJ5TWFwW29sZEl0ZW1JZF07XHJcblx0XHRyZXR1cm4gZW50cnlNYXBbaXRlbUVudHJ5Lml0ZW1JZF0gPSBpdGVtRW50cnk7XHJcblx0fVxyXG5cclxuXHRjbGVhciAoaXRlbUVudHJ5OiBJdGVtRW50cnkpOiBib29sZWFuIHtcclxuXHRcdGlmIChpdGVtRW50cnkgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLmVudHJpZXMgPSB7fTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gZGVsZXRlIHRoaXMuZW50cmllc1tpdGVtRW50cnkuaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxuXHJcblx0bWF0Y2hRdWVyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHF1ZXJ5KTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0aXRlbUVudHJ5Lml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtRW50cnkuZ2V0RmllbGRzKCksXHJcblx0XHRcdGl0ZW1FbnRyeS5wYXJlbnRcclxuXHRcdCkubWF0Y2hRdWVyeShxdWVyeS5vYmplY3QpID09PSB0cnVlOyAvLyBUT0RPOiBtYXliZT9cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgS2V5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5U2VydmljZSB7XHJcblx0Ly8gdG9kbzogdHJhbnNsYXRlXHJcblx0dW5kZWZpbmVkSXRlbUVycm9yID0gJ0hldCBvcGdldnJhYWdkZSBpdGVtIGJlc3RhYXQgbmlldCAvIEplIGhlYnQgbmlldCB2b2xkb2VuZGUgcmVjaHRlbiBvbSBkaXQgaXRlbSB0ZSBiZWtpamtlbic7XHJcblx0QUxMX1BFUk1JU1NJT05TID0gNztcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0cHJvY2Vzc09wdGlvbnMgKG9wdGlvbnMpIHtcclxuXHRcdHJldHVybiBzaGFsbG93TWVyZ2UoXHJcblx0XHRcdG9wdGlvbnMsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb2x1bW5zOiB0cnVlLFxyXG5cdFx0XHRcdHBhcmVudDogbnVsbCxcclxuXHRcdFx0XHR0ZW1wbGF0ZU9wdGlvbnM6IHt9LFxyXG5cdFx0XHRcdHRlbXBsYXRlQ29sdW1uczoge30sXHJcblx0XHRcdFx0ZGVmZXJSZXF1ZXN0OiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBkb0V4dGVuZCA9IGZhbHNlLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpIHtcclxuXHRcdGNvbnN0IGFwaUl0ZW1JZCA9IGFwaVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXTtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbUlkQ29udmVyc2lvbk1hcCA9IHt9O1xyXG5cclxuXHRcdHJlc3VsdFtpdGVtVHlwZV0gPSB7fTtcclxuXHRcdHJlc3VsdFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IGl0ZW1JZDtcclxuXHJcblx0XHRpZiAoZG9FeHRlbmQpXHJcblx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCByZXN1bHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmRMb2NhbENvbnZlcnNpb25NYXAgKHBhcmVudFR5cGU6IEl0ZW1UeXBlLCBwYXJlbnRJZDogSXRlbUlkLCBhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UsIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGxpbmtzID0gYXBpUmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV1bcGFyZW50SWRdLmxpbmtzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gbGlua3MpIHtcclxuXHRcdFx0Y29uc3QgaWRBcnJheSA9IGxpbmtzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChjb252ZXJzaW9uTWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0Y29udmVyc2lvbk1hcFtpdGVtVHlwZV1bYXBpSXRlbUlkXSA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBhcGlJdGVtSWQsIGFwaVJlc3BvbnNlLCBjb252ZXJzaW9uTWFwKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29udmVyc2lvbk1hcCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAsIG5ld0l0ZW1JZD86IEl0ZW1JZCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGxldCBjb252ZXJzaW9uTWFwRW50cnk7XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbnZlcnNpb25NYXBbaXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0Y29udmVyc2lvbk1hcEVudHJ5ID0gY29udmVyc2lvbk1hcFtpdGVtVHlwZV07XHJcblxyXG5cdFx0aWYgKGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwRW50cnlbaXRlbUlkXTtcclxuXHJcblx0XHRpZiAobmV3SXRlbUlkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdG5ld0l0ZW1JZCA9IHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCk7XHJcblxyXG5cdFx0cmV0dXJuIGNvbnZlcnNpb25NYXBFbnRyeVtpdGVtSWRdID0gbmV3SXRlbUlkO1xyXG5cdH1cclxuXHJcblx0YmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKVxyXG5cdFx0XHR0aGlzLmV4cGFuZENvbnZlcnNpb25NYXAoaXRlbUVudHJ5LCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRyZXR1cm4gY29udmVyc2lvbk1hcDtcclxuXHR9XHJcblxyXG5cdGdldENvbnZlcnNpb25WYWx1ZSAoaXRlbVR5cGUsIGl0ZW1JZCwgbWFwKSB7XHJcblx0XHRpZiAobWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBtYXBbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRiYXRjaENsb25lIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSkge1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHRoZSB0aGUgaXRlbXMgbWlnaHQgcmVmZXJlbmNlIGVhY2ggb3RoZXIsIHNvIHVwZGF0ZSB0aGUgY29udmVyc2lvbiBtYXAgZmlyc3RcclxuXHRcdHRoaXMuYmF0Y2hFeHBhbmRDb252ZXJzaW9uTWFwKGl0ZW1FbnRyaWVzLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcylcclxuXHRcdFx0cmVzdWx0LnB1c2goaXRlbUVudHJ5LmNsb25lKGNvbnZlcnNpb25NYXApKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbE5hbWUgKGZpcnN0TmFtZSwgaW5maXgsIGxhc3ROYW1lKSB7XHJcblx0XHRyZXR1cm4gZmlyc3ROYW1lLnRyaW0oKVxyXG5cdFx0XHQuY29uY2F0KCcgJywgaW5maXgpLnRyaW0oKSAvLyBpbmZpeCBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXHJcblx0XHRcdC5jb25jYXQoJyAnLCBsYXN0TmFtZSk7XHJcblx0fVxyXG5cclxuXHRnZXRUaXRsZUZpZWxkIChpdGVtVHlwZSkge1xyXG5cdFx0c3dpdGNoIChpdGVtVHlwZSkge1xyXG5cdFx0XHRjYXNlICdFeGVtcGxhYXInOlxyXG5cdFx0XHRcdHJldHVybiAnc2VyaWVudW1tZXInO1xyXG5cdFx0XHRjYXNlICdGYWN0dXVyJzpcclxuXHRcdFx0XHRyZXR1cm4gJ251bW1lcic7XHJcblx0XHRcdGNhc2UgJ0ZpbGVzJzpcclxuXHRcdFx0XHRyZXR1cm4gJ2ZyaWVuZGx5bmFtZSc7XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWUnOlxyXG5cdFx0XHRjYXNlICdTdGFuZGFhcmRmdW5jdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW1pbnRlcm4nO1xyXG5cdFx0XHRjYXNlICdWb29ycmFhZG11dGF0aWUnOlxyXG5cdFx0XHRcdHJldHVybiAnb21zY2hyaWp2aW5nJztcclxuXHRcdFx0Y2FzZSAnQmFyY29kZSc6XHJcblx0XHRcdFx0cmV0dXJuICdjb2RlJztcclxuXHRcdFx0Y2FzZSAnQmV0YWFsbWlkZGVsJzpcclxuXHRcdFx0Y2FzZSAnQmV0YWxpbmdzY29uZGl0aWUnOlxyXG5cdFx0XHRjYXNlICdCcmllZnBhcGllcic6XHJcblx0XHRcdGNhc2UgJ1RheENsYXNzJzpcclxuXHRcdFx0Y2FzZSAnVGF4U2NoZW1hJzpcclxuXHRcdFx0Y2FzZSAnQ29uZGl0aW9uJzpcclxuXHRcdFx0Y2FzZSAnRmFjdHV1cm1vbWVudCc6XHJcblx0XHRcdGNhc2UgJ0Z1bmN0aWVncm9lcCc6XHJcblx0XHRcdGNhc2UgJ0dyb290Ym9layc6XHJcblx0XHRcdGNhc2UgJ0luaHV1cic6XHJcblx0XHRcdGNhc2UgJ0luaHV1cmdyb2VwJzpcclxuXHRcdFx0Y2FzZSAnSW5odXVybWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsJzpcclxuXHRcdFx0Y2FzZSAnTWF0ZXJpYWFsQ2F0JzpcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcnRhcmllZic6XHJcblx0XHRcdGNhc2UgJ05vdGl0aWUnOlxyXG5cdFx0XHRjYXNlICdQbGFubmluZ21hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ1Byb2plY3QnOlxyXG5cdFx0XHRjYXNlICdTdGFmZmVsZ3JvZXAnOlxyXG5cdFx0XHRjYXNlICdTdWJwcm9qZWN0JzpcclxuXHRcdFx0Y2FzZSAnVGFhayc6XHJcblx0XHRcdGNhc2UgJ1RhZyc6XHJcblx0XHRcdGNhc2UgJ1RlbXBsYXRlJzpcclxuXHRcdFx0Y2FzZSAnVGlqZCc6XHJcblx0XHRcdGNhc2UgJ1RpdGVsJzpcclxuXHRcdFx0Y2FzZSAnVHlwZSc6XHJcblx0XHRcdGNhc2UgJ1ZvZXJ0dWlnJzpcclxuXHRcdFx0XHRyZXR1cm4gJ25hYW0nO1xyXG5cdFx0XHQvLyBjYXNlICdDb250YWN0JzpcclxuXHRcdFx0Ly8gY2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdC8vIGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0Ly8gb25seSB1c2UgZGlzcGxheW5hbWUgZm9yIGl0ZW1zIHRoYXQgZG9udCd0IGhhdmUgYSBzaW1wbGUsIHdyaXRhYmxlIG5hbWUgZmllbGRcclxuXHRcdFx0XHQvLyB0aGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCBmb3IgdGVtcGxhdGVkIGl0ZW1zXHJcblx0XHRcdFx0cmV0dXJuICdkaXNwbGF5bmFtZSc7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3IsXHJcblx0QmF0Y2hTdGF0dXMsXHJcblx0Q29sdW1uSGFuZGxlcixcclxuXHRDb2x1bW5VdGlsLFxyXG5cdEl0ZW1DYWNoZSxcclxuXHRJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdEtleVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRU5UUllfU1RBVFVTIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXHJcblx0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuXHRBcGlSZXNwb25zZSwgQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCwgRW50cnlTdGF0dXMsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zLFxyXG5cdFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXAsIFRlbXBsYXRlUmVzcG9uc2VMaW5rZWRJdGVtRW50cnlNYXBcclxufSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiB9IGZyb20gJy4vQ29sdW1uRXhwYW5zaW9uJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0IH0gZnJvbSAnLi9Db2x1bW5TZXQnO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSwgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG4vLyB0b2RvIG1ha2UgY2xhc3NcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtSGFuZGxlciB7XHJcblx0ZW50cmllczogSXRlbUNhY2hlO1xyXG5cdHRlbXBsYXRlczogQXBpVGVtcGxhdGVJdGVtVHlwZU1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkhhbmRsZXI6IENvbHVtbkhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGJhdGNoU3RhdHVzRmFjdG9yeTogQmF0Y2hTdGF0dXNGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlTZXJ2aWNlOiBJdGVtRW50cnlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgY29sdW1uVXRpbDogQ29sdW1uVXRpbFxyXG5cdCkge1xyXG5cdFx0dGhpcy5lbnRyaWVzID0gdGhpcy5pdGVtQ2FjaGVGYWN0b3J5LmNvbnN0cnVjdCgpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hJdGVtIChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkLCBvcHRpb25zOiBhbnksIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeSB8IFRlbXBsYXRlUmVzcG9uc2VJdGVtRW50cnlNYXA+IHtcclxuXHRcdGNvbnN0IGVudHJ5U3RhdHVzID0gdGhpcy5nZXRFbnRyeVN0YXR1cyhpdGVtVHlwZSwgaXRlbUlkLCBvcHRpb25zLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSBlbnRyeVN0YXR1cy5lbnRyeTtcclxuXHRcdGNvbnN0IHN0YXR1cyA9IGVudHJ5U3RhdHVzLnN0YXR1cztcclxuXHJcblx0XHRpZiAoc3RhdHVzID09PSBFTlRSWV9TVEFUVVMuTE9DQUwpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZmV0Y2hUZW1wbGF0ZShpdGVtVHlwZSwgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMsIG9wdGlvbnMudGVtcGxhdGVDb2x1bW5zKVxyXG5cdFx0XHRcdC50aGVuKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGUgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlTG9jYWwoaXRlbUVudHJ5LCBvcHRpb25zLnBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdChlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yZXNvbHZlQ2FjaGVkKGl0ZW1FbnRyeSwgc3RhdHVzLCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGl0ZW1UeXBlXHJcblx0ICogQHBhcmFtIGl0ZW1JZHNcclxuXHQgKiBAcGFyYW0gb3B0aW9uc1xyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEl0ZW1FbnRyeVtdPn1cclxuXHQgKlxyXG5cdCAqIEZvciBldmVyeSBpdGVtaWQgZmluZCB0aGUgc3RhdHVzIG9mIHRoZSBJdGVtRW50cnkgYW5kIHJlc29sdmUgdGhlIHByb21pc2VzIHNvIHRoZSByZXN1bHQgaXNcclxuXHQgKiBhIHVzYWJsZSBJdGVtRW50cnlcclxuXHQgKi9cclxuXHJcblx0ZmV0Y2hJdGVtcyAoaXRlbVR5cGUsIGl0ZW1JZHMsIG9wdGlvbnMsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBQcm9taXNlPEl0ZW1FbnRyeVtdPiB7XHJcblx0XHRjb25zdCBiYXRjaFN0YXR1cyA9IHRoaXMuYmF0Y2hTdGF0dXNGYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlXHJcblx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2VzOiBhbnkgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBvZiBpdGVtSWRzKVxyXG5cdFx0XHRiYXRjaFN0YXR1cy5hZGQoPEVudHJ5U3RhdHVzPEl0ZW1FbnRyeT4+IHRoaXMuZ2V0RW50cnlTdGF0dXMoaXRlbVR5cGUsIGl0ZW1JZCwgb3B0aW9ucywgbG9jYWxJdGVtQ2FjaGUpKTtcclxuXHJcblx0XHRwcm9taXNlcy5lbnRyaWVzID0gYmF0Y2hTdGF0dXMuZ2V0UHJvbWlzZXMoKTtcclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzUmVxdWVzdHMoKSlcclxuXHRcdFx0cHJvbWlzZXMucmVxdWVzdHMgPSB0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgYmF0Y2hTdGF0dXMuZ2V0UmVxdWVzdElkcygpLCBvcHRpb25zLmNvbHVtbnMpO1xyXG5cclxuXHRcdGlmIChiYXRjaFN0YXR1cy5oYXNFbnRyaWVzKFtFTlRSWV9TVEFUVVMuTE9DQUxdKSlcclxuXHRcdFx0cHJvbWlzZXMudGVtcGxhdGUgPSB0aGlzLmZldGNoVGVtcGxhdGUoaXRlbVR5cGUsIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLCBvcHRpb25zLnRlbXBsYXRlQ29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKHJlc29sdmVkID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5iYXRjaFJlc29sdmUoaXRlbVR5cGUsIGJhdGNoU3RhdHVzLCBvcHRpb25zLmNvbHVtbnMsIHJlc29sdmVkLCBsb2NhbEl0ZW1DYWNoZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVDYWNoZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBzdGF0dXM6IEVOVFJZX1NUQVRVUywgb3B0aW9ucyk6IFByb21pc2U8SXRlbUVudHJ5PiB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IGl0ZW1FbnRyeS5jb2x1bW5zLnJlcXVlc3Q7XHJcblxyXG5cdFx0c3dpdGNoIChzdGF0dXMpIHtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuQ0FDSEVEOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbUVudHJ5KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuUFJPTUlTRUQ6XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdFx0XHRjYXNlIEVOVFJZX1NUQVRVUy5QUk9NSVNFRF9FWFBBTkQ6XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlLnRoZW4oXHJcblx0XHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVDYWNoZWQoXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKSxcclxuXHRcdFx0XHRcdFx0XHRvcHRpb25zXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSBFTlRSWV9TVEFUVVMuRVhQQU5EOlxyXG5cdFx0XHRcdGNvbnN0IGNvbHVtbkRpZmZlcmVuY2UgPSB0aGlzLmNvbHVtblV0aWwubWVyZ2VSZXF1ZXN0Q29sdW1ucyhyZXF1ZXN0Q29sdW1ucywgb3B0aW9ucy5jb2x1bW5zKS5kaWZmZXJlbmNlO1xyXG5cclxuXHRcdFx0XHR0aGlzLnJlcXVlc3RJdGVtcyhpdGVtVHlwZSwgW2l0ZW1JZF0sIGNvbHVtbkRpZmZlcmVuY2UpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgY29sdW1uRGlmZmVyZW5jZSwgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpLFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0ZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkucmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gaXRlbUVudHJ5LmRlZmVycmVkLnByb21pc2U7XHJcblx0XHRcdGRlZmF1bHQ6IC8vIEVOVFJZX1NUQVRVUy5SRVNPTFZFOlxyXG5cdFx0XHRcdHRoaXMucmVxdWVzdEl0ZW1zKGl0ZW1UeXBlLCBbaXRlbUlkXSwgcmVxdWVzdENvbHVtbnMpLnRoZW4oXHJcblx0XHRcdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVzb2x2ZVJlbW90ZShcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMucmVzb2x2ZShyZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSksXHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvciA9PiB7XHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnkuZGVmZXJyZWQucHJvbWlzZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJlc29sdmVMb2NhbCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIHBhcmVudCwgdGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpOiBUZW1wbGF0ZVJlc3BvbnNlSXRlbUVudHJ5TWFwIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3QgaXRlbUlkID0gaXRlbUVudHJ5Lml0ZW1JZDtcclxuXHRcdGNvbnN0IGl0ZW1JZENvbnZlcnNpb24gPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcclxuXHJcblx0XHRpdGVtRW50cnkuY29sdW1ucyA9IHRlbXBsYXRlLmNvbHVtbnM7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbClcclxuXHRcdFx0aXRlbUVudHJ5LnNldFBhcmVudChwYXJlbnQuaXRlbVR5cGUsIHBhcmVudC5pdGVtSWQpOyAvLyBjcmVhdGUgbmV3IG9iamVjdFxyXG5cclxuXHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHQucHJvY2Vzc0xvY2FsKHRlbXBsYXRlLmZpZWxkcywge30sIHt9LCBpdGVtSWRDb252ZXJzaW9uKVxyXG5cdFx0XHQuc2V0Q3JlYXRvcigpXHJcblx0XHRcdC5yZXNvbHZlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bWFpbjogaXRlbUVudHJ5LFxyXG5cdFx0XHRsaW5rZWQ6IHRoaXMuY3JlYXRlTG9jYWxFbnRyaWVzKGl0ZW1UeXBlLCBpdGVtSWQsIHRlbXBsYXRlLCBpdGVtSWRDb252ZXJzaW9uLCBsb2NhbEl0ZW1DYWNoZSlcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlRXhwYW5zaW9uIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24sIHJlc3BvbnNlOiBBcGlSZXNwb25zZSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBleHBhbnNpb25SZXN1bHQgPSBjb2x1bW5FeHBhbnNpb24ucnVuKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHJcblx0XHQvLyBBbm90aGVyIHJlcXVlc3QgYWxyZWFkeSByZXF1ZXN0ZWQgdGhlIGNvbHVtbnMgd2UgbmVlZCBoZXJlLCBubyBuZWVkIHRvIGV4cGFuZCB0aGUgaXRlbSBhbmQgcmVzb2x2ZSBpdCAoYWxyZWFkeSBkb25lIGJ5IG90aGVyIHJlcXVlc3QpXHJcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gaXRlbUVudHJ5O1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpLFxyXG5cdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdCksXHJcblx0XHRcdGV4cGFuc2lvblJlc3VsdFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmUoKTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVSZW1vdGUgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5TZXQ6IENvbHVtblNldCwgcmVzcG9uc2U6IEFwaVJlc3BvbnNlKSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGl0ZW1FbnRyeS5pdGVtVHlwZTtcclxuXHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblx0XHRjb25zdCBpbml0aWFsID0gcmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0aWYgKGluaXRpYWwgPT09IHVuZGVmaW5lZCkgeyAvLyBxdWVyeSByZXR1cm5lZCBubyByZXN1bHRzXHJcblx0XHRcdGl0ZW1FbnRyeS5yZWplY3QoKTtcclxuXHRcdFx0dGhpcy5lbnRyaWVzLmNsZWFyKGl0ZW1FbnRyeSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnJlc29sdmVEZWZlcnJlZChcclxuXHRcdFx0aW5pdGlhbCxcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hEZXJpdmVkT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQsIGNvbHVtblNldC5yb290KSxcclxuXHRcdFx0Y29sdW1uU2V0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0ZmV0Y2hUZW1wbGF0ZSAoaXRlbVR5cGU6IHN0cmluZywgdGVtcGxhdGVPcHRpb25zOiBhbnkgPSB7fSwgdGVtcGxhdGVDb2x1bW5zOiBhbnkgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcblx0XHRjb25zdCBoYXNUZW1wbGF0ZU9wdGlvbnMgPSBoYXNQcm9wZXJ0aWVzKHRlbXBsYXRlT3B0aW9ucyk7XHJcblx0XHRjb25zdCBjb2x1bW5JdGVtVHlwZSA9IGdldEZpcnN0UHJvcGVydHkodGVtcGxhdGVDb2x1bW5zKTsgLy8gaXQncyBwb3NzaWJsZSB0byBhZGQgY29sdW1ucyB0byBsaW5rZWQgaXRlbXNcclxuXHJcblx0XHRpZiAoIWhhc1RlbXBsYXRlT3B0aW9ucykge1xyXG5cdFx0XHRjb25zdCBjYWNoZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2l0ZW1UeXBlXTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRjYWNoZWRUZW1wbGF0ZSAhPT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0KFxyXG5cdFx0XHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgfHxcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVXRpbC5yZXNwb25zZUNvbHVtbnNBdmFpbGFibGUoXHJcblx0XHRcdFx0XHRcdGNvbHVtbkl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZUNvbHVtbnNbY29sdW1uSXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0XHRjYWNoZWRUZW1wbGF0ZS5yZXNwb25zZUNvbHVtbnNcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oY2FjaGVkVGVtcGxhdGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKFtcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZS50ZW1wbGF0ZShpdGVtVHlwZSwgdGVtcGxhdGVPcHRpb25zKSxcclxuXHRcdFx0Y29sdW1uSXRlbVR5cGUgPT09IG51bGwgP1xyXG5cdFx0XHRcdHt9IDpcclxuXHRcdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIuZmV0Y2goY29sdW1uSXRlbVR5cGUsIHRlbXBsYXRlQ29sdW1uc1tjb2x1bW5JdGVtVHlwZV0pXHJcblx0XHRdKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGVSZXNwb25zZTogYW55ID0gcmVzb2x2ZWRbMF07XHJcblx0XHRcdFx0Y29uc3QgcmVzcG9uc2VDb2x1bW5zID0gdGhpcy5jb2x1bW5VdGlsLm1lcmdlUmVzcG9uc2VDb2x1bW5zKFxyXG5cdFx0XHRcdFx0dGVtcGxhdGVSZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKSxcclxuXHRcdFx0XHRcdHJlc29sdmVkWzFdXHJcblx0XHRcdFx0KS5tZXJnZWQ7XHJcblx0XHRcdFx0Y29uc3QgdGVtcGxhdGUgPSB7XHJcblx0XHRcdFx0XHRmaWVsZHM6IHRlbXBsYXRlUmVzcG9uc2UuZmV0Y2hPYmplY3QoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZVJlc3BvbnNlLmxpbmtzW2l0ZW1UeXBlXVswXVxyXG5cdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHRydWUsIHJlc3BvbnNlQ29sdW1ucyksXHJcblx0XHRcdFx0XHRyZXNwb25zZTogdGVtcGxhdGVSZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlQ29sdW1uczogcmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0aWYgKCFoYXNUZW1wbGF0ZU9wdGlvbnMgJiYgdGVtcGxhdGVSZXNwb25zZS5jYWNoZWFibGUpXHJcblx0XHRcdFx0XHR0aGlzLnRlbXBsYXRlc1tpdGVtVHlwZV0gPSB0ZW1wbGF0ZTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHRlbXBsYXRlO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRFbnRyeVN0YXR1cyAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgb3B0aW9uczogYW55LCBsb2NhbEl0ZW1DYWNoZTogSXRlbUNhY2hlKTogRW50cnlTdGF0dXM8SXRlbUVudHJ5PiB7XHJcblx0XHRsZXQgaXRlbUVudHJ5O1xyXG5cclxuXHRcdGlmICh0aGlzLmtleVNlcnZpY2UuaXNMb2NhbElkKGl0ZW1JZCkpIHtcclxuXHRcdFx0aXRlbUVudHJ5ID0gbG9jYWxJdGVtQ2FjaGUuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1FbnRyeSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHJldHVybiB7ZW50cnk6IGl0ZW1FbnRyeSwgc3RhdHVzOiB0aGlzLmdldENhY2hlZEVudHJ5U3RhdHVzKGl0ZW1FbnRyeSwgb3B0aW9ucyl9O1xyXG5cclxuXHRcdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIGZhbHNlKTtcclxuXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IEVOVFJZX1NUQVRVUy5MT0NBTH07XHJcblx0XHR9XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5lbnRyaWVzLmdldChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHJcblx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7ZW50cnk6IGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpLCBzdGF0dXM6IHRoaXMuZ2V0Q2FjaGVkRW50cnlTdGF0dXMoaXRlbUVudHJ5LCBvcHRpb25zKX07XHJcblxyXG5cdFx0aXRlbUVudHJ5ID0gdGhpcy5pdGVtRW50cnlGYWN0b3J5LmNvbnN0cnVjdERlZmVycmVkKGl0ZW1UeXBlLCBpdGVtSWQsIG9wdGlvbnMuY29sdW1ucywgb3B0aW9ucy5kZWZlclJlcXVlc3QpO1xyXG5cclxuXHRcdGxvY2FsSXRlbUNhY2hlLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0dGhpcy5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGVudHJ5OiBpdGVtRW50cnksXHJcblx0XHRcdHN0YXR1czogb3B0aW9ucy5kZWZlclJlcXVlc3QgPyBFTlRSWV9TVEFUVVMuUFJPTUlTRUQgOiBFTlRSWV9TVEFUVVMuUkVTT0xWRVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGlzQ29sdW1uU3VwZXJzZXQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBjb2x1bW5zOiBSZXF1ZXN0Q29sdW1ucykge1xyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5pc0xvY2FsKCkgfHwgaXRlbUVudHJ5LmNvbHVtbnMuaXNTdXBlcnNldE9mKGNvbHVtbnMpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FjaGVkRW50cnlTdGF0dXMgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zKTogRU5UUllfU1RBVFVTIHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5zO1xyXG5cclxuXHRcdGlmIChpdGVtRW50cnkuaXNEZWZlcnJlZCgpKSB7XHJcblx0XHRcdGlmIChpdGVtRW50cnkuZGVmZXJSZXF1ZXN0KSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5LmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLlJFU09MVkU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiB0aGlzLmlzQ29sdW1uU3VwZXJzZXQoaXRlbUVudHJ5LCByZXF1ZXN0Q29sdW1ucykgP1xyXG5cdFx0XHRcdEVOVFJZX1NUQVRVUy5QUk9NSVNFRCA6XHJcblx0XHRcdFx0RU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5pc0NvbHVtblN1cGVyc2V0KGl0ZW1FbnRyeSwgcmVxdWVzdENvbHVtbnMpKVxyXG5cdFx0XHRyZXR1cm4gRU5UUllfU1RBVFVTLkNBQ0hFRDtcclxuXHJcblx0XHRpdGVtRW50cnkuZGVmZXIoZmFsc2UpO1xyXG5cclxuXHRcdHJldHVybiBFTlRSWV9TVEFUVVMuRVhQQU5EO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gaXRlbVR5cGVcclxuXHQgKiBAcGFyYW0ge0JhdGNoU3RhdHVzfSBiYXRjaFN0YXR1c1xyXG5cdCAqIEBwYXJhbSByZXF1ZXN0Q29sdW1uc1xyXG5cdCAqIEBwYXJhbSByZXNvbHZlZFxyXG5cdCAqIEByZXR1cm5zIHtJdGVtRW50cnlbXX1cclxuXHQgKlxyXG5cdCAqIGZvciBldmVyeSB0eXBlIG9mIGVudHJ5IHN0YXR1cyB0aGVyZSBpcyBpbiB0aGlzIGJhdGNoIHJlcXVlc3QgbWFrZSBzdXJlIHRoZSBlbnRyaWVzIGdldCByZXNvbHZlZC5cclxuXHQgKiB0aGVuIHJldHVybiBhIGFycmF5IG9mIHRoZSByZXN1bHRpbmcgSXRlbUVudHJ5QXJyYXlcclxuXHQgKi9cclxuXHRiYXRjaFJlc29sdmUgKGl0ZW1UeXBlLCBiYXRjaFN0YXR1czogQmF0Y2hTdGF0dXMsIHJlcXVlc3RDb2x1bW5zLCByZXNvbHZlZCwgbG9jYWxJdGVtQ2FjaGU6IEl0ZW1DYWNoZSk6IEl0ZW1FbnRyeVtdIHwgUHJvbWlzZTxhbnk+IHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlID0gcmVzb2x2ZWQucmVxdWVzdHM7XHJcblx0XHRjb25zdCBleHBhbmRTdGF0dXMgPSBbRU5UUllfU1RBVFVTLkVYUEFORCwgRU5UUllfU1RBVFVTLlBST01JU0VEX0VYUEFORF07XHJcblx0XHRjb25zdCByZXNvbHZlU3RhdHVzID0gW0VOVFJZX1NUQVRVUy5SRVNPTFZFXTtcclxuXHJcblx0XHRsZXQgc3VjY2VzcyA9IHRydWU7XHJcblxyXG5cdFx0aWYgKGJhdGNoU3RhdHVzLmhhc0VudHJpZXMoZXhwYW5kU3RhdHVzKSkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KCkpO1xyXG5cclxuXHRcdFx0YmF0Y2hTdGF0dXMuZm9yRWFjaEVudHJ5KFxyXG5cdFx0XHRcdGV4cGFuZFN0YXR1cywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUV4cGFuc2lvbihpdGVtRW50cnksIGNvbHVtbkV4cGFuc2lvbiwgcmVzcG9uc2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYmF0Y2hTdGF0dXMuaGFzRW50cmllcyhyZXNvbHZlU3RhdHVzKSkge1xyXG5cdFx0XHRjb25zdCBjb2x1bW5JbmZvID0gdGhpcy5jb2x1bW5TZXRGYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpKTtcclxuXHJcblx0XHRcdGJhdGNoU3RhdHVzLmZvckVhY2hFbnRyeShcclxuXHRcdFx0XHRyZXNvbHZlU3RhdHVzLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucmVzb2x2ZVJlbW90ZShpdGVtRW50cnksIGNvbHVtbkluZm8sIHJlc3BvbnNlKSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdFx0c3VjY2VzcyA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRiYXRjaFN0YXR1cy5mb3JFYWNoRW50cnkoXHJcblx0XHRcdFtFTlRSWV9TVEFUVVMuTE9DQUxdLCBpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucmVzb2x2ZUxvY2FsKGl0ZW1FbnRyeSwgbnVsbCwgcmVzb2x2ZWQudGVtcGxhdGUsIGxvY2FsSXRlbUNhY2hlKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0b2RvOiBubyBpdGVtIGVycm9yICh7bWVzc2FnZTogdGhpcy5pdGVtRW50cnlTZXJ2aWNlLnVuZGVmaW5lZEl0ZW1FcnJvcn0pXHJcblx0XHRyZXR1cm4gc3VjY2VzcyA/IGJhdGNoU3RhdHVzLmdldEFycmF5KCkgOiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUxvY2FsRW50cmllcyAoXHJcblx0XHRwYXJlbnRUeXBlOiBJdGVtVHlwZSxcclxuXHRcdGxvY2FsUGFyZW50SWQ6IEl0ZW1JZCxcclxuXHRcdHRlbXBsYXRlLFxyXG5cdFx0aXRlbUlkQ29udmVyc2lvbjogSXRlbUlkQ29udmVyc2lvbk1hcCxcclxuXHRcdGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUsXHJcblx0XHRleGNsdWRlSXRlbVR5cGVzOiBJdGVtVHlwZVtdID0gW11cclxuXHQpOiBUZW1wbGF0ZVJlc3BvbnNlTGlua2VkSXRlbUVudHJ5TWFwW10ge1xyXG5cdFx0Y29uc3QgYXBpUmVzcG9uc2UgPSB0ZW1wbGF0ZS5yZXNwb25zZTtcclxuXHRcdGNvbnN0IGNvbHVtbkluZm9NYXAgPSB7fTtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeU1hcCA9IHt9O1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBBcnJheTx7aXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W119PiA9IFtdO1xyXG5cclxuXHRcdC8vIFRPRE86IGRpc2FibGUgY2FjaGluZz9cclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gYXBpUmVzcG9uc2UuaXRlbXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1UeXBlID09PSBwYXJlbnRUeXBlIHx8IGV4Y2x1ZGVJdGVtVHlwZXMuaW5kZXhPZihpdGVtVHlwZSkgIT09IC0xKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0gPSB0aGlzLmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRydWUsXHJcblx0XHRcdFx0dGVtcGxhdGUucmVzcG9uc2VDb2x1bW5zXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY3JlYXRlRW50cmllcyA9IChwYXJlbnRUeXBlMiwgbG9jYWxQYXJlbnRJZDIsIGFwaVBhcmVudElkKSA9PiB7XHJcblx0XHRcdGNvbnN0IHBhcmVudCA9IHtpdGVtVHlwZTogcGFyZW50VHlwZTIsIGl0ZW1JZDogbG9jYWxQYXJlbnRJZDJ9O1xyXG5cdFx0XHRjb25zdCBsaW5rcyA9IGFwaVJlc3BvbnNlLml0ZW1zW3BhcmVudFR5cGUyXVthcGlQYXJlbnRJZF0ubGlua3M7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGxpbmtzKSB7XHJcblx0XHRcdFx0aWYgKGV4Y2x1ZGVJdGVtVHlwZXMuaW5kZXhPZihpdGVtVHlwZSkgIT09IC0xKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGlmICghbGlua3MuaGFzT3duUHJvcGVydHkoaXRlbVR5cGUpKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGlkQXJyYXkgPSBsaW5rc1tpdGVtVHlwZV07XHJcblxyXG5cdFx0XHRcdC8vIHRoZSBpdGVtIGVudHJpZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQgaW4gdG9wLWRvd24gb3JkZXJcclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5TWFwW2l0ZW1UeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goe2l0ZW1UeXBlOiBpdGVtVHlwZSwgaXRlbUVudHJpZXM6IGl0ZW1FbnRyeU1hcFtpdGVtVHlwZV0gPSBbXX0pO1xyXG5cclxuXHRcdFx0XHRmb3IgKGNvbnN0IGFwaUl0ZW1JZCBvZiBpZEFycmF5KSB7XHJcblx0XHRcdFx0XHRjb25zdCBsb2NhbEl0ZW1JZCA9IGl0ZW1JZENvbnZlcnNpb25baXRlbVR5cGVdW2FwaUl0ZW1JZF07XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0TG9jYWxMaW5rZWQoXHJcblx0XHRcdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdFx0XHRsb2NhbEl0ZW1JZCxcclxuXHRcdFx0XHRcdFx0YXBpUmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGFwaUl0ZW1JZCksXHJcblx0XHRcdFx0XHRcdHBhcmVudCxcclxuXHRcdFx0XHRcdFx0Y29sdW1uSW5mb01hcFtpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHRcdGl0ZW1JZENvbnZlcnNpb25cclxuXHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0bG9jYWxJdGVtQ2FjaGUuYWRkKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRpdGVtRW50cnlNYXBbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0XHRjcmVhdGVFbnRyaWVzKGl0ZW1UeXBlLCBsb2NhbEl0ZW1JZCwgYXBpSXRlbUlkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Y3JlYXRlRW50cmllcyhwYXJlbnRUeXBlLCBsb2NhbFBhcmVudElkLCBhcGlSZXNwb25zZS5saW5rc1twYXJlbnRUeXBlXVswXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZldGNoVGl0bGUgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgaXRlbUlkOiBJdGVtSWQsIGRlZmVyUmVxdWVzdCA9IHRydWUsIGxvY2FsSXRlbUNhY2hlOiBJdGVtQ2FjaGUpIHtcclxuXHRcdGNvbnN0IHRpdGxlRmllbGQgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuZ2V0VGl0bGVGaWVsZChpdGVtVHlwZSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmV0Y2hJdGVtKFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkLFxyXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UucHJvY2Vzc09wdGlvbnMoe2NvbHVtbnM6IFt0aXRsZUZpZWxkXSwgZGVmZXJSZXF1ZXN0OiBkZWZlclJlcXVlc3R9KSxcclxuXHRcdFx0bG9jYWxJdGVtQ2FjaGVcclxuXHRcdCkudGhlbihcclxuXHRcdFx0Ly8gdG9kbzogSXRlbUVudHJ5IHwgVGVtcGxhdGVSZXNwb25zZUl0ZW1FbnRyeU1hcFxyXG5cdFx0XHQoZW50cnk6IGFueSkgPT4ge1xyXG5cdFx0XHRcdGlmIChlbnRyeS5tYWluICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRyZXR1cm4gZW50cnkubWFpbi5nZXRGaWVsZHMoKVt0aXRsZUZpZWxkXTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGVudHJ5LmdldEZpZWxkcygpW3RpdGxlRmllbGRdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRyZXF1ZXN0SXRlbXMgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZHM6IEl0ZW1JZFtdLCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoaXRlbVR5cGUsIHtpZDogaXRlbUlkc30sIHtbaXRlbVR5cGVdOiBjb2x1bW5zfSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEFwaVJlc3BvbnNlUHJvY2Vzc29yLCBDb2x1bW5FeHBhbnNpb24sIENvbHVtblNldCwgSXRlbUhhbmRsZXIsIFF1ZXJ5U2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LCBDb2x1bW5TZXRGYWN0b3J5LCBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnksIEl0ZW1FbnRyeSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEFwaVJlc3BvbnNlLCBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUmVxdWVzdFNlcnZpY2Uge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgaXRlbUhhbmRsZXI6IEl0ZW1IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RJdGVtIChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5zKTogUHJvbWlzZTxBcGlSZXNwb25zZVByb2Nlc3Nvcj4ge1xyXG5cdFx0Y29uc3QgcmVxdWVzdENvbHVtbnMgPSB7XHJcblx0XHRcdFtpdGVtVHlwZV06IGNvbHVtbnNcclxuXHRcdH07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHR7aWQ6IGl0ZW1JZH0sXHJcblx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cmVxdWVzdEl0ZW1zIChcclxuXHRcdGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0cXVlcnkgPSBjb2xsZWN0aW9uRW50cnkucXVlcnkub2JqZWN0LFxyXG5cdFx0Y29sdW1ucyA9IGNvbGxlY3Rpb25FbnRyeS5vcHRpb25zLmNvbHVtbnNcclxuXHQpOiBQcm9taXNlPEFwaVJlc3BvbnNlUHJvY2Vzc29yPiB7XHJcblx0XHRjb25zdCBvcHRpb25zID0gY29sbGVjdGlvbkVudHJ5Lm9wdGlvbnM7XHJcblxyXG5cdFx0Y29uc3QgcGFyYW1zID0ge1xyXG5cdFx0XHRyZXF1ZXN0VHlwZTogJ3F1ZXJ5JyxcclxuXHRcdFx0aXRlbVR5cGU6IG9wdGlvbnMucXVlcnlJdGVtVHlwZSA9PT0gbnVsbCA/IGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSA6IG9wdGlvbnMucXVlcnlJdGVtVHlwZSxcclxuXHRcdFx0Y29sdW1uczoge1tjb2xsZWN0aW9uRW50cnkuaXRlbVR5cGVdOiBjb2x1bW5zfSxcclxuXHRcdFx0cXVlcnk6IHF1ZXJ5LFxyXG5cdFx0XHRsaW1pdDogbnVsbFxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAob3B0aW9ucy5saW1pdCAhPT0gbnVsbClcclxuXHRcdFx0cGFyYW1zLmxpbWl0ID0gb3B0aW9ucy5saW1pdDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5yZXF1ZXN0U2tlbGV0b24ocGFyYW1zKTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RMaW5rSXRlbXMgKHBhcmVudFR5cGUsIHBhcmVudElkQXJyYXksIGl0ZW1UeXBlLCBxdWVyeSwgY29sdW1ucyk6IFByb21pc2U8QXBpUmVzcG9uc2VQcm9jZXNzb3I+IHtcclxuXHRcdGNvbnN0IHJlcXVlc3RDb2x1bW5zID0ge1xyXG5cdFx0XHRbaXRlbVR5cGVdOiBjb2x1bW5zXHJcblx0XHR9O1xyXG5cclxuXHRcdHJldHVybiBxdWVyeSA9PT0gbnVsbCA/XHJcblx0XHRcdHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoXHJcblx0XHRcdFx0cGFyZW50VHlwZSxcclxuXHRcdFx0XHR7aWQ6IHBhcmVudElkQXJyYXl9LFxyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHRcdCkgOlxyXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0XHRcdHF1ZXJ5LFxyXG5cdFx0XHRcdFx0e2xpbmtlZFRvOiBwYXJlbnRUeXBlLCBxdWVyeToge2lkOiBwYXJlbnRJZEFycmF5fX1cclxuXHRcdFx0XHQpLFxyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zIC8vIHNob3VsZCBjb250YWluIGEgZGVyaXZlZCBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhlIHBhcmVudFxyXG5cdFx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0V4cGFuc2lvbiAocmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlLCBpdGVtVHlwZTogc3RyaW5nLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10pIHtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1ucyxcclxuXHRcdFx0cmVzcG9uc2UuZmV0Y2hDb2x1bW5zT2JqZWN0KClcclxuXHRcdCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0aWYgKGl0ZW1FbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLmhhbmRsZUNhY2hlZEl0ZW0oXHJcblx0XHRcdFx0aXRlbUVudHJ5LFxyXG5cdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBjb2x1bW5FeHBhbnNpb247XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzUmVzcG9uc2UgKFxyXG5cdFx0cmVzcG9uc2U6IEFwaVJlc3BvbnNlLFxyXG5cdFx0aWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcclxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxyXG5cdFx0Y29sdW1uRXhwYW5zaW9uPzogQ29sdW1uRXhwYW5zaW9uXHJcblx0KTogUHJvbWlzZTxJdGVtRW50cnlbXT4ge1xyXG5cdFx0aWYgKGNvbHVtbkV4cGFuc2lvbiA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRjb2x1bW5FeHBhbnNpb24gPSB0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdGNvbHVtblNldC5pdGVtVHlwZSxcclxuXHRcdFx0XHRjb2x1bW5TZXQucmVxdWVzdENvbHVtbnNUcnVlID8gdHJ1ZSA6IGNvbHVtblNldC5yZXF1ZXN0LFxyXG5cdFx0XHRcdGNvbHVtblNldC5yZXNwb25zZVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gY29sdW1uU2V0Lml0ZW1UeXBlO1xyXG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSBjb2x1bW5TZXQucm9vdDtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBBcnJheTxQcm9taXNlPEl0ZW1FbnRyeT4+ID0gW107XHJcblxyXG5cdFx0Ly8gc2hvdWxkIGJlIGZhc3QuLi5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIGlkQXJyYXkpIHtcclxuXHRcdFx0bGV0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRpdGVtRW50cnkgPSB0aGlzLml0ZW1FbnRyeUZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRcdFx0aXRlbUlkLFxyXG5cdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0dGhpcy5pdGVtSGFuZGxlci5lbnRyaWVzLmFkZChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoaXRlbUVudHJ5LmlzRGVmZXJyZWQoKSkge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW1FbnRyeS5kZWZlclJlcXVlc3QpIHtcclxuXHRcdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0XHRpdGVtRW50cnkucmVzb2x2ZURlZmVycmVkKFxyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCksXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoaXRlbVR5cGUsIGl0ZW1JZCwgcm9vdENvbHVtbnMpLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uU2V0XHJcblx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKGl0ZW1FbnRyeS5kZWZlcnJlZC5wcm9taXNlKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJpZXMucHVzaChcclxuXHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVDYWNoZWRJdGVtKFxyXG5cdFx0XHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdFx0XHRjb2x1bW5FeHBhbnNpb25cclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChwYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZEVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgcmVzb2x2ZWRFbnRyeSBvZiByZXNvbHZlZEVudHJpZXMpIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdHRoaXMuaGFuZGxlQ2FjaGVkSXRlbShcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlZEVudHJ5LFxyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlLFxyXG5cdFx0XHRcdFx0XHRcdDxDb2x1bW5FeHBhbnNpb24+IGNvbHVtbkV4cGFuc2lvblxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyaWVzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVDYWNoZWRJdGVtIChpdGVtRW50cnksIHJlc3BvbnNlLCBjb2x1bW5FeHBhbnNpb246IENvbHVtbkV4cGFuc2lvbikge1xyXG5cdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblxyXG5cdFx0cmV0dXJuIGV4cGFuc2lvblJlc3VsdCA9PT0gbnVsbCA/XHJcblx0XHRcdGl0ZW1FbnRyeSA6XHJcblx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoXHJcblx0XHRcdFx0cmVzcG9uc2UuZmV0Y2hPYmplY3QoaXRlbUVudHJ5Lml0ZW1UeXBlLCBpdGVtRW50cnkuaXRlbUlkKSxcclxuXHRcdFx0XHRyZXNwb25zZS5mZXRjaERlcml2ZWRPYmplY3QoXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbVR5cGUsXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0LmRpZmZlcmVuY2Uucm9vdFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdFx0ZXhwYW5zaW9uUmVzdWx0XHJcblx0XHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzTGlua1Jlc3BvbnNlIChcclxuXHRcdHJlc3BvbnNlOiBBcGlSZXNwb25zZSxcclxuXHRcdHBhcmVudFR5cGU6IEl0ZW1UeXBlLFxyXG5cdFx0cGFyZW50SWRBcnJheTogSXRlbUlkW10sXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSByZXNwb25zZS5mZXRjaENvbHVtbnNPYmplY3QoKTtcclxuXHRcdGNvbnN0IGNvbHVtblNldCA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IGNvbHVtbkV4cGFuc2lvbiA9IHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIG9wdGlvbnMuY29sdW1ucywgcmVzcG9uc2VDb2x1bW5zKTtcclxuXHRcdGNvbnN0IHBhcmVudEl0ZW1zID0gcmVzcG9uc2UuaXRlbXNbcGFyZW50VHlwZV07XHJcblx0XHRjb25zdCBwcm9taXNlczogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJlbnRJZCBvZiBwYXJlbnRJZEFycmF5KSB7XHJcblx0XHRcdHByb21pc2VzW3BhcmVudElkXSA9IHBhdGhFeGlzdHMocGFyZW50SXRlbXMsIFtwYXJlbnRJZCwgJ2xpbmtzJywgaXRlbVR5cGVdKSA/XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHBhcmVudEl0ZW1zW3BhcmVudElkXS5saW5rc1tpdGVtVHlwZV0sXHJcblx0XHRcdFx0XHR7aXRlbVR5cGU6IHBhcmVudFR5cGUsIGl0ZW1JZDogcGFyZW50SWR9LFxyXG5cdFx0XHRcdFx0Y29sdW1uU2V0LFxyXG5cdFx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0KSA6XHJcblx0XHRcdFx0W107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHByb21pc2VzKS50aGVuKFxyXG5cdFx0XHRyZXNvbHZlZCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdGl0ZW1zOiByZXNvbHZlZCxcclxuXHRcdFx0XHRcdGNvbHVtbnM6IGNvbHVtblNldCxcclxuXHRcdFx0XHRcdGNvbHVtbkV4cGFuc2lvbjogY29sdW1uRXhwYW5zaW9uXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vJztcclxuXHJcbmltcG9ydCB7IHNoYWxsb3dNZXJnZSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlU2VydmljZSB7XHJcblx0Y29uc3RydWN0b3IgKCkge1xyXG5cclxuXHR9XHJcblxyXG5cdHByb2Nlc3NPcHRpb25zIChvcHRpb25zKSB7XHJcblx0XHRyZXR1cm4gc2hhbGxvd01lcmdlKFxyXG5cdFx0XHRvcHRpb25zLFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0ZWRpdDogZmFsc2UsXHJcblx0XHRcdFx0b25DaGFuZ2U6IG5vb3AsXHJcblx0XHRcdFx0b25EZWFjdGl2YXRlOiBub29wXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb21wYXJlT3B0aW9ucyAoZmlyc3QsIHNlY29uZCkge1xyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gZmlyc3QpIHtcclxuXHRcdFx0aWYgKGZpcnN0W2tleV0gIT09IHNlY29uZFtrZXldKVxyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRFVQTElDQVRFX0tFWVdPUkQsIERVUExJQ0FURV9QUkVGSVgsIE5FV19LRVlXT1JELCBORVdfUFJFRklYIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgSXRlbUlkLCBTdGF0ZUtleSwgU3RhdGVLZXlUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEtleVNlcnZpY2Uge1xyXG5cdHNlcGFyYXRvcjogc3RyaW5nID0gJzonO1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoKSB7fVxyXG5cclxuXHRnZXRTaW5nbGVLZXkgKGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gaXRlbVR5cGUuY29uY2F0KHRoaXMuc2VwYXJhdG9yLCBTdHJpbmcoaXRlbUlkKSk7XHJcblx0fVxyXG5cclxuXHRnZXRDb2xsZWN0aW9uQ2FjaGVLZXkgKHBhcmVudFR5cGU6IHN0cmluZywgcGFyZW50SWQ6IG51bWJlciwgY2hpbGRUeXBlOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBwYXJlbnRUeXBlLmNvbmNhdCh0aGlzLnNlcGFyYXRvciwgU3RyaW5nKHBhcmVudElkKSwgdGhpcy5zZXBhcmF0b3IsIGNoaWxkVHlwZSk7XHJcblx0fVxyXG5cclxuXHRnZXRDc3NLZXkgKCkge1xyXG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCAnXycpO1xyXG5cdH1cclxuXHJcblx0cGFyc2VTdGF0ZUtleSAoc3RhdGVLZXk6IHN0cmluZyk6IFN0YXRlS2V5IHwgbnVsbCB7XHJcblx0XHRzdGF0ZUtleSA9IHN0YXRlS2V5LnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoTkVXX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5OZXcsXHJcblx0XHRcdFx0dGVtcGxhdGU6IHN0YXRlS2V5LnN1YnN0cmluZyhORVdfS0VZV09SRC5sZW5ndGgpXHJcblx0XHRcdH07XHJcblxyXG5cdFx0aWYgKHN0YXRlS2V5LmluZGV4T2YoRFVQTElDQVRFX0tFWVdPUkQpID09PSAwKVxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHR5cGU6IFN0YXRlS2V5VHlwZS5EdXBsaWNhdGUsXHJcblx0XHRcdFx0aXRlbUlkOiBzdGF0ZUtleS5zdWJzdHJpbmcoRFVQTElDQVRFX0tFWVdPUkQubGVuZ3RoKVxyXG5cdFx0XHR9O1xyXG5cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0RHVwbGljYXRlU3RhdGVLZXkgKGl0ZW1JZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gRFVQTElDQVRFX0tFWVdPUkQgKyBpdGVtSWQ7XHJcblx0fVxyXG5cclxuXHRnZXROZXdTdGF0ZUtleSAodGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiBORVdfS0VZV09SRCArIHRlbXBsYXRlVHlwZTtcclxuXHR9XHJcblxyXG5cdGdldExvY2FsSWQgKCk6IEl0ZW1JZCB7XHJcblx0XHRyZXR1cm4gKyhORVdfUFJFRklYICsgdGhpcy5nZXRSYW5kb21TdHJpbmcoKSk7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbER1cGxpY2F0ZUlkICgpOiBJdGVtSWQge1xyXG5cdFx0cmV0dXJuICsoRFVQTElDQVRFX1BSRUZJWCArIHRoaXMuZ2V0UmFuZG9tU3RyaW5nKCkpO1xyXG5cdH1cclxuXHJcblx0Z2V0UmFuZG9tU3RyaW5nICgpIHtcclxuXHRcdHJldHVybiAoJycgKyBNYXRoLnJhbmRvbSgpKS5zcGxpdCgnLicpWzFdLnN1YnN0cigwLCA4KTtcclxuXHR9XHJcblxyXG5cdC8vIG5vdGU6IHRoZSBjaGFuZ2VzIGNvbXBpbGVyIHVzZXMgdGhpc1xyXG5cdC8vIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIHVuZGVmaW5lZCAoaXRlbUhhbmRsZXIuY3JlYXRlUmVxdWVzdClcclxuXHRpc0xvY2FsSWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gaXRlbUlkICE9PSB1bmRlZmluZWQgJiYgKHRoaXMuaXNOZXdJZChpdGVtSWQpIHx8IHRoaXMuaXNEdXBsaWNhdGVJZChpdGVtSWQpKTtcclxuXHR9XHJcblxyXG5cdGlzTmV3SWQgKGl0ZW1JZDogSXRlbUlkIHwgc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gaXRlbUlkID09PSBORVdfS0VZV09SRCB8fCAoJycgKyBpdGVtSWQpLnN1YnN0cmluZygwLCBORVdfUFJFRklYLmxlbmd0aCkgPT09IE5FV19QUkVGSVg7XHJcblx0fVxyXG5cclxuXHRpc0R1cGxpY2F0ZUlkIChpdGVtSWQ6IEl0ZW1JZCB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIGl0ZW1JZCA9PT0gRFVQTElDQVRFX0tFWVdPUkQgfHwgKCcnICsgaXRlbUlkKS5zdWJzdHJpbmcoMCwgRFVQTElDQVRFX1BSRUZJWC5sZW5ndGgpID09PSBEVVBMSUNBVEVfUFJFRklYO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG5cdENvbGxlY3Rpb25DYWNoZSxcclxuXHRJdGVtQ2FjaGUsXHJcblx0SXRlbVJlc291cmNlU2VydmljZSxcclxuXHRMb2NrU2VydmljZVxyXG59IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxyXG5cdENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0Q29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRJdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdEl0ZW1SZXNvdXJjZUZhY3RvcnlcclxufSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5UGFyZW50SWRNYXAsIENyZWF0ZVJlcXVlc3RQYXJhbWV0ZXJNYXAsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1PcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi9VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NhbENhY2hlIHtcclxuXHRpdGVtczogSXRlbUNhY2hlO1xyXG5cdHJvb3RJdGVtOiBJdGVtRW50cnkgfCB1bmRlZmluZWQ7XHJcblx0Y29sbGVjdGlvbnM6IENvbGxlY3Rpb25DYWNoZTtcclxuXHRkZWZlcnJlZENvbGxlY3Rpb25zOiBDb2xsZWN0aW9uQ2FjaGU7XHJcblx0dGFiUmVxdWVzdFBhcmFtZXRlcnMgPSB7fTtcclxuXHJcblx0Y2FsbGJhY2tzID0ge29uQmVmb3JlU2F2ZToge30sIG9uU2F2ZVN1Y2Nlc3M6IHt9LCBvblNhdmVXaXRob3V0Q2xvc2luZzoge319O1xyXG5cclxuXHRjaGFuZ2VzSW50ZXJ2YWw6IG51bGwgfCBudW1iZXIgPSBudWxsO1xyXG5cdGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1DYWNoZUZhY3Rvcnk6IEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGlkOiBzdHJpbmcgPSAnJ1xyXG5cdCkge1xyXG5cdFx0dGhpcy5pdGVtcyA9IHRoaXMuaXRlbUNhY2hlRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHRcdHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnkuY29uc3RydWN0KCk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVJdGVtUmVzb3VyY2UgKGl0ZW1FbnRyeTogSXRlbUVudHJ5LCBvcHRpb25zOiBJdGVtT3B0aW9ucywgaXNSb290OiBib29sZWFuID0gZmFsc2UsIGlzTmV3PzogYm9vbGVhbikge1xyXG5cdFx0aWYgKGlzUm9vdClcclxuXHRcdFx0dGhpcy5yb290SXRlbSA9IGl0ZW1FbnRyeTtcclxuXHJcblx0XHRvcHRpb25zID0gdGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpO1xyXG5cdFx0b3B0aW9ucy5vbkRlYWN0aXZhdGUgPSAoX2l0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oX2l0ZW1FbnRyeSk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbVJlc291cmNlRmFjdG9yeS5jb25zdHJ1Y3QoaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldyk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10sIG9wdGlvbnM6IEl0ZW1PcHRpb25zKSB7XHJcblx0XHRjb25zdCByZXN1bHQ6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlSXRlbVJlc291cmNlKGl0ZW1FbnRyeSwgb3B0aW9ucykpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCByZXNvdXJjZU9wdGlvbnMpIHtcclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkFjdGl2YXRlSXRlbSA9IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gdGhpcy5vbkFjdGl2YXRlSXRlbShpdGVtRW50cnkpO1xyXG5cclxuXHRcdHJlc291cmNlT3B0aW9ucy5vbkRlYWN0aXZhdGVJdGVtID0gKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB0aGlzLm9uRGVhY3RpdmF0ZUl0ZW0oaXRlbUVudHJ5KTtcclxuXHJcblx0XHRyZXNvdXJjZU9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbiA9XHJcblx0XHRcdChfY29sbGVjdGlvblJlc291cmNlOiBDb2xsZWN0aW9uUmVzb3VyY2UpID0+IHRoaXMuY2xlYXJDb2xsZWN0aW9uKF9jb2xsZWN0aW9uUmVzb3VyY2UpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkuY29uc3RydWN0KGNvbGxlY3Rpb25FbnRyeSwgcmVzb3VyY2VPcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZUNvbGxlY3Rpb25SZXNvdXJjZXMgKGNvbGxlY3Rpb25FbnRyaWVzOiBDb2xsZWN0aW9uRW50cnlQYXJlbnRJZE1hcCwgcmVzb3VyY2VPcHRpb25zKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHBhcmVudElkIGluIGNvbGxlY3Rpb25FbnRyaWVzKVxyXG5cdFx0XHRyZXN1bHRbcGFyZW50SWRdID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uUmVzb3VyY2UoY29sbGVjdGlvbkVudHJpZXNbcGFyZW50SWRdLCByZXNvdXJjZU9wdGlvbnMpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjbGVhckl0ZW0gKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSB7XHJcblx0XHR0aGlzLmNsZWFySXRlbUVudHJ5KGl0ZW1SZXNvdXJjZS5lbnRyeSk7XHJcblx0fVxyXG5cclxuXHRjbGVhckl0ZW1FbnRyeSAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdHRoaXMuaXRlbXMuY2xlYXIoaXRlbUVudHJ5KTtcclxuXHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJDb2xsZWN0aW9uIChjb2xsZWN0aW9uUmVzb3VyY2U6IENvbGxlY3Rpb25SZXNvdXJjZSkge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gY29sbGVjdGlvblJlc291cmNlLmVudHJ5O1xyXG5cclxuXHRcdHRoaXMuY29sbGVjdGlvbnMuY2xlYXIoY29sbGVjdGlvbkVudHJ5KTtcclxuXHRcdGNvbGxlY3Rpb25FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKGlzU3ViVGFiQ2hhbmdlID0gZmFsc2UpIHtcclxuXHRcdHRoaXMuaXRlbXMuZm9yRWFjaChcclxuXHRcdFx0KGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiBpdGVtRW50cnkuY2xlYXJSZXNvdXJjZXMoKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gY29sbGVjdGlvbkVudHJ5LmNsZWFyUmVzb3VyY2VzKGlzU3ViVGFiQ2hhbmdlKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmRlZmVycmVkQ29sbGVjdGlvbnMuY2xlYXIoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZVNpbmdsZUl0ZW1zIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1UeXBlIGluIGNvbnZlcnNpb25NYXApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBvbGRJdGVtSWQgaW4gY29udmVyc2lvbk1hcFtpdGVtVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1zLmdldChpdGVtVHlwZSwgb2xkSXRlbUlkKTtcclxuXHJcblx0XHRcdFx0aWYgKGl0ZW1FbnRyeSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHRcdHRoaXMuaXRlbXMudXBkYXRlSXRlbUlkKGl0ZW1FbnRyeSwgb2xkSXRlbUlkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gcmVzb3VyY2VzIHdpbGwgYmUgY2xlYXJlZCBsYXRlciAoY2xlYXIgZnVuY3Rpb24pXHJcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XHJcblx0XHR0aGlzLml0ZW1zLmZvckVhY2goXHJcblx0XHRcdChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gaXRlbUVudHJ5LnJlc2V0TW9kaWZpZWQoKVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmNvbGxlY3Rpb25zLmZvckVhY2goXHJcblx0XHRcdChjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSkgPT4gdGhpcy5yZXNldENvbGxlY3Rpb24oY29sbGVjdGlvbkVudHJ5KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5pc0xvY2thYmxlKCkgP1xyXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmRlbGV0ZUxvY2sodGhpcy5yb290SXRlbSkgOlxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHR9XHJcblxyXG5cdHJlc2V0Q29sbGVjdGlvbiAoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpOiB2b2lkIHtcclxuXHRcdGlmIChjb2xsZWN0aW9uRW50cnkuaGFzRWRpdFJlc291cmNlcylcclxuXHRcdFx0Y29sbGVjdGlvbkVudHJ5LnJldmVydENoYW5nZXMoKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0l0ZW1FZGl0UmVzb3VyY2VzKSB7XHJcblx0XHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGNvbGxlY3Rpb25FbnRyeS5pdGVtcylcclxuXHRcdFx0XHRpdGVtRW50cnkucmVzZXRNb2RpZmllZCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZGV0ZWN0Q2hhbmdlcyAoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5oYXNDaGFuZ2VzKVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuaXRlbXMuc29tZShcclxuXHRcdFx0XHQoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGl0ZW1FbnRyeS5oYXNDaGFuZ2VzKClcclxuXHRcdFx0KVxyXG5cdFx0KVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYXNDaGFuZ2VzID0gdGhpcy5jb2xsZWN0aW9ucy5zb21lKFxyXG5cdFx0XHQoY29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnkpID0+IHRoaXMuY29sbGVjdGlvbkhhc0NoYW5nZXMoY29sbGVjdGlvbkVudHJ5KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29sbGVjdGlvbkhhc0NoYW5nZXMgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5KSB7XHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lmhhc0VkaXRSZXNvdXJjZXMgJiYgKGNvbGxlY3Rpb25FbnRyeS5oYXNBZGRlZEl0ZW1zKCkgfHwgY29sbGVjdGlvbkVudHJ5Lmhhc1JlbW92ZWRJdGVtcygpKSlcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIGNvbGxlY3Rpb25FbnRyeS5oYXNJdGVtRWRpdFJlc291cmNlcyAmJiBjb2xsZWN0aW9uRW50cnkuaGFzVXBkYXRlZEl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2thYmxlICgpIHtcclxuXHRcdGlmICh0aGlzLnJvb3RJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5yb290SXRlbS5pc0xvY2thYmxlKCk7XHJcblx0fVxyXG5cclxuXHRzYXZlIChcclxuXHRcdGNsb3NlVGFiID0gZmFsc2UsXHJcblx0XHRwYXJhbWV0ZXJzOiBDcmVhdGVSZXF1ZXN0UGFyYW1ldGVyTWFwID0ge30sXHJcblx0XHRicmVha1VwQnlQYXJlbnQ/OiBib29sZWFuLFxyXG5cdFx0b25BZnRlckNyZWF0ZUNhbGxiYWNrPzogKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXApID0+IHZvaWRcclxuXHQpIHtcclxuXHRcdHRoaXMuZGlzYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblxyXG5cdFx0cmV0dXJuICh0aGlzLmlzTG9ja2FibGUoKSA/IHRoaXMubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKDxJdGVtRW50cnk+IHRoaXMucm9vdEl0ZW0pIDogdGhpcy5wcm9taXNlU2VydmljZS53aGVuKCkpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvbkJlZm9yZVNhdmUnLCBjbG9zZVRhYik7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgcmVxdWVzdFBhcmFtZXRlcnMgPSBleHRlbmQoe30sIHRoaXMudGFiUmVxdWVzdFBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpO1xyXG5cclxuXHRcdFx0XHR0aGlzLnRhYlJlcXVlc3RQYXJhbWV0ZXJzID0ge307XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLmV4ZWN1dGUoXHJcblx0XHRcdFx0XHR0aGlzLml0ZW1zLnRvQXJyYXkoKSxcclxuXHRcdFx0XHRcdHRoaXMuY29sbGVjdGlvbnMudG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0cmVxdWVzdFBhcmFtZXRlcnMsXHJcblx0XHRcdFx0XHRicmVha1VwQnlQYXJlbnQsXHJcblx0XHRcdFx0XHRvbkFmdGVyQ3JlYXRlQ2FsbGJhY2tcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihjb252ZXJzaW9uTWFwID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXHJcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmNsZWFyTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcclxuXHJcblx0XHRcdFx0dGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdGlmICghY2xvc2VUYWIpXHJcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZVNpbmdsZUl0ZW1zKGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlQ2FsbGJhY2tzKCdvblNhdmVTdWNjZXNzJywgY29udmVyc2lvbk1hcCkudGhlbihcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCFjbG9zZVRhYikge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZXhlY3V0ZUNhbGxiYWNrcygnb25TYXZlV2l0aG91dENsb3NpbmcnLCBjb252ZXJzaW9uTWFwLCB0cnVlKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmVuYWJsZUNoYW5nZXNXYXRjaGVyKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiBjb252ZXJzaW9uTWFwO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZXhlY3V0ZUNhbGxiYWNrcyAoZXZlbnQsIC4uLmFyZ3MpIHtcclxuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzW2V2ZW50XTtcclxuXHRcdGNvbnN0IHJlc3VsdDogYW55ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gY2FsbGJhY2tzKVxyXG5cdFx0XHRyZXN1bHRba2V5XSA9IGNhbGxiYWNrc1trZXldLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlbmFibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgIT09IG51bGwpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdDaGFuZ2VzIHdhdGNoZXIgYWxyZWFkeSBydW5uaW5nIScsIHRoaXMpO1xyXG5cdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gc2V0SW50ZXJ2YWwoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRpZiAoIXRoaXMuZGV0ZWN0Q2hhbmdlcygpKVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHR0aGlzLmRpc2FibGVDaGFuZ2VzV2F0Y2hlcigpO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5pc0xvY2thYmxlKCkpXHJcblx0XHRcdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLmZldGNoTG9jayg8SXRlbUVudHJ5PiB0aGlzLnJvb3RJdGVtKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0MzAwMFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGRpc2FibGVDaGFuZ2VzV2F0Y2hlciAoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5jaGFuZ2VzSW50ZXJ2YWwgPT09IG51bGwpXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRjbGVhckludGVydmFsKHRoaXMuY2hhbmdlc0ludGVydmFsKTtcclxuXHRcdHRoaXMuY2hhbmdlc0ludGVydmFsID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdHJlZ2lzdGVyQ2FsbGJhY2sgKGV2ZW50OiBzdHJpbmcsIGtleTogc3RyaW5nLCBjYWxsYmFjayk6ICgpID0+IHZvaWQge1xyXG5cdFx0dGhpcy5jYWxsYmFja3NbZXZlbnRdW2tleV0gPSBjYWxsYmFjaztcclxuXHJcblx0XHRyZXR1cm4gKCkgPT4gZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2V2ZW50XVtrZXldO1xyXG5cdH1cclxuXHJcblx0b25EZWFjdGl2YXRlSXRlbSAoaXRlbUVudHJ5KSB7XHJcblx0XHR0aGlzLmNsZWFySXRlbUVudHJ5KGl0ZW1FbnRyeSk7XHJcblx0XHQvLyB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0b25BY3RpdmF0ZUl0ZW0gKGl0ZW1FbnRyeSkge1xyXG5cdFx0dGhpcy5pdGVtcy5hZGQoaXRlbUVudHJ5KTtcclxuXHRcdC8vIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgY3JlYXRlUGF0aCB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9ja1NlcnZpY2Uge1xyXG5cdGxvY2tJdGVtcyA9IHt9O1xyXG5cdHByb21pc2VzID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHByaXZhdGUga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRnZXRWYWx1ZSAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG1hcCkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKG1hcFtpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHRyZXR1cm4gbWFwW2l0ZW1UeXBlXVtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHR9XHJcblxyXG5cdHNldFZhbHVlIChpdGVtRW50cnk6IEl0ZW1FbnRyeSwgdmFsdWUsIG1hcCkge1xyXG5cdFx0cmV0dXJuIGNyZWF0ZVBhdGgoXHJcblx0XHRcdG1hcCxcclxuXHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFt7fSwgdmFsdWVdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9ja3MgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMubG9ja0l0ZW1zO1xyXG5cdH1cclxuXHJcblx0aGFzTG9jayAobG9ja1Rva2VuSWQpIHtcclxuXHRcdGZvciAoY29uc3QgaXRlbVR5cGUgaW4gdGhpcy5sb2NrSXRlbXMpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdKSB7XHJcblx0XHRcdFx0Y29uc3QgbG9ja0l0ZW0gPSB0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV1baXRlbUlkXTtcclxuXHJcblx0XHRcdFx0Ly8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcclxuXHRcdFx0XHRpZiAoIWxvY2tJdGVtLmlzRm9yZWlnbiAmJiBsb2NrSXRlbS5pZCA9PSBsb2NrVG9rZW5JZClcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Ly8gc2hvdWxkIGJlIGZhc3QgKHdhdGNoZWQpXHJcblx0aXNMb2NrZWQgKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRyZXR1cm4gbG9ja0l0ZW0uaXNGb3JlaWduO1xyXG5cdH1cclxuXHJcblx0Z2V0TWVzc2FnZSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBsb2NrSXRlbSA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2tJdGVtID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0aWYgKCFsb2NrSXRlbS5pc0ZvcmVpZ24pXHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0cmV0dXJuIGxvY2tJdGVtLm1lc3NhZ2U7XHJcblx0fVxyXG5cclxuXHQvLyBkb2VzIG5vdCByZWplY3Qgd2hlbiBhIGZvcmVpZ24gbG9jayBpcyBlbmNvdW50ZXJlZFxyXG5cdC8vIGlzIGFsc28gdXNlZCBieSBkZWxldGVMb2NrXHJcblx0ZmV0Y2hDYWNoZWRMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgbG9jayA9IHRoaXMuZ2V0VmFsdWUoaXRlbUVudHJ5LCB0aGlzLmxvY2tJdGVtcyk7XHJcblxyXG5cdFx0aWYgKGxvY2sgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2Uud2hlbihsb2NrKTtcclxuXHJcblx0XHRjb25zdCBwcm9taXNlID0gdGhpcy5nZXRWYWx1ZShpdGVtRW50cnksIHRoaXMucHJvbWlzZXMpO1xyXG5cclxuXHRcdGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiBwcm9taXNlO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHR9XHJcblxyXG5cdGZldGNoTG9jayAoaXRlbUVudHJ5OiBJdGVtRW50cnkpIHtcclxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4obG9ja0l0ZW0gPT4ge1xyXG5cdFx0XHRcdGlmIChsb2NrSXRlbSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0TG9jayhpdGVtRW50cnkpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkudGhlbihsb2NrSXRlbSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIGxvY2tJdGVtLmlzRm9yZWlnbiA/XHJcblx0XHRcdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3QobG9ja0l0ZW0ubWVzc2FnZSkgOlxyXG5cdFx0XHRcdFx0bG9ja0l0ZW0udG9rZW47XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlcXVlc3RMb2NrIChpdGVtRW50cnk6IEl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cclxuXHRcdGNvbnN0IHByb21pc2UgPSB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLmNyZWF0ZShcclxuXHRcdFx0J0xvY2t0b2tlbicsXHJcblx0XHRcdHRoaXMua2V5U2VydmljZS5nZXRMb2NhbElkKCksXHJcblx0XHRcdHtpdGVtdHlwZTogaXRlbVR5cGUsIGl0ZW06IGl0ZW1JZH1cclxuXHRcdCkudGhlbihcclxuXHRcdFx0cmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2VzW2l0ZW1UeXBlXVtpdGVtSWRdO1xyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5zZXRWYWx1ZShcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmZldGNoT2JqZWN0KFxyXG5cdFx0XHRcdFx0XHQnTG9ja3Rva2VuJyxcclxuXHRcdFx0XHRcdFx0cmVzcG9uc2UubGlua3MuTG9ja3Rva2VuWzBdXHJcblx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0dGhpcy5sb2NrSXRlbXNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LCBlcnJvciA9PiB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucHJvbWlzZXNbaXRlbVR5cGVdW2l0ZW1JZF07XHJcblxyXG5cdFx0XHRcdGlmIChlcnJvci5jb2RlID09PSAzMDEpIHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnNldFZhbHVlKFxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnksXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRpc0ZvcmVpZ246IHRydWUsXHJcblx0XHRcdFx0XHRcdFx0bWVzc2FnZTogZXJyb3IubWVzc2FnZVxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2tJdGVtc1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5yZWplY3QoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnNldFZhbHVlKGl0ZW1FbnRyeSwgcHJvbWlzZSwgdGhpcy5wcm9taXNlcyk7XHJcblx0fVxyXG5cclxuXHRkZWxldGVMb2NrIChpdGVtRW50cnkpIHtcclxuXHRcdHJldHVybiB0aGlzLmZldGNoQ2FjaGVkTG9jayhpdGVtRW50cnkpLnRoZW4oY2FjaGVkTG9jayA9PiB7XHJcblx0XHRcdFx0Ly8gdW5kZWZpbmVkOiBub3QgcmVxdWVzdGVkIHlldFxyXG5cclxuXHRcdFx0XHRpZiAoY2FjaGVkTG9jayA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRpZiAoY2FjaGVkTG9jay5pc0ZvcmVpZ24pIHtcclxuXHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcGlSZXF1ZXN0U2VydmljZS5kZWxldGUoJ0xvY2t0b2tlbicsIGNhY2hlZExvY2suaWQpXHJcblx0XHRcdFx0XHQudGhlbihcclxuXHRcdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXJMb2NrKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJMb2NrIChpdGVtRW50cnkpIHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmxvY2tJdGVtc1tpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdHJldHVybiBkZWxldGUgdGhpcy5sb2NrSXRlbXNbaXRlbVR5cGVdW2l0ZW1FbnRyeS5pdGVtSWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIEl0ZW1DYWNoZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuaW1wb3J0IHsgaGFzUHJvcGVydGllcyB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5jb25zdCBFTVBUWV9FTlRSWSA9IHt9O1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbiB7XHJcblx0cGFyZW50TWFwOiBhbnkgPSB7fTtcclxuXHRkZXN0aW5hdGlvbjogYW55ID0ge307XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcm9vdEl0ZW1FbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0cHJpdmF0ZSBzaW5nbGVJdGVtQ2FjaGU6IEl0ZW1DYWNoZSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3MgKCkge1xyXG5cdFx0dGhpcy5wYXJlbnRNYXAgPSB0aGlzLmNyZWF0ZVBhcmVudE1hcCh0aGlzLnNpbmdsZUl0ZW1DYWNoZSk7XHJcblx0XHR0aGlzLnByb2Nlc3NJdGVtcyh0aGlzLnJvb3RJdGVtRW50cnkuaXRlbVR5cGUsIFt0aGlzLnJvb3RJdGVtRW50cnldLCB7fSk7XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aXRlbVR5cGU6IHRoaXMucm9vdEl0ZW1FbnRyeS5pdGVtVHlwZSxcclxuXHRcdFx0aXRlbUlkOiB0aGlzLnJvb3RJdGVtRW50cnkuaXRlbUlkLFxyXG5cdFx0XHRpdGVtczogdGhpcy5kZXN0aW5hdGlvblxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlUGFyZW50TWFwIChpdGVtQ2FjaGUpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdGl0ZW1DYWNoZS5mb3JFYWNoKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW1UeXBlID0gaXRlbUVudHJ5Lml0ZW1UeXBlO1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IGl0ZW1FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0XHRcdGlmIChwYXJlbnQgPT09IG51bGwpIC8vIHdlIGRvbid0IGNhcmUgZm9yIGl0ZW1zIHRoYXQgYXJlIG5vdCBsaW5rZWQgdG8gdGhlIHJvb3QgaXRlbVxyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Lml0ZW1UeXBlO1xyXG5cdFx0XHRcdGNvbnN0IHBhcmVudElkID0gcGFyZW50Lml0ZW1JZDtcclxuXHJcblx0XHRcdFx0aWYgKHJlc3VsdFtwYXJlbnRUeXBlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3BhcmVudFR5cGVdID0ge307XHJcblxyXG5cdFx0XHRcdGxldCBtYXBFbnRyeSA9IHJlc3VsdFtwYXJlbnRUeXBlXTtcclxuXHJcblx0XHRcdFx0aWYgKG1hcEVudHJ5W3BhcmVudElkXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0bWFwRW50cnlbcGFyZW50SWRdID0ge307XHJcblxyXG5cdFx0XHRcdG1hcEVudHJ5ID0gbWFwRW50cnlbcGFyZW50SWRdO1xyXG5cclxuXHRcdFx0XHRpZiAobWFwRW50cnlbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRtYXBFbnRyeVtpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHRcdFx0bWFwRW50cnlbaXRlbVR5cGVdLnB1c2goaXRlbUVudHJ5KTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzSXRlbXMgKGl0ZW1UeXBlLCBpdGVtRW50cmllczogSXRlbUVudHJ5W10sIGxpbmtBY2N1bXVsYXRvcikge1xyXG5cdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdID0ge307XHJcblxyXG5cdFx0aWYgKGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0gPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bGlua0FjY3VtdWxhdG9yW2l0ZW1UeXBlXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0XHQvLyBlYWNoIGl0ZW0gb25seSBoYXMgYSBzaW5nbGUgcGFyZW50LCBzbyB3ZSBjYW4gc2FmZWx5IGRvIHRoaXNcclxuXHRcdFx0aWYgKHRoaXMuZGVzdGluYXRpb25baXRlbVR5cGVdW2l0ZW1JZF0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGxpbmtBY2N1bXVsYXRvcltpdGVtVHlwZV0ucHVzaChpdGVtSWQpO1xyXG5cclxuXHRcdFx0dGhpcy5kZXN0aW5hdGlvbltpdGVtVHlwZV1baXRlbUlkXSA9IHRoaXMucHJvY2Vzc0l0ZW0oaXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc0l0ZW0gKGl0ZW1FbnRyeSkge1xyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBpdGVtRW50cnkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBpdGVtSWQgPSBpdGVtRW50cnkuaXRlbUlkO1xyXG5cdFx0Y29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZ2V0SXRlbXNCeVBhcmVudChpdGVtVHlwZSwgaXRlbUlkKTtcclxuXHRcdGNvbnN0IGNoaWxkQ29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDb2xsZWN0aW9uc0J5UGFyZW50KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0Y29uc3QgdmFsdWVzID0gaXRlbUVudHJ5LmZvcm1hdFJlcXVlc3QoKTtcclxuXHRcdGNvbnN0IGxpbmtzID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZFR5cGUgaW4gY2hpbGRJdGVtcylcclxuXHRcdFx0dGhpcy5wcm9jZXNzSXRlbXMoY2hpbGRUeXBlLCBjaGlsZEl0ZW1zW2NoaWxkVHlwZV0sIGxpbmtzKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb25FbnRyeSBvZiBjaGlsZENvbGxlY3Rpb25zKSB7XHJcblx0XHRcdGlmIChjb2xsZWN0aW9uRW50cnkub3B0aW9ucy5xdWVyeSAhPT0gbnVsbClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdHRoaXMucHJvY2Vzc0l0ZW1zKGNvbGxlY3Rpb25FbnRyeS5pdGVtVHlwZSwgY29sbGVjdGlvbkVudHJ5Lml0ZW1zLCBsaW5rcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaGFzVmFsdWVzID0gaGFzUHJvcGVydGllcyh2YWx1ZXMpO1xyXG5cdFx0Y29uc3QgaGFzTGlua3MgPSBoYXNQcm9wZXJ0aWVzKGxpbmtzKTtcclxuXHJcblx0XHRpZiAoaGFzVmFsdWVzICYmIGhhc0xpbmtzKVxyXG5cdFx0XHRyZXR1cm4ge3ZhbHVlczogdmFsdWVzLCBsaW5rczogbGlua3N9O1xyXG5cclxuXHRcdGlmIChoYXNWYWx1ZXMpXHJcblx0XHRcdHJldHVybiB7dmFsdWVzOiB2YWx1ZXN9O1xyXG5cclxuXHRcdGlmIChoYXNMaW5rcylcclxuXHRcdFx0cmV0dXJuIHtsaW5rczogbGlua3N9O1xyXG5cclxuXHRcdHJldHVybiBFTVBUWV9FTlRSWTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SXRlbXNCeVBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpIHtcclxuXHRcdGNvbnN0IG1hcEVudHJ5ID0gdGhpcy5wYXJlbnRNYXBbcGFyZW50VHlwZV07XHJcblxyXG5cdFx0aWYgKG1hcEVudHJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRpZiAobWFwRW50cnlbcGFyZW50SWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB7fTtcclxuXHJcblx0XHRyZXR1cm4gbWFwRW50cnlbcGFyZW50SWRdO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IEFwaUZvcm1hdHRlciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IGhhc1Byb3BlcnRpZXMsIGluQXJyYXkgfSBmcm9tICcuL1V0aWwnO1xyXG5cclxuY29uc3QgTUFZQkUgPSAnbWF5YmUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5TWF0Y2hlciB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRwdWJsaWMgZmllbGRzOiBGaWVsZE1hcCxcclxuXHRcdHB1YmxpYyBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCA9IG51bGxcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNvbXBhcmVWYWx1ZXMgKHZhbHVlLCBxdWVyeVZhbHVlKSB7XHJcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHF1ZXJ5VmFsdWUpKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5hcGlGb3JtYXR0ZXIuY29tcGFyZU1vbWVudE9iamVjdHMocXVlcnlWYWx1ZSwgdmFsdWUpO1xyXG5cclxuXHRcdGlmIChtb21lbnQuaXNEdXJhdGlvbihxdWVyeVZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIHRoaXMuYXBpRm9ybWF0dGVyLmNvbXBhcmVEdXJhdGlvbnMocXVlcnlWYWx1ZSwgdmFsdWUpO1xyXG5cclxuXHRcdC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXHJcblx0XHRyZXR1cm4gcXVlcnlWYWx1ZSA9PSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdG1hdGNoUXVlcnkgKHF1ZXJ5OiBhbnkpOiBib29sZWFuIHwgc3RyaW5nIHtcclxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaExpbmtlZFRvUXVlcnkocXVlcnkpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQ29tcGxleFF1ZXJ5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoU2ltcGxlUXVlcnkodGhpcy5maWVsZHNbcXVlcnkua2V5XSwgcXVlcnkpO1xyXG5cclxuXHRcdGlmICghaGFzUHJvcGVydGllcyhxdWVyeSkpXHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cclxuXHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlNYXRjaGVyOiBVbnN1cHBvcnRlZCBxdWVyeSEgUGFyc2VkPycpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBtYXRjaExpbmtlZFRvUXVlcnkgKHF1ZXJ5KSB7XHJcblx0XHRpZiAocXVlcnkucmV2ZXJzZSlcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0bGV0IG1hdGNoO1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdG1hdGNoID0gZmFsc2U7XHJcblx0XHRlbHNlIGlmIChxdWVyeS5saW5rZWRUbyAhPT0gcGFyZW50Lml0ZW1UeXBlKVxyXG5cdFx0XHRtYXRjaCA9IGZhbHNlO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRtYXRjaCA9IHRoaXMubWF0Y2hTaW1wbGVRdWVyeShwYXJlbnQuaXRlbUlkLCBxdWVyeS5xdWVyeSk7XHJcblxyXG5cdFx0aWYgKG1hdGNoID09PSBNQVlCRSlcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cclxuXHRcdHJldHVybiBxdWVyeS5ub3QgPyAhbWF0Y2ggOiBtYXRjaDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF0Y2hDb21wbGV4UXVlcnkgKHF1ZXJ5KSB7XHJcblx0XHRjb25zdCBjb25kaXRpb25zID0gcXVlcnkuY29uZGl0aW9ucztcclxuXHJcblx0XHRsZXQgcmVzdWx0O1xyXG5cdFx0bGV0IHRlcm1pbmFsO1xyXG5cclxuXHRcdHN3aXRjaCAocXVlcnkub3BlcmF0b3IpIHtcclxuXHRcdFx0Y2FzZSAnQU5EJzpcclxuXHRcdFx0XHRyZXN1bHQgPSB0cnVlO1xyXG5cdFx0XHRcdHRlcm1pbmFsID0gZmFsc2U7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ09SJzpcclxuXHRcdFx0XHRyZXN1bHQgPSBmYWxzZTtcclxuXHRcdFx0XHR0ZXJtaW5hbCA9IHRydWU7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdxdWVyeU1hdGNoZXI6IFVuc3VwcG9ydGVkIG9wZXJhdG9yJyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucykge1xyXG5cdFx0XHRjb25zdCBtYXRjaCA9IHRoaXMubWF0Y2hRdWVyeShjb25kaXRpb24pO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoID09PSB0ZXJtaW5hbClcclxuXHRcdFx0XHRyZXR1cm4gdGVybWluYWw7XHJcblxyXG5cdFx0XHRpZiAobWF0Y2ggPT09IE1BWUJFKVxyXG5cdFx0XHRcdHJlc3VsdCA9IE1BWUJFO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG1hdGNoU2ltcGxlUXVlcnkgKHZhbHVlLCBxdWVyeSkge1xyXG5cdFx0Y29uc3Qga2V5ID0gcXVlcnkua2V5O1xyXG5cdFx0bGV0IHF1ZXJ5VmFsdWUgPSBxdWVyeS52YWx1ZTtcclxuXHJcblx0XHRpZiAoIWhhc1Byb3BlcnRpZXMocXVlcnkpKSAvLyBDb3VsZCBiZSBsaW5rZWRUbyBhbiBlbXB0eSBvYmplY3RcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblxyXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc29sZS53YXJuKCdSZXF1aXJlZCBmaWVsZCcsIGtleSwgJ25vdCBmb3VuZCBmb3InLCB0aGlzLml0ZW1UeXBlKTtcclxuXHRcdFx0cmV0dXJuIE1BWUJFO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChxdWVyeVZhbHVlID09PSAnTk9XJylcclxuXHRcdFx0cXVlcnlWYWx1ZSA9IG1vbWVudCgpO1xyXG5cclxuXHRcdHN3aXRjaCAocXVlcnkuY29tcGFyYXRvcikge1xyXG5cdFx0XHRjYXNlICc9JzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnIT0nOlxyXG5cdFx0XHRcdHJldHVybiAhdGhpcy5jb21wYXJlVmFsdWVzKHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0Y2FzZSAnPCc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlIDwgcXVlcnlWYWx1ZTtcclxuXHRcdFx0Y2FzZSAnPD0nOlxyXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA8PSBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc+JzpcclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPiBxdWVyeVZhbHVlO1xyXG5cdFx0XHRjYXNlICc+PSc6XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlID49IHF1ZXJ5VmFsdWU7XHJcblx0XHRcdGNhc2UgJ0lOJzpcclxuXHRcdFx0XHRyZXR1cm4gaW5BcnJheSh2YWx1ZSwgcXVlcnlWYWx1ZSk7XHJcblx0XHRcdGNhc2UgJ05PVCBJTic6XHJcblx0XHRcdFx0cmV0dXJuICFpbkFycmF5KHZhbHVlLCBxdWVyeVZhbHVlKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5TWF0Y2hlcjogVW5zdXBwb3J0ZWQgY29tcGFyYXRvcjogJyArIHF1ZXJ5LmNvbXBhcmF0b3IgKyAnIGluIHF1ZXJ5ICcgKyBxdWVyeSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rmlyc3RQcm9wZXJ0eSB9IGZyb20gJy4vVXRpbCc7XHJcblxyXG5lbnVtIENPTlNUQU5UUyB7XHJcblx0T0JKID0gMCxcclxuXHRTVFIgPSAxLFxyXG5cdFNFUCA9ICc6J1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xyXG5cdHF1ZXJ5OiBhbnk7XHJcblx0cGFyYW1ldGVyczogYW55O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAocXVlcnksIHBhcmFtZXRlcnM/KSB7XHJcblx0XHR0aGlzLnF1ZXJ5ID0gcXVlcnk7XHJcblx0XHR0aGlzLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwcm9jZXNzVmFsdWUgKHZhbHVlKSB7XHJcblx0XHQvLyBhbGdvcml0aG0gaXMgbm90IGltcG9ydGFudCwgYXMgbG9uZyBhcyBhbGwgYXJyYXlzIGFyZSBzb3J0ZWQgdGhlIHNhbWUgd2F5XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcblx0XHRcdHJldHVybiB2YWx1ZS5zbGljZSgpLnNvcnQoKTtcclxuXHJcblx0XHRpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIG1vbWVudCh2YWx1ZSk7XHJcblxyXG5cdFx0aWYgKG1vbWVudC5pc0R1cmF0aW9uKHZhbHVlKSlcclxuXHRcdFx0cmV0dXJuIG1vbWVudC5kdXJhdGlvbih2YWx1ZSk7XHJcblxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjb21wYXJlUGFyc2VkUXVlcmllcyAoYSwgYikge1xyXG5cdFx0aWYgKGFbQ09OU1RBTlRTLlNUUl0gPT09IGJbQ09OU1RBTlRTLlNUUl0pXHJcblx0XHRcdHJldHVybiAwO1xyXG5cclxuXHRcdHJldHVybiBhW0NPTlNUQU5UUy5TVFJdID4gYltDT05TVEFOVFMuU1RSXSA/IDEgOiAtMTtcclxuXHR9XHJcblxyXG5cdHBhcnNlIChxdWVyeSA9IHRoaXMucXVlcnkpIHtcclxuXHRcdGlmIChxdWVyeS5saW5rZWRUbyAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZUxpbmtlZFRvUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkubGlua2VkVG8sXHJcblx0XHRcdFx0cXVlcnkucXVlcnksXHJcblx0XHRcdFx0cXVlcnkucmV2ZXJzZSxcclxuXHRcdFx0XHRxdWVyeS5ub3RcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkubm90ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFwiTm90XCIgbm90IHN1cHBvcnRlZCcpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jdXN0b20gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VDdXN0b21RdWVyeShcclxuXHRcdFx0XHRxdWVyeS5jdXN0b20sXHJcblx0XHRcdFx0cXVlcnkucGFyYW1ldGVyc1xyXG5cdFx0XHQpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5zZWFyY2ggIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VTZWFyY2hRdWVyeShxdWVyeS5zZWFyY2gpO1xyXG5cclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlQ29tcGxleFF1ZXJ5KFxyXG5cdFx0XHRcdHF1ZXJ5LmNvbmRpdGlvbnMsXHJcblx0XHRcdFx0cXVlcnkub3BlcmF0b3JcclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAocXVlcnkua2V5ICE9PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlU2ltcGxlUXVlcnkoXHJcblx0XHRcdFx0cXVlcnkua2V5LFxyXG5cdFx0XHRcdHF1ZXJ5LnZhbHVlLFxyXG5cdFx0XHRcdHF1ZXJ5LmNvbXBhcmF0b3JcclxuXHRcdFx0KTtcclxuXHJcblx0XHRjb25zdCBrZXkgPSBnZXRGaXJzdFByb3BlcnR5KHF1ZXJ5KTtcclxuXHJcblx0XHRpZiAoa2V5ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gW3t9LCAne30nXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wYXJzZVNpbXBsZVF1ZXJ5KGtleSwgcXVlcnlba2V5XSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlU2VhcmNoUXVlcnkgKHZhbHVlKSB7XHJcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiBbXHJcblx0XHRcdHtzZWFyY2g6IHZhbHVlW0NPTlNUQU5UUy5PQkpdfSxcclxuXHRcdFx0J1snICsgJ3NlYXJjaCcgKyBDT05TVEFOVFMuU0VQICsgdmFsdWVbQ09OU1RBTlRTLlNUUl0gKyAnXSdcclxuXHRcdF07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlQ3VzdG9tUXVlcnkgKGN1c3RvbSwgcGFyYW1ldGVycykge1xyXG5cdFx0aWYgKHBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIFtcclxuXHRcdFx0XHR7Y3VzdG9tOiBjdXN0b219LFxyXG5cdFx0XHRcdCdbJyArIGN1c3RvbSArICddJ1xyXG5cdFx0XHRdO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZFBhcmFtZXRlcnMgPSB0aGlzLnBhcnNlQ3VzdG9tUGFyYW1ldGVycyhwYXJhbWV0ZXJzKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7Y3VzdG9tOiBjdXN0b20sIHBhcmFtZXRlcnM6IHBhcnNlZFBhcmFtZXRlcnNbQ09OU1RBTlRTLk9CSl19LFxyXG5cdFx0XHQnWycgKyBjdXN0b20gKyBDT05TVEFOVFMuU0VQICsgcGFyc2VkUGFyYW1ldGVyc1tDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDdXN0b21QYXJhbWV0ZXJzIChwYXJhbWV0ZXJzKSB7XHJcblx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycykuc29ydCgpO1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5ID0ge307XHJcblx0XHRsZXQgc3RyaW5nID0gJyc7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGtleXNbaV07XHJcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZShwYXJhbWV0ZXJzW2tleV0pO1xyXG5cclxuXHRcdFx0cXVlcnlba2V5XSA9IHZhbHVlW0NPTlNUQU5UUy5PQkpdO1xyXG5cclxuXHRcdFx0aWYgKGkgPiAwKVxyXG5cdFx0XHRcdHN0cmluZyArPSBDT05TVEFOVFMuU0VQO1xyXG5cclxuXHRcdFx0c3RyaW5nICs9IHZhbHVlW0NPTlNUQU5UUy5TVFJdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBbcXVlcnksIHN0cmluZ107XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHBhcnNlU2ltcGxlUXVlcnkgKGtleSwgdmFsdWUsIGNvbXBhcmF0b3I/KSB7XHJcblx0XHR2YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdGlmIChjb21wYXJhdG9yID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGNvbXBhcmF0b3IgPSBBcnJheS5pc0FycmF5KHZhbHVlW0NPTlNUQU5UUy5PQkpdKSA/ICdJTicgOiAnPSc7XHJcblxyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0e2tleToga2V5LCB2YWx1ZTogdmFsdWVbQ09OU1RBTlRTLk9CSl0sIGNvbXBhcmF0b3I6IGNvbXBhcmF0b3J9LFxyXG5cdFx0XHQnWycgKyBjb21wYXJhdG9yICsgQ09OU1RBTlRTLlNFUCArIGtleSArIENPTlNUQU5UUy5TRVAgKyB2YWx1ZVtDT05TVEFOVFMuU1RSXSArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VMaW5rZWRUb1F1ZXJ5IChsaW5rZWRUbywgcXVlcnksIHJldmVyc2UsIG5vdCkge1xyXG5cdFx0aWYgKHF1ZXJ5ID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHF1ZXJ5ID0ge307XHJcblxyXG5cdFx0aWYgKHJldmVyc2UgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV2ZXJzZSA9IGZhbHNlO1xyXG5cclxuXHRcdGlmIChub3QgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0bm90ID0gZmFsc2U7XHJcblxyXG5cdFx0Y29uc3QgcGFyc2VkUXVlcnkgPSB0aGlzLnBhcnNlKHF1ZXJ5KTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7bGlua2VkVG86IGxpbmtlZFRvLCBxdWVyeTogcGFyc2VkUXVlcnlbQ09OU1RBTlRTLk9CSl0sIHJldmVyc2U6IHJldmVyc2UsIG5vdDogbm90fSxcclxuXHRcdFx0J1snICsgJ2xpbmtlZFRvJyArIENPTlNUQU5UUy5TRVAgKyBsaW5rZWRUbyArIENPTlNUQU5UUy5TRVAgKyBwYXJzZWRRdWVyeVtDT05TVEFOVFMuU1RSXSArIENPTlNUQU5UUy5TRVAgKyByZXZlcnNlICsgQ09OU1RBTlRTLlNFUCArIG5vdCArICddJ1xyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcGFyc2VDb21wbGV4UXVlcnkgKGNvbmRpdGlvbnMsIG9wZXJhdG9yKSB7XHJcblx0XHRpZiAob3BlcmF0b3IgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0b3BlcmF0b3IgPSAnQU5EJztcclxuXHRcdGVsc2VcclxuXHRcdFx0b3BlcmF0b3IgPSBvcGVyYXRvci50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHRcdGNvbnN0IHBhcnNlZENvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhjb25kaXRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7Y29uZGl0aW9uczogcGFyc2VkQ29uZGl0aW9uc1tDT05TVEFOVFMuT0JKXSwgb3BlcmF0b3I6IG9wZXJhdG9yfSxcclxuXHRcdFx0J1snICsgb3BlcmF0b3IgKyBwYXJzZWRDb25kaXRpb25zW0NPTlNUQU5UUy5TVFJdICsgJ10nXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwYXJzZUNvbmRpdGlvbnMgKGNvbmRpdGlvbnMpIHtcclxuXHRcdGxldCBwYXJzZWRDb25kaXRpb25zOiBvYmplY3RbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcXVlcnk6IG9iamVjdFtdID0gW107XHJcblx0XHRsZXQgc3RyaW5nID0gJyc7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb25kaXRpb24gb2YgY29uZGl0aW9ucylcclxuXHRcdFx0cGFyc2VkQ29uZGl0aW9ucy5wdXNoKHRoaXMucGFyc2UoY29uZGl0aW9uKSk7XHJcblxyXG5cdFx0cGFyc2VkQ29uZGl0aW9ucyA9IHBhcnNlZENvbmRpdGlvbnMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wYXJlUGFyc2VkUXVlcmllcyhhLCBiKSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBwYXJzZWRDb25kaXRpb24gb2YgcGFyc2VkQ29uZGl0aW9ucykge1xyXG5cdFx0XHRxdWVyeS5wdXNoKHBhcnNlZENvbmRpdGlvbltDT05TVEFOVFMuT0JKXSk7XHJcblx0XHRcdHN0cmluZyArPSBwYXJzZWRDb25kaXRpb25bQ09OU1RBTlRTLlNUUl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFtxdWVyeSwgc3RyaW5nXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9ybWF0VmFsdWUgKHZhbHVlKSB7XHJcblx0XHRsZXQgcHJvY2Vzc2VkVmFsdWU7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuY2hhckF0KDApID09PSAnJicpIHtcclxuXHRcdFx0Y29uc3Qga2V5ID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xyXG5cclxuXHRcdFx0dmFsdWUgPSB0aGlzLnBhcmFtZXRlcnNba2V5XTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcigncXVlcnlQYXJzZXI6IFVuZGVmaW5lZCB0ZW1wbGF0ZSBwYXJhbWV0ZXIgXFwnJyArIGtleSArICdcXCcnKTtcclxuXHJcblx0XHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdFx0cmV0dXJuIFtwcm9jZXNzZWRWYWx1ZSwga2V5ICsgJz4nICsgdmFsdWVdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHByb2Nlc3NlZFZhbHVlID0gdGhpcy5wcm9jZXNzVmFsdWUodmFsdWUpO1xyXG5cclxuXHRcdHJldHVybiBbcHJvY2Vzc2VkVmFsdWUsICcnICsgcHJvY2Vzc2VkVmFsdWVdO1xyXG5cdH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcclxuXHRjb25zdHJ1Y3RvciAoKSB7XHJcblx0fVxyXG5cclxuXHRhZGRBbmRDb25kaXRpb24gKHF1ZXJ5LCBjb25kaXRpb24pIHtcclxuXHRcdGlmIChxdWVyeS5jb25kaXRpb25zID09PSB1bmRlZmluZWQgfHwgcXVlcnkub3BlcmF0b3IgPT09ICdvcicpXHJcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dfTtcclxuXHJcblx0XHQvLyB3ZSBoYXZlIGFuICdhbmQnIGNvbmRpdGlvblxyXG5cdFx0cmV0dXJuIHtjb25kaXRpb25zOiBxdWVyeS5jb25kaXRpb25zLmNvbmNhdChjb25kaXRpb24pfTtcclxuXHR9XHJcblxyXG5cdGFkZE9yQ29uZGl0aW9uIChxdWVyeSwgY29uZGl0aW9uKSB7XHJcblx0XHRpZiAocXVlcnkub3BlcmF0b3IgPT09ICdvcicpXHJcblx0XHRcdHJldHVybiB7Y29uZGl0aW9uczogcXVlcnkuY29uZGl0aW9ucy5jb25jYXQoY29uZGl0aW9uKX07XHJcblxyXG5cdFx0Ly8gd2UgaGF2ZSBhbiAnYW5kJyBjb25kaXRpb25cclxuXHRcdHJldHVybiB7Y29uZGl0aW9uczogW3F1ZXJ5LCBjb25kaXRpb25dLCBvcGVyYXRvcjogJ29yJ307XHJcblx0fVxyXG5cclxuXHRhZGRQYXJlbnRDb25kaXRpb24gKHF1ZXJ5LCBwYXJlbnQpIHtcclxuXHRcdGxldCBsaW5rZWRUb1F1ZXJ5O1xyXG5cclxuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpXHJcblx0XHRcdHJldHVybiBxdWVyeTtcclxuXHJcblx0XHRsaW5rZWRUb1F1ZXJ5ID0ge2xpbmtlZFRvOiBwYXJlbnQuaXRlbVR5cGUsIHF1ZXJ5OiBwYXJlbnQuaXRlbUlkfTtcclxuXHJcblx0XHRyZXR1cm4gcXVlcnkgPT09IG51bGwgPyBsaW5rZWRUb1F1ZXJ5IDogdGhpcy5hZGRBbmRDb25kaXRpb24ocXVlcnksIGxpbmtlZFRvUXVlcnkpO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlTm90SW4gKGlkQXJyYXkpIHtcclxuXHRcdHJldHVybiB7Y29tcGFyYXRvcjogJ05PVCBJTicsIGtleTogJ2lkJywgdmFsdWU6IGlkQXJyYXl9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2x1bW5VdGlsIH0gZnJvbSAnLi9Db2x1bW5VdGlsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uIHtcclxuXHRwcml2YXRlIGNvbHVtbnMgPSB7fTtcclxuXHRwcml2YXRlIGNvbHVtbkluZm9JZE1hcCA9IHt9O1xyXG5cclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGV4cGFuZCAoY29sdW1uSW5mbykge1xyXG5cdFx0aWYgKHRoaXMuY29sdW1uSW5mb0lkTWFwW2NvbHVtbkluZm8uaWRdKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgaXRlbVR5cGUgPSBjb2x1bW5JbmZvLml0ZW1UeXBlO1xyXG5cclxuXHRcdGlmICh0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMuY29sdW1uc1tpdGVtVHlwZV0gPSBbXTtcclxuXHJcblx0XHR0aGlzLmNvbHVtbnNbaXRlbVR5cGVdID0gdGhpcy5jb2x1bW5VdGlsXHJcblx0XHRcdC5tZXJnZVJlcXVlc3RDb2x1bW5zKHRoaXMuY29sdW1uc1tpdGVtVHlwZV0sIGNvbHVtbkluZm8ucmVxdWVzdClcclxuXHRcdFx0Lm1lcmdlZDtcclxuXHJcblx0XHR0aGlzLmNvbHVtbkluZm9JZE1hcFtjb2x1bW5JbmZvLmlkXSA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRnZXQgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2xsZWN0aW9uSGFuZGxlciwgSXRlbUhhbmRsZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHtcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENvbHVtblNldEZhY3RvcnksXHJcblx0SXRlbUVudHJ5RmFjdG9yeSxcclxuXHRSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLCBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbk1hdGNoUmVzdWx0LCBGaWVsZE1hcCwgSXRlbUlkIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNvY2tldE1lc3NhZ2VIYW5kbGVyIHtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgYXBpUmVxdWVzdFNlcnZpY2U6IEFwaVJlcXVlc3RTZXJ2aWNlSW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBpdGVtSGFuZGxlcjogSXRlbUhhbmRsZXIsXHJcblx0XHRwcml2YXRlIGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sdW1uU2V0RmFjdG9yeTogQ29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sdW1uRXhwYW5zaW9uRmFjdG9yeTogQ29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgcmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdG9uTWVzc2FnZVJlY2VpdmVkIChtZXNzYWdlOiBhbnkpOiBhbnkge1xyXG5cdFx0c3dpdGNoIChtZXNzYWdlLmJvZHkuZXZlbnRUeXBlKSB7XHJcblx0XHRcdGNhc2UgJ3VwZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlVXBkYXRlKG1lc3NhZ2UpO1xyXG5cdFx0XHRjYXNlICdjcmVhdGUnOlxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmhhbmRsZUNyZWF0ZShtZXNzYWdlKTtcclxuXHRcdFx0Y2FzZSAnZGVsZXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5oYW5kbGVEZWxldGUobWVzc2FnZSk7XHJcblx0XHRcdGNhc2UgJ2xpbmtUbyc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlTGlua01vdmUoLyogbWVzc2FnZSAqLyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRmb3JtYXRNZXNzYWdlVmFsdWVzICh2YWx1ZXMsIGNvbHVtbnMpOiBGaWVsZE1hcCB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIGNvbHVtbnMpXHJcblx0XHRcdHJlc3VsdFtjb2x1bW5JZF0gPSB0aGlzLmFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZVZhbHVlKGNvbHVtbnNbY29sdW1uSWRdLnR5cGUsIHZhbHVlc1tjb2x1bW5JZF0pO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVDb2xsZWN0aW9uTWFwIChpdGVtVHlwZSwgaXRlbXMsIGNvbHVtbnMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdDoge1tpdGVtSWQ6IG51bWJlcl06IENvbGxlY3Rpb25NYXRjaFJlc3VsdH0gPSB7fTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBpdGVtcykge1xyXG5cdFx0XHRjb25zdCBpdGVtID0gaXRlbXNbaXRlbUlkXTtcclxuXHRcdFx0Y29uc3QgcGFyZW50ID0gaXRlbS5wYXJlbnQgIT09IG51bGwgPyBpdGVtLnBhcmVudCA6IHt9O1xyXG5cclxuXHRcdFx0cmVzdWx0W2l0ZW1JZF0gPSB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmVudHJpZXMuZ2V0QnlGaXR0aW5nSXRlbShcclxuXHRcdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0XHR0aGlzLmZvcm1hdE1lc3NhZ2VWYWx1ZXMoaXRlbS52YWx1ZXMsIGNvbHVtbnMpLFxyXG5cdFx0XHRcdHBhcmVudFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRncm91cEJ5Q29sbGVjdGlvbklkIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgaW4gY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcclxuXHJcblx0XHRcdGZvciAoY29uc3Qgc3RhdHVzIGluIGNvbGxlY3Rpb25zKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zW3N0YXR1c10pIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb24uaWQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRcdHJlc3VsdFtjb2xsZWN0aW9uSWRdID0ge1xyXG5cdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb24sXHJcblx0XHRcdFx0XHRcdFx0Zml0dGluZzogW10sXHJcblx0XHRcdFx0XHRcdFx0bm90Zml0dGluZzogW10sXHJcblx0XHRcdFx0XHRcdFx0bWF5YmU6IFtdXHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0cmVzdWx0W2NvbGxlY3Rpb25JZF1bc3RhdHVzXS5wdXNoKFxyXG5cdFx0XHRcdFx0XHRzdGF0dXMgPT09ICdmaXR0aW5nJyA/IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZCkgOiBpdGVtSWRcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGdldFJlcXVlc3RDb2x1bW5zIChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkge1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeS5jb25zdHJ1Y3QoKTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZCBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25zID0gY29sbGVjdGlvbk1hcFtpdGVtSWRdO1xyXG5cdFx0XHRjb25zdCBmaXR0aW5nQ29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5maXR0aW5nO1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBmaXR0aW5nQ29sbGVjdGlvbiBvZiBmaXR0aW5nQ29sbGVjdGlvbnMpXHJcblx0XHRcdFx0Y29sdW1uRXhwYW5zaW9uLmV4cGFuZChmaXR0aW5nQ29sbGVjdGlvbi5jb2x1bW5zKTtcclxuXHJcblx0XHRcdGlmIChpdGVtRW50cnkgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb2x1bW5FeHBhbnNpb24uZXhwYW5kKGl0ZW1FbnRyeS5jb2x1bW5zKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29sdW1uRXhwYW5zaW9uLmdldCgpO1xyXG5cdH1cclxuXHJcblx0ZGVmZXJFbnRyeSAoaXRlbUVudHJ5KSB7XHJcblx0XHRjb25zdCBkZWZlcnJlZCA9IGl0ZW1FbnRyeS5kZWZlcnJlZDtcclxuXHJcblx0XHRpZiAoZGVmZXJyZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIGl0ZW1FbnRyeS5kZWZlcihmYWxzZSk7XHJcblxyXG5cdFx0cmV0dXJuIGRlZmVycmVkLnByb21pc2UudGhlbihcclxuXHRcdFx0dGhpcy5kZWZlckVudHJ5LmJpbmQodGhpcyksXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHByb2Nlc3NNZXNzYWdlIChib2R5KSB7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IGJvZHkuaXRlbVR5cGU7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uTWFwKGl0ZW1UeXBlLCBib2R5Lml0ZW1zW2l0ZW1UeXBlXSwgYm9keS5jb2x1bW5zW2l0ZW1UeXBlXSk7XHJcblx0XHRjb25zdCByZXF1ZXN0Q29sdW1ucyA9IHRoaXMuZ2V0UmVxdWVzdENvbHVtbnMoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xyXG5cdFx0Y29uc3QgZGVmZXJyZWRFbnRyaWVzOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgcmVxdWVzdElkczogSXRlbUlkW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1JZFN0cmluZyBpbiBjb2xsZWN0aW9uTWFwKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuaXRlbUhhbmRsZXIuZW50cmllcy5nZXQoaXRlbVR5cGUsIGl0ZW1JZFN0cmluZyk7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9ICtpdGVtSWRTdHJpbmc7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRkZWZlcnJlZEVudHJpZXMucHVzaCh0aGlzLmRlZmVyRW50cnkoaXRlbUVudHJ5KSk7XHJcblx0XHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uTWFwW2l0ZW1JZF0uZml0dGluZy5sZW5ndGggPT09IDApXHJcblx0XHRcdFx0Y29udGludWU7XHJcblxyXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuYWRkKFxyXG5cdFx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3REZWZlcnJlZChpdGVtVHlwZSwgaXRlbUlkLCByZXF1ZXN0Q29sdW1uc1tpdGVtVHlwZV0sIGZhbHNlKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0cmVxdWVzdElkcy5wdXNoKGl0ZW1JZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHJlcXVlc3RJZHMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS53aGVuKHRoaXMuZ3JvdXBCeUNvbGxlY3Rpb25JZChpdGVtVHlwZSwgY29sbGVjdGlvbk1hcCkpOyAvLyBjb2xsZWN0aW9uTWFwIG1pZ2h0IGNvbnRhaW4gJ21heWJlJyBtYXRjaGVzXHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZVNlcnZpY2UuYWxsKGRlZmVycmVkRW50cmllcykudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLnF1ZXJ5KGl0ZW1UeXBlLCB7aWQ6IHJlcXVlc3RJZHN9LCByZXF1ZXN0Q29sdW1ucyk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS50aGVuKFxyXG5cdFx0XHRyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2UoaXRlbVR5cGUsIHJlcXVlc3RJZHMsIHJlcXVlc3RDb2x1bW5zW2l0ZW1UeXBlXSwgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcm9jZXNzRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZSAoYm9keSkge1xyXG5cdFx0Y29uc3QgaXRlbXMgPSBib2R5Lml0ZW1zLkZ1bmN0aW9uQ2hhbmdlc1Jlc29sdmU7XHJcblx0XHRjb25zdCBkZWZlcnJlZEVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRjb25zdCByZXF1ZXN0SWRzOiBJdGVtSWRbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUlkIGluIGl0ZW1zKSB7XHJcblx0XHRcdGNvbnN0IGZ1bmN0aW9uSWQgPSBpdGVtc1tpdGVtSWRdLnBhcmVudC5pdGVtSWQ7XHJcblx0XHRcdGNvbnN0IGZ1bmN0aW9uRW50cnkgPSB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgZnVuY3Rpb25JZCk7XHJcblxyXG5cdFx0XHRpZiAoZnVuY3Rpb25FbnRyeSA9PT0gdW5kZWZpbmVkIHx8IGZ1bmN0aW9uRW50cnkuY29sdW1ucy5yZXNwb25zZS5GdW5jdGllLm5ld2NoYW5nZXMgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdGRlZmVycmVkRW50cmllcy5wdXNoKHRoaXMuZGVmZXJFbnRyeShmdW5jdGlvbkVudHJ5KSk7XHJcblx0XHRcdHJlcXVlc3RJZHMucHVzaChmdW5jdGlvbklkKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVxdWVzdElkcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybjtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlU2VydmljZS5hbGwoZGVmZXJyZWRFbnRyaWVzKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UucXVlcnkoJ0Z1bmN0aWUnLCB7aWQ6IHJlcXVlc3RJZHN9LCB7RnVuY3RpZTogWyduZXdjaGFuZ2VzJ119KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRjb25zdCByZXNwb25zZUlkcyA9IHJlc3BvbnNlLmxpbmtzLkZ1bmN0aWU7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbUlkIG9mIHJlc3BvbnNlSWRzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KCdGdW5jdGllJywgaXRlbUlkKTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHMoXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5nZXRGaWVsZHMoKSxcclxuXHRcdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRcdGl0ZW1FbnRyeS5jb2x1bW5zLm1haW5cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25zdCByZXNwb25zZVZhbHVlID0gcmVzcG9uc2UuZmV0Y2hWYWx1ZSgnRnVuY3RpZScsIGl0ZW1JZCwgJ25ld2NoYW5nZXMnKTtcclxuXHJcblx0XHRcdFx0XHRpZiAocmVzcG9uc2VWYWx1ZSA9PT0gcHJldmlvdXMubmV3Y2hhbmdlcylcclxuXHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cclxuXHRcdFx0XHRcdGl0ZW1FbnRyeVxyXG5cdFx0XHRcdFx0XHQuc2V0SW5pdGlhbCh7bmV3Y2hhbmdlczogcmVzcG9uc2VWYWx1ZX0sIHRydWUpXHJcblx0XHRcdFx0XHRcdC5jYWxsT25DaGFuZ2UocHJldmlvdXMpXHJcblx0XHRcdFx0XHRcdC5yZXNvbHZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCkuY2F0Y2godGhpcy5lcnJvckhhbmRsZXIubm90aWZ5RXJyb3IpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlUmVzcG9uc2UgKGl0ZW1UeXBlLCByZXF1ZXN0SWRzLCByZXF1ZXN0Q29sdW1ucywgcmVzcG9uc2UsIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdGNvbnN0IHJlc3BvbnNlQ29sdW1ucyA9IHJlc3BvbnNlLmZldGNoQ29sdW1uc09iamVjdCgpO1xyXG5cdFx0Y29uc3QgY29sdW1uSW5mbyA9IHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3QoaXRlbVR5cGUsIHJlcXVlc3RDb2x1bW5zLCByZXNwb25zZUNvbHVtbnMpO1xyXG5cdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gdGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LmNvbnN0cnVjdChpdGVtVHlwZSwgcmVxdWVzdENvbHVtbnMsIHJlc3BvbnNlQ29sdW1ucyk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgcmVxdWVzdElkcykge1xyXG5cdFx0XHRjb25zdCBpdGVtRW50cnkgPSA8SXRlbUVudHJ5PiB0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuZ2V0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cdFx0XHRjb25zdCBpc05ldyA9IGl0ZW1FbnRyeS5pbml0aWFsID09PSB1bmRlZmluZWQ7XHJcblx0XHRcdGNvbnN0IGZpZWxkcyA9IHJlc3BvbnNlLmZldGNoT2JqZWN0KGl0ZW1UeXBlLCBpdGVtSWQpO1xyXG5cclxuXHRcdFx0aWYgKGZpZWxkcyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0aXRlbUVudHJ5LnJlamVjdCgpO1xyXG5cclxuXHRcdFx0XHRpZiAoaXNOZXcpXHJcblx0XHRcdFx0XHR0aGlzLml0ZW1IYW5kbGVyLmVudHJpZXMuY2xlYXIoaXRlbUVudHJ5KTtcclxuXHJcblx0XHRcdFx0ZGVsZXRlIGNvbGxlY3Rpb25NYXBbaXRlbUlkXTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgZGVyaXZlZCA9IHJlc3BvbnNlLmZldGNoRGVyaXZlZE9iamVjdChpdGVtVHlwZSwgaXRlbUlkLCBjb2x1bW5JbmZvLnJvb3QpO1xyXG5cclxuXHRcdFx0aWYgKGlzTmV3KVxyXG5cdFx0XHRcdGl0ZW1FbnRyeS5yZXNvbHZlRGVmZXJyZWQoZmllbGRzLCBkZXJpdmVkLCBjb2x1bW5JbmZvKTtcclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0Y29uc3QgZXhwYW5zaW9uUmVzdWx0ID0gY29sdW1uRXhwYW5zaW9uLnJ1bihpdGVtRW50cnkuY29sdW1ucyk7XHJcblx0XHRcdFx0Y29uc3QgcHJldmlvdXMgPSB0aGlzLmFwaUZvcm1hdHRlci5jb3B5RmllbGRzKFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LmdldEZpZWxkcygpLFxyXG5cdFx0XHRcdFx0e30sXHJcblx0XHRcdFx0XHRpdGVtRW50cnkuY29sdW1ucy5tYWluXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0aWYgKGV4cGFuc2lvblJlc3VsdCAhPT0gbnVsbClcclxuXHRcdFx0XHRcdGl0ZW1FbnRyeS5leHBhbmQoZmllbGRzLCBkZXJpdmVkLCBleHBhbnNpb25SZXN1bHQpO1xyXG5cclxuXHRcdFx0XHRpdGVtRW50cnlcclxuXHRcdFx0XHRcdC5zZXREZXJpdmVkKGRlcml2ZWQpXHJcblx0XHRcdFx0XHQudXBkYXRlRmllbGRzKGZpZWxkcywgZmFsc2UpXHJcblx0XHRcdFx0XHQuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKVxyXG5cdFx0XHRcdFx0LnJlc29sdmUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmdyb3VwQnlDb2xsZWN0aW9uSWQoaXRlbVR5cGUsIGNvbGxlY3Rpb25NYXApO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlQ3JlYXRlIChtZXNzYWdlKSB7XHJcblx0XHRjb25zdCBib2R5ID0gbWVzc2FnZS5ib2R5O1xyXG5cclxuXHRcdGlmIChib2R5Lml0ZW1UeXBlID09PSAnRnVuY3Rpb25DaGFuZ2VzUmVzb2x2ZScpXHJcblx0XHRcdHJldHVybiB0aGlzLnByb2Nlc3NGdW5jdGlvbkNoYW5nZXNSZXNvbHZlKGJvZHkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKGJvZHkpLnRoZW4oXHJcblx0XHRcdGNvbGxlY3Rpb25NYXAgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLmFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVVcGRhdGUgKG1lc3NhZ2UpIHtcclxuXHRcdHJldHVybiB0aGlzLnByb2Nlc3NNZXNzYWdlKG1lc3NhZ2UuYm9keSkudGhlbihcclxuXHRcdFx0Y29sbGVjdGlvbk1hcCA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdGlvbkhhbmRsZXIucmVtb3ZlRnJvbUFuZEFkZFRvQ29sbGVjdGlvbnMoY29sbGVjdGlvbk1hcCwgdHJ1ZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KS5jYXRjaCh0aGlzLmVycm9ySGFuZGxlci5ub3RpZnlFcnJvcik7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVEZWxldGUgKG1lc3NhZ2UpIHtcclxuXHRcdGNvbnN0IGJvZHkgPSBtZXNzYWdlLmJvZHk7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtSWQgb2YgYm9keS5pdGVtcykge1xyXG5cdFx0XHRjb25zdCBjb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbkhhbmRsZXIuZW50cmllcy5nZXRCeUNvbnRhaW5pbmdJdGVtKGJvZHkuaXRlbVR5cGUsIGl0ZW1JZCk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcclxuXHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uSWQgPSBjb2xsZWN0aW9uLmlkO1xyXG5cclxuXHRcdFx0XHRpZiAoY29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdID09PSB1bmRlZmluZWQpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF0gPSB7Y29sbGVjdGlvbjogY29sbGVjdGlvbiwgaXRlbXM6IFtdfTtcclxuXHJcblx0XHRcdFx0Y29sbGVjdGlvbk1hcFtjb2xsZWN0aW9uSWRdLml0ZW1zLnB1c2goaXRlbUlkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvbklkIGluIGNvbGxlY3Rpb25NYXApIHtcclxuXHRcdFx0Y29uc3QgbWFwRW50cnkgPSBjb2xsZWN0aW9uTWFwW2NvbGxlY3Rpb25JZF07XHJcblx0XHRcdG1hcEVudHJ5LmNvbGxlY3Rpb24ucmVtb3ZlSXRlbXMobWFwRW50cnkuaXRlbXMsIG51bGwsIHRydWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnByb21pc2VTZXJ2aWNlLndoZW4oKTtcclxuXHR9XHJcblxyXG5cdC8vIFRPRE8hXHJcblx0aGFuZGxlTGlua01vdmUgKCkge31cclxuXHJcbi8qXHRoYW5kbGVMaW5rTW92ZSAobWVzc2FnZSkge1xyXG5cdFx0cHJvY2Vzc01lc3NhZ2UoXHJcblx0XHRcdG1lc3NhZ2UsXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdC8vIGZpdHMgaW4gdGhpcyBjb2xsZWN0aW9uLCB0b2RvOiBnZXQgdGhlIG9sZCBjb2xsZWN0aW9uIGl0IGJlbG9uZ2VkIHRvXHJcblx0XHRcdFx0Y29sbGVjdGlvbi5tb3ZlSXRlbXMoaXRlbUVudHJpZXMsIG51bGwsIHRydWUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmdW5jdGlvbiAoY29sbGVjdGlvbiwgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHQvLyBtYXliZSBmaXRzXHJcblx0XHRcdFx0Ly8gdG9kbzogYWxzbyByZW1vdmUgdGhlbSBmcm9tIHRoZSBvbGQgY29sbGVjdGlvblxyXG5cdFx0XHRcdGNvbGxlY3Rpb24uZXh0ZW5kKGFuZ3VsYXIuaWRlbnRpdHksIGZhbHNlLCBmYWxzZSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZ1bmN0aW9uIChjb2xsZWN0aW9uLCBpZHMpIHtcclxuXHRcdFx0XHQvLyBub3QgZml0dGluZyBpbiB0aGlzIGNvbGxlY3Rpb24sIHJlbW92ZSBpdCA/XHJcblx0XHRcdFx0Y29sbGVjdGlvbi5yZW1vdmVJdGVtcyhpZHMsIG51bGwsIG1lc3NhZ2UpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuKi9cclxufVxyXG4iLCJleHBvcnQgKiBmcm9tICcuL0FwaUZvcm1hdHRlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQXBpUmVxdWVzdFNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlUHJvY2Vzc29yJztcclxuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ2hhbmdlc0NvbXBpbGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9DaGFuZ2VzUHJvY2Vzc29yJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25IYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uQ2FjaGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uSW5mbyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sdW1uU2V0JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5VdGlsJztcclxuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0JztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtQWRtaW5pc3RyYXRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtSGFuZGxlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlcXVlc3RTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtUmVzb3VyY2VTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9LZXlTZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NhbENhY2hlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Mb2NrU2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeU1hdGNoZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyJztcclxuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RDb2x1bW5FeHBhbnNpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL1NvY2tldE1lc3NhZ2VIYW5kbGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9VdGlsJztcclxuIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX187IiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBBcGlSZXNwb25zZVByb2Nlc3NvciB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHJlc3BvbnNlOiBhbnkpIHtcclxuXHRcdHJldHVybiBuZXcgQXBpUmVzcG9uc2VQcm9jZXNzb3IodGhpcy5hcGlGb3JtYXR0ZXIsIHJlc3BvbnNlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQmF0Y2hTdGF0dXMgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJdGVtSWQgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQmF0Y2hTdGF0dXNGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChnZXRJdGVtSWQ6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gSXRlbUlkLCBnZXRQcm9taXNlOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IFByb21pc2U8SXRlbUVudHJ5Pik6IEJhdGNoU3RhdHVzIHtcclxuXHRcdHJldHVybiBuZXcgQmF0Y2hTdGF0dXMoXHJcblx0XHRcdHRoaXMucHJvbWlzZVNlcnZpY2UsXHJcblx0XHRcdGdldEl0ZW1JZCxcclxuXHRcdFx0Z2V0UHJvbWlzZVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ2hhbmdlc0NvbXBpbGF0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkgfSBmcm9tICcuLyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2xsZWN0aW9uQ2FjaGVGYWN0b3J5OiBDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5XHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKHNpbmdsZUl0ZW1zOiBJdGVtRW50cnlbXSwgY29sbGVjdGlvbnM6IENvbGxlY3Rpb25FbnRyeVtdKTogQ2hhbmdlc0NvbXBpbGF0aW9uIHtcclxuXHRcdHJldHVybiBuZXcgQ2hhbmdlc0NvbXBpbGF0aW9uKFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRcdHNpbmdsZUl0ZW1zLFxyXG5cdFx0XHRjb2xsZWN0aW9uc1xyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRBcGlGb3JtYXR0ZXIsXHJcblx0Q2hhbmdlc1Byb2Nlc3NvcixcclxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxyXG5cdENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdEl0ZW1IYW5kbGVyXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdENyZWF0ZVJlcXVlc3RGYWN0b3J5LFxyXG5cdFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5XHJcbn0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsIEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZUludGVyZmFjZSxcclxuXHRcdHByaXZhdGUgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5LFxyXG5cdFx0cHJpdmF0ZSBjcmVhdGVSZXF1ZXN0RmFjdG9yeTogQ3JlYXRlUmVxdWVzdEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHByaXZhdGUgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwcml2YXRlIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlXHJcblx0KSB7XHJcblxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpOiBDaGFuZ2VzUHJvY2Vzc29yIHtcclxuXHRcdHJldHVybiBuZXcgQ2hhbmdlc1Byb2Nlc3NvcihcclxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcclxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcclxuXHRcdFx0dGhpcy5lcnJvckhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkhhbmRsZXIsXHJcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jcmVhdGVSZXF1ZXN0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXHJcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxyXG5cdFx0XHR0aGlzLnByb21pc2VTZXJ2aWNlXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvbkNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpIHtcclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkNhY2hlKFxyXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0Q29sbGVjdGlvbkVudHJ5U2VydmljZSwgSXRlbUVudHJ5U2VydmljZSwgSXRlbVJlcXVlc3RTZXJ2aWNlLCBLZXlTZXJ2aWNlLCBRdWVyeVNlcnZpY2VcclxufSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uRW50cnkgfSBmcm9tICcuLi9tb2RlbHMvJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRW50cnlGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgY29sbGVjdGlvbkVudHJ5U2VydmljZTogQ29sbGVjdGlvbkVudHJ5U2VydmljZSxcclxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHVibGljIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgaXRlbVJlcXVlc3RTZXJ2aWNlOiBJdGVtUmVxdWVzdFNlcnZpY2UsXHJcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBxdWVyeVNlcnZpY2U6IFF1ZXJ5U2VydmljZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChpdGVtVHlwZTogc3RyaW5nLCBvcHRpb25zKTogQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVudHJ5KFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25NYXRjaGVyIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBRdWVyeU1hdGNoZXJGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSB7XG5cdGNvbnN0cnVjdG9yIChcblx0XHRwcml2YXRlIHF1ZXJ5TWF0Y2hlckZhY3Rvcnk6IFF1ZXJ5TWF0Y2hlckZhY3Rvcnlcblx0KSB7XG5cdH1cblxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25DYWNoZXM6IENvbGxlY3Rpb25DYWNoZVtdLCB1cGRhdGVJbml0aWFsOiBib29sZWFuLCBjYWxsT25BY3RpdmF0ZTogYm9vbGVhbikge1xuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbk1hdGNoZXIoXG5cdFx0XHR0aGlzLnF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFx0XHRjb2xsZWN0aW9uQ2FjaGVzLFxuXHRcdFx0dXBkYXRlSW5pdGlhbCxcblx0XHRcdGNhbGxPbkFjdGl2YXRlXG5cdFx0KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQ29sbGVjdGlvblJlc291cmNlU2VydmljZSwgSXRlbUhhbmRsZXIsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksIEl0ZW1FbnRyeUZhY3RvcnksIEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSwgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIENvbGxlY3Rpb25WaWV3UmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlckludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBpdGVtRW50cnlGYWN0b3J5OiBJdGVtRW50cnlGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcixcclxuXHRcdHB1YmxpYyBpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0cHVibGljIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxyXG5cdFx0cHVibGljIHByb21pc2VTZXJ2aWNlOiBQcm9taXNlSW50ZXJmYWNlLFxyXG5cdFx0cHVibGljIGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGNvbGxlY3Rpb25FbnRyeTogQ29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTogQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRcdG9wdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0aWYgKG9wdGlvbnMuZWRpdEl0ZW1zKVxyXG5cdFx0XHRjb2xsZWN0aW9uRW50cnkuaGFzSXRlbUVkaXRSZXNvdXJjZXMgPSB0cnVlO1xyXG5cclxuXHRcdGlmIChvcHRpb25zLmVkaXRDb2xsZWN0aW9uKSB7XHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyeS5oYXNFZGl0UmVzb3VyY2VzID0gdHJ1ZTtcclxuXHJcblx0XHRcdHJldHVybiBuZXcgQ29sbGVjdGlvbkVkaXRSZXNvdXJjZSh0aGlzLCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBuZXcgQ29sbGVjdGlvblZpZXdSZXNvdXJjZSh0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksIGNvbGxlY3Rpb25FbnRyeSwgb3B0aW9ucyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkV4cGFuc2lvbiwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TZXRGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5FeHBhbnNpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbHVtblV0aWw6IENvbHVtblV0aWxcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGl0ZW1UeXBlOiBzdHJpbmcsIHJlcXVlc3RDb2x1bW5zOiBhbnkgfCBib29sZWFuLCByZXNwb25zZUNvbHVtbnM6IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBDb2x1bW5FeHBhbnNpb24oXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsLFxyXG5cdFx0XHRpdGVtVHlwZSxcclxuXHRcdFx0cmVxdWVzdENvbHVtbnMsXHJcblx0XHRcdHJlc3BvbnNlQ29sdW1uc1xyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBSZXNwb25zZUNvbHVtbiB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW5JbmZvRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKCkge31cclxuXHJcblx0Y29uc3RydWN0IChhcGlDb2x1bW46IFJlc3BvbnNlQ29sdW1uLCBwYXJlbnQ6IENvbHVtbkluZm8pIHtcclxuXHRcdHJldHVybiBuZXcgQ29sdW1uSW5mbyhhcGlDb2x1bW4sIHBhcmVudCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtbkhhbmRsZXIsIENvbHVtblNldCwgQ29sdW1uVXRpbCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBDb2x1bW5JbmZvRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucywgUmVzcG9uc2VDb2x1bW5NYXAgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sdW1uU2V0RmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsLFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5JbmZvRmFjdG9yeTogQ29sdW1uSW5mb0ZhY3RvcnlcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdFN0dWIgKGl0ZW1UeXBlOiBJdGVtVHlwZSwgcmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHRyZXR1cm4gbmV3IENvbHVtblNldChcclxuXHRcdFx0dGhpcy5jb2x1bW5IYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWwsXHJcblx0XHRcdHRoaXMuY29sdW1uSW5mb0ZhY3RvcnksXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRyZXF1ZXN0Q29sdW1uc1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRyZXF1ZXN0Q29sdW1uczogUmVxdWVzdENvbHVtbnMsXHJcblx0XHRyZXNwb25zZUNvbHVtbnM6IFJlc3BvbnNlQ29sdW1uTWFwLFxyXG5cdFx0ZW5hYmxlQ2FjaGluZz8sXHJcblx0XHRpbmNsdWRlSWRDb2x1bW4/XHJcblx0KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKGl0ZW1UeXBlLCByZXF1ZXN0Q29sdW1ucykucmVzb2x2ZShyZXNwb25zZUNvbHVtbnMsIGVuYWJsZUNhY2hpbmcsIGluY2x1ZGVJZENvbHVtbik7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25IYW5kbGVyLCBDcmVhdGVSZXF1ZXN0LCBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSwgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENyZWF0ZVJlcXVlc3RGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25IYW5kbGVyOiBDb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5OiBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5OiBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoY29tcGlsYXRpb24sIGNvbGxlY3Rpb25FbnRyaWVzLCBwYXJhbWV0ZXJNYXAsIGJyZWFrdXBCeVBhcmVudD8pIHtcclxuXHRcdHJldHVybiBuZXcgQ3JlYXRlUmVxdWVzdChcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcclxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXHJcblx0XHRcdHRoaXMua2V5U2VydmljZSxcclxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcclxuXHRcdFx0Y29tcGlsYXRpb24sXHJcblx0XHRcdGNvbGxlY3Rpb25FbnRyaWVzLFxyXG5cdFx0XHRwYXJhbWV0ZXJNYXAsXHJcblx0XHRcdGJyZWFrdXBCeVBhcmVudFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUNhY2hlIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5TWF0Y2hlckZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1DYWNoZUZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgcXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0ICgpOiBJdGVtQ2FjaGUge1xyXG5cdFx0cmV0dXJuIG5ldyBJdGVtQ2FjaGUodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDb2x1bW5TZXQsIEl0ZW1FbnRyeVNlcnZpY2UsIEtleVNlcnZpY2UgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sdW1uU2V0RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEF1dGhJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEZpZWxkTWFwLCBJdGVtSWQsIEl0ZW1JZENvbnZlcnNpb25NYXAsIEl0ZW1UeXBlLCBSZXF1ZXN0Q29sdW1ucyB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtRW50cnlGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwdWJsaWMgYXV0aEludGVyZmFjZTogQXV0aEludGVyZmFjZSxcclxuXHRcdHB1YmxpYyBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlcixcclxuXHRcdHB1YmxpYyBjb2x1bW5TZXRGYWN0b3J5OiBDb2x1bW5TZXRGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2UsXHJcblx0XHRwdWJsaWMga2V5U2VydmljZTogS2V5U2VydmljZSxcclxuXHRcdHB1YmxpYyBwcm9taXNlU2VydmljZTogUHJvbWlzZUludGVyZmFjZVxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0U3R1YiAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBpdGVtSWQ6IEl0ZW1JZCwgY29sdW1uU2V0U3R1Yikge1xyXG5cdFx0cmV0dXJuIG5ldyBJdGVtRW50cnkoXHJcblx0XHRcdHRoaXMsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdGNvbHVtblNldFN0dWJcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RMb2NhbExpbmtlZCAoXHJcblx0XHRpdGVtVHlwZTogSXRlbVR5cGUsXHJcblx0XHRsb2NhbEl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXHJcblx0XHRwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCxcclxuXHRcdGNvbHVtblNldDogQ29sdW1uU2V0LFxyXG5cdFx0Y29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmNvbnN0cnVjdFN0dWIoaXRlbVR5cGUsIGxvY2FsSXRlbUlkLCBjb2x1bW5TZXQpO1xyXG5cclxuXHRcdGl0ZW1FbnRyeS5wYXJlbnQgPSBwYXJlbnQ7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeS5wcm9jZXNzTG9jYWwoaW5pdGlhbCwge30sIHt9LCBjb252ZXJzaW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdExvY2FsIChcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0dGVtcGxhdGU6IGFueSxcclxuXHRcdG1vZGlmaWVkOiBGaWVsZE1hcCxcclxuXHRcdGRlcml2ZWQ6IEZpZWxkTWFwLFxyXG5cdFx0cGFyZW50OiBFbnRyeVBhcmVudE51bGwgPSBudWxsLFxyXG5cdFx0Y29udmVyc2lvbk1hcD8sXHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1UeXBlID0gdGVtcGxhdGUuY29sdW1ucy5pdGVtVHlwZTtcclxuXHJcblx0XHRpZiAoY29udmVyc2lvbk1hcCA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGNvbnZlcnNpb25NYXAgPSB0aGlzLml0ZW1FbnRyeVNlcnZpY2UuY3JlYXRlTG9jYWxDb252ZXJzaW9uTWFwKGl0ZW1UeXBlLCBpdGVtSWQsIHRydWUsIHRlbXBsYXRlLnJlc3BvbnNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBpdGVtRW50cnkgPSB0aGlzLmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsIC8vIGluaXRpYWwuaWQgKHdoZW4gaW5pdGlhbCBpcyBub3QgYSB0ZW1wbGF0ZSlcclxuXHRcdFx0dGVtcGxhdGUuY29sdW1ucyxcclxuXHRcdCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRyZXR1cm4gaXRlbUVudHJ5LnByb2Nlc3NMb2NhbCh0ZW1wbGF0ZS5maWVsZHMsIG1vZGlmaWVkLCBkZXJpdmVkLCBjb252ZXJzaW9uTWFwKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdERlZmVycmVkIChcclxuXHRcdGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0cmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zLFxyXG5cdFx0ZGVmZXJSZXF1ZXN0OiBib29sZWFuXHJcblx0KTogSXRlbUVudHJ5IHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeVN0dWIgPSB0aGlzLmNvbnN0cnVjdFN0dWIoXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsXHJcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeS5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRcdHJlcXVlc3RDb2x1bW5zXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblxyXG5cdFx0aXRlbUVudHJ5U3R1Yi5kZWZlcihkZWZlclJlcXVlc3QpO1xyXG5cclxuXHRcdHJldHVybiBpdGVtRW50cnlTdHViO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0IChcclxuXHRcdGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0aW5pdGlhbDogRmllbGRNYXAsXHJcblx0XHRkZXJpdmVkOiBGaWVsZE1hcCxcclxuXHRcdGNvbHVtbkluZm86IENvbHVtblNldFxyXG5cdCk6IEl0ZW1FbnRyeSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdHViKFxyXG5cdFx0XHRjb2x1bW5JbmZvLml0ZW1UeXBlLFxyXG5cdFx0XHRpdGVtSWQsIC8vIGluaXRpYWwuaWQgKHdoZW4gaW5pdGlhbCBpcyBub3QgYSB0ZW1wbGF0ZSlcclxuXHRcdFx0Y29sdW1uSW5mbyxcclxuXHRcdCkucHJvY2VzcyhcclxuXHRcdFx0aW5pdGlhbCwgLy8gY2FuIGFsc28gYmUgYSB0ZW1wbGF0ZVxyXG5cdFx0XHRkZXJpdmVkLFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBDaGFuZ2VzUHJvY2Vzc29yLCBJdGVtUmVzb3VyY2VTZXJ2aWNlLCBMb2NrU2VydmljZSB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBFcnJvckhhbmRsZXJJbnRlcmZhY2UsIFByb21pc2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRWRpdFJlc291cmNlLCBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSwgVmlld1Jlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbU9wdGlvbnMgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVJlc291cmNlRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHVibGljIGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgYXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXIsXHJcblx0XHRwdWJsaWMgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxyXG5cdFx0cHVibGljIGNoYW5nZXNQcm9jZXNzb3I6IENoYW5nZXNQcm9jZXNzb3IsXHJcblx0XHRwdWJsaWMgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXHJcblx0XHRwdWJsaWMgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdGdldENvbnN0cnVjdG9yIChvcHRpb25zOiBJdGVtT3B0aW9ucyk6IChpdGVtRW50cnk6IEl0ZW1FbnRyeSkgPT4gSXRlbVJlc291cmNlIHtcclxuXHRcdG9wdGlvbnMgPSB0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcblxyXG5cdFx0cmV0dXJuIGl0ZW1FbnRyeSA9PiB7XHJcblx0XHRcdHJldHVybiBvcHRpb25zLmVkaXQgP1xyXG5cdFx0XHRcdG5ldyBFZGl0UmVzb3VyY2UodGhpcywgaXRlbUVudHJ5LCBvcHRpb25zKSA6XHJcblx0XHRcdFx0bmV3IFZpZXdSZXNvdXJjZShpdGVtRW50cnksIG9wdGlvbnMpO1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbUVudHJ5OiBJdGVtRW50cnksIG9wdGlvbnM6IEl0ZW1PcHRpb25zLCBpc05ldz86IGJvb2xlYW4pOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0b3B0aW9ucyA9IHRoaXMuaXRlbVJlc291cmNlU2VydmljZS5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuXHJcblx0XHRyZXR1cm4gb3B0aW9ucy5lZGl0ID9cclxuXHRcdFx0bmV3IEVkaXRSZXNvdXJjZSh0aGlzLCBpdGVtRW50cnksIG9wdGlvbnMsIGlzTmV3KSA6XHJcblx0XHRcdG5ldyBWaWV3UmVzb3VyY2UoaXRlbUVudHJ5LCBvcHRpb25zLCBpc05ldyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7XHJcblx0SXRlbVJlc291cmNlU2VydmljZSxcclxuXHRMb2NhbENhY2hlLFxyXG5cdExvY2tTZXJ2aWNlXHJcbn0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7XHJcblx0Q2hhbmdlc1Byb2Nlc3NvckZhY3RvcnksXHJcblx0Q29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5LFxyXG5cdEl0ZW1DYWNoZUZhY3RvcnksXHJcblx0SXRlbVJlc291cmNlRmFjdG9yeVxyXG59IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IEVycm9ySGFuZGxlckludGVyZmFjZSwgUHJvbWlzZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvY2FsQ2FjaGVGYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVySW50ZXJmYWNlLFxyXG5cdFx0cHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGl0ZW1SZXNvdXJjZUZhY3Rvcnk6IEl0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3RvcnksXHJcblx0XHRwcml2YXRlIGNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5OiBDaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeTogQ29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlU2VydmljZTogSXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgcHJvbWlzZVNlcnZpY2U6IFByb21pc2VJbnRlcmZhY2VcclxuXHQpIHtcclxuXHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKGlkPzogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gbmV3IExvY2FsQ2FjaGUoXHJcblx0XHRcdHRoaXMuZXJyb3JIYW5kbGVyLFxyXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxyXG5cdFx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuY29sbGVjdGlvbkNhY2hlRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcclxuXHRcdFx0dGhpcy5pdGVtQ2FjaGVGYWN0b3J5LFxyXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcclxuXHRcdFx0dGhpcy5wcm9taXNlU2VydmljZSxcclxuXHRcdFx0aWRcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbGxlY3Rpb25DYWNoZSwgSXRlbUNhY2hlLCBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5IHtcclxuXHRjb25zdHJ1Y3QgKHJvb3RJdGVtOiBJdGVtRW50cnksIHNpbmdsZUl0ZW1DYWNoZTogSXRlbUNhY2hlLCBjb2xsZWN0aW9uQ2FjaGU6IENvbGxlY3Rpb25DYWNoZSkge1xyXG5cdFx0cmV0dXJuIG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb24ocm9vdEl0ZW0sIHNpbmdsZUl0ZW1DYWNoZSwgY29sbGVjdGlvbkNhY2hlKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBpRm9ybWF0dGVyLCBRdWVyeU1hdGNoZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbVR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNYXRjaGVyRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBhcGlGb3JtYXR0ZXI6IEFwaUZvcm1hdHRlclxyXG5cdCkge1xyXG5cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAoaXRlbVR5cGU6IEl0ZW1UeXBlLCBmaWVsZHM6IEZpZWxkTWFwLCBwYXJlbnQ6IEVudHJ5UGFyZW50TnVsbCk6IFF1ZXJ5TWF0Y2hlciB7XHJcblx0XHRyZXR1cm4gbmV3IFF1ZXJ5TWF0Y2hlcihcclxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXHJcblx0XHRcdGl0ZW1UeXBlLFxyXG5cdFx0XHRmaWVsZHMsXHJcblx0XHRcdHBhcmVudFxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUXVlcnlQYXJzZXIgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVyeVBhcnNlckZhY3Rvcnkge1xyXG5cdGNvbnN0cnVjdG9yICgpIHtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdCAocXVlcnksIHBhcmFtZXRlcnM/KTogUXVlcnlQYXJzZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBRdWVyeVBhcnNlcihxdWVyeSwgcGFyYW1ldGVycyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbHVtblV0aWwsIFJlcXVlc3RDb2x1bW5FeHBhbnNpb24gfSBmcm9tICcuLi9jbGFzc2VzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBjb2x1bW5VdGlsOiBDb2x1bW5VdGlsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3QgKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBSZXF1ZXN0Q29sdW1uRXhwYW5zaW9uKFxyXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCAqIGZyb20gJy4vQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9CYXRjaFN0YXR1c0ZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NoYW5nZXNQcm9jZXNzb3JGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uQ2FjaGVGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRW50cnlGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uTWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0NvbHVtbkluZm9GYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2x1bW5TZXRGYWN0b3J5JztcclxuZXhwb3J0ICogZnJvbSAnLi9DcmVhdGVSZXF1ZXN0RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUNhY2hlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbUVudHJ5RmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vSXRlbVJlc291cmNlRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vTG9jYWxDYWNoZUZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL01vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5TWF0Y2hlckZhY3RvcnknO1xyXG5leHBvcnQgKiBmcm9tICcuL1F1ZXJ5UGFyc2VyRmFjdG9yeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnknO1xyXG4iLCJleHBvcnQgKiBmcm9tICcuL21haW4nO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9jbGFzc2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9mYWN0b3JpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcclxuIiwiaW1wb3J0IHsgQ29sdW1uRXhwYW5zaW9uLCBDb2x1bW5JbmZvLCBDb2x1bW5TZXQsIGluQXJyYXkgfSBmcm9tICcuLi9jbGFzc2VzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5RmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25SZXNvdXJjZSwgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFbnRyeVBhcmVudE51bGwsIEl0ZW1JZCwgSXRlbUlkQ29udmVyc2lvbk1hcCwgSXRlbVR5cGUsIFJlcXVlc3RDb2x1bW5zIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkVudHJ5IHtcclxuXHRpZDogbnVtYmVyID0gY3VycmVudElkKys7XHJcblx0cXVlcnk6IGFueTtcclxuXHRjb2x1bW5zOiBDb2x1bW5TZXQ7XHJcblxyXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcclxuXHJcblx0aW5pdGlhbDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHRpdGVtczogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0cmVzb3VyY2VzOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cdGRlZmVycmVkOiBhbnk7XHJcblx0cHJvbWlzZTogUHJvbWlzZTxDb2xsZWN0aW9uRW50cnk+O1xyXG5cdHJlbG9hZFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRoYXNFZGl0UmVzb3VyY2VzID0gZmFsc2U7XHJcblx0aGFzSXRlbUVkaXRSZXNvdXJjZXMgPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0cHJpdmF0ZSBmYWN0b3J5OiBDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxyXG5cdFx0cHVibGljIGl0ZW1UeXBlOiBJdGVtVHlwZSxcclxuXHRcdHB1YmxpYyBvcHRpb25zOiBhbnlcclxuXHQpIHtcclxuXHRcdHRoaXMuZGVmZXJyZWQgPSBmYWN0b3J5LnByb21pc2VTZXJ2aWNlLmRlZmVyKCk7XHJcblx0XHR0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7XHJcblxyXG5cdFx0dGhpcy5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG5cdFx0dGhpcy5wYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcclxuXHRcdHRoaXMucXVlcnkgPSBmYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBmYWN0b3J5LmNvbHVtblNldEZhY3RvcnkuY29uc3RydWN0U3R1YihpdGVtVHlwZSwgb3B0aW9ucy5jb2x1bW5zKTtcclxuXHR9XHJcblxyXG5cdGlzRGVmZXJyZWQgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZSAoaXRlbUVudHJ5Q29tcG91bmQ6IHtjb2x1bW5zOiBDb2x1bW5TZXQsIGl0ZW1zOiBJdGVtRW50cnlbXX0pOiBDb2xsZWN0aW9uRW50cnkge1xyXG5cdFx0Y29uc3QgZGVmZXJyZWQgPSB0aGlzLmRlZmVycmVkO1xyXG5cclxuXHRcdHRoaXMuY29sdW1ucyA9IGl0ZW1FbnRyeUNvbXBvdW5kLmNvbHVtbnM7XHJcblx0XHR0aGlzLmluaXRpYWwgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcztcclxuXHRcdHRoaXMuaXRlbXMgPSBpdGVtRW50cnlDb21wb3VuZC5pdGVtcy5zbGljZSgpO1xyXG5cclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMucHJvbWlzZTtcclxuXHJcblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAoKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5rZXlTZXJ2aWNlLmlzTG9jYWxJZChwYXJlbnQuaXRlbUlkKTtcclxuXHR9XHJcblxyXG5cdG1hdGNoUGFyZW50IChpdGVtVHlwZTogSXRlbVR5cGUsIGl0ZW1JZDogSXRlbUlkKTogYm9vbGVhbiB7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Ly8gPT0gdG8gY29tcGFyZSBpdGVtSWRzXHJcblx0XHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xyXG5cdFx0cmV0dXJuIHBhcmVudC5pdGVtVHlwZSA9PT0gaXRlbVR5cGUgJiYgcGFyZW50Lml0ZW1JZCA9PSBpdGVtSWQ7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1FbnRyeTogSXRlbUVudHJ5KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBtb2Qgb2YgbW9kaWZpZWQpXHJcblx0XHRcdGNhbGxiYWNrKG1vZCk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkKTogSXRlbUVudHJ5IHwgdW5kZWZpbmVkIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBtb2RpZmllZCkge1xyXG5cdFx0XHRpZiAoaXRlbUVudHJ5Lml0ZW1JZCA9PT0gaXRlbUlkKVxyXG5cdFx0XHRcdHJldHVybiBpdGVtRW50cnk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdGdldElkQXJyYXkgKGFjY3VtdWxhdG9yOiBJdGVtSWRbXSA9IFtdKTogSXRlbUlkW10ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmdldElkQXJyYXkodGhpcy5pdGVtcywgYWNjdW11bGF0b3IpO1xyXG5cdH1cclxuXHJcblx0YWRkSXRlbXMgKFxyXG5cdFx0aXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxyXG5cdFx0dXBkYXRlSW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlLFxyXG5cdFx0Y2FsbE9uQWRkPzogYm9vbGVhbixcclxuXHRcdGNhbGxPbkFjdGl2YXRlPzogYm9vbGVhblxyXG5cdCk6IEl0ZW1SZXNvdXJjZVtdIHwgbnVsbCB7XHJcblx0XHQvLyBsb2NhbCBlbnRyeSBtaWdodCBiZSBhZGRlZCBtdWx0aXBsZSB0aW1lcyAoZXh0ZW5kPylcclxuXHRcdGlmIChpdGVtRW50cmllcy5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCBtb2RpZmllZCA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudDtcclxuXHRcdGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuY29sdW1ucy5saW5rO1xyXG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Jbml0aWFsOiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10gPSBbXTtcclxuXHJcblx0XHRpZiAodXBkYXRlSW5pdGlhbCkge1xyXG5cdFx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpIHtcclxuXHRcdFx0XHQvLyB3aGVuIHNhdmluZywgaXRlbXMgdGhhdCBtaWdodCBhbHJlYWR5IGJlIGluIG1vZGlmaWVkIGFyZSBhZGRlZCB0byBpbml0aWFsXHJcblx0XHRcdFx0aWYgKGluaXRpYWwuaW5kZXhPZihpdGVtRW50cnkpID09PSAtMSkge1xyXG5cdFx0XHRcdFx0aW5pdGlhbC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWwucHVzaChpdGVtRW50cnkpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGlmIChtb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xKSB7XHJcblx0XHRcdFx0aWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0aXRlbUVudHJ5LnBhcmVudCA9IHBhcmVudDtcclxuXHJcblx0XHRcdFx0XHRpZiAocGFyZW50Q29sdW1uICE9PSBudWxsICYmIGl0ZW1FbnRyeS5tb2RpZmllZCAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0XHRpdGVtRW50cnkubW9kaWZpZWRbcGFyZW50Q29sdW1uLmlkXSA9IHBhcmVudC5pdGVtSWQ7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRtb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoXHJcblx0XHRcdGVudHJpZXNBZGRlZFRvSW5pdGlhbCxcclxuXHRcdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZCxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdGNhbGxPbkFkZCxcclxuXHRcdFx0Y2FsbE9uQWN0aXZhdGVcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhhbmRsZUFkZGVkSXRlbUNhbGxiYWNrcyAoXHJcblx0XHRlbnRyaWVzQWRkZWRUb0luaXRpYWw6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0ZW50cmllc0FkZGVkVG9Nb2RpZmllZDogSXRlbUVudHJ5W10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwsXHJcblx0XHRjYWxsT25BZGQ6IGJvb2xlYW4gPSB0cnVlLFxyXG5cdFx0Y2FsbE9uQWN0aXZhdGU6IGJvb2xlYW4gPSB0cnVlXHJcblx0KTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRpZiAoZW50cmllc0FkZGVkVG9Jbml0aWFsLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vbkFkZEluaXRpYWwoZW50cmllc0FkZGVkVG9Jbml0aWFsLCB0aGlzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZW50cmllc0FkZGVkVG9Nb2RpZmllZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcclxuXHJcblx0XHRpZiAoY2FsbE9uQWN0aXZhdGUgJiYgY29sbGVjdGlvblJlc291cmNlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNvbnN0IG9uQWN0aXZhdGVJdGVtID0gY29sbGVjdGlvblJlc291cmNlc1swXS5vcHRpb25zLm9uQWN0aXZhdGVJdGVtO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBhZGRlZEl0ZW1FbnRyeSBvZiBlbnRyaWVzQWRkZWRUb01vZGlmaWVkKVxyXG5cdFx0XHRcdG9uQWN0aXZhdGVJdGVtKGFkZGVkSXRlbUVudHJ5KTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGNvbGxlY3Rpb25SZXNvdXJjZXMpIHtcclxuXHRcdFx0Y29uc3QgYWRkZWRSZXNvdXJjZXMgPSBjb2xsZWN0aW9uUmVzb3VyY2UuYWRkSXRlbVJlc291cmNlcyhlbnRyaWVzQWRkZWRUb01vZGlmaWVkKTtcclxuXHJcblx0XHRcdGlmIChjb2xsZWN0aW9uUmVzb3VyY2UgPT09IHJlc3VsdFJlc291cmNlKSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gYWRkZWRSZXNvdXJjZXM7XHJcblxyXG5cdFx0XHRcdGlmIChjYWxsT25BZGQpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uQWRkKGFkZGVkUmVzb3VyY2VzKTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0Y29sbGVjdGlvblJlc291cmNlLmNhbGxPbkFkZChhZGRlZFJlc291cmNlcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHJlbW92ZUl0ZW1zIChcclxuXHRcdGlkQXJyYXk6IEl0ZW1JZFtdLFxyXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxyXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXHJcblx0XHRlbmFibGVDYWxsYmFjaz86IGJvb2xlYW5cclxuXHQpOiBJdGVtUmVzb3VyY2VbXSB8IG51bGwge1xyXG5cdFx0aWYgKGlkQXJyYXkubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1zKFxyXG5cdFx0XHRpdGVtRW50cnkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAhaW5BcnJheShpdGVtRW50cnkuaXRlbUlkLCBpZEFycmF5KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdHVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Y2xlYXIgKFxyXG5cdFx0cmVzdWx0UmVzb3VyY2U/OiBDb2xsZWN0aW9uUmVzb3VyY2UgfCBudWxsLFxyXG5cdFx0dXBkYXRlSW5pdGlhbD86IGJvb2xlYW4sXHJcblx0XHRlbmFibGVDYWxsYmFjaz86IGJvb2xlYW5cclxuXHQpIHtcclxuXHRcdHJldHVybiB0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcyhcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVzdWx0UmVzb3VyY2UsXHJcblx0XHRcdHVwZGF0ZUluaXRpYWwsXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlUmVtb3ZlZEl0ZW1zIChcclxuXHRcdGZpbHRlckZ1bmN0aW9uOiAoaXRlbUVudHJ5OiBJdGVtRW50cnkpID0+IGJvb2xlYW4sXHJcblx0XHRyZXN1bHRSZXNvdXJjZT86IENvbGxlY3Rpb25SZXNvdXJjZSB8IG51bGwsXHJcblx0XHR1cGRhdGVJbml0aWFsOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRlbmFibGVDYWxsYmFjaz86IGJvb2xlYW5cclxuXHQpIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSB0aGlzLmZhY3RvcnkuY29sbGVjdGlvbkVudHJ5U2VydmljZTtcclxuXHRcdGNvbnN0IHJlbW92ZWRGcm9tTW9kaWZpZWQgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KHRoaXMuaXRlbXMsIGZpbHRlckZ1bmN0aW9uKTtcclxuXHRcdGxldCByZW1vdmVkRnJvbUluaXRpYWw7XHJcblxyXG5cdFx0aWYgKHVwZGF0ZUluaXRpYWwpXHJcblx0XHRcdHJlbW92ZWRGcm9tSW5pdGlhbCA9IGNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuZmlsdGVyQXJyYXkodGhpcy5pbml0aWFsLCBmaWx0ZXJGdW5jdGlvbik7XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Ly8gcmVtb3ZlIGFsbCAqbG9jYWwqIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBtb2RpZmllZCBmcm9tIGluaXRpYWwsIHRvb1xyXG5cdFx0XHRjb25zdCBsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQ6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IHJlbW92ZWRFbnRyeSBvZiByZW1vdmVkRnJvbU1vZGlmaWVkKSB7XHJcblx0XHRcdFx0aWYgKHJlbW92ZWRFbnRyeS5pc0xvY2FsKCkpXHJcblx0XHRcdFx0XHRsb2NhbFJlbW92ZWRGcm9tTW9kaWZpZWQucHVzaChyZW1vdmVkRW50cnkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAobG9jYWxSZW1vdmVkRnJvbU1vZGlmaWVkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRyZW1vdmVkRnJvbUluaXRpYWwgPSBjb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmZpbHRlckFycmF5KFxyXG5cdFx0XHRcdFx0dGhpcy5pbml0aWFsLFxyXG5cdFx0XHRcdFx0aXRlbUVudHJ5ID0+IGxvY2FsUmVtb3ZlZEZyb21Nb2RpZmllZC5pbmRleE9mKGl0ZW1FbnRyeSkgPT09IC0xXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlXHJcblx0XHRcdFx0cmVtb3ZlZEZyb21Jbml0aWFsID0gW107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaGFuZGxlUmVtb3ZlZEl0ZW1DYWxsYmFja3MocmVtb3ZlZEZyb21Jbml0aWFsLCByZW1vdmVkRnJvbU1vZGlmaWVkLCByZXN1bHRSZXNvdXJjZSwgZW5hYmxlQ2FsbGJhY2spO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoYW5kbGVSZW1vdmVkSXRlbUNhbGxiYWNrcyAoXHJcblx0XHRyZW1vdmVkRnJvbUluaXRpYWw6IEl0ZW1FbnRyeVtdLFxyXG5cdFx0cmVtb3ZlZEZyb21Nb2RpZmllZDogSXRlbUVudHJ5W10sXHJcblx0XHRyZXN1bHRSZXNvdXJjZTogQ29sbGVjdGlvblJlc291cmNlIHwgbnVsbCA9IG51bGwsXHJcblx0XHRjYWxsT25SZW1vdmU6IGJvb2xlYW4gPSB0cnVlXHJcblx0KTogSXRlbVJlc291cmNlW10gfCBudWxsIHtcclxuXHRcdGNvbnN0IGNvbGxlY3Rpb25SZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRpZiAocmVtb3ZlZEZyb21Jbml0aWFsLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcylcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2Uub3B0aW9ucy5vblJlbW92ZUluaXRpYWwocmVtb3ZlZEZyb21Jbml0aWFsLCB0aGlzKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAocmVtb3ZlZEZyb21Nb2RpZmllZC5sZW5ndGggPT09IDApXHJcblx0XHRcdHJldHVybiByZXN1bHRSZXNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiBbXTtcclxuXHJcblx0XHRsZXQgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVtb3ZlZEVudHJ5IG9mIHJlbW92ZWRGcm9tTW9kaWZpZWQpXHJcblx0XHRcdHJlbW92ZWRFbnRyeS5kZWFjdGl2YXRlUmVzb3VyY2VzKCk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2xsZWN0aW9uUmVzb3VyY2Ugb2YgY29sbGVjdGlvblJlc291cmNlcykge1xyXG5cdFx0XHRjb25zdCByZW1vdmVkUmVzb3VyY2VzID0gY29sbGVjdGlvblJlc291cmNlLnJlbW92ZUl0ZW1SZXNvdXJjZXMocmVtb3ZlZEZyb21Nb2RpZmllZCk7XHJcblxyXG5cdFx0XHRpZiAoY29sbGVjdGlvblJlc291cmNlID09PSByZXN1bHRSZXNvdXJjZSkge1xyXG5cdFx0XHRcdHJlc3VsdCA9IHJlbW92ZWRSZXNvdXJjZXM7XHJcblxyXG5cdFx0XHRcdGlmIChjYWxsT25SZW1vdmUpXHJcblx0XHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2UuY2FsbE9uUmVtb3ZlKHJlbW92ZWRSZXNvdXJjZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRleHBhbmQgKG5ld0NvbHVtbnMpIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBpdGVtVHlwZSA9IHRoaXMuaXRlbVR5cGU7XHJcblxyXG5cdFx0aWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMucHJvbWlzZSA9IGZhY3RvcnkuaXRlbVJlcXVlc3RTZXJ2aWNlLnJlcXVlc3RJdGVtcyh0aGlzLCB1bmRlZmluZWQsIG5ld0NvbHVtbnMpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlSXRlbXMgPSByZXNwb25zZS5pdGVtc1tpdGVtVHlwZV07XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uRXhwYW5zaW9uID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucHJvY2Vzc0V4cGFuc2lvbihuZXdDb2x1bW5zLCByZXNwb25zZSwgaXRlbVR5cGUsIHRoaXMuaXRlbXMpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtcy5jYWxsKFxyXG5cdFx0XHRcdFx0dGhpcywgaXRlbUVudHJ5ID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlSXRlbXNbaXRlbUVudHJ5Lml0ZW1JZF0gIT09IHVuZGVmaW5lZCB8fCBpdGVtRW50cnkuaXNMb2NhbCgpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuZXhwYW5kQ29sdW1ucyhjb2x1bW5FeHBhbnNpb24pO1xyXG5cclxuXHRcdFx0XHRkZWxldGUgdGhpcy5wcm9taXNlO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRmYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHJvbWlzZTtcclxuXHR9XHJcblxyXG5cdGV4dGVuZFF1ZXJ5IChjYWxsYmFjaykge1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMucXVlcnk7XHJcblxyXG5cdFx0b3B0aW9ucy5xdWVyeVBhcmFtcyA9IGNhbGxiYWNrKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLnF1ZXJ5ID0gdGhpcy5mYWN0b3J5LmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UuY3JlYXRlUXVlcnkob3B0aW9ucyk7XHJcblx0fVxyXG5cclxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIGNvbGxlY3Rpb25SZXNvdXJjZSwgY2FsbE9uQWRkPywgdXBkYXRlSW5pdGlhbD8pIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBlcnJvckhhbmRsZXIgPSBmYWN0b3J5LmVycm9ySGFuZGxlcjtcclxuXHRcdGNvbnN0IGV4dGVuZGVkUXVlcnkgPSB0aGlzLmV4dGVuZFF1ZXJ5KHF1ZXJ5Q2FsbGJhY2spLm9iamVjdDtcclxuXHRcdGNvbnN0IGZ1bGxRdWVyeSA9IGZhY3RvcnkucXVlcnlTZXJ2aWNlLmFkZEFuZENvbmRpdGlvbihcclxuXHRcdFx0ZXh0ZW5kZWRRdWVyeSxcclxuXHRcdFx0ZmFjdG9yeS5xdWVyeVNlcnZpY2UuY3JlYXRlTm90SW4odGhpcy5nZXRJZEFycmF5KCkpXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHRvZG86IGFsc28gZG8gdGhlIGxpbWl0IGNoZWNrIGluIGJhdGNoRXh0ZW5kXHJcblx0XHRjb25zdCBwcm9taXNlID0gZmFjdG9yeS5pdGVtUmVxdWVzdFNlcnZpY2UucmVxdWVzdEl0ZW1zKFxyXG5cdFx0XHR0aGlzLFxyXG5cdFx0XHQvLyBXaGVuIHRoZXJlJ3MgYSBsaW1pdCB3ZSB3YW50IHRvIGZldGNoIGFsbCBpdGVtcyBiZWNhdXNlIHdlIHdpbGwgZG8gc29ydGluZyBhbmQgc3BsaWNpbmcgb2YgdGhlIGV4Y2VzcyBpdGVtc1xyXG5cdFx0XHR0aGlzLm9wdGlvbnMubGltaXQgIT09IG51bGwgP1xyXG5cdFx0XHRcdGV4dGVuZGVkUXVlcnkgOlxyXG5cdFx0XHRcdGZ1bGxRdWVyeVxyXG5cdFx0KS50aGVuKHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHQvLyByZW1vdmVBYnNlbnRJdGVtcyhyZXNwb25zZSk7IFRPRE86IHdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiB3ZSByZXF1ZXN0ICphbGwqIHRoZSBpdGVtc1xyXG5cdFx0XHRcdHJldHVybiBmYWN0b3J5Lml0ZW1SZXF1ZXN0U2VydmljZS5wcm9jZXNzUmVzcG9uc2UoXHJcblx0XHRcdFx0XHRyZXNwb25zZSxcclxuXHRcdFx0XHRcdHJlc3BvbnNlLmxpbmtzW3RoaXMuaXRlbVR5cGVdLFxyXG5cdFx0XHRcdFx0dGhpcy5wYXJlbnQsXHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtbnNcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oaXRlbUVudHJpZXMgPT4ge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnByb21pc2U7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0aGlzLmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBjb2xsZWN0aW9uUmVzb3VyY2UsIHVwZGF0ZUluaXRpYWwsIGNhbGxPbkFkZCwgZmFsc2UpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMucHJvbWlzZSA9IHByb21pc2UudGhlbihcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBwcm9taXNlO1xyXG5cdH1cclxuXHJcblx0cXVldWVSZWxvYWQgKCkge1xyXG5cdFx0dGhpcy5yZWxvYWRRdWV1ZWQgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xyXG5cdFx0dGhpcy5wcm9taXNlID0gdGhpcy5kZWZlcnJlZC5wcm9taXNlO1xyXG5cdH1cclxuXHJcblx0ZXhwYW5kQ29sdW1ucyAoY29sdW1uRXhwYW5zaW9uOiBDb2x1bW5FeHBhbnNpb24pIHtcclxuXHRcdGNvbnN0IGV4cGFuc2lvblJlc3VsdCA9IGNvbHVtbkV4cGFuc2lvbi5ydW4odGhpcy5jb2x1bW5zKTtcclxuXHJcblx0XHRpZiAoZXhwYW5zaW9uUmVzdWx0ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm47XHJcblxyXG5cdFx0dGhpcy5jb2x1bW5zID0gZXhwYW5zaW9uUmVzdWx0Lm1lcmdlZDtcclxuXHRcdHRoaXMub3B0aW9ucy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHRleHBhbmRSZXF1ZXN0Q29sdW1ucyAocmVxdWVzdENvbHVtbnM6IFJlcXVlc3RDb2x1bW5zKSB7XHJcblx0XHR0aGlzLmNvbHVtbnMuZXhwYW5kUmVxdWVzdENvbHVtbnMocmVxdWVzdENvbHVtbnMpO1xyXG5cdFx0dGhpcy5vcHRpb25zLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMucmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdGdldEFkZGVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmIChpbml0aWFsLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRSZW1vdmVkSXRlbXMgKHJldHVybkl0ZW1JZHMgPSBmYWxzZSkge1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogQXJyYXk8SXRlbUVudHJ5IHwgSXRlbUlkPiA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGluaXRpYWwpIHtcclxuXHRcdFx0aWYgKG1vZGlmaWVkLmluZGV4T2YoaXRlbUVudHJ5KSA9PT0gLTEpXHJcblx0XHRcdFx0cmVzdWx0LnB1c2gocmV0dXJuSXRlbUlkcyA/IGl0ZW1FbnRyeS5pdGVtSWQgOiBpdGVtRW50cnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRnZXRVcGRhdGVkSXRlbXMgKCkge1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtRW50cnlbXSA9IFtdO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmICghaXRlbUVudHJ5LmlzTG9jYWwoKSAmJiBpdGVtRW50cnkuaGFzQ2hhbmdlcygpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1FbnRyeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGhhc0FkZGVkSXRlbXMgKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoID4gdGhpcy5pbml0aWFsLmxlbmd0aDtcclxuXHR9XHJcblxyXG5cdGhhc1JlbW92ZWRJdGVtcyAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5pbml0aWFsLmxlbmd0aCA+IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG5cdH1cclxuXHJcblx0aGFzVXBkYXRlZEl0ZW1zICgpIHtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IG1vZGlmaWVkSXRlbUVudHJ5IG9mIG1vZGlmaWVkKSB7XHJcblx0XHRcdGlmIChtb2RpZmllZEl0ZW1FbnRyeS5oYXNDaGFuZ2VzKCkpXHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z2V0Q3VycmVudFJlc291cmNlICgpIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cclxuXHRcdHJldHVybiByZXNvdXJjZXNbcmVzb3VyY2VzLmxlbmd0aCAtIDFdO1xyXG5cdH1cclxuXHJcblx0Y2xlYXJSZXNvdXJjZXMgKGlzU3VidGFiQ2hhbmdlID0gZmFsc2UpIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyaWVzID0gdGhpcy5pdGVtczsgLy8gVE9ETzogaW5pdGlhbFxyXG5cdFx0Y29uc3QgY3VycmVudFJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgbmV3UmVzb3VyY2VzOiBDb2xsZWN0aW9uUmVzb3VyY2VbXSA9IFtdO1xyXG5cclxuXHRcdC8vIHdlJ2xsIGFkZCB0aGUgaXRlbSByZXNvdXJjZXMgYmFjayBpbiBsYXRlclxyXG5cdFx0Zm9yIChjb25zdCBpdGVtRW50cnkgb2YgaXRlbUVudHJpZXMpXHJcblx0XHRcdGl0ZW1FbnRyeS5jbGVhclJlc291cmNlcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sbGVjdGlvblJlc291cmNlIG9mIGN1cnJlbnRSZXNvdXJjZXMpIHtcclxuXHRcdFx0aWYgKGNvbGxlY3Rpb25SZXNvdXJjZS5vcHRpb25zW2lzU3VidGFiQ2hhbmdlID8gJ2NsZWFyT25TdWJUYWJDaGFuZ2UnIDogJ2NsZWFyT25UYWJDaGFuZ2UnXSlcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHJcblx0XHRcdG5ld1Jlc291cmNlcy5wdXNoKGNvbGxlY3Rpb25SZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBjb2xsZWN0aW9uUmVzb3VyY2UuaXRlbXMpXHJcblx0XHRcdFx0aXRlbVJlc291cmNlLmVudHJ5LnJlc291cmNlcy5wdXNoKGl0ZW1SZXNvdXJjZSk7IC8vIHJlc291cmNlcyBzaG91bGQgYmUgZW1wdHkgYnkgbm93IDotKVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucmVzb3VyY2VzID0gbmV3UmVzb3VyY2VzO1xyXG5cdH1cclxuXHJcblx0Ly8gdGhpcyBkb2Vzbid0IHJldmVydCB1cGRhdGVzXHJcblx0cmV2ZXJ0Q2hhbmdlcyAoKSB7XHJcblx0XHQvLyBzYXZlIHRoZXNlIGJlZm9yZSByZXNldHRpbmcgdGhlIGl0ZW1zIHByb3BlcnR5XHJcblx0XHRjb25zdCBhZGRlZEl0ZW1zID0gPEl0ZW1FbnRyeVtdPiB0aGlzLmdldEFkZGVkSXRlbXMoKTtcclxuXHRcdGNvbnN0IHJlbW92ZWRJdGVtcyA9IDxJdGVtRW50cnlbXT4gdGhpcy5nZXRSZW1vdmVkSXRlbXMoKTtcclxuXHJcblx0XHR0aGlzLml0ZW1zID0gdGhpcy5pbml0aWFsLnNsaWNlKCk7XHJcblxyXG5cdFx0dGhpcy5oYW5kbGVBZGRlZEl0ZW1DYWxsYmFja3MoW10sIHJlbW92ZWRJdGVtcyk7XHJcblx0XHR0aGlzLmhhbmRsZVJlbW92ZWRJdGVtQ2FsbGJhY2tzKFtdLCBhZGRlZEl0ZW1zKTtcclxuXHR9XHJcblxyXG5cdG9uSXRlbXNDcmVhdGVkIChjb252ZXJzaW9uTWFwKSB7XHJcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJlc291cmNlcykge1xyXG5cdFx0XHRyZXNvdXJjZS5yZWJ1aWxkTWFwKCk7XHJcblx0XHRcdHJlc291cmNlLm9wdGlvbnMub25JdGVtc0NyZWF0ZWQoY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRVcGRhdGVkSXRlbUNvbHVtbnMgKGNvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGl0ZW1Db2x1bW5zID0gdGhpcy5jb2x1bW5zLml0ZW07XHJcblx0XHRjb25zdCByZXN1bHQ6IHtbY29sdW1uSWQ6IHN0cmluZ106IENvbHVtbkluZm99ID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgaXRlbUNvbHVtbnMpIHtcclxuXHRcdFx0aWYgKGNvbnZlcnNpb25NYXBbY29sdW1uLmFwaUNvbHVtbi5pdGVtVHlwZV0gIT09IHVuZGVmaW5lZClcclxuXHRcdFx0XHRyZXN1bHRbY29sdW1uLmlkXSA9IGNvbHVtbjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKHBhcmVudCwgY29udmVyc2lvbk1hcD86IEl0ZW1JZENvbnZlcnNpb25NYXApIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblx0XHRjb25zdCBjbG9uZWRJdGVtRW50cmllcyA9IGZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5iYXRjaENsb25lKHRoaXMuaXRlbXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY2xvbmVkSXRlbUVudHJ5IG9mIGNsb25lZEl0ZW1FbnRyaWVzKVxyXG5cdFx0XHRjbG9uZWRJdGVtRW50cnkucGFyZW50ID0gcGFyZW50O1xyXG5cclxuXHRcdHJldHVybiBmYWN0b3J5LmNvbnN0cnVjdChcclxuXHRcdFx0dGhpcy5pdGVtVHlwZSxcclxuXHRcdFx0ZmFjdG9yeS5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLmNsb25lT3B0aW9ucyh0aGlzLm9wdGlvbnMsIHBhcmVudClcclxuXHRcdClcclxuXHRcdFx0LnJlc29sdmUoXHJcblx0XHRcdFx0e2NvbHVtbnM6IHRoaXMuY29sdW1ucywgaXRlbXM6IGNsb25lZEl0ZW1FbnRyaWVzfVxyXG5cdFx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBmaWx0ZXJBcnJheSB9IGZyb20gJy4uL2NsYXNzZXMvVXRpbCc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnksIEl0ZW1SZXNvdXJjZSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSB9IGZyb20gJy4vQ29sbGVjdGlvbkVudHJ5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uUmVzb3VyY2Uge1xyXG5cdGl0ZW1zOiBJdGVtUmVzb3VyY2VbXTtcclxuXHRpdGVtSWRNYXA6IEl0ZW1SZXNvdXJjZUl0ZW1JZE1hcCA9IHt9O1xyXG5cdGNvbHVtbnM7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgaXRlbVJlc291cmNlRmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdHB1YmxpYyBlbnRyeTogQ29sbGVjdGlvbkVudHJ5LFxyXG5cdFx0cHVibGljIG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGVudHJ5LmNvbHVtbnMucmVzcG9uc2U7XHJcblx0XHR0aGlzLml0ZW1JZE1hcCA9IHt9O1xyXG5cdFx0dGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xyXG5cclxuXHRcdHRoaXMuYWRkSXRlbVJlc291cmNlcyhlbnRyeS5pdGVtcyk7XHJcblx0fVxyXG5cclxuXHRnZXRJdGVtQnlJZCAoaXRlbUlkOiBudW1iZXIpOiBJdGVtUmVzb3VyY2Uge1xyXG5cdFx0cmV0dXJuIHRoaXMuaXRlbUlkTWFwW2l0ZW1JZF07XHJcblx0fVxyXG5cclxuXHRyZWJ1aWxkTWFwICgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgaXRlbUlkTWFwID0ge307XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcykge1xyXG5cdFx0XHRpdGVtSWRNYXBbaXRlbVJlc291cmNlLmVudHJ5Lml0ZW1JZF0gPSBpdGVtUmVzb3VyY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5pdGVtSWRNYXAgPSBpdGVtSWRNYXA7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtUmVzb3VyY2VzIChpdGVtRW50cmllczogSXRlbUVudHJ5W10pOiBJdGVtUmVzb3VyY2VbXSB7IC8vIHNob3VsZCBiZSBmYXN0XHJcblx0XHRpZiAoaXRlbUVudHJpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gW107XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0OiBJdGVtUmVzb3VyY2VbXSA9IFtdO1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGl0ZW1JZE1hcCA9IHRoaXMuaXRlbUlkTWFwO1xyXG5cdFx0Y29uc3QgY29uc3RydWN0b3IgPSB0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkuZ2V0Q29uc3RydWN0b3IoXHJcblx0XHRcdHtcclxuXHRcdFx0XHRlZGl0OiBvcHRpb25zLmVkaXRJdGVtcyxcclxuXHRcdFx0XHRvbkNoYW5nZTogb3B0aW9ucy5vbkNoYW5nZSxcclxuXHRcdFx0XHRvbkRlYWN0aXZhdGU6IG9wdGlvbnMub25EZWFjdGl2YXRlSXRlbVxyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgaXRlbUVudHJ5IG9mIGl0ZW1FbnRyaWVzKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1JZCA9IGl0ZW1FbnRyeS5pdGVtSWQ7XHJcblxyXG5cdFx0XHRsZXQgaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2U7XHJcblxyXG5cdFx0XHRpZiAoaXRlbUlkTWFwW2l0ZW1JZF0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGl0ZW1SZXNvdXJjZSA9IGNvbnN0cnVjdG9yKGl0ZW1FbnRyeSk7XHJcblx0XHRcdFx0aXRlbXMucHVzaChpdGVtUmVzb3VyY2UpO1xyXG5cdFx0XHRcdGl0ZW1JZE1hcFtpdGVtSWRdID0gaXRlbVJlc291cmNlO1xyXG5cdFx0XHR9IGVsc2VcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2UgPSBpdGVtSWRNYXBbaXRlbUlkXTtcclxuXHJcblx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSBpdGVtRW50cmllc1xyXG5cdCAqIEByZXR1cm5zIHtJdGVtUmVzb3VyY2VbXX1cclxuXHQgKlxyXG5cdCAqIFJldHVybnMgdGhlIEl0ZW1yZXNvdXJjZXMgdGhhdCB3aGVyZSByZW1vdmVkIENvbGxlY3Rpb24uXHJcblx0ICogRmlsdGVycyBvbiBJdGVtUmVzb3VyY2UuZW50cnkgPT09IEl0ZW1FbnRyeVxyXG5cdCAqL1xyXG5cdHJlbW92ZUl0ZW1SZXNvdXJjZXMgKGl0ZW1FbnRyaWVzOiBJdGVtRW50cnlbXSk6IEl0ZW1SZXNvdXJjZVtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmaWx0ZXJBcnJheShcclxuXHRcdFx0dGhpcy5pdGVtcyxcclxuXHRcdFx0aXRlbVJlc291cmNlID0+IHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW1FbnRyeSBvZiBpdGVtRW50cmllcykge1xyXG5cdFx0XHRcdFx0aWYgKGl0ZW1SZXNvdXJjZS5lbnRyeSA9PT0gaXRlbUVudHJ5KSB7XHJcblx0XHRcdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLml0ZW1JZE1hcFtpdGVtRW50cnkuaXRlbUlkXTtcclxuXHJcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjYWxsT25BZGQgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25BZGQoaXRlbVJlc291cmNlcywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRjYWxsT25SZW1vdmUgKGl0ZW1SZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdKSB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25SZW1vdmUoaXRlbVJlc291cmNlcywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRmb3JFYWNoIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiB2b2lkKSB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRjYWxsYmFjayhpdGVtUmVzb3VyY2UpO1xyXG5cdH1cclxuXHJcblx0ZmlsdGVyIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKSB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IHJlc3VsdDogSXRlbVJlc291cmNlW10gPSBbXTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxyXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGl0ZW1SZXNvdXJjZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGZpcnN0IChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogSXRlbVJlc291cmNlIHwgbnVsbCB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGl0ZW1SZXNvdXJjZSBvZiBpdGVtUmVzb3VyY2VzKSB7XHJcblx0XHRcdGlmIChjYWxsYmFjayhpdGVtUmVzb3VyY2UpKVxyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHRzb21lIChjYWxsYmFjazogKGl0ZW1SZXNvdXJjZTogSXRlbVJlc291cmNlKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5maXJzdChjYWxsYmFjaykgIT09IG51bGw7XHJcblx0fVxyXG5cclxuXHRncm91cEJ5IChhcmd1bWVudCkge1xyXG5cdFx0Y29uc3QgaXRlbXNSZXNvdXJjZXMgPSB0aGlzLml0ZW1zO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGl0ZW1SZXNvdXJjZS5maWVsZHNbYXJndW1lbnRdO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbXNSZXNvdXJjZXMpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZSk7XHJcblxyXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gbnVsbClcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlXSA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3ZhbHVlXSA9IFtdO1xyXG5cclxuXHRcdFx0XHRyZXN1bHRbdmFsdWVdLnB1c2goaXRlbVJlc291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRtYXAgKGFyZ3VtZW50KSB7XHJcblx0XHRjb25zdCBpdGVtUmVzb3VyY2VzID0gdGhpcy5pdGVtcztcclxuXHRcdGNvbnN0IGxlbmd0aCA9IGl0ZW1SZXNvdXJjZXMubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcclxuXHRcdFx0XHRyZXN1bHRbaV0gPSBpdGVtUmVzb3VyY2VzW2ldLmZpZWxkc1thcmd1bWVudF07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxyXG5cdFx0XHRcdHJlc3VsdFtpXSA9IGFyZ3VtZW50KGl0ZW1SZXNvdXJjZXNbaV0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRyZWR1Y2U8VD4gKGNhbGxiYWNrOiAoaXRlbVJlc291cmNlOiBJdGVtUmVzb3VyY2UsIHZhbHVlOiBUKSA9PiBULCB2YWx1ZTogVCk6IFQge1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0dmFsdWUgPSBjYWxsYmFjayhpdGVtUmVzb3VyY2UsIHZhbHVlKTtcclxuXHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRleHRlbmQgKHF1ZXJ5Q2FsbGJhY2ssIHJldHVybkFsbEl0ZW1zLCBlbmFibGVDYWxsYmFja3MpOiBQcm9taXNlPEl0ZW1SZXNvdXJjZVtdPiB7XHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdGVuYWJsZUNhbGxiYWNrcyA9IHRydWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZW50cnkuZXh0ZW5kKHF1ZXJ5Q2FsbGJhY2ssIHRoaXMsIGVuYWJsZUNhbGxiYWNrcylcclxuXHRcdFx0LnRoZW4oaXRlbVJlc291cmNlcyA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIHJldHVybkFsbEl0ZW1zID8gdGhpcy5pdGVtcyA6IGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0ZGVhY3RpdmF0ZSAoKTogdm9pZCB7XHJcblx0XHR0aGlzLm9wdGlvbnMub25EZWFjdGl2YXRlQ29sbGVjdGlvbih0aGlzKTtcclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2UgKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvblJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgaXRlbVJlc291cmNlcyA9IHRoaXMuaXRlbXM7XHJcblx0XHRjb25zdCBpbmRleCA9IGNvbGxlY3Rpb25SZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcclxuXHJcblx0XHRpZiAoaW5kZXggIT09IC0xKVxyXG5cdFx0XHRjb2xsZWN0aW9uUmVzb3VyY2VzLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBpdGVtUmVzb3VyY2Ugb2YgaXRlbVJlc291cmNlcylcclxuXHRcdFx0aXRlbVJlc291cmNlLmNsZWFyUmVzb3VyY2UoKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbVJlc291cmNlRmFjdG9yeSB9IGZyb20gJy4uL2ZhY3Rvcmllcyc7XHJcbmltcG9ydCB7IENvbGxlY3Rpb25FbnRyeSwgQ29sbGVjdGlvblJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uVmlld1Jlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5LFxyXG5cdFx0Y29sbGVjdGlvbkVudHJ5OiBDb2xsZWN0aW9uRW50cnksXHJcblx0XHRvcHRpb25zXHJcblx0KSB7XHJcblx0XHRzdXBlcihpdGVtUmVzb3VyY2VGYWN0b3J5LCBjb2xsZWN0aW9uRW50cnksIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbkVudHJ5LCBDb2xsZWN0aW9uUmVzb3VyY2UsIEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRWRpdFJlc291cmNlIGV4dGVuZHMgQ29sbGVjdGlvblJlc291cmNlIHtcclxuXHRjb25zdHJ1Y3RvciAoXHJcblx0XHRwcml2YXRlIGZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXHJcblx0XHRjb2xsZWN0aW9uRW50cnk6IENvbGxlY3Rpb25FbnRyeSxcclxuXHRcdG9wdGlvbnNcclxuXHQpIHtcclxuXHRcdHN1cGVyKGZhY3RvcnkuaXRlbVJlc291cmNlRmFjdG9yeSwgY29sbGVjdGlvbkVudHJ5LCBvcHRpb25zKTtcclxuXHR9XHJcblxyXG5cdHNhdmUgKCkge1xyXG5cdFx0aWYgKCF0aGlzLm9wdGlvbnMuZW5hYmxlU2F2ZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBTYXZpbmcgZGlzYWJsZWQnKTtcclxuXHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmVudCA9IGNvbGxlY3Rpb25FbnRyeS5wYXJlbnQ7XHJcblxyXG5cdFx0aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBmYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHBhcmVudC5pdGVtSWQpKVxyXG5cdFx0XHRyZXR1cm4gZmFjdG9yeS5wcm9taXNlU2VydmljZS53aGVuKCk7XHJcblxyXG5cdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3NvckZhY3RvcnkuY29uc3RydWN0KCkuZXhlY3V0ZShbXSwgW2NvbGxlY3Rpb25FbnRyeV0pO1xyXG5cdH1cclxuXHJcblx0Ly8gVE9ETzogdXNlIGNhbGxiYWNrIGZ1bmN0aW9uXHJcblx0bW92ZUl0ZW1zIChpZEFycmF5LCBkZXN0aW5hdGlvbiwgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0aGlzLmVudHJ5O1xyXG5cdFx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcblx0XHRpZiAob3B0aW9ucy5lbmFibGVTYXZlIHx8IG9wdGlvbnMubW9kSW5zdGFudClcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogc2F2aW5nIGVuYWJsZWQnKTtcclxuXHJcblx0XHRpZiAoY29sbGVjdGlvbkVudHJ5Lml0ZW1UeXBlICE9PSBkZXN0aW5hdGlvbi5lbnRyeS5pdGVtVHlwZSlcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdjb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlOiBDYW5ub3QgbW92ZSBpdGVtczogaXRlbVR5cGUgbWlzbWF0Y2gnKTtcclxuXHJcblx0XHRjb25zdCByZW1vdmVkSXRlbVJlc291cmNlcyA9IDxJdGVtUmVzb3VyY2VbXT4gY29sbGVjdGlvbkVudHJ5LnJlbW92ZUl0ZW1zKGlkQXJyYXksIHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCByZW1vdmVkSXRlbVJlc291cmNlIG9mIHJlbW92ZWRJdGVtUmVzb3VyY2VzKVxyXG5cdFx0XHRpdGVtRW50cmllcy5wdXNoKHJlbW92ZWRJdGVtUmVzb3VyY2UuZW50cnkpO1xyXG5cclxuXHRcdGRlc3RpbmF0aW9uLmVudHJ5LmFkZEl0ZW1zKGl0ZW1FbnRyaWVzLCBkZXN0aW5hdGlvbiwgZmFsc2UsIGVuYWJsZUNhbGxiYWNrcyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlbW92ZWRJdGVtUmVzb3VyY2VzO1xyXG5cdH1cclxuXHJcblx0cmVtb3ZlSXRlbXMgKGlkQXJyYXksIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0aWYgKGVuYWJsZUNhbGxiYWNrcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRlbmFibGVDYWxsYmFja3MgPSB0cnVlO1xyXG5cclxuXHRcdGNvbnN0IGl0ZW1SZXNvdXJjZXMgPSA8SXRlbVJlc291cmNlW10+IHRoaXMuZW50cnkucmVtb3ZlSXRlbXMoaWRBcnJheSwgdGhpcywgZmFsc2UsIGZhbHNlKTtcclxuXHJcblx0XHRpZiAodGhpcy5vcHRpb25zLm1vZEluc3RhbnQpXHJcblx0XHRcdHJldHVybiB0aGlzLnNhdmUoKS50aGVuKFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHRcdHRoaXMuY2FsbE9uUmVtb3ZlKGl0ZW1SZXNvdXJjZXMpO1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHR0aGlzLmNhbGxPblJlbW92ZShpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LnByb21pc2VTZXJ2aWNlLndoZW4oaXRlbVJlc291cmNlcyk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVJdGVtIChpdGVtSWQsIGVuYWJsZUNhbGxiYWNrcykge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVtb3ZlSXRlbXMoW2l0ZW1JZF0sIGVuYWJsZUNhbGxiYWNrcykudGhlbihpdGVtUmVzb3VyY2VzID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbVJlc291cmNlc1swXTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGhpcy5mYWN0b3J5LmVycm9ySGFuZGxlci5yZWplY3RcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRhZGRJdGVtcyAodmFsdWVzQXJyYXksIGVuYWJsZUNhbGxiYWNrcyA9IHRydWUpIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblxyXG5cdFx0cmV0dXJuIGZhY3RvcnkuaXRlbUhhbmRsZXIuZmV0Y2hUZW1wbGF0ZSh0aGlzLmVudHJ5Lml0ZW1UeXBlKS50aGVuKFxyXG5cdFx0XHR0ZW1wbGF0ZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbUVudHJpZXM6IEl0ZW1FbnRyeVtdID0gW107XHJcblx0XHRcdFx0bGV0IGl0ZW1SZXNvdXJjZXM7XHJcblxyXG5cdFx0XHRcdGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzQXJyYXkpIHtcclxuXHRcdFx0XHRcdGl0ZW1FbnRyaWVzLnB1c2goXHJcblx0XHRcdFx0XHRcdGZhY3RvcnkuaXRlbUVudHJ5RmFjdG9yeS5jb25zdHJ1Y3RMb2NhbChcclxuXHRcdFx0XHRcdFx0XHRmYWN0b3J5LmtleVNlcnZpY2UuZ2V0TG9jYWxJZCgpLFxyXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlLmZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZS5kZXJpdmVkXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpdGVtUmVzb3VyY2VzID0gdGhpcy5lbnRyeS5hZGRJdGVtcyhpdGVtRW50cmllcywgdGhpcywgZmFsc2UsIGZhbHNlKTtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMub3B0aW9ucy5tb2RJbnN0YW50KSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zYXZlKCkudGhlbihcclxuXHRcdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChlbmFibGVDYWxsYmFja3MpXHJcblx0XHRcdFx0XHR0aGlzLmNhbGxPbkFkZChpdGVtUmVzb3VyY2VzKTtcclxuXHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1SZXNvdXJjZXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGFkZEl0ZW0gKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGRJdGVtcyhbdmFsdWVzXSwgZW5hYmxlQ2FsbGJhY2tzKS50aGVuKGl0ZW1SZXNvdXJjZXMgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtUmVzb3VyY2VzWzBdO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR0aGlzLmZhY3RvcnkuZXJyb3JIYW5kbGVyLnJlamVjdFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGNsZWFyIChlbmFibGVDYWxsYmFja3MpIHtcclxuXHRcdHJldHVybiB0aGlzLmVudHJ5LmNsZWFyKHRoaXMsIGZhbHNlLCBlbmFibGVDYWxsYmFja3MpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCB7IENvbHVtbkluZm8sIENvbHVtblNldCB9IGZyb20gJy4uL2NsYXNzZXMnO1xyXG5pbXBvcnQgeyBBTExfUEVSTUlTU0lPTlMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBJdGVtRW50cnlGYWN0b3J5IH0gZnJvbSAnLi4vZmFjdG9yaWVzJztcclxuaW1wb3J0IHsgSXRlbVJlc291cmNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW50cnlQYXJlbnROdWxsLCBGaWVsZE1hcCwgSXRlbUlkLCBJdGVtSWRDb252ZXJzaW9uTWFwIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxubGV0IGN1cnJlbnRJZCA9IDA7XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbUVudHJ5IHtcclxuXHRpZDogbnVtYmVyID0gKytjdXJyZW50SWQ7XHJcblxyXG5cdGRlZmVyUmVxdWVzdCA9IGZhbHNlO1xyXG5cdGRlZmVycmVkO1xyXG5cdHBhcmVudDogRW50cnlQYXJlbnROdWxsID0gbnVsbDtcclxuXHJcblx0aW5pdGlhbDogRmllbGRNYXA7XHJcblx0bW9kaWZpZWQ6IEZpZWxkTWFwO1xyXG5cdGRlcml2ZWQ6IEZpZWxkTWFwO1xyXG5cclxuXHRyZXNvdXJjZXM6IEl0ZW1SZXNvdXJjZVtdID0gW107XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZmFjdG9yeTogSXRlbUVudHJ5RmFjdG9yeSxcclxuXHRcdHB1YmxpYyBpdGVtVHlwZTogc3RyaW5nLFxyXG5cdFx0cHVibGljIGl0ZW1JZDogSXRlbUlkLFxyXG5cdFx0cHVibGljIGNvbHVtbnM6IENvbHVtblNldFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0ZGVmZXIgKGRlZmVyUmVxdWVzdCk6IHRoaXMge1xyXG5cdFx0dGhpcy5kZWZlcnJlZCA9IHRoaXMuZmFjdG9yeS5wcm9taXNlU2VydmljZS5kZWZlcigpO1xyXG5cdFx0dGhpcy5kZWZlclJlcXVlc3QgPSBkZWZlclJlcXVlc3Q7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IGRlZmVycmVkID0gdGhpcy5kZWZlcnJlZDtcclxuXHJcblx0XHQvLyB0aGUgcmVzb2x2ZSBmdW5jdGlvbiBtaWdodCBkZWZlciB0aGUgaXRlbSBhZ2Fpbiwgc28gZGVsZXRlIHRoZSBwcm9wZXJ0aWVzIGZpcnN0XHJcblx0XHRkZWxldGUgdGhpcy5kZWZlcnJlZDtcclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVyUmVxdWVzdDtcclxuXHJcblx0XHRkZWZlcnJlZC5yZXNvbHZlKHRoaXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZURlZmVycmVkIChpbml0aWFsLCBkZXJpdmVkLCBjb2x1bW5zKTogdGhpcyB7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG5cdFx0dGhpcy5wcm9jZXNzKGluaXRpYWwsIGRlcml2ZWQpO1xyXG5cdFx0dGhpcy5yZXNvbHZlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRpc0RlZmVycmVkICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmRlZmVycmVkICE9PSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRyZWplY3QgKGVycm9yPyk6IHRoaXMge1xyXG5cdFx0Ly8gdG9kbzogdHJhbnNsYXRlZCBlcnJvclxyXG5cdFx0dGhpcy5kZWZlcnJlZC5yZWplY3QoZXJyb3IpO1xyXG5cclxuXHRcdGRlbGV0ZSB0aGlzLmRlZmVycmVkO1xyXG5cdFx0ZGVsZXRlIHRoaXMuZGVmZXJSZXF1ZXN0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cHJvY2VzcyAoaW5pdGlhbCwgZGVyaXZlZCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZm9ybWF0dGVkO1xyXG5cclxuXHRcdHRoaXMuaW5pdGlhbCA9IGluaXRpYWw7XHJcblx0XHR0aGlzLmRlcml2ZWQgPSBkZXJpdmVkO1xyXG5cclxuXHRcdGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZSh0aGlzLmluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMubWFpbik7XHJcblx0XHRhcGlGb3JtYXR0ZXIuZm9ybWF0UmVzcG9uc2UodGhpcy5kZXJpdmVkLCBmb3JtYXR0ZWRDb2x1bW5zLmRlcml2ZWQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cHJvY2Vzc0xvY2FsIChpbml0aWFsLCBtb2RpZmllZCwgZGVyaXZlZCwgY29udmVyc2lvbk1hcDogSXRlbUlkQ29udmVyc2lvbk1hcCk6IHRoaXMge1xyXG5cdFx0dGhpcy5pbml0aWFsID0ge3Blcm1pc3Npb25zOiBBTExfUEVSTUlTU0lPTlN9O1xyXG5cclxuXHRcdHRoaXMudXBkYXRlRmllbGRzKGluaXRpYWwpO1xyXG5cdFx0dGhpcy51cGRhdGVJdGVtRmllbGRzKGNvbnZlcnNpb25NYXApO1xyXG5cdFx0dGhpcy5zZXRNb2RpZmllZChtb2RpZmllZCk7XHJcblxyXG5cdFx0dGhpcy5kZXJpdmVkID0gZGVyaXZlZDtcclxuXHRcdHRoaXMuc2V0Q3JlYXRvcigpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c2V0Q3JlYXRvciAoKTogdGhpcyB7XHJcblx0XHRjb25zdCBhdXRoSW50ZXJmYWNlID0gdGhpcy5mYWN0b3J5LmF1dGhJbnRlcmZhY2U7XHJcblxyXG5cdFx0dGhpcy5tb2RpZmllZC5jcmVhdG9yID0gYXV0aEludGVyZmFjZS5nZXRVc2VySWQoKTtcclxuXHRcdHRoaXMubW9kaWZpZWQuY3JlYXRlZCA9IG1vbWVudCgpO1xyXG5cdFx0dGhpcy5kZXJpdmVkWydjcmVhdG9yPmRpc3BsYXluYW1lJ10gPSBhdXRoSW50ZXJmYWNlLmdldFVzZXJEaXNwbGF5bmFtZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2xvbmUgKGNvbnZlcnNpb25NYXA6IEl0ZW1JZENvbnZlcnNpb25NYXAgPSB7fSk6IEl0ZW1FbnRyeSB7XHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gZmFjdG9yeS5hcGlGb3JtYXR0ZXI7XHJcblx0XHRjb25zdCBpdGVtRW50cnlTZXJ2aWNlID0gZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50O1xyXG5cdFx0Y29uc3QgbmV3SXRlbUlkID0gaXRlbUVudHJ5U2VydmljZS5leHBhbmRDb252ZXJzaW9uTWFwKHRoaXMsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdC8vIHdlJ2xsIGNvcHkgbW9kaWZpZWQgdG8gcmVzdWx0LmluaXRpYWwgKGluaXRpYWwgbWF5IGJlIGEgdGVtcGxhdGUpXHJcblx0XHRjb25zdCBjbG9uZWRFbnRyeSA9IGZhY3RvcnkuY29uc3RydWN0KFxyXG5cdFx0XHRuZXdJdGVtSWQsXHJcblx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuZ2V0RmllbGRzKCksIHt9LCBjb2x1bW5zLm1haW4pLFxyXG5cdFx0XHRhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyh0aGlzLmRlcml2ZWQsIHt9LCBjb2x1bW5zLmRlcml2ZWQpLFxyXG5cdFx0XHRjb2x1bW5zXHJcblx0XHQpO1xyXG5cclxuXHRcdGNsb25lZEVudHJ5LnVwZGF0ZUl0ZW1GaWVsZHMoY29udmVyc2lvbk1hcCk7XHJcblxyXG5cdFx0Y2xvbmVkRW50cnkubW9kaWZpZWQgPSBhcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhjbG9uZWRFbnRyeS5pbml0aWFsLCB7fSwgY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRpZiAocGFyZW50ID09PSBudWxsKVxyXG5cdFx0XHRyZXR1cm4gY2xvbmVkRW50cnk7XHJcblxyXG5cdFx0Y29uc3QgcGFyZW50SWQgPSBpdGVtRW50cnlTZXJ2aWNlLmdldENvbnZlcnNpb25WYWx1ZSh0aGlzLml0ZW1UeXBlLCBwYXJlbnQuaXRlbUlkLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRjbG9uZWRFbnRyeS5zZXRQYXJlbnQoXHJcblx0XHRcdHBhcmVudC5pdGVtVHlwZSxcclxuXHRcdFx0cGFyZW50SWQgPT09IHVuZGVmaW5lZCA/IHBhcmVudC5pdGVtSWQgOiBwYXJlbnRJZFxyXG5cdFx0KTtcclxuXHJcblx0XHRyZXR1cm4gY2xvbmVkRW50cnk7XHJcblx0fVxyXG5cclxuXHRyZXNldERlcml2ZWQgKGNvbHVtbklkcyk6IHRoaXMge1xyXG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0Y29uc3Qgcm9vdENvbHVtbnMgPSB0aGlzLmNvbHVtbnMucm9vdDtcclxuXHRcdGNvbnN0IGZpbHRlcmVkQ29sdW1uczogQ29sdW1uSW5mb1tdID0gW107XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2Ygcm9vdENvbHVtbnMpIHtcclxuXHRcdFx0aWYgKGNvbHVtbklkcy5pbmRleE9mKGNvbHVtbi5pZCkgIT09IC0xKVxyXG5cdFx0XHRcdGZpbHRlcmVkQ29sdW1ucy5wdXNoKGNvbHVtbik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoZmlsdGVyZWRDb2x1bW5zKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRmdW5jdGlvbiByZXNldERlcml2ZWRSZWN1cnNpdmVseSAoY29sdW1ucykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0aWYgKCFjb2x1bW4uaXNMZWFmKVxyXG5cdFx0XHRcdFx0cmVzZXREZXJpdmVkUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcclxuXHJcblx0XHRcdFx0ZGVsZXRlIHNlbGYuZGVyaXZlZFtjb2x1bW4ucGF0aF07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNsZWFyUmVzb3VyY2VzICgpOiB0aGlzIHtcclxuXHRcdHRoaXMucmVzb3VyY2VzID0gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRkZWFjdGl2YXRlUmVzb3VyY2VzICgpOiB0aGlzIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMucmVzb3VyY2VzOyAvLyBvbiBvZiB0aGUgZGVhY3RpdmF0ZSBjYWxsYmFja3MgbWlnaHQgY2FsbCBjbGVhclJlc291cmNlc1xyXG5cclxuXHRcdGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzb3VyY2VzKVxyXG5cdFx0XHRyZXNvdXJjZS5kZWFjdGl2YXRlKCk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRnZXRGaWVsZHMgKCkge1xyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgIT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHRoaXMubW9kaWZpZWQ7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuaW5pdGlhbDtcclxuXHR9XHJcblxyXG5cdC8vIHNob3VsZCBiZSBmYXN0XHJcblx0Ly8gdG9kbzogdHlwZSBjb2x1bW5FeHBhbnNpb25SZXN1bHRcclxuXHRleHBhbmQgKG1haW4sIGRlcml2ZWQsIGNvbHVtbkV4cGFuc2lvblJlc3VsdCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IGRpZmZlcmVuY2UgPSBjb2x1bW5FeHBhbnNpb25SZXN1bHQuZGlmZmVyZW5jZTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IGNvbHVtbkV4cGFuc2lvblJlc3VsdC5tZXJnZWQ7XHJcblxyXG5cdFx0YXBpRm9ybWF0dGVyLmV4cGFuZFJlc3BvbnNlKFxyXG5cdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdG1haW4sXHJcblx0XHRcdGRpZmZlcmVuY2UubWFpblxyXG5cdFx0KTtcclxuXHJcblx0XHRhcGlGb3JtYXR0ZXIuZXhwYW5kUmVzcG9uc2UoXHJcblx0XHRcdHRoaXMuZGVyaXZlZCxcclxuXHRcdFx0ZGVyaXZlZCxcclxuXHRcdFx0ZGlmZmVyZW5jZS5kZXJpdmVkXHJcblx0XHQpO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGFwaUZvcm1hdHRlci5leHBhbmRSZXNwb25zZShcclxuXHRcdFx0dGhpcy5tb2RpZmllZCxcclxuXHRcdFx0bWFpbixcclxuXHRcdFx0ZGlmZmVyZW5jZS5tYWluXHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Ly8ga2V5OiBpbml0aWFsIC8gbW9kaWZpZWRcclxuXHQvLyBmaWVsZHMgKmhhdmVuJ3QqIGJlZW4gZm9ybWF0dGVkIHlldFxyXG5cdHVwZGF0ZUZpZWxkcyAoc291cmNlLCBvdmVyd3JpdGUgPSB0cnVlKTogdGhpcyB7XHJcblx0XHRjb25zdCBhcGlGb3JtYXR0ZXIgPSB0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyO1xyXG5cdFx0Y29uc3QgbWFpbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFpbjtcclxuXHRcdGNvbnN0IGZvcm1hdHRlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZm9ybWF0dGVkLm1haW47XHJcblx0XHRjb25zdCBpbml0aWFsID0gdGhpcy5pbml0aWFsO1xyXG5cdFx0Y29uc3QgbW9kaWZpZWQgPSB0aGlzLm1vZGlmaWVkO1xyXG5cclxuXHRcdGlmIChtb2RpZmllZCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGZvciAoY29uc3QgY29sdW1uIG9mIG1haW5Db2x1bW5zKSB7XHJcblx0XHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRcdGlmIChvdmVyd3JpdGUgfHwgYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLmFwaUNvbHVtbi50eXBlLCBpbml0aWFsW2NvbHVtbklkXSwgbW9kaWZpZWRbY29sdW1uSWRdKSlcclxuXHRcdFx0XHRcdG1vZGlmaWVkW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGFwaUZvcm1hdHRlci5mb3JtYXRSZXNwb25zZShtb2RpZmllZCwgZm9ybWF0dGVkQ29sdW1ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW4gb2YgbWFpbkNvbHVtbnMpIHtcclxuXHRcdFx0Y29uc3QgY29sdW1uSWQgPSBjb2x1bW4uaWQ7XHJcblxyXG5cdFx0XHRpbml0aWFsW2NvbHVtbklkXSA9IHNvdXJjZVtjb2x1bW5JZF07XHJcblx0XHR9XHJcblxyXG5cdFx0YXBpRm9ybWF0dGVyLmZvcm1hdFJlc3BvbnNlKGluaXRpYWwsIGZvcm1hdHRlZENvbHVtbnMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlSXRlbVZhbHVlIChmaWVsZHMsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgY29sdW1uSWQgPSBhcGlDb2x1bW4uaWQ7XHJcblx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBmaWVsZHNbY29sdW1uSWRdO1xyXG5cclxuXHRcdGxldCBuZXdWYWx1ZTtcclxuXHJcblx0XHRpZiAoYXBpQ29sdW1uLnR5cGUgPT09ICdsaW5rJyAmJiBjdXJyZW50VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpZiAodGhpcy5wYXJlbnQgIT09IG51bGwpXHJcblx0XHRcdFx0bmV3VmFsdWUgPSB0aGlzLnBhcmVudC5pdGVtSWQ7XHJcblx0XHR9IGVsc2VcclxuXHRcdFx0bmV3VmFsdWUgPSB0aGlzLmZhY3RvcnkuaXRlbUVudHJ5U2VydmljZS5nZXRDb252ZXJzaW9uVmFsdWUoYXBpQ29sdW1uLml0ZW1UeXBlLCBjdXJyZW50VmFsdWUsIGNvbnZlcnNpb25NYXApO1xyXG5cclxuXHRcdGlmIChuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRmaWVsZHNbY29sdW1uSWRdID0gbmV3VmFsdWU7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVJdGVtRmllbGRzIChjb252ZXJzaW9uTWFwKTogdGhpcyB7XHJcblx0XHRjb25zdCBpdGVtQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5pdGVtO1xyXG5cdFx0Y29uc3QgaW5pdGlhbCA9IHRoaXMuaW5pdGlhbDtcclxuXHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZDtcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbiBvZiBpdGVtQ29sdW1ucykge1xyXG5cdFx0XHRjb25zdCBhcGlDb2x1bW4gPSBjb2x1bW4uYXBpQ29sdW1uO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUoaW5pdGlhbCwgYXBpQ29sdW1uLCBjb252ZXJzaW9uTWFwKTtcclxuXHJcblx0XHRcdGlmIChtb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0dGhpcy51cGRhdGVJdGVtVmFsdWUobW9kaWZpZWQsIGFwaUNvbHVtbiwgY29udmVyc2lvbk1hcCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRmb3JtYXRSZXF1ZXN0ICgpIHtcclxuXHRcdGNvbnN0IGZhY3RvcnkgPSB0aGlzLmZhY3Rvcnk7XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZClcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cclxuXHRcdHJldHVybiBmYWN0b3J5LmFwaUZvcm1hdHRlci5mb3JtYXRSZXF1ZXN0KFxyXG5cdFx0XHRmYWN0b3J5LmtleVNlcnZpY2UuaXNMb2NhbElkKHRoaXMuaXRlbUlkKSA/IHt9IDogdGhpcy5pbml0aWFsLFxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHNldERpc3BsYXlOYW1lICgpOiB0aGlzIHtcclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0RGlzcGxheU5hbWUoKTtcclxuXHJcblx0XHRpZiAocmVzdWx0KVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLmRpc3BsYXluYW1lID0gcmVzdWx0O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0RGlzcGxheU5hbWUgKCkge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5U2VydmljZSA9IHRoaXMuZmFjdG9yeS5pdGVtRW50cnlTZXJ2aWNlO1xyXG5cdFx0Y29uc3QgZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcclxuXHJcblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnQ29udGFjdCc6XHJcblx0XHRcdFx0cmV0dXJuIGZpZWxkcy50eXBlID09PSAnYmVkcmlqZicgP1xyXG5cdFx0XHRcdFx0ZmllbGRzLmJlZHJpamYgOiBpdGVtRW50cnlTZXJ2aWNlLmdldEZ1bGxOYW1lKFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXHJcblx0XHRcdFx0XHRcdGZpZWxkcy50dXNzZW52b2Vnc2VsLFxyXG5cdFx0XHRcdFx0XHRmaWVsZHMubmFhbVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSAnTWVkZXdlcmtlcic6XHJcblx0XHRcdGNhc2UgJ1BlcnNvbic6XHJcblx0XHRcdFx0cmV0dXJuIGl0ZW1FbnRyeVNlcnZpY2UuZ2V0RnVsbE5hbWUoXHJcblx0XHRcdFx0XHRmaWVsZHMudm9vcm5hYW0sXHJcblx0XHRcdFx0XHRmaWVsZHMudHVzc2Vudm9lZ3NlbCxcclxuXHRcdFx0XHRcdGZpZWxkcy5hY2h0ZXJuYWFtXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0Y2FzZSAnUmVwYXJhdGllJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5kZXJpdmVkWydtYXRlcmlhYWw+bmFhbSddOyAvLyBUT0RPIVxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBmaWVsZHNbaXRlbUVudHJ5U2VydmljZS5nZXRUaXRsZUZpZWxkKHRoaXMuaXRlbVR5cGUpXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwYXJhbSB7Qm9vbGVhbn0gcmV0dXJuQWxsIFJldHVybnMgYWxsIGluaXRpYWwgdmFsdWVzIGlmIHRydWVcclxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fVxyXG5cdCAqL1xyXG5cdGdldENoYW5nZXMgKHJldHVybkFsbCA9IGZhbHNlKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkICYmICFyZXR1cm5BbGwpXHJcblx0XHRcdHJldHVybiBbXTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5nZXRDaGFuZ2VzKFxyXG5cdFx0XHR0aGlzLmluaXRpYWwsXHJcblx0XHRcdHJldHVybkFsbCA/IHt9IDogdGhpcy5tb2RpZmllZCxcclxuXHRcdFx0dGhpcy5jb2x1bW5zLm1haW5cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRpc0xvY2FsICgpIHtcclxuXHRcdHJldHVybiB0aGlzLmZhY3Rvcnkua2V5U2VydmljZS5pc0xvY2FsSWQodGhpcy5pdGVtSWQpO1xyXG5cdH1cclxuXHJcblx0aXNMb2NrYWJsZSAoKSB7XHJcblx0XHRpZiAodGhpcy5pc0xvY2FsKCkpXHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRzd2l0Y2ggKHRoaXMuaXRlbVR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnUHJvamVjdCc6XHJcblx0XHRcdGNhc2UgJ01hdGVyaWFhbCc6XHJcblx0XHRcdGNhc2UgJ0NvbnRhY3QnOlxyXG5cdFx0XHRjYXNlICdNZWRld2Vya2VyJzpcclxuXHRcdFx0Y2FzZSAnVm9lcnR1aWcnOlxyXG5cdFx0XHRjYXNlICdUZW1wbGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFzQ2hhbmdlcyAoKSB7XHJcblx0XHRpZiAodGhpcy5tb2RpZmllZCA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuaGFzQ2hhbmdlcyhcclxuXHRcdFx0dGhpcy5pbml0aWFsLFxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkLFxyXG5cdFx0XHR0aGlzLmNvbHVtbnMubWFpblxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHJlc2V0TW9kaWZpZWQgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYWluO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0dGhpcy5tb2RpZmllZFtjb2x1bW4uaWRdID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlci5jbG9uZShcclxuXHRcdFx0XHRjb2x1bW4uYXBpQ29sdW1uLnR5cGUsXHJcblx0XHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbi5pZF1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldEluaXRpYWwgKHZhbHVlcywgZW5hYmxlQ2FsbGJhY2tzPyk6IHRoaXMge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGxldCBwcmV2aW91cztcclxuXHJcblx0XHRmb3IgKGNvbnN0IGNvbHVtbklkIGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5pbml0aWFsW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0aWYgKHRoaXMubW9kaWZpZWQgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHRcdHRoaXMuY2FsbE9uQ2hhbmdlKGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMuaW5pdGlhbCwge30sIHRoaXMuY29sdW1ucy5tYWluKSk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRwcmV2aW91cyA9IGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKHRoaXMubW9kaWZpZWQsIHt9LCB0aGlzLmNvbHVtbnMubWFpbik7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpXHJcblx0XHRcdHRoaXMubW9kaWZpZWRbY29sdW1uSWRdID0gdmFsdWVzW2NvbHVtbklkXTtcclxuXHJcblx0XHRpZiAoZW5hYmxlQ2FsbGJhY2tzKVxyXG5cdFx0XHR0aGlzLmNhbGxPbkNoYW5nZShwcmV2aW91cyk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEb2VzIGEgc2hhbGxvdyBjb3B5IG9mIHZhbHVlcyFcclxuXHQgKi9cclxuXHRzZXRNb2RpZmllZCAodmFsdWVzPyk6IHRoaXMge1xyXG5cdFx0Y29uc3QgYXBpRm9ybWF0dGVyID0gdGhpcy5mYWN0b3J5LmFwaUZvcm1hdHRlcjtcclxuXHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XHJcblx0XHRjb25zdCByZXNwb25zZUNvbHVtbnMgPSBjb2x1bW5zLnJlc3BvbnNlW3RoaXMuaXRlbVR5cGVdO1xyXG5cclxuXHRcdGlmICh0aGlzLm1vZGlmaWVkID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgcmVzb3VyY2VzID0gdGhpcy5yZXNvdXJjZXM7XHJcblx0XHRcdGNvbnN0IGluaXRpYWwgPSB0aGlzLmluaXRpYWw7XHJcblx0XHRcdGNvbnN0IG1vZGlmaWVkID0gdGhpcy5tb2RpZmllZCA9IHt9O1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRcdGFwaUZvcm1hdHRlci5jb3B5RmllbGRzKGluaXRpYWwsIG1vZGlmaWVkLCBjb2x1bW5zLm1haW4pO1xyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRhcGlGb3JtYXR0ZXIuc2hhbGxvd0NvcHlGaWVsZHModmFsdWVzLCBpbml0aWFsLCBtb2RpZmllZCwgY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRcdFx0Zm9yIChjb25zdCBjb2x1bW5JZCBpbiB2YWx1ZXMpIHtcclxuXHRcdFx0XHRcdGlmIChyZXNwb25zZUNvbHVtbnNbY29sdW1uSWRdID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Ly8gdG9kbzogZGV2IG1vZGUgY29uc3RhbnRcclxuXHRcdFx0XHRcdFx0Ly8gaWYgKERFVl9NT0RFKVxyXG5cdFx0XHRcdFx0XHQvLyBcdGNvbnNvbGUud2Fybignc2V0TW9kaWZpZWQ6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XHJcblxyXG5cdFx0XHRcdFx0XHRtb2RpZmllZFtjb2x1bW5JZF0gPSB2YWx1ZXNbY29sdW1uSWRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpXHJcblx0XHRcdFx0cmVzb3VyY2UuZmllbGRzID0gbW9kaWZpZWQ7XHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodmFsdWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKVxyXG5cdFx0XHR0aGlzLm1vZGlmaWVkW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzZXREZXJpdmVkICh2YWx1ZXMpOiB0aGlzIHtcclxuXHRcdGZvciAoY29uc3Qga2V5IGluIHZhbHVlcylcclxuXHRcdFx0dGhpcy5kZXJpdmVkW2tleV0gPSB2YWx1ZXNba2V5XTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNldFBhcmVudCAocGFyZW50VHlwZSwgcGFyZW50SWQpOiB0aGlzIHtcclxuXHRcdHRoaXMucGFyZW50ID0ge1xyXG5cdFx0XHRpdGVtVHlwZTogcGFyZW50VHlwZSxcclxuXHRcdFx0aXRlbUlkOiBwYXJlbnRJZFxyXG5cdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNhbGxPbkNoYW5nZSAocHJldmlvdXMpOiB0aGlzIHtcclxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy5yZXNvdXJjZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGl0ZW1SZXNvdXJjZSA9IHRoaXMucmVzb3VyY2VzW2ldO1xyXG5cclxuXHRcdFx0aWYgKGl0ZW1SZXNvdXJjZSAhPT0gbnVsbClcclxuXHRcdFx0XHRpdGVtUmVzb3VyY2Uub3B0aW9ucy5vbkNoYW5nZShpdGVtUmVzb3VyY2UsIHByZXZpb3VzKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5IH0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmllbGRNYXAsIFJlc3BvbnNlQ29sdW1uIH0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEl0ZW1SZXNvdXJjZSB7XHJcblx0Y29sdW1uczoge1tjb2x1bW5JZDogc3RyaW5nXTogUmVzcG9uc2VDb2x1bW59O1xyXG5cdGZpZWxkczogRmllbGRNYXA7XHJcblx0ZGVyaXZlZDogRmllbGRNYXA7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHB1YmxpYyBlbnRyeTogSXRlbUVudHJ5LFxyXG5cdFx0cHVibGljIG9wdGlvbnMsXHJcblx0XHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2lzTmV3OiBib29sZWFuID0gZmFsc2VcclxuXHQpIHtcclxuXHRcdHRoaXMuZGVyaXZlZCA9IGVudHJ5LmRlcml2ZWQ7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBlbnRyeS5jb2x1bW5zLnJlc3BvbnNlW2VudHJ5LmNvbHVtbnMuaXRlbVR5cGVdO1xyXG5cclxuXHRcdGVudHJ5LnJlc291cmNlcy5wdXNoKHRoaXMpO1xyXG5cdH1cclxuXHJcblx0aXNOZXcgKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2lzTmV3O1xyXG5cdH1cclxuXHJcblx0aXNMb2NhbCAoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lbnRyeS5pc0xvY2FsKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhclJlc291cmNlICgpIHtcclxuXHRcdGNvbnN0IHJlc291cmNlcyA9IHRoaXMuZW50cnkucmVzb3VyY2VzO1xyXG5cdFx0Y29uc3QgaW5kZXggPSByZXNvdXJjZXMuaW5kZXhPZih0aGlzKTtcclxuXHJcblx0XHRpZiAoaW5kZXggIT09IC0xKVxyXG5cdFx0XHRyZXNvdXJjZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHR9XHJcblxyXG5cdGRlYWN0aXZhdGUgKCkge1xyXG5cdFx0dGhpcy5vcHRpb25zLm9uRGVhY3RpdmF0ZSh0aGlzLmVudHJ5KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSXRlbUVudHJ5LCBJdGVtUmVzb3VyY2UgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XHJcblx0Y29uc3RydWN0b3IgKFxyXG5cdFx0ZW50cnk6IEl0ZW1FbnRyeSxcclxuXHRcdG9wdGlvbnMsXHJcblx0XHRpc05ldz86IGJvb2xlYW5cclxuXHQpIHtcclxuXHRcdHN1cGVyKGVudHJ5LCBvcHRpb25zLCBpc05ldyk7XHJcblxyXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZCA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0ZW50cnkuaW5pdGlhbCA6IGVudHJ5Lm1vZGlmaWVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBjcmVhdGVQYXRoIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IEl0ZW1SZXNvdXJjZUZhY3RvcnkgfSBmcm9tICcuLi9mYWN0b3JpZXMnO1xyXG5pbXBvcnQgeyBGaWVsZE1hcCB9IGZyb20gJy4uL3R5cGVzJztcclxuXHJcbmltcG9ydCB7IEl0ZW1FbnRyeSwgSXRlbVJlc291cmNlIH0gZnJvbSAnLi8nO1xyXG5cclxuZXhwb3J0IGNsYXNzIEVkaXRSZXNvdXJjZSBleHRlbmRzIEl0ZW1SZXNvdXJjZSB7XHJcblx0bG9jYWxDb3BpZXM6IEZpZWxkTWFwW10gPSBbXTtcclxuXHR0cmFuc2FjdGlvbnM6IG51bWJlciA9IDA7XHJcblxyXG5cdGNvbnN0cnVjdG9yIChcclxuXHRcdHByaXZhdGUgZmFjdG9yeTogSXRlbVJlc291cmNlRmFjdG9yeSxcclxuXHRcdGVudHJ5OiBJdGVtRW50cnksXHJcblx0XHRvcHRpb25zLFxyXG5cdFx0aXNOZXc/OiBib29sZWFuXHJcblx0KSB7XHJcblx0XHRzdXBlcihlbnRyeSwgb3B0aW9ucywgaXNOZXcpO1xyXG5cclxuXHRcdGVudHJ5LnNldE1vZGlmaWVkKCk7XHJcblxyXG5cdFx0dGhpcy5maWVsZHMgPSBlbnRyeS5tb2RpZmllZDtcclxuXHR9XHJcblxyXG5cdGlzTmV3ICgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLl9pc05ldyAmJiB0aGlzLnRyYW5zYWN0aW9ucyA9PT0gMDtcclxuXHR9XHJcblxyXG5cdHN0YXJ0ICgpOiB0aGlzIHtcclxuXHRcdGlmICh0aGlzLmxvY2FsQ29waWVzID09PSB1bmRlZmluZWQpXHJcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMgPSBbXTtcclxuXHJcblx0XHR0aGlzLmxvY2FsQ29waWVzLnB1c2godGhpcy5jb3B5RmllbGRzKCkpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0cm9sbGJhY2sgKCk6IHRoaXMge1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHJcblx0XHR0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvcHlGaWVsZHModGhpcy5sb2NhbENvcGllcy5wb3AoKSwgaXRlbUVudHJ5Lm1vZGlmaWVkLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHJcblx0XHRpZiAodGhpcy5pc05ldygpICYmIHRoaXMubG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHR0aGlzLmRlYWN0aXZhdGUoKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNvbW1pdCAoaW5pdGlhbCA9IGZhbHNlKTogdGhpcyB7XHJcblx0XHRpZiAoIWluaXRpYWwpXHJcblx0XHRcdHRoaXMubG9jYWxDb3BpZXMucG9wKCk7XHJcblxyXG5cdFx0dGhpcy50cmFuc2FjdGlvbnMrKzsgLy8gY29tcGxldGVkIHRyYW5zYWN0aW9uc1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Z2V0TG9jYWxDb3B5ICgpOiBGaWVsZE1hcCB8IG51bGwge1xyXG5cdFx0Y29uc3QgbG9jYWxDb3BpZXMgPSB0aGlzLmxvY2FsQ29waWVzO1xyXG5cclxuXHRcdGlmIChsb2NhbENvcGllcyA9PT0gdW5kZWZpbmVkKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRpZiAobG9jYWxDb3BpZXMubGVuZ3RoID09PSAwKVxyXG5cdFx0XHRyZXR1cm4gbnVsbDtcclxuXHJcblx0XHRyZXR1cm4gbG9jYWxDb3BpZXNbbG9jYWxDb3BpZXMubGVuZ3RoIC0gMV07XHJcblx0fVxyXG5cclxuXHRjb3B5RmllbGRzIChkZXN0aW5hdGlvbjogRmllbGRNYXAgPSB7fSk6IEZpZWxkTWFwIHtcclxuXHRcdGNvbnN0IGl0ZW1FbnRyeSA9IHRoaXMuZW50cnk7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuZmFjdG9yeS5hcGlGb3JtYXR0ZXIuY29weUZpZWxkcyhpdGVtRW50cnkubW9kaWZpZWQsIGRlc3RpbmF0aW9uLCBpdGVtRW50cnkuY29sdW1ucy5tYWluKTtcclxuXHR9XHJcblxyXG5cdHNldEZpZWxkcyAodmFsdWVzOiBGaWVsZE1hcCwgY2FsbE9uQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSk6IHRoaXMge1xyXG5cdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcclxuXHRcdGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xyXG5cdFx0bGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcclxuXHRcdGxldCBwcmV2aW91cztcclxuXHJcblx0XHRpZiAoY2FsbE9uQ2hhbmdlKVxyXG5cdFx0XHRwcmV2aW91cyA9IHRoaXMuY29weUZpZWxkcygpO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29sdW1uSWQgaW4gdmFsdWVzKSB7XHJcblx0XHRcdGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbY29sdW1uSWRdO1xyXG5cclxuXHRcdFx0aWYgKGNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKCdzZXRGaWVsZHM6IG5vIGNvbHVtbiBmb3VuZCBmb3InLCBjb2x1bW5JZCk7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh0aGlzLmZhY3RvcnkuYXBpRm9ybWF0dGVyLmNvbXBhcmVGaWVsZHMoY29sdW1uLnR5cGUsIGZpZWxkc1tjb2x1bW5JZF0sIHZhbHVlc1tjb2x1bW5JZF0pKVxyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0ZmllbGRzW2NvbHVtbklkXSA9IHZhbHVlc1tjb2x1bW5JZF07XHJcblx0XHRcdGhhc0NoYW5nZXMgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChjYWxsT25DaGFuZ2UgJiYgaGFzQ2hhbmdlcylcclxuXHRcdFx0dGhpcy5jYWxsT25DaGFuZ2UocHJldmlvdXMpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0Y2FsbE9uQ2hhbmdlIChwcmV2aW91czogRmllbGRNYXApOiB0aGlzIHtcclxuXHRcdHRoaXMuZW50cnkuY2FsbE9uQ2hhbmdlKHByZXZpb3VzKTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHNhdmUgKHBhcmFtZXRlcnM/KTogUHJvbWlzZTx0aGlzPiB7XHJcblx0XHRjb25zdCBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5O1xyXG5cdFx0Y29uc3QgaXRlbUVudHJ5ID0gdGhpcy5lbnRyeTtcclxuXHRcdGNvbnN0IHBhcmFtZXRlck1hcCA9IHt9O1xyXG5cclxuXHRcdGlmIChwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y3JlYXRlUGF0aChcclxuXHRcdFx0XHRwYXJhbWV0ZXJNYXAsXHJcblx0XHRcdFx0W2l0ZW1FbnRyeS5pdGVtVHlwZSwgaXRlbUVudHJ5Lml0ZW1JZF0sXHJcblx0XHRcdFx0W3t9LCBwYXJhbWV0ZXJzXVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGl0ZW1FbnRyeS5pc0xvY2thYmxlKCkgP1xyXG5cdFx0XHRcdGZhY3RvcnkubG9ja1NlcnZpY2UuZmV0Y2hMb2NrKGl0ZW1FbnRyeSkgOlxyXG5cdFx0XHRcdGZhY3RvcnkucHJvbWlzZVNlcnZpY2Uud2hlbigpXHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHQvLyBhZGRUb0NvbGxlY3Rpb25zIGlzIGNhbGxlZCBpbiBjaGFuZ2VzUHJvY2Vzc29yXHJcblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkuY2hhbmdlc1Byb2Nlc3Nvci5leGVjdXRlKFtpdGVtRW50cnldLCBbXSwgcGFyYW1ldGVyTWFwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0ZmFjdG9yeS5lcnJvckhhbmRsZXIucmVqZWN0XHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCIvLyBzaG91bGQgYmUgb3JkZXJlZCBieSBkZXBlbmRlbmN5IVxyXG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25FbnRyeSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uVmlld1Jlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uRWRpdFJlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9JdGVtRW50cnknO1xyXG5leHBvcnQgKiBmcm9tICcuL0l0ZW1SZXNvdXJjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vVmlld1Jlc291cmNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9FZGl0UmVzb3VyY2UnO1xyXG4iLCJpbXBvcnQge1xuXHRBcGlGb3JtYXR0ZXIsXG5cdEFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRDb2xsZWN0aW9uSGFuZGxlcixcblx0Q29sbGVjdGlvblJlc291cmNlU2VydmljZSxcblx0Q29sdW1uQ2FjaGUsXG5cdENvbHVtbkhhbmRsZXIsXG5cdENvbHVtblV0aWwsXG5cdEl0ZW1BZG1pbmlzdHJhdG9yLFxuXHRJdGVtRW50cnlTZXJ2aWNlLFxuXHRJdGVtSGFuZGxlcixcblx0SXRlbVJlcXVlc3RTZXJ2aWNlLFxuXHRJdGVtUmVzb3VyY2VTZXJ2aWNlLFxuXHRLZXlTZXJ2aWNlLFxuXHRMb2NrU2VydmljZSxcblx0UXVlcnlTZXJ2aWNlLFxuXHRTb2NrZXRNZXNzYWdlSGFuZGxlclxufSBmcm9tICcuL2NsYXNzZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5LFxuXHRCYXRjaFN0YXR1c0ZhY3RvcnksXG5cdENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LFxuXHRDb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRDb2xsZWN0aW9uRW50cnlGYWN0b3J5LFxuXHRDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnksXG5cdENvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdENvbHVtbkluZm9GYWN0b3J5LFxuXHRDb2x1bW5TZXRGYWN0b3J5LFxuXHRDcmVhdGVSZXF1ZXN0RmFjdG9yeSxcblx0SXRlbUNhY2hlRmFjdG9yeSxcblx0SXRlbUVudHJ5RmFjdG9yeSxcblx0SXRlbVJlc291cmNlRmFjdG9yeSxcblx0TG9jYWxDYWNoZUZhY3RvcnksXG5cdE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFF1ZXJ5TWF0Y2hlckZhY3RvcnksXG5cdFF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0UmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnlcbn0gZnJvbSAnLi9mYWN0b3JpZXMnO1xuaW1wb3J0IHtcblx0QXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdEF1dGhJbnRlcmZhY2UsXG5cdEVycm9ySGFuZGxlckludGVyZmFjZSxcblx0TG9jYWxDYWNoZU1hbmFnZXJJbnRlcmZhY2UsXG5cdFByb21pc2VJbnRlcmZhY2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNsYXNzIFJtQ29yZSB7XG5cdHZlcnNpb246IHN0cmluZztcblx0bm9vcCA9IG5vb3A7XG5cblx0YXBpRm9ybWF0dGVyOiBBcGlGb3JtYXR0ZXI7XG5cdGtleVNlcnZpY2U6IEtleVNlcnZpY2U7XG5cdHF1ZXJ5U2VydmljZTogUXVlcnlTZXJ2aWNlO1xuXHRjb2x1bW5VdGlsOiBDb2x1bW5VdGlsO1xuXG5cdGFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeTogQXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5O1xuXG5cdGl0ZW1FbnRyeVNlcnZpY2U6IEl0ZW1FbnRyeVNlcnZpY2U7XG5cdGl0ZW1SZXNvdXJjZVNlcnZpY2U6IEl0ZW1SZXNvdXJjZVNlcnZpY2U7XG5cblx0aXRlbUFkbWluaXN0cmF0b3I6IEl0ZW1BZG1pbmlzdHJhdG9yO1xuXHRpdGVtUmVxdWVzdFNlcnZpY2U6IEl0ZW1SZXF1ZXN0U2VydmljZTtcblx0Y29sdW1uQ2FjaGU6IENvbHVtbkNhY2hlO1xuXHRjb2x1bW5IYW5kbGVyOiBDb2x1bW5IYW5kbGVyO1xuXG5cdGl0ZW1FbnRyeUZhY3Rvcnk6IEl0ZW1FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25FbnRyeUZhY3Rvcnk6IENvbGxlY3Rpb25FbnRyeUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25DYWNoZUZhY3Rvcnk6IENvbGxlY3Rpb25DYWNoZUZhY3Rvcnk7XG5cdGNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeTogQ29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5O1xuXG5cdGl0ZW1IYW5kbGVyOiBJdGVtSGFuZGxlcjtcblx0Y29sbGVjdGlvbkhhbmRsZXI6IENvbGxlY3Rpb25IYW5kbGVyO1xuXHRsb2NrU2VydmljZTogTG9ja1NlcnZpY2U7XG5cdGNvbGxlY3Rpb25FbnRyeVNlcnZpY2U6IENvbGxlY3Rpb25FbnRyeVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U6IENvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2U7XG5cdGNvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk6IENvbGxlY3Rpb25SZXNvdXJjZUZhY3Rvcnk7XG5cblx0cXVlcnlNYXRjaGVyRmFjdG9yeTogUXVlcnlNYXRjaGVyRmFjdG9yeTtcblx0aXRlbUNhY2hlRmFjdG9yeTogSXRlbUNhY2hlRmFjdG9yeTtcblx0cmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IFJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5O1xuXHRjaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5OiBDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5O1xuXHRjaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeTogQ2hhbmdlc1Byb2Nlc3NvckZhY3Rvcnk7XG5cdGNvbHVtbkV4cGFuc2lvbkZhY3Rvcnk6IENvbHVtbkV4cGFuc2lvbkZhY3Rvcnk7XG5cdGNvbHVtblNldEZhY3Rvcnk6IENvbHVtblNldEZhY3Rvcnk7XG5cdGNvbHVtbkluZm9GYWN0b3J5OiBDb2x1bW5JbmZvRmFjdG9yeTtcblx0Y3JlYXRlUmVxdWVzdEZhY3Rvcnk6IENyZWF0ZVJlcXVlc3RGYWN0b3J5O1xuXHRpdGVtUmVzb3VyY2VGYWN0b3J5OiBJdGVtUmVzb3VyY2VGYWN0b3J5O1xuXHRsb2NhbENhY2hlRmFjdG9yeTogTG9jYWxDYWNoZUZhY3Rvcnk7XG5cdG1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk6IE1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3Rvcnk7XG5cdHF1ZXJ5UGFyc2VyRmFjdG9yeTogUXVlcnlQYXJzZXJGYWN0b3J5O1xuXHRiYXRjaFN0YXR1c0ZhY3Rvcnk6IEJhdGNoU3RhdHVzRmFjdG9yeTtcblx0c29ja2V0TWVzc2FnZUhhbmRsZXI6IFNvY2tldE1lc3NhZ2VIYW5kbGVyO1xuXG5cdGFwaVJlcXVlc3RTZXJ2aWNlOiBBcGlSZXF1ZXN0U2VydmljZTtcblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0ZXh0ZXJuYWxBcGlSZXF1ZXN0U2VydmljZTogQXBpUmVxdWVzdFNlcnZpY2VJbnRlcmZhY2UsXG5cdFx0bG9jYWxDYWNoZU1hbmFnZXI6IExvY2FsQ2FjaGVNYW5hZ2VySW50ZXJmYWNlLFxuXHRcdGF1dGhJbnRlcmZhY2U6IEF1dGhJbnRlcmZhY2UsXG5cdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlOiBFcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0cHJvbWlzZUludGVyZmFjZTogUHJvbWlzZUludGVyZmFjZVxuXHQpIHtcblx0XHR0aGlzLnZlcnNpb24gPSAnMS4xLjE1JztcblxuXHRcdHRoaXMuYXBpRm9ybWF0dGVyID0gbmV3IEFwaUZvcm1hdHRlcigpO1xuXHRcdHRoaXMua2V5U2VydmljZSA9IG5ldyBLZXlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5xdWVyeVNlcnZpY2UgPSBuZXcgUXVlcnlTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2x1bW5VdGlsID0gbmV3IENvbHVtblV0aWwoKTtcblxuXHRcdHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IEFwaVJlc3BvbnNlUHJvY2Vzc29yRmFjdG9yeSh0aGlzLmFwaUZvcm1hdHRlcik7XG5cblx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlID0gbmV3IEFwaVJlcXVlc3RTZXJ2aWNlKGV4dGVybmFsQXBpUmVxdWVzdFNlcnZpY2UsIHRoaXMuYXBpUmVzcG9uc2VQcm9jZXNzb3JGYWN0b3J5KTtcblxuXHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSA9IG5ldyBJdGVtRW50cnlTZXJ2aWNlKHRoaXMua2V5U2VydmljZSk7XG5cdFx0dGhpcy5pdGVtUmVzb3VyY2VTZXJ2aWNlID0gbmV3IEl0ZW1SZXNvdXJjZVNlcnZpY2UoKTtcblxuXHRcdHRoaXMubG9ja1NlcnZpY2UgPSBuZXcgTG9ja1NlcnZpY2UoXG5cdFx0XHR0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5ID0gbmV3IFF1ZXJ5TWF0Y2hlckZhY3RvcnkodGhpcy5hcGlGb3JtYXR0ZXIpO1xuXHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSA9IG5ldyBJdGVtQ2FjaGVGYWN0b3J5KHRoaXMucXVlcnlNYXRjaGVyRmFjdG9yeSk7XG5cdFx0dGhpcy5iYXRjaFN0YXR1c0ZhY3RvcnkgPSBuZXcgQmF0Y2hTdGF0dXNGYWN0b3J5KHByb21pc2VJbnRlcmZhY2UpO1xuXG5cdFx0dGhpcy5jb2x1bW5DYWNoZSA9IG5ldyBDb2x1bW5DYWNoZSh0aGlzLmNvbHVtblV0aWwpO1xuXHRcdHRoaXMuY29sdW1uSGFuZGxlciA9IG5ldyBDb2x1bW5IYW5kbGVyKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGVycm9ySGFuZGxlckludGVyZmFjZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbHVtbkNhY2hlLFxuXHRcdFx0dGhpcy5jb2x1bW5VdGlsXG5cdFx0KTtcblxuXHRcdHRoaXMuY29sdW1uSW5mb0ZhY3RvcnkgPSBuZXcgQ29sdW1uSW5mb0ZhY3RvcnkoKTtcblx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnkgPSBuZXcgQ29sdW1uU2V0RmFjdG9yeSh0aGlzLmNvbHVtbkhhbmRsZXIsIHRoaXMuY29sdW1uVXRpbCwgdGhpcy5jb2x1bW5JbmZvRmFjdG9yeSk7XG5cdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5ID0gbmV3IENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5TZXRGYWN0b3J5LCB0aGlzLmNvbHVtblV0aWwpO1xuXG5cdFx0dGhpcy5pdGVtRW50cnlGYWN0b3J5ID0gbmV3IEl0ZW1FbnRyeUZhY3RvcnkoXG5cdFx0XHRhdXRoSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLml0ZW1IYW5kbGVyID0gbmV3IEl0ZW1IYW5kbGVyKHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLmJhdGNoU3RhdHVzRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbHVtblV0aWxcblx0XHQpO1xuXHRcdHRoaXMuaXRlbVJlcXVlc3RTZXJ2aWNlID0gbmV3IEl0ZW1SZXF1ZXN0U2VydmljZSh0aGlzLmFwaVJlcXVlc3RTZXJ2aWNlLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtSGFuZGxlcixcblx0XHRcdHRoaXMuY29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sdW1uU2V0RmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUVudHJ5RmFjdG9yeSxcblx0XHRcdHRoaXMucXVlcnlTZXJ2aWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cblx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSA9IG5ldyBRdWVyeVBhcnNlckZhY3RvcnkoKTtcblx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UgPSBuZXcgQ29sbGVjdGlvbkVudHJ5U2VydmljZSh0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSwgdGhpcy5xdWVyeVNlcnZpY2UpO1xuXHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlU2VydmljZSA9IG5ldyBDb2xsZWN0aW9uUmVzb3VyY2VTZXJ2aWNlKCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25FbnRyeUZhY3RvcnkoXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1SZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25DYWNoZUZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25NYXRjaGVyRmFjdG9yeSA9IG5ldyBDb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnkodGhpcy5xdWVyeU1hdGNoZXJGYWN0b3J5KTtcblx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyID0gbmV3IENvbGxlY3Rpb25IYW5kbGVyKFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbHVtbkhhbmRsZXIsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25DYWNoZUZhY3RvcnksXG5cdFx0XHR0aGlzLnF1ZXJ5UGFyc2VyRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbkVudHJ5U2VydmljZSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLnF1ZXJ5U2VydmljZSxcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5XG5cdFx0KTtcblxuXHRcdHRoaXMucmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkgPSBuZXcgUmVxdWVzdENvbHVtbkV4cGFuc2lvbkZhY3RvcnkodGhpcy5jb2x1bW5VdGlsKTtcblx0XHR0aGlzLmNyZWF0ZVJlcXVlc3RGYWN0b3J5ID0gbmV3IENyZWF0ZVJlcXVlc3RGYWN0b3J5KFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY29sbGVjdGlvbk1hdGNoZXJGYWN0b3J5LFxuXHRcdFx0dGhpcy5rZXlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeVxuXHRcdCk7XG5cdFx0dGhpcy5jaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5ID0gbmV3IENoYW5nZXNDb21waWxhdGlvbkZhY3RvcnkodGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5KTtcblx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5ID0gbmV3IENoYW5nZXNQcm9jZXNzb3JGYWN0b3J5KHRoaXMuYXBpUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uSGFuZGxlcixcblx0XHRcdHRoaXMuY2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuY3JlYXRlUmVxdWVzdEZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbHVtbkV4cGFuc2lvbkZhY3RvcnksXG5cdFx0XHR0aGlzLnJlcXVlc3RDb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uRW50cnlTZXJ2aWNlLFxuXHRcdFx0dGhpcy5hcGlGb3JtYXR0ZXIsXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlXG5cdFx0KTtcblx0XHR0aGlzLml0ZW1SZXNvdXJjZUZhY3RvcnkgPSBuZXcgSXRlbVJlc291cmNlRmFjdG9yeSh0aGlzLml0ZW1SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHR0aGlzLmFwaUZvcm1hdHRlcixcblx0XHRcdHRoaXMubG9ja1NlcnZpY2UsXG5cdFx0XHR0aGlzLmNoYW5nZXNQcm9jZXNzb3JGYWN0b3J5LmNvbnN0cnVjdCgpLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlLFxuXHRcdFx0cHJvbWlzZUludGVyZmFjZVxuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5ID0gbmV3IENvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMua2V5U2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5sb2NhbENhY2hlRmFjdG9yeSA9IG5ldyBMb2NhbENhY2hlRmFjdG9yeShlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmxvY2tTZXJ2aWNlLFxuXHRcdFx0dGhpcy5pdGVtUmVzb3VyY2VGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uQ2FjaGVGYWN0b3J5LFxuXHRcdFx0dGhpcy5jaGFuZ2VzUHJvY2Vzc29yRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbUNhY2hlRmFjdG9yeSxcblx0XHRcdHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSxcblx0XHRcdHRoaXMuaXRlbVJlc291cmNlU2VydmljZSxcblx0XHRcdHByb21pc2VJbnRlcmZhY2Vcblx0XHQpO1xuXHRcdHRoaXMubW9kdWxlQ2hhbmdlc0NvbXBpbGF0aW9uRmFjdG9yeSA9IG5ldyBNb2R1bGVDaGFuZ2VzQ29tcGlsYXRpb25GYWN0b3J5KCk7XG5cblx0XHR0aGlzLml0ZW1BZG1pbmlzdHJhdG9yID0gbmV3IEl0ZW1BZG1pbmlzdHJhdG9yKFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdGF1dGhJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2xsZWN0aW9uTWF0Y2hlckZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25SZXNvdXJjZVNlcnZpY2UsXG5cdFx0XHR0aGlzLmNvbHVtblNldEZhY3RvcnksXG5cdFx0XHRlcnJvckhhbmRsZXJJbnRlcmZhY2UsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeVNlcnZpY2UsXG5cdFx0XHR0aGlzLml0ZW1IYW5kbGVyLFxuXHRcdFx0dGhpcy5pdGVtUmVxdWVzdFNlcnZpY2UsXG5cdFx0XHR0aGlzLmtleVNlcnZpY2UsXG5cdFx0XHR0aGlzLmxvY2FsQ2FjaGVGYWN0b3J5LFxuXHRcdFx0bG9jYWxDYWNoZU1hbmFnZXIsXG5cdFx0XHR0aGlzLm1vZHVsZUNoYW5nZXNDb21waWxhdGlvbkZhY3RvcnksXG5cdFx0XHRwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5xdWVyeVNlcnZpY2Vcblx0XHQpO1xuXG5cdFx0dGhpcy5zb2NrZXRNZXNzYWdlSGFuZGxlciA9IG5ldyBTb2NrZXRNZXNzYWdlSGFuZGxlcihwcm9taXNlSW50ZXJmYWNlLFxuXHRcdFx0dGhpcy5hcGlSZXF1ZXN0U2VydmljZSxcblx0XHRcdHRoaXMuaXRlbUhhbmRsZXIsXG5cdFx0XHR0aGlzLml0ZW1FbnRyeUZhY3RvcnksXG5cdFx0XHR0aGlzLmNvbGxlY3Rpb25IYW5kbGVyLFxuXHRcdFx0dGhpcy5jb2x1bW5TZXRGYWN0b3J5LFxuXHRcdFx0dGhpcy5jb2x1bW5FeHBhbnNpb25GYWN0b3J5LFxuXHRcdFx0dGhpcy5yZXF1ZXN0Q29sdW1uRXhwYW5zaW9uRmFjdG9yeSxcblx0XHRcdHRoaXMuYXBpRm9ybWF0dGVyLFxuXHRcdFx0ZXJyb3JIYW5kbGVySW50ZXJmYWNlXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCAoKSB7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlO1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9JdGVtVHlwZXNDb2xsZWN0aW9uJztcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|