cmat 0.0.4 → 0.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.
Files changed (25) hide show
  1. package/components/chip-input/chip-input.component.d.ts +3 -1
  2. package/components/navigation/vertical/components/aside/aside.component.d.ts +5 -2
  3. package/components/navigation/vertical/components/basic/basic.component.d.ts +5 -2
  4. package/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +5 -2
  5. package/components/navigation/vertical/components/divider/divider.component.d.ts +5 -2
  6. package/components/navigation/vertical/components/group/group.component.d.ts +5 -2
  7. package/components/navigation/vertical/components/spacer/spacer.component.d.ts +5 -2
  8. package/components/navigation/vertical/vertical.component.d.ts +4 -1
  9. package/esm2022/components/chip-input/chip-input.component.mjs +10 -4
  10. package/esm2022/components/navigation/vertical/components/aside/aside.component.mjs +13 -4
  11. package/esm2022/components/navigation/vertical/components/basic/basic.component.mjs +13 -4
  12. package/esm2022/components/navigation/vertical/components/collapsable/collapsable.component.mjs +13 -4
  13. package/esm2022/components/navigation/vertical/components/divider/divider.component.mjs +13 -4
  14. package/esm2022/components/navigation/vertical/components/group/group.component.mjs +13 -4
  15. package/esm2022/components/navigation/vertical/components/spacer/spacer.component.mjs +13 -4
  16. package/esm2022/components/navigation/vertical/vertical.component.mjs +12 -3
  17. package/esm2022/services/config/urlStateConfig.service.mjs +2 -2
  18. package/fesm2022/cmat-components-chip-input.mjs +9 -3
  19. package/fesm2022/cmat-components-chip-input.mjs.map +1 -1
  20. package/fesm2022/cmat-components-navigation.mjs +78 -15
  21. package/fesm2022/cmat-components-navigation.mjs.map +1 -1
  22. package/fesm2022/cmat-services-config.mjs +1 -1
  23. package/fesm2022/cmat-services-config.mjs.map +1 -1
  24. package/package.json +72 -72
  25. package/services/config/urlStateConfig.service.d.ts +1 -1
@@ -11,6 +11,8 @@ export declare class CmatChipInputComponent implements ControlValueAccessor, OnD
11
11
  hasAutocomplete: boolean;
12
12
  outputIsString: boolean;
13
13
  separatorKey: string;
14
+ hasPrefixIcon: boolean;
15
+ prefixIcon: string;
14
16
  inputControl: FormControl<string | null>;
15
17
  filteredOptions$: Observable<string[] | null>;
16
18
  selectedOptions$: BehaviorSubject<any>;
@@ -30,5 +32,5 @@ export declare class CmatChipInputComponent implements ControlValueAccessor, OnD
30
32
  private _onTouchedChange;
31
33
  private _filter;
32
34
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatChipInputComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatChipInputComponent, "cmat-chip-input", ["cmatChipInput"], { "label": { "alias": "label"; "required": false; }; "selectableOptions": { "alias": "selectableOptions"; "required": false; }; "hasAutocomplete": { "alias": "hasAutocomplete"; "required": false; }; "outputIsString": { "alias": "outputIsString"; "required": false; }; "separatorKey": { "alias": "separatorKey"; "required": false; }; }, {}, never, never, true, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatChipInputComponent, "cmat-chip-input", ["cmatChipInput"], { "label": { "alias": "label"; "required": false; }; "selectableOptions": { "alias": "selectableOptions"; "required": false; }; "hasAutocomplete": { "alias": "hasAutocomplete"; "required": false; }; "outputIsString": { "alias": "outputIsString"; "required": false; }; "separatorKey": { "alias": "separatorKey"; "required": false; }; "hasPrefixIcon": { "alias": "hasPrefixIcon"; "required": false; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; }; }, {}, never, never, true, never>;
34
36
  }
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
1
+ import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
3
  import { BooleanInput } from '@angular/cdk/coercion';
4
4
  import { CmatNavigationService } from '../../../navigation.service';
@@ -15,6 +15,8 @@ export declare class CmatVerticalNavigationAsideItemComponent implements OnChang
15
15
  item: CmatNavigationItem;
16
16
  name: string;
17
17
  skipChildren: boolean;
18
+ editState: boolean;
19
+ readonly editSelectedItemChanged: EventEmitter<CmatNavigationItem>;
18
20
  active: boolean;
19
21
  private _cmatVerticalNavigationComponent;
20
22
  private _unsubscribeAll;
@@ -40,6 +42,7 @@ export declare class CmatVerticalNavigationAsideItemComponent implements OnChang
40
42
  * @param item
41
43
  */
42
44
  trackByFn(index: number, item: any): any;
45
+ selectItem(item: CmatNavigationItem): void;
43
46
  /**
44
47
  * Check if the given item has the given url
45
48
  * in one of its children
@@ -56,5 +59,5 @@ export declare class CmatVerticalNavigationAsideItemComponent implements OnChang
56
59
  */
57
60
  private _markIfActive;
58
61
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatVerticalNavigationAsideItemComponent, never>;
59
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationAsideItemComponent, "cmat-vertical-navigation-aside-item", never, { "activeItemId": { "alias": "activeItemId"; "required": false; }; "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; "skipChildren": { "alias": "skipChildren"; "required": false; }; }, {}, never, never, true, never>;
62
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationAsideItemComponent, "cmat-vertical-navigation-aside-item", never, { "activeItemId": { "alias": "activeItemId"; "required": false; }; "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; "skipChildren": { "alias": "skipChildren"; "required": false; }; "editState": { "alias": "editState"; "required": false; }; }, { "editSelectedItemChanged": "editSelectedItemChanged"; }, never, never, true, never>;
60
63
  }
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
1
+ import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { IsActiveMatchOptions } from '@angular/router';
3
3
  import { CmatNavigationService } from '../../../navigation.service';
4
4
  import { CmatNavigationItem } from '../../../navigation.types';
@@ -10,6 +10,8 @@ export declare class CmatVerticalNavigationBasicItemComponent implements OnInit,
10
10
  private _cmatUtilsService;
11
11
  item: CmatNavigationItem;
12
12
  name: string;
13
+ editState: boolean;
14
+ readonly editSelectedItemChanged: EventEmitter<CmatNavigationItem>;
13
15
  isActiveMatchOptions: IsActiveMatchOptions;
14
16
  private _cmatVerticalNavigationComponent;
15
17
  private _unsubscribeAll;
@@ -22,6 +24,7 @@ export declare class CmatVerticalNavigationBasicItemComponent implements OnInit,
22
24
  * On destroy
23
25
  */
24
26
  ngOnDestroy(): void;
27
+ selectItem(): void;
25
28
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatVerticalNavigationBasicItemComponent, never>;
26
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationBasicItemComponent, "cmat-vertical-navigation-basic-item", never, { "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationBasicItemComponent, "cmat-vertical-navigation-basic-item", never, { "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; "editState": { "alias": "editState"; "required": false; }; }, { "editSelectedItemChanged": "editSelectedItemChanged"; }, never, never, true, never>;
27
30
  }
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
1
+ import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { Router } from '@angular/router';
3
3
  import { BooleanInput } from '@angular/cdk/coercion';
4
4
  import { CmatNavigationService } from '../../../navigation.service';
@@ -12,6 +12,8 @@ export declare class CmatVerticalNavigationCollapsableItemComponent implements O
12
12
  autoCollapse: boolean;
13
13
  item: CmatNavigationItem;
14
14
  name: string;
15
+ editState: boolean;
16
+ readonly editSelectedItemChanged: EventEmitter<CmatNavigationItem>;
15
17
  isCollapsed: boolean;
16
18
  isExpanded: boolean;
17
19
  private _cmatVerticalNavigationComponent;
@@ -48,6 +50,7 @@ export declare class CmatVerticalNavigationCollapsableItemComponent implements O
48
50
  * @param item
49
51
  */
50
52
  trackByFn(index: number, item: any): any;
53
+ selectItem(item: CmatNavigationItem): void;
51
54
  /**
52
55
  * Check if the given item has the given url
53
56
  * in one of its children
@@ -67,5 +70,5 @@ export declare class CmatVerticalNavigationCollapsableItemComponent implements O
67
70
  */
68
71
  private _isChildrenOf;
69
72
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatVerticalNavigationCollapsableItemComponent, never>;
70
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationCollapsableItemComponent, "cmat-vertical-navigation-collapsable-item", never, { "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
73
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationCollapsableItemComponent, "cmat-vertical-navigation-collapsable-item", never, { "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; "editState": { "alias": "editState"; "required": false; }; }, { "editSelectedItemChanged": "editSelectedItemChanged"; }, never, never, true, never>;
71
74
  }
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
1
+ import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { CmatNavigationService } from '../../../navigation.service';
3
3
  import { CmatNavigationItem } from '../../../navigation.types';
4
4
  import * as i0 from "@angular/core";
@@ -7,6 +7,8 @@ export declare class CmatVerticalNavigationDividerItemComponent implements OnIni
7
7
  private _cmatNavigationService;
8
8
  item: CmatNavigationItem;
9
9
  name: string;
10
+ editState: boolean;
11
+ readonly editSelectedItemChanged: EventEmitter<CmatNavigationItem>;
10
12
  private _cmatVerticalNavigationComponent;
11
13
  private _unsubscribeAll;
12
14
  constructor(_changeDetectorRef: ChangeDetectorRef, _cmatNavigationService: CmatNavigationService);
@@ -18,6 +20,7 @@ export declare class CmatVerticalNavigationDividerItemComponent implements OnIni
18
20
  * On destroy
19
21
  */
20
22
  ngOnDestroy(): void;
23
+ selectItem(item: CmatNavigationItem): void;
21
24
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatVerticalNavigationDividerItemComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationDividerItemComponent, "cmat-vertical-navigation-divider-item", never, { "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationDividerItemComponent, "cmat-vertical-navigation-divider-item", never, { "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; "editState": { "alias": "editState"; "required": false; }; }, { "editSelectedItemChanged": "editSelectedItemChanged"; }, never, never, true, never>;
23
26
  }
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
1
+ import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { BooleanInput } from '@angular/cdk/coercion';
3
3
  import { CmatNavigationService } from '../../../navigation.service';
4
4
  import { CmatNavigationItem } from '../../../navigation.types';
@@ -10,6 +10,8 @@ export declare class CmatVerticalNavigationGroupItemComponent implements OnInit,
10
10
  autoCollapse: boolean;
11
11
  item: CmatNavigationItem;
12
12
  name: string;
13
+ editState: boolean;
14
+ readonly editSelectedItemChanged: EventEmitter<CmatNavigationItem>;
13
15
  private _cmatVerticalNavigationComponent;
14
16
  private _unsubscribeAll;
15
17
  constructor(_changeDetectorRef: ChangeDetectorRef, _cmatNavigationService: CmatNavigationService);
@@ -28,6 +30,7 @@ export declare class CmatVerticalNavigationGroupItemComponent implements OnInit,
28
30
  * @param item
29
31
  */
30
32
  trackByFn(index: number, item: any): any;
33
+ selectItem(item: CmatNavigationItem): void;
31
34
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatVerticalNavigationGroupItemComponent, never>;
32
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationGroupItemComponent, "cmat-vertical-navigation-group-item", never, { "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationGroupItemComponent, "cmat-vertical-navigation-group-item", never, { "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; "editState": { "alias": "editState"; "required": false; }; }, { "editSelectedItemChanged": "editSelectedItemChanged"; }, never, never, true, never>;
33
36
  }
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
1
+ import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
2
2
  import { CmatNavigationService } from '../../../navigation.service';
3
3
  import { CmatNavigationItem } from '../../../navigation.types';
4
4
  import * as i0 from "@angular/core";
@@ -7,6 +7,8 @@ export declare class CmatVerticalNavigationSpacerItemComponent implements OnInit
7
7
  private _cmatNavigationService;
8
8
  item: CmatNavigationItem;
9
9
  name: string;
10
+ editState: boolean;
11
+ readonly editSelectedItemChanged: EventEmitter<CmatNavigationItem>;
10
12
  private _cmatVerticalNavigationComponent;
11
13
  private _unsubscribeAll;
12
14
  constructor(_changeDetectorRef: ChangeDetectorRef, _cmatNavigationService: CmatNavigationService);
@@ -18,6 +20,7 @@ export declare class CmatVerticalNavigationSpacerItemComponent implements OnInit
18
20
  * On destroy
19
21
  */
20
22
  ngOnDestroy(): void;
23
+ selectItem(item: CmatNavigationItem): void;
21
24
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatVerticalNavigationSpacerItemComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationSpacerItemComponent, "cmat-vertical-navigation-spacer-item", never, { "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationSpacerItemComponent, "cmat-vertical-navigation-spacer-item", never, { "item": { "alias": "item"; "required": false; }; "name": { "alias": "name"; "required": false; }; "editState": { "alias": "editState"; "required": false; }; }, { "editSelectedItemChanged": "editSelectedItemChanged"; }, never, never, true, never>;
23
26
  }
@@ -22,6 +22,7 @@ export declare class CmatVerticalNavigationComponent implements OnChanges, OnIni
22
22
  static ngAcceptInputType_transparentOverlay: BooleanInput;
23
23
  appearance: CmatVerticalNavigationAppearance;
24
24
  autoCollapse: boolean;
25
+ editState: boolean;
25
26
  inner: boolean;
26
27
  mode: CmatVerticalNavigationMode;
27
28
  name: string;
@@ -33,6 +34,7 @@ export declare class CmatVerticalNavigationComponent implements OnChanges, OnIni
33
34
  readonly modeChanged: EventEmitter<CmatVerticalNavigationMode>;
34
35
  readonly openedChanged: EventEmitter<boolean>;
35
36
  readonly positionChanged: EventEmitter<CmatVerticalNavigationPosition>;
37
+ readonly editSelectedItemChanged: EventEmitter<CmatNavigationItem>;
36
38
  private _navigationContentEl;
37
39
  activeAsideItemId: string | null;
38
40
  onCollapsableItemCollapsed: ReplaySubject<CmatNavigationItem>;
@@ -125,6 +127,7 @@ export declare class CmatVerticalNavigationComponent implements OnChanges, OnIni
125
127
  * @param item
126
128
  */
127
129
  trackByFn(index: number, item: any): any;
130
+ selectItem(item: CmatNavigationItem): void;
128
131
  /**
129
132
  * Enable the animations
130
133
  *
@@ -169,5 +172,5 @@ export declare class CmatVerticalNavigationComponent implements OnChanges, OnIni
169
172
  */
170
173
  private _toggleOpened;
171
174
  static ɵfac: i0.ɵɵFactoryDeclaration<CmatVerticalNavigationComponent, never>;
172
- static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationComponent, "cmat-vertical-navigation", ["cmatVerticalNavigation"], { "appearance": { "alias": "appearance"; "required": false; }; "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "inner": { "alias": "inner"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "name": { "alias": "name"; "required": false; }; "navigation": { "alias": "navigation"; "required": false; }; "opened": { "alias": "opened"; "required": false; }; "position": { "alias": "position"; "required": false; }; "transparentOverlay": { "alias": "transparentOverlay"; "required": false; }; }, { "appearanceChanged": "appearanceChanged"; "modeChanged": "modeChanged"; "openedChanged": "openedChanged"; "positionChanged": "positionChanged"; }, never, ["[cmatVerticalNavigationHeader]", "[cmatVerticalNavigationContentHeader]", "[cmatVerticalNavigationContentFooter]", "[cmatVerticalNavigationFooter]"], true, never>;
175
+ static ɵcmp: i0.ɵɵComponentDeclaration<CmatVerticalNavigationComponent, "cmat-vertical-navigation", ["cmatVerticalNavigation"], { "appearance": { "alias": "appearance"; "required": false; }; "autoCollapse": { "alias": "autoCollapse"; "required": false; }; "editState": { "alias": "editState"; "required": false; }; "inner": { "alias": "inner"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "name": { "alias": "name"; "required": false; }; "navigation": { "alias": "navigation"; "required": false; }; "opened": { "alias": "opened"; "required": false; }; "position": { "alias": "position"; "required": false; }; "transparentOverlay": { "alias": "transparentOverlay"; "required": false; }; }, { "appearanceChanged": "appearanceChanged"; "modeChanged": "modeChanged"; "openedChanged": "openedChanged"; "positionChanged": "positionChanged"; "editSelectedItemChanged": "editSelectedItemChanged"; }, never, ["[cmatVerticalNavigationHeader]", "[cmatVerticalNavigationContentHeader]", "[cmatVerticalNavigationContentFooter]", "[cmatVerticalNavigationFooter]"], true, never>;
173
176
  }
@@ -22,6 +22,8 @@ export class CmatChipInputComponent {
22
22
  this.hasAutocomplete = false;
23
23
  this.outputIsString = false;
24
24
  this.separatorKey = ',';
25
+ this.hasPrefixIcon = false;
26
+ this.prefixIcon = 'heroicons_solid:pencil-square';
25
27
  this.inputControl = new FormControl();
26
28
  this.selectedOptions$ = new BehaviorSubject([]);
27
29
  this.separatorKeysCodes = [ENTER, COMMA];
@@ -110,13 +112,13 @@ export class CmatChipInputComponent {
110
112
  return this.selectableOptions.filter(v => v.toLowerCase().includes(filterValue));
111
113
  }
112
114
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatChipInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
113
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: CmatChipInputComponent, isStandalone: true, selector: "cmat-chip-input", inputs: { label: "label", selectableOptions: "selectableOptions", hasAutocomplete: "hasAutocomplete", outputIsString: "outputIsString", separatorKey: "separatorKey" }, providers: [
115
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: CmatChipInputComponent, isStandalone: true, selector: "cmat-chip-input", inputs: { label: "label", selectableOptions: "selectableOptions", hasAutocomplete: "hasAutocomplete", outputIsString: "outputIsString", separatorKey: "separatorKey", hasPrefixIcon: "hasPrefixIcon", prefixIcon: "prefixIcon" }, providers: [
114
116
  {
115
117
  provide: NG_VALUE_ACCESSOR,
116
118
  useExisting: forwardRef(() => CmatChipInputComponent),
117
119
  multi: true
118
120
  }
119
- ], viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true }], exportAs: ["cmatChipInput"], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" class=\"w-full\">\n <mat-label>{{label}}</mat-label>\n <mat-chip-grid #chipList class=\"items-center\">\n @for (option of selectedOptions$ | async; track trackByFn($index)) {\n <mat-chip-row selectable (removed)=\"onRemove(option)\">\n {{ option }}\n <button matChipRemove>\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_solid:cancel'\"></mat-icon>\n </button>\n </mat-chip-row>\n }\n\n @if (hasAutocomplete) {\n <input #input matInput [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u9009\u62E9...'\"\n [matAutocomplete]=\"autoComplete\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"onAdd($event)\" />\n <mat-autocomplete #autoComplete=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\">\n @for (option of filteredOptions$ | async; track trackByFn($index)) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n } @else {\n <input #input [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u586B\u5199...'\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"onAdd($event)\" />\n }\n </mat-chip-grid>\n\n </mat-form-field>\n\n", dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
121
+ ], viewQueries: [{ propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true }], exportAs: ["cmatChipInput"], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" class=\"w-full\">\n <mat-label>{{label}}</mat-label>\n @if(hasPrefixIcon){\n <mat-icon matPrefix class=\"hidden sm:flex icon-size-5\" [svgIcon]=\"prefixIcon\">\n </mat-icon>\n }\n <mat-chip-grid #chipList class=\"items-center\">\n @for (option of selectedOptions$ | async; track trackByFn($index)) {\n <mat-chip-row selectable (removed)=\"onRemove(option)\">\n {{ option }}\n <button matChipRemove>\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_solid:cancel'\"></mat-icon>\n </button>\n </mat-chip-row>\n }\n\n @if (hasAutocomplete) {\n <input #input matInput [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u9009\u62E9...'\" [matAutocomplete]=\"autoComplete\"\n [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"onAdd($event)\" />\n <mat-autocomplete #autoComplete=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\">\n @for (option of filteredOptions$ | async; track trackByFn($index)) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n } @else {\n <input #input [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u586B\u5199...'\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"onAdd($event)\" />\n }\n </mat-chip-grid>\n\n</mat-form-field>", dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i2.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i2.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i2.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i2.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
120
122
  }
121
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatChipInputComponent, decorators: [{
122
124
  type: Component,
@@ -126,7 +128,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
126
128
  useExisting: forwardRef(() => CmatChipInputComponent),
127
129
  multi: true
128
130
  }
129
- ], exportAs: 'cmatChipInput', imports: [MatFormFieldModule, MatChipsModule, AsyncPipe, MatInputModule, MatAutocompleteModule, MatIconModule, FormsModule, ReactiveFormsModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field subscriptSizing=\"dynamic\" class=\"w-full\">\n <mat-label>{{label}}</mat-label>\n <mat-chip-grid #chipList class=\"items-center\">\n @for (option of selectedOptions$ | async; track trackByFn($index)) {\n <mat-chip-row selectable (removed)=\"onRemove(option)\">\n {{ option }}\n <button matChipRemove>\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_solid:cancel'\"></mat-icon>\n </button>\n </mat-chip-row>\n }\n\n @if (hasAutocomplete) {\n <input #input matInput [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u9009\u62E9...'\"\n [matAutocomplete]=\"autoComplete\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"onAdd($event)\" />\n <mat-autocomplete #autoComplete=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\">\n @for (option of filteredOptions$ | async; track trackByFn($index)) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n } @else {\n <input #input [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u586B\u5199...'\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"onAdd($event)\" />\n }\n </mat-chip-grid>\n\n </mat-form-field>\n\n" }]
131
+ ], exportAs: 'cmatChipInput', imports: [MatFormFieldModule, MatChipsModule, AsyncPipe, MatInputModule, MatAutocompleteModule, MatIconModule, FormsModule, ReactiveFormsModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-form-field subscriptSizing=\"dynamic\" class=\"w-full\">\n <mat-label>{{label}}</mat-label>\n @if(hasPrefixIcon){\n <mat-icon matPrefix class=\"hidden sm:flex icon-size-5\" [svgIcon]=\"prefixIcon\">\n </mat-icon>\n }\n <mat-chip-grid #chipList class=\"items-center\">\n @for (option of selectedOptions$ | async; track trackByFn($index)) {\n <mat-chip-row selectable (removed)=\"onRemove(option)\">\n {{ option }}\n <button matChipRemove>\n <mat-icon class=\"icon-size-5\" [svgIcon]=\"'mat_solid:cancel'\"></mat-icon>\n </button>\n </mat-chip-row>\n }\n\n @if (hasAutocomplete) {\n <input #input matInput [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u9009\u62E9...'\" [matAutocomplete]=\"autoComplete\"\n [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n (matChipInputTokenEnd)=\"onAdd($event)\" />\n <mat-autocomplete #autoComplete=\"matAutocomplete\" (optionSelected)=\"onSelected($event)\">\n @for (option of filteredOptions$ | async; track trackByFn($index)) {\n <mat-option [value]=\"option\">\n {{ option }}\n </mat-option>\n }\n </mat-autocomplete>\n } @else {\n <input #input [formControl]=\"inputControl\" [placeholder]=\"'\u5F00\u59CB\u586B\u5199...'\" [matChipInputFor]=\"chipList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\" (matChipInputTokenEnd)=\"onAdd($event)\" />\n }\n </mat-chip-grid>\n\n</mat-form-field>" }]
130
132
  }], ctorParameters: () => [], propDecorators: { inputElementRef: [{
131
133
  type: ViewChild,
132
134
  args: ['input']
@@ -140,5 +142,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
140
142
  type: Input
141
143
  }], separatorKey: [{
142
144
  type: Input
145
+ }], hasPrefixIcon: [{
146
+ type: Input
147
+ }], prefixIcon: [{
148
+ type: Input
143
149
  }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvY2hpcC1pbnB1dC9jaGlwLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9jaGlwLWlucHV0L2NoaXAtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQWEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4SCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQWdDLE1BQU0sZ0NBQWdDLENBQUM7QUFDckcsT0FBTyxFQUFxQixjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7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QU87Z0JBQ1QsS0FBSztzQkFBYixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBtYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENPTU1BLCBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50LCBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgaXNOaWwgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuXHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1jaGlwLWlucHV0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGlwLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbWF0Q2hpcElucHV0Q29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0QXM6ICdjbWF0Q2hpcElucHV0JyxcclxuICAgIGltcG9ydHM6IFtNYXRGb3JtRmllbGRNb2R1bGUsIE1hdENoaXBzTW9kdWxlLEFzeW5jUGlwZSwgTWF0SW5wdXRNb2R1bGUsIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0Q2hpcElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RhYmxlT3B0aW9uczogc3RyaW5nW107XHJcbiAgICBASW5wdXQoKSBoYXNBdXRvY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG91dHB1dElzU3RyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXBhcmF0b3JLZXk6IHN0cmluZyA9ICcsJztcclxuXHJcbiAgICBpbnB1dENvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICBmaWx0ZXJlZE9wdGlvbnMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgbnVsbD47XHJcbiAgICBzZWxlY3RlZE9wdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihbXSk7XHJcbiAgICBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQV07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWF4RmlsdGVyZWRJdGVtcyA9IDUwO1xyXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyQgPSB0aGlzLmlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpLFxyXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcclxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9ICh2YWx1ZSA/IHRoaXMuX2ZpbHRlcih2YWx1ZSkgOiB0aGlzLnNlbGVjdGFibGVPcHRpb25zLnNsaWNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdFNlbGVjdGVkID0gIWlzTmlsKHRoaXMuc2VsZWN0ZWRPcHRpb25zJC52YWx1ZSkgPyBzZWxlY3RhYmxlLmZpbHRlcihvcHRpb24gPT4gIXRoaXMuc2VsZWN0ZWRPcHRpb25zJC52YWx1ZS5pbmNsdWRlcyhvcHRpb24pKSA6IHNlbGVjdGFibGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RTZWxlY3RlZC5zbGljZSgwLCB0aGlzLl9tYXhGaWx0ZXJlZEl0ZW1zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KHZvaWQgMCk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vbk1vZGVsQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc05pbCh2YWx1ZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICBlbHNlIGlmIChpc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyQubmV4dChbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyQubmV4dCgodmFsdWUgYXMgc3RyaW5nKS5zcGxpdCh0aGlzLnNlcGFyYXRvcktleSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BZGQoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudmFsdWUgfHwgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlICYmICghdGhpcy5oYXNBdXRvY29tcGxldGUgfHwgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5pbmNsdWRlcyh2YWx1ZSkpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaXNOaWwodGhpcy5zZWxlY3RlZE9wdGlvbnMkLnZhbHVlKSA/IFt2YWx1ZV0gOiBbLi4udGhpcy5zZWxlY3RlZE9wdGlvbnMkLnZhbHVlLCB2YWx1ZV07XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zJC5uZXh0KG5ld1ZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dElzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbk1vZGVsQ2hhbmdlKG5ld1ZhbHVlLmpvaW4odGhpcy5zZXBhcmF0b3JLZXkpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uTW9kZWxDaGFuZ2UobmV3VmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5jaGlwSW5wdXQhLmNsZWFyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlKG9wdGlvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zJC52YWx1ZS5pbmRleE9mKG9wdGlvbik7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgbGV0IG5ld09wdGlvbnMgPSBbLi4udGhpcy5zZWxlY3RlZE9wdGlvbnMkLnZhbHVlXTtcclxuICAgICAgICAgICAgbmV3T3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICBuZXdPcHRpb25zID0gbmV3T3B0aW9ucy5sZW5ndGggPiAwID8gbmV3T3B0aW9ucyA6IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMkLm5leHQobmV3T3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRJc1N0cmluZyAmJiAhaXNOaWwobmV3T3B0aW9ucykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uTW9kZWxDaGFuZ2UobmV3T3B0aW9ucy5qb2luKHRoaXMuc2VwYXJhdG9yS2V5KSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbk1vZGVsQ2hhbmdlKG5ld09wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaXNOaWwodGhpcy5zZWxlY3RlZE9wdGlvbnMkLnZhbHVlKSA/IFtldmVudC5vcHRpb24udmlld1ZhbHVlXSA6IFsuLi50aGlzLnNlbGVjdGVkT3B0aW9ucyQudmFsdWUsIGV2ZW50Lm9wdGlvbi52aWV3VmFsdWVdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zJC5uZXh0KG5ld1ZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3V0cHV0SXNTdHJpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5fb25Nb2RlbENoYW5nZShuZXdWYWx1ZS5qb2luKHRoaXMuc2VwYXJhdG9yS2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fb25Nb2RlbENoYW5nZShuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9vbk1vZGVsQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHsgfTtcclxuICAgIHByaXZhdGUgX29uVG91Y2hlZENoYW5nZTogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xyXG5cclxuICAgIHByaXZhdGUgX2ZpbHRlcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSk7XHJcbiAgICB9XHJcbn0iLCI8bWF0LWZvcm0tZmllbGQgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIGNsYXNzPVwidy1mdWxsXCI+XG4gIDxtYXQtbGFiZWw+e3tsYWJlbH19PC9tYXQtbGFiZWw+XG4gIDxtYXQtY2hpcC1ncmlkICNjaGlwTGlzdCBjbGFzcz1cIml0ZW1zLWNlbnRlclwiPlxuICAgIEBmb3IgKG9wdGlvbiBvZiBzZWxlY3RlZE9wdGlvbnMkIHwgYXN5bmM7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgpKSB7XG4gICAgICA8bWF0LWNoaXAtcm93IHNlbGVjdGFibGUgKHJlbW92ZWQpPVwib25SZW1vdmUob3B0aW9uKVwiPlxuICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tc2l6ZS01XCIgIFtzdmdJY29uXT1cIidtYXRfc29saWQ6Y2FuY2VsJ1wiPjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgfVxuXG4gICAgQGlmIChoYXNBdXRvY29tcGxldGUpIHtcbiAgICAgIDxpbnB1dCAjaW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImlucHV0Q29udHJvbFwiIFtwbGFjZWhvbGRlcl09XCIn5byA5aeL6YCJ5oupLi4uJ1wiXG4gICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b0NvbXBsZXRlXCIgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdFwiXG4gICAgICAgIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIiAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwib25BZGQoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvQ29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25TZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgQGZvciAob3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyQgfCBhc3luYzsgdHJhY2sgdHJhY2tCeUZuKCRpbmRleCkpIHtcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAge3sgb3B0aW9uIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGlucHV0ICNpbnB1dCBbZm9ybUNvbnRyb2xdPVwiaW5wdXRDb250cm9sXCIgW3BsYWNlaG9sZGVyXT1cIiflvIDlp4vloavlhpkuLi4nXCIgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdFwiXG4gICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJvbkFkZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuIl19
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvY2hpcC1pbnB1dC9jaGlwLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NtYXQvY29tcG9uZW50cy9jaGlwLWlucHV0L2NoaXAtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQWEsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4SCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQWdDLE1BQU0sZ0NBQWdDLENBQUM7QUFDckcsT0FBTyxFQUFxQixjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7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bUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07d0RBRzNCLGVBQWU7c0JBQWxDLFNBQVM7dUJBQUMsT0FBTztnQkFDVCxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBtYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENPTU1BLCBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50LCBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNFbXB0eSwgaXNOaWwgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuXHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC1jaGlwLWlucHV0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGlwLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDbWF0Q2hpcElucHV0Q29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0QXM6ICdjbWF0Q2hpcElucHV0JyxcclxuICAgIGltcG9ydHM6IFtNYXRGb3JtRmllbGRNb2R1bGUsIE1hdENoaXBzTW9kdWxlLEFzeW5jUGlwZSwgTWF0SW5wdXRNb2R1bGUsIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0Q2hpcElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RhYmxlT3B0aW9uczogc3RyaW5nW107XHJcbiAgICBASW5wdXQoKSBoYXNBdXRvY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG91dHB1dElzU3RyaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXBhcmF0b3JLZXk6IHN0cmluZyA9ICcsJztcclxuICAgIEBJbnB1dCgpIGhhc1ByZWZpeEljb246Ym9vbGVhbj1mYWxzZTtcclxuICAgIEBJbnB1dCgpIHByZWZpeEljb246c3RyaW5nPSdoZXJvaWNvbnNfc29saWQ6cGVuY2lsLXNxdWFyZSc7XHJcblxyXG4gICAgaW5wdXRDb250cm9sOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPiA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgZmlsdGVyZWRPcHRpb25zJDogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IG51bGw+O1xyXG4gICAgc2VsZWN0ZWRPcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oW10pO1xyXG4gICAgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21heEZpbHRlcmVkSXRlbXMgPSA1MDtcclxuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMkID0gdGhpcy5pbnB1dENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgICAgICAgIG1hcCgodmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0F1dG9jb21wbGV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGFibGUgPSAodmFsdWUgPyB0aGlzLl9maWx0ZXIodmFsdWUpIDogdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5zbGljZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3RTZWxlY3RlZCA9ICFpc05pbCh0aGlzLnNlbGVjdGVkT3B0aW9ucyQudmFsdWUpID8gc2VsZWN0YWJsZS5maWx0ZXIob3B0aW9uID0+ICF0aGlzLnNlbGVjdGVkT3B0aW9ucyQudmFsdWUuaW5jbHVkZXMob3B0aW9uKSkgOiBzZWxlY3RhYmxlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90U2VsZWN0ZWQuc2xpY2UoMCwgdGhpcy5fbWF4RmlsdGVyZWRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCh2b2lkIDApO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25Nb2RlbENoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vblRvdWNoZWRDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNOaWwodmFsdWUpKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyQubmV4dCh2YWx1ZSk7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNFbXB0eSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMkLm5leHQoW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMkLm5leHQoKHZhbHVlIGFzIHN0cmluZykuc3BsaXQodGhpcy5zZXBhcmF0b3JLZXkpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlIHx8ICcnKS50cmltKCk7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSAmJiAoIXRoaXMuaGFzQXV0b2NvbXBsZXRlIHx8IHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMuaW5jbHVkZXModmFsdWUpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGlzTmlsKHRoaXMuc2VsZWN0ZWRPcHRpb25zJC52YWx1ZSkgPyBbdmFsdWVdIDogWy4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zJC52YWx1ZSwgdmFsdWVdO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyQubmV4dChuZXdWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRJc1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25Nb2RlbENoYW5nZShuZXdWYWx1ZS5qb2luKHRoaXMuc2VwYXJhdG9yS2V5KSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbk1vZGVsQ2hhbmdlKG5ld1ZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXZlbnQuY2hpcElucHV0IS5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBvblJlbW92ZShvcHRpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucyQudmFsdWUuaW5kZXhPZihvcHRpb24pO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdPcHRpb25zID0gWy4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zJC52YWx1ZV07XHJcbiAgICAgICAgICAgIG5ld09wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgbmV3T3B0aW9ucyA9IG5ld09wdGlvbnMubGVuZ3RoID4gMCA/IG5ld09wdGlvbnMgOiBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zJC5uZXh0KG5ld09wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0SXNTdHJpbmcgJiYgIWlzTmlsKG5ld09wdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbk1vZGVsQ2hhbmdlKG5ld09wdGlvbnMuam9pbih0aGlzLnNlcGFyYXRvcktleSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25Nb2RlbENoYW5nZShuZXdPcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGlzTmlsKHRoaXMuc2VsZWN0ZWRPcHRpb25zJC52YWx1ZSkgPyBbZXZlbnQub3B0aW9uLnZpZXdWYWx1ZV0gOiBbLi4udGhpcy5zZWxlY3RlZE9wdGlvbnMkLnZhbHVlLCBldmVudC5vcHRpb24udmlld1ZhbHVlXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyQubmV4dChuZXdWYWx1ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm91dHB1dElzU3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uTW9kZWxDaGFuZ2UobmV3VmFsdWUuam9pbih0aGlzLnNlcGFyYXRvcktleSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uTW9kZWxDaGFuZ2UobmV3VmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKTogYW55IHtcclxuICAgICAgICByZXR1cm4gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfb25Nb2RlbENoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7IH07XHJcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDaGFuZ2U6ICgpID0+IGFueSA9ICgpID0+IHsgfTtcclxuXHJcbiAgICBwcml2YXRlIF9maWx0ZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpO1xyXG4gICAgfVxyXG59IiwiPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBjbGFzcz1cInctZnVsbFwiPlxuICA8bWF0LWxhYmVsPnt7bGFiZWx9fTwvbWF0LWxhYmVsPlxuICBAaWYoaGFzUHJlZml4SWNvbil7XG4gIDxtYXQtaWNvbiBtYXRQcmVmaXggY2xhc3M9XCJoaWRkZW4gc206ZmxleCBpY29uLXNpemUtNVwiIFtzdmdJY29uXT1cInByZWZpeEljb25cIj5cbiAgPC9tYXQtaWNvbj5cbiAgfVxuICA8bWF0LWNoaXAtZ3JpZCAjY2hpcExpc3QgY2xhc3M9XCJpdGVtcy1jZW50ZXJcIj5cbiAgICBAZm9yIChvcHRpb24gb2Ygc2VsZWN0ZWRPcHRpb25zJCB8IGFzeW5jOyB0cmFjayB0cmFja0J5Rm4oJGluZGV4KSkge1xuICAgIDxtYXQtY2hpcC1yb3cgc2VsZWN0YWJsZSAocmVtb3ZlZCk9XCJvblJlbW92ZShvcHRpb24pXCI+XG4gICAgICB7eyBvcHRpb24gfX1cbiAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZT5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1zaXplLTVcIiBbc3ZnSWNvbl09XCInbWF0X3NvbGlkOmNhbmNlbCdcIj48L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgfVxuXG4gICAgQGlmIChoYXNBdXRvY29tcGxldGUpIHtcbiAgICA8aW5wdXQgI2lucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJpbnB1dENvbnRyb2xcIiBbcGxhY2Vob2xkZXJdPVwiJ+W8gOWni+mAieaLqS4uLidcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9Db21wbGV0ZVwiXG4gICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCIgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXG4gICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwib25BZGQoJGV2ZW50KVwiIC8+XG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9Db21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvblNlbGVjdGVkKCRldmVudClcIj5cbiAgICAgIEBmb3IgKG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMkIHwgYXN5bmM7IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgpKSB7XG4gICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgfVxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICB9IEBlbHNlIHtcbiAgICA8aW5wdXQgI2lucHV0IFtmb3JtQ29udHJvbF09XCJpbnB1dENvbnRyb2xcIiBbcGxhY2Vob2xkZXJdPVwiJ+W8gOWni+Whq+WGmS4uLidcIiBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCJcbiAgICAgIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIiAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwib25BZGQoJGV2ZW50KVwiIC8+XG4gICAgfVxuICA8L21hdC1jaGlwLWdyaWQ+XG5cbjwvbWF0LWZvcm0tZmllbGQ+Il19
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { NavigationEnd } from '@angular/router';
3
3
  import { Subject } from 'rxjs';
4
4
  import { filter, takeUntil } from 'rxjs/operators';
@@ -20,6 +20,8 @@ export class CmatVerticalNavigationAsideItemComponent {
20
20
  this._changeDetectorRef = _changeDetectorRef;
21
21
  this._router = _router;
22
22
  this._cmatNavigationService = _cmatNavigationService;
23
+ this.editState = false;
24
+ this.editSelectedItemChanged = new EventEmitter();
23
25
  this.active = false;
24
26
  this._unsubscribeAll = new Subject();
25
27
  }
@@ -79,6 +81,9 @@ export class CmatVerticalNavigationAsideItemComponent {
79
81
  trackByFn(index, item) {
80
82
  return item.id || index;
81
83
  }
84
+ selectItem(item) {
85
+ this.editSelectedItemChanged.next(item);
86
+ }
82
87
  // -----------------------------------------------------------------------------------------------------
83
88
  // @ Private methods
84
89
  // -----------------------------------------------------------------------------------------------------
@@ -132,13 +137,13 @@ export class CmatVerticalNavigationAsideItemComponent {
132
137
  this._changeDetectorRef.markForCheck();
133
138
  }
134
139
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatVerticalNavigationAsideItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i2.CmatNavigationService }], target: i0.ɵɵFactoryTarget.Component }); }
135
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: CmatVerticalNavigationAsideItemComponent, isStandalone: true, selector: "cmat-vertical-navigation-aside-item", inputs: { activeItemId: "activeItemId", autoCollapse: "autoCollapse", item: "item", name: "name", skipChildren: "skipChildren" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cmat-vertical-navigation-item-wrapper\" [class.cmat-vertical-navigation-item-has-subtitle]=\"!!item.subTitle\"\n [ngClass]=\"item.classes?.wrapper\">\n\n <div class=\"cmat-vertical-navigation-item\" [ngClass]=\"{'cmat-vertical-navigation-item-active': active,\r\n 'cmat-vertical-navigation-item-disabled': item.disabled,\r\n 'cmat-vertical-navigation-item-active-forced': item.active}\" [matTooltip]=\"item.tooltip || ''\">\r\n\n <!-- Icon -->\n @if (item.icon) {\n <mat-icon class=\"cmat-vertical-navigation-item-icon\" [ngClass]=\"item.classes?.icon\" [svgIcon]=\"item.icon\">\n </mat-icon>\n }\n\n <!-- Title & Subtitle -->\n <div class=\"cmat-vertical-navigation-item-title-wrapper\">\n <div class=\"cmat-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{item.title}}\n </span>\n </div>\n @if (item.subTitle) {\n <div class=\"cmat-vertical-navigation-item-subtitle\">\n <span [ngClass]=\"item.classes?.subtitle\">\n {{item.subTitle}}\n </span>\n </div>\n }\n </div>\n\n <!-- Badge -->\n @if (item.badge) {\n <div class=\"cmat-vertical-navigation-item-badge\">\n <div class=\"cmat-vertical-navigation-item-badge-content\" [ngClass]=\"item.badge.classes\">\n {{item.badge.title}}\n </div>\n </div>\n }\n\n </div>\n\n</div>\n\n@if (!skipChildren) {\n <div class=\"cmat-vertical-navigation-item-children\">\n @for (item of item.children; track trackByFn($index, item)) {\n <!-- Skip the hidden items -->\n @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\n <!-- Basic -->\n @if (item.type === 'basic') {\n <cmat-vertical-navigation-basic-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-basic-item>\n }\n <!-- Collapsable -->\n @if (item.type === 'collapsable') {\n <cmat-vertical-navigation-collapsable-item [item]=\"item\" [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"></cmat-vertical-navigation-collapsable-item>\n }\n <!-- Divider -->\n @if (item.type === 'divider') {\n <cmat-vertical-navigation-divider-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-divider-item>\n }\n <!-- Group -->\n @if (item.type === 'group') {\n <cmat-vertical-navigation-group-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-group-item>\n }\n <!-- Spacer -->\n @if (item.type === 'spacer') {\n <cmat-vertical-navigation-spacer-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-spacer-item>\n }\n }\n }\n </div>\n}", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CmatVerticalNavigationBasicItemComponent, selector: "cmat-vertical-navigation-basic-item", inputs: ["item", "name"] }, { kind: "component", type: CmatVerticalNavigationCollapsableItemComponent, selector: "cmat-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name"] }, { kind: "component", type: CmatVerticalNavigationDividerItemComponent, selector: "cmat-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: CmatVerticalNavigationGroupItemComponent, selector: "cmat-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name"] }, { kind: "component", type: CmatVerticalNavigationSpacerItemComponent, selector: "cmat-vertical-navigation-spacer-item", inputs: ["item", "name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: CmatVerticalNavigationAsideItemComponent, isStandalone: true, selector: "cmat-vertical-navigation-aside-item", inputs: { activeItemId: "activeItemId", autoCollapse: "autoCollapse", item: "item", name: "name", skipChildren: "skipChildren", editState: "editState" }, outputs: { editSelectedItemChanged: "editSelectedItemChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cmat-vertical-navigation-item-wrapper\" [class.cmat-vertical-navigation-item-has-subtitle]=\"!!item.subTitle\"\n [ngClass]=\"item.classes?.wrapper\" role=\"presentation\" (click)=\"selectItem(item);\">\n\n <div class=\"cmat-vertical-navigation-item\" [ngClass]=\"{'cmat-vertical-navigation-item-active': active,\n 'cmat-vertical-navigation-item-disabled': item.disabled,\n 'cmat-vertical-navigation-item-active-forced': item.active}\" [matTooltip]=\"item.tooltip || ''\">\n\n <!-- Icon -->\n @if (item.icon) {\n <mat-icon class=\"cmat-vertical-navigation-item-icon\" [ngClass]=\"item.classes?.icon\" [svgIcon]=\"item.icon\">\n </mat-icon>\n }\n\n <!-- Title & Subtitle -->\n <div class=\"cmat-vertical-navigation-item-title-wrapper\">\n <div class=\"cmat-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{item.title}}\n </span>\n </div>\n @if (item.subTitle) {\n <div class=\"cmat-vertical-navigation-item-subtitle\">\n <span [ngClass]=\"item.classes?.subtitle\">\n {{item.subTitle}}\n </span>\n </div>\n }\n </div>\n\n <!-- Badge -->\n @if (item.badge) {\n <div class=\"cmat-vertical-navigation-item-badge\">\n <div class=\"cmat-vertical-navigation-item-badge-content\" [ngClass]=\"item.badge.classes\">\n {{item.badge.title}}\n </div>\n </div>\n }\n\n </div>\n\n</div>\n\n@if (!skipChildren) {\n <div class=\"cmat-vertical-navigation-item-children\">\n @for (item of item.children; track trackByFn($index, item)) {\n <!-- Skip the hidden items -->\n @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\n <!-- Basic -->\n @if (item.type === 'basic') {\n <cmat-vertical-navigation-basic-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-basic-item>\n }\n <!-- Collapsable -->\n @if (item.type === 'collapsable') {\n <cmat-vertical-navigation-collapsable-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\"\n [autoCollapse]=\"autoCollapse\"></cmat-vertical-navigation-collapsable-item>\n }\n <!-- Divider -->\n @if (item.type === 'divider') {\n <cmat-vertical-navigation-divider-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-divider-item>\n }\n <!-- Group -->\n @if (item.type === 'group') {\n <cmat-vertical-navigation-group-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-group-item>\n }\n <!-- Spacer -->\n @if (item.type === 'spacer') {\n <cmat-vertical-navigation-spacer-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-spacer-item>\n }\n }\n }\n </div>\n}", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: CmatVerticalNavigationBasicItemComponent, selector: "cmat-vertical-navigation-basic-item", inputs: ["item", "name", "editState"], outputs: ["editSelectedItemChanged"] }, { kind: "component", type: CmatVerticalNavigationCollapsableItemComponent, selector: "cmat-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name", "editState"], outputs: ["editSelectedItemChanged"] }, { kind: "component", type: CmatVerticalNavigationDividerItemComponent, selector: "cmat-vertical-navigation-divider-item", inputs: ["item", "name", "editState"], outputs: ["editSelectedItemChanged"] }, { kind: "component", type: CmatVerticalNavigationGroupItemComponent, selector: "cmat-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name", "editState"], outputs: ["editSelectedItemChanged"] }, { kind: "component", type: CmatVerticalNavigationSpacerItemComponent, selector: "cmat-vertical-navigation-spacer-item", inputs: ["item", "name", "editState"], outputs: ["editSelectedItemChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
136
141
  }
137
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CmatVerticalNavigationAsideItemComponent, decorators: [{
138
143
  type: Component,
139
144
  args: [{ selector: 'cmat-vertical-navigation-aside-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgClass, MatTooltipModule, MatIconModule, CmatVerticalNavigationBasicItemComponent,
140
145
  CmatVerticalNavigationCollapsableItemComponent, CmatVerticalNavigationDividerItemComponent,
141
- CmatVerticalNavigationGroupItemComponent, CmatVerticalNavigationSpacerItemComponent], template: "<div class=\"cmat-vertical-navigation-item-wrapper\" [class.cmat-vertical-navigation-item-has-subtitle]=\"!!item.subTitle\"\n [ngClass]=\"item.classes?.wrapper\">\n\n <div class=\"cmat-vertical-navigation-item\" [ngClass]=\"{'cmat-vertical-navigation-item-active': active,\r\n 'cmat-vertical-navigation-item-disabled': item.disabled,\r\n 'cmat-vertical-navigation-item-active-forced': item.active}\" [matTooltip]=\"item.tooltip || ''\">\r\n\n <!-- Icon -->\n @if (item.icon) {\n <mat-icon class=\"cmat-vertical-navigation-item-icon\" [ngClass]=\"item.classes?.icon\" [svgIcon]=\"item.icon\">\n </mat-icon>\n }\n\n <!-- Title & Subtitle -->\n <div class=\"cmat-vertical-navigation-item-title-wrapper\">\n <div class=\"cmat-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{item.title}}\n </span>\n </div>\n @if (item.subTitle) {\n <div class=\"cmat-vertical-navigation-item-subtitle\">\n <span [ngClass]=\"item.classes?.subtitle\">\n {{item.subTitle}}\n </span>\n </div>\n }\n </div>\n\n <!-- Badge -->\n @if (item.badge) {\n <div class=\"cmat-vertical-navigation-item-badge\">\n <div class=\"cmat-vertical-navigation-item-badge-content\" [ngClass]=\"item.badge.classes\">\n {{item.badge.title}}\n </div>\n </div>\n }\n\n </div>\n\n</div>\n\n@if (!skipChildren) {\n <div class=\"cmat-vertical-navigation-item-children\">\n @for (item of item.children; track trackByFn($index, item)) {\n <!-- Skip the hidden items -->\n @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\n <!-- Basic -->\n @if (item.type === 'basic') {\n <cmat-vertical-navigation-basic-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-basic-item>\n }\n <!-- Collapsable -->\n @if (item.type === 'collapsable') {\n <cmat-vertical-navigation-collapsable-item [item]=\"item\" [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"></cmat-vertical-navigation-collapsable-item>\n }\n <!-- Divider -->\n @if (item.type === 'divider') {\n <cmat-vertical-navigation-divider-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-divider-item>\n }\n <!-- Group -->\n @if (item.type === 'group') {\n <cmat-vertical-navigation-group-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-group-item>\n }\n <!-- Spacer -->\n @if (item.type === 'spacer') {\n <cmat-vertical-navigation-spacer-item [item]=\"item\" [name]=\"name\">\n </cmat-vertical-navigation-spacer-item>\n }\n }\n }\n </div>\n}" }]
146
+ CmatVerticalNavigationGroupItemComponent, CmatVerticalNavigationSpacerItemComponent], template: "<div class=\"cmat-vertical-navigation-item-wrapper\" [class.cmat-vertical-navigation-item-has-subtitle]=\"!!item.subTitle\"\n [ngClass]=\"item.classes?.wrapper\" role=\"presentation\" (click)=\"selectItem(item);\">\n\n <div class=\"cmat-vertical-navigation-item\" [ngClass]=\"{'cmat-vertical-navigation-item-active': active,\n 'cmat-vertical-navigation-item-disabled': item.disabled,\n 'cmat-vertical-navigation-item-active-forced': item.active}\" [matTooltip]=\"item.tooltip || ''\">\n\n <!-- Icon -->\n @if (item.icon) {\n <mat-icon class=\"cmat-vertical-navigation-item-icon\" [ngClass]=\"item.classes?.icon\" [svgIcon]=\"item.icon\">\n </mat-icon>\n }\n\n <!-- Title & Subtitle -->\n <div class=\"cmat-vertical-navigation-item-title-wrapper\">\n <div class=\"cmat-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{item.title}}\n </span>\n </div>\n @if (item.subTitle) {\n <div class=\"cmat-vertical-navigation-item-subtitle\">\n <span [ngClass]=\"item.classes?.subtitle\">\n {{item.subTitle}}\n </span>\n </div>\n }\n </div>\n\n <!-- Badge -->\n @if (item.badge) {\n <div class=\"cmat-vertical-navigation-item-badge\">\n <div class=\"cmat-vertical-navigation-item-badge-content\" [ngClass]=\"item.badge.classes\">\n {{item.badge.title}}\n </div>\n </div>\n }\n\n </div>\n\n</div>\n\n@if (!skipChildren) {\n <div class=\"cmat-vertical-navigation-item-children\">\n @for (item of item.children; track trackByFn($index, item)) {\n <!-- Skip the hidden items -->\n @if ((item.hidden && !item.hidden(item)) || !item.hidden) {\n <!-- Basic -->\n @if (item.type === 'basic') {\n <cmat-vertical-navigation-basic-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-basic-item>\n }\n <!-- Collapsable -->\n @if (item.type === 'collapsable') {\n <cmat-vertical-navigation-collapsable-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\"\n [autoCollapse]=\"autoCollapse\"></cmat-vertical-navigation-collapsable-item>\n }\n <!-- Divider -->\n @if (item.type === 'divider') {\n <cmat-vertical-navigation-divider-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-divider-item>\n }\n <!-- Group -->\n @if (item.type === 'group') {\n <cmat-vertical-navigation-group-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-group-item>\n }\n <!-- Spacer -->\n @if (item.type === 'spacer') {\n <cmat-vertical-navigation-spacer-item [item]=\"item\" [name]=\"name\" [editState]=\"editState\" (editSelectedItemChanged)=\"selectItem($event)\">\n </cmat-vertical-navigation-spacer-item>\n }\n }\n }\n </div>\n}" }]
142
147
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i2.CmatNavigationService }], propDecorators: { activeItemId: [{
143
148
  type: Input
144
149
  }], autoCollapse: [{
@@ -149,5 +154,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
149
154
  type: Input
150
155
  }], skipChildren: [{
151
156
  type: Input
157
+ }], editState: [{
158
+ type: Input
159
+ }], editSelectedItemChanged: [{
160
+ type: Output
152
161
  }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvY29tcG9uZW50cy9hc2lkZS9hc2lkZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbmF2aWdhdGlvbi92ZXJ0aWNhbC9jb21wb25lbnRzL2FzaWRlL2FzaWRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUluRCxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRixPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFZMUMsTUFBTSxPQUFPLHdDQUF3QztJQWdCakQsWUFDWSxrQkFBcUMsRUFDckMsT0FBZSxFQUNmLHNCQUE2QztRQUY3Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBUHpELFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFaEIsb0JBQWUsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQU83RCxDQUFDO0lBRUQsd0dBQXdHO0lBQ3hHLG9CQUFvQjtJQUNwQix3R0FBd0c7SUFFeEc7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixpQkFBaUI7UUFDakIsSUFBSSxjQUFjLElBQUksT0FBTyxFQUFFO1lBQzNCLGlCQUFpQjtZQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ0osaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyQywrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2FBQ2QsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBMEIsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDekUsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDbEM7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7WUFFaEMsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFUCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVGLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FDbEMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBRWIsaUJBQWlCO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDUCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCx3R0FBd0c7SUFDeEcsbUJBQW1CO0lBQ25CLHdHQUF3RztJQUV4Rzs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBUztRQUM5QixPQUFPLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCx3R0FBd0c7SUFDeEcsb0JBQW9CO0lBQ3BCLHdHQUF3RztJQUV4Rzs7Ozs7OztPQU9HO0lBQ0ssZUFBZSxDQUFDLElBQXdCLEVBQUUsVUFBa0I7UUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUUvQixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUMxQixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUU7b0JBQ3pDLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2FBQ0o7WUFFRCxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDeEIsU0FBUzthQUNaO1lBRUQsOENBQThDO1lBQzlDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNoRCxLQUFLLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtnQkFDckQsV0FBVyxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTO2FBQzVHLENBQUMsRUFBRTtnQkFDQSxPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWEsQ0FBQyxVQUFrQjtRQUNwQyxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBRWpELDhDQUE4QztRQUM5QywyQkFBMkI7UUFDM0IsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDdEI7UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLENBQUM7OEdBM0pRLHdDQUF3QztrR0FBeEMsd0NBQXdDLHNQQzNCckQsNnhGQTJFQyw0Q0RwRGEsT0FBTyxtRkFBRSxnQkFBZ0IsNFRBQUUsYUFBYSxvTEFBRSx3Q0FBd0MsMEdBQ3ZGLDhDQUE4QyxnSUFBRSwwQ0FBMEMsNEdBQzFGLHdDQUF3QywwSEFBRSx5Q0FBeUM7OzJGQUUvRSx3Q0FBd0M7a0JBVnBELFNBQVM7K0JBQ0kscUNBQXFDLG1CQUc5Qix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsd0NBQXdDO3dCQUN2Riw4Q0FBOEMsRUFBRSwwQ0FBMEM7d0JBQzFGLHdDQUF3QyxFQUFFLHlDQUF5QyxDQUFDOytJQVFoRixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENtYXRWZXJ0aWNhbE5hdmlnYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi92ZXJ0aWNhbC92ZXJ0aWNhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbWF0TmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDbWF0TmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi8uLi9uYXZpZ2F0aW9uLnR5cGVzJztcclxuaW1wb3J0IHsgQ21hdFZlcnRpY2FsTmF2aWdhdGlvblNwYWNlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9zcGFjZXIvc3BhY2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENtYXRWZXJ0aWNhbE5hdmlnYXRpb25Hcm91cEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9ncm91cC9ncm91cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbWF0VmVydGljYWxOYXZpZ2F0aW9uRGl2aWRlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkNvbGxhcHNhYmxlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbGxhcHNhYmxlL2NvbGxhcHNhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENtYXRWZXJ0aWNhbE5hdmlnYXRpb25CYXNpY0l0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9iYXNpYy9iYXNpYy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FzaWRlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlczogW10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbTmdDbGFzcywgTWF0VG9vbHRpcE1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkJhc2ljSXRlbUNvbXBvbmVudCxcclxuICAgICAgICAgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkNvbGxhcHNhYmxlSXRlbUNvbXBvbmVudCwgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkRpdmlkZXJJdGVtQ29tcG9uZW50LCBcclxuICAgICAgICAgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkdyb3VwSXRlbUNvbXBvbmVudCwgQ21hdFZlcnRpY2FsTmF2aWdhdGlvblNwYWNlckl0ZW1Db21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbWF0VmVydGljYWxOYXZpZ2F0aW9uQXNpZGVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hdXRvQ29sbGFwc2U6IEJvb2xlYW5JbnB1dDtcclxuICAgIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9za2lwQ2hpbGRyZW46IEJvb2xlYW5JbnB1dDtcclxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXHJcblxyXG4gICAgQElucHV0KCkgYWN0aXZlSXRlbUlkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgQElucHV0KCkgYXV0b0NvbGxhcHNlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgaXRlbTogQ21hdE5hdmlnYXRpb25JdGVtO1xyXG4gICAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2tpcENoaWxkcmVuOiBib29sZWFuOyAgIFxyXG5cclxuICAgIGFjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfY21hdFZlcnRpY2FsTmF2aWdhdGlvbkNvbXBvbmVudDogQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkNvbXBvbmVudDtcclxuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfY21hdE5hdmlnYXRpb25TZXJ2aWNlOiBDbWF0TmF2aWdhdGlvblNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBAIExpZmVjeWNsZSBob29rc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9uIGNoYW5nZXNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgLy8gQWN0aXZlIGl0ZW0gaWRcclxuICAgICAgICBpZiAoJ2FjdGl2ZUl0ZW1JZCcgaW4gY2hhbmdlcykge1xyXG4gICAgICAgICAgICAvLyBNYXJrIGlmIGFjdGl2ZVxyXG4gICAgICAgICAgICB0aGlzLl9tYXJrSWZBY3RpdmUodGhpcy5fcm91dGVyLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT24gaW5pdFxyXG4gICAgICovXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICAvLyBNYXJrIGlmIGFjdGl2ZVxyXG4gICAgICAgIHRoaXMuX21hcmtJZkFjdGl2ZSh0aGlzLl9yb3V0ZXIudXJsKTtcclxuXHJcbiAgICAgICAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIE5hdmlnYXRpb25FbmQgZXZlbnRcclxuICAgICAgICB0aGlzLl9yb3V0ZXIuZXZlbnRzXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIE5hdmlnYXRpb25FbmQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE1hcmsgaWYgYWN0aXZlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXJrSWZBY3RpdmUoZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gR2V0IHRoZSBwYXJlbnQgbmF2aWdhdGlvbiBjb21wb25lbnRcclxuICAgICAgICB0aGlzLl9jbWF0VmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50ID0gdGhpcy5fY21hdE5hdmlnYXRpb25TZXJ2aWNlLmdldENvbXBvbmVudCh0aGlzLm5hbWUpO1xyXG5cclxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gb25SZWZyZXNoZWQgb24gdGhlIG5hdmlnYXRpb24gY29tcG9uZW50XHJcbiAgICAgICAgdGhpcy5fY21hdFZlcnRpY2FsTmF2aWdhdGlvbkNvbXBvbmVudC5vblJlZnJlc2hlZC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy8gTWFyayBmb3IgY2hlY2tcclxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPbiBkZXN0cm95XHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KHZvaWQgMCk7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gQCBQdWJsaWMgbWV0aG9kc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNrIGJ5IGZ1bmN0aW9uIGZvciBuZ0ZvciBsb29wc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbmRleFxyXG4gICAgICogQHBhcmFtIGl0ZW1cclxuICAgICAqL1xyXG4gICAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQgfHwgaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEAgUHJpdmF0ZSBtZXRob2RzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGl0ZW0gaGFzIHRoZSBnaXZlbiB1cmxcclxuICAgICAqIGluIG9uZSBvZiBpdHMgY2hpbGRyZW5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaXRlbVxyXG4gICAgICogQHBhcmFtIGN1cnJlbnRVcmxcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2hhc0FjdGl2ZUNoaWxkKGl0ZW06IENtYXROYXZpZ2F0aW9uSXRlbSwgY3VycmVudFVybDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faGFzQWN0aXZlQ2hpbGQoY2hpbGQsIGN1cnJlbnRVcmwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNraXAgaXRlbXMgb3RoZXIgdGhhbiAnYmFzaWMnXHJcbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlICE9PSAnYmFzaWMnKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkIGhhcyBhIGxpbmsgYW5kIGlzIGFjdGl2ZVxyXG4gICAgICAgICAgICBpZiAoY2hpbGQubGluayAmJiB0aGlzLl9yb3V0ZXIuaXNBY3RpdmUoY2hpbGQubGluaywge1xyXG4gICAgICAgICAgICAgICAgcGF0aHM6IGNoaWxkLmV4YWN0TWF0Y2ggfHwgZmFsc2UgPyAnZXhhY3QnIDogJ3N1YnNldCcsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogY2hpbGQuZXhhY3RNYXRjaCB8fCBmYWxzZSA/ICdleGFjdCcgOiAnc3Vic2V0JywgZnJhZ21lbnQ6ICdpZ25vcmVkJywgbWF0cml4UGFyYW1zOiAnaWdub3JlZCdcclxuICAgICAgICAgICAgfSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNpZGUgYW5kIG1hcmsgaWYgdGhlIGl0ZW0gaXMgYWN0aXZlXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbWFya0lmQWN0aXZlKGN1cnJlbnRVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBhY3RpdmVJdGVtSWQgaXMgZXF1YWxzIHRvIHRoaXMgaXRlbSBpZFxyXG4gICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5hY3RpdmVJdGVtSWQgPT09IHRoaXMuaXRlbS5pZDtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGFzaWRlIGhhcyBhIGNoaWxkcmVuIHRoYXQgaXMgYWN0aXZlLFxyXG4gICAgICAgIC8vIGFsd2F5cyBtYXJrIGl0IGFzIGFjdGl2ZVxyXG4gICAgICAgIGlmICh0aGlzLl9oYXNBY3RpdmVDaGlsZCh0aGlzLml0ZW0sIGN1cnJlbnRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXHJcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLXdyYXBwZXJcIiBbY2xhc3MuY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0taGFzLXN1YnRpdGxlXT1cIiEhaXRlbS5zdWJUaXRsZVwiXG4gIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlcz8ud3JhcHBlclwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtXCIgW25nQ2xhc3NdPVwieydjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1hY3RpdmUnOiBhY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICAnY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tYWN0aXZlLWZvcmNlZCc6IGl0ZW0uYWN0aXZlfVwiIFttYXRUb29sdGlwXT1cIml0ZW0udG9vbHRpcCB8fCAnJ1wiPlxyXG5cbiAgICA8IS0tIEljb24gLS0+XG4gICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWljb25cIiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXM/Lmljb25cIiBbc3ZnSWNvbl09XCJpdGVtLmljb25cIj5cbiAgICAgIDwvbWF0LWljb24+XG4gICAgfVxuXG4gICAgPCEtLSBUaXRsZSAmIFN1YnRpdGxlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS10aXRsZS13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tdGl0bGVcIj5cbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzPy50aXRsZVwiPlxuICAgICAgICAgIHt7aXRlbS50aXRsZX19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChpdGVtLnN1YlRpdGxlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1zdWJ0aXRsZVwiPlxuICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlcz8uc3VidGl0bGVcIj5cbiAgICAgICAgICAgIHt7aXRlbS5zdWJUaXRsZX19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQmFkZ2UgLS0+XG4gICAgQGlmIChpdGVtLmJhZGdlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tYmFkZ2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWJhZGdlLWNvbnRlbnRcIiBbbmdDbGFzc109XCJpdGVtLmJhZGdlLmNsYXNzZXNcIj5cbiAgICAgICAgICB7e2l0ZW0uYmFkZ2UudGl0bGV9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICA8L2Rpdj5cblxuPC9kaXY+XG5cbkBpZiAoIXNraXBDaGlsZHJlbikge1xuICA8ZGl2IGNsYXNzPVwiY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tY2hpbGRyZW5cIj5cbiAgICBAZm9yIChpdGVtIG9mIGl0ZW0uY2hpbGRyZW47IHRyYWNrIHRyYWNrQnlGbigkaW5kZXgsIGl0ZW0pKSB7XG4gICAgICA8IS0tIFNraXAgdGhlIGhpZGRlbiBpdGVtcyAtLT5cbiAgICAgIEBpZiAoKGl0ZW0uaGlkZGVuICYmICFpdGVtLmhpZGRlbihpdGVtKSkgfHwgIWl0ZW0uaGlkZGVuKSB7XG4gICAgICAgIDwhLS0gQmFzaWMgLS0+XG4gICAgICAgIEBpZiAoaXRlbS50eXBlID09PSAnYmFzaWMnKSB7XG4gICAgICAgICAgPGNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1iYXNpYy1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbbmFtZV09XCJuYW1lXCI+XG4gICAgICAgICAgPC9jbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbT5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIENvbGxhcHNhYmxlIC0tPlxuICAgICAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2NvbGxhcHNhYmxlJykge1xuICAgICAgICAgIDxjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbSBbaXRlbV09XCJpdGVtXCIgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIj48L2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1jb2xsYXBzYWJsZS1pdGVtPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gRGl2aWRlciAtLT5cbiAgICAgICAgQGlmIChpdGVtLnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIDxjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbbmFtZV09XCJuYW1lXCI+XG4gICAgICAgICAgPC9jbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gR3JvdXAgLS0+XG4gICAgICAgIEBpZiAoaXRlbS50eXBlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgPGNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1ncm91cC1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbbmFtZV09XCJuYW1lXCI+XG4gICAgICAgICAgPC9jbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbT5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIFNwYWNlciAtLT5cbiAgICAgICAgQGlmIChpdGVtLnR5cGUgPT09ICdzcGFjZXInKSB7XG4gICAgICAgICAgPGNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbSBbaXRlbV09XCJpdGVtXCIgW25hbWVdPVwibmFtZVwiPlxuICAgICAgICAgIDwvY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXNwYWNlci1pdGVtPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbn0iXX0=
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY21hdC9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvY29tcG9uZW50cy9hc2lkZS9hc2lkZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbWF0L2NvbXBvbmVudHMvbmF2aWdhdGlvbi92ZXJ0aWNhbC9jb21wb25lbnRzL2FzaWRlL2FzaWRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEssT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUluRCxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RixPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRixPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RyxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFZMUMsTUFB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Z0JBQWdCLDRUQUFFLGFBQWEsb0xBQUUsd0NBQXdDLDZKQUN2Riw4Q0FBOEMsbUxBQUUsMENBQTBDLCtKQUMxRix3Q0FBd0MsNktBQUUseUNBQXlDOzsyRkFFL0Usd0NBQXdDO2tCQVZwRCxTQUFTOytCQUNJLHFDQUFxQyxtQkFHOUIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLHdDQUF3Qzt3QkFDdkYsOENBQThDLEVBQUUsMENBQTBDO3dCQUMxRix3Q0FBd0MsRUFBRSx5Q0FBeUMsQ0FBQzsrSUFRaEYsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNhLHVCQUF1QjtzQkFBekMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3ZlcnRpY2FsL3ZlcnRpY2FsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENtYXROYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENtYXROYXZpZ2F0aW9uSXRlbSB9IGZyb20gJy4uLy4uLy4uL25hdmlnYXRpb24udHlwZXMnO1xyXG5pbXBvcnQgeyBDbWF0VmVydGljYWxOYXZpZ2F0aW9uU3BhY2VySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NwYWNlci9zcGFjZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkdyb3VwSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2dyb3VwL2dyb3VwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENtYXRWZXJ0aWNhbE5hdmlnYXRpb25EaXZpZGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2RpdmlkZXIvZGl2aWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbWF0VmVydGljYWxOYXZpZ2F0aW9uQ29sbGFwc2FibGVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sbGFwc2FibGUvY29sbGFwc2FibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ21hdFZlcnRpY2FsTmF2aWdhdGlvbkJhc2ljSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2ljL2Jhc2ljLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXNpZGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0NsYXNzLCBNYXRUb29sdGlwTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBDbWF0VmVydGljYWxOYXZpZ2F0aW9uQmFzaWNJdGVtQ29tcG9uZW50LFxyXG4gICAgICAgICBDbWF0VmVydGljYWxOYXZpZ2F0aW9uQ29sbGFwc2FibGVJdGVtQ29tcG9uZW50LCBDbWF0VmVydGljYWxOYXZpZ2F0aW9uRGl2aWRlckl0ZW1Db21wb25lbnQsIFxyXG4gICAgICAgICBDbWF0VmVydGljYWxOYXZpZ2F0aW9uR3JvdXBJdGVtQ29tcG9uZW50LCBDbWF0VmVydGljYWxOYXZpZ2F0aW9uU3BhY2VySXRlbUNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENtYXRWZXJ0aWNhbE5hdmlnYXRpb25Bc2lkZUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xyXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2F1dG9Db2xsYXBzZTogQm9vbGVhbklucHV0O1xyXG4gICAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NraXBDaGlsZHJlbjogQm9vbGVhbklucHV0O1xyXG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cclxuXHJcbiAgICBASW5wdXQoKSBhY3RpdmVJdGVtSWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBASW5wdXQoKSBhdXRvQ29sbGFwc2U6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBpdGVtOiBDbWF0TmF2aWdhdGlvbkl0ZW07XHJcbiAgICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBza2lwQ2hpbGRyZW46IGJvb2xlYW47ICAgXHJcbiAgICBASW5wdXQoKSBlZGl0U3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSByZWFkb25seSBlZGl0U2VsZWN0ZWRJdGVtQ2hhbmdlZDogRXZlbnRFbWl0dGVyPENtYXROYXZpZ2F0aW9uSXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPENtYXROYXZpZ2F0aW9uSXRlbT4oKTtcclxuICAgIFxyXG4gICAgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9jbWF0VmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50OiBDbWF0VmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50O1xyXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIF9jbWF0TmF2aWdhdGlvblNlcnZpY2U6IENtYXROYXZpZ2F0aW9uU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEAgTGlmZWN5Y2xlIGhvb2tzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT24gY2hhbmdlc1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjaGFuZ2VzXHJcbiAgICAgKi9cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBBY3RpdmUgaXRlbSBpZFxyXG4gICAgICAgIGlmICgnYWN0aXZlSXRlbUlkJyBpbiBjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgIC8vIE1hcmsgaWYgYWN0aXZlXHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtJZkFjdGl2ZSh0aGlzLl9yb3V0ZXIudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPbiBpbml0XHJcbiAgICAgKi9cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIE1hcmsgaWYgYWN0aXZlXHJcbiAgICAgICAgdGhpcy5fbWFya0lmQWN0aXZlKHRoaXMuX3JvdXRlci51cmwpO1xyXG5cclxuICAgICAgICAvLyBBdHRhY2ggYSBsaXN0ZW5lciB0byB0aGUgTmF2aWdhdGlvbkVuZCBldmVudFxyXG4gICAgICAgIHRoaXMuX3JvdXRlci5ldmVudHNcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgTmF2aWdhdGlvbkVuZCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTWFyayBpZiBhY3RpdmVcclxuICAgICAgICAgICAgICAgIHRoaXMuX21hcmtJZkFjdGl2ZShldmVudC51cmxBZnRlclJlZGlyZWN0cyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBHZXQgdGhlIHBhcmVudCBuYXZpZ2F0aW9uIGNvbXBvbmVudFxyXG4gICAgICAgIHRoaXMuX2NtYXRWZXJ0aWNhbE5hdmlnYXRpb25Db21wb25lbnQgPSB0aGlzLl9jbWF0TmF2aWdhdGlvblNlcnZpY2UuZ2V0Q29tcG9uZW50KHRoaXMubmFtZSk7XHJcblxyXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBvblJlZnJlc2hlZCBvbiB0aGUgbmF2aWdhdGlvbiBjb21wb25lbnRcclxuICAgICAgICB0aGlzLl9jbWF0VmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50Lm9uUmVmcmVzaGVkLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcclxuICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBNYXJrIGZvciBjaGVja1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9uIGRlc3Ryb3lcclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQodm9pZCAwKTtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBAIFB1YmxpYyBtZXRob2RzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVHJhY2sgYnkgZnVuY3Rpb24gZm9yIG5nRm9yIGxvb3BzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGluZGV4XHJcbiAgICAgKiBAcGFyYW0gaXRlbVxyXG4gICAgICovXHJcbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogYW55IHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pZCB8fCBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RJdGVtKGl0ZW06IENtYXROYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZWRpdFNlbGVjdGVkSXRlbUNoYW5nZWQubmV4dChpdGVtKTtcclxuICAgIH1cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBAIFByaXZhdGUgbWV0aG9kc1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiBpdGVtIGhhcyB0aGUgZ2l2ZW4gdXJsXHJcbiAgICAgKiBpbiBvbmUgb2YgaXRzIGNoaWxkcmVuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGl0ZW1cclxuICAgICAqIEBwYXJhbSBjdXJyZW50VXJsXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9oYXNBY3RpdmVDaGlsZChpdGVtOiBDbWF0TmF2aWdhdGlvbkl0ZW0sIGN1cnJlbnRVcmw6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbjtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2hhc0FjdGl2ZUNoaWxkKGNoaWxkLCBjdXJyZW50VXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBTa2lwIGl0ZW1zIG90aGVyIHRoYW4gJ2Jhc2ljJ1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSAhPT0gJ2Jhc2ljJykge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBjaGlsZCBoYXMgYSBsaW5rIGFuZCBpcyBhY3RpdmVcclxuICAgICAgICAgICAgaWYgKGNoaWxkLmxpbmsgJiYgdGhpcy5fcm91dGVyLmlzQWN0aXZlKGNoaWxkLmxpbmssIHtcclxuICAgICAgICAgICAgICAgIHBhdGhzOiBjaGlsZC5leGFjdE1hdGNoIHx8IGZhbHNlID8gJ2V4YWN0JyA6ICdzdWJzZXQnLFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IGNoaWxkLmV4YWN0TWF0Y2ggfHwgZmFsc2UgPyAnZXhhY3QnIDogJ3N1YnNldCcsIGZyYWdtZW50OiAnaWdub3JlZCcsIG1hdHJpeFBhcmFtczogJ2lnbm9yZWQnXHJcbiAgICAgICAgICAgIH0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVjaWRlIGFuZCBtYXJrIGlmIHRoZSBpdGVtIGlzIGFjdGl2ZVxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX21hcmtJZkFjdGl2ZShjdXJyZW50VXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgYWN0aXZlSXRlbUlkIGlzIGVxdWFscyB0byB0aGlzIGl0ZW0gaWRcclxuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRoaXMuYWN0aXZlSXRlbUlkID09PSB0aGlzLml0ZW0uaWQ7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBhc2lkZSBoYXMgYSBjaGlsZHJlbiB0aGF0IGlzIGFjdGl2ZSxcclxuICAgICAgICAvLyBhbHdheXMgbWFyayBpdCBhcyBhY3RpdmVcclxuICAgICAgICBpZiAodGhpcy5faGFzQWN0aXZlQ2hpbGQodGhpcy5pdGVtLCBjdXJyZW50VXJsKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNYXJrIGZvciBjaGVja1xyXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS13cmFwcGVyXCIgW2NsYXNzLmNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWhhcy1zdWJ0aXRsZV09XCIhIWl0ZW0uc3ViVGl0bGVcIlxuICBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXM/LndyYXBwZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbSk7XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW1cIiBbbmdDbGFzc109XCJ7J2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWFjdGl2ZSc6IGFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgJ2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWFjdGl2ZS1mb3JjZWQnOiBpdGVtLmFjdGl2ZX1cIiBbbWF0VG9vbHRpcF09XCJpdGVtLnRvb2x0aXAgfHwgJydcIj5cblxuICAgIDwhLS0gSWNvbiAtLT5cbiAgICBAaWYgKGl0ZW0uaWNvbikge1xuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0taWNvblwiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlcz8uaWNvblwiIFtzdmdJY29uXT1cIml0ZW0uaWNvblwiPlxuICAgICAgPC9tYXQtaWNvbj5cbiAgICB9XG5cbiAgICA8IS0tIFRpdGxlICYgU3VidGl0bGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLXRpdGxlLXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS10aXRsZVwiPlxuICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXM/LnRpdGxlXCI+XG4gICAgICAgICAge3tpdGVtLnRpdGxlfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKGl0ZW0uc3ViVGl0bGUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLXN1YnRpdGxlXCI+XG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzPy5zdWJ0aXRsZVwiPlxuICAgICAgICAgICAge3tpdGVtLnN1YlRpdGxlfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCYWRnZSAtLT5cbiAgICBAaWYgKGl0ZW0uYmFkZ2UpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1iYWRnZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tYmFkZ2UtY29udGVudFwiIFtuZ0NsYXNzXT1cIml0ZW0uYmFkZ2UuY2xhc3Nlc1wiPlxuICAgICAgICAgIHt7aXRlbS5iYWRnZS50aXRsZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gIDwvZGl2PlxuXG48L2Rpdj5cblxuQGlmICghc2tpcENoaWxkcmVuKSB7XG4gIDxkaXYgY2xhc3M9XCJjbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1jaGlsZHJlblwiPlxuICAgIEBmb3IgKGl0ZW0gb2YgaXRlbS5jaGlsZHJlbjsgdHJhY2sgdHJhY2tCeUZuKCRpbmRleCwgaXRlbSkpIHtcbiAgICAgIDwhLS0gU2tpcCB0aGUgaGlkZGVuIGl0ZW1zIC0tPlxuICAgICAgQGlmICgoaXRlbS5oaWRkZW4gJiYgIWl0ZW0uaGlkZGVuKGl0ZW0pKSB8fCAhaXRlbS5oaWRkZW4pIHtcbiAgICAgICAgPCEtLSBCYXNpYyAtLT5cbiAgICAgICAgQGlmIChpdGVtLnR5cGUgPT09ICdiYXNpYycpIHtcbiAgICAgICAgICA8Y21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtuYW1lXT1cIm5hbWVcIiBbZWRpdFN0YXRlXT1cImVkaXRTdGF0ZVwiIChlZGl0U2VsZWN0ZWRJdGVtQ2hhbmdlZCk9XCJzZWxlY3RJdGVtKCRldmVudClcIj5cbiAgICAgICAgICA8L2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1iYXNpYy1pdGVtPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gQ29sbGFwc2FibGUgLS0+XG4gICAgICAgIEBpZiAoaXRlbS50eXBlID09PSAnY29sbGFwc2FibGUnKSB7XG4gICAgICAgICAgPGNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1jb2xsYXBzYWJsZS1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbbmFtZV09XCJuYW1lXCIgW2VkaXRTdGF0ZV09XCJlZGl0U3RhdGVcIiAoZWRpdFNlbGVjdGVkSXRlbUNoYW5nZWQpPVwic2VsZWN0SXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiPjwvY21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbGxhcHNhYmxlLWl0ZW0+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ2RpdmlkZXInKSB7XG4gICAgICAgICAgPGNtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtuYW1lXT1cIm5hbWVcIiBbZWRpdFN0YXRlXT1cImVkaXRTdGF0ZVwiIChlZGl0U2VsZWN0ZWRJdGVtQ2hhbmdlZCk9XCJzZWxlY3RJdGVtKCRldmVudClcIj5cbiAgICAgICAgICA8L2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW0+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSBHcm91cCAtLT5cbiAgICAgICAgQGlmIChpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICAgICAgICA8Y21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtuYW1lXT1cIm5hbWVcIiBbZWRpdFN0YXRlXT1cImVkaXRTdGF0ZVwiIChlZGl0U2VsZWN0ZWRJdGVtQ2hhbmdlZCk9XCJzZWxlY3RJdGVtKCRldmVudClcIj5cbiAgICAgICAgICA8L2NtYXQtdmVydGljYWwtbmF2aWdhdGlvbi1ncm91cC1pdGVtPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gU3BhY2VyIC0tPlxuICAgICAgICBAaWYgKGl0ZW0udHlwZSA9PT0gJ3NwYWNlcicpIHtcbiAgICAgICAgICA8Y21hdC12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXNwYWNlci1pdGVtIFtpdGVtXT1cIml0ZW1cIiBbbmFtZV09XCJuYW1lXCIgW2VkaXRTdGF0ZV09XCJlZGl0U3RhdGVcIiAoZWRpdFNlbGVjdGVkSXRlbUNoYW5nZWQpPVwic2VsZWN0SXRlbSgkZXZlbnQpXCI+XG4gICAgICAgICAgPC9jbWF0LXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW0+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxufSJdfQ==