@igo2/common 16.0.2 → 16.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/action/action.module.mjs +13 -14
- package/esm2022/lib/action/actionbar/actionbar-item.component.mjs +23 -103
- package/esm2022/lib/action/actionbar/actionbar.component.mjs +47 -178
- package/esm2022/lib/action/actionbar/actionbar.module.mjs +30 -31
- package/esm2022/lib/backdrop/backdrop.component.mjs +9 -14
- package/esm2022/lib/backdrop/backdrop.module.mjs +12 -13
- package/esm2022/lib/badge-icon/badge-icon.directive.mjs +23 -23
- package/esm2022/lib/badge-icon/badge-icon.module.mjs +12 -13
- package/esm2022/lib/clickout/clickout.directive.mjs +14 -16
- package/esm2022/lib/clickout/clickout.module.mjs +12 -13
- package/esm2022/lib/clone/clone.module.mjs +12 -13
- package/esm2022/lib/clone/clone.pipe.mjs +9 -9
- package/esm2022/lib/collapsible/collapse.directive.mjs +18 -20
- package/esm2022/lib/collapsible/collapsible.component.mjs +13 -31
- package/esm2022/lib/collapsible/collapsible.module.mjs +12 -13
- package/esm2022/lib/color-picker-form-field/color-picker-form-field.component.mjs +30 -58
- package/esm2022/lib/color-picker-form-field/color-picker-form-field.module.mjs +30 -31
- package/esm2022/lib/confirm-dialog/confirm-dialog.component.mjs +10 -34
- package/esm2022/lib/confirm-dialog/confirm-dialog.interface.mjs +2 -0
- package/esm2022/lib/confirm-dialog/confirm-dialog.module.mjs +13 -14
- package/esm2022/lib/confirm-dialog/confirm-dialog.service.mjs +19 -14
- package/esm2022/lib/confirm-dialog/index.mjs +2 -1
- package/esm2022/lib/context-menu/context-menu.directive.mjs +25 -27
- package/esm2022/lib/context-menu/context-menu.module.mjs +12 -13
- package/esm2022/lib/context-menu/long-press.directive.mjs +27 -29
- package/esm2022/lib/custom-html/custom-html.component.mjs +9 -14
- package/esm2022/lib/custom-html/custom-html.module.mjs +24 -25
- package/esm2022/lib/custom-html/custom-html.pipe.mjs +7 -7
- package/esm2022/lib/dom/dom.module.mjs +10 -10
- package/esm2022/lib/dom/dom.service.mjs +9 -9
- package/esm2022/lib/drag-drop/drag-drop.directive.mjs +27 -31
- package/esm2022/lib/drag-drop/drag-drop.module.mjs +12 -13
- package/esm2022/lib/dynamic-component/dynamic-component.module.mjs +12 -13
- package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +16 -25
- package/esm2022/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +12 -13
- package/esm2022/lib/dynamic-component/shared/dynamic-component.service.mjs +9 -9
- package/esm2022/lib/entity/entity-selector/entity-selector.component.mjs +25 -75
- package/esm2022/lib/entity/entity-selector/entity-selector.module.mjs +12 -13
- package/esm2022/lib/entity/entity-table/entity-table-row.directive.mjs +24 -26
- package/esm2022/lib/entity/entity-table/entity-table.component.mjs +42 -653
- package/esm2022/lib/entity/entity-table/entity-table.module.mjs +50 -51
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +20 -31
- package/esm2022/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +12 -13
- package/esm2022/lib/entity/entity.module.mjs +18 -19
- package/esm2022/lib/entity/index.mjs +1 -1
- package/esm2022/lib/flexible/flexible.component.mjs +26 -44
- package/esm2022/lib/flexible/flexible.module.mjs +12 -13
- package/esm2022/lib/form/form/form.component.mjs +18 -41
- package/esm2022/lib/form/form/form.module.mjs +12 -13
- package/esm2022/lib/form/form-field/form-field-select.component.mjs +23 -64
- package/esm2022/lib/form/form-field/form-field-text.component.mjs +48 -52
- package/esm2022/lib/form/form-field/form-field-textarea.component.mjs +15 -49
- package/esm2022/lib/form/form-field/form-field.component.mjs +9 -22
- package/esm2022/lib/form/form-field/form-field.module.mjs +51 -48
- package/esm2022/lib/form/form-group/form-group.component.mjs +11 -53
- package/esm2022/lib/form/form-group/form-group.module.mjs +20 -21
- package/esm2022/lib/form/form.module.mjs +13 -14
- package/esm2022/lib/form/shared/form-field.service.mjs +9 -9
- package/esm2022/lib/form/shared/form.interfaces.mjs +1 -1
- package/esm2022/lib/form/shared/form.service.mjs +9 -9
- package/esm2022/lib/form/shared/form.utils.mjs +3 -2
- package/esm2022/lib/form-dialog/form-dialog.component.mjs +80 -0
- package/esm2022/lib/form-dialog/form-dialog.interface.mjs +2 -0
- package/esm2022/lib/form-dialog/form-dialog.module.mjs +52 -0
- package/esm2022/lib/form-dialog/form-dialog.service.mjs +30 -0
- package/esm2022/lib/form-dialog/index.mjs +4 -0
- package/esm2022/lib/home-button/home-button.component.mjs +9 -17
- package/esm2022/lib/home-button/home-button.module.mjs +23 -24
- package/esm2022/lib/image/image-error.directive.mjs +16 -18
- package/esm2022/lib/image/image.module.mjs +12 -13
- package/esm2022/lib/image/secure-image.pipe.mjs +9 -9
- package/esm2022/lib/interactive-tour/interactive-tour.component.mjs +13 -60
- package/esm2022/lib/interactive-tour/interactive-tour.loader.mjs +6 -6
- package/esm2022/lib/interactive-tour/interactive-tour.module.mjs +23 -24
- package/esm2022/lib/interactive-tour/interactive-tour.service.mjs +9 -9
- package/esm2022/lib/json-dialog/json-dialog.component.mjs +7 -92
- package/esm2022/lib/json-dialog/json-dialog.module.mjs +13 -14
- package/esm2022/lib/json-dialog/json-dialog.service.mjs +7 -7
- package/esm2022/lib/keyvalue/keyvalue.module.mjs +12 -13
- package/esm2022/lib/keyvalue/keyvalue.pipe.mjs +9 -9
- package/esm2022/lib/list/list-item.directive.mjs +44 -46
- package/esm2022/lib/list/list.component.mjs +20 -37
- package/esm2022/lib/list/list.module.mjs +12 -13
- package/esm2022/lib/panel/panel.component.mjs +16 -46
- package/esm2022/lib/panel/panel.module.mjs +12 -13
- package/esm2022/lib/select-value-dialog/index.mjs +5 -0
- package/esm2022/lib/select-value-dialog/select-value-check-radio-dialog.component.mjs +87 -0
- package/esm2022/lib/select-value-dialog/select-value-dialog.enums.mjs +6 -0
- package/esm2022/lib/select-value-dialog/select-value-dialog.interface.mjs +2 -0
- package/esm2022/lib/select-value-dialog/select-value-dialog.module.mjs +59 -0
- package/esm2022/lib/select-value-dialog/select-value-dialog.service.mjs +29 -0
- package/esm2022/lib/sidenav/sidenav-shim.directive.mjs +20 -22
- package/esm2022/lib/sidenav/sidenav.module.mjs +12 -13
- package/esm2022/lib/spinner/spinner-activity.directive.mjs +11 -11
- package/esm2022/lib/spinner/spinner.component.mjs +9 -17
- package/esm2022/lib/spinner/spinner.module.mjs +12 -13
- package/esm2022/lib/stop-propagation/stop-drop-propagation.directive.mjs +12 -14
- package/esm2022/lib/stop-propagation/stop-propagation.directive.mjs +12 -14
- package/esm2022/lib/stop-propagation/stop-propagation.module.mjs +12 -13
- package/esm2022/lib/table/table.component.mjs +21 -199
- package/esm2022/lib/table/table.module.mjs +34 -35
- package/esm2022/lib/tool/shared/tool.service.mjs +9 -9
- package/esm2022/lib/tool/tool.module.mjs +12 -13
- package/esm2022/lib/tool/toolbox/toolbox.component.mjs +19 -54
- package/esm2022/lib/tool/toolbox/toolbox.module.mjs +12 -13
- package/esm2022/lib/widget/shared/widget.service.mjs +9 -9
- package/esm2022/lib/widget/widget-outlet/widget-outlet.component.mjs +17 -27
- package/esm2022/lib/widget/widget-outlet/widget-outlet.module.mjs +12 -13
- package/esm2022/lib/widget/widget.module.mjs +13 -14
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.component.mjs +13 -19
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +12 -13
- package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +11 -31
- package/esm2022/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +12 -13
- package/esm2022/lib/workspace/workspace.module.mjs +12 -13
- package/esm2022/public_api.mjs +5 -1
- package/fesm2022/igo2-common.mjs +2592 -3956
- package/fesm2022/igo2-common.mjs.map +1 -1
- package/lib/color-picker-form-field/color-picker-form-field.component.d.ts +7 -1
- package/lib/confirm-dialog/confirm-dialog.component.d.ts +3 -0
- package/lib/confirm-dialog/confirm-dialog.interface.d.ts +4 -0
- package/lib/confirm-dialog/confirm-dialog.service.d.ts +3 -4
- package/lib/confirm-dialog/index.d.ts +1 -0
- package/lib/form/form-field/form-field-select.component.d.ts +5 -1
- package/lib/form/form-field/form-field-text.component.d.ts +12 -2
- package/lib/form/form-field/form-field.module.d.ts +2 -1
- package/lib/form/shared/form.interfaces.d.ts +4 -0
- package/lib/form-dialog/form-dialog.component.d.ts +24 -0
- package/lib/form-dialog/form-dialog.interface.d.ts +18 -0
- package/lib/form-dialog/form-dialog.module.d.ts +16 -0
- package/lib/form-dialog/form-dialog.service.d.ts +13 -0
- package/lib/form-dialog/index.d.ts +3 -0
- package/lib/select-value-dialog/index.d.ts +4 -0
- package/lib/select-value-dialog/select-value-check-radio-dialog.component.d.ts +25 -0
- package/lib/select-value-dialog/select-value-dialog.enums.d.ts +4 -0
- package/lib/select-value-dialog/select-value-dialog.interface.d.ts +16 -0
- package/lib/select-value-dialog/select-value-dialog.module.d.ts +17 -0
- package/lib/select-value-dialog/select-value-dialog.service.d.ts +11 -0
- package/locale/en.common.json +15 -0
- package/locale/fr.common.json +15 -0
- package/package.json +21 -21
- package/public_api.d.ts +4 -0
- package/src/style/style.scss +1 -0
- /package/{common-theme.scss → src/common-theme.scss} +0 -0
- /package/{lib → src/lib}/action/action.theming.scss +0 -0
- /package/{lib → src/lib}/action/actionbar/actionbar-item.theming.scss +0 -0
- /package/{lib → src/lib}/action/actionbar/actionbar.theming.scss +0 -0
- /package/{lib → src/lib}/collapsible/collapsible.theming.scss +0 -0
- /package/{lib → src/lib}/entity/entity-selector/entity-selector.theming.scss +0 -0
- /package/{lib → src/lib}/entity/entity-table/entity-table.theming.scss +0 -0
- /package/{lib → src/lib}/entity/entity.theming.scss +0 -0
- /package/{lib → src/lib}/home-button/home-button.theming.scss +0 -0
- /package/{lib → src/lib}/interactive-tour/interactive-tour.theming.scss +0 -0
- /package/{lib → src/lib}/list/list.theming.scss +0 -0
- /package/{lib → src/lib}/panel/panel.theming.scss +0 -0
- /package/{lib → src/lib}/tool/tool.theming.scss +0 -0
- /package/{lib → src/lib}/tool/toolbox/toolbox.theming.scss +0 -0
- /package/{style → src/style}/partial/common-utils.scss +0 -0
- /package/{style → src/style}/partial/common.variables.scss +0 -0
|
@@ -33,588 +33,6 @@ import * as i19 from "./entity-table-row.directive";
|
|
|
33
33
|
import * as i20 from "../../custom-html/custom-html.pipe";
|
|
34
34
|
import * as i21 from "../../image/secure-image.pipe";
|
|
35
35
|
import * as i22 from "@ngx-translate/core";
|
|
36
|
-
function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
const _r10 = i0.ɵɵgetCurrentView();
|
|
38
|
-
i0.ɵɵelementContainerStart(0);
|
|
39
|
-
i0.ɵɵelementStart(1, "mat-checkbox", 11);
|
|
40
|
-
i0.ɵɵlistener("change", function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template_mat_checkbox_change_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.onToggleRows($event.checked)); });
|
|
41
|
-
i0.ɵɵelementEnd();
|
|
42
|
-
i0.ɵɵelementContainerEnd();
|
|
43
|
-
} if (rf & 2) {
|
|
44
|
-
const selectionState_r8 = ctx.ngIf;
|
|
45
|
-
const ctx_r7 = i0.ɵɵnextContext(3);
|
|
46
|
-
i0.ɵɵadvance(1);
|
|
47
|
-
i0.ɵɵproperty("checked", selectionState_r8 === ctx_r7.entityTableSelectionState.All)("indeterminate", selectionState_r8 === ctx_r7.entityTableSelectionState.Some);
|
|
48
|
-
} }
|
|
49
|
-
function EntityTableComponent_th_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
-
i0.ɵɵelementContainerStart(0);
|
|
51
|
-
i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_ng_container_1_Template, 2, 2, "ng-container", 10);
|
|
52
|
-
i0.ɵɵpipe(2, "async");
|
|
53
|
-
i0.ɵɵelementContainerEnd();
|
|
54
|
-
} if (rf & 2) {
|
|
55
|
-
const ctx_r6 = i0.ɵɵnextContext(2);
|
|
56
|
-
i0.ɵɵadvance(1);
|
|
57
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r6.selectionState$));
|
|
58
|
-
} }
|
|
59
|
-
function EntityTableComponent_th_3_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
-
i0.ɵɵelementStart(0, "th", 9);
|
|
61
|
-
i0.ɵɵtemplate(1, EntityTableComponent_th_3_ng_container_1_Template, 3, 3, "ng-container", 10);
|
|
62
|
-
i0.ɵɵelementEnd();
|
|
63
|
-
} if (rf & 2) {
|
|
64
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
65
|
-
i0.ɵɵadvance(1);
|
|
66
|
-
i0.ɵɵproperty("ngIf", ctx_r0.selectMany);
|
|
67
|
-
} }
|
|
68
|
-
function EntityTableComponent_td_4_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
-
const _r14 = i0.ɵɵgetCurrentView();
|
|
70
|
-
i0.ɵɵelementStart(0, "td", 12)(1, "mat-checkbox", 13);
|
|
71
|
-
i0.ɵɵlistener("mousedown", function EntityTableComponent_td_4_Template_mat_checkbox_mousedown_1_listener($event) { return $event.shiftKey ? $event.preventDefault() : null; })("click", function EntityTableComponent_td_4_Template_mat_checkbox_click_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const row_r11 = restoredCtx.$implicit; const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView($event.shiftKey ? ctx_r13.onShiftToggleRow(!ctx_r13.rowIsSelected(row_r11.record), row_r11.record, $event) : $event.stopPropagation()); })("change", function EntityTableComponent_td_4_Template_mat_checkbox_change_1_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r14); const row_r11 = restoredCtx.$implicit; const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.onToggleRow($event.checked, row_r11.record)); });
|
|
72
|
-
i0.ɵɵelementEnd()();
|
|
73
|
-
} if (rf & 2) {
|
|
74
|
-
const row_r11 = ctx.$implicit;
|
|
75
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
76
|
-
i0.ɵɵadvance(1);
|
|
77
|
-
i0.ɵɵproperty("checked", ctx_r1.rowIsSelected(row_r11.record));
|
|
78
|
-
} }
|
|
79
|
-
function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
-
i0.ɵɵelementStart(0, "th", 16);
|
|
81
|
-
i0.ɵɵtext(1);
|
|
82
|
-
i0.ɵɵelementEnd();
|
|
83
|
-
} if (rf & 2) {
|
|
84
|
-
const column_r16 = i0.ɵɵnextContext(2).$implicit;
|
|
85
|
-
i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
|
|
86
|
-
i0.ɵɵadvance(1);
|
|
87
|
-
i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
|
|
88
|
-
} }
|
|
89
|
-
function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
-
i0.ɵɵelementContainerStart(0);
|
|
91
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 2, "th", 15);
|
|
92
|
-
i0.ɵɵelementContainerEnd();
|
|
93
|
-
} }
|
|
94
|
-
function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
-
i0.ɵɵelementStart(0, "th", 18);
|
|
96
|
-
i0.ɵɵtext(1);
|
|
97
|
-
i0.ɵɵelementEnd();
|
|
98
|
-
} if (rf & 2) {
|
|
99
|
-
const column_r16 = i0.ɵɵnextContext(2).$implicit;
|
|
100
|
-
i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
|
|
101
|
-
i0.ɵɵadvance(1);
|
|
102
|
-
i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
|
|
103
|
-
} }
|
|
104
|
-
function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
-
i0.ɵɵelementContainerStart(0);
|
|
106
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 2, "th", 17);
|
|
107
|
-
i0.ɵɵelementContainerEnd();
|
|
108
|
-
} }
|
|
109
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
-
i0.ɵɵelementStart(0, "td", 22);
|
|
111
|
-
i0.ɵɵtext(1);
|
|
112
|
-
i0.ɵɵelementEnd();
|
|
113
|
-
} if (rf & 2) {
|
|
114
|
-
const row_r31 = i0.ɵɵnextContext().$implicit;
|
|
115
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
116
|
-
i0.ɵɵproperty("ngClass", row_r31.cellData[column_r16.name].class);
|
|
117
|
-
i0.ɵɵadvance(1);
|
|
118
|
-
i0.ɵɵtextInterpolate1(" ", row_r31.cellData[column_r16.name].value, " ");
|
|
119
|
-
} }
|
|
120
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
|
|
121
|
-
i0.ɵɵelement(0, "img", 26);
|
|
122
|
-
i0.ɵɵpipe(1, "async");
|
|
123
|
-
i0.ɵɵpipe(2, "secureImage");
|
|
124
|
-
} if (rf & 2) {
|
|
125
|
-
const row_r31 = i0.ɵɵnextContext(2).$implicit;
|
|
126
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
127
|
-
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, row_r31.cellData[column_r16.name].value)), i0.ɵɵsanitizeUrl);
|
|
128
|
-
} }
|
|
129
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
130
|
-
i0.ɵɵelementStart(0, "span");
|
|
131
|
-
i0.ɵɵtext(1);
|
|
132
|
-
i0.ɵɵpipe(2, "translate");
|
|
133
|
-
i0.ɵɵelementEnd();
|
|
134
|
-
} if (rf & 2) {
|
|
135
|
-
i0.ɵɵadvance(1);
|
|
136
|
-
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
|
|
137
|
-
} }
|
|
138
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
-
i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
|
|
140
|
-
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
|
|
141
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
|
|
142
|
-
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
|
|
143
|
-
i0.ɵɵelementEnd()();
|
|
144
|
-
} if (rf & 2) {
|
|
145
|
-
const _r38 = i0.ɵɵreference(4);
|
|
146
|
-
const row_r31 = i0.ɵɵnextContext().$implicit;
|
|
147
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
148
|
-
i0.ɵɵproperty("ngClass", row_r31.cellData[column_r16.name].class);
|
|
149
|
-
i0.ɵɵadvance(1);
|
|
150
|
-
i0.ɵɵpropertyInterpolate("href", row_r31.cellData[column_r16.name].value, i0.ɵɵsanitizeUrl);
|
|
151
|
-
i0.ɵɵadvance(1);
|
|
152
|
-
i0.ɵɵproperty("ngIf", row_r31.cellData[column_r16.name].isImg)("ngIfElse", _r38);
|
|
153
|
-
} }
|
|
154
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
155
|
-
i0.ɵɵelementContainerStart(0);
|
|
156
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 20);
|
|
157
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 21, i0.ɵɵtemplateRefExtractor);
|
|
158
|
-
i0.ɵɵelementContainerEnd();
|
|
159
|
-
} if (rf & 2) {
|
|
160
|
-
const row_r31 = ctx.$implicit;
|
|
161
|
-
const _r33 = i0.ɵɵreference(3);
|
|
162
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
163
|
-
i0.ɵɵadvance(1);
|
|
164
|
-
i0.ɵɵproperty("ngIf", !row_r31.cellData[column_r16.name].isUrl)("ngIfElse", _r33);
|
|
165
|
-
} }
|
|
166
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
167
|
-
i0.ɵɵelementContainerStart(0);
|
|
168
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
169
|
-
i0.ɵɵelementContainerEnd();
|
|
170
|
-
} }
|
|
171
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
172
|
-
i0.ɵɵelement(0, "td", 29);
|
|
173
|
-
} if (rf & 2) {
|
|
174
|
-
const row_r47 = i0.ɵɵnextContext().$implicit;
|
|
175
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
176
|
-
i0.ɵɵproperty("ngClass", row_r47.cellData[column_r16.name].class)("innerHTML", row_r47.cellData[column_r16.name].value, i0.ɵɵsanitizeHtml);
|
|
177
|
-
} }
|
|
178
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template(rf, ctx) { if (rf & 1) {
|
|
179
|
-
i0.ɵɵelement(0, "img", 26);
|
|
180
|
-
i0.ɵɵpipe(1, "async");
|
|
181
|
-
i0.ɵɵpipe(2, "secureImage");
|
|
182
|
-
} if (rf & 2) {
|
|
183
|
-
const row_r47 = i0.ɵɵnextContext(2).$implicit;
|
|
184
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
185
|
-
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, row_r47.cellData[column_r16.name].value)), i0.ɵɵsanitizeUrl);
|
|
186
|
-
} }
|
|
187
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
188
|
-
i0.ɵɵelementStart(0, "span");
|
|
189
|
-
i0.ɵɵtext(1);
|
|
190
|
-
i0.ɵɵpipe(2, "translate");
|
|
191
|
-
i0.ɵɵelementEnd();
|
|
192
|
-
} if (rf & 2) {
|
|
193
|
-
i0.ɵɵadvance(1);
|
|
194
|
-
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
|
|
195
|
-
} }
|
|
196
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
197
|
-
i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
|
|
198
|
-
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
|
|
199
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_img_2_Template, 3, 5, "img", 24);
|
|
200
|
-
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
|
|
201
|
-
i0.ɵɵelementEnd()();
|
|
202
|
-
} if (rf & 2) {
|
|
203
|
-
const _r54 = i0.ɵɵreference(4);
|
|
204
|
-
const row_r47 = i0.ɵɵnextContext().$implicit;
|
|
205
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
206
|
-
i0.ɵɵproperty("ngClass", row_r47.cellData[column_r16.name].class);
|
|
207
|
-
i0.ɵɵadvance(1);
|
|
208
|
-
i0.ɵɵpropertyInterpolate("href", row_r47.cellData[column_r16.name].value, i0.ɵɵsanitizeUrl);
|
|
209
|
-
i0.ɵɵadvance(1);
|
|
210
|
-
i0.ɵɵproperty("ngIf", row_r47.cellData[column_r16.name].isImg)("ngIfElse", _r54);
|
|
211
|
-
} }
|
|
212
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
213
|
-
i0.ɵɵelementContainerStart(0);
|
|
214
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 27);
|
|
215
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template, 5, 4, "ng-template", null, 28, i0.ɵɵtemplateRefExtractor);
|
|
216
|
-
i0.ɵɵelementContainerEnd();
|
|
217
|
-
} if (rf & 2) {
|
|
218
|
-
const row_r47 = ctx.$implicit;
|
|
219
|
-
const _r49 = i0.ɵɵreference(3);
|
|
220
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
221
|
-
i0.ɵɵadvance(1);
|
|
222
|
-
i0.ɵɵproperty("ngIf", !row_r47.cellData[column_r16.name].isUrl)("ngIfElse", _r49);
|
|
223
|
-
} }
|
|
224
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
225
|
-
i0.ɵɵelementContainerStart(0);
|
|
226
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
227
|
-
i0.ɵɵelementContainerEnd();
|
|
228
|
-
} }
|
|
229
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
230
|
-
const _r79 = i0.ɵɵgetCurrentView();
|
|
231
|
-
i0.ɵɵelementStart(0, "div", 43);
|
|
232
|
-
i0.ɵɵelement(1, "mat-datepicker-toggle", 44);
|
|
233
|
-
i0.ɵɵelementStart(2, "input", 45);
|
|
234
|
-
i0.ɵɵlistener("dateChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template_input_dateChange_2_listener($event) { i0.ɵɵrestoreView(_r79); const row_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r77 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r77.onDateChange(column_r16.name, row_r63.record, $event)); });
|
|
235
|
-
i0.ɵɵelementEnd();
|
|
236
|
-
i0.ɵɵelement(3, "mat-datepicker", null, 46);
|
|
237
|
-
i0.ɵɵelementEnd();
|
|
238
|
-
} if (rf & 2) {
|
|
239
|
-
const _r76 = i0.ɵɵreference(4);
|
|
240
|
-
const row_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
241
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
242
|
-
i0.ɵɵadvance(1);
|
|
243
|
-
i0.ɵɵproperty("for", _r76);
|
|
244
|
-
i0.ɵɵadvance(1);
|
|
245
|
-
i0.ɵɵpropertyInterpolate("value", row_r63.cellData[column_r16.name].value);
|
|
246
|
-
i0.ɵɵproperty("matDatepicker", _r76)("formControlName", column_r16.name);
|
|
247
|
-
} }
|
|
248
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template(rf, ctx) { if (rf & 1) {
|
|
249
|
-
const _r85 = i0.ɵɵgetCurrentView();
|
|
250
|
-
i0.ɵɵelementStart(0, "input", 47);
|
|
251
|
-
i0.ɵɵlistener("focus", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_focus_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onFocus($event)); })("keypress", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_keypress_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onChange($event)); })("blur", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template_input_blur_0_listener($event) { i0.ɵɵrestoreView(_r85); const column_r16 = i0.ɵɵnextContext(5).$implicit; return i0.ɵɵresetView(column_r16.onBlur($event)); });
|
|
252
|
-
i0.ɵɵelementEnd();
|
|
253
|
-
} if (rf & 2) {
|
|
254
|
-
const column_r16 = i0.ɵɵnextContext(5).$implicit;
|
|
255
|
-
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
256
|
-
} }
|
|
257
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template(rf, ctx) { if (rf & 1) {
|
|
258
|
-
const _r93 = i0.ɵɵgetCurrentView();
|
|
259
|
-
i0.ɵɵelementStart(0, "input", 48);
|
|
260
|
-
i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r93); const row_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r91 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r91.onValueChange(column_r16.name, row_r63.record, $event)); });
|
|
261
|
-
i0.ɵɵelementEnd();
|
|
262
|
-
} if (rf & 2) {
|
|
263
|
-
const row_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
264
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
265
|
-
const ctx_r69 = i0.ɵɵnextContext();
|
|
266
|
-
i0.ɵɵpropertyInterpolate("step", column_r16.step);
|
|
267
|
-
i0.ɵɵpropertyInterpolate("value", row_r63.cellData[column_r16.name].value);
|
|
268
|
-
i0.ɵɵpropertyInterpolate("readonly", ctx_r69.getValidationAttributeValue(column_r16, "readonly"));
|
|
269
|
-
i0.ɵɵpropertyInterpolate("required", ctx_r69.getValidationAttributeValue(column_r16, "mandatory"));
|
|
270
|
-
i0.ɵɵpropertyInterpolate("min", ctx_r69.getValidationAttributeValue(column_r16, "minValue"));
|
|
271
|
-
i0.ɵɵpropertyInterpolate("max", ctx_r69.getValidationAttributeValue(column_r16, "maxValue"));
|
|
272
|
-
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
273
|
-
} }
|
|
274
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template(rf, ctx) { if (rf & 1) {
|
|
275
|
-
const _r99 = i0.ɵɵgetCurrentView();
|
|
276
|
-
i0.ɵɵelementStart(0, "input", 49);
|
|
277
|
-
i0.ɵɵlistener("input", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r99); const row_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r97 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r97.onValueChange(column_r16.name, row_r63.record, $event)); });
|
|
278
|
-
i0.ɵɵelementEnd();
|
|
279
|
-
} if (rf & 2) {
|
|
280
|
-
const row_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
281
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
282
|
-
const ctx_r70 = i0.ɵɵnextContext();
|
|
283
|
-
i0.ɵɵpropertyInterpolate("value", row_r63.cellData[column_r16.name].value);
|
|
284
|
-
i0.ɵɵpropertyInterpolate("readonly", ctx_r70.getValidationAttributeValue(column_r16, "readonly"));
|
|
285
|
-
i0.ɵɵpropertyInterpolate("required", ctx_r70.getValidationAttributeValue(column_r16, "mandatory"));
|
|
286
|
-
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
287
|
-
} }
|
|
288
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
-
const _r105 = i0.ɵɵgetCurrentView();
|
|
290
|
-
i0.ɵɵelementStart(0, "mat-checkbox", 50);
|
|
291
|
-
i0.ɵɵlistener("change", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r105); const row_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r103 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r103.onBooleanValueChange(column_r16.name, row_r63.record, $event)); });
|
|
292
|
-
i0.ɵɵelementEnd();
|
|
293
|
-
} if (rf & 2) {
|
|
294
|
-
const row_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
295
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
296
|
-
i0.ɵɵproperty("formControlName", column_r16.name)("checked", row_r63.cellData[column_r16.name].value);
|
|
297
|
-
} }
|
|
298
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
-
i0.ɵɵelementStart(0, "mat-option", 53);
|
|
300
|
-
i0.ɵɵtext(1);
|
|
301
|
-
i0.ɵɵelementEnd();
|
|
302
|
-
} if (rf & 2) {
|
|
303
|
-
const option_r110 = ctx.$implicit;
|
|
304
|
-
i0.ɵɵproperty("value", option_r110.id)("disabled", option_r110.disabled);
|
|
305
|
-
i0.ɵɵadvance(1);
|
|
306
|
-
i0.ɵɵtextInterpolate1(" ", option_r110.value, " ");
|
|
307
|
-
} }
|
|
308
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template(rf, ctx) { if (rf & 1) {
|
|
309
|
-
const _r113 = i0.ɵɵgetCurrentView();
|
|
310
|
-
i0.ɵɵelementStart(0, "mat-select", 51);
|
|
311
|
-
i0.ɵɵlistener("selectionChange", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template_mat_select_selectionChange_0_listener($event) { i0.ɵɵrestoreView(_r113); const row_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r111 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r111.onSelectValueChange(column_r16.name, row_r63.record, $event)); });
|
|
312
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_mat_option_1_Template, 2, 3, "mat-option", 52);
|
|
313
|
-
i0.ɵɵelementEnd();
|
|
314
|
-
} if (rf & 2) {
|
|
315
|
-
const row_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
316
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
317
|
-
const ctx_r72 = i0.ɵɵnextContext();
|
|
318
|
-
i0.ɵɵpropertyInterpolate("required", ctx_r72.getValidationAttributeValue(column_r16, "mandatory"));
|
|
319
|
-
i0.ɵɵproperty("formControlName", column_r16.name)("multiple", column_r16.multiple)("value", row_r63.cellData[column_r16.name].value);
|
|
320
|
-
i0.ɵɵadvance(1);
|
|
321
|
-
i0.ɵɵproperty("ngForOf", column_r16.domainValues);
|
|
322
|
-
} }
|
|
323
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template(rf, ctx) { if (rf & 1) {
|
|
324
|
-
i0.ɵɵelement(0, "input", 54);
|
|
325
|
-
} if (rf & 2) {
|
|
326
|
-
i0.ɵɵnextContext();
|
|
327
|
-
const _r74 = i0.ɵɵreference(9);
|
|
328
|
-
const row_r63 = i0.ɵɵnextContext().$implicit;
|
|
329
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
330
|
-
const ctx_r73 = i0.ɵɵnextContext();
|
|
331
|
-
i0.ɵɵpropertyInterpolate("required", ctx_r73.getValidationAttributeValue(column_r16, "mandatory"));
|
|
332
|
-
i0.ɵɵpropertyInterpolate("value", row_r63.cellData[column_r16.name].value);
|
|
333
|
-
i0.ɵɵpropertyInterpolate("readonly", ctx_r73.getValidationAttributeValue(column_r16, "readonly"));
|
|
334
|
-
i0.ɵɵproperty("formControlName", column_r16.name)("matAutocomplete", _r74);
|
|
335
|
-
} }
|
|
336
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template(rf, ctx) { if (rf & 1) {
|
|
337
|
-
i0.ɵɵelementStart(0, "mat-option", 55);
|
|
338
|
-
i0.ɵɵtext(1);
|
|
339
|
-
i0.ɵɵelementEnd();
|
|
340
|
-
} if (rf & 2) {
|
|
341
|
-
const option_r119 = ctx.$implicit;
|
|
342
|
-
i0.ɵɵproperty("value", option_r119.id);
|
|
343
|
-
i0.ɵɵadvance(1);
|
|
344
|
-
i0.ɵɵtextInterpolate1(" ", option_r119.value, " ");
|
|
345
|
-
} }
|
|
346
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
347
|
-
const _r122 = i0.ɵɵgetCurrentView();
|
|
348
|
-
i0.ɵɵelementStart(0, "td", 32);
|
|
349
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template, 5, 4, "div", 33);
|
|
350
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template, 1, 1, "input", 34);
|
|
351
|
-
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template, 1, 7, "input", 35);
|
|
352
|
-
i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template, 1, 4, "input", 36);
|
|
353
|
-
i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_checkbox_5_Template, 1, 2, "mat-checkbox", 37);
|
|
354
|
-
i0.ɵɵtemplate(6, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_select_6_Template, 2, 5, "mat-select", 38);
|
|
355
|
-
i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1, 5, "input", 39);
|
|
356
|
-
i0.ɵɵelementStart(8, "mat-autocomplete", 40, 41);
|
|
357
|
-
i0.ɵɵlistener("optionSelected", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template_mat_autocomplete_optionSelected_8_listener($event) { i0.ɵɵrestoreView(_r122); const row_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r120.onAutocompleteValueChange(column_r16, row_r63.record, $event)); });
|
|
358
|
-
i0.ɵɵtemplate(10, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_mat_option_10_Template, 2, 2, "mat-option", 42);
|
|
359
|
-
i0.ɵɵpipe(11, "async");
|
|
360
|
-
i0.ɵɵelementEnd()();
|
|
361
|
-
} if (rf & 2) {
|
|
362
|
-
const row_r63 = i0.ɵɵnextContext().$implicit;
|
|
363
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
364
|
-
const ctx_r64 = i0.ɵɵnextContext();
|
|
365
|
-
i0.ɵɵproperty("formGroup", ctx_r64.formGroup)("ngClass", row_r63.cellData[column_r16.name].class);
|
|
366
|
-
i0.ɵɵadvance(1);
|
|
367
|
-
i0.ɵɵproperty("ngIf", column_r16.type === "date");
|
|
368
|
-
i0.ɵɵadvance(1);
|
|
369
|
-
i0.ɵɵproperty("ngIf", column_r16.type === "time");
|
|
370
|
-
i0.ɵɵadvance(1);
|
|
371
|
-
i0.ɵɵproperty("ngIf", column_r16.type === "number");
|
|
372
|
-
i0.ɵɵadvance(1);
|
|
373
|
-
i0.ɵɵproperty("ngIf", !column_r16.type || column_r16.type === "string");
|
|
374
|
-
i0.ɵɵadvance(1);
|
|
375
|
-
i0.ɵɵproperty("ngIf", column_r16.type === "boolean");
|
|
376
|
-
i0.ɵɵadvance(1);
|
|
377
|
-
i0.ɵɵproperty("ngIf", column_r16.type === "list");
|
|
378
|
-
i0.ɵɵadvance(1);
|
|
379
|
-
i0.ɵɵproperty("ngIf", column_r16.type === "autocomplete");
|
|
380
|
-
i0.ɵɵadvance(3);
|
|
381
|
-
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions[column_r16.name]));
|
|
382
|
-
} }
|
|
383
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template(rf, ctx) { if (rf & 1) {
|
|
384
|
-
i0.ɵɵelement(0, "td", 29);
|
|
385
|
-
i0.ɵɵpipe(1, "sanitizeHtml");
|
|
386
|
-
} if (rf & 2) {
|
|
387
|
-
const row_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
388
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
389
|
-
i0.ɵɵproperty("ngClass", row_r63.cellData[column_r16.name].class)("innerHTML", i0.ɵɵpipeBind1(1, 2, row_r63.cellData[column_r16.name].value), i0.ɵɵsanitizeHtml);
|
|
390
|
-
} }
|
|
391
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template(rf, ctx) { if (rf & 1) {
|
|
392
|
-
i0.ɵɵelement(0, "img", 26);
|
|
393
|
-
i0.ɵɵpipe(1, "async");
|
|
394
|
-
i0.ɵɵpipe(2, "secureImage");
|
|
395
|
-
} if (rf & 2) {
|
|
396
|
-
const row_r63 = i0.ɵɵnextContext(3).$implicit;
|
|
397
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
398
|
-
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, row_r63.cellData[column_r16.name].value)), i0.ɵɵsanitizeUrl);
|
|
399
|
-
} }
|
|
400
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
401
|
-
i0.ɵɵelementStart(0, "span");
|
|
402
|
-
i0.ɵɵtext(1);
|
|
403
|
-
i0.ɵɵpipe(2, "translate");
|
|
404
|
-
i0.ɵɵelementEnd();
|
|
405
|
-
} if (rf & 2) {
|
|
406
|
-
i0.ɵɵadvance(1);
|
|
407
|
-
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
|
|
408
|
-
} }
|
|
409
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
410
|
-
i0.ɵɵelementStart(0, "td", 22)(1, "a", 23);
|
|
411
|
-
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template_a_click_1_listener($event) { return $event.stopPropagation(); });
|
|
412
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_img_2_Template, 3, 5, "img", 24);
|
|
413
|
-
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_ng_template_3_Template, 3, 3, "ng-template", null, 25, i0.ɵɵtemplateRefExtractor);
|
|
414
|
-
i0.ɵɵelementEnd()();
|
|
415
|
-
} if (rf & 2) {
|
|
416
|
-
const _r132 = i0.ɵɵreference(4);
|
|
417
|
-
const row_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
418
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
419
|
-
i0.ɵɵproperty("ngClass", row_r63.cellData[column_r16.name].class);
|
|
420
|
-
i0.ɵɵadvance(1);
|
|
421
|
-
i0.ɵɵpropertyInterpolate("href", row_r63.cellData[column_r16.name].value, i0.ɵɵsanitizeUrl);
|
|
422
|
-
i0.ɵɵadvance(1);
|
|
423
|
-
i0.ɵɵproperty("ngIf", row_r63.cellData[column_r16.name].isImg)("ngIfElse", _r132);
|
|
424
|
-
} }
|
|
425
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
426
|
-
i0.ɵɵtemplate(0, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_td_0_Template, 2, 4, "td", 27);
|
|
427
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_ng_template_1_Template, 5, 4, "ng-template", null, 56, i0.ɵɵtemplateRefExtractor);
|
|
428
|
-
} if (rf & 2) {
|
|
429
|
-
const _r127 = i0.ɵɵreference(2);
|
|
430
|
-
const row_r63 = i0.ɵɵnextContext().$implicit;
|
|
431
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
432
|
-
i0.ɵɵproperty("ngIf", !row_r63.cellData[column_r16.name].isUrl)("ngIfElse", _r127);
|
|
433
|
-
} }
|
|
434
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
435
|
-
i0.ɵɵelementContainerStart(0);
|
|
436
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 12, 12, "td", 30);
|
|
437
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template, 3, 2, "ng-template", null, 31, i0.ɵɵtemplateRefExtractor);
|
|
438
|
-
i0.ɵɵelementContainerEnd();
|
|
439
|
-
} if (rf & 2) {
|
|
440
|
-
const row_r63 = ctx.$implicit;
|
|
441
|
-
const _r65 = i0.ɵɵreference(3);
|
|
442
|
-
const ctx_r62 = i0.ɵɵnextContext(4);
|
|
443
|
-
i0.ɵɵadvance(1);
|
|
444
|
-
i0.ɵɵproperty("ngIf", ctx_r62.isEdition(row_r63.record))("ngIfElse", _r65);
|
|
445
|
-
} }
|
|
446
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
447
|
-
i0.ɵɵelementContainerStart(0);
|
|
448
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
449
|
-
i0.ɵɵelementContainerEnd();
|
|
450
|
-
} }
|
|
451
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template(rf, ctx) { if (rf & 1) {
|
|
452
|
-
const _r147 = i0.ɵɵgetCurrentView();
|
|
453
|
-
i0.ɵɵelementStart(0, "mat-icon", 60);
|
|
454
|
-
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template_mat_icon_click_0_listener($event) { i0.ɵɵrestoreView(_r147); const column_r16 = i0.ɵɵnextContext(4).$implicit; return i0.ɵɵresetView(column_r16.onClick($event)); });
|
|
455
|
-
i0.ɵɵelementEnd();
|
|
456
|
-
} if (rf & 2) {
|
|
457
|
-
const row_r142 = i0.ɵɵnextContext().$implicit;
|
|
458
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
459
|
-
i0.ɵɵpropertyInterpolate("svgIcon", row_r142.cellData[column_r16.name].value || column_r16.icon);
|
|
460
|
-
} }
|
|
461
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template(rf, ctx) { if (rf & 1) {
|
|
462
|
-
i0.ɵɵelement(0, "mat-icon", 61);
|
|
463
|
-
} if (rf & 2) {
|
|
464
|
-
const row_r142 = i0.ɵɵnextContext().$implicit;
|
|
465
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
466
|
-
i0.ɵɵpropertyInterpolate("svgIcon", row_r142.cellData[column_r16.name].value || column_r16.icon);
|
|
467
|
-
} }
|
|
468
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
469
|
-
i0.ɵɵelementStart(0, "td", 22);
|
|
470
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_1_Template, 1, 1, "mat-icon", 58);
|
|
471
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_mat_icon_2_Template, 1, 1, "mat-icon", 59);
|
|
472
|
-
i0.ɵɵelementEnd();
|
|
473
|
-
} if (rf & 2) {
|
|
474
|
-
const row_r142 = ctx.$implicit;
|
|
475
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
476
|
-
i0.ɵɵproperty("ngClass", row_r142.cellData[column_r16.name].class);
|
|
477
|
-
i0.ɵɵadvance(1);
|
|
478
|
-
i0.ɵɵproperty("ngIf", column_r16.onClick);
|
|
479
|
-
i0.ɵɵadvance(1);
|
|
480
|
-
i0.ɵɵproperty("ngIf", !column_r16.onClick);
|
|
481
|
-
} }
|
|
482
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
483
|
-
i0.ɵɵelementContainerStart(0);
|
|
484
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 3, 3, "td", 57);
|
|
485
|
-
i0.ɵɵelementContainerEnd();
|
|
486
|
-
} }
|
|
487
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
488
|
-
const _r162 = i0.ɵɵgetCurrentView();
|
|
489
|
-
i0.ɵɵelementStart(0, "button", 65);
|
|
490
|
-
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r162); const button_r156 = i0.ɵɵnextContext(2).$implicit; const row_r154 = i0.ɵɵnextContext().$implicit; const ctx_r160 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r160.onButtonClick(button_r156.click, row_r154.record)); });
|
|
491
|
-
i0.ɵɵelement(1, "mat-icon", 61);
|
|
492
|
-
i0.ɵɵelementEnd();
|
|
493
|
-
} if (rf & 2) {
|
|
494
|
-
const button_r156 = i0.ɵɵnextContext(2).$implicit;
|
|
495
|
-
i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
|
|
496
|
-
i0.ɵɵadvance(1);
|
|
497
|
-
i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
|
|
498
|
-
} }
|
|
499
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template(rf, ctx) { if (rf & 1) {
|
|
500
|
-
const _r167 = i0.ɵɵgetCurrentView();
|
|
501
|
-
i0.ɵɵelementStart(0, "button", 66);
|
|
502
|
-
i0.ɵɵlistener("mousedown", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template_button_mousedown_0_listener() { i0.ɵɵrestoreView(_r167); const button_r156 = i0.ɵɵnextContext(2).$implicit; const row_r154 = i0.ɵɵnextContext().$implicit; const ctx_r165 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r165.onButtonClick(button_r156.click, row_r154.record)); });
|
|
503
|
-
i0.ɵɵelement(1, "mat-icon", 61);
|
|
504
|
-
i0.ɵɵelementEnd();
|
|
505
|
-
} if (rf & 2) {
|
|
506
|
-
const button_r156 = i0.ɵɵnextContext(2).$implicit;
|
|
507
|
-
i0.ɵɵproperty("color", button_r156.color)("disabled", button_r156.disabled);
|
|
508
|
-
i0.ɵɵadvance(1);
|
|
509
|
-
i0.ɵɵpropertyInterpolate("svgIcon", button_r156.icon);
|
|
510
|
-
} }
|
|
511
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
512
|
-
i0.ɵɵelementContainerStart(0);
|
|
513
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_1_Template, 2, 3, "button", 63);
|
|
514
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_button_2_Template, 2, 3, "button", 64);
|
|
515
|
-
i0.ɵɵelementContainerEnd();
|
|
516
|
-
} if (rf & 2) {
|
|
517
|
-
const button_r156 = i0.ɵɵnextContext().$implicit;
|
|
518
|
-
i0.ɵɵadvance(1);
|
|
519
|
-
i0.ɵɵproperty("ngIf", button_r156.style === "mat-icon-button");
|
|
520
|
-
i0.ɵɵadvance(1);
|
|
521
|
-
i0.ɵɵproperty("ngIf", button_r156.style !== "mat-icon-button");
|
|
522
|
-
} }
|
|
523
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
524
|
-
i0.ɵɵelementStart(0, "span");
|
|
525
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_ng_container_1_Template, 3, 2, "ng-container", 10);
|
|
526
|
-
i0.ɵɵelementEnd();
|
|
527
|
-
} if (rf & 2) {
|
|
528
|
-
const button_r156 = ctx.$implicit;
|
|
529
|
-
const row_r154 = i0.ɵɵnextContext().$implicit;
|
|
530
|
-
const ctx_r155 = i0.ɵɵnextContext(4);
|
|
531
|
-
i0.ɵɵadvance(1);
|
|
532
|
-
i0.ɵɵproperty("ngIf", ctx_r155.isEdition(row_r154.record) === button_r156.editMode || button_r156.editMode === undefined);
|
|
533
|
-
} }
|
|
534
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
535
|
-
i0.ɵɵelementContainerStart(0);
|
|
536
|
-
i0.ɵɵelementStart(1, "td", 22);
|
|
537
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span", 62);
|
|
538
|
-
i0.ɵɵelementEnd();
|
|
539
|
-
i0.ɵɵelementContainerEnd();
|
|
540
|
-
} if (rf & 2) {
|
|
541
|
-
const row_r154 = ctx.$implicit;
|
|
542
|
-
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
543
|
-
i0.ɵɵadvance(1);
|
|
544
|
-
i0.ɵɵproperty("ngClass", row_r154.cellData[column_r16.name].class);
|
|
545
|
-
i0.ɵɵadvance(1);
|
|
546
|
-
i0.ɵɵproperty("ngForOf", row_r154.cellData[column_r16.name].value);
|
|
547
|
-
} }
|
|
548
|
-
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
549
|
-
i0.ɵɵelementContainerStart(0);
|
|
550
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template, 3, 2, "ng-container", 19);
|
|
551
|
-
i0.ɵɵelementContainerEnd();
|
|
552
|
-
} }
|
|
553
|
-
function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
554
|
-
i0.ɵɵelementContainerStart(0);
|
|
555
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template, 2, 0, "ng-container", 10);
|
|
556
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template, 2, 0, "ng-container", 10);
|
|
557
|
-
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template, 2, 0, "ng-container", 10);
|
|
558
|
-
i0.ɵɵtemplate(4, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template, 2, 0, "ng-container", 10);
|
|
559
|
-
i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template, 2, 0, "ng-container", 10);
|
|
560
|
-
i0.ɵɵelementContainerEnd();
|
|
561
|
-
} if (rf & 2) {
|
|
562
|
-
const columnRenderer_r24 = ctx.ngIf;
|
|
563
|
-
const ctx_r19 = i0.ɵɵnextContext(2);
|
|
564
|
-
i0.ɵɵadvance(1);
|
|
565
|
-
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Default);
|
|
566
|
-
i0.ɵɵadvance(1);
|
|
567
|
-
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.HTML);
|
|
568
|
-
i0.ɵɵadvance(1);
|
|
569
|
-
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.UnsanitizedHTML);
|
|
570
|
-
i0.ɵɵadvance(1);
|
|
571
|
-
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.Icon);
|
|
572
|
-
i0.ɵɵadvance(1);
|
|
573
|
-
i0.ɵɵproperty("ngIf", columnRenderer_r24 === ctx_r19.entityTableColumnRenderer.ButtonGroup);
|
|
574
|
-
} }
|
|
575
|
-
function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
576
|
-
i0.ɵɵelementContainerStart(0, 14);
|
|
577
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_Template, 2, 0, "ng-container", 10);
|
|
578
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_2_Template, 2, 0, "ng-container", 10);
|
|
579
|
-
i0.ɵɵtemplate(3, EntityTableComponent_ng_container_5_ng_container_3_Template, 6, 5, "ng-container", 10);
|
|
580
|
-
i0.ɵɵelementContainerEnd();
|
|
581
|
-
} if (rf & 2) {
|
|
582
|
-
const column_r16 = ctx.$implicit;
|
|
583
|
-
const ctx_r2 = i0.ɵɵnextContext();
|
|
584
|
-
i0.ɵɵproperty("matColumnDef", column_r16.name);
|
|
585
|
-
i0.ɵɵadvance(1);
|
|
586
|
-
i0.ɵɵproperty("ngIf", ctx_r2.columnIsSortable(column_r16));
|
|
587
|
-
i0.ɵɵadvance(1);
|
|
588
|
-
i0.ɵɵproperty("ngIf", !ctx_r2.columnIsSortable(column_r16));
|
|
589
|
-
i0.ɵɵadvance(1);
|
|
590
|
-
i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
|
|
591
|
-
} }
|
|
592
|
-
function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
|
|
593
|
-
i0.ɵɵelement(0, "tr", 67);
|
|
594
|
-
} if (rf & 2) {
|
|
595
|
-
const ctx_r3 = i0.ɵɵnextContext();
|
|
596
|
-
i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
|
|
597
|
-
} }
|
|
598
|
-
function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
|
|
599
|
-
const _r175 = i0.ɵɵgetCurrentView();
|
|
600
|
-
i0.ɵɵelementStart(0, "tr", 68);
|
|
601
|
-
i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const row_r173 = restoredCtx.$implicit; const ctx_r174 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r174.onRowSelect(row_r173.record)); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r175); const row_r173 = restoredCtx.$implicit; const ctx_r176 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r176.onRowClick(row_r173.record)); });
|
|
602
|
-
i0.ɵɵelementEnd();
|
|
603
|
-
} if (rf & 2) {
|
|
604
|
-
const row_r173 = ctx.$implicit;
|
|
605
|
-
const ctx_r4 = i0.ɵɵnextContext();
|
|
606
|
-
i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(row_r173.record))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(row_r173.record));
|
|
607
|
-
} }
|
|
608
|
-
function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
|
|
609
|
-
const _r178 = i0.ɵɵgetCurrentView();
|
|
610
|
-
i0.ɵɵelementStart(0, "igo-entity-table-paginator", 69);
|
|
611
|
-
i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r178); const ctx_r177 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r177.paginatorChange($event)); });
|
|
612
|
-
i0.ɵɵelementEnd();
|
|
613
|
-
} if (rf & 2) {
|
|
614
|
-
const ctx_r5 = i0.ɵɵnextContext();
|
|
615
|
-
i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
|
|
616
|
-
} }
|
|
617
|
-
const _c0 = function (a0) { return { height: a0 }; };
|
|
618
36
|
export class EntityTableComponent {
|
|
619
37
|
cdRef;
|
|
620
38
|
formBuilder;
|
|
@@ -1051,13 +469,9 @@ export class EntityTableComponent {
|
|
|
1051
469
|
if (this.selection === false) {
|
|
1052
470
|
return;
|
|
1053
471
|
}
|
|
1054
|
-
this.store.
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
.all()
|
|
1058
|
-
.map((record) => record.entity);
|
|
1059
|
-
this.entitySelectChange.emit({ added: [entities] });
|
|
1060
|
-
}
|
|
472
|
+
const entities = this.store.view.all();
|
|
473
|
+
this.entitySelectChange.emit({ added: [entities] });
|
|
474
|
+
this.store.state.updateMany(entities, { selected: toggle });
|
|
1061
475
|
}
|
|
1062
476
|
/**
|
|
1063
477
|
* When an entity is toggled, select or unselect it in the store. On select,
|
|
@@ -1386,68 +800,43 @@ export class EntityTableComponent {
|
|
|
1386
800
|
}
|
|
1387
801
|
return column;
|
|
1388
802
|
}
|
|
1389
|
-
static ɵfac =
|
|
1390
|
-
static ɵcmp =
|
|
1391
|
-
|
|
1392
|
-
]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 11, consts: [[1, "table-container", 3, "ngStyle"], ["id", "currentWorkspaceTable", "mat-table", "", "matSort", "", 3, "ngClass", "dataSource", "trackBy", "matSortChange"], ["matColumnDef", "selectionCheckbox", 1, "mat-cell-checkbox"], ["mat-header-cell", "", 4, "matHeaderCellDef"], ["mat-cell", "", 4, "matCellDef"], [3, "matColumnDef", 4, "ngFor", "ngForOf"], ["mat-header-row", "", 3, "ngClass", 4, "matHeaderRowDef", "matHeaderRowDefSticky"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click", 4, "matRowDef", "matRowDefColumns"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange", 4, "ngIf"], ["mat-header-cell", ""], [4, "ngIf"], [3, "checked", "indeterminate", "change"], ["mat-cell", ""], [3, "checked", "mousedown", "click", "change"], [3, "matColumnDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", "", 3, "matTooltip"], ["mat-header-cell", "", 3, "matTooltip", 4, "matHeaderCellDef"], ["mat-header-cell", "", 3, "matTooltip"], [4, "matCellDef"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "ngIf", "ngIfElse"], ["isAnUrlDefault", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["igoImageError", "", "width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["igoImageError", "", "width", "50", "heigth", "auto", 3, "src"], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", "innerHTML", 4, "ngIf", "ngIfElse"], ["isAnUrlHTML", ""], ["mat-cell", "", 1, "mat-cell-text", 3, "ngClass", "innerHTML"], ["mat-cell", "", "class", "mat-cell-text edition", 3, "formGroup", "ngClass", 4, "ngIf", "ngIfElse"], ["isUnsanitizedHTML", ""], ["mat-cell", "", 1, "mat-cell-text", "edition", 3, "formGroup", "ngClass"], ["class", "date-picker", 4, "ngIf"], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur", 4, "ngIf"], ["matInput", "", "type", "number", "class", "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input", 4, "ngIf"], [3, "formControlName", "checked", "change", 4, "ngIf"], [3, "required", "formControlName", "multiple", "value", "selectionChange", 4, "ngIf"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly", 4, "ngIf"], ["panelWidth", "430px", 3, "optionSelected"], ["auto", "matAutocomplete"], [3, "value", 4, "ngFor", "ngForOf"], [1, "date-picker"], ["matSuffix", "", 3, "for"], ["matInput", "", 3, "matDatepicker", "formControlName", "value", "dateChange"], ["picker", ""], ["matInput", "", "type", "time", "step", "900", 3, "formControlName", "focus", "keypress", "blur"], ["matInput", "", "type", "number", 1, "class_number_edition", 3, "formControlName", "step", "value", "readonly", "required", "min", "max", "input"], ["matInput", "", "type", "text", 3, "formControlName", "value", "readonly", "required", "input"], [3, "formControlName", "checked", "change"], [3, "required", "formControlName", "multiple", "value", "selectionChange"], [3, "value", "disabled", 4, "ngFor", "ngForOf"], [3, "value", "disabled"], ["matInput", "", "type", "text", 3, "formControlName", "matAutocomplete", "required", "value", "readonly"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click", 4, "ngIf"], [3, "svgIcon", 4, "ngIf"], [3, "svgIcon", "click"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown", 4, "ngIf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "disabled", "mousedown"], ["igoStopPropagation", "", "mat-mini-fab", "", 3, "color", "disabled", "mousedown"], ["mat-header-row", "", 3, "ngClass"], ["mat-row", "", "igoEntityTableRow", "", 3, "scrollBehavior", "ngClass", "selection", "selected", "select", "click"], [3, "store", "paginatorOptions", "entitySortChange$", "paginatorChange"]], template: function EntityTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1393
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "table", 1);
|
|
1394
|
-
i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
|
|
1395
|
-
i0.ɵɵelementContainerStart(2, 2);
|
|
1396
|
-
i0.ɵɵtemplate(3, EntityTableComponent_th_3_Template, 2, 1, "th", 3);
|
|
1397
|
-
i0.ɵɵtemplate(4, EntityTableComponent_td_4_Template, 2, 1, "td", 4);
|
|
1398
|
-
i0.ɵɵelementContainerEnd();
|
|
1399
|
-
i0.ɵɵtemplate(5, EntityTableComponent_ng_container_5_Template, 4, 4, "ng-container", 5);
|
|
1400
|
-
i0.ɵɵtemplate(6, EntityTableComponent_tr_6_Template, 1, 1, "tr", 6);
|
|
1401
|
-
i0.ɵɵtemplate(7, EntityTableComponent_tr_7_Template, 1, 4, "tr", 7);
|
|
1402
|
-
i0.ɵɵelementEnd();
|
|
1403
|
-
i0.ɵɵtemplate(8, EntityTableComponent_igo_entity_table_paginator_8_Template, 1, 3, "igo-entity-table-paginator", 8);
|
|
1404
|
-
i0.ɵɵelementEnd();
|
|
1405
|
-
} if (rf & 2) {
|
|
1406
|
-
i0.ɵɵproperty("ngStyle", i0.ɵɵpureFunction1(9, _c0, ctx.tableHeight));
|
|
1407
|
-
i0.ɵɵadvance(1);
|
|
1408
|
-
i0.ɵɵproperty("ngClass", ctx.getTableClass())("dataSource", ctx.dataSource)("trackBy", ctx.getTrackByFunction());
|
|
1409
|
-
i0.ɵɵadvance(4);
|
|
1410
|
-
i0.ɵɵproperty("ngForOf", ctx.template.columns);
|
|
1411
|
-
i0.ɵɵadvance(1);
|
|
1412
|
-
i0.ɵɵproperty("matHeaderRowDef", ctx.headers)("matHeaderRowDefSticky", ctx.fixedHeader);
|
|
1413
|
-
i0.ɵɵadvance(1);
|
|
1414
|
-
i0.ɵɵproperty("matRowDefColumns", ctx.headers);
|
|
1415
|
-
i0.ɵɵadvance(1);
|
|
1416
|
-
i0.ɵɵproperty("ngIf", ctx.withPaginator);
|
|
1417
|
-
} }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i4.NgStyle, i5.MatTable, i5.MatHeaderCellDef, i5.MatHeaderRowDef, i5.MatColumnDef, i5.MatCellDef, i5.MatRowDef, i5.MatHeaderCell, i5.MatCell, i5.MatHeaderRow, i5.MatRow, i6.MatAutocomplete, i3.MatOption, i6.MatAutocompleteTrigger, i7.MatSort, i7.MatSortHeader, i8.MatIcon, i9.MatIconButton, i9.MatMiniFabButton, i10.MatCheckbox, i11.MatSuffix, i12.MatSelect, i13.StopPropagationDirective, i14.EntityTablePaginatorComponent, i15.ImageErrorDirective, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.RequiredValidator, i1.MinValidator, i1.MaxValidator, i1.FormGroupDirective, i1.FormControlName, i16.MatInput, i17.MatDatepicker, i17.MatDatepickerInput, i17.MatDatepickerToggle, i18.MatTooltip, i19.EntityTableRowDirective, i4.AsyncPipe, i20.SanitizeHtmlPipe, i21.SecureImagePipe, i22.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-mdc-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] mat-checkbox .mat-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-mdc-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] mat-checkbox .mat-ripple{height:28px}[_nghost-%COMP%] .table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}[_nghost-%COMP%] .mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}[_nghost-%COMP%] entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}[_nghost-%COMP%] table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}[_nghost-%COMP%] .class_hidden[_ngcontent-%COMP%]{visibility:hidden}[_nghost-%COMP%] .class_display_none[_ngcontent-%COMP%]{display:none}[_nghost-%COMP%] .class_boolean[_ngcontent-%COMP%], [_nghost-%COMP%] .class_icon[_ngcontent-%COMP%], [_nghost-%COMP%] .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}[_nghost-%COMP%] .class_string[_ngcontent-%COMP%], [_nghost-%COMP%] .class_text[_ngcontent-%COMP%], [_nghost-%COMP%] .class_number_edition[_ngcontent-%COMP%]{text-align:left}[_nghost-%COMP%] td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}[_nghost-%COMP%] input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
|
|
803
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EntityTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UntypedFormBuilder }, { token: i2.FocusMonitor }, { token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: i1.NgForm, optional: true }, { token: i1.FormControlName, optional: true }, { token: i3.ErrorStateMatcher }, { token: i3.DateAdapter }], target: i0.ɵɵFactoryTarget.Component });
|
|
804
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EntityTableComponent, selector: "igo-entity-table", inputs: { store: "store", paginator: "paginator", template: "template", scrollBehavior: "scrollBehavior", sortNullsFirst: "sortNullsFirst", withPaginator: "withPaginator", paginatorOptions: "paginatorOptions" }, outputs: { entityClick: "entityClick", entitySelectChange: "entitySelectChange", entitySortChange: "entitySortChange" }, providers: [
|
|
805
|
+
{ provide: MatFormFieldControl, useExisting: EntityTableComponent }
|
|
806
|
+
], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-container\" [ngStyle]=\"{ height: tableHeight }\">\r\n <table\r\n id=\"currentWorkspaceTable\"\r\n mat-table\r\n matSort\r\n [ngClass]=\"getTableClass()\"\r\n [dataSource]=\"dataSource\"\r\n [trackBy]=\"getTrackByFunction()\"\r\n (matSortChange)=\"onSort($event)\"\r\n >\r\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngIf=\"selectMany\">\r\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\r\n <mat-checkbox\r\n (change)=\"onToggleRows($event.checked)\"\r\n [checked]=\"selectionState === entityTableSelectionState.All\"\r\n [indeterminate]=\"\r\n selectionState === entityTableSelectionState.Some\r\n \"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\"\r\n (click)=\"\r\n $event.shiftKey\r\n ? onShiftToggleRow(!rowIsSelected(row.record), row.record, $event)\r\n : $event.stopPropagation()\r\n \"\r\n (change)=\"onToggleRow($event.checked, row.record)\"\r\n [checked]=\"rowIsSelected(row.record)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container\r\n [matColumnDef]=\"column.name\"\r\n *ngFor=\"let column of template.columns\"\r\n >\r\n <ng-container *ngIf=\"columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!row.cellData[column.name].isUrl; else isAnUrlDefault\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n {{ row.cellData[column.name].value }}\r\n </td>\r\n <ng-template #isAnUrlDefault>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.common.entity-table.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!row.cellData[column.name].isUrl; else isAnUrlHTML\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n [innerHTML]=\"row.cellData[column.name].value\"\r\n ></td>\r\n <ng-template #isAnUrlHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text edition\"\r\n [formGroup]=\"formGroup\"\r\n *ngIf=\"isEdition(row.record); else isUnsanitizedHTML\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (dateChange)=\"onDateChange(column.name, row.record, $event)\"\r\n />\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <input\r\n matInput\r\n type=\"time\"\r\n *ngIf=\"column.type === 'time'\"\r\n [formControlName]=\"column.name\"\r\n step=\"900\"\r\n (focus)=\"column.onFocus($event)\"\r\n (keypress)=\"column.onChange($event)\"\r\n (blur)=\"column.onBlur($event)\"\r\n />\r\n <input\r\n matInput\r\n type=\"number\"\r\n class=\"class_number_edition\"\r\n *ngIf=\"column.type === 'number'\"\r\n [formControlName]=\"column.name\"\r\n step=\"{{ column.step }}\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (input)=\"onValueChange(column.name, row.record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n min=\"{{ getValidationAttributeValue(column, 'minValue') }}\"\r\n max=\"{{ getValidationAttributeValue(column, 'maxValue') }}\"\r\n />\r\n <input\r\n matInput\r\n type=\"text\"\r\n *ngIf=\"!column.type || column.type === 'string'\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (input)=\"onValueChange(column.name, row.record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n />\r\n <mat-checkbox\r\n *ngIf=\"column.type === 'boolean'\"\r\n [formControlName]=\"column.name\"\r\n [checked]=\"row.cellData[column.name].value\"\r\n (change)=\"onBooleanValueChange(column.name, row.record, $event)\"\r\n ></mat-checkbox>\r\n <mat-select\r\n *ngIf=\"column.type === 'list'\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n [formControlName]=\"column.name\"\r\n [multiple]=\"column.multiple\"\r\n (selectionChange)=\"\r\n onSelectValueChange(column.name, row.record, $event)\r\n \"\r\n [value]=\"row.cellData[column.name].value\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of column.domainValues\"\r\n [value]=\"option.id\"\r\n [disabled]=\"option.disabled\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-select>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [formControlName]=\"column.name\"\r\n *ngIf=\"column.type === 'autocomplete'\"\r\n [matAutocomplete]=\"auto\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"\r\n onAutocompleteValueChange(column, row.record, $event)\r\n \"\r\n panelWidth=\"430px\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of filteredOptions[column.name] | async\"\r\n [value]=\"option.id\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </td>\r\n <ng-template #isUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"\r\n !row.cellData[column.name].isUrl;\r\n else isAnUrlUnsanitizedHTML\r\n \"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n [innerHTML]=\"row.cellData[column.name].value | sanitizeHtml\"\r\n ></td>\r\n <ng-template #isAnUrlUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <mat-icon\r\n *ngIf=\"column.onClick\"\r\n svgIcon=\"{{ row.cellData[column.name].value || column.icon }}\"\r\n (click)=\"column.onClick($event)\"\r\n ></mat-icon>\r\n <mat-icon\r\n *ngIf=\"!column.onClick\"\r\n svgIcon=\"{{ row.cellData[column.name].value || column.icon }}\"\r\n ></mat-icon>\r\n </td>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <span *ngFor=\"let button of row.cellData[column.name].value\">\r\n <ng-container\r\n *ngIf=\"\r\n isEdition(row.record) === button.editMode ||\r\n button.editMode === undefined\r\n \"\r\n >\r\n <button\r\n *ngIf=\"button.style === 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-icon-button\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, row.record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"button.style !== 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-mini-fab\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, row.record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"headers; sticky: fixedHeader\"\r\n [ngClass]=\"getHeaderClass()\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n igoEntityTableRow\r\n *matRowDef=\"let row; columns: headers\"\r\n [scrollBehavior]=\"scrollBehavior\"\r\n [ngClass]=\"getRowClass(row.record)\"\r\n [selection]=\"selection\"\r\n [selected]=\"rowIsSelected(row.record)\"\r\n (select)=\"onRowSelect(row.record)\"\r\n (click)=\"onRowClick(row.record)\"\r\n ></tr>\r\n </table>\r\n <igo-entity-table-paginator\r\n *ngIf=\"withPaginator\"\r\n [store]=\"store\"\r\n [paginatorOptions]=\"paginatorOptions\"\r\n [entitySortChange$]=\"entitySortChange$\"\r\n (paginatorChange)=\"paginatorChange($event)\"\r\n >\r\n </igo-entity-table-paginator>\r\n</div>\r\n", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-mdc-header-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:36px}:host.table-compact tr.mat-mdc-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:28px}:host .table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}:host .mat-cell-text{overflow:hidden;word-wrap:break-word}:host entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}:host table button{margin:7px}:host .class_hidden{visibility:hidden}:host .class_display_none{display:none}:host .class_boolean,:host .class_icon,:host .class_number{text-align:center;padding-right:35px!important}:host .class_string,:host .class_text,:host .class_number_edition{text-align:left}:host td.edition{background:#a6a6a633}:host input{border-bottom:1px solid darkgrey}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i7.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i7.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatMiniFabButton, selector: "button[mat-mini-fab]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i11.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i13.StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "component", type: i14.EntityTablePaginatorComponent, selector: "igo-entity-table-paginator", inputs: ["entitySortChange$", "store", "paginatorOptions"], outputs: ["page", "paginatorChange"] }, { kind: "directive", type: i15.ImageErrorDirective, selector: "[igoImageError]", inputs: ["errorImageUrl", "hideError"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i16.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i17.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i17.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i17.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i18.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i19.EntityTableRowDirective, selector: "[igoEntityTableRow]", inputs: ["selection", "selectOnClick", "highlightSelection", "selected", "scrollBehavior"], outputs: ["select"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i20.SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: i21.SecureImagePipe, name: "secureImage" }, { kind: "pipe", type: i22.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1418
807
|
}
|
|
1419
|
-
(
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
], template: "<div class=\"table-container\" [ngStyle]=\"{ height: tableHeight }\">\r\n <table\r\n id=\"currentWorkspaceTable\"\r\n mat-table\r\n matSort\r\n [ngClass]=\"getTableClass()\"\r\n [dataSource]=\"dataSource\"\r\n [trackBy]=\"getTrackByFunction()\"\r\n (matSortChange)=\"onSort($event)\"\r\n >\r\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngIf=\"selectMany\">\r\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\r\n <mat-checkbox\r\n (change)=\"onToggleRows($event.checked)\"\r\n [checked]=\"selectionState === entityTableSelectionState.All\"\r\n [indeterminate]=\"\r\n selectionState === entityTableSelectionState.Some\r\n \"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\"\r\n (click)=\"\r\n $event.shiftKey\r\n ? onShiftToggleRow(!rowIsSelected(row.record), row.record, $event)\r\n : $event.stopPropagation()\r\n \"\r\n (change)=\"onToggleRow($event.checked, row.record)\"\r\n [checked]=\"rowIsSelected(row.record)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container\r\n [matColumnDef]=\"column.name\"\r\n *ngFor=\"let column of template.columns\"\r\n >\r\n <ng-container *ngIf=\"columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!row.cellData[column.name].isUrl; else isAnUrlDefault\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n {{ row.cellData[column.name].value }}\r\n </td>\r\n <ng-template #isAnUrlDefault>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.common.entity-table.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!row.cellData[column.name].isUrl; else isAnUrlHTML\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n [innerHTML]=\"row.cellData[column.name].value\"\r\n ></td>\r\n <ng-template #isAnUrlHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text edition\"\r\n [formGroup]=\"formGroup\"\r\n *ngIf=\"isEdition(row.record); else isUnsanitizedHTML\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (dateChange)=\"onDateChange(column.name, row.record, $event)\"\r\n />\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <input\r\n matInput\r\n type=\"time\"\r\n *ngIf=\"column.type === 'time'\"\r\n [formControlName]=\"column.name\"\r\n step=\"900\"\r\n (focus)=\"column.onFocus($event)\"\r\n (keypress)=\"column.onChange($event)\"\r\n (blur)=\"column.onBlur($event)\"\r\n />\r\n <input\r\n matInput\r\n type=\"number\"\r\n class=\"class_number_edition\"\r\n *ngIf=\"column.type === 'number'\"\r\n [formControlName]=\"column.name\"\r\n step=\"{{ column.step }}\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (input)=\"onValueChange(column.name, row.record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n min=\"{{ getValidationAttributeValue(column, 'minValue') }}\"\r\n max=\"{{ getValidationAttributeValue(column, 'maxValue') }}\"\r\n />\r\n <input\r\n matInput\r\n type=\"text\"\r\n *ngIf=\"!column.type || column.type === 'string'\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (input)=\"onValueChange(column.name, row.record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n />\r\n <mat-checkbox\r\n *ngIf=\"column.type === 'boolean'\"\r\n [formControlName]=\"column.name\"\r\n [checked]=\"row.cellData[column.name].value\"\r\n (change)=\"onBooleanValueChange(column.name, row.record, $event)\"\r\n ></mat-checkbox>\r\n <mat-select\r\n *ngIf=\"column.type === 'list'\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n [formControlName]=\"column.name\"\r\n [multiple]=\"column.multiple\"\r\n (selectionChange)=\"\r\n onSelectValueChange(column.name, row.record, $event)\r\n \"\r\n [value]=\"row.cellData[column.name].value\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of column.domainValues\"\r\n [value]=\"option.id\"\r\n [disabled]=\"option.disabled\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-select>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [formControlName]=\"column.name\"\r\n *ngIf=\"column.type === 'autocomplete'\"\r\n [matAutocomplete]=\"auto\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"\r\n onAutocompleteValueChange(column, row.record, $event)\r\n \"\r\n panelWidth=\"430px\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of filteredOptions[column.name] | async\"\r\n [value]=\"option.id\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </td>\r\n <ng-template #isUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"\r\n !row.cellData[column.name].isUrl;\r\n else isAnUrlUnsanitizedHTML\r\n \"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n [innerHTML]=\"row.cellData[column.name].value | sanitizeHtml\"\r\n ></td>\r\n <ng-template #isAnUrlUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <mat-icon\r\n *ngIf=\"column.onClick\"\r\n svgIcon=\"{{ row.cellData[column.name].value || column.icon }}\"\r\n (click)=\"column.onClick($event)\"\r\n ></mat-icon>\r\n <mat-icon\r\n *ngIf=\"!column.onClick\"\r\n svgIcon=\"{{ row.cellData[column.name].value || column.icon }}\"\r\n ></mat-icon>\r\n </td>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <span *ngFor=\"let button of row.cellData[column.name].value\">\r\n <ng-container\r\n *ngIf=\"\r\n isEdition(row.record) === button.editMode ||\r\n button.editMode === undefined\r\n \"\r\n >\r\n <button\r\n *ngIf=\"button.style === 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-icon-button\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, row.record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"button.style !== 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-mini-fab\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, row.record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"headers; sticky: fixedHeader\"\r\n [ngClass]=\"getHeaderClass()\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n igoEntityTableRow\r\n *matRowDef=\"let row; columns: headers\"\r\n [scrollBehavior]=\"scrollBehavior\"\r\n [ngClass]=\"getRowClass(row.record)\"\r\n [selection]=\"selection\"\r\n [selected]=\"rowIsSelected(row.record)\"\r\n (select)=\"onRowSelect(row.record)\"\r\n (click)=\"onRowClick(row.record)\"\r\n ></tr>\r\n </table>\r\n <igo-entity-table-paginator\r\n *ngIf=\"withPaginator\"\r\n [store]=\"store\"\r\n [paginatorOptions]=\"paginatorOptions\"\r\n [entitySortChange$]=\"entitySortChange$\"\r\n (paginatorChange)=\"paginatorChange($event)\"\r\n >\r\n </igo-entity-table-paginator>\r\n</div>\r\n", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-mdc-header-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:36px}:host.table-compact tr.mat-mdc-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:28px}:host .table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}:host .mat-cell-text{overflow:hidden;word-wrap:break-word}:host entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}:host table button{margin:7px}:host .class_hidden{visibility:hidden}:host .class_display_none{display:none}:host .class_boolean,:host .class_icon,:host .class_number{text-align:center;padding-right:35px!important}:host .class_string,:host .class_text,:host .class_number_edition{text-align:left}:host td.edition{background:rgba(166,166,166,.2)}:host input{border-bottom:1px solid darkgrey}\n"] }]
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBR0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FB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YixLQUFLO1lBS08sU0FBUztrQkFBckIsS0FBSztZQWFHLFFBQVE7a0JBQWhCLEtBQUs7WUFNTixjQUFjO2tCQURiLEtBQUs7WUFPTixjQUFjO2tCQURiLEtBQUs7WUFPTixhQUFhO2tCQURaLEtBQUs7WUFPTixnQkFBZ0I7a0JBRGYsS0FBSztZQU1JLFdBQVc7a0JBQXBCLE1BQU07WUFLRyxrQkFBa0I7a0JBQTNCLE1BQU07WUFPRyxnQkFBZ0I7a0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBTZWxmLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVHJhY2tCeUZ1bmN0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUNvbnRyb2xOYW1lLFxyXG4gIE5nQ29udHJvbCxcclxuICBOZ0Zvcm0sXHJcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gIFVudHlwZWRGb3JtR3JvdXBcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuXHJcbmltcG9ydCB7IFN0cmluZ1V0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBtb21lbnQgfSBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucyB9IGZyb20gJy4uL2VudGl0eS10YWJsZS1wYWdpbmF0b3IvZW50aXR5LXRhYmxlLXBhZ2luYXRvci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlSZWNvcmQsXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RvcmUsXHJcbiAgRW50aXR5VGFibGVDb2x1bW4sXHJcbiAgRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcixcclxuICBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yLFxyXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXHJcbiAgRW50aXR5VGFibGVUZW1wbGF0ZVxyXG59IGZyb20gJy4uL3NoYXJlZCc7XHJcblxyXG5pbnRlcmZhY2UgQ2VsbERhdGEge1xyXG4gIFtrZXk6IHN0cmluZ106IHtcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBjbGFzczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XHJcbiAgICBpc1VybDogYm9vbGVhbjtcclxuICAgIGlzSW1nOiBib29sZWFuO1xyXG4gIH07XHJcbn1cclxuXHJcbmludGVyZmFjZSBSb3dEYXRhIHtcclxuICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3QsIEVudGl0eVN0YXRlPjtcclxuICBjZWxsRGF0YTogQ2VsbERhdGE7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VudGl0eS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZW50aXR5LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBFbnRpdHlUYWJsZUNvbXBvbmVudCB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW50aXR5VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICBlbnRpdHlTb3J0Q2hhbmdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnMgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBjb2x1bW4gcmVuZGVyZXIgdHlwZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyID0gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBzZWxlY3Rpb24ncyBzdGF0ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBzZWxlY3Rpb24scyBzdGF0ZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNlbGVjdGlvblN0YXRlJDogQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBzdG9yZSdzIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2VsZWN0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBkYXRhU291cmNlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkYXRhU291cmNlJCQ6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGxhc3QgcmVjb3JkIGNoZWNrZWQuIFVzZWZ1bCBmb3Igc2VsZWN0aW5nXHJcbiAgICogbXVsdGlwbGUgcmVjb3JkcyBieSBob2xkaW5nIHRoZSBzaGlmdCBrZXkgYW5kIGNoZWNraW5nXHJcbiAgICogY2hlY2tib3hlcy5cclxuICAgKi9cclxuICBwcml2YXRlIGxhc3RSZWNvcmRDaGVja2VkS2V5OiBFbnRpdHlLZXk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVudGl0eSBzdG9yZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHN0b3JlOiBFbnRpdHlTdG9yZTxvYmplY3Q+O1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSBwYWdpbmF0b3JcclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgcGFnaW5hdG9yKHZhbHVlOiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIHRoaXMuX3BhZ2luYXRvciA9IHZhbHVlO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvcjtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRhYmxlIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGVtcGxhdGU6IEVudGl0eVRhYmxlVGVtcGxhdGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbCBiZWhhdmlvciBvbiBzZWxlY3Rpb25cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNjcm9sbEJlaGF2aW9yOiBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yID0gRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvci5BdXRvO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIG51bGxzIHNob3VsZCBiZSBmaXJzdCB3aGVuIHNvcnRpbmdcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNvcnROdWxsc0ZpcnN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgdGhlIHRhYmxlIHBhZ2luYXRvciBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICB3aXRoUGFnaW5hdG9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhZ2luYXRvciBvcHRpb25zXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwYWdpbmF0b3JPcHRpb25zOiBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnM7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBlbnRpdHkgKHJvdykgaXMgY2xpY2tlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgYWRkZWQ6IG9iamVjdFtdO1xyXG4gIH0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGFibGUgc29ydCBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbjtcclxuICAgIGRpcmVjdGlvbjogc3RyaW5nO1xyXG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSBoZWFkZXJzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGhlYWRlcnMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgIT09IGZhbHNlKVxyXG4gICAgICAubWFwKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hlY2tib3ggPT09IHRydWUpIHtcclxuICAgICAgY29sdW1ucyA9IFsnc2VsZWN0aW9uQ2hlY2tib3gnXS5jb25jYXQoY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHNvdXJjZSBjb25zdW1hYmxlIGJ5IHRoZSB1bmRlcmx5aW5nIG1hdGVyaWFsIHRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8Um93RGF0YT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdGlvbiB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdGlvbkNoZWNrYm94IHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdE1hbnkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3RNYW55IHx8IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGZpeGVkSGVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXIgPT09IHVuZGVmaW5lZFxyXG4gICAgICA/IHRydWVcclxuICAgICAgOiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhYmxlSGVpZ2h0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS50YWJsZUhlaWdodCA/IHRoaXMudGVtcGxhdGUudGFibGVIZWlnaHQgOiAnYXV0byc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcclxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfcGFyZW50Rm9ybTogTmdGb3JtLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9jb250cm9sTmFtZTogRm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT5cclxuICApIHtcclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmci1DQScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLmNoYW5nZSQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyB0ZXh0IG9yIG51bWJlciB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBib29sZWFuIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQuY2hlY2tlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3Mgc2VsZWN0IHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYXV0b2NvbXBsZXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKFxyXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbixcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sXHJcbiAgICBldmVudFxyXG4gICkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGV2ZW50Lm9wdGlvbi52aWV3VmFsdWUpO1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgZGF0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25EYXRlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3QgZm9ybWF0ID0gJ1lZWVktTU0tREQnO1xyXG4gICAgY29uc3QgdmFsdWUgPSBtb21lbnQoZXZlbnQudmFsdWUpLmZvcm1hdChmb3JtYXQpO1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZSBlZGl0aW9uIG1vZGUgZm9yIG9uZSByb3dcclxuICAgKiBNb3JlIHRoYW4gb25lIHJvdyBjYW4gYmUgZWRpdGVkIGF0IHRoZSBzYW1lIHRpbWVcclxuICAgKi9cclxuICBwcml2YXRlIGVuYWJsZUVkaXQocmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHJlY29yZC5lbnRpdHkucHJvcGVydGllcyB8fCByZWNvcmQuZW50aXR5O1xyXG4gICAgdGhpcy50ZW1wbGF0ZS5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBjb2x1bW4udGl0bGUgPVxyXG4gICAgICAgIGNvbHVtbi52YWxpZGF0aW9uPy5tYW5kYXRvcnkgJiYgIWNvbHVtbi50aXRsZS5pbmNsdWRlcygnKicpXHJcbiAgICAgICAgICA/IGNvbHVtbi50aXRsZSArICcgKidcclxuICAgICAgICAgIDogY29sdW1uLnRpdGxlO1xyXG5cclxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtW2tleV0gfHwgaXRlbVtrZXldID09PSBudWxsKSB7XHJcbiAgICAgICAgICBpdGVtW2tleV0gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBpdGVtW2tleV0gPSBKU09OLnBhcnNlKGl0ZW1ba2V5XS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChcclxuICAgICAgICAgIGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGl0ZW1ba2V5XSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFtpdGVtW2tleV1dKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChcclxuICAgICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKHBhcnNlSW50KGl0ZW1ba2V5XSkpXHJcbiAgICAgICAgICAgIDogdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbY29sdW1uLm5hbWVdID0gbmV3IE9ic2VydmFibGU8YW55W10+KCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbY29sdW1uLm5hbWVdID0gdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbXHJcbiAgICAgICAgICBjb2x1bW4ubmFtZVxyXG4gICAgICAgIF0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5kb21haW5WYWx1ZXM/LmZpbHRlcigob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXHJcbiAgICAgICAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQgPSBvcHRpb24udmFsdWVcclxuICAgICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IGZvcm1Db250cm9sVmFsdWUgPSBpdGVtW2tleV07XHJcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIGZvcm1Db250cm9sVmFsdWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgIFN0cmluZ1V0aWxzLmlzVmFsaWROdW1iZXIoZm9ybUNvbnRyb2xWYWx1ZSkgJiZcclxuICAgICAgICAgICAgIVN0cmluZ1V0aWxzLmlzT2N0YWxOdW1iZXIoZm9ybUNvbnRyb2xWYWx1ZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlID0gcGFyc2VJbnQoZm9ybUNvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9PT0gZm9ybUNvbnRyb2xWYWx1ZSB8fFxyXG4gICAgICAgICAgICBvcHRpb24uaWQgPT09IGZvcm1Db250cm9sVmFsdWVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbFZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoXHJcbiAgICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1tcclxuICAgICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICBpZiAoY29sdW1uLnZpc2libGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtrZXldKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgICAgIGl0ZW1ba2V5XSA9IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKGl0ZW1ba2V5XSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgICAgICAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNbbmV3S2V5XSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKG51bGwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXSAmJlxyXG4gICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5JylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLmRpc2FibGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2UoKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZCA9IHJlY29yZHNbMF07XHJcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAgIC5hbGwoKVxyXG4gICAgICAgICAgLmluZGV4T2YoZmlyc3RTZWxlY3RlZCk7XHJcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yXHJcbiAgICAgICAgICA/IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICogKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCArIDEpXHJcbiAgICAgICAgICA6IDA7XHJcbiAgICAgICAgY29uc3QgcGFnZU1pbiA9IHRoaXMucGFnaW5hdG9yID8gcGFnZU1heCAtIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIDogMDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiZcclxuICAgICAgICAgIChmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPCBwYWdlTWluIHx8XHJcbiAgICAgICAgICAgIGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA+PSBwYWdlTWF4KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgcGFnZVRvUmVhY2ggPSBNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICBmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gLyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ID0gcGFnZVRvUmVhY2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsJCgpLnN1YnNjcmliZSgoYWxsKSA9PiB7XHJcbiAgICAgIGlmIChhbGxbMF0pIHtcclxuICAgICAgICB0aGlzLmVuYWJsZUVkaXQoYWxsWzBdKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGFsbC5tYXAoKHJlY29yZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICBjZWxsRGF0YTogdGhpcy50ZW1wbGF0ZS5jb2x1bW5zLnJlZHVjZShcclxuICAgICAgICAgICAgKGNlbGxEYXRhOiBDZWxsRGF0YSwgY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHJlY29yZCwgY29sdW1uKTtcclxuICAgICAgICAgICAgICBjZWxsRGF0YVtjb2x1bW4ubmFtZV0gPSB7XHJcbiAgICAgICAgICAgICAgICBjbGFzczogdGhpcy5nZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pLFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpc1VybDogdGhpcy5pc1VybCh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICBpc0ltZzogdGhpcy5pc0ltZyh2YWx1ZSlcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHJldHVybiBjZWxsRGF0YTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge31cclxuICAgICAgICAgIClcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5iaW5kIHRoZSBzdG9yZSB3YXRjaGVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVTdG9yZSgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiQkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UkJCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tieSBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGluZGV4IFJlY29yZCBpbmRleFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRyYWNrQnlGdW5jdGlvbigpOiBUcmFja0J5RnVuY3Rpb248Um93RGF0YT4ge1xyXG4gICAgcmV0dXJuIChfaW5kZXgsIHJvdykgPT4gcm93LnJlY29yZC5yZWY7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYSByZWZyZXNoIG9mIHRoZSB0YWJsZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW5cclxuICAgKiB0aGUgZGF0YSBzb3VyY2UgZG9lc24ndCBlbWl0IGEgbmV3IHZhbHVlIGJ1dCBmb3Igc29tZSByZWFzb25cclxuICAgKiB0aGUgcmVjb3JkcyBuZWVkIGFuIHVwZGF0ZS5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0b3JDaGFuZ2UoZXZlbnQ6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgdGhpcy5wYWdpbmF0b3IgPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHNvcnQsIHNvcnQgdGhlIHN0b3JlXHJcbiAgICogQHBhcmFtIGV2ZW50IFNvcnQgZXZlbnRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNvcnQoZXZlbnQ6IHsgYWN0aXZlOiBzdHJpbmc7IGRpcmVjdGlvbjogc3RyaW5nIH0pIHtcclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGV2ZW50LmRpcmVjdGlvbjtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMudGVtcGxhdGUuY29sdW1ucy5maW5kKFxyXG4gICAgICAoYzogRW50aXR5VGFibGVDb2x1bW4pID0+IGMubmFtZSA9PT0gZXZlbnQuYWN0aXZlXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQoe1xyXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PlxyXG4gICAgICAgICAgdGhpcy5nZXRWYWx1ZShyZWNvcmQsIGNvbHVtbiksXHJcbiAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgIG51bGxzRmlyc3Q6IHRoaXMuc29ydE51bGxzRmlyc3RcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZS5lbWl0KHsgY29sdW1uLCBkaXJlY3Rpb24gfSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZSQubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIGNsaWNrZWQsIGVtaXQgYW4gZXZlbnRcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uUm93Q2xpY2socmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gICAgdGhpcy5lbnRpdHlDbGljay5lbWl0KHJlY29yZC5lbnRpdHkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgc2VsZWN0ZWQsIHNlbGVjdCBpdCBpbiB0aGUgc3RvcmUgYW5kIGVtaXQgYW4gZXZlbnQuIEV2ZW4gaWZcclxuICAgKiBcIm1hbnlcIiBpcyBzZXQgdG8gdHJ1ZSwgdGhpcyBtZXRob2QgYWx3YXlzIHNlbGVjdCBhIHNpbmdsZSwgZXhjbHVzaXZlIHJvdy4gU2VsZWN0aW5nXHJcbiAgICogbXVsdGlwbGUgcm93cyBzaG91bGQgYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIGNoZWNrYm94ZXMuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblJvd1NlbGVjdChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7IHNlbGVjdGVkOiB0cnVlIH0sIHRydWUpO1xyXG4gICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXR5XSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvciB1bnNlbGVjdCBhbGwgcm93cyBhdCBvbmNlLiBPbiBzZWxlY3QsIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZVJvd3ModG9nZ2xlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IHNlbGVjdGVkOiB0b2dnbGUgfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAuYWxsKClcclxuICAgICAgICAubWFwKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuZW50aXR5KTtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXRpZXNdIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxyXG4gICAqIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uVG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGV4Y2x1c2l2ZSA9IHRvZ2dsZSA9PT0gdHJ1ZSAmJiAhdGhpcy5zZWxlY3RNYW55O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7IHNlbGVjdGVkOiB0b2dnbGUgfSwgZXhjbHVzaXZlKTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7IGFkZGVkOiBbZW50aXR5XSB9KTtcclxuICAgIH1cclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcclxuICAgKiBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNoaWZ0VG9nZ2xlUm93KFxyXG4gICAgdG9nZ2xlOiBib29sZWFuLFxyXG4gICAgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PixcclxuICAgIGV2ZW50OiBNb3VzZUV2ZW50XHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RNYW55ID09PSBmYWxzZSB8fCB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5vblRvZ2dsZVJvdyh0b2dnbGUsIHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBtYXQgY2hlY2tib3ggd3JvbmcgYmVoYXZpb3JcclxuICAgIC8vIHdoZW4gdGhlIHNoaWZ0IGtleSBpcyBoZWxkLlxyXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzYyMzJcclxuICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICByYW5nZS5zZWxlY3ROb2RlKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpO1xyXG4gICAgY29uc3QgcmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YocmVjb3JkKTtcclxuICAgIGNvbnN0IGxhc3RSZWNvcmRDaGVja2VkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0KFxyXG4gICAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5XHJcbiAgICApO1xyXG4gICAgY29uc3QgbGFzdFJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKGxhc3RSZWNvcmRDaGVja2VkKTtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSBbcmVjb3JkSW5kZXgsIGxhc3RSZWNvcmRJbmRleF07XHJcbiAgICBjb25zdCBzZWxlY3RSZWNvcmRzID0gcmVjb3Jkcy5zbGljZShcclxuICAgICAgTWF0aC5taW4oLi4uaW5kZXhlcyksXHJcbiAgICAgIE1hdGgubWF4KC4uLmluZGV4ZXMpICsgMVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBlbnRpdGllcyA9IHNlbGVjdFJlY29yZHMubWFwKFxyXG4gICAgICAoX3JlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IF9yZWNvcmQuZW50aXR5XHJcbiAgICApO1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVNYW55KGVudGl0aWVzLCB7IHNlbGVjdGVkOiB0b2dnbGUgfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoeyBhZGRlZDogZW50aXRpZXMgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlIHRoZSBzZWxlY3Rpb24gc3RhdGVcclxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGFsbCwgc29tZSBvciBubyByb3dzIGFyZSBzZWxlY3RlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcHV0ZVNlbGVjdGlvblN0YXRlKFxyXG4gICAgc2VsZWN0ZWRSZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdXHJcbiAgKTogRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSB7XHJcbiAgICBjb25zdCBzdGF0ZXMgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uQ291bnQgPSBzZWxlY3RlZFJlY29yZHMubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvdW50ID09PSAwXHJcbiAgICAgID8gc3RhdGVzLk5vbmVcclxuICAgICAgOiBzZWxlY3Rpb25Db3VudCA9PT0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuY291bnRcclxuICAgICAgPyBzdGF0ZXMuQWxsXHJcbiAgICAgIDogc3RhdGVzLlNvbWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgY29sdW1uSXNTb3J0YWJsZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc29ydGFibGUgPSBjb2x1bW4uc29ydDtcclxuICAgIGlmIChzb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNvcnRhYmxlID0gdGhpcy50ZW1wbGF0ZS5zb3J0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRoaXMudGVtcGxhdGUuc29ydDtcclxuICAgIH1cclxuICAgIHJldHVybiBzb3J0YWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSByb3cgaXMgc2hvdWxkIGJlIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzdGF0ZVxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByb3dJc1NlbGVjdGVkKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN0YXRlID0gcmVjb3JkLnN0YXRlO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkID8gc3RhdGUuc2VsZWN0ZWQgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzSW1nKHZhbHVlKSB7XHJcbiAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBbJ2pwZycsICdwbmcnLCAnZ2lmJ10uaW5kZXhPZih2YWx1ZS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgIC0xXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1VybCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB2YWx1ZS5zbGljZSgwLCA4KSA9PT0gJ2h0dHBzOi8vJyB8fCB2YWx1ZS5zbGljZSgwLCA3KSA9PT0gJ2h0dHA6Ly8nXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbHVlc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRWYWx1ZShyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYW55IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBpZiAoY29sdW1uLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnZhbHVlQWNjZXNzb3IoZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IoZW50aXR5LCBjb2x1bW4ubmFtZSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHZhbHVlID0gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcclxuXHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlID8gJyYjMTAwMDM7JyA6ICcnOyAvLyBjaGVjayBtYXJrXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdsaXN0JyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xyXG4gICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XHJcbiAgICAgICAgbGV0IGxpc3RfaWQ7XHJcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgPyAobGlzdF9pZCA9IHZhbHVlLm1hdGNoKC9bXFx3Li1dKy9nKS5tYXAoTnVtYmVyKSlcclxuICAgICAgICAgIDogKGxpc3RfaWQgPSB2YWx1ZSk7XHJcbiAgICAgICAgbGV0IGxpc3Rfb3B0aW9uID0gW107XHJcblxyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAobGlzdF9pZC5pbmNsdWRlcyhvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNvcmQuZWRpdGlvbikge1xyXG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/ICh2YWx1ZSA9IGxpc3RfaWQpIDogKHZhbHVlID0gbGlzdF9vcHRpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9XHJcbiAgICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1tcclxuICAgICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcclxuICAgICAgICAgICAgICAhU3RyaW5nVXRpbHMuaXNPY3RhbE51bWJlcih2YWx1ZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUgfHwgb3B0aW9uLmlkID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNFZGl0aW9uKHJlY29yZClcclxuICAgICAgICAgICAgICAgID8gKHZhbHVlID0gb3B0aW9uLmlkKVxyXG4gICAgICAgICAgICAgICAgOiAodmFsdWUgPSBvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIHZhbHVlICYmIGNvbHVtbi5kb21haW5WYWx1ZXMpIHtcclxuICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XHJcbiAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XHJcbiAgICAgICAgdmFsdWUgPVxyXG4gICAgICAgICAgZW50aXR5Py5wcm9wZXJ0aWVzW1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXHJcbiAgICAgICAgICBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgU3RyaW5nVXRpbHMuaXNWYWxpZE51bWJlcih2YWx1ZSkgJiZcclxuICAgICAgICAgICAgIVN0cmluZ1V0aWxzLmlzT2N0YWxOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KHZhbHVlKTtcclxuICAgICAgICAgIHZhbHVlID0gZGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgdmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWxpZGF0aW9uIHZhbHVlc1xyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZSAoZmFsc2UgaWYgbm8gdmFsaWRhdGlvbiBvciBub3QgdGhlIG9uZSBjb25jZXJuZWQpXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKFxyXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbixcclxuICAgIHZhbGlkYXRpb25UeXBlOiBzdHJpbmdcclxuICApOiBhbnkge1xyXG4gICAgaWYgKFxyXG4gICAgICBjb2x1bW4udmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXSAhPT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0VkaXRpb24ocmVjb3JkKSB7XHJcbiAgICByZXR1cm4gcmVjb3JkLmVudGl0eS5lZGl0aW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHJlbmRlcmVyIG9mIGEgY29sdW1uXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBSZW5kZXJlciB0eXBlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIge1xyXG4gICAgaWYgKGNvbHVtbi5yZW5kZXJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5EZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0YWJsZSBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRhYmxlQ2xhc3MoKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2lnby1lbnRpdHktdGFibGUtd2l0aC1zZWxlY3Rpb24nOiB0aGlzLnNlbGVjdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGhlYWRlciBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldEhlYWRlckNsYXNzKCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLmhlYWRlckNsYXNzRnVuYztcclxuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZ1bmMoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Um93Q2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5yb3dDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKGVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRDZWxsQ2xhc3MoXHJcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LFxyXG4gICAgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtblxyXG4gICk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBjbHMgPSB7fTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XHJcbiAgICBpZiAodGFibGVGdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIHRhYmxlRnVuYyhlbnRpdHksIGNvbHVtbiwgcmVjb3JkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1uRnVuYyA9IGNvbHVtbi5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICBPYmplY3QuYXNzaWduKGNscywgY29sdW1uRnVuYyhlbnRpdHksIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjbHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25CdXR0b25DbGljayhcclxuICAgIGNsaWNrRnVuYzogKGVudGl0eTogb2JqZWN0LCByZWNvcmQ/OiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdm9pZCxcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cclxuICApIHtcclxuICAgIHRoaXMuZW5hYmxlRWRpdChyZWNvcmQpO1xyXG4gICAgaWYgKHR5cGVvZiBjbGlja0Z1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2xpY2tGdW5jKHJlY29yZC5lbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBjb2x1bW4gbmFtZSB3aXRob3V0IGhpcyBcInByb3BlcnRpZXNcIiB0YWcgKHVzZWZ1bCBmb3IgZWRpdGlvbiB3b3Jrc3BhY2UgcHJvcGVydGllcylcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb2x1bW4uaW5jbHVkZXMoJ3Byb3BlcnRpZXMuJykpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5zcGxpdCgnLicpWzFdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiB0YWJsZUhlaWdodCB9XCI+XHJcbiAgPHRhYmxlXHJcbiAgICBpZD1cImN1cnJlbnRXb3Jrc3BhY2VUYWJsZVwiXHJcbiAgICBtYXQtdGFibGVcclxuICAgIG1hdFNvcnRcclxuICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3MoKVwiXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICAgIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCJcclxuICAgIChtYXRTb3J0Q2hhbmdlKT1cIm9uU29ydCgkZXZlbnQpXCJcclxuICA+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RNYW55XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3dzKCRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLlNvbWVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cclxuICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICRldmVudC5zaGlmdEtleVxyXG4gICAgICAgICAgICAgID8gb25TaGlmdFRvZ2dsZVJvdyghcm93SXNTZWxlY3RlZChyb3cucmVjb3JkKSwgcm93LnJlY29yZCwgJGV2ZW50KVxyXG4gICAgICAgICAgICAgIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZVJvdygkZXZlbnQuY2hlY2tlZCwgcm93LnJlY29yZClcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwicm93SXNTZWxlY3RlZChyb3cucmVjb3JkKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0ZW1wbGF0ZS5jb2x1bW5zXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBjb2x1bW4udGl0bGUgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBjb2x1bW4udGl0bGUgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pIGFzIGNvbHVtblJlbmRlcmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5EZWZhdWx0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5pc1VybDsgZWxzZSBpc0FuVXJsRGVmYXVsdFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5jbGFzc1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIH19XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgaWdvSW1hZ2VFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5pc0ltZzsgZWxzZSBub3RJbWdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNyYz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIHwgc2VjdXJlSW1hZ2UgfCBhc3luY1xyXG4gICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgICBoZWlndGg9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWdcclxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgID57eyAnaWdvLmNvbW1vbi5lbnRpdHktdGFibGUudGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5IVE1MXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5pc1VybDsgZWxzZSBpc0FuVXJsSFRNTFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlXCJcclxuICAgICAgICAgICAgPjwvdGQ+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgaWdvSW1hZ2VFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5pc0ltZzsgZWxzZSBub3RJbWdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNyYz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIHwgc2VjdXJlSW1hZ2UgfCBhc3luY1xyXG4gICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgICBoZWlndGg9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWdcclxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgID57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0IGVkaXRpb25cIlxyXG4gICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImlzRWRpdGlvbihyb3cucmVjb3JkKTsgZWxzZSBpc1Vuc2FuaXRpemVkSFRNTFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5jbGFzc1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXJcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGVcclxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAgICAgICAgIFtmb3JdPVwicGlja2VyXCJcclxuICAgICAgICAgICAgICAgID48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlKGNvbHVtbi5uYW1lLCByb3cucmVjb3JkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICd0aW1lJ1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgIHN0ZXA9XCI5MDBcIlxyXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cImNvbHVtbi5vbkZvY3VzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImNvbHVtbi5vbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChibHVyKT1cImNvbHVtbi5vbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xhc3NfbnVtYmVyX2VkaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ251bWJlcidcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzdGVwPVwie3sgY29sdW1uLnN0ZXAgfX1cIlxyXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByb3cucmVjb3JkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3sgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5JykgfX1cIlxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWFuZGF0b3J5JylcclxuICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgIG1pbj1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtaW5WYWx1ZScpIH19XCJcclxuICAgICAgICAgICAgICAgIG1heD1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYXhWYWx1ZScpIH19XCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi50eXBlIHx8IGNvbHVtbi50eXBlID09PSAnc3RyaW5nJ1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcm93LnJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICByZWFkb25seT1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpIH19XCJcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3tcclxuICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbidcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJvdy5yZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgID48L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xpc3QnXCJcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3tcclxuICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJjb2x1bW4ubXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJcclxuICAgICAgICAgICAgICAgICAgb25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcm93LnJlY29yZCwgJGV2ZW50KVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbi5kb21haW5WYWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnXCJcclxuICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7XHJcbiAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKVxyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3sgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5JykgfX1cIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGVcclxuICAgICAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJcclxuICAgICAgICAgICAgICAgICAgb25BdXRvY29tcGxldGVWYWx1ZUNoYW5nZShjb2x1bW4sIHJvdy5yZWNvcmQsICRldmVudClcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBwYW5lbFdpZHRoPVwiNDMwcHhcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc1Vuc2FuaXRpemVkSFRNTD5cclxuICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIXJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uaXNVcmw7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2UgaXNBblVybFVuc2FuaXRpemVkSFRNTFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIHwgc2FuaXRpemVIdG1sXCJcclxuICAgICAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxVbnNhbml0aXplZEhUTUw+XHJcbiAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IHJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0udmFsdWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZ29JbWFnZUVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uaXNJbWc7IGVsc2Ugbm90SW1nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0udmFsdWUgfCBzZWN1cmVJbWFnZSB8IGFzeW5jXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWd0aD1cImF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWdcclxuICAgICAgICAgICAgICAgICAgICAgID48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuSWNvblwiPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5vbkNsaWNrXCJcclxuICAgICAgICAgICAgICBzdmdJY29uPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB8fCBjb2x1bW4uaWNvbiB9fVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbi5vbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLm9uQ2xpY2tcIlxyXG4gICAgICAgICAgICAgIHN2Z0ljb249XCJ7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIHx8IGNvbHVtbi5pY29uIH19XCJcclxuICAgICAgICAgICAgPjwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XHJcbiAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLmNsYXNzXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBidXR0b24gb2Ygcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGlzRWRpdGlvbihyb3cucmVjb3JkKSA9PT0gYnV0dG9uLmVkaXRNb2RlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLmVkaXRNb2RlID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaWdvU3RvcFByb3BhZ2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbi5jbGljaywgcm93LnJlY29yZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7eyBidXR0b24uaWNvbiB9fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b24uc3R5bGUgIT09ICdtYXQtaWNvbi1idXR0b24nXCJcclxuICAgICAgICAgICAgICAgICAgICBpZ29TdG9wUHJvcGFnYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBtYXQtbWluaS1mYWJcclxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByb3cucmVjb3JkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7IGJ1dHRvbi5pY29uIH19XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8dHJcclxuICAgICAgbWF0LWhlYWRlci1yb3dcclxuICAgICAgKm1hdEhlYWRlclJvd0RlZj1cImhlYWRlcnM7IHN0aWNreTogZml4ZWRIZWFkZXJcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRIZWFkZXJDbGFzcygpXCJcclxuICAgID48L3RyPlxyXG4gICAgPHRyXHJcbiAgICAgIG1hdC1yb3dcclxuICAgICAgaWdvRW50aXR5VGFibGVSb3dcclxuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGhlYWRlcnNcIlxyXG4gICAgICBbc2Nyb2xsQmVoYXZpb3JdPVwic2Nyb2xsQmVoYXZpb3JcIlxyXG4gICAgICBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhyb3cucmVjb3JkKVwiXHJcbiAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcclxuICAgICAgW3NlbGVjdGVkXT1cInJvd0lzU2VsZWN0ZWQocm93LnJlY29yZClcIlxyXG4gICAgICAoc2VsZWN0KT1cIm9uUm93U2VsZWN0KHJvdy5yZWNvcmQpXCJcclxuICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2socm93LnJlY29yZClcIlxyXG4gICAgPjwvdHI+XHJcbiAgPC90YWJsZT5cclxuICA8aWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3JcclxuICAgICpuZ0lmPVwid2l0aFBhZ2luYXRvclwiXHJcbiAgICBbc3RvcmVdPVwic3RvcmVcIlxyXG4gICAgW3BhZ2luYXRvck9wdGlvbnNdPVwicGFnaW5hdG9yT3B0aW9uc1wiXHJcbiAgICBbZW50aXR5U29ydENoYW5nZSRdPVwiZW50aXR5U29ydENoYW5nZSRcIlxyXG4gICAgKHBhZ2luYXRvckNoYW5nZSk9XCJwYWdpbmF0b3JDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvaWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3I+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
808
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EntityTableComponent, decorators: [{
|
|
809
|
+
type: Component,
|
|
810
|
+
args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
811
|
+
{ provide: MatFormFieldControl, useExisting: EntityTableComponent }
|
|
812
|
+
], template: "<div class=\"table-container\" [ngStyle]=\"{ height: tableHeight }\">\r\n <table\r\n id=\"currentWorkspaceTable\"\r\n mat-table\r\n matSort\r\n [ngClass]=\"getTableClass()\"\r\n [dataSource]=\"dataSource\"\r\n [trackBy]=\"getTrackByFunction()\"\r\n (matSortChange)=\"onSort($event)\"\r\n >\r\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngIf=\"selectMany\">\r\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\r\n <mat-checkbox\r\n (change)=\"onToggleRows($event.checked)\"\r\n [checked]=\"selectionState === entityTableSelectionState.All\"\r\n [indeterminate]=\"\r\n selectionState === entityTableSelectionState.Some\r\n \"\r\n >\r\n </mat-checkbox>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\"\r\n (click)=\"\r\n $event.shiftKey\r\n ? onShiftToggleRow(!rowIsSelected(row.record), row.record, $event)\r\n : $event.stopPropagation()\r\n \"\r\n (change)=\"onToggleRow($event.checked, row.record)\"\r\n [checked]=\"rowIsSelected(row.record)\"\r\n >\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container\r\n [matColumnDef]=\"column.name\"\r\n *ngFor=\"let column of template.columns\"\r\n >\r\n <ng-container *ngIf=\"columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n mat-sort-header\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columnIsSortable(column)\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [matTooltip]=\"column.tooltip ? column.tooltip : undefined\"\r\n >\r\n {{ column.title }}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!row.cellData[column.name].isUrl; else isAnUrlDefault\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n {{ row.cellData[column.name].value }}\r\n </td>\r\n <ng-template #isAnUrlDefault>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.common.entity-table.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"!row.cellData[column.name].isUrl; else isAnUrlHTML\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n [innerHTML]=\"row.cellData[column.name].value\"\r\n ></td>\r\n <ng-template #isAnUrlHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text edition\"\r\n [formGroup]=\"formGroup\"\r\n *ngIf=\"isEdition(row.record); else isUnsanitizedHTML\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\r\n <mat-datepicker-toggle\r\n matSuffix\r\n [for]=\"picker\"\r\n ></mat-datepicker-toggle>\r\n <input\r\n matInput\r\n [matDatepicker]=\"picker\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (dateChange)=\"onDateChange(column.name, row.record, $event)\"\r\n />\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <input\r\n matInput\r\n type=\"time\"\r\n *ngIf=\"column.type === 'time'\"\r\n [formControlName]=\"column.name\"\r\n step=\"900\"\r\n (focus)=\"column.onFocus($event)\"\r\n (keypress)=\"column.onChange($event)\"\r\n (blur)=\"column.onBlur($event)\"\r\n />\r\n <input\r\n matInput\r\n type=\"number\"\r\n class=\"class_number_edition\"\r\n *ngIf=\"column.type === 'number'\"\r\n [formControlName]=\"column.name\"\r\n step=\"{{ column.step }}\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (input)=\"onValueChange(column.name, row.record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n min=\"{{ getValidationAttributeValue(column, 'minValue') }}\"\r\n max=\"{{ getValidationAttributeValue(column, 'maxValue') }}\"\r\n />\r\n <input\r\n matInput\r\n type=\"text\"\r\n *ngIf=\"!column.type || column.type === 'string'\"\r\n [formControlName]=\"column.name\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n (input)=\"onValueChange(column.name, row.record, $event)\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n />\r\n <mat-checkbox\r\n *ngIf=\"column.type === 'boolean'\"\r\n [formControlName]=\"column.name\"\r\n [checked]=\"row.cellData[column.name].value\"\r\n (change)=\"onBooleanValueChange(column.name, row.record, $event)\"\r\n ></mat-checkbox>\r\n <mat-select\r\n *ngIf=\"column.type === 'list'\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n [formControlName]=\"column.name\"\r\n [multiple]=\"column.multiple\"\r\n (selectionChange)=\"\r\n onSelectValueChange(column.name, row.record, $event)\r\n \"\r\n [value]=\"row.cellData[column.name].value\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of column.domainValues\"\r\n [value]=\"option.id\"\r\n [disabled]=\"option.disabled\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-select>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [formControlName]=\"column.name\"\r\n *ngIf=\"column.type === 'autocomplete'\"\r\n [matAutocomplete]=\"auto\"\r\n required=\"{{\r\n getValidationAttributeValue(column, 'mandatory')\r\n }}\"\r\n value=\"{{ row.cellData[column.name].value }}\"\r\n readonly=\"{{ getValidationAttributeValue(column, 'readonly') }}\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"\r\n onAutocompleteValueChange(column, row.record, $event)\r\n \"\r\n panelWidth=\"430px\"\r\n >\r\n <mat-option\r\n *ngFor=\"let option of filteredOptions[column.name] | async\"\r\n [value]=\"option.id\"\r\n >\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </td>\r\n <ng-template #isUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n *ngIf=\"\r\n !row.cellData[column.name].isUrl;\r\n else isAnUrlUnsanitizedHTML\r\n \"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n [innerHTML]=\"row.cellData[column.name].value | sanitizeHtml\"\r\n ></td>\r\n <ng-template #isAnUrlUnsanitizedHTML>\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <a\r\n href=\"{{ row.cellData[column.name].value }}\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <img\r\n igoImageError\r\n *ngIf=\"row.cellData[column.name].isImg; else notImg\"\r\n src=\"{{\r\n row.cellData[column.name].value | secureImage | async\r\n }}\"\r\n width=\"50\"\r\n heigth=\"auto\"\r\n />\r\n <ng-template #notImg\r\n ><span\r\n >{{ 'igo.geo.targetHtmlUrl' | translate }}\r\n </span></ng-template\r\n >\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\r\n <td\r\n mat-cell\r\n *matCellDef=\"let row\"\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <mat-icon\r\n *ngIf=\"column.onClick\"\r\n svgIcon=\"{{ row.cellData[column.name].value || column.icon }}\"\r\n (click)=\"column.onClick($event)\"\r\n ></mat-icon>\r\n <mat-icon\r\n *ngIf=\"!column.onClick\"\r\n svgIcon=\"{{ row.cellData[column.name].value || column.icon }}\"\r\n ></mat-icon>\r\n </td>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\"\r\n >\r\n <ng-container *matCellDef=\"let row\">\r\n <td\r\n mat-cell\r\n class=\"mat-cell-text\"\r\n [ngClass]=\"row.cellData[column.name].class\"\r\n >\r\n <span *ngFor=\"let button of row.cellData[column.name].value\">\r\n <ng-container\r\n *ngIf=\"\r\n isEdition(row.record) === button.editMode ||\r\n button.editMode === undefined\r\n \"\r\n >\r\n <button\r\n *ngIf=\"button.style === 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-icon-button\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, row.record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"button.style !== 'mat-icon-button'\"\r\n igoStopPropagation\r\n mat-mini-fab\r\n [color]=\"button.color\"\r\n (mousedown)=\"onButtonClick(button.click, row.record)\"\r\n [disabled]=\"button.disabled\"\r\n >\r\n <mat-icon svgIcon=\"{{ button.icon }}\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"headers; sticky: fixedHeader\"\r\n [ngClass]=\"getHeaderClass()\"\r\n ></tr>\r\n <tr\r\n mat-row\r\n igoEntityTableRow\r\n *matRowDef=\"let row; columns: headers\"\r\n [scrollBehavior]=\"scrollBehavior\"\r\n [ngClass]=\"getRowClass(row.record)\"\r\n [selection]=\"selection\"\r\n [selected]=\"rowIsSelected(row.record)\"\r\n (select)=\"onRowSelect(row.record)\"\r\n (click)=\"onRowClick(row.record)\"\r\n ></tr>\r\n </table>\r\n <igo-entity-table-paginator\r\n *ngIf=\"withPaginator\"\r\n [store]=\"store\"\r\n [paginatorOptions]=\"paginatorOptions\"\r\n [entitySortChange$]=\"entitySortChange$\"\r\n (paginatorChange)=\"paginatorChange($event)\"\r\n >\r\n </igo-entity-table-paginator>\r\n</div>\r\n", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-mdc-header-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:36px}:host.table-compact tr.mat-mdc-row,:host.table-compact ::ng-deep mat-checkbox .mat-ripple{height:28px}:host .table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}:host .mat-cell-text{overflow:hidden;word-wrap:break-word}:host entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}:host table button{margin:7px}:host .class_hidden{visibility:hidden}:host .class_display_none{display:none}:host .class_boolean,:host .class_icon,:host .class_number{text-align:center;padding-right:35px!important}:host .class_string,:host .class_text,:host .class_number_edition{text-align:left}:host td.edition{background:#a6a6a633}:host input{border-bottom:1px solid darkgrey}\n"] }]
|
|
813
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UntypedFormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
|
|
814
|
+
type: Optional
|
|
815
|
+
}, {
|
|
816
|
+
type: Self
|
|
817
|
+
}] }, { type: i1.NgForm, decorators: [{
|
|
818
|
+
type: Optional
|
|
819
|
+
}] }, { type: i1.FormControlName, decorators: [{
|
|
820
|
+
type: Optional
|
|
821
|
+
}] }, { type: i3.ErrorStateMatcher }, { type: i3.DateAdapter }]; }, propDecorators: { store: [{
|
|
822
|
+
type: Input
|
|
823
|
+
}], paginator: [{
|
|
824
|
+
type: Input
|
|
825
|
+
}], template: [{
|
|
826
|
+
type: Input
|
|
827
|
+
}], scrollBehavior: [{
|
|
828
|
+
type: Input
|
|
829
|
+
}], sortNullsFirst: [{
|
|
830
|
+
type: Input
|
|
831
|
+
}], withPaginator: [{
|
|
832
|
+
type: Input
|
|
833
|
+
}], paginatorOptions: [{
|
|
834
|
+
type: Input
|
|
835
|
+
}], entityClick: [{
|
|
836
|
+
type: Output
|
|
837
|
+
}], entitySelectChange: [{
|
|
838
|
+
type: Output
|
|
839
|
+
}], entitySortChange: [{
|
|
840
|
+
type: Output
|
|
841
|
+
}] } });
|
|
842
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBR0wsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FB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QUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO1NBQ3BFLCtDQ3JFSCwwdGZBNFlBOzs0RkRyVWEsb0JBQW9CO2tCQVRoQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNULEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsc0JBQXNCLEVBQUU7cUJBQ3BFOzswQkFpTEUsUUFBUTs7MEJBQUksSUFBSTs7MEJBQ2hCLFFBQVE7OzBCQUNSLFFBQVE7c0dBbklGLEtBQUs7c0JBQWIsS0FBSztnQkFLTyxTQUFTO3NCQUFyQixLQUFLO2dCQWFHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTU4sY0FBYztzQkFEYixLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFPTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBTUksV0FBVztzQkFBcEIsTUFBTTtnQkFLRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBT0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgU2VsZixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRyYWNrQnlGdW5jdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1Db250cm9sTmFtZSxcclxuICBOZ0NvbnRyb2wsXHJcbiAgTmdGb3JtLFxyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUdyb3VwXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcblxyXG5pbXBvcnQgeyBTdHJpbmdVdGlscyB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnMgfSBmcm9tICcuLi9lbnRpdHktdGFibGUtcGFnaW5hdG9yL2VudGl0eS10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBFbnRpdHlLZXksXHJcbiAgRW50aXR5UmVjb3JkLFxyXG4gIEVudGl0eVN0YXRlLFxyXG4gIEVudGl0eVN0b3JlLFxyXG4gIEVudGl0eVRhYmxlQ29sdW1uLFxyXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXHJcbiAgRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvcixcclxuICBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLFxyXG4gIEVudGl0eVRhYmxlVGVtcGxhdGVcclxufSBmcm9tICcuLi9zaGFyZWQnO1xyXG5cclxuaW50ZXJmYWNlIENlbGxEYXRhIHtcclxuICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgY2xhc3M6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9O1xyXG4gICAgaXNVcmw6IGJvb2xlYW47XHJcbiAgICBpc0ltZzogYm9vbGVhbjtcclxuICB9O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUm93RGF0YSB7XHJcbiAgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0LCBFbnRpdHlTdGF0ZT47XHJcbiAgY2VsbERhdGE6IENlbGxEYXRhO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1lbnRpdHktdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VudGl0eS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRW50aXR5VGFibGVDb21wb25lbnQgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgZW50aXR5U29ydENoYW5nZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG5cclxuICBwdWJsaWMgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY29sdW1uIHJlbmRlcmVyIHR5cGVzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciA9IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgc2VsZWN0aW9uJ3Mgc3RhdGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgc2VsZWN0aW9uLHMgc3RhdGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByZWFkb25seSBzZWxlY3Rpb25TdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlPiA9XHJcbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIHNlbGVjdGlvbiQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgZGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGF0YVNvdXJjZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsYXN0IHJlY29yZCBjaGVja2VkLiBVc2VmdWwgZm9yIHNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJlY29yZHMgYnkgaG9sZGluZyB0aGUgc2hpZnQga2V5IGFuZCBjaGVja2luZ1xyXG4gICAqIGNoZWNrYm94ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXN0UmVjb3JkQ2hlY2tlZEtleTogRW50aXR5S2V5O1xyXG5cclxuICAvKipcclxuICAgKiBFbnRpdHkgc3RvcmVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgcGFnaW5hdG9yXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICB0aGlzLl9wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGwgYmVoYXZpb3Igb24gc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzY3JvbGxCZWhhdmlvcjogRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvciA9IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IuQXV0bztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBudWxscyBzaG91bGQgYmUgZmlyc3Qgd2hlbiBzb3J0aW5nXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzb3J0TnVsbHNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTaG93IHRoZSB0YWJsZSBwYWdpbmF0b3Igb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgd2l0aFBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQYWdpbmF0b3Igb3B0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnaW5hdG9yT3B0aW9uczogRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGFkZGVkOiBvYmplY3RbXTtcclxuICB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRhYmxlIHNvcnQgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtcclxuICAgIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW47XHJcbiAgICBkaXJlY3Rpb246IHN0cmluZztcclxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXIodW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgaGVhZGVyc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBoZWFkZXJzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjb2x1bW5zID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSlcclxuICAgICAgLm1hcCgoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoZWNrYm94ID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbHVtbnMgPSBbJ3NlbGVjdGlvbkNoZWNrYm94J10uY29uY2F0KGNvbHVtbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YSBzb3VyY2UgY29uc3VtYWJsZSBieSB0aGUgdW5kZXJseWluZyBtYXRlcmlhbCB0YWJsZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFJvd0RhdGE+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIGlzIHN1cHBvcnRlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb24gfHwgZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgc2VsZWN0aW9uIGNoZWNrYm94IHNob3VsZCBiZSBkaXNwbGF5ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0aW9uQ2hlY2tib3goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb25DaGVja2JveCB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIG1hbnkgZW50aXRpZXMgc2hvdWxkIGViIHN1cHBvcnRlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3RNYW55KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0TWFueSB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgc2VsZWN0aW9uIG1hbnkgZW50aXRpZXMgc2hvdWxkIGViIHN1cHBvcnRlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldCBmaXhlZEhlYWRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyID09PSB1bmRlZmluZWRcclxuICAgICAgPyB0cnVlXHJcbiAgICAgIDogdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlcjtcclxuICB9XHJcblxyXG4gIGdldCB0YWJsZUhlaWdodCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudGFibGVIZWlnaHQgPyB0aGlzLnRlbXBsYXRlLnRhYmxlSGVpZ2h0IDogJ2F1dG8nO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgIHByb3RlY3RlZCBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXHJcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3BhcmVudEZvcm06IE5nRm9ybSxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfY29udHJvbE5hbWU6IEZvcm1Db250cm9sTmFtZSxcclxuICAgIHByb3RlY3RlZCBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcclxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+XHJcbiAgKSB7XHJcbiAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZSgnZnItQ0EnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrIHRoZSBzZWxlY3Rpb24gc3RhdGUgdG8gcHJvcGVybHkgZGlzcGxheSB0aGUgc2VsZWN0aW9uIGNoZWNrYm94ZXNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS5jaGFuZ2UkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjaGFuZ2VzLnN0b3JlO1xyXG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmN1cnJlbnRWYWx1ZSAhPT0gc3RvcmUucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZURhdGFzb3VyY2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgdGV4dCBvciBudW1iZXIgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxyXG4gICAqL1xyXG4gIG9uVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYm9vbGVhbiB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XHJcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIHNlbGVjdCB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGF1dG9jb21wbGV0ZSB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25BdXRvY29tcGxldGVWYWx1ZUNoYW5nZShcclxuICAgIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sXHJcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LFxyXG4gICAgZXZlbnRcclxuICApIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShldmVudC5vcHRpb24udmlld1ZhbHVlKTtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC5vcHRpb24udmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzIGRhdGUgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxyXG4gICAqL1xyXG4gIG9uRGF0ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGZvcm1hdCA9ICdZWVlZLU1NLUREJztcclxuICAgIGNvbnN0IHZhbHVlID0gbW9tZW50KGV2ZW50LnZhbHVlKS5mb3JtYXQoZm9ybWF0KTtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgZWRpdGlvbiBtb2RlIGZvciBvbmUgcm93XHJcbiAgICogTW9yZSB0aGFuIG9uZSByb3cgY2FuIGJlIGVkaXRlZCBhdCB0aGUgc2FtZSB0aW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbmFibGVFZGl0KHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSByZWNvcmQuZW50aXR5LnByb3BlcnRpZXMgfHwgcmVjb3JkLmVudGl0eTtcclxuICAgIHRoaXMudGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgY29sdW1uLnRpdGxlID1cclxuICAgICAgICBjb2x1bW4udmFsaWRhdGlvbj8ubWFuZGF0b3J5ICYmICFjb2x1bW4udGl0bGUuaW5jbHVkZXMoJyonKVxyXG4gICAgICAgICAgPyBjb2x1bW4udGl0bGUgKyAnIConXHJcbiAgICAgICAgICA6IGNvbHVtbi50aXRsZTtcclxuXHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGlmICghaXRlbVtrZXldIHx8IGl0ZW1ba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gSlNPTi5wYXJzZShpdGVtW2tleV0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xpc3QnKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChcclxuICAgICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChbaXRlbVtrZXldXSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgIGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woaXRlbVtrZXldKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICA/IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShwYXJzZUludChpdGVtW2tleV0pKVxyXG4gICAgICAgICAgICA6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShpdGVtW2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxyXG4gICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woaXRlbVtrZXldKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSA9IG5ldyBPYnNlcnZhYmxlPGFueVtdPigpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW1xyXG4gICAgICAgICAgY29sdW1uLm5hbWVcclxuICAgICAgICBdLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgbWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjb2x1bW4uZG9tYWluVmFsdWVzPy5maWx0ZXIoKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgID8gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICAgICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZU5hbWVOb3JtYWxpemVkID0gb3B0aW9uLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmVhdHVyZU5hbWVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbFZhbHVlID0gaXRlbVtrZXldO1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiBmb3JtQ29udHJvbFZhbHVlID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgICBTdHJpbmdVdGlscy5pc1ZhbGlkTnVtYmVyKGZvcm1Db250cm9sVmFsdWUpICYmXHJcbiAgICAgICAgICAgICFTdHJpbmdVdGlscy5pc09jdGFsTnVtYmVyKGZvcm1Db250cm9sVmFsdWUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IHBhcnNlSW50KGZvcm1Db250cm9sVmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBvcHRpb24udmFsdWUgPT09IGZvcm1Db250cm9sVmFsdWUgfHxcclxuICAgICAgICAgICAgb3B0aW9uLmlkID09PSBmb3JtQ29udHJvbFZhbHVlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xWYWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGZvcm1Db250cm9sVmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcclxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKFxyXG4gICAgICAgICAgICBlbnRpdHk/LnByb3BlcnRpZXNbXHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgaWYgKGl0ZW1ba2V5XSkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudChpdGVtW2tleV0pO1xyXG4gICAgICAgICAgICBpdGVtW2tleV0gPSBkYXRlLnV0YygpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChpdGVtW2tleV0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcclxuICAgICAgICAgICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW25ld0tleV0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKFxyXG4gICAgICAgICAgY29sdW1uLm5hbWUsXHJcbiAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woaXRlbVtrZXldKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0gJiZcclxuICAgICAgICB0aGlzLmdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVEYXRhc291cmNlKCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZSlcclxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWQgPSByZWNvcmRzWzBdO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgICAuYWxsKClcclxuICAgICAgICAgIC5pbmRleE9mKGZpcnN0U2VsZWN0ZWQpO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VNYXggPSB0aGlzLnBhZ2luYXRvclxyXG4gICAgICAgICAgPyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSAqICh0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKyAxKVxyXG4gICAgICAgICAgOiAwO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VNaW4gPSB0aGlzLnBhZ2luYXRvciA/IHBhZ2VNYXggLSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA6IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yICYmXHJcbiAgICAgICAgICAoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIDwgcGFnZU1pbiB8fFxyXG4gICAgICAgICAgICBmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPj0gcGFnZU1heClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IHBhZ2VUb1JlYWNoID0gTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIC8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VUb1JlYWNoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlJC5uZXh0KHRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlKHJlY29yZHMpKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UkJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCQoKS5zdWJzY3JpYmUoKGFsbCkgPT4ge1xyXG4gICAgICBpZiAoYWxsWzBdKSB7XHJcbiAgICAgICAgdGhpcy5lbmFibGVFZGl0KGFsbFswXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBhbGwubWFwKChyZWNvcmQpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgY2VsbERhdGE6IHRoaXMudGVtcGxhdGUuY29sdW1ucy5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChjZWxsRGF0YTogQ2VsbERhdGEsIGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShyZWNvcmQsIGNvbHVtbik7XHJcbiAgICAgICAgICAgICAgY2VsbERhdGFbY29sdW1uLm5hbWVdID0ge1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6IHRoaXMuZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKSxcclxuICAgICAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaXNVcmw6IHRoaXMuaXNVcmwodmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgaXNJbWc6IHRoaXMuaXNJbWcodmFsdWUpXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICByZXR1cm4gY2VsbERhdGE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHt9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuYmluZCB0aGUgc3RvcmUgd2F0Y2hlclxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlU3RvcmUoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24kJCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbiQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlJCQpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrYnkgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBpbmRleCBSZWNvcmQgaW5kZXhcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRUcmFja0J5RnVuY3Rpb24oKTogVHJhY2tCeUZ1bmN0aW9uPFJvd0RhdGE+IHtcclxuICAgIHJldHVybiAoX2luZGV4LCByb3cpID0+IHJvdy5yZWNvcmQucmVmO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUcmlnZ2VyIGEgcmVmcmVzaCBvZiB0aGUgdGFibGUuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuXHJcbiAgICogdGhlIGRhdGEgc291cmNlIGRvZXNuJ3QgZW1pdCBhIG5ldyB2YWx1ZSBidXQgZm9yIHNvbWUgcmVhc29uXHJcbiAgICogdGhlIHJlY29yZHMgbmVlZCBhbiB1cGRhdGUuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcGFnaW5hdG9yQ2hhbmdlKGV2ZW50OiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIHRoaXMucGFnaW5hdG9yID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBzb3J0LCBzb3J0IHRoZSBzdG9yZVxyXG4gICAqIEBwYXJhbSBldmVudCBTb3J0IGV2ZW50XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Tb3J0KGV2ZW50OiB7IGFjdGl2ZTogc3RyaW5nOyBkaXJlY3Rpb246IHN0cmluZyB9KSB7XHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5kaXJlY3Rpb247XHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnMuZmluZChcclxuICAgICAgKGM6IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjLm5hbWUgPT09IGV2ZW50LmFjdGl2ZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZGlyZWN0aW9uID09PSAnYXNjJyB8fCBkaXJlY3Rpb24gPT09ICdkZXNjJykge1xyXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHtcclxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT5cclxuICAgICAgICAgIHRoaXMuZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pLFxyXG4gICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICBudWxsc0ZpcnN0OiB0aGlzLnNvcnROdWxsc0ZpcnN0XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UuZW1pdCh7IGNvbHVtbiwgZGlyZWN0aW9uIH0pO1xyXG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UkLm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBjbGlja2VkLCBlbWl0IGFuIGV2ZW50XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblJvd0NsaWNrKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICAgIHRoaXMuZW50aXR5Q2xpY2suZW1pdChyZWNvcmQuZW50aXR5KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHNlbGVjdGVkLCBzZWxlY3QgaXQgaW4gdGhlIHN0b3JlIGFuZCBlbWl0IGFuIGV2ZW50LiBFdmVuIGlmXHJcbiAgICogXCJtYW55XCIgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIGFsd2F5cyBzZWxlY3QgYSBzaW5nbGUsIGV4Y2x1c2l2ZSByb3cuIFNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJvd3Mgc2hvdWxkIGJlIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBjaGVja2JveGVzLlxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Sb3dTZWxlY3QocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwgeyBzZWxlY3RlZDogdHJ1ZSB9LCB0cnVlKTtcclxuICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoeyBhZGRlZDogW2VudGl0eV0gfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb3IgdW5zZWxlY3QgYWxsIHJvd3MgYXQgb25jZS4gT24gc2VsZWN0LCBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Ub2dnbGVSb3dzKHRvZ2dsZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLnN0b3JlLnZpZXcuYWxsKCk7XHJcbiAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHsgYWRkZWQ6IFtlbnRpdGllc10gfSk7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZU1hbnkoZW50aXRpZXMsIHsgc2VsZWN0ZWQ6IHRvZ2dsZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcclxuICAgKiBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBleGNsdXNpdmUgPSB0b2dnbGUgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0TWFueTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwgeyBzZWxlY3RlZDogdG9nZ2xlIH0sIGV4Y2x1c2l2ZSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoeyBhZGRlZDogW2VudGl0eV0gfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXHJcbiAgICogZW1pdCBhbiBldmVudC5cclxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25TaGlmdFRvZ2dsZVJvdyhcclxuICAgIHRvZ2dsZTogYm9vbGVhbixcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sXHJcbiAgICBldmVudDogTW91c2VFdmVudFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0TWFueSA9PT0gZmFsc2UgfHwgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMub25Ub2dnbGVSb3codG9nZ2xlLCByZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgbWF0IGNoZWNrYm94IHdyb25nIGJlaGF2aW9yXHJcbiAgICAvLyB3aGVuIHRoZSBzaGlmdCBrZXkgaXMgaGVsZC5cclxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy82MjMyXHJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKTtcclxuICAgIGNvbnN0IHJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKHJlY29yZCk7XHJcbiAgICBjb25zdCBsYXN0UmVjb3JkQ2hlY2tlZCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldChcclxuICAgICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGxhc3RSZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihsYXN0UmVjb3JkQ2hlY2tlZCk7XHJcbiAgICBjb25zdCBpbmRleGVzID0gW3JlY29yZEluZGV4LCBsYXN0UmVjb3JkSW5kZXhdO1xyXG4gICAgY29uc3Qgc2VsZWN0UmVjb3JkcyA9IHJlY29yZHMuc2xpY2UoXHJcbiAgICAgIE1hdGgubWluKC4uLmluZGV4ZXMpLFxyXG4gICAgICBNYXRoLm1heCguLi5pbmRleGVzKSArIDFcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZW50aXRpZXMgPSBzZWxlY3RSZWNvcmRzLm1hcChcclxuICAgICAgKF9yZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBfcmVjb3JkLmVudGl0eVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlTWFueShlbnRpdGllcywgeyBzZWxlY3RlZDogdG9nZ2xlIH0pO1xyXG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHsgYWRkZWQ6IGVudGl0aWVzIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcHV0ZSB0aGUgc2VsZWN0aW9uIHN0YXRlXHJcbiAgICogQHJldHVybnMgV2hldGhlciBhbGwsIHNvbWUgb3Igbm8gcm93cyBhcmUgc2VsZWN0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBwcml2YXRlIGNvbXB1dGVTZWxlY3Rpb25TdGF0ZShcclxuICAgIHNlbGVjdGVkUmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXVxyXG4gICk6IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUge1xyXG4gICAgY29uc3Qgc3RhdGVzID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbkNvdW50ID0gc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aDtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Db3VudCA9PT0gMFxyXG4gICAgICA/IHN0YXRlcy5Ob25lXHJcbiAgICAgIDogc2VsZWN0aW9uQ291bnQgPT09IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmNvdW50XHJcbiAgICAgID8gc3RhdGVzLkFsbFxyXG4gICAgICA6IHN0YXRlcy5Tb21lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZVxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbHVtbiBpcyBzb3J0YWJsZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGNvbHVtbklzU29ydGFibGUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNvcnRhYmxlID0gY29sdW1uLnNvcnQ7XHJcbiAgICBpZiAoc29ydGFibGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBzb3J0YWJsZSA9IHRoaXMudGVtcGxhdGUuc29ydCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLnRlbXBsYXRlLnNvcnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc29ydGFibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgcm93IGlzIHNob3VsZCBiZSBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBlbnRpdHkgc3RhdGVcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSByb3cgc2hvdWxkIGJlIHNlbGVjdGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcm93SXNTZWxlY3RlZChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHJlY29yZC5zdGF0ZTtcclxuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZCA/IHN0YXRlLnNlbGVjdGVkIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0ltZyh2YWx1ZSkge1xyXG4gICAgaWYgKHRoaXMuaXNVcmwodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgWydqcGcnLCAncG5nJywgJ2dpZiddLmluZGV4T2YodmFsdWUuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpKSAhPT1cclxuICAgICAgICAtMVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVcmwodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdmFsdWUuc2xpY2UoMCwgOCkgPT09ICdodHRwczovLycgfHwgdmFsdWUuc2xpY2UoMCwgNykgPT09ICdodHRwOi8vJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWx1ZXNcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgQW55IHZhbHVlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VmFsdWUocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGFueSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgaWYgKGNvbHVtbi52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi52YWx1ZUFjY2Vzc29yKGVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yKGVudGl0eSwgY29sdW1uLm5hbWUsIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgICB2YWx1ZSA9IHRoaXMuc3RvcmUuZ2V0UHJvcGVydHkoZW50aXR5LCBjb2x1bW4ubmFtZSk7XHJcblxyXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIHZhbHVlID0gQm9vbGVhbih2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpKSB7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/ICcmIzEwMDAzOycgOiAnJzsgLy8gY2hlY2sgbWFya1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcgJiYgdmFsdWUgJiYgY29sdW1uLmRvbWFpblZhbHVlcykge1xyXG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xyXG4gICAgICAgIGxldCBsaXN0X2lkO1xyXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcclxuICAgICAgICAgID8gKGxpc3RfaWQgPSB2YWx1ZS5tYXRjaCgvW1xcdy4tXSsvZykubWFwKE51bWJlcikpXHJcbiAgICAgICAgICA6IChsaXN0X2lkID0gdmFsdWUpO1xyXG4gICAgICAgIGxldCBsaXN0X29wdGlvbiA9IFtdO1xyXG5cclxuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGxpc3RfaWQuaW5jbHVkZXMob3B0aW9uLmlkKSkge1xyXG4gICAgICAgICAgICBpZiAocmVjb3JkLmVkaXRpb24pIHtcclxuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi5pZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGlzdF9vcHRpb24ucHVzaChvcHRpb24udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNFZGl0aW9uKHJlY29yZCkgPyAodmFsdWUgPSBsaXN0X2lkKSA6ICh2YWx1ZSA9IGxpc3Rfb3B0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgICAgdmFsdWUgPVxyXG4gICAgICAgICAgICBlbnRpdHk/LnByb3BlcnRpZXNbXHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmlzVmFsaWROdW1iZXIodmFsdWUpICYmXHJcbiAgICAgICAgICAgICAgIVN0cmluZ1V0aWxzLmlzT2N0YWxOdW1iZXIodmFsdWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRWRpdGlvbihyZWNvcmQpXHJcbiAgICAgICAgICAgICAgICA/ICh2YWx1ZSA9IG9wdGlvbi5pZClcclxuICAgICAgICAgICAgICAgIDogKHZhbHVlID0gb3B0aW9uLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgIHZhbHVlID1cclxuICAgICAgICAgIGVudGl0eT8ucHJvcGVydGllc1tcclxuICAgICAgICAgICAgdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKVxyXG4gICAgICAgICAgXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgIFN0cmluZ1V0aWxzLmlzVmFsaWROdW1iZXIodmFsdWUpICYmXHJcbiAgICAgICAgICAgICFTdHJpbmdVdGlscy5pc09jdGFsTnVtYmVyKHZhbHVlKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUgfHwgb3B0aW9uLmlkID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRWRpdGlvbihyZWNvcmQpKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICAgICAgICB2YWx1ZSA9IGRhdGUuZm9ybWF0KCk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiB2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCB0byBhY2Nlc3MgYW4gZW50aXR5J3MgdmFsaWRhdGlvbiB2YWx1ZXNcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEBwYXJhbSB2YWxpZGF0aW9uVHlwZSBzdHJpbmdcclxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWUgKGZhbHNlIGlmIG5vIHZhbGlkYXRpb24gb3Igbm90IHRoZSBvbmUgY29uY2VybmVkKVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShcclxuICAgIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sXHJcbiAgICB2YWxpZGF0aW9uVHlwZTogc3RyaW5nXHJcbiAgKTogYW55IHtcclxuICAgIGlmIChcclxuICAgICAgY29sdW1uLnZhbGlkYXRpb24gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICBjb2x1bW4udmFsaWRhdGlvblt2YWxpZGF0aW9uVHlwZV0gIT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4udmFsaWRhdGlvblt2YWxpZGF0aW9uVHlwZV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNFZGl0aW9uKHJlY29yZCkge1xyXG4gICAgcmV0dXJuIHJlY29yZC5lbnRpdHkuZWRpdGlvbiA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdHlwZSBvZiByZW5kZXJlciBvZiBhIGNvbHVtblxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgUmVuZGVyZXIgdHlwZVxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldENvbHVtblJlbmRlcmVyKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyIHtcclxuICAgIGlmIChjb2x1bW4ucmVuZGVyZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdGFibGUgbmdDbGFzc1xyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRUYWJsZUNsYXNzKCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdpZ28tZW50aXR5LXRhYmxlLXdpdGgtc2VsZWN0aW9uJzogdGhpcy5zZWxlY3Rpb25cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBoZWFkZXIgbmdDbGFzc1xyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRIZWFkZXJDbGFzcygpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5oZWFkZXJDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFJvd0NsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgY29uc3QgZnVuYyA9IHRoaXMudGVtcGxhdGUucm93Q2xhc3NGdW5jO1xyXG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICByZXR1cm4gZnVuYyhlbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Q2VsbENsYXNzKFxyXG4gICAgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PixcclxuICAgIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW5cclxuICApOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgY29uc3QgY2xzID0ge307XHJcblxyXG4gICAgY29uc3QgdGFibGVGdW5jID0gdGhpcy50ZW1wbGF0ZS5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKHRhYmxlRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oY2xzLCB0YWJsZUZ1bmMoZW50aXR5LCBjb2x1bW4sIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbHVtbkZ1bmMgPSBjb2x1bW4uY2VsbENsYXNzRnVuYztcclxuICAgIGlmIChjb2x1bW5GdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIGNvbHVtbkZ1bmMoZW50aXR5LCByZWNvcmQpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkXHJcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uQnV0dG9uQ2xpY2soXHJcbiAgICBjbGlja0Z1bmM6IChlbnRpdHk6IG9iamVjdCwgcmVjb3JkPzogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHZvaWQsXHJcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+XHJcbiAgKSB7XHJcbiAgICB0aGlzLmVuYWJsZUVkaXQocmVjb3JkKTtcclxuICAgIGlmICh0eXBlb2YgY2xpY2tGdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNsaWNrRnVuYyhyZWNvcmQuZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgY29sdW1uIG5hbWUgd2l0aG91dCBoaXMgXCJwcm9wZXJ0aWVzXCIgdGFnICh1c2VmdWwgZm9yIGVkaXRpb24gd29ya3NwYWNlIHByb3BlcnRpZXMpXHJcbiAgICovXHJcbiAgcHVibGljIGdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAoY29sdW1uLmluY2x1ZGVzKCdwcm9wZXJ0aWVzLicpKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4uc3BsaXQoJy4nKVsxXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGhlaWdodDogdGFibGVIZWlnaHQgfVwiPlxyXG4gIDx0YWJsZVxyXG4gICAgaWQ9XCJjdXJyZW50V29ya3NwYWNlVGFibGVcIlxyXG4gICAgbWF0LXRhYmxlXHJcbiAgICBtYXRTb3J0XHJcbiAgICBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzKClcIlxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJhY2tCeV09XCJnZXRUcmFja0J5RnVuY3Rpb24oKVwiXHJcbiAgICAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3Rpb25DaGVja2JveFwiIGNsYXNzPVwibWF0LWNlbGwtY2hlY2tib3hcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0TWFueVwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblN0YXRlJCB8IGFzeW5jIGFzIHNlbGVjdGlvblN0YXRlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93cygkZXZlbnQuY2hlY2tlZClcIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLkFsbFwiXHJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZSA9PT0gZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZS5Tb21lXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc2hpZnRLZXkgPyAkZXZlbnQucHJldmVudERlZmF1bHQoKSA6IG51bGxcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAkZXZlbnQuc2hpZnRLZXlcclxuICAgICAgICAgICAgICA/IG9uU2hpZnRUb2dnbGVSb3coIXJvd0lzU2VsZWN0ZWQocm93LnJlY29yZCksIHJvdy5yZWNvcmQsICRldmVudClcclxuICAgICAgICAgICAgICA6ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVSb3coJGV2ZW50LmNoZWNrZWQsIHJvdy5yZWNvcmQpXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cInJvd0lzU2VsZWN0ZWQocm93LnJlY29yZClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGVtcGxhdGUuY29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbilcIj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgY29sdW1uLnRpdGxlIH19XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgY29sdW1uLnRpdGxlIH19XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKSBhcyBjb2x1bW5SZW5kZXJlclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uaXNVcmw7IGVsc2UgaXNBblVybERlZmF1bHRcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxEZWZhdWx0PlxyXG4gICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLmNsYXNzXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICBocmVmPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlnb0ltYWdlRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uaXNJbWc7IGVsc2Ugbm90SW1nXCJcclxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB8IHNlY3VyZUltYWdlIHwgYXN5bmNcclxuICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ3RoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nXHJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2lnby5jb21tb24uZW50aXR5LXRhYmxlLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuSFRNTFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cclxuICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uaXNVcmw7IGVsc2UgaXNBblVybEhUTUxcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZVwiXHJcbiAgICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxIVE1MPlxyXG4gICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLmNsYXNzXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICBocmVmPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlnb0ltYWdlRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uaXNJbWc7IGVsc2Ugbm90SW1nXCJcclxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB8IHNlY3VyZUltYWdlIHwgYXN5bmNcclxuICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ3RoPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nXHJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dCBlZGl0aW9uXCJcclxuICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0VkaXRpb24ocm93LnJlY29yZCk7IGVsc2UgaXNVbnNhbml0aXplZEhUTUxcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyXCIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgICAgICBbZm9yXT1cInBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICA+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZShjb2x1bW4ubmFtZSwgcm93LnJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi50eXBlID09PSAndGltZSdcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBzdGVwPVwiOTAwXCJcclxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjb2x1bW4ub25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJjb2x1bW4ub25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJjb2x1bW4ub25CbHVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNsYXNzX251bWJlcl9lZGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgc3RlcD1cInt7IGNvbHVtbi5zdGVwIH19XCJcclxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcm93LnJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICByZWFkb25seT1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpIH19XCJcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwie3tcclxuICAgICAgICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpXHJcbiAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICBtaW49XCJ7eyBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWluVmFsdWUnKSB9fVwiXHJcbiAgICAgICAgICAgICAgICBtYXg9XCJ7eyBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWF4VmFsdWUnKSB9fVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4udHlwZSB8fCBjb2x1bW4udHlwZSA9PT0gJ3N0cmluZydcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IHJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0udmFsdWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJvdy5yZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7eyBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKSB9fVwiXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7XHJcbiAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKVxyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQm9vbGVhblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByb3cucmVjb3JkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdsaXN0J1wiXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7XHJcbiAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKVxyXG4gICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgICAgICAgIG9uU2VsZWN0VmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJvdy5yZWNvcmQsICRldmVudClcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4uZG9tYWluVmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJ1wiXHJcbiAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWFuZGF0b3J5JylcclxuICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICByZWFkb25seT1cInt7IGdldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpIH19XCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwiXHJcbiAgICAgICAgICAgICAgICAgIG9uQXV0b2NvbXBsZXRlVmFsdWVDaGFuZ2UoY29sdW1uLCByb3cucmVjb3JkLCAkZXZlbnQpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgcGFuZWxXaWR0aD1cIjQzMHB4XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1tjb2x1bW4ubmFtZV0gfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNVbnNhbml0aXplZEhUTUw+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICFyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLmlzVXJsO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIGlzQW5VcmxVbnNhbml0aXplZEhUTUxcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB8IHNhbml0aXplSHRtbFwiXHJcbiAgICAgICAgICAgICAgPjwvdGQ+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MPlxyXG4gICAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0uY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWdvSW1hZ2VFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLmlzSW1nOyBlbHNlIG5vdEltZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLnZhbHVlIHwgc2VjdXJlSW1hZ2UgfCBhc3luY1xyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlndGg9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9uZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cclxuICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuY2VsbERhdGFbY29sdW1uLm5hbWVdLmNsYXNzXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4ub25DbGlja1wiXHJcbiAgICAgICAgICAgICAgc3ZnSWNvbj1cInt7IHJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0udmFsdWUgfHwgY29sdW1uLmljb24gfX1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4ub25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5vbkNsaWNrXCJcclxuICAgICAgICAgICAgICBzdmdJY29uPVwie3sgcm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS52YWx1ZSB8fCBjb2x1bW4uaWNvbiB9fVwiXHJcbiAgICAgICAgICAgID48L21hdC1pY29uPlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkJ1dHRvbkdyb3VwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmNlbGxEYXRhW2NvbHVtbi5uYW1lXS5jbGFzc1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIHJvdy5jZWxsRGF0YVtjb2x1bW4ubmFtZV0udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICBpc0VkaXRpb24ocm93LnJlY29yZCkgPT09IGJ1dHRvbi5lZGl0TW9kZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5lZGl0TW9kZSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ1dHRvbi5zdHlsZSA9PT0gJ21hdC1pY29uLWJ1dHRvbidcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlnb1N0b3BQcm9wYWdhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJvdy5yZWNvcmQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3sgYnV0dG9uLmljb24gfX1cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaWdvU3RvcFByb3BhZ2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LW1pbmktZmFiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbi5jbGljaywgcm93LnJlY29yZClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7eyBidXR0b24uaWNvbiB9fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHRyXHJcbiAgICAgIG1hdC1oZWFkZXItcm93XHJcbiAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJoZWFkZXJzOyBzdGlja3k6IGZpeGVkSGVhZGVyXCJcclxuICAgICAgW25nQ2xhc3NdPVwiZ2V0SGVhZGVyQ2xhc3MoKVwiXHJcbiAgICA+PC90cj5cclxuICAgIDx0clxyXG4gICAgICBtYXQtcm93XHJcbiAgICAgIGlnb0VudGl0eVRhYmxlUm93XHJcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBoZWFkZXJzXCJcclxuICAgICAgW3Njcm9sbEJlaGF2aW9yXT1cInNjcm9sbEJlaGF2aW9yXCJcclxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3Mocm93LnJlY29yZClcIlxyXG4gICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXHJcbiAgICAgIFtzZWxlY3RlZF09XCJyb3dJc1NlbGVjdGVkKHJvdy5yZWNvcmQpXCJcclxuICAgICAgKHNlbGVjdCk9XCJvblJvd1NlbGVjdChyb3cucmVjb3JkKVwiXHJcbiAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdy5yZWNvcmQpXCJcclxuICAgID48L3RyPlxyXG4gIDwvdGFibGU+XHJcbiAgPGlnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cIndpdGhQYWdpbmF0b3JcIlxyXG4gICAgW3N0b3JlXT1cInN0b3JlXCJcclxuICAgIFtwYWdpbmF0b3JPcHRpb25zXT1cInBhZ2luYXRvck9wdGlvbnNcIlxyXG4gICAgW2VudGl0eVNvcnRDaGFuZ2UkXT1cImVudGl0eVNvcnRDaGFuZ2UkXCJcclxuICAgIChwYWdpbmF0b3JDaGFuZ2UpPVwicGFnaW5hdG9yQ2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICA8L2lnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yPlxyXG48L2Rpdj5cclxuIl19
|