@igo2/common 1.10.0 → 1.12.0
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/bundles/igo2-common.umd.js +833 -254
- package/bundles/igo2-common.umd.js.map +1 -1
- package/esm2015/lib/action/action.module.js +1 -1
- package/esm2015/lib/action/actionbar/actionbar-item.component.js +1 -1
- package/esm2015/lib/action/actionbar/actionbar.component.js +1 -1
- package/esm2015/lib/action/actionbar/actionbar.module.js +1 -1
- package/esm2015/lib/action/index.js +1 -1
- package/esm2015/lib/action/shared/action.enums.js +1 -1
- package/esm2015/lib/action/shared/action.interfaces.js +1 -1
- package/esm2015/lib/action/shared/index.js +1 -1
- package/esm2015/lib/action/shared/store.js +1 -1
- package/esm2015/lib/backdrop/backdrop.component.js +1 -1
- package/esm2015/lib/backdrop/backdrop.module.js +1 -1
- package/esm2015/lib/backdrop/index.js +1 -1
- package/esm2015/lib/badge-icon/badge-icon.directive.js +1 -1
- package/esm2015/lib/badge-icon/badge-icon.module.js +1 -1
- package/esm2015/lib/badge-icon/index.js +1 -1
- package/esm2015/lib/clickout/clickout.directive.js +1 -1
- package/esm2015/lib/clickout/clickout.module.js +1 -1
- package/esm2015/lib/clickout/index.js +1 -1
- package/esm2015/lib/clone/clone.module.js +1 -1
- package/esm2015/lib/clone/clone.pipe.js +1 -1
- package/esm2015/lib/clone/index.js +1 -1
- package/esm2015/lib/collapsible/collapse.directive.js +1 -1
- package/esm2015/lib/collapsible/collapsible.component.js +1 -1
- package/esm2015/lib/collapsible/collapsible.module.js +1 -1
- package/esm2015/lib/collapsible/index.js +1 -1
- package/esm2015/lib/confirm-dialog/confirm-dialog.component.js +1 -1
- package/esm2015/lib/confirm-dialog/confirm-dialog.module.js +1 -1
- package/esm2015/lib/confirm-dialog/confirm-dialog.service.js +1 -1
- package/esm2015/lib/confirm-dialog/index.js +1 -1
- package/esm2015/lib/context-menu/context-menu.directive.js +1 -1
- package/esm2015/lib/context-menu/context-menu.module.js +1 -1
- package/esm2015/lib/context-menu/index.js +1 -1
- package/esm2015/lib/custom-html/custom-html.component.js +1 -1
- package/esm2015/lib/custom-html/custom-html.module.js +1 -1
- package/esm2015/lib/custom-html/custom-html.pipe.js +1 -1
- package/esm2015/lib/custom-html/index.js +1 -1
- package/esm2015/lib/dom/dom.interfaces.js +2 -0
- package/esm2015/lib/dom/dom.module.js +23 -0
- package/esm2015/lib/dom/dom.service.js +33 -0
- package/esm2015/lib/dom/index.js +3 -0
- package/esm2015/lib/drag-drop/drag-drop.module.js +1 -1
- package/esm2015/lib/drag-drop/index.js +1 -1
- package/esm2015/lib/dynamic-component/dynamic-component.module.js +1 -1
- package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.js +5 -2
- package/esm2015/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.js +1 -1
- package/esm2015/lib/dynamic-component/index.js +1 -1
- package/esm2015/lib/dynamic-component/shared/dynamic-component.interfaces.js +1 -1
- package/esm2015/lib/dynamic-component/shared/dynamic-component.js +1 -1
- package/esm2015/lib/dynamic-component/shared/dynamic-component.service.js +1 -1
- package/esm2015/lib/dynamic-component/shared/index.js +1 -1
- package/esm2015/lib/entity/entity-selector/entity-selector.component.js +1 -1
- package/esm2015/lib/entity/entity-selector/entity-selector.module.js +1 -1
- package/esm2015/lib/entity/entity-table/entity-table-row.directive.js +1 -1
- package/esm2015/lib/entity/entity-table/entity-table.component.js +563 -116
- package/esm2015/lib/entity/entity-table/entity-table.module.js +31 -4
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.component.js +1 -1
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.interface.js +1 -1
- package/esm2015/lib/entity/entity-table-paginator/entity-table-paginator.module.js +1 -1
- package/esm2015/lib/entity/entity.module.js +1 -1
- package/esm2015/lib/entity/index.js +1 -1
- package/esm2015/lib/entity/shared/entity.enums.js +2 -1
- package/esm2015/lib/entity/shared/entity.interfaces.js +1 -1
- package/esm2015/lib/entity/shared/entity.utils.js +1 -1
- package/esm2015/lib/entity/shared/index.js +1 -1
- package/esm2015/lib/entity/shared/state.js +1 -1
- package/esm2015/lib/entity/shared/store.js +1 -1
- package/esm2015/lib/entity/shared/strategies/filter-custom-function.js +1 -1
- package/esm2015/lib/entity/shared/strategies/filter-selection.js +1 -1
- package/esm2015/lib/entity/shared/strategies/index.js +1 -1
- package/esm2015/lib/entity/shared/strategies/strategy.js +1 -1
- package/esm2015/lib/entity/shared/transaction.js +1 -1
- package/esm2015/lib/entity/shared/view.js +1 -1
- package/esm2015/lib/entity/shared/watcher.js +1 -1
- package/esm2015/lib/flexible/flexible.component.js +1 -1
- package/esm2015/lib/flexible/flexible.module.js +1 -1
- package/esm2015/lib/flexible/flexible.type.js +1 -1
- package/esm2015/lib/flexible/index.js +1 -1
- package/esm2015/lib/form/form/form.component.js +1 -1
- package/esm2015/lib/form/form/form.module.js +1 -1
- package/esm2015/lib/form/form-field/form-field-select.component.js +1 -1
- package/esm2015/lib/form/form-field/form-field-text.component.js +1 -1
- package/esm2015/lib/form/form-field/form-field-textarea.component.js +1 -1
- package/esm2015/lib/form/form-field/form-field.component.js +1 -1
- package/esm2015/lib/form/form-field/form-field.module.js +1 -1
- package/esm2015/lib/form/form-field/index.js +1 -1
- package/esm2015/lib/form/form-group/form-group.component.js +1 -1
- package/esm2015/lib/form/form-group/form-group.module.js +1 -1
- package/esm2015/lib/form/form.module.js +1 -1
- package/esm2015/lib/form/index.js +1 -1
- package/esm2015/lib/form/shared/form-field-component.js +1 -1
- package/esm2015/lib/form/shared/form-field.service.js +1 -1
- package/esm2015/lib/form/shared/form.interfaces.js +1 -1
- package/esm2015/lib/form/shared/form.service.js +9 -5
- package/esm2015/lib/form/shared/form.utils.js +1 -1
- package/esm2015/lib/form/shared/index.js +1 -1
- package/esm2015/lib/home-button/home-button.component.js +1 -1
- package/esm2015/lib/home-button/home-button.module.js +1 -1
- package/esm2015/lib/home-button/index.js +1 -1
- package/esm2015/lib/image/image.module.js +1 -1
- package/esm2015/lib/image/index.js +1 -1
- package/esm2015/lib/image/secure-image.pipe.js +11 -4
- package/esm2015/lib/interactive-tour/index.js +1 -1
- package/esm2015/lib/interactive-tour/interactive-tour.component.js +1 -1
- package/esm2015/lib/interactive-tour/interactive-tour.interface.js +1 -1
- package/esm2015/lib/interactive-tour/interactive-tour.loader.js +1 -1
- package/esm2015/lib/interactive-tour/interactive-tour.module.js +1 -1
- package/esm2015/lib/interactive-tour/interactive-tour.service.js +1 -1
- package/esm2015/lib/json-dialog/index.js +1 -1
- package/esm2015/lib/json-dialog/json-dialog.component.js +1 -1
- package/esm2015/lib/json-dialog/json-dialog.module.js +1 -1
- package/esm2015/lib/json-dialog/json-dialog.service.js +1 -1
- package/esm2015/lib/keyvalue/index.js +1 -1
- package/esm2015/lib/keyvalue/keyvalue.module.js +1 -1
- package/esm2015/lib/keyvalue/keyvalue.pipe.js +1 -1
- package/esm2015/lib/list/index.js +1 -1
- package/esm2015/lib/list/list-item.directive.js +1 -1
- package/esm2015/lib/list/list.component.js +1 -1
- package/esm2015/lib/list/list.module.js +1 -1
- package/esm2015/lib/panel/index.js +1 -1
- package/esm2015/lib/panel/panel.component.js +1 -1
- package/esm2015/lib/panel/panel.module.js +1 -1
- package/esm2015/lib/sidenav/index.js +1 -1
- package/esm2015/lib/sidenav/sidenav-shim.directive.js +1 -1
- package/esm2015/lib/sidenav/sidenav.module.js +1 -1
- package/esm2015/lib/spinner/index.js +1 -1
- package/esm2015/lib/spinner/spinner-activity.directive.js +1 -1
- package/esm2015/lib/spinner/spinner.component.js +1 -1
- package/esm2015/lib/spinner/spinner.module.js +1 -1
- package/esm2015/lib/stop-propagation/index.js +1 -1
- package/esm2015/lib/stop-propagation/stop-drop-propagation.directive.js +1 -1
- package/esm2015/lib/stop-propagation/stop-propagation.directive.js +1 -1
- package/esm2015/lib/stop-propagation/stop-propagation.module.js +1 -1
- package/esm2015/lib/table/index.js +1 -1
- package/esm2015/lib/table/table-action-color.enum.js +1 -1
- package/esm2015/lib/table/table-database.js +1 -1
- package/esm2015/lib/table/table-datasource.js +1 -1
- package/esm2015/lib/table/table-model.interface.js +1 -1
- package/esm2015/lib/table/table.component.js +1 -1
- package/esm2015/lib/table/table.module.js +1 -1
- package/esm2015/lib/tool/index.js +1 -1
- package/esm2015/lib/tool/shared/index.js +1 -1
- package/esm2015/lib/tool/shared/tool-component.js +1 -1
- package/esm2015/lib/tool/shared/tool.interface.js +1 -1
- package/esm2015/lib/tool/shared/tool.service.js +1 -1
- package/esm2015/lib/tool/shared/toolbox.enums.js +1 -1
- package/esm2015/lib/tool/shared/toolbox.js +1 -1
- package/esm2015/lib/tool/tool.module.js +1 -1
- package/esm2015/lib/tool/toolbox/toolbox.animation.js +1 -1
- package/esm2015/lib/tool/toolbox/toolbox.component.js +1 -1
- package/esm2015/lib/tool/toolbox/toolbox.module.js +1 -1
- package/esm2015/lib/widget/index.js +1 -1
- package/esm2015/lib/widget/shared/index.js +1 -1
- package/esm2015/lib/widget/shared/widget.interfaces.js +1 -1
- package/esm2015/lib/widget/shared/widget.js +1 -1
- package/esm2015/lib/widget/shared/widget.service.js +1 -1
- package/esm2015/lib/widget/widget-outlet/widget-outlet.component.js +1 -1
- package/esm2015/lib/widget/widget-outlet/widget-outlet.module.js +1 -1
- package/esm2015/lib/widget/widget.module.js +1 -1
- package/esm2015/lib/workspace/index.js +1 -1
- package/esm2015/lib/workspace/shared/index.js +1 -1
- package/esm2015/lib/workspace/shared/store.js +1 -1
- package/esm2015/lib/workspace/shared/workspace.interfaces.js +1 -1
- package/esm2015/lib/workspace/shared/workspace.js +1 -1
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.component.js +5 -3
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +1 -1
- package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.js +1 -1
- package/esm2015/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.js +1 -1
- package/esm2015/lib/workspace/workspace.module.js +1 -1
- package/esm2015/public_api.js +3 -1
- package/fesm2015/igo2-common.js +675 -151
- package/fesm2015/igo2-common.js.map +1 -1
- package/lib/dom/dom.interfaces.d.ts +10 -0
- package/lib/dom/dom.module.d.ts +8 -0
- package/lib/dom/dom.service.d.ts +10 -0
- package/lib/dom/index.d.ts +2 -0
- package/lib/entity/entity-table/entity-table.component.d.ts +55 -4
- package/lib/entity/entity-table/entity-table.module.d.ts +17 -11
- package/lib/entity/shared/entity.enums.d.ts +1 -0
- package/lib/entity/shared/entity.interfaces.d.ts +24 -0
- package/lib/image/secure-image.pipe.d.ts +3 -1
- package/lib/workspace/workspace-selector/workspace-selector.component.d.ts +5 -1
- package/package.json +3 -3
- package/public_api.d.ts +2 -0
- package/style/common.theming.scss +12 -12
- package/style/partial/action.scss +18 -18
- package/style/partial/common.variables.scss +8 -8
|
@@ -1,20 +1,33 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, Optional, Self } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from 'rxjs';
|
|
3
3
|
import { EntityTableColumnRenderer, EntityTableSelectionState, EntityTableScrollBehavior } from '../shared';
|
|
4
4
|
import { MatTableDataSource } from '@angular/material/table';
|
|
5
|
+
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
6
|
+
import { FormGroup } from '@angular/forms';
|
|
7
|
+
import { map } from 'rxjs/operators';
|
|
8
|
+
import * as moment_ from 'moment';
|
|
5
9
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/
|
|
7
|
-
import * as i2 from "@angular/
|
|
8
|
-
import * as i3 from "@angular/
|
|
9
|
-
import * as i4 from "@angular/material/
|
|
10
|
-
import * as i5 from "@angular/material/
|
|
11
|
-
import * as i6 from "@angular/
|
|
12
|
-
import * as i7 from "
|
|
13
|
-
import * as i8 from "
|
|
14
|
-
import * as i9 from "
|
|
15
|
-
import * as i10 from "
|
|
16
|
-
import * as i11 from "@
|
|
17
|
-
import * as i12 from "
|
|
10
|
+
import * as i1 from "@angular/forms";
|
|
11
|
+
import * as i2 from "@angular/cdk/a11y";
|
|
12
|
+
import * as i3 from "@angular/material/core";
|
|
13
|
+
import * as i4 from "@angular/material/table";
|
|
14
|
+
import * as i5 from "@angular/material/sort";
|
|
15
|
+
import * as i6 from "@angular/common";
|
|
16
|
+
import * as i7 from "@angular/material/checkbox";
|
|
17
|
+
import * as i8 from "@angular/material/tooltip";
|
|
18
|
+
import * as i9 from "@angular/material/autocomplete";
|
|
19
|
+
import * as i10 from "@angular/material/datepicker";
|
|
20
|
+
import * as i11 from "@angular/material/form-field";
|
|
21
|
+
import * as i12 from "@angular/material/input";
|
|
22
|
+
import * as i13 from "@angular/material/select";
|
|
23
|
+
import * as i14 from "@angular/material/icon";
|
|
24
|
+
import * as i15 from "@angular/material/button";
|
|
25
|
+
import * as i16 from "../../stop-propagation/stop-propagation.directive";
|
|
26
|
+
import * as i17 from "./entity-table-row.directive";
|
|
27
|
+
import * as i18 from "../entity-table-paginator/entity-table-paginator.component";
|
|
28
|
+
import * as i19 from "../../image/secure-image.pipe";
|
|
29
|
+
import * as i20 from "@ngx-translate/core";
|
|
30
|
+
import * as i21 from "../../custom-html/custom-html.pipe";
|
|
18
31
|
function EntityTableComponent_th_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
19
32
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
20
33
|
i0.ɵɵelementContainerStart(0);
|
|
@@ -66,30 +79,32 @@ function EntityTableComponent_ng_container_5_ng_container_1_th_1_Template(rf, ct
|
|
|
66
79
|
i0.ɵɵelementEnd();
|
|
67
80
|
} if (rf & 2) {
|
|
68
81
|
const column_r16 = i0.ɵɵnextContext(2).$implicit;
|
|
82
|
+
i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
|
|
69
83
|
i0.ɵɵadvance(1);
|
|
70
84
|
i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
|
|
71
85
|
} }
|
|
72
86
|
function EntityTableComponent_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
73
87
|
i0.ɵɵelementContainerStart(0);
|
|
74
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2,
|
|
88
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_1_th_1_Template, 2, 2, "th", 15);
|
|
75
89
|
i0.ɵɵelementContainerEnd();
|
|
76
90
|
} }
|
|
77
91
|
function EntityTableComponent_ng_container_5_ng_container_2_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
78
|
-
i0.ɵɵelementStart(0, "th",
|
|
92
|
+
i0.ɵɵelementStart(0, "th", 18);
|
|
79
93
|
i0.ɵɵtext(1);
|
|
80
94
|
i0.ɵɵelementEnd();
|
|
81
95
|
} if (rf & 2) {
|
|
82
96
|
const column_r16 = i0.ɵɵnextContext(2).$implicit;
|
|
97
|
+
i0.ɵɵproperty("matTooltip", column_r16.tooltip ? column_r16.tooltip : undefined);
|
|
83
98
|
i0.ɵɵadvance(1);
|
|
84
99
|
i0.ɵɵtextInterpolate1(" ", column_r16.title, " ");
|
|
85
100
|
} }
|
|
86
101
|
function EntityTableComponent_ng_container_5_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
87
102
|
i0.ɵɵelementContainerStart(0);
|
|
88
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2,
|
|
103
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_2_th_1_Template, 2, 2, "th", 17);
|
|
89
104
|
i0.ɵɵelementContainerEnd();
|
|
90
105
|
} }
|
|
91
106
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
-
i0.ɵɵelementStart(0, "td",
|
|
107
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
93
108
|
i0.ɵɵtext(1);
|
|
94
109
|
i0.ɵɵelementEnd();
|
|
95
110
|
} if (rf & 2) {
|
|
@@ -101,7 +116,7 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
|
|
|
101
116
|
i0.ɵɵtextInterpolate1(" ", ctx_r32.getValue(record_r31, column_r16), " ");
|
|
102
117
|
} }
|
|
103
118
|
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) {
|
|
104
|
-
i0.ɵɵelement(0, "img",
|
|
119
|
+
i0.ɵɵelement(0, "img", 26);
|
|
105
120
|
i0.ɵɵpipe(1, "async");
|
|
106
121
|
i0.ɵɵpipe(2, "secureImage");
|
|
107
122
|
} if (rf & 2) {
|
|
@@ -120,11 +135,11 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
|
|
|
120
135
|
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.common.entity-table.targetHtmlUrl"), " ");
|
|
121
136
|
} }
|
|
122
137
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
123
|
-
i0.ɵɵelementStart(0, "td",
|
|
124
|
-
i0.ɵɵelementStart(1, "a",
|
|
138
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
139
|
+
i0.ɵɵelementStart(1, "a", 23);
|
|
125
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(); });
|
|
126
|
-
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",
|
|
127
|
-
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,
|
|
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);
|
|
128
143
|
i0.ɵɵelementEnd();
|
|
129
144
|
i0.ɵɵelementEnd();
|
|
130
145
|
} if (rf & 2) {
|
|
@@ -140,8 +155,8 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
|
|
|
140
155
|
} }
|
|
141
156
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
142
157
|
i0.ɵɵelementContainerStart(0);
|
|
143
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td",
|
|
144
|
-
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,
|
|
158
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_td_1_Template, 2, 2, "td", 20);
|
|
159
|
+
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);
|
|
145
160
|
i0.ɵɵelementContainerEnd();
|
|
146
161
|
} if (rf & 2) {
|
|
147
162
|
const record_r31 = ctx.$implicit;
|
|
@@ -153,11 +168,11 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_co
|
|
|
153
168
|
} }
|
|
154
169
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
155
170
|
i0.ɵɵelementContainerStart(0);
|
|
156
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container",
|
|
171
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_1_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
157
172
|
i0.ɵɵelementContainerEnd();
|
|
158
173
|
} }
|
|
159
174
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
160
|
-
i0.ɵɵelement(0, "td",
|
|
175
|
+
i0.ɵɵelement(0, "td", 29);
|
|
161
176
|
} if (rf & 2) {
|
|
162
177
|
const record_r47 = i0.ɵɵnextContext().$implicit;
|
|
163
178
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
@@ -165,7 +180,7 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
|
|
|
165
180
|
i0.ɵɵproperty("ngClass", ctx_r48.getCellClass(record_r47, column_r16))("innerHTML", ctx_r48.getValue(record_r47, column_r16), i0.ɵɵsanitizeHtml);
|
|
166
181
|
} }
|
|
167
182
|
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) {
|
|
168
|
-
i0.ɵɵelement(0, "img",
|
|
183
|
+
i0.ɵɵelement(0, "img", 26);
|
|
169
184
|
i0.ɵɵpipe(1, "async");
|
|
170
185
|
i0.ɵɵpipe(2, "secureImage");
|
|
171
186
|
} if (rf & 2) {
|
|
@@ -184,11 +199,11 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
|
|
|
184
199
|
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
|
|
185
200
|
} }
|
|
186
201
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
187
|
-
i0.ɵɵelementStart(0, "td",
|
|
188
|
-
i0.ɵɵelementStart(1, "a",
|
|
202
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
203
|
+
i0.ɵɵelementStart(1, "a", 23);
|
|
189
204
|
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(); });
|
|
190
|
-
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",
|
|
191
|
-
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,
|
|
205
|
+
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);
|
|
206
|
+
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);
|
|
192
207
|
i0.ɵɵelementEnd();
|
|
193
208
|
i0.ɵɵelementEnd();
|
|
194
209
|
} if (rf & 2) {
|
|
@@ -204,8 +219,8 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
|
|
|
204
219
|
} }
|
|
205
220
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
206
221
|
i0.ɵɵelementContainerStart(0);
|
|
207
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td",
|
|
208
|
-
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,
|
|
222
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_td_1_Template, 1, 2, "td", 27);
|
|
223
|
+
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);
|
|
209
224
|
i0.ɵɵelementContainerEnd();
|
|
210
225
|
} if (rf & 2) {
|
|
211
226
|
const record_r47 = ctx.$implicit;
|
|
@@ -217,29 +232,185 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_co
|
|
|
217
232
|
} }
|
|
218
233
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
219
234
|
i0.ɵɵelementContainerStart(0);
|
|
220
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container",
|
|
235
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_2_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
221
236
|
i0.ɵɵelementContainerEnd();
|
|
222
237
|
} }
|
|
238
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
239
|
+
const _r79 = i0.ɵɵgetCurrentView();
|
|
240
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
241
|
+
i0.ɵɵelement(1, "mat-datepicker-toggle", 44);
|
|
242
|
+
i0.ɵɵelementStart(2, "input", 45);
|
|
243
|
+
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 record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r77 = i0.ɵɵnextContext(); return ctx_r77.onDateChange(column_r16.name, record_r63, $event); });
|
|
244
|
+
i0.ɵɵelementEnd();
|
|
245
|
+
i0.ɵɵelement(3, "mat-datepicker", null, 46);
|
|
246
|
+
i0.ɵɵelementEnd();
|
|
247
|
+
} if (rf & 2) {
|
|
248
|
+
const _r76 = i0.ɵɵreference(4);
|
|
249
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
250
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
251
|
+
const ctx_r67 = i0.ɵɵnextContext();
|
|
252
|
+
i0.ɵɵadvance(1);
|
|
253
|
+
i0.ɵɵproperty("for", _r76);
|
|
254
|
+
i0.ɵɵadvance(1);
|
|
255
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r67.getValue(record_r63, column_r16));
|
|
256
|
+
i0.ɵɵproperty("matDatepicker", _r76)("formControlName", column_r16.name);
|
|
257
|
+
} }
|
|
258
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_2_Template(rf, ctx) { if (rf & 1) {
|
|
259
|
+
const _r85 = i0.ɵɵgetCurrentView();
|
|
260
|
+
i0.ɵɵelementStart(0, "input", 47);
|
|
261
|
+
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 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 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 column_r16.onBlur($event); });
|
|
262
|
+
i0.ɵɵelementEnd();
|
|
263
|
+
} if (rf & 2) {
|
|
264
|
+
const column_r16 = i0.ɵɵnextContext(5).$implicit;
|
|
265
|
+
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
266
|
+
} }
|
|
267
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_3_Template(rf, ctx) { if (rf & 1) {
|
|
268
|
+
const _r93 = i0.ɵɵgetCurrentView();
|
|
269
|
+
i0.ɵɵelementStart(0, "input", 48);
|
|
270
|
+
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 record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r91 = i0.ɵɵnextContext(); return ctx_r91.onValueChange(column_r16.name, record_r63, $event); });
|
|
271
|
+
i0.ɵɵelementEnd();
|
|
272
|
+
} if (rf & 2) {
|
|
273
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
274
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
275
|
+
const ctx_r69 = i0.ɵɵnextContext();
|
|
276
|
+
i0.ɵɵpropertyInterpolate("step", column_r16.step);
|
|
277
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r69.getValue(record_r63, column_r16));
|
|
278
|
+
i0.ɵɵpropertyInterpolate("readonly", ctx_r69.getValidationAttributeValue(column_r16, "readonly"));
|
|
279
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r69.getValidationAttributeValue(column_r16, "mandatory"));
|
|
280
|
+
i0.ɵɵpropertyInterpolate("min", ctx_r69.getValidationAttributeValue(column_r16, "minValue"));
|
|
281
|
+
i0.ɵɵpropertyInterpolate("max", ctx_r69.getValidationAttributeValue(column_r16, "maxValue"));
|
|
282
|
+
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
283
|
+
} }
|
|
284
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_4_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
const _r99 = i0.ɵɵgetCurrentView();
|
|
286
|
+
i0.ɵɵelementStart(0, "input", 49);
|
|
287
|
+
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 record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r97 = i0.ɵɵnextContext(); return ctx_r97.onValueChange(column_r16.name, record_r63, $event); });
|
|
288
|
+
i0.ɵɵelementEnd();
|
|
289
|
+
} if (rf & 2) {
|
|
290
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
291
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
292
|
+
const ctx_r70 = i0.ɵɵnextContext();
|
|
293
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r70.getValue(record_r63, column_r16));
|
|
294
|
+
i0.ɵɵpropertyInterpolate("readonly", ctx_r70.getValidationAttributeValue(column_r16, "readonly"));
|
|
295
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r70.getValidationAttributeValue(column_r16, "mandatory"));
|
|
296
|
+
i0.ɵɵproperty("formControlName", column_r16.name);
|
|
297
|
+
} }
|
|
298
|
+
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) {
|
|
299
|
+
const _r105 = i0.ɵɵgetCurrentView();
|
|
300
|
+
i0.ɵɵelementStart(0, "mat-checkbox", 50);
|
|
301
|
+
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 record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r103 = i0.ɵɵnextContext(); return ctx_r103.onBooleanValueChange(column_r16.name, record_r63, $event); });
|
|
302
|
+
i0.ɵɵelementEnd();
|
|
303
|
+
} if (rf & 2) {
|
|
304
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
305
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
306
|
+
const ctx_r71 = i0.ɵɵnextContext();
|
|
307
|
+
i0.ɵɵproperty("formControlName", column_r16.name)("checked", ctx_r71.getValue(record_r63, column_r16));
|
|
308
|
+
} }
|
|
309
|
+
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) {
|
|
310
|
+
i0.ɵɵelementStart(0, "mat-option", 53);
|
|
311
|
+
i0.ɵɵtext(1);
|
|
312
|
+
i0.ɵɵelementEnd();
|
|
313
|
+
} if (rf & 2) {
|
|
314
|
+
const option_r110 = ctx.$implicit;
|
|
315
|
+
i0.ɵɵproperty("value", option_r110.id)("disabled", option_r110.disabled);
|
|
316
|
+
i0.ɵɵadvance(1);
|
|
317
|
+
i0.ɵɵtextInterpolate1(" ", option_r110.value, " ");
|
|
318
|
+
} }
|
|
319
|
+
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) {
|
|
320
|
+
const _r113 = i0.ɵɵgetCurrentView();
|
|
321
|
+
i0.ɵɵelementStart(0, "mat-select", 51);
|
|
322
|
+
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 record_r63 = i0.ɵɵnextContext(2).$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r111 = i0.ɵɵnextContext(); return ctx_r111.onSelectValueChange(column_r16.name, record_r63, $event); });
|
|
323
|
+
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);
|
|
324
|
+
i0.ɵɵelementEnd();
|
|
325
|
+
} if (rf & 2) {
|
|
326
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
327
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
328
|
+
const ctx_r72 = i0.ɵɵnextContext();
|
|
329
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r72.getValidationAttributeValue(column_r16, "mandatory"));
|
|
330
|
+
i0.ɵɵproperty("formControlName", column_r16.name)("multiple", column_r16.multiple)("value", ctx_r72.getValue(record_r63, column_r16));
|
|
331
|
+
i0.ɵɵadvance(1);
|
|
332
|
+
i0.ɵɵproperty("ngForOf", column_r16.domainValues);
|
|
333
|
+
} }
|
|
334
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template(rf, ctx) { if (rf & 1) {
|
|
335
|
+
i0.ɵɵelement(0, "input", 54);
|
|
336
|
+
} if (rf & 2) {
|
|
337
|
+
i0.ɵɵnextContext();
|
|
338
|
+
const _r74 = i0.ɵɵreference(9);
|
|
339
|
+
const record_r63 = i0.ɵɵnextContext().$implicit;
|
|
340
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
341
|
+
const ctx_r73 = i0.ɵɵnextContext();
|
|
342
|
+
i0.ɵɵpropertyInterpolate("required", ctx_r73.getValidationAttributeValue(column_r16, "mandatory"));
|
|
343
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r73.getValue(record_r63, column_r16));
|
|
344
|
+
i0.ɵɵproperty("formControlName", column_r16.name)("matAutocomplete", _r74);
|
|
345
|
+
} }
|
|
346
|
+
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) {
|
|
347
|
+
i0.ɵɵelementStart(0, "mat-option", 55);
|
|
348
|
+
i0.ɵɵtext(1);
|
|
349
|
+
i0.ɵɵelementEnd();
|
|
350
|
+
} if (rf & 2) {
|
|
351
|
+
const option_r119 = ctx.$implicit;
|
|
352
|
+
i0.ɵɵproperty("value", option_r119.id);
|
|
353
|
+
i0.ɵɵadvance(1);
|
|
354
|
+
i0.ɵɵtextInterpolate1(" ", option_r119.value, " ");
|
|
355
|
+
} }
|
|
223
356
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
224
|
-
i0.ɵɵ
|
|
225
|
-
i0.ɵɵ
|
|
357
|
+
const _r122 = i0.ɵɵgetCurrentView();
|
|
358
|
+
i0.ɵɵelementStart(0, "td", 32);
|
|
359
|
+
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);
|
|
360
|
+
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);
|
|
361
|
+
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);
|
|
362
|
+
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);
|
|
363
|
+
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);
|
|
364
|
+
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);
|
|
365
|
+
i0.ɵɵtemplate(7, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_input_7_Template, 1, 4, "input", 39);
|
|
366
|
+
i0.ɵɵelementStart(8, "mat-autocomplete", 40, 41);
|
|
367
|
+
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 record_r63 = i0.ɵɵnextContext().$implicit; const column_r16 = i0.ɵɵnextContext(3).$implicit; const ctx_r120 = i0.ɵɵnextContext(); return ctx_r120.onAutocompleteValueChange(column_r16.name, record_r63, $event); });
|
|
368
|
+
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);
|
|
369
|
+
i0.ɵɵpipe(11, "async");
|
|
370
|
+
i0.ɵɵelementEnd();
|
|
371
|
+
i0.ɵɵelementEnd();
|
|
226
372
|
} if (rf & 2) {
|
|
227
373
|
const record_r63 = i0.ɵɵnextContext().$implicit;
|
|
228
374
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
229
375
|
const ctx_r64 = i0.ɵɵnextContext();
|
|
230
|
-
i0.ɵɵproperty("
|
|
376
|
+
i0.ɵɵproperty("formGroup", ctx_r64.formGroup)("ngClass", ctx_r64.getCellClass(record_r63, column_r16));
|
|
377
|
+
i0.ɵɵadvance(1);
|
|
378
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "date");
|
|
379
|
+
i0.ɵɵadvance(1);
|
|
380
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "time");
|
|
381
|
+
i0.ɵɵadvance(1);
|
|
382
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "number");
|
|
383
|
+
i0.ɵɵadvance(1);
|
|
384
|
+
i0.ɵɵproperty("ngIf", !column_r16.type || column_r16.type === "string");
|
|
385
|
+
i0.ɵɵadvance(1);
|
|
386
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "boolean");
|
|
387
|
+
i0.ɵɵadvance(1);
|
|
388
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "list");
|
|
389
|
+
i0.ɵɵadvance(1);
|
|
390
|
+
i0.ɵɵproperty("ngIf", column_r16.type === "autocomplete");
|
|
391
|
+
i0.ɵɵadvance(3);
|
|
392
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 10, ctx_r64.filteredOptions));
|
|
393
|
+
} }
|
|
394
|
+
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) {
|
|
395
|
+
i0.ɵɵelement(0, "td", 29);
|
|
396
|
+
i0.ɵɵpipe(1, "sanitizeHtml");
|
|
397
|
+
} if (rf & 2) {
|
|
398
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
399
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
400
|
+
const ctx_r126 = i0.ɵɵnextContext();
|
|
401
|
+
i0.ɵɵproperty("ngClass", ctx_r126.getCellClass(record_r63, column_r16))("innerHTML", i0.ɵɵpipeBind1(1, 2, ctx_r126.getValue(record_r63, column_r16)), i0.ɵɵsanitizeHtml);
|
|
231
402
|
} }
|
|
232
|
-
function
|
|
233
|
-
i0.ɵɵelement(0, "img",
|
|
403
|
+
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) {
|
|
404
|
+
i0.ɵɵelement(0, "img", 26);
|
|
234
405
|
i0.ɵɵpipe(1, "async");
|
|
235
406
|
i0.ɵɵpipe(2, "secureImage");
|
|
236
407
|
} if (rf & 2) {
|
|
237
|
-
const record_r63 = i0.ɵɵnextContext(
|
|
408
|
+
const record_r63 = i0.ɵɵnextContext(3).$implicit;
|
|
238
409
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
239
|
-
const
|
|
240
|
-
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3,
|
|
410
|
+
const ctx_r131 = i0.ɵɵnextContext();
|
|
411
|
+
i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(1, 1, i0.ɵɵpipeBind1(2, 3, ctx_r131.getValue(record_r63, column_r16))), i0.ɵɵsanitizeUrl);
|
|
241
412
|
} }
|
|
242
|
-
function
|
|
413
|
+
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) {
|
|
243
414
|
i0.ɵɵelementStart(0, "span");
|
|
244
415
|
i0.ɵɵtext(1);
|
|
245
416
|
i0.ɵɵpipe(2, "translate");
|
|
@@ -248,111 +419,137 @@ function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_co
|
|
|
248
419
|
i0.ɵɵadvance(1);
|
|
249
420
|
i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(2, 1, "igo.geo.targetHtmlUrl"), " ");
|
|
250
421
|
} }
|
|
251
|
-
function
|
|
252
|
-
i0.ɵɵelementStart(0, "td",
|
|
253
|
-
i0.ɵɵelementStart(1, "a",
|
|
254
|
-
i0.ɵɵlistener("click", function
|
|
255
|
-
i0.ɵɵtemplate(2,
|
|
256
|
-
i0.ɵɵtemplate(3,
|
|
422
|
+
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) {
|
|
423
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
424
|
+
i0.ɵɵelementStart(1, "a", 23);
|
|
425
|
+
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(); });
|
|
426
|
+
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);
|
|
427
|
+
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);
|
|
257
428
|
i0.ɵɵelementEnd();
|
|
258
429
|
i0.ɵɵelementEnd();
|
|
259
430
|
} if (rf & 2) {
|
|
260
|
-
const
|
|
261
|
-
const record_r63 = i0.ɵɵnextContext().$implicit;
|
|
431
|
+
const _r132 = i0.ɵɵreference(4);
|
|
432
|
+
const record_r63 = i0.ɵɵnextContext(2).$implicit;
|
|
262
433
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
263
|
-
const
|
|
264
|
-
i0.ɵɵproperty("ngClass",
|
|
434
|
+
const ctx_r128 = i0.ɵɵnextContext();
|
|
435
|
+
i0.ɵɵproperty("ngClass", ctx_r128.getCellClass(record_r63, column_r16));
|
|
265
436
|
i0.ɵɵadvance(1);
|
|
266
|
-
i0.ɵɵpropertyInterpolate("href",
|
|
437
|
+
i0.ɵɵpropertyInterpolate("href", ctx_r128.getValue(record_r63, column_r16), i0.ɵɵsanitizeUrl);
|
|
267
438
|
i0.ɵɵadvance(1);
|
|
268
|
-
i0.ɵɵproperty("ngIf",
|
|
439
|
+
i0.ɵɵproperty("ngIf", ctx_r128.isImg(ctx_r128.getValue(record_r63, column_r16)))("ngIfElse", _r132);
|
|
440
|
+
} }
|
|
441
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
+
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);
|
|
443
|
+
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);
|
|
444
|
+
} if (rf & 2) {
|
|
445
|
+
const _r127 = i0.ɵɵreference(2);
|
|
446
|
+
const record_r63 = i0.ɵɵnextContext().$implicit;
|
|
447
|
+
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
448
|
+
const ctx_r66 = i0.ɵɵnextContext();
|
|
449
|
+
i0.ɵɵproperty("ngIf", !ctx_r66.isUrl(ctx_r66.getValue(record_r63, column_r16)))("ngIfElse", _r127);
|
|
269
450
|
} }
|
|
270
451
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
271
452
|
i0.ɵɵelementContainerStart(0);
|
|
272
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template,
|
|
273
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_ng_template_2_Template,
|
|
453
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_td_1_Template, 12, 12, "td", 30);
|
|
454
|
+
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);
|
|
274
455
|
i0.ɵɵelementContainerEnd();
|
|
275
456
|
} if (rf & 2) {
|
|
276
457
|
const record_r63 = ctx.$implicit;
|
|
277
458
|
const _r65 = i0.ɵɵreference(3);
|
|
278
|
-
const
|
|
279
|
-
const ctx_r62 = i0.ɵɵnextContext();
|
|
459
|
+
const ctx_r62 = i0.ɵɵnextContext(4);
|
|
280
460
|
i0.ɵɵadvance(1);
|
|
281
|
-
i0.ɵɵproperty("ngIf",
|
|
461
|
+
i0.ɵɵproperty("ngIf", ctx_r62.isEdition(record_r63))("ngIfElse", _r65);
|
|
282
462
|
} }
|
|
283
463
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
284
464
|
i0.ɵɵelementContainerStart(0);
|
|
285
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container",
|
|
465
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_3_ng_container_1_Template, 4, 2, "ng-container", 19);
|
|
286
466
|
i0.ɵɵelementContainerEnd();
|
|
287
467
|
} }
|
|
288
468
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
-
i0.ɵɵ
|
|
290
|
-
i0.ɵɵ
|
|
469
|
+
const _r145 = i0.ɵɵgetCurrentView();
|
|
470
|
+
i0.ɵɵelementStart(0, "td", 22);
|
|
471
|
+
i0.ɵɵelementStart(1, "mat-icon", 58);
|
|
472
|
+
i0.ɵɵlistener("click", function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template_mat_icon_click_1_listener($event) { i0.ɵɵrestoreView(_r145); const column_r16 = i0.ɵɵnextContext(3).$implicit; return column_r16.onClick($event); });
|
|
473
|
+
i0.ɵɵelementEnd();
|
|
291
474
|
i0.ɵɵelementEnd();
|
|
292
475
|
} if (rf & 2) {
|
|
293
|
-
const
|
|
476
|
+
const record_r142 = ctx.$implicit;
|
|
294
477
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
295
|
-
const
|
|
296
|
-
i0.ɵɵproperty("ngClass",
|
|
478
|
+
const ctx_r141 = i0.ɵɵnextContext();
|
|
479
|
+
i0.ɵɵproperty("ngClass", ctx_r141.getCellClass(record_r142, column_r16));
|
|
297
480
|
i0.ɵɵadvance(1);
|
|
298
|
-
i0.ɵɵpropertyInterpolate("svgIcon",
|
|
481
|
+
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r141.getValue(record_r142, column_r16) || column_r16.icon);
|
|
299
482
|
} }
|
|
300
483
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
301
484
|
i0.ɵɵelementContainerStart(0);
|
|
302
|
-
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 2, 2, "td",
|
|
485
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_4_td_1_Template, 2, 2, "td", 57);
|
|
303
486
|
i0.ɵɵelementContainerEnd();
|
|
304
487
|
} }
|
|
305
|
-
function
|
|
306
|
-
const
|
|
307
|
-
i0.ɵɵelementStart(0, "button",
|
|
308
|
-
i0.ɵɵlistener("
|
|
309
|
-
i0.ɵɵelement(1, "mat-icon",
|
|
488
|
+
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) {
|
|
489
|
+
const _r156 = i0.ɵɵgetCurrentView();
|
|
490
|
+
i0.ɵɵelementStart(0, "button", 62);
|
|
491
|
+
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(_r156); const button_r150 = i0.ɵɵnextContext(2).$implicit; const record_r148 = i0.ɵɵnextContext().$implicit; const ctx_r154 = i0.ɵɵnextContext(4); return ctx_r154.onButtonClick(button_r150.click, record_r148); });
|
|
492
|
+
i0.ɵɵelement(1, "mat-icon", 63);
|
|
310
493
|
i0.ɵɵelementEnd();
|
|
311
494
|
} if (rf & 2) {
|
|
312
|
-
const
|
|
313
|
-
i0.ɵɵproperty("color",
|
|
495
|
+
const button_r150 = i0.ɵɵnextContext(2).$implicit;
|
|
496
|
+
i0.ɵɵproperty("color", button_r150.color)("disabled", button_r150.disabled);
|
|
314
497
|
i0.ɵɵadvance(1);
|
|
315
|
-
i0.ɵɵpropertyInterpolate("svgIcon",
|
|
498
|
+
i0.ɵɵpropertyInterpolate("svgIcon", button_r150.icon);
|
|
316
499
|
} }
|
|
317
|
-
function
|
|
318
|
-
const
|
|
319
|
-
i0.ɵɵelementStart(0, "button",
|
|
320
|
-
i0.ɵɵlistener("
|
|
321
|
-
i0.ɵɵelement(1, "mat-icon",
|
|
500
|
+
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) {
|
|
501
|
+
const _r161 = i0.ɵɵgetCurrentView();
|
|
502
|
+
i0.ɵɵelementStart(0, "button", 64);
|
|
503
|
+
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(_r161); const button_r150 = i0.ɵɵnextContext(2).$implicit; const record_r148 = i0.ɵɵnextContext().$implicit; const ctx_r159 = i0.ɵɵnextContext(4); return ctx_r159.onButtonClick(button_r150.click, record_r148); });
|
|
504
|
+
i0.ɵɵelement(1, "mat-icon", 63);
|
|
322
505
|
i0.ɵɵelementEnd();
|
|
323
506
|
} if (rf & 2) {
|
|
324
|
-
const
|
|
325
|
-
i0.ɵɵproperty("color",
|
|
507
|
+
const button_r150 = i0.ɵɵnextContext(2).$implicit;
|
|
508
|
+
i0.ɵɵproperty("color", button_r150.color)("disabled", button_r150.disabled);
|
|
509
|
+
i0.ɵɵadvance(1);
|
|
510
|
+
i0.ɵɵpropertyInterpolate("svgIcon", button_r150.icon);
|
|
511
|
+
} }
|
|
512
|
+
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) {
|
|
513
|
+
i0.ɵɵelementContainerStart(0);
|
|
514
|
+
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", 60);
|
|
515
|
+
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", 61);
|
|
516
|
+
i0.ɵɵelementContainerEnd();
|
|
517
|
+
} if (rf & 2) {
|
|
518
|
+
const button_r150 = i0.ɵɵnextContext().$implicit;
|
|
519
|
+
i0.ɵɵadvance(1);
|
|
520
|
+
i0.ɵɵproperty("ngIf", button_r150.style === "mat-icon-button");
|
|
326
521
|
i0.ɵɵadvance(1);
|
|
327
|
-
i0.ɵɵ
|
|
522
|
+
i0.ɵɵproperty("ngIf", button_r150.style !== "mat-icon-button");
|
|
328
523
|
} }
|
|
329
|
-
function
|
|
524
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
330
525
|
i0.ɵɵelementStart(0, "span");
|
|
331
|
-
i0.ɵɵtemplate(1,
|
|
332
|
-
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_td_1_span_1_button_2_Template, 2, 2, "button", 33);
|
|
526
|
+
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);
|
|
333
527
|
i0.ɵɵelementEnd();
|
|
334
528
|
} if (rf & 2) {
|
|
335
|
-
const
|
|
529
|
+
const button_r150 = ctx.$implicit;
|
|
530
|
+
const record_r148 = i0.ɵɵnextContext().$implicit;
|
|
531
|
+
const ctx_r149 = i0.ɵɵnextContext(4);
|
|
336
532
|
i0.ɵɵadvance(1);
|
|
337
|
-
i0.ɵɵproperty("ngIf",
|
|
338
|
-
i0.ɵɵadvance(1);
|
|
339
|
-
i0.ɵɵproperty("ngIf", button_r84.style !== "mat-icon-button");
|
|
533
|
+
i0.ɵɵproperty("ngIf", ctx_r149.isEdition(record_r148) === button_r150.editMode);
|
|
340
534
|
} }
|
|
341
|
-
function
|
|
342
|
-
i0.ɵɵ
|
|
343
|
-
i0.ɵɵ
|
|
535
|
+
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
536
|
+
i0.ɵɵelementContainerStart(0);
|
|
537
|
+
i0.ɵɵelementStart(1, "td", 22);
|
|
538
|
+
i0.ɵɵtemplate(2, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_span_2_Template, 2, 1, "span", 59);
|
|
344
539
|
i0.ɵɵelementEnd();
|
|
540
|
+
i0.ɵɵelementContainerEnd();
|
|
345
541
|
} if (rf & 2) {
|
|
346
|
-
const
|
|
542
|
+
const record_r148 = ctx.$implicit;
|
|
347
543
|
const column_r16 = i0.ɵɵnextContext(3).$implicit;
|
|
348
|
-
const
|
|
349
|
-
i0.ɵɵ
|
|
544
|
+
const ctx_r147 = i0.ɵɵnextContext();
|
|
545
|
+
i0.ɵɵadvance(1);
|
|
546
|
+
i0.ɵɵproperty("ngClass", ctx_r147.getCellClass(record_r148, column_r16));
|
|
350
547
|
i0.ɵɵadvance(1);
|
|
351
|
-
i0.ɵɵproperty("ngForOf",
|
|
548
|
+
i0.ɵɵproperty("ngForOf", ctx_r147.getValue(record_r148, column_r16));
|
|
352
549
|
} }
|
|
353
550
|
function EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
354
551
|
i0.ɵɵelementContainerStart(0);
|
|
355
|
-
i0.ɵɵtemplate(1,
|
|
552
|
+
i0.ɵɵtemplate(1, EntityTableComponent_ng_container_5_ng_container_3_ng_container_5_ng_container_1_Template, 3, 2, "ng-container", 19);
|
|
356
553
|
i0.ɵɵelementContainerEnd();
|
|
357
554
|
} }
|
|
358
555
|
function EntityTableComponent_ng_container_5_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
@@ -395,34 +592,44 @@ function EntityTableComponent_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
|
395
592
|
i0.ɵɵproperty("ngIf", ctx_r2.getColumnRenderer(column_r16));
|
|
396
593
|
} }
|
|
397
594
|
function EntityTableComponent_tr_6_Template(rf, ctx) { if (rf & 1) {
|
|
398
|
-
i0.ɵɵelement(0, "tr",
|
|
595
|
+
i0.ɵɵelement(0, "tr", 65);
|
|
399
596
|
} if (rf & 2) {
|
|
400
597
|
const ctx_r3 = i0.ɵɵnextContext();
|
|
401
598
|
i0.ɵɵproperty("ngClass", ctx_r3.getHeaderClass());
|
|
402
599
|
} }
|
|
403
600
|
function EntityTableComponent_tr_7_Template(rf, ctx) { if (rf & 1) {
|
|
404
|
-
const
|
|
405
|
-
i0.ɵɵelementStart(0, "tr",
|
|
406
|
-
i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(
|
|
601
|
+
const _r169 = i0.ɵɵgetCurrentView();
|
|
602
|
+
i0.ɵɵelementStart(0, "tr", 66);
|
|
603
|
+
i0.ɵɵlistener("select", function EntityTableComponent_tr_7_Template_tr_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r169); const record_r167 = restoredCtx.$implicit; const ctx_r168 = i0.ɵɵnextContext(); return ctx_r168.onRowSelect(record_r167); })("click", function EntityTableComponent_tr_7_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r169); const record_r167 = restoredCtx.$implicit; const ctx_r170 = i0.ɵɵnextContext(); return ctx_r170.onRowClick(record_r167); });
|
|
407
604
|
i0.ɵɵelementEnd();
|
|
408
605
|
} if (rf & 2) {
|
|
409
|
-
const
|
|
606
|
+
const record_r167 = ctx.$implicit;
|
|
410
607
|
const ctx_r4 = i0.ɵɵnextContext();
|
|
411
|
-
i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(
|
|
608
|
+
i0.ɵɵproperty("scrollBehavior", ctx_r4.scrollBehavior)("ngClass", ctx_r4.getRowClass(record_r167))("selection", ctx_r4.selection)("selected", ctx_r4.rowIsSelected(record_r167));
|
|
412
609
|
} }
|
|
413
610
|
function EntityTableComponent_igo_entity_table_paginator_8_Template(rf, ctx) { if (rf & 1) {
|
|
414
|
-
const
|
|
415
|
-
i0.ɵɵelementStart(0, "igo-entity-table-paginator",
|
|
416
|
-
i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
611
|
+
const _r172 = i0.ɵɵgetCurrentView();
|
|
612
|
+
i0.ɵɵelementStart(0, "igo-entity-table-paginator", 67);
|
|
613
|
+
i0.ɵɵlistener("paginatorChange", function EntityTableComponent_igo_entity_table_paginator_8_Template_igo_entity_table_paginator_paginatorChange_0_listener($event) { i0.ɵɵrestoreView(_r172); const ctx_r171 = i0.ɵɵnextContext(); return ctx_r171.paginatorChange($event); });
|
|
417
614
|
i0.ɵɵelementEnd();
|
|
418
615
|
} if (rf & 2) {
|
|
419
616
|
const ctx_r5 = i0.ɵɵnextContext();
|
|
420
617
|
i0.ɵɵproperty("store", ctx_r5.store)("paginatorOptions", ctx_r5.paginatorOptions)("entitySortChange$", ctx_r5.entitySortChange$);
|
|
421
618
|
} }
|
|
619
|
+
const moment = moment_;
|
|
422
620
|
export class EntityTableComponent {
|
|
423
|
-
constructor(cdRef) {
|
|
621
|
+
constructor(cdRef, formBuilder, _focusMonitor, _elementRef, ngControl, _parentForm, _controlName, _defaultErrorStateMatcher, dateAdapter) {
|
|
424
622
|
this.cdRef = cdRef;
|
|
623
|
+
this.formBuilder = formBuilder;
|
|
624
|
+
this._focusMonitor = _focusMonitor;
|
|
625
|
+
this._elementRef = _elementRef;
|
|
626
|
+
this.ngControl = ngControl;
|
|
627
|
+
this._parentForm = _parentForm;
|
|
628
|
+
this._controlName = _controlName;
|
|
629
|
+
this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
|
|
630
|
+
this.dateAdapter = dateAdapter;
|
|
425
631
|
this.entitySortChange$ = new BehaviorSubject(false);
|
|
632
|
+
this.formGroup = new FormGroup({});
|
|
426
633
|
/**
|
|
427
634
|
* Reference to the column renderer types
|
|
428
635
|
* @internal
|
|
@@ -467,6 +674,7 @@ export class EntityTableComponent {
|
|
|
467
674
|
* @internal
|
|
468
675
|
*/
|
|
469
676
|
this.dataSource = new MatTableDataSource();
|
|
677
|
+
this.dateAdapter.setLocale('fr-CA');
|
|
470
678
|
}
|
|
471
679
|
/**
|
|
472
680
|
* Table paginator
|
|
@@ -528,6 +736,122 @@ export class EntityTableComponent {
|
|
|
528
736
|
this.handleDatasource();
|
|
529
737
|
}
|
|
530
738
|
}
|
|
739
|
+
/**
|
|
740
|
+
* Process text or number value change (edition)
|
|
741
|
+
*/
|
|
742
|
+
onValueChange(column, record, event) {
|
|
743
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
744
|
+
record.entity.properties[key] = event.target.value;
|
|
745
|
+
}
|
|
746
|
+
/**
|
|
747
|
+
* Process boolean value change (edition)
|
|
748
|
+
*/
|
|
749
|
+
onBooleanValueChange(column, record, event) {
|
|
750
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
751
|
+
record.entity.properties[key] = event.checked;
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* Process select value change (edition)
|
|
755
|
+
*/
|
|
756
|
+
onSelectValueChange(column, record, event) {
|
|
757
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
758
|
+
record.entity.properties[key] = event.value;
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* Process autocomplete value change (edition)
|
|
762
|
+
*/
|
|
763
|
+
onAutocompleteValueChange(column, record, event) {
|
|
764
|
+
this.formGroup.controls[column].setValue(event.option.viewValue);
|
|
765
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
766
|
+
record.entity.properties[key] = event.option.value;
|
|
767
|
+
}
|
|
768
|
+
/**
|
|
769
|
+
* Process date value change (edition)
|
|
770
|
+
*/
|
|
771
|
+
onDateChange(column, record, event) {
|
|
772
|
+
const format = "YYYY-MM-DD";
|
|
773
|
+
const value = moment(event.value).format(format);
|
|
774
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column);
|
|
775
|
+
record.entity.properties[key] = value;
|
|
776
|
+
}
|
|
777
|
+
/**
|
|
778
|
+
* Enable edition mode for one row
|
|
779
|
+
* More than one row can be edited at the same time
|
|
780
|
+
*/
|
|
781
|
+
enableEdit(record) {
|
|
782
|
+
const item = record.entity.properties || record.entity;
|
|
783
|
+
this.template.columns.forEach(column => {
|
|
784
|
+
var _a;
|
|
785
|
+
column.title = ((_a = column.validation) === null || _a === void 0 ? void 0 : _a.mandatory) && !column.title.includes('*') ? column.title + ' *' : column.title;
|
|
786
|
+
const key = this.getColumnKeyWithoutPropertiesTag(column.name);
|
|
787
|
+
if (column.type === 'boolean') {
|
|
788
|
+
if (!item[key] || item[key] === null) {
|
|
789
|
+
item[key] = false;
|
|
790
|
+
}
|
|
791
|
+
else if (typeof item[key] === 'string') {
|
|
792
|
+
item[key] = JSON.parse(item[key].toLowerCase());
|
|
793
|
+
}
|
|
794
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
795
|
+
}
|
|
796
|
+
else if (column.type === 'list') {
|
|
797
|
+
if (column.multiple) {
|
|
798
|
+
this.formGroup.setControl(column.name, this.formBuilder.control([item[key]]));
|
|
799
|
+
}
|
|
800
|
+
else {
|
|
801
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
802
|
+
typeof item[key] === 'string' ?
|
|
803
|
+
this.formGroup.controls[column.name].setValue(parseInt(item[key])) :
|
|
804
|
+
this.formGroup.controls[column.name].setValue(item[key]);
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
else if (column.type === 'autocomplete') {
|
|
808
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
809
|
+
this.filteredOptions = this.formGroup.controls[column.name].valueChanges.pipe(map(value => {
|
|
810
|
+
if (value.length) {
|
|
811
|
+
return column.domainValues.filter((option) => {
|
|
812
|
+
const filterNormalized = value ? value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '') : '';
|
|
813
|
+
const featureNameNormalized = option.value.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
814
|
+
return featureNameNormalized.includes(filterNormalized);
|
|
815
|
+
});
|
|
816
|
+
}
|
|
817
|
+
}));
|
|
818
|
+
let formControlValue = item[key];
|
|
819
|
+
column.domainValues.forEach(option => {
|
|
820
|
+
if (typeof formControlValue === 'string' && /^\d+$/.test(formControlValue)) {
|
|
821
|
+
formControlValue = parseInt(formControlValue);
|
|
822
|
+
}
|
|
823
|
+
if (option.value === formControlValue || option.id === formControlValue) {
|
|
824
|
+
formControlValue = option.value;
|
|
825
|
+
}
|
|
826
|
+
});
|
|
827
|
+
this.formGroup.controls[column.name].setValue(formControlValue);
|
|
828
|
+
if (this.isEdition(record) && column.linkColumnForce) {
|
|
829
|
+
const entity = record.entity;
|
|
830
|
+
this.formGroup.controls[column.name].setValue(entity === null || entity === void 0 ? void 0 : entity.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)]);
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
else if (column.type === 'date') {
|
|
834
|
+
if (column.visible) {
|
|
835
|
+
if (item[key]) {
|
|
836
|
+
let date = moment(item[key]);
|
|
837
|
+
item[key] = date.utc().format('YYYY-MM-DD');
|
|
838
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
839
|
+
}
|
|
840
|
+
else {
|
|
841
|
+
const newKey = this.getColumnKeyWithoutPropertiesTag(column.name);
|
|
842
|
+
record.entity.properties[newKey] = null;
|
|
843
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(null));
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
else {
|
|
848
|
+
this.formGroup.setControl(column.name, this.formBuilder.control(item[key]));
|
|
849
|
+
}
|
|
850
|
+
if (this.formGroup.controls[column.name] && this.getValidationAttributeValue(column, 'readonly')) {
|
|
851
|
+
this.formGroup.controls[column.name].disable();
|
|
852
|
+
}
|
|
853
|
+
});
|
|
854
|
+
}
|
|
531
855
|
handleDatasource() {
|
|
532
856
|
this.unsubscribeStore();
|
|
533
857
|
this.selection$$ = this.store.stateView
|
|
@@ -546,6 +870,9 @@ export class EntityTableComponent {
|
|
|
546
870
|
this.selectionState$.next(this.computeSelectionState(records));
|
|
547
871
|
});
|
|
548
872
|
this.dataSource$$ = this.store.stateView.all$().subscribe((all) => {
|
|
873
|
+
if (all[0]) {
|
|
874
|
+
this.enableEdit(all[0]);
|
|
875
|
+
}
|
|
549
876
|
this.dataSource.data = all;
|
|
550
877
|
});
|
|
551
878
|
}
|
|
@@ -765,13 +1092,114 @@ export class EntityTableComponent {
|
|
|
765
1092
|
*/
|
|
766
1093
|
getValue(record, column) {
|
|
767
1094
|
const entity = record.entity;
|
|
1095
|
+
let value;
|
|
768
1096
|
if (column.valueAccessor !== undefined) {
|
|
769
1097
|
return column.valueAccessor(entity, record);
|
|
770
1098
|
}
|
|
771
1099
|
if (this.template.valueAccessor !== undefined) {
|
|
772
1100
|
return this.template.valueAccessor(entity, column.name, record);
|
|
773
1101
|
}
|
|
774
|
-
|
|
1102
|
+
value = this.store.getProperty(entity, column.name);
|
|
1103
|
+
if (column.type === 'boolean') {
|
|
1104
|
+
if (value === undefined || value === null || value === '') {
|
|
1105
|
+
value = false;
|
|
1106
|
+
}
|
|
1107
|
+
else if (typeof value !== 'boolean' && value !== undefined) {
|
|
1108
|
+
if (typeof value === 'number') {
|
|
1109
|
+
value = Boolean(value);
|
|
1110
|
+
}
|
|
1111
|
+
else {
|
|
1112
|
+
value = JSON.parse(value.toLowerCase());
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
if (!this.isEdition(record)) {
|
|
1116
|
+
value = value ? '✓' : ''; // check mark
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
else if (column.type === 'list' && value && column.domainValues) {
|
|
1120
|
+
const entity = record.entity;
|
|
1121
|
+
if (column.multiple) {
|
|
1122
|
+
let list_id;
|
|
1123
|
+
typeof value === 'string' ? list_id = value.match(/[\w.-]+/g).map(Number) : list_id = value;
|
|
1124
|
+
let list_option = [];
|
|
1125
|
+
column.domainValues.forEach(option => {
|
|
1126
|
+
if (list_id.includes(option.id)) {
|
|
1127
|
+
if (record.edition) {
|
|
1128
|
+
list_option.push(option.id);
|
|
1129
|
+
}
|
|
1130
|
+
else {
|
|
1131
|
+
list_option.push(option.value);
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
});
|
|
1135
|
+
this.isEdition(record) ? value = list_id : value = list_option;
|
|
1136
|
+
}
|
|
1137
|
+
else {
|
|
1138
|
+
if (!this.isEdition(record) && column.linkColumnForce) {
|
|
1139
|
+
value = entity === null || entity === void 0 ? void 0 : entity.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
|
|
1140
|
+
}
|
|
1141
|
+
else {
|
|
1142
|
+
column.domainValues.forEach(option => {
|
|
1143
|
+
if (typeof value === 'string' && /^\d+$/.test(value)) {
|
|
1144
|
+
value = parseInt(value);
|
|
1145
|
+
}
|
|
1146
|
+
if (option.value === value || option.id === value) {
|
|
1147
|
+
this.isEdition(record) ? value = option.id : value = option.value;
|
|
1148
|
+
}
|
|
1149
|
+
});
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
else if (column.type === 'autocomplete' && value && column.domainValues) {
|
|
1154
|
+
const entity = record.entity;
|
|
1155
|
+
if (!this.isEdition(record) && column.linkColumnForce) {
|
|
1156
|
+
value = entity === null || entity === void 0 ? void 0 : entity.properties[this.getColumnKeyWithoutPropertiesTag(column.linkColumnForce)];
|
|
1157
|
+
}
|
|
1158
|
+
else {
|
|
1159
|
+
column.domainValues.forEach(option => {
|
|
1160
|
+
if (typeof value === 'string' && /^\d+$/.test(value)) {
|
|
1161
|
+
value = parseInt(value);
|
|
1162
|
+
}
|
|
1163
|
+
if (option.value === value || option.id === value) {
|
|
1164
|
+
value = option.value;
|
|
1165
|
+
}
|
|
1166
|
+
});
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
else if (column.type === 'date') {
|
|
1170
|
+
if (this.isEdition(record)) {
|
|
1171
|
+
if (value) {
|
|
1172
|
+
let date = moment(value);
|
|
1173
|
+
value = date.format();
|
|
1174
|
+
this.formGroup.controls[column.name].setValue(value);
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1177
|
+
else if (!this.isEdition(record) && value === null) {
|
|
1178
|
+
value = "";
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
if (value === undefined) {
|
|
1182
|
+
value = '';
|
|
1183
|
+
}
|
|
1184
|
+
return value;
|
|
1185
|
+
}
|
|
1186
|
+
/**
|
|
1187
|
+
* Method to access an entity's validation values
|
|
1188
|
+
* @param column Column
|
|
1189
|
+
* @param validationType string
|
|
1190
|
+
* @returns Any value (false if no validation or not the one concerned)
|
|
1191
|
+
* @internal
|
|
1192
|
+
*/
|
|
1193
|
+
getValidationAttributeValue(column, validationType) {
|
|
1194
|
+
if (column.validation !== undefined && column.validation[validationType] !== undefined) {
|
|
1195
|
+
return column.validation[validationType];
|
|
1196
|
+
}
|
|
1197
|
+
else {
|
|
1198
|
+
return false;
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
isEdition(record) {
|
|
1202
|
+
return record.entity.edition ? true : false;
|
|
775
1203
|
}
|
|
776
1204
|
/**
|
|
777
1205
|
* Return the type of renderer of a column
|
|
@@ -848,13 +1276,23 @@ export class EntityTableComponent {
|
|
|
848
1276
|
* @internal
|
|
849
1277
|
*/
|
|
850
1278
|
onButtonClick(clickFunc, record) {
|
|
1279
|
+
this.enableEdit(record);
|
|
851
1280
|
if (typeof clickFunc === 'function') {
|
|
852
1281
|
clickFunc(record.entity, record);
|
|
853
1282
|
}
|
|
854
1283
|
}
|
|
1284
|
+
/**
|
|
1285
|
+
* Retrieve column name without his "properties" tag (useful for edition workspace properties)
|
|
1286
|
+
*/
|
|
1287
|
+
getColumnKeyWithoutPropertiesTag(column) {
|
|
1288
|
+
if (column.includes('properties.')) {
|
|
1289
|
+
return column.split('.')[1];
|
|
1290
|
+
}
|
|
1291
|
+
return column;
|
|
1292
|
+
}
|
|
855
1293
|
}
|
|
856
|
-
EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
857
|
-
EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["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" }, features: [i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["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", "", 4, "matHeaderCellDef"], ["mat-header-cell", "", "mat-sort-header", ""], [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"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["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"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon"], [4, "ngFor", "ngForOf"], ["igoStopPropagation", "", "mat-icon-button", "", 3, "color", "
|
|
1294
|
+
EntityTableComponent.ɵfac = function EntityTableComponent_Factory(t) { return new (t || EntityTableComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.FocusMonitor), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.NgControl, 10), i0.ɵɵdirectiveInject(i1.NgForm, 8), i0.ɵɵdirectiveInject(i1.FormControlName, 8), i0.ɵɵdirectiveInject(i3.ErrorStateMatcher), i0.ɵɵdirectiveInject(i3.DateAdapter)); };
|
|
1295
|
+
EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityTableComponent, selectors: [["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" }, features: [i0.ɵɵProvidersFeature([{ provide: MatFormFieldControl, useExisting: EntityTableComponent }]), i0.ɵɵNgOnChangesFeature], decls: 9, vars: 8, consts: [[1, "table-container"], ["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"], ["width", "50", "heigth", "auto", 3, "src", 4, "ngIf", "ngIfElse"], ["notImg", ""], ["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", 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"], [3, "value"], ["isAnUrlUnsanitizedHTML", ""], ["mat-cell", "", "class", "mat-cell-text", 3, "ngClass", 4, "matCellDef"], [3, "svgIcon", "click"], [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"], [3, "svgIcon"], ["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) {
|
|
858
1296
|
i0.ɵɵelementStart(0, "div", 0);
|
|
859
1297
|
i0.ɵɵelementStart(1, "table", 1);
|
|
860
1298
|
i0.ɵɵlistener("matSortChange", function EntityTableComponent_Template_table_matSortChange_1_listener($event) { return ctx.onSort($event); });
|
|
@@ -879,16 +1317,25 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
|
|
|
879
1317
|
i0.ɵɵproperty("matRowDefColumns", ctx.headers);
|
|
880
1318
|
i0.ɵɵadvance(1);
|
|
881
1319
|
i0.ɵɵproperty("ngIf", ctx.withPaginator);
|
|
882
|
-
} }, directives: [
|
|
1320
|
+
} }, directives: [i4.MatTable, i5.MatSort, i6.NgClass, i4.MatColumnDef, i4.MatHeaderCellDef, i4.MatCellDef, i6.NgForOf, i4.MatHeaderRowDef, i4.MatRowDef, i6.NgIf, i4.MatHeaderCell, i7.MatCheckbox, i4.MatCell, i5.MatSortHeader, i8.MatTooltip, i1.NgControlStatusGroup, i1.FormGroupDirective, i9.MatAutocomplete, i10.MatDatepickerToggle, i11.MatSuffix, i12.MatInput, i10.MatDatepickerInput, i1.DefaultValueAccessor, i1.NgControlStatus, i1.FormControlName, i10.MatDatepicker, i1.NumberValueAccessor, i1.MinValidator, i1.MaxValidator, i1.RequiredValidator, i13.MatSelect, i3.MatOption, i9.MatAutocompleteTrigger, i14.MatIcon, i15.MatButton, i16.StopPropagationDirective, i4.MatHeaderRow, i4.MatRow, i17.EntityTableRowDirective, i18.EntityTablePaginatorComponent], pipes: [i6.AsyncPipe, i19.SecureImagePipe, i20.TranslatePipe, i21.SanitizeHtmlPipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}th.mat-header-cell[_ngcontent-%COMP%], td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%]{padding:0 3px}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}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}.class_hidden[_ngcontent-%COMP%]{visibility:hidden}.class_display_none[_ngcontent-%COMP%]{display:none}.class_boolean[_ngcontent-%COMP%], .class_icon[_ngcontent-%COMP%], .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}.class_sting[_ngcontent-%COMP%], .class_text[_ngcontent-%COMP%], .class_number_edition[_ngcontent-%COMP%]{text-align:left}td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
|
|
883
1321
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
|
|
884
1322
|
type: Component,
|
|
885
1323
|
args: [{
|
|
886
1324
|
selector: 'igo-entity-table',
|
|
887
1325
|
templateUrl: './entity-table.component.html',
|
|
888
1326
|
styleUrls: ['./entity-table.component.scss'],
|
|
889
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
1327
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1328
|
+
providers: [{ provide: MatFormFieldControl, useExisting: EntityTableComponent }]
|
|
890
1329
|
}]
|
|
891
|
-
}], function () { return [{ type: i0.ChangeDetectorRef }
|
|
1330
|
+
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.FormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
|
|
1331
|
+
type: Optional
|
|
1332
|
+
}, {
|
|
1333
|
+
type: Self
|
|
1334
|
+
}] }, { type: i1.NgForm, decorators: [{
|
|
1335
|
+
type: Optional
|
|
1336
|
+
}] }, { type: i1.FormControlName, decorators: [{
|
|
1337
|
+
type: Optional
|
|
1338
|
+
}] }, { type: i3.ErrorStateMatcher }, { type: i3.DateAdapter }]; }, { store: [{
|
|
892
1339
|
type: Input
|
|
893
1340
|
}], paginator: [{
|
|
894
1341
|
type: Input
|
|
@@ -909,4 +1356,4 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
|
|
|
909
1356
|
}], entitySortChange: [{
|
|
910
1357
|
type: Output
|
|
911
1358
|
}] }); })();
|
|
912
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBTXhCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFPTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztJQ2ZuRCw2QkFBZ0U7SUFDOUQsd0NBRWtGO0lBRnBFLHFQQUF1QztJQUdyRCxpQkFBZTtJQUNqQiwwQkFBZTs7OztJQUhDLGVBQTREO0lBQTVELG9GQUE0RCw4RUFBQTs7O0lBSDlFLDZCQUFpQztJQUMvQiw0R0FLZTs7SUFDakIsMEJBQWU7OztJQU5FLGVBQThCO0lBQTlCLG1FQUE4Qjs7O0lBRmpELDZCQUFzQztJQUNwQyw2RkFPZTtJQUNqQixpQkFBSzs7O0lBUlksZUFBZ0I7SUFBaEIsd0NBQWdCOzs7O0lBU2pDLDhCQUFzQztJQUNwQyx3Q0FHZ0Q7SUFIbEMsNElBQStCLHVCQUF1QixHQUFHLElBQUksSUFBQyxvVUFDd0Isd0JBQXdCLElBRGhELG9SQUFBO0lBSTVFLGlCQUFlO0lBQ2pCLGlCQUFLOzs7O0lBRlcsZUFBaUM7SUFBakMsMERB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QjtRQUMzQixnQ0FNbUM7UUFBakMsc0hBQWlCLGtCQUFjLElBQUM7UUFFaEMsZ0NBQXlFO1FBQ3ZFLG1FQVNLO1FBQ0wsbUVBTUs7UUFDUCwwQkFBZTtRQUVmLHVGQTBGZTtRQUVmLG1FQUlLO1FBQ0wsbUVBVUs7UUFDUCxpQkFBUTtRQUNSLG1IQUs2QjtRQUMvQixpQkFBTTs7UUE1SUYsZUFBMkI7UUFBM0IsNkNBQTJCLDhCQUFBLHFDQUFBO1FBeUJtQyxlQUFtQjtRQUFuQiw4Q0FBbUI7UUE4RjlFLGVBQTBCO1FBQTFCLDZDQUEwQiwwQ0FBQTtRQU1ILGVBQWlCO1FBQWpCLDhDQUFpQjtRQVNoQixlQUFtQjtRQUFuQix3Q0FBbUI7O3VGRHRHckMsb0JBQW9CO2NBTmhDLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixXQUFXLEVBQUUsK0JBQStCO2dCQUM1QyxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztnQkFDNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7b0VBMkNVLEtBQUs7a0JBQWIsS0FBSztZQUtPLFNBQVM7a0JBQXJCLEtBQUs7WUFhRyxRQUFRO2tCQUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBFbnRpdHlSZWNvcmQsXG4gIEVudGl0eVN0YXRlLFxuICBFbnRpdHlTdG9yZSxcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcbiAgRW50aXR5VGFibGVDb2x1bW4sXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXG4gIEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3Jcbn0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnMgfSBmcm9tICcuLi9lbnRpdHktdGFibGUtcGFnaW5hdG9yL2VudGl0eS10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbnRpdHktdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRW50aXR5VGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBlbnRpdHlTb3J0Q2hhbmdlJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY29sdW1uIHJlbmRlcmVyIHR5cGVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciA9IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXI7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgc2VsZWN0aW9uJ3Mgc3RhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgc2VsZWN0aW9uLHMgc3RhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBzZWxlY3Rpb25TdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBzdG9yZSdzIHNlbGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3Rpb24kJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIGRhdGFTb3VyY2VcbiAgICovXG4gIHByaXZhdGUgZGF0YVNvdXJjZSQkOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsYXN0IHJlY29yZCBjaGVja2VkLiBVc2VmdWwgZm9yIHNlbGVjdGluZ1xuICAgKiBtdWx0aXBsZSByZWNvcmRzIGJ5IGhvbGRpbmcgdGhlIHNoaWZ0IGtleSBhbmQgY2hlY2tpbmdcbiAgICogY2hlY2tib3hlcy5cbiAgICovXG4gIHByaXZhdGUgbGFzdFJlY29yZENoZWNrZWRLZXk6IEVudGl0eUtleTtcblxuICAvKipcbiAgICogRW50aXR5IHN0b3JlXG4gICAqL1xuICBASW5wdXQoKSBzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PjtcblxuICAvKipcbiAgICogVGFibGUgcGFnaW5hdG9yXG4gICAqL1xuICBASW5wdXQoKSBzZXQgcGFnaW5hdG9yKHZhbHVlOiBNYXRQYWdpbmF0b3IpIHtcbiAgICB0aGlzLl9wYWdpbmF0b3IgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvcjtcbiAgfVxuICBwcml2YXRlIF9wYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcblxuICAvKipcbiAgICogVGFibGUgdGVtcGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xuXG4gIC8qKlxuICAgKiBTY3JvbGwgYmVoYXZpb3Igb24gc2VsZWN0aW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBzY3JvbGxCZWhhdmlvcjogRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvciA9IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IuQXV0bztcblxuICAvKipcbiAgICogV2hldGhlciBudWxscyBzaG91bGQgYmUgZmlyc3Qgd2hlbiBzb3J0aW5nXG4gICAqL1xuICBASW5wdXQoKVxuICBzb3J0TnVsbHNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSB0YWJsZSBwYWdpbmF0b3Igb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KClcbiAgd2l0aFBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQYWdpbmF0b3Igb3B0aW9uc1xuICAgKi9cbiAgQElucHV0KClcbiAgcGFnaW5hdG9yT3B0aW9uczogRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBlbnRpdHlDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIHNlbGVjdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5U2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgYWRkZWQ6IG9iamVjdFtdO1xuICB9PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRhYmxlIHNvcnQgaXMgY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBlbnRpdHlTb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8e2NvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIGRpcmVjdGlvbjogc3RyaW5nfT4gPSBuZXcgRXZlbnRFbWl0dGVyKHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFRhYmxlIGhlYWRlcnNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgaGVhZGVycygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSlcbiAgICAgIC5tYXAoKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoZWNrYm94ID09PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gWydzZWxlY3Rpb25DaGVja2JveCddLmNvbmNhdChjb2x1bW5zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRhIHNvdXJjZSBjb25zdW1hYmxlIGJ5IHRoZSB1bmRlcmx5aW5nIG1hdGVyaWFsIHRhYmxlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8b2JqZWN0PigpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgc2VsZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb24gfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBhIHNlbGVjdGlvbiBjaGVja2JveCBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdGlvbkNoZWNrYm94KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb25DaGVja2JveCB8fCBmYWxzZTsgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgc2VsZWN0TWFueSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0TWFueSB8fCBmYWxzZTsgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgZml4ZWRIZWFkZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlcjsgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIC8qKlxuICAgKiBUcmFjayB0aGUgc2VsZWN0aW9uIHN0YXRlIHRvIHByb3Blcmx5IGRpc3BsYXkgdGhlIHNlbGVjdGlvbiBjaGVja2JveGVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHN0b3JlID0gY2hhbmdlcy5zdG9yZTtcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICB0aGlzLmhhbmRsZURhdGFzb3VyY2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGFzb3VyY2UoKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XG4gICAgdGhpcy5zZWxlY3Rpb24kJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XG4gICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlKVxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gcmVjb3Jkc1swXTtcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsKCkuaW5kZXhPZihmaXJzdFNlbGVjdGVkKTtcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yID8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICsgMSkgOiAwO1xuICAgICAgICBjb25zdCBwYWdlTWluID0gdGhpcy5wYWdpbmF0b3IgPyBwYWdlTWF4IC0gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgOiAwO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvciAmJlxuICAgICAgICAgIChmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPCBwYWdlTWluIHx8XG4gICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID49IHBhZ2VNYXgpKSB7XG4gICAgICAgICAgY29uc3QgcGFnZVRvUmVhY2ggPSBNYXRoLmZsb29yKGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiAvIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHBhZ2VUb1JlYWNoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xuICAgICAgfSk7XG4gICAgdGhpcy5kYXRhU291cmNlJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwkKCkuc3Vic2NyaWJlKChhbGwpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gYWxsO1xuICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kIHRoZSBzdG9yZSB3YXRjaGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlU3RvcmUoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uJCQpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uJCQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSQkKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja2J5IGZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBwYXJhbSBpbmRleCBSZWNvcmQgaW5kZXhcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRUcmFja0J5RnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChpbmRleDogbnVtYmVyLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3QsIEVudGl0eVN0YXRlPikgPT4ge1xuICAgICAgcmV0dXJuIHJlY29yZC5yZWY7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGEgcmVmcmVzaCBvZiB0aHJlIHRhYmxlLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlblxuICAgKiB0aGUgZGF0YSBzb3VyY2UgZG9lc24ndCBlbWl0IGEgbmV3IHZhbHVlIGJ1dCBmb3Igc29tZSByZWFzb25cbiAgICogdGhlIHJlY29yZHMgbmVlZCBhbiB1cGRhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHBhZ2luYXRvckNoYW5nZShldmVudDogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSBldmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBzb3J0LCBzb3J0IHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gZXZlbnQgU29ydCBldmVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uU29ydChldmVudDoge2FjdGl2ZTogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZ30pIHtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5kaXJlY3Rpb247XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXG4gICAgICAuZmluZCgoYzogRW50aXR5VGFibGVDb2x1bW4pID0+IGMubmFtZSA9PT0gZXZlbnQuYWN0aXZlKTtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlldy5zb3J0KHtcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHRoaXMuZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pLFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIG51bGxzRmlyc3Q6IHRoaXMuc29ydE51bGxzRmlyc3RcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlLmVtaXQoe2NvbHVtbiwgZGlyZWN0aW9ufSk7XG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UkLm5leHQodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgY2xpY2tlZCwgZW1pdCBhbiBldmVudFxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uUm93Q2xpY2socmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcbiAgICB0aGlzLmVudGl0eUNsaWNrLmVtaXQocmVjb3JkLmVudGl0eSk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgc2VsZWN0ZWQsIHNlbGVjdCBpdCBpbiB0aGUgc3RvcmUgYW5kIGVtaXQgYW4gZXZlbnQuIEV2ZW4gaWZcbiAgICogXCJtYW55XCIgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIGFsd2F5cyBzZWxlY3QgYSBzaW5nbGUsIGV4Y2x1c2l2ZSByb3cuIFNlbGVjdGluZ1xuICAgKiBtdWx0aXBsZSByb3dzIHNob3VsZCBiZSBhY2hpZXZlZCBieSB1c2luZyB0aGUgY2hlY2tib3hlcy5cbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblJvd1NlbGVjdChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRydWV9LCB0cnVlKTtcbiAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Qgb3IgdW5zZWxlY3QgYWxsIHJvd3MgYXQgb25jZS4gT24gc2VsZWN0LCBlbWl0IGFuIGV2ZW50LlxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uVG9nZ2xlUm93cyh0b2dnbGU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVBbGwoe3NlbGVjdGVkOiB0b2dnbGV9KTtcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5hbGwoKVxuICAgICAgICAubWFwKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuZW50aXR5KTtcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXRpZXNdfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcbiAgICogZW1pdCBhbiBldmVudC5cbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICBjb25zdCBleGNsdXNpdmUgPSB0b2dnbGUgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0TWFueTtcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHtzZWxlY3RlZDogdG9nZ2xlfSwgZXhjbHVzaXZlKTtcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcbiAgICB9XG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcbiAgICogZW1pdCBhbiBldmVudC5cbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblNoaWZ0VG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0TWFueSA9PT0gZmFsc2UgfHwgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9uVG9nZ2xlUm93KHRvZ2dsZSwgcmVjb3JkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBtYXQgY2hlY2tib3ggd3JvbmcgYmVoYXZpb3JcbiAgICAvLyB3aGVuIHRoZSBzaGlmdCBrZXkgaXMgaGVsZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvNjIzMlxuICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpO1xuICAgIGNvbnN0IHJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKHJlY29yZCk7XG4gICAgY29uc3QgbGFzdFJlY29yZENoZWNrZWQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXQodGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSk7XG4gICAgY29uc3QgbGFzdFJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKGxhc3RSZWNvcmRDaGVja2VkKTtcbiAgICBjb25zdCBpbmRleGVzID0gW3JlY29yZEluZGV4LCBsYXN0UmVjb3JkSW5kZXhdO1xuICAgIGNvbnN0IHNlbGVjdFJlY29yZHMgPSByZWNvcmRzLnNsaWNlKE1hdGgubWluKC4uLmluZGV4ZXMpLCBNYXRoLm1heCguLi5pbmRleGVzKSArIDEpO1xuXG4gICAgY29uc3QgZW50aXRpZXMgPSBzZWxlY3RSZWNvcmRzLm1hcCgoX3JlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IF9yZWNvcmQuZW50aXR5KTtcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZU1hbnkoZW50aXRpZXMsIHtzZWxlY3RlZDogdG9nZ2xlfSk7XG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IGVudGl0aWVzfSk7XG4gICAgfVxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzZWxlY3Rpb24gc3RhdGVcbiAgICogQHJldHVybnMgV2hldGhlciBhbGwsIHNvbWUgb3Igbm8gcm93cyBhcmUgc2VsZWN0ZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTZWxlY3Rpb25TdGF0ZShzZWxlY3RlZFJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pOiBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlIHtcbiAgICBjb25zdCBzdGF0ZXMgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xuICAgIGNvbnN0IHNlbGVjdGlvbkNvdW50ID0gc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aDtcbiAgICByZXR1cm4gc2VsZWN0aW9uQ291bnQgPT09IDAgP1xuICAgICAgc3RhdGVzLk5vbmUgOlxuICAgICAgKHNlbGVjdGlvbkNvdW50ID09PSB0aGlzLnN0b3JlLnN0YXRlVmlldy5jb3VudCA/IHN0YXRlcy5BbGwgOiBzdGF0ZXMuU29tZSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIGNvbHVtbiBpcyBzb3J0YWJsZVxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgY29sdW1uIGlzIHNvcnRhYmxlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgY29sdW1uSXNTb3J0YWJsZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IHNvcnRhYmxlID0gY29sdW1uLnNvcnQ7XG4gICAgaWYgKHNvcnRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvcnRhYmxlID0gdGhpcy50ZW1wbGF0ZS5zb3J0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRoaXMudGVtcGxhdGUuc29ydDtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSByb3cgaXMgc2hvdWxkIGJlIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzdGF0ZVxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgcm93IHNob3VsZCBiZSBzZWxlY3RlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJvd0lzU2VsZWN0ZWQocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXRlID0gcmVjb3JkLnN0YXRlO1xuICAgIHJldHVybiBzdGF0ZS5zZWxlY3RlZCA/IHN0YXRlLnNlbGVjdGVkIDogZmFsc2U7XG4gIH1cblxuICBpc0ltZyh2YWx1ZSkge1xuICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydqcGcnLCAncG5nJywgJ2dpZiddLmluZGV4T2YodmFsdWUuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTFcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpc1VybCh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB2YWx1ZS5zbGljZSgwLCA4KSA9PT0gJ2h0dHBzOi8vJyB8fCB2YWx1ZS5zbGljZSgwLCA3KSA9PT0gJ2h0dHA6Ly8nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBhY2Nlc3MgYW4gZW50aXR5J3MgdmFsdWVzXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFZhbHVlKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4sIGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBhbnkge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgaWYgKGNvbHVtbi52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW4udmFsdWVBY2Nlc3NvcihlbnRpdHksIHJlY29yZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvcihlbnRpdHksIGNvbHVtbi5uYW1lLCByZWNvcmQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgcmVuZGVyZXIgb2YgYSBjb2x1bW5cbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgUmVuZGVyZXIgdHlwZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldENvbHVtblJlbmRlcmVyKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyIHtcbiAgICBpZiAoY29sdW1uLnJlbmRlcmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyZXI7XG4gICAgfVxuICAgIHJldHVybiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSB0YWJsZSBuZ0NsYXNzXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRUYWJsZUNsYXNzKCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdpZ28tZW50aXR5LXRhYmxlLXdpdGgtc2VsZWN0aW9uJzogdGhpcy5zZWxlY3Rpb25cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGhlYWRlciBuZ0NsYXNzXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRIZWFkZXJDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLmhlYWRlckNsYXNzRnVuYztcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZnVuYygpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJvd0NsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMudGVtcGxhdGUucm93Q2xhc3NGdW5jO1xuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBmdW5jKGVudGl0eSwgcmVjb3JkKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRDZWxsQ2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICBjb25zdCBjbHMgPSB7fTtcblxuICAgIGNvbnN0IHRhYmxlRnVuYyA9IHRoaXMudGVtcGxhdGUuY2VsbENsYXNzRnVuYztcbiAgICBpZiAodGFibGVGdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2xzLCB0YWJsZUZ1bmMoZW50aXR5LCBjb2x1bW4sIHJlY29yZCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkZ1bmMgPSBjb2x1bW4uY2VsbENsYXNzRnVuYztcbiAgICBpZiAoY29sdW1uRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNscywgY29sdW1uRnVuYyhlbnRpdHksIHJlY29yZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjbHM7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25CdXR0b25DbGljayhcbiAgICBjbGlja0Z1bmM6IChlbnRpdHk6IG9iamVjdCwgcmVjb3JkPzogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHZvaWQsXG4gICAgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PlxuICApIHtcbiAgICBpZiAodHlwZW9mIGNsaWNrRnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2xpY2tGdW5jKHJlY29yZC5lbnRpdHksIHJlY29yZCk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIj5cbiAgPHRhYmxlXG4gICAgbWF0LXRhYmxlXG4gICAgbWF0U29ydFxuICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3MoKVwiXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgW3RyYWNrQnldPVwiZ2V0VHJhY2tCeUZ1bmN0aW9uKClcIlxuICAgIChtYXRTb3J0Q2hhbmdlKT1cIm9uU29ydCgkZXZlbnQpXCI+XG5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE1hbnlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVJvd3MoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuU29tZVwiPlxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgPG1hdC1jaGVja2JveCAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zaGlmdEtleSA/IG9uU2hpZnRUb2dnbGVSb3coIXJvd0lzU2VsZWN0ZWQocmVjb3JkKSwgcmVjb3JkLCAkZXZlbnQpIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93KCRldmVudC5jaGVja2VkLCByZWNvcmQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIj5cbiAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0ZW1wbGF0ZS5jb2x1bW5zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPlxuICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbklzU29ydGFibGUoY29sdW1uKVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgPC90aD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKSBhcyBjb2x1bW5SZW5kZXJlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsRGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgIHt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cbiAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIiB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfMKgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uY29tbW9uLmVudGl0eS10YWJsZS50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkhUTUxcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybEhUTUxcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLlVuc2FuaXRpemVkSFRNTFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNhbml0aXplSHRtbFwiPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxVbnNhbml0aXplZEhUTUw+XG4gICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cbiAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIiBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cFwiPlxuICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICBpZ29TdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICBpZ29TdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgIG1hdC1taW5pLWZhYlxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyXG4gICAgICBtYXQtaGVhZGVyLXJvd1xuICAgICAgKm1hdEhlYWRlclJvd0RlZj1cImhlYWRlcnM7IHN0aWNreTogZml4ZWRIZWFkZXI7XCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldEhlYWRlckNsYXNzKClcIj5cbiAgICA8L3RyPlxuICAgIDx0clxuICAgICAgbWF0LXJvd1xuICAgICAgaWdvRW50aXR5VGFibGVSb3dcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcmVjb3JkOyBjb2x1bW5zOiBoZWFkZXJzO1wiXG4gICAgICBbc2Nyb2xsQmVoYXZpb3JdPVwic2Nyb2xsQmVoYXZpb3JcIlxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MocmVjb3JkKVwiXG4gICAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiXG4gICAgICBbc2VsZWN0ZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCJcbiAgICAgIChzZWxlY3QpPVwib25Sb3dTZWxlY3QocmVjb3JkKVwiXG4gICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyZWNvcmQpXCI+XG4gICAgPC90cj5cbiAgPC90YWJsZT5cbiAgPGlnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yICpuZ0lmPVwid2l0aFBhZ2luYXRvclwiXG4gICAgW3N0b3JlXT1cInN0b3JlXCJcbiAgICBbcGFnaW5hdG9yT3B0aW9uc109XCJwYWdpbmF0b3JPcHRpb25zXCJcbiAgICBbZW50aXR5U29ydENoYW5nZSRdPVwiZW50aXR5U29ydENoYW5nZSRcIlxuICAgIChwYWdpbmF0b3JDaGFuZ2UpPVwicGFnaW5hdG9yQ2hhbmdlKCRldmVudClcIj5cbiAgPC9pZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvcj5cbjwvZGl2PlxuIl19
|
|
1359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBT3ZCLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQU9MLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQzFCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBbUQsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDaENoQiw2QkFBZ0U7SUFDNUQsd0NBQ29FO0lBRHRELHFQQUF1QztJQUVyRCxpQkFBZTtJQUNuQiwwQkFBZTs7OztJQUgyQyxlQUE0RDtJQUE1RCxvRkFBNEQsOEVBQUE7OztJQUYxSCw2QkFBaUM7SUFDN0IsNEdBSWU7O0lBQ25CLDBCQUFlOzs7SUFMSSxlQUE4QjtJQUE5QixtRUFBOEI7OztJ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QUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgT3B0aW9uYWwsXHJcbiAgU2VsZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eVJlY29yZCxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlTdG9yZSxcclxuICBFbnRpdHlUYWJsZVRlbXBsYXRlLFxyXG4gIEVudGl0eVRhYmxlQ29sdW1uLFxyXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXHJcbiAgRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSxcclxuICBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yXHJcbn0gZnJvbSAnLi4vc2hhcmVkJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlUYWJsZVBhZ2luYXRvck9wdGlvbnMgfSBmcm9tICcuLi9lbnRpdHktdGFibGUtcGFnaW5hdG9yL2VudGl0eS10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgTmdDb250cm9sLCBOZ0Zvcm0sIEZvcm1Db250cm9sTmFtZSwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VudGl0eS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZW50aXR5LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRW50aXR5VGFibGVDb21wb25lbnQgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIGVudGl0eVNvcnRDaGFuZ2UkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHJcbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnM6IE9ic2VydmFibGU8YW55W10+O1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbHVtbiByZW5kZXJlciB0eXBlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIgPSBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyO1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbidzIHN0YXRlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGlvbixzIHN0YXRlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIHNlbGVjdGlvbiQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgZGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGF0YVNvdXJjZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsYXN0IHJlY29yZCBjaGVja2VkLiBVc2VmdWwgZm9yIHNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJlY29yZHMgYnkgaG9sZGluZyB0aGUgc2hpZnQga2V5IGFuZCBjaGVja2luZ1xyXG4gICAqIGNoZWNrYm94ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXN0UmVjb3JkQ2hlY2tlZEtleTogRW50aXR5S2V5O1xyXG5cclxuICAvKipcclxuICAgKiBFbnRpdHkgc3RvcmVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgcGFnaW5hdG9yXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICB0aGlzLl9wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGwgYmVoYXZpb3Igb24gc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzY3JvbGxCZWhhdmlvcjogRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvciA9IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IuQXV0bztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBudWxscyBzaG91bGQgYmUgZmlyc3Qgd2hlbiBzb3J0aW5nXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzb3J0TnVsbHNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTaG93IHRoZSB0YWJsZSBwYWdpbmF0b3Igb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgd2l0aFBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQYWdpbmF0b3Igb3B0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnaW5hdG9yT3B0aW9uczogRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGFkZGVkOiBvYmplY3RbXTtcclxuICB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRhYmxlIHNvcnQgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSBoZWFkZXJzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGhlYWRlcnMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgIT09IGZhbHNlKVxyXG4gICAgICAubWFwKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hlY2tib3ggPT09IHRydWUpIHtcclxuICAgICAgY29sdW1ucyA9IFsnc2VsZWN0aW9uQ2hlY2tib3gnXS5jb25jYXQoY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHNvdXJjZSBjb25zdW1hYmxlIGJ5IHRoZSB1bmRlcmx5aW5nIG1hdGVyaWFsIHRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8b2JqZWN0PigpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb24gfHwgZmFsc2U7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIHNlbGVjdGlvbiBjaGVja2JveCBzaG91bGQgYmUgZGlzcGxheWVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdGlvbkNoZWNrYm94KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb25DaGVja2JveCB8fCBmYWxzZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0TWFueSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0TWFueSB8fCBmYWxzZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgZml4ZWRIZWFkZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlcjsgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcclxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfcGFyZW50Rm9ybTogTmdGb3JtLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9jb250cm9sTmFtZTogRm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT5cclxuICApIHtcclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmci1DQScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyB0ZXh0IG9yIG51bWJlciB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBib29sZWFuIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQuY2hlY2tlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3Mgc2VsZWN0IHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYXV0b2NvbXBsZXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uXS5zZXRWYWx1ZShldmVudC5vcHRpb24udmlld1ZhbHVlKTtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQub3B0aW9uLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBkYXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkRhdGVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuICAgIGNvbnN0IHZhbHVlID0gbW9tZW50KGV2ZW50LnZhbHVlKS5mb3JtYXQoZm9ybWF0KTtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgZWRpdGlvbiBtb2RlIGZvciBvbmUgcm93XHJcbiAgICogTW9yZSB0aGFuIG9uZSByb3cgY2FuIGJlIGVkaXRlZCBhdCB0aGUgc2FtZSB0aW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbmFibGVFZGl0KHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSByZWNvcmQuZW50aXR5LnByb3BlcnRpZXMgfHwgcmVjb3JkLmVudGl0eTtcclxuICAgIHRoaXMudGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGNvbHVtbi50aXRsZSA9IGNvbHVtbi52YWxpZGF0aW9uPy5tYW5kYXRvcnkgJiYgIWNvbHVtbi50aXRsZS5pbmNsdWRlcygnKicpID8gY29sdW1uLnRpdGxlICsgJyAqJyA6IGNvbHVtbi50aXRsZTtcclxuXHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGlmICghaXRlbVtrZXldIHx8IGl0ZW1ba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gSlNPTi5wYXJzZShpdGVtW2tleV0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgIFtpdGVtW2tleV1dXHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICAgICkpO1xyXG5cclxuICAgICAgICAgIHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnID9cclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKHBhcnNlSW50KGl0ZW1ba2V5XSkpIDpcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgIG1hcCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLmRvbWFpblZhbHVlcy5maWx0ZXIoKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZU5hbWVOb3JtYWxpemVkID0gb3B0aW9uLnZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmVhdHVyZU5hbWVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbFZhbHVlID0gaXRlbVtrZXldO1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmb3JtQ29udHJvbFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGZvcm1Db250cm9sVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBwYXJzZUludChmb3JtQ29udHJvbFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IGZvcm1Db250cm9sVmFsdWUgfHwgb3B0aW9uLmlkID09PSBmb3JtQ29udHJvbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShmb3JtQ29udHJvbFZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XHJcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShcclxuICAgICAgICAgICAgZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi52aXNpYmxlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbVtrZXldKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgICAgIGl0ZW1ba2V5XSA9IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdLZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcclxuICAgICAgICAgICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW25ld0tleV0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgaXRlbVtrZXldXHJcbiAgICAgICAgKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0gJiYgdGhpcy5nZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVEYXRhc291cmNlKCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGlvbiQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZSlcclxuICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWQgPSByZWNvcmRzWzBdO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpLmluZGV4T2YoZmlyc3RTZWxlY3RlZCk7XHJcbiAgICAgICAgY29uc3QgcGFnZU1heCA9IHRoaXMucGFnaW5hdG9yID8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgKiAodGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ICsgMSkgOiAwO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VNaW4gPSB0aGlzLnBhZ2luYXRvciA/IHBhZ2VNYXggLSB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA6IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMucGFnaW5hdG9yICYmXHJcbiAgICAgICAgICAoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIDwgcGFnZU1pbiB8fFxyXG4gICAgICAgICAgZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uID49IHBhZ2VNYXgpKSB7XHJcbiAgICAgICAgICBjb25zdCBwYWdlVG9SZWFjaCA9IE1hdGguZmxvb3IoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIC8gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlSW5kZXggPSBwYWdlVG9SZWFjaDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSQubmV4dCh0aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZShyZWNvcmRzKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5kYXRhU291cmNlJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwkKCkuc3Vic2NyaWJlKChhbGwpID0+IHtcclxuICAgICAgaWYgKGFsbFswXSkge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlRWRpdChhbGxbMF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gYWxsO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVW5iaW5kIHRoZSBzdG9yZSB3YXRjaGVyXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVTdG9yZSgpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiQkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UkJCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tieSBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGluZGV4IFJlY29yZCBpbmRleFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRyYWNrQnlGdW5jdGlvbigpIHtcclxuICAgIHJldHVybiAoaW5kZXg6IG51bWJlciwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0LCBFbnRpdHlTdGF0ZT4pID0+IHtcclxuICAgICAgcmV0dXJuIHJlY29yZC5yZWY7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlciBhIHJlZnJlc2ggb2YgdGhyZSB0YWJsZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW5cclxuICAgKiB0aGUgZGF0YSBzb3VyY2UgZG9lc24ndCBlbWl0IGEgbmV3IHZhbHVlIGJ1dCBmb3Igc29tZSByZWFzb25cclxuICAgKiB0aGUgcmVjb3JkcyBuZWVkIGFuIHVwZGF0ZS5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0b3JDaGFuZ2UoZXZlbnQ6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgdGhpcy5wYWdpbmF0b3IgPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHNvcnQsIHNvcnQgdGhlIHN0b3JlXHJcbiAgICogQHBhcmFtIGV2ZW50IFNvcnQgZXZlbnRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNvcnQoZXZlbnQ6IHthY3RpdmU6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmd9KSB7XHJcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBldmVudC5kaXJlY3Rpb247XHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcclxuICAgICAgLmZpbmQoKGM6IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjLm5hbWUgPT09IGV2ZW50LmFjdGl2ZSk7XHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2FzYycgfHwgZGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh7XHJcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHRoaXMuZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pLFxyXG4gICAgICAgIGRpcmVjdGlvbixcclxuICAgICAgICBudWxsc0ZpcnN0OiB0aGlzLnNvcnROdWxsc0ZpcnN0XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UuZW1pdCh7Y29sdW1uLCBkaXJlY3Rpb259KTtcclxuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlJC5uZXh0KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgY2xpY2tlZCwgZW1pdCBhbiBldmVudFxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Sb3dDbGljayhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgICB0aGlzLmVudGl0eUNsaWNrLmVtaXQocmVjb3JkLmVudGl0eSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBzZWxlY3RlZCwgc2VsZWN0IGl0IGluIHRoZSBzdG9yZSBhbmQgZW1pdCBhbiBldmVudC4gRXZlbiBpZlxyXG4gICAqIFwibWFueVwiIGlzIHNldCB0byB0cnVlLCB0aGlzIG1ldGhvZCBhbHdheXMgc2VsZWN0IGEgc2luZ2xlLCBleGNsdXNpdmUgcm93LiBTZWxlY3RpbmdcclxuICAgKiBtdWx0aXBsZSByb3dzIHNob3VsZCBiZSBhY2hpZXZlZCBieSB1c2luZyB0aGUgY2hlY2tib3hlcy5cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uUm93U2VsZWN0KHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwge3NlbGVjdGVkOiB0cnVlfSwgdHJ1ZSk7XHJcbiAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBvciB1bnNlbGVjdCBhbGwgcm93cyBhdCBvbmNlLiBPbiBzZWxlY3QsIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZVJvd3ModG9nZ2xlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlQWxsKHtzZWxlY3RlZDogdG9nZ2xlfSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcclxuICAgICAgICAuYWxsKClcclxuICAgICAgICAubWFwKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuZW50aXR5KTtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdGllc119KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcclxuICAgKiBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblRvZ2dsZVJvdyh0b2dnbGU6IGJvb2xlYW4sIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGV4Y2x1c2l2ZSA9IHRvZ2dsZSA9PT0gdHJ1ZSAmJiAhdGhpcy5zZWxlY3RNYW55O1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGUoZW50aXR5LCB7c2VsZWN0ZWQ6IHRvZ2dsZX0sIGV4Y2x1c2l2ZSk7XHJcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXR5XX0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxyXG4gICAqIGVtaXQgYW4gZXZlbnQuXHJcbiAgICogQHBhcmFtIHRvZ2dsZSBTZWxlY3Qgb3IgdW5zZWxlY3RcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uU2hpZnRUb2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RNYW55ID09PSBmYWxzZSB8fCB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5vblRvZ2dsZVJvdyh0b2dnbGUsIHJlY29yZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBtYXQgY2hlY2tib3ggd3JvbmcgYmVoYXZpb3JcclxuICAgIC8vIHdoZW4gdGhlIHNoaWZ0IGtleSBpcyBoZWxkLlxyXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzYyMzJcclxuICAgIGNvbnN0IHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICByYW5nZS5zZWxlY3ROb2RlKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpO1xyXG4gICAgY29uc3QgcmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YocmVjb3JkKTtcclxuICAgIGNvbnN0IGxhc3RSZWNvcmRDaGVja2VkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0KHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkpO1xyXG4gICAgY29uc3QgbGFzdFJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKGxhc3RSZWNvcmRDaGVja2VkKTtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSBbcmVjb3JkSW5kZXgsIGxhc3RSZWNvcmRJbmRleF07XHJcbiAgICBjb25zdCBzZWxlY3RSZWNvcmRzID0gcmVjb3Jkcy5zbGljZShNYXRoLm1pbiguLi5pbmRleGVzKSwgTWF0aC5tYXgoLi4uaW5kZXhlcykgKyAxKTtcclxuXHJcbiAgICBjb25zdCBlbnRpdGllcyA9IHNlbGVjdFJlY29yZHMubWFwKChfcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gX3JlY29yZC5lbnRpdHkpO1xyXG4gICAgdGhpcy5zdG9yZS5zdGF0ZS51cGRhdGVNYW55KGVudGl0aWVzLCB7c2VsZWN0ZWQ6IHRvZ2dsZX0pO1xyXG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogZW50aXRpZXN9KTtcclxuICAgIH1cclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXB1dGUgdGhlIHNlbGVjdGlvbiBzdGF0ZVxyXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgYWxsLCBzb21lIG9yIG5vIHJvd3MgYXJlIHNlbGVjdGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21wdXRlU2VsZWN0aW9uU3RhdGUoc2VsZWN0ZWRSZWNvcmRzOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PltdKTogRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSB7XHJcbiAgICBjb25zdCBzdGF0ZXMgPSBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uQ291bnQgPSBzZWxlY3RlZFJlY29yZHMubGVuZ3RoO1xyXG4gICAgcmV0dXJuIHNlbGVjdGlvbkNvdW50ID09PSAwID9cclxuICAgICAgc3RhdGVzLk5vbmUgOlxyXG4gICAgICAoc2VsZWN0aW9uQ291bnQgPT09IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmNvdW50ID8gc3RhdGVzLkFsbCA6IHN0YXRlcy5Tb21lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSBjb2x1bW4gaXMgc29ydGFibGVcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSBjb2x1bW4gaXMgc29ydGFibGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGxldCBzb3J0YWJsZSA9IGNvbHVtbi5zb3J0O1xyXG4gICAgaWYgKHNvcnRhYmxlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgc29ydGFibGUgPSB0aGlzLnRlbXBsYXRlLnNvcnQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy50ZW1wbGF0ZS5zb3J0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNvcnRhYmxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIHJvdyBpcyBzaG91bGQgYmUgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgZW50aXR5IHN0YXRlXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgcm93IHNob3VsZCBiZSBzZWxlY3RlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHJvd0lzU2VsZWN0ZWQocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgc3RhdGUgPSByZWNvcmQuc3RhdGU7XHJcbiAgICByZXR1cm4gc3RhdGUuc2VsZWN0ZWQgPyBzdGF0ZS5zZWxlY3RlZCA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNJbWcodmFsdWUpIHtcclxuICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIFsnanBnJywgJ3BuZycsICdnaWYnXS5pbmRleE9mKHZhbHVlLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1VybCh2YWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB2YWx1ZS5zbGljZSgwLCA4KSA9PT0gJ2h0dHBzOi8vJyB8fCB2YWx1ZS5zbGljZSgwLCA3KSA9PT0gJ2h0dHA6Ly8nXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbHVlc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBBbnkgdmFsdWVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRWYWx1ZShyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYW55IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBpZiAoY29sdW1uLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnZhbHVlQWNjZXNzb3IoZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IoZW50aXR5LCBjb2x1bW4ubmFtZSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHZhbHVlID0gdGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlbnRpdHksIGNvbHVtbi5uYW1lKTtcclxuXHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyl7XHJcbiAgICAgICAgICB2YWx1ZSA9IEJvb2xlYW4odmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSl7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSA/ICcmIzEwMDAzOycgOiAnJzsgLy8gY2hlY2sgbWFya1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcgJiYgdmFsdWUgJiYgY29sdW1uLmRvbWFpblZhbHVlcykge1xyXG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xyXG4gICAgICAgIGxldCBsaXN0X2lkO1xyXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBsaXN0X2lkID0gdmFsdWUubWF0Y2goL1tcXHcuLV0rL2cpLm1hcChOdW1iZXIpIDogbGlzdF9pZCA9IHZhbHVlO1xyXG4gICAgICAgIGxldCBsaXN0X29wdGlvbiA9IFtdO1xyXG5cclxuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIGlmIChsaXN0X2lkLmluY2x1ZGVzKG9wdGlvbi5pZCkpIHtcclxuICAgICAgICAgICAgaWYgKHJlY29yZC5lZGl0aW9uKSB7XHJcbiAgICAgICAgICAgICAgbGlzdF9vcHRpb24ucHVzaChvcHRpb24uaWQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzRWRpdGlvbihyZWNvcmQpID8gdmFsdWUgPSBsaXN0X2lkIDogdmFsdWUgPSBsaXN0X29wdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgICAgdmFsdWUgPSBlbnRpdHk/LnByb3BlcnRpZXNbdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmlzRWRpdGlvbihyZWNvcmQpID8gdmFsdWUgPSBvcHRpb24uaWQgOiB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkgJiYgY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSkge1xyXG4gICAgICAgIHZhbHVlID0gZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gb3B0aW9uLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgIGxldCBkYXRlID0gbW9tZW50KHZhbHVlKTtcclxuICAgICAgICAgIHZhbHVlID0gZGF0ZS5mb3JtYXQoKTtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdmFsdWUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgdG8gYWNjZXNzIGFuIGVudGl0eSdzIHZhbGlkYXRpb24gdmFsdWVzXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgc3RyaW5nXHJcbiAgICogQHJldHVybnMgQW55IHZhbHVlIChmYWxzZSBpZiBubyB2YWxpZGF0aW9uIG9yIG5vdCB0aGUgb25lIGNvbmNlcm5lZClcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbiwgdmFsaWRhdGlvblR5cGU6IHN0cmluZyk6IGFueSB7XHJcbiAgICBpZiAoY29sdW1uLnZhbGlkYXRpb24gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4udmFsaWRhdGlvblt2YWxpZGF0aW9uVHlwZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRpb25bdmFsaWRhdGlvblR5cGVdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRWRpdGlvbihyZWNvcmQpIHtcclxuICAgIHJldHVybiByZWNvcmQuZW50aXR5LmVkaXRpb24gPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgb2YgcmVuZGVyZXIgb2YgYSBjb2x1bW5cclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIFJlbmRlcmVyIHR5cGVcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlciB7XHJcbiAgICBpZiAoY29sdW1uLnJlbmRlcmVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5yZW5kZXJlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHRhYmxlIG5nQ2xhc3NcclxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VGFibGVDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgJ2lnby1lbnRpdHktdGFibGUtd2l0aC1zZWxlY3Rpb24nOiB0aGlzLnNlbGVjdGlvblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIGhlYWRlciBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldEhlYWRlckNsYXNzKCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5oZWFkZXJDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFJvd0NsYXNzKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcclxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnRlbXBsYXRlLnJvd0NsYXNzRnVuYztcclxuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZ1bmMoZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldENlbGxDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBjbHMgPSB7fTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUZ1bmMgPSB0aGlzLnRlbXBsYXRlLmNlbGxDbGFzc0Z1bmM7XHJcbiAgICBpZiAodGFibGVGdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIHRhYmxlRnVuYyhlbnRpdHksIGNvbHVtbiwgcmVjb3JkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sdW1uRnVuYyA9IGNvbHVtbi5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKGNvbHVtbkZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICBPYmplY3QuYXNzaWduKGNscywgY29sdW1uRnVuYyhlbnRpdHksIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjbHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvblxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25CdXR0b25DbGljayhcclxuICAgIGNsaWNrRnVuYzogKGVudGl0eTogb2JqZWN0LCByZWNvcmQ/OiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdm9pZCxcclxuICAgIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD5cclxuICApIHtcclxuICAgIHRoaXMuZW5hYmxlRWRpdChyZWNvcmQpO1xyXG4gICAgaWYgKHR5cGVvZiBjbGlja0Z1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY2xpY2tGdW5jKHJlY29yZC5lbnRpdHksIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBjb2x1bW4gbmFtZSB3aXRob3V0IGhpcyBcInByb3BlcnRpZXNcIiB0YWcgKHVzZWZ1bCBmb3IgZWRpdGlvbiB3b3Jrc3BhY2UgcHJvcGVydGllcylcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmIChjb2x1bW4uaW5jbHVkZXMoJ3Byb3BlcnRpZXMuJykpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi5zcGxpdCgnLicpWzFdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbHVtbjtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxyXG4gIDx0YWJsZSBtYXQtdGFibGUgbWF0U29ydCBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzKClcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyYWNrQnldPVwiZ2V0VHJhY2tCeUZ1bmN0aW9uKClcIiAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0TWFueVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVJvd3MoJGV2ZW50LmNoZWNrZWQpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLlNvbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiIChjbGljayk9XCIkZXZlbnQuc2hpZnRLZXkgP1xyXG4gICAgICAgICAgICAgIG9uU2hpZnRUb2dnbGVSb3coIXJvd0lzU2VsZWN0ZWQocmVjb3JkKSwgcmVjb3JkLCAkZXZlbnQpIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCJvblRvZ2dsZVJvdygkZXZlbnQuY2hlY2tlZCxyZWNvcmQpXCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0ZW1wbGF0ZS5jb2x1bW5zXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtblJlbmRlcmVyKGNvbHVtbikgYXMgY29sdW1uUmVuZGVyZXJcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsRGVmYXVsdFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfCBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2lnby5jb21tb24uZW50aXR5LXRhYmxlLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5IVE1MXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxIVE1MXCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIiB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlIH19IDwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHQgZWRpdGlvblwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgKm5nSWY9XCJpc0VkaXRpb24ocmVjb3JkKTtlbHNlIGlzVW5zYW5pdGl6ZWRIVE1MXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXJcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiB2YWx1ZT1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGltZVwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICd0aW1lJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwiOTAwXCIgKGZvY3VzKT1cImNvbHVtbi5vbkZvY3VzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJjb2x1bW4ub25DaGFuZ2UoJGV2ZW50KVwiIChibHVyKT1cImNvbHVtbi5vbkJsdXIoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJjbGFzc19udW1iZXJfZWRpdGlvblwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiIHN0ZXA9XCJ7e2NvbHVtbi5zdGVwfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsY29sdW1uKX19XCIgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpfX1cIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21pblZhbHVlJyl9fVwiIG1heD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21heFZhbHVlJyl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiICpuZ0lmPVwiIWNvbHVtbi50eXBlIHx8IGNvbHVtbi50eXBlID09PSdzdHJpbmcnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdyZWFkb25seScpfX1cIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZShyZWNvcmQsY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCRldmVudClcIj48L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnbGlzdCdcIiByZXF1aXJlZD1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ21hbmRhdG9yeScpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb2x1bW4uZG9tYWluVmFsdWVzXCIgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cIm9uQXV0b2NvbXBsZXRlVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsV2lkdGg9XCI0MzBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNVbnNhbml0aXplZEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MXCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzYW5pdGl6ZUh0bWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybFVuc2FuaXRpemVkSFRNTD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImlzSW1nKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBub3RJbWdcIiBzcmM9XCJ7eyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzZWN1cmVJbWFnZSkgfCBhc3luY319XCIgd2lkdGg9XCI1MFwiIGhlaWd0aD1cImF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdEltZz48c3Bhbj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cclxuICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil8fCBjb2x1bW4uaWNvbn19XCIgKGNsaWNrKT1cImNvbHVtbi5vbkNsaWNrKCRldmVudClcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW9uKHJlY29yZCkgPT09IGJ1dHRvbi5lZGl0TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImJ1dHRvbi5zdHlsZSA9PT0gJ21hdC1pY29uLWJ1dHRvbidcIiBpZ29TdG9wUHJvcGFnYXRpb24gbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e2J1dHRvbi5pY29ufX1cIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtbWluaS1mYWJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yXCIgKG1vdXNlZG93bik9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbi5jbGljaywgcmVjb3JkKVwiIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7YnV0dG9uLmljb259fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImhlYWRlcnM7IHN0aWNreTogZml4ZWRIZWFkZXI7XCIgW25nQ2xhc3NdPVwiZ2V0SGVhZGVyQ2xhc3MoKVwiPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8dHIgbWF0LXJvdyBpZ29FbnRpdHlUYWJsZVJvdyAqbWF0Um93RGVmPVwibGV0IHJlY29yZDsgY29sdW1uczogaGVhZGVycztcIiBbc2Nyb2xsQmVoYXZpb3JdPVwic2Nyb2xsQmVoYXZpb3JcIiBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhyZWNvcmQpXCIgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIiBbc2VsZWN0ZWRdPVwicm93SXNTZWxlY3RlZChyZWNvcmQpXCIgKHNlbGVjdCk9XCJvblJvd1NlbGVjdChyZWNvcmQpXCIgKGNsaWNrKT1cIm9uUm93Q2xpY2socmVjb3JkKVwiPlxyXG4gICAgICA8L3RyPlxyXG4gIDwvdGFibGU+XHJcbiAgPGlnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yICpuZ0lmPVwid2l0aFBhZ2luYXRvclwiIFtzdG9yZV09XCJzdG9yZVwiIFtwYWdpbmF0b3JPcHRpb25zXT1cInBhZ2luYXRvck9wdGlvbnNcIiBbZW50aXR5U29ydENoYW5nZSRdPVwiZW50aXR5U29ydENoYW5nZSRcIiAocGFnaW5hdG9yQ2hhbmdlKT1cInBhZ2luYXRvckNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgPC9pZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvcj5cclxuPC9kaXY+Il19
|