@testgorilla/tgo-ui 3.10.17 → 3.10.19

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 (27) hide show
  1. package/components/button/button.model.d.ts +1 -1
  2. package/components/field/field.component.d.ts +8 -1
  3. package/components/inline-field/inline-field.component.d.ts +153 -0
  4. package/components/inline-field/inline-field.component.module.d.ts +13 -0
  5. package/components/inline-field/inline-field.model.d.ts +107 -0
  6. package/components/overflow-menu/overflow-menu.component.d.ts +9 -6
  7. package/components/overflow-menu/overflow-menu.model.d.ts +2 -1
  8. package/components/phone-input/phone-input.component.d.ts +1 -1
  9. package/components/skeleton/skeleton.component.d.ts +1 -1
  10. package/esm2022/components/button/button.component.mjs +6 -6
  11. package/esm2022/components/button/button.component.module.mjs +4 -4
  12. package/esm2022/components/button/button.model.mjs +1 -1
  13. package/esm2022/components/field/field.component.mjs +12 -3
  14. package/esm2022/components/filter-button/filter-button.component.mjs +1 -1
  15. package/esm2022/components/inline-field/inline-field.component.mjs +320 -0
  16. package/esm2022/components/inline-field/inline-field.component.module.mjs +43 -0
  17. package/esm2022/components/inline-field/inline-field.model.mjs +2 -0
  18. package/esm2022/components/multi-input/multi-input.component.mjs +1 -1
  19. package/esm2022/components/overflow-menu/overflow-menu.component.mjs +36 -22
  20. package/esm2022/components/overflow-menu/overflow-menu.model.mjs +1 -1
  21. package/esm2022/components/password-criteria/password.component.mjs +1 -1
  22. package/esm2022/components/phone-input/phone-input.component.mjs +8 -7
  23. package/esm2022/public-api.mjs +6 -1
  24. package/fesm2022/testgorilla-tgo-ui.mjs +408 -36
  25. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/public-api.d.ts +4 -0
@@ -1,5 +1,5 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output, signal, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';
2
- import { MatMenu, MatMenuTrigger } from "@angular/material/menu";
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional, Output, signal, ViewChild, ViewChildren, ViewEncapsulation, } from '@angular/core';
2
+ import { MatMenu, MatMenuTrigger } from '@angular/material/menu';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/cdk/a11y";
5
5
  import * as i2 from "@angular/common";
@@ -74,6 +74,7 @@ export class OverflowMenuComponent {
74
74
  */
75
75
  this.buttonSize = 'medium';
76
76
  this.menuConfig = DEFAULT_MENU_CONFIG;
77
+ this.isDynamicMenu = false;
77
78
  this.selectItem = new EventEmitter();
78
79
  this.menuOpened = new EventEmitter();
79
80
  this.menuClosed = new EventEmitter();
@@ -87,9 +88,16 @@ export class OverflowMenuComponent {
87
88
  }
88
89
  }
89
90
  ngOnInit() {
90
- this.createSubmenus(this.buttons, "s0", 1);
91
+ this.createSubmenus(this.buttons, 's0', 1);
91
92
  this.reindex();
92
93
  }
94
+ ngOnChanges(changes) {
95
+ if (changes['buttons'] && this.isDynamicMenu) {
96
+ this.resetSubmenus();
97
+ this.createSubmenus(this.buttons, 's0', 1);
98
+ this.reindex();
99
+ }
100
+ }
93
101
  ngAfterViewInit() {
94
102
  this.isMenuRendered.set(true);
95
103
  setTimeout(() => {
@@ -152,30 +160,34 @@ export class OverflowMenuComponent {
152
160
  button.isHovered = state;
153
161
  }
154
162
  getMenu(index) {
155
- return index >= 0 && this.matmenus ? this.matmenus.find((x, i) => i == index) : null;
163
+ return index >= 0 && this.matmenus ? (this.matmenus.find((x, i) => i === index) ?? null) : null;
156
164
  }
157
165
  reindex() {
158
166
  this.submenus.forEach((menu) => {
159
- menu.forEach((item, index) => {
160
- if (item.subMenu !== -1)
161
- item.subMenu = this.menuItems.indexOf(item.action + '');
167
+ menu.forEach((item) => {
168
+ if (item.subMenu !== -1) {
169
+ item.subMenu = this.menuItems.indexOf(`${item.action}`);
170
+ }
162
171
  });
163
172
  });
164
173
  }
174
+ resetSubmenus() {
175
+ this.submenus = [];
176
+ this.menuItems = [];
177
+ }
165
178
  createSubmenus(menu, prefix, count) {
166
179
  this.menuItems.push(prefix);
167
- this.submenus.push(menu.map((item, index) => {
168
- return ({
169
- label: item.label,
170
- icon: item.icon,
171
- isDestructive: item.isDestructive,
172
- value: item.value,
173
- disabled: item.disabled,
174
- btnTemplate: item.btnTemplate,
175
- subMenu: item.subMenu ? 0 : -1,
176
- action: item.action ? item.action : prefix + index
177
- });
178
- }));
180
+ this.submenus.push(menu.map((item, index) => ({
181
+ label: item.label,
182
+ icon: item.icon,
183
+ isDestructive: item.isDestructive,
184
+ tooltipText: item.tooltipText,
185
+ value: item.value,
186
+ disabled: item.disabled,
187
+ btnTemplate: item.btnTemplate,
188
+ subMenu: item.subMenu ? 0 : -1,
189
+ action: item.action ? item.action : prefix + index,
190
+ })));
179
191
  menu.forEach((item, index) => {
180
192
  if (item.subMenu) {
181
193
  this.createSubmenus(item.subMenu, prefix + index, count + 1);
@@ -183,11 +195,11 @@ export class OverflowMenuComponent {
183
195
  });
184
196
  }
185
197
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OverflowMenuComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }, { token: i1.FocusMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: OverflowMenuComponent, selector: "ui-overflow-menu", inputs: { buttons: "buttons", iconTrigger: "iconTrigger", menuLabel: "menuLabel", applicationTheme: "applicationTheme", ariaLabel: "ariaLabel", ariaRequired: "ariaRequired", describedby: "describedby", contentTemplateRef: "contentTemplateRef", buttonVariant: "buttonVariant", buttonSize: "buttonSize", menuConfig: "menuConfig" }, outputs: { selectItem: "selectItem", menuOpened: "menuOpened", menuClosed: "menuClosed" }, viewQueries: [{ propertyName: "buttonElement", first: true, predicate: ["buttonElement"], descendants: true }, { propertyName: "matmenus", predicate: MatMenu, descendants: true }, { propertyName: "matTrigger", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n <button\n #buttonElement\n mat-button\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n *ngIf=\"isMenuRendered()\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n disableRipple\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n\n @for (menu of submenus; track menu) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n <ng-container *ngFor=\"let button of menu; index as id\">\n <ng-container\n *ngIf=\"button.btnTemplate; else uiButton\"\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n\n <ng-template #uiButton>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.isTextEllipsed ? button.label : ''\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n role=\"menuitem\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.isDestructive ? 'red' : button.disabled ? 'dark' : 'rebrand-black'\"\n ></ui-icon>\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n </button>\n </ng-template>\n </ng-container>\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "component", type: i4.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.EllipseTextDirective, selector: "[uiEllipseText]", inputs: ["isMultiline", "maxDiffPixels", "refresh"], outputs: ["onChangeTextState"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
198
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: OverflowMenuComponent, selector: "ui-overflow-menu", inputs: { buttons: "buttons", iconTrigger: "iconTrigger", menuLabel: "menuLabel", applicationTheme: "applicationTheme", ariaLabel: "ariaLabel", ariaRequired: "ariaRequired", describedby: "describedby", contentTemplateRef: "contentTemplateRef", buttonVariant: "buttonVariant", buttonSize: "buttonSize", menuConfig: "menuConfig", isDynamicMenu: "isDynamicMenu" }, outputs: { selectItem: "selectItem", menuOpened: "menuOpened", menuClosed: "menuClosed" }, viewQueries: [{ propertyName: "buttonElement", first: true, predicate: ["buttonElement"], descendants: true }, { propertyName: "matmenus", predicate: MatMenu, descendants: true }, { propertyName: "matTrigger", predicate: MatMenuTrigger, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n <button\n #buttonElement\n mat-button\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n *ngIf=\"isMenuRendered()\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n disableRipple\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n\n @for (menu of submenus; track menu) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n <ng-container *ngFor=\"let button of menu; index as id\">\n <ng-container\n *ngIf=\"button.btnTemplate; else uiButton\"\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n\n <ng-template #uiButton>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.tooltipText ? button.tooltipText : (button.isTextEllipsed ? button.label : '')\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n role=\"menuitem\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.isDestructive ? 'red' : button.disabled ? 'dark' : 'rebrand-black'\"\n ></ui-icon>\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n </button>\n </ng-template>\n </ng-container>\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "component", type: i4.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i8.EllipseTextDirective, selector: "[uiEllipseText]", inputs: ["isMultiline", "maxDiffPixels", "refresh"], outputs: ["onChangeTextState"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
187
199
  }
188
200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OverflowMenuComponent, decorators: [{
189
201
  type: Component,
190
- args: [{ selector: 'ui-overflow-menu', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n <button\n #buttonElement\n mat-button\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n *ngIf=\"isMenuRendered()\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n disableRipple\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n\n @for (menu of submenus; track menu) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n <ng-container *ngFor=\"let button of menu; index as id\">\n <ng-container\n *ngIf=\"button.btnTemplate; else uiButton\"\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n\n <ng-template #uiButton>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.isTextEllipsed ? button.label : ''\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n role=\"menuitem\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.isDestructive ? 'red' : button.disabled ? 'dark' : 'rebrand-black'\"\n ></ui-icon>\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n </button>\n </ng-template>\n </ng-container>\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"] }]
202
+ args: [{ selector: 'ui-overflow-menu', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n <button\n #buttonElement\n mat-button\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n *ngIf=\"isMenuRendered()\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n disableRipple\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n\n @for (menu of submenus; track menu) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n <ng-container *ngFor=\"let button of menu; index as id\">\n <ng-container\n *ngIf=\"button.btnTemplate; else uiButton\"\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n\n <ng-template #uiButton>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.tooltipText ? button.tooltipText : (button.isTextEllipsed ? button.label : '')\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n role=\"menuitem\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.isDestructive ? 'red' : button.disabled ? 'dark' : 'rebrand-black'\"\n ></ui-icon>\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n </button>\n </ng-template>\n </ng-container>\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\n }\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"] }]
191
203
  }], ctorParameters: () => [{ type: undefined, decorators: [{
192
204
  type: Optional
193
205
  }, {
@@ -215,6 +227,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
215
227
  type: Input
216
228
  }], menuConfig: [{
217
229
  type: Input
230
+ }], isDynamicMenu: [{
231
+ type: Input
218
232
  }], selectItem: [{
219
233
  type: Output
220
234
  }], menuOpened: [{
@@ -231,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
231
245
  type: ViewChild,
232
246
  args: ['buttonElement']
233
247
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Z28tY2Fub3B5LXVpL2NvbXBvbmVudHMvb3ZlcmZsb3ctbWVudS9vdmVyZmxvdy1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9vdmVyZmxvdy1tZW51L292ZXJmbG93LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFJakUsTUFBTSxtQkFBbUIsR0FBZTtJQUN0QyxjQUFjLEVBQUUsS0FBSztJQUNyQixVQUFVLEVBQUUsRUFBRTtJQUNkLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFNBQVMsRUFBRSxPQUFPO0NBQ25CLENBQUE7QUFVRCxNQUFNLE9BQU8scUJBQXFCO0lBb0doQyxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxZQUM2RSxlQUFpQyxFQUNwRyxZQUEwQixFQUMxQixNQUFjO1FBRnFELG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNwRyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFN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LE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFFZ0IsUUFBUTtzQkFBOUIsWUFBWTt1QkFBQyxPQUFPO2dCQUNTLFVBQVU7c0JBQXZDLFlBQVk7dUJBQUMsY0FBYztnQkFDQSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb25OYW1lIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZGVsJztcbmltcG9ydCB7IE1lbnVDb25maWcsIE92ZXJmbG93TWVudUJ1dHRvbk1vZGlmeSwgT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUgfSBmcm9tICcuL292ZXJmbG93LW1lbnUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24tdGhlbWUubW9kZWxcIjtcbmltcG9ydCB7IE1hdE1lbnUsIE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gXCJAYW5ndWxhci9jZGsvYTExeVwiO1xuaW1wb3J0IHsgQnV0dG9uQ29sb3IsIEJ1dHRvblNpemUgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLm1vZGVsJztcblxuY29uc3QgREVGQVVMVF9NRU5VX0NPTkZJRzogTWVudUNvbmZpZyA9IHtcbiAgb3ZlcmxhcFRyaWdnZXI6IGZhbHNlLFxuICBwYW5lbENsYXNzOiAnJyxcbiAgeFBvc2l0aW9uOiAnYWZ0ZXInLFxuICB5UG9zaXRpb246ICdiZWxvdycsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VpLW92ZXJmbG93LW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vb3ZlcmZsb3ctbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL292ZXJmbG93LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cbn0pXG5leHBvcnQgY2xhc3MgT3ZlcmZsb3dNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIE1lbnUgYnV0dG9uc1xuICAgKlxuICAgKiBAdHlwZSB7T3ZlcmZsb3dNZW51QnV0dG9uc1R5cGVbXX1cbiAgICogQG1lbWJlcm9mIE92ZXJmbG93TWVudUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYnV0dG9uczogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGVbXTtcblxuICAvKipcbiAgICogTWVudSBpY29uIHRyaWdnZXJcbiAgICpcbiAgICogQG1lbWJlcm9mIE92ZXJmbG93TWVudUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaWNvblRyaWdnZXI6IEljb25OYW1lID0gJ01lbnUtZWxsaXBzaXMnO1xuXG4gIC8qKlxuICAgKiBMYWJlbCBtZW51XG4gICAqXG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIG1lbnVMYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKlxuICAgKiBEZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiB0aGVtZVxuICAgKlxuICAgKiBAdHlwZSB7QXBwbGljYXRpb25UaGVtZX1cbiAgICogQG1lbWJlcm9mIE92ZXJmbG93TWVudUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZSA9ICdsaWdodCc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgQVJJQSBsYWJlbCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICogVGhpcyBsYWJlbCBpcyB1c2VkIHRvIHByb3ZpZGUgYW4gYWNjZXNzaWJsZSBuYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogQG1lbWJlcm9mIE92ZXJmbG93TWVudUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgQVJJQSByZXF1aXJlbWVudCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICogVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGFuIGlucHV0IGZpZWxkIGlzIHJlcXVpcmVkIGZvciBmb3JtIHN1Ym1pc3Npb24uXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgT3ZlcmZsb3dNZW51Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBhcmlhUmVxdWlyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBBUklBIHJlcXVpcmVtZW50IGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgYW4gaW5wdXQgZm9yIGRlc2NyaXB0aW9uLlxuICAgKiBAdHlwZSB7dGV4dH1cbiAgICogQG1lbWJlcm9mIE92ZXJmbG93TWVudUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpYmVkYnkgPSAnJztcblxuICAvKipcbiAgICogQ3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgYnV0dG9uIChvcHRpb25hbClcbiAgICpcbiAgICogQHR5cGUge1RlbXBsYXRlUmVmPGFueT59XG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGNvbnRlbnRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICogQnV0dG9uIHZhcmlhbnQgZm9yIHRoZSBvdmVyZmxvdyBtZW51IHRyaWdnZXJcbiAgICogV2hlbiBudWxsLCB1c2VzIHRoZSBkZWZhdWx0IGljb24gcmVuZGVyaW5nXG4gICAqXG4gICAqIEB0eXBlIHtCdXR0b25Db2xvciB8IG51bGx9XG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGJ1dHRvblZhcmlhbnQ6IEJ1dHRvbkNvbG9yIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEJ1dHRvbiBzaXplIGZvciB0aGUgb3ZlcmZsb3cgbWVudSB0cmlnZ2VyXG4gICAqXG4gICAqIEB0eXBlIHtCdXR0b25TaXplfVxuICAgKiBAbWVtYmVyb2YgT3ZlcmZsb3dNZW51Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBidXR0b25TaXplOiBCdXR0b25TaXplID0gJ21lZGl1bSc7XG5cbiAgQElucHV0KCkgbWVudUNvbmZpZzogTWVudUNvbmZpZyA9IERFRkFVTFRfTUVOVV9DT05GSUc7XG5cbiAgQE91dHB1dCgpIHNlbGVjdEl0ZW06IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpIG1lbnVPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQE91dHB1dCgpIG1lbnVDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZHJlbihNYXRNZW51KSBtYXRtZW51czogUXVlcnlMaXN0PE1hdE1lbnU+XG4gIEBWaWV3Q2hpbGRyZW4oTWF0TWVudVRyaWdnZXIpIG1hdFRyaWdnZXI6IFF1ZXJ5TGlzdDxNYXRNZW51VHJpZ2dlcj5cbiAgQFZpZXdDaGlsZCgnYnV0dG9uRWxlbWVudCcpIGJ1dHRvbkVsZW1lbnQ6IGFueTtcblxuICBtZW51SXRlbXM6IHN0cmluZ1tdID0gW11cbiAgc3VibWVudXM6IEFycmF5PE92ZXJmbG93TWVudUJ1dHRvbk1vZGlmeVtdPiA9IFtdXG5cbiAgaXNNZW51UmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICBpc01lbnVPcGVuZWQgPSBzaWduYWwoZmFsc2UpO1xuICBpc0ZvY3VzZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGdldCBtZW51SXRlbUhhc0hvdmVyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3VibWVudXMuc29tZShtZW51ID0+IG1lbnUuc29tZShpdGVtID0+IGl0ZW0uaXNIb3ZlcmVkKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KCdDQU5PUFlVSV9ERUZBVUxUX0FQUExJQ0FUSU9OX1RIRU1FJykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0QXBwVGhlbWU6IEFwcGxpY2F0aW9uVGhlbWUsXG4gICAgcHJpdmF0ZSBmb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICApIHtcbiAgICBpZiAoZGVmYXVsdEFwcFRoZW1lKSB7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uVGhlbWUgPSBkZWZhdWx0QXBwVGhlbWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jcmVhdGVTdWJtZW51cyh0aGlzLmJ1dHRvbnMsIFwiczBcIiwgMSlcbiAgICB0aGlzLnJlaW5kZXgoKVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaXNNZW51UmVuZGVyZWQuc2V0KHRydWUpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuYnV0dG9uRWxlbWVudCkuc3Vic2NyaWJlKG9yaWdpbiA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBpZiAob3JpZ2luID09PSAna2V5Ym9hcmQnKSB7XG4gICAgICAgICAgdGhpcy5pc0ZvY3VzZWQuc2V0KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5pc01lbnVPcGVuZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgb25TZWxlY3RJdGVtKGV2ZW50OiBFdmVudCwgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghIXZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0uZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25NZW51T3BlbmVkKCk6IHZvaWQge1xuICAgIHRoaXMubWVudU9wZW5lZC5lbWl0KCk7XG4gICAgdGhpcy5pc01lbnVPcGVuZWQuc2V0KHRydWUpO1xuXG4gICAgaWYgKHRoaXMuaXNGb2N1c2VkKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1hdG1lbnVzLmZpcnN0Ll9hbGxJdGVtcy5maXJzdC5mb2N1cygna2V5Ym9hcmQnKTtcbiAgICAgIH0sIDMwMClcbiAgICB9XG4gIH1cblxuICBvbk1lbnVDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc01lbnVPcGVuZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm1lbnVDbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgb25CdXR0b25Gb2N1cyhidXR0b246IE92ZXJmbG93TWVudUJ1dHRvbk1vZGlmeSkge1xuICAgIGlmICh0aGlzLmlzRm9jdXNlZCgpKSB7XG4gICAgICBidXR0b24uaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvbkJ1dHRvbkJsdXIoYnV0dG9uOiBPdmVyZmxvd01lbnVCdXR0b25Nb2RpZnkpIHtcbiAgICBidXR0b24uaXNGb2N1c2VkID0gZmFsc2U7XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogT3ZlcmZsb3dNZW51QnV0dG9uTW9kaWZ5LCAkZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGJ1dHRvbi5kaXNhYmxlZCkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25TZWxlY3RJdGVtKCRldmVudCwgYnV0dG9uLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBvblN1Ym1lbnVPcGVuZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc01lbnVPcGVuZWQuc2V0KCF0aGlzLmlzTWVudU9wZW5lZCk7XG4gICAgaWYgKHRoaXMuaXNGb2N1c2VkKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1hdG1lbnVzLmxhc3QuX2FsbEl0ZW1zLmZpcnN0LmZvY3VzKCdrZXlib2FyZCcpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBvbkJ1dHRvbkhvdmVyKGJ1dHRvbjogT3ZlcmZsb3dNZW51QnV0dG9uTW9kaWZ5LCBzdGF0ZTogYm9vbGVhbikge1xuICAgIGJ1dHRvbi5pc0hvdmVyZWQgPSBzdGF0ZTtcbiAgfVxuXG4gIGdldE1lbnUoaW5kZXg6IGFueSkge1xuICAgIHJldHVybiBpbmRleCA+PSAwICYmIHRoaXMubWF0bWVudXMgPyB0aGlzLm1hdG1lbnVzLmZpbmQoKHgsIGkpID0+IGkgPT0gaW5kZXgpISA6IG51bGxcbiAgfVxuXG4gIHByaXZhdGUgcmVpbmRleCgpIHtcbiAgICB0aGlzLnN1Ym1lbnVzLmZvckVhY2goKG1lbnU6IE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlW10pID0+IHtcbiAgICAgIG1lbnUuZm9yRWFjaCgoaXRlbTogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uc3ViTWVudSAhPT0gLTEpXG4gICAgICAgICAgaXRlbS5zdWJNZW51ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtLmFjdGlvbiArICcnKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdWJtZW51cyhtZW51OiBPdmVyZmxvd01lbnVCdXR0b25zVHlwZVtdLCBwcmVmaXg6IHN0cmluZywgY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWVudUl0ZW1zLnB1c2gocHJlZml4KTtcbiAgICB0aGlzLnN1Ym1lbnVzLnB1c2goXG4gICAgICBtZW51Lm1hcCgoaXRlbTogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgIGljb246IGl0ZW0uaWNvbixcbiAgICAgICAgICAgIGlzRGVzdHJ1Y3RpdmU6IGl0ZW0uaXNEZXN0cnVjdGl2ZSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsXG4gICAgICAgICAgICBidG5UZW1wbGF0ZTogaXRlbS5idG5UZW1wbGF0ZSxcbiAgICAgICAgICAgIHN1Yk1lbnU6IGl0ZW0uc3ViTWVudSA/IDAgOiAtMSxcbiAgICAgICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24gPyBpdGVtLmFjdGlvbiA6IHByZWZpeCtpbmRleFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgbWVudS5mb3JFYWNoKChpdGVtOiBPdmVyZmxvd01lbnVCdXR0b25zVHlwZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGl0ZW0uc3ViTWVudSkge1xuICAgICAgICB0aGlzLmNyZWF0ZVN1Ym1lbnVzKChpdGVtIGFzIHsgc3ViTWVudTogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGVbXSB9KS5zdWJNZW51LCBwcmVmaXggKyBpbmRleCwgY291bnQgKyAxKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctbWVudS1jb250YWluZXJcIiBbYXR0ci50aGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCI+XG4gIDxidXR0b25cbiAgICAjYnV0dG9uRWxlbWVudFxuICAgIG1hdC1idXR0b25cbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnaWNvbi1idXR0b24nOiAhY29udGVudFRlbXBsYXRlUmVmICYmICFidXR0b25WYXJpYW50LFxuICAgICAgJ2NvbnRlbnQtdGVtcGxhdGUnOiBjb250ZW50VGVtcGxhdGVSZWYsXG4gICAgICAnbm8taG92ZXInOiBidXR0b25WYXJpYW50LFxuICAgIH1cIlxuICAgICpuZ0lmPVwiaXNNZW51UmVuZGVyZWQoKVwiXG4gICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1hdG1lbnVzLmZpcnN0XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJhcmlhUmVxdWlyZWRcIlxuICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiJ2Rlc2NyaWJlZGJ5J1wiXG4gICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJ0cnVlXCJcbiAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzTWVudU9wZW5lZCgpXCJcbiAgICBkaXNhYmxlUmlwcGxlXG4gICAgKG1lbnVPcGVuZWQpPVwib25NZW51T3BlbmVkKClcIlxuICAgIChtZW51Q2xvc2VkKT1cIm9uTWVudUNsb3NlZCgpXCJcbiAgICBjbGFzcz1cIm92ZXJmbG93LW1lbnUtb3BlbmVyXCJcbiAgICBbbWF0VG9vbHRpcF09XCJtZW51TGFiZWxcIlxuICA+XG4gICAgPHNwYW4gW2lkXT1cIidkZXNjcmliZWRieSdcIiBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIj57eyBkZXNjcmliZWRieSB9fTwvc3Bhbj5cbiAgICBAaWYgKGJ1dHRvblZhcmlhbnQpIHtcbiAgICAgIDx1aS1idXR0b25cbiAgICAgICAgW3ZhcmlhbnRdPVwiYnV0dG9uVmFyaWFudFwiXG4gICAgICAgIFtqdXN0SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgW2ljb25OYW1lXT1cImljb25UcmlnZ2VyXCJcbiAgICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgIFtzaXplXT1cImJ1dHRvblNpemVcIlxuICAgICAgPlxuICAgICAgPC91aS1idXR0b24+XG4gICAgfSBAZWxzZSBpZiAoY29udGVudFRlbXBsYXRlUmVmKSB7XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRUZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPHVpLWljb25cbiAgICAgICAgW25hbWVdPVwiaWNvblRyaWdnZXJcIlxuICAgICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCJcbiAgICAgICAgW3NpemVdPVwiJzI0J1wiXG4gICAgICAgIFtjb2xvcl09XCIncmVicmFuZC1ibGFjaydcIlxuICAgICAgPjwvdWktaWNvbj5cbiAgICB9XG4gIDwvYnV0dG9uPlxuXG4gIEBmb3IgKG1lbnUgb2Ygc3VibWVudXM7IHRyYWNrIG1lbnUpIHtcbiAgICA8bWF0LW1lbnVcbiAgICAgIFt4UG9zaXRpb25dPVwibWVudUNvbmZpZy54UG9zaXRpb25cIlxuICAgICAgW3lQb3NpdGlvbl09XCJtZW51Q29uZmlnLnlQb3NpdGlvblwiXG4gICAgICAjbWF0TWVudVxuICAgICAgW2NsYXNzXT1cIidvdmVyZmxvdy1tZW51ICcgKyBtZW51Q29uZmlnLnBhbmVsQ2xhc3NcIlxuICAgICAgW292ZXJsYXBUcmlnZ2VyXT1cIm1lbnVDb25maWcub3ZlcmxhcFRyaWdnZXJcIlxuICAgICAgYmFja2Ryb3BDbGFzcz1cIm92ZXJmbG93LW1lbnUtYmFja2Ryb3BcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBtZW51OyBpbmRleCBhcyBpZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJidXR0b24uYnRuVGVtcGxhdGU7IGVsc2UgdWlCdXR0b25cIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJ1dHRvbi5idG5UZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBidXR0b24gfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3VpQnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJnZXRNZW51KGJ1dHRvbi5zdWJNZW51KVwiXG4gICAgICAgICAgICAobWVudU9wZW5lZCk9XCJvblN1Ym1lbnVPcGVuZWQoKVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25CdXR0b25Gb2N1cyhidXR0b24pXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQnV0dG9uQmx1cihidXR0b24pXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uQnV0dG9uSG92ZXIoYnV0dG9uLCB0cnVlKVwiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbkJ1dHRvbkhvdmVyKGJ1dHRvbiwgZmFsc2UpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWRlc3RydWN0aXZlJzogYnV0dG9uLmlzRGVzdHJ1Y3RpdmUsIGRpc2FibGVkOiBidXR0b24uZGlzYWJsZWQgfVwiXG4gICAgICAgICAgICBkaXNhYmxlUmlwcGxlXG4gICAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24sICRldmVudClcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLmlzVGV4dEVsbGlwc2VkID8gYnV0dG9uLmxhYmVsIDogJydcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIidsYWJlbGxlZGJ5LScgKyBidXR0b24ubGFiZWwgKyBpZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIidkZXNjcmliZWRieS0nICsgYnV0dG9uLmxhYmVsICsgaWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJidXR0b24uYXJpYUxhYmVsIHx8IG51bGxcIlxuICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaWRdPVwiJ2Rlc2NyaWJlZGJ5LScgKyBidXR0b24ubGFiZWwgKyBpZFwiIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgPyAoJ01FTlUuTUVOVUlURU1fRElTQUJMRUQnIHwgdWlUcmFuc2xhdGUgfCBhc3luYykgKyAnICcgKyAoYnV0dG9uLmRlc2NyaWJlZGJ5IHx8ICcnKVxuICAgICAgICAgICAgICAgICAgOiBidXR0b24uZGVzY3JpYmVkYnlcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPHVpLWljb25cbiAgICAgICAgICAgICAgW25hbWVdPVwiYnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICBbdG9nZ2xlSWNvblN0eWxlXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZmlsbGVkXT1cIlxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA/IGZhbHNlIDogYnV0dG9uLmlzSG92ZXJlZCA/IHRydWUgOiBtZW51SXRlbUhhc0hvdmVyZWQgPyBmYWxzZSA6ICEhYnV0dG9uLmlzRm9jdXNlZFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiJzI0J1wiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uaXNEZXN0cnVjdGl2ZSA/ICdyZWQnIDogYnV0dG9uLmRpc2FibGVkID8gJ2RhcmsnIDogJ3JlYnJhbmQtYmxhY2snXCJcbiAgICAgICAgICAgID48L3VpLWljb24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaWRdPVwiJ2xhYmVsbGVkYnktJyArIGJ1dHRvbi5sYWJlbCArIGlkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXG4gICAgICAgICAgICAgIHVpRWxsaXBzZVRleHRcbiAgICAgICAgICAgICAgW3JlZnJlc2hdPVwiaXNNZW51T3BlbmVkKClcIlxuICAgICAgICAgICAgICBbbWF4RGlmZlBpeGVsc109XCIxXCJcbiAgICAgICAgICAgICAgW2lzTXVsdGlsaW5lXT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DaGFuZ2VUZXh0U3RhdGUpPVwiYnV0dG9uLmlzVGV4dEVsbGlwc2VkID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgPnt7IGJ1dHRvbi5sYWJlbCB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttZW51LWNvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbWF0LW1lbnU+XG4gIH1cbjwvZGl2PlxuIl19
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Z28tY2Fub3B5LXVpL2NvbXBvbmVudHMvb3ZlcmZsb3ctbWVudS9vdmVyZmxvdy1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9vdmVyZmxvdy1tZW51L292ZXJmbG93LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFHakUsTUFBTSxtQkFBbUIsR0FBZTtJQUN0QyxjQUFjLEVBQUUsS0FBSztJQUNyQixVQUFVLEVBQUUsRUFBRTtJQUNkLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFNBQVMsRUFBRSxPQUFPO0NBQ25CLENBQUM7QUFTRixNQUFNLE9BQU8scUJBQXFCO0lBc0doQyxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxZQUM2RSxlQUFpQyxFQUNwRyxZQUEwQixFQUMxQixNQUFjO1FBRnFELG9CQUFlLEdBQWYsZUFBZSxDQUFrQjtRQUNwRyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFN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a0JBQWtCLGlCQUdiLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQTZHNUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQ0FBb0M7eUZBcEdqRCxPQUFPO3NCQUFmLEtBQUs7Z0JBT0csV0FBVztzQkFBbkIsS0FBSztnQkFPRyxTQUFTO3NCQUFqQixLQUFLO2dCQVNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQVFHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBUUcsV0FBVztzQkFBbkIsS0FBSztnQkFRRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBU0csYUFBYTtzQkFBckIsS0FBSztnQkFRRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFFZ0IsUUFBUTtzQkFBOUIsWUFBWTt1QkFBQyxPQUFPO2dCQUNTLFVBQVU7c0JBQXZDLFlBQVk7dUJBQUMsY0FBYztnQkFDQSxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIHNpZ25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25DaGFuZ2VzLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb25OYW1lIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZGVsJztcbmltcG9ydCB7IE1lbnVDb25maWcsIE92ZXJmbG93TWVudUJ1dHRvbk1vZGlmeSwgT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUgfSBmcm9tICcuL292ZXJmbG93LW1lbnUubW9kZWwnO1xuaW1wb3J0IHsgQnV0dG9uQ29sb3IsIEJ1dHRvblNpemUgfSBmcm9tICcuLi9idXR0b24vYnV0dG9uLm1vZGVsJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVGhlbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24tdGhlbWUubW9kZWwnO1xuaW1wb3J0IHsgTWF0TWVudSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcblxuY29uc3QgREVGQVVMVF9NRU5VX0NPTkZJRzogTWVudUNvbmZpZyA9IHtcbiAgb3ZlcmxhcFRyaWdnZXI6IGZhbHNlLFxuICBwYW5lbENsYXNzOiAnJyxcbiAgeFBvc2l0aW9uOiAnYWZ0ZXInLFxuICB5UG9zaXRpb246ICdiZWxvdycsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1aS1vdmVyZmxvdy1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL292ZXJmbG93LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vdmVyZmxvdy1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBPdmVyZmxvd01lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBNZW51IGJ1dHRvbnNcbiAgICpcbiAgICogQHR5cGUge092ZXJmbG93TWVudUJ1dHRvbnNUeXBlW119XG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGJ1dHRvbnM6IE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlW107XG5cbiAgLyoqXG4gICAqIE1lbnUgaWNvbiB0cmlnZ2VyXG4gICAqXG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGljb25UcmlnZ2VyOiBJY29uTmFtZSA9ICdNZW51LWVsbGlwc2lzJztcblxuICAvKipcbiAgICogTGFiZWwgbWVudVxuICAgKlxuICAgKiBAbWVtYmVyb2YgT3ZlcmZsb3dNZW51Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBtZW51TGFiZWwgPSAnJztcblxuICAvKipcbiAgICpcbiAgICogRGVmaW5lcyB0aGUgYXBwbGljYXRpb24gdGhlbWVcbiAgICpcbiAgICogQHR5cGUge0FwcGxpY2F0aW9uVGhlbWV9XG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uVGhlbWU6IEFwcGxpY2F0aW9uVGhlbWUgPSAnbGlnaHQnO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIEFSSUEgbGFiZWwgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAqIFRoaXMgbGFiZWwgaXMgdXNlZCB0byBwcm92aWRlIGFuIGFjY2Vzc2libGUgbmFtZSBmb3IgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIEFSSUEgcmVxdWlyZW1lbnQgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBhbiBpbnB1dCBmaWVsZCBpcyByZXF1aXJlZCBmb3IgZm9ybSBzdWJtaXNzaW9uLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIE92ZXJmbG93TWVudUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYXJpYVJlcXVpcmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgQVJJQSByZXF1aXJlbWVudCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICogVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIGFuIGlucHV0IGZvciBkZXNjcmlwdGlvbi5cbiAgICogQHR5cGUge3RleHR9XG4gICAqIEBtZW1iZXJvZiBPdmVyZmxvd01lbnVDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGRlc2NyaWJlZGJ5ID0gJyc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGJ1dHRvbiAob3B0aW9uYWwpXG4gICAqXG4gICAqIEB0eXBlIHtUZW1wbGF0ZVJlZjxhbnk+fVxuICAgKiBAbWVtYmVyb2YgT3ZlcmZsb3dNZW51Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIEJ1dHRvbiB2YXJpYW50IGZvciB0aGUgb3ZlcmZsb3cgbWVudSB0cmlnZ2VyXG4gICAqIFdoZW4gbnVsbCwgdXNlcyB0aGUgZGVmYXVsdCBpY29uIHJlbmRlcmluZ1xuICAgKlxuICAgKiBAdHlwZSB7QnV0dG9uQ29sb3IgfCBudWxsfVxuICAgKiBAbWVtYmVyb2YgT3ZlcmZsb3dNZW51Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBidXR0b25WYXJpYW50OiBCdXR0b25Db2xvciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBCdXR0b24gc2l6ZSBmb3IgdGhlIG92ZXJmbG93IG1lbnUgdHJpZ2dlclxuICAgKlxuICAgKiBAdHlwZSB7QnV0dG9uU2l6ZX1cbiAgICogQG1lbWJlcm9mIE92ZXJmbG93TWVudUNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgYnV0dG9uU2l6ZTogQnV0dG9uU2l6ZSA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpIG1lbnVDb25maWc6IE1lbnVDb25maWcgPSBERUZBVUxUX01FTlVfQ09ORklHO1xuXG4gIEBJbnB1dCgpIGlzRHluYW1pY01lbnUgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgc2VsZWN0SXRlbTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KCkgbWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KCkgbWVudUNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAVmlld0NoaWxkcmVuKE1hdE1lbnUpIG1hdG1lbnVzOiBRdWVyeUxpc3Q8TWF0TWVudT47XG4gIEBWaWV3Q2hpbGRyZW4oTWF0TWVudVRyaWdnZXIpIG1hdFRyaWdnZXI6IFF1ZXJ5TGlzdDxNYXRNZW51VHJpZ2dlcj47XG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbkVsZW1lbnQnKSBidXR0b25FbGVtZW50OiBhbnk7XG5cbiAgbWVudUl0ZW1zOiBzdHJpbmdbXSA9IFtdO1xuICBzdWJtZW51czogQXJyYXk8T3ZlcmZsb3dNZW51QnV0dG9uTW9kaWZ5W10+ID0gW107XG5cbiAgaXNNZW51UmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICBpc01lbnVPcGVuZWQgPSBzaWduYWwoZmFsc2UpO1xuICBpc0ZvY3VzZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGdldCBtZW51SXRlbUhhc0hvdmVyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3VibWVudXMuc29tZShtZW51ID0+IG1lbnUuc29tZShpdGVtID0+IGl0ZW0uaXNIb3ZlcmVkKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KCdDQU5PUFlVSV9ERUZBVUxUX0FQUExJQ0FUSU9OX1RIRU1FJykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0QXBwVGhlbWU6IEFwcGxpY2F0aW9uVGhlbWUsXG4gICAgcHJpdmF0ZSBmb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICAgIGlmIChkZWZhdWx0QXBwVGhlbWUpIHtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25UaGVtZSA9IGRlZmF1bHRBcHBUaGVtZTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNyZWF0ZVN1Ym1lbnVzKHRoaXMuYnV0dG9ucywgJ3MwJywgMSk7XG4gICAgdGhpcy5yZWluZGV4KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2J1dHRvbnMnXSAmJiB0aGlzLmlzRHluYW1pY01lbnUpIHtcbiAgICAgIHRoaXMucmVzZXRTdWJtZW51cygpO1xuICAgICAgdGhpcy5jcmVhdGVTdWJtZW51cyh0aGlzLmJ1dHRvbnMsICdzMCcsIDEpO1xuICAgICAgdGhpcy5yZWluZGV4KCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaXNNZW51UmVuZGVyZWQuc2V0KHRydWUpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuYnV0dG9uRWxlbWVudCkuc3Vic2NyaWJlKG9yaWdpbiA9PlxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChvcmlnaW4gPT09ICdrZXlib2FyZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkLnNldCh0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTWVudU9wZW5lZCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkLnNldChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgb25TZWxlY3RJdGVtKGV2ZW50OiBFdmVudCwgdmFsdWU6IHN0cmluZykge1xuICAgIGlmICghIXZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0uZW1pdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25NZW51T3BlbmVkKCk6IHZvaWQge1xuICAgIHRoaXMubWVudU9wZW5lZC5lbWl0KCk7XG4gICAgdGhpcy5pc01lbnVPcGVuZWQuc2V0KHRydWUpO1xuXG4gICAgaWYgKHRoaXMuaXNGb2N1c2VkKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1hdG1lbnVzLmZpcnN0Ll9hbGxJdGVtcy5maXJzdC5mb2N1cygna2V5Ym9hcmQnKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25NZW51Q2xvc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNZW51T3BlbmVkLnNldChmYWxzZSk7XG4gICAgdGhpcy5tZW51Q2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uQnV0dG9uRm9jdXMoYnV0dG9uOiBPdmVyZmxvd01lbnVCdXR0b25Nb2RpZnkpIHtcbiAgICBpZiAodGhpcy5pc0ZvY3VzZWQoKSkge1xuICAgICAgYnV0dG9uLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25CdXR0b25CbHVyKGJ1dHRvbjogT3ZlcmZsb3dNZW51QnV0dG9uTW9kaWZ5KSB7XG4gICAgYnV0dG9uLmlzRm9jdXNlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25CdXR0b25DbGljayhidXR0b246IE92ZXJmbG93TWVudUJ1dHRvbk1vZGlmeSwgJGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChidXR0b24uZGlzYWJsZWQpIHtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU2VsZWN0SXRlbSgkZXZlbnQsIGJ1dHRvbi52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25TdWJtZW51T3BlbmVkKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNZW51T3BlbmVkLnNldCghdGhpcy5pc01lbnVPcGVuZWQpO1xuICAgIGlmICh0aGlzLmlzRm9jdXNlZCgpKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5tYXRtZW51cy5sYXN0Ll9hbGxJdGVtcy5maXJzdC5mb2N1cygna2V5Ym9hcmQnKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25CdXR0b25Ib3ZlcihidXR0b246IE92ZXJmbG93TWVudUJ1dHRvbk1vZGlmeSwgc3RhdGU6IGJvb2xlYW4pIHtcbiAgICBidXR0b24uaXNIb3ZlcmVkID0gc3RhdGU7XG4gIH1cblxuICBnZXRNZW51KGluZGV4OiBhbnkpIHtcbiAgICByZXR1cm4gaW5kZXggPj0gMCAmJiB0aGlzLm1hdG1lbnVzID8gKHRoaXMubWF0bWVudXMuZmluZCgoeCwgaSkgPT4gaSA9PT0gaW5kZXgpID8/IG51bGwpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVpbmRleCgpIHtcbiAgICB0aGlzLnN1Ym1lbnVzLmZvckVhY2goKG1lbnU6IE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlW10pID0+IHtcbiAgICAgIG1lbnUuZm9yRWFjaCgoaXRlbTogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUpID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uc3ViTWVudSAhPT0gLTEpIHtcbiAgICAgICAgICBpdGVtLnN1Yk1lbnUgPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGAke2l0ZW0uYWN0aW9ufWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRTdWJtZW51cygpIHtcbiAgICB0aGlzLnN1Ym1lbnVzID0gW107XG4gICAgdGhpcy5tZW51SXRlbXMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3VibWVudXMobWVudTogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGVbXSwgcHJlZml4OiBzdHJpbmcsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1lbnVJdGVtcy5wdXNoKHByZWZpeCk7XG4gICAgdGhpcy5zdWJtZW51cy5wdXNoKFxuICAgICAgbWVudS5tYXAoKGl0ZW06IE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlLCBpbmRleDogbnVtYmVyKSA9PiAoe1xuICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCxcbiAgICAgICAgaWNvbjogaXRlbS5pY29uLFxuICAgICAgICBpc0Rlc3RydWN0aXZlOiBpdGVtLmlzRGVzdHJ1Y3RpdmUsXG4gICAgICAgIHRvb2x0aXBUZXh0OiBpdGVtLnRvb2x0aXBUZXh0LFxuICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQsXG4gICAgICAgIGJ0blRlbXBsYXRlOiBpdGVtLmJ0blRlbXBsYXRlLFxuICAgICAgICBzdWJNZW51OiBpdGVtLnN1Yk1lbnUgPyAwIDogLTEsXG4gICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24gPyBpdGVtLmFjdGlvbiA6IHByZWZpeCArIGluZGV4LFxuICAgICAgfSkpXG4gICAgKTtcblxuICAgIG1lbnUuZm9yRWFjaCgoaXRlbTogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChpdGVtLnN1Yk1lbnUpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVTdWJtZW51cygoaXRlbSBhcyB7IHN1Yk1lbnU6IE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlW10gfSkuc3ViTWVudSwgcHJlZml4ICsgaW5kZXgsIGNvdW50ICsgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvdmVyZmxvdy1tZW51LWNvbnRhaW5lclwiIFthdHRyLnRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIj5cbiAgPGJ1dHRvblxuICAgICNidXR0b25FbGVtZW50XG4gICAgbWF0LWJ1dHRvblxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdpY29uLWJ1dHRvbic6ICFjb250ZW50VGVtcGxhdGVSZWYgJiYgIWJ1dHRvblZhcmlhbnQsXG4gICAgICAnY29udGVudC10ZW1wbGF0ZSc6IGNvbnRlbnRUZW1wbGF0ZVJlZixcbiAgICAgICduby1ob3Zlcic6IGJ1dHRvblZhcmlhbnQsXG4gICAgfVwiXG4gICAgKm5nSWY9XCJpc01lbnVSZW5kZXJlZCgpXCJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWF0bWVudXMuZmlyc3RcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cImFyaWFSZXF1aXJlZFwiXG4gICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCInZGVzY3JpYmVkYnknXCJcbiAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNNZW51T3BlbmVkKClcIlxuICAgIGRpc2FibGVSaXBwbGVcbiAgICAobWVudU9wZW5lZCk9XCJvbk1lbnVPcGVuZWQoKVwiXG4gICAgKG1lbnVDbG9zZWQpPVwib25NZW51Q2xvc2VkKClcIlxuICAgIGNsYXNzPVwib3ZlcmZsb3ctbWVudS1vcGVuZXJcIlxuICAgIFttYXRUb29sdGlwXT1cIm1lbnVMYWJlbFwiXG4gID5cbiAgICA8c3BhbiBbaWRdPVwiJ2Rlc2NyaWJlZGJ5J1wiIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiPnt7IGRlc2NyaWJlZGJ5IH19PC9zcGFuPlxuICAgIEBpZiAoYnV0dG9uVmFyaWFudCkge1xuICAgICAgPHVpLWJ1dHRvblxuICAgICAgICBbdmFyaWFudF09XCJidXR0b25WYXJpYW50XCJcbiAgICAgICAgW2p1c3RJY29uXT1cInRydWVcIlxuICAgICAgICBbaWNvbk5hbWVdPVwiaWNvblRyaWdnZXJcIlxuICAgICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgW3NpemVdPVwiYnV0dG9uU2l6ZVwiXG4gICAgICA+XG4gICAgICA8L3VpLWJ1dHRvbj5cbiAgICB9IEBlbHNlIGlmIChjb250ZW50VGVtcGxhdGVSZWYpIHtcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8dWktaWNvblxuICAgICAgICBbbmFtZV09XCJpY29uVHJpZ2dlclwiXG4gICAgICAgIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIlxuICAgICAgICBbc2l6ZV09XCInMjQnXCJcbiAgICAgICAgW2NvbG9yXT1cIidyZWJyYW5kLWJsYWNrJ1wiXG4gICAgICA+PC91aS1pY29uPlxuICAgIH1cbiAgPC9idXR0b24+XG5cbiAgQGZvciAobWVudSBvZiBzdWJtZW51czsgdHJhY2sgbWVudSkge1xuICAgIDxtYXQtbWVudVxuICAgICAgW3hQb3NpdGlvbl09XCJtZW51Q29uZmlnLnhQb3NpdGlvblwiXG4gICAgICBbeVBvc2l0aW9uXT1cIm1lbnVDb25maWcueVBvc2l0aW9uXCJcbiAgICAgICNtYXRNZW51XG4gICAgICBbY2xhc3NdPVwiJ292ZXJmbG93LW1lbnUgJyArIG1lbnVDb25maWcucGFuZWxDbGFzc1wiXG4gICAgICBbb3ZlcmxhcFRyaWdnZXJdPVwibWVudUNvbmZpZy5vdmVybGFwVHJpZ2dlclwiXG4gICAgICBiYWNrZHJvcENsYXNzPVwib3ZlcmZsb3ctbWVudS1iYWNrZHJvcFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIG1lbnU7IGluZGV4IGFzIGlkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cImJ1dHRvbi5idG5UZW1wbGF0ZTsgZWxzZSB1aUJ1dHRvblwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uLmJ0blRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGJ1dHRvbiB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdWlCdXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxuICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImdldE1lbnUoYnV0dG9uLnN1Yk1lbnUpXCJcbiAgICAgICAgICAgIChtZW51T3BlbmVkKT1cIm9uU3VibWVudU9wZW5lZCgpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkJ1dHRvbkZvY3VzKGJ1dHRvbilcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CdXR0b25CbHVyKGJ1dHRvbilcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25CdXR0b25Ib3ZlcihidXR0b24sIHRydWUpXCJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uQnV0dG9uSG92ZXIoYnV0dG9uLCBmYWxzZSlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtZGVzdHJ1Y3RpdmUnOiBidXR0b24uaXNEZXN0cnVjdGl2ZSwgZGlzYWJsZWQ6IGJ1dHRvbi5kaXNhYmxlZCB9XCJcbiAgICAgICAgICAgIGRpc2FibGVSaXBwbGVcbiAgICAgICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJidXR0b24udG9vbHRpcFRleHQgPyBidXR0b24udG9vbHRpcFRleHQgOiAoYnV0dG9uLmlzVGV4dEVsbGlwc2VkID8gYnV0dG9uLmxhYmVsIDogJycpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCInbGFiZWxsZWRieS0nICsgYnV0dG9uLmxhYmVsICsgaWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCInZGVzY3JpYmVkYnktJyArIGJ1dHRvbi5sYWJlbCArIGlkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYnV0dG9uLmFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2lkXT1cIidkZXNjcmliZWRieS0nICsgYnV0dG9uLmxhYmVsICsgaWRcIiBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgID8gKCdNRU5VLk1FTlVJVEVNX0RJU0FCTEVEJyB8IHVpVHJhbnNsYXRlIHwgYXN5bmMpICsgJyAnICsgKGJ1dHRvbi5kZXNjcmliZWRieSB8fCAnJylcbiAgICAgICAgICAgICAgICAgIDogYnV0dG9uLmRlc2NyaWJlZGJ5XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDx1aS1pY29uXG4gICAgICAgICAgICAgIFtuYW1lXT1cImJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgICAgW3RvZ2dsZUljb25TdHlsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2ZpbGxlZF09XCJcbiAgICAgICAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPyBmYWxzZSA6IGJ1dHRvbi5pc0hvdmVyZWQgPyB0cnVlIDogbWVudUl0ZW1IYXNIb3ZlcmVkID8gZmFsc2UgOiAhIWJ1dHRvbi5pc0ZvY3VzZWRcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIicyNCdcIlxuICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmlzRGVzdHJ1Y3RpdmUgPyAncmVkJyA6IGJ1dHRvbi5kaXNhYmxlZCA/ICdkYXJrJyA6ICdyZWJyYW5kLWJsYWNrJ1wiXG4gICAgICAgICAgICA+PC91aS1pY29uPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lkXT1cIidsYWJlbGxlZGJ5LScgKyBidXR0b24ubGFiZWwgKyBpZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxuICAgICAgICAgICAgICB1aUVsbGlwc2VUZXh0XG4gICAgICAgICAgICAgIFtyZWZyZXNoXT1cImlzTWVudU9wZW5lZCgpXCJcbiAgICAgICAgICAgICAgW21heERpZmZQaXhlbHNdPVwiMVwiXG4gICAgICAgICAgICAgIFtpc011bHRpbGluZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlVGV4dFN0YXRlKT1cImJ1dHRvbi5pc1RleHRFbGxpcHNlZCA9ICRldmVudFwiXG4gICAgICAgICAgICAgID57eyBidXR0b24ubGFiZWwgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWVudS1jb250ZW50XVwiPjwvbmctY29udGVudD5cbiAgICA8L21hdC1tZW51PlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9vdmVyZmxvdy1tZW51L292ZXJmbG93LW1lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEljb25OYW1lIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZGVsJztcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW51UG9zaXRpb25YLCBNZW51UG9zaXRpb25ZIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcblxuZXhwb3J0IHR5cGUgT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUgPSB7XG4gIGljb246IEljb25OYW1lO1xuICBsYWJlbDogc3RyaW5nO1xuICBpc0Rlc3RydWN0aXZlPzogYm9vbGVhbjtcbiAgdmFsdWU6IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBidG5UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIHN1Yk1lbnU/OiBPdmVyZmxvd01lbnVCdXR0b25zVHlwZVtdIHwgbnVtYmVyO1xuICBhY3Rpb24/OiBudW1iZXIgfCBzdHJpbmc7XG4gIGRlc2NyaWJlZGJ5Pzogc3RyaW5nO1xuICBhcmlhTGFiZWw/OiBzdHJpbmc7XG59O1xuXG50eXBlIEJ1dHRvbk9wdGlvbnMgPSB7XG4gIGlzVGV4dEVsbGlwc2VkPzogYm9vbGVhbjtcbiAgaXNGb2N1c2VkPzogYm9vbGVhbjtcbiAgaXNIb3ZlcmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTWVudUNvbmZpZyA9IHtcbiAgeFBvc2l0aW9uOiBNZW51UG9zaXRpb25YO1xuICB5UG9zaXRpb246IE1lbnVQb3NpdGlvblk7XG4gIG92ZXJsYXBUcmlnZ2VyOiBib29sZWFuO1xuICBwYW5lbENsYXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE92ZXJmbG93TWVudUJ1dHRvbk1vZGlmeSA9IE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlICYgQnV0dG9uT3B0aW9ucztcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9vdmVyZmxvdy1tZW51L292ZXJmbG93LW1lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEljb25OYW1lIH0gZnJvbSAnLi4vaWNvbi9pY29uLm1vZGVsJztcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW51UG9zaXRpb25YLCBNZW51UG9zaXRpb25ZIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5cbmV4cG9ydCB0eXBlIE92ZXJmbG93TWVudUJ1dHRvbnNUeXBlID0ge1xuICBpY29uOiBJY29uTmFtZTtcbiAgbGFiZWw6IHN0cmluZztcbiAgaXNEZXN0cnVjdGl2ZT86IGJvb2xlYW47XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgYnRuVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzdWJNZW51PzogT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGVbXSB8IG51bWJlcjtcbiAgYWN0aW9uPzogbnVtYmVyIHwgc3RyaW5nO1xuICBkZXNjcmliZWRieT86IHN0cmluZztcbiAgYXJpYUxhYmVsPzogc3RyaW5nO1xuICB0b29sdGlwVGV4dD86IHN0cmluZztcbn07XG5cbnR5cGUgQnV0dG9uT3B0aW9ucyA9IHtcbiAgaXNUZXh0RWxsaXBzZWQ/OiBib29sZWFuO1xuICBpc0ZvY3VzZWQ/OiBib29sZWFuO1xuICBpc0hvdmVyZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBNZW51Q29uZmlnID0ge1xuICB4UG9zaXRpb246IE1lbnVQb3NpdGlvblg7XG4gIHlQb3NpdGlvbjogTWVudVBvc2l0aW9uWTtcbiAgb3ZlcmxhcFRyaWdnZXI6IGJvb2xlYW47XG4gIHBhbmVsQ2xhc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgT3ZlcmZsb3dNZW51QnV0dG9uTW9kaWZ5ID0gT3ZlcmZsb3dNZW51QnV0dG9uc1R5cGUgJiBCdXR0b25PcHRpb25zO1xuIl19
@@ -85,7 +85,7 @@ export class PasswordComponent {
85
85
  useExisting: forwardRef(() => PasswordComponent),
86
86
  multi: true,
87
87
  },
88
- ], viewQueries: [{ propertyName: "requiredCriteria", first: true, predicate: ["requiredCriteria"], descendants: true }], ngImport: i0, template: "<div class=\"password-criteria-container\">\n\n <ui-field [applicationTheme]=\"'dark'\"\n [formControl]=\"formControl\"\n [ariaLabel]=\"requiredCriteria?.nativeElement?.innerText ?? ''\"\n [type]=\"'password'\"\n [placeholder]=\"('PASSWORD.PASSWORD_PLACEHOLDER' | uiTranslate | async) + (required ? ' *' : '')\"\n (keydown.enter)=\"showError = true\"\n (focusout)=\"showError = true\"\n ></ui-field>\n\n <div class=\"criteria-container\" *ngIf=\"showCriteria\" #requiredCriteria>\n\n <div class=\"progress\">\n <ui-progress-bar [progress]=\"progressValue === 1 ? 0 : progressValue\" [applicationTheme]=\"'dark'\"></ui-progress-bar>\n </div>\n\n <span *ngIf=\"allRequirementsMet\" style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">{{ 'FIELD.ALL_PASSWORD_REQ_PASSED' | uiTranslate | async }}</span>\n\n <div\n *ngFor=\"let criterion of criteria\"\n class=\"criterion\"\n [attr.aria-live]=\"!allRequirementsMet ? 'polite' : ''\"\n [ngClass]=\"{ 'passed': criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] && showError ? 'Info-in-line' : 'Check-round-in-line'\"\n applicationTheme=\"dark\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n <span style=\"position: absolute; left: -9999px\">{{ (criteriaPassed[criterion.key] ? ('COMMON.PASSED') : ('COMMON.FAILED')) | uiTranslate | async }}</span>\n </div>\n </div>\n\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.password-criteria-container .criteria-container{margin-top:14px}.password-criteria-container .criteria-container .progress{margin-bottom:16px}.password-criteria-container .criteria-container .criterion{display:flex;flex-direction:row;align-items:center;gap:8px}.password-criteria-container .criteria-container .criterion ui-icon ::ng-deep svg{color:#e9e9e9}.password-criteria-container .criteria-container .criterion span{text-align:center;font-size:14px;line-height:23px;color:#242424}.password-criteria-container .criteria-container .criterion.passed ui-icon ::ng-deep svg{color:#242424}.password-criteria-container .criteria-container .criterion.passed span{color:#666;text-decoration:line-through}.password-criteria-container .criteria-container .criterion.error ui-icon ::ng-deep svg{color:#e02800}.password-criteria-container .criteria-container .criterion.error span{color:#e02800}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FieldComponent, selector: "ui-field", inputs: ["fullWidth", "fullHeight", "label", "labelHtml", "labelIcon", "fieldName", "placeholder", "id", "value", "badgeVariant", "errors", "disabled", "required", "readOnly", "hintMessage", "type", "updateOnBlur", "allowOnlyDigits", "allowNegative", "showBottomContent", "applicationTheme", "ariaLabel", "loading", "isValid", "maxCharacters", "trimOnBlur", "trimOnSubmit", "maxRows", "hasTextAreaCounter", "hideBuiltInErrors", "hideLabelInErrors", "max", "min", "textareaHeight", "borderless", "isAIVariant", "ariaLabelledby", "ariaDescribedby", "hasError"], outputs: ["validateEvent", "fieldBlur"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "component", type: i5.ProgressBarComponent, selector: "ui-progress-bar", inputs: ["companyColor", "progress", "mode", "buffer", "applicationTheme", "ariaLabel", "ariaDescribedBy", "showPercentage"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ ], viewQueries: [{ propertyName: "requiredCriteria", first: true, predicate: ["requiredCriteria"], descendants: true }], ngImport: i0, template: "<div class=\"password-criteria-container\">\n\n <ui-field [applicationTheme]=\"'dark'\"\n [formControl]=\"formControl\"\n [ariaLabel]=\"requiredCriteria?.nativeElement?.innerText ?? ''\"\n [type]=\"'password'\"\n [placeholder]=\"('PASSWORD.PASSWORD_PLACEHOLDER' | uiTranslate | async) + (required ? ' *' : '')\"\n (keydown.enter)=\"showError = true\"\n (focusout)=\"showError = true\"\n ></ui-field>\n\n <div class=\"criteria-container\" *ngIf=\"showCriteria\" #requiredCriteria>\n\n <div class=\"progress\">\n <ui-progress-bar [progress]=\"progressValue === 1 ? 0 : progressValue\" [applicationTheme]=\"'dark'\"></ui-progress-bar>\n </div>\n\n <span *ngIf=\"allRequirementsMet\" style=\"position: absolute; left: -9999px\" [attr.aria-live]=\"'polite'\">{{ 'FIELD.ALL_PASSWORD_REQ_PASSED' | uiTranslate | async }}</span>\n\n <div\n *ngFor=\"let criterion of criteria\"\n class=\"criterion\"\n [attr.aria-live]=\"!allRequirementsMet ? 'polite' : ''\"\n [ngClass]=\"{ 'passed': criteriaPassed[criterion.key], error: !criteriaPassed[criterion.key] && showError }\"\n >\n <ui-icon [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n [name]=\"!criteriaPassed[criterion.key] && showError ? 'Info-in-line' : 'Check-round-in-line'\"\n applicationTheme=\"dark\"\n ></ui-icon>\n <span>{{ criterion.translateKey | uiTranslate | async }}</span>\n <span style=\"position: absolute; left: -9999px\">{{ (criteriaPassed[criterion.key] ? ('COMMON.PASSED') : ('COMMON.FAILED')) | uiTranslate | async }}</span>\n </div>\n </div>\n\n</div>\n", styles: [".bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}.password-criteria-container .criteria-container{margin-top:14px}.password-criteria-container .criteria-container .progress{margin-bottom:16px}.password-criteria-container .criteria-container .criterion{display:flex;flex-direction:row;align-items:center;gap:8px}.password-criteria-container .criteria-container .criterion ui-icon ::ng-deep svg{color:#e9e9e9}.password-criteria-container .criteria-container .criterion span{text-align:center;font-size:14px;line-height:23px;color:#242424}.password-criteria-container .criteria-container .criterion.passed ui-icon ::ng-deep svg{color:#242424}.password-criteria-container .criteria-container .criterion.passed span{color:#666;text-decoration:line-through}.password-criteria-container .criteria-container .criterion.error ui-icon ::ng-deep svg{color:#e02800}.password-criteria-container .criteria-container .criterion.error span{color:#e02800}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FieldComponent, selector: "ui-field", inputs: ["fullWidth", "fullHeight", "label", "labelHtml", "labelIcon", "fieldName", "placeholder", "id", "value", "badgeVariant", "errors", "disabled", "required", "readOnly", "hintMessage", "type", "updateOnBlur", "allowOnlyDigits", "isAutocompleteOff", "allowNegative", "showBottomContent", "applicationTheme", "ariaLabel", "loading", "isValid", "maxCharacters", "trimOnBlur", "trimOnSubmit", "maxRows", "hasTextAreaCounter", "hideBuiltInErrors", "hideLabelInErrors", "max", "min", "textareaHeight", "borderless", "isAIVariant", "ariaLabelledby", "ariaDescribedby", "hasError"], outputs: ["validateEvent", "fieldBlur"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "component", type: i5.ProgressBarComponent, selector: "ui-progress-bar", inputs: ["companyColor", "progress", "mode", "buffer", "applicationTheme", "ariaLabel", "ariaDescribedBy", "showPercentage"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
89
89
  }
90
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PasswordComponent, decorators: [{
91
91
  type: Component,
@@ -214,6 +214,13 @@ export class PhoneInputComponent {
214
214
  filteredCountryTrackByMethod(index, el) {
215
215
  return el.alpha2Code;
216
216
  }
217
+ setCountry(country) {
218
+ if (country) {
219
+ this.selectedCountry = country;
220
+ }
221
+ this.value = this.getNumberWithCountryCode();
222
+ this.onChange(this.value);
223
+ }
217
224
  getNumberWithCountryCode() {
218
225
  const nationalNumber = this.form.value?.phone_number;
219
226
  return nationalNumber ? (this.selectedCountry?.callingCode ?? '') + nationalNumber : '';
@@ -250,12 +257,6 @@ export class PhoneInputComponent {
250
257
  }))
251
258
  .subscribe();
252
259
  }
253
- setCountry(country) {
254
- if (country) {
255
- this.selectedCountry = country;
256
- }
257
- this.value = this.getNumberWithCountryCode();
258
- }
259
260
  getCountryByAlpha2Code(alpha2Code) {
260
261
  return this.countries.value.find(country => country.alpha2Code === alpha2Code);
261
262
  }
@@ -350,4 +351,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
350
351
  type: HostBinding,
351
352
  args: ['attr.aria-describedby']
352
353
  }] } });
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGdvLWNhbm9weS11aS9jb21wb25lbnRzL3Bob25lLWlucHV0L3Bob25lLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9waG9uZS1pbnB1dC9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLGtCQUFrQixHQUVuQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sS0FBSyxFQUNMLEdBQUcsRUFFSCxTQUFTLEVBQ1QsT0FBTyxFQUNQLElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7Ozs7O09BS0c7SUFDSCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxZ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MkIsRUFBRTt5QkFDN0Q7cUJBQ0Y7OzBCQTJLRSxRQUFROzswQkFBSSxJQUFJOzswQkFNaEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQ0FBb0M7eUNBdkt0RCxLQUFLO3NCQURSLEtBQUs7Z0JBdUJPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBWUYsV0FBVztzQkFEZCxLQUFLO2dCQWNOLFFBQVE7c0JBRlAsV0FBVzt1QkFBQyxlQUFlOztzQkFDM0IsS0FBSztnQkFTRyxRQUFRO3NCQUFoQixLQUFLO2dCQVdOLGdCQUFnQjtzQkFGZixXQUFXO3VCQUFDLFlBQVk7O3NCQUN4QixLQUFLO2dCQVNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBU08sTUFBTTtzQkFBbEIsS0FBSztnQkFhRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQW9CQyxLQUFLO3NCQURYLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdoRCxNQUFNO3NCQURaLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUl4RCxFQUFFO3NCQURELFdBQVc7Z0JBSVIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGVBQWU7Z0JBS1UsV0FBVztzQkFBaEQsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOZ0NvbnRyb2wsXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfQVVUT0NPTVBMRVRFX0RFRkFVTFRfT1BUSU9OUyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgcGFyc2VQaG9uZU51bWJlciB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmaXJzdCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblRoZW1lIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uLXRoZW1lLm1vZGVsJztcbmltcG9ydCB7IFVJQ291bnRyeSB9IGZyb20gJy4vcGhvbmUtaW5wdXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1aS1waG9uZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Bob25lLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfQVVUT0NPTVBMRVRFX0RFRkFVTFRfT1BUSU9OUyxcbiAgICAgIHVzZVZhbHVlOiB7IG92ZXJsYXlQYW5lbENsYXNzOiAncGhvbmUtbnVtYmVyLWF1dG9jb21wbGV0ZScgfSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQaG9uZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrIHtcbiAgLyoqXG4gICAqIFBob25lIG51bWJlclxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlIHx8IHZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVBob25lTnVtYmVyKHZhbHVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBhcnNlZC5mb3JtYXRJbnRlcm5hdGlvbmFsKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZ2V0Q291bnRyeUJ5QWxwaGEyQ29kZShwYXJzZWQuY291bnRyeSEpIHx8IHRoaXMuc2VsZWN0ZWRDb3VudHJ5O1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZC5yZXBsYWNlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5LmNhbGxpbmdDb2RlLCAnJykgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodmFsdWU/Lmxlbmd0aCA8PSA0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5nZXRDb3VudHJ5QnlDYWxsaW5nQ29kZSh2YWx1ZSkgfHwgdGhpcy5zZWxlY3RlZENvdW50cnk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHBob25lX251bWJlcjogdmFsdWU/LnJlcGxhY2UodGhpcy5zZWxlY3RlZENvdW50cnk/LmNhbGxpbmdDb2RlLCAnJykgfSk7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHJ5IGxpc3QgZm9yIHNlbGVjdFxuICAgKlxuICAgKiBAdHlwZSB7VUlDb3VudHJ5W119XG4gICAqIEBtZW1iZXJvZiBQaG9uZUlucHV0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzZXQgY291bnRyeUxpc3QoY291bnRyeUxpc3Q6IFVJQ291bnRyeVtdKSB7XG4gICAgdGhpcy5sb2FkQ291bnRyaWVzJC5uZXh0KGNvdW50cnlMaXN0KTtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID8/IGNvdW50cnlMaXN0WzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIGlucHV0XG4gICAqXG4gICAqIEB0eXBlIHt0ZXh0fVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmludGVybmFsUGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBpbnB1dCBpcyBkaXNhYmxlZFxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIFBob25lSW5wdXRDb21wb25lbnRcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBpcyByZXF1aXJlZCBvciBub3RcbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBQaG9uZUlucHV0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICpcbiAgICogRGVmaW5lcyB0aGUgYXBwbGljYXRpb24gdGhlbWVcbiAgICpcbiAgICogQHR5cGUge0FwcGxpY2F0aW9uVGhlbWV9XG4gICAqIEBtZW1iZXJvZiBQaG9uZUlucHV0Q29tcG9uZW50XG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIudGhlbWUnKVxuICBASW5wdXQoKVxuICBhcHBsaWNhdGlvblRoZW1lOiBBcHBsaWNhdGlvblRoZW1lID0gJ2xpZ2h0JztcblxuICAvKipcbiAgICogSW5kaWNhdG9yIG9mIHRoZSBwaG9uZSBpbnB1dCB3aWR0aFxuICAgKiBAcHJvcGVydHkgZnVsbFdpZHRoXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgZnVsbFdpZHRoID0gZmFsc2U7XG5cbiAgX2Vycm9yczogU2FmZUh0bWxbXTtcbiAgLyoqXG4gICAqIElucHV0IGZpZWxkIGVycm9yc1xuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGVycm9ycyhlcnJvcnM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKGVycm9ycykge1xuICAgICAgdGhpcy5fZXJyb3JzID0gZXJyb3JzPy5maWx0ZXIoQm9vbGVhbikubWFwKGVycm9yID0+IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGVycm9yKSk7XG4gICAgICB0aGlzLmVycm9yc0xlbmd0aCA9IHRoaXMuc2V0RXJyb3JzTGVuZ3RoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgaW4gYnVpbGQgZXJyb3JzIGZvciBSZWFjdGl2ZSBGb3Jtc1xuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaGlkZUJ1aWx0SW5FcnJvcnMgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGlkZSBsYWJlbCBpbiBlcnJvcnNcbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlcm9mIFBob25lSW5wdXRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGhpZGVMYWJlbEluRXJyb3JzID0gZmFsc2U7XG5cbiAgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgcHJpdmF0ZSBjb3VudHJpZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVJQ291bnRyeVtdPihbXSk7XG4gIHByb3RlY3RlZCBjb3VudHJpZXMkID0gdGhpcy5jb3VudHJpZXMuYXNPYnNlcnZhYmxlKCk7XG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBwaG9uZV9udW1iZXI6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKSxcbiAgfSk7XG4gIHByb3RlY3RlZCBjb250cm9sVHlwZSA9ICdwaG9uZS1udW1iZXInO1xuICBwcm90ZWN0ZWQgdXNlckFyaWFEZXNjcmliZWRCeT86IHN0cmluZztcbiAgcHJvdGVjdGVkIGxvYWRDb3VudHJpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVSUNvdW50cnlbXT4oW10pO1xuICBwcm90ZWN0ZWQgY291bnRyeUNvZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ1VTJyk7XG4gIHByb3RlY3RlZCBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcm90ZWN0ZWQgZm9jdXNlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHNlbGVjdEZpbHRlckN0cmwgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKTtcbiAgcHJvdGVjdGVkIGVycm9yc0xlbmd0aDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvdW50cnlGbGFnU3JjID0gJ2Fzc2V0cy9zdmctY291bnRyeS1mbGFncy8nO1xuXG4gIEBWaWV3Q2hpbGQoTWF0SW5wdXQsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBpbnB1dDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoTWF0U2VsZWN0LCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgc2VsZWN0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBASG9zdEJpbmRpbmcoKVxuICBpZCA9IGBwaG9uZS1udW1iZXIke1Bob25lSW5wdXRDb21wb25lbnQubmV4dElkKyt9YDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0ZWQnKVxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgZGVzY3JpYmVkQnkgPSAnJztcblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5mb3JtLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JNYXRjaGVyLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbCwgbnVsbCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJXaXRoQ291bnRyeUNvZGUoKTtcbiAgfVxuXG4gIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFBsYWNlaG9sZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0NPVU5UUllfQ09ERSA9ICdVUyc7XG4gIHByaXZhdGUgaW50ZXJuYWxQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRDb3VudHJ5OiBVSUNvdW50cnk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmVBbGwkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIGVycm9yTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdCgnQ0FOT1BZVUlfREVGQVVMVF9BUFBMSUNBVElPTl9USEVNRScpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFwcFRoZW1lOiBBcHBsaWNhdGlvblRoZW1lLFxuICApIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRBcHBUaGVtZSkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblRoZW1lID0gZGVmYXVsdEFwcFRoZW1lO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hcmsgY29tcG9uZW50IHZpZXcgYXMgZGlydHkgd2hlbiB0b3VjaGVkIHByb2dyYW1tYXRpY2FsbHkgd2l0aCBtYXJrQXNUb3VjaGVkL21hcmtBbGxBc1RvdWNoZWQgb3IgZXJyb3JzXG4gICAqIHRvIGRpc3BsYXkgdmFsaWRhdGlvbiBlcnJvcnMgdGhhdCBtaWdodCBoYXBwZW4gKGUuZy4gcmVxdWlyZWQpXG4gICAqL1xuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sPy50b3VjaGVkIHx8IHRoaXMubmdDb250cm9sPy5lcnJvcnMpIHtcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZENvdW50cmllcygpO1xuICAgIHRoaXMucHJlU2VsZWN0Q291bnRyeSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9Gb2N1c0V2ZW50cygpO1xuICB9XG5cbiAgc2V0RXJyb3JzTGVuZ3RoKCk6IGJvb2xlYW4ge1xuICAgIGlmICghIXRoaXMuX2Vycm9ycykge1xuICAgICAgcmV0dXJuIHRoaXMuX2Vycm9ycy5maWx0ZXIoZXJyID0+ICEhZXJyKS5sZW5ndGggPiAwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy51c2VyQXJpYURlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25Ub3VjaDogKCkgPT4gdm9pZDtcblxuICB3cml0ZVZhbHVlKHBob25lTnVtYmVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocGhvbmVOdW1iZXIpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBwaG9uZU51bWJlcjtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtLmVuYWJsZSgpO1xuICAgIH1cbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLmlucHV0KTtcbiAgICB0aGlzLmZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLnNlbGVjdCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG9uT3B0aW9uc1NlbGVjdGVkKHZhbHVlOiBVSUNvdW50cnkpIHtcbiAgICB0aGlzLnNldENvdW50cnkodmFsdWUpO1xuICB9XG5cbiAgb25JbnB1dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLnNlbGVjdGVkQ291bnRyeT8uY2FsbGluZ0NvZGUgPz8gJycpICsgdmFsdWU7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIGZpbHRlcmVkQ291bnRyeVRyYWNrQnlNZXRob2QoaW5kZXg6IG51bWJlciwgZWw6IFVJQ291bnRyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVsLmFscGhhMkNvZGU7XG4gIH1cblxuICBwcml2YXRlIGdldE51bWJlcldpdGhDb3VudHJ5Q29kZSgpIHtcbiAgICBjb25zdCBuYXRpb25hbE51bWJlciA9IHRoaXMuZm9ybS52YWx1ZT8ucGhvbmVfbnVtYmVyIGFzIHN0cmluZztcbiAgICByZXR1cm4gbmF0aW9uYWxOdW1iZXIgPyAodGhpcy5zZWxlY3RlZENvdW50cnk/LmNhbGxpbmdDb2RlID8/ICcnKSArIG5hdGlvbmFsTnVtYmVyIDogJyc7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRm9jdXNFdmVudHMoKSB7XG4gICAgY29uc3Qgc2VsZWN0QW5kSW5wdXRGb2N1cyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5zZWxlY3QpLFxuICAgICAgdGhpcy5mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmlucHV0KSxcbiAgICBdKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCksIGRlYm91bmNlVGltZSgxMCkpO1xuXG4gICAgc2VsZWN0QW5kSW5wdXRGb2N1cyQuc3Vic2NyaWJlKChbc2VsZWN0Rm9jdXMsIGlucHV0Rm9jdXNdKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSAhIShzZWxlY3RGb2N1cyB8fCBpbnB1dEZvY3VzKTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9KTtcblxuICAgIHNlbGVjdEFuZElucHV0Rm9jdXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25Ub3VjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVTZWxlY3RDb3VudHJ5KCkge1xuICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh0cnVlKTtcbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY291bnRyaWVzJC5waXBlKFxuICAgICAgICBmaWx0ZXIoY291bnRyaWVzID0+IGNvdW50cmllcy5sZW5ndGggPiAwKSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKSxcbiAgICAgIHRoaXMuY291bnRyeUNvZGUsXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtjb3VudHJpZXMsIHNlbGVjdGVkQ291bnRyeV0pID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb3VudHJ5ID1cbiAgICAgICAgICAgICAgdGhpcy5nZXRDb3VudHJ5QnlBbHBoYTJDb2RlKHNlbGVjdGVkQ291bnRyeSkgfHwgdGhpcy5nZXRDb3VudHJ5QnlBbHBoYTJDb2RlKHRoaXMuREVGQVVMVF9DT1VOVFJZX0NPREUpO1xuICAgICAgICAgICAgdGhpcy5zZXRDb3VudHJ5KGNvdW50cnkgYXMgVUlDb3VudHJ5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvdW50cnkoY291bnRyeTogVUlDb3VudHJ5IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChjb3VudHJ5KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvdW50cnk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB0aGlzLmdldE51bWJlcldpdGhDb3VudHJ5Q29kZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb3VudHJ5QnlBbHBoYTJDb2RlKGFscGhhMkNvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNvdW50cmllcy52YWx1ZS5maW5kKGNvdW50cnkgPT4gY291bnRyeS5hbHBoYTJDb2RlID09PSBhbHBoYTJDb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q291bnRyeUJ5Q2FsbGluZ0NvZGUoY2FsbGluZ0NvZGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNvdW50cmllcy52YWx1ZS5maW5kKGNvdW50cnkgPT4gY291bnRyeS5jYWxsaW5nQ29kZSA9PT0gY2FsbGluZ0NvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ291bnRyaWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaFRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnNlbGVjdEZpbHRlckN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMCksIHN0YXJ0V2l0aCgnJykpO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5sb2FkQ291bnRyaWVzJCwgc2VhcmNoVGV4dCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCksXG4gICAgICAgIHRhcCgoW2NvdW50cmllcywgc2VhcmNoVGV4dF0pID0+IHtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXh0TG93ZXJDYXNlID0gc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ291bnRyaWVzID0gY291bnRyaWVzXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICBvcHRpb24gPT5cbiAgICAgICAgICAgICAgICBvcHRpb24ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHRMb3dlckNhc2UpIHx8XG4gICAgICAgICAgICAgICAgb3B0aW9uLmFscGhhMkNvZGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0TG93ZXJDYXNlKSB8fFxuICAgICAgICAgICAgICAgIG9wdGlvbi5jYWxsaW5nQ29kZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHRMb3dlckNhc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc29ydCgob3B0aW9uQSwgb3B0aW9uQikgPT4gKG9wdGlvbkIubmFtZS5zdGFydHNXaXRoKHNlYXJjaFRleHQpID8gMSA6IC0xKSk7XG4gICAgICAgICAgdGhpcy5jb3VudHJpZXMubmV4dChmaWx0ZXJlZENvdW50cmllcyk7XG4gICAgICAgIH0pLFxuICAgICAgICBkZWxheSgxKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudHJ5Rm91bmQgPSB0aGlzLmdldENvdW50cnlCeUFscGhhMkNvZGUodGhpcy5zZWxlY3RlZENvdW50cnk/LmFscGhhMkNvZGUpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gY291bnRyeUZvdW5kIHx8IHRoaXMuc2VsZWN0ZWRDb3VudHJ5O1xuICAgICAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZGlzYWJsZUNsaWNrKGV2OiBFdmVudCkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICB0cmFja0J5Rm4gPSAoaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSkgPT4gdmFsdWUuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTtcbn1cbiIsIjxtYXQtZm9ybS1maWVsZFxuICBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXG4gIFtjb2xvcl09XCIoZXJyb3JzTGVuZ3RoIHx8IChuZ0NvbnRyb2w/LmVycm9ycyAmJiBuZ0NvbnRyb2w/LnRvdWNoZWQgKSkgPyAnd2FybicgOiAnYWNjZW50J1wiXG4gIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGZvcm0uZGlzYWJsZWQgfHwgZGlzYWJsZWQsICdmdWxsLXdpZHRoJzogZnVsbFdpZHRoIH1cIlxuPlxuICA8bWF0LWxhYmVsPnt7ICdDT01NT04uUEhPTkVfTlVNQkVSJyB8IHVpVHJhbnNsYXRlIHwgYXN5bmMgfX0gPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9tYXQtbGFiZWw+XG5cbiAgPGRpdiBtYXRQcmVmaXggY2xhc3M9XCJjb3VudHJ5XCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cInNlbGVjdGVkLWZsYWdcIiBtYXRQcmVmaXggKm5nSWY9XCJzZWxlY3RlZENvdW50cnlcIj5cbiAgICAgIDxpbWcgW2hlaWdodF09XCIyMFwiIFt3aWR0aF09XCIyNFwiIFthdHRyLnNyY109XCJjb3VudHJ5RmxhZ1NyYyArIHNlbGVjdGVkQ291bnRyeT8uYWxwaGEyQ29kZT8udG9Mb3dlckNhc2UoKSArICcuc3ZnJ1wiXG4gICAgICAgICAgIFthbHRdPVwiJ0NvdW50cnkgZmxhZyAnICsgc2VsZWN0ZWRDb3VudHJ5Py5hbHBoYTJDb2RlPy50b0xvd2VyQ2FzZSgpXCI+XG4gICAgPC9idXR0b24+XG4gICAgPG1hdC1zZWxlY3RcbiAgICAgICNzZWxlY3RcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25PcHRpb25zU2VsZWN0ZWQoJGV2ZW50LnZhbHVlKVwiXG4gICAgICBbdmFsdWVdPVwic2VsZWN0ZWRDb3VudHJ5XCJcbiAgICAgIFtkaXNhYmxlT3B0aW9uQ2VudGVyaW5nXT1cInRydWVcIlxuICAgICAgW3BhbmVsQ2xhc3NdPVwiJ3Bob25lLW51bWJlci1zZWxlY3QnICsgJyAnICsgYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICBbbmdDbGFzc109XCJ7IG9wZW5lZDogc2VsZWN0LnBhbmVsT3BlbiB9XCJcbiAgICA+XG4gICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPnt7IHNlbGVjdGVkQ291bnRyeT8uY2FsbGluZ0NvZGUgfX08L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgIDxtYXQtb3B0aW9uPlxuICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdEZpbHRlckN0cmxcIlxuICAgICAgICAgIG5nRGVmYXVsdENvbnRyb2xcbiAgICAgICAgICBwbGFjZWhvbGRlckxhYmVsPVwiXCJcbiAgICAgICAgICBub0VudHJpZXNGb3VuZExhYmVsPVwiXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx1aS1pY29uIG5neE1hdFNlbGVjdFNlYXJjaENsZWFyIHNpemU9XCIyNFwiIFtuYW1lXT1cIidDbG9zZS1pbi1saW5lJ1wiPjwvdWktaWNvbj5cbiAgICAgICAgPC9uZ3gtbWF0LXNlbGVjdC1zZWFyY2g+XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudHJ5IG9mIGNvdW50cmllcyQgfCBhc3luYzsgdHJhY2tCeTogZmlsdGVyZWRDb3VudHJ5VHJhY2tCeU1ldGhvZFwiIFt2YWx1ZV09XCJjb3VudHJ5XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50cnktb3B0aW9uXCI+XG4gICAgICAgICAgICA8aW1nIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjRcIiBbYXR0ci5zcmNdPVwiY291bnRyeUZsYWdTcmMgKyBjb3VudHJ5Py5hbHBoYTJDb2RlPy50b0xvd2VyQ2FzZSgpISArICcuc3ZnJ1wiXG4gICAgICAgICAgICAgICAgIFthbHRdPVwiJ0NvdW50cnkgZmxhZyAnICsgY291bnRyeT8uYWxwaGEyQ29kZT8udG9Mb3dlckNhc2UoKSFcIj5cbiAgICAgICAgICAgIDxzbWFsbD57eyAkYW55KFtjb3VudHJ5Py5uYW1lLCAnKCcgKyBjb3VudHJ5Py5jYWxsaW5nQ29kZSArICcpJ10pIHwgam9pblN0cmluZ3MgOiAnICcgfX08L3NtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8aW5wdXRcbiAgICAoaW5wdXQpPVwib25JbnB1dChmb3JtLmdldCgncGhvbmVfbnVtYmVyJykhLnZhbHVlKVwiXG4gICAgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVfbnVtYmVyXCJcbiAgICAoY2xpY2spPVwiZGlzYWJsZUNsaWNrKCRldmVudClcIlxuICAgIFtuZ1N0eWxlXT1cInsgb3BhY2l0eTogZGlzYWJsZWQgPyAwLjUgOiAxIH1cIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgbWF0SW5wdXRcbiAgICB0eXBlPVwidGV4dFwiXG4gIC8+XG5cbiAgPG1hdC1oaW50IGNsYXNzPVwiZXJyb3JcIiAqbmdJZj1cImVycm9yc0xlbmd0aCB8fCAobmdDb250cm9sPy5lcnJvcnMgfCBoYXNWYWxpZGF0aW9uRXJyb3IpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVycm9yc0xlbmd0aFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImVycm9yc1wiICpuZ0Zvcj1cImxldCBlcnJvciBvZiBfZXJyb3JzOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgPHVpLWljb24gW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiIFtuYW1lXT1cIidFcnJvcidcIj48L3VpLWljb24+XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZXJyb3JcIj48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx1aS12YWxpZGF0aW9uLWVycm9yICpuZ0lmPVwibmdDb250cm9sICYmICFoaWRlQnVpbHRJbkVycm9yc1wiIFtuZ0NvbnRyb2xdPVwibmdDb250cm9sXCIgW2xhYmVsXT1cImhpZGVMYWJlbEluRXJyb3JzID8gbnVsbCA6ICgnQ09NTU9OLlBIT05FX05VTUJFUicgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jKVwiPjwvdWktdmFsaWRhdGlvbi1lcnJvcj5cblxuICA8L21hdC1oaW50PlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGdvLWNhbm9weS11aS9jb21wb25lbnRzL3Bob25lLWlucHV0L3Bob25lLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rnby1jYW5vcHktdWkvY29tcG9uZW50cy9waG9uZS1pbnB1dC9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLGtCQUFrQixHQUVuQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sS0FBSyxFQUNMLEdBQUcsRUFFSCxTQUFTLEVBQ1QsT0FBTyxFQUNQLElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDOUI7Ozs7O09BS0c7SUFDSCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxZ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LEVBQUUsZ0NBQWdDOzRCQUN6QyxRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSwyQkFBMkIsRUFBRTt5QkFDN0Q7cUJBQ0Y7OzBCQTJLRSxRQUFROzswQkFBSSxJQUFJOzswQkFNaEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQ0FBb0M7eUNBdkt0RCxLQUFLO3NCQURSLEtBQUs7Z0JBdUJPLFdBQVc7c0JBQXZCLEtBQUs7Z0JBWUYsV0FBVztzQkFEZCxLQUFLO2dCQWNOLFFBQVE7c0JBRlAsV0FBVzt1QkFBQyxlQUFlOztzQkFDM0IsS0FBSztnQkFTRyxRQUFRO3NCQUFoQixLQUFLO2dCQVdOLGdCQUFnQjtzQkFGZixXQUFXO3VCQUFDLFlBQVk7O3NCQUN4QixLQUFLO2dCQVNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBU08sTUFBTTtzQkFBbEIsS0FBSztnQkFhRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQW9CQyxLQUFLO3NCQURYLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdoRCxNQUFNO3NCQURaLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUl4RCxFQUFFO3NCQURELFdBQVc7Z0JBSVIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGVBQWU7Z0JBS1UsV0FBVztzQkFBaEQsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOZ0NvbnRyb2wsXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfQVVUT0NPTVBMRVRFX0RFRkFVTFRfT1BUSU9OUyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgcGFyc2VQaG9uZU51bWJlciB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmaXJzdCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblRoZW1lIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcGxpY2F0aW9uLXRoZW1lLm1vZGVsJztcbmltcG9ydCB7IFVJQ291bnRyeSB9IGZyb20gJy4vcGhvbmUtaW5wdXQubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1aS1waG9uZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Bob25lLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNQVRfQVVUT0NPTVBMRVRFX0RFRkFVTFRfT1BUSU9OUyxcbiAgICAgIHVzZVZhbHVlOiB7IG92ZXJsYXlQYW5lbENsYXNzOiAncGhvbmUtbnVtYmVyLWF1dG9jb21wbGV0ZScgfSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQaG9uZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrIHtcbiAgLyoqXG4gICAqIFBob25lIG51bWJlclxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlIHx8IHZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVBob25lTnVtYmVyKHZhbHVlKTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBhcnNlZC5mb3JtYXRJbnRlcm5hdGlvbmFsKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuZ2V0Q291bnRyeUJ5QWxwaGEyQ29kZShwYXJzZWQuY291bnRyeSEpIHx8IHRoaXMuc2VsZWN0ZWRDb3VudHJ5O1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZC5yZXBsYWNlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5LmNhbGxpbmdDb2RlLCAnJykgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodmFsdWU/Lmxlbmd0aCA8PSA0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gdGhpcy5nZXRDb3VudHJ5QnlDYWxsaW5nQ29kZSh2YWx1ZSkgfHwgdGhpcy5zZWxlY3RlZENvdW50cnk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHBob25lX251bWJlcjogdmFsdWU/LnJlcGxhY2UodGhpcy5zZWxlY3RlZENvdW50cnk/LmNhbGxpbmdDb2RlLCAnJykgfSk7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHJ5IGxpc3QgZm9yIHNlbGVjdFxuICAgKlxuICAgKiBAdHlwZSB7VUlDb3VudHJ5W119XG4gICAqIEBtZW1iZXJvZiBQaG9uZUlucHV0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBzZXQgY291bnRyeUxpc3QoY291bnRyeUxpc3Q6IFVJQ291bnRyeVtdKSB7XG4gICAgdGhpcy5sb2FkQ291bnRyaWVzJC5uZXh0KGNvdW50cnlMaXN0KTtcbiAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID8/IGNvdW50cnlMaXN0WzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIGlucHV0XG4gICAqXG4gICAqIEB0eXBlIHt0ZXh0fVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmludGVybmFsUGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBpbnB1dCBpcyBkaXNhYmxlZFxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICogQG1lbWJlcm9mIFBob25lSW5wdXRDb21wb25lbnRcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBpcyByZXF1aXJlZCBvciBub3RcbiAgICpcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqIEBtZW1iZXJvZiBQaG9uZUlucHV0Q29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICpcbiAgICogRGVmaW5lcyB0aGUgYXBwbGljYXRpb24gdGhlbWVcbiAgICpcbiAgICogQHR5cGUge0FwcGxpY2F0aW9uVGhlbWV9XG4gICAqIEBtZW1iZXJvZiBQaG9uZUlucHV0Q29tcG9uZW50XG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIudGhlbWUnKVxuICBASW5wdXQoKVxuICBhcHBsaWNhdGlvblRoZW1lOiBBcHBsaWNhdGlvblRoZW1lID0gJ2xpZ2h0JztcblxuICAvKipcbiAgICogSW5kaWNhdG9yIG9mIHRoZSBwaG9uZSBpbnB1dCB3aWR0aFxuICAgKiBAcHJvcGVydHkgZnVsbFdpZHRoXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgZnVsbFdpZHRoID0gZmFsc2U7XG5cbiAgX2Vycm9yczogU2FmZUh0bWxbXTtcbiAgLyoqXG4gICAqIElucHV0IGZpZWxkIGVycm9yc1xuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGVycm9ycyhlcnJvcnM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKGVycm9ycykge1xuICAgICAgdGhpcy5fZXJyb3JzID0gZXJyb3JzPy5maWx0ZXIoQm9vbGVhbikubWFwKGVycm9yID0+IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGVycm9yKSk7XG4gICAgICB0aGlzLmVycm9yc0xlbmd0aCA9IHRoaXMuc2V0RXJyb3JzTGVuZ3RoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgaW4gYnVpbGQgZXJyb3JzIGZvciBSZWFjdGl2ZSBGb3Jtc1xuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAbWVtYmVyb2YgUGhvbmVJbnB1dENvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KCkgaGlkZUJ1aWx0SW5FcnJvcnMgPSBmYWxzZTtcblxuICAvKipcbiAgICogSGlkZSBsYWJlbCBpbiBlcnJvcnNcbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQG1lbWJlcm9mIFBob25lSW5wdXRDb21wb25lbnRcbiAgICovXG4gIEBJbnB1dCgpIGhpZGVMYWJlbEluRXJyb3JzID0gZmFsc2U7XG5cbiAgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgcHJpdmF0ZSBjb3VudHJpZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVJQ291bnRyeVtdPihbXSk7XG4gIHByb3RlY3RlZCBjb3VudHJpZXMkID0gdGhpcy5jb3VudHJpZXMuYXNPYnNlcnZhYmxlKCk7XG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBwaG9uZV9udW1iZXI6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKSxcbiAgfSk7XG4gIHByb3RlY3RlZCBjb250cm9sVHlwZSA9ICdwaG9uZS1udW1iZXInO1xuICBwcm90ZWN0ZWQgdXNlckFyaWFEZXNjcmliZWRCeT86IHN0cmluZztcbiAgcHJvdGVjdGVkIGxvYWRDb3VudHJpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVSUNvdW50cnlbXT4oW10pO1xuICBwcm90ZWN0ZWQgY291bnRyeUNvZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ1VTJyk7XG4gIHByb3RlY3RlZCBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcm90ZWN0ZWQgZm9jdXNlZDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHNlbGVjdEZpbHRlckN0cmwgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKTtcbiAgcHJvdGVjdGVkIGVycm9yc0xlbmd0aDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvdW50cnlGbGFnU3JjID0gJ2Fzc2V0cy9zdmctY291bnRyeS1mbGFncy8nO1xuXG4gIEBWaWV3Q2hpbGQoTWF0SW5wdXQsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBpbnB1dDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoTWF0U2VsZWN0LCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgc2VsZWN0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBASG9zdEJpbmRpbmcoKVxuICBpZCA9IGBwaG9uZS1udW1iZXIke1Bob25lSW5wdXRDb21wb25lbnQubmV4dElkKyt9YDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0ZWQnKVxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgZGVzY3JpYmVkQnkgPSAnJztcblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5mb3JtLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JNYXRjaGVyLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbCwgbnVsbCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJXaXRoQ291bnRyeUNvZGUoKTtcbiAgfVxuXG4gIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbFBsYWNlaG9sZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0NPVU5UUllfQ09ERSA9ICdVUyc7XG4gIHByaXZhdGUgaW50ZXJuYWxQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRDb3VudHJ5OiBVSUNvdW50cnk7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmVBbGwkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIGVycm9yTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdCgnQ0FOT1BZVUlfREVGQVVMVF9BUFBMSUNBVElPTl9USEVNRScpIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFwcFRoZW1lOiBBcHBsaWNhdGlvblRoZW1lXG4gICkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdEFwcFRoZW1lKSB7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uVGhlbWUgPSBkZWZhdWx0QXBwVGhlbWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWFyayBjb21wb25lbnQgdmlldyBhcyBkaXJ0eSB3aGVuIHRvdWNoZWQgcHJvZ3JhbW1hdGljYWxseSB3aXRoIG1hcmtBc1RvdWNoZWQvbWFya0FsbEFzVG91Y2hlZCBvciBlcnJvcnNcbiAgICogdG8gZGlzcGxheSB2YWxpZGF0aW9uIGVycm9ycyB0aGF0IG1pZ2h0IGhhcHBlbiAoZS5nLiByZXF1aXJlZClcbiAgICovXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LnRvdWNoZWQgfHwgdGhpcy5uZ0NvbnRyb2w/LmVycm9ycykge1xuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkQ291bnRyaWVzKCk7XG4gICAgdGhpcy5wcmVTZWxlY3RDb3VudHJ5KCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0ZvY3VzRXZlbnRzKCk7XG4gIH1cblxuICBzZXRFcnJvcnNMZW5ndGgoKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5fZXJyb3JzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JzLmZpbHRlcihlcnIgPT4gISFlcnIpLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJBcmlhRGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvblRvdWNoOiAoKSA9PiB2b2lkO1xuXG4gIHdyaXRlVmFsdWUocGhvbmVOdW1iZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChwaG9uZU51bWJlcikge1xuICAgICAgdGhpcy52YWx1ZSA9IHBob25lTnVtYmVyO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuaW5wdXQpO1xuICAgIHRoaXMuZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuc2VsZWN0KTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVBbGwkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgb25PcHRpb25zU2VsZWN0ZWQodmFsdWU6IFVJQ291bnRyeSkge1xuICAgIHRoaXMuc2V0Q291bnRyeSh2YWx1ZSk7XG4gIH1cblxuICBvbklucHV0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5jYWxsaW5nQ29kZSA/PyAnJykgKyB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgZmlsdGVyZWRDb3VudHJ5VHJhY2tCeU1ldGhvZChpbmRleDogbnVtYmVyLCBlbDogVUlDb3VudHJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZWwuYWxwaGEyQ29kZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q291bnRyeShjb3VudHJ5OiBVSUNvdW50cnkgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKGNvdW50cnkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gY291bnRyeTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0TnVtYmVyV2l0aENvdW50cnlDb2RlKCk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TnVtYmVyV2l0aENvdW50cnlDb2RlKCkge1xuICAgIGNvbnN0IG5hdGlvbmFsTnVtYmVyID0gdGhpcy5mb3JtLnZhbHVlPy5waG9uZV9udW1iZXIgYXMgc3RyaW5nO1xuICAgIHJldHVybiBuYXRpb25hbE51bWJlciA/ICh0aGlzLnNlbGVjdGVkQ291bnRyeT8uY2FsbGluZ0NvZGUgPz8gJycpICsgbmF0aW9uYWxOdW1iZXIgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb2N1c0V2ZW50cygpIHtcbiAgICBjb25zdCBzZWxlY3RBbmRJbnB1dEZvY3VzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLnNlbGVjdCksXG4gICAgICB0aGlzLmZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuaW5wdXQpLFxuICAgIF0pLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVBbGwkKSwgZGVib3VuY2VUaW1lKDEwKSk7XG5cbiAgICBzZWxlY3RBbmRJbnB1dEZvY3VzJC5zdWJzY3JpYmUoKFtzZWxlY3RGb2N1cywgaW5wdXRGb2N1c10pID0+IHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9ICEhKHNlbGVjdEZvY3VzIHx8IGlucHV0Rm9jdXMpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH0pO1xuXG4gICAgc2VsZWN0QW5kSW5wdXRGb2N1cyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByZVNlbGVjdENvdW50cnkoKSB7XG4gICAgdGhpcy5zZXREaXNhYmxlZFN0YXRlKHRydWUpO1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jb3VudHJpZXMkLnBpcGUoXG4gICAgICAgIGZpbHRlcihjb3VudHJpZXMgPT4gY291bnRyaWVzLmxlbmd0aCA+IDApLFxuICAgICAgICBmaXJzdCgpXG4gICAgICApLFxuICAgICAgdGhpcy5jb3VudHJ5Q29kZSxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW2NvdW50cmllcywgc2VsZWN0ZWRDb3VudHJ5XSkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50cnkgPVxuICAgICAgICAgICAgICB0aGlzLmdldENvdW50cnlCeUFscGhhMkNvZGUoc2VsZWN0ZWRDb3VudHJ5KSB8fCB0aGlzLmdldENvdW50cnlCeUFscGhhMkNvZGUodGhpcy5ERUZBVUxUX0NPVU5UUllfQ09ERSk7XG4gICAgICAgICAgICB0aGlzLnNldENvdW50cnkoY291bnRyeSBhcyBVSUNvdW50cnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zZXREaXNhYmxlZFN0YXRlKGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q291bnRyeUJ5QWxwaGEyQ29kZShhbHBoYTJDb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudHJpZXMudmFsdWUuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuYWxwaGEyQ29kZSA9PT0gYWxwaGEyQ29kZSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvdW50cnlCeUNhbGxpbmdDb2RlKGNhbGxpbmdDb2RlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudHJpZXMudmFsdWUuZmluZChjb3VudHJ5ID0+IGNvdW50cnkuY2FsbGluZ0NvZGUgPT09IGNhbGxpbmdDb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvdW50cmllcygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5zZWxlY3RGaWx0ZXJDdHJsLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDApLCBzdGFydFdpdGgoJycpKTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMubG9hZENvdW50cmllcyQsIHNlYXJjaFRleHQkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFsbCQpLFxuICAgICAgICB0YXAoKFtjb3VudHJpZXMsIHNlYXJjaFRleHRdKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGV4dExvd2VyQ2FzZSA9IHNlYXJjaFRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZENvdW50cmllcyA9IGNvdW50cmllc1xuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgb3B0aW9uID0+XG4gICAgICAgICAgICAgICAgb3B0aW9uLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0TG93ZXJDYXNlKSB8fFxuICAgICAgICAgICAgICAgIG9wdGlvbi5hbHBoYTJDb2RlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dExvd2VyQ2FzZSkgfHxcbiAgICAgICAgICAgICAgICBvcHRpb24uY2FsbGluZ0NvZGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXh0TG93ZXJDYXNlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnNvcnQoKG9wdGlvbkEsIG9wdGlvbkIpID0+IChvcHRpb25CLm5hbWUuc3RhcnRzV2l0aChzZWFyY2hUZXh0KSA/IDEgOiAtMSkpO1xuICAgICAgICAgIHRoaXMuY291bnRyaWVzLm5leHQoZmlsdGVyZWRDb3VudHJpZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgZGVsYXkoMSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY291bnRyeUZvdW5kID0gdGhpcy5nZXRDb3VudHJ5QnlBbHBoYTJDb2RlKHRoaXMuc2VsZWN0ZWRDb3VudHJ5Py5hbHBoYTJDb2RlKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnRyeSA9IGNvdW50cnlGb3VuZCB8fCB0aGlzLnNlbGVjdGVkQ291bnRyeTtcbiAgICAgICAgICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGRpc2FibGVDbGljayhldjogRXZlbnQpIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgdHJhY2tCeUZuID0gKGluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkpID0+IHZhbHVlLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk7XG59XG4iLCI8bWF0LWZvcm0tZmllbGRcbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxuICBbY29sb3JdPVwiKGVycm9yc0xlbmd0aCB8fCAobmdDb250cm9sPy5lcnJvcnMgJiYgbmdDb250cm9sPy50b3VjaGVkICkpID8gJ3dhcm4nIDogJ2FjY2VudCdcIlxuICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBmb3JtLmRpc2FibGVkIHx8IGRpc2FibGVkLCAnZnVsbC13aWR0aCc6IGZ1bGxXaWR0aCB9XCJcbj5cbiAgPG1hdC1sYWJlbD57eyAnQ09NTU9OLlBIT05FX05VTUJFUicgfCB1aVRyYW5zbGF0ZSB8IGFzeW5jIH19IDxzcGFuICpuZ0lmPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbWF0LWxhYmVsPlxuXG4gIDxkaXYgbWF0UHJlZml4IGNsYXNzPVwiY291bnRyeVwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJzZWxlY3RlZC1mbGFnXCIgbWF0UHJlZml4ICpuZ0lmPVwic2VsZWN0ZWRDb3VudHJ5XCI+XG4gICAgICA8aW1nIFtoZWlnaHRdPVwiMjBcIiBbd2lkdGhdPVwiMjRcIiBbYXR0ci5zcmNdPVwiY291bnRyeUZsYWdTcmMgKyBzZWxlY3RlZENvdW50cnk/LmFscGhhMkNvZGU/LnRvTG93ZXJDYXNlKCkgKyAnLnN2ZydcIlxuICAgICAgICAgICBbYWx0XT1cIidDb3VudHJ5IGZsYWcgJyArIHNlbGVjdGVkQ291bnRyeT8uYWxwaGEyQ29kZT8udG9Mb3dlckNhc2UoKVwiPlxuICAgIDwvYnV0dG9uPlxuICAgIDxtYXQtc2VsZWN0XG4gICAgICAjc2VsZWN0XG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uT3B0aW9uc1NlbGVjdGVkKCRldmVudC52YWx1ZSlcIlxuICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkQ291bnRyeVwiXG4gICAgICBbZGlzYWJsZU9wdGlvbkNlbnRlcmluZ109XCJ0cnVlXCJcbiAgICAgIFtwYW5lbENsYXNzXT1cIidwaG9uZS1udW1iZXItc2VsZWN0JyArICcgJyArIGFwcGxpY2F0aW9uVGhlbWVcIlxuICAgICAgW25nQ2xhc3NdPVwieyBvcGVuZWQ6IHNlbGVjdC5wYW5lbE9wZW4gfVwiXG4gICAgPlxuICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj57eyBzZWxlY3RlZENvdW50cnk/LmNhbGxpbmdDb2RlIH19PC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaFxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3RGaWx0ZXJDdHJsXCJcbiAgICAgICAgICBuZ0RlZmF1bHRDb250cm9sXG4gICAgICAgICAgcGxhY2Vob2xkZXJMYWJlbD1cIlwiXG4gICAgICAgICAgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiXG4gICAgICAgID5cbiAgICAgICAgICA8dWktaWNvbiBuZ3hNYXRTZWxlY3RTZWFyY2hDbGVhciBzaXplPVwiMjRcIiBbbmFtZV09XCInQ2xvc2UtaW4tbGluZSdcIj48L3VpLWljb24+XG4gICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgY291bnRyeSBvZiBjb3VudHJpZXMkIHwgYXN5bmM7IHRyYWNrQnk6IGZpbHRlcmVkQ291bnRyeVRyYWNrQnlNZXRob2RcIiBbdmFsdWVdPVwiY291bnRyeVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudHJ5LW9wdGlvblwiPlxuICAgICAgICAgICAgPGltZyBbaGVpZ2h0XT1cIjIwXCIgW3dpZHRoXT1cIjI0XCIgW2F0dHIuc3JjXT1cImNvdW50cnlGbGFnU3JjICsgY291bnRyeT8uYWxwaGEyQ29kZT8udG9Mb3dlckNhc2UoKSEgKyAnLnN2ZydcIlxuICAgICAgICAgICAgICAgICBbYWx0XT1cIidDb3VudHJ5IGZsYWcgJyArIGNvdW50cnk/LmFscGhhMkNvZGU/LnRvTG93ZXJDYXNlKCkhXCI+XG4gICAgICAgICAgICA8c21hbGw+e3sgJGFueShbY291bnRyeT8ubmFtZSwgJygnICsgY291bnRyeT8uY2FsbGluZ0NvZGUgKyAnKSddKSB8IGpvaW5TdHJpbmdzIDogJyAnIH19PC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPGlucHV0XG4gICAgKGlucHV0KT1cIm9uSW5wdXQoZm9ybS5nZXQoJ3Bob25lX251bWJlcicpIS52YWx1ZSlcIlxuICAgIGZvcm1Db250cm9sTmFtZT1cInBob25lX251bWJlclwiXG4gICAgKGNsaWNrKT1cImRpc2FibGVDbGljaygkZXZlbnQpXCJcbiAgICBbbmdTdHlsZV09XCJ7IG9wYWNpdHk6IGRpc2FibGVkID8gMC41IDogMSB9XCJcbiAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIG1hdElucHV0XG4gICAgdHlwZT1cInRleHRcIlxuICAvPlxuXG4gIDxtYXQtaGludCBjbGFzcz1cImVycm9yXCIgKm5nSWY9XCJlcnJvcnNMZW5ndGggfHwgKG5nQ29udHJvbD8uZXJyb3JzIHwgaGFzVmFsaWRhdGlvbkVycm9yKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlcnJvcnNMZW5ndGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvcnNcIiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgX2Vycm9yczsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgIDx1aS1pY29uIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIiBbbmFtZV09XCInRXJyb3InXCI+PC91aS1pY29uPlxuICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImVycm9yXCI+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8dWktdmFsaWRhdGlvbi1lcnJvciAqbmdJZj1cIm5nQ29udHJvbCAmJiAhaGlkZUJ1aWx0SW5FcnJvcnNcIiBbbmdDb250cm9sXT1cIm5nQ29udHJvbFwiIFtsYWJlbF09XCJoaWRlTGFiZWxJbkVycm9ycyA/IG51bGwgOiAoJ0NPTU1PTi5QSE9ORV9OVU1CRVInIHwgdWlUcmFuc2xhdGUgfCBhc3luYylcIj48L3VpLXZhbGlkYXRpb24tZXJyb3I+XG5cbiAgPC9tYXQtaGludD5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=