@ngrdt/menu 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/menu/rdt-menu.component.mjs +6 -12
- package/esm2022/lib/menu-bar/rdt-menu-bar.component.mjs +4 -4
- package/esm2022/lib/menu-base/rdt-menu-base.component.mjs +104 -27
- package/esm2022/lib/menu-overlay/rdt-menu-overlay.component.mjs +38 -33
- package/esm2022/lib/private-models.mjs +8 -1
- package/fesm2022/ngrdt-menu.mjs +218 -137
- package/fesm2022/ngrdt-menu.mjs.map +1 -1
- package/lib/menu/rdt-menu.component.d.ts +0 -1
- package/lib/menu-base/rdt-menu-base.component.d.ts +24 -6
- package/lib/menu-overlay/rdt-menu-overlay.component.d.ts +9 -6
- package/lib/private-models.d.ts +17 -7
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ import { KB_CODE, RdtObjectUtils, RdtStringUtils, } from '@ngrdt/utils';
|
|
|
7
7
|
import { delay, first, map, of } from 'rxjs';
|
|
8
8
|
import { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';
|
|
9
9
|
import { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, } from '../models';
|
|
10
|
+
import { RdtMenuExpandSource, } from '../private-models';
|
|
10
11
|
import { FOCUS_VISIBLE, areHorDirsEqual, areVertDirsEqual, findNextItemWithPrefix, menuItemHasChildren, menuItemHasRoute, } from '../utils';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
import * as i1 from "@angular/common";
|
|
@@ -66,7 +67,7 @@ export class RdtMenuOverlayComponent {
|
|
|
66
67
|
keyActions = {
|
|
67
68
|
[KB_CODE.ARROW.UP]: (index) => this.focusPrevItem(index),
|
|
68
69
|
[KB_CODE.ARROW.DOWN]: (index) => this.focusNextItem(index),
|
|
69
|
-
[KB_CODE.ARROW.RIGHT]: (index) => this.openSubmenu(index, 'first'),
|
|
70
|
+
[KB_CODE.ARROW.RIGHT]: (index) => this.openSubmenu(index, 'first', RdtMenuExpandSource.Shortcut),
|
|
70
71
|
[KB_CODE.ARROW.LEFT]: () => this.closeSelf(),
|
|
71
72
|
[KB_CODE.HOME]: () => this.focusItem(0),
|
|
72
73
|
[KB_CODE.END]: () => this.focusItem(this.item.items.length - 1),
|
|
@@ -74,6 +75,17 @@ export class RdtMenuOverlayComponent {
|
|
|
74
75
|
[KB_CODE.ENTER]: (index) => this.invokeItemClickByIndex(index),
|
|
75
76
|
[KB_CODE.SPACEBAR]: (index) => this.invokeItemClickByIndex(index),
|
|
76
77
|
};
|
|
78
|
+
get selfExpandSrc() {
|
|
79
|
+
if (this.expanded) {
|
|
80
|
+
if (this.parentMenu) {
|
|
81
|
+
return this.parentMenu.expandedChild?.src;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return this.topLevelMenu.expandedChild?.src;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
77
89
|
ngOnInit() {
|
|
78
90
|
this.setClasses();
|
|
79
91
|
this.listenTabKeyPress();
|
|
@@ -179,35 +191,26 @@ export class RdtMenuOverlayComponent {
|
|
|
179
191
|
this.recalculateChildren();
|
|
180
192
|
}
|
|
181
193
|
onItemPointerEnter(item) {
|
|
182
|
-
if (this.topLevelMenu.openOnHover
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
194
|
+
if (this.topLevelMenu.openOnHover &&
|
|
195
|
+
this.expandedChild?.src !== RdtMenuExpandSource.Click) {
|
|
196
|
+
this.autofocusSubmenuItem = null;
|
|
197
|
+
if (menuItemHasChildren(item)) {
|
|
198
|
+
this.expandedChild = { item, src: RdtMenuExpandSource.Hover };
|
|
199
|
+
this.expanded = true;
|
|
186
200
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
menu.expandedChild = item2;
|
|
191
|
-
menu.expanded = true;
|
|
192
|
-
item2 = menu.item;
|
|
193
|
-
menu = menu.parentMenu;
|
|
201
|
+
else {
|
|
202
|
+
//console.log('expanded child', this.expandedChild);
|
|
203
|
+
this.expandedChild = null;
|
|
194
204
|
}
|
|
195
205
|
}
|
|
196
206
|
}
|
|
197
|
-
onItemPointerLeave(item) {
|
|
198
|
-
if (this.expandedChild &&
|
|
199
|
-
this.topLevelMenu.openOnHover &&
|
|
200
|
-
this.expandedChild === item &&
|
|
201
|
-
menuItemHasChildren(item)) {
|
|
202
|
-
this.autofocusSubmenuItem = null;
|
|
203
|
-
this.expandedChild = null;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
207
|
onItemClick(item) {
|
|
207
208
|
const hasChildren = menuItemHasChildren(item);
|
|
208
|
-
if (hasChildren && this.expandedChild !== item)
|
|
209
|
+
if ((hasChildren && this.expandedChild?.item !== item) ||
|
|
210
|
+
(this.topLevelMenu.openOnHover &&
|
|
211
|
+
this.expandedChild?.src === RdtMenuExpandSource.Hover)) {
|
|
209
212
|
this.autofocusSubmenuItem = null;
|
|
210
|
-
this.expandedChild = item;
|
|
213
|
+
this.expandedChild = { item, src: RdtMenuExpandSource.Click };
|
|
211
214
|
}
|
|
212
215
|
else {
|
|
213
216
|
this.expandedChild = null;
|
|
@@ -233,7 +236,7 @@ export class RdtMenuOverlayComponent {
|
|
|
233
236
|
}
|
|
234
237
|
closeSubmenus(focusExpanded = false) {
|
|
235
238
|
if (focusExpanded && this.expandedChild) {
|
|
236
|
-
this.focusItem(this.expandedChild);
|
|
239
|
+
this.focusItem(this.expandedChild.item);
|
|
237
240
|
}
|
|
238
241
|
this.expandedChild = null;
|
|
239
242
|
this.cd.markForCheck();
|
|
@@ -244,7 +247,7 @@ export class RdtMenuOverlayComponent {
|
|
|
244
247
|
this.autofocusSubmenuItem = null;
|
|
245
248
|
this.autofocusItem = null;
|
|
246
249
|
if (children.length > 0) {
|
|
247
|
-
this.expandAndGetChild(thisItem)
|
|
250
|
+
this.expandAndGetChild(thisItem, RdtMenuExpandSource.Focus)
|
|
248
251
|
.pipe(delay(1))
|
|
249
252
|
.subscribe((overlay) => {
|
|
250
253
|
overlay.focusItemRecursively(children);
|
|
@@ -261,11 +264,11 @@ export class RdtMenuOverlayComponent {
|
|
|
261
264
|
setTimeout(() => this.focusItem(thisItem), 1);
|
|
262
265
|
}
|
|
263
266
|
}
|
|
264
|
-
expandAndGetChild(item) {
|
|
267
|
+
expandAndGetChild(item, src) {
|
|
265
268
|
if (this.item.items.indexOf(item) < 0) {
|
|
266
269
|
throw new Error('Attempting to expand item that is not child item of this.item');
|
|
267
270
|
}
|
|
268
|
-
this.expandedChild = item;
|
|
271
|
+
this.expandedChild = { item, src };
|
|
269
272
|
this.cd.markForCheck();
|
|
270
273
|
const child = this.children.find((child) => child.item === item);
|
|
271
274
|
if (child) {
|
|
@@ -296,6 +299,8 @@ export class RdtMenuOverlayComponent {
|
|
|
296
299
|
}
|
|
297
300
|
}
|
|
298
301
|
onTabKeyPress(event) {
|
|
302
|
+
console.log('tab key pressed', event);
|
|
303
|
+
setTimeout(() => console.log('active element', this.document.activeElement), 300);
|
|
299
304
|
// Do not prevent default to correctly switch to previous element
|
|
300
305
|
event.originalEvent.stopPropagation();
|
|
301
306
|
// Wait for document.activeElement to switch to new element
|
|
@@ -345,10 +350,10 @@ export class RdtMenuOverlayComponent {
|
|
|
345
350
|
const prev = (itemIndex - 1 + this.item.items.length) % this.item.items.length;
|
|
346
351
|
this.focusItem(prev);
|
|
347
352
|
}
|
|
348
|
-
openSubmenu(itemIndex, visibleFocus) {
|
|
353
|
+
openSubmenu(itemIndex, visibleFocus, src) {
|
|
349
354
|
if (itemIndex < this.item.items.length &&
|
|
350
355
|
menuItemHasChildren(this.item.items[itemIndex])) {
|
|
351
|
-
this.expandedChild = this.item.items[itemIndex];
|
|
356
|
+
this.expandedChild = { item: this.item.items[itemIndex], src };
|
|
352
357
|
this.autofocusSubmenuItem = visibleFocus;
|
|
353
358
|
}
|
|
354
359
|
}
|
|
@@ -361,7 +366,7 @@ export class RdtMenuOverlayComponent {
|
|
|
361
366
|
}
|
|
362
367
|
}
|
|
363
368
|
checkActiveElement(event) {
|
|
364
|
-
if (this.topLevelMenu.closeOnFocusOut) {
|
|
369
|
+
if (this.topLevelMenu.closeOnFocusOut && !this.topLevelMenu.openOnHover) {
|
|
365
370
|
const thisEl = this.elRef.nativeElement;
|
|
366
371
|
const target = event.relatedTarget;
|
|
367
372
|
if (!(target instanceof HTMLElement) || !thisEl.contains(target)) {
|
|
@@ -547,11 +552,11 @@ export class RdtMenuOverlayComponent {
|
|
|
547
552
|
.subscribe((event) => this.onTabKeyPress(event));
|
|
548
553
|
}
|
|
549
554
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
550
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: { item: "item", level: "level", preferredHorizontalDir: "preferredHorizontalDir", preferredVerticalDir: "preferredVerticalDir", expanded: "expanded", autofocusItem: "autofocusItem", anchorElement: "anchorElement" }, host: { listeners: { "window:focusout": "checkActiveElement($event)" }, properties: { "class.expanded": "this.expanded", "attr.role": "this.roleAttr", "attr.tabindex": "this.tabindexAttr", "style.z-index": "this.zIndex" } }, viewQueries: [{ propertyName: "menuItemContainer", first: true, predicate: ["menuItemContainer"], descendants: true }, { propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n
|
|
555
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: { item: "item", level: "level", preferredHorizontalDir: "preferredHorizontalDir", preferredVerticalDir: "preferredVerticalDir", expanded: "expanded", autofocusItem: "autofocusItem", anchorElement: "anchorElement" }, host: { listeners: { "window:focusout": "checkActiveElement($event)" }, properties: { "class.expanded": "this.expanded", "attr.role": "this.roleAttr", "attr.tabindex": "this.tabindexAttr", "style.z-index": "this.zIndex" } }, viewQueries: [{ propertyName: "menuItemContainer", first: true, predicate: ["menuItemContainer"], descendants: true }, { propertyName: "children", predicate: RdtMenuOverlayComponent, descendants: true }, { propertyName: "focusableElements", predicate: ["focusableItem"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">></span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background);overflow-y:auto}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["anyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
551
556
|
}
|
|
552
557
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuOverlayComponent, decorators: [{
|
|
553
558
|
type: Component,
|
|
554
|
-
args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n
|
|
559
|
+
args: [{ selector: 'rdt-menu-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ul class=\"menu-item-container\" role=\"presentation\" #menuItemContainer>\r\n <li\r\n *ngFor=\"let item of item.items; let i = index\"\r\n role=\"presentation\"\r\n class=\"menu-item\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n rdtAnyRouteActive=\"menu-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n #anchorEl\r\n >\r\n <ng-container *ngIf=\"!item.routerLink && !item.externalLink\">\r\n <button\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"chevron_right\"\r\n class=\"menu-item-icon\"\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n -->\r\n <span class=\"menu-item-icon\" *ngIf=\"item.items\">></span>\r\n </div>\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-item-right-content\">\r\n <span *ngIf=\"item.shortcut\" class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n <!-- TODO:\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-item-icon\"\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n <ng-container *ngIf=\"item.routerLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [queryParams]=\"item.queryParams\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.externalLink\">\r\n <a\r\n #focusableItem\r\n class=\"menu-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Child menus exist only if this menu is expanded. -->\r\n <!-- Only one invisible level is always attached to DOM, the rest does not exist. -->\r\n <rdt-menu-overlay\r\n *ngIf=\"item.items && expanded\"\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"horizontalDir?.dir!\"\r\n [preferredVerticalDir]=\"verticalDir?.dir!\"\r\n [level]=\"level + 1\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n </li>\r\n</ul>\r\n", styles: [":host{visibility:hidden;position:fixed;min-width:var(--rdt-menu-min-width);box-shadow:var(--rdt-menu-box-shadow);border-radius:var(--rdt-menu-border-radius);overflow-x:hidden;overflow-y:auto;max-height:calc(100vh - var(--rdt-menu-margin-top, 0px) - var(--rdt-menu-margin-bottom, 0px))}:host.expanded{visibility:visible}.menu-item-container{list-style-type:none;padding:var(--rdt-menu-padding-horizontal-padding) 0;border-radius:var(--rdt-menu-border-radius);background-color:var(--rdt-menu-item-background);overflow-y:auto}.menu-item{cursor:pointer;position:relative;box-sizing:border-box}.menu-item.menu-item-route-active>.menu-item-content{background-color:var(--rdt-menu-item-background-route-active)}.menu-item-content{display:flex;align-items:center;padding:var(--rdt-menu-item-padding);width:100%;background-color:var(--rdt-menu-item-background);color:var(--rdt-menu-item-text-color)}.menu-item-content:hover{background-color:var(--rdt-menu-item-background-hover)}.menu-item-content.focus-visible:focus,.menu-item-content:focus-visible{background-color:var(--rdt-menu-item-background-focus);outline:none}\n"] }]
|
|
555
560
|
}], propDecorators: { children: [{
|
|
556
561
|
type: ViewChildren,
|
|
557
562
|
args: [RdtMenuOverlayComponent]
|
|
@@ -591,4 +596,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
591
596
|
type: HostListener,
|
|
592
597
|
args: ['window:focusout', ['$event']]
|
|
593
598
|
}] } });
|
|
594
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFFUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsR0FDMUIsTUFBTSxXQUFXLENBQUM7QUFLbkIsT0FBTyxFQUNMLGFBQWEsRUFHYixlQUFlLEVBQ2YsZ0JBQWdC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QUl4QixNQUFNO3NCQURULFdBQVc7dUJBQUMsZUFBZTtnQkFrWnBCLGtCQUFrQjtzQkFEekIsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBEZXN0cm95UmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgUmR0U2hvcnRjdXQsXHJcbiAgUmR0U2hvcnRjdXRFdmVudCxcclxuICBSZHRTaG9ydGN1dFNlcnZpY2UsXHJcbn0gZnJvbSAnQG5ncmR0L3Nob3J0Y3V0cyc7XHJcbmltcG9ydCB7XHJcbiAgS0JfQ09ERSxcclxuICBSZHRIb3Jpem9udGFsRGlyZWN0aW9uLFxyXG4gIFJkdE9iamVjdFV0aWxzLFxyXG4gIFJkdFN0cmluZ1V0aWxzLFxyXG4gIFJkdFZlcnRpY2FsRGlyZWN0aW9uLFxyXG59IGZyb20gJ0BuZ3JkdC91dGlscyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaXJzdCwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZHRNZW51QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUtYmFzZS9yZHQtbWVudS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSLFxyXG4gIERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVIsXHJcbn0gZnJvbSAnLi4vbW9kZWxzJztcclxuaW1wb3J0IHtcclxuICBQYXJzZWRSZHRNZW51SXRlbSxcclxuICBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbixcclxufSBmcm9tICcuLi9wcml2YXRlLW1vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRk9DVVNfVklTSUJMRSxcclxuICBIb3JEaXJXaXRoT2Zmc2V0LFxyXG4gIFZlcnREaXJXaXRoT2Zmc2V0LFxyXG4gIGFyZUhvckRpcnNFcXVhbCxcclxuICBhcmVWZXJ0RGlyc0VxdWFsLFxyXG4gIGZpbmROZXh0SXRlbVdpdGhQcmVmaXgsXHJcbiAgbWVudUl0ZW1IYXNDaGlsZHJlbixcclxuICBtZW51SXRlbUhhc1JvdXRlLFxyXG59IGZyb20gJy4uL3V0aWxzJztcclxuXHJcbi8vIFRPRE86IFNwbGl0IHBvc2l0aW9uaW5nIGFuZCBzaG9ydGN1dC9mb2N1cyBtYW5hZ2VtZW50IGluIHNlcGFyYXRlIGNsYXNzZXNcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyZHQtbWVudS1vdmVybGF5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmR0TWVudU92ZXJsYXlDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XHJcbntcclxuICByZWFkb25seSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSBpbmplY3QoRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pO1xyXG4gIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHRvcExldmVsTWVudSA9IGluamVjdChSZHRNZW51QmFzZUNvbXBvbmVudCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRNZW51ID0gaW5qZWN0KFJkdE1lbnVPdmVybGF5Q29tcG9uZW50LCB7XHJcbiAgICBvcHRpb25hbDogdHJ1ZSxcclxuICAgIHNraXBTZWxmOiB0cnVlLFxyXG4gIH0pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzaG9ydGN1dFNlcnZpY2UgPSBpbmplY3QoUmR0U2hvcnRjdXRTZXJ2aWNlKTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihSZHRNZW51T3ZlcmxheUNvbXBvbmVudClcclxuICBwcml2YXRlIGNoaWxkcmVuITogUXVlcnlMaXN0PFJkdE1lbnVPdmVybGF5Q29tcG9uZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZm9jdXNhYmxlSXRlbScpXHJcbiAgcHJpdmF0ZSBmb2N1c2FibGVFbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxMSUVsZW1lbnQ+PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWVudUl0ZW1Db250YWluZXInKVxyXG4gIHByaXZhdGUgbWVudUl0ZW1Db250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxVTGlzdEVsZW1lbnQ+O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGl0ZW0hOiBQYXJzZWRSZHRNZW51SXRlbVdpdGhDaGlsZHJlbjtcclxuXHJcbiAgQElucHV0KClcclxuICBsZXZlbCE6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uID0gREVGQVVMVF9NRU5VX0hPUklaT05UQUxfRElSO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZFZlcnRpY2FsRGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvbiA9IERFRkFVTFRfTUVOVV9WRVJUSUNBTF9ESVI7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZXhwYW5kZWQnKVxyXG4gIEBJbnB1dCgpXHJcbiAgZXhwYW5kZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBhdXRvZm9jdXNJdGVtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIEVsZW1lbnQgdXNlZCB0byByZWxhdGl2ZWx5IHBvc2l0aW9uIG1lbnUsXHJcbiAgLy8gdHlwaWNhbGx5IHBhcmVudCBlbGVtZW50LlxyXG4gIC8vIElmIG5vdCBzcGVjaWZpZWQsIHBhcmVudCBlbGVtZW50IGlzIHVzZWQuXHJcbiAgQElucHV0KClcclxuICBhbmNob3JFbGVtZW50PzogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcclxuICBwcml2YXRlIHJvbGVBdHRyID0gJ21lbnUnO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxyXG4gIHByaXZhdGUgdGFiaW5kZXhBdHRyID0gJy0xJztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS56LWluZGV4JylcclxuICBnZXQgekluZGV4KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgKyAxMDtcclxuICB9XHJcblxyXG4gIGdldCBpc1Jvb3RMZXZlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmxldmVsID09PSAwO1xyXG4gIH1cclxuXHJcbiAgLy8gQm91bmRpbmcgYm94IG9mIHRoaXMgZXhjbHVkaW5nIGFueSBleHRyYSBvZmZzZXQuXHJcbiAgcHJpdmF0ZSBfYm94ITogRE9NUmVjdDtcclxuICBnZXQgYm94KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2JveDtcclxuICB9XHJcblxyXG4gIC8vIEJvdW5kaW5nIGJveCBvZiBwYXJlbnQgZWxlbWVudC5cclxuICBwcml2YXRlIF9hbmNob3JCb3ghOiBET01SZWN0O1xyXG4gIHByaXZhdGUgX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogMCwgYm90dG9tOiAwIH07XHJcblxyXG4gIC8vIFJlY2FsY3VsYXRlIGNoaWxkIGNvbXBvbmVudHMgb25seSBhZnRlciB0aGV5IGFyZSBpbml0aWFsaXplZC5cclxuICBwcml2YXRlIF92aWV3V2FzSW5pdCA9IGZhbHNlO1xyXG5cclxuICAvLyBDdXJyZW50bHkgYXBwbGllZCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBkaXJlY3Rpb25zLlxyXG4gIHByb3RlY3RlZCB2ZXJ0aWNhbERpcjogVmVydERpcldpdGhPZmZzZXQgfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgaG9yaXpvbnRhbERpcjogSG9yRGlyV2l0aE9mZnNldCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgZXhwYW5kZWRDaGlsZDogUGFyc2VkUmR0TWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuICBwcm90ZWN0ZWQgYXV0b2ZvY3VzU3VibWVudUl0ZW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcmVhZG9ubHkga2V5QWN0aW9ucyA9IHtcclxuICAgIFtLQl9DT0RFLkFSUk9XLlVQXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNQcmV2SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5ET1dOXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuZm9jdXNOZXh0SXRlbShpbmRleCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5SSUdIVF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLm9wZW5TdWJtZW51KGluZGV4LCAnZmlyc3QnKSxcclxuICAgIFtLQl9DT0RFLkFSUk9XLkxFRlRdOiAoKSA9PiB0aGlzLmNsb3NlU2VsZigpLFxyXG4gICAgW0tCX0NPREUuSE9NRV06ICgpID0+IHRoaXMuZm9jdXNJdGVtKDApLFxyXG4gICAgW0tCX0NPREUuRU5EXTogKCkgPT4gdGhpcy5mb2N1c0l0ZW0odGhpcy5pdGVtLml0ZW1zLmxlbmd0aCAtIDEpLFxyXG4gICAgW0tCX0NPREUuRVNDQVBFXTogKCkgPT4gdGhpcy5jbG9zZVNlbGYoKSxcclxuICAgIFtLQl9DT0RFLkVOVEVSXTogKGluZGV4OiBudW1iZXIpID0+IHRoaXMuaW52b2tlSXRlbUNsaWNrQnlJbmRleChpbmRleCksXHJcbiAgICBbS0JfQ09ERS5TUEFDRUJBUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRDbGFzc2VzKCk7XHJcbiAgICB0aGlzLmxpc3RlblRhYktleVByZXNzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWNhbGNUcmlnZ2VycyA9IFtcclxuICAgICAgJ3ByZWZlcnJlZEhvcml6b250YWxEaXInLFxyXG4gICAgICAncHJlZmVycmVkVmVydGljYWxEaXInLFxyXG4gICAgICAnZXhwYW5kZWQnLFxyXG4gICAgXTtcclxuICAgIGlmIChyZWNhbGNUcmlnZ2Vycy5zb21lKChrZXkpID0+IGtleSBpbiBjaGFuZ2VzKSAmJiB0aGlzLl92aWV3V2FzSW5pdCkge1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyLFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXJcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZXhwYW5kZWQpIHtcclxuICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoJ2V4cGFuZGVkJyBpbiBjaGFuZ2VzICYmIHRoaXMuZXhwYW5kZWQpIHtcclxuICAgICAgLy8gV2FpdCBmb3IgQW5ndWxhciB0byBzZXQgLmV4cGFuZGVkIGNsYXNzLFxyXG4gICAgICAvLyBiZWNhdXNlIGludmlzaWJsZSBlbGVtZW50cyBjYW5ub3QgYmUgZm9jdXNlZC5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmF1dG9mb2N1c0l0ZW0pIHtcclxuICAgICAgICAgIGNhc2UgbnVsbDpcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgZmFsc2UpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ2ZpcnN0JzpcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oMCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnbGFzdCc6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuaXRlbS5pdGVtcy5sZW5ndGggLSAxLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5tZWFzdXJlQ29udGFpbmVyUGFkZGluZygpO1xyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICB0aGlzLnByZWZlcnJlZEhvcml6b250YWxEaXIsXHJcbiAgICAgIHRoaXMucHJlZmVycmVkVmVydGljYWxEaXJcclxuICAgICk7XHJcbiAgICB0aGlzLl92aWV3V2FzSW5pdCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1pbk9mZnNldExlZnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5sZWZ0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXhPZmZzZXRMZWZ0KCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS53aWR0aCAtXHJcbiAgICAgIHRoaXMuX2JveC53aWR0aCAtXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ucmlnaHRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1pbk9mZnNldFRvcCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnRvcDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4T2Zmc2V0VG9wKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS5oZWlnaHQgLVxyXG4gICAgICB0aGlzLl9ib3guaGVpZ2h0IC1cclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5ib3R0b21cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvbixcclxuICAgIHByZWZlcnJlZFZlcnRpY2FsRGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvblxyXG4gICkge1xyXG4gICAgLy8gTWFrZSBtZW51IGludmlzaWJsZSBzbyB0aGUgbWVudSBkb2VzIG5vdCBtb3ZlIGFyb3VuZCBpbiBjYXNlIG9mIHNsb3cgY29tcHV0ZXIuXHJcbiAgICB0aGlzLm1lYXN1cmVCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2JveCB8fCAhdGhpcy5fYW5jaG9yQm94KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdIb3JEaXIgPSB0aGlzLmdldFJlYWxIb3Jpem9udGFsRGlyKHByZWZlcnJlZEhvcml6b250YWxEaXIpO1xyXG4gICAgY29uc3QgbmV3VmVydERpciA9IHRoaXMuZ2V0UmVhbFZlcnRpY2FsRGlyKHByZWZlcnJlZFZlcnRpY2FsRGlyKTtcclxuXHJcbiAgICAvLyBIb3Jpem9udGFsIGRpcmVjdGlvblxyXG4gICAgaWYgKG5ld0hvckRpci5kaXIgPT09ICdyaWdodCcpIHtcclxuICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LmxlZnQ7XHJcbiAgICAgIGlmICghdGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChuZXdIb3JEaXIuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgbmV3SG9yRGlyLmxlZnQgKz0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RyaWN0aW9ucyBmcm9tIGxlZnQgbWVudSBhbmQgcmlnaHQgbWVudVxyXG4gICAgbmV3SG9yRGlyLmxlZnQgPSBNYXRoLm1pbihcclxuICAgICAgTWF0aC5tYXgodGhpcy5nZXRNaW5PZmZzZXRMZWZ0KCksIG5ld0hvckRpci5sZWZ0KSxcclxuICAgICAgdGhpcy5nZXRNYXhPZmZzZXRMZWZ0KClcclxuICAgICk7XHJcblxyXG4gICAgLy8gVmVydGljYWwgZGlyZWN0aW9uXHJcbiAgICBpZiAobmV3VmVydERpci5kaXIgPT09ICdkb3duJykge1xyXG4gICAgICBuZXdWZXJ0RGlyLnRvcCA9IHRoaXMuX2FuY2hvckJveC50b3A7XHJcbiAgICAgIGlmICh0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgKz0gdGhpcy5fYW5jaG9yQm94LmhlaWdodDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCAtPSB0aGlzLl9jb250YWluZXJQYWRkaW5nLnRvcDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChuZXdWZXJ0RGlyLmRpciA9PT0gJ3VwJykge1xyXG4gICAgICBuZXdWZXJ0RGlyLnRvcCA9IHRoaXMuX2FuY2hvckJveC50b3AgLSB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICBpZiAoIXRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdWZXJ0RGlyLnRvcCArPSB0aGlzLl9hbmNob3JCb3guaGVpZ2h0ICsgdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXN0cmljdGlvbnMgZnJvbSBoZWFkZXIgYW5kIGZvb3RlclxyXG4gICAgbmV3VmVydERpci50b3AgPSBNYXRoLm1pbihcclxuICAgICAgTWF0aC5tYXgodGhpcy5nZXRNaW5PZmZzZXRUb3AoKSwgbmV3VmVydERpci50b3ApLFxyXG4gICAgICB0aGlzLmdldE1heE9mZnNldFRvcCgpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWFyZUhvckRpcnNFcXVhbCh0aGlzLmhvcml6b250YWxEaXIsIG5ld0hvckRpcikgfHxcclxuICAgICAgIWFyZVZlcnREaXJzRXF1YWwodGhpcy52ZXJ0aWNhbERpciwgbmV3VmVydERpcilcclxuICAgICkge1xyXG4gICAgICB0aGlzLmhvcml6b250YWxEaXIgPSBuZXdIb3JEaXI7XHJcbiAgICAgIHRoaXMudmVydGljYWxEaXIgPSBuZXdWZXJ0RGlyO1xyXG4gICAgICB0aGlzLnNldENsYXNzZXMoKTtcclxuICAgICAgdGhpcy5tZWFzdXJlQm91bmRpbmdSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNoaWxkcmVuKCk7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGlmICh0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3Zlcikge1xyXG4gICAgICBpZiAodGhpcy5leHBhbmRlZENoaWxkICE9PSBpdGVtICYmIG1lbnVJdGVtSGFzQ2hpbGRyZW4oaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBpdGVtO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbWVudSA9IHRoaXMucGFyZW50TWVudTtcclxuICAgICAgbGV0IGl0ZW0yID0gdGhpcy5pdGVtO1xyXG4gICAgICB3aGlsZSAobWVudSAmJiAhbWVudS5leHBhbmRlZENoaWxkKSB7XHJcbiAgICAgICAgbWVudS5leHBhbmRlZENoaWxkID0gaXRlbTI7XHJcbiAgICAgICAgbWVudS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgaXRlbTIgPSBtZW51Lml0ZW07XHJcbiAgICAgICAgbWVudSA9IG1lbnUucGFyZW50TWVudTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtUG9pbnRlckxlYXZlKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCAmJlxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5vcGVuT25Ib3ZlciAmJlxyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPT09IGl0ZW0gJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKTtcclxuICAgIGlmIChoYXNDaGlsZHJlbiAmJiB0aGlzLmV4cGFuZGVkQ2hpbGQgIT09IGl0ZW0pIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gQ291bGQgYWxzbyBsaXN0ZW4gdG8gcm91dGVyIGV2ZW50cywgYnV0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieVxyXG4gICAgLy8gY2hpbGQgcm91dGVyIG5hdmlnYXRpb24uXHJcbiAgICBpZiAoIWhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlU3VibWVudXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaXRlbS5jb21tYW5kID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGl0ZW0uY29tbWFuZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNSb3V0ZShpdGVtKSAmJiBpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoaXRlbS5yb3V0ZXJMaW5rKTtcclxuICAgIH1cclxuICAgIHRoaXMub25JdGVtQ2xpY2soaXRlbSk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gJ2ZpcnN0JztcclxuICB9XHJcblxyXG4gIGdldENoaWxkUm91dGVzKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuZ2V0Q2hpbGRSb3V0ZXMoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQgPSBmYWxzZSkge1xyXG4gICAgaWYgKGZvY3VzRXhwYW5kZWQgJiYgdGhpcy5leHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGZvY3VzSXRlbVJlY3Vyc2l2ZWx5KHBhdGg6IFBhcnNlZFJkdE1lbnVJdGVtW10pIHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gWy4uLnBhdGhdO1xyXG4gICAgY29uc3QgdGhpc0l0ZW0gPSBjaGlsZHJlbi5zaGlmdCgpITtcclxuXHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gbnVsbDtcclxuICAgIHRoaXMuYXV0b2ZvY3VzSXRlbSA9IG51bGw7XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5leHBhbmRBbmRHZXRDaGlsZCh0aGlzSXRlbSlcclxuICAgICAgICAucGlwZShkZWxheSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChvdmVybGF5KSA9PiB7XHJcbiAgICAgICAgICBvdmVybGF5LmZvY3VzSXRlbVJlY3Vyc2l2ZWx5KGNoaWxkcmVuKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZpcnN0IGZvY3VzIHRoZSBjb3JyZWN0IGl0ZW0gYmVjYXVzZSBzdWJtZW51IG1pZ2h0IGhhdmUgZm9jdXMgb24gaXQuXHJcbiAgICAgIC8vIFJlbW92aW5nIGZvY3VzZWQgZWxlbWVudCBmcm9tIERPTSByZXN1bHRzIGluIHdpbmRvdzpmb2N1c291dCBldmVudFxyXG4gICAgICAvLyBhbmQgdGhhdCBjbG9zZXMgYWxsIG1lbnVzXHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKTtcclxuICAgICAgLy8gTm93IGNsb3NlIHN1Ym1lbnVzIGFuZCB0aGVyZWZvcmUgcmVtb3ZlIHRoZW0gZnJvbSBET01cclxuICAgICAgdGhpcy5jbG9zZVN1Ym1lbnVzKCk7XHJcbiAgICAgIC8vIFdhaXQgdW50aWwgdGhleSBhcmUgcmVtb3ZlZCBhbmQgZm9jdXMgdGhlIGNvcnJlY3QgaXRlbSBhZ2FpblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXNJdGVtKSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFuZEdldENoaWxkKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAodGhpcy5pdGVtLml0ZW1zLmluZGV4T2YoaXRlbSkgPCAwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnQXR0ZW1wdGluZyB0byBleHBhbmQgaXRlbSB0aGF0IGlzIG5vdCBjaGlsZCBpdGVtIG9mIHRoaXMuaXRlbSdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IGl0ZW07XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG5cclxuICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQuaXRlbSA9PT0gaXRlbSk7XHJcbiAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgcmV0dXJuIG9mKGNoaWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmNoYW5nZXMucGlwZShcclxuICAgICAgICBtYXAoKCkgPT4gdGhpcy5jaGlsZHJlbi5maW5kKChjaGlsZCkgPT4gY2hpbGQuaXRlbSA9PT0gaXRlbSkpLFxyXG4gICAgICAgIGZpcnN0KFJkdE9iamVjdFV0aWxzLm5vdE51bGxHdWFyZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbktleURvd24oaXRlbUluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBoYXNBY3Rpb24gPSBldmVudC5jb2RlIGluIHRoaXMua2V5QWN0aW9ucztcclxuICAgIGNvbnN0IGlzTGV0dGVyID1cclxuICAgICAgUmR0U3RyaW5nVXRpbHMuaXNBbHBoYWJldENoYXJhY3RlcihldmVudC5rZXkpIHx8XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzTnVtZXJpY0NoYXJhY3RlcihldmVudC5rZXkpO1xyXG5cclxuICAgIGlmIChoYXNBY3Rpb24gfHwgaXNMZXR0ZXIpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhhc0FjdGlvbikge1xyXG4gICAgICB0aGlzLmtleUFjdGlvbnNbZXZlbnQuY29kZV0oaXRlbUluZGV4KTtcclxuICAgIH0gZWxzZSBpZiAoaXNMZXR0ZXIpIHtcclxuICAgICAgY29uc3QgbmV4dCA9IGZpbmROZXh0SXRlbVdpdGhQcmVmaXgoXHJcbiAgICAgICAgdGhpcy5pdGVtLml0ZW1zLFxyXG4gICAgICAgIGl0ZW1JbmRleCxcclxuICAgICAgICBldmVudC5rZXlcclxuICAgICAgKTtcclxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRhYktleVByZXNzKGV2ZW50OiBSZHRTaG9ydGN1dEV2ZW50KSB7XHJcbiAgICAvLyBEbyBub3QgcHJldmVudCBkZWZhdWx0IHRvIGNvcnJlY3RseSBzd2l0Y2ggdG8gcHJldmlvdXMgZWxlbWVudFxyXG4gICAgZXZlbnQub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIFdhaXQgZm9yIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgdG8gc3dpdGNoIHRvIG5ldyBlbGVtZW50XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VTZWxmKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludm9rZUl0ZW1DbGlja0J5SW5kZXgoaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0uaXRlbXNbaXRlbUluZGV4XTtcclxuICAgIGlmICghaXRlbSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmludm9rZUl0ZW1DbGljayhpdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNJdGVtKGl0ZW06IG51bWJlciB8IFBhcnNlZFJkdE1lbnVJdGVtLCB2aXNpYmxlRm9jdXMgPSB0cnVlKSB7XHJcbiAgICBsZXQgaXRlbUluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xyXG4gICAgICBpdGVtSW5kZXggPSBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbUluZGV4ID0gdGhpcy5pdGVtLml0ZW1zLmluZGV4T2YoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGl0ZW1JbmRleCA+PSAwICYmIGl0ZW1JbmRleCA8IHRoaXMuZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYmx1ckFsbEZvY3VzYWJsZSgpO1xyXG4gICAgICB0aGlzLmZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleCwgdmlzaWJsZUZvY3VzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmx1ckFsbEZvY3VzYWJsZSgpIHtcclxuICAgIHRoaXMuZm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWwpID0+XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwubmF0aXZlRWxlbWVudCwgRk9DVVNfVklTSUJMRSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyLCB2aXNpYmxlRm9jdXM6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGVsUmVmID0gdGhpcy5mb2N1c2FibGVFbGVtZW50cy5nZXQoaXRlbUluZGV4KTtcclxuICAgIGlmIChlbFJlZikge1xyXG4gICAgICBpZiAodmlzaWJsZUZvY3VzKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbFJlZi5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKTtcclxuICAgICAgfVxyXG4gICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzTmV4dEl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IG5leHQgPSAoaXRlbUluZGV4ICsgMSkgJSB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzUHJldkl0ZW0oaXRlbUluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHByZXYgPVxyXG4gICAgICAoaXRlbUluZGV4IC0gMSArIHRoaXMuaXRlbS5pdGVtcy5sZW5ndGgpICUgdGhpcy5pdGVtLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuZm9jdXNJdGVtKHByZXYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvcGVuU3VibWVudShpdGVtSW5kZXg6IG51bWJlciwgdmlzaWJsZUZvY3VzOiAnZmlyc3QnIHwgJ2xhc3QnKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGl0ZW1JbmRleCA8IHRoaXMuaXRlbS5pdGVtcy5sZW5ndGggJiZcclxuICAgICAgbWVudUl0ZW1IYXNDaGlsZHJlbih0aGlzLml0ZW0uaXRlbXNbaXRlbUluZGV4XSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSB0aGlzLml0ZW0uaXRlbXNbaXRlbUluZGV4XTtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IHZpc2libGVGb2N1cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xvc2VTZWxmKGZvY3VzRXhwYW5kZWQgPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRNZW51KSB7XHJcbiAgICAgIHRoaXMucGFyZW50TWVudS5jbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcsIFsnJGV2ZW50J10pXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZUVsZW1lbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnRvcExldmVsTWVudS5jbG9zZU9uRm9jdXNPdXQpIHtcclxuICAgICAgY29uc3QgdGhpc0VsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIXRoaXNFbC5jb250YWlucyh0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQ2FsY3VsYXRlcyBkaXJlY3Rpb24gb2YgdGhpcyBtZW51IGFuZCBvZmZzZXQgaW4gY2FzZVxyXG4gIC8vIG1lbnUgd29uJ3QgZml0IGluIGxlZnQgbm9yIHJpZ2h0IG9mIHBhcmVudCBtZW51LlxyXG4gIHByaXZhdGUgZ2V0UmVhbEhvcml6b250YWxEaXIoXHJcbiAgICBwcmVmZXJyZWRIb3Jpem9udGFsRGlyOiBSZHRIb3Jpem9udGFsRGlyZWN0aW9uXHJcbiAgKTogSG9yRGlyV2l0aE9mZnNldCB7XHJcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xyXG4gICAgbGV0IHJpZ2h0OiBudW1iZXI7XHJcbiAgICAvLyBUaGlzIG1lbnUgaXMgZGlyZWN0bHkgdW5kZXIgbWVudWJhclxyXG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDApIHtcclxuICAgICAgbGVmdCA9IHRoaXMuX2FuY2hvckJveC5yaWdodCAtIHRoaXMuX2JveC53aWR0aDtcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2JveC53aWR0aCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBNZW51IGlzIG5lc3RlZFxyXG4gICAgICByaWdodCA9XHJcbiAgICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS53aWR0aCAtXHJcbiAgICAgICAgKHRoaXMuX2FuY2hvckJveC5yaWdodCArIHRoaXMuX2JveC53aWR0aCk7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gubGVmdCAtIHRoaXMuX2JveC53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBsZWZ0IC09IHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICAgIHJpZ2h0IC09IHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ucmlnaHQ7XHJcblxyXG4gICAgaWYgKHByZWZlcnJlZEhvcml6b250YWxEaXIgPT09ICdyaWdodCcpIHtcclxuICAgICAgLy8gV2UgdXNlIHByZWZlcnJlZCBpZiBwb3NzaWJsZS5cclxuICAgICAgaWYgKHJpZ2h0ID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdyaWdodCcsIGxlZnQ6IDAgfTtcclxuICAgICAgICAvLyBUaGVuIHRoZSBvdGhlciBvbmUuXHJcbiAgICAgIH0gZWxzZSBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgICAvLyBFZGdlIGNhc2UgaWYgbmVpdGhlciBkaXJlY3Rpb24gY2FuIGJlIHVzZWQgKHVsdHJhIG5hcnJvdyBzY3JlZW4pLlxyXG4gICAgICAgIC8vIENob29zZSBkaXJlY3Rpb24gdGhhdCBjb3ZlcnMgbGVhc3Qgb2YgcGFyZW50IG1lbnUuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChsZWZ0ID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdsZWZ0JywgbGVmdDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHJpZ2h0ID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdyaWdodCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKGxlZnQsIHJpZ2h0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRmluZHMgb3V0IHdoZXJlIHRvIHB1dCBtZW51IGluIGNhc2Ugc2NyZWVuIGlzIHRvbyBuYXJyb3cgZm9yIHR3byBtZW51c1xyXG4gIC8vIHRvIGZpdCBuZXh0IHRvIGVhY2ggb3RoZXIuIE1pbmltaXplcyBhcmVhIG9mIHBhcmVudCBtZW51IGNvdmVyZWQgYnkgdGhpcy5cclxuICBwcml2YXRlIGdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIoXHJcbiAgICBsZWZ0OiBudW1iZXIsXHJcbiAgICByaWdodDogbnVtYmVyXHJcbiAgKTogSG9yRGlyV2l0aE9mZnNldCB7XHJcbiAgICBjb25zdCBzY3JlZW5TdGFydCA9IHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICAgIGNvbnN0IHNjcmVlbkVuZCA9XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG4gICAgY29uc3Qgc2NyZWVuQ2VudGVyID0gKHNjcmVlblN0YXJ0IC0gc2NyZWVuRW5kKSAvIDI7XHJcblxyXG4gICAgY29uc3QgbGVmdFN0YXJ0ID0gTWF0aC5tYXgodGhpcy5fYW5jaG9yQm94LmxlZnQsIHNjcmVlblN0YXJ0KTtcclxuICAgIGNvbnN0IGxlZnRFbmQgPSBNYXRoLm1pbihcclxuICAgICAgdGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9hbmNob3JCb3gud2lkdGgsXHJcbiAgICAgIHNjcmVlbkNlbnRlclxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCByaWdodFN0YXJ0ID0gTWF0aC5tYXgoc2NyZWVuQ2VudGVyLCBsZWZ0RW5kKTtcclxuICAgIGNvbnN0IHJpZ2h0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5FbmRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGxlZnRFbmQgLSBsZWZ0U3RhcnQgPiByaWdodEVuZCAtIHJpZ2h0U3RhcnQpIHtcclxuICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiByaWdodCB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IC1sZWZ0IH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlYWxWZXJ0aWNhbERpcihcclxuICAgIHByZWZlcnJlZFZlcnRpY2FsRGlyOiBSZHRWZXJ0aWNhbERpcmVjdGlvblxyXG4gICk6IFZlcnREaXJXaXRoT2Zmc2V0IHtcclxuICAgIGxldCBib3R0b206IG51bWJlcjtcclxuICAgIGxldCB0b3A6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMCkge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0ICtcclxuICAgICAgICB0aGlzLl9hbmNob3JCb3guYm90dG9tIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJvdHRvbSA9XHJcbiAgICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xpZW50U2l6ZS5oZWlnaHQgLVxyXG4gICAgICAgIHRoaXMuX2FuY2hvckJveC50b3AgLVxyXG4gICAgICAgIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICAgIHRvcCA9IHRoaXMuX2FuY2hvckJveC5ib3R0b20gLSB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIHRvcCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnRvcDtcclxuICAgIGJvdHRvbSAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmJvdHRvbTtcclxuXHJcbiAgICBpZiAocHJlZmVycmVkVmVydGljYWxEaXIgPT09ICdkb3duJykge1xyXG4gICAgICBpZiAoYm90dG9tID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICdkb3duJywgdG9wOiAwIH07XHJcbiAgICAgIH0gZWxzZSBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodG9wID49IDApIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6ICd1cCcsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogcHJlZmVycmVkVmVydGljYWxEaXIsIHRvcDogMCB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNZWFzdXJlcyBib3VuZGluZyByZWN0IG9mIHRoaXMgYW5kIG9mZnNldCBjb250YWluZXJcclxuICAvLyBTaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBhZnRlciBwYXJlbnQgbWVudSBoYXMgYWxyZWFkeSBiZWVuIG1lYXN1cmVkLlxyXG4gIHByaXZhdGUgbWVhc3VyZUJvdW5kaW5nUmVjdCgpIHtcclxuICAgIHRoaXMuX2JveCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IGFuY2hvciA9XHJcbiAgICAgIHRoaXMuYW5jaG9yRWxlbWVudCA/PyB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCE7XHJcbiAgICB0aGlzLl9hbmNob3JCb3ggPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lYXN1cmVDb250YWluZXJQYWRkaW5nKCkge1xyXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKFxyXG4gICAgICB0aGlzLm1lbnVJdGVtQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcclxuICAgICk7XHJcbiAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nVG9wKTtcclxuICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGVzLnBhZGRpbmdCb3R0b20pO1xyXG4gICAgdGhpcy5fY29udGFpbmVyUGFkZGluZyA9IHsgdG9wOiBwYWRkaW5nVG9wLCBib3R0b206IHBhZGRpbmdCb3R0b20gfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDaGlsZHJlbigpIHtcclxuICAgIGlmICh0aGlzLmV4cGFuZGVkICYmIHRoaXMuaG9yaXpvbnRhbERpciAmJiB0aGlzLnZlcnRpY2FsRGlyKSB7XHJcbiAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+XHJcbiAgICAgICAgY2hpbGQucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbERpciEuZGlyLFxyXG4gICAgICAgICAgdGhpcy52ZXJ0aWNhbERpciEuZGlyXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDbGFzc2VzKCkge1xyXG4gICAgaWYgKHRoaXMudmVydGljYWxEaXIpIHtcclxuICAgICAgaWYgKHRoaXMudmVydGljYWxEaXIuZGlyID09PSAndXAnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktdXAnKTtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1kb3duJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ3RvcCcsIHRoaXMudmVydGljYWxEaXIudG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvcml6b250YWxEaXIuZGlyID09PSAnbGVmdCcpIHtcclxuICAgICAgICB0aGlzLnNldENsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtb3ZlcmxheS1sZWZ0Jyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktcmlnaHQnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldE9mZnNldCgnbGVmdCcsIHRoaXMuaG9yaXpvbnRhbERpci5sZWZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1yb290Jyk7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXN1YicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnNldENsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDbGFzcyhjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE9mZnNldChkaXJlY3Rpb246ICd0b3AnIHwgJ2xlZnQnLCB2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgZGlyZWN0aW9uLCBgJHt2YWx1ZX1weGApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5UYWJLZXlQcmVzcygpIHtcclxuICAgIGNvbnN0IHNoaWZ0VGFiID0gUmR0U2hvcnRjdXQuY3JlYXRlVW5zYWZlKCdzaGlmdCcsICd0YWInKTtcclxuICAgIGNvbnN0IHRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgndGFiJyk7XHJcbiAgICB0aGlzLnNob3J0Y3V0U2VydmljZVxyXG4gICAgICAubGlzdGVuKFt0YWIsIHNoaWZ0VGFiXSwge1xyXG4gICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXHJcbiAgICAgIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5vblRhYktleVByZXNzKGV2ZW50KSk7XHJcbiAgfVxyXG59XHJcbiIsIjx1bCBjbGFzcz1cIm1lbnUtaXRlbS1jb250YWluZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgI21lbnVJdGVtQ29udGFpbmVyPlxyXG4gIDxsaVxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbS5pdGVtczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChyZHRLZXlMaXN0ZW5lcik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXHJcbiAgICByZHRBbnlSb3V0ZUFjdGl2ZT1cIm1lbnUtaXRlbS1yb3V0ZS1hY3RpdmVcIlxyXG4gICAgW3dhdGNoZWRSb3V0ZXNdPVwiZ2V0Q2hpbGRSb3V0ZXMoaXRlbSlcIlxyXG4gICAgKHBvaW50ZXJsZWF2ZSk9XCJvbkl0ZW1Qb2ludGVyTGVhdmUoaXRlbSlcIlxyXG4gICAgI2FuY2hvckVsXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgIWl0ZW0uZXh0ZXJuYWxMaW5rXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICAocG9pbnRlcmVudGVyKT1cIm9uSXRlbVBvaW50ZXJFbnRlcihpdGVtKVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLml0ZW1zID8gJ21lbnUnIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxyXG4gICAgICAgICAgICBuYW1lPVwiY2hldnJvbl9yaWdodFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAtLT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLWljb25cIiAqbmdJZj1cIml0ZW0uaXRlbXNcIj4mZ3Q7PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ucm91dGVyTGlua1wiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0tY29udGVudFwiXHJcbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXHJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHRlcm5hbExpbmtcIj5cclxuICAgICAgPGFcclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gQ2hpbGQgbWVudXMgZXhpc3Qgb25seSBpZiB0aGlzIG1lbnUgaXMgZXhwYW5kZWQuIC0tPlxyXG4gICAgPCEtLSBPbmx5IG9uZSBpbnZpc2libGUgbGV2ZWwgaXMgYWx3YXlzIGF0dGFjaGVkIHRvIERPTSwgdGhlIHJlc3QgZG9lcyBub3QgZXhpc3QuIC0tPlxyXG4gICAgPHJkdC1tZW51LW92ZXJsYXlcclxuICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zICYmIGV4cGFuZGVkXCJcclxuICAgICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXHJcbiAgICAgIFtleHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkXCJcclxuICAgICAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJob3Jpem9udGFsRGlyPy5kaXIhXCJcclxuICAgICAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInZlcnRpY2FsRGlyPy5kaXIhXCJcclxuICAgICAgW2xldmVsXT1cImxldmVsICsgMVwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgPC9saT5cclxuPC91bD5cclxuIl19
|
|
599
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtb3ZlcmxheS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL21lbnUtb3ZlcmxheS9yZHQtbWVudS1vdmVybGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1vdmVybGF5L3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxXQUFXLEVBRVgsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLE9BQU8sRUFFUCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQix5QkFBeUIsR0FDMUIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUdMLG1CQUFtQixHQUNwQixNQUFNLG1CQUFtQixD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OzJGQUF2Qix1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07OEJBb0J0QyxRQUFRO3NCQURoQixZQUFZO3VCQUFDLHVCQUF1QjtnQkFJN0IsaUJBQWlCO3NCQUR4QixZQUFZO3VCQUFDLGVBQWU7Z0JBSXJCLGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSTlCLElBQUk7c0JBREgsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBSU4sc0JBQXNCO3NCQURyQixLQUFLO2dCQUlOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFLTixRQUFRO3NCQUZQLFdBQVc7dUJBQUMsZ0JBQWdCOztzQkFDNUIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBT04sYUFBYTtzQkFEWixLQUFLO2dCQUlFLFFBQVE7c0JBRGYsV0FBVzt1QkFBQyxXQUFXO2dCQUloQixZQUFZO3NCQURuQixXQUFXO3VCQUFDLGVBQWU7Z0JBSXhCLE1BQU07c0JBRFQsV0FBVzt1QkFBQyxlQUFlO2dCQStacEIsa0JBQWtCO3NCQUR6QixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICBSZHRTaG9ydGN1dCxcclxuICBSZHRTaG9ydGN1dEV2ZW50LFxyXG4gIFJkdFNob3J0Y3V0U2VydmljZSxcclxufSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHtcclxuICBLQl9DT0RFLFxyXG4gIFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgUmR0T2JqZWN0VXRpbHMsXHJcbiAgUmR0U3RyaW5nVXRpbHMsXHJcbiAgUmR0VmVydGljYWxEaXJlY3Rpb24sXHJcbn0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgZGVsYXksIGZpcnN0LCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVIsXHJcbiAgREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUixcclxufSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIFBhcnNlZFJkdE1lbnVJdGVtLFxyXG4gIFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuLFxyXG4gIFJkdE1lbnVFeHBhbmRTb3VyY2UsXHJcbn0gZnJvbSAnLi4vcHJpdmF0ZS1tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIEZPQ1VTX1ZJU0lCTEUsXHJcbiAgSG9yRGlyV2l0aE9mZnNldCxcclxuICBWZXJ0RGlyV2l0aE9mZnNldCxcclxuICBhcmVIb3JEaXJzRXF1YWwsXHJcbiAgYXJlVmVydERpcnNFcXVhbCxcclxuICBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4LFxyXG4gIG1lbnVJdGVtSGFzQ2hpbGRyZW4sXHJcbiAgbWVudUl0ZW1IYXNSb3V0ZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcblxyXG4vLyBUT0RPOiBTcGxpdCBwb3NpdGlvbmluZyBhbmQgc2hvcnRjdXQvZm9jdXMgbWFuYWdlbWVudCBpbiBzZXBhcmF0ZSBjbGFzc2VzXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUtb3ZlcmxheScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JkdC1tZW51LW92ZXJsYXkuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJkdE1lbnVPdmVybGF5Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcclxuICByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB0b3BMZXZlbE1lbnUgPSBpbmplY3QoUmR0TWVudUJhc2VDb21wb25lbnQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50TWVudSA9IGluamVjdChSZHRNZW51T3ZlcmxheUNvbXBvbmVudCwge1xyXG4gICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgICBza2lwU2VsZjogdHJ1ZSxcclxuICB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvcnRjdXRTZXJ2aWNlID0gaW5qZWN0KFJkdFNob3J0Y3V0U2VydmljZSk7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oUmR0TWVudU92ZXJsYXlDb21wb25lbnQpXHJcbiAgcmVhZG9ubHkgY2hpbGRyZW4hOiBRdWVyeUxpc3Q8UmR0TWVudU92ZXJsYXlDb21wb25lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb2N1c2FibGVJdGVtJylcclxuICBwcml2YXRlIGZvY3VzYWJsZUVsZW1lbnRzITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTExJRWxlbWVudD4+O1xyXG5cclxuICBAVmlld0NoaWxkKCdtZW51SXRlbUNvbnRhaW5lcicpXHJcbiAgcHJpdmF0ZSBtZW51SXRlbUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgaXRlbSE6IFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGxldmVsITogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24gPSBERUZBVUxUX01FTlVfSE9SSVpPTlRBTF9ESVI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJlZmVycmVkVmVydGljYWxEaXI6IFJkdFZlcnRpY2FsRGlyZWN0aW9uID0gREVGQVVMVF9NRU5VX1ZFUlRJQ0FMX0RJUjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5leHBhbmRlZCcpXHJcbiAgQElucHV0KClcclxuICBleHBhbmRlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGF1dG9mb2N1c0l0ZW06ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gRWxlbWVudCB1c2VkIHRvIHJlbGF0aXZlbHkgcG9zaXRpb24gbWVudSxcclxuICAvLyB0eXBpY2FsbHkgcGFyZW50IGVsZW1lbnQuXHJcbiAgLy8gSWYgbm90IHNwZWNpZmllZCwgcGFyZW50IGVsZW1lbnQgaXMgdXNlZC5cclxuICBASW5wdXQoKVxyXG4gIGFuY2hvckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxyXG4gIHByaXZhdGUgcm9sZUF0dHIgPSAnbWVudSc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXHJcbiAgcHJpdmF0ZSB0YWJpbmRleEF0dHIgPSAnLTEnO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxyXG4gIGdldCB6SW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sZXZlbCArIDEwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzUm9vdExldmVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGV2ZWwgPT09IDA7XHJcbiAgfVxyXG5cclxuICAvLyBCb3VuZGluZyBib3ggb2YgdGhpcyBleGNsdWRpbmcgYW55IGV4dHJhIG9mZnNldC5cclxuICBwcml2YXRlIF9ib3ghOiBET01SZWN0O1xyXG4gIGdldCBib3goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYm94O1xyXG4gIH1cclxuXHJcbiAgLy8gQm91bmRpbmcgYm94IG9mIHBhcmVudCBlbGVtZW50LlxyXG4gIHByaXZhdGUgX2FuY2hvckJveCE6IERPTVJlY3Q7XHJcbiAgcHJpdmF0ZSBfY29udGFpbmVyUGFkZGluZyA9IHsgdG9wOiAwLCBib3R0b206IDAgfTtcclxuXHJcbiAgLy8gUmVjYWxjdWxhdGUgY2hpbGQgY29tcG9uZW50cyBvbmx5IGFmdGVyIHRoZXkgYXJlIGluaXRpYWxpemVkLlxyXG4gIHByaXZhdGUgX3ZpZXdXYXNJbml0ID0gZmFsc2U7XHJcblxyXG4gIC8vIEN1cnJlbnRseSBhcHBsaWVkIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIGRpcmVjdGlvbnMuXHJcbiAgcHJvdGVjdGVkIHZlcnRpY2FsRGlyOiBWZXJ0RGlyV2l0aE9mZnNldCB8IG51bGwgPSBudWxsO1xyXG4gIHByb3RlY3RlZCBob3Jpem9udGFsRGlyOiBIb3JEaXJXaXRoT2Zmc2V0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBleHBhbmRlZENoaWxkOiB7XHJcbiAgICBpdGVtOiBQYXJzZWRSZHRNZW51SXRlbTtcclxuICAgIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZTtcclxuICB9IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGF1dG9mb2N1c1N1Ym1lbnVJdGVtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHJlYWRvbmx5IGtleUFjdGlvbnMgPSB7XHJcbiAgICBbS0JfQ09ERS5BUlJPVy5VUF06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzUHJldkl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuRE9XTl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmZvY3VzTmV4dEl0ZW0oaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuQVJST1cuUklHSFRdOiAoaW5kZXg6IG51bWJlcikgPT5cclxuICAgICAgdGhpcy5vcGVuU3VibWVudShpbmRleCwgJ2ZpcnN0JywgUmR0TWVudUV4cGFuZFNvdXJjZS5TaG9ydGN1dCksXHJcbiAgICBbS0JfQ09ERS5BUlJPVy5MRUZUXTogKCkgPT4gdGhpcy5jbG9zZVNlbGYoKSxcclxuICAgIFtLQl9DT0RFLkhPTUVdOiAoKSA9PiB0aGlzLmZvY3VzSXRlbSgwKSxcclxuICAgIFtLQl9DT0RFLkVORF06ICgpID0+IHRoaXMuZm9jdXNJdGVtKHRoaXMuaXRlbS5pdGVtcy5sZW5ndGggLSAxKSxcclxuICAgIFtLQl9DT0RFLkVTQ0FQRV06ICgpID0+IHRoaXMuY2xvc2VTZWxmKCksXHJcbiAgICBbS0JfQ09ERS5FTlRFUl06IChpbmRleDogbnVtYmVyKSA9PiB0aGlzLmludm9rZUl0ZW1DbGlja0J5SW5kZXgoaW5kZXgpLFxyXG4gICAgW0tCX0NPREUuU1BBQ0VCQVJdOiAoaW5kZXg6IG51bWJlcikgPT4gdGhpcy5pbnZva2VJdGVtQ2xpY2tCeUluZGV4KGluZGV4KSxcclxuICB9O1xyXG4gIGdldCBzZWxmRXhwYW5kU3JjKCkge1xyXG4gICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcclxuICAgICAgaWYgKHRoaXMucGFyZW50TWVudSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE1lbnUuZXhwYW5kZWRDaGlsZD8uc3JjO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvcExldmVsTWVudS5leHBhbmRlZENoaWxkPy5zcmM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0Q2xhc3NlcygpO1xyXG4gICAgdGhpcy5saXN0ZW5UYWJLZXlQcmVzcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgY29uc3QgcmVjYWxjVHJpZ2dlcnMgPSBbXHJcbiAgICAgICdwcmVmZXJyZWRIb3Jpem9udGFsRGlyJyxcclxuICAgICAgJ3ByZWZlcnJlZFZlcnRpY2FsRGlyJyxcclxuICAgICAgJ2V4cGFuZGVkJyxcclxuICAgIF07XHJcbiAgICBpZiAocmVjYWxjVHJpZ2dlcnMuc29tZSgoa2V5KSA9PiBrZXkgaW4gY2hhbmdlcykgJiYgdGhpcy5fdmlld1dhc0luaXQpIHtcclxuICAgICAgdGhpcy5yZWNhbGN1bGF0ZVBvc2l0aW9uKFxyXG4gICAgICAgIHRoaXMucHJlZmVycmVkSG9yaXpvbnRhbERpcixcclxuICAgICAgICB0aGlzLnByZWZlcnJlZFZlcnRpY2FsRGlyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCdleHBhbmRlZCcgaW4gY2hhbmdlcyAmJiB0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgIC8vIFdhaXQgZm9yIEFuZ3VsYXIgdG8gc2V0IC5leHBhbmRlZCBjbGFzcyxcclxuICAgICAgLy8gYmVjYXVzZSBpbnZpc2libGUgZWxlbWVudHMgY2Fubm90IGJlIGZvY3VzZWQuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5hdXRvZm9jdXNJdGVtKSB7XHJcbiAgICAgICAgICBjYXNlIG51bGw6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKDAsIGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdmaXJzdCc6XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNJdGVtKDAsIHRydWUpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJ2xhc3QnOlxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzSXRlbSh0aGlzLml0ZW0uaXRlbXMubGVuZ3RoIC0gMSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMubWVhc3VyZUNvbnRhaW5lclBhZGRpbmcoKTtcclxuICAgIHRoaXMucmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgdGhpcy5wcmVmZXJyZWRIb3Jpem9udGFsRGlyLFxyXG4gICAgICB0aGlzLnByZWZlcnJlZFZlcnRpY2FsRGlyXHJcbiAgICApO1xyXG4gICAgdGhpcy5fdmlld1dhc0luaXQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRMZWZ0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4ubGVmdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWF4T2Zmc2V0TGVmdCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICB0aGlzLl9ib3gud2lkdGggLVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNaW5PZmZzZXRUb3AoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1heE9mZnNldFRvcCgpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgdGhpcy5fYm94LmhlaWdodCAtXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmJvZHlNYXJnaW4uYm90dG9tXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVjYWxjdWxhdGVQb3NpdGlvbihcclxuICAgIHByZWZlcnJlZEhvcml6b250YWxEaXI6IFJkdEhvcml6b250YWxEaXJlY3Rpb24sXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApIHtcclxuICAgIC8vIE1ha2UgbWVudSBpbnZpc2libGUgc28gdGhlIG1lbnUgZG9lcyBub3QgbW92ZSBhcm91bmQgaW4gY2FzZSBvZiBzbG93IGNvbXB1dGVyLlxyXG4gICAgdGhpcy5tZWFzdXJlQm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLl9ib3ggfHwgIXRoaXMuX2FuY2hvckJveCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3SG9yRGlyID0gdGhpcy5nZXRSZWFsSG9yaXpvbnRhbERpcihwcmVmZXJyZWRIb3Jpem9udGFsRGlyKTtcclxuICAgIGNvbnN0IG5ld1ZlcnREaXIgPSB0aGlzLmdldFJlYWxWZXJ0aWNhbERpcihwcmVmZXJyZWRWZXJ0aWNhbERpcik7XHJcblxyXG4gICAgLy8gSG9yaXpvbnRhbCBkaXJlY3Rpb25cclxuICAgIGlmIChuZXdIb3JEaXIuZGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC5sZWZ0O1xyXG4gICAgICBpZiAoIXRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobmV3SG9yRGlyLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIG5ld0hvckRpci5sZWZ0ICs9IHRoaXMuX2FuY2hvckJveC5sZWZ0IC0gdGhpcy5fYm94LndpZHRoO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgICBuZXdIb3JEaXIubGVmdCArPSB0aGlzLl9hbmNob3JCb3gud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXN0cmljdGlvbnMgZnJvbSBsZWZ0IG1lbnUgYW5kIHJpZ2h0IG1lbnVcclxuICAgIG5ld0hvckRpci5sZWZ0ID0gTWF0aC5taW4oXHJcbiAgICAgIE1hdGgubWF4KHRoaXMuZ2V0TWluT2Zmc2V0TGVmdCgpLCBuZXdIb3JEaXIubGVmdCksXHJcbiAgICAgIHRoaXMuZ2V0TWF4T2Zmc2V0TGVmdCgpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFZlcnRpY2FsIGRpcmVjdGlvblxyXG4gICAgaWYgKG5ld1ZlcnREaXIuZGlyID09PSAnZG93bicpIHtcclxuICAgICAgbmV3VmVydERpci50b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wO1xyXG4gICAgICBpZiAodGhpcy5pc1Jvb3RMZXZlbCkge1xyXG4gICAgICAgIG5ld1ZlcnREaXIudG9wICs9IHRoaXMuX2FuY2hvckJveC5oZWlnaHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgLT0gdGhpcy5fY29udGFpbmVyUGFkZGluZy50b3A7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAobmV3VmVydERpci5kaXIgPT09ICd1cCcpIHtcclxuICAgICAgbmV3VmVydERpci50b3AgPSB0aGlzLl9hbmNob3JCb3gudG9wIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgaWYgKCF0aGlzLmlzUm9vdExldmVsKSB7XHJcbiAgICAgICAgbmV3VmVydERpci50b3AgKz0gdGhpcy5fYW5jaG9yQm94LmhlaWdodCArIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcudG9wO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdHJpY3Rpb25zIGZyb20gaGVhZGVyIGFuZCBmb290ZXJcclxuICAgIG5ld1ZlcnREaXIudG9wID0gTWF0aC5taW4oXHJcbiAgICAgIE1hdGgubWF4KHRoaXMuZ2V0TWluT2Zmc2V0VG9wKCksIG5ld1ZlcnREaXIudG9wKSxcclxuICAgICAgdGhpcy5nZXRNYXhPZmZzZXRUb3AoKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFhcmVIb3JEaXJzRXF1YWwodGhpcy5ob3Jpem9udGFsRGlyLCBuZXdIb3JEaXIpIHx8XHJcbiAgICAgICFhcmVWZXJ0RGlyc0VxdWFsKHRoaXMudmVydGljYWxEaXIsIG5ld1ZlcnREaXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5ob3Jpem9udGFsRGlyID0gbmV3SG9yRGlyO1xyXG4gICAgICB0aGlzLnZlcnRpY2FsRGlyID0gbmV3VmVydERpcjtcclxuICAgICAgdGhpcy5zZXRDbGFzc2VzKCk7XHJcbiAgICAgIHRoaXMubWVhc3VyZUJvdW5kaW5nUmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVjYWxjdWxhdGVDaGlsZHJlbigpO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtUG9pbnRlckVudGVyKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51Lm9wZW5PbkhvdmVyICYmXHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZD8uc3JjICE9PSBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIGlmIChtZW51SXRlbUhhc0NoaWxkcmVuKGl0ZW0pKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0geyBpdGVtLCBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIgfTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKCdleHBhbmRlZCBjaGlsZCcsIHRoaXMuZXhwYW5kZWRDaGlsZCk7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2soaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0pIHtcclxuICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gbWVudUl0ZW1IYXNDaGlsZHJlbihpdGVtKTtcclxuICAgIGlmIChcclxuICAgICAgKGhhc0NoaWxkcmVuICYmIHRoaXMuZXhwYW5kZWRDaGlsZD8uaXRlbSAhPT0gaXRlbSkgfHxcclxuICAgICAgKHRoaXMudG9wTGV2ZWxNZW51Lm9wZW5PbkhvdmVyICYmXHJcbiAgICAgICAgdGhpcy5leHBhbmRlZENoaWxkPy5zcmMgPT09IFJkdE1lbnVFeHBhbmRTb3VyY2UuSG92ZXIpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5hdXRvZm9jdXNTdWJtZW51SXRlbSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IHsgaXRlbSwgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlLkNsaWNrIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gQ291bGQgYWxzbyBsaXN0ZW4gdG8gcm91dGVyIGV2ZW50cywgYnV0IG1pZ2h0IGJlIHRyaWdnZXJlZCBieVxyXG4gICAgLy8gY2hpbGQgcm91dGVyIG5hdmlnYXRpb24uXHJcbiAgICBpZiAoIWhhc0NoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsb3NlU3VibWVudXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgaXRlbS5jb21tYW5kID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGl0ZW0uY29tbWFuZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52b2tlSXRlbUNsaWNrKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICBpZiAobWVudUl0ZW1IYXNSb3V0ZShpdGVtKSAmJiBpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoaXRlbS5yb3V0ZXJMaW5rKTtcclxuICAgIH1cclxuICAgIHRoaXMub25JdGVtQ2xpY2soaXRlbSk7XHJcbiAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gJ2ZpcnN0JztcclxuICB9XHJcblxyXG4gIGdldENoaWxkUm91dGVzKGl0ZW06IFBhcnNlZFJkdE1lbnVJdGVtKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b3BMZXZlbE1lbnUuZ2V0Q2hpbGRSb3V0ZXMoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQgPSBmYWxzZSkge1xyXG4gICAgaWYgKGZvY3VzRXhwYW5kZWQgJiYgdGhpcy5leHBhbmRlZENoaWxkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHRoaXMuZXhwYW5kZWRDaGlsZC5pdGVtKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNJdGVtUmVjdXJzaXZlbHkocGF0aDogUGFyc2VkUmR0TWVudUl0ZW1bXSkge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSBbLi4ucGF0aF07XHJcbiAgICBjb25zdCB0aGlzSXRlbSA9IGNoaWxkcmVuLnNoaWZ0KCkhO1xyXG5cclxuICAgIHRoaXMuYXV0b2ZvY3VzU3VibWVudUl0ZW0gPSBudWxsO1xyXG4gICAgdGhpcy5hdXRvZm9jdXNJdGVtID0gbnVsbDtcclxuXHJcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmV4cGFuZEFuZEdldENoaWxkKHRoaXNJdGVtLCBSZHRNZW51RXhwYW5kU291cmNlLkZvY3VzKVxyXG4gICAgICAgIC5waXBlKGRlbGF5KDEpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKG92ZXJsYXkpID0+IHtcclxuICAgICAgICAgIG92ZXJsYXkuZm9jdXNJdGVtUmVjdXJzaXZlbHkoY2hpbGRyZW4pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRmlyc3QgZm9jdXMgdGhlIGNvcnJlY3QgaXRlbSBiZWNhdXNlIHN1Ym1lbnUgbWlnaHQgaGF2ZSBmb2N1cyBvbiBpdC5cclxuICAgICAgLy8gUmVtb3ZpbmcgZm9jdXNlZCBlbGVtZW50IGZyb20gRE9NIHJlc3VsdHMgaW4gd2luZG93OmZvY3Vzb3V0IGV2ZW50XHJcbiAgICAgIC8vIGFuZCB0aGF0IGNsb3NlcyBhbGwgbWVudXNcclxuICAgICAgdGhpcy5mb2N1c0l0ZW0odGhpc0l0ZW0pO1xyXG4gICAgICAvLyBOb3cgY2xvc2Ugc3VibWVudXMgYW5kIHRoZXJlZm9yZSByZW1vdmUgdGhlbSBmcm9tIERPTVxyXG4gICAgICB0aGlzLmNsb3NlU3VibWVudXMoKTtcclxuICAgICAgLy8gV2FpdCB1bnRpbCB0aGV5IGFyZSByZW1vdmVkIGFuZCBmb2N1cyB0aGUgY29ycmVjdCBpdGVtIGFnYWluXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0l0ZW0odGhpc0l0ZW0pLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwYW5kQW5kR2V0Q2hpbGQoaXRlbTogUGFyc2VkUmR0TWVudUl0ZW0sIHNyYzogUmR0TWVudUV4cGFuZFNvdXJjZSkge1xyXG4gICAgaWYgKHRoaXMuaXRlbS5pdGVtcy5pbmRleE9mKGl0ZW0pIDwgMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ0F0dGVtcHRpbmcgdG8gZXhwYW5kIGl0ZW0gdGhhdCBpcyBub3QgY2hpbGQgaXRlbSBvZiB0aGlzLml0ZW0nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGQgPSB7IGl0ZW0sIHNyYyB9O1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pO1xyXG4gICAgaWYgKGNoaWxkKSB7XHJcbiAgICAgIHJldHVybiBvZihjaGlsZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY2hpbGRyZW4uZmluZCgoY2hpbGQpID0+IGNoaWxkLml0ZW0gPT09IGl0ZW0pKSxcclxuICAgICAgICBmaXJzdChSZHRPYmplY3RVdGlscy5ub3ROdWxsR3VhcmQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25LZXlEb3duKGl0ZW1JbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgaGFzQWN0aW9uID0gZXZlbnQuY29kZSBpbiB0aGlzLmtleUFjdGlvbnM7XHJcbiAgICBjb25zdCBpc0xldHRlciA9XHJcbiAgICAgIFJkdFN0cmluZ1V0aWxzLmlzQWxwaGFiZXRDaGFyYWN0ZXIoZXZlbnQua2V5KSB8fFxyXG4gICAgICBSZHRTdHJpbmdVdGlscy5pc051bWVyaWNDaGFyYWN0ZXIoZXZlbnQua2V5KTtcclxuXHJcbiAgICBpZiAoaGFzQWN0aW9uIHx8IGlzTGV0dGVyKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoaGFzQWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNBY3Rpb24pIHtcclxuICAgICAgdGhpcy5rZXlBY3Rpb25zW2V2ZW50LmNvZGVdKGl0ZW1JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzTGV0dGVyKSB7XHJcbiAgICAgIGNvbnN0IG5leHQgPSBmaW5kTmV4dEl0ZW1XaXRoUHJlZml4KFxyXG4gICAgICAgIHRoaXMuaXRlbS5pdGVtcyxcclxuICAgICAgICBpdGVtSW5kZXgsXHJcbiAgICAgICAgZXZlbnQua2V5XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UYWJLZXlQcmVzcyhldmVudDogUmR0U2hvcnRjdXRFdmVudCkge1xyXG4gICAgY29uc29sZS5sb2coJ3RhYiBrZXkgcHJlc3NlZCcsIGV2ZW50KTtcclxuICAgIHNldFRpbWVvdXQoXHJcbiAgICAgICgpID0+IGNvbnNvbGUubG9nKCdhY3RpdmUgZWxlbWVudCcsIHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksXHJcbiAgICAgIDMwMFxyXG4gICAgKTtcclxuICAgIC8vIERvIG5vdCBwcmV2ZW50IGRlZmF1bHQgdG8gY29ycmVjdGx5IHN3aXRjaCB0byBwcmV2aW91cyBlbGVtZW50XHJcbiAgICBldmVudC5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy8gV2FpdCBmb3IgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB0byBzd2l0Y2ggdG8gbmV3IGVsZW1lbnRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVNlbGYoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52b2tlSXRlbUNsaWNrQnlJbmRleChpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbS5pdGVtc1tpdGVtSW5kZXhdO1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaW52b2tlSXRlbUNsaWNrKGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0l0ZW0oaXRlbTogbnVtYmVyIHwgUGFyc2VkUmR0TWVudUl0ZW0sIHZpc2libGVGb2N1cyA9IHRydWUpIHtcclxuICAgIGxldCBpdGVtSW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIGl0ZW1JbmRleCA9IGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtSW5kZXggPSB0aGlzLml0ZW0uaXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXRlbUluZGV4ID49IDAgJiYgaXRlbUluZGV4IDwgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5ibHVyQWxsRm9jdXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4LCB2aXNpYmxlRm9jdXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBibHVyQWxsRm9jdXNhYmxlKCkge1xyXG4gICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbCkgPT5cclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbC5uYXRpdmVFbGVtZW50LCBGT0NVU19WSVNJQkxFKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNGb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIsIHZpc2libGVGb2N1czogYm9vbGVhbikge1xyXG4gICAgY29uc3QgZWxSZWYgPSB0aGlzLmZvY3VzYWJsZUVsZW1lbnRzLmdldChpdGVtSW5kZXgpO1xyXG4gICAgaWYgKGVsUmVmKSB7XHJcbiAgICAgIGlmICh2aXNpYmxlRm9jdXMpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIEZPQ1VTX1ZJU0lCTEUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNOZXh0SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgbmV4dCA9IChpdGVtSW5kZXggKyAxKSAlIHRoaXMuaXRlbS5pdGVtcy5sZW5ndGg7XHJcbiAgICB0aGlzLmZvY3VzSXRlbShuZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNQcmV2SXRlbShpdGVtSW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgcHJldiA9XHJcbiAgICAgIChpdGVtSW5kZXggLSAxICsgdGhpcy5pdGVtLml0ZW1zLmxlbmd0aCkgJSB0aGlzLml0ZW0uaXRlbXMubGVuZ3RoO1xyXG4gICAgdGhpcy5mb2N1c0l0ZW0ocHJldik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5TdWJtZW51KFxyXG4gICAgaXRlbUluZGV4OiBudW1iZXIsXHJcbiAgICB2aXNpYmxlRm9jdXM6ICdmaXJzdCcgfCAnbGFzdCcsXHJcbiAgICBzcmM6IFJkdE1lbnVFeHBhbmRTb3VyY2VcclxuICApIHtcclxuICAgIGlmIChcclxuICAgICAgaXRlbUluZGV4IDwgdGhpcy5pdGVtLml0ZW1zLmxlbmd0aCAmJlxyXG4gICAgICBtZW51SXRlbUhhc0NoaWxkcmVuKHRoaXMuaXRlbS5pdGVtc1tpdGVtSW5kZXhdKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IHsgaXRlbTogdGhpcy5pdGVtLml0ZW1zW2l0ZW1JbmRleF0sIHNyYyB9O1xyXG4gICAgICB0aGlzLmF1dG9mb2N1c1N1Ym1lbnVJdGVtID0gdmlzaWJsZUZvY3VzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTZWxmKGZvY3VzRXhwYW5kZWQgPSB0cnVlKSB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnRNZW51KSB7XHJcbiAgICAgIHRoaXMucGFyZW50TWVudS5jbG9zZVN1Ym1lbnVzKGZvY3VzRXhwYW5kZWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b3BMZXZlbE1lbnUuY2xvc2VTdWJtZW51cyhmb2N1c0V4cGFuZGVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpmb2N1c291dCcsIFsnJGV2ZW50J10pXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZUVsZW1lbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnRvcExldmVsTWVudS5jbG9zZU9uRm9jdXNPdXQgJiYgIXRoaXMudG9wTGV2ZWxNZW51Lm9wZW5PbkhvdmVyKSB7XHJcbiAgICAgIGNvbnN0IHRoaXNFbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcclxuICAgICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8ICF0aGlzRWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGlsZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENhbGN1bGF0ZXMgZGlyZWN0aW9uIG9mIHRoaXMgbWVudSBhbmQgb2Zmc2V0IGluIGNhc2VcclxuICAvLyBtZW51IHdvbid0IGZpdCBpbiBsZWZ0IG5vciByaWdodCBvZiBwYXJlbnQgbWVudS5cclxuICBwcml2YXRlIGdldFJlYWxIb3Jpem9udGFsRGlyKFxyXG4gICAgcHJlZmVycmVkSG9yaXpvbnRhbERpcjogUmR0SG9yaXpvbnRhbERpcmVjdGlvblxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcclxuICAgIGxldCByaWdodDogbnVtYmVyO1xyXG4gICAgLy8gVGhpcyBtZW51IGlzIGRpcmVjdGx5IHVuZGVyIG1lbnViYXJcclxuICAgIGlmICh0aGlzLmxldmVsID09PSAwKSB7XHJcbiAgICAgIGxlZnQgPSB0aGlzLl9hbmNob3JCb3gucmlnaHQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICAgIHJpZ2h0ID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC1cclxuICAgICAgICAodGhpcy5fYW5jaG9yQm94LmxlZnQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTWVudSBpcyBuZXN0ZWRcclxuICAgICAgcmlnaHQgPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUud2lkdGggLVxyXG4gICAgICAgICh0aGlzLl9hbmNob3JCb3gucmlnaHQgKyB0aGlzLl9ib3gud2lkdGgpO1xyXG4gICAgICBsZWZ0ID0gdGhpcy5fYW5jaG9yQm94LmxlZnQgLSB0aGlzLl9ib3gud2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGVmdCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICByaWdodCAtPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLnJpZ2h0O1xyXG5cclxuICAgIGlmIChwcmVmZXJyZWRIb3Jpem9udGFsRGlyID09PSAncmlnaHQnKSB7XHJcbiAgICAgIC8vIFdlIHVzZSBwcmVmZXJyZWQgaWYgcG9zc2libGUuXHJcbiAgICAgIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gVGhlbiB0aGUgb3RoZXIgb25lLlxyXG4gICAgICB9IGVsc2UgaWYgKGxlZnQgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAwIH07XHJcbiAgICAgICAgLy8gRWRnZSBjYXNlIGlmIG5laXRoZXIgZGlyZWN0aW9uIGNhbiBiZSB1c2VkICh1bHRyYSBuYXJyb3cgc2NyZWVuKS5cclxuICAgICAgICAvLyBDaG9vc2UgZGlyZWN0aW9uIHRoYXQgY292ZXJzIGxlYXN0IG9mIHBhcmVudCBtZW51LlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE5hcnJvd1NjcmVlbkhvcml6b250YWxEaXIobGVmdCwgcmlnaHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobGVmdCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnbGVmdCcsIGxlZnQ6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChyaWdodCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAncmlnaHQnLCBsZWZ0OiAwIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFycm93U2NyZWVuSG9yaXpvbnRhbERpcihsZWZ0LCByaWdodCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZpbmRzIG91dCB3aGVyZSB0byBwdXQgbWVudSBpbiBjYXNlIHNjcmVlbiBpcyB0b28gbmFycm93IGZvciB0d28gbWVudXNcclxuICAvLyB0byBmaXQgbmV4dCB0byBlYWNoIG90aGVyLiBNaW5pbWl6ZXMgYXJlYSBvZiBwYXJlbnQgbWVudSBjb3ZlcmVkIGJ5IHRoaXMuXHJcbiAgcHJpdmF0ZSBnZXROYXJyb3dTY3JlZW5Ib3Jpem9udGFsRGlyKFxyXG4gICAgbGVmdDogbnVtYmVyLFxyXG4gICAgcmlnaHQ6IG51bWJlclxyXG4gICk6IEhvckRpcldpdGhPZmZzZXQge1xyXG4gICAgY29uc3Qgc2NyZWVuU3RhcnQgPSB0aGlzLnRvcExldmVsTWVudS5ib2R5TWFyZ2luLmxlZnQ7XHJcbiAgICBjb25zdCBzY3JlZW5FbmQgPVxyXG4gICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLndpZHRoIC0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5yaWdodDtcclxuICAgIGNvbnN0IHNjcmVlbkNlbnRlciA9IChzY3JlZW5TdGFydCAtIHNjcmVlbkVuZCkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGxlZnRTdGFydCA9IE1hdGgubWF4KHRoaXMuX2FuY2hvckJveC5sZWZ0LCBzY3JlZW5TdGFydCk7XHJcbiAgICBjb25zdCBsZWZ0RW5kID0gTWF0aC5taW4oXHJcbiAgICAgIHRoaXMuX2FuY2hvckJveC5sZWZ0ICsgdGhpcy5fYW5jaG9yQm94LndpZHRoLFxyXG4gICAgICBzY3JlZW5DZW50ZXJcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgcmlnaHRTdGFydCA9IE1hdGgubWF4KHNjcmVlbkNlbnRlciwgbGVmdEVuZCk7XHJcbiAgICBjb25zdCByaWdodEVuZCA9IE1hdGgubWluKFxyXG4gICAgICB0aGlzLl9hbmNob3JCb3gubGVmdCArIHRoaXMuX2FuY2hvckJveC53aWR0aCxcclxuICAgICAgc2NyZWVuRW5kXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsZWZ0RW5kIC0gbGVmdFN0YXJ0ID4gcmlnaHRFbmQgLSByaWdodFN0YXJ0KSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ3JpZ2h0JywgbGVmdDogcmlnaHQgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGRpcjogJ2xlZnQnLCBsZWZ0OiAtbGVmdCB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZWFsVmVydGljYWxEaXIoXHJcbiAgICBwcmVmZXJyZWRWZXJ0aWNhbERpcjogUmR0VmVydGljYWxEaXJlY3Rpb25cclxuICApOiBWZXJ0RGlyV2l0aE9mZnNldCB7XHJcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XHJcbiAgICBsZXQgdG9wOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDApIHtcclxuICAgICAgYm90dG9tID1cclxuICAgICAgICB0aGlzLnRvcExldmVsTWVudS5jbGllbnRTaXplLmhlaWdodCArXHJcbiAgICAgICAgdGhpcy5fYW5jaG9yQm94LmJvdHRvbSAtXHJcbiAgICAgICAgdGhpcy5fYm94LmhlaWdodDtcclxuICAgICAgdG9wID0gdGhpcy5fYW5jaG9yQm94LnRvcCAtIHRoaXMuX2JveC5oZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBib3R0b20gPVxyXG4gICAgICAgIHRoaXMudG9wTGV2ZWxNZW51LmNsaWVudFNpemUuaGVpZ2h0IC1cclxuICAgICAgICB0aGlzLl9hbmNob3JCb3gudG9wIC1cclxuICAgICAgICB0aGlzLl9ib3guaGVpZ2h0O1xyXG4gICAgICB0b3AgPSB0aGlzLl9hbmNob3JCb3guYm90dG9tIC0gdGhpcy5fYm94LmhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0b3AgLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi50b3A7XHJcbiAgICBib3R0b20gLT0gdGhpcy50b3BMZXZlbE1lbnUuYm9keU1hcmdpbi5ib3R0b207XHJcblxyXG4gICAgaWYgKHByZWZlcnJlZFZlcnRpY2FsRGlyID09PSAnZG93bicpIHtcclxuICAgICAgaWYgKGJvdHRvbSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAnZG93bicsIHRvcDogMCB9O1xyXG4gICAgICB9IGVsc2UgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRvcCA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZGlyOiAndXAnLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIGlmIChib3R0b20gPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7IGRpcjogJ2Rvd24nLCB0b3A6IDAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4geyBkaXI6IHByZWZlcnJlZFZlcnRpY2FsRGlyLCB0b3A6IDAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWVhc3VyZXMgYm91bmRpbmcgcmVjdCBvZiB0aGlzIGFuZCBvZmZzZXQgY29udGFpbmVyXHJcbiAgLy8gU2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYWZ0ZXIgcGFyZW50IG1lbnUgaGFzIGFscmVhZHkgYmVlbiBtZWFzdXJlZC5cclxuICBwcml2YXRlIG1lYXN1cmVCb3VuZGluZ1JlY3QoKSB7XHJcbiAgICB0aGlzLl9ib3ggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICBjb25zdCBhbmNob3IgPVxyXG4gICAgICB0aGlzLmFuY2hvckVsZW1lbnQgPz8gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQhO1xyXG4gICAgdGhpcy5fYW5jaG9yQm94ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZWFzdXJlQ29udGFpbmVyUGFkZGluZygpIHtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShcclxuICAgICAgdGhpcy5tZW51SXRlbUNvbnRhaW5lci5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgY29uc3QgcGFkZGluZ1RvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZXMucGFkZGluZ1RvcCk7XHJcbiAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlcy5wYWRkaW5nQm90dG9tKTtcclxuICAgIHRoaXMuX2NvbnRhaW5lclBhZGRpbmcgPSB7IHRvcDogcGFkZGluZ1RvcCwgYm90dG9tOiBwYWRkaW5nQm90dG9tIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY2FsY3VsYXRlQ2hpbGRyZW4oKSB7XHJcbiAgICBpZiAodGhpcy5leHBhbmRlZCAmJiB0aGlzLmhvcml6b250YWxEaXIgJiYgdGhpcy52ZXJ0aWNhbERpcikge1xyXG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PlxyXG4gICAgICAgIGNoaWxkLnJlY2FsY3VsYXRlUG9zaXRpb24oXHJcbiAgICAgICAgICB0aGlzLmhvcml6b250YWxEaXIhLmRpcixcclxuICAgICAgICAgIHRoaXMudmVydGljYWxEaXIhLmRpclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2xhc3NlcygpIHtcclxuICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyKSB7XHJcbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsRGlyLmRpciA9PT0gJ3VwJykge1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXVwJyk7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktZG93bicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0T2Zmc2V0KCd0b3AnLCB0aGlzLnZlcnRpY2FsRGlyLnRvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbERpcikge1xyXG4gICAgICBpZiAodGhpcy5ob3Jpem9udGFsRGlyLmRpciA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcygncmR0LW92ZXJsYXktbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuc2V0Q2xhc3MoJ3JkdC1vdmVybGF5LXJpZ2h0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRPZmZzZXQoJ2xlZnQnLCB0aGlzLmhvcml6b250YWxEaXIubGVmdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNSb290TGV2ZWwpIHtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtcm9vdCcpO1xyXG4gICAgICB0aGlzLnJlbW92ZUNsYXNzKCdyZHQtbWVudS1zdWInKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlQ2xhc3MoJ3JkdC1tZW51LXJvb3QnKTtcclxuICAgICAgdGhpcy5zZXRDbGFzcygncmR0LW1lbnUtc3ViJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENsYXNzKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRPZmZzZXQoZGlyZWN0aW9uOiAndG9wJyB8ICdsZWZ0JywgdmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIGRpcmVjdGlvbiwgYCR7dmFsdWV9cHhgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuVGFiS2V5UHJlc3MoKSB7XHJcbiAgICBjb25zdCBzaGlmdFRhYiA9IFJkdFNob3J0Y3V0LmNyZWF0ZVVuc2FmZSgnc2hpZnQnLCAndGFiJyk7XHJcbiAgICBjb25zdCB0YWIgPSBSZHRTaG9ydGN1dC5jcmVhdGVVbnNhZmUoJ3RhYicpO1xyXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2VcclxuICAgICAgLmxpc3RlbihbdGFiLCBzaGlmdFRhYl0sIHtcclxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMub25UYWJLZXlQcmVzcyhldmVudCkpO1xyXG4gIH1cclxufVxyXG4iLCI8dWwgY2xhc3M9XCJtZW51LWl0ZW0tY29udGFpbmVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiICNtZW51SXRlbUNvbnRhaW5lcj5cclxuICA8bGlcclxuICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW0uaXRlbXM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXHJcbiAgICAocmR0S2V5TGlzdGVuZXIpPVwib25LZXlEb3duKGksICRldmVudClcIlxyXG4gICAgKHBvaW50ZXJlbnRlcik9XCJvbkl0ZW1Qb2ludGVyRW50ZXIoaXRlbSlcIlxyXG4gICAgcmR0QW55Um91dGVBY3RpdmU9XCJtZW51LWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgICNhbmNob3JFbFxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5yb3V0ZXJMaW5rICYmICFpdGVtLmV4dGVybmFsTGlua1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1jb250ZW50XCJcclxuICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLml0ZW1zID8gJ21lbnUnIDogbnVsbFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkPy5pdGVtXCJcclxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJpdGVtLmRhdGFUZXN0SWRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtLXJpZ2h0LWNvbnRlbnRcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaXRlbXNcIlxyXG4gICAgICAgICAgICBuYW1lPVwiY2hldnJvbl9yaWdodFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWljb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAtLT5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pdGVtLWljb25cIiAqbmdJZj1cIml0ZW0uaXRlbXNcIj4mZ3Q7PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGlua0JvZHkgbGV0LWl0ZW0+XHJcbiAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWVudS1pdGVtLXNob3J0Y3V0XCI+XHJcbiAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0LmxhYmVsIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwhLS0gVE9ETzpcclxuICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIFtuYW1lXT1cIml0ZW0uaWNvblwiXHJcbiAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbS1pY29uXCJcclxuICAgICAgICAvPlxyXG4gICAgICAtLT48L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ucm91dGVyTGlua1wiPlxyXG4gICAgICA8YVxyXG4gICAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgICAgY2xhc3M9XCJtZW51LWl0ZW0tY29udGVudFwiXHJcbiAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXHJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxyXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxyXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cIjBcIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5leHRlcm5hbExpbmtcIj5cclxuICAgICAgPGFcclxuICAgICAgICAjZm9jdXNhYmxlSXRlbVxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgICBbaHJlZl09XCJpdGVtLmV4dGVybmFsTGlua1wiXHJcbiAgICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldFwiXHJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gQ2hpbGQgbWVudXMgZXhpc3Qgb25seSBpZiB0aGlzIG1lbnUgaXMgZXhwYW5kZWQuIC0tPlxyXG4gICAgPCEtLSBPbmx5IG9uZSBpbnZpc2libGUgbGV2ZWwgaXMgYWx3YXlzIGF0dGFjaGVkIHRvIERPTSwgdGhlIHJlc3QgZG9lcyBub3QgZXhpc3QuIC0tPlxyXG4gICAgPHJkdC1tZW51LW92ZXJsYXlcclxuICAgICAgKm5nSWY9XCJpdGVtLml0ZW1zICYmIGV4cGFuZGVkXCJcclxuICAgICAgW2l0ZW1dPVwiJGFueShpdGVtKVwiXHJcbiAgICAgIFtleHBhbmRlZF09XCJpdGVtID09PSBleHBhbmRlZENoaWxkPy5pdGVtXCJcclxuICAgICAgW2F1dG9mb2N1c0l0ZW1dPVwiYXV0b2ZvY3VzU3VibWVudUl0ZW1cIlxyXG4gICAgICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJob3Jpem9udGFsRGlyPy5kaXIhXCJcclxuICAgICAgW3ByZWZlcnJlZFZlcnRpY2FsRGlyXT1cInZlcnRpY2FsRGlyPy5kaXIhXCJcclxuICAgICAgW2xldmVsXT1cImxldmVsICsgMVwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgPC9saT5cclxuPC91bD5cclxuIl19
|
|
@@ -63,4 +63,11 @@ export function parseMenuItems(items, injector, prefix = '') {
|
|
|
63
63
|
item.command ||
|
|
64
64
|
(item['items']?.length ?? 0) > 0);
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
export var RdtMenuExpandSource;
|
|
67
|
+
(function (RdtMenuExpandSource) {
|
|
68
|
+
RdtMenuExpandSource[RdtMenuExpandSource["Click"] = 0] = "Click";
|
|
69
|
+
RdtMenuExpandSource[RdtMenuExpandSource["Hover"] = 1] = "Hover";
|
|
70
|
+
RdtMenuExpandSource[RdtMenuExpandSource["Shortcut"] = 2] = "Shortcut";
|
|
71
|
+
RdtMenuExpandSource[RdtMenuExpandSource["Focus"] = 3] = "Focus";
|
|
72
|
+
})(RdtMenuExpandSource || (RdtMenuExpandSource = {}));
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1tb2RlbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvbGliL3ByaXZhdGUtbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxjQUFjLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBbURwRSxNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUFvQixFQUNwQixRQUFrQixFQUNsQixNQUFNLEdBQUcsRUFBRTtJQUVYLE9BQU8sS0FBSztTQUNULEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1osSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzlCLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFNBQVMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQ2hELFNBQVMsRUFDVCxJQUFJLEVBQ0osV0FBVyxDQUNaLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBMEI7WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsVUFBVSxFQUFFLGFBQWE7U0FDMUIsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxXQUFXLEdBQUcsR0FBb0MsQ0FBQztZQUN6RCxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkUsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QixXQUFXLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLEdBQWlDLENBQUM7WUFDbEQsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQztZQUN4QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDcEQsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztvQkFDRixPQUFPLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDakQsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sT0FBTyxHQUFHLEdBQWdDLENBQUM7WUFDakQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNyQixPQUFPLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDckQsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUM7WUFDekMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNqRCxNQUFNLENBQ0wsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNQLElBQUksQ0FBQyxZQUFZO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU87UUFDWixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDN0IsK0RBQUssQ0FBQTtJQUNMLCtEQUFLLENBQUE7SUFDTCxxRUFBUSxDQUFBO0lBQ1IsK0RBQUssQ0FBQTtBQUNQLENBQUMsRUFMVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBSzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmR0Um91dGUgfSBmcm9tICdAbmdyZHQvcm91dGVyJztcclxuaW1wb3J0IHsgUmR0U2hvcnRjdXQgfSBmcm9tICdAbmdyZHQvc2hvcnRjdXRzJztcclxuaW1wb3J0IHsgUmR0U3RyaW5nVXRpbHMsIFdpbmRvd09wZW5UYXJnZXRUeXBlIH0gZnJvbSAnQG5ncmR0L3V0aWxzJztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJkdE1lbnVJdGVtQmFzZTxUSWNvbiA9IHN0cmluZz4ge1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHNob3J0Y3V0PzogUmR0U2hvcnRjdXQ7XHJcbiAgY29tbWFuZD86ICgpID0+IHZvaWQ7XHJcbiAgdmlzaWJsZT86ICgpID0+IGJvb2xlYW47XHJcbiAgcXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIHJlcXVpcmVkUGFyZW50PzogUmR0Um91dGU7XHJcbiAgZGF0YVRlc3RJZD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBkYXRhVGVzdElkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW48VEljb24gPSBzdHJpbmc+XHJcbiAgZXh0ZW5kcyBQYXJzZWRSZHRNZW51SXRlbUJhc2U8VEljb24+IHtcclxuICBpdGVtczogUGFyc2VkUmR0TWVudUl0ZW1bXTtcclxuICByb3V0ZXJMaW5rPzogbmV2ZXI7XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IG5ldmVyO1xyXG4gIHRhcmdldD86IG5ldmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJkdE1lbnVJdGVtV2l0aFJvdXRlPFRJY29uID0gc3RyaW5nPlxyXG4gIGV4dGVuZHMgUGFyc2VkUmR0TWVudUl0ZW1CYXNlPFRJY29uPiB7XHJcbiAgaXRlbXM/OiBuZXZlcjtcclxuICByb3V0ZXJMaW5rPzogc3RyaW5nW107XHJcbiAgZXh0ZXJuYWxMaW5rPzogbmV2ZXI7XHJcbiAgaWNvbj86IFRJY29uO1xyXG4gIHRhcmdldDogV2luZG93T3BlblRhcmdldFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluazxUSWNvbiA9IHN0cmluZz5cclxuICBleHRlbmRzIFBhcnNlZFJkdE1lbnVJdGVtQmFzZTxUSWNvbj4ge1xyXG4gIGl0ZW1zPzogbmV2ZXI7XHJcbiAgcm91dGVyTGluaz86IG5ldmVyO1xyXG4gIGV4dGVybmFsTGluaz86IHN0cmluZztcclxuICBpY29uPzogVEljb247XHJcbiAgdGFyZ2V0OiBXaW5kb3dPcGVuVGFyZ2V0VHlwZTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFyc2VkUmR0TWVudUl0ZW0gPVxyXG4gIHwgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGVcclxuICB8IFBhcnNlZFJkdE1lbnVJdGVtV2l0aENoaWxkcmVuXHJcbiAgfCBQYXJzZWRSZHRNZW51SXRlbVdpdGhMaW5rO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWVudUl0ZW1zKFxyXG4gIGl0ZW1zOiBSZHRNZW51SXRlbVtdLFxyXG4gIGluamVjdG9yOiBJbmplY3RvcixcclxuICBwcmVmaXggPSAnJ1xyXG4pOiBQYXJzZWRSZHRNZW51SXRlbVtdIHtcclxuICByZXR1cm4gaXRlbXNcclxuICAgIC5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgbGV0IG5ld1ByZWZpeDogc3RyaW5nO1xyXG4gICAgICBpZiAoaXRlbS5kYXRhVGVzdElkKSB7XHJcbiAgICAgICAgbmV3UHJlZml4ID0gaXRlbS5kYXRhVGVzdElkO1xyXG4gICAgICB9IGVsc2UgaWYgKHByZWZpeCkge1xyXG4gICAgICAgIG5ld1ByZWZpeCA9IFJkdFN0cmluZ1V0aWxzLmdldERhdGFUZXN0SWQoaXRlbS5sYWJlbCwgcHJlZml4KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdQcmVmaXggPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKGl0ZW0ubGFiZWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG5ld0RhdGFUZXN0SWQgPSBSZHRTdHJpbmdVdGlscy5nZXREYXRhVGVzdElkKFxyXG4gICAgICAgIG5ld1ByZWZpeCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgICdtZW51LWl0ZW0nXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHJlczogUGFyc2VkUmR0TWVudUl0ZW1CYXNlID0ge1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgIGljb246IGl0ZW0uaWNvbixcclxuICAgICAgICBzaG9ydGN1dDogaXRlbS5zaG9ydGN1dCxcclxuICAgICAgICBjb21tYW5kOiBpdGVtLmNvbW1hbmQsXHJcbiAgICAgICAgdmlzaWJsZTogaXRlbS52aXNpYmxlLFxyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBpdGVtLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgIHJlcXVpcmVkUGFyZW50OiBpdGVtLnJlcXVpcmVkUGFyZW50LFxyXG4gICAgICAgIGRhdGFUZXN0SWQ6IG5ld0RhdGFUZXN0SWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5SZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoQ2hpbGRyZW47XHJcbiAgICAgICAgY29uc3QgcGFyc2VkQ2hpbGRyZW4gPSBwYXJzZU1lbnVJdGVtcyhpdGVtLml0ZW1zLCBpbmplY3RvciwgbmV3UHJlZml4KTtcclxuICAgICAgICBpZiAocGFyc2VkQ2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY2hpbGRyZW5SZXMuaXRlbXMgPSBwYXJzZWRDaGlsZHJlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuUmVzO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0ucm91dGVyTGluaykge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoUm91dGU7XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX3NlbGYnO1xyXG4gICAgICAgIGlmIChpdGVtLnJvdXRlckxpbmspIHtcclxuICAgICAgICAgIGxpbmtSZXMucm91dGVyTGluayA9IFtpdGVtLnJvdXRlckxpbmsuY3JlYXRlQWJzb2x1dGVVcmwoKV07XHJcbiAgICAgICAgICBpZiAoIXJlcy52aXNpYmxlICYmIGl0ZW0ucm91dGVyTGluay5oYXNDYW5CZUVudGVyZWRHdWFyZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjYW5CZUVudGVyZWQgPSBpdGVtLnJvdXRlckxpbmsuY2FuQmVFbnRlcmVkLmJpbmQoXHJcbiAgICAgICAgICAgICAgaXRlbS5yb3V0ZXJMaW5rXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxpbmtSZXMudmlzaWJsZSA9ICgpID0+IGNhbkJlRW50ZXJlZChpbmplY3Rvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaW5rUmVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxpbmtSZXMgPSByZXMgYXMgUGFyc2VkUmR0TWVudUl0ZW1XaXRoTGluaztcclxuICAgICAgICBpZiAoaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgICAgICAgIGlmIChpdGVtLnF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGxpbmtSZXMuZXh0ZXJuYWxMaW5rID0gUmR0U3RyaW5nVXRpbHMuYXBwZW5kUXVlcnlQYXJhbXMoXHJcbiAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmssXHJcbiAgICAgICAgICAgICAgaXRlbS5xdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGlua1Jlcy5leHRlcm5hbExpbmsgPSBpdGVtLmV4dGVybmFsTGluaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGlua1Jlcy50YXJnZXQgPSBpdGVtLnRhcmdldCA/PyAnX2JsYW5rJztcclxuICAgICAgICByZXR1cm4gbGlua1JlcztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnZpc2libGUgfHwgaXRlbS52aXNpYmxlKCkpXHJcbiAgICAuZmlsdGVyKFxyXG4gICAgICAoaXRlbSkgPT5cclxuICAgICAgICBpdGVtLmV4dGVybmFsTGluayB8fFxyXG4gICAgICAgIGl0ZW1bJ3JvdXRlckxpbmsnXSB8fFxyXG4gICAgICAgIGl0ZW0uY29tbWFuZCB8fFxyXG4gICAgICAgIChpdGVtWydpdGVtcyddPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICApO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBSZHRNZW51RXhwYW5kU291cmNlIHtcclxuICBDbGljayxcclxuICBIb3ZlcixcclxuICBTaG9ydGN1dCxcclxuICBGb2N1cyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZHRNZW51RXhwYW5kZWRDaGlsZCB7XHJcbiAgaXRlbTogUGFyc2VkUmR0TWVudUl0ZW07XHJcbiAgc3JjOiBSZHRNZW51RXhwYW5kU291cmNlO1xyXG59XHJcbiJdfQ==
|