@eqproject/eqp-dynamic-module 2.3.41 → 2.3.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +50 -5
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +218 -86
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +4 -3
- package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +71 -0
- package/esm2020/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +32 -18
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +6 -11
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +21 -1
- package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +21 -18
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +3 -3
- package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +5 -11
- package/esm2020/lib/eqp-dynamic-module.module.mjs +6 -3
- package/esm2020/lib/models/baseField.model.mjs +2 -1
- package/esm2020/lib/models/fields/imageField.model.mjs +17 -4
- package/esm2020/lib/models/fields/imageSelectorField.model.mjs +21 -0
- package/esm2020/lib/models/fields/listValueField.model.mjs +1 -4
- package/esm2020/lib/models/form.model.mjs +1 -1
- package/esm2020/lib/services/utilityHelper.services.mjs +32 -23
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +485 -180
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +485 -180
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +4 -1
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +15 -7
- package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +31 -0
- package/lib/eqp-dynamic-module.module.d.ts +12 -11
- package/lib/models/baseField.model.d.ts +4 -3
- package/lib/models/fields/imageField.model.d.ts +4 -13
- package/lib/models/fields/imageSelectorField.model.d.ts +46 -0
- package/lib/models/fields/listValueField.model.d.ts +1 -19
- package/lib/models/form.model.d.ts +1 -0
- package/package.json +1 -1
package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs
CHANGED
|
@@ -285,6 +285,7 @@ export class AddFormRecordComponent {
|
|
|
285
285
|
* Metodo per creare il FormGroup che rappresenta la form.
|
|
286
286
|
*/
|
|
287
287
|
createHTMLreadableValues(record) {
|
|
288
|
+
debugger;
|
|
288
289
|
GlobalService.debugLog("createHTMLreadableValues - record", record);
|
|
289
290
|
GlobalService.debugLog("createHTMLreadableValues - form", this.form);
|
|
290
291
|
var formnames = new Array();
|
|
@@ -381,6 +382,25 @@ export class AddFormRecordComponent {
|
|
|
381
382
|
break;
|
|
382
383
|
}
|
|
383
384
|
;
|
|
385
|
+
case FieldTypeEnum['Immagine']:
|
|
386
|
+
{
|
|
387
|
+
// Mostro l'ID dell'immagine, se non si vuole questo comportamento basta mettere il flag Visible = false
|
|
388
|
+
outputValuesArray[field.Name] = record[field.Name];
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
;
|
|
392
|
+
case FieldTypeEnum['Elenco immagini']:
|
|
393
|
+
{
|
|
394
|
+
outputValuesArray[field.Name] = "";
|
|
395
|
+
record[field.Name].forEach((imageobj) => {
|
|
396
|
+
var attachmentInForm = field.AttachmentList.find(x => x.ID == imageobj);
|
|
397
|
+
outputValuesArray[field.Name] += attachmentInForm.ButtonKey + ", ";
|
|
398
|
+
});
|
|
399
|
+
var parts = outputValuesArray[field.Name].split(", ");
|
|
400
|
+
outputValuesArray[field.Name] = parts.slice(0, parts.length - 1).join(", ");
|
|
401
|
+
break;
|
|
402
|
+
}
|
|
403
|
+
;
|
|
384
404
|
default: {
|
|
385
405
|
outputValuesArray[field.Name] = record[field.Name];
|
|
386
406
|
}
|
|
@@ -524,4 +544,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
524
544
|
type: ViewChildren,
|
|
525
545
|
args: ["fieldTemplate"]
|
|
526
546
|
}] } });
|
|
527
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBRSxXQUFXLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0YsT0FBTyxFQUFRLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVuRixPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7OztBQUVwRSwyR0FBMkc7QUFPM0csTUFBTSxPQUFPLHNCQUFzQjtJQTZCakMsWUFDVSxHQUFzQixFQUN2QixjQUFvQztRQURuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUF6QnBDLFdBQU0sR0FBVyxJQUFJLENB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dCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IEFuc3dlclN0eWxlLCBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSwgRm9ybVNjYWxhclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQgfSBmcm9tICcuLi8uLi9keW5hbWljLW1vZHVsZS1maWVsZC1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0gfSBmcm9tICcuLy4uLy4uLy4uLy4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBMaXN0VmFsdWVGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL251bWVyaWNGaWVsZC5tb2RlbCc7XHJcbi8vIGltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkL2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhZGQtZm9ybS1yZWNvcmRcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlndXJhdGlvbnM6IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnO1xyXG4gIEBJbnB1dCgpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHVzZXJJRDogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBmb3JtSUQ6IHN0cmluZyA9IG51bGw7IC8vIHByZXZpZXdcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtID0gbnVsbDsgLy8gcHJldmlldyBjb25maWdcclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZCB8IHN0cmluZyA9IG51bGw7IC8vIGVkaXRcclxuICBASW5wdXQoKSBvbmx5VmlldzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgc2hvd1NhdmVCdXR0b24gPSB0cnVlO1xyXG4gIHNob3dCYWNrQnV0dG9uID0gdHJ1ZTtcclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZm9ybUZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgZmllbGRHcm91cHM6IHsgW2tleTogc3RyaW5nXTogQXJyYXk8QmFzZUZpZWxkPiB9ID0ge307XHJcbiAgRm9ybVNjYWxhclR5cGVFbnVtID0gRm9ybVNjYWxhclR5cGVFbnVtO1xyXG4gIEZpZWxkVHlwZUVudW0gPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuICBAT3V0cHV0KCkgc2F2ZVJlY29yZEV2ZW50OiBFdmVudEVtaXR0ZXI8UmVjb3JkPiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oXCJmaWVsZFRlbXBsYXRlXCIpXHJcbiAgZmllbGRUZW1wbGF0ZTogUXVlcnlMaXN0PER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gYWRkIHB1w7IgZnVuemlvbmFyZSBhbmNoZSBjb21lIG1vZGlmaWNhIGUgY29tZSBwcmV2aWV3XHJcbiAgICAvLyBpbiBhZGQgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBGb3JtXHJcbiAgICAvLyBpbiBtb2RpZmljYSBhYmJpYW1vIGluIGlucHV0IGwnSUQgZGVsIFJlY29yZFxyXG4gICAgLy8gaW4gcHJldmlldyBhYmJpYW1vIGluIGlucHV0IGlsIEZvcm0oY2FzbyBjb25maWd1cmF0b3IpIG8gbCdJRCBkZWwgbW9kdWxvIG9uIG9ubHlWaWV3IGltcG9zdGF0byBhIHRydWVcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcbiAgICB0aGlzLnNob3dTYXZlQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93U2F2ZUJ1dHRvbjtcclxuICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dCYWNrQnV0dG9uO1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkXCIpXHJcblxyXG4gICAgaWYgKHRoaXMucmVjb3JkID09IG51bGwpIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZEZvcm1SZWNvcmQgLSBuZXdcIilcclxuICAgICAgdGhpcy5wcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkFkZEZvcm1SZWNvcmQgLSBlZGl0XCIsIHRoaXMucmVjb3JkKVxyXG4gICAgICB0aGlzLmVkaXRSZXNwb25zZVJlY29yZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGwnaW5pemlhbGl6emF6aW9uZSB0ZXJtaW5hIGNvbiBpbCByZWN1cGVybyBkZWwgcmVjb3JkIG8gY29uIGwnaW5pemlhbGl6emF6aW9uZSBkZWwgZm9ybSB2dW90b1xyXG5cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uaW5pdCAtIER5bmFGb3JtJywgdGhpcy5mb3JtKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGludm9jYXRvIGFsIGNhbWJpbyBkZWwgdmFsb3JlIGRpIG9nbmkgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gcmVjb3JkLlxyXG4gICAqIFNlcnZlIGFkIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRpIHR1dHRpIGkgY2FtcGkgY2hlIGhhbm5vIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkQ2hhbmdlKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGRUZW1wbGF0ZSAmJiB0aGlzLmZpZWxkVGVtcGxhdGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZpZWxkVGVtcGxhdGUuZm9yRWFjaCgoZikgPT4gZi51cGRhdGVGaWVsZCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXZpZXdPck5ld1Jlc3BvbnNlUmVjb3JkKCkge1xyXG4gICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAvLyBhZ2dpdWduaSBudW92b1xyXG4gICAgaWYgKHRoaXMuZm9ybSAhPSBudWxsKSB7XHJcbiAgICAgIC8vIHByZXZpZXcgcGVyIGlsIGNvbmZpZ3VyYXRvclxyXG4gICAgICB0aGlzLmZpZWxkc0NvbmZpZygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZvcm1JRCAhPSBudWxsKSB7XHJcbiAgICAgIC8vIHByZXZpZXcgcGVyIGFkbWluXHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTsgLy8gZGVudHJvIGNoaWFtYSBmaWVsZHNDb25maWdcclxuICAgIH1cclxuICB9XHJcbiAgZWRpdFJlc3BvbnNlUmVjb3JkKCkge1xyXG4gICAgLy8gbW9kaWlsdMOgIG1vZGlmaWNhXHJcbiAgICBpZiAodHlwZW9mIHRoaXMucmVjb3JkID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIC8vIGFsbG9yYSDDqCB1biBJRFxyXG4gICAgICB0aGlzLmdldFJlY29yZEJ5SUQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlsIHJlY29yZCB2aWVuZSBwYXNzYXRvIGNvbWUgdGFsZVxyXG4gICAgICAvLyAoPFJlY29yZD50aGlzLnJlY29yZCkuRW50SUQgPSBcIjNcIjtcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb247XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaSBkYXRpIGluc2VyaXRpIGRhbGwndXRlbnRlIHVuYSB2b2x0YSBjb25jbHVzYSBsYSBjb21waWxhemlvbmUgZGVsbGEgZm9ybS5cclxuICAgKi9cclxuICBzYXZlT3JFeGl0Rm9ybShleGl0OiBib29sZWFuKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdhZGQtZm9ybS1yZWNvcmQgc2F2ZVJlY29yZEV2ZW50JylcclxuICAgIGlmIChleGl0KSB7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQobnVsbCk7XHJcbiAgICAgIHRoaXMub25TYXZlUmVjb3JkKG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgICAgIHRoaXMub25TYXZlUmVjb3JkKCg8UmVjb3JkPnRoaXMucmVjb3JkKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHNhbHZhcmUgaWwgcmVjb3JkIGFnZ2l1bnRvIG8gbW9kaWZpY2F0by5cclxuICAgKiBTZSDDqCBzdGF0byBjb25maWd1cmF0byB1biBlbmRQb2ludCBwZXIgaWwgc2FsdmF0YWdnaW8gdmllbmUgZWZmZXR0dWF0YSB1bmEgY2hpYW1hdGEgYWwgc2VydmVyIHBhc3NhbmRvIGwnb2dnZXRvIGRhIHNhbHZhcmVcclxuICAgKiBuZWwgYm9keSBkZWxsYSBjaGlhbWF0YSwgYWx0cmltZW50aSBzY2F0ZW5hIGwnZXZlbnRvIFwic2F2ZVJlY29yZFwiLlxyXG4gICAqIEBwYXJhbSBldmVudCBPZ2dldHRvIGRpIHRpcG8gUmVjb3JkIGRhIHNhbHZhcmUuXHJcbiAgICovXHJcbiAgb25TYXZlUmVjb3JkKGV2ZW50OiBSZWNvcmQpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uU2F2ZVJlY29yZCAtIGV2ZW50JywgZXZlbnQpXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvblNhdmVSZWNvcmQgLSBmb3JtJywgdGhpcy5mb3JtKVxyXG4gICAgaWYgKFxyXG4gICAgICBldmVudCAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICE9IG51bGwgJiZcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5TYXZlRW5kUG9pbnRcclxuICAgICkge1xyXG4gICAgICB2YXIgZHluUmVjOiBEeW5SZWNvcmQgPSBuZXcgRHluUmVjb3JkKCk7XHJcbiAgICAgIGR5blJlYy5JRCA9IGV2ZW50LklEID8/IG51bGw7XHJcbiAgICAgIGR5blJlYy5FbnRJRCA9IHRoaXMuZm9ybS5JRDtcclxuICAgICAgZHluUmVjLlZlcnNpb24gPSB0aGlzLmZvcm0uVmVyc2lvbjtcclxuICAgICAgZHluUmVjLnVzZXJJRCA9IHRoaXMudXNlcklEO1xyXG4gICAgICBkeW5SZWMuVmFsdWVzID0gZXZlbnQgPz8gbnVsbDtcclxuICAgICAgZHluUmVjLkhUTUxyZWFkYWJsZVZhbHVlcyA9IHRoaXMuY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzKGV2ZW50KTtcclxuXHJcbiAgICAgIGlmIChldmVudC5GS19JbnNlcnRVc2VyID09IG51bGwpe1xyXG4gICAgICAgIC8vIE51b3ZvIFJlY29yZFxyXG4gICAgICAgIGR5blJlYy5GS19JbnNlcnRVc2VyID0gdGhpcy51c2VySUQ7XHJcbiAgICAgICAgZHluUmVjLkluc2VydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGR5blJlYy5GS19VcGRhdGVVc2VyID0gdGhpcy51c2VySUQ7XHJcbiAgICAgICAgZHluUmVjLlVwZGF0ZURhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE1vZGlmaWNhIGRlbCBSZWNvcmRcclxuICAgICAgICBkeW5SZWMuRktfSW5zZXJ0VXNlciA9IGV2ZW50LkZLX0luc2VydFVzZXJcclxuICAgICAgICBkeW5SZWMuSW5zZXJ0RGF0ZSA9IGV2ZW50Lkluc2VydERhdGU7XHJcbiAgICAgICAgZHluUmVjLkZLX1VwZGF0ZVVzZXIgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgICBkeW5SZWMuVXBkYXRlRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBhZGRpdGlvbmFsUGFyYW1zID0gdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zID09IG51bGwgPyBldmVudC5BZGRpdGlvbmFsUGFyYW1zIDogdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsUGFyYW1zO1xyXG4gICAgICBkeW5SZWMuQWRkaXRpb25hbFBhcmFtcyA9IEpTT04uc3RyaW5naWZ5KGFkZGl0aW9uYWxQYXJhbXMpO1xyXG5cclxuICAgICAgLy8gdmFyIGFkZGl0aW9uYWxJbmZvID0gdGhpcy5hZGRpdGlvbmFsSW5mbyA9PSBudWxsID8gZXZlbnQuQWRkaXRpb25hbEluZm8gOiB0aGlzLmFkZGl0aW9uYWxJbmZvO1xyXG4gICAgICB2YXIgYWRkaXRpb25hbEluZm8gPSBldmVudC5BZGRpdGlvbmFsSW5mbyA9PSBudWxsID8gdGhpcy5jb25maWd1cmF0aW9ucy5hZGRpdGlvbmFsSW5mbyA6IGV2ZW50LkFkZGl0aW9uYWxJbmZvO1xyXG4gICAgICBkeW5SZWMuQWRkaXRpb25hbEluZm8gPSBKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsSW5mbyk7XHJcblxyXG4gICAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBQYXJhbU5hbWU6IFwiUmVjb3JkXCIsXHJcbiAgICAgICAgICBQYXJhbVZhbHVlOiBkeW5SZWMsXHJcbiAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJJbiBCb2R5XCJdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF07XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25TYXZlUmVjb3JkIC0gZHluYW1pY01vZHVsZVBhcmFtcycsIGR5bmFtaWNNb2R1bGVQYXJhbXMpXHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuU2F2ZUVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hZnRlclNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZvcm1CeUlEKGlkOiBzdHJpbmcgPSB0aGlzLmZvcm1JRCkge1xyXG4gICAgY29uc3QgZHluYW1pY01vZHVsZVBhcmFtczogQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPiA9XHJcbiAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2dldEZvcm1CeUlEIC0gRHluYUZvcm0nLCB0aGlzLmZvcm0pXHJcbiAgICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4geyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gY2kgZW50cm8gc29sbyBzZSDDqCBzdGF0byBwYXNzYXRvIGlsIHBhcmFtZXRybyBcInJlY29yZFwiIGNvbWUgc3RyaW5nYVxyXG4gIGdldFJlY29yZEJ5SUQoKSB7XHJcbiAgICAvLyBwcmVwYXJvIGkgZGF0aSBkZWwgcmVjb3JkXHJcbiAgICB2YXIgZHluYW1pY1JlY29yZFBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IHRoaXMucmVjb3JkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY1JlY29yZFBhcmFtcyxcclxuICAgICAgKHJlczogRHluUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcblxyXG4gICAgICAgICg8UmVjb3JkPnRoaXMucmVjb3JkKSA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLklEID0gdGhpcy5pc0R1cGxpY2F0ZSA/IFwiXCIgOiByZXMuSUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRW50SUQgPSByZXMuRW50SUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQudXNlcklEID0gcmVzLnVzZXJJRDtcclxuICAgICAgICB0aGlzLnJlY29yZC5WZXJzaW9uID0gcmVzLlZlcnNpb247XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmFsdWVzID0gSlNPTi5wYXJzZShyZXMuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuRktfSW5zZXJ0VXNlciA9IHJlcy5GS19JbnNlcnRVc2VyO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkZLX1VwZGF0ZVVzZXIgPSByZXMuRktfVXBkYXRlVXNlcjtcclxuICAgICAgICB0aGlzLnJlY29yZC5JbnNlcnREYXRlID0gcmVzLkluc2VydERhdGU7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVXBkYXRlRGF0ZSA9IHJlcy5VcGRhdGVEYXRlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIHRoaXMudmlld01vZGUgPSBEeW5hbWljTW9kdWxlVmlld01vZGVFbnVtLkNPTVBJTEU7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEZvcm1CeUlEYW5kVmVyc2lvbigpIHtcclxuICAgIC8vIHByZXBhcm8gbGEgdmVyc2lvbmUgY29ycmV0dGEgZGVsIGZvcm1cclxuICAgIHZhciBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElELFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcIlZlcnNpb25cIixcclxuICAgICAgICBQYXJhbVZhbHVlOiAoPFJlY29yZD50aGlzLnJlY29yZCkuVmVyc2lvbixcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZ2V0Rm9ybUJ5SURhbmRWZXJzaW9uIC0gdGhpcyByZWNvcmRcIiwgPFJlY29yZD50aGlzLnJlY29yZClcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlEQW5kVmVyc2lvbkVuZFBvaW50LFxyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG5cclxuICAgICAgICB0aGlzLmNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKTtcclxuICAgICAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtR3JvdXAoKTtcclxuICAgICAgICBpZiAodGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSkge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaWVsZHNDb25maWcoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZVJlY29yZFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMucmVvcmRlckZvcm1GaWVsZHMoKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZvcm1TY2FsYXJUeXBlICE9IEZvcm1TY2FsYXJUeXBlRW51bS5TZW1wbGljZSkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXBzKCk7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZmllbGRzQ29uZmlnIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbmVsbCdvZ2dldHRvIFJlY29yZCBsZSBwcm9wcmlldMOgIG1hbmNhbnRpIHJpc3BldHRvIGFpIGNhbXBpIGNoZSBjb21wb25nb25vIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgY29uc3QgcmVjb3JkUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IE9iamVjdC5rZXlzKHRoaXMucmVjb3JkKTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgaWYgKCFyZWNvcmRQcm9wZXJ0aWVzLmZpbmQoKHApID0+IHAgPT09IGZpZWxkLk5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbZmllbGQuTmFtZV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLmZvcm0uSW5uZXJGb3JtcyAmJiB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5Jbm5lckZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBjb25zdCBhcnJheU5hbWU6IHN0cmluZyA9IGZvcm0uTmFtZS5zcGxpdChcIiBcIikuam9pbihcIl9cIik7XHJcbiAgICAgICAgaWYgKCFyZWNvcmRQcm9wZXJ0aWVzLmZpbmQoKHApID0+IHAgPT09IGFycmF5TmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMucmVjb3JkW2FycmF5TmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZVJlY29yZFByb3BlcnRpZXMgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpb3JkaW5hcmUgaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVvcmRlckZvcm1GaWVsZHMoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcyAmJiB0aGlzLmZvcm0uRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcy5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb24gPyAxIDogYi5PcmRpbmFsUG9zaXRpb24gPiBhLk9yZGluYWxQb3NpdGlvbiA/IC0xIDogMCk7XHJcbiAgICB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwicmVvcmRlckZvcm1GaWVsZHMgLSBmb3JtXCIsIHRoaXMuZm9ybSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBpbCBGb3JtR3JvdXAgY2hlIHJhcHByZXNlbnRhIGxhIGZvcm0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGb3JtR3JvdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1Gb3JtID0gdGhpcy51dGlsaXR5U2VydmljZS5DcmVhdGVGb3JtRm9ybUdyb3VwKFxyXG4gICAgICB0aGlzLmZvcm0uRmllbGRzLFxyXG4gICAgICAoPFJlY29yZD50aGlzLnJlY29yZCksXHJcbiAgICAgIHRoaXMub25seVZpZXdcclxuICAgICk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlRm9ybUdyb3VwIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaSBncnVwcGkgaW4gY3VpIHJhZ2dydXBwYXJlIGkgY2FtcGkgZGVsbGEgZm9ybSBpbiBiYXNlXHJcbiAgICogYSBjb21lIMOoIHN0YXRhIGNvbmZpZ3VyYXRhIGRhbGwndXRlbnRlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRHcm91cHMoKSB7XHJcbiAgICB0aGlzLmZvcm0uRm9ybUZpZWxkc0dyb3Vwcy5zb3J0KChhLCBiKSA9PiBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDApXHJcbiAgICAgIC5tYXAoKGcpID0+IGcuTmFtZSlcclxuICAgICAgLmZvckVhY2goKGdyb3VwTmFtZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmllbGRHcm91cHNbZ3JvdXBOYW1lXSA9IHRoaXMuZm9ybS5GaWVsZHMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+IGYuRmllbGRHcm91cCA9PSBncm91cE5hbWVcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUZpZWxkR3JvdXBzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gcmVjb3JkXCIsIHJlY29yZCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIHZhciBmb3JtbmFtZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgdGhpcy5mb3JtLkZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge2Zvcm1uYW1lcy5wdXNoKGZpZWxkLk5hbWUpO30pO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIGZvcm0gZmllbGRzIG5hbWVzXCIsIGZvcm1uYW1lcyk7XHJcblxyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3IgdmFsdWVzP1wiKVxyXG5cclxuICAgIGxldCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiA9IHRoaXMuZ2V0UmVzcG9uc2VWYWx1ZXMocmVjb3JkLCB0aGlzLmZvcm0pO1xyXG4gICAgXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gb3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpO1xyXG5cclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIHRlbXBsYXRlcz9cIilcclxuICAgIGxldCB0ZW1wbGF0ZTogc3RyaW5nID0gdGhpcy5nZXRSZXNwb25zZVRlbXBsYXRlKHJlY29yZCwgdGhpcy5mb3JtKTsgLy8gb2dnZXR0byBuZWwgcXVhbGUgdmllbmUgY29zdHJ1aXRvIGlsIHRlbXBsYXRlIG8gY2hlIHByZW5kZSBpbCB2YWxvcmUgZGEgdW4gdGVtcGxhdGUgZXN0ZXJub1xyXG4gICAgXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gdGVtcGxhdGVcIiwgdGVtcGxhdGUpO1xyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3Igb3V0cHV0P1wiKVxyXG4gICAgY29uc3QgcmVnZXggPSAvIyMoW1xcd10rKSMjL2c7XHJcbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLnJlcGxhY2VUZW1wbGF0ZVBsYWNlaG9sZGVyc1dpdGhWYWx1ZXModGVtcGxhdGUsIG91dHB1dFZhbHVlc0FycmF5LCByZWdleClcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiY3JlYXRlSFRNTHJlYWRhYmxlVmFsdWVzIC0gb3V0cHV0XCIsIG91dHB1dCk7XHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciBlbmRpbmc/XCIpXHJcbiAgICByZXR1cm4gb3V0cHV0OyAvLyBvZ2dldHRvIGNoZSBjb250ZXJyw6AgbCdvdXRwdXQgZWxhYm9yYXRvICAgIFxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVzcG9uc2VWYWx1ZXMocmVjb3JkOiBSZWNvcmQsIGZvcm06IEZvcm0pOiBBcnJheTxhbnk+IHtcclxuICAgIGxldCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiA9IFtdOyAvLyBhcnJheSBjb24gaSB2YWxvcmkgZGVsbGUgcmlzcG9zdGVcclxuICAgIC8vKDxEeW5SZWNvcmQ+dGhpcy5yZWNvcmQpLlZhbHVlcyDDqCBsYSBsaXN0YSBkaSBvZ2dldHRpIHtmaWVsZE5hbWU6IHZhbG9yZX1cclxuICAgIC8vIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIocmVjb3JkKS5WYWx1ZXNcIiwgcmVjb3JkKTtcclxuXHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKFxyXG4gICAgICAoZmllbGQpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgLy9HbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZ2V0UmVzcG9uc2VWYWx1ZXMgZmllbGRcIiwgZmllbGQpO1xyXG4gICAgICAgICAgLy8gbGV0IGZvdW5kT2JqZWN0ID0gcmVjb3JkLmZpbmQoXHJcbiAgICAgICAgICAvLyAgIChvYmopID0+IG9iaiA9PT0gZmllbGQuTmFtZVxyXG4gICAgICAgICAgLy8gKTtcclxuICAgICAgICAgIGxldCBmb3VuZE9iamVjdCA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuXHJcbiAgICAgICAgICAvLyBmYXJlIHVuIGV2YWwgcGVyIHBvcG9sYXJlIGkgdmFsdWVQYWlycyBzZSDDqCBwcmVzZW50ZSB1bmEgZm9ybXVsYVxyXG4gICAgICAgICAgLy8gcHJlbmRlcmUgbGEgbGFiZWwgY29ycmV0dGFcclxuICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAvLyBQUkVQQVJPIElMIFZBTFVFUEFJUlNcclxuICAgICAgICAgIHN3aXRjaChmaWVsZC5GaWVsZFR5cGUpe1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06eyAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLkZvcm11bGEgIT0gbnVsbCAmJiBmaWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBhZ2dpdW5nbyBhIHZhbHVlcGFpcnMgaSB2YWxvcmkgY2FsY29sYXRpXHJcbiAgICAgICAgICAgICAgICAvLyAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA/ICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgOiB7fTtcclxuICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkLkZvcm11bGEsXHJcbiAgICAgICAgICAgICAgICAgIHJlY29yZCxcclxuICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleTIgaW4gdGVtcCkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoVXRpbGl0eUhlbHBlclNlcnZpY2UuaXNOdW1lcmljKHRlbXBba2V5Ml0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1tOdW1iZXIoa2V5MildID0gdGVtcFtrZXkyXTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW2tleTJdID0gdGVtcFtrZXkyXTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZC5OYW1lXV07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICgoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzICE9IG51bGwgJiYgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2YSBiZW5lIGNvc8OsXHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICgoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVN0cmluZyAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlU3RyaW5nICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIHZhIHByZXNhIGxhIHN0cmlnbmEgZSByaW1hcHBhdGEgbmVsIGRpYXJpb1xyXG4gICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycyA9IEdsb2JhbFNlcnZpY2Uuc3RyaW5nVG9WYWx1ZVBhaXJzKCg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlU3RyaW5nKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGxldCBpbnZlcnRlZCA9IHt9O1xyXG4gICAgICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIig8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNcIiwgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycyk7XHJcbiAgICAgICAgICAgICAgLy8gVmFsdWVQYWlyczoge1NpOiAnU2knLCBObzogJ05vJ31cclxuICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycykge1xyXG4gICAgICAgICAgICAgICAgaW52ZXJ0ZWRbKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1trZXldXSA9IGtleTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycyA9IGludmVydGVkO1xyXG4gICAgICAgICAgICAgIGlmKHJlY29yZFtmaWVsZC5OYW1lXSAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLklzTXVsdGlDaG9pY2hlKXtcclxuICAgICAgICAgICAgICAgIC8vIGNhc28gTVVMVElTQ0VMVEFcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbZmllbGQuTmFtZV0uZm9yRWFjaCgoZWxlbWVudCwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArPSAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW2VsZW1lbnRdO1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSArPSBpID09IHJlY29yZFtmaWVsZC5OYW1lXS5sZW5ndGggLTEgPyBcIlwiOiBcIiwgXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZC5OYW1lXV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJvdXRwdXRWYWx1ZXNBcnJheVwiLCBvdXRwdXRWYWx1ZXNBcnJheSlcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOntcclxuICAgICAgICAgICAgICBpZigoPE51bWVyaWNGaWVsZD5maWVsZCkuSXNJbnRlZ2VyKXtcclxuICAgICAgICAgICAgICAgIGlmKCg8TnVtZXJpY0ZpZWxkPmZpZWxkKS5EZWNpbWFsU2VwYXJhdG9yID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6e1xyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuXHJcbiAgICAvLyBmb3IgKGxldCBmaWVsZE5hbWUgaW4gcmVjb3JkKSB7XHJcbiAgICAvLyAgIHRyeSB7XHJcbiAgICAvLyAgICAgLy8gZmllbGROYW1lIMOoIGlsIG5vbWUgZGVsIGNhbXBvXHJcbiAgICAvLyAgICAgLy8gUFJFUEFSTyBWQVJJQUJJTEkgVkFMT1JJIENPUlJFVFRJXHJcbiAgICAvLyAgICAgbGV0IGZvdW5kT2JqZWN0ID0gZm9ybS5GaWVsZHMuZmluZChcclxuICAgIC8vICAgICAgIChvYmopID0+IHtcclxuICAgIC8vICAgICAgICAgaWYgKGZpZWxkTmFtZSA9PSBcIklEXCIpIHtcclxuICAgIC8vICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib2JqXCIsIG9iaik7XHJcbiAgICAvLyAgICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZpZWxkTmFtZVwiLCBmaWVsZE5hbWUpO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICByZXR1cm4gb2JqLk5hbWUgPT09IGZpZWxkTmFtZVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZpZWxkTmFtZVwiLCBmaWVsZE5hbWUpO1xyXG4gICAgLy8gICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJmb3VuZE9iamVjdFwiLCBmb3VuZE9iamVjdCk7XHJcbiAgICAvLyAgICAgLy8gZ2VzdGlyZSBjYXNvIGZpZWxkdHlwZSA4IFtlbGVuY28gZ2VuZXJpY29dXHJcbiAgICAvLyAgICAgLy8gZmFyZSB1biBldmFsIHBlciBwb3BvbGFyZSBpIHZhbHVlUGFpcnMgc2Ugw6ggcHJlc2VudGUgdW5hIGZvcm11bGFcclxuICAgIC8vICAgICAvLyBwcmVuZGVyZSBsYSBsYWJlbCBjb3JyZXR0YVxyXG4gICAgLy8gICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyAgICAgaWYgKGZvdW5kT2JqZWN0LkZpZWxkVHlwZSA9PSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdKSB7XHJcbiAgICAvLyAgICAgICBpZiAoZm91bmRPYmplY3QuRm9ybXVsYSkge1xyXG4gICAgLy8gICAgICAgICAvLyBhZ2dpdW5nbyBhIHZhbHVlcGFpcnMgaSB2YWxvcmkgY2FsY29sYXRpXHJcbiAgICAvLyAgICAgICAgIC8vICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSB7fTtcclxuICAgIC8vICAgICAgICAgdmFyIHRlbXAgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShcclxuICAgIC8vICAgICAgICAgICBmb3VuZE9iamVjdC5Gb3JtdWxhLFxyXG4gICAgLy8gICAgICAgICAgIHJlY29yZCxcclxuICAgIC8vICAgICAgICAgICBudWxsXHJcbiAgICAvLyAgICAgICAgICk7XHJcbiAgICAvLyAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJ0ZW1wXCIsIHRlbXApO1xyXG4gICAgLy8gICAgICAgICBmb3IgKGxldCBrZXkyIGluIHRlbXApIHtcclxuICAgIC8vICAgICAgICAgICBpZiAoVXRpbGl0eUhlbHBlclNlcnZpY2UuaXNOdW1lcmljKHRlbXBba2V5Ml0pKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW051bWJlcihrZXkyKV0gPSB0ZW1wW2tleTJdO1xyXG4gICAgLy8gICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW2tleTJdID0gdGVtcFtrZXkyXTtcclxuICAgIC8vICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIihyZWNvcmQpLlZhbHVlc1tmaWVsZE5hbWVdXCIsIHJlY29yZFtmaWVsZE5hbWVdKTtcclxuICAgIC8vICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIig8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkTmFtZV1dXCIsICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkTmFtZV1dKTtcclxuICAgIC8vICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGROYW1lXSA9ICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbcmVjb3JkW2ZpZWxkTmFtZV1dO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGludmVydGVkID0ge307XHJcbiAgICAvLyAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1wiLCAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzKTtcclxuICAgIC8vICAgICAgIGZvciAobGV0IGtleSBpbiAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzKSB7XHJcbiAgICAvLyAgICAgICAgIGludmVydGVkWyg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNba2V5XV0gPSBrZXk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzID0gaW52ZXJ0ZWQ7XHJcbiAgICAvLyAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV07XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJyZWNvcmRbZmllbGROYW1lXVwiLCByZWNvcmRbZmllbGROYW1lXSk7XHJcbiAgICAvLyAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gcmVjb3JkW2ZpZWxkTmFtZV07XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyAgIH0gY2F0Y2ggKGUpIHtcclxuICAgIC8vICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib3V0cHV0VmFsdWVzQXJyYXkgMVwiLCBvdXRwdXRWYWx1ZXNBcnJheSk7XHJcbiAgICAvLyBjYW5jZWxsbyBpIHZhbG9yaSBpbmRlZmluaXRpIG8gbnVsbGlcclxuICAgIGZvciAoY29uc3QgY2hpYXZlIGluIG91dHB1dFZhbHVlc0FycmF5KSB7XHJcbiAgICAgIGlmIChvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IHVuZGVmaW5lZCB8fCBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID09IG51bGwpXHJcbiAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbY2hpYXZlXSA9ICcnXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWVzQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVGVtcGxhdGUocmVjb3JkOiBSZWNvcmQsIGZvcm06IEZvcm0pOiBzdHJpbmcge1xyXG4gICAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9ICc8ZGl2IGNsYXNzPVwicm93XCI+JztcclxuICAgIC8vIFBSRVBBUk8gTyBQUkVORE8gTEEgU1RSVVRUVVJBIERBIFNUQU1QQVJFXHJcbiAgICBmb3JtLkZpZWxkcy5mb3JFYWNoKChiYXNlRmllbGQ6IEJhc2VGaWVsZCkgPT4ge1xyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRSZXNwb3NuZVRlbXBsYXRlIC0gcHJlIC0gZmllbGQnLCBiYXNlRmllbGQpXHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9PSBudWxsIHx8IGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZSA9IG5ldyBBbnN3ZXJTdHlsZSgpO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Db2xTcGFuU2l6ZXMgPSBiYXNlRmllbGQuQ29sU3BhblNpemVzO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTID0gYmFzZUZpZWxkLkZpZWxkc3R5bGVDU1M7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkxhYmVsc3R5bGVDU1MgPSBiYXNlRmllbGQuTGFiZWxzdHlsZUNTUztcclxuICAgICAgICBpZihiYXNlRmllbGQuVmlzaWJsZUlmKXtcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEoYmFzZUZpZWxkLlZpc2libGVJZiwgcmVjb3JkLCBudWxsKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gYmFzZUZpZWxkLkluTGlzdFZpZXc7XHJcbiAgICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmID0gYmFzZUZpZWxkLlZpc2libGVJZjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYpe1xyXG4gICAgICAgIGNvbnN0IHZpc2liaWxpdHkgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShiYXNlRmllbGQuQW5zd2VyU3R5bGUuVmlzaWJsZUlmLCByZWNvcmQsIG51bGwpXHJcbiAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcIkV2YWx1YXRlRmllbGRGb3JtdWxhIC0gdmlzaWJpbGl0eVwiLCB2aXNpYmlsaXR5KTtcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0VmlldyA9ICh2aXNpYmlsaXR5ID09IHRydWUpID8gdHJ1ZSA6IGZhbHNlIDtcclxuICAgICAgfVxyXG4gICAgICBpZihiYXNlRmllbGQuQW5zd2VyU3R5bGUuSW5MaXN0Vmlldyl7XHJcbiAgICAgICAgdGVtcGxhdGUgKz0gJzxkaXYgY2xhc3M9XCInKyB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEZpZWxkQW5zd2VyU3R5bGVDbGFzcyhiYXNlRmllbGQpICsnIGQtZmxleCBmbGV4LWNvbHVtbiBkeW5hZm9ybS1hbnN3ZXItZmllbGRcIj4gJytcclxuICAgICAgICAnIDxzcGFuIGNsYXNzPVwiZHluYWZvcm0tcXVlc3Rpb25cIiBzdHlsZT1cIicgKyBiYXNlRmllbGQuQW5zd2VyU3R5bGUuTGFiZWxzdHlsZUNTUyArICdcIj4nICsgYmFzZUZpZWxkLkRlc2NyaXB0aW9uICsgJzo8L3NwYW4+JyArIFxyXG4gICAgICAgICcgPHNwYW4gY2xhc3M9XCJkeW5hZm9ybS1yZXNwb25zZVwiIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5GaWVsZHN0eWxlQ1NTICsgJ1wiPiAjIycgKyBiYXNlRmllbGQuTmFtZSArICcjIzwvc3Bhbj4nICsgXHJcbiAgICAgICAgJzwvZGl2PiBcXG4gJztcclxuICAgICAgfVxyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRSZXNwb3NuZVRlbXBsYXRlIC0gcG9zdCAtIGZpZWxkJywgYmFzZUZpZWxkKVxyXG4gICAgfSk7XHJcbiAgICAvLyAoYXR0dWFsbWVudGUgbm9uIGVzaXN0ZSBpbCBjb25jZXR0byBkaSB0ZW1wYXRlIGRpIG91dHB1dClcclxuICAgICAgdGVtcGxhdGUgKz0gJzwvZGl2Pic7XHJcbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVwbGFjZVRlbXBsYXRlUGxhY2Vob2xkZXJzV2l0aFZhbHVlcyh0ZW1wbGF0ZTogc3RyaW5nLCBvdXRwdXRWYWx1ZXNBcnJheTogQXJyYXk8YW55PiwgcmVnZXgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnZXgsIChtYXRjaCwgZ3JvdXApID0+IHtcclxuICAgICAgcmV0dXJuIDxzdHJpbmc+b3V0cHV0VmFsdWVzQXJyYXlbZ3JvdXBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGVyXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBlcXAtZHluYW1pYy1tb2R1bGUtdGl0bGUgYWRkLWZvcm0tcmVjb3JkLWhlYWRlclwiICpuZ0lmPVwic2hvd1RpdGxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8c3Bhbj57e2Zvcm0uTmFtZX19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtRm9ybVwiIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLWZvcm1cIj5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgU0VNUExJQ0UgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm0uRm9ybVNjYWxhclR5cGUgPT0gRm9ybVNjYWxhclR5cGVFbnVtLlNlbXBsaWNlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZvcm0uRmllbGRzIH1cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1zZW1wbGljZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBIFNURVBQRVIgLS0+XHJcbiAgICAgICAgPG1hdC1ob3Jpem9udGFsLXN0ZXBwZXIgbGluZWFyICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW1bJ0Egc3RlcCddXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtc3RlcHBlclwiPlxyXG4gICAgICAgICAgICA8bWF0LXN0ZXAgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3VwczsgbGV0IGkgPSBpbmRleDsgbGV0IGZpcnN0ID0gZmlyc3Q7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICB7e2dyb3VwLk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZpZWxkR3JvdXBzW2dyb3VwLk5hbWVdIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFkZC1mb3JtLXJlY29yZC1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFmaXJzdFwiIGNsYXNzPVwibXItMiBwcmV2aW91c1wiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUHJlY2VkZW50ZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhbGFzdFwiIGNsYXNzPVwiYnV0dG9uLW5leHRcIiBjb2xvcj1cInByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbiBtYXRTdGVwcGVyTmV4dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU3VjY2Vzc2l2b1xyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJsYXN0ICYmIHNob3dTYXZlQnV0dG9uXCIgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKGZhbHNlKVwiIGNsYXNzPVwiYnV0dG9uLW5leHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU2FsdmFcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9tYXQtc3RlcD5cclxuICAgICAgICA8L21hdC1ob3Jpem9udGFsLXN0ZXBwZXI+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgVEFCIC0tPlxyXG4gICAgICAgIDxtYXQtdGFiLWdyb3VwICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW1bJ0luIHRhYiddXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtdGFiXCI+XHJcbiAgICAgICAgICAgIDxtYXQtdGFiICpuZ0Zvcj1cImxldCBncm91cCBvZiBmb3JtLkZvcm1GaWVsZHNHcm91cHNcIiBbbGFiZWxdPVwiZ3JvdXAuTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZmllbGRzOiBmaWVsZEdyb3Vwc1tncm91cC5OYW1lXSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQUQgQUNDT1JESU9OIC0tPlxyXG4gICAgICAgIDxtYXQtYWNjb3JkaW9uIG11bHRpICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW1bJ0luIGFjY29yZGlvbiddXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtYWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBncm91cCBvZiBmb3JtLkZvcm1GaWVsZHNHcm91cHNcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2dyb3VwLk5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZpZWxkR3JvdXBzW2dyb3VwLk5hbWVdIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgPC9mb3JtPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMiBhZGQtZm9ybS1yZWNvcmQtYnV0dG9uc1wiXHJcbiAgICAgICAgKm5nSWY9XCIoc2hvd0JhY2tCdXR0b24gfHwgc2hvd1NhdmVCdXR0b24pICYmIGZvcm0uRm9ybVNjYWxhclR5cGUgIT0gRm9ybVNjYWxhclR5cGVFbnVtWydBIHN0ZXAnXVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgdGV4dC1yaWdodFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCIgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICBBbm51bGxhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dTYXZlQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlT3JFeGl0Rm9ybShmYWxzZSlcIiBbZGlzYWJsZWRdPVwiZm9ybUZvcm0uaW52YWxpZCB8fCBmb3JtRm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgU2FsdmFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcblxyXG48IS0tIFRFTVBMQVRFIFBFUiBMQSBWSVNVQUxJWlpBWklPTkUgREVJIENBTVBJIERFTExBIEZPUk0gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZXMgbGV0LWZpZWxkcz0nZmllbGRzJz5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIiBbaGlkZGVuXT1cIiFmaWVsZC5Jbkxpc3RWaWV3XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRTeWxlQ2xhc3MoZmllbGQpXCI+XHJcbiAgICAgICAgICAgIDxkeW5hbWljLW1vZHVsZS1maWVsZC1maXggI2ZpZWxkVGVtcGxhdGUgW2ZpZWxkXT1cImZpZWxkXCIgW2Zvcm1dPVwiZm9ybVwiIFtyZWNvcmRdPVwicmVjb3JkXCJcclxuICAgICAgICAgICAgICAgIChyZWNvcmRDaGFuZ2UpPVwib25SZWNvcmRDaGFuZ2UoKVwiPlxyXG4gICAgICAgICAgICA8L2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNILE9BQU8sRUFBRSxXQUFXLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0YsT0FBTyxFQUFRLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVuRixPQUFPLEVBQTZDLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7OztBQUdwRSwyR0FBMkc7QUFPM0csTUFBTSxPQUFPLHNCQUFzQjtJQTZCakMsWUFDVSxHQUFzQixFQUN2QixjQUFvQztRQURuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUF6QnBDLFdBQU0sR0FBVyxJQUFJLENB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R0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxXQUFXO29CQUN6SCxZQUFZLENBQUM7YUFDZDtZQUNELGFBQWEsQ0FBQyxRQUFRLENBQUMsb0NBQW9DLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFDekUsQ0FBQyxDQUFDLENBQUM7UUFDSCw0REFBNEQ7UUFDMUQsUUFBUSxJQUFJLFFBQVEsQ0FBQztRQUNyQixPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8scUNBQXFDLENBQUMsUUFBZ0IsRUFBRSxpQkFBNkIsRUFBRSxLQUFLO1FBQ2xHLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUMsT0FBZSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O29IQWxrQlUsc0JBQXNCO3dHQUF0QixzQkFBc0IsNmNDcEJuQyw2cEpBa0djOzRGRDlFRCxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsaUJBQWlCOzJJQU1sQixjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQVlJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUlQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVDb21waWxlQ29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgQW5zd2VyU3R5bGUsIEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtLCBGb3JtU2NhbGFyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVGaWVsZEZpeENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbmRQb2ludENvbmZpZ3VyYXRpb24sIEVuZFBvaW50RGF0YVBhcmFtcywgUGFyYW1UeXBlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IE51bWVyaWNGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCwgRHluQXR0YWNobWVudFNlbGVjdE9iamVjdCwgSW1hZ2VTZWxlY3RvckZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG4vLyBpbXBvcnQgeyBEeW5hbWljTW9kdWxlRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9keW5hbWljLW1vZHVsZS1maWVsZC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYWRkLWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkRm9ybVJlY29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZztcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSB1c2VySUQ6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmcgPSBudWxsOyAvLyBwcmV2aWV3XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIHByZXZpZXcgY29uZmlnXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQgfCBzdHJpbmcgPSBudWxsOyAvLyBlZGl0XHJcbiAgQElucHV0KCkgb25seVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzaG93VGl0bGUgPSB0cnVlO1xyXG4gIHNob3dTYXZlQnV0dG9uID0gdHJ1ZTtcclxuICBzaG93QmFja0J1dHRvbiA9IHRydWU7XHJcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGZvcm1Gb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIGZpZWxkR3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PEJhc2VGaWVsZD4gfSA9IHt9O1xyXG4gIEZvcm1TY2FsYXJUeXBlRW51bSA9IEZvcm1TY2FsYXJUeXBlRW51bTtcclxuICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuXHJcbiAgQE91dHB1dCgpIHNhdmVSZWNvcmRFdmVudDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJTYXZlUmVjb3JkRXZlbnQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8UmVjb3JkPigpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFwiZmllbGRUZW1wbGF0ZVwiKVxyXG4gIGZpZWxkVGVtcGxhdGU6IFF1ZXJ5TGlzdDxEeW5hbWljTW9kdWxlRmllbGRGaXhDb21wb25lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIGFkZCBwdcOyIGZ1bnppb25hcmUgYW5jaGUgY29tZSBtb2RpZmljYSBlIGNvbWUgcHJldmlld1xyXG4gICAgLy8gaW4gYWRkIGFiYmlhbW8gaW4gaW5wdXQgbCdJRCBkZWwgRm9ybVxyXG4gICAgLy8gaW4gbW9kaWZpY2EgYWJiaWFtbyBpbiBpbnB1dCBsJ0lEIGRlbCBSZWNvcmRcclxuICAgIC8vIGluIHByZXZpZXcgYWJiaWFtbyBpbiBpbnB1dCBpbCBGb3JtKGNhc28gY29uZmlndXJhdG9yKSBvIGwnSUQgZGVsIG1vZHVsbyBvbiBvbmx5VmlldyBpbXBvc3RhdG8gYSB0cnVlXHJcbiAgICB0aGlzLnNob3dUaXRsZSA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1RpdGxlO1xyXG4gICAgdGhpcy5zaG93U2F2ZUJ1dHRvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuc2hvd1NhdmVCdXR0b247XHJcbiAgICB0aGlzLnNob3dCYWNrQnV0dG9uID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93QmFja0J1dHRvbjtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWRkRm9ybVJlY29yZFwiKVxyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZCA9PSBudWxsKSB7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkIC0gbmV3XCIpXHJcbiAgICAgIHRoaXMucHJldmlld09yTmV3UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBZGRGb3JtUmVjb3JkIC0gZWRpdFwiLCB0aGlzLnJlY29yZClcclxuICAgICAgdGhpcy5lZGl0UmVzcG9uc2VSZWNvcmQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsJ2luaXppYWxpenphemlvbmUgdGVybWluYSBjb24gaWwgcmVjdXBlcm8gZGVsIHJlY29yZCBvIGNvbiBsJ2luaXppYWxpenphemlvbmUgZGVsIGZvcm0gdnVvdG9cclxuXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvbmluaXQgLSBEeW5hRm9ybScsIHRoaXMuZm9ybSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBpbnZvY2F0byBhbCBjYW1iaW8gZGVsIHZhbG9yZSBkaSBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHJlY29yZC5cclxuICAgKiBTZXJ2ZSBhZCBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkaSB0dXR0aSBpIGNhbXBpIGNoZSBoYW5ubyB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICBvblJlY29yZENoYW5nZSgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkVGVtcGxhdGUgJiYgdGhpcy5maWVsZFRlbXBsYXRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5maWVsZFRlbXBsYXRlLmZvckVhY2goKGYpID0+IGYudXBkYXRlRmllbGQoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmV2aWV3T3JOZXdSZXNwb25zZVJlY29yZCgpIHtcclxuICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgLy8gYWdnaXVnbmkgbnVvdm9cclxuICAgIGlmICh0aGlzLmZvcm0gIT0gbnVsbCkge1xyXG4gICAgICAvLyBwcmV2aWV3IHBlciBpbCBjb25maWd1cmF0b3JcclxuICAgICAgdGhpcy5maWVsZHNDb25maWcoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtSUQgIT0gbnVsbCkge1xyXG4gICAgICAvLyBwcmV2aWV3IHBlciBhZG1pblxyXG4gICAgICB0aGlzLmdldEZvcm1CeUlEKCk7IC8vIGRlbnRybyBjaGlhbWEgZmllbGRzQ29uZmlnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGVkaXRSZXNwb25zZVJlY29yZCgpIHtcclxuICAgIC8vIG1vZGlpbHTDoCBtb2RpZmljYVxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLnJlY29yZCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAvLyBhbGxvcmEgw6ggdW4gSURcclxuICAgICAgdGhpcy5nZXRSZWNvcmRCeUlEKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpbCByZWNvcmQgdmllbmUgcGFzc2F0byBjb21lIHRhbGVcclxuICAgICAgLy8gKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLkVudElEID0gXCIzXCI7XHJcbiAgICAgIC8vICg8UmVjb3JkPnRoaXMucmVjb3JkKS5WZXJzaW9uO1xyXG4gICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGkgZGF0aSBpbnNlcml0aSBkYWxsJ3V0ZW50ZSB1bmEgdm9sdGEgY29uY2x1c2EgbGEgY29tcGlsYXppb25lIGRlbGxhIGZvcm0uXHJcbiAgICovXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tcmVjb3JkIHNhdmVSZWNvcmRFdmVudCcpXHJcbiAgICBpZiAoZXhpdCkge1xyXG4gICAgICAvLyB0aGlzLnNhdmVSZWNvcmRFdmVudC5lbWl0KG51bGwpO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZChudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuc2F2ZVJlY29yZEV2ZW50LmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZCgoPFJlY29yZD50aGlzLnJlY29yZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBzYWx2YXJlIGlsIHJlY29yZCBhZ2dpdW50byBvIG1vZGlmaWNhdG8uXHJcbiAgICogU2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gdW4gZW5kUG9pbnQgcGVyIGlsIHNhbHZhdGFnZ2lvIHZpZW5lIGVmZmV0dHVhdGEgdW5hIGNoaWFtYXRhIGFsIHNlcnZlciBwYXNzYW5kbyBsJ29nZ2V0byBkYSBzYWx2YXJlXHJcbiAgICogbmVsIGJvZHkgZGVsbGEgY2hpYW1hdGEsIGFsdHJpbWVudGkgc2NhdGVuYSBsJ2V2ZW50byBcInNhdmVSZWNvcmRcIi5cclxuICAgKiBAcGFyYW0gZXZlbnQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBkYSBzYWx2YXJlLlxyXG4gICAqL1xyXG4gIG9uU2F2ZVJlY29yZChldmVudDogUmVjb3JkKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdvblNhdmVSZWNvcmQgLSBldmVudCcsIGV2ZW50KVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnb25TYXZlUmVjb3JkIC0gZm9ybScsIHRoaXMuZm9ybSlcclxuICAgIGlmIChcclxuICAgICAgZXZlbnQgIT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuU2F2ZUVuZFBvaW50XHJcbiAgICApIHtcclxuICAgICAgdmFyIGR5blJlYzogRHluUmVjb3JkID0gbmV3IER5blJlY29yZCgpO1xyXG4gICAgICBkeW5SZWMuSUQgPSBldmVudC5JRCA/PyBudWxsO1xyXG4gICAgICBkeW5SZWMuRW50SUQgPSB0aGlzLmZvcm0uSUQ7XHJcbiAgICAgIGR5blJlYy5WZXJzaW9uID0gdGhpcy5mb3JtLlZlcnNpb247XHJcbiAgICAgIGR5blJlYy51c2VySUQgPSB0aGlzLnVzZXJJRDtcclxuICAgICAgZHluUmVjLlZhbHVlcyA9IGV2ZW50ID8/IG51bGw7XHJcbiAgICAgIGR5blJlYy5IVE1McmVhZGFibGVWYWx1ZXMgPSB0aGlzLmNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhldmVudCk7XHJcblxyXG4gICAgICBpZiAoZXZlbnQuRktfSW5zZXJ0VXNlciA9PSBudWxsKXtcclxuICAgICAgICAvLyBOdW92byBSZWNvcmRcclxuICAgICAgICBkeW5SZWMuRktfSW5zZXJ0VXNlciA9IHRoaXMudXNlcklEO1xyXG4gICAgICAgIGR5blJlYy5JbnNlcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBkeW5SZWMuRktfVXBkYXRlVXNlciA9IHRoaXMudXNlcklEO1xyXG4gICAgICAgIGR5blJlYy5VcGRhdGVEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBNb2RpZmljYSBkZWwgUmVjb3JkXHJcbiAgICAgICAgZHluUmVjLkZLX0luc2VydFVzZXIgPSBldmVudC5GS19JbnNlcnRVc2VyXHJcbiAgICAgICAgZHluUmVjLkluc2VydERhdGUgPSBldmVudC5JbnNlcnREYXRlO1xyXG4gICAgICAgIGR5blJlYy5GS19VcGRhdGVVc2VyID0gdGhpcy51c2VySUQ7XHJcbiAgICAgICAgZHluUmVjLlVwZGF0ZURhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgYWRkaXRpb25hbFBhcmFtcyA9IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcyA9PSBudWxsID8gZXZlbnQuQWRkaXRpb25hbFBhcmFtcyA6IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbFBhcmFtcztcclxuICAgICAgZHluUmVjLkFkZGl0aW9uYWxQYXJhbXMgPSBKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsUGFyYW1zKTtcclxuXHJcbiAgICAgIC8vIHZhciBhZGRpdGlvbmFsSW5mbyA9IHRoaXMuYWRkaXRpb25hbEluZm8gPT0gbnVsbCA/IGV2ZW50LkFkZGl0aW9uYWxJbmZvIDogdGhpcy5hZGRpdGlvbmFsSW5mbztcclxuICAgICAgdmFyIGFkZGl0aW9uYWxJbmZvID0gZXZlbnQuQWRkaXRpb25hbEluZm8gPT0gbnVsbCA/IHRoaXMuY29uZmlndXJhdGlvbnMuYWRkaXRpb25hbEluZm8gOiBldmVudC5BZGRpdGlvbmFsSW5mbztcclxuICAgICAgZHluUmVjLkFkZGl0aW9uYWxJbmZvID0gSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbEluZm8pO1xyXG5cclxuICAgICAgdmFyIGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgUGFyYW1OYW1lOiBcIlJlY29yZFwiLFxyXG4gICAgICAgICAgUGFyYW1WYWx1ZTogZHluUmVjLFxyXG4gICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiSW4gQm9keVwiXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG5cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ29uU2F2ZVJlY29yZCAtIGR5bmFtaWNNb2R1bGVQYXJhbXMnLCBkeW5hbWljTW9kdWxlUGFyYW1zKVxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLlNhdmVFbmRQb2ludCxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJTYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zYXZlUmVjb3JkRXZlbnQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEJ5SURFbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdnZXRGb3JtQnlJRCAtIER5bmFGb3JtJywgdGhpcy5mb3JtKVxyXG4gICAgICAgIHRoaXMuZmllbGRzQ29uZmlnKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnIpID0+IHsgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGNpIGVudHJvIHNvbG8gc2Ugw6ggc3RhdG8gcGFzc2F0byBpbCBwYXJhbWV0cm8gXCJyZWNvcmRcIiBjb21lIHN0cmluZ2FcclxuICBnZXRSZWNvcmRCeUlEKCkge1xyXG4gICAgLy8gcHJlcGFybyBpIGRhdGkgZGVsIHJlY29yZFxyXG4gICAgdmFyIGR5bmFtaWNSZWNvcmRQYXJhbXMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBQYXJhbU5hbWU6IFwiaWRcIixcclxuICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLnJlY29yZCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgIGR5bmFtaWNSZWNvcmRQYXJhbXMsXHJcbiAgICAgIChyZXM6IER5blJlY29yZCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG5cclxuICAgICAgICAoPFJlY29yZD50aGlzLnJlY29yZCkgPSBKU09OLnBhcnNlKHJlcy5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICB0aGlzLnJlY29yZC5JRCA9IHRoaXMuaXNEdXBsaWNhdGUgPyBcIlwiIDogcmVzLklEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkVudElEID0gcmVzLkVudElEO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLnVzZXJJRCA9IHJlcy51c2VySUQ7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuVmVyc2lvbiA9IHJlcy5WZXJzaW9uO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlZhbHVlcyA9IEpTT04ucGFyc2UocmVzLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLkZLX0luc2VydFVzZXIgPSByZXMuRktfSW5zZXJ0VXNlcjtcclxuICAgICAgICB0aGlzLnJlY29yZC5GS19VcGRhdGVVc2VyID0gcmVzLkZLX1VwZGF0ZVVzZXI7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQuSW5zZXJ0RGF0ZSA9IHJlcy5JbnNlcnREYXRlO1xyXG4gICAgICAgIHRoaXMucmVjb3JkLlVwZGF0ZURhdGUgPSByZXMuVXBkYXRlRGF0ZTtcclxuICAgICAgICBcclxuICAgICAgICAvLyB0aGlzLnZpZXdNb2RlID0gRHluYW1pY01vZHVsZVZpZXdNb2RlRW51bS5DT01QSUxFO1xyXG4gICAgICAgIC8vIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldEZvcm1CeUlEYW5kVmVyc2lvbigpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRGb3JtQnlJRGFuZFZlcnNpb24oKSB7XHJcbiAgICAvLyBwcmVwYXJvIGxhIHZlcnNpb25lIGNvcnJldHRhIGRlbCBmb3JtXHJcbiAgICB2YXIgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6ICg8UmVjb3JkPnRoaXMucmVjb3JkKS5FbnRJRCxcclxuICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJWZXJzaW9uXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLlZlcnNpb24sXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldEZvcm1CeUlEYW5kVmVyc2lvbiAtIHRoaXMgcmVjb3JkXCIsIDxSZWNvcmQ+dGhpcy5yZWNvcmQpXHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREFuZFZlcnNpb25FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybSA9IHJlcztcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICAgICAgdGhpcy5yZW9yZGVyRm9ybUZpZWxkcygpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmllbGRzQ29uZmlnKCkge1xyXG4gICAgdGhpcy5jcmVhdGVSZWNvcmRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2UpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwcygpO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZpZWxkc0NvbmZpZyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIG5lbGwnb2dnZXR0byBSZWNvcmQgbGUgcHJvcHJpZXTDoCBtYW5jYW50aSByaXNwZXR0byBhaSBjYW1waSBjaGUgY29tcG9uZ29ubyBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlUmVjb3JkUHJvcGVydGllcygpIHtcclxuICAgIGNvbnN0IHJlY29yZFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyh0aGlzLnJlY29yZCk7XHJcbiAgICB0aGlzLmZvcm0uRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBmaWVsZC5OYW1lKSkge1xyXG4gICAgICAgIHRoaXMucmVjb3JkW2ZpZWxkLk5hbWVdID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5mb3JtLklubmVyRm9ybXMgJiYgdGhpcy5mb3JtLklubmVyRm9ybXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uSW5uZXJGb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyYXlOYW1lOiBzdHJpbmcgPSBmb3JtLk5hbWUuc3BsaXQoXCIgXCIpLmpvaW4oXCJfXCIpO1xyXG4gICAgICAgIGlmICghcmVjb3JkUHJvcGVydGllcy5maW5kKChwKSA9PiBwID09PSBhcnJheU5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFthcnJheU5hbWVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVSZWNvcmRQcm9wZXJ0aWVzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciByaW9yZGluYXJlIGkgY2FtcGkgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlb3JkZXJGb3JtRmllbGRzKCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMgJiYgdGhpcy5mb3JtLkZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZm9ybS5GaWVsZHMuc29ydCgoYSwgYikgPT5cclxuICAgICAgICBhLk9yZGluYWxQb3NpdGlvbiA+IGIuT3JkaW5hbFBvc2l0aW9uID8gMSA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb24gPyAtMSA6IDApO1xyXG4gICAgfVxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlb3JkZXJGb3JtRmllbGRzIC0gZm9ybVwiLCB0aGlzLmZvcm0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgaWwgRm9ybUdyb3VwIGNoZSByYXBwcmVzZW50YSBsYSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtRm9ybSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuQ3JlYXRlRm9ybUZvcm1Hcm91cChcclxuICAgICAgdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgKDxSZWNvcmQ+dGhpcy5yZWNvcmQpLFxyXG4gICAgICB0aGlzLm9ubHlWaWV3XHJcbiAgICApO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUZvcm1Hcm91cCAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGkgZ3J1cHBpIGluIGN1aSByYWdncnVwcGFyZSBpIGNhbXBpIGRlbGxhIGZvcm0gaW4gYmFzZVxyXG4gICAqIGEgY29tZSDDqCBzdGF0YSBjb25maWd1cmF0YSBkYWxsJ3V0ZW50ZS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUZpZWxkR3JvdXBzKCkge1xyXG4gICAgdGhpcy5mb3JtLkZvcm1GaWVsZHNHcm91cHMuc29ydCgoYSwgYikgPT4gYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvbiA/IDEgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uID8gLTEgOiAwKVxyXG4gICAgICAubWFwKChnKSA9PiBnLk5hbWUpXHJcbiAgICAgIC5mb3JFYWNoKChncm91cE5hbWUpID0+IHtcclxuICAgICAgICB0aGlzLmZpZWxkR3JvdXBzW2dyb3VwTmFtZV0gPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkZpZWxkR3JvdXAgPT0gZ3JvdXBOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVGaWVsZEdyb3VwcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgbGEgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyhyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgZGVidWdnZXI7XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIHJlY29yZFwiLCByZWNvcmQpO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIGZvcm1cIiwgdGhpcy5mb3JtKTtcclxuXHJcbiAgICB2YXIgZm9ybW5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgIHRoaXMuZm9ybS5GaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtmb3JtbmFtZXMucHVzaChmaWVsZC5OYW1lKTt9KTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJjcmVhdGVIVE1McmVhZGFibGVWYWx1ZXMgLSBmb3JtIGZpZWxkcyBuYW1lc1wiLCBmb3JtbmFtZXMpO1xyXG5cclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIHZhbHVlcz9cIilcclxuXHJcbiAgICBsZXQgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4gPSB0aGlzLmdldFJlc3BvbnNlVmFsdWVzKHJlY29yZCwgdGhpcy5mb3JtKTtcclxuICAgIFxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIG91dHB1dFZhbHVlc0FycmF5XCIsIG91dHB1dFZhbHVlc0FycmF5KTtcclxuXHJcbiAgICAvLyBhbGVydChcImNvbnRpbnVlIGZvciB0ZW1wbGF0ZXM/XCIpXHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMuZ2V0UmVzcG9uc2VUZW1wbGF0ZShyZWNvcmQsIHRoaXMuZm9ybSk7IC8vIG9nZ2V0dG8gbmVsIHF1YWxlIHZpZW5lIGNvc3RydWl0byBpbCB0ZW1wbGF0ZSBvIGNoZSBwcmVuZGUgaWwgdmFsb3JlIGRhIHVuIHRlbXBsYXRlIGVzdGVybm9cclxuICAgIFxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIHRlbXBsYXRlXCIsIHRlbXBsYXRlKTtcclxuICAgIC8vIGFsZXJ0KFwiY29udGludWUgZm9yIG91dHB1dD9cIilcclxuICAgIGNvbnN0IHJlZ2V4ID0gLyMjKFtcXHddKykjIy9nO1xyXG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5yZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlLCBvdXRwdXRWYWx1ZXNBcnJheSwgcmVnZXgpXHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImNyZWF0ZUhUTUxyZWFkYWJsZVZhbHVlcyAtIG91dHB1dFwiLCBvdXRwdXQpO1xyXG4gICAgLy8gYWxlcnQoXCJjb250aW51ZSBmb3IgZW5kaW5nP1wiKVxyXG4gICAgcmV0dXJuIG91dHB1dDsgLy8gb2dnZXR0byBjaGUgY29udGVycsOgIGwnb3V0cHV0IGVsYWJvcmF0byAgICBcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc3BvbnNlVmFsdWVzKHJlY29yZDogUmVjb3JkLCBmb3JtOiBGb3JtKTogQXJyYXk8YW55PiB7XHJcbiAgICBsZXQgb3V0cHV0VmFsdWVzQXJyYXk6IEFycmF5PGFueT4gPSBbXTsgLy8gYXJyYXkgY29uIGkgdmFsb3JpIGRlbGxlIHJpc3Bvc3RlXHJcbiAgICAvLyg8RHluUmVjb3JkPnRoaXMucmVjb3JkKS5WYWx1ZXMgw6ggbGEgbGlzdGEgZGkgb2dnZXR0aSB7ZmllbGROYW1lOiB2YWxvcmV9XHJcbiAgICAvLyBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKHJlY29yZCkuVmFsdWVzXCIsIHJlY29yZCk7XHJcblxyXG4gICAgZm9ybS5GaWVsZHMuZm9yRWFjaChcclxuICAgICAgKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImdldFJlc3BvbnNlVmFsdWVzIGZpZWxkXCIsIGZpZWxkKTtcclxuICAgICAgICAgIC8vIGxldCBmb3VuZE9iamVjdCA9IHJlY29yZC5maW5kKFxyXG4gICAgICAgICAgLy8gICAob2JqKSA9PiBvYmogPT09IGZpZWxkLk5hbWVcclxuICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICBsZXQgZm91bmRPYmplY3QgPSByZWNvcmRbZmllbGQuTmFtZV07XHJcblxyXG4gICAgICAgICAgLy8gZmFyZSB1biBldmFsIHBlciBwb3BvbGFyZSBpIHZhbHVlUGFpcnMgc2Ugw6ggcHJlc2VudGUgdW5hIGZvcm11bGFcclxuICAgICAgICAgIC8vIHByZW5kZXJlIGxhIGxhYmVsIGNvcnJldHRhXHJcbiAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgLy8gUFJFUEFSTyBJTCBWQUxVRVBBSVJTXHJcbiAgICAgICAgICBzd2l0Y2goZmllbGQuRmllbGRUeXBlKXtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOnsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmIChmaWVsZC5Gb3JtdWxhICE9IG51bGwgJiYgZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWdnaXVuZ28gYSB2YWx1ZXBhaXJzIGkgdmFsb3JpIGNhbGNvbGF0aVxyXG4gICAgICAgICAgICAgICAgLy8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA9ICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPyAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzIDoge307XHJcbiAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZC5Gb3JtdWxhLFxyXG4gICAgICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkyIGluIHRlbXApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmlzTnVtZXJpYyh0ZW1wW2tleTJdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNbTnVtYmVyKGtleTIpXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1trZXkyXSA9IHRlbXBba2V5Ml07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGQuTmFtZV1dO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlycyAhPSBudWxsICYmICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmEgYmVuZSBjb3PDrFxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVTdHJpbmcgIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVN0cmluZyAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2YSBwcmVzYSBsYSBzdHJpZ25hIGUgcmltYXBwYXRhIG5lbCBkaWFyaW9cclxuICAgICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMgPSBHbG9iYWxTZXJ2aWNlLnN0cmluZ1RvVmFsdWVQYWlycygoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5WYWx1ZVN0cmluZyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgaW52ZXJ0ZWQgPSB7fTtcclxuICAgICAgICAgICAgICAvL0dsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzXCIsICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMpO1xyXG4gICAgICAgICAgICAgIC8vIFZhbHVlUGFpcnM6IHtTaTogJ1NpJywgTm86ICdObyd9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQga2V5IGluICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMpIHtcclxuICAgICAgICAgICAgICAgIGludmVydGVkWyg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnNba2V5XV0gPSBrZXk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+ZmllbGQpLlZhbHVlUGFpcnMgPSBpbnZlcnRlZDtcclxuICAgICAgICAgICAgICBpZihyZWNvcmRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiAoPExpc3RWYWx1ZUZpZWxkPmZpZWxkKS5Jc011bHRpQ2hvaWNoZSl7XHJcbiAgICAgICAgICAgICAgICAvLyBjYXNvIE1VTFRJU0NFTFRBXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW2ZpZWxkLk5hbWVdLmZvckVhY2goKGVsZW1lbnQsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1tlbGVtZW50XTtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gaSA9PSByZWNvcmRbZmllbGQuTmFtZV0ubGVuZ3RoIC0xID8gXCJcIjogXCIsIFwiXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5maWVsZCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGQuTmFtZV1dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwib3V0cHV0VmFsdWVzQXJyYXlcIiwgb3V0cHV0VmFsdWVzQXJyYXkpXHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTp7XHJcbiAgICAgICAgICAgICAgaWYoKDxOdW1lcmljRmllbGQ+ZmllbGQpLklzSW50ZWdlcil7XHJcbiAgICAgICAgICAgICAgICBpZigoPE51bWVyaWNGaWVsZD5maWVsZCkuRGVjaW1hbFNlcGFyYXRvciA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSA9IHJlY29yZFtmaWVsZC5OYW1lXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSddOntcclxuICAgICAgICAgICAgICAvLyBNb3N0cm8gbCdJRCBkZWxsJ2ltbWFnaW5lLCBzZSBub24gc2kgdnVvbGUgcXVlc3RvIGNvbXBvcnRhbWVudG8gYmFzdGEgbWV0dGVyZSBpbCBmbGFnIFZpc2libGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcmVjb3JkW2ZpZWxkLk5hbWVdO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFbGVuY28gaW1tYWdpbmknXTp7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgIHJlY29yZFtmaWVsZC5OYW1lXS5mb3JFYWNoKChpbWFnZW9iajogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudEluRm9ybTogRHluQXR0YWNobWVudCA9ICg8SW1hZ2VTZWxlY3RvckZpZWxkPmZpZWxkKS5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBpbWFnZW9iaik7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXSArPSBhdHRhY2htZW50SW5Gb3JtLkJ1dHRvbktleSArIFwiLCBcIjtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB2YXIgcGFydHMgPSBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZC5OYW1lXS5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkLk5hbWVdID0gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSkuam9pbihcIiwgXCIpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9OyAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDp7XHJcbiAgICAgICAgICAgICAgb3V0cHV0VmFsdWVzQXJyYXlbZmllbGQuTmFtZV0gPSByZWNvcmRbZmllbGQuTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG5cclxuICAgIC8vIGZvciAobGV0IGZpZWxkTmFtZSBpbiByZWNvcmQpIHtcclxuICAgIC8vICAgdHJ5IHtcclxuICAgIC8vICAgICAvLyBmaWVsZE5hbWUgw6ggaWwgbm9tZSBkZWwgY2FtcG9cclxuICAgIC8vICAgICAvLyBQUkVQQVJPIFZBUklBQklMSSBWQUxPUkkgQ09SUkVUVElcclxuICAgIC8vICAgICBsZXQgZm91bmRPYmplY3QgPSBmb3JtLkZpZWxkcy5maW5kKFxyXG4gICAgLy8gICAgICAgKG9iaikgPT4ge1xyXG4gICAgLy8gICAgICAgICBpZiAoZmllbGROYW1lID09IFwiSURcIikge1xyXG4gICAgLy8gICAgICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvYmpcIiwgb2JqKTtcclxuICAgIC8vICAgICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZmllbGROYW1lXCIsIGZpZWxkTmFtZSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgIHJldHVybiBvYmouTmFtZSA9PT0gZmllbGROYW1lXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiZmllbGROYW1lXCIsIGZpZWxkTmFtZSk7XHJcbiAgICAvLyAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImZvdW5kT2JqZWN0XCIsIGZvdW5kT2JqZWN0KTtcclxuICAgIC8vICAgICAvLyBnZXN0aXJlIGNhc28gZmllbGR0eXBlIDggW2VsZW5jbyBnZW5lcmljb11cclxuICAgIC8vICAgICAvLyBmYXJlIHVuIGV2YWwgcGVyIHBvcG9sYXJlIGkgdmFsdWVQYWlycyBzZSDDqCBwcmVzZW50ZSB1bmEgZm9ybXVsYVxyXG4gICAgLy8gICAgIC8vIHByZW5kZXJlIGxhIGxhYmVsIGNvcnJldHRhXHJcbiAgICAvLyAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vICAgICBpZiAoZm91bmRPYmplY3QuRmllbGRUeXBlID09IEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl0pIHtcclxuICAgIC8vICAgICAgIGlmIChmb3VuZE9iamVjdC5Gb3JtdWxhKSB7XHJcbiAgICAvLyAgICAgICAgIC8vIGFnZ2l1bmdvIGEgdmFsdWVwYWlycyBpIHZhbG9yaSBjYWxjb2xhdGlcclxuICAgIC8vICAgICAgICAgLy8gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlycyA9IHt9O1xyXG4gICAgLy8gICAgICAgICB2YXIgdGVtcCA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKFxyXG4gICAgLy8gICAgICAgICAgIGZvdW5kT2JqZWN0LkZvcm11bGEsXHJcbiAgICAvLyAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgLy8gICAgICAgICAgIG51bGxcclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInRlbXBcIiwgdGVtcCk7XHJcbiAgICAvLyAgICAgICAgIGZvciAobGV0IGtleTIgaW4gdGVtcCkge1xyXG4gICAgLy8gICAgICAgICAgIGlmIChVdGlsaXR5SGVscGVyU2VydmljZS5pc051bWVyaWModGVtcFtrZXkyXSkpIHtcclxuICAgIC8vICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNbTnVtYmVyKGtleTIpXSA9IHRlbXBba2V5Ml07XHJcbiAgICAvLyAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnNba2V5Ml0gPSB0ZW1wW2tleTJdO1xyXG4gICAgLy8gICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKHJlY29yZCkuVmFsdWVzW2ZpZWxkTmFtZV1cIiwgcmVjb3JkW2ZpZWxkTmFtZV0pO1xyXG4gICAgLy8gICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV1cIiwgKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV0pO1xyXG4gICAgLy8gICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtmaWVsZE5hbWVdID0gKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1tyZWNvcmRbZmllbGROYW1lXV07XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgaW52ZXJ0ZWQgPSB7fTtcclxuICAgIC8vICAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCIoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzXCIsICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMpO1xyXG4gICAgLy8gICAgICAgZm9yIChsZXQga2V5IGluICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMpIHtcclxuICAgIC8vICAgICAgICAgaW52ZXJ0ZWRbKDxMaXN0VmFsdWVGaWVsZD5mb3VuZE9iamVjdCkuVmFsdWVQYWlyc1trZXldXSA9IGtleTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgICg8TGlzdFZhbHVlRmllbGQ+Zm91bmRPYmplY3QpLlZhbHVlUGFpcnMgPSBpbnZlcnRlZDtcclxuICAgIC8vICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSAoPExpc3RWYWx1ZUZpZWxkPmZvdW5kT2JqZWN0KS5WYWx1ZVBhaXJzW3JlY29yZFtmaWVsZE5hbWVdXTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcInJlY29yZFtmaWVsZE5hbWVdXCIsIHJlY29yZFtmaWVsZE5hbWVdKTtcclxuICAgIC8vICAgICAgIG91dHB1dFZhbHVlc0FycmF5W2ZpZWxkTmFtZV0gPSByZWNvcmRbZmllbGROYW1lXTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8vICAgfSBjYXRjaCAoZSkge1xyXG4gICAgLy8gICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJvdXRwdXRWYWx1ZXNBcnJheSAxXCIsIG91dHB1dFZhbHVlc0FycmF5KTtcclxuICAgIC8vIGNhbmNlbGxvIGkgdmFsb3JpIGluZGVmaW5pdGkgbyBudWxsaVxyXG4gICAgZm9yIChjb25zdCBjaGlhdmUgaW4gb3V0cHV0VmFsdWVzQXJyYXkpIHtcclxuICAgICAgaWYgKG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gdW5kZWZpbmVkIHx8IG91dHB1dFZhbHVlc0FycmF5W2NoaWF2ZV0gPT0gbnVsbClcclxuICAgICAgICBvdXRwdXRWYWx1ZXNBcnJheVtjaGlhdmVdID0gJydcclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXRWYWx1ZXNBcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVzcG9uc2VUZW1wbGF0ZShyZWNvcmQ6IFJlY29yZCwgZm9ybTogRm9ybSk6IHN0cmluZyB7XHJcbiAgICAgIGxldCB0ZW1wbGF0ZTogc3RyaW5nID0gJzxkaXYgY2xhc3M9XCJyb3dcIj4nO1xyXG4gICAgLy8gUFJFUEFSTyBPIFBSRU5ETyBMQSBTVFJVVFRVUkEgREEgU1RBTVBBUkVcclxuICAgIGZvcm0uRmllbGRzLmZvckVhY2goKGJhc2VGaWVsZDogQmFzZUZpZWxkKSA9PiB7XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2dldFJlc3Bvc25lVGVtcGxhdGUgLSBwcmUgLSBmaWVsZCcsIGJhc2VGaWVsZClcclxuICAgICAgaWYoYmFzZUZpZWxkLkFuc3dlclN0eWxlID09IG51bGwgfHwgYmFzZUZpZWxkLkFuc3dlclN0eWxlID09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlID0gbmV3IEFuc3dlclN0eWxlKCk7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkNvbFNwYW5TaXplcyA9IGJhc2VGaWVsZC5Db2xTcGFuU2l6ZXM7XHJcbiAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MgPSBiYXNlRmllbGQuRmllbGRzdHlsZUNTUztcclxuICAgICAgICBiYXNlRmllbGQuQW5zd2VyU3R5bGUuTGFiZWxzdHlsZUNTUyA9IGJhc2VGaWVsZC5MYWJlbHN0eWxlQ1NTO1xyXG4gICAgICAgIGlmKGJhc2VGaWVsZC5WaXNpYmxlSWYpe1xyXG4gICAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYShiYXNlRmllbGQuVmlzaWJsZUlmLCByZWNvcmQsIG51bGwpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkluTGlzdFZpZXcgPSBiYXNlRmllbGQuSW5MaXN0VmlldztcclxuICAgICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYgPSBiYXNlRmllbGQuVmlzaWJsZUlmO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBcclxuICAgICAgaWYoYmFzZUZpZWxkLkFuc3dlclN0eWxlLlZpc2libGVJZil7XHJcbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5WaXNpYmxlSWYsIHJlY29yZCwgbnVsbClcclxuICAgICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiRXZhbHVhdGVGaWVsZEZvcm11bGEgLSB2aXNpYmlsaXR5XCIsIHZpc2liaWxpdHkpO1xyXG4gICAgICAgIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3ID0gKHZpc2liaWxpdHkgPT0gdHJ1ZSkgPyB0cnVlIDogZmFsc2UgO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5Jbkxpc3RWaWV3KXtcclxuICAgICAgICB0ZW1wbGF0ZSArPSAnPGRpdiBjbGFzcz1cIicrIHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0RmllbGRBbnN3ZXJTdHlsZUNsYXNzKGJhc2VGaWVsZCkgKycgZC1mbGV4IGZsZXgtY29sdW1uIGR5bmFmb3JtLWFuc3dlci1maWVsZFwiPiAnK1xyXG4gICAgICAgICcgPHNwYW4gY2xhc3M9XCJkeW5hZm9ybS1xdWVzdGlvblwiIHN0eWxlPVwiJyArIGJhc2VGaWVsZC5BbnN3ZXJTdHlsZS5MYWJlbHN0eWxlQ1NTICsgJ1wiPicgKyBiYXNlRmllbGQuRGVzY3JpcHRpb24gKyAnOjwvc3Bhbj4nICsgXHJcbiAgICAgICAgJyA8c3BhbiBjbGFzcz1cImR5bmFmb3JtLXJlc3BvbnNlXCIgc3R5bGU9XCInICsgYmFzZUZpZWxkLkFuc3dlclN0eWxlLkZpZWxkc3R5bGVDU1MgKyAnXCI+ICMjJyArIGJhc2VGaWVsZC5OYW1lICsgJyMjPC9zcGFuPicgKyBcclxuICAgICAgICAnPC9kaXY+IFxcbiAnO1xyXG4gICAgICB9XHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2dldFJlc3Bvc25lVGVtcGxhdGUgLSBwb3N0IC0gZmllbGQnLCBiYXNlRmllbGQpXHJcbiAgICB9KTtcclxuICAgIC8vIChhdHR1YWxtZW50ZSBub24gZXNpc3RlIGlsIGNvbmNldHRvIGRpIHRlbXBhdGUgZGkgb3V0cHV0KVxyXG4gICAgICB0ZW1wbGF0ZSArPSAnPC9kaXY+JztcclxuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXBsYWNlVGVtcGxhdGVQbGFjZWhvbGRlcnNXaXRoVmFsdWVzKHRlbXBsYXRlOiBzdHJpbmcsIG91dHB1dFZhbHVlc0FycmF5OiBBcnJheTxhbnk+LCByZWdleCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZShyZWdleCwgKG1hdGNoLCBncm91cCkgPT4ge1xyXG4gICAgICByZXR1cm4gPHN0cmluZz5vdXRwdXRWYWx1ZXNBcnJheVtncm91cF07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBhZGQtZm9ybS1yZWNvcmQtaGVhZGVyXCIgKm5nSWY9XCJzaG93VGl0bGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7Zm9ybS5OYW1lfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1Gb3JtXCIgY2xhc3M9XCJhZGQtZm9ybS1yZWNvcmQtZm9ybVwiPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBTRU1QTElDRSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5Gb3JtU2NhbGFyVHlwZSA9PSBGb3JtU2NhbGFyVHlwZUVudW0uU2VtcGxpY2VcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZm9ybS5GaWVsZHMgfVwiIGNsYXNzPVwiYWRkLWZvcm0tcmVjb3JkLXNlbXBsaWNlXCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gVklTVUFMSVpaQVpJT05FIEEgU1RFUFBFUiAtLT5cclxuICAgICAgICA8bWF0LWhvcml6b250YWwtc3RlcHBlciBsaW5lYXIgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnQSBzdGVwJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1zdGVwcGVyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc3RlcCAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZm9ybS5Gb3JtRmllbGRzR3JvdXBzOyBsZXQgaSA9IGluZGV4OyBsZXQgZmlyc3QgPSBmaXJzdDsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWRkLWZvcm0tcmVjb3JkLWJ1dHRvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZpcnN0XCIgY2xhc3M9XCJtci0yIHByZXZpb3VzXCIgbWF0LXJhaXNlZC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVjZWRlbnRlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFsYXN0XCIgY2xhc3M9XCJidXR0b24tbmV4dFwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzaXZvXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxhc3QgJiYgc2hvd1NhdmVCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgY2xhc3M9XCJidXR0b24tbmV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L21hdC1zdGVwPlxyXG4gICAgICAgIDwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbiAgICAgICAgPCEtLSBWSVNVQUxJWlpBWklPTkUgQSBUQUIgLS0+XHJcbiAgICAgICAgPG1hdC10YWItZ3JvdXAgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gdGFiJ11cIiBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC10YWJcIj5cclxuICAgICAgICAgICAgPG1hdC10YWIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiIFtsYWJlbF09XCJncm91cC5OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBmaWVsZHM6IGZpZWxkR3JvdXBzW2dyb3VwLk5hbWVdIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICAgICAgICA8IS0tIFZJU1VBTElaWkFaSU9ORSBBRCBBQ0NPUkRJT04gLS0+XHJcbiAgICAgICAgPG1hdC1hY2NvcmRpb24gbXVsdGkgKm5nSWY9XCJmb3JtLkZvcm1TY2FsYXJUeXBlID09IEZvcm1TY2FsYXJUeXBlRW51bVsnSW4gYWNjb3JkaW9uJ11cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImFkZC1mb3JtLXJlY29yZC1hY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGZvcm0uRm9ybUZpZWxkc0dyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z3JvdXAuTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmllbGRUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGZpZWxkczogZmllbGRHcm91cHNbZ3JvdXAuTmFtZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICA8L2Zvcm0+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yIGFkZC1mb3JtLXJlY29yZC1idXR0b25zXCJcclxuICAgICAgICAqbmdJZj1cIihzaG93QmFja0J1dHRvbiB8fCBzaG93U2F2ZUJ1dHRvbikgJiYgZm9ybS5Gb3JtU2NhbGFyVHlwZSAhPSBGb3JtU2NhbGFyVHlwZUVudW1bJ0Egc3RlcCddXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiB0ZXh0LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd0JhY2tCdXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1NhdmVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVPckV4aXRGb3JtKGZhbHNlKVwiIFtkaXNhYmxlZF09XCJmb3JtRm9ybS5pbnZhbGlkIHx8IGZvcm1Gb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICBTYWx2YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcbjwhLS0gVEVNUExBVEUgUEVSIExBIFZJU1VBTElaWkFaSU9ORSBERUkgQ0FNUEkgREVMTEEgRk9STSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlcyBsZXQtZmllbGRzPSdmaWVsZHMnPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkc1wiIFtoaWRkZW5dPVwiIWZpZWxkLkluTGlzdFZpZXdcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ1dGlsaXR5U2VydmljZS5nZXRGaWVsZFN5bGVDbGFzcyhmaWVsZClcIj5cclxuICAgICAgICAgICAgPGR5bmFtaWMtbW9kdWxlLWZpZWxkLWZpeCAjZmllbGRUZW1wbGF0ZSBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW3JlY29yZF09XCJyZWNvcmRcIlxyXG4gICAgICAgICAgICAgICAgKHJlY29yZENoYW5nZSk9XCJvblJlY29yZENoYW5nZSgpXCI+XHJcbiAgICAgICAgICAgIDwvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs
CHANGED
|
@@ -295,24 +295,27 @@ export class ListFormRecordComponent {
|
|
|
295
295
|
break;
|
|
296
296
|
case FieldTypeEnum["Allegato"]:
|
|
297
297
|
case FieldTypeEnum["Immagine"]:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
298
|
+
/*
|
|
299
|
+
column.value = (element: Record) => {
|
|
300
|
+
if (
|
|
301
|
+
(field as AttachmentField).IsMultiAttach ||
|
|
302
|
+
((field as ImageField).AttachDefinition &&
|
|
303
|
+
(field as ImageField).AttachDefinition.IsMultiAttach)
|
|
304
|
+
) {
|
|
305
|
+
return element[field.Name] != null && element[field.Name].length > 0
|
|
306
|
+
? (element[field.Name] as Array<IAttachmentDTO>)
|
|
307
|
+
.map((a) => a.FileName)
|
|
308
|
+
.join(", ")
|
|
309
|
+
: null;
|
|
310
|
+
} else {
|
|
311
|
+
return element[field.Name] != null && element[field.Name].length > 0
|
|
312
|
+
? (element[field.Name] as Array<IAttachmentDTO>)[0].FileName
|
|
313
|
+
: null;
|
|
312
314
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
315
|
+
};
|
|
316
|
+
column.isSortable = false;
|
|
317
|
+
column.isSearchable = false;
|
|
318
|
+
*/
|
|
316
319
|
break;
|
|
317
320
|
case FieldTypeEnum["Elenco generico"]:
|
|
318
321
|
column.value = (element) => {
|
|
@@ -394,4 +397,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
394
397
|
}], onAfterDeleteRecord: [{
|
|
395
398
|
type: Output
|
|
396
399
|
}] } });
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksR0FLYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLGdCQUFnQixFQUNoQixVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFJbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGdEQUFnRCxDQUFDO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7QUFRcEUsTUFBTSxPQUFPLHVCQUF1QjtJQXlCbEMsWUFDVSxvQkFBMEMsRUFDMUMsY0FBaUM7UUFEakMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFwQmxDLFNBQUksR0FBUyxJQUFJLENBQUMsQ0FBQyxxQkFBcUI7UUFDeEMsb0JBQWUsR0FBd0IsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFFMUUsdUJBQWtCLEdBQ2hCLElBQUkseUNBQXlDLEVBQUUsQ0FBQztRQUNsRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBSWpCLFlBQU8sR0FBRyxJQUFJLEtBQUssRUFBZ0IsQ0FBQztRQUNwQyxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRWQsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNoRSx3QkFBbUIsR0FBc0QsSUFBSSxZQUFZLEVBQXlDLENBQUM7UUFFbkksbUJBQWMsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNsRSx3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUs5RSxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFDL0MsMkNBQTJDO1FBQzNDLGFBQWEsQ0FBQyxRQUFRLENBQUMsOENBQThDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTVGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLGFBQWEsQ0FBQyxRQUFRLENBQUMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsMEVBQTBFO1FBQzFFLGtHQUFrRztRQUNsRyx5RUFBeUU7UUFDekUseUJBQXlCO1FBQ3pCLElBQUk7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFhLElBQUksQ0FBQyxNQUFNO1FBQ3hDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDckIsTUFBTSxtQkFBbUIsR0FDdkIsSUFBSSxLQUFLLEVBQXNCLENBQUM7WUFDbEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUN2QixTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsRUFBRTtnQkFDZCxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzthQUN4QyxDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNoRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFTLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQ1osQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxrQkFBa0I7UUFDdEIsSUFBRztZQUNELElBQ0UsSUFBSSxDQUFDLHFCQUFxQjtnQkFDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU87Z0JBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQ3REO2dCQUNBLElBQUksbUJBQW1CLEdBQUc7b0JBQ3RCO3dCQUNFLFNBQVMsRUFBRSxPQUFPO3dCQUNsQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUN4QixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQztxQkFDeEM7aUJBQ0YsQ0FBQztnQkFDSixJQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxJQUFJLElBQUksRUFBQztvQkFDcEMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUN0RCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFxQixFQUFFLEVBQUU7d0JBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7d0JBQ2pELEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDaEIsSUFBSSxNQUFNLEdBQVcsSUFBSSxNQUFNLEVBQUUsQ0FBQzs0QkFDbEMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7NEJBQ3hDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs0QkFDakIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDOzRCQUN2QixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7NEJBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQzs0QkFDekIsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDOzRCQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzFDLENBQUMsQ0FBQyxDQUFDO3dCQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO3dCQUNuQixVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDZixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUN0QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhO29CQUN0QixDQUFDLENBQ0YsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxJQUFJLG1CQUFtQixHQUFHO3dCQUN4Qjs0QkFDRSxTQUFTLEVBQUUsT0FBTzs0QkFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDeEIsU0FBUyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUM7eUJBQ3hDO3dCQUNEOzRCQUNFLFNBQVMsRUFBRSxRQUFROzRCQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNOzRCQUN0QyxTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQzt5QkFDeEM7cUJBQ0YsQ0FBQztvQkFFRixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQy9ELG1CQUFtQixFQUNuQixDQUFDLEdBQXFCLEVBQUUsRUFBRTt3QkFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQzt3QkFDakQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUNoQixJQUFJLE1BQU0sR0FBVyxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUNsQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs0QkFDeEMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDOzRCQUNqQixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7NEJBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQzs0QkFDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDOzRCQUN6QixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7NEJBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDMUMsQ0FBQyxDQUFDLENBQUM7d0JBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7d0JBQ25CLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7d0JBQ3RDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7b0JBQ3RCLENBQUMsQ0FDRixDQUFDO2lCQUVIO2FBQ0Y7U0FDRjtRQUFDLE9BQU0sQ0FBQyxFQUFDO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUE7U0FDOUI7SUFDSCxDQUFDO0lBR0Q7O09BRUc7SUFDSyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiO2dCQUNFLEdBQUcsRUFBRSxRQUFRO2dCQUNiLE9BQU8sRUFBRSxFQUFFO2dCQUNYLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVTtnQkFDM0IsY0FBYyxFQUFFLFdBQVc7Z0JBQzNCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQzFCLE9BQU8sRUFBRSxFQUFFO2FBQ1o7U0FDRixDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtZQUN4QyxJQUFJLENBQUMsT0FBTztpQkFDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO2lCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsTUFBTTtnQkFDWixFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7YUFDdEQsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxPQUFPO2lCQUNULElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUM7aUJBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ1osSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxNQUFNO2dCQUNaLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQzthQUNuRSxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDN0M7Ozs7OzttQkFNTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUMxQyxJQUFJLENBQUMsT0FBTztpQkFDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO2lCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNaLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxRQUFRO2dCQUNkLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUN4RCxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE9BQU87aUJBQ1gsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQztpQkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUU7YUFDekMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssdUJBQXVCO1FBQzdCLGFBQWEsQ0FBQyxRQUFRLENBQUMsNENBQTRDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDdEMsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZTtnQkFDbkMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWU7b0JBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQUMsQ0FDTixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNuQixJQUFJLENBQUMsT0FBTztxQkFDVCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO3FCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtvQkFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUNqQixFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO3dCQUMxQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUM7d0JBQ3BCLE1BQU0sR0FBRyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQzt3QkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDcEIsNkJBQTZCO29CQUMvQixDQUFDO2lCQUNGLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBR0Q7Ozs7OztPQU1HO0lBQ0ssMkJBQTJCO1FBQ2pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0RBQWdELEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBGLElBQUksZ0JBQWtDLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM5QyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0wsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsZ0JBQWdCO2FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ2IsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZTtZQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxlQUFlO2dCQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDLENBQ047YUFDQSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssaUJBQWlCLENBQUMsS0FBZ0I7UUFDeEMsSUFBSSxNQUFNLEdBQWlCLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyRSxRQUFRLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDdkIsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxhQUFhLEdBQUc7b0JBQ3JCLEtBQUssRUFBRSx5Q0FBeUM7b0JBQ2hELElBQUksRUFBRSwyQ0FBMkM7aUJBQ2xELENBQUM7Z0JBQ0YsTUFBTSxDQUFDLE1BQU0sR0FBRztvQkFDZCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtpQkFDeEMsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxhQUFhLENBQUMsY0FBYyxDQUFDO2dCQUNoQyxJQUNHLEtBQW1CLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUNsRTtvQkFDQSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7b0JBQzlCLElBQ0csS0FBbUIsQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEVBQ2pFO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7cUJBQ3BDO3lCQUFNLElBQ0osS0FBbUIsQ0FBQyxVQUFVLElBQUksZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEVBQ2hFO3dCQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUksS0FBbUIsQ0FBQyxVQUFVOzRCQUM3QyxDQUFDLENBQUUsS0FBbUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7NEJBQ3JELENBQUMsQ0FBQyxZQUFZLENBQUM7cUJBQ2xCO2lCQUNGO2dCQUNELE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEMsSUFBSyxLQUFzQixDQUFDLGNBQWMsRUFBRTtvQkFDMUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7b0JBQzlDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBSSxLQUFzQixDQUFDLGNBQWMsQ0FBQztpQkFDbEU7cUJBQU0sSUFBSSxDQUFFLEtBQXNCLENBQUMsU0FBUyxFQUFFO29CQUM3QyxNQUFNLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztpQkFDOUM7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQy9CLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO29CQUNqQyxJQUNHLEtBQXlCLENBQUMsYUFBYTt3QkFDeEMsQ0FBRSxLQUFvQixDQUFDLGdCQUFnQjs0QkFDcEMsS0FBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsRUFDdkQ7d0JBQ0EsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUNsRSxDQUFDLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQTJCO2lDQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7aUNBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQztxQkFDVjt5QkFBTTt3QkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7NEJBQ2xFLENBQUMsQ0FBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFROzRCQUM1RCxDQUFDLENBQUMsSUFBSSxDQUFDO3FCQUNWO2dCQUNILENBQUMsQ0FBQztnQkFDRixNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzVCLE1BQU07WUFDUixLQUFLLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO29CQUNqQyxJQUFLLEtBQXdCLENBQUMsY0FBYyxFQUFFO3dCQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7NEJBQzNELE9BQU8sSUFBSSxDQUFDO3lCQUNiOzZCQUFNOzRCQUNMLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBRSxLQUF3QixDQUFDLFVBQVUsQ0FBQztpQ0FDckQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDWixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDekIsS0FBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ3hDLENBQ0Y7aUNBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNmO3FCQUNGO3lCQUFNO3dCQUNMLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBRSxLQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDM0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNILEtBQXdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQ2pFLENBQUM7cUJBQ0g7Z0JBQ0gsQ0FBQyxDQUFDO2dCQUNGLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsTUFBTTtZQUNSLEtBQUssYUFBYSxDQUFDLFFBQVEsQ0FBQztnQkFDMUIsT0FBTztnQkFDUCxNQUFNO1NBQ1Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWM7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0ssZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFFBQWlCO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE1BQWM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7O3FIQS9aVSx1QkFBdUI7eUdBQXZCLHVCQUF1QixnaEJDaERwQyxrekRBMENxRTs0RkRNeEQsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjsySUFNbkIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQU11QyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS2pDLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIMm1ybVOZ09uQ2hhbmdlc0ZlYXR1cmUsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgSUF0dGFjaG1lbnREVE8gfSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtYXR0YWNobWVudHNcIjtcclxuaW1wb3J0IHtcclxuICBDZWxsQWxpZ25tZW50RW51bSxcclxuICBDb25maWdDb2x1bW4sXHJcbiAgRXFwVGFibGVDb21wb25lbnQsXHJcbiAgTnVtYmVyQ29sdW1uUGlwZSxcclxuICBUeXBlQ29sdW1uLFxyXG59IGZyb20gXCJAZXFwcm9qZWN0L2VxcC10YWJsZVwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IEJhc2VGaWVsZCwgRmllbGRUeXBlRW51bSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IER5blJlY29yZCwgUmVjb3JkLCBSZWNvcmRCdXR0b24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9hdHRhY2htZW50RmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICBEYXRlRmllbGQsXHJcbiAgRGF0ZVRpbWVUeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgSW1hZ2VGaWVsZCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlzdFZhbHVlRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBOdW1lcmljRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHRcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Q29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRW5kUG9pbnRDb25maWd1cmF0aW9uLFxyXG4gIEVuZFBvaW50RGF0YVBhcmFtcyxcclxuICBQYXJhbVR5cGVFbnVtLFxyXG59IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsXCI7XHJcbmltcG9ydCB7IEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4vLi4vLi4vLi4vLi4vc2VydmljZXMvZXFwLWR5bmFtaWMtbW9kdWxlLWRpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2VcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaXN0LWZvcm0tcmVjb3JkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwibGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9saXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdEZvcm1SZWNvcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyYXRpb25zOiBEeW5hbWljTW9kdWxlTGlzdENvbmZpZztcclxuICBASW5wdXQoKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuXHJcbiAgLy8gbCd1bmEgbyBsJ2FsdHJhIHBlciBkdWUgbW9kYWxpdMOgIGQndXNvXHJcbiAgQElucHV0KCkgZm9ybUlEOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybSA9IG51bGw7IC8vIGJvaCBtYSBjJ2VyYSBwcmltYVxyXG4gIEBJbnB1dCgpIGV4dGVybmFsQnV0dG9uczogQXJyYXk8UmVjb3JkQnV0dG9uPiA9IG5ldyBBcnJheTxSZWNvcmRCdXR0b24+KCk7XHJcblxyXG4gIGRlZmF1bHRMaXN0QWN0aW9uczogRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgPVxyXG4gICAgbmV3IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0KCk7XHJcbiAgc2hvd1RpdGxlID0gdHJ1ZTtcclxuICAvLyB2YWx1ZXM6IEFycmF5PFJlY29yZD47XHJcbiAgQFZpZXdDaGlsZChcInRhYmxlUmVjb3Jkc1wiLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZVJlY29yZHM6IEVxcFRhYmxlQ29tcG9uZW50O1xyXG5cclxuICBjb2x1bW5zID0gbmV3IEFycmF5PENvbmZpZ0NvbHVtbj4oKTtcclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uVmlld1JlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb25BZGRWaWV3RWRpdFJlY29yZDogRXZlbnRFbWl0dGVyPHtyZWNvcmQ6IFJlY29yZDtvbmx5VmlldzogYm9vbGVhbjt9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyByZWNvcmQ6IFJlY29yZDsgb25seVZpZXc6IGJvb2xlYW4gfT4oKTtcclxuICAgIFxyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZVJlY29yZDogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHsgICAgXHJcbiAgICB0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnMuZGVmYXVsdExpc3RBY3Rpb25zO1xyXG4gICAgdGhpcy5zaG93VGl0bGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLnNob3dUaXRsZTtcclxuICAgIC8vIHRoaXMudmFsdWVzID0gdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXNcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBuZ09uSW5pdCAtIGNvbmZpZ3VyYXRpb25zJywgdGhpcy5jb25maWd1cmF0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtQnlJRCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNoYW5nZXMnLCBjaGFuZ2VzKTtcclxuICAgIC8vIFNlIHZpZW5lIG1vZGlmaWNhdG8gaWwgdmFsb3JlIGRpIFwibmdNb2RlbElucHV0XCIgYWxsb3JhIGFnZ2lvcm5hIGwnaW5wdXRcclxuICAgIC8vIGlmIChjaGFuZ2VzWydjb25maWd1cmF0aW9ucyddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydjb25maWd1cmF0aW9ucyddLmZpcnN0Q2hhbmdlID09IGZhbHNlKSB7XHJcbiAgICAvLyAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gY2hhbmdlc1snY29uZmlndXJhdGlvbnMnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAvLyAgIHRoaXMucmVsb2FkVGFibGVzKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRGb3JtQnlJRChpZDogc3RyaW5nID0gdGhpcy5mb3JtSUQpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBnZXRGb3JtQnlJRCcsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9ybSA9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICAgIG5ldyBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+KCk7XHJcbiAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMucHVzaCh7XHJcbiAgICAgICAgUGFyYW1OYW1lOiBcImlkXCIsXHJcbiAgICAgICAgUGFyYW1WYWx1ZTogaWQsXHJcbiAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgIH0pO1xyXG4gICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5Gb3Jtcy5HZXRCeUlERW5kUG9pbnQsXHJcbiAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAocmVzOiBGb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0gPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHt9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNvbHVtbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmVjdXBlcmFyZSB0dXR0aSBpIHJlY29yZCBzYWx2YXRpIHBlciB1bmEgcGFydGljb2xhcmUgRm9ybS5cclxuICAgKiBMYSBjaGlhbWF0YSB2aWVuZSBlZmZldHR1YXRhIHNvbG8gc2Ugw6ggc3RhdG8gY29uZmlndXJhdG8gbCdlbmRQb2ludCBkYSB1c2FyZS5cclxuICAgKiBMYSByaXNwb3N0YSBkZWxsYSBjaGlhbWF0YSBkZXZlIGVzc2VyZSB1biBhcnJheSBkaSBvZ2dldHRpIGRpIHRpcG8gXCJEeW5SZWNvcmRcIlxyXG4gICAqIGEgcGFydGlyZSBkYWkgcXVhbGkgdmVuZ29ubyByaWNyZWF0aSBpIFJlY29yZCB1c2F0aSBuZWwgY2xpZW50LlxyXG4gICAqL1xyXG4gIGFzeW5jIGdldFJlY29yZHNCeUZvcm1JRCgpIHtcclxuICAgIHRyeXtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3JkcyAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludFxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgZHluYW1pY01vZHVsZVBhcmFtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFBhcmFtTmFtZTogXCJFbnRJRFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuZm9ybS5JRCxcclxuICAgICAgICAgICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgaWYodGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQgPT0gbnVsbCl7ICAgICAgICAgIFxyXG4gICAgICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMuR2V0QnlGb3JtSURFbmRQb2ludCxcclxuICAgICAgICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgICAgICAgKHJlczogQXJyYXk8RHluUmVjb3JkPikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzID0gbmV3IEFycmF5PFJlY29yZD4oKTtcclxuICAgICAgICAgICAgICByZXMuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRtcFJlYzogUmVjb3JkID0gbmV3IFJlY29yZCgpO1xyXG4gICAgICAgICAgICAgICAgdG1wUmVjID0gSlNPTi5wYXJzZShyLlNlcmlhbGl6ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgdG1wUmVjLklEID0gci5JRDtcclxuICAgICAgICAgICAgICAgIHRtcFJlYy5FbnRJRCA9IHIuRW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMuVmVyc2lvbiA9IHIuVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIHRtcFJlYy51c2VySUQgPSByLnVzZXJJRDtcclxuICAgICAgICAgICAgICAgIHRtcFJlYy5BbnN3ZXJEYXRlID0gci5BbnN3ZXJEYXRlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMucHVzaCh0bXBSZWMpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7ICAgICAgICAgIFxyXG4gICAgICAgICAgbGV0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiVXNlcklEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5jb25maWd1cmF0aW9ucy51c2VySUQsXHJcbiAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEFsbEJ5RW50QW5kVXNlcklERW5kUG9pbnQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICAgICAgICAgICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgICAgICAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHIuQW5zd2VyRGF0ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KChfKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9LCAwKTsgLy8gcmVmcmVzaCB1aVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gIFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaChlKXtcclxuICAgICAgY29uc29sZS5lcnJvcignZXhjZXB0aW9uJywgZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY29uZmlndXJhcmUgbGUgY29sb25uZSBkZWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGRpc3BsYXk6IFwiXCIsXHJcbiAgICAgICAgdHlwZTogVHlwZUNvbHVtbi5NZW51QWN0aW9uLFxyXG4gICAgICAgIGJ1dHRvbk1lbnVJY29uOiBcIm1vcmVfdmVydFwiLFxyXG4gICAgICAgIHN0eWxlczogeyBmbGV4OiBcIjAgMCA2JVwiIH0sXHJcbiAgICAgICAgYWN0aW9uczogW10sXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy52aWV3ID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJWaXN1YWxpenphXCIsXHJcbiAgICAgICAgICBpY29uOiBcImluZm9cIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3UmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGVmYXVsdExpc3RBY3Rpb25zLmVkaXQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIk1vZGlmaWNhXCIsXHJcbiAgICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy52aWV3T3JFZGl0UmVjb3JkKGVsZW1lbnQsIGZhbHNlKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kdXBsaWNhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICAvKnRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiRHVwbGljYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcclxuICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4gdGhpcy5kdXBsaWNhdGVSZWNvcmQoZWxlbWVudCksXHJcbiAgICAgICAgfSk7Ki9cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5kZWxldGUgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIkVsaW1pbmFcIixcclxuICAgICAgICAgIGljb246IFwiZGVsZXRlXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZGVsZXRlUmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZXh0ZXJuYWxCdXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICBuYW1lOiBidXR0b24udGV4dCxcclxuICAgICAgICBpY29uOiBidXR0b24uaWNvbixcclxuICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IGJ1dHRvbi5mbigpLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKTtcclxuICAgIHRoaXMuY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCk7XHJcbiAgICB0aGlzLmdldFJlY29yZHNCeUZvcm1JRCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpdW5nZXJlIG5lbGxhIGNvbG9ubmEgXCJhY3Rpb25cIiBkZWxsYSBlcXAtdGFibGUgbGUgYXppb25pIHN1aSByZWNvcmRcclxuICAgKiBkZWZpbml0ZSBkYWxsJ3V0ZW50ZSBhbGwnaW50ZXJubyBkZWxsYSBGb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMoKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gY3JlYXRlQWRkaXRpb25hbEFjdGlvbnMnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkICYmIHRoaXMuZm9ybS5BY3Rpb25zT25SZWNvcmQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gLTFcclxuICAgICAgICAgIDogMFxyXG4gICAgICApLmZvckVhY2goKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IGFjdGlvbi5OYW1lLFxyXG4gICAgICAgICAgICBpY29uOiBhY3Rpb24uSWNvbixcclxuICAgICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjID0gZWxlbWVudDtcclxuICAgICAgICAgICAgICBjb25zdCBjdHggPSBVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0O1xyXG4gICAgICAgICAgICAgIGV2YWwoYWN0aW9uLkFjdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gVE9ETzogc2FsdmFyZSBsZSBtb2RpZmljaGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgY3JlYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRlbGxlIGNvbG9ubmUgcGVyIGxhIGVxcC10YWJsZS5cclxuICAgKiBJbmRpdmlkdWEgaSBCYXNlRmllbGQgZGEgbW9zdHJhcmUgZSBsaSB1c2EgcGVyIGNyZWFyZSBsZSBDb25maWdDb2x1bW4uXHJcbiAgICogTGUgY29sb25uZSB2ZW5nb25vIGNyZWF0ZSBwZXIgaSBCYXNlRmllbGQgY29uIGlsIGZsYWcgSW5MaXN0VmlldyBhIFRSVUVcclxuICAgKiBvcHB1cmUsIG5lbCBjYXNvIG5vbiBzaWFubyBzdGF0aSBzcGVjaWZpY2F0aSBpIGNhbXBpIGRhIHZpc3VhbGl6emFyZSxcclxuICAgKiBzZWxlemlvbmEgaSBwcmltaSA2LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1uc0Zyb21Gb3JtRmllbGRzKCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcycsIHRoaXMuZm9ybSk7XHJcblxyXG4gICAgdmFyIGZpZWxkc0ZvckNvbHVtbnM6IEFycmF5PEJhc2VGaWVsZD47XHJcbiAgICBpZiAodGhpcy5mb3JtLkZpZWxkcy5maW5kKChmKSA9PiBmLkluTGlzdFZpZXcpKSB7XHJcbiAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5Jbkxpc3RWaWV3KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpZWxkc0ZvckNvbHVtbnMgPSB0aGlzLmZvcm0uRmllbGRzLmZpbHRlcigoZikgPT4gZi5PcmRpbmFsUG9zaXRpb24gPCA2KTtcclxuICAgIH1cclxuICAgIGZpZWxkc0ZvckNvbHVtbnNcclxuICAgICAgLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgYS5PcmRpbmFsUG9zaXRpb24gPiBiLk9yZGluYWxQb3NpdGlvblxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IGIuT3JkaW5hbFBvc2l0aW9uID4gYS5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gLTFcclxuICAgICAgICAgIDogMFxyXG4gICAgICApXHJcbiAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKHRoaXMuY3JlYXRlRmllbGRDb2x1bW4oZmllbGQpKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsJ29nZ2V0dG8gQ29uZmlndXJlQ29sdW1uIGNoZSByYXBwcmVzZW50YSBpbCBCYXNlRmllbGQgcGFzc2F0byBpbiBpbnB1dC5cclxuICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGxhIGNvbG9ubmEgbmVsbGEgZXFwLXRhYmxlXHJcbiAgICogQHJldHVybnMgUmVzdGl0dWlzY2UgdW5hIENvbmZpZ0NvbHVtbiBwZXIgbGEgZXFwLXRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWVsZENvbHVtbihmaWVsZDogQmFzZUZpZWxkKTogQ29uZmlnQ29sdW1uIHtcclxuICAgIHZhciBjb2x1bW46IENvbmZpZ0NvbHVtbiA9IHsga2V5OiBmaWVsZC5OYW1lLCBkaXNwbGF5OiBmaWVsZC5MYWJlbCB9O1xyXG4gICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQm9vbGVhbm9cIl06XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkJvb2xlYW47XHJcbiAgICAgICAgY29sdW1uLmJvb2xlYW5WYWx1ZXMgPSB7XHJcbiAgICAgICAgICBmYWxzZTogJzxpIGNsYXNzPVwiZmEgZmEtdGltZXMgZXJyb3ItY29sb3JcIj48L2k+JyxcclxuICAgICAgICAgIHRydWU6ICc8aSBjbGFzcz1cImZhIGZhLWNoZWNrIHN1Y2Nlc3MtY29sb3JcIj48L2k+JyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5zdHlsZXMgPSB7XHJcbiAgICAgICAgICBmbGV4OiBcIjAgMCA3JVwiLFxyXG4gICAgICAgICAgY2VsbEFsaWdubWVudDogQ2VsbEFsaWdubWVudEVudW0uQ0VOVEVSLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkRhdGEgZS9vIG9yYVwiXTpcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlICE9IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIG9yYXJpb1wiXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPSBUeXBlQ29sdW1uLkRhdGU7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBEYXRlRmllbGQpLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gXCJkZC9NTS95eXl5IEhIOm1tXCI7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl1cclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb2x1bW4uZm9ybWF0ID0gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdFxyXG4gICAgICAgICAgICAgID8gKGZpZWxkIGFzIERhdGVGaWVsZCkuRGF0ZUZvcm1hdC5yZXBsYWNlKFwiRERcIiwgXCJkZFwiKVxyXG4gICAgICAgICAgICAgIDogXCJkZC9NTS95eXl5XCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJDYW1wbyBudW1lcmljb1wiXTpcclxuICAgICAgICBpZiAoKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2wpIHtcclxuICAgICAgICAgIGNvbHVtbi5udW1iZXJQaXBlID0gTnVtYmVyQ29sdW1uUGlwZS5DVVJSRU5DWTtcclxuICAgICAgICAgIGNvbHVtbi5jdXJyZW5jeVBpcGVDb2RlID0gKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuQ3VycmVuY3lTeW1ib2w7XHJcbiAgICAgICAgfSBlbHNlIGlmICghKGZpZWxkIGFzIE51bWVyaWNGaWVsZCkuSXNJbnRlZ2VyKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuREVDSU1BTDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZVwiXTpcclxuICAgICAgICBjb2x1bW4udmFsdWUgPSAoZWxlbWVudDogUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uICYmXHJcbiAgICAgICAgICAgICAgKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24uSXNNdWx0aUF0dGFjaClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudFtmaWVsZC5OYW1lXSAhPSBudWxsICYmIGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgID8gKGVsZW1lbnRbZmllbGQuTmFtZV0gYXMgQXJyYXk8SUF0dGFjaG1lbnREVE8+KVxyXG4gICAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLkZpbGVOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpXHJcbiAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRbZmllbGQuTmFtZV0gIT0gbnVsbCAmJiBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICA/IChlbGVtZW50W2ZpZWxkLk5hbWVdIGFzIEFycmF5PElBdHRhY2htZW50RFRPPilbMF0uRmlsZU5hbWVcclxuICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKSB7XHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudFtmaWVsZC5OYW1lXSB8fCBlbGVtZW50W2ZpZWxkLk5hbWVdLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGspID0+XHJcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRbZmllbGQuTmFtZV0uaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzW2tdXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cygoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnMpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGspID0+XHJcbiAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba10gPT0gZWxlbWVudFtmaWVsZC5OYW1lXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sdW1uLmlzU29ydGFibGUgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uaXNTZWFyY2hhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkxvb2t1cFwiXTpcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sdW1uO1xyXG4gIH1cclxuXHJcbiAgdmlld1JlY29yZChyZWNvcmQ6IFJlY29yZCl7XHJcbiAgICB0aGlzLm9uVmlld1JlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2NhdGVuYSBsJ2V2ZW50byBkaSBPdXRwdXQgcGVyIG1vc3RyYXJlIG8gbW9kaWZpY2FyZSBpbCByZWNvcmRcclxuICAgKiBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmQgZGEgdmlzdWFsaXp6YXJlIG8gbW9kaWZpY2FyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgdmllbmUgbW9zdHJhdG8gaWwgY29tcG9uZW50ZSBhZGQtZm9ybS1yZWNvcmQgaW4gc29sYSBsZXR0dXJhLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgdmlld09yRWRpdFJlY29yZChyZWNvcmQ6IFJlY29yZCwgb25seVZpZXc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMub25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KHsgcmVjb3JkLCBvbmx5VmlldyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZWxpbWluYXJlIHVuIHJlY29yZCBkYWxsYSBsaXN0YS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSBlbGltaW5hcmUgc2VsZXppb25hdG8gc3VsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVJlY29yZChyZWNvcmQ6IFJlY29yZCkge1xyXG4gICAgdGhpcy5vbkRlbGV0ZVJlY29yZC5lbWl0KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJpY2FyaWNhcmUgaSBkYXRpIGRlbGxhIGVxcC10YWJsZS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlbG9hZFRhYmxlcygpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlUmVjb3Jkcykge1xyXG4gICAgICB0aGlzLnRhYmxlUmVjb3Jkcy5yZWxvYWREYXRhdGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG1hdC1jYXJkIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZFwiPlxyXG4gIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgIDxtYXQtY2FyZC10aXRsZSAqbmdJZj1cImxvYWRlciAmJiBzaG93VGl0bGVcIj5FbGVuY28ge3sgZm9ybS5OYW1lIH19PC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwhLS0gPG1hdC1jYXJkLXN1YnRpdGxlPlN0YXJ0PC9tYXQtY2FyZC1zdWJ0aXRsZT4gLS0+XHJcbiAgICA8bWF0LWNhcmQtYWN0aW9ucz5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIj5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8IS0tIDxidXR0b24gbWF0LWJ1dHRvbj5MSUtFPC9idXR0b24+IC0tPlxyXG4gICAgICA8IS0tIDxidXR0b24gbWF0LWJ1dHRvbj5TSEFSRTwvYnV0dG9uPiAtLT5cclxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cclxuICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8ZXFwLXRhYmxlIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJsb2FkZXIgJiYgY29uZmlndXJhdGlvbnMudmFsdWVzXCJcclxuICAgICAgW2RhdGFdPVwiY29uZmlndXJhdGlvbnMudmFsdWVzXCIgW2NvbHVtbnNdPVwiY29sdW1uc1wiPjwvZXFwLXRhYmxlPlxyXG4gIDwvbWF0LWNhcmQtY29udGVudD5cclxuICA8bWF0LWNhcmQtZm9vdGVyPlxyXG4gICAgPCEtLSA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj4gLS0+XHJcbiAgPC9tYXQtY2FyZC1mb290ZXI+XHJcbjwvbWF0LWNhcmQ+XHJcblxyXG5cclxuXHJcbjwhLS0gPGRpdiBjbGFzcz1cInJvdyBlcXAtZHluYW1pYy1tb2R1bGUtdGl0bGUgbGlzdC1mb3JtLXJlY29yZC1oZWFkZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgIDxoNCAqbmdJZj1cInNob3dUaXRsZVwiPlxyXG4gICAgICA8Yj5FbGVuY28ge3sgZm9ybS5OYW1lIH19PC9iPlxyXG4gICAgPC9oND5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgdGV4dC1yaWdodFwiICpuZ0lmPVwiZGVmYXVsdExpc3RBY3Rpb25zLmFkZFwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAoY2xpY2spPVwib25BZGRWaWV3RWRpdFJlY29yZC5lbWl0KG51bGwpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4XCI+QWdnaXVuZ2k8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZXFwLXRhYmxlIGNsYXNzPVwibGlzdC1mb3JtLXJlY29yZC10YWJsZVwiICN0YWJsZVJlY29yZHMgKm5nSWY9XCJsb2FkZXIgJiYgY29uZmlndXJhdGlvbnMudmFsdWVzXCJcclxuICBbZGF0YV09XCJjb25maWd1cmF0aW9ucy52YWx1ZXNcIiBbY29sdW1uc109XCJjb2x1bW5zXCI+PC9lcXAtdGFibGU+IC0tPiJdfQ==
|
|
400
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2xpc3QtZm9ybS1yZWNvcmQvbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksR0FLYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsaUJBQWlCLEVBR2pCLGdCQUFnQixFQUNoQixVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWEsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFhLE1BQU0sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRixPQUFPLEVBRUwsZ0JBQWdCLEdBQ2pCLE1BQU0sMkNBQTJDLENBQUM7QUFJbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFFekgsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGdEQUFnRCxDQUFDO0FBRXhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7QUFRcEUsTUFBTSxPQUFPLHVCQUF1QjtJQXlCbEMsWUFDVSxvQkFBMEMsRUFDMUMs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NEZETXhELHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7MklBTW5CLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFNdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtqQyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICDJtcm1TmdPbkNoYW5nZXNGZWF0dXJlLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IElBdHRhY2htZW50RFRPIH0gZnJvbSBcIkBlcXByb2plY3QvZXFwLWF0dGFjaG1lbnRzXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbEFsaWdubWVudEVudW0sXHJcbiAgQ29uZmlnQ29sdW1uLFxyXG4gIEVxcFRhYmxlQ29tcG9uZW50LFxyXG4gIE51bWJlckNvbHVtblBpcGUsXHJcbiAgVHlwZUNvbHVtbixcclxufSBmcm9tIFwiQGVxcHJvamVjdC9lcXAtdGFibGVcIjtcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbFwiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBEeW5SZWNvcmQsIFJlY29yZCwgUmVjb3JkQnV0dG9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcbiAgRGF0ZUZpZWxkLFxyXG4gIERhdGVUaW1lVHlwZUVudW0sXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlRmllbGQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXNcIjtcclxuaW1wb3J0IHsgRHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2R5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0XCI7XHJcbmltcG9ydCB7IER5bmFtaWNNb2R1bGVMaXN0Q29uZmlnIH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbFwiO1xyXG5pbXBvcnQge1xyXG4gIEVuZFBvaW50Q29uZmlndXJhdGlvbixcclxuICBFbmRQb2ludERhdGFQYXJhbXMsXHJcbiAgUGFyYW1UeXBlRW51bSxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbFwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGlzdC1mb3JtLXJlY29yZFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcImxpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vbGlzdC1mb3JtLXJlY29yZC5jb21wb25lbnQuc2Nzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RGb3JtUmVjb3JkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uczogRHluYW1pY01vZHVsZUxpc3RDb25maWc7XHJcbiAgQElucHV0KCkgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb247XHJcblxyXG4gIC8vIGwndW5hIG8gbCdhbHRyYSBwZXIgZHVlIG1vZGFsaXTDoCBkJ3Vzb1xyXG4gIEBJbnB1dCgpIGZvcm1JRDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm0gPSBudWxsOyAvLyBib2ggbWEgYydlcmEgcHJpbWFcclxuICBASW5wdXQoKSBleHRlcm5hbEJ1dHRvbnM6IEFycmF5PFJlY29yZEJ1dHRvbj4gPSBuZXcgQXJyYXk8UmVjb3JkQnV0dG9uPigpO1xyXG5cclxuICBkZWZhdWx0TGlzdEFjdGlvbnM6IER5bmFtaWNNb2R1bGVMaXN0Rm9ybVJlY29yZEFjdGlvbnNEZWZhdWx0ID1cclxuICAgIG5ldyBEeW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCgpO1xyXG4gIHNob3dUaXRsZSA9IHRydWU7XHJcbiAgLy8gdmFsdWVzOiBBcnJheTxSZWNvcmQ+O1xyXG4gIEBWaWV3Q2hpbGQoXCJ0YWJsZVJlY29yZHNcIiwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGVSZWNvcmRzOiBFcXBUYWJsZUNvbXBvbmVudDtcclxuXHJcbiAgY29sdW1ucyA9IG5ldyBBcnJheTxDb25maWdDb2x1bW4+KCk7XHJcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBvblZpZXdSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uQWRkVmlld0VkaXRSZWNvcmQ6IEV2ZW50RW1pdHRlcjx7cmVjb3JkOiBSZWNvcmQ7b25seVZpZXc6IGJvb2xlYW47fT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgcmVjb3JkOiBSZWNvcmQ7IG9ubHlWaWV3OiBib29sZWFuIH0+KCk7XHJcbiAgICBcclxuICBAT3V0cHV0KCkgb25EZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uQWZ0ZXJEZWxldGVSZWNvcmQ6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7ICAgIFxyXG4gICAgdGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMgPSB0aGlzLmNvbmZpZ3VyYXRpb25zLmRlZmF1bHRMaXN0QWN0aW9ucztcclxuICAgIHRoaXMuc2hvd1RpdGxlID0gdGhpcy5jb25maWd1cmF0aW9ucy5zaG93VGl0bGU7XHJcbiAgICAvLyB0aGlzLnZhbHVlcyA9IHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gbmdPbkluaXQgLSBjb25maWd1cmF0aW9ucycsIHRoaXMuY29uZmlndXJhdGlvbnMpO1xyXG5cclxuICAgIHRoaXMuZ2V0Rm9ybUJ5SUQoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjaGFuZ2VzJywgY2hhbmdlcyk7XHJcbiAgICAvLyBTZSB2aWVuZSBtb2RpZmljYXRvIGlsIHZhbG9yZSBkaSBcIm5nTW9kZWxJbnB1dFwiIGFsbG9yYSBhZ2dpb3JuYSBsJ2lucHV0XHJcbiAgICAvLyBpZiAoY2hhbmdlc1snY29uZmlndXJhdGlvbnMnXSAhPSB1bmRlZmluZWQgJiYgY2hhbmdlc1snY29uZmlndXJhdGlvbnMnXS5maXJzdENoYW5nZSA9PSBmYWxzZSkge1xyXG4gICAgLy8gICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IGNoYW5nZXNbJ2NvbmZpZ3VyYXRpb25zJ10uY3VycmVudFZhbHVlO1xyXG4gICAgLy8gICB0aGlzLnJlbG9hZFRhYmxlcygpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Rm9ybUJ5SUQoaWQ6IHN0cmluZyA9IHRoaXMuZm9ybUlEKSB7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdsaXN0LWZvcm0tcmVjb3JkIC0gZ2V0Rm9ybUJ5SUQnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID1cclxuICAgICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLnB1c2goe1xyXG4gICAgICAgIFBhcmFtTmFtZTogXCJpZFwiLFxyXG4gICAgICAgIFBhcmFtVmFsdWU6IGlkLFxyXG4gICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICB9KTtcclxuICAgICAgYXdhaXQgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMuR2V0QnlJREVuZFBvaW50LFxyXG4gICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgKHJlczogRm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7fVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25maWd1cmVDb2x1bW5zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIHJlY3VwZXJhcmUgdHV0dGkgaSByZWNvcmQgc2FsdmF0aSBwZXIgdW5hIHBhcnRpY29sYXJlIEZvcm0uXHJcbiAgICogTGEgY2hpYW1hdGEgdmllbmUgZWZmZXR0dWF0YSBzb2xvIHNlIMOoIHN0YXRvIGNvbmZpZ3VyYXRvIGwnZW5kUG9pbnQgZGEgdXNhcmUuXHJcbiAgICogTGEgcmlzcG9zdGEgZGVsbGEgY2hpYW1hdGEgZGV2ZSBlc3NlcmUgdW4gYXJyYXkgZGkgb2dnZXR0aSBkaSB0aXBvIFwiRHluUmVjb3JkXCJcclxuICAgKiBhIHBhcnRpcmUgZGFpIHF1YWxpIHZlbmdvbm8gcmljcmVhdGkgaSBSZWNvcmQgdXNhdGkgbmVsIGNsaWVudC5cclxuICAgKi9cclxuICBhc3luYyBnZXRSZWNvcmRzQnlGb3JtSUQoKSB7XHJcbiAgICB0cnl7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbiAmJlxyXG4gICAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLlJlY29yZHMgJiZcclxuICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGR5bmFtaWNNb2R1bGVQYXJhbXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBQYXJhbU5hbWU6IFwiRW50SURcIixcclxuICAgICAgICAgICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uSUQsXHJcbiAgICAgICAgICAgICAgUGFyYW1UeXBlOiBQYXJhbVR5cGVFbnVtW1wiUXVlcnkgcGFyYW1cIl0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgIGlmKHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklEID09IG51bGwpeyAgICAgICAgICBcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXRpbGl0eUhlbHBlclNlcnZpY2UuUnVuRW5kUG9pbnRDYWxsKFxyXG4gICAgICAgICAgICB0aGlzLmVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzLkdldEJ5Rm9ybUlERW5kUG9pbnQsXHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMsXHJcbiAgICAgICAgICAgIChyZXM6IEFycmF5PER5blJlY29yZD4pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcyA9IG5ldyBBcnJheTxSZWNvcmQ+KCk7XHJcbiAgICAgICAgICAgICAgcmVzLmZvckVhY2goKHIpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciB0bXBSZWM6IFJlY29yZCA9IG5ldyBSZWNvcmQoKTtcclxuICAgICAgICAgICAgICAgIHRtcFJlYyA9IEpTT04ucGFyc2Uoci5TZXJpYWxpemVkVmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIHRtcFJlYy5JRCA9IHIuSUQ7XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMuRW50SUQgPSByLkVudElEO1xyXG4gICAgICAgICAgICAgICAgdG1wUmVjLlZlcnNpb24gPSByLlZlcnNpb247XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMudXNlcklEID0gci51c2VySUQ7XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMuQW5zd2VyRGF0ZSA9IHIuQW5zd2VyRGF0ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMudmFsdWVzLnB1c2godG1wUmVjKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoXykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgeyAgICAgICAgICBcclxuICAgICAgICAgIGxldCBkeW5hbWljTW9kdWxlUGFyYW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIkVudElEXCIsXHJcbiAgICAgICAgICAgICAgUGFyYW1WYWx1ZTogdGhpcy5mb3JtLklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgUGFyYW1OYW1lOiBcIlVzZXJJRFwiLFxyXG4gICAgICAgICAgICAgIFBhcmFtVmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbnMudXNlcklELFxyXG4gICAgICAgICAgICAgIFBhcmFtVHlwZTogUGFyYW1UeXBlRW51bVtcIlF1ZXJ5IHBhcmFtXCJdLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnV0aWxpdHlIZWxwZXJTZXJ2aWNlLlJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICAgICAgdGhpcy5lbmRQb2ludENvbmZpZ3VyYXRpb24uUmVjb3Jkcy5HZXRBbGxCeUVudEFuZFVzZXJJREVuZFBvaW50LFxyXG4gICAgICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zLFxyXG4gICAgICAgICAgICAocmVzOiBBcnJheTxEeW5SZWNvcmQ+KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy52YWx1ZXMgPSBuZXcgQXJyYXk8UmVjb3JkPigpO1xyXG4gICAgICAgICAgICAgIHJlcy5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG1wUmVjOiBSZWNvcmQgPSBuZXcgUmVjb3JkKCk7XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMgPSBKU09OLnBhcnNlKHIuU2VyaWFsaXplZFZhbHVlcyk7XHJcbiAgICAgICAgICAgICAgICB0bXBSZWMuSUQgPSByLklEO1xyXG4gICAgICAgICAgICAgICAgdG1wUmVjLkVudElEID0gci5FbnRJRDtcclxuICAgICAgICAgICAgICAgIHRtcFJlYy5WZXJzaW9uID0gci5WZXJzaW9uO1xyXG4gICAgICAgICAgICAgICAgdG1wUmVjLnVzZXJJRCA9IHIudXNlcklEO1xyXG4gICAgICAgICAgICAgICAgdG1wUmVjLkFuc3dlckRhdGUgPSByLkFuc3dlckRhdGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnZhbHVlcy5wdXNoKHRtcFJlYyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoXykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfSwgMCk7IC8vIHJlZnJlc2ggdWlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2goZSl7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2V4Y2VwdGlvbicsIGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGxlIGNvbG9ubmUgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlndXJlQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogXCJhY3Rpb25cIixcclxuICAgICAgICBkaXNwbGF5OiBcIlwiLFxyXG4gICAgICAgIHR5cGU6IFR5cGVDb2x1bW4uTWVudUFjdGlvbixcclxuICAgICAgICBidXR0b25NZW51SWNvbjogXCJtb3JlX3ZlcnRcIixcclxuICAgICAgICBzdHlsZXM6IHsgZmxleDogXCIwIDAgNiVcIiB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMudmlldyA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAuYWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IFwiVmlzdWFsaXp6YVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJpbmZvXCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMudmlld1JlY29yZChlbGVtZW50KSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlZmF1bHRMaXN0QWN0aW9ucy5lZGl0ID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJNb2RpZmljYVwiLFxyXG4gICAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMudmlld09yRWRpdFJlY29yZChlbGVtZW50LCBmYWxzZSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZHVwbGljYXRlID09IHRydWUpIHtcclxuICAgICAgLyp0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmluZCgoYykgPT4gYy5rZXkgPT09IFwiYWN0aW9uXCIpXHJcbiAgICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiBcIkR1cGxpY2FcIixcclxuICAgICAgICAgIGljb246IFwiZmlsZV9jb3B5XCIsXHJcbiAgICAgICAgICBmbjogKGVsZW1lbnQsIGluZGV4LCBjb2wpID0+IHRoaXMuZHVwbGljYXRlUmVjb3JkKGVsZW1lbnQpLFxyXG4gICAgICAgIH0pOyovXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kZWZhdWx0TGlzdEFjdGlvbnMuZGVsZXRlID09IHRydWUpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbmQoKGMpID0+IGMua2V5ID09PSBcImFjdGlvblwiKVxyXG4gICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogXCJFbGltaW5hXCIsXHJcbiAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxyXG4gICAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiB0aGlzLmRlbGV0ZVJlY29yZChlbGVtZW50KSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmV4dGVybmFsQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcclxuICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgLmFjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgbmFtZTogYnV0dG9uLnRleHQsXHJcbiAgICAgICAgaWNvbjogYnV0dG9uLmljb24sXHJcbiAgICAgICAgZm46IChlbGVtZW50LCBpbmRleCwgY29sKSA9PiBidXR0b24uZm4oKSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpO1xyXG4gICAgdGhpcy5nZXRSZWNvcmRzQnlGb3JtSUQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaXVuZ2VyZSBuZWxsYSBjb2xvbm5hIFwiYWN0aW9uXCIgZGVsbGEgZXFwLXRhYmxlIGxlIGF6aW9uaSBzdWkgcmVjb3JkXHJcbiAgICogZGVmaW5pdGUgZGFsbCd1dGVudGUgYWxsJ2ludGVybm8gZGVsbGEgRm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zKCkge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnbGlzdC1mb3JtLXJlY29yZCAtIGNyZWF0ZUFkZGl0aW9uYWxBY3Rpb25zJywgdGhpcy5mb3JtKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZCAmJiB0aGlzLmZvcm0uQWN0aW9uc09uUmVjb3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5mb3JtLkFjdGlvbnNPblJlY29yZC5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICA6IDBcclxuICAgICAgKS5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgICAgIC5maW5kKChjKSA9PiBjLmtleSA9PT0gXCJhY3Rpb25cIilcclxuICAgICAgICAgIC5hY3Rpb25zLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiBhY3Rpb24uTmFtZSxcclxuICAgICAgICAgICAgaWNvbjogYWN0aW9uLkljb24sXHJcbiAgICAgICAgICAgIGZuOiAoZWxlbWVudCwgaW5kZXgsIGNvbCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlYyA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3R4ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuY29udGV4dDtcclxuICAgICAgICAgICAgICBldmFsKGFjdGlvbi5BY3Rpb24pO1xyXG4gICAgICAgICAgICAgIC8vIFRPRE86IHNhbHZhcmUgbGUgbW9kaWZpY2hlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBcclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGNyZWFyZSBsYSBjb25maWd1cmF6aW9uZSBkZWxsZSBjb2xvbm5lIHBlciBsYSBlcXAtdGFibGUuXHJcbiAgICogSW5kaXZpZHVhIGkgQmFzZUZpZWxkIGRhIG1vc3RyYXJlIGUgbGkgdXNhIHBlciBjcmVhcmUgbGUgQ29uZmlnQ29sdW1uLlxyXG4gICAqIExlIGNvbG9ubmUgdmVuZ29ubyBjcmVhdGUgcGVyIGkgQmFzZUZpZWxkIGNvbiBpbCBmbGFnIEluTGlzdFZpZXcgYSBUUlVFXHJcbiAgICogb3BwdXJlLCBuZWwgY2FzbyBub24gc2lhbm8gc3RhdGkgc3BlY2lmaWNhdGkgaSBjYW1waSBkYSB2aXN1YWxpenphcmUsXHJcbiAgICogc2VsZXppb25hIGkgcHJpbWkgNi5cclxuICAgKi9cclxuICBwcml2YXRlIGNyZWF0ZUNvbHVtbnNGcm9tRm9ybUZpZWxkcygpIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2xpc3QtZm9ybS1yZWNvcmQgLSBjcmVhdGVDb2x1bW5zRnJvbUZvcm1GaWVsZHMnLCB0aGlzLmZvcm0pO1xyXG5cclxuICAgIHZhciBmaWVsZHNGb3JDb2x1bW5zOiBBcnJheTxCYXNlRmllbGQ+O1xyXG4gICAgaWYgKHRoaXMuZm9ybS5GaWVsZHMuZmluZCgoZikgPT4gZi5Jbkxpc3RWaWV3KSkge1xyXG4gICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuSW5MaXN0Vmlldyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmaWVsZHNGb3JDb2x1bW5zID0gdGhpcy5mb3JtLkZpZWxkcy5maWx0ZXIoKGYpID0+IGYuT3JkaW5hbFBvc2l0aW9uIDwgNik7XHJcbiAgICB9XHJcbiAgICBmaWVsZHNGb3JDb2x1bW5zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIGEuT3JkaW5hbFBvc2l0aW9uID4gYi5PcmRpbmFsUG9zaXRpb25cclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiBiLk9yZGluYWxQb3NpdGlvbiA+IGEuT3JkaW5hbFBvc2l0aW9uXHJcbiAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICA6IDBcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICB0aGlzLmNvbHVtbnMucHVzaCh0aGlzLmNyZWF0ZUZpZWxkQ29sdW1uKGZpZWxkKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBjcmVhcmUgbCdvZ2dldHRvIENvbmZpZ3VyZUNvbHVtbiBjaGUgcmFwcHJlc2VudGEgaWwgQmFzZUZpZWxkIHBhc3NhdG8gaW4gaW5wdXQuXHJcbiAgICogQHBhcmFtIGZpZWxkIEJhc2VGaWVsZCBwZXIgY3VpIGNyZWFyZSBsYSBjb2xvbm5hIG5lbGxhIGVxcC10YWJsZVxyXG4gICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuYSBDb25maWdDb2x1bW4gcGVyIGxhIGVxcC10YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgY3JlYXRlRmllbGRDb2x1bW4oZmllbGQ6IEJhc2VGaWVsZCk6IENvbmZpZ0NvbHVtbiB7XHJcbiAgICB2YXIgY29sdW1uOiBDb25maWdDb2x1bW4gPSB7IGtleTogZmllbGQuTmFtZSwgZGlzcGxheTogZmllbGQuTGFiZWwgfTtcclxuICAgIHN3aXRjaCAoZmllbGQuRmllbGRUeXBlKSB7XHJcbiAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkJvb2xlYW5vXCJdOlxyXG4gICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5Cb29sZWFuO1xyXG4gICAgICAgIGNvbHVtbi5ib29sZWFuVmFsdWVzID0ge1xyXG4gICAgICAgICAgZmFsc2U6ICc8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGVycm9yLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgICB0cnVlOiAnPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBzdWNjZXNzLWNvbG9yXCI+PC9pPicsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uc3R5bGVzID0ge1xyXG4gICAgICAgICAgZmxleDogXCIwIDAgNyVcIixcclxuICAgICAgICAgIGNlbGxBbGlnbm1lbnQ6IENlbGxBbGlnbm1lbnRFbnVtLkNFTlRFUixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJEYXRhIGUvbyBvcmFcIl06XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSAhPSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBvcmFyaW9cIl1cclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbHVtbi50eXBlID0gVHlwZUNvbHVtbi5EYXRlO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoZmllbGQgYXMgRGF0ZUZpZWxkKS5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bXCJEYXRhIGUgb3JhXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IFwiZGQvTU0veXl5eSBISDptbVwiO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIERhdGVGaWVsZCkuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29sdW1uLmZvcm1hdCA9IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXRcclxuICAgICAgICAgICAgICA/IChmaWVsZCBhcyBEYXRlRmllbGQpLkRhdGVGb3JtYXQucmVwbGFjZShcIkREXCIsIFwiZGRcIilcclxuICAgICAgICAgICAgICA6IFwiZGQvTU0veXl5eVwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gbnVtZXJpY29cIl06XHJcbiAgICAgICAgaWYgKChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sKSB7XHJcbiAgICAgICAgICBjb2x1bW4ubnVtYmVyUGlwZSA9IE51bWJlckNvbHVtblBpcGUuQ1VSUkVOQ1k7XHJcbiAgICAgICAgICBjb2x1bW4uY3VycmVuY3lQaXBlQ29kZSA9IChmaWVsZCBhcyBOdW1lcmljRmllbGQpLkN1cnJlbmN5U3ltYm9sO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIShmaWVsZCBhcyBOdW1lcmljRmllbGQpLklzSW50ZWdlcikge1xyXG4gICAgICAgICAgY29sdW1uLm51bWJlclBpcGUgPSBOdW1iZXJDb2x1bW5QaXBlLkRFQ0lNQUw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJBbGxlZ2F0b1wiXTpcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiSW1tYWdpbmVcIl06XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9IChlbGVtZW50OiBSZWNvcmQpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuSXNNdWx0aUF0dGFjaCB8fFxyXG4gICAgICAgICAgICAoKGZpZWxkIGFzIEltYWdlRmllbGQpLkF0dGFjaERlZmluaXRpb24gJiZcclxuICAgICAgICAgICAgICAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50W2ZpZWxkLk5hbWVdICE9IG51bGwgJiYgZWxlbWVudFtmaWVsZC5OYW1lXS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgPyAoZWxlbWVudFtmaWVsZC5OYW1lXSBhcyBBcnJheTxJQXR0YWNobWVudERUTz4pXHJcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IGEuRmlsZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIilcclxuICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudFtmaWVsZC5OYW1lXSAhPSBudWxsICYmIGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgID8gKGVsZW1lbnRbZmllbGQuTmFtZV0gYXMgQXJyYXk8SUF0dGFjaG1lbnREVE8+KVswXS5GaWxlTmFtZVxyXG4gICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHVtbi5pc1NvcnRhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgY29sdW1uLmlzU2VhcmNoYWJsZSA9IGZhbHNlO1xyXG4gICAgICAqL1xyXG4gICAgIFxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJFbGVuY28gZ2VuZXJpY29cIl06XHJcbiAgICAgICAgY29sdW1uLnZhbHVlID0gKGVsZW1lbnQ6IFJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50W2ZpZWxkLk5hbWVdIHx8IGVsZW1lbnRbZmllbGQuTmFtZV0ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKS5WYWx1ZVBhaXJzKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoaykgPT5cclxuICAgICAgICAgICAgICAgICAgZWxlbWVudFtmaWVsZC5OYW1lXS5pbmNsdWRlcyhcclxuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLlZhbHVlUGFpcnNba11cclxuICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlycykuZmluZChcclxuICAgICAgICAgICAgICAoaykgPT5cclxuICAgICAgICAgICAgICAgIChmaWVsZCBhcyBMaXN0VmFsdWVGaWVsZCkuVmFsdWVQYWlyc1trXSA9PSBlbGVtZW50W2ZpZWxkLk5hbWVdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2x1bW4uaXNTb3J0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGNvbHVtbi5pc1NlYXJjaGFibGUgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiTG9va3VwXCJdOlxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG5cclxuICB2aWV3UmVjb3JkKHJlY29yZDogUmVjb3JkKXtcclxuICAgIHRoaXMub25WaWV3UmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBzY2F0ZW5hIGwnZXZlbnRvIGRpIE91dHB1dCBwZXIgbW9zdHJhcmUgbyBtb2RpZmljYXJlIGlsIHJlY29yZFxyXG4gICAqIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZCBkYSB2aXN1YWxpenphcmUgbyBtb2RpZmljYXJlIHNlbGV6aW9uYXRvIHN1bGxhIGVxcC10YWJsZS5cclxuICAgKiBAcGFyYW0gb25seVZpZXcgU2UgVFJVRSB2aWVuZSBtb3N0cmF0byBpbCBjb21wb25lbnRlIGFkZC1mb3JtLXJlY29yZCBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB2aWV3T3JFZGl0UmVjb3JkKHJlY29yZDogUmVjb3JkLCBvbmx5VmlldzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQoeyByZWNvcmQsIG9ubHlWaWV3IH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBlbGltaW5hcmUgdW4gcmVjb3JkIGRhbGxhIGxpc3RhLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkIGRhIGVsaW1pbmFyZSBzZWxlemlvbmF0byBzdWxsYSBlcXAtdGFibGUuXHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJlY29yZDogUmVjb3JkKSB7XHJcbiAgICB0aGlzLm9uRGVsZXRlUmVjb3JkLmVtaXQocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgcmljYXJpY2FyZSBpIGRhdGkgZGVsbGEgZXFwLXRhYmxlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVsb2FkVGFibGVzKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVSZWNvcmRzKSB7XHJcbiAgICAgIHRoaXMudGFibGVSZWNvcmRzLnJlbG9hZERhdGF0YWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkXCI+XHJcbiAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgPG1hdC1jYXJkLXRpdGxlICpuZ0lmPVwibG9hZGVyICYmIHNob3dUaXRsZVwiPkVsZW5jbyB7eyBmb3JtLk5hbWUgfX08L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgPCEtLSA8bWF0LWNhcmQtc3VidGl0bGU+U3RhcnQ8L21hdC1jYXJkLXN1YnRpdGxlPiAtLT5cclxuICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWRkVmlld0VkaXRSZWNvcmQuZW1pdChudWxsKVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwhLS0gPGJ1dHRvbiBtYXQtYnV0dG9uPkxJS0U8L2J1dHRvbj4gLS0+XHJcbiAgICAgIDwhLS0gPGJ1dHRvbiBtYXQtYnV0dG9uPlNIQVJFPC9idXR0b24+IC0tPlxyXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG4gIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gIDxtYXQtY2FyZC1jb250ZW50PlxyXG5cclxuICAgIDxlcXAtdGFibGUgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cImxvYWRlciAmJiBjb25maWd1cmF0aW9ucy52YWx1ZXNcIlxyXG4gICAgICBbZGF0YV09XCJjb25maWd1cmF0aW9ucy52YWx1ZXNcIiBbY29sdW1uc109XCJjb2x1bW5zXCI+PC9lcXAtdGFibGU+XHJcbiAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gIDxtYXQtY2FyZC1mb290ZXI+XHJcbiAgICA8IS0tIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPiAtLT5cclxuICA8L21hdC1jYXJkLWZvb3Rlcj5cclxuPC9tYXQtY2FyZD5cclxuXHJcblxyXG5cclxuPCEtLSA8ZGl2IGNsYXNzPVwicm93IGVxcC1keW5hbWljLW1vZHVsZS10aXRsZSBsaXN0LWZvcm0tcmVjb3JkLWhlYWRlclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgPGg0ICpuZ0lmPVwic2hvd1RpdGxlXCI+XHJcbiAgICAgIDxiPkVsZW5jbyB7eyBmb3JtLk5hbWUgfX08L2I+XHJcbiAgICA8L2g0PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiB0ZXh0LXJpZ2h0XCIgKm5nSWY9XCJkZWZhdWx0TGlzdEFjdGlvbnMuYWRkXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIChjbGljayk9XCJvbkFkZFZpZXdFZGl0UmVjb3JkLmVtaXQobnVsbClcIj5cclxuICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDEwcHhcIj5BZ2dpdW5naTwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxlcXAtdGFibGUgY2xhc3M9XCJsaXN0LWZvcm0tcmVjb3JkLXRhYmxlXCIgI3RhYmxlUmVjb3JkcyAqbmdJZj1cImxvYWRlciAmJiBjb25maWd1cmF0aW9ucy52YWx1ZXNcIlxyXG4gIFtkYXRhXT1cImNvbmZpZ3VyYXRpb25zLnZhbHVlc1wiIFtjb2x1bW5zXT1cImNvbHVtbnNcIj48L2VxcC10YWJsZT4gLS0+Il19
|