tnx-shared 5.3.325 → 5.3.327
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/bundles/tnx-shared.umd.js +21 -7
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-base.d.ts +2 -2
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +5 -3
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +3 -2
- package/esm2015/services/canbo-hoso.service.js +7 -5
- package/esm2015/services/common.service.js +7 -1
- package/esm2015/tnx-shared.module.js +2 -1
- package/fesm2015/tnx-shared.js +20 -7
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/canbo-hoso.service.d.ts.map +1 -1
- package/services/common.service.d.ts +1 -0
- package/services/common.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts.map +1 -1
|
@@ -1354,6 +1354,12 @@ export class CommonService {
|
|
|
1354
1354
|
}
|
|
1355
1355
|
return str;
|
|
1356
1356
|
}
|
|
1357
|
+
transformLocalDate(value, format = 'dd/MM/yyyy') {
|
|
1358
|
+
if (!value)
|
|
1359
|
+
return '';
|
|
1360
|
+
const datePipe = new DatePipe('vi-VN');
|
|
1361
|
+
return datePipe.transform(value, format);
|
|
1362
|
+
}
|
|
1357
1363
|
}
|
|
1358
1364
|
CommonService.ɵprov = i0.ɵɵdefineInjectable({ factory: function CommonService_Factory() { return new CommonService(i0.ɵɵinject(i1.ModuleConfigService)); }, token: CommonService, providedIn: "root" });
|
|
1359
1365
|
CommonService.decorators = [
|
|
@@ -1364,4 +1370,4 @@ CommonService.decorators = [
|
|
|
1364
1370
|
CommonService.ctorParameters = () => [
|
|
1365
1371
|
{ type: ModuleConfigService }
|
|
1366
1372
|
];
|
|
1367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1DQUFtQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBRzdCLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBRXJELHFCQUFxQjtBQUNyQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFdkIsSUFBSyxlQUtKO0FBTEQsV0FBSyxlQUFlO0lBQ2hCLHlEQUFNLENBQUE7SUFDTiwyREFBTyxDQUFBO0lBQ1AscURBQUksQ0FBQTtJQUNKLGlFQUFVLENBQUE7QUFDZCxDQUFDLEVBTEksZUFBZSxLQUFmLGVBQWUsUUFLbkI7QUFLRCxNQUFNLE9BQU8sYUFBYTtJQWtDdEIs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Q29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICdmYXN0LXNhZmUtc3RyaW5naWZ5JztcbmltcG9ydCBtb21lbnRfIGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IE9wZXJhdG9yLCBUZXh0Q29udHJvbFNjaGVtYSB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyLCBTb3J0LCBTdHJpbmdDb21wYXJlT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4vYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XG5cbi8vIGZpeCBmb3IgYnVpbGQgcHJvZFxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuZW51bSBNZW51T3JpZW50YXRpb24ge1xuICAgIFNUQVRJQyxcbiAgICBPVkVSTEFZLFxuICAgIFNMSU0sXG4gICAgSE9SSVpPTlRBTCxcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XG4gICAgbGF5b3V0TW9kZTogTWVudU9yaWVudGF0aW9uID0gTWVudU9yaWVudGF0aW9uLlNUQVRJQztcblxuICAgIGRhcmtNZW51ID0gZmFsc2U7XG5cbiAgICBwcm9maWxlTW9kZSA9ICd0b3AnO1xuXG4gICAgcm90YXRlTWVudUJ1dHRvbjogYm9vbGVhbjtcblxuICAgIHRvcGJhck1lbnVBY3RpdmU6IGJvb2xlYW47XG5cbiAgICBvdmVybGF5TWVudUFjdGl2ZTogYm9vbGVhbjtcblxuICAgIHN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlOiBib29sZWFuO1xuXG4gICAgbWVudUNsaWNrOiBib29sZWFuO1xuXG4gICAgdG9wYmFySXRlbUNsaWNrOiBib29sZWFuO1xuXG4gICAgYWN0aXZlVG9wYmFySXRlbTogYW55O1xuXG4gICAgcmVzZXRNZW51OiBib29sZWFuO1xuXG4gICAgY3VycmVudEFjdGl2ZUl0ZW06IGFueTtcblxuICAgIG1lbnVIb3ZlckFjdGl2ZTogYm9vbGVhbjtcbiAgICB0ZXN0OiBib29sZWFuO1xuXG4gICAgdG5QcmVmaXhMb2cgPSAnLS0tLS0tLS0tPlROX0xPR19DT05TT0xFLS0tLS0tLT4nO1xuXG4gICAgU1RPUkFHRV9LRVkgPSAnQ0xJUEJPQVJEX0NPTlRFTlQnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSkge1xuICAgIH1cblxuICAgIGd1aWQoKSB7XG4gICAgICAgIHJldHVybiB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICByYW5kb21TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmd1aWQoKTtcbiAgICB9XG5cbiAgICByYW5kb21TdHJpbmdXaXRoTm90RGVsaW1pdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCkucmVwbGFjZSgnLScsICcnKTtcbiAgICB9XG5cbiAgICBzdHJpbmdGb3JtYXQoaW5wdXRTdHJpbmc6IHN0cmluZywgLi4uYXJncykge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLnJlcGxhY2UoYHske2luZGV4fX1gLCBhcmdzW2luZGV4XSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5wdXRTdHJpbmc7XG4gICAgfVxuXG4gICAgaHRtbEVuY29kZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhzdHIpXG4gICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyZxdW90OycpO1xuICAgIH1cblxuICAgIC8vIEzhuqV5IHbhu4EgZ2nDoSB0cuG7iyB0aGVvIHBhdGggJydcbiAgICBnZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW3BhdGhzW2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBvYmogPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8ge3NlYXJjaDoge2tleSA6ICduYW1uaCd9fSAuID0+IHNlYXJjaC5rZXlcbiAgICBzZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gb2JqO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGZpZWxkcy5sZW5ndGg7IGkgPCBuICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgaWYgKGkgPT09IG4gLSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGRdID09PSAndW5kZWZpbmVkJyB8fCAhXy5pc09iamVjdChyZXN1bHRbZmllbGRdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbZmllbGRdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtmaWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGREYXlzKGRhdGU6IERhdGUgfCBzdHJpbmcsIGRheXM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgY2xvbmVkLnNldERhdGUoY2xvbmVkLmdldERhdGUoKSArIGRheXMpO1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGFkZEhvdXJzKGRhdGU6IERhdGUsIGhvdXJzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIGNsb25lZC5zZXRUaW1lKGNsb25lZC5nZXRUaW1lKCkgKyAoaG91cnMgKiA2MCAqIDYwICogMTAwMCkpO1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGFkZFNlY29uZHMoZGF0ZTogRGF0ZSwgc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICBjbG9uZWQuc2V0VGltZShjbG9uZWQuZ2V0VGltZSgpICsgKHNlY29uZHMgKiAxMDAwKSk7XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuXG4gICAgYWRkV29ya0RheXMoZGF0ZSwgZGF5cykge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgd2hpbGUgKGRheXMgPiAwKSB7XG4gICAgICAgICAgICBjbG9uZWQuc2V0RGF0ZShjbG9uZWQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICBpZiAoY2xvbmVkLmdldERheSgpICE9PSAwICYmIGNsb25lZC5nZXREYXkoKSAhPT0gNikge1xuICAgICAgICAgICAgICAgIGRheXMgLT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGV4cG9ydFRvQ1NWKGRhdGFzOiBhbnlbXSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGMuaGVhZGVyICsgJywnO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBkYXRhcy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyByb3dTdHJpbmcgKz0gKHR5cGVvZiBkW2MuZmllbGRdKS50b1N0cmluZygpICsgJywnO1xuICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3RlcihkbS5uYW1lLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3Rlcihjb2xWYWwudG9TdHJpbmcoKSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlU3BlY2lhbENoYXJhY3Rlcih2YWw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdmFsLnJlcGxhY2UoJywnLCAnLicpXG4gICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpO1xuICAgIH1cblxuICAgIGV4cG9ydFRvQ1NWMihkYXRhczogYW55W10sIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjLmhlYWRlciArICcsJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcm93U3RyaW5nICs9ICh0eXBlb2YgZFtjLmZpZWxkXSkudG9TdHJpbmcoKSArICcsJztcbiAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoZG0ubmFtZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoY29sVmFsLnRvU3RyaW5nKCkpICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcbiAgICAgICAgbGluay5jbGljaygpO1xuICAgIH1cblxuICAgIGV4cG9ydFRvQ1NWR3JvdXAoZGF0YXM6IGFueSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGNvbHVtbnNbaV0uaGVhZGVyICsgJywnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoc3ViRGF0YSkgPT4ge1xuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHN1YkRhdGEuZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChoZWFkZXJTdHJpbmcpO1xuXG4gICAgICAgICAgICBzdWJEYXRhLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3RlcihkbS5uYW1lLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGNvbFZhbC50b1N0cmluZygpKSArICcsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaCgnXFxuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcbiAgICAgICAgbGV0IGNzdiA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXG4gICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9TZWxlY3RJdGVtKFxuICAgICAgICBkYXRhOiBhbnksXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyxcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnJyxcbiAgICAgICAgdGV4dEZpZWxkMjogc3RyaW5nID0gJycsXG4gICAgICAgIHByZWZpeFRleHRGaWVsZDIgPSAnJyxcbiAgICAgICAgYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZSxcbiAgICApOiBTZWxlY3RJdGVtW10ge1xuICAgICAgICBpZiAoIXRleHRGaWVsZCB8fCB0ZXh0RmllbGQgPT09ICcnKSB7XG4gICAgICAgICAgICB0ZXh0RmllbGQgPSB2YWx1ZUZpZWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGVtcEFycjogU2VsZWN0SXRlbVtdID0gW107XG5cbiAgICAgICAgaWYgKGFsbG93TnVsbCkge1xuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHsgbGFiZWw6ICcnLCB2YWx1ZTogJycgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkMixcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4VGV4dEZpZWxkMixcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3ZhbHVlRmllbGRdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBBcnI7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWwoXG4gICAgICAgIGl0ZW06IGFueSxcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcsXG4gICAgICAgIHRleHRGaWVsZDI6IHN0cmluZyxcbiAgICAgICAgcHJlZml4VGV4dEZpZWxkMjogc3RyaW5nLFxuICAgICkge1xuICAgICAgICBpZiAodGV4dEZpZWxkMikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2l0ZW1bdGV4dEZpZWxkXX0gLSAke3ByZWZpeFRleHRGaWVsZDJ9ICR7aXRlbVt0ZXh0RmllbGQyXX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGV4dEZpZWxkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnZlcnRUb1NlbGVjdEl0ZW1NYXN0ZXJEYXRhKFxuICAgICAgICBkYXRhOiBhbnksXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyA9ICdpZCcsXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nID0gJ25hbWUnLFxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb1NlbGVjdEl0ZW0oZGF0YSwgdmFsdWVGaWVsZCwgdGV4dEZpZWxkKTtcbiAgICB9XG5cbiAgICBnZXRUcmFjZUlkID0gKCkgPT4gc2Vzc2lvblN0b3JhZ2U/LmdldEl0ZW0oJ3RyYWNlSWQnKSA/PyAnJztcblxuICAgIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBsZXQgdHJhY2VJZDogc3RyaW5nID0gbnVsbDtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgc2Vzc2lvblN0b3JhZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgICB0cmFjZUlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndHJhY2VJZCcpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ8OzIGzhu5dpIOG7nyB1cmw6ICR7ZXJyb3IudXJsfSwgc3RhdHVzQ29kZTogJHtlcnJvci5zdGF0dXN9ID09PT0+IFRyYWNlSWQgY2hvIGVsYXN0aWM6ICR7dHJhY2VJZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcmNlSWY0MDEgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmlzRm9yY2VMb2dvdXRJZjQwMTtcbiAgICAgICAgICAgIGlmIChmb3JjZUlmNDAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2F1dGhlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aGVuU2VydmljZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgX25vdGlmaWVyU2VydmljZSA9IGluamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIF9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0jhu4cgdGjhu5FuZyBz4bq9IHThu7EgxJHEg25nIHh14bqldCBzYXUgNXMgxJHhu4MgY+G6rXAgbmjhuq1wIHBoacOqbiBi4bqjbiBt4bubaScsICdUaMO0bmcgYsOhbycpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc2xlZXAgYmVmb3JlIGxvZ291dCcpO1xuICAgICAgICAgICAgICAgICAgICBfYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoPFJlc3BvbnNlUmVzdWx0PntcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEuIEjDo3kgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QhISEnLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgdG90YWxSZWNvcmQ6IDAsXG4gICAgICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3JDaGVja0V4aXN0OiBudWxsLFxuICAgICAgICAgICAgZXJyb3JDb250cm9sSWQ6IG51bGwsXG4gICAgICAgICAgICBlcnJvckZvcm1JZDogbnVsbCxcbiAgICAgICAgICAgIHRyYWNlSWQ6IHRyYWNlSWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVG9wYmFySXRlbUNsaWNrKGV2ZW50LCBpdGVtKSB7XG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVUb3BiYXJJdGVtID09PSBpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgYXV0b09wZW5Ub3BiYXJJdGVtKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSAxO1xuICAgIH1cblxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLkhPUklaT05UQUw7XG4gICAgfVxuXG4gICAgaXNTbGltKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uU0xJTTtcbiAgICB9XG5cbiAgICBoaWRlT3ZlcmxheU1lbnUoKSB7XG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTGF5b3V0Q2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy50b3BiYXJJdGVtQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5tZW51Q2xpY2spIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMuaXNTbGltKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0TWVudSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlNZW51QWN0aXZlIHx8IHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWVudUhvdmVyQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lbnVDbGljayA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uVG9wYmFyTWVudUJ1dHRvbkNsaWNrKGV2dCkge1xuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9ICF0aGlzLnRvcGJhck1lbnVBY3RpdmU7XG5cbiAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmF1dG9PcGVuVG9wYmFySXRlbSgpO1xuICAgIH1cblxuICAgIHNob3dUb3BiYXJNZW51KCkge1xuICAgICAgICBpZiAoIXRoaXMudG9wYmFyTWVudUFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1lbnVCdXR0b25DbGljayhldmVudCkge1xuICAgICAgICB0aGlzLm1lbnVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICF0aGlzLnJvdGF0ZU1lbnVCdXR0b247XG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gIXRoaXMub3ZlcmxheU1lbnVBY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9ICF0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0b2dnbGVMZWZ0TWVudShzaG93KSB7XG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gIXNob3c7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSBzaG93O1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhc2hvdztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlID0gc2hvdztcbiAgICAgICAgICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSBzaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gIXNob3c7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXNob3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1lbnVDbGljaygkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2V0TWVudSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlzVGFibGV0KCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICByZXR1cm4gd2lkdGggPD0gMTAyNCAmJiB3aWR0aCA+IDY0MDtcbiAgICB9XG5cbiAgICBpc0Rlc2t0b3AoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDEwMjQ7XG4gICAgfVxuXG4gICAgaXNNb2JpbGUoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA2NDA7XG4gICAgfVxuXG4gICAgaXNPdmVybGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWTtcbiAgICB9XG5cbiAgICBjb21iaW5lU2VydmljZUNvZGVBbmRTdWZmaXgoc2VydmljZUNvZGU6IHN0cmluZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LnN1ZmZpeFNlcnZpY2VDb2RlXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3NlcnZpY2VDb2RlfSR7dGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zdWZmaXhTZXJ2aWNlQ29kZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlcnZpY2VDb2RlO1xuICAgIH1cblxuICAgIGRlbGF5KG1zOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgfVxuXG4gICAgLyoqIEJlZ2luIGRpc2FibGUgZWRpdG9yIHRhYiAqL1xuICAgIHNldEF1dG9mb2N1c0ZpcnN0Q29udHJvbChpZEVsZW1lbnQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UmVmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmICh2aWV3UmVmICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHZpZXdSZWYucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQudHlwZSAhPSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXhhdGVhcmEgPSB2aWV3UmVmLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleGF0ZWFyYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4YXRlYXJhLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgZ2V0VGFiRGlzYWJsZWRIYW5kbGVyKCkge1xuICAgICAgICAvLyByZXR1cm4ge1xuICAgICAgICAvLyAgICAga2V5ICAgIDogOSxcbiAgICAgICAgLy8gICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbmV4dCA9IEpRdWVyeShkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbG9zZXN0KCdwLWVkaXRvcicpLnBhcmVudCgpLm5leHQoKS5maW5kKCc6dGFiYmFibGUsIDpmb2N1c2FibGUnKS5maXJzdCgpO1xuICAgICAgICAvLyAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIG5leHQuZm9jdXMoKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9O1xuICAgIH1cblxuICAgIGFkZFRhYkRpc2FibGVkSGFuZGxlcihldmVudCkge1xuICAgICAgICAvLyB0aGlzLmRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCk7XG4gICAgICAgIC8vIGV2ZW50LmVkaXRvci5rZXlib2FyZC5iaW5kaW5nc1s5XS5sZW5ndGggPSAwO1xuICAgICAgICAvLyBldmVudC5lZGl0b3Iua2V5Ym9hcmQuYmluZGluZ3NbOV0ucHVzaCh0aGlzLmdldFRhYkRpc2FibGVkSGFuZGxlcigpKTtcbiAgICB9XG5cbiAgICBkaXNhYmxlVGFiVG9vbGJhckVkaXRvcigpIHtcbiAgICAgICAgLy8galF1ZXJ5KFwiLnFsLXRvb2xiYXJcIikuZmluZChcIjpidXR0b25cIikuYXR0cihcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgfVxuXG4gICAgLyoqIEVuZCBkaXNhYmxlIGVkaXRvciB0YWIgKi9cblxuICAgIHByb2Nlc3NEYXRlSW5wdXQoaW5wdXRWYWx1ZSwgc2hvd1RpbWU6IGJvb2xlYW4sIHRpbWVPbmx5ID0gZmFsc2UsIHZpZXcgPSAnZGF0ZScpOiBEYXRlIHtcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzSW50ZWdlclN0cmluZyhpbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgaE5vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNvbnN0IG1Ob3cgPSBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNOb3cgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG5cbiAgICAgICAgICAgIGlmIChudW1iZXIgPiA5OSkge1xuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSAnRERNTVlZWVloaG1tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IG1vbWVudChpbnB1dFZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXkudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMTIwMTlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICtpbnB1dFZhbHVlLnN1YnN0cig0LCA0KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDExOVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gKygnMjAnICsgaW5wdXRWYWx1ZS5zdWJzdHIoNCwgMikudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEN1cnJlbnRZZWFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobnVtYmVyID4gLTEwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLmFkZERheXMoKG5ldyBEYXRlKCkpLnRvTG9jYWxlRGF0ZVN0cmluZygpLCBudW1iZXIpO1xuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xuICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XG4gICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC8tL2csICcvJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSAmJiAhdGltZU9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlVGltZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWSBoaDptbScsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGVUaW1lICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGVUaW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2lucHV0VmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZIGhoOm1tJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2aWV3ID09ICdtb250aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7aW5wdXRWYWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ01NL1lZWVknKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMCk7XG4gICAgICAgIHJldHVybiBkLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBnZXREYXRhc291cmNlUmFuZ2VZZWFyKHJhbmdlWWVhciA9IDUsIHByZXZpb3VzWWVhcj86IG51bWJlciwgbmV4dFllYXI/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZVllYXIgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGlzUHJldmlvdXNZZWFyID0gcHJldmlvdXNZZWFyICYmIHByZXZpb3VzWWVhciA+IDA7XG4gICAgICAgIGNvbnN0IGlzTmV4dFllYXIgPSBuZXh0WWVhciAmJiBuZXh0WWVhciA+IDA7XG4gICAgICAgIGlmIChpc1ByZXZpb3VzWWVhciB8fCBpc05leHRZZWFyKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c1llYXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5ZWFyID0gY3VycmVudFllYXIgLSBwcmV2aW91c1llYXI7IHllYXIgPCBjdXJyZW50WWVhcjsgeWVhcisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VZZWFyLnB1c2goeyBpZDogeWVhciwgdGVuOiB5ZWFyIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05leHRZZWFyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyOyB5ZWFyIDw9IGN1cnJlbnRZZWFyICsgbmV4dFllYXI7IHllYXIrKykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKHsgaWQ6IHllYXIsIHRlbjogeWVhciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKHsgaWQ6IGN1cnJlbnRZZWFyLCB0ZW46IGN1cnJlbnRZZWFyIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyIC0gcmFuZ2VZZWFyOyB5ZWFyIDw9IGN1cnJlbnRZZWFyOyB5ZWFyKyspIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiB5ZWFyLCB0ZW46IHllYXIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogY3VycmVudFllYXIgKyBpLCB0ZW46IGN1cnJlbnRZZWFyICsgaSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VZZWFyLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50WWVhcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRNb250aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRNb250aCgpO1xuICAgIH1cblxuICAgIGdldFJhbmdlWWVhckJldHdlZW4ocHJldmlvdXNZZWFyLCBuZXh0WWVhcikge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZVllYXIgPSBbXTtcbiAgICAgICAgaWYgKG5leHRZZWFyID49IHByZXZpb3VzWWVhcikge1xuICAgICAgICAgICAgY29uc3QgdG1wID0gWy4uLkFycmF5KG5leHRZZWFyIC0gcHJldmlvdXNZZWFyICsgMSkua2V5cygpXS5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IHggKyBwcmV2aW91c1llYXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHllYXIsXG4gICAgICAgICAgICAgICAgICAgIHRlbjogeWVhclxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGFTb3VyY2VZZWFyID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhU291cmNlWWVhci5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RHluYW1pY0Zvcm1JZChzZXJ2aWNlLCBlbnRpdHksIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7c2VydmljZX1fJHtlbnRpdHl9XyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RHluYW1pY0Zvcm1JZChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGBERUZBVUxUXyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBjbG9uZU9iamVjdChvYmo6IGFueSkge1xuICAgICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNldFByb3BlcnR5KHByb3AsIHZhbCwgbW9kZWwpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lT2JqZWN0KG1vZGVsKTtcbiAgICAgICAgaWYgKGNsb25lKSB7XG4gICAgICAgICAgICBjbG9uZVtwcm9wXSA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzdGFuZGFyZGl6ZWRKc29uKGlucHV0SnNvbjogc3RyaW5nKSB7XG4gICAgICAgIGxldCBkYXRhID0gaW5wdXRKc29uLnJlcGxhY2UoL09iamVjdElkXFwoKC4qPylcXCkvZ20sICckMScpO1xuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9JU09EYXRlXFwoKC4qPylcXCkvZ20sICckMScpO1xuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9OdW1iZXJMb25nXFwoKC4qPylcXCkvZ20sICckMScpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHRyaWdnZXJSZXNpemVXaW5kb3coKSB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xuICAgIH1cblxuICAgIGF1dG9BbGlnbkRpYWxvZyhkaWFsb2c6IERpYWxvZykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlclJlc2l6ZVdpbmRvdygpLCAyMDApO1xuICAgIH1cblxuICAgIG9iakhhc051bGwob2JqKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9ialtrZXldICE9IG51bGwgJiYgb2JqW2tleV0gIT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhcnJheUhhc0NoYW5nZWQob2xkQXJyYXksIG5ld0FycmF5KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpLCBpdGVtLCBqLCBsZW47XG4gICAgICAgIGlmICgoIW9sZEFycmF5ICYmIG5ld0FycmF5KSB8fCAob2xkQXJyYXkgJiYgIW5ld0FycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkQXJyYXkpID09PSBKU09OLnN0cmluZ2lmeShuZXdBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IGogPSAwLCBsZW4gPSBuZXdBcnJheS5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcbiAgICAgICAgICAgIGl0ZW0gPSBuZXdBcnJheVtpXTtcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShpdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkob2xkQXJyYXlbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeVBhcnNlRXh0cmFjdERhdGUoZGF0ZVZhbHVlLCBmb3JtYXQpIHtcbiAgICAgICAgY29uc3QgZGF5ID0gbW9tZW50KGRhdGVWYWx1ZSwgZm9ybWF0KTtcbiAgICAgICAgaWYgKGRheSkge1xuICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFZhbHVlRnJvbVRhc2soa2V5VmFsdWUsIGN1cnJlbnRWaWV3LCBzdGVwTWV0YWRhdGEpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGlmIChjdXJyZW50Vmlldy5rZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZpZXcua2V5VmFsdWVzKS5maW5kKFxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSA9PT0ga2V5VmFsdWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRhc2tLZXlWYWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE1ldGFkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJFeHRlbmREYXRhID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICBzdGVwTWV0YWRhdGEuZmluZCgoeCkgPT4geC5rZXkgPT09ICdleHRlbmREYXRhJykudmFsdWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgdGFza0tleVZhbHVlID0gYXJyRXh0ZW5kRGF0YS5maW5kKFxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSAmJiB4LmtleS50b0xvd2VyQ2FzZSgpID09PSBrZXlWYWx1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGFza0tleVZhbHVlICE9PSBudWxsICYmIHRhc2tLZXlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdXBwZXJGaXJzdExldHRlcihpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQgPT0gJycgfHwgaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgICAgICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KCcgJyk7XG5cbiAgICAgICAgd29yZHMuZm9yRWFjaCgod29yZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHdvcmQudHJpbSgpICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyaW5nKDEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmQudG9VcHBlckNhc2UoKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXBsYWNlQWxsKGlucHV0U3RyLCBzZWFyY2gsIHJlcGxhY2VtZW50KSB7XG4gICAgICAgIGlmIChpbnB1dFN0ciA9PT0gbnVsbCB8fCBpbnB1dFN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRTdHI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0U3RyLnNwbGl0KHNlYXJjaCkuam9pbihyZXBsYWNlbWVudCk7XG4gICAgfVxuXG4gICAgaXNJbWFnZShmaWxlTmFtZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC9cXC4oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaS50ZXN0KGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGNyZWF0ZUlmcmFtZSh1cmwpIHtcbiAgICAgICAgY29uc3QgaWZyYW1lID0gYDxpZnJhbWUgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgd2lkdGg9XCIwXCIgaGVpZ2h0PVwiMFwiIHNyYz1cIiR7dXJsfVwiPjwvaWZyYW1lPmA7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBpZnJhbWUpO1xuICAgIH1cblxuICAgIGlzSW50ZWdlclN0cmluZyhzdHI6IHN0cmluZykge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChzdHIuaW5kZXhPZignMCcpID09IDApIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ciA9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbiA9IE1hdGguZmxvb3IoTnVtYmVyKHN0cikpO1xuICAgICAgICByZXR1cm4gbiAhPT0gSW5maW5pdHkgJiYgU3RyaW5nKG4pID09PSBzdHI7XG4gICAgfVxuXG4gICAgaGFzQW55TWFzaygpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLWRpYWxvZy1tYXNrXCJdJylcbiAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLXNpZGViYXItbWFza1wiXScpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2FmZVN0cmluZ2lmeShkYXRhKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzdHJpbmdpZnkuc3RhYmxlU3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBjb21wYXJlU3RyaW5nKHZhbHVlMSwgdmFsdWUyKSB7XG4gICAgICAgIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wYXJlRGF0ZShkYXRlMSwgZGF0ZTIpIHtcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRhdGUxID0gdGhpcy5wYXJzZURhdGUoZGF0ZTEpO1xuICAgICAgICBkYXRlMiA9IHRoaXMucGFyc2VEYXRlKGRhdGUyKTtcbiAgICAgICAgaWYgKGRhdGUxLmdldFRpbWUoKSA8IGRhdGUyLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGUxLmdldFRpbWUoKSA9PSBkYXRlMi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaWZmRGF0ZShkYXRlMTogYW55LCBkYXRlMjogYW55KTogbnVtYmVyIHtcbiAgICAgICAgLy8gZDEgPCBkMiB0aMOsIGLhurFuZyA9IC0xXG4gICAgICAgIGNvbnN0IGQxID0gbW9tZW50KGRhdGUxKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgY29uc3QgZDIgPSBtb21lbnQoZGF0ZTIpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICBpZiAoZDEgPT0gZDIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkMSA+IGQyKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGRpZmZMb2NhbERhdGUoZGF0ZTE6IERhdGUgfCBzdHJpbmcsIGRhdGUyOiBEYXRlIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgLy8gZDEgPCBkMiB0aMOsIGLhurFuZyA9IC0xXG4gICAgICAgIGNvbnN0IGxvY2FsRGF0ZTEgPSAobmV3IERhdGUoZGF0ZTEpKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgY29uc3QgbG9jYWxEYXRlMiA9IChuZXcgRGF0ZShkYXRlMikpLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICByZXR1cm4gdGhpcy5kaWZmRGF0ZShsb2NhbERhdGUxLCBsb2NhbERhdGUyKTtcbiAgICB9XG4gICAgY29tcGFyZVdpdGhOb3coZGF0ZTEpIHtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZShkYXRlMSwgY3VycmVudERhdGUpO1xuICAgIH1cblxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBhbnkpIHtcbiAgICAgICAgaWYgKGRhdGVTdHIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZGF0ZVN0ciB8fCBkYXRlU3RyID09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVN0cik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhc3luY0ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9yZGVyQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBfLnNvcnRCeShvYmosIHByb3ApO1xuICAgIH1cblxuICAgIGdyb3VwQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBfLmdyb3VwQnkob2JqLCBwcm9wKTtcbiAgICB9XG5cbiAgICBkaXN0aW5jdChhcnJheTogbnVtYmVyW10pIHtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3NbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFnc1thcnJheVtpXV0gPSB0cnVlO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgZGlzdGluY3RBcnJheShhcnJheTogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4KTtcbiAgICB9XG5cbiAgICBkaXN0aW5jdEZpZWxkKGFycmF5OiBhbnlbXSwgZmllbGQpIHtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaV1bZmllbGRdO1xuICAgICAgICAgICAgaWYgKGZsYWdzW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3NbdmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGFkZERpc3RpbmN0KHNvdXJjZTogYW55W10sIGRlc3Q6IGFueVtdKSB7XG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgaWYgKCFkZXN0LnNvbWUocCA9PiBwID09IHMpKSB7XG4gICAgICAgICAgICAgICAgZGVzdC5wdXNoKHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgLy8gSMOgbSBkdXnhu4d0IG3huqNuZywgbOG6pXkgcmEgcGjhuqduIHThu60gdGjhu49hIG3Do24gW2Z1bmNdIHbDoCB4w7NhIHBo4bqnbiB04butIMSRw7MgxJFpIGto4buPaSBt4bqjbmdcbiAgICAvLyAgICAgIGNhbGxCYWNrOiBvcHRpb25hbCBwaOG7pWMgduG7pSBuaHUgY+G6p3Uga2jDoWMga2hpIGR1eeG7h3QgxJHhur9uIGl0ZW0gdGjhu49hIG3Do25cbiAgICBnZXRBbmRSZW1vdmUoc291cmNlOiBhbnlbXSwgZnVuYzogRnVuY3Rpb24sIGNhbGxCYWNrPzogRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKGNhbGxCYWNrID09IG51bGwpIHtcbiAgICAgICAgICAgIGNhbGxCYWNrID0gaSA9PiBpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZ1bmMoc291cmNlW2ldKSkge1xuICAgICAgICAgICAgICAgIGNhbGxCYWNrKHNvdXJjZVtpXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc291cmNlW2ldKTtcbiAgICAgICAgICAgICAgICBzb3VyY2Uuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lbnUoKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0cmluZy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBidWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIGd1aWRFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGtp4buDbSB0cmEgeGVtIGNodeG7l2kgY8OzIHBo4bqjaSBt4buZdCBndWlkIGtow6FjIHbhu5tpIGPhuqMgZ3VpZEVtcHR5XG4gICAgICogQGRhdGUgOC8xMS8yMDIyIC0gMTE6NTE6MzEgQU1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBndWlkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNWYWxpZEd1aWQoZ3VpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gL14oPzpcXHt7MCwxfSg/OlswLTlhLWZBLUZdKXs4fS0oPzpbMC05YS1mQS1GXSl7NH0tKD86WzAtOWEtZkEtRl0pezR9LSg/OlswLTlhLWZBLUZdKXs0fS0oPzpbMC05YS1mQS1GXSl7MTJ9XFx9ezAsMX0pJC9nO1xuICAgICAgICByZXR1cm4gZ3VpZCAhPSBudWxsICYmIGd1aWQgIT09ICcnICYmIGd1aWQgIT09IHRoaXMuZ3VpZEVtcHR5KCkgJiYgcmVnZXgudGVzdChndWlkKTtcbiAgICB9XG5cbiAgICBnZXREaXNwbGF5VmFsKHZhbCkge1xuICAgICAgICBpZiAodmFsID09IHVuZGVmaW5lZCB8fCB2YWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaW1lU3BhbjogVHLhuqMgduG7gSB0cnVlIG7hur91IGhhaSBraG/huqNuZyB0aOG7nWkgZ2lhbiAoc3RhcnQsIGVuZClcbiAgICAgKiB2w6AgKGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCkgZ2lhbyBuaGF1LiBLaMO0bmcgdMOtbmhcbiAgICAgKiBjaOG7iSBnaWFvIG3hu5l0IMSR4bqndSBtw7p0LlxuICAgICAqL1xuICAgIGhhc0ludGVyc2VjdGlvbihzdGFydCwgZW5kLCBjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQpIHtcbiAgICAgICAgcmV0dXJuIChzdGFydCA8IGNvbXBhcmVTdGFydCAmJiBjb21wYXJlU3RhcnQgPCBlbmQpXG4gICAgICAgICAgICB8fCAoc3RhcnQgPCBjb21wYXJlRW5kICYmIGNvbXBhcmVFbmQgPCBlbmQpXG4gICAgICAgICAgICB8fCAoY29tcGFyZVN0YXJ0IDw9IHN0YXJ0ICYmIGVuZCA8PSBjb21wYXJlRW5kKTtcbiAgICB9XG5cbiAgICBoYXNJbnRlcnNlY3Rpb25EYXRlKHN0YXJ0LCBlbmQsIGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCwgZGF0ZUZvcm1hdCA9IHRydWUpIHtcbiAgICAgICAgaWYgKCFkYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKHN0YXJ0KSA8IG5ldyBEYXRlKGNvbXBhcmVFbmQpICYmIG5ldyBEYXRlKGVuZCkgPiBuZXcgRGF0ZShjb21wYXJlU3RhcnQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydCA8IGNvbXBhcmVFbmQgJiYgZW5kID4gY29tcGFyZVN0YXJ0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T2Zmc2V0SW5NaW51dGUoc3RyRGF0ZTEsIHN0ckRhdGUyLCByb3VuZCA9IHRydWUpIHtcbiAgICAgICAgaWYgKCFzdHJEYXRlMSB8fCAhc3RyRGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZDEgPSBuZXcgRGF0ZShzdHJEYXRlMSk7XG4gICAgICAgIGNvbnN0IGQyID0gbmV3IERhdGUoc3RyRGF0ZTIpO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSAoZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpKSAvIDEwMDAgLyA2MDtcbiAgICAgICAgaWYgKHJvdW5kKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cblxuICAgIGZpbmRUZW1wbGF0ZUZyb21MaXN0KCRsaXN0OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj4sIHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAkbGlzdFxuICAgICAgICAgICAgPyAkbGlzdC5maW5kKCh0ZW1wbGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlLl9kZWYgJiYgdGVtcGxhdGUuX2RlZi5yZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9sZCB2ZXJzaW9uLCBub3QgaXZ5XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5fZGVmLnJlZmVyZW5jZXNbdGVtcGxhdGVOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lciAmJiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgaXZ5IHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXNbMF0gPT0gdGVtcGxhdGVOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgaXNTYW1lQXJyYXkoYXJyYXkxOiBhbnlbXSwgYXJyYXkyOiBhbnlbXSkge1xuICAgICAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPSBhcnJheTIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheTEpIHtcbiAgICAgICAgICAgIGlmICghYXJyYXkyLnNvbWUocSA9PiBxID09IGl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVsb2FkUGFnZSgpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkICYmIGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0VtcHR5QXJyYXlPck51bGwoYXJyYXk6IGFueVtdKSB7XG4gICAgICAgIGlmIChhcnJheSAhPT0gdW5kZWZpbmVkICYmIGFycmF5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgbG9naWMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc10sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHZhbHVlSXNGaWVsZDogYm9vbGVhbiA9IGZhbHNlLCBzdHJpbmdDb21wYXJlT3B0aW9uOiBTdHJpbmdDb21wYXJlT3B0aW9uID0gU3RyaW5nQ29tcGFyZU9wdGlvbi5Ob3JtYWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgICAgICAgIHZhbHVlSXNGaWVsZCxcbiAgICAgICAgICAgIHN0cmluZ0NvbXBhcmVPcHRpb24sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlclY0KGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJDbGlwYm9hcmRTdG9yYWdlKCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcbiAgICB9XG5cbiAgICBjb3B5QnlTdG9yYWdlKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVksIHZhbCk7XG4gICAgICAgIHRoaXMuY29weU1lc3NhZ2UodmFsKTtcbiAgICB9XG5cbiAgICBwYXN0ZUJ5U3RvcmFnZSgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xuICAgIH1cblxuICAgIGNvcHlNZXNzYWdlKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNlbEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIHNlbEJveC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIHNlbEJveC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgICBzZWxCb3guc3R5bGUudG9wID0gJzAnO1xuICAgICAgICBzZWxCb3guc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgc2VsQm94LnZhbHVlID0gdmFsO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbEJveCk7XG4gICAgICAgIHNlbEJveC5mb2N1cygpO1xuICAgICAgICBzZWxCb3guc2VsZWN0KCk7XG4gICAgICAgIHNlbEJveC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTk5OSk7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2VsQm94KTtcbiAgICB9XG5cbiAgICBuZXdCaW5kaW5nRmlsdGVyKGNvbHVtbjogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHNvdXJjZUZpZWxkOiBzdHJpbmcsIHN1YkZpZWxkPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4sXG4gICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgIHNvdXJjZUZpZWxkLFxuICAgICAgICAgICAgc3ViRmllbGQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1yciBTdGFycjogJHt0aGlzLnRuUHJlZml4TG9nfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuXG4gICAgbG9nSW5mbyhtc2cpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgTXJyIFN0YXJyOiAke3RoaXMudG5QcmVmaXhMb2d9YCk7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmluZm8obXNnKTtcbiAgICB9XG5cbiAgICBsb2dJbmZvU2ltcGxlKG1zZykge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7bXNnfWApO1xuICAgIH07XG5cbiAgICBtYXRjaFJ1bGVTaG9ydChzdHIsIHJ1bGUpIHtcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJykgKyAnJCcpLnRlc3Qoc3RyKTtcbiAgICB9XG5cbiAgICAvLyBFeHBsYW5hdGlvbiBjb2RlXG4gICAgbWF0Y2hSdWxlRXhwbChzdHIsIHJ1bGUpIHtcbiAgICAgICAgLy8gZm9yIHRoaXMgc29sdXRpb24gdG8gd29yayBvbiBhbnkgc3RyaW5nLCBubyBtYXR0ZXIgd2hhdCBjaGFyYWN0ZXJzIGl0IGhhc1xuICAgICAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblxuICAgICAgICAvLyBcIi5cIiAgPT4gRmluZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGV4Y2VwdCBuZXdsaW5lIG9yIGxpbmUgdGVybWluYXRvclxuICAgICAgICAvLyBcIi4qXCIgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHRoYXQgY29udGFpbnMgemVybyBvciBtb3JlIGNoYXJhY3RlcnNcbiAgICAgICAgcnVsZSA9IHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJyk7XG5cbiAgICAgICAgLy8gXCJeXCIgID0+IE1hdGNoZXMgYW55IHN0cmluZyB3aXRoIHRoZSBmb2xsb3dpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBpdFxuICAgICAgICAvLyBcIiRcIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhhdCBpbiBmcm9udCBhdCB0aGUgZW5kIG9mIGl0XG4gICAgICAgIHJ1bGUgPSAnXicgKyBydWxlICsgJyQnO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIG1hdGNoaW5nIHN0cmluZ1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocnVsZSk7XG5cbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHN0cik7XG4gICAgfVxuXG4gICAgZ2V0UmVzcG9uc2VSZXN1bHRGcm9tRXhjZXB0aW9uKGVycjogYW55KTogUmVzcG9uc2VSZXN1bHQge1xuICAgICAgICByZXR1cm4gPGFueT57XG4gICAgICAgICAgICBlcnJvcjogJ0VYQ0VQVElPTicsXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJyxcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBlcnJvckRldGFpbDogZXJyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlzU3RyaW5nKHZhbCkge1xuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWwgPT09IHZhbC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldFRpbWUodGltZVNwYW46IHN0cmluZykge1xuICAgICAgICBpZiAoIXRpbWVTcGFuKSByZXR1cm4gdGltZVNwYW47XG4gICAgICAgIGNvbnN0IGFyclRpbWVJbmZvID0gdGltZVNwYW4uc3BsaXQoJzonKTtcbiAgICAgICAgcmV0dXJuIGAke2FyclRpbWVJbmZvWzBdfToke2FyclRpbWVJbmZvWzFdfWA7XG4gICAgfVxuXG4gICAgYXBwZW5kU3RyaW5nV2l0aFNwYWNlKG9yaWdpbmFsOiBzdHJpbmcsIGFwcGVuZDogc3RyaW5nLCBjb25uZWN0b3I/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGAke29yaWdpbmFsfWAgKyAoYXBwZW5kICYmIGFwcGVuZCAhPT0gJycgPyAoYCAke2Nvbm5lY3RvciA/IGNvbm5lY3RvciA6ICcnfSBgKSArIGFwcGVuZCA6ICcnKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdEluZGV4PFQ+KGFycmF5OiBBcnJheTxUPiwgcHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIG9iajogVFtdKSA9PiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsLS0pIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbbF0sIGwsIGFycmF5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBnZXRTdGFydERheUVuZERheVdlZWsoZGF0ZSA9IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgY29uc3QgdG1wRGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9EYXRlU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBkYXRlRGlmZiA9IHRtcERhdGUuZ2V0RGF0ZSgpIC0gdG1wRGF0ZS5nZXREYXkoKSArICh0bXBEYXRlLmdldERheSgpID09IDAgPyAtNiA6IDEpO1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZSh0bXBEYXRlLnNldERhdGUoZGF0ZURpZmYpKTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKHRtcERhdGUuc2V0RGF0ZShkYXRlRGlmZiArIDYpKSk7XG4gICAgICAgIGlmIChzdGFydERhdGUuZ2V0RGF0ZSgpID4gZW5kRGF0ZS5nZXREYXRlKCkgJiYgc3RhcnREYXRlLmdldE1vbnRoKCkgPT0gZW5kRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICBlbmREYXRlLnNldE1vbnRoKGVuZERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc3RhcnREYXRlLCBlbmREYXRlXTtcbiAgICB9XG5cbiAgICBnZXRTdGFydERheUVuZERheUluTW9udGgobW9udGg/OiBudW1iZXIsIHllYXI/OiBudW1iZXIpIHtcbiAgICAgICAgbW9udGggPSBtb250aCA/PyB0aGlzLmdldEN1cnJlbnRNb250aCgpO1xuICAgICAgICB5ZWFyID0geWVhciA/PyB0aGlzLmdldEN1cnJlbnRZZWFyKCk7XG4gICAgICAgIHJldHVybiBbbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApXTtcbiAgICB9XG5cbiAgICBhZGRIdG1sQ29udGVudFdpdGhUYWdBcm91bmQobHN0VGFnOiBhbnksIGNsYXNzTmFtZSA9ICcnLCB0YWdBcm91bmQ6IHN0cmluZyA9ICdkaXYnLCBhdHRyaWJ1dGVzOiBhbnkgPSB7fSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsc3RUYWcpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmFkZEh0bWxDb250ZW50KGl0ZW0uY29udGVudCwgaXRlbS5jbGFzc05hbWUsIGl0ZW0udGFnTmFtZSwgaXRlbS5hdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRIdG1sQ29udGVudChyZXN1bHQsIGNsYXNzTmFtZSwgdGFnQXJvdW5kLCBhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICBhZGRIdG1sQ29udGVudChjb250ZW50OiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nID0gJycsIHRhZ05hbWU6IHN0cmluZyA9ICdkaXYnLCBhdHRyaWJ1dGVzOiBhbnkgPSB7fSkge1xuICAgICAgICBsZXQgc3RyQXR0cmlidXRlID0gJyc7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBzdHJBdHRyaWJ1dGUgKz0gYCAke2tleX09JyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDwke3RhZ05hbWV9IGNsYXNzPScke2NsYXNzTmFtZX0nICR7c3RyQXR0cmlidXRlfT4ke2NvbnRlbnR9PC8ke3RhZ05hbWV9PmA7XG4gICAgfVxuXG5cbiAgICBwYXJzZVN0cmluZ1RvQXJyYXkobW9kZWw6IGFueSwgZmllbGRzOiBzdHJpbmcsIHNwbGl0Qnk6IHN0cmluZyA9ICcsJykge1xuICAgICAgICBpZiAoIW1vZGVsIHx8ICFmaWVsZHMpIHJldHVybjtcbiAgICAgICAgY29uc3QgbHN0RmllbGQgPSBmaWVsZHMuc3BsaXQoJywnKTtcbiAgICAgICAgbHN0RmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAobW9kZWxbZmllbGRdICYmICF0aGlzLmlzRW1wdHlBcnJheU9yTnVsbChtb2RlbFtmaWVsZF0pKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbZmllbGRdID0gbW9kZWxbZmllbGRdLnNwbGl0KHNwbGl0QnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbZmllbGRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcnNlQXJyYXlUb1N0cmluZyhkYXRhOiBhbnksIGZpZWxkczogc3RyaW5nLCBzcGxpdEJ5OiBzdHJpbmcgPSAnLCcpIHtcbiAgICAgICAgaWYgKCFkYXRhIHx8ICFmaWVsZHMpIHJldHVybjtcbiAgICAgICAgY29uc3QgbHN0RmllbGQgPSBmaWVsZHMuc3BsaXQoJywnKTtcbiAgICAgICAgbHN0RmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YVtmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShkYXRhW2ZpZWxkXSkgJiYgIXRoaXMuaXNFbXB0eUFycmF5T3JOdWxsKGRhdGFbZmllbGRdKSkge1xuICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gZGF0YVtmaWVsZF0uam9pbihzcGxpdEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzTW9yZVRoYW5EYXlzRnJvbU5vdyhkdDogRGF0ZSwgZGF5czogbnVtYmVyID0gMSkge1xuICAgICAgICByZXR1cm4gbW9tZW50KG5ldyBEYXRlKCkpLmRpZmYoZHQsICdkYXlzJykgPiAoZGF5cyAtIDEpO1xuICAgIH1cblxuICAgIGFkZENvbnRyb2xSZWFkb25seShmaWVsZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCBtZFdpZHRoID0gNiwgaXNIb3Jpem9udGFsbHlMYWJlbCA9IHRydWUsIGZ1bmNNb2RpZnlTY2hlbWE/OiAoc2NoZW1hOiBUZXh0Q29udHJvbFNjaGVtYSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IFRleHRDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIGlzSHRtbExhYmVsOiB0cnVlLFxuICAgICAgICAgICAgaXNSZWFkb25seTogdHJ1ZSxcbiAgICAgICAgICAgIG1kV2lkdGg6IG1kV2lkdGgsXG4gICAgICAgICAgICBpc0hvcml6b250YWxseUxhYmVsOiBpc0hvcml6b250YWxseUxhYmVsLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGZ1bmNNb2RpZnlTY2hlbWEpIHtcbiAgICAgICAgICAgIGZ1bmNNb2RpZnlTY2hlbWEoY29udHJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgfVxuXG4gICAgdHJ5UGFyc2VKc29uKGRhdGE6IGFueSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBKU09OLnBhcnNlKGRhdGEpIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRhdGEgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb252ZXJ0U3RyaW5nVG9VblNpZ24oc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgICAgICAgY29uc3Qgc2lnbmVkQ2hhcnMgPSAnw6DhuqPDo8Oh4bqhxIPhurHhurPhurXhuq/hurfDouG6p+G6qeG6q+G6peG6rcSRw6jhurvhur3DqeG6ucOq4buB4buD4buF4bq/4buHw6zhu4nEqcOt4buLw7Lhu4/DtcOz4buNw7Thu5Phu5Xhu5fhu5Hhu5nGoeG7neG7n+G7oeG7m+G7o8O54bunxanDuuG7pcaw4bur4but4buv4bup4bux4buz4bu34bu5w73hu7XDgOG6osODw4HhuqDEguG6sOG6suG6tOG6ruG6tsOC4bqm4bqo4bqq4bqk4bqsxJDDiOG6uuG6vMOJ4bq4w4rhu4Dhu4Lhu4Thur7hu4bDjOG7iMSow43hu4rDkuG7jsOVw5Phu4zDlOG7kuG7lOG7luG7kOG7mMag4buc4bue4bug4bua4buiw5nhu6bFqMOa4bukxq/hu6rhu6zhu67hu6jhu7Dhu7Lhu7bhu7jDneG7tCc7XG4gICAgICAgIGNvbnN0IHVuc2lnbmVkQ2hhcnMgPSAnYWFhYWFhYWFhYWFhYWFhYWFkZWVlZWVlZWVlZWVpaWlpaW9vb29vb29vb29vb29vb29vdXV1dXV1dXV1dXV5eXl5eUFBQUFBQUFBQUFBQUFBQUFBREVFRUVFRUVFRUVFSUlJSUlPT09PT09PT09PT09PT09PT1VVVVVVVVVVVVVVWVlZWVknO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgnWycgKyBzaWduZWRDaGFycyArICddJywgJ2cnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyLnJlcGxhY2UocGF0dGVybiwgZnVuY3Rpb24gKHAsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bnNpZ25lZENoYXJzLmNoYXJBdChzaWduZWRDaGFycy5pbmRleE9mKHApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0Q2lyY3VsYXJSZXBsYWNlciA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICAgIHJldHVybiAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBlbWJlZFNjcmlwdChzY3JpcHRDb25maWcpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBzY3JpcHRFbGVtZW50LnNyYyA9IHNjcmlwdENvbmZpZy5zcmM7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY3JpcHRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRDb25maWcuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcHJvcCAhPT0gJ3NyYycpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LnNldEF0dHJpYnV0ZShwcm9wLCBzY3JpcHRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0TmFtZU9mV2Vla2RheXMoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IFsnQ2h1zIkgbmhhzKPMgnQnLCAnVGh1zJvMgSBoYWknLCAnVGh1zJvMgSBiYScsICdUaHXMm8yBIHR1zJsnLCAnVGh1zJvMgSBuYcyGbScsICdUaHXMm8yBIHNhzIF1JywgJ1RodcybzIEgYmHMiXknXTtcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzW2RhdGUuZ2V0RGF5KCldO1xuICAgIH1cblxuICAgIGdldFF1YXJ0ZXJGcm9tRGF0ZShkYXRlPzogRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGRhdGUuZ2V0TW9udGgoKSArIDMpIC8gMyk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVJbmRleChpbmRleCwgbWF4TGVuZ3RoOiBudW1iZXIgPSA4KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0luZGV4ID0gYCR7aW5kZXh9YDtcbiAgICAgICAgY29uc3QgZGlmZiA9IChtYXhMZW5ndGggPCBzdHJpbmdJbmRleC5sZW5ndGgpID8gMCA6IG1heExlbmd0aCAtIHN0cmluZ0luZGV4Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGAke0FycmF5KGRpZmYpLm1hcCh4ID0+ICcnKS5qb2luKCcgJyl9JHtzdHJpbmdJbmRleH1gO1xuICAgIH1cblxuICAgIGRhdGFVUkl0b0Jsb2IoZGF0YVVSSSkge1xuICAgICAgICBjb25zdCBieXRlU3RyaW5nID0gd2luZG93LmF0b2IoZGF0YVVSSSk7XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGludDhBcnJheVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ludDhBcnJheV0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSk7XG4gICAgICAgIHJldHVybiBibG9iO1xuICAgIH1cbiAgICBnZXRJbm5lclRleHQoc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHN0cjtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuaW5uZXJUZXh0O1xuICAgIH1cbiAgICByZW5kZXJUaW1lc3BhbihkYXRldGltZTogYW55KSB7XG4gICAgICAgIGlmICghZGF0ZXRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXJyVGltZSA9IGRhdGV0aW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YXJyVGltZVswXX06JHthcnJUaW1lWzFdfWA7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWF0aFJvdW5kKHZhbHVlOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyID0gMCkge1xuICAgICAgICBsZXQgcG4gPSAxO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlIChkaWdpdHMgPiAwICYmIGkgPCBkaWdpdHMpIHtcbiAgICAgICAgICAgIHBuID0gcG4gKiAxMDtcbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIHBuKSAvIHBuO1xuICAgIH1cbiAgICBjb252ZXJ0VG9Sb21hbk51bWJlcihudW1iKSB7XG4gICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgaWYgKCFudW1iIHx8IGlzTmFOKG51bWIpIHx8IG51bWIgPCAxKSByZXR1cm4gc3RyO1xuICAgICAgICBjb25zdCByb21hbiA9IHsgTTogMTAwMCwgQ006IDkwMCwgRDogNTAwLCBDRDogNDAwLCBDOiAxMDAsIFhDOiA5MCwgTDogNTAsIFhMOiA0MCwgWDogMTAsIElYOiA5LCBWOiA1LCBJVjogNCwgSTogMSB9O1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMocm9tYW4pKSB7XG4gICAgICAgICAgICBjb25zdCBxID0gTWF0aC5mbG9vcihudW1iIC8gcm9tYW5baV0pO1xuICAgICAgICAgICAgbnVtYiAtPSBxICogcm9tYW5baV07XG4gICAgICAgICAgICBzdHIgKz0gaS5yZXBlYXQocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG59XG4iXX0=
|
|
1373
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvY29tbW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLG1DQUFtQztBQUNuQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBRzdCLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBWSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBRXJELHFCQUFxQjtBQUNyQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFdkIsSUFBSyxlQUtKO0FBTEQsV0FBSyxlQUFlO0lBQ2hCLHlEQUFNLENBQUE7SUFDTiwyREFBTyxDQUFBO0lBQ1AscURBQUksQ0FBQTtJQUNKLGlFQUFVLENBQUE7QUFDZCxDQUFDLEVBTEksZUFBZSxLQUFmLGVBQWUsUUFLbkI7QUFLRCxNQUFNLE9BQU8sYUFBYTtJQWtDdEIs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RUFBRSxDQUFDO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7OztZQXppREosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFmUSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICdmYXN0LXNhZmUtc3RyaW5naWZ5JztcbmltcG9ydCBtb21lbnRfIGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERpYWxvZyB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5cbmltcG9ydCB7IE9wZXJhdG9yLCBUZXh0Q29udHJvbFNjaGVtYSB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyLCBTb3J0LCBTdHJpbmdDb21wYXJlT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4vYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XG5cbi8vIGZpeCBmb3IgYnVpbGQgcHJvZFxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcblxuZW51bSBNZW51T3JpZW50YXRpb24ge1xuICAgIFNUQVRJQyxcbiAgICBPVkVSTEFZLFxuICAgIFNMSU0sXG4gICAgSE9SSVpPTlRBTCxcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uU2VydmljZSB7XG4gICAgbGF5b3V0TW9kZTogTWVudU9yaWVudGF0aW9uID0gTWVudU9yaWVudGF0aW9uLlNUQVRJQztcblxuICAgIGRhcmtNZW51ID0gZmFsc2U7XG5cbiAgICBwcm9maWxlTW9kZSA9ICd0b3AnO1xuXG4gICAgcm90YXRlTWVudUJ1dHRvbjogYm9vbGVhbjtcblxuICAgIHRvcGJhck1lbnVBY3RpdmU6IGJvb2xlYW47XG5cbiAgICBvdmVybGF5TWVudUFjdGl2ZTogYm9vbGVhbjtcblxuICAgIHN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlOiBib29sZWFuO1xuXG4gICAgbWVudUNsaWNrOiBib29sZWFuO1xuXG4gICAgdG9wYmFySXRlbUNsaWNrOiBib29sZWFuO1xuXG4gICAgYWN0aXZlVG9wYmFySXRlbTogYW55O1xuXG4gICAgcmVzZXRNZW51OiBib29sZWFuO1xuXG4gICAgY3VycmVudEFjdGl2ZUl0ZW06IGFueTtcblxuICAgIG1lbnVIb3ZlckFjdGl2ZTogYm9vbGVhbjtcbiAgICB0ZXN0OiBib29sZWFuO1xuXG4gICAgdG5QcmVmaXhMb2cgPSAnLS0tLS0tLS0tPlROX0xPR19DT05TT0xFLS0tLS0tLT4nO1xuXG4gICAgU1RPUkFHRV9LRVkgPSAnQ0xJUEJPQVJEX0NPTlRFTlQnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSkge1xuICAgIH1cblxuICAgIGd1aWQoKSB7XG4gICAgICAgIHJldHVybiB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICByYW5kb21TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmd1aWQoKTtcbiAgICB9XG5cbiAgICByYW5kb21TdHJpbmdXaXRoTm90RGVsaW1pdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ndWlkKCkucmVwbGFjZSgnLScsICcnKTtcbiAgICB9XG5cbiAgICBzdHJpbmdGb3JtYXQoaW5wdXRTdHJpbmc6IHN0cmluZywgLi4uYXJncykge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLnJlcGxhY2UoYHske2luZGV4fX1gLCBhcmdzW2luZGV4XSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5wdXRTdHJpbmc7XG4gICAgfVxuXG4gICAgaHRtbEVuY29kZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhzdHIpXG4gICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyZxdW90OycpO1xuICAgIH1cblxuICAgIC8vIEzhuqV5IHbhu4EgZ2nDoSB0cuG7iyB0aGVvIHBhdGggJydcbiAgICBnZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2JqID0gb2JqW3BhdGhzW2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBvYmogPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8ge3NlYXJjaDoge2tleSA6ICduYW1uaCd9fSAuID0+IHNlYXJjaC5rZXlcbiAgICBzZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gb2JqO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbiA9IGZpZWxkcy5sZW5ndGg7IGkgPCBuICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldO1xuICAgICAgICAgICAgaWYgKGkgPT09IG4gLSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkXSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGRdID09PSAndW5kZWZpbmVkJyB8fCAhXy5pc09iamVjdChyZXN1bHRbZmllbGRdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbZmllbGRdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFtmaWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGREYXlzKGRhdGU6IERhdGUgfCBzdHJpbmcsIGRheXM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgY2xvbmVkLnNldERhdGUoY2xvbmVkLmdldERhdGUoKSArIGRheXMpO1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGFkZEhvdXJzKGRhdGU6IERhdGUsIGhvdXJzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY2xvbmVkID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIGNsb25lZC5zZXRUaW1lKGNsb25lZC5nZXRUaW1lKCkgKyAoaG91cnMgKiA2MCAqIDYwICogMTAwMCkpO1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGFkZFNlY29uZHMoZGF0ZTogRGF0ZSwgc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNsb25lZCA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICBjbG9uZWQuc2V0VGltZShjbG9uZWQuZ2V0VGltZSgpICsgKHNlY29uZHMgKiAxMDAwKSk7XG4gICAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuXG4gICAgYWRkV29ya0RheXMoZGF0ZSwgZGF5cykge1xuICAgICAgICBjb25zdCBjbG9uZWQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgd2hpbGUgKGRheXMgPiAwKSB7XG4gICAgICAgICAgICBjbG9uZWQuc2V0RGF0ZShjbG9uZWQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICBpZiAoY2xvbmVkLmdldERheSgpICE9PSAwICYmIGNsb25lZC5nZXREYXkoKSAhPT0gNikge1xuICAgICAgICAgICAgICAgIGRheXMgLT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIGV4cG9ydFRvQ1NWKGRhdGFzOiBhbnlbXSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGMuaGVhZGVyICsgJywnO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByb3dzU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBkYXRhcy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcm93U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICAvLyByb3dTdHJpbmcgKz0gKHR5cGVvZiBkW2MuZmllbGRdKS50b1N0cmluZygpICsgJywnO1xuICAgICAgICAgICAgICAgIGxldCBjb2xWYWwgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWxUbXAgPSB0aGlzLmdldFZhbHVlQnlQYXRoKGQsIGMuZGF0YVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sVmFsVG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkW2MuZmllbGRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxuICAgICAgICAgICAgICAgIGlmIChjLmRhdGVGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuLVVTJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBtYXBwaW5nXG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5kYXRhTWFwcGluZy5mb3JFYWNoKChkbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRtLmlkID09PSBkW2MuZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3RlcihkbS5uYW1lLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3Rlcihjb2xWYWwudG9TdHJpbmcoKSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dTdHJpbmcgKz0gJycgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByb3dzU3RyaW5nLnB1c2gocm93U3RyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1N0cmluZykge1xuICAgICAgICAgICAgY3N2ICs9IHJvdyArICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbJ1xcdUZFRkYnLCBjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdicgfSk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSArICcuY3N2Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7IC8vIFJlcXVpcmVkIGZvciBGRlxuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlU3BlY2lhbENoYXJhY3Rlcih2YWw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdmFsLnJlcGxhY2UoJywnLCAnLicpXG4gICAgICAgICAgICAucmVwbGFjZSgnXFxuJywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnXFxyJywgJycpO1xuICAgIH1cblxuICAgIGV4cG9ydFRvQ1NWMihkYXRhczogYW55W10sIGNvbHVtbnM6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGxldCBoZWFkZXJTdHJpbmcgPSAnJztcbiAgICAgICAgLy8gRHV54buHdCBj4buZdCDEkeG7gyB0aMOqbSB2w6BvIGhlYWRlclxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGhlYWRlclN0cmluZyArPSBjLmhlYWRlciArICcsJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJvd1N0cmluZyA9ICcnO1xuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcm93U3RyaW5nICs9ICh0eXBlb2YgZFtjLmZpZWxkXSkudG9TdHJpbmcoKSArICcsJztcbiAgICAgICAgICAgICAgICBsZXQgY29sVmFsID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGMuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbFZhbFRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gY29sVmFsVG1wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRm9ybWF0IERhdGVcbiAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKCdlbi1VUycpO1xuICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBkYXRlUGlwZS50cmFuc2Zvcm0oY29sVmFsLCBjLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbWFwcGluZ1xuICAgICAgICAgICAgICAgIGlmIChjLmRhdGFNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkbS5pZCA9PT0gZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoZG0ubmFtZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9IHRoaXMucmVwbGFjZVNwZWNpYWxDaGFyYWN0ZXIoY29sVmFsLnRvU3RyaW5nKCkpICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3RyaW5nICs9ICcnICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHJvd1N0cmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgY3N2ID0gaGVhZGVyU3RyaW5nICsgJ1xcbic7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3NTdHJpbmcpIHtcbiAgICAgICAgICAgIGNzdiArPSByb3cgKyAnXFxuJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoWydcXHVGRUZGJywgY3N2XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUgKyAnLmNzdicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspOyAvLyBSZXF1aXJlZCBmb3IgRkZcbiAgICAgICAgbGluay5jbGljaygpO1xuICAgIH1cblxuICAgIGV4cG9ydFRvQ1NWR3JvdXAoZGF0YXM6IGFueSwgY29sdW1uczogYW55W10sIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbGV0IGhlYWRlclN0cmluZyA9ICcnO1xuICAgICAgICAvLyBEdXnhu4d0IGPhu5l0IMSR4buDIHRow6ptIHbDoG8gaGVhZGVyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGVhZGVyU3RyaW5nICs9IGNvbHVtbnNbaV0uaGVhZGVyICsgJywnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93c1N0cmluZzogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZGF0YXMuZm9yRWFjaCgoc3ViRGF0YSkgPT4ge1xuICAgICAgICAgICAgcm93c1N0cmluZy5wdXNoKHN1YkRhdGEuZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChoZWFkZXJTdHJpbmcpO1xuXG4gICAgICAgICAgICBzdWJEYXRhLmRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByb3dTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFZhbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRhUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sVmFsVG1wID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChkLCBjLmRhdGFQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWxUbXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xWYWwgPSBjb2xWYWxUbXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZFtjLmZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gZFtjLmZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBGb3JtYXQgRGF0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoYy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbFZhbCA9IGRhdGVQaXBlLnRyYW5zZm9ybShjb2xWYWwsIGMuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IG1hcHBpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuZGF0YU1hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZGF0YU1hcHBpbmcuZm9yRWFjaCgoZG0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG0uaWQgPT09IGRbYy5maWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sVmFsID0gdGhpcy5yZXBsYWNlU3BlY2lhbENoYXJhY3RlcihkbS5uYW1lLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSB0aGlzLnJlcGxhY2VTcGVjaWFsQ2hhcmFjdGVyKGNvbFZhbC50b1N0cmluZygpKSArICcsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1N0cmluZyArPSAnJyArICcsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaChyb3dTdHJpbmcpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJvd3NTdHJpbmcucHVzaCgnXFxuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGxldCBjc3YgPSBoZWFkZXJTdHJpbmcgKyAnXFxuJztcbiAgICAgICAgbGV0IGNzdiA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzU3RyaW5nKSB7XG4gICAgICAgICAgICBjc3YgKz0gcm93ICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFsnXFx1RkVGRicsIGNzdl0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVOYW1lICsgJy5jc3YnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgLy8gUmVxdWlyZWQgZm9yIEZGXG4gICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9TZWxlY3RJdGVtKFxuICAgICAgICBkYXRhOiBhbnksXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyxcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAnJyxcbiAgICAgICAgdGV4dEZpZWxkMjogc3RyaW5nID0gJycsXG4gICAgICAgIHByZWZpeFRleHRGaWVsZDIgPSAnJyxcbiAgICAgICAgYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZSxcbiAgICApOiBTZWxlY3RJdGVtW10ge1xuICAgICAgICBpZiAoIXRleHRGaWVsZCB8fCB0ZXh0RmllbGQgPT09ICcnKSB7XG4gICAgICAgICAgICB0ZXh0RmllbGQgPSB2YWx1ZUZpZWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGVtcEFycjogU2VsZWN0SXRlbVtdID0gW107XG5cbiAgICAgICAgaWYgKGFsbG93TnVsbCkge1xuICAgICAgICAgICAgdGVtcEFyci5wdXNoKHsgbGFiZWw6ICcnLCB2YWx1ZTogJycgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Zm9yaW5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkMixcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4VGV4dEZpZWxkMixcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3ZhbHVlRmllbGRdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBBcnI7XG4gICAgfVxuXG4gICAgZ2V0TGFiZWwoXG4gICAgICAgIGl0ZW06IGFueSxcbiAgICAgICAgdGV4dEZpZWxkOiBzdHJpbmcsXG4gICAgICAgIHRleHRGaWVsZDI6IHN0cmluZyxcbiAgICAgICAgcHJlZml4VGV4dEZpZWxkMjogc3RyaW5nLFxuICAgICkge1xuICAgICAgICBpZiAodGV4dEZpZWxkMikge1xuICAgICAgICAgICAgcmV0dXJuIGAke2l0ZW1bdGV4dEZpZWxkXX0gLSAke3ByZWZpeFRleHRGaWVsZDJ9ICR7aXRlbVt0ZXh0RmllbGQyXX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGV4dEZpZWxkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnZlcnRUb1NlbGVjdEl0ZW1NYXN0ZXJEYXRhKFxuICAgICAgICBkYXRhOiBhbnksXG4gICAgICAgIHZhbHVlRmllbGQ6IHN0cmluZyA9ICdpZCcsXG4gICAgICAgIHRleHRGaWVsZDogc3RyaW5nID0gJ25hbWUnLFxuICAgICk6IFNlbGVjdEl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUb1NlbGVjdEl0ZW0oZGF0YSwgdmFsdWVGaWVsZCwgdGV4dEZpZWxkKTtcbiAgICB9XG5cbiAgICBnZXRUcmFjZUlkID0gKCkgPT4gc2Vzc2lvblN0b3JhZ2U/LmdldEl0ZW0oJ3RyYWNlSWQnKSA/PyAnJztcblxuICAgIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBsZXQgdHJhY2VJZDogc3RyaW5nID0gbnVsbDtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiYgc2Vzc2lvblN0b3JhZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgICB0cmFjZUlkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndHJhY2VJZCcpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ8OzIGzhu5dpIOG7nyB1cmw6ICR7ZXJyb3IudXJsfSwgc3RhdHVzQ29kZTogJHtlcnJvci5zdGF0dXN9ID09PT0+IFRyYWNlSWQgY2hvIGVsYXN0aWM6ICR7dHJhY2VJZH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcmNlSWY0MDEgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmlzRm9yY2VMb2dvdXRJZjQwMTtcbiAgICAgICAgICAgIGlmIChmb3JjZUlmNDAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2F1dGhlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aGVuU2VydmljZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgX25vdGlmaWVyU2VydmljZSA9IGluamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICAgICAgICAgIF9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0jhu4cgdGjhu5FuZyBz4bq9IHThu7EgxJHEg25nIHh14bqldCBzYXUgNXMgxJHhu4MgY+G6rXAgbmjhuq1wIHBoacOqbiBi4bqjbiBt4bubaScsICdUaMO0bmcgYsOhbycpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnc2xlZXAgYmVmb3JlIGxvZ291dCcpO1xuICAgICAgICAgICAgICAgICAgICBfYXV0aGVuU2VydmljZS5sb2dvdXQoKTtcbiAgICAgICAgICAgICAgICB9LCA1MDAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoPFJlc3BvbnNlUmVzdWx0PntcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDw7MgbOG7l2kgeOG6o3kgcmEuIEjDo3kgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QhISEnLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgdG90YWxSZWNvcmQ6IDAsXG4gICAgICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3JDaGVja0V4aXN0OiBudWxsLFxuICAgICAgICAgICAgZXJyb3JDb250cm9sSWQ6IG51bGwsXG4gICAgICAgICAgICBlcnJvckZvcm1JZDogbnVsbCxcbiAgICAgICAgICAgIHRyYWNlSWQ6IHRyYWNlSWQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVG9wYmFySXRlbUNsaWNrKGV2ZW50LCBpdGVtKSB7XG4gICAgICAgIHRoaXMudG9wYmFySXRlbUNsaWNrID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVUb3BiYXJJdGVtID09PSBpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUb3BiYXJJdGVtID0gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgYXV0b09wZW5Ub3BiYXJJdGVtKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSAxO1xuICAgIH1cblxuICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLkhPUklaT05UQUw7XG4gICAgfVxuXG4gICAgaXNTbGltKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uU0xJTTtcbiAgICB9XG5cbiAgICBoaWRlT3ZlcmxheU1lbnUoKSB7XG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uTGF5b3V0Q2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy50b3BiYXJJdGVtQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVG9wYmFySXRlbSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5tZW51Q2xpY2spIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMuaXNTbGltKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0TWVudSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlNZW51QWN0aXZlIHx8IHRoaXMuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXlNZW51KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWVudUhvdmVyQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lbnVDbGljayA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uVG9wYmFyTWVudUJ1dHRvbkNsaWNrKGV2dCkge1xuICAgICAgICB0aGlzLnRvcGJhckl0ZW1DbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9ICF0aGlzLnRvcGJhck1lbnVBY3RpdmU7XG5cbiAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmF1dG9PcGVuVG9wYmFySXRlbSgpO1xuICAgIH1cblxuICAgIHNob3dUb3BiYXJNZW51KCkge1xuICAgICAgICBpZiAoIXRoaXMudG9wYmFyTWVudUFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b3BiYXJJdGVtQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgICB0aGlzLnRvcGJhck1lbnVBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oaWRlT3ZlcmxheU1lbnUoKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b09wZW5Ub3BiYXJJdGVtKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1lbnVCdXR0b25DbGljayhldmVudCkge1xuICAgICAgICB0aGlzLm1lbnVDbGljayA9IHRydWU7XG4gICAgICAgIHRoaXMucm90YXRlTWVudUJ1dHRvbiA9ICF0aGlzLnJvdGF0ZU1lbnVCdXR0b247XG4gICAgICAgIHRoaXMudG9wYmFyTWVudUFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmxheW91dE1vZGUgPT09IE1lbnVPcmllbnRhdGlvbi5PVkVSTEFZKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlNZW51QWN0aXZlID0gIXRoaXMub3ZlcmxheU1lbnVBY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9ICF0aGlzLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICB0b2dnbGVMZWZ0TWVudShzaG93KSB7XG4gICAgICAgIHRoaXMubWVudUNsaWNrID0gIXNob3c7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSBzaG93O1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgdGhpcy50b3BiYXJNZW51QWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0TW9kZSA9PT0gTWVudU9yaWVudGF0aW9uLk9WRVJMQVkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheU1lbnVBY3RpdmUgPSAhc2hvdztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51RGVza3RvcEluYWN0aXZlID0gc2hvdztcbiAgICAgICAgICAgICAgICB0aGlzLnJvdGF0ZU1lbnVCdXR0b24gPSBzaG93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gIXNob3c7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3RhdGVNZW51QnV0dG9uID0gIXNob3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1lbnVDbGljaygkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tZW51Q2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2V0TWVudSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlzVGFibGV0KCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgICByZXR1cm4gd2lkdGggPD0gMTAyNCAmJiB3aWR0aCA+IDY0MDtcbiAgICB9XG5cbiAgICBpc0Rlc2t0b3AoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDEwMjQ7XG4gICAgfVxuXG4gICAgaXNNb2JpbGUoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA2NDA7XG4gICAgfVxuXG4gICAgaXNPdmVybGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRNb2RlID09PSBNZW51T3JpZW50YXRpb24uT1ZFUkxBWTtcbiAgICB9XG5cbiAgICBjb21iaW5lU2VydmljZUNvZGVBbmRTdWZmaXgoc2VydmljZUNvZGU6IHN0cmluZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LnN1ZmZpeFNlcnZpY2VDb2RlXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3NlcnZpY2VDb2RlfSR7dGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zdWZmaXhTZXJ2aWNlQ29kZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlcnZpY2VDb2RlO1xuICAgIH1cblxuICAgIGRlbGF5KG1zOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgfVxuXG4gICAgLyoqIEJlZ2luIGRpc2FibGUgZWRpdG9yIHRhYiAqL1xuICAgIHNldEF1dG9mb2N1c0ZpcnN0Q29udHJvbChpZEVsZW1lbnQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3UmVmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmICh2aWV3UmVmICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHZpZXdSZWYucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgaW5wdXQudHlwZSAhPSAncmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXhhdGVhcmEgPSB2aWV3UmVmLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleGF0ZWFyYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4YXRlYXJhLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgZ2V0VGFiRGlzYWJsZWRIYW5kbGVyKCkge1xuICAgICAgICAvLyByZXR1cm4ge1xuICAgICAgICAvLyAgICAga2V5ICAgIDogOSxcbiAgICAgICAgLy8gICAgIGhhbmRsZXI6IGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbmV4dCA9IEpRdWVyeShkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbG9zZXN0KCdwLWVkaXRvcicpLnBhcmVudCgpLm5leHQoKS5maW5kKCc6dGFiYmFibGUsIDpmb2N1c2FibGUnKS5maXJzdCgpO1xuICAgICAgICAvLyAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIG5leHQuZm9jdXMoKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9O1xuICAgIH1cblxuICAgIGFkZFRhYkRpc2FibGVkSGFuZGxlcihldmVudCkge1xuICAgICAgICAvLyB0aGlzLmRpc2FibGVUYWJUb29sYmFyRWRpdG9yKCk7XG4gICAgICAgIC8vIGV2ZW50LmVkaXRvci5rZXlib2FyZC5iaW5kaW5nc1s5XS5sZW5ndGggPSAwO1xuICAgICAgICAvLyBldmVudC5lZGl0b3Iua2V5Ym9hcmQuYmluZGluZ3NbOV0ucHVzaCh0aGlzLmdldFRhYkRpc2FibGVkSGFuZGxlcigpKTtcbiAgICB9XG5cbiAgICBkaXNhYmxlVGFiVG9vbGJhckVkaXRvcigpIHtcbiAgICAgICAgLy8galF1ZXJ5KFwiLnFsLXRvb2xiYXJcIikuZmluZChcIjpidXR0b25cIikuYXR0cihcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgfVxuXG4gICAgLyoqIEVuZCBkaXNhYmxlIGVkaXRvciB0YWIgKi9cblxuICAgIHByb2Nlc3NEYXRlSW5wdXQoaW5wdXRWYWx1ZSwgc2hvd1RpbWU6IGJvb2xlYW4sIHRpbWVPbmx5ID0gZmFsc2UsIHZpZXcgPSAnZGF0ZScpOiBEYXRlIHtcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzSW50ZWdlclN0cmluZyhpbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgaE5vdyA9IG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcbiAgICAgICAgICAgIGNvbnN0IG1Ob3cgPSBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNOb3cgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG5cbiAgICAgICAgICAgIGlmIChudW1iZXIgPiA5OSkge1xuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXQgPSAnRERNTVlZWVloaG1tJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IG1vbWVudChpbnB1dFZhbHVlLCBmb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXkudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWx1ZS5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gMDEwMTIwMTlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gK2lucHV0VmFsdWUuc3Vic3RyKDAsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9ICtpbnB1dFZhbHVlLnN1YnN0cigyLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9ICtpbnB1dFZhbHVlLnN1YnN0cig0LCA0KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobW9udGggPiAxMiB8fCBtb250aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4RGF5ID0gdGhpcy5nZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXkgPiBtYXhEYXkgfHwgZGF5IDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0SG91cnMoaE5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldFNlY29uZHMoc05vdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0VmFsdWUubGVuZ3RoID09PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDAxMDExOVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSAraW5wdXRWYWx1ZS5zdWJzdHIoMCwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gK2lucHV0VmFsdWUuc3Vic3RyKDIsIDIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gKygnMjAnICsgaW5wdXRWYWx1ZS5zdWJzdHIoNCwgMikudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnB1dFZhbHVlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAvLyAwMTAxXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICtpbnB1dFZhbHVlLnN1YnN0cigwLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSAraW5wdXRWYWx1ZS5zdWJzdHIoMiwgMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEN1cnJlbnRZZWFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIgfHwgbW9udGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heERheSA9IHRoaXMuZ2V0TWF4RGF5SW5Nb250aEFuZFllYXIobW9udGgsIHllYXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gbWF4RGF5IHx8IGRheSA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRNaW51dGVzKG1Ob3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5zZXRTZWNvbmRzKHNOb3cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobnVtYmVyID4gLTEwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLmFkZERheXMoKG5ldyBEYXRlKCkpLnRvTG9jYWxlRGF0ZVN0cmluZygpLCBudW1iZXIpO1xuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICByLnNldEhvdXJzKGhOb3cpO1xuICAgICAgICAgICAgICAgICAgICByLnNldE1pbnV0ZXMobU5vdyk7XG4gICAgICAgICAgICAgICAgICAgIHIuc2V0U2Vjb25kcyhzTm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnB1dFZhbHVlID0gaW5wdXRWYWx1ZS5yZXBsYWNlKC8tL2csICcvJyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChzaG93VGltZSAmJiAhdGltZU9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlVGltZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnREQvTU0vWVlZWSBoaDptbScsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGVUaW1lICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGVUaW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyeVBhcnNlRGF0ZSA9IHRoaXMudHJ5UGFyc2VFeHRyYWN0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2lucHV0VmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdERC9NTS9ZWVlZIGhoOm1tJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0cnlQYXJzZURhdGUgKyAnJyAhPSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeVBhcnNlRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2aWV3ID09ICdtb250aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJ5UGFyc2VEYXRlID0gdGhpcy50cnlQYXJzZUV4dHJhY3REYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7aW5wdXRWYWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ01NL1lZWVknKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyeVBhcnNlRGF0ZSArICcnICE9ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5UGFyc2VEYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cnlQYXJzZURhdGUgPSB0aGlzLnRyeVBhcnNlRXh0cmFjdERhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UGFyc2VEYXRlICsgJycgIT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlQYXJzZURhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRNYXhEYXlJbk1vbnRoQW5kWWVhcihtb250aCwgeWVhcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMCk7XG4gICAgICAgIHJldHVybiBkLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBnZXREYXRhc291cmNlUmFuZ2VZZWFyKHJhbmdlWWVhciA9IDUsIHByZXZpb3VzWWVhcj86IG51bWJlciwgbmV4dFllYXI/OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZVllYXIgPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGlzUHJldmlvdXNZZWFyID0gcHJldmlvdXNZZWFyICYmIHByZXZpb3VzWWVhciA+IDA7XG4gICAgICAgIGNvbnN0IGlzTmV4dFllYXIgPSBuZXh0WWVhciAmJiBuZXh0WWVhciA+IDA7XG4gICAgICAgIGlmIChpc1ByZXZpb3VzWWVhciB8fCBpc05leHRZZWFyKSB7XG4gICAgICAgICAgICBpZiAoaXNQcmV2aW91c1llYXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB5ZWFyID0gY3VycmVudFllYXIgLSBwcmV2aW91c1llYXI7IHllYXIgPCBjdXJyZW50WWVhcjsgeWVhcisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VZZWFyLnB1c2goeyBpZDogeWVhciwgdGVuOiB5ZWFyIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05leHRZZWFyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyOyB5ZWFyIDw9IGN1cnJlbnRZZWFyICsgbmV4dFllYXI7IHllYXIrKykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKHsgaWQ6IHllYXIsIHRlbjogeWVhciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKHsgaWQ6IGN1cnJlbnRZZWFyLCB0ZW46IGN1cnJlbnRZZWFyIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGkgPSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgeWVhciA9IGN1cnJlbnRZZWFyIC0gcmFuZ2VZZWFyOyB5ZWFyIDw9IGN1cnJlbnRZZWFyOyB5ZWFyKyspIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlWWVhci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB7IGlkOiB5ZWFyLCB0ZW46IHllYXIgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBpZDogY3VycmVudFllYXIgKyBpLCB0ZW46IGN1cnJlbnRZZWFyICsgaSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VZZWFyLnNvcnQoKGEsIGIpID0+IGIuaWQgLSBhLmlkKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50WWVhcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRNb250aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRNb250aCgpO1xuICAgIH1cblxuICAgIGdldFJhbmdlWWVhckJldHdlZW4ocHJldmlvdXNZZWFyLCBuZXh0WWVhcikge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZVllYXIgPSBbXTtcbiAgICAgICAgaWYgKG5leHRZZWFyID49IHByZXZpb3VzWWVhcikge1xuICAgICAgICAgICAgY29uc3QgdG1wID0gWy4uLkFycmF5KG5leHRZZWFyIC0gcHJldmlvdXNZZWFyICsgMSkua2V5cygpXS5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IHggKyBwcmV2aW91c1llYXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHllYXIsXG4gICAgICAgICAgICAgICAgICAgIHRlbjogeWVhclxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGFTb3VyY2VZZWFyID0gdG1wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhU291cmNlWWVhci5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RHluYW1pY0Zvcm1JZChzZXJ2aWNlLCBlbnRpdHksIGFjdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7c2VydmljZX1fJHtlbnRpdHl9XyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0RHluYW1pY0Zvcm1JZChhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGBERUZBVUxUXyR7YWN0aW9ufWAudG9VcHBlckNhc2UoKTtcbiAgICB9XG5cbiAgICBjbG9uZU9iamVjdChvYmo6IGFueSkge1xuICAgICAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHNldFByb3BlcnR5KHByb3AsIHZhbCwgbW9kZWwpIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSB0aGlzLmNsb25lT2JqZWN0KG1vZGVsKTtcbiAgICAgICAgaWYgKGNsb25lKSB7XG4gICAgICAgICAgICBjbG9uZVtwcm9wXSA9IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzdGFuZGFyZGl6ZWRKc29uKGlucHV0SnNvbjogc3RyaW5nKSB7XG4gICAgICAgIGxldCBkYXRhID0gaW5wdXRKc29uLnJlcGxhY2UoL09iamVjdElkXFwoKC4qPylcXCkvZ20sICckMScpO1xuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9JU09EYXRlXFwoKC4qPylcXCkvZ20sICckMScpO1xuICAgICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC9OdW1iZXJMb25nXFwoKC4qPylcXCkvZ20sICckMScpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHRyaWdnZXJSZXNpemVXaW5kb3coKSB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpO1xuICAgIH1cblxuICAgIGF1dG9BbGlnbkRpYWxvZyhkaWFsb2c6IERpYWxvZykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudHJpZ2dlclJlc2l6ZVdpbmRvdygpLCAyMDApO1xuICAgIH1cblxuICAgIG9iakhhc051bGwob2JqKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9ialtrZXldICE9IG51bGwgJiYgb2JqW2tleV0gIT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhcnJheUhhc0NoYW5nZWQob2xkQXJyYXksIG5ld0FycmF5KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBpLCBpdGVtLCBqLCBsZW47XG4gICAgICAgIGlmICgoIW9sZEFycmF5ICYmIG5ld0FycmF5KSB8fCAob2xkQXJyYXkgJiYgIW5ld0FycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkQXJyYXkpID09PSBKU09OLnN0cmluZ2lmeShuZXdBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IGogPSAwLCBsZW4gPSBuZXdBcnJheS5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcbiAgICAgICAgICAgIGl0ZW0gPSBuZXdBcnJheVtpXTtcbiAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShpdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkob2xkQXJyYXlbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeVBhcnNlRXh0cmFjdERhdGUoZGF0ZVZhbHVlLCBmb3JtYXQpIHtcbiAgICAgICAgY29uc3QgZGF5ID0gbW9tZW50KGRhdGVWYWx1ZSwgZm9ybWF0KTtcbiAgICAgICAgaWYgKGRheSkge1xuICAgICAgICAgICAgcmV0dXJuIGRheS50b0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFZhbHVlRnJvbVRhc2soa2V5VmFsdWUsIGN1cnJlbnRWaWV3LCBzdGVwTWV0YWRhdGEpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGlmIChjdXJyZW50Vmlldy5rZXlWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tLZXlWYWx1ZSA9IEpTT04ucGFyc2UoY3VycmVudFZpZXcua2V5VmFsdWVzKS5maW5kKFxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSA9PT0ga2V5VmFsdWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHRhc2tLZXlWYWx1ZSAhPT0gbnVsbCAmJiB0YXNrS2V5VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRhc2tLZXlWYWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcE1ldGFkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJFeHRlbmREYXRhID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICBzdGVwTWV0YWRhdGEuZmluZCgoeCkgPT4geC5rZXkgPT09ICdleHRlbmREYXRhJykudmFsdWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgdGFza0tleVZhbHVlID0gYXJyRXh0ZW5kRGF0YS5maW5kKFxuICAgICAgICAgICAgICAgICh4KSA9PiB4LmtleSAmJiB4LmtleS50b0xvd2VyQ2FzZSgpID09PSBrZXlWYWx1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGFza0tleVZhbHVlICE9PSBudWxsICYmIHRhc2tLZXlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFza0tleVZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdXBwZXJGaXJzdExldHRlcihpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQgPT0gJycgfHwgaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcblxuICAgICAgICBjb25zdCB3b3JkcyA9IGlucHV0LnNwbGl0KCcgJyk7XG5cbiAgICAgICAgd29yZHMuZm9yRWFjaCgod29yZCkgPT4ge1xuICAgICAgICAgICAgaWYgKHdvcmQudHJpbSgpICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd29yZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHdvcmQuc3Vic3RyaW5nKDEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdvcmQudG9VcHBlckNhc2UoKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXBsYWNlQWxsKGlucHV0U3RyLCBzZWFyY2gsIHJlcGxhY2VtZW50KSB7XG4gICAgICAgIGlmIChpbnB1dFN0ciA9PT0gbnVsbCB8fCBpbnB1dFN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRTdHI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0U3RyLnNwbGl0KHNlYXJjaCkuam9pbihyZXBsYWNlbWVudCk7XG4gICAgfVxuXG4gICAgaXNJbWFnZShmaWxlTmFtZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWZpbGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC9cXC4oZ2lmfGpwZ3xqcGVnfHRpZmZ8cG5nKSQvaS50ZXN0KGZpbGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIGNyZWF0ZUlmcmFtZSh1cmwpIHtcbiAgICAgICAgY29uc3QgaWZyYW1lID0gYDxpZnJhbWUgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCIgd2lkdGg9XCIwXCIgaGVpZ2h0PVwiMFwiIHNyYz1cIiR7dXJsfVwiPjwvaWZyYW1lPmA7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBpZnJhbWUpO1xuICAgIH1cblxuICAgIGlzSW50ZWdlclN0cmluZyhzdHI6IHN0cmluZykge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChzdHIuaW5kZXhPZignMCcpID09IDApIHtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ciA9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbiA9IE1hdGguZmxvb3IoTnVtYmVyKHN0cikpO1xuICAgICAgICByZXR1cm4gbiAhPT0gSW5maW5pdHkgJiYgU3RyaW5nKG4pID09PSBzdHI7XG4gICAgfVxuXG4gICAgaGFzQW55TWFzaygpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLWRpYWxvZy1tYXNrXCJdJylcbiAgICAgICAgICAgIHx8IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignZGl2W2NsYXNzfj1cInVpLXNpZGViYXItbWFza1wiXScpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2FmZVN0cmluZ2lmeShkYXRhKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBzdHJpbmdpZnkuc3RhYmxlU3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICBjb21wYXJlU3RyaW5nKHZhbHVlMSwgdmFsdWUyKSB7XG4gICAgICAgIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wYXJlRGF0ZShkYXRlMSwgZGF0ZTIpIHtcbiAgICAgICAgaWYgKCFkYXRlMSB8fCAhZGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRhdGUxID0gdGhpcy5wYXJzZURhdGUoZGF0ZTEpO1xuICAgICAgICBkYXRlMiA9IHRoaXMucGFyc2VEYXRlKGRhdGUyKTtcbiAgICAgICAgaWYgKGRhdGUxLmdldFRpbWUoKSA8IGRhdGUyLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRhdGUxLmdldFRpbWUoKSA9PSBkYXRlMi5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaWZmRGF0ZShkYXRlMTogYW55LCBkYXRlMjogYW55KTogbnVtYmVyIHtcbiAgICAgICAgLy8gZDEgPCBkMiB0aMOsIGLhurFuZyA9IC0xXG4gICAgICAgIGNvbnN0IGQxID0gbW9tZW50KGRhdGUxKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgY29uc3QgZDIgPSBtb21lbnQoZGF0ZTIpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICBpZiAoZDEgPT0gZDIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkMSA+IGQyKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGRpZmZMb2NhbERhdGUoZGF0ZTE6IERhdGUgfCBzdHJpbmcsIGRhdGUyOiBEYXRlIHwgc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgLy8gZDEgPCBkMiB0aMOsIGLhurFuZyA9IC0xXG4gICAgICAgIGNvbnN0IGxvY2FsRGF0ZTEgPSAobmV3IERhdGUoZGF0ZTEpKS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgY29uc3QgbG9jYWxEYXRlMiA9IChuZXcgRGF0ZShkYXRlMikpLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICByZXR1cm4gdGhpcy5kaWZmRGF0ZShsb2NhbERhdGUxLCBsb2NhbERhdGUyKTtcbiAgICB9XG4gICAgY29tcGFyZVdpdGhOb3coZGF0ZTEpIHtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlRGF0ZShkYXRlMSwgY3VycmVudERhdGUpO1xuICAgIH1cblxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBhbnkpIHtcbiAgICAgICAgaWYgKGRhdGVTdHIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZGF0ZVN0ciB8fCBkYXRlU3RyID09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVN0cik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhc3luY0ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9yZGVyQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBfLnNvcnRCeShvYmosIHByb3ApO1xuICAgIH1cblxuICAgIGdyb3VwQnkob2JqOiBhbnlbXSwgcHJvcDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBfLmdyb3VwQnkob2JqLCBwcm9wKTtcbiAgICB9XG5cbiAgICBkaXN0aW5jdChhcnJheTogbnVtYmVyW10pIHtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZmxhZ3NbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFnc1thcnJheVtpXV0gPSB0cnVlO1xuICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgZGlzdGluY3RBcnJheShhcnJheTogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGFycmF5LmluZGV4T2YoaXRlbSkgPT09IGluZGV4KTtcbiAgICB9XG5cbiAgICBkaXN0aW5jdEZpZWxkKGFycmF5OiBhbnlbXSwgZmllbGQpIHtcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbXSwgb3V0cHV0ID0gW10sIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIHZhbHVlID0gYXJyYXlbaV1bZmllbGRdO1xuICAgICAgICAgICAgaWYgKGZsYWdzW3ZhbHVlXSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmxhZ3NbdmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGFkZERpc3RpbmN0KHNvdXJjZTogYW55W10sIGRlc3Q6IGFueVtdKSB7XG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgaWYgKCFkZXN0LnNvbWUocCA9PiBwID09IHMpKSB7XG4gICAgICAgICAgICAgICAgZGVzdC5wdXNoKHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuXG4gICAgLy8gSMOgbSBkdXnhu4d0IG3huqNuZywgbOG6pXkgcmEgcGjhuqduIHThu60gdGjhu49hIG3Do24gW2Z1bmNdIHbDoCB4w7NhIHBo4bqnbiB04butIMSRw7MgxJFpIGto4buPaSBt4bqjbmdcbiAgICAvLyAgICAgIGNhbGxCYWNrOiBvcHRpb25hbCBwaOG7pWMgduG7pSBuaHUgY+G6p3Uga2jDoWMga2hpIGR1eeG7h3QgxJHhur9uIGl0ZW0gdGjhu49hIG3Do25cbiAgICBnZXRBbmRSZW1vdmUoc291cmNlOiBhbnlbXSwgZnVuYzogRnVuY3Rpb24sIGNhbGxCYWNrPzogRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKGNhbGxCYWNrID09IG51bGwpIHtcbiAgICAgICAgICAgIGNhbGxCYWNrID0gaSA9PiBpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZ1bmMoc291cmNlW2ldKSkge1xuICAgICAgICAgICAgICAgIGNhbGxCYWNrKHNvdXJjZVtpXSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc291cmNlW2ldKTtcbiAgICAgICAgICAgICAgICBzb3VyY2Uuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvZ2dsZU1lbnUoKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZW51LWJ1dHRvbicpLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0cmluZy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBidWZmZXJWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGJ1ZmZlclZpZXdbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIGd1aWRFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGtp4buDbSB0cmEgeGVtIGNodeG7l2kgY8OzIHBo4bqjaSBt4buZdCBndWlkIGtow6FjIHbhu5tpIGPhuqMgZ3VpZEVtcHR5XG4gICAgICogQGRhdGUgOC8xMS8yMDIyIC0gMTE6NTE6MzEgQU1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBndWlkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNWYWxpZEd1aWQoZ3VpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gL14oPzpcXHt7MCwxfSg/OlswLTlhLWZBLUZdKXs4fS0oPzpbMC05YS1mQS1GXSl7NH0tKD86WzAtOWEtZkEtRl0pezR9LSg/OlswLTlhLWZBLUZdKXs0fS0oPzpbMC05YS1mQS1GXSl7MTJ9XFx9ezAsMX0pJC9nO1xuICAgICAgICByZXR1cm4gZ3VpZCAhPSBudWxsICYmIGd1aWQgIT09ICcnICYmIGd1aWQgIT09IHRoaXMuZ3VpZEVtcHR5KCkgJiYgcmVnZXgudGVzdChndWlkKTtcbiAgICB9XG5cbiAgICBnZXREaXNwbGF5VmFsKHZhbCkge1xuICAgICAgICBpZiAodmFsID09IHVuZGVmaW5lZCB8fCB2YWwgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaW1lU3BhbjogVHLhuqMgduG7gSB0cnVlIG7hur91IGhhaSBraG/huqNuZyB0aOG7nWkgZ2lhbiAoc3RhcnQsIGVuZClcbiAgICAgKiB2w6AgKGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCkgZ2lhbyBuaGF1LiBLaMO0bmcgdMOtbmhcbiAgICAgKiBjaOG7iSBnaWFvIG3hu5l0IMSR4bqndSBtw7p0LlxuICAgICAqL1xuICAgIGhhc0ludGVyc2VjdGlvbihzdGFydCwgZW5kLCBjb21wYXJlU3RhcnQsIGNvbXBhcmVFbmQpIHtcbiAgICAgICAgcmV0dXJuIChzdGFydCA8IGNvbXBhcmVTdGFydCAmJiBjb21wYXJlU3RhcnQgPCBlbmQpXG4gICAgICAgICAgICB8fCAoc3RhcnQgPCBjb21wYXJlRW5kICYmIGNvbXBhcmVFbmQgPCBlbmQpXG4gICAgICAgICAgICB8fCAoY29tcGFyZVN0YXJ0IDw9IHN0YXJ0ICYmIGVuZCA8PSBjb21wYXJlRW5kKTtcbiAgICB9XG5cbiAgICBoYXNJbnRlcnNlY3Rpb25EYXRlKHN0YXJ0LCBlbmQsIGNvbXBhcmVTdGFydCwgY29tcGFyZUVuZCwgZGF0ZUZvcm1hdCA9IHRydWUpIHtcbiAgICAgICAgaWYgKCFkYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gKG5ldyBEYXRlKHN0YXJ0KSA8IG5ldyBEYXRlKGNvbXBhcmVFbmQpICYmIG5ldyBEYXRlKGVuZCkgPiBuZXcgRGF0ZShjb21wYXJlU3RhcnQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydCA8IGNvbXBhcmVFbmQgJiYgZW5kID4gY29tcGFyZVN0YXJ0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T2Zmc2V0SW5NaW51dGUoc3RyRGF0ZTEsIHN0ckRhdGUyLCByb3VuZCA9IHRydWUpIHtcbiAgICAgICAgaWYgKCFzdHJEYXRlMSB8fCAhc3RyRGF0ZTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZDEgPSBuZXcgRGF0ZShzdHJEYXRlMSk7XG4gICAgICAgIGNvbnN0IGQyID0gbmV3IERhdGUoc3RyRGF0ZTIpO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSAoZDEuZ2V0VGltZSgpIC0gZDIuZ2V0VGltZSgpKSAvIDEwMDAgLyA2MDtcbiAgICAgICAgaWYgKHJvdW5kKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgIH1cblxuICAgIGZpbmRUZW1wbGF0ZUZyb21MaXN0KCRsaXN0OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj4sIHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAkbGlzdFxuICAgICAgICAgICAgPyAkbGlzdC5maW5kKCh0ZW1wbGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlLl9kZWYgJiYgdGVtcGxhdGUuX2RlZi5yZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9sZCB2ZXJzaW9uLCBub3QgaXZ5XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5fZGVmLnJlZmVyZW5jZXNbdGVtcGxhdGVOYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGVtcGxhdGUuX2RlY2xhcmF0aW9uVENvbnRhaW5lciAmJiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgaXZ5IHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5fZGVjbGFyYXRpb25UQ29udGFpbmVyLmxvY2FsTmFtZXNbMF0gPT0gdGVtcGxhdGVOYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgaXNTYW1lQXJyYXkoYXJyYXkxOiBhbnlbXSwgYXJyYXkyOiBhbnlbXSkge1xuICAgICAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPSBhcnJheTIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheTEpIHtcbiAgICAgICAgICAgIGlmICghYXJyYXkyLnNvbWUocSA9PiBxID09IGl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVsb2FkUGFnZSgpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIGlzTnVsbE9yV2hpdGVTcGFjZShpbnB1dDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPT0gdW5kZWZpbmVkICYmIGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQudHJpbSgpICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0VtcHR5QXJyYXlPck51bGwoYXJyYXk6IGFueVtdKSB7XG4gICAgICAgIGlmIChhcnJheSAhPT0gdW5kZWZpbmVkICYmIGFycmF5ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgbG9naWMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc10sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHZhbHVlSXNGaWVsZDogYm9vbGVhbiA9IGZhbHNlLCBzdHJpbmdDb21wYXJlT3B0aW9uOiBTdHJpbmdDb21wYXJlT3B0aW9uID0gU3RyaW5nQ29tcGFyZU9wdGlvbi5Ob3JtYWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgICAgICAgIHZhbHVlSXNGaWVsZCxcbiAgICAgICAgICAgIHN0cmluZ0NvbXBhcmVPcHRpb24sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlclY0KGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJDbGlwYm9hcmRTdG9yYWdlKCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlNUT1JBR0VfS0VZKTtcbiAgICB9XG5cbiAgICBjb3B5QnlTdG9yYWdlKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVksIHZhbCk7XG4gICAgICAgIHRoaXMuY29weU1lc3NhZ2UodmFsKTtcbiAgICB9XG5cbiAgICBwYXN0ZUJ5U3RvcmFnZSgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuU1RPUkFHRV9LRVkpO1xuICAgIH1cblxuICAgIGNvcHlNZXNzYWdlKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNlbEJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIHNlbEJveC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIHNlbEJveC5zdHlsZS5sZWZ0ID0gJzAnO1xuICAgICAgICBzZWxCb3guc3R5bGUudG9wID0gJzAnO1xuICAgICAgICBzZWxCb3guc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgICAgc2VsQm94LnZhbHVlID0gdmFsO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNlbEJveCk7XG4gICAgICAgIHNlbEJveC5mb2N1cygpO1xuICAgICAgICBzZWxCb3guc2VsZWN0KCk7XG4gICAgICAgIHNlbEJveC5zZXRTZWxlY3Rpb25SYW5nZSgwLCA5OTk5OSk7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2VsQm94KTtcbiAgICB9XG5cbiAgICBuZXdCaW5kaW5nRmlsdGVyKGNvbHVtbjogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHNvdXJjZUZpZWxkOiBzdHJpbmcsIHN1YkZpZWxkPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4sXG4gICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgIHNvdXJjZUZpZWxkLFxuICAgICAgICAgICAgc3ViRmllbGQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1yciBTdGFycjogJHt0aGlzLnRuUHJlZml4TG9nfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuXG4gICAgbG9nSW5mbyhtc2cpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgTXJyIFN0YXJyOiAke3RoaXMudG5QcmVmaXhMb2d9YCk7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmluZm8obXNnKTtcbiAgICB9XG5cbiAgICBsb2dJbmZvU2ltcGxlKG1zZykge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5pbmZvKGBNcnIgU3RhcnI6ICR7bXNnfWApO1xuICAgIH07XG5cbiAgICBtYXRjaFJ1bGVTaG9ydChzdHIsIHJ1bGUpIHtcbiAgICAgICAgY29uc3QgZXNjYXBlUmVnZXggPSAoc3RyKSA9PiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCdeJyArIHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJykgKyAnJCcpLnRlc3Qoc3RyKTtcbiAgICB9XG5cbiAgICAvLyBFeHBsYW5hdGlvbiBjb2RlXG4gICAgbWF0Y2hSdWxlRXhwbChzdHIsIHJ1bGUpIHtcbiAgICAgICAgLy8gZm9yIHRoaXMgc29sdXRpb24gdG8gd29yayBvbiBhbnkgc3RyaW5nLCBubyBtYXR0ZXIgd2hhdCBjaGFyYWN0ZXJzIGl0IGhhc1xuICAgICAgICBjb25zdCBlc2NhcGVSZWdleCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8XFxbXFxdXFwvXFxcXF0pL2csICdcXFxcJDEnKTtcblxuICAgICAgICAvLyBcIi5cIiAgPT4gRmluZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGV4Y2VwdCBuZXdsaW5lIG9yIGxpbmUgdGVybWluYXRvclxuICAgICAgICAvLyBcIi4qXCIgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHRoYXQgY29udGFpbnMgemVybyBvciBtb3JlIGNoYXJhY3RlcnNcbiAgICAgICAgcnVsZSA9IHJ1bGUuc3BsaXQoJyonKS5tYXAoZXNjYXBlUmVnZXgpLmpvaW4oJy4qJyk7XG5cbiAgICAgICAgLy8gXCJeXCIgID0+IE1hdGNoZXMgYW55IHN0cmluZyB3aXRoIHRoZSBmb2xsb3dpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBpdFxuICAgICAgICAvLyBcIiRcIiAgPT4gTWF0Y2hlcyBhbnkgc3RyaW5nIHdpdGggdGhhdCBpbiBmcm9udCBhdCB0aGUgZW5kIG9mIGl0XG4gICAgICAgIHJ1bGUgPSAnXicgKyBydWxlICsgJyQnO1xuXG4gICAgICAgIC8vIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QgZm9yIG1hdGNoaW5nIHN0cmluZ1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocnVsZSk7XG5cbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGl0IGZpbmRzIGEgbWF0Y2gsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KHN0cik7XG4gICAgfVxuXG4gICAgZ2V0UmVzcG9uc2VSZXN1bHRGcm9tRXhjZXB0aW9uKGVycjogYW55KTogUmVzcG9uc2VSZXN1bHQge1xuICAgICAgICByZXR1cm4gPGFueT57XG4gICAgICAgICAgICBlcnJvcjogJ0VYQ0VQVElPTicsXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJyxcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBlcnJvckRldGFpbDogZXJyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlzU3RyaW5nKHZhbCkge1xuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWwgPT09IHZhbC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldFRpbWUodGltZVNwYW46IHN0cmluZykge1xuICAgICAgICBpZiAoIXRpbWVTcGFuKSByZXR1cm4gdGltZVNwYW47XG4gICAgICAgIGNvbnN0IGFyclRpbWVJbmZvID0gdGltZVNwYW4uc3BsaXQoJzonKTtcbiAgICAgICAgcmV0dXJuIGAke2FyclRpbWVJbmZvWzBdfToke2FyclRpbWVJbmZvWzFdfWA7XG4gICAgfVxuXG4gICAgYXBwZW5kU3RyaW5nV2l0aFNwYWNlKG9yaWdpbmFsOiBzdHJpbmcsIGFwcGVuZDogc3RyaW5nLCBjb25uZWN0b3I/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGAke29yaWdpbmFsfWAgKyAoYXBwZW5kICYmIGFwcGVuZCAhPT0gJycgPyAoYCAke2Nvbm5lY3RvciA/IGNvbm5lY3RvciA6ICcnfSBgKSArIGFwcGVuZCA6ICcnKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdEluZGV4PFQ+KGFycmF5OiBBcnJheTxUPiwgcHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIG9iajogVFtdKSA9PiBib29sZWFuKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGwgPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsLS0pIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbbF0sIGwsIGFycmF5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBnZXRTdGFydERheUVuZERheVdlZWsoZGF0ZSA9IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgY29uc3QgdG1wRGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9EYXRlU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBkYXRlRGlmZiA9IHRtcERhdGUuZ2V0RGF0ZSgpIC0gdG1wRGF0ZS5nZXREYXkoKSArICh0bXBEYXRlLmdldERheSgpID09IDAgPyAtNiA6IDEpO1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZSh0bXBEYXRlLnNldERhdGUoZGF0ZURpZmYpKTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKHRtcERhdGUuc2V0RGF0ZShkYXRlRGlmZiArIDYpKSk7XG4gICAgICAgIGlmIChzdGFydERhdGUuZ2V0RGF0ZSgpID4gZW5kRGF0ZS5nZXREYXRlKCkgJiYgc3RhcnREYXRlLmdldE1vbnRoKCkgPT0gZW5kRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICBlbmREYXRlLnNldE1vbnRoKGVuZERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc3RhcnREYXRlLCBlbmREYXRlXTtcbiAgICB9XG5cbiAgICBnZXRTdGFydERheUVuZERheUluTW9udGgobW9udGg/OiBudW1iZXIsIHllYXI/OiBudW1iZXIpIHtcbiAgICAgICAgbW9udGggPSBtb250aCA/PyB0aGlzLmdldEN1cnJlbnRNb250aCgpO1xuICAgICAgICB5ZWFyID0geWVhciA/PyB0aGlzLmdldEN1cnJlbnRZZWFyKCk7XG4gICAgICAgIHJldHVybiBbbmV3IERhdGUoeWVhciwgbW9udGgsIDEpLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApXTtcbiAgICB9XG5cbiAgICBhZGRIdG1sQ29udGVudFdpdGhUYWdBcm91bmQobHN0VGFnOiBhbnksIGNsYXNzTmFtZSA9ICcnLCB0YWdBcm91bmQ6IHN0cmluZyA9ICdkaXYnLCBhdHRyaWJ1dGVzOiBhbnkgPSB7fSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsc3RUYWcpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0aGlzLmFkZEh0bWxDb250ZW50KGl0ZW0uY29udGVudCwgaXRlbS5jbGFzc05hbWUsIGl0ZW0udGFnTmFtZSwgaXRlbS5hdHRyaWJ1dGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRIdG1sQ29udGVudChyZXN1bHQsIGNsYXNzTmFtZSwgdGFnQXJvdW5kLCBhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICBhZGRIdG1sQ29udGVudChjb250ZW50OiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nID0gJycsIHRhZ05hbWU6IHN0cmluZyA9ICdkaXYnLCBhdHRyaWJ1dGVzOiBhbnkgPSB7fSkge1xuICAgICAgICBsZXQgc3RyQXR0cmlidXRlID0gJyc7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBzdHJBdHRyaWJ1dGUgKz0gYCAke2tleX09JyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDwke3RhZ05hbWV9IGNsYXNzPScke2NsYXNzTmFtZX0nICR7c3RyQXR0cmlidXRlfT4ke2NvbnRlbnR9PC8ke3RhZ05hbWV9PmA7XG4gICAgfVxuXG5cbiAgICBwYXJzZVN0cmluZ1RvQXJyYXkobW9kZWw6IGFueSwgZmllbGRzOiBzdHJpbmcsIHNwbGl0Qnk6IHN0cmluZyA9ICcsJykge1xuICAgICAgICBpZiAoIW1vZGVsIHx8ICFmaWVsZHMpIHJldHVybjtcbiAgICAgICAgY29uc3QgbHN0RmllbGQgPSBmaWVsZHMuc3BsaXQoJywnKTtcbiAgICAgICAgbHN0RmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAobW9kZWxbZmllbGRdICYmICF0aGlzLmlzRW1wdHlBcnJheU9yTnVsbChtb2RlbFtmaWVsZF0pKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbZmllbGRdID0gbW9kZWxbZmllbGRdLnNwbGl0KHNwbGl0QnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbZmllbGRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhcnNlQXJyYXlUb1N0cmluZyhkYXRhOiBhbnksIGZpZWxkczogc3RyaW5nLCBzcGxpdEJ5OiBzdHJpbmcgPSAnLCcpIHtcbiAgICAgICAgaWYgKCFkYXRhIHx8ICFmaWVsZHMpIHJldHVybjtcbiAgICAgICAgY29uc3QgbHN0RmllbGQgPSBmaWVsZHMuc3BsaXQoJywnKTtcbiAgICAgICAgbHN0RmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YVtmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShkYXRhW2ZpZWxkXSkgJiYgIXRoaXMuaXNFbXB0eUFycmF5T3JOdWxsKGRhdGFbZmllbGRdKSkge1xuICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gZGF0YVtmaWVsZF0uam9pbihzcGxpdEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlzTW9yZVRoYW5EYXlzRnJvbU5vdyhkdDogRGF0ZSwgZGF5czogbnVtYmVyID0gMSkge1xuICAgICAgICByZXR1cm4gbW9tZW50KG5ldyBEYXRlKCkpLmRpZmYoZHQsICdkYXlzJykgPiAoZGF5cyAtIDEpO1xuICAgIH1cblxuICAgIGFkZENvbnRyb2xSZWFkb25seShmaWVsZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nLCBtZFdpZHRoID0gNiwgaXNIb3Jpem9udGFsbHlMYWJlbCA9IHRydWUsIGZ1bmNNb2RpZnlTY2hlbWE/OiAoc2NoZW1hOiBUZXh0Q29udHJvbFNjaGVtYSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IFRleHRDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgIGxhYmVsOiBsYWJlbCxcbiAgICAgICAgICAgIGlzSHRtbExhYmVsOiB0cnVlLFxuICAgICAgICAgICAgaXNSZWFkb25seTogdHJ1ZSxcbiAgICAgICAgICAgIG1kV2lkdGg6IG1kV2lkdGgsXG4gICAgICAgICAgICBpc0hvcml6b250YWxseUxhYmVsOiBpc0hvcml6b250YWxseUxhYmVsLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGZ1bmNNb2RpZnlTY2hlbWEpIHtcbiAgICAgICAgICAgIGZ1bmNNb2RpZnlTY2hlbWEoY29udHJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgfVxuXG4gICAgdHJ5UGFyc2VKc29uKGRhdGE6IGFueSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBKU09OLnBhcnNlKGRhdGEpIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRhdGEgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb252ZXJ0U3RyaW5nVG9VblNpZ24oc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgICAgICAgY29uc3Qgc2lnbmVkQ2hhcnMgPSAnw6DhuqPDo8Oh4bqhxIPhurHhurPhurXhuq/hurfDouG6p+G6qeG6q+G6peG6rcSRw6jhurvhur3DqeG6ucOq4buB4buD4buF4bq/4buHw6zhu4nEqcOt4buLw7Lhu4/DtcOz4buNw7Thu5Phu5Xhu5fhu5Hhu5nGoeG7neG7n+G7oeG7m+G7o8O54bunxanDuuG7pcaw4bur4but4buv4bup4bux4buz4bu34bu5w73hu7XDgOG6osODw4HhuqDEguG6sOG6suG6tOG6ruG6tsOC4bqm4bqo4bqq4bqk4bqsxJDDiOG6uuG6vMOJ4bq4w4rhu4Dhu4Lhu4Thur7hu4bDjOG7iMSow43hu4rDkuG7jsOVw5Phu4zDlOG7kuG7lOG7luG7kOG7mMag4buc4bue4bug4bua4buiw5nhu6bFqMOa4bukxq/hu6rhu6zhu67hu6jhu7Dhu7Lhu7bhu7jDneG7tCc7XG4gICAgICAgIGNvbnN0IHVuc2lnbmVkQ2hhcnMgPSAnYWFhYWFhYWFhYWFhYWFhYWFkZWVlZWVlZWVlZWVpaWlpaW9vb29vb29vb29vb29vb29vdXV1dXV1dXV1dXV5eXl5eUFBQUFBQUFBQUFBQUFBQUFBREVFRUVFRUVFRUVFSUlJSUlPT09PT09PT09PT09PT09PT1VVVVVVVVVVVVVVWVlZWVknO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgnWycgKyBzaWduZWRDaGFycyArICddJywgJ2cnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc3RyLnJlcGxhY2UocGF0dGVybiwgZnVuY3Rpb24gKHAsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bnNpZ25lZENoYXJzLmNoYXJBdChzaWduZWRDaGFycy5pbmRleE9mKHApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0Q2lyY3VsYXJSZXBsYWNlciA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICAgIHJldHVybiAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBlbWJlZFNjcmlwdChzY3JpcHRDb25maWcpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBzY3JpcHRFbGVtZW50LnNyYyA9IHNjcmlwdENvbmZpZy5zcmM7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBzY3JpcHRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRDb25maWcuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcHJvcCAhPT0gJ3NyYycpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRFbGVtZW50LnNldEF0dHJpYnV0ZShwcm9wLCBzY3JpcHRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0RWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0TmFtZU9mV2Vla2RheXMoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCB3ZWVrZGF5cyA9IFsnQ2h1zIkgbmhhzKPMgnQnLCAnVGh1zJvMgSBoYWknLCAnVGh1zJvMgSBiYScsICdUaHXMm8yBIHR1zJsnLCAnVGh1zJvMgSBuYcyGbScsICdUaHXMm8yBIHNhzIF1JywgJ1RodcybzIEgYmHMiXknXTtcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzW2RhdGUuZ2V0RGF5KCldO1xuICAgIH1cblxuICAgIGdldFF1YXJ0ZXJGcm9tRGF0ZShkYXRlPzogRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIGlmICghZGF0ZSkge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGRhdGUuZ2V0TW9udGgoKSArIDMpIC8gMyk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVJbmRleChpbmRleCwgbWF4TGVuZ3RoOiBudW1iZXIgPSA4KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0luZGV4ID0gYCR7aW5kZXh9YDtcbiAgICAgICAgY29uc3QgZGlmZiA9IChtYXhMZW5ndGggPCBzdHJpbmdJbmRleC5sZW5ndGgpID8gMCA6IG1heExlbmd0aCAtIHN0cmluZ0luZGV4Lmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGAke0FycmF5KGRpZmYpLm1hcCh4ID0+ICcnKS5qb2luKCcgJyl9JHtzdHJpbmdJbmRleH1gO1xuICAgIH1cblxuICAgIGRhdGFVUkl0b0Jsb2IoZGF0YVVSSSkge1xuICAgICAgICBjb25zdCBieXRlU3RyaW5nID0gd2luZG93LmF0b2IoZGF0YVVSSSk7XG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGludDhBcnJheVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ludDhBcnJheV0sIHsgdHlwZTogJ2ltYWdlL3BuZycgfSk7XG4gICAgICAgIHJldHVybiBibG9iO1xuICAgIH1cbiAgICBnZXRJbm5lclRleHQoc3RyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHN0cjtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuaW5uZXJUZXh0O1xuICAgIH1cbiAgICByZW5kZXJUaW1lc3BhbihkYXRldGltZTogYW55KSB7XG4gICAgICAgIGlmICghZGF0ZXRpbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYXJyVGltZSA9IGRhdGV0aW1lLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YXJyVGltZVswXX06JHthcnJUaW1lWzFdfWA7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWF0aFJvdW5kKHZhbHVlOiBudW1iZXIsIGRpZ2l0czogbnVtYmVyID0gMCkge1xuICAgICAgICBsZXQgcG4gPSAxO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlIChkaWdpdHMgPiAwICYmIGkgPCBkaWdpdHMpIHtcbiAgICAgICAgICAgIHBuID0gcG4gKiAxMDtcbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIHBuKSAvIHBuO1xuICAgIH1cbiAgICBjb252ZXJ0VG9Sb21hbk51bWJlcihudW1iKSB7XG4gICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgaWYgKCFudW1iIHx8IGlzTmFOKG51bWIpIHx8IG51bWIgPCAxKSByZXR1cm4gc3RyO1xuICAgICAgICBjb25zdCByb21hbiA9IHsgTTogMTAwMCwgQ006IDkwMCwgRDogNTAwLCBDRDogNDAwLCBDOiAxMDAsIFhDOiA5MCwgTDogNTAsIFhMOiA0MCwgWDogMTAsIElYOiA5LCBWOiA1LCBJVjogNCwgSTogMSB9O1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMocm9tYW4pKSB7XG4gICAgICAgICAgICBjb25zdCBxID0gTWF0aC5mbG9vcihudW1iIC8gcm9tYW5baV0pO1xuICAgICAgICAgICAgbnVtYiAtPSBxICogcm9tYW5baV07XG4gICAgICAgICAgICBzdHIgKz0gaS5yZXBlYXQocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgdHJhbnNmb3JtTG9jYWxEYXRlKHZhbHVlOiBEYXRlfHN0cmluZ3xudW1iZXIsIGZvcm1hdDpzdHJpbmcgPSAnZGQvTU0veXl5eScpe1xuICAgICAgICBpZighdmFsdWUpIHJldHVybiAnJztcbiAgICAgICAgY29uc3QgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ3ZpLVZOJyk7XG4gICAgICAgIHJldHVybiBkYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsZm9ybWF0KTtcbiAgICB9XG59XG4iXX0=
|