cax-design-system 2.7.11 → 2.7.12

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.
@@ -96,7 +96,8 @@ export class CommentboxComponent {
96
96
  clearInterval(this.dateUpdateInterval);
97
97
  }
98
98
  // Disconnect the observer
99
- this.observer.disconnect();
99
+ if (this.observer)
100
+ this.observer.disconnect();
100
101
  // Remove event listeners
101
102
  document.removeEventListener('click', this.handleClickOutside);
102
103
  }
@@ -571,4 +572,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
571
572
  type: HostListener,
572
573
  args: ['document:click', ['$event']]
573
574
  }] } });
574
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9jb21tZW50Ym94L2NvbW1lbnRib3gudHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvY29tbWVudGJveC9jb21tZW50Ym94Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQXNCcEgsTUFBTSxPQUFPLG1CQUFtQjtJQXdEaEI7SUFDQTtJQXhESixTQUFTLEdBQWMsRUFBRSxDQUFDO0lBQ2xDLElBQWEsUUFBUSxDQUFDLEtBQWdCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBQ1Esa0JBQWtCLEdBQVUsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFVLEVBQUUsQ0FBQztJQUMvQixhQUFhLENBQVM7SUFDdEIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixXQUFXLEdBQVcsbURBQW1ELENBQUM7SUFDekUsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdkMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDeEMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFrQyxDQUFDO0lBQ2xFLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQzVDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ25E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QUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFZaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNRLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNKLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYSxZQUFZO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0QsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQXlKVCxPQUFPO3NCQUFuQixLQUFLO2dCQThDTixlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG4vLyBBZGQgdGhpcyBpbnRlcmZhY2UgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZVxuaW50ZXJmYWNlIENvbW1lbnQge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBkYXRlOiBEYXRlO1xuICAgIGZpbGVzPzogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHNpemU6IHN0cmluZyB9PjtcbiAgICBpc0FkbWluPzogYm9vbGVhbjtcbiAgICBzZW5kZXI/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBHcm91cGVkQ29tbWVudHMge1xuICAgIGRhdGU6IERhdGU7XG4gICAgaXRlbXM6IENvbW1lbnRbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjYXgtY29tbWVudHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21tZW50Ym94Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbW1lbnRib3guc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbW1lbnRib3hDb21wb25lbnQge1xuICAgIHByaXZhdGUgX2NvbW1lbnRzOiBDb21tZW50W10gPSBbXTtcbiAgICBASW5wdXQoKSBzZXQgY29tbWVudHModmFsdWU6IENvbW1lbnRbXSkge1xuICAgICAgICB0aGlzLl9jb21tZW50cyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbiAgICAgICAgdGhpcy5yZWNvbXB1dGVHcm91cGVkQ29tbWVudHMoKTtcbiAgICB9XG4gICAgZ2V0IGNvbW1lbnRzKCk6IENvbW1lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tZW50cztcbiAgICB9XG4gICAgQElucHV0KCkgbWVudGlvblN1Z2dlc3Rpb25zOiBhbnlbXSA9IFtdO1xuICAgIEBJbnB1dCgpIGhhc2h0YWdTdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgICBASW5wdXQoKSBzaWRlYmFySGVhZGVyOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaXNBZG1pbjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdDb21tZW50IG9yIG1lbnRpb24gb3RoZXJzIHdpdGggQCwg4oCYI+KAmSBmb3IgY29sdW1ucyc7XG4gICAgQE91dHB1dCgpIGNvbW1lbnRBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBmaWxlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG4gICAgQE91dHB1dCgpIGZpbGVEb3dubG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmc7IHNpemU6IHN0cmluZyB9PigpO1xuICAgIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBvblNpZGViYXJIaWRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIG5ld0NvbW1lbnQ6IHN0cmluZyA9ICcnO1xuXG4gICAgaXNNZW50aW9uaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgaXNIYXNodGFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHN1Z2dlc3Rpb25zOiBhbnlbXSA9IFtdO1xuICAgIHNlbGVjdGVkU3VnZ2VzdGlvbjogYW55ID0gbnVsbDtcbiAgICBzZWxlY3RlZFN1Z2dlc3Rpb25JbmRleDogbnVtYmVyID0gLTE7XG4gICAgZmlsdGVyZWRTdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgICBjdXJyZW50VG9rZW5UeXBlOiAnbWVudGlvbicgfCAnaGFzaHRhZycgfCBudWxsID0gbnVsbDtcbiAgICBjdXJzb3JQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnc3VnZ2VzdGlvblBhbmVsJykgc3VnZ2VzdGlvblBhbmVsITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdpbnB1dFRleHQnKSBpbnB1dFRleHQhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2NvbW1lbnRzTGlzdCcpIHByaXZhdGUgY29tbWVudHNMaXN0ITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdjb3VudENoaXAnKSBjb3VudENoaXAhOiBFbGVtZW50UmVmO1xuICAgIHNlbGVjdGVkRmlsZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBzaXplOiBzdHJpbmcgfT4gPSBbXTtcbiAgICBzZWxlY3RlZEZpbGVzTWFwOiBNYXA8bnVtYmVyLCB7IG5hbWU6IHN0cmluZzsgc2l6ZTogc3RyaW5nIH0+ID0gbmV3IE1hcCgpO1xuXG4gICAgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGdyb3VwZWRDb21tZW50c0NhY2hlOiBHcm91cGVkQ29tbWVudHNbXSA9IFtdO1xuXG4gICAgb3ZlcmxheVZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBmaWxlc092ZXJsYXlWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgb3ZlcmxheVBvc2l0aW9uID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuICAgIHByaXZhdGUgZGF0ZVVwZGF0ZUludGVydmFsOiBhbnk7XG5cbiAgICAvLyBLZWVwIHRyYWNrIG9mIHNob3VsZCBhdXRvIHNjcm9sbFxuICAgIHByaXZhdGUgc2hvdWxkQXV0b1Njcm9sbCA9IHRydWU7XG4gICAgcHJpdmF0ZSBpc1VzZXJTY3JvbGxpbmcgPSBmYWxzZTtcblxuICAgIC8vIEFkZCBuZXcgcHJvcGVydHkgZm9yIG11dGF0aW9uIG9ic2VydmVyXG4gICAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgICBwcml2YXRlIHNjcm9sbFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHtcbiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50RGF0ZSgpO1xuICAgICAgICAvLyBSdW4gdGhlIGludGVydmFsIG91dHNpZGUgQW5ndWxhciB0byBhdm9pZCBmcmVxdWVudCBjaGFuZ2UgZGV0ZWN0aW9uIGluIGRvY3MvY2FudmFzXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVVwZGF0ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnVwZGF0ZUN1cnJlbnREYXRlKCkpO1xuICAgICAgICAgICAgfSwgNjAwMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JjZVNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgLy8gU2V0IHVwIG9ic2VydmVyIHRvIGF1dG8tc2Nyb2xsIHdoZW4gY29udGVudCBjaGFuZ2VzIChvdXRzaWRlIEFuZ3VsYXIpXG4gICAgICAgIGlmICh0aGlzLmNvbW1lbnRzTGlzdD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbFF1ZXVlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFF1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlU2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsUXVldWVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNvbW1lbnRzTGlzdC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVVwZGF0ZUludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuZGF0ZVVwZGF0ZUludGVydmFsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSBvYnNlcnZlclxuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblxuICAgICAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ3VycmVudERhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgIHRpbWVab25lOiBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9ybWF0TWVzc2FnZVdpdGhUYWdzKHRleHQ6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZFRleHQgPSB0ZXh0LnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgICAgICAgY29uc3QgaHRtbENvbnRlbnQgPSBzYW5pdGl6ZWRUZXh0LnJlcGxhY2UoLyhAXFx3K3wjXFx3KykvZywgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2guc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIm1lbnRpb25cIiBzdHlsZT1cImNvbG9yOiAjMEM0QUYzOyBmb250LXdlaWdodDogNjAwO1wiPiR7bWF0Y2h9PC9zcGFuPmA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCJoYXNodGFnXCIgc3R5bGU9XCJjb2xvcjogIzBDNEFGMzsgZm9udC13ZWlnaHQ6IDYwMDtcIj4ke21hdGNofTwvc3Bhbj5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbENvbnRlbnQpO1xuICAgIH1cblxuICAgIGFkZENvbW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5ld0NvbW1lbnQudHJpbSgpIHx8IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDb21tZW50OiBDb21tZW50ID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubmV3Q29tbWVudCxcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIGZpbGVzOiB0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoID4gMCA/IFsuLi50aGlzLnNlbGVjdGVkRmlsZXNdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGlzQWRtaW46IHRoaXMuaXNBZG1pbixcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMuaXNBZG1pbiA/ICdTeXN0ZW0gQWRtaW4nIDogJ1VzZXInXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmNvbW1lbnRzID0gWy4uLnRoaXMuY29tbWVudHMsIG5ld0NvbW1lbnRdO1xuICAgICAgICAgICAgdGhpcy5jb21tZW50QWRkZWQuZW1pdChuZXdDb21tZW50KTtcbiAgICAgICAgICAgIHRoaXMubmV3Q29tbWVudCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXNNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZXNPdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uUGFuZWw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25QYW5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyBzY3JvbGwgdG8gYm90dG9tIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5yZWNvbXB1dGVHcm91cGVkQ29tbWVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZm9yY2VTY3JvbGxUb0JvdHRvbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1lbnRzTGlzdD8ubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb21tZW50c0xpc3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gbm8tb3BcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2Nyb2xsVG9Cb3R0b20oZm9yY2UgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VTY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb21tZW50c0xpc3Q/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb21tZW50c0xpc3QubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAvLyBTaW5nbGUgUkFGIHRvIGF2b2lkIG5lc3RlZCBzY2hlZHVsaW5nIG92ZXJoZWFkIGluIFN0b3J5Ym9va1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsVG8oeyB0b3A6IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IH0pO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Zpc2libGUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlID0gdmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkQXV0b1Njcm9sbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvQm90dG9tKHRydWUpLCAzMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHRvZ2dsZUNvbW1lbnRzKCkge1xuICAgICAgICBpZiAodGhpcy5fdmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlQ29tbWVudHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbW1lbnRzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93Q29tbWVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fdmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc2hvdWxkQXV0b1Njcm9sbCA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9Cb3R0b20odHJ1ZSksIDMwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlQ29tbWVudHMoKSB7XG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLm9uU2lkZWJhckhpZGUuZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlU2lkZWJhckhpZGUoKSB7XG4gICAgICAgIHRoaXMuaGlkZUNvbW1lbnRzKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICAgIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzSW5wdXRDbGljayA9IHRoaXMuaW5wdXRUZXh0Py5uYXRpdmVFbGVtZW50Py5jb250YWlucyh0YXJnZXQpO1xuICAgICAgICBjb25zdCBpc1BhbmVsQ2xpY2sgPSB0aGlzLnN1Z2dlc3Rpb25QYW5lbD8ubmF0aXZlRWxlbWVudD8uY29udGFpbnModGFyZ2V0KTtcblxuICAgICAgICBpZiAoIWlzSW5wdXRDbGljayAmJiAhaXNQYW5lbENsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlblR5cGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVLZXlVcChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIFVwZGF0ZSBjdXJzb3IgcG9zaXRpb24gb24gZXZlcnkga2V5IHByZXNzXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgfHwgMDtcblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5UeXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0AnIHx8IGV2ZW50LmtleSA9PT0gJyMnKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlblR5cGUgPSBldmVudC5rZXkgPT09ICdAJyA/ICdtZW50aW9uJyA6ICdoYXNodGFnJztcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9IHRoaXMuY3VycmVudFRva2VuVHlwZSA9PT0gJ21lbnRpb24nID8gdGhpcy5tZW50aW9uU3VnZ2VzdGlvbnMgOiB0aGlzLmhhc2h0YWdTdWdnZXN0aW9ucztcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSAwO1xuXG4gICAgICAgICAgICBjb25zdCByZWN0ID0gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oaW5wdXQpO1xuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zdWdnZXN0aW9uUGFuZWw/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBgJHtyZWN0LmxlZnQgKyBjdXJzb3JQb3NpdGlvbi5sZWZ0fXB4YDtcbiAgICAgICAgICAgICAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gYCR7cmVjdC50b3AgLSAxMH1weGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW5UeXBlKSB7XG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW5BdEN1cnNvcihpbnB1dC52YWx1ZSwgdGhpcy5jdXJzb3JQb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gdG9rZW4uc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMgPSAodGhpcy5jdXJyZW50VG9rZW5UeXBlID09PSAnbWVudGlvbicgPyB0aGlzLm1lbnRpb25TdWdnZXN0aW9ucyA6IHRoaXMuaGFzaHRhZ1N1Z2dlc3Rpb25zKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pIHx8IGl0ZW0uaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVzZXQgc2VsZWN0aW9uIGluZGV4IGlmIHdlIGhhdmUgbmV3IHN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4IDwgMCB8fCB0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID49IHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5UeXBlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFRva2VuQXRDdXJzb3IodGV4dDogc3RyaW5nLCBjdXJzb3JQb3M6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBiZWZvcmVDdXJzb3IgPSB0ZXh0LnNsaWNlKDAsIGN1cnNvclBvcyk7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gYmVmb3JlQ3Vyc29yLm1hdGNoKC9bQCNdW15cXHNdKiQvKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiBudWxsO1xuICAgIH1cblxuICAgIGdldFdvcmRBdFBvc2l0aW9uKHRleHQ6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0ZXh0LnNsaWNlKDAsIHBvc2l0aW9uKS5zZWFyY2goL1tAI11bXlxcc10qJC8pO1xuICAgICAgICBpZiAobGVmdCA9PT0gLTEpIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UobGVmdCwgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIHNlbGVjdFN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogYW55KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5uZXdDb21tZW50O1xuICAgICAgICBjb25zdCB3b3JkU3RhcnQgPSBpbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvclBvc2l0aW9uKS5zZWFyY2goL1tAI11bXlxcc10qJC8pO1xuXG4gICAgICAgIHRoaXMubmV3Q29tbWVudCA9IGlucHV0LnNsaWNlKDAsIHdvcmRTdGFydCkgKyBzdWdnZXN0aW9uLnZhbHVlICsgJyAnICsgaW5wdXQuc2xpY2UodGhpcy5jdXJzb3JQb3NpdGlvbik7XG5cbiAgICAgICAgdGhpcy5pc01lbnRpb25pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0hhc2h0YWdnaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25TdWdnZXN0aW9uU2VsZWN0KGl0ZW06IGFueSkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMubmV3Q29tbWVudDtcbiAgICAgICAgY29uc3QgYmVmb3JlQ3Vyc29yID0gaW5wdXQuc2xpY2UoMCwgdGhpcy5jdXJzb3JQb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGFmdGVyQ3Vyc29yID0gaW5wdXQuc2xpY2UodGhpcy5jdXJzb3JQb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGxhc3RUb2tlbkluZGV4ID0gTWF0aC5tYXgoYmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKCdAJyksIGJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZignIycpKTtcblxuICAgICAgICBpZiAobGFzdFRva2VuSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBzdWdnZXN0aW9uIGF0IHRoZSBjdXJzb3IgcG9zaXRpb25cbiAgICAgICAgICAgIHRoaXMubmV3Q29tbWVudCA9IGJlZm9yZUN1cnNvci5zbGljZSgwLCBsYXN0VG9rZW5JbmRleCkgKyBpdGVtLmlkICsgJyAnICsgYWZ0ZXJDdXJzb3I7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25QYW5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5UeXBlID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSAtMTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWwgPSB0aGlzLmlucHV0VGV4dC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpZiAoaW5wdXRFbCkge1xuICAgICAgICAgICAgICAgIGlucHV0RWwuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25TdWdnZXN0aW9uUGFuZWxIaWRlKCkge1xuICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuVHlwZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7XG4gICAgfVxuXG4gICAgZ2V0Q3Vyc29yUG9zaXRpb24oaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgfHwgMDtcbiAgICAgICAgY29uc3QgdGV4dEJlZm9yZUN1cnNvciA9IGlucHV0LnZhbHVlLnN1YnN0cmluZygwLCBzZWxlY3Rpb25TdGFydCk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSB0ZXh0QmVmb3JlQ3Vyc29yO1xuICAgICAgICBzcGFuLnN0eWxlLmNzc1RleHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbnB1dCwgbnVsbCkuY3NzVGV4dDtcbiAgICAgICAgc3Bhbi5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3Bhbik7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgbGVmdDogc3Bhbi5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIHRvcDogc3Bhbi5vZmZzZXRIZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChzcGFuKTtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIG9uRmlsZUljb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUlucHV0Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVJbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkZpbGVTZWxlY3QoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGlucHV0LmZpbGVzKS5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRXhpc3RzID0gdGhpcy5zZWxlY3RlZEZpbGVzLnNvbWUoKGV4aXN0aW5nRmlsZSkgPT4gZXhpc3RpbmdGaWxlLm5hbWUgPT09IGZpbGUubmFtZSAmJiBleGlzdGluZ0ZpbGUuc2l6ZSA9PT0gdGhpcy5mb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpKTtcblxuICAgICAgICAgICAgICAgIGlmICghZmlsZUV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWxlSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMucHVzaChmaWxlSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlc01hcC5zZXQodGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aCAtIDEsIGZpbGVJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2hhdC1pbnB1dCBpbnB1dCcpO1xuICAgICAgICAgICAgaWYgKGlucHV0RWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlucHV0RWwuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRmlsZVN0YXRlKGluZGV4OiBudW1iZXIsIGZyb21DaGlwOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBhY3R1YWxJbmRleCA9IGZyb21DaGlwID8gaW5kZXggOiBpbmRleCArIDQ7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IHRoaXMuc2VsZWN0ZWRGaWxlcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGFjdHVhbEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzTWFwLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5mb3JFYWNoKChmaWxlLCBpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXNNYXAuc2V0KGksIGZpbGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVGaWxlKGluZGV4OiBudW1iZXIsIGZyb21DaGlwOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGVTdGF0ZShpbmRleCwgZnJvbUNoaXApO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aCA8PSA0KSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVGaWxlc092ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE92ZXJmbG93Q291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmV0dXJuIGNvdW50IG9mIGZpbGVzIGJleW9uZCB0aGUgZmlyc3QgNFxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aCAtIDQpO1xuICAgIH1cblxuICAgIHNob3dGaWxlc092ZXJsYXkoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAvLyBQb3NpdGlvbiB0aGUgb3ZlcmxheSBiZWxvdyB0aGUgY291bnQgY2hpcFxuICAgICAgICB0aGlzLm92ZXJsYXlQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHRvcDogcmVjdC5ib3R0b20gKyA1LFxuICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0IC0gMjUwICsgcmVjdC53aWR0aCAvIDIgLy8gQ2VudGVyIHRoZSBvdmVybGF5IGhvcml6b250YWxseVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZmlsZXNPdmVybGF5VmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgLy8gQWRkIGEgY2xpY2sgb3V0c2lkZSBsaXN0ZW5lciB0byBjbG9zZSB0aGUgb3ZlcmxheVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoaWRlRmlsZXNPdmVybGF5KCkge1xuICAgICAgICB0aGlzLmZpbGVzT3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmZpbGVzLW92ZXJsYXknKTtcbiAgICAgICAgY29uc3QgY291bnRDaGlwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvdW50LWNoaXAnKTtcblxuICAgICAgICBpZiAob3ZlcmxheSAmJiAhb3ZlcmxheS5jb250YWlucyh0YXJnZXQpICYmIGNvdW50Q2hpcCAmJiAhY291bnRDaGlwLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZUZpbGVzT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAnMCBCeXRlcyc7XG4gICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InXTtcbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyAnICcgKyBzaXplc1tpXTtcbiAgICB9XG5cbiAgICBzaG93U3VnZ2VzdGlvbnMoX2V2ZW50OiBhbnksIHR5cGU6ICdtZW50aW9uJyB8ICdoYXNodGFnJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlblR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMgPSB0eXBlID09PSAnbWVudGlvbicgPyB0aGlzLm1lbnRpb25TdWdnZXN0aW9ucyA6IHRoaXMuaGFzaHRhZ1N1Z2dlc3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uUGFuZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvblBhbmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIElmIHN1Z2dlc3Rpb25zIGFyZSB2aXNpYmxlLCBoYW5kbGUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5taW4odGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCArIDEsIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWdnZXN0aW9uSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSBNYXRoLm1heCh0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4IC0gMSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3VnZ2VzdGlvbkludG9WaWV3KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hpZnQrVGFiIC0gbW92ZSB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9IE1hdGgubWF4KHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggLSAxLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhYiAtIG1vdmUgZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9IE1hdGgubWluKHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggKyAxLCB0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWdnZXN0aW9uSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvblNlbGVjdCh0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TdWdnZXN0aW9uUGFuZWxIaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbm8gc3VnZ2VzdGlvbnMgYXJlIHZpc2libGUsIGhhbmRsZSBub3JtYWwgZW50ZXIga2V5IHByZXNzXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5hZGRDb21tZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgbWV0aG9kIHRvIHNjcm9sbCB0aGUgc2VsZWN0ZWQgc3VnZ2VzdGlvbiBpbnRvIHZpZXdcbiAgICBwcml2YXRlIHNjcm9sbFN1Z2dlc3Rpb25JbnRvVmlldygpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9uTGlzdCA9IHRoaXMuc3VnZ2VzdGlvblBhbmVsPy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdWdnZXN0aW9uLWxpc3QnKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IHN1Z2dlc3Rpb25MaXN0Py5xdWVyeVNlbGVjdG9yKCcuc3VnZ2VzdGlvbi1pdGVtLnNlbGVjdGVkJyk7XG5cbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uTGlzdCAmJiBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0UmVjdCA9IHN1Z2dlc3Rpb25MaXN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWN0ID0gc2VsZWN0ZWRJdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgb3V0c2lkZSB0aGUgdmlzaWJsZSBhcmVhXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1SZWN0LmJvdHRvbSA+IGxpc3RSZWN0LmJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJdGVtIGlzIGJlbG93IHRoZSB2aXNpYmxlIGFyZWFcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtUmVjdC50b3AgPCBsaXN0UmVjdC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSXRlbSBpcyBhYm92ZSB0aGUgdmlzaWJsZSBhcmVhXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbS5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnc3RhcnQnLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZpbGVEb3dubG9hZChmaWxlOiB7IG5hbWU6IHN0cmluZzsgc2l6ZTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5maWxlRG93bmxvYWQuZW1pdChmaWxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29tcHV0ZUdyb3VwZWRDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gdGhpcy5fY29tbWVudHMucmVkdWNlKChhY2M6IEdyb3VwZWRDb21tZW50c1tdLCBjb21tZW50OiBDb21tZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21tZW50RGF0ZSA9IG5ldyBEYXRlKGNvbW1lbnQuZGF0ZSk7XG4gICAgICAgICAgICBjb21tZW50RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcblxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdHcm91cCA9IGFjYy5maW5kKChncm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwRGF0ZSA9IG5ldyBEYXRlKGdyb3VwLmRhdGUpO1xuICAgICAgICAgICAgICAgIGdyb3VwRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBEYXRlLmdldFRpbWUoKSA9PT0gY29tbWVudERhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChleGlzdGluZ0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdHcm91cC5pdGVtcy5wdXNoKGNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY2MucHVzaCh7IGRhdGU6IGNvbW1lbnREYXRlLCBpdGVtczogW2NvbW1lbnRdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbW1lbnRzQ2FjaGUgPSBncm91cHMuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH1cblxuICAgIGdldFNob3J0RmlsZU5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChmaWxlbmFtZS5sZW5ndGggPD0gNCkgcmV0dXJuIGZpbGVuYW1lO1xuXG4gICAgICAgIC8vIEdldCBmaWxlIGV4dGVuc2lvblxuICAgICAgICBjb25zdCBsYXN0RG90SW5kZXggPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBsYXN0RG90SW5kZXggIT09IC0xID8gZmlsZW5hbWUuc3Vic3RyaW5nKGxhc3REb3RJbmRleCkgOiAnJztcblxuICAgICAgICAvLyBUcnVuY2F0ZSB0aGUgbmFtZSBwYXJ0IGFuZCBhZGQgdGhlIGV4dGVuc2lvblxuICAgICAgICBjb25zdCBuYW1lUGFydCA9IGZpbGVuYW1lLnN1YnN0cmluZygwLCBsYXN0RG90SW5kZXggIT09IC0xID8gbGFzdERvdEluZGV4IDogZmlsZW5hbWUubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIG5hbWVQYXJ0LnN1YnN0cmluZygwLCA0KSArICcuLicgKyBleHRlbnNpb247XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cInZpc2libGVcIiBjbGFzcz1cImNheC1jb21tZW50cy13cmFwcGVyXCI+XHJcbiAgICA8IS0tIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cImNvbnRlbnRcIj4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F4LWNvbW1lbnRzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtY29tbWVudHMtbGlzdFwiICNjb21tZW50c0xpc3Q+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwZWRDb21tZW50c0NhY2hlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWRhdGUtaGVhZGVyXCI+e3sgZm9ybWF0RGF0ZShncm91cC5kYXRlKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F4LWNvbW1lbnQtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbW1lbnQgb2YgZ3JvdXAuaXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXgtdXNlci1jb21tZW50JzogIWNvbW1lbnQuaXNBZG1pbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXgtYWRtaW4tY29tbWVudCc6IGNvbW1lbnQuaXNBZG1pbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25zZWN1dGl2ZS1tZXNzYWdlJzogaSA+IDAgJiYgY29tbWVudC5pc0FkbWluID09PSBncm91cC5pdGVtc1tpLTFdLmlzQWRtaW4gJiYgY29tbWVudC5zZW5kZXIgPT09IGdyb3VwLml0ZW1zW2ktMV0uc2VuZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldy1zZW5kZXInOiBpID4gMCAmJiBjb21tZW50LnNlbmRlciAhPT0gZ3JvdXAuaXRlbXNbaS0xXS5zZW5kZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3LWRhdGUnOiBpID09PSAwICYmIGdyb3VwLml0ZW1zLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBVc2VyIE1lc3NhZ2UgKExlZnQgQWxpZ25lZCkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb21tZW50LmlzQWRtaW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jb21tZW50Ym94LWF2YXRhci1jb250YWluZXJcIiAqbmdJZj1cImkgPT09IDAgfHwgZ3JvdXAuaXRlbXNbaS0xXS5zZW5kZXIgIT09IGNvbW1lbnQuc2VuZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2F4LWF2YXRhciBbbGFiZWxdPVwiY29tbWVudC5zZW5kZXI/LnN1YnN0cmluZygwLCAyKS50b1VwcGVyQ2FzZSgpIHx8ICdVJ1wiIFthdmF0YXJTaXplXT1cIid4cydcIiBbc2hhcGVdPVwiJ2NpcmNsZSdcIiBzdHlsZWNsYXNzPVwiY2F4LWNvbW1lbnRib3gtYXZhdGFyXCI+IDwvY2F4LWF2YXRhcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtY29tbWVudC1jb250ZW50XCIgW2NsYXNzLm5vLWF2YXRhcl09XCJpID4gMCAmJiBncm91cC5pdGVtc1tpLTFdLnNlbmRlciA9PT0gY29tbWVudC5zZW5kZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtY29tbWVudC1zZW5kZXJcIiAqbmdJZj1cImkgPT09IDAgfHwgZ3JvdXAuaXRlbXNbaS0xXS5zZW5kZXIgIT09IGNvbW1lbnQuc2VuZGVyXCI+e3tjb21tZW50LnNlbmRlcn19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWZpbGUtYXR0YWNobWVudFwiICpuZ0lmPVwiY29tbWVudC5maWxlcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBjb21tZW50LmZpbGVzXCIgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLW5hbWVcIj57eyBmaWxlLm5hbWUuc2xpY2UoMCwgMjApIH19e3sgZmlsZS5uYW1lLmluY2x1ZGVzKCcuJykgPyAnLicgKyBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSA6ICcnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXNpemVcIj57e2ZpbGUuc2l6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWRvd25sb2FkXCIgKGNsaWNrKT1cIm9uRmlsZURvd25sb2FkKGZpbGUpXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jb21tZW50LXRleHRcIiBbaW5uZXJIVE1MXT1cImZvcm1hdE1lc3NhZ2VXaXRoVGFncyhjb21tZW50LnRleHQpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNheC1jb21tZW50LWRhdGVcIj57eyBjb21tZW50LmRhdGUgfCBkYXRlOiAnc2hvcnRUaW1lJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWRtaW4gTWVzc2FnZSAoUmlnaHQgQWxpZ25lZCkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbW1lbnQuaXNBZG1pblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWNvbW1lbnQtY29udGVudCBhZG1pblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1maWxlLWF0dGFjaG1lbnRcIiAqbmdJZj1cImNvbW1lbnQuZmlsZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgY29tbWVudC5maWxlc1wiIGNsYXNzPVwiZmlsZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWRldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1uYW1lXCI+e3sgZmlsZS5uYW1lLnNsaWNlKDAsIDIwKSB9fXt7IGZpbGUubmFtZS5pbmNsdWRlcygnLicpID8gJy4nICsgZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkgOiAnJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1zaXplXCI+e3tmaWxlLnNpemV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiY2F4IGNheC1kb3dubG9hZFwiIChjbGljayk9XCJvbkZpbGVEb3dubG9hZChmaWxlKVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtY29tbWVudC10ZXh0XCIgW2lubmVySFRNTF09XCJmb3JtYXRNZXNzYWdlV2l0aFRhZ3MoY29tbWVudC50ZXh0KVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXgtY29tbWVudC1kYXRlXCI+e3sgY29tbWVudC5kYXRlIHwgZGF0ZTogJ3Nob3J0VGltZScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIDwvbmctdGVtcGxhdGU+IC0tPlxyXG4gICAgPGNheC1vdmVybGF5ICNzdWdnZXN0aW9uUGFuZWwgWyh2aXNpYmxlKV09XCJvdmVybGF5VmlzaWJsZVwiIFthcHBlbmRUb109XCJpbnB1dFRleHRcIiAob25IaWRlKT1cIm9uU3VnZ2VzdGlvblBhbmVsSGlkZSgpXCIgW3N0eWxlQ2xhc3NdPVwiJ3N1Z2dlc3Rpb24tcGFuZWwnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcmVkU3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cInN1Z2dlc3Rpb24taXRlbVwiIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnOiBzZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9PT0gaX1cIiAoY2xpY2spPVwib25TdWdnZXN0aW9uU2VsZWN0KGl0ZW0pXCIgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSBpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Z2dlc3Rpb24tbGFiZWxcIj57e2l0ZW0ubmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwic3VnZ2VzdGlvbi1pZFwiICpuZ0lmPVwiY3VycmVudFRva2VuVHlwZSA9PT0gJ21lbnRpb24nXCI+e3tpdGVtLmlkfX08L3NtYWxsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvY2F4LW92ZXJsYXk+XHJcbiAgICA8Y2F4LW92ZXJsYXlcclxuICAgICAgICBbKHZpc2libGUpXT1cImZpbGVzT3ZlcmxheVZpc2libGVcIlxyXG4gICAgICAgIFthcHBlbmRUb109XCJjb3VudENoaXBcIlxyXG4gICAgICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzAuMTJzIGVhc2Utb3V0J1wiXHJcbiAgICAgICAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMC4xcyBlYXNlLWluJ1wiXHJcbiAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcyMjRweCcsIHJpZ2h0OiAnNSUnIH1cIlxyXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJmaWxlcy1saXN0LW92ZXJsYXlcIlxyXG4gICAgICAgIChvbkhpZGUpPVwiaGlkZUZpbGVzT3ZlcmxheSgpXCJcclxuICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZXMtb3ZlcmxheS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2Ygc2VsZWN0ZWRGaWxlcy5zbGljZSg0KTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiZmlsZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtbmFtZVwiPnt7Z2V0U2hvcnRGaWxlTmFtZShmaWxlLm5hbWUpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtY2xvc2UtY2lyY2xlXCIgKGNsaWNrKT1cInJlbW92ZUZpbGUoaSArIDQpXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvY2F4LW92ZXJsYXk+XHJcblxyXG4gICAgPCEtLSA8bmctdGVtcGxhdGUgY2F4VGVtcGxhdGU9XCJmb290ZXJcIj4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hhdC1mb290ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtZmlsZXNcIiAqbmdJZj1cInNlbGVjdGVkRmlsZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8Y2F4LWNoaXAgKm5nRm9yPVwibGV0IGZpbGUgb2Ygc2VsZWN0ZWRGaWxlcy5zbGljZSgwLCA0KTsgbGV0IGkgPSBpbmRleFwiIFtsYWJlbF09XCJnZXRTaG9ydEZpbGVOYW1lKGZpbGUubmFtZSlcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbc2l6ZV09XCInbGcnXCIgKG9uUmVtb3ZlKT1cInJlbW92ZUZpbGUoaSwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtcGFwZXJjbGlwXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9jYXgtY2hpcD5cclxuICAgICAgICAgICAgPGNheC1jaGlwICNjb3VudENoaXAgKm5nSWY9XCJzZWxlY3RlZEZpbGVzLmxlbmd0aCA+IDRcIiBbbGFiZWxdPVwiJysnICsgZ2V0T3ZlcmZsb3dDb3VudCgpXCIgW3NpemVdPVwiJ2xnJ1wiIChtb3VzZWVudGVyKT1cInNob3dGaWxlc092ZXJsYXkoJGV2ZW50KVwiPiA8L2NheC1jaGlwPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtY2hhdC1pbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxjYXgtaW5wdXR0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdDb21tZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCInbGcnXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmlnaHRJY29uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGVhckljb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyaWdodEljb25DbGFzc109XCInY2F4IGNheC1wYXBlcmNsaXAnXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmlnaHRJY29uQ2xpY2thYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyaWdodEljb25DbGljayk9XCJvbkZpbGVJY29uQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwiaGFuZGxlS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hhdC1pbnB1dCc6IHRydWUsICdhZG1pbi1pbnB1dCc6IGlzQWRtaW59XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieydib3JkZXItcmFkaXVzJzogJzhweCcsIGJhY2tncm91bmQ6ICcjZmZmZmZmJ31cIlxyXG4gICAgICAgICAgICAgICAgICAgICNpbnB1dFRleHRcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvY2F4LWlucHV0dGV4dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8Y2F4LWJ1dHRvbiBbaWNvbl09XCInY2F4IGNheC1wbGFpbidcIiBbc2V2ZXJpdHldPVwiJ3ByaW1hcnknXCIgW3NpemVdPVwiJ2xhcmdlJ1wiIChjbGljayk9XCJhZGRDb21tZW50KClcIiBbZGlzYWJsZWRdPVwiIW5ld0NvbW1lbnQudHJpbSgpICYmIHNlbGVjdGVkRmlsZXMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJzZW5kLWJ1dHRvblwiPiA8L2NheC1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50KVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIGFjY2VwdD1cIiovKlwiIG11bHRpcGxlIC8+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbjwvZGl2PlxyXG4iXX0=
575
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9jb21tZW50Ym94L2NvbW1lbnRib3gudHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvY29tbWVudGJveC9jb21tZW50Ym94Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQXNCcEgsTUFBTSxPQUFPLG1CQUFtQjtJQXdEaEI7SUFDQTtJQXhESixTQUFTLEdBQWMsRUFBRSxDQUFDO0lBQ2xDLElBQWEsUUFBUSxDQUFDLEtBQWdCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBQ1Esa0JBQWtCLEdBQVUsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFVLEVBQUUsQ0FBQztJQUMvQixhQUFhLENBQVM7SUFDdEIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixXQUFXLEdBQVcsbURBQW1ELENBQUM7SUFDekUsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdkMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDeEMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFrQyxDQUFDO0lBQ2xFLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQzVDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ25E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Y0FBYztzR0FNWCxRQUFRO3NCQUFwQixLQUFLO2dCQU9HLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBWWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDSixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ2EsWUFBWTtzQkFBOUMsU0FBUzt1QkFBQyxjQUFjO2dCQUNELFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkF5SlQsT0FBTztzQkFBbkIsS0FBSztnQkE4Q04sZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuLy8gQWRkIHRoaXMgaW50ZXJmYWNlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGVcbmludGVyZmFjZSBDb21tZW50IHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgZGF0ZTogRGF0ZTtcbiAgICBmaWxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBzaXplOiBzdHJpbmcgfT47XG4gICAgaXNBZG1pbj86IGJvb2xlYW47XG4gICAgc2VuZGVyPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgR3JvdXBlZENvbW1lbnRzIHtcbiAgICBkYXRlOiBEYXRlO1xuICAgIGl0ZW1zOiBDb21tZW50W107XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY2F4LWNvbW1lbnRzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tbWVudGJveC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb21tZW50Ym94LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDb21tZW50Ym94Q29tcG9uZW50IHtcbiAgICBwcml2YXRlIF9jb21tZW50czogQ29tbWVudFtdID0gW107XG4gICAgQElucHV0KCkgc2V0IGNvbW1lbnRzKHZhbHVlOiBDb21tZW50W10pIHtcbiAgICAgICAgdGhpcy5fY29tbWVudHMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgICAgIHRoaXMucmVjb21wdXRlR3JvdXBlZENvbW1lbnRzKCk7XG4gICAgfVxuICAgIGdldCBjb21tZW50cygpOiBDb21tZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tbWVudHM7XG4gICAgfVxuICAgIEBJbnB1dCgpIG1lbnRpb25TdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgICBASW5wdXQoKSBoYXNodGFnU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gICAgQElucHV0KCkgc2lkZWJhckhlYWRlcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlzQWRtaW46IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnQ29tbWVudCBvciBtZW50aW9uIG90aGVycyB3aXRoIEAsIOKAmCPigJkgZm9yIGNvbHVtbnMnO1xuICAgIEBPdXRwdXQoKSBjb21tZW50QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgZmlsZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlPigpO1xuICAgIEBPdXRwdXQoKSBmaWxlRG93bmxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nOyBzaXplOiBzdHJpbmcgfT4oKTtcbiAgICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgb25TaWRlYmFySGlkZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBuZXdDb21tZW50OiBzdHJpbmcgPSAnJztcblxuICAgIGlzTWVudGlvbmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzSGFzaHRhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzdWdnZXN0aW9uczogYW55W10gPSBbXTtcbiAgICBzZWxlY3RlZFN1Z2dlc3Rpb246IGFueSA9IG51bGw7XG4gICAgc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXg6IG51bWJlciA9IC0xO1xuICAgIGZpbHRlcmVkU3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gICAgY3VycmVudFRva2VuVHlwZTogJ21lbnRpb24nIHwgJ2hhc2h0YWcnIHwgbnVsbCA9IG51bGw7XG4gICAgY3Vyc29yUG9zaXRpb246IG51bWJlciA9IDA7XG5cbiAgICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKSBmaWxlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ3N1Z2dlc3Rpb25QYW5lbCcpIHN1Z2dlc3Rpb25QYW5lbCE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRUZXh0JykgaW5wdXRUZXh0ITogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdjb21tZW50c0xpc3QnKSBwcml2YXRlIGNvbW1lbnRzTGlzdCE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnY291bnRDaGlwJykgY291bnRDaGlwITogRWxlbWVudFJlZjtcbiAgICBzZWxlY3RlZEZpbGVzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgc2l6ZTogc3RyaW5nIH0+ID0gW107XG4gICAgc2VsZWN0ZWRGaWxlc01hcDogTWFwPG51bWJlciwgeyBuYW1lOiBzdHJpbmc7IHNpemU6IHN0cmluZyB9PiA9IG5ldyBNYXAoKTtcblxuICAgIHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcbiAgICBncm91cGVkQ29tbWVudHNDYWNoZTogR3JvdXBlZENvbW1lbnRzW10gPSBbXTtcblxuICAgIG92ZXJsYXlWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgZmlsZXNPdmVybGF5VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIG92ZXJsYXlQb3NpdGlvbiA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cbiAgICBwcml2YXRlIGRhdGVVcGRhdGVJbnRlcnZhbDogYW55O1xuXG4gICAgLy8gS2VlcCB0cmFjayBvZiBzaG91bGQgYXV0byBzY3JvbGxcbiAgICBwcml2YXRlIHNob3VsZEF1dG9TY3JvbGwgPSB0cnVlO1xuICAgIHByaXZhdGUgaXNVc2VyU2Nyb2xsaW5nID0gZmFsc2U7XG5cbiAgICAvLyBBZGQgbmV3IHByb3BlcnR5IGZvciBtdXRhdGlvbiBvYnNlcnZlclxuICAgIHByaXZhdGUgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgcHJpdmF0ZSBzY3JvbGxRdWV1ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ3VycmVudERhdGUoKTtcbiAgICAgICAgLy8gUnVuIHRoZSBpbnRlcnZhbCBvdXRzaWRlIEFuZ3VsYXIgdG8gYXZvaWQgZnJlcXVlbnQgY2hhbmdlIGRldGVjdGlvbiBpbiBkb2NzL2NhbnZhc1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGVVcGRhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy51cGRhdGVDdXJyZW50RGF0ZSgpKTtcbiAgICAgICAgICAgIH0sIDYwMDAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VTY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgIC8vIFNldCB1cCBvYnNlcnZlciB0byBhdXRvLXNjcm9sbCB3aGVuIGNvbnRlbnQgY2hhbmdlcyAob3V0c2lkZSBBbmd1bGFyKVxuICAgICAgICBpZiAodGhpcy5jb21tZW50c0xpc3Q/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxRdWV1ZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxRdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFF1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy5jb21tZW50c0xpc3QubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVVcGRhdGVJbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmRhdGVVcGRhdGVJbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgb2JzZXJ2ZXJcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDdXJyZW50RGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgICAgdGltZVpvbmU6IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3JtYXRNZXNzYWdlV2l0aFRhZ3ModGV4dDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgICAgICBpZiAoIXRleHQpIHJldHVybiAnJztcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkVGV4dCA9IHRleHQucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgICAgICBjb25zdCBodG1sQ29udGVudCA9IHNhbml0aXplZFRleHQucmVwbGFjZSgvKEBcXHcrfCNcXHcrKS9nLCAobWF0Y2gpID0+IHtcbiAgICAgICAgICAgIGlmIChtYXRjaC5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwibWVudGlvblwiIHN0eWxlPVwiY29sb3I6ICMwQzRBRjM7IGZvbnQtd2VpZ2h0OiA2MDA7XCI+JHttYXRjaH08L3NwYW4+YDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF0Y2guc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cImhhc2h0YWdcIiBzdHlsZT1cImNvbG9yOiAjMEM0QUYzOyBmb250LXdlaWdodDogNjAwO1wiPiR7bWF0Y2h9PC9zcGFuPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sQ29udGVudCk7XG4gICAgfVxuXG4gICAgYWRkQ29tbWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMubmV3Q29tbWVudC50cmltKCkgfHwgdGhpcy5zZWxlY3RlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NvbW1lbnQ6IENvbW1lbnQgPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5uZXdDb21tZW50LFxuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgZmlsZXM6IHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwID8gWy4uLnRoaXMuc2VsZWN0ZWRGaWxlc10gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgaXNBZG1pbjogdGhpcy5pc0FkbWluLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcy5pc0FkbWluID8gJ1N5c3RlbSBBZG1pbicgOiAnVXNlcidcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuY29tbWVudHMgPSBbLi4udGhpcy5jb21tZW50cywgbmV3Q29tbWVudF07XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnRBZGRlZC5lbWl0KG5ld0NvbW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5uZXdDb21tZW50ID0gJyc7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlc01hcC5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5maWxlc092ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25QYW5lbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvblBhbmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWx3YXlzIHNjcm9sbCB0byBib3R0b20gaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnJlY29tcHV0ZUdyb3VwZWRDb21tZW50cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JjZVNjcm9sbFRvQm90dG9tKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29tbWVudHNMaXN0Py5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbW1lbnRzTGlzdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBuby1vcFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb0JvdHRvbShmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChmb3JjZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JjZVNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbW1lbnRzTGlzdD8ubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbW1lbnRzTGlzdC5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIC8vIFNpbmdsZSBSQUYgdG8gYXZvaWQgbmVzdGVkIHNjaGVkdWxpbmcgb3ZlcmhlYWQgaW4gU3Rvcnlib29rXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUbyh7IHRvcDogZWxlbWVudC5zY3JvbGxIZWlnaHQgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fdmlzaWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Zpc2libGUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl92aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG91bGRBdXRvU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9Cb3R0b20odHJ1ZSksIDMwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgdG9nZ2xlQ29tbWVudHMoKSB7XG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVDb21tZW50cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93Q29tbWVudHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dDb21tZW50cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl92aXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zaG91bGRBdXRvU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zY3JvbGxUb0JvdHRvbSh0cnVlKSwgMzAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhpZGVDb21tZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMub25TaWRlYmFySGlkZS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVTaWRlYmFySGlkZSgpIHtcbiAgICAgICAgdGhpcy5oaWRlQ29tbWVudHMoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gICAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgaXNJbnB1dENsaWNrID0gdGhpcy5pbnB1dFRleHQ/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGlzUGFuZWxDbGljayA9IHRoaXMuc3VnZ2VzdGlvblBhbmVsPy5uYXRpdmVFbGVtZW50Py5jb250YWlucyh0YXJnZXQpO1xuXG4gICAgICAgIGlmICghaXNJbnB1dENsaWNrICYmICFpc1BhbmVsQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuVHlwZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZUtleVVwKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gVXBkYXRlIGN1cnNvciBwb3NpdGlvbiBvbiBldmVyeSBrZXkgcHJlc3NcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSBpbnB1dC5zZWxlY3Rpb25TdGFydCB8fCAwO1xuXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlblR5cGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQCcgfHwgZXZlbnQua2V5ID09PSAnIycpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuVHlwZSA9IGV2ZW50LmtleSA9PT0gJ0AnID8gJ21lbnRpb24nIDogJ2hhc2h0YWcnO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gdGhpcy5jdXJyZW50VG9rZW5UeXBlID09PSAnbWVudGlvbicgPyB0aGlzLm1lbnRpb25TdWdnZXN0aW9ucyA6IHRoaXMuaGFzaHRhZ1N1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBpbnB1dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihpbnB1dCk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnN1Z2dlc3Rpb25QYW5lbD8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFuZWwuc3R5bGUubGVmdCA9IGAke3JlY3QubGVmdCArIGN1cnNvclBvc2l0aW9uLmxlZnR9cHhgO1xuICAgICAgICAgICAgICAgICAgICBwYW5lbC5zdHlsZS50b3AgPSBgJHtyZWN0LnRvcCAtIDEwfXB4YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlblR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbkF0Q3Vyc29yKGlucHV0LnZhbHVlLCB0aGlzLmN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0b2tlbi5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9ICh0aGlzLmN1cnJlbnRUb2tlblR5cGUgPT09ICdtZW50aW9uJyA/IHRoaXMubWVudGlvblN1Z2dlc3Rpb25zIDogdGhpcy5oYXNodGFnU3VnZ2VzdGlvbnMpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSkgfHwgaXRlbS5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXNldCBzZWxlY3Rpb24gaW5kZXggaWYgd2UgaGF2ZSBuZXcgc3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPCAwIHx8IHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPj0gdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlblR5cGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VG9rZW5BdEN1cnNvcih0ZXh0OiBzdHJpbmcsIGN1cnNvclBvczogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGJlZm9yZUN1cnNvciA9IHRleHQuc2xpY2UoMCwgY3Vyc29yUG9zKTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBiZWZvcmVDdXJzb3IubWF0Y2goL1tAI11bXlxcc10qJC8pO1xuICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0V29yZEF0UG9zaXRpb24odGV4dDogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRleHQuc2xpY2UoMCwgcG9zaXRpb24pLnNlYXJjaCgvW0AjXVteXFxzXSokLyk7XG4gICAgICAgIGlmIChsZWZ0ID09PSAtMSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gdGV4dC5zbGljZShsZWZ0LCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgc2VsZWN0U3VnZ2VzdGlvbihzdWdnZXN0aW9uOiBhbnkpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLm5ld0NvbW1lbnQ7XG4gICAgICAgIGNvbnN0IHdvcmRTdGFydCA9IGlucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yUG9zaXRpb24pLnNlYXJjaCgvW0AjXVteXFxzXSokLyk7XG5cbiAgICAgICAgdGhpcy5uZXdDb21tZW50ID0gaW5wdXQuc2xpY2UoMCwgd29yZFN0YXJ0KSArIHN1Z2dlc3Rpb24udmFsdWUgKyAnICcgKyBpbnB1dC5zbGljZSh0aGlzLmN1cnNvclBvc2l0aW9uKTtcblxuICAgICAgICB0aGlzLmlzTWVudGlvbmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzSGFzaHRhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblN1Z2dlc3Rpb25TZWxlY3QoaXRlbTogYW55KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5uZXdDb21tZW50O1xuICAgICAgICBjb25zdCBiZWZvcmVDdXJzb3IgPSBpbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgYWZ0ZXJDdXJzb3IgPSBpbnB1dC5zbGljZSh0aGlzLmN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgbGFzdFRva2VuSW5kZXggPSBNYXRoLm1heChiZWZvcmVDdXJzb3IubGFzdEluZGV4T2YoJ0AnKSwgYmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKCcjJykpO1xuXG4gICAgICAgIGlmIChsYXN0VG9rZW5JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHN1Z2dlc3Rpb24gYXQgdGhlIGN1cnNvciBwb3NpdGlvblxuICAgICAgICAgICAgdGhpcy5uZXdDb21tZW50ID0gYmVmb3JlQ3Vyc29yLnNsaWNlKDAsIGxhc3RUb2tlbkluZGV4KSArIGl0ZW0uaWQgKyAnICcgKyBhZnRlckN1cnNvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvblBhbmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlblR5cGUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlcmVkU3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9IC0xO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuaW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgICAgIGlmIChpbnB1dEVsKSB7XG4gICAgICAgICAgICAgICAgaW5wdXRFbC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblN1Z2dlc3Rpb25QYW5lbEhpZGUoKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW5UeXBlID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICBnZXRDdXJzb3JQb3NpdGlvbihpbnB1dDogSFRNTElucHV0RWxlbWVudCk6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25TdGFydCB8fCAwO1xuICAgICAgICBjb25zdCB0ZXh0QmVmb3JlQ3Vyc29yID0gaW5wdXQudmFsdWUuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHRleHRCZWZvcmVDdXJzb3I7XG4gICAgICAgIHNwYW4uc3R5bGUuY3NzVGV4dCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0LCBudWxsKS5jc3NUZXh0O1xuICAgICAgICBzcGFuLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICAgICAgICBsZWZ0OiBzcGFuLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgdG9wOiBzcGFuLm9mZnNldEhlaWdodFxuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNwYW4pO1xuICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgb25GaWxlSWNvbkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5maWxlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRmlsZVNlbGVjdChldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIEFycmF5LmZyb20oaW5wdXQuZmlsZXMpLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzIGluIHNlbGVjdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVFeGlzdHMgPSB0aGlzLnNlbGVjdGVkRmlsZXMuc29tZSgoZXhpc3RpbmdGaWxlKSA9PiBleGlzdGluZ0ZpbGUubmFtZSA9PT0gZmlsZS5uYW1lICYmIGV4aXN0aW5nRmlsZS5zaXplID09PSB0aGlzLmZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFmaWxlRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVJbmZvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5mb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcy5wdXNoKGZpbGVJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzTWFwLnNldCh0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoIC0gMSwgZmlsZUluZm8pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jaGF0LWlucHV0IGlucHV0Jyk7XG4gICAgICAgICAgICBpZiAoaW5wdXRFbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaW5wdXRFbC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGaWxlU3RhdGUoaW5kZXg6IG51bWJlciwgZnJvbUNoaXA6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGFjdHVhbEluZGV4ID0gZnJvbUNoaXAgPyBpbmRleCA6IGluZGV4ICsgNDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzID0gdGhpcy5zZWxlY3RlZEZpbGVzLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gYWN0dWFsSW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZXNNYXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVzLmZvckVhY2goKGZpbGUsIGkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlc01hcC5zZXQoaSwgZmlsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZUZpbGUoaW5kZXg6IG51bWJlciwgZnJvbUNoaXA6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZVN0YXRlKGluZGV4LCBmcm9tQ2hpcCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoIDw9IDQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZUZpbGVzT3ZlcmxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3ZlcmZsb3dDb3VudCgpOiBudW1iZXIge1xuICAgICAgICAvLyBSZXR1cm4gY291bnQgb2YgZmlsZXMgYmV5b25kIHRoZSBmaXJzdCA0XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoIC0gNCk7XG4gICAgfVxuXG4gICAgc2hvd0ZpbGVzT3ZlcmxheShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIC8vIFBvc2l0aW9uIHRoZSBvdmVybGF5IGJlbG93IHRoZSBjb3VudCBjaGlwXG4gICAgICAgIHRoaXMub3ZlcmxheVBvc2l0aW9uID0ge1xuICAgICAgICAgICAgdG9wOiByZWN0LmJvdHRvbSArIDUsXG4gICAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQgLSAyNTAgKyByZWN0LndpZHRoIC8gMiAvLyBDZW50ZXIgdGhlIG92ZXJsYXkgaG9yaXpvbnRhbGx5XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5maWxlc092ZXJsYXlWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAvLyBBZGQgYSBjbGljayBvdXRzaWRlIGxpc3RlbmVyIHRvIGNsb3NlIHRoZSBvdmVybGF5XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhpZGVGaWxlc092ZXJsYXkoKSB7XG4gICAgICAgIHRoaXMuZmlsZXNPdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZmlsZXMtb3ZlcmxheScpO1xuICAgICAgICBjb25zdCBjb3VudENoaXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY291bnQtY2hpcCcpO1xuXG4gICAgICAgIGlmIChvdmVybGF5ICYmICFvdmVybGF5LmNvbnRhaW5zKHRhcmdldCkgJiYgY291bnRDaGlwICYmICFjb3VudENoaXAuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlRmlsZXNPdmVybGF5KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEJ5dGVzJztcbiAgICAgICAgY29uc3QgayA9IDEwMjQ7XG4gICAgICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQiddO1xuICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpKSArICcgJyArIHNpemVzW2ldO1xuICAgIH1cblxuICAgIHNob3dTdWdnZXN0aW9ucyhfZXZlbnQ6IGFueSwgdHlwZTogJ21lbnRpb24nIHwgJ2hhc2h0YWcnKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuVHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9IHR5cGUgPT09ICdtZW50aW9uJyA/IHRoaXMubWVudGlvblN1Z2dlc3Rpb25zIDogdGhpcy5oYXNodGFnU3VnZ2VzdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25QYW5lbCkge1xuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uUGFuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gSWYgc3VnZ2VzdGlvbnMgYXJlIHZpc2libGUsIGhhbmRsZSBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggPSBNYXRoLm1pbih0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ICsgMSwgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFN1Z2dlc3Rpb25JbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9IE1hdGgubWF4KHRoaXMuc2VsZWN0ZWRTdWdnZXN0aW9uSW5kZXggLSAxLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWdnZXN0aW9uSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaGlmdCtUYWIgLSBtb3ZlIHVwXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5tYXgodGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCAtIDEsIDApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFiIC0gbW92ZSBkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5taW4odGhpcy5zZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCArIDEsIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFN1Z2dlc3Rpb25JbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25TdWdnZXN0aW9uU2VsZWN0KHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9uc1t0aGlzLnNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25QYW5lbEhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBubyBzdWdnZXN0aW9ucyBhcmUgdmlzaWJsZSwgaGFuZGxlIG5vcm1hbCBlbnRlciBrZXkgcHJlc3NcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmFkZENvbW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhlbHBlciBtZXRob2QgdG8gc2Nyb2xsIHRoZSBzZWxlY3RlZCBzdWdnZXN0aW9uIGludG8gdmlld1xuICAgIHByaXZhdGUgc2Nyb2xsU3VnZ2VzdGlvbkludG9WaWV3KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25MaXN0ID0gdGhpcy5zdWdnZXN0aW9uUGFuZWw/Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnN1Z2dlc3Rpb24tbGlzdCcpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc3VnZ2VzdGlvbkxpc3Q/LnF1ZXJ5U2VsZWN0b3IoJy5zdWdnZXN0aW9uLWl0ZW0uc2VsZWN0ZWQnKTtcblxuICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25MaXN0ICYmIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RSZWN0ID0gc3VnZ2VzdGlvbkxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbVJlY3QgPSBzZWxlY3RlZEl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBvdXRzaWRlIHRoZSB2aXNpYmxlIGFyZWFcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVJlY3QuYm90dG9tID4gbGlzdFJlY3QuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEl0ZW0gaXMgYmVsb3cgdGhlIHZpc2libGUgYXJlYVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1SZWN0LnRvcCA8IGxpc3RSZWN0LnRvcCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJdGVtIGlzIGFib3ZlIHRoZSB2aXNpYmxlIGFyZWFcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdzdGFydCcsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRmlsZURvd25sb2FkKGZpbGU6IHsgbmFtZTogc3RyaW5nOyBzaXplOiBzdHJpbmcgfSkge1xuICAgICAgICB0aGlzLmZpbGVEb3dubG9hZC5lbWl0KGZpbGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVjb21wdXRlR3JvdXBlZENvbW1lbnRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLl9jb21tZW50cy5yZWR1Y2UoKGFjYzogR3JvdXBlZENvbW1lbnRzW10sIGNvbW1lbnQ6IENvbW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1lbnREYXRlID0gbmV3IERhdGUoY29tbWVudC5kYXRlKTtcbiAgICAgICAgICAgIGNvbW1lbnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0dyb3VwID0gYWNjLmZpbmQoKGdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBEYXRlID0gbmV3IERhdGUoZ3JvdXAuZGF0ZSk7XG4gICAgICAgICAgICAgICAgZ3JvdXBEYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBncm91cERhdGUuZ2V0VGltZSgpID09PSBjb21tZW50RGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nR3JvdXApIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ0dyb3VwLml0ZW1zLnB1c2goY29tbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjYy5wdXNoKHsgZGF0ZTogY29tbWVudERhdGUsIGl0ZW1zOiBbY29tbWVudF0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgdGhpcy5ncm91cGVkQ29tbWVudHNDYWNoZSA9IGdyb3Vwcy5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgZ2V0U2hvcnRGaWxlTmFtZShmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lLmxlbmd0aCA8PSA0KSByZXR1cm4gZmlsZW5hbWU7XG5cbiAgICAgICAgLy8gR2V0IGZpbGUgZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IGxhc3REb3RJbmRleCA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IGxhc3REb3RJbmRleCAhPT0gLTEgPyBmaWxlbmFtZS5zdWJzdHJpbmcobGFzdERvdEluZGV4KSA6ICcnO1xuXG4gICAgICAgIC8vIFRydW5jYXRlIHRoZSBuYW1lIHBhcnQgYW5kIGFkZCB0aGUgZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IG5hbWVQYXJ0ID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCAhPT0gLTEgPyBsYXN0RG90SW5kZXggOiBmaWxlbmFtZS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gbmFtZVBhcnQuc3Vic3RyaW5nKDAsIDQpICsgJy4uJyArIGV4dGVuc2lvbjtcbiAgICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwidmlzaWJsZVwiIGNsYXNzPVwiY2F4LWNvbW1lbnRzLXdyYXBwZXJcIj5cclxuICAgIDwhLS0gPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwiY29udGVudFwiPiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXgtY29tbWVudHMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jb21tZW50cy1saXN0XCIgI2NvbW1lbnRzTGlzdD5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBlZENvbW1lbnRzQ2FjaGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtZGF0ZS1oZWFkZXJcIj57eyBmb3JtYXREYXRlKGdyb3VwLmRhdGUpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXgtY29tbWVudC1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29tbWVudCBvZiBncm91cC5pdGVtczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NheC11c2VyLWNvbW1lbnQnOiAhY29tbWVudC5pc0FkbWluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NheC1hZG1pbi1jb21tZW50JzogY29tbWVudC5pc0FkbWluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnNlY3V0aXZlLW1lc3NhZ2UnOiBpID4gMCAmJiBjb21tZW50LmlzQWRtaW4gPT09IGdyb3VwLml0ZW1zW2ktMV0uaXNBZG1pbiAmJiBjb21tZW50LnNlbmRlciA9PT0gZ3JvdXAuaXRlbXNbaS0xXS5zZW5kZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3LXNlbmRlcic6IGkgPiAwICYmIGNvbW1lbnQuc2VuZGVyICE9PSBncm91cC5pdGVtc1tpLTFdLnNlbmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXctZGF0ZSc6IGkgPT09IDAgJiYgZ3JvdXAuaXRlbXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFVzZXIgTWVzc2FnZSAoTGVmdCBBbGlnbmVkKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbW1lbnQuaXNBZG1pblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWNvbW1lbnRib3gtYXZhdGFyLWNvbnRhaW5lclwiICpuZ0lmPVwiaSA9PT0gMCB8fCBncm91cC5pdGVtc1tpLTFdLnNlbmRlciAhPT0gY29tbWVudC5zZW5kZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjYXgtYXZhdGFyIFtsYWJlbF09XCJjb21tZW50LnNlbmRlcj8uc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCkgfHwgJ1UnXCIgW2F2YXRhclNpemVdPVwiJ3hzJ1wiIFtzaGFwZV09XCInY2lyY2xlJ1wiIHN0eWxlY2xhc3M9XCJjYXgtY29tbWVudGJveC1hdmF0YXJcIj4gPC9jYXgtYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jb21tZW50LWNvbnRlbnRcIiBbY2xhc3Mubm8tYXZhdGFyXT1cImkgPiAwICYmIGdyb3VwLml0ZW1zW2ktMV0uc2VuZGVyID09PSBjb21tZW50LnNlbmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jb21tZW50LXNlbmRlclwiICpuZ0lmPVwiaSA9PT0gMCB8fCBncm91cC5pdGVtc1tpLTFdLnNlbmRlciAhPT0gY29tbWVudC5zZW5kZXJcIj57e2NvbW1lbnQuc2VuZGVyfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtZmlsZS1hdHRhY2htZW50XCIgKm5nSWY9XCJjb21tZW50LmZpbGVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIGNvbW1lbnQuZmlsZXNcIiBjbGFzcz1cImZpbGUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1kZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtbmFtZVwiPnt7IGZpbGUubmFtZS5zbGljZSgwLCAyMCkgfX17eyBmaWxlLm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcuJyArIGZpbGUubmFtZS5zcGxpdCgnLicpLnBvcCgpIDogJycgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGUtc2l6ZVwiPnt7ZmlsZS5zaXplfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImNheCBjYXgtZG93bmxvYWRcIiAoY2xpY2spPVwib25GaWxlRG93bmxvYWQoZmlsZSlcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWNvbW1lbnQtdGV4dFwiIFtpbm5lckhUTUxdPVwiZm9ybWF0TWVzc2FnZVdpdGhUYWdzKGNvbW1lbnQudGV4dClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F4LWNvbW1lbnQtZGF0ZVwiPnt7IGNvbW1lbnQuZGF0ZSB8IGRhdGU6ICdzaG9ydFRpbWUnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBBZG1pbiBNZXNzYWdlIChSaWdodCBBbGlnbmVkKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tbWVudC5pc0FkbWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXgtY29tbWVudC1jb250ZW50IGFkbWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F4LWZpbGUtYXR0YWNobWVudFwiICpuZ0lmPVwiY29tbWVudC5maWxlcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBjb21tZW50LmZpbGVzXCIgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLW5hbWVcIj57eyBmaWxlLm5hbWUuc2xpY2UoMCwgMjApIH19e3sgZmlsZS5uYW1lLmluY2x1ZGVzKCcuJykgPyAnLicgKyBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSA6ICcnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLXNpemVcIj57e2ZpbGUuc2l6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJjYXggY2F4LWRvd25sb2FkXCIgKGNsaWNrKT1cIm9uRmlsZURvd25sb2FkKGZpbGUpXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jb21tZW50LXRleHRcIiBbaW5uZXJIVE1MXT1cImZvcm1hdE1lc3NhZ2VXaXRoVGFncyhjb21tZW50LnRleHQpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNheC1jb21tZW50LWRhdGVcIj57eyBjb21tZW50LmRhdGUgfCBkYXRlOiAnc2hvcnRUaW1lJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gPC9uZy10ZW1wbGF0ZT4gLS0+XHJcbiAgICA8Y2F4LW92ZXJsYXkgI3N1Z2dlc3Rpb25QYW5lbCBbKHZpc2libGUpXT1cIm92ZXJsYXlWaXNpYmxlXCIgW2FwcGVuZFRvXT1cImlucHV0VGV4dFwiIChvbkhpZGUpPVwib25TdWdnZXN0aW9uUGFuZWxIaWRlKClcIiBbc3R5bGVDbGFzc109XCInc3VnZ2VzdGlvbi1wYW5lbCdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VnZ2VzdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRTdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwic3VnZ2VzdGlvbi1pdGVtXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZCc6IHNlbGVjdGVkU3VnZ2VzdGlvbkluZGV4ID09PSBpfVwiIChjbGljayk9XCJvblN1Z2dlc3Rpb25TZWxlY3QoaXRlbSlcIiAobW91c2VlbnRlcik9XCJzZWxlY3RlZFN1Z2dlc3Rpb25JbmRleCA9IGlcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VnZ2VzdGlvbi1sYWJlbFwiPnt7aXRlbS5uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJzdWdnZXN0aW9uLWlkXCIgKm5nSWY9XCJjdXJyZW50VG9rZW5UeXBlID09PSAnbWVudGlvbidcIj57e2l0ZW0uaWR9fTwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9jYXgtb3ZlcmxheT5cclxuICAgIDxjYXgtb3ZlcmxheVxyXG4gICAgICAgIFsodmlzaWJsZSldPVwiZmlsZXNPdmVybGF5VmlzaWJsZVwiXHJcbiAgICAgICAgW2FwcGVuZFRvXT1cImNvdW50Q2hpcFwiXHJcbiAgICAgICAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMC4xMnMgZWFzZS1vdXQnXCJcclxuICAgICAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicwLjFzIGVhc2UtaW4nXCJcclxuICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzIyNHB4JywgcmlnaHQ6ICc1JScgfVwiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cImZpbGVzLWxpc3Qtb3ZlcmxheVwiXHJcbiAgICAgICAgKG9uSGlkZSk9XCJoaWRlRmlsZXNPdmVybGF5KClcIlxyXG4gICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlcy1vdmVybGF5LWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBzZWxlY3RlZEZpbGVzLnNsaWNlKDQpOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJmaWxlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsZS1uYW1lXCI+e3tnZXRTaG9ydEZpbGVOYW1lKGZpbGUubmFtZSl9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiY2F4IGNheC1jbG9zZS1jaXJjbGVcIiAoY2xpY2spPVwicmVtb3ZlRmlsZShpICsgNClcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9jYXgtb3ZlcmxheT5cclxuXHJcbiAgICA8IS0tIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cImZvb3RlclwiPiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGF0LWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1maWxlc1wiICpuZ0lmPVwic2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxjYXgtY2hpcCAqbmdGb3I9XCJsZXQgZmlsZSBvZiBzZWxlY3RlZEZpbGVzLnNsaWNlKDAsIDQpOyBsZXQgaSA9IGluZGV4XCIgW2xhYmVsXT1cImdldFNob3J0RmlsZU5hbWUoZmlsZS5uYW1lKVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIFtzaXplXT1cIidsZydcIiAob25SZW1vdmUpPVwicmVtb3ZlRmlsZShpLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwiY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiY2F4IGNheC1wYXBlcmNsaXBcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2NheC1jaGlwPlxyXG4gICAgICAgICAgICA8Y2F4LWNoaXAgI2NvdW50Q2hpcCAqbmdJZj1cInNlbGVjdGVkRmlsZXMubGVuZ3RoID4gNFwiIFtsYWJlbF09XCInKycgKyBnZXRPdmVyZmxvd0NvdW50KClcIiBbc2l6ZV09XCInbGcnXCIgKG1vdXNlZW50ZXIpPVwic2hvd0ZpbGVzT3ZlcmxheSgkZXZlbnQpXCI+IDwvY2F4LWNoaXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNheC1jaGF0LWlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGNheC1pbnB1dHRleHRcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld0NvbW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIidsZydcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyaWdodEljb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsZWFySWNvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JpZ2h0SWNvbkNsYXNzXT1cIidjYXggY2F4LXBhcGVyY2xpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyaWdodEljb25DbGlja2FibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHJpZ2h0SWNvbkNsaWNrKT1cIm9uRmlsZUljb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydjaGF0LWlucHV0JzogdHJ1ZSwgJ2FkbWluLWlucHV0JzogaXNBZG1pbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7J2JvcmRlci1yYWRpdXMnOiAnOHB4JywgYmFja2dyb3VuZDogJyNmZmZmZmYnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgI2lucHV0VGV4dFxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9jYXgtaW5wdXR0ZXh0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxjYXgtYnV0dG9uIFtpY29uXT1cIidjYXggY2F4LXBsYWluJ1wiIFtzZXZlcml0eV09XCIncHJpbWFyeSdcIiBbc2l6ZV09XCInbGFyZ2UnXCIgKGNsaWNrKT1cImFkZENvbW1lbnQoKVwiIFtkaXNhYmxlZF09XCIhbmV3Q29tbWVudC50cmltKCkgJiYgc2VsZWN0ZWRGaWxlcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInNlbmQtYnV0dG9uXCI+IDwvY2F4LWJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgYWNjZXB0PVwiKi8qXCIgbXVsdGlwbGUgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8L25nLXRlbXBsYXRlPiAtLT5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -107,7 +107,8 @@ class CommentboxComponent {
107
107
  clearInterval(this.dateUpdateInterval);
108
108
  }
109
109
  // Disconnect the observer
110
- this.observer.disconnect();
110
+ if (this.observer)
111
+ this.observer.disconnect();
111
112
  // Remove event listeners
112
113
  document.removeEventListener('click', this.handleClickOutside);
113
114
  }