@sunbird-cb/tree-hierarchy 0.0.13-cbrelease-4.8.26 → 0.0.15-cbrelease-4.8.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +15 -1
- package/esm2022/lib/components/term-card/term-card.component.mjs +3 -3
- package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +3 -3
- package/esm2022/lib/components/tree-view/tree-view.component.mjs +4 -4
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs +21 -7
- package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
- package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts +1 -0
- package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts.map +1 -1
- package/lib/components/tree-view/tree-view.component.d.ts.map +1 -1
- package/package.json +1 -1
package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs
CHANGED
|
@@ -43,6 +43,11 @@ export class OrgHierarchyAddModalComponent {
|
|
|
43
43
|
.subscribe((value) => {
|
|
44
44
|
this.filterOptions(value);
|
|
45
45
|
});
|
|
46
|
+
this.parentSearchControl.valueChanges
|
|
47
|
+
.pipe(takeUntil(this.destroy$))
|
|
48
|
+
.subscribe((value) => {
|
|
49
|
+
this.filterParentOptions(value);
|
|
50
|
+
});
|
|
46
51
|
}
|
|
47
52
|
ngOnDestroy() {
|
|
48
53
|
this.destroy$.next();
|
|
@@ -83,6 +88,15 @@ export class OrgHierarchyAddModalComponent {
|
|
|
83
88
|
event.stopPropagation();
|
|
84
89
|
this.searchControl.setValue('');
|
|
85
90
|
}
|
|
91
|
+
filterParentOptions(searchValue) {
|
|
92
|
+
const originalOptions = this.frameworkData?.categories?.find((v) => v.code === this.data?.previous[this.data.previous.length - 2]?.category)?.terms || [];
|
|
93
|
+
if (!searchValue) {
|
|
94
|
+
this.parentFilteredOptions = [...originalOptions];
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const filterValue = searchValue.toLowerCase();
|
|
98
|
+
this.parentFilteredOptions = originalOptions.filter((option) => option.name.toLowerCase().includes(filterValue));
|
|
99
|
+
}
|
|
86
100
|
toggleSelectAll(event) {
|
|
87
101
|
event.stopPropagation();
|
|
88
102
|
if (this.isAllSelected()) {
|
|
@@ -206,4 +220,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
206
220
|
type: Inject,
|
|
207
221
|
args: [MAT_DIALOG_DATA]
|
|
208
222
|
}] }, { type: i2.FrameworkService }, { type: i3.MatLegacySnackBar }]; } });
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWhpZXJhcmNoeS1hZGQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RyZWUtaGllcmFyY2h5L3NyYy9saWIvY29tcG9uZW50cy9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBc0Msc0JBQXNCLElBQUksZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFTdkIsTUFBTSxPQUFPLDZCQUE2QjtJQWV4QyxZQUNTLFNBQXNELEVBQzdCLElBQVMsRUFDakMsZ0JBQWtDLEVBQ2xDLFFBQXFCO1FBSHRCLGNBQVMsR0FBVCxTQUFTLENBQTZDO1FBQzdCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBbEIvQixrQkFBYSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FB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LE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO0lBQzdGLENBQUM7SUFFRCxTQUFTLENBQUMsWUFBb0I7UUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDM0QsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUTtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDNUcsQ0FBQzsrR0EvTlUsNkJBQTZCLG9EQWlCOUIsZUFBZTttR0FqQmQsNkJBQTZCLDBFQ2YxQyxtOU1BbUhNOzs0RkRwR08sNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLG9DQUFvQzs7MEJBcUIzQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcidcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItY2ItdHJlZS1vcmctaGllcmFyY2h5LWFkZC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgT3JnSGllcmFyY2h5QWRkTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBwYXJlbnRTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgc2VsZWN0ZWRPcmdzQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDwoc3RyaW5nIHwgbnVtYmVyKVtdPihbXSk7XG4gIHBhcmVudFNlbGVjdGVkT3JnQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gIFxuICAvLyBFeGFtcGxlIG9wdGlvbnMgLSByZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgZGF0YVxuICBvcmdPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZE9wdGlvbnM6IGFueVtdID0gW107XG5cbiAgcGFyZW50RmlsdGVyZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGZyYW1ld29ya0RhdGE6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T3JnSGllcmFyY2h5QWRkTW9kYWxDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LCBcbiAgICBwcml2YXRlIGZyYW1ld29ya1NlcnZpY2U6IEZyYW1ld29ya1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja2JhcjogTWF0U25hY2tCYXIsXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdldFNlbGVjdGVkU3RhdGVPcmcoKVxuICAgIGlmKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEudHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIHRoaXMuZnJhbWV3b3JrRGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlKTtcbiAgICAgIHRoaXMuZ2V0UGFyZW50VGVybXModGhpcy5kYXRhLnByZXZpb3VzW3RoaXMuZGF0YS5wcmV2aW91cy5sZW5ndGggLSAyXSk7XG4gICAgfVxuICAgIC8vIExpc3RlbiBmb3Igc2VhcmNoIGNoYW5nZXNcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGZpbHRlck9wdGlvbnMoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIGlmICghc2VhcmNoVmFsdWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gWy4uLnRoaXMub3JnT3B0aW9uc107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3JnT3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IFxuICAgICAgb3B0aW9uLm9yZ05hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSlcbiAgICApO1xuICAgIFxuICAgIC8vIEVuc3VyZSBzZWxlY3RlZCBpdGVtcyBhcmUgcHJlc2VydmVkIGluIHRoZSBmaWx0ZXJlZCBsaXN0XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWUgfHwgW107XG4gICAgaWYgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEZpbmQgYW55IHNlbGVjdGVkIGl0ZW1zIHRoYXQgd2VyZSBmaWx0ZXJlZCBvdXRcbiAgICAgIGNvbnN0IG1pc3NpbmdTZWxlY3RlZE9wdGlvbnMgPSB0aGlzLm9yZ09wdGlvbnMuZmlsdGVyKChvcHRpb246YW55KSA9PiBcbiAgICAgICAgc2VsZWN0ZWRJZHMuaW5jbHVkZXMob3B0aW9uLmlkZW50aWZpZXIpICYmIFxuICAgICAgICAhdGhpcy5maWx0ZXJlZE9wdGlvbnMuc29tZShmaWx0ZXJlZCA9PiBmaWx0ZXJlZC5pZGVudGlmaWVyID09PSBvcHRpb24uaWRlbnRpZmllcilcbiAgICAgICk7XG4gICAgICAvLyBBZGQgbWlzc2luZyBzZWxlY3RlZCBpdGVtcyBiYWNrIHRvIGZpbHRlcmVkT3B0aW9uc1xuICAgICAgaWYgKG1pc3NpbmdTZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi50aGlzLmZpbHRlcmVkT3B0aW9ucywgLi4ubWlzc2luZ1NlbGVjdGVkT3B0aW9uc107XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc29ydE9wdGlvbnNXaXRoU2VsZWN0ZWRGaXJzdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0T3B0aW9uc1dpdGhTZWxlY3RlZEZpcnN0KCkge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlIHx8IFtdO1xuICAgIFxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFJc1NlbGVjdGVkID0gc2VsZWN0ZWRJZHMuaW5jbHVkZXMoYS5pZGVudGlmaWVyKTtcbiAgICAgIGNvbnN0IGJJc1NlbGVjdGVkID0gc2VsZWN0ZWRJZHMuaW5jbHVkZXMoYi5pZGVudGlmaWVyKTtcbiAgICAgIFxuICAgICAgaWYgKGFJc1NlbGVjdGVkICYmICFiSXNTZWxlY3RlZCkge1xuICAgICAgICByZXR1cm4gLTE7IC8vIGEgY29tZXMgZmlyc3QgKHNlbGVjdGVkIGl0ZW1zIGZpcnN0KVxuICAgICAgfVxuICAgICAgaWYgKCFhSXNTZWxlY3RlZCAmJiBiSXNTZWxlY3RlZCkge1xuICAgICAgICByZXR1cm4gMTsgLy8gYiBjb21lcyBmaXJzdCAoc2VsZWN0ZWQgaXRlbXMgZmlyc3QpXG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIGJvdGggYXJlIHNlbGVjdGVkIG9yIGJvdGggYXJlIG5vdCBzZWxlY3RlZCwgc29ydCBhbHBoYWJldGljYWxseVxuICAgICAgcmV0dXJuIGEub3JnTmFtZS5sb2NhbGVDb21wYXJlKGIub3JnTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhclNlYXJjaChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnNldFZhbHVlKFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWxsVmFsdWVzOmFueSA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uLmlkZW50aWZpZXIpO1xuICAgICAgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnNldFZhbHVlKGFsbFZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC52YWx1ZT8ubGVuZ3RoIHx8IDA7XG4gICAgY29uc3QgbnVtRmlsdGVyZWQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1TZWxlY3RlZCA9PT0gbnVtRmlsdGVyZWQ7XG4gIH1cblxuICBnZXRTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHM6IGFueSA9IHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICByZXR1cm4gdGhpcy5vcmdPcHRpb25zLmZpbHRlcigob3B0aW9uOiBhbnkpID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKG9wdGlvbi5pZGVudGlmaWVyKSk7XG4gIH1cblxuICBnZXRQYXJlbnRTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHRoaXMucGFyZW50U2VsZWN0ZWRPcmdDb250cm9sLnZhbHVlO1xuICAgIHJldHVybiB0aGlzLnBhcmVudEZpbHRlcmVkT3B0aW9ucy5maW5kKChvcHRpb246IGFueSkgPT4gb3B0aW9uLmNvZGUgPT09IHNlbGVjdGVkSWQpO1xuICB9XG5cbiAgcmVtb3ZlU2VsZWN0ZWQoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWUgfHwgW107XG4gICAgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnNldFZhbHVlKFxuICAgICAgY3VycmVudFNlbGVjdGlvbi5maWx0ZXIoKHZhbHVlOiBhbnkpID0+IHZhbHVlICE9PSBpZClcbiAgICApO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgb25TYXZlKCkge1xuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnR5cGUgPT09ICd1cGRhdGUnICYmIHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbD8udmFsdWU/LmZpbmQoKHY6IGFueSkgPT4gdiA9PT0gdGhpcy5wYXJlbnRTZWxlY3RlZE9yZ0NvbnRyb2wudmFsdWUpKSB7XG4gICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oJ1lvdSBjYW5ub3Qgc2VsZWN0IHRoZSBwYXJlbnQgb3JnYW5pemF0aW9uIGFzIGEgY2hpbGQgb3JnYW5pemF0aW9uJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS50eXBlID09PSAndXBkYXRlJyAmJiB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2w/LnZhbHVlPy5sZW5ndGggPT09IDAgJiYgIXRoaXMucGFyZW50U2VsZWN0ZWRPcmdDb250cm9sLnZhbHVlKSB7XG4gICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9yZ2FuaXphdGlvbiBvciBwYXJlbnQgb3JnYW5pemF0aW9uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnR5cGUgPT09ICdhZGQnICYmIHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbD8udmFsdWU/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKCdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBvcmdhbml6YXRpb24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRPcmdzID0gdGhpcy5nZXRTZWxlY3RlZE9wdGlvbnMoKTtcbiAgICBjb25zdCBwYXJlbnRTZWxlY3RlZE9yZyA9IHRoaXMuZ2V0UGFyZW50U2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgc2VsZWN0ZWRPcmc6IHNlbGVjdGVkT3JncyxcbiAgICAgIHBhcGFyZW50U2VsZWN0ZWRPcmc6IHBhcmVudFNlbGVjdGVkT3JnLFxuICAgICAgY3VycmVudFRlcm06IHRoaXMuZGF0YT8ucHJldmlvdXNbdGhpcy5kYXRhLnByZXZpb3VzLmxlbmd0aCAtIDFdLFxuICAgICAgdHlwZTogdGhpcy5kYXRhLnR5cGUsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRTZWxlY3RlZFN0YXRlT3JnKCkge1xuICAgIGNvbnN0IG9yZ0xpc3REYXRhID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmFkZGl0aW9uYWxEYXRhIHx8IFtdXG4gICAgaWYgKG9yZ0xpc3REYXRhICYmIG9yZ0xpc3REYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZnJhbXdvcmtEYXRhID0gXy5jbG9uZURlZXAodGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNvbXBsZXRlUmVzcG9uc2UpXG4gICAgICAgIGxldCBvcmdJZHNBZGRlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKGZyYW13b3JrRGF0YSAmJiBmcmFtd29ya0RhdGEuY2F0ZWdvcmllcyAmJiBmcmFtd29ya0RhdGEuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZnJhbXdvcmtEYXRhLmNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNhdGVnb3J5LnRlcm1zICYmIGNhdGVnb3J5LnRlcm1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnkudGVybXMuZm9yRWFjaCgodGVybTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRlcm0uYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgdGVybS5hZGRpdGlvbmFsUHJvcGVydGllcy5vcmdJZCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFvcmdJZHNBZGRlZC5pbmNsdWRlcyh0ZXJtLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLm9yZ0lkKSkge1xuICAgICAgICAgICAgICAgICAgICBvcmdJZHNBZGRlZC5wdXNoKHRlcm0uYWRkaXRpb25hbFByb3BlcnRpZXMub3JnSWQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcmdMaXN0ID0gb3JnTGlzdERhdGEuZmlsdGVyKChvcmc6IGFueSkgPT4gXG4gICAgICAgICAgIW9yZ0lkc0FkZGVkLmluY2x1ZGVzKG9yZy5pZGVudGlmaWVyKVxuICAgICAgICApXG4gICAgICAgIHRoaXMub3JnT3B0aW9ucyA9IGZpbHRlcmVkT3JnTGlzdCB8fCBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5vcmdPcHRpb25zXTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBzcGFjZSwgd2Ugb25seSB3YW50IHRvIHByZXZlbnQgZGVmYXVsdCBiZWhhdmlvciB3aGVuIGluIHRoZSBzZWFyY2ggaW5wdXRcbiAgICAvLyBidXQgYWxsb3cgdGhlIGV2ZW50IHRvIHByb3BhZ2F0ZSBmb3Igc2VsZWN0aW9uIGZ1bmN0aW9uYWxpdHlcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnICcgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgLy8gRG9uJ3QgcHJldmVudCBwcm9wYWdhdGlvbiwganVzdCBwcmV2ZW50IGRlZmF1bHQgdG8gYWxsb3cgdHlwaW5nIHNwYWNlcyBpbiBzZWFyY2hcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjaGVja0FuZENsb3NlKHNlbGVjdEVsZW1lbnQ6IE1hdFNlbGVjdCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlIHx8IHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc25hY2tiYXIub3BlbignUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgb3JnYW5pemF0aW9uJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0RWxlbWVudC5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldE5hbWVPZk9yZyhpZDphbnkpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmluZCgob3B0aW9uOiBhbnkpID0+IG9wdGlvbi5pZGVudGlmaWVyID09PSBpZCk/Lm9yZ05hbWUgfHwgJyc7XG4gIH1cblxuICByZW1vdmVPcmcoaXRlbVRvUmVtb3ZlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlIHx8IFtdO1xuICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZXMgPSBjdXJyZW50VmFsdWVzLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IGl0ZW1Ub1JlbW92ZSk7XG4gICAgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnNldFZhbHVlKHVwZGF0ZWRWYWx1ZXMpO1xuICB9XG5cbiAgZ2V0UGFyZW50VGVybXMoaXRlbTphbnkpIHtcbiAgICB0aGlzLnBhcmVudEZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZnJhbWV3b3JrRGF0YS5jYXRlZ29yaWVzLmZpbmQoKHY6YW55KSA9PiB2LmNvZGUgPT09IGl0ZW0uY2F0ZWdvcnkpLnRlcm1zXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvcmctaGllcmFyY2h5LW1vZGFsXCI+XG4gIDwhLS0gTW9kYWwgSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgPGgyIGNsYXNzPVwibS0wXCI+VXBkYXRlIE9yZ2FuaXNhdGlvbiBIaWVyYXJjaHk8L2gyPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBNb2RhbCBDb250ZW50IC0tPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBvcmctY29udGFpbmVyXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3JnVHlwZU5hbWVcIj57e2RhdGE/LnNlbGVjdGVkT3JnRGF0YT8uc2JPcmdUeXBlfX08L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm9yZ1R5cGVTZWxlY3RlZFwiPnt7ZGF0YT8uc2VsZWN0ZWRPcmdEYXRhPy5vcmdOYW1lPy50b0xvd2VyQ2FzZSgpfX08L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoZWQtbGluZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LnByZXZpb3VzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgb3JnLWNvbnRhaW5lclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGE/LnByZXZpb3VzO2xldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tbGVmdCc6IDMwICogKGkrMSkgKyAncHgnfVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LnR5cGUgPT09ICd1cGRhdGUnICYmIGkgPT09IChkYXRhPy5wcmV2aW91cz8ubGVuZ3RoIC0gMilcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3JnVHlwZU5hbWVcIj57e2l0ZW0/LmNhdGVnb3J5Py50b0xvd2VyQ2FzZSgpfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdWItbGFiZWxcIj5Pbmx5IHRoZSBpbXBvcnRlZCBvcmdhbmlzYXRpb24gd2lsbCBiZSBsaXN0ZWQuPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbCBjdXN0b20taGVpZ2h0LXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJwYXJlbnRTZWxlY3RlZE9yZ0NvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiICNwYXJlbnRTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwYW5lbENsYXNzXT1cIidtYXQtc2VsZWN0LXBhbmVsLWJlbG93J1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyBcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlT3B0aW9uQ2VudGVyaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlS2V5ZG93bigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXIgZmxleCBnYXAtNSBmbGV4LW1pZGRsZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJwYXJlbnRTZWFyY2hDb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlU2VhcmNoS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgI3NlYXJjaElucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJuby1jaGVja2JveFwiICpuZ0Zvcj1cImxldCBvcmdhbml6YXRpb24gb2YgcGFyZW50RmlsdGVyZWRPcHRpb25zXCIgW3ZhbHVlXT1cIm9yZ2FuaXphdGlvbi5jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29yZ2FuaXphdGlvbi5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInBhcmVudEZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDBcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIGRhdGEgZm91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaGVkLWxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoZGF0YT8udHlwZSA9PT0gJ3VwZGF0ZScgJiYgaSA9PT0gKGRhdGE/LnByZXZpb3VzPy5sZW5ndGggLSAyKSlcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3JnVHlwZU5hbWVcIj57e2l0ZW0/LmNhdGVnb3J5Py50b0xvd2VyQ2FzZSgpfX08L2xhYmVsPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJvcmdUeXBlU2VsZWN0ZWRcIj57e2l0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCl9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoZWQtbGluZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY3VycmVudERhdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG9yZy1jb250YWluZXJcIiBcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLWxlZnQnOiAzMCAqIChkYXRhPy5wcmV2aW91cz8ubGVuZ3RoICsgMSkgKyAncHgnfVwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm9yZ1R5cGVOYW1lXCI+e3tkYXRhPy5jdXJyZW50RGF0YT8uY29kZT8udG9Mb3dlckNhc2UoKX19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdWItbGFiZWxcIj5PcmdhbmlzYXRpb25zIHdoaWNoIGFyZSBhbHJlYWR5IGluIHRoZSBoaWVyYXJjaHkgd2lsbCBub3QgbGlzdGVkIHRvIGFkZCBvciBpbiBzZWFyY2hhYmxlIGRyb3Bkb3duPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaGFibGUgbXVsdGktc2VsZWN0IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbCBjdXN0b20taGVpZ2h0LXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkT3Jnc0NvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiICNzaW5nbGVTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ21hdC1zZWxlY3QtcGFuZWwtYmVsb3cnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmcgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlT3B0aW9uQ2VudGVyaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXIgZmxleCBnYXAtNSBmbGV4LW1pZGRsZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaENvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVNlYXJjaEtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgI3NlYXJjaElucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9XCJhZGQtYnRuXCIgKGNsaWNrKT1cImNoZWNrQW5kQ2xvc2Uoc2luZ2xlU2VsZWN0KTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFyZ2luLXJlbW92ZVwiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcmdhbml6YXRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCIgW3ZhbHVlXT1cIm9yZ2FuaXphdGlvbi5pZGVudGlmaWVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3JnYW5pemF0aW9uLm9yZ05hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDBcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gZGF0YSBmb3VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkT3Jnc0NvbnRyb2w/LnZhbHVlPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3QgY2xhc3M9XCJvcmctY2xpcFwiIGFyaWEtbGFiZWw9XCJvcmdTZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz1cImNsaXAtb3B0aW9uIGZsZXggZmxleC1taWRkbGVcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlXCIgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlT3JnKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0TmFtZU9mT3JnKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmUgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIE1vZGFsIEZvb3RlciAtLT5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNsYXNzPVwiYnRuLWNvbW1vbiBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIENhbmNlbFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gXG4gICAgICBtYXQtc3Ryb2tlZC1idXR0b24gXG4gICAgICBjbGFzcz1cImJ0bi1jb21tb24gYnRuLXByaW1hcnlcIiBcbiAgICAgIChjbGljayk9XCJvblNhdmUoKVwiIFxuICAgICAgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgU2F2ZVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWhpZXJhcmNoeS1hZGQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RyZWUtaGllcmFyY2h5L3NyYy9saWIvY29tcG9uZW50cy9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBc0Msc0JBQXNCLElBQUksZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFTdkIsTUFBTSxPQUFPLDZCQUE2QjtJQWV4QyxZQUNTLFNBQXNELEVBQzdCLElBQVMsRUFDakMsZ0JBQWtDLEVBQ2xDLFFBQXFCO1FBSHRCLGNBQVMsR0FBVCxTQUFTLENBQTZDO1FBQzdCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBbEIvQixrQkFBYSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FB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TUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUTtRQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDNUcsQ0FBQzsrR0F0UFUsNkJBQTZCLG9EQWlCOUIsZUFBZTttR0FqQmQsNkJBQTZCLDBFQ2YxQyxtOU1BbUhNOzs0RkRwR08sNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLG9DQUFvQzs7MEJBcUIzQyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5qZWN0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcidcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItY2ItdHJlZS1vcmctaGllcmFyY2h5LWFkZC1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9vcmctaGllcmFyY2h5LWFkZC1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29yZy1oaWVyYXJjaHktYWRkLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgT3JnSGllcmFyY2h5QWRkTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBwYXJlbnRTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgc2VsZWN0ZWRPcmdzQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDwoc3RyaW5nIHwgbnVtYmVyKVtdPihbXSk7XG4gIHBhcmVudFNlbGVjdGVkT3JnQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gIFxuICAvLyBFeGFtcGxlIG9wdGlvbnMgLSByZXBsYWNlIHdpdGggeW91ciBhY3R1YWwgZGF0YVxuICBvcmdPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJlZE9wdGlvbnM6IGFueVtdID0gW107XG5cbiAgcGFyZW50RmlsdGVyZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGZyYW1ld29ya0RhdGE6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8T3JnSGllcmFyY2h5QWRkTW9kYWxDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LCBcbiAgICBwcml2YXRlIGZyYW1ld29ya1NlcnZpY2U6IEZyYW1ld29ya1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja2JhcjogTWF0U25hY2tCYXIsXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdldFNlbGVjdGVkU3RhdGVPcmcoKVxuICAgIGlmKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEudHlwZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIHRoaXMuZnJhbWV3b3JrRGF0YSA9IF8uY2xvbmVEZWVwKHRoaXMuZnJhbWV3b3JrU2VydmljZS5jb21wbGV0ZVJlc3BvbnNlKTtcbiAgICAgIHRoaXMuZ2V0UGFyZW50VGVybXModGhpcy5kYXRhLnByZXZpb3VzW3RoaXMuZGF0YS5wcmV2aW91cy5sZW5ndGggLSAyXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnModmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnBhcmVudFNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyUGFyZW50T3B0aW9ucyh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBmaWx0ZXJPcHRpb25zKHNlYXJjaFZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi50aGlzLm9yZ09wdGlvbnNdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9yZ09wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBcbiAgICAgIG9wdGlvbi5vcmdOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpXG4gICAgKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgc2VsZWN0ZWQgaXRlbXMgYXJlIHByZXNlcnZlZCBpbiB0aGUgZmlsdGVyZWQgbGlzdFxuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlIHx8IFtdO1xuICAgIGlmIChzZWxlY3RlZElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBGaW5kIGFueSBzZWxlY3RlZCBpdGVtcyB0aGF0IHdlcmUgZmlsdGVyZWQgb3V0XG4gICAgICBjb25zdCBtaXNzaW5nU2VsZWN0ZWRPcHRpb25zID0gdGhpcy5vcmdPcHRpb25zLmZpbHRlcigob3B0aW9uOmFueSkgPT4gXG4gICAgICAgIHNlbGVjdGVkSWRzLmluY2x1ZGVzKG9wdGlvbi5pZGVudGlmaWVyKSAmJiBcbiAgICAgICAgIXRoaXMuZmlsdGVyZWRPcHRpb25zLnNvbWUoZmlsdGVyZWQgPT4gZmlsdGVyZWQuaWRlbnRpZmllciA9PT0gb3B0aW9uLmlkZW50aWZpZXIpXG4gICAgICApO1xuICAgICAgLy8gQWRkIG1pc3Npbmcgc2VsZWN0ZWQgaXRlbXMgYmFjayB0byBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgIGlmIChtaXNzaW5nU2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5maWx0ZXJlZE9wdGlvbnMsIC4uLm1pc3NpbmdTZWxlY3RlZE9wdGlvbnNdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNvcnRPcHRpb25zV2l0aFNlbGVjdGVkRmlyc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydE9wdGlvbnNXaXRoU2VsZWN0ZWRGaXJzdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICBcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBhSXNTZWxlY3RlZCA9IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGEuaWRlbnRpZmllcik7XG4gICAgICBjb25zdCBiSXNTZWxlY3RlZCA9IHNlbGVjdGVkSWRzLmluY2x1ZGVzKGIuaWRlbnRpZmllcik7XG4gICAgICBcbiAgICAgIGlmIChhSXNTZWxlY3RlZCAmJiAhYklzU2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIC0xOyAvLyBhIGNvbWVzIGZpcnN0IChzZWxlY3RlZCBpdGVtcyBmaXJzdClcbiAgICAgIH1cbiAgICAgIGlmICghYUlzU2VsZWN0ZWQgJiYgYklzU2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIDE7IC8vIGIgY29tZXMgZmlyc3QgKHNlbGVjdGVkIGl0ZW1zIGZpcnN0KVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBib3RoIGFyZSBzZWxlY3RlZCBvciBib3RoIGFyZSBub3Qgc2VsZWN0ZWQsIHNvcnQgYWxwaGFiZXRpY2FsbHlcbiAgICAgIHJldHVybiBhLm9yZ05hbWUubG9jYWxlQ29tcGFyZShiLm9yZ05hbWUpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJTZWFyY2goZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIGZpbHRlclBhcmVudE9wdGlvbnMoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIGNvbnN0IG9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuZnJhbWV3b3JrRGF0YT8uY2F0ZWdvcmllcz8uZmluZCgodjphbnkpID0+IFxuICAgICAgdi5jb2RlID09PSB0aGlzLmRhdGE/LnByZXZpb3VzW3RoaXMuZGF0YS5wcmV2aW91cy5sZW5ndGggLSAyXT8uY2F0ZWdvcnlcbiAgICApPy50ZXJtcyB8fCBbXTtcbiAgICBcbiAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICAvLyBSZXNldCB0byBhbGwgb3JpZ2luYWwgb3B0aW9ucyB3aGVuIHNlYXJjaCBpcyBlbXB0eVxuICAgICAgdGhpcy5wYXJlbnRGaWx0ZXJlZE9wdGlvbnMgPSBbLi4ub3JpZ2luYWxPcHRpb25zXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucGFyZW50RmlsdGVyZWRPcHRpb25zID0gb3JpZ2luYWxPcHRpb25zLmZpbHRlcigob3B0aW9uOmFueSkgPT4gXG4gICAgICBvcHRpb24ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKVxuICAgICk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wuc2V0VmFsdWUoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhbGxWYWx1ZXM6YW55ID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24uaWRlbnRpZmllcik7XG4gICAgICB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wuc2V0VmFsdWUoYWxsVmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlPy5sZW5ndGggfHwgMDtcbiAgICBjb25zdCBudW1GaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPiAwICYmIG51bVNlbGVjdGVkID09PSBudW1GaWx0ZXJlZDtcbiAgfVxuXG4gIGdldFNlbGVjdGVkT3B0aW9ucygpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkczogYW55ID0gdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlIHx8IFtdO1xuICAgIHJldHVybiB0aGlzLm9yZ09wdGlvbnMuZmlsdGVyKChvcHRpb246IGFueSkgPT4gc2VsZWN0ZWRJZHMuaW5jbHVkZXMob3B0aW9uLmlkZW50aWZpZXIpKTtcbiAgfVxuXG4gIGdldFBhcmVudFNlbGVjdGVkT3B0aW9ucygpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkID0gdGhpcy5wYXJlbnRTZWxlY3RlZE9yZ0NvbnRyb2wudmFsdWU7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50RmlsdGVyZWRPcHRpb25zLmZpbmQoKG9wdGlvbjogYW55KSA9PiBvcHRpb24uY29kZSA9PT0gc2VsZWN0ZWRJZCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZChpZDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wuc2V0VmFsdWUoXG4gICAgICBjdXJyZW50U2VsZWN0aW9uLmZpbHRlcigodmFsdWU6IGFueSkgPT4gdmFsdWUgIT09IGlkKVxuICAgICk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBvblNhdmUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEudHlwZSA9PT0gJ3VwZGF0ZScgJiYgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sPy52YWx1ZT8uZmluZCgodjogYW55KSA9PiB2ID09PSB0aGlzLnBhcmVudFNlbGVjdGVkT3JnQ29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc25hY2tiYXIub3BlbignWW91IGNhbm5vdCBzZWxlY3QgdGhlIHBhcmVudCBvcmdhbml6YXRpb24gYXMgYSBjaGlsZCBvcmdhbml6YXRpb24nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLnR5cGUgPT09ICd1cGRhdGUnICYmIHRoaXMuc2VsZWN0ZWRPcmdzQ29udHJvbD8udmFsdWU/Lmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5wYXJlbnRTZWxlY3RlZE9yZ0NvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMuc25hY2tiYXIub3BlbignUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCBvbmUgb3JnYW5pemF0aW9uIG9yIHBhcmVudCBvcmdhbml6YXRpb24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEudHlwZSA9PT0gJ2FkZCcgJiYgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sPy52YWx1ZT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9yZ2FuaXphdGlvbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZE9yZ3MgPSB0aGlzLmdldFNlbGVjdGVkT3B0aW9ucygpO1xuICAgIGNvbnN0IHBhcmVudFNlbGVjdGVkT3JnID0gdGhpcy5nZXRQYXJlbnRTZWxlY3RlZE9wdGlvbnMoKTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XG4gICAgICBzZWxlY3RlZE9yZzogc2VsZWN0ZWRPcmdzLFxuICAgICAgcGFwYXJlbnRTZWxlY3RlZE9yZzogcGFyZW50U2VsZWN0ZWRPcmcsXG4gICAgICBjdXJyZW50VGVybTogdGhpcy5kYXRhPy5wcmV2aW91c1t0aGlzLmRhdGEucHJldmlvdXMubGVuZ3RoIC0gMV0sXG4gICAgICB0eXBlOiB0aGlzLmRhdGEudHlwZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlbGVjdGVkU3RhdGVPcmcoKSB7XG4gICAgY29uc3Qgb3JnTGlzdERhdGEgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuYWRkaXRpb25hbERhdGEgfHwgW11cbiAgICBpZiAob3JnTGlzdERhdGEgJiYgb3JnTGlzdERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmcmFtd29ya0RhdGEgPSBfLmNsb25lRGVlcCh0aGlzLmZyYW1ld29ya1NlcnZpY2UuY29tcGxldGVSZXNwb25zZSlcbiAgICAgICAgbGV0IG9yZ0lkc0FkZGVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoZnJhbXdvcmtEYXRhICYmIGZyYW13b3JrRGF0YS5jYXRlZ29yaWVzICYmIGZyYW13b3JrRGF0YS5jYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmcmFtd29ya0RhdGEuY2F0ZWdvcmllcy5mb3JFYWNoKChjYXRlZ29yeTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoY2F0ZWdvcnkudGVybXMgJiYgY2F0ZWdvcnkudGVybXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjYXRlZ29yeS50ZXJtcy5mb3JFYWNoKCh0ZXJtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGVybS5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiB0ZXJtLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLm9yZ0lkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW9yZ0lkc0FkZGVkLmluY2x1ZGVzKHRlcm0uYWRkaXRpb25hbFByb3BlcnRpZXMub3JnSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9yZ0lkc0FkZGVkLnB1c2godGVybS5hZGRpdGlvbmFsUHJvcGVydGllcy5vcmdJZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJlZE9yZ0xpc3QgPSBvcmdMaXN0RGF0YS5maWx0ZXIoKG9yZzogYW55KSA9PiBcbiAgICAgICAgICAhb3JnSWRzQWRkZWQuaW5jbHVkZXMob3JnLmlkZW50aWZpZXIpXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5vcmdPcHRpb25zID0gZmlsdGVyZWRPcmdMaXN0IHx8IFtdO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFsuLi50aGlzLm9yZ09wdGlvbnNdO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIHNwYWNlLCB3ZSBvbmx5IHdhbnQgdG8gcHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgIC8vIGJ1dCBhbGxvdyB0aGUgZXZlbnQgdG8gcHJvcGFnYXRlIGZvciBzZWxlY3Rpb24gZnVuY3Rpb25hbGl0eVxuICAgIGlmIChldmVudC5rZXkgPT09ICcgJyAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAvLyBEb24ndCBwcmV2ZW50IHByb3BhZ2F0aW9uLCBqdXN0IHByZXZlbnQgZGVmYXVsdCB0byBhbGxvdyB0eXBpbmcgc3BhY2VzIGluIHNlYXJjaFxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IFxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNoZWNrQW5kQ2xvc2Uoc2VsZWN0RWxlbWVudDogTWF0U2VsZWN0KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWUgfHwgdGhpcy5zZWxlY3RlZE9yZ3NDb250cm9sLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKCdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBvcmdhbml6YXRpb24nKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RFbGVtZW50LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TmFtZU9mT3JnKGlkOmFueSkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kKChvcHRpb246IGFueSkgPT4gb3B0aW9uLmlkZW50aWZpZXIgPT09IGlkKT8ub3JnTmFtZSB8fCAnJztcbiAgfVxuXG4gIHJlbW92ZU9yZyhpdGVtVG9SZW1vdmU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXMgPSB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWUgfHwgW107XG4gICAgY29uc3QgdXBkYXRlZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gaXRlbVRvUmVtb3ZlKTtcbiAgICB0aGlzLnNlbGVjdGVkT3Jnc0NvbnRyb2wuc2V0VmFsdWUodXBkYXRlZFZhbHVlcyk7XG4gIH1cblxuICBnZXRQYXJlbnRUZXJtcyhpdGVtOmFueSkge1xuICAgIHRoaXMucGFyZW50RmlsdGVyZWRPcHRpb25zID0gdGhpcy5mcmFtZXdvcmtEYXRhLmNhdGVnb3JpZXMuZmluZCgodjphbnkpID0+IHYuY29kZSA9PT0gaXRlbS5jYXRlZ29yeSkudGVybXNcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm9yZy1oaWVyYXJjaHktbW9kYWxcIj5cbiAgPCEtLSBNb2RhbCBIZWFkZXIgLS0+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+XG4gICAgICA8aDIgY2xhc3M9XCJtLTBcIj5VcGRhdGUgT3JnYW5pc2F0aW9uIEhpZXJhcmNoeTwvaDI+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwib25DbG9zZSgpXCI+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIE1vZGFsIENvbnRlbnQgLS0+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG9yZy1jb250YWluZXJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJvcmdUeXBlTmFtZVwiPnt7ZGF0YT8uc2VsZWN0ZWRPcmdEYXRhPy5zYk9yZ1R5cGV9fTwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3JnVHlwZVNlbGVjdGVkXCI+e3tkYXRhPy5zZWxlY3RlZE9yZ0RhdGE/Lm9yZ05hbWU/LnRvTG93ZXJDYXNlKCl9fTwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hlZC1saW5lXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ucHJldmlvdXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBvcmctY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YT8ucHJldmlvdXM7bGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi1sZWZ0JzogMzAgKiAoaSsxKSArICdweCd9XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8udHlwZSA9PT0gJ3VwZGF0ZScgJiYgaSA9PT0gKGRhdGE/LnByZXZpb3VzPy5sZW5ndGggLSAyKVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJvcmdUeXBlTmFtZVwiPnt7aXRlbT8uY2F0ZWdvcnk/LnRvTG93ZXJDYXNlKCl9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN1Yi1sYWJlbFwiPk9ubHkgdGhlIGltcG9ydGVkIG9yZ2FuaXNhdGlvbiB3aWxsIGJlIGxpc3RlZC48L2xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXNlYXJjaC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsIGN1c3RvbS1oZWlnaHQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInBhcmVudFNlbGVjdGVkT3JnQ29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCIgI3BhcmVudFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ21hdC1zZWxlY3QtcGFuZWwtYmVsb3cnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIFxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVPcHRpb25DZW50ZXJpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVLZXlkb3duKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggY29udGFpbmVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lciBmbGV4IGdhcC01IGZsZXgtbWlkZGxlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2Zvcm1Db250cm9sXT1cInBhcmVudFNlYXJjaENvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVTZWFyY2hLZXlkb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiAjc2VhcmNoSW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cIm5vLWNoZWNrYm94XCIgKm5nRm9yPVwibGV0IG9yZ2FuaXphdGlvbiBvZiBwYXJlbnRGaWx0ZXJlZE9wdGlvbnNcIiBbdmFsdWVdPVwib3JnYW5pemF0aW9uLmNvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3JnYW5pemF0aW9uLm5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwicGFyZW50RmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gZGF0YSBmb3VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoZWQtbGluZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShkYXRhPy50eXBlID09PSAndXBkYXRlJyAmJiBpID09PSAoZGF0YT8ucHJldmlvdXM/Lmxlbmd0aCAtIDIpKVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJvcmdUeXBlTmFtZVwiPnt7aXRlbT8uY2F0ZWdvcnk/LnRvTG93ZXJDYXNlKCl9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm9yZ1R5cGVTZWxlY3RlZFwiPnt7aXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKX19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hlZC1saW5lXCI+PC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jdXJyZW50RGF0YVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgb3JnLWNvbnRhaW5lclwiIFxuICAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tbGVmdCc6IDMwICogKGRhdGE/LnByZXZpb3VzPy5sZW5ndGggKyAxKSArICdweCd9XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3JnVHlwZU5hbWVcIj57e2RhdGE/LmN1cnJlbnREYXRhPy5jb2RlPy50b0xvd2VyQ2FzZSgpfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN1Yi1sYWJlbFwiPk9yZ2FuaXNhdGlvbnMgd2hpY2ggYXJlIGFscmVhZHkgaW4gdGhlIGhpZXJhcmNoeSB3aWxsIG5vdCBsaXN0ZWQgdG8gYWRkIG9yIGluIHNlYXJjaGFibGUgZHJvcGRvd248L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoYWJsZSBtdWx0aS1zZWxlY3QgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsIGN1c3RvbS1oZWlnaHQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRPcmdzQ29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCIgI3NpbmdsZVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCInbWF0LXNlbGVjdC1wYW5lbC1iZWxvdydcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVPcHRpb25DZW50ZXJpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lciBmbGV4IGdhcC01IGZsZXgtbWlkZGxlXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlU2VhcmNoS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiAjc2VhcmNoSW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiY2hlY2tBbmRDbG9zZShzaW5nbGVTZWxlY3QpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXJnaW4tcmVtb3ZlXCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9yZ2FuaXphdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIiBbdmFsdWVdPVwib3JnYW5pemF0aW9uLmlkZW50aWZpZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcmdhbml6YXRpb24ub3JnTmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRPcmdzQ29udHJvbD8udmFsdWU/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdCBjbGFzcz1cIm9yZy1jbGlwXCIgYXJpYS1sYWJlbD1cIm9yZ1NlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPVwiY2xpcC1vcHRpb24gZmxleCBmbGV4LW1pZGRsZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkT3Jnc0NvbnRyb2wudmFsdWVcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlZCk9XCJyZW1vdmVPcmcoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXROYW1lT2ZPcmcoaXRlbSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZSBjbGFzcz1cIm1hcmdpbi1yZW1vdmVcIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTW9kYWwgRm9vdGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gY2xhc3M9XCJidG4tY29tbW9uIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwib25DbG9zZSgpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBcbiAgICAgIG1hdC1zdHJva2VkLWJ1dHRvbiBcbiAgICAgIGNsYXNzPVwiYnRuLWNvbW1vbiBidG4tcHJpbWFyeVwiIFxuICAgICAgKGNsaWNrKT1cIm9uU2F2ZSgpXCIgXG4gICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICBTYXZlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -317,11 +317,11 @@ export class TermCardComponent {
|
|
|
317
317
|
this.dialog.closeAll();
|
|
318
318
|
}
|
|
319
319
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, deps: [{ token: i1.FrameworkService }, { token: i2.LocalConnectionService }, { token: i3.ApprovalService }, { token: i4.MatLegacyDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
320
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard", cardAction: "cardAction" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn\" (click)=\"openDialog()\">\n <mat-icon>info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy && data.index > 1\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
|
|
320
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard", cardAction: "cardAction" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between flex-middle\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn small-btn\" (click)=\"openDialog()\">\n <mat-icon class=\"small-icon\">info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between flex-middle mt-4\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn small-btn\">\n <mat-icon class=\"small-icon\">more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy && data.index > 1\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{font-family:Lato;font-size:14px;font-weight:400;line-height:16px}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}.small-btn{width:16px!important;height:16px!important;line-height:16px!important;padding:0!important}.small-btn ::ng-deep .mat-mdc-button-touch-target{width:16px!important;height:16px!important}.small-icon{font-size:16px;width:16px;height:16px;line-height:16px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
|
|
321
321
|
}
|
|
322
322
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, decorators: [{
|
|
323
323
|
type: Component,
|
|
324
|
-
args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn\" (click)=\"openDialog()\">\n <mat-icon>info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy && data.index > 1\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}\n"] }]
|
|
324
|
+
args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between flex-middle\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn small-btn\" (click)=\"openDialog()\">\n <mat-icon class=\"small-icon\">info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between flex-middle mt-4\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn small-btn\">\n <mat-icon class=\"small-icon\">more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy && data.index > 1\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{font-family:Lato;font-size:14px;font-weight:400;line-height:16px}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}.small-btn{width:16px!important;height:16px!important;line-height:16px!important;padding:0!important}.small-btn ::ng-deep .mat-mdc-button-touch-target{width:16px!important;height:16px!important}.small-icon{font-size:16px;width:16px;height:16px;line-height:16px}\n"] }]
|
|
325
325
|
}], ctorParameters: function () { return [{ type: i1.FrameworkService }, { type: i2.LocalConnectionService }, { type: i3.ApprovalService }, { type: i4.MatLegacyDialog }]; }, propDecorators: { dialogTemplate: [{
|
|
326
326
|
type: ViewChild,
|
|
327
327
|
args: ['dialogTemplate']
|
|
@@ -334,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
334
334
|
}], cardAction: [{
|
|
335
335
|
type: Output
|
|
336
336
|
}] } });
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdGVybS1jYXJkL3Rlcm0tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3Rlcm0tY2FyZC90ZXJtLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBS2pILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7OztBQU9oRyxNQUFNLE9BQU8saUJBQWlCO0lBYzVCLElBQ0ksSUFBSSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFHbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFDLEtBQUssQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFNRCxZQUNVLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDOUMsZUFBZ0MsRUFDakMsTUFBaUI7UUFIaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JB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akIsaUJBQWlCLGdTQ2pCOUIsNGlSQXlKQTs7NEZEeElhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlO3dNQU1JLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWF2QixJQUFJO3NCQURQLEtBQUs7Z0JBV0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTlNGcmFtZXdvcmsgfSBmcm9tICcuLi8uLi9tb2RlbHMvZnJhbWV3b3JrLm1vZGVsJ1xuaW1wb3J0IHsgQXBwcm92YWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwcm92YWwuc2VydmljZSc7XG5pbXBvcnQgeyBGcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZnJhbWV3b3JrLnNlcnZpY2UnXG5pbXBvcnQgeyBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmRTZWxlY3Rpb24sIENhcmRDaGVja2VkLCBDYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhcmlhYmxlLXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHsgQ3JlYXRlVGVybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtL2NyZWF0ZS10ZXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4vLi4vY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsvY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZm9yYW10aW9uLXBvcHVwL2NvbmZvcmFtdGlvbi1wb3B1cC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGVybS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlcm0tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rlcm0tY2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1DYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBASW5wdXQoKSBkYXRhITogTlNGcmFtZXdvcmsuSVRlcm1DYXJkXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgcHJpdmF0ZSBfZGF0YSE6IE5TRnJhbWV3b3JrLklUZXJtQ2FyZDtcbiAgaXNBcHByb3ZhbFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2VcbiAgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdXG4gIGhlaWdodExpZ2h0ZWQgPSBbXVxuICBhcHBfc3RyaW5nczogYW55ID0gbGFiZWxzO1xuICBsb2FkZWQ6IGFueSA9IHt9XG4gIGlzQ29tcGV0ZW5jeUFyZWE6YW55O1xuICBlbnZpcm9ubWVudDogYW55XG4gIHN1YnNjcmlwdGlvbiA6YW55XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgLy8gIGlmKHRoaXMuX2RhdGEpXG4gICAgLy8gICAgdGhpcy5jcmVhdGVUaW1lbGluZSh0aGlzLl9kYXRhWzBdLmlkKVxuICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0PWZhbHNlXG4gIH1cbiAgZ2V0IGRhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBpc1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkU2VsZWN0aW9uPigpXG4gIEBPdXRwdXQoKSBzZWxlY3RlZENhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmRDaGVja2VkPigpXG4gIEBPdXRwdXQoKSBjYXJkQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGFjdGlvbjogc3RyaW5nLCBkYXRhOiBhbnkgfT4oKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnJhbWV3b3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsQ29ubmVjdGlvblNlcnZpY2U6IExvY2FsQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHByb3ZhbFNlcnZpY2U6IEFwcHJvdmFsU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNBcHByb3ZhbFJlcXVpcmVkID0gdGhpcy5sb2NhbENvbm5lY3Rpb25TZXJ2aWNlLmdldENvbmZpZ0luZm8oKS5pc0FwcHJvdmFsUmVxdWlyZWRcbiAgICBcbiAgICB0aGlzLnVwZGF0ZUFwcHJvdmFsU3RhdHVzKClcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5zdWJzY3JpYmUoKGUpPT57XG4gICAgICBpZihlKXtcbiAgICAgICB0aGlzLmlzQ29tcGV0ZW5jeUFyZWEgPSBlLmFjdGlvblxuICAgICAgfVxuICAgIH0pXG5cblxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RW52aXJvbWVudCgpXG4gICAgXG4gIH1cblxuICBjYXJkQ2xpY2tlZChkYXRhOiBhbnksIGNhcmRSZWY6IGFueSkge1xuICAgIGlmKGRhdGEuY2F0ZWdvcnkhPSdzdWJ0aGVtZScpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5uZXh0KGRhdGEuY2F0ZWdvcnkpXG4gICAgICBcbiAgICB9XG4gICAgLy8gdGhpcy5kYXRhLnNlbGVjdGVkID0gdHJ1ZVxuICAgIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5pc0xhc3RDb2x1bW4odGhpcy5kYXRhLmNhdGVnb3J5KSl7XG4gICAgICByZXR1cm4gXG4gICAgfVxuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiB0aGlzLmRhdGEuY2F0ZWdvcnksIGRhdGE6IGRhdGEuY2hpbGRyZW4sIGNhcmRSZWYgfSlcbiAgICB0aGlzLmlzU2VsZWN0ZWQuZW1pdCh7IGVsZW1lbnQ6IHRoaXMuZGF0YS5jaGlsZHJlbiwgaXNTZWxlY3RlZDogIWRhdGEuc2VsZWN0ZWQgfSlcbiAgfVxuXG4gIGhhbmRsZVByb2R1Y3RDbGljayh0ZXJtOiBhbnksIGV2ZW50OiBhbnkpe1xuICAgIHRoaXMuc2VsZWN0ZWRDYXJkLmVtaXQoe3Rlcm06dGVybSwgY2hlY2tlZDpldmVudC5jaGVja2VkfSlcbiAgfVxuXG4gIHVwZGF0ZUFwcHJvdmFsU3RhdHVzKCl7XG4gICAgIGNvbnN0IGlkID0gdGhpcy5fZGF0YS5jaGlsZHJlbi5pZGVudGlmaWVyO1xuICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmdldFVwZGF0ZUxpc3QoKS5zdWJzY3JpYmUoKGxpc3Q6YW55KSA9PiB7XG4gICAgICB0aGlzLmFwcHJvdmFsTGlzdCA9IGxpc3QubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWRlbnRpZmllcik7XG4gICAgICBpZih0aGlzLmFwcHJvdmFsTGlzdCl7XG4gICAgICAgICAgIGlmKHRoaXMuYXBwcm92YWxMaXN0LmluY2x1ZGVzKGlkKSl7XG4gICAgICAgICAgICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgfSAgICAgXG4gICAgfSlcbiAgfVxuXG4gIGdldENvbG9yKGluZGV4Q2xhc3M6bnVtYmVyLCBjYXJkUmVmOiBhbnkscHJvcGVydHk6IHN0cmluZywgZGF0YTphbnkpIHtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhLmNhdGVnb3J5KTtcbiAgICBpZihjYXJkUmVmLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKSAmJiBwcm9wZXJ0eSA9PT0gJ2JnQ29sb3InKXtcbiAgICAgICByZXR1cm4gY29uZmlnLmNvbG9yO1xuICAgIH1cbiAgICBpZihwcm9wZXJ0eSA9PT0gJ2JvcmRlcicpe1xuICAgICAgbGV0IGJvcmRlckNvbG9yO1xuICAgICAgaWYoY2FyZFJlZi5jbGFzc0xpc3QuY29udGFpbnMoKGluZGV4Q2xhc3MpLnRvU3RyaW5nKCkpKXtcbiAgICAgICAgYm9yZGVyQ29sb3IgPSBcIjhweCBzb2xpZFwiICsgY29uZmlnLmNvbG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvcmRlckNvbG9yO1xuICAgIH1cbiAgfVxuXG5cbiAgdmlldyhkYXRhOiBhbnksIGNoaWxkcmVuRGF0YTogYW55LCBpbmRleDogYW55KXtcbiAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhkYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICBjb25zdCBuZXhDb2xJbmZvID0gdGhpcy5nZXROZXh0Q2F0KGRhdGEpXG4gICAgY29uc3QgbmV4dENhdCA9IG5leENvbEluZm8gfHwgZGF0YS5jb2x1bW5JbmZvXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgbGV0IG5leHRDb2xJbmZvIDogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSlcbiAgICAgIFxuICAgICBcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICBtb2RlOid2aWV3JyxcbiAgICAgICAgICBjb2x1bW5JbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIH0pXG4gICAgfVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgLy8gICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgIC8vIC8vIHdhaXRcbiAgICAgIC8vIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgICAgLy8gcmVzLnBhcmVudCA9IG51bGxcbiAgICAgIC8vIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgIC8vICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIC8vICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybV1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OmNvbEluZGV4IH0pXG4gICAgfSlcbiAgfVxuICBlZGl0KGRhdGE6IGFueSwgY2hpbGRyZW5EYXRhOiBhbnksIGluZGV4OiBhbnksIGNhcmRSZWY6IGFueSl7XG4gICAgbGV0IGRpYWxvZzogYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIC8vIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gbGV0IG5leHRDb2xJbmZvID0gW11cbiAgICAgIC8vIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgIC8vICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gfVxuICAgICAgLy8gICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAvLyAgICAgZGF0YTogeyBcbiAgICAgIC8vICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAvLyAgICAgICBvcGVuTW9kZTogJ2VkaXQnLFxuICAgICAgLy8gICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgLy8gICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgIC8vICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgLy8gICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgLy8gICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAvLyAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgIC8vICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgIC8vICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgLy8gICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIC8vICAgfSlcbiAgICAgIFxuICAgICAgdGhpcy5jcmVhdGUoZGF0YSwgJ2VkaXQnKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgIG1vZGU6J2VkaXQnLFxuICAgICAgICAgIGNvbHVtbkluZm86IGRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXMsXG4gICAgICAgICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgfSlcbiAgICB9XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYoIXJlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAvLyAgIHJlcyxcbiAgICAgIC8vICAgaW5kZXg6IGluZGV4LmluZGV4LFxuICAgICAgLy8gICBkYXRhLFxuICAgICAgLy8gICB0eXBlOiAndXBkYXRlJyxcbiAgICAgIC8vICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGEpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSlcbiAgICAgIH0sIDEwMClcbiAgICB9KVxuICB9XG4gIGNyZWF0ZShkYXRhOiBhbnksIG1vZGU/OnN0cmluZyl7XG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgaWYobmV4dENhdCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMobmV4dENhdC5jb2RlKVxuICAgICAgY29uc3QgY29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dENhdC5jb2RlIClcbiAgICAgIGxldCBuZXh0Q29sSW5mbzogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICBpZih0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpe1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogbW9kZSB8fCAnYWRkJyxcbiAgICAgICAgICAgIGNhcmRDb2xJbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZighcmVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgfVxuICAgICAgICBpZighKHJlcyAmJiByZXMuc3RvcFVwZGF0ZSkpe1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhKVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICAgIH0sIDEwMClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dENhdE5hbWUoZGF0YTogYW55KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLmNvbHVtbkluZm8gJiYgZGF0YS5jb2x1bW5JbmZvLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICBpZihuZXh0Q2F0ICYmIG5leHRDYXQuY29kZSl7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV4dENhdC5jb2RlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5jb2x1bW5JbmZvICYmIGRhdGEuY29sdW1uSW5mby5jb2RlKXtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuc3Vic2NyaXB0aW9uKXtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cbiAgZGVsZXRlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICBkaWFsb2dUeXBlOiAnd2FybmluZycsXG4gICAgICBkaWFsb2dBY3Rpb246ICdyZXRpcmUnLFxuICAgICAgZGVzY3JpcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXI6IGBDb21wZXRlbmN5ICR7ZGF0YS5jYXRlZ29yeSA9PT1cInN1YnRoZW1lXCI/ICdzdWItdGhlbWUnOiAndGhlbWUnfSB3aWxsIGJlIGRlbGV0ZWRgLFxuICAgICAgICAgIGhlYWRlckNsYXNzOiAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibHVlIHRleHRCb2xkJyxcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtc2dDbGFzczogJ21iLTIgbXQtMicsXG4gICAgICAgICAgICAgIG1zZzogYERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDbGFzczogJ2l0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBidG5UZXh0OiAnTm8nLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLW91dGxpbmUnLFxuICAgICAgICAgIHJlc3BvbnNlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJ0blRleHQ6ICdZZXMnLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWZ1bGwtc3VjY2VzcycsXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2FyZEluZm86IGRhdGFcbiAgICB9XG4gICAgbGV0IGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgIH0pXG4gICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoX3JlcyA9PiB7XG4gICAgICAgIFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICB9LCAxMDApXG4gICAgfSlcbiAgICBcbiAgfVxuXG4gIG1lbnVBY3Rpb24odHlwZTpzdHJpbmcsIF9pdGVtOiBhbnkpIHtcbiAgICB0aGlzLmNhcmRBY3Rpb24uZW1pdCh7IGFjdGlvbjogdHlwZSwgZGF0YTogX2l0ZW0gfSk7XG4gIH0gXG5cbiAgZ2V0dXNlckNvdW50KGl0ZW06IGFueSkge1xuICAgIGlmKGl0ZW0uY2hpbGRyZW4uY29kZSkge1xuICAgICAgY29uc3QgdGVtcERhdGEgPSBpdGVtLmNvbHVtbkluZm8uY2hpbGRyZW4uZmluZCgoaTogYW55KSA9PiBpLmNvZGUgPT09IGl0ZW0uY2hpbGRyZW4uY29kZSlcbiAgICAgIHJldHVybiB0ZW1wRGF0YT8udXNlckNvdW50IHx8IDBcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIG9wZW5EaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIC8vIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHsgLyogQW55IGRhdGEgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgZGlhbG9nICovIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICB9XG59XG4gIFxuXG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCIoIChkYXRhICYmIGRhdGE/LmNhcmRTdWJUeXBlKSB8fCAnY2FyZE1pbmltYWwnKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGFuZGFyZCdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkU3RhbmRhcmRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3BhY2Utc2F2aW5nJ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcmRTcGFjZVNhdmluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdCBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkTWluaW1hbFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZE1pbmltYWw+XG4gICAgPGRpdiAjY2FyZFJlZiBjbGFzcz1cInRlcm0tY2FyZCBjbGlja2FibGUge3tkYXRhLmluZGV4fX1cIiAoY2xpY2spPVwiY2FyZENsaWNrZWQoZGF0YSwgY2FyZFJlZilcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGF0YS5jaGlsZHJlbi5zZWxlY3RlZD8nc2VsZWN0ZWQnOicnLCBkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnPyAnaW5EcmFmdCc6JycsXG4gICAgZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodCAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgPyAnaW5Bc3NvY2lhdGlvbkRyYWZ0JzonJ11cIlxuICAgICAgICBpZD1cInt7ZGF0YS5jaGlsZHJlbi5uYW1lfX1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOmdldENvbG9yKGRhdGEuaW5kZXgsY2FyZFJlZiwnYmdDb2xvcicsZGF0YSl9XCI+XG4gICAgICAgIDwhLS0gKGNsaWNrKT1cImRhdGEuc2VsZWN0ZWQ9IWRhdGEuc2VsZWN0ZWRcIiAtLT4gICBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRlcm0tY2FyZC1wYXJlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gPEJlbG93IGVsZW1lbnQgaXMgdG8gc2hvdyBpZCBvbiB0b3AgbGVmdCBvZiB0aGUgY2FyZD4gLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpZFwiIFtoaWRkZW5dPVwidHJ1ZVwiPnt7ZGF0YS5jaGlsZHJlbi5jb2RlfX08L2Rpdj4gLS0+XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybS1jYXJkLWNvbnRlbnQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmliYm9uXCI+e3tkYXRhPy5jaGlsZHJlbj8ucmVmSWR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWFyZWEge3tkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lPy50b0xvd2VyQ2FzZSgpfX1cIj57e2RhdGE/LmNoaWxkcmVuPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uY29tcGV0ZW5jeUFyZWE/Lm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj57e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZklkQ2FyZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvbmZpZz8uZW5hYmxlSW5mb0ljb25cIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJpbmZvIGl0ZW1zXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCIgKGNsaWNrKT1cIm9wZW5EaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmluZm88L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmSWRDYXJkIHB4LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8c3Bhbj4rK3t7ZGF0YS5jaGlsZHJlbi5zZWxlY3RlZH19KysrPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPj09e3tkYXRhLmNoaWxkcmVuLnN0YXR1c319PT08L3NwYW4+ICAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb24gZmxleCBmbGV4LW1pZGRsZSBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmcmFjXCI+PC9tYXQtaWNvbj4gXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7KGRhdGEuY2hpbGRyZW4uY2hpbGRyZW4pID8gZGF0YS5jaGlsZHJlbi5jaGlsZHJlbj8ubGVuZ3RoIDogMH19IENoaWxkIE9yZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uIGZsZXggZmxleC1taWRkbGUgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZnJhY1wiPjwvbWF0LWljb24+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tnZXR1c2VyQ291bnQoZGF0YSl9fSBVc2Vyczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jb2x1bW5JbmZvPy5jb25maWc/LmVuYWJsZVRocmVlRG90XCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiYWN0aW9uIGl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcmdNZW51XCIgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7J2RhdGEnOmRhdGEsICdjYXJkUmVmJzogY2FyZFJlZn1cIiBjbGFzcz1cImFjdGlvbi1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxwPnt7ZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1c319LCB7e2RhdGEuY2hpbGRyZW4uYXNzb2NpYXRpb25Qcm9wZXJ0aWVzPy5hcHByb3ZhbFN0YXR1c319PC9wPiAtLT5cbiAgICAgICAgPCEtLSAqbmdJZj1cIiFkYXRhLmlzVmlld09ubHkgJiYgZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWRcIiAtLT5cbiAgICAgICAgPCEtLSAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZXJtLWNhcmQtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBcbiAgICAgICAgICAgIGRhdGEuY2hpbGRyZW4uYXNzb2NpYXRpb25Qcm9wZXJ0aWVzPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgJiYgIWFwcHJvdmFsTGlzdC5sZW5ndGggfHxcbiAgICAgICAgICAgIGRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiIFtjaGVja2VkXT1cImRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0XCIgY2xhc3M9XCJ0ZXJtU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVByb2R1Y3RDbGljayhkYXRhLmNoaWxkcmVuLCAkZXZlbnQpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYXBwcm92ZS1mbGFnXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiPnt7YXBwX3N0cmluZ3MuZmxhZ319PC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjYXJkU3RhbmRhcmQ+XG4gICAgPGRpdj5cbiAgICAgICAge3tkYXRhLmNoaWxkcmVuLm5hbWV9fSBcbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4uZGVzY3JpcHRpb259fSBzXG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NhcmRTcGFjZVNhdmluZz5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bWF0LW1lbnUgI2NhcmRNZW51PVwibWF0TWVudVwiIGNsYXNzPVwibWVudS1zZWNcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LXJvd0RhdGE9XCJkYXRhXCIgbGV0LWNhcmRSZWY9XCJjYXJkUmVmXCI+XG4gICAgICAgIDwhLS0gPGRpdiA+IC0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVWaWV3XCIgIChjbGljayk9XCJ2aWV3KGRhdGEsIGRhdGEuY2hpbGRyZW4sIGRhdGEuaW5kZXgpXCIgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+dmlzaWJpbGl0eTwvbWF0LWljb24+IDxzcGFuPlZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFiYWxlRWRpdFwiIChjbGljayk9XCJlZGl0KGRhdGEsICBkYXRhLmNoaWxkcmVuLGRhdGEuaW5kZXgsIGNhcmRSZWYpXCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+RWRpdDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZUFkZFwiIChjbGljayk9XCJjcmVhdGUoZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZURlbGV0ZVwiIChjbGljayk9XCJkZWxldGUoZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjxtYXQtbWVudSAjb3JnTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm1lbnUtc2VjXCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1yb3dEYXRhPVwiZGF0YVwiIGxldC1jYXJkUmVmPVwiY2FyZFJlZlwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVVcGRhdGVIaWVyYXJjaHkgJiYgZGF0YS5pbmRleCA+IDFcIiAgKGNsaWNrKT1cIm1lbnVBY3Rpb24oJ3VwZGF0ZS1oaWVyYXJjaHknLCBkYXRhKVwiIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1idG5cIiBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPiA8c3Bhbj5VcGRhdGUgSGllcmFyY2h5PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmFsZVJlbW92ZUNvbm5lY3Rpb25cIiAoY2xpY2spPVwibWVudUFjdGlvbigncmVtb3ZlLXRlcm0nLCBkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cImFjdGlvbi1idG5cIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5SZW1vdmUgQ29ubmVjdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZU1hbmFnZU9yZ2FuaXphdGlvblwiIChjbGljayk9XCJtZW51QWN0aW9uKCdtYW5hZ2Utb3JnJywgZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+TWFuYWdlIE9yZ2FuaXNhdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gQWRkIHRoaXMgdGVtcGxhdGUgdG8geW91ciBjb21wb25lbnQgLS0+XG48bmctdGVtcGxhdGUgI2RpYWxvZ1RlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LW1pZGRsZVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImxhcmdlLWljb24gY29sb3Itc2Vjb25kYXJ5XCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgPHAgY2xhc3M9XCJjb2xvci1wcmltYXJ5IG1vZGFsLXRleHQgbWFyZ2luLXRvcC1zXCI+U2VsZWN0IGEgb3JnYW5pc2F0aW9uIHRvIGFkZCBvciBzZWUgZnVydGhlciBjb25uZWN0aW9ucy48L3A+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgY2xhc3M9XCJidG4tY29tbW9uIGJ0bi1wcmltYXJ5IG1vZGFsLWJ0blwiPkNsb3NlPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuIl19
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdGVybS1jYXJkL3Rlcm0tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3Rlcm0tY2FyZC90ZXJtLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBS2pILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7OztBQU9oRyxNQUFNLE9BQU8saUJBQWlCO0lBYzVCLElBQ0ksSUFBSSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFHbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFDLEtBQUssQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFNRCxZQUNVLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDOUMsZUFBZ0MsRUFDakMsTUFBaUI7UUFIaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JB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akIsaUJBQWlCLGdTQ2pCOUIsMm9SQXlKQTs7NEZEeElhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlO3dNQU1JLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWF2QixJQUFJO3NCQURQLEtBQUs7Z0JBV0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTlNGcmFtZXdvcmsgfSBmcm9tICcuLi8uLi9tb2RlbHMvZnJhbWV3b3JrLm1vZGVsJ1xuaW1wb3J0IHsgQXBwcm92YWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwcm92YWwuc2VydmljZSc7XG5pbXBvcnQgeyBGcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZnJhbWV3b3JrLnNlcnZpY2UnXG5pbXBvcnQgeyBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmRTZWxlY3Rpb24sIENhcmRDaGVja2VkLCBDYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhcmlhYmxlLXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHsgQ3JlYXRlVGVybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtL2NyZWF0ZS10ZXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4vLi4vY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsvY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZm9yYW10aW9uLXBvcHVwL2NvbmZvcmFtdGlvbi1wb3B1cC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGVybS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlcm0tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rlcm0tY2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1DYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBASW5wdXQoKSBkYXRhITogTlNGcmFtZXdvcmsuSVRlcm1DYXJkXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgcHJpdmF0ZSBfZGF0YSE6IE5TRnJhbWV3b3JrLklUZXJtQ2FyZDtcbiAgaXNBcHByb3ZhbFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2VcbiAgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdXG4gIGhlaWdodExpZ2h0ZWQgPSBbXVxuICBhcHBfc3RyaW5nczogYW55ID0gbGFiZWxzO1xuICBsb2FkZWQ6IGFueSA9IHt9XG4gIGlzQ29tcGV0ZW5jeUFyZWE6YW55O1xuICBlbnZpcm9ubWVudDogYW55XG4gIHN1YnNjcmlwdGlvbiA6YW55XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgLy8gIGlmKHRoaXMuX2RhdGEpXG4gICAgLy8gICAgdGhpcy5jcmVhdGVUaW1lbGluZSh0aGlzLl9kYXRhWzBdLmlkKVxuICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0PWZhbHNlXG4gIH1cbiAgZ2V0IGRhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBpc1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkU2VsZWN0aW9uPigpXG4gIEBPdXRwdXQoKSBzZWxlY3RlZENhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmRDaGVja2VkPigpXG4gIEBPdXRwdXQoKSBjYXJkQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGFjdGlvbjogc3RyaW5nLCBkYXRhOiBhbnkgfT4oKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnJhbWV3b3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsQ29ubmVjdGlvblNlcnZpY2U6IExvY2FsQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHByb3ZhbFNlcnZpY2U6IEFwcHJvdmFsU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNBcHByb3ZhbFJlcXVpcmVkID0gdGhpcy5sb2NhbENvbm5lY3Rpb25TZXJ2aWNlLmdldENvbmZpZ0luZm8oKS5pc0FwcHJvdmFsUmVxdWlyZWRcbiAgICBcbiAgICB0aGlzLnVwZGF0ZUFwcHJvdmFsU3RhdHVzKClcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5zdWJzY3JpYmUoKGUpPT57XG4gICAgICBpZihlKXtcbiAgICAgICB0aGlzLmlzQ29tcGV0ZW5jeUFyZWEgPSBlLmFjdGlvblxuICAgICAgfVxuICAgIH0pXG5cblxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RW52aXJvbWVudCgpXG4gICAgXG4gIH1cblxuICBjYXJkQ2xpY2tlZChkYXRhOiBhbnksIGNhcmRSZWY6IGFueSkge1xuICAgIGlmKGRhdGEuY2F0ZWdvcnkhPSdzdWJ0aGVtZScpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5uZXh0KGRhdGEuY2F0ZWdvcnkpXG4gICAgICBcbiAgICB9XG4gICAgLy8gdGhpcy5kYXRhLnNlbGVjdGVkID0gdHJ1ZVxuICAgIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5pc0xhc3RDb2x1bW4odGhpcy5kYXRhLmNhdGVnb3J5KSl7XG4gICAgICByZXR1cm4gXG4gICAgfVxuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiB0aGlzLmRhdGEuY2F0ZWdvcnksIGRhdGE6IGRhdGEuY2hpbGRyZW4sIGNhcmRSZWYgfSlcbiAgICB0aGlzLmlzU2VsZWN0ZWQuZW1pdCh7IGVsZW1lbnQ6IHRoaXMuZGF0YS5jaGlsZHJlbiwgaXNTZWxlY3RlZDogIWRhdGEuc2VsZWN0ZWQgfSlcbiAgfVxuXG4gIGhhbmRsZVByb2R1Y3RDbGljayh0ZXJtOiBhbnksIGV2ZW50OiBhbnkpe1xuICAgIHRoaXMuc2VsZWN0ZWRDYXJkLmVtaXQoe3Rlcm06dGVybSwgY2hlY2tlZDpldmVudC5jaGVja2VkfSlcbiAgfVxuXG4gIHVwZGF0ZUFwcHJvdmFsU3RhdHVzKCl7XG4gICAgIGNvbnN0IGlkID0gdGhpcy5fZGF0YS5jaGlsZHJlbi5pZGVudGlmaWVyO1xuICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmdldFVwZGF0ZUxpc3QoKS5zdWJzY3JpYmUoKGxpc3Q6YW55KSA9PiB7XG4gICAgICB0aGlzLmFwcHJvdmFsTGlzdCA9IGxpc3QubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWRlbnRpZmllcik7XG4gICAgICBpZih0aGlzLmFwcHJvdmFsTGlzdCl7XG4gICAgICAgICAgIGlmKHRoaXMuYXBwcm92YWxMaXN0LmluY2x1ZGVzKGlkKSl7XG4gICAgICAgICAgICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgfSAgICAgXG4gICAgfSlcbiAgfVxuXG4gIGdldENvbG9yKGluZGV4Q2xhc3M6bnVtYmVyLCBjYXJkUmVmOiBhbnkscHJvcGVydHk6IHN0cmluZywgZGF0YTphbnkpIHtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhLmNhdGVnb3J5KTtcbiAgICBpZihjYXJkUmVmLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKSAmJiBwcm9wZXJ0eSA9PT0gJ2JnQ29sb3InKXtcbiAgICAgICByZXR1cm4gY29uZmlnLmNvbG9yO1xuICAgIH1cbiAgICBpZihwcm9wZXJ0eSA9PT0gJ2JvcmRlcicpe1xuICAgICAgbGV0IGJvcmRlckNvbG9yO1xuICAgICAgaWYoY2FyZFJlZi5jbGFzc0xpc3QuY29udGFpbnMoKGluZGV4Q2xhc3MpLnRvU3RyaW5nKCkpKXtcbiAgICAgICAgYm9yZGVyQ29sb3IgPSBcIjhweCBzb2xpZFwiICsgY29uZmlnLmNvbG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvcmRlckNvbG9yO1xuICAgIH1cbiAgfVxuXG5cbiAgdmlldyhkYXRhOiBhbnksIGNoaWxkcmVuRGF0YTogYW55LCBpbmRleDogYW55KXtcbiAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhkYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICBjb25zdCBuZXhDb2xJbmZvID0gdGhpcy5nZXROZXh0Q2F0KGRhdGEpXG4gICAgY29uc3QgbmV4dENhdCA9IG5leENvbEluZm8gfHwgZGF0YS5jb2x1bW5JbmZvXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgbGV0IG5leHRDb2xJbmZvIDogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSlcbiAgICAgIFxuICAgICBcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICBtb2RlOid2aWV3JyxcbiAgICAgICAgICBjb2x1bW5JbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIH0pXG4gICAgfVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgLy8gICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgIC8vIC8vIHdhaXRcbiAgICAgIC8vIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgICAgLy8gcmVzLnBhcmVudCA9IG51bGxcbiAgICAgIC8vIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgIC8vICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIC8vICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybV1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OmNvbEluZGV4IH0pXG4gICAgfSlcbiAgfVxuICBlZGl0KGRhdGE6IGFueSwgY2hpbGRyZW5EYXRhOiBhbnksIGluZGV4OiBhbnksIGNhcmRSZWY6IGFueSl7XG4gICAgbGV0IGRpYWxvZzogYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIC8vIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gbGV0IG5leHRDb2xJbmZvID0gW11cbiAgICAgIC8vIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgIC8vICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gfVxuICAgICAgLy8gICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAvLyAgICAgZGF0YTogeyBcbiAgICAgIC8vICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAvLyAgICAgICBvcGVuTW9kZTogJ2VkaXQnLFxuICAgICAgLy8gICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgLy8gICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgIC8vICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgLy8gICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgLy8gICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAvLyAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgIC8vICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgIC8vICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgLy8gICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIC8vICAgfSlcbiAgICAgIFxuICAgICAgdGhpcy5jcmVhdGUoZGF0YSwgJ2VkaXQnKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgIG1vZGU6J2VkaXQnLFxuICAgICAgICAgIGNvbHVtbkluZm86IGRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXMsXG4gICAgICAgICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgfSlcbiAgICB9XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYoIXJlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAvLyAgIHJlcyxcbiAgICAgIC8vICAgaW5kZXg6IGluZGV4LmluZGV4LFxuICAgICAgLy8gICBkYXRhLFxuICAgICAgLy8gICB0eXBlOiAndXBkYXRlJyxcbiAgICAgIC8vICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGEpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSlcbiAgICAgIH0sIDEwMClcbiAgICB9KVxuICB9XG4gIGNyZWF0ZShkYXRhOiBhbnksIG1vZGU/OnN0cmluZyl7XG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgaWYobmV4dENhdCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMobmV4dENhdC5jb2RlKVxuICAgICAgY29uc3QgY29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dENhdC5jb2RlIClcbiAgICAgIGxldCBuZXh0Q29sSW5mbzogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICBpZih0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpe1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogbW9kZSB8fCAnYWRkJyxcbiAgICAgICAgICAgIGNhcmRDb2xJbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZighcmVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgfVxuICAgICAgICBpZighKHJlcyAmJiByZXMuc3RvcFVwZGF0ZSkpe1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhKVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICAgIH0sIDEwMClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dENhdE5hbWUoZGF0YTogYW55KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLmNvbHVtbkluZm8gJiYgZGF0YS5jb2x1bW5JbmZvLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICBpZihuZXh0Q2F0ICYmIG5leHRDYXQuY29kZSl7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV4dENhdC5jb2RlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5jb2x1bW5JbmZvICYmIGRhdGEuY29sdW1uSW5mby5jb2RlKXtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuc3Vic2NyaXB0aW9uKXtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cbiAgZGVsZXRlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICBkaWFsb2dUeXBlOiAnd2FybmluZycsXG4gICAgICBkaWFsb2dBY3Rpb246ICdyZXRpcmUnLFxuICAgICAgZGVzY3JpcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXI6IGBDb21wZXRlbmN5ICR7ZGF0YS5jYXRlZ29yeSA9PT1cInN1YnRoZW1lXCI/ICdzdWItdGhlbWUnOiAndGhlbWUnfSB3aWxsIGJlIGRlbGV0ZWRgLFxuICAgICAgICAgIGhlYWRlckNsYXNzOiAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibHVlIHRleHRCb2xkJyxcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtc2dDbGFzczogJ21iLTIgbXQtMicsXG4gICAgICAgICAgICAgIG1zZzogYERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDbGFzczogJ2l0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBidG5UZXh0OiAnTm8nLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLW91dGxpbmUnLFxuICAgICAgICAgIHJlc3BvbnNlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJ0blRleHQ6ICdZZXMnLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWZ1bGwtc3VjY2VzcycsXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2FyZEluZm86IGRhdGFcbiAgICB9XG4gICAgbGV0IGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgIH0pXG4gICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoX3JlcyA9PiB7XG4gICAgICAgIFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICB9LCAxMDApXG4gICAgfSlcbiAgICBcbiAgfVxuXG4gIG1lbnVBY3Rpb24odHlwZTpzdHJpbmcsIF9pdGVtOiBhbnkpIHtcbiAgICB0aGlzLmNhcmRBY3Rpb24uZW1pdCh7IGFjdGlvbjogdHlwZSwgZGF0YTogX2l0ZW0gfSk7XG4gIH0gXG5cbiAgZ2V0dXNlckNvdW50KGl0ZW06IGFueSkge1xuICAgIGlmKGl0ZW0uY2hpbGRyZW4uY29kZSkge1xuICAgICAgY29uc3QgdGVtcERhdGEgPSBpdGVtLmNvbHVtbkluZm8uY2hpbGRyZW4uZmluZCgoaTogYW55KSA9PiBpLmNvZGUgPT09IGl0ZW0uY2hpbGRyZW4uY29kZSlcbiAgICAgIHJldHVybiB0ZW1wRGF0YT8udXNlckNvdW50IHx8IDBcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIG9wZW5EaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIC8vIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHsgLyogQW55IGRhdGEgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgZGlhbG9nICovIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICB9XG59XG4gIFxuXG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCIoIChkYXRhICYmIGRhdGE/LmNhcmRTdWJUeXBlKSB8fCAnY2FyZE1pbmltYWwnKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGFuZGFyZCdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkU3RhbmRhcmRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3BhY2Utc2F2aW5nJ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcmRTcGFjZVNhdmluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdCBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkTWluaW1hbFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZE1pbmltYWw+XG4gICAgPGRpdiAjY2FyZFJlZiBjbGFzcz1cInRlcm0tY2FyZCBjbGlja2FibGUge3tkYXRhLmluZGV4fX1cIiAoY2xpY2spPVwiY2FyZENsaWNrZWQoZGF0YSwgY2FyZFJlZilcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGF0YS5jaGlsZHJlbi5zZWxlY3RlZD8nc2VsZWN0ZWQnOicnLCBkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnPyAnaW5EcmFmdCc6JycsXG4gICAgZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodCAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgPyAnaW5Bc3NvY2lhdGlvbkRyYWZ0JzonJ11cIlxuICAgICAgICBpZD1cInt7ZGF0YS5jaGlsZHJlbi5uYW1lfX1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOmdldENvbG9yKGRhdGEuaW5kZXgsY2FyZFJlZiwnYmdDb2xvcicsZGF0YSl9XCI+XG4gICAgICAgIDwhLS0gKGNsaWNrKT1cImRhdGEuc2VsZWN0ZWQ9IWRhdGEuc2VsZWN0ZWRcIiAtLT4gICBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRlcm0tY2FyZC1wYXJlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gPEJlbG93IGVsZW1lbnQgaXMgdG8gc2hvdyBpZCBvbiB0b3AgbGVmdCBvZiB0aGUgY2FyZD4gLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpZFwiIFtoaWRkZW5dPVwidHJ1ZVwiPnt7ZGF0YS5jaGlsZHJlbi5jb2RlfX08L2Rpdj4gLS0+XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybS1jYXJkLWNvbnRlbnQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmliYm9uXCI+e3tkYXRhPy5jaGlsZHJlbj8ucmVmSWR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWFyZWEge3tkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lPy50b0xvd2VyQ2FzZSgpfX1cIj57e2RhdGE/LmNoaWxkcmVuPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uY29tcGV0ZW5jeUFyZWE/Lm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW4gZmxleC1taWRkbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj57e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZklkQ2FyZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvbmZpZz8uZW5hYmxlSW5mb0ljb25cIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJpbmZvIGl0ZW1zXCIgY2xhc3M9XCJhY3Rpb24tYnRuIHNtYWxsLWJ0blwiIChjbGljayk9XCJvcGVuRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzbWFsbC1pY29uXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWZJZENhcmQgcHgtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tkYXRhPy5jaGlsZHJlbj8ucmVmSWR9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuPisre3tkYXRhLmNoaWxkcmVuLnNlbGVjdGVkfX0rKys8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+PT17e2RhdGEuY2hpbGRyZW4uc3RhdHVzfX09PTwvc3Bhbj4gIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYmV0d2VlbiBmbGV4LW1pZGRsZSBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uIGZsZXggZmxleC1taWRkbGUgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZnJhY1wiPjwvbWF0LWljb24+IFxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyhkYXRhLmNoaWxkcmVuLmNoaWxkcmVuKSA/IGRhdGEuY2hpbGRyZW4uY2hpbGRyZW4/Lmxlbmd0aCA6IDB9fSBDaGlsZCBPcmc8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1kZXNjcmlwdGlvbiBmbGV4IGZsZXgtbWlkZGxlIGdhcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZyYWNcIj48L21hdC1pY29uPiBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Z2V0dXNlckNvdW50KGRhdGEpfX0gVXNlcnM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY29sdW1uSW5mbz8uY29uZmlnPy5lbmFibGVUaHJlZURvdFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cImFjdGlvbiBpdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3JnTWVudVwiIFttYXRNZW51VHJpZ2dlckRhdGFdPVwieydkYXRhJzpkYXRhLCAnY2FyZFJlZic6IGNhcmRSZWZ9XCIgY2xhc3M9XCJhY3Rpb24tYnRuIHNtYWxsLWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic21hbGwtaWNvblwiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPHA+e3tkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzfX0sIHt7ZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzfX08L3A+IC0tPlxuICAgICAgICA8IS0tICpuZ0lmPVwiIWRhdGEuaXNWaWV3T25seSAmJiBkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiIC0tPlxuICAgICAgICA8IS0tIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCIgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRlcm0tY2FyZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiAqbmdJZj1cImRhdGEuY2hpbGRyZW4uYXBwcm92YWxTdGF0dXMgPT09ICdEcmFmdCcgJiYgaXNBcHByb3ZhbFJlcXVpcmVkICYmICFhcHByb3ZhbExpc3QubGVuZ3RoIHx8IFxuICAgICAgICAgICAgZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fFxuICAgICAgICAgICAgZGF0YS5jaGlsZHJlbi5oaWdobGlnaHQgJiYgaXNBcHByb3ZhbFJlcXVpcmVkXCIgW2NoZWNrZWRdPVwiZGF0YS5jaGlsZHJlbi5oaWdobGlnaHRcIiBjbGFzcz1cInRlcm1TZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlUHJvZHVjdENsaWNrKGRhdGEuY2hpbGRyZW4sICRldmVudClcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJhcHByb3ZlLWZsYWdcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5jaGlsZHJlbi5oaWdobGlnaHQgJiYgaXNBcHByb3ZhbFJlcXVpcmVkXCI+e3thcHBfc3RyaW5ncy5mbGFnfX08L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NhcmRTdGFuZGFyZD5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4ubmFtZX19IFxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICAgIHt7ZGF0YS5jaGlsZHJlbi5kZXNjcmlwdGlvbn19IHNcbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZFNwYWNlU2F2aW5nPlxuICAgIDxkaXY+XG4gICAgICAgIHt7ZGF0YS5jaGlsZHJlbi5uYW1lfX1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxtYXQtbWVudSAjY2FyZE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJtZW51LXNlY1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtcm93RGF0YT1cImRhdGFcIiBsZXQtY2FyZFJlZj1cImNhcmRSZWZcIj5cbiAgICAgICAgPCEtLSA8ZGl2ID4gLS0+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZVZpZXdcIiAgKGNsaWNrKT1cInZpZXcoZGF0YSwgZGF0YS5jaGlsZHJlbiwgZGF0YS5pbmRleClcIiBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj52aXNpYmlsaXR5PC9tYXQtaWNvbj4gPHNwYW4+Vmlldzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJhbGVFZGl0XCIgKGNsaWNrKT1cImVkaXQoZGF0YSwgIGRhdGEuY2hpbGRyZW4sZGF0YS5pbmRleCwgY2FyZFJlZilcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5FZGl0PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlQWRkXCIgKGNsaWNrKT1cImNyZWF0ZShkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlRGVsZXRlXCIgKGNsaWNrKT1cImRlbGV0ZShkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+RGVsZXRlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPG1hdC1tZW51ICNvcmdNZW51PVwibWF0TWVudVwiIGNsYXNzPVwibWVudS1zZWNcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LXJvd0RhdGE9XCJkYXRhXCIgbGV0LWNhcmRSZWY9XCJjYXJkUmVmXCI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZVVwZGF0ZUhpZXJhcmNoeSAmJiBkYXRhLmluZGV4ID4gMVwiICAoY2xpY2spPVwibWVudUFjdGlvbigndXBkYXRlLWhpZXJhcmNoeScsIGRhdGEpXCIgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWJ0blwiIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZWRpdDwvbWF0LWljb24+IDxzcGFuPlVwZGF0ZSBIaWVyYXJjaHk8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFiYWxlUmVtb3ZlQ29ubmVjdGlvblwiIChjbGljayk9XCJtZW51QWN0aW9uKCdyZW1vdmUtdGVybScsIGRhdGEpXCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiIGNsYXNzPVwiYWN0aW9uLWJ0blwiIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPlJlbW92ZSBDb25uZWN0aW9uPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmxlTWFuYWdlT3JnYW5pemF0aW9uXCIgKGNsaWNrKT1cIm1lbnVBY3Rpb24oJ21hbmFnZS1vcmcnLCBkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cImFjdGlvbi1idG5cIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5NYW5hZ2UgT3JnYW5pc2F0aW9uPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPCEtLSBBZGQgdGhpcyB0ZW1wbGF0ZSB0byB5b3VyIGNvbXBvbmVudCAtLT5cbjxuZy10ZW1wbGF0ZSAjZGlhbG9nVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtbWlkZGxlXCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwibGFyZ2UtaWNvbiBjb2xvci1zZWNvbmRhcnlcIj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICA8cCBjbGFzcz1cImNvbG9yLXByaW1hcnkgbW9kYWwtdGV4dCBtYXJnaW4tdG9wLXNcIj5TZWxlY3QgYSBvcmdhbmlzYXRpb24gdG8gYWRkIG9yIHNlZSBmdXJ0aGVyIGNvbm5lY3Rpb25zLjwvcD5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZU1vZGFsKClcIiBjbGFzcz1cImJ0bi1jb21tb24gYnRuLXByaW1hcnkgbW9kYWwtYnRuXCI+Q2xvc2U8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG4iXX0=
|