@huntsman-cancer-institute/cod 17.14.6 → 17.15.1

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.
@@ -562,4 +562,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
562
562
  type: ViewChild,
563
563
  args: ["nativeSelectRef", { static: false }]
564
564
  }] } });
565
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFBZSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBMkMsU0FBUyxFQUMxSSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFeEMsT0FBTyxFQUFtQixZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTy9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFHcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQStDeEIsWUFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLFFBQW1CLEVBQVUsWUFBc0I7UUFBdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUE1Q2xILG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsU0FBUyxDQUFDO1FBRXZDLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFLckUsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBYXZDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFRbEIsZ0JBQVcsR0FBRztZQUNWLFlB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QUM7UUFFcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENB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RUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBpc0Rldk1vZGUsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgT25Jbml0LCBPbkRlc3Ryb3ksIEluamVjdCwgRGlyZWN0aXZlLCBRdWVyeUxpc3RcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBJUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHtBdHRyaWJ1dGVTZXJ2aWNlfSBmcm9tIFwiLi4vc2VydmljZXMvYXR0cmlidXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlVmFsdWV9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtdmFsdWUuZW50aXR5XCI7XHJcbmltcG9ydCB7QXR0cmlidXRlQ2hvaWNlfSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWNob2ljZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVMb25nVGV4dH0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS1sb25nLXRleHQuZW50aXR5XCI7XHJcbmltcG9ydCB7R3JhcGhpY2FsQXR0cmlidXRlfSBmcm9tIFwiLi4vbW9kZWwvZ3JhcGhpY2FsLWF0dHJpYnV0ZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtEaWN0aW9uYXJ5RW50cmllc0RUT30gZnJvbSBcIi4uL21vZGVsL2RpY3Rpb25hcnktZW50cmllcy5kdG9cIjtcclxuaW1wb3J0IHtEYXRlVXRpbH0gZnJvbSBcIi4uL2RhdGUvZGF0ZS11dGlsXCI7XHJcbmltcG9ydCB7TmF0aXZlU2VsZWN0Q29tcG9uZW50fSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaW5wdXRcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7R3JpZEFwaSwgUm93RG91YmxlQ2xpY2tlZEV2ZW50LCBSb3dOb2RlLCBSb3dTZWxlY3RlZEV2ZW50LCBBZ0dyaWRFdmVudCwgR3JpZFNpemVDaGFuZ2VkRXZlbnQsIE1vZGVsVXBkYXRlZEV2ZW50fSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYW4gYXR0cmlidXRlLiAgQXR0cmlidXRlcyBhcmUgaXRlcmF0ZWQgb3ZlciBieSBjb250YWluZXIuICBUaGVzZSBtYXkgYmUgaW4gdHJhZGl0aW9uYWwgYWJzb2x1dGVcclxuICogcG9zaXRpb25pbmcsIGZsZXggcG9zaXRpb25pbmcsIG9yIGFuIGVkaXQgbW9kZSBhcyBhIGNvbHVtbiBpbiBhIG1vZGFsLiAgUmVnYXJkbGVzcyBvZiB0aGUgdGVtcGxhdGUsIHRoZSBmdW5kYW1lbnRhbFxyXG4gKiBuZWVkcyBvZiBzZXR0aW5nIHVwIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFuZCBwZXJzaXN0aW5nIGRhdGEgYXJlIHRoZSBzYW1lLiAgU28gdGhpcyBjbGFzcyBwcm92aWRlcyBiYXNlIGZ1bmN0aW9uYWxpdHlcclxuICogYW5kIHRoZSBjb21wb25lbnRzIHRoYXQgZXh0ZW5kIGl0IHByb3ZpZGUgdGhlIHRlbXBsYXRlIGFuZCBtYXkgYWxzbyBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkuXHJcbiAqXHJcbiAqIFR5cGVzOlxyXG4gKiBMSU5FXHJcbiAqIE5MUF9MSU5LXHJcbiAqIERJQ1RcclxuICogR0FcclxuICogTEFCRUxcclxuICogRFRcclxuICogQUNcclxuICogVFhUXHJcbiAqIERcclxuICogU1xyXG4gKiBJXHJcbiAqIENCXHJcbiAqIEJcclxuICogTlxyXG4gKiBFQlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktYXR0cmlidXRlLWJhc2VcIlxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgYXR0cmlidXRlOiBHcmFwaGljYWxBdHRyaWJ1dGU7XHJcbiAgQElucHV0KCkgaW50ZXJuYWxWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlZGl0SW5saW5lOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSByZXNvcnRDb2x1bW5zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiaW5wdXRSZWZcIiwge3N0YXRpYzogZmFsc2V9KSBpbnB1dFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibmF0aXZlU2VsZWN0UmVmXCIsIHtzdGF0aWM6IGZhbHNlfSkgbmF0aXZlU2VsZWN0UmVmOiBOYXRpdmVTZWxlY3RDb21wb25lbnQ7XHJcblxyXG4gIGF0dHJpYnV0ZVZhbHVlczogQXR0cmlidXRlVmFsdWVbXSA9IFtdO1xyXG4gIGF0dHJpYnV0ZUNob2ljZXM6IEF0dHJpYnV0ZUNob2ljZVtdO1xyXG5cclxuICBjaGlsZEF0dHJpYnV0ZXM6IEdyYXBoaWNhbEF0dHJpYnV0ZVtdO1xyXG4gIGdyaWREYXRhOiBhbnlbXTtcclxuICBncmlkQ29sdW1uczogYW55W107XHJcblxyXG4gIC8vVXNlZCBmb3IgdGhlIGVkaXQgZ3JvdXAgcm93IHRlbXBsYXRlXHJcbiAgZWRpdEdyb3VwQXR0cmlidXRlUm93SWQ6IG51bWJlcjtcclxuICBlZGl0R3JvdXBSb3dBdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXTtcclxuXHJcbiAgZGljdGlvbmFyeUVudHJpZXM6IGFueVtdO1xyXG5cclxuICB3aWR0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZTtcclxuICBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xyXG4gIHJlbmRlcmVyOiBSZW5kZXJlcjI7XHJcblxyXG4gIGdyaWRBcGk6IEdyaWRBcGk7XHJcblxyXG4gIGdyaWRPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJIZWlnaHQ6IDIzLFxyXG4gICAgICByb3dIZWlnaHQ6IDIzLFxyXG4gICAgICByb3dTdHlsZToge1xyXG4gICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogJ1Byb21wdCwgc2Fucy1zZXJpZicsXHJcbiAgICAgICAgICAnY29sb3InOiAnIzNkN2E5OSdcclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIGVuc3VyZURvbU9yZGVyOiB0cnVlLFxyXG4gICAgICBzdXBwcmVzc0NvbHVtblZpcnR1YWxpc2F0aW9uOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVTZXJ2aWNlOiBBdHRyaWJ1dGVTZXJ2aWNlLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZSA9IGF0dHJpYnV0ZVNlcnZpY2U7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xyXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFueSBhdHRyaWJ1dGUgdmFsdWVzIGZvciB0aGlzIGF0dHJpYnV0ZS4gIElmIGEgY29tcGxleCBhdHRyaWJ1dGUgbGlrZSBhIGdyaWQsIHNldCBpdCB1cC5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldENvbnRhaW5lclVwZGF0ZWQoKS5zdWJzY3JpYmUoKHVwZGF0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvbkdyaWRSZWFkeShwYXJhbXMgOiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcbiAgb25Nb2RlbFVwZGF0ZWQoX2V2ZW50OiBNb2RlbFVwZGF0ZWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQoX2V2ZW50OiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHVsbHMgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYXR0cmlidXRlIGFuZCBwZXJmb3JtcyBhbnkgc3BlY2lhbGl6ZWQgaW5pdGlhbGl6YXRpb24gc3VjaCBhcyBmb3JcclxuICAgKiB0aGUgZ3JpZCBvciBtdWx0aSBjaG9pY2UuXHJcbiAgICovXHJcbiAgaW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlLmluaXQ6IFwiICsgdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ3JpZERhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmdyaWRDb2x1bW5zID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVDaG9pY2VzID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnRlcm5hbFZhbHVlcykge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcyA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZXModGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsIHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlVmFsdWVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgIT09IFwiR0FcIiAmJiB0aGlzLmF0dHJpYnV0ZS5pc011bHRpVmFsdWUgIT09IFwiWVwiKSB7XHJcbiAgICAgIC8vIFRPRE86IERlY2lkZSB3aGVuIHRvIHBlcnNpc3QgdGhpcyB0byBnZXQgdGhlIGlkQXR0cmlidXRlVmFsdWUuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJHQVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWQoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkFDXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplQXR0cmlidXRlQ2hvaWNlcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiVFhUXCIgJiYgIXRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVMb25nVGV4dCA9IDxBdHRyaWJ1dGVMb25nVGV4dD57XHJcbiAgICAgICAgaWRMb25nVGV4dDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRleHREYXRhOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJESUNUXCIpIHtcclxuICAgICAgdGhpcy5sb2FkRGljdGlvbmFyeUVudHJpZXModGhpcy5hdHRyaWJ1dGUsIHRoaXMuYXR0cmlidXRlVmFsdWVzLCB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRUXCIpIHtcclxuICAgICAgLy9NYWtlIGEgcHJvcGVyIGRhdGUgZm9yIHRoZSBkYXRlIHRpbWUgY29tcG9uZW50XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLmRhdGUgPSBuZXcgRGF0ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZURhdGVUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgbG9hZERpY3Rpb25hcnlFbnRyaWVzKGF0dHJpYnV0ZTogQXR0cmlidXRlLCB2YWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10sIGdyb3VwQXR0cmlidXRlUm93SWQ6IG51bWJlcikge1xyXG4gICAgLy9BZGRpbmcgdGhpcyB0byBzdWJzY3JpcHRpb25zIGlzIHByb2JhYmx5IHVubmVjZXNzYXJ5LCBzaW5jZSB0aGUgZmlyc3QoKSB3aWxsIHVuc3Vic2NyaWJlLiBXZSBvbmx5IGdldCBvbmUgdmFsdWUuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIHZhbHVlcywgZ3JvdXBBdHRyaWJ1dGVSb3dJZCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cmllcyA9IGR0by5lbnRyaWVzO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0lmIHRoZXJlIGlzIGEgcmVmZXJlbmNlZCBhdHRyaWJ1dGUgdGhpcyBtZWFucyB0aGlzIGF0dHJpYnV0ZSBpcyBmaWx0ZXJlZCBieSBhbm90aGVyIGF0dHJpYnV0ZS5cclxuICAgICAgaWYgKGR0by5yZWZlcmVuY2VkQXR0cmlidXRlKSB7XHJcbiAgICAgICAgLy9OZWVkIHRvIHN1YnNjcmliZSB0byBhdHRyaWJ1dGUgcHVzaGVzLCBpbiBvcmRlciB0byB1cGRhdGUgb3VyIEZJTFRFUkVEIERJQ1RJT05BUlkgd2hlbiB0aGUgcmVmZXJlbmNlZCBhdHRyaWJ1dGUgd2FzIGNoYW5nZWRcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVB1c2hlZFN1YmplY3QoKS5zdWJzY3JpYmUoKGF2OiBBdHRyaWJ1dGVWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgLy9JZiBpdCBpcyB0aGUgcmVmZXJlbmNlZCBhdHRyaWJ1dGUsIChhbmQgZm9yIHRoZSBzYW1lIHJvdyBpZiB0aGlzIGlzIGEgZ3JpZCByb3cpIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBkaWN0aW9uYXJ5IGVudHJpZXNcclxuICAgICAgICAgIGlmIChhdi5pZEF0dHJpYnV0ZSA9PT0gZHRvLnJlZmVyZW5jZWRBdHRyaWJ1dGUuaWRBdHRyaWJ1dGVcclxuICAgICAgICAgICAgICAmJiAoKGF2Lmdyb3VwQXR0cmlidXRlUm93SWQgPT0gbnVsbCAmJiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQgPT0gbnVsbCkgfHwgYXYuZ3JvdXBBdHRyaWJ1dGVSb3dJZCA9PT0gdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkKSkge1xyXG5cclxuICAgICAgICAgICAgLy9NYWtlIGFub3RoZXIgY2FsbCB0byBnZXQgdGhlIGRpY3Rpb25hcnkgZW50cmllc1xyXG4gICAgICAgICAgICAvL05vdGUgdGhhdCB3aGVuIHBhc3NpbmcgaW4gdGhlIHJlZmVyZW5jZUF0dHJpYnV0ZVZhbHVlLCB0aGUgcmVzdWx0aW5nIERUTyB3b24ndCBjb250YWluIGEgcmVmZXJlbmNlZEF0dHJpYnV0ZS4gQSBzZWNvbmQgc3Vic2NyaXB0aW9uIHdvbid0IGJlIGNyZWF0ZWQuXHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkRmlsdGVyZWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIHZhbHVlcywgZ3JvdXBBdHRyaWJ1dGVSb3dJZCwgYXYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRmlsdGVyZWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgdmFsdWVzOiBBdHRyaWJ1dGVWYWx1ZVtdLCBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIsIHJlZmVyZW5jZWRBdHRyaWJ1dGVWYWx1ZTogQXR0cmlidXRlVmFsdWUpIHtcclxuICAgIC8vQWRkaW5nIHRoaXMgdG8gc3Vic2NyaXB0aW9ucyBpcyBwcm9iYWJseSB1bm5lY2Vzc2FyeSwgc2luY2UgdGhlIGZpcnN0KCkgd2lsbCB1bnN1YnNjcmliZS4gV2Ugb25seSBnZXQgb25lIHZhbHVlLlxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQsIHJlZmVyZW5jZWRBdHRyaWJ1dGVWYWx1ZSkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cmllcyA9IGR0by5lbnRyaWVzO1xyXG5cclxuICAgICAgLy9NdWx0aVxyXG4gICAgICBpZiAodGhpcy5hdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSAnWScpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVNdWx0aURpY3RFbnRyaWVzKCk7XHJcblxyXG4gICAgICAgIC8vUHJvYmFibHkgbmVlZCB0byBzbGljZSBvdXQgbXVsdGkgdmFsdWVzIHRoYXQgZG9uJ3QgYXBwbHlcclxuICAgICAgICB0aGlzLmRlbGV0ZUZpbHRlcmVkT3V0RGljdGlvbmFyeVZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vU2luZ2xlXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vTWF5YmUgbmVlZCB0byBjbGVhciBvdXQgdGhlIHZhbHVlIGlmIGl0IG5vIGxvbmdlciBhcHBsaWVzXHJcbiAgICAgICAgaWYgKCEgZHRvLmVudHJpZXNJbmNsdWRlU2VsZWN0ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZURpY3RDaGFuZ2UodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpbHRlcmVkT3V0RGljdGlvbmFyeVZhbHVlcygpIHtcclxuICAgIC8vSXRlcmF0ZSBleGlzdGluZyB2YWx1ZXNcclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgIGxldCBhcHBsaWNhYmxlOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vRG9lcyBpdCBleGlzdCBpbiBuZXcgZGljYXRpb25yeUVudHJpZXM/XHJcbiAgICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZGljdGlvbmFyeUVudHJpZXMpIHtcclxuICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUudmFsdWVJZERpY3Rpb25hcnkgJiYgZW50cnkudmFsdWUgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KSB7XHJcbiAgICAgICAgICAvL2tlZXBcclxuICAgICAgICAgIGFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISBhcHBsaWNhYmxlKSB7XHJcbiAgICAgICAgLy9HZXQgcmlkIG9mIHZhbHVlcyB0aGF0IG5vIGxvbmdlciBhcHBseVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zcGxpY2VBdHRyaWJ1dGVWYWx1ZURpY3QodGhpcy5hdHRyaWJ1dGUsIGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpIHtcclxuICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZGljdGlvbmFyeUVudHJpZXMpIHtcclxuICAgICAgZW50cnkuY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgZm9yIChsZXQgYXR0cmlidXRlVmFsdWUgb2YgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMpIHtcclxuICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUudmFsdWVJZERpY3Rpb25hcnkgJiYgZW50cnkudmFsdWUgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KSB7XHJcbiAgICAgICAgICBlbnRyeS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGEgdHJhbnNpZW50IHZhbHVlIG9uIHRoZSBhdHRyaWJ1dGVDaG9pY2UgdG8ga2VlcCB0cmFjayBvZiBzZWxlY3RlZCB2YWx1ZXMuXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUF0dHJpYnV0ZUNob2ljZXMoKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNob2ljZXMgPSB0aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVDaG9pY2VzLnNsaWNlKCk7XHJcblxyXG4gICAgZm9yIChsZXQgYXR0cmlidXRlQ2hvaWNlIG9mIHRoaXMuYXR0cmlidXRlQ2hvaWNlcykge1xyXG4gICAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlQXR0cmlidXRlQ2hvaWNlICYmIGF0dHJpYnV0ZUNob2ljZS5pZEF0dHJpYnV0ZUNob2ljZSA9PT0gYXR0cmlidXRlVmFsdWUudmFsdWVBdHRyaWJ1dGVDaG9pY2UuaWRBdHRyaWJ1dGVDaG9pY2UpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZUNob2ljZS52YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBncmlkLCBmaW5kIGl0cyBjaGlsZHJlbiBhdHRyaWJ1dGVzIHdoaWNoIG1ha2UgdXAgdGhlIGNvbHVtbnMgYW5kIGdlbmVyYXRlIGRhdGEgYmFzZWQgb24gYWxsXHJcbiAgICogdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgYnkgdGhlaXIgZ3JvdXBBdHRyaWJ1dGVSb3dJZC5cclxuICAgKi9cclxuICBpbml0aWFsaXplR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGRhdGE6IGFueVtdID0gW107XHJcblxyXG4gICAgaWYgKCF0aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoaWxkQXR0cmlidXRlcyA9IDxHcmFwaGljYWxBdHRyaWJ1dGVbXT50aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlOiBHcmFwaGljYWxBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZVtcInRhYk9yZGVyXCJdICE9PSB1bmRlZmluZWQgfHwgYXR0cmlidXRlW1wid1wiXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfSkuc29ydCgoYTogR3JhcGhpY2FsQXR0cmlidXRlLCBiOiBHcmFwaGljYWxBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgaWYgKGEudGFiT3JkZXIgPCBiLnRhYk9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9IGVsc2UgaWYgKGEudGFiT3JkZXIgPiBiLnRhYk9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkOiBuIEdyaWQgQXR0cmlidXRlczogXCIgKyB0aGlzLmNoaWxkQXR0cmlidXRlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRDb2x1bW5zKHRoaXMuY2hpbGRBdHRyaWJ1dGVzLCBjb2x1bW5zKTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBDb2x1bW5zOiBcIiArIGNvbHVtbnMubGVuZ3RoKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyhjb2x1bW5zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBhdHRyaWJ1dGVWYWx1ZXM6IFwiICsgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmF0dHJpYnV0ZVZhbHVlcyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxldCBzb3J0ZWRSb3dWYWx1ZXMgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5maWx0ZXIoKGF0dHJpYnV0ZVZhbHVlKSA9PiBhdHRyaWJ1dGVWYWx1ZS5pZEdyb3VwQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpXHJcbiAgICAgIC5zb3J0KChhOiBBdHRyaWJ1dGVWYWx1ZSwgYjogQXR0cmlidXRlVmFsdWUpID0+IHtcclxuICAgICAgaWYgKGEuZ3JvdXBBdHRyaWJ1dGVSb3dJZCA8IGIuZ3JvdXBBdHRyaWJ1dGVSb3dJZCkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfSBlbHNlIGlmIChhLmdyb3VwQXR0cmlidXRlUm93SWQgPiBiLmdyb3VwQXR0cmlidXRlUm93SWQpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG46IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBkYXR1bSBvZiBzb3J0ZWRSb3dWYWx1ZXMpIHtcclxuICAgICAgaWYgKGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQgPiBuKSB7XHJcbiAgICAgICAgbiA9IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQ7XHJcbiAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgIGdyb3VwQXR0cmlidXRlUm93SWQ6IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkOiBuIERhdGE6IFwiICsgZGF0YS5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRWYWx1ZXMoZGF0YSwgc29ydGVkUm93VmFsdWVzKTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWRDb2x1bW5zID0gY29sdW1ucztcclxuICAgIHRoaXMuZ3JpZERhdGEgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgYSBjb2x1bW4gYXJyYXkgYmFzZWQgb24gdGhlIGdyb3VwZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGdyaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0F0dHJpYnV0ZVtdfSBhdHRyaWJ1dGVzXHJcbiAgICogQHBhcmFtIHthbnlbXX0gY29sdW1uc1xyXG4gICAqL1xyXG4gIGluaXRpYWxpemVHcmlkQ29sdW1ucyhhdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXSwgY29sdW1uczogYW55W10pIHtcclxuXHJcbiAgICAvKlxyXG4gICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgZmllbGQ6IFwiZ3JvdXBBdHRyaWJ1dGVSb3dJZFwiLCBpc0tleTogdHJ1ZSwgdmlzaWJsZTogZmFsc2VcclxuICAgIH0pOyovXHJcblxyXG4gICAgZm9yIChjb25zdCBbaSwgYXR0cmlidXRlXSBvZiBhdHRyaWJ1dGVzLmVudHJpZXMoKSkge1xyXG4gICAgICBsZXQgY29sdW1uOiBhbnkgPSB7XHJcbiAgICAgICAgZmllbGQ6IGF0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lLFxyXG4gICAgICAgIGhlYWRlck5hbWU6IGF0dHJpYnV0ZS5kaXNwbGF5TmFtZSxcclxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6IGF0dHJpYnV0ZS53LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gdGhlIGxhc3QgY29sdW1uIHNob3VsZCBhdXRvIGZpbGwgdGhlIHJlbWFpbmluZyBzcGFjZVxyXG4gICAgICBpZiAoYXR0cmlidXRlLncgJiYgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGNvbHVtbi5zdXBwcmVzc1NpemVUb0ZpdCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRcIikge1xyXG4gICAgICAgIGNvbHVtbi5jb21wYXJhdG9yID0gRGF0ZVV0aWwuZGF0ZUNvbXBhcmF0b3I7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgICAgY29sdW1uLmNvbXBhcmF0b3IgPSBEYXRlVXRpbC5kYXRlVGltZUNvbXBhcmF0b3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQsIGFzc2lnbmVkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUdyaWRWYWx1ZXMoZGF0YTogYW55W10sIGF0dHJpYnV0ZVZhbHVlczogQXR0cmlidXRlVmFsdWVbXSk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgZGF0dW0gb2YgYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSA9IHRoaXMuY2hpbGRBdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlOiBBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgICByZXR1cm4gYXR0cmlidXRlLmlkQXR0cmlidXRlID09PSBkYXR1bS5pZEF0dHJpYnV0ZTtcclxuICAgICAgfSlbMF07XHJcblxyXG4gICAgICAvL01ha2UgYSByb3dWYWx1ZSBvYmplY3Qgd2l0aCB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRlIG9mIHRoZSByb3dcclxuICAgICAgbGV0IHJvd1ZhbHVlOiBhbnkgPSBkYXRhLmZpbmQoKHJvdykgPT4gcm93Lmdyb3VwQXR0cmlidXRlUm93SWQgPT09IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgICBpZiAoISByb3dWYWx1ZSkge1xyXG4gICAgICAgIHJvd1ZhbHVlID0ge2dyb3VwQXR0cmlidXRlUm93SWQ6IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWR9O1xyXG4gICAgICAgIGRhdGEucHVzaChyb3dWYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkF0dHJpYnV0ZS5pbml0aWFsaXplR3JpZDogaWRBdHRyaWJ1dGUgXCIgKyBkYXR1bS5pZEF0dHJpYnV0ZSArIFwiIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRUXCIpIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBuZXcgRGF0ZVBpcGUoXCJlbi1VU1wiKS50cmFuc2Zvcm0obmV3IERhdGUoZGF0dW0udmFsdWVEYXRlVGltZSksIFwiTS9kL3l5LCBoOm1tOnNzIGFcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJBQ1wiICYmIGF0dHJpYnV0ZS5pc011bHRpVmFsdWUgPT09IFwiTlwiKSB7XHJcbiAgICAgICAgaWYgKGRhdHVtLnZhbHVlQXR0cmlidXRlQ2hvaWNlKSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQUNcIiAmJiBhdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSBcIllcIikge1xyXG4gICAgICAgIC8vQ29uY2F0ZW5hdGVkIGRpc3BsYXlcclxuICAgICAgICBpZiAocm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdKSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gKyBcIiwgXCIgKyBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlQXR0cmlidXRlQ2hvaWNlLmNob2ljZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJESUNUXCIpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIGF0dHJpYnV0ZVZhbHVlcywgZGF0dW0uZ3JvdXBBdHRyaWJ1dGVSb3dJZCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgICAgIGxldCBlbnRyeSA9IGR0by5lbnRyaWVzLmZpbmQoKGVudHJ5OmFueSkgPT4gZW50cnkudmFsdWUgPT09IGRhdHVtLnZhbHVlSWREaWN0aW9uYXJ5KTtcclxuXHJcbiAgICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gZHRvLmVudHJpZXMuZmluZCgoZW50cnk6YW55KSA9PiBlbnRyeS52YWx1ZSA9PT0gZGF0dW0udmFsdWVJZERpY3Rpb25hcnkpLmRpc3BsYXk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaENlbGxzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJTXCIgfHwgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJCXCIgfHwgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJFQlwiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQ0JcIikge1xyXG4gICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlU3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3Igb3ZlcnJpZGUuXHJcbiAgICovXHJcbiAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlLnJlZnJlc2g6IFwiICsgdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICB2YWx1ZVN0cmluZ0NoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVTdHJpbmcgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZyA9IFwiWVwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nID0gXCJOXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9IHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVJbnRlZ2VyQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlSW50ZWdlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVOdW1lcmljQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTnVtZXJpYyA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVEaWN0Q2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlSWREaWN0aW9uYXJ5ID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZURhdGVDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVEYXRlVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVUZXh0Q2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0KSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQudGV4dERhdGEgPSB2YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQgPSA8QXR0cmlidXRlTG9uZ1RleHQ+e1xyXG4gICAgICAgIGlkTG9uZ1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0RGF0YTogdmFsdWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlQ2hvaWNlQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlQXR0cmlidXRlQ2hvaWNlID0gdGhpcy5hdHRyaWJ1dGVDaG9pY2VzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWRBdHRyaWJ1dGVDaG9pY2UgPT09IHZhbHVlKTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlTXVsdGlDaG9pY2VDaGFuZ2UoYXR0cmlidXRlQ2hvaWNlOiBhbnkpOiB2b2lkIHtcclxuICAgIGF0dHJpYnV0ZUNob2ljZS52YWx1ZSA9ICFhdHRyaWJ1dGVDaG9pY2UudmFsdWU7XHJcblxyXG4gICAgLy9SZW1vdmVcclxuICAgIGlmICghYXR0cmlidXRlQ2hvaWNlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zcGxpY2VBdHRyaWJ1dGVWYWx1ZUNob2ljZSh0aGlzLmF0dHJpYnV0ZSwgYXR0cmlidXRlQ2hvaWNlKTtcclxuICAgIH1cclxuICAgIC8vQWRkXHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMucHVzaCg8QXR0cmlidXRlVmFsdWU+e1xyXG4gICAgICAgIGNvZGVBdHRyaWJ1dGVEYXRhVHlwZTogXCJBQ1wiLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWU6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWVTZXQ6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLmdldFZhbHVlKCkuaWRBdHRyaWJ1dGVWYWx1ZVNldCxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgdmFsdWVBdHRyaWJ1dGVDaG9pY2U6IGF0dHJpYnV0ZUNob2ljZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWVNdWx0aUNob2ljZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1t0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggLSAxXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWx1ZU11bHRpRGljdENoYW5nZShlbnRyeTogYW55KTogdm9pZCB7XHJcbiAgICBlbnRyeS5jaGVja2VkID0gIWVudHJ5LmNoZWNrZWQ7XHJcblxyXG4gICAgLy9SZW1vdmVcclxuICAgIGlmICghZW50cnkuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVEaWN0KHRoaXMuYXR0cmlidXRlLCBlbnRyeS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvL0FkZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IFwiRElDVFwiLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWU6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWVTZXQ6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLmdldFZhbHVlKCkuaWRBdHRyaWJ1dGVWYWx1ZVNldCxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgdmFsdWVJZERpY3Rpb25hcnk6IGVudHJ5LnZhbHVlLFxyXG4gICAgICAgIGdyb3VwQXR0cmlidXRlUm93SWQ6IHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCxcclxuICAgICAgICBpZEdyb3VwQXR0cmlidXRlOiB0aGlzLmF0dHJpYnV0ZS5pZEdyb3VwQXR0cmlidXRlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZU11bHRpRGljdCh0aGlzLmF0dHJpYnV0ZVZhbHVlc1t0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggLSAxXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYWRkR3JpZFJvdyhtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImFkZCBncmlkIHJvdzogXCIgKyBpZEdyb3VwQXR0cmlidXRlKTtcclxuXHJcbiAgICAvL0dldCBhIG5lZ2F0aXZlIElELCBzbyB3ZSBrbm93IHRoaXMgaXMgYSBuZXcgcm93XHJcbiAgICB0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkID0gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldFVuaXF1ZUlkKCk7XHJcbiAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSB0aGlzLmNoaWxkQXR0cmlidXRlcztcclxuXHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge3dpbmRvd0NsYXNzOiBcIm1vZGFsLWxnXCJ9KS5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiU2F2ZVwiKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQ2FuY2VsXCIpIHtcclxuICAgICAgICB0aGlzLmNhbmNlbEVkaXRDb2RHcmlkUm93KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIChyZWFzb24pID0+IHt9KTtcclxuICB9XHJcblxyXG4gIGVkaXRHcmlkUm93KG1vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+LCBpZEdyb3VwQXR0cmlidXRlOiBudW1iZXIsIGV2ZW50OiBSb3dEb3VibGVDbGlja2VkRXZlbnQpIHtcclxuICAgIC8vRWRpdElubGluZSBpcyBhY3R1YWxseSB0aGUgT05MWSB3YXkgdGhpcyBjYW4gYmUgZWRpdGFibGUsIHNvIHRoaXMgaXMgcmVhbGx5IHdoZXRoZXIgdGhlIGdyaWQgaXMgZWRpdGFibGUsIGF0IGFsbFxyXG4gICAgaWYgKHRoaXMuZWRpdElubGluZSAmJiAhKHRoaXMuYXR0cmlidXRlLmlzQWN0aXZlID09PSAnTicpKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQgPSBldmVudC5kYXRhLmdyb3VwQXR0cmlidXRlUm93SWQ7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IHRoaXMuY2hpbGRBdHRyaWJ1dGVzO1xyXG5cclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwiU2F2ZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVHcmlkUm93KGlkR3JvdXBBdHRyaWJ1dGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkNhbmNlbFwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbEVkaXRDb2RHcmlkUm93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAocmVhc29uKSA9PiB7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVHcmlkUm93KGlkR3JvdXBBdHRyaWJ1dGU6IG51bWJlcikge1xyXG4gICAgY29uc29sZS5sb2coXCJyZW1vdmUgZ3JpZCByb3c6IFwiICsgaWRHcm91cEF0dHJpYnV0ZSk7XHJcbiAgICAvL2xldCBzZWxlY3RlZENvbHVtbnM6IFJvd05vZGVbXSA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnM6IElSb3dOb2RlPGFueT5bXSA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5kZWxldGVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHNlbGVjdGVkQ29sdW1uc1swXS5kYXRhLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdENvZEdyaWRSb3coKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuY2xlYXJVcGRhdGVkR3JpZFJvd0F0dHJpYnV0ZVZhbHVlcyh0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IFtdO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBWYWx1ZXMgZm9yIGEgbmV3IGdyaWQgcm93IGFyZSBzdG9yZWQgc2VwYXJhdGVseS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhhdCBkYXRhIHRvIHRoZSBjdXJyZW50IGdyaWQgZGF0YSBhbmRcclxuICAgKiBwdXNoIHRoZSB2YWx1ZXMgdG8gdGhlIHNlcnZpY2UuXHJcbiAgICovXHJcbiAgc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcInNhdmUgZ3JpZCByb3dcIik7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG5cclxuICAgIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYm9GaWx0ZXJWYWx1ZUdldHRlcihwYXJhbXMpOiBhbnkge1xyXG4gICAgbGV0IHZhbHVlID0gcGFyYW1zLmRhdGFbcGFyYW1zLmNvbERlZi5maWVsZF07XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbGV0IG9wdGlvbiA9ICgocGFyYW1zLmNvbERlZiBhcyBhbnkpLnNlbGVjdE9wdGlvbnMgYXMgYW55W10pLmZpbmQoKGVudHJ5KSA9PiAoZW50cnlbcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zVmFsdWVGaWVsZF0gPT09IHZhbHVlKSk7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zRGlzcGxheUZpZWxkXSA6IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcbn1cclxuIl19
565
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb2Qvc3JjL2NvbXBvbmVudHMvYXR0cmlidXRlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFBZSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBMkMsU0FBUyxFQUMxSSxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFeEMsT0FBTyxFQUFtQixZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBTy9ELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFHcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQStDeEIsWUFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLFFBQW1CLEVBQVUsWUFBc0I7UUFBdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUE1Q2xILG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsU0FBUyxDQUFDO1FBRXZDLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFLckUsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBYXZDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFRbEIsZ0JBQVcsR0FBRztZQUNWLFlB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QUM7UUFFcEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUM7UUFFbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDbEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBLENBQUMsQ0FBQSxTQUFTLENB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RUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBpc0Rldk1vZGUsIE91dHB1dCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgT25Jbml0LCBPbkRlc3Ryb3ksIEluamVjdCwgRGlyZWN0aXZlLCBRdWVyeUxpc3RcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Zmlyc3R9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZVNlcnZpY2V9IGZyb20gXCIuLi9zZXJ2aWNlcy9hdHRyaWJ1dGUuc2VydmljZVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZX0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVWYWx1ZX0gZnJvbSBcIi4uL21vZGVsL2F0dHJpYnV0ZS12YWx1ZS5lbnRpdHlcIjtcclxuaW1wb3J0IHtBdHRyaWJ1dGVDaG9pY2V9IGZyb20gXCIuLi9tb2RlbC9hdHRyaWJ1dGUtY2hvaWNlLmVudGl0eVwiO1xyXG5pbXBvcnQge0F0dHJpYnV0ZUxvbmdUZXh0fSBmcm9tIFwiLi4vbW9kZWwvYXR0cmlidXRlLWxvbmctdGV4dC5lbnRpdHlcIjtcclxuaW1wb3J0IHtHcmFwaGljYWxBdHRyaWJ1dGV9IGZyb20gXCIuLi9tb2RlbC9ncmFwaGljYWwtYXR0cmlidXRlLmVudGl0eVwiO1xyXG5pbXBvcnQge0RpY3Rpb25hcnlFbnRyaWVzRFRPfSBmcm9tIFwiLi4vbW9kZWwvZGljdGlvbmFyeS1lbnRyaWVzLmR0b1wiO1xyXG5pbXBvcnQge0RhdGVVdGlsfSBmcm9tIFwiLi4vZGF0ZS9kYXRlLXV0aWxcIjtcclxuaW1wb3J0IHtOYXRpdmVTZWxlY3RDb21wb25lbnR9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9pbnB1dFwiO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHtHcmlkQXBpLCBSb3dEb3VibGVDbGlja2VkRXZlbnQsIElSb3dOb2RlLCBSb3dTZWxlY3RlZEV2ZW50LCBBZ0dyaWRFdmVudCwgR3JpZFNpemVDaGFuZ2VkRXZlbnQsIE1vZGVsVXBkYXRlZEV2ZW50fSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYW4gYXR0cmlidXRlLiAgQXR0cmlidXRlcyBhcmUgaXRlcmF0ZWQgb3ZlciBieSBjb250YWluZXIuICBUaGVzZSBtYXkgYmUgaW4gdHJhZGl0aW9uYWwgYWJzb2x1dGVcclxuICogcG9zaXRpb25pbmcsIGZsZXggcG9zaXRpb25pbmcsIG9yIGFuIGVkaXQgbW9kZSBhcyBhIGNvbHVtbiBpbiBhIG1vZGFsLiAgUmVnYXJkbGVzcyBvZiB0aGUgdGVtcGxhdGUsIHRoZSBmdW5kYW1lbnRhbFxyXG4gKiBuZWVkcyBvZiBzZXR0aW5nIHVwIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFuZCBwZXJzaXN0aW5nIGRhdGEgYXJlIHRoZSBzYW1lLiAgU28gdGhpcyBjbGFzcyBwcm92aWRlcyBiYXNlIGZ1bmN0aW9uYWxpdHlcclxuICogYW5kIHRoZSBjb21wb25lbnRzIHRoYXQgZXh0ZW5kIGl0IHByb3ZpZGUgdGhlIHRlbXBsYXRlIGFuZCBtYXkgYWxzbyBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkuXHJcbiAqXHJcbiAqIFR5cGVzOlxyXG4gKiBMSU5FXHJcbiAqIE5MUF9MSU5LXHJcbiAqIERJQ1RcclxuICogR0FcclxuICogTEFCRUxcclxuICogRFRcclxuICogQUNcclxuICogVFhUXHJcbiAqIERcclxuICogU1xyXG4gKiBJXHJcbiAqIENCXHJcbiAqIEJcclxuICogTlxyXG4gKiBFQlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktYXR0cmlidXRlLWJhc2VcIlxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgYXR0cmlidXRlOiBHcmFwaGljYWxBdHRyaWJ1dGU7XHJcbiAgQElucHV0KCkgaW50ZXJuYWxWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlZGl0SW5saW5lOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKSByZXNvcnRDb2x1bW5zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiaW5wdXRSZWZcIiwge3N0YXRpYzogZmFsc2V9KSBpbnB1dFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibmF0aXZlU2VsZWN0UmVmXCIsIHtzdGF0aWM6IGZhbHNlfSkgbmF0aXZlU2VsZWN0UmVmOiBOYXRpdmVTZWxlY3RDb21wb25lbnQ7XHJcblxyXG4gIGF0dHJpYnV0ZVZhbHVlczogQXR0cmlidXRlVmFsdWVbXSA9IFtdO1xyXG4gIGF0dHJpYnV0ZUNob2ljZXM6IEF0dHJpYnV0ZUNob2ljZVtdO1xyXG5cclxuICBjaGlsZEF0dHJpYnV0ZXM6IEdyYXBoaWNhbEF0dHJpYnV0ZVtdO1xyXG4gIGdyaWREYXRhOiBhbnlbXTtcclxuICBncmlkQ29sdW1uczogYW55W107XHJcblxyXG4gIC8vVXNlZCBmb3IgdGhlIGVkaXQgZ3JvdXAgcm93IHRlbXBsYXRlXHJcbiAgZWRpdEdyb3VwQXR0cmlidXRlUm93SWQ6IG51bWJlcjtcclxuICBlZGl0R3JvdXBSb3dBdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXTtcclxuXHJcbiAgZGljdGlvbmFyeUVudHJpZXM6IGFueVtdO1xyXG5cclxuICB3aWR0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgYXR0cmlidXRlU2VydmljZTogQXR0cmlidXRlU2VydmljZTtcclxuICBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xyXG4gIHJlbmRlcmVyOiBSZW5kZXJlcjI7XHJcblxyXG4gIGdyaWRBcGk6IEdyaWRBcGk7XHJcblxyXG4gIGdyaWRPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJIZWlnaHQ6IDIzLFxyXG4gICAgICByb3dIZWlnaHQ6IDIzLFxyXG4gICAgICByb3dTdHlsZToge1xyXG4gICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogJ1Byb21wdCwgc2Fucy1zZXJpZicsXHJcbiAgICAgICAgICAnY29sb3InOiAnIzNkN2E5OSdcclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb246IHRydWUsXHJcbiAgICAgIGVuc3VyZURvbU9yZGVyOiB0cnVlLFxyXG4gICAgICBzdXBwcmVzc0NvbHVtblZpcnR1YWxpc2F0aW9uOiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVTZXJ2aWNlOiBBdHRyaWJ1dGVTZXJ2aWNlLCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHtcclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZSA9IGF0dHJpYnV0ZVNlcnZpY2U7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xyXG4gICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFueSBhdHRyaWJ1dGUgdmFsdWVzIGZvciB0aGlzIGF0dHJpYnV0ZS4gIElmIGEgY29tcGxleCBhdHRyaWJ1dGUgbGlrZSBhIGdyaWQsIHNldCBpdCB1cC5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdCgpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldENvbnRhaW5lclVwZGF0ZWQoKS5zdWJzY3JpYmUoKHVwZGF0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBvbkdyaWRSZWFkeShwYXJhbXMgOiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcbiAgb25Nb2RlbFVwZGF0ZWQoX2V2ZW50OiBNb2RlbFVwZGF0ZWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQoX2V2ZW50OiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHVsbHMgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYXR0cmlidXRlIGFuZCBwZXJmb3JtcyBhbnkgc3BlY2lhbGl6ZWQgaW5pdGlhbGl6YXRpb24gc3VjaCBhcyBmb3JcclxuICAgKiB0aGUgZ3JpZCBvciBtdWx0aSBjaG9pY2UuXHJcbiAgICovXHJcbiAgaW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlLmluaXQ6IFwiICsgdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ3JpZERhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmdyaWRDb2x1bW5zID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVDaG9pY2VzID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy53aWR0aCA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRXaWR0aCgpO1xyXG5cclxuICAgIGlmICghdGhpcy5pbnRlcm5hbFZhbHVlcykge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlcyA9IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZXModGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsIHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlVmFsdWVzLmxlbmd0aCA9PT0gMCAmJiB0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgIT09IFwiR0FcIiAmJiB0aGlzLmF0dHJpYnV0ZS5pc011bHRpVmFsdWUgIT09IFwiWVwiKSB7XHJcbiAgICAgIC8vIFRPRE86IERlY2lkZSB3aGVuIHRvIHBlcnNpc3QgdGhpcyB0byBnZXQgdGhlIGlkQXR0cmlidXRlVmFsdWUuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSxcclxuICAgICAgICBpZEF0dHJpYnV0ZVZhbHVlOiB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0VW5pcXVlSWQoKSxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJHQVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWQoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkFDXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplQXR0cmlidXRlQ2hvaWNlcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiVFhUXCIgJiYgIXRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQpIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVMb25nVGV4dCA9IDxBdHRyaWJ1dGVMb25nVGV4dD57XHJcbiAgICAgICAgaWRMb25nVGV4dDogdW5kZWZpbmVkLFxyXG4gICAgICAgIHRleHREYXRhOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJESUNUXCIpIHtcclxuICAgICAgdGhpcy5sb2FkRGljdGlvbmFyeUVudHJpZXModGhpcy5hdHRyaWJ1dGUsIHRoaXMuYXR0cmlidXRlVmFsdWVzLCB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5hdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRUXCIpIHtcclxuICAgICAgLy9NYWtlIGEgcHJvcGVyIGRhdGUgZm9yIHRoZSBkYXRlIHRpbWUgY29tcG9uZW50XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLmRhdGUgPSBuZXcgRGF0ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZURhdGVUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgbG9hZERpY3Rpb25hcnlFbnRyaWVzKGF0dHJpYnV0ZTogQXR0cmlidXRlLCB2YWx1ZXM6IEF0dHJpYnV0ZVZhbHVlW10sIGdyb3VwQXR0cmlidXRlUm93SWQ6IG51bWJlcikge1xyXG4gICAgLy9BZGRpbmcgdGhpcyB0byBzdWJzY3JpcHRpb25zIGlzIHByb2JhYmx5IHVubmVjZXNzYXJ5LCBzaW5jZSB0aGUgZmlyc3QoKSB3aWxsIHVuc3Vic2NyaWJlLiBXZSBvbmx5IGdldCBvbmUgdmFsdWUuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIHZhbHVlcywgZ3JvdXBBdHRyaWJ1dGVSb3dJZCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cmllcyA9IGR0by5lbnRyaWVzO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXR0cmlidXRlLmlzTXVsdGlWYWx1ZSA9PT0gJ1knKSB7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0lmIHRoZXJlIGlzIGEgcmVmZXJlbmNlZCBhdHRyaWJ1dGUgdGhpcyBtZWFucyB0aGlzIGF0dHJpYnV0ZSBpcyBmaWx0ZXJlZCBieSBhbm90aGVyIGF0dHJpYnV0ZS5cclxuICAgICAgaWYgKGR0by5yZWZlcmVuY2VkQXR0cmlidXRlKSB7XHJcbiAgICAgICAgLy9OZWVkIHRvIHN1YnNjcmliZSB0byBhdHRyaWJ1dGUgcHVzaGVzLCBpbiBvcmRlciB0byB1cGRhdGUgb3VyIEZJTFRFUkVEIERJQ1RJT05BUlkgd2hlbiB0aGUgcmVmZXJlbmNlZCBhdHRyaWJ1dGUgd2FzIGNoYW5nZWRcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVB1c2hlZFN1YmplY3QoKS5zdWJzY3JpYmUoKGF2OiBBdHRyaWJ1dGVWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgLy9JZiBpdCBpcyB0aGUgcmVmZXJlbmNlZCBhdHRyaWJ1dGUsIChhbmQgZm9yIHRoZSBzYW1lIHJvdyBpZiB0aGlzIGlzIGEgZ3JpZCByb3cpIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBkaWN0aW9uYXJ5IGVudHJpZXNcclxuICAgICAgICAgIGlmIChhdi5pZEF0dHJpYnV0ZSA9PT0gZHRvLnJlZmVyZW5jZWRBdHRyaWJ1dGUuaWRBdHRyaWJ1dGVcclxuICAgICAgICAgICAgICAmJiAoKGF2Lmdyb3VwQXR0cmlidXRlUm93SWQgPT0gbnVsbCAmJiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQgPT0gbnVsbCkgfHwgYXYuZ3JvdXBBdHRyaWJ1dGVSb3dJZCA9PT0gdGhpcy5ncm91cEF0dHJpYnV0ZVJvd0lkKSkge1xyXG5cclxuICAgICAgICAgICAgLy9NYWtlIGFub3RoZXIgY2FsbCB0byBnZXQgdGhlIGRpY3Rpb25hcnkgZW50cmllc1xyXG4gICAgICAgICAgICAvL05vdGUgdGhhdCB3aGVuIHBhc3NpbmcgaW4gdGhlIHJlZmVyZW5jZUF0dHJpYnV0ZVZhbHVlLCB0aGUgcmVzdWx0aW5nIERUTyB3b24ndCBjb250YWluIGEgcmVmZXJlbmNlZEF0dHJpYnV0ZS4gQSBzZWNvbmQgc3Vic2NyaXB0aW9uIHdvbid0IGJlIGNyZWF0ZWQuXHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkRmlsdGVyZWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIHZhbHVlcywgZ3JvdXBBdHRyaWJ1dGVSb3dJZCwgYXYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkRmlsdGVyZWREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgdmFsdWVzOiBBdHRyaWJ1dGVWYWx1ZVtdLCBncm91cEF0dHJpYnV0ZVJvd0lkOiBudW1iZXIsIHJlZmVyZW5jZWRBdHRyaWJ1dGVWYWx1ZTogQXR0cmlidXRlVmFsdWUpIHtcclxuICAgIC8vQWRkaW5nIHRoaXMgdG8gc3Vic2NyaXB0aW9ucyBpcyBwcm9iYWJseSB1bm5lY2Vzc2FyeSwgc2luY2UgdGhlIGZpcnN0KCkgd2lsbCB1bnN1YnNjcmliZS4gV2Ugb25seSBnZXQgb25lIHZhbHVlLlxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RGljdGlvbmFyeUVudHJpZXMoYXR0cmlidXRlLCB2YWx1ZXMsIGdyb3VwQXR0cmlidXRlUm93SWQsIHJlZmVyZW5jZWRBdHRyaWJ1dGVWYWx1ZSkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cmllcyA9IGR0by5lbnRyaWVzO1xyXG5cclxuICAgICAgLy9NdWx0aVxyXG4gICAgICBpZiAodGhpcy5hdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSAnWScpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVNdWx0aURpY3RFbnRyaWVzKCk7XHJcblxyXG4gICAgICAgIC8vUHJvYmFibHkgbmVlZCB0byBzbGljZSBvdXQgbXVsdGkgdmFsdWVzIHRoYXQgZG9uJ3QgYXBwbHlcclxuICAgICAgICB0aGlzLmRlbGV0ZUZpbHRlcmVkT3V0RGljdGlvbmFyeVZhbHVlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vU2luZ2xlXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vTWF5YmUgbmVlZCB0byBjbGVhciBvdXQgdGhlIHZhbHVlIGlmIGl0IG5vIGxvbmdlciBhcHBsaWVzXHJcbiAgICAgICAgaWYgKCEgZHRvLmVudHJpZXNJbmNsdWRlU2VsZWN0ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZURpY3RDaGFuZ2UodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpbHRlcmVkT3V0RGljdGlvbmFyeVZhbHVlcygpIHtcclxuICAgIC8vSXRlcmF0ZSBleGlzdGluZyB2YWx1ZXNcclxuICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgIGxldCBhcHBsaWNhYmxlOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vRG9lcyBpdCBleGlzdCBpbiBuZXcgZGljYXRpb25yeUVudHJpZXM/XHJcbiAgICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZGljdGlvbmFyeUVudHJpZXMpIHtcclxuICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUudmFsdWVJZERpY3Rpb25hcnkgJiYgZW50cnkudmFsdWUgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KSB7XHJcbiAgICAgICAgICAvL2tlZXBcclxuICAgICAgICAgIGFwcGxpY2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISBhcHBsaWNhYmxlKSB7XHJcbiAgICAgICAgLy9HZXQgcmlkIG9mIHZhbHVlcyB0aGF0IG5vIGxvbmdlciBhcHBseVxyXG4gICAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zcGxpY2VBdHRyaWJ1dGVWYWx1ZURpY3QodGhpcy5hdHRyaWJ1dGUsIGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplTXVsdGlEaWN0RW50cmllcygpIHtcclxuICAgIGZvciAobGV0IGVudHJ5IG9mIHRoaXMuZGljdGlvbmFyeUVudHJpZXMpIHtcclxuICAgICAgZW50cnkuY2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgZm9yIChsZXQgYXR0cmlidXRlVmFsdWUgb2YgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMpIHtcclxuICAgICAgICBpZiAoYXR0cmlidXRlVmFsdWUudmFsdWVJZERpY3Rpb25hcnkgJiYgZW50cnkudmFsdWUgPT09IGF0dHJpYnV0ZVZhbHVlLnZhbHVlSWREaWN0aW9uYXJ5KSB7XHJcbiAgICAgICAgICBlbnRyeS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGEgdHJhbnNpZW50IHZhbHVlIG9uIHRoZSBhdHRyaWJ1dGVDaG9pY2UgdG8ga2VlcCB0cmFjayBvZiBzZWxlY3RlZCB2YWx1ZXMuXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUF0dHJpYnV0ZUNob2ljZXMoKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZUNob2ljZXMgPSB0aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVDaG9pY2VzLnNsaWNlKCk7XHJcblxyXG4gICAgZm9yIChsZXQgYXR0cmlidXRlQ2hvaWNlIG9mIHRoaXMuYXR0cmlidXRlQ2hvaWNlcykge1xyXG4gICAgICBhdHRyaWJ1dGVDaG9pY2UudmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAobGV0IGF0dHJpYnV0ZVZhbHVlIG9mIHRoaXMuYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnZhbHVlQXR0cmlidXRlQ2hvaWNlICYmIGF0dHJpYnV0ZUNob2ljZS5pZEF0dHJpYnV0ZUNob2ljZSA9PT0gYXR0cmlidXRlVmFsdWUudmFsdWVBdHRyaWJ1dGVDaG9pY2UuaWRBdHRyaWJ1dGVDaG9pY2UpIHtcclxuICAgICAgICAgIGF0dHJpYnV0ZUNob2ljZS52YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBncmlkLCBmaW5kIGl0cyBjaGlsZHJlbiBhdHRyaWJ1dGVzIHdoaWNoIG1ha2UgdXAgdGhlIGNvbHVtbnMgYW5kIGdlbmVyYXRlIGRhdGEgYmFzZWQgb24gYWxsXHJcbiAgICogdGhlIGF0dHJpYnV0ZSB2YWx1ZXMgYnkgdGhlaXIgZ3JvdXBBdHRyaWJ1dGVSb3dJZC5cclxuICAgKi9cclxuICBpbml0aWFsaXplR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb2x1bW5zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IGRhdGE6IGFueVtdID0gW107XHJcblxyXG4gICAgaWYgKCF0aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoaWxkQXR0cmlidXRlcyA9IDxHcmFwaGljYWxBdHRyaWJ1dGVbXT50aGlzLmF0dHJpYnV0ZS5hdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlOiBHcmFwaGljYWxBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgcmV0dXJuIGF0dHJpYnV0ZVtcInRhYk9yZGVyXCJdICE9PSB1bmRlZmluZWQgfHwgYXR0cmlidXRlW1wid1wiXSAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfSkuc29ydCgoYTogR3JhcGhpY2FsQXR0cmlidXRlLCBiOiBHcmFwaGljYWxBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgaWYgKGEudGFiT3JkZXIgPCBiLnRhYk9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9IGVsc2UgaWYgKGEudGFiT3JkZXIgPiBiLnRhYk9yZGVyKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkOiBuIEdyaWQgQXR0cmlidXRlczogXCIgKyB0aGlzLmNoaWxkQXR0cmlidXRlcy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRDb2x1bW5zKHRoaXMuY2hpbGRBdHRyaWJ1dGVzLCBjb2x1bW5zKTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBDb2x1bW5zOiBcIiArIGNvbHVtbnMubGVuZ3RoKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyhjb2x1bW5zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogbiBhdHRyaWJ1dGVWYWx1ZXM6IFwiICsgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMubGVuZ3RoKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLmF0dHJpYnV0ZVZhbHVlcyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxldCBzb3J0ZWRSb3dWYWx1ZXMgPSB0aGlzLmF0dHJpYnV0ZVZhbHVlcy5maWx0ZXIoKGF0dHJpYnV0ZVZhbHVlKSA9PiBhdHRyaWJ1dGVWYWx1ZS5pZEdyb3VwQXR0cmlidXRlID0gdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpXHJcbiAgICAgIC5zb3J0KChhOiBBdHRyaWJ1dGVWYWx1ZSwgYjogQXR0cmlidXRlVmFsdWUpID0+IHtcclxuICAgICAgaWYgKGEuZ3JvdXBBdHRyaWJ1dGVSb3dJZCA8IGIuZ3JvdXBBdHRyaWJ1dGVSb3dJZCkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgICAgfSBlbHNlIGlmIChhLmdyb3VwQXR0cmlidXRlUm93SWQgPiBiLmdyb3VwQXR0cmlidXRlUm93SWQpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG46IG51bWJlciA9IDA7XHJcbiAgICBmb3IgKGxldCBkYXR1bSBvZiBzb3J0ZWRSb3dWYWx1ZXMpIHtcclxuICAgICAgaWYgKGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQgPiBuKSB7XHJcbiAgICAgICAgbiA9IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQ7XHJcbiAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgIGdyb3VwQXR0cmlidXRlUm93SWQ6IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlQ29tcG9uZW50LmluaXRpYWxpemVHcmlkOiBuIERhdGE6IFwiICsgZGF0YS5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZUdyaWRWYWx1ZXMoZGF0YSwgc29ydGVkUm93VmFsdWVzKTtcclxuXHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkF0dHJpYnV0ZUNvbXBvbmVudC5pbml0aWFsaXplR3JpZDogRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdyaWRDb2x1bW5zID0gY29sdW1ucztcclxuICAgIHRoaXMuZ3JpZERhdGEgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgYSBjb2x1bW4gYXJyYXkgYmFzZWQgb24gdGhlIGdyb3VwZWQgYXR0cmlidXRlcyB3aXRoaW4gdGhlIGdyaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0F0dHJpYnV0ZVtdfSBhdHRyaWJ1dGVzXHJcbiAgICogQHBhcmFtIHthbnlbXX0gY29sdW1uc1xyXG4gICAqL1xyXG4gIGluaXRpYWxpemVHcmlkQ29sdW1ucyhhdHRyaWJ1dGVzOiBHcmFwaGljYWxBdHRyaWJ1dGVbXSwgY29sdW1uczogYW55W10pIHtcclxuXHJcbiAgICAvKlxyXG4gICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgZmllbGQ6IFwiZ3JvdXBBdHRyaWJ1dGVSb3dJZFwiLCBpc0tleTogdHJ1ZSwgdmlzaWJsZTogZmFsc2VcclxuICAgIH0pOyovXHJcblxyXG4gICAgZm9yIChjb25zdCBbaSwgYXR0cmlidXRlXSBvZiBhdHRyaWJ1dGVzLmVudHJpZXMoKSkge1xyXG4gICAgICBsZXQgY29sdW1uOiBhbnkgPSB7XHJcbiAgICAgICAgZmllbGQ6IGF0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lLFxyXG4gICAgICAgIGhlYWRlck5hbWU6IGF0dHJpYnV0ZS5kaXNwbGF5TmFtZSxcclxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6IGF0dHJpYnV0ZS53LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gdGhlIGxhc3QgY29sdW1uIHNob3VsZCBhdXRvIGZpbGwgdGhlIHJlbWFpbmluZyBzcGFjZVxyXG4gICAgICBpZiAoYXR0cmlidXRlLncgJiYgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGNvbHVtbi5zdXBwcmVzc1NpemVUb0ZpdCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRcIikge1xyXG4gICAgICAgIGNvbHVtbi5jb21wYXJhdG9yID0gRGF0ZVV0aWwuZGF0ZUNvbXBhcmF0b3I7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJEVFwiKSB7XHJcbiAgICAgICAgY29sdW1uLmNvbXBhcmF0b3IgPSBEYXRlVXRpbC5kYXRlVGltZUNvbXBhcmF0b3I7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgdGhlIGNvbHVtbnMgYXJlIGNyZWF0ZWQsIGFzc2lnbmVkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueVtdfSBkYXRhXHJcbiAgICovXHJcbiAgaW5pdGlhbGl6ZUdyaWRWYWx1ZXMoZGF0YTogYW55W10sIGF0dHJpYnV0ZVZhbHVlczogQXR0cmlidXRlVmFsdWVbXSk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgZGF0dW0gb2YgYXR0cmlidXRlVmFsdWVzKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSA9IHRoaXMuY2hpbGRBdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlOiBBdHRyaWJ1dGUpID0+IHtcclxuICAgICAgICByZXR1cm4gYXR0cmlidXRlLmlkQXR0cmlidXRlID09PSBkYXR1bS5pZEF0dHJpYnV0ZTtcclxuICAgICAgfSlbMF07XHJcblxyXG4gICAgICAvL01ha2UgYSByb3dWYWx1ZSBvYmplY3Qgd2l0aCB2YWx1ZXMgZm9yIGVhY2ggYXR0cmlidXRlIG9mIHRoZSByb3dcclxuICAgICAgbGV0IHJvd1ZhbHVlOiBhbnkgPSBkYXRhLmZpbmQoKHJvdykgPT4gcm93Lmdyb3VwQXR0cmlidXRlUm93SWQgPT09IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgICBpZiAoISByb3dWYWx1ZSkge1xyXG4gICAgICAgIHJvd1ZhbHVlID0ge2dyb3VwQXR0cmlidXRlUm93SWQ6IGRhdHVtLmdyb3VwQXR0cmlidXRlUm93SWR9O1xyXG4gICAgICAgIGRhdGEucHVzaChyb3dWYWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghYXR0cmlidXRlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkF0dHJpYnV0ZS5pbml0aWFsaXplR3JpZDogaWRBdHRyaWJ1dGUgXCIgKyBkYXR1bS5pZEF0dHJpYnV0ZSArIFwiIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdHRyaWJ1dGUuY29kZUF0dHJpYnV0ZURhdGFUeXBlID09PSBcIkRUXCIpIHtcclxuICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBuZXcgRGF0ZVBpcGUoXCJlbi1VU1wiKS50cmFuc2Zvcm0obmV3IERhdGUoZGF0dW0udmFsdWVEYXRlVGltZSksIFwiTS9kL3l5LCBoOm1tOnNzIGFcIik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJBQ1wiICYmIGF0dHJpYnV0ZS5pc011bHRpVmFsdWUgPT09IFwiTlwiKSB7XHJcbiAgICAgICAgaWYgKGRhdHVtLnZhbHVlQXR0cmlidXRlQ2hvaWNlKSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQUNcIiAmJiBhdHRyaWJ1dGUuaXNNdWx0aVZhbHVlID09PSBcIllcIikge1xyXG4gICAgICAgIC8vQ29uY2F0ZW5hdGVkIGRpc3BsYXlcclxuICAgICAgICBpZiAocm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdKSB7XHJcbiAgICAgICAgICByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gPSByb3dWYWx1ZVthdHRyaWJ1dGUuYXR0cmlidXRlTmFtZV0gKyBcIiwgXCIgKyBkYXR1bS52YWx1ZUF0dHJpYnV0ZUNob2ljZS5jaG9pY2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlQXR0cmlidXRlQ2hvaWNlLmNob2ljZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJESUNUXCIpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXREaWN0aW9uYXJ5RW50cmllcyhhdHRyaWJ1dGUsIGF0dHJpYnV0ZVZhbHVlcywgZGF0dW0uZ3JvdXBBdHRyaWJ1dGVSb3dJZCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKGR0bzogRGljdGlvbmFyeUVudHJpZXNEVE8pID0+IHtcclxuICAgICAgICAgIGxldCBlbnRyeSA9IGR0by5lbnRyaWVzLmZpbmQoKGVudHJ5OmFueSkgPT4gZW50cnkudmFsdWUgPT09IGRhdHVtLnZhbHVlSWREaWN0aW9uYXJ5KTtcclxuXHJcbiAgICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgICAgcm93VmFsdWVbYXR0cmlidXRlLmF0dHJpYnV0ZU5hbWVdID0gZHRvLmVudHJpZXMuZmluZCgoZW50cnk6YW55KSA9PiBlbnRyeS52YWx1ZSA9PT0gZGF0dW0udmFsdWVJZERpY3Rpb25hcnkpLmRpc3BsYXk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaENlbGxzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJTXCIgfHwgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJCXCIgfHwgYXR0cmlidXRlLmNvZGVBdHRyaWJ1dGVEYXRhVHlwZSA9PT0gXCJFQlwiIHx8IGF0dHJpYnV0ZS5jb2RlQXR0cmlidXRlRGF0YVR5cGUgPT09IFwiQ0JcIikge1xyXG4gICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlU3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJvd1ZhbHVlW2F0dHJpYnV0ZS5hdHRyaWJ1dGVOYW1lXSA9IGRhdHVtLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3Igb3ZlcnJpZGUuXHJcbiAgICovXHJcbiAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQXR0cmlidXRlLnJlZnJlc2g6IFwiICsgdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICB2YWx1ZVN0cmluZ0NoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVTdHJpbmcgPSB2YWx1ZTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZVN0cmluZyA9IFwiWVwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nID0gXCJOXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9IHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlU3RyaW5nO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVJbnRlZ2VyQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlSW50ZWdlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVOdW1lcmljQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTnVtZXJpYyA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVEaWN0Q2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlSWREaWN0aW9uYXJ5ID0gdmFsdWU7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZSA9ICh2YWx1ZSk/dmFsdWUudG9TdHJpbmcoKTp1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXSk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZURhdGVDaGFuZ2UodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWVEYXRlVGltZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0udmFsdWUgPSAodmFsdWUpP3ZhbHVlLnRvU3RyaW5nKCk6dW5kZWZpbmVkO1xyXG5cclxuICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWUodGhpcy5hdHRyaWJ1dGVWYWx1ZXNbMF0pO1xyXG4gIH1cclxuXHJcbiAgdmFsdWVUZXh0Q2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmF0dHJpYnV0ZVZhbHVlc1swXS52YWx1ZUxvbmdUZXh0KSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQudGV4dERhdGEgPSB2YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlTG9uZ1RleHQgPSA8QXR0cmlidXRlTG9uZ1RleHQ+e1xyXG4gICAgICAgIGlkTG9uZ1RleHQ6IHVuZGVmaW5lZCxcclxuICAgICAgICB0ZXh0RGF0YTogdmFsdWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlQ2hvaWNlQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlQXR0cmlidXRlQ2hvaWNlID0gdGhpcy5hdHRyaWJ1dGVDaG9pY2VzLmZpbmQoKGF0dHIpID0+IGF0dHIuaWRBdHRyaWJ1dGVDaG9pY2UgPT09IHZhbHVlKTtcclxuICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdLnZhbHVlID0gKHZhbHVlKT92YWx1ZS50b1N0cmluZygpOnVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UucHVzaEF0dHJpYnV0ZVZhbHVlKHRoaXMuYXR0cmlidXRlVmFsdWVzWzBdKTtcclxuICB9XHJcblxyXG4gIHZhbHVlTXVsdGlDaG9pY2VDaGFuZ2UoYXR0cmlidXRlQ2hvaWNlOiBhbnkpOiB2b2lkIHtcclxuICAgIGF0dHJpYnV0ZUNob2ljZS52YWx1ZSA9ICFhdHRyaWJ1dGVDaG9pY2UudmFsdWU7XHJcblxyXG4gICAgLy9SZW1vdmVcclxuICAgIGlmICghYXR0cmlidXRlQ2hvaWNlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5zcGxpY2VBdHRyaWJ1dGVWYWx1ZUNob2ljZSh0aGlzLmF0dHJpYnV0ZSwgYXR0cmlidXRlQ2hvaWNlKTtcclxuICAgIH1cclxuICAgIC8vQWRkXHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hdHRyaWJ1dGVWYWx1ZXMucHVzaCg8QXR0cmlidXRlVmFsdWU+e1xyXG4gICAgICAgIGNvZGVBdHRyaWJ1dGVEYXRhVHlwZTogXCJBQ1wiLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWU6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWVTZXQ6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLmdldFZhbHVlKCkuaWRBdHRyaWJ1dGVWYWx1ZVNldCxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgdmFsdWVBdHRyaWJ1dGVDaG9pY2U6IGF0dHJpYnV0ZUNob2ljZSxcclxuICAgICAgICBncm91cEF0dHJpYnV0ZVJvd0lkOiB0aGlzLmdyb3VwQXR0cmlidXRlUm93SWQsXHJcbiAgICAgICAgaWRHcm91cEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRHcm91cEF0dHJpYnV0ZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5wdXNoQXR0cmlidXRlVmFsdWVNdWx0aUNob2ljZSh0aGlzLmF0dHJpYnV0ZVZhbHVlc1t0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggLSAxXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWx1ZU11bHRpRGljdENoYW5nZShlbnRyeTogYW55KTogdm9pZCB7XHJcbiAgICBlbnRyeS5jaGVja2VkID0gIWVudHJ5LmNoZWNrZWQ7XHJcblxyXG4gICAgLy9SZW1vdmVcclxuICAgIGlmICghZW50cnkuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc3BsaWNlQXR0cmlidXRlVmFsdWVEaWN0KHRoaXMuYXR0cmlidXRlLCBlbnRyeS52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvL0FkZFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlVmFsdWVzLnB1c2goPEF0dHJpYnV0ZVZhbHVlPntcclxuICAgICAgICBjb2RlQXR0cmlidXRlRGF0YVR5cGU6IFwiRElDVFwiLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWU6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRVbmlxdWVJZCgpLFxyXG4gICAgICAgIGlkQXR0cmlidXRlVmFsdWVTZXQ6IHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRBdHRyaWJ1dGVWYWx1ZVNldCgpLmdldFZhbHVlKCkuaWRBdHRyaWJ1dGVWYWx1ZVNldCxcclxuICAgICAgICBpZEF0dHJpYnV0ZTogdGhpcy5hdHRyaWJ1dGUuaWRBdHRyaWJ1dGUsXHJcbiAgICAgICAgdmFsdWVJZERpY3Rpb25hcnk6IGVudHJ5LnZhbHVlLFxyXG4gICAgICAgIGdyb3VwQXR0cmlidXRlUm93SWQ6IHRoaXMuZ3JvdXBBdHRyaWJ1dGVSb3dJZCxcclxuICAgICAgICBpZEdyb3VwQXR0cmlidXRlOiB0aGlzLmF0dHJpYnV0ZS5pZEdyb3VwQXR0cmlidXRlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnB1c2hBdHRyaWJ1dGVWYWx1ZU11bHRpRGljdCh0aGlzLmF0dHJpYnV0ZVZhbHVlc1t0aGlzLmF0dHJpYnV0ZVZhbHVlcy5sZW5ndGggLSAxXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgYWRkR3JpZFJvdyhtb2RhbDogVGVtcGxhdGVSZWY8YW55PiwgaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImFkZCBncmlkIHJvdzogXCIgKyBpZEdyb3VwQXR0cmlidXRlKTtcclxuXHJcbiAgICAvL0dldCBhIG5lZ2F0aXZlIElELCBzbyB3ZSBrbm93IHRoaXMgaXMgYSBuZXcgcm93XHJcbiAgICB0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkID0gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldFVuaXF1ZUlkKCk7XHJcbiAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSB0aGlzLmNoaWxkQXR0cmlidXRlcztcclxuXHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge3dpbmRvd0NsYXNzOiBcIm1vZGFsLWxnXCJ9KS5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwiU2F2ZVwiKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlR3JpZFJvdyhpZEdyb3VwQXR0cmlidXRlKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IFwiQ2FuY2VsXCIpIHtcclxuICAgICAgICB0aGlzLmNhbmNlbEVkaXRDb2RHcmlkUm93KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIChyZWFzb24pID0+IHt9KTtcclxuICB9XHJcblxyXG4gIGVkaXRHcmlkUm93KG1vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+LCBpZEdyb3VwQXR0cmlidXRlOiBudW1iZXIsIGV2ZW50OiBSb3dEb3VibGVDbGlja2VkRXZlbnQpIHtcclxuICAgIC8vRWRpdElubGluZSBpcyBhY3R1YWxseSB0aGUgT05MWSB3YXkgdGhpcyBjYW4gYmUgZWRpdGFibGUsIHNvIHRoaXMgaXMgcmVhbGx5IHdoZXRoZXIgdGhlIGdyaWQgaXMgZWRpdGFibGUsIGF0IGFsbFxyXG4gICAgaWYgKHRoaXMuZWRpdElubGluZSAmJiAhKHRoaXMuYXR0cmlidXRlLmlzQWN0aXZlID09PSAnTicpKSB7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQgPSBldmVudC5kYXRhLmdyb3VwQXR0cmlidXRlUm93SWQ7XHJcbiAgICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IHRoaXMuY2hpbGRBdHRyaWJ1dGVzO1xyXG5cclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC1sZ1wifSkucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwiU2F2ZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVHcmlkUm93KGlkR3JvdXBBdHRyaWJ1dGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09PSBcIkNhbmNlbFwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbEVkaXRDb2RHcmlkUm93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAocmVhc29uKSA9PiB7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVHcmlkUm93KGlkR3JvdXBBdHRyaWJ1dGU6IG51bWJlcikge1xyXG4gICAgY29uc29sZS5sb2coXCJyZW1vdmUgZ3JpZCByb3c6IFwiICsgaWRHcm91cEF0dHJpYnV0ZSk7XHJcbiAgICAvL2xldCBzZWxlY3RlZENvbHVtbnM6IFJvd05vZGVbXSA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnM6IElSb3dOb2RlPGFueT5bXSA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXR0cmlidXRlU2VydmljZS5kZWxldGVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHNlbGVjdGVkQ29sdW1uc1swXS5kYXRhLmdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdENvZEdyaWRSb3coKSB7XHJcbiAgICB0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuY2xlYXJVcGRhdGVkR3JpZFJvd0F0dHJpYnV0ZVZhbHVlcyh0aGlzLmVkaXRHcm91cEF0dHJpYnV0ZVJvd0lkKTtcclxuICAgIHRoaXMuZWRpdEdyb3VwUm93QXR0cmlidXRlcyA9IFtdO1xyXG4gICAgdGhpcy5lZGl0R3JvdXBBdHRyaWJ1dGVSb3dJZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBWYWx1ZXMgZm9yIGEgbmV3IGdyaWQgcm93IGFyZSBzdG9yZWQgc2VwYXJhdGVseS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhhdCBkYXRhIHRvIHRoZSBjdXJyZW50IGdyaWQgZGF0YSBhbmRcclxuICAgKiBwdXNoIHRoZSB2YWx1ZXMgdG8gdGhlIHNlcnZpY2UuXHJcbiAgICovXHJcbiAgc2F2ZUdyaWRSb3coaWRHcm91cEF0dHJpYnV0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcInNhdmUgZ3JpZCByb3dcIik7XHJcblxyXG4gICAgdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVHcmlkUm93QXR0cmlidXRlVmFsdWVzKGlkR3JvdXBBdHRyaWJ1dGUsIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQpO1xyXG5cclxuICAgIHRoaXMuZWRpdEdyb3VwQXR0cmlidXRlUm93SWQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmVkaXRHcm91cFJvd0F0dHJpYnV0ZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYm9GaWx0ZXJWYWx1ZUdldHRlcihwYXJhbXMpOiBhbnkge1xyXG4gICAgbGV0IHZhbHVlID0gcGFyYW1zLmRhdGFbcGFyYW1zLmNvbERlZi5maWVsZF07XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbGV0IG9wdGlvbiA9ICgocGFyYW1zLmNvbERlZiBhcyBhbnkpLnNlbGVjdE9wdGlvbnMgYXMgYW55W10pLmZpbmQoKGVudHJ5KSA9PiAoZW50cnlbcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zVmFsdWVGaWVsZF0gPT09IHZhbHVlKSk7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zRGlzcGxheUZpZWxkXSA6IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcbn1cclxuIl19