ng-firebase-table-kxp 1.0.5 → 1.0.6
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.
|
@@ -190,16 +190,12 @@ export class TableComponent {
|
|
|
190
190
|
}
|
|
191
191
|
getDisplayValue(col, row, withinLimit = false) {
|
|
192
192
|
let value;
|
|
193
|
-
if (row[col.property] === null || row[col.property] === undefined) {
|
|
194
|
-
return '';
|
|
195
|
-
}
|
|
196
193
|
if (col.calculateValue) {
|
|
197
|
-
value =
|
|
194
|
+
value = col.calculateValue(row);
|
|
198
195
|
}
|
|
199
196
|
else {
|
|
200
197
|
value = this.getNestedValue(row, col.property);
|
|
201
198
|
}
|
|
202
|
-
// Verifica se é um array e tem arrayField definido
|
|
203
199
|
if (Array.isArray(value) && col.arrayField) {
|
|
204
200
|
value = this.formatArrayValue(value, col.arrayField);
|
|
205
201
|
}
|
|
@@ -207,7 +203,19 @@ export class TableComponent {
|
|
|
207
203
|
value = row[col.property];
|
|
208
204
|
}
|
|
209
205
|
value = col.pipe ? col.pipe.transform(value) : value;
|
|
210
|
-
|
|
206
|
+
if (value === null || value === undefined) {
|
|
207
|
+
value = '';
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
value = String(value);
|
|
211
|
+
}
|
|
212
|
+
if (typeof value !== 'string') {
|
|
213
|
+
value = '';
|
|
214
|
+
}
|
|
215
|
+
if (withinLimit || !col.charLimit) {
|
|
216
|
+
return value;
|
|
217
|
+
}
|
|
218
|
+
return value.substring(0, col.charLimit) + '...';
|
|
211
219
|
}
|
|
212
220
|
getNestedValue(obj, path) {
|
|
213
221
|
if (!path)
|
|
@@ -787,4 +795,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
787
795
|
type: ViewChild,
|
|
788
796
|
args: [MatSort]
|
|
789
797
|
}] } });
|
|
790
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtwRSxPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUs3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPbkUsTUFBTSxPQUFPLGNBQWM7SUFvRHpCLGNBQWM7SUFDZCxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixTQUEyQjtRQUYzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFwRHJDLFlBQU8sR0FBbUIsSUFBSSxDQUFDO1FBRy9CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QiwyQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFFcEIsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixjQUFTLEdBQUcsS0FBSyxDQUFD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QUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlDO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxhQUFxQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssYUFBYSxDQUFDO0lBQzVDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJO1lBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1NBQ3ZEO1FBQUMsTUFBTTtZQUNOLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDOzs0R0E1NEJVLGNBQWM7Z0dBQWQsY0FBYyxzSkEwQ2QsWUFBWSx1RUFDWixPQUFPLGdEQ2xFcEIseTByQkEyaUJBOzRGRHBoQmEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXO3VKQU1aLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQXVDbUIsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFycmFuZ2UsIENvbmRpdGlvbiwgVGFiLCBUYWJEYXRhLCBUYWJsZURhdGEgfSBmcm9tICcuLi8uLi90eXBlcy9UYWJsZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQW5ndWxhckZpcmVzdG9yZSxcclxuICBRdWVyeURvY3VtZW50U25hcHNob3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9jb21wYXQvZmlyZXN0b3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlyc3RWYWx1ZUZyb20sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgT3JkZXJCeURpcmVjdGlvbiB9IGZyb20gJ2ZpcmViYXNlL2ZpcmVzdG9yZSc7XHJcbmltcG9ydCBmaXJlYmFzZSBmcm9tICdmaXJlYmFzZS9jb21wYXQnO1xyXG5pbXBvcnQgV2hlcmVGaWx0ZXJPcCA9IGZpcmViYXNlLmZpcmVzdG9yZS5XaGVyZUZpbHRlck9wO1xyXG5pbXBvcnQgZmlyZXN0b3JlID0gZmlyZWJhc2UuZmlyZXN0b3JlO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIElOUFVUU1xyXG4gIEBJbnB1dCgpIGRhdGEhOiBUYWJsZURhdGE7XHJcbiAgQElucHV0KCkgZG93bmxvYWRUYWJsZT86IChhcnJhbmdlOiBBcnJhbmdlLCBjb25kaXRpb25zOiBDb25kaXRpb25bXSkgPT4gdm9pZDtcclxuICBhcnJhbmdlOiBBcnJhbmdlIHwgbnVsbCA9IG51bGw7XHJcbiAgLy8gVkFSSUFCTEVTXHJcbiAgZGF0YVNvdXJjZSE6IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+O1xyXG4gIGN1cnJlbnRQYWdlTnVtYmVyID0gMTtcclxuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcclxuXHJcbiAgcHVibGljIGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIGxhc3REb2M6IFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBmaXJzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PGFueT4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHNvcnRCeTogeyBmaWVsZDogc3RyaW5nOyBvcmRlcjogT3JkZXJCeURpcmVjdGlvbiB9ID0ge1xyXG4gICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxyXG4gICAgb3JkZXI6ICdkZXNjJyxcclxuICB9O1xyXG4gIHB1YmxpYyBjb2x1bW5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBmaWx0ZXJzRm9ybTogRm9ybUFycmF5O1xyXG5cclxuICBzZWxlY3RTb3J0OiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgY3VycmVudEFycmFuZ2UgPSAnJztcclxuXHJcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZHJvcGRvd25JdGVtczogYW55W10gPSBbXTtcclxuICBzb3J0YWJsZURyb3Bkb3duSXRlbXM6IGFueVtdID0gW107XHJcbiAgcGFnZVNpemUgPSAyNTtcclxuICB0b3RhbEl0ZW1zID0gMDtcclxuICBwYWdlRXZlbnQ/OiBQYWdlRXZlbnQ7XHJcbiAgZmlsdGVyVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBoYXNGaWx0ZXJhYmxlQ29sdW1uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGFzU29ydGFibGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJQcmVkaWNhdGU6ICgoZGF0YTogYW55LCBmaWx0ZXI6IHN0cmluZykgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBmaWx0ZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VUaW1lTXMgPSA1MDA7XHJcblxyXG4gIHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xyXG5cclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XHJcblxyXG4gIC8vIFByb3ByaWVkYWRlcyBwYXJhIGNvbnRyb2xlIGRvIHRvb2x0aXBcclxuICBob3ZlcmVkQ2VsbDogeyByb3c6IGFueTsgY29sOiBhbnkgfSB8IG51bGwgPSBudWxsO1xyXG4gIHNob3dUb29sdGlwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9vbHRpcFRpbWVvdXQ6IGFueTtcclxuICB0b29sdGlwQ29udGVudDogc3RyaW5nID0gJyc7XHJcbiAgdG9vbHRpcFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgLy8gQ09OU1RSVUNUT1JcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHRhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaXJlc3RvcmU6IEFuZ3VsYXJGaXJlc3RvcmVcclxuICApIHtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0gPSBuZXcgRm9ybUFycmF5KFt0aGlzLmNyZWF0ZUZpbHRlckdyb3VwKCldKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZpbHRlckdyb3VwKCk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgIHNlbGVjdEZpbHRlcjogbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgICAgdHlwZUZpbHRlcjogbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgICAgc2VsZWN0SXRlbTogbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgICAgaW5pdGlhbERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJywgdGhpcy50YWJsZVNlcnZpY2UuZGF0ZUZvcm1hdFZhbGlkYXRvcigpKSxcclxuICAgICAgZmluYWxEYXRlOiBuZXcgRm9ybUNvbnRyb2woJycsIHRoaXMudGFibGVTZXJ2aWNlLmRhdGVGb3JtYXRWYWxpZGF0b3IoKSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZEZpbHRlcihmaWx0ZXJEYXRhPzoge1xyXG4gICAgc2VsZWN0RmlsdGVyOiBhbnk7XHJcbiAgICB0eXBlRmlsdGVyPzogc3RyaW5nO1xyXG4gICAgc2VsZWN0SXRlbT86IGFueVtdO1xyXG4gICAgaW5pdGlhbERhdGU/OiBzdHJpbmc7XHJcbiAgICBmaW5hbERhdGU/OiBzdHJpbmc7XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV3RmlsdGVyR3JvdXAgPSB0aGlzLmNyZWF0ZUZpbHRlckdyb3VwKCk7XHJcblxyXG4gICAgaWYgKGZpbHRlckRhdGEpIHtcclxuICAgICAgaWYgKGZpbHRlckRhdGEuc2VsZWN0RmlsdGVyKSB7XHJcbiAgICAgICAgbmV3RmlsdGVyR3JvdXAuZ2V0KCdzZWxlY3RGaWx0ZXInKT8uc2V0VmFsdWUoZmlsdGVyRGF0YS5zZWxlY3RGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWx0ZXJEYXRhLnR5cGVGaWx0ZXIpIHtcclxuICAgICAgICBuZXdGaWx0ZXJHcm91cC5nZXQoJ3R5cGVGaWx0ZXInKT8uc2V0VmFsdWUoZmlsdGVyRGF0YS50eXBlRmlsdGVyKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlsdGVyRGF0YS5zZWxlY3RJdGVtKSB7XHJcbiAgICAgICAgbmV3RmlsdGVyR3JvdXAuZ2V0KCdzZWxlY3RJdGVtJyk/LnNldFZhbHVlKGZpbHRlckRhdGEuc2VsZWN0SXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZpbHRlckRhdGEuaW5pdGlhbERhdGUpIHtcclxuICAgICAgICBuZXdGaWx0ZXJHcm91cC5nZXQoJ2luaXRpYWxEYXRlJyk/LnNldFZhbHVlKGZpbHRlckRhdGEuaW5pdGlhbERhdGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWx0ZXJEYXRhLmZpbmFsRGF0ZSkge1xyXG4gICAgICAgIG5ld0ZpbHRlckdyb3VwLmdldCgnZmluYWxEYXRlJyk/LnNldFZhbHVlKGZpbHRlckRhdGEuZmluYWxEYXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0ucHVzaChuZXdGaWx0ZXJHcm91cCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEZpbHRlckNoYW5nZSgpIHtcclxuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGxhc3RGaWx0ZXIgPSB0aGlzLmZpbHRlcnNGb3JtLmF0KGxhc3RJbmRleCk7XHJcbiAgICBpZiAobGFzdEZpbHRlci5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSkge1xyXG4gICAgICB0aGlzLmFkZEZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsdGVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0ucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuYWRkRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jbGVhcigpO1xyXG4gICAgdGhpcy5hZGRGaWx0ZXIoKTtcclxuICAgIHRoaXMucmVzZXRGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIE1FVEhPRFNcclxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5jb2xvcilcclxuICAgICAgdGhpcy5kYXRhLmNvbG9yID0geyBiZzogJ2JnLXByaW1hcnknLCB0ZXh0OiAndGV4dC1ibGFjaycgfTtcclxuICAgIHRoaXMuY29sdW1uUHJvcGVydGllcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4ucHJvcGVydHk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLmFjdGlvbkJ1dHRvbiAmJiAhdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24pIHtcclxuICAgICAgdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24gPSAoX3Jvdz86IGFueSkgPT4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbC5pc0ZpbHRlcmFibGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IGZhbHNlKVxyXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgICBhcnJhbmdlOiAnZmlsdGVyJyxcclxuICAgICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sLmlzU29ydGFibGUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID09PSBmYWxzZSkgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgICBhcnJhbmdlOiAnYXNjZW5kaW5nJyxcclxuICAgICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSArICc6IGNyZXNjZW50ZScsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICAgIGFycmFuZ2U6ICdkZXNjZW5kaW5nJyxcclxuICAgICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSArICc6IGRlY3Jlc2NlbnRlJyxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sLmlzRmlsdGVyYWJsZUJ5RGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICAgIGFycmFuZ2U6ICdmaWx0ZXJCeURhdGUnLFxyXG4gICAgICAgICAgICB0aXRsZTogY29sLnRpdGxlICsgJzogZmlsdHJvIHBvciBkYXRhJyxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PlxyXG4gICAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLnB1c2goeyAuLi5vcHRpb24sIGFycmFuZ2U6ICdlcXVhbHMnIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlbSBwYWdpbmHDp8Ojb1xyXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtcygpO1xyXG4gICAgfVxyXG4gICAgLy8gQ29tIHBhZ2luYcOnw6NvXHJcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5zb3J0QnkpXHJcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XHJcbiAgICAgICAgICBmaWVsZDogdGhpcy5kYXRhLnNvcnRCeS5maWVsZCxcclxuICAgICAgICAgIG9yZGVyOiB0aGlzLmRhdGEuc29ydEJ5Lm9yZGVyLFxyXG4gICAgICAgIH07XHJcbiAgICAgIHRoaXMuZmlsdGVyU3ViamVjdFxyXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZU1zKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xyXG5cclxuICAgICAgdGhpcy5zb3J0LmFjdGl2ZSA9ICdjcmVhdGVkQXQnO1xyXG4gICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gJ2Rlc2MnO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLnRvdGFsUmVmKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB0b3RhbFJlZiBvZiB0aGlzLmRhdGEudG90YWxSZWYpIHtcclxuICAgICAgICAgIGNvbnN0IHRvdGFsUmVmRG9jID0gYXdhaXQgdG90YWxSZWYucmVmLmdldCgpO1xyXG4gICAgICAgICAgY29uc3QgZG9jRGF0YSA9IHRvdGFsUmVmRG9jLmRhdGEoKSBhcyBhbnk7XHJcbiAgICAgICAgICBpZiAoZG9jRGF0YSAmJiBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXSlcclxuICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gKHRoaXMudG90YWxJdGVtcyArXHJcbiAgICAgICAgICAgICAgZG9jRGF0YVt0b3RhbFJlZi5maWVsZF0pIGFzIG51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERpc3BsYXlWYWx1ZShjb2w6IGFueSwgcm93OiBhbnksIHdpdGhpbkxpbWl0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgbGV0IHZhbHVlOiBzdHJpbmc7XHJcbiAgICBpZiAocm93W2NvbC5wcm9wZXJ0eV0gPT09IG51bGwgfHwgcm93W2NvbC5wcm9wZXJ0eV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbC5jYWxjdWxhdGVWYWx1ZSkge1xyXG4gICAgICB2YWx1ZSA9IFN0cmluZyhjb2wuY2FsY3VsYXRlVmFsdWUocm93KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wucHJvcGVydHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZlcmlmaWNhIHNlIMOpIHVtIGFycmF5IGUgdGVtIGFycmF5RmllbGQgZGVmaW5pZG9cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb2wuYXJyYXlGaWVsZCkge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0QXJyYXlWYWx1ZSh2YWx1ZSwgY29sLmFycmF5RmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wucXVlcnlMZW5ndGggJiYgcm93W2NvbC5wcm9wZXJ0eV0pIHtcclxuICAgICAgdmFsdWUgPSByb3dbY29sLnByb3BlcnR5XTtcclxuICAgIH1cclxuICAgIHZhbHVlID0gY29sLnBpcGUgPyBjb2wucGlwZS50cmFuc2Zvcm0odmFsdWUpIDogdmFsdWU7XHJcbiAgICByZXR1cm4gd2l0aGluTGltaXQgPyB2YWx1ZSA6IHZhbHVlLnN1YnN0cmluZygwLCBjb2wuY2hhckxpbWl0KSArICcuLi4nO1xyXG4gIH1cclxuXHJcbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XHJcbiAgICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gcGF0aC5zcGxpdCgnLicpO1xyXG4gICAgcmV0dXJuIHByb3BlcnRpZXMucmVkdWNlKFxyXG4gICAgICAoYWNjLCBjdXJyZW50UGFydCkgPT4gYWNjICYmIGFjY1tjdXJyZW50UGFydF0sXHJcbiAgICAgIG9ialxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0QXJyYXlWYWx1ZShhcnJheTogYW55W10sIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCBhcnJheS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbHVlcyA9IGFycmF5XHJcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcclxuICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXSB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKTtcclxuXHJcbiAgICByZXR1cm4gdmFsdWVzLmpvaW4oJywgJyk7XHJcbiAgfVxyXG5cclxuICAvLyBNw6l0b2RvcyBzZW0gcGFnaW5hw6fDo29cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJdGVtcygpIHtcclxuICAgIHRoaXMuaXRlbXMgPSBhd2FpdCB0aGlzLnRhYmxlU2VydmljZS5nZXRJdGVtcyh0aGlzLmRhdGEuY29sbGVjdGlvblJlZik7XHJcbiAgICBpZiAodGhpcy5kYXRhLmNvbmRpdGlvbnMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XHJcbiAgICBhd2FpdCB0aGlzLmxvYWRRdWVyeUxlbmd0aHMoKTtcclxuICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLml0ZW1zKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgaWYgKHRoaXMuZGF0YS5zb3J0QnkpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuYWN0aXZlID0gdGhpcy5kYXRhLnNvcnRCeS5maWVsZDtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kYXRhLnNvcnRCeS5vcmRlcjtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuc29ydENoYW5nZS5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhLCBmaWx0ZXI6IHN0cmluZykgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMuc29tZSgoY29sKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgaWYgKGNvbC5maWx0ZXJQcmVkaWNhdGVzKSB7XHJcbiAgICAgICAgICByZXR1cm4gY29sLmZpbHRlclByZWRpY2F0ZXMuc29tZSgocHJlZGljYXRlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBkYXRhW2NvbC5wcm9wZXJ0eV07XHJcbiAgICAgICAgICAgIGlmICghcHJvcGVydHlWYWx1ZSB8fCB0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZVZhbHVlID0gcHJvcGVydHlWYWx1ZVtwcmVkaWNhdGVdO1xyXG4gICAgICAgICAgICBpZiAocHJlZGljYXRlVmFsdWUgPT09IG51bGwgfHwgcHJlZGljYXRlVmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwcmVkaWNhdGVWYWx1ZSlcclxuICAgICAgICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbC5wcm9wZXJ0eSAmJiBjb2wuaXNGaWx0ZXJhYmxlKSB7XHJcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZGF0YVtjb2wucHJvcGVydHldO1xyXG4gICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IG51bGwgfHwgcHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHByb3BlcnR5VmFsdWUpXHJcbiAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLmluY2x1ZGVzKGZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xyXG4gIH1cclxuXHJcbiAgLy8gTcOpdG9kb3MgY29tIHBhZ2luYcOnw6NvXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkSXRlbXNQYWdpbmF0ZWQoXHJcbiAgICBuYXZpZ2F0aW9uOiBzdHJpbmcgPSAncmVsb2FkJyxcclxuICAgIHJlc2V0OiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIGlmIChyZXNldCAmJiBbJ2ZvcndhcmQnLCAncmVsb2FkJ10uaW5jbHVkZXMobmF2aWdhdGlvbikpIHtcclxuICAgICAgdGhpcy5sYXN0RG9jID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChyZXNldCAmJiBbJ2JhY2t3YXJkJywgJ3JlbG9hZCddLmluY2x1ZGVzKG5hdmlnYXRpb24pKSB7XHJcbiAgICAgIHRoaXMuZmlyc3REb2MgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB0aGlzLmZpbHRlcnNGb3JtLmNvbnRyb2xzXHJcbiAgICAgIC5mbGF0TWFwKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEZpbHRlciA9IGdyb3VwLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlO1xyXG4gICAgICAgIGlmICghc2VsZWN0ZWRGaWx0ZXIpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgYXJyYW5nZSA9IHNlbGVjdGVkRmlsdGVyLmFycmFuZ2U7XHJcblxyXG4gICAgICAgIGlmIChhcnJhbmdlID09PSAnZmlsdGVyJykge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBncm91cC5nZXQoJ3R5cGVGaWx0ZXInKT8udmFsdWU7XHJcbiAgICAgICAgICBpZiAoIWZpbHRlclZhbHVlKSByZXR1cm4gW107XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhcnJhbmdlLFxyXG4gICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICBwcm9wZXJ0eTogc2VsZWN0ZWRGaWx0ZXIucHJvcGVydHksXHJcbiAgICAgICAgICAgICAgZmlsdGVyaW5nOiBmaWx0ZXJWYWx1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGF0ZUZpbHRlcjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhcnJhbmdlID09PSAnZmlsdGVyQnlEYXRlJykge1xyXG4gICAgICAgICAgY29uc3QgaW5pdGlhbCA9IGdyb3VwLmdldCgnaW5pdGlhbERhdGUnKT8udmFsdWU7XHJcbiAgICAgICAgICBjb25zdCBmaW5hbCA9IGdyb3VwLmdldCgnZmluYWxEYXRlJyk/LnZhbHVlO1xyXG4gICAgICAgICAgaWYgKGluaXRpYWwgJiYgZmluYWwpIHtcclxuICAgICAgICAgICAgY29uc3QgW2RheUksIG1vbnRoSSwgeWVhckldID0gaW5pdGlhbC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBpbml0aWFsRGF0ZSA9IG5ldyBEYXRlKGAke21vbnRoSX0vJHtkYXlJfS8ke3llYXJJfWApO1xyXG4gICAgICAgICAgICBjb25zdCBbZGF5RiwgbW9udGhGLCB5ZWFyRl0gPSBmaW5hbC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5hbERhdGUgPSBuZXcgRGF0ZShgJHttb250aEZ9LyR7ZGF5Rn0vJHt5ZWFyRn1gKTtcclxuICAgICAgICAgICAgZmluYWxEYXRlLnNldEhvdXJzKDIzLCA1OSwgNTkpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGFycmFuZ2UsXHJcbiAgICAgICAgICAgICAgZmlsdGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgZGF0ZUZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgaW5pdGlhbDogaW5pdGlhbERhdGUsXHJcbiAgICAgICAgICAgICAgICBmaW5hbDogZmluYWxEYXRlLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0ZWRGaWx0ZXIuaGFzT3duUHJvcGVydHkoJ2l0ZW1zJykgJiYgYXJyYW5nZSA9PT0gJ2VxdWFscycpIHtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBncm91cC5nZXQoJ3NlbGVjdEl0ZW0nKT8udmFsdWU7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZEl0ZW1zKSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMubWFwKChpdGVtKSA9PiAoe1xyXG4gICAgICAgICAgICAgIGFycmFuZ2UsXHJcbiAgICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eTogaXRlbS5wcm9wZXJ0eSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcmluZzogaXRlbS52YWx1ZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGRhdGVGaWx0ZXI6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChmKSA9PiBmICYmIChmLmZpbHRlcj8uZmlsdGVyaW5nICE9PSB1bmRlZmluZWQgfHwgZi5kYXRlRmlsdGVyKSk7XHJcblxyXG4gICAgdGhpcy5hcnJhbmdlID0ge1xyXG4gICAgICBmaWx0ZXJzOiBhY3RpdmVGaWx0ZXJzLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBwYWdpbmF0ZWQ6IGFueSA9IHtcclxuICAgICAgYmF0Y2hTaXplOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBjb2xsZWN0aW9uOiB0aGlzLmRhdGEuY29sbGVjdGlvbixcclxuICAgICAgZG9jOiB7IGxhc3REb2M6IHRoaXMubGFzdERvYywgZmlyc3REb2M6IHRoaXMuZmlyc3REb2MgfSxcclxuICAgICAgbmF2aWdhdGlvbixcclxuICAgICAgYXJyYW5nZTogdGhpcy5hcnJhbmdlLFxyXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmRhdGEuY29uZGl0aW9ucyxcclxuICAgICAgc2l6ZTogdGhpcy50b3RhbEl0ZW1zLFxyXG4gICAgICBmaWx0ZXJGbjogdGhpcy5kYXRhLmZpbHRlckZuLFxyXG4gICAgICBjbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50YWJsZVNlcnZpY2UuZ2V0UGFnaW5hdGVkKHBhZ2luYXRlZCk7XHJcbiAgICB0aGlzLml0ZW1zID0gcmVzdWx0Lml0ZW1zO1xyXG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XHJcbiAgICBhd2FpdCB0aGlzLmxvYWRRdWVyeUxlbmd0aHMoKTtcclxuICAgIHRoaXMubGFzdERvYyA9IHJlc3VsdC5sYXN0RG9jIGFzIGFueTtcclxuICAgIHRoaXMuZmlyc3REb2MgPSByZXN1bHQuZmlyc3REb2MgYXMgYW55O1xyXG5cclxuICAgIC8vIEF0dWFsaXphciBjdXJyZW50Q2xpZW50UGFnZUluZGV4IHNlIHJldG9ybmFkbyBwZWxvIGZhbGxiYWNrXHJcbiAgICBpZiAocmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSByZXN1bHQuY3VycmVudENsaWVudFBhZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3VtID0gMDtcclxuICAgIGlmICh0aGlzLmRhdGEudG90YWxSZWYpIHtcclxuICAgICAgZm9yIChjb25zdCB0b3RhbFJlZiBvZiB0aGlzLmRhdGEudG90YWxSZWYpIHtcclxuICAgICAgICBjb25zdCB0b3RhbFJlZkRvYyA9IGF3YWl0IHRvdGFsUmVmLnJlZi5nZXQoKTtcclxuICAgICAgICBjb25zdCBkb2NEYXRhID0gdG90YWxSZWZEb2MuZGF0YSgpIGFzIGFueTtcclxuICAgICAgICBpZiAoZG9jRGF0YSB8fCByZXN1bHQuZmlsdGVyTGVuZ3RoKSB7XHJcbiAgICAgICAgICBzdW0gPVxyXG4gICAgICAgICAgICByZXN1bHQuZmlsdGVyTGVuZ3RoID8/XHJcbiAgICAgICAgICAgICgoc3VtICsgKGRvY0RhdGEgPyBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXSA6IDApKSBhcyBudW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSBzdW07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oYXNOZXh0UGFnZSA9IHJlc3VsdC5oYXNOZXh0UGFnZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pdGVtcyk7XHJcbiAgICB0aGlzLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblBhZ2VDaGFuZ2UoZXZlbnQ/OiBQYWdlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSAmJiBldmVudCkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICBjb25zdCBwcmV2aW91c1BhZ2VJbmRleCA9IGV2ZW50LnByZXZpb3VzUGFnZUluZGV4ID8/IDA7XHJcbiAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcclxuICAgICAgY29uc3QgY3VycmVudENvbXBvbmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcclxuICAgICAgY29uc3QgZXZlbnRQYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplO1xyXG4gICAgICBjb25zdCB0b3RhbEl0ZW1zID0gdGhpcy50b3RhbEl0ZW1zO1xyXG5cclxuICAgICAgbGV0IG5hdmlnYXRpb25EaXJlY3Rpb246IHN0cmluZztcclxuICAgICAgbGV0IHJlc2V0RG9jcyA9IGZhbHNlO1xyXG4gICAgICBsZXQgb3JpZ2luYWxQYWdlU2l6ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBjb25zdCBsYXN0UGFnZUluZGV4ID0gTWF0aC5tYXgoXHJcbiAgICAgICAgMCxcclxuICAgICAgICBNYXRoLmNlaWwodG90YWxJdGVtcyAvIGV2ZW50UGFnZVNpemUpIC0gMVxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gQXR1YWxpemFyIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggc2VtcHJlIHBhcmEgbyBmYWxsYmFja1xyXG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSBwYWdlSW5kZXg7XHJcblxyXG4gICAgICBpZiAocHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJiBwYWdlSW5kZXggPiBwcmV2aW91c1BhZ2VJbmRleCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VOdW1iZXIrKztcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgcGFnZUluZGV4IDwgcHJldmlvdXNQYWdlSW5kZXhcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZU51bWJlciA9IE1hdGgubWF4KDEsIHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgLSAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50UGFnZVNpemUgIT09IGN1cnJlbnRDb21wb25lbnRQYWdlU2l6ZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdBbHRlcm91IGEgcXVhbnRpZGFkZSBkZSBlbGVtZW50b3MgZXhpYmlkb3MgcG9yIHDDoWdpbmEnKTtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnRQYWdlU2l6ZTtcclxuICAgICAgICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2ZvcndhcmQnO1xyXG4gICAgICAgIHJlc2V0RG9jcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBwYWdlSW5kZXggPT09IDAgJiZcclxuICAgICAgICBwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgcGFnZUluZGV4IDwgcHJldmlvdXNQYWdlSW5kZXhcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1B1bG91IHBhcmEgYSBwcmltZWlyYSBww6FnaW5hJyk7XHJcbiAgICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdmb3J3YXJkJztcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyID0gMTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xyXG4gICAgICAgIHJlc2V0RG9jcyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgcGFnZUluZGV4ID09PSBsYXN0UGFnZUluZGV4ICYmXHJcbiAgICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhZ2VJbmRleCA+IHByZXZpb3VzUGFnZUluZGV4ICYmXHJcbiAgICAgICAgcGFnZUluZGV4IC0gcHJldmlvdXNQYWdlSW5kZXggPiAxXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQdWxvdSBwYXJhIGEgdWx0aW1hIHDDoWdpbmEnKTtcclxuICAgICAgICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2JhY2t3YXJkJztcclxuICAgICAgICByZXNldERvY3MgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA9XHJcbiAgICAgICAgICB0b3RhbEl0ZW1zIC0gbGFzdFBhZ2VJbmRleCAqIGV2ZW50UGFnZVNpemU7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlID4gMCAmJlxyXG4gICAgICAgICAgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPCBldmVudFBhZ2VTaXplXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBvcmlnaW5hbFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcclxuICAgICAgICAgIHRoaXMucGFnZVNpemUgPSBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhZ2VJbmRleCA+IHByZXZpb3VzUGFnZUluZGV4XHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9jZWRlbmRvJyk7XHJcbiAgICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdmb3J3YXJkJztcclxuICAgICAgICByZXNldERvY3MgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgcGFnZUluZGV4IDwgcHJldmlvdXNQYWdlSW5kZXhcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JldHJvY2VkZW5kby4nKTtcclxuICAgICAgICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ2JhY2t3YXJkJztcclxuICAgICAgICByZXNldERvY3MgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBwcmV2aW91c1BhZ2VJbmRleCAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgcGFnZUluZGV4ID09PSBwcmV2aW91c1BhZ2VJbmRleFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUmVjYXJyZWdhbmRvLicpO1xyXG4gICAgICAgIG5hdmlnYXRpb25EaXJlY3Rpb24gPSAncmVsb2FkJztcclxuICAgICAgICByZXNldERvY3MgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmIChwcmV2aW91c1BhZ2VJbmRleCA9PT0gdW5kZWZpbmVkICYmIHBhZ2VJbmRleCA9PT0gMCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ0V2ZW50byBpbmljaWFsIGRvIHBhZ2luYWRvciBwYXJhIHDDoWcgMC4gbmdPbkluaXQgY2FycmVnb3UuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXZlbnQpIHRoaXMucGFnZUV2ZW50ID0gZXZlbnQ7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignSU5FU1BFUkFETyEgQ29uZGnDp8OjbyBkZSBuYXZlZ2HDp8OjbyBuw6NvIHRyYXRhZGE6JywgZXZlbnQpO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5hdmlnYXRpb25EaXJlY3Rpb24pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQobmF2aWdhdGlvbkRpcmVjdGlvbiwgcmVzZXREb2NzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJybyBhbyBjYXJyZWdhciBpdGVucyBwYWdpbmFkb3M6JywgZXJyb3IpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICBpZiAob3JpZ2luYWxQYWdlU2l6ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gb3JpZ2luYWxQYWdlU2l6ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChldmVudCkgdGhpcy5wYWdlRXZlbnQgPSBldmVudDtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE91dHJvcyBtw6l0b2Rvc1xyXG5cclxuICBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAvLyBTZW0gcGFnaW5hw6fDo29cclxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9IFN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcbiAgICAvLyBDb20gcGFnaW5hw6fDo29cclxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZpbHRlclZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuZmlsdGVyU3ViamVjdC5uZXh0KHRoaXMuZmlsdGVyVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ29Ub0RldGFpbHMocm93OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRhdGEuaXNOb3RDbGlja2FibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuZGF0YS51cmwgfHwgdGhpcy5kYXRhLm5hbWU7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwoXHJcbiAgICAgIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2AvJHt1cmxQYXRofWAsIHJvdy5pZF0pXHJcbiAgICApO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRSZWxhdGlvbihwYXJhbXM6IHtcclxuICAgIGlkOiBhbnk7XHJcbiAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XHJcbiAgICBuZXdQcm9wZXJ0eTogc3RyaW5nO1xyXG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHNuYXBzaG90OiBmaXJlc3RvcmUuRG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPiB8IHVuZGVmaW5lZDtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBhcmFtcy5pZCAhPT0gJycgJiZcclxuICAgICAgICBwYXJhbXMuaWQgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbiAhPT0gJydcclxuICAgICAgKSB7XHJcbiAgICAgICAgc25hcHNob3QgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgIHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb24ocGFyYW1zLmNvbGxlY3Rpb24pLmRvYyhwYXJhbXMuaWQpLmdldCgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc25hcHNob3QgJiYgc25hcHNob3QuZXhpc3RzKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHNuYXBzaG90LmRhdGEoKSBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGE/LltwYXJhbXMubmV3UHJvcGVydHldID8/ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbGF0aW9ucygpIHtcclxuICAgIGNvbnN0IHJlbGF0aW9uUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZWxhdGlvbilcclxuICAgICAgLmZsYXRNYXAoKGNvbCkgPT5cclxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbC5yZWxhdGlvbikge1xyXG4gICAgICAgICAgICBpdGVtW2NvbC5wcm9wZXJ0eV0gPSBhd2FpdCB0aGlzLmdldFJlbGF0aW9uKHtcclxuICAgICAgICAgICAgICBpZDogaXRlbVtjb2wucmVsYXRpb24ucHJvcGVydHldLFxyXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbC5yZWxhdGlvbi5jb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgIG5ld1Byb3BlcnR5OiBjb2wucmVsYXRpb24ubmV3UHJvcGVydHksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocmVsYXRpb25Qcm9taXNlcyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRRdWVyeUxlbmd0aChwYXJhbXM6IHtcclxuICAgIGl0ZW06IGFueTtcclxuICAgIHJlbGF0aW9uOiB7XHJcbiAgICAgIGNvbGxlY3Rpb246IHN0cmluZztcclxuICAgICAgcHJvcGVydHk6IHN0cmluZztcclxuICAgICAgb3BlcmF0b3I6IFdoZXJlRmlsdGVyT3A7XHJcbiAgICAgIHZhbHVlOiBzdHJpbmc7XHJcbiAgICB9O1xyXG4gIH0pIHtcclxuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdGhpcy5maXJlc3RvcmVcclxuICAgICAgLmNvbGxlY3Rpb24ocGFyYW1zLnJlbGF0aW9uLmNvbGxlY3Rpb24pXHJcbiAgICAgIC5yZWYud2hlcmUoXHJcbiAgICAgICAgcGFyYW1zLnJlbGF0aW9uLnByb3BlcnR5LFxyXG4gICAgICAgIHBhcmFtcy5yZWxhdGlvbi5vcGVyYXRvcixcclxuICAgICAgICBwYXJhbXMuaXRlbVtwYXJhbXMucmVsYXRpb24udmFsdWVdXHJcbiAgICAgIClcclxuICAgICAgLmdldCgpO1xyXG4gICAgcmV0dXJuIHNuYXBzaG90LnNpemU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRRdWVyeUxlbmd0aHMoKSB7XHJcbiAgICBjb25zdCBsZW5ndGhQcm9taXNlcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnF1ZXJ5TGVuZ3RoKVxyXG4gICAgICAuZmxhdE1hcCgoY29sKSA9PlxyXG4gICAgICAgIHRoaXMuaXRlbXMubWFwKGFzeW5jIChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sLnF1ZXJ5TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bY29sLnByb3BlcnR5XSA9IGF3YWl0IHRoaXMuZ2V0UXVlcnlMZW5ndGgoe1xyXG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXHJcbiAgICAgICAgICAgICAgcmVsYXRpb246IGNvbC5xdWVyeUxlbmd0aCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKGxlbmd0aFByb21pc2VzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVySXRlbXMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLmNvbmRpdGlvbnMpIHtcclxuICAgICAgdGhpcy5kYXRhLmNvbmRpdGlvbnMuZm9yRWFjaCgoY29uZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3BlcmF0b3JGdW5jdGlvbiA9ICh0aGlzLnRhYmxlU2VydmljZS5vcGVyYXRvcnMgYXMgYW55KVtcclxuICAgICAgICAgICAgY29uZC5vcGVyYXRvclxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIGlmIChvcGVyYXRvckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvcGVyYXRvckZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgIGl0ZW1bY29uZC5maXJlc3RvcmVQcm9wZXJ0eV0sXHJcbiAgICAgICAgICAgICAgY29uZC5kYXNoUHJvcGVydHlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGaWx0cm8gZGUgZGF0YVxyXG4gIGFzeW5jIHNlYXJjaCgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZS5hcnJhbmdlID09PSAnYXNjZW5kaW5nJykge1xyXG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xyXG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0U29ydC52YWx1ZS5wcm9wZXJ0eSxcclxuICAgICAgICAgIG9yZGVyOiAnYXNjJyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUuYXJyYW5nZSA9PT0gJ2Rlc2NlbmRpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XHJcbiAgICAgICAgICBmaWVsZDogdGhpcy5zZWxlY3RTb3J0LnZhbHVlLnByb3BlcnR5LFxyXG4gICAgICAgICAgb3JkZXI6ICdkZXNjJyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xyXG4gICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9XHJcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5maWx0ZXJzRm9ybS5hdCgwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA/PyAnJ1xyXG4gICAgICAgIDogJyc7XHJcbiAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlc2V0RmlsdGVyKCkge1xyXG4gICAgaWYgKCF0aGlzLmRhdGEucGFnaW5hdGlvbikge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlclByZWRpY2F0ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmZpbHRlclByZWRpY2F0ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJQcmVkaWNhdGUpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5maWx0ZXJQcmVkaWNhdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY2xlYXIoKTtcclxuICAgIHRoaXMuYWRkRmlsdGVyKCk7XHJcbiAgICB0aGlzLnNlbGVjdFNvcnQucGF0Y2hWYWx1ZSgnJyk7XHJcbiAgICB0aGlzLnNvcnRCeSA9IHtcclxuICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0QnkgPyB0aGlzLmRhdGEuc29ydEJ5Lm9yZGVyIDogJ2Rlc2MnLFxyXG4gICAgICBmaWVsZDogdGhpcy5kYXRhLnNvcnRCeSA/IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQgOiAnY3JlYXRlZEF0JyxcclxuICAgIH07XHJcblxyXG4gICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xyXG4gICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9ICcnO1xyXG4gICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBNw6l0b2RvIHDDumJsaWNvIHBhcmEgcmVjYXJyZWdhciBhIHRhYmVsYVxyXG4gIGFzeW5jIHJlbG9hZFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGlzcGxheWVkQ29sdW1ucygpIHtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KFtdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbHVtblByb3BlcnRpZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnByb3BlcnR5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gW107XHJcbiAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICBpZiAoY29sLmlzRmlsdGVyYWJsZSkge1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcy5wdXNoKHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIGFycmFuZ2U6ICdmaWx0ZXInLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLmlzU29ydGFibGUpIHtcclxuICAgICAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcy5wdXNoKHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIGFycmFuZ2U6ICdhc2NlbmRpbmcnLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSArICc6IGNyZXNjZW50ZScsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zb3J0YWJsZURyb3Bkb3duSXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICBhcnJhbmdlOiAnZGVzY2VuZGluZycsXHJcbiAgICAgICAgICB0aXRsZTogY29sLnRpdGxlICsgJzogZGVjcmVzY2VudGUnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2wuaXNGaWx0ZXJhYmxlQnlEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgYXJyYW5nZTogJ2ZpbHRlckJ5RGF0ZScsXHJcbiAgICAgICAgICB0aXRsZTogY29sLnRpdGxlICsgJzogZmlsdHJvIHBvciBkYXRhJyxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xyXG4gICAgICB0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PlxyXG4gICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcy5wdXNoKHsgLi4ub3B0aW9uLCBhcnJhbmdlOiAnZXF1YWxzJyB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNTdHJpbmcodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbiAgfVxyXG5cclxuICAvLyBNw6l0b2RvcyBwYXJhIGNvbnRyb2xlIGRvIHRvb2x0aXBcclxuICBvbkNlbGxNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCByb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIFPDsyBtb3N0cmFyIHRvb2x0aXAgc2UgYSBjb2x1bmEgdGl2ZXIgY2hhckxpbWl0IGRlZmluaWRvXHJcbiAgICBpZiAoIWNvbC5jaGFyTGltaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZ1bGxWYWx1ZSA9IHRoaXMuZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKTtcclxuXHJcbiAgICAvLyBTw7MgbW9zdHJhciB0b29sdGlwIHNlIG8gdmFsb3IgY29tcGxldG8gZm9yIG1haW9yIHF1ZSBvIGxpbWl0ZVxyXG4gICAgaWYgKGZ1bGxWYWx1ZS5sZW5ndGggPD0gY29sLmNoYXJMaW1pdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ob3ZlcmVkQ2VsbCA9IHsgcm93LCBjb2wgfTtcclxuICAgIHRoaXMudG9vbHRpcENvbnRlbnQgPSBmdWxsVmFsdWU7XHJcblxyXG4gICAgLy8gRGVmaW5pciBwb3Npw6fDo28gZG8gdG9vbHRpcFxyXG4gICAgdGhpcy50b29sdGlwUG9zaXRpb24gPSB7XHJcbiAgICAgIHg6IGV2ZW50LmNsaWVudFggKyAxMCxcclxuICAgICAgeTogZXZlbnQuY2xpZW50WSAtIDEwLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBUaW1lb3V0IHBhcmEgbW9zdHJhciBvIHRvb2x0aXBcclxuICAgIHRoaXMudG9vbHRpcFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuaG92ZXJlZENlbGwgJiZcclxuICAgICAgICB0aGlzLmhvdmVyZWRDZWxsLnJvdyA9PT0gcm93ICYmXHJcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2VsbC5jb2wgPT09IGNvbFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNob3dUb29sdGlwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIG9uQ2VsbE1vdXNlTGVhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50b29sdGlwVGltZW91dCk7XHJcbiAgICAgIHRoaXMudG9vbHRpcFRpbWVvdXQgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2hvd1Rvb2x0aXAgPSBmYWxzZTtcclxuICAgIHRoaXMuaG92ZXJlZENlbGwgPSBudWxsO1xyXG4gICAgdGhpcy50b29sdGlwQ29udGVudCA9ICcnO1xyXG4gIH1cclxuXHJcbiAgb25DZWxsTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaG93VG9vbHRpcCkge1xyXG4gICAgICB0aGlzLnRvb2x0aXBQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiBldmVudC5jbGllbnRYICsgMTAsXHJcbiAgICAgICAgeTogZXZlbnQuY2xpZW50WSAtIDEwLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTcOpdG9kb3MgcGFyYSBpbnZlcnPDo28gdmVydGljYWwgZG9zIHRhYnNcclxuICBnZXRUYWJHcm91cHModGFiczogYW55W10pOiBudW1iZXJbXSB7XHJcbiAgICBpZiAoIXRhYnMgfHwgdGFicy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCB0b3RhbEdyb3VwcyA9IE1hdGguY2VpbCh0YWJzLmxlbmd0aCAvIDYpO1xyXG4gICAgY29uc3QgZ3JvdXBzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgIC8vIENyaWFyIGFycmF5IGRlIMOtbmRpY2VzIGludmVydGlkb3MgKMO6bHRpbW8gZ3J1cG8gcHJpbWVpcm8pXHJcbiAgICBmb3IgKGxldCBpID0gdG90YWxHcm91cHMgLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICBncm91cHMucHVzaChpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFiR3JvdXAodGFiczogYW55W10sIGdyb3VwSW5kZXg6IG51bWJlcik6IGFueVtdIHtcclxuICAgIGlmICghdGFicyB8fCB0YWJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBncm91cEluZGV4ICogNjtcclxuICAgIGNvbnN0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIDYsIHRhYnMubGVuZ3RoKTtcclxuXHJcbiAgICByZXR1cm4gdGFicy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgfVxyXG5cclxuICBnZXRSZWFsVGFiSW5kZXgoZ3JvdXBJbmRleDogbnVtYmVyLCB0YWJJbmRleEluR3JvdXA6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YS50YWJzPy50YWJzRGF0YSkgcmV0dXJuIDA7XHJcbiAgICBjb25zdCB0b3RhbEdyb3VwcyA9IE1hdGguY2VpbCh0aGlzLmRhdGEudGFicy50YWJzRGF0YS5sZW5ndGggLyA2KTtcclxuICAgIGNvbnN0IHJlYWxHcm91cEluZGV4ID0gdG90YWxHcm91cHMgLSAxIC0gZ3JvdXBJbmRleDtcclxuICAgIHJldHVybiByZWFsR3JvdXBJbmRleCAqIDYgKyB0YWJJbmRleEluR3JvdXA7XHJcbiAgfVxyXG5cclxuICBvblRhYmxlU2VsZWN0ZWQoaTogbnVtYmVyLCBqOiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5kYXRhLnRhYnM/LnRhYnNEYXRhIHx8ICF0aGlzLmRhdGEudGFicy5tZXRob2QpIHJldHVybjtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0aGlzLmdldFJlYWxUYWJJbmRleChpLCBqKTtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMuZGF0YS50YWJzLnRhYnNEYXRhW3RoaXMuc2VsZWN0ZWRUYWJdO1xyXG4gICAgaWYgKHRhYikge1xyXG4gICAgICB0aGlzLmRhdGEudGFicy5tZXRob2QodGFiLCB0aGlzLnNlbGVjdGVkVGFiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVGFiU2VsZWN0ZWQob3JpZ2luYWxJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYiA9PT0gb3JpZ2luYWxJbmRleDtcclxuICB9XHJcblxyXG4gIHNob3VsZFNob3dBY3Rpb25CdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YT8uYWN0aW9uQnV0dG9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbihudWxsKSA/PyB0cnVlO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiZGF0YVwiIGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC02XCI+XHJcbiAgICA8IS0tIFVOSUZJRUQgQ09OVFJPTCBQQU5FTDogRklMVEVSUywgU09SVCAmIEFDVElPTlMgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIGRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgIChkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDAgfHxcclxuICAgICAgICAgIHNvcnRhYmxlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICBkYXRhLmFjdGlvbkJ1dHRvbilcclxuICAgICAgXCJcclxuICAgID5cclxuICAgICAgPCEtLSBQQU5FTCBIRUFERVI6IFRpdGxlLCBDdXN0b20gQWN0aW9uLCBhbmQgR2xvYmFsIEFjdGlvbnMgLS0+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIm1iLTQgZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLWItMiBib3JkZXItZ3JheS0yMDAgcGItNCBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSBMZWZ0IFNpZGU6IFRpdGxlICYgTWFpbiBBY3Rpb24gQnV0dG9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlciB0ZXh0LXhsIHRleHQtYmx1ZS01MDBcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDBcIlxyXG4gICAgICAgICAgICAgID5GaWx0cm9zIGUgQcOnw7Vlczwvc3BhblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbiAmJiBkYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb25cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAoZGF0YS5hY3Rpb25CdXR0b24uY29sb3JDbGFzcyB8fCAnYmctYmx1ZS01MDAnKSArXHJcbiAgICAgICAgICAgICAgJyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgaG92ZXI6b3BhY2l0eS03MCdcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICBkYXRhLmFjdGlvbkJ1dHRvbi5tZXRob2QgPyBkYXRhLmFjdGlvbkJ1dHRvbi5tZXRob2QoJGV2ZW50KSA6IG51bGxcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcclxuICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAge3sgZGF0YS5hY3Rpb25CdXR0b24ubGFiZWwgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFJpZ2h0IFNpZGU6IFNlYXJjaCwgUmVzZXQsIEV4cG9ydCAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fCB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID09PSB0cnVlXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1ncmVlbi02MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmVlbi03MDBcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgIFBlc3F1aXNhclxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1yZWQtNTAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctcmVkLTYwMFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaW1wYXIgZmlsdHJvc1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXJlZG8tYWx0XCI+PC9pPlxyXG4gICAgICAgICAgICBSZXNldGFyXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5kb3dubG9hZCAhPT0gZmFsc2UgJiYgZG93bmxvYWRUYWJsZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1vcmFuZ2UtNTAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctb3JhbmdlLTYwMFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIFRhYmVsYVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPD0gMFxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgJGFueShhcnJhbmdlKSAmJiBkb3dubG9hZFRhYmxlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gZG93bmxvYWRUYWJsZSgkYW55KGFycmFuZ2UpLCBkYXRhLmNvbmRpdGlvbnMgfHwgW10pXHJcbiAgICAgICAgICAgICAgICA6IG51bGxcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT5cclxuICAgICAgICAgICAgRXhwb3J0YXJcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gRklMVEVSUyBDT05URU5UIChXSVRIIFJFRklORU1FTlRTKSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS0zXCIgKm5nSWY9XCJmaWx0ZXJzRm9ybS5jb250cm9scy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgW2Zvcm1Hcm91cF09XCIkYW55KGZpbHRlckdyb3VwKVwiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyR3JvdXAgb2YgZmlsdGVyc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTMgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHAtMlwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSBGSUxURVIgVFlQRSBTRUxFQ1RPUiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRlIGZpbHRybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZSBvIHRpcG8uLi5cIlxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0RmlsdGVyXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RGaWx0ZXJDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZHJvcGRvd25JdGVtc1wiIFt2YWx1ZV09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5pY29uIHx8ICdmYSBmYS1maWx0ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWJsdWUtNTAwXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gVEVYVCBGSUxURVIgLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PSAnZmlsdGVyJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1ncmF5LTQwMFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgXCJGaWx0cmFyXCJcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXHJcbiAgICAgICAgICAgICAgICAjaW5wdXRcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXHJcbiAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cClcclxuICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXHJcbiAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcclxuICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxyXG4gICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgLml0ZW1zXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gREFURSBGSUxURVIgLS0+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzM0MHB4XSBmbGV4LWF1dG9cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxyXG4gICAgICAgICAgICAgICdmaWx0ZXJCeURhdGUnXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtc3RyZXRjaCBnYXAtMyBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPkRhdGEgSW5pY2lhbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcclxuICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXIgdGV4dC1ncmF5LTQwMFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBGaW5hbDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpbmFsRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFJFTU9WRSBGSUxURVIgQlVUVE9OIC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcnNGb3JtLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm1sLWF1dG8gZmxleC1zaHJpbmstMFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGgtMTAgdy0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCBob3ZlcjpiZy1yZWQtMTAwXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlciBmaWx0cm9cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCB0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gUEFORUwgRk9PVEVSOiBBZGQgRmlsdGVyICYgU29ydCAtLT5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiLW1iLTIgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00IHNtOmZsZXgtcm93XCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gQWRkIEZpbHRlciBCdXR0b24gLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRyYW5zZm9ybSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWJsdWUtMzAwIGJnLWJsdWUtNTAgcHgtNiBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSBob3Zlcjpib3JkZXItYmx1ZS00MDAgaG92ZXI6YmctYmx1ZS0xMDAgaG92ZXI6c2hhZG93LW1kXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFkaWNpb25hciBub3ZvIGZpbHRyb1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtci0yXCI+PC9pPlxyXG4gICAgICAgICAgICBBZGljaW9uYXIgRmlsdHJvXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTb3J0IERyb3Bkb3duIC0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwidy1mdWxsIHNtOnctYXV0byBzbTptaW4tdy1bMjUwcHhdXCJcclxuICAgICAgICAgICpuZ0lmPVwic29ydGFibGVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+T3JkZW5hciBwb3I8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUuLi5cIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0U29ydFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzb3J0YWJsZURyb3Bkb3duSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNvcnQtYWxwaGEtZG93biB0ZXh0LWN5YW4tNjAwXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU0lNUExFIFNFQVJDSCAoZm9yIG5vbi1wYWdpbmF0ZWQgdGFibGVzKSAtLT5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcC00IHNoYWRvdy1sZ1wiXHJcbiAgICAgICpuZ0lmPVwiZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxyXG4gICAgICAgICAgQnVzY2FyXHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcclxuICAgICAgICAgIChrZXl1cCk9XCJhcHBseUZpbHRlcihmaWx0ZXJJbnB1dC52YWx1ZSlcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcclxuICAgICAgICAgICNmaWx0ZXJJbnB1dFxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCBjbGFzcz1cInRleHQtZ3JheS01MDBcIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvblwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAoZGF0YS5hY3Rpb25CdXR0b24uY29sb3JDbGFzcyB8fCAnYmctYmx1ZS01MDAnKSArXHJcbiAgICAgICAgICAnIGZsb2F0LXJpZ2h0IGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgcHgtNCBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSBob3ZlcjpvcGFjaXR5LTcwJ1xyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCI+PC9pPlxyXG4gICAgICAgIHt7IGRhdGEuYWN0aW9uQnV0dG9uLmxhYmVsIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwibXgtYXV0byBmbGV4IGZsZXgtY29sXCJcclxuICAgICAgICAqbmdJZj1cImRhdGEudGFicyAmJiBkYXRhLnRhYnMudGFic0RhdGEgJiYgZGF0YS50YWJzLnRhYnNEYXRhLmxlbmd0aCA+IDBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPCEtLSBDYWxjdWxhciBxdWFudG9zIGdydXBvcyBkZSA2IHRhYnMgZXhpc3RlbSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgbGV0IGdyb3VwSW5kZXggb2YgZ2V0VGFiR3JvdXBzKGRhdGEudGFicy50YWJzRGF0YSk7XHJcbiAgICAgICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm14LWF1dG8gZmxleCBmbGV4LXJvd1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICBsZXQgdGFiIG9mIGdldFRhYkdyb3VwKGRhdGEudGFicy50YWJzRGF0YSwgZ3JvdXBJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9yZGVyLTIgYm9yZGVyLWdyYXktMzAwIGJnLWdyYXktMjAwIHB4LTQgcHktMiBmb250LW1lZGl1bSB0cmFuc2l0aW9uIGhvdmVyOmJyaWdodG5lc3MtOTVcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGlzVGFiU2VsZWN0ZWQoZ2V0UmVhbFRhYkluZGV4KGksIGopKVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1iLTAgYnJpZ2h0bmVzcy0xMTAnXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRhYmxlU2VsZWN0ZWQoaSwgailcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IHRhYi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWIuY291bnRlciAhPT0gdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0yIHRleHQteHMgZm9udC1ib2xkXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwidGFiLmNvdW50ZXJDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRhYi5jb3VudGVyIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCB3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQteGxcIj5cclxuICAgICAgICA8dGFibGVcclxuICAgICAgICAgIG1hdC10YWJsZVxyXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgICAgICBtYXRTb3J0XHJcbiAgICAgICAgICAjc29ydD1cIm1hdFNvcnRcIlxyXG4gICAgICAgICAgbWF0U29ydEFjdGl2ZT1cImNyZWF0ZWRBdFwiXHJcbiAgICAgICAgICBtYXRTb3J0RGlyZWN0aW9uPVwiZGVzY1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGRhdGEuZGlzcGxheWVkQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIG1hdENvbHVtbkRlZj1cInt7IGNvbC5wcm9wZXJ0eSB9fVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdEhlYWRlckNlbGxEZWY+XHJcbiAgICAgICAgICAgICAgPCEtLSBJRiBUSEUgQ09MVU1OIElTIE5PVCBTT1JUQUJMRSwgVEhFTiBET04nVCBTSE9XIFRIRSBTT1JUIEJVVFRPTlMgLS0+XHJcbiAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaXNTb3J0YWJsZSB8fCBkYXRhLnBhZ2luYXRpb24gPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGE/LmNvbG9yPy5iZyA/ICcgJyArICRhbnkoZGF0YS5jb2xvcikuYmcgOiAnJykgK1xyXG4gICAgICAgICAgICAgICAgICAoZGF0YT8uY29sb3I/LnRleHQgPyAnICcgKyAkYW55KGRhdGEuY29sb3IpLnRleHQgOiAnJylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8IS0tIElGIFRIRSBDT0xVTU4gSVMgU09SVEFCTEUsIFRIRU4gU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxyXG4gICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaXNTb3J0YWJsZSAmJiBkYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGE/LmNvbG9yPy5iZyA/ICcgJyArICRhbnkoZGF0YS5jb2xvcikuYmcgOiAnJykgK1xyXG4gICAgICAgICAgICAgICAgICAoZGF0YT8uY29sb3I/LnRleHQgPyAnICcgKyAkYW55KGRhdGEuY29sb3IpLnRleHQgOiAnJylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbC5tZXRob2QgPyBjb2wubWV0aG9kKHJvdykgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uQ2VsbE1vdXNlRW50ZXIoJGV2ZW50LCByb3csIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DZWxsTW91c2VMZWF2ZSgpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZW1vdmUpPVwib25DZWxsTW91c2VNb3ZlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ0hFQ0sgSUYgVEhFIENPTFVNTiBNVVNUIEJFIERJU1BMQVlFRCAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbC5pbWFnZSAmJiAhY29sLmljb25DbGFzcyAmJiAhY29sLm1ldGhvZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hhckxpbWl0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sLnByb3BlcnR5XS5sZW5ndGggPiBjb2wuY2hhckxpbWl0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpdGhpbkxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyb3dbY29sLnByb3BlcnR5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgJiYgaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiY29sLmhhc0xpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICE9PSB0cnVlICYmICFpc1N0cmluZyhjb2wuaGFzTGluaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aXRoaW5MaW1pdD5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyb3dbY29sLnByb3BlcnR5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgJiYgaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbC5oYXNMaW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAhPT0gdHJ1ZSAmJiAhaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3csIHRydWUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIElNQUdFIC0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wuaW1hZ2UgJiYgY29sLmltYWdlLnBhdGggJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgW3NyY109XCJjb2wuaW1hZ2UucGF0aCArICcvJyArIHJvd1tjb2wucHJvcGVydHldXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sLmltYWdlLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgYWx0PVwiSW1hZ2VtXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS51cmwgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgW3NyY109XCJyb3dbY29sLnByb3BlcnR5XVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIkltYWdlbVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pY29uQ2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpY29uQ2xhc3Mgb2YgY29sLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGljb25DbGFzcy5idXR0b25NZXRob2Qocm93LCAkZXZlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uQ2xhc3MuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xhc3MuY29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAkYW55KGljb25DbGFzcy5jb25kaXRpb24pKHJvdykpXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGljb25DbGFzcy50ZXh0IH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5Qcm9wZXJ0aWVzXCI+PC90cj5cclxuICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cnOiBkYXRhLmlzTm90Q2xpY2thYmxlID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICdleGFtcGxlLWVsZW1lbnQtcm93IGN1cnNvci1wb2ludGVyJzogIWRhdGEuaXNOb3RDbGlja2FibGVcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgIG1hdC1yb3dcclxuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtblByb3BlcnRpZXNcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0RldGFpbHMocm93KVwiXHJcbiAgICAgICAgICA+PC90cj5cclxuXHJcbiAgICAgICAgICA8IS0tIFJPVyBTSE9XTiBXSEVOIFRIRVJFIElTIE5PIE1BVENISU5HIERBVEEuIC0tPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICptYXROb0RhdGFSb3c+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFpc0xvYWRpbmdcIiBjbGFzcz1cIm1hdC1jZWxsIHAtNFwiIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvIHBhcmEgYSBidXNjYVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvci1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAgICAgICAgICNwYWdpbmF0b3JcclxuICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbMjUsIDUwLCAxMDBdXCJcclxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgW2xlbmd0aF09XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcclxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlbGVjdCBwYWdlIG9mIHBlcmlvZGljIGVsZW1lbnRzXCJcclxuICAgICAgICAgICAgKHBhZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2hpZGUtbGVuZ3RoJzpcclxuICAgICAgICAgICAgICAgIFsnZmlsdGVyJywgJ2ZpbHRlckJ5RGF0ZScsICdlcXVhbHMnXS5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZVxyXG4gICAgICAgICAgICAgICAgKSB8fCB0aGlzLmRhdGEuZmlsdGVyRm4sXHJcbiAgICAgICAgICAgICAgJ2hpZGUtbmV4dC1idXR0b24nOiAhaGFzTmV4dFBhZ2UgJiYgZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICdoaWRlLWxhc3QtYnV0dG9uJzpcclxuICAgICAgICAgICAgICAgICghaGFzTmV4dFBhZ2UgJiYgZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlKSB8fCB0aGlzLmRhdGEuZmlsdGVyRm5cclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgIWlzTG9hZGluZyAmJlxyXG4gICAgICAgICAgICAgIGRhdGFTb3VyY2U/LmRhdGEgJiZcclxuICAgICAgICAgICAgICBkYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgIGRhdGE/LmZpbHRlckZuXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicGFnZS1udW1iZXItZGlzcGxheVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGN1cnJlbnRQYWdlTnVtYmVyIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUT09MVElQIFBFUlNPTkFMSVpBRE8gLS0+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93VG9vbHRpcFwiXHJcbiAgICBjbGFzcz1cImZpeGVkIHotNTAgbWF4LXctbWQgYnJlYWstd29yZHMgcm91bmRlZC1sZyBiZy1ncmF5LTgwMCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LXdoaXRlIHNoYWRvdy1sZ1wiXHJcbiAgICBbc3R5bGUubGVmdC5weF09XCJ0b29sdGlwUG9zaXRpb24ueFwiXHJcbiAgICBbc3R5bGUudG9wLnB4XT1cInRvb2x0aXBQb3NpdGlvbi55XCJcclxuICAgIFtzdHlsZS5wb2ludGVyLWV2ZW50c109XCInbm9uZSdcIlxyXG4gID5cclxuICAgIHt7IHRvb2x0aXBDb250ZW50IH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
798
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtwRSxPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUs3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPbkUsTUFBTSxPQUFPLGNBQWM7SUFvRHpCLGNBQWM7SUFDZCxZQUNVLE1BQWMsRUFDZCxZQUEwQixFQUMxQixTQUEyQjtRQUYzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFwRHJDLFlBQU8sR0FBbUIsSUFBSSxDQUFDO1FBRy9CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUN0QiwyQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFFcEIsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixjQUFTLEdBQUcsS0FBSyxDQUFD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RyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQXFCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxhQUFhLENBQUM7SUFDNUMsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDNUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7WUFDckMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUk7WUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7U0FDdkQ7UUFBQyxNQUFNO1lBQ04sT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7OzRHQXg1QlUsY0FBYztnR0FBZCxjQUFjLHNKQTBDZCxZQUFZLHVFQUNaLE9BQU8sZ0RDbEVwQix5MHJCQTJpQkE7NEZEcGhCYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7dUpBTVosSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBdUNtQixTQUFTO3NCQUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0gsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXJyYW5nZSwgQ29uZGl0aW9uLCBUYWIsIFRhYkRhdGEsIFRhYmxlRGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzL1RhYmxlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBbmd1bGFyRmlyZXN0b3JlLFxyXG4gIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdCxcclxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9maXJlc3RvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBPcmRlckJ5RGlyZWN0aW9uIH0gZnJvbSAnZmlyZWJhc2UvZmlyZXN0b3JlJztcclxuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdCc7XHJcbmltcG9ydCBXaGVyZUZpbHRlck9wID0gZmlyZWJhc2UuZmlyZXN0b3JlLldoZXJlRmlsdGVyT3A7XHJcbmltcG9ydCBmaXJlc3RvcmUgPSBmaXJlYmFzZS5maXJlc3RvcmU7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy8gSU5QVVRTXHJcbiAgQElucHV0KCkgZGF0YSE6IFRhYmxlRGF0YTtcclxuICBASW5wdXQoKSBkb3dubG9hZFRhYmxlPzogKGFycmFuZ2U6IEFycmFuZ2UsIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdKSA9PiB2b2lkO1xyXG4gIGFycmFuZ2U6IEFycmFuZ2UgfCBudWxsID0gbnVsbDtcclxuICAvLyBWQVJJQUJMRVNcclxuICBkYXRhU291cmNlITogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcbiAgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xyXG4gIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xyXG5cclxuICBwdWJsaWMgaXRlbXM6IGFueVtdID0gW107XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbGFzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PGFueT4gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGZpcnN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmc7IG9yZGVyOiBPcmRlckJ5RGlyZWN0aW9uIH0gPSB7XHJcbiAgICBmaWVsZDogJ2NyZWF0ZWRBdCcsXHJcbiAgICBvcmRlcjogJ2Rlc2MnLFxyXG4gIH07XHJcbiAgcHVibGljIGNvbHVtblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGZpbHRlcnNGb3JtOiBGb3JtQXJyYXk7XHJcblxyXG4gIHNlbGVjdFNvcnQ6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICBjdXJyZW50QXJyYW5nZSA9ICcnO1xyXG5cclxuICBoYXNOZXh0UGFnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBkcm9wZG93bkl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIHNvcnRhYmxlRHJvcGRvd25JdGVtczogYW55W10gPSBbXTtcclxuICBwYWdlU2l6ZSA9IDI1O1xyXG4gIHRvdGFsSXRlbXMgPSAwO1xyXG4gIHBhZ2VFdmVudD86IFBhZ2VFdmVudDtcclxuICBmaWx0ZXJWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGhhc0ZpbHRlcmFibGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNTb3J0YWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGZpbHRlclByZWRpY2F0ZTogKChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIGZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWJvdW5jZVRpbWVNcyA9IDUwMDtcclxuXHJcbiAgc2VsZWN0ZWRUYWI6IG51bWJlciA9IDA7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcclxuXHJcbiAgLy8gUHJvcHJpZWRhZGVzIHBhcmEgY29udHJvbGUgZG8gdG9vbHRpcFxyXG4gIGhvdmVyZWRDZWxsOiB7IHJvdzogYW55OyBjb2w6IGFueSB9IHwgbnVsbCA9IG51bGw7XHJcbiAgc2hvd1Rvb2x0aXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b29sdGlwVGltZW91dDogYW55O1xyXG4gIHRvb2x0aXBDb250ZW50OiBzdHJpbmcgPSAnJztcclxuICB0b29sdGlwUG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICAvLyBDT05TVFJVQ1RPUlxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpcmVzdG9yZTogQW5ndWxhckZpcmVzdG9yZVxyXG4gICkge1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybSA9IG5ldyBGb3JtQXJyYXkoW3RoaXMuY3JlYXRlRmlsdGVyR3JvdXAoKV0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRmlsdGVyR3JvdXAoKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgc2VsZWN0RmlsdGVyOiBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgICB0eXBlRmlsdGVyOiBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgICBzZWxlY3RJdGVtOiBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgICBpbml0aWFsRGF0ZTogbmV3IEZvcm1Db250cm9sKCcnLCB0aGlzLnRhYmxlU2VydmljZS5kYXRlRm9ybWF0VmFsaWRhdG9yKCkpLFxyXG4gICAgICBmaW5hbERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJywgdGhpcy50YWJsZVNlcnZpY2UuZGF0ZUZvcm1hdFZhbGlkYXRvcigpKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkRmlsdGVyKGZpbHRlckRhdGE/OiB7XHJcbiAgICBzZWxlY3RGaWx0ZXI6IGFueTtcclxuICAgIHR5cGVGaWx0ZXI/OiBzdHJpbmc7XHJcbiAgICBzZWxlY3RJdGVtPzogYW55W107XHJcbiAgICBpbml0aWFsRGF0ZT86IHN0cmluZztcclxuICAgIGZpbmFsRGF0ZT86IHN0cmluZztcclxuICB9KTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdGaWx0ZXJHcm91cCA9IHRoaXMuY3JlYXRlRmlsdGVyR3JvdXAoKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyRGF0YSkge1xyXG4gICAgICBpZiAoZmlsdGVyRGF0YS5zZWxlY3RGaWx0ZXIpIHtcclxuICAgICAgICBuZXdGaWx0ZXJHcm91cC5nZXQoJ3NlbGVjdEZpbHRlcicpPy5zZXRWYWx1ZShmaWx0ZXJEYXRhLnNlbGVjdEZpbHRlcik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZpbHRlckRhdGEudHlwZUZpbHRlcikge1xyXG4gICAgICAgIG5ld0ZpbHRlckdyb3VwLmdldCgndHlwZUZpbHRlcicpPy5zZXRWYWx1ZShmaWx0ZXJEYXRhLnR5cGVGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmaWx0ZXJEYXRhLnNlbGVjdEl0ZW0pIHtcclxuICAgICAgICBuZXdGaWx0ZXJHcm91cC5nZXQoJ3NlbGVjdEl0ZW0nKT8uc2V0VmFsdWUoZmlsdGVyRGF0YS5zZWxlY3RJdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmlsdGVyRGF0YS5pbml0aWFsRGF0ZSkge1xyXG4gICAgICAgIG5ld0ZpbHRlckdyb3VwLmdldCgnaW5pdGlhbERhdGUnKT8uc2V0VmFsdWUoZmlsdGVyRGF0YS5pbml0aWFsRGF0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZpbHRlckRhdGEuZmluYWxEYXRlKSB7XHJcbiAgICAgICAgbmV3RmlsdGVyR3JvdXAuZ2V0KCdmaW5hbERhdGUnKT8uc2V0VmFsdWUoZmlsdGVyRGF0YS5maW5hbERhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5wdXNoKG5ld0ZpbHRlckdyb3VwKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0RmlsdGVyQ2hhbmdlKCkge1xyXG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggLSAxO1xyXG4gICAgY29uc3QgbGFzdEZpbHRlciA9IHRoaXMuZmlsdGVyc0Zvcm0uYXQobGFzdEluZGV4KTtcclxuICAgIGlmIChsYXN0RmlsdGVyLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYWRkRmlsdGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWx0ZXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5hZGRGaWx0ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUFsbEZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNsZWFyKCk7XHJcbiAgICB0aGlzLmFkZEZpbHRlcigpO1xyXG4gICAgdGhpcy5yZXNldEZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgLy8gTUVUSE9EU1xyXG4gIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5kYXRhLmNvbG9yKVxyXG4gICAgICB0aGlzLmRhdGEuY29sb3IgPSB7IGJnOiAnYmctcHJpbWFyeScsIHRleHQ6ICd0ZXh0LWJsYWNrJyB9O1xyXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5wcm9wZXJ0eTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuYWN0aW9uQnV0dG9uICYmICF0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbikge1xyXG4gICAgICB0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbiA9IChfcm93PzogYW55KSA9PiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbikge1xyXG4gICAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICBpZiAoY29sLmlzRmlsdGVyYWJsZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICAgIGFycmFuZ2U6ICdmaWx0ZXInLFxyXG4gICAgICAgICAgICB0aXRsZTogY29sLnRpdGxlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2wuaXNTb3J0YWJsZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaGFzU29ydGFibGVDb2x1bW4gPT09IGZhbHNlKSB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICAgIGFycmFuZ2U6ICdhc2NlbmRpbmcnLFxyXG4gICAgICAgICAgICB0aXRsZTogY29sLnRpdGxlICsgJzogY3Jlc2NlbnRlJyxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zb3J0YWJsZURyb3Bkb3duSXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgICAgYXJyYW5nZTogJ2Rlc2NlbmRpbmcnLFxyXG4gICAgICAgICAgICB0aXRsZTogY29sLnRpdGxlICsgJzogZGVjcmVzY2VudGUnLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2wuaXNGaWx0ZXJhYmxlQnlEYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgICAgYXJyYW5nZTogJ2ZpbHRlckJ5RGF0ZScsXHJcbiAgICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUgKyAnOiBmaWx0cm8gcG9yIGRhdGEnLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+XHJcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMucHVzaCh7IC4uLm9wdGlvbiwgYXJyYW5nZTogJ2VxdWFscycgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VtIHBhZ2luYcOnw6NvXHJcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgICAvLyBDb20gcGFnaW5hw6fDo29cclxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAodGhpcy5kYXRhLnNvcnRCeSlcclxuICAgICAgICB0aGlzLnNvcnRCeSA9IHtcclxuICAgICAgICAgIGZpZWxkOiB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkLFxyXG4gICAgICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIsXHJcbiAgICAgICAgfTtcclxuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0XHJcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lTXMpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gJ2NyZWF0ZWRBdCc7XHJcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSAnZGVzYyc7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEudG90YWxSZWYpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHRvdGFsUmVmIG9mIHRoaXMuZGF0YS50b3RhbFJlZikge1xyXG4gICAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XHJcbiAgICAgICAgICBjb25zdCBkb2NEYXRhID0gdG90YWxSZWZEb2MuZGF0YSgpIGFzIGFueTtcclxuICAgICAgICAgIGlmIChkb2NEYXRhICYmIGRvY0RhdGFbdG90YWxSZWYuZmllbGRdKVxyXG4gICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAodGhpcy50b3RhbEl0ZW1zICtcclxuICAgICAgICAgICAgICBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXSkgYXMgbnVtYmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGlzcGxheVZhbHVlKGNvbDogYW55LCByb3c6IGFueSwgd2l0aGluTGltaXQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdmFsdWU6IGFueTtcclxuXHJcbiAgICBpZiAoY29sLmNhbGN1bGF0ZVZhbHVlKSB7XHJcbiAgICAgIHZhbHVlID0gY29sLmNhbGN1bGF0ZVZhbHVlKHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wucHJvcGVydHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb2wuYXJyYXlGaWVsZCkge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZm9ybWF0QXJyYXlWYWx1ZSh2YWx1ZSwgY29sLmFycmF5RmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wucXVlcnlMZW5ndGggJiYgcm93W2NvbC5wcm9wZXJ0eV0pIHtcclxuICAgICAgdmFsdWUgPSByb3dbY29sLnByb3BlcnR5XTtcclxuICAgIH1cclxuXHJcbiAgICB2YWx1ZSA9IGNvbC5waXBlID8gY29sLnBpcGUudHJhbnNmb3JtKHZhbHVlKSA6IHZhbHVlO1xyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhbHVlID0gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgdmFsdWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2l0aGluTGltaXQgfHwgIWNvbC5jaGFyTGltaXQpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgY29sLmNoYXJMaW1pdCkgKyAnLi4uJztcclxuICB9XHJcblxyXG4gIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHBhdGguc3BsaXQoJy4nKTtcclxuICAgIHJldHVybiBwcm9wZXJ0aWVzLnJlZHVjZShcclxuICAgICAgKGFjYywgY3VycmVudFBhcnQpID0+IGFjYyAmJiBhY2NbY3VycmVudFBhcnRdLFxyXG4gICAgICBvYmpcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdEFycmF5VmFsdWUoYXJyYXk6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkgfHwgYXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWx1ZXMgPSBhcnJheVxyXG4gICAgICAubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZF0gfHwgJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlcy5qb2luKCcsICcpO1xyXG4gIH1cclxuXHJcbiAgLy8gTcOpdG9kb3Mgc2VtIHBhZ2luYcOnw6NvXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkSXRlbXMoKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gYXdhaXQgdGhpcy50YWJsZVNlcnZpY2UuZ2V0SXRlbXModGhpcy5kYXRhLmNvbGxlY3Rpb25SZWYpO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5jb25kaXRpb25zKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMubG9hZFJlbGF0aW9ucygpO1xyXG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pdGVtcyk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgIGlmICh0aGlzLmRhdGEuc29ydEJ5KSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LmFjdGl2ZSA9IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQ7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LmRpcmVjdGlvbiA9IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXI7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LnNvcnRDaGFuZ2UuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoKGNvbCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGlmIChjb2wuZmlsdGVyUHJlZGljYXRlcykge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbC5maWx0ZXJQcmVkaWNhdGVzLnNvbWUoKHByZWRpY2F0ZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZGF0YVtjb2wucHJvcGVydHldO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5VmFsdWUgfHwgdHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGVWYWx1ZSA9IHByb3BlcnR5VmFsdWVbcHJlZGljYXRlXTtcclxuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZVZhbHVlID09PSBudWxsIHx8IHByZWRpY2F0ZVZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocHJlZGljYXRlVmFsdWUpXHJcbiAgICAgICAgICAgICAgLnRyaW0oKVxyXG4gICAgICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKGZpbHRlcik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2wucHJvcGVydHkgJiYgY29sLmlzRmlsdGVyYWJsZSkge1xyXG4gICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGRhdGFbY29sLnByb3BlcnR5XTtcclxuICAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSBudWxsIHx8IHByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhwcm9wZXJ0eVZhbHVlKVxyXG4gICAgICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5pbmNsdWRlcyhmaWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZTtcclxuICB9XHJcblxyXG4gIC8vIE3DqXRvZG9zIGNvbSBwYWdpbmHDp8Ojb1xyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEl0ZW1zUGFnaW5hdGVkKFxyXG4gICAgbmF2aWdhdGlvbjogc3RyaW5nID0gJ3JlbG9hZCcsXHJcbiAgICByZXNldDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBpZiAocmVzZXQgJiYgWydmb3J3YXJkJywgJ3JlbG9hZCddLmluY2x1ZGVzKG5hdmlnYXRpb24pKSB7XHJcbiAgICAgIHRoaXMubGFzdERvYyA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzZXQgJiYgWydiYWNrd2FyZCcsICdyZWxvYWQnXS5pbmNsdWRlcyhuYXZpZ2F0aW9uKSkge1xyXG4gICAgICB0aGlzLmZpcnN0RG9jID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0gdGhpcy5maWx0ZXJzRm9ybS5jb250cm9sc1xyXG4gICAgICAuZmxhdE1hcCgoY29udHJvbCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXIgPSBncm91cC5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZTtcclxuICAgICAgICBpZiAoIXNlbGVjdGVkRmlsdGVyKSByZXR1cm4gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGFycmFuZ2UgPSBzZWxlY3RlZEZpbHRlci5hcnJhbmdlO1xyXG5cclxuICAgICAgICBpZiAoYXJyYW5nZSA9PT0gJ2ZpbHRlcicpIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZ3JvdXAuZ2V0KCd0eXBlRmlsdGVyJyk/LnZhbHVlO1xyXG4gICAgICAgICAgaWYgKCFmaWx0ZXJWYWx1ZSkgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXJyYW5nZSxcclxuICAgICAgICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgICAgICAgcHJvcGVydHk6IHNlbGVjdGVkRmlsdGVyLnByb3BlcnR5LFxyXG4gICAgICAgICAgICAgIGZpbHRlcmluZzogZmlsdGVyVmFsdWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRhdGVGaWx0ZXI6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXJyYW5nZSA9PT0gJ2ZpbHRlckJ5RGF0ZScpIHtcclxuICAgICAgICAgIGNvbnN0IGluaXRpYWwgPSBncm91cC5nZXQoJ2luaXRpYWxEYXRlJyk/LnZhbHVlO1xyXG4gICAgICAgICAgY29uc3QgZmluYWwgPSBncm91cC5nZXQoJ2ZpbmFsRGF0ZScpPy52YWx1ZTtcclxuICAgICAgICAgIGlmIChpbml0aWFsICYmIGZpbmFsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtkYXlJLCBtb250aEksIHllYXJJXSA9IGluaXRpYWwuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgaW5pdGlhbERhdGUgPSBuZXcgRGF0ZShgJHttb250aEl9LyR7ZGF5SX0vJHt5ZWFySX1gKTtcclxuICAgICAgICAgICAgY29uc3QgW2RheUYsIG1vbnRoRiwgeWVhckZdID0gZmluYWwuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgZmluYWxEYXRlID0gbmV3IERhdGUoYCR7bW9udGhGfS8ke2RheUZ9LyR7eWVhckZ9YCk7XHJcbiAgICAgICAgICAgIGZpbmFsRGF0ZS5zZXRIb3VycygyMywgNTksIDU5KTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBhcnJhbmdlLFxyXG4gICAgICAgICAgICAgIGZpbHRlcjogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgIGRhdGVGaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgIGluaXRpYWw6IGluaXRpYWxEYXRlLFxyXG4gICAgICAgICAgICAgICAgZmluYWw6IGZpbmFsRGF0ZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRmlsdGVyLmhhc093blByb3BlcnR5KCdpdGVtcycpICYmIGFycmFuZ2UgPT09ICdlcXVhbHMnKSB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gZ3JvdXAuZ2V0KCdzZWxlY3RJdGVtJyk/LnZhbHVlO1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRJdGVtcykgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcclxuICAgICAgICAgICAgICBhcnJhbmdlLFxyXG4gICAgICAgICAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IGl0ZW0ucHJvcGVydHksXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJpbmc6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBkYXRlRmlsdGVyOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigoZikgPT4gZiAmJiAoZi5maWx0ZXI/LmZpbHRlcmluZyAhPT0gdW5kZWZpbmVkIHx8IGYuZGF0ZUZpbHRlcikpO1xyXG5cclxuICAgIHRoaXMuYXJyYW5nZSA9IHtcclxuICAgICAgZmlsdGVyczogYWN0aXZlRmlsdGVycyxcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcGFnaW5hdGVkOiBhbnkgPSB7XHJcbiAgICAgIGJhdGNoU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgY29sbGVjdGlvbjogdGhpcy5kYXRhLmNvbGxlY3Rpb24sXHJcbiAgICAgIGRvYzogeyBsYXN0RG9jOiB0aGlzLmxhc3REb2MsIGZpcnN0RG9jOiB0aGlzLmZpcnN0RG9jIH0sXHJcbiAgICAgIG5hdmlnYXRpb24sXHJcbiAgICAgIGFycmFuZ2U6IHRoaXMuYXJyYW5nZSxcclxuICAgICAgY29uZGl0aW9uczogdGhpcy5kYXRhLmNvbmRpdGlvbnMsXHJcbiAgICAgIHNpemU6IHRoaXMudG90YWxJdGVtcyxcclxuICAgICAgZmlsdGVyRm46IHRoaXMuZGF0YS5maWx0ZXJGbixcclxuICAgICAgY2xpZW50UGFnZUluZGV4OiB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXgsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudGFibGVTZXJ2aWNlLmdldFBhZ2luYXRlZChwYWdpbmF0ZWQpO1xyXG4gICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcztcclxuICAgIGF3YWl0IHRoaXMubG9hZFJlbGF0aW9ucygpO1xyXG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XHJcbiAgICB0aGlzLmxhc3REb2MgPSByZXN1bHQubGFzdERvYyBhcyBhbnk7XHJcbiAgICB0aGlzLmZpcnN0RG9jID0gcmVzdWx0LmZpcnN0RG9jIGFzIGFueTtcclxuXHJcbiAgICAvLyBBdHVhbGl6YXIgY3VycmVudENsaWVudFBhZ2VJbmRleCBzZSByZXRvcm5hZG8gcGVsbyBmYWxsYmFja1xyXG4gICAgaWYgKHJlc3VsdC5jdXJyZW50Q2xpZW50UGFnZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHN1bSA9IDA7XHJcbiAgICBpZiAodGhpcy5kYXRhLnRvdGFsUmVmKSB7XHJcbiAgICAgIGZvciAoY29uc3QgdG90YWxSZWYgb2YgdGhpcy5kYXRhLnRvdGFsUmVmKSB7XHJcbiAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XHJcbiAgICAgICAgY29uc3QgZG9jRGF0YSA9IHRvdGFsUmVmRG9jLmRhdGEoKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGRvY0RhdGEgfHwgcmVzdWx0LmZpbHRlckxlbmd0aCkge1xyXG4gICAgICAgICAgc3VtID1cclxuICAgICAgICAgICAgcmVzdWx0LmZpbHRlckxlbmd0aCA/P1xyXG4gICAgICAgICAgICAoKHN1bSArIChkb2NEYXRhID8gZG9jRGF0YVt0b3RhbFJlZi5maWVsZF0gOiAwKSkgYXMgbnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gc3VtO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFzTmV4dFBhZ2UgPSByZXN1bHQuaGFzTmV4dFBhZ2U7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuaXRlbXMpO1xyXG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25QYWdlQ2hhbmdlKGV2ZW50PzogUGFnZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUgJiYgZXZlbnQpIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgY29uc3QgcHJldmlvdXNQYWdlSW5kZXggPSBldmVudC5wcmV2aW91c1BhZ2VJbmRleCA/PyAwO1xyXG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICAgIGNvbnN0IGV2ZW50UGFnZVNpemUgPSBldmVudC5wYWdlU2l6ZTtcclxuICAgICAgY29uc3QgdG90YWxJdGVtcyA9IHRoaXMudG90YWxJdGVtcztcclxuXHJcbiAgICAgIGxldCBuYXZpZ2F0aW9uRGlyZWN0aW9uOiBzdHJpbmc7XHJcbiAgICAgIGxldCByZXNldERvY3MgPSBmYWxzZTtcclxuICAgICAgbGV0IG9yaWdpbmFsUGFnZVNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgY29uc3QgbGFzdFBhZ2VJbmRleCA9IE1hdGgubWF4KFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgTWF0aC5jZWlsKHRvdGFsSXRlbXMgLyBldmVudFBhZ2VTaXplKSAtIDFcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIEF0dWFsaXphciBjdXJyZW50Q2xpZW50UGFnZUluZGV4IHNlbXByZSBwYXJhIG8gZmFsbGJhY2tcclxuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcGFnZUluZGV4O1xyXG5cclxuICAgICAgaWYgKHByZXZpb3VzUGFnZUluZGV4ICE9PSB1bmRlZmluZWQgJiYgcGFnZUluZGV4ID4gcHJldmlvdXNQYWdlSW5kZXgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyKys7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhZ2VJbmRleCA8IHByZXZpb3VzUGFnZUluZGV4XHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VOdW1iZXIgPSBNYXRoLm1heCgxLCB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyIC0gMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChldmVudFBhZ2VTaXplICE9PSBjdXJyZW50Q29tcG9uZW50UGFnZVNpemUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQWx0ZXJvdSBhIHF1YW50aWRhZGUgZGUgZWxlbWVudG9zIGV4aWJpZG9zIHBvciBww6FnaW5hJyk7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50UGFnZVNpemU7XHJcbiAgICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdmb3J3YXJkJztcclxuICAgICAgICByZXNldERvY3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCA9IDA7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgcGFnZUluZGV4ID09PSAwICYmXHJcbiAgICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhZ2VJbmRleCA8IHByZXZpb3VzUGFnZUluZGV4XHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQdWxvdSBwYXJhIGEgcHJpbWVpcmEgcMOhZ2luYScpO1xyXG4gICAgICAgIG5hdmlnYXRpb25EaXJlY3Rpb24gPSAnZm9yd2FyZCc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcclxuICAgICAgICByZXNldERvY3MgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHBhZ2VJbmRleCA9PT0gbGFzdFBhZ2VJbmRleCAmJlxyXG4gICAgICAgIHByZXZpb3VzUGFnZUluZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBwYWdlSW5kZXggPiBwcmV2aW91c1BhZ2VJbmRleCAmJlxyXG4gICAgICAgIHBhZ2VJbmRleCAtIHByZXZpb3VzUGFnZUluZGV4ID4gMVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHVsb3UgcGFyYSBhIHVsdGltYSBww6FnaW5hJyk7XHJcbiAgICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdiYWNrd2FyZCc7XHJcbiAgICAgICAgcmVzZXREb2NzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPVxyXG4gICAgICAgICAgdG90YWxJdGVtcyAtIGxhc3RQYWdlSW5kZXggKiBldmVudFBhZ2VTaXplO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA+IDAgJiZcclxuICAgICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlIDwgZXZlbnRQYWdlU2l6ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb3JpZ2luYWxQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHByZXZpb3VzUGFnZUluZGV4ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBwYWdlSW5kZXggPiBwcmV2aW91c1BhZ2VJbmRleFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnUHJvY2VkZW5kbycpO1xyXG4gICAgICAgIG5hdmlnYXRpb25EaXJlY3Rpb24gPSAnZm9yd2FyZCc7XHJcbiAgICAgICAgcmVzZXREb2NzID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhZ2VJbmRleCA8IHByZXZpb3VzUGFnZUluZGV4XHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZXRyb2NlZGVuZG8uJyk7XHJcbiAgICAgICAgbmF2aWdhdGlvbkRpcmVjdGlvbiA9ICdiYWNrd2FyZCc7XHJcbiAgICAgICAgcmVzZXREb2NzID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgcHJldmlvdXNQYWdlSW5kZXggIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhZ2VJbmRleCA9PT0gcHJldmlvdXNQYWdlSW5kZXhcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JlY2FycmVnYW5kby4nKTtcclxuICAgICAgICBuYXZpZ2F0aW9uRGlyZWN0aW9uID0gJ3JlbG9hZCc7XHJcbiAgICAgICAgcmVzZXREb2NzID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNQYWdlSW5kZXggPT09IHVuZGVmaW5lZCAmJiBwYWdlSW5kZXggPT09IDApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICdFdmVudG8gaW5pY2lhbCBkbyBwYWdpbmFkb3IgcGFyYSBww6FnIDAuIG5nT25Jbml0IGNhcnJlZ291LidcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0lORVNQRVJBRE8hIENvbmRpw6fDo28gZGUgbmF2ZWdhw6fDo28gbsOjbyB0cmF0YWRhOicsIGV2ZW50KTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChldmVudCkgdGhpcy5wYWdlRXZlbnQgPSBldmVudDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuYXZpZ2F0aW9uRGlyZWN0aW9uKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKG5hdmlnYXRpb25EaXJlY3Rpb24sIHJlc2V0RG9jcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gY2FycmVnYXIgaXRlbnMgcGFnaW5hZG9zOicsIGVycm9yKTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgaWYgKG9yaWdpbmFsUGFnZVNpemUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IG9yaWdpbmFsUGFnZVNpemU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXZlbnQpIHRoaXMucGFnZUV2ZW50ID0gZXZlbnQ7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBPdXRyb3MgbcOpdG9kb3NcclxuXHJcbiAgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgLy8gU2VtIHBhZ2luYcOnw6NvXHJcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBTdHJpbmcodmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gQ29tIHBhZ2luYcOnw6NvXHJcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmZpbHRlclN1YmplY3QubmV4dCh0aGlzLmZpbHRlclZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdvVG9EZXRhaWxzKHJvdzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLmlzTm90Q2xpY2thYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmRhdGEudXJsIHx8IHRoaXMuZGF0YS5uYW1lO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxyXG4gICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtgLyR7dXJsUGF0aH1gLCByb3cuaWRdKVxyXG4gICAgKTtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UmVsYXRpb24ocGFyYW1zOiB7XHJcbiAgICBpZDogYW55O1xyXG4gICAgY29sbGVjdGlvbjogc3RyaW5nO1xyXG4gICAgbmV3UHJvcGVydHk6IHN0cmluZztcclxuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBzbmFwc2hvdDogZmlyZXN0b3JlLkRvY3VtZW50U25hcHNob3Q8dW5rbm93bj4gfCB1bmRlZmluZWQ7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwYXJhbXMuaWQgIT09ICcnICYmXHJcbiAgICAgICAgcGFyYW1zLmlkICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgcGFyYW1zLmNvbGxlY3Rpb24gIT09ICcnXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNuYXBzaG90ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uKHBhcmFtcy5jb2xsZWN0aW9uKS5kb2MocGFyYW1zLmlkKS5nZXQoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNuYXBzaG90ICYmIHNuYXBzaG90LmV4aXN0cykge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBzbmFwc2hvdC5kYXRhKCkgYXMgYW55O1xyXG4gICAgICAgIHJldHVybiBkYXRhPy5bcGFyYW1zLm5ld1Byb3BlcnR5XSA/PyAnJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRSZWxhdGlvbnMoKSB7XHJcbiAgICBjb25zdCByZWxhdGlvblByb21pc2VzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVsYXRpb24pXHJcbiAgICAgIC5mbGF0TWFwKChjb2wpID0+XHJcbiAgICAgICAgdGhpcy5pdGVtcy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGlmIChjb2wucmVsYXRpb24pIHtcclxuICAgICAgICAgICAgaXRlbVtjb2wucHJvcGVydHldID0gYXdhaXQgdGhpcy5nZXRSZWxhdGlvbih7XHJcbiAgICAgICAgICAgICAgaWQ6IGl0ZW1bY29sLnJlbGF0aW9uLnByb3BlcnR5XSxcclxuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2wucmVsYXRpb24uY29sbGVjdGlvbixcclxuICAgICAgICAgICAgICBuZXdQcm9wZXJ0eTogY29sLnJlbGF0aW9uLm5ld1Byb3BlcnR5LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG5cclxuICAgIGF3YWl0IFByb21pc2UuYWxsKHJlbGF0aW9uUHJvbWlzZXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UXVlcnlMZW5ndGgocGFyYW1zOiB7XHJcbiAgICBpdGVtOiBhbnk7XHJcbiAgICByZWxhdGlvbjoge1xyXG4gICAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XHJcbiAgICAgIHByb3BlcnR5OiBzdHJpbmc7XHJcbiAgICAgIG9wZXJhdG9yOiBXaGVyZUZpbHRlck9wO1xyXG4gICAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgfTtcclxuICB9KSB7XHJcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlXHJcbiAgICAgIC5jb2xsZWN0aW9uKHBhcmFtcy5yZWxhdGlvbi5jb2xsZWN0aW9uKVxyXG4gICAgICAucmVmLndoZXJlKFxyXG4gICAgICAgIHBhcmFtcy5yZWxhdGlvbi5wcm9wZXJ0eSxcclxuICAgICAgICBwYXJhbXMucmVsYXRpb24ub3BlcmF0b3IsXHJcbiAgICAgICAgcGFyYW1zLml0ZW1bcGFyYW1zLnJlbGF0aW9uLnZhbHVlXVxyXG4gICAgICApXHJcbiAgICAgIC5nZXQoKTtcclxuICAgIHJldHVybiBzbmFwc2hvdC5zaXplO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkUXVlcnlMZW5ndGhzKCkge1xyXG4gICAgY29uc3QgbGVuZ3RoUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5xdWVyeUxlbmd0aClcclxuICAgICAgLmZsYXRNYXAoKGNvbCkgPT5cclxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbC5xdWVyeUxlbmd0aCkge1xyXG4gICAgICAgICAgICBpdGVtW2NvbC5wcm9wZXJ0eV0gPSBhd2FpdCB0aGlzLmdldFF1ZXJ5TGVuZ3RoKHtcclxuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxyXG4gICAgICAgICAgICAgIHJlbGF0aW9uOiBjb2wucXVlcnlMZW5ndGgsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChsZW5ndGhQcm9taXNlcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckl0ZW1zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5jb25kaXRpb25zKSB7XHJcbiAgICAgIHRoaXMuZGF0YS5jb25kaXRpb25zLmZvckVhY2goKGNvbmQpID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRnVuY3Rpb24gPSAodGhpcy50YWJsZVNlcnZpY2Uub3BlcmF0b3JzIGFzIGFueSlbXHJcbiAgICAgICAgICAgIGNvbmQub3BlcmF0b3JcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gb3BlcmF0b3JGdW5jdGlvbihcclxuICAgICAgICAgICAgICBpdGVtW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLFxyXG4gICAgICAgICAgICAgIGNvbmQuZGFzaFByb3BlcnR5XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRmlsdHJvIGRlIGRhdGFcclxuICBhc3luYyBzZWFyY2goKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUuYXJyYW5nZSA9PT0gJ2FzY2VuZGluZycpIHtcclxuICAgICAgICB0aGlzLnNvcnRCeSA9IHtcclxuICAgICAgICAgIGZpZWxkOiB0aGlzLnNlbGVjdFNvcnQudmFsdWUucHJvcGVydHksXHJcbiAgICAgICAgICBvcmRlcjogJ2FzYycsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlLmFycmFuZ2UgPT09ICdkZXNjZW5kaW5nJykge1xyXG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xyXG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0U29ydC52YWx1ZS5wcm9wZXJ0eSxcclxuICAgICAgICAgIG9yZGVyOiAnZGVzYycsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcclxuICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPVxyXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLmxlbmd0aCA+IDBcclxuICAgICAgICA/IHRoaXMuZmlsdGVyc0Zvcm0uYXQoMCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPz8gJydcclxuICAgICAgICA6ICcnO1xyXG4gICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXNldEZpbHRlcigpIHtcclxuICAgIGlmICghdGhpcy5kYXRhLnBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJQcmVkaWNhdGUpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5maWx0ZXJQcmVkaWNhdGU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyUHJlZGljYXRlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuZmlsdGVyUHJlZGljYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNsZWFyKCk7XHJcbiAgICB0aGlzLmFkZEZpbHRlcigpO1xyXG4gICAgdGhpcy5zZWxlY3RTb3J0LnBhdGNoVmFsdWUoJycpO1xyXG4gICAgdGhpcy5zb3J0QnkgPSB7XHJcbiAgICAgIG9yZGVyOiB0aGlzLmRhdGEuc29ydEJ5ID8gdGhpcy5kYXRhLnNvcnRCeS5vcmRlciA6ICdkZXNjJyxcclxuICAgICAgZmllbGQ6IHRoaXMuZGF0YS5zb3J0QnkgPyB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkIDogJ2NyZWF0ZWRBdCcsXHJcbiAgICB9O1xyXG5cclxuICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcclxuICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPSAnJztcclxuICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gTcOpdG9kbyBww7pibGljbyBwYXJhIHJlY2FycmVnYXIgYSB0YWJlbGFcclxuICBhc3luYyByZWxvYWRUYWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbikge1xyXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZURpc3BsYXllZENvbHVtbnMoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5wcm9wZXJ0eTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IFtdO1xyXG4gICAgdGhpcy5zb3J0YWJsZURyb3Bkb3duSXRlbXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgaWYgKGNvbC5pc0ZpbHRlcmFibGUpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICBhcnJhbmdlOiAnZmlsdGVyJyxcclxuICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbC5pc1NvcnRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0YWJsZURyb3Bkb3duSXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICBhcnJhbmdlOiAnYXNjZW5kaW5nJyxcclxuICAgICAgICAgIHRpdGxlOiBjb2wudGl0bGUgKyAnOiBjcmVzY2VudGUnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgYXJyYW5nZTogJ2Rlc2NlbmRpbmcnLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSArICc6IGRlY3Jlc2NlbnRlJyxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sLmlzRmlsdGVyYWJsZUJ5RGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcy5wdXNoKHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIGFycmFuZ2U6ICdmaWx0ZXJCeURhdGUnLFxyXG4gICAgICAgICAgdGl0bGU6IGNvbC50aXRsZSArICc6IGZpbHRybyBwb3IgZGF0YScsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT5cclxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMucHVzaCh7IC4uLm9wdGlvbiwgYXJyYW5nZTogJ2VxdWFscycgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xyXG4gIH1cclxuXHJcbiAgLy8gTcOpdG9kb3MgcGFyYSBjb250cm9sZSBkbyB0b29sdGlwXHJcbiAgb25DZWxsTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCwgcm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBTw7MgbW9zdHJhciB0b29sdGlwIHNlIGEgY29sdW5hIHRpdmVyIGNoYXJMaW1pdCBkZWZpbmlkb1xyXG4gICAgaWYgKCFjb2wuY2hhckxpbWl0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmdWxsVmFsdWUgPSB0aGlzLmdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSk7XHJcblxyXG4gICAgLy8gU8OzIG1vc3RyYXIgdG9vbHRpcCBzZSBvIHZhbG9yIGNvbXBsZXRvIGZvciBtYWlvciBxdWUgbyBsaW1pdGVcclxuICAgIGlmIChmdWxsVmFsdWUubGVuZ3RoIDw9IGNvbC5jaGFyTGltaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaG92ZXJlZENlbGwgPSB7IHJvdywgY29sIH07XHJcbiAgICB0aGlzLnRvb2x0aXBDb250ZW50ID0gZnVsbFZhbHVlO1xyXG5cclxuICAgIC8vIERlZmluaXIgcG9zacOnw6NvIGRvIHRvb2x0aXBcclxuICAgIHRoaXMudG9vbHRpcFBvc2l0aW9uID0ge1xyXG4gICAgICB4OiBldmVudC5jbGllbnRYICsgMTAsXHJcbiAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSAxMCxcclxuICAgIH07XHJcblxyXG4gICAgLy8gVGltZW91dCBwYXJhIG1vc3RyYXIgbyB0b29sdGlwXHJcbiAgICB0aGlzLnRvb2x0aXBUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmhvdmVyZWRDZWxsICYmXHJcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2VsbC5yb3cgPT09IHJvdyAmJlxyXG4gICAgICAgIHRoaXMuaG92ZXJlZENlbGwuY29sID09PSBjb2xcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VG9vbHRpcCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBvbkNlbGxNb3VzZUxlYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudG9vbHRpcFRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG9vbHRpcFRpbWVvdXQpO1xyXG4gICAgICB0aGlzLnRvb2x0aXBUaW1lb3V0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dUb29sdGlwID0gZmFsc2U7XHJcbiAgICB0aGlzLmhvdmVyZWRDZWxsID0gbnVsbDtcclxuICAgIHRoaXMudG9vbHRpcENvbnRlbnQgPSAnJztcclxuICB9XHJcblxyXG4gIG9uQ2VsbE1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2hvd1Rvb2x0aXApIHtcclxuICAgICAgdGhpcy50b29sdGlwUG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogZXZlbnQuY2xpZW50WCArIDEwLFxyXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFkgLSAxMCxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE3DqXRvZG9zIHBhcmEgaW52ZXJzw6NvIHZlcnRpY2FsIGRvcyB0YWJzXHJcbiAgZ2V0VGFiR3JvdXBzKHRhYnM6IGFueVtdKTogbnVtYmVyW10ge1xyXG4gICAgaWYgKCF0YWJzIHx8IHRhYnMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3QgdG90YWxHcm91cHMgPSBNYXRoLmNlaWwodGFicy5sZW5ndGggLyA2KTtcclxuICAgIGNvbnN0IGdyb3VwczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICAvLyBDcmlhciBhcnJheSBkZSDDrW5kaWNlcyBpbnZlcnRpZG9zICjDumx0aW1vIGdydXBvIHByaW1laXJvKVxyXG4gICAgZm9yIChsZXQgaSA9IHRvdGFsR3JvdXBzIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgZ3JvdXBzLnB1c2goaSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwcztcclxuICB9XHJcblxyXG4gIGdldFRhYkdyb3VwKHRhYnM6IGFueVtdLCBncm91cEluZGV4OiBudW1iZXIpOiBhbnlbXSB7XHJcbiAgICBpZiAoIXRhYnMgfHwgdGFicy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcclxuXHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gZ3JvdXBJbmRleCAqIDY7XHJcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXggKyA2LCB0YWJzLmxlbmd0aCk7XHJcblxyXG4gICAgcmV0dXJuIHRhYnMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVhbFRhYkluZGV4KGdyb3VwSW5kZXg6IG51bWJlciwgdGFiSW5kZXhJbkdyb3VwOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKCF0aGlzLmRhdGEudGFicz8udGFic0RhdGEpIHJldHVybiAwO1xyXG4gICAgY29uc3QgdG90YWxHcm91cHMgPSBNYXRoLmNlaWwodGhpcy5kYXRhLnRhYnMudGFic0RhdGEubGVuZ3RoIC8gNik7XHJcbiAgICBjb25zdCByZWFsR3JvdXBJbmRleCA9IHRvdGFsR3JvdXBzIC0gMSAtIGdyb3VwSW5kZXg7XHJcbiAgICByZXR1cm4gcmVhbEdyb3VwSW5kZXggKiA2ICsgdGFiSW5kZXhJbkdyb3VwO1xyXG4gIH1cclxuXHJcbiAgb25UYWJsZVNlbGVjdGVkKGk6IG51bWJlciwgajogbnVtYmVyKSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YS50YWJzPy50YWJzRGF0YSB8fCAhdGhpcy5kYXRhLnRhYnMubWV0aG9kKSByZXR1cm47XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy5nZXRSZWFsVGFiSW5kZXgoaSwgaik7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLmRhdGEudGFicy50YWJzRGF0YVt0aGlzLnNlbGVjdGVkVGFiXTtcclxuICAgIGlmICh0YWIpIHtcclxuICAgICAgdGhpcy5kYXRhLnRhYnMubWV0aG9kKHRhYiwgdGhpcy5zZWxlY3RlZFRhYik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1RhYlNlbGVjdGVkKG9yaWdpbmFsSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgPT09IG9yaWdpbmFsSW5kZXg7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93QWN0aW9uQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmRhdGE/LmFjdGlvbkJ1dHRvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24obnVsbCkgPz8gdHJ1ZTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBnYXAtNlwiPlxyXG4gICAgPCEtLSBVTklGSUVEIENPTlRST0wgUEFORUw6IEZJTFRFUlMsIFNPUlQgJiBBQ1RJT05TIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBiZy13aGl0ZSBwLTQgc2hhZG93LWxnXCJcclxuICAgICAgKm5nSWY9XCJcclxuICAgICAgICBkYXRhLnBhZ2luYXRpb24gPT09IHRydWUgJiZcclxuICAgICAgICAoZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICBzb3J0YWJsZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24pXHJcbiAgICAgIFwiXHJcbiAgICA+XHJcbiAgICAgIDwhLS0gUEFORUwgSEVBREVSOiBUaXRsZSwgQ3VzdG9tIEFjdGlvbiwgYW5kIEdsb2JhbCBBY3Rpb25zIC0tPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJtYi00IGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMjAwIHBiLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gTGVmdCBTaWRlOiBUaXRsZSAmIE1haW4gQWN0aW9uIEJ1dHRvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC00XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXIgdGV4dC14bCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCJcclxuICAgICAgICAgICAgICA+RmlsdHJvcyBlIEHDp8O1ZXM8L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24gJiYgZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgKGRhdGEuYWN0aW9uQnV0dG9uLmNvbG9yQ2xhc3MgfHwgJ2JnLWJsdWUtNTAwJykgK1xyXG4gICAgICAgICAgICAgICcgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIGhvdmVyOm9wYWNpdHktNzAnXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImRhdGEuYWN0aW9uQnV0dG9uLnJvdXRlckxpbmtcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXHJcbiAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgIHt7IGRhdGEuYWN0aW9uQnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBTZWFyY2gsIFJlc2V0LCBFeHBvcnQgLS0+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgfHwgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9PT0gdHJ1ZVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctZ3JlZW4tNjAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctZ3JlZW4tNzAwXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFwbGljYXIgZmlsdHJvc1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICBQZXNxdWlzYXJcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiTGltcGFyIGZpbHRyb3NcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cclxuICAgICAgICAgICAgUmVzZXRhclxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuZG93bmxvYWQgIT09IGZhbHNlICYmIGRvd25sb2FkVGFibGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctb3JhbmdlLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLW9yYW5nZS02MDBcIlxyXG4gICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFeHBvcnRhciBUYWJlbGFcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlICYmIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEubGVuZ3RoIDw9IDBcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICRhbnkoYXJyYW5nZSkgJiYgZG93bmxvYWRUYWJsZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICA/IGRvd25sb2FkVGFibGUoJGFueShhcnJhbmdlKSwgZGF0YS5jb25kaXRpb25zIHx8IFtdKVxyXG4gICAgICAgICAgICAgICAgOiBudWxsXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L2k+XHJcbiAgICAgICAgICAgIEV4cG9ydGFyXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEZJTFRFUlMgQ09OVEVOVCAoV0lUSCBSRUZJTkVNRU5UUykgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi00IHNwYWNlLXktM1wiICpuZ0lmPVwiZmlsdGVyc0Zvcm0uY29udHJvbHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiJGFueShmaWx0ZXJHcm91cClcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlckdyb3VwIG9mIGZpbHRlcnNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBwLTJcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDwhLS0gRklMVEVSIFRZUEUgU0VMRUNUT1IgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkZSBmaWx0cm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUgbyB0aXBvLi4uXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0RmlsdGVyQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRyb3Bkb3duSXRlbXNcIiBbdmFsdWVdPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uaWNvbiB8fCAnZmEgZmEtZmlsdGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gdGV4dC1ibHVlLTUwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFRFWFQgRklMVEVSIC0tPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT0gJ2ZpbHRlcidcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtZ3JheS00MDBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRmlsdHJhclwiXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRpZ2l0ZSBwYXJhIGZpbHRyYXIuLi5cIlxyXG4gICAgICAgICAgICAgICAgI2lucHV0XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRFJPUERPV04gRklMVEVSIC0tPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApXHJcbiAgICAgICAgICAgICAgICAuZ2V0KCdzZWxlY3RGaWx0ZXInKVxyXG4gICAgICAgICAgICAgICAgPy52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcclxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgICAgIFwiU2VsZWNpb25lXCJcclxuICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiXHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RJdGVtXCJcclxuICAgICAgICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgIC5pdGVtc1xyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIERBVEUgRklMVEVSIC0tPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cclxuICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbml0aWFsRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXHJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPkRhdGEgRmluYWw8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkREL01NL0FBQUFcIlxyXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBSRU1PVkUgRklMVEVSIEJVVFRPTiAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJzRm9ybS5sZW5ndGggPiAxXCIgY2xhc3M9XCJtbC1hdXRvIGZsZXgtc2hyaW5rLTBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgaG92ZXI6YmctcmVkLTEwMFwiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlJlbW92ZXIgZmlsdHJvXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggdGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFBBTkVMIEZPT1RFUjogQWRkIEZpbHRlciAmIFNvcnQgLS0+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIi1tYi0yIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHQtNCBzbTpmbGV4LXJvd1wiXHJcbiAgICAgID5cclxuICAgICAgICA8IS0tIEFkZCBGaWx0ZXIgQnV0dG9uIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEZpbHRlcigpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0cmFuc2Zvcm0gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1ibHVlLTMwMCBiZy1ibHVlLTUwIHB4LTYgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0wLjUgaG92ZXI6Ym9yZGVyLWJsdWUtNDAwIGhvdmVyOmJnLWJsdWUtMTAwIGhvdmVyOnNoYWRvdy1tZFwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBZGljaW9uYXIgbm92byBmaWx0cm9cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbXItMlwiPjwvaT5cclxuICAgICAgICAgICAgQWRpY2lvbmFyIEZpbHRyb1xyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU29ydCBEcm9wZG93biAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBzbTp3LWF1dG8gc206bWluLXctWzI1MHB4XVwiXHJcbiAgICAgICAgICAqbmdJZj1cInNvcnRhYmxlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPk9yZGVuYXIgcG9yPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdFNvcnRcIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc29ydGFibGVEcm9wZG93bkl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zb3J0LWFscGhhLWRvd24gdGV4dC1jeWFuLTYwMFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFNJTVBMRSBTRUFSQ0ggKGZvciBub24tcGFnaW5hdGVkIHRhYmxlcykgLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxyXG4gICAgICAqbmdJZj1cImRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2VcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1ibHVlLTUwMFwiPjwvaT5cclxuICAgICAgICAgIEJ1c2NhclxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXHJcbiAgICAgICAgICAoa2V5dXApPVwiYXBwbHlGaWx0ZXIoZmlsdGVySW5wdXQudmFsdWUpXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXHJcbiAgICAgICAgICAjZmlsdGVySW5wdXRcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXggY2xhc3M9XCJ0ZXh0LWdyYXktNTAwXCI+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgKGRhdGEuYWN0aW9uQnV0dG9uLmNvbG9yQ2xhc3MgfHwgJ2JnLWJsdWUtNTAwJykgK1xyXG4gICAgICAgICAgJyBmbG9hdC1yaWdodCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgaG92ZXI6b3BhY2l0eS03MCdcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cImRhdGEuYWN0aW9uQnV0dG9uLnJvdXRlckxpbmtcIlxyXG4gICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCA/IGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCgkZXZlbnQpIDogbnVsbFxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICA8aSAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIiBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiPjwvaT5cclxuICAgICAgICB7eyBkYXRhLmFjdGlvbkJ1dHRvbi5sYWJlbCB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cIm14LWF1dG8gZmxleCBmbGV4LWNvbFwiXHJcbiAgICAgICAgKm5nSWY9XCJkYXRhLnRhYnMgJiYgZGF0YS50YWJzLnRhYnNEYXRhICYmIGRhdGEudGFicy50YWJzRGF0YS5sZW5ndGggPiAwXCJcclxuICAgICAgPlxyXG4gICAgICAgIDwhLS0gQ2FsY3VsYXIgcXVhbnRvcyBncnVwb3MgZGUgNiB0YWJzIGV4aXN0ZW0gLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgIGxldCBncm91cEluZGV4IG9mIGdldFRhYkdyb3VwcyhkYXRhLnRhYnMudGFic0RhdGEpO1xyXG4gICAgICAgICAgICBsZXQgaSA9IGluZGV4XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC1hdXRvIGZsZXggZmxleC1yb3dcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgbGV0IHRhYiBvZiBnZXRUYWJHcm91cChkYXRhLnRhYnMudGFic0RhdGEsIGdyb3VwSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci0yIGJvcmRlci1ncmF5LTMwMCBiZy1ncmF5LTIwMCBweC00IHB5LTIgZm9udC1tZWRpdW0gdHJhbnNpdGlvbiBob3ZlcjpicmlnaHRuZXNzLTk1XCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICBpc1RhYlNlbGVjdGVkKGdldFJlYWxUYWJJbmRleChpLCBqKSlcclxuICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItYi0wIGJyaWdodG5lc3MtMTEwJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UYWJsZVNlbGVjdGVkKGksIGopXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyB0YWIubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFiLmNvdW50ZXIgIT09IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMiB0ZXh0LXhzIGZvbnQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInRhYi5jb3VudGVyQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyB0YWIuY291bnRlciB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggdy1mdWxsIG92ZXJmbG93LXgtYXV0byByb3VuZGVkLXhsXCI+XHJcbiAgICAgICAgPHRhYmxlXHJcbiAgICAgICAgICBtYXQtdGFibGVcclxuICAgICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgbWF0U29ydFxyXG4gICAgICAgICAgI3NvcnQ9XCJtYXRTb3J0XCJcclxuICAgICAgICAgIG1hdFNvcnRBY3RpdmU9XCJjcmVhdGVkQXRcIlxyXG4gICAgICAgICAgbWF0U29ydERpcmVjdGlvbj1cImRlc2NcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBkYXRhLmRpc3BsYXllZENvbHVtbnNcIlxyXG4gICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wucHJvcGVydHkgfX1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBOT1QgU09SVEFCTEUsIFRIRU4gRE9OJ1QgU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxyXG4gICAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmlzU29ydGFibGUgfHwgZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIChkYXRhPy5jb2xvcj8uYmcgPyAnICcgKyAkYW55KGRhdGEuY29sb3IpLmJnIDogJycpICtcclxuICAgICAgICAgICAgICAgICAgKGRhdGE/LmNvbG9yPy50ZXh0ID8gJyAnICsgJGFueShkYXRhLmNvbG9yKS50ZXh0IDogJycpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSB9fVxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPCEtLSBJRiBUSEUgQ09MVU1OIElTIFNPUlRBQkxFLCBUSEVOIFNIT1cgVEhFIFNPUlQgQlVUVE9OUyAtLT5cclxuICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmlzU29ydGFibGUgJiYgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIChkYXRhPy5jb2xvcj8uYmcgPyAnICcgKyAkYW55KGRhdGEuY29sb3IpLmJnIDogJycpICtcclxuICAgICAgICAgICAgICAgICAgKGRhdGE/LmNvbG9yPy50ZXh0ID8gJyAnICsgJGFueShkYXRhLmNvbG9yKS50ZXh0IDogJycpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSB9fVxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wubWV0aG9kID8gY29sLm1ldGhvZChyb3cpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbkNlbGxNb3VzZUVudGVyKCRldmVudCwgcm93LCBjb2wpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uQ2VsbE1vdXNlTGVhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm9uQ2VsbE1vdXNlTW92ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8IS0tIENIRUNLIElGIFRIRSBDT0xVTU4gTVVTVCBCRSBESVNQTEFZRUQgLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wuaW1hZ2UgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sLmNoYXJMaW1pdCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2wucHJvcGVydHldICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0ubGVuZ3RoID4gY29sLmNoYXJMaW1pdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB3aXRoaW5MaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICYmIGlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbC5oYXNMaW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAhPT0gdHJ1ZSAmJiAhaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2l0aGluTGltaXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3csIHRydWUpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICYmIGlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLSBJTUFHRSAtLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS5wYXRoICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY29sLmltYWdlLnBhdGggKyAnLycgKyByb3dbY29sLnByb3BlcnR5XVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIkltYWdlbVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC5pbWFnZSAmJiBjb2wuaW1hZ2UudXJsICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2wuaW1hZ2UuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJJbWFnZW1cIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaWNvbkNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaWNvbkNsYXNzIG9mIGNvbC5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzcy5idXR0b25NZXRob2RcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpY29uQ2xhc3MuYnV0dG9uTWV0aG9kKHJvdywgJGV2ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbkNsYXNzLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzcy5jb25kaXRpb24gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaWNvbkNsYXNzLmNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShpY29uQ2xhc3MuY29uZGl0aW9uKShyb3cpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgID57eyBpY29uQ2xhc3MudGV4dCB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiY29sdW1uUHJvcGVydGllc1wiPjwvdHI+XHJcbiAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdleGFtcGxlLWVsZW1lbnQtcm93JzogZGF0YS5pc05vdENsaWNrYWJsZSA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAnZXhhbXBsZS1lbGVtZW50LXJvdyBjdXJzb3ItcG9pbnRlcic6ICFkYXRhLmlzTm90Q2xpY2thYmxlXHJcbiAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5Qcm9wZXJ0aWVzXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9EZXRhaWxzKHJvdylcIlxyXG4gICAgICAgICAgPjwvdHI+XHJcblxyXG4gICAgICAgICAgPCEtLSBST1cgU0hPV04gV0hFTiBUSEVSRSBJUyBOTyBNQVRDSElORyBEQVRBLiAtLT5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIiAqbWF0Tm9EYXRhUm93PlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIhaXNMb2FkaW5nXCIgY2xhc3M9XCJtYXQtY2VsbCBwLTRcIiBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgIE5lbmh1bSByZXN1bHRhZG8gZW5jb250cmFkbyBwYXJhIGEgYnVzY2FcclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXJcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0b3ItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhZ2luYXRvclxyXG4gICAgICAgICAgICAjcGFnaW5hdG9yXHJcbiAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzI1LCA1MCwgMTAwXVwiXHJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgIFtsZW5ndGhdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZSBvZiBwZXJpb2RpYyBlbGVtZW50c1wiXHJcbiAgICAgICAgICAgIChwYWdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdoaWRlLWxlbmd0aCc6XHJcbiAgICAgICAgICAgICAgICBbJ2ZpbHRlcicsICdmaWx0ZXJCeURhdGUnLCAnZXF1YWxzJ10uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFycmFuZ2VcclxuICAgICAgICAgICAgICAgICkgfHwgdGhpcy5kYXRhLmZpbHRlckZuLFxyXG4gICAgICAgICAgICAgICdoaWRlLW5leHQtYnV0dG9uJzogIWhhc05leHRQYWdlICYmIGRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcclxuICAgICAgICAgICAgICAnaGlkZS1sYXN0LWJ1dHRvbic6XHJcbiAgICAgICAgICAgICAgICAoIWhhc05leHRQYWdlICYmIGRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkgfHwgdGhpcy5kYXRhLmZpbHRlckZuXHJcbiAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICFpc0xvYWRpbmcgJiZcclxuICAgICAgICAgICAgICBkYXRhU291cmNlPy5kYXRhICYmXHJcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICBkYXRhPy5maWx0ZXJGblxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInBhZ2UtbnVtYmVyLWRpc3BsYXlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjdXJyZW50UGFnZU51bWJlciB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gVE9PTFRJUCBQRVJTT05BTElaQURPIC0tPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd1Rvb2x0aXBcIlxyXG4gICAgY2xhc3M9XCJmaXhlZCB6LTUwIG1heC13LW1kIGJyZWFrLXdvcmRzIHJvdW5kZWQtbGcgYmctZ3JheS04MDAgcHgtMyBweS0yIHRleHQtc20gdGV4dC13aGl0ZSBzaGFkb3ctbGdcIlxyXG4gICAgW3N0eWxlLmxlZnQucHhdPVwidG9vbHRpcFBvc2l0aW9uLnhcIlxyXG4gICAgW3N0eWxlLnRvcC5weF09XCJ0b29sdGlwUG9zaXRpb24ueVwiXHJcbiAgICBbc3R5bGUucG9pbnRlci1ldmVudHNdPVwiJ25vbmUnXCJcclxuICA+XHJcbiAgICB7eyB0b29sdGlwQ29udGVudCB9fVxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -1126,16 +1126,12 @@ class TableComponent {
|
|
|
1126
1126
|
}
|
|
1127
1127
|
getDisplayValue(col, row, withinLimit = false) {
|
|
1128
1128
|
let value;
|
|
1129
|
-
if (row[col.property] === null || row[col.property] === undefined) {
|
|
1130
|
-
return '';
|
|
1131
|
-
}
|
|
1132
1129
|
if (col.calculateValue) {
|
|
1133
|
-
value =
|
|
1130
|
+
value = col.calculateValue(row);
|
|
1134
1131
|
}
|
|
1135
1132
|
else {
|
|
1136
1133
|
value = this.getNestedValue(row, col.property);
|
|
1137
1134
|
}
|
|
1138
|
-
// Verifica se é um array e tem arrayField definido
|
|
1139
1135
|
if (Array.isArray(value) && col.arrayField) {
|
|
1140
1136
|
value = this.formatArrayValue(value, col.arrayField);
|
|
1141
1137
|
}
|
|
@@ -1143,7 +1139,19 @@ class TableComponent {
|
|
|
1143
1139
|
value = row[col.property];
|
|
1144
1140
|
}
|
|
1145
1141
|
value = col.pipe ? col.pipe.transform(value) : value;
|
|
1146
|
-
|
|
1142
|
+
if (value === null || value === undefined) {
|
|
1143
|
+
value = '';
|
|
1144
|
+
}
|
|
1145
|
+
else {
|
|
1146
|
+
value = String(value);
|
|
1147
|
+
}
|
|
1148
|
+
if (typeof value !== 'string') {
|
|
1149
|
+
value = '';
|
|
1150
|
+
}
|
|
1151
|
+
if (withinLimit || !col.charLimit) {
|
|
1152
|
+
return value;
|
|
1153
|
+
}
|
|
1154
|
+
return value.substring(0, col.charLimit) + '...';
|
|
1147
1155
|
}
|
|
1148
1156
|
getNestedValue(obj, path) {
|
|
1149
1157
|
if (!path)
|