@firestitch/filter 18.0.4 → 18.0.6

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.
@@ -3,4 +3,5 @@ export * from './action-type.enum';
3
3
  export * from './button-style';
4
4
  export * from './item-date-mode.enum';
5
5
  export * from './item-type.enum';
6
+ export * from './menu-action-mode.enum';
6
7
  export * from './picker-view-type.enum';
@@ -0,0 +1,5 @@
1
+ export declare enum MenuActionMode {
2
+ Menu = "menu",
3
+ File = "file",
4
+ Group = "group"
5
+ }
@@ -1,17 +1,15 @@
1
1
  import { ThemePalette } from '@angular/material/core';
2
2
  import { FsFile } from '@firestitch/file';
3
+ import { MenuActionMode } from '../enums';
3
4
  import { ActionMode } from '../enums/action-mode.enum';
4
5
  import { ActionType } from '../enums/action-type.enum';
5
- type Without<T, U> = {
6
- [P in Exclude<keyof T, keyof U>]?: never;
7
- };
8
- type XOR<T, U> = (T | U) extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
9
6
  export type FsFilterAction = (IFsFilterButtonAction | IFsFilterMenuAction | IFsFilterFileAction | IFsFilterSelectButtonAction);
10
7
  export type FsFilterActionShowFn = () => boolean;
11
8
  export type FsFilterActionDisabledFn = () => boolean;
12
9
  export type FsFilterActionClickFn = (event?: MouseEvent) => void;
13
10
  export type FsFilterFileActionSelectFn = (file: FsFile | FsFile[]) => void;
14
11
  export type FsFilterFileActionErrorFn = (error: unknown) => void;
12
+ export type FsFilterMenuAction = IFsFilterMenuActionGroupItem | IFsFilterMenuActionItem | IFsFilterMenuActionFileItem;
15
13
  interface IFsFilterBaseAction {
16
14
  type?: ActionType;
17
15
  className?: string;
@@ -45,7 +43,7 @@ export interface IFsFilterSelectButtonAction extends IFsFilterBaseAction {
45
43
  export interface IFsFilterMenuAction extends IFsFilterBaseAction {
46
44
  mode: ActionMode.Menu;
47
45
  label?: string;
48
- items: XOR<IFsFilterMenuActionGroupItem, IFsFilterMenuActionItem>[];
46
+ items: FsFilterMenuAction[];
49
47
  }
50
48
  export interface IFsFilterFileAction extends IFsFilterBaseAction {
51
49
  mode: ActionMode.File;
@@ -65,7 +63,8 @@ export interface IFsFilterMenuActionGroupItem {
65
63
  label?: string;
66
64
  icon?: string;
67
65
  show?: FsFilterActionShowFn;
68
- items: IFsFilterMenuActionItem[];
66
+ items: FsFilterMenuAction[];
67
+ mode?: MenuActionMode.Group;
69
68
  }
70
69
  export interface IFsFilterMenuActionItem {
71
70
  label?: string;
@@ -73,6 +72,19 @@ export interface IFsFilterMenuActionItem {
73
72
  click?: FsFilterActionClickFn;
74
73
  link?: IFsFilterMenuActionLink;
75
74
  show?: FsFilterActionShowFn;
75
+ mode?: MenuActionMode;
76
+ }
77
+ export interface IFsFilterMenuActionFileItem extends IFsFilterMenuActionItem {
78
+ mode?: MenuActionMode.File;
79
+ fileSelected?: FsFilterFileActionSelectFn;
80
+ fileError?: FsFilterFileActionErrorFn;
81
+ multiple?: boolean;
82
+ accept?: string;
83
+ minWidth?: number;
84
+ minHeight?: number;
85
+ maxWidth?: number;
86
+ maxHeight?: number;
87
+ imageQuality?: number;
76
88
  }
77
89
  export interface IFsFilterMenuActionLink {
78
90
  link: any[] | string;
@@ -1,9 +1,20 @@
1
1
  import { Observable } from 'rxjs';
2
- import { FsFilterAction, FsFilterActionClickFn, IFsFilterMenuActionLink } from '../interfaces/action.interface';
2
+ import { MenuActionMode } from '../enums';
3
+ import { FsFilterActionClickFn, FsFilterFileActionErrorFn, FsFilterFileActionSelectFn, IFsFilterMenuActionGroupItem, IFsFilterMenuActionItem, IFsFilterMenuActionLink } from '../interfaces/action.interface';
3
4
  export declare class ActionMenuItem {
4
5
  private _parent?;
5
6
  icon: string;
6
7
  label: string;
8
+ mode: MenuActionMode;
9
+ fileSelected: FsFilterFileActionSelectFn;
10
+ fileError: FsFilterFileActionErrorFn;
11
+ multiple: boolean;
12
+ accept: string;
13
+ minWidth: number;
14
+ minHeight: number;
15
+ maxWidth: number;
16
+ maxHeight: number;
17
+ imageQuality: number;
7
18
  click: FsFilterActionClickFn;
8
19
  routerLink: IFsFilterMenuActionLink;
9
20
  items: ActionMenuItem[];
@@ -11,7 +22,7 @@ export declare class ActionMenuItem {
11
22
  private _showFn;
12
23
  private _visible$;
13
24
  private _disabled$;
14
- constructor(config?: FsFilterAction, _parent?: ActionMenuItem);
25
+ constructor(config?: IFsFilterMenuActionGroupItem | IFsFilterMenuActionItem, _parent?: ActionMenuItem);
15
26
  get isGroup(): boolean;
16
27
  get visible(): boolean;
17
28
  get visible$(): Observable<boolean>;
@@ -19,5 +30,6 @@ export declare class ActionMenuItem {
19
30
  get disabled(): boolean;
20
31
  get disabled$(): Observable<boolean>;
21
32
  updateVisibility(): void;
33
+ private _initFile;
22
34
  private _init;
23
35
  }
@@ -2,8 +2,8 @@ import { FsFilterAction } from '../interfaces/action.interface';
2
2
  import { ChangeFn, FilterSort, FsFilterAutoReload, Sort } from '../interfaces/config.interface';
3
3
  import { IFilterSavedFiltersConfig } from '../interfaces/saved-filters.interface';
4
4
  import { FilterButton, FilterConfig, FsFilterPersistance, IFilterConfigItem } from './../interfaces/config.interface';
5
- export declare const SORT_BY_FIELD = "sortName";
6
- export declare const SORT_DIRECTION_FIELD = "sortDirection";
5
+ export declare const SortByField = "sortName";
6
+ export declare const SortDirectionField = "sortDirection";
7
7
  export declare class FsFilterConfig {
8
8
  load: boolean;
9
9
  persist: FsFilterPersistance;
@@ -27,14 +27,14 @@ export class FsFilterActionsComponent {
27
27
  }
28
28
  }
29
29
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFilterActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: { kebabActions: "kebabActions", actions: "actions" }, ngImport: i0, template: "<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"ActionMode.Button\">\n <fs-filter-action-button\n [action]=\"action\"\n class=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.Menu\">\n <fs-filter-action-button\n class=\"action\"\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef class=\"action\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.SelectButton\">\n <mat-select \n class=\"action action-select-button\"\n [ngClass]=\"{ \n 'mat-mdc-raised-button': action.type === ActionType.Raised,\n 'mat-mdc-unelevated-button': action.type === ActionType.Flat,\n 'mat-mdc-outlined-button': action.type === ActionType.Stroked,\n }\"\n [placeholder]=\"action.label\"\n [(ngModel)]=\"action.value\" \n (ngModelChange)=\"actionChange(action, $event, selectButton)\"\n fsSelectButton\n #selectButton\n [deselectOnChange]=\"false\">\n <mat-option \n *ngFor=\"let item of action.values\" \n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.File\">\n <fs-file\n class=\"action action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:center}.action-button{display:block}.action.action-select-button{width:auto}.action+.action{margin-left:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i6.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { kind: "directive", type: i6.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { kind: "directive", type: i7.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: i8.FsFileComponent, selector: "fs-file", inputs: ["minHeight", "minWidth", "orientate", "multiple", "capture", "allowClick", "allowDrop", "accept", "disabled", "imageWidth", "imageHeight", "imageQuality"], outputs: ["select", "error", "beforeProcessing", "clicked", "declined"] }, { kind: "directive", type: i9.FsSelectButtonDirective, selector: "[fsSelectButton]", inputs: ["color", "width", "buttonType", "deselectOnChange"] }, { kind: "directive", type: i10.FsPopoverDirective, selector: "[fsPopover]", inputs: ["text", "template", "data", "leaveDelay", "showDelay", "maxWidth", "wrapperClass", "autoShow", "autoClose", "loadingDiameter", "loading", "indication", "position", "theme", "size", "trigger", "enabled"] }, { kind: "component", type: i11.FsFilterActionButtonComponent, selector: "fs-filter-action-button", inputs: ["action"] }, { kind: "component", type: i12.FsFilterActionKebabActionsComponent, selector: "fs-filter-action-kebab-actions", inputs: ["kebabActions"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
30
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: { kebabActions: "kebabActions", actions: "actions" }, ngImport: i0, template: "<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"ActionMode.Button\">\n <fs-filter-action-button\n [action]=\"action\"\n class=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.Menu\">\n <fs-filter-action-button\n class=\"action\"\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef class=\"action\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-container [ngSwitch]=\"subAction.mode\">\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template\n fs-menu-file-item\n [multiple]=\"subAction.multiple\"\n [accept]=\"subAction.accept || '*'\"\n [minWidth]=\"subAction.minWidth\"\n [minHeight]=\"subAction.minHeight\"\n [imageWidth]=\"subAction.maxWidth\"\n [imageHeight]=\"subAction.maxHeight\"\n (select)=\"subAction.fileSelected($event)\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-container [ngSwitch]=\"childAction.mode\">\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template\n fs-menu-file-item\n [multiple]=\"childAction.multiple\"\n [accept]=\"childAction.accept || '*'\"\n [minWidth]=\"childAction.minWidth\"\n [minHeight]=\"childAction.minHeight\"\n [imageWidth]=\"childAction.maxWidth\"\n [imageHeight]=\"childAction.maxHeight\"\n (select)=\"childAction.fileSelected($event)\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event)\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.SelectButton\">\n <mat-select \n class=\"action action-select-button\"\n [ngClass]=\"{ \n 'mat-mdc-raised-button': action.type === ActionType.Raised,\n 'mat-mdc-unelevated-button': action.type === ActionType.Flat,\n 'mat-mdc-outlined-button': action.type === ActionType.Stroked,\n }\"\n [placeholder]=\"action.label\"\n [(ngModel)]=\"action.value\" \n (ngModelChange)=\"actionChange(action, $event, selectButton)\"\n fsSelectButton\n #selectButton\n [deselectOnChange]=\"false\">\n <mat-option \n *ngFor=\"let item of action.values\" \n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.File\">\n <fs-file\n class=\"action action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:center}.action-button{display:block}.action.action-select-button{width:auto}.action+.action{margin-left:5px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i6.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { kind: "directive", type: i6.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { kind: "directive", type: i6.FsMenuFileItemDirective, selector: "[fs-menu-file-item]", inputs: ["multiple", "accept", "minWidth", "minHeight", "imageWidth", "imageHeight"], outputs: ["select", "error"] }, { kind: "directive", type: i7.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: i8.FsFileComponent, selector: "fs-file", inputs: ["minHeight", "minWidth", "orientate", "multiple", "capture", "allowClick", "allowDrop", "accept", "disabled", "imageWidth", "imageHeight", "imageQuality"], outputs: ["select", "error", "beforeProcessing", "clicked", "declined"] }, { kind: "directive", type: i9.FsSelectButtonDirective, selector: "[fsSelectButton]", inputs: ["color", "width", "buttonType", "deselectOnChange"] }, { kind: "directive", type: i10.FsPopoverDirective, selector: "[fsPopover]", inputs: ["text", "template", "data", "leaveDelay", "showDelay", "maxWidth", "wrapperClass", "autoShow", "autoClose", "loadingDiameter", "loading", "indication", "position", "theme", "size", "trigger", "enabled"] }, { kind: "component", type: i11.FsFilterActionButtonComponent, selector: "fs-filter-action-button", inputs: ["action"] }, { kind: "component", type: i12.FsFilterActionKebabActionsComponent, selector: "fs-filter-action-kebab-actions", inputs: ["kebabActions"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31
31
  }
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsFilterActionsComponent, decorators: [{
33
33
  type: Component,
34
- args: [{ selector: 'fs-filter-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"ActionMode.Button\">\n <fs-filter-action-button\n [action]=\"action\"\n class=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.Menu\">\n <fs-filter-action-button\n class=\"action\"\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef class=\"action\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.SelectButton\">\n <mat-select \n class=\"action action-select-button\"\n [ngClass]=\"{ \n 'mat-mdc-raised-button': action.type === ActionType.Raised,\n 'mat-mdc-unelevated-button': action.type === ActionType.Flat,\n 'mat-mdc-outlined-button': action.type === ActionType.Stroked,\n }\"\n [placeholder]=\"action.label\"\n [(ngModel)]=\"action.value\" \n (ngModelChange)=\"actionChange(action, $event, selectButton)\"\n fsSelectButton\n #selectButton\n [deselectOnChange]=\"false\">\n <mat-option \n *ngFor=\"let item of action.values\" \n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.File\">\n <fs-file\n class=\"action action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:center}.action-button{display:block}.action.action-select-button{width:auto}.action+.action{margin-left:5px}\n"] }]
34
+ args: [{ selector: 'fs-filter-actions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngFor=\"let action of actions\">\n <ng-container [ngSwitch]=\"action.mode\">\n <ng-container *ngSwitchCase=\"ActionMode.Button\">\n <fs-filter-action-button\n [action]=\"action\"\n class=\"action\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.Menu\">\n <fs-filter-action-button\n class=\"action\"\n [action]=\"action\"\n [fsMenuTriggerFor]=\"someRef\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n </fs-filter-action-button>\n\n <fs-menu #someRef class=\"action\">\n <ng-container *ngFor=\"let childAction of action.items\">\n <ng-container *ngIf=\"childAction.isGroup else simpleMenuItem\">\n <fs-menu-group [label]=\"childAction.label\">\n <ng-container *ngFor=\"let subAction of childAction.items\">\n <ng-container [ngSwitch]=\"subAction.mode\">\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-template\n fs-menu-item\n [link]=\"subAction.routerLink?.link\"\n [queryParams]=\"subAction.routerLink?.queryParams\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template\n fs-menu-file-item\n [multiple]=\"subAction.multiple\"\n [accept]=\"subAction.accept || '*'\"\n [minWidth]=\"subAction.minWidth\"\n [minHeight]=\"subAction.minHeight\"\n [imageWidth]=\"subAction.maxWidth\"\n [imageHeight]=\"subAction.maxHeight\"\n (select)=\"subAction.fileSelected($event)\"\n [hidden]=\"(subAction.visible$ | async) === false\"\n (click)=\"subAction.click($event)\">\n <mat-icon *ngIf=\"subAction.icon\">{{subAction.icon}}</mat-icon>\n {{subAction.label}}\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n </fs-menu-group>\n </ng-container>\n <ng-template #simpleMenuItem>\n <ng-container [ngSwitch]=\"childAction.mode\">\n <ng-container *ngSwitchCase=\"'menu'\">\n <ng-template\n fs-menu-item\n [link]=\"childAction.routerLink?.link\"\n [queryParams]=\"childAction.routerLink?.queryParams\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event);\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-template\n fs-menu-file-item\n [multiple]=\"childAction.multiple\"\n [accept]=\"childAction.accept || '*'\"\n [minWidth]=\"childAction.minWidth\"\n [minHeight]=\"childAction.minHeight\"\n [imageWidth]=\"childAction.maxWidth\"\n [imageHeight]=\"childAction.maxHeight\"\n (select)=\"childAction.fileSelected($event)\"\n [hidden]=\"(childAction.visible$ | async) === false\"\n (click)=\"childAction.click($event)\">\n <mat-icon *ngIf=\"childAction.icon\">{{childAction.icon}}</mat-icon>\n {{childAction.label}}\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n </fs-menu>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.SelectButton\">\n <mat-select \n class=\"action action-select-button\"\n [ngClass]=\"{ \n 'mat-mdc-raised-button': action.type === ActionType.Raised,\n 'mat-mdc-unelevated-button': action.type === ActionType.Flat,\n 'mat-mdc-outlined-button': action.type === ActionType.Stroked,\n }\"\n [placeholder]=\"action.label\"\n [(ngModel)]=\"action.value\" \n (ngModelChange)=\"actionChange(action, $event, selectButton)\"\n fsSelectButton\n #selectButton\n [deselectOnChange]=\"false\">\n <mat-option \n *ngFor=\"let item of action.values\" \n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n </mat-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"ActionMode.File\">\n <fs-file\n class=\"action action-button\"\n [accept]=\"action.accept || '*'\"\n [multiple]=\"action.multiple\"\n [minWidth]=\"action.minWidth\"\n [minHeight]=\"action.minHeight\"\n [imageWidth]=\"action.maxWidth\"\n [imageHeight]=\"action.maxHeight\"\n (select)=\"action.fileSelected($event)\"\n (error)=\"action.fileError($event)\"\n (clicked)=\"action.click($event)\"\n fsPopover\n [enabled]=\"!!action.tooltip\"\n [text]=\"action.tooltip\">\n <fs-filter-action-button \n [action]=\"action\">\n </fs-filter-action-button>\n </fs-file>\n </ng-container>\n </ng-container>\n</ng-container>\n<ng-container *ngIf=\"kebabActions?.length\">\n <fs-filter-action-kebab-actions\n [kebabActions]=\"kebabActions\">\n </fs-filter-action-kebab-actions>\n</ng-container>\n", styles: [":host{display:inline-flex;align-items:center}.action-button{display:block}.action.action-select-button{width:auto}.action+.action{margin-left:5px}\n"] }]
35
35
  }], propDecorators: { kebabActions: [{
36
36
  type: Input
37
37
  }], actions: [{
38
38
  type: Input
39
39
  }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWN0aW9ucy9hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY3Rpb25zL2FjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVVyRCxNQUFNLE9BQU8sd0JBQXdCO0lBRzVCLFlBQVksR0FBYSxFQUFFLENBQUM7SUFHNUIsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUV2QixVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ3hCLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFFeEIsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUFVLEVBQUUsWUFBdUI7UUFDckUsSUFBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyQixJQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7dUdBbkJVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLHVIQ2xCckMsMjZIQXVHQTs7MkZEckZhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTs4QkFLeEMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbmltcG9ydCB7IEFjdGlvbk1vZGUsIEFjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uLm1vZGVsJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1maWx0ZXItYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRnNGaWx0ZXJBY3Rpb25zQ29tcG9uZW50IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMga2ViYWJBY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBBY3Rpb25UeXBlID0gQWN0aW9uVHlwZTtcbiAgcHVibGljIEFjdGlvbk1vZGUgPSBBY3Rpb25Nb2RlO1xuXG4gIHB1YmxpYyBhY3Rpb25DaGFuZ2UoYWN0aW9uOiBBY3Rpb24sIHZhbHVlOiBhbnksIHNlbGVjdEJ1dHRvbjogTWF0U2VsZWN0KTogdm9pZCB7XG4gICAgaWYoYWN0aW9uLmNoYW5nZSkge1xuICAgICAgYWN0aW9uLmNoYW5nZSh2YWx1ZSk7ICAgICAgXG5cbiAgICAgIGlmKGFjdGlvbi5kZXNlbGVjdCkge1xuICAgICAgICBzZWxlY3RCdXR0b24ud3JpdGVWYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYWN0aW9uLm1vZGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJBY3Rpb25Nb2RlLkJ1dHRvblwiPlxuICAgICAgPGZzLWZpbHRlci1hY3Rpb24tYnV0dG9uXG4gICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgY2xhc3M9XCJhY3Rpb25cIlxuICAgICAgICBmc1BvcG92ZXJcbiAgICAgICAgW2VuYWJsZWRdPVwiISFhY3Rpb24udG9vbHRpcFwiXG4gICAgICAgIFt0ZXh0XT1cImFjdGlvbi50b29sdGlwXCI+XG4gICAgICA8L2ZzLWZpbHRlci1hY3Rpb24tYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQWN0aW9uTW9kZS5NZW51XCI+XG4gICAgICA8ZnMtZmlsdGVyLWFjdGlvbi1idXR0b25cbiAgICAgICAgY2xhc3M9XCJhY3Rpb25cIlxuICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgIFtmc01lbnVUcmlnZ2VyRm9yXT1cInNvbWVSZWZcIlxuICAgICAgICBmc1BvcG92ZXJcbiAgICAgICAgW2VuYWJsZWRdPVwiISFhY3Rpb24udG9vbHRpcFwiXG4gICAgICAgIFt0ZXh0XT1cImFjdGlvbi50b29sdGlwXCI+XG4gICAgICA8L2ZzLWZpbHRlci1hY3Rpb24tYnV0dG9uPlxuXG4gICAgICA8ZnMtbWVudSAjc29tZVJlZiBjbGFzcz1cImFjdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZEFjdGlvbiBvZiBhY3Rpb24uaXRlbXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGRBY3Rpb24uaXNHcm91cCBlbHNlIHNpbXBsZU1lbnVJdGVtXCI+XG4gICAgICAgICAgICA8ZnMtbWVudS1ncm91cCBbbGFiZWxdPVwiY2hpbGRBY3Rpb24ubGFiZWxcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViQWN0aW9uIG9mIGNoaWxkQWN0aW9uLml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICBbbGlua109XCJzdWJBY3Rpb24ucm91dGVyTGluaz8ubGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJzdWJBY3Rpb24ucm91dGVyTGluaz8ucXVlcnlQYXJhbXNcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIihzdWJBY3Rpb24udmlzaWJsZSQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1YkFjdGlvbi5jbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzdWJBY3Rpb24uaWNvblwiPnt7c3ViQWN0aW9uLmljb259fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICB7e3N1YkFjdGlvbi5sYWJlbH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2ZzLW1lbnUtZ3JvdXA+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVNZW51SXRlbT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgIFtsaW5rXT1cImNoaWxkQWN0aW9uLnJvdXRlckxpbms/LmxpbmtcIlxuICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJjaGlsZEFjdGlvbi5yb3V0ZXJMaW5rPy5xdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoY2hpbGRBY3Rpb24udmlzaWJsZSQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hpbGRBY3Rpb24uY2xpY2soJGV2ZW50KTtcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY2hpbGRBY3Rpb24uaWNvblwiPnt7Y2hpbGRBY3Rpb24uaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAge3tjaGlsZEFjdGlvbi5sYWJlbH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mcy1tZW51PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQWN0aW9uTW9kZS5TZWxlY3RCdXR0b25cIj5cbiAgICAgIDxtYXQtc2VsZWN0IFxuICAgICAgICAgIGNsYXNzPVwiYWN0aW9uIGFjdGlvbi1zZWxlY3QtYnV0dG9uXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IFxuICAgICAgICAgICAgJ21hdC1tZGMtcmFpc2VkLWJ1dHRvbic6IGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLlJhaXNlZCxcbiAgICAgICAgICAgICdtYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uJzogYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuRmxhdCxcbiAgICAgICAgICAgICdtYXQtbWRjLW91dGxpbmVkLWJ1dHRvbic6IGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLlN0cm9rZWQsXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImFjdGlvbi5sYWJlbFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJhY3Rpb24udmFsdWVcIiBcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJhY3Rpb25DaGFuZ2UoYWN0aW9uLCAkZXZlbnQsIHNlbGVjdEJ1dHRvbilcIlxuICAgICAgICAgIGZzU2VsZWN0QnV0dG9uXG4gICAgICAgICAgI3NlbGVjdEJ1dHRvblxuICAgICAgICAgIFtkZXNlbGVjdE9uQ2hhbmdlXT1cImZhbHNlXCI+XG4gICAgICAgIDxtYXQtb3B0aW9uIFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWN0aW9uLnZhbHVlc1wiIFxuICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIj5cbiAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQWN0aW9uTW9kZS5GaWxlXCI+XG4gICAgICA8ZnMtZmlsZVxuICAgICAgICAgIGNsYXNzPVwiYWN0aW9uIGFjdGlvbi1idXR0b25cIlxuICAgICAgICAgIFthY2NlcHRdPVwiYWN0aW9uLmFjY2VwdCB8fCAnKidcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJhY3Rpb24ubXVsdGlwbGVcIlxuICAgICAgICAgIFttaW5XaWR0aF09XCJhY3Rpb24ubWluV2lkdGhcIlxuICAgICAgICAgIFttaW5IZWlnaHRdPVwiYWN0aW9uLm1pbkhlaWdodFwiXG4gICAgICAgICAgW2ltYWdlV2lkdGhdPVwiYWN0aW9uLm1heFdpZHRoXCJcbiAgICAgICAgICBbaW1hZ2VIZWlnaHRdPVwiYWN0aW9uLm1heEhlaWdodFwiXG4gICAgICAgICAgKHNlbGVjdCk9XCJhY3Rpb24uZmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgIChlcnJvcik9XCJhY3Rpb24uZmlsZUVycm9yKCRldmVudClcIlxuICAgICAgICAgIChjbGlja2VkKT1cImFjdGlvbi5jbGljaygkZXZlbnQpXCJcbiAgICAgICAgICBmc1BvcG92ZXJcbiAgICAgICAgICBbZW5hYmxlZF09XCIhIWFjdGlvbi50b29sdGlwXCJcbiAgICAgICAgICBbdGV4dF09XCJhY3Rpb24udG9vbHRpcFwiPlxuICAgICAgICA8ZnMtZmlsdGVyLWFjdGlvbi1idXR0b24gXG4gICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIj5cbiAgICAgICAgPC9mcy1maWx0ZXItYWN0aW9uLWJ1dHRvbj5cbiAgICAgIDwvZnMtZmlsZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJrZWJhYkFjdGlvbnM/Lmxlbmd0aFwiPlxuICA8ZnMtZmlsdGVyLWFjdGlvbi1rZWJhYi1hY3Rpb25zXG4gICAgW2tlYmFiQWN0aW9uc109XCJrZWJhYkFjdGlvbnNcIj5cbiAgPC9mcy1maWx0ZXItYWN0aW9uLWtlYmFiLWFjdGlvbnM+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvYWN0aW9ucy9hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9hY3Rpb25zL2FjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVVyRCxNQUFNLE9BQU8sd0JBQXdCO0lBRzVCLFlBQVksR0FBYSxFQUFFLENBQUM7SUFHNUIsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUV2QixVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ3hCLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFFeEIsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUFVLEVBQUUsWUFBdUI7UUFDckUsSUFBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyQixJQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7dUdBbkJVLHdCQUF3QjsyRkFBeEIsd0JBQXdCLHVIQ2xCckMscWxNQStJQTs7MkZEN0hhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTs4QkFLeEMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxPQUFPO3NCQURiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbmltcG9ydCB7IEFjdGlvbk1vZGUsIEFjdGlvblR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYWN0aW9uLm1vZGVsJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1maWx0ZXItYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRnNGaWx0ZXJBY3Rpb25zQ29tcG9uZW50IHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMga2ViYWJBY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBBY3Rpb25UeXBlID0gQWN0aW9uVHlwZTtcbiAgcHVibGljIEFjdGlvbk1vZGUgPSBBY3Rpb25Nb2RlO1xuXG4gIHB1YmxpYyBhY3Rpb25DaGFuZ2UoYWN0aW9uOiBBY3Rpb24sIHZhbHVlOiBhbnksIHNlbGVjdEJ1dHRvbjogTWF0U2VsZWN0KTogdm9pZCB7XG4gICAgaWYoYWN0aW9uLmNoYW5nZSkge1xuICAgICAgYWN0aW9uLmNoYW5nZSh2YWx1ZSk7ICAgICAgXG5cbiAgICAgIGlmKGFjdGlvbi5kZXNlbGVjdCkge1xuICAgICAgICBzZWxlY3RCdXR0b24ud3JpdGVWYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiYWN0aW9uLm1vZGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJBY3Rpb25Nb2RlLkJ1dHRvblwiPlxuICAgICAgPGZzLWZpbHRlci1hY3Rpb24tYnV0dG9uXG4gICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgY2xhc3M9XCJhY3Rpb25cIlxuICAgICAgICBmc1BvcG92ZXJcbiAgICAgICAgW2VuYWJsZWRdPVwiISFhY3Rpb24udG9vbHRpcFwiXG4gICAgICAgIFt0ZXh0XT1cImFjdGlvbi50b29sdGlwXCI+XG4gICAgICA8L2ZzLWZpbHRlci1hY3Rpb24tYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiQWN0aW9uTW9kZS5NZW51XCI+XG4gICAgICA8ZnMtZmlsdGVyLWFjdGlvbi1idXR0b25cbiAgICAgICAgY2xhc3M9XCJhY3Rpb25cIlxuICAgICAgICBbYWN0aW9uXT1cImFjdGlvblwiXG4gICAgICAgIFtmc01lbnVUcmlnZ2VyRm9yXT1cInNvbWVSZWZcIlxuICAgICAgICBmc1BvcG92ZXJcbiAgICAgICAgW2VuYWJsZWRdPVwiISFhY3Rpb24udG9vbHRpcFwiXG4gICAgICAgIFt0ZXh0XT1cImFjdGlvbi50b29sdGlwXCI+XG4gICAgICA8L2ZzLWZpbHRlci1hY3Rpb24tYnV0dG9uPlxuXG4gICAgICA8ZnMtbWVudSAjc29tZVJlZiBjbGFzcz1cImFjdGlvblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZEFjdGlvbiBvZiBhY3Rpb24uaXRlbXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGRBY3Rpb24uaXNHcm91cCBlbHNlIHNpbXBsZU1lbnVJdGVtXCI+XG4gICAgICAgICAgICA8ZnMtbWVudS1ncm91cCBbbGFiZWxdPVwiY2hpbGRBY3Rpb24ubGFiZWxcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViQWN0aW9uIG9mIGNoaWxkQWN0aW9uLml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3ViQWN0aW9uLm1vZGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtZW51J1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmtdPVwic3ViQWN0aW9uLnJvdXRlckxpbms/LmxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInN1YkFjdGlvbi5yb3V0ZXJMaW5rPy5xdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIihzdWJBY3Rpb24udmlzaWJsZSQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJBY3Rpb24uY2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInN1YkFjdGlvbi5pY29uXCI+e3tzdWJBY3Rpb24uaWNvbn19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICB7e3N1YkFjdGlvbi5sYWJlbH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLW1lbnUtZmlsZS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwic3ViQWN0aW9uLm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwic3ViQWN0aW9uLmFjY2VwdCB8fCAnKidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21pbldpZHRoXT1cInN1YkFjdGlvbi5taW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWluSGVpZ2h0XT1cInN1YkFjdGlvbi5taW5IZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ltYWdlV2lkdGhdPVwic3ViQWN0aW9uLm1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZUhlaWdodF09XCJzdWJBY3Rpb24ubWF4SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3QpPVwic3ViQWN0aW9uLmZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKHN1YkFjdGlvbi52aXNpYmxlJCB8IGFzeW5jKSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1YkFjdGlvbi5jbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic3ViQWN0aW9uLmljb25cIj57e3N1YkFjdGlvbi5pY29ufX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIHt7c3ViQWN0aW9uLmxhYmVsfX1cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZnMtbWVudS1ncm91cD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbXBsZU1lbnVJdGVtPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY2hpbGRBY3Rpb24ubW9kZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWVudSdcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAgIFtsaW5rXT1cImNoaWxkQWN0aW9uLnJvdXRlckxpbms/LmxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiY2hpbGRBY3Rpb24ucm91dGVyTGluaz8ucXVlcnlQYXJhbXNcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZGVuXT1cIihjaGlsZEFjdGlvbi52aXNpYmxlJCB8IGFzeW5jKSA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hpbGRBY3Rpb24uY2xpY2soJGV2ZW50KTtcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImNoaWxkQWN0aW9uLmljb25cIj57e2NoaWxkQWN0aW9uLmljb259fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICB7e2NoaWxkQWN0aW9uLmxhYmVsfX1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGUnXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIGZzLW1lbnUtZmlsZS1pdGVtXG4gICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJjaGlsZEFjdGlvbi5tdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY2NlcHRdPVwiY2hpbGRBY3Rpb24uYWNjZXB0IHx8ICcqJ1wiXG4gICAgICAgICAgICAgICAgICAgIFttaW5XaWR0aF09XCJjaGlsZEFjdGlvbi5taW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgIFttaW5IZWlnaHRdPVwiY2hpbGRBY3Rpb24ubWluSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2ltYWdlV2lkdGhdPVwiY2hpbGRBY3Rpb24ubWF4V2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICBbaW1hZ2VIZWlnaHRdPVwiY2hpbGRBY3Rpb24ubWF4SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJjaGlsZEFjdGlvbi5maWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKGNoaWxkQWN0aW9uLnZpc2libGUkIHwgYXN5bmMpID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGlsZEFjdGlvbi5jbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJjaGlsZEFjdGlvbi5pY29uXCI+e3tjaGlsZEFjdGlvbi5pY29ufX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAge3tjaGlsZEFjdGlvbi5sYWJlbH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZnMtbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIkFjdGlvbk1vZGUuU2VsZWN0QnV0dG9uXCI+XG4gICAgICA8bWF0LXNlbGVjdCBcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbiBhY3Rpb24tc2VsZWN0LWJ1dHRvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBcbiAgICAgICAgICAgICdtYXQtbWRjLXJhaXNlZC1idXR0b24nOiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5SYWlzZWQsXG4gICAgICAgICAgICAnbWF0LW1kYy11bmVsZXZhdGVkLWJ1dHRvbic6IGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLkZsYXQsXG4gICAgICAgICAgICAnbWF0LW1kYy1vdXRsaW5lZC1idXR0b24nOiBhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5TdHJva2VkLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhY3Rpb24ubGFiZWxcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiYWN0aW9uLnZhbHVlXCIgXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiYWN0aW9uQ2hhbmdlKGFjdGlvbiwgJGV2ZW50LCBzZWxlY3RCdXR0b24pXCJcbiAgICAgICAgICBmc1NlbGVjdEJ1dHRvblxuICAgICAgICAgICNzZWxlY3RCdXR0b25cbiAgICAgICAgICBbZGVzZWxlY3RPbkNoYW5nZV09XCJmYWxzZVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiBcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFjdGlvbi52YWx1ZXNcIiBcbiAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+XG4gICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIkFjdGlvbk1vZGUuRmlsZVwiPlxuICAgICAgPGZzLWZpbGVcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbiBhY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBbYWNjZXB0XT1cImFjdGlvbi5hY2NlcHQgfHwgJyonXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiYWN0aW9uLm11bHRpcGxlXCJcbiAgICAgICAgICBbbWluV2lkdGhdPVwiYWN0aW9uLm1pbldpZHRoXCJcbiAgICAgICAgICBbbWluSGVpZ2h0XT1cImFjdGlvbi5taW5IZWlnaHRcIlxuICAgICAgICAgIFtpbWFnZVdpZHRoXT1cImFjdGlvbi5tYXhXaWR0aFwiXG4gICAgICAgICAgW2ltYWdlSGVpZ2h0XT1cImFjdGlvbi5tYXhIZWlnaHRcIlxuICAgICAgICAgIChzZWxlY3QpPVwiYWN0aW9uLmZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICAoZXJyb3IpPVwiYWN0aW9uLmZpbGVFcnJvcigkZXZlbnQpXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJhY3Rpb24uY2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgZnNQb3BvdmVyXG4gICAgICAgICAgW2VuYWJsZWRdPVwiISFhY3Rpb24udG9vbHRpcFwiXG4gICAgICAgICAgW3RleHRdPVwiYWN0aW9uLnRvb2x0aXBcIj5cbiAgICAgICAgPGZzLWZpbHRlci1hY3Rpb24tYnV0dG9uIFxuICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCI+XG4gICAgICAgIDwvZnMtZmlsdGVyLWFjdGlvbi1idXR0b24+XG4gICAgICA8L2ZzLWZpbGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwia2ViYWJBY3Rpb25zPy5sZW5ndGhcIj5cbiAgPGZzLWZpbHRlci1hY3Rpb24ta2ViYWItYWN0aW9uc1xuICAgIFtrZWJhYkFjdGlvbnNdPVwia2ViYWJBY3Rpb25zXCI+XG4gIDwvZnMtZmlsdGVyLWFjdGlvbi1rZWJhYi1hY3Rpb25zPlxuPC9uZy1jb250YWluZXI+XG4iXX0=