ngx-st-tables 17.0.130 → 17.0.131
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.
|
@@ -56,6 +56,7 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
56
56
|
id: row.id || StBaseService.generateGUID(),
|
|
57
57
|
}));
|
|
58
58
|
}
|
|
59
|
+
console.log(clonedData);
|
|
59
60
|
this._data = clonedData;
|
|
60
61
|
if (this.tableSource) {
|
|
61
62
|
this.tableSource.data = [...clonedData];
|
|
@@ -626,6 +627,7 @@ export class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
626
627
|
}
|
|
627
628
|
}
|
|
628
629
|
setInitTable() {
|
|
630
|
+
console.log(this._data);
|
|
629
631
|
this.tableSource = new MatTableDataSource(this._data);
|
|
630
632
|
this.paginator.pageSize = this.localStorageData.pageSize;
|
|
631
633
|
this.paginator.pageIndex = this.localStorageData.pageIndex;
|
|
@@ -790,4 +792,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
790
792
|
}], data: [{
|
|
791
793
|
type: Input
|
|
792
794
|
}] } });
|
|
793
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsR0FDNUIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QjdCLE1BQU0sT0FBTyxzQkFD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WSx1RUFDWixPQUFPLHVFQ3JFcEIsNDNNQXdLQSw2clpEbkhjO1lBQ1YsT0FBTyxDQUFDLGNBQWMsRUFBRTtnQkFDdEIsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLFVBQVUsQ0FDUix3QkFBd0IsRUFDeEIsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQ2hEO2FBQ0YsQ0FBQztTQUNIOzs0RkFFVSxzQkFBc0I7a0JBcEJsQyxTQUFTOytCQUNFLHVCQUF1QixtQkFNaEIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxjQUN6Qjt3QkFDVixPQUFPLENBQUMsY0FBYyxFQUFFOzRCQUN0QixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDakUsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQzs0QkFDekMsVUFBVSxDQUNSLHdCQUF3QixFQUN4QixPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FDaEQ7eUJBQ0YsQ0FBQztxQkFDSDs4TEFNd0IsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNILElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFtQ2QsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIGlucHV0LFxyXG4gIG91dHB1dCxcclxuICBtb2RlbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBzaWduYWwsXHJcbiAgY29tcHV0ZWQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zdC1tYXRlcmlhbC10YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvdmlldy92aWV3LXN0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBTdEJhc2VTZXJ2aWNlLFxyXG4gIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudCxcclxufSBmcm9tICduZ3gtc3QtYmFzZS1mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBTdFNuYWNrQmFyU2VydmljZSB9IGZyb20gJ25neC1zdC1zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IFN0VGFibGVzVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0LXRhYmxlcy10cmFuc2xhdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL21hdGVyaWFsLXRhYmxlLWNhcHRpb24vbWF0ZXJpYWwtdGFibGUtZmlsdGVyLWRpYWxvZy9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgSUNhcHRpb25EYXRhQ2hhbmdlZCxcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXIsXHJcbiAgU3RNYXRlcmlhbFRhYmxlRmlsdGVyVmFsdWVUeXBlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIGFuaW1hdGUsXHJcbiAgc3RhdGUsXHJcbiAgc3R5bGUsXHJcbiAgdHJhbnNpdGlvbixcclxuICB0cmlnZ2VyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBTdERpYWxvZ1NlcnZpY2UgfSBmcm9tICduZ3gtc3QtZGlhbG9nJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LXN0LW1hdGVyaWFsLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnNjc3MnLFxyXG4gICAgJy4uLy4uLy4uLy4uL2Fzc2V0cy9iYXNlLXRhYmxlLnNjc3MnLFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXHJcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQsdm9pZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxyXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbihcclxuICAgICAgICAnZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsXHJcbiAgICAgICAgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJylcclxuICAgICAgKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRhYmxlQ29tcG9uZW50XHJcbiAgZXh0ZW5kcyBTdFN1YnNjcmliZURlc3Ryb3lDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydDogTWF0U29ydDtcclxuXHJcbiAgc2hvd0dsb2JhbFNlYXJjaCA9IGlucHV0KGZhbHNlKTtcclxuXHJcbiAgdGFibGVUaXRsZSA9IGlucHV0KCcnKTtcclxuXHJcbiAgcGFnZVNpemUgPSBpbnB1dDxudW1iZXI+KDEwKTtcclxuXHJcbiAgZGF0YUxlbmd0aCA9IGlucHV0PG51bWJlcj4oMCk7XHJcblxyXG4gIGFsbG93UGlja0NvbHVtbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93UmVvcmRlckNvbHVtbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGxvY2FsU3RvcmFnZU5hbWUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHJcbiAgbGF6eUxvYWRpbmcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGlzTG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaW5pdENvbHVtbnMgPSBpbnB1dDxTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdPihbXSk7XHJcblxyXG4gIHJvd0NsaWNrQWN0aW9uID0gaW5wdXQ8KHJvdzogYW55KSA9PiB2b2lkPigpO1xyXG5cclxuICAvKipcclxuICAgKiBJbW11dGFibGUgRGF0YSBQYXR0ZXJuOlxyXG4gICAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgaW5jb21pbmcgZGF0YSB0byBwcmV2ZW50IG11dGF0aW9ucyBvZiBwYXJlbnQgZGF0YS5cclxuICAgKiBJRHMgYXJlIGdlbmVyYXRlZCBvbiB0aGUgY29weSwgbm90IG9uIHRoZSBvcmlnaW5hbCBwYXJlbnQgZGF0YS5cclxuICAgKiBUaGlzIGVuc3VyZXMgdGhlIHBhcmVudCBtYWludGFpbnMgY29udHJvbCBvZiB0aGVpciBkYXRhIHdoaWxlIHRoZSBsaWJyYXJ5XHJcbiAgICogbWFuYWdlcyBpdHMgb3duIHdvcmtpbmcgY29weSBmb3IgVUkgb3BlcmF0aW9ucy5cclxuICAgKlxyXG4gICAqIFdoZW4gZGF0YSBpcyB1cGRhdGVkIChlLmcuLCBhZnRlciBmaWVsZFZhbHVlQ2hhbmdlZCksIGV4aXN0aW5nIHJvdyBJRHMgYXJlIHByZXNlcnZlZFxyXG4gICAqIHRvIHByZXZlbnQgZm9jdXMgbG9zcyBvbiBpbnB1dHMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGF0YShkYXRhOiBhbnlbXSkge1xyXG4gICAgbGV0IGRhdGFUb0NvbXBhcmUgPSB0aGlzLnRhYmxlU291cmNlXHJcbiAgICAgID8gWy4uLnRoaXMudGFibGVTb3VyY2U/LmRhdGEubWFwKHRtcCA9PiAoeyAuLi50bXAgfSkpXVxyXG4gICAgICA6IFtdO1xyXG4gICAgaWYgKGRhdGEgJiYgZGF0YVswXSAmJiAhZGF0YVswXS5pZCkge1xyXG4gICAgICBkYXRhVG9Db21wYXJlID0gZGF0YVRvQ29tcGFyZS5tYXAodG1wID0+IHtcclxuICAgICAgICBpZiAodG1wLmlkKSB7XHJcbiAgICAgICAgICBkZWxldGUgdG1wLmlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZGF0YSkgIT09IEpTT04uc3RyaW5naWZ5KGRhdGFUb0NvbXBhcmUpKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhIGRlZXAgY29weSB0byBhdm9pZCBtdXRhdGluZyBwYXJlbnQgZGF0YVxyXG4gICAgICBsZXQgY2xvbmVkRGF0YSA9IChkYXRhIHx8IFtdKS5tYXAocm93ID0+ICh7IC4uLnJvdyB9KSk7XHJcblxyXG4gICAgICAvLyBBZGQgSURzIGlmIG5lZWRlZCAob25seSBvbiB0aGUgY29weSlcclxuICAgICAgaWYgKHRoaXMuYWxsb3dFZGl0Um93KCkgfHwgdGhpcy5hbGxvd1NlbGVjdFJvdygpKSB7XHJcbiAgICAgICAgY2xvbmVkRGF0YSA9IGNsb25lZERhdGEubWFwKHJvdyA9PiAoe1xyXG4gICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgaWQ6IHJvdy5pZCB8fCBTdEJhc2VTZXJ2aWNlLmdlbmVyYXRlR1VJRCgpLFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fZGF0YSA9IGNsb25lZERhdGE7XHJcblxyXG4gICAgICBpZiAodGhpcy50YWJsZVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi5jbG9uZWREYXRhXTtcclxuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcoKSAmJiB0aGlzLmxvY2FsU3RvcmFnZURhdGEpIHtcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXg7XHJcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yLl9lbWl0UGFnZUV2ZW50KHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGEoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICBhbGxvd0VkaXRSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHNob3dFZGl0QWxsUm93cyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0cnVlLCBmaWVsZCBjaGFuZ2VzIGFyZSBzYXZlZCBpbW1lZGlhdGVseSB3aXRob3V0IHJlcXVpcmluZyBzYXZlL2NhbmNlbCBidXR0b25zLlxyXG4gICAqIFBlcmZlY3QgZm9yIHF1YW50aXR5IGlucHV0cywgdG9nZ2xlcywgb3Igc2VsZWN0aW9uIHRhYmxlcyB3aGVyZSBpbnN0YW50IHVwZGF0ZXMgYXJlIG5lZWRlZC5cclxuICAgKi9cclxuICBhdXRvU2F2ZU9uQ2hhbmdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBjYW5FZGl0Um93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgY2FuRGVsZXRlUm93VmFsaWRhdG9yID0gaW5wdXQ8KHJvdzogYW55KSA9PiBib29sZWFuPigoKSA9PiB0cnVlKTtcclxuXHJcbiAgYWxsb3dTZWxlY3RSb3cgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gIHNlbGVjdGlvbkZpZWxkTGFiZWwgPSBpbnB1dCgnJyk7XHJcblxyXG4gIHNlbGVjdFJvd09ubHlPbmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHNob3dDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkxhYmVsID0gaW5wdXQoJ0NyZWF0ZScpO1xyXG5cclxuICBjcmVhdGVCdXR0b25BY3Rpb24gPSBpbnB1dDwoKSA9PiB2b2lkPigoKSA9PiB7fSk7XHJcblxyXG4gIGRpc2FibGVDcmVhdGVCdXR0b24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93Q3JlYXRlUm93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBhbGxvd0V4dGVuZFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZXh0ZW5kZWRSb3dUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPHsgZGF0YTogYW55IH0+PigpO1xyXG5cclxuICBpbml0U2VsZWN0ZWRSb3cgPSBpbnB1dDxhbnk+KCk7XHJcblxyXG4gIGV4dHJhQ3VzdG9tRmlsdGVyID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgbG9hZERhdGEgPSBvdXRwdXQ8U3RNYXRlcmlhbFRhYmxlTG9hZERhdGE+KCk7XHJcblxyXG4gIHNhdmVFZGl0ZWRSb3cgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzYXZlQ3JlYXRlZFJvdyA9IG91dHB1dDxhbnk+KCk7XHJcblxyXG4gIHJvd0RlbGV0ZWQgPSBvdXRwdXQ8eyByb3c6IGFueTsgaW5kZXg6IG51bWJlciB9PigpO1xyXG5cclxuICBzZWxlY3RSb3dDaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbiBhIGZpZWxkIHZhbHVlIGNoYW5nZXMgYW5kIGF1dG9TYXZlT25DaGFuZ2UgaXMgZW5hYmxlZC5cclxuICAgKiBQYXJlbnQgc2hvdWxkIHVwZGF0ZSB0aGVpciBkYXRhIGltbWVkaWF0ZWx5LlxyXG4gICAqL1xyXG4gIGZpZWxkVmFsdWVDaGFuZ2VkID0gb3V0cHV0PHtcclxuICAgIHJvdzogYW55O1xyXG4gICAgZmllbGQ6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBpbmRleDogbnVtYmVyO1xyXG4gIH0+KCk7XHJcblxyXG4gIHByaXZhdGUgX2RhdGE6IGFueVtdID0gW107XHJcblxyXG4gIGluaXRMb2NhbENvbHVtbnMgPSBzaWduYWw8U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXT4oW10pO1xyXG4gIGV4cGFuZGVkUm93ID0gc2lnbmFsPGFueSB8IG51bGw+KG51bGwpO1xyXG5cclxuICBjcmVhdGluZ1JvdyA9IGNvbXB1dGVkKCgpID0+IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nKS5sZW5ndGggPiAwKTtcclxuXHJcbiAgY29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuICBzZWxlY3RlZENvbHVtbnM6IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdID0gW107XHJcbiAgc2VsZWN0ZWRDb2x1bW5zU3RyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICB0YWJsZVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPGFueT47XHJcblxyXG4gIGluaXRGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgaW5pdEdsb2JhbFNlYXJjaDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHNob3dUYWJsZSA9IHRydWU7XHJcblxyXG4gIGFjdGl2ZVJvd3NFZGl0aW5nOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xyXG4gIGFjdGl2ZVJvd3NDcmVhdGluZzogeyBbcm93SWQ6IHN0cmluZ106IHsgW3Byb3A6IHN0cmluZ106IGFueSB9IH0gPSB7fTtcclxuICBzZWxlY3Rpb246IFNlbGVjdGlvbk1vZGVsPGFueT47XHJcblxyXG4gIHByaXZhdGUgbG9jYWxTdG9yYWdlRGF0YTogU3RNYXRlcmlhbFRhYmxlTG9jYWxTdG9yYWdlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzbmFja2JhcjogU3RTbmFja0JhclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgc3RUYWJsZVRyYW5zbGF0aW9uczogU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdERpYWxvZ1NlcnZpY2U6IFN0RGlhbG9nU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBTZWxlY3Rpb25Nb2RlbCB3aXRoIGNvbXBhcmVXaXRoIHRvIGNvbXBhcmUgYnkgSURcclxuICAgIGNvbnN0IG11bHRpcGxlID0gIXRoaXMuc2VsZWN0Um93T25seU9uZSgpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55PihcclxuICAgICAgbXVsdGlwbGUsXHJcbiAgICAgIFtdLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICAoYSwgYikgPT4gKGE/LmlkID8/IGEpID09PSAoYj8uaWQgPz8gYilcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnNldChbLi4udGhpcy5pbml0Q29sdW1ucygpXSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dTZWxlY3RSb3coKSkge1xyXG4gICAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS51bnNoaWZ0KHtcclxuICAgICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LXNlbGVjdGluZycsXHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyxcclxuICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiAnNjBweCcsXHJcbiAgICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dTZWxlY3RDb2x1bW5MYWJlbCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pbml0U2VsZWN0ZWRSb3coKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmluaXRTZWxlY3RlZFJvdygpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnVwZGF0ZShvbGRWYWwgPT5cclxuICAgICAgICBvbGRWYWwuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgIT09ICdhY3Rpb24tcm93LXNlbGVjdGluZycpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dFZGl0Um93KCkgJiYgIXRoaXMuYXV0b1NhdmVPbkNoYW5nZSgpKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRpbmdDb2x1bW46IFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsID0ge1xyXG4gICAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctZWRpdGluZycsXHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctZWRpdGluZycsXHJcbiAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgICB3aWR0aDogJzExMHB4JyxcclxuICAgICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICAgIHRoaXMuc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnJvd0FjdGlvbnNDb2x1bW5MYWJlbCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy51cGRhdGUoY29sdW1ucyA9PiB7XHJcbiAgICAgICAgY29uc3QgbGFzdENvbHVtbiA9IGNvbHVtbnNbY29sdW1ucy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGFzdENvbHVtbj8udHlwZSAhPT0gJ2FjdGlvbnMnKSB7XHJcbiAgICAgICAgICByZXR1cm4gWy4uLmNvbHVtbnMsIGVkaXRpbmdDb2x1bW5dO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xyXG4gICAgICAgICAgbmV3Q29sdW1ucy5zcGxpY2UobmV3Q29sdW1ucy5sZW5ndGggLSAxLCAwLCBlZGl0aW5nQ29sdW1uKTtcclxuICAgICAgICAgIHJldHVybiBuZXdDb2x1bW5zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKG9sZFZhbCA9PlxyXG4gICAgICAgIG9sZFZhbC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWVsZCAhPT0gJ2FjdGlvbi1yb3ctZWRpdGluZycpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dFeHRlbmRSb3coKSkge1xyXG4gICAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS51bnNoaWZ0KHtcclxuICAgICAgICBmaWVsZDogJ2FjdGlvbnMtcm93LWV4dGVuZGluZycsXHJcbiAgICAgICAgaGVhZGVyOiAnJyxcclxuICAgICAgICB0eXBlOiAnYWN0aW9ucy1yb3ctZXh0ZW5kaW5nJyxcclxuICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiAnNjBweCcsXHJcbiAgICAgICAgc2VsZWN0Q29sdW1uTGFiZWw6XHJcbiAgICAgICAgICB0aGlzLnN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dFeHRlbmRDb2x1bW5MYWJlbCxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKG9sZFZhbCA9PlxyXG4gICAgICAgIG9sZFZhbC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWVsZCAhPT0gJ2FjdGlvbi1yb3ctZXh0ZW5kaW5nJylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNGaWx0ZXJSb3dFZGl0VHlwZXMoKTtcclxuXHJcbiAgICB0aGlzLmxvYWRMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcblxyXG4gICAgLy92YWxpZGF0ZSBmaWx0ZXJzXHJcbiAgICBjb25zdCBmaWx0ZXJLZXlzID0gT2JqZWN0LmtleXModGhpcy5pbml0RmlsdGVycyk7XHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgICBpZiAoZmlsdGVyS2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZpbHRlcktleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLmZpbmQoXHJcbiAgICAgICAgICBjb2x1bW4gPT4gY29sdW1uLmZpZWxkID09PSBrZXlcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoY29sKSB7XHJcbiAgICAgICAgICBsZXQgdG1wVmFsOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXJWYWx1ZVR5cGUgPVxyXG4gICAgICAgICAgICB0aGlzLmluaXRGaWx0ZXJzW2tleV0udmFsdWUgfHwgJyc7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdEZpbHRlcnNba2V5XS5tYXRjaE1vZGUgPT09ICdlcXVhbCcpIHtcclxuICAgICAgICAgICAgdG1wVmFsID0gdGhpcy5pbml0RmlsdGVyc1trZXldLnZhbHVlIHx8IG51bGw7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdEZpbHRlcnNba2V5XS5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xyXG4gICAgICAgICAgICB0bXBWYWwgPVxyXG4gICAgICAgICAgICAgIHRoaXMuaW5pdEZpbHRlcnNba2V5XS52YWx1ZSAmJlxyXG4gICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5pbml0RmlsdGVyc1trZXldLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmluaXRGaWx0ZXJzW2tleV0udmFsdWVcclxuICAgICAgICAgICAgICAgIDogW251bGwsIG51bGxdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG5ld0ZpbHRlcnNba2V5XSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IHRtcFZhbCxcclxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxyXG4gICAgICAgICAgICAgIE1hdGVyaWFsVGFibGVGaWx0ZXJEaWFsb2dDb21wb25lbnQuZ2V0QmFzZU1hdGNoTW9kZUJ5VHlwZShcclxuICAgICAgICAgICAgICAgIGNvbC5maWx0ZXJUeXBlIVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3RmlsdGVycykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuaW5pdEZpbHRlcnMpKSB7XHJcbiAgICAgIHRoaXMuaW5pdEZpbHRlcnMgPSBuZXdGaWx0ZXJzO1xyXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldEluaXRUYWJsZSgpO1xyXG4gICAgdGhpcy5zZXRTb3J0UGFnZVN1YnNjcmlwdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgdHVybk9uQWxsRWRpdFJvd3MoKSB7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF0gPSB7IC4uLnJvdyB9O1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2FwdGlvbkRhdGFDaGFuZ2VkKGV2ZW50OiBJQ2FwdGlvbkRhdGFDaGFuZ2VkKSB7XHJcbiAgICBsZXQgbG9hZExhenlEYXRhID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgIGV2ZW50Lmdsb2JhbFNlYXJjaCAhPT0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCB8fFxyXG4gICAgICBldmVudC5maWx0ZXJzICE9PSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVyc1xyXG4gICAgKSB7XHJcbiAgICAgIGxvYWRMYXp5RGF0YSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAuLi5ldmVudCxcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICBwYWdlSW5kZXg6IGxvYWRMYXp5RGF0YSA/IDAgOiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcbiAgICAgIHNvcnRGaWVsZDogdGhpcy5zb3J0LmFjdGl2ZSxcclxuICAgICAgc29ydE9yZGVyOiB0aGlzLnNvcnQuZGlyZWN0aW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNPcmRlcigpO1xyXG4gICAgdGhpcy5zZXRDb2x1bW5zVmlzaWJsZSgpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZENvbHVtbnMoKTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcblxyXG4gICAgaWYgKGxvYWRMYXp5RGF0YSkge1xyXG4gICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZUluZGV4O1xyXG4gICAgICAvL0B0cy1pZ25vcmVcclxuICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHJlc2V0VGFibGVTZXR0aW5ncygpIHtcclxuICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgIHRoaXMuaW5pdEZpbHRlcnMgPSB7fTtcclxuICAgIHRoaXMuaW5pdEdsb2JhbFNlYXJjaCA9ICcnO1xyXG4gICAgdGhpcy5zb3J0LnNvcnQoeyBpZDogJycsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZSB9KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICAgICAgdGhpcy5zZXRJbml0VGFibGUoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGEgbmV3IHJvdyB0byB0aGUgbG9jYWwgdGFibGUgY29weSBvbmx5LlxyXG4gICAqIFRoZSByb3cgaXMgdHJhY2tlZCBpbiBhY3RpdmVSb3dzQ3JlYXRpbmcgdW50aWwgc2F2ZWQuXHJcbiAgICogV2hlbiBzYXZlZCwgdGhlIHBhcmVudCByZWNlaXZlcyB0aGUgZXZlbnQgdGhyb3VnaCBzYXZlTmV3Q3JlYXRlZFJvdyBvdXRwdXQuXHJcbiAgICogVGhlIHBhcmVudCBkZWNpZGVzIHdoZXRoZXIgdG8gYWNjZXB0IGFuZCBhZGQgdG8gdGhlaXIgZGF0YSBhcnJheS5cclxuICAgKi9cclxuICBhZGROZXdSb3coKSB7XHJcbiAgICAvLyBDcmVhdGUgbmV3IHJvdyB3aXRoIGdlbmVyYXRlZCBJRCBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGVhY2ggY29sdW1uXHJcbiAgICBjb25zdCBuZXdSb3c6IGFueSA9IHtcclxuICAgICAgaWQ6IFN0QmFzZVNlcnZpY2UuZ2VuZXJhdGVHVUlEKCksXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgZmllbGRzIHdpdGggbnVsbC9kZWZhdWx0IHZhbHVlc1xyXG4gICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pXHJcbiAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgbmV3Um93W2NvbC5maWVsZF0gPSBudWxsO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBBZGQgdG8gbG9jYWwgdGFibGUgY29weSBvbmx5XHJcbiAgICB0aGlzLnRhYmxlU291cmNlLmRhdGEgPSBbLi4udGhpcy50YWJsZVNvdXJjZS5kYXRhLCBuZXdSb3ddO1xyXG4gICAgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbbmV3Um93LmlkXSA9IHsgLi4ubmV3Um93IH07XHJcblxyXG4gICAgLy8gTmF2aWdhdGUgdG8gbGFzdCBwYWdlIHRvIHNob3cgdGhlIG5ldyByb3dcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5sYXN0UGFnZSgpO1xyXG4gICAgfSwgMTAwKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSA9IHsgLi4ucm93IH07XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nKTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMudGFibGVTb3VyY2UpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUm93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICB0aGlzLnN0RGlhbG9nU2VydmljZVxyXG4gICAgICAuc2hvd0NvbmZpcm1hdGlvbignQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJvdz8nKVxyXG4gICAgICAucGlwZShmaWx0ZXIoU3RCYXNlU2VydmljZS5ub3ROdWxsKSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgICBkYXRhID0+IGRhdGEuaWQgIT09IHJvdy5pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5yb3dEZWxldGVkLmVtaXQoeyByb3csIGluZGV4OiBhYnNvbHV0ZUluZGV4IH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIGFuZCBzYXZlcyBhIHJvdyAoZWl0aGVyIG5ldyBvciBlZGl0ZWQpLlxyXG4gICAqIEVtaXRzIHRoZSB2YWxpZGF0ZWQgcm93IHRvIHRoZSBwYXJlbnQgdGhyb3VnaCBlaXRoZXI6XHJcbiAgICogLSBzYXZlTmV3Q3JlYXRlZFJvdzogZm9yIG5ld2x5IGNyZWF0ZWQgcm93c1xyXG4gICAqIC0gc2F2ZU5ld1JvdzogZm9yIGVkaXRlZCBleGlzdGluZyByb3dzXHJcbiAgICpcclxuICAgKiBUaGUgcGFyZW50IGlzIHJlc3BvbnNpYmxlIGZvcjpcclxuICAgKiAtIFBlcnNpc3RpbmcgdGhlIGNoYW5nZSAoZS5nLiwgQVBJIGNhbGwpXHJcbiAgICogLSBVcGRhdGluZyB0aGVpciBkYXRhIGFycmF5XHJcbiAgICogLSBIYW5kbGluZyBlcnJvcnMvcmVqZWN0aW9uc1xyXG4gICAqXHJcbiAgICogVGhlIGxpYnJhcnkgdXBkYXRlcyBpdHMgbG9jYWwgY29weSBvcHRpbWlzdGljYWxseS5cclxuICAgKi9cclxuICBzYXZlRWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgbGV0IGFsbG93U2F2ZSA9IHRydWU7XHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIHNwZWNpZmljIHJvdyBpcyBiZWluZyBjcmVhdGVkIG9yIGVkaXRlZFxyXG4gICAgY29uc3QgaXNDcmVhdGluZ1RoaXNSb3cgPSAhIXRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICBjb25zdCByb3dEYXRhID0gaXNDcmVhdGluZ1RoaXNSb3dcclxuICAgICAgPyB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdXHJcbiAgICAgIDogdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG5cclxuICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKVxyXG4gICAgICAuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgIGlmIChjb2wuY3VzdG9tRWRpdFJvd1ZhbGlkYXRvcikge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sLmN1c3RvbUVkaXRSb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSxcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0sXHJcbiAgICAgICAgICAgIHJvd1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcclxuICAgICAgICAgICAgYWxsb3dTYXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tiYXIuZXJyb3IocmVzdWx0LmVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29sLmVkaXRDb2x1bW5SZXF1aXJlZCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPT09IG51bGwgfHxcclxuICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID09PSAnJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGFsbG93U2F2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrYmFyLmVycm9yKGAke2NvbC5oZWFkZXJ9IGlzIHJlcXVpcmVkYCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAoYWxsb3dTYXZlKSB7XHJcbiAgICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICAgIC8vIEVtaXQgbmV3IHJvdyB0byBwYXJlbnQgZm9yIGhhbmRsaW5nIChBUEkgY2FsbCwgZXRjLilcclxuICAgICAgICB0aGlzLnNhdmVDcmVhdGVkUm93LmVtaXQoeyAuLi50aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdIH0pO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEVtaXQgZWRpdGVkIHJvdyB0byBwYXJlbnQgZm9yIGhhbmRsaW5nXHJcbiAgICAgICAgdGhpcy5zYXZlRWRpdGVkUm93LmVtaXQoe1xyXG4gICAgICAgICAgcm93OiB7IC4uLnRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSB9LFxyXG4gICAgICAgICAgaW5kZXg6IGFic29sdXRlSW5kZXgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHRhYmxlIGNvcHlcclxuICAgICAgaWYgKGFic29sdXRlSW5kZXggPj0gMCkge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1xyXG4gICAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbilcclxuICAgICAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRSb3dbY29sLmZpZWxkXSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnRhYmxlU291cmNlLmRhdGFbYWJzb2x1dGVJbmRleF0gPSB1cGRhdGVkUm93O1xyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGFdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsRWRpdFJvdyhyb3c6IGFueSwgY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgc3BlY2lmaWMgcm93IGlzIGJlaW5nIGNyZWF0ZWRcclxuICAgIGNvbnN0IGlzQ3JlYXRpbmdUaGlzUm93ID0gISF0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tyb3cuaWRdO1xyXG5cclxuICAgIGlmIChpc0NyZWF0aW5nVGhpc1Jvdykge1xyXG4gICAgICAvLyBSZW1vdmUgZnJvbSBsb2NhbCB0YWJsZSBjb3B5XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5maWx0ZXIoXHJcbiAgICAgICAgZGF0YSA9PiBkYXRhLmlkICE9PSByb3cuaWRcclxuICAgICAgKTtcclxuICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgaW1tZWRpYXRlIGZpZWxkIHZhbHVlIGNoYW5nZXMgZm9yIGF1dG8tc2F2ZSBtb2RlLlxyXG4gICAqIEluIGF1dG8tc2F2ZSBtb2RlLCBuZ01vZGVsIGlzIGJvdW5kIGRpcmVjdGx5IHRvIHJvd0RhdGEsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGl0LlxyXG4gICAqIFdlIG9ubHkgZW1pdCB0byBwYXJlbnQgc28gdGhleSBjYW4gdXBkYXRlIHRoZWlyIGRhdGEgY29weS5cclxuICAgKi9cclxuICBvbkZpZWxkVmFsdWVDaGFuZ2VkKFxyXG4gICAgcm93OiBhbnksXHJcbiAgICBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCxcclxuICAgIHZhbHVlOiBhbnksXHJcbiAgICBpbmRleDogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YVthYnNvbHV0ZUluZGV4XVtjb2x1bW4uZmllbGRdID0gdmFsdWU7XHJcblxyXG4gICAgLy8gRW1pdCB0byBwYXJlbnQgaW1tZWRpYXRlbHlcclxuICAgIC8vIFRoZSByb3cgb2JqZWN0IGlzIGFscmVhZHkgdXBkYXRlZCBieSBuZ01vZGVsIGJpbmRpbmdcclxuICAgIHRoaXMuZmllbGRWYWx1ZUNoYW5nZWQuZW1pdCh7XHJcbiAgICAgIHJvdzogeyAuLi5yb3cgfSxcclxuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcclxuICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICBpbmRleDogYWJzb2x1dGVJbmRleCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgaWYgKHRoaXMudGFibGVTb3VyY2UpIHtcclxuICAgICAgY29uc3QgbnVtUm93cyA9IHRoaXMudGFibGVTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd3MoKSB7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLnRhYmxlU291cmNlLmRhdGEpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XHJcbiAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFJvd0NoYW5nZWQodmFsdWU6IGJvb2xlYW4sIHJvdzogYW55KSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0Um93T25seU9uZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgY2xpY2tSb3dBY3Rpb24ocm93OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmFsbG93RXh0ZW5kUm93KCkpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWRSb3coKSA9PT0gcm93KSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvdy5zZXQobnVsbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFJvdy5zZXQocm93KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2VkKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdyksIHJvdyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5yb3dDbGlja0FjdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDbGlja0FjdGlvbigpIShyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBYnNvbHV0ZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMubGF6eUxvYWRpbmcoKSkge1xyXG4gICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0b3JcclxuICAgICAgICA/IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICsgaW5kZXhcclxuICAgICAgICA6IGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zRmlsdGVyUm93RWRpdFR5cGVzKCkge1xyXG4gICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLmZpZWxkID09PSAnYWN0aW9ucycgJiYgIWNvbHVtbi50eXBlKSB7XHJcbiAgICAgICAgY29sdW1uLnR5cGUgPSAnYWN0aW9ucyc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghY29sdW1uLmZpbHRlclR5cGUgJiYgY29sdW1uLmZpbHRlcikge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ251bWJlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdkYXRlJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnY3VzdG9tLXRlbXBsYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnY3VzdG9tJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2Jvb2xlYW4nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuYWxsb3dFZGl0Um93KCkgJiYgIWNvbHVtbi5yb3dFZGl0VHlwZSkge1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnbnVtYmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdkYXRlJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnY3VzdG9tLXRlbXBsYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2N1c3RvbSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnYm9vbGVhbic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdzdHJpbmcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbUZpbHRlckZvckxvY2FsVGFibGUoKSB7XHJcbiAgICBsZXQgZmlsdGVyRnVuY3Rpb24gPSAoZGF0YTogYW55LCBmaWx0ZXI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICBjb25zdCBzZWFyY2hUZXJtczoge1xyXG4gICAgICAgIFtjb2x1bW46IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgc3RHbG9iYWxTZWFyY2g6IHN0cmluZztcclxuICAgICAgfSA9IEpTT04ucGFyc2UoZmlsdGVyKTtcclxuICAgICAgY29uc3Qgc2VhcmNoVGVybXNLZXlzID0gT2JqZWN0LmtleXMoc2VhcmNoVGVybXMpO1xyXG4gICAgICBsZXQgc2VhcmNoT2sgPSB0cnVlO1xyXG4gICAgICBsZXQgc2VhcmNoT2tHbG9iYWwgPSB0cnVlO1xyXG5cclxuICAgICAgc2VhcmNoVGVybXNLZXlzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAga2V5ICE9PSAnc3RHbG9iYWxTZWFyY2gnICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZy5pbmNsdWRlcyhrZXkpICYmXHJcbiAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWFyY2hUZXJtc1trZXldLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlRnJvbTogc3RyaW5nIHwgbnVsbCA9IChcclxuICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIGFzIFtzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsXVxyXG4gICAgICAgICAgICApWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlVG86IHN0cmluZyB8IG51bGwgPSAoXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS52YWx1ZSBhcyBbc3RyaW5nIHwgbnVsbCwgc3RyaW5nIHwgbnVsbF1cclxuICAgICAgICAgICAgKVsxXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRlRnJvbSB8fCBkYXRlVG8pIHtcclxuICAgICAgICAgICAgICBjb25zdCB0bXBDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBrZXkpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodG1wQ29sdW1uICYmIHRtcENvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVGcm9tVmFsdWUgPSBkYXRlRnJvbSA/IG5ldyBEYXRlKGRhdGVGcm9tKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVG9WYWx1ZSA9IGRhdGVUb1xyXG4gICAgICAgICAgICAgICAgICA/IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoZGF0ZVRvKS5zZXREYXRlKG5ldyBEYXRlKGRhdGVUbykuZ2V0RGF0ZSgpICsgMSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlRGF0YSA9IG5ldyBEYXRlKGRhdGFba2V5XSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGVGcm9tVmFsdWUgJiYgZGF0ZVRvVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgPVxyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaE9rICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhID49IGRhdGVGcm9tVmFsdWUgJiZcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEgPD0gZGF0ZVRvVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGVGcm9tVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgPSBzZWFyY2hPayAmJiB0YWJsZURhdGEgPj0gZGF0ZUZyb21WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0ZVRvVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgPSBzZWFyY2hPayAmJiB0YWJsZURhdGEgPD0gZGF0ZVRvVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWFyY2hPayA9XHJcbiAgICAgICAgICAgICAgc2VhcmNoT2sgJiZcclxuICAgICAgICAgICAgICBkYXRhW2tleV0gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgIGRhdGFba2V5XSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0ubWF0Y2hNb2RlID09PSAnZXF1YWwnXHJcbiAgICAgICAgICAgICAgICA/IGRhdGFba2V5XSA9PT0gc2VhcmNoVGVybXNba2V5XS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgOiBkYXRhW2tleV1cclxuICAgICAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YoXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIS50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICApICE9PSAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoc2VhcmNoVGVybXMuc3RHbG9iYWxTZWFyY2gpIHtcclxuICAgICAgICBzZWFyY2hPa0dsb2JhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhW2NvbF0pIHtcclxuICAgICAgICAgICAgc2VhcmNoT2tHbG9iYWwgPVxyXG4gICAgICAgICAgICAgIHNlYXJjaE9rR2xvYmFsIHx8XHJcbiAgICAgICAgICAgICAgZGF0YVtjb2xdXHJcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hUZXJtcy5zdEdsb2JhbFNlYXJjaC50b1N0cmluZygpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICkgIT09IC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc2VhcmNoT2sgJiYgc2VhcmNoT2tHbG9iYWw7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZpbHRlckZ1bmN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0TGF6eUxvYWRpbmcoKSB7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgIGNvbnN0IGxvYWREYXRhUmVxdWVzdDogU3RNYXRlcmlhbFRhYmxlTG9hZERhdGEgPSB7XHJcbiAgICAgICAgZmlyc3Q6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlckNvbHVtbnM6IHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLFxyXG4gICAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmdsb2JhbFNlYXJjaCxcclxuICAgICAgICBzb3J0RmllbGQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc29ydE9yZGVyOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyLFxyXG4gICAgICAgIGZpbHRlcnM6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gaWYgKHRoaXMucmV0dXJuTmV3QXBpVGFibGVSZXN1bHQoKSkge1xyXG4gICAgICAvLyAgIHRoaXMubG9hZERhdGEuZW1pdChtYXBUYWJsZURhdGFUb0FwaShsb2FkRGF0YVJlcXVlc3QpKTtcclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgdGhpcy5sb2FkRGF0YS5lbWl0KGxvYWREYXRhUmVxdWVzdCk7XHJcbiAgICAgIC8vIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyID0gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzLFxyXG4gICAgICAgIHN0R2xvYmFsU2VhcmNoOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpISxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmxvY2FsU3RvcmFnZURhdGEpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEluaXRUYWJsZSgpIHtcclxuICAgIHRoaXMudGFibGVTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuX2RhdGEpO1xyXG5cclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleDtcclxuXHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRGaWVsZCAmJiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc29ydE9yZGVyKSB7XHJcbiAgICAgIGNvbnN0IGRpc2FibGVDbGVhciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNvcnQuc29ydCh7IGlkOiAnJywgc3RhcnQ6ICdhc2MnLCBkaXNhYmxlQ2xlYXIgfSk7XHJcbiAgICAgIHRoaXMuc29ydC5zb3J0KHtcclxuICAgICAgICBpZDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRGaWVsZCxcclxuICAgICAgICBzdGFydDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcixcclxuICAgICAgICBkaXNhYmxlQ2xlYXIsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5sYXp5TG9hZGluZygpISkge1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICAgIHRoaXMudGFibGVTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5jcmVhdGVDdXN0b21GaWx0ZXJGb3JMb2NhbFRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U29ydFBhZ2VTdWJzY3JpcHRpb24oKSB7XHJcbiAgICB0aGlzLnNvcnQuc29ydENoYW5nZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxyXG4gICAgICAgICAgKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLFxyXG4gICAgICAgICAgc29ydEZpZWxkOiByZXMuYWN0aXZlLFxyXG4gICAgICAgICAgc29ydE9yZGVyOiByZXMuZGlyZWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm5nRGVzdHJveWVkJCksXHJcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXHJcbiAgICAgICAgICAocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLmxvY2FsU3RvcmFnZURhdGEsXHJcbiAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCxcclxuICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUb0xvY2FsU3RvcmFnZSgpO1xyXG4gICAgICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREaXNwbGF5ZWRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uY29sLFxyXG4gICAgICAgIHR5cGU6IGNvbC50eXBlID8gY29sLnR5cGUgOiAnc3RyaW5nJyxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGV4cGFuZGVkOiB0cnVlLFxyXG4gICAgICAgIGlzRWRpdGluZzogZmFsc2UsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldENvbHVtbnNPcmRlcigpO1xyXG4gICAgdGhpcy5zZXRDb2x1bW5zVmlzaWJsZSgpO1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZENvbHVtbnMoKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtbnNPcmRlcigpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZURhdGE/LmNvbHVtbnNPcmRlcikge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXHJcbiAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlclxyXG4gICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gY29sdW1uKSlcclxuICAgICAgICAgIC5tYXAoY29sdW1uID0+IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbikhKSxcclxuICAgICAgICAuLi50aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAgICAgY29sdW1uID0+ICF0aGlzLmxvY2FsU3RvcmFnZURhdGEuY29sdW1uc09yZGVyLmluY2x1ZGVzKGNvbHVtbi5maWVsZClcclxuICAgICAgICApLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zVmlzaWJsZSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZURhdGE/LnNlbGVjdGVkQ29sdW1ucykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgIHZpc2libGU6XHJcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zZWxlY3RlZENvbHVtbnMuaW5jbHVkZXMoY29sLmZpZWxkKSB8fFxyXG4gICAgICAgICAgICAhdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlci5pbmNsdWRlcyhjb2wuZmllbGQpLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZENvbHVtbnMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+IHtcclxuICAgICAgcmV0dXJuIGNvbC52aXNpYmxlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1N0cmluZyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLm1hcChjb2wgPT4gY29sLmZpZWxkKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRMb2NhbFN0b3JhZ2VEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlTmFtZSgpKSB7XHJcbiAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZURhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSEpO1xyXG5cclxuICAgICAgaWYgKGxvY2FsU3RvcmFnZURhdGEpIHtcclxuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZURhdGEpO1xyXG4gICAgICAgIC8vIGNvbnN0IGZpbHRlcnMgPSB0aGlzLnZhbGlkT2xkRmlsdGVyc1RvTmV3Rm9ybWF0KFxyXG4gICAgICAgIC8vICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnNcclxuICAgICAgICAvLyApO1xyXG4gICAgICAgIC8vIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLmluaXRGaWx0ZXJzID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnM7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEdsb2JhbFNlYXJjaCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2g7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRPbGRGaWx0ZXJzVG9OZXdGb3JtYXQob2xkRmlsdGVyczoge1xyXG4gICAgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIHwgc3RyaW5nO1xyXG4gIH0pOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9IHtcclxuICAgIGNvbnN0IG5ld0ZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvbGRGaWx0ZXJzKTtcclxuXHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG5ld0ZpbHRlcnM7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XHJcbiAgICAgIGlmICh0eXBlb2Ygb2xkRmlsdGVyc1trZXldID09PSAnb2JqZWN0JyAmJiBvbGRGaWx0ZXJzW2tleV0gIT09IG51bGwpIHtcclxuICAgICAgICBuZXdGaWx0ZXJzW2tleV0gPSBvbGRGaWx0ZXJzW2tleV0gYXMgU3RNYXRlcmlhbFRhYmxlRmlsdGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ld0ZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE5ld0VtcHR5TG9jYWxTdG9yYWdlRGF0YSgpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUoKSxcclxuICAgICAgcGFnZUluZGV4OiAwLFxyXG4gICAgICBzZWxlY3RlZENvbHVtbnM6IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4gY29sLmZpZWxkKSxcclxuICAgICAgZ2xvYmFsU2VhcmNoOiAnJyxcclxuICAgICAgY29sdW1uc09yZGVyOiB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IGNvbC5maWVsZCksXHJcbiAgICAgIGZpbHRlcnM6IHt9LFxyXG4gICAgICBzb3J0RmllbGQ6ICcnLFxyXG4gICAgICBzb3J0T3JkZXI6ICdhc2MnLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RFZGl0YWJsZUNvbHVtbihjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gR2V0IGFsbCBlZGl0YWJsZSBjb2x1bW5zIGluIG9yZGVyXHJcbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uICYmIGNvbC52aXNpYmxlXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFJldHVybiB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGVkaXRhYmxlIGNvbHVtblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgZWRpdGFibGVDb2x1bW5zLmxlbmd0aCA+IDAgJiYgZWRpdGFibGVDb2x1bW5zWzBdLmZpZWxkID09PSBjb2x1bW4uZmllbGRcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0TWF0ZXJpYWxUYWJsZUxvYWREYXRhIHtcclxuICBmaXJzdDogbnVtYmVyO1xyXG4gIHJvd3M6IG51bWJlcjtcclxuICBnbG9iYWxGaWx0ZXI6IHN0cmluZztcclxuICBnbG9iYWxGaWx0ZXJDb2x1bW5zOiBzdHJpbmdbXTtcclxuICBzb3J0RmllbGQ6IHN0cmluZztcclxuICBzb3J0T3JkZXI6IFNvcnREaXJlY3Rpb247XHJcbiAgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBJQ2FwdGlvbkRhdGFDaGFuZ2VkIHtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xyXG4gIHNvcnRGaWVsZDogc3RyaW5nO1xyXG4gIHNvcnRPcmRlcjogU29ydERpcmVjdGlvbjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic3QtbWF0ZXJpYWwtdGFibGVcIj5cclxuICBAaWYgKGlzTG9hZGluZygpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1zcGlubmVyXCI+XHJcbiAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cImFjY2VudFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG4gIEBpZiAoc2hvd1RhYmxlKSB7XHJcbiAgICA8c3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvblxyXG4gICAgICBbdGFibGVUaXRsZV09XCJ0YWJsZVRpdGxlKClcIlxyXG4gICAgICBbYWxsb3dQaWNrQ29sdW1uc109XCJhbGxvd1BpY2tDb2x1bW5zKClcIlxyXG4gICAgICBbc2hvd0dsb2JhbFNlYXJjaF09XCJzaG93R2xvYmFsU2VhcmNoKClcIlxyXG4gICAgICBbYWxsb3dSZW9yZGVyQ29sdW1uc109XCJhbGxvd1Jlb3JkZXJDb2x1bW5zKClcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW2luaXRGaWx0ZXJzXT1cImluaXRGaWx0ZXJzXCJcclxuICAgICAgW2luaXRHbG9iYWxTZWFyY2hdPVwiaW5pdEdsb2JhbFNlYXJjaFwiXHJcbiAgICAgIFtzaG93Q3JlYXRlQnV0dG9uXT1cInNob3dDcmVhdGVCdXR0b24oKVwiXHJcbiAgICAgIFtjcmVhdGVCdXR0b25MYWJlbF09XCJjcmVhdGVCdXR0b25MYWJlbCgpXCJcclxuICAgICAgW2NyZWF0ZUJ1dHRvbkFjdGlvbl09XCJjcmVhdGVCdXR0b25BY3Rpb24oKVwiXHJcbiAgICAgIFthbGxvd0NyZWF0ZVJvd109XCJhbGxvd0NyZWF0ZVJvdygpXCJcclxuICAgICAgW2Rpc2FibGVDcmVhdGVCdXR0b25dPVwiZGlzYWJsZUNyZWF0ZUJ1dHRvbigpXCJcclxuICAgICAgW2V4dHJhQ3VzdG9tRmlsdGVyXT1cImV4dHJhQ3VzdG9tRmlsdGVyKClcIlxyXG4gICAgICBbY3JlYXRpbmdSb3ddPVwiY3JlYXRpbmdSb3coKVwiXHJcbiAgICAgIChjYXB0aW9uRGF0YUNoYW5nZWQpPVwiY2FwdGlvbkRhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAocmVzZXRUYWJsZVNldHRpbmdzKT1cInJlc2V0VGFibGVTZXR0aW5ncygpXCJcclxuICAgICAgKGFkZE5ld1Jvdyk9XCJhZGROZXdSb3coKVwiXHJcbiAgICA+PC9zdC1tYXRlcmlhbC10YWJsZS1jYXB0aW9uPlxyXG4gIH1cclxuXHJcbiAgPHRhYmxlXHJcbiAgICBbbmdDbGFzc109XCJ7ICduby1ob3Zlcic6ICFyb3dDbGlja0FjdGlvbigpIH1cIlxyXG4gICAgbWF0LXRhYmxlXHJcbiAgICBbZGF0YVNvdXJjZV09XCJ0YWJsZVNvdXJjZVwiXHJcbiAgICBtYXRTb3J0XHJcbiAgICBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cImFsbG93RXh0ZW5kUm93KClcIlxyXG4gID5cclxuICAgIEBmb3IgKGNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnM7IHRyYWNrIGNvbHVtbikge1xyXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmZpZWxkXCI+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICBzdHlsZT1cInt7IGNvbHVtbi53aWR0aCA/ICd3aWR0aDonICsgY29sdW1uLndpZHRoIDogJycgfX1cIlxyXG4gICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNvbHVtbi5zb3J0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICBAaWYgKGNvbHVtbi50eXBlID09PSAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyAmJiAhc2VsZWN0Um93T25seU9uZSgpKSB7XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gdG9nZ2xlQWxsUm93cygpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIH0gQGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbnMtcm93LWVkaXRpbmcnICYmIHNob3dFZGl0QWxsUm93cygpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgc3R5bGU9XCJ3aWR0aDogOThweFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInR1cm5PbkFsbEVkaXRSb3dzKClcIlxyXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0VkaXQgYWxsIHJvd3MnXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZWRpdF9hcnJvd19kb3duPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICBzdHlsZT1cInt7IGNvbHVtbi53aWR0aCA/ICd3aWR0aDonICsgY29sdW1uLndpZHRoIDogJycgfX1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7ICEhYWN0aXZlUm93c0VkaXRpbmdbZWxlbWVudC5pZF0gfX1cclxuICAgICAgICAgIHt7ICEhYWN0aXZlUm93c0NyZWF0aW5nW2VsZW1lbnQuaWRdIH19XHJcbiAgICAgICAgICA8c3QtbWF0ZXJpYWwtdGFibGUtcm93LWNlbGxcclxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxyXG4gICAgICAgICAgICBbcm93RGF0YV09XCJlbGVtZW50XCJcclxuICAgICAgICAgICAgW3Jvd0luZGV4XT1cImdldEFic29sdXRlSW5kZXgoaSlcIlxyXG4gICAgICAgICAgICBbcm93RGF0YUNvcHldPVwiXHJcbiAgICAgICAgICAgICAgYWN0aXZlUm93c0VkaXRpbmdbZWxlbWVudC5pZF0gfHwgYWN0aXZlUm93c0NyZWF0aW5nW2VsZW1lbnQuaWRdXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtyb3dFZGl0aW5nXT1cIlxyXG4gICAgICAgICAgICAgICEhYWN0aXZlUm93c0VkaXRpbmdbZWxlbWVudC5pZF0gfHxcclxuICAgICAgICAgICAgICAhIWFjdGl2ZVJvd3NDcmVhdGluZ1tlbGVtZW50LmlkXVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbcm93SXNTZWxlY3RlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIFtyb3dJc0V4cGFuZGVkXT1cImVsZW1lbnQgPT0gZXhwYW5kZWRSb3coKVwiXHJcbiAgICAgICAgICAgIFtjYW5FZGl0Um93VmFsaWRhdG9yXT1cImNhbkVkaXRSb3dWYWxpZGF0b3IoKVwiXHJcbiAgICAgICAgICAgIFtjYW5EZWxldGVSb3dWYWxpZGF0b3JdPVwiY2FuRGVsZXRlUm93VmFsaWRhdG9yKClcIlxyXG4gICAgICAgICAgICBbc2VsZWN0Um93T25seU9uZV09XCJzZWxlY3RSb3dPbmx5T25lKClcIlxyXG4gICAgICAgICAgICBbaXNGaXJzdEVkaXRhYmxlQ29sdW1uXT1cImlzRmlyc3RFZGl0YWJsZUNvbHVtbihjb2x1bW4pXCJcclxuICAgICAgICAgICAgW2F1dG9TYXZlT25DaGFuZ2VdPVwiYXV0b1NhdmVPbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgKGVkaXRSb3dFbWl0dGVyKT1cImVkaXRSb3coZWxlbWVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChkZWxldGVSb3dFbWl0dGVyKT1cImRlbGV0ZVJvdyhlbGVtZW50LCBjb2x1bW4sIGkpXCJcclxuICAgICAgICAgICAgKHNhdmVFZGl0Um93RW1pdHRlcik9XCJzYXZlRWRpdFJvdyhlbGVtZW50LCBjb2x1bW4sIGkpXCJcclxuICAgICAgICAgICAgKGNhbmNlbEVkaXRSb3dFbWl0dGVyKT1cImNhbmNlbEVkaXRSb3coZWxlbWVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RSb3dDaGFuZ2UpPVwic2VsZWN0Um93Q2hhbmdlZCgkZXZlbnQsIGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgKGZpZWxkVmFsdWVDaGFuZ2VkKT1cIlxyXG4gICAgICAgICAgICAgIG9uRmllbGRWYWx1ZUNoYW5nZWQoZWxlbWVudCwgY29sdW1uLCAkZXZlbnQudmFsdWUsIGkpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+PC9zdC1tYXRlcmlhbC10YWJsZS1yb3ctY2VsbD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIH1cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZGVkRGV0YWlsXCI+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiXHJcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnNTdHJpbmcubGVuZ3RoXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZXhwYW5kZWQtZWxlbWVudC1kZXRhaWwtd3JhcHBlclwiXHJcbiAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJlbGVtZW50ID09IGV4cGFuZGVkUm93KCkgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBhbmRlZC1lbGVtZW50LWRldGFpbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZXh0ZW5kZWRSb3dUZW1wbGF0ZSgpIVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogZWxlbWVudCB9XCJcclxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cInNlbGVjdGVkQ29sdW1uc1N0cmluZ1wiPjwvdHI+XHJcbiAgICA8dHJcclxuICAgICAgbWF0LXJvd1xyXG4gICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogc2VsZWN0ZWRDb2x1bW5zU3RyaW5nXCJcclxuICAgICAgW2NsYXNzLmV4cGFuZGVkLWV4cGFuZGVkLXJvd109XCJleHBhbmRlZFJvdygpID09PSByb3dcIlxyXG4gICAgICAoY2xpY2spPVwidGhpcy5jbGlja1Jvd0FjdGlvbihyb3cpXCJcclxuICAgID48L3RyPlxyXG4gICAgQGlmIChhbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIDx0clxyXG4gICAgICAgIG1hdC1yb3dcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydleHBhbmRlZERldGFpbCddXCJcclxuICAgICAgICBjbGFzcz1cImV4dGVuZGVkLWRldGFpbC1yb3dcIlxyXG4gICAgICA+PC90cj5cclxuICAgIH1cclxuICA8L3RhYmxlPlxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cIls1LCAxMCwgMTUsIDIwLCAyNV1cIlxyXG4gICAgW2xlbmd0aF09XCJkYXRhTGVuZ3RoKClcIlxyXG4gID48L21hdC1wYWdpbmF0b3I+XHJcbiAgQGlmIChhbGxvd1NlbGVjdFJvdygpKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwic3QtbWF0ZXJpYWwtdGFibGUtc2VsZWN0ZWQtcm93c1wiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIj5cclxuICAgICAgICB7eyBzZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoIH19XHJcbiAgICAgICAge3sgc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnJvd1NlbGVjdGVkIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgQGZvciAocm93IG9mIHNlbGVjdGlvbi5zZWxlY3RlZDsgdHJhY2sgcm93KSB7XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJyZW1vdmVTZWxlY3RlZFJvdyhyb3cpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICB7eyByb3dbc2VsZWN0aW9uRmllbGRMYWJlbCgpXVxyXG4gICAgICAgICAgICAgIH19PG1hdC1pY29uIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwOyBtYXJnaW4tbGVmdDogMTBweFwiXHJcbiAgICAgICAgICAgICAgICA+ZGVsZXRlPC9tYXQtaWNvblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcbjwvZGl2PlxyXG4iXX0=
|
|
795
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXRhYmxlcy9zcmMvbGliL2NvbXBvbmVudHMvbWF0ZXJpYWwtdGFibGUvbWF0ZXJpYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsS0FBSyxFQUVMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUNMLGFBQWEsRUFDYiwyQkFBMkIsR0FDNUIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFNbEosT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEdBQ1IsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1QjdCLE1BQU0sT0FBTyxzQkFD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Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgaW5wdXQsXHJcbiAgb3V0cHV0LFxyXG4gIG1vZGVsLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIHNpZ25hbCxcclxuICBjb21wdXRlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3N0LW1hdGVyaWFsLXRhYmxlLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy92aWV3L3ZpZXctc3QtbWF0ZXJpYWwtdGFibGUtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIFN0QmFzZVNlcnZpY2UsXHJcbiAgU3RTdWJzY3JpYmVEZXN0cm95Q29tcG9uZW50LFxyXG59IGZyb20gJ25neC1zdC1iYXNlLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFN0U25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXN0LXNuYWNrLWJhcic7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgU3RUYWJsZXNUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3QtdGFibGVzLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbWF0ZXJpYWwtdGFibGUtY2FwdGlvbi9tYXRlcmlhbC10YWJsZS1maWx0ZXItZGlhbG9nL21hdGVyaWFsLXRhYmxlLWZpbHRlci1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBJQ2FwdGlvbkRhdGFDaGFuZ2VkLFxyXG4gIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcixcclxuICBTdE1hdGVyaWFsVGFibGVGaWx0ZXJWYWx1ZVR5cGUsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgYW5pbWF0ZSxcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICB0cmFuc2l0aW9uLFxyXG4gIHRyaWdnZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFN0RGlhbG9nU2VydmljZSB9IGZyb20gJ25neC1zdC1kaWFsb2cnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtc3QtbWF0ZXJpYWwtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9tYXRlcmlhbC10YWJsZS5jb21wb25lbnQuc2NzcycsXHJcbiAgICAnLi4vLi4vLi4vLi4vYXNzZXRzL2Jhc2UtdGFibGUuc2NzcycsXHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCx2b2lkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKFxyXG4gICAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkJyxcclxuICAgICAgICBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKVxyXG4gICAgICApLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsVGFibGVDb21wb25lbnRcclxuICBleHRlbmRzIFN0U3Vic2NyaWJlRGVzdHJveUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0XHJcbntcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0OiBNYXRTb3J0O1xyXG5cclxuICBzaG93R2xvYmFsU2VhcmNoID0gaW5wdXQoZmFsc2UpO1xyXG5cclxuICB0YWJsZVRpdGxlID0gaW5wdXQoJycpO1xyXG5cclxuICBwYWdlU2l6ZSA9IGlucHV0PG51bWJlcj4oMTApO1xyXG5cclxuICBkYXRhTGVuZ3RoID0gaW5wdXQ8bnVtYmVyPigwKTtcclxuXHJcbiAgYWxsb3dQaWNrQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dSZW9yZGVyQ29sdW1ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgbG9jYWxTdG9yYWdlTmFtZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBsYXp5TG9hZGluZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgaXNMb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBpbml0Q29sdW1ucyA9IGlucHV0PFN0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10+KFtdKTtcclxuXHJcbiAgcm93Q2xpY2tBY3Rpb24gPSBpbnB1dDwocm93OiBhbnkpID0+IHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEltbXV0YWJsZSBEYXRhIFBhdHRlcm46XHJcbiAgICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiBpbmNvbWluZyBkYXRhIHRvIHByZXZlbnQgbXV0YXRpb25zIG9mIHBhcmVudCBkYXRhLlxyXG4gICAqIElEcyBhcmUgZ2VuZXJhdGVkIG9uIHRoZSBjb3B5LCBub3Qgb24gdGhlIG9yaWdpbmFsIHBhcmVudCBkYXRhLlxyXG4gICAqIFRoaXMgZW5zdXJlcyB0aGUgcGFyZW50IG1haW50YWlucyBjb250cm9sIG9mIHRoZWlyIGRhdGEgd2hpbGUgdGhlIGxpYnJhcnlcclxuICAgKiBtYW5hZ2VzIGl0cyBvd24gd29ya2luZyBjb3B5IGZvciBVSSBvcGVyYXRpb25zLlxyXG4gICAqXHJcbiAgICogV2hlbiBkYXRhIGlzIHVwZGF0ZWQgKGUuZy4sIGFmdGVyIGZpZWxkVmFsdWVDaGFuZ2VkKSwgZXhpc3Rpbmcgcm93IElEcyBhcmUgcHJlc2VydmVkXHJcbiAgICogdG8gcHJldmVudCBmb2N1cyBsb3NzIG9uIGlucHV0cy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICBsZXQgZGF0YVRvQ29tcGFyZSA9IHRoaXMudGFibGVTb3VyY2VcclxuICAgICAgPyBbLi4udGhpcy50YWJsZVNvdXJjZT8uZGF0YS5tYXAodG1wID0+ICh7IC4uLnRtcCB9KSldXHJcbiAgICAgIDogW107XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhWzBdICYmICFkYXRhWzBdLmlkKSB7XHJcbiAgICAgIGRhdGFUb0NvbXBhcmUgPSBkYXRhVG9Db21wYXJlLm1hcCh0bXAgPT4ge1xyXG4gICAgICAgIGlmICh0bXAuaWQpIHtcclxuICAgICAgICAgIGRlbGV0ZSB0bXAuaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0bXA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChKU09OLnN0cmluZ2lmeShkYXRhKSAhPT0gSlNPTi5zdHJpbmdpZnkoZGF0YVRvQ29tcGFyZSkpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgZGVlcCBjb3B5IHRvIGF2b2lkIG11dGF0aW5nIHBhcmVudCBkYXRhXHJcbiAgICAgIGxldCBjbG9uZWREYXRhID0gKGRhdGEgfHwgW10pLm1hcChyb3cgPT4gKHsgLi4ucm93IH0pKTtcclxuXHJcbiAgICAgIC8vIEFkZCBJRHMgaWYgbmVlZGVkIChvbmx5IG9uIHRoZSBjb3B5KVxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSB8fCB0aGlzLmFsbG93U2VsZWN0Um93KCkpIHtcclxuICAgICAgICBjbG9uZWREYXRhID0gY2xvbmVkRGF0YS5tYXAocm93ID0+ICh7XHJcbiAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICBpZDogcm93LmlkIHx8IFN0QmFzZVNlcnZpY2UuZ2VuZXJhdGVHVUlEKCksXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKGNsb25lZERhdGEpO1xyXG4gICAgICB0aGlzLl9kYXRhID0gY2xvbmVkRGF0YTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRhYmxlU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gWy4uLmNsb25lZERhdGFdO1xyXG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZGluZygpICYmIHRoaXMubG9jYWxTdG9yYWdlRGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleDtcclxuICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IuX2VtaXRQYWdlRXZlbnQodGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnBhZ2VJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZGF0YSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcblxyXG4gIGFsbG93RWRpdFJvdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgc2hvd0VkaXRBbGxSb3dzID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHRydWUsIGZpZWxkIGNoYW5nZXMgYXJlIHNhdmVkIGltbWVkaWF0ZWx5IHdpdGhvdXQgcmVxdWlyaW5nIHNhdmUvY2FuY2VsIGJ1dHRvbnMuXHJcbiAgICogUGVyZmVjdCBmb3IgcXVhbnRpdHkgaW5wdXRzLCB0b2dnbGVzLCBvciBzZWxlY3Rpb24gdGFibGVzIHdoZXJlIGluc3RhbnQgdXBkYXRlcyBhcmUgbmVlZGVkLlxyXG4gICAqL1xyXG4gIGF1dG9TYXZlT25DaGFuZ2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNhbkVkaXRSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBjYW5EZWxldGVSb3dWYWxpZGF0b3IgPSBpbnB1dDwocm93OiBhbnkpID0+IGJvb2xlYW4+KCgpID0+IHRydWUpO1xyXG5cclxuICBhbGxvd1NlbGVjdFJvdyA9IGlucHV0KGZhbHNlKTtcclxuXHJcbiAgc2VsZWN0aW9uRmllbGRMYWJlbCA9IGlucHV0KCcnKTtcclxuXHJcbiAgc2VsZWN0Um93T25seU9uZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgc2hvd0NyZWF0ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgY3JlYXRlQnV0dG9uTGFiZWwgPSBpbnB1dCgnQ3JlYXRlJyk7XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbkFjdGlvbiA9IGlucHV0PCgpID0+IHZvaWQ+KCgpID0+IHt9KTtcclxuXHJcbiAgZGlzYWJsZUNyZWF0ZUJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgYWxsb3dDcmVhdGVSb3cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGFsbG93RXh0ZW5kUm93ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBleHRlbmRlZFJvd1RlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8eyBkYXRhOiBhbnkgfT4+KCk7XHJcblxyXG4gIGluaXRTZWxlY3RlZFJvdyA9IGlucHV0PGFueT4oKTtcclxuXHJcbiAgZXh0cmFDdXN0b21GaWx0ZXIgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xyXG5cclxuICBsb2FkRGF0YSA9IG91dHB1dDxTdE1hdGVyaWFsVGFibGVMb2FkRGF0YT4oKTtcclxuXHJcbiAgc2F2ZUVkaXRlZFJvdyA9IG91dHB1dDx7IHJvdzogYW55OyBpbmRleDogbnVtYmVyIH0+KCk7XHJcblxyXG4gIHNhdmVDcmVhdGVkUm93ID0gb3V0cHV0PGFueT4oKTtcclxuXHJcbiAgcm93RGVsZXRlZCA9IG91dHB1dDx7IHJvdzogYW55OyBpbmRleDogbnVtYmVyIH0+KCk7XHJcblxyXG4gIHNlbGVjdFJvd0NoYW5nZSA9IG91dHB1dDxhbnlbXT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIGEgZmllbGQgdmFsdWUgY2hhbmdlcyBhbmQgYXV0b1NhdmVPbkNoYW5nZSBpcyBlbmFibGVkLlxyXG4gICAqIFBhcmVudCBzaG91bGQgdXBkYXRlIHRoZWlyIGRhdGEgaW1tZWRpYXRlbHkuXHJcbiAgICovXHJcbiAgZmllbGRWYWx1ZUNoYW5nZWQgPSBvdXRwdXQ8e1xyXG4gICAgcm93OiBhbnk7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgfT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfZGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgaW5pdExvY2FsQ29sdW1ucyA9IHNpZ25hbDxTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbFtdPihbXSk7XHJcbiAgZXhwYW5kZWRSb3cgPSBzaWduYWw8YW55IHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNyZWF0aW5nUm93ID0gY29tcHV0ZWQoKCkgPT4gT2JqZWN0LmtleXModGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmcpLmxlbmd0aCA+IDApO1xyXG5cclxuICBjb2x1bW5zOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWxbXSA9IFtdO1xyXG4gIHNlbGVjdGVkQ29sdW1uczogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsW10gPSBbXTtcclxuICBzZWxlY3RlZENvbHVtbnNTdHJpbmc6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHRhYmxlU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PjtcclxuXHJcbiAgaW5pdEZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuICBpbml0R2xvYmFsU2VhcmNoOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgc2hvd1RhYmxlID0gdHJ1ZTtcclxuXHJcbiAgYWN0aXZlUm93c0VkaXRpbmc6IHsgW3Jvd0lkOiBzdHJpbmddOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSB9ID0ge307XHJcbiAgYWN0aXZlUm93c0NyZWF0aW5nOiB7IFtyb3dJZDogc3RyaW5nXTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0gfSA9IHt9O1xyXG4gIHNlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VEYXRhOiBTdE1hdGVyaWFsVGFibGVMb2NhbFN0b3JhZ2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBTdFNuYWNrQmFyU2VydmljZSxcclxuICAgIHB1YmxpYyBzdFRhYmxlVHJhbnNsYXRpb25zOiBTdFRhYmxlc1RyYW5zbGF0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0RGlhbG9nU2VydmljZTogU3REaWFsb2dTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBJbml0aWFsaXplIFNlbGVjdGlvbk1vZGVsIHdpdGggY29tcGFyZVdpdGggdG8gY29tcGFyZSBieSBJRFxyXG4gICAgY29uc3QgbXVsdGlwbGUgPSAhdGhpcy5zZWxlY3RSb3dPbmx5T25lKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KFxyXG4gICAgICBtdWx0aXBsZSxcclxuICAgICAgW10sXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIChhLCBiKSA9PiAoYT8uaWQgPz8gYSkgPT09IChiPy5pZCA/PyBiKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMuc2V0KFsuLi50aGlzLmluaXRDb2x1bW5zKCldKTtcclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd1NlbGVjdFJvdygpKSB7XHJcbiAgICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLnVuc2hpZnQoe1xyXG4gICAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctc2VsZWN0aW5nJyxcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1zZWxlY3RpbmcnLFxyXG4gICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6ICc2MHB4JyxcclxuICAgICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICAgIHRoaXMuc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnJvd1NlbGVjdENvbHVtbkxhYmVsLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmluaXRTZWxlY3RlZFJvdygpKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuaW5pdFNlbGVjdGVkUm93KCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMudXBkYXRlKG9sZFZhbCA9PlxyXG4gICAgICAgIG9sZFZhbC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWVsZCAhPT0gJ2FjdGlvbi1yb3ctc2VsZWN0aW5nJylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSAmJiAhdGhpcy5hdXRvU2F2ZU9uQ2hhbmdlKCkpIHtcclxuICAgICAgY29uc3QgZWRpdGluZ0NvbHVtbjogU3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwgPSB7XHJcbiAgICAgICAgZmllbGQ6ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyxcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyxcclxuICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgIHdpZHRoOiAnMTEwcHgnLFxyXG4gICAgICAgIHNlbGVjdENvbHVtbkxhYmVsOlxyXG4gICAgICAgICAgdGhpcy5zdFRhYmxlVHJhbnNsYXRpb25zLmdldFRyYW5zbGF0aW9ucygpKCkucm93QWN0aW9uc0NvbHVtbkxhYmVsLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pbml0TG9jYWxDb2x1bW5zLnVwZGF0ZShjb2x1bW5zID0+IHtcclxuICAgICAgICBjb25zdCBsYXN0Q29sdW1uID0gY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmIChsYXN0Q29sdW1uPy50eXBlICE9PSAnYWN0aW9ucycpIHtcclxuICAgICAgICAgIHJldHVybiBbLi4uY29sdW1ucywgZWRpdGluZ0NvbHVtbl07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4uY29sdW1uc107XHJcbiAgICAgICAgICBuZXdDb2x1bW5zLnNwbGljZShuZXdDb2x1bW5zLmxlbmd0aCAtIDEsIDAsIGVkaXRpbmdDb2x1bW4pO1xyXG4gICAgICAgICAgcmV0dXJuIG5ld0NvbHVtbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy51cGRhdGUob2xkVmFsID0+XHJcbiAgICAgICAgb2xkVmFsLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpZWxkICE9PSAnYWN0aW9uLXJvdy1lZGl0aW5nJylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd0V4dGVuZFJvdygpKSB7XHJcbiAgICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLnVuc2hpZnQoe1xyXG4gICAgICAgIGZpZWxkOiAnYWN0aW9ucy1yb3ctZXh0ZW5kaW5nJyxcclxuICAgICAgICBoZWFkZXI6ICcnLFxyXG4gICAgICAgIHR5cGU6ICdhY3Rpb25zLXJvdy1leHRlbmRpbmcnLFxyXG4gICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgIGZpbHRlcjogZmFsc2UsXHJcbiAgICAgICAgd2lkdGg6ICc2MHB4JyxcclxuICAgICAgICBzZWxlY3RDb2x1bW5MYWJlbDpcclxuICAgICAgICAgIHRoaXMuc3RUYWJsZVRyYW5zbGF0aW9ucy5nZXRUcmFuc2xhdGlvbnMoKSgpLnJvd0V4dGVuZENvbHVtbkxhYmVsLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5pdExvY2FsQ29sdW1ucy51cGRhdGUob2xkVmFsID0+XHJcbiAgICAgICAgb2xkVmFsLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpZWxkICE9PSAnYWN0aW9uLXJvdy1leHRlbmRpbmcnKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0Q29sdW1uc0ZpbHRlclJvd0VkaXRUeXBlcygpO1xyXG5cclxuICAgIHRoaXMubG9hZExvY2FsU3RvcmFnZURhdGEoKTtcclxuXHJcbiAgICAvL3ZhbGlkYXRlIGZpbHRlcnNcclxuICAgIGNvbnN0IGZpbHRlcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmluaXRGaWx0ZXJzKTtcclxuICAgIGNvbnN0IG5ld0ZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH0gPSB7fTtcclxuICAgIGlmIChmaWx0ZXJLZXlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZmlsdGVyS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkuZmluZChcclxuICAgICAgICAgIGNvbHVtbiA9PiBjb2x1bW4uZmllbGQgPT09IGtleVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChjb2wpIHtcclxuICAgICAgICAgIGxldCB0bXBWYWw6IFN0TWF0ZXJpYWxUYWJsZUZpbHRlclZhbHVlVHlwZSA9XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZpbHRlcnNba2V5XS52YWx1ZSB8fCAnJztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pbml0RmlsdGVyc1trZXldLm1hdGNoTW9kZSA9PT0gJ2VxdWFsJykge1xyXG4gICAgICAgICAgICB0bXBWYWwgPSB0aGlzLmluaXRGaWx0ZXJzW2tleV0udmFsdWUgfHwgbnVsbDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pbml0RmlsdGVyc1trZXldLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XHJcbiAgICAgICAgICAgIHRtcFZhbCA9XHJcbiAgICAgICAgICAgICAgdGhpcy5pbml0RmlsdGVyc1trZXldLnZhbHVlICYmXHJcbiAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLmluaXRGaWx0ZXJzW2tleV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuaW5pdEZpbHRlcnNba2V5XS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgOiBbbnVsbCwgbnVsbF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbmV3RmlsdGVyc1trZXldID0ge1xyXG4gICAgICAgICAgICB2YWx1ZTogdG1wVmFsLFxyXG4gICAgICAgICAgICBtYXRjaE1vZGU6XHJcbiAgICAgICAgICAgICAgTWF0ZXJpYWxUYWJsZUZpbHRlckRpYWxvZ0NvbXBvbmVudC5nZXRCYXNlTWF0Y2hNb2RlQnlUeXBlKFxyXG4gICAgICAgICAgICAgICAgY29sLmZpbHRlclR5cGUhXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChKU09OLnN0cmluZ2lmeShuZXdGaWx0ZXJzKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5pbml0RmlsdGVycykpIHtcclxuICAgICAgdGhpcy5pbml0RmlsdGVycyA9IG5ld0ZpbHRlcnM7XHJcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzID0gbmV3RmlsdGVycztcclxuICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc2V0SW5pdFRhYmxlKCk7XHJcbiAgICB0aGlzLnNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCk7XHJcbiAgfVxyXG5cclxuICB0dXJuT25BbGxFZGl0Um93cygpIHtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlUm93c0VkaXRpbmdbcm93LmlkXSA9IHsgLi4ucm93IH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjYXB0aW9uRGF0YUNoYW5nZWQoZXZlbnQ6IElDYXB0aW9uRGF0YUNoYW5nZWQpIHtcclxuICAgIGxldCBsb2FkTGF6eURhdGEgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgZXZlbnQuZ2xvYmFsU2VhcmNoICE9PSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoIHx8XHJcbiAgICAgIGV2ZW50LmZpbHRlcnMgIT09IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzXHJcbiAgICApIHtcclxuICAgICAgbG9hZExhenlEYXRhID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgIC4uLmV2ZW50LFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgIHBhZ2VJbmRleDogbG9hZExhenlEYXRhID8gMCA6IHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCxcclxuICAgICAgc29ydEZpZWxkOiB0aGlzLnNvcnQuYWN0aXZlLFxyXG4gICAgICBzb3J0T3JkZXI6IHRoaXMuc29ydC5kaXJlY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0Q29sdW1uc09yZGVyKCk7XHJcbiAgICB0aGlzLnNldENvbHVtbnNWaXNpYmxlKCk7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkQ29sdW1ucygpO1xyXG4gICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuXHJcbiAgICBpZiAobG9hZExhenlEYXRhKSB7XHJcbiAgICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXg7XHJcbiAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLnBhZ2luYXRvci5fZW1pdFBhZ2VFdmVudCh0aGlzLmxvY2FsU3RvcmFnZURhdGEucGFnZUluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVzZXRUYWJsZVNldHRpbmdzKCkge1xyXG4gICAgdGhpcy5zaG93VGFibGUgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5zZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgdGhpcy5pbml0RmlsdGVycyA9IHt9O1xyXG4gICAgdGhpcy5pbml0R2xvYmFsU2VhcmNoID0gJyc7XHJcbiAgICB0aGlzLnNvcnQuc29ydCh7IGlkOiAnJywgc3RhcnQ6ICdhc2MnLCBkaXNhYmxlQ2xlYXI6IGZhbHNlIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucygpO1xyXG4gICAgICB0aGlzLnNldEluaXRUYWJsZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgYSBuZXcgcm93IHRvIHRoZSBsb2NhbCB0YWJsZSBjb3B5IG9ubHkuXHJcbiAgICogVGhlIHJvdyBpcyB0cmFja2VkIGluIGFjdGl2ZVJvd3NDcmVhdGluZyB1bnRpbCBzYXZlZC5cclxuICAgKiBXaGVuIHNhdmVkLCB0aGUgcGFyZW50IHJlY2VpdmVzIHRoZSBldmVudCB0aHJvdWdoIHNhdmVOZXdDcmVhdGVkUm93IG91dHB1dC5cclxuICAgKiBUaGUgcGFyZW50IGRlY2lkZXMgd2hldGhlciB0byBhY2NlcHQgYW5kIGFkZCB0byB0aGVpciBkYXRhIGFycmF5LlxyXG4gICAqL1xyXG4gIGFkZE5ld1JvdygpIHtcclxuICAgIC8vIENyZWF0ZSBuZXcgcm93IHdpdGggZ2VuZXJhdGVkIElEIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBjb2x1bW5cclxuICAgIGNvbnN0IG5ld1JvdzogYW55ID0ge1xyXG4gICAgICBpZDogU3RCYXNlU2VydmljZS5nZW5lcmF0ZUdVSUQoKSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZSBmaWVsZHMgd2l0aCBudWxsL2RlZmF1bHQgdmFsdWVzXHJcbiAgICB0aGlzLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbilcclxuICAgICAgLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICBuZXdSb3dbY29sLmZpZWxkXSA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIEFkZCB0byBsb2NhbCB0YWJsZSBjb3B5IG9ubHlcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YSA9IFsuLi50aGlzLnRhYmxlU291cmNlLmRhdGEsIG5ld1Jvd107XHJcbiAgICB0aGlzLmFjdGl2ZVJvd3NDcmVhdGluZ1tuZXdSb3cuaWRdID0geyAuLi5uZXdSb3cgfTtcclxuXHJcbiAgICAvLyBOYXZpZ2F0ZSB0byBsYXN0IHBhZ2UgdG8gc2hvdyB0aGUgbmV3IHJvd1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5hdG9yLmxhc3RQYWdlKCk7XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBlZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCkge1xyXG4gICAgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdID0geyAuLi5yb3cgfTtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuYWN0aXZlUm93c0VkaXRpbmcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy50YWJsZVNvdXJjZSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVSb3cocm93OiBhbnksIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gdGhpcy5nZXRBYnNvbHV0ZUluZGV4KGluZGV4KTtcclxuICAgIHRoaXMuc3REaWFsb2dTZXJ2aWNlXHJcbiAgICAgIC5zaG93Q29uZmlybWF0aW9uKCdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcm93PycpXHJcbiAgICAgIC5waXBlKGZpbHRlcihTdEJhc2VTZXJ2aWNlLm5vdE51bGwpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZpbHRlcihcclxuICAgICAgICAgIGRhdGEgPT4gZGF0YS5pZCAhPT0gcm93LmlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJvd0RlbGV0ZWQuZW1pdCh7IHJvdywgaW5kZXg6IGFic29sdXRlSW5kZXggfSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgYW5kIHNhdmVzIGEgcm93IChlaXRoZXIgbmV3IG9yIGVkaXRlZCkuXHJcbiAgICogRW1pdHMgdGhlIHZhbGlkYXRlZCByb3cgdG8gdGhlIHBhcmVudCB0aHJvdWdoIGVpdGhlcjpcclxuICAgKiAtIHNhdmVOZXdDcmVhdGVkUm93OiBmb3IgbmV3bHkgY3JlYXRlZCByb3dzXHJcbiAgICogLSBzYXZlTmV3Um93OiBmb3IgZWRpdGVkIGV4aXN0aW5nIHJvd3NcclxuICAgKlxyXG4gICAqIFRoZSBwYXJlbnQgaXMgcmVzcG9uc2libGUgZm9yOlxyXG4gICAqIC0gUGVyc2lzdGluZyB0aGUgY2hhbmdlIChlLmcuLCBBUEkgY2FsbClcclxuICAgKiAtIFVwZGF0aW5nIHRoZWlyIGRhdGEgYXJyYXlcclxuICAgKiAtIEhhbmRsaW5nIGVycm9ycy9yZWplY3Rpb25zXHJcbiAgICpcclxuICAgKiBUaGUgbGlicmFyeSB1cGRhdGVzIGl0cyBsb2NhbCBjb3B5IG9wdGltaXN0aWNhbGx5LlxyXG4gICAqL1xyXG4gIHNhdmVFZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IHRoaXMuZ2V0QWJzb2x1dGVJbmRleChpbmRleCk7XHJcbiAgICBsZXQgYWxsb3dTYXZlID0gdHJ1ZTtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgc3BlY2lmaWMgcm93IGlzIGJlaW5nIGNyZWF0ZWQgb3IgZWRpdGVkXHJcbiAgICBjb25zdCBpc0NyZWF0aW5nVGhpc1JvdyA9ICEhdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIGNvbnN0IHJvd0RhdGEgPSBpc0NyZWF0aW5nVGhpc1Jvd1xyXG4gICAgICA/IHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF1cclxuICAgICAgOiB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcblxyXG4gICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoY29sID0+IGNvbC5hbGxvd0VkaXRDb2x1bW4pXHJcbiAgICAgIC5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgaWYgKGNvbC5jdXN0b21FZGl0Um93VmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb2wuY3VzdG9tRWRpdFJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdLFxyXG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSxcclxuICAgICAgICAgICAgcm93XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkge1xyXG4gICAgICAgICAgICBhbGxvd1NhdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zbmFja2Jhci5lcnJvcihyZXN1bHQuZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2wuZWRpdENvbHVtblJlcXVpcmVkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA9PT0gbnVsbCB8fFxyXG4gICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPT09ICcnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYWxsb3dTYXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tiYXIuZXJyb3IoYCR7Y29sLmhlYWRlcn0gaXMgcmVxdWlyZWRgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmIChhbGxvd1NhdmUpIHtcclxuICAgICAgaWYgKGlzQ3JlYXRpbmdUaGlzUm93KSB7XHJcbiAgICAgICAgLy8gRW1pdCBuZXcgcm93IHRvIHBhcmVudCBmb3IgaGFuZGxpbmcgKEFQSSBjYWxsLCBldGMuKVxyXG4gICAgICAgIHRoaXMuc2F2ZUNyZWF0ZWRSb3cuZW1pdCh7IC4uLnRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF0gfSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gRW1pdCBlZGl0ZWQgcm93IHRvIHBhcmVudCBmb3IgaGFuZGxpbmdcclxuICAgICAgICB0aGlzLnNhdmVFZGl0ZWRSb3cuZW1pdCh7XHJcbiAgICAgICAgICByb3c6IHsgLi4udGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdIH0sXHJcbiAgICAgICAgICBpbmRleDogYWJzb2x1dGVJbmRleCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzRWRpdGluZ1tyb3cuaWRdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcGRhdGUgbG9jYWwgdGFibGUgY29weVxyXG4gICAgICBpZiAoYWJzb2x1dGVJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFJvdyA9IHsgLi4ucm93IH07XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuYWxsb3dFZGl0Q29sdW1uKVxyXG4gICAgICAgICAgLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgdXBkYXRlZFJvd1tjb2wuZmllbGRdID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudGFibGVTb3VyY2UuZGF0YVthYnNvbHV0ZUluZGV4XSA9IHVwZGF0ZWRSb3c7XHJcbiAgICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gWy4uLnRoaXMudGFibGVTb3VyY2UuZGF0YV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxFZGl0Um93KHJvdzogYW55LCBjb2x1bW46IFZpZXdTdE1hdGVyaWFsVGFibGVDb2x1bW5Nb2RlbCkge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBzcGVjaWZpYyByb3cgaXMgYmVpbmcgY3JlYXRlZFxyXG4gICAgY29uc3QgaXNDcmVhdGluZ1RoaXNSb3cgPSAhIXRoaXMuYWN0aXZlUm93c0NyZWF0aW5nW3Jvdy5pZF07XHJcblxyXG4gICAgaWYgKGlzQ3JlYXRpbmdUaGlzUm93KSB7XHJcbiAgICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsIHRhYmxlIGNvcHlcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmZpbHRlcihcclxuICAgICAgICBkYXRhID0+IGRhdGEuaWQgIT09IHJvdy5pZFxyXG4gICAgICApO1xyXG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVSb3dzQ3JlYXRpbmdbcm93LmlkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVJvd3NFZGl0aW5nW3Jvdy5pZF07XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBpbW1lZGlhdGUgZmllbGQgdmFsdWUgY2hhbmdlcyBmb3IgYXV0by1zYXZlIG1vZGUuXHJcbiAgICogSW4gYXV0by1zYXZlIG1vZGUsIG5nTW9kZWwgaXMgYm91bmQgZGlyZWN0bHkgdG8gcm93RGF0YSwgc28gd2UgZG9uJ3QgbmVlZCB0byB1cGRhdGUgaXQuXHJcbiAgICogV2Ugb25seSBlbWl0IHRvIHBhcmVudCBzbyB0aGV5IGNhbiB1cGRhdGUgdGhlaXIgZGF0YSBjb3B5LlxyXG4gICAqL1xyXG4gIG9uRmllbGRWYWx1ZUNoYW5nZWQoXHJcbiAgICByb3c6IGFueSxcclxuICAgIGNvbHVtbjogVmlld1N0TWF0ZXJpYWxUYWJsZUNvbHVtbk1vZGVsLFxyXG4gICAgdmFsdWU6IGFueSxcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSB0aGlzLmdldEFic29sdXRlSW5kZXgoaW5kZXgpO1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZS5kYXRhW2Fic29sdXRlSW5kZXhdW2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcclxuXHJcbiAgICAvLyBFbWl0IHRvIHBhcmVudCBpbW1lZGlhdGVseVxyXG4gICAgLy8gVGhlIHJvdyBvYmplY3QgaXMgYWxyZWFkeSB1cGRhdGVkIGJ5IG5nTW9kZWwgYmluZGluZ1xyXG4gICAgdGhpcy5maWVsZFZhbHVlQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgcm93OiB7IC4uLnJvdyB9LFxyXG4gICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxyXG4gICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgIGluZGV4OiBhYnNvbHV0ZUluZGV4LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSkge1xyXG4gICAgICBjb25zdCBudW1Sb3dzID0gdGhpcy50YWJsZVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQWxsUm93cygpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMudGFibGVTb3VyY2UuZGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RlZFJvdyhyb3c6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcclxuICAgIHRoaXMuc2VsZWN0Um93Q2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Um93Q2hhbmdlZCh2YWx1ZTogYm9vbGVhbiwgcm93OiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RSb3dPbmx5T25lKCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3Qocm93KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5zZWxlY3RSb3dDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBjbGlja1Jvd0FjdGlvbihyb3c6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dFeHRlbmRSb3coKSkge1xyXG4gICAgICBpZiAodGhpcy5leHBhbmRlZFJvdygpID09PSByb3cpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93LnNldChudWxsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkUm93LnNldChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxsb3dTZWxlY3RSb3coKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdFJvd0NoYW5nZWQoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSwgcm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnJvd0NsaWNrQWN0aW9uKCkpIHtcclxuICAgICAgICB0aGlzLnJvd0NsaWNrQWN0aW9uKCkhKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFic29sdXRlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5sYXp5TG9hZGluZygpKSB7XHJcbiAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRvclxyXG4gICAgICAgID8gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKyBpbmRleFxyXG4gICAgICAgIDogaW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtbnNGaWx0ZXJSb3dFZGl0VHlwZXMoKSB7XHJcbiAgICB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09ICdhY3Rpb25zJyAmJiAhY29sdW1uLnR5cGUpIHtcclxuICAgICAgICBjb2x1bW4udHlwZSA9ICdhY3Rpb25zJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFjb2x1bW4uZmlsdGVyVHlwZSAmJiBjb2x1bW4uZmlsdGVyKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnc3RyaW5nJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnbnVtYmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ2RhdGUnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdjdXN0b20tdGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyVHlwZSA9ICdjdXN0b20nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlclR5cGUgPSAnYm9vbGVhbic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXJUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5hbGxvd0VkaXRSb3coKSAmJiAhY29sdW1uLnJvd0VkaXRUeXBlKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdudW1iZXInO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ2RhdGUnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdjdXN0b20tdGVtcGxhdGUnKSB7XHJcbiAgICAgICAgICBjb2x1bW4ucm93RWRpdFR5cGUgPSAnY3VzdG9tJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGNvbHVtbi5yb3dFZGl0VHlwZSA9ICdib29sZWFuJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uLnJvd0VkaXRUeXBlID0gJ3N0cmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpIHtcclxuICAgIGxldCBmaWx0ZXJGdW5jdGlvbiA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgIGNvbnN0IHNlYXJjaFRlcm1zOiB7XHJcbiAgICAgICAgW2NvbHVtbjogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBzdEdsb2JhbFNlYXJjaDogc3RyaW5nO1xyXG4gICAgICB9ID0gSlNPTi5wYXJzZShmaWx0ZXIpO1xyXG4gICAgICBjb25zdCBzZWFyY2hUZXJtc0tleXMgPSBPYmplY3Qua2V5cyhzZWFyY2hUZXJtcyk7XHJcbiAgICAgIGxldCBzZWFyY2hPayA9IHRydWU7XHJcbiAgICAgIGxldCBzZWFyY2hPa0dsb2JhbCA9IHRydWU7XHJcblxyXG4gICAgICBzZWFyY2hUZXJtc0tleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBrZXkgIT09ICdzdEdsb2JhbFNlYXJjaCcgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmluY2x1ZGVzKGtleSkgJiZcclxuICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlYXJjaFRlcm1zW2tleV0udmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVGcm9tOiBzdHJpbmcgfCBudWxsID0gKFxyXG4gICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUgYXMgW3N0cmluZyB8IG51bGwsIHN0cmluZyB8IG51bGxdXHJcbiAgICAgICAgICAgIClbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUbzogc3RyaW5nIHwgbnVsbCA9IChcclxuICAgICAgICAgICAgICBzZWFyY2hUZXJtc1trZXldLnZhbHVlIGFzIFtzdHJpbmcgfCBudWxsLCBzdHJpbmcgfCBudWxsXVxyXG4gICAgICAgICAgICApWzFdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGVGcm9tIHx8IGRhdGVUbykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRtcENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGtleSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0bXBDb2x1bW4gJiYgdG1wQ29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZUZyb21WYWx1ZSA9IGRhdGVGcm9tID8gbmV3IERhdGUoZGF0ZUZyb20pIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUb1ZhbHVlID0gZGF0ZVRvXHJcbiAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShkYXRlVG8pLnNldERhdGUobmV3IERhdGUoZGF0ZVRvKS5nZXREYXRlKCkgKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhID0gbmV3IERhdGUoZGF0YVtrZXldKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUZyb21WYWx1ZSAmJiBkYXRlVG9WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoT2sgJiZcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEgPj0gZGF0ZUZyb21WYWx1ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YSA8PSBkYXRlVG9WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0ZUZyb21WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9IHNlYXJjaE9rICYmIHRhYmxlRGF0YSA+PSBkYXRlRnJvbVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRlVG9WYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWFyY2hPayA9IHNlYXJjaE9rICYmIHRhYmxlRGF0YSA8PSBkYXRlVG9WYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlYXJjaE9rID1cclxuICAgICAgICAgICAgICBzZWFyY2hPayAmJlxyXG4gICAgICAgICAgICAgIGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgZGF0YVtrZXldICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICAgc2VhcmNoVGVybXNba2V5XS5tYXRjaE1vZGUgPT09ICdlcXVhbCdcclxuICAgICAgICAgICAgICAgID8gZGF0YVtrZXldID09PSBzZWFyY2hUZXJtc1trZXldLnZhbHVlXHJcbiAgICAgICAgICAgICAgICA6IGRhdGFba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZihcclxuICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm1zW2tleV0udmFsdWUhLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICkgIT09IC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChzZWFyY2hUZXJtcy5zdEdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHNlYXJjaE9rR2xvYmFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgaWYgKGRhdGFbY29sXSkge1xyXG4gICAgICAgICAgICBzZWFyY2hPa0dsb2JhbCA9XHJcbiAgICAgICAgICAgICAgc2VhcmNoT2tHbG9iYWwgfHxcclxuICAgICAgICAgICAgICBkYXRhW2NvbF1cclxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXHJcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoXHJcbiAgICAgICAgICAgICAgICAgIHNlYXJjaFRlcm1zLnN0R2xvYmFsU2VhcmNoLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgKSAhPT0gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzZWFyY2hPayAmJiBzZWFyY2hPa0dsb2JhbDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZmlsdGVyRnVuY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRMYXp5TG9hZGluZygpIHtcclxuICAgIGlmICh0aGlzLmxhenlMb2FkaW5nKCkpIHtcclxuICAgICAgY29uc3QgbG9hZERhdGFSZXF1ZXN0OiBTdE1hdGVyaWFsVGFibGVMb2FkRGF0YSA9IHtcclxuICAgICAgICBmaXJzdDogdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgcm93czogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgZ2xvYmFsRmlsdGVyQ29sdW1uczogdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcsXHJcbiAgICAgICAgZ2xvYmFsRmlsdGVyOiB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoLFxyXG4gICAgICAgIHNvcnRGaWVsZDogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRGaWVsZCxcclxuICAgICAgICBzb3J0T3JkZXI6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIsXHJcbiAgICAgICAgZmlsdGVyczogdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBpZiAodGhpcy5yZXR1cm5OZXdBcGlUYWJsZVJlc3VsdCgpKSB7XHJcbiAgICAgIC8vICAgdGhpcy5sb2FkRGF0YS5lbWl0KG1hcFRhYmxlRGF0YVRvQXBpKGxvYWREYXRhUmVxdWVzdCkpO1xyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWREYXRhLmVtaXQobG9hZERhdGFSZXF1ZXN0KTtcclxuICAgICAgLy8gfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5maWx0ZXIgPSBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmZpbHRlcnMsXHJcbiAgICAgICAgc3RHbG9iYWxTZWFyY2g6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5nbG9iYWxTZWFyY2gsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkhLFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubG9jYWxTdG9yYWdlRGF0YSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW5pdFRhYmxlKCkge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5fZGF0YSk7XHJcbiAgICB0aGlzLnRhYmxlU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLl9kYXRhKTtcclxuXHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5wYWdlSW5kZXg7XHJcblxyXG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQgJiYgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLnNvcnRPcmRlcikge1xyXG4gICAgICBjb25zdCBkaXNhYmxlQ2xlYXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zb3J0LnNvcnQoeyBpZDogJycsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyIH0pO1xyXG4gICAgICB0aGlzLnNvcnQuc29ydCh7XHJcbiAgICAgICAgaWQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0RmllbGQsXHJcbiAgICAgICAgc3RhcnQ6IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5zb3J0T3JkZXIsXHJcbiAgICAgICAgZGlzYWJsZUNsZWFyLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMubGF6eUxvYWRpbmcoKSEpIHtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy50YWJsZVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xyXG4gICAgICB0aGlzLnRhYmxlU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuY3JlYXRlQ3VzdG9tRmlsdGVyRm9yTG9jYWxUYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW1pdExhenlMb2FkaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNvcnRQYWdlU3Vic2NyaXB0aW9uKCkge1xyXG4gICAgdGhpcy5zb3J0LnNvcnRDaGFuZ2VcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChcclxuICAgICAgICAgIChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycilcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YSxcclxuICAgICAgICAgIHNvcnRGaWVsZDogcmVzLmFjdGl2ZSxcclxuICAgICAgICAgIHNvcnRPcmRlcjogcmVzLmRpcmVjdGlvbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRvTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5lbWl0TGF6eUxvYWRpbmcoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxyXG4gICAgICAgICAgKHByZXYsIGN1cnIpID0+IEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5sb2NhbFN0b3JhZ2VEYXRhLFxyXG4gICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXgsXHJcbiAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3IucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVG9Mb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLmVtaXRMYXp5TG9hZGluZygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGlzcGxheWVkQ29sdW1ucygpIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuaW5pdExvY2FsQ29sdW1ucygpLm1hcChjb2wgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICB0eXBlOiBjb2wudHlwZSA/IGNvbC50eXBlIDogJ3N0cmluZycsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRDb2x1bW5zT3JkZXIoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uc1Zpc2libGUoKTtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRDb2x1bW5zKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb2x1bW5zT3JkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5jb2x1bW5zT3JkZXIpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gW1xyXG4gICAgICAgIC4uLnRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXJcclxuICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGNvbHVtbikpXHJcbiAgICAgICAgICAubWFwKGNvbHVtbiA9PiB0aGlzLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmZpZWxkID09PSBjb2x1bW4pISksXHJcbiAgICAgICAgLi4udGhpcy5jb2x1bW5zLmZpbHRlcihcclxuICAgICAgICAgIGNvbHVtbiA9PiAhdGhpcy5sb2NhbFN0b3JhZ2VEYXRhLmNvbHVtbnNPcmRlci5pbmNsdWRlcyhjb2x1bW4uZmllbGQpXHJcbiAgICAgICAgKSxcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uc1Zpc2libGUoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VEYXRhPy5zZWxlY3RlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICB2aXNpYmxlOlxyXG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEuc2VsZWN0ZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5maWVsZCkgfHxcclxuICAgICAgICAgICAgIXRoaXMubG9jYWxTdG9yYWdlRGF0YS5jb2x1bW5zT3JkZXIuaW5jbHVkZXMoY29sLmZpZWxkKSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRDb2x1bW5zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XHJcbiAgICAgIHJldHVybiBjb2wudmlzaWJsZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnNTdHJpbmcgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5tYXAoY29sID0+IGNvbC5maWVsZCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkTG9jYWxTdG9yYWdlRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZU5hbWUoKSkge1xyXG4gICAgICBjb25zdCBsb2NhbFN0b3JhZ2VEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbFN0b3JhZ2VOYW1lKCkhKTtcclxuXHJcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2VEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VEYXRhKTtcclxuICAgICAgICAvLyBjb25zdCBmaWx0ZXJzID0gdGhpcy52YWxpZE9sZEZpbHRlcnNUb05ld0Zvcm1hdChcclxuICAgICAgICAvLyAgIHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzXHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICAvLyB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5pbml0RmlsdGVycyA9IHRoaXMubG9jYWxTdG9yYWdlRGF0YS5maWx0ZXJzO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRHbG9iYWxTZWFyY2ggPSB0aGlzLmxvY2FsU3RvcmFnZURhdGEuZ2xvYmFsU2VhcmNoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0TmV3RW1wdHlMb2NhbFN0b3JhZ2VEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkT2xkRmlsdGVyc1RvTmV3Rm9ybWF0KG9sZEZpbHRlcnM6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB8IHN0cmluZztcclxuICB9KTogeyBba2V5OiBzdHJpbmddOiBTdE1hdGVyaWFsVGFibGVGaWx0ZXIgfSB7XHJcbiAgICBjb25zdCBuZXdGaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IFN0TWF0ZXJpYWxUYWJsZUZpbHRlciB9ID0ge307XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2xkRmlsdGVycyk7XHJcblxyXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICBpZiAodHlwZW9mIG9sZEZpbHRlcnNba2V5XSA9PT0gJ29iamVjdCcgJiYgb2xkRmlsdGVyc1trZXldICE9PSBudWxsKSB7XHJcbiAgICAgICAgbmV3RmlsdGVyc1trZXldID0gb2xkRmlsdGVyc1trZXldIGFzIFN0TWF0ZXJpYWxUYWJsZUZpbHRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXdGaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXROZXdFbXB0eUxvY2FsU3RvcmFnZURhdGEoKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZURhdGEgPSB7XHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplKCksXHJcbiAgICAgIHBhZ2VJbmRleDogMCxcclxuICAgICAgc2VsZWN0ZWRDb2x1bW5zOiB0aGlzLmluaXRMb2NhbENvbHVtbnMoKS5tYXAoY29sID0+IGNvbC5maWVsZCksXHJcbiAgICAgIGdsb2JhbFNlYXJjaDogJycsXHJcbiAgICAgIGNvbHVtbnNPcmRlcjogdGhpcy5pbml0TG9jYWxDb2x1bW5zKCkubWFwKGNvbCA9PiBjb2wuZmllbGQpLFxyXG4gICAgICBmaWx0ZXJzOiB7fSxcclxuICAgICAgc29ydEZpZWxkOiAnJyxcclxuICAgICAgc29ydE9yZGVyOiAnYXNjJyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpc0ZpcnN0RWRpdGFibGVDb2x1bW4oY29sdW1uOiBWaWV3U3RNYXRlcmlhbFRhYmxlQ29sdW1uTW9kZWwpOiBib29sZWFuIHtcclxuICAgIC8vIEdldCBhbGwgZWRpdGFibGUgY29sdW1ucyBpbiBvcmRlclxyXG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gdGhpcy5zZWxlY3RlZENvbHVtbnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT4gY29sLmFsbG93RWRpdENvbHVtbiAmJiBjb2wudmlzaWJsZVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCBlZGl0YWJsZSBjb2x1bW5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVkaXRhYmxlQ29sdW1ucy5sZW5ndGggPiAwICYmIGVkaXRhYmxlQ29sdW1uc1swXS5maWVsZCA9PT0gY29sdW1uLmZpZWxkXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdE1hdGVyaWFsVGFibGVMb2FkRGF0YSB7XHJcbiAgZmlyc3Q6IG51bWJlcjtcclxuICByb3dzOiBudW1iZXI7XHJcbiAgZ2xvYmFsRmlsdGVyOiBzdHJpbmc7XHJcbiAgZ2xvYmFsRmlsdGVyQ29sdW1uczogc3RyaW5nW107XHJcbiAgc29ydEZpZWxkOiBzdHJpbmc7XHJcbiAgc29ydE9yZGVyOiBTb3J0RGlyZWN0aW9uO1xyXG4gIGZpbHRlcnM6IHsgW2tleTogc3RyaW5nXTogU3RNYXRlcmlhbFRhYmxlRmlsdGVyIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RNYXRlcmlhbFRhYmxlTG9jYWxTdG9yYWdlIGV4dGVuZHMgSUNhcHRpb25EYXRhQ2hhbmdlZCB7XHJcbiAgcGFnZVNpemU6IG51bWJlcjtcclxuICBwYWdlSW5kZXg6IG51bWJlcjtcclxuICBzb3J0RmllbGQ6IHN0cmluZztcclxuICBzb3J0T3JkZXI6IFNvcnREaXJlY3Rpb247XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInN0LW1hdGVyaWFsLXRhYmxlXCI+XHJcbiAgQGlmIChpc0xvYWRpbmcoKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPlxyXG4gICAgICA8bWF0LXNwaW5uZXIgY29sb3I9XCJhY2NlbnRcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBAaWYgKHNob3dUYWJsZSkge1xyXG4gICAgPHN0LW1hdGVyaWFsLXRhYmxlLWNhcHRpb25cclxuICAgICAgW3RhYmxlVGl0bGVdPVwidGFibGVUaXRsZSgpXCJcclxuICAgICAgW2FsbG93UGlja0NvbHVtbnNdPVwiYWxsb3dQaWNrQ29sdW1ucygpXCJcclxuICAgICAgW3Nob3dHbG9iYWxTZWFyY2hdPVwic2hvd0dsb2JhbFNlYXJjaCgpXCJcclxuICAgICAgW2FsbG93UmVvcmRlckNvbHVtbnNdPVwiYWxsb3dSZW9yZGVyQ29sdW1ucygpXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtpbml0RmlsdGVyc109XCJpbml0RmlsdGVyc1wiXHJcbiAgICAgIFtpbml0R2xvYmFsU2VhcmNoXT1cImluaXRHbG9iYWxTZWFyY2hcIlxyXG4gICAgICBbc2hvd0NyZWF0ZUJ1dHRvbl09XCJzaG93Q3JlYXRlQnV0dG9uKClcIlxyXG4gICAgICBbY3JlYXRlQnV0dG9uTGFiZWxdPVwiY3JlYXRlQnV0dG9uTGFiZWwoKVwiXHJcbiAgICAgIFtjcmVhdGVCdXR0b25BY3Rpb25dPVwiY3JlYXRlQnV0dG9uQWN0aW9uKClcIlxyXG4gICAgICBbYWxsb3dDcmVhdGVSb3ddPVwiYWxsb3dDcmVhdGVSb3coKVwiXHJcbiAgICAgIFtkaXNhYmxlQ3JlYXRlQnV0dG9uXT1cImRpc2FibGVDcmVhdGVCdXR0b24oKVwiXHJcbiAgICAgIFtleHRyYUN1c3RvbUZpbHRlcl09XCJleHRyYUN1c3RvbUZpbHRlcigpXCJcclxuICAgICAgW2NyZWF0aW5nUm93XT1cImNyZWF0aW5nUm93KClcIlxyXG4gICAgICAoY2FwdGlvbkRhdGFDaGFuZ2VkKT1cImNhcHRpb25EYXRhQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgKHJlc2V0VGFibGVTZXR0aW5ncyk9XCJyZXNldFRhYmxlU2V0dGluZ3MoKVwiXHJcbiAgICAgIChhZGROZXdSb3cpPVwiYWRkTmV3Um93KClcIlxyXG4gICAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtY2FwdGlvbj5cclxuICB9XHJcblxyXG4gIDx0YWJsZVxyXG4gICAgW25nQ2xhc3NdPVwieyAnbm8taG92ZXInOiAhcm93Q2xpY2tBY3Rpb24oKSB9XCJcclxuICAgIG1hdC10YWJsZVxyXG4gICAgW2RhdGFTb3VyY2VdPVwidGFibGVTb3VyY2VcIlxyXG4gICAgbWF0U29ydFxyXG4gICAgW211bHRpVGVtcGxhdGVEYXRhUm93c109XCJhbGxvd0V4dGVuZFJvdygpXCJcclxuICA+XHJcbiAgICBAZm9yIChjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zOyB0cmFjayBjb2x1bW4pIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5maWVsZFwiPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgc3R5bGU9XCJ7eyBjb2x1bW4ud2lkdGggPyAnd2lkdGg6JyArIGNvbHVtbi53aWR0aCA6ICcnIH19XCJcclxuICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb2x1bW4uc29ydFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgQGlmIChjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbnMtcm93LXNlbGVjdGluZycgJiYgIXNlbGVjdFJvd09ubHlPbmUoKSkge1xyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZUFsbFJvd3MoKSA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5oYXNWYWx1ZSgpICYmIGlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICB9IEBlbHNlIGlmIChcclxuICAgICAgICAgICAgY29sdW1uLnR5cGUgPT09ICdhY3Rpb25zLXJvdy1lZGl0aW5nJyAmJiBzaG93RWRpdEFsbFJvd3MoKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWVuZFwiIHN0eWxlPVwid2lkdGg6IDk4cHhcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0dXJuT25BbGxFZGl0Um93cygpXCJcclxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidFZGl0IGFsbCByb3dzJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmVkaXRfYXJyb3dfZG93bjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbi5oZWFkZXIgfX1cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ7eyBjb2x1bW4ud2lkdGggPyAnd2lkdGg6JyArIGNvbHVtbi53aWR0aCA6ICcnIH19XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyAhIWFjdGl2ZVJvd3NFZGl0aW5nW2VsZW1lbnQuaWRdIH19XHJcbiAgICAgICAgICB7eyAhIWFjdGl2ZVJvd3NDcmVhdGluZ1tlbGVtZW50LmlkXSB9fVxyXG4gICAgICAgICAgPHN0LW1hdGVyaWFsLXRhYmxlLXJvdy1jZWxsXHJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcclxuICAgICAgICAgICAgW3Jvd0RhdGFdPVwiZWxlbWVudFwiXHJcbiAgICAgICAgICAgIFtyb3dJbmRleF09XCJnZXRBYnNvbHV0ZUluZGV4KGkpXCJcclxuICAgICAgICAgICAgW3Jvd0RhdGFDb3B5XT1cIlxyXG4gICAgICAgICAgICAgIGFjdGl2ZVJvd3NFZGl0aW5nW2VsZW1lbnQuaWRdIHx8IGFjdGl2ZVJvd3NDcmVhdGluZ1tlbGVtZW50LmlkXVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbcm93RWRpdGluZ109XCJcclxuICAgICAgICAgICAgICAhIWFjdGl2ZVJvd3NFZGl0aW5nW2VsZW1lbnQuaWRdIHx8XHJcbiAgICAgICAgICAgICAgISFhY3RpdmVSb3dzQ3JlYXRpbmdbZWxlbWVudC5pZF1cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3Jvd0lzU2VsZWN0ZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgICBbcm93SXNFeHBhbmRlZF09XCJlbGVtZW50ID09IGV4cGFuZGVkUm93KClcIlxyXG4gICAgICAgICAgICBbY2FuRWRpdFJvd1ZhbGlkYXRvcl09XCJjYW5FZGl0Um93VmFsaWRhdG9yKClcIlxyXG4gICAgICAgICAgICBbY2FuRGVsZXRlUm93VmFsaWRhdG9yXT1cImNhbkRlbGV0ZVJvd1ZhbGlkYXRvcigpXCJcclxuICAgICAgICAgICAgW3NlbGVjdFJvd09ubHlPbmVdPVwic2VsZWN0Um93T25seU9uZSgpXCJcclxuICAgICAgICAgICAgW2lzRmlyc3RFZGl0YWJsZUNvbHVtbl09XCJpc0ZpcnN0RWRpdGFibGVDb2x1bW4oY29sdW1uKVwiXHJcbiAgICAgICAgICAgIFthdXRvU2F2ZU9uQ2hhbmdlXT1cImF1dG9TYXZlT25DaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgIChlZGl0Um93RW1pdHRlcik9XCJlZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoZGVsZXRlUm93RW1pdHRlcik9XCJkZWxldGVSb3coZWxlbWVudCwgY29sdW1uLCBpKVwiXHJcbiAgICAgICAgICAgIChzYXZlRWRpdFJvd0VtaXR0ZXIpPVwic2F2ZUVkaXRSb3coZWxlbWVudCwgY29sdW1uLCBpKVwiXHJcbiAgICAgICAgICAgIChjYW5jZWxFZGl0Um93RW1pdHRlcik9XCJjYW5jZWxFZGl0Um93KGVsZW1lbnQsIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAoc2VsZWN0Um93Q2hhbmdlKT1cInNlbGVjdFJvd0NoYW5nZWQoJGV2ZW50LCBlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIChmaWVsZFZhbHVlQ2hhbmdlZCk9XCJcclxuICAgICAgICAgICAgICBvbkZpZWxkVmFsdWVDaGFuZ2VkKGVsZW1lbnQsIGNvbHVtbiwgJGV2ZW50LnZhbHVlLCBpKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvc3QtbWF0ZXJpYWwtdGFibGUtcm93LWNlbGw+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICB9XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJleHBhbmRlZERldGFpbFwiPlxyXG4gICAgICA8dGRcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIlxyXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwic2VsZWN0ZWRDb2x1bW5zU3RyaW5nLmxlbmd0aFwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImV4cGFuZGVkLWVsZW1lbnQtZGV0YWlsLXdyYXBwZXJcIlxyXG4gICAgICAgICAgW0BkZXRhaWxFeHBhbmRdPVwiZWxlbWVudCA9PSBleHBhbmRlZFJvdygpID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kZWQtZWxlbWVudC1kZXRhaWxcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImV4dGVuZGVkUm93VGVtcGxhdGUoKSFcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGRhdGE6IGVsZW1lbnQgfVwiXHJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJzZWxlY3RlZENvbHVtbnNTdHJpbmdcIj48L3RyPlxyXG4gICAgPHRyXHJcbiAgICAgIG1hdC1yb3dcclxuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IHNlbGVjdGVkQ29sdW1uc1N0cmluZ1wiXHJcbiAgICAgIFtjbGFzcy5leHBhbmRlZC1leHBhbmRlZC1yb3ddPVwiZXhwYW5kZWRSb3coKSA9PT0gcm93XCJcclxuICAgICAgKGNsaWNrKT1cInRoaXMuY2xpY2tSb3dBY3Rpb24ocm93KVwiXHJcbiAgICA+PC90cj5cclxuICAgIEBpZiAoYWxsb3dFeHRlbmRSb3coKSkge1xyXG4gICAgICA8dHJcclxuICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiXHJcbiAgICAgICAgY2xhc3M9XCJleHRlbmRlZC1kZXRhaWwtcm93XCJcclxuICAgICAgPjwvdHI+XHJcbiAgICB9XHJcbiAgPC90YWJsZT5cclxuICA8bWF0LXBhZ2luYXRvclxyXG4gICAgW3Nob3dGaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxyXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJbNSwgMTAsIDE1LCAyMCwgMjVdXCJcclxuICAgIFtsZW5ndGhdPVwiZGF0YUxlbmd0aCgpXCJcclxuICA+PC9tYXQtcGFnaW5hdG9yPlxyXG4gIEBpZiAoYWxsb3dTZWxlY3RSb3coKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cInN0LW1hdGVyaWFsLXRhYmxlLXNlbGVjdGVkLXJvd3NcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCI+XHJcbiAgICAgICAge3sgc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCB9fVxyXG4gICAgICAgIHt7IHN0VGFibGVUcmFuc2xhdGlvbnMuZ2V0VHJhbnNsYXRpb25zKCkoKS5yb3dTZWxlY3RlZCB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgIEBmb3IgKHJvdyBvZiBzZWxlY3Rpb24uc2VsZWN0ZWQ7IHRyYWNrIHJvdykge1xyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRSb3cocm93KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAge3sgcm93W3NlbGVjdGlvbkZpZWxkTGFiZWwoKV1cclxuICAgICAgICAgICAgICB9fTxtYXQtaWNvbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMDsgbWFyZ2luLWxlZnQ6IDEwcHhcIlxyXG4gICAgICAgICAgICAgICAgPmRlbGV0ZTwvbWF0LWljb25cclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L21hdC1tZW51PlxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
|
|
@@ -975,6 +975,7 @@ class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
975
975
|
id: row.id || StBaseService.generateGUID(),
|
|
976
976
|
}));
|
|
977
977
|
}
|
|
978
|
+
console.log(clonedData);
|
|
978
979
|
this._data = clonedData;
|
|
979
980
|
if (this.tableSource) {
|
|
980
981
|
this.tableSource.data = [...clonedData];
|
|
@@ -1545,6 +1546,7 @@ class MaterialTableComponent extends StSubscribeDestroyComponent {
|
|
|
1545
1546
|
}
|
|
1546
1547
|
}
|
|
1547
1548
|
setInitTable() {
|
|
1549
|
+
console.log(this._data);
|
|
1548
1550
|
this.tableSource = new MatTableDataSource(this._data);
|
|
1549
1551
|
this.paginator.pageSize = this.localStorageData.pageSize;
|
|
1550
1552
|
this.paginator.pageIndex = this.localStorageData.pageIndex;
|