ad-custom-lib
Version:
This is an UI custom library based on Adminlte library with purpose for personal use, if you need a full template of Primeng please visit https://github.com/mledour/angular-admin-lte
848 lines • 68.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, NgZone, QueryList, Renderer2, ViewChild, ViewChildren } from '@angular/core';
import { NavigationEnd, PRIMARY_OUTLET, Router, ActivatedRoute } from '@angular/router';
import { removeListeners, removeSubscriptions } from '../../helpers';
import { RoutingService } from '../../services/routing.service';
import { HeaderService } from '../header/header.service';
import { LayoutStore } from '../layout.store';
import { WrapperService } from '../wrapper/wrapper.service';
import { SidebarLeftToggleDirective } from './sidebar-left.directive';
/**
* @record
*/
export function Item() { }
if (false) {
/** @type {?} */
Item.prototype.id;
/** @type {?} */
Item.prototype.parentId;
/** @type {?} */
Item.prototype.label;
/** @type {?|undefined} */
Item.prototype.route;
/** @type {?|undefined} */
Item.prototype.iconClasses;
/** @type {?|undefined} */
Item.prototype.children;
/** @type {?|undefined} */
Item.prototype.isActive;
/** @type {?|undefined} */
Item.prototype.isCollapsed;
/** @type {?|undefined} */
Item.prototype.disableCollapse;
}
var SidebarLeftComponent = /** @class */ (function () {
/**
* @method constructor
* @param changeDetectorRef [description]
* @param layoutStore [description]
* @param ngZone [description]
* @param renderer2 [description]
* @param router [description]
* @param routingService [description]
* @param wrapperService [description]
* @param headerService [description]
*/
function SidebarLeftComponent(changeDetectorRef, layoutStore, ngZone, renderer2, router, routingService, wrapperService, headerService, activatedRoute) {
this.changeDetectorRef = changeDetectorRef;
this.layoutStore = layoutStore;
this.ngZone = ngZone;
this.renderer2 = renderer2;
this.router = router;
this.routingService = routingService;
this.wrapperService = wrapperService;
this.headerService = headerService;
this.activatedRoute = activatedRoute;
this.collapsedItems = [];
this.activatedItems = [];
this.toggleListeners = [];
this.listeners = [];
this.itemsByIds = {};
this.runningAnimations = 0;
this.subscriptions = [];
}
/**
* @method ngOnInit
*/
/**
* \@method ngOnInit
* @return {?}
*/
SidebarLeftComponent.prototype.ngOnInit = /**
* \@method ngOnInit
* @return {?}
*/
function () {
var _this = this;
this.subscriptions.push(this.layoutStore.sidebarLeftMenu.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.menu = value;
_this.monkeyPatchMenu(_this.menu);
if (_this.initialized) {
_this.setMenuListeners(_this.activeUrl);
_this.setSidebarListeners();
_this.setMenuTogglesListeners();
}
_this.initialized = true;
})));
this.subscriptions.push(this.layoutStore.sidebarLeftMenuActiveUrl.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.activeUrl = value;
_this.setMenuListeners(value);
})));
this.subscriptions.push(this.routingService.events.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var url;
if (event instanceof NavigationEnd) {
url = event.url;
}
else {
url = _this.router.url;
}
_this.activeUrl = url;
_this.setMenuListeners(url);
// console.log(url)
})));
this.setSidebarListeners();
};
/**
* @method ngAfterViewInit
*/
/**
* \@method ngAfterViewInit
* @return {?}
*/
SidebarLeftComponent.prototype.ngAfterViewInit = /**
* \@method ngAfterViewInit
* @return {?}
*/
function () {
this.setMenuTogglesListeners();
this.checkMenuWithoutChildren();
};
/**
* @method ngOnDestroy
*/
/**
* \@method ngOnDestroy
* @return {?}
*/
SidebarLeftComponent.prototype.ngOnDestroy = /**
* \@method ngOnDestroy
* @return {?}
*/
function () {
this.subscriptions = removeSubscriptions(this.subscriptions);
this.listeners = removeListeners(this.listeners);
this.toggleListeners = removeListeners(this.toggleListeners);
};
/**
* [setSidebarListeners description]
* @method setSidebarListeners
*/
/**
* [setSidebarListeners description]
* \@method setSidebarListeners
* @return {?}
*/
SidebarLeftComponent.prototype.setSidebarListeners = /**
* [setSidebarListeners description]
* \@method setSidebarListeners
* @return {?}
*/
function () {
var _this = this;
this.subscriptions.push(this.layoutStore.layout.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.layout = value;
_this.setSidebarHeight();
})));
this.subscriptions.push(this.layoutStore.windowInnerHeight.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.windowInnerHeight = value;
_this.setSidebarHeight();
})));
this.subscriptions.push(this.layoutStore.sidebarLeftMenu.subscribe((/**
* @return {?}
*/
function () {
_this.changeDetectorRef.detectChanges();
})));
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.listeners.push(_this.renderer2.listen(_this.sidebarElement.nativeElement, 'mouseenter', (/**
* @return {?}
*/
function () {
_this.layoutStore.sidebarLeftMouseOver(true);
})));
_this.listeners.push(_this.renderer2.listen(_this.sidebarElement.nativeElement, 'mouseleave', (/**
* @return {?}
*/
function () {
_this.layoutStore.sidebarLeftMouseOver(false);
})));
}));
this.subscriptions.push(this.layoutStore.windowInnerWidth.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.windowInnerWidth = value;
if (!_this.isSidebarLeftCollapsed && _this.windowInnerWidth <= 767) {
_this.layoutStore.sidebarLeftCollapsed(true);
}
else if (_this.windowInnerWidth > 767 && _this.isSidebarLeftCollapsed && !_this.isSidebarLeftExpandOnOver) {
_this.layoutStore.sidebarLeftCollapsed(false);
}
})));
this.subscriptions.push(this.layoutStore.isSidebarLeftMouseOver.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.isSidebarLeftMouseOver = value;
if (_this.isSidebarLeftExpandOnOver) {
_this.layoutStore.sidebarLeftCollapsed(!value);
}
})));
this.subscriptions.push(this.layoutStore.isSidebarLeftExpandOnOver.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.isSidebarLeftExpandOnOver = value;
if (_this.windowInnerWidth > 767 && _this.isSidebarLeftCollapsed !== undefined) {
_this.layoutStore.sidebarLeftCollapsed(value);
}
})));
this.subscriptions.push(this.layoutStore.isSidebarLeftCollapsed.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
_this.isSidebarLeftCollapsed = value;
if (_this.windowInnerWidth <= 767) {
if (value) {
_this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-open');
}
else {
_this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-open');
}
}
else {
if (_this.isSidebarLeftExpandOnOver && !_this.isSidebarLeftMouseOver && !value) {
_this.layoutStore.sidebarLeftExpandOnOver(false);
}
if (value) {
_this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-collapse');
if (_this.isSidebarLeftExpandOnOver) {
_this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-expanded-on-hover');
}
}
else {
_this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-collapse');
if (_this.isSidebarLeftExpandOnOver) {
_this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-expanded-on-hover');
}
}
}
})));
this.subscriptions.push(this.layoutStore.isSidebarLeftMini.subscribe((/**
* @param {?} value
* @return {?}
*/
function (value) {
if (value) {
_this.renderer2.addClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-mini');
}
else {
_this.renderer2.removeClass(_this.wrapperService.wrapperElementRef.nativeElement, 'sidebar-mini');
}
})));
};
/**
* [setMenuListeners description]
* @method setMenuListeners
*/
/**
* [setMenuListeners description]
* \@method setMenuListeners
* @param {?} url
* @return {?}
*/
SidebarLeftComponent.prototype.setMenuListeners = /**
* [setMenuListeners description]
* \@method setMenuListeners
* @param {?} url
* @return {?}
*/
function (url) {
if (url === '/') {
this.activeItems(url);
this.changeDetectorRef.detectChanges();
}
else {
/** @type {?} */
var primaryOutlet = this.router.parseUrl(url).root.children[PRIMARY_OUTLET];
if (primaryOutlet) {
// console.log(primaryOutlet)
// this.activeItems('/' + primaryOutlet.toString());
this.activeItems(primaryOutlet.toString());
this.changeDetectorRef.detectChanges();
}
}
if (this.windowInnerWidth <= 767 || this.isSidebarLeftExpandOnOver) {
this.layoutStore.sidebarLeftCollapsed(true);
}
};
/**
* [getIconClasses description]
* @method getIconClasses
* @param item [description]
* @return [description]
*/
/**
* [getIconClasses description]
* \@method getIconClasses
* @param {?} item [description]
* @return {?} [description]
*/
SidebarLeftComponent.prototype.getIconClasses = /**
* [getIconClasses description]
* \@method getIconClasses
* @param {?} item [description]
* @return {?} [description]
*/
function (item) {
if (item.iconClasses || item.iconClasses === '') {
return item.iconClasses;
}
else {
return 'fa fa-dot-circle-o';
}
};
/**
* [visibilityStateStart description]
* @method visibilityStateStart
* @param event [description]
*/
/**
* [visibilityStateStart description]
* \@method visibilityStateStart
* @param {?} event [description]
* @return {?}
*/
SidebarLeftComponent.prototype.visibilityStateStart = /**
* [visibilityStateStart description]
* \@method visibilityStateStart
* @param {?} event [description]
* @return {?}
*/
function (event) {
var _this = this;
this.runningAnimations++;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
setTimeout((/**
* @return {?}
*/
function () {
_this.runningAnimations--;
if (!_this.runningAnimations) {
_this.layoutStore.setSidebarLeftElementHeight(_this.sidebarElement.nativeElement.offsetHeight);
}
}), event.totalTime);
}));
};
/**
* [uncollapseItemParents description]
* @method uncollapseItemParents
* @param item [description]
* @param isActive [description]
*/
/**
* [uncollapseItemParents description]
* \@method uncollapseItemParents
* @private
* @param {?} item [description]
* @param {?=} isActive [description]
* @return {?}
*/
SidebarLeftComponent.prototype.uncollapseItemParents = /**
* [uncollapseItemParents description]
* \@method uncollapseItemParents
* @private
* @param {?} item [description]
* @param {?=} isActive [description]
* @return {?}
*/
function (item, isActive) {
if (isActive === void 0) { isActive = false; }
if (isActive) {
item.isActive = true;
this.activatedItems.push(item);
}
// console.log(item)
// console.log(isActive)
item.isCollapsed = false;
this.collapsedItems.push(item);
if (item.parentId) {
this.uncollapseItemParents(this.itemsByIds[item.parentId], isActive);
}
};
/**
* [findItemsByUrl description]
* @method findItemsByUrl
* @param url [description]
* @param items [description]
* @param returnItems [description]
* @return [description]
*/
/**
* [findItemsByUrl description]
* \@method findItemsByUrl
* @private
* @param {?} url [description]
* @param {?} items [description]
* @param {?=} returnItems [description]
* @return {?} [description]
*/
SidebarLeftComponent.prototype.findItemsByUrl = /**
* [findItemsByUrl description]
* \@method findItemsByUrl
* @private
* @param {?} url [description]
* @param {?} items [description]
* @param {?=} returnItems [description]
* @return {?} [description]
*/
function (url, items, returnItems) {
var _this = this;
if (returnItems === void 0) { returnItems = []; }
items.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (item.route === url) {
returnItems.push(item);
}
else if (item.children) {
_this.findItemsByUrl(url, item.children, returnItems);
}
else if (url.includes(item.route) && item.route != '/') {
returnItems.push(item);
}
}));
return returnItems;
};
/**
* [activeItems description]
* @method activeItems
* @param url [description]
*/
/**
* [activeItems description]
* \@method activeItems
* @private
* @param {?} url [description]
* @return {?}
*/
SidebarLeftComponent.prototype.activeItems = /**
* [activeItems description]
* \@method activeItems
* @private
* @param {?} url [description]
* @return {?}
*/
function (url) {
var _this = this;
this.activatedItems.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.isActive = false;
}));
this.activatedItems = [];
this.collapsedItems.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.isActive = false;
item.isCollapsed = true;
}));
this.collapsedItems = [];
// console.log(url)
/** @type {?} */
var items = this.findItemsByUrl(url, this.menu);
items.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
item.isActive = true;
_this.uncollapseItemParents(item, true);
_this.activatedItems.push(item);
}));
};
/**
* [monkeyPatchMenu description]
* @method monkeyPatchMenu
* @param items [description]
* @param parentId [description]
*/
/**
* [monkeyPatchMenu description]
* \@method monkeyPatchMenu
* @private
* @param {?} items [description]
* @param {?=} parentId [description]
* @return {?}
*/
SidebarLeftComponent.prototype.monkeyPatchMenu = /**
* [monkeyPatchMenu description]
* \@method monkeyPatchMenu
* @private
* @param {?} items [description]
* @param {?=} parentId [description]
* @return {?}
*/
function (items, parentId) {
var _this = this;
items.forEach((/**
* @param {?} item
* @param {?} index
* @return {?}
*/
function (item, index) {
item.id = parentId ? Number(parentId + '' + (index + 1)) : index + 1;
if (parentId) {
item.parentId = parentId;
}
if (!item.disableCollapse) {
item.isCollapsed = true;
}
item.isActive = false;
if (parentId || item.children) {
_this.itemsByIds[item.id] = item;
}
if (item.children) {
_this.monkeyPatchMenu(item.children, item.id);
}
}));
};
/**
* [setMenuTogglesListeners description]
* @method setMenuTogglesListeners
*/
/**
* [setMenuTogglesListeners description]
* \@method setMenuTogglesListeners
* @private
* @return {?}
*/
SidebarLeftComponent.prototype.setMenuTogglesListeners = /**
* [setMenuTogglesListeners description]
* \@method setMenuTogglesListeners
* @private
* @return {?}
*/
function () {
var _this = this;
this.toggleListeners = removeListeners(this.toggleListeners);
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.sidebarLeftToggleDirectives.forEach((/**
* @param {?} menuToggle
* @return {?}
*/
function (menuToggle) {
_this.toggleListeners.push(_this.renderer2.listen(menuToggle.elementRef.nativeElement, 'click', (/**
* @param {?} event
* @return {?}
*/
function (event) {
event.preventDefault();
if (menuToggle.item.isCollapsed) {
_this.collapsedItems.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (!item.disableCollapse) {
item.isCollapsed = true;
}
}));
_this.collapsedItems = [];
_this.uncollapseItemParents(menuToggle.item);
}
else {
menuToggle.item.isCollapsed = !menuToggle.item.isCollapsed;
}
_this.changeDetectorRef.detectChanges();
})));
}));
}));
};
/**
* [checkMenuWithoutChildren description]
* @method checkMenuWithoutChildren
*/
/**
* [checkMenuWithoutChildren description]
* \@method checkMenuWithoutChildren
* @private
* @return {?}
*/
SidebarLeftComponent.prototype.checkMenuWithoutChildren = /**
* [checkMenuWithoutChildren description]
* \@method checkMenuWithoutChildren
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var menuHaveChildren;
this.menu.forEach((/**
* @param {?} item
* @return {?}
*/
function (item) {
if (item.children) {
return menuHaveChildren = true;
}
}));
if (!menuHaveChildren) {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
setTimeout((/**
* @return {?}
*/
function () {
_this.layoutStore.setSidebarLeftElementHeight(_this.sidebarElement.nativeElement.offsetHeight);
}));
}));
}
};
/**
* [setSidebarHeight description]
* @method setSidebarHeight
*/
/**
* [setSidebarHeight description]
* \@method setSidebarHeight
* @private
* @return {?}
*/
SidebarLeftComponent.prototype.setSidebarHeight = /**
* [setSidebarHeight description]
* \@method setSidebarHeight
* @private
* @return {?}
*/
function () {
if (this.layout === 'fixed') {
/** @type {?} */
var height = this.windowInnerHeight - this.headerService.offsetHeight;
if (height && height !== this.sidebarHeight) {
this.sidebarHeight = height;
this.sidebarOverflow = 'auto';
this.changeDetectorRef.detectChanges();
}
}
else if (this.sidebarHeight) {
this.sidebarOverflow = this.sidebarHeight = null;
this.changeDetectorRef.detectChanges();
}
};
SidebarLeftComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-layout-sidebar-left',
template: "<aside class=\"main-sidebar\">\r\n <section class=\"sidebar\" #sidebarElement [style.height.px]=\"sidebarHeight\" [style.overflow]=\"sidebarOverflow\">\r\n <ng-content></ng-content>\r\n <ul class=\"sidebar-menu\">\r\n <ng-container *ngFor=\"let item of menu\">\r\n <ng-container *ngTemplateOutlet=\"sidebarInner; context: {item: item}\"></ng-container>\r\n </ng-container>\r\n </ul>\r\n </section>\r\n</aside>\r\n\r\n<ng-template #sidebarInner let-item=\"item\">\r\n <li [class.active]=\"item.isActive\" [class.header]=\"item.separator\" [class.menu-open]=\"!item.isCollapsed\">\r\n <span *ngIf=\"item.separator\">{{item.label}}</span>\r\n <a *ngIf=\"!item.separator && item.route\" [routerLink]=\"item.route\">\r\n <i [class]=\"getIconClasses(item)\"></i><span>{{item.label}}</span>\r\n <span *ngIf=\"item.children || item.pullRights\" class=\"pull-right-container\">\r\n <span *ngFor=\"let rightItem of item.pullRights\"\r\n class=\"pull-right {{rightItem.classes}}\">{{rightItem.text}}</span>\r\n <i *ngIf=\"!item.pullRights\" class=\"fa fa-angle-left pull-right\"></i>\r\n </span>\r\n </a>\r\n <a *ngIf=\"!item.separator && !item.route\" href=\"#\" [mkMenuToggle]=\"item\">\r\n <i [class]=\"getIconClasses(item)\"></i><span>{{item.label}}</span>\r\n <span *ngIf=\"item.children || item.pullRights\" class=\"pull-right-container\">\r\n <span *ngFor=\"let rightItem of item.pullRights\"\r\n class=\"pull-right {{rightItem.classes}}\">{{rightItem.text}}</span>\r\n <i *ngIf=\"!item.pullRights\" class=\"fa fa-angle-left pull-right\"></i>\r\n </span>\r\n </a>\r\n <ul *ngIf=\"item.children\" [mkCollapseAnimation]=\"item.isCollapsed\"\r\n (mkCollapseAnimation.start)=\"visibilityStateStart($event)\" class=\"treeview-menu\">\r\n <ng-container *ngFor=\"let item of item.children\">\r\n <ng-container *ngTemplateOutlet=\"sidebarInner; context: {item: item}\"></ng-container>\r\n </ng-container>\r\n </ul>\r\n </li>\r\n</ng-template>",
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".treeview-menu.collapse{display:none}.treeview-menu,.treeview-menu.collapse.in{display:block}"]
}] }
];
/** @nocollapse */
SidebarLeftComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef },
{ type: LayoutStore },
{ type: NgZone },
{ type: Renderer2 },
{ type: Router },
{ type: RoutingService },
{ type: WrapperService },
{ type: HeaderService },
{ type: ActivatedRoute }
]; };
SidebarLeftComponent.propDecorators = {
sidebarElement: [{ type: ViewChild, args: ['sidebarElement', { static: true },] }],
sidebarLeftToggleDirectives: [{ type: ViewChildren, args: [SidebarLeftToggleDirective,] }]
};
return SidebarLeftComponent;
}());
export { SidebarLeftComponent };
if (false) {
/** @type {?} */
SidebarLeftComponent.prototype.menu;
/** @type {?} */
SidebarLeftComponent.prototype.sidebarHeight;
/** @type {?} */
SidebarLeftComponent.prototype.sidebarOverflow;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.layout;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.isSidebarLeftCollapsed;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.isSidebarLeftExpandOnOver;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.isSidebarLeftMouseOver;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.windowInnerWidth;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.windowInnerHeight;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.collapsedItems;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.activatedItems;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.toggleListeners;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.listeners;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.itemsByIds;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.runningAnimations;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.subscriptions;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.activeUrl;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.initialized;
/** @type {?} */
SidebarLeftComponent.prototype.sidebarElement;
/** @type {?} */
SidebarLeftComponent.prototype.sidebarLeftToggleDirectives;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.changeDetectorRef;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.layoutStore;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.ngZone;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.renderer2;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.router;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.routingService;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.wrapperService;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.headerService;
/**
* @type {?}
* @private
*/
SidebarLeftComponent.prototype.activatedRoute;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1sZWZ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FkLWN1c3RvbS1saWIvIiwic291cmNlcyI6WyJsaWIvbGF5b3V0L3NpZGViYXItbGVmdC9zaWRlYmFyLWxlZnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ1ksdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQ3JFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFDbkUsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RyxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUV0RSwwQkFVQzs7O0lBVEcsa0JBQVc7O0lBQ1gsd0JBQWlCOztJQUNqQixxQkFBYzs7SUFDZCxxQkFBZTs7SUFDZiwyQkFBcUI7O0lBQ3JCLHdCQUF1Qjs7SUFDdkIsd0JBQW1COztJQUNuQiwyQkFBc0I7O0lBQ3RCLCtCQUEwQjs7QUFLOUI7SUFnQ0k7Ozs7Ozs7Ozs7TUFVRTtJQUNGLDhCQUNZLGlCQUFvQyxFQUNwQyxXQUF3QixFQUN4QixNQUFjLEVBQ2QsU0FBb0IsRUFDcEIsTUFBYyxFQUNkLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFB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LEFBaFpELElBZ1pDO1NBMVlZLG9CQUFvQjs7O0lBRTdCLG9DQUF3Qjs7SUFDeEIsNkNBQTZCOztJQUM3QiwrQ0FBK0I7Ozs7O0lBRS9CLHNDQUF1Qjs7Ozs7SUFDdkIsc0RBQXdDOzs7OztJQUN4Qyx5REFBMkM7Ozs7O0lBQzNDLHNEQUF3Qzs7Ozs7SUFDeEMsZ0RBQWlDOzs7OztJQUNqQyxpREFBa0M7Ozs7O0lBQ2xDLDhDQUFtQzs7Ozs7SUFDbkMsOENBQW1DOzs7OztJQUNuQywrQ0FBOEM7Ozs7O0lBQzlDLHlDQUF3Qzs7Ozs7SUFDeEMsMENBQXFEOzs7OztJQUNyRCxpREFBOEI7Ozs7O0lBQzlCLDZDQUEyQjs7Ozs7SUFDM0IseUNBQTBCOzs7OztJQUMxQiwyQ0FBNkI7O0lBRTdCLDhDQUFpRjs7SUFFakYsMkRBQW9IOzs7OztJQWNoSCxpREFBNEM7Ozs7O0lBQzVDLDJDQUFnQzs7Ozs7SUFDaEMsc0NBQXNCOzs7OztJQUN0Qix5Q0FBNEI7Ozs7O0lBQzVCLHNDQUFzQjs7Ozs7SUFDdEIsOENBQXNDOzs7OztJQUN0Qyw4Q0FBc0M7Ozs7O0lBQ3RDLDZDQUFvQzs7Ozs7SUFDcEMsOENBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBOZ1pvbmUsXHJcbiAgICBPbkRlc3Ryb3ksIE9uSW5pdCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEV2ZW50IGFzIFJvdXRlckV2ZW50LCBOYXZpZ2F0aW9uRW5kLCBQUklNQVJZX09VVExFVCwgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi8uLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIZWFkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaGVhZGVyL2hlYWRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U3RvcmUgfSBmcm9tICcuLi9sYXlvdXQuc3RvcmUnO1xyXG5pbXBvcnQgeyBXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uL3dyYXBwZXIvd3JhcHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2lkZWJhckxlZnRUb2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuL3NpZGViYXItbGVmdC5kaXJlY3RpdmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJdGVtIHtcclxuICAgIGlkOiBudW1iZXI7XHJcbiAgICBwYXJlbnRJZDogbnVtYmVyO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIHJvdXRlPzogc3RyaW5nO1xyXG4gICAgaWNvbkNsYXNzZXM/OiBzdHJpbmc7XHJcbiAgICBjaGlsZHJlbj86IEFycmF5PEl0ZW0+O1xyXG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xyXG4gICAgaXNDb2xsYXBzZWQ/OiBib29sZWFuO1xyXG4gICAgZGlzYWJsZUNvbGxhcHNlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSXRlbXMgPSBBcnJheTxJdGVtPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay1sYXlvdXQtc2lkZWJhci1sZWZ0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWRlYmFyLWxlZnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vc2lkZWJhci1sZWZ0LmNvbXBvbmVudC5jc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyTGVmdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgICBwdWJsaWMgbWVudTogQXJyYXk8YW55PjtcclxuICAgIHB1YmxpYyBzaWRlYmFySGVpZ2h0OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2lkZWJhck92ZXJmbG93OiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgaXNTaWRlYmFyTGVmdENvbGxhcHNlZDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaXNTaWRlYmFyTGVmdEV4cGFuZE9uT3ZlcjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaXNTaWRlYmFyTGVmdE1vdXNlT3ZlcjogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgd2luZG93SW5uZXJXaWR0aDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB3aW5kb3dJbm5lckhlaWdodDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBjb2xsYXBzZWRJdGVtczogSXRlbXMgPSBbXTtcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkSXRlbXM6IEl0ZW1zID0gW107XHJcbiAgICBwcml2YXRlIHRvZ2dsZUxpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW107XHJcbiAgICBwcml2YXRlIGxpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW107XHJcbiAgICBwcml2YXRlIGl0ZW1zQnlJZHM6IHsgW3Byb3BLZXk6IG51bWJlcl06IEl0ZW0gfSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBydW5uaW5nQW5pbWF0aW9ucyA9IDA7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBbXTtcclxuICAgIHByaXZhdGUgYWN0aXZlVXJsOiBTdHJpbmc7XHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3NpZGViYXJFbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHNpZGViYXJFbGVtZW50OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oU2lkZWJhckxlZnRUb2dnbGVEaXJlY3RpdmUpIHB1YmxpYyBzaWRlYmFyTGVmdFRvZ2dsZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxTaWRlYmFyTGVmdFRvZ2dsZURpcmVjdGl2ZT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEBtZXRob2QgY29uc3RydWN0b3JcclxuICAgICogQHBhcmFtICBjaGFuZ2VEZXRlY3RvclJlZiAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgKiBAcGFyYW0gIGxheW91dFN0b3JlICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAqIEBwYXJhbSAgbmdab25lICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICogQHBhcmFtICByZW5kZXJlcjIgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgKiBAcGFyYW0gIHJvdXRlciAgICAgICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAqIEBwYXJhbSAgcm91dGluZ1NlcnZpY2UgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICogQHBhcmFtICB3cmFwcGVyU2VydmljZSAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgKiBAcGFyYW0gIGhlYWRlclNlcnZpY2UgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBsYXlvdXRTdG9yZTogTGF5b3V0U3RvcmUsXHJcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB3cmFwcGVyU2VydmljZTogV3JhcHBlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBoZWFkZXJTZXJ2aWNlOiBIZWFkZXJTZXJ2aWNlL