ng-inail-common 2.0.35-beta.2 → 2.0.35-beta.4
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/esm2020/lib/components/core/layout/menu/menu.component.mjs +12 -18
- package/fesm2015/ng-inail-common.mjs +11 -17
- package/fesm2015/ng-inail-common.mjs.map +1 -1
- package/fesm2020/ng-inail-common.mjs +11 -17
- package/fesm2020/ng-inail-common.mjs.map +1 -1
- package/lib/components/core/layout/menu/menu.component.d.ts +2 -6
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, EventEmitter, Inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { NavigationEnd } from '@angular/router';
|
|
3
|
-
import { BehaviorSubject
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { isFunction } from 'rxjs/internal-compatibility';
|
|
5
5
|
import { filter } from 'rxjs/operators';
|
|
6
6
|
import { clone, uuidv4 } from '../../../../utils/common.operators';
|
|
@@ -23,12 +23,15 @@ const FOCUSABLE_ITEMS_SELECTOR = 'ul.inail-menu > li > a:not([tabindex="-1"])';
|
|
|
23
23
|
const cloneItem = (item) => {
|
|
24
24
|
let itemClone;
|
|
25
25
|
if (item) {
|
|
26
|
+
let show$ = item.show$;
|
|
27
|
+
item.show$ = undefined;
|
|
26
28
|
itemClone = clone(item);
|
|
27
29
|
itemClone.label = item.label;
|
|
28
30
|
itemClone.link = item.link;
|
|
29
31
|
itemClone.linkRegex = item.linkRegex;
|
|
30
32
|
itemClone.callback = item.callback;
|
|
31
33
|
itemClone.show = item.show;
|
|
34
|
+
itemClone.show$ = show$;
|
|
32
35
|
itemClone.parent = cloneItem(item.parent);
|
|
33
36
|
itemClone.subItems = cloneItems(item.subItems);
|
|
34
37
|
}
|
|
@@ -149,19 +152,10 @@ export class MenuComponent extends BasicUxElementComponent {
|
|
|
149
152
|
* @param item
|
|
150
153
|
*/
|
|
151
154
|
this.showItem = (item) => {
|
|
152
|
-
return
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|| (isFunction(item.show) && item.show() === true)
|
|
157
|
-
|| this.isAutoShowItem(item);
|
|
158
|
-
};
|
|
159
|
-
/**
|
|
160
|
-
*
|
|
161
|
-
* @param item
|
|
162
|
-
*/
|
|
163
|
-
this.getShowObservable = (item) => {
|
|
164
|
-
return isObservable(item.show) ? item.show : new BehaviorSubject(false);
|
|
155
|
+
return (item.show == undefined && item.show$ == undefined)
|
|
156
|
+
|| item.show === true
|
|
157
|
+
|| (isFunction(item.show) && item.show() === true)
|
|
158
|
+
|| this.isAutoShowItem(item);
|
|
165
159
|
};
|
|
166
160
|
/**
|
|
167
161
|
* Restituisce true se l'elemento
|
|
@@ -305,7 +299,7 @@ export class MenuComponent extends BasicUxElementComponent {
|
|
|
305
299
|
if (item.id == undefined) {
|
|
306
300
|
item.id = uuidv4();
|
|
307
301
|
}
|
|
308
|
-
if (item.show == undefined) {
|
|
302
|
+
if (item.show == undefined && item.show$ == undefined) {
|
|
309
303
|
item.show = true;
|
|
310
304
|
}
|
|
311
305
|
if (item.collapsible == undefined) {
|
|
@@ -504,10 +498,10 @@ export class MenuComponent extends BasicUxElementComponent {
|
|
|
504
498
|
}
|
|
505
499
|
}
|
|
506
500
|
MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MenuComponent, deps: [{ token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: NG_INAIL_COMMON_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
|
|
507
|
-
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: MenuComponent, selector: "inail-menu", inputs: { parent: "parent", innerMenu: "innerMenu", activeItem: "activeItem", emitCurrent: "emitCurrent", collapse: "collapse", show: "show", showAll: "showAll", toggle: "toggle", items: "items", reinit: "reinit", collapsible: "collapsible", collapsed: "collapsed", collapseOther: "collapseOther", expandAutomatically: "expandAutomatically" }, outputs: { itemClick: "itemClick", currentItem: "currentItem" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (
|
|
501
|
+
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: MenuComponent, selector: "inail-menu", inputs: { parent: "parent", innerMenu: "innerMenu", activeItem: "activeItem", emitCurrent: "emitCurrent", collapse: "collapse", show: "show", showAll: "showAll", toggle: "toggle", items: "items", reinit: "reinit", collapsible: "collapsible", collapsed: "collapsed", collapseOther: "collapseOther", expandAutomatically: "expandAutomatically" }, outputs: { itemClick: "itemClick", currentItem: "currentItem" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (item.show$ | async)\"\n [attr.role]=\"item.link ? 'menuitem' : undefined\"\n [ngClass]=\"{selected: isActive(item)}\"\n class=\"livello_1\">\n <a *ngIf=\"item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n [routerLink]=\"getItemLink(item)\"\n [queryParams]=\"item.queryParams\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.space)=\"itemOnClick($event)\">\n </a>\n <a *ngIf=\"!item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n role=\"button\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.enter)=\"itemOnClick(item)\"\n (keyup.space)=\"itemOnClick(item)\">\n </a>\n <debug-pre *ngIf=\"showState\">[menu-item]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"item.id\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"item.collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"item.collapsed\"></state-propertie>\n <!-- {{element | json}}-->\n </debug-pre>\n <inail-menu *ngIf=\"hasSubItems(item)\"\n [id]=\"item.id+'-items'\"\n [activeItem]=\"activeItem\"\n [items]=\"item.subItems\"\n [parent]=\"item\"\n [innerMenu]=\"true\"\n [emitCurrent]=\"emitCurrent\"\n [collapsible]=\"item.collapsible\"\n [collapsed]=\"item.collapsed\"\n [collapseOther]=\"collapseOther\"\n [collapse]=\"collapse\"\n [toggle]=\"toggle\"\n [show]=\"mostraItem\"\n [showState]=\"showState\"\n (itemClick)=\"itemClick.emit($event)\"\n (currentItem)=\"currentItemHandler($event, item)\">\n </inail-menu>\n </li>\n </ng-container>\n </ul>\n</ng-container>\n\n\n", styles: ["ul.inail-menu{padding:0 10px!important;overflow:hidden;transition:height .3s ease-out}ul.inail-menu.collapsed{height:0}ul.inail-menu ul{padding:0!important}\n"], components: [{ type: i2.PreComponent, selector: "debug-pre" }, { type: i3.StatePropertieComponent, selector: "state-propertie", inputs: ["label", "propertie", "hideIfNull"] }, { type: MenuComponent, selector: "inail-menu", inputs: ["parent", "innerMenu", "activeItem", "emitCurrent", "collapse", "show", "showAll", "toggle", "items", "reinit", "collapsible", "collapsed", "collapseOther", "expandAutomatically"], outputs: ["itemClick", "currentItem"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }], pipes: { "async": i4.AsyncPipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
508
502
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MenuComponent, decorators: [{
|
|
509
503
|
type: Component,
|
|
510
|
-
args: [{ selector: 'inail-menu', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (
|
|
504
|
+
args: [{ selector: 'inail-menu', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (item.show$ | async)\"\n [attr.role]=\"item.link ? 'menuitem' : undefined\"\n [ngClass]=\"{selected: isActive(item)}\"\n class=\"livello_1\">\n <a *ngIf=\"item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n [routerLink]=\"getItemLink(item)\"\n [queryParams]=\"item.queryParams\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.space)=\"itemOnClick($event)\">\n </a>\n <a *ngIf=\"!item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n role=\"button\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.enter)=\"itemOnClick(item)\"\n (keyup.space)=\"itemOnClick(item)\">\n </a>\n <debug-pre *ngIf=\"showState\">[menu-item]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"item.id\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"item.collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"item.collapsed\"></state-propertie>\n <!-- {{element | json}}-->\n </debug-pre>\n <inail-menu *ngIf=\"hasSubItems(item)\"\n [id]=\"item.id+'-items'\"\n [activeItem]=\"activeItem\"\n [items]=\"item.subItems\"\n [parent]=\"item\"\n [innerMenu]=\"true\"\n [emitCurrent]=\"emitCurrent\"\n [collapsible]=\"item.collapsible\"\n [collapsed]=\"item.collapsed\"\n [collapseOther]=\"collapseOther\"\n [collapse]=\"collapse\"\n [toggle]=\"toggle\"\n [show]=\"mostraItem\"\n [showState]=\"showState\"\n (itemClick)=\"itemClick.emit($event)\"\n (currentItem)=\"currentItemHandler($event, item)\">\n </inail-menu>\n </li>\n </ng-container>\n </ul>\n</ng-container>\n\n\n", styles: ["ul.inail-menu{padding:0 10px!important;overflow:hidden;transition:height .3s ease-out}ul.inail-menu.collapsed{height:0}ul.inail-menu ul{padding:0!important}\n"] }]
|
|
511
505
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
512
506
|
type: Inject,
|
|
513
507
|
args: [NG_INAIL_COMMON_CONFIG]
|
|
@@ -547,4 +541,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
547
541
|
type: ViewChild,
|
|
548
542
|
args: ['menu']
|
|
549
543
|
}] } });
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pbmFpbC1jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvbGF5b3V0L21lbnUvbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pbmFpbC1jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvbGF5b3V0L21lbnUvbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDekUsT0FBTyxFQUFDLHNCQUFzQixFQUFzQixNQUFNLG9DQUFvQyxDQUFDO0FBQy9GLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBRXBELE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUV6QixNQUFNLHdCQUF3QixHQUFHLDZDQUE2QyxDQUFDO0FBNEIvRTs7OztHQUlHO0FBQ0gsTUFB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QixDQUFDLENBQUM7SUFDNUQsQ0FBQzs7MkdBcHNCVSxhQUFhLHlFQXFLSixzQkFBc0I7K0ZBcksvQixhQUFhLHFsQkN2RzFCLGtySEFpRkEsc1dEc0JhLGFBQWE7NEZBQWIsYUFBYTtrQkFOekIsU0FBUzsrQkFDRSxZQUFZLGlCQUdQLGlCQUFpQixDQUFDLElBQUk7OzBCQXVLeEIsTUFBTTsyQkFBQyxzQkFBc0I7NENBOUoxQyxNQUFNO3NCQURMLEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQVFOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBUU4sUUFBUTtzQkFEUCxLQUFLO2dCQVNOLElBQUk7c0JBREgsS0FBSztnQkFRTixPQUFPO3NCQUROLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQU9OLEtBQUs7c0JBREosS0FBSztnQkFRTixNQUFNO3NCQURMLEtBQUs7Z0JBaUJOLFdBQVc7c0JBRFYsS0FBSztnQkFTTixTQUFTO3NCQURSLEtBQUs7Z0JBUU4sYUFBYTtzQkFEWixLQUFLO2dCQVNOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFPTixTQUFTO3NCQURSLE1BQU07Z0JBU1AsV0FBVztzQkFEVixNQUFNO2dCQUlQLElBQUk7c0JBREgsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBpc09ic2VydmFibGUsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtpc0Z1bmN0aW9ufSBmcm9tICdyeGpzL2ludGVybmFsLWNvbXBhdGliaWxpdHknO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Y2xvbmUsIHV1aWR2NH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvY29tbW9uLm9wZXJhdG9ycyc7XG5pbXBvcnQge0Jhc2ljVXhFbGVtZW50Q29tcG9uZW50fSBmcm9tICcuLi8uLi9iYXNpYy11eC1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge05HX0lOQUlMX0NPTU1PTl9DT05GSUcsIE5nSW5haWxDb21tb25Db25maWd9IGZyb20gJy4uLy4uLy4uLy4uL25nLWluYWlsLWNvbW1vbi5jb25maWcnO1xuaW1wb3J0IHtnZXRDb25maWdWYWx1ZX0gZnJvbSAnLi4vLi4vYmFzZS5jb21wb25lbnQnO1xuXG5jb25zdCBDT0xMQVBTSU5HX0RVUkFUSU9OID0gMzUwO1xuY29uc3QgQVVUT19TSE9XID0gJ2F1dG8nO1xuXG5jb25zdCBGT0NVU0FCTEVfSVRFTVNfU0VMRUNUT1IgPSAndWwuaW5haWwtbWVudSA+IGxpID4gYTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBDaGVja0ZuID0gKCkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIHR5cGUgR2V0U3RyaW5nRm4gPSAoKSA9PiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSB0eXBlIE1lbnVJdGVtU2hvd01vZGUgPSAnYXV0byc7XG5cbnR5cGUgQ29sbGFwc2VNb2RlID0gJ3Nob3cnIHwgJ2hpZGUnIHwgJ3RvZ2dsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW0ge1xuXG4gIGlkPzogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nIHwgR2V0U3RyaW5nRm47XG4gIHRpdGxlPzogc3RyaW5nIHwgR2V0U3RyaW5nRm47XG4gIGFyaWFMYWJlbD86IHN0cmluZyB8IEdldFN0cmluZ0ZuO1xuICBsaW5rPzogc3RyaW5nIHwgR2V0U3RyaW5nRm47XG4gIGxpbmtSZWdleD86IHN0cmluZyB8IEdldFN0cmluZ0ZuO1xuICBxdWVyeVBhcmFtcz86IHtcbiAgICBbazogc3RyaW5nXTogYW55O1xuICB9O1xuICBjYWxsYmFjaz86IEZ1bmN0aW9uO1xuICBhY3RpdmVMaW5rcz86IHN0cmluZ1tdO1xuICBzaG93PzogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBDaGVja0ZuIHwgTWVudUl0ZW1TaG93TW9kZTtcbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICBzdWJJdGVtcz86IE1lbnVJdGVtW107XG4gIHBhcmVudD86IE1lbnVJdGVtO1xufVxuXG4vKipcbiAqIERlZXAgY29weSBkZWxsJ29nZ2V0dG8gTWVudUl0ZW1cbiAqXG4gKiBAcGFyYW0gaXRlbVxuICovXG5jb25zdCBjbG9uZUl0ZW0gPSAoaXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSA9PiB7XG5cbiAgbGV0IGl0ZW1DbG9uZTogTWVudUl0ZW07XG5cbiAgaWYgKGl0ZW0pIHtcblxuICAgIGl0ZW1DbG9uZSA9IGNsb25lKGl0ZW0pO1xuXG4gICAgaXRlbUNsb25lLmxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICBpdGVtQ2xvbmUubGluayA9IGl0ZW0ubGluaztcbiAgICBpdGVtQ2xvbmUubGlua1JlZ2V4ID0gaXRlbS5saW5rUmVnZXg7XG4gICAgaXRlbUNsb25lLmNhbGxiYWNrID0gaXRlbS5jYWxsYmFjaztcbiAgICBpdGVtQ2xvbmUuc2hvdyA9IGl0ZW0uc2hvdztcbiAgICBpdGVtQ2xvbmUucGFyZW50ID0gY2xvbmVJdGVtKGl0ZW0ucGFyZW50KTtcbiAgICBpdGVtQ2xvbmUuc3ViSXRlbXMgPSBjbG9uZUl0ZW1zKGl0ZW0uc3ViSXRlbXMpO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1DbG9uZTtcbn07XG5cbi8qKlxuICogRGVlcCBjb3B5IGRlbGwnb2dnZXR0byBNZW51SXRlbVtdXG4gKlxuICogQHBhcmFtIGl0ZW1zXG4gKi9cbmNvbnN0IGNsb25lSXRlbXMgPSAoaXRlbXM6IE1lbnVJdGVtW10pOiBNZW51SXRlbVtdID0+IHtcblxuICBsZXQgaXRlbXNDbG9uZTogTWVudUl0ZW1bXTtcblxuICBpZiAoaXRlbXMpIHtcblxuICAgIGl0ZW1zQ2xvbmUgPSBpdGVtcy5tYXAoaXRlbSA9PiBjbG9uZUl0ZW0oaXRlbSkpO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1zQ2xvbmU7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpbmFpbC1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5jc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGV4dGVuZHMgQmFzaWNVeEVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICAvKipcbiAgICogRWxlbWVudG8gcGFyZW50IGRlbCBtZW51LlxuICAgKiAoIFF1ZXN0byBpbnB1dCBub24gZGV2ZSBlc3NlcmUgcGFzc2F0bywgc2VydmUgaW50ZXJuYW1lbnRlIHBlciBmYXIgZnVuemlvbmFyZSBpbCBtZW51IClcbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhcmVudDogTWVudUl0ZW07XG5cbiAgLyoqXG4gICAqIEVsZW1lbnRvIHBhcmVudCBkZWwgbWVudS5cbiAgICogKCBRdWVzdG8gaW5wdXQgbm9uIGRldmUgZXNzZXJlIHBhc3NhdG8sIHNlcnZlIGludGVybmFtZW50ZSBwZXIgZmFyIGZ1bnppb25hcmUgaWwgbWVudSApXG4gICAqL1xuICBASW5wdXQoKVxuICBpbm5lck1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogaWQgZGVsbCdlbGVtZW50byBjaGUgc2kgdnVvbGUgYXR0aXZhcmUuXG4gICAqIFNlIHNwZWNpZmljYXRvIGZhIGRpdmVudGFyZSBib2xkIGxhIHZvY2UgZGkgbWVudSBhc3NvY2lhdGFcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUl0ZW06IHN0cmluZztcblxuICAvKipcbiAgICogRW1ldHRlIGwnZWxlbWVudG8gZGVsIG1lbnVcbiAgICogY2hlIGNvcnJpc3BvbmRlIGFsbCd1cmwgY29ycmVudGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBlbWl0Q3VycmVudDogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogQ29sbGFzc2EgaWwgbWVudVxuICAgKiBTZSBwYXNzYXRvIGluIGlucHV0IHVuIGlkIGNvbGxhc3NhIGxvIHNwZWNpZmljbyBlbGVtZW50by5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbGxhcHNlOiBPYnNlcnZhYmxlPHN0cmluZyB8IHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBFc3BhbmRlIGxlIHZvY2kgZGkgbWVudSBkaSBwcmltbyBsaXZlbGxvLlxuICAgKiBTZSBzcGVjaWZpY2F0byB1biBpZCBlc3BhbmRlIGlsIHJhbW8gZGVsIG1lbnVcbiAgICogY2hlIHBvcnRhIGFsbCdlbGVtZW50byBjb24gbCdpZCBzcGVjaWZpY2F0by5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3c6IE9ic2VydmFibGU8c3RyaW5nIHwgdm9pZD47XG5cbiAgLyoqXG4gICAqIEVzcGFuZGUgdHV0dGUgbGUgdm9jaSBkZWwgbWVudVxuICAgKiBjb21wcmVzZSBxdWVsbGUgZGVpIGxpdmVsbGkgYW5uaWRhdGlcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3dBbGw6IE9ic2VydmFibGU8dm9pZD47IC8vIHRvZG8gdGVzdGFyZVxuXG4gIC8qKlxuICAgKiBFZmZldHR1YSBpbCB0b2dnbGUgZGVsbCdlbGVtZW50byBzcGVjaWZpY2F0byB0cmFtaXRlIGlkXG4gICAqL1xuICBASW5wdXQoKVxuICB0b2dnbGU6IE9ic2VydmFibGU8c3RyaW5nPjsgLy8gdG9kbyB0ZXN0YXJlXG5cbiAgLyoqXG4gICAqIEVsZW1lbnRpIGRlbCBtZW51XG4gICAqL1xuICBASW5wdXQoKVxuICBpdGVtczogTWVudUl0ZW1bXTtcbiAgb3JpZ2luYWxJdGVtczogTWVudUl0ZW1bXTtcblxuICAvKipcbiAgICpcbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlaW5pdDogT2JzZXJ2YWJsZTx2b2lkIHwgTWVudUl0ZW1bXT47XG5cbiAgLyoqXG4gICAqIFNlIHRydWUgZGlzYWJpbGl0YSBsYSBzb3ZyYXNjcml0dHVyYSBkZWxsYSBwcm9wcmlldGFcbiAgICogbGluayBuZWdsaSBlbGVtZW50aSBkZWwgbWVudVxuICAgKiBxdWFuZG8gbGEgcHJvcHJpZXRhIGxpbmtSZWdleCBtYXRjaGFcbiAgICogY29uIGwndXJsIGNvcnJlbnRlXG4gICAqL1xuICBkaXNhYmxlTGlua092ZXJ3cml0aW5nOiBib29sZWFuID0gZ2V0Q29uZmlnVmFsdWUodGhpcy5saWJDb25maWc/Lm1lbnVDb21wb25lbnQ/LmRpc2FibGVMaW5rT3ZlcndyaXRpbmcsIGZhbHNlKTtcblxuICAvKipcbiAgICogU2UgdHJ1ZSBpbmRpY2EgY2hlIGxlIHZvY2kgZGVsIG1lbnUgc29ubyBjb2xsYXNzYWJpbGkuXG4gICAqIFF1ZXN0YSBpbXBvc3RhemlvbmUgdmllbmUgc292cmFzY3JpdHRhIHNlIHNwZWNpZmljYXRvIGRpdmVyc2FtZW50ZVxuICAgKiBuZWdsaSBlbGVtZW50aSBkZWwgbWVudVxuICAgKi9cbiAgQElucHV0KClcbiAgY29sbGFwc2libGU6IGJvb2xlYW4gPSBnZXRDb25maWdWYWx1ZSh0aGlzLmxpYkNvbmZpZz8ubWVudUNvbXBvbmVudD8uY29sbGFwc2libGUsIGZhbHNlKTtcblxuICAvKipcbiAgICogSW5kaWNhIGxvIHN0YXRvIGluaXppYWxlIGRlbCBtZW51LCBzZSBjb2xhc3NhdG8gbyBlc3BhbnNvLlxuICAgKiBRdWVzdGEgaW1wb3N0YXppb25lIHZpZW5lIHNvdnJhc2NyaXR0YSBzZSBzcGVjaWZpY2F0byBkaXZlcnNhbWVudGVcbiAgICogbmVnbGkgZWxlbWVudGkgZGVsIG1lbnVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbGxhcHNlZDogYm9vbGVhbiA9IGdldENvbmZpZ1ZhbHVlKHRoaXMubGliQ29uZmlnPy5tZW51Q29tcG9uZW50Py5jb2xsYXBzZWQsIHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFNlIHRydWUgYWJpbGl0YSBsJ2VmZmV0dG8gZmlzYXJtb25pY2FcbiAgICogc3VsbGUgdm9jaSBkaSBtZW51IGVzcGFuZGliaWxpLlxuICAgKi9cbiAgQElucHV0KClcbiAgY29sbGFwc2VPdGhlcjogYm9vbGVhbiA9IGdldENvbmZpZ1ZhbHVlKHRoaXMubGliQ29uZmlnPy5tZW51Q29tcG9uZW50Py5jb2xsYXBzZU90aGVyLCBmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFNlIHRydWUgZXNwYW5kZSBhdXRvbWF0aWNhbWVudGUgaWwgcGVyY29yc29cbiAgICogdmVyc28gdW4gZWxlbWVudG9cbiAgICogcXVhbmRvIHF1ZXN0byBzaSByaWZlcmlzY2UgYWxsJ3VybCBjb3JyZW50ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZXhwYW5kQXV0b21hdGljYWxseTogYm9vbGVhbiA9IGdldENvbmZpZ1ZhbHVlKHRoaXMubGliQ29uZmlnPy5tZW51Q29tcG9uZW50Py5leHBhbmRBdXRvbWF0aWNhbGx5LCB0cnVlKTtcblxuICAvKipcbiAgICogRW1ldHRlIGwnb2dnZXR0byBNZW51SXRlbSBhc3NvY2lhdG8gYWxsYSB2b2NlIGRpIG1lbnUgc3VsbGEgcXVhbGUgc2kgZScgY2xpY2NhdG8uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgaXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4oKTtcblxuICAvKipcbiAgICogRW1ldHRlIGxhIHZvY2UgZGkgbWVudSBjaGUgY29ycmlzcG9uZGVcbiAgICogY29uIGwndXJsIGNvcnJlbnRlXG4gICAqIGRvcG8gdW4gZXZlbnRvIGRpIHJvdXRpbmdcbiAgICovXG4gIEBPdXRwdXQoKVxuICBjdXJyZW50SXRlbTogRXZlbnRFbWl0dGVyPE1lbnVJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudUl0ZW0+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbWVudScpXG4gIG1lbnU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8vIEBWaWV3Q2hpbGRyZW4oTWVudUNvbXBvbmVudClcbiAgLy8gc290dG9NZW51OiBRdWVyeUxpc3Q8TWVudUNvbXBvbmVudD47XG5cbiAgaW5pemlhbGl6emF6aW9uZUNvbXBsZXRhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbW9zdHJhSXRlbTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvLyBTZXJ2b25vIHBlciBsJ2FuaW1hemlvbmUgZGkgYXBlcnR1cmEvY2hpdXN1cmEgZmx1aWRhXG4gIG1lbnVIZWlnaHQkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih1bmRlZmluZWQpO1xuICBlbWl0TWVudUhlaWdodCA9ICgpID0+IHtcblxuICAgIGlmICh0aGlzLmlzQ29sbGFwc2libGUoKSkge1xuXG4gICAgICBsZXQgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5tZW51Py5uYXRpdmVFbGVtZW50Py5zY3JvbGxIZWlnaHQ7XG4gICAgICBsZXQgbmV4dEhlaWdodCA9IHRoaXMuaXNDb2xsYXBzZWQoKSA/IDAgOiBzY3JvbGxIZWlnaHQ7XG5cbiAgICAgIGlmIChuZXh0SGVpZ2h0ID4gMCkge1xuXG4gICAgICAgIHRoaXMubWVudUhlaWdodCQubmV4dChuZXh0SGVpZ2h0KTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBJbXBvc3RvIGwnaGVpZ2h0IGVmZmV0dGl2b1xuICAgICAgICAvLyBwZXIgcG9pIGltcG9zdGFybG8gc3ViaXRvIGRvcG8gYSAwXG4gICAgICAgIC8vIGluIG1vZG8gZGEgZmFyIGZ1bnppb25hcmUgbCdhbmltYXppb25lLlxuICAgICAgICAvLyBTZSBub24gdmllbmUgaW1wb3N0YXRvIHVuIHZhbG9yZSBpbml6aWFsZVxuICAgICAgICAvLyBsJ2FuaW1hemlvbmUgQ1NTIG5vbiBmdW56aW9uYS5cbiAgICAgICAgdGhpcy5tZW51SGVpZ2h0JC5uZXh0KHNjcm9sbEhlaWdodCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tZW51SGVpZ2h0JC5uZXh0KDApLCAxNSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJpbXVvdm8gaGVpZ2h0LlxuICAgICAgLy8gQWxsYSBmaW5lIGRlbGwnYW5pbWF6aW9uZSBsYSBwcm9wcmlldGEgbm9uIHNlcnZlIGNoZSByaW1hbmdhIGltcG9zdGF0YS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tZW51SGVpZ2h0JC5uZXh0KHVuZGVmaW5lZCksIENPTExBUFNJTkdfRFVSQVRJT04pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgQEluamVjdChOR19JTkFJTF9DT01NT05fQ09ORklHKVxuICAgICAgICAgICAgICBwcml2YXRlIGxpYkNvbmZpZzogTmdJbmFpbENvbW1vbkNvbmZpZykge1xuICAgIHN1cGVyKGNkciwgbGliQ29uZmlnKTtcbiAgICBzdXBlci5vdmVycmlkZUNvbmZpZyhsaWJDb25maWc/Lm1lbnVDb21wb25lbnQpO1xuICAgIHRoaXMubG9nUHJlZml4ID0gJ1tpbmFpbC1tZW51XSc7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICAgIC8vIEl0ZW1zXG4gICAgaWYgKGNoYW5nZXM/Lml0ZW1zPy5jdXJyZW50VmFsdWUpIHtcblxuICAgICAgaWYgKCF0aGlzLmlubmVyTWVudSkge1xuXG4gICAgICAgIHRoaXMuaXRlbXMgPSBjbG9uZUl0ZW1zKGNoYW5nZXM/Lml0ZW1zPy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBjbG9uZUl0ZW1zKGNoYW5nZXM/Lml0ZW1zPy5jdXJyZW50VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmluaXppYWxpenphSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICB0aGlzLmVtaXRDdXJyZW50SXRlbSgpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgQ3VycmVudFxuICAgIGlmIChjaGFuZ2VzPy5lbWl0Q3VycmVudD8uY3VycmVudFZhbHVlKSB7XG5cbiAgICAgIHRoaXMucHVzaChjaGFuZ2VzLmVtaXRDdXJyZW50LmN1cnJlbnRWYWx1ZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5lbWl0Q3VycmVudEl0ZW0oKSkpO1xuICAgIH1cblxuICAgIC8vIENvbGxhcHNlZFxuICAgIGlmIChjaGFuZ2VzPy5jb2xsYXBzZWQgJiYgIWNoYW5nZXM/LmNvbGxhcHNlZC5pc0ZpcnN0Q2hhbmdlKCkpIHtcblxuICAgICAgdGhpcy5lbWl0TWVudUhlaWdodCgpO1xuICAgIH1cblxuICAgIC8vIENvbGxhc3NhIEVsZW1lbnRvIG8gTGl2ZWxsb1xuICAgIGlmIChjaGFuZ2VzLmNvbGxhcHNlICYmIGNoYW5nZXMuY29sbGFwc2UuY3VycmVudFZhbHVlKSB7XG5cbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgY2hhbmdlcy5jb2xsYXBzZS5jdXJyZW50VmFsdWUuc3Vic2NyaWJlKChpZDogc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICBpZCA9PSB1bmRlZmluZWQgPyB0aGlzLmNvbGxhc3NhTWVudSgpIDogdGhpcy5jb2xsYXNzYUl0ZW0odGhpcy5maW5kSXRlbShpZCwgdGhpcy5pdGVtcykpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFc3BhbmRpIEVsZW1lbnRvIG8gTGl2ZWxsb1xuICAgIGlmIChjaGFuZ2VzPy5zaG93Py5jdXJyZW50VmFsdWUpIHtcblxuICAgICAgdGhpcy5wdXNoKFxuICAgICAgICBjaGFuZ2VzLnNob3cuY3VycmVudFZhbHVlLnN1YnNjcmliZSgoaWQ6IHN0cmluZykgPT4ge1xuXG4gICAgICAgICAgaWQgPT0gdW5kZWZpbmVkID8gdGhpcy5lc3BhbmRpTWVudSgpIDogdGhpcy5lc3BhbmRpUGVyY29yc28oaWQpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUb2dnbGEgRWxlbWVudG9cbiAgICBpZiAoY2hhbmdlcz8udG9nZ2xlPy5jdXJyZW50VmFsdWUpIHtcblxuICAgICAgdGhpcy5wdXNoKGNoYW5nZXMudG9nZ2xlLmN1cnJlbnRWYWx1ZS5zdWJzY3JpYmUoKGlkOiBzdHJpbmcpID0+IHRoaXMudG9nZ2xlSXRlbSh0aGlzLmZpbmRJdGVtKGlkLCB0aGlzLml0ZW1zKSkpKTtcbiAgICB9XG5cbiAgICAvLyAvLyB0b2RvXG4gICAgLy8gLy8gRXNwYW5kZSB0dXR0aSBpIGxpdmVsbGlcbiAgICAvLyBpZiAoY2hhbmdlcy5zaG93QWxsICYmIGNoYW5nZXMuc2hvd0FsbC5jdXJyZW50VmFsdWUpIHtcbiAgICAvL1xuICAgIC8vICAgdGhpcy5wdXNoKGNoYW5nZXMuc2hvd0FsbC5jdXJyZW50VmFsdWUuc3Vic2NyaWJlKCgpID0+IHRoaXMuZXNwYW5kaVR1dHRpKCkpKTtcbiAgICAvLyB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBJbXBvc3RhemlvbmkgZGkgZGVmYXVsdFxuXG4gICAgaWYgKHRoaXMuY29sbGFwc2libGUgPT09IGZhbHNlKSB7XG5cbiAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29sbGFwc2VkID09IHVuZGVmaW5lZCkge1xuXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9ICh0aGlzLmNvbGxhcHNpYmxlID09PSB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLmluaXppYWxpenphSXRlbXModGhpcy5pdGVtcyk7XG4gICAgdGhpcy5pbml6aWFsaXp6YXppb25lQ29tcGxldGF0YSA9IHRydWU7XG4gICAgdGhpcy5lbWl0Q3VycmVudEl0ZW0oKTtcblxuICAgIC8vIFJpY2VyY2EgZWQgZW1pc3Npb25lIGRlbGxhIHZvY2UgZGkgbWVudVxuICAgIC8vIGNvcnJpc3BvbmRlbnRlIGFsbCd1cmwgY29ycmVudGVcbiAgICAvLyBhbCBOYXZpZ2F0aW9uRW5kXG4gICAgdGhpcy5wdXNoKFxuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmltcG9zdGFVcmxFZmZldHRpdmkodGhpcy5pdGVtcyk7XG4gICAgICAgICAgdGhpcy5lbWl0Q3VycmVudEl0ZW0oKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHRoaXMucmVpbml0KSB7XG5cbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgdGhpcy5yZWluaXQuc3Vic2NyaWJlKChpdGVtczogTWVudUl0ZW1bXSkgPT4ge1xuXG4gICAgICAgICAgdGhpcy5lbWl0RGVidWcoYFJlaW5pdCFgKTtcblxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBjbG9uZUl0ZW1zKGl0ZW1zIHx8IHRoaXMub3JpZ2luYWxJdGVtcyk7XG5cbiAgICAgICAgICBpZiAoaXRlbXMpIHtcblxuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gY2xvbmVJdGVtcyhpdGVtcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pbml6aWFsaXp6YUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRvcmkgY29udHJvbGxvIHN0YXRvIG1lbnUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpc0NvbGxhcHNpYmxlID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5pbm5lck1lbnUgJiYgdGhpcy5jb2xsYXBzaWJsZTtcbiAgaXNDb2xsYXBzZWQgPSAoKTogYm9vbGVhbiA9PiB0aGlzLmlzQ29sbGFwc2libGUoKSAmJiB0aGlzLmNvbGxhcHNlZDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRvcmkgY29udHJvbGxvIHN0YXRvIGl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpc0l0ZW1Db2xsYXBzaWJsZSA9IChpdGVtOiBNZW51SXRlbSkgPT4gaXRlbS5jb2xsYXBzaWJsZSAmJiB0aGlzLmhhc1N1Ykl0ZW1zKGl0ZW0pO1xuICBpc0l0ZW1Db2xsYXBzZWQgPSAoaXRlbTogTWVudUl0ZW0pID0+IGl0ZW0/LmNvbGxhcHNpYmxlICYmIGl0ZW0/LmNvbGxhcHNlZDtcbiAgaGFzU3ViSXRlbXMgPSAoaXRlbTogTWVudUl0ZW0pOiBib29sZWFuID0+IGl0ZW0/LnN1Ykl0ZW1zPy5sZW5ndGggPiAwO1xuICBpc0FjdGl2ZSA9IChpdGVtOiBNZW51SXRlbSkgPT4gdGhpcy5hY3RpdmVJdGVtID8gKGl0ZW0uaWQgPT0gdGhpcy5hY3RpdmVJdGVtKSA6IHRoaXMuaXNDdXJyZW50UGFnZUl0ZW0oaXRlbSk7XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIGNoZSBsJ2VsZW1lbnRvIGluIGlucHV0XG4gICAqIHNpYSBhc3NvY2lhdG8gYWxsJ3VybCBjb3JyZW50ZVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgaXNDdXJyZW50UGFnZUl0ZW0gPSAoaXRlbTogTWVudUl0ZW0pOiBib29sZWFuID0+XG4gICAgdGhpcy5pc0N1cnJlbnRVcmwodGhpcy5nZXRJdGVtTGluayhpdGVtKSlcbiAgICB8fCB0aGlzLmlzQ3VycmVudFVybCh0aGlzLmdldEl0ZW1MaW5rUmVnZXgoaXRlbSkpXG4gICAgfHwgKGl0ZW0uYWN0aXZlTGlua3MgIT0gdW5kZWZpbmVkXG4gICAgICAmJiBpdGVtLmFjdGl2ZUxpbmtzLnNvbWUodGhpcy5pc0N1cnJlbnRVcmwpKTtcblxuICAvKipcbiAgICogUmVzdGl0dWlzY2UgdHJ1ZSBzZSBsJ2VsZW1lbnRvXG4gICAqIGRldmUgZXNzZXJlIHZpc3VhbGl6emF0b1xuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgc2hvd0l0ZW0gPSAoaXRlbTogTWVudUl0ZW0pOiBib29sZWFuID0+IHtcblxuICAgIHJldHVybiBpc09ic2VydmFibGUoaXRlbS5zaG93KVxuICAgICAgPyBmYWxzZVxuICAgICAgOiBpdGVtLnNob3cgPT0gdW5kZWZpbmVkXG4gICAgICB8fCBpdGVtLnNob3cgPT09IHRydWVcbiAgICAgIHx8IChpc0Z1bmN0aW9uKGl0ZW0uc2hvdykgJiYgKGl0ZW0uc2hvdyBhcyBDaGVja0ZuKSgpID09PSB0cnVlKVxuICAgICAgfHwgdGhpcy5pc0F1dG9TaG93SXRlbShpdGVtKTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIGdldFNob3dPYnNlcnZhYmxlID0gKGl0ZW06IE1lbnVJdGVtKTogT2JzZXJ2YWJsZTxib29sZWFuPiA9PiB7XG5cbiAgICByZXR1cm4gaXNPYnNlcnZhYmxlKGl0ZW0uc2hvdykgPyBpdGVtLnNob3cgOiBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVzdGl0dWlzY2UgdHJ1ZSBzZSBsJ2VsZW1lbnRvXG4gICAqIGRldmUgZXNzZXJlIHZpc3VhbGl6emF0byBpbiBhdXRvbWF0aWNvXG4gICAqIHF1YW5kbyBjb3JyaXNwb25kZSBhbGwndXJsIGNvcnJlbnRlXG4gICAqIG8gc2UgdW5vIGRlaSBzdW9pIG5vZGkgZmlnbGlcbiAgICogZScgdW4gZWxlbWVudG8gY2hlIGRldmUgZXNzZXJlIHZpc3VhbGl6emF0byBpbiBhdXRvbWF0aWNvLlxuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgaXNBdXRvU2hvd0l0ZW0gPSAoaXRlbTogTWVudUl0ZW0pOiBib29sZWFuID0+XG5cbiAgICBpdGVtLnNob3cgPT09IEFVVE9fU0hPV1xuICAgICYmICh0aGlzLmlzQ3VycmVudFBhZ2VJdGVtKGl0ZW0pXG4gICAgICB8fCAoaXRlbS5zdWJJdGVtcyAmJiBpdGVtLnN1Ykl0ZW1zLnNvbWUodGhpcy5pc0F1dG9TaG93SXRlbSkpKTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRvcmkgcmVjdXBlcm8gaW5mbyBpdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgZ2V0UHJvcGVydHlWYWx1ZSA9IChwcm9wZXJ0eTogc3RyaW5nIHwgR2V0U3RyaW5nRm4pID0+IGlzRnVuY3Rpb24ocHJvcGVydHkpID8gKHByb3BlcnR5IGFzIEdldFN0cmluZ0ZuKSgpIDogcHJvcGVydHk7XG5cbiAgLy8gZ2V0SXRlbUxpbmsgPSAoaXRlbTogTWVudUl0ZW0pOiBzdHJpbmcgPT4gaXNGdW5jdGlvbihpdGVtLmxpbmspID8gKGl0ZW0ubGluayBhcyBHZXRTdHJpbmdGbikoKSA6IGl0ZW0ubGluaztcbiAgLy8gZ2V0SXRlbUxpbmtSZWdleCA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiBpc0Z1bmN0aW9uKGl0ZW0ubGlua1JlZ2V4KSA/IChpdGVtLmxpbmtSZWdleCBhcyBHZXRTdHJpbmdGbikoKSA6IGl0ZW0ubGlua1JlZ2V4O1xuICAvLyBnZXRJdGVtTGFiZWwgPSAoaXRlbTogTWVudUl0ZW0pOiBzdHJpbmcgPT4gaXNGdW5jdGlvbihpdGVtLmxhYmVsKSA/IChpdGVtLmxhYmVsIGFzIEdldFN0cmluZ0ZuKSgpIDogaXRlbS5sYWJlbDtcbiAgLy8gZ2V0SXRlbVRpdGxlID0gKGl0ZW06IE1lbnVJdGVtKTogc3RyaW5nID0+IGlzRnVuY3Rpb24oaXRlbS50aXRsZSkgPyAoaXRlbS50aXRsZSBhcyBHZXRTdHJpbmdGbikoKSA6IGl0ZW0udGl0bGU7XG4gIC8vIGdldEl0ZW1BcmlhTGFiZWwgPSAoaXRlbTogTWVudUl0ZW0pOiBzdHJpbmcgPT4gaXNGdW5jdGlvbihpdGVtLmFyaWFMYWJlbCkgPyAoaXRlbS5hcmlhTGFiZWwgYXMgR2V0U3RyaW5nRm4pKCkgOiBpdGVtLmFyaWFMYWJlbDtcblxuICBnZXRJdGVtTGluayA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiB0aGlzLmdldFByb3BlcnR5VmFsdWUoaXRlbS5saW5rKTtcbiAgZ2V0SXRlbUxpbmtSZWdleCA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiB0aGlzLmdldFByb3BlcnR5VmFsdWUoaXRlbS5saW5rUmVnZXgpO1xuICBnZXRJdGVtTGFiZWwgPSAoaXRlbTogTWVudUl0ZW0pOiBzdHJpbmcgPT4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGl0ZW0ubGFiZWwpO1xuICBnZXRJdGVtVGl0bGUgPSAoaXRlbTogTWVudUl0ZW0pOiBzdHJpbmcgPT4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGl0ZW0udGl0bGUpO1xuICBnZXRJdGVtQXJpYUxhYmVsID0gKGl0ZW06IE1lbnVJdGVtKTogc3RyaW5nID0+IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShpdGVtLmFyaWFMYWJlbCk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0b3JpIGRpIHV0aWxpdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogVmVyaWZpY2EgY2hlIGwndXJsIGRhdG8gaW4gaW5wdXRcbiAgICogc2lhIHF1ZWxsbyBjb3JyZW50ZVxuICAgKlxuICAgKiBAcGFyYW0gdXJsXG4gICAqL1xuICBpc0N1cnJlbnRVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+XG5cbiAgICB1cmwgIT0gdW5kZWZpbmVkXG4gICAgJiYgdGhpcy5yb3V0ZXIudXJsXG4gICAgICAuc3BsaXQoJz8nKVswXVxuICAgICAgLm1hdGNoKG5ldyBSZWdFeHAoJ14nLmNvbmNhdCh1cmwpLmNvbmNhdCgnJCcpLCAnaScpKSAhPSBudWxsO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1ldG9kaSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBJbml6aWFsaXp6YSBnbGkgZWxlbWVudGkgZGVsIG1lbnVcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaW5pemlhbGl6emFJdGVtcyhpdGVtczogTWVudUl0ZW1bXSkge1xuXG4gICAgaWYgKGl0ZW1zPy5sZW5ndGgpIHtcblxuICAgICAgLy8gSW1wb3N0YXppb25pIGRpIGRlZmF1bHQgcGVyIGdsaSBlbGVtZW50aVxuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTWVudUl0ZW0pID0+IHtcblxuICAgICAgICBpZiAoaXRlbS5pZCA9PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgIGl0ZW0uaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLnNob3cgPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgICBpdGVtLnNob3cgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uY29sbGFwc2libGUgPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgICBpdGVtLmNvbGxhcHNpYmxlID0gdGhpcy5jb2xsYXBzaWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLmNvbGxhcHNpYmxlID09IGZhbHNlKSB7XG5cbiAgICAgICAgICBpdGVtLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uY29sbGFwc2VkID09IHVuZGVmaW5lZCkge1xuXG4gICAgICAgICAgLy8gaXRlbS5jb2xsYXBzZWQgPSAodGhpcy5jb2xsYXBzZWQgPT0gdW5kZWZpbmVkKSA/IChpdGVtLmNvbGxhcHNpYmxlID09IHRydWUpIDogdGhpcy5jb2xsYXBzaWJsZTtcbiAgICAgICAgICBpdGVtLmNvbGxhcHNlZCA9ICh0aGlzLmNvbGxhcHNlZCA9PSB1bmRlZmluZWQpID8gKGl0ZW0uY29sbGFwc2libGUgPT0gdHJ1ZSkgOiB0aGlzLmNvbGxhcHNlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2V0UGFyZW50KGl0ZW1zLCB0aGlzLnBhcmVudCk7XG4gICAgICB0aGlzLmltcG9zdGFVcmxFZmZldHRpdmkoaXRlbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3ZyYXNjcml2ZSBsYSBwcm9wcmlldGEgbGluayBkZWdsaSBlbGVtZW50aSBkZWwgbWVudVxuICAgKiBzZSBsYSBwcm9wcmlldGEgbGlua1JlZ2V4IG1hdGNoYSBjb24gbCd1cmwgY29ycmVudGUuXG4gICAqL1xuICBwcml2YXRlIGltcG9zdGFVcmxFZmZldHRpdmkoaXRlbXM6IE1lbnVJdGVtW10pIHtcblxuICAgIGlmIChpdGVtcz8ubGVuZ3RoKSB7XG5cbiAgICAgIGl0ZW1zLmZvckVhY2godGhpcy5pbXBvc3RhVXJsRWZmZXR0aXZvKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU292cmFzY3JpdmUgbGEgcHJvcHJpZXRhIGxpbmsgZGVsbCdlbGVtZW50byBkZWwgbWVudVxuICAgKiBzZSBsYSBwcm9wcmlldGEgbGlua1JlZ2V4IG1hdGNoYSBjb24gbCd1cmwgY29ycmVudGUuXG4gICAqL1xuICBwcml2YXRlIGltcG9zdGFVcmxFZmZldHRpdm8gPSAoaXRlbTogTWVudUl0ZW0pID0+IHtcblxuICAgIGlmICghdGhpcy5kaXNhYmxlTGlua092ZXJ3cml0aW5nICYmIGl0ZW0gJiYgdGhpcy5pc0N1cnJlbnRVcmwodGhpcy5nZXRJdGVtTGlua1JlZ2V4KGl0ZW0pKSkge1xuXG4gICAgICBpdGVtLmxpbmsgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBFbWV0dGUgbCdlbGVtZW50b1xuICAgKiBhc3NvY2lhdG8gYWxsJ3VybCBjb3JyZW50ZVxuICAgKi9cbiAgcHJpdmF0ZSBlbWl0Q3VycmVudEl0ZW0oKSB7XG5cbiAgICBsZXQgaXRlbTogTWVudUl0ZW0gPSB0aGlzLmZpbmRDdXJyZW50SXRlbSh0aGlzLml0ZW1zKTtcblxuICAgIGlmIChpdGVtICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICB0aGlzLmltcG9zdGFVcmxFZmZldHRpdm8oaXRlbSk7XG5cbiAgICAgIHRoaXMuZW1pdERlYnVnKCdFbWlzc2lvbmUgaXRlbSBtZW51IHVybCBjb3JyZW50ZTonKTtcbiAgICAgIHRoaXMuZW1pdERlYnVnKGl0ZW0pO1xuXG4gICAgICB0aGlzLmN1cnJlbnRJdGVtLmVtaXQoaXRlbSk7XG5cbiAgICAgIC8vIHRvZG8gPz8/XG4gICAgICAvLyBpZiAodGhpcy5jb2xsYXBzZU90aGVyKSB7XG4gICAgICAvL1xuICAgICAgLy8gICB0aGlzLmNvbGxhcHNlT3RoZXIoaXRlbSk7XG4gICAgICAvLyB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJpY2VyY2EgbCdlbGVtZW50byBkaSBtZW51IGluZXJlbnRlXG4gICAqIGwndXJsIGNvcnJlbnRlXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBmaW5kQ3VycmVudEl0ZW0oaXRlbXM6IE1lbnVJdGVtW10pOiBNZW51SXRlbSB7XG5cbiAgICBsZXQgcmVzdWx0SXRlbTogTWVudUl0ZW0gPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXRlbXM/Lmxlbmd0aCkge1xuXG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBNZW51SXRlbSkgPT4ge1xuXG4gICAgICAgIGlmIChyZXN1bHRJdGVtID09IHVuZGVmaW5lZCAmJiBpdGVtICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlzQ3VycmVudFBhZ2VJdGVtKGl0ZW0pKSB7XG5cbiAgICAgICAgICByZXN1bHRJdGVtID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdEl0ZW07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBmaW5kSXRlbShpZDogc3RyaW5nLCBpdGVtczogTWVudUl0ZW1bXSkge1xuXG4gICAgbGV0IHJlc3VsdEl0ZW06IE1lbnVJdGVtID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGl0ZW1zPy5sZW5ndGgpIHtcblxuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTWVudUl0ZW0pID0+IHtcblxuICAgICAgICBpZiAocmVzdWx0SXRlbSA9PSB1bmRlZmluZWQgJiYgaXRlbSAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgIHJlc3VsdEl0ZW0gPSBpdGVtLmlkID09IGlkID8gaXRlbSA6IHRoaXMuZmluZEl0ZW0oaWQsIGl0ZW0uc3ViSXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0SXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIHByaXZhdGUgZXNwYW5kaVBlcmNvcnNvKGlkOiBzdHJpbmcpIHtcblxuICAgIGlmICh0aGlzLml0ZW1zKSB7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbTogTWVudUl0ZW0pID0+IHtcblxuICAgICAgICBsZXQgaW5uZXJJdGVtOiBNZW51SXRlbSA9IHRoaXMuZmluZEl0ZW0oaWQsIGl0ZW0uc3ViSXRlbXMpO1xuXG4gICAgICAgIGlmICgoaXRlbT8uaWQgPT0gaWQpIHx8IGlubmVySXRlbSAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgIHRoaXMuZXNwYW5kaUl0ZW0oaXRlbSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZU90aGVyKSB7XG5cbiAgICAgICAgICAgIHRoaXMuZG9Db2xsYXBzZU90aGVyKGl0ZW0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbm5lckl0ZW0pIHtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm1vc3RyYUl0ZW0uZW1pdChpZCksIENPTExBUFNJTkdfRFVSQVRJT04pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlc3BhbmRpTWVudSA9ICgpID0+IHRoaXMuc2V0Q29sbGFwc2VkTWVudSgnc2hvdycpO1xuICBwcml2YXRlIGNvbGxhc3NhTWVudSA9ICgpID0+IHRoaXMuc2V0Q29sbGFwc2VkTWVudSgnaGlkZScpO1xuXG4gIHByaXZhdGUgc2V0Q29sbGFwc2VkTWVudShtb2RlOiBDb2xsYXBzZU1vZGUpIHtcblxuICAgIGlmICh0aGlzLml0ZW1zKSB7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuc2V0Q29sbGFwc2VkKGl0ZW0sIG1vZGUpKTtcbiAgICB9XG4gIH1cblxuICBlc3BhbmRpSXRlbSA9IChpdGVtOiBNZW51SXRlbSkgPT4gdGhpcy5zZXRDb2xsYXBzZWQoaXRlbSwgJ3Nob3cnKTtcbiAgY29sbGFzc2FJdGVtID0gKGl0ZW06IE1lbnVJdGVtKSA9PiB0aGlzLnNldENvbGxhcHNlZChpdGVtLCAnaGlkZScpO1xuICB0b2dnbGVJdGVtID0gKGl0ZW06IE1lbnVJdGVtKSA9PiB0aGlzLnNldENvbGxhcHNlZChpdGVtLCAndG9nZ2xlJyk7XG5cbiAgc2V0Q29sbGFwc2VkKGl0ZW06IE1lbnVJdGVtLCBtb2RlOiBDb2xsYXBzZU1vZGUpIHtcblxuICAgIGlmIChpdGVtICYmIGl0ZW0uY29sbGFwc2libGUpIHtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG5cbiAgICAgICAgY2FzZSAnaGlkZSc6XG4gICAgICAgICAgaXRlbS5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Nob3cnOlxuICAgICAgICAgIGl0ZW0uY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2FzZSAndG9nZ2xlJzpcbiAgICAgICAgICBpdGVtLmNvbGxhcHNlZCA9ICFpdGVtLmNvbGxhcHNlZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBhcmVudChpdGVtczogTWVudUl0ZW1bXSwgcGFyZW50OiBNZW51SXRlbSkge1xuXG4gICAgaWYgKGl0ZW1zPy5sZW5ndGggJiYgcGFyZW50KSB7XG5cbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IE1lbnVJdGVtKSA9PiB7XG5cbiAgICAgICAgaWYgKGl0ZW0gIT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgICBpdGVtLnBhcmVudCA9IHRoaXMudG9MaWdodEl0ZW0ocGFyZW50KTtcbiAgICAgICAgICB0aGlzLnNldFBhcmVudChpdGVtLnN1Ykl0ZW1zLCBpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b0xpZ2h0SXRlbShlOiBNZW51SXRlbSk6IE1lbnVJdGVtIHtcblxuICAgIHJldHVybiBlICE9IHVuZGVmaW5lZFxuICAgICAgPyB7XG4gICAgICAgIGlkOiBlLmlkLFxuICAgICAgICBsYWJlbDogZS5sYWJlbCxcbiAgICAgICAgbGluazogZS5saW5rLFxuICAgICAgICBwYXJlbnQ6IHRoaXMudG9MaWdodEl0ZW0oZS5wYXJlbnQpXG4gICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGl0ZW1PbkNsaWNrKGl0ZW06IE1lbnVJdGVtKSB7XG5cbiAgICBpZiAoaXRlbSkge1xuXG4gICAgICBpZiAoaXRlbS5jYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGl0ZW0uY2FsbGJhY2spKSB7XG5cbiAgICAgICAgaXRlbS5jYWxsYmFjaygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbS5jb2xsYXBzaWJsZSkge1xuXG4gICAgICAgIGl0ZW0uY29sbGFwc2VkID0gIWl0ZW0uY29sbGFwc2VkO1xuXG4gICAgICAgIGlmIChpdGVtLmNvbGxhcHNlZCA9PT0gZmFsc2UgJiYgdGhpcy5jb2xsYXBzZU90aGVyID09PSB0cnVlKSB7XG5cbiAgICAgICAgICB0aGlzLmRvQ29sbGFwc2VPdGhlcihpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogRWZmZXR0byBmaXNhcm1vbmljYVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBkb0NvbGxhcHNlT3RoZXIoaXRlbTogTWVudUl0ZW0pIHtcblxuICAgIGlmIChpdGVtKSB7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRtOiBNZW51SXRlbSkgPT4ge1xuXG4gICAgICAgIGlmIChpdG0gJiYgaXRtLmlkICE9IGl0ZW0uaWQpIHtcblxuICAgICAgICAgIGl0bS5jb2xsYXBzZWQgPSB0cnVlO1xuXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudEl0ZW1cbiAgICogQHBhcmFtIGl0ZW1cbiAgICovXG4gIGN1cnJlbnRJdGVtSGFuZGxlcihjdXJyZW50SXRlbTogTWVudUl0ZW0sIGl0ZW06IE1lbnVJdGVtKSB7XG5cbiAgICBpZiAoY3VycmVudEl0ZW0pIHtcblxuICAgICAgdGhpcy5jdXJyZW50SXRlbS5lbWl0KGN1cnJlbnRJdGVtKTtcblxuICAgICAgaWYgKHRoaXMuZXhwYW5kQXV0b21hdGljYWxseSA9PT0gdHJ1ZSAmJiAhdGhpcy5pbm5lck1lbnUpIHtcblxuICAgICAgICB0aGlzLmVzcGFuZGlQZXJjb3JzbyhjdXJyZW50SXRlbS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29sbGFwc2VkT25DaGFuZ2UoKSB7XG5cbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZW1pdE1heEhlaWdodCgpXG4gICAgLy8gICB0aGlzLmNvbGxhcHNlZENoYW5nZS5lbWl0KHRoaXMuY29sbGFwc2VkKVxuICAgIC8vIH0sIDUwKVxuICB9XG5cbiAgaXRlbU9uQXJyb3dEb3duKCkge1xuXG4gICAgbGV0IGZvY3VzYWJsZUl0ZW1zID0gdGhpcy5mb2N1c2FibGVJdGVtcztcbiAgICBmb2N1c2FibGVJdGVtcy5maWx0ZXIoKGluZGV4KSA9PiBpbmRleCA+IGZvY3VzYWJsZUl0ZW1zLmluZGV4KGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKS5maXJzdCgpPy5mb2N1cygpO1xuICB9XG5cbiAgaXRlbU9uQXJyb3dVcCgpIHtcbiAgICBsZXQgZm9jdXNhYmxlSXRlbXMgPSB0aGlzLmZvY3VzYWJsZUl0ZW1zO1xuICAgIGZvY3VzYWJsZUl0ZW1zLmZpbHRlcigoaW5kZXgpID0+IGluZGV4IDwgZm9jdXNhYmxlSXRlbXMuaW5kZXgoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpLmxhc3QoKT8uZm9jdXMoKTtcbiAgfVxuXG4gIGdldCBmb2N1c2FibGVJdGVtcygpIHtcblxuICAgIHJldHVybiB3aW5kb3dbJyQnXSgnYm9keScpLmZpbmQoRk9DVVNBQkxFX0lURU1TX1NFTEVDVE9SKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImluaXppYWxpenphemlvbmVDb21wbGV0YXRhXCI+XG5cbiAgPHVsICNtZW51XG4gICAgICBpZD1cInt7aWR9fVwiXG4gICAgICBbYXR0ci5yb2xlXT1cIidtZW51J1wiXG4gICAgICBjbGFzcz1cImluYWlsLW1lbnUge3tjbGFzc319XCJcbiAgICAgIFtuZ1N0eWxlXT1cInsnaGVpZ2h0LnB4JzogKG1lbnVIZWlnaHQkIHwgYXN5bmMpfVwiXG4gICAgICBbbmdDbGFzc109XCJ7J2xpdmVsbG9fMic6IGlubmVyTWVudSwgJ2NvbGxhcHNlZCc6IGlzQ29sbGFwc2VkKCl9XCI+XG5cbiAgICA8ZGVidWctcHJlICpuZ0lmPVwic2hvd1N0YXRlXCI+W2luYWlsLW1lbnUtaW50cmFuZXRdPGJyPlxuICAgICAgPHN0YXRlLXByb3BlcnRpZSBbbGFiZWxdPVwiJ2lkJ1wiIFtwcm9wZXJ0aWVdPVwiaWRcIj48L3N0YXRlLXByb3BlcnRpZT5cbiAgICAgIDxzdGF0ZS1wcm9wZXJ0aWUgW2xhYmVsXT1cIidpbm5lck1lbnUnXCIgW3Byb3BlcnRpZV09XCJpbm5lck1lbnVcIj48L3N0YXRlLXByb3BlcnRpZT5cbiAgICAgIDxzdGF0ZS1wcm9wZXJ0aWUgW2xhYmVsXT1cIidjb2xsYXBzaWJsZSdcIiBbcHJvcGVydGllXT1cImNvbGxhcHNpYmxlXCI+PC9zdGF0ZS1wcm9wZXJ0aWU+XG4gICAgICA8c3RhdGUtcHJvcGVydGllIFtsYWJlbF09XCInY29sbGFwc2VkJ1wiIFtwcm9wZXJ0aWVdPVwiY29sbGFwc2VkXCI+PC9zdGF0ZS1wcm9wZXJ0aWU+XG4gICAgICA8c3RhdGUtcHJvcGVydGllIFtsYWJlbF09XCInY29sbGFwc2VPdGhlcidcIiBbcHJvcGVydGllXT1cImNvbGxhcHNlT3RoZXJcIj48L3N0YXRlLXByb3BlcnRpZT5cbiAgICAgIDwhLS0gICAgICB7e2VsZW1lbnRzIHwganNvbn19LS0+XG4gICAgPC9kZWJ1Zy1wcmU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XG5cbiAgICAgIDxsaSAqbmdJZj1cInNob3dJdGVtKGl0ZW0pIHx8IChnZXRTaG93T2JzZXJ2YWJsZShpdGVtKSB8IGFzeW5jKVwiXG4gICAgICAgICAgW2F0dHIucm9sZV09XCJpdGVtLmxpbmsgPyAnbWVudWl0ZW0nIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGlzQWN0aXZlKGl0ZW0pfVwiXG4gICAgICAgICAgY2xhc3M9XCJsaXZlbGxvXzFcIj5cbiAgICAgICAgPGEgKm5nSWY9XCJpdGVtLmxpbmtcIlxuICAgICAgICAgICBbaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgIFthdHRyLnRpdGxlXT1cImdldEl0ZW1UaXRsZShpdGVtKVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0SXRlbUFyaWFMYWJlbChpdGVtKVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlzQ29sbGFwc2VkKCkgPyAnLTEnIDogJzAnXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZ2V0SXRlbUxpbmsoaXRlbSlcIlxuICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiaXRlbS5xdWVyeVBhcmFtc1wiXG4gICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0SXRlbUxhYmVsKGl0ZW0pXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0l0ZW1Db2xsYXBzaWJsZShpdGVtKSA/ICFpdGVtLmNvbGxhcHNlZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgIChjbGljayk9XCJpdGVtT25DbGljayhpdGVtKVwiXG4gICAgICAgICAgIChrZXl1cC5hcnJvd1VwKT1cIml0ZW1PbkFycm93VXAoKVwiXG4gICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwiaXRlbU9uQXJyb3dEb3duKClcIlxuICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiaXRlbU9uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxhICpuZ0lmPVwiIWl0ZW0ubGlua1wiXG4gICAgICAgICAgIFtpZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiZ2V0SXRlbVRpdGxlKGl0ZW0pXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRJdGVtQXJpYUxhYmVsKGl0ZW0pXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXNDb2xsYXBzZWQoKSA/ICctMScgOiAnMCdcIlxuICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRJdGVtTGFiZWwoaXRlbSlcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzSXRlbUNvbGxhcHNpYmxlKGl0ZW0pID8gIWl0ZW0uY29sbGFwc2VkIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgKGNsaWNrKT1cIml0ZW1PbkNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgKGtleXVwLmFycm93VXApPVwiaXRlbU9uQXJyb3dVcCgpXCJcbiAgICAgICAgICAgKGtleXVwLmFycm93RG93bik9XCJpdGVtT25BcnJvd0Rvd24oKVwiXG4gICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJpdGVtT25DbGljayhpdGVtKVwiXG4gICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJpdGVtT25DbGljayhpdGVtKVwiPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxkZWJ1Zy1wcmUgKm5nSWY9XCJzaG93U3RhdGVcIj5bbWVudS1pdGVtXTxicj5cbiAgICAgICAgICA8c3RhdGUtcHJvcGVydGllIFtsYWJlbF09XCInaWQnXCIgW3Byb3BlcnRpZV09XCJpdGVtLmlkXCI+PC9zdGF0ZS1wcm9wZXJ0aWU+XG4gICAgICAgICAgPHN0YXRlLXByb3BlcnRpZSBbbGFiZWxdPVwiJ2NvbGxhcHNpYmxlJ1wiIFtwcm9wZXJ0aWVdPVwiaXRlbS5jb2xsYXBzaWJsZVwiPjwvc3RhdGUtcHJvcGVydGllPlxuICAgICAgICAgIDxzdGF0ZS1wcm9wZXJ0aWUgW2xhYmVsXT1cIidjb2xsYXBzZWQnXCIgW3Byb3BlcnRpZV09XCJpdGVtLmNvbGxhcHNlZFwiPjwvc3RhdGUtcHJvcGVydGllPlxuICAgICAgICAgIDwhLS0gICAgICAgICAge3tlbGVtZW50IHwganNvbn19LS0+XG4gICAgICAgIDwvZGVidWctcHJlPlxuICAgICAgICA8aW5haWwtbWVudSAqbmdJZj1cImhhc1N1Ykl0ZW1zKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIml0ZW0uaWQrJy1pdGVtcydcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW0uc3ViSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyZW50XT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbaW5uZXJNZW51XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZW1pdEN1cnJlbnRdPVwiZW1pdEN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY29sbGFwc2libGVdPVwiaXRlbS5jb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xsYXBzZWRdPVwiaXRlbS5jb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgICAgICBbY29sbGFwc2VPdGhlcl09XCJjb2xsYXBzZU90aGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbGxhcHNlXT1cImNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvZ2dsZV09XCJ0b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJtb3N0cmFJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dTdGF0ZV09XCJzaG93U3RhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoaXRlbUNsaWNrKT1cIml0ZW1DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoY3VycmVudEl0ZW0pPVwiY3VycmVudEl0ZW1IYW5kbGVyKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgPC9pbmFpbC1tZW51PlxuICAgICAgPC9saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC91bD5cbjwvbmctY29udGFpbmVyPlxuXG5cbiJdfQ==
|
|
544
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pbmFpbC1jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvbGF5b3V0L21lbnUvbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1pbmFpbC1jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvbGF5b3V0L21lbnUvbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsc0JBQXNCLEVBQXNCLE1BQU0sb0NBQW9DLENBQUM7QUFDL0YsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFFcEQsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDaEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBRXpCLE1BQU0sd0JBQXdCLEdBQUcsNkNBQTZDLENBQUM7QUE2Qi9FOzs7O0dBSUc7QUFDSCxNQUFNLFNBQVMsR0FB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aUZBLHNXRDJCYSxhQUFhOzRGQUFiLGFBQWE7a0JBTnpCLFNBQVM7K0JBQ0UsWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJOzswQkF1S3hCLE1BQU07MkJBQUMsc0JBQXNCOzRDQTlKMUMsTUFBTTtzQkFETCxLQUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSztnQkFRTixVQUFVO3NCQURULEtBQUs7Z0JBUU4sV0FBVztzQkFEVixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFTTixJQUFJO3NCQURILEtBQUs7Z0JBUU4sT0FBTztzQkFETixLQUFLO2dCQU9OLE1BQU07c0JBREwsS0FBSztnQkFPTixLQUFLO3NCQURKLEtBQUs7Z0JBUU4sTUFBTTtzQkFETCxLQUFLO2dCQWlCTixXQUFXO3NCQURWLEtBQUs7Z0JBU04sU0FBUztzQkFEUixLQUFLO2dCQVFOLGFBQWE7c0JBRFosS0FBSztnQkFTTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBT04sU0FBUztzQkFEUixNQUFNO2dCQVNQLFdBQVc7c0JBRFYsTUFBTTtnQkFJUCxJQUFJO3NCQURILFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2lzRnVuY3Rpb259IGZyb20gJ3J4anMvaW50ZXJuYWwtY29tcGF0aWJpbGl0eSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtjbG9uZSwgdXVpZHY0fSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9jb21tb24ub3BlcmF0b3JzJztcbmltcG9ydCB7QmFzaWNVeEVsZW1lbnRDb21wb25lbnR9IGZyb20gJy4uLy4uL2Jhc2ljLXV4LWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7TkdfSU5BSUxfQ09NTU9OX0NPTkZJRywgTmdJbmFpbENvbW1vbkNvbmZpZ30gZnJvbSAnLi4vLi4vLi4vLi4vbmctaW5haWwtY29tbW9uLmNvbmZpZyc7XG5pbXBvcnQge2dldENvbmZpZ1ZhbHVlfSBmcm9tICcuLi8uLi9iYXNlLmNvbXBvbmVudCc7XG5cbmNvbnN0IENPTExBUFNJTkdfRFVSQVRJT04gPSAzNTA7XG5jb25zdCBBVVRPX1NIT1cgPSAnYXV0byc7XG5cbmNvbnN0IEZPQ1VTQUJMRV9JVEVNU19TRUxFQ1RPUiA9ICd1bC5pbmFpbC1tZW51ID4gbGkgPiBhOm5vdChbdGFiaW5kZXg9XCItMVwiXSknO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIENoZWNrRm4gPSAoKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgdHlwZSBHZXRTdHJpbmdGbiA9ICgpID0+IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIHR5cGUgTWVudUl0ZW1TaG93TW9kZSA9ICdhdXRvJztcblxudHlwZSBDb2xsYXBzZU1vZGUgPSAnc2hvdycgfCAnaGlkZScgfCAndG9nZ2xlJztcblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbSB7XG5cbiAgaWQ/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmcgfCBHZXRTdHJpbmdGbjtcbiAgdGl0bGU/OiBzdHJpbmcgfCBHZXRTdHJpbmdGbjtcbiAgYXJpYUxhYmVsPzogc3RyaW5nIHwgR2V0U3RyaW5nRm47XG4gIGxpbms/OiBzdHJpbmcgfCBHZXRTdHJpbmdGbjtcbiAgbGlua1JlZ2V4Pzogc3RyaW5nIHwgR2V0U3RyaW5nRm47XG4gIHF1ZXJ5UGFyYW1zPzoge1xuICAgIFtrOiBzdHJpbmddOiBhbnk7XG4gIH07XG4gIGNhbGxiYWNrPzogRnVuY3Rpb247XG4gIGFjdGl2ZUxpbmtzPzogc3RyaW5nW107XG4gIHNob3c/OiBib29sZWFuIHwgQ2hlY2tGbiB8IE1lbnVJdGVtU2hvd01vZGU7XG4gIHNob3ckPzogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICBzdWJJdGVtcz86IE1lbnVJdGVtW107XG4gIHBhcmVudD86IE1lbnVJdGVtO1xufVxuXG4vKipcbiAqIERlZXAgY29weSBkZWxsJ29nZ2V0dG8gTWVudUl0ZW1cbiAqXG4gKiBAcGFyYW0gaXRlbVxuICovXG5jb25zdCBjbG9uZUl0ZW0gPSAoaXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSA9PiB7XG5cbiAgbGV0IGl0ZW1DbG9uZTogTWVudUl0ZW07XG5cbiAgaWYgKGl0ZW0pIHtcblxuICAgIGxldCBzaG93JCA9IGl0ZW0uc2hvdyQ7XG4gICAgaXRlbS5zaG93JCA9IHVuZGVmaW5lZDtcblxuICAgIGl0ZW1DbG9uZSA9IGNsb25lKGl0ZW0pO1xuXG4gICAgaXRlbUNsb25lLmxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICBpdGVtQ2xvbmUubGluayA9IGl0ZW0ubGluaztcbiAgICBpdGVtQ2xvbmUubGlua1JlZ2V4ID0gaXRlbS5saW5rUmVnZXg7XG4gICAgaXRlbUNsb25lLmNhbGxiYWNrID0gaXRlbS5jYWxsYmFjaztcbiAgICBpdGVtQ2xvbmUuc2hvdyA9IGl0ZW0uc2hvdztcbiAgICBpdGVtQ2xvbmUuc2hvdyQgPSBzaG93JDtcbiAgICBpdGVtQ2xvbmUucGFyZW50ID0gY2xvbmVJdGVtKGl0ZW0ucGFyZW50KTtcbiAgICBpdGVtQ2xvbmUuc3ViSXRlbXMgPSBjbG9uZUl0ZW1zKGl0ZW0uc3ViSXRlbXMpO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1DbG9uZTtcbn07XG5cbi8qKlxuICogRGVlcCBjb3B5IGRlbGwnb2dnZXR0byBNZW51SXRlbVtdXG4gKlxuICogQHBhcmFtIGl0ZW1zXG4gKi9cbmNvbnN0IGNsb25lSXRlbXMgPSAoaXRlbXM6IE1lbnVJdGVtW10pOiBNZW51SXRlbVtdID0+IHtcblxuICBsZXQgaXRlbXNDbG9uZTogTWVudUl0ZW1bXTtcblxuICBpZiAoaXRlbXMpIHtcblxuICAgIGl0ZW1zQ2xvbmUgPSBpdGVtcy5tYXAoaXRlbSA9PiBjbG9uZUl0ZW0oaXRlbSkpO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1zQ2xvbmU7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpbmFpbC1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5jc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGV4dGVuZHMgQmFzaWNVeEVsZW1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICAvKipcbiAgICogRWxlbWVudG8gcGFyZW50IGRlbCBtZW51LlxuICAgKiAoIFF1ZXN0byBpbnB1dCBub24gZGV2ZSBlc3NlcmUgcGFzc2F0bywgc2VydmUgaW50ZXJuYW1lbnRlIHBlciBmYXIgZnVuemlvbmFyZSBpbCBtZW51IClcbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhcmVudDogTWVudUl0ZW07XG5cbiAgLyoqXG4gICAqIEVsZW1lbnRvIHBhcmVudCBkZWwgbWVudS5cbiAgICogKCBRdWVzdG8gaW5wdXQgbm9uIGRldmUgZXNzZXJlIHBhc3NhdG8sIHNlcnZlIGludGVybmFtZW50ZSBwZXIgZmFyIGZ1bnppb25hcmUgaWwgbWVudSApXG4gICAqL1xuICBASW5wdXQoKVxuICBpbm5lck1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogaWQgZGVsbCdlbGVtZW50byBjaGUgc2kgdnVvbGUgYXR0aXZhcmUuXG4gICAqIFNlIHNwZWNpZmljYXRvIGZhIGRpdmVudGFyZSBib2xkIGxhIHZvY2UgZGkgbWVudSBhc3NvY2lhdGFcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUl0ZW06IHN0cmluZztcblxuICAvKipcbiAgICogRW1ldHRlIGwnZWxlbWVudG8gZGVsIG1lbnVcbiAgICogY2hlIGNvcnJpc3BvbmRlIGFsbCd1cmwgY29ycmVudGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBlbWl0Q3VycmVudDogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogQ29sbGFzc2EgaWwgbWVudVxuICAgKiBTZSBwYXNzYXRvIGluIGlucHV0IHVuIGlkIGNvbGxhc3NhIGxvIHNwZWNpZmljbyBlbGVtZW50by5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbGxhcHNlOiBPYnNlcnZhYmxlPHN0cmluZyB8IHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBFc3BhbmRlIGxlIHZvY2kgZGkgbWVudSBkaSBwcmltbyBsaXZlbGxvLlxuICAgKiBTZSBzcGVjaWZpY2F0byB1biBpZCBlc3BhbmRlIGlsIHJhbW8gZGVsIG1lbnVcbiAgICogY2hlIHBvcnRhIGFsbCdlbGVtZW50byBjb24gbCdpZCBzcGVjaWZpY2F0by5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3c6IE9ic2VydmFibGU8c3RyaW5nIHwgdm9pZD47XG5cbiAgLyoqXG4gICAqIEVzcGFuZGUgdHV0dGUgbGUgdm9jaSBkZWwgbWVudVxuICAgKiBjb21wcmVzZSBxdWVsbGUgZGVpIGxpdmVsbGkgYW5uaWRhdGlcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNob3dBbGw6IE9ic2VydmFibGU8dm9pZD47IC8vIHRvZG8gdGVzdGFyZVxuXG4gIC8qKlxuICAgKiBFZmZldHR1YSBpbCB0b2dnbGUgZGVsbCdlbGVtZW50byBzcGVjaWZpY2F0byB0cmFtaXRlIGlkXG4gICAqL1xuICBASW5wdXQoKVxuICB0b2dnbGU6IE9ic2VydmFibGU8c3RyaW5nPjsgLy8gdG9kbyB0ZXN0YXJlXG5cbiAgLyoqXG4gICAqIEVsZW1lbnRpIGRlbCBtZW51XG4gICAqL1xuICBASW5wdXQoKVxuICBpdGVtczogTWVudUl0ZW1bXTtcbiAgb3JpZ2luYWxJdGVtczogTWVudUl0ZW1bXTtcblxuICAvKipcbiAgICpcbiAgICovXG4gIEBJbnB1dCgpXG4gIHJlaW5pdDogT2JzZXJ2YWJsZTx2b2lkIHwgTWVudUl0ZW1bXT47XG5cbiAgLyoqXG4gICAqIFNlIHRydWUgZGlzYWJpbGl0YSBsYSBzb3ZyYXNjcml0dHVyYSBkZWxsYSBwcm9wcmlldGFcbiAgICogbGluayBuZWdsaSBlbGVtZW50aSBkZWwgbWVudVxuICAgKiBxdWFuZG8gbGEgcHJvcHJpZXRhIGxpbmtSZWdleCBtYXRjaGFcbiAgICogY29uIGwndXJsIGNvcnJlbnRlXG4gICAqL1xuICBkaXNhYmxlTGlua092ZXJ3cml0aW5nOiBib29sZWFuID0gZ2V0Q29uZmlnVmFsdWUodGhpcy5saWJDb25maWc/Lm1lbnVDb21wb25lbnQ/LmRpc2FibGVMaW5rT3ZlcndyaXRpbmcsIGZhbHNlKTtcblxuICAvKipcbiAgICogU2UgdHJ1ZSBpbmRpY2EgY2hlIGxlIHZvY2kgZGVsIG1lbnUgc29ubyBjb2xsYXNzYWJpbGkuXG4gICAqIFF1ZXN0YSBpbXBvc3RhemlvbmUgdmllbmUgc292cmFzY3JpdHRhIHNlIHNwZWNpZmljYXRvIGRpdmVyc2FtZW50ZVxuICAgKiBuZWdsaSBlbGVtZW50aSBkZWwgbWVudVxuICAgKi9cbiAgQElucHV0KClcbiAgY29sbGFwc2libGU6IGJvb2xlYW4gPSBnZXRDb25maWdWYWx1ZSh0aGlzLmxpYkNvbmZpZz8ubWVudUNvbXBvbmVudD8uY29sbGFwc2libGUsIGZhbHNlKTtcblxuICAvKipcbiAgICogSW5kaWNhIGxvIHN0YXRvIGluaXppYWxlIGRlbCBtZW51LCBzZSBjb2xhc3NhdG8gbyBlc3BhbnNvLlxuICAgKiBRdWVzdGEgaW1wb3N0YXppb25lIHZpZW5lIHNvdnJhc2NyaXR0YSBzZSBzcGVjaWZpY2F0byBkaXZlcnNhbWVudGVcbiAgICogbmVnbGkgZWxlbWVudGkgZGVsIG1lbnVcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNvbGxhcHNlZDogYm9vbGVhbiA9IGdldENvbmZpZ1ZhbHVlKHRoaXMubGliQ29uZmlnPy5tZW51Q29tcG9uZW50Py5jb2xsYXBzZWQsIHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFNlIHRydWUgYWJpbGl0YSBsJ2VmZmV0dG8gZmlzYXJtb25pY2FcbiAgICogc3VsbGUgdm9jaSBkaSBtZW51IGVzcGFuZGliaWxpLlxuICAgKi9cbiAgQElucHV0KClcbiAgY29sbGFwc2VPdGhlcjogYm9vbGVhbiA9IGdldENvbmZpZ1ZhbHVlKHRoaXMubGliQ29uZmlnPy5tZW51Q29tcG9uZW50Py5jb2xsYXBzZU90aGVyLCBmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFNlIHRydWUgZXNwYW5kZSBhdXRvbWF0aWNhbWVudGUgaWwgcGVyY29yc29cbiAgICogdmVyc28gdW4gZWxlbWVudG9cbiAgICogcXVhbmRvIHF1ZXN0byBzaSByaWZlcmlzY2UgYWxsJ3VybCBjb3JyZW50ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZXhwYW5kQXV0b21hdGljYWxseTogYm9vbGVhbiA9IGdldENvbmZpZ1ZhbHVlKHRoaXMubGliQ29uZmlnPy5tZW51Q29tcG9uZW50Py5leHBhbmRBdXRvbWF0aWNhbGx5LCB0cnVlKTtcblxuICAvKipcbiAgICogRW1ldHRlIGwnb2dnZXR0byBNZW51SXRlbSBhc3NvY2lhdG8gYWxsYSB2b2NlIGRpIG1lbnUgc3VsbGEgcXVhbGUgc2kgZScgY2xpY2NhdG8uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgaXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4oKTtcblxuICAvKipcbiAgICogRW1ldHRlIGxhIHZvY2UgZGkgbWVudSBjaGUgY29ycmlzcG9uZGVcbiAgICogY29uIGwndXJsIGNvcnJlbnRlXG4gICAqIGRvcG8gdW4gZXZlbnRvIGRpIHJvdXRpbmdcbiAgICovXG4gIEBPdXRwdXQoKVxuICBjdXJyZW50SXRlbTogRXZlbnRFbWl0dGVyPE1lbnVJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudUl0ZW0+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbWVudScpXG4gIG1lbnU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIC8vIEBWaWV3Q2hpbGRyZW4oTWVudUNvbXBvbmVudClcbiAgLy8gc290dG9NZW51OiBRdWVyeUxpc3Q8TWVudUNvbXBvbmVudD47XG5cbiAgaW5pemlhbGl6emF6aW9uZUNvbXBsZXRhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbW9zdHJhSXRlbTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvLyBTZXJ2b25vIHBlciBsJ2FuaW1hemlvbmUgZGkgYXBlcnR1cmEvY2hpdXN1cmEgZmx1aWRhXG4gIG1lbnVIZWlnaHQkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih1bmRlZmluZWQpO1xuICBlbWl0TWVudUhlaWdodCA9ICgpID0+IHtcblxuICAgIGlmICh0aGlzLmlzQ29sbGFwc2libGUoKSkge1xuXG4gICAgICBsZXQgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5tZW51Py5uYXRpdmVFbGVtZW50Py5zY3JvbGxIZWlnaHQ7XG4gICAgICBsZXQgbmV4dEhlaWdodCA9IHRoaXMuaXNDb2xsYXBzZWQoKSA/IDAgOiBzY3JvbGxIZWlnaHQ7XG5cbiAgICAgIGlmIChuZXh0SGVpZ2h0ID4gMCkge1xuXG4gICAgICAgIHRoaXMubWVudUhlaWdodCQubmV4dChuZXh0SGVpZ2h0KTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvLyBJbXBvc3RvIGwnaGVpZ2h0IGVmZmV0dGl2b1xuICAgICAgICAvLyBwZXIgcG9pIGltcG9zdGFybG8gc3ViaXRvIGRvcG8gYSAwXG4gICAgICAgIC8vIGluIG1vZG8gZGEgZmFyIGZ1bnppb25hcmUgbCdhbmltYXppb25lLlxuICAgICAgICAvLyBTZSBub24gdmllbmUgaW1wb3N0YXRvIHVuIHZhbG9yZSBpbml6aWFsZVxuICAgICAgICAvLyBsJ2FuaW1hemlvbmUgQ1NTIG5vbiBmdW56aW9uYS5cbiAgICAgICAgdGhpcy5tZW51SGVpZ2h0JC5uZXh0KHNjcm9sbEhlaWdodCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tZW51SGVpZ2h0JC5uZXh0KDApLCAxNSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFJpbXVvdm8gaGVpZ2h0LlxuICAgICAgLy8gQWxsYSBmaW5lIGRlbGwnYW5pbWF6aW9uZSBsYSBwcm9wcmlldGEgbm9uIHNlcnZlIGNoZSByaW1hbmdhIGltcG9zdGF0YS5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tZW51SGVpZ2h0JC5uZXh0KHVuZGVmaW5lZCksIENPTExBUFNJTkdfRFVSQVRJT04pO1xuICAgIH1cbiAgfTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgQEluamVjdChOR19JTkFJTF9DT01NT05fQ09ORklHKVxuICAgICAgICAgICAgICBwcml2YXRlIGxpYkNvbmZpZzogTmdJbmFpbENvbW1vbkNvbmZpZykge1xuICAgIHN1cGVyKGNkciwgbGliQ29uZmlnKTtcbiAgICBzdXBlci5vdmVycmlkZUNvbmZpZyhsaWJDb25maWc/Lm1lbnVDb21wb25lbnQpO1xuICAgIHRoaXMubG9nUHJlZml4ID0gJ1tpbmFpbC1tZW51XSc7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICAgIC8vIEl0ZW1zXG4gICAgaWYgKGNoYW5nZXM/Lml0ZW1zPy5jdXJyZW50VmFsdWUpIHtcblxuICAgICAgaWYgKCF0aGlzLmlubmVyTWVudSkge1xuXG4gICAgICAgIHRoaXMuaXRlbXMgPSBjbG9uZUl0ZW1zKGNoYW5nZXM/Lml0ZW1zPy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSBjbG9uZUl0ZW1zKGNoYW5nZXM/Lml0ZW1zPy5jdXJyZW50VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmluaXppYWxpenphSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICB0aGlzLmVtaXRDdXJyZW50SXRlbSgpO1xuICAgIH1cblxuICAgIC8vIEVtaXQgQ3VycmVudFxuICAgIGlmIChjaGFuZ2VzPy5lbWl0Q3VycmVudD8uY3VycmVudFZhbHVlKSB7XG5cbiAgICAgIHRoaXMucHVzaChjaGFuZ2VzLmVtaXRDdXJyZW50LmN1cnJlbnRWYWx1ZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5lbWl0Q3VycmVudEl0ZW0oKSkpO1xuICAgIH1cblxuICAgIC8vIENvbGxhcHNlZFxuICAgIGlmIChjaGFuZ2VzPy5jb2xsYXBzZWQgJiYgIWNoYW5nZXM/LmNvbGxhcHNlZC5pc0ZpcnN0Q2hhbmdlKCkpIHtcblxuICAgICAgdGhpcy5lbWl0TWVudUhlaWdodCgpO1xuICAgIH1cblxuICAgIC8vIENvbGxhc3NhIEVsZW1lbnRvIG8gTGl2ZWxsb1xuICAgIGlmIChjaGFuZ2VzLmNvbGxhcHNlICYmIGNoYW5nZXMuY29sbGFwc2UuY3VycmVudFZhbHVlKSB7XG5cbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgY2hhbmdlcy5jb2xsYXBzZS5jdXJyZW50VmFsdWUuc3Vic2NyaWJlKChpZDogc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICBpZCA9PSB1bmRlZmluZWQgPyB0aGlzLmNvbGxhc3NhTWVudSgpIDogdGhpcy5jb2xsYXNzYUl0ZW0odGhpcy5maW5kSXRlbShpZCwgdGhpcy5pdGVtcykpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFc3BhbmRpIEVsZW1lbnRvIG8gTGl2ZWxsb1xuICAgIGlmIChjaGFuZ2VzPy5zaG93Py5jdXJyZW50VmFsdWUpIHtcblxuICAgICAgdGhpcy5wdXNoKFxuICAgICAgICBjaGFuZ2VzLnNob3cuY3VycmVudFZhbHVlLnN1YnNjcmliZSgoaWQ6IHN0cmluZykgPT4ge1xuXG4gICAgICAgICAgaWQgPT0gdW5kZWZpbmVkID8gdGhpcy5lc3BhbmRpTWVudSgpIDogdGhpcy5lc3BhbmRpUGVyY29yc28oaWQpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBUb2dnbGEgRWxlbWVudG9cbiAgICBpZiAoY2hhbmdlcz8udG9nZ2xlPy5jdXJyZW50VmFsdWUpIHtcblxuICAgICAgdGhpcy5wdXNoKGNoYW5nZXMudG9nZ2xlLmN1cnJlbnRWYWx1ZS5zdWJzY3JpYmUoKGlkOiBzdHJpbmcpID0+IHRoaXMudG9nZ2xlSXRlbSh0aGlzLmZpbmRJdGVtKGlkLCB0aGlzLml0ZW1zKSkpKTtcbiAgICB9XG5cbiAgICAvLyAvLyB0b2RvXG4gICAgLy8gLy8gRXNwYW5kZSB0dXR0aSBpIGxpdmVsbGlcbiAgICAvLyBpZiAoY2hhbmdlcy5zaG93QWxsICYmIGNoYW5nZXMuc2hvd0FsbC5jdXJyZW50VmFsdWUpIHtcbiAgICAvL1xuICAgIC8vICAgdGhpcy5wdXNoKGNoYW5nZXMuc2hvd0FsbC5jdXJyZW50VmFsdWUuc3Vic2NyaWJlKCgpID0+IHRoaXMuZXNwYW5kaVR1dHRpKCkpKTtcbiAgICAvLyB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBJbXBvc3RhemlvbmkgZGkgZGVmYXVsdFxuXG4gICAgaWYgKHRoaXMuY29sbGFwc2libGUgPT09IGZhbHNlKSB7XG5cbiAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29sbGFwc2VkID09IHVuZGVmaW5lZCkge1xuXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9ICh0aGlzLmNvbGxhcHNpYmxlID09PSB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLmluaXppYWxpenphSXRlbXModGhpcy5pdGVtcyk7XG4gICAgdGhpcy5pbml6aWFsaXp6YXppb25lQ29tcGxldGF0YSA9IHRydWU7XG4gICAgdGhpcy5lbWl0Q3VycmVudEl0ZW0oKTtcblxuICAgIC8vIFJpY2VyY2EgZWQgZW1pc3Npb25lIGRlbGxhIHZvY2UgZGkgbWVudVxuICAgIC8vIGNvcnJpc3BvbmRlbnRlIGFsbCd1cmwgY29ycmVudGVcbiAgICAvLyBhbCBOYXZpZ2F0aW9uRW5kXG4gICAgdGhpcy5wdXNoKFxuICAgICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmltcG9zdGFVcmxFZmZldHRpdmkodGhpcy5pdGVtcyk7XG4gICAgICAgICAgdGhpcy5lbWl0Q3VycmVudEl0ZW0oKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKHRoaXMucmVpbml0KSB7XG5cbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgdGhpcy5yZWluaXQuc3Vic2NyaWJlKChpdGVtczogTWVudUl0ZW1bXSkgPT4ge1xuXG4gICAgICAgICAgdGhpcy5lbWl0RGVidWcoYFJlaW5pdCFgKTtcblxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBjbG9uZUl0ZW1zKGl0ZW1zIHx8IHRoaXMub3JpZ2luYWxJdGVtcyk7XG5cbiAgICAgICAgICBpZiAoaXRlbXMpIHtcblxuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gY2xvbmVJdGVtcyhpdGVtcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pbml6aWFsaXp6YUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRvcmkgY29udHJvbGxvIHN0YXRvIG1lbnUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpc0NvbGxhcHNpYmxlID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5pbm5lck1lbnUgJiYgdGhpcy5jb2xsYXBzaWJsZTtcbiAgaXNDb2xsYXBzZWQgPSAoKTogYm9vbGVhbiA9PiB0aGlzLmlzQ29sbGFwc2libGUoKSAmJiB0aGlzLmNvbGxhcHNlZDtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRvcmkgY29udHJvbGxvIHN0YXRvIGl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBpc0l0ZW1Db2xsYXBzaWJsZSA9IChpdGVtOiBNZW51SXRlbSkgPT4gaXRlbS5jb2xsYXBzaWJsZSAmJiB0aGlzLmhhc1N1Ykl0ZW1zKGl0ZW0pO1xuICBpc0l0ZW1Db2xsYXBzZWQgPSAoaXRlbTogTWVudUl0ZW0pID0+IGl0ZW0/LmNvbGxhcHNpYmxlICYmIGl0ZW0/LmNvbGxhcHNlZDtcbiAgaGFzU3ViSXRlbXMgPSAoaXRlbTogTWVudUl0ZW0pOiBib29sZWFuID0+IGl0ZW0/LnN1Ykl0ZW1zPy5sZW5ndGggPiAwO1xuICBpc0FjdGl2ZSA9IChpdGVtOiBNZW51SXRlbSkgPT4gdGhpcy5hY3RpdmVJdGVtID8gKGl0ZW0uaWQgPT0gdGhpcy5hY3RpdmVJdGVtKSA6IHRoaXMuaXNDdXJyZW50UGFnZUl0ZW0oaXRlbSk7XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIGNoZSBsJ2VsZW1lbnRvIGluIGlucHV0XG4gICAqIHNpYSBhc3NvY2lhdG8gYWxsJ3VybCBjb3JyZW50ZVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgaXNDdXJyZW50UGFnZUl0ZW0gPSAoaXRlbTogTWVudUl0ZW0pOiBib29sZWFuID0+XG4gICAgdGhpcy5pc0N1cnJlbnRVcmwodGhpcy5nZXRJdGVtTGluayhpdGVtKSlcbiAgICB8fCB0aGlzLmlzQ3VycmVudFVybCh0aGlzLmdldEl0ZW1MaW5rUmVnZXgoaXRlbSkpXG4gICAgfHwgKGl0ZW0uYWN0aXZlTGlua3MgIT0gdW5kZWZpbmVkXG4gICAgICAmJiBpdGVtLmFjdGl2ZUxpbmtzLnNvbWUodGhpcy5pc0N1cnJlbnRVcmwpKTtcblxuICAvKipcbiAgICogUmVzdGl0dWlzY2UgdHJ1ZSBzZSBsJ2VsZW1lbnRvXG4gICAqIGRldmUgZXNzZXJlIHZpc3VhbGl6emF0b1xuICAgKlxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgc2hvd0l0ZW0gPSAoaXRlbTogTWVudUl0ZW0pOiBib29sZWFuID0+IHtcblxuICAgIHJldHVybiAoaXRlbS5zaG93ID09IHVuZGVmaW5lZCAmJiBpdGVtLnNob3ckID09IHVuZGVmaW5lZClcbiAgICAgIHx8IGl0ZW0uc2hvdyA9PT0gdHJ1ZVxuICAgICAgfHwgKGlzRnVuY3Rpb24oaXRlbS5zaG93KSAmJiAoaXRlbS5zaG93IGFzIENoZWNrRm4pKCkgPT09IHRydWUpXG4gICAgICB8fCB0aGlzLmlzQXV0b1Nob3dJdGVtKGl0ZW0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXN0aXR1aXNjZSB0cnVlIHNlIGwnZWxlbWVudG9cbiAgICogZGV2ZSBlc3NlcmUgdmlzdWFsaXp6YXRvIGluIGF1dG9tYXRpY29cbiAgICogcXVhbmRvIGNvcnJpc3BvbmRlIGFsbCd1cmwgY29ycmVudGVcbiAgICogbyBzZSB1bm8gZGVpIHN1b2kgbm9kaSBmaWdsaVxuICAgKiBlJyB1biBlbGVtZW50byBjaGUgZGV2ZSBlc3NlcmUgdmlzdWFsaXp6YXRvIGluIGF1dG9tYXRpY28uXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqL1xuICBpc0F1dG9TaG93SXRlbSA9IChpdGVtOiBNZW51SXRlbSk6IGJvb2xlYW4gPT5cblxuICAgIGl0ZW0uc2hvdyA9PT0gQVVUT19TSE9XXG4gICAgJiYgKHRoaXMuaXNDdXJyZW50UGFnZUl0ZW0oaXRlbSlcbiAgICAgIHx8IChpdGVtLnN1Ykl0ZW1zICYmIGl0ZW0uc3ViSXRlbXMuc29tZSh0aGlzLmlzQXV0b1Nob3dJdGVtKSkpO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdG9yaSByZWN1cGVybyBpbmZvIGl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBnZXRQcm9wZXJ0eVZhbHVlID0gKHByb3BlcnR5OiBzdHJpbmcgfCBHZXRTdHJpbmdGbikgPT4gaXNGdW5jdGlvbihwcm9wZXJ0eSkgPyAocHJvcGVydHkgYXMgR2V0U3RyaW5nRm4pKCkgOiBwcm9wZXJ0eTtcblxuICAvLyBnZXRJdGVtTGluayA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiBpc0Z1bmN0aW9uKGl0ZW0ubGluaykgPyAoaXRlbS5saW5rIGFzIEdldFN0cmluZ0ZuKSgpIDogaXRlbS5saW5rO1xuICAvLyBnZXRJdGVtTGlua1JlZ2V4ID0gKGl0ZW06IE1lbnVJdGVtKTogc3RyaW5nID0+IGlzRnVuY3Rpb24oaXRlbS5saW5rUmVnZXgpID8gKGl0ZW0ubGlua1JlZ2V4IGFzIEdldFN0cmluZ0ZuKSgpIDogaXRlbS5saW5rUmVnZXg7XG4gIC8vIGdldEl0ZW1MYWJlbCA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiBpc0Z1bmN0aW9uKGl0ZW0ubGFiZWwpID8gKGl0ZW0ubGFiZWwgYXMgR2V0U3RyaW5nRm4pKCkgOiBpdGVtLmxhYmVsO1xuICAvLyBnZXRJdGVtVGl0bGUgPSAoaXRlbTogTWVudUl0ZW0pOiBzdHJpbmcgPT4gaXNGdW5jdGlvbihpdGVtLnRpdGxlKSA/IChpdGVtLnRpdGxlIGFzIEdldFN0cmluZ0ZuKSgpIDogaXRlbS50aXRsZTtcbiAgLy8gZ2V0SXRlbUFyaWFMYWJlbCA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiBpc0Z1bmN0aW9uKGl0ZW0uYXJpYUxhYmVsKSA/IChpdGVtLmFyaWFMYWJlbCBhcyBHZXRTdHJpbmdGbikoKSA6IGl0ZW0uYXJpYUxhYmVsO1xuXG4gIGdldEl0ZW1MaW5rID0gKGl0ZW06IE1lbnVJdGVtKTogc3RyaW5nID0+IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShpdGVtLmxpbmspO1xuICBnZXRJdGVtTGlua1JlZ2V4ID0gKGl0ZW06IE1lbnVJdGVtKTogc3RyaW5nID0+IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShpdGVtLmxpbmtSZWdleCk7XG4gIGdldEl0ZW1MYWJlbCA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiB0aGlzLmdldFByb3BlcnR5VmFsdWUoaXRlbS5sYWJlbCk7XG4gIGdldEl0ZW1UaXRsZSA9IChpdGVtOiBNZW51SXRlbSk6IHN0cmluZyA9PiB0aGlzLmdldFByb3BlcnR5VmFsdWUoaXRlbS50aXRsZSk7XG4gIGdldEl0ZW1BcmlhTGFiZWwgPSAoaXRlbTogTWVudUl0ZW0pOiBzdHJpbmcgPT4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGl0ZW0uYXJpYUxhYmVsKTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRvcmkgZGkgdXRpbGl0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBjaGUgbCd1cmwgZGF0byBpbiBpbnB1dFxuICAgKiBzaWEgcXVlbGxvIGNvcnJlbnRlXG4gICAqXG4gICAqIEBwYXJhbSB1cmxcbiAgICovXG4gIGlzQ3VycmVudFVybCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT5cblxuICAgIHVybCAhPSB1bmRlZmluZWRcbiAgICAmJiB0aGlzLnJvdXRlci51cmxcbiAgICAgIC5zcGxpdCgnPycpWzBdXG4gICAgICAubWF0Y2gobmV3IFJlZ0V4cCgnXicuY29uY2F0KHVybCkuY29uY2F0KCckJyksICdpJykpICE9IG51bGw7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWV0b2RpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEluaXppYWxpenphIGdsaSBlbGVtZW50aSBkZWwgbWVudVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbml6aWFsaXp6YUl0ZW1zKGl0ZW1zOiBNZW51SXRlbVtdKSB7XG5cbiAgICBpZiAoaXRlbXM/Lmxlbmd0aCkge1xuXG4gICAgICAvLyBJbXBvc3RhemlvbmkgZGkgZGVmYXVsdCBwZXIgZ2xpIGVsZW1lbnRpXG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBNZW51SXRlbSkgPT4ge1xuXG4gICAgICAgIGlmIChpdGVtLmlkID09IHVuZGVmaW5lZCkge1xuXG4gICAgICAgICAgaXRlbS5pZCA9IHV1aWR2NCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uc2hvdyA9PSB1bmRlZmluZWQgJiYgaXRlbS5zaG93JCA9PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgIGl0ZW0uc2hvdyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5jb2xsYXBzaWJsZSA9PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgIGl0ZW0uY29sbGFwc2libGUgPSB0aGlzLmNvbGxhcHNpYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0uY29sbGFwc2libGUgPT0gZmFsc2UpIHtcblxuICAgICAgICAgIGl0ZW0uY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5jb2xsYXBzZWQgPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgICAvLyBpdGVtLmNvbGxhcHNlZCA9ICh0aGlzLmNvbGxhcHNlZCA9PSB1bmRlZmluZWQpID8gKGl0ZW0uY29sbGFwc2libGUgPT0gdHJ1ZSkgOiB0aGlzLmNvbGxhcHNpYmxlO1xuICAgICAgICAgIGl0ZW0uY29sbGFwc2VkID0gKHRoaXMuY29sbGFwc2VkID09IHVuZGVmaW5lZCkgPyAoaXRlbS5jb2xsYXBzaWJsZSA9PSB0cnVlKSA6IHRoaXMuY29sbGFwc2VkO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXRQYXJlbnQoaXRlbXMsIHRoaXMucGFyZW50KTtcbiAgICAgIHRoaXMuaW1wb3N0YVVybEVmZmV0dGl2aShpdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvdnJhc2NyaXZlIGxhIHByb3ByaWV0YSBsaW5rIGRlZ2xpIGVsZW1lbnRpIGRlbCBtZW51XG4gICAqIHNlIGxhIHByb3ByaWV0YSBsaW5rUmVnZXggbWF0Y2hhIGNvbiBsJ3VybCBjb3JyZW50ZS5cbiAgICovXG4gIHByaXZhdGUgaW1wb3N0YVVybEVmZmV0dGl2aShpdGVtczogTWVudUl0ZW1bXSkge1xuXG4gICAgaWYgKGl0ZW1zPy5sZW5ndGgpIHtcblxuICAgICAgaXRlbXMuZm9yRWFjaCh0aGlzLmltcG9zdGFVcmxFZmZldHRpdm8pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3ZyYXNjcml2ZSBsYSBwcm9wcmlldGEgbGluayBkZWxsJ2VsZW1lbnRvIGRlbCBtZW51XG4gICAqIHNlIGxhIHByb3ByaWV0YSBsaW5rUmVnZXggbWF0Y2hhIGNvbiBsJ3VybCBjb3JyZW50ZS5cbiAgICovXG4gIHByaXZhdGUgaW1wb3N0YVVybEVmZmV0dGl2byA9IChpdGVtOiBNZW51SXRlbSkgPT4ge1xuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVMaW5rT3ZlcndyaXRpbmcgJiYgaXRlbSAmJiB0aGlzLmlzQ3VycmVudFVybCh0aGlzLmdldEl0ZW1MaW5rUmVnZXgoaXRlbSkpKSB7XG5cbiAgICAgIGl0ZW0ubGluayA9IHRoaXMucm91dGVyLnVybDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEVtZXR0ZSBsJ2VsZW1lbnRvXG4gICAqIGFzc29jaWF0byBhbGwndXJsIGNvcnJlbnRlXG4gICAqL1xuICBwcml2YXRlIGVtaXRDdXJyZW50SXRlbSgpIHtcblxuICAgIGxldCBpdGVtOiBNZW51SXRlbSA9IHRoaXMuZmluZEN1cnJlbnRJdGVtKHRoaXMuaXRlbXMpO1xuXG4gICAgaWYgKGl0ZW0gIT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIHRoaXMuaW1wb3N0YVVybEVmZmV0dGl2byhpdGVtKTtcblxuICAgICAgdGhpcy5lbWl0RGVidWcoJ0VtaXNzaW9uZSBpdGVtIG1lbnUgdXJsIGNvcnJlbnRlOicpO1xuICAgICAgdGhpcy5lbWl0RGVidWcoaXRlbSk7XG5cbiAgICAgIHRoaXMuY3VycmVudEl0ZW0uZW1pdChpdGVtKTtcblxuICAgICAgLy8gdG9kbyA/Pz9cbiAgICAgIC8vIGlmICh0aGlzLmNvbGxhcHNlT3RoZXIpIHtcbiAgICAgIC8vXG4gICAgICAvLyAgIHRoaXMuY29sbGFwc2VPdGhlcihpdGVtKTtcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmljZXJjYSBsJ2VsZW1lbnRvIGRpIG1lbnUgaW5lcmVudGVcbiAgICogbCd1cmwgY29ycmVudGVcbiAgICpcbiAgICogQHBhcmFtIGl0ZW1zXG4gICAqL1xuICBwcml2YXRlIGZpbmRDdXJyZW50SXRlbShpdGVtczogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcblxuICAgIGxldCByZXN1bHRJdGVtOiBNZW51SXRlbSA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChpdGVtcz8ubGVuZ3RoKSB7XG5cbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW06IE1lbnVJdGVtKSA9PiB7XG5cbiAgICAgICAgaWYgKHJlc3VsdEl0ZW0gPT0gdW5kZWZpbmVkICYmIGl0ZW0gIT0gdW5kZWZpbmVkICYmIHRoaXMuaXNDdXJyZW50UGFnZUl0ZW0oaXRlbSkpIHtcblxuICAgICAgICAgIHJlc3VsdEl0ZW0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0SXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGl0ZW1zXG4gICAqL1xuICBwcml2YXRlIGZpbmRJdGVtKGlkOiBzdHJpbmcsIGl0ZW1zOiBNZW51SXRlbVtdKSB7XG5cbiAgICBsZXQgcmVzdWx0SXRlbTogTWVudUl0ZW0gPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXRlbXM/Lmxlbmd0aCkge1xuXG4gICAgICBpdGVtcy5mb3JFYWNoKChpdGVtOiBNZW51SXRlbSkgPT4ge1xuXG4gICAgICAgIGlmIChyZXN1bHRJdGVtID09IHVuZGVmaW5lZCAmJiBpdGVtICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAgICAgcmVzdWx0SXRlbSA9IGl0ZW0uaWQgPT0gaWQgPyBpdGVtIDogdGhpcy5maW5kSXRlbShpZCwgaXRlbS5zdWJJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJdGVtO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBpZFxuICAgKi9cbiAgcHJpdmF0ZSBlc3BhbmRpUGVyY29yc28oaWQ6IHN0cmluZykge1xuXG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcblxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdGVtOiBNZW51SXRlbSkgPT4ge1xuXG4gICAgICAgIGxldCBpbm5lckl0ZW06IE1lbnVJdGVtID0gdGhpcy5maW5kSXRlbShpZCwgaXRlbS5zdWJJdGVtcyk7XG5cbiAgICAgICAgaWYgKChpdGVtPy5pZCA9PSBpZCkgfHwgaW5uZXJJdGVtICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAgICAgdGhpcy5lc3BhbmRpSXRlbShpdGVtKTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlT3RoZXIpIHtcblxuICAgICAgICAgICAgdGhpcy5kb0NvbGxhcHNlT3RoZXIoaXRlbSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlubmVySXRlbSkge1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubW9zdHJhSXRlbS5lbWl0KGlkKSwgQ09MTEFQU0lOR19EVVJBVElPTik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVzcGFuZGlNZW51ID0gKCkgPT4gdGhpcy5zZXRDb2xsYXBzZWRNZW51KCdzaG93Jyk7XG4gIHByaXZhdGUgY29sbGFzc2FNZW51ID0gKCkgPT4gdGhpcy5zZXRDb2xsYXBzZWRNZW51KCdoaWRlJyk7XG5cbiAgcHJpdmF0ZSBzZXRDb2xsYXBzZWRNZW51KG1vZGU6IENvbGxhcHNlTW9kZSkge1xuXG4gICAgaWYgKHRoaXMuaXRlbXMpIHtcblxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5zZXRDb2xsYXBzZWQoaXRlbSwgbW9kZSkpO1xuICAgIH1cbiAgfVxuXG4gIGVzcGFuZGlJdGVtID0gKGl0ZW06IE1lbnVJdGVtKSA9PiB0aGlzLnNldENvbGxhcHNlZChpdGVtLCAnc2hvdycpO1xuICBjb2xsYXNzYUl0ZW0gPSAoaXRlbTogTWVudUl0ZW0pID0+IHRoaXMuc2V0Q29sbGFwc2VkKGl0ZW0sICdoaWRlJyk7XG4gIHRvZ2dsZUl0ZW0gPSAoaXRlbTogTWVudUl0ZW0pID0+IHRoaXMuc2V0Q29sbGFwc2VkKGl0ZW0sICd0b2dnbGUnKTtcblxuICBzZXRDb2xsYXBzZWQoaXRlbTogTWVudUl0ZW0sIG1vZGU6IENvbGxhcHNlTW9kZSkge1xuXG4gICAgaWYgKGl0ZW0gJiYgaXRlbS5jb2xsYXBzaWJsZSkge1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcblxuICAgICAgICBjYXNlICdoaWRlJzpcbiAgICAgICAgICBpdGVtLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgICAgaXRlbS5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICBjYXNlICd0b2dnbGUnOlxuICAgICAgICAgIGl0ZW0uY29sbGFwc2VkID0gIWl0ZW0uY29sbGFwc2VkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UGFyZW50KGl0ZW1zOiBNZW51SXRlbVtdLCBwYXJlbnQ6IE1lbnVJdGVtKSB7XG5cbiAgICBpZiAoaXRlbXM/Lmxlbmd0aCAmJiBwYXJlbnQpIHtcblxuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTWVudUl0ZW0pID0+IHtcblxuICAgICAgICBpZiAoaXRlbSAhPSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgIGl0ZW0ucGFyZW50ID0gdGhpcy50b0xpZ2h0SXRlbShwYXJlbnQpO1xuICAgICAgICAgIHRoaXMuc2V0UGFyZW50KGl0ZW0uc3ViSXRlbXMsIGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvTGlnaHRJdGVtKGU6IE1lbnVJdGVtKTogTWVudUl0ZW0ge1xuXG4gICAgcmV0dXJuIGUgIT0gdW5kZWZpbmVkXG4gICAgICA/IHtcbiAgICAgICAgaWQ6IGUuaWQsXG4gICAgICAgIGxhYmVsOiBlLmxhYmVsLFxuICAgICAgICBsaW5rOiBlLmxpbmssXG4gICAgICAgIHBhcmVudDogdGhpcy50b0xpZ2h0SXRlbShlLnBhcmVudClcbiAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaXRlbU9uQ2xpY2soaXRlbTogTWVudUl0ZW0pIHtcblxuICAgIGlmIChpdGVtKSB7XG5cbiAgICAgIGlmIChpdGVtLmNhbGxiYWNrICYmIGlzRnVuY3Rpb24oaXRlbS5jYWxsYmFjaykpIHtcblxuICAgICAgICBpdGVtLmNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtLmNvbGxhcHNpYmxlKSB7XG5cbiAgICAgICAgaXRlbS5jb2xsYXBzZWQgPSAhaXRlbS5jb2xsYXBzZWQ7XG5cbiAgICAgICAgaWYgKGl0ZW0uY29sbGFwc2VkID09PSBmYWxzZSAmJiB0aGlzLmNvbGxhcHNlT3RoZXIgPT09IHRydWUpIHtcblxuICAgICAgICAgIHRoaXMuZG9Db2xsYXBzZU90aGVyKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtQ2xpY2suZW1pdChpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZldHRvIGZpc2FybW9uaWNhXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGRvQ29sbGFwc2VPdGhlcihpdGVtOiBNZW51SXRlbSkge1xuXG4gICAgaWYgKGl0ZW0pIHtcblxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKChpdG06IE1lbnVJdGVtKSA9PiB7XG5cbiAgICAgICAgaWYgKGl0bSAmJiBpdG0uaWQgIT0gaXRlbS5pZCkge1xuXG4gICAgICAgICAgaXRtLmNvbGxhcHNlZCA9IHRydWU7XG5cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjdXJyZW50SXRlbVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKi9cbiAgY3VycmVudEl0ZW1IYW5kbGVyKGN1cnJlbnRJdGVtOiBNZW51SXRlbSwgaXRlbTogTWVudUl0ZW0pIHtcblxuICAgIGlmIChjdXJyZW50SXRlbSkge1xuXG4gICAgICB0aGlzLmN1cnJlbnRJdGVtLmVtaXQoY3VycmVudEl0ZW0pO1xuXG4gICAgICBpZiAodGhpcy5leHBhbmRBdXRvbWF0aWNhbGx5ID09PSB0cnVlICYmICF0aGlzLmlubmVyTWVudSkge1xuXG4gICAgICAgIHRoaXMuZXNwYW5kaVBlcmNvcnNvKGN1cnJlbnRJdGVtLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb2xsYXBzZWRPbkNoYW5nZSgpIHtcblxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5lbWl0TWF4SGVpZ2h0KClcbiAgICAvLyAgIHRoaXMuY29sbGFwc2VkQ2hhbmdlLmVtaXQodGhpcy5jb2xsYXBzZWQpXG4gICAgLy8gfSwgNTApXG4gIH1cblxuICBpdGVtT25BcnJvd0Rvd24oKSB7XG5cbiAgICBsZXQgZm9jdXNhYmxlSXRlbXMgPSB0aGlzLmZvY3VzYWJsZUl0ZW1zO1xuICAgIGZvY3VzYWJsZUl0ZW1zLmZpbHRlcigoaW5kZXgpID0+IGluZGV4ID4gZm9jdXNhYmxlSXRlbXMuaW5kZXgoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpLmZpcnN0KCk/LmZvY3VzKCk7XG4gIH1cblxuICBpdGVtT25BcnJvd1VwKCkge1xuICAgIGxldCBmb2N1c2FibGVJdGVtcyA9IHRoaXMuZm9jdXNhYmxlSXRlbXM7XG4gICAgZm9jdXNhYmxlSXRlbXMuZmlsdGVyKChpbmRleCkgPT4gaW5kZXggPCBmb2N1c2FibGVJdGVtcy5pbmRleChkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkubGFzdCgpPy5mb2N1cygpO1xuICB9XG5cbiAgZ2V0IGZvY3VzYWJsZUl0ZW1zKCkge1xuXG4gICAgcmV0dXJuIHdpbmRvd1snJCddKCdib2R5JykuZmluZChGT0NVU0FCTEVfSVRFTVNfU0VMRUNUT1IpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiaW5pemlhbGl6emF6aW9uZUNvbXBsZXRhdGFcIj5cblxuICA8dWwgI21lbnVcbiAgICAgIGlkPVwie3tpZH19XCJcbiAgICAgIFthdHRyLnJvbGVdPVwiJ21lbnUnXCJcbiAgICAgIGNsYXNzPVwiaW5haWwtbWVudSB7e2NsYXNzfX1cIlxuICAgICAgW25nU3R5bGVdPVwieydoZWlnaHQucHgnOiAobWVudUhlaWdodCQgfCBhc3luYyl9XCJcbiAgICAgIFtuZ0NsYXNzXT1cInsnbGl2ZWxsb18yJzogaW5uZXJNZW51LCAnY29sbGFwc2VkJzogaXNDb2xsYXBzZWQoKX1cIj5cblxuICAgIDxkZWJ1Zy1wcmUgKm5nSWY9XCJzaG93U3RhdGVcIj5baW5haWwtbWVudS1pbnRyYW5ldF08YnI+XG4gICAgICA8c3RhdGUtcHJvcGVydGllIFtsYWJlbF09XCInaWQnXCIgW3Byb3BlcnRpZV09XCJpZFwiPjwvc3RhdGUtcHJvcGVydGllPlxuICAgICAgPHN0YXRlLXByb3BlcnRpZSBbbGFiZWxdPVwiJ2lubmVyTWVudSdcIiBbcHJvcGVydGllXT1cImlubmVyTWVudVwiPjwvc3RhdGUtcHJvcGVydGllPlxuICAgICAgPHN0YXRlLXByb3BlcnRpZSBbbGFiZWxdPVwiJ2NvbGxhcHNpYmxlJ1wiIFtwcm9wZXJ0aWVdPVwiY29sbGFwc2libGVcIj48L3N0YXRlLXByb3BlcnRpZT5cbiAgICAgIDxzdGF0ZS1wcm9wZXJ0aWUgW2xhYmVsXT1cIidjb2xsYXBzZWQnXCIgW3Byb3BlcnRpZV09XCJjb2xsYXBzZWRcIj48L3N0YXRlLXByb3BlcnRpZT5cbiAgICAgIDxzdGF0ZS1wcm9wZXJ0aWUgW2xhYmVsXT1cIidjb2xsYXBzZU90aGVyJ1wiIFtwcm9wZXJ0aWVdPVwiY29sbGFwc2VPdGhlclwiPjwvc3RhdGUtcHJvcGVydGllPlxuICAgICAgPCEtLSAgICAgIHt7ZWxlbWVudHMgfCBqc29ufX0tLT5cbiAgICA8L2RlYnVnLXByZT5cblxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cblxuICAgICAgPGxpICpuZ0lmPVwic2hvd0l0ZW0oaXRlbSkgfHwgKGl0ZW0uc2hvdyQgfCBhc3luYylcIlxuICAgICAgICAgIFthdHRyLnJvbGVdPVwiaXRlbS5saW5rID8gJ21lbnVpdGVtJyA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBpc0FjdGl2ZShpdGVtKX1cIlxuICAgICAgICAgIGNsYXNzPVwibGl2ZWxsb18xXCI+XG4gICAgICAgIDxhICpuZ0lmPVwiaXRlbS5saW5rXCJcbiAgICAgICAgICAgW2lkXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICBbYXR0ci50aXRsZV09XCJnZXRJdGVtVGl0bGUoaXRlbSlcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldEl0ZW1BcmlhTGFiZWwoaXRlbSlcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpc0NvbGxhcHNlZCgpID8gJy0xJyA6ICcwJ1wiXG4gICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImdldEl0ZW1MaW5rKGl0ZW0pXCJcbiAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucXVlcnlQYXJhbXNcIlxuICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldEl0ZW1MYWJlbChpdGVtKVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNJdGVtQ29sbGFwc2libGUoaXRlbSkgPyAhaXRlbS5jb2xsYXBzZWQgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAoY2xpY2spPVwiaXRlbU9uQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAoa2V5dXAuYXJyb3dVcCk9XCJpdGVtT25BcnJvd1VwKClcIlxuICAgICAgICAgICAoa2V5dXAuYXJyb3dEb3duKT1cIml0ZW1PbkFycm93RG93bigpXCJcbiAgICAgICAgICAgKGtleXVwLnNwYWNlKT1cIml0ZW1PbkNsaWNrKCRldmVudClcIj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLmxpbmtcIlxuICAgICAgICAgICBbaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgIFthdHRyLnRpdGxlXT1cImdldEl0ZW1UaXRsZShpdGVtKVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0SXRlbUFyaWFMYWJlbChpdGVtKVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlzQ29sbGFwc2VkKCkgPyAnLTEnIDogJzAnXCJcbiAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0SXRlbUxhYmVsKGl0ZW0pXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0l0ZW1Db2xsYXBzaWJsZShpdGVtKSA/ICFpdGVtLmNvbGxhcHNlZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgIChjbGljayk9XCJpdGVtT25DbGljayhpdGVtKVwiXG4gICAgICAgICAgIChrZXl1cC5hcnJvd1VwKT1cIml0ZW1PbkFycm93VXAoKVwiXG4gICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwiaXRlbU9uQXJyb3dEb3duKClcIlxuICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiaXRlbU9uQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAoa2V5dXAuc3BhY2UpPVwiaXRlbU9uQ2xpY2soaXRlbSlcIj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8ZGVidWctcHJlICpuZ0lmPVwic2hvd1N0YXRlXCI+W21lbnUtaXRlbV08YnI+XG4gICAgICAgICAgPHN0YXRlLXByb3BlcnRpZSBbbGFiZWxdPVwiJ2lkJ1wiIFtwcm9wZXJ0aWVdPVwiaXRlbS5pZFwiPjwvc3RhdGUtcHJvcGVydGllPlxuICAgICAgICAgIDxzdGF0ZS1wcm9wZXJ0aWUgW2xhYmVsXT1cIidjb2xsYXBzaWJsZSdcIiBbcHJvcGVydGllXT1cIml0ZW0uY29sbGFwc2libGVcIj48L3N0YXRlLXByb3BlcnRpZT5cbiAgICAgICAgICA8c3RhdGUtcHJvcGVydGllIFtsYWJlbF09XCInY29sbGFwc2VkJ1wiIFtwcm9wZXJ0aWVdPVwiaXRlbS5jb2xsYXBzZWRcIj48L3N0YXRlLXByb3BlcnRpZT5cbiAgICAgICAgICA8IS0tICAgICAgICAgIHt7ZWxlbWVudCB8IGpzb259fS0tPlxuICAgICAgICA8L2RlYnVnLXByZT5cbiAgICAgICAgPGluYWlsLW1lbnUgKm5nSWY9XCJoYXNTdWJJdGVtcyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtLmlkKyctaXRlbXMnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtLnN1Ykl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmVudF09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVyTWVudV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2VtaXRDdXJyZW50XT1cImVtaXRDdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbGxhcHNpYmxlXT1cIml0ZW0uY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29sbGFwc2VkXT1cIml0ZW0uY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbGxhcHNlT3RoZXJdPVwiY29sbGFwc2VPdGhlclwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xsYXBzZV09XCJjb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b2dnbGVdPVwidG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwibW9zdHJhSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93U3RhdGVdPVwic2hvd1N0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1DbGljayk9XCJpdGVtQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnRJdGVtKT1cImN1cnJlbnRJdGVtSGFuZGxlcigkZXZlbnQsIGl0ZW0pXCI+XG4gICAgICAgIDwvaW5haWwtbWVudT5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L25nLWNvbnRhaW5lcj5cblxuXG4iXX0=
|
|
@@ -12,7 +12,7 @@ import { HttpHeaders, HttpClientModule } from '@angular/common/http';
|
|
|
12
12
|
import { __awaiter } from 'tslib';
|
|
13
13
|
import * as i1$2 from '@angular/router';
|
|
14
14
|
import { NavigationEnd, RouterModule } from '@angular/router';
|
|
15
|
-
import { BehaviorSubject,
|
|
15
|
+
import { BehaviorSubject, Observable, ReplaySubject } from 'rxjs';
|
|
16
16
|
|
|
17
17
|
const isBlankOrNull = (s) => s == undefined || String(s).trim().length == 0;
|
|
18
18
|
const isNotBlankOrNull = (s) => !isBlankOrNull(s);
|
|
@@ -1150,12 +1150,15 @@ const FOCUSABLE_ITEMS_SELECTOR = 'ul.inail-menu > li > a:not([tabindex="-1"])';
|
|
|
1150
1150
|
const cloneItem = (item) => {
|
|
1151
1151
|
let itemClone;
|
|
1152
1152
|
if (item) {
|
|
1153
|
+
let show$ = item.show$;
|
|
1154
|
+
item.show$ = undefined;
|
|
1153
1155
|
itemClone = clone$1(item);
|
|
1154
1156
|
itemClone.label = item.label;
|
|
1155
1157
|
itemClone.link = item.link;
|
|
1156
1158
|
itemClone.linkRegex = item.linkRegex;
|
|
1157
1159
|
itemClone.callback = item.callback;
|
|
1158
1160
|
itemClone.show = item.show;
|
|
1161
|
+
itemClone.show$ = show$;
|
|
1159
1162
|
itemClone.parent = cloneItem(item.parent);
|
|
1160
1163
|
itemClone.subItems = cloneItems(item.subItems);
|
|
1161
1164
|
}
|
|
@@ -1278,19 +1281,10 @@ class MenuComponent extends BasicUxElementComponent {
|
|
|
1278
1281
|
* @param item
|
|
1279
1282
|
*/
|
|
1280
1283
|
this.showItem = (item) => {
|
|
1281
|
-
return
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|| (isFunction(item.show) && item.show() === true)
|
|
1286
|
-
|| this.isAutoShowItem(item);
|
|
1287
|
-
};
|
|
1288
|
-
/**
|
|
1289
|
-
*
|
|
1290
|
-
* @param item
|
|
1291
|
-
*/
|
|
1292
|
-
this.getShowObservable = (item) => {
|
|
1293
|
-
return isObservable(item.show) ? item.show : new BehaviorSubject(false);
|
|
1284
|
+
return (item.show == undefined && item.show$ == undefined)
|
|
1285
|
+
|| item.show === true
|
|
1286
|
+
|| (isFunction(item.show) && item.show() === true)
|
|
1287
|
+
|| this.isAutoShowItem(item);
|
|
1294
1288
|
};
|
|
1295
1289
|
/**
|
|
1296
1290
|
* Restituisce true se l'elemento
|
|
@@ -1435,7 +1429,7 @@ class MenuComponent extends BasicUxElementComponent {
|
|
|
1435
1429
|
if (item.id == undefined) {
|
|
1436
1430
|
item.id = uuidv4();
|
|
1437
1431
|
}
|
|
1438
|
-
if (item.show == undefined) {
|
|
1432
|
+
if (item.show == undefined && item.show$ == undefined) {
|
|
1439
1433
|
item.show = true;
|
|
1440
1434
|
}
|
|
1441
1435
|
if (item.collapsible == undefined) {
|
|
@@ -1636,10 +1630,10 @@ class MenuComponent extends BasicUxElementComponent {
|
|
|
1636
1630
|
}
|
|
1637
1631
|
}
|
|
1638
1632
|
MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MenuComponent, deps: [{ token: i1$2.Router }, { token: i0.ChangeDetectorRef }, { token: NG_INAIL_COMMON_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
|
|
1639
|
-
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: MenuComponent, selector: "inail-menu", inputs: { parent: "parent", innerMenu: "innerMenu", activeItem: "activeItem", emitCurrent: "emitCurrent", collapse: "collapse", show: "show", showAll: "showAll", toggle: "toggle", items: "items", reinit: "reinit", collapsible: "collapsible", collapsed: "collapsed", collapseOther: "collapseOther", expandAutomatically: "expandAutomatically" }, outputs: { itemClick: "itemClick", currentItem: "currentItem" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (
|
|
1633
|
+
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: MenuComponent, selector: "inail-menu", inputs: { parent: "parent", innerMenu: "innerMenu", activeItem: "activeItem", emitCurrent: "emitCurrent", collapse: "collapse", show: "show", showAll: "showAll", toggle: "toggle", items: "items", reinit: "reinit", collapsible: "collapsible", collapsed: "collapsed", collapseOther: "collapseOther", expandAutomatically: "expandAutomatically" }, outputs: { itemClick: "itemClick", currentItem: "currentItem" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (item.show$ | async)\"\n [attr.role]=\"item.link ? 'menuitem' : undefined\"\n [ngClass]=\"{selected: isActive(item)}\"\n class=\"livello_1\">\n <a *ngIf=\"item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n [routerLink]=\"getItemLink(item)\"\n [queryParams]=\"item.queryParams\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.space)=\"itemOnClick($event)\">\n </a>\n <a *ngIf=\"!item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n role=\"button\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.enter)=\"itemOnClick(item)\"\n (keyup.space)=\"itemOnClick(item)\">\n </a>\n <debug-pre *ngIf=\"showState\">[menu-item]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"item.id\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"item.collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"item.collapsed\"></state-propertie>\n <!-- {{element | json}}-->\n </debug-pre>\n <inail-menu *ngIf=\"hasSubItems(item)\"\n [id]=\"item.id+'-items'\"\n [activeItem]=\"activeItem\"\n [items]=\"item.subItems\"\n [parent]=\"item\"\n [innerMenu]=\"true\"\n [emitCurrent]=\"emitCurrent\"\n [collapsible]=\"item.collapsible\"\n [collapsed]=\"item.collapsed\"\n [collapseOther]=\"collapseOther\"\n [collapse]=\"collapse\"\n [toggle]=\"toggle\"\n [show]=\"mostraItem\"\n [showState]=\"showState\"\n (itemClick)=\"itemClick.emit($event)\"\n (currentItem)=\"currentItemHandler($event, item)\">\n </inail-menu>\n </li>\n </ng-container>\n </ul>\n</ng-container>\n\n\n", styles: ["ul.inail-menu{padding:0 10px!important;overflow:hidden;transition:height .3s ease-out}ul.inail-menu.collapsed{height:0}ul.inail-menu ul{padding:0!important}\n"], components: [{ type: PreComponent, selector: "debug-pre" }, { type: StatePropertieComponent, selector: "state-propertie", inputs: ["label", "propertie", "hideIfNull"] }, { type: MenuComponent, selector: "inail-menu", inputs: ["parent", "innerMenu", "activeItem", "emitCurrent", "collapse", "show", "showAll", "toggle", "items", "reinit", "collapsible", "collapsed", "collapseOther", "expandAutomatically"], outputs: ["itemClick", "currentItem"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1$2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }], pipes: { "async": i1.AsyncPipe }, encapsulation: i0.ViewEncapsulation.None });
|
|
1640
1634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MenuComponent, decorators: [{
|
|
1641
1635
|
type: Component,
|
|
1642
|
-
args: [{ selector: 'inail-menu', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (
|
|
1636
|
+
args: [{ selector: 'inail-menu', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"inizializzazioneCompletata\">\n\n <ul #menu\n id=\"{{id}}\"\n [attr.role]=\"'menu'\"\n class=\"inail-menu {{class}}\"\n [ngStyle]=\"{'height.px': (menuHeight$ | async)}\"\n [ngClass]=\"{'livello_2': innerMenu, 'collapsed': isCollapsed()}\">\n\n <debug-pre *ngIf=\"showState\">[inail-menu-intranet]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"id\"></state-propertie>\n <state-propertie [label]=\"'innerMenu'\" [propertie]=\"innerMenu\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"collapsed\"></state-propertie>\n <state-propertie [label]=\"'collapseOther'\" [propertie]=\"collapseOther\"></state-propertie>\n <!-- {{elements | json}}-->\n </debug-pre>\n\n <ng-container *ngFor=\"let item of items\">\n\n <li *ngIf=\"showItem(item) || (item.show$ | async)\"\n [attr.role]=\"item.link ? 'menuitem' : undefined\"\n [ngClass]=\"{selected: isActive(item)}\"\n class=\"livello_1\">\n <a *ngIf=\"item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n [routerLink]=\"getItemLink(item)\"\n [queryParams]=\"item.queryParams\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.space)=\"itemOnClick($event)\">\n </a>\n <a *ngIf=\"!item.link\"\n [id]=\"item.id\"\n [attr.title]=\"getItemTitle(item)\"\n [attr.aria-label]=\"getItemAriaLabel(item)\"\n [attr.tabindex]=\"isCollapsed() ? '-1' : '0'\"\n role=\"button\"\n [innerHTML]=\"getItemLabel(item)\"\n [attr.aria-expanded]=\"isItemCollapsible(item) ? !item.collapsed : undefined\"\n (click)=\"itemOnClick(item)\"\n (keyup.arrowUp)=\"itemOnArrowUp()\"\n (keyup.arrowDown)=\"itemOnArrowDown()\"\n (keyup.enter)=\"itemOnClick(item)\"\n (keyup.space)=\"itemOnClick(item)\">\n </a>\n <debug-pre *ngIf=\"showState\">[menu-item]<br>\n <state-propertie [label]=\"'id'\" [propertie]=\"item.id\"></state-propertie>\n <state-propertie [label]=\"'collapsible'\" [propertie]=\"item.collapsible\"></state-propertie>\n <state-propertie [label]=\"'collapsed'\" [propertie]=\"item.collapsed\"></state-propertie>\n <!-- {{element | json}}-->\n </debug-pre>\n <inail-menu *ngIf=\"hasSubItems(item)\"\n [id]=\"item.id+'-items'\"\n [activeItem]=\"activeItem\"\n [items]=\"item.subItems\"\n [parent]=\"item\"\n [innerMenu]=\"true\"\n [emitCurrent]=\"emitCurrent\"\n [collapsible]=\"item.collapsible\"\n [collapsed]=\"item.collapsed\"\n [collapseOther]=\"collapseOther\"\n [collapse]=\"collapse\"\n [toggle]=\"toggle\"\n [show]=\"mostraItem\"\n [showState]=\"showState\"\n (itemClick)=\"itemClick.emit($event)\"\n (currentItem)=\"currentItemHandler($event, item)\">\n </inail-menu>\n </li>\n </ng-container>\n </ul>\n</ng-container>\n\n\n", styles: ["ul.inail-menu{padding:0 10px!important;overflow:hidden;transition:height .3s ease-out}ul.inail-menu.collapsed{height:0}ul.inail-menu ul{padding:0!important}\n"] }]
|
|
1643
1637
|
}], ctorParameters: function () {
|
|
1644
1638
|
return [{ type: i1$2.Router }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
|
|
1645
1639
|
type: Inject,
|