solar-ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
643 lines • 62.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { animate, state, style, transition, trigger } from '@angular/animations';
import { Component, ElementRef, EventEmitter, HostListener, Input, NgZone, Output, Renderer2, TemplateRef, ViewChild } from '@angular/core';
import { fromEvent, Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { InputBoolean } from '../core/util/convert';
import { NzTreeNode } from './nz-tree-node';
import { isCheckDisabled } from './nz-tree-util';
import { NzTreeService } from './nz-tree.service';
export class NzTreeNodeComponent {
/**
* @param {?} nzTreeService
* @param {?} ngZone
* @param {?} renderer
* @param {?} elRef
*/
constructor(nzTreeService, ngZone, renderer, elRef) {
this.nzTreeService = nzTreeService;
this.ngZone = ngZone;
this.renderer = renderer;
this.elRef = elRef;
this.nzHideUnMatched = false;
// Output
this.clickNode = new EventEmitter();
this.dblClick = new EventEmitter();
this.contextMenu = new EventEmitter();
this.clickCheckBox = new EventEmitter();
this.clickExpand = new EventEmitter();
this.nzDragStart = new EventEmitter();
this.nzDragEnter = new EventEmitter();
this.nzDragOver = new EventEmitter();
this.nzDragLeave = new EventEmitter();
this.nzDrop = new EventEmitter();
this.nzDragEnd = new EventEmitter();
// default var
this.prefixCls = 'ant-tree';
this.highlightKeys = [];
this.nzNodeClass = {};
this.nzNodeSwitcherClass = {};
this.nzNodeContentClass = {};
this.nzNodeContentIconClass = {};
this.nzNodeContentLoadingClass = {};
this.nzNodeChildrenClass = {};
/**
* drag var
*/
this.destory$ = new Subject();
this.dragPos = 2;
this.dragPosClass = {
'0': 'drag-over',
'1': 'drag-over-gap-bottom',
'-1': 'drag-over-gap-top'
};
this._searchValue = '';
this._nzExpandAll = false;
this._nzDraggable = false;
this.oldAPIIcon = true;
}
/**
* @param {?} value
* @return {?}
*/
set nzTreeNode(value) {
// add to checked list & selected list
if (value.isChecked) {
this.nzTreeService.setCheckedNodeList(value);
}
// add select list
if (value.isSelected) {
this.nzTreeService.setSelectedNodeList(value, this.nzMultiple);
}
if (!value.isLeaf) {
this.nzTreeService.setExpandedNodeList(value);
}
this._nzTreeNode = value;
}
/**
* @return {?}
*/
get nzTreeNode() {
return this._nzTreeNode;
}
/**
* @param {?} value
* @return {?}
*/
set nzDraggable(value) {
this._nzDraggable = value;
this.handDragEvent();
}
/**
* @return {?}
*/
get nzDraggable() {
return this._nzDraggable;
}
/**
* @deprecated use
* nzExpandAll instead
* @param {?} value
* @return {?}
*/
set nzDefaultExpandAll(value) {
this._nzExpandAll = value;
if (value && this.nzTreeNode && !this.nzTreeNode.isLeaf) {
this.nzTreeNode.setExpanded(true);
this.nzTreeService.setExpandedNodeList(this.nzTreeNode);
}
}
/**
* @return {?}
*/
get nzDefaultExpandAll() {
return this._nzExpandAll;
}
/**
* @param {?} value
* @return {?}
*/
set nzExpandAll(value) {
this._nzExpandAll = value;
if (value && this.nzTreeNode && !this.nzTreeNode.isLeaf) {
this.nzTreeNode.setExpanded(true);
this.nzTreeService.setExpandedNodeList(this.nzTreeNode);
}
}
/**
* @return {?}
*/
get nzExpandAll() {
return this._nzExpandAll;
}
/**
* @param {?} value
* @return {?}
*/
set nzSearchValue(value) {
this.highlightKeys = [];
if (value && this.nzTreeNode.title.toLowerCase().includes(value.toLowerCase())) {
/** @type {?} */
const index = this.nzTreeNode.title.toLowerCase().indexOf(value.toLowerCase());
this.highlightKeys.push(this.nzTreeNode.title.slice(0, index));
this.highlightKeys.push(this.nzTreeNode.title.slice(index + value.length, this.nzTreeNode.title.length));
}
this._searchValue = value;
}
/**
* @return {?}
*/
get nzSearchValue() {
return this._searchValue;
}
/**
* @return {?}
*/
get nzIcon() {
if (this.nzTreeNode && this.nzTreeNode.origin.icon) {
this.oldAPIIcon = this.nzTreeNode.origin.icon.indexOf('anticon') > -1;
}
return this.nzTreeNode && this.nzTreeNode.origin.icon;
}
/**
* @return {?}
*/
get canDraggable() {
return (this.nzDraggable && this.nzTreeNode && !this.nzTreeNode.isDisabled) ? true : null;
}
/**
* @return {?}
*/
get isShowLineIcon() {
return !this.nzTreeNode.isLeaf && this.nzShowLine;
}
/**
* @return {?}
*/
get isShowSwitchIcon() {
return !this.nzTreeNode.isLeaf && !this.nzShowLine;
}
/**
* @return {?}
*/
get isSwitcherOpen() {
return (this.nzTreeNode.isExpanded && !this.nzTreeNode.isLeaf);
}
/**
* @return {?}
*/
get isSwitcherClose() {
return (!this.nzTreeNode.isExpanded && !this.nzTreeNode.isLeaf);
}
/**
* @return {?}
*/
get displayStyle() {
// TODO
return (this.nzSearchValue && this.nzHideUnMatched && !this.nzTreeNode.isMatched && !this.nzTreeNode.isExpanded) ? 'none' : '';
}
/**
* reset node class
* @return {?}
*/
setClassMap() {
this.nzNodeClass = {
[`${this.prefixCls}-treenode-disabled`]: this.nzTreeNode.isDisabled
};
this.nzNodeSwitcherClass = {
[`${this.prefixCls}-switcher`]: true,
[`${this.prefixCls}-switcher-noop`]: this.nzTreeNode.isLeaf
};
this.nzNodeContentClass = {
[`${this.prefixCls}-node-content-wrapper`]: true
};
this.nzNodeContentIconClass = {
[`${this.prefixCls}-iconEle`]: true,
[`${this.prefixCls}-icon__customize`]: true
};
this.nzNodeContentLoadingClass = {
[`${this.prefixCls}-iconEle`]: true
};
this.nzNodeChildrenClass = {
[`${this.prefixCls}-child-tree`]: true,
[`${this.prefixCls}-child-tree-open`]: true
};
}
/**
* click node to select, 200ms to dbl click
* @param {?} event
* @return {?}
*/
nzClick(event) {
event.preventDefault();
event.stopPropagation();
if (this.nzTreeNode.isSelectable) {
this.nzTreeService.setNodeActive(this.nzTreeNode, this.nzMultiple);
}
this.clickNode.emit(this.nzTreeService.formatEvent('click', this.nzTreeNode, event));
}
/**
* @param {?} event
* @return {?}
*/
nzDblClick(event) {
event.preventDefault();
event.stopPropagation();
this.dblClick.emit(this.nzTreeService.formatEvent('dblclick', this.nzTreeNode, event));
}
/**
* @param {?} event
* @return {?}
*/
nzContextMenu(event) {
event.preventDefault();
event.stopPropagation();
this.contextMenu.emit(this.nzTreeService.formatEvent('contextmenu', this.nzTreeNode, event));
}
/**
* collapse node
* @param {?} event
* @return {?}
*/
_clickExpand(event) {
event.preventDefault();
event.stopPropagation();
if (!this.nzTreeNode.isLoading && !this.nzTreeNode.isLeaf) {
// set async state
if (this.nzAsyncData && this.nzTreeNode.getChildren().length === 0 && !this.nzTreeNode.isExpanded) {
this.nzTreeNode.isLoading = true;
}
this.nzTreeNode.setExpanded(!this.nzTreeNode.isExpanded);
this.nzTreeService.setExpandedNodeList(this.nzTreeNode);
this.clickExpand.emit(this.nzTreeService.formatEvent('expand', this.nzTreeNode, event));
}
}
/**
* check node
* @param {?} event
* @return {?}
*/
_clickCheckBox(event) {
event.preventDefault();
event.stopPropagation();
// return if node is disabled
if (isCheckDisabled(this.nzTreeNode)) {
return;
}
this.nzTreeNode.setChecked(!this.nzTreeNode.isChecked);
this.nzTreeService.setCheckedNodeList(this.nzTreeNode);
if (!this.nzCheckStrictly) {
this.nzTreeService.conduct(this.nzTreeNode);
}
this.clickCheckBox.emit(this.nzTreeService.formatEvent('check', this.nzTreeNode, event));
}
/**
* drag event
* @return {?}
*/
clearDragClass() {
/** @type {?} */
const dragClass = ['drag-over-gap-top', 'drag-over-gap-bottom', 'drag-over'];
dragClass.forEach(e => {
this.renderer.removeClass(this.dragElement.nativeElement, e);
});
}
/**
* @param {?} e
* @return {?}
*/
handleDragStart(e) {
e.stopPropagation();
try {
// ie throw error
// firefox-need-it
e.dataTransfer.setData('text/plain', '');
}
catch (error) {
// empty
}
this.nzTreeService.setSelectedNode(this.nzTreeNode);
this.nzTreeNode.setExpanded(false);
this.nzDragStart.emit(this.nzTreeService.formatEvent('dragstart', null, e));
}
/**
* @param {?} e
* @return {?}
*/
handleDragEnter(e) {
e.preventDefault();
e.stopPropagation();
// reset position
this.dragPos = 2;
this.ngZone.run(() => {
if ((this.nzTreeNode !== this.nzTreeService.getSelectedNode()) && !this.nzTreeNode.isLeaf) {
this.nzTreeNode.setExpanded(true);
}
});
this.nzDragEnter.emit(this.nzTreeService.formatEvent('dragenter', this.nzTreeNode, e));
}
/**
* @param {?} e
* @return {?}
*/
handleDragOver(e) {
e.preventDefault();
e.stopPropagation();
/** @type {?} */
const dropPosition = this.nzTreeService.calcDropPosition(e);
if (this.dragPos !== dropPosition) {
this.clearDragClass();
this.dragPos = dropPosition;
// leaf node will pass
if (!(this.dragPos === 0 && this.nzTreeNode.isLeaf)) {
this.renderer.addClass(this.dragElement.nativeElement, this.dragPosClass[this.dragPos]);
}
}
this.nzDragOver.emit(this.nzTreeService.formatEvent('dragover', this.nzTreeNode, e));
}
/**
* @param {?} e
* @return {?}
*/
handleDragLeave(e) {
e.stopPropagation();
this.ngZone.run(() => {
this.clearDragClass();
});
this.nzDragLeave.emit(this.nzTreeService.formatEvent('dragleave', this.nzTreeNode, e));
}
/**
* @param {?} e
* @return {?}
*/
handleDragDrop(e) {
e.preventDefault();
e.stopPropagation();
this.ngZone.run(() => {
this.clearDragClass();
if (this.nzTreeService.getSelectedNode() === this.nzTreeNode) {
return;
}
else if (this.dragPos === 0 && this.nzTreeNode.isLeaf) {
return;
}
// pass if node is leafNo
if (this.nzBeforeDrop) {
this.nzBeforeDrop({
dragNode: this.nzTreeService.getSelectedNode(),
node: this.nzTreeNode,
pos: this.dragPos
}).subscribe((canDrop) => {
if (canDrop) {
this.nzTreeService.dropAndApply(this.nzTreeNode, this.dragPos);
}
this.nzDrop.emit(this.nzTreeService.formatEvent('drop', this.nzTreeNode, e));
this.nzDragEnd.emit(this.nzTreeService.formatEvent('dragend', this.nzTreeNode, e));
});
}
else if (this.nzTreeNode) {
this.nzTreeService.dropAndApply(this.nzTreeNode, this.dragPos);
this.nzDrop.emit(this.nzTreeService.formatEvent('drop', this.nzTreeNode, e));
}
});
}
/**
* @param {?} e
* @return {?}
*/
handleDragEnd(e) {
e.stopPropagation();
this.ngZone.run(() => {
// if user do not custom beforeDrop
if (!this.nzBeforeDrop) {
this.nzTreeService.setSelectedNode(null);
this.nzDragEnd.emit(this.nzTreeService.formatEvent('dragend', this.nzTreeNode, e));
}
});
}
/**
* 监听拖拽事件
* @return {?}
*/
handDragEvent() {
this.ngZone.runOutsideAngular(() => {
if (this.nzDraggable) {
this.destory$ = new Subject();
fromEvent(this.elRef.nativeElement, 'dragstart').pipe(takeUntil(this.destory$)).subscribe((e) => this.handleDragStart(e));
fromEvent(this.elRef.nativeElement, 'dragenter').pipe(takeUntil(this.destory$)).subscribe((e) => this.handleDragEnter(e));
fromEvent(this.elRef.nativeElement, 'dragover').pipe(takeUntil(this.destory$)).subscribe((e) => this.handleDragOver(e));
fromEvent(this.elRef.nativeElement, 'dragleave').pipe(takeUntil(this.destory$)).subscribe((e) => this.handleDragLeave(e));
fromEvent(this.elRef.nativeElement, 'drop').pipe(takeUntil(this.destory$)).subscribe((e) => this.handleDragDrop(e));
fromEvent(this.elRef.nativeElement, 'dragend').pipe(takeUntil(this.destory$)).subscribe((e) => this.handleDragEnd(e));
}
else {
this.destory$.next();
this.destory$.complete();
}
});
}
/**
* @return {?}
*/
ngOnInit() {
this.setClassMap();
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
this.setClassMap();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.destory$.next();
this.destory$.complete();
}
}
NzTreeNodeComponent.decorators = [
{ type: Component, args: [{
selector: 'nz-tree-node',
template: "<li\n #dragElement\n role=\"treeitem\"\n [style.display]=\"displayStyle\"\n [ngClass]=\"nzNodeClass\"\n [class.ant-tree-treenode-switcher-open]=\"isSwitcherOpen\"\n [class.ant-tree-treenode-switcher-close]=\"isSwitcherClose\"\n [class.ant-tree-treenode-checkbox-checked]=\"nzTreeNode.isChecked\"\n [class.ant-tree-treenode-checkbox-indeterminate]=\"nzTreeNode.isHalfChecked\"\n [class.ant-tree-treenode-selected]=\"nzTreeNode.isSelected\"\n [class.ant-tree-treenode-loading]=\"nzTreeNode.isLoading\">\n <ng-container *ngIf=\"nzShowExpand\">\n <span\n [ngClass]=\"nzNodeSwitcherClass\"\n [class.ant-tree-switcher_open]=\"isSwitcherOpen\"\n [class.ant-tree-switcher_close]=\"isSwitcherClose\"\n (click)=\"_clickExpand($event)\">\n <ng-container *ngIf=\"isShowSwitchIcon\">\n <i *ngIf=\"!nzTreeNode.isLoading\" nz-icon type=\"caret-down\" class=\"ant-tree-switcher-icon\"></i>\n <i *ngIf=\"nzTreeNode.isLoading\" nz-icon type=\"loading\" [spin]=\"true\" class=\"ant-tree-switcher-loading-icon\"></i>\n </ng-container>\n <ng-container *ngIf=\"nzShowLine\">\n <i *ngIf=\"isShowLineIcon\" nz-icon [type]=\"isSwitcherOpen ? 'minus-square' : 'plus-square'\" class=\"ant-tree-switcher-line-icon\"></i>\n <i *ngIf=\"!isShowLineIcon\" nz-icon type=\"file\" class=\"ant-tree-switcher-line-icon\"></i>\n </ng-container>\n </span>\n </ng-container>\n <ng-container *ngIf=\"nzCheckable\">\n <span\n class=\"ant-tree-checkbox\"\n [class.ant-tree-checkbox-checked]=\"nzTreeNode.isChecked\"\n [class.ant-tree-checkbox-indeterminate]=\"nzTreeNode.isHalfChecked\"\n [class.ant-tree-checkbox-disabled]=\"(nzTreeNode.isDisabled || nzTreeNode.isDisableCheckbox)\"\n (click)=\"_clickCheckBox($event)\">\n <span class=\"ant-tree-checkbox-inner\"></span>\n </span>\n </ng-container>\n <ng-container *ngIf=\"!nzTreeTemplate\">\n <span\n title=\"{{nzTreeNode.title}}\"\n [attr.draggable]=\"canDraggable\"\n [attr.aria-grabbed]=\"canDraggable\"\n [ngClass]=\"nzNodeContentClass\"\n [class.ant-tree-node-content-wrapper-open]=\"isSwitcherOpen\"\n [class.ant-tree-node-content-wrapper-close]=\"isSwitcherClose\"\n [class.ant-tree-node-selected]=\"nzTreeNode.isSelected\"\n [class.draggable]=\"canDraggable\">\n <span\n *ngIf=\"nzTreeNode.origin.icon\"\n [class.ant-tree-icon__open]=\"isSwitcherOpen\"\n [class.ant-tree-icon__close]=\"isSwitcherClose\"\n [class.ant-tree-icon_loading]=\"nzTreeNode.isLoading\"\n [ngClass]=\"nzNodeContentLoadingClass\">\n <span\n [ngClass]=\"nzNodeContentIconClass\">\n <i nz-icon *ngIf=\"nzIcon\" [type]=\"!oldAPIIcon && nzIcon\" [ngClass]=\"oldAPIIcon && nzIcon\"></i>\n </span>\n </span>\n <span class=\"ant-tree-title\">\n <ng-container *ngIf=\"nzTreeNode.isMatched\">\n <span>\n {{highlightKeys[0]}}<span class=\"font-highlight\">{{nzSearchValue}}</span>{{highlightKeys[1]}}\n </span>\n </ng-container>\n <ng-container *ngIf=\"!nzTreeNode.isMatched\">\n {{nzTreeNode.title}}\n </ng-container>\n </span>\n </span>\n </ng-container>\n <ng-template\n [ngTemplateOutlet]=\"nzTreeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: nzTreeNode }\">\n </ng-template>\n\n <!-- *ngIf=\"nzTreeNode.isExpanded\" \u0443\u0431\u0438\u0440\u0430\u0435\u043C \u0442\u043E\u0440\u043C\u043E\u0437\u0430 \u043F\u0440\u0438 \u0438\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043E\u043B\u044C\u0448\u0438\u0445 \u0434\u0435\u0440\u0435\u0432\u044C\u0435\u0432-->\n <ul\n role=\"group\"\n *ngIf=\"nzTreeNode.isExpanded\"\n [attr.data-expanded]=\"nzTreeNode.isExpanded\"\n [ngClass]=\"nzNodeChildrenClass\"\n [@nodeState]=\"nzTreeNode.isExpanded ? 'active' : 'inactive'\">\n <nz-tree-node\n *ngFor=\"let node of nzTreeNode.getChildren()\"\n [nzTreeNode]=\"node\"\n [nzShowLine]=\"nzShowLine\"\n [nzDraggable]=\"nzDraggable\"\n [nzCheckable]=\"nzCheckable\"\n [nzShowExpand]=\"nzShowExpand\"\n [nzAsyncData]=\"nzAsyncData\"\n [nzMultiple]=\"nzMultiple\"\n [nzExpandAll]=\"nzExpandAll\"\n [nzDefaultExpandAll]=\"nzDefaultExpandAll\"\n [nzSearchValue]=\"nzSearchValue\"\n [nzHideUnMatched]=\"nzHideUnMatched\"\n [nzBeforeDrop]=\"nzBeforeDrop\"\n [nzCheckStrictly]=\"nzCheckStrictly\"\n [nzTreeTemplate]=\"nzTreeTemplate\"\n (clickNode)=\"clickNode.emit($event)\"\n (dblClick)=\"dblClick.emit($event)\"\n (contextMenu)=\"contextMenu.emit($event)\"\n (clickExpand)=\"clickExpand.emit($event)\"\n (clickCheckBox)=\"clickCheckBox.emit($event)\"\n (nzDragStart)=\"nzDragStart.emit($event)\"\n (nzDragEnter)=\"nzDragEnter.emit($event)\"\n (nzDragOver)=\"nzDragOver.emit($event)\"\n (nzDragLeave)=\"nzDragLeave.emit($event)\"\n (nzDrop)=\"nzDrop.emit($event)\"\n (nzDragEnd)=\"nzDragEnd.emit($event)\">\n </nz-tree-node>\n </ul>\n</li>",
preserveWhitespaces: false,
animations: [
trigger('nodeState', [
state('inactive', style({
opacity: '0',
height: '0',
display: 'none'
})),
state('active', style({
opacity: '1',
height: '*'
})),
transition('inactive => active', animate('100ms ease-in')),
transition('active => inactive', animate('100ms ease-out'))
])
]
}] }
];
/** @nocollapse */
NzTreeNodeComponent.ctorParameters = () => [
{ type: NzTreeService },
{ type: NgZone },
{ type: Renderer2 },
{ type: ElementRef }
];
NzTreeNodeComponent.propDecorators = {
dragElement: [{ type: ViewChild, args: ['dragElement',] }],
nzShowLine: [{ type: Input }],
nzShowExpand: [{ type: Input }],
nzMultiple: [{ type: Input }],
nzCheckable: [{ type: Input }],
nzAsyncData: [{ type: Input }],
nzCheckStrictly: [{ type: Input }],
nzHideUnMatched: [{ type: Input }],
nzTreeTemplate: [{ type: Input }],
nzBeforeDrop: [{ type: Input }],
nzTreeNode: [{ type: Input }],
nzDraggable: [{ type: Input }],
nzDefaultExpandAll: [{ type: Input }],
nzExpandAll: [{ type: Input }],
nzSearchValue: [{ type: Input }],
clickNode: [{ type: Output }],
dblClick: [{ type: Output }],
contextMenu: [{ type: Output }],
clickCheckBox: [{ type: Output }],
clickExpand: [{ type: Output }],
nzDragStart: [{ type: Output }],
nzDragEnter: [{ type: Output }],
nzDragOver: [{ type: Output }],
nzDragLeave: [{ type: Output }],
nzDrop: [{ type: Output }],
nzDragEnd: [{ type: Output }],
nzClick: [{ type: HostListener, args: ['click', ['$event'],] }],
nzDblClick: [{ type: HostListener, args: ['dblclick', ['$event'],] }],
nzContextMenu: [{ type: HostListener, args: ['contextmenu', ['$event'],] }]
};
tslib_1.__decorate([
InputBoolean(),
tslib_1.__metadata("design:type", Boolean)
], NzTreeNodeComponent.prototype, "nzShowLine", void 0);
tslib_1.__decorate([
InputBoolean(),
tslib_1.__metadata("design:type", Boolean)
], NzTreeNodeComponent.prototype, "nzShowExpand", void 0);
tslib_1.__decorate([
InputBoolean(),
tslib_1.__metadata("design:type", Boolean)
], NzTreeNodeComponent.prototype, "nzMultiple", void 0);
tslib_1.__decorate([
InputBoolean(),
tslib_1.__metadata("design:type", Boolean)
], NzTreeNodeComponent.prototype, "nzCheckable", void 0);
tslib_1.__decorate([
InputBoolean(),
tslib_1.__metadata("design:type", Boolean)
], NzTreeNodeComponent.prototype, "nzAsyncData", void 0);
tslib_1.__decorate([
InputBoolean(),
tslib_1.__metadata("design:type", Boolean)
], NzTreeNodeComponent.prototype, "nzCheckStrictly", void 0);
tslib_1.__decorate([
InputBoolean(),
tslib_1.__metadata("design:type", Object)
], NzTreeNodeComponent.prototype, "nzHideUnMatched", void 0);
function NzTreeNodeComponent_tsickle_Closure_declarations() {
/** @type {?} */
NzTreeNodeComponent.prototype.dragElement;
/** @type {?} */
NzTreeNodeComponent.prototype.nzShowLine;
/** @type {?} */
NzTreeNodeComponent.prototype.nzShowExpand;
/** @type {?} */
NzTreeNodeComponent.prototype.nzMultiple;
/** @type {?} */
NzTreeNodeComponent.prototype.nzCheckable;
/** @type {?} */
NzTreeNodeComponent.prototype.nzAsyncData;
/** @type {?} */
NzTreeNodeComponent.prototype.nzCheckStrictly;
/** @type {?} */
NzTreeNodeComponent.prototype.nzHideUnMatched;
/** @type {?} */
NzTreeNodeComponent.prototype.nzTreeTemplate;
/** @type {?} */
NzTreeNodeComponent.prototype.nzBeforeDrop;
/** @type {?} */
NzTreeNodeComponent.prototype.clickNode;
/** @type {?} */
NzTreeNodeComponent.prototype.dblClick;
/** @type {?} */
NzTreeNodeComponent.prototype.contextMenu;
/** @type {?} */
NzTreeNodeComponent.prototype.clickCheckBox;
/** @type {?} */
NzTreeNodeComponent.prototype.clickExpand;
/** @type {?} */
NzTreeNodeComponent.prototype.nzDragStart;
/** @type {?} */
NzTreeNodeComponent.prototype.nzDragEnter;
/** @type {?} */
NzTreeNodeComponent.prototype.nzDragOver;
/** @type {?} */
NzTreeNodeComponent.prototype.nzDragLeave;
/** @type {?} */
NzTreeNodeComponent.prototype.nzDrop;
/** @type {?} */
NzTreeNodeComponent.prototype.nzDragEnd;
/** @type {?} */
NzTreeNodeComponent.prototype.prefixCls;
/** @type {?} */
NzTreeNodeComponent.prototype.highlightKeys;
/** @type {?} */
NzTreeNodeComponent.prototype.nzNodeClass;
/** @type {?} */
NzTreeNodeComponent.prototype.nzNodeSwitcherClass;
/** @type {?} */
NzTreeNodeComponent.prototype.nzNodeContentClass;
/** @type {?} */
NzTreeNodeComponent.prototype.nzNodeContentIconClass;
/** @type {?} */
NzTreeNodeComponent.prototype.nzNodeContentLoadingClass;
/** @type {?} */
NzTreeNodeComponent.prototype.nzNodeChildrenClass;
/**
* drag var
* @type {?}
*/
NzTreeNodeComponent.prototype.destory$;
/** @type {?} */
NzTreeNodeComponent.prototype.dragPos;
/** @type {?} */
NzTreeNodeComponent.prototype.dragPosClass;
/**
* default set
* @type {?}
*/
NzTreeNodeComponent.prototype._nzTreeNode;
/** @type {?} */
NzTreeNodeComponent.prototype._searchValue;
/** @type {?} */
NzTreeNodeComponent.prototype._nzExpandAll;
/** @type {?} */
NzTreeNodeComponent.prototype._nzDraggable;
/** @type {?} */
NzTreeNodeComponent.prototype.oldAPIIcon;
/** @type {?} */
NzTreeNodeComponent.prototype.nzTreeService;
/** @type {?} */
NzTreeNodeComponent.prototype.ngZone;
/** @type {?} */
NzTreeNodeComponent.prototype.renderer;
/** @type {?} */
NzTreeNodeComponent.prototype.elRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnotdHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3NvbGFyLW5nLXpvcnJvLWFudGQvIiwic291cmNlcyI6WyJ0cmVlL256LXRyZWUtbm9kZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFJTixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXVCbEQsTUFBTTs7Ozs7OztJQTZYSixZQUFvQixhQUE0QixFQUFVLE1BQWMsRUFBVSxRQUFtQixFQUFVLEtBQWlCO1FBQTVHLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFZOytCQXBYckYsS0FBSzs7eUJBa0ZPLElBQUksWUFBWSxFQUFFO3dCQUNuQixJQUFJLFlBQVksRUFBRTsyQkFDZixJQUFJLFlBQVksRUFBRTs2QkFDaEIsSUFB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aUJMLE1BQU07dUJBQ04sTUFBTTswQkFDTixNQUFNOzRCQUNOLE1BQU07MEJBQ04sTUFBTTswQkFDTixNQUFNOzBCQUNOLE1BQU07eUJBQ04sTUFBTTswQkFDTixNQUFNO3FCQUNOLE1BQU07d0JBQ04sTUFBTTtzQkE4Rk4sWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFFLFFBQVEsQ0FBRTt5QkFVbEMsWUFBWSxTQUFDLFVBQVUsRUFBRSxDQUFFLFFBQVEsQ0FBRTs0QkFVckMsWUFBWSxTQUFDLGFBQWEsRUFBRSxDQUFFLFFBQVEsQ0FBRTs7O0lBcE4vQixZQUFZLEVBQUU7Ozs7SUFDZCxZQUFZLEVBQUU7Ozs7SUFDZCxZQUFZLEVBQUU7Ozs7SUFDZCxZQUFZLEVBQUU7Ozs7SUFDZCxZQUFZLEVBQUU7Ozs7SUFDZCxZQUFZLEVBQUU7Ozs7SUFDZCxZQUFZLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2UsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uL2NvcmUvdXRpbC9jb252ZXJ0JztcbmltcG9ydCB7IE56Rm9ybWF0QmVmb3JlRHJvcEV2ZW50LCBOekZvcm1hdEVtaXRFdmVudCB9IGZyb20gJy4uL3RyZWUvaW50ZXJmYWNlJztcbmltcG9ydCB7IE56VHJlZU5vZGUgfSBmcm9tICcuL256LXRyZWUtbm9kZSc7XG5pbXBvcnQgeyBpc0NoZWNrRGlzYWJsZWQgfSBmcm9tICcuL256LXRyZWUtdXRpbCc7XG5pbXBvcnQgeyBOelRyZWVTZXJ2aWNlIH0gZnJvbSAnLi9uei10cmVlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3IgICAgICAgICAgIDogJ256LXRyZWUtbm9kZScsXG4gIHRlbXBsYXRlVXJsICAgICAgICA6ICcuL256LXRyZWUtbm9kZS5jb21wb25lbnQuaHRtbCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBhbmltYXRpb25zICAgICAgICAgOiBbXG4gICAgdHJpZ2dlcignbm9kZVN0YXRlJywgW1xuICAgICAgc3RhdGUoJ2luYWN0aXZlJywgc3R5bGUoe1xuICAgICAgICBvcGFjaXR5OiAnMCcsXG4gICAgICAgIGhlaWdodCA6ICcwJyxcbiAgICAgICAgZGlzcGxheTogJ25vbmUnXG4gICAgICB9KSksXG4gICAgICBzdGF0ZSgnYWN0aXZlJywgc3R5bGUoe1xuICAgICAgICBvcGFjaXR5OiAnMScsXG4gICAgICAgIGhlaWdodCA6ICcqJ1xuICAgICAgfSkpLFxuICAgICAgdHJhbnNpdGlvbignaW5hY3RpdmUgPT4gYWN0aXZlJywgYW5pbWF0ZSgnMTAwbXMgZWFzZS1pbicpKSxcbiAgICAgIHRyYW5zaXRpb24oJ2FjdGl2ZSA9PiBpbmFjdGl2ZScsIGFuaW1hdGUoJzEwMG1zIGVhc2Utb3V0JykpXG4gICAgXSlcbiAgXVxufSlcblxuZXhwb3J0IGNsYXNzIE56VHJlZU5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnZHJhZ0VsZW1lbnQnKSBkcmFnRWxlbWVudDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpTaG93TGluZTogYm9vbGVhbjtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56U2hvd0V4cGFuZDogYm9vbGVhbjtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56TXVsdGlwbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBuekNoZWNrYWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIG56QXN5bmNEYXRhOiBib29sZWFuO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpDaGVja1N0cmljdGx5OiBib29sZWFuO1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbnpIaWRlVW5NYXRjaGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIG56VHJlZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgQElucHV0KCkgbnpCZWZvcmVEcm9wOiAoY29uZmlybTogTnpGb3JtYXRCZWZvcmVEcm9wRXZlbnQpID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgQElucHV0KClcbiAgc2V0IG56VHJlZU5vZGUodmFsdWU6IE56VHJlZU5vZGUpIHtcbiAgICAvLyBhZGQgdG8gY2hlY2tlZCBsaXN0ICYgc2VsZWN0ZWQgbGlzdFxuICAgIGlmICh2YWx1ZS5pc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMubnpUcmVlU2VydmljZS5zZXRDaGVja2VkTm9kZUxpc3QodmFsdWUpO1xuICAgIH1cbiAgICAvLyBhZGQgc2VsZWN0IGxpc3RcbiAgICBpZiAodmFsdWUuaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5uelRyZWVTZXJ2aWNlLnNldFNlbGVjdGVkTm9kZUxpc3QodmFsdWUsIHRoaXMubnpNdWx0aXBsZSk7XG4gICAgfVxuICAgIGlmICghdmFsdWUuaXNMZWFmKSB7XG4gICAgICB0aGlzLm56VHJlZVNlcnZpY2Uuc2V0RXhwYW5kZWROb2RlTGlzdCh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX256VHJlZU5vZGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBuelRyZWVOb2RlKCk6IE56VHJlZU5vZGUge1xuICAgIHJldHVybiB0aGlzLl9uelRyZWVOb2RlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG56RHJhZ2dhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbnpEcmFnZ2FibGUgPSB2YWx1ZTtcbiAgICB0aGlzLmhhbmREcmFnRXZlbnQoKTtcbiAgfVxuXG4gIGdldCBuekRyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbnpEcmFnZ2FibGU7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlXG4gICAqIG56RXhwYW5kQWxsIGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBuekRlZmF1bHRFeHBhbmRBbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9uekV4cGFuZEFsbCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm56VHJlZU5vZGUgJiYgIXRoaXMubnpUcmVlTm9kZS5pc0xlYWYpIHtcbiAgICAgIHRoaXMubnpUcmVlTm9kZS5zZXRFeHBhbmRlZCh0cnVlKTtcbiAgICAgIHRoaXMubnpUcmVlU2VydmljZS5zZXRFeHBhbmRlZE5vZGVMaXN0KHRoaXMubnpUcmVlTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG56RGVmYXVsdEV4cGFuZEFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbnpFeHBhbmRBbGw7XG4gIH1cblxuICAvLyBkZWZhdWx0IHNldFxuICBASW5wdXQoKVxuICBzZXQgbnpFeHBhbmRBbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9uekV4cGFuZEFsbCA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm56VHJlZU5vZGUgJiYgIXRoaXMubnpUcmVlTm9kZS5pc0xlYWYpIHtcbiAgICAgIHRoaXMubnpUcmVlTm9kZS5zZXRFeHBhbmRlZCh0cnVlKTtcbiAgICAgIHRoaXMubnpUcmVlU2VydmljZS5zZXRFeHBhbmRlZE5vZGVMaXN0KHRoaXMubnpUcmVlTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG56RXhwYW5kQWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9uekV4cGFuZEFsbDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBuelNlYXJjaFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmhpZ2hsaWdodEtleXMgPSBbXTtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5uelRyZWVOb2RlLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIC8vIG1hdGNoIHRoZSBzZWFyY2ggdmFsdWVcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5uelRyZWVOb2RlLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0S2V5cy5wdXNoKHRoaXMubnpUcmVlTm9kZS50aXRsZS5zbGljZSgwLCBpbmRleCkpO1xuICAgICAgdGhpcy5oaWdobGlnaHRLZXlzLnB1c2godGhpcy5uelRyZWVOb2RlLnRpdGxlLnNsaWNlKGluZGV4ICsgdmFsdWUubGVuZ3RoLCB0aGlzLm56VHJlZU5vZGUudGl0bGUubGVuZ3RoKSk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgbnpTZWFyY2hWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hWYWx1ZTtcbiAgfVxuXG4gIC8vIE91dHB1dFxuICBAT3V0cHV0KCkgY2xpY2tOb2RlOiBFdmVudEVtaXR0ZXI8TnpGb3JtYXRFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZGJsQ2xpY2s6IEV2ZW50RW1pdHRlcjxOekZvcm1hdEVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjb250ZXh0TWVudTogRXZlbnRFbWl0dGVyPE56Rm9ybWF0RW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsaWNrQ2hlY2tCb3g6IEV2ZW50RW1pdHRlcjxOekZvcm1hdEVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbGlja0V4cGFuZDogRXZlbnRFbWl0dGVyPE56Rm9ybWF0RW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG56RHJhZ1N0YXJ0OiBFdmVudEVtaXR0ZXI8TnpGb3JtYXRFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbnpEcmFnRW50ZXI6IEV2ZW50RW1pdHRlcjxOekZvcm1hdEVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBuekRyYWdPdmVyOiBFdmVudEVtaXR0ZXI8TnpGb3JtYXRFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbnpEcmFnTGVhdmU6IEV2ZW50RW1pdHRlcjxOekZvcm1hdEVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBuekRyb3A6IEV2ZW50RW1pdHRlcjxOekZvcm1hdEVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBuekRyYWdFbmQ6IEV2ZW50RW1pdHRlcjxOekZvcm1hdEVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gZGVmYXVsdCB2YXJcbiAgcHJlZml4Q2xzID0gJ2FudC10cmVlJztcbiAgaGlnaGxpZ2h0S2V5cyA9IFtdO1xuICBuek5vZGVDbGFzcyA9IHt9O1xuICBuek5vZGVTd2l0Y2hlckNsYXNzID0ge307XG4gIG56Tm9kZUNvbnRlbnRDbGFzcyA9IHt9O1xuICBuek5vZGVDb250ZW50SWNvbkNsYXNzID0ge307XG4gIG56Tm9kZUNvbnRlbnRMb2FkaW5nQ2xhc3MgPSB7fTtcbiAgbnpOb2RlQ2hpbGRyZW5DbGFzcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBkcmFnIHZhclxuICAgKi9cbiAgZGVzdG9yeSQgPSBuZXcgU3ViamVjdCgpO1xuICBkcmFnUG9zID0gMjtcbiAgZHJhZ1Bvc0NsYXNzOiBvYmplY3QgPSB7XG4gICAgJzAnIDogJ2RyYWctb3ZlcicsXG4gICAgJzEnIDogJ2RyYWctb3Zlci1nYXAtYm90dG9tJyxcbiAgICAnLTEnOiAnZHJhZy1vdmVyLWdhcC10b3AnXG4gIH07XG5cbiAgLyoqXG4gICAqIGRlZmF1bHQgc2V0XG4gICAqL1xuICBfbnpUcmVlTm9kZTogTnpUcmVlTm9kZTtcbiAgX3NlYXJjaFZhbHVlID0gJyc7XG4gIF9uekV4cGFuZEFsbCA9IGZhbHNlO1xuICBfbnpEcmFnZ2FibGUgPSBmYWxzZTtcbiAgb2xkQVBJSWNvbiA9IHRydWU7XG5cbiAgZ2V0IG56SWNvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm56VHJlZU5vZGUgJiYgdGhpcy5uelRyZWVOb2RlLm9yaWdpbi5pY29uKSB7XG4gICAgICB0aGlzLm9sZEFQSUljb24gPSB0aGlzLm56VHJlZU5vZGUub3JpZ2luLmljb24uaW5kZXhPZignYW50aWNvbicpID4gLTE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm56VHJlZU5vZGUgJiYgdGhpcy5uelRyZWVOb2RlLm9yaWdpbi5pY29uO1xuICB9XG5cbiAgZ2V0IGNhbkRyYWdnYWJsZSgpOiBib29sZWFuIHwgbnVsbCB7XG4gICAgcmV0dXJuICh0aGlzLm56RHJhZ2dhYmxlICYmIHRoaXMubnpUcmVlTm9kZSAmJiAhdGhpcy5uelRyZWVOb2RlLmlzRGlzYWJsZWQpID8gdHJ1ZSA6IG51bGw7XG4gIH1cblxuICBnZXQgaXNTaG93TGluZUljb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLm56VHJlZU5vZGUuaXNMZWFmICYmIHRoaXMubnpTaG93TGluZTtcbiAgfVxuXG4gIGdldCBpc1Nob3dTd2l0Y2hJY29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5uelRyZWVOb2RlLmlzTGVhZiAmJiAhdGhpcy5uelNob3dMaW5lO1xuICB9XG5cbiAgZ2V0IGlzU3dpdGNoZXJPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5uelRyZWVOb2RlLmlzRXhwYW5kZWQgJiYgIXRoaXMubnpUcmVlTm9kZS5pc0xlYWYpO1xuICB9XG5cbiAgZ2V0IGlzU3dpdGNoZXJDbG9zZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKCF0aGlzLm56VHJlZU5vZGUuaXNFeHBhbmRlZCAmJiAhdGhpcy5uelRyZWVOb2RlLmlzTGVhZik7XG4gIH1cblxuICBnZXQgZGlzcGxheVN0eWxlKCk6IHN0cmluZyB7XG4gICAgLy8gVE9ET1xuICAgIHJldHVybiAodGhpcy5uelNlYXJjaFZhbHVlICYmIHRoaXMubnpIaWRlVW5NYXRjaGVkICYmICF0aGlzLm56VHJlZU5vZGUuaXNNYXRjaGVkICYmICF0aGlzLm56VHJlZU5vZGUuaXNFeHBhbmRlZCkgPyAnbm9uZScgOiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiByZXNldCBub2RlIGNsYXNzXG4gICAqL1xuICBzZXRDbGFzc01hcCgpOiB2b2lkIHtcbiAgICB0aGlzLm56Tm9kZUNsYXNzID0ge1xuICAgICAgWyBgJHt0aGlzLnByZWZpeENsc30tdHJlZW5vZGUtZGlzYWJsZWRgIF06IHRoaXMubnpUcmVlTm9kZS5pc0Rpc2FibGVkXG4gICAgfTtcbiAgICB0aGlzLm56Tm9kZVN3aXRjaGVyQ2xhc3MgPSB7XG4gICAgICBbIGAke3RoaXMucHJlZml4Q2xzfS1zd2l0Y2hlcmAgXSAgICAgOiB0cnVlLFxuICAgICAgWyBgJHt0aGlzLnByZWZpeENsc30tc3dpdGNoZXItbm9vcGAgXTogdGhpcy5uelRyZWVOb2RlLmlzTGVhZlxuICAgIH07XG4gICAgdGhpcy5uek5vZGVDb250ZW50Q2xhc3MgPSB7XG4gICAgICBbIGAke3RoaXMucHJlZml4Q2xzfS1ub2RlLWNvbnRlbnQtd3JhcHBlcmAgXTogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5uek5vZGVDb250ZW50SWNvbkNsYXNzID0ge1xuICAgICAgWyBgJHt0aGlzLnByZWZpeENsc30taWNvbkVsZWAgXSAgICAgICAgOiB0cnVlLFxuICAgICAgWyBgJHt0aGlzLnByZWZpeENsc30taWNvbl9fY3VzdG9taXplYCBdOiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLm56Tm9kZUNvbnRlbnRMb2FkaW5nQ2xhc3MgPSB7XG4gICAgICBbIGAke3RoaXMucHJlZml4Q2xzfS1pY29uRWxlYCBdOiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLm56Tm9kZUNoaWxkcmVuQ2xhc3MgPSB7XG4gICAgICBbIGAke3RoaXMucHJlZml4Q2xzfS1jaGlsZC10cmVlYCBdICAgICA6IHRydWUsXG4gICAgICBbIGAke3RoaXMucHJlZml4Q2xzfS1jaGlsZC10cmVlLW9wZW5gIF06IHRydWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGNsaWNrIG5vZGUgdG8gc2VsZWN0LCAyMDBtcyB0byBkYmwgY2xpY2tcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyAnJGV2ZW50JyBdKVxuICBuekNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5uelRyZWVOb2RlLmlzU2VsZWN0YWJsZSkge1xuICAgICAgdGhpcy5uelRyZWVTZXJ2aWNlLnNldE5vZGVBY3RpdmUodGhpcy5uelRyZWVOb2RlLCB0aGlzLm56TXVsdGlwbGUpO1xuICAgIH1cbiAgICB0aGlzLmNsaWNrTm9kZS5lbWl0KHRoaXMubnpUcmVlU2VydmljZS5mb3JtYXRFdmVudCgnY2xpY2snLCB0aGlzLm56VHJlZU5vZGUsIGV2ZW50KSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsgJyRldmVudCcgXSlcbiAgbnpEYmxDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kYmxDbGljay5lbWl0KHRoaXMubnpUcmVlU2VydmljZS5mb3JtYXRFdmVudCgnZGJsY2xpY2snLCB0aGlzLm56VHJlZU5vZGUsIGV2ZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsgJyRldmVudCcgXSlcbiAgbnpDb250ZXh0TWVudShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jb250ZXh0TWVudS5lbWl0KHRoaXMubnpUcmVlU2VydmljZS5mb3JtYXRFdmVudCgnY29udGV4dG1lbnUnLCB0aGlzLm56VHJlZU5vZGUsIGV2ZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogY29sbGFwc2Ugbm9kZVxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICovXG4gIF9jbGlja0V4cGFuZChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLm56VHJlZU5vZGUuaXNMb2FkaW5nICYmICF0aGlzLm56VHJlZU5vZGUuaXNMZWFmKSB7XG4gICAgICAvLyBzZXQgYXN5bmMgc3RhdGVcbiAgICAgIGlmICh0aGlzLm56QXN5bmNEYXRhICYmIHRoaXMubnpUcmVlTm9kZS5nZXRDaGlsZHJlbigpLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5uelRyZWVOb2RlLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgdGhpcy5uelRyZWVOb2RlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLm56VHJlZU5vZGUuc2V0RXhwYW5kZWQoIXRoaXMubnpUcmVlTm9kZS5pc0V4cGFuZGVkKTtcbiAgICAgIHRoaXMubnpUcmVlU2VydmljZS5zZXRFeHBhbmRlZE5vZGVMaXN0KHRoaXMubnpUcmVlTm9kZSk7XG4gICAgICB0aGlzLmNsaWNrRXhwYW5kLmVtaXQodGhpcy5uelRyZWVTZXJ2aWNlLmZvcm1hdEV2ZW50KCdleHBhbmQnLCB0aGlzLm56VHJlZU5vZGUsIGV2ZW50KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIG5vZGVcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBfY2xpY2tDaGVja0JveChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gcmV0dXJuIGlmIG5vZGUgaXMgZGlzYWJsZWRcbiAgICBpZiAoaXNDaGVja0Rpc2FibGVkKHRoaXMubnpUcmVlTm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5uelRyZWVOb2RlLnNldENoZWNrZWQoIXRoaXMubnpUcmVlTm9kZS5pc0NoZWNrZWQpO1xuICAgIHRoaXMubnpUcmVlU2VydmljZS5zZXRDaGVja2VkTm9kZUxpc3QodGhpcy5uelRyZWVOb2RlKTtcbiAgICBpZiAoIXRoaXMubnpDaGVja1N0cmljdGx5KSB7XG4gICAgICB0aGlzLm56VHJlZVNlcnZpY2UuY29uZHVjdCh0aGlzLm56VHJlZU5vZGUpO1xuICAgIH1cbiAgICB0aGlzLmNsaWNrQ2hlY2tCb3guZW1pdCh0aGlzLm56VHJlZVNlcnZpY2UuZm9ybWF0RXZlbnQoJ2NoZWNrJywgdGhpcy5uelRyZWVOb2RlLCBldmVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRyYWcgZXZlbnRcbiAgICogQHBhcmFtIGVcbiAgICovXG4gIGNsZWFyRHJhZ0NsYXNzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRyYWdDbGFzcyA9IFsgJ2RyYWctb3Zlci1nYXAtdG9wJywgJ2RyYWctb3Zlci1nYXAtYm90dG9tJywgJ2RyYWctb3ZlcicgXTtcbiAgICBkcmFnQ2xhc3MuZm9yRWFjaChlID0+IHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5kcmFnRWxlbWVudC5uYXRpdmVFbGVtZW50LCBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZURyYWdTdGFydChlOiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICAvLyBpZSB0aHJvdyBlcnJvclxuICAgICAgLy8gZmlyZWZveC1uZWVkLWl0XG4gICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgJycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgICB0aGlzLm56VHJlZVNlcnZpY2Uuc2V0U2VsZWN0ZWROb2RlKHRoaXMubnpUcmVlTm9kZSk7XG4gICAgdGhpcy5uelRyZWVOb2RlLnNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICB0aGlzLm56RHJhZ1N0YXJ0LmVtaXQodGhpcy5uelRyZWVTZXJ2aWNlLmZvcm1hdEV2ZW50KCdkcmFnc3RhcnQnLCBudWxsLCBlKSk7XG4gIH1cblxuICBoYW5kbGVEcmFnRW50ZXIoZTogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gcmVzZXQgcG9zaXRpb25cbiAgICB0aGlzLmRyYWdQb3MgPSAyO1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICBpZiAoKHRoaXMubnpUcmVlTm9kZSAhPT0gdGhpcy5uelRyZWVTZXJ2aWNlLmdldFNlbGVjdGVkTm9kZSgpKSAmJiAhdGhpcy5uelRyZWVOb2RlLmlzTGVhZikge1xuICAgICAgICB0aGlzLm56VHJlZU5vZGUuc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5uekRyYWdFbnRlci5lbWl0KHRoaXMubnpUcmVlU2VydmljZS5mb3JtYXRFdmVudCgnZHJhZ2VudGVyJywgdGhpcy5uelRyZWVOb2RlLCBlKSk7XG4gIH1cblxuICBoYW5kbGVEcmFnT3ZlcihlOiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBkcm9wUG9zaXRpb24gPSB0aGlzLm56VHJlZVNlcnZpY2UuY2FsY0Ryb3BQb3NpdGlvbihlKTtcbiAgICBpZiAodGhpcy5kcmFnUG9zICE9PSBkcm9wUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuY2xlYXJEcmFnQ2xhc3MoKTtcbiAgICAgIHRoaXMuZHJhZ1BvcyA9IGRyb3BQb3NpdGlvbjtcbiAgICAgIC8vIGxlYWYgbm9kZSB3aWxsIHBhc3NcbiAgICAgIGlmICghKHRoaXMuZHJhZ1BvcyA9PT0gMCAmJiB0aGlzLm56VHJlZU5vZGUuaXNMZWFmKSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZHJhZ0VsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5kcmFnUG9zQ2xhc3NbIHRoaXMuZHJhZ1BvcyBdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5uekRyYWdPdmVyLmVtaXQodGhpcy5uelRyZWVTZXJ2aWNlLmZvcm1hdEV2ZW50KCdkcmFnb3ZlcicsIHRoaXMubnpUcmVlTm9kZSwgZSkpO1xuICB9XG5cbiAgaGFuZGxlRHJhZ0xlYXZlKGU6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJEcmFnQ2xhc3MoKTtcbiAgICB9KTtcbiAgICB0aGlzLm56RHJhZ0xlYXZlLmVtaXQodGhpcy5uelRyZWVTZXJ2aWNlLmZvcm1hdEV2ZW50KCdkcmFnbGVhdmUnLCB0aGlzLm56VHJlZU5vZGUsIGUpKTtcbiAgfVxuXG4gIGhhbmRsZURyYWdEcm9wKGU6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFyRHJhZ0NsYXNzKCk7XG4gICAgICBpZiAodGhpcy5uelRyZWVTZXJ2aWNlLmdldFNlbGVjdGVkTm9kZSgpID09PSB0aGlzLm56VHJlZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRyYWdQb3MgPT09IDAgJiYgdGhpcy5uelRyZWVOb2RlLmlzTGVhZikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBwYXNzIGlmIG5vZGUgaXMgbGVhZk5vXG4gICAgICBpZiAodGhpcy5uekJlZm9yZURyb3ApIHtcbiAgICAgICAgdGhpcy5uekJlZm9yZURyb3Aoe1xuICAgICAgICAgIGRyYWdOb2RlOiB0aGlzLm56VHJlZVNlcnZpY2UuZ2V0U2VsZWN0ZWROb2RlKCksXG4gICAgICAgICAgbm9kZSAgICA6IHRoaXMubnpUcmVlTm9kZSxcbiAgICAgICAgICBwb3MgICAgIDogdGhpcy5kcmFnUG9zXG4gICAgICAgIH0pLnN1YnNjcmliZSgoY2FuRHJvcDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ecm9wKSB7XG4gICAgICAgICAgICB0aGlzLm56VHJlZVNlcnZpY2UuZHJvcEFuZEFwcGx5KHRoaXMubnpUcmVlTm9kZSwgdGhpcy5kcmFnUG9zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uekRyb3AuZW1pdCh0aGlzLm56VHJlZVNlcnZpY2UuZm9ybWF0RXZlbnQoJ2Ryb3AnLCB0aGlzLm56VHJlZU5vZGUsIGUpKTtcbiAgICAgICAgICB0aGlzLm56RHJhZ0VuZC5lbWl0KHRoaXMubnpUcmVlU2VydmljZS5mb3JtYXRFdmVudCgnZHJhZ2VuZCcsIHRoaXMubnpUcmVlTm9kZSwgZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5uelRyZWVOb2RlKSB7XG4gICAgICAgIHRoaXMubnpUcmVlU2VydmljZS5kcm9wQW5kQXBwbHkodGhpcy5uelRyZWVOb2RlLCB0aGlzLmRyYWdQb3MpO1xuICAgICAgICB0aGlzLm56RHJvcC5lbWl0KHRoaXMubnpUcmVlU2VydmljZS5mb3JtYXRFdmVudCgnZHJvcCcsIHRoaXMubnpUcmVlTm9kZSwgZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRHJhZ0VuZChlOiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAvLyBpZiB1c2VyIGRvIG5vdCBjdXN0b20gYmVmb3JlRHJvcFxuICAgICAgaWYgKCF0aGlzLm56QmVmb3JlRHJvcCkge1xuICAgICAgICB0aGlzLm56VHJlZVNlcnZpY2Uuc2V0U2VsZWN0ZWROb2RlKG51bGwpO1xuICAgICAgICB0aGlzLm56RHJhZ0VuZC5lbWl0KHRoaXMubnpUcmVlU2VydmljZS5mb3JtYXRFdmVudCgnZHJhZ2VuZCcsIHRoaXMubnpUcmVlTm9kZSwgZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOebkeWQrOaLluaLveS6i+S7tlxuICAgKi9cbiAgaGFuZERyYWdFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5uekRyYWdnYWJsZSkge1xuICAgICAgICB0aGlzLmRlc3RvcnkkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2RyYWdzdGFydCcpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdG9yeSQpKS5zdWJzY3JpYmUoKGU6IERyYWdFdmVudCkgPT4gdGhpcy5oYW5kbGVEcmFnU3RhcnQoZSkpO1xuICAgICAgICBmcm9tRXZlbnQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZHJhZ2VudGVyJykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0b3J5JCkpLnN1YnNjcmliZSgoZTogRHJhZ0V2ZW50KSA9PiB0aGlzLmhhbmRsZURyYWdFbnRlcihlKSk7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdkcmFnb3ZlcicpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdG9yeSQpKS5zdWJzY3JpYmUoKGU6IERyYWdFdmVudCkgPT4gdGhpcy5oYW5kbGVEcmFnT3ZlcihlKSk7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsICdkcmFnbGVhdmUnKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3RvcnkkKSkuc3Vic2NyaWJlKChlOiBEcmFnRXZlbnQpID0+IHRoaXMuaGFuZGxlRHJhZ0xlYXZlKGUpKTtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCwgJ2Ryb3AnKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3RvcnkkKSkuc3Vic2NyaWJlKChlOiBEcmFnRXZlbnQpID0+IHRoaXMuaGFuZGxlRHJhZ0Ryb3AoZSkpO1xuICAgICAgICBmcm9tRXZlbnQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCAnZHJhZ2VuZCcpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdG9yeSQpKS5zdWJzY3JpYmUoKGU6IERyYWdFdmVudCkgPT4gdGhpcy5oYW5kbGVEcmFnRW5kKGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVzdG9yeSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3RvcnkkLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG56VHJlZVNlcnZpY2U6IE56VHJlZVNlcnZpY2UsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZikge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbIHByb3BlcnR5TmFtZTogc3RyaW5nIF06IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0b3J5JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0b3J5JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=