tnx-shared 5.0.53 → 5.0.55
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 +38 -13
- 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/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +4 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +3 -3
- package/esm2015/models/grid-info.js +1 -1
- package/esm2015/services/crud.service.js +22 -4
- package/esm2015/services/notifier.service.js +2 -2
- package/fesm2015/tnx-shared.js +28 -6
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +1 -0
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +2 -2
- package/services/crud.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -94,4 +94,4 @@ export class Filter {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1pbmZvLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbIm1vZGVscy9ncmlkLWluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CO0FBQ25CLHdDQUF3QztBQUN4QyxzQ0FBc0M7QUFDdEMsc0ZBQXNGO0FBQ3RGLCtDQUErQzs7QUFJL0MsNERBQTREO0FBQzVELHNEQUFzRDtBQUN0RCxZQUFZO0FBQ1osUUFBUTtBQUNSLElBQUk7QUFFSixNQUFNLE9BQU8sUUFBUTtJQTBCakIsWUFBWSxJQUFlO1FBeEIzQixZQUFPLEdBQWEsRUFBRSxDQUFDO1FBQ3ZCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsYUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUF1QmhDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBekJELGNBQWMsQ0FBRSxLQUFLLEVBQUUsZUFBd0IsS0FBSztRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssRUFBRTtnQkFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLElBQUksWUFBWSxFQUFFO29CQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDN0I7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtJQUNMLENBQUM7SUFDSyxZQUFZLENBQUUsS0FBSyxFQUFFLFVBQW9DOztZQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxFQUFFO29CQUNoQyxNQUFNLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLE1BQU07aUJBQ1Q7YUFDSjtRQUNMLENBQUM7S0FBQTtDQU1KO0FBRUQsb0NBQW9DO0FBQ3BDLDJCQUEyQjtBQUMzQix1RUFBdUU7QUFDdkUsb0NBQW9DO0FBQ3BDLDJCQUEyQjtBQUMzQixRQUFRO0FBQ1IsMkJBQTJCO0FBQzNCLGtFQUFrRTtBQUNsRSxtRUFBbUU7QUFDbkUsOENBQThDO0FBQzlDLFlBQVk7QUFDWiwyQkFBMkI7QUFDM0IsUUFBUTtBQUNSLDJCQUEyQjtBQUMzQixvRUFBb0U7QUFDcEUseUNBQXlDO0FBQ3pDLDJCQUEyQjtBQUMzQixRQUFRO0FBQ1IsMkJBQTJCO0FBQzNCLDZFQUE2RTtBQUM3RSx3Q0FBd0M7QUFDeEMsMkJBQTJCO0FBQzNCLFFBQVE7QUFDUixJQUFJO0FBRUosTUFBTSxPQUFPLFFBQVE7SUFHakIsWUFBWSxJQUFlO1FBRjNCLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRVYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtJQUNMLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxJQUFJO0lBR2IsWUFBWSxJQUFXO1FBRnZCLFVBQUssR0FBRyxJQUFJLENBQUM7UUFDYixRQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRUosS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtJQUNMLENBQUM7Q0FDSjtBQUNELE1BQU0sT0FBTyxNQUFNO0lBVWYsWUFBWSxJQUFhO1FBRHpCLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFFcEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IFRlc3QgbGF0ZXJcclxuLy8gZXhwb3J0IGZ1bmN0aW9uIGV4dGVuc2lvbihjdHI6IGFueSkge1xyXG4vLyAgICAgbGV0IG9yaWdpbmFsRnVuY3Rpb246IEZ1bmN0aW9uO1xyXG4vLyAgICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xyXG4vLyAgICAgICAgIG9yaWdpbmFsRnVuY3Rpb24gPSBkZXNjcmlwdG9yLnZhbHVlO1xyXG5cclxuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuXHJcbi8vICAgICAgICAgY3RyLnByb3RvdHlwZVtwcm9wZXJ0eUtleV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4vLyAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbih0aGlzLCAuLi5hcmdzKTtcclxuLy8gICAgICAgICB9XHJcbi8vICAgICB9XHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkSW5mbyB7XHJcbiAgICBmaWVsZHM/OiBzdHJpbmc7XHJcbiAgICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xyXG4gICAgc29ydHM6IFNvcnRbXSA9IFtdO1xyXG4gICAgcGFnZUluZm86IFBhZ2VJbmZvID0gbmV3IFBhZ2VJbmZvKCk7XHJcbiAgICBnZXRGaWx0ZXJWYWx1ZT8oZmllbGQsIHJlbW92ZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcnMpIHJldHVybjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2ldLmZpZWxkID09IGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmlsdGVyc1tpXS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgYXN5bmMgbW9kaWZ5RmlsdGVyPyhmaWVsZCwgZnVuY01vZGlmeTogKGZpbHRlcjogRmlsdGVyKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcnMpIHJldHVybjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2ldLmZpZWxkID09IGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmdW5jTW9kaWZ5KHRoaXMuZmlsdGVyc1tpXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKGluaXQ/OiBHcmlkSW5mbykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGluaXQpIHtcclxuICAgICAgICAgICAgdGhpc1trZXldID0gaW5pdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLy8gZXhwb3J0IGNsYXNzIEdyaWRJbmZvRXh0ZW5zaW9ucyB7XHJcbi8vICAgICBAZXh0ZW5zaW9uKEdyaWRJbmZvKVxyXG4vLyAgICAgc3RhdGljIHNldEZpZWxkcyh0aGlzQXJnczogR3JpZEluZm8sIGZpZWxkczogc3RyaW5nKTogR3JpZEluZm8ge1xyXG4vLyAgICAgICAgIHRoaXNBcmdzLmZpZWxkcyA9IGZpZWxkcztcclxuLy8gICAgICAgICByZXR1cm4gdGhpc0FyZ3M7XHJcbi8vICAgICB9XHJcbi8vICAgICBAZXh0ZW5zaW9uKEdyaWRJbmZvKVxyXG4vLyAgICAgc3RhdGljIGZpZWxkKHRoaXNBcmdzOiBHcmlkSW5mbywgZmllbGQ6IHN0cmluZyk6IEdyaWRJbmZvIHtcclxuLy8gICAgICAgICBpZiAoIXRoaXNBcmdzLmZpZWxkcy5zcGxpdCgnLCcpLnNvbWUoeCA9PiB4ID09IGZpZWxkKSkge1xyXG4vLyAgICAgICAgICAgICB0aGlzQXJncy5maWVsZHMgKz0gJywnICsgZmllbGQ7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICAgIHJldHVybiB0aGlzQXJncztcclxuLy8gICAgIH1cclxuLy8gICAgIEBleHRlbnNpb24oR3JpZEluZm8pXHJcbi8vICAgICBzdGF0aWMgZmlsdGVyKHRoaXNBcmdzOiBHcmlkSW5mbywgZmlsdGVyOiBGaWx0ZXIpOiBHcmlkSW5mbyB7XHJcbi8vICAgICAgICAgdGhpc0FyZ3MuZmlsdGVycy5wdXNoKGZpbHRlcik7XHJcbi8vICAgICAgICAgcmV0dXJuIHRoaXNBcmdzO1xyXG4vLyAgICAgfVxyXG4vLyAgICAgQGV4dGVuc2lvbihHcmlkSW5mbylcclxuLy8gICAgIHN0YXRpYyBzZXRQYWdlSW5mbyh0aGlzQXJnczogR3JpZEluZm8sIHBhZ2VJbmZvOiBQYWdlSW5mbyk6IEdyaWRJbmZvIHtcclxuLy8gICAgICAgICB0aGlzQXJncy5wYWdlSW5mbyA9IHBhZ2VJbmZvO1xyXG4vLyAgICAgICAgIHJldHVybiB0aGlzQXJncztcclxuLy8gICAgIH1cclxuLy8gfVxyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2VJbmZvIHtcclxuICAgIHBhZ2UgPSAxO1xyXG4gICAgcGFnZVNpemUgPSAxMDtcclxuICAgIGNvbnN0cnVjdG9yKGluaXQ/OiBQYWdlSW5mbykge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGluaXQpIHtcclxuICAgICAgICAgICAgdGhpc1trZXldID0gaW5pdFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNvcnQge1xyXG4gICAgZmllbGQgPSAnaWQnO1xyXG4gICAgZGlyID0gMTtcclxuICAgIGNvbnN0cnVjdG9yKGluaXQ/OiBTb3J0KSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzW2tleV0gPSBpbml0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXIge1xyXG4gICAgZmllbGQ/OiBzdHJpbmc7XHJcbiAgICBsb2dpYz86ICdvcicgfCAnYW5kJztcclxuICAgIHNvdXJjZUZpZWxkPzogc3RyaW5nO1xyXG4gICAgc3ViRmllbGQ/OiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgICBmdW5jR2V0VmFsdWU/OiAoaXRlbSkgPT4gdm9pZDtcclxuICAgIG1vZGlmeVZhbHVlPzogKGl0ZW0pID0+IHZvaWQ7XHJcbiAgICB2YWx1ZT86IHN0cmluZztcclxuICAgIG9wZXJhdG9yPzogT3BlcmF0b3I7XHJcbiAgICBmaWx0ZXJzPzogRmlsdGVyW10gPSBbXTtcclxuICAgIGNvbnN0cnVjdG9yKGluaXQ/OiBGaWx0ZXIpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBpbml0KSB7XHJcbiAgICAgICAgICAgIHRoaXNba2V5XSA9IGluaXRba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -564,14 +564,24 @@ export class CrudService {
|
|
|
564
564
|
if (model.hasOwnProperty(sourceField)) {
|
|
565
565
|
valueFilter = model[sourceField];
|
|
566
566
|
if (canAccessSubField(valueFilter)) {
|
|
567
|
-
valueFilter
|
|
567
|
+
if (isArray(valueFilter)) {
|
|
568
|
+
valueFilter = valueFilter.map(x => x[subField]);
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
valueFilter = valueFilter[subField];
|
|
572
|
+
}
|
|
568
573
|
}
|
|
569
574
|
}
|
|
570
575
|
else if (rootModel) {
|
|
571
576
|
if (rootModel.hasOwnProperty(sourceField)) {
|
|
572
577
|
valueFilter = rootModel[sourceField];
|
|
573
578
|
if (canAccessSubField(valueFilter)) {
|
|
574
|
-
valueFilter
|
|
579
|
+
if (isArray(valueFilter)) {
|
|
580
|
+
valueFilter = valueFilter.map(x => x[subField]);
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
valueFilter = valueFilter[subField];
|
|
584
|
+
}
|
|
575
585
|
}
|
|
576
586
|
}
|
|
577
587
|
else {
|
|
@@ -587,7 +597,12 @@ export class CrudService {
|
|
|
587
597
|
}
|
|
588
598
|
}
|
|
589
599
|
if (canAccessSubField(temp)) {
|
|
590
|
-
|
|
600
|
+
if (isArray(temp)) {
|
|
601
|
+
valueFilter = temp.map(x => x[subField]);
|
|
602
|
+
}
|
|
603
|
+
else {
|
|
604
|
+
valueFilter = temp[subField];
|
|
605
|
+
}
|
|
591
606
|
}
|
|
592
607
|
}
|
|
593
608
|
}
|
|
@@ -600,6 +615,9 @@ export class CrudService {
|
|
|
600
615
|
valueFilter = tmpFilter.funcGetValue(valueFilter);
|
|
601
616
|
}
|
|
602
617
|
tmpFilter.value = JSON.stringify(valueFilter);
|
|
618
|
+
if (tmpFilter.modifyValue) {
|
|
619
|
+
valueFilter = tmpFilter.modifyValue(valueFilter);
|
|
620
|
+
}
|
|
603
621
|
tmpFilter.filters = [];
|
|
604
622
|
if (filter.logic && filter.filters) {
|
|
605
623
|
filter.filters.forEach(f => this.deQuyReplaceValue(tmpFilter.filters, f, model, rootModel));
|
|
@@ -759,4 +777,4 @@ CrudService.ctorParameters = () => [
|
|
|
759
777
|
{ type: DatePipe },
|
|
760
778
|
{ type: NotifierService }
|
|
761
779
|
];
|
|
762
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUF5QixlQUFlLEVBQW9CLFFBQVEsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUNZLFNBQW1CLEVBQ25CLGlCQUFtQyxFQUNuQyxRQUFrQixFQUNsQixnQkFBaUM7UUFIakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixD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RUFBRTtvQkFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZFLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTt3QkFDakIsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hELGVBQWUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ3RDO2lCQUNKO1lBRUwsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7Ozs7WUEveEJKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBaEJvQixRQUFRO1lBQ3BCLGdCQUFnQjtZQUZoQixRQUFRO1lBYVIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzTGl0ZXJhbE9iamVjdCB9IGZyb20gJy4uL2NsYXNzZXMvZW52aXJvbm1lbnQtc2NoZW1hJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db250cm9sU2NoZW1hLCBEcm9wZG93bk9wdGlvbnMsIEdldFJlZkRhdGFTY2hlbWEsIE9wZXJhdG9yLCBSZWZGaWVsZCwgVHJlZURhdGFPcHRpb24gfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzIH0gZnJvbSAnLi4vbW9kZWxzL3dvcmtmbG93LWNvcmUtc3RhdHVzLmVudW0nO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENydWRTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIHJlbmRlckRhdGVUaW1lKGRhdGV0aW1lLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2Zyb21Ob3cnID0gJ2Zyb21Ob3cnKSB7XHJcbiAgICAgICAgaWYgKCFkYXRldGltZSkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGRhdGV0aW1lID0gbmV3IERhdGUoZGF0ZXRpbWUgKyAnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbm9ybWFsJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5IEhIOm1tJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBub3c6IGFueSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgbWlsaXNlY29uZCA9IG5vdyAtIGRhdGV0aW1lO1xyXG4gICAgICAgIGxldCB0ZXh0MSA9ICd0csaw4bubYycsIHRleHQyID0gJ0jDtG0gcXVhJztcclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDApIHtcclxuICAgICAgICAgICAgdGV4dDEgPSAnbuG7r2EnLCB0ZXh0MiA9ICdOZ8OgeSBtYWknO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIDMwIGdpw6J5XHJcbiAgICAgICAgICAgIHJldHVybiBgVsOgaSBnacOieSAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgOTAwMDApIHtcclxuICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxyXG4gICAgICAgICAgICByZXR1cm4gYE3hu5l0IHBow7p0ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcclxuICAgICAgICAgICAgLy8gNSBwaMO6dFxyXG4gICAgICAgICAgICByZXR1cm4gYFbDoGkgcGjDunQgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDM2MDAwMDApIHtcclxuICAgICAgICAgICAgLy8gZMaw4bubaSAxIHRp4bq/bmdcclxuICAgICAgICAgICAgcmV0dXJuIGAke01hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApfSBwaMO6dCAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMTgwMDAwMDApIHtcclxuICAgICAgICAgICAgLy8gZMaw4bubaSA1IHRp4bq/bmdcclxuICAgICAgICAgICAgcmV0dXJuIGBWw6BpIGdp4budICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyBkxrDhu5tpIDEgbmfDoHlcclxuICAgICAgICAgICAgaWYgKGRhdGV0aW1lLmdldERhdGUoKSA9PSBub3cuZ2V0RGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7TWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKX0gZ2nhu50gJHt0ZXh0MX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0ZXh0Mn0gbMO6YyAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dEhvdXJBbmRNaW51dGUgPSBgIGzDumMgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ0hIOm1tJyl9YDtcclxuICAgICAgICBpZiAoZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcclxuICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlRGlmZiA9IG5vdy5nZXREYXRlKCkgLSBkYXRldGltZS5nZXREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRlRGlmZiA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGV4dDJ9JHt0ZXh0SG91ckFuZE1pbnV0ZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRlRGlmZiA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYEhhaSBuZ8OgeSAke3RleHQxfSR7dGV4dEhvdXJBbmRNaW51dGV9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0ZURpZmYgPT0gMykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBCYSBuZ8OgeSAke3RleHQxfSR7dGV4dEhvdXJBbmRNaW51dGV9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgICAgICAgIGRhdGV0aW1lLFxyXG4gICAgICAgICAgICAnZGQvTU0veXl5eSBISDptbSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlckRhdGUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnbm9ybWFsJykge1xyXG4gICAgICAgIGlmICghZGF0ZXRpbWUpIHJldHVybiAnJztcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGV0aW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93OiBhbnkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxyXG4gICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXlzID0gZGF0ZXRpbWUuZ2V0RGF0ZSgpIC0gbm93LmdldERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKGRheXMgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIw7RtIG5heSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ05nw6B5IG1haSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIw7RtIHF1YSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0hhaSBuZ8OgeSBu4buvYSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAtMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgdHLGsOG7m2MnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gMykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSBu4buvYSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAtMykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSB0csaw4bubYyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eScpO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVDb250cm9sQW5kTGFiZWwoKSB7IH1cclxuXHJcbiAgICBidWlsZEZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlckRhdGUoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogRGF0ZSk6IEZpbHRlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3IsIHZhbHVlOiB0aGlzLmdldERhdGUodmFsdWUpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXREYXRlKCl9LyR7dmFsdWUuZ2V0TW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyRGF0ZUluTGlzdFJhbmdlKGZpZWxkOiBzdHJpbmcsIGFyck1pbk1heDogRGF0ZVtdW10sIG9wZXJhdG9yTGVmdDogc3RyaW5nID0gJ2d0ZScsIG9wZXJhdG9yUmlnaHQ6IHN0cmluZyA9ICdsdGUnKTogRmlsdGVyIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IFtdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXJyTWluTWF4LmZvckVhY2gobWluTWF4ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RyU3RhcnQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMF0pO1xyXG4gICAgICAgICAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMV0pO1xyXG4gICAgICAgICAgICByZXN1bHQuZmlsdGVycy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsIHN0clN0YXJ0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlcihmaWVsZCwgT3BlcmF0b3IubG93ZXJUaGFuRXF1YWwsIHN0ckVuZClcclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nRGF0ZVZhbHVlKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldFVUQ0RhdGUoKX0vJHt2YWx1ZS5nZXRVVENNb250aCgpICsgMX0vJHt2YWx1ZS5nZXRVVENGdWxsWWVhcigpfSAke3ZhbHVlLmdldFVUQ0hvdXJzKCl9OiR7dmFsdWUuZ2V0VVRDTWludXRlcygpfToke3ZhbHVlLmdldFVUQ1NlY29uZHMoKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkTXVsdGlGaWx0ZXJDb250YWlucyhmaWVsZHM6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nKTogRmlsdGVyIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xyXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlckNvbnRhaW5NdWx0aVZhbHVlcyhmaWVsZDogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKTogRmlsdGVyIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xyXG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWE6IERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZmllbGRQYXJlbnRUcmVlSXRlbTogc2NoZW1hLmZpZWxkUGFyZW50VHJlZUl0ZW0sXHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogc2NoZW1hLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHNvcnRzOiBzY2hlbWEuc29ydHMsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXHJcbiAgICAgICAgICAgIHBsdXNVcmw6IHNjaGVtYS5wbHVzVXJsLFxyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gsXHJcbiAgICAgICAgICAgIC8vIFRPRE86IEPhuqduIMSRaeG7gW4gdsOgbyBraMO0bmcgY8OzIGzhu5dpIGtow7RuZyBjaOG6oXkgxJHGsOG7o2NcclxuICAgICAgICAgICAgc2VsZWN0Q2hpbGRJdGVtOiBudWxsLFxyXG4gICAgICAgICAgICBwYWdlU2l6ZTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJlZkRhdGFJbkRhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHNjaGVtYXM6IEdldFJlZkRhdGFTY2hlbWFbXSkge1xyXG4gICAgICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hcy5mb3JFYWNoKHNjaGVtYSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCAmJiAhYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChjdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyclZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZpZWxkUGx1cyAmJiBzY2hlbWEuZmllbGRQbHVzLmxlbmd0aCA+IDAgJiYgIXNjaGVtYS5maWVsZFBsdXMuc3RhcnRzV2l0aCgnLCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZmllbGRQbHVzID0gJywnICsgc2NoZW1hLmZpZWxkUGx1cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGFyclZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggZml4IHThuqFtLCBraMO0bmcgdGjDrCBs4buXaSBraMO0bmcgYnVpbGQgxJHGsOG7o2NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKDxhbnk+c2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXJyVmFsdWUudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE5hbU5IIGZpeCB04bqhbSwga2jDtG5nIHRow6wgbOG7l2kga2jDtG5nIGJ1aWxkIMSRxrDhu6NjIHNjaGVtYSA9PiA8YW55PnNjaGVtYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKDxhbnk+c2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jU2V0VmFsdWVSb3c6IEZ1bmN0aW9uID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IHJlcy5maW5kKGkgPT4gaS52YWx1ZSA9PSBpdGVtRGF0YVtmaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSByZWZJdGVtLmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzcGxpdFRvTGlzdE51bWJlcihzdHI6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcgPSAnLCcpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5zcGxpdChzZXBhcmF0b3IpLm1hcChpdGVtID0+IE51bWJlcihpdGVtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaEFzYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZpZWxkT3JkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZE9yZGVyXSA+PSBhcnJbaV1bZmllbGRPcmRlcl0pIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSArIDEsIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaERlc2MoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmaWVsZE9yZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZE9yZGVyXSA+PSBhcnJbaV1bZmllbGRPcmRlcl0pIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaEFzY0J5RnVuYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZ1bmM6IEZ1bmN0aW9uKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmMoaXRlbSkgPj0gZnVuYyhhcnJbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGkgKyAxLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hEZXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGZpZWxkT3JkZXI6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge31cclxuICAgICk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogVHJlZU5vZGVbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZ1bmNHZXRWYWx1ZU9yZGVyID0gaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGFbZmllbGRPcmRlcl07XHJcbiAgICAgICAgfTtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gdmFsdWVQYXJlbnRSb290KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb290SXRlbSA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChkaXJPcmRlciA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKHJlc3VsdCwgcm9vdEl0ZW0sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIocm9vdEl0ZW0sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgZGlyT3JkZXIsIGZ1bmNHZXRWYWx1ZU9yZGVyLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290SXRlbS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShyb290SXRlbSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKG5vZGVQYXJlbnQ6IFRyZWVOb2RlLCBkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsXHJcbiAgICAgICAgZGlyT3JkZXI6IG51bWJlciwgZnVuY0dldFZhbHVlT3JkZXI6IEZ1bmN0aW9uLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9XHJcbiAgICApIHtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtQ2hpbGRyZW4gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hBc2NCeUZ1bmMobm9kZVBhcmVudC5jaGlsZHJlbiwgaXRlbUNoaWxkcmVuLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hEZXNjQnlGdW5jKG5vZGVQYXJlbnQuY2hpbGRyZW4sIGl0ZW1DaGlsZHJlbiwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlblsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoaXRlbUNoaWxkcmVuLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGRpck9yZGVyLCBmdW5jR2V0VmFsdWVPcmRlciwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1DaGlsZHJlbi5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShpdGVtQ2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTksIG9wdGlvbnM6IGFueSA9IHt9KTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW0gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyb290SXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW1bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YShyb290SXRlbSwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290SXRlbS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShyb290SXRlbSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVRdXlHZXRUcmVlVGFibGVEYXRhKG5vZGVQYXJlbnQ6IFRyZWVOb2RlLCBkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGxldmVsQ2xvc2U6IG51bWJlciwgb3B0aW9uczogYW55ID0ge30pIHtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtQ2hpbGRyZW4gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgbm9kZVBhcmVudC5jaGlsZHJlbi5wdXNoKGl0ZW1DaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YShpdGVtQ2hpbGRyZW4sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1DaGlsZHJlbi5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShpdGVtQ2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZURhdGEoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBvcHRpb246IFRyZWVEYXRhT3B0aW9uLCB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5KTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlLCBmaWVsZFRyZWUsIHZhbHVlUGFyZW50Um9vdCwgbGV2ZWxDbG9zZSwge1xyXG4gICAgICAgICAgICBtb2RpZnlUcmVlTm9kZTogKGl0ZW1UcmVlLCBpdGVtRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUubGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5jb2xsYXBzZWRJY29uID0gb3B0aW9uLmNvbGxhcHNlZEljb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGZpZWxkT3JkZXI6IHN0cmluZyxcclxuICAgICAgICBvcHRpb246IFRyZWVEYXRhT3B0aW9uLCB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OVxyXG4gICAgKTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlLCBmaWVsZFRyZWUsIGZpZWxkT3JkZXIsIHZhbHVlUGFyZW50Um9vdCwgZGlyT3JkZXIsIGxldmVsQ2xvc2UsIHtcclxuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmxhYmVsID0gaXRlbURhdGFbb3B0aW9uLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5zaG9ydExhYmVsID0gaXRlbURhdGFbb3B0aW9uLnNob3J0RGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5jb2xsYXBzZWRJY29uID0gb3B0aW9uLmNvbGxhcHNlZEljb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVHdWlkKCkge1xyXG4gICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCDEkWnhu4F1IGtp4buHbiB0w6xtIGtp4bq/bSBt4bq3YyDEkeG7i25oIChD4bqldSBow6xuaCBo4buHIMSRw6BvIHThuqFvLCBuxINtIGjhu41jLCBo4buNYyBr4buzKVxyXG4gICAgLy8gQ2jhu4kgc+G7rSBk4bulbmcgY2hvIHBo4bqnbiBt4buBbSBxdeG6o24gbMO9IMSRw6BvIHThuqFvXHJcbiAgICBnZXREZWZhdWx0U2VhcmNoRGF0YSgpIHtcclxuICAgICAgICBjb25zdCBsb2NhbERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5ERUZBVUxUX0RBVEEpO1xyXG4gICAgICAgIGlmIChsb2NhbERhdGEgIT0gbnVsbCAmJiBsb2NhbERhdGEgIT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGEoX2NvbXBvbmVudCwgY2IpIHtcclxuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5oZURhb1Rhb1xyXG4gICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcclxuICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5tb2RlbC5yZWFkeVRvR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5oZURhb1Rhb1xyXG4gICAgICAgICAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0Lm5hbUhvY1xyXG4gICAgICAgICAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhvY0t5XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoJ0LhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICho4buHIMSRw6BvIHThuqFvLCBuxINtIGjhu41jLCBo4buNYyBr4buzKSB0csaw4bubYycpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgIGNiKF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVNlbGVjdERlZmF1bHREYXRhV2l0aEZpZWxkcyhfY29tcG9uZW50LCBhcnJGaWVsZCwgYXJyRmllbGROYW1lLCBjYikge1xyXG4gICAgICAgIGlmICghYXJyRmllbGQgfHwgYXJyRmllbGQubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICBsZXQgZW5vdWdoRmllbGRzID0gdHJ1ZTtcclxuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0W2ZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFlbm91Z2hGaWVsZHMpIHtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5tb2RlbC5yZWFkeVRvR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICAgICAgICAgIGVub3VnaEZpZWxkcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVub3VnaEZpZWxkcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbm91Z2hGaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoYELhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICgke2FyckZpZWxkTmFtZS50b1N0cmluZygpfSkgdHLGsOG7m2NgKTtcclxuICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYikge1xyXG4gICAgICAgICAgICBjYihfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRGaWVsZChtb2RlbCwgYXJyRmllbGQpIHtcclxuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgbW9kZWwuZGF0YVtmaWVsZF0gPSBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKSB7XHJcbiAgICAgICAgc3dpdGNoIChycy5lcnJvcikge1xyXG4gICAgICAgICAgICBjYXNlIFZhbGlkYXRpb24uRVJSX0JVU0lORVNTOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbi5FUlJfU1lTX0RFVjpcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBfX19fX19fX19fIEVSUl9TWVNfREVWIF9fX19fX19fX18gIDogJHtycy5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGFvIHTDoWMgY2jGsGEgdGjDoG5oIGPDtG5nLiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1IScpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5lcnJvciA9PSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1lc3MgPSByZXMuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UgIT0gbnVsbCAmJiByZXMubWVzc2FnZSAhPSAnJykgbWVzcyA9IHJlcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcobWVzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNhbGxCYWNrRXJyb3IpIGNhbGxCYWNrRXJyb3IocmVzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93U3VjY2VzcyhtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxCYWNrKSBjYWxsQmFjayhyZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbHRlckZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUZpbHRlcjogRmlsdGVyW10sIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlbXBsYXRlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIGYsIG1vZGVsLCByb290TW9kZWwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUocmVzdWx0LCB0ZW1wbGF0ZUZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZVF1eVJlcGxhY2VWYWx1ZShmaWx0ZXJzOiBGaWx0ZXJbXSwgZmlsdGVyOiBGaWx0ZXIsIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xyXG4gICAgICAgIGxldCB2YWx1ZUZpbHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IHNvdXJjZUZpZWxkID0gZmlsdGVyLnNvdXJjZUZpZWxkO1xyXG4gICAgICAgIGNvbnN0IHN1YkZpZWxkID0gZmlsdGVyLnN1YkZpZWxkO1xyXG4gICAgICAgIGNvbnN0IGNhbkFjY2Vzc1N1YkZpZWxkID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdWJGaWVsZCAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAmJiBzdWJGaWVsZCAhPT0gJydcclxuICAgICAgICAgICAgICAgICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0xpdGVyYWxPYmplY3QodmFsdWUpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChtb2RlbC5oYXNPd25Qcm9wZXJ0eShzb3VyY2VGaWVsZCkpIHtcclxuICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSBtb2RlbFtzb3VyY2VGaWVsZF07XHJcbiAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh2YWx1ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXJbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJvb3RNb2RlbCkge1xyXG4gICAgICAgICAgICBpZiAocm9vdE1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSByb290TW9kZWxbc291cmNlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXJbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gc291cmNlRmllbGQuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gcm9vdE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wLmhhc093blByb3BlcnR5KGYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wW2ZdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh0ZW1wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdGVtcFtzdWJGaWVsZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgPT0gbnVsbCAmJiAodmFsdWVGaWx0ZXIgPT0gbnVsbCB8fCB2YWx1ZUZpbHRlciA9PT0gJycgfHwgdmFsdWVGaWx0ZXIubGVuZ3RoID09IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRtcEZpbHRlciA9IG5ldyBGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgICBkZWxldGUgdG1wRmlsdGVyLnNvdXJjZUZpZWxkO1xyXG4gICAgICAgIGlmICh0bXBGaWx0ZXIuZnVuY0dldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSh2YWx1ZUZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRtcEZpbHRlci52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlRmlsdGVyKTtcclxuICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgJiYgZmlsdGVyLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMuZm9yRWFjaChmID0+IHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUodG1wRmlsdGVyLmZpbHRlcnMsIGYsIG1vZGVsLCByb290TW9kZWwpKTtcclxuICAgICAgICAgICAgaWYgKHRtcEZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V29ya2Zsb3dDb3JlU3RhdHVzVGV4dCh3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMuZmluZCh4ID0+IHguaWQgPT0gd29ya2Zsb3dDb3JlU3RhdHVzVmFsdWUpO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBpdGVtLnRlbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hOiBSZWZGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFJlZkRhdGEoZGF0YVNvdXJjZTogYW55W10sIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IF9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICBjb25zdCBfY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZWZGaWVsZHMgJiYgb3B0aW9ucy5yZWZGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGFyclNjaGVtYURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBvcHRpb25zLnJlZkZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm9yZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQucHVzaChzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdD4bqldSBow6xuaCBSZWZGaWVsZCBwaOG6o2kgY8OzIGRhdGFTb3VyY2UgaG/hurdjIGJhc2VTZXJ2aWNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYXJyUHJvbWlzZURvbnROZWVkV2FpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJSZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcnJQcm9taXNlRG9udE5lZWRXYWl0KTtcclxuICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCBhcnJSZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWE6IFJlZkZpZWxkLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
780
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUF5QixlQUFlLEVBQW9CLFFBQVEsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUNZLFNBQW1CLEVBQ25CLGlCQUFtQyxFQUNuQyxRQUFrQixFQUNsQixnQkFBaUM7UUFIakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixD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Z0JBQWdCO1lBRmhCLFFBQVE7WUFhUixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNMaXRlcmFsT2JqZWN0IH0gZnJvbSAnLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIERyb3Bkb3duT3B0aW9ucywgR2V0UmVmRGF0YVNjaGVtYSwgT3BlcmF0b3IsIFJlZkZpZWxkLCBUcmVlRGF0YU9wdGlvbiB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uIH0gZnJvbSAnLi4vY29uZmlncy9jb21wb25lbnQtY29udGFudHMnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3J1ZFNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG4gICAgcmVuZGVyRGF0ZVRpbWUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnZnJvbU5vdycpIHtcclxuICAgICAgICBpZiAoIWRhdGV0aW1lKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRldGltZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZGF0ZXRpbWUgPSBuZXcgRGF0ZShkYXRldGltZSArICcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdub3JtYWwnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXkgSEg6bW0nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBtaWxpc2Vjb25kID0gbm93IC0gZGF0ZXRpbWU7XHJcbiAgICAgICAgbGV0IHRleHQxID0gJ3RyxrDhu5tjJywgdGV4dDIgPSAnSMO0bSBxdWEnO1xyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMCkge1xyXG4gICAgICAgICAgICB0ZXh0MSA9ICdu4buvYScsIHRleHQyID0gJ05nw6B5IG1haSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMzAwMDApIHtcclxuICAgICAgICAgICAgLy8gMzAgZ2nDonlcclxuICAgICAgICAgICAgcmV0dXJuIGBWw6BpIGdpw6J5ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCA5MDAwMCkge1xyXG4gICAgICAgICAgICAvLyAzMCBnacOieSAtIDkwIGdpw6J5XHJcbiAgICAgICAgICAgIHJldHVybiBgTeG7mXQgcGjDunQgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyA1IHBow7p0XHJcbiAgICAgICAgICAgIHJldHVybiBgVsOgaSBwaMO6dCAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyBkxrDhu5tpIDEgdGnhur9uZ1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7TWF0aC5jZWlsKG1pbGlzZWNvbmQgLyA2MDAwMCl9IHBow7p0ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyBkxrDhu5tpIDUgdGnhur9uZ1xyXG4gICAgICAgICAgICByZXR1cm4gYFbDoGkgZ2nhu50gJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDg2NDAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxyXG4gICAgICAgICAgICBpZiAoZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtNYXRoLmNlaWwobWlsaXNlY29uZCAvIDM2MDAwMDApfSBnaeG7nSAke3RleHQxfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGAke3RleHQyfSBsw7pjICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0SG91ckFuZE1pbnV0ZSA9IGAgbMO6YyAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKX1gO1xyXG4gICAgICAgIGlmIChkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxyXG4gICAgICAgICAgICAmJiBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVEaWZmID0gbm93LmdldERhdGUoKSAtIGRhdGV0aW1lLmdldERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKGRhdGVEaWZmID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt0ZXh0Mn0ke3RleHRIb3VyQW5kTWludXRlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGVEaWZmID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgSGFpIG5nw6B5ICR7dGV4dDF9JHt0ZXh0SG91ckFuZE1pbnV0ZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRlRGlmZiA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYEJhIG5nw6B5ICR7dGV4dDF9JHt0ZXh0SG91ckFuZE1pbnV0ZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgZGF0ZXRpbWUsXHJcbiAgICAgICAgICAgICdkZC9NTS95eXl5IEhIOm1tJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyRGF0ZShkYXRldGltZSwgZm9ybWF0OiAnbm9ybWFsJyB8ICdmcm9tTm93JyA9ICdub3JtYWwnKSB7XHJcbiAgICAgICAgaWYgKCFkYXRldGltZSkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGRhdGV0aW1lID0gbmV3IERhdGUoZGF0ZXRpbWUgKyAnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbm9ybWFsJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBub3c6IGFueSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXHJcbiAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRheXMgPSBkYXRldGltZS5nZXREYXRlKCkgLSBub3cuZ2V0RGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gbmF5JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnTmfDoHkgbWFpJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gcXVhJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IG7hu69hJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IC0yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0hhaSBuZ8OgeSB0csaw4bubYyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IG7hu69hJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IC0zKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IHRyxrDhu5tjJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZUNvbnRyb2xBbmRMYWJlbCgpIHsgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IHN0cmluZyk6IEZpbHRlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3IsIHZhbHVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyRGF0ZShmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBEYXRlKTogRmlsdGVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWU6IHRoaXMuZ2V0RGF0ZSh2YWx1ZSkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldERhdGUoKX0vJHt2YWx1ZS5nZXRNb250aCgpICsgMX0vJHt2YWx1ZS5nZXRGdWxsWWVhcigpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJEYXRlSW5MaXN0UmFuZ2UoZmllbGQ6IHN0cmluZywgYXJyTWluTWF4OiBEYXRlW11bXSwgb3BlcmF0b3JMZWZ0OiBzdHJpbmcgPSAnZ3RlJywgb3BlcmF0b3JSaWdodDogc3RyaW5nID0gJ2x0ZScpOiBGaWx0ZXIge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgZmlsdGVyczogW11cclxuICAgICAgICB9KTtcclxuICAgICAgICBhcnJNaW5NYXguZm9yRWFjaChtaW5NYXggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzdHJTdGFydCA9IHRoaXMuZ2V0U3RyaW5nRGF0ZVZhbHVlKG1pbk1heFswXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0ckVuZCA9IHRoaXMuZ2V0U3RyaW5nRGF0ZVZhbHVlKG1pbk1heFsxXSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdhbmQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlcihmaWVsZCwgT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCwgc3RyU3RhcnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyKGZpZWxkLCBPcGVyYXRvci5sb3dlclRoYW5FcXVhbCwgc3RyRW5kKVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdHJpbmdEYXRlVmFsdWUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0VVRDRGF0ZSgpfS8ke3ZhbHVlLmdldFVUQ01vbnRoKCkgKyAxfS8ke3ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCl9ICR7dmFsdWUuZ2V0VVRDSG91cnMoKX06JHt2YWx1ZS5nZXRVVENNaW51dGVzKCl9OiR7dmFsdWUuZ2V0VVRDU2Vjb25kcygpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRNdWx0aUZpbHRlckNvbnRhaW5zKGZpZWxkczogc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XHJcbiAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyQ29udGFpbk11bHRpVmFsdWVzKGZpZWxkOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pOiBGaWx0ZXIge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XHJcbiAgICAgICAgdmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQsXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYTogRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogc2NoZW1hLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydHM6IHNjaGVtYS5zb3J0cyxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiBzY2hlbWEuc29ydERpcixcclxuICAgICAgICAgICAgcGx1c1VybDogc2NoZW1hLnBsdXNVcmwsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCxcclxuICAgICAgICAgICAgLy8gVE9ETzogQ+G6p24gxJFp4buBbiB2w6BvIGtow7RuZyBjw7MgbOG7l2kga2jDtG5nIGNo4bqheSDEkcaw4bujY1xyXG4gICAgICAgICAgICBzZWxlY3RDaGlsZEl0ZW06IG51bGwsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hczogR2V0UmVmRGF0YVNjaGVtYVtdKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWFzLmZvckVhY2goc2NoZW1hID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsICYmICFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZmllbGRQbHVzICYmIHNjaGVtYS5maWVsZFBsdXMubGVuZ3RoID4gMCAmJiAhc2NoZW1hLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5maWVsZFBsdXMgPSAnLCcgKyBzY2hlbWEuZmllbGRQbHVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBOYW1OSCBmaXggdOG6oW0sIGtow7RuZyB0aMOsIGzhu5dpIGtow7RuZyBidWlsZCDEkcaw4bujY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoPGFueT5zY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuaW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcnJWYWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggZml4IHThuqFtLCBraMO0bmcgdGjDrCBs4buXaSBraMO0bmcgYnVpbGQgxJHGsOG7o2Mgc2NoZW1hID0+IDxhbnk+c2NoZW1hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoPGFueT5zY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvdzogRnVuY3Rpb24gPSAocm93SXRlbSwgZGF0YSkgPT4geyB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gcmVzLmZpbmQoaSA9PiBpLnZhbHVlID09IGl0ZW1EYXRhW2ZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IHJlZkl0ZW0ubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNwbGl0VG9MaXN0TnVtYmVyKHN0cjogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyA9ICcsJyk6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KHNlcGFyYXRvcikubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoQXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkT3JkZXJdID49IGFycltpXVtmaWVsZE9yZGVyXSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoRGVzYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZpZWxkT3JkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkT3JkZXJdID49IGFycltpXVtmaWVsZE9yZGVyXSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoQXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnIubGVuZ3RoIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSArIDEsIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaERlc2NCeUZ1bmMoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmdW5jOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChmdW5jKGl0ZW0pID49IGZ1bmMoYXJyW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxyXG4gICAgICAgIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGRpck9yZGVyOiBudW1iZXIgPSAxLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5LCBvcHRpb25zOiBhbnkgPSB7fVxyXG4gICAgKTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XHJcbiAgICAgICAgY29uc3QgZnVuY0dldFZhbHVlT3JkZXIgPSBpdGVtID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YVtmaWVsZE9yZGVyXTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hBc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGVzY0J5RnVuYyhyZXN1bHQsIHJvb3RJdGVtLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW1bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihyb290SXRlbSwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RJdGVtLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKHJvb3RJdGVtLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZyxcclxuICAgICAgICBkaXJPcmRlcjogbnVtYmVyLCBmdW5jR2V0VmFsdWVPcmRlcjogRnVuY3Rpb24sIGxldmVsQ2xvc2U6IG51bWJlciwgb3B0aW9uczogYW55ID0ge31cclxuICAgICkge1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSBub2RlUGFyZW50LmRhdGEuaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1DaGlsZHJlbiA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbm9kZVBhcmVudFsnbGV2ZWwnXSArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyT3JkZXIgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEFzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMobm9kZVBhcmVudC5jaGlsZHJlbiwgaXRlbUNoaWxkcmVuLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihpdGVtQ2hpbGRyZW4sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgZGlyT3JkZXIsIGZ1bmNHZXRWYWx1ZU9yZGVyLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlVGFibGVEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge30pOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IFRyZWVOb2RlW10gPSBbXTtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gdmFsdWVQYXJlbnRSb290KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb290SXRlbSA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJvb3RJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RJdGVtLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKHJvb3RJdGVtLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGEobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgbGV2ZWxDbG9zZTogbnVtYmVyLCBvcHRpb25zOiBhbnkgPSB7fSkge1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSBub2RlUGFyZW50LmRhdGEuaWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1DaGlsZHJlbiA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogbm9kZVBhcmVudFsnbGV2ZWwnXSArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBub2RlUGFyZW50LmNoaWxkcmVuLnB1c2goaXRlbUNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIG9wdGlvbjogVHJlZURhdGFPcHRpb24sIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTkpOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmVlVGFibGVEYXRhKGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgdmFsdWVQYXJlbnRSb290LCBsZXZlbENsb3NlLCB7XHJcbiAgICAgICAgICAgIG1vZGlmeVRyZWVOb2RlOiAoaXRlbVRyZWUsIGl0ZW1EYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuZXhwYW5kZWRJY29uID0gb3B0aW9uLmV4cGFuZGVkSWNvbjtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmNvbGxhcHNlZEljb24gPSBvcHRpb24uY29sbGFwc2VkSWNvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxyXG4gICAgICAgIG9wdGlvbjogVHJlZURhdGFPcHRpb24sIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGRpck9yZGVyOiBudW1iZXIgPSAxLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5XHJcbiAgICApOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgZmllbGRPcmRlciwgdmFsdWVQYXJlbnRSb290LCBkaXJPcmRlciwgbGV2ZWxDbG9zZSwge1xyXG4gICAgICAgICAgICBtb2RpZnlUcmVlTm9kZTogKGl0ZW1UcmVlLCBpdGVtRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUubGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLnNob3J0TGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uc2hvcnREaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuZXhwYW5kZWRJY29uID0gb3B0aW9uLmV4cGFuZGVkSWNvbjtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmNvbGxhcHNlZEljb24gPSBvcHRpb24uY29sbGFwc2VkSWNvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUd1aWQoKSB7XHJcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgY29uc3QgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IMSRaeG7gXUga2nhu4duIHTDrG0ga2nhur9tIG3hurdjIMSR4buLbmggKEPhuqV1IGjDrG5oIGjhu4cgxJHDoG8gdOG6oW8sIG7Eg20gaOG7jWMsIGjhu41jIGvhu7MpXHJcbiAgICAvLyBDaOG7iSBz4butIGThu6VuZyBjaG8gcGjhuqduIG3hu4FtIHF14bqjbiBsw70gxJHDoG8gdOG6oW9cclxuICAgIGdldERlZmF1bHRTZWFyY2hEYXRhKCkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkRFRkFVTFRfREFUQSk7XHJcbiAgICAgICAgaWYgKGxvY2FsRGF0YSAhPSBudWxsICYmIGxvY2FsRGF0YSAhPSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgZm9yY2VTZWxlY3REZWZhdWx0RGF0YShfY29tcG9uZW50LCBjYikge1xyXG4gICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXHJcbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0Lm5hbUhvY1xyXG4gICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5ob2NLeVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5DT05GSUdfREFUQV9ERUZBVUxUX0NMT1NFRCwgZiA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQubmFtSG9jXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dFcnJvcignQuG6oW4gcGjhuqNpIGPhuqV1IGjDrG5oIHRow7RuZyB0aW4gKGjhu4cgxJHDoG8gdOG6oW8sIG7Eg20gaOG7jWMsIGjhu41jIGvhu7MpIHRyxrDhu5tjJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2IpIHtcclxuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGFXaXRoRmllbGRzKF9jb21wb25lbnQsIGFyckZpZWxkLCBhcnJGaWVsZE5hbWUsIGNiKSB7XHJcbiAgICAgICAgaWYgKCFhcnJGaWVsZCB8fCBhcnJGaWVsZC5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgIGxldCBlbm91Z2hGaWVsZHMgPSB0cnVlO1xyXG4gICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWVub3VnaEZpZWxkcykge1xyXG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5DT05GSUdfREFUQV9ERUZBVUxUX0NMT1NFRCwgZiA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdFtmaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVub3VnaEZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dFcnJvcihgQuG6oW4gcGjhuqNpIGPhuqV1IGjDrG5oIHRow7RuZyB0aW4gKCR7YXJyRmllbGROYW1lLnRvU3RyaW5nKCl9KSB0csaw4bubY2ApO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgIGNiKF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNldEZpZWxkKG1vZGVsLCBhcnJGaWVsZCkge1xyXG4gICAgICAgIGFyckZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBtb2RlbC5kYXRhW2ZpZWxkXSA9IG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc0Vycm9yUmVzcG9uc2UocnMpIHtcclxuICAgICAgICBzd2l0Y2ggKHJzLmVycm9yKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbi5FUlJfQlVTSU5FU1M6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocnMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWOlxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYF9fX19fX19fX18gRVJSX1NZU19ERVYgX19fX19fX19fXyAgOiAke3JzLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoYW8gdMOhYyBjaMawYSB0aMOgbmggY8O0bmcuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUhJyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBpZiAocmVzLmVycm9yID09IFZhbGlkYXRpb24uRVJSX1NZU19ERVYpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYS4gTGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVzcyA9IHJlcy5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSBtZXNzID0gcmVzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZyhtZXNzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcikgY2FsbEJhY2tFcnJvcihyZXMpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2FsbEJhY2spIGNhbGxCYWNrKHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRlbXBsYXRlRmlsdGVyOiBGaWx0ZXJbXSwgbW9kZWw6IGFueSwgcm9vdE1vZGVsPzogYW55KSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVGaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLmZvckVhY2goZiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHJlc3VsdCwgZiwgbW9kZWwsIHJvb3RNb2RlbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIHRlbXBsYXRlRmlsdGVyLCBtb2RlbCwgcm9vdE1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlUXV5UmVwbGFjZVZhbHVlKGZpbHRlcnM6IEZpbHRlcltdLCBmaWx0ZXI6IEZpbHRlciwgbW9kZWw6IGFueSwgcm9vdE1vZGVsPzogYW55KSB7XHJcbiAgICAgICAgbGV0IHZhbHVlRmlsdGVyID0gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3Qgc291cmNlRmllbGQgPSBmaWx0ZXIuc291cmNlRmllbGQ7XHJcbiAgICAgICAgY29uc3Qgc3ViRmllbGQgPSBmaWx0ZXIuc3ViRmllbGQ7XHJcbiAgICAgICAgY29uc3QgY2FuQWNjZXNzU3ViRmllbGQgPSAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1YkZpZWxkICE9IG51bGxcclxuICAgICAgICAgICAgICAgICYmIHN1YkZpZWxkICE9PSAnJ1xyXG4gICAgICAgICAgICAgICAgJiYgKGlzQXJyYXkodmFsdWUpIHx8IGlzTGl0ZXJhbE9iamVjdCh2YWx1ZSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xyXG4gICAgICAgICAgICB2YWx1ZUZpbHRlciA9IG1vZGVsW3NvdXJjZUZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVGaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB2YWx1ZUZpbHRlci5tYXAoeCA9PiB4W3N1YkZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXJbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJvb3RNb2RlbCkge1xyXG4gICAgICAgICAgICBpZiAocm9vdE1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSByb290TW9kZWxbc291cmNlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHZhbHVlRmlsdGVyLm1hcCh4ID0+IHhbc3ViRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHZhbHVlRmlsdGVyW3N1YkZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBzb3VyY2VGaWVsZC5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSByb290TW9kZWw7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAuaGFzT3duUHJvcGVydHkoZikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXBbZl07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHRlbXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodGVtcCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0ZW1wLm1hcCh4ID0+IHhbc3ViRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHRlbXBbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZpbHRlci5sb2dpYyA9PSBudWxsICYmICh2YWx1ZUZpbHRlciA9PSBudWxsIHx8IHZhbHVlRmlsdGVyID09PSAnJyB8fCB2YWx1ZUZpbHRlci5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG1wRmlsdGVyID0gbmV3IEZpbHRlcihmaWx0ZXIpO1xyXG4gICAgICAgIGRlbGV0ZSB0bXBGaWx0ZXIuc291cmNlRmllbGQ7XHJcbiAgICAgICAgaWYgKHRtcEZpbHRlci5mdW5jR2V0VmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0bXBGaWx0ZXIuZnVuY0dldFZhbHVlKHZhbHVlRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWVGaWx0ZXIpO1xyXG4gICAgICAgIGlmICh0bXBGaWx0ZXIubW9kaWZ5VmFsdWUpIHtcclxuICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0bXBGaWx0ZXIubW9kaWZ5VmFsdWUodmFsdWVGaWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgJiYgZmlsdGVyLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMuZm9yRWFjaChmID0+IHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUodG1wRmlsdGVyLmZpbHRlcnMsIGYsIG1vZGVsLCByb290TW9kZWwpKTtcclxuICAgICAgICAgICAgaWYgKHRtcEZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V29ya2Zsb3dDb3JlU3RhdHVzVGV4dCh3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMuZmluZCh4ID0+IHguaWQgPT0gd29ya2Zsb3dDb3JlU3RhdHVzVmFsdWUpO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBpdGVtLnRlbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hOiBSZWZGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFJlZkRhdGEoZGF0YVNvdXJjZTogYW55W10sIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IF9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICBjb25zdCBfY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZWZGaWVsZHMgJiYgb3B0aW9ucy5yZWZGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGFyclNjaGVtYURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBvcHRpb25zLnJlZkZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm9yZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQucHVzaChzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdD4bqldSBow6xuaCBSZWZGaWVsZCBwaOG6o2kgY8OzIGRhdGFTb3VyY2UgaG/hurdjIGJhc2VTZXJ2aWNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYXJyUHJvbWlzZURvbnROZWVkV2FpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJSZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcnJQcm9taXNlRG9udE5lZWRXYWl0KTtcclxuICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCBhcnJSZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWE6IFJlZkZpZWxkLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|