ng-tailwind 5.2.1 → 5.2.2
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 +24 -24
- package/animations/ngt-angular-animations.d.ts +5 -5
- package/base/ngt-base-ng-model.d.ts +32 -32
- package/components/ngt-action/ngt-action.component.d.ts +30 -30
- package/components/ngt-action/ngt-action.module.d.ts +10 -10
- package/components/ngt-button/ngt-button.component.d.ts +35 -35
- package/components/ngt-button/ngt-button.module.d.ts +10 -10
- package/components/ngt-checkbox/ngt-checkbox.component.d.ts +53 -53
- package/components/ngt-checkbox/ngt-checkbox.module.d.ts +10 -10
- package/components/ngt-content/ngt-content.component.d.ts +12 -12
- package/components/ngt-content/ngt-content.module.d.ts +8 -8
- package/components/ngt-context-menu/ngt-context-menu.component.d.ts +19 -19
- package/components/ngt-context-menu/ngt-context-menu.directive.d.ts +25 -25
- package/components/ngt-context-menu/ngt-context-menu.module.d.ts +10 -10
- package/components/ngt-datatable/ngt-datatable.component.d.ts +125 -125
- package/components/ngt-datatable/ngt-datatable.module.d.ts +25 -25
- package/components/ngt-datatable/ngt-tbody/ngt-tbody.component.d.ts +14 -14
- package/components/ngt-datatable/ngt-td/ngt-td.component.d.ts +14 -14
- package/components/ngt-datatable/ngt-td-check/ngt-td-check.component.d.ts +29 -29
- package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +55 -55
- package/components/ngt-datatable/ngt-th-check/ngt-th-check.component.d.ts +32 -32
- package/components/ngt-datatable/ngt-thead/ngt-thead.component.d.ts +13 -13
- package/components/ngt-datatable/ngt-tr/ngt-tr.component.d.ts +20 -20
- package/components/ngt-date/ngt-date.component.d.ts +85 -85
- package/components/ngt-date/ngt-date.module.d.ts +13 -13
- package/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.d.ts +8 -8
- package/components/ngt-dropdown/ngt-dropdown.component.d.ts +53 -53
- package/components/ngt-dropdown/ngt-dropdown.module.d.ts +9 -9
- package/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.d.ts +14 -14
- package/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.d.ts +25 -25
- package/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.d.ts +35 -35
- package/components/ngt-dropzone/ngt-dropzone.component.d.ts +95 -95
- package/components/ngt-dropzone/ngt-dropzone.meta.d.ts +27 -27
- package/components/ngt-dropzone/ngt-dropzone.module.d.ts +17 -17
- package/components/ngt-floating-button/ngt-floating-button.component.d.ts +35 -35
- package/components/ngt-floating-button/ngt-floating-button.module.d.ts +10 -10
- package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.d.ts +10 -10
- package/components/ngt-form/ngt-form.component.d.ts +60 -60
- package/components/ngt-form/ngt-form.module.d.ts +9 -9
- package/components/ngt-header-nav/ngt-header-nav.component.d.ts +14 -14
- package/components/ngt-header-nav/ngt-header-nav.module.d.ts +8 -8
- package/components/ngt-helper/ngt-helper.component.d.ts +25 -25
- package/components/ngt-helper/ngt-helper.module.d.ts +10 -10
- package/components/ngt-input/ngt-input.component.d.ts +129 -129
- package/components/ngt-input/ngt-input.module.d.ts +14 -14
- package/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.d.ts +17 -17
- package/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.d.ts +12 -12
- package/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.d.ts +15 -15
- package/components/ngt-modal/ngt-modal.component.d.ts +31 -31
- package/components/ngt-modal/ngt-modal.module.d.ts +11 -11
- package/components/ngt-multi-select/ngt-multi-select.component.d.ts +116 -116
- package/components/ngt-multi-select/ngt-multi-select.module.d.ts +15 -15
- package/components/ngt-pagination/ngt-pagination.component.d.ts +43 -43
- package/components/ngt-pagination/ngt-pagination.module.d.ts +12 -12
- package/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.d.ts +21 -21
- package/components/ngt-popover/ngt-popover.component.d.ts +31 -31
- package/components/ngt-popover/ngt-popover.directive.d.ts +31 -31
- package/components/ngt-popover/ngt-popover.module.d.ts +11 -11
- package/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.d.ts +12 -12
- package/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.d.ts +12 -12
- package/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.d.ts +18 -18
- package/components/ngt-portlet/ngt-portlet.component.d.ts +20 -20
- package/components/ngt-portlet/ngt-portlet.module.d.ts +13 -13
- package/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.d.ts +9 -9
- package/components/ngt-radio-button/ngt-radio-button.component.d.ts +45 -45
- package/components/ngt-radio-button/ngt-radio-button.module.d.ts +11 -11
- package/components/ngt-section/ngt-section.component.d.ts +38 -38
- package/components/ngt-section/ngt-section.module.d.ts +11 -11
- package/components/ngt-select/ngt-select.component.d.ts +154 -154
- package/components/ngt-select/ngt-select.directive.d.ts +20 -20
- package/components/ngt-select/ngt-select.module.d.ts +16 -16
- package/components/ngt-shining/ngt-shining.component.d.ts +19 -19
- package/components/ngt-shining/ngt-shining.module.d.ts +8 -8
- package/components/ngt-sidenav/ngt-sidenav.component.d.ts +32 -32
- package/components/ngt-sidenav/ngt-sidenav.module.d.ts +8 -8
- package/components/ngt-slider/ngt-slider.component.d.ts +36 -36
- package/components/ngt-slider/ngt-slider.module.d.ts +9 -9
- package/components/ngt-svg/ngt-svg.component.d.ts +13 -13
- package/components/ngt-svg/ngt-svg.module.d.ts +10 -10
- package/components/ngt-tag/ngt-tag.component.d.ts +13 -13
- package/components/ngt-tag/ngt-tag.module.d.ts +9 -9
- package/components/ngt-textarea/ngt-textarea.component.d.ts +49 -49
- package/components/ngt-textarea/ngt-textarea.module.d.ts +13 -13
- package/components/ngt-validation/ngt-validation.component.d.ts +13 -13
- package/components/ngt-validation/ngt-validation.module.d.ts +8 -8
- package/directives/ngt-stylizable/ngt-stylizable.directive.d.ts +68 -68
- package/directives/ngt-stylizable/ngt-stylizable.module.d.ts +8 -8
- package/enums/size.enum.d.ts +8 -8
- package/esm2020/animations/ngt-angular-animations.mjs +34 -34
- package/esm2020/base/ngt-base-ng-model.mjs +90 -90
- package/esm2020/components/ngt-action/ngt-action.component.mjs +96 -96
- package/esm2020/components/ngt-action/ngt-action.module.mjs +28 -28
- package/esm2020/components/ngt-button/ngt-button.component.mjs +142 -142
- package/esm2020/components/ngt-button/ngt-button.module.mjs +28 -28
- package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +192 -192
- package/esm2020/components/ngt-checkbox/ngt-checkbox.module.mjs +28 -28
- package/esm2020/components/ngt-content/ngt-content.component.mjs +32 -32
- package/esm2020/components/ngt-content/ngt-content.module.mjs +20 -20
- package/esm2020/components/ngt-context-menu/ngt-context-menu.component.mjs +25 -25
- package/esm2020/components/ngt-context-menu/ngt-context-menu.directive.mjs +89 -89
- package/esm2020/components/ngt-context-menu/ngt-context-menu.module.mjs +33 -33
- package/esm2020/components/ngt-datatable/ngt-datatable.component.mjs +470 -470
- package/esm2020/components/ngt-datatable/ngt-datatable.module.mjs +99 -99
- package/esm2020/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +57 -57
- package/esm2020/components/ngt-datatable/ngt-td/ngt-td.component.mjs +62 -62
- package/esm2020/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +113 -113
- package/esm2020/components/ngt-datatable/ngt-th/ngt-th.component.mjs +228 -228
- package/esm2020/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +127 -127
- package/esm2020/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +55 -55
- package/esm2020/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +86 -86
- package/esm2020/components/ngt-date/ngt-date.component.mjs +435 -435
- package/esm2020/components/ngt-date/ngt-date.module.mjs +40 -40
- package/esm2020/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +19 -19
- package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +204 -204
- package/esm2020/components/ngt-dropdown/ngt-dropdown.module.mjs +21 -21
- package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +54 -54
- package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +69 -66
- package/esm2020/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +94 -94
- package/esm2020/components/ngt-dropzone/ngt-dropzone.component.mjs +496 -496
- package/esm2020/components/ngt-dropzone/ngt-dropzone.meta.mjs +24 -24
- package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +55 -55
- package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +119 -119
- package/esm2020/components/ngt-floating-button/ngt-floating-button.module.mjs +28 -28
- package/esm2020/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +22 -22
- package/esm2020/components/ngt-form/ngt-form.component.mjs +207 -207
- package/esm2020/components/ngt-form/ngt-form.module.mjs +29 -29
- package/esm2020/components/ngt-header-nav/ngt-header-nav.component.mjs +39 -39
- package/esm2020/components/ngt-header-nav/ngt-header-nav.module.mjs +20 -20
- package/esm2020/components/ngt-helper/ngt-helper.component.mjs +68 -68
- package/esm2020/components/ngt-helper/ngt-helper.module.mjs +28 -28
- package/esm2020/components/ngt-input/ngt-input.component.mjs +844 -844
- package/esm2020/components/ngt-input/ngt-input.module.mjs +47 -47
- package/esm2020/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +46 -46
- package/esm2020/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +33 -33
- package/esm2020/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +40 -40
- package/esm2020/components/ngt-modal/ngt-modal.component.mjs +122 -122
- package/esm2020/components/ngt-modal/ngt-modal.module.mjs +39 -39
- package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +503 -503
- package/esm2020/components/ngt-multi-select/ngt-multi-select.module.mjs +52 -52
- package/esm2020/components/ngt-pagination/ngt-pagination.component.mjs +162 -162
- package/esm2020/components/ngt-pagination/ngt-pagination.module.mjs +36 -36
- package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +58 -58
- package/esm2020/components/ngt-popover/ngt-popover.component.mjs +85 -85
- package/esm2020/components/ngt-popover/ngt-popover.directive.mjs +126 -126
- package/esm2020/components/ngt-popover/ngt-popover.module.mjs +36 -36
- package/esm2020/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +34 -34
- package/esm2020/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +35 -35
- package/esm2020/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +57 -57
- package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +74 -74
- package/esm2020/components/ngt-portlet/ngt-portlet.module.mjs +47 -47
- package/esm2020/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +19 -19
- package/esm2020/components/ngt-radio-button/ngt-radio-button.component.mjs +153 -153
- package/esm2020/components/ngt-radio-button/ngt-radio-button.module.mjs +29 -29
- package/esm2020/components/ngt-section/ngt-section.component.mjs +151 -151
- package/esm2020/components/ngt-section/ngt-section.module.mjs +32 -32
- package/esm2020/components/ngt-select/ngt-select.component.mjs +670 -670
- package/esm2020/components/ngt-select/ngt-select.directive.mjs +36 -36
- package/esm2020/components/ngt-select/ngt-select.module.mjs +65 -65
- package/esm2020/components/ngt-shining/ngt-shining.component.mjs +40 -40
- package/esm2020/components/ngt-shining/ngt-shining.module.mjs +20 -20
- package/esm2020/components/ngt-sidenav/ngt-sidenav.component.mjs +132 -132
- package/esm2020/components/ngt-sidenav/ngt-sidenav.module.mjs +20 -20
- package/esm2020/components/ngt-slider/ngt-slider.component.mjs +100 -100
- package/esm2020/components/ngt-slider/ngt-slider.module.mjs +24 -24
- package/esm2020/components/ngt-svg/ngt-svg.component.mjs +53 -53
- package/esm2020/components/ngt-svg/ngt-svg.module.mjs +28 -28
- package/esm2020/components/ngt-tag/ngt-tag.component.mjs +37 -37
- package/esm2020/components/ngt-tag/ngt-tag.module.mjs +24 -24
- package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +238 -238
- package/esm2020/components/ngt-textarea/ngt-textarea.module.mjs +43 -43
- package/esm2020/components/ngt-validation/ngt-validation.component.mjs +26 -26
- package/esm2020/components/ngt-validation/ngt-validation.module.mjs +20 -20
- package/esm2020/directives/ngt-stylizable/ngt-stylizable.directive.mjs +290 -290
- package/esm2020/directives/ngt-stylizable/ngt-stylizable.module.mjs +20 -20
- package/esm2020/enums/size.enum.mjs +11 -11
- package/esm2020/helpers/enum/enum.mjs +7 -7
- package/esm2020/helpers/form/form.mjs +14 -14
- package/esm2020/helpers/input-mask/input-mask.helper.mjs +26 -26
- package/esm2020/helpers/promise/promise-helper.mjs +4 -4
- package/esm2020/helpers/routing/route.mjs +11 -11
- package/esm2020/helpers/uuid.mjs +10 -10
- package/esm2020/ng-tailwind.mjs +4 -4
- package/esm2020/public-api.mjs +127 -127
- package/esm2020/services/http/ngt-attachment-http.service.mjs +3 -3
- package/esm2020/services/http/ngt-http-form.service.mjs +3 -3
- package/esm2020/services/http/ngt-http-resource.service.mjs +3 -3
- package/esm2020/services/http/ngt-http-validation.service.mjs +3 -3
- package/esm2020/services/http/ngt-http.service.mjs +3 -3
- package/esm2020/services/http/ngt-translate.service.mjs +3 -3
- package/esm2020/services/ngt-stylizable/ngt-stylizable.service.mjs +273 -273
- package/esm2020/services/validation/ngt-ability-validation.service.mjs +3 -3
- package/fesm2015/ng-tailwind.mjs +8656 -8653
- package/fesm2015/ng-tailwind.mjs.map +1 -1
- package/fesm2020/ng-tailwind.mjs +8481 -8478
- package/fesm2020/ng-tailwind.mjs.map +1 -1
- package/helpers/enum/enum.d.ts +1 -1
- package/helpers/form/form.d.ts +4 -4
- package/helpers/input-mask/input-mask.helper.d.ts +20 -20
- package/helpers/promise/promise-helper.d.ts +1 -1
- package/helpers/routing/route.d.ts +2 -2
- package/helpers/uuid.d.ts +1 -1
- package/index.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +87 -87
- package/services/http/ngt-attachment-http.service.d.ts +9 -9
- package/services/http/ngt-http-form.service.d.ts +5 -5
- package/services/http/ngt-http-resource.service.d.ts +12 -12
- package/services/http/ngt-http-validation.service.d.ts +12 -12
- package/services/http/ngt-http.service.d.ts +27 -27
- package/services/http/ngt-translate.service.d.ts +33 -33
- package/services/ngt-stylizable/ngt-stylizable.service.d.ts +96 -96
- package/services/validation/ngt-ability-validation.service.d.ts +5 -5
|
@@ -1,670 +1,670 @@
|
|
|
1
|
-
import { Component, ContentChild, EventEmitter, Host, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { ControlContainer, NgForm } from '@angular/forms';
|
|
3
|
-
import { NgSelectComponent } from '@ng-select/ng-select';
|
|
4
|
-
import { Observable, Subject } from 'rxjs';
|
|
5
|
-
import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
|
|
6
|
-
import { getEnumFromString } from '../../helpers/enum/enum';
|
|
7
|
-
import { uuid } from '../../helpers/uuid';
|
|
8
|
-
import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
|
|
9
|
-
import { NgtSelectHeaderTmp, NgtSelectOptionSelectedTmp, NgtSelectOptionTmp } from './ngt-select.directive';
|
|
10
|
-
import { delay } from '../../helpers/promise/promise-helper';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "../../directives/ngt-stylizable/ngt-stylizable.directive";
|
|
13
|
-
import * as i2 from "@angular/forms";
|
|
14
|
-
import * as i3 from "../../services/http/ngt-translate.service";
|
|
15
|
-
import * as i4 from "../../services/http/ngt-http.service";
|
|
16
|
-
import * as i5 from "../ngt-form/ngt-form.component";
|
|
17
|
-
import * as i6 from "../ngt-section/ngt-section.component";
|
|
18
|
-
import * as i7 from "../ngt-modal/ngt-modal.component";
|
|
19
|
-
import * as i8 from "@angular/common";
|
|
20
|
-
import * as i9 from "@ng-select/ng-select";
|
|
21
|
-
import * as i10 from "../ngt-validation/ngt-validation.component";
|
|
22
|
-
import * as i11 from "../ngt-shining/ngt-shining.component";
|
|
23
|
-
import * as i12 from "../ngt-helper/ngt-helper.component";
|
|
24
|
-
import * as i13 from "../ngt-svg/ngt-svg.component";
|
|
25
|
-
export class NgtSelectComponent extends NgtBaseNgModel {
|
|
26
|
-
constructor(ngtStylizableDirective, formContainer, ngtTranslateService, injector, ngtHttp, changeDetector, ngtForm, ngtSection, ngtModal) {
|
|
27
|
-
super();
|
|
28
|
-
this.ngtStylizableDirective = ngtStylizableDirective;
|
|
29
|
-
this.formContainer = formContainer;
|
|
30
|
-
this.ngtTranslateService = ngtTranslateService;
|
|
31
|
-
this.injector = injector;
|
|
32
|
-
this.ngtHttp = ngtHttp;
|
|
33
|
-
this.changeDetector = changeDetector;
|
|
34
|
-
this.ngtForm = ngtForm;
|
|
35
|
-
this.ngtSection = ngtSection;
|
|
36
|
-
this.ngtModal = ngtModal;
|
|
37
|
-
/** Visual */
|
|
38
|
-
this.label = '';
|
|
39
|
-
this.helpTextColor = 'text-green-500';
|
|
40
|
-
this.shining = false;
|
|
41
|
-
this.loading = false;
|
|
42
|
-
this.loadingText = '';
|
|
43
|
-
this.notFoundText = '';
|
|
44
|
-
this.dropdownPosition = 'auto';
|
|
45
|
-
this.typeToSearchText = '';
|
|
46
|
-
this.clearAllTooltip = '';
|
|
47
|
-
this.placeholder = '';
|
|
48
|
-
this.createText = '';
|
|
49
|
-
this.labelForId = '';
|
|
50
|
-
this.dropdownPanelMinHeight = NgtSelectDropdownPanelHeight.AUTO;
|
|
51
|
-
this.helperAutoXReverse = true;
|
|
52
|
-
this.allowCreate = false;
|
|
53
|
-
this.allowOriginalItemsUnselect = true;
|
|
54
|
-
this.isDisabled = false;
|
|
55
|
-
this.isReadonly = false;
|
|
56
|
-
this.bindLabel = 'name';
|
|
57
|
-
this.items = [];
|
|
58
|
-
this.closeOnSelect = true;
|
|
59
|
-
this.clearable = true;
|
|
60
|
-
this.groupBy = null;
|
|
61
|
-
this.multiple = false;
|
|
62
|
-
this.searchable = true;
|
|
63
|
-
this.clearSearchOnAdd = true;
|
|
64
|
-
this.virtualScroll = true;
|
|
65
|
-
this.guessCompareWith = true;
|
|
66
|
-
this.autoSelectUniqueOption = false;
|
|
67
|
-
/** Validation */
|
|
68
|
-
this.isRequired = false;
|
|
69
|
-
this.onLoadRemoteResource = new EventEmitter();
|
|
70
|
-
this.onSelectedItemRemove = new EventEmitter();
|
|
71
|
-
this.onClear = new EventEmitter();
|
|
72
|
-
this.onClose = new EventEmitter();
|
|
73
|
-
this.nativeName = uuid();
|
|
74
|
-
this.componentReady = false;
|
|
75
|
-
this.originalPerPage = 15;
|
|
76
|
-
this.subscriptions = [];
|
|
77
|
-
this.currentState = {
|
|
78
|
-
filters: {},
|
|
79
|
-
sort: {
|
|
80
|
-
field: '',
|
|
81
|
-
direction: ''
|
|
82
|
-
},
|
|
83
|
-
pagination: {
|
|
84
|
-
count: null,
|
|
85
|
-
page: 1,
|
|
86
|
-
pages: null,
|
|
87
|
-
total: null,
|
|
88
|
-
from: null,
|
|
89
|
-
to: null,
|
|
90
|
-
per_page: null
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
this.compareWith = (a, b) => a === b;
|
|
94
|
-
this.itemSearchFn = (term, item) => {
|
|
95
|
-
if (this.remoteResource) {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
let formattedValue;
|
|
99
|
-
if (typeof item == 'string') {
|
|
100
|
-
formattedValue = item;
|
|
101
|
-
}
|
|
102
|
-
if (!this.bindLabel) {
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
if (typeof item['getAttribute'] == 'function') {
|
|
106
|
-
formattedValue = item.getAttribute([this.bindLabel]);
|
|
107
|
-
}
|
|
108
|
-
else if (typeof item == 'object') {
|
|
109
|
-
formattedValue = item[this.bindLabel];
|
|
110
|
-
}
|
|
111
|
-
return formattedValue
|
|
112
|
-
? formattedValue.toLocaleLowerCase().includes(term.toLocaleLowerCase())
|
|
113
|
-
: null;
|
|
114
|
-
};
|
|
115
|
-
if (this.ngtStylizableDirective) {
|
|
116
|
-
this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
this.ngtStyle = new NgtStylizableService();
|
|
120
|
-
}
|
|
121
|
-
this.ngtStyle.load(this.injector, 'NgtSelect', {
|
|
122
|
-
h: 'h-12',
|
|
123
|
-
text: 'text-sm',
|
|
124
|
-
fontCase: '',
|
|
125
|
-
color: {
|
|
126
|
-
bg: 'bg-white'
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
ngOnInit() {
|
|
131
|
-
if (!this.formContainer) {
|
|
132
|
-
console.error("The element must be inside a <form #form='ngForm'> tag!");
|
|
133
|
-
}
|
|
134
|
-
if (!this.name) {
|
|
135
|
-
console.error("The element must contain a name attribute!");
|
|
136
|
-
}
|
|
137
|
-
if (!this.multiple && this.isRequired) {
|
|
138
|
-
this.clearable = false;
|
|
139
|
-
}
|
|
140
|
-
if (this.multiple) {
|
|
141
|
-
this.closeOnSelect = false;
|
|
142
|
-
}
|
|
143
|
-
setTimeout(() => {
|
|
144
|
-
this.componentReady = true;
|
|
145
|
-
this.initComponentValidation();
|
|
146
|
-
}, 500);
|
|
147
|
-
this.ngSelectItems = new Observable((observer) => {
|
|
148
|
-
this.ngSearchObserver = observer;
|
|
149
|
-
observer.next([]);
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
ngAfterViewInit() {
|
|
153
|
-
this.bindInnerInputUniqueId();
|
|
154
|
-
this.bindSubscriptions();
|
|
155
|
-
}
|
|
156
|
-
ngOnChanges(changes) {
|
|
157
|
-
if (changes.isRequired) {
|
|
158
|
-
this.updateValidations();
|
|
159
|
-
}
|
|
160
|
-
if (changes.remoteResource || changes.items) {
|
|
161
|
-
this.initNgSelectItems();
|
|
162
|
-
}
|
|
163
|
-
if (changes.dropdownPanelMinHeight) {
|
|
164
|
-
this.dropdownPanelMinHeight = getEnumFromString(changes.dropdownPanelMinHeight.currentValue, NgtSelectDropdownPanelHeight);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
ngDoCheck() {
|
|
168
|
-
if (!this.hadFirstItemsLoad && this.canLoadItems()) {
|
|
169
|
-
this.hadFirstItemsLoad = true;
|
|
170
|
-
this.initNgSelectItems();
|
|
171
|
-
setTimeout(() => {
|
|
172
|
-
this.replaceShowAddTag();
|
|
173
|
-
this.ngSelectComponent.itemsList.mapSelectedItems();
|
|
174
|
-
if (!this.getElementTitle() || this.getElementTitle() === 'null') {
|
|
175
|
-
this.ngSelectComponent.element.parentElement.parentElement.parentElement.title = '';
|
|
176
|
-
}
|
|
177
|
-
this.originalItems = this.ngSelectComponent.selectedItems?.map((element) => element.value);
|
|
178
|
-
this.changeDetector.detectChanges();
|
|
179
|
-
}, 500);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
ngOnDestroy() {
|
|
183
|
-
this.destroySubscriptions();
|
|
184
|
-
}
|
|
185
|
-
onOpen() {
|
|
186
|
-
const parentElements = document.querySelectorAll('#ngtSelectParentContainer');
|
|
187
|
-
if (this.dropdownPosition == 'auto' && parentElements?.length) {
|
|
188
|
-
const parentContainer = parentElements[parentElements.length - 1];
|
|
189
|
-
this.calculateDropdownPosition(parentContainer);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
removeItem(event, item) {
|
|
193
|
-
event.preventDefault();
|
|
194
|
-
event.stopPropagation();
|
|
195
|
-
return this.ngSelectComponent.clearItem(item);
|
|
196
|
-
}
|
|
197
|
-
refresh() {
|
|
198
|
-
this.initNgSelectItems();
|
|
199
|
-
this.initComponentValidation();
|
|
200
|
-
}
|
|
201
|
-
reset() {
|
|
202
|
-
this.value = undefined;
|
|
203
|
-
this.nativeValue = undefined;
|
|
204
|
-
this.refresh();
|
|
205
|
-
}
|
|
206
|
-
setFocus() {
|
|
207
|
-
setTimeout(() => {
|
|
208
|
-
this.ngSelectComponent.focus();
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
onClearSelect() {
|
|
212
|
-
if (!this.nativeValue) {
|
|
213
|
-
this.markAsPristine();
|
|
214
|
-
}
|
|
215
|
-
this.currentState.filters = {};
|
|
216
|
-
this.onClear.emit();
|
|
217
|
-
}
|
|
218
|
-
onRemoveSelectedItem(item) {
|
|
219
|
-
if (this.cantRemoveItem(item.value)) {
|
|
220
|
-
setTimeout(() => this.ngSelectComponent.select(item));
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
this.onSelectedItemRemove.emit(item.value);
|
|
224
|
-
}
|
|
225
|
-
getFilterInputValue() {
|
|
226
|
-
let inputField = this.ngSelectComponent.searchInput ?
|
|
227
|
-
this.ngSelectComponent.searchInput :
|
|
228
|
-
this.ngSelectComponent['searchInput'];
|
|
229
|
-
if (inputField &&
|
|
230
|
-
inputField.nativeElement) {
|
|
231
|
-
return inputField.nativeElement.value;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
search(filters) {
|
|
235
|
-
this.currentState.filters = { ...this.currentState.filters, ...filters };
|
|
236
|
-
if (!this.remoteResource) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
if (this.searchTimeout) {
|
|
240
|
-
clearTimeout(this.searchTimeout);
|
|
241
|
-
}
|
|
242
|
-
this.loading = true;
|
|
243
|
-
this.changeDetector.detectChanges();
|
|
244
|
-
this.searchTimeout = setTimeout(() => {
|
|
245
|
-
this.subscriptions.push(this.ngtHttp
|
|
246
|
-
.get(this.remoteResource, this.currentState.filters, this.currentState.pagination)
|
|
247
|
-
.subscribe((response) => {
|
|
248
|
-
this.loading = false;
|
|
249
|
-
this.bindCompareWithByResponse(response);
|
|
250
|
-
this.ngSearchObserver.next(response.data);
|
|
251
|
-
if (this.canAutoSelectUniqueOption(response)) {
|
|
252
|
-
this.onNativeChange(response.data[0]);
|
|
253
|
-
}
|
|
254
|
-
this.onLoadRemoteResource.emit(response.data);
|
|
255
|
-
this.currentState.pagination = response.meta.pagination;
|
|
256
|
-
this.changeDetector.detectChanges();
|
|
257
|
-
}, (error) => {
|
|
258
|
-
this.loading = false;
|
|
259
|
-
this.changeDetector.detectChanges();
|
|
260
|
-
console.error(error);
|
|
261
|
-
this.ngSearchObserver.next([]);
|
|
262
|
-
}));
|
|
263
|
-
}, 500);
|
|
264
|
-
}
|
|
265
|
-
onNativeChange(value) {
|
|
266
|
-
if (this.hasChangesBetweenModels(this.value, value)) {
|
|
267
|
-
this.value = this.sortSelectedItems(value);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
change(value) {
|
|
271
|
-
if (this.hasChangesBetweenModels(value, this.nativeValue)) {
|
|
272
|
-
if (Array.isArray(value)) {
|
|
273
|
-
value = value.map((val) => val);
|
|
274
|
-
}
|
|
275
|
-
this.nativeValue = this.sortSelectedItems(value);
|
|
276
|
-
if (!value) {
|
|
277
|
-
this.markAsPristine();
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
onScroll({ end }) {
|
|
282
|
-
let currentPerPage = this.currentState.pagination.per_page;
|
|
283
|
-
let maxItensInBackend = this.currentState.pagination.total;
|
|
284
|
-
if (end >= currentPerPage && end <= maxItensInBackend) {
|
|
285
|
-
this.currentState.pagination.per_page = parseInt(this.currentState.pagination.per_page) + this.originalPerPage;
|
|
286
|
-
this.search({});
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
hasSelectedValue() {
|
|
290
|
-
return this.value && JSON.stringify(this.value);
|
|
291
|
-
}
|
|
292
|
-
cantRemoveItem(itemValue) {
|
|
293
|
-
return (!this.allowOriginalItemsUnselect && this.hadPreviousSelection(itemValue))
|
|
294
|
-
|| (this.isAllowedToRemoveFn && !this.isAllowedToRemoveFn(itemValue));
|
|
295
|
-
}
|
|
296
|
-
getSelectClass() {
|
|
297
|
-
let selectClass = this.dropdownPanelMinHeight ? 'ng-select-dropdown-panel-' + this.dropdownPanelMinHeight : 'ng-select-dropdown-panel-auto';
|
|
298
|
-
if (this.disabled()) {
|
|
299
|
-
selectClass += ' select-border-disabled';
|
|
300
|
-
}
|
|
301
|
-
else if (this.formControl && this.formControl.errors && (this.formControl.dirty || (this.formContainer && this.formContainer['submitted']))) {
|
|
302
|
-
selectClass += ' select-border-error';
|
|
303
|
-
}
|
|
304
|
-
else {
|
|
305
|
-
selectClass += ' select-border-normal';
|
|
306
|
-
}
|
|
307
|
-
if (this.multiple) {
|
|
308
|
-
selectClass += ` h-auto ${this.ngtStyle.compile(['color.bg', 'color.text'])}`;
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
selectClass += ` ${this.ngtStyle.compile(['h', 'color.bg', 'color.text'])}`;
|
|
312
|
-
}
|
|
313
|
-
return selectClass;
|
|
314
|
-
}
|
|
315
|
-
disabled() {
|
|
316
|
-
return this.isDisabled || this.isDisabledByParent();
|
|
317
|
-
}
|
|
318
|
-
async calculateDropdownPosition(parentContainer) {
|
|
319
|
-
while (!this.componentReady || this.loading || this.ngSelectComponent.showNoItemsFound()) {
|
|
320
|
-
await delay(200);
|
|
321
|
-
if (this.ngSelectComponent.showNoItemsFound() && !this.loading && this.componentReady) {
|
|
322
|
-
break;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
this.changeDetector.detectChanges();
|
|
326
|
-
setTimeout(() => {
|
|
327
|
-
const ngSelectElement = this.ngSelectComponent.element;
|
|
328
|
-
const ngSelectHeight = ngSelectElement.offsetHeight;
|
|
329
|
-
const ngSelectYPosition = ngSelectElement.getBoundingClientRect().y;
|
|
330
|
-
const dropdownHeight = this.ngSelectComponent.dropdownPanel.contentElementRef.nativeElement.offsetHeight;
|
|
331
|
-
const openedSelectHeight = ngSelectHeight + dropdownHeight;
|
|
332
|
-
const parentYPosition = parentContainer.getBoundingClientRect().y;
|
|
333
|
-
const ngSelectYPositionInsideParent = ngSelectYPosition - parentYPosition;
|
|
334
|
-
const openedSelectTotalHeight = openedSelectHeight + ngSelectYPositionInsideParent;
|
|
335
|
-
const parentContainerHeight = parentContainer.clientHeight;
|
|
336
|
-
const fitsOnTop = openedSelectHeight < ngSelectYPositionInsideParent;
|
|
337
|
-
const fitsOnBottom = openedSelectTotalHeight < parentContainerHeight;
|
|
338
|
-
const dropdownPosition = !fitsOnBottom && fitsOnTop
|
|
339
|
-
? 'top'
|
|
340
|
-
: 'bottom';
|
|
341
|
-
this.ngSelectComponent.dropdownPanel['_currentPosition'] = dropdownPosition;
|
|
342
|
-
this.ngSelectComponent.dropdownPanel['_updateDropdownClass'](dropdownPosition);
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
initNgSelectItems() {
|
|
346
|
-
if (this.remoteResource && this.canLoadItems()) {
|
|
347
|
-
this.ngSelectItems = new Observable(observer => {
|
|
348
|
-
this.ngSearchObserver = observer;
|
|
349
|
-
this.search({});
|
|
350
|
-
});
|
|
351
|
-
this.typeahead = new Subject();
|
|
352
|
-
this.subscriptions.push(this.typeahead.subscribe((term) => {
|
|
353
|
-
this.search({ term: term });
|
|
354
|
-
}));
|
|
355
|
-
}
|
|
356
|
-
else if (this.items instanceof Observable) {
|
|
357
|
-
this.ngSelectItems = this.items;
|
|
358
|
-
}
|
|
359
|
-
else {
|
|
360
|
-
if (!this.items) {
|
|
361
|
-
this.items = [];
|
|
362
|
-
}
|
|
363
|
-
if (this.canAutoSelectUniqueOption()) {
|
|
364
|
-
this.onNativeChange(this.items[0]);
|
|
365
|
-
}
|
|
366
|
-
this.ngSelectItems = new Observable((observer) => {
|
|
367
|
-
this.ngSearchObserver = observer;
|
|
368
|
-
observer.next(this.items);
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
initComponentValidation() {
|
|
373
|
-
if (this.formContainer && this.formContainer.control && (this.formControl = this.formContainer.control.get(this.name))) {
|
|
374
|
-
this.formControl = this.formContainer.control.get(this.name);
|
|
375
|
-
this.markAsPristine();
|
|
376
|
-
this.updateValidations();
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
sortSelectedItems(value) {
|
|
380
|
-
if (this.sortSelectedItemsFn && value instanceof Array && value.length > 1) {
|
|
381
|
-
return value.sort((a, b) => this.sortSelectedItemsFn(a, b));
|
|
382
|
-
}
|
|
383
|
-
return value;
|
|
384
|
-
}
|
|
385
|
-
getElementTitle() {
|
|
386
|
-
return this.ngSelectComponent.element.parentElement.parentElement.parentElement.title;
|
|
387
|
-
}
|
|
388
|
-
hasChangesBetweenModels(value, nativeValue) {
|
|
389
|
-
return JSON.stringify(value) !== JSON.stringify(nativeValue);
|
|
390
|
-
}
|
|
391
|
-
updateValidations() {
|
|
392
|
-
if (!this.formControl) {
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
let syncValidators = [];
|
|
396
|
-
if (this.isRequired) {
|
|
397
|
-
syncValidators.push(this.isRequiredValidator());
|
|
398
|
-
}
|
|
399
|
-
setTimeout(() => {
|
|
400
|
-
this.formControl.setValidators(syncValidators);
|
|
401
|
-
this.formControl.updateValueAndValidity();
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
isRequiredValidator() {
|
|
405
|
-
return (control) => {
|
|
406
|
-
if (this.multiple) {
|
|
407
|
-
if (Array.isArray(this.value) && this.value.length > 0) {
|
|
408
|
-
return null;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
else if (control.value && JSON.stringify(control.value)) {
|
|
412
|
-
return null;
|
|
413
|
-
}
|
|
414
|
-
return { 'required': true };
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
replaceShowAddTag() {
|
|
418
|
-
Object.defineProperty(this.ngSelectComponent, 'showAddTag', {
|
|
419
|
-
get: () => {
|
|
420
|
-
if (!this.ngSelectComponent['searchTerm']) {
|
|
421
|
-
return false;
|
|
422
|
-
}
|
|
423
|
-
const term = this.ngSelectComponent['searchTerm'].toLocaleLowerCase();
|
|
424
|
-
return this.ngSelectComponent.addTag && !this.ngSelectComponent.loading
|
|
425
|
-
&& (!this.hasTermInFilteredItems(term) && (!this.hasTermInSelectedItems(term)
|
|
426
|
-
|| !this.ngSelectComponent.hideSelected && this.ngSelectComponent.isOpen));
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
bindInnerInputUniqueId() {
|
|
431
|
-
const childInputs = this.ngSelectComponent.element.getElementsByTagName('input');
|
|
432
|
-
if (childInputs?.length) {
|
|
433
|
-
const innerInput = childInputs[0];
|
|
434
|
-
innerInput.id = uuid();
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
bindCompareWithByResponse(response) {
|
|
438
|
-
if (this.guessCompareWith) {
|
|
439
|
-
if (response.data?.length && typeof response.data[0]['getApiId'] === 'function') {
|
|
440
|
-
this.compareWith = (a, b) => a.getApiId() == b.getApiId();
|
|
441
|
-
}
|
|
442
|
-
else {
|
|
443
|
-
this.compareWith = (a, b) => a === b;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
hasTermInFilteredItems(term) {
|
|
448
|
-
const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
|
|
449
|
-
if (filteredItems?.length && this.isColoquentResource()) {
|
|
450
|
-
return filteredItems.some((element) => {
|
|
451
|
-
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
452
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
return filteredItems.some((element) => {
|
|
456
|
-
const elementValue = element.value[this.bindLabel];
|
|
457
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
458
|
-
});
|
|
459
|
-
}
|
|
460
|
-
hasTermInSelectedItems(term) {
|
|
461
|
-
const selectedItems = this.ngSelectComponent.selectedItems;
|
|
462
|
-
if (selectedItems?.length && this.isColoquentResource()) {
|
|
463
|
-
return selectedItems.some((element) => {
|
|
464
|
-
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
465
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
return selectedItems.some((element) => {
|
|
469
|
-
const elementValue = element.value[this.bindLabel];
|
|
470
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
hadPreviousSelection(item) {
|
|
474
|
-
return !!this.originalItems?.find(element => this.compareWith(element, item));
|
|
475
|
-
}
|
|
476
|
-
isColoquentResource() {
|
|
477
|
-
const items = this.ngSelectComponent.itemsList.items;
|
|
478
|
-
return items?.length && typeof items[0].value['getAttribute'] === 'function';
|
|
479
|
-
}
|
|
480
|
-
canLoadItems() {
|
|
481
|
-
return this.autoLoad || (!this.disabled() && this.wasClicked);
|
|
482
|
-
}
|
|
483
|
-
canAutoSelectUniqueOption(response) {
|
|
484
|
-
return !this.value && this.autoSelectUniqueOption
|
|
485
|
-
&& ((Array.isArray(response?.data) && response?.data?.length === 1)
|
|
486
|
-
|| (!response && Array.isArray(this.items) && this.items?.length == 1));
|
|
487
|
-
}
|
|
488
|
-
bindSubscriptions() {
|
|
489
|
-
if (this.ngtForm) {
|
|
490
|
-
this.shining = this.ngtForm.isShining();
|
|
491
|
-
this.subscriptions.push(this.ngtForm.onShiningChange.subscribe((shining) => {
|
|
492
|
-
this.shining = shining;
|
|
493
|
-
}));
|
|
494
|
-
}
|
|
495
|
-
this.changeDetector.detectChanges();
|
|
496
|
-
}
|
|
497
|
-
isDisabledByParent() {
|
|
498
|
-
return this.ngtForm?.isDisabled
|
|
499
|
-
|| this.ngtSection?.isDisabled
|
|
500
|
-
|| this.ngtModal?.isDisabled;
|
|
501
|
-
}
|
|
502
|
-
destroySubscriptions() {
|
|
503
|
-
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
504
|
-
this.subscriptions = [];
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
NgtSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtSelectComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtTranslateService, optional: true }, { token: i0.Injector }, { token: i4.NgtHttpService }, { token: i0.ChangeDetectorRef }, { token: i5.NgtFormComponent, optional: true, skipSelf: true }, { token: i6.NgtSectionComponent, optional: true, skipSelf: true }, { token: i7.NgtModalComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
508
|
-
NgtSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtSelectComponent, selector: "ngt-select", inputs: { label: "label", labelIcon: "labelIcon", labelIconColor: "labelIconColor", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", shining: "shining", loading: "loading", loadingText: "loadingText", notFoundText: "notFoundText", dropdownPosition: "dropdownPosition", typeToSearchText: "typeToSearchText", clearAllTooltip: "clearAllTooltip", placeholder: "placeholder", createText: "createText", labelForId: "labelForId", dropdownPanelMinHeight: "dropdownPanelMinHeight", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse", name: "name", autoLoad: "autoLoad", allowCreate: "allowCreate", allowOriginalItemsUnselect: "allowOriginalItemsUnselect", isDisabled: "isDisabled", isReadonly: "isReadonly", remoteResource: "remoteResource", hideSelected: "hideSelected", bindLabel: "bindLabel", bindValue: "bindValue", items: "items", inputAttrs: "inputAttrs", closeOnSelect: "closeOnSelect", clearable: "clearable", groupBy: "groupBy", maxSelectedItems: "maxSelectedItems", multiple: "multiple", searchable: "searchable", clearSearchOnAdd: "clearSearchOnAdd", virtualScroll: "virtualScroll", tabIndex: "tabIndex", typeahead: "typeahead", guessCompareWith: "guessCompareWith", autoSelectUniqueOption: "autoSelectUniqueOption", groupValue: "groupValue", trackBy: "trackBy", sortSelectedItemsFn: "sortSelectedItemsFn", isAllowedToRemoveFn: "isAllowedToRemoveFn", isRequired: "isRequired", compareWith: "compareWith" }, outputs: { onLoadRemoteResource: "onLoadRemoteResource", onSelectedItemRemove: "onSelectedItemRemove", onClear: "onClear", onClose: "onClose" }, providers: [
|
|
509
|
-
NgtMakeProvider(NgtSelectComponent)
|
|
510
|
-
], queries: [{ propertyName: "ngtOptionTemplate", first: true, predicate: NgtSelectOptionTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtOptionSelectedTemplate", first: true, predicate: NgtSelectOptionSelectedTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtSelectHeaderTemplate", first: true, predicate: NgtSelectHeaderTmp, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelectComponent", first: true, predicate: NgSelectComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ ngtStyle.compile(['text']) }} {{ getSelectClass() }} normal-case\"\n style=\"min-height: 2.5rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [searchFn]=\"itemSearchFn\" [disabled]='disabled() || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\" (close)=\"onClose.emit()\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (open)=\"onOpen()\" (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple && !cantRemoveItem(item)\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:2.5rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i9.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i9.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i9.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: i10.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i11.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i12.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i13.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }], viewProviders: [
|
|
511
|
-
{ provide: ControlContainer, useExisting: NgForm }
|
|
512
|
-
], encapsulation: i0.ViewEncapsulation.None });
|
|
513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtSelectComponent, decorators: [{
|
|
514
|
-
type: Component,
|
|
515
|
-
args: [{ selector: 'ngt-select', providers: [
|
|
516
|
-
NgtMakeProvider(NgtSelectComponent)
|
|
517
|
-
], viewProviders: [
|
|
518
|
-
{ provide: ControlContainer, useExisting: NgForm }
|
|
519
|
-
], encapsulation: ViewEncapsulation.None, template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ ngtStyle.compile(['text']) }} {{ getSelectClass() }} normal-case\"\n style=\"min-height: 2.5rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [searchFn]=\"itemSearchFn\" [disabled]='disabled() || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\" (close)=\"onClose.emit()\"\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\n (open)=\"onOpen()\" (click)=\"wasClicked = true\">\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple && !cantRemoveItem(item)\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:2.5rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"] }]
|
|
520
|
-
}], ctorParameters: function () { return [{ type: i1.NgtStylizableDirective, decorators: [{
|
|
521
|
-
type: Optional
|
|
522
|
-
}, {
|
|
523
|
-
type: Self
|
|
524
|
-
}] }, { type: i2.ControlContainer, decorators: [{
|
|
525
|
-
type: Optional
|
|
526
|
-
}, {
|
|
527
|
-
type: Host
|
|
528
|
-
}] }, { type: i3.NgtTranslateService, decorators: [{
|
|
529
|
-
type: Optional
|
|
530
|
-
}] }, { type: i0.Injector }, { type: i4.NgtHttpService }, { type: i0.ChangeDetectorRef }, { type: i5.NgtFormComponent, decorators: [{
|
|
531
|
-
type: Optional
|
|
532
|
-
}, {
|
|
533
|
-
type: SkipSelf
|
|
534
|
-
}] }, { type: i6.NgtSectionComponent, decorators: [{
|
|
535
|
-
type: Optional
|
|
536
|
-
}, {
|
|
537
|
-
type: SkipSelf
|
|
538
|
-
}] }, { type: i7.NgtModalComponent, decorators: [{
|
|
539
|
-
type: Optional
|
|
540
|
-
}, {
|
|
541
|
-
type: SkipSelf
|
|
542
|
-
}] }]; }, propDecorators: { ngSelectComponent: [{
|
|
543
|
-
type: ViewChild,
|
|
544
|
-
args: [NgSelectComponent, { static: true }]
|
|
545
|
-
}], ngtOptionTemplate: [{
|
|
546
|
-
type: ContentChild,
|
|
547
|
-
args: [NgtSelectOptionTmp, { read: TemplateRef }]
|
|
548
|
-
}], ngtOptionSelectedTemplate: [{
|
|
549
|
-
type: ContentChild,
|
|
550
|
-
args: [NgtSelectOptionSelectedTmp, { read: TemplateRef }]
|
|
551
|
-
}], ngtSelectHeaderTemplate: [{
|
|
552
|
-
type: ContentChild,
|
|
553
|
-
args: [NgtSelectHeaderTmp, { read: TemplateRef }]
|
|
554
|
-
}], label: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], labelIcon: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], labelIconColor: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], helpTitle: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], helpText: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], helpTextColor: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], shining: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], loading: [{
|
|
569
|
-
type: Input
|
|
570
|
-
}], loadingText: [{
|
|
571
|
-
type: Input
|
|
572
|
-
}], notFoundText: [{
|
|
573
|
-
type: Input
|
|
574
|
-
}], dropdownPosition: [{
|
|
575
|
-
type: Input
|
|
576
|
-
}], typeToSearchText: [{
|
|
577
|
-
type: Input
|
|
578
|
-
}], clearAllTooltip: [{
|
|
579
|
-
type: Input
|
|
580
|
-
}], placeholder: [{
|
|
581
|
-
type: Input
|
|
582
|
-
}], createText: [{
|
|
583
|
-
type: Input
|
|
584
|
-
}], labelForId: [{
|
|
585
|
-
type: Input
|
|
586
|
-
}], dropdownPanelMinHeight: [{
|
|
587
|
-
type: Input
|
|
588
|
-
}], helperReverseYPosition: [{
|
|
589
|
-
type: Input
|
|
590
|
-
}], helperAutoXReverse: [{
|
|
591
|
-
type: Input
|
|
592
|
-
}], name: [{
|
|
593
|
-
type: Input
|
|
594
|
-
}], autoLoad: [{
|
|
595
|
-
type: Input
|
|
596
|
-
}], allowCreate: [{
|
|
597
|
-
type: Input
|
|
598
|
-
}], allowOriginalItemsUnselect: [{
|
|
599
|
-
type: Input
|
|
600
|
-
}], isDisabled: [{
|
|
601
|
-
type: Input
|
|
602
|
-
}], isReadonly: [{
|
|
603
|
-
type: Input
|
|
604
|
-
}], remoteResource: [{
|
|
605
|
-
type: Input
|
|
606
|
-
}], hideSelected: [{
|
|
607
|
-
type: Input
|
|
608
|
-
}], bindLabel: [{
|
|
609
|
-
type: Input
|
|
610
|
-
}], bindValue: [{
|
|
611
|
-
type: Input
|
|
612
|
-
}], items: [{
|
|
613
|
-
type: Input
|
|
614
|
-
}], inputAttrs: [{
|
|
615
|
-
type: Input
|
|
616
|
-
}], closeOnSelect: [{
|
|
617
|
-
type: Input
|
|
618
|
-
}], clearable: [{
|
|
619
|
-
type: Input
|
|
620
|
-
}], groupBy: [{
|
|
621
|
-
type: Input
|
|
622
|
-
}], maxSelectedItems: [{
|
|
623
|
-
type: Input
|
|
624
|
-
}], multiple: [{
|
|
625
|
-
type: Input
|
|
626
|
-
}], searchable: [{
|
|
627
|
-
type: Input
|
|
628
|
-
}], clearSearchOnAdd: [{
|
|
629
|
-
type: Input
|
|
630
|
-
}], virtualScroll: [{
|
|
631
|
-
type: Input
|
|
632
|
-
}], tabIndex: [{
|
|
633
|
-
type: Input
|
|
634
|
-
}], typeahead: [{
|
|
635
|
-
type: Input
|
|
636
|
-
}], guessCompareWith: [{
|
|
637
|
-
type: Input
|
|
638
|
-
}], autoSelectUniqueOption: [{
|
|
639
|
-
type: Input
|
|
640
|
-
}], groupValue: [{
|
|
641
|
-
type: Input
|
|
642
|
-
}], trackBy: [{
|
|
643
|
-
type: Input
|
|
644
|
-
}], sortSelectedItemsFn: [{
|
|
645
|
-
type: Input
|
|
646
|
-
}], isAllowedToRemoveFn: [{
|
|
647
|
-
type: Input
|
|
648
|
-
}], isRequired: [{
|
|
649
|
-
type: Input
|
|
650
|
-
}], onLoadRemoteResource: [{
|
|
651
|
-
type: Output
|
|
652
|
-
}], onSelectedItemRemove: [{
|
|
653
|
-
type: Output
|
|
654
|
-
}], onClear: [{
|
|
655
|
-
type: Output
|
|
656
|
-
}], onClose: [{
|
|
657
|
-
type: Output
|
|
658
|
-
}], compareWith: [{
|
|
659
|
-
type: Input
|
|
660
|
-
}] } });
|
|
661
|
-
export var NgtSelectDropdownPanelHeight;
|
|
662
|
-
(function (NgtSelectDropdownPanelHeight) {
|
|
663
|
-
NgtSelectDropdownPanelHeight["AUTO"] = "auto";
|
|
664
|
-
NgtSelectDropdownPanelHeight["XS"] = "xs";
|
|
665
|
-
NgtSelectDropdownPanelHeight["MD"] = "md";
|
|
666
|
-
NgtSelectDropdownPanelHeight["SM"] = "sm";
|
|
667
|
-
NgtSelectDropdownPanelHeight["LG"] = "lg";
|
|
668
|
-
NgtSelectDropdownPanelHeight["XL"] = "xl";
|
|
669
|
-
})(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
|
|
670
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlbGVjdC9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBOEIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsVUFBVSxFQUFZLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFHNUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFjN0Qs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c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUdVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBRVcsb0JBQW9CO3NCQUFwQyxNQUFNO2dCQUNVLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU07Z0JBMkVTLFdBQVc7c0JBQTFCLEtBQUs7O0FBNGdCVixNQUFNLENBQU4sSUFBWSw0QkFPWDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERvQ2hlY2ssXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEcm9wZG93blBvc2l0aW9uLCBOZ09wdGlvbiwgTmdTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V1aWQnO1xuaW1wb3J0IHsgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0U2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL25ndC1zZWN0aW9uL25ndC1zZWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3RTZWxlY3RIZWFkZXJUbXAsIE5ndFNlbGVjdE9wdGlvblNlbGVjdGVkVG1wLCBOZ3RTZWxlY3RPcHRpb25UbXAgfSBmcm9tICcuL25ndC1zZWxlY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5ndE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LW1vZGFsL25ndC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3Byb21pc2UvcHJvbWlzZS1oZWxwZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgTmd0TWFrZVByb3ZpZGVyKE5ndFNlbGVjdENvbXBvbmVudClcbiAgICBdLFxuICAgIHZpZXdQcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1cbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTmd0U2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgTmd0QmFzZU5nTW9kZWwgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBEb0NoZWNrIHtcbiAgICBAVmlld0NoaWxkKE5nU2VsZWN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgbmdTZWxlY3RDb21wb25lbnQ6IE5nU2VsZWN0Q29tcG9uZW50O1xuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0T3B0aW9uVG1wLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHB1YmxpYyBuZ3RPcHRpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKE5ndFNlbGVjdE9wdGlvblNlbGVjdGVkVG1wLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHB1YmxpYyBuZ3RPcHRpb25TZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0SGVhZGVyVG1wLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHB1YmxpYyBuZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBWaXN1YWwgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEljb246IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWxJY29uQ29sb3I6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmcgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIG5vdEZvdW5kVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGRyb3Bkb3duUG9zaXRpb24gPSAnYXV0byc7XG4gICAgQElucHV0KCkgcHVibGljIHR5cGVUb1NlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhckFsbFRvb2x0aXA6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGNyZWF0ZVRleHQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEZvcklkOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25QYW5lbE1pbkhlaWdodDogTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodCA9IE5ndFNlbGVjdERyb3Bkb3duUGFuZWxIZWlnaHQuQVVUTztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscGVyUmV2ZXJzZVlQb3NpdGlvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscGVyQXV0b1hSZXZlcnNlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBCZWhhdmlvciAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd0NyZWF0ZTogYm9vbGVhbiB8IFByb21pc2U8YW55PiB8IEZ1bmN0aW9uID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGFsbG93T3JpZ2luYWxJdGVtc1Vuc2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHJlbW90ZVJlc291cmNlOiBhbnk7XG4gICAgQElucHV0KCkgcHVibGljIGhpZGVTZWxlY3RlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgYmluZExhYmVsOiBzdHJpbmcgPSAnbmFtZSc7XG4gICAgQElucHV0KCkgcHVibGljIGJpbmRWYWx1ZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogQXJyYXk8YW55PiB8IE9ic2VydmFibGU8YW55PiA9IFtdO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpbnB1dEF0dHJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbG9zZU9uU2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xlYXJhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBCeTogc3RyaW5nIHwgRnVuY3Rpb24gPSBudWxsO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXhTZWxlY3RlZEl0ZW1zOiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhclNlYXJjaE9uQWRkOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgdmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIHRhYkluZGV4OiBudW1iZXI7XG4gICAgQElucHV0KCkgcHVibGljIHR5cGVhaGVhZDogU3ViamVjdDxhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBndWVzc0NvbXBhcmVXaXRoOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b1NlbGVjdFVuaXF1ZU9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cFZhbHVlOiAoZ3JvdXBLZXk6IHN0cmluZywgY2lsZHJlbjogYW55W10pID0+IE9iamVjdDtcbiAgICBASW5wdXQoKSBwdWJsaWMgdHJhY2tCeTogKGl0ZW06IGFueSkgPT4gYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzb3J0U2VsZWN0ZWRJdGVtc0ZuOiAoYTogYW55LCBiOiBhbnkpID0+IGFueTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNBbGxvd2VkVG9SZW1vdmVGbjogKGE6IGFueSkgPT4gYm9vbGVhbjtcblxuICAgIC8qKiBWYWxpZGF0aW9uICovXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25Mb2FkUmVtb3RlUmVzb3VyY2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNlbGVjdGVkSXRlbVJlbW92ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBuYXRpdmVOYW1lID0gdXVpZCgpO1xuICAgIHB1YmxpYyBuZ3RTdHlsZTogTmd0U3R5bGl6YWJsZVNlcnZpY2U7XG4gICAgcHVibGljIG5nU2VsZWN0SXRlbXM6IGFueTtcbiAgICBwdWJsaWMgbmF0aXZlVmFsdWU6IGFueTtcbiAgICBwdWJsaWMgY29tcG9uZW50UmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgd2FzQ2xpY2tlZDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgbmdTZWFyY2hPYnNlcnZlcjogT2JzZXJ2ZXI8YW55PjtcbiAgICBwcml2YXRlIG9yaWdpbmFsUGVyUGFnZSA9IDE1O1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgb3JpZ2luYWxJdGVtczogQXJyYXk8YW55PjtcblxuICAgIHByaXZhdGUgY3VycmVudFN0YXRlID0ge1xuICAgICAgICBmaWx0ZXJzOiB7fSxcbiAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBjb3VudDogbnVsbCxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBwYWdlczogbnVsbCxcbiAgICAgICAgICAgIHRvdGFsOiBudWxsLFxuICAgICAgICAgICAgZnJvbTogbnVsbCxcbiAgICAgICAgICAgIHRvOiBudWxsLFxuICAgICAgICAgICAgcGVyX3BhZ2U6IG51bGxcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHNlYXJjaFRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIGhhZEZpcnN0SXRlbXNMb2FkOiBib29sZWFuO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpXG4gICAgICAgIHB1YmxpYyBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcbiAgICAgICAgcHVibGljIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG5cbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgcHVibGljIG5ndFRyYW5zbGF0ZVNlcnZpY2U6IE5ndFRyYW5zbGF0ZVNlcnZpY2UsXG5cbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cDogTmd0SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0Rm9ybTogTmd0Rm9ybUNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFNlY3Rpb246IE5ndFNlY3Rpb25Db21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RNb2RhbDogTmd0TW9kYWxDb21wb25lbnRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gdGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlLmdldE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5ndFN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndFNlbGVjdCcsIHtcbiAgICAgICAgICAgIGg6ICdoLTEyJyxcbiAgICAgICAgICAgIHRleHQ6ICd0ZXh0LXNtJyxcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcbiAgICAgICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICAgICAgYmc6ICdiZy13aGl0ZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcHVibGljIGNvbXBhcmVXaXRoID0gKGE6IGFueSwgYjogYW55KSA9PiBhID09PSBiO1xuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU9uU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50VmFsaWRhdGlvbigpO1xuICAgICAgICB9LCA1MDApO1xuXG4gICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KFtdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5iaW5kSW5uZXJJbnB1dFVuaXF1ZUlkKCk7XG5cbiAgICAgICAgdGhpcy5iaW5kU3Vic2NyaXB0aW9ucygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnJlbW90ZVJlc291cmNlIHx8IGNoYW5nZXMuaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdE5nU2VsZWN0SXRlbXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCA9IGdldEVudW1Gcm9tU3RyaW5nKGNoYW5nZXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodC5jdXJyZW50VmFsdWUsIE5ndFNlbGVjdERyb3Bkb3duUGFuZWxIZWlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhZEZpcnN0SXRlbXNMb2FkICYmIHRoaXMuY2FuTG9hZEl0ZW1zKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFkRmlyc3RJdGVtc0xvYWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZVNob3dBZGRUYWcoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0Lm1hcFNlbGVjdGVkSXRlbXMoKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRFbGVtZW50VGl0bGUoKSB8fCB0aGlzLmdldEVsZW1lbnRUaXRsZSgpID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5lbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnRpdGxlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWxlY3RlZEl0ZW1zPy5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uT3BlbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjbmd0U2VsZWN0UGFyZW50Q29udGFpbmVyJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25Qb3NpdGlvbiA9PSAnYXV0bycgJiYgcGFyZW50RWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID0gcGFyZW50RWxlbWVudHNbcGFyZW50RWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRHJvcGRvd25Qb3NpdGlvbihwYXJlbnRDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUl0ZW0oZXZlbnQ6IEV2ZW50LCBpdGVtOiBhbnkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuY2xlYXJJdGVtKGl0ZW0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWZyZXNoKCkge1xuICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XG4gICAgICAgIHRoaXMuaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGb2N1cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VsZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMubmF0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMgPSB7fTtcblxuICAgICAgICB0aGlzLm9uQ2xlYXIuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVNlbGVjdGVkSXRlbShpdGVtOiBOZ09wdGlvbikge1xuICAgICAgICBpZiAodGhpcy5jYW50UmVtb3ZlSXRlbShpdGVtLnZhbHVlKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdChpdGVtKSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25TZWxlY3RlZEl0ZW1SZW1vdmUuZW1pdChpdGVtLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsdGVySW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgbGV0IGlucHV0RmllbGQgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlYXJjaElucHV0ID9cbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgOlxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoSW5wdXQnXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpbnB1dEZpZWxkICYmXG4gICAgICAgICAgICBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGl0ZW1TZWFyY2hGbiA9ICh0ZXJtOiBzdHJpbmcsIGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW1vdGVSZXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGl0ZW07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYmluZExhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVsnZ2V0QXR0cmlidXRlJ10gPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBpdGVtLmdldEF0dHJpYnV0ZShbdGhpcy5iaW5kTGFiZWxdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSBpdGVtW3RoaXMuYmluZExhYmVsXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRWYWx1ZVxuICAgICAgICAgICAgPyBmb3JtYXR0ZWRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb2NhbGVMb3dlckNhc2UoKSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9O1xuXG4gICAgcHVibGljIHNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgLi4uZmlsdGVycyB9O1xuXG4gICAgICAgIGlmICghdGhpcy5yZW1vdGVSZXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoVGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMucmVtb3RlUmVzb3VyY2UsIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMsIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IE5ndEh0dHBSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kQ29tcGFyZVdpdGhCeVJlc3BvbnNlKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuQXV0b1NlbGVjdFVuaXF1ZU9wdGlvbihyZXNwb25zZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZShyZXNwb25zZS5kYXRhWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZFJlbW90ZVJlc291cmNlLmVtaXQocmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uID0gcmVzcG9uc2UubWV0YS5wYWdpbmF0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyLm5leHQoW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5hdGl2ZUNoYW5nZSh2YWx1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscyh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNvcnRTZWxlY3RlZEl0ZW1zKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2UodmFsdWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIHRoaXMubmF0aXZlVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcCgodmFsKSA9PiB2YWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdGhpcy5zb3J0U2VsZWN0ZWRJdGVtcyh2YWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TY3JvbGwoeyBlbmQgfSkge1xuICAgICAgICBsZXQgY3VycmVudFBlclBhZ2UgPSB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlO1xuICAgICAgICBsZXQgbWF4SXRlbnNJbkJhY2tlbmQgPSB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnRvdGFsO1xuXG4gICAgICAgIGlmIChlbmQgPj0gY3VycmVudFBlclBhZ2UgJiYgZW5kIDw9IG1heEl0ZW5zSW5CYWNrZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZSkgKyB0aGlzLm9yaWdpbmFsUGVyUGFnZTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoKHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNTZWxlY3RlZFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FudFJlbW92ZUl0ZW0oaXRlbVZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICghdGhpcy5hbGxvd09yaWdpbmFsSXRlbXNVbnNlbGVjdCAmJiB0aGlzLmhhZFByZXZpb3VzU2VsZWN0aW9uKGl0ZW1WYWx1ZSkpXG4gICAgICAgICAgICB8fCAodGhpcy5pc0FsbG93ZWRUb1JlbW92ZUZuICYmICF0aGlzLmlzQWxsb3dlZFRvUmVtb3ZlRm4oaXRlbVZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlbGVjdENsYXNzKCkge1xuICAgICAgICBsZXQgc2VsZWN0Q2xhc3MgPSB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPyAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLScgKyB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgOiAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLWF1dG8nO1xuXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1kaXNhYmxlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbCAmJiB0aGlzLmZvcm1Db250cm9sLmVycm9ycyAmJiAodGhpcy5mb3JtQ29udHJvbC5kaXJ0eSB8fCAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10pKSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLWVycm9yJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1ub3JtYWwnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9IGAgaC1hdXRvICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCAke3RoaXMubmd0U3R5bGUuY29tcGlsZShbJ2gnLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdENsYXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzRGlzYWJsZWRCeVBhcmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2FsY3VsYXRlRHJvcGRvd25Qb3NpdGlvbihwYXJlbnRDb250YWluZXI6IEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLmNvbXBvbmVudFJlYWR5IHx8IHRoaXMubG9hZGluZyB8fCB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNob3dOb0l0ZW1zRm91bmQoKSkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoMjAwKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2hvd05vSXRlbXNGb3VuZCgpICYmICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZ1NlbGVjdEVsZW1lbnQgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZ1NlbGVjdEhlaWdodCA9IG5nU2VsZWN0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBuZ1NlbGVjdFlQb3NpdGlvbiA9IG5nU2VsZWN0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55O1xuXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkhlaWdodCA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZHJvcGRvd25QYW5lbC5jb250ZW50RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IG9wZW5lZFNlbGVjdEhlaWdodCA9IG5nU2VsZWN0SGVpZ2h0ICsgZHJvcGRvd25IZWlnaHQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFlQb3NpdGlvbiA9IHBhcmVudENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55O1xuICAgICAgICAgICAgY29uc3QgbmdTZWxlY3RZUG9zaXRpb25JbnNpZGVQYXJlbnQgPSBuZ1NlbGVjdFlQb3NpdGlvbiAtIHBhcmVudFlQb3NpdGlvbjtcblxuICAgICAgICAgICAgY29uc3Qgb3BlbmVkU2VsZWN0VG90YWxIZWlnaHQgPSBvcGVuZWRTZWxlY3RIZWlnaHQgKyBuZ1NlbGVjdFlQb3NpdGlvbkluc2lkZVBhcmVudDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbnRhaW5lckhlaWdodCA9IHBhcmVudENvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGZpdHNPblRvcCA9IG9wZW5lZFNlbGVjdEhlaWdodCA8IG5nU2VsZWN0WVBvc2l0aW9uSW5zaWRlUGFyZW50O1xuICAgICAgICAgICAgY29uc3QgZml0c09uQm90dG9tID0gb3BlbmVkU2VsZWN0VG90YWxIZWlnaHQgPCBwYXJlbnRDb250YWluZXJIZWlnaHQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duUG9zaXRpb246IERyb3Bkb3duUG9zaXRpb24gPSAhZml0c09uQm90dG9tICYmIGZpdHNPblRvcFxuICAgICAgICAgICAgICAgID8gJ3RvcCdcbiAgICAgICAgICAgICAgICA6ICdib3R0b20nO1xuXG4gICAgICAgICAgICAoPGFueT50aGlzLm5nU2VsZWN0Q29tcG9uZW50LmRyb3Bkb3duUGFuZWxbJ19jdXJyZW50UG9zaXRpb24nXSkgPSBkcm9wZG93blBvc2l0aW9uO1xuXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmRyb3Bkb3duUGFuZWxbJ191cGRhdGVEcm9wZG93bkNsYXNzJ10oZHJvcGRvd25Qb3NpdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE5nU2VsZWN0SXRlbXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW90ZVJlc291cmNlICYmIHRoaXMuY2FuTG9hZEl0ZW1zKCkpIHtcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCh7fSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZC5zdWJzY3JpYmUoKHRlcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB0ZXJtIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5BdXRvU2VsZWN0VW5pcXVlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTmF0aXZlQ2hhbmdlKHRoaXMuaXRlbXNbMF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnRWYWxpZGF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRTZWxlY3RlZEl0ZW1zKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5zb3J0U2VsZWN0ZWRJdGVtc0ZuICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNvcnQoKGEsIGIpID0+IHRoaXMuc29ydFNlbGVjdGVkSXRlbXNGbihhLCBiKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50VGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHZhbHVlLCBuYXRpdmVWYWx1ZSkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShuYXRpdmVWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuaXNSZXF1aXJlZFZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUmVxdWlyZWRWYWxpZGF0b3IoKSB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wudmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgJ3JlcXVpcmVkJzogdHJ1ZSB9O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVwbGFjZVNob3dBZGRUYWcoKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm5nU2VsZWN0Q29tcG9uZW50LCAnc2hvd0FkZFRhZycsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoVGVybSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXJtID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoVGVybSddLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5hZGRUYWcgJiYgIXRoaXMubmdTZWxlY3RDb21wb25lbnQubG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMuaGFzVGVybUluRmlsdGVyZWRJdGVtcyh0ZXJtKSAmJiAoIXRoaXMuaGFzVGVybUluU2VsZWN0ZWRJdGVtcyh0ZXJtKVxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXRoaXMubmdTZWxlY3RDb21wb25lbnQuaGlkZVNlbGVjdGVkICYmIHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXNPcGVuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZElubmVySW5wdXRVbmlxdWVJZCgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRJbnB1dHMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XG5cbiAgICAgICAgaWYgKGNoaWxkSW5wdXRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVySW5wdXQgPSBjaGlsZElucHV0c1swXTtcblxuICAgICAgICAgICAgaW5uZXJJbnB1dC5pZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmluZENvbXBhcmVXaXRoQnlSZXNwb25zZShyZXNwb25zZTogTmd0SHR0cFJlc3BvbnNlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmd1ZXNzQ29tcGFyZVdpdGgpIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy5sZW5ndGggJiYgdHlwZW9mIHJlc3BvbnNlLmRhdGFbMF1bJ2dldEFwaUlkJ10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBhcmVXaXRoID0gKGE6IGFueSwgYjogYW55KSA9PiBhLmdldEFwaUlkKCkgPT0gYi5nZXRBcGlJZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBhcmVXaXRoID0gKGE6IGFueSwgYjogYW55KSA9PiBhID09PSBiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5GaWx0ZXJlZEl0ZW1zKHRlcm06IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QuZmlsdGVyZWRJdGVtcztcblxuICAgICAgICBpZiAoZmlsdGVyZWRJdGVtcz8ubGVuZ3RoICYmIHRoaXMuaXNDb2xvcXVlbnRSZXNvdXJjZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKVt0aGlzLmJpbmRMYWJlbF07XG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzVGVybUluU2VsZWN0ZWRJdGVtcyh0ZXJtOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcztcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8ubGVuZ3RoICYmIHRoaXMuaXNDb2xvcXVlbnRSZXNvdXJjZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKVt0aGlzLmJpbmRMYWJlbF07XG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFkUHJldmlvdXNTZWxlY3Rpb24oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMub3JpZ2luYWxJdGVtcz8uZmluZChlbGVtZW50ID0+IHRoaXMuY29tcGFyZVdpdGgoZWxlbWVudCwgaXRlbSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDb2xvcXVlbnRSZXNvdXJjZSgpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5pdGVtcztcblxuICAgICAgICByZXR1cm4gaXRlbXM/Lmxlbmd0aCAmJiB0eXBlb2YgaXRlbXNbMF0udmFsdWVbJ2dldEF0dHJpYnV0ZSddID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuTG9hZEl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRvTG9hZCB8fCAoIXRoaXMuZGlzYWJsZWQoKSAmJiB0aGlzLndhc0NsaWNrZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuQXV0b1NlbGVjdFVuaXF1ZU9wdGlvbihyZXNwb25zZT86IE5ndEh0dHBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMudmFsdWUgJiYgdGhpcy5hdXRvU2VsZWN0VW5pcXVlT3B0aW9uXG4gICAgICAgICAgICAmJiAoXG4gICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkocmVzcG9uc2U/LmRhdGEpICYmIHJlc3BvbnNlPy5kYXRhPy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgfHwgKCFyZXNwb25zZSAmJiBBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpICYmIHRoaXMuaXRlbXM/Lmxlbmd0aCA9PSAxKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uZ3RGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSB0aGlzLm5ndEZvcm0uaXNTaGluaW5nKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMubmd0Rm9ybS5vblNoaW5pbmdDaGFuZ2Uuc3Vic2NyaWJlKChzaGluaW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpbmluZyA9IHNoaW5pbmc7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGlzYWJsZWRCeVBhcmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmd0Rm9ybT8uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RTZWN0aW9uPy5pc0Rpc2FibGVkXG4gICAgICAgICAgICB8fCB0aGlzLm5ndE1vZGFsPy5pc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodCB7XG4gICAgQVVUTyA9ICdhdXRvJyxcbiAgICBYUyA9ICd4cycsXG4gICAgTUQgPSAnbWQnLFxuICAgIFNNID0gJ3NtJyxcbiAgICBMRyA9ICdsZycsXG4gICAgWEwgPSAneGwnXG59XG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtoaWRkZW5dPSdzaGluaW5nJ1xuICAgIGNsYXNzPVwie3sgc2hpbmluZyA/ICcnIDogJ2Jsb2NrJyB9fSB7eyBuZ3RTdHlsZS5jb21waWxlKFsnY29sb3IudGV4dCcsICd0ZXh0JywgJ2ZvbnQnLCAnZm9udENhc2UnXSkgfX0gbWItMiBmbGV4XCI+XG4gICAgPG5ndC1zdmcgKm5nSWY9XCJsYWJlbEljb25cIiBjbGFzcz1cIm1yLTEge3tsYWJlbEljb25Db2xvcn19XCIgc3JjPVwie3tsYWJlbEljb259fVwiPjwvbmd0LXN2Zz5cbiAgICB7eyBsYWJlbCB9fTpcblxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwIGZvbnQtYm9sZCB0ZXh0LW1kIG1sLTFcIiAqbmdJZj1cImlzUmVxdWlyZWRcIj4qPC9zcGFuPlxuXG4gICAgPG5ndC1oZWxwZXIgKm5nSWY9XCJoZWxwVGV4dFwiIFtoZWxwVGl0bGVdPVwiaGVscFRpdGxlXCIgW2ljb25Db2xvcl09XCJoZWxwVGV4dENvbG9yXCJcbiAgICAgICAgW2hlbHBlclJldmVyc2VZUG9zaXRpb25dPVwiaGVscGVyUmV2ZXJzZVlQb3NpdGlvblwiIFthdXRvWFJldmVyc2VdPVwiaGVscGVyQXV0b1hSZXZlcnNlXCIgY2xhc3M9XCJtbC0xXCI+XG4gICAgICAgIHt7IGhlbHBUZXh0IH19XG4gICAgPC9uZ3QtaGVscGVyPlxuPC9sYWJlbD5cblxuPGRpdiBbaGlkZGVuXT0nc2hpbmluZycgY2xhc3M9XCJ7eyBuZ3RTdHlsZS5jb21waWxlKFsndGV4dCddKSB9fSB7eyBnZXRTZWxlY3RDbGFzcygpIH19IG5vcm1hbC1jYXNlXCJcbiAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDIuNXJlbTtcIj5cbiAgICA8bmctc2VsZWN0IGNsYXNzPVwiY3VzdG9tXCIgWyhuZ01vZGVsKV09J25hdGl2ZVZhbHVlJyBbbmFtZV09J25hdGl2ZU5hbWUnIFthZGRUYWddPSdhbGxvd0NyZWF0ZSdcbiAgICAgICAgW2FkZFRhZ1RleHRdPVwiY3JlYXRlVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdENyZWF0ZVRleHRcIiBbYmluZExhYmVsXT1cImJpbmRMYWJlbFwiXG4gICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiIFtoaWRlU2VsZWN0ZWRdPVwiaGlkZVNlbGVjdGVkXCIgW3R5cGVhaGVhZF09XCJ0eXBlYWhlYWRcIlxuICAgICAgICBbbm90Rm91bmRUZXh0XT1cIm5vdEZvdW5kVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdE5vdEZvdW5kVGV4dFwiIFtzZWFyY2hhYmxlXT1cInNlYXJjaGFibGVcIlxuICAgICAgICBbc2VhcmNoRm5dPVwiaXRlbVNlYXJjaEZuXCIgW2Rpc2FibGVkXT0nZGlzYWJsZWQoKSB8fCBpc1JlYWRvbmx5JyBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZSAmJiBoYXNTZWxlY3RlZFZhbHVlKClcIlxuICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJjbG9zZU9uU2VsZWN0XCIgW3RyYWNrQnlGbl09XCJ0cmFja0J5XCIgW2xhYmVsRm9ySWRdPVwibGFiZWxGb3JJZFwiXG4gICAgICAgIFt0eXBlVG9TZWFyY2hUZXh0XT1cInR5cGVUb1NlYXJjaFRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RUeXBlVG9TZWFyY2hUZXh0XCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0UGxhY2Vob2xkZXJcIiBbZHJvcGRvd25Qb3NpdGlvbl09XCJkcm9wZG93blBvc2l0aW9uXCJcbiAgICAgICAgW2dyb3VwQnldPVwiZ3JvdXBCeVwiIFtjbGVhckFsbFRleHRdPVwiY2xlYXJBbGxUb29sdGlwIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Q2xlYXJBbGxUb29sdGlwXCJcbiAgICAgICAgW2NsZWFyU2VhcmNoT25BZGRdPVwiY2xlYXJTZWFyY2hPbkFkZFwiIFtiaW5kVmFsdWVdPVwiYmluZFZhbHVlXCIgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gICAgICAgIFtsb2FkaW5nVGV4dF09XCJsb2FkaW5nVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdExvYWRpbmdUZXh0XCIgW21heFNlbGVjdGVkSXRlbXNdPVwibWF4U2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiIFtpdGVtc109XCJuZ1NlbGVjdEl0ZW1zIHwgYXN5bmNcIiBbZ3JvdXBWYWx1ZV09XCJncm91cFZhbHVlXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgIFtjb21wYXJlV2l0aF09J2NvbXBhcmVXaXRoJyBbaW5wdXRBdHRyc109XCJpbnB1dEF0dHJzXCIgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCIgKGNsb3NlKT1cIm9uQ2xvc2UuZW1pdCgpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJvbk5hdGl2ZUNoYW5nZSgkZXZlbnQpXCIgKGNsZWFyKT0nb25DbGVhclNlbGVjdCgpJyAocmVtb3ZlKT0nb25SZW1vdmVTZWxlY3RlZEl0ZW0oJGV2ZW50KSdcbiAgICAgICAgKG9wZW4pPVwib25PcGVuKClcIiAoY2xpY2spPVwid2FzQ2xpY2tlZCA9IHRydWVcIj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9J25ndFNlbGVjdEhlYWRlclRlbXBsYXRlJyBuZy1oZWFkZXItdG1wPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndFNlbGVjdEhlYWRlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIHByLTFcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlwbGUgJiYgIWNhbnRSZW1vdmVJdGVtKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZS1pY29uIHB4LTEgaC1mdWxsIGJvcmRlci1yIG1yLTIge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCddKSB9fSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSdyZW1vdmVJdGVtKCRldmVudCwgaXRlbSknPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm5nLXZhbHVlLWljb24gZmlsbC1jdXJyZW50IHNlbGYtY2VudGVyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuMSAxNy4ybC01LjMtNS4zIDUuMy01LjMtMS44LTEuOC01LjMgNS40LTUuMy01LjMtMS44IDEuNyA1LjMgNS4zLTUuMyA1LjNMNi43IDE5bDUuMy01LjMgNS4zIDUuMyAxLjgtMS44elwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9J25ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGUnIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPSchbmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZScgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtc2VhcmNoPVwic2VhcmNoVGVybVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXgsIHNlYXJjaFRlcm06IHNlYXJjaCB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctc2VsZWN0PlxuPC9kaXY+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9J3NoaW5pbmcnPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJ10pIH19IHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5ndC12YWxpZGF0aW9uIFtjb250cm9sXT1cImZvcm1Db250cm9sXCIgW2NvbnRhaW5lcl09XCJmb3JtQ29udGFpbmVyXCI+PC9uZ3QtdmFsaWRhdGlvbj5cblxuPGlucHV0ICpuZ0lmPSdjb21wb25lbnRSZWFkeScgdHlwZT0naGlkZGVuJyBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj4iXX0=
|
|
1
|
+
import { Component, ContentChild, EventEmitter, Host, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { ControlContainer, NgForm } from '@angular/forms';
|
|
3
|
+
import { NgSelectComponent } from '@ng-select/ng-select';
|
|
4
|
+
import { Observable, Subject } from 'rxjs';
|
|
5
|
+
import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
|
|
6
|
+
import { getEnumFromString } from '../../helpers/enum/enum';
|
|
7
|
+
import { uuid } from '../../helpers/uuid';
|
|
8
|
+
import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
|
|
9
|
+
import { NgtSelectHeaderTmp, NgtSelectOptionSelectedTmp, NgtSelectOptionTmp } from './ngt-select.directive';
|
|
10
|
+
import { delay } from '../../helpers/promise/promise-helper';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../../directives/ngt-stylizable/ngt-stylizable.directive";
|
|
13
|
+
import * as i2 from "@angular/forms";
|
|
14
|
+
import * as i3 from "../../services/http/ngt-translate.service";
|
|
15
|
+
import * as i4 from "../../services/http/ngt-http.service";
|
|
16
|
+
import * as i5 from "../ngt-form/ngt-form.component";
|
|
17
|
+
import * as i6 from "../ngt-section/ngt-section.component";
|
|
18
|
+
import * as i7 from "../ngt-modal/ngt-modal.component";
|
|
19
|
+
import * as i8 from "@angular/common";
|
|
20
|
+
import * as i9 from "@ng-select/ng-select";
|
|
21
|
+
import * as i10 from "../ngt-validation/ngt-validation.component";
|
|
22
|
+
import * as i11 from "../ngt-shining/ngt-shining.component";
|
|
23
|
+
import * as i12 from "../ngt-helper/ngt-helper.component";
|
|
24
|
+
import * as i13 from "../ngt-svg/ngt-svg.component";
|
|
25
|
+
export class NgtSelectComponent extends NgtBaseNgModel {
|
|
26
|
+
constructor(ngtStylizableDirective, formContainer, ngtTranslateService, injector, ngtHttp, changeDetector, ngtForm, ngtSection, ngtModal) {
|
|
27
|
+
super();
|
|
28
|
+
this.ngtStylizableDirective = ngtStylizableDirective;
|
|
29
|
+
this.formContainer = formContainer;
|
|
30
|
+
this.ngtTranslateService = ngtTranslateService;
|
|
31
|
+
this.injector = injector;
|
|
32
|
+
this.ngtHttp = ngtHttp;
|
|
33
|
+
this.changeDetector = changeDetector;
|
|
34
|
+
this.ngtForm = ngtForm;
|
|
35
|
+
this.ngtSection = ngtSection;
|
|
36
|
+
this.ngtModal = ngtModal;
|
|
37
|
+
/** Visual */
|
|
38
|
+
this.label = '';
|
|
39
|
+
this.helpTextColor = 'text-green-500';
|
|
40
|
+
this.shining = false;
|
|
41
|
+
this.loading = false;
|
|
42
|
+
this.loadingText = '';
|
|
43
|
+
this.notFoundText = '';
|
|
44
|
+
this.dropdownPosition = 'auto';
|
|
45
|
+
this.typeToSearchText = '';
|
|
46
|
+
this.clearAllTooltip = '';
|
|
47
|
+
this.placeholder = '';
|
|
48
|
+
this.createText = '';
|
|
49
|
+
this.labelForId = '';
|
|
50
|
+
this.dropdownPanelMinHeight = NgtSelectDropdownPanelHeight.AUTO;
|
|
51
|
+
this.helperAutoXReverse = true;
|
|
52
|
+
this.allowCreate = false;
|
|
53
|
+
this.allowOriginalItemsUnselect = true;
|
|
54
|
+
this.isDisabled = false;
|
|
55
|
+
this.isReadonly = false;
|
|
56
|
+
this.bindLabel = 'name';
|
|
57
|
+
this.items = [];
|
|
58
|
+
this.closeOnSelect = true;
|
|
59
|
+
this.clearable = true;
|
|
60
|
+
this.groupBy = null;
|
|
61
|
+
this.multiple = false;
|
|
62
|
+
this.searchable = true;
|
|
63
|
+
this.clearSearchOnAdd = true;
|
|
64
|
+
this.virtualScroll = true;
|
|
65
|
+
this.guessCompareWith = true;
|
|
66
|
+
this.autoSelectUniqueOption = false;
|
|
67
|
+
/** Validation */
|
|
68
|
+
this.isRequired = false;
|
|
69
|
+
this.onLoadRemoteResource = new EventEmitter();
|
|
70
|
+
this.onSelectedItemRemove = new EventEmitter();
|
|
71
|
+
this.onClear = new EventEmitter();
|
|
72
|
+
this.onClose = new EventEmitter();
|
|
73
|
+
this.nativeName = uuid();
|
|
74
|
+
this.componentReady = false;
|
|
75
|
+
this.originalPerPage = 15;
|
|
76
|
+
this.subscriptions = [];
|
|
77
|
+
this.currentState = {
|
|
78
|
+
filters: {},
|
|
79
|
+
sort: {
|
|
80
|
+
field: '',
|
|
81
|
+
direction: ''
|
|
82
|
+
},
|
|
83
|
+
pagination: {
|
|
84
|
+
count: null,
|
|
85
|
+
page: 1,
|
|
86
|
+
pages: null,
|
|
87
|
+
total: null,
|
|
88
|
+
from: null,
|
|
89
|
+
to: null,
|
|
90
|
+
per_page: null
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
this.compareWith = (a, b) => a === b;
|
|
94
|
+
this.itemSearchFn = (term, item) => {
|
|
95
|
+
if (this.remoteResource) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
let formattedValue;
|
|
99
|
+
if (typeof item == 'string') {
|
|
100
|
+
formattedValue = item;
|
|
101
|
+
}
|
|
102
|
+
if (!this.bindLabel) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
if (typeof item['getAttribute'] == 'function') {
|
|
106
|
+
formattedValue = item.getAttribute([this.bindLabel]);
|
|
107
|
+
}
|
|
108
|
+
else if (typeof item == 'object') {
|
|
109
|
+
formattedValue = item[this.bindLabel];
|
|
110
|
+
}
|
|
111
|
+
return formattedValue
|
|
112
|
+
? formattedValue.toLocaleLowerCase().includes(term.toLocaleLowerCase())
|
|
113
|
+
: null;
|
|
114
|
+
};
|
|
115
|
+
if (this.ngtStylizableDirective) {
|
|
116
|
+
this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
this.ngtStyle = new NgtStylizableService();
|
|
120
|
+
}
|
|
121
|
+
this.ngtStyle.load(this.injector, 'NgtSelect', {
|
|
122
|
+
h: 'h-12',
|
|
123
|
+
text: 'text-sm',
|
|
124
|
+
fontCase: '',
|
|
125
|
+
color: {
|
|
126
|
+
bg: 'bg-white'
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
ngOnInit() {
|
|
131
|
+
if (!this.formContainer) {
|
|
132
|
+
console.error("The element must be inside a <form #form='ngForm'> tag!");
|
|
133
|
+
}
|
|
134
|
+
if (!this.name) {
|
|
135
|
+
console.error("The element must contain a name attribute!");
|
|
136
|
+
}
|
|
137
|
+
if (!this.multiple && this.isRequired) {
|
|
138
|
+
this.clearable = false;
|
|
139
|
+
}
|
|
140
|
+
if (this.multiple) {
|
|
141
|
+
this.closeOnSelect = false;
|
|
142
|
+
}
|
|
143
|
+
setTimeout(() => {
|
|
144
|
+
this.componentReady = true;
|
|
145
|
+
this.initComponentValidation();
|
|
146
|
+
}, 500);
|
|
147
|
+
this.ngSelectItems = new Observable((observer) => {
|
|
148
|
+
this.ngSearchObserver = observer;
|
|
149
|
+
observer.next([]);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
ngAfterViewInit() {
|
|
153
|
+
this.bindInnerInputUniqueId();
|
|
154
|
+
this.bindSubscriptions();
|
|
155
|
+
}
|
|
156
|
+
ngOnChanges(changes) {
|
|
157
|
+
if (changes.isRequired) {
|
|
158
|
+
this.updateValidations();
|
|
159
|
+
}
|
|
160
|
+
if (changes.remoteResource || changes.items) {
|
|
161
|
+
this.initNgSelectItems();
|
|
162
|
+
}
|
|
163
|
+
if (changes.dropdownPanelMinHeight) {
|
|
164
|
+
this.dropdownPanelMinHeight = getEnumFromString(changes.dropdownPanelMinHeight.currentValue, NgtSelectDropdownPanelHeight);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
ngDoCheck() {
|
|
168
|
+
if (!this.hadFirstItemsLoad && this.canLoadItems()) {
|
|
169
|
+
this.hadFirstItemsLoad = true;
|
|
170
|
+
this.initNgSelectItems();
|
|
171
|
+
setTimeout(() => {
|
|
172
|
+
this.replaceShowAddTag();
|
|
173
|
+
this.ngSelectComponent.itemsList.mapSelectedItems();
|
|
174
|
+
if (!this.getElementTitle() || this.getElementTitle() === 'null') {
|
|
175
|
+
this.ngSelectComponent.element.parentElement.parentElement.parentElement.title = '';
|
|
176
|
+
}
|
|
177
|
+
this.originalItems = this.ngSelectComponent.selectedItems?.map((element) => element.value);
|
|
178
|
+
this.changeDetector.detectChanges();
|
|
179
|
+
}, 500);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
ngOnDestroy() {
|
|
183
|
+
this.destroySubscriptions();
|
|
184
|
+
}
|
|
185
|
+
onOpen() {
|
|
186
|
+
const parentElements = document.querySelectorAll('#ngtSelectParentContainer');
|
|
187
|
+
if (this.dropdownPosition == 'auto' && parentElements?.length) {
|
|
188
|
+
const parentContainer = parentElements[parentElements.length - 1];
|
|
189
|
+
this.calculateDropdownPosition(parentContainer);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
removeItem(event, item) {
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
event.stopPropagation();
|
|
195
|
+
return this.ngSelectComponent.clearItem(item);
|
|
196
|
+
}
|
|
197
|
+
refresh() {
|
|
198
|
+
this.initNgSelectItems();
|
|
199
|
+
this.initComponentValidation();
|
|
200
|
+
}
|
|
201
|
+
reset() {
|
|
202
|
+
this.value = undefined;
|
|
203
|
+
this.nativeValue = undefined;
|
|
204
|
+
this.refresh();
|
|
205
|
+
}
|
|
206
|
+
setFocus() {
|
|
207
|
+
setTimeout(() => {
|
|
208
|
+
this.ngSelectComponent.focus();
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
onClearSelect() {
|
|
212
|
+
if (!this.nativeValue) {
|
|
213
|
+
this.markAsPristine();
|
|
214
|
+
}
|
|
215
|
+
this.currentState.filters = {};
|
|
216
|
+
this.onClear.emit();
|
|
217
|
+
}
|
|
218
|
+
onRemoveSelectedItem(item) {
|
|
219
|
+
if (this.cantRemoveItem(item.value)) {
|
|
220
|
+
setTimeout(() => this.ngSelectComponent.select(item));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
this.onSelectedItemRemove.emit(item.value);
|
|
224
|
+
}
|
|
225
|
+
getFilterInputValue() {
|
|
226
|
+
let inputField = this.ngSelectComponent.searchInput ?
|
|
227
|
+
this.ngSelectComponent.searchInput :
|
|
228
|
+
this.ngSelectComponent['searchInput'];
|
|
229
|
+
if (inputField &&
|
|
230
|
+
inputField.nativeElement) {
|
|
231
|
+
return inputField.nativeElement.value;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
search(filters) {
|
|
235
|
+
this.currentState.filters = { ...this.currentState.filters, ...filters };
|
|
236
|
+
if (!this.remoteResource) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
if (this.searchTimeout) {
|
|
240
|
+
clearTimeout(this.searchTimeout);
|
|
241
|
+
}
|
|
242
|
+
this.loading = true;
|
|
243
|
+
this.changeDetector.detectChanges();
|
|
244
|
+
this.searchTimeout = setTimeout(() => {
|
|
245
|
+
this.subscriptions.push(this.ngtHttp
|
|
246
|
+
.get(this.remoteResource, this.currentState.filters, this.currentState.pagination)
|
|
247
|
+
.subscribe((response) => {
|
|
248
|
+
this.loading = false;
|
|
249
|
+
this.bindCompareWithByResponse(response);
|
|
250
|
+
this.ngSearchObserver.next(response.data);
|
|
251
|
+
if (this.canAutoSelectUniqueOption(response)) {
|
|
252
|
+
this.onNativeChange(response.data[0]);
|
|
253
|
+
}
|
|
254
|
+
this.onLoadRemoteResource.emit(response.data);
|
|
255
|
+
this.currentState.pagination = response.meta.pagination;
|
|
256
|
+
this.changeDetector.detectChanges();
|
|
257
|
+
}, (error) => {
|
|
258
|
+
this.loading = false;
|
|
259
|
+
this.changeDetector.detectChanges();
|
|
260
|
+
console.error(error);
|
|
261
|
+
this.ngSearchObserver.next([]);
|
|
262
|
+
}));
|
|
263
|
+
}, 500);
|
|
264
|
+
}
|
|
265
|
+
onNativeChange(value) {
|
|
266
|
+
if (this.hasChangesBetweenModels(this.value, value)) {
|
|
267
|
+
this.value = this.sortSelectedItems(value);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
change(value) {
|
|
271
|
+
if (this.hasChangesBetweenModels(value, this.nativeValue)) {
|
|
272
|
+
if (Array.isArray(value)) {
|
|
273
|
+
value = value.map((val) => val);
|
|
274
|
+
}
|
|
275
|
+
this.nativeValue = this.sortSelectedItems(value);
|
|
276
|
+
if (!value) {
|
|
277
|
+
this.markAsPristine();
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
onScroll({ end }) {
|
|
282
|
+
let currentPerPage = this.currentState.pagination.per_page;
|
|
283
|
+
let maxItensInBackend = this.currentState.pagination.total;
|
|
284
|
+
if (end >= currentPerPage && end <= maxItensInBackend) {
|
|
285
|
+
this.currentState.pagination.per_page = parseInt(this.currentState.pagination.per_page) + this.originalPerPage;
|
|
286
|
+
this.search({});
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
hasSelectedValue() {
|
|
290
|
+
return this.value && JSON.stringify(this.value);
|
|
291
|
+
}
|
|
292
|
+
cantRemoveItem(itemValue) {
|
|
293
|
+
return (!this.allowOriginalItemsUnselect && this.hadPreviousSelection(itemValue))
|
|
294
|
+
|| (this.isAllowedToRemoveFn && !this.isAllowedToRemoveFn(itemValue));
|
|
295
|
+
}
|
|
296
|
+
getSelectClass() {
|
|
297
|
+
let selectClass = this.dropdownPanelMinHeight ? 'ng-select-dropdown-panel-' + this.dropdownPanelMinHeight : 'ng-select-dropdown-panel-auto';
|
|
298
|
+
if (this.disabled()) {
|
|
299
|
+
selectClass += ' select-border-disabled';
|
|
300
|
+
}
|
|
301
|
+
else if (this.formControl && this.formControl.errors && (this.formControl.dirty || (this.formContainer && this.formContainer['submitted']))) {
|
|
302
|
+
selectClass += ' select-border-error';
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
selectClass += ' select-border-normal';
|
|
306
|
+
}
|
|
307
|
+
if (this.multiple) {
|
|
308
|
+
selectClass += ` h-auto ${this.ngtStyle.compile(['color.bg', 'color.text'])}`;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
selectClass += ` ${this.ngtStyle.compile(['h', 'color.bg', 'color.text'])}`;
|
|
312
|
+
}
|
|
313
|
+
return selectClass;
|
|
314
|
+
}
|
|
315
|
+
disabled() {
|
|
316
|
+
return this.isDisabled || this.isDisabledByParent();
|
|
317
|
+
}
|
|
318
|
+
async calculateDropdownPosition(parentContainer) {
|
|
319
|
+
while (!this.componentReady || this.loading || this.ngSelectComponent.showNoItemsFound()) {
|
|
320
|
+
await delay(200);
|
|
321
|
+
if (this.ngSelectComponent.showNoItemsFound() && !this.loading && this.componentReady) {
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
this.changeDetector.detectChanges();
|
|
326
|
+
setTimeout(() => {
|
|
327
|
+
const ngSelectElement = this.ngSelectComponent.element;
|
|
328
|
+
const ngSelectHeight = ngSelectElement.offsetHeight;
|
|
329
|
+
const ngSelectYPosition = ngSelectElement.getBoundingClientRect().y;
|
|
330
|
+
const dropdownHeight = this.ngSelectComponent.dropdownPanel.contentElementRef.nativeElement.offsetHeight;
|
|
331
|
+
const openedSelectHeight = ngSelectHeight + dropdownHeight;
|
|
332
|
+
const parentYPosition = parentContainer.getBoundingClientRect().y;
|
|
333
|
+
const ngSelectYPositionInsideParent = ngSelectYPosition - parentYPosition;
|
|
334
|
+
const openedSelectTotalHeight = openedSelectHeight + ngSelectYPositionInsideParent;
|
|
335
|
+
const parentContainerHeight = parentContainer.clientHeight;
|
|
336
|
+
const fitsOnTop = openedSelectHeight < ngSelectYPositionInsideParent;
|
|
337
|
+
const fitsOnBottom = openedSelectTotalHeight < parentContainerHeight;
|
|
338
|
+
const dropdownPosition = !fitsOnBottom && fitsOnTop
|
|
339
|
+
? 'top'
|
|
340
|
+
: 'bottom';
|
|
341
|
+
this.ngSelectComponent.dropdownPanel['_currentPosition'] = dropdownPosition;
|
|
342
|
+
this.ngSelectComponent.dropdownPanel['_updateDropdownClass'](dropdownPosition);
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
initNgSelectItems() {
|
|
346
|
+
if (this.remoteResource && this.canLoadItems()) {
|
|
347
|
+
this.ngSelectItems = new Observable(observer => {
|
|
348
|
+
this.ngSearchObserver = observer;
|
|
349
|
+
this.search({});
|
|
350
|
+
});
|
|
351
|
+
this.typeahead = new Subject();
|
|
352
|
+
this.subscriptions.push(this.typeahead.subscribe((term) => {
|
|
353
|
+
this.search({ term: term });
|
|
354
|
+
}));
|
|
355
|
+
}
|
|
356
|
+
else if (this.items instanceof Observable) {
|
|
357
|
+
this.ngSelectItems = this.items;
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
if (!this.items) {
|
|
361
|
+
this.items = [];
|
|
362
|
+
}
|
|
363
|
+
if (this.canAutoSelectUniqueOption()) {
|
|
364
|
+
this.onNativeChange(this.items[0]);
|
|
365
|
+
}
|
|
366
|
+
this.ngSelectItems = new Observable((observer) => {
|
|
367
|
+
this.ngSearchObserver = observer;
|
|
368
|
+
observer.next(this.items);
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
initComponentValidation() {
|
|
373
|
+
if (this.formContainer && this.formContainer.control && (this.formControl = this.formContainer.control.get(this.name))) {
|
|
374
|
+
this.formControl = this.formContainer.control.get(this.name);
|
|
375
|
+
this.markAsPristine();
|
|
376
|
+
this.updateValidations();
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
sortSelectedItems(value) {
|
|
380
|
+
if (this.sortSelectedItemsFn && value instanceof Array && value.length > 1) {
|
|
381
|
+
return value.sort((a, b) => this.sortSelectedItemsFn(a, b));
|
|
382
|
+
}
|
|
383
|
+
return value;
|
|
384
|
+
}
|
|
385
|
+
getElementTitle() {
|
|
386
|
+
return this.ngSelectComponent.element.parentElement.parentElement.parentElement.title;
|
|
387
|
+
}
|
|
388
|
+
hasChangesBetweenModels(value, nativeValue) {
|
|
389
|
+
return JSON.stringify(value) !== JSON.stringify(nativeValue);
|
|
390
|
+
}
|
|
391
|
+
updateValidations() {
|
|
392
|
+
if (!this.formControl) {
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
let syncValidators = [];
|
|
396
|
+
if (this.isRequired) {
|
|
397
|
+
syncValidators.push(this.isRequiredValidator());
|
|
398
|
+
}
|
|
399
|
+
setTimeout(() => {
|
|
400
|
+
this.formControl.setValidators(syncValidators);
|
|
401
|
+
this.formControl.updateValueAndValidity();
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
isRequiredValidator() {
|
|
405
|
+
return (control) => {
|
|
406
|
+
if (this.multiple) {
|
|
407
|
+
if (Array.isArray(this.value) && this.value.length > 0) {
|
|
408
|
+
return null;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else if (control.value && JSON.stringify(control.value)) {
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
414
|
+
return { 'required': true };
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
replaceShowAddTag() {
|
|
418
|
+
Object.defineProperty(this.ngSelectComponent, 'showAddTag', {
|
|
419
|
+
get: () => {
|
|
420
|
+
if (!this.ngSelectComponent['searchTerm']) {
|
|
421
|
+
return false;
|
|
422
|
+
}
|
|
423
|
+
const term = this.ngSelectComponent['searchTerm'].toLocaleLowerCase();
|
|
424
|
+
return this.ngSelectComponent.addTag && !this.ngSelectComponent.loading
|
|
425
|
+
&& (!this.hasTermInFilteredItems(term) && (!this.hasTermInSelectedItems(term)
|
|
426
|
+
|| !this.ngSelectComponent.hideSelected && this.ngSelectComponent.isOpen));
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
bindInnerInputUniqueId() {
|
|
431
|
+
const childInputs = this.ngSelectComponent.element.getElementsByTagName('input');
|
|
432
|
+
if (childInputs?.length) {
|
|
433
|
+
const innerInput = childInputs[0];
|
|
434
|
+
innerInput.id = uuid();
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
bindCompareWithByResponse(response) {
|
|
438
|
+
if (this.guessCompareWith) {
|
|
439
|
+
if (response.data?.length && typeof response.data[0]['getApiId'] === 'function') {
|
|
440
|
+
this.compareWith = (a, b) => a.getApiId() == b.getApiId();
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
this.compareWith = (a, b) => a === b;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
hasTermInFilteredItems(term) {
|
|
448
|
+
const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
|
|
449
|
+
if (filteredItems?.length && this.isColoquentResource()) {
|
|
450
|
+
return filteredItems.some((element) => {
|
|
451
|
+
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
452
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
return filteredItems.some((element) => {
|
|
456
|
+
const elementValue = element.value[this.bindLabel];
|
|
457
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
hasTermInSelectedItems(term) {
|
|
461
|
+
const selectedItems = this.ngSelectComponent.selectedItems;
|
|
462
|
+
if (selectedItems?.length && this.isColoquentResource()) {
|
|
463
|
+
return selectedItems.some((element) => {
|
|
464
|
+
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
465
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
return selectedItems.some((element) => {
|
|
469
|
+
const elementValue = element.value[this.bindLabel];
|
|
470
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
hadPreviousSelection(item) {
|
|
474
|
+
return !!this.originalItems?.find(element => this.compareWith(element, item));
|
|
475
|
+
}
|
|
476
|
+
isColoquentResource() {
|
|
477
|
+
const items = this.ngSelectComponent.itemsList.items;
|
|
478
|
+
return items?.length && typeof items[0].value['getAttribute'] === 'function';
|
|
479
|
+
}
|
|
480
|
+
canLoadItems() {
|
|
481
|
+
return this.autoLoad || (!this.disabled() && this.wasClicked);
|
|
482
|
+
}
|
|
483
|
+
canAutoSelectUniqueOption(response) {
|
|
484
|
+
return !this.value && this.autoSelectUniqueOption
|
|
485
|
+
&& ((Array.isArray(response?.data) && response?.data?.length === 1)
|
|
486
|
+
|| (!response && Array.isArray(this.items) && this.items?.length == 1));
|
|
487
|
+
}
|
|
488
|
+
bindSubscriptions() {
|
|
489
|
+
if (this.ngtForm) {
|
|
490
|
+
this.shining = this.ngtForm.isShining();
|
|
491
|
+
this.subscriptions.push(this.ngtForm.onShiningChange.subscribe((shining) => {
|
|
492
|
+
this.shining = shining;
|
|
493
|
+
}));
|
|
494
|
+
}
|
|
495
|
+
this.changeDetector.detectChanges();
|
|
496
|
+
}
|
|
497
|
+
isDisabledByParent() {
|
|
498
|
+
return this.ngtForm?.isDisabled
|
|
499
|
+
|| this.ngtSection?.isDisabled
|
|
500
|
+
|| this.ngtModal?.isDisabled;
|
|
501
|
+
}
|
|
502
|
+
destroySubscriptions() {
|
|
503
|
+
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
504
|
+
this.subscriptions = [];
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
NgtSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtSelectComponent, deps: [{ token: i1.NgtStylizableDirective, optional: true, self: true }, { token: i2.ControlContainer, host: true, optional: true }, { token: i3.NgtTranslateService, optional: true }, { token: i0.Injector }, { token: i4.NgtHttpService }, { token: i0.ChangeDetectorRef }, { token: i5.NgtFormComponent, optional: true, skipSelf: true }, { token: i6.NgtSectionComponent, optional: true, skipSelf: true }, { token: i7.NgtModalComponent, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
508
|
+
NgtSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtSelectComponent, selector: "ngt-select", inputs: { label: "label", labelIcon: "labelIcon", labelIconColor: "labelIconColor", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", shining: "shining", loading: "loading", loadingText: "loadingText", notFoundText: "notFoundText", dropdownPosition: "dropdownPosition", typeToSearchText: "typeToSearchText", clearAllTooltip: "clearAllTooltip", placeholder: "placeholder", createText: "createText", labelForId: "labelForId", dropdownPanelMinHeight: "dropdownPanelMinHeight", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse", name: "name", autoLoad: "autoLoad", allowCreate: "allowCreate", allowOriginalItemsUnselect: "allowOriginalItemsUnselect", isDisabled: "isDisabled", isReadonly: "isReadonly", remoteResource: "remoteResource", hideSelected: "hideSelected", bindLabel: "bindLabel", bindValue: "bindValue", items: "items", inputAttrs: "inputAttrs", closeOnSelect: "closeOnSelect", clearable: "clearable", groupBy: "groupBy", maxSelectedItems: "maxSelectedItems", multiple: "multiple", searchable: "searchable", clearSearchOnAdd: "clearSearchOnAdd", virtualScroll: "virtualScroll", tabIndex: "tabIndex", typeahead: "typeahead", guessCompareWith: "guessCompareWith", autoSelectUniqueOption: "autoSelectUniqueOption", groupValue: "groupValue", trackBy: "trackBy", sortSelectedItemsFn: "sortSelectedItemsFn", isAllowedToRemoveFn: "isAllowedToRemoveFn", isRequired: "isRequired", compareWith: "compareWith" }, outputs: { onLoadRemoteResource: "onLoadRemoteResource", onSelectedItemRemove: "onSelectedItemRemove", onClear: "onClear", onClose: "onClose" }, providers: [
|
|
509
|
+
NgtMakeProvider(NgtSelectComponent)
|
|
510
|
+
], queries: [{ propertyName: "ngtOptionTemplate", first: true, predicate: NgtSelectOptionTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtOptionSelectedTemplate", first: true, predicate: NgtSelectOptionSelectedTmp, descendants: true, read: TemplateRef }, { propertyName: "ngtSelectHeaderTemplate", first: true, predicate: NgtSelectHeaderTmp, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "ngSelectComponent", first: true, predicate: NgSelectComponent, descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label\" [hidden]='shining'\r\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\r\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\r\n {{ label }}:\r\n\r\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\r\n\r\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\r\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\r\n {{ helpText }}\r\n </ngt-helper>\r\n</label>\r\n\r\n<div [hidden]='shining' class=\"{{ ngtStyle.compile(['text']) }} {{ getSelectClass() }} normal-case\"\r\n style=\"min-height: 2.5rem;\">\r\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\r\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\r\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\r\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\r\n [searchFn]=\"itemSearchFn\" [disabled]='disabled() || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\r\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\r\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\r\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\r\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\r\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\r\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\r\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\r\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\" (close)=\"onClose.emit()\"\r\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\r\n (open)=\"onOpen()\" (click)=\"wasClicked = true\">\r\n\r\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\r\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\r\n </ng-template>\r\n </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div class=\"flex w-full items-center pr-1\">\r\n <ng-container *ngIf=\"multiple && !cantRemoveItem(item)\">\r\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\r\n (click)='removeItem($event, item)'>\r\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\r\n </svg>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n\r\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-select>\r\n</div>\r\n\r\n<ng-container *ngIf='shining'>\r\n <div class=\"flex\">\r\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\r\n </div>\r\n</ng-container>\r\n\r\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\r\n\r\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:2.5rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i9.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i9.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i9.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: i10.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i11.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i12.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i13.NgtSvgComponent, selector: "ngt-svg", inputs: ["src", "class"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }], viewProviders: [
|
|
511
|
+
{ provide: ControlContainer, useExisting: NgForm }
|
|
512
|
+
], encapsulation: i0.ViewEncapsulation.None });
|
|
513
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtSelectComponent, decorators: [{
|
|
514
|
+
type: Component,
|
|
515
|
+
args: [{ selector: 'ngt-select', providers: [
|
|
516
|
+
NgtMakeProvider(NgtSelectComponent)
|
|
517
|
+
], viewProviders: [
|
|
518
|
+
{ provide: ControlContainer, useExisting: NgForm }
|
|
519
|
+
], encapsulation: ViewEncapsulation.None, template: "<label *ngIf=\"label\" [hidden]='shining'\r\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\">\r\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\r\n {{ label }}:\r\n\r\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\r\n\r\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\r\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\r\n {{ helpText }}\r\n </ngt-helper>\r\n</label>\r\n\r\n<div [hidden]='shining' class=\"{{ ngtStyle.compile(['text']) }} {{ getSelectClass() }} normal-case\"\r\n style=\"min-height: 2.5rem;\">\r\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' [addTag]='allowCreate'\r\n [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\" [bindLabel]=\"bindLabel\"\r\n [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\r\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\r\n [searchFn]=\"itemSearchFn\" [disabled]='disabled() || isReadonly' [clearable]=\"clearable && hasSelectedValue()\"\r\n [closeOnSelect]=\"closeOnSelect\" [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\"\r\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\r\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\r\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\r\n [clearSearchOnAdd]=\"clearSearchOnAdd\" [bindValue]=\"bindValue\" [virtualScroll]=\"virtualScroll\"\r\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\r\n [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\" [groupValue]=\"groupValue\" [loading]=\"loading\"\r\n [compareWith]='compareWith' [inputAttrs]=\"inputAttrs\" (scroll)=\"onScroll($event)\" (close)=\"onClose.emit()\"\r\n (change)=\"onNativeChange($event)\" (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'\r\n (open)=\"onOpen()\" (click)=\"wasClicked = true\">\r\n\r\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\r\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\r\n </ng-template>\r\n </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div class=\"flex w-full items-center pr-1\">\r\n <ng-container *ngIf=\"multiple && !cantRemoveItem(item)\">\r\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\r\n (click)='removeItem($event, item)'>\r\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\r\n </svg>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n\r\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-select>\r\n</div>\r\n\r\n<ng-container *ngIf='shining'>\r\n <div class=\"flex\">\r\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\r\n </div>\r\n</ng-container>\r\n\r\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\r\n\r\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">", styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px #00000013,0 0 0 3px #007eff1a}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px #0000000f}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px #0000000f;left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:#0000008a;cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:#000000de;padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:2.5rem!important}.select-border-disabled .ng-select-container{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:solid #c53030 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:solid #cbd5e0 1px!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}\n"] }]
|
|
520
|
+
}], ctorParameters: function () { return [{ type: i1.NgtStylizableDirective, decorators: [{
|
|
521
|
+
type: Optional
|
|
522
|
+
}, {
|
|
523
|
+
type: Self
|
|
524
|
+
}] }, { type: i2.ControlContainer, decorators: [{
|
|
525
|
+
type: Optional
|
|
526
|
+
}, {
|
|
527
|
+
type: Host
|
|
528
|
+
}] }, { type: i3.NgtTranslateService, decorators: [{
|
|
529
|
+
type: Optional
|
|
530
|
+
}] }, { type: i0.Injector }, { type: i4.NgtHttpService }, { type: i0.ChangeDetectorRef }, { type: i5.NgtFormComponent, decorators: [{
|
|
531
|
+
type: Optional
|
|
532
|
+
}, {
|
|
533
|
+
type: SkipSelf
|
|
534
|
+
}] }, { type: i6.NgtSectionComponent, decorators: [{
|
|
535
|
+
type: Optional
|
|
536
|
+
}, {
|
|
537
|
+
type: SkipSelf
|
|
538
|
+
}] }, { type: i7.NgtModalComponent, decorators: [{
|
|
539
|
+
type: Optional
|
|
540
|
+
}, {
|
|
541
|
+
type: SkipSelf
|
|
542
|
+
}] }]; }, propDecorators: { ngSelectComponent: [{
|
|
543
|
+
type: ViewChild,
|
|
544
|
+
args: [NgSelectComponent, { static: true }]
|
|
545
|
+
}], ngtOptionTemplate: [{
|
|
546
|
+
type: ContentChild,
|
|
547
|
+
args: [NgtSelectOptionTmp, { read: TemplateRef }]
|
|
548
|
+
}], ngtOptionSelectedTemplate: [{
|
|
549
|
+
type: ContentChild,
|
|
550
|
+
args: [NgtSelectOptionSelectedTmp, { read: TemplateRef }]
|
|
551
|
+
}], ngtSelectHeaderTemplate: [{
|
|
552
|
+
type: ContentChild,
|
|
553
|
+
args: [NgtSelectHeaderTmp, { read: TemplateRef }]
|
|
554
|
+
}], label: [{
|
|
555
|
+
type: Input
|
|
556
|
+
}], labelIcon: [{
|
|
557
|
+
type: Input
|
|
558
|
+
}], labelIconColor: [{
|
|
559
|
+
type: Input
|
|
560
|
+
}], helpTitle: [{
|
|
561
|
+
type: Input
|
|
562
|
+
}], helpText: [{
|
|
563
|
+
type: Input
|
|
564
|
+
}], helpTextColor: [{
|
|
565
|
+
type: Input
|
|
566
|
+
}], shining: [{
|
|
567
|
+
type: Input
|
|
568
|
+
}], loading: [{
|
|
569
|
+
type: Input
|
|
570
|
+
}], loadingText: [{
|
|
571
|
+
type: Input
|
|
572
|
+
}], notFoundText: [{
|
|
573
|
+
type: Input
|
|
574
|
+
}], dropdownPosition: [{
|
|
575
|
+
type: Input
|
|
576
|
+
}], typeToSearchText: [{
|
|
577
|
+
type: Input
|
|
578
|
+
}], clearAllTooltip: [{
|
|
579
|
+
type: Input
|
|
580
|
+
}], placeholder: [{
|
|
581
|
+
type: Input
|
|
582
|
+
}], createText: [{
|
|
583
|
+
type: Input
|
|
584
|
+
}], labelForId: [{
|
|
585
|
+
type: Input
|
|
586
|
+
}], dropdownPanelMinHeight: [{
|
|
587
|
+
type: Input
|
|
588
|
+
}], helperReverseYPosition: [{
|
|
589
|
+
type: Input
|
|
590
|
+
}], helperAutoXReverse: [{
|
|
591
|
+
type: Input
|
|
592
|
+
}], name: [{
|
|
593
|
+
type: Input
|
|
594
|
+
}], autoLoad: [{
|
|
595
|
+
type: Input
|
|
596
|
+
}], allowCreate: [{
|
|
597
|
+
type: Input
|
|
598
|
+
}], allowOriginalItemsUnselect: [{
|
|
599
|
+
type: Input
|
|
600
|
+
}], isDisabled: [{
|
|
601
|
+
type: Input
|
|
602
|
+
}], isReadonly: [{
|
|
603
|
+
type: Input
|
|
604
|
+
}], remoteResource: [{
|
|
605
|
+
type: Input
|
|
606
|
+
}], hideSelected: [{
|
|
607
|
+
type: Input
|
|
608
|
+
}], bindLabel: [{
|
|
609
|
+
type: Input
|
|
610
|
+
}], bindValue: [{
|
|
611
|
+
type: Input
|
|
612
|
+
}], items: [{
|
|
613
|
+
type: Input
|
|
614
|
+
}], inputAttrs: [{
|
|
615
|
+
type: Input
|
|
616
|
+
}], closeOnSelect: [{
|
|
617
|
+
type: Input
|
|
618
|
+
}], clearable: [{
|
|
619
|
+
type: Input
|
|
620
|
+
}], groupBy: [{
|
|
621
|
+
type: Input
|
|
622
|
+
}], maxSelectedItems: [{
|
|
623
|
+
type: Input
|
|
624
|
+
}], multiple: [{
|
|
625
|
+
type: Input
|
|
626
|
+
}], searchable: [{
|
|
627
|
+
type: Input
|
|
628
|
+
}], clearSearchOnAdd: [{
|
|
629
|
+
type: Input
|
|
630
|
+
}], virtualScroll: [{
|
|
631
|
+
type: Input
|
|
632
|
+
}], tabIndex: [{
|
|
633
|
+
type: Input
|
|
634
|
+
}], typeahead: [{
|
|
635
|
+
type: Input
|
|
636
|
+
}], guessCompareWith: [{
|
|
637
|
+
type: Input
|
|
638
|
+
}], autoSelectUniqueOption: [{
|
|
639
|
+
type: Input
|
|
640
|
+
}], groupValue: [{
|
|
641
|
+
type: Input
|
|
642
|
+
}], trackBy: [{
|
|
643
|
+
type: Input
|
|
644
|
+
}], sortSelectedItemsFn: [{
|
|
645
|
+
type: Input
|
|
646
|
+
}], isAllowedToRemoveFn: [{
|
|
647
|
+
type: Input
|
|
648
|
+
}], isRequired: [{
|
|
649
|
+
type: Input
|
|
650
|
+
}], onLoadRemoteResource: [{
|
|
651
|
+
type: Output
|
|
652
|
+
}], onSelectedItemRemove: [{
|
|
653
|
+
type: Output
|
|
654
|
+
}], onClear: [{
|
|
655
|
+
type: Output
|
|
656
|
+
}], onClose: [{
|
|
657
|
+
type: Output
|
|
658
|
+
}], compareWith: [{
|
|
659
|
+
type: Input
|
|
660
|
+
}] } });
|
|
661
|
+
export var NgtSelectDropdownPanelHeight;
|
|
662
|
+
(function (NgtSelectDropdownPanelHeight) {
|
|
663
|
+
NgtSelectDropdownPanelHeight["AUTO"] = "auto";
|
|
664
|
+
NgtSelectDropdownPanelHeight["XS"] = "xs";
|
|
665
|
+
NgtSelectDropdownPanelHeight["MD"] = "md";
|
|
666
|
+
NgtSelectDropdownPanelHeight["SM"] = "sm";
|
|
667
|
+
NgtSelectDropdownPanelHeight["LG"] = "lg";
|
|
668
|
+
NgtSelectDropdownPanelHeight["XL"] = "xl";
|
|
669
|
+
})(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
|
|
670
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LXNlbGVjdC9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixJQUFJLEVBRUosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBOEIsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRixPQUFPLEVBQUUsVUFBVSxFQUFZLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFHNUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFjN0QsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFpR2xELFlBRVcsc0JBQThDLEVBRzlDLGFBQStCLEVBRy9CLG1CQUF3QyxFQUV2QyxRQUFrQixFQUNsQixPQUF1QixFQUN2QixjQUFpQyxFQUdqQyxPQUF5QixFQUd6QixVQUErQixFQUcvQixRQUEyQjtRQUVuQyxLQUFLLEVBQUUsQ0FBQztRQXJCRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBRzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUcvQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBRXZDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBR2pDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBR3pCLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBRy9CLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBaEh2QyxhQUFhO1FBQ0csVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUtuQixrQkFBYSxHQUFXLGdCQUFnQixDQUFDO1FBQ3pDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixxQkFBZ0IsR0FBRyxNQUFNLENBQUM7UUFDMUIscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBQzlCLG9CQUFlLEdBQVcsRUFBRSxDQUFDO1FBQzdCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QiwyQkFBc0IsR0FBaUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDO1FBRXpGLHVCQUFrQixHQUFZLElBQUksQ0FBQztRQUtuQyxnQkFBVyxHQUFzQyxLQUFLLENBQUM7UUFDdkQsK0JBQTBCLEdBQVksSUFBSSxDQUFDO1FBQzNDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUc1QixjQUFTLEdBQVcsTUFBTSxDQUFDO1FBRTNCLFVBQUssR0FBaUMsRUFBRSxDQUFDO1FBRXpDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsWUFBTyxHQUFzQixJQUFJLENBQUM7UUFFbEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUNqQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUc5QixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBTXhELGlCQUFpQjtRQUNELGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFM0IseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEUseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEUsWUFBTyxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZELFlBQU8sR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVqRSxlQUFVLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFJcEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFJL0Isb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBR3hDLGlCQUFZLEdBQUc7WUFDbkIsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsU0FBUyxFQUFFLEVBQUU7YUFDaEI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsRUFBRSxFQUFFLElBQUk7Z0JBQ1IsUUFBUSxFQUFFLElBQUk7YUFDakI7U0FDSixDQUFDO1FBOENjLGdCQUFXLEdBQUcsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBK0luRCxpQkFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLElBQVMsRUFBRSxFQUFFO1lBQzlDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELElBQUksY0FBYyxDQUFDO1lBRW5CLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxFQUFFO2dCQUN6QixjQUFjLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLFVBQVUsRUFBRTtnQkFDM0MsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUN4RDtpQkFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsRUFBRTtnQkFDaEMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekM7WUFFRCxPQUFPLGNBQWM7Z0JBQ2pCLENBQUMsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDZixDQUFDLENBQUM7UUF2TEUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUN6RTthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7U0FDOUM7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRTtZQUMzQyxDQUFDLEVBQUUsTUFBTTtZQUNULElBQUksRUFBRSxTQUFTO1lBQ2YsUUFBUSxFQUFFLEVBQUU7WUFDWixLQUFLLEVBQUU7Z0JBQ0gsRUFBRSxFQUFFLFVBQVU7YUFDakI7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBSU0sUUFBUTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztTQUM1RTtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUMxQjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1NBQzlCO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sZUFBZTtRQUNsQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxPQUFPLENBQUMsc0JBQXNCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztTQUM5SDtJQUNMLENBQUM7SUFFTSxTQUFTO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUU5QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUV6QixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUV6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBRXBELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLE1BQU0sRUFBRTtvQkFDOUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2lCQUN2RjtnQkFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTNGLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1g7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxNQUFNO1FBQ1QsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFOUUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksTUFBTSxJQUFJLGNBQWMsRUFBRSxNQUFNLEVBQUU7WUFDM0QsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFFbEUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFZLEVBQUUsSUFBUztRQUNyQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxRQUFRO1FBQ1gsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxhQUFhO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxJQUFjO1FBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUV0RCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3RCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTFDLElBQ0ksVUFBVTtZQUNWLFVBQVUsQ0FBQyxhQUFhLEVBQzFCO1lBQ0UsT0FBTyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztTQUN6QztJQUNMLENBQUM7SUE0Qk0sTUFBTSxDQUFDLE9BQVk7UUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFFekUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXBDLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLE9BQU87aUJBQ1AsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7aUJBQ2pGLFNBQVMsQ0FDTixDQUFDLFFBQXlCLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBRXJCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTFDLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDekM7Z0JBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTlDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUV4RCxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hDLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FDSixDQUNSLENBQUM7UUFDTixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQUs7UUFDdkIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSztRQUNmLElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbkM7WUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqRCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtTQUNKO0lBQ0wsQ0FBQztJQUVNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRTtRQUNuQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDM0QsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFFM0QsSUFBSSxHQUFHLElBQUksY0FBYyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRTtZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDL0csSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxjQUFjLENBQUMsU0FBYztRQUNoQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2VBQzFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDO1FBRTVJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2pCLFdBQVcsSUFBSSx5QkFBeUIsQ0FBQztTQUM1QzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzSSxXQUFXLElBQUksc0JBQXNCLENBQUM7U0FDekM7YUFBTTtZQUNILFdBQVcsSUFBSSx1QkFBdUIsQ0FBQztTQUMxQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLFdBQVcsSUFBSSxXQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNqRjthQUFNO1lBQ0gsV0FBVyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUMvRTtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQUMsZUFBd0I7UUFDNUQsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUN0RixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuRixNQUFNO2FBQ1Q7U0FDSjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFcEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7WUFDdkQsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztZQUNwRCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVwRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFDekcsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBRTNELE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxNQUFNLDZCQUE2QixHQUFHLGlCQUFpQixHQUFHLGVBQWUsQ0FBQztZQUUxRSxNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixHQUFHLDZCQUE2QixDQUFDO1lBQ25GLE1BQU0scUJBQXFCLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztZQUUzRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsR0FBRyw2QkFBNkIsQ0FBQztZQUNyRSxNQUFNLFlBQVksR0FBRyx1QkFBdUIsR0FBRyxxQkFBcUIsQ0FBQztZQUVyRSxNQUFNLGdCQUFnQixHQUFxQixDQUFDLFlBQVksSUFBSSxTQUFTO2dCQUNqRSxDQUFDLENBQUMsS0FBSztnQkFDUCxDQUFDLENBQUMsUUFBUSxDQUFDO1lBRVQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBRSxHQUFHLGdCQUFnQixDQUFDO1lBRW5GLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFFL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1NBQ0w7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLFlBQVksVUFBVSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNuQzthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDbkI7WUFFRCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QztZQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztnQkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDcEgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFVO1FBQ2hDLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLGVBQWU7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUMxRixDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBSyxFQUFFLFdBQVc7UUFDOUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztTQUNuRDtRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE9BQU8sQ0FBQyxPQUF3QixFQUFFLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNwRCxPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKO2lCQUFNLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdkQsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUU7WUFDeEQsR0FBRyxFQUFFLEdBQUcsRUFBRTtnQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUN2QyxPQUFPLEtBQUssQ0FBQztpQkFDaEI7Z0JBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBRXRFLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPO3VCQUNoRSxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDOzJCQUN0RSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRixJQUFJLFdBQVcsRUFBRSxNQUFNLEVBQUU7WUFDckIsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWxDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRU8seUJBQXlCLENBQUMsUUFBeUI7UUFDdkQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssVUFBVSxFQUFFO2dCQUM3RSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN2RTtpQkFBTTtnQkFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsRDtTQUNKO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQVk7UUFDdkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFFckUsSUFBSSxhQUFhLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO1lBQ3JELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUN2QyxNQUFNLFlBQVksR0FBUyxPQUFPLENBQUMsS0FBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXZFLE9BQU8sWUFBWSxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksQ0FBQztZQUNyRSxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDdkMsTUFBTSxZQUFZLEdBQVMsT0FBTyxDQUFDLEtBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFMUQsT0FBTyxZQUFZLElBQUksWUFBWSxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQVk7UUFDdkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztRQUUzRCxJQUFJLGFBQWEsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUU7WUFDckQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sWUFBWSxHQUFTLE9BQU8sQ0FBQyxLQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFdkUsT0FBTyxZQUFZLElBQUksWUFBWSxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUN2QyxNQUFNLFlBQVksR0FBUyxPQUFPLENBQUMsS0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUxRCxPQUFPLFlBQVksSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBUztRQUNsQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUVyRCxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFVBQVUsQ0FBQztJQUNqRixDQUFDO0lBRU8sWUFBWTtRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLHlCQUF5QixDQUFDLFFBQTBCO1FBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxzQkFBc0I7ZUFDMUMsQ0FDQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQzttQkFDNUQsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FDekUsQ0FBQztJQUNWLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRXhDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUNMLENBQUM7U0FDTDtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVTtlQUN4QixJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVU7ZUFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7OytHQW5wQlEsa0JBQWtCO21HQUFsQixrQkFBa0IsNG5EQVJoQjtRQUNQLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQztLQUN0Qyx5RUFRYSxrQkFBa0IsMkJBQVUsV0FBVyx5RUFDdkMsMEJBQTBCLDJCQUFVLFdBQVcsdUVBQy9DLGtCQUFrQiwyQkFBVSxXQUFXLGdGQUgxQyxpQkFBaUIsMEdDbkRoQyx5b0pBMkU0Riwwb1dEOUJ6RTtRQUNYLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7S0FDckQ7MkZBR1Esa0JBQWtCO2tCQVo5QixTQUFTOytCQUNJLFlBQVksYUFHWDt3QkFDUCxlQUFlLG9CQUFvQjtxQkFDdEMsaUJBQ2M7d0JBQ1gsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtxQkFDckQsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTs7MEJBb0doQyxRQUFROzswQkFBSSxJQUFJOzswQkFHaEIsUUFBUTs7MEJBQUksSUFBSTs7MEJBR2hCLFFBQVE7OzBCQU9SLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUdwQixRQUFROzswQkFBSSxRQUFROzswQkFHcEIsUUFBUTs7MEJBQUksUUFBUTs0Q0FwSDhCLGlCQUFpQjtzQkFBdkUsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ2tCLGlCQUFpQjtzQkFBaEYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ2lCLHlCQUF5QjtzQkFBaEcsWUFBWTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ0MsdUJBQXVCO3NCQUF0RixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHdkMsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUNVLHNCQUFzQjtzQkFBckMsS0FBSztnQkFDVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBR1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsMEJBQTBCO3NCQUF6QyxLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUdVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBRVcsb0JBQW9CO3NCQUFwQyxNQUFNO2dCQUNVLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxPQUFPO3NCQUF2QixNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU07Z0JBMkVTLFdBQVc7c0JBQTFCLEtBQUs7O0FBNGdCVixNQUFNLENBQU4sSUFBWSw0QkFPWDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkLFxyXG4gICAgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3QsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTZWxmLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFNraXBTZWxmLFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERyb3Bkb3duUG9zaXRpb24sIE5nT3B0aW9uLCBOZ1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTmd0QmFzZU5nTW9kZWwsIE5ndE1ha2VQcm92aWRlciB9IGZyb20gJy4uLy4uL2Jhc2Uvbmd0LWJhc2UtbmctbW9kZWwnO1xyXG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcclxuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XHJcbmltcG9ydCB7IE5ndEh0dHBSZXNwb25zZSwgTmd0SHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmd0U2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL25ndC1zZWN0aW9uL25ndC1zZWN0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5ndFNlbGVjdEhlYWRlclRtcCwgTmd0U2VsZWN0T3B0aW9uU2VsZWN0ZWRUbXAsIE5ndFNlbGVjdE9wdGlvblRtcCB9IGZyb20gJy4vbmd0LXNlbGVjdC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBOZ3RNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL25ndC1tb2RhbC9uZ3QtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3Byb21pc2UvcHJvbWlzZS1oZWxwZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ25ndC1zZWxlY3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbmd0LXNlbGVjdC5jb21wb25lbnQuY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0U2VsZWN0Q29tcG9uZW50KVxyXG4gICAgXSxcclxuICAgIHZpZXdQcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxyXG4gICAgXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIE5ndFNlbGVjdENvbXBvbmVudCBleHRlbmRzIE5ndEJhc2VOZ01vZGVsIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgRG9DaGVjayB7XHJcbiAgICBAVmlld0NoaWxkKE5nU2VsZWN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgbmdTZWxlY3RDb21wb25lbnQ6IE5nU2VsZWN0Q29tcG9uZW50O1xyXG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RPcHRpb25UbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RPcHRpb25TZWxlY3RlZFRtcCwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBwdWJsaWMgbmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0SGVhZGVyVG1wLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHB1YmxpYyBuZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKiogVmlzdWFsICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWNvbjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWNvbkNvbG9yOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dENvbG9yOiBzdHJpbmcgPSAndGV4dC1ncmVlbi01MDAnO1xyXG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmcgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZ1RleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIG5vdEZvdW5kVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyB0eXBlVG9TZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhckFsbFRvb2x0aXA6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjcmVhdGVUZXh0OiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEZvcklkOiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBhbmVsTWluSGVpZ2h0OiBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0ID0gTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodC5BVVRPO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlclJldmVyc2VZUG9zaXRpb246IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscGVyQXV0b1hSZXZlcnNlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQmVoYXZpb3IgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYXV0b0xvYWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dDcmVhdGU6IGJvb2xlYW4gfCBQcm9taXNlPGFueT4gfCBGdW5jdGlvbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGFsbG93T3JpZ2luYWxJdGVtc1Vuc2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHJlbW90ZVJlc291cmNlOiBhbnk7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGlkZVNlbGVjdGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIGJpbmRMYWJlbDogc3RyaW5nID0gJ25hbWUnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGJpbmRWYWx1ZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zOiBBcnJheTxhbnk+IHwgT2JzZXJ2YWJsZTxhbnk+ID0gW107XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5wdXRBdHRyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbG9zZU9uU2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGdyb3VwQnk6IHN0cmluZyB8IEZ1bmN0aW9uID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXhTZWxlY3RlZEl0ZW1zOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjbGVhclNlYXJjaE9uQWRkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyB0YWJJbmRleDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgcHVibGljIHR5cGVhaGVhZDogU3ViamVjdDxhbnk+O1xyXG4gICAgQElucHV0KCkgcHVibGljIGd1ZXNzQ29tcGFyZVdpdGg6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGF1dG9TZWxlY3RVbmlxdWVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBncm91cFZhbHVlOiAoZ3JvdXBLZXk6IHN0cmluZywgY2lsZHJlbjogYW55W10pID0+IE9iamVjdDtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyB0cmFja0J5OiAoaXRlbTogYW55KSA9PiBhbnk7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc29ydFNlbGVjdGVkSXRlbXNGbjogKGE6IGFueSwgYjogYW55KSA9PiBhbnk7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNBbGxvd2VkVG9SZW1vdmVGbjogKGE6IGFueSkgPT4gYm9vbGVhbjtcclxuXHJcbiAgICAvKiogVmFsaWRhdGlvbiAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTG9hZFJlbW90ZVJlc291cmNlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNlbGVjdGVkSXRlbVJlbW92ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DbGVhcjogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHVibGljIG5hdGl2ZU5hbWUgPSB1dWlkKCk7XHJcbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xyXG4gICAgcHVibGljIG5nU2VsZWN0SXRlbXM6IGFueTtcclxuICAgIHB1YmxpYyBuYXRpdmVWYWx1ZTogYW55O1xyXG4gICAgcHVibGljIGNvbXBvbmVudFJlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgd2FzQ2xpY2tlZDogYm9vbGVhbjtcclxuXHJcbiAgICBwcml2YXRlIG5nU2VhcmNoT2JzZXJ2ZXI6IE9ic2VydmVyPGFueT47XHJcbiAgICBwcml2YXRlIG9yaWdpbmFsUGVyUGFnZSA9IDE1O1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcbiAgICBwcml2YXRlIG9yaWdpbmFsSXRlbXM6IEFycmF5PGFueT47XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RhdGUgPSB7XHJcbiAgICAgICAgZmlsdGVyczoge30sXHJcbiAgICAgICAgc29ydDoge1xyXG4gICAgICAgICAgICBmaWVsZDogJycsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2luYXRpb246IHtcclxuICAgICAgICAgICAgY291bnQ6IG51bGwsXHJcbiAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgIHBhZ2VzOiBudWxsLFxyXG4gICAgICAgICAgICB0b3RhbDogbnVsbCxcclxuICAgICAgICAgICAgZnJvbTogbnVsbCxcclxuICAgICAgICAgICAgdG86IG51bGwsXHJcbiAgICAgICAgICAgIHBlcl9wYWdlOiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHNlYXJjaFRpbWVvdXQ6IGFueTtcclxuICAgIHByaXZhdGUgaGFkRmlyc3RJdGVtc0xvYWQ6IGJvb2xlYW47XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcclxuICAgICAgICBwdWJsaWMgbmd0U3R5bGl6YWJsZURpcmVjdGl2ZTogTmd0U3R5bGl6YWJsZURpcmVjdGl2ZSxcclxuXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxyXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG5cclxuICAgICAgICBAT3B0aW9uYWwoKVxyXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlLFxyXG5cclxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIG5ndEh0dHA6IE5ndEh0dHBTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cclxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxyXG4gICAgICAgIHByaXZhdGUgbmd0Rm9ybTogTmd0Rm9ybUNvbXBvbmVudCxcclxuXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcclxuICAgICAgICBwcml2YXRlIG5ndFNlY3Rpb246IE5ndFNlY3Rpb25Db21wb25lbnQsXHJcblxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXHJcbiAgICAgICAgcHJpdmF0ZSBuZ3RNb2RhbDogTmd0TW9kYWxDb21wb25lbnRcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcclxuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubmd0U3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0U2VsZWN0Jywge1xyXG4gICAgICAgICAgICBoOiAnaC0xMicsXHJcbiAgICAgICAgICAgIHRleHQ6ICd0ZXh0LXNtJyxcclxuICAgICAgICAgICAgZm9udENhc2U6ICcnLFxyXG4gICAgICAgICAgICBjb2xvcjoge1xyXG4gICAgICAgICAgICAgICAgYmc6ICdiZy13aGl0ZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb21wYXJlV2l0aCA9IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYjtcclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250YWluZXIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVGhlIGVsZW1lbnQgbXVzdCBjb250YWluIGEgbmFtZSBhdHRyaWJ1dGUhXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZU9uU2VsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKTtcclxuICAgICAgICB9LCA1MDApO1xyXG5cclxuICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyID0gb2JzZXJ2ZXI7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoW10pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kSW5uZXJJbnB1dFVuaXF1ZUlkKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYmluZFN1YnNjcmlwdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjaGFuZ2VzLmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNoYW5nZXMucmVtb3RlUmVzb3VyY2UgfHwgY2hhbmdlcy5pdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCA9IGdldEVudW1Gcm9tU3RyaW5nKGNoYW5nZXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodC5jdXJyZW50VmFsdWUsIE5ndFNlbGVjdERyb3Bkb3duUGFuZWxIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5oYWRGaXJzdEl0ZW1zTG9hZCAmJiB0aGlzLmNhbkxvYWRJdGVtcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFkRmlyc3RJdGVtc0xvYWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTaG93QWRkVGFnKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QubWFwU2VsZWN0ZWRJdGVtcygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRFbGVtZW50VGl0bGUoKSB8fCB0aGlzLmdldEVsZW1lbnRUaXRsZSgpID09PSAnbnVsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGl0bGUgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkSXRlbXM/Lm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uT3BlbigpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNuZ3RTZWxlY3RQYXJlbnRDb250YWluZXInKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25Qb3NpdGlvbiA9PSAnYXV0bycgJiYgcGFyZW50RWxlbWVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb250YWluZXIgPSBwYXJlbnRFbGVtZW50c1twYXJlbnRFbGVtZW50cy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRHJvcGRvd25Qb3NpdGlvbihwYXJlbnRDb250YWluZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShldmVudDogRXZlbnQsIGl0ZW06IGFueSkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmNsZWFySXRlbShpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLmluaXROZ1NlbGVjdEl0ZW1zKCk7XHJcbiAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50VmFsaWRhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldCgpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMubmF0aXZlVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEZvY3VzKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2xlYXJTZWxlY3QoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm5hdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFN0YXRlLmZpbHRlcnMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNsZWFyLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25SZW1vdmVTZWxlY3RlZEl0ZW0oaXRlbTogTmdPcHRpb24pIHtcclxuICAgICAgICBpZiAodGhpcy5jYW50UmVtb3ZlSXRlbShpdGVtLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0KGl0ZW0pKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25TZWxlY3RlZEl0ZW1SZW1vdmUuZW1pdChpdGVtLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RmlsdGVySW5wdXRWYWx1ZSgpIHtcclxuICAgICAgICBsZXQgaW5wdXRGaWVsZCA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgP1xyXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlYXJjaElucHV0IDpcclxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoSW5wdXQnXTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpbnB1dEZpZWxkICYmXHJcbiAgICAgICAgICAgIGlucHV0RmllbGQubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXRlbVNlYXJjaEZuID0gKHRlcm06IHN0cmluZywgaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVtb3RlUmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYmluZExhYmVsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtWydnZXRBdHRyaWJ1dGUnXSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlID0gaXRlbS5nZXRBdHRyaWJ1dGUoW3RoaXMuYmluZExhYmVsXSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZSA9IGl0ZW1bdGhpcy5iaW5kTGFiZWxdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFZhbHVlXHJcbiAgICAgICAgICAgID8gZm9ybWF0dGVkVmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtLnRvTG9jYWxlTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgIH07XHJcblxyXG4gICAgcHVibGljIHNlYXJjaChmaWx0ZXJzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzID0geyAuLi50aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLCAuLi5maWx0ZXJzIH07XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZW1vdGVSZXNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RIdHRwXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldCh0aGlzLnJlbW90ZVJlc291cmNlLCB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLCB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogTmd0SHR0cFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRDb21wYXJlV2l0aEJ5UmVzcG9uc2UocmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlci5uZXh0KHJlc3BvbnNlLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbkF1dG9TZWxlY3RVbmlxdWVPcHRpb24ocmVzcG9uc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZShyZXNwb25zZS5kYXRhWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZFJlbW90ZVJlc291cmNlLmVtaXQocmVzcG9uc2UuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbiA9IHJlc3BvbnNlLm1ldGEucGFnaW5hdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIubmV4dChbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25OYXRpdmVDaGFuZ2UodmFsdWUpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscyh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc29ydFNlbGVjdGVkSXRlbXModmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIHRoaXMubmF0aXZlVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHZhbCkgPT4gdmFsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHRoaXMuc29ydFNlbGVjdGVkSXRlbXModmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNjcm9sbCh7IGVuZCB9KSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRQZXJQYWdlID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZTtcclxuICAgICAgICBsZXQgbWF4SXRlbnNJbkJhY2tlbmQgPSB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnRvdGFsO1xyXG5cclxuICAgICAgICBpZiAoZW5kID49IGN1cnJlbnRQZXJQYWdlICYmIGVuZCA8PSBtYXhJdGVuc0luQmFja2VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZSkgKyB0aGlzLm9yaWdpbmFsUGVyUGFnZTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2goe30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2FudFJlbW92ZUl0ZW0oaXRlbVZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKCF0aGlzLmFsbG93T3JpZ2luYWxJdGVtc1Vuc2VsZWN0ICYmIHRoaXMuaGFkUHJldmlvdXNTZWxlY3Rpb24oaXRlbVZhbHVlKSlcclxuICAgICAgICAgICAgfHwgKHRoaXMuaXNBbGxvd2VkVG9SZW1vdmVGbiAmJiAhdGhpcy5pc0FsbG93ZWRUb1JlbW92ZUZuKGl0ZW1WYWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTZWxlY3RDbGFzcygpIHtcclxuICAgICAgICBsZXQgc2VsZWN0Q2xhc3MgPSB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgPyAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLScgKyB0aGlzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQgOiAnbmctc2VsZWN0LWRyb3Bkb3duLXBhbmVsLWF1dG8nO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1kaXNhYmxlZCc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Db250cm9sICYmIHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzICYmICh0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8ICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1lcnJvcic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLW5vcm1hbCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSBgIGgtYXV0byAke3RoaXMubmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLmJnJywgJ2NvbG9yLnRleHQnXSl9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSBgICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnaCcsICdjb2xvci5iZycsICdjb2xvci50ZXh0J10pfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VsZWN0Q2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5pc0Rpc2FibGVkQnlQYXJlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNhbGN1bGF0ZURyb3Bkb3duUG9zaXRpb24ocGFyZW50Q29udGFpbmVyOiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgd2hpbGUgKCF0aGlzLmNvbXBvbmVudFJlYWR5IHx8IHRoaXMubG9hZGluZyB8fCB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNob3dOb0l0ZW1zRm91bmQoKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBkZWxheSgyMDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2hvd05vSXRlbXNGb3VuZCgpICYmICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5jb21wb25lbnRSZWFkeSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmdTZWxlY3RFbGVtZW50ID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5lbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBuZ1NlbGVjdEhlaWdodCA9IG5nU2VsZWN0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IG5nU2VsZWN0WVBvc2l0aW9uID0gbmdTZWxlY3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkhlaWdodCA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZHJvcGRvd25QYW5lbC5jb250ZW50RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbmVkU2VsZWN0SGVpZ2h0ID0gbmdTZWxlY3RIZWlnaHQgKyBkcm9wZG93bkhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFlQb3NpdGlvbiA9IHBhcmVudENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS55O1xyXG4gICAgICAgICAgICBjb25zdCBuZ1NlbGVjdFlQb3NpdGlvbkluc2lkZVBhcmVudCA9IG5nU2VsZWN0WVBvc2l0aW9uIC0gcGFyZW50WVBvc2l0aW9uO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3BlbmVkU2VsZWN0VG90YWxIZWlnaHQgPSBvcGVuZWRTZWxlY3RIZWlnaHQgKyBuZ1NlbGVjdFlQb3NpdGlvbkluc2lkZVBhcmVudDtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVySGVpZ2h0ID0gcGFyZW50Q29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpdHNPblRvcCA9IG9wZW5lZFNlbGVjdEhlaWdodCA8IG5nU2VsZWN0WVBvc2l0aW9uSW5zaWRlUGFyZW50O1xyXG4gICAgICAgICAgICBjb25zdCBmaXRzT25Cb3R0b20gPSBvcGVuZWRTZWxlY3RUb3RhbEhlaWdodCA8IHBhcmVudENvbnRhaW5lckhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duUG9zaXRpb246IERyb3Bkb3duUG9zaXRpb24gPSAhZml0c09uQm90dG9tICYmIGZpdHNPblRvcFxyXG4gICAgICAgICAgICAgICAgPyAndG9wJ1xyXG4gICAgICAgICAgICAgICAgOiAnYm90dG9tJztcclxuXHJcbiAgICAgICAgICAgICg8YW55PnRoaXMubmdTZWxlY3RDb21wb25lbnQuZHJvcGRvd25QYW5lbFsnX2N1cnJlbnRQb3NpdGlvbiddKSA9IGRyb3Bkb3duUG9zaXRpb247XHJcblxyXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmRyb3Bkb3duUGFuZWxbJ191cGRhdGVEcm9wZG93bkNsYXNzJ10oZHJvcGRvd25Qb3NpdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0TmdTZWxlY3RJdGVtcygpIHtcclxuICAgICAgICBpZiAodGhpcy5yZW1vdGVSZXNvdXJjZSAmJiB0aGlzLmNhbkxvYWRJdGVtcygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goe30pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuc3Vic2NyaWJlKCh0ZXJtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB0ZXJtIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkF1dG9TZWxlY3RVbmlxdWVPcHRpb24oKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZSh0aGlzLml0ZW1zWzBdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdEl0ZW1zID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRDb21wb25lbnRWYWxpZGF0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wgJiYgKHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbC5nZXQodGhpcy5uYW1lKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3J0U2VsZWN0ZWRJdGVtcyh2YWx1ZTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5zb3J0U2VsZWN0ZWRJdGVtc0ZuICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgdmFsdWUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc29ydCgoYSwgYikgPT4gdGhpcy5zb3J0U2VsZWN0ZWRJdGVtc0ZuKGEsIGIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEVsZW1lbnRUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscyh2YWx1ZSwgbmF0aXZlVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShuYXRpdmVWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9ucygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN5bmNWYWxpZGF0b3JzID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmlzUmVxdWlyZWRWYWxpZGF0b3IoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1JlcXVpcmVkVmFsaWRhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sLnZhbHVlICYmIEpTT04uc3RyaW5naWZ5KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHsgJ3JlcXVpcmVkJzogdHJ1ZSB9O1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXBsYWNlU2hvd0FkZFRhZygpIHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5uZ1NlbGVjdENvbXBvbmVudCwgJ3Nob3dBZGRUYWcnLCB7XHJcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hUZXJtJ10pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVybSA9IHRoaXMubmdTZWxlY3RDb21wb25lbnRbJ3NlYXJjaFRlcm0nXS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmFkZFRhZyAmJiAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5sb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKCF0aGlzLmhhc1Rlcm1JbkZpbHRlcmVkSXRlbXModGVybSkgJiYgKCF0aGlzLmhhc1Rlcm1JblNlbGVjdGVkSXRlbXModGVybSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXRoaXMubmdTZWxlY3RDb21wb25lbnQuaGlkZVNlbGVjdGVkICYmIHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXNPcGVuKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJpbmRJbm5lcklucHV0VW5pcXVlSWQoKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRJbnB1dHMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XHJcblxyXG4gICAgICAgIGlmIChjaGlsZElucHV0cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlubmVySW5wdXQgPSBjaGlsZElucHV0c1swXTtcclxuXHJcbiAgICAgICAgICAgIGlubmVySW5wdXQuaWQgPSB1dWlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmluZENvbXBhcmVXaXRoQnlSZXNwb25zZShyZXNwb25zZTogTmd0SHR0cFJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3Vlc3NDb21wYXJlV2l0aCkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8ubGVuZ3RoICYmIHR5cGVvZiByZXNwb25zZS5kYXRhWzBdWydnZXRBcGlJZCddID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBhcmVXaXRoID0gKGE6IGFueSwgYjogYW55KSA9PiBhLmdldEFwaUlkKCkgPT0gYi5nZXRBcGlJZCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYXJlV2l0aCA9IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc1Rlcm1JbkZpbHRlcmVkSXRlbXModGVybTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0LmZpbHRlcmVkSXRlbXM7XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm06IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkSXRlbXM7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5sZW5ndGggJiYgdGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLm9yaWdpbmFsSXRlbXM/LmZpbmQoZWxlbWVudCA9PiB0aGlzLmNvbXBhcmVXaXRoKGVsZW1lbnQsIGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzQ29sb3F1ZW50UmVzb3VyY2UoKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5pdGVtcztcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zPy5sZW5ndGggJiYgdHlwZW9mIGl0ZW1zWzBdLnZhbHVlWydnZXRBdHRyaWJ1dGUnXSA9PT0gJ2Z1bmN0aW9uJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbkxvYWRJdGVtcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRvTG9hZCB8fCAoIXRoaXMuZGlzYWJsZWQoKSAmJiB0aGlzLndhc0NsaWNrZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FuQXV0b1NlbGVjdFVuaXF1ZU9wdGlvbihyZXNwb25zZT86IE5ndEh0dHBSZXNwb25zZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy52YWx1ZSAmJiB0aGlzLmF1dG9TZWxlY3RVbmlxdWVPcHRpb25cclxuICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkocmVzcG9uc2U/LmRhdGEpICYmIHJlc3BvbnNlPy5kYXRhPy5sZW5ndGggPT09IDEpXHJcbiAgICAgICAgICAgICAgICB8fCAoIXJlc3BvbnNlICYmIEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykgJiYgdGhpcy5pdGVtcz8ubGVuZ3RoID09IDEpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBiaW5kU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5uZ3RGb3JtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hpbmluZyA9IHRoaXMubmd0Rm9ybS5pc1NoaW5pbmcoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RGb3JtLm9uU2hpbmluZ0NoYW5nZS5zdWJzY3JpYmUoKHNoaW5pbmc6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNEaXNhYmxlZEJ5UGFyZW50KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5ndEZvcm0/LmlzRGlzYWJsZWRcclxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RTZWN0aW9uPy5pc0Rpc2FibGVkXHJcbiAgICAgICAgICAgIHx8IHRoaXMubmd0TW9kYWw/LmlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcclxuICAgIEFVVE8gPSAnYXV0bycsXHJcbiAgICBYUyA9ICd4cycsXHJcbiAgICBNRCA9ICdtZCcsXHJcbiAgICBTTSA9ICdzbScsXHJcbiAgICBMRyA9ICdsZycsXHJcbiAgICBYTCA9ICd4bCdcclxufVxyXG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtoaWRkZW5dPSdzaGluaW5nJ1xyXG4gICAgY2xhc3M9XCJ7eyBzaGluaW5nID8gJycgOiAnYmxvY2snIH19IHt7IG5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci50ZXh0JywgJ3RleHQnLCAnZm9udCcsICdmb250Q2FzZSddKSB9fSBtYi0yIGZsZXhcIj5cclxuICAgIDxuZ3Qtc3ZnICpuZ0lmPVwibGFiZWxJY29uXCIgY2xhc3M9XCJtci0xIHt7bGFiZWxJY29uQ29sb3J9fVwiIHNyYz1cInt7bGFiZWxJY29ufX1cIj48L25ndC1zdmc+XHJcbiAgICB7eyBsYWJlbCB9fTpcclxuXHJcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCBmb250LWJvbGQgdGV4dC1tZCBtbC0xXCIgKm5nSWY9XCJpc1JlcXVpcmVkXCI+Kjwvc3Bhbj5cclxuXHJcbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxyXG4gICAgICAgIFtoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXT1cImhlbHBlclJldmVyc2VZUG9zaXRpb25cIiBbYXV0b1hSZXZlcnNlXT1cImhlbHBlckF1dG9YUmV2ZXJzZVwiIGNsYXNzPVwibWwtMVwiPlxyXG4gICAgICAgIHt7IGhlbHBUZXh0IH19XHJcbiAgICA8L25ndC1oZWxwZXI+XHJcbjwvbGFiZWw+XHJcblxyXG48ZGl2IFtoaWRkZW5dPSdzaGluaW5nJyBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWyd0ZXh0J10pIH19IHt7IGdldFNlbGVjdENsYXNzKCkgfX0gbm9ybWFsLWNhc2VcIlxyXG4gICAgc3R5bGU9XCJtaW4taGVpZ2h0OiAyLjVyZW07XCI+XHJcbiAgICA8bmctc2VsZWN0IGNsYXNzPVwiY3VzdG9tXCIgWyhuZ01vZGVsKV09J25hdGl2ZVZhbHVlJyBbbmFtZV09J25hdGl2ZU5hbWUnIFthZGRUYWddPSdhbGxvd0NyZWF0ZSdcclxuICAgICAgICBbYWRkVGFnVGV4dF09XCJjcmVhdGVUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0Q3JlYXRlVGV4dFwiIFtiaW5kTGFiZWxdPVwiYmluZExhYmVsXCJcclxuICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIiBbaGlkZVNlbGVjdGVkXT1cImhpZGVTZWxlY3RlZFwiIFt0eXBlYWhlYWRdPVwidHlwZWFoZWFkXCJcclxuICAgICAgICBbbm90Rm91bmRUZXh0XT1cIm5vdEZvdW5kVGV4dCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdE5vdEZvdW5kVGV4dFwiIFtzZWFyY2hhYmxlXT1cInNlYXJjaGFibGVcIlxyXG4gICAgICAgIFtzZWFyY2hGbl09XCJpdGVtU2VhcmNoRm5cIiBbZGlzYWJsZWRdPSdkaXNhYmxlZCgpIHx8IGlzUmVhZG9ubHknIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlICYmIGhhc1NlbGVjdGVkVmFsdWUoKVwiXHJcbiAgICAgICAgW2Nsb3NlT25TZWxlY3RdPVwiY2xvc2VPblNlbGVjdFwiIFt0cmFja0J5Rm5dPVwidHJhY2tCeVwiIFtsYWJlbEZvcklkXT1cImxhYmVsRm9ySWRcIlxyXG4gICAgICAgIFt0eXBlVG9TZWFyY2hUZXh0XT1cInR5cGVUb1NlYXJjaFRleHQgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RUeXBlVG9TZWFyY2hUZXh0XCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgbmd0VHJhbnNsYXRlU2VydmljZS5uZ3RTZWxlY3RQbGFjZWhvbGRlclwiIFtkcm9wZG93blBvc2l0aW9uXT1cImRyb3Bkb3duUG9zaXRpb25cIlxyXG4gICAgICAgIFtncm91cEJ5XT1cImdyb3VwQnlcIiBbY2xlYXJBbGxUZXh0XT1cImNsZWFyQWxsVG9vbHRpcCB8fCBuZ3RUcmFuc2xhdGVTZXJ2aWNlLm5ndFNlbGVjdENsZWFyQWxsVG9vbHRpcFwiXHJcbiAgICAgICAgW2NsZWFyU2VhcmNoT25BZGRdPVwiY2xlYXJTZWFyY2hPbkFkZFwiIFtiaW5kVmFsdWVdPVwiYmluZFZhbHVlXCIgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXHJcbiAgICAgICAgW2xvYWRpbmdUZXh0XT1cImxvYWRpbmdUZXh0IHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0U2VsZWN0TG9hZGluZ1RleHRcIiBbbWF4U2VsZWN0ZWRJdGVtc109XCJtYXhTZWxlY3RlZEl0ZW1zXCJcclxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIiBbaXRlbXNdPVwibmdTZWxlY3RJdGVtcyB8IGFzeW5jXCIgW2dyb3VwVmFsdWVdPVwiZ3JvdXBWYWx1ZVwiIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxyXG4gICAgICAgIFtjb21wYXJlV2l0aF09J2NvbXBhcmVXaXRoJyBbaW5wdXRBdHRyc109XCJpbnB1dEF0dHJzXCIgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCIgKGNsb3NlKT1cIm9uQ2xvc2UuZW1pdCgpXCJcclxuICAgICAgICAoY2hhbmdlKT1cIm9uTmF0aXZlQ2hhbmdlKCRldmVudClcIiAoY2xlYXIpPSdvbkNsZWFyU2VsZWN0KCknIChyZW1vdmUpPSdvblJlbW92ZVNlbGVjdGVkSXRlbSgkZXZlbnQpJ1xyXG4gICAgICAgIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsaWNrKT1cIndhc0NsaWNrZWQgPSB0cnVlXCI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nbmd0U2VsZWN0SGVhZGVyVGVtcGxhdGUnIG5nLWhlYWRlci10bXA+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJuZ3RTZWxlY3RIZWFkZXJUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgcHItMVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpcGxlICYmICFjYW50UmVtb3ZlSXRlbShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZy12YWx1ZS1pY29uIHB4LTEgaC1mdWxsIGJvcmRlci1yIG1yLTIge3sgbmd0U3R5bGUuY29tcGlsZShbJ2NvbG9yLnRleHQnLCAndGV4dCddKSB9fSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9J3JlbW92ZUl0ZW0oJGV2ZW50LCBpdGVtKSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJuZy12YWx1ZS1pY29uIGZpbGwtY3VycmVudCBzZWxmLWNlbnRlclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5LjEgMTcuMmwtNS4zLTUuMyA1LjMtNS4zLTEuOC0xLjgtNS4zIDUuNC01LjMtNS4zLTEuOCAxLjcgNS4zIDUuMy01LjMgNS4zTDYuNyAxOWw1LjMtNS4zIDUuMyA1LjMgMS44LTEuOHpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nbmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZScgW25nVGVtcGxhdGVPdXRsZXRdPVwibmd0T3B0aW9uU2VsZWN0ZWRUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nIW5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGUnIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5ndE9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCwgc2VhcmNoVGVybTogc2VhcmNoIH1cIj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1zZWxlY3Q+XHJcbjwvZGl2PlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj0nc2hpbmluZyc+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cInt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJ10pIH19IHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmd0LXZhbGlkYXRpb24gW2NvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbY29udGFpbmVyXT1cImZvcm1Db250YWluZXJcIj48L25ndC12YWxpZGF0aW9uPlxyXG5cclxuPGlucHV0ICpuZ0lmPSdjb21wb25lbnRSZWFkeScgdHlwZT0naGlkZGVuJyBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtuYW1lXT1cIm5hbWVcIiBbdmFsdWVdPVwidmFsdWVcIj4iXX0=
|