mmhglobal-dynamicform 2.0.0-beta.2 → 2.0.0-beta.21
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 +52 -0
- package/esm2020/lib/components/buttonfieldbase.component.mjs +9 -11
- package/esm2020/lib/components/containerfieldbase.component.mjs +2 -2
- package/esm2020/lib/components/datalistingfieldbase.component.mjs +25 -11
- package/esm2020/lib/components/fieldbase.component.mjs +4 -1
- package/esm2020/lib/components/inputfieldbase.component.mjs +1 -4
- package/esm2020/lib/constants/constant.mjs +4 -0
- package/esm2020/lib/embed-components/page-loader/page-loader.component.mjs +14 -0
- package/esm2020/lib/input-error-message/input-error-message.component.mjs +19 -8
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +30 -5
- package/esm2020/lib/services/component-error-handler.service.mjs +59 -29
- package/esm2020/lib/services/main.service.mjs +237 -114
- package/esm2020/lib/services/signalr.service.mjs +126 -0
- package/esm2020/lib/services/zcomponent.service.mjs +12 -10
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +11 -4
- package/esm2020/lib/uibulletin/uibulletin.component.mjs +91 -0
- package/esm2020/lib/uicontainer/uicontainer.component.mjs +3 -3
- package/esm2020/lib/uicontent/uicontent.component.mjs +19 -13
- package/esm2020/lib/uiheader/uiheader.component.mjs +12 -9
- package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +2 -2
- package/esm2020/lib/uipage/uipage.component.mjs +30 -38
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +2 -1
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +3 -3
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +6 -2
- package/esm2020/lib/zform/zform.component.mjs +8 -3
- package/esm2020/lib/zgrid/container/zgrid-container.component.mjs +99 -0
- package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +19 -8
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +5 -13
- package/esm2020/lib/zgrid/zgrid.component.mjs +347 -308
- package/esm2020/lib/zinput-container/zinput-container.component.mjs +6 -12
- package/esm2020/lib/zinput-container/zinput-container.pipe.mjs +2 -2
- package/esm2020/lib/zmfb/zmfb.component.mjs +1 -5
- package/esm2020/lib/znumeric/znumeric.component.mjs +4 -21
- package/esm2020/lib/znumeric/znumeric.component.pipe.mjs +19 -0
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +9 -3
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +4 -15
- package/esm2020/lib/zselectmultiple/zselectmultiple.pipe.mjs +29 -0
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +3 -3
- package/esm2020/lib/ztree/ztree.component.mjs +14 -4
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +10 -12
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +7 -5
- package/esm2020/public-api.mjs +6 -1
- package/fesm2015/mmhglobal-dynamicform.mjs +1394 -819
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +1394 -822
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/components/datalistingfieldbase.component.d.ts +5 -1
- package/lib/components/fieldbase.component.d.ts +1 -0
- package/lib/components/inputfieldbase.component.d.ts +0 -1
- package/lib/constants/constant.d.ts +3 -0
- package/lib/embed-components/page-loader/page-loader.component.d.ts +8 -0
- package/lib/input-error-message/input-error-message.component.d.ts +3 -2
- package/lib/mmhglobal-dynamicform.module.d.ts +87 -82
- package/lib/services/component-error-handler.service.d.ts +8 -3
- package/lib/services/main.service.d.ts +16 -5
- package/lib/services/signalr.service.d.ts +40 -0
- package/lib/services/zcomponent.service.d.ts +1 -1
- package/lib/uibulletin/uibulletin.component.d.ts +37 -0
- package/lib/uicontent/uicontent.component.d.ts +3 -1
- package/lib/uiheader/uiheader.component.d.ts +1 -0
- package/lib/uipage/uipage.component.d.ts +1 -0
- package/lib/zgrid/container/zgrid-container.component.d.ts +28 -0
- package/lib/zgrid/date-range-cell-filter.component.d.ts +5 -1
- package/lib/zgrid/zgrid.component.d.ts +33 -23
- package/lib/zinput-container/zinput-container.component.d.ts +2 -5
- package/lib/zmfb/zmfb.component.d.ts +0 -1
- package/lib/znumeric/znumeric.component.d.ts +1 -1
- package/lib/znumeric/znumeric.component.pipe.d.ts +10 -0
- package/lib/zquerybuilder/zquerybuilder.component.d.ts +1 -0
- package/lib/zselectmultiple/zselectmultiple.component.d.ts +1 -4
- package/lib/zselectmultiple/zselectmultiple.pipe.d.ts +11 -0
- package/lib/ztree/ztree.component.d.ts +3 -0
- package/lib/ztreelist/ztreelist.component.d.ts +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +5 -0
|
@@ -17,15 +17,13 @@ import * as i7 from "@angular/forms";
|
|
|
17
17
|
import * as i8 from "@angular/common";
|
|
18
18
|
import * as i9 from "./zselectmultiple.directive";
|
|
19
19
|
import * as i10 from "@angular/flex-layout/extended";
|
|
20
|
+
import * as i11 from "./zselectmultiple.pipe";
|
|
20
21
|
export class ZselectmultipleComponent extends InputFieldBase {
|
|
21
22
|
constructor(resourceApiService, webApiService, cacheService, compService) {
|
|
22
23
|
super(compService);
|
|
23
24
|
this.resourceApiService = resourceApiService;
|
|
24
25
|
this.webApiService = webApiService;
|
|
25
26
|
this.cacheService = cacheService;
|
|
26
|
-
this.showTooltipsInfoIcon = false;
|
|
27
|
-
this.showTooltipsInfoBySide = false;
|
|
28
|
-
this.tooltipsInfo = null;
|
|
29
27
|
this.items = [];
|
|
30
28
|
this.infinitezData = [];
|
|
31
29
|
this.infiniteSearchText = null;
|
|
@@ -67,15 +65,6 @@ export class ZselectmultipleComponent extends InputFieldBase {
|
|
|
67
65
|
this.isLoading = true;
|
|
68
66
|
super.setupInnerField();
|
|
69
67
|
ZComponentHelper.setSelectMultipleTextValue(this.data.SelectOptions, this);
|
|
70
|
-
this.tooltipsInfo = this.data.TooltipsInfo;
|
|
71
|
-
if (this.tooltipsInfo) {
|
|
72
|
-
if ((this.tooltipsInfo.Icon != null || this.tooltipsInfo.Icon != undefined) && !this.isMobileScreen()) {
|
|
73
|
-
this.showTooltipsInfoIcon = true;
|
|
74
|
-
}
|
|
75
|
-
if (this.tooltipsInfo.SideBySide) {
|
|
76
|
-
this.showTooltipsInfoBySide = true;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
68
|
// [Dropdownlist Multiple] - auto close menu when lose focus.
|
|
80
69
|
if (this.data.AutoClose === false)
|
|
81
70
|
this.autoClose = this.data.AutoClose;
|
|
@@ -450,12 +439,12 @@ export class ZselectmultipleComponent extends InputFieldBase {
|
|
|
450
439
|
}
|
|
451
440
|
}
|
|
452
441
|
ZselectmultipleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZselectmultipleComponent, deps: [{ token: i1.ResourceApiService }, { token: i1.WebApiService }, { token: i1.CacheService }, { token: i2.ZComponentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
453
|
-
ZselectmultipleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZselectmultipleComponent, selector: "app-zselectmultiple", viewQueries: [{ propertyName: "selectComponent", first: true, predicate: ["selectComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && !data.Multiple\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData()\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"true\" \r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"virtual\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-combobox>\r\n <kendo-multiselect *ngIf=\"!isMobileScreen() && data.Multiple && !data.EnableCheckbox\"\r\n class=\"input-field e1tag-style1\"\r\n [data]=\"getItemsData()\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [filterable]=\"true\"\r\n [checkboxes]=\"data.EnableCheckbox\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoMultiSelectItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </kendo-multiselect>\r\n\r\n <kendo-multiselecttree *ngIf=\"!isMobileScreen() && data.Multiple && data.EnableCheckbox\"\r\n class=\"input-field e1tag-style1\"\r\n kendoMultiSelectTreeExpandable\r\n [placeholder]=\"data.PlaceHolder\"\r\n [kendoMultiSelectTreeHierarchyBinding]=\"getItemsData()\"\r\n childrenField=\"items\"\r\n [hasChildren]=\"hasChildren\"\r\n [textField]=\"itemTextField\"\r\n [valueField]=\"itemValueField\"\r\n [valuePrimitive]=\"true\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n [dataItems]=\"data.Value\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [expandOnFilter]=\"filterExpandSettings\"\r\n [filterable]=\"true\"\r\n (filterChange)=\"handleMultiSelectTreeFilter($event)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoMultiSelectTreeNoDataTemplate>\r\n <h4>\r\n <span class=\"k-icon k-i-warning\"></span><br /><br />\r\n No record found.\r\n </h4>\r\n </ng-template>\r\n </kendo-multiselecttree>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-combobox.k-multiselect,:host ::ng-deep kendo-multiselect.k-multiselect{height:auto}:host ::ng-deep kendo-combobox .k-searchbar,:host ::ng-deep kendo-multiselect .k-searchbar{margin:auto}:host ::ng-deep kendo-combobox .k-searchbar+.k-icon,:host ::ng-deep kendo-multiselect .k-searchbar+.k-icon{margin:auto}:host ::ng-deep kendo-combobox .kendo-combobox-item-template,:host ::ng-deep kendo-multiselect .kendo-combobox-item-template{height:var(--input-field-height)!important}:host ::ng-deep kendo-combobox.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-multiselect.disabled>.k-dropdown-wrap{background:transparent}:host ::ng-deep kendo-combobox:focus-within,:host ::ng-deep kendo-multiselect:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}fa-icon.isItemSelected{display:inline-block;width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box!important;font-size:20px;margin-top:10px;margin-bottom:14px;margin-right:unset;margin-inline-end:20px}.gridInlineEdit{--background: transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.divselectmultiple{justify-content:space-between;width:99%;color:#000}\n"], components: [{ type: i3.IonicSelectableComponent, selector: "ionic-selectable", inputs: ["items", "modalCssClass", "modalEnterAnimation", "modalLeaveAnimation", "isConfirmButtonEnabled", "itemValueField", "itemTextField", "groupValueField", "groupTextField", "canSearch", "hasInfiniteScroll", "hasVirtualScroll", "virtualScrollApproxItemHeight", "searchPlaceholder", "placeholder", "searchFailText", "clearButtonText", "addButtonText", "confirmButtonText", "closeButtonText", "shouldFocusSearchbar", "headerColor", "groupColor", "closeButtonSlot", "itemIconSlot", "searchDebounce", "disabledItems", "shouldStoreItemValue", "canSaveItem", "canDeleteItem", "virtualScrollHeaderFn", "isEnabled", "shouldBackdropClose", "hasConfirmButton", "isOnSearchEnabled", "canClear", "isMultiple", "canAddItem"], outputs: ["itemsChange", "onChange", "onSearch", "onSearchFail", "onSearchSuccess", "onInfiniteScroll", "onOpen", "onClose", "onSelect", "onClear", "onSaveItem", "onDeleteItem", "onAddItem"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i6.ComboBoxComponent, selector: "kendo-combobox", inputs: ["focusableId", "allowCustom", "valueNormalizer", "placeholder", "listHeight", "suggest", "clearButton", "disabled", "readonly", "tabindex", "filterable", "data", "value", "valuePrimitive", "popupSettings", "itemDisabled", "tabIndex", "virtual", "size", "rounded", "fillMode", "loading", "textField", "valueField", "iconClass"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoComboBox"] }, { type: i6.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { type: i6.MultiSelectTreeComponent, selector: "kendo-multiselecttree", inputs: ["valueDepth", "placeholder", "listHeight", "disabled", "readonly", "valuePrimitive", "loadOnDemand", "focusableId", "clearButton", "filterable", "checkAll", "hasChildren", "fetchChildren", "isNodeVisible", "itemDisabled", "tagMapper", "tabindex", "size", "rounded", "fillMode", "popupSettings", "checkableSettings", "data", "value", "dataItems", "isNodeExpanded", "textField", "valueField", "loading"], outputs: ["focus", "blur", "open", "opened", "close", "closed", "nodeExpand", "nodeCollapse", "valueChange", "removeTag", "filterChange"], exportAs: ["kendoMultiSelectTree"] }], directives: [{ type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.IonicSelectableItemIconTemplateDirective, selector: "[ionicSelectableItemIconTemplate]" }, { type: i3.IonicSelectableCloseButtonTemplateDirective, selector: "[ionicSelectableCloseButtonTemplate]" }, { type: i3.IonicSelectableTitleTemplateDirective, selector: "[ionicSelectableTitleTemplate]" }, { type: i3.IonicSelectableItemTemplateDirective, selector: "[ionicSelectableItemTemplate]" }, { type: i9.OpenOnFocusDirective, selector: "kendo-combobox[openOnFocus]", inputs: ["openOnFocus"] }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.FilterDirective, selector: "[kendoDropDownFilter]", inputs: ["filterable", "data", "kendoDropDownFilter"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i6.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { type: i6.DropDownTreesExpandDirective, selector: "[kendoDropDownTreeExpandable], [kendoMultiSelectTreeExpandable]", inputs: ["isNodeExpanded"] }, { type: i6.MultiSelectTreeHierarchyBindingDirective, selector: "[kendoMultiSelectTreeHierarchyBinding]", inputs: ["kendoMultiSelectTreeHierarchyBinding"] }, { type: i6.NoDataTemplateDirective, selector: "[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]" }] });
|
|
442
|
+
ZselectmultipleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZselectmultipleComponent, selector: "app-zselectmultiple", viewQueries: [{ propertyName: "selectComponent", first: true, predicate: ["selectComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && !data.Multiple\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"virtual\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-combobox>\r\n <kendo-multiselect *ngIf=\"!isMobileScreen() && data.Multiple && !data.EnableCheckbox\"\r\n class=\"input-field e1tag-style1\"\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [filterable]=\"true\"\r\n [checkboxes]=\"data.EnableCheckbox\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoMultiSelectItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </kendo-multiselect>\r\n\r\n <kendo-multiselecttree *ngIf=\"!isMobileScreen() && data.Multiple && data.EnableCheckbox\"\r\n class=\"input-field e1tag-style1\"\r\n kendoMultiSelectTreeExpandable\r\n [placeholder]=\"data.PlaceHolder\"\r\n [kendoMultiSelectTreeHierarchyBinding]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n childrenField=\"items\"\r\n [hasChildren]=\"hasChildren\"\r\n [textField]=\"itemTextField\"\r\n [valueField]=\"itemValueField\"\r\n [valuePrimitive]=\"true\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n [dataItems]=\"data.Value\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [expandOnFilter]=\"filterExpandSettings\"\r\n [filterable]=\"true\"\r\n (filterChange)=\"handleMultiSelectTreeFilter($event)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoMultiSelectTreeNoDataTemplate>\r\n <h4>\r\n <span class=\"k-icon k-i-warning\"></span><br /><br />\r\n No record found.\r\n </h4>\r\n </ng-template>\r\n </kendo-multiselecttree>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-combobox.k-multiselect,:host ::ng-deep kendo-multiselect.k-multiselect{height:auto}:host ::ng-deep kendo-combobox .k-searchbar,:host ::ng-deep kendo-multiselect .k-searchbar{margin:auto}:host ::ng-deep kendo-combobox .k-searchbar+.k-icon,:host ::ng-deep kendo-multiselect .k-searchbar+.k-icon{margin:auto}:host ::ng-deep kendo-combobox .kendo-combobox-item-template,:host ::ng-deep kendo-multiselect .kendo-combobox-item-template{height:var(--input-field-height)!important}:host ::ng-deep kendo-combobox.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-multiselect.disabled>.k-dropdown-wrap{background:transparent}:host ::ng-deep kendo-combobox:focus-within,:host ::ng-deep kendo-multiselect:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}fa-icon.isItemSelected{display:inline-block;width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box!important;font-size:20px;margin-top:10px;margin-bottom:14px;margin-right:unset;margin-inline-end:20px}.gridInlineEdit{--background: transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.divselectmultiple{justify-content:space-between;width:99%;color:#000}\n"], components: [{ type: i3.IonicSelectableComponent, selector: "ionic-selectable", inputs: ["items", "modalCssClass", "modalEnterAnimation", "modalLeaveAnimation", "isConfirmButtonEnabled", "itemValueField", "itemTextField", "groupValueField", "groupTextField", "canSearch", "hasInfiniteScroll", "hasVirtualScroll", "virtualScrollApproxItemHeight", "searchPlaceholder", "placeholder", "searchFailText", "clearButtonText", "addButtonText", "confirmButtonText", "closeButtonText", "shouldFocusSearchbar", "headerColor", "groupColor", "closeButtonSlot", "itemIconSlot", "searchDebounce", "disabledItems", "shouldStoreItemValue", "canSaveItem", "canDeleteItem", "virtualScrollHeaderFn", "isEnabled", "shouldBackdropClose", "hasConfirmButton", "isOnSearchEnabled", "canClear", "isMultiple", "canAddItem"], outputs: ["itemsChange", "onChange", "onSearch", "onSearchFail", "onSearchSuccess", "onInfiniteScroll", "onOpen", "onClose", "onSelect", "onClear", "onSaveItem", "onDeleteItem", "onAddItem"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i6.ComboBoxComponent, selector: "kendo-combobox", inputs: ["focusableId", "allowCustom", "valueNormalizer", "placeholder", "listHeight", "suggest", "clearButton", "disabled", "readonly", "tabindex", "filterable", "data", "value", "valuePrimitive", "popupSettings", "itemDisabled", "tabIndex", "virtual", "size", "rounded", "fillMode", "loading", "textField", "valueField", "iconClass"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoComboBox"] }, { type: i6.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "tabindex", "disabled", "readonly", "filterable", "listHeight", "clearButton", "tagMapper", "allowCustom", "valueNormalizer", "data", "value", "tabIndex", "size", "rounded", "fillMode", "placeholder", "itemDisabled", "checkboxes", "virtual", "popupSettings", "valuePrimitive", "loading", "valueField", "textField"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { type: i6.MultiSelectTreeComponent, selector: "kendo-multiselecttree", inputs: ["valueDepth", "placeholder", "listHeight", "disabled", "readonly", "valuePrimitive", "loadOnDemand", "focusableId", "clearButton", "filterable", "checkAll", "hasChildren", "fetchChildren", "isNodeVisible", "itemDisabled", "tagMapper", "tabindex", "size", "rounded", "fillMode", "popupSettings", "checkableSettings", "data", "value", "dataItems", "isNodeExpanded", "textField", "valueField", "loading"], outputs: ["focus", "blur", "open", "opened", "close", "closed", "nodeExpand", "nodeCollapse", "valueChange", "removeTag", "filterChange"], exportAs: ["kendoMultiSelectTree"] }], directives: [{ type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.IonicSelectableItemIconTemplateDirective, selector: "[ionicSelectableItemIconTemplate]" }, { type: i3.IonicSelectableCloseButtonTemplateDirective, selector: "[ionicSelectableCloseButtonTemplate]" }, { type: i3.IonicSelectableTitleTemplateDirective, selector: "[ionicSelectableTitleTemplate]" }, { type: i3.IonicSelectableItemTemplateDirective, selector: "[ionicSelectableItemTemplate]" }, { type: i9.OpenOnFocusDirective, selector: "kendo-combobox[openOnFocus]", inputs: ["openOnFocus"] }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.FilterDirective, selector: "[kendoDropDownFilter]", inputs: ["filterable", "data", "kendoDropDownFilter"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i6.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { type: i6.DropDownTreesExpandDirective, selector: "[kendoDropDownTreeExpandable], [kendoMultiSelectTreeExpandable]", inputs: ["isNodeExpanded"] }, { type: i6.MultiSelectTreeHierarchyBindingDirective, selector: "[kendoMultiSelectTreeHierarchyBinding]", inputs: ["kendoMultiSelectTreeHierarchyBinding"] }, { type: i6.NoDataTemplateDirective, selector: "[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]" }], pipes: { "async": i8.AsyncPipe, "zselectTranslationParser": i11.ZSelectTranslationParser } });
|
|
454
443
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZselectmultipleComponent, decorators: [{
|
|
455
444
|
type: Component,
|
|
456
|
-
args: [{ selector: "app-zselectmultiple", template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && !data.Multiple\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData()\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"true\"
|
|
445
|
+
args: [{ selector: "app-zselectmultiple", template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && !data.Multiple\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"virtual\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-combobox>\r\n <kendo-multiselect *ngIf=\"!isMobileScreen() && data.Multiple && !data.EnableCheckbox\"\r\n class=\"input-field e1tag-style1\"\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [filterable]=\"true\"\r\n [checkboxes]=\"data.EnableCheckbox\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoMultiSelectItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </kendo-multiselect>\r\n\r\n <kendo-multiselecttree *ngIf=\"!isMobileScreen() && data.Multiple && data.EnableCheckbox\"\r\n class=\"input-field e1tag-style1\"\r\n kendoMultiSelectTreeExpandable\r\n [placeholder]=\"data.PlaceHolder\"\r\n [kendoMultiSelectTreeHierarchyBinding]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n childrenField=\"items\"\r\n [hasChildren]=\"hasChildren\"\r\n [textField]=\"itemTextField\"\r\n [valueField]=\"itemValueField\"\r\n [valuePrimitive]=\"true\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n [dataItems]=\"data.Value\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [expandOnFilter]=\"filterExpandSettings\"\r\n [filterable]=\"true\"\r\n (filterChange)=\"handleMultiSelectTreeFilter($event)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"{'disabled' : (!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)}\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\">\r\n <ng-template kendoMultiSelectTreeNoDataTemplate>\r\n <h4>\r\n <span class=\"k-icon k-i-warning\"></span><br /><br />\r\n No record found.\r\n </h4>\r\n </ng-template>\r\n </kendo-multiselecttree>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-combobox.k-multiselect,:host ::ng-deep kendo-multiselect.k-multiselect{height:auto}:host ::ng-deep kendo-combobox .k-searchbar,:host ::ng-deep kendo-multiselect .k-searchbar{margin:auto}:host ::ng-deep kendo-combobox .k-searchbar+.k-icon,:host ::ng-deep kendo-multiselect .k-searchbar+.k-icon{margin:auto}:host ::ng-deep kendo-combobox .kendo-combobox-item-template,:host ::ng-deep kendo-multiselect .kendo-combobox-item-template{height:var(--input-field-height)!important}:host ::ng-deep kendo-combobox.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-multiselect.disabled>.k-dropdown-wrap{background:transparent}:host ::ng-deep kendo-combobox:focus-within,:host ::ng-deep kendo-multiselect:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}fa-icon.isItemSelected{display:inline-block;width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box!important;font-size:20px;margin-top:10px;margin-bottom:14px;margin-right:unset;margin-inline-end:20px}.gridInlineEdit{--background: transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.divselectmultiple{justify-content:space-between;width:99%;color:#000}\n"] }]
|
|
457
446
|
}], ctorParameters: function () { return [{ type: i1.ResourceApiService }, { type: i1.WebApiService }, { type: i1.CacheService }, { type: i2.ZComponentService }]; }, propDecorators: { selectComponent: [{
|
|
458
447
|
type: ViewChild,
|
|
459
448
|
args: ["selectComponent"]
|
|
460
449
|
}] } });
|
|
461
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pzZWxlY3RtdWx0aXBsZS96c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenNlbGVjdG11bHRpcGxlL3pzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBaUIsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBSy9FLDhCQUE4QjtBQUM5QixPQUFPLEVBQTRCLEVBQUUsRUFBUSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUVPLGdCQUFnQixFQUNHLG9CQUFvQixFQUVwRCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7Ozs7O0FBVXhFLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxjQUFjO0lBbUMxRCxZQUNVLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixZQUEwQixFQUNsQyxXQUE4QjtRQUM1QixLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7UUFKWix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBbkM3Qix5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLGlCQUFZLEdBQTJCLElBQUksQ0FBQztRQUVuRCxV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QyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBRTNFLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3ZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN0QyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUUxQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNqQjthQUNGO1lBRUQsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQVksRUFBRSxZQUFvQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDOztzSEFyZ0JVLHdCQUF3QjswR0FBeEIsd0JBQXdCLHNNQzVCckMsK3VQQXFIQTs0RkR6RmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHFCQUFxQjtnTUFLRCxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4vKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50IH0gZnJvbSBcImlvbmljLXNlbGVjdGFibGVcIjtcclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUsIG9mLCBmcm9tIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBkZWxheSwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBSZXNvdXJjZUFwaVNlcnZpY2UsIFdlYkFwaVNlcnZpY2UsIENhY2hlU2VydmljZSwgQ2xpY2thYmxlSWNvbnMsXHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpTZWxlY3RNdWx0aXBsZVRlbXBsYXRlUGFyYW1zLCBaU2VsZWN0UG9zdEFwaVBhcmFtcywgelNlbGVjdE11bHRpcGxlUGFyYW1zLFxyXG4gIFRvb2x0aXBzSW5mb1Byb3BlcnRpZXNcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IElucHV0RmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHBhbmRTZXR0aW5ncyB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5pbXBvcnQgeyBEcm9wRG93bkZpbHRlclNldHRpbmdzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRyb3Bkb3duc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpzZWxlY3RtdWx0aXBsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWnNlbGVjdG11bHRpcGxlQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChcInNlbGVjdENvbXBvbmVudFwiKSBzZWxlY3RDb21wb25lbnQ6IElvbmljU2VsZWN0YWJsZUNvbXBvbmVudDtcclxuXHJcbiAgcHVibGljIHNob3dUb29sdGlwc0luZm9JY29uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dUb29sdGlwc0luZm9CeVNpZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdG9vbHRpcHNJbmZvOiBUb29sdGlwc0luZm9Qcm9wZXJ0aWVzID0gbnVsbDtcclxuICBpY29uTGlzdDogQ2xpY2thYmxlSWNvbnNbXTtcclxuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIG1vZGVsekRhdGE6IEFycmF5PGFueT47XHJcbiAgaW5maW5pdGV6RGF0YTogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGluZmluaXRlU2VhcmNoVGV4dCA9IG51bGw7XHJcbiAgLy8gc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdG9nZ2xlU2VsZWN0YWJsZSA9IHRydWU7XHJcbiAgaXRlbVZhbHVlRmllbGQ6IHN0cmluZyA9IG51bGw7XHJcbiAgaXRlbVRleHRGaWVsZDogc3RyaW5nID0gbnVsbDtcclxuICBpdGVtRGF0YUZpZWxkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGl0ZW1UZW1wbGF0ZSA9IFwie3tpdGVtW2l0ZW1UZXh0RmllbGRdfX1cIjtcclxuICBpbmZpbml0ZVNjcm9sbFBhZ2VObyA9IDA7XHJcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcclxuICBwcml2YXRlIGRlYm91bmNlU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgYWxsb3dDdXN0b21WYWx1ZSA9IGZhbHNlO1xyXG4gIGF1dG9DbG9zZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHBhcnNlZEl0ZW1zRGF0YTogYW55W107XHJcbiAgZGF0YUluZm86IHt9ID0ge1xyXG4gICAgXCJpdGVtc1Jlc291cmNlVVJMXCI6IFwiXCIsXHJcbiAgICBcIm9wdGlvbkZpbHRlcnNcIjogXCJcIixcclxuICAgIFwidG90YWxDb3VudFwiOiAwXHJcbiAgfTtcclxuXHJcbiAgLy8gcHJpdmF0ZSBsb2FkSW5maW5pdGVEYXRhU3ViOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgZmlsdGVyU2V0dGluZ3M6IERyb3BEb3duRmlsdGVyU2V0dGluZ3MgPSB7XHJcbiAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcclxuICAgIG9wZXJhdG9yOiBcImNvbnRhaW5zXCIsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIGNvbXBTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZVxyXG4gICkgeyBzdXBlcihjb21wU2VydmljZSkgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIC8vIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgLy8gICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoaXMuZGVib3VuY2VTdWIpIHtcclxuICAgICAgdGhpcy5kZWJvdW5jZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpcnR1YWw6IGFueSA9IHtcclxuICAgIGl0ZW1IZWlnaHQ6IDI4LFxyXG4gICAgcGFnZVNpemU6IDE1XHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBzdXBlci5zZXR1cElubmVyRmllbGQoKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0U2VsZWN0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMudG9vbHRpcHNJbmZvID0gdGhpcy5kYXRhLlRvb2x0aXBzSW5mbztcclxuICAgIGlmICh0aGlzLnRvb2x0aXBzSW5mbykge1xyXG4gICAgICBpZiAoKHRoaXMudG9vbHRpcHNJbmZvLkljb24gIT0gbnVsbCB8fCB0aGlzLnRvb2x0aXBzSW5mby5JY29uICE9IHVuZGVmaW5lZCkgJiYgIXRoaXMuaXNNb2JpbGVTY3JlZW4oKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd1Rvb2x0aXBzSW5mb0ljb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBzSW5mby5TaWRlQnlTaWRlKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VG9vbHRpcHNJbmZvQnlTaWRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFtEcm9wZG93bmxpc3QgTXVsdGlwbGVdIC0gYXV0byBjbG9zZSBtZW51IHdoZW4gbG9zZSBmb2N1cy5cclxuICAgIGlmICh0aGlzLmRhdGEuQXV0b0Nsb3NlID09PSBmYWxzZSkgdGhpcy5hdXRvQ2xvc2UgPSB0aGlzLmRhdGEuQXV0b0Nsb3NlO1xyXG5cclxuICAgIC8vIEhhbmRsZSBDbGlja2FibGUgSWNvbnNcclxuICAgIHRoaXMuaWNvbkxpc3QgPSB0aGlzLmRhdGEuQ2xpY2thYmxlSWNvbnM7XHJcbiAgICBpZiAodGhpcy5pY29uTGlzdCkge1xyXG4gICAgICBpZiAodGhpcy5pY29uTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5pY29uTGlzdC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChpLlRvb2x0aXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpLlRvb2x0aXAgPSBcIlwiO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaS5Ub29sdGlwID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGkuVG9vbHRpcCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBEZWZhdWx0IHBvc2l0aW9uIHRvcC4gcmlnaHQgfCBib3R0b20gfCB0b3AgfCBsZWZ0XHJcbiAgICAgICAgICBpZiAoaS5Qb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGkuUG9zaXRpb24gPSBcInRvcFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsbG93Q3VzdG9tVmFsdWUgPSB0aGlzLmRhdGEuQWxsb3dDdXN0b21WYWx1ZSB8fCBmYWxzZTsgLy8gQWxsb3cgZW50ZXIgdGV4dCBpbiBkcm9wZG93bmJveFxyXG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICBjb25zdCB6TW9kZWwgPSB0aGlzLmdyb3VwLnpNb2RlbDtcclxuXHJcbiAgICAvKlxyXG4gICAgICogNCBTdHlsZXMgb2YgZGVjbGFyZSB0aGUgY29tcG9uZW5077+9cyBvcHRpb24gbGlzdCBkYXRhIHNvdXJjZS5cclxuICAgICAqIFN0eWxlICMxIC0gRmllbGQuU2VsZWN0T3B0aW9ucyBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIG9iamVjdCB0aGF0IGNvbnRhaW4gdGV4dCBhbmQgdmFsdWUuXHJcbiAgICAgKiBTdHlsZSAjMiAtIEZpZWxkLlNlbGVjdE9wdGlvbnMgZGVmaW5lZCBhcyBhIHBoYXNlIGxpa2Ug77+9aXRlbS5JZCBhcyBpdGVtLk5hbWUgZm9yIGl0ZW0gaW4gZ3JvdXAuekRhdGEuUHJvamVjdE9wdGlvbnPvv70uXHJcbiAgICAgKiBTdHlsZSAjMyAtIEZpZWxkLk9wdGlvblJlc291cmNlVVJMIGRlZmluZWQgdGhlIG5hbWUgb2YgcmVzb3VyY2Ugc2VydmVyIGFwaS5cclxuICAgICAqIFN0eWxlICM0IC0gRmllbGQuSW5maW5pdGVTY3JvbGwkIGRlZmluZWQgdGhlIG1ldGhvZCBuYW1lIGFzIO+/vWdyb3VwLmdldE1vcmVEYXRhQXNTY3JvbGzvv70uXHJcbiAgICAgKi9cclxuXHJcbiAgICBpZiAoZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCAmJiBkYXRhLkluZmluaXRlU2Nyb2xsJCkge1xyXG4gICAgICAvLyB3aGVuIGluZmluaXRpZSBzY3JvbGxcclxuICAgICAgbGV0IHJlY29yZElkID0gbnVsbDtcclxuICAgICAgaWYgKHpNb2RlbCAmJiB6TW9kZWxbZmllbGRWYWx1ZV0pIHtcclxuICAgICAgICAvLyBnZXQgek1vZGVsIFZhbHVlXHJcbiAgICAgICAgcmVjb3JkSWQgPSB6TW9kZWxbZmllbGRWYWx1ZV0udG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGdldHpEYXRhRm9yek1vZGVsJDogT2JzZXJ2YWJsZTxhbnk+ID0gWkNvbXBvbmVudEhlbHBlci5nZXRJbmZpbml0ZURhdGEobnVsbCwgJycsIHRoaXMsIHJlY29yZElkKTtcclxuICAgICAgaWYgKGdldHpEYXRhRm9yek1vZGVsJCkge1xyXG4gICAgICAgIGdldHpEYXRhRm9yek1vZGVsJC5zdWJzY3JpYmUoKHpkYXRhKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLk5hbWUsICcgLSBpbml0aWFsIHpEYXRhIGxvYWQ6ICcsIHpkYXRhKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucyh0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlcihudWxsLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFN0eWxlICMxLCAjMiwgIzNcclxuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBkYXRhLklzUmVxdWlyZWQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YS5PcHRpb25SZXNvdXJjZVVSTCkge1xyXG4gICAgICAgIHRoaXMubGF6eUxvYWREYXRhT3B0aW9ucygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uRGF0YSA9IHJlcy5kYXRhU2V0ID8gcmVzLmRhdGFTZXQgOiByZXM7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbkRhdGEgJiYgb3B0aW9uRGF0YS5sZW5ndGggPT09IDEgJiYgIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0ZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdEZpcnN0T3B0aW9uKGlzUmVxdWlyZWQsIG9wdGlvbkRhdGFbMF0sIGZpZWxkVmFsdWUsIHpNb2RlbC5JZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSAmJiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICAgICAgLy9za2lwIGV2YWwgaWYgc2VsZWN0b3B0aW9ucyBpcyBleGlzdFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbkRhdGEgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5pdGVtRGF0YUZpZWxkKTtcclxuICAgICAgICAgIC8vIGFwcGVuZCBkYXRhIHZpYSB0aW1lb3V0IGFmdGVyIGRhdGEgaXMgbG9hZGVkLlxyXG4gICAgICAgICAgaWYgKG9wdGlvbkRhdGEgJiYgb3B0aW9uRGF0YS5sZW5ndGggPT09IDEgJiYgIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0ZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNDb21wb25lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICB0aGlzQ29tcG9uZW50LmF1dG9TZWxlY3RGaXJzdE9wdGlvbihpc1JlcXVpcmVkLCBvcHRpb25EYXRhWzBdLCBmaWVsZFZhbHVlLCB0aGlzQ29tcG9uZW50Lmdyb3VwLnpNb2RlbC5JZCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvIHNlbGVjdCBmaXJzdCBvcHRpb24gKGlmIHJlcXVpcmVkICYgb25seSAxIG9wdGlvbilcclxuICBwcml2YXRlIGF1dG9TZWxlY3RGaXJzdE9wdGlvbihyZXF1aXJlZDogYm9vbGVhbiwgZGF0YTogYW55LCB6TW9kZWxQcm9wZXJ0eU5hbWU6IHN0cmluZywgaWQ6IGFueSkge1xyXG4gICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoaWQpICYmIHJlcXVpcmVkKSB7XHJcbiAgICAgIHZhciBvcHRpb25JZCA9IGRhdGEuSWQ7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuTXVsdGlwbGUpIHtcclxuICAgICAgICBvcHRpb25JZCA9IFtvcHRpb25JZF07XHJcbiAgICAgIH1cclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKHpNb2RlbFByb3BlcnR5TmFtZSwgb3B0aW9uSWQsIHRoaXMuZ3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwib25DaGFuZ2VcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5PbkNoYW5nZSxcclxuICAgICAgICBldmVudCxcclxuICAgICAgICBkYXRhOiB7IFsndmFsdWUnXTogb3B0aW9uSWQsIGZpZWxkOiB0aGlzLmRhdGEgfVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcblxyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFN0eWxlICMzXHJcbiAgbGF6eUxvYWREYXRhT3B0aW9ucygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVzb3VyY2VVcmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXHJcbiAgICAgIHRoaXMuZGF0YS5PcHRpb25SZXNvdXJjZVVSTFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IG5ldyBaU2VsZWN0UG9zdEFwaVBhcmFtcygpO1xyXG4gICAgZmlsdGVyUGFyYW0uc29ydHMgPSB0aGlzLmRhdGEuT3B0aW9uU29ydDtcclxuICAgIGZpbHRlclBhcmFtLmNvbHVtbnMgPSB0aGlzLmRhdGEuT3B0aW9uQ29sdW1ucztcclxuICAgIGZpbHRlclBhcmFtLmZpbHRlcnMgPSB0aGlzLmRhdGEuT3B0aW9uRmlsdGVyO1xyXG5cclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldERhdGFPcHRpb25zKFxyXG4gICAgICB0aGlzLmRhdGEuT3B0aW9uTmFtZSxcclxuICAgICAgZmlsdGVyUGFyYW0sXHJcbiAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgIHJlc291cmNlVXJsLFxyXG4gICAgICB0aGlzLmNhY2hlU2VydmljZSxcclxuICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLFxyXG4gICAgICB0aGlzLmRhdGFbJ0Rpc2FibGVDYWNoZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gU3R5bGUgIzQsIHVzZWQgaW4gaW9uaWMtc2VsZWN0YWJsZVxyXG4gIGdldEluZmluaXRlRGF0YShldmVudDoge1xyXG4gICAgY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQ7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgfSkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5nZXRJbmZpbml0ZURhdGEoZXZlbnQuY29tcG9uZW50LCBldmVudC50ZXh0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1zRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSGFzSW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5maW5pdGV6RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvcHRpb25OYW1lID0gdGhpcy5kYXRhLk9wdGlvbk5hbWUgfHwgdGhpcy5pdGVtRGF0YUZpZWxkIHx8ICdncm91cC56RGF0YS4nICsgdGhpcy5kYXRhLk5hbWU7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykgJiYgIXRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSgxMildKSB7XHJcbiAgICAgIC8vIHJldHVybiBzZWxlY3Rpb25PcHRpb25zO1xyXG4gICAgICAvLyByZXR1cm4gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSgxMildID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHRoaXMuaXRlbURhdGFGaWVsZCA9IG9wdGlvbk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbk5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSg2KV0gfHwgW107XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKCdncm91cC56RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cC56RGF0YVtvcHRpb25OYW1lLnNsaWNlKDEyKV0gfHwgW107XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cFtvcHRpb25OYW1lLnNsaWNlKDYpXSB8fCBbXTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25OYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwW29wdGlvbk5hbWVdIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS53YXJuKHRoaXMuZGF0YS5OYW1lLCAnIC0gSW52YWxpZCBzZXR0aW5nIGZvciBPcHRpb25OYW1lOiAnLCBvcHRpb25OYW1lKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKGV2ZW50OiB7IGNvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50OyB0ZXh0OiBzdHJpbmcgfSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJBdCB6c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50IChvblNlYXJjaCk6IFwiLCBldmVudCk7XHJcbiAgICAvLyBldmVudC5jb21wb25lbnQgaXMgZm9yIG1vYmlsZSBvbmx5XHJcbiAgICBjb25zdCBjb21wb25lbnQgPSBldmVudC5jb21wb25lbnQ7XHJcbiAgICBpZiAoY29tcG9uZW50KSB7XHJcbiAgICAgIGNvbXBvbmVudC5zdGFydFNlYXJjaCgpO1xyXG4gICAgICBjb21wb25lbnQuZW5hYmxlSW5maW5pdGVTY3JvbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsKSB7XHJcbiAgICAgIC8vIElmIHNlYXJjaCB0ZXh0LCByZXNldCBwYWdlIHRvIDAuIEdldCBpbmZpbml0ZSBkYXRhXHJcbiAgICAgIGlmIChldmVudC50ZXh0ICE9PSBudWxsICYmIGV2ZW50LnRleHQgIT09IHRoaXMuaW5maW5pdGVTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbFBhZ2VObyA9IDA7XHJcbiAgICAgICAgdGhpcy5tb2RlbHpEYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRJbmZpbml0ZURhdGEoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFJlc2V0IHNjcm9sbCBwYWdlLCBlbXB0eSBpdGVtc1xyXG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsUGFnZU5vID0gMDtcclxuICAgICAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcyA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaWx0ZXIgekRhdGEgYW5kIHB1c2ggdG8gaXRlbXNcclxuICAgICAgY29uc3QgcGFyYW1zOiB6U2VsZWN0TXVsdGlwbGVQYXJhbXMgPSB7XHJcbiAgICAgICAgcmVmZXJJZDogbnVsbCxcclxuICAgICAgICBwYWdlTm86IDAsXHJcbiAgICAgICAgcGFnZVNpemU6IDIwLFxyXG4gICAgICAgIHNvcnRDb2x1bW5OYW1lOiBcIlwiLFxyXG4gICAgICAgIHNvcnRPcmRlcjogXCJcIixcclxuICAgICAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgICAgIHNvcnRPcmRlcnM6IFtdLFxyXG4gICAgICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICAgICAgcGFyYW1ldGVyczogXCJcIlxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gdGhpcy5kYXRhLlNlYXJjaEZpZWxkcyA/IHRoaXMuZGF0YS5TZWFyY2hGaWVsZHMgOiB0aGlzLml0ZW1UZXh0RmllbGQ7XHJcbiAgICAgIGNvbnN0IGZpbHRlcml0ZW1zID0gWkNvbXBvbmVudEhlbHBlci5maWx0ZXJTZWFyY2hJdGVtcyhcclxuICAgICAgICB0aGlzLmdldEl0ZW1zRGF0YSgpLFxyXG4gICAgICAgIGV2ZW50LnRleHQsXHJcbiAgICAgICAgc2VhcmNoRmllbGRzLFxyXG4gICAgICAgIHBhcmFtcy5wYWdlTm8sXHJcbiAgICAgICAgcGFyYW1zLnBhZ2VTaXplXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChjb21wb25lbnQpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGNvbXBvbmVudC5pdGVtcy5jb25jYXQoZmlsdGVyaXRlbXMpO1xyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIGNvbXBvbmVudC5lbmRJbmZpbml0ZVNjcm9sbCgpO1xyXG4gICAgICAgIGNvbXBvbmVudC5lbmRTZWFyY2goKTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWx0ZXIodmFsdWU6IGFueSwganVzdE9uZVRpbWU/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5kZWJvdW5jZVN1Yikge1xyXG4gICAgICB0aGlzLmRlYm91bmNlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2tpcCBmaWx0ZXJpbmcgaWYgaGF2ZSBpbmlmaW5pdGVzY3JvbGw/XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCkge1xyXG4gICAgICB0aGlzLmRlYm91bmNlU3ViID0gb2YoW10pXHJcbiAgICAgICAgLnBpcGUodGFwKCgpID0+ICh0aGlzLmlzTG9hZGluZyA9IHRydWUpKSwgZGVsYXkoNTAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMub25TZWFyY2goeyBjb21wb25lbnQ6IG51bGwsIHRleHQ6IHZhbHVlIH0pO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMubG9hZEluZmluaXRlRGF0YVN1Yikge1xyXG4gICAgLy8gICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMubG9hZEluZmluaXRlRGF0YVN1YiA9IG5ldyBTdWJqZWN0KGZhbHNlKTtcclxuICAgIC8vIHRoaXMuaGFuZGxlRmlsdGVyKG51bGwpO1xyXG4gICAgLy8gaW50ZXJ2YWwoMjAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgIC8vICAgdGhpcy5vblNlYXJjaCh7IGNvbXBvbmVudDogbnVsbCwgdGV4dDogdmFsdWUgfSk7XHJcbiAgICAvLyAgIGlmIChqdXN0T25lVGltZSkge1xyXG4gICAgLy8gICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPcGVuKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgICAgLy8gICAvLyBpZiAodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSB7XHJcbiAgICAgIC8vICAgLy8gICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgLy8gICAvLyB9XHJcbiAgICAgIC8vICAgLy8gdGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgLy8gICAvLyAvLyB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgICAgLy8gICAvLyBpbnRlcnZhbCgzMDAwKS5waXBlKHRha2VVbnRpbCh0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyAgIC8vIHRoaXMuaGFuZGxlRmlsdGVyKG51bGwpO1xyXG4gICAgICAvLyAgIC8vIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsKSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIpIHtcclxuICAgIC8vICAgICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICAvLyB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIuY29tcGxldGUoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQmx1cigpIHtcclxuICAgIC8vIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1UZW1wbGF0ZShcclxuICAgIGl0ZW06IGFueSxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGdyb3VwOiBhbnksXHJcbiAgICBpdGVtVmFsdWVGaWVsZDogc3RyaW5nLFxyXG4gICAgaXRlbVRleHRGaWVsZDogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICAvLyBUb0RPOiBpdGVtVmFsdWVGaWVsZCBhbmQgaXRlbVRleHRGaWVsZFxyXG4gICAgaWYgKHRoaXMuZGF0YS5JdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc3QgZ2V0VGVtcGxhdGVGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5JdGVtVGVtcGxhdGUpO1xyXG5cclxuICAgICAgcmV0dXJuIGdldFRlbXBsYXRlRnVuYyh7XHJcbiAgICAgICAgaXRlbSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGdyb3VwLFxyXG4gICAgICAgIGl0ZW1WYWx1ZUZpZWxkLFxyXG4gICAgICAgIGl0ZW1UZXh0RmllbGRcclxuICAgICAgfSBhcyBaU2VsZWN0TXVsdGlwbGVUZW1wbGF0ZVBhcmFtcyk7XHJcbiAgICB9IGVsc2UgaWYgKGl0ZW1UZXh0RmllbGQpIHtcclxuICAgICAgcmV0dXJuIGl0ZW1baXRlbVRleHRGaWVsZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyByZXR1cm4gaXRlbVtpdGVtVGV4dEZpZWxkXTtcclxuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbSkuam9pbihcIiwgXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BZGRJdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGYgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uQWRkSXRlbSk7XHJcbiAgICBpZiAodHlwZW9mIGYgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXR1cm4gY2FsbEZ1bmMoKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUud2FybignSW52YWxpZCBkZWNsYXJhdGlvbiBvZiBPbkFkZEl0ZW06ICcsIGYpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29tcG9uZW50IGJhc2ljIGZ1bmN0aW9uXHJcbiAgY2xlYXJEYXRhKCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKHRoaXMuZGF0YS5WYWx1ZSwgXCJcIiwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckl0ZW1zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBjb25maXJtSXRlbXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudC5jb25maXJtKCk7XHJcbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSXRlbXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudC50b2dnbGVJdGVtcyh0aGlzLnRvZ2dsZVNlbGVjdGFibGUpO1xyXG4gICAgdGhpcy50b2dnbGVTZWxlY3RhYmxlID0gIXRoaXMudG9nZ2xlU2VsZWN0YWJsZTtcclxuXHJcbiAgICAvLyBDb25maXJtIGl0ZW1zIGFuZCBjbG9zZSBTZWxlY3QgcGFnZVxyXG4gICAgLy8gd2l0aG91dCBoYXZpbmcgdGhlIHVzZXIgdG8gY2xpY2sgQ29uZmlybSBidXR0b24uXHJcbiAgICAvLyB0aGlzLmNvbmZpcm0oKTtcclxuICB9XHJcblxyXG4gIC8vIERpc2FibGUgT3BlbiBPbiBGb2N1c1xyXG4gIGRpc2FibGVPcGVuT25Gb2N1cyhjb21ib2JveENvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkRpc2FibGVPcGVuT25Gb2N1cykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gY29tYm9ib3hDb21wb25lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBPbkNoYW5nZVxyXG4gIHB1YmxpYyBvbkNoYW5nZV9kZXNrdG9wKGV2ZW50OiBhbnkpIHtcclxuICAgIHN1cGVyLm9uQ2hhbmdlKG51bGwsIGV2ZW50KVxyXG4gICAgdGhpcy5oYW5kbGVJbmZpbml0ZVNjcm9sbE9uQ2hhbmdlKGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZV9tb2JpbGUoZXZlbnQ6IHsgY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQ7IHZhbHVlOiBhbnkgfSkge1xyXG4gICAgc3VwZXIub25DaGFuZ2UoZXZlbnQpXHJcbiAgICBjb25zdCBmYyA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmRhdGEuVmFsdWVdO1xyXG4gICAgdGhpcy5oYW5kbGVDbG9zZSgpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgc3VwZXIuZ2V0SXNSZXF1aXJlZFZhbHVlKCkgJiYgKGV2ZW50LnZhbHVlID09PSBudWxsIHx8IGV2ZW50LnZhbHVlLmxlbmd0aCA9PT0gMClcclxuICAgICkge1xyXG4gICAgICBmYy5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZjLnNldEVycm9ycyhudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhhbmRsZUluZmluaXRlU2Nyb2xsT25DaGFuZ2UoZXZlbnQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVJbmZpbml0ZVNjcm9sbE9uQ2hhbmdlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSGFzSW5maW5pdGVTY3JvbGwgJiYgISF0aGlzLmRhdGEuSW5maW5pdGVTY3JvbGwkKSB7XHJcbiAgICAgIGNvbnN0IHRleHRGaWVsZCA9IHRoaXMuaXRlbVRleHRGaWVsZC50b1N0cmluZygpO1xyXG4gICAgICBjb25zdCB2YWx1ZUZpZWxkID0gdGhpcy5pdGVtVmFsdWVGaWVsZC50b1N0cmluZygpO1xyXG4gICAgICBsZXQgemRhdGFNb2RlbCA9IFtdO1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB6ZGF0YU1vZGVsID0gdGhpcy5pbmZpbml0ZXpEYXRhLmZpbHRlcih4ID0+IHhbdmFsdWVGaWVsZF0gPT09IHZhbHVlKTtcclxuICAgICAgICB0aGlzLm1vZGVsekRhdGEgPSB6ZGF0YU1vZGVsLnNsaWNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXRlbURhdGFGaWVsZC5zdGFydHNXaXRoKCdncm91cC56RGF0YS4nKSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuekRhdGFbdGhpcy5pdGVtRGF0YUZpZWxkLnNsaWNlKDEyKV0gPSB6ZGF0YU1vZGVsO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbURhdGFGaWVsZC5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5pdGVtRGF0YUZpZWxkLnNsaWNlKDYpXSA9IHpkYXRhTW9kZWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE11bHRpIFNlbGVjdGlvbiBUcmVlXHJcbiAgcHVibGljIGdldCBmaWx0ZXJFeHBhbmRTZXR0aW5ncygpOiBGaWx0ZXJFeHBhbmRTZXR0aW5ncyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBleHBhbmRNYXRjaGVzOiB0cnVlLFxyXG4gICAgICBleHBhbmRlZE9uQ2xlYXI6IFwiaW5pdGlhbFwiXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzQ2hpbGRyZW4gPSAoZGF0YWl0ZW06IGFueSk6IGJvb2xlYW4gPT4gISFkYXRhaXRlbVsnaXRlbXMnXTtcclxuXHJcbiAgcHVibGljIGhhbmRsZU11bHRpU2VsZWN0VHJlZUZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcnNlZEl0ZW1zRGF0YSA9IHRoaXMub25NdWx0aVNlbGVjdFRyZWVTZWFyY2godGhpcy5nZXRJdGVtc0RhdGEoKSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uTXVsdGlTZWxlY3RUcmVlU2VhcmNoKGl0ZW1zOiBhbnlbXSwgc2VhcmNoZWRUZXh0OiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udGFpbnMoaXRlbVt0aGlzLml0ZW1UZXh0RmllbGRdLCBzZWFyY2hlZFRleHQpKSB7XHJcbiAgICAgICAgYWNjLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoaXRlbVsnaXRlbXMnXSAmJiBpdGVtWydpdGVtcyddLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMub25NdWx0aVNlbGVjdFRyZWVTZWFyY2goaXRlbVsnaXRlbXMnXSwgc2VhcmNoZWRUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IF9pdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XHJcbiAgICAgICAgICBfaXRlbVsnaXRlbXMnXSA9IG5ld0l0ZW1zO1xyXG5cclxuICAgICAgICAgIGFjYy5wdXNoKF9pdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29udGFpbnModGV4dDogc3RyaW5nLCBzZWFyY2hlZFRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygoc2VhcmNoZWRUZXh0IHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwienNlbGVjdG11bHRpcGxlLWNvbnRhaW5lciBlMXRhZy1zdHlsZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcbiAgPGlvbmljLXNlbGVjdGFibGUgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCIgI3NlbGVjdENvbXBvbmVudCBpdGVtLWNvbnRlbnQgc2VhcmNoRmFpbFRleHQ9XCJOb3RoaW5nIGZvdW5kIDooXCJcclxuICAgIGhlYWRlckNvbG9yPVwicHJpbWFyeVwiIGNsZWFyQnV0dG9uVGV4dD1cIkNsZWFyXCIgWyhuZ01vZGVsKV09XCJncm91cC56TW9kZWxbZGF0YS5WYWx1ZV1cIiBbaWRdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICBbaXRlbXNdPVwiZ2V0SXRlbXNEYXRhKClcIiBbaXRlbVZhbHVlRmllbGRdPVwiaXRlbVZhbHVlRmllbGRcIiBbaXRlbVRleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgIFtjYW5BZGRJdGVtXT1cIiEhZGF0YS5PbkFkZEl0ZW1cIiBbY2FuQ2xlYXJdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgIFtjYW5TZWFyY2hdPVwiIWRhdGFbJ2Rpc2FibGUtc2VhcmNoJ11cIiBbc2hvdWxkRm9jdXNTZWFyY2hiYXJdPVwiIWRhdGFbJ2Rpc2FibGUtc2VhcmNoJ11cIlxyXG4gICAgW2hhc0luZmluaXRlU2Nyb2xsXT1cIiEhZGF0YS5IYXNJbmZpbml0ZVNjcm9sbFwiIFtpc011bHRpcGxlXT1cImRhdGEuTXVsdGlwbGVcIlxyXG4gICAgW2lzRW5hYmxlZF09XCIhKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgIFtzaG91bGRTdG9yZUl0ZW1WYWx1ZV09XCJ0cnVlXCIgKG9uU2VhcmNoKT1cIm9uU2VhcmNoKCRldmVudClcIiAob25JbmZpbml0ZVNjcm9sbCk9XCJnZXRJbmZpbml0ZURhdGEoJGV2ZW50KVwiXHJcbiAgICAob25BZGRJdGVtKT1cIm9uQWRkSXRlbSgkZXZlbnQpXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlX21vYmlsZSgkZXZlbnQpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgaW9uaWNTZWxlY3RhYmxlSXRlbUljb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXNJdGVtU2VsZWN0ZWQ9XCJpc0l0ZW1TZWxlY3RlZFwiPlxyXG4gICAgICA8ZmEtaWNvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImlzSXRlbVNlbGVjdGVkIGUxdGFnLXN0eWxlMlwiIHNpemU9XCJzbVwiIFtpY29uXT1cIlsnZmFyJywgaXNJdGVtU2VsZWN0ZWQgPyAnY2hlY2stY2lyY2xlJzogJ2NpcmNsZSddXCJcclxuICAgICAgICBbc3R5bGVzXT1cInsnY29sb3InOiBpc0l0ZW1TZWxlY3RlZCA/ICdkb2RnZXJCbHVlJyA6ICdsaWdodEdyYXknfVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiPjwvZmEtaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGlvbmljU2VsZWN0YWJsZUNsb3NlQnV0dG9uVGVtcGxhdGU+XHJcbiAgICAgIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGVcIj48L2lvbi1pY29uPiAtLT5cclxuICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3RpbWVzLWNpcmNsZSdcIiBzaXplPVwibWRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTNcIiBjbGFzcz1cImUxdGFnLXN0eWxlM1wiPjwvZmEtaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGlvbmljU2VsZWN0YWJsZVRpdGxlVGVtcGxhdGU+XHJcbiAgICAgIDxzcGFuIGNsYXNzPWUxdGFnLXN0eWxlNCBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIj57e2RhdGEuTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwiZ2V0SXNSZXF1aXJlZFZhbHVlKClcIiBjb2xvcj1cImRhbmdlclwiPio8L2lvbi10ZXh0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgaW9uaWNTZWxlY3RhYmxlSXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPnt7IGdldEl0ZW1UZW1wbGF0ZShpdGVtLCBkYXRhLCBncm91cCwgaXRlbVZhbHVlRmllbGQsIGl0ZW1UZXh0RmllbGQpIH19PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2lvbmljLXNlbGVjdGFibGU+XHJcbiAgPGtlbmRvLWNvbWJvYm94ICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgJiYgIWRhdGEuTXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICNjb21ib2JveENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJnZXRJdGVtc0RhdGEoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cIml0ZW1WYWx1ZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgIFthbGxvd0N1c3RvbV09XCJhbGxvd0N1c3RvbVZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgW2tlbmRvRHJvcERvd25GaWx0ZXJdPVwiZmlsdGVyU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICBbc3VnZ2VzdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwidHJ1ZVwiIFxyXG4gICAgICAgICAgICAgICAgICBbb3Blbk9uRm9jdXNdPVwiZGlzYWJsZU9wZW5PbkZvY3VzKGNvbWJvYm94Q29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJyA6ICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KX1cIlxyXG4gICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2VfZGVza3RvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2aXJ0dWFsXT1cInZpcnR1YWxcIlxyXG4gICAgICAgICAgICAgICAgICAob3Blbik9XCJoYW5kbGVPcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xvc2UpPVwiaGFuZGxlQ2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvQ29tYm9Cb3hJdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPnt7IGdldEl0ZW1UZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGl0ZW1WYWx1ZUZpZWxkLCBpdGVtVGV4dEZpZWxkKSB9fTwvc3Bhbj5cclxuICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInRlbXBsYXRlXCI+e3sgZGF0YUl0ZW0udmFsdWUgfX08L3NwYW4+IHt7IGRhdGFJdGVtLnRleHQgfX0gLS0+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tY29tYm9ib3g+XHJcbiAgPGtlbmRvLW11bHRpc2VsZWN0ICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgJiYgZGF0YS5NdWx0aXBsZSAmJiAhZGF0YS5FbmFibGVDaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdldEl0ZW1zRGF0YSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJpdGVtVmFsdWVGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tXT1cImFsbG93Q3VzdG9tVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2JveGVzXT1cImRhdGEuRW5hYmxlQ2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJhdXRvQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtrZW5kb0Ryb3BEb3duRmlsdGVyXT1cImZpbHRlclNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJyA6ICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiaGFuZGxlRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvcGVuKT1cImhhbmRsZU9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9NdWx0aVNlbGVjdEl0ZW1UZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZTF0YWctc3R5bGU1XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCI+e3sgZ2V0SXRlbVRlbXBsYXRlKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgaXRlbVZhbHVlRmllbGQsIGl0ZW1UZXh0RmllbGQpIH19PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLW11bHRpc2VsZWN0PlxyXG5cclxuICA8a2VuZG8tbXVsdGlzZWxlY3R0cmVlICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgJiYgZGF0YS5NdWx0aXBsZSAmJiBkYXRhLkVuYWJsZUNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2VuZG9NdWx0aVNlbGVjdFRyZWVFeHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtrZW5kb011bHRpU2VsZWN0VHJlZUhpZXJhcmNoeUJpbmRpbmddPVwiZ2V0SXRlbXNEYXRhKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJpdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc0NoaWxkcmVuXT1cImhhc0NoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZpZWxkXT1cIml0ZW1UZXh0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cIml0ZW1WYWx1ZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlX2Rlc2t0b3AoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtc109XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiYXV0b0Nsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZXhwYW5kT25GaWx0ZXJdPVwiZmlsdGVyRXhwYW5kU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiaGFuZGxlTXVsdGlTZWxlY3RUcmVlRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnIDogKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4pPVwiaGFuZGxlT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2UpPVwiaGFuZGxlQ2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9NdWx0aVNlbGVjdFRyZWVOb0RhdGFUZW1wbGF0ZT5cclxuICAgICAgICAgIDxoND5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+PGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgIE5vIHJlY29yZCBmb3VuZC5cclxuICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9rZW5kby1tdWx0aXNlbGVjdHRyZWU+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pzZWxlY3RtdWx0aXBsZS96c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenNlbGVjdG11bHRpcGxlL3pzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFLeEUsOEJBQThCO0FBQzlCLE9BQU8sRUFBNEIsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsMkNBQTJDO0FBQzNDLE9BQU8sRUFFTyxnQkFBZ0IsRUFDRyxvQkFBb0IsRUFBd0IsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFVeEUsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGNBQWM7SUFnQzFELFlBQ1Usa0JBQXNDLEVBQ3RDLGFBQTRCLEVBQzVCLFlBQTBCLEVBQ2xDLFdBQThCO1FBQzVCLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUpaLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUEvQnBDLFVBQUssR0FBZSxFQUFFLENBQUM7UUFFdkIsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0IsdUJBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQzFCLDhCQUE4QjtRQUM5QixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFDOUIsa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFDN0Isa0JBQWEsR0FBVyxJQUFJLENBQUM7UUFDN0IsaUJBQVksR0FBRyx5QkFBeUIsQ0FBQztRQUN6Qyx5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVqQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUUxQixhQUFRLEdBQU87WUFDYixrQkFBa0IsRUFBRSxFQUFFO1lBQ3RCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLFlBQVksRUFBRSxDQUFDO1NBQ2hCLENBQUM7UUFFRiwwRUFBMEU7UUFDbkUsbUJBQWMsR0FBMkI7WUFDOUMsYUFBYSxFQUFFLEtBQUs7WUFDcEIsUUFBUSxFQUFFLFVBQVU7U0FDckIsQ0FBQztRQWtCSyxZQUFPLEdBQVE7WUFDcEIsVUFBVSxFQUFFLEVBQUU7WUFDZCxRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUM7UUF5YUssZ0JBQVcsR0FBRyxDQUFDLFFBQWEsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQXZiOUMsQ0FBQztJQUV4QixXQUFXO1FBQ1QsMkJBQTJCO1FBQzNCLHFDQUFxQztRQUNyQyxJQUFJO1FBQ0osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBT0QsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUzRSw2REFBNkQ7UUFDN0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUV4RSx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7d0JBQzNCLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO3FCQUNoQjt5QkFBTTt3QkFDTCxDQUFDLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3FCQUN0RTtvQkFDRCxvREFBb0Q7b0JBQ3BELElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7d0JBQzVCLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3FCQUNwQjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxrQ0FBa0M7UUFDL0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUVqQzs7Ozs7O1dBTUc7UUFFSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2xELHdCQUF3QjtZQUN4QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNoQyxtQkFBbUI7Z0JBQ25CLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDMUM7WUFFRCxJQUFJLGtCQUFrQixHQUFvQixnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDckcsSUFBSSxrQkFBa0IsRUFBRTtnQkFDdEIsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFFekQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNkLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRTs0QkFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQzlDO3FCQUNGO29CQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQ3hCO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMvQjtTQUNGO2FBQ0k7WUFDSCxtQkFBbUI7WUFDbkIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFbEYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMvQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3pDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztvQkFFbkQsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO3dCQUNqRixJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUM5RTtvQkFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFOzRCQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDOUM7cUJBQ0Y7b0JBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQ0k7Z0JBQ0gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ3JFLHFDQUFxQztpQkFDdEM7cUJBQ0k7b0JBQ0gsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3JGLGdEQUFnRDtvQkFDaEQsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO3dCQUNqRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzNCLFVBQVUsQ0FBQzs0QkFDVCxhQUFhLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBRTFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQ0FDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUU7b0NBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lDQUM5Qzs2QkFDRjt3QkFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7cUJBQ1Q7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDeEI7U0FDRjtJQUNILENBQUM7SUFFRCx5REFBeUQ7SUFDakQscUJBQXFCLENBQUMsUUFBaUIsRUFBRSxJQUFTLEVBQUUsa0JBQTBCLEVBQUUsRUFBTztRQUM3RixJQUFJLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtZQUN6RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RCLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDMUIsS0FBSztnQkFDTCxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTthQUN2QixDQUFDLENBQUM7WUFFNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxXQUFXO0lBQ1gsbUJBQW1CO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQzVCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDL0MsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxXQUFXLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzlDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFN0MsT0FBTyxnQkFBZ0IsQ0FBQyxjQUFjLENBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUNwQixXQUFXLEVBQ1gsSUFBSSxDQUFDLEtBQUssRUFDVixXQUFXLEVBQ1gsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsZUFBZSxDQUFDLEtBR2Y7UUFDQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUMzQjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ3JGLDJCQUEyQjtZQUMzQixrQ0FBa0M7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwRDtRQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDckQ7UUFDRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDOUM7UUFDRCxJQUFJLFVBQVUsRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDckM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBNEQ7UUFDbkUsbUVBQW1FO1FBQ25FLHFDQUFxQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksU0FBUyxFQUFFO1lBQ2IsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQy9CLHFEQUFxRDtZQUNyRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUNqRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQzthQUN0QjtZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7YUFDSTtZQUNILGlDQUFpQztZQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksU0FBUyxFQUFFO2dCQUNiLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2FBQ3RCO1lBRUQsaUNBQWlDO1lBQ2pDLE1BQU0sTUFBTSxHQUEwQjtnQkFDcEMsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTSxFQUFFLENBQUM7Z0JBQ1QsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLFNBQVMsRUFBRSxFQUFFO2dCQUNiLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixVQUFVLEVBQUUsRUFBRTtnQkFDZCxZQUFZLEVBQUUsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLEVBQUU7YUFDZixDQUFDO1lBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzFGLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUNwRCxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQ25CLEtBQUssQ0FBQyxJQUFJLEVBQ1YsWUFBWSxFQUNaLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLFFBQVEsQ0FDaEIsQ0FBQztZQUNGLElBQUksU0FBUyxFQUFFO2dCQUNiLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNsRCxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDeEIsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzlCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDeEI7U0FDRjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVSxFQUFFLFdBQXFCO1FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hDO1FBRUQsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3BELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBRWhELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUU7d0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM5QztpQkFDRjtnQkFBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsa0NBQWtDO1FBQ2xDLDRDQUE0QztRQUM1QyxJQUFJO1FBQ0osaURBQWlEO1FBQ2pELDJCQUEyQjtRQUMzQiw2RUFBNkU7UUFDN0UscURBQXFEO1FBQ3JELHVCQUF1QjtRQUN2QiwwQkFBMEI7UUFDMUIsTUFBTTtRQUNOLE1BQU07SUFDUixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLHVDQUF1QztZQUN2QyxpREFBaUQ7WUFDakQsU0FBUztZQUNULGlEQUFpRDtZQUNqRCxtQ0FBbUM7WUFDbkMsa0ZBQWtGO1lBQ2xGLGdDQUFnQztZQUNoQyxXQUFXO1NBQ1o7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULHFDQUFxQztRQUNyQyxvQ0FBb0M7UUFDcEMsMkNBQTJDO1FBQzNDLDhDQUE4QztRQUM5QyxNQUFNO1FBQ04sSUFBSTtJQUNOLENBQUM7SUFFRCxVQUFVO1FBQ1Isc0JBQXNCO0lBQ3hCLENBQUM7SUFFTSxlQUFlLENBQ3BCLElBQVMsRUFDVCxJQUFTLEVBQ1QsS0FBVSxFQUNWLGNBQXNCLEVBQ3RCLGFBQXFCO1FBRXJCLHlDQUF5QztRQUN6QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzFCLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU5RixPQUFPLGVBQWUsQ0FBQztnQkFDckIsSUFBSTtnQkFDSixJQUFJO2dCQUNKLEtBQUs7Z0JBQ0wsY0FBYztnQkFDZCxhQUFhO2FBQ21CLENBQUMsQ0FBQztTQUNyQzthQUFNLElBQUksYUFBYSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDTCw4QkFBOEI7WUFDOUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVTtRQUNsQixNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0UsSUFBSSxPQUFPLENBQUMsS0FBSyxVQUFVLEVBQUU7WUFDM0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sUUFBUSxFQUFFLENBQUM7U0FDbkI7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE9BQU87SUFDVCxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLFNBQVM7UUFDUCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUUvQyxzQ0FBc0M7UUFDdEMsbURBQW1EO1FBQ25ELGtCQUFrQjtJQUNwQixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGtCQUFrQixDQUFDLGlCQUFzQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDYjthQUNJO1lBQ0gsT0FBTyxpQkFBaUIsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxXQUFXO0lBQ0osZ0JBQWdCLENBQUMsS0FBVTtRQUNoQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUMzQixJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUEwRDtRQUMvRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQ0UsS0FBSyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDaEY7WUFDQSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxLQUFhO1FBQ2hELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDOUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLEtBQUssRUFBRTtnQkFDVCxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3RDO1lBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDN0Q7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQzthQUN0RDtTQUNGO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixJQUFXLG9CQUFvQjtRQUM3QixPQUFPO1lBQ0wsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLFNBQVM7U0FDM0IsQ0FBQTtJQUNILENBQUM7SUFJTSwyQkFBMkIsQ0FBQyxLQUFhO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU0sdUJBQXVCLENBQUMsS0FBWSxFQUFFLFlBQW9CO1FBQy9ELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDekQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNoQjtpQkFDSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFFM0UsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDdkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUM7b0JBRTFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2pCO2FBQ0Y7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTSxRQUFRLENBQUMsSUFBWSxFQUFFLFlBQW9CO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7O3NIQXhmVSx3QkFBd0I7MEdBQXhCLHdCQUF3QixzTUMxQnJDLG83UEFxSEE7NEZEM0ZhLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxxQkFBcUI7Z01BS0QsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50IH0gZnJvbSBcImlvbmljLXNlbGVjdGFibGVcIjtcclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBkZWxheSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFJlc291cmNlQXBpU2VydmljZSwgV2ViQXBpU2VydmljZSwgQ2FjaGVTZXJ2aWNlLCBDbGlja2FibGVJY29ucyxcclxuICBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsXHJcbiAgWlNlbGVjdE11bHRpcGxlVGVtcGxhdGVQYXJhbXMsIFpTZWxlY3RQb3N0QXBpUGFyYW1zLCB6U2VsZWN0TXVsdGlwbGVQYXJhbXN9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZpbHRlckV4cGFuZFNldHRpbmdzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRyZWV2aWV3XCI7XHJcbmltcG9ydCB7IERyb3BEb3duRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZHJvcGRvd25zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenNlbGVjdG11bHRpcGxlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBac2VsZWN0bXVsdGlwbGVDb21wb25lbnQgZXh0ZW5kcyBJbnB1dEZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwic2VsZWN0Q29tcG9uZW50XCIpIHNlbGVjdENvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50O1xyXG5cclxuICBpY29uTGlzdDogQ2xpY2thYmxlSWNvbnNbXTtcclxuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIG1vZGVsekRhdGE6IEFycmF5PGFueT47XHJcbiAgaW5maW5pdGV6RGF0YTogQXJyYXk8YW55PiA9IFtdO1xyXG4gIGluZmluaXRlU2VhcmNoVGV4dCA9IG51bGw7XHJcbiAgLy8gc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgdG9nZ2xlU2VsZWN0YWJsZSA9IHRydWU7XHJcbiAgaXRlbVZhbHVlRmllbGQ6IHN0cmluZyA9IG51bGw7XHJcbiAgaXRlbVRleHRGaWVsZDogc3RyaW5nID0gbnVsbDtcclxuICBpdGVtRGF0YUZpZWxkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGl0ZW1UZW1wbGF0ZSA9IFwie3tpdGVtW2l0ZW1UZXh0RmllbGRdfX1cIjtcclxuICBpbmZpbml0ZVNjcm9sbFBhZ2VObyA9IDA7XHJcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcclxuICBwcml2YXRlIGRlYm91bmNlU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgYWxsb3dDdXN0b21WYWx1ZSA9IGZhbHNlO1xyXG4gIGF1dG9DbG9zZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHBhcnNlZEl0ZW1zRGF0YTogYW55W107XHJcbiAgZGF0YUluZm86IHt9ID0ge1xyXG4gICAgXCJpdGVtc1Jlc291cmNlVVJMXCI6IFwiXCIsXHJcbiAgICBcIm9wdGlvbkZpbHRlcnNcIjogXCJcIixcclxuICAgIFwidG90YWxDb3VudFwiOiAwXHJcbiAgfTtcclxuXHJcbiAgLy8gcHJpdmF0ZSBsb2FkSW5maW5pdGVEYXRhU3ViOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwdWJsaWMgZmlsdGVyU2V0dGluZ3M6IERyb3BEb3duRmlsdGVyU2V0dGluZ3MgPSB7XHJcbiAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSxcclxuICAgIG9wZXJhdG9yOiBcImNvbnRhaW5zXCIsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWNoZVNlcnZpY2U6IENhY2hlU2VydmljZSxcclxuICAgIGNvbXBTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZVxyXG4gICkgeyBzdXBlcihjb21wU2VydmljZSkgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIC8vIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgLy8gICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoaXMuZGVib3VuY2VTdWIpIHtcclxuICAgICAgdGhpcy5kZWJvdW5jZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpcnR1YWw6IGFueSA9IHtcclxuICAgIGl0ZW1IZWlnaHQ6IDI4LFxyXG4gICAgcGFnZVNpemU6IDE1XHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBzdXBlci5zZXR1cElubmVyRmllbGQoKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0U2VsZWN0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMsIHRoaXMpO1xyXG5cclxuICAgIC8vIFtEcm9wZG93bmxpc3QgTXVsdGlwbGVdIC0gYXV0byBjbG9zZSBtZW51IHdoZW4gbG9zZSBmb2N1cy5cclxuICAgIGlmICh0aGlzLmRhdGEuQXV0b0Nsb3NlID09PSBmYWxzZSkgdGhpcy5hdXRvQ2xvc2UgPSB0aGlzLmRhdGEuQXV0b0Nsb3NlO1xyXG5cclxuICAgIC8vIEhhbmRsZSBDbGlja2FibGUgSWNvbnNcclxuICAgIHRoaXMuaWNvbkxpc3QgPSB0aGlzLmRhdGEuQ2xpY2thYmxlSWNvbnM7XHJcbiAgICBpZiAodGhpcy5pY29uTGlzdCkge1xyXG4gICAgICBpZiAodGhpcy5pY29uTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5pY29uTGlzdC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChpLlRvb2x0aXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpLlRvb2x0aXAgPSBcIlwiO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaS5Ub29sdGlwID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGkuVG9vbHRpcCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBEZWZhdWx0IHBvc2l0aW9uIHRvcC4gcmlnaHQgfCBib3R0b20gfCB0b3AgfCBsZWZ0XHJcbiAgICAgICAgICBpZiAoaS5Qb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGkuUG9zaXRpb24gPSBcInRvcFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsbG93Q3VzdG9tVmFsdWUgPSB0aGlzLmRhdGEuQWxsb3dDdXN0b21WYWx1ZSB8fCBmYWxzZTsgLy8gQWxsb3cgZW50ZXIgdGV4dCBpbiBkcm9wZG93bmJveFxyXG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICBjb25zdCB6TW9kZWwgPSB0aGlzLmdyb3VwLnpNb2RlbDtcclxuXHJcbiAgICAvKlxyXG4gICAgICogNCBTdHlsZXMgb2YgZGVjbGFyZSB0aGUgY29tcG9uZW5077+9cyBvcHRpb24gbGlzdCBkYXRhIHNvdXJjZS5cclxuICAgICAqIFN0eWxlICMxIC0gRmllbGQuU2VsZWN0T3B0aW9ucyBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIG9iamVjdCB0aGF0IGNvbnRhaW4gdGV4dCBhbmQgdmFsdWUuXHJcbiAgICAgKiBTdHlsZSAjMiAtIEZpZWxkLlNlbGVjdE9wdGlvbnMgZGVmaW5lZCBhcyBhIHBoYXNlIGxpa2Ug77+9aXRlbS5JZCBhcyBpdGVtLk5hbWUgZm9yIGl0ZW0gaW4gZ3JvdXAuekRhdGEuUHJvamVjdE9wdGlvbnPvv70uXHJcbiAgICAgKiBTdHlsZSAjMyAtIEZpZWxkLk9wdGlvblJlc291cmNlVVJMIGRlZmluZWQgdGhlIG5hbWUgb2YgcmVzb3VyY2Ugc2VydmVyIGFwaS5cclxuICAgICAqIFN0eWxlICM0IC0gRmllbGQuSW5maW5pdGVTY3JvbGwkIGRlZmluZWQgdGhlIG1ldGhvZCBuYW1lIGFzIO+/vWdyb3VwLmdldE1vcmVEYXRhQXNTY3JvbGzvv70uXHJcbiAgICAgKi9cclxuXHJcbiAgICBpZiAoZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCAmJiBkYXRhLkluZmluaXRlU2Nyb2xsJCkge1xyXG4gICAgICAvLyB3aGVuIGluZmluaXRpZSBzY3JvbGxcclxuICAgICAgbGV0IHJlY29yZElkID0gbnVsbDtcclxuICAgICAgaWYgKHpNb2RlbCAmJiB6TW9kZWxbZmllbGRWYWx1ZV0pIHtcclxuICAgICAgICAvLyBnZXQgek1vZGVsIFZhbHVlXHJcbiAgICAgICAgcmVjb3JkSWQgPSB6TW9kZWxbZmllbGRWYWx1ZV0udG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGdldHpEYXRhRm9yek1vZGVsJDogT2JzZXJ2YWJsZTxhbnk+ID0gWkNvbXBvbmVudEhlbHBlci5nZXRJbmZpbml0ZURhdGEobnVsbCwgJycsIHRoaXMsIHJlY29yZElkKTtcclxuICAgICAgaWYgKGdldHpEYXRhRm9yek1vZGVsJCkge1xyXG4gICAgICAgIGdldHpEYXRhRm9yek1vZGVsJC5zdWJzY3JpYmUoKHpkYXRhKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLk5hbWUsICcgLSBpbml0aWFsIHpEYXRhIGxvYWQ6ICcsIHpkYXRhKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucyh0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlcihudWxsLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFN0eWxlICMxLCAjMiwgIzNcclxuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBkYXRhLklzUmVxdWlyZWQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YS5PcHRpb25SZXNvdXJjZVVSTCkge1xyXG4gICAgICAgIHRoaXMubGF6eUxvYWREYXRhT3B0aW9ucygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uRGF0YSA9IHJlcy5kYXRhU2V0ID8gcmVzLmRhdGFTZXQgOiByZXM7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbkRhdGEgJiYgb3B0aW9uRGF0YS5sZW5ndGggPT09IDEgJiYgIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0ZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdEZpcnN0T3B0aW9uKGlzUmVxdWlyZWQsIG9wdGlvbkRhdGFbMF0sIGZpZWxkVmFsdWUsIHpNb2RlbC5JZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSAmJiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICAgICAgLy9za2lwIGV2YWwgaWYgc2VsZWN0b3B0aW9ucyBpcyBleGlzdFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbkRhdGEgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5pdGVtRGF0YUZpZWxkKTtcclxuICAgICAgICAgIC8vIGFwcGVuZCBkYXRhIHZpYSB0aW1lb3V0IGFmdGVyIGRhdGEgaXMgbG9hZGVkLlxyXG4gICAgICAgICAgaWYgKG9wdGlvbkRhdGEgJiYgb3B0aW9uRGF0YS5sZW5ndGggPT09IDEgJiYgIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0ZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNDb21wb25lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICB0aGlzQ29tcG9uZW50LmF1dG9TZWxlY3RGaXJzdE9wdGlvbihpc1JlcXVpcmVkLCBvcHRpb25EYXRhWzBdLCBmaWVsZFZhbHVlLCB0aGlzQ29tcG9uZW50Lmdyb3VwLnpNb2RlbC5JZCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvIHNlbGVjdCBmaXJzdCBvcHRpb24gKGlmIHJlcXVpcmVkICYgb25seSAxIG9wdGlvbilcclxuICBwcml2YXRlIGF1dG9TZWxlY3RGaXJzdE9wdGlvbihyZXF1aXJlZDogYm9vbGVhbiwgZGF0YTogYW55LCB6TW9kZWxQcm9wZXJ0eU5hbWU6IHN0cmluZywgaWQ6IGFueSkge1xyXG4gICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoaWQpICYmIHJlcXVpcmVkKSB7XHJcbiAgICAgIHZhciBvcHRpb25JZCA9IGRhdGEuSWQ7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuTXVsdGlwbGUpIHtcclxuICAgICAgICBvcHRpb25JZCA9IFtvcHRpb25JZF07XHJcbiAgICAgIH1cclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKHpNb2RlbFByb3BlcnR5TmFtZSwgb3B0aW9uSWQsIHRoaXMuZ3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwib25DaGFuZ2VcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5PbkNoYW5nZSxcclxuICAgICAgICBldmVudCxcclxuICAgICAgICBkYXRhOiB7IFsndmFsdWUnXTogb3B0aW9uSWQsIGZpZWxkOiB0aGlzLmRhdGEgfVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcblxyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFN0eWxlICMzXHJcbiAgbGF6eUxvYWREYXRhT3B0aW9ucygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVzb3VyY2VVcmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXHJcbiAgICAgIHRoaXMuZGF0YS5PcHRpb25SZXNvdXJjZVVSTFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IG5ldyBaU2VsZWN0UG9zdEFwaVBhcmFtcygpO1xyXG4gICAgZmlsdGVyUGFyYW0uc29ydHMgPSB0aGlzLmRhdGEuT3B0aW9uU29ydDtcclxuICAgIGZpbHRlclBhcmFtLmNvbHVtbnMgPSB0aGlzLmRhdGEuT3B0aW9uQ29sdW1ucztcclxuICAgIGZpbHRlclBhcmFtLmZpbHRlcnMgPSB0aGlzLmRhdGEuT3B0aW9uRmlsdGVyO1xyXG5cclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldERhdGFPcHRpb25zKFxyXG4gICAgICB0aGlzLmRhdGEuT3B0aW9uTmFtZSxcclxuICAgICAgZmlsdGVyUGFyYW0sXHJcbiAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgIHJlc291cmNlVXJsLFxyXG4gICAgICB0aGlzLmNhY2hlU2VydmljZSxcclxuICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLFxyXG4gICAgICB0aGlzLmRhdGFbJ0Rpc2FibGVDYWNoZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gU3R5bGUgIzQsIHVzZWQgaW4gaW9uaWMtc2VsZWN0YWJsZVxyXG4gIGdldEluZmluaXRlRGF0YShldmVudDoge1xyXG4gICAgY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQ7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgfSkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5nZXRJbmZpbml0ZURhdGEoZXZlbnQuY29tcG9uZW50LCBldmVudC50ZXh0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1zRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSGFzSW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5maW5pdGV6RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvcHRpb25OYW1lID0gdGhpcy5kYXRhLk9wdGlvbk5hbWUgfHwgdGhpcy5pdGVtRGF0YUZpZWxkIHx8ICdncm91cC56RGF0YS4nICsgdGhpcy5kYXRhLk5hbWU7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykgJiYgIXRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSgxMildKSB7XHJcbiAgICAgIC8vIHJldHVybiBzZWxlY3Rpb25PcHRpb25zO1xyXG4gICAgICAvLyByZXR1cm4gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSgxMildID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHRoaXMuaXRlbURhdGFGaWVsZCA9IG9wdGlvbk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbk5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSg2KV0gfHwgW107XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKCdncm91cC56RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cC56RGF0YVtvcHRpb25OYW1lLnNsaWNlKDEyKV0gfHwgW107XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cFtvcHRpb25OYW1lLnNsaWNlKDYpXSB8fCBbXTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25OYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwW29wdGlvbk5hbWVdIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS53YXJuKHRoaXMuZGF0YS5OYW1lLCAnIC0gSW52YWxpZCBzZXR0aW5nIGZvciBPcHRpb25OYW1lOiAnLCBvcHRpb25OYW1lKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKGV2ZW50OiB7IGNvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50OyB0ZXh0OiBzdHJpbmcgfSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJBdCB6c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50IChvblNlYXJjaCk6IFwiLCBldmVudCk7XHJcbiAgICAvLyBldmVudC5jb21wb25lbnQgaXMgZm9yIG1vYmlsZSBvbmx5XHJcbiAgICBjb25zdCBjb21wb25lbnQgPSBldmVudC5jb21wb25lbnQ7XHJcbiAgICBpZiAoY29tcG9uZW50KSB7XHJcbiAgICAgIGNvbXBvbmVudC5zdGFydFNlYXJjaCgpO1xyXG4gICAgICBjb21wb25lbnQuZW5hYmxlSW5maW5pdGVTY3JvbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsKSB7XHJcbiAgICAgIC8vIElmIHNlYXJjaCB0ZXh0LCByZXNldCBwYWdlIHRvIDAuIEdldCBpbmZpbml0ZSBkYXRhXHJcbiAgICAgIGlmIChldmVudC50ZXh0ICE9PSBudWxsICYmIGV2ZW50LnRleHQgIT09IHRoaXMuaW5maW5pdGVTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbFBhZ2VObyA9IDA7XHJcbiAgICAgICAgdGhpcy5tb2RlbHpEYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRJbmZpbml0ZURhdGEoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFJlc2V0IHNjcm9sbCBwYWdlLCBlbXB0eSBpdGVtc1xyXG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsUGFnZU5vID0gMDtcclxuICAgICAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcyA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaWx0ZXIgekRhdGEgYW5kIHB1c2ggdG8gaXRlbXNcclxuICAgICAgY29uc3QgcGFyYW1zOiB6U2VsZWN0TXVsdGlwbGVQYXJhbXMgPSB7XHJcbiAgICAgICAgcmVmZXJJZDogbnVsbCxcclxuICAgICAgICBwYWdlTm86IDAsXHJcbiAgICAgICAgcGFnZVNpemU6IDIwLFxyXG4gICAgICAgIHNvcnRDb2x1bW5OYW1lOiBcIlwiLFxyXG4gICAgICAgIHNvcnRPcmRlcjogXCJcIixcclxuICAgICAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgICAgIHNvcnRPcmRlcnM6IFtdLFxyXG4gICAgICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICAgICAgcGFyYW1ldGVyczogXCJcIlxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gdGhpcy5kYXRhLlNlYXJjaEZpZWxkcyA/IHRoaXMuZGF0YS5TZWFyY2hGaWVsZHMgOiB0aGlzLml0ZW1UZXh0RmllbGQ7XHJcbiAgICAgIGNvbnN0IGZpbHRlcml0ZW1zID0gWkNvbXBvbmVudEhlbHBlci5maWx0ZXJTZWFyY2hJdGVtcyhcclxuICAgICAgICB0aGlzLmdldEl0ZW1zRGF0YSgpLFxyXG4gICAgICAgIGV2ZW50LnRleHQsXHJcbiAgICAgICAgc2VhcmNoRmllbGRzLFxyXG4gICAgICAgIHBhcmFtcy5wYWdlTm8sXHJcbiAgICAgICAgcGFyYW1zLnBhZ2VTaXplXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChjb21wb25lbnQpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGNvbXBvbmVudC5pdGVtcy5jb25jYXQoZmlsdGVyaXRlbXMpO1xyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIGNvbXBvbmVudC5lbmRJbmZpbml0ZVNjcm9sbCgpO1xyXG4gICAgICAgIGNvbXBvbmVudC5lbmRTZWFyY2goKTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWx0ZXIodmFsdWU6IGFueSwganVzdE9uZVRpbWU/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5kZWJvdW5jZVN1Yikge1xyXG4gICAgICB0aGlzLmRlYm91bmNlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2tpcCBmaWx0ZXJpbmcgaWYgaGF2ZSBpbmlmaW5pdGVzY3JvbGw/XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCkge1xyXG4gICAgICB0aGlzLmRlYm91bmNlU3ViID0gb2YoW10pXHJcbiAgICAgICAgLnBpcGUodGFwKCgpID0+ICh0aGlzLmlzTG9hZGluZyA9IHRydWUpKSwgZGVsYXkoNTAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMub25TZWFyY2goeyBjb21wb25lbnQ6IG51bGwsIHRleHQ6IHZhbHVlIH0pO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMubG9hZEluZmluaXRlRGF0YVN1Yikge1xyXG4gICAgLy8gICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMubG9hZEluZmluaXRlRGF0YVN1YiA9IG5ldyBTdWJqZWN0KGZhbHNlKTtcclxuICAgIC8vIHRoaXMuaGFuZGxlRmlsdGVyKG51bGwpO1xyXG4gICAgLy8gaW50ZXJ2YWwoMjAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgIC8vICAgdGhpcy5vblNlYXJjaCh7IGNvbXBvbmVudDogbnVsbCwgdGV4dDogdmFsdWUgfSk7XHJcbiAgICAvLyAgIGlmIChqdXN0T25lVGltZSkge1xyXG4gICAgLy8gICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPcGVuKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgICAgLy8gICAvLyBpZiAodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSB7XHJcbiAgICAgIC8vICAgLy8gICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgLy8gICAvLyB9XHJcbiAgICAgIC8vICAgLy8gdGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgLy8gICAvLyAvLyB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgICAgLy8gICAvLyBpbnRlcnZhbCgzMDAwKS5waXBlKHRha2VVbnRpbCh0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyAgIC8vIHRoaXMuaGFuZGxlRmlsdGVyKG51bGwpO1xyXG4gICAgICAvLyAgIC8vIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsKSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIpIHtcclxuICAgIC8vICAgICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICAvLyB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIuY29tcGxldGUoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQmx1cigpIHtcclxuICAgIC8vIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtVGVtcGxhdGUoXHJcbiAgICBpdGVtOiBhbnksXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBncm91cDogYW55LFxyXG4gICAgaXRlbVZhbHVlRmllbGQ6IHN0cmluZyxcclxuICAgIGl0ZW1UZXh0RmllbGQ6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgLy8gVG9ETzogaXRlbVZhbHVlRmllbGQgYW5kIGl0ZW1UZXh0RmllbGRcclxuICAgIGlmICh0aGlzLmRhdGEuSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGdldFRlbXBsYXRlRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuSXRlbVRlbXBsYXRlKTtcclxuXHJcbiAgICAgIHJldHVybiBnZXRUZW1wbGF0ZUZ1bmMoe1xyXG4gICAgICAgIGl0ZW0sXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBncm91cCxcclxuICAgICAgICBpdGVtVmFsdWVGaWVsZCxcclxuICAgICAgICBpdGVtVGV4dEZpZWxkXHJcbiAgICAgIH0gYXMgWlNlbGVjdE11bHRpcGxlVGVtcGxhdGVQYXJhbXMpO1xyXG4gICAgfSBlbHNlIGlmIChpdGVtVGV4dEZpZWxkKSB7XHJcbiAgICAgIHJldHVybiBpdGVtW2l0ZW1UZXh0RmllbGRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gcmV0dXJuIGl0ZW1baXRlbVRleHRGaWVsZF07XHJcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQWRkSXRlbShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkFkZEl0ZW0pO1xyXG4gICAgaWYgKHR5cGVvZiBmID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZi5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKCk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZGVjbGFyYXRpb24gb2YgT25BZGRJdGVtOiAnLCBmKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIENvbXBvbmVudCBiYXNpYyBmdW5jdGlvblxyXG4gIGNsZWFyRGF0YSgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIFwiXCIsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJJdGVtcygpIHtcclxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmNsZWFyKCk7XHJcbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudC5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUl0ZW1zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQuY29uZmlybSgpO1xyXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUl0ZW1zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQudG9nZ2xlSXRlbXModGhpcy50b2dnbGVTZWxlY3RhYmxlKTtcclxuICAgIHRoaXMudG9nZ2xlU2VsZWN0YWJsZSA9ICF0aGlzLnRvZ2dsZVNlbGVjdGFibGU7XHJcblxyXG4gICAgLy8gQ29uZmlybSBpdGVtcyBhbmQgY2xvc2UgU2VsZWN0IHBhZ2VcclxuICAgIC8vIHdpdGhvdXQgaGF2aW5nIHRoZSB1c2VyIHRvIGNsaWNrIENvbmZpcm0gYnV0dG9uLlxyXG4gICAgLy8gdGhpcy5jb25maXJtKCk7XHJcbiAgfVxyXG5cclxuICAvLyBEaXNhYmxlIE9wZW4gT24gRm9jdXNcclxuICBkaXNhYmxlT3Blbk9uRm9jdXMoY29tYm9ib3hDb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EaXNhYmxlT3Blbk9uRm9jdXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGNvbWJvYm94Q29tcG9uZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT25DaGFuZ2VcclxuICBwdWJsaWMgb25DaGFuZ2VfZGVza3RvcChldmVudDogYW55KSB7XHJcbiAgICBzdXBlci5vbkNoYW5nZShudWxsLCBldmVudClcclxuICAgIHRoaXMuaGFuZGxlSW5maW5pdGVTY3JvbGxPbkNoYW5nZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VfbW9iaWxlKGV2ZW50OiB7IGNvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50OyB2YWx1ZTogYW55IH0pIHtcclxuICAgIHN1cGVyLm9uQ2hhbmdlKGV2ZW50KVxyXG4gICAgY29uc3QgZmMgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHN1cGVyLmdldElzUmVxdWlyZWRWYWx1ZSgpICYmIChldmVudC52YWx1ZSA9PT0gbnVsbCB8fCBldmVudC52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICApIHtcclxuICAgICAgZmMuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmYy5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oYW5kbGVJbmZpbml0ZVNjcm9sbE9uQ2hhbmdlKGV2ZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlSW5maW5pdGVTY3JvbGxPbkNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsICYmICEhdGhpcy5kYXRhLkluZmluaXRlU2Nyb2xsJCkge1xyXG4gICAgICBjb25zdCB0ZXh0RmllbGQgPSB0aGlzLml0ZW1UZXh0RmllbGQudG9TdHJpbmcoKTtcclxuICAgICAgY29uc3QgdmFsdWVGaWVsZCA9IHRoaXMuaXRlbVZhbHVlRmllbGQudG9TdHJpbmcoKTtcclxuICAgICAgbGV0IHpkYXRhTW9kZWwgPSBbXTtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgemRhdGFNb2RlbCA9IHRoaXMuaW5maW5pdGV6RGF0YS5maWx0ZXIoeCA9PiB4W3ZhbHVlRmllbGRdID09PSB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbHpEYXRhID0gemRhdGFNb2RlbC5zbGljZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLml0ZW1EYXRhRmllbGQuc3RhcnRzV2l0aCgnZ3JvdXAuekRhdGEuJykpIHtcclxuICAgICAgICB0aGlzLmdyb3VwLnpEYXRhW3RoaXMuaXRlbURhdGFGaWVsZC5zbGljZSgxMildID0gemRhdGFNb2RlbDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW1EYXRhRmllbGQuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgICB0aGlzLmdyb3VwW3RoaXMuaXRlbURhdGFGaWVsZC5zbGljZSg2KV0gPSB6ZGF0YU1vZGVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNdWx0aSBTZWxlY3Rpb24gVHJlZVxyXG4gIHB1YmxpYyBnZXQgZmlsdGVyRXhwYW5kU2V0dGluZ3MoKTogRmlsdGVyRXhwYW5kU2V0dGluZ3Mge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXhwYW5kTWF0Y2hlczogdHJ1ZSxcclxuICAgICAgZXhwYW5kZWRPbkNsZWFyOiBcImluaXRpYWxcIlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0NoaWxkcmVuID0gKGRhdGFpdGVtOiBhbnkpOiBib29sZWFuID0+ICEhZGF0YWl0ZW1bJ2l0ZW1zJ107XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNdWx0aVNlbGVjdFRyZWVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXJzZWRJdGVtc0RhdGEgPSB0aGlzLm9uTXVsdGlTZWxlY3RUcmVlU2VhcmNoKHRoaXMuZ2V0SXRlbXNEYXRhKCksIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk11bHRpU2VsZWN0VHJlZVNlYXJjaChpdGVtczogYW55W10sIHNlYXJjaGVkVGV4dDogc3RyaW5nKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGl0ZW1bdGhpcy5pdGVtVGV4dEZpZWxkXSwgc2VhcmNoZWRUZXh0KSkge1xyXG4gICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGl0ZW1bJ2l0ZW1zJ10gJiYgaXRlbVsnaXRlbXMnXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLm9uTXVsdGlTZWxlY3RUcmVlU2VhcmNoKGl0ZW1bJ2l0ZW1zJ10sIHNlYXJjaGVkVGV4dCk7XHJcblxyXG4gICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBfaXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xyXG4gICAgICAgICAgX2l0ZW1bJ2l0ZW1zJ10gPSBuZXdJdGVtcztcclxuXHJcbiAgICAgICAgICBhY2MucHVzaChfaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnRhaW5zKHRleHQ6IHN0cmluZywgc2VhcmNoZWRUZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaGVkVGV4dCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cInpzZWxlY3RtdWx0aXBsZS1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxpb25pYy1zZWxlY3RhYmxlICpuZ0lmPVwiaXNNb2JpbGVTY3JlZW4oKVwiICNzZWxlY3RDb21wb25lbnQgaXRlbS1jb250ZW50IHNlYXJjaEZhaWxUZXh0PVwiTm90aGluZyBmb3VuZCA6KFwiXHJcbiAgICBoZWFkZXJDb2xvcj1cInByaW1hcnlcIiBjbGVhckJ1dHRvblRleHQ9XCJDbGVhclwiIFsobmdNb2RlbCldPVwiZ3JvdXAuek1vZGVsW2RhdGEuVmFsdWVdXCIgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgW2l0ZW1zXT1cImdldEl0ZW1zRGF0YSgpXCIgW2l0ZW1WYWx1ZUZpZWxkXT1cIml0ZW1WYWx1ZUZpZWxkXCIgW2l0ZW1UZXh0RmllbGRdPVwiaXRlbVRleHRGaWVsZFwiXHJcbiAgICBbY2FuQWRkSXRlbV09XCIhIWRhdGEuT25BZGRJdGVtXCIgW2NhbkNsZWFyXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICBbY2FuU2VhcmNoXT1cIiFkYXRhWydkaXNhYmxlLXNlYXJjaCddXCIgW3Nob3VsZEZvY3VzU2VhcmNoYmFyXT1cIiFkYXRhWydkaXNhYmxlLXNlYXJjaCddXCJcclxuICAgIFtoYXNJbmZpbml0ZVNjcm9sbF09XCIhIWRhdGEuSGFzSW5maW5pdGVTY3JvbGxcIiBbaXNNdWx0aXBsZV09XCJkYXRhLk11bHRpcGxlXCJcclxuICAgIFtpc0VuYWJsZWRdPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICBbc2hvdWxkU3RvcmVJdGVtVmFsdWVdPVwidHJ1ZVwiIChvblNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgKG9uSW5maW5pdGVTY3JvbGwpPVwiZ2V0SW5maW5pdGVEYXRhKCRldmVudClcIlxyXG4gICAgKG9uQWRkSXRlbSk9XCJvbkFkZEl0ZW0oJGV2ZW50KVwiIChvbkNoYW5nZSk9XCJvbkNoYW5nZV9tb2JpbGUoJGV2ZW50KVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiZTF0YWctc3R5bGUxXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGlvbmljU2VsZWN0YWJsZUl0ZW1JY29uVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWlzSXRlbVNlbGVjdGVkPVwiaXNJdGVtU2VsZWN0ZWRcIj5cclxuICAgICAgPGZhLWljb24gc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJpc0l0ZW1TZWxlY3RlZCBlMXRhZy1zdHlsZTJcIiBzaXplPVwic21cIiBbaWNvbl09XCJbJ2ZhcicsIGlzSXRlbVNlbGVjdGVkID8gJ2NoZWNrLWNpcmNsZSc6ICdjaXJjbGUnXVwiXHJcbiAgICAgICAgW3N0eWxlc109XCJ7J2NvbG9yJzogaXNJdGVtU2VsZWN0ZWQgPyAnZG9kZ2VyQmx1ZScgOiAnbGlnaHRHcmF5J31cIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIj48L2ZhLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBpb25pY1NlbGVjdGFibGVDbG9zZUJ1dHRvblRlbXBsYXRlPlxyXG4gICAgICA8IS0tIDxpb24taWNvbiBuYW1lPVwiY2xvc2UtY2lyY2xlXCI+PC9pb24taWNvbj4gLS0+XHJcbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcy1jaXJjbGUnXCIgc2l6ZT1cIm1kXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIj48L2ZhLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBpb25pY1NlbGVjdGFibGVUaXRsZVRlbXBsYXRlPlxyXG4gICAgICA8c3BhbiBjbGFzcz1lMXRhZy1zdHlsZTQgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCI+e3tkYXRhLkxhYmVsfX08L3NwYW4+XHJcbiAgICAgIDxpb24tdGV4dCAqbmdJZj1cImdldElzUmVxdWlyZWRWYWx1ZSgpXCIgY29sb3I9XCJkYW5nZXJcIj4qPC9pb24tdGV4dD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGlvbmljU2VsZWN0YWJsZUl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlMXRhZy1zdHlsZTVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIj57eyBnZXRJdGVtVGVtcGxhdGUoaXRlbSwgZGF0YSwgZ3JvdXAsIGl0ZW1WYWx1ZUZpZWxkLCBpdGVtVGV4dEZpZWxkKSB9fTwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9pb25pYy1zZWxlY3RhYmxlPlxyXG4gIDxrZW5kby1jb21ib2JveCAqbmdJZj1cIiFpc01vYmlsZVNjcmVlbigpICYmICFkYXRhLk11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAjY29tYm9ib3hDb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0SXRlbXNEYXRhKCkgfCB6c2VsZWN0VHJhbnNsYXRpb25QYXJzZXIgOiBpdGVtVGV4dEZpZWxkIDogZGF0YSA6IGdyb3VwIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJpdGVtVmFsdWVGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0RmllbGRdPVwiaXRlbVRleHRGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbYWxsb3dDdXN0b21dPVwiYWxsb3dDdXN0b21WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb0Ryb3BEb3duRmlsdGVyXT1cImZpbHRlclNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgW3N1Z2dlc3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbb3Blbk9uRm9jdXNdPVwiZGlzYWJsZU9wZW5PbkZvY3VzKGNvbWJvYm94Q29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJyA6ICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KX1cIlxyXG4gICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2VfZGVza3RvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2aXJ0dWFsXT1cInZpcnR1YWxcIlxyXG4gICAgICAgICAgICAgICAgICAob3Blbik9XCJoYW5kbGVPcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xvc2UpPVwiaGFuZGxlQ2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvQ29tYm9Cb3hJdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPnt7IGdldEl0ZW1UZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGl0ZW1WYWx1ZUZpZWxkLCBpdGVtVGV4dEZpZWxkKSB9fTwvc3Bhbj5cclxuICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInRlbXBsYXRlXCI+e3sgZGF0YUl0ZW0udmFsdWUgfX08L3NwYW4+IHt7IGRhdGFJdGVtLnRleHQgfX0gLS0+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tY29tYm9ib3g+XHJcbiAgPGtlbmRvLW11bHRpc2VsZWN0ICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgJiYgZGF0YS5NdWx0aXBsZSAmJiAhZGF0YS5FbmFibGVDaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdldEl0ZW1zRGF0YSgpIHwgenNlbGVjdFRyYW5zbGF0aW9uUGFyc2VyIDogaXRlbVRleHRGaWVsZCA6IGRhdGEgOiBncm91cCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJpdGVtVmFsdWVGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tXT1cImFsbG93Q3VzdG9tVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2JveGVzXT1cImRhdGEuRW5hYmxlQ2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJhdXRvQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtrZW5kb0Ryb3BEb3duRmlsdGVyXT1cImZpbHRlclNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJyA6ICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiaGFuZGxlRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvcGVuKT1cImhhbmRsZU9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9NdWx0aVNlbGVjdEl0ZW1UZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZTF0YWctc3R5bGU1XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCI+e3sgZ2V0SXRlbVRlbXBsYXRlKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgaXRlbVZhbHVlRmllbGQsIGl0ZW1UZXh0RmllbGQpIH19PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLW11bHRpc2VsZWN0PlxyXG5cclxuICA8a2VuZG8tbXVsdGlzZWxlY3R0cmVlICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgJiYgZGF0YS5NdWx0aXBsZSAmJiBkYXRhLkVuYWJsZUNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2VuZG9NdWx0aVNlbGVjdFRyZWVFeHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtrZW5kb011bHRpU2VsZWN0VHJlZUhpZXJhcmNoeUJpbmRpbmddPVwiZ2V0SXRlbXNEYXRhKCkgfCB6c2VsZWN0VHJhbnNsYXRpb25QYXJzZXIgOiBpdGVtVGV4dEZpZWxkIDogZGF0YSA6IGdyb3VwIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJpdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhc0NoaWxkcmVuXT1cImhhc0NoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZpZWxkXT1cIml0ZW1UZXh0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cIml0ZW1WYWx1ZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlX2Rlc2t0b3AoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtc109XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiYXV0b0Nsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZXhwYW5kT25GaWx0ZXJdPVwiZmlsdGVyRXhwYW5kU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiaGFuZGxlTXVsdGlTZWxlY3RUcmVlRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnIDogKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4pPVwiaGFuZGxlT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2UpPVwiaGFuZGxlQ2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9NdWx0aVNlbGVjdFRyZWVOb0RhdGFUZW1wbGF0ZT5cclxuICAgICAgICAgIDxoND5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+PGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgIE5vIHJlY29yZCBmb3VuZC5cclxuICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9rZW5kby1tdWx0aXNlbGVjdHRyZWU+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Pipe } from "@angular/core";
|
|
2
|
+
import { of, map } from "rxjs";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "mmhglobal-zcore";
|
|
5
|
+
export class ZSelectTranslationParser {
|
|
6
|
+
constructor(translationService) {
|
|
7
|
+
this.translationService = translationService;
|
|
8
|
+
}
|
|
9
|
+
transform(value, itemTextField, data, group) {
|
|
10
|
+
if (data.IsTranslationEnabled) {
|
|
11
|
+
const $translatedValue = this.translationService.$translateItemList(value, itemTextField, { group: group })
|
|
12
|
+
.pipe(map(() => value));
|
|
13
|
+
return $translatedValue;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return of(value);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
ZSelectTranslationParser.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZSelectTranslationParser, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
21
|
+
ZSelectTranslationParser.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZSelectTranslationParser, name: "zselectTranslationParser" });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZSelectTranslationParser, decorators: [{
|
|
23
|
+
type: Pipe,
|
|
24
|
+
args: [{
|
|
25
|
+
name: "zselectTranslationParser",
|
|
26
|
+
pure: true,
|
|
27
|
+
}]
|
|
28
|
+
}], ctorParameters: function () { return [{ type: i1.TranslationService }]; } });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNlbGVjdG11bHRpcGxlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96c2VsZWN0bXVsdGlwbGUvenNlbGVjdG11bHRpcGxlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxHQUFHLEVBQWEsTUFBTSxNQUFNLENBQUM7OztBQU10RCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQUksQ0FBQztJQUUvRCxTQUFTLENBQUMsS0FBVSxFQUFFLGFBQXFCLEVBQUUsSUFBWSxFQUFFLEtBQWE7UUFDdEUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDeEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sZ0JBQWdCLENBQUM7U0FDekI7YUFDSTtZQUNILE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7c0hBWlUsd0JBQXdCO29IQUF4Qix3QkFBd0I7NEZBQXhCLHdCQUF3QjtrQkFKcEMsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxJQUFJLEVBQUUsSUFBSTtpQkFDWCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UsIFpGaWVsZCwgWkdyb3VwIH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6IFwienNlbGVjdFRyYW5zbGF0aW9uUGFyc2VyXCIsXHJcbiAgcHVyZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFpTZWxlY3RUcmFuc2xhdGlvblBhcnNlciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UpIHsgfVxyXG5cclxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgaXRlbVRleHRGaWVsZDogc3RyaW5nLCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgaWYgKGRhdGEuSXNUcmFuc2xhdGlvbkVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgJHRyYW5zbGF0ZWRWYWx1ZSA9IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLiR0cmFuc2xhdGVJdGVtTGlzdCh2YWx1ZSwgaXRlbVRleHRGaWVsZCwgeyBncm91cDogZ3JvdXAgfSlcclxuICAgICAgICAucGlwZShtYXAoKCkgPT4gdmFsdWUpKTtcclxuICAgICAgcmV0dXJuICR0cmFuc2xhdGVkVmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|