@decaf-ts/for-angular 0.0.18 → 0.0.20
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 +2 -2
- package/components/crud-form/crud-form.component.d.ts +1 -1
- package/components/fieldset/fieldset.component.d.ts +1 -1
- package/components/filter/filter.component.d.ts +1 -1
- package/components/for-angular-components.module.d.ts +1 -2
- package/components/list/constants.d.ts +5 -9
- package/components/list-item/list-item.component.d.ts +1 -1
- package/engine/NgxBaseComponent.d.ts +1 -1
- package/esm2022/components/component-renderer/component-renderer.component.mjs +7 -7
- package/esm2022/components/crud-field/crud-field.component.mjs +13 -12
- package/esm2022/components/crud-form/crud-form.component.mjs +9 -9
- package/esm2022/components/empty-state/empty-state.component.mjs +8 -12
- package/esm2022/components/fieldset/fieldset.component.mjs +27 -19
- package/esm2022/components/filter/filter.component.mjs +14 -13
- package/esm2022/components/for-angular-components.module.mjs +17 -9
- package/esm2022/components/layout/layout.component.mjs +6 -7
- package/esm2022/components/list/constants.mjs +1 -1
- package/esm2022/components/list/list.component.mjs +6 -11
- package/esm2022/components/list-item/list-item.component.mjs +7 -12
- package/esm2022/components/model-renderer/model-renderer.component.mjs +5 -7
- package/esm2022/components/pagination/pagination.component.mjs +8 -9
- package/esm2022/components/searchbar/searchbar.component.mjs +5 -7
- package/esm2022/directives/collapsable.directive.mjs +3 -3
- package/esm2022/engine/NgxBaseComponent.mjs +11 -10
- package/esm2022/engine/NgxFormService.mjs +12 -3
- package/esm2022/engine/NgxRenderingEngine.mjs +3 -2
- package/esm2022/for-angular-common.module.mjs +82 -0
- package/esm2022/helpers/utils.mjs +2 -2
- package/esm2022/i18n/Loader.mjs +10 -6
- package/esm2022/i18n/data/en.json +80 -0
- package/esm2022/public-apis.mjs +3 -2
- package/fesm2022/decaf-ts-for-angular.mjs +254 -170
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
- package/for-angular-common.module.d.ts +44 -0
- package/package.json +6 -3
- package/public-apis.d.ts +2 -1
- package/esm2022/for-angular.module.mjs +0 -118
- package/for-angular.module.d.ts +0 -45
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { ForAngularModule } from '../../for-angular.module';
|
|
4
3
|
import { NgxBaseComponent } from '../../engine/NgxBaseComponent';
|
|
5
|
-
import { IonChip, IonIcon, IonItem, IonLabel, IonSelect } from '@ionic/angular/standalone';
|
|
4
|
+
import { IonButton, IonChip, IonIcon, IonItem, IonLabel, IonSelect, IonSelectOption } from '@ionic/angular/standalone';
|
|
6
5
|
import { Dynamic } from '../../engine';
|
|
7
6
|
import { getWindowWidth, isDarkMode } from '../../helpers/utils';
|
|
8
7
|
import { debounceTime, fromEvent } from 'rxjs';
|
|
@@ -10,11 +9,10 @@ import { OrderDirection, Repository } from '@decaf-ts/core';
|
|
|
10
9
|
import { SearchbarComponent } from '../searchbar/searchbar.component';
|
|
11
10
|
import { addIcons } from 'ionicons';
|
|
12
11
|
import { chevronDownOutline, chevronUpOutline } from 'ionicons/icons';
|
|
12
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
13
|
+
import { FormsModule } from '@angular/forms';
|
|
13
14
|
import * as i0 from "@angular/core";
|
|
14
|
-
import * as i1 from "@
|
|
15
|
-
import * as i2 from "@angular/common";
|
|
16
|
-
import * as i3 from "@angular/forms";
|
|
17
|
-
import * as i4 from "@ngx-translate/core";
|
|
15
|
+
import * as i1 from "@angular/forms";
|
|
18
16
|
/**
|
|
19
17
|
* @description Advanced filter component for creating dynamic search filters with step-by-step construction.
|
|
20
18
|
* @summary This component provides a comprehensive filtering interface that allows users to build
|
|
@@ -54,7 +52,7 @@ import * as i4 from "@ngx-translate/core";
|
|
|
54
52
|
* F->>P: Emit filterEvent with new filter array
|
|
55
53
|
* F->>F: Reset to step 1 for next filter
|
|
56
54
|
*
|
|
57
|
-
* @memberOf
|
|
55
|
+
* @memberOf ForAngularCommonModule
|
|
58
56
|
*/
|
|
59
57
|
let FilterComponent = class FilterComponent extends NgxBaseComponent {
|
|
60
58
|
/**
|
|
@@ -660,26 +658,29 @@ let FilterComponent = class FilterComponent extends NgxBaseComponent {
|
|
|
660
658
|
handleSearch(value) {
|
|
661
659
|
this.searchEvent.emit(value);
|
|
662
660
|
}
|
|
663
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
664
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, isStandalone: true, selector: "ngx-decaf-filter", inputs: { indexes: "indexes", conditions: "conditions", sortBy: "sortBy", disableSort: "disableSort" }, outputs: { filterEvent: "filterEvent", searchEvent: "searchEvent" }, viewQueries: [{ propertyName: "optionsFilterElement", first: true, predicate: ["optionsFilterElement"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "\n@if(!indexes.length) {\n <ngx-decaf-searchbar [emitEventToWindow]=\"false\" [debounce]=\"500\" (searchEvent)=\"handleSearch($event)\" />\n}\n\n<div [id]=\"uid\" class=\"dcf-grid dcf-grid-small dcf-grid-match dcf-filter-grid\" [ngClass]=\"{'dcf-hidden': !indexes.length}\">\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-filter\">\n <div class=\"dcf-input\">\n @for(filter of filterValue; track trackItemFn($index, filter?.['index'])) {\n @if(filter?.['index']) {\n <ion-chip [outline]=\"true\">{{ filter?.['index'] }}</ion-chip>\n }\n @if(filter?.['condition']) {\n <ion-chip [outline]=\"true\">{{ filter?.['condition'] }}</ion-chip>\n }\n @if(filter?.['value']) {\n <ion-chip [outline]=\"true\" class=\"dcf-filter-value\">\n {{ filter?.['value'] }}\n <ion-icon name=\"close\" (click)=\"removeFilter(filter?.['value'])\" size=\"small\"></ion-icon>\n </ion-chip>\n }\n }\n <div class=\"dcf-width-1-1\">\n <!-- [readonly]=\"step !== 3\" -->\n <input\n fill=\"none\"\n [(ngModel)]=\"value\"\n (keydown.enter)=\"addFilter(value, $event)\"\n (keydown.backspace)=\"clear(value)\"\n (input)=\"handleInput($event)\"\n (click)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n type=\"text\"\n\n placeholder=\"{{ locale + (step === 3 ? '.type' : '.select') | translate }}\"\n #component\n />\n @if(windowWidth >= 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n @if(filterValue.length > 0) {\n <div class=\"dcf-icon-clear\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"clear()\">\n <ion-icon name=\"trash-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-icon-search\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"submit()\">\n <ion-icon name=\"search-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n </div>\n @if(windowWidth < 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n @if(!disableSort) {\n <div class=\"dcf-width-1-5@m dcf-width-1-1 dcf-sort-container\">\n <div class=\"dcf-grid dcf-grid-collapse dcf-flex dcf-flex-middle dcf-grid-match\">\n <div class=\"dcf-width-expand\">\n <ion-select\n toggleIcon=\"chevron-down-outline\"\n expandedIcon=\"chevron-up-outline\"\n class=\"dcf-sort-select\"\n (ionChange)=\"handleSortChange($event)\"\n interface=\"popover\"\n [value]=\"sortValue\"\n label-placement=\"floating\"\n fill=\"outline\"\n [label]=\"locale + '.sort' | translate\"\n >\n @for(sort of sortBy; track sort) {\n\n <ion-select-option [value]=\"sort\">{{ sort | translate }}</ion-select-option>\n }\n </ion-select>\n </div>\n <div class=\"dcf-width-auto\">\n <ion-button (click)=\"handleSortDirectionChange()\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" [color]=\"!isDarkMode ? 'primary' : 'medium'\" [name]=\"sortDirection === 'desc' ? 'arrow-down-outline' : 'arrow-up-outline'\"></ion-icon>\n </ion-button>\n </div>\n </div>\n </div>\n }\n</div>\n\n\n", styles: [".dcf-filter-grid{padding:0 .5rem;margin-top:.75rem;margin-bottom:.75rem}ion-select{min-height:44px!important}.dcf-hidden{display:none!important}.dcf-filter{display:flex;width:100%;min-height:40px;box-shadow:0 1px 2px #0a0d120d;border-radius:var(--dcf-border-radius);box-sizing:border-box}@media (prefers-color-scheme: light){.dcf-filter{border:1px solid var(--dcf-color-gray-3);background-color:#fff}.dcf-filter:focus-within{border-color:var(--dcf-color-primary);background-color:#fff}}@media (prefers-color-scheme: dark){.dcf-filter{border:1px solid var(--dcf-color-step-500)}.dcf-filter ::-webkit-input-placeholder,.dcf-filter ::placeholder{color:var(--dcf-color-gray-4)!important}.dcf-filter:hover{border-color:var(--dcf-color-gray-2)}.dcf-filter:focus-within{border-color:var(--dcf-color-gray-2)}}.dcf-filter ion-chip{border-radius:6px;padding:0 8px!important;height:24px;min-height:24px;font-size:.75rem;font-style:normal;font-weight:500;flex-shrink:0;margin-right:2px;white-space:nowrap}@media (prefers-color-scheme: light){.dcf-filter ion-chip{border:1px solid var(--dcf-color-gray-3);color:var(--dcf-color-gray-7)}.dcf-filter ion-chip.dcf-filter-value{background:var(--dcf-color-gray-2);border-color:var(--dcf-color-gray-4)!important;color:var(--dcf-color-gray-8)!important}}@media (prefers-color-scheme: dark){.dcf-filter ion-chip{border-color:var(--dcf-color-step-300);background:rgba(var(--dcf-color-medium-rgb),.1)}.dcf-filter ion-chip.dcf-filter-value{background:rgba(var(--dcf-color-medium-rgb),.3)!important;border-color:var(--dcf-color-step-500)}}.dcf-filter ion-chip.sc-ion-chip-md-h,.dcf-filter ion-chip.sc-ion-chip-ios-h{height:24px;min-height:24px}.dcf-filter ion-chip.sc-ion-chip-md-h .chip-native,.dcf-filter ion-chip.sc-ion-chip-ios-h .chip-native{padding:0 8px!important;height:24px;min-height:24px}.dcf-filter ion-chip ion-label{padding:0 4px;margin:0;font-size:.75rem;white-space:nowrap}.dcf-filter ion-chip ion-icon{margin:0 2px;font-size:.75rem}.dcf-filter .dcf-input{width:100%;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-left:.5rem}.dcf-filter .dcf-input input{min-height:40px;min-width:100px;width:100%;font-size:1rem;border:none;outline:none;background:transparent;border:0px!important;outline:none!important}@media (prefers-color-scheme: light){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-7)}}@media (prefers-color-scheme: dark){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-1)}}.dcf-filter .dcf-input input:focus{border:0px!important;outline:none!important}.dcf-filter .dcf-icon-clear,.dcf-filter .dcf-icon-search{display:flex;justify-content:center;text-align:center;align-items:center;min-width:40px}.dcf-filter .dcf-icon-search ion-icon{font-size:1.25rem}.dcf-sort-container{min-width:200px!important;width:auto}@media (min-width: 990px){.dcf-sort-container{max-width:20%!important}}@media (max-width: 680px){.dcf-sort-container{min-width:100%!important;margin:.75rem 0rem}}.dcf-dropdown{position:absolute;max-height:200px;overflow-y:auto;border-radius:4px;z-index:1000!important;min-width:200px;max-width:300px;display:none}@media (prefers-color-scheme: light){.dcf-dropdown{background-color:#fff}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-gray-2)}}@media (prefers-color-scheme: dark){.dcf-dropdown{background-color:var(--dcf-item-background)}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-step-600)}}.dcf-dropdown.dcf-active{display:block;margin-top:-3px;box-shadow:0 12px 16px -4px #0a0d1214,0 4px 6px -2px #0a0d1208,0 2px 2px -1px #0a0d120a!important;border-radius:var(--dcf-border-radius);padding:.5rem .25rem}@media (max-width: 768px){.dcf-dropdown.dcf-active{margin-top:55px}}.dcf-dropdown.dcf-active>div>div{cursor:pointer;height:35px;padding:.5rem 1rem;border:1px solid transparent;font-size:1rem;display:flex;align-items:center;border-radius:6px}@media (prefers-color-scheme: light){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-8)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-3)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{pointer-events:none;touch-action:none;cursor:text!important;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-1)}}@media (prefers-color-scheme: dark){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-1)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-5)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{cursor:text!important;pointer-events:none;touch-action:none;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-8)}}\n"], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "component", type: IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: SearchbarComponent, selector: "ngx-decaf-searchbar", inputs: ["autocomplete", "autocorrect", "animated", "buttonCancelText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value", "queryKeys", "isVisible", "wrapper", "wrapperColor", "emitEventToWindow"], outputs: ["searchEvent"] }] }); }
|
|
661
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
662
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FilterComponent, isStandalone: true, selector: "ngx-decaf-filter", inputs: { indexes: "indexes", conditions: "conditions", sortBy: "sortBy", disableSort: "disableSort" }, outputs: { filterEvent: "filterEvent", searchEvent: "searchEvent" }, viewQueries: [{ propertyName: "optionsFilterElement", first: true, predicate: ["optionsFilterElement"], descendants: true, read: ElementRef }], usesInheritance: true, ngImport: i0, template: "\n@if(!indexes.length) {\n <ngx-decaf-searchbar [emitEventToWindow]=\"false\" [debounce]=\"500\" (searchEvent)=\"handleSearch($event)\" />\n}\n\n<div [id]=\"uid\" class=\"dcf-grid dcf-grid-small dcf-grid-match dcf-filter-grid\" [class.dcf-hidden]=\"!indexes.length\">\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-filter\">\n <div class=\"dcf-input\">\n @for(filter of filterValue; track trackItemFn($index, filter?.['index'])) {\n @if(filter?.['index']) {\n <ion-chip [outline]=\"true\">{{ filter?.['index'] }}</ion-chip>\n }\n @if(filter?.['condition']) {\n <ion-chip [outline]=\"true\">{{ filter?.['condition'] }}</ion-chip>\n }\n @if(filter?.['value']) {\n <ion-chip [outline]=\"true\" class=\"dcf-filter-value\">\n {{ filter?.['value'] }}\n <ion-icon name=\"close\" (click)=\"removeFilter(filter?.['value'])\" size=\"small\"></ion-icon>\n </ion-chip>\n }\n }\n <div class=\"dcf-width-1-1\">\n <!-- [readonly]=\"step !== 3\" -->\n <input\n fill=\"none\"\n [(ngModel)]=\"value\"\n (keydown.enter)=\"addFilter(value, $event)\"\n (keydown.backspace)=\"clear(value)\"\n (input)=\"handleInput($event)\"\n (click)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n type=\"text\"\n\n placeholder=\"{{ locale + (step === 3 ? '.type' : '.select') | translate }}\"\n #component\n />\n @if(windowWidth >= 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n @if(filterValue.length > 0) {\n <div class=\"dcf-icon-clear\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"clear()\">\n <ion-icon name=\"trash-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-icon-search\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"submit()\">\n <ion-icon name=\"search-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n </div>\n @if(windowWidth < 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n @if(!disableSort) {\n <div class=\"dcf-width-1-5@m dcf-width-1-1 dcf-sort-container\">\n <div class=\"dcf-grid dcf-grid-collapse dcf-flex dcf-flex-middle dcf-grid-match\">\n <div class=\"dcf-width-expand\">\n <ion-select\n toggleIcon=\"chevron-down-outline\"\n expandedIcon=\"chevron-up-outline\"\n class=\"dcf-sort-select\"\n (ionChange)=\"handleSortChange($event)\"\n interface=\"popover\"\n [value]=\"sortValue\"\n label-placement=\"floating\"\n fill=\"outline\"\n [label]=\"locale + '.sort' | translate\"\n >\n @for(sort of sortBy; track sort) {\n\n <ion-select-option [value]=\"sort\">{{ sort | translate }}</ion-select-option>\n }\n </ion-select>\n </div>\n <div class=\"dcf-width-auto\">\n <ion-button (click)=\"handleSortDirectionChange()\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" [color]=\"!isDarkMode ? 'primary' : 'medium'\" [name]=\"sortDirection === 'desc' ? 'arrow-down-outline' : 'arrow-up-outline'\"></ion-icon>\n </ion-button>\n </div>\n </div>\n </div>\n }\n</div>\n\n\n", styles: [".dcf-filter-grid{padding:0 .5rem;margin-top:.75rem;margin-bottom:.75rem}ion-select{min-height:44px!important}.dcf-hidden{display:none!important}.dcf-filter{display:flex;width:100%;min-height:40px;box-shadow:0 1px 2px #0a0d120d;border-radius:var(--dcf-border-radius);box-sizing:border-box}@media (prefers-color-scheme: light){.dcf-filter{border:1px solid var(--dcf-color-gray-3);background-color:#fff}.dcf-filter:focus-within{border-color:var(--dcf-color-primary);background-color:#fff}}@media (prefers-color-scheme: dark){.dcf-filter{border:1px solid var(--dcf-color-step-500)}.dcf-filter ::-webkit-input-placeholder,.dcf-filter ::placeholder{color:var(--dcf-color-gray-4)!important}.dcf-filter:hover{border-color:var(--dcf-color-gray-2)}.dcf-filter:focus-within{border-color:var(--dcf-color-gray-2)}}.dcf-filter ion-chip{border-radius:6px;padding:0 8px!important;height:24px;min-height:24px;font-size:.75rem;font-style:normal;font-weight:500;flex-shrink:0;margin-right:2px;white-space:nowrap}@media (prefers-color-scheme: light){.dcf-filter ion-chip{border:1px solid var(--dcf-color-gray-3);color:var(--dcf-color-gray-7)}.dcf-filter ion-chip.dcf-filter-value{background:var(--dcf-color-gray-2);border-color:var(--dcf-color-gray-4)!important;color:var(--dcf-color-gray-8)!important}}@media (prefers-color-scheme: dark){.dcf-filter ion-chip{border-color:var(--dcf-color-step-300);background:rgba(var(--dcf-color-medium-rgb),.1)}.dcf-filter ion-chip.dcf-filter-value{background:rgba(var(--dcf-color-medium-rgb),.3)!important;border-color:var(--dcf-color-step-500)}}.dcf-filter ion-chip.sc-ion-chip-md-h,.dcf-filter ion-chip.sc-ion-chip-ios-h{height:24px;min-height:24px}.dcf-filter ion-chip.sc-ion-chip-md-h .chip-native,.dcf-filter ion-chip.sc-ion-chip-ios-h .chip-native{padding:0 8px!important;height:24px;min-height:24px}.dcf-filter ion-chip ion-label{padding:0 4px;margin:0;font-size:.75rem;white-space:nowrap}.dcf-filter ion-chip ion-icon{margin:0 2px;font-size:.75rem}.dcf-filter .dcf-input{width:100%;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-left:.5rem}.dcf-filter .dcf-input input{min-height:40px;min-width:100px;width:100%;font-size:1rem;border:none;outline:none;background:transparent;border:0px!important;outline:none!important}@media (prefers-color-scheme: light){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-7)}}@media (prefers-color-scheme: dark){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-1)}}.dcf-filter .dcf-input input:focus{border:0px!important;outline:none!important}.dcf-filter .dcf-icon-clear,.dcf-filter .dcf-icon-search{display:flex;justify-content:center;text-align:center;align-items:center;min-width:40px}.dcf-filter .dcf-icon-search ion-icon{font-size:1.25rem}.dcf-sort-container{min-width:200px!important;width:auto}@media (min-width: 990px){.dcf-sort-container{max-width:20%!important}}@media (max-width: 680px){.dcf-sort-container{min-width:100%!important;margin:.75rem 0rem}}.dcf-dropdown{position:absolute;max-height:200px;overflow-y:auto;border-radius:4px;z-index:1000!important;min-width:200px;max-width:300px;display:none}@media (prefers-color-scheme: light){.dcf-dropdown{background-color:#fff}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-gray-2)}}@media (prefers-color-scheme: dark){.dcf-dropdown{background-color:var(--dcf-item-background)}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-step-600)}}.dcf-dropdown.dcf-active{display:block;margin-top:-3px;box-shadow:0 12px 16px -4px #0a0d1214,0 4px 6px -2px #0a0d1208,0 2px 2px -1px #0a0d120a!important;border-radius:var(--dcf-border-radius);padding:.5rem .25rem}@media (max-width: 768px){.dcf-dropdown.dcf-active{margin-top:55px}}.dcf-dropdown.dcf-active>div>div{cursor:pointer;height:35px;padding:.5rem 1rem;border:1px solid transparent;font-size:1rem;display:flex;align-items:center;border-radius:6px}@media (prefers-color-scheme: light){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-8)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-3)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{pointer-events:none;touch-action:none;cursor:text!important;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-1)}}@media (prefers-color-scheme: dark){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-1)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-5)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{cursor:text!important;pointer-events:none;touch-action:none;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-8)}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: SearchbarComponent, selector: "ngx-decaf-searchbar", inputs: ["autocomplete", "autocorrect", "animated", "buttonCancelText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value", "queryKeys", "isVisible", "wrapper", "wrapperColor", "emitEventToWindow"], outputs: ["searchEvent"] }] }); }
|
|
665
663
|
};
|
|
666
664
|
FilterComponent = __decorate([
|
|
667
665
|
Dynamic(),
|
|
668
666
|
__metadata("design:paramtypes", [])
|
|
669
667
|
], FilterComponent);
|
|
670
668
|
export { FilterComponent };
|
|
671
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
669
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterComponent, decorators: [{
|
|
672
670
|
type: Component,
|
|
673
671
|
args: [{ selector: 'ngx-decaf-filter', imports: [
|
|
674
|
-
|
|
672
|
+
FormsModule,
|
|
673
|
+
TranslatePipe,
|
|
675
674
|
IonLabel,
|
|
676
675
|
IonItem,
|
|
677
676
|
IonChip,
|
|
678
677
|
IonIcon,
|
|
678
|
+
IonButton,
|
|
679
679
|
IonSelect,
|
|
680
|
+
IonSelectOption,
|
|
680
681
|
IonIcon,
|
|
681
682
|
SearchbarComponent
|
|
682
|
-
], standalone: true, template: "\n@if(!indexes.length) {\n <ngx-decaf-searchbar [emitEventToWindow]=\"false\" [debounce]=\"500\" (searchEvent)=\"handleSearch($event)\" />\n}\n\n<div [id]=\"uid\" class=\"dcf-grid dcf-grid-small dcf-grid-match dcf-filter-grid\" [ngClass]=\"{'dcf-hidden': !indexes.length}\">\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-filter\">\n <div class=\"dcf-input\">\n @for(filter of filterValue; track trackItemFn($index, filter?.['index'])) {\n @if(filter?.['index']) {\n <ion-chip [outline]=\"true\">{{ filter?.['index'] }}</ion-chip>\n }\n @if(filter?.['condition']) {\n <ion-chip [outline]=\"true\">{{ filter?.['condition'] }}</ion-chip>\n }\n @if(filter?.['value']) {\n <ion-chip [outline]=\"true\" class=\"dcf-filter-value\">\n {{ filter?.['value'] }}\n <ion-icon name=\"close\" (click)=\"removeFilter(filter?.['value'])\" size=\"small\"></ion-icon>\n </ion-chip>\n }\n }\n <div class=\"dcf-width-1-1\">\n <!-- [readonly]=\"step !== 3\" -->\n <input\n fill=\"none\"\n [(ngModel)]=\"value\"\n (keydown.enter)=\"addFilter(value, $event)\"\n (keydown.backspace)=\"clear(value)\"\n (input)=\"handleInput($event)\"\n (click)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n type=\"text\"\n\n placeholder=\"{{ locale + (step === 3 ? '.type' : '.select') | translate }}\"\n #component\n />\n @if(windowWidth >= 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n @if(filterValue.length > 0) {\n <div class=\"dcf-icon-clear\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"clear()\">\n <ion-icon name=\"trash-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-icon-search\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"submit()\">\n <ion-icon name=\"search-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n </div>\n @if(windowWidth < 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n @if(!disableSort) {\n <div class=\"dcf-width-1-5@m dcf-width-1-1 dcf-sort-container\">\n <div class=\"dcf-grid dcf-grid-collapse dcf-flex dcf-flex-middle dcf-grid-match\">\n <div class=\"dcf-width-expand\">\n <ion-select\n toggleIcon=\"chevron-down-outline\"\n expandedIcon=\"chevron-up-outline\"\n class=\"dcf-sort-select\"\n (ionChange)=\"handleSortChange($event)\"\n interface=\"popover\"\n [value]=\"sortValue\"\n label-placement=\"floating\"\n fill=\"outline\"\n [label]=\"locale + '.sort' | translate\"\n >\n @for(sort of sortBy; track sort) {\n\n <ion-select-option [value]=\"sort\">{{ sort | translate }}</ion-select-option>\n }\n </ion-select>\n </div>\n <div class=\"dcf-width-auto\">\n <ion-button (click)=\"handleSortDirectionChange()\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" [color]=\"!isDarkMode ? 'primary' : 'medium'\" [name]=\"sortDirection === 'desc' ? 'arrow-down-outline' : 'arrow-up-outline'\"></ion-icon>\n </ion-button>\n </div>\n </div>\n </div>\n }\n</div>\n\n\n", styles: [".dcf-filter-grid{padding:0 .5rem;margin-top:.75rem;margin-bottom:.75rem}ion-select{min-height:44px!important}.dcf-hidden{display:none!important}.dcf-filter{display:flex;width:100%;min-height:40px;box-shadow:0 1px 2px #0a0d120d;border-radius:var(--dcf-border-radius);box-sizing:border-box}@media (prefers-color-scheme: light){.dcf-filter{border:1px solid var(--dcf-color-gray-3);background-color:#fff}.dcf-filter:focus-within{border-color:var(--dcf-color-primary);background-color:#fff}}@media (prefers-color-scheme: dark){.dcf-filter{border:1px solid var(--dcf-color-step-500)}.dcf-filter ::-webkit-input-placeholder,.dcf-filter ::placeholder{color:var(--dcf-color-gray-4)!important}.dcf-filter:hover{border-color:var(--dcf-color-gray-2)}.dcf-filter:focus-within{border-color:var(--dcf-color-gray-2)}}.dcf-filter ion-chip{border-radius:6px;padding:0 8px!important;height:24px;min-height:24px;font-size:.75rem;font-style:normal;font-weight:500;flex-shrink:0;margin-right:2px;white-space:nowrap}@media (prefers-color-scheme: light){.dcf-filter ion-chip{border:1px solid var(--dcf-color-gray-3);color:var(--dcf-color-gray-7)}.dcf-filter ion-chip.dcf-filter-value{background:var(--dcf-color-gray-2);border-color:var(--dcf-color-gray-4)!important;color:var(--dcf-color-gray-8)!important}}@media (prefers-color-scheme: dark){.dcf-filter ion-chip{border-color:var(--dcf-color-step-300);background:rgba(var(--dcf-color-medium-rgb),.1)}.dcf-filter ion-chip.dcf-filter-value{background:rgba(var(--dcf-color-medium-rgb),.3)!important;border-color:var(--dcf-color-step-500)}}.dcf-filter ion-chip.sc-ion-chip-md-h,.dcf-filter ion-chip.sc-ion-chip-ios-h{height:24px;min-height:24px}.dcf-filter ion-chip.sc-ion-chip-md-h .chip-native,.dcf-filter ion-chip.sc-ion-chip-ios-h .chip-native{padding:0 8px!important;height:24px;min-height:24px}.dcf-filter ion-chip ion-label{padding:0 4px;margin:0;font-size:.75rem;white-space:nowrap}.dcf-filter ion-chip ion-icon{margin:0 2px;font-size:.75rem}.dcf-filter .dcf-input{width:100%;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-left:.5rem}.dcf-filter .dcf-input input{min-height:40px;min-width:100px;width:100%;font-size:1rem;border:none;outline:none;background:transparent;border:0px!important;outline:none!important}@media (prefers-color-scheme: light){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-7)}}@media (prefers-color-scheme: dark){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-1)}}.dcf-filter .dcf-input input:focus{border:0px!important;outline:none!important}.dcf-filter .dcf-icon-clear,.dcf-filter .dcf-icon-search{display:flex;justify-content:center;text-align:center;align-items:center;min-width:40px}.dcf-filter .dcf-icon-search ion-icon{font-size:1.25rem}.dcf-sort-container{min-width:200px!important;width:auto}@media (min-width: 990px){.dcf-sort-container{max-width:20%!important}}@media (max-width: 680px){.dcf-sort-container{min-width:100%!important;margin:.75rem 0rem}}.dcf-dropdown{position:absolute;max-height:200px;overflow-y:auto;border-radius:4px;z-index:1000!important;min-width:200px;max-width:300px;display:none}@media (prefers-color-scheme: light){.dcf-dropdown{background-color:#fff}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-gray-2)}}@media (prefers-color-scheme: dark){.dcf-dropdown{background-color:var(--dcf-item-background)}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-step-600)}}.dcf-dropdown.dcf-active{display:block;margin-top:-3px;box-shadow:0 12px 16px -4px #0a0d1214,0 4px 6px -2px #0a0d1208,0 2px 2px -1px #0a0d120a!important;border-radius:var(--dcf-border-radius);padding:.5rem .25rem}@media (max-width: 768px){.dcf-dropdown.dcf-active{margin-top:55px}}.dcf-dropdown.dcf-active>div>div{cursor:pointer;height:35px;padding:.5rem 1rem;border:1px solid transparent;font-size:1rem;display:flex;align-items:center;border-radius:6px}@media (prefers-color-scheme: light){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-8)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-3)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{pointer-events:none;touch-action:none;cursor:text!important;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-1)}}@media (prefers-color-scheme: dark){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-1)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-5)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{cursor:text!important;pointer-events:none;touch-action:none;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-8)}}\n"] }]
|
|
683
|
+
], standalone: true, template: "\n@if(!indexes.length) {\n <ngx-decaf-searchbar [emitEventToWindow]=\"false\" [debounce]=\"500\" (searchEvent)=\"handleSearch($event)\" />\n}\n\n<div [id]=\"uid\" class=\"dcf-grid dcf-grid-small dcf-grid-match dcf-filter-grid\" [class.dcf-hidden]=\"!indexes.length\">\n <div class=\"dcf-width-expand\">\n <div class=\"dcf-filter\">\n <div class=\"dcf-input\">\n @for(filter of filterValue; track trackItemFn($index, filter?.['index'])) {\n @if(filter?.['index']) {\n <ion-chip [outline]=\"true\">{{ filter?.['index'] }}</ion-chip>\n }\n @if(filter?.['condition']) {\n <ion-chip [outline]=\"true\">{{ filter?.['condition'] }}</ion-chip>\n }\n @if(filter?.['value']) {\n <ion-chip [outline]=\"true\" class=\"dcf-filter-value\">\n {{ filter?.['value'] }}\n <ion-icon name=\"close\" (click)=\"removeFilter(filter?.['value'])\" size=\"small\"></ion-icon>\n </ion-chip>\n }\n }\n <div class=\"dcf-width-1-1\">\n <!-- [readonly]=\"step !== 3\" -->\n <input\n fill=\"none\"\n [(ngModel)]=\"value\"\n (keydown.enter)=\"addFilter(value, $event)\"\n (keydown.backspace)=\"clear(value)\"\n (input)=\"handleInput($event)\"\n (click)=\"handleFocus()\"\n (blur)=\"handleBlur()\"\n type=\"text\"\n\n placeholder=\"{{ locale + (step === 3 ? '.type' : '.select') | translate }}\"\n #component\n />\n @if(windowWidth >= 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n @if(filterValue.length > 0) {\n <div class=\"dcf-icon-clear\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"clear()\">\n <ion-icon name=\"trash-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n }\n <div class=\"dcf-icon-search\">\n <ion-button fill=\"clear\" size=\"small\" (click)=\"submit()\">\n <ion-icon name=\"search-outline\" [color]=\"!isDarkMode ? 'dark' : 'medium'\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </div>\n </div>\n @if(windowWidth < 768) {\n <div [class]=\"'dcf-dropdown ' + (options.length > 0 ? ' dcf-active' : '')\" #optionsFilterElement>\n <div>\n @if(filteredOptions.length > 0) {\n @for(key of filteredOptions; track key) {\n <div\n class=\"dcf-item\"\n tabindex=\"0\"\n (keydown.enter)=\"selectOption(key)\"\n (click)=\"selectOption(key)\">\n {{ key }}\n </div>\n }\n } @else {\n <div class=\"dcf-empty\"\n (click)=\"filteredOptions = options; value = ''\"\n tabindex=\"0\"\n (keydown.enter)=\"filteredOptions = options; value = ''\"\n >\n {{ locale + '.no_suggestions' | translate }}\n </div>\n }\n </div>\n </div>\n }\n </div>\n @if(!disableSort) {\n <div class=\"dcf-width-1-5@m dcf-width-1-1 dcf-sort-container\">\n <div class=\"dcf-grid dcf-grid-collapse dcf-flex dcf-flex-middle dcf-grid-match\">\n <div class=\"dcf-width-expand\">\n <ion-select\n toggleIcon=\"chevron-down-outline\"\n expandedIcon=\"chevron-up-outline\"\n class=\"dcf-sort-select\"\n (ionChange)=\"handleSortChange($event)\"\n interface=\"popover\"\n [value]=\"sortValue\"\n label-placement=\"floating\"\n fill=\"outline\"\n [label]=\"locale + '.sort' | translate\"\n >\n @for(sort of sortBy; track sort) {\n\n <ion-select-option [value]=\"sort\">{{ sort | translate }}</ion-select-option>\n }\n </ion-select>\n </div>\n <div class=\"dcf-width-auto\">\n <ion-button (click)=\"handleSortDirectionChange()\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" [color]=\"!isDarkMode ? 'primary' : 'medium'\" [name]=\"sortDirection === 'desc' ? 'arrow-down-outline' : 'arrow-up-outline'\"></ion-icon>\n </ion-button>\n </div>\n </div>\n </div>\n }\n</div>\n\n\n", styles: [".dcf-filter-grid{padding:0 .5rem;margin-top:.75rem;margin-bottom:.75rem}ion-select{min-height:44px!important}.dcf-hidden{display:none!important}.dcf-filter{display:flex;width:100%;min-height:40px;box-shadow:0 1px 2px #0a0d120d;border-radius:var(--dcf-border-radius);box-sizing:border-box}@media (prefers-color-scheme: light){.dcf-filter{border:1px solid var(--dcf-color-gray-3);background-color:#fff}.dcf-filter:focus-within{border-color:var(--dcf-color-primary);background-color:#fff}}@media (prefers-color-scheme: dark){.dcf-filter{border:1px solid var(--dcf-color-step-500)}.dcf-filter ::-webkit-input-placeholder,.dcf-filter ::placeholder{color:var(--dcf-color-gray-4)!important}.dcf-filter:hover{border-color:var(--dcf-color-gray-2)}.dcf-filter:focus-within{border-color:var(--dcf-color-gray-2)}}.dcf-filter ion-chip{border-radius:6px;padding:0 8px!important;height:24px;min-height:24px;font-size:.75rem;font-style:normal;font-weight:500;flex-shrink:0;margin-right:2px;white-space:nowrap}@media (prefers-color-scheme: light){.dcf-filter ion-chip{border:1px solid var(--dcf-color-gray-3);color:var(--dcf-color-gray-7)}.dcf-filter ion-chip.dcf-filter-value{background:var(--dcf-color-gray-2);border-color:var(--dcf-color-gray-4)!important;color:var(--dcf-color-gray-8)!important}}@media (prefers-color-scheme: dark){.dcf-filter ion-chip{border-color:var(--dcf-color-step-300);background:rgba(var(--dcf-color-medium-rgb),.1)}.dcf-filter ion-chip.dcf-filter-value{background:rgba(var(--dcf-color-medium-rgb),.3)!important;border-color:var(--dcf-color-step-500)}}.dcf-filter ion-chip.sc-ion-chip-md-h,.dcf-filter ion-chip.sc-ion-chip-ios-h{height:24px;min-height:24px}.dcf-filter ion-chip.sc-ion-chip-md-h .chip-native,.dcf-filter ion-chip.sc-ion-chip-ios-h .chip-native{padding:0 8px!important;height:24px;min-height:24px}.dcf-filter ion-chip ion-label{padding:0 4px;margin:0;font-size:.75rem;white-space:nowrap}.dcf-filter ion-chip ion-icon{margin:0 2px;font-size:.75rem}.dcf-filter .dcf-input{width:100%;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-left:.5rem}.dcf-filter .dcf-input input{min-height:40px;min-width:100px;width:100%;font-size:1rem;border:none;outline:none;background:transparent;border:0px!important;outline:none!important}@media (prefers-color-scheme: light){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-7)}}@media (prefers-color-scheme: dark){.dcf-filter .dcf-input input{color:var(--dcf-color-gray-1)}}.dcf-filter .dcf-input input:focus{border:0px!important;outline:none!important}.dcf-filter .dcf-icon-clear,.dcf-filter .dcf-icon-search{display:flex;justify-content:center;text-align:center;align-items:center;min-width:40px}.dcf-filter .dcf-icon-search ion-icon{font-size:1.25rem}.dcf-sort-container{min-width:200px!important;width:auto}@media (min-width: 990px){.dcf-sort-container{max-width:20%!important}}@media (max-width: 680px){.dcf-sort-container{min-width:100%!important;margin:.75rem 0rem}}.dcf-dropdown{position:absolute;max-height:200px;overflow-y:auto;border-radius:4px;z-index:1000!important;min-width:200px;max-width:300px;display:none}@media (prefers-color-scheme: light){.dcf-dropdown{background-color:#fff}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-gray-2)}}@media (prefers-color-scheme: dark){.dcf-dropdown{background-color:var(--dcf-item-background)}.dcf-dropdown.dcf-active{border:1px solid var(--dcf-color-step-600)}}.dcf-dropdown.dcf-active{display:block;margin-top:-3px;box-shadow:0 12px 16px -4px #0a0d1214,0 4px 6px -2px #0a0d1208,0 2px 2px -1px #0a0d120a!important;border-radius:var(--dcf-border-radius);padding:.5rem .25rem}@media (max-width: 768px){.dcf-dropdown.dcf-active{margin-top:55px}}.dcf-dropdown.dcf-active>div>div{cursor:pointer;height:35px;padding:.5rem 1rem;border:1px solid transparent;font-size:1rem;display:flex;align-items:center;border-radius:6px}@media (prefers-color-scheme: light){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-8)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-3)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{pointer-events:none;touch-action:none;cursor:text!important;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-1)}}@media (prefers-color-scheme: dark){.dcf-dropdown.dcf-active>div>div{color:var(--dcf-color-gray-1)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item,.dcf-dropdown.dcf-active>div>div:only-child{border-color:var(--dcf-color-gray-5)}.dcf-dropdown.dcf-active>div>div.dcf-filtering-item.dcf-empty,.dcf-dropdown.dcf-active>div>div:only-child.dcf-empty{cursor:text!important;pointer-events:none;touch-action:none;border-color:transparent!important}.dcf-dropdown.dcf-active>div>div:hover{background-color:var(--dcf-color-gray-8)}}\n"] }]
|
|
683
684
|
}], ctorParameters: () => [], propDecorators: { optionsFilterElement: [{
|
|
684
685
|
type: ViewChild,
|
|
685
686
|
args: ['optionsFilterElement', { read: ElementRef, static: false }]
|
|
@@ -696,4 +697,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
696
697
|
}], searchEvent: [{
|
|
697
698
|
type: Output
|
|
698
699
|
}] } });
|
|
699
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBa0MsTUFBTSxjQUFjLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7QUFFdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFrQkksSUFBTSxlQUFl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b21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvckFuZ3VsYXJNb2R1bGUgfSBmcm9tICcuLi8uLi9mb3ItYW5ndWxhci5tb2R1bGUnO1xuaW1wb3J0IHsgTmd4QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VuZ2luZS9OZ3hCYXNlQ29tcG9uZW50JztcbmltcG9ydCB7IElvbkNoaXAsIElvbkljb24sIElvbkl0ZW0sIElvbkxhYmVsLCBJb25TZWxlY3R9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgRHluYW1pYywgSUZpbHRlclF1ZXJ5LCBJRmlsdGVyUXVlcnlJdGVtIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IGdldFdpbmRvd1dpZHRoLCBpc0RhcmtNb2RlIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPcmRlckRpcmVjdGlvbiwgUmVwb3NpdG9yeSB9IGZyb20gJ0BkZWNhZi10cy9jb3JlJztcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IFNlYXJjaGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJhci9zZWFyY2hiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hldnJvbkRvd25PdXRsaW5lLCBjaGV2cm9uVXBPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBZHZhbmNlZCBmaWx0ZXIgY29tcG9uZW50IGZvciBjcmVhdGluZyBkeW5hbWljIHNlYXJjaCBmaWx0ZXJzIHdpdGggc3RlcC1ieS1zdGVwIGNvbnN0cnVjdGlvbi5cbiAqIEBzdW1tYXJ5IFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBmaWx0ZXJpbmcgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHVzZXJzIHRvIGJ1aWxkXG4gKiBjb21wbGV4IHNlYXJjaCBjcml0ZXJpYSB1c2luZyBhIHRocmVlLXN0ZXAgYXBwcm9hY2g6IHNlbGVjdCBpbmRleCDihpIgc2VsZWN0IGNvbmRpdGlvbiDihpIgZW50ZXIgdmFsdWUuXG4gKiBJdCBzdXBwb3J0cyBmaWx0ZXJpbmcgYnkgbXVsdGlwbGUgZmllbGQgaW5kZXhlcywgY29tcGFyaXNvbiBjb25kaXRpb25zLCBhbmQgdmFsdWVzLCBkaXNwbGF5aW5nXG4gKiBzZWxlY3RlZCBmaWx0ZXJzIGFzIHJlbW92YWJsZSBjaGlwcy4gVGhlIGNvbXBvbmVudCBpcyByZXNwb25zaXZlIGFuZCBpbmNsdWRlcyBhdXRvLXN1Z2dlc3Rpb25zXG4gKiB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24gc3VwcG9ydC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPG5neC1kZWNhZi1maWx0ZXJcbiAqICAgW2luZGV4ZXNdPVwiWyduYW1lJywgJ2VtYWlsJywgJ2RlcGFydG1lbnQnLCAnc3RhdHVzJ11cIlxuICogICBbY29uZGl0aW9uc109XCJbJ0VxdWFsJywgJ0NvbnRhaW5zJywgJ0dyZWF0ZXIgVGhhbicsICdMZXNzIFRoYW4nXVwiXG4gKiAgIFtzb3J0XT1cIlsnY3JlYXRlZEF0JywgJ3VwZGF0ZWRBdCddXCJcbiAqICAgW2Rpc2FibGVTb3J0XT1cImZhbHNlXCJcbiAqICAgKGZpbHRlckV2ZW50KT1cIm9uRmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiPlxuICogPC9uZ3gtZGVjYWYtZmlsdGVyPlxuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAqICAgcGFydGljaXBhbnQgRiBhcyBGaWx0ZXJDb21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgUCBhcyBQYXJlbnQgQ29tcG9uZW50XG4gKlxuICogICBVLT4+RjogRm9jdXMgaW5wdXQgZmllbGRcbiAqICAgRi0+PkY6IGhhbmRsZUZvY3VzKCkgLSBTaG93IGF2YWlsYWJsZSBpbmRleGVzXG4gKiAgIFUtPj5GOiBTZWxlY3QgaW5kZXggKGUuZy4sIFwibmFtZVwiKVxuICogICBGLT4+RjogYWRkRmlsdGVyKCkgLSBTdGVwIDEgY29tcGxldGVkXG4gKiAgIEYtPj5GOiBTaG93IGF2YWlsYWJsZSBjb25kaXRpb25zXG4gKiAgIFUtPj5GOiBTZWxlY3QgY29uZGl0aW9uIChlLmcuLCBcIkNvbnRhaW5zXCIpXG4gKiAgIEYtPj5GOiBhZGRGaWx0ZXIoKSAtIFN0ZXAgMiBjb21wbGV0ZWRcbiAqICAgRi0+PkY6IFNob3cgdmFsdWUgaW5wdXQgcHJvbXB0XG4gKiAgIFUtPj5GOiBFbnRlciB2YWx1ZSBhbmQgcHJlc3MgRW50ZXJcbiAqICAgRi0+PkY6IGFkZEZpbHRlcigpIC0gU3RlcCAzIGNvbXBsZXRlZFxuICogICBGLT4+RjogQ3JlYXRlIGNvbXBsZXRlIGZpbHRlciBvYmplY3RcbiAqICAgRi0+PlA6IEVtaXQgZmlsdGVyRXZlbnQgd2l0aCBuZXcgZmlsdGVyIGFycmF5XG4gKiAgIEYtPj5GOiBSZXNldCB0byBzdGVwIDEgZm9yIG5leHQgZmlsdGVyXG4gKlxuICogQG1lbWJlck9mIEZvckFuZ3VsYXJNb2R1bGVcbiAqL1xuQER5bmFtaWMoKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWRlY2FmLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIEZvckFuZ3VsYXJNb2R1bGUsXG4gICAgSW9uTGFiZWwsXG4gICAgSW9uSXRlbSxcbiAgICBJb25DaGlwLFxuICAgIElvbkljb24sXG4gICAgSW9uU2VsZWN0LFxuICAgIElvbkljb24sXG4gICAgU2VhcmNoYmFyQ29tcG9uZW50XG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCBleHRlbmRzIE5neEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWZlcmVuY2UgdG8gdGhlIGRyb3Bkb3duIG9wdGlvbnMgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqIEBzdW1tYXJ5IFZpZXdDaGlsZCByZWZlcmVuY2UgdXNlZCB0byBhY2Nlc3MgYW5kIG1hbmlwdWxhdGUgdGhlIGRyb3Bkb3duIG9wdGlvbnMgZWxlbWVudFxuICAgKiBmb3IgaGlnaGxpZ2h0aW5nIGZpbHRlcmVkIGl0ZW1zIGFuZCBtYW5hZ2luZyB2aXN1YWwgZmVlZGJhY2sgZHVyaW5nIG9wdGlvbiBzZWxlY3Rpb24uXG4gICAqIFRoaXMgZWxlbWVudCBjb250YWlucyB0aGUgZmlsdGVyYWJsZSBzdWdnZXN0aW9ucyB0aGF0IHVzZXJzIGNhbiBpbnRlcmFjdCB3aXRoLlxuICAgKlxuICAgKiBAdHlwZSB7RWxlbWVudFJlZn1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQFZpZXdDaGlsZCgnb3B0aW9uc0ZpbHRlckVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgb3B0aW9uc0ZpbHRlckVsZW1lbnQhOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXZhaWxhYmxlIGZpZWxkIGluZGV4ZXMgZm9yIGZpbHRlcmluZyBvcGVyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgdXNlcnMgY2FuIGZpbHRlciBieS4gVGhlc2UgcmVwcmVzZW50XG4gICAqIHRoZSBkYXRhIHByb3BlcnRpZXMgYXZhaWxhYmxlIGZvciBmaWx0ZXJpbmcgb3BlcmF0aW9ucy4gRWFjaCBpbmRleCBjb3JyZXNwb25kcyB0b1xuICAgKiBhIGZpZWxkIGluIHRoZSBkYXRhIG1vZGVsIHRoYXQgc3VwcG9ydHMgY29tcGFyaXNvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGluZGV4ZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBdmFpbGFibGUgY29tcGFyaXNvbiBjb25kaXRpb25zIGZvciBmaWx0ZXJzLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBsaXN0IG9mIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRoYXQgY2FuIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBmaWx0ZXJzLlxuICAgKiBUaGVzZSBjb25kaXRpb25zIGRldGVybWluZSBob3cgdGhlIGZpbHRlciB2YWx1ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBmaWVsZCB2YWx1ZS5cbiAgICogQ29tbW9uIGNvbmRpdGlvbnMgaW5jbHVkZSBlcXVhbGl0eSwgY29udGFpbm1lbnQsIGFuZCBudW1lcmljYWwgY29tcGFyaXNvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gWydFcXVhbCcsICdDb250YWlucycsICdOb3QgQ29udGFpbnMnLCAnR3JlYXRlciBUaGFuJywgJ0xlc3MgVGhhbicsICdOb3QgRXF1YWwnXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEF2YWlsYWJsZSBzb3J0aW5nIG9wdGlvbnMgZm9yIHRoZSBmaWx0ZXJlZCBkYXRhLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBsaXN0IG9mIGZpZWxkIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHNvcnRpbmcgdGhlIGZpbHRlcmVkIHJlc3VsdHMuXG4gICAqIFdoZW4gZGlzYWJsZVNvcnQgaXMgZmFsc2UsIHRoaXMgYXJyYXkgaXMgYXV0b21hdGljYWxseSBtZXJnZWQgd2l0aCB0aGUgaW5kZXhlcyBhcnJheVxuICAgKiB0byBwcm92aWRlIGNvbXByZWhlbnNpdmUgc29ydGluZyBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc29ydEJ5OiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbHMgd2hldGhlciBzb3J0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQuXG4gICAqIEBzdW1tYXJ5IFdoZW4gc2V0IHRvIHRydWUsIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgbWVyZ2luZyBvZiBzb3J0IGFuZCBpbmRleGVzIGFycmF5cyxcbiAgICogZWZmZWN0aXZlbHkgZGlzYWJsaW5nIHNvcnRpbmcgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHByb3ZpZGVcbiAgICogZmlsdGVyaW5nIHdpdGhvdXQgc29ydGluZyBvcHRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgZGlzYWJsZVNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgd2luZG93IHdpZHRoIGZvciByZXNwb25zaXZlIGJlaGF2aW9yLlxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGN1cnJlbnQgYnJvd3NlciB3aW5kb3cgd2lkdGggaW4gcGl4ZWxzLiBUaGlzIHZhbHVlIGlzIHVwZGF0ZWRcbiAgICogb24gd2luZG93IHJlc2l6ZSBldmVudHMgdG8gZW5hYmxlIHJlc3BvbnNpdmUgZmlsdGVyaW5nIGJlaGF2aW9yIGFuZCBsYXlvdXQgYWRqdXN0bWVudHNcbiAgICogYmFzZWQgb24gYXZhaWxhYmxlIHNjcmVlbiBzcGFjZS5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgd2luZG93V2lkdGghOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBdmFpbGFibGUgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgZmlsdGVyIHN0ZXAuXG4gICAqIEBzdW1tYXJ5IENvbnRhaW5zIHRoZSBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gaW4gdGhlIGN1cnJlbnQgc3RlcC5cbiAgICogVGhpcyBhcnJheSBjaGFuZ2VzIGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0ZXA6IGluZGV4ZXMg4oaSIGNvbmRpdGlvbnMg4oaSIGVtcHR5IGZvciB2YWx1ZSBpbnB1dC5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRmlsdGVyZWQgb3B0aW9ucyBiYXNlZCBvbiB1c2VyIGlucHV0LlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgc3Vic2V0IG9mIG9wdGlvbnMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCB1c2VyIGlucHV0IGZvciByZWFsLXRpbWVcbiAgICogZmlsdGVyaW5nLiBUaGlzIGFycmF5IGlzIHVwZGF0ZWQgYXMgdGhlIHVzZXIgdHlwZXMgdG8gc2hvdyBvbmx5IHJlbGV2YW50IHN1Z2dlc3Rpb25zXG4gICAqIGluIHRoZSBkcm9wZG93biBtZW51LlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGZpbHRlcmVkT3B0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbXBsZXRlIGZpbHRlciBvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IEFycmF5IG9mIGNvbXBsZXRlIGZpbHRlciBvYmplY3RzLCBlYWNoIGNvbnRhaW5pbmcgaW5kZXgsIGNvbmRpdGlvbiwgYW5kIHZhbHVlIHByb3BlcnRpZXMuXG4gICAqIFRoZXNlIHJlcHJlc2VudCB0aGUgYWN0aXZlIGZpbHRlcnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBkYXRhIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZVtdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBmaWx0ZXJWYWx1ZTogSUZpbHRlclF1ZXJ5SXRlbVtdID0gW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IGZpbHRlciBiZWluZyBjb25zdHJ1Y3RlZC5cbiAgICogQHN1bW1hcnkgVGVtcG9yYXJ5IG9iamVjdCB0aGF0IGFjY3VtdWxhdGVzIGZpbHRlciBwcm9wZXJ0aWVzIChpbmRleCwgY29uZGl0aW9uLCB2YWx1ZSlcbiAgICogZHVyaW5nIHRoZSB0aHJlZS1zdGVwIGZpbHRlciBjcmVhdGlvbiBwcm9jZXNzLiBHZXRzIGFkZGVkIHRvIGZpbHRlclZhbHVlIHdoZW4gY29tcGxldGUuXG4gICAqXG4gICAqIEB0eXBlIHtLZXlWYWx1ZX1cbiAgICogQGRlZmF1bHQge31cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgbGFzdEZpbHRlcjogSUZpbHRlclF1ZXJ5SXRlbSA9IHt9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBzdGVwIGluIHRoZSBmaWx0ZXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAgICogQHN1bW1hcnkgVHJhY2tzIHRoZSBjdXJyZW50IHN0ZXAgb2YgZmlsdGVyIGNyZWF0aW9uOiAxID0gaW5kZXggc2VsZWN0aW9uLCAyID0gY29uZGl0aW9uIHNlbGVjdGlvbixcbiAgICogMyA9IHZhbHVlIGlucHV0LiBBdXRvbWF0aWNhbGx5IHJlc2V0cyB0byAxIGFmdGVyIGNvbXBsZXRpbmcgYSBmaWx0ZXIuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBkZWZhdWx0IDFcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc3RlcDogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIGRyb3Bkb3duIHZpc2liaWxpdHkgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IEJvb2xlYW4gZmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgb3B0aW9ucyBkcm9wZG93biBpcyBjdXJyZW50bHkgdmlzaWJsZS5cbiAgICogVXNlZCB0byBtYW5hZ2UgdGhlIGRyb3Bkb3duJ3Mgb3Blbi9jbG9zZSBzdGF0ZSBhbmQgY29vcmRpbmF0ZSB3aXRoIGZvY3VzL2JsdXIgZXZlbnRzLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IGlucHV0IGZpZWxkIHZhbHVlLlxuICAgKiBAc3VtbWFyeSBTdG9yZXMgdGhlIGN1cnJlbnQgdGV4dCBpbnB1dCB2YWx1ZSB0aGF0IHRoZSB1c2VyIGlzIHR5cGluZy4gVGhpcyB2YWx1ZSBpc1xuICAgKiBib3VuZCB0byB0aGUgaW5wdXQgZmllbGQgYW5kIGlzIGNsZWFyZWQgYWZ0ZXIgZWFjaCBzdWNjZXNzZnVsIGZpbHRlciBzdGVwIGNvbXBsZXRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICcnXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc29ydGluZyBmaWVsZCB2YWx1ZS5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBmaWVsZCBuYW1lIGN1cnJlbnRseSBzZWxlY3RlZCBmb3Igc29ydGluZyBvcGVyYXRpb25zLlxuICAgKiBUaGlzIHZhbHVlIGRldGVybWluZXMgd2hpY2ggZmllbGQgaXMgdXNlZCB0byBvcmRlciB0aGUgZmlsdGVyZWQgcmVzdWx0cy5cbiAgICogRGVmYXVsdHMgdG8gJ2lkJyBhbmQgY2FuIGJlIGNoYW5nZWQgdGhyb3VnaCB0aGUgc29ydCBkcm9wZG93biBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBkZWZhdWx0ICdpZCdcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc29ydFZhbHVlOiBzdHJpbmcgPSAnaWQnO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBzb3J0aW5nIGRpcmVjdGlvbi5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzb3J0IG9wZXJhdGlvbiAtIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nLlxuICAgKiBUaGlzIHZhbHVlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggc29ydFZhbHVlIHRvIGRldGVybWluZSB0aGUgY29tcGxldGVcbiAgICogc29ydGluZyBjb25maWd1cmF0aW9uIGZvciBmaWx0ZXJlZCByZXN1bHRzLlxuICAgKlxuICAgKiBAdHlwZSB7T3JkZXJEaXJlY3Rpb259XG4gICAqIEBkZWZhdWx0IE9yZGVyRGlyZWN0aW9uLkRTQ1xuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBzb3J0RGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbiA9IE9yZGVyRGlyZWN0aW9uLkRTQztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN1YnNjcmlwdGlvbiBmb3Igd2luZG93IHJlc2l6ZSBldmVudHMuXG4gICAqIEBzdW1tYXJ5IFJ4SlMgc3Vic2NyaXB0aW9uIHRoYXQgbGlzdGVucyBmb3Igd2luZG93IHJlc2l6ZSBldmVudHMgd2l0aCBkZWJvdW5jaW5nXG4gICAqIHRvIHVwZGF0ZSB0aGUgd2luZG93V2lkdGggcHJvcGVydHkuIFRoaXMgZW5hYmxlcyByZXNwb25zaXZlIGJlaGF2aW9yIGFuZCBwcmV2ZW50c1xuICAgKiBleGNlc3NpdmUgdXBkYXRlcyBkdXJpbmcgcmVzaXplIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtTdWJzY3JpcHRpb259XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHdpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJyb3dzaW5nIG1vZGUgKGRhcmsgb3IgbGlnaHQpLlxuICAgKiBAc3VtbWFyeSBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZGFyayBtb2RlIHRoZW1lIGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaXNEYXJrTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgZW1pdHRlciBmb3IgZmlsdGVyIGNoYW5nZXMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIGZpbHRlciBldmVudHMgd2hlbiB0aGUgdXNlciBjcmVhdGVzLCBtb2RpZmllcywgb3IgY2xlYXJzIGZpbHRlcnMuXG4gICAqIFRoZSBlbWl0dGVkIHZhbHVlIGNvbnRhaW5zIGFuIGFycmF5IG9mIGNvbXBsZXRlIGZpbHRlciBvYmplY3RzIG9yIHVuZGVmaW5lZCB3aGVuXG4gICAqIGZpbHRlcnMgYXJlIGNsZWFyZWQuIFBhcmVudCBjb21wb25lbnRzIGxpc3RlbiB0byB0aGlzIGV2ZW50IHRvIHVwZGF0ZSB0aGVpciBkYXRhIGRpc3BsYXkuXG4gICAqXG4gICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8S2V5VmFsdWVbXSB8IHVuZGVmaW5lZD59XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBmaWx0ZXJFdmVudDogRXZlbnRFbWl0dGVyPElGaWx0ZXJRdWVyeSB8IHVuZGVmaW5lZD4gPSBuZXcgRXZlbnRFbWl0dGVyPElGaWx0ZXJRdWVyeSB8IHVuZGVmaW5lZD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGVtaXR0ZXIgZm9yIHNlYXJjaCBldmVudHMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIHNlYXJjaCBldmVudHMgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgc2VhcmNoYmFyLlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPHN0cmluZz59XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBPdXRwdXQoKVxuICBzZWFyY2hFdmVudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0b3IgZm9yIEZpbHRlckNvbXBvbmVudC5cbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEZpbHRlckNvbXBvbmVudC5cbiAgICogQ2FsbHMgdGhlIHBhcmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb21wb25lbnQgbmFtZSB0byBlc3RhYmxpc2ggYmFzZSBsb2NhbGUgc3RyaW5nIGdlbmVyYXRpb25cbiAgICogYW5kIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQuXG4gICAqXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiRmlsdGVyQ29tcG9uZW50XCIpO1xuICAgIGFkZEljb25zKHtjaGV2cm9uRG93bk91dGxpbmUsIGNoZXZyb25VcE91dGxpbmV9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBhZnRlciBBbmd1bGFyIGZpcnN0IGRpc3BsYXlzIHRoZSBkYXRhLWJvdW5kIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFNldHMgdXAgdGhlIGNvbXBvbmVudCBieSBpbml0aWFsaXppbmcgd2luZG93IHdpZHRoIHRyYWNraW5nLCBzZXR0aW5nIHVwIHJlc2l6ZSBldmVudFxuICAgKiBzdWJzY3JpcHRpb25zIHdpdGggZGVib3VuY2luZywgY29uZmlndXJpbmcgc29ydGluZyBvcHRpb25zLCBhbmQgY2FsbGluZyB0aGUgYmFzZSBpbml0aWFsaXphdGlvbi5cbiAgICogVGhpcyBtZXRob2QgcHJlcGFyZXMgdGhlIGNvbXBvbmVudCBmb3IgdXNlciBpbnRlcmFjdGlvbiBhbmQgcmVzcG9uc2l2ZSBiZWhhdmlvci5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBbmd1bGFyIExpZmVjeWNsZVxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgVyBhcyBXaW5kb3dcbiAgICogICBwYXJ0aWNpcGFudCBSIGFzIFJ4SlNcbiAgICpcbiAgICogICBBLT4+RjogbmdPbkluaXQoKVxuICAgKiAgIEYtPj5XOiBnZXRXaW5kb3dXaWR0aCgpXG4gICAqICAgVy0tPj5GOiBSZXR1cm4gY3VycmVudCB3aWR0aFxuICAgKiAgIEYtPj5SOiBTZXR1cCByZXNpemUgc3Vic2NyaXB0aW9uIHdpdGggZGVib3VuY2VcbiAgICogICBSLS0+PkY6IFN1YnNjcmlwdGlvbiBjcmVhdGVkXG4gICAqICAgYWx0IGRpc2FibGVTb3J0IGlzIGZhbHNlXG4gICAqICAgICBGLT4+RjogTWVyZ2Ugc29ydCBhbmQgaW5kZXhlcyBhcnJheXNcbiAgICogICBlbmRcbiAgICogICBGLT4+RjogQ2FsbCBpbml0aWFsaXplKClcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaXNEYXJrTW9kZSA9IGF3YWl0IGlzRGFya01vZGUoKTtcbiAgICB0aGlzLndpbmRvd1dpZHRoID0gZ2V0V2luZG93V2lkdGgoKSBhcyBudW1iZXI7XG4gICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAucGlwZShkZWJvdW5jZVRpbWUoMzAwKSlcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgdGhpcy53aW5kb3dXaWR0aCA9IGdldFdpbmRvd1dpZHRoKCkgYXMgbnVtYmVyO1xuICAgIH0pO1xuXG4gICAgdGhpcy5nZXRJbmRleGVzKCk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbmQgY29uZmlndXJlcyBhdmFpbGFibGUgaW5kZXhlcyBmb3IgZmlsdGVyaW5nIGFuZCBzb3J0aW5nLlxuICAgKiBAc3VtbWFyeSBFeHRyYWN0cyBmaWVsZCBpbmRleGVzIGZyb20gdGhlIG1vZGVsIGlmIGF2YWlsYWJsZSBhbmQgbWVyZ2VzIHRoZW0gd2l0aFxuICAgKiBzb3J0aW5nIG9wdGlvbnMgd2hlbiBzb3J0aW5nIGlzIGVuYWJsZWQuIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGF2YWlsYWJsZSBmaWVsZFxuICAgKiBvcHRpb25zIGZvciBib3RoIGZpbHRlcmluZyBhbmQgc29ydGluZyBvcGVyYXRpb25zIGJhc2VkIG9uIHRoZSBtb2RlbCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBnZXRJbmRleGVzKCk6IHZvaWQge1xuICAgIGlmKHRoaXMubW9kZWwpXG4gICAgICB0aGlzLmluZGV4ZXMgPSBPYmplY3Qua2V5cyhSZXBvc2l0b3J5LmluZGV4ZXModGhpcy5tb2RlbCBhcyBNb2RlbCkgfHwge30pO1xuICAgIGlmKCF0aGlzLmRpc2FibGVTb3J0KVxuICAgICAgdGhpcy5zb3J0QnkgPSBbLi4uIHRoaXMuc29ydEJ5LCAuLi50aGlzLmluZGV4ZXNdO1xuICB9XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENsZWFudXAgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgKiBAc3VtbWFyeSBVbnN1YnNjcmliZXMgZnJvbSB3aW5kb3cgcmVzaXplIGV2ZW50cyB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cbiAgICogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHByb3BlciBjbGVhbnVwIG9mIFJ4SlMgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnRcbiAgICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLndpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBpbnB1dCBldmVudHMgZnJvbSB0aGUgdGV4dCBmaWVsZC5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIHVzZXIgaW5wdXQgYW5kIGZpbHRlcnMgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGJhc2VkIG9uIHRoZSB0eXBlZCB2YWx1ZS5cbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgcmVhbC10aW1lIGZpbHRlcmluZyBvZiBzdWdnZXN0aW9ucyBhcyB0aGUgdXNlciB0eXBlcyBpbiB0aGUgaW5wdXQgZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSB7SW5wdXRFdmVudH0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnQgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVJbnB1dChldmVudDogSW5wdXRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHt2YWx1ZX0gPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJPcHRpb25zKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBmb2N1cyBldmVudHMgb24gdGhlIGlucHV0IGZpZWxkLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB3aGVuIHRoZSBpbnB1dCBmaWVsZCByZWNlaXZlcyBmb2N1cyBhbmQgb3BlbnMgdGhlIGRyb3Bkb3duLlxuICAgKiBJZiBubyBvcHRpb25zIGFyZSBwcm92aWRlZCwgYXV0b21hdGljYWxseSBkZXRlcm1pbmVzIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGJhc2VkIG9uIGN1cnJlbnQgc3RlcC5cbiAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIGRyb3Bkb3duIHdpdGggY29udGV4dHVhbGx5IHJlbGV2YW50IHN1Z2dlc3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBvcHRpb25zIC0gT3B0aW9uYWwgYXJyYXkgb2Ygb3B0aW9ucyB0byBkaXNwbGF5XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVGb2N1cyhvcHRpb25zOiBzdHJpbmdbXSAgPSBbXSk6IHZvaWQge1xuICAgIGlmKCFvcHRpb25zLmxlbmd0aClcbiAgICAgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgYmx1ciBldmVudHMgb24gdGhlIGlucHV0IGZpZWxkIHdpdGggZGVsYXllZCBjbG9zaW5nLlxuICAgKiBAc3VtbWFyeSBNYW5hZ2VzIHRoZSBkcm9wZG93biBjbG9zaW5nIGJlaGF2aW9yIHdpdGggYSBkZWxheSB0byBhbGxvdyBmb3Igb3B0aW9uIHNlbGVjdGlvbi5cbiAgICogVXNlcyBhIHR3by1waGFzZSBhcHByb2FjaCB0byBwcmV2ZW50IHByZW1hdHVyZSBjbG9zaW5nIHdoZW4gdXNlcnMgY2xpY2sgb24gZHJvcGRvd24gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBjbG9zZSAtIEludGVybmFsIGZsYWcgdG8gY29udHJvbCB0aGUgY2xvc2luZyBwaGFzZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlQmx1cihjbG9zZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYoIWNsb3NlKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQmx1cih0cnVlKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKCF0aGlzLmRyb3Bkb3duT3BlbiAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgZmlsdGVyIHN0ZXAuXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvbnRleHR1YWxseSByZWxldmFudCBvcHRpb25zIGZvciB0aGUgY3VycmVudCBzdGVwIGluIHRoZSBmaWx0ZXIgY3JlYXRpb24gcHJvY2Vzcy5cbiAgICogU3RlcCAxIHNob3dzIGluZGV4ZXMsIFN0ZXAgMiBzaG93cyBjb25kaXRpb25zLCBTdGVwIDMgc2hvd3Mgbm8gb3B0aW9ucyAodmFsdWUgaW5wdXQpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFycmF5IG9mIG9wdGlvbnMgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHN0ZXBcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZ2V0T3B0aW9ucygpOiBzdHJpbmdbXSB7XG4gICBzd2l0Y2ggKHRoaXMuc3RlcCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmluZGV4ZXM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNvbmRpdGlvbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGZpbHRlciBzdGVwIG9yIGNvbXBsZXRlcyBmaWx0ZXIgY3JlYXRpb24gdGhyb3VnaCBhIHRocmVlLXN0ZXAgcHJvY2Vzcy5cbiAgICogQHN1bW1hcnkgQ29yZSBtZXRob2QgZm9yIGJ1aWxkaW5nIGZpbHRlcnMgc3RlcCBieSBzdGVwOiBTdGVwIDEgKEluZGV4KSDihpIgU3RlcCAyIChDb25kaXRpb24pIOKGkiBTdGVwIDMgKFZhbHVlKS5cbiAgICogV2hlbiBhbGwgc3RlcHMgYXJlIGNvbXBsZXRlLCBjcmVhdGVzIGEgY29tcGxldGUgZmlsdGVyIG9iamVjdCBhbmQgYWRkcyBpdCB0byB0aGUgZmlsdGVyIGNvbGxlY3Rpb24uXG4gICAqIEhhbmRsZXMgYm90aCBrZXlib2FyZCBldmVudHMgKEVudGVyIHRvIHN1Ym1pdCkgYW5kIHByb2dyYW1tYXRpYyBjYWxscy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZCBmb3IgdGhlIGN1cnJlbnQgc3RlcFxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIE9wdGlvbmFsIGV2ZW50IChLZXlib2FyZEV2ZW50IHRyaWdnZXJzIHN1Ym1pc3Npb24gd2hlbiB2YWx1ZSBpcyBlbXB0eSlcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PkY6IGFkZEZpbHRlcih2YWx1ZSwgZXZlbnQpXG4gICAqICAgRi0+PkY6IFRyaW0gYW5kIHZhbGlkYXRlIHZhbHVlXG4gICAqICAgYWx0IEtleWJvYXJkRXZlbnQgJiYgZW1wdHkgdmFsdWVcbiAgICogICAgIEYtPj5GOiBzdWJtaXQoKSAtIFNlbmQgY3VycmVudCBmaWx0ZXJzXG4gICAqICAgZWxzZSBWYWxpZCB2YWx1ZSBvciBzdGVwIDNcbiAgICogICAgIGFsdCBTdGVwIDEgKEluZGV4KVxuICAgKiAgICAgICBGLT4+RjogbGFzdEZpbHRlci5pbmRleCA9IHZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBvcHRpb25zID0gY29uZGl0aW9uc1xuICAgKiAgICAgZWxzZSBTdGVwIDIgKENvbmRpdGlvbilcbiAgICogICAgICAgRi0+PkY6IGxhc3RGaWx0ZXIuY29uZGl0aW9uID0gdmFsdWVcbiAgICogICAgICAgRi0+PkY6IG9wdGlvbnMgPSBbXVxuICAgKiAgICAgZWxzZSBTdGVwIDMgKFZhbHVlKVxuICAgKiAgICAgICBGLT4+RjogbGFzdEZpbHRlci52YWx1ZSA9IHZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBBZGQgY29tcGxldGUgZmlsdGVyIHRvIGZpbHRlclZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBSZXNldCBzdGVwIHRvIDFcbiAgICogICAgIGVuZFxuICAgKiAgICAgRi0+PkY6IEluY3JlbWVudCBzdGVwXG4gICAqICAgICBGLT4+RjogQ2xlYXIgaW5wdXQgJiBmb2N1c1xuICAgKiAgICAgRi0+PkY6IFNob3cgbmV4dCBvcHRpb25zXG4gICAqICAgZW5kXG4gICAqXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGFkZEZpbHRlcih2YWx1ZTogc3RyaW5nLCBldmVudD86IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgaWYoZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50ICYmICF2YWx1ZSkge1xuICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgIGlmKCh2YWx1ZSAmJiAoIShldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpKSB8fCB0aGlzLnN0ZXAgPT09IDMpKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMubGFzdEZpbHRlcjtcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0ZXApIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICBmaWx0ZXJbJ2luZGV4J10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuY29uZGl0aW9ucztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGZpbHRlclsnY29uZGl0aW9uJ10gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgZmlsdGVyWyd2YWx1ZSddID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmluZGV4ZXM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5maWx0ZXJWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZih0aGlzLnN0ZXAgPT09IDEpXG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlLnB1c2goZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnN0ZXAgPT09IDMpIHtcbiAgICAgICAgICB0aGlzLnN0ZXAgPSAwO1xuICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWVbdGhpcy5maWx0ZXJWYWx1ZS5sZW5ndGggLSAxXSA9IGZpbHRlcjtcbiAgICAgICAgICB0aGlzLmxhc3RGaWx0ZXIgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0ZXArKztcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgICBpZih0aGlzLm9wdGlvbnMubGVuZ3RoKVxuICAgICAgICAgIHRoaXMuaGFuZGxlRm9jdXModGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2VsZWN0cyBhbiBvcHRpb24gZnJvbSB0aGUgZHJvcGRvd24gc3VnZ2VzdGlvbnMuXG4gICAqIEBzdW1tYXJ5IEhhbmRsZXMgb3B0aW9uIHNlbGVjdGlvbiB3aGVuIGEgdXNlciBjbGlja3Mgb24gYSBzdWdnZXN0aW9uIGluIHRoZSBkcm9wZG93bi5cbiAgICogVGhpcyBtZXRob2QgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIGRyb3Bkb3duIGNsaWNrcyBhbmQgdGhlIG1haW4gYWRkRmlsdGVyIGxvZ2ljLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBjbGljayBldmVudCBmcm9tIHRoZSBkcm9wZG93biBvcHRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVGhlIHNlbGVjdGVkIG9wdGlvbiB2YWx1ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc2VsZWN0T3B0aW9uKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmFkZEZpbHRlcih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgYSBmaWx0ZXIgb3B0aW9uIGNhbiBiZSBpbmRpdmlkdWFsbHkgcmVtb3ZlZC5cbiAgICogQHN1bW1hcnkgQ2hlY2tzIHdoZXRoZXIgYSBmaWx0ZXIgY29tcG9uZW50IHNob3VsZCBkaXNwbGF5IGEgY2xvc2UgaWNvbiBmb3IgcmVtb3ZhbC5cbiAgICogT25seSB2YWx1ZSBvcHRpb25zIGNhbiBiZSByZW1vdmVkIGluZGl2aWR1YWxseTsgaW5kZXggYW5kIGNvbmRpdGlvbiBvcHRpb25zIGFyZSBwYXJ0XG4gICAqIG9mIHRoZSBjb21wbGV0ZSBmaWx0ZXIgc3RydWN0dXJlIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZCBzZXBhcmF0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9uIC0gVGhlIGZpbHRlciBvcHRpb24gdGV4dCB0byBjaGVja1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb3B0aW9uIGNhbiBiZSBjbGVhcmVkIGluZGl2aWR1YWxseSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGFsbG93Q2xlYXIob3B0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmRleGVzLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEgJiYgdGhpcy5jb25kaXRpb25zLmluZGV4T2Yob3B0aW9uKSA9PT0gLTE7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBjb21wbGV0ZSBmaWx0ZXIgZnJvbSB0aGUgY29sbGVjdGlvbiBiYXNlZCBvbiBmaWx0ZXIgdmFsdWUuXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBjb21wbGV0ZSBmaWx0ZXIgYnkgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIHZhbHVlIGFnYWluc3QgZmlsdGVyIHZhbHVlc1xuICAgKiBpbiB0aGUgY29sbGVjdGlvbi4gVXNlcyBzdHJpbmcgbm9ybWFsaXphdGlvbiB0byBoYW5kbGUgYWNjZW50cyBhbmQgY2FzZSBkaWZmZXJlbmNlcy5cbiAgICogQWZ0ZXIgcmVtb3ZhbCwgcmVzZXRzIHRoZSBpbnRlcmZhY2UgdG8gc2hvdyBhdmFpbGFibGUgaW5kZXhlcyBmb3IgbmV3IGZpbHRlciBjcmVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbHRlciAtIFRoZSBmaWx0ZXIgdmFsdWUgdG8gcmVtb3ZlIChtYXRjaGVzIGFnYWluc3QgZmlsdGVyLnZhbHVlIHByb3BlcnR5KVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgRiBhcyBGaWx0ZXJDb21wb25lbnRcbiAgICpcbiAgICogICBVLT4+RjogcmVtb3ZlRmlsdGVyKGZpbHRlclZhbHVlKVxuICAgKiAgIEYtPj5GOiBjbGVhblN0cmluZyhmaWx0ZXJWYWx1ZSlcbiAgICogICBGLT4+RjogRmlsdGVyIG91dCBtYXRjaGluZyBmaWx0ZXIgb2JqZWN0c1xuICAgKiAgIEYtPj5GOiBDbGVhciBpbnB1dCB2YWx1ZVxuICAgKiAgIEYtPj5GOiBoYW5kbGVGb2N1cyhpbmRleGVzKSAtIFJlc2V0IHRvIGluZGV4IHNlbGVjdGlvblxuICAgKiAgIE5vdGUgb3ZlciBGOiBGaWx0ZXIgcmVtb3ZlZCBhbmQgVUkgcmVzZXRcbiAgICpcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgcmVtb3ZlRmlsdGVyKGZpbHRlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgZnVuY3Rpb24gY2xlYW5TdHJpbmcoZmlsdGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGZpbHRlclxuICAgICAgICAudG9Mb3dlckNhc2UoKSAgICAgICAgICAgICAgICAgLy8gY29udmVydCBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2VcbiAgICAgICAgLm5vcm1hbGl6ZShcIk5GRFwiKSAgICAgICAgICAgICAgLy8gc2VwYXJhdGUgYWNjZW50IG1hcmtzIGZyb20gY2hhcmFjdGVyc1xuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIikgLy8gcmVtb3ZlIGFjY2VudCBtYXJrc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTsgICAgICAgICAgLy8gcmVtb3ZlIGFsbCB3aGl0ZXNwYWNlXG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLmZpbHRlclZhbHVlLmZpbHRlcigoaXRlbSkgPT4gaXRlbT8uWyd2YWx1ZSddICYmIGNsZWFuU3RyaW5nKGl0ZW0/LlsndmFsdWUnXSkgIT09IGNsZWFuU3RyaW5nKGZpbHRlcikpO1xuICAgIGlmKHRoaXMuZmlsdGVyVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgdGhpcy5sYXN0RmlsdGVyID0ge307XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRm9jdXModGhpcy5pbmRleGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzZXRzIHRoZSBjb21wb25lbnQgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG4gICAqIEBzdW1tYXJ5IENsZWFycyBhbGwgZmlsdGVyIGRhdGEsIG9wdGlvbnMsIGFuZCByZXNldHMgdGhlIHN0ZXAgY291bnRlciB0byAxLlxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhIGNsZWFuIHNsYXRlIGZvciBuZXcgZmlsdGVyIGNyZWF0aW9uIHdpdGhvdXQgZW1pdHRpbmcgZXZlbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLmZpbHRlclZhbHVlID0gW107XG4gICAgdGhpcy5zdGVwID0gMTtcbiAgICB0aGlzLmxhc3RGaWx0ZXIgPSB7fTtcbiAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIGZpbHRlcnMgYW5kIG5vdGlmaWVzIHBhcmVudCBjb21wb25lbnRzLlxuICAgKiBAc3VtbWFyeSBSZXNldHMgdGhlIGNvbXBvbmVudCBzdGF0ZSBhbmQgZW1pdHMgdW5kZWZpbmVkIHRvIG5vdGlmeSBwYXJlbnQgY29tcG9uZW50c1xuICAgKiB0aGF0IGFsbCBmaWx0ZXJzIGhhdmUgYmVlbiBjbGVhcmVkLiBUaGlzIHRyaWdnZXJzIGFueSBjb25uZWN0ZWQgZGF0YSByZWZyZXNoIGxvZ2ljLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBPcHRpb25hbCBwYXJhbWV0ZXIgKGN1cnJlbnRseSB1bnVzZWQpXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBjbGVhcih2YWx1ZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmKCF2YWx1ZSlcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU3VibWl0cyB0aGUgY3VycmVudCBmaWx0ZXIgY29sbGVjdGlvbiB0byBwYXJlbnQgY29tcG9uZW50cy5cbiAgICogQHN1bW1hcnkgRW1pdHMgdGhlIGN1cnJlbnQgZmlsdGVyIGFycmF5IHRvIHBhcmVudCBjb21wb25lbnRzIHdoZW4gZmlsdGVycyBhcmUgcmVhZHlcbiAgICogdG8gYmUgYXBwbGllZC4gT25seSBlbWl0cyBpZiB0aGVyZSBhcmUgYWN0aXZlIGZpbHRlcnMuIENsZWFycyBvcHRpb25zIGFmdGVyIHN1Ym1pc3Npb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBzdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJFdmVudC5lbWl0KHtcbiAgICAgIHF1ZXJ5OiB0aGlzLmZpbHRlclZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLmZpbHRlclZhbHVlIDogdW5kZWZpbmVkLFxuICAgICAgc29ydDoge1xuICAgICAgICB2YWx1ZTogdGhpcy5zb3J0VmFsdWUsXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5zb3J0RGlyZWN0aW9uXG4gICAgICB9XG4gICAgfSBhcyBJRmlsdGVyUXVlcnkpO1xuICAgIGlmKHRoaXMuZmlsdGVyVmFsdWUubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRvZ2dsZXMgdGhlIHNvcnQgZGlyZWN0aW9uIGJldHdlZW4gYXNjZW5kaW5nIGFuZCBkZXNjZW5kaW5nLlxuICAgKiBAc3VtbWFyeSBIYW5kbGVzIHNvcnQgZGlyZWN0aW9uIGNoYW5nZXMgYnkgdG9nZ2xpbmcgYmV0d2VlbiBBU0MgYW5kIERTQyB2YWx1ZXMuXG4gICAqIFdoZW4gdGhlIGRpcmVjdGlvbiBjaGFuZ2VzLCBhdXRvbWF0aWNhbGx5IHRyaWdnZXJzIGEgc3VibWl0IHRvIGFwcGx5IHRoZSBuZXdcbiAgICogc29ydGluZyBjb25maWd1cmF0aW9uIHRvIHRoZSBmaWx0ZXJlZCByZXN1bHRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5zb3J0RGlyZWN0aW9uID09PSAgT3JkZXJEaXJlY3Rpb24uQVNDID8gT3JkZXJEaXJlY3Rpb24uRFNDIDogT3JkZXJEaXJlY3Rpb24uQVNDO1xuICAgIGlmKGRpcmVjdGlvbiAhPT0gdGhpcy5zb3J0RGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICB0aGlzLnN1Ym1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBzb3J0IGZpZWxkIHNlbGVjdGlvbiBjaGFuZ2VzIGZyb20gdGhlIGRyb3Bkb3duLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgc29ydCBmaWVsZCBjaGFuZ2VzIHdoZW4gdXNlcnMgc2VsZWN0IGEgZGlmZmVyZW50IGZpZWxkXG4gICAqIGZyb20gdGhlIHNvcnQgZHJvcGRvd24uIFVwZGF0ZXMgdGhlIHNvcnRWYWx1ZSBwcm9wZXJ0eSBhbmQgdHJpZ2dlcnNcbiAgICogYSBzdWJtaXQgdG8gYXBwbHkgdGhlIG5ldyBzb3J0aW5nIGNvbmZpZ3VyYXRpb24gaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50fSBldmVudCAtIFRoZSBzZWxlY3QgY2hhbmdlIGV2ZW50IGNvbnRhaW5pbmcgdGhlIG5ldyBzb3J0IGZpZWxkIHZhbHVlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW9uU2VsZWN0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZTtcbiAgICBpZih2YWx1ZSAhPT0gdGhpcy5zb3J0VmFsdWUpIHtcbiAgICAgIHRoaXMuc29ydFZhbHVlID0gdmFsdWUgYXMgc3RyaW5nO1xuICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZpbHRlcnMgYXZhaWxhYmxlIG9wdGlvbnMgYmFzZWQgb24gdXNlciBpbnB1dCB3aXRoIHZpc3VhbCBoaWdobGlnaHRpbmcuXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIHJlYWwtdGltZSBmaWx0ZXJpbmcgb2YgYXZhaWxhYmxlIG9wdGlvbnMgYmFzZWQgb24gdXNlciBpbnB1dC5cbiAgICogQWxzbyBoYW5kbGVzIHZpc3VhbCBoaWdobGlnaHRpbmcgb2YgbWF0Y2hpbmcgb3B0aW9ucyBpbiB0aGUgZHJvcGRvd24uIFJldHVybnMgYWxsXG4gICAqIG9wdGlvbnMgaWYgaW5wdXQgaXMgbGVzcyB0aGFuIDIgY2hhcmFjdGVycyBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlIC0gVGhlIHNlYXJjaCB2YWx1ZSB0byBmaWx0ZXIgYnlcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBBcnJheSBvZiBmaWx0ZXJlZCBvcHRpb25zIHRoYXQgbWF0Y2ggdGhlIGlucHV0XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gICAqICAgcGFydGljaXBhbnQgRCBhcyBET01cbiAgICpcbiAgICogICBVLT4+RjogZmlsdGVyT3B0aW9ucyhpbnB1dFZhbHVlKVxuICAgKiAgIGFsdCBpbnB1dFZhbHVlIDwgMiBjaGFyYWN0ZXJzXG4gICAqICAgICBGLT4+RDogUmVtb3ZlIGV4aXN0aW5nIGhpZ2hsaWdodHNcbiAgICogICAgIEYtLT4+VTogUmV0dXJuIGFsbCBvcHRpb25zXG4gICAqICAgZWxzZSBpbnB1dFZhbHVlID49IDIgY2hhcmFjdGVyc1xuICAgKiAgICAgRi0+PkQ6IFF1ZXJ5IGFsbCBvcHRpb24gZWxlbWVudHNcbiAgICogICAgIEYtPj5EOiBBZGQgaGlnaGxpZ2h0IHRvIGZpcnN0IG1hdGNoaW5nIG9wdGlvblxuICAgKiAgICAgRi0+PkY6IEZpbHRlciBvcHRpb25zIGJ5IHN1YnN0cmluZyBtYXRjaFxuICAgKiAgICAgRi0tPj5VOiBSZXR1cm4gZmlsdGVyZWQgb3B0aW9uc1xuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBmaWx0ZXJPcHRpb25zKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgIHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBvcHRpb25zRWxlbWVudCA9IHRoaXMub3B0aW9uc0ZpbHRlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBpZighdmFsdWU/Lmxlbmd0aCB8fCAhdmFsdWUgfHwgdmFsdWUubGVuZ3RoIDwgMikge1xuICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb24gPSBvcHRpb25zRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGNmLWZpbHRlcmluZy1pdGVtJyk7XG4gICAgICBpZihmaWx0ZXJlZE9wdGlvbilcbiAgICAgICAgZmlsdGVyZWRPcHRpb24uY2xhc3NMaXN0LnJlbW92ZSgnZGNmLWZpbHRlcmluZy1pdGVtJyk7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gb3B0aW9uc0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRjZi1pdGVtJyk7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgY29uc3QgaXNBY3RpdmUgPSBvcHRpb24udGV4dENvbnRlbnQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZihpc0FjdGl2ZSkge1xuICAgICAgICBvcHRpb24uY2xhc3NMaXN0LmFkZCgnZGNmLWZpbHRlcmluZy1pdGVtJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlcigob3B0aW9uOiBzdHJpbmcpID0+IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkgYXMgc3RyaW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgc2VhcmNoIGV2ZW50cyBmcm9tIHRoZSBpbnRlZ3JhdGVkIHNlYXJjaGJhciBjb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBzZWFyY2ggaW5wdXQgZnJvbSB0aGUgc2VhcmNoYmFyIGFuZCBlbWl0cyBzZWFyY2ggZXZlbnRzXG4gICAqIHRvIHBhcmVudCBjb21wb25lbnRzLiBUaGlzIG1ldGhvZCBhY3RzIGFzIGEgYnJpZGdlIGJldHdlZW4gdGhlIGludGVybmFsXG4gICAqIHNlYXJjaGJhciBjb21wb25lbnQgYW5kIGV4dGVybmFsIHNlYXJjaCBldmVudCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIFRoZSBzZWFyY2ggdmFsdWUgZW50ZXJlZCBieSB0aGUgdXNlclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlU2VhcmNoKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaEV2ZW50LmVtaXQodmFsdWUpO1xuICB9XG5cbn1cbiIsIlxuQGlmKCFpbmRleGVzLmxlbmd0aCkge1xuICA8bmd4LWRlY2FmLXNlYXJjaGJhciBbZW1pdEV2ZW50VG9XaW5kb3ddPVwiZmFsc2VcIiBbZGVib3VuY2VdPVwiNTAwXCIgKHNlYXJjaEV2ZW50KT1cImhhbmRsZVNlYXJjaCgkZXZlbnQpXCIgLz5cbn1cblxuPGRpdiBbaWRdPVwidWlkXCIgY2xhc3M9XCJkY2YtZ3JpZCBkY2YtZ3JpZC1zbWFsbCBkY2YtZ3JpZC1tYXRjaCBkY2YtZmlsdGVyLWdyaWRcIiBbbmdDbGFzc109XCJ7J2RjZi1oaWRkZW4nOiAhaW5kZXhlcy5sZW5ndGh9XCI+XG4gIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtZXhwYW5kXCI+XG4gICAgPGRpdiBjbGFzcz1cImRjZi1maWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaW5wdXRcIj5cbiAgICAgICAgQGZvcihmaWx0ZXIgb2YgZmlsdGVyVmFsdWU7IHRyYWNrIHRyYWNrSXRlbUZuKCRpbmRleCwgZmlsdGVyPy5bJ2luZGV4J10pKSB7XG4gICAgICAgICAgQGlmKGZpbHRlcj8uWydpbmRleCddKSB7XG4gICAgICAgICAgICA8aW9uLWNoaXAgW291dGxpbmVdPVwidHJ1ZVwiPnt7IGZpbHRlcj8uWydpbmRleCddIH19PC9pb24tY2hpcD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmKGZpbHRlcj8uWydjb25kaXRpb24nXSkge1xuICAgICAgICAgICAgPGlvbi1jaGlwIFtvdXRsaW5lXT1cInRydWVcIj57eyBmaWx0ZXI/LlsnY29uZGl0aW9uJ10gfX08L2lvbi1jaGlwPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYoZmlsdGVyPy5bJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgIDxpb24tY2hpcCBbb3V0bGluZV09XCJ0cnVlXCIgY2xhc3M9XCJkY2YtZmlsdGVyLXZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7IGZpbHRlcj8uWyd2YWx1ZSddIH19XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGZpbHRlcj8uWyd2YWx1ZSddKVwiIHNpemU9XCJzbWFsbFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1jaGlwPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMVwiPlxuICAgICAgICAgICAgIDwhLS0gW3JlYWRvbmx5XT1cInN0ZXAgIT09IDNcIiAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWRkRmlsdGVyKHZhbHVlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJjbGVhcih2YWx1ZSlcIlxuICAgICAgICAgICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcblxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBsb2NhbGUgKyAoc3RlcCA9PT0gMyA/ICcudHlwZScgOiAnLnNlbGVjdCcpIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICNjb21wb25lbnRcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBpZih3aW5kb3dXaWR0aCA+PSA3NjgpIHtcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZHJvcGRvd24gJyArIChvcHRpb25zLmxlbmd0aCA+IDAgPyAnIGRjZi1hY3RpdmUnIDogJycpXCIgI29wdGlvbnNGaWx0ZXJFbGVtZW50PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIEBpZihmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgQGZvcihrZXkgb2YgZmlsdGVyZWRPcHRpb25zOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGNmLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0T3B0aW9uKGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24oa2V5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtZW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyZWRPcHRpb25zID0gb3B0aW9uczsgdmFsdWUgPSAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUgKyAnLm5vX3N1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZihmaWx0ZXJWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaWNvbi1jbGVhclwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBbY29sb3JdPVwiIWlzRGFya01vZGUgPyAnZGFyaycgOiAnbWVkaXVtJ1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tc2VhcmNoXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJzdWJtaXQoKVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2VhcmNoLW91dGxpbmVcIiBbY29sb3JdPVwiIWlzRGFya01vZGUgPyAnZGFyaycgOiAnbWVkaXVtJ1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBAaWYod2luZG93V2lkdGggPCA3NjgpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZHJvcGRvd24gJyArIChvcHRpb25zLmxlbmd0aCA+IDAgPyAnIGRjZi1hY3RpdmUnIDogJycpXCIgI29wdGlvbnNGaWx0ZXJFbGVtZW50PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIEBpZihmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgQGZvcihrZXkgb2YgZmlsdGVyZWRPcHRpb25zOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGNmLWl0ZW1cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0T3B0aW9uKGtleSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24oa2V5KVwiPlxuICAgICAgICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtZW1wdHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBsb2NhbGUgKyAnLm5vX3N1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZighZGlzYWJsZVNvcnQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtNUBtIGRjZi13aWR0aC0xLTEgZGNmLXNvcnQtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWdyaWQgZGNmLWdyaWQtY29sbGFwc2UgZGNmLWZsZXggZGNmLWZsZXgtbWlkZGxlIGRjZi1ncmlkLW1hdGNoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtZXhwYW5kXCI+XG4gICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgICAgdG9nZ2xlSWNvbj1cImNoZXZyb24tZG93bi1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgZXhwYW5kZWRJY29uPVwiY2hldnJvbi11cC1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkY2Ytc29ydC1zZWxlY3RcIlxuICAgICAgICAgICAgICAoaW9uQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic29ydFZhbHVlXCJcbiAgICAgICAgICAgICAgbGFiZWwtcGxhY2VtZW50PVwiZmxvYXRpbmdcIlxuICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJsb2NhbGUgKyAnLnNvcnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3Ioc29ydCBvZiBzb3J0Qnk7IHRyYWNrIHNvcnQpIHtcblxuICAgICAgICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cInNvcnRcIj57eyBzb3J0IHwgdHJhbnNsYXRlIH19PC9pb24tc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLWF1dG9cIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlU29ydERpcmVjdGlvbkNoYW5nZSgpXCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCIhaXNEYXJrTW9kZSA/ICdwcmltYXJ5JyA6ICdtZWRpdW0nXCIgW25hbWVdPVwic29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Fycm93LWRvd24tb3V0bGluZScgOiAnYXJyb3ctdXAtb3V0bGluZSdcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cblxuIl19
|
|
700
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN0SCxPQUFPLEVBQUUsT0FBTyxFQUFrQyxNQUFNLGNBQWMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTdDOzs7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QkFjTixNQUFNO3NCQURMLEtBQUs7Z0JBY04sV0FBVztzQkFEVixLQUFLO2dCQW1KTixXQUFXO3NCQURWLE1BQU07Z0JBVVAsV0FBVztzQkFEVixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZW5naW5lL05neEJhc2VDb21wb25lbnQnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25DaGlwLCBJb25JY29uLCBJb25JdGVtLCBJb25MYWJlbCwgSW9uU2VsZWN0LCBJb25TZWxlY3RPcHRpb259IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgRHluYW1pYywgSUZpbHRlclF1ZXJ5LCBJRmlsdGVyUXVlcnlJdGVtIH0gZnJvbSAnLi4vLi4vZW5naW5lJztcbmltcG9ydCB7IGdldFdpbmRvd1dpZHRoLCBpc0RhcmtNb2RlIH0gZnJvbSAnLi4vLi4vaGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPcmRlckRpcmVjdGlvbiwgUmVwb3NpdG9yeSB9IGZyb20gJ0BkZWNhZi10cy9jb3JlJztcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IFNlYXJjaGJhckNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaGJhci9zZWFyY2hiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgY2hldnJvbkRvd25PdXRsaW5lLCBjaGV2cm9uVXBPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFkdmFuY2VkIGZpbHRlciBjb21wb25lbnQgZm9yIGNyZWF0aW5nIGR5bmFtaWMgc2VhcmNoIGZpbHRlcnMgd2l0aCBzdGVwLWJ5LXN0ZXAgY29uc3RydWN0aW9uLlxuICogQHN1bW1hcnkgVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBjb21wcmVoZW5zaXZlIGZpbHRlcmluZyBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgdXNlcnMgdG8gYnVpbGRcbiAqIGNvbXBsZXggc2VhcmNoIGNyaXRlcmlhIHVzaW5nIGEgdGhyZWUtc3RlcCBhcHByb2FjaDogc2VsZWN0IGluZGV4IOKGkiBzZWxlY3QgY29uZGl0aW9uIOKGkiBlbnRlciB2YWx1ZS5cbiAqIEl0IHN1cHBvcnRzIGZpbHRlcmluZyBieSBtdWx0aXBsZSBmaWVsZCBpbmRleGVzLCBjb21wYXJpc29uIGNvbmRpdGlvbnMsIGFuZCB2YWx1ZXMsIGRpc3BsYXlpbmdcbiAqIHNlbGVjdGVkIGZpbHRlcnMgYXMgcmVtb3ZhYmxlIGNoaXBzLiBUaGUgY29tcG9uZW50IGlzIHJlc3BvbnNpdmUgYW5kIGluY2x1ZGVzIGF1dG8tc3VnZ2VzdGlvbnNcbiAqIHdpdGgga2V5Ym9hcmQgbmF2aWdhdGlvbiBzdXBwb3J0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8bmd4LWRlY2FmLWZpbHRlclxuICogICBbaW5kZXhlc109XCJbJ25hbWUnLCAnZW1haWwnLCAnZGVwYXJ0bWVudCcsICdzdGF0dXMnXVwiXG4gKiAgIFtjb25kaXRpb25zXT1cIlsnRXF1YWwnLCAnQ29udGFpbnMnLCAnR3JlYXRlciBUaGFuJywgJ0xlc3MgVGhhbiddXCJcbiAqICAgW3NvcnRdPVwiWydjcmVhdGVkQXQnLCAndXBkYXRlZEF0J11cIlxuICogICBbZGlzYWJsZVNvcnRdPVwiZmFsc2VcIlxuICogICAoZmlsdGVyRXZlbnQpPVwib25GaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCI+XG4gKiA8L25neC1kZWNhZi1maWx0ZXI+XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICogICBwYXJ0aWNpcGFudCBGIGFzIEZpbHRlckNvbXBvbmVudFxuICogICBwYXJ0aWNpcGFudCBQIGFzIFBhcmVudCBDb21wb25lbnRcbiAqXG4gKiAgIFUtPj5GOiBGb2N1cyBpbnB1dCBmaWVsZFxuICogICBGLT4+RjogaGFuZGxlRm9jdXMoKSAtIFNob3cgYXZhaWxhYmxlIGluZGV4ZXNcbiAqICAgVS0+PkY6IFNlbGVjdCBpbmRleCAoZS5nLiwgXCJuYW1lXCIpXG4gKiAgIEYtPj5GOiBhZGRGaWx0ZXIoKSAtIFN0ZXAgMSBjb21wbGV0ZWRcbiAqICAgRi0+PkY6IFNob3cgYXZhaWxhYmxlIGNvbmRpdGlvbnNcbiAqICAgVS0+PkY6IFNlbGVjdCBjb25kaXRpb24gKGUuZy4sIFwiQ29udGFpbnNcIilcbiAqICAgRi0+PkY6IGFkZEZpbHRlcigpIC0gU3RlcCAyIGNvbXBsZXRlZFxuICogICBGLT4+RjogU2hvdyB2YWx1ZSBpbnB1dCBwcm9tcHRcbiAqICAgVS0+PkY6IEVudGVyIHZhbHVlIGFuZCBwcmVzcyBFbnRlclxuICogICBGLT4+RjogYWRkRmlsdGVyKCkgLSBTdGVwIDMgY29tcGxldGVkXG4gKiAgIEYtPj5GOiBDcmVhdGUgY29tcGxldGUgZmlsdGVyIG9iamVjdFxuICogICBGLT4+UDogRW1pdCBmaWx0ZXJFdmVudCB3aXRoIG5ldyBmaWx0ZXIgYXJyYXlcbiAqICAgRi0+PkY6IFJlc2V0IHRvIHN0ZXAgMSBmb3IgbmV4dCBmaWx0ZXJcbiAqXG4gKiBAbWVtYmVyT2YgRm9yQW5ndWxhckNvbW1vbk1vZHVsZVxuICovXG5ARHluYW1pYygpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGVjYWYtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBJb25MYWJlbCxcbiAgICBJb25JdGVtLFxuICAgIElvbkNoaXAsXG4gICAgSW9uSWNvbixcbiAgICBJb25CdXR0b24sXG4gICAgSW9uU2VsZWN0LFxuICAgIElvblNlbGVjdE9wdGlvbixcbiAgICBJb25JY29uLFxuICAgIFNlYXJjaGJhckNvbXBvbmVudFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgZXh0ZW5kcyBOZ3hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVmZXJlbmNlIHRvIHRoZSBkcm9wZG93biBvcHRpb25zIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAc3VtbWFyeSBWaWV3Q2hpbGQgcmVmZXJlbmNlIHVzZWQgdG8gYWNjZXNzIGFuZCBtYW5pcHVsYXRlIHRoZSBkcm9wZG93biBvcHRpb25zIGVsZW1lbnRcbiAgICogZm9yIGhpZ2hsaWdodGluZyBmaWx0ZXJlZCBpdGVtcyBhbmQgbWFuYWdpbmcgdmlzdWFsIGZlZWRiYWNrIGR1cmluZyBvcHRpb24gc2VsZWN0aW9uLlxuICAgKiBUaGlzIGVsZW1lbnQgY29udGFpbnMgdGhlIGZpbHRlcmFibGUgc3VnZ2VzdGlvbnMgdGhhdCB1c2VycyBjYW4gaW50ZXJhY3Qgd2l0aC5cbiAgICpcbiAgICogQHR5cGUge0VsZW1lbnRSZWZ9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNGaWx0ZXJFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIG9wdGlvbnNGaWx0ZXJFbGVtZW50ITogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEF2YWlsYWJsZSBmaWVsZCBpbmRleGVzIGZvciBmaWx0ZXJpbmcgb3BlcmF0aW9ucy5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbGlzdCBvZiBmaWVsZCBuYW1lcyB0aGF0IHVzZXJzIGNhbiBmaWx0ZXIgYnkuIFRoZXNlIHJlcHJlc2VudFxuICAgKiB0aGUgZGF0YSBwcm9wZXJ0aWVzIGF2YWlsYWJsZSBmb3IgZmlsdGVyaW5nIG9wZXJhdGlvbnMuIEVhY2ggaW5kZXggY29ycmVzcG9uZHMgdG9cbiAgICogYSBmaWVsZCBpbiB0aGUgZGF0YSBtb2RlbCB0aGF0IHN1cHBvcnRzIGNvbXBhcmlzb24gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBpbmRleGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXZhaWxhYmxlIGNvbXBhcmlzb24gY29uZGl0aW9ucyBmb3IgZmlsdGVycy5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbGlzdCBvZiBjb21wYXJpc29uIG9wZXJhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgZmlsdGVycy5cbiAgICogVGhlc2UgY29uZGl0aW9ucyBkZXRlcm1pbmUgaG93IHRoZSBmaWx0ZXIgdmFsdWUgaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgZmllbGQgdmFsdWUuXG4gICAqIENvbW1vbiBjb25kaXRpb25zIGluY2x1ZGUgZXF1YWxpdHksIGNvbnRhaW5tZW50LCBhbmQgbnVtZXJpY2FsIGNvbXBhcmlzb24gb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBjb25kaXRpb25zOiBzdHJpbmdbXSA9IFsnRXF1YWwnLCAnQ29udGFpbnMnLCAnTm90IENvbnRhaW5zJywgJ0dyZWF0ZXIgVGhhbicsICdMZXNzIFRoYW4nLCAnTm90IEVxdWFsJ107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBdmFpbGFibGUgc29ydGluZyBvcHRpb25zIGZvciB0aGUgZmlsdGVyZWQgZGF0YS5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgbGlzdCBvZiBmaWVsZCBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIGZvciBzb3J0aW5nIHRoZSBmaWx0ZXJlZCByZXN1bHRzLlxuICAgKiBXaGVuIGRpc2FibGVTb3J0IGlzIGZhbHNlLCB0aGlzIGFycmF5IGlzIGF1dG9tYXRpY2FsbHkgbWVyZ2VkIHdpdGggdGhlIGluZGV4ZXMgYXJyYXlcbiAgICogdG8gcHJvdmlkZSBjb21wcmVoZW5zaXZlIHNvcnRpbmcgY2FwYWJpbGl0aWVzLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNvcnRCeTogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIHdoZXRoZXIgc29ydGluZyBmdW5jdGlvbmFsaXR5IGlzIGRpc2FibGVkLlxuICAgKiBAc3VtbWFyeSBXaGVuIHNldCB0byB0cnVlLCBwcmV2ZW50cyB0aGUgYXV0b21hdGljIG1lcmdpbmcgb2Ygc29ydCBhbmQgaW5kZXhlcyBhcnJheXMsXG4gICAqIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBzb3J0aW5nIGNhcGFiaWxpdGllcy4gVGhpcyBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBwcm92aWRlXG4gICAqIGZpbHRlcmluZyB3aXRob3V0IHNvcnRpbmcgb3B0aW9ucy5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVTb3J0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHdpbmRvdyB3aWR0aCBmb3IgcmVzcG9uc2l2ZSBiZWhhdmlvci5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBjdXJyZW50IGJyb3dzZXIgd2luZG93IHdpZHRoIGluIHBpeGVscy4gVGhpcyB2YWx1ZSBpcyB1cGRhdGVkXG4gICAqIG9uIHdpbmRvdyByZXNpemUgZXZlbnRzIHRvIGVuYWJsZSByZXNwb25zaXZlIGZpbHRlcmluZyBiZWhhdmlvciBhbmQgbGF5b3V0IGFkanVzdG1lbnRzXG4gICAqIGJhc2VkIG9uIGF2YWlsYWJsZSBzY3JlZW4gc3BhY2UuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHdpbmRvd1dpZHRoITogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXZhaWxhYmxlIG9wdGlvbnMgZm9yIHRoZSBjdXJyZW50IGZpbHRlciBzdGVwLlxuICAgKiBAc3VtbWFyeSBDb250YWlucyB0aGUgbGlzdCBvZiBvcHRpb25zIGF2YWlsYWJsZSBmb3Igc2VsZWN0aW9uIGluIHRoZSBjdXJyZW50IHN0ZXAuXG4gICAqIFRoaXMgYXJyYXkgY2hhbmdlcyBkeW5hbWljYWxseSBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGVwOiBpbmRleGVzIOKGkiBjb25kaXRpb25zIOKGkiBlbXB0eSBmb3IgdmFsdWUgaW5wdXQuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZpbHRlcmVkIG9wdGlvbnMgYmFzZWQgb24gdXNlciBpbnB1dC5cbiAgICogQHN1bW1hcnkgQ29udGFpbnMgdGhlIHN1YnNldCBvZiBvcHRpb25zIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgdXNlciBpbnB1dCBmb3IgcmVhbC10aW1lXG4gICAqIGZpbHRlcmluZy4gVGhpcyBhcnJheSBpcyB1cGRhdGVkIGFzIHRoZSB1c2VyIHR5cGVzIHRvIHNob3cgb25seSByZWxldmFudCBzdWdnZXN0aW9uc1xuICAgKiBpbiB0aGUgZHJvcGRvd24gbWVudS5cbiAgICpcbiAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBmaWx0ZXJlZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb21wbGV0ZSBmaWx0ZXIgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBBcnJheSBvZiBjb21wbGV0ZSBmaWx0ZXIgb2JqZWN0cywgZWFjaCBjb250YWluaW5nIGluZGV4LCBjb25kaXRpb24sIGFuZCB2YWx1ZSBwcm9wZXJ0aWVzLlxuICAgKiBUaGVzZSByZXByZXNlbnQgdGhlIGFjdGl2ZSBmaWx0ZXJzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gZGF0YSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWVbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZmlsdGVyVmFsdWU6IElGaWx0ZXJRdWVyeUl0ZW1bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBmaWx0ZXIgYmVpbmcgY29uc3RydWN0ZWQuXG4gICAqIEBzdW1tYXJ5IFRlbXBvcmFyeSBvYmplY3QgdGhhdCBhY2N1bXVsYXRlcyBmaWx0ZXIgcHJvcGVydGllcyAoaW5kZXgsIGNvbmRpdGlvbiwgdmFsdWUpXG4gICAqIGR1cmluZyB0aGUgdGhyZWUtc3RlcCBmaWx0ZXIgY3JlYXRpb24gcHJvY2Vzcy4gR2V0cyBhZGRlZCB0byBmaWx0ZXJWYWx1ZSB3aGVuIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAdHlwZSB7S2V5VmFsdWV9XG4gICAqIEBkZWZhdWx0IHt9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGxhc3RGaWx0ZXI6IElGaWx0ZXJRdWVyeUl0ZW0gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc3RlcCBpbiB0aGUgZmlsdGVyIGNyZWF0aW9uIHByb2Nlc3MuXG4gICAqIEBzdW1tYXJ5IFRyYWNrcyB0aGUgY3VycmVudCBzdGVwIG9mIGZpbHRlciBjcmVhdGlvbjogMSA9IGluZGV4IHNlbGVjdGlvbiwgMiA9IGNvbmRpdGlvbiBzZWxlY3Rpb24sXG4gICAqIDMgPSB2YWx1ZSBpbnB1dC4gQXV0b21hdGljYWxseSByZXNldHMgdG8gMSBhZnRlciBjb21wbGV0aW5nIGEgZmlsdGVyLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHN0ZXA6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb250cm9scyBkcm9wZG93biB2aXNpYmlsaXR5IHN0YXRlLlxuICAgKiBAc3VtbWFyeSBCb29sZWFuIGZsYWcgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG9wdGlvbnMgZHJvcGRvd24gaXMgY3VycmVudGx5IHZpc2libGUuXG4gICAqIFVzZWQgdG8gbWFuYWdlIHRoZSBkcm9wZG93bidzIG9wZW4vY2xvc2Ugc3RhdGUgYW5kIGNvb3JkaW5hdGUgd2l0aCBmb2N1cy9ibHVyIGV2ZW50cy5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCBpbnB1dCBmaWVsZCB2YWx1ZS5cbiAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBjdXJyZW50IHRleHQgaW5wdXQgdmFsdWUgdGhhdCB0aGUgdXNlciBpcyB0eXBpbmcuIFRoaXMgdmFsdWUgaXNcbiAgICogYm91bmQgdG8gdGhlIGlucHV0IGZpZWxkIGFuZCBpcyBjbGVhcmVkIGFmdGVyIGVhY2ggc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RlcCBjb21wbGV0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnJ1xuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICB2YWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHNvcnRpbmcgZmllbGQgdmFsdWUuXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgZmllbGQgbmFtZSBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHNvcnRpbmcgb3BlcmF0aW9ucy5cbiAgICogVGhpcyB2YWx1ZSBkZXRlcm1pbmVzIHdoaWNoIGZpZWxkIGlzIHVzZWQgdG8gb3JkZXIgdGhlIGZpbHRlcmVkIHJlc3VsdHMuXG4gICAqIERlZmF1bHRzIHRvICdpZCcgYW5kIGNhbiBiZSBjaGFuZ2VkIHRocm91Z2ggdGhlIHNvcnQgZHJvcGRvd24gc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAZGVmYXVsdCAnaWQnXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHNvcnRWYWx1ZTogc3RyaW5nID0gJ2lkJztcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgc29ydGluZyBkaXJlY3Rpb24uXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc29ydCBvcGVyYXRpb24gLSBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZy5cbiAgICogVGhpcyB2YWx1ZSB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHNvcnRWYWx1ZSB0byBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlXG4gICAqIHNvcnRpbmcgY29uZmlndXJhdGlvbiBmb3IgZmlsdGVyZWQgcmVzdWx0cy5cbiAgICpcbiAgICogQHR5cGUge09yZGVyRGlyZWN0aW9ufVxuICAgKiBAZGVmYXVsdCBPcmRlckRpcmVjdGlvbi5EU0NcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc29ydERpcmVjdGlvbjogT3JkZXJEaXJlY3Rpb24gPSBPcmRlckRpcmVjdGlvbi5EU0M7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTdWJzY3JpcHRpb24gZm9yIHdpbmRvdyByZXNpemUgZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBSeEpTIHN1YnNjcmlwdGlvbiB0aGF0IGxpc3RlbnMgZm9yIHdpbmRvdyByZXNpemUgZXZlbnRzIHdpdGggZGVib3VuY2luZ1xuICAgKiB0byB1cGRhdGUgdGhlIHdpbmRvd1dpZHRoIHByb3BlcnR5LiBUaGlzIGVuYWJsZXMgcmVzcG9uc2l2ZSBiZWhhdmlvciBhbmQgcHJldmVudHNcbiAgICogZXhjZXNzaXZlIHVwZGF0ZXMgZHVyaW5nIHJlc2l6ZSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAdHlwZSB7U3Vic2NyaXB0aW9ufVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICB3aW5kb3dSZXNpemVTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBCcm93c2luZyBtb2RlIChkYXJrIG9yIGxpZ2h0KS5cbiAgICogQHN1bW1hcnkgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhcmsgbW9kZSB0aGVtZSBpcyBjdXJyZW50bHkgZW5hYmxlZC5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGlzRGFya01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGVtaXR0ZXIgZm9yIGZpbHRlciBjaGFuZ2VzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBmaWx0ZXIgZXZlbnRzIHdoZW4gdGhlIHVzZXIgY3JlYXRlcywgbW9kaWZpZXMsIG9yIGNsZWFycyBmaWx0ZXJzLlxuICAgKiBUaGUgZW1pdHRlZCB2YWx1ZSBjb250YWlucyBhbiBhcnJheSBvZiBjb21wbGV0ZSBmaWx0ZXIgb2JqZWN0cyBvciB1bmRlZmluZWQgd2hlblxuICAgKiBmaWx0ZXJzIGFyZSBjbGVhcmVkLiBQYXJlbnQgY29tcG9uZW50cyBsaXN0ZW4gdG8gdGhpcyBldmVudCB0byB1cGRhdGUgdGhlaXIgZGF0YSBkaXNwbGF5LlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPEtleVZhbHVlW10gfCB1bmRlZmluZWQ+fVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgZmlsdGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxJRmlsdGVyUXVlcnkgfCB1bmRlZmluZWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJRmlsdGVyUXVlcnkgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFdmVudCBlbWl0dGVyIGZvciBzZWFyY2ggZXZlbnRzLlxuICAgKiBAc3VtbWFyeSBFbWl0cyBzZWFyY2ggZXZlbnRzIHdoZW4gdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIHNlYXJjaGJhci5cbiAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxzdHJpbmc+fVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VhcmNoRXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdG9yIGZvciBGaWx0ZXJDb21wb25lbnQuXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBGaWx0ZXJDb21wb25lbnQuXG4gICAqIENhbGxzIHRoZSBwYXJlbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgY29tcG9uZW50IG5hbWUgdG8gZXN0YWJsaXNoIGJhc2UgbG9jYWxlIHN0cmluZyBnZW5lcmF0aW9uXG4gICAqIGFuZCBpbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0LlxuICAgKlxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkZpbHRlckNvbXBvbmVudFwiKTtcbiAgICBhZGRJY29ucyh7Y2hldnJvbkRvd25PdXRsaW5lLCBjaGV2cm9uVXBPdXRsaW5lfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYWZ0ZXIgQW5ndWxhciBmaXJzdCBkaXNwbGF5cyB0aGUgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBTZXRzIHVwIHRoZSBjb21wb25lbnQgYnkgaW5pdGlhbGl6aW5nIHdpbmRvdyB3aWR0aCB0cmFja2luZywgc2V0dGluZyB1cCByZXNpemUgZXZlbnRcbiAgICogc3Vic2NyaXB0aW9ucyB3aXRoIGRlYm91bmNpbmcsIGNvbmZpZ3VyaW5nIHNvcnRpbmcgb3B0aW9ucywgYW5kIGNhbGxpbmcgdGhlIGJhc2UgaW5pdGlhbGl6YXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIHByZXBhcmVzIHRoZSBjb21wb25lbnQgZm9yIHVzZXIgaW50ZXJhY3Rpb24gYW5kIHJlc3BvbnNpdmUgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQW5ndWxhciBMaWZlY3ljbGVcbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpbHRlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IFcgYXMgV2luZG93XG4gICAqICAgcGFydGljaXBhbnQgUiBhcyBSeEpTXG4gICAqXG4gICAqICAgQS0+PkY6IG5nT25Jbml0KClcbiAgICogICBGLT4+VzogZ2V0V2luZG93V2lkdGgoKVxuICAgKiAgIFctLT4+RjogUmV0dXJuIGN1cnJlbnQgd2lkdGhcbiAgICogICBGLT4+UjogU2V0dXAgcmVzaXplIHN1YnNjcmlwdGlvbiB3aXRoIGRlYm91bmNlXG4gICAqICAgUi0tPj5GOiBTdWJzY3JpcHRpb24gY3JlYXRlZFxuICAgKiAgIGFsdCBkaXNhYmxlU29ydCBpcyBmYWxzZVxuICAgKiAgICAgRi0+PkY6IE1lcmdlIHNvcnQgYW5kIGluZGV4ZXMgYXJyYXlzXG4gICAqICAgZW5kXG4gICAqICAgRi0+PkY6IENhbGwgaW5pdGlhbGl6ZSgpXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzRGFya01vZGUgPSBhd2FpdCBpc0RhcmtNb2RlKCk7XG4gICAgdGhpcy53aW5kb3dXaWR0aCA9IGdldFdpbmRvd1dpZHRoKCkgYXMgbnVtYmVyO1xuICAgIHRoaXMud2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgIHRoaXMud2luZG93V2lkdGggPSBnZXRXaW5kb3dXaWR0aCgpIGFzIG51bWJlcjtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2V0SW5kZXhlcygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYW5kIGNvbmZpZ3VyZXMgYXZhaWxhYmxlIGluZGV4ZXMgZm9yIGZpbHRlcmluZyBhbmQgc29ydGluZy5cbiAgICogQHN1bW1hcnkgRXh0cmFjdHMgZmllbGQgaW5kZXhlcyBmcm9tIHRoZSBtb2RlbCBpZiBhdmFpbGFibGUgYW5kIG1lcmdlcyB0aGVtIHdpdGhcbiAgICogc29ydGluZyBvcHRpb25zIHdoZW4gc29ydGluZyBpcyBlbmFibGVkLiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSBhdmFpbGFibGUgZmllbGRcbiAgICogb3B0aW9ucyBmb3IgYm90aCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGUgbW9kZWwgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZ2V0SW5kZXhlcygpOiB2b2lkIHtcbiAgICBpZih0aGlzLm1vZGVsKVxuICAgICAgdGhpcy5pbmRleGVzID0gT2JqZWN0LmtleXMoUmVwb3NpdG9yeS5pbmRleGVzKHRoaXMubW9kZWwgYXMgTW9kZWwpIHx8IHt9KTtcbiAgICBpZighdGhpcy5kaXNhYmxlU29ydClcbiAgICAgIHRoaXMuc29ydEJ5ID0gWy4uLiB0aGlzLnNvcnRCeSwgLi4udGhpcy5pbmRleGVzXTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDbGVhbnVwIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cbiAgICogQHN1bW1hcnkgVW5zdWJzY3JpYmVzIGZyb20gd2luZG93IHJlc2l6ZSBldmVudHMgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXG4gICAqIFRoaXMgaXMgZXNzZW50aWFsIGZvciBwcm9wZXIgY2xlYW51cCBvZiBSeEpTIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50XG4gICAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgaW5wdXQgZXZlbnRzIGZyb20gdGhlIHRleHQgZmllbGQuXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyB1c2VyIGlucHV0IGFuZCBmaWx0ZXJzIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgdHlwZWQgdmFsdWUuXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIHJlYWwtdGltZSBmaWx0ZXJpbmcgb2Ygc3VnZ2VzdGlvbnMgYXMgdGhlIHVzZXIgdHlwZXMgaW4gdGhlIGlucHV0IGZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0ge0lucHV0RXZlbnR9IGV2ZW50IC0gVGhlIGlucHV0IGV2ZW50IGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlSW5wdXQoZXZlbnQ6IElucHV0RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB7dmFsdWV9ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZm9jdXMgZXZlbnRzIG9uIHRoZSBpbnB1dCBmaWVsZC5cbiAgICogQHN1bW1hcnkgU2V0cyB1cCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgd2hlbiB0aGUgaW5wdXQgZmllbGQgcmVjZWl2ZXMgZm9jdXMgYW5kIG9wZW5zIHRoZSBkcm9wZG93bi5cbiAgICogSWYgbm8gb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lcyB0aGUgYXBwcm9wcmlhdGUgb3B0aW9ucyBiYXNlZCBvbiBjdXJyZW50IHN0ZXAuXG4gICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBkcm9wZG93biB3aXRoIGNvbnRleHR1YWxseSByZWxldmFudCBzdWdnZXN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gb3B0aW9ucyAtIE9wdGlvbmFsIGFycmF5IG9mIG9wdGlvbnMgdG8gZGlzcGxheVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlRm9jdXMob3B0aW9uczogc3RyaW5nW10gID0gW10pOiB2b2lkIHtcbiAgICBpZighb3B0aW9ucy5sZW5ndGgpXG4gICAgIG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGJsdXIgZXZlbnRzIG9uIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGRlbGF5ZWQgY2xvc2luZy5cbiAgICogQHN1bW1hcnkgTWFuYWdlcyB0aGUgZHJvcGRvd24gY2xvc2luZyBiZWhhdmlvciB3aXRoIGEgZGVsYXkgdG8gYWxsb3cgZm9yIG9wdGlvbiBzZWxlY3Rpb24uXG4gICAqIFVzZXMgYSB0d28tcGhhc2UgYXBwcm9hY2ggdG8gcHJldmVudCBwcmVtYXR1cmUgY2xvc2luZyB3aGVuIHVzZXJzIGNsaWNrIG9uIGRyb3Bkb3duIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvc2UgLSBJbnRlcm5hbCBmbGFnIHRvIGNvbnRyb2wgdGhlIGNsb3NpbmcgcGhhc2VcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZUJsdXIoY2xvc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmKCFjbG9zZSkge1xuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUJsdXIodHJ1ZSk7XG4gICAgICB9LCAxMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZighdGhpcy5kcm9wZG93bk9wZW4gJiYgdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGJhc2VkIG9uIHRoZSBjdXJyZW50IGZpbHRlciBzdGVwLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBjb250ZXh0dWFsbHkgcmVsZXZhbnQgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc3RlcCBpbiB0aGUgZmlsdGVyIGNyZWF0aW9uIHByb2Nlc3MuXG4gICAqIFN0ZXAgMSBzaG93cyBpbmRleGVzLCBTdGVwIDIgc2hvd3MgY29uZGl0aW9ucywgU3RlcCAzIHNob3dzIG5vIG9wdGlvbnMgKHZhbHVlIGlucHV0KS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBBcnJheSBvZiBvcHRpb25zIGFwcHJvcHJpYXRlIGZvciB0aGUgY3VycmVudCBzdGVwXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGdldE9wdGlvbnMoKTogc3RyaW5nW10ge1xuICAgc3dpdGNoICh0aGlzLnN0ZXApIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5pbmRleGVzO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5jb25kaXRpb25zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSBmaWx0ZXIgc3RlcCBvciBjb21wbGV0ZXMgZmlsdGVyIGNyZWF0aW9uIHRocm91Z2ggYSB0aHJlZS1zdGVwIHByb2Nlc3MuXG4gICAqIEBzdW1tYXJ5IENvcmUgbWV0aG9kIGZvciBidWlsZGluZyBmaWx0ZXJzIHN0ZXAgYnkgc3RlcDogU3RlcCAxIChJbmRleCkg4oaSIFN0ZXAgMiAoQ29uZGl0aW9uKSDihpIgU3RlcCAzIChWYWx1ZSkuXG4gICAqIFdoZW4gYWxsIHN0ZXBzIGFyZSBjb21wbGV0ZSwgY3JlYXRlcyBhIGNvbXBsZXRlIGZpbHRlciBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIGZpbHRlciBjb2xsZWN0aW9uLlxuICAgKiBIYW5kbGVzIGJvdGgga2V5Ym9hcmQgZXZlbnRzIChFbnRlciB0byBzdWJtaXQpIGFuZCBwcm9ncmFtbWF0aWMgY2FsbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhZGQgZm9yIHRoZSBjdXJyZW50IHN0ZXBcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgLSBPcHRpb25hbCBldmVudCAoS2V5Ym9hcmRFdmVudCB0cmlnZ2VycyBzdWJtaXNzaW9uIHdoZW4gdmFsdWUgaXMgZW1wdHkpXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpbHRlckNvbXBvbmVudFxuICAgKlxuICAgKiAgIFUtPj5GOiBhZGRGaWx0ZXIodmFsdWUsIGV2ZW50KVxuICAgKiAgIEYtPj5GOiBUcmltIGFuZCB2YWxpZGF0ZSB2YWx1ZVxuICAgKiAgIGFsdCBLZXlib2FyZEV2ZW50ICYmIGVtcHR5IHZhbHVlXG4gICAqICAgICBGLT4+Rjogc3VibWl0KCkgLSBTZW5kIGN1cnJlbnQgZmlsdGVyc1xuICAgKiAgIGVsc2UgVmFsaWQgdmFsdWUgb3Igc3RlcCAzXG4gICAqICAgICBhbHQgU3RlcCAxIChJbmRleClcbiAgICogICAgICAgRi0+PkY6IGxhc3RGaWx0ZXIuaW5kZXggPSB2YWx1ZVxuICAgKiAgICAgICBGLT4+Rjogb3B0aW9ucyA9IGNvbmRpdGlvbnNcbiAgICogICAgIGVsc2UgU3RlcCAyIChDb25kaXRpb24pXG4gICAqICAgICAgIEYtPj5GOiBsYXN0RmlsdGVyLmNvbmRpdGlvbiA9IHZhbHVlXG4gICAqICAgICAgIEYtPj5GOiBvcHRpb25zID0gW11cbiAgICogICAgIGVsc2UgU3RlcCAzIChWYWx1ZSlcbiAgICogICAgICAgRi0+PkY6IGxhc3RGaWx0ZXIudmFsdWUgPSB2YWx1ZVxuICAgKiAgICAgICBGLT4+RjogQWRkIGNvbXBsZXRlIGZpbHRlciB0byBmaWx0ZXJWYWx1ZVxuICAgKiAgICAgICBGLT4+RjogUmVzZXQgc3RlcCB0byAxXG4gICAqICAgICBlbmRcbiAgICogICAgIEYtPj5GOiBJbmNyZW1lbnQgc3RlcFxuICAgKiAgICAgRi0+PkY6IENsZWFyIGlucHV0ICYgZm9jdXNcbiAgICogICAgIEYtPj5GOiBTaG93IG5leHQgb3B0aW9uc1xuICAgKiAgIGVuZFxuICAgKlxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBhZGRGaWx0ZXIodmFsdWU6IHN0cmluZywgZXZlbnQ/OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgIGlmKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiAhdmFsdWUpIHtcbiAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICBpZigodmFsdWUgJiYgKCEoZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KSkgfHwgdGhpcy5zdGVwID09PSAzKSkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmxhc3RGaWx0ZXI7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zdGVwKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgZmlsdGVyWydpbmRleCddID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmNvbmRpdGlvbnM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBmaWx0ZXJbJ2NvbmRpdGlvbiddID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGZpbHRlclsndmFsdWUnXSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5pbmRleGVzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIXRoaXMuZmlsdGVyVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZS5wdXNoKGZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYodGhpcy5zdGVwID09PSAxKVxuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZS5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5zdGVwID09PSAzKSB7XG4gICAgICAgICAgdGhpcy5zdGVwID0gMDtcbiAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlW3RoaXMuZmlsdGVyVmFsdWUubGVuZ3RoIC0gMV0gPSBmaWx0ZXI7XG4gICAgICAgICAgdGhpcy5sYXN0RmlsdGVyID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGVwKys7XG4gICAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICAgICAgaWYodGhpcy5vcHRpb25zLmxlbmd0aClcbiAgICAgICAgICB0aGlzLmhhbmRsZUZvY3VzKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNlbGVjdHMgYW4gb3B0aW9uIGZyb20gdGhlIGRyb3Bkb3duIHN1Z2dlc3Rpb25zLlxuICAgKiBAc3VtbWFyeSBIYW5kbGVzIG9wdGlvbiBzZWxlY3Rpb24gd2hlbiBhIHVzZXIgY2xpY2tzIG9uIGEgc3VnZ2VzdGlvbiBpbiB0aGUgZHJvcGRvd24uXG4gICAqIFRoaXMgbWV0aG9kIGFjdHMgYXMgYSBicmlkZ2UgYmV0d2VlbiBkcm9wZG93biBjbGlja3MgYW5kIHRoZSBtYWluIGFkZEZpbHRlciBsb2dpYy5cbiAgICpcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgLSBUaGUgY2xpY2sgZXZlbnQgZnJvbSB0aGUgZHJvcGRvd24gb3B0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFRoZSBzZWxlY3RlZCBvcHRpb24gdmFsdWVcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHNlbGVjdE9wdGlvbih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hZGRGaWx0ZXIodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXRlcm1pbmVzIGlmIGEgZmlsdGVyIG9wdGlvbiBjYW4gYmUgaW5kaXZpZHVhbGx5IHJlbW92ZWQuXG4gICAqIEBzdW1tYXJ5IENoZWNrcyB3aGV0aGVyIGEgZmlsdGVyIGNvbXBvbmVudCBzaG91bGQgZGlzcGxheSBhIGNsb3NlIGljb24gZm9yIHJlbW92YWwuXG4gICAqIE9ubHkgdmFsdWUgb3B0aW9ucyBjYW4gYmUgcmVtb3ZlZCBpbmRpdmlkdWFsbHk7IGluZGV4IGFuZCBjb25kaXRpb24gb3B0aW9ucyBhcmUgcGFydFxuICAgKiBvZiB0aGUgY29tcGxldGUgZmlsdGVyIHN0cnVjdHVyZSBhbmQgY2Fubm90IGJlIHJlbW92ZWQgc2VwYXJhdGVseS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbiAtIFRoZSBmaWx0ZXIgb3B0aW9uIHRleHQgdG8gY2hlY2tcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG9wdGlvbiBjYW4gYmUgY2xlYXJlZCBpbmRpdmlkdWFsbHksIGZhbHNlIG90aGVyd2lzZVxuICAgKiBAbWVtYmVyT2YgRmlsdGVyQ29tcG9uZW50XG4gICAqL1xuICBhbGxvd0NsZWFyKG9wdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXhlcy5pbmRleE9mKG9wdGlvbikgPT09IC0xICYmIHRoaXMuY29uZGl0aW9ucy5pbmRleE9mKG9wdGlvbikgPT09IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGEgY29tcGxldGUgZmlsdGVyIGZyb20gdGhlIGNvbGxlY3Rpb24gYmFzZWQgb24gZmlsdGVyIHZhbHVlLlxuICAgKiBAc3VtbWFyeSBSZW1vdmVzIGEgY29tcGxldGUgZmlsdGVyIGJ5IG1hdGNoaW5nIHRoZSBwcm92aWRlZCB2YWx1ZSBhZ2FpbnN0IGZpbHRlciB2YWx1ZXNcbiAgICogaW4gdGhlIGNvbGxlY3Rpb24uIFVzZXMgc3RyaW5nIG5vcm1hbGl6YXRpb24gdG8gaGFuZGxlIGFjY2VudHMgYW5kIGNhc2UgZGlmZmVyZW5jZXMuXG4gICAqIEFmdGVyIHJlbW92YWwsIHJlc2V0cyB0aGUgaW50ZXJmYWNlIHRvIHNob3cgYXZhaWxhYmxlIGluZGV4ZXMgZm9yIG5ldyBmaWx0ZXIgY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHZhbHVlIHRvIHJlbW92ZSAobWF0Y2hlcyBhZ2FpbnN0IGZpbHRlci52YWx1ZSBwcm9wZXJ0eSlcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEYgYXMgRmlsdGVyQ29tcG9uZW50XG4gICAqXG4gICAqICAgVS0+PkY6IHJlbW92ZUZpbHRlcihmaWx0ZXJWYWx1ZSlcbiAgICogICBGLT4+RjogY2xlYW5TdHJpbmcoZmlsdGVyVmFsdWUpXG4gICAqICAgRi0+PkY6IEZpbHRlciBvdXQgbWF0Y2hpbmcgZmlsdGVyIG9iamVjdHNcbiAgICogICBGLT4+RjogQ2xlYXIgaW5wdXQgdmFsdWVcbiAgICogICBGLT4+RjogaGFuZGxlRm9jdXMoaW5kZXhlcykgLSBSZXNldCB0byBpbmRleCBzZWxlY3Rpb25cbiAgICogICBOb3RlIG92ZXIgRjogRmlsdGVyIHJlbW92ZWQgYW5kIFVJIHJlc2V0XG4gICAqXG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHJlbW92ZUZpbHRlcihmaWx0ZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGZ1bmN0aW9uIGNsZWFuU3RyaW5nKGZpbHRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBmaWx0ZXJcbiAgICAgICAgLnRvTG93ZXJDYXNlKCkgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgYWxsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlXG4gICAgICAgIC5ub3JtYWxpemUoXCJORkRcIikgICAgICAgICAgICAgIC8vIHNlcGFyYXRlIGFjY2VudCBtYXJrcyBmcm9tIGNoYXJhY3RlcnNcbiAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpIC8vIHJlbW92ZSBhY2NlbnQgbWFya3NcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7ICAgICAgICAgIC8vIHJlbW92ZSBhbGwgd2hpdGVzcGFjZVxuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0/LlsndmFsdWUnXSAmJiBjbGVhblN0cmluZyhpdGVtPy5bJ3ZhbHVlJ10pICE9PSBjbGVhblN0cmluZyhmaWx0ZXIpKTtcbiAgICBpZih0aGlzLmZpbHRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgIHRoaXMubGFzdEZpbHRlciA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUZvY3VzKHRoaXMuaW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlc2V0cyB0aGUgY29tcG9uZW50IHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuICAgKiBAc3VtbWFyeSBDbGVhcnMgYWxsIGZpbHRlciBkYXRhLCBvcHRpb25zLCBhbmQgcmVzZXRzIHRoZSBzdGVwIGNvdW50ZXIgdG8gMS5cbiAgICogVGhpcyBtZXRob2QgcHJvdmlkZXMgYSBjbGVhbiBzbGF0ZSBmb3IgbmV3IGZpbHRlciBjcmVhdGlvbiB3aXRob3V0IGVtaXR0aW5nIGV2ZW50cy5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJWYWx1ZSA9IFtdO1xuICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgdGhpcy5sYXN0RmlsdGVyID0ge307XG4gICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBmaWx0ZXJzIGFuZCBub3RpZmllcyBwYXJlbnQgY29tcG9uZW50cy5cbiAgICogQHN1bW1hcnkgUmVzZXRzIHRoZSBjb21wb25lbnQgc3RhdGUgYW5kIGVtaXRzIHVuZGVmaW5lZCB0byBub3RpZnkgcGFyZW50IGNvbXBvbmVudHNcbiAgICogdGhhdCBhbGwgZmlsdGVycyBoYXZlIGJlZW4gY2xlYXJlZC4gVGhpcyB0cmlnZ2VycyBhbnkgY29ubmVjdGVkIGRhdGEgcmVmcmVzaCBsb2dpYy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gT3B0aW9uYWwgcGFyYW1ldGVyIChjdXJyZW50bHkgdW51c2VkKVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgY2xlYXIodmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZighdmFsdWUpXG4gICAgICB0aGlzLnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN1Ym1pdHMgdGhlIGN1cnJlbnQgZmlsdGVyIGNvbGxlY3Rpb24gdG8gcGFyZW50IGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IEVtaXRzIHRoZSBjdXJyZW50IGZpbHRlciBhcnJheSB0byBwYXJlbnQgY29tcG9uZW50cyB3aGVuIGZpbHRlcnMgYXJlIHJlYWR5XG4gICAqIHRvIGJlIGFwcGxpZWQuIE9ubHkgZW1pdHMgaWYgdGhlcmUgYXJlIGFjdGl2ZSBmaWx0ZXJzLiBDbGVhcnMgb3B0aW9ucyBhZnRlciBzdWJtaXNzaW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgc3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRXZlbnQuZW1pdCh7XG4gICAgICBxdWVyeTogdGhpcy5maWx0ZXJWYWx1ZS5sZW5ndGggPiAwID8gdGhpcy5maWx0ZXJWYWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgIHNvcnQ6IHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc29ydFZhbHVlLFxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvblxuICAgICAgfVxuICAgIH0gYXMgSUZpbHRlclF1ZXJ5KTtcbiAgICBpZih0aGlzLmZpbHRlclZhbHVlLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUb2dnbGVzIHRoZSBzb3J0IGRpcmVjdGlvbiBiZXR3ZWVuIGFzY2VuZGluZyBhbmQgZGVzY2VuZGluZy5cbiAgICogQHN1bW1hcnkgSGFuZGxlcyBzb3J0IGRpcmVjdGlvbiBjaGFuZ2VzIGJ5IHRvZ2dsaW5nIGJldHdlZW4gQVNDIGFuZCBEU0MgdmFsdWVzLlxuICAgKiBXaGVuIHRoZSBkaXJlY3Rpb24gY2hhbmdlcywgYXV0b21hdGljYWxseSB0cmlnZ2VycyBhIHN1Ym1pdCB0byBhcHBseSB0aGUgbmV3XG4gICAqIHNvcnRpbmcgY29uZmlndXJhdGlvbiB0byB0aGUgZmlsdGVyZWQgcmVzdWx0cy5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gICBoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gIE9yZGVyRGlyZWN0aW9uLkFTQyA/IE9yZGVyRGlyZWN0aW9uLkRTQyA6IE9yZGVyRGlyZWN0aW9uLkFTQztcbiAgICBpZihkaXJlY3Rpb24gIT09IHRoaXMuc29ydERpcmVjdGlvbikge1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gZGlyZWN0aW9uO1xuICAgICAgdGhpcy5zdWJtaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgc29ydCBmaWVsZCBzZWxlY3Rpb24gY2hhbmdlcyBmcm9tIHRoZSBkcm9wZG93bi5cbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIHNvcnQgZmllbGQgY2hhbmdlcyB3aGVuIHVzZXJzIHNlbGVjdCBhIGRpZmZlcmVudCBmaWVsZFxuICAgKiBmcm9tIHRoZSBzb3J0IGRyb3Bkb3duLiBVcGRhdGVzIHRoZSBzb3J0VmFsdWUgcHJvcGVydHkgYW5kIHRyaWdnZXJzXG4gICAqIGEgc3VibWl0IHRvIGFwcGx5IHRoZSBuZXcgc29ydGluZyBjb25maWd1cmF0aW9uIGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZlbnQgLSBUaGUgc2VsZWN0IGNoYW5nZSBldmVudCBjb250YWluaW5nIHRoZSBuZXcgc29ydCBmaWVsZCB2YWx1ZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgaGFuZGxlU29ydENoYW5nZShldmVudDogQ3VzdG9tRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElvblNlbGVjdEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWU7XG4gICAgaWYodmFsdWUgIT09IHRoaXMuc29ydFZhbHVlKSB7XG4gICAgICB0aGlzLnNvcnRWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICAgIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaWx0ZXJzIGF2YWlsYWJsZSBvcHRpb25zIGJhc2VkIG9uIHVzZXIgaW5wdXQgd2l0aCB2aXN1YWwgaGlnaGxpZ2h0aW5nLlxuICAgKiBAc3VtbWFyeSBQZXJmb3JtcyByZWFsLXRpbWUgZmlsdGVyaW5nIG9mIGF2YWlsYWJsZSBvcHRpb25zIGJhc2VkIG9uIHVzZXIgaW5wdXQuXG4gICAqIEFsc28gaGFuZGxlcyB2aXN1YWwgaGlnaGxpZ2h0aW5nIG9mIG1hdGNoaW5nIG9wdGlvbnMgaW4gdGhlIGRyb3Bkb3duLiBSZXR1cm5zIGFsbFxuICAgKiBvcHRpb25zIGlmIGlucHV0IGlzIGxlc3MgdGhhbiAyIGNoYXJhY3RlcnMgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIFRoZSBzZWFyY2ggdmFsdWUgdG8gZmlsdGVyIGJ5XG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQXJyYXkgb2YgZmlsdGVyZWQgb3B0aW9ucyB0aGF0IG1hdGNoIHRoZSBpbnB1dFxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBGIGFzIEZpbHRlckNvbXBvbmVudFxuICAgKiAgIHBhcnRpY2lwYW50IEQgYXMgRE9NXG4gICAqXG4gICAqICAgVS0+PkY6IGZpbHRlck9wdGlvbnMoaW5wdXRWYWx1ZSlcbiAgICogICBhbHQgaW5wdXRWYWx1ZSA8IDIgY2hhcmFjdGVyc1xuICAgKiAgICAgRi0+PkQ6IFJlbW92ZSBleGlzdGluZyBoaWdobGlnaHRzXG4gICAqICAgICBGLS0+PlU6IFJldHVybiBhbGwgb3B0aW9uc1xuICAgKiAgIGVsc2UgaW5wdXRWYWx1ZSA+PSAyIGNoYXJhY3RlcnNcbiAgICogICAgIEYtPj5EOiBRdWVyeSBhbGwgb3B0aW9uIGVsZW1lbnRzXG4gICAqICAgICBGLT4+RDogQWRkIGhpZ2hsaWdodCB0byBmaXJzdCBtYXRjaGluZyBvcHRpb25cbiAgICogICAgIEYtPj5GOiBGaWx0ZXIgb3B0aW9ucyBieSBzdWJzdHJpbmcgbWF0Y2hcbiAgICogICAgIEYtLT4+VTogUmV0dXJuIGZpbHRlcmVkIG9wdGlvbnNcbiAgICogICBlbmRcbiAgICpcbiAgICogQG1lbWJlck9mIEZpbHRlckNvbXBvbmVudFxuICAgKi9cbiAgZmlsdGVyT3B0aW9ucyh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8ICB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgb3B0aW9uc0VsZW1lbnQgPSB0aGlzLm9wdGlvbnNGaWx0ZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYoIXZhbHVlPy5sZW5ndGggfHwgIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uID0gb3B0aW9uc0VsZW1lbnQucXVlcnlTZWxlY3RvcignLmRjZi1maWx0ZXJpbmctaXRlbScpO1xuICAgICAgaWYoZmlsdGVyZWRPcHRpb24pXG4gICAgICAgIGZpbHRlcmVkT3B0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ2RjZi1maWx0ZXJpbmctaXRlbScpO1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucztcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbnNFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kY2YtaXRlbScpO1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gb3B0aW9uLnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYoaXNBY3RpdmUpIHtcbiAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoJ2RjZi1maWx0ZXJpbmctaXRlbScpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogc3RyaW5nKSA9PiBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpIGFzIHN0cmluZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHNlYXJjaCBldmVudHMgZnJvbSB0aGUgaW50ZWdyYXRlZCBzZWFyY2hiYXIgY29tcG9uZW50LlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgc2VhcmNoIGlucHV0IGZyb20gdGhlIHNlYXJjaGJhciBhbmQgZW1pdHMgc2VhcmNoIGV2ZW50c1xuICAgKiB0byBwYXJlbnQgY29tcG9uZW50cy4gVGhpcyBtZXRob2QgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIHRoZSBpbnRlcm5hbFxuICAgKiBzZWFyY2hiYXIgY29tcG9uZW50IGFuZCBleHRlcm5hbCBzZWFyY2ggZXZlbnQgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gdmFsdWUgLSBUaGUgc2VhcmNoIHZhbHVlIGVudGVyZWQgYnkgdGhlIHVzZXJcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqIEBtZW1iZXJPZiBGaWx0ZXJDb21wb25lbnRcbiAgICovXG4gIGhhbmRsZVNlYXJjaCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hFdmVudC5lbWl0KHZhbHVlKTtcbiAgfVxuXG59XG4iLCJcbkBpZighaW5kZXhlcy5sZW5ndGgpIHtcbiAgPG5neC1kZWNhZi1zZWFyY2hiYXIgW2VtaXRFdmVudFRvV2luZG93XT1cImZhbHNlXCIgW2RlYm91bmNlXT1cIjUwMFwiIChzZWFyY2hFdmVudCk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiIC8+XG59XG5cbjxkaXYgW2lkXT1cInVpZFwiIGNsYXNzPVwiZGNmLWdyaWQgZGNmLWdyaWQtc21hbGwgZGNmLWdyaWQtbWF0Y2ggZGNmLWZpbHRlci1ncmlkXCIgW2NsYXNzLmRjZi1oaWRkZW5dPVwiIWluZGV4ZXMubGVuZ3RoXCI+XG4gIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtZXhwYW5kXCI+XG4gICAgPGRpdiBjbGFzcz1cImRjZi1maWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaW5wdXRcIj5cbiAgICAgICAgQGZvcihmaWx0ZXIgb2YgZmlsdGVyVmFsdWU7IHRyYWNrIHRyYWNrSXRlbUZuKCRpbmRleCwgZmlsdGVyPy5bJ2luZGV4J10pKSB7XG4gICAgICAgICAgQGlmKGZpbHRlcj8uWydpbmRleCddKSB7XG4gICAgICAgICAgICA8aW9uLWNoaXAgW291dGxpbmVdPVwidHJ1ZVwiPnt7IGZpbHRlcj8uWydpbmRleCddIH19PC9pb24tY2hpcD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmKGZpbHRlcj8uWydjb25kaXRpb24nXSkge1xuICAgICAgICAgICAgPGlvbi1jaGlwIFtvdXRsaW5lXT1cInRydWVcIj57eyBmaWx0ZXI/LlsnY29uZGl0aW9uJ10gfX08L2lvbi1jaGlwPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYoZmlsdGVyPy5bJ3ZhbHVlJ10pIHtcbiAgICAgICAgICAgIDxpb24tY2hpcCBbb3V0bGluZV09XCJ0cnVlXCIgY2xhc3M9XCJkY2YtZmlsdGVyLXZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7IGZpbHRlcj8uWyd2YWx1ZSddIH19XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGZpbHRlcj8uWyd2YWx1ZSddKVwiIHNpemU9XCJzbWFsbFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1jaGlwPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtMVwiPlxuICAgICAgICAgICAgIDwhLS0gW3JlYWRvbmx5XT1cInN0ZXAgIT09IDNcIiAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWRkRmlsdGVyKHZhbHVlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJjbGVhcih2YWx1ZSlcIlxuICAgICAgICAgICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCRldmVudClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcblxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBsb2NhbGUgKyAoc3RlcCA9PT0gMyA/ICcudHlwZScgOiAnLnNlbGVjdCcpIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICNjb21wb25lbnRcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBpZih3aW5kb3dXaWR0aCA+PSA3NjgpIHtcbiAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZHJvcGRvd24gJyArIChvcHRpb25zLmxlbmd0aCA+IDAgPyAnIGRjZi1hY3RpdmUnIDogJycpXCIgI29wdGlvbnNGaWx0ZXJFbGVtZW50PlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIEBpZihmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgQGZvcihrZXkgb2YgZmlsdGVyZWRPcHRpb25zOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGNmLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0T3B0aW9uKGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24oa2V5KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtZW1wdHlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyZWRPcHRpb25zID0gb3B0aW9uczsgdmFsdWUgPSAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBsb2NhbGUgKyAnLm5vX3N1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZihmaWx0ZXJWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtaWNvbi1jbGVhclwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJjbGVhcigpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBbY29sb3JdPVwiIWlzRGFya01vZGUgPyAnZGFyaycgOiAnbWVkaXVtJ1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWljb24tc2VhcmNoXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIHNpemU9XCJzbWFsbFwiIChjbGljayk9XCJzdWJtaXQoKVwiPlxuICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2VhcmNoLW91dGxpbmVcIiBbY29sb3JdPVwiIWlzRGFya01vZGUgPyAnZGFyaycgOiAnbWVkaXVtJ1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBAaWYod2luZG93V2lkdGggPCA3NjgpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidkY2YtZHJvcGRvd24gJyArIChvcHRpb25zLmxlbmd0aCA+IDAgPyAnIGRjZi1hY3RpdmUnIDogJycpXCIgI29wdGlvbnNGaWx0ZXJFbGVtZW50PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIEBpZihmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgQGZvcihrZXkgb2YgZmlsdGVyZWRPcHRpb25zOyB0cmFjayBrZXkpIHtcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGNmLWl0ZW1cIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0T3B0aW9uKGtleSlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPcHRpb24oa2V5KVwiPlxuICAgICAgICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkY2YtZW1wdHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7IHZhbHVlID0gJydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBsb2NhbGUgKyAnLm5vX3N1Z2dlc3Rpb25zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZighZGlzYWJsZVNvcnQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLTEtNUBtIGRjZi13aWR0aC0xLTEgZGNmLXNvcnQtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGNmLWdyaWQgZGNmLWdyaWQtY29sbGFwc2UgZGNmLWZsZXggZGNmLWZsZXgtbWlkZGxlIGRjZi1ncmlkLW1hdGNoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkY2Ytd2lkdGgtZXhwYW5kXCI+XG4gICAgICAgICAgPGlvbi1zZWxlY3RcbiAgICAgICAgICAgICAgdG9nZ2xlSWNvbj1cImNoZXZyb24tZG93bi1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgZXhwYW5kZWRJY29uPVwiY2hldnJvbi11cC1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkY2Ytc29ydC1zZWxlY3RcIlxuICAgICAgICAgICAgICAoaW9uQ2hhbmdlKT1cImhhbmRsZVNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic29ydFZhbHVlXCJcbiAgICAgICAgICAgICAgbGFiZWwtcGxhY2VtZW50PVwiZmxvYXRpbmdcIlxuICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJsb2NhbGUgKyAnLnNvcnQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3Ioc29ydCBvZiBzb3J0Qnk7IHRyYWNrIHNvcnQpIHtcblxuICAgICAgICAgICAgICA8aW9uLXNlbGVjdC1vcHRpb24gW3ZhbHVlXT1cInNvcnRcIj57eyBzb3J0IHwgdHJhbnNsYXRlIH19PC9pb24tc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGNmLXdpZHRoLWF1dG9cIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlU29ydERpcmVjdGlvbkNoYW5nZSgpXCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIFtjb2xvcl09XCIhaXNEYXJrTW9kZSA/ICdwcmltYXJ5JyA6ICdtZWRpdW0nXCIgW25hbWVdPVwic29ydERpcmVjdGlvbiA9PT0gJ2Rlc2MnID8gJ2Fycm93LWRvd24tb3V0bGluZScgOiAnYXJyb3ctdXAtb3V0bGluZSdcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cblxuIl19
|
|
@@ -2,7 +2,6 @@ import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
|
2
2
|
import { CrudFieldComponent } from './crud-field/crud-field.component';
|
|
3
3
|
import { CrudFormComponent } from './crud-form/crud-form.component';
|
|
4
4
|
import { ModelRendererComponent } from './model-renderer/model-renderer.component';
|
|
5
|
-
import { ForAngularModule } from '../for-angular.module';
|
|
6
5
|
import { SearchbarComponent } from './searchbar/searchbar.component';
|
|
7
6
|
import { EmptyStateComponent } from './empty-state/empty-state.component';
|
|
8
7
|
import { ListItemComponent } from './list-item/list-item.component';
|
|
@@ -31,8 +30,8 @@ const Components = [
|
|
|
31
30
|
FilterComponent
|
|
32
31
|
];
|
|
33
32
|
export class ForAngularComponentsModule {
|
|
34
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
35
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ForAngularComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
34
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ForAngularComponentsModule, imports: [ModelRendererComponent,
|
|
36
35
|
ComponentRendererComponent,
|
|
37
36
|
CrudFieldComponent,
|
|
38
37
|
CrudFormComponent,
|
|
@@ -56,16 +55,25 @@ export class ForAngularComponentsModule {
|
|
|
56
55
|
CrudFormComponent,
|
|
57
56
|
FieldsetComponent,
|
|
58
57
|
LayoutComponent,
|
|
59
|
-
FilterComponent, CollapsableDirective
|
|
60
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.
|
|
58
|
+
FilterComponent, CollapsableDirective] }); }
|
|
59
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ForAngularComponentsModule, imports: [CrudFieldComponent,
|
|
60
|
+
CrudFormComponent,
|
|
61
|
+
EmptyStateComponent,
|
|
62
|
+
ListComponent,
|
|
63
|
+
ListItemComponent,
|
|
64
|
+
SearchbarComponent,
|
|
65
|
+
PaginationComponent,
|
|
66
|
+
CrudFormComponent,
|
|
67
|
+
FieldsetComponent,
|
|
68
|
+
FilterComponent] }); }
|
|
61
69
|
}
|
|
62
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ForAngularComponentsModule, decorators: [{
|
|
63
71
|
type: NgModule,
|
|
64
72
|
args: [{
|
|
65
|
-
imports: [Components, Directives],
|
|
73
|
+
imports: [...Components, ...Directives],
|
|
66
74
|
declarations: [],
|
|
67
75
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
68
|
-
exports: [Components, Directives
|
|
76
|
+
exports: [...Components, ...Directives],
|
|
69
77
|
}]
|
|
70
78
|
}] });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yLWFuZ3VsYXItY29tcG9uZW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZm9yLWFuZ3VsYXItY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMvRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFFNUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLHNCQUFzQjtJQUN0QiwwQkFBMEI7SUFDMUIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGVBQWU7Q0FDaEIsQ0FBQztBQVFGLE1BQU0sT0FBTywwQkFBMEI7K0dBQTFCLDBCQUEwQjtnSEFBMUIsMEJBQTBCLFlBckJyQyxzQkFBc0I7WUFDdEIsMEJBQTBCO1lBQzFCLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixlQUFlLEVBZEcsb0JBQW9CLGFBRXRDLHNCQUFzQjtZQUN0QiwwQkFBMEI7WUFDMUIsa0JBQWtCO1lBQ2xCLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIsYUFBYTtZQUNiLGlCQUFpQjtZQUNqQixrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLGlCQUFpQjtZQUNqQixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGVBQWUsRUFkRyxvQkFBb0I7Z0hBdUIzQiwwQkFBMEIsWUFuQnJDLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsaUJBQWlCO1lBRWpCLGVBQWU7OzRGQVNKLDBCQUEwQjtrQkFOdEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztvQkFDdkMsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztpQkFDeEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3J1ZEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9jcnVkLWZpZWxkL2NydWQtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IENydWRGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jcnVkLWZvcm0vY3J1ZC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RlbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RlbC1yZW5kZXJlci9tb2RlbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoYmFyQ29tcG9uZW50IH0gZnJvbSAnLi9zZWFyY2hiYXIvc2VhcmNoYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xpc3QtaXRlbS9saXN0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnQtcmVuZGVyZXIvY29tcG9uZW50LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICcuL2xpc3QvbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmllbGRzZXRDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkc2V0L2ZpZWxkc2V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2xsYXBzYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29sbGFwc2FibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IExheW91dENvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0L2xheW91dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudCc7XG5cbmNvbnN0IERpcmVjdGl2ZXMgPSBbQ29sbGFwc2FibGVEaXJlY3RpdmVdO1xuY29uc3QgQ29tcG9uZW50cyA9IFtcbiAgTW9kZWxSZW5kZXJlckNvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVuZGVyZXJDb21wb25lbnQsXG4gIENydWRGaWVsZENvbXBvbmVudCxcbiAgQ3J1ZEZvcm1Db21wb25lbnQsXG4gIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gIExpc3RDb21wb25lbnQsXG4gIExpc3RJdGVtQ29tcG9uZW50LFxuICBTZWFyY2hiYXJDb21wb25lbnQsXG4gIFBhZ2luYXRpb25Db21wb25lbnQsXG4gIENydWRGb3JtQ29tcG9uZW50LFxuICBGaWVsZHNldENvbXBvbmVudCxcbiAgTGF5b3V0Q29tcG9uZW50LFxuICBGaWx0ZXJDb21wb25lbnRcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFsuLi5Db21wb25lbnRzLCAuLi5EaXJlY3RpdmVzXSxcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICBleHBvcnRzOiBbLi4uQ29tcG9uZW50cywgLi4uRGlyZWN0aXZlc10sXG59KVxuZXhwb3J0IGNsYXNzIEZvckFuZ3VsYXJDb21wb25lbnRzTW9kdWxlIHt9XG4iXX0=
|