@tilde-nlp/ngx-common 6.1.36 → 6.1.38
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/llm/llm.component.mjs +11 -4
- package/esm2022/lib/multi-functional-table/multi-functional-table.component.mjs +27 -14
- package/esm2022/lib/toast/toast.component.mjs +2 -2
- package/fesm2022/tilde-nlp-ngx-common.mjs +37 -17
- package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
- package/lib/llm/llm.component.d.ts +4 -1
- package/lib/multi-functional-table/multi-functional-table.component.d.ts +3 -0
- package/package.json +1 -1
- package/web-components/main.js +8 -8
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { LLMActions } from './models/llm-actions.enum';
|
|
3
3
|
import { LLMTextareaWithActionsComponent } from './components/llm-textarea-with-actions/llm-textarea-with-actions.component';
|
|
4
4
|
import * as icons from './icons';
|
|
@@ -24,6 +24,7 @@ export class LLMComponent {
|
|
|
24
24
|
this.languageService = languageService;
|
|
25
25
|
this.showUseCaseSummary = false;
|
|
26
26
|
this.showUseCaseRephrase = false;
|
|
27
|
+
this.menuTriggerClick = new EventEmitter();
|
|
27
28
|
this.llmAction = LLMActions;
|
|
28
29
|
this.iconService.registerIcons(icons);
|
|
29
30
|
}
|
|
@@ -49,11 +50,15 @@ export class LLMComponent {
|
|
|
49
50
|
data
|
|
50
51
|
});
|
|
51
52
|
}
|
|
53
|
+
menuTriggerClicked() {
|
|
54
|
+
this.menuTriggerClick.emit();
|
|
55
|
+
}
|
|
52
56
|
static { this.ɵfac = function LLMComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || LLMComponent)(i0.ɵɵdirectiveInject(i1.MatDialog), i0.ɵɵdirectiveInject(i2.IconService), i0.ɵɵdirectiveInject(i2.LanguageTranslateService)); }; }
|
|
53
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LLMComponent, selectors: [["lib-llm"]], inputs: { text: "text", language: "language", isMenuDisabled: "isMenuDisabled", rephrasableLanguagesCodeList: "rephrasableLanguagesCodeList", showUseCaseSummary: "showUseCaseSummary", showUseCaseRephrase: "showUseCaseRephrase" }, decls: 15, vars: 21, consts: [["menu", "matMenu"], ["mat-icon-button", "", 3, "disabled", "matTooltip", "matMenuTriggerFor"], ["svgIcon", "llm_menu"], [3, "matTooltipPosition", "matTooltip"], ["mat-menu-item", "", 3, "click", "disabled"]], template: function LLMComponent_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LLMComponent, selectors: [["lib-llm"]], inputs: { text: "text", language: "language", isMenuDisabled: "isMenuDisabled", rephrasableLanguagesCodeList: "rephrasableLanguagesCodeList", showUseCaseSummary: "showUseCaseSummary", showUseCaseRephrase: "showUseCaseRephrase" }, outputs: { menuTriggerClick: "menuTriggerClick" }, decls: 15, vars: 21, consts: [["menu", "matMenu"], ["mat-icon-button", "", 3, "click", "disabled", "matTooltip", "matMenuTriggerFor"], ["svgIcon", "llm_menu"], [3, "matTooltipPosition", "matTooltip"], ["mat-menu-item", "", 3, "click", "disabled"]], template: function LLMComponent_Template(rf, ctx) { if (rf & 1) {
|
|
54
58
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
55
59
|
i0.ɵɵelementStart(0, "button", 1);
|
|
56
60
|
i0.ɵɵpipe(1, "translate");
|
|
61
|
+
i0.ɵɵlistener("click", function LLMComponent_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.menuTriggerClicked()); });
|
|
57
62
|
i0.ɵɵelement(2, "mat-icon", 2);
|
|
58
63
|
i0.ɵɵelementEnd();
|
|
59
64
|
i0.ɵɵelementStart(3, "mat-menu", null, 0)(5, "div", 3);
|
|
@@ -89,7 +94,7 @@ export class LLMComponent {
|
|
|
89
94
|
}
|
|
90
95
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LLMComponent, [{
|
|
91
96
|
type: Component,
|
|
92
|
-
args: [{ selector: 'lib-llm', template: "<button\r\n [disabled]=\"isMenuDisabled\"\r\n [matTooltip]=\"'LLM.MENU_TOOLTIP' | translate\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n>\r\n <mat-icon svgIcon=\"llm_menu\"></mat-icon>\r\n</button>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n <div [matTooltipPosition]=\"'left'\" [matTooltip]=\"!isTextSummarizable ? ('LLM.MENU_SUMMARY_DISABLED_TOOLTIP' | translate) : ''\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isTextSummarizable\"\r\n (click)=\"openLLMModal(llmAction.SUMMARY)\"\r\n >\r\n {{ \"LLM.SUMMARY\" | translate }}\r\n </button>\r\n </div>\r\n\r\n <div [matTooltipPosition]=\"'left'\" [matTooltip]=\"!isTargetLanguageRephrasable ? ('LLM.MENU_REPHRASE_DISABLED_TOOLTIP' | translate) : ''\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isTargetLanguageRephrasable\"\r\n (click)=\"openLLMModal(llmAction.REPHRASE)\"\r\n >\r\n {{ \"LLM.REPHRASE\" | translate }}\r\n </button>\r\n </div>\r\n</mat-menu>\r\n" }]
|
|
97
|
+
args: [{ selector: 'lib-llm', template: "<button\r\n [disabled]=\"isMenuDisabled\"\r\n [matTooltip]=\"'LLM.MENU_TOOLTIP' | translate\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"menuTriggerClicked()\"\r\n>\r\n <mat-icon svgIcon=\"llm_menu\"></mat-icon>\r\n</button>\r\n\r\n<mat-menu #menu=\"matMenu\">\r\n <div [matTooltipPosition]=\"'left'\" [matTooltip]=\"!isTextSummarizable ? ('LLM.MENU_SUMMARY_DISABLED_TOOLTIP' | translate) : ''\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isTextSummarizable\"\r\n (click)=\"openLLMModal(llmAction.SUMMARY)\"\r\n >\r\n {{ \"LLM.SUMMARY\" | translate }}\r\n </button>\r\n </div>\r\n\r\n <div [matTooltipPosition]=\"'left'\" [matTooltip]=\"!isTargetLanguageRephrasable ? ('LLM.MENU_REPHRASE_DISABLED_TOOLTIP' | translate) : ''\">\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isTargetLanguageRephrasable\"\r\n (click)=\"openLLMModal(llmAction.REPHRASE)\"\r\n >\r\n {{ \"LLM.REPHRASE\" | translate }}\r\n </button>\r\n </div>\r\n</mat-menu>\r\n" }]
|
|
93
98
|
}], () => [{ type: i1.MatDialog }, { type: i2.IconService }, { type: i2.LanguageTranslateService }], { text: [{
|
|
94
99
|
type: Input
|
|
95
100
|
}], language: [{
|
|
@@ -102,6 +107,8 @@ export class LLMComponent {
|
|
|
102
107
|
type: Input
|
|
103
108
|
}], showUseCaseRephrase: [{
|
|
104
109
|
type: Input
|
|
110
|
+
}], menuTriggerClick: [{
|
|
111
|
+
type: Output
|
|
105
112
|
}] }); })();
|
|
106
113
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(LLMComponent, { className: "LLMComponent", filePath: "lib\\llm\\llm.component.ts", lineNumber: 15 }); })();
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGxtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vbGxtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9sbG0vbGxtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3ZELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQzdILE9BQU8sS0FBSyxLQUFLLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVF0QyxNQUFNLE9BQU8sWUFBWTtJQVl2QixJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksMkJBQTJCO1FBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9LLENBQUM7SUFFRCxZQUNTLE1BQWlCLEVBQ1AsV0FBd0IsRUFDeEIsZUFBeUM7UUFGbkQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNQLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtRQWxCbkQsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUUzQixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTdDLGNBQVMsR0FBRyxVQUFVLENBQUM7UUFlOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFrQjtRQUM3QixJQUFJLGNBQWtDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hELGNBQWMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFDRCxNQUFNLElBQUksR0FBWTtZQUNwQixJQUFJLEVBQUUsY0FBYztZQUNwQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVM7WUFDeEIsTUFBTSxFQUFFLE1BQU07WUFDZCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzNDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDOUMsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ2hELFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsUUFBUSxFQUFFLE9BQU87WUFDakIsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQzs2R0FyRFUsWUFBWTtvRUFBWixZQUFZOztZQ2R6QixpQ0FNQzs7WUFEQywrSEFBUyx3QkFBb0IsS0FBQztZQUU5Qiw4QkFBd0M7WUFDMUMsaUJBQVM7WUFHUCxBQURGLHlDQUEwQixhQUN1Rzs7WUFDN0gsaUNBSUM7WUFEQywrSEFBUyx1Q0FBK0IsS0FBQztZQUV6QyxZQUNGOztZQUNGLEFBREUsaUJBQVMsRUFDTDtZQUVOLCtCQUF5STs7WUFDdkksa0NBSUM7WUFEQyxnSUFBUyx3Q0FBZ0MsS0FBQztZQUUxQyxhQUNGOztZQUVKLEFBREUsQUFERSxpQkFBUyxFQUNMLEVBQ0c7OztZQTFCVCxBQUZBLEFBREEsNkNBQTJCLHlEQUNrQiw4QkFFbkI7WUFPckIsZUFBNkI7WUFBQyxBQUE5QiwyQ0FBNkIseUdBQTRGO1lBRzFILGVBQWdDO1lBQWhDLGtEQUFnQztZQUdoQyxjQUNGO1lBREUscUVBQ0Y7WUFHRyxlQUE2QjtZQUFDLEFBQTlCLDJDQUE2QixvSEFBc0c7WUFHcEksZUFBeUM7WUFBekMsMkRBQXlDO1lBR3pDLGNBQ0Y7WUFERSx1RUFDRjs7O2lGRGRTLFlBQVk7Y0FMeEIsU0FBUzsyQkFDRSxTQUFTOzJHQUtWLElBQUk7a0JBQVosS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csNEJBQTRCO2tCQUFwQyxLQUFLO1lBQ0csa0JBQWtCO2tCQUExQixLQUFLO1lBQ0csbUJBQW1CO2tCQUEzQixLQUFLO1lBRUksZ0JBQWdCO2tCQUF6QixNQUFNOztrRkFSSSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTExNQWN0aW9ucyB9IGZyb20gJy4vbW9kZWxzL2xsbS1hY3Rpb25zLmVudW0nO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBJY29uU2VydmljZSwgTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBMTE1UZXh0YXJlYVdpdGhBY3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2xsbS10ZXh0YXJlYS13aXRoLWFjdGlvbnMvbGxtLXRleHRhcmVhLXdpdGgtYWN0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgKiBhcyBpY29ucyBmcm9tICcuL2ljb25zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTExNRGF0YSB9IGZyb20gJy4vbW9kZWxzL2xsbS1kYXRhLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWxsbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xsbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGxtLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMTE1Db21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHRleHQ6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBsYW5ndWFnZSE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBpc01lbnVEaXNhYmxlZCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcmVwaHJhc2FibGVMYW5ndWFnZXNDb2RlTGlzdDogc3RyaW5nW10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgc2hvd1VzZUNhc2VTdW1tYXJ5ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1VzZUNhc2VSZXBocmFzZSA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgbWVudVRyaWdnZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgbGxtQWN0aW9uID0gTExNQWN0aW9ucztcclxuXHJcbiAgZ2V0IGlzVGV4dFN1bW1hcml6YWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRleHQ7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUYXJnZXRMYW5ndWFnZVJlcGhyYXNhYmxlKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnJlcGhyYXNhYmxlTGFuZ3VhZ2VzQ29kZUxpc3QgfHwgKHRoaXMubGFuZ3VhZ2UgJiYgdGhpcy5yZXBocmFzYWJsZUxhbmd1YWdlc0NvZGVMaXN0LmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnJlbW92ZVJlZ2lvbkZyb21MYW5ndWFnZUNvZGUodGhpcy5sYW5ndWFnZSkpKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpY29uU2VydmljZTogSWNvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVySWNvbnMoaWNvbnMpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkxMTU1vZGFsKGFjdGlvbjogTExNQWN0aW9ucyk6IHZvaWQge1xyXG4gICAgbGV0IHRleHRPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICBpZiAoIXRoaXMudGV4dCB8fCB0eXBlb2YgdGhpcy50ZXh0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHRleHRPYnNlcnZhYmxlID0gb2YodGhpcy50ZXh0ID8/IFwiXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGV4dE9ic2VydmFibGUgPSB0aGlzLnRleHQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhOiBMTE1EYXRhID0ge1xyXG4gICAgICB0ZXh0OiB0ZXh0T2JzZXJ2YWJsZSxcclxuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UhLFxyXG4gICAgICBhY3Rpb246IGFjdGlvbixcclxuICAgICAgc2hvd1VzZUNhc2VTdW1tYXJ5OiB0aGlzLnNob3dVc2VDYXNlU3VtbWFyeSxcclxuICAgICAgc2hvd1VzZUNhc2VSZXBocmFzZTogdGhpcy5zaG93VXNlQ2FzZVJlcGhyYXNlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKExMTVRleHRhcmVhV2l0aEFjdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgcGFuZWxDbGFzczogJ3Jlc3BvbnNpdmUtZGlhbG9nJyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgIGRhdGFcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWVudVRyaWdnZXJDbGlja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZW51VHJpZ2dlckNsaWNrLmVtaXQoKTtcclxuICB9XHJcbn1cclxuIiwiPGJ1dHRvblxyXG4gIFtkaXNhYmxlZF09XCJpc01lbnVEaXNhYmxlZFwiXHJcbiAgW21hdFRvb2x0aXBdPVwiJ0xMTS5NRU5VX1RPT0xUSVAnIHwgdHJhbnNsYXRlXCJcclxuICBtYXQtaWNvbi1idXR0b25cclxuICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXHJcbiAgKGNsaWNrKT1cIm1lbnVUcmlnZ2VyQ2xpY2tlZCgpXCJcclxuPlxyXG4gIDxtYXQtaWNvbiBzdmdJY29uPVwibGxtX21lbnVcIj48L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxuXHJcbjxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICA8ZGl2IFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCIgW21hdFRvb2x0aXBdPVwiIWlzVGV4dFN1bW1hcml6YWJsZSA/ICgnTExNLk1FTlVfU1VNTUFSWV9ESVNBQkxFRF9UT09MVElQJyB8IHRyYW5zbGF0ZSkgOiAnJ1wiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNUZXh0U3VtbWFyaXphYmxlXCJcclxuICAgICAgKGNsaWNrKT1cIm9wZW5MTE1Nb2RhbChsbG1BY3Rpb24uU1VNTUFSWSlcIlxyXG4gICAgPlxyXG4gICAgICB7eyBcIkxMTS5TVU1NQVJZXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCIgW21hdFRvb2x0aXBdPVwiIWlzVGFyZ2V0TGFuZ3VhZ2VSZXBocmFzYWJsZSA/ICgnTExNLk1FTlVfUkVQSFJBU0VfRElTQUJMRURfVE9PTFRJUCcgfCB0cmFuc2xhdGUpIDogJydcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzVGFyZ2V0TGFuZ3VhZ2VSZXBocmFzYWJsZVwiXHJcbiAgICAgIChjbGljayk9XCJvcGVuTExNTW9kYWwobGxtQWN0aW9uLlJFUEhSQVNFKVwiXHJcbiAgICA+XHJcbiAgICAgIHt7IFwiTExNLlJFUEhSQVNFXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L21hdC1tZW51PlxyXG4iXX0=
|
|
@@ -166,13 +166,13 @@ function MultiFunctionalTableComponent_tr_18_Template(rf, ctx) { if (rf & 1) {
|
|
|
166
166
|
function MultiFunctionalTableComponent_tr_19_Template(rf, ctx) { if (rf & 1) {
|
|
167
167
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
168
168
|
i0.ɵɵelementStart(0, "tr", 46);
|
|
169
|
-
i0.ɵɵlistener("click", function MultiFunctionalTableComponent_tr_19_Template_tr_click_0_listener() { const row_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView((ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback) && (!ctx_r2.config.disableRowClick || !(ctx_r2.config == null ? null : ctx_r2.config.disableRowClick(row_r16))) ? ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback(row_r16) : null); })("mouseover", function MultiFunctionalTableComponent_tr_19_Template_tr_mouseover_0_listener() { const
|
|
169
|
+
i0.ɵɵlistener("click", function MultiFunctionalTableComponent_tr_19_Template_tr_click_0_listener() { const row_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView((ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback) && (!ctx_r2.config.disableRowClick || !(ctx_r2.config == null ? null : ctx_r2.config.disableRowClick(row_r16))) ? ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback(row_r16) : null); })("mouseover", function MultiFunctionalTableComponent_tr_19_Template_tr_mouseover_0_listener() { const ctx_r16 = i0.ɵɵrestoreView(_r15); const row_r16 = ctx_r16.$implicit; const index_r18 = ctx_r16.index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.rowHovered(index_r18, row_r16)); })("mouseleave", function MultiFunctionalTableComponent_tr_19_Template_tr_mouseleave_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.rowHoverLeave()); });
|
|
170
170
|
i0.ɵɵelementEnd();
|
|
171
171
|
} if (rf & 2) {
|
|
172
172
|
const row_r16 = ctx.$implicit;
|
|
173
|
-
const
|
|
173
|
+
const index_r18 = ctx.index;
|
|
174
174
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
175
|
-
i0.ɵɵclassProp("row-clickable", (ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback) && (!ctx_r2.config.disableRowClick || !(ctx_r2.config == null ? null : ctx_r2.config.disableRowClick(row_r16))))("highlight-error", ctx_r2.highlightErrorElement(
|
|
175
|
+
i0.ɵɵclassProp("row-clickable", (ctx_r2.config == null ? null : ctx_r2.config.rowClickCallback) && (!ctx_r2.config.disableRowClick || !(ctx_r2.config == null ? null : ctx_r2.config.disableRowClick(row_r16))))("highlight-error", ctx_r2.highlightErrorElement(index_r18, row_r16))("highlight", ctx_r2.isElementHighlighted(index_r18, row_r16));
|
|
176
176
|
} }
|
|
177
177
|
function MultiFunctionalTableComponent_th_21_Template(rf, ctx) { if (rf & 1) {
|
|
178
178
|
i0.ɵɵelementStart(0, "th", 40)(1, "div", 47)(2, "button", 48)(3, "span", 29);
|
|
@@ -180,9 +180,9 @@ function MultiFunctionalTableComponent_th_21_Template(rf, ctx) { if (rf & 1) {
|
|
|
180
180
|
i0.ɵɵelementEnd()()()();
|
|
181
181
|
} if (rf & 2) {
|
|
182
182
|
i0.ɵɵnextContext();
|
|
183
|
-
const
|
|
183
|
+
const columnMenu_r19 = i0.ɵɵreference(25);
|
|
184
184
|
i0.ɵɵadvance(2);
|
|
185
|
-
i0.ɵɵproperty("matMenuTriggerFor",
|
|
185
|
+
i0.ɵɵproperty("matMenuTriggerFor", columnMenu_r19);
|
|
186
186
|
} }
|
|
187
187
|
function MultiFunctionalTableComponent_td_22_Template(rf, ctx) { if (rf & 1) {
|
|
188
188
|
i0.ɵɵelement(0, "td", 42);
|
|
@@ -202,18 +202,18 @@ function MultiFunctionalTableComponent_ng_container_23_Template(rf, ctx) { if (r
|
|
|
202
202
|
i0.ɵɵelementContainerEnd();
|
|
203
203
|
} }
|
|
204
204
|
function MultiFunctionalTableComponent_div_27_Template(rf, ctx) { if (rf & 1) {
|
|
205
|
-
const
|
|
205
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
206
206
|
i0.ɵɵelementStart(0, "div")(1, "mat-checkbox", 52);
|
|
207
|
-
i0.ɵɵtwoWayListener("ngModelChange", function MultiFunctionalTableComponent_div_27_Template_mat_checkbox_ngModelChange_1_listener($event) { const
|
|
207
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MultiFunctionalTableComponent_div_27_Template_mat_checkbox_ngModelChange_1_listener($event) { const column_r21 = i0.ɵɵrestoreView(_r20).$implicit; i0.ɵɵtwoWayBindingSet(column_r21.selected, $event) || (column_r21.selected = $event); return i0.ɵɵresetView($event); });
|
|
208
208
|
i0.ɵɵtext(2);
|
|
209
209
|
i0.ɵɵpipe(3, "translate");
|
|
210
210
|
i0.ɵɵelementEnd()();
|
|
211
211
|
} if (rf & 2) {
|
|
212
|
-
const
|
|
212
|
+
const column_r21 = ctx.$implicit;
|
|
213
213
|
i0.ɵɵadvance();
|
|
214
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
214
|
+
i0.ɵɵtwoWayProperty("ngModel", column_r21.selected);
|
|
215
215
|
i0.ɵɵadvance();
|
|
216
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2,
|
|
216
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, column_r21.displayName), " ");
|
|
217
217
|
} }
|
|
218
218
|
export class MultiFunctionalTableComponent {
|
|
219
219
|
#dataSource;
|
|
@@ -349,7 +349,12 @@ export class MultiFunctionalTableComponent {
|
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
351
|
isElementHighlighted(ix, element) {
|
|
352
|
-
|
|
352
|
+
let isHovered = false;
|
|
353
|
+
if (this.hoveredRow && this.hoveredRowIndex !== undefined) {
|
|
354
|
+
isHovered = this.trackByFn(this.hoveredRowIndex, this.hoveredRow) === this.trackByFn(ix, element);
|
|
355
|
+
}
|
|
356
|
+
return isHovered ||
|
|
357
|
+
this.highlightedElements?.some((highlightElement, highlightElementIx) => this.trackByFn(highlightElementIx, highlightElement) === this.trackByFn(ix, element));
|
|
353
358
|
}
|
|
354
359
|
highlightErrorElement(ix, element) {
|
|
355
360
|
return this.highlightedErrorElements?.some((highlightElement, highlightElementIx) => this.trackByFn(highlightElementIx, highlightElement) === this.trackByFn(ix, element));
|
|
@@ -432,6 +437,14 @@ export class MultiFunctionalTableComponent {
|
|
|
432
437
|
this.paginatorUpdate.emit(change);
|
|
433
438
|
}
|
|
434
439
|
//#endregion
|
|
440
|
+
rowHovered(index, row) {
|
|
441
|
+
this.hoveredRow = row;
|
|
442
|
+
this.hoveredRowIndex = index;
|
|
443
|
+
}
|
|
444
|
+
rowHoverLeave() {
|
|
445
|
+
this.hoveredRow = null;
|
|
446
|
+
this.hoveredRowIndex = undefined;
|
|
447
|
+
}
|
|
435
448
|
checkTableOverflow() {
|
|
436
449
|
// when data is available we should check once for table overflow
|
|
437
450
|
// when there wasnt overflow, but width of the table became bigger, then we are reseting tableOverflow variable
|
|
@@ -612,11 +625,11 @@ export class MultiFunctionalTableComponent {
|
|
|
612
625
|
i0.ɵɵproperty("ngForOf", ctx.configurableColumns);
|
|
613
626
|
i0.ɵɵadvance(3);
|
|
614
627
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(31, 20, "MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT_SAVE"), " ");
|
|
615
|
-
} }, dependencies: [i3.NgForOf, i3.NgIf, i4.MatTable, i4.MatHeaderCellDef, i4.MatHeaderRowDef, i4.MatColumnDef, i4.MatCellDef, i4.MatRowDef, i4.MatHeaderCell, i4.MatCell, i4.MatHeaderRow, i4.MatRow, i4.MatNoDataRow, i5.MatButton, i5.MatIconButton, i6.MatMenu, i6.MatMenuTrigger, i7.MatCheckbox, i8.NgControlStatus, i8.NgModel, i9.FilterBarComponent, i10.DefaultLayoutDirective, i10.DefaultLayoutGapDirective, i10.DefaultLayoutAlignDirective, i10.DefaultFlexDirective, i11.DefaultClassDirective, i12.MatTooltip, i13.StatusDisplayComponent, i14.MatIcon, i15.MatPaginator, i2.TranslatePipe], styles: ["[_nghost-%COMP%] th, [_nghost-%COMP%] tr{white-space:nowrap}[_nghost-%COMP%] td:not(:first-of-type){padding-right:10px!important}[_nghost-%COMP%] tr.mat-mdc-row:hover, [_nghost-%COMP%] tr.mat-mdc-row.highlight{background-color:var(--base-95)}[_nghost-%COMP%] tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}[_nghost-%COMP%] .export-data .mdc-button__label{display:flex;align-items:center}[_nghost-%COMP%] .mat-mdc-cell, [_nghost-%COMP%] .mat-mdc-header-cell, [_nghost-%COMP%] .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}[_nghost-%COMP%] .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}[_nghost-%COMP%] .mdc-data-table__cell:nth-child(2), [_nghost-%COMP%] .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}[_nghost-%COMP%] td+.cdk-column-columnSelect{display:none}[_nghost-%COMP%] .clear-filters-wrapper .mat-mdc-icon-button, [_nghost-%COMP%] .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}[_nghost-%COMP%] .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}[_nghost-%COMP%] .filter-active{background-color:var(--neutral-95)}[_nghost-%COMP%] .row-actions{opacity:0}[_nghost-%COMP%] .
|
|
628
|
+
} }, dependencies: [i3.NgForOf, i3.NgIf, i4.MatTable, i4.MatHeaderCellDef, i4.MatHeaderRowDef, i4.MatColumnDef, i4.MatCellDef, i4.MatRowDef, i4.MatHeaderCell, i4.MatCell, i4.MatHeaderRow, i4.MatRow, i4.MatNoDataRow, i5.MatButton, i5.MatIconButton, i6.MatMenu, i6.MatMenuTrigger, i7.MatCheckbox, i8.NgControlStatus, i8.NgModel, i9.FilterBarComponent, i10.DefaultLayoutDirective, i10.DefaultLayoutGapDirective, i10.DefaultLayoutAlignDirective, i10.DefaultFlexDirective, i11.DefaultClassDirective, i12.MatTooltip, i13.StatusDisplayComponent, i14.MatIcon, i15.MatPaginator, i2.TranslatePipe], styles: ["[_nghost-%COMP%] th, [_nghost-%COMP%] tr{white-space:nowrap}[_nghost-%COMP%] td:not(:first-of-type){padding-right:10px!important}[_nghost-%COMP%] tr.mat-mdc-row:hover, [_nghost-%COMP%] tr.mat-mdc-row.highlight{background-color:var(--base-95)}[_nghost-%COMP%] tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}[_nghost-%COMP%] .export-data .mdc-button__label{display:flex;align-items:center}[_nghost-%COMP%] .mat-mdc-cell, [_nghost-%COMP%] .mat-mdc-header-cell, [_nghost-%COMP%] .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}[_nghost-%COMP%] .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}[_nghost-%COMP%] .mdc-data-table__cell:nth-child(2), [_nghost-%COMP%] .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}[_nghost-%COMP%] td+.cdk-column-columnSelect{display:none}[_nghost-%COMP%] .clear-filters-wrapper .mat-mdc-icon-button, [_nghost-%COMP%] .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}[_nghost-%COMP%] .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}[_nghost-%COMP%] .filter-active{background-color:var(--neutral-95)}[_nghost-%COMP%] .row-actions{opacity:0}[_nghost-%COMP%] .highlight .row-actions{opacity:1}[_nghost-%COMP%] .mat-mdc-paginator-range-actions button{padding:8px}table[_ngcontent-%COMP%]{width:100%}.wild-search-wrapper[_ngcontent-%COMP%]{position:relative;padding:5px 10px;border-radius:4px;border:1px solid var(--neutral-50);margin:0 8px}.wild-search-wrapper[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{margin-right:30px}.wild-search-wrapper[_ngcontent-%COMP%] .search-icon[_ngcontent-%COMP%]{color:var(--base-40)}.wild-search-wrapper[_ngcontent-%COMP%] .wild-search-clear-btn[_ngcontent-%COMP%]{position:absolute;right:3px}.wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%], .wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] .mat-mdc-button-touch-target[_ngcontent-%COMP%]{height:33px!important;width:33px!important}.wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%], .wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] .material-icons[_ngcontent-%COMP%], .wild-search-wrapper[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%] .material-icons-outlined[_ngcontent-%COMP%]{top:5px!important;left:5px!important}.mobile[_ngcontent-%COMP%] .wild-search-wrapper[_ngcontent-%COMP%]{margin:0}.column-selector-wrapper[_ngcontent-%COMP%]{display:flex;justify-content:end}.column-select-menu[_ngcontent-%COMP%]{padding:8px 18px 8px 8px}.column-select-save[_ngcontent-%COMP%]{padding-left:8px;padding-top:8px}.column-select-save[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:100%}.row-clickable[_ngcontent-%COMP%]{cursor:pointer}.row-clickable[_ngcontent-%COMP%]:active{background-color:var(--base-70)!important}.material-icons[_ngcontent-%COMP%], .material-icons-outlined[_ngcontent-%COMP%]{margin-right:.5rem}.table-action-button[_ngcontent-%COMP%]{margin-bottom:1rem}th.mat-mdc-header-cell[_ngcontent-%COMP%]:first-of-type, td.mat-mdc-cell[_ngcontent-%COMP%]:first-of-type, td.mat-mdc-footer-cell[_ngcontent-%COMP%]:first-of-type{padding:0 0 0 10px}.row-select[_ngcontent-%COMP%]{width:0}.table-overflow[_ngcontent-%COMP%]{overflow-x:auto}.table-dragable[_ngcontent-%COMP%]{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable[_ngcontent-%COMP%]:active{cursor:grabbing}.table-sticky-header[_ngcontent-%COMP%]{max-height:70vh}"] }); }
|
|
616
629
|
}
|
|
617
630
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MultiFunctionalTableComponent, [{
|
|
618
631
|
type: Component,
|
|
619
|
-
args: [{ selector: 'tld-multi-functional-table', template: "<div [ngClass.lt-md]=\"'mobile'\" fxLayout=\"column\" fxLayoutGap=\"0.75rem\">\r\n <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutGap.lt-md=\"0.75rem\">\r\n <div\r\n fxFlex\r\n fxLayout.lt-md=\"column\"\r\n fxLayoutGap=\"0.75rem\"\r\n fxLayoutAlign=\"start center\"\r\n fxLayoutAlign.lt-md=\"start start\"\r\n class=\"action-row\"\r\n >\r\n <button\r\n class=\"export-data\"\r\n mat-stroked-button\r\n color=\"primary-accent-darker\"\r\n *ngIf=\"exportActive\"\r\n (click)=\"export()\"\r\n >\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{ \"MULTI_FUNCTIONAL_TABLE.EXPORT\" | translate }}</span>\r\n </button>\r\n\r\n <div\r\n *ngIf=\"filterActive && showFilterToggle\"\r\n fxFlex\r\n fxLayoutGap=\"0.5rem\"\r\n fxLayoutAlign=\"start center\"\r\n >\r\n <button\r\n [class.filter-active]=\"filterBarVisible\"\r\n mat-stroked-button\r\n color=\"primary-accent-darker\"\r\n (click)=\"toggleFilterBar()\"\r\n >\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{ \"MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE\" | translate }}</span>\r\n </button>\r\n\r\n <div *ngIf=\"showFilterReset\" class=\"clear-filters-wrapper\">\r\n <button mat-icon-button (click)=\"clearFilters()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showSearch\"\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"start center\"\r\n class=\"wild-search-wrapper\"\r\n >\r\n <mat-icon\r\n class=\"search-icon\"\r\n [matTooltip]=\"hideSearchTooltip ? '' : (searchTooltip | translate)\"\r\n >search</mat-icon\r\n >\r\n <input\r\n [value]=\"config.filter?.settings?.searchValue ?? ''\"\r\n #wildSearch\r\n type=\"text\"\r\n [placeholder]=\"searchTitle | translate\"\r\n (keyup)=\"search($event)\"\r\n />\r\n <button\r\n *ngIf=\"showSearchClearButton && wildSearch.value\"\r\n mat-icon-button\r\n class=\"wild-search-clear-btn\"\r\n (click)=\"wildSearch.value = ''; search({ target: { value: '' } })\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <tld-filter-bar\r\n *ngIf=\"config.filter && config.filter.enabled\"\r\n #filterBar\r\n [filterRowVisible]=\"filterBarVisible\"\r\n [settings]=\"config.filter.settings\"\r\n (filterBarChange)=\"filtersChanged($event)\"\r\n >\r\n </tld-filter-bar>\r\n\r\n <ng-content select=\"[batchActions]\"></ng-content>\r\n\r\n @if(config.paginator?.enabled){\r\n @let paginatorConfig = config.paginator!;\r\n\r\n <mat-paginator [hidePageSize]=\"!paginatorConfig.showPageSize\" [showFirstLastButtons]=\"paginatorConfig.showFirstLastButtons\"\r\n [attr.aria-label]=\"'MULTI_FUNCTIONAL_TABLE.PAGINATOR_LABEL' | translate\" [pageSizeOptions]=\"paginatorConfig.pageSizeOptions ?? [10]\" (page)=\"paginatorChange($event)\">\r\n </mat-paginator>\r\n }\r\n <div\r\n #tableContainer\r\n class=\"table-overflow\"\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow && !config?.disableMouseDragging\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table\r\n #table\r\n mat-table\r\n [dataSource]=\"dataSource!\"\r\n [trackBy]=\"trackByFn\"\r\n >\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox\r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\"\r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled\"\r\n (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n </th>\r\n <td\r\n class=\"row-select\"\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n disable-export\r\n >\r\n <mat-checkbox\r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\"\r\n *ngIf=\"\r\n isRowCheckboxAlwaysVisible ||\r\n hoveredRow === element ||\r\n matSelection.isSelected(element)\r\n \"\r\n [disabled]=\"\r\n config.batchConfig!.checkBoxesDisabled ||\r\n (preselectedItems.includes(element) && disablePreselectedItems)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\"\r\n [checked]=\"matSelection.isSelected(element)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; let index = index; columns: displayColumns\"\r\n (click)=\"\r\n config?.rowClickCallback && (!config.disableRowClick || !config?.disableRowClick(row))\r\n ? config?.rowClickCallback(row)\r\n : null\r\n \"\r\n (mouseover)=\"hoveredRow = row\"\r\n (mouseleave)=\"hoveredRow = null\"\r\n [class.row-clickable]=\"\r\n config?.rowClickCallback && (!config.disableRowClick || !config?.disableRowClick(row))\r\n \"\r\n [class.highlight-error]=\"highlightErrorElement(index, row)\"\r\n [class.highlight]=\"row === hoveredRow || isElementHighlighted(index,row)\"\r\n ></tr>\r\n\r\n <ng-container [matColumnDef]=\"columnSelectColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <div class=\"column-selector-wrapper\">\r\n <button\r\n class=\"column-selector\"\r\n mat-icon-button\r\n color=\"primary-accent-darker\"\r\n [matMenuTriggerFor]=\"columnMenu\"\r\n >\r\n <span class=\"material-icons\">more_vert</span>\r\n </button>\r\n </div>\r\n </th>\r\n <td\r\n class=\"row-select\"\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n disable-export\r\n ></td>\r\n </ng-container>\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-menu\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\">\r\n {{ column.displayName | translate }}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div class=\"column-select-save\">\r\n <button\r\n mat-flat-button\r\n color=\"primary-accent-darker\"\r\n (click)=\"updateDisplayColumns()\"\r\n >\r\n {{ \"MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT_SAVE\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}:host ::ng-deep td+.cdk-column-columnSelect{display:none}:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button,:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}:host ::ng-deep .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}:host ::ng-deep .filter-active{background-color:var(--neutral-95)}:host ::ng-deep .row-actions{opacity:0}:host ::ng-deep .mobile .row-actions,:host ::ng-deep .highlight .row-actions{opacity:1}:host ::ng-deep .mat-mdc-paginator-range-actions button{padding:8px}table{width:100%}.wild-search-wrapper{position:relative;padding:5px 10px;border-radius:4px;border:1px solid var(--neutral-50);margin:0 8px}.wild-search-wrapper input{margin-right:30px}.wild-search-wrapper .search-icon{color:var(--base-40)}.wild-search-wrapper .wild-search-clear-btn{position:absolute;right:3px}.wild-search-wrapper .mat-mdc-icon-button,.wild-search-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:33px!important;width:33px!important}.wild-search-wrapper .mat-mdc-icon-button mat-icon,.wild-search-wrapper .mat-mdc-icon-button .material-icons,.wild-search-wrapper .mat-mdc-icon-button .material-icons-outlined{top:5px!important;left:5px!important}.mobile .wild-search-wrapper{margin:0}.column-selector-wrapper{display:flex;justify-content:end}.column-select-menu{padding:8px 18px 8px 8px}.column-select-save{padding-left:8px;padding-top:8px}.column-select-save button{width:100%}.row-clickable{cursor:pointer}.row-clickable:active{background-color:var(--base-70)!important}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
|
|
632
|
+
args: [{ selector: 'tld-multi-functional-table', template: "<div [ngClass.lt-md]=\"'mobile'\" fxLayout=\"column\" fxLayoutGap=\"0.75rem\">\r\n <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutGap.lt-md=\"0.75rem\">\r\n <div\r\n fxFlex\r\n fxLayout.lt-md=\"column\"\r\n fxLayoutGap=\"0.75rem\"\r\n fxLayoutAlign=\"start center\"\r\n fxLayoutAlign.lt-md=\"start start\"\r\n class=\"action-row\"\r\n >\r\n <button\r\n class=\"export-data\"\r\n mat-stroked-button\r\n color=\"primary-accent-darker\"\r\n *ngIf=\"exportActive\"\r\n (click)=\"export()\"\r\n >\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{ \"MULTI_FUNCTIONAL_TABLE.EXPORT\" | translate }}</span>\r\n </button>\r\n\r\n <div\r\n *ngIf=\"filterActive && showFilterToggle\"\r\n fxFlex\r\n fxLayoutGap=\"0.5rem\"\r\n fxLayoutAlign=\"start center\"\r\n >\r\n <button\r\n [class.filter-active]=\"filterBarVisible\"\r\n mat-stroked-button\r\n color=\"primary-accent-darker\"\r\n (click)=\"toggleFilterBar()\"\r\n >\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{ \"MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE\" | translate }}</span>\r\n </button>\r\n\r\n <div *ngIf=\"showFilterReset\" class=\"clear-filters-wrapper\">\r\n <button mat-icon-button (click)=\"clearFilters()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showSearch\"\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"start center\"\r\n class=\"wild-search-wrapper\"\r\n >\r\n <mat-icon\r\n class=\"search-icon\"\r\n [matTooltip]=\"hideSearchTooltip ? '' : (searchTooltip | translate)\"\r\n >search</mat-icon\r\n >\r\n <input\r\n [value]=\"config.filter?.settings?.searchValue ?? ''\"\r\n #wildSearch\r\n type=\"text\"\r\n [placeholder]=\"searchTitle | translate\"\r\n (keyup)=\"search($event)\"\r\n />\r\n <button\r\n *ngIf=\"showSearchClearButton && wildSearch.value\"\r\n mat-icon-button\r\n class=\"wild-search-clear-btn\"\r\n (click)=\"wildSearch.value = ''; search({ target: { value: '' } })\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <tld-filter-bar\r\n *ngIf=\"config.filter && config.filter.enabled\"\r\n #filterBar\r\n [filterRowVisible]=\"filterBarVisible\"\r\n [settings]=\"config.filter.settings\"\r\n (filterBarChange)=\"filtersChanged($event)\"\r\n >\r\n </tld-filter-bar>\r\n\r\n <ng-content select=\"[batchActions]\"></ng-content>\r\n\r\n @if(config.paginator?.enabled){\r\n @let paginatorConfig = config.paginator!;\r\n\r\n <mat-paginator [hidePageSize]=\"!paginatorConfig.showPageSize\" [showFirstLastButtons]=\"paginatorConfig.showFirstLastButtons\"\r\n [attr.aria-label]=\"'MULTI_FUNCTIONAL_TABLE.PAGINATOR_LABEL' | translate\" [pageSizeOptions]=\"paginatorConfig.pageSizeOptions ?? [10]\" (page)=\"paginatorChange($event)\">\r\n </mat-paginator>\r\n }\r\n <div\r\n #tableContainer\r\n class=\"table-overflow\"\r\n [class.table-sticky-header]=\"config?.stickyHeader\"\r\n [class.table-dragable]=\"tableOverflow && !config?.disableMouseDragging\"\r\n (mousedown)=\"onMouseDown($event)\"\r\n (mouseup)=\"onMouseUp()\"\r\n (mouseleave)=\"onMouseUp()\"\r\n (mousemove)=\"onMouseMove($event)\"\r\n >\r\n <table\r\n #table\r\n mat-table\r\n [dataSource]=\"dataSource!\"\r\n [trackBy]=\"trackByFn\"\r\n >\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox\r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\"\r\n [disabled]=\"config.batchConfig!.checkBoxesDisabled\"\r\n (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n </th>\r\n <td\r\n class=\"row-select\"\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n disable-export\r\n >\r\n <mat-checkbox\r\n [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\"\r\n *ngIf=\"\r\n isRowCheckboxAlwaysVisible ||\r\n hoveredRow === element ||\r\n matSelection.isSelected(element)\r\n \"\r\n [disabled]=\"\r\n config.batchConfig!.checkBoxesDisabled ||\r\n (preselectedItems.includes(element) && disablePreselectedItems)\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\"\r\n [checked]=\"matSelection.isSelected(element)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"displayColumns; sticky: config?.stickyHeader ?? false\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; let index = index; columns: displayColumns\"\r\n (click)=\"\r\n config?.rowClickCallback && (!config.disableRowClick || !config?.disableRowClick(row))\r\n ? config?.rowClickCallback(row)\r\n : null\r\n \"\r\n (mouseover)=\"rowHovered(index,row)\"\r\n (mouseleave)=\"rowHoverLeave()\"\r\n [class.row-clickable]=\"\r\n config?.rowClickCallback && (!config.disableRowClick || !config?.disableRowClick(row))\r\n \"\r\n [class.highlight-error]=\"highlightErrorElement(index, row)\"\r\n [class.highlight]=\"isElementHighlighted(index,row)\"\r\n ></tr>\r\n\r\n <ng-container [matColumnDef]=\"columnSelectColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <div class=\"column-selector-wrapper\">\r\n <button\r\n class=\"column-selector\"\r\n mat-icon-button\r\n color=\"primary-accent-darker\"\r\n [matMenuTriggerFor]=\"columnMenu\"\r\n >\r\n <span class=\"material-icons\">more_vert</span>\r\n </button>\r\n </div>\r\n </th>\r\n <td\r\n class=\"row-select\"\r\n mat-cell\r\n *matCellDef=\"let element\"\r\n disable-export\r\n ></td>\r\n </ng-container>\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-menu\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\">\r\n {{ column.displayName | translate }}\r\n </mat-checkbox>\r\n </div>\r\n\r\n <div class=\"column-select-save\">\r\n <button\r\n mat-flat-button\r\n color=\"primary-accent-darker\"\r\n (click)=\"updateDisplayColumns()\"\r\n >\r\n {{ \"MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT_SAVE\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep tr.mat-mdc-row.highlight-error{background-color:var(--warning-light)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}:host ::ng-deep td+.cdk-column-columnSelect{display:none}:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button,:host ::ng-deep .clear-filters-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:36px!important;width:36px!important}:host ::ng-deep .clear-filters-wrapper mat-icon{margin-top:-2px;margin-left:-2px}:host ::ng-deep .filter-active{background-color:var(--neutral-95)}:host ::ng-deep .row-actions{opacity:0}:host ::ng-deep .highlight .row-actions{opacity:1}:host ::ng-deep .mat-mdc-paginator-range-actions button{padding:8px}table{width:100%}.wild-search-wrapper{position:relative;padding:5px 10px;border-radius:4px;border:1px solid var(--neutral-50);margin:0 8px}.wild-search-wrapper input{margin-right:30px}.wild-search-wrapper .search-icon{color:var(--base-40)}.wild-search-wrapper .wild-search-clear-btn{position:absolute;right:3px}.wild-search-wrapper .mat-mdc-icon-button,.wild-search-wrapper .mat-mdc-icon-button .mat-mdc-button-touch-target{height:33px!important;width:33px!important}.wild-search-wrapper .mat-mdc-icon-button mat-icon,.wild-search-wrapper .mat-mdc-icon-button .material-icons,.wild-search-wrapper .mat-mdc-icon-button .material-icons-outlined{top:5px!important;left:5px!important}.mobile .wild-search-wrapper{margin:0}.column-selector-wrapper{display:flex;justify-content:end}.column-select-menu{padding:8px 18px 8px 8px}.column-select-save{padding-left:8px;padding-top:8px}.column-select-save button{width:100%}.row-clickable{cursor:pointer}.row-clickable:active{background-color:var(--base-70)!important}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}.table-dragable{cursor:grab;-webkit-user-select:none;user-select:none}.table-dragable:active{cursor:grabbing}.table-sticky-header{max-height:70vh}\n"] }]
|
|
620
633
|
}], () => [{ type: i1.DOMService }, { type: i2.TranslateService }], { config: [{
|
|
621
634
|
type: Input
|
|
622
635
|
}], highlightedElements: [{
|
|
@@ -671,4 +684,4 @@ export class MultiFunctionalTableComponent {
|
|
|
671
684
|
args: [MatTable, { read: ElementRef }]
|
|
672
685
|
}] }); })();
|
|
673
686
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MultiFunctionalTableComponent, { className: "MultiFunctionalTableComponent", filePath: "lib\\multi-functional-table\\multi-functional-table.component.ts", lineNumber: 26 }); })();
|
|
674
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hNLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvSCxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7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QVM7bUJBQUMsT0FBTztZQUVXLGNBQWM7a0JBQTFDLFNBQVM7bUJBQUMsZ0JBQWdCO1lBQ0gsU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXO1lBQ0csU0FBUztrQkFBakMsU0FBUzttQkFBQyxZQUFZO1lBSW9CLGVBQWU7a0JBQXpELFNBQVM7bUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs7a0ZBMUM5Qiw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIGVmZmVjdCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbnB1dCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRIZWFkZXJSb3dEZWYsIE1hdE5vRGF0YVJvdywgTWF0Um93RGVmLCBNYXRUYWJsZSwgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXItYmFyJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi9maWx0ZXItYmFyL21vZGVscy9maWx0ZXItYmFyLWNoYW5nZS1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEh0bWxFbGVtZW50UGFyc2VIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgU2F2ZUZpbGVIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3NhdmUtZmlsZS5oZWxwZXInO1xyXG5pbXBvcnQgeyBET01TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBTdGF0dXNEaXNwbGF5Q29uZmlnIH0gZnJvbSAnLi4vc3RhdHVzLWRpc3BsYXkvbW9kZWxzL3N0YXR1cy1kaXNwbGF5LWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IERJU0FCTEVfRVhQT1JUX0FUVFJJQlVURV9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMvZGlzYWJsZS1leHBvcnQtYXR0cmlidXRlLW5hbWUuY29uc3QnO1xyXG5pbXBvcnQgeyBFeHBvcnRGb3JtYXQgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IENvbHVtbkNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2NvbHVtbi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL211bHRpLWZ1bmN0aW9uYWwtdGFibGUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWcgfSBmcm9tICcuL21vZGVscy9zZWxlY3RlZC1jb2x1bW4tbG9jYWwtc3RvcmFnZS1jb25maWcubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3RsZC1tdWx0aS1mdW5jdGlvbmFsLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aUZ1bmN0aW9uYWxUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcmVhZG9ubHkgbWF0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFQ+KHRydWUsIFtdKTtcclxuXHJcbiAgI2RhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZDtcclxuICBnZXQgZGF0YVNvdXJjZSgpOiBNYXRUYWJsZURhdGFTb3VyY2U8VD4ge1xyXG4gICAgcmV0dXJuICh0aGlzLiNkYXRhU291cmNlID8/IHRoaXMuY29uZmlnLmRhdGFTb3VyY2UpITtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnPFQ+O1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRWxlbWVudHMhOiBUW107XHJcbiAgQElucHV0KCkgdHJhY2tCeUZuITogKGl4OiBudW1iZXIsIHJvdzogVCkgPT4gc3RyaW5nIHwgbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRXJyb3JFbGVtZW50cyE6IFRbXTtcclxuICBASW5wdXQoKSBzZXQgc2VsZWN0aW9uKHZhbHVlOiBUW10pIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNldFNlbGVjdGlvbiguLi4odmFsdWUgPz8gW10pKTtcclxuICB9XHJcblxyXG4gIC8vIFNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgY2hlY2tib3hlcyBvbmx5IG9uIHJvdyBob3Zlci5cclxuICBASW5wdXQoKSBpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSA9IHRydWU7XHJcbiAgQElucHV0KCkgZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMgPSBmYWxzZTtcclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dCBwcm9wZXJ0aWVzXHJcbiAgQE91dHB1dCgpIGZpbHRlckJhckNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHBhZ2luYXRvclVwZGF0ZTogRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZXhwb3J0ZWQ6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZTogT2JzZXJ2YWJsZTxUW10+ID0gdGhpcy5tYXRTZWxlY3Rpb24uY2hhbmdlZC5hc09ic2VydmFibGUoKS5waXBlKG1hcCgoKSA9PiB7IHJldHVybiB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZDsgfSkpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXMgZm9yIG1hdCB0YWJsZSB3cmFwcGVyXHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRIZWFkZXJSb3dEZWYpIGhlYWRlclJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0SGVhZGVyUm93RGVmPjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dEZWZzITogUXVlcnlMaXN0PE1hdFJvd0RlZjxUPj47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZnMhOiBRdWVyeUxpc3Q8TWF0Q29sdW1uRGVmPjtcclxuICBAQ29udGVudENoaWxkKE1hdE5vRGF0YVJvdykgbm9EYXRhUm93ITogTWF0Tm9EYXRhUm93O1xyXG5cclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZSE6IE1hdFRhYmxlPFQ+O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJykgdGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJCYXInKSBmaWx0ZXJCYXIhOiBGaWx0ZXJCYXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSB0YWJsZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgLyoqIFRoaXMgcHJvcGVydHkgd2lsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgb25seSBpZiBjb25maWcuRGF0YVNvdXJjZSBub3Qgc2V0LiAqL1xyXG4gIGRhdGEgPSBpbnB1dDxUW10+KCk7XHJcbiAgZGF0YVNvdXJjZVVwZGF0ZUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7IHRoaXMudXBkYXRlRGF0YVNvdXJjZURhdGEoKTsgfSlcclxuXHJcbiAgcHJlc2VsZWN0ZWRJdGVtcyE6IFRbXTtcclxuXHJcbiAgZ2V0IGlnbm9yZUF0dHJpYnV0ZU5hbWUoKSB7IHJldHVybiBESVNBQkxFX0VYUE9SVF9BVFRSSUJVVEVfTkFNRSB9XHJcbiAgZGlzcGxheUNvbHVtbnMhOiBzdHJpbmdbXTtcclxuXHJcbiAgY29sdW1uU2VsZWN0QWN0aXZlITogYm9vbGVhbjtcclxuICBleHBvcnRBY3RpdmUhOiBib29sZWFuO1xyXG4gIG5vRGF0YVJvd0FjdGl2ZSE6IGJvb2xlYW47XHJcblxyXG4gIGZpbHRlcnMhOiBGaWx0ZXJCYXJDaGFuZ2VFdmVudDtcclxuICBmaWx0ZXJCYXJWaXNpYmxlITogYm9vbGVhbjtcclxuXHJcbiAgaGlkZVNlYXJjaFRvb2x0aXAhOiBib29sZWFuO1xyXG4gIHNob3dTZWFyY2ghOiBib29sZWFuO1xyXG4gIHNob3dTZWFyY2hDbGVhckJ1dHRvbiE6IGJvb2xlYW47XHJcbiAgc2VhcmNoVGl0bGUhOiBzdHJpbmc7XHJcbiAgc2VhcmNoVG9vbHRpcCE6IHN0cmluZztcclxuXHJcbiAgbm9EYXRhUm93Q29uZmlnITogU3RhdHVzRGlzcGxheUNvbmZpZztcclxuICBub0RhdGFSb3dJY29uID0gXCJtYW5hZ2Vfc2VhcmNoXCI7XHJcblxyXG4gIGNvbmZpZ3VyYWJsZUNvbHVtbnMhOiBDb2x1bW5Db25maWdbXTtcclxuICBiYXRjaFNlbGVjdGVkRW5hYmxlZCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGlzIHVzZWQgaW4gaHRtbCB0byBkaXNwbGF5IGJhdGNoIGNoZWNrYm94IG9uIGhvdmVyZWQgcm93XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBob3ZlcmVkUm93OiBhbnk7XHJcblxyXG4gIC8vIHByb3BlcnRpZXMgZm9yIG92ZXJmbG93IHNjcm9sbGluZyB3aXRoIG1vdXNlIGNsaWNrXHJcbiAgdGFibGVPdmVyZmxvdyE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBzY3JvbGxNb3ZlbWVudCE6IG51bWJlciB8IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdGFydFggPSAwO1xyXG4gIHByaXZhdGUgc3RhcnRZID0gMDtcclxuICBwcml2YXRlIHNjcm9sbExlZnQgPSAwO1xyXG4gIHByaXZhdGUgc2Nyb2xsVG9wID0gMDtcclxuXHJcbiAgZ2V0IGZpbHRlckFjdGl2ZSgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbHRlcj8uZW5hYmxlZDsgfVxyXG4gIGdldCBzaG93RmlsdGVyVG9nZ2xlKCkgeyByZXR1cm4gIXRoaXMuY29uZmlnLmZpbHRlcj8uaGlkZUZpbHRlclRvZ2dsZTsgfVxyXG5cclxuICBnZXQgc2hvd0ZpbHRlclJlc2V0KCkgeyByZXR1cm4gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncy5maWx0ZXJzPy5maW5kKGZpbHRlciA9PiBmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aCkgfVxyXG5cclxuICBwcml2YXRlIGxvY2FsU3RvcmFnZVZhbHVlITogU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWc7XHJcbiAgcmVhZG9ubHkgYmF0Y2hDb2x1bW5OYW1lID0gXCJiYXRjaFwiO1xyXG4gIHJlYWRvbmx5IGNvbHVtblNlbGVjdENvbHVtbk5hbWUgPSBcImNvbHVtblNlbGVjdFwiO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRvbVNlcnZpY2U6IERPTVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAvLyNyZWdpb24gQW5ndWxhciBsaWZlY3ljbGUgaG9va3NcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlRGF0YVNvdXJjZSgpO1xyXG4gICAgdGhpcy5yZWFkRnJvbUxvY2FsU3RvcmFnZSgpO1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJWaXNpYmlsaXR5KCk7XHJcbiAgICB0aGlzLnNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMuc2V0RXhwb3J0UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5zZXROb0RhdGFSb3dQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnByZXNlbGVjdGVkSXRlbXMgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZDtcclxuICAgIHRoaXMuc2VhcmNoVG9vbHRpcCA9IHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFRvb2x0aXAgPz8gJ0ZJTFRFUl9CQVIuU0VBUkNIX1RPT0xUSVAnO1xyXG4gICAgdGhpcy5zZWFyY2hUaXRsZSA9IHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFRpdGxlID8/ICdGSUxURVJfQkFSLlNFQVJDSCc7XHJcbiAgICB0aGlzLnNob3dTZWFyY2ggPSAhdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uaGlkZVNlYXJjaDtcclxuICAgIHRoaXMuc2hvd1NlYXJjaENsZWFyQnV0dG9uID0gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uc2hvd1NlYXJjaENsZWFyQnV0dG9uID8/IHRydWU7XHJcbiAgICB0aGlzLmhpZGVTZWFyY2hUb29sdGlwID0gIXRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LmhpZGVUb29sdGlwO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy5jb2x1bW5EZWZzLmZvckVhY2goY29sdW1uRGVmID0+IHRoaXMudGFibGUuYWRkQ29sdW1uRGVmKGNvbHVtbkRlZikpO1xyXG4gICAgdGhpcy5yb3dEZWZzLmZvckVhY2gocm93RGVmID0+IHRoaXMudGFibGUuYWRkUm93RGVmKHJvd0RlZikpO1xyXG4gICAgdGhpcy5oZWFkZXJSb3dEZWZzLmZvckVhY2goaGVhZGVyUm93RGVmID0+IHRoaXMudGFibGUuYWRkSGVhZGVyUm93RGVmKGhlYWRlclJvd0RlZikpO1xyXG4gICAgdGhpcy5oZWFkZXJSb3dEZWZzLmZvckVhY2goaGVhZGVyUm93RGVmID0+IHRoaXMudGFibGUuYWRkSGVhZGVyUm93RGVmKGhlYWRlclJvd0RlZikpO1xyXG4gICAgdGhpcy50YWJsZS5zZXROb0RhdGFSb3codGhpcy5ub0RhdGFSb3cpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2luYXRvcj8uaW5pdGlhbFBhZ2UpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdGhpcy5jb25maWcucGFnaW5hdG9yLmluaXRpYWxQYWdlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgc2VhcmNoKGV2ZW50OiB7IHRhcmdldDogeyB2YWx1ZTogc3RyaW5nIH0gfSB8IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlucHV0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWU7XHJcbiAgICB0aGlzLmNvbmZpZy5maWx0ZXIhLnNldHRpbmdzLnNlYXJjaElucHV0ID0gaW5wdXQ7XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5lbWl0KHsgLi4udGhpcy5maWx0ZXJzLCBpbnB1dCB9KTtcclxuICAgIHRoaXMudXBkYXRlUGFnaW5hdG9yKDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGlzcGxheUNvbHVtbnMoaW5pdGlhbCA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLmJhdGNoU2VsZWN0ZWRFbmFibGVkID0gdGhpcy5jb25maWcuYmF0Y2hDb25maWc/LmVuYWJsZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5jb25maWcuY29sdW1uU2VsZWN0Py5jb2x1bW5zID8/IFtdO1xyXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5jb25maWd1cmFibGVDb2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4ubm90Q29uZmlndXJhYmxlKTtcclxuXHJcbiAgICBpZiAodGhpcy5iYXRjaFNlbGVjdGVkRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5zLnB1c2godGhpcy5iYXRjaENvbHVtbk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghYWxsQ29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2FsU3RvcmFnZVZhbHVlID0gdGhpcy5sb2NhbFN0b3JhZ2VWYWx1ZSA/PyB7fTtcclxuICAgIGlmICghbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucykge1xyXG4gICAgICBsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgaWYgKGluaXRpYWwpIHtcclxuICAgICAgICBjb2x1bW4uc2VsZWN0ZWQgPSBsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zPy5bY29sdW1uLm5hbWVdID8/IGNvbHVtbi5zZWxlY3RlZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgIGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMhW2NvbHVtbi5uYW1lXSA9IGNvbHVtbi5zZWxlY3RlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbHVtbi5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaChjb2x1bW4ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1uU2VsZWN0QWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaCh0aGlzLmNvbHVtblNlbGVjdENvbHVtbk5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaW5pdGlhbCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZShsb2NhbFN0b3JhZ2VWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVGaWx0ZXJCYXIoKSB7XHJcbiAgICBjb25zdCBsb2NhbHN0b3JhZ2VPYmplY3QgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID8/IHt9O1xyXG4gICAgaWYgKCFsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyKSB7XHJcbiAgICAgIGxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSAhdGhpcy5maWx0ZXJCYXJWaXNpYmxlO1xyXG4gICAgbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlci52aXNpYmxlID0gdGhpcy5maWx0ZXJCYXJWaXNpYmxlO1xyXG4gICAgdGhpcy51cGRhdGVMb2NhbFN0b3JhZ2UobG9jYWxzdG9yYWdlT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIGZpbHRlcnNDaGFuZ2VkKGZpbHRlcnM6IEZpbHRlckJhckNoYW5nZUV2ZW50KSB7XHJcbiAgICB0aGlzLmZpbHRlcnMgPSB7IC4uLmZpbHRlcnMsIGlucHV0OiB0aGlzLmNvbmZpZy5maWx0ZXIhLnNldHRpbmdzLnNlYXJjaElucHV0ID8/ICcnIH07XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzLmZpbHRlcnM/LmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICBmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5maWx0ZXJCYXIucmVtb3ZlQWxsRmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0KCkge1xyXG4gICAgdGhpcy5kYXRhU291cmNlIS5jb25uZWN0KCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRlZC5lbWl0KGRhdGEpO1xyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5maWxlT3B0aW9ucykge1xyXG4gICAgICB0aGlzLmV4cG9ydFRvRmlsZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0VsZW1lbnRIaWdobGlnaHRlZChpeDogbnVtYmVyLCBlbGVtZW50OiBUKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzPy5zb21lKChoaWdobGlnaHRFbGVtZW50LCBoaWdobGlnaHRFbGVtZW50SXgpID0+IHRoaXMudHJhY2tCeUZuKGhpZ2hsaWdodEVsZW1lbnRJeCwgaGlnaGxpZ2h0RWxlbWVudCkgPT09IHRoaXMudHJhY2tCeUZuKGl4LCBlbGVtZW50KSk7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRFcnJvckVsZW1lbnQoaXg6IG51bWJlciwgZWxlbWVudDogVCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRFcnJvckVsZW1lbnRzPy5zb21lKChoaWdobGlnaHRFbGVtZW50LCBoaWdobGlnaHRFbGVtZW50SXgpID0+IHRoaXMudHJhY2tCeUZuKGhpZ2hsaWdodEVsZW1lbnRJeCwgaGlnaGxpZ2h0RWxlbWVudCkgPT09IHRoaXMudHJhY2tCeUZuKGl4LCBlbGVtZW50KSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gTWV0aG9kcyBmb3IgYmF0Y2ggc2VsZWN0aW9uXHJcbiAgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZT8uZGF0YS5sZW5ndGg7XHJcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVBbGxSb3dTZWxlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcclxuICAgICAgaWYgKHRoaXMuZGlzYWJsZVByZXNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAvLyBkZXNlbGVjdCBvbmx5IHRob3NlIGl0ZW1zIHdoaWNoIHdlcmUgbm90IGFscmVhZHkgcHJlc2VsZWN0ZWRcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5kZXNlbGVjdChcclxuICAgICAgICAgIC4uLnRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcihlbG0gPT4gIXRoaXMucHJlc2VsZWN0ZWRJdGVtcy5tYXAoZWxtID0+IGVsbSkuaW5jbHVkZXMoZWxtKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLm1hdFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdCguLi50aGlzLmRhdGFTb3VyY2U/LmRhdGEgPz8gW10pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRWxlbWVudFNlbGVjdGlvbihlbGVtZW50OiBUKSB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVNb3VzZURyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFggPSBldmVudC5wYWdlWCAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgdGhpcy5zdGFydFkgPSBldmVudC5wYWdlWSAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICB0aGlzLnNjcm9sbExlZnQgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHByZXZpb3VzIGFuaW1hdGlvbiBmcmFtZVxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY3JvbGxNb3ZlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVNb3VzZURyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoZWNrVGFibGVPdmVyZmxvdygpO1xyXG5cclxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2luZyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZm9yIHNtb290aGVyIHVwZGF0ZXNcclxuICAgIGlmICh0aGlzLnNjcm9sbE1vdmVtZW50ID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy50YWJsZU92ZXJmbG93KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB4ID0gZXZlbnQucGFnZVggLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICBjb25zdCB5ID0gZXZlbnQucGFnZVkgLSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xyXG5cclxuICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gbW92ZW1lbnRcclxuICAgICAgICBjb25zdCB3YWxrWCA9ICh4IC0gdGhpcy5zdGFydFgpICogMjtcclxuICAgICAgICBjb25zdCB3YWxrWSA9ICh5IC0gdGhpcy5zdGFydFkpICogMjtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRpbmcgc2Nyb2xsIHBvc2l0aW9uc1xyXG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0IC0gd2Fsa1g7XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wIC0gd2Fsa1k7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW91c2VVcCgpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNhYmxlTW91c2VEcmFnZ2luZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gY2FuY2VsaW5nIGFueSBwZW5kaW5nIGFuaW1hdGlvblxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgIT09IG51bGwpIHtcclxuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5zY3JvbGxNb3ZlbWVudCk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsTW92ZW1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFnaW5hdG9yQ2hhbmdlKGNoYW5nZTogUGFnZUV2ZW50KSB7XHJcbiAgICB0aGlzLnBhZ2luYXRvclVwZGF0ZS5lbWl0KGNoYW5nZSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGNoZWNrVGFibGVPdmVyZmxvdygpOiB2b2lkIHtcclxuICAgIC8vIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgd2Ugc2hvdWxkIGNoZWNrIG9uY2UgZm9yIHRhYmxlIG92ZXJmbG93XHJcbiAgICAvLyB3aGVuIHRoZXJlIHdhc250IG92ZXJmbG93LCBidXQgd2lkdGggb2YgdGhlIHRhYmxlIGJlY2FtZSBiaWdnZXIsIHRoZW4gd2UgYXJlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGVcclxuICAgIC8vIHNhbWUgZm9yIHdoZW4gdGhlcmUgd2FzIG92ZXJmbG93LCBidXQgc2l6ZSBvZiB0aGUgdGFibGUgaXMgc2FtZSBhcyBjb250YWluZXIsIHNvIG92ZXJmbG93IGlzIGdvbmUgYW5kIHdlIHJlc2V0aW5nIHRhYmxlT3ZlcmZsb3cgdmFyaWFibGUgYWdhaW5cclxuICAgIGlmICgodGhpcy5kYXRhU291cmNlPy5kYXRhLmxlbmd0aCAmJiB0aGlzLnRhYmxlT3ZlcmZsb3cgPT09IHVuZGVmaW5lZCkgfHxcclxuICAgICAgKCF0aGlzLnRhYmxlT3ZlcmZsb3cgJiYgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDwgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkgfHxcclxuICAgICAgKHRoaXMudGFibGVPdmVyZmxvdyAmJiB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPT09IHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIDwgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkge1xyXG4gICAgICAgIHRoaXMudGFibGVPdmVyZmxvdyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50YWJsZU92ZXJmbG93ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9GaWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zPy5zYXZlVG9GaWxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmlsZVN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZXh0ZW5zaW9uITogRXhwb3J0Rm9ybWF0O1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5leHBvcnQuZmlsZU9wdGlvbnMuZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgRXhwb3J0Rm9ybWF0LkNTVjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBleHRlbnNpb24gPSBFeHBvcnRGb3JtYXQuQ1NWO1xyXG4gICAgICAgIGZpbGVTdHJpbmcgPSBIdG1sRWxlbWVudFBhcnNlSGVscGVyLnRhYmxlQXNDc3YodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5pZ25vcmVBdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5maWxlTmFtZSk7XHJcbiAgICBTYXZlRmlsZUhlbHBlci5zYXZlRmlsZShmaWxlU3RyaW5nLCBgJHt0cmFuc2xhdGVkRmlsZU5hbWV9LiR7ZXh0ZW5zaW9ufWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMb2NhbFN0b3JhZ2UobmV3VmFsdWU6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5ICYmIG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHJlYWRGcm9tTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvY2FsU3RvcmFnZUtleSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0cmluZyA9IHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgY2F0Y2gge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKSB7XHJcbiAgICB0aGlzLmNvbHVtblNlbGVjdEFjdGl2ZSA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheUNvbHVtbnModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclZpc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlPy5maWx0ZXI/LnZpc2libGUgPz8gdGhpcy5jb25maWc/LmZpbHRlcj8udmlzaWJsZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9EYXRhUm93UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5ub0RhdGFSb3cpIHtcclxuICAgICAgdGhpcy5ub0RhdGFSb3dBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZyA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdztcclxuICAgICAgdGhpcy5ub0RhdGFSb3dDb25maWcuaWNvbiA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdz8uaWNvbiA/PyB0aGlzLm5vRGF0YVJvd0ljb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEV4cG9ydFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0QWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRGF0YVNvdXJjZSgpIHtcclxuICAgIGlmICghdGhpcy5jb25maWcuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLiNkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUPih0aGlzLmRhdGEoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGFTb3VyY2VEYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YSgpO1xyXG4gICAgaWYgKCFkYXRhIHx8ICF0aGlzLiNkYXRhU291cmNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzaG91bGRJbml0aWFsaXplUGFnaW5hdG9yID0gIXRoaXMuI2RhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XHJcbiAgICB0aGlzLiNkYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG5cclxuICAgIC8vIGlmIGRhdGEgaXMgYXN5bmMgbG9hZGVkLCBwYWdlIG5lZWRzIHRvIGJlIHNldCBvbiBmaXJzdCBsb2FkLlxyXG4gICAgaWYgKHNob3VsZEluaXRpYWxpemVQYWdpbmF0b3IpIHtcclxuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0b3IodGhpcy5jb25maWcucGFnaW5hdG9yPy5pbml0aWFsUGFnZSA/PyAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFnaW5hdG9yKHBhZ2VJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3MubHQtbWRdPVwiJ21vYmlsZSdcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMC43NXJlbVwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dC5sdC1tZD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwLmx0LW1kPVwiMC43NXJlbVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICBmeEZsZXhcclxuICAgICAgZnhMYXlvdXQubHQtbWQ9XCJjb2x1bW5cIlxyXG4gICAgICBmeExheW91dEdhcD1cIjAuNzVyZW1cIlxyXG4gICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgZnhMYXlvdXRBbGlnbi5sdC1tZD1cInN0YXJ0IHN0YXJ0XCJcclxuICAgICAgY2xhc3M9XCJhY3Rpb24tcm93XCJcclxuICAgID5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIGNsYXNzPVwiZXhwb3J0LWRhdGFcIlxyXG4gICAgICAgIG1hdC1zdHJva2VkLWJ1dHRvblxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeS1hY2NlbnQtZGFya2VyXCJcclxuICAgICAgICAqbmdJZj1cImV4cG9ydEFjdGl2ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImV4cG9ydCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5jbG91ZF9kb3dubG9hZDwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eyBcIk1VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRVhQT1JUXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiZmlsdGVyQWN0aXZlICYmIHNob3dGaWx0ZXJUb2dnbGVcIlxyXG4gICAgICAgIGZ4RmxleFxyXG4gICAgICAgIGZ4TGF5b3V0R2FwPVwiMC41cmVtXCJcclxuICAgICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIFtjbGFzcy5maWx0ZXItYWN0aXZlXT1cImZpbHRlckJhclZpc2libGVcIlxyXG4gICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyQmFyKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5maWx0ZXJfbGlzdDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPnt7IFwiTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5GSUxURVJfVE9HR0xFXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RmlsdGVyUmVzZXRcIiBjbGFzcz1cImNsZWFyLWZpbHRlcnMtd3JhcHBlclwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic2hvd1NlYXJjaFwiXHJcbiAgICAgIGZ4TGF5b3V0PVwicm93XCJcclxuICAgICAgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiXHJcbiAgICAgIGNsYXNzPVwid2lsZC1zZWFyY2gtd3JhcHBlclwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGNsYXNzPVwic2VhcmNoLWljb25cIlxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cImhpZGVTZWFyY2hUb29sdGlwID8gJycgOiAoc2VhcmNoVG9vbHRpcCB8IHRyYW5zbGF0ZSlcIlxyXG4gICAgICAgID5zZWFyY2g8L21hdC1pY29uXHJcbiAgICAgID5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgW3ZhbHVlXT1cImNvbmZpZy5maWx0ZXI/LnNldHRpbmdzPy5zZWFyY2hWYWx1ZSA/PyAnJ1wiXHJcbiAgICAgICAgI3dpbGRTZWFyY2hcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRpdGxlIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAoa2V5dXApPVwic2VhcmNoKCRldmVudClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoQ2xlYXJCdXR0b24gJiYgd2lsZFNlYXJjaC52YWx1ZVwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJ3aWxkLXNlYXJjaC1jbGVhci1idG5cIlxyXG4gICAgICAgIChjbGljayk9XCJ3aWxkU2VhcmNoLnZhbHVlID0gJyc7IHNlYXJjaCh7IHRhcmdldDogeyB2YWx1ZTogJycgfSB9KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthZGRpdGlvbmFsQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDx0bGQtZmlsdGVyLWJhclxyXG4gICAgKm5nSWY9XCJjb25maWcuZmlsdGVyICYmIGNvbmZpZy5maWx0ZXIuZW5hYmxlZFwiXHJcbiAgICAjZmlsdGVyQmFyXHJcbiAgICBbZmlsdGVyUm93VmlzaWJsZV09XCJmaWx0ZXJCYXJWaXNpYmxlXCJcclxuICAgIFtzZXR0aW5nc109XCJjb25maWcuZmlsdGVyLnNldHRpbmdzXCJcclxuICAgIChmaWx0ZXJCYXJDaGFuZ2UpPVwiZmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvdGxkLWZpbHRlci1iYXI+XHJcblxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltiYXRjaEFjdGlvbnNdXCI+PC9uZy1jb250ZW50PlxyXG5cclxuICBAaWYoY29uZmlnLnBhZ2luYXRvcj8uZW5hYmxlZCl7XHJcbiAgICBAbGV0IHBhZ2luYXRvckNvbmZpZyA9IGNvbmZpZy5wYWdpbmF0b3IhO1xyXG5cclxuICAgIDxtYXQtcGFnaW5hdG9yIFtoaWRlUGFnZVNpemVdPVwiIXBhZ2luYXRvckNvbmZpZy5zaG93UGFnZVNpemVcIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwicGFnaW5hdG9yQ29uZmlnLnNob3dGaXJzdExhc3RCdXR0b25zXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuUEFHSU5BVE9SX0xBQkVMJyB8IHRyYW5zbGF0ZVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnaW5hdG9yQ29uZmlnLnBhZ2VTaXplT3B0aW9ucyA/PyBbMTBdXCIgKHBhZ2UpPVwicGFnaW5hdG9yQ2hhbmdlKCRldmVudClcIj5cclxuICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICB9XHJcbiAgPGRpdlxyXG4gICAgI3RhYmxlQ29udGFpbmVyXHJcbiAgICBjbGFzcz1cInRhYmxlLW92ZXJmbG93XCJcclxuICAgIFtjbGFzcy50YWJsZS1zdGlja3ktaGVhZGVyXT1cImNvbmZpZz8uc3RpY2t5SGVhZGVyXCJcclxuICAgIFtjbGFzcy50YWJsZS1kcmFnYWJsZV09XCJ0YWJsZU92ZXJmbG93ICYmICFjb25maWc/LmRpc2FibGVNb3VzZURyYWdnaW5nXCJcclxuICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50KVwiXHJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoKVwiXHJcbiAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlVXAoKVwiXHJcbiAgICAobW91c2Vtb3ZlKT1cIm9uTW91c2VNb3ZlKCRldmVudClcIlxyXG4gID5cclxuICAgIDx0YWJsZVxyXG4gICAgICAjdGFibGVcclxuICAgICAgbWF0LXRhYmxlXHJcbiAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2UhXCJcclxuICAgICAgW3RyYWNrQnldPVwidHJhY2tCeUZuXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiYmF0Y2hDb2x1bW5OYW1lXCI+XHJcbiAgICAgICAgPHRoIGNsYXNzPVwicm93LXNlbGVjdFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBkaXNhYmxlLWV4cG9ydD5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuU0VMRUNUX0FMTCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29uZmlnLmJhdGNoQ29uZmlnIS5jaGVja0JveGVzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwibWF0U2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwibWF0U2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgY2xhc3M9XCJyb3ctc2VsZWN0XCJcclxuICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCJcclxuICAgICAgICAgIGRpc2FibGUtZXhwb3J0XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5TRUxFQ1QnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSB8fFxyXG4gICAgICAgICAgICAgIGhvdmVyZWRSb3cgPT09IGVsZW1lbnQgfHxcclxuICAgICAgICAgICAgICBtYXRTZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgY29uZmlnLmJhdGNoQ29uZmlnIS5jaGVja0JveGVzRGlzYWJsZWQgfHxcclxuICAgICAgICAgICAgICAocHJlc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyhlbGVtZW50KSAmJiBkaXNhYmxlUHJlc2VsZWN0ZWRJdGVtcylcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRWxlbWVudFNlbGVjdGlvbihlbGVtZW50KVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm1hdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8dHJcclxuICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5Q29sdW1uczsgc3RpY2t5OiBjb25maWc/LnN0aWNreUhlYWRlciA/PyBmYWxzZVwiXHJcbiAgICAgID48L3RyPlxyXG4gICAgICA8dHJcclxuICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGxldCBpbmRleCA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5Q29sdW1uc1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgY29uZmlnPy5yb3dDbGlja0NhbGxiYWNrICYmICghY29uZmlnLmRpc2FibGVSb3dDbGljayB8fCAhY29uZmlnPy5kaXNhYmxlUm93Q2xpY2socm93KSlcclxuICAgICAgICAgICAgPyBjb25maWc/LnJvd0NsaWNrQ2FsbGJhY2socm93KVxyXG4gICAgICAgICAgICA6IG51bGxcclxuICAgICAgICBcIlxyXG4gICAgICAgIChtb3VzZW92ZXIpPVwiaG92ZXJlZFJvdyA9IHJvd1wiXHJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZFJvdyA9IG51bGxcIlxyXG4gICAgICAgIFtjbGFzcy5yb3ctY2xpY2thYmxlXT1cIlxyXG4gICAgICAgICAgY29uZmlnPy5yb3dDbGlja0NhbGxiYWNrICYmICghY29uZmlnLmRpc2FibGVSb3dDbGljayB8fCAhY29uZmlnPy5kaXNhYmxlUm93Q2xpY2socm93KSlcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtjbGFzcy5oaWdobGlnaHQtZXJyb3JdPVwiaGlnaGxpZ2h0RXJyb3JFbGVtZW50KGluZGV4LCByb3cpXCJcclxuICAgICAgICBbY2xhc3MuaGlnaGxpZ2h0XT1cInJvdyA9PT0gaG92ZXJlZFJvdyB8fCBpc0VsZW1lbnRIaWdobGlnaHRlZChpbmRleCxyb3cpXCJcclxuICAgICAgPjwvdHI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uU2VsZWN0Q29sdW1uTmFtZVwiPlxyXG4gICAgICAgIDx0aCBjbGFzcz1cInJvdy1zZWxlY3RcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgZGlzYWJsZS1leHBvcnQ+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLXNlbGVjdG9yLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sdW1uLXNlbGVjdG9yXCJcclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiXHJcbiAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbHVtbk1lbnVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPm1vcmVfdmVydDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgY2xhc3M9XCJyb3ctc2VsZWN0XCJcclxuICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCJcclxuICAgICAgICAgIGRpc2FibGUtZXhwb3J0XHJcbiAgICAgICAgPjwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9EYXRhUm93QWN0aXZlXCI+XHJcbiAgICAgICAgPHRyICptYXROb0RhdGFSb3c+XHJcbiAgICAgICAgICA8IS0tIGFkZCByYW5kb20gbnVtYmVyIHRvIG1ha2Ugc3VyZSBpdCB0YWtlcyBmdWxsIHdpZHRoIC0tPlxyXG4gICAgICAgICAgPHRkIGNvbHNwYW49XCI5OVwiPlxyXG4gICAgICAgICAgICA8bGliLXN0YXR1cy1kaXNwbGF5IFtjb25maWddPVwibm9EYXRhUm93Q29uZmlnXCI+PC9saWItc3RhdHVzLWRpc3BsYXk+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC90YWJsZT5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bWF0LW1lbnUgI2NvbHVtbk1lbnU9XCJtYXRNZW51XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3QtbWVudVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb25maWd1cmFibGVDb2x1bW5zXCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJjb2x1bW4uc2VsZWN0ZWRcIj5cclxuICAgICAgICB7eyBjb2x1bW4uZGlzcGxheU5hbWUgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLXNlbGVjdC1zYXZlXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBtYXQtZmxhdC1idXR0b25cclxuICAgICAgICBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cInVwZGF0ZURpc3BsYXlDb2x1bW5zKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgXCJNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkNPTFVNTl9TRUxFQ1RfU0FWRVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+XHJcbiJdfQ==
|
|
687
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWEsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hNLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUvSCxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7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QTNCLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBQ0csd0JBQXdCO2tCQUFoQyxLQUFLO1lBQ08sU0FBUztrQkFBckIsS0FBSztZQUtHLDBCQUEwQjtrQkFBbEMsS0FBSztZQUNHLHVCQUF1QjtrQkFBL0IsS0FBSztZQUdJLGVBQWU7a0JBQXhCLE1BQU07WUFDRyxlQUFlO2tCQUF4QixNQUFNO1lBQ0csUUFBUTtrQkFBakIsTUFBTTtZQUNHLGVBQWU7a0JBQXhCLE1BQU07WUFJMkIsYUFBYTtrQkFBOUMsZUFBZTttQkFBQyxlQUFlO1lBQ21CLE9BQU87a0JBQXpELGVBQWU7bUJBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUNsQixVQUFVO2tCQUF4QyxlQUFlO21CQUFDLFlBQVk7WUFDRCxTQUFTO2tCQUFwQyxZQUFZO21CQUFDLFlBQVk7WUFFYSxLQUFLO2tCQUEzQyxTQUFTO21CQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDakIsSUFBSTtrQkFBdkIsU0FBUzttQkFBQyxPQUFPO1lBRVcsY0FBYztrQkFBMUMsU0FBUzttQkFBQyxnQkFBZ0I7WUFDSCxTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVc7WUFDRyxTQUFTO2tCQUFqQyxTQUFTO21CQUFDLFlBQVk7WUFJb0IsZUFBZTtrQkFBekQsU0FBUzttQkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOztrRkExQzlCLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgZWZmZWN0LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGlucHV0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRDb2x1bW5EZWYsIE1hdEhlYWRlclJvd0RlZiwgTWF0Tm9EYXRhUm93LCBNYXRSb3dEZWYsIE1hdFRhYmxlLCBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZpbHRlckJhckNvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlci1iYXInO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDaGFuZ2VFdmVudCB9IGZyb20gJy4uL2ZpbHRlci1iYXIvbW9kZWxzL2ZpbHRlci1iYXItY2hhbmdlLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgSHRtbEVsZW1lbnRQYXJzZUhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBTYXZlRmlsZUhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvc2F2ZS1maWxlLmhlbHBlcic7XHJcbmltcG9ydCB7IERPTVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFN0YXR1c0Rpc3BsYXlDb25maWcgfSBmcm9tICcuLi9zdGF0dXMtZGlzcGxheS9tb2RlbHMvc3RhdHVzLWRpc3BsYXktY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfSBmcm9tICcuL2NvbnN0YW50cy9kaXNhYmxlLWV4cG9ydC1hdHRyaWJ1dGUtbmFtZS5jb25zdCc7XHJcbmltcG9ydCB7IEV4cG9ydEZvcm1hdCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvbXVsdGktZnVuY3Rpb25hbC10YWJsZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZENvbHVtbkxvY2FsU3RvcmFnZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdGVkLWNvbHVtbi1sb2NhbC1zdG9yYWdlLWNvbmZpZy5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAndGxkLW11bHRpLWZ1bmN0aW9uYWwtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpRnVuY3Rpb25hbFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0IHtcclxuICByZWFkb25seSBtYXRTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VD4odHJ1ZSwgW10pO1xyXG5cclxuICAjZGF0YVNvdXJjZTogTWF0VGFibGVEYXRhU291cmNlPFQ+IHwgdW5kZWZpbmVkO1xyXG4gIGdldCBkYXRhU291cmNlKCk6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPiB7XHJcbiAgICByZXR1cm4gKHRoaXMuI2RhdGFTb3VyY2UgPz8gdGhpcy5jb25maWcuZGF0YVNvdXJjZSkhO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgY29uZmlnITogTXVsdGlGdW5jdGlvbmFsVGFibGVDb25maWc8VD47XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0ZWRFbGVtZW50cyE6IFRbXTtcclxuICBASW5wdXQoKSB0cmFja0J5Rm4hOiAoaXg6IG51bWJlciwgcm93OiBUKSA9PiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgQElucHV0KCkgaGlnaGxpZ2h0ZWRFcnJvckVsZW1lbnRzITogVFtdO1xyXG4gIEBJbnB1dCgpIHNldCBzZWxlY3Rpb24odmFsdWU6IFRbXSkge1xyXG4gICAgdGhpcy5tYXRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKC4uLih2YWx1ZSA/PyBbXSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gU2V0IHRoaXMgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gZGlzcGxheSBjaGVja2JveGVzIG9ubHkgb24gcm93IGhvdmVyLlxyXG4gIEBJbnB1dCgpIGlzUm93Q2hlY2tib3hBbHdheXNWaXNpYmxlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkaXNhYmxlUHJlc2VsZWN0ZWRJdGVtcyA9IGZhbHNlO1xyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0IHByb3BlcnRpZXNcclxuICBAT3V0cHV0KCkgZmlsdGVyQmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgcGFnaW5hdG9yVXBkYXRlOiBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBleHBvcnRlZDogRXZlbnRFbWl0dGVyPFRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLm1hdFNlbGVjdGlvbi5jaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKCgpID0+IHsgcmV0dXJuIHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkOyB9KSk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gUHJvcGVydGllcyBmb3IgbWF0IHRhYmxlIHdyYXBwZXJcclxuICBAQ29udGVudENoaWxkcmVuKE1hdEhlYWRlclJvd0RlZikgaGVhZGVyUm93RGVmcyE6IFF1ZXJ5TGlzdDxNYXRIZWFkZXJSb3dEZWY+O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0Um93RGVmLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIHJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPFQ+PjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdENvbHVtbkRlZikgY29sdW1uRGVmcyE6IFF1ZXJ5TGlzdDxNYXRDb2x1bW5EZWY+O1xyXG4gIEBDb250ZW50Q2hpbGQoTWF0Tm9EYXRhUm93KSBub0RhdGFSb3chOiBNYXROb0RhdGFSb3c7XHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIHRhYmxlITogTWF0VGFibGU8VD47XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGVDb250YWluZXInKSB0YWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlckJhcicpIGZpbHRlckJhciE6IEZpbHRlckJhckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHRhYmxlRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAvKiogVGhpcyBwcm9wZXJ0eSB3aWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBvbmx5IGlmIGNvbmZpZy5EYXRhU291cmNlIG5vdCBzZXQuICovXHJcbiAgZGF0YSA9IGlucHV0PFRbXT4oKTtcclxuICBkYXRhU291cmNlVXBkYXRlRWZmZWN0ID0gZWZmZWN0KCgpID0+IHsgdGhpcy51cGRhdGVEYXRhU291cmNlRGF0YSgpOyB9KVxyXG5cclxuICBwcmVzZWxlY3RlZEl0ZW1zITogVFtdO1xyXG5cclxuICBnZXQgaWdub3JlQXR0cmlidXRlTmFtZSgpIHsgcmV0dXJuIERJU0FCTEVfRVhQT1JUX0FUVFJJQlVURV9OQU1FIH1cclxuICBkaXNwbGF5Q29sdW1ucyE6IHN0cmluZ1tdO1xyXG5cclxuICBjb2x1bW5TZWxlY3RBY3RpdmUhOiBib29sZWFuO1xyXG4gIGV4cG9ydEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgbm9EYXRhUm93QWN0aXZlITogYm9vbGVhbjtcclxuXHJcbiAgZmlsdGVycyE6IEZpbHRlckJhckNoYW5nZUV2ZW50O1xyXG4gIGZpbHRlckJhclZpc2libGUhOiBib29sZWFuO1xyXG5cclxuICBoaWRlU2VhcmNoVG9vbHRpcCE6IGJvb2xlYW47XHJcbiAgc2hvd1NlYXJjaCE6IGJvb2xlYW47XHJcbiAgc2hvd1NlYXJjaENsZWFyQnV0dG9uITogYm9vbGVhbjtcclxuICBzZWFyY2hUaXRsZSE6IHN0cmluZztcclxuICBzZWFyY2hUb29sdGlwITogc3RyaW5nO1xyXG5cclxuICBub0RhdGFSb3dDb25maWchOiBTdGF0dXNEaXNwbGF5Q29uZmlnO1xyXG4gIG5vRGF0YVJvd0ljb24gPSBcIm1hbmFnZV9zZWFyY2hcIjtcclxuXHJcbiAgY29uZmlndXJhYmxlQ29sdW1ucyE6IENvbHVtbkNvbmZpZ1tdO1xyXG4gIGJhdGNoU2VsZWN0ZWRFbmFibGVkITogYm9vbGVhbjtcclxuXHJcbiAgLy8gaXMgdXNlZCBpbiBodG1sIHRvIGRpc3BsYXkgYmF0Y2ggY2hlY2tib3ggb24gaG92ZXJlZCByb3dcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGhvdmVyZWRSb3c6IGFueTtcclxuICBob3ZlcmVkUm93SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gcHJvcGVydGllcyBmb3Igb3ZlcmZsb3cgc2Nyb2xsaW5nIHdpdGggbW91c2UgY2xpY2tcclxuICB0YWJsZU92ZXJmbG93ITogYm9vbGVhbjtcclxuICBwcml2YXRlIHNjcm9sbE1vdmVtZW50ITogbnVtYmVyIHwgbnVsbDtcclxuICBwcml2YXRlIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIHN0YXJ0WCA9IDA7XHJcbiAgcHJpdmF0ZSBzdGFydFkgPSAwO1xyXG4gIHByaXZhdGUgc2Nyb2xsTGVmdCA9IDA7XHJcbiAgcHJpdmF0ZSBzY3JvbGxUb3AgPSAwO1xyXG5cclxuICBnZXQgZmlsdGVyQWN0aXZlKCkgeyByZXR1cm4gdGhpcy5jb25maWcuZmlsdGVyPy5lbmFibGVkOyB9XHJcbiAgZ2V0IHNob3dGaWx0ZXJUb2dnbGUoKSB7IHJldHVybiAhdGhpcy5jb25maWcuZmlsdGVyPy5oaWRlRmlsdGVyVG9nZ2xlOyB9XHJcblxyXG4gIGdldCBzaG93RmlsdGVyUmVzZXQoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzLmZpbHRlcnM/LmZpbmQoZmlsdGVyID0+IGZpbHRlci5zZWxlY3RlZFZhbHVlcz8ubGVuZ3RoKSB9XHJcblxyXG4gIHByaXZhdGUgbG9jYWxTdG9yYWdlVmFsdWUhOiBTZWxlY3RlZENvbHVtbkxvY2FsU3RvcmFnZUNvbmZpZztcclxuICByZWFkb25seSBiYXRjaENvbHVtbk5hbWUgPSBcImJhdGNoXCI7XHJcbiAgcmVhZG9ubHkgY29sdW1uU2VsZWN0Q29sdW1uTmFtZSA9IFwiY29sdW1uU2VsZWN0XCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZG9tU2VydmljZTogRE9NU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gIC8vI3JlZ2lvbiBBbmd1bGFyIGxpZmVjeWNsZSBob29rc1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVEYXRhU291cmNlKCk7XHJcbiAgICB0aGlzLnJlYWRGcm9tTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLnNldEZpbHRlclZpc2liaWxpdHkoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uU2VsZWN0UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5zZXRFeHBvcnRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnNldE5vRGF0YVJvd1Byb3BlcnRpZXMoKTtcclxuICAgIHRoaXMucHJlc2VsZWN0ZWRJdGVtcyA9IHRoaXMubWF0U2VsZWN0aW9uLnNlbGVjdGVkO1xyXG4gICAgdGhpcy5zZWFyY2hUb29sdGlwID0gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uc2VhcmNoVG9vbHRpcCA/PyAnRklMVEVSX0JBUi5TRUFSQ0hfVE9PTFRJUCc7XHJcbiAgICB0aGlzLnNlYXJjaFRpdGxlID0gdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uc2VhcmNoVGl0bGUgPz8gJ0ZJTFRFUl9CQVIuU0VBUkNIJztcclxuICAgIHRoaXMuc2hvd1NlYXJjaCA9ICF0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzPy5oaWRlU2VhcmNoO1xyXG4gICAgdGhpcy5zaG93U2VhcmNoQ2xlYXJCdXR0b24gPSB0aGlzLmNvbmZpZy5maWx0ZXI/LnNldHRpbmdzPy5zaG93U2VhcmNoQ2xlYXJCdXR0b24gPz8gdHJ1ZTtcclxuICAgIHRoaXMuaGlkZVNlYXJjaFRvb2x0aXAgPSAhdGhpcy5jb25maWcuZmlsdGVyPy5zZXR0aW5ncz8uaGlkZVRvb2x0aXA7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICB0aGlzLmNvbHVtbkRlZnMuZm9yRWFjaChjb2x1bW5EZWYgPT4gdGhpcy50YWJsZS5hZGRDb2x1bW5EZWYoY29sdW1uRGVmKSk7XHJcbiAgICB0aGlzLnJvd0RlZnMuZm9yRWFjaChyb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRSb3dEZWYocm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLmhlYWRlclJvd0RlZnMuZm9yRWFjaChoZWFkZXJSb3dEZWYgPT4gdGhpcy50YWJsZS5hZGRIZWFkZXJSb3dEZWYoaGVhZGVyUm93RGVmKSk7XHJcbiAgICB0aGlzLnRhYmxlLnNldE5vRGF0YVJvdyh0aGlzLm5vRGF0YVJvdyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcucGFnaW5hdG9yPy5pbml0aWFsUGFnZSkge1xyXG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmNvbmZpZy5wYWdpbmF0b3IuaW5pdGlhbFBhZ2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBzZWFyY2goZXZlbnQ6IHsgdGFyZ2V0OiB7IHZhbHVlOiBzdHJpbmcgfSB9IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpPy52YWx1ZTtcclxuICAgIHRoaXMuY29uZmlnLmZpbHRlciEuc2V0dGluZ3Muc2VhcmNoSW5wdXQgPSBpbnB1dDtcclxuICAgIHRoaXMuZmlsdGVyQmFyQ2hhbmdlLmVtaXQoeyAuLi50aGlzLmZpbHRlcnMsIGlucHV0IH0pO1xyXG4gICAgdGhpcy51cGRhdGVQYWdpbmF0b3IoMCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEaXNwbGF5Q29sdW1ucyhpbml0aWFsID0gZmFsc2UpIHtcclxuICAgIHRoaXMuYmF0Y2hTZWxlY3RlZEVuYWJsZWQgPSB0aGlzLmNvbmZpZy5iYXRjaENvbmZpZz8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmNvbmZpZy5jb2x1bW5TZWxlY3Q/LmNvbHVtbnMgPz8gW107XHJcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gW107XHJcbiAgICB0aGlzLmNvbmZpZ3VyYWJsZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5ub3RDb25maWd1cmFibGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmJhdGNoU2VsZWN0ZWRFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaCh0aGlzLmJhdGNoQ29sdW1uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhbGxDb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9jYWxTdG9yYWdlVmFsdWUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID8/IHt9O1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoaW5pdGlhbCkge1xyXG4gICAgICAgIGNvbHVtbi5zZWxlY3RlZCA9IGxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnM/Lltjb2x1bW4ubmFtZV0gPz8gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucyFbY29sdW1uLm5hbWVdID0gY29sdW1uLnNlbGVjdGVkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29sdW1uLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5wdXNoKGNvbHVtbi5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy5jb2x1bW5TZWxlY3RBY3RpdmUpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5wdXNoKHRoaXMuY29sdW1uU2VsZWN0Q29sdW1uTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpbml0aWFsKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKGxvY2FsU3RvcmFnZVZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlckJhcigpIHtcclxuICAgIGNvbnN0IGxvY2Fsc3RvcmFnZU9iamVjdCA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPz8ge307XHJcbiAgICBpZiAoIWxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIpIHtcclxuICAgICAgbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlciA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyQmFyVmlzaWJsZSA9ICF0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICBsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyLnZpc2libGUgPSB0aGlzLmZpbHRlckJhclZpc2libGU7XHJcbiAgICB0aGlzLnVwZGF0ZUxvY2FsU3RvcmFnZShsb2NhbHN0b3JhZ2VPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyc0NoYW5nZWQoZmlsdGVyczogRmlsdGVyQmFyQ2hhbmdlRXZlbnQpIHtcclxuICAgIHRoaXMuZmlsdGVycyA9IHsgLi4uZmlsdGVycywgaW5wdXQ6IHRoaXMuY29uZmlnLmZpbHRlciEuc2V0dGluZ3Muc2VhcmNoSW5wdXQgPz8gJycgfTtcclxuICAgIHRoaXMuZmlsdGVyQmFyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVycygpIHtcclxuICAgIHRoaXMuY29uZmlnLmZpbHRlcj8uc2V0dGluZ3MuZmlsdGVycz8uZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcbiAgICAgIGZpbHRlci5zZWxlY3RlZFZhbHVlcyA9IFtdO1xyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmZpbHRlckJhci5yZW1vdmVBbGxGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnQoKSB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UhLmNvbm5lY3QoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmV4cG9ydGVkLmVtaXQoZGF0YSk7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0VG9GaWxlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRWxlbWVudEhpZ2hsaWdodGVkKGl4OiBudW1iZXIsIGVsZW1lbnQ6IFQpIHtcclxuICAgIGxldCBpc0hvdmVyZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmhvdmVyZWRSb3cgJiYgdGhpcy5ob3ZlcmVkUm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpc0hvdmVyZWQgPSB0aGlzLnRyYWNrQnlGbih0aGlzLmhvdmVyZWRSb3dJbmRleCwgdGhpcy5ob3ZlcmVkUm93KSA9PT0gdGhpcy50cmFja0J5Rm4oaXgsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzSG92ZXJlZCB8fFxyXG4gICAgICB0aGlzLmhpZ2hsaWdodGVkRWxlbWVudHM/LnNvbWUoKGhpZ2hsaWdodEVsZW1lbnQsIGhpZ2hsaWdodEVsZW1lbnRJeCkgPT4gdGhpcy50cmFja0J5Rm4oaGlnaGxpZ2h0RWxlbWVudEl4LCBoaWdobGlnaHRFbGVtZW50KSA9PT0gdGhpcy50cmFja0J5Rm4oaXgsIGVsZW1lbnQpKTtcclxuICB9XHJcblxyXG4gIGhpZ2hsaWdodEVycm9yRWxlbWVudChpeDogbnVtYmVyLCBlbGVtZW50OiBUKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZEVycm9yRWxlbWVudHM/LnNvbWUoKGhpZ2hsaWdodEVsZW1lbnQsIGhpZ2hsaWdodEVsZW1lbnRJeCkgPT4gdGhpcy50cmFja0J5Rm4oaGlnaGxpZ2h0RWxlbWVudEl4LCBoaWdobGlnaHRFbGVtZW50KSA9PT0gdGhpcy50cmFja0J5Rm4oaXgsIGVsZW1lbnQpKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBNZXRob2RzIGZvciBiYXRjaCBzZWxlY3Rpb25cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlPy5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICBpZiAodGhpcy5kaXNhYmxlUHJlc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgIC8vIGRlc2VsZWN0IG9ubHkgdGhvc2UgaXRlbXMgd2hpY2ggd2VyZSBub3QgYWxyZWFkeSBwcmVzZWxlY3RlZFxyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0aW9uLmRlc2VsZWN0KFxyXG4gICAgICAgICAgLi4udGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKGVsbSA9PiAhdGhpcy5wcmVzZWxlY3RlZEl0ZW1zLm1hcChlbG0gPT4gZWxtKS5pbmNsdWRlcyhlbG0pKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWF0U2VsZWN0aW9uLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZT8uZGF0YSA/PyBbXSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQ6IFQpIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnRvZ2dsZShlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZU1vdXNlRHJhZ2dpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XHJcbiAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LnBhZ2VZIC0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcDtcclxuICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xyXG4gICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xyXG5cclxuICAgIC8vIGNhbmNlbGluZyBhbnkgcHJldmlvdXMgYW5pbWF0aW9uIGZyYW1lXHJcbiAgICBpZiAodGhpcy5zY3JvbGxNb3ZlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbE1vdmVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZU1vdXNlRHJhZ2dpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tUYWJsZU92ZXJmbG93KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSBmb3Igc21vb3RoZXIgdXBkYXRlc1xyXG4gICAgaWYgKHRoaXMuc2Nyb2xsTW92ZW1lbnQgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlT3ZlcmZsb3cpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSBldmVudC5wYWdlWCAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5wYWdlWSAtIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRUb3A7XHJcblxyXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtb3ZlbWVudFxyXG4gICAgICAgIGNvbnN0IHdhbGtYID0gKHggLSB0aGlzLnN0YXJ0WCkgKiAyO1xyXG4gICAgICAgIGNvbnN0IHdhbGtZID0gKHkgLSB0aGlzLnN0YXJ0WSkgKiAyO1xyXG5cclxuICAgICAgICAvLyB1cGRhdGluZyBzY3JvbGwgcG9zaXRpb25zXHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbExlZnQgLSB3YWxrWDtcclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxUb3AgLSB3YWxrWTtcclxuXHJcbiAgICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Nb3VzZVVwKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVNb3VzZURyYWdnaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBjYW5jZWxpbmcgYW55IHBlbmRpbmcgYW5pbWF0aW9uXHJcbiAgICBpZiAodGhpcy5zY3JvbGxNb3ZlbWVudCAhPT0gbnVsbCkge1xyXG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbE1vdmVtZW50KTtcclxuICAgICAgdGhpcy5zY3JvbGxNb3ZlbWVudCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0b3JDaGFuZ2UoY2hhbmdlOiBQYWdlRXZlbnQpIHtcclxuICAgIHRoaXMucGFnaW5hdG9yVXBkYXRlLmVtaXQoY2hhbmdlKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHJvd0hvdmVyZWQoaW5kZXg6IG51bWJlciwgcm93OiBUKSB7XHJcbiAgICB0aGlzLmhvdmVyZWRSb3cgPSByb3c7XHJcbiAgICB0aGlzLmhvdmVyZWRSb3dJbmRleCA9IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgcm93SG92ZXJMZWF2ZSgpIHtcclxuICAgIHRoaXMuaG92ZXJlZFJvdyA9IG51bGw7XHJcbiAgICB0aGlzLmhvdmVyZWRSb3dJbmRleCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tUYWJsZU92ZXJmbG93KCk6IHZvaWQge1xyXG4gICAgLy8gd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSB3ZSBzaG91bGQgY2hlY2sgb25jZSBmb3IgdGFibGUgb3ZlcmZsb3dcclxuICAgIC8vIHdoZW4gdGhlcmUgd2FzbnQgb3ZlcmZsb3csIGJ1dCB3aWR0aCBvZiB0aGUgdGFibGUgYmVjYW1lIGJpZ2dlciwgdGhlbiB3ZSBhcmUgcmVzZXRpbmcgdGFibGVPdmVyZmxvdyB2YXJpYWJsZVxyXG4gICAgLy8gc2FtZSBmb3Igd2hlbiB0aGVyZSB3YXMgb3ZlcmZsb3csIGJ1dCBzaXplIG9mIHRoZSB0YWJsZSBpcyBzYW1lIGFzIGNvbnRhaW5lciwgc28gb3ZlcmZsb3cgaXMgZ29uZSBhbmQgd2UgcmVzZXRpbmcgdGFibGVPdmVyZmxvdyB2YXJpYWJsZSBhZ2FpblxyXG4gICAgaWYgKCh0aGlzLmRhdGFTb3VyY2U/LmRhdGEubGVuZ3RoICYmIHRoaXMudGFibGVPdmVyZmxvdyA9PT0gdW5kZWZpbmVkKSB8fFxyXG4gICAgICAoIXRoaXMudGFibGVPdmVyZmxvdyAmJiB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPCB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB8fFxyXG4gICAgICAodGhpcy50YWJsZU92ZXJmbG93ICYmIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA9PT0gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPCB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZU92ZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRhYmxlT3ZlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb0ZpbGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmV4cG9ydD8uZmlsZU9wdGlvbnM/LnNhdmVUb0ZpbGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaWxlU3RyaW5nID0gXCJcIjtcclxuICAgIGxldCBleHRlbnNpb24hOiBFeHBvcnRGb3JtYXQ7XHJcbiAgICBzd2l0Y2ggKHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5mb3JtYXQpIHtcclxuICAgICAgY2FzZSBFeHBvcnRGb3JtYXQuQ1NWOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGV4dGVuc2lvbiA9IEV4cG9ydEZvcm1hdC5DU1Y7XHJcbiAgICAgICAgZmlsZVN0cmluZyA9IEh0bWxFbGVtZW50UGFyc2VIZWxwZXIudGFibGVBc0Nzdih0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmlnbm9yZUF0dHJpYnV0ZU5hbWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNsYXRlZEZpbGVOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcuZXhwb3J0LmZpbGVPcHRpb25zLmZpbGVOYW1lKTtcclxuICAgIFNhdmVGaWxlSGVscGVyLnNhdmVGaWxlKGZpbGVTdHJpbmcsIGAke3RyYW5zbGF0ZWRGaWxlTmFtZX0uJHtleHRlbnNpb259YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUxvY2FsU3RvcmFnZShuZXdWYWx1ZTogU2VsZWN0ZWRDb2x1bW5Mb2NhbFN0b3JhZ2VDb25maWcpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXkgJiYgbmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5kb21TZXJ2aWNlLmxvY2FsU3RvcmFnZT8uc2V0SXRlbSh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVhZEZyb21Mb2NhbFN0b3JhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxTdG9yYWdlU3RyaW5nID0gdGhpcy5kb21TZXJ2aWNlLmxvY2FsU3RvcmFnZT8uZ2V0SXRlbSh0aGlzLmNvbmZpZy5sb2NhbFN0b3JhZ2VLZXkpO1xyXG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxyXG4gICAgICBjYXRjaCB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29sdW1uU2VsZWN0UHJvcGVydGllcygpIHtcclxuICAgIHRoaXMuY29sdW1uU2VsZWN0QWN0aXZlID0gdGhpcy5jb25maWcuY29sdW1uU2VsZWN0Py5lbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVEaXNwbGF5Q29sdW1ucyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RmlsdGVyVmlzaWJpbGl0eSgpIHtcclxuICAgIHRoaXMuZmlsdGVyQmFyVmlzaWJsZSA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWU/LmZpbHRlcj8udmlzaWJsZSA/PyB0aGlzLmNvbmZpZz8uZmlsdGVyPy52aXNpYmxlID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXROb0RhdGFSb3dQcm9wZXJ0aWVzKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLm5vRGF0YVJvdykge1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMubm9EYXRhUm93Q29uZmlnID0gdGhpcy5jb25maWcubm9EYXRhUm93O1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZy5pY29uID0gdGhpcy5jb25maWcubm9EYXRhUm93Py5pY29uID8/IHRoaXMubm9EYXRhUm93SWNvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RXhwb3J0UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5leHBvcnQ/LmVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5leHBvcnRBY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEYXRhU291cmNlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuI2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFQ+KHRoaXMuZGF0YSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRGF0YVNvdXJjZURhdGEoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhKCk7XHJcbiAgICBpZiAoIWRhdGEgfHwgIXRoaXMuI2RhdGFTb3VyY2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNob3VsZEluaXRpYWxpemVQYWdpbmF0b3IgPSAhdGhpcy4jZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHRoaXMuI2RhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcblxyXG4gICAgLy8gaWYgZGF0YSBpcyBhc3luYyBsb2FkZWQsIHBhZ2UgbmVlZHMgdG8gYmUgc2V0IG9uIGZpcnN0IGxvYWQuXHJcbiAgICBpZiAoc2hvdWxkSW5pdGlhbGl6ZVBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRvcih0aGlzLmNvbmZpZy5wYWdpbmF0b3I/LmluaXRpYWxQYWdlID8/IDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0b3IocGFnZUluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzcy5sdC1tZF09XCInbW9iaWxlJ1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjc1cmVtXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0Lmx0LW1kPVwiY29sdW1uXCIgZnhMYXlvdXRHYXAubHQtbWQ9XCIwLjc1cmVtXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGZ4RmxleFxyXG4gICAgICBmeExheW91dC5sdC1tZD1cImNvbHVtblwiXHJcbiAgICAgIGZ4TGF5b3V0R2FwPVwiMC43NXJlbVwiXHJcbiAgICAgIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIlxyXG4gICAgICBmeExheW91dEFsaWduLmx0LW1kPVwic3RhcnQgc3RhcnRcIlxyXG4gICAgICBjbGFzcz1cImFjdGlvbi1yb3dcIlxyXG4gICAgPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJleHBvcnQtZGF0YVwiXHJcbiAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5LWFjY2VudC1kYXJrZXJcIlxyXG4gICAgICAgICpuZ0lmPVwiZXhwb3J0QWN0aXZlXCJcclxuICAgICAgICAoY2xpY2spPVwiZXhwb3J0KClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNsb3VkX2Rvd25sb2FkPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7IFwiTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5FWFBPUlRcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJmaWx0ZXJBY3RpdmUgJiYgc2hvd0ZpbHRlclRvZ2dsZVwiXHJcbiAgICAgICAgZnhGbGV4XHJcbiAgICAgICAgZnhMYXlvdXRHYXA9XCIwLjVyZW1cIlxyXG4gICAgICAgIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgW2NsYXNzLmZpbHRlci1hY3RpdmVdPVwiZmlsdGVyQmFyVmlzaWJsZVwiXHJcbiAgICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeS1hY2NlbnQtZGFya2VyXCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJCYXIoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmZpbHRlcl9saXN0PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4+e3sgXCJNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkZJTFRFUl9UT0dHTEVcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGaWx0ZXJSZXNldFwiIGNsYXNzPVwiY2xlYXItZmlsdGVycy13cmFwcGVyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzaG93U2VhcmNoXCJcclxuICAgICAgZnhMYXlvdXQ9XCJyb3dcIlxyXG4gICAgICBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCJcclxuICAgICAgY2xhc3M9XCJ3aWxkLXNlYXJjaC13cmFwcGVyXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgY2xhc3M9XCJzZWFyY2gtaWNvblwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiaGlkZVNlYXJjaFRvb2x0aXAgPyAnJyA6IChzZWFyY2hUb29sdGlwIHwgdHJhbnNsYXRlKVwiXHJcbiAgICAgICAgPnNlYXJjaDwvbWF0LWljb25cclxuICAgICAgPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBbdmFsdWVdPVwiY29uZmlnLmZpbHRlcj8uc2V0dGluZ3M/LnNlYXJjaFZhbHVlID8/ICcnXCJcclxuICAgICAgICAjd2lsZFNlYXJjaFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoVGl0bGUgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIChrZXl1cCk9XCJzZWFyY2goJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cInNob3dTZWFyY2hDbGVhckJ1dHRvbiAmJiB3aWxkU2VhcmNoLnZhbHVlXCJcclxuICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICBjbGFzcz1cIndpbGQtc2VhcmNoLWNsZWFyLWJ0blwiXHJcbiAgICAgICAgKGNsaWNrKT1cIndpbGRTZWFyY2gudmFsdWUgPSAnJzsgc2VhcmNoKHsgdGFyZ2V0OiB7IHZhbHVlOiAnJyB9IH0pXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FkZGl0aW9uYWxBY3Rpb25zXVwiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPHRsZC1maWx0ZXItYmFyXHJcbiAgICAqbmdJZj1cImNvbmZpZy5maWx0ZXIgJiYgY29uZmlnLmZpbHRlci5lbmFibGVkXCJcclxuICAgICNmaWx0ZXJCYXJcclxuICAgIFtmaWx0ZXJSb3dWaXNpYmxlXT1cImZpbHRlckJhclZpc2libGVcIlxyXG4gICAgW3NldHRpbmdzXT1cImNvbmZpZy5maWx0ZXIuc2V0dGluZ3NcIlxyXG4gICAgKGZpbHRlckJhckNoYW5nZSk9XCJmaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC90bGQtZmlsdGVyLWJhcj5cclxuXHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JhdGNoQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcblxyXG4gIEBpZihjb25maWcucGFnaW5hdG9yPy5lbmFibGVkKXtcclxuICAgIEBsZXQgcGFnaW5hdG9yQ29uZmlnID0gY29uZmlnLnBhZ2luYXRvciE7XHJcblxyXG4gICAgPG1hdC1wYWdpbmF0b3IgW2hpZGVQYWdlU2l6ZV09XCIhcGFnaW5hdG9yQ29uZmlnLnNob3dQYWdlU2l6ZVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJwYWdpbmF0b3JDb25maWcuc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5QQUdJTkFUT1JfTEFCRUwnIHwgdHJhbnNsYXRlXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0b3JDb25maWcucGFnZVNpemVPcHRpb25zID8/IFsxMF1cIiAocGFnZSk9XCJwYWdpbmF0b3JDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgPC9tYXQtcGFnaW5hdG9yPlxyXG4gIH1cclxuICA8ZGl2XHJcbiAgICAjdGFibGVDb250YWluZXJcclxuICAgIGNsYXNzPVwidGFibGUtb3ZlcmZsb3dcIlxyXG4gICAgW2NsYXNzLnRhYmxlLXN0aWNreS1oZWFkZXJdPVwiY29uZmlnPy5zdGlja3lIZWFkZXJcIlxyXG4gICAgW2NsYXNzLnRhYmxlLWRyYWdhYmxlXT1cInRhYmxlT3ZlcmZsb3cgJiYgIWNvbmZpZz8uZGlzYWJsZU1vdXNlRHJhZ2dpbmdcIlxyXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcclxuICAgIChtb3VzZXVwKT1cIm9uTW91c2VVcCgpXCJcclxuICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VVcCgpXCJcclxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXHJcbiAgPlxyXG4gICAgPHRhYmxlXHJcbiAgICAgICN0YWJsZVxyXG4gICAgICBtYXQtdGFibGVcclxuICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZSFcIlxyXG4gICAgICBbdHJhY2tCeV09XCJ0cmFja0J5Rm5cIlxyXG4gICAgPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJiYXRjaENvbHVtbk5hbWVcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb25maWcuYmF0Y2hDb25maWchLmNoZWNrQm94ZXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93U2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBjbGFzcz1cInJvdy1zZWxlY3RcIlxyXG4gICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIlxyXG4gICAgICAgICAgZGlzYWJsZS1leHBvcnRcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidNVUxUSV9GVU5DVElPTkFMX1RBQkxFLlNFTEVDVCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIGlzUm93Q2hlY2tib3hBbHdheXNWaXNpYmxlIHx8XHJcbiAgICAgICAgICAgICAgaG92ZXJlZFJvdyA9PT0gZWxlbWVudCB8fFxyXG4gICAgICAgICAgICAgIG1hdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICBjb25maWcuYmF0Y2hDb25maWchLmNoZWNrQm94ZXNEaXNhYmxlZCB8fFxyXG4gICAgICAgICAgICAgIChwcmVzZWxlY3RlZEl0ZW1zLmluY2x1ZGVzKGVsZW1lbnQpICYmIGRpc2FibGVQcmVzZWxlY3RlZEl0ZW1zKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQpXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwibWF0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIG1hdC1oZWFkZXItcm93XHJcbiAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXlDb2x1bW5zOyBzdGlja3k6IGNvbmZpZz8uc3RpY2t5SGVhZGVyID8/IGZhbHNlXCJcclxuICAgICAgPjwvdHI+XHJcbiAgICAgIDx0clxyXG4gICAgICAgIG1hdC1yb3dcclxuICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvdzsgbGV0IGluZGV4ID0gaW5kZXg7IGNvbHVtbnM6IGRpc3BsYXlDb2x1bW5zXCJcclxuICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICBjb25maWc/LnJvd0NsaWNrQ2FsbGJhY2sgJiYgKCFjb25maWcuZGlzYWJsZVJvd0NsaWNrIHx8ICFjb25maWc/LmRpc2FibGVSb3dDbGljayhyb3cpKVxyXG4gICAgICAgICAgICA/IGNvbmZpZz8ucm93Q2xpY2tDYWxsYmFjayhyb3cpXHJcbiAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKG1vdXNlb3Zlcik9XCJyb3dIb3ZlcmVkKGluZGV4LHJvdylcIlxyXG4gICAgICAgIChtb3VzZWxlYXZlKT1cInJvd0hvdmVyTGVhdmUoKVwiXHJcbiAgICAgICAgW2NsYXNzLnJvdy1jbGlja2FibGVdPVwiXHJcbiAgICAgICAgICBjb25maWc/LnJvd0NsaWNrQ2FsbGJhY2sgJiYgKCFjb25maWcuZGlzYWJsZVJvd0NsaWNrIHx8ICFjb25maWc/LmRpc2FibGVSb3dDbGljayhyb3cpKVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgW2NsYXNzLmhpZ2hsaWdodC1lcnJvcl09XCJoaWdobGlnaHRFcnJvckVsZW1lbnQoaW5kZXgsIHJvdylcIlxyXG4gICAgICAgIFtjbGFzcy5oaWdobGlnaHRdPVwiaXNFbGVtZW50SGlnaGxpZ2h0ZWQoaW5kZXgscm93KVwiXHJcbiAgICAgID48L3RyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblNlbGVjdENvbHVtbk5hbWVcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3Rvci13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbi1zZWxlY3RvclwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5LWFjY2VudC1kYXJrZXJcIlxyXG4gICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5tb3JlX3ZlcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIGNsYXNzPVwicm93LXNlbGVjdFwiXHJcbiAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiXHJcbiAgICAgICAgICBkaXNhYmxlLWV4cG9ydFxyXG4gICAgICAgID48L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YVJvd0FjdGl2ZVwiPlxyXG4gICAgICAgIDx0ciAqbWF0Tm9EYXRhUm93PlxyXG4gICAgICAgICAgPCEtLSBhZGQgcmFuZG9tIG51bWJlciB0byBtYWtlIHN1cmUgaXQgdGFrZXMgZnVsbCB3aWR0aCAtLT5cclxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiOTlcIj5cclxuICAgICAgICAgICAgPGxpYi1zdGF0dXMtZGlzcGxheSBbY29uZmlnXT1cIm5vRGF0YVJvd0NvbmZpZ1wiPjwvbGliLXN0YXR1cy1kaXNwbGF5PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG1hdC1tZW51ICNjb2x1bW5NZW51PVwibWF0TWVudVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4tc2VsZWN0LW1lbnVcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29uZmlndXJhYmxlQ29sdW1uc1wiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94IFsobmdNb2RlbCldPVwiY29sdW1uLnNlbGVjdGVkXCI+XHJcbiAgICAgICAge3sgY29sdW1uLmRpc3BsYXlOYW1lIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbi1zZWxlY3Qtc2F2ZVwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5LWFjY2VudC1kYXJrZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJ1cGRhdGVEaXNwbGF5Q29sdW1ucygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IFwiTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5DT0xVTU5fU0VMRUNUX1NBVkVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L21hdC1tZW51PlxyXG4iXX0=
|
|
@@ -47,11 +47,11 @@ export class ToastComponent {
|
|
|
47
47
|
} if (rf & 2) {
|
|
48
48
|
i0.ɵɵadvance();
|
|
49
49
|
i0.ɵɵrepeater(ctx.toasts);
|
|
50
|
-
} }, dependencies: [CommonModule, MatIconModule, i1.MatIcon, MatButtonModule, i2.MatIconButton, TranslateModule, i3.TranslatePipe], styles: [".toast-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;width:100%;position:
|
|
50
|
+
} }, dependencies: [CommonModule, MatIconModule, i1.MatIcon, MatButtonModule, i2.MatIconButton, TranslateModule, i3.TranslatePipe], styles: [".toast-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;width:100%;position:absolute;bottom:50px}.toast[_ngcontent-%COMP%]{max-width:fit-content;position:relative;display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:400;min-width:350px;padding:4px 4px 4px 16px;letter-spacing:.25px;line-height:20px;border-radius:4px;box-shadow:0 1px 3px #0000004d;box-shadow:0 4px 8px 3px #00000026;color:#feedee;background-color:#382e2f;animation:_ngcontent-%COMP%_slide-in .5s forwards}.toast[_ngcontent-%COMP%]:not(:first-of-type){margin-top:10px}.fade-out[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_fade-out .5s forwards}[_nghost-%COMP%] .mat-icon{color:#feedee}@keyframes _ngcontent-%COMP%_slide-in{0%{margin-bottom:-50px;opacity:0}to{margin-bottom:0;opacity:1}}@keyframes _ngcontent-%COMP%_fade-out{0%{opacity:1}to{opacity:0}}"] }); }
|
|
51
51
|
}
|
|
52
52
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ToastComponent, [{
|
|
53
53
|
type: Component,
|
|
54
|
-
args: [{ selector: 'lib-toast', standalone: true, imports: [CommonModule, MatIconModule, MatButtonModule, TranslateModule], template: "<div class=\"toast-container\">\r\n @for (toast of toasts; track toast.id) {\r\n <div class=\"toast\">\r\n <span>{{ toast.message | translate: toast?.localizationParams }}</span>\r\n <button mat-icon-button (click)=\"closeToast(toast.id)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".toast-container{display:flex;flex-direction:column;align-items:center;width:100%;position:
|
|
54
|
+
args: [{ selector: 'lib-toast', standalone: true, imports: [CommonModule, MatIconModule, MatButtonModule, TranslateModule], template: "<div class=\"toast-container\">\r\n @for (toast of toasts; track toast.id) {\r\n <div class=\"toast\">\r\n <span>{{ toast.message | translate: toast?.localizationParams }}</span>\r\n <button mat-icon-button (click)=\"closeToast(toast.id)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".toast-container{display:flex;flex-direction:column;align-items:center;width:100%;position:absolute;bottom:50px}.toast{max-width:fit-content;position:relative;display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:400;min-width:350px;padding:4px 4px 4px 16px;letter-spacing:.25px;line-height:20px;border-radius:4px;box-shadow:0 1px 3px #0000004d;box-shadow:0 4px 8px 3px #00000026;color:#feedee;background-color:#382e2f;animation:slide-in .5s forwards}.toast:not(:first-of-type){margin-top:10px}.fade-out{animation:fade-out .5s forwards}:host ::ng-deep .mat-icon{color:#feedee}@keyframes slide-in{0%{margin-bottom:-50px;opacity:0}to{margin-bottom:0;opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}\n"] }]
|
|
55
55
|
}], null, null); })();
|
|
56
56
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ToastComponent, { className: "ToastComponent", filePath: "lib\\toast\\toast.component.ts", lineNumber: 16 }); })();
|
|
57
57
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3RvYXN0L3RvYXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi90b2FzdC90b2FzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUUxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7OztJQ0hsRCxBQURGLDhCQUFtQixXQUNYO0lBQUEsWUFBMEQ7O0lBQUEsaUJBQU87SUFDdkUsaUNBQXVEO0lBQS9CLHFNQUFTLDhCQUFvQixLQUFDO0lBQ3BELGdDQUFVO0lBQUEscUJBQUs7SUFFbkIsQUFERSxBQURpQixpQkFBVyxFQUNuQixFQUNMOzs7SUFKRSxlQUEwRDtJQUExRCxtSEFBMEQ7O0FEWXBFLE1BQU0sT0FBTyxjQUFjO0lBUDNCO1FBUUUsV0FBTSxHQUFZLEVBQUUsQ0FBQztRQUVyQixXQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBVy9CO0lBWEMsTUFBTSxDQUF3QjtJQUU5QixRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDbEMsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsRUFBVTtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDOytHQWJVLGNBQWM7b0VBQWQsY0FBYztZQ2YzQiw4QkFBNkI7WUFDM0IsaUZBT0M7WUFDSCxpQkFBTTs7WUFSSixjQU9DO1lBUEQseUJBT0M7NEJER1MsWUFBWSxFQUFFLGFBQWEsY0FBRSxlQUFlLG9CQUFFLGVBQWU7O2lGQUk1RCxjQUFjO2NBUDFCLFNBQVM7MkJBQ0UsV0FBVyxjQUNULElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQzs7a0ZBSTdELGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRvYXN0IH0gZnJvbSAnLi9tb2RlbHMvdG9hc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuL3RvYXN0LXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdG9hc3QnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0QnV0dG9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90b2FzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RvYXN0LmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRvYXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICB0b2FzdHM6IFRvYXN0W10gPSBbXTtcclxuXHJcbiAgI3RvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy4jdG9hc3Qud2F0Y2hUb2FzdHMoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAodG9hc3RzKSA9PiAodGhpcy50b2FzdHMgPSB0b2FzdHMpLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVRvYXN0KGlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuI3RvYXN0LmNsb3NlVG9hc3QoaWQpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidG9hc3QtY29udGFpbmVyXCI+XHJcbiAgQGZvciAodG9hc3Qgb2YgdG9hc3RzOyB0cmFjayB0b2FzdC5pZCkge1xyXG4gIDxkaXYgY2xhc3M9XCJ0b2FzdFwiPlxyXG4gICAgPHNwYW4+e3sgdG9hc3QubWVzc2FnZSB8IHRyYW5zbGF0ZTogdG9hc3Q/LmxvY2FsaXphdGlvblBhcmFtcyB9fTwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjbG9zZVRvYXN0KHRvYXN0LmlkKVwiPlxyXG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG48L2Rpdj5cclxuIl19
|