ngx-register-base 1.3.3 → 2.0.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/README.md +10 -0
- package/esm2022/lib/components/checkbox-selector/checkbox-selector.component.mjs +3 -3
- package/esm2022/lib/components/column-settings/column-settings.component.mjs +30 -25
- package/esm2022/lib/components/column-settings/components/column-settings-template/column-settings-template.component.mjs +4 -12
- package/esm2022/lib/components/column-settings/components/reset-settings-form/reset-settings-form.component.mjs +13 -0
- package/esm2022/lib/components/column-settings/consts/column-settings.consts.mjs +9 -9
- package/esm2022/lib/components/filter-button/filter-button.component.mjs +4 -5
- package/esm2022/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.mjs +22 -22
- package/esm2022/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.mjs +9 -6
- package/esm2022/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.mjs +13 -8
- package/esm2022/lib/components/filters/components/filter-list/filter-list-saved/filter-list-saved.component.mjs +4 -4
- package/esm2022/lib/components/filters/components/filter-list/filter-list.service.mjs +16 -13
- package/esm2022/lib/components/filters/components/filter-list/filters-section/filters-section.component.mjs +4 -4
- package/esm2022/lib/components/filters/components/filter-list.module.mjs +33 -7
- package/esm2022/lib/components/filters/register-table-filter.component.mjs +5 -4
- package/esm2022/lib/components/filters/register-table-filter.module.mjs +5 -5
- package/esm2022/lib/components/index.mjs +2 -2
- package/esm2022/lib/components/inputs/index.mjs +4 -4
- package/esm2022/lib/components/inputs/param-calendar-year/param-calendar-year.component.mjs +37 -30
- package/esm2022/lib/components/inputs/param-custom/param-custom.component.mjs +3 -3
- package/esm2022/lib/components/inputs/param-date/param-date.component.mjs +27 -15
- package/esm2022/lib/components/inputs/param-date-range/index.mjs +2 -0
- package/esm2022/lib/components/inputs/param-date-range/param-date-range.component.mjs +80 -18
- package/esm2022/lib/components/inputs/param-date-time/param-date-time.component.mjs +65 -30
- package/esm2022/lib/components/inputs/param-date-time-range/date-time-range/date-time-range.component.mjs +406 -0
- package/esm2022/lib/components/inputs/param-date-time-range/date-time-range/date-time-range.consts.mjs +13 -0
- package/esm2022/lib/components/inputs/param-date-time-range/param-date-time-range.component.mjs +31 -34
- package/esm2022/lib/components/inputs/param-dropbox/param-dropbox.component.mjs +126 -0
- package/esm2022/lib/components/inputs/param-month/param-month.component.mjs +40 -9
- package/esm2022/lib/components/inputs/param-month-range/param-month-range.component.mjs +29 -8
- package/esm2022/lib/components/inputs/param-multi-select/param-multi-select.component.mjs +97 -113
- package/esm2022/lib/components/inputs/param-select/param-select.component.mjs +41 -45
- package/esm2022/lib/components/inputs/param-switcher/index.mjs +2 -0
- package/esm2022/lib/components/inputs/param-switcher/param-switcher.component.mjs +61 -11
- package/esm2022/lib/components/inputs/param-switcher/param-switcher.types.mjs +2 -0
- package/esm2022/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.mjs +7 -25
- package/esm2022/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.mjs +21 -20
- package/esm2022/lib/components/inputs/param-text/param-text.component.mjs +11 -6
- package/esm2022/lib/components/inputs/param-textarea/param-textarea.component.mjs +5 -3
- package/esm2022/lib/components/inputs/param-toggle/param-toggle.component.mjs +24 -7
- package/esm2022/lib/components/inputs/param-tree/param-tree.component.mjs +3 -3
- package/esm2022/lib/components/inputs/param-tree/services/param-tree.service.mjs +9 -2
- package/esm2022/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.mjs +13 -6
- package/esm2022/lib/components/inputs/param-tree-select/param-tree-select.component.mjs +9 -4
- package/esm2022/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.mjs +9 -5
- package/esm2022/lib/components/inputs/sub-components/param-label-hint-icon/param-label-hint-icon.component.mjs +12 -0
- package/esm2022/lib/components/paginator/paginator.component.mjs +10 -12
- package/esm2022/lib/components/register-table/register-table.component.mjs +31 -12
- package/esm2022/lib/components/search-input/search-input.component.mjs +5 -7
- package/esm2022/lib/components/sliding-panel/sliding-panel.component.mjs +23 -35
- package/esm2022/lib/components/template-modal/index.mjs +3 -0
- package/esm2022/lib/components/template-modal/template-modal.base.mjs +16 -0
- package/esm2022/lib/components/template-modal/template-modal.component.mjs +16 -0
- package/esm2022/lib/core/param/index.mjs +1 -1
- package/esm2022/lib/core/param/param-base.mjs +28 -3
- package/esm2022/lib/core/param/param-date-base.mjs +20 -11
- package/esm2022/lib/core/param/param-select-base.mjs +14 -6
- package/esm2022/lib/core/register-base/register-base.store.mjs +1 -1
- package/esm2022/lib/directives/date/date-time.types.mjs +1 -1
- package/esm2022/lib/providers/index.mjs +2 -0
- package/esm2022/lib/providers/provide-icons.mjs +23 -0
- package/esm2022/lib/services/date-time.service.mjs +1 -38
- package/esm2022/lib/services/dialog/dialog.service.mjs +1 -13
- package/esm2022/lib/services/dialog/dialog.types.mjs +2 -2
- package/esm2022/lib/services/message.service.mjs +48 -0
- package/esm2022/lib/services/validation-message.service.mjs +52 -0
- package/esm2022/lib/store/fast-query-store.service.mjs +16 -1
- package/esm2022/lib/utils/index.mjs +2 -1
- package/esm2022/lib/utils/utils.mjs +17 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-register-base.mjs +1464 -1026
- package/fesm2022/ngx-register-base.mjs.map +1 -1
- package/icons/arrow-turn-up-left.svg +3 -0
- package/icons/check.svg +3 -0
- package/icons/floppy.svg +3 -0
- package/icons/star-empty.svg +10 -0
- package/icons/star-fill.svg +3 -0
- package/icons/trash.svg +3 -0
- package/icons/xmark.svg +3 -0
- package/lib/components/column-settings/column-settings.component.d.ts +9 -9
- package/lib/components/column-settings/components/column-settings-template/column-settings-template.component.d.ts +5 -5
- package/lib/components/{reset-settings-form → column-settings/components/reset-settings-form}/reset-settings-form.component.d.ts +2 -5
- package/lib/components/column-settings/consts/column-settings.consts.d.ts +8 -8
- package/lib/components/filters/components/filter-list/filter-edit/filter-edit.component.d.ts +5 -8
- package/lib/components/filters/components/filter-list/filter-list-footer/filter-list-footer.component.d.ts +2 -1
- package/lib/components/filters/components/filter-list/filter-list-header/filter-list-header.component.d.ts +2 -1
- package/lib/components/filters/components/filter-list/filter-list.service.d.ts +2 -3
- package/lib/components/filters/components/filter-list.module.d.ts +7 -7
- package/lib/components/filters/register-table-filter.component.d.ts +2 -1
- package/lib/components/filters/register-table-filter.module.d.ts +2 -2
- package/lib/components/index.d.ts +1 -1
- package/lib/components/inputs/index.d.ts +3 -4
- package/lib/components/inputs/param-calendar-year/param-calendar-year.component.d.ts +2 -8
- package/lib/components/inputs/param-custom/param-custom.component.d.ts +1 -1
- package/lib/components/inputs/param-date/param-date.component.d.ts +7 -10
- package/lib/components/inputs/param-date-range/index.d.ts +1 -0
- package/lib/components/inputs/param-date-range/param-date-range.component.d.ts +13 -16
- package/lib/components/inputs/param-date-time/param-date-time.component.d.ts +8 -13
- package/lib/components/inputs/param-date-time-range/date-time-range/date-time-range.component.d.ts +96 -0
- package/lib/components/inputs/param-date-time-range/date-time-range/date-time-range.consts.d.ts +12 -0
- package/lib/components/inputs/param-date-time-range/param-date-time-range.component.d.ts +17 -16
- package/lib/components/inputs/param-dropbox/param-dropbox.component.d.ts +31 -0
- package/lib/components/inputs/param-month/param-month.component.d.ts +10 -8
- package/lib/components/inputs/param-month-range/param-month-range.component.d.ts +10 -8
- package/lib/components/inputs/param-multi-select/param-multi-select.component.d.ts +9 -11
- package/lib/components/inputs/param-select/param-select.component.d.ts +9 -12
- package/lib/components/inputs/param-switcher/index.d.ts +2 -0
- package/lib/components/inputs/param-switcher/param-switcher.component.d.ts +21 -5
- package/lib/components/inputs/param-switcher/param-switcher.types.d.ts +7 -0
- package/lib/components/inputs/param-switcher-date-time-range/consts/param-switcher-date-time-range.consts.d.ts +3 -2
- package/lib/components/inputs/param-switcher-date-time-range/param-switcher-date-time-range.component.d.ts +5 -4
- package/lib/components/inputs/param-text/param-text.component.d.ts +6 -4
- package/lib/components/inputs/param-textarea/param-textarea.component.d.ts +2 -1
- package/lib/components/inputs/param-toggle/param-toggle.component.d.ts +3 -2
- package/lib/components/inputs/param-tree/services/param-tree.service.d.ts +1 -1
- package/lib/components/inputs/param-tree-multi-select/param-tree-multi-select.component.d.ts +2 -1
- package/lib/components/inputs/sub-components/param-invalid-icon/param-invalid-icon.component.d.ts +2 -1
- package/lib/components/inputs/sub-components/param-label-hint-icon/param-label-hint-icon.component.d.ts +5 -0
- package/lib/components/paginator/paginator.component.d.ts +3 -4
- package/lib/components/register-table/register-table.component.d.ts +5 -3
- package/lib/components/sliding-panel/sliding-panel.component.d.ts +8 -8
- package/lib/components/template-modal/index.d.ts +2 -0
- package/lib/components/template-modal/template-modal.base.d.ts +9 -0
- package/lib/components/template-modal/template-modal.component.d.ts +6 -0
- package/lib/core/param/index.d.ts +1 -0
- package/lib/core/param/param-base.d.ts +18 -2
- package/lib/core/param/param-date-base.d.ts +15 -9
- package/lib/core/param/param-select-base.d.ts +12 -7
- package/lib/core/register-base/register-base.store.d.ts +2 -3
- package/lib/directives/date/date-time.types.d.ts +0 -2
- package/lib/providers/index.d.ts +1 -0
- package/lib/providers/provide-icons.d.ts +3 -0
- package/lib/services/date-time.service.d.ts +0 -13
- package/lib/services/dialog/dialog.service.d.ts +1 -3
- package/lib/services/dialog/dialog.types.d.ts +0 -3
- package/lib/services/message.service.d.ts +20 -0
- package/lib/services/validation-message.service.d.ts +14 -0
- package/lib/store/fast-query-store.service.d.ts +1 -0
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/utils.d.ts +3 -0
- package/package.json +5 -12
- package/public-api.d.ts +1 -0
- package/styles/common-param.less +15 -0
- package/styles/flex.less +5 -1
- package/styles/icons.less +8 -0
- package/styles/modals.less +54 -0
- package/styles/overrides/tui/tui-input.less +94 -121
- package/styles/styles.less +2 -0
- package/esm2022/lib/components/inputs/inputs.module.mjs +0 -166
- package/esm2022/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.mjs +0 -15
- package/esm2022/lib/components/reset-settings-form/reset-settings-form.component.mjs +0 -18
- package/esm2022/lib/components/sliding-panel/sliding-panel.module.mjs +0 -19
- package/esm2022/lib/utils/prizm.shared.module.mjs +0 -284
- package/icons/calendar-blank.svg +0 -10
- package/lib/components/inputs/inputs.module.d.ts +0 -31
- package/lib/components/inputs/sub-components/param-delete-content-icon/param-delete-content-btn.component.d.ts +0 -6
- package/lib/components/sliding-panel/sliding-panel.module.d.ts +0 -9
- package/lib/utils/prizm.shared.module.d.ts +0 -14
- /package/icons/{calendar-icon.svg → calendar-date-time.svg} +0 -0
- /package/icons/{calendar-custom.svg → calendar-date.svg} +0 -0
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { DOCUMENT, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet, } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, forwardRef, Inject, input, output, signal, } from '@angular/core';
|
|
3
|
-
import { BehaviorSubject, combineLatest, debounceTime,
|
|
3
|
+
import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, map, tap, } from 'rxjs';
|
|
4
4
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
5
|
-
import { TUI_ITEMS_HANDLERS, TuiAppearance, TuiHint, TuiIcon, TuiTextfield } from '@taiga-ui/core';
|
|
5
|
+
import { TUI_ITEMS_HANDLERS, TuiAppearance, TuiDropdownDirective, TuiHint, TuiIcon, TuiLoader, TuiScrollable, TuiTextfield, } from '@taiga-ui/core';
|
|
6
6
|
import { TuiMultiSelectModule, TuiTextfieldControllerModule } from '@taiga-ui/legacy';
|
|
7
7
|
import { ReactiveFormsModule } from '@angular/forms';
|
|
8
8
|
import { FastQueryStore } from '../../../store/fast-query-store.service';
|
|
9
9
|
import { ParamSelectBase } from '../../../core/param/param-select-base';
|
|
10
|
-
import {
|
|
11
|
-
import { distinctUntilChangedJSONs } from '../../../utils';
|
|
10
|
+
import { distinctUntilChangedJSONs, SELECT_ALL_NAME } from '../../../utils';
|
|
12
11
|
import { PARAM_SEARCH_INPUT_DEBOUNCE_TIME_MLS } from '../../../consts/params.consts';
|
|
12
|
+
import { ValidationMessageService } from '../../../services/validation-message.service';
|
|
13
|
+
import { TuiCheckbox, TuiDataListWrapper } from '@taiga-ui/kit';
|
|
14
|
+
import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport, } from '@angular/cdk/scrolling';
|
|
13
15
|
import * as i0 from "@angular/core";
|
|
14
16
|
import * as i1 from "@taiga-ui/core";
|
|
15
17
|
import * as i2 from "@taiga-ui/legacy";
|
|
16
|
-
import * as i3 from "@taiga-ui/core/
|
|
17
|
-
import * as i4 from "@taiga-ui/
|
|
18
|
+
import * as i3 from "@taiga-ui/core/directives/dropdown";
|
|
19
|
+
import * as i4 from "@taiga-ui/core/components/data-list";
|
|
18
20
|
import * as i5 from "@angular/forms";
|
|
19
21
|
export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
20
22
|
constructor(injector, document) {
|
|
@@ -22,50 +24,38 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
22
24
|
this.document = document;
|
|
23
25
|
this.placeholder = input('Выберите значения');
|
|
24
26
|
this.itemSelectAll = input(false);
|
|
25
|
-
this.
|
|
27
|
+
this.itemSelectAllName = input(SELECT_ALL_NAME);
|
|
26
28
|
this.shortPickedLength = input(true);
|
|
27
29
|
this.stringify = input((item) => ('name' in item ? item.name : item.$implicit.name));
|
|
28
30
|
this.identityMatcher = input((a, b) => a?.id === b?.id);
|
|
29
31
|
this.buildShowedValue = input((values) => values?.map((v) => v.name).join(',\n') ?? '-');
|
|
32
|
+
this.inputMultiSelectRowsLimit = input(0);
|
|
30
33
|
this.onSelect = output();
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
34
|
+
this.searchValue = signal('');
|
|
35
|
+
this.filteredItems = signal(null);
|
|
36
|
+
this.allItemCount = signal(null);
|
|
33
37
|
this.onSearch$ = new BehaviorSubject('');
|
|
34
|
-
this.onSearchSubscription = null;
|
|
35
|
-
this.cachedString = '';
|
|
36
|
-
this.onClearButtonSubscription = null;
|
|
37
38
|
this.choosedHint = '';
|
|
38
39
|
}
|
|
39
40
|
onInit() {
|
|
40
41
|
this._subscribeOnSearch();
|
|
41
|
-
if (this.itemSelectAll()) {
|
|
42
|
-
this.items.unshift(this.selectAllItem);
|
|
43
|
-
}
|
|
44
42
|
}
|
|
45
43
|
_subscribeOnSearch() {
|
|
46
44
|
this.onSearch$
|
|
47
45
|
.pipe(debounceTime(PARAM_SEARCH_INPUT_DEBOUNCE_TIME_MLS), distinctUntilChanged(), takeUntilDestroyed(this.dr))
|
|
48
46
|
.subscribe((value) => {
|
|
49
|
-
this.
|
|
47
|
+
this.searchValue.set(value);
|
|
48
|
+
this.fetchItems(false, value);
|
|
49
|
+
if (this.itemSelectAll()) {
|
|
50
|
+
this.fetchAllCount(value);
|
|
51
|
+
}
|
|
50
52
|
});
|
|
51
53
|
}
|
|
52
54
|
afterViewInit() {
|
|
53
|
-
if (this.meta?.table && this.searchable) {
|
|
54
|
-
this._subscribeOnClearButton();
|
|
55
|
-
}
|
|
56
55
|
if (this.meta) {
|
|
57
56
|
this._observeFetchItems();
|
|
58
57
|
}
|
|
59
58
|
this._subscribeOnMetaChanges();
|
|
60
|
-
this._subscribeOnValueControl();
|
|
61
|
-
if (this.control?.value?.some((elem) => elem.id === SELECT_ALL_ID)) {
|
|
62
|
-
if (this.items.length > 0) {
|
|
63
|
-
this.control.setValue(this.items);
|
|
64
|
-
}
|
|
65
|
-
if (this.items.length === 1) {
|
|
66
|
-
this.fetchItems();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
59
|
}
|
|
70
60
|
_observeFetchItems() {
|
|
71
61
|
this.control.valueChanges
|
|
@@ -80,61 +70,61 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
80
70
|
this.control.setValue(filledValues, { emitEvent: false });
|
|
81
71
|
});
|
|
82
72
|
combineLatest([
|
|
83
|
-
this.control.valueChanges.pipe(map((values) => values?.map((value) => value.id) ?? []), distinctUntilChangedJSONs(), filter((ids) => ids.some((id) => !this.items.some((item) => item.id === id))
|
|
73
|
+
this.control.valueChanges.pipe(map((values) => values?.map((value) => value.id) ?? []), distinctUntilChangedJSONs(), filter((ids) => ids.some((id) => !this.items.some((item) => item.id === id)) &&
|
|
74
|
+
this.allItemCount() !== this.value?.length)),
|
|
84
75
|
this.meta$,
|
|
85
76
|
])
|
|
86
77
|
.pipe(takeUntilDestroyed(this.dr))
|
|
87
78
|
.subscribe(() => {
|
|
88
|
-
this.fetchItems();
|
|
79
|
+
this.fetchItems(false);
|
|
89
80
|
});
|
|
90
81
|
}
|
|
91
82
|
_subscribeOnMetaChanges() {
|
|
92
83
|
this.meta$.pipe(takeUntilDestroyed(this.dr)).subscribe(() => {
|
|
93
|
-
this.fetchItems();
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
_subscribeOnValueControl() {
|
|
97
|
-
let controlValue = this.control.value;
|
|
98
|
-
this.control?.valueChanges
|
|
99
|
-
.pipe(distinctUntilChangedJSONs(), map((values) => values ?? []), takeUntilDestroyed(this.dr))
|
|
100
|
-
.subscribe((values) => {
|
|
84
|
+
this.fetchItems(false);
|
|
101
85
|
if (this.itemSelectAll()) {
|
|
102
|
-
|
|
103
|
-
values.filter((elem) => elem.id === SELECT_ALL_ID).length === 0 &&
|
|
104
|
-
controlValue.includes(this.selectAllItem)) {
|
|
105
|
-
this.control.setValue([], { emitEvent: false });
|
|
106
|
-
}
|
|
107
|
-
if (values?.some((elem) => elem.id === SELECT_ALL_ID)) {
|
|
108
|
-
this.control.setValue(this.items, { emitEvent: false });
|
|
109
|
-
}
|
|
110
|
-
if (this.items.length !== values.length &&
|
|
111
|
-
controlValue?.includes(this.selectAllItem) &&
|
|
112
|
-
values?.some((elem) => elem.id === SELECT_ALL_ID)) {
|
|
113
|
-
this.control.setValue(values.filter((elem) => elem !== this.selectAllItem), { emitEvent: false });
|
|
114
|
-
}
|
|
86
|
+
this.fetchAllCount();
|
|
115
87
|
}
|
|
116
|
-
controlValue = this.control.value;
|
|
117
88
|
});
|
|
118
89
|
}
|
|
119
90
|
ngOnDestroy() {
|
|
120
91
|
this.onSearch$.complete();
|
|
121
|
-
this.onSearchSubscription?.unsubscribe();
|
|
122
92
|
this.onCancelButtonSubscription?.unsubscribe();
|
|
123
|
-
this.onClearButtonSubscription?.unsubscribe();
|
|
124
93
|
}
|
|
125
|
-
|
|
94
|
+
fetchAllCount(searchValue) {
|
|
95
|
+
const { idField, valueField } = this.metaFields;
|
|
96
|
+
if (!this.meta?.table?.name || idField === null || valueField === null) {
|
|
97
|
+
this.allItemCount.set(this.items.length);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const where = this.buildWhere(searchValue);
|
|
101
|
+
const qParams = {
|
|
102
|
+
table: this.meta.table,
|
|
103
|
+
where,
|
|
104
|
+
};
|
|
105
|
+
this.store
|
|
106
|
+
.fetchAllCount(qParams, this.inputMultiSelectRowsLimit())
|
|
107
|
+
.pipe(takeUntilDestroyed(this.dr))
|
|
108
|
+
.subscribe((count) => {
|
|
109
|
+
this.allItemCount.set(count);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
fetchItems(fetchAll, searchValue) {
|
|
126
113
|
const { idField, valueField } = this.metaFields;
|
|
127
114
|
if (!this.meta?.table?.name || idField === null || valueField === null) {
|
|
115
|
+
if (this.items.length > 0) {
|
|
116
|
+
this.filteredItems.set(searchValue ? this.items.filter((item) => item.name.startsWith(searchValue.trim())) : null);
|
|
117
|
+
const items = this.filteredItems() ?? this.items;
|
|
118
|
+
if (fetchAll && items) {
|
|
119
|
+
this.control.setValue(items);
|
|
120
|
+
this.allItemCount.set(items.length);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
128
123
|
return;
|
|
129
124
|
}
|
|
130
125
|
const selectedItemIDs = this._getSelectedItemIDs(searchValue);
|
|
131
126
|
this.loading = true;
|
|
132
127
|
const where = this.buildWhere(searchValue);
|
|
133
|
-
const selectedItemIdsWhere = this._buildSelectedItemIdsWhere(where, selectedItemIDs, idField);
|
|
134
|
-
let fetchAll = false;
|
|
135
|
-
if (this.control.value?.some((elem) => elem.id === SELECT_ALL_ID)) {
|
|
136
|
-
fetchAll = true;
|
|
137
|
-
}
|
|
138
128
|
const qParams = {
|
|
139
129
|
table: this.meta.table,
|
|
140
130
|
where,
|
|
@@ -143,22 +133,21 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
143
133
|
distinct_on: this.meta.distinct_on,
|
|
144
134
|
subquery: this.meta.subquery,
|
|
145
135
|
};
|
|
146
|
-
|
|
136
|
+
let selectedItemIdsWhere;
|
|
137
|
+
if (fetchAll) {
|
|
138
|
+
if (this.inputMultiSelectRowsLimit()) {
|
|
139
|
+
qParams.limit = this.inputMultiSelectRowsLimit();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
selectedItemIdsWhere = this._buildSelectedItemIdsWhere(where, selectedItemIDs, idField);
|
|
147
144
|
qParams.limit = this.meta.limit ?? this.limit;
|
|
148
145
|
}
|
|
149
146
|
this.store
|
|
150
147
|
.getResults(qParams, true, selectedItemIdsWhere)
|
|
151
148
|
.pipe(tap((data) => {
|
|
152
|
-
this._handleResults(data, idField, valueField, selectedItemIDs);
|
|
149
|
+
this._handleResults(fetchAll, data, idField, valueField, selectedItemIDs);
|
|
153
150
|
}), tap(() => {
|
|
154
|
-
if (this.itemSelectAll() &&
|
|
155
|
-
this.items.length > 0 &&
|
|
156
|
-
!this.items.includes(this.selectAllItem)) {
|
|
157
|
-
this.items.unshift(this.selectAllItem);
|
|
158
|
-
}
|
|
159
|
-
if (fetchAll) {
|
|
160
|
-
this.control.setValue(this.items, { emitEvent: false });
|
|
161
|
-
}
|
|
162
151
|
this.loading = false;
|
|
163
152
|
this.cdr.markForCheck();
|
|
164
153
|
}), takeUntilDestroyed(this.dr))
|
|
@@ -170,38 +159,18 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
170
159
|
.join(', ') ?? '';
|
|
171
160
|
});
|
|
172
161
|
}
|
|
173
|
-
|
|
174
|
-
this.
|
|
175
|
-
|
|
176
|
-
.
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const founded = elements.item(i);
|
|
182
|
-
const item = founded?.parentElement;
|
|
183
|
-
if (founded && item && item.className === 'prizm-input-form-body') {
|
|
184
|
-
clearButtonClicks$.push(of(null).pipe(delay(300), switchMap(() => {
|
|
185
|
-
const clearButton = item.parentElement?.getElementsByClassName('prizm-input-label-clear-btn prizm-input-button-default clear-icon interactive ng-star-inserted');
|
|
186
|
-
if (clearButton?.[0]) {
|
|
187
|
-
clearButton[0].addEventListener('click', () => {
|
|
188
|
-
this.onSearch$.next('');
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
return of(null);
|
|
192
|
-
})));
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return clearButtonClicks$.length > 0 ? clearButtonClicks$[0] : of(null);
|
|
196
|
-
}
|
|
197
|
-
this.cachedString = value;
|
|
198
|
-
return of(null);
|
|
199
|
-
}), takeUntilDestroyed(this.dr))
|
|
200
|
-
.subscribe();
|
|
162
|
+
selectAll() {
|
|
163
|
+
if (this.allItemCount() === this.value?.length) {
|
|
164
|
+
this.control.setValue([]);
|
|
165
|
+
this.fetchItems(false, this.searchValue());
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.fetchItems(true, this.searchValue());
|
|
169
|
+
}
|
|
201
170
|
}
|
|
202
171
|
_getSelectedItemIDs(searchValue) {
|
|
203
172
|
if (!searchValue || searchValue === '') {
|
|
204
|
-
return this.value?.
|
|
173
|
+
return this.value?.map((val) => val.id?.toString());
|
|
205
174
|
}
|
|
206
175
|
return;
|
|
207
176
|
}
|
|
@@ -211,18 +180,22 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
211
180
|
}
|
|
212
181
|
return;
|
|
213
182
|
}
|
|
214
|
-
_handleResults(data, idField, valueField, selectedItemIDs) {
|
|
183
|
+
_handleResults(fetchAll, data, idField, valueField, selectedItemIDs) {
|
|
215
184
|
this.items = data.data.map((item) => ({
|
|
216
185
|
...item,
|
|
217
186
|
id: item[idField] ?? '',
|
|
218
187
|
name: this._getNameFromField(item, valueField),
|
|
188
|
+
full_name: item.name,
|
|
219
189
|
}));
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
}
|
|
223
|
-
this._updateControlValues(data, idField, valueField, selectedItemIDs);
|
|
190
|
+
this.itemsChange.emit(this.items);
|
|
191
|
+
this._updateControlValues(fetchAll, data, idField, valueField, selectedItemIDs);
|
|
224
192
|
}
|
|
225
|
-
_updateControlValues(data, idField, valueField, selectedItemIDs) {
|
|
193
|
+
_updateControlValues(fetchAll, data, idField, valueField, selectedItemIDs) {
|
|
194
|
+
if (fetchAll) {
|
|
195
|
+
this.control.setValue(this.items);
|
|
196
|
+
this.allItemCount.set(this.items.length);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
226
199
|
const idsSelectedValues = new Set(this.value?.map((val) => val[idField]) ?? []);
|
|
227
200
|
const availableItems = data.selectedIdsQuery
|
|
228
201
|
?.filter((item) => idsSelectedValues.has(item[idField]))
|
|
@@ -236,7 +209,6 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
236
209
|
}
|
|
237
210
|
const itemsThatDontExist = availableItems.filter((new_item) => !this.items?.some((value) => value.id === new_item.id));
|
|
238
211
|
this.items.push(...itemsThatDontExist);
|
|
239
|
-
this.itemsChange.emit(this.items);
|
|
240
212
|
}
|
|
241
213
|
_getNameFromField(item, field) {
|
|
242
214
|
if (field.includes('.')) {
|
|
@@ -258,11 +230,11 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
258
230
|
}
|
|
259
231
|
}
|
|
260
232
|
getListLength(list) {
|
|
261
|
-
const length = list.
|
|
233
|
+
const length = list.length;
|
|
262
234
|
return length === 1 ? '' : String(length);
|
|
263
235
|
}
|
|
264
236
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ParamMultiSelectComponent, deps: [{ token: i0.Injector }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
265
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
237
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ParamMultiSelectComponent, isStandalone: true, selector: "sproc-param-multi-select", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, itemSelectAll: { classPropertyName: "itemSelectAll", publicName: "itemSelectAll", isSignal: true, isRequired: false, transformFunction: null }, itemSelectAllName: { classPropertyName: "itemSelectAllName", publicName: "itemSelectAllName", isSignal: true, isRequired: false, transformFunction: null }, shortPickedLength: { classPropertyName: "shortPickedLength", publicName: "shortPickedLength", isSignal: true, isRequired: false, transformFunction: null }, stringify: { classPropertyName: "stringify", publicName: "stringify", isSignal: true, isRequired: false, transformFunction: null }, identityMatcher: { classPropertyName: "identityMatcher", publicName: "identityMatcher", isSignal: true, isRequired: false, transformFunction: null }, buildShowedValue: { classPropertyName: "buildShowedValue", publicName: "buildShowedValue", isSignal: true, isRequired: false, transformFunction: null }, inputMultiSelectRowsLimit: { classPropertyName: "inputMultiSelectRowsLimit", publicName: "inputMultiSelectRowsLimit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, providers: [
|
|
266
238
|
FastQueryStore,
|
|
267
239
|
{
|
|
268
240
|
provide: TUI_ITEMS_HANDLERS,
|
|
@@ -273,11 +245,13 @@ export class ParamMultiSelectComponent extends ParamSelectBase {
|
|
|
273
245
|
disabledItemHandler: signal((_) => false),
|
|
274
246
|
}),
|
|
275
247
|
},
|
|
276
|
-
], usesInheritance: true, ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"readmode ? readTemplate : editTemplate\">\n <ng-template #readTemplate>\n <div class=\"container container--read\" [attr.sproc-param-style]=\"paramStyle\">\n <ng-container *ngIf=\"label\">\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <div class=\"label-wrapper\">\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </div>\n </ng-template>\n <ng-template ngSwitchDefault>\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"value ? showedValueTemplate : emptyTemplate\">\n <ng-template #showedValueTemplate>\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <pre class=\"value\">{{ showedValue }}</pre>\n </ng-template>\n <ng-template ngSwitchDefault>\n <div class=\"value\" [tuiHint]=\"showedValue\">\n <span>{{ showedValue }}</span>\n </div>\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #emptyTemplate>\n <span class=\"value\">-</span>\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #editTemplate>\n <div class=\"container container--edit\" [attr.sproc-param-style]=\"paramStyle\">\n <div *ngIf=\"label\" class=\"label-wrapper\" [class.applied]=\"applied()\">\n <span class=\"label\" [class.required]=\"required\">\n {{ label }}\n </span>\n <tui-icon\n *ngIf=\"hint\"\n icon=\"assets/ngx-register-base/icons/circle-info-empty.svg\"\n [tuiHint]=\"hint\"\n class=\"hintIcon\"\n ></tui-icon>\n </div>\n <tui-multi-select\n [formControl]=\"control\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n tuiAppearance=\"sproc-input-appearance\"\n [valueContent]=\"valueContent\"\n tuiTextfieldSize=\"m\"\n [stringify]=\"stringify()\"\n [identityMatcher]=\"identityMatcher()\"\n (searchChange)=\"onSearch($event)\"\n [editable]=\"searchable\"\n >\n <span class=\"placeholder\">{{ placeholder() }}</span>\n\n <tui-data-list-wrapper\n *tuiDataList\n tuiMultiSelectGroup\n [items]=\"items\"\n [itemContent]=\"listItemTemplate ?? itemContent\"\n ></tui-data-list-wrapper>\n </tui-multi-select>\n\n <ng-template #itemContent let-data>\n {{ data.name }}\n </ng-template>\n <ng-template #valueContent let-list>\n @let isSingle = list.length === 1;\n <span [class]=\"isSingle ? 'choosed choosed-one' : 'choosed choosed-many'\">\n {{ isSingle ? list[0].name : shortPickedLength() ? '\u0412\u044B\u0431\u0440\u0430\u043D\u043E: ' : null }}\n {{ getListLength(list) }}\n </span>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-text-12px,.body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.table-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.button-links-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.button-links-12px-600{font-family:Inter,serif;font-size:12px;font-weight:600;line-height:16px}.button-links-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-area{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:20px}.static-title-h3{font-family:Inter,serif;font-size:16px;font-weight:600;line-height:20px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.dynamic-title-h4{font-family:Inter,serif;font-size:14px;font-weight:800;line-height:20px}.main-body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:20px}.main-body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.main-subscription{font-family:Inter,serif;font-size:10px;font-weight:400;line-height:12px}.input-helper-9px{font-family:Inter,serif;font-size:9px;font-weight:300;line-height:12px}.typography-content-text{font-family:Inter,serif;font-size:12px;font-weight:350;line-height:16px}.main-subtitle,.card-content-text{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.filter-header-text{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.btn-14px{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.search-11px{font-family:Inter,serif;font-size:11px;font-weight:300;line-height:12px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}.textfield-icons-container{display:flex;margin-inline-end:.5rem;margin-inline-start:.5rem;flex-direction:row;align-items:center;gap:8px}.textfield-icons-container .invalid-icon{color:var(--deleted-color);height:16px;width:16px}.textfield-icons-container .cleaner-icon{color:var(--gray-icon);height:16px;width:16px;pointer-events:auto}.textfield-icons-container .cleaner-icon:hover{color:var(--main-black);cursor:pointer}.textfield-icons-container .chevron{color:var(--gray-icon);height:16px;width:16px;pointer-events:none}.clickable:hover{cursor:pointer}.read-style-card[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}.read-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.read-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-card[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-card[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}.read-style-filter[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}.read-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.read-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-filter[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-filter[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}.edit-style-card[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}.edit-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.edit-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-filter[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}.edit-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.edit-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px}.default-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.default-label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .choosed{display:flex;cursor:pointer;align-items:center;position:absolute;justify-content:space-between;z-index:22;border-radius:2px;height:16px}:host .choosed-many{color:var(--main-black);background:var(--input-hover-background-color);padding-left:8px;width:80px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .choosed-one{display:block;min-width:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:200px;flex-shrink:0;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--read[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}:host .container--read[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--read[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}:host .container--read[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}:host .container--read[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--read[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}:host .container--edit[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}:host .container--edit[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--edit[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}:host .container--edit[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--edit[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=card] .label-wrapper{padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%;display:flex;justify-content:space-between}:host .container--edit[sproc-param-style=card] .placeholder{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=filter] .placeholder{margin-left:8px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit .selected-item-wrapper{display:flex;flex-direction:row;padding:4px;margin:0 2px;min-width:4px;max-width:100%;align-items:center;justify-content:space-between;border-radius:2px;background:var(--chip-background);color:var(--main-black);cursor:pointer;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .hintIcon{width:16px;height:16px}:host ::ng-deep .choosed{display:none}:host ::ng-deep .empty{position:relative}:host ::ng-deep .t-value-content{padding-left:16px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: i1.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"] }, { kind: "ngmodule", type: TuiMultiSelectModule }, { kind: "component", type: i2.TuiMultiSelectComponent, selector: "tui-multi-select", inputs: ["stringify", "identityMatcher", "search", "placeholder", "editable", "disabledItemHandler", "valueContent", "tagValidator", "rows", "autoColor"], outputs: ["searchChange"] }, { kind: "directive", type: i2.TuiMultiSelectGroupDirective, selector: "[tuiMultiSelectGroup]" }, { kind: "directive", type: i2.TuiMultiSelectDirective, selector: "tui-multi-select" }, { kind: "directive", type: i3.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i4.TuiDataListWrapperComponent, selector: "tui-data-list-wrapper:not([labels]), tui-data-list-wrapper:not([labels])[new]", inputs: ["items", "disabledItemHandler", "emptyContent", "size", "itemContent"], outputs: ["itemClick"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: TuiAppearance, selector: "[tuiAppearance]", inputs: ["tuiAppearance", "tuiAppearanceState", "tuiAppearanceFocus", "tuiAppearanceMode"] }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i2.TuiTextfieldCleanerDirective, selector: "[tuiTextfieldCleaner]", inputs: ["tuiTextfieldCleaner"] }, { kind: "directive", type: i2.TuiTextfieldLabelOutsideDirective, selector: "[tuiTextfieldLabelOutside]", inputs: ["tuiTextfieldLabelOutside"] }, { kind: "directive", type: i2.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
248
|
+
ValidationMessageService,
|
|
249
|
+
TuiDropdownDirective,
|
|
250
|
+
], usesInheritance: true, ngImport: i0, template: "<ng-container [ngTemplateOutlet]=\"readmode ? readTemplate : editTemplate\">\n <ng-template #readTemplate>\n <div class=\"container container--read\" [attr.sproc-param-style]=\"paramStyle\">\n <ng-container *ngIf=\"label\">\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <div class=\"label-wrapper\">\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </div>\n </ng-template>\n <ng-template ngSwitchDefault>\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"value ? showedValueTemplate : emptyTemplate\">\n <ng-template #showedValueTemplate>\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <pre class=\"value\">{{ showedValue }}</pre>\n </ng-template>\n <ng-template ngSwitchDefault>\n <div class=\"value\" [tuiHint]=\"showedValue\">\n <span>{{ showedValue }}</span>\n </div>\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #emptyTemplate>\n <span class=\"value\">-</span>\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #editTemplate>\n <div class=\"container container--edit\" [attr.sproc-param-style]=\"paramStyle\">\n <div *ngIf=\"label\" class=\"label-wrapper\" [class.applied]=\"applied()\">\n <span class=\"label\" [class.required]=\"required\">\n {{ label }}\n </span>\n <tui-icon *ngIf=\"hint\" icon=\"@sproc.circle-info-empty\" [tuiHint]=\"hint\" class=\"hintIcon\" />\n </div>\n <tui-multi-select\n tuiAppearance=\"sproc-input-appearance\"\n [formControl]=\"control\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n [valueContent]=\"valueContent\"\n [tuiTextfieldSize]=\"size()\"\n [stringify]=\"stringify()\"\n [identityMatcher]=\"identityMatcher()\"\n [tuiDropdownMinHeight]=\"minDropdownHeight()\"\n [tuiDropdownMaxHeight]=\"maxDropdownHeight()\"\n [tuiDropdownLimitWidth]=\"dropdownLimitWidth()\"\n [editable]=\"searchable\"\n (searchChange)=\"onSearch($event)\"\n >\n <span class=\"placeholder\">{{ placeholder() }}</span>\n <!-- TODO \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435 \u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u043D\u0433\u0430 deprecated tui-multi-select \u043D\u0430 tui-textfield\n <div class=\"textfield-icons-container\">\n @if (isInvalidAndNotPristine) {\n <sproc-param-invalid-icon [hint]=\"validationErrorHint()\" />\n }\n </div>\n -->\n <div *tuiDataList>\n <tui-loader [showLoader]=\"loading\" [overlay]=\"true\">\n @if (itemSelectAll() && items.length > 1) {\n <div class=\"select-all\" (click)=\"selectAll()\">\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"s\"\n [checked]=\"value && value.length === allItemCount()\"\n />\n {{ itemSelectAllName() }}\n </div>\n }\n @let currentItems = filteredItems() ?? items;\n <cdk-virtual-scroll-viewport\n class=\"items-scroll\"\n tuiScrollable\n [itemSize]=\"32\"\n [style.height.px]=\"currentItems.length * 32 + 8\"\n [style.max-height.px]=\"maxDropdownHeight() - 56\"\n >\n <tui-data-list tuiMultiSelectGroup>\n <button *cdkVirtualFor=\"let item of currentItems\" tuiOption [value]=\"item\">\n @if (listItemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-container>\n } @else {\n {{ item.name }}\n }\n </button>\n </tui-data-list>\n </cdk-virtual-scroll-viewport>\n </tui-loader>\n </div>\n </tui-multi-select>\n\n <ng-template #valueContent let-list>\n @let isSingle = list.length === 1;\n <span [class]=\"isSingle ? 'choosed choosed-one' : 'choosed choosed-many'\">\n {{ isSingle ? list[0].name : shortPickedLength() ? '\u0412\u044B\u0431\u0440\u0430\u043D\u043E: ' : null }}\n {{ getListLength(list) }}\n </span>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-text-12px,.body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.table-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.button-links-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.button-links-12px-600{font-family:Inter,serif;font-size:12px;font-weight:600;line-height:16px}.button-links-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-area{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:20px}.static-title-h3{font-family:Inter,serif;font-size:16px;font-weight:600;line-height:20px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.dynamic-title-h4{font-family:Inter,serif;font-size:14px;font-weight:800;line-height:20px}.main-body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:20px}.main-body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.main-subscription{font-family:Inter,serif;font-size:10px;font-weight:400;line-height:12px}.input-helper-9px{font-family:Inter,serif;font-size:9px;font-weight:300;line-height:12px}.typography-content-text{font-family:Inter,serif;font-size:12px;font-weight:350;line-height:16px}.main-subtitle,.card-content-text{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.filter-header-text{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.btn-14px{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.search-11px{font-family:Inter,serif;font-size:11px;font-weight:300;line-height:12px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}.textfield-icons-container{display:flex;margin-inline-end:.5rem;margin-inline-start:.5rem;flex-direction:row;align-items:center;gap:8px}.textfield-icons-container .invalid-icon{color:var(--deleted-color);height:16px;width:16px}.textfield-icons-container .cleaner-icon{color:var(--gray-icon);height:16px;width:16px;pointer-events:auto}.textfield-icons-container .cleaner-icon:hover{color:var(--main-black);cursor:pointer}.textfield-icons-container .chevron{color:var(--gray-icon);height:16px;width:16px;pointer-events:none}.clickable:hover{cursor:pointer}.read-style-card[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}.read-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.read-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-card[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-card[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}.read-style-filter[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}.read-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.read-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-filter[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-filter[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}.edit-style-card[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}.edit-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.edit-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-card[sproc-param-style=card] input,.edit-style-card[sproc-param-style=card] textarea,.edit-style-card[sproc-param-style=card] sproc-custom-date-time-range,.edit-style-card[sproc-param-style=card] tui-multi-select{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px;border:1px solid var(--stroke1)}.edit-style-filter[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column;border-bottom:1px solid var(--stroke1)}.edit-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.edit-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-filter[sproc-param-style=filter] input,.edit-style-filter[sproc-param-style=filter] textarea{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.default-label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px}.default-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.default-label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .choosed{display:flex;cursor:pointer;align-items:center;position:absolute;justify-content:space-between;z-index:22;border-radius:2px;height:16px;padding-left:8px}:host .choosed-many{color:var(--main-black);background:var(--input-hover-background-color);width:80px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .choosed-one{display:block;min-width:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:200px;flex-shrink:0;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--read[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}:host .container--read[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--read[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}:host .container--read[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}:host .container--read[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--read[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}:host .container--edit[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}:host .container--edit[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--edit[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=card] input,:host .container--edit[sproc-param-style=card] textarea,:host .container--edit[sproc-param-style=card] sproc-custom-date-time-range,:host .container--edit[sproc-param-style=card] tui-multi-select{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px;border:1px solid var(--stroke1)}:host .container--edit[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column;border-bottom:1px solid var(--stroke1)}:host .container--edit[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--edit[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=filter] input,:host .container--edit[sproc-param-style=filter] textarea{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=card] .label-wrapper{padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%;display:flex;justify-content:space-between}:host .container--edit[sproc-param-style=card] .placeholder{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=filter] .placeholder{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit .selected-item-wrapper{display:flex;flex-direction:row;padding:4px;margin:0 2px;min-width:4px;max-width:100%;align-items:center;justify-content:space-between;border-radius:2px;background:var(--chip-background);color:var(--main-black);cursor:pointer;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .hintIcon{width:16px;height:16px}.select-all{margin:16px 16px 8px;display:flex;gap:8px}.items-scroll{margin-top:8px}[tuiScrollable]{scrollbar-width:none;-ms-overflow-style:none}[tuiScrollable]::-webkit-scrollbar,[tuiScrollable]::-webkit-scrollbar-thumb{display:none}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: i1.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"] }, { kind: "ngmodule", type: TuiMultiSelectModule }, { kind: "component", type: i2.TuiMultiSelectComponent, selector: "tui-multi-select", inputs: ["stringify", "identityMatcher", "search", "placeholder", "editable", "disabledItemHandler", "valueContent", "tagValidator", "rows", "autoColor"], outputs: ["searchChange"] }, { kind: "directive", type: i2.TuiMultiSelectGroupDirective, selector: "[tuiMultiSelectGroup]" }, { kind: "directive", type: i2.TuiMultiSelectDirective, selector: "tui-multi-select" }, { kind: "directive", type: i3.TuiDropdownOptionsDirective, selector: "[tuiDropdownAlign], [tuiDropdownAppearance], [tuiDropdownDirection], [tuiDropdownLimitWidth], [tuiDropdownMinHeight], [tuiDropdownMaxHeight], [tuiDropdownOffset]", inputs: ["tuiDropdownAlign", "tuiDropdownAppearance", "tuiDropdownDirection", "tuiDropdownLimitWidth", "tuiDropdownMinHeight", "tuiDropdownMaxHeight", "tuiDropdownOffset"] }, { kind: "component", type: i4.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i4.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i4.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: TuiAppearance, selector: "[tuiAppearance]", inputs: ["tuiAppearance", "tuiAppearanceState", "tuiAppearanceFocus", "tuiAppearanceMode"] }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i2.TuiTextfieldCleanerDirective, selector: "[tuiTextfieldCleaner]", inputs: ["tuiTextfieldCleaner"] }, { kind: "directive", type: i2.TuiTextfieldLabelOutsideDirective, selector: "[tuiTextfieldLabelOutside]", inputs: ["tuiTextfieldLabelOutside"] }, { kind: "directive", type: i2.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "directive", type: TuiScrollable, selector: "[tuiScrollable]" }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
277
251
|
}
|
|
278
252
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ParamMultiSelectComponent, decorators: [{
|
|
279
253
|
type: Component,
|
|
280
|
-
args: [{ selector: 'sproc-param-multi-select', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
254
|
+
args: [{ selector: 'sproc-param-multi-select', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
281
255
|
FastQueryStore,
|
|
282
256
|
{
|
|
283
257
|
provide: TUI_ITEMS_HANDLERS,
|
|
@@ -288,7 +262,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
288
262
|
disabledItemHandler: signal((_) => false),
|
|
289
263
|
}),
|
|
290
264
|
},
|
|
291
|
-
|
|
265
|
+
ValidationMessageService,
|
|
266
|
+
TuiDropdownDirective,
|
|
267
|
+
], imports: [
|
|
292
268
|
NgTemplateOutlet,
|
|
293
269
|
NgIf,
|
|
294
270
|
NgSwitch,
|
|
@@ -301,9 +277,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
301
277
|
TuiTextfield,
|
|
302
278
|
TuiAppearance,
|
|
303
279
|
TuiTextfieldControllerModule,
|
|
304
|
-
], template: "<ng-container [ngTemplateOutlet]=\"readmode ? readTemplate : editTemplate\">\n <ng-template #readTemplate>\n <div class=\"container container--read\" [attr.sproc-param-style]=\"paramStyle\">\n <ng-container *ngIf=\"label\">\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <div class=\"label-wrapper\">\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </div>\n </ng-template>\n <ng-template ngSwitchDefault>\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"value ? showedValueTemplate : emptyTemplate\">\n <ng-template #showedValueTemplate>\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <pre class=\"value\">{{ showedValue }}</pre>\n </ng-template>\n <ng-template ngSwitchDefault>\n <div class=\"value\" [tuiHint]=\"showedValue\">\n <span>{{ showedValue }}</span>\n </div>\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #emptyTemplate>\n <span class=\"value\">-</span>\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #editTemplate>\n <div class=\"container container--edit\" [attr.sproc-param-style]=\"paramStyle\">\n <div *ngIf=\"label\" class=\"label-wrapper\" [class.applied]=\"applied()\">\n <span class=\"label\" [class.required]=\"required\">\n {{ label }}\n </span>\n <tui-icon\n *ngIf=\"hint\"\n icon=\"assets/ngx-register-base/icons/circle-info-empty.svg\"\n [tuiHint]=\"hint\"\n class=\"hintIcon\"\n ></tui-icon>\n </div>\n <tui-multi-select\n [formControl]=\"control\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n tuiAppearance=\"sproc-input-appearance\"\n [valueContent]=\"valueContent\"\n tuiTextfieldSize=\"m\"\n [stringify]=\"stringify()\"\n [identityMatcher]=\"identityMatcher()\"\n (searchChange)=\"onSearch($event)\"\n [editable]=\"searchable\"\n >\n <span class=\"placeholder\">{{ placeholder() }}</span>\n\n <tui-data-list-wrapper\n *tuiDataList\n tuiMultiSelectGroup\n [items]=\"items\"\n [itemContent]=\"listItemTemplate ?? itemContent\"\n ></tui-data-list-wrapper>\n </tui-multi-select>\n\n <ng-template #itemContent let-data>\n {{ data.name }}\n </ng-template>\n <ng-template #valueContent let-list>\n @let isSingle = list.length === 1;\n <span [class]=\"isSingle ? 'choosed choosed-one' : 'choosed choosed-many'\">\n {{ isSingle ? list[0].name : shortPickedLength() ? '\u0412\u044B\u0431\u0440\u0430\u043D\u043E: ' : null }}\n {{ getListLength(list) }}\n </span>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-text-12px,.body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.table-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.button-links-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.button-links-12px-600{font-family:Inter,serif;font-size:12px;font-weight:600;line-height:16px}.button-links-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-area{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:20px}.static-title-h3{font-family:Inter,serif;font-size:16px;font-weight:600;line-height:20px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.dynamic-title-h4{font-family:Inter,serif;font-size:14px;font-weight:800;line-height:20px}.main-body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:20px}.main-body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.main-subscription{font-family:Inter,serif;font-size:10px;font-weight:400;line-height:12px}.input-helper-9px{font-family:Inter,serif;font-size:9px;font-weight:300;line-height:12px}.typography-content-text{font-family:Inter,serif;font-size:12px;font-weight:350;line-height:16px}.main-subtitle,.card-content-text{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.filter-header-text{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.btn-14px{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.search-11px{font-family:Inter,serif;font-size:11px;font-weight:300;line-height:12px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}.textfield-icons-container{display:flex;margin-inline-end:.5rem;margin-inline-start:.5rem;flex-direction:row;align-items:center;gap:8px}.textfield-icons-container .invalid-icon{color:var(--deleted-color);height:16px;width:16px}.textfield-icons-container .cleaner-icon{color:var(--gray-icon);height:16px;width:16px;pointer-events:auto}.textfield-icons-container .cleaner-icon:hover{color:var(--main-black);cursor:pointer}.textfield-icons-container .chevron{color:var(--gray-icon);height:16px;width:16px;pointer-events:none}.clickable:hover{cursor:pointer}.read-style-card[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}.read-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.read-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-card[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-card[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}.read-style-filter[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}.read-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.read-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-filter[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-filter[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}.edit-style-card[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}.edit-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.edit-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-filter[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}.edit-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.edit-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px}.default-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.default-label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .choosed{display:flex;cursor:pointer;align-items:center;position:absolute;justify-content:space-between;z-index:22;border-radius:2px;height:16px}:host .choosed-many{color:var(--main-black);background:var(--input-hover-background-color);padding-left:8px;width:80px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .choosed-one{display:block;min-width:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:200px;flex-shrink:0;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--read[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}:host .container--read[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--read[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}:host .container--read[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}:host .container--read[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--read[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}:host .container--edit[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}:host .container--edit[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--edit[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column}:host .container--edit[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--edit[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=card] .label-wrapper{padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%;display:flex;justify-content:space-between}:host .container--edit[sproc-param-style=card] .placeholder{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=filter] .placeholder{margin-left:8px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit .selected-item-wrapper{display:flex;flex-direction:row;padding:4px;margin:0 2px;min-width:4px;max-width:100%;align-items:center;justify-content:space-between;border-radius:2px;background:var(--chip-background);color:var(--main-black);cursor:pointer;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .hintIcon{width:16px;height:16px}:host ::ng-deep .choosed{display:none}:host ::ng-deep .empty{position:relative}:host ::ng-deep .t-value-content{padding-left:16px}\n"] }]
|
|
280
|
+
TuiDataListWrapper,
|
|
281
|
+
TuiCheckbox,
|
|
282
|
+
NgTemplateOutlet,
|
|
283
|
+
TuiScrollable,
|
|
284
|
+
CdkFixedSizeVirtualScroll,
|
|
285
|
+
CdkVirtualForOf,
|
|
286
|
+
CdkVirtualScrollViewport,
|
|
287
|
+
TuiLoader,
|
|
288
|
+
], template: "<ng-container [ngTemplateOutlet]=\"readmode ? readTemplate : editTemplate\">\n <ng-template #readTemplate>\n <div class=\"container container--read\" [attr.sproc-param-style]=\"paramStyle\">\n <ng-container *ngIf=\"label\">\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <div class=\"label-wrapper\">\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </div>\n </ng-template>\n <ng-template ngSwitchDefault>\n <span class=\"label\">{{ label }}</span>\n <div class=\"dashed-row\"></div>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"value ? showedValueTemplate : emptyTemplate\">\n <ng-template #showedValueTemplate>\n <ng-container [ngSwitch]=\"paramStyle\">\n <ng-template ngSwitchCase=\"filter\">\n <pre class=\"value\">{{ showedValue }}</pre>\n </ng-template>\n <ng-template ngSwitchDefault>\n <div class=\"value\" [tuiHint]=\"showedValue\">\n <span>{{ showedValue }}</span>\n </div>\n </ng-template>\n </ng-container>\n </ng-template>\n <ng-template #emptyTemplate>\n <span class=\"value\">-</span>\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n <ng-template #editTemplate>\n <div class=\"container container--edit\" [attr.sproc-param-style]=\"paramStyle\">\n <div *ngIf=\"label\" class=\"label-wrapper\" [class.applied]=\"applied()\">\n <span class=\"label\" [class.required]=\"required\">\n {{ label }}\n </span>\n <tui-icon *ngIf=\"hint\" icon=\"@sproc.circle-info-empty\" [tuiHint]=\"hint\" class=\"hintIcon\" />\n </div>\n <tui-multi-select\n tuiAppearance=\"sproc-input-appearance\"\n [formControl]=\"control\"\n [tuiTextfieldLabelOutside]=\"true\"\n [tuiTextfieldCleaner]=\"true\"\n [valueContent]=\"valueContent\"\n [tuiTextfieldSize]=\"size()\"\n [stringify]=\"stringify()\"\n [identityMatcher]=\"identityMatcher()\"\n [tuiDropdownMinHeight]=\"minDropdownHeight()\"\n [tuiDropdownMaxHeight]=\"maxDropdownHeight()\"\n [tuiDropdownLimitWidth]=\"dropdownLimitWidth()\"\n [editable]=\"searchable\"\n (searchChange)=\"onSearch($event)\"\n >\n <span class=\"placeholder\">{{ placeholder() }}</span>\n <!-- TODO \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435 \u0440\u0435\u0444\u0430\u043A\u0442\u043E\u0440\u0438\u043D\u0433\u0430 deprecated tui-multi-select \u043D\u0430 tui-textfield\n <div class=\"textfield-icons-container\">\n @if (isInvalidAndNotPristine) {\n <sproc-param-invalid-icon [hint]=\"validationErrorHint()\" />\n }\n </div>\n -->\n <div *tuiDataList>\n <tui-loader [showLoader]=\"loading\" [overlay]=\"true\">\n @if (itemSelectAll() && items.length > 1) {\n <div class=\"select-all\" (click)=\"selectAll()\">\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"s\"\n [checked]=\"value && value.length === allItemCount()\"\n />\n {{ itemSelectAllName() }}\n </div>\n }\n @let currentItems = filteredItems() ?? items;\n <cdk-virtual-scroll-viewport\n class=\"items-scroll\"\n tuiScrollable\n [itemSize]=\"32\"\n [style.height.px]=\"currentItems.length * 32 + 8\"\n [style.max-height.px]=\"maxDropdownHeight() - 56\"\n >\n <tui-data-list tuiMultiSelectGroup>\n <button *cdkVirtualFor=\"let item of currentItems\" tuiOption [value]=\"item\">\n @if (listItemTemplate) {\n <ng-container\n *ngTemplateOutlet=\"listItemTemplate; context: { $implicit: item }\"\n ></ng-container>\n } @else {\n {{ item.name }}\n }\n </button>\n </tui-data-list>\n </cdk-virtual-scroll-viewport>\n </tui-loader>\n </div>\n </tui-multi-select>\n\n <ng-template #valueContent let-list>\n @let isSingle = list.length === 1;\n <span [class]=\"isSingle ? 'choosed choosed-one' : 'choosed choosed-many'\">\n {{ isSingle ? list[0].name : shortPickedLength() ? '\u0412\u044B\u0431\u0440\u0430\u043D\u043E: ' : null }}\n {{ getListLength(list) }}\n </span>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n", styles: [".input-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-text-12px,.body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.table-heading-12px{font-family:Inter,serif;font-size:12px;font-weight:500;line-height:16px}.table-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.table-text-12px-400{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:16px}.table-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.button-links-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.button-links-12px-600{font-family:Inter,serif;font-size:12px;font-weight:600;line-height:16px}.button-links-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}.input-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.input-area{font-family:Inter,serif;font-size:12px;font-weight:400;line-height:20px}.static-title-h3{font-family:Inter,serif;font-size:16px;font-weight:600;line-height:20px}.static-title-h4{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.dynamic-title-h4{font-family:Inter,serif;font-size:14px;font-weight:800;line-height:20px}.main-body-text-12px{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:20px}.main-body-text-14px{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px}.main-subscription{font-family:Inter,serif;font-size:10px;font-weight:400;line-height:12px}.input-helper-9px{font-family:Inter,serif;font-size:9px;font-weight:300;line-height:12px}.typography-content-text{font-family:Inter,serif;font-size:12px;font-weight:350;line-height:16px}.main-subtitle,.card-content-text{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.filter-header-text{font-family:Inter,serif;font-size:14px;font-weight:500;line-height:18px}.btn-14px{font-family:Inter,serif;font-size:14px;font-weight:400;line-height:16px}.search-11px{font-family:Inter,serif;font-size:11px;font-weight:300;line-height:12px}:root{--input-text-12px: normal 300 12px / 16px \"Inter\";--input-text-14px: normal 300 14px / 16px \"Inter\"}.textfield-icons-container{display:flex;margin-inline-end:.5rem;margin-inline-start:.5rem;flex-direction:row;align-items:center;gap:8px}.textfield-icons-container .invalid-icon{color:var(--deleted-color);height:16px;width:16px}.textfield-icons-container .cleaner-icon{color:var(--gray-icon);height:16px;width:16px;pointer-events:auto}.textfield-icons-container .cleaner-icon:hover{color:var(--main-black);cursor:pointer}.textfield-icons-container .chevron{color:var(--gray-icon);height:16px;width:16px;pointer-events:none}.clickable:hover{cursor:pointer}.read-style-card[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}.read-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.read-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-card[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-card[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}.read-style-filter[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}.read-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.read-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.read-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.read-style-filter[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}.read-style-filter[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}.edit-style-card[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}.edit-style-card[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}.edit-style-card[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-card[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-card[sproc-param-style=card] input,.edit-style-card[sproc-param-style=card] textarea,.edit-style-card[sproc-param-style=card] sproc-custom-date-time-range,.edit-style-card[sproc-param-style=card] tui-multi-select{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px;border:1px solid var(--stroke1)}.edit-style-filter[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column;border-bottom:1px solid var(--stroke1)}.edit-style-filter[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}.edit-style-filter[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.edit-style-filter[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.edit-style-filter[sproc-param-style=filter] input,.edit-style-filter[sproc-param-style=filter] textarea{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}.default-label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px}.default-label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}.default-label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}.default-dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .choosed{display:flex;cursor:pointer;align-items:center;position:absolute;justify-content:space-between;z-index:22;border-radius:2px;height:16px;padding-left:8px}:host .choosed-many{color:var(--main-black);background:var(--input-hover-background-color);width:80px;font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .choosed-one{display:block;min-width:0;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;width:200px;flex-shrink:0;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--read[sproc-param-style=card]{display:flex;align-items:flex-start;gap:4px;padding:8px 0}:host .container--read[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--read[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=card] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=card] .value{font-family:Inter,serif!important;font-size:14px!important;font-weight:400!important;line-height:16px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px;color:var(--main-black)!important}:host .container--read[sproc-param-style=filter]{display:flex;flex-direction:column;align-items:flex-start;align-self:stretch;gap:4px}:host .container--read[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--read[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--read[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--read[sproc-param-style=filter] .dashed-row{display:flex;height:16px;align-items:center;flex:1 0 0;border-bottom:1px dashed var(--table-stroke);min-width:20px}:host .container--read[sproc-param-style=filter] .value{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:20px;color:var(--text-main)}:host .container--edit[sproc-param-style=card]{height:auto;width:100%;display:flex;flex-direction:column;padding-bottom:8px}:host .container--edit[sproc-param-style=card] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%}:host .container--edit[sproc-param-style=card] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=card] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=card] input,:host .container--edit[sproc-param-style=card] textarea,:host .container--edit[sproc-param-style=card] sproc-custom-date-time-range,:host .container--edit[sproc-param-style=card] tui-multi-select{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px;border:1px solid var(--stroke1)}:host .container--edit[sproc-param-style=filter]{width:100%;display:flex;flex-direction:column;border-bottom:1px solid var(--stroke1)}:host .container--edit[sproc-param-style=filter] .label-wrapper{display:flex;padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:fit-content}:host .container--edit[sproc-param-style=filter] .label{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px;color:var(--main-black)}:host .container--edit[sproc-param-style=filter] .label.required:after{content:\"*\";color:var(--brand-danger);margin-left:2px}:host .container--edit[sproc-param-style=filter] input,:host .container--edit[sproc-param-style=filter] textarea{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=card] .label-wrapper{padding-bottom:1.5px;align-items:center;height:16px;gap:4px;width:100%;display:flex;justify-content:space-between}:host .container--edit[sproc-param-style=card] .placeholder{font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .container--edit[sproc-param-style=filter] .placeholder{font-family:Inter,serif;font-size:12px;font-weight:300;line-height:16px}:host .container--edit .selected-item-wrapper{display:flex;flex-direction:row;padding:4px;margin:0 2px;min-width:4px;max-width:100%;align-items:center;justify-content:space-between;border-radius:2px;background:var(--chip-background);color:var(--main-black);cursor:pointer;font-family:Inter,serif;font-size:14px;font-weight:300;line-height:16px}:host .hintIcon{width:16px;height:16px}.select-all{margin:16px 16px 8px;display:flex;gap:8px}.items-scroll{margin-top:8px}[tuiScrollable]{scrollbar-width:none;-ms-overflow-style:none}[tuiScrollable]::-webkit-scrollbar,[tuiScrollable]::-webkit-scrollbar-thumb{display:none}\n"] }]
|
|
305
289
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: Document, decorators: [{
|
|
306
290
|
type: Inject,
|
|
307
291
|
args: [DOCUMENT]
|
|
308
292
|
}] }] });
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tbXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvcGFyYW0tbXVsdGktc2VsZWN0L3BhcmFtLW11bHRpLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL3BhcmFtLW11bHRpLXNlbGVjdC9wYXJhbS1tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBQ2YsZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFFTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osS0FBSyxFQUNMLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILEVBQUUsRUFDRixJQUFJLEVBRUosU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7QUFtQ3JGLE1BQU0sT0FBTyx5QkFDWCxTQUFRLGVBQTJEO0lBc0NuRSxZQUNFLFFBQWtCLEVBQ1EsUUFBa0I7UUFFNUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRlUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXJDNUIsZ0JBQVcsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxrQkFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixrQkFBYSxHQUFHLEtBQUssQ0FDNUIsQ0FBQyxNQUFjLEVBQUUsSUFBd0IsRUFBRSxFQUFFLENBQzNDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUMxRCxDQUFDO1FBQ08sc0JBQWlCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLGNBQVMsR0FBRyxLQUFLLENBQ3hCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQzdELENBQUM7UUFFTyxvQkFBZSxHQUFHLEtBQUssQ0FDOUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQzFCLENBQUM7UUFFZ0IscUJBQWdCLEdBQUcsS0FBSyxDQUN4QyxDQUFDLE1BQTRCLEVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUN4RixDQUFDO1FBRU8sYUFBUSxHQUFHLE1BQU0sRUFBd0IsQ0FBQztRQUVoQyxrQkFBYSxHQUF1QixhQUFhLENBQUM7UUFJM0QsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFUixjQUFTLEdBQTRCLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLHlCQUFvQixHQUF3QixJQUFJLENBQUM7UUFDakQsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFbEIsOEJBQXlCLEdBQXdCLElBQUksQ0FBQztRQUN2RCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztJQU94QixDQUFDO0lBRWUsTUFBTTtRQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsU0FBUzthQUNYLElBQUksQ0FDSCxZQUFZLENBQUMsb0NBQW9DLENBQUMsRUFDbEQsb0JBQW9CLEVBQUUsRUFDdEIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM1QjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRWUsYUFBYTtRQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN4RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO2FBQ3RCLElBQUksQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQ2YsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEIsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQzFDLENBQUM7WUFFRixPQUFPLG9CQUFvQixJQUFJLHdCQUF3QixDQUFDO1FBQzFELENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDNUI7YUFDQSxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVoRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUVMLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQ3ZELHlCQUF5QixFQUFFLEVBQzNCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzlFO1lBQ0QsSUFBSSxDQUFDLEtBQUs7U0FDWCxDQUFDO2FBQ0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNqQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFFdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZO2FBQ3ZCLElBQUksQ0FDSCx5QkFBeUIsRUFBRSxFQUMzQixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFDN0Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM1QjthQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLElBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO29CQUMvRCxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDekMsQ0FBQztvQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDbEQsQ0FBQztnQkFFRCxJQUFJLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO2dCQUVELElBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU07b0JBQ25DLFlBQVksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDMUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsRUFDakQsQ0FBQztvQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FDbkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDcEQsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQ3JCLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7WUFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFUyxVQUFVLENBQUMsV0FBb0I7UUFDdkMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkUsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlGLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUVyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFjO1lBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDdEIsS0FBSztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNoRCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUs7YUFDUCxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQzthQUMvQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUNFLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3JCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUN4QyxDQUFDO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM1QjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVztnQkFDZCxJQUFJLENBQUMsT0FBTztxQkFDVCxXQUFXLEVBQUU7b0JBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7cUJBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFNBQVM7YUFDNUMsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakMsTUFBTSxJQUFJLEdBQUcsT0FBTyxFQUFFLGFBQWEsQ0FBQztvQkFDcEMsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssdUJBQXVCLEVBQUUsQ0FBQzt3QkFDbEUsa0JBQWtCLENBQUMsSUFBSSxDQUNyQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDVixTQUFTLENBQUMsR0FBRyxFQUFFOzRCQUNiLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsc0JBQXNCLENBQzVELGdHQUFnRyxDQUNqRyxDQUFDOzRCQUNGLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQ0FDckIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0NBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dDQUMxQixDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDOzRCQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNsQixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM1QjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxXQUFvQjtRQUM5QyxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCxPQUFPO0lBQ1QsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxLQUFVLEVBQ1YsZUFBcUMsRUFDckMsT0FBZTtRQUVmLElBQUksS0FBSyxJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BFLENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVPLGNBQWMsQ0FDcEIsSUFBUyxFQUNULE9BQWUsRUFDZixVQUFrQixFQUNsQixlQUFxQztRQUVyQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLEdBQUcsSUFBSTtZQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7U0FDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sb0JBQW9CLENBQzFCLElBQVMsRUFDVCxPQUFlLEVBQ2YsVUFBa0IsRUFDbEIsZUFBcUM7UUFFckMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckYsTUFBTSxjQUFjLEdBQ2xCLElBQUksQ0FBQyxnQkFBZ0I7WUFDbkIsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUM1RCxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbkIsR0FBRyxJQUFJO1lBQ1AsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztTQUMvQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFZCxJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9FLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFFRCxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQzlDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FDL0UsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVMsRUFBRSxLQUFhO1FBQ2hELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFTLEVBQUUsS0FBYTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUU3QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFUyxRQUFRLENBQUMsS0FBb0I7UUFDckMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRVMsYUFBYSxDQUFDLElBQTBCO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9GLE9BQU8sTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQzsrR0EvV1UseUJBQXlCLDBDQXlDMUIsUUFBUTttR0F6Q1AseUJBQXlCLCttQ0E1QnpCO1lBQ1QsY0FBYztZQUNkO2dCQUNFLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUNuRCxVQUFVLEVBQUUsQ0FBQyxTQUFvQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNyRCxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7b0JBQzlCLGVBQWUsRUFBRSxTQUFTLENBQUMsZUFBZTtvQkFDMUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBcUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDO2lCQUM5RCxDQUFDO2FBQ0g7U0FDRixpREM5REgsb3JHQW9GQSwrNFVEbkJJLGdCQUFnQixvSkFDaEIsSUFBSSw2RkFDSixRQUFRLDZFQUNSLFlBQVkscUZBQ1osZUFBZSw4REFDZixPQUFPLDRQQUVQLG9CQUFvQixnMEJBQ3BCLG1CQUFtQixzaEJBRW5CLGFBQWEsdUpBQ2IsNEJBQTRCOzs0RkFHbkIseUJBQXlCO2tCQWpDckMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsY0FBYzt3QkFDZDs0QkFDRSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDLENBQUM7NEJBQ25ELFVBQVUsRUFBRSxDQUFDLFNBQW9DLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0NBQ3JELFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUztnQ0FDOUIsZUFBZSxFQUFFLFNBQVMsQ0FBQyxlQUFlO2dDQUMxQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUM7NkJBQzlELENBQUM7eUJBQ0g7cUJBQ0YsY0FDVyxJQUFJLFdBQ1A7d0JBQ1AsZ0JBQWdCO3dCQUNoQixJQUFJO3dCQUNKLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLDRCQUE0QjtxQkFDN0I7OzBCQTJDRSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBET0NVTUVOVCxcbiAgTmdJZixcbiAgTmdTd2l0Y2gsXG4gIE5nU3dpdGNoQ2FzZSxcbiAgTmdTd2l0Y2hEZWZhdWx0LFxuICBOZ1RlbXBsYXRlT3V0bGV0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgZm9yd2FyZFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJpem1NdWx0aVNlbGVjdFNlYXJjaE1hdGNoZXIgfSBmcm9tICdAcHJpem0tdWkvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgb2YsXG4gIHNraXAsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVFVJX0lURU1TX0hBTkRMRVJTLCBUdWlBcHBlYXJhbmNlLCBUdWlIaW50LCBUdWlJY29uLCBUdWlUZXh0ZmllbGQgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlNdWx0aVNlbGVjdE1vZHVsZSwgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFR1aUNvbnRleHQsIFR1aUlkZW50aXR5TWF0Y2hlciwgVHVpU3RyaW5nSGFuZGxlciB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgRmFzdFF1ZXJ5U3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9mYXN0LXF1ZXJ5LXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZpbHRlclNlbGVjdFZhbHVlLCBNZXRhUXVlcnkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9wYXJhbXMudHlwZXMnO1xuaW1wb3J0IHsgUGFyYW1TZWxlY3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9wYXJhbS9wYXJhbS1zZWxlY3QtYmFzZSc7XG5pbXBvcnQgeyBTRUxFQ1RfQUxMX0lELCBzZWxlY3RBbGxJdGVtIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc2VsZWN0LWFsbC11dGlscyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZEpTT05zIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUEFSQU1fU0VBUkNIX0lOUFVUX0RFQk9VTkNFX1RJTUVfTUxTIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzL3BhcmFtcy5jb25zdHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcHJvYy1wYXJhbS1tdWx0aS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFyYW0tbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFyYW0tbXVsdGktc2VsZWN0LmNvbXBvbmVudC5sZXNzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBGYXN0UXVlcnlTdG9yZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBUVUlfSVRFTVNfSEFORExFUlMsXG4gICAgICBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBQYXJhbU11bHRpU2VsZWN0Q29tcG9uZW50KV0sXG4gICAgICB1c2VGYWN0b3J5OiAoY29tcG9uZW50OiBQYXJhbU11bHRpU2VsZWN0Q29tcG9uZW50KSA9PiAoe1xuICAgICAgICBzdHJpbmdpZnk6IGNvbXBvbmVudC5zdHJpbmdpZnksXG4gICAgICAgIGlkZW50aXR5TWF0Y2hlcjogY29tcG9uZW50LmlkZW50aXR5TWF0Y2hlcixcbiAgICAgICAgZGlzYWJsZWRJdGVtSGFuZGxlcjogc2lnbmFsKChfOiBJRmlsdGVyU2VsZWN0VmFsdWUpID0+IGZhbHNlKSxcbiAgICAgIH0pLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBUdWlJY29uLFxuICAgIFR1aUhpbnQsXG4gICAgVHVpTXVsdGlTZWxlY3RNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUdWlUZXh0ZmllbGQsXG4gICAgVHVpQXBwZWFyYW5jZSxcbiAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQYXJhbU11bHRpU2VsZWN0Q29tcG9uZW50XG4gIGV4dGVuZHMgUGFyYW1TZWxlY3RCYXNlPElGaWx0ZXJTZWxlY3RWYWx1ZVtdLCBJRmlsdGVyU2VsZWN0VmFsdWVbXT5cbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgb3ZlcnJpZGUgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dCgn0JLRi9Cx0LXRgNC40YLQtSDQt9C90LDRh9C10L3QuNGPJyk7XG4gIHJlYWRvbmx5IGl0ZW1TZWxlY3RBbGwgPSBpbnB1dChmYWxzZSk7XG4gIHJlYWRvbmx5IHNlYXJjaE1hdGNoZXIgPSBpbnB1dDxQcml6bU11bHRpU2VsZWN0U2VhcmNoTWF0Y2hlcjxJRmlsdGVyU2VsZWN0VmFsdWU+PihcbiAgICAoc2VhcmNoOiBzdHJpbmcsIGl0ZW06IElGaWx0ZXJTZWxlY3RWYWx1ZSkgPT5cbiAgICAgIGl0ZW0ubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcbiAgKTtcbiAgcmVhZG9ubHkgc2hvcnRQaWNrZWRMZW5ndGggPSBpbnB1dCh0cnVlKTtcblxuICByZWFkb25seSBzdHJpbmdpZnkgPSBpbnB1dDxUdWlTdHJpbmdIYW5kbGVyPElGaWx0ZXJTZWxlY3RWYWx1ZSB8IFR1aUNvbnRleHQ8SUZpbHRlclNlbGVjdFZhbHVlPj4+KFxuICAgIChpdGVtKSA9PiAoJ25hbWUnIGluIGl0ZW0gPyBpdGVtLm5hbWUgOiBpdGVtLiRpbXBsaWNpdC5uYW1lKVxuICApO1xuXG4gIHJlYWRvbmx5IGlkZW50aXR5TWF0Y2hlciA9IGlucHV0PFR1aUlkZW50aXR5TWF0Y2hlcjxJRmlsdGVyU2VsZWN0VmFsdWU+PihcbiAgICAoYSwgYikgPT4gYT8uaWQgPT09IGI/LmlkXG4gICk7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgYnVpbGRTaG93ZWRWYWx1ZSA9IGlucHV0KFxuICAgICh2YWx1ZXM6IElGaWx0ZXJTZWxlY3RWYWx1ZVtdKTogc3RyaW5nID0+IHZhbHVlcz8ubWFwKCh2KSA9PiB2Lm5hbWUpLmpvaW4oJyxcXG4nKSA/PyAnLSdcbiAgKTtcblxuICByZWFkb25seSBvblNlbGVjdCA9IG91dHB1dDxJRmlsdGVyU2VsZWN0VmFsdWVbXT4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0QWxsSXRlbTogSUZpbHRlclNlbGVjdFZhbHVlID0gc2VsZWN0QWxsSXRlbTtcblxuICBwcm90ZWN0ZWQgb25DYW5jZWxCdXR0b25TdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIHNlYXJjaFZhbHVlID0gJyc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uU2VhcmNoJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIG9uU2VhcmNoU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjYWNoZWRTdHJpbmcgPSAnJztcblxuICBwcml2YXRlIG9uQ2xlYXJCdXR0b25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY2hvb3NlZEhpbnQgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVPblNlYXJjaCgpO1xuXG4gICAgaWYgKHRoaXMuaXRlbVNlbGVjdEFsbCgpKSB7XG4gICAgICB0aGlzLml0ZW1zLnVuc2hpZnQodGhpcy5zZWxlY3RBbGxJdGVtKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVPblNlYXJjaCgpIHtcbiAgICB0aGlzLm9uU2VhcmNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZShQQVJBTV9TRUFSQ0hfSU5QVVRfREVCT1VOQ0VfVElNRV9NTFMpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hJdGVtcyh2YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBhZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1ldGE/LnRhYmxlICYmIHRoaXMuc2VhcmNoYWJsZSkge1xuICAgICAgdGhpcy5fc3Vic2NyaWJlT25DbGVhckJ1dHRvbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1ldGEpIHtcbiAgICAgIHRoaXMuX29ic2VydmVGZXRjaEl0ZW1zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vic2NyaWJlT25NZXRhQ2hhbmdlcygpO1xuICAgIHRoaXMuX3N1YnNjcmliZU9uVmFsdWVDb250cm9sKCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sPy52YWx1ZT8uc29tZSgoZWxlbTogYW55KSA9PiBlbGVtLmlkID09PSBTRUxFQ1RfQUxMX0lEKSkge1xuICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodGhpcy5pdGVtcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5mZXRjaEl0ZW1zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZUZldGNoSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBzb21lVmFsdWVOb3RIYXZlTmFtZSA9IHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gIXZhbHVlLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IGV2ZXJ5VmFsdWVzRXhpc3RzSW5JdGVtcyA9IHZhbHVlcy5ldmVyeSgoeyBpZCB9KSA9PlxuICAgICAgICAgICAgdGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHNvbWVWYWx1ZU5vdEhhdmVOYW1lICYmIGV2ZXJ5VmFsdWVzRXhpc3RzSW5JdGVtcztcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQodmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlLmlkKSk7XG4gICAgICAgIGNvbnN0IGZpbGxlZFZhbHVlcyA9IHRoaXMuaXRlbXMuZmlsdGVyKCh7IGlkIH0pID0+IGlkcy5oYXMoaWQpKTtcblxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZmlsbGVkVmFsdWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzPy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS5pZCkgPz8gW10pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZEpTT05zKCksXG4gICAgICAgIGZpbHRlcigoaWRzKSA9PiBpZHMuc29tZSgoaWQpID0+ICF0aGlzLml0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKSkpXG4gICAgICApLFxuICAgICAgdGhpcy5tZXRhJCxcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZHIpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hJdGVtcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVPbk1ldGFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMubWV0YSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZldGNoSXRlbXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZU9uVmFsdWVDb250cm9sKCk6IHZvaWQge1xuICAgIGxldCBjb250cm9sVmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWU7XG5cbiAgICB0aGlzLmNvbnRyb2w/LnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkSlNPTnMoKSxcbiAgICAgICAgbWFwKCh2YWx1ZXMpID0+IHZhbHVlcyA/PyBbXSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1TZWxlY3RBbGwoKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoIC0gdmFsdWVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgdmFsdWVzLmZpbHRlcigoZWxlbSkgPT4gZWxlbS5pZCA9PT0gU0VMRUNUX0FMTF9JRCkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICBjb250cm9sVmFsdWUuaW5jbHVkZXModGhpcy5zZWxlY3RBbGxJdGVtKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKFtdLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlcz8uc29tZSgoZWxlbSkgPT4gZWxlbS5pZCA9PT0gU0VMRUNUX0FMTF9JRCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLml0ZW1zLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pdGVtcy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGggJiZcbiAgICAgICAgICAgIGNvbnRyb2xWYWx1ZT8uaW5jbHVkZXModGhpcy5zZWxlY3RBbGxJdGVtKSAmJlxuICAgICAgICAgICAgdmFsdWVzPy5zb21lKChlbGVtKSA9PiBlbGVtLmlkID09PSBTRUxFQ1RfQUxMX0lEKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKFxuICAgICAgICAgICAgICB2YWx1ZXMuZmlsdGVyKChlbGVtKSA9PiBlbGVtICE9PSB0aGlzLnNlbGVjdEFsbEl0ZW0pLFxuICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbFZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vblNlYXJjaCQuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uU2VhcmNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25DYW5jZWxCdXR0b25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNsZWFyQnV0dG9uU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZldGNoSXRlbXMoc2VhcmNoVmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB7IGlkRmllbGQsIHZhbHVlRmllbGQgfSA9IHRoaXMubWV0YUZpZWxkcztcbiAgICBpZiAoIXRoaXMubWV0YT8udGFibGU/Lm5hbWUgfHwgaWRGaWVsZCA9PT0gbnVsbCB8fCB2YWx1ZUZpZWxkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtSURzID0gdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtSURzKHNlYXJjaFZhbHVlKTtcblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3Qgd2hlcmUgPSB0aGlzLmJ1aWxkV2hlcmUoc2VhcmNoVmFsdWUpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbUlkc1doZXJlID0gdGhpcy5fYnVpbGRTZWxlY3RlZEl0ZW1JZHNXaGVyZSh3aGVyZSwgc2VsZWN0ZWRJdGVtSURzLCBpZEZpZWxkKTtcbiAgICBsZXQgZmV0Y2hBbGwgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmNvbnRyb2wudmFsdWU/LnNvbWUoKGVsZW06IGFueSkgPT4gZWxlbS5pZCA9PT0gU0VMRUNUX0FMTF9JRCkpIHtcbiAgICAgIGZldGNoQWxsID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcVBhcmFtczogTWV0YVF1ZXJ5ID0ge1xuICAgICAgdGFibGU6IHRoaXMubWV0YS50YWJsZSxcbiAgICAgIHdoZXJlLFxuICAgICAgb3JkZXJfYnk6IHRoaXMubWV0YS5vcmRlcl9ieSxcbiAgICAgIG9mZnNldDogdGhpcy5tZXRhLm9mZnNldCxcbiAgICAgIGRpc3RpbmN0X29uOiB0aGlzLm1ldGEuZGlzdGluY3Rfb24sXG4gICAgICBzdWJxdWVyeTogdGhpcy5tZXRhLnN1YnF1ZXJ5LFxuICAgIH07XG4gICAgaWYgKCFmZXRjaEFsbCkge1xuICAgICAgcVBhcmFtcy5saW1pdCA9IHRoaXMubWV0YS5saW1pdCA/PyB0aGlzLmxpbWl0O1xuICAgIH1cblxuICAgIHRoaXMuc3RvcmVcbiAgICAgIC5nZXRSZXN1bHRzKHFQYXJhbXMsIHRydWUsIHNlbGVjdGVkSXRlbUlkc1doZXJlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdHMoZGF0YSwgaWRGaWVsZCwgdmFsdWVGaWVsZCwgc2VsZWN0ZWRJdGVtSURzKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pdGVtU2VsZWN0QWxsKCkgJiZcbiAgICAgICAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIXRoaXMuaXRlbXMuaW5jbHVkZXModGhpcy5zZWxlY3RBbGxJdGVtKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy51bnNoaWZ0KHRoaXMuc2VsZWN0QWxsSXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmZXRjaEFsbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuaXRlbXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNob29zZWRIaW50ID1cbiAgICAgICAgICB0aGlzLmNvbnRyb2xcbiAgICAgICAgICAgIC5nZXRSYXdWYWx1ZSgpXG4gICAgICAgICAgICA/Lm1hcCgoZWxlbTogYW55KSA9PiBlbGVtLm5hbWUpXG4gICAgICAgICAgICAuam9pbignLCAnKSA/PyAnJztcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlT25DbGVhckJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2xlYXJCdXR0b25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNsZWFyQnV0dG9uU3Vic2NyaXB0aW9uID0gdGhpcy5vblNlYXJjaCRcbiAgICAgIC5waXBlKFxuICAgICAgICBza2lwKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5jYWNoZWRTdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmlucHV0LXNlYXJjaCcpO1xuICAgICAgICAgICAgY29uc3QgY2xlYXJCdXR0b25DbGlja3MkID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kZWQgPSBlbGVtZW50cy5pdGVtKGkpO1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZm91bmRlZD8ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kZWQgJiYgaXRlbSAmJiBpdGVtLmNsYXNzTmFtZSA9PT0gJ3ByaXptLWlucHV0LWZvcm0tYm9keScpIHtcbiAgICAgICAgICAgICAgICBjbGVhckJ1dHRvbkNsaWNrcyQucHVzaChcbiAgICAgICAgICAgICAgICAgIG9mKG51bGwpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KDMwMCksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xlYXJCdXR0b24gPSBpdGVtLnBhcmVudEVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAncHJpem0taW5wdXQtbGFiZWwtY2xlYXItYnRuIHByaXptLWlucHV0LWJ1dHRvbi1kZWZhdWx0IGNsZWFyLWljb24gaW50ZXJhY3RpdmUgbmctc3Rhci1pbnNlcnRlZCdcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGVhckJ1dHRvbj8uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckJ1dHRvblswXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaCQubmV4dCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjbGVhckJ1dHRvbkNsaWNrcyQubGVuZ3RoID4gMCA/IGNsZWFyQnV0dG9uQ2xpY2tzJFswXSA6IG9mKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhY2hlZFN0cmluZyA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2VsZWN0ZWRJdGVtSURzKHNlYXJjaFZhbHVlPzogc3RyaW5nKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghc2VhcmNoVmFsdWUgfHwgc2VhcmNoVmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZT8uZmlsdGVyKChlbGVtKSA9PiBlbGVtLmlkICE9PSBTRUxFQ1RfQUxMX0lEKS5tYXAoKHZhbDogYW55KSA9PiB2YWwuaWQpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkU2VsZWN0ZWRJdGVtSWRzV2hlcmUoXG4gICAgd2hlcmU6IGFueSxcbiAgICBzZWxlY3RlZEl0ZW1JRHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIGlkRmllbGQ6IHN0cmluZ1xuICApOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICh3aGVyZSAmJiBzZWxlY3RlZEl0ZW1JRHMgJiYgc2VsZWN0ZWRJdGVtSURzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7IF9hbmQ6IFt7IFtpZEZpZWxkXTogeyBfaW46IHNlbGVjdGVkSXRlbUlEcyB9IH0sIHdoZXJlXSB9O1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVSZXN1bHRzKFxuICAgIGRhdGE6IGFueSxcbiAgICBpZEZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWVGaWVsZDogc3RyaW5nLFxuICAgIHNlbGVjdGVkSXRlbUlEczogc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcyA9IGRhdGEuZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBpZDogaXRlbVtpZEZpZWxkXSA/PyAnJyxcbiAgICAgIG5hbWU6IHRoaXMuX2dldE5hbWVGcm9tRmllbGQoaXRlbSwgdmFsdWVGaWVsZCksXG4gICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuaXRlbVNlbGVjdEFsbCgpICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pdGVtcy51bnNoaWZ0KHRoaXMuc2VsZWN0QWxsSXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbHVlcyhkYXRhLCBpZEZpZWxkLCB2YWx1ZUZpZWxkLCBzZWxlY3RlZEl0ZW1JRHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ29udHJvbFZhbHVlcyhcbiAgICBkYXRhOiBhbnksXG4gICAgaWRGaWVsZDogc3RyaW5nLFxuICAgIHZhbHVlRmllbGQ6IHN0cmluZyxcbiAgICBzZWxlY3RlZEl0ZW1JRHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGlkc1NlbGVjdGVkVmFsdWVzID0gbmV3IFNldCh0aGlzLnZhbHVlPy5tYXAoKHZhbDogYW55KSA9PiB2YWxbaWRGaWVsZF0pID8/IFtdKTtcbiAgICBjb25zdCBhdmFpbGFibGVJdGVtcyA9XG4gICAgICBkYXRhLnNlbGVjdGVkSWRzUXVlcnlcbiAgICAgICAgPy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaWRzU2VsZWN0ZWRWYWx1ZXMuaGFzKGl0ZW1baWRGaWVsZF0pKVxuICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBpZDogaXRlbVtpZEZpZWxkXSA/PyAnJyxcbiAgICAgICAgICBuYW1lOiB0aGlzLl9nZXROYW1lRnJvbUZpZWxkKGl0ZW0sIHZhbHVlRmllbGQpLFxuICAgICAgICB9KSkgPz8gW107XG5cbiAgICBpZiAoc2VsZWN0ZWRJdGVtSURzICYmIHNlbGVjdGVkSXRlbUlEcy5sZW5ndGggPiAwICYmIGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoYXZhaWxhYmxlSXRlbXMsIHsgZW1pdEV2ZW50OiAhdGhpcy5pdGVtU2VsZWN0QWxsIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zVGhhdERvbnRFeGlzdCA9IGF2YWlsYWJsZUl0ZW1zLmZpbHRlcihcbiAgICAgIChuZXdfaXRlbTogYW55KSA9PiAhdGhpcy5pdGVtcz8uc29tZSgodmFsdWU6IGFueSkgPT4gdmFsdWUuaWQgPT09IG5ld19pdGVtLmlkKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1zLnB1c2goLi4uaXRlbXNUaGF0RG9udEV4aXN0KTtcbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIF9nZXROYW1lRnJvbUZpZWxkKGl0ZW06IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGZpZWxkLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXROYW1lRnJvbURlZXBGaWVsZChpdGVtLCBmaWVsZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFNob3dlZFZhbHVlKGl0ZW0sIGZpZWxkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5hbWVGcm9tRGVlcEZpZWxkKGl0ZW06IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVlcEZpZWxkcyA9IGZpZWxkLnNwbGl0KCcuJyk7XG4gICAgbGV0IHRlbXBPYmplY3QgPSB7IC4uLml0ZW0gfTtcblxuICAgIGZvciAoY29uc3QgZGVlcEZpZWxkIG9mIGRlZXBGaWVsZHMpIHtcbiAgICAgIHRlbXBPYmplY3QgPSB0ZW1wT2JqZWN0W2RlZXBGaWVsZF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBPYmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25TZWFyY2godmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWFyY2hhYmxlKSB7XG4gICAgICB0aGlzLm9uU2VhcmNoJC5uZXh0KHZhbHVlID8/ICcnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGlzdExlbmd0aChsaXN0OiBJRmlsdGVyU2VsZWN0VmFsdWVbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgbGVuZ3RoID0gbGlzdC5zb21lKChpdGVtKSA9PiBpdGVtPy5pZCA9PT0gU0VMRUNUX0FMTF9JRCkgPyBsaXN0Lmxlbmd0aCAtIDEgOiBsaXN0Lmxlbmd0aDtcbiAgICByZXR1cm4gbGVuZ3RoID09PSAxID8gJycgOiBTdHJpbmcobGVuZ3RoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZWFkbW9kZSA/IHJlYWRUZW1wbGF0ZSA6IGVkaXRUZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgI3JlYWRUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnRhaW5lci0tcmVhZFwiIFthdHRyLnNwcm9jLXBhcmFtLXN0eWxlXT1cInBhcmFtU3R5bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwYXJhbVN0eWxlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoQ2FzZT1cImZpbHRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaGVkLXJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hlZC1yb3dcIj48L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ2YWx1ZSA/IHNob3dlZFZhbHVlVGVtcGxhdGUgOiBlbXB0eVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd2VkVmFsdWVUZW1wbGF0ZT5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwYXJhbVN0eWxlXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJ2YWx1ZVwiPnt7IHNob3dlZFZhbHVlIH19PC9wcmU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCIgW3R1aUhpbnRdPVwic2hvd2VkVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzaG93ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5VGVtcGxhdGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPi08L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBjb250YWluZXItLWVkaXRcIiBbYXR0ci5zcHJvYy1wYXJhbS1zdHlsZV09XCJwYXJhbVN0eWxlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImxhYmVsLXdyYXBwZXJcIiBbY2xhc3MuYXBwbGllZF09XCJhcHBsaWVkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIFtjbGFzcy5yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHR1aS1pY29uXG4gICAgICAgICAgKm5nSWY9XCJoaW50XCJcbiAgICAgICAgICBpY29uPVwiYXNzZXRzL25neC1yZWdpc3Rlci1iYXNlL2ljb25zL2NpcmNsZS1pbmZvLWVtcHR5LnN2Z1wiXG4gICAgICAgICAgW3R1aUhpbnRdPVwiaGludFwiXG4gICAgICAgICAgY2xhc3M9XCJoaW50SWNvblwiXG4gICAgICAgID48L3R1aS1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8dHVpLW11bHRpLXNlbGVjdFxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgIFt0dWlUZXh0ZmllbGRMYWJlbE91dHNpZGVdPVwidHJ1ZVwiXG4gICAgICAgIFt0dWlUZXh0ZmllbGRDbGVhbmVyXT1cInRydWVcIlxuICAgICAgICB0dWlBcHBlYXJhbmNlPVwic3Byb2MtaW5wdXQtYXBwZWFyYW5jZVwiXG4gICAgICAgIFt2YWx1ZUNvbnRlbnRdPVwidmFsdWVDb250ZW50XCJcbiAgICAgICAgdHVpVGV4dGZpZWxkU2l6ZT1cIm1cIlxuICAgICAgICBbc3RyaW5naWZ5XT1cInN0cmluZ2lmeSgpXCJcbiAgICAgICAgW2lkZW50aXR5TWF0Y2hlcl09XCJpZGVudGl0eU1hdGNoZXIoKVwiXG4gICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgICAgIFtlZGl0YWJsZV09XCJzZWFyY2hhYmxlXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyKCkgfX08L3NwYW4+XG5cbiAgICAgICAgPHR1aS1kYXRhLWxpc3Qtd3JhcHBlclxuICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgIHR1aU11bHRpU2VsZWN0R3JvdXBcbiAgICAgICAgICBbaXRlbXNdPVwiaXRlbXNcIlxuICAgICAgICAgIFtpdGVtQ29udGVudF09XCJsaXN0SXRlbVRlbXBsYXRlID8/IGl0ZW1Db250ZW50XCJcbiAgICAgICAgPjwvdHVpLWRhdGEtbGlzdC13cmFwcGVyPlxuICAgICAgPC90dWktbXVsdGktc2VsZWN0PlxuXG4gICAgICA8bmctdGVtcGxhdGUgI2l0ZW1Db250ZW50IGxldC1kYXRhPlxuICAgICAgICB7eyBkYXRhLm5hbWUgfX1cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlQ29udGVudCBsZXQtbGlzdD5cbiAgICAgICAgQGxldCBpc1NpbmdsZSA9IGxpc3QubGVuZ3RoID09PSAxO1xuICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXNTaW5nbGUgPyAnY2hvb3NlZCBjaG9vc2VkLW9uZScgOiAnY2hvb3NlZCBjaG9vc2VkLW1hbnknXCI+XG4gICAgICAgICAge3sgaXNTaW5nbGUgPyBsaXN0WzBdLm5hbWUgOiBzaG9ydFBpY2tlZExlbmd0aCgpID8gJ9CS0YvQsdGA0LDQvdC+OiAnIDogbnVsbCB9fVxuICAgICAgICAgIHt7IGdldExpc3RMZW5ndGgobGlzdCkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tbXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZWdpc3Rlci1iYXNlL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvcGFyYW0tbXVsdGktc2VsZWN0L3BhcmFtLW11bHRpLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVnaXN0ZXItYmFzZS9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL3BhcmFtLW11bHRpLXNlbGVjdC9wYXJhbS1tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBQ2YsZ0JBQWdCLEdBQ2pCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFFTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBRUgsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxPQUFPLEVBQ1AsU0FBUyxFQUNULGFBQWEsRUFDYixZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RixPQUFPLEVBQUUs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Qjt3QkFDbkIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLDRCQUE0Qjt3QkFDNUIsa0JBQWtCO3dCQUNsQixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYix5QkFBeUI7d0JBQ3pCLGVBQWU7d0JBQ2Ysd0JBQXdCO3dCQUN4QixTQUFTO3FCQUNWOzswQkF1Q0UsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRE9DVU1FTlQsXG4gIE5nSWYsXG4gIE5nU3dpdGNoLFxuICBOZ1N3aXRjaENhc2UsXG4gIE5nU3dpdGNoRGVmYXVsdCxcbiAgTmdUZW1wbGF0ZU91dGxldCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIGlucHV0LFxuICBPbkRlc3Ryb3ksXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIFN1YnNjcmlwdGlvbixcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7XG4gIFRVSV9JVEVNU19IQU5ETEVSUyxcbiAgVHVpQXBwZWFyYW5jZSxcbiAgVHVpRHJvcGRvd25EaXJlY3RpdmUsXG4gIFR1aUhpbnQsXG4gIFR1aUljb24sXG4gIFR1aUxvYWRlcixcbiAgVHVpU2Nyb2xsYWJsZSxcbiAgVHVpVGV4dGZpZWxkLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlNdWx0aVNlbGVjdE1vZHVsZSwgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFR1aUNvbnRleHQsIFR1aUlkZW50aXR5TWF0Y2hlciwgVHVpU3RyaW5nSGFuZGxlciB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgRmFzdFF1ZXJ5U3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9mYXN0LXF1ZXJ5LXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZpbHRlclNlbGVjdFZhbHVlLCBNZXRhUXVlcnkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9wYXJhbXMudHlwZXMnO1xuaW1wb3J0IHsgUGFyYW1TZWxlY3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9wYXJhbS9wYXJhbS1zZWxlY3QtYmFzZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZEpTT05zLCBTRUxFQ1RfQUxMX05BTUUgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQQVJBTV9TRUFSQ0hfSU5QVVRfREVCT1VOQ0VfVElNRV9NTFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMvcGFyYW1zLmNvbnN0cyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBUdWlDaGVja2JveCwgVHVpRGF0YUxpc3RXcmFwcGVyIH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQge1xuICBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLFxuICBDZGtWaXJ0dWFsRm9yT2YsXG4gIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Nwcm9jLXBhcmFtLW11bHRpLXNlbGVjdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYXJhbS1tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYXJhbS1tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmxlc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIEZhc3RRdWVyeVN0b3JlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRVSV9JVEVNU19IQU5ETEVSUyxcbiAgICAgIGRlcHM6IFtmb3J3YXJkUmVmKCgpID0+IFBhcmFtTXVsdGlTZWxlY3RDb21wb25lbnQpXSxcbiAgICAgIHVzZUZhY3Rvcnk6IChjb21wb25lbnQ6IFBhcmFtTXVsdGlTZWxlY3RDb21wb25lbnQpID0+ICh7XG4gICAgICAgIHN0cmluZ2lmeTogY29tcG9uZW50LnN0cmluZ2lmeSxcbiAgICAgICAgaWRlbnRpdHlNYXRjaGVyOiBjb21wb25lbnQuaWRlbnRpdHlNYXRjaGVyLFxuICAgICAgICBkaXNhYmxlZEl0ZW1IYW5kbGVyOiBzaWduYWwoKF86IElGaWx0ZXJTZWxlY3RWYWx1ZSkgPT4gZmFsc2UpLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXG4gICAgVHVpRHJvcGRvd25EaXJlY3RpdmUsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBUdWlJY29uLFxuICAgIFR1aUhpbnQsXG4gICAgVHVpTXVsdGlTZWxlY3RNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUdWlUZXh0ZmllbGQsXG4gICAgVHVpQXBwZWFyYW5jZSxcbiAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICAgIFR1aURhdGFMaXN0V3JhcHBlcixcbiAgICBUdWlDaGVja2JveCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFR1aVNjcm9sbGFibGUsXG4gICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LFxuICAgIFR1aUxvYWRlcixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGFyYW1NdWx0aVNlbGVjdENvbXBvbmVudFxuICBleHRlbmRzIFBhcmFtU2VsZWN0QmFzZTxJRmlsdGVyU2VsZWN0VmFsdWVbXSwgSUZpbHRlclNlbGVjdFZhbHVlW10+XG4gIGltcGxlbWVudHMgT25EZXN0cm95XG57XG4gIG92ZXJyaWRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQoJ9CS0YvQsdC10YDQuNGC0LUg0LfQvdCw0YfQtdC90LjRjycpO1xuICByZWFkb25seSBpdGVtU2VsZWN0QWxsID0gaW5wdXQoZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgaXRlbVNlbGVjdEFsbE5hbWUgPSBpbnB1dDxzdHJpbmc+KFNFTEVDVF9BTExfTkFNRSk7XG4gIHJlYWRvbmx5IHNob3J0UGlja2VkTGVuZ3RoID0gaW5wdXQodHJ1ZSk7XG5cbiAgcmVhZG9ubHkgc3RyaW5naWZ5ID0gaW5wdXQ8VHVpU3RyaW5nSGFuZGxlcjxJRmlsdGVyU2VsZWN0VmFsdWUgfCBUdWlDb250ZXh0PElGaWx0ZXJTZWxlY3RWYWx1ZT4+PihcbiAgICAoaXRlbSkgPT4gKCduYW1lJyBpbiBpdGVtID8gaXRlbS5uYW1lIDogaXRlbS4kaW1wbGljaXQubmFtZSlcbiAgKTtcblxuICByZWFkb25seSBpZGVudGl0eU1hdGNoZXIgPSBpbnB1dDxUdWlJZGVudGl0eU1hdGNoZXI8SUZpbHRlclNlbGVjdFZhbHVlPj4oXG4gICAgKGEsIGIpID0+IGE/LmlkID09PSBiPy5pZFxuICApO1xuXG4gIG92ZXJyaWRlIHJlYWRvbmx5IGJ1aWxkU2hvd2VkVmFsdWUgPSBpbnB1dChcbiAgICAodmFsdWVzOiBJRmlsdGVyU2VsZWN0VmFsdWVbXSk6IHN0cmluZyA9PiB2YWx1ZXM/Lm1hcCgodikgPT4gdi5uYW1lKS5qb2luKCcsXFxuJykgPz8gJy0nXG4gICk7XG5cbiAgcHVibGljIGlucHV0TXVsdGlTZWxlY3RSb3dzTGltaXQgPSBpbnB1dCgwKTtcblxuICByZWFkb25seSBvblNlbGVjdCA9IG91dHB1dDxJRmlsdGVyU2VsZWN0VmFsdWVbXT4oKTtcblxuICBwcm90ZWN0ZWQgb25DYW5jZWxCdXR0b25TdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIHNlYXJjaFZhbHVlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRJdGVtcyA9IHNpZ25hbDxJRmlsdGVyU2VsZWN0VmFsdWVbXSB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgYWxsSXRlbUNvdW50ID0gc2lnbmFsPG51bWJlciB8IG51bGw+KG51bGwpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBvblNlYXJjaCQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICBwdWJsaWMgY2hvb3NlZEhpbnQgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpYmVPblNlYXJjaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlT25TZWFyY2goKSB7XG4gICAgdGhpcy5vblNlYXJjaCRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoUEFSQU1fU0VBUkNIX0lOUFVUX0RFQk9VTkNFX1RJTUVfTUxTKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZHIpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZmV0Y2hJdGVtcyhmYWxzZSwgdmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5pdGVtU2VsZWN0QWxsKCkpIHtcbiAgICAgICAgICB0aGlzLmZldGNoQWxsQ291bnQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBhZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1ldGEpIHtcbiAgICAgIHRoaXMuX29ic2VydmVGZXRjaEl0ZW1zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3Vic2NyaWJlT25NZXRhQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb2JzZXJ2ZUZldGNoSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBzb21lVmFsdWVOb3RIYXZlTmFtZSA9IHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gIXZhbHVlLm5hbWUpO1xuICAgICAgICAgIGNvbnN0IGV2ZXJ5VmFsdWVzRXhpc3RzSW5JdGVtcyA9IHZhbHVlcy5ldmVyeSgoeyBpZCB9KSA9PlxuICAgICAgICAgICAgdGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHNvbWVWYWx1ZU5vdEhhdmVOYW1lICYmIGV2ZXJ5VmFsdWVzRXhpc3RzSW5JdGVtcztcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQodmFsdWVzLm1hcCgodmFsdWUpID0+IHZhbHVlLmlkKSk7XG4gICAgICAgIGNvbnN0IGZpbGxlZFZhbHVlcyA9IHRoaXMuaXRlbXMuZmlsdGVyKCh7IGlkIH0pID0+IGlkcy5oYXMoaWQpKTtcblxuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZmlsbGVkVmFsdWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBtYXAoKHZhbHVlcykgPT4gdmFsdWVzPy5tYXAoKHZhbHVlKSA9PiB2YWx1ZS5pZCkgPz8gW10pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZEpTT05zKCksXG4gICAgICAgIGZpbHRlcihcbiAgICAgICAgICAoaWRzKSA9PlxuICAgICAgICAgICAgaWRzLnNvbWUoKGlkKSA9PiAhdGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZCkpICYmXG4gICAgICAgICAgICB0aGlzLmFsbEl0ZW1Db3VudCgpICE9PSB0aGlzLnZhbHVlPy5sZW5ndGhcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHRoaXMubWV0YSQsXG4gICAgXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZldGNoSXRlbXMoZmFsc2UpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVPbk1ldGFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMubWV0YSQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZldGNoSXRlbXMoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMuaXRlbVNlbGVjdEFsbCgpKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hBbGxDb3VudCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25TZWFyY2gkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vbkNhbmNlbEJ1dHRvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmZXRjaEFsbENvdW50KHNlYXJjaFZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgeyBpZEZpZWxkLCB2YWx1ZUZpZWxkIH0gPSB0aGlzLm1ldGFGaWVsZHM7XG4gICAgaWYgKCF0aGlzLm1ldGE/LnRhYmxlPy5uYW1lIHx8IGlkRmllbGQgPT09IG51bGwgfHwgdmFsdWVGaWVsZCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5hbGxJdGVtQ291bnQuc2V0KHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgd2hlcmUgPSB0aGlzLmJ1aWxkV2hlcmUoc2VhcmNoVmFsdWUpO1xuICAgIGNvbnN0IHFQYXJhbXM6IE1ldGFRdWVyeSA9IHtcbiAgICAgIHRhYmxlOiB0aGlzLm1ldGEudGFibGUsXG4gICAgICB3aGVyZSxcbiAgICB9O1xuXG4gICAgdGhpcy5zdG9yZVxuICAgICAgLmZldGNoQWxsQ291bnQocVBhcmFtcywgdGhpcy5pbnB1dE11bHRpU2VsZWN0Um93c0xpbWl0KCkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kcikpXG4gICAgICAuc3Vic2NyaWJlKChjb3VudCkgPT4ge1xuICAgICAgICB0aGlzLmFsbEl0ZW1Db3VudC5zZXQoY291bnQpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmV0Y2hJdGVtcyhmZXRjaEFsbDogYm9vbGVhbiwgc2VhcmNoVmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB7IGlkRmllbGQsIHZhbHVlRmllbGQgfSA9IHRoaXMubWV0YUZpZWxkcztcbiAgICBpZiAoIXRoaXMubWV0YT8udGFibGU/Lm5hbWUgfHwgaWRGaWVsZCA9PT0gbnVsbCB8fCB2YWx1ZUZpZWxkID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcy5zZXQoXG4gICAgICAgICAgc2VhcmNoVmFsdWUgPyB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5uYW1lLnN0YXJ0c1dpdGgoc2VhcmNoVmFsdWUudHJpbSgpKSkgOiBudWxsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWx0ZXJlZEl0ZW1zKCkgPz8gdGhpcy5pdGVtcztcbiAgICAgICAgaWYgKGZldGNoQWxsICYmIGl0ZW1zKSB7XG4gICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKGl0ZW1zKTtcbiAgICAgICAgICB0aGlzLmFsbEl0ZW1Db3VudC5zZXQoaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbUlEcyA9IHRoaXMuX2dldFNlbGVjdGVkSXRlbUlEcyhzZWFyY2hWYWx1ZSk7XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHdoZXJlID0gdGhpcy5idWlsZFdoZXJlKHNlYXJjaFZhbHVlKTtcbiAgICBjb25zdCBxUGFyYW1zOiBNZXRhUXVlcnkgPSB7XG4gICAgICB0YWJsZTogdGhpcy5tZXRhLnRhYmxlLFxuICAgICAgd2hlcmUsXG4gICAgICBvcmRlcl9ieTogdGhpcy5tZXRhLm9yZGVyX2J5LFxuICAgICAgb2Zmc2V0OiB0aGlzLm1ldGEub2Zmc2V0LFxuICAgICAgZGlzdGluY3Rfb246IHRoaXMubWV0YS5kaXN0aW5jdF9vbixcbiAgICAgIHN1YnF1ZXJ5OiB0aGlzLm1ldGEuc3VicXVlcnksXG4gICAgfTtcblxuICAgIGxldCBzZWxlY3RlZEl0ZW1JZHNXaGVyZTtcbiAgICBpZiAoZmV0Y2hBbGwpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0TXVsdGlTZWxlY3RSb3dzTGltaXQoKSkge1xuICAgICAgICBxUGFyYW1zLmxpbWl0ID0gdGhpcy5pbnB1dE11bHRpU2VsZWN0Um93c0xpbWl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkSXRlbUlkc1doZXJlID0gdGhpcy5fYnVpbGRTZWxlY3RlZEl0ZW1JZHNXaGVyZSh3aGVyZSwgc2VsZWN0ZWRJdGVtSURzLCBpZEZpZWxkKTtcbiAgICAgIHFQYXJhbXMubGltaXQgPSB0aGlzLm1ldGEubGltaXQgPz8gdGhpcy5saW1pdDtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlXG4gICAgICAuZ2V0UmVzdWx0cyhxUGFyYW1zLCB0cnVlLCBzZWxlY3RlZEl0ZW1JZHNXaGVyZSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLl9oYW5kbGVSZXN1bHRzKGZldGNoQWxsLCBkYXRhLCBpZEZpZWxkLCB2YWx1ZUZpZWxkLCBzZWxlY3RlZEl0ZW1JRHMpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hvb3NlZEhpbnQgPVxuICAgICAgICAgIHRoaXMuY29udHJvbFxuICAgICAgICAgICAgLmdldFJhd1ZhbHVlKClcbiAgICAgICAgICAgID8ubWFwKChlbGVtOiBhbnkpID0+IGVsZW0ubmFtZSlcbiAgICAgICAgICAgIC5qb2luKCcsICcpID8/ICcnO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFsbEl0ZW1Db3VudCgpID09PSB0aGlzLnZhbHVlPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShbXSk7XG4gICAgICB0aGlzLmZldGNoSXRlbXMoZmFsc2UsIHRoaXMuc2VhcmNoVmFsdWUoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmV0Y2hJdGVtcyh0cnVlLCB0aGlzLnNlYXJjaFZhbHVlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNlbGVjdGVkSXRlbUlEcyhzZWFyY2hWYWx1ZT86IHN0cmluZyk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXNlYXJjaFZhbHVlIHx8IHNlYXJjaFZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWU/Lm1hcCgodmFsOiBJRmlsdGVyU2VsZWN0VmFsdWUpID0+IHZhbC5pZD8udG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBfYnVpbGRTZWxlY3RlZEl0ZW1JZHNXaGVyZShcbiAgICB3aGVyZTogYW55LFxuICAgIHNlbGVjdGVkSXRlbUlEczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgaWRGaWVsZDogc3RyaW5nXG4gICk6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHdoZXJlICYmIHNlbGVjdGVkSXRlbUlEcyAmJiBzZWxlY3RlZEl0ZW1JRHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgX2FuZDogW3sgW2lkRmllbGRdOiB7IF9pbjogc2VsZWN0ZWRJdGVtSURzIH0gfSwgd2hlcmVdIH07XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVJlc3VsdHMoXG4gICAgZmV0Y2hBbGw6IGJvb2xlYW4sXG4gICAgZGF0YTogYW55LFxuICAgIGlkRmllbGQ6IHN0cmluZyxcbiAgICB2YWx1ZUZpZWxkOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWRJdGVtSURzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICApOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zID0gZGF0YS5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGlkOiBpdGVtW2lkRmllbGRdID8/ICcnLFxuICAgICAgbmFtZTogdGhpcy5fZ2V0TmFtZUZyb21GaWVsZChpdGVtLCB2YWx1ZUZpZWxkKSxcbiAgICAgIGZ1bGxfbmFtZTogaXRlbS5uYW1lLFxuICAgIH0pKTtcbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtcyk7XG4gICAgdGhpcy5fdXBkYXRlQ29udHJvbFZhbHVlcyhmZXRjaEFsbCwgZGF0YSwgaWRGaWVsZCwgdmFsdWVGaWVsZCwgc2VsZWN0ZWRJdGVtSURzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNvbnRyb2xWYWx1ZXMoXG4gICAgZmV0Y2hBbGw6IGJvb2xlYW4sXG4gICAgZGF0YTogYW55LFxuICAgIGlkRmllbGQ6IHN0cmluZyxcbiAgICB2YWx1ZUZpZWxkOiBzdHJpbmcsXG4gICAgc2VsZWN0ZWRJdGVtSURzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICApOiB2b2lkIHtcbiAgICBpZiAoZmV0Y2hBbGwpIHtcbiAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLml0ZW1zKTtcbiAgICAgIHRoaXMuYWxsSXRlbUNvdW50LnNldCh0aGlzLml0ZW1zLmxlbmd0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlkc1NlbGVjdGVkVmFsdWVzID0gbmV3IFNldCh0aGlzLnZhbHVlPy5tYXAoKHZhbDogYW55KSA9PiB2YWxbaWRGaWVsZF0pID8/IFtdKTtcbiAgICBjb25zdCBhdmFpbGFibGVJdGVtcyA9XG4gICAgICBkYXRhLnNlbGVjdGVkSWRzUXVlcnlcbiAgICAgICAgPy5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaWRzU2VsZWN0ZWRWYWx1ZXMuaGFzKGl0ZW1baWRGaWVsZF0pKVxuICAgICAgICAubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBpZDogaXRlbVtpZEZpZWxkXSA/PyAnJyxcbiAgICAgICAgICBuYW1lOiB0aGlzLl9nZXROYW1lRnJvbUZpZWxkKGl0ZW0sIHZhbHVlRmllbGQpLFxuICAgICAgICB9KSkgPz8gW107XG5cbiAgICBpZiAoc2VsZWN0ZWRJdGVtSURzICYmIHNlbGVjdGVkSXRlbUlEcy5sZW5ndGggPiAwICYmIGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUoYXZhaWxhYmxlSXRlbXMsIHsgZW1pdEV2ZW50OiAhdGhpcy5pdGVtU2VsZWN0QWxsIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zVGhhdERvbnRFeGlzdCA9IGF2YWlsYWJsZUl0ZW1zLmZpbHRlcihcbiAgICAgIChuZXdfaXRlbTogYW55KSA9PiAhdGhpcy5pdGVtcz8uc29tZSgodmFsdWU6IGFueSkgPT4gdmFsdWUuaWQgPT09IG5ld19pdGVtLmlkKVxuICAgICk7XG5cbiAgICB0aGlzLml0ZW1zLnB1c2goLi4uaXRlbXNUaGF0RG9udEV4aXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5hbWVGcm9tRmllbGQoaXRlbTogYW55LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZmllbGQuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldE5hbWVGcm9tRGVlcEZpZWxkKGl0ZW0sIGZpZWxkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0U2hvd2VkVmFsdWUoaXRlbSwgZmllbGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TmFtZUZyb21EZWVwRmllbGQoaXRlbTogYW55LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWVwRmllbGRzID0gZmllbGQuc3BsaXQoJy4nKTtcbiAgICBsZXQgdGVtcE9iamVjdCA9IHsgLi4uaXRlbSB9O1xuXG4gICAgZm9yIChjb25zdCBkZWVwRmllbGQgb2YgZGVlcEZpZWxkcykge1xuICAgICAgdGVtcE9iamVjdCA9IHRlbXBPYmplY3RbZGVlcEZpZWxkXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcE9iamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNlYXJjaCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHtcbiAgICAgIHRoaXMub25TZWFyY2gkLm5leHQodmFsdWUgPz8gJycpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMaXN0TGVuZ3RoKGxpc3Q6IElGaWx0ZXJTZWxlY3RWYWx1ZVtdKTogc3RyaW5nIHtcbiAgICBjb25zdCBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICByZXR1cm4gbGVuZ3RoID09PSAxID8gJycgOiBTdHJpbmcobGVuZ3RoKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyZWFkbW9kZSA/IHJlYWRUZW1wbGF0ZSA6IGVkaXRUZW1wbGF0ZVwiPlxuICA8bmctdGVtcGxhdGUgI3JlYWRUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnRhaW5lci0tcmVhZFwiIFthdHRyLnNwcm9jLXBhcmFtLXN0eWxlXT1cInBhcmFtU3R5bGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYWJlbFwiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwYXJhbVN0eWxlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoQ2FzZT1cImZpbHRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaGVkLXJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hlZC1yb3dcIj48L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ2YWx1ZSA/IHNob3dlZFZhbHVlVGVtcGxhdGUgOiBlbXB0eVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd2VkVmFsdWVUZW1wbGF0ZT5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwYXJhbVN0eWxlXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hDYXNlPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJ2YWx1ZVwiPnt7IHNob3dlZFZhbHVlIH19PC9wcmU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCIgW3R1aUhpbnRdPVwic2hvd2VkVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzaG93ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5VGVtcGxhdGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPi08L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlICNlZGl0VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBjb250YWluZXItLWVkaXRcIiBbYXR0ci5zcHJvYy1wYXJhbS1zdHlsZV09XCJwYXJhbVN0eWxlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwibGFiZWxcIiBjbGFzcz1cImxhYmVsLXdyYXBwZXJcIiBbY2xhc3MuYXBwbGllZF09XCJhcHBsaWVkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiIFtjbGFzcy5yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHR1aS1pY29uICpuZ0lmPVwiaGludFwiIGljb249XCJAc3Byb2MuY2lyY2xlLWluZm8tZW1wdHlcIiBbdHVpSGludF09XCJoaW50XCIgY2xhc3M9XCJoaW50SWNvblwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx0dWktbXVsdGktc2VsZWN0XG4gICAgICAgIHR1aUFwcGVhcmFuY2U9XCJzcHJvYy1pbnB1dC1hcHBlYXJhbmNlXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICBbdHVpVGV4dGZpZWxkTGFiZWxPdXRzaWRlXT1cInRydWVcIlxuICAgICAgICBbdHVpVGV4dGZpZWxkQ2xlYW5lcl09XCJ0cnVlXCJcbiAgICAgICAgW3ZhbHVlQ29udGVudF09XCJ2YWx1ZUNvbnRlbnRcIlxuICAgICAgICBbdHVpVGV4dGZpZWxkU2l6ZV09XCJzaXplKClcIlxuICAgICAgICBbc3RyaW5naWZ5XT1cInN0cmluZ2lmeSgpXCJcbiAgICAgICAgW2lkZW50aXR5TWF0Y2hlcl09XCJpZGVudGl0eU1hdGNoZXIoKVwiXG4gICAgICAgIFt0dWlEcm9wZG93bk1pbkhlaWdodF09XCJtaW5Ecm9wZG93bkhlaWdodCgpXCJcbiAgICAgICAgW3R1aURyb3Bkb3duTWF4SGVpZ2h0XT1cIm1heERyb3Bkb3duSGVpZ2h0KClcIlxuICAgICAgICBbdHVpRHJvcGRvd25MaW1pdFdpZHRoXT1cImRyb3Bkb3duTGltaXRXaWR0aCgpXCJcbiAgICAgICAgW2VkaXRhYmxlXT1cInNlYXJjaGFibGVcIlxuICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInBsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIoKSB9fTwvc3Bhbj5cbiAgICAgICAgPCEtLSBUT0RPINC00L7QsdCw0LLQuNGC0Ywg0L/QvtGB0LvQtSDRgNC10YTQsNC60YLQvtGA0LjQvdCz0LAgZGVwcmVjYXRlZCB0dWktbXVsdGktc2VsZWN0INC90LAgdHVpLXRleHRmaWVsZFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0ZmllbGQtaWNvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICBAaWYgKGlzSW52YWxpZEFuZE5vdFByaXN0aW5lKSB7XG4gICAgICAgICAgICAgIDxzcHJvYy1wYXJhbS1pbnZhbGlkLWljb24gW2hpbnRdPVwidmFsaWRhdGlvbkVycm9ySGludCgpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgLS0+XG4gICAgICAgIDxkaXYgKnR1aURhdGFMaXN0PlxuICAgICAgICAgIDx0dWktbG9hZGVyIFtzaG93TG9hZGVyXT1cImxvYWRpbmdcIiBbb3ZlcmxheV09XCJ0cnVlXCI+XG4gICAgICAgICAgICBAaWYgKGl0ZW1TZWxlY3RBbGwoKSAmJiBpdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsXCIgKGNsaWNrKT1cInNlbGVjdEFsbCgpXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInZhbHVlICYmIHZhbHVlLmxlbmd0aCA9PT0gYWxsSXRlbUNvdW50KClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAge3sgaXRlbVNlbGVjdEFsbE5hbWUoKSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBsZXQgY3VycmVudEl0ZW1zID0gZmlsdGVyZWRJdGVtcygpID8/IGl0ZW1zO1xuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAgICAgICBjbGFzcz1cIml0ZW1zLXNjcm9sbFwiXG4gICAgICAgICAgICAgIHR1aVNjcm9sbGFibGVcbiAgICAgICAgICAgICAgW2l0ZW1TaXplXT1cIjMyXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjdXJyZW50SXRlbXMubGVuZ3RoICogMzIgKyA4XCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwibWF4RHJvcGRvd25IZWlnaHQoKSAtIDU2XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHR1aS1kYXRhLWxpc3QgdHVpTXVsdGlTZWxlY3RHcm91cD5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpjZGtWaXJ0dWFsRm9yPVwibGV0IGl0ZW0gb2YgY3VycmVudEl0ZW1zXCIgdHVpT3B0aW9uIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGxpc3RJdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlzdEl0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC90dWktZGF0YS1saXN0PlxuICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgICAgPC90dWktbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdHVpLW11bHRpLXNlbGVjdD5cblxuICAgICAgPG5nLXRlbXBsYXRlICN2YWx1ZUNvbnRlbnQgbGV0LWxpc3Q+XG4gICAgICAgIEBsZXQgaXNTaW5nbGUgPSBsaXN0Lmxlbmd0aCA9PT0gMTtcbiAgICAgICAgPHNwYW4gW2NsYXNzXT1cImlzU2luZ2xlID8gJ2Nob29zZWQgY2hvb3NlZC1vbmUnIDogJ2Nob29zZWQgY2hvb3NlZC1tYW55J1wiPlxuICAgICAgICAgIHt7IGlzU2luZ2xlID8gbGlzdFswXS5uYW1lIDogc2hvcnRQaWNrZWRMZW5ndGgoKSA/ICfQktGL0LHRgNCw0L3QvjogJyA6IG51bGwgfX1cbiAgICAgICAgICB7eyBnZXRMaXN0TGVuZ3RoKGxpc3QpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|