com.phloxui
Version:
PhloxUI Ng2+ Framework
751 lines (750 loc) • 71.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Type, Output, EventEmitter } from '@angular/core';
import { TabModel } from './model/TabModel';
import { TAB_CHANGE_EVENT, TAB_ADD_EVENT, TAB_NEW_TAB_BTN_CLICK } from '../share/CustomEventType';
import { ArrayUtils } from '../share/utils/ArrayUtils';
import { Option } from '../decorator/Option.decorator';
import { I18N } from '../decorator/I18N.decorator';
import { AbstractI18NApplicable } from "../share/AbstractI18NApplicable";
import { EventUtils } from '../share/utils/EventUtils';
const /** @type {?} */ TYPE_NAME = "phx-tab-pane";
export class TabPane extends AbstractI18NApplicable {
/**
* @param {?} elementRef
*/
constructor(elementRef) {
super();
this.TAB_GROUP_SELECTOR = ".tab-group";
this.TAB_LEFT_MOVING_CLASS = "insert-left";
this.TAB_RIGHT_MOVING_CLASS = "insert-right";
this.tabModels = [];
this.tabHeaders = [];
this.tabBodies = [];
this.newTabClickedEventHandler = new EventEmitter();
this.tabChangedEventHandler = new EventEmitter();
this.tabAddedEventHandler = new EventEmitter();
this.tabMovedEventHandler = new EventEmitter();
this.changeEvent = new EventEmitter();
this.showAddTabBtn = true;
// this.showBtnGroup = true;
this.tabDragging = false;
this.elementRef = elementRef;
this.tabComponentHandler = (data) => {
if (this != null && typeof this !== 'undefined') {
this.addTabBody(data.instance);
// emit event
let /** @type {?} */ lastIndex = this.tabModels.length - 1;
let /** @type {?} */ d = {
model: this.tabModels[lastIndex],
tabHeader: this.tabHeaders[lastIndex],
tabBody: this.tabBodies[lastIndex]
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(TAB_ADD_EVENT, this, d, null);
this.tabAddedEventHandler.emit(ev);
}
};
}
/**
* @return {?}
*/
ngOnInit() {
this.currentIndex = -1;
// mousemoving on body
$("body").mousemove((event) => {
if (event === null || typeof event === 'undefined') {
return;
}
let /** @type {?} */ clientX = event.pageX;
if (this.draggingTab === null || typeof this.draggingTab === 'undefined') {
return;
}
this.tabDragging = true;
let /** @type {?} */ adding = false;
let /** @type {?} */ tabSelector = this.TAB_GROUP_SELECTOR + " > .tab-label";
$(this.elementRef.nativeElement).find(tabSelector).each((index, value) => {
let /** @type {?} */ width = $(value).width();
let /** @type {?} */ offset = $(value).offset();
let /** @type {?} */ left = 0;
if (typeof offset !== 'undefined') {
left = offset.left;
}
let /** @type {?} */ end = left + width;
let /** @type {?} */ half = left + (width / 2);
if (clientX >= left && clientX < half) {
if (!adding) {
$(value).addClass(this.TAB_LEFT_MOVING_CLASS);
$(value).removeClass(this.TAB_RIGHT_MOVING_CLASS);
adding = true;
}
}
else if (clientX >= half && clientX < end) {
if (!adding) {
$(value).addClass(this.TAB_RIGHT_MOVING_CLASS);
$(value).removeClass(this.TAB_LEFT_MOVING_CLASS);
adding = true;
}
}
else {
$(value).removeClass(this.TAB_LEFT_MOVING_CLASS);
$(value).removeClass(this.TAB_RIGHT_MOVING_CLASS);
}
});
});
// onmouseup on body
$("body").mouseup(() => {
if (!this.tabDragging) {
this.draggingTab = null;
return;
}
// reset style & get final Index
let /** @type {?} */ fromIndex = -1;
if (this.draggingTab !== null && typeof this.draggingTab !== 'undefined') {
fromIndex = this.tabModels.indexOf(this.draggingTab);
}
let /** @type {?} */ toIndex = -1;
let /** @type {?} */ tabSelector = this.TAB_GROUP_SELECTOR + " > .tab-label";
$(this.elementRef.nativeElement).find(tabSelector).each((index, value) => {
if ($(value).hasClass(this.TAB_LEFT_MOVING_CLASS)) {
if (fromIndex > index) {
toIndex = index;
}
else {
toIndex = index - 1;
}
$(value).removeClass(this.TAB_LEFT_MOVING_CLASS);
}
if ($(value).hasClass(this.TAB_RIGHT_MOVING_CLASS)) {
if (fromIndex > index) {
toIndex = index + 1;
}
else {
toIndex = index;
}
$(value).removeClass(this.TAB_RIGHT_MOVING_CLASS);
}
});
// reRender tab if need change ordering
if (toIndex > -1) {
this.moveTabModel(fromIndex, toIndex);
if (fromIndex !== toIndex) {
this.showTabAtIndex(toIndex);
}
}
let /** @type {?} */ data = {
fromIndex: fromIndex,
toIndex: toIndex
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(TAB_ADD_EVENT, this, data, null);
this.tabMovedEventHandler.emit(ev);
this.draggingTab = null;
this.tabDragging = false;
});
}
/**
* @param {?} body
* @return {?}
*/
getTabBodyIndex(body) {
if (body !== null && typeof body !== 'undefined') {
let /** @type {?} */ index = 0;
for (let /** @type {?} */ item of this.tabBodies) {
if (item === body) {
return index;
}
index += 1;
}
}
return -1;
}
/**
* @param {?} body
* @return {?}
*/
addTabBody(body) {
if (body === null) {
return;
}
this.tabBodies.push(body);
let /** @type {?} */ lastIndex = this.tabBodies.length - 1;
if (lastIndex > -1 && lastIndex < this.tabHeaders.length) {
let /** @type {?} */ header = this.tabHeaders[lastIndex];
header.addDataChild(body);
}
if (typeof body.getChange === 'function') {
body.getChangedEvent().subscribe((event) => {
if (event.detail !== null && typeof event.detail !== 'undefined') {
if (event.detail.data !== null && typeof event.detail.data !== 'undefined') {
if (event.detail.data.bubbleStack !== null && typeof event.detail.data.bubbleStack !== 'undefined') {
event.detail.data.bubbleStack.push(this);
}
else {
event.detail.data.bubbleStack = [this];
}
}
}
event.tabIndex = this.getTabBodyIndex(body); //! bug fix here
this.changeEvent.emit(event);
});
}
}
/**
* @param {?} body
* @return {?}
*/
removeTabBody(body) {
if (body === null) {
return;
}
let /** @type {?} */ toRemoveIdx = this.tabBodies.indexOf(body);
if (toRemoveIdx > -1 && toRemoveIdx < this.tabHeaders.length) {
let /** @type {?} */ header = this.tabHeaders[toRemoveIdx];
header.removeDataChild(body);
}
if (toRemoveIdx > -1) {
this.tabBodies.splice(toRemoveIdx, 1);
}
}
/**
* @param {?} index
* @return {?}
*/
setTabSelected(index) {
if (index === null || index <= -1 || typeof index === 'undefined') {
return;
}
this.tabHeaders.forEach((item, idx) => {
if (idx === index) {
item.setSelected(true);
}
else {
item.setSelected(false);
}
});
}
/**
* @param {?} fromIndex
* @param {?} toIndex
* @return {?}
*/
moveTabModel(fromIndex, toIndex) {
if (toIndex === null || typeof toIndex === 'undefined' || toIndex <= -1) {
return;
}
if (fromIndex === null || typeof fromIndex === 'undefined' || fromIndex <= -1) {
return;
}
if (fromIndex === toIndex) {
return;
}
ArrayUtils.move(this.tabHeaders, fromIndex, toIndex);
ArrayUtils.move(this.tabBodies, fromIndex, toIndex);
ArrayUtils.move(this.tabModels, fromIndex, toIndex);
}
/**
* mouse dragging *
* @param {?} $event
* @param {?} tab
* @return {?}
*/
onMouseDownTab($event, tab) {
if (this.draggingTab !== null && typeof this.draggingTab !== 'undefined') {
this.draggingTab = null;
this.tabMouseDifPositionY = null;
}
else {
this.draggingTab = tab;
}
}
/**
* @param {?} model
* @return {?}
*/
getTabModelIndex(model) {
if (this.tabModels !== null && typeof this.tabModels !== 'undefined') {
let /** @type {?} */ index = 0;
for (let /** @type {?} */ innerModel of this.tabModels) {
if (innerModel === model) {
return index;
}
index += 1;
}
}
return -1;
}
/**
* @return {?}
*/
getTabsCount() {
return this.tabModels.length;
}
/**
* @return {?}
*/
addDefaultTab() {
this.addTab(new TabModel('New tab', null, this.tabComponentType, this.tabComponentModel, null));
if (this.currentIndex <= -1) {
this.currentIndex = 0;
this.setTabSelected(this.currentIndex);
}
}
/**
* @param {?} tabModel
* @return {?}
*/
addTab(tabModel) {
if (tabModel == null || typeof tabModel === 'undefined') {
return;
}
this.tabModels.push(tabModel);
if (this.currentIndex <= -1) {
this.currentIndex = 0;
this.setTabSelected(this.currentIndex);
}
}
/**
* @param {?} $event
* @return {?}
*/
onNewTabClicked($event) {
if (this.tabComponentType !== null && (typeof this.tabComponentType !== 'undefined')) {
this.addDefaultTab();
}
this.currentIndex = this.tabModels.length - 1;
if (this.currentIndex <= -1) {
this.currentIndex = 0;
}
this.setTabSelected(this.currentIndex);
let /** @type {?} */ data = {
model: this.tabModels[this.currentIndex],
tabHeader: this.tabHeaders[this.currentIndex],
tabBody: this.tabBodies[this.currentIndex]
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(TAB_NEW_TAB_BTN_CLICK, this, data, $event);
this.newTabClickedEventHandler.emit(ev);
}
/**
* @param {?} index
* @return {?}
*/
showTabAtIndex(index) {
if (index === null || typeof index === 'undefined') {
return;
}
this.currentIndex = index;
this.setTabSelected(this.currentIndex);
let /** @type {?} */ data = {
index: index
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(TAB_CHANGE_EVENT, this, data, null);
this.tabChangedEventHandler.emit(ev);
}
/**
* @param {?} index
* @return {?}
*/
isTabSelected(index) {
if (index === null || typeof index === 'undefined') {
return false;
}
if (this.currentIndex !== null && this.currentIndex > -1) {
if (this.currentIndex === index) {
return true;
}
}
return false;
}
/**
* @param {?} tab
* @return {?}
*/
addTabHeader(tab) {
if (tab === null) {
return;
}
this.tabHeaders.push(tab);
}
/**
* @param {?} tab
* @return {?}
*/
removeTabHeader(tab) {
if (tab === null) {
return;
}
let /** @type {?} */ toRemoveIdx = -1;
this.tabHeaders.forEach((item, index) => {
if (item === tab) {
toRemoveIdx = index;
}
});
if (toRemoveIdx >= 0) {
this.tabHeaders.splice(toRemoveIdx, 1);
}
}
/**
* @param {?} index
* @return {?}
*/
closeTabAtIndex(index) {
if (index === null || index <= -1) {
return;
}
let /** @type {?} */ currentTabSize = this.tabModels.length;
if (index < currentTabSize) {
let /** @type {?} */ nextIndex = this.currentIndex;
if (nextIndex === index) {
// this tab will close so change index
if (nextIndex === currentTabSize - 1) {
nextIndex = nextIndex - 1;
}
}
else {
// close none current selected tab
if (index < this.currentIndex) {
nextIndex = this.currentIndex - 1;
}
}
// close and selected new index
if (index < this.tabModels.length) {
this.tabModels.splice(index, 1);
}
if (index < this.tabHeaders.length) {
this.tabHeaders.splice(index, 1);
}
if (index < this.tabBodies.length) {
this.tabBodies.splice(index, 1);
}
if (nextIndex !== this.currentIndex) {
this.showTabAtIndex(nextIndex);
}
}
}
/**
* @param {?} index
* @param {?} data
* @return {?}
*/
setTabData(index, data) {
if (index < this.tabHeaders.length) {
this.tabHeaders[index].setData(data);
}
if (index < this.tabBodies.length) {
if (typeof this.tabBodies[index].setData === 'function') {
this.tabBodies[index].setData(data);
}
}
}
/**
* @param {?} index
* @return {?}
*/
saveTabData(index) {
if (index < this.tabHeaders.length) {
this.tabHeaders[index].saveData();
}
if (index < this.tabBodies.length) {
if (typeof this.tabBodies[index].setData === 'function') {
this.tabBodies[index].saveData();
}
}
}
/**
* @return {?}
*/
getCurrentTabIndex() {
return this.currentIndex;
}
/**
* @return {?}
*/
getTabModels() {
return this.tabModels;
}
/**
* @return {?}
*/
getTabBodies() {
return this.tabBodies;
}
/**
* @param {?} index
* @return {?}
*/
getTabBody(index) {
if (index === null || typeof index !== 'number' || index < 0) {
return null;
}
if (this.tabBodies !== null && typeof this.tabBodies !== 'undefined') {
if (index < this.tabBodies.length) {
return this.tabBodies[index];
}
}
return null;
}
/**
* @return {?}
*/
getTabHeaders() {
return this.tabHeaders;
}
/**
* @param {?} index
* @return {?}
*/
getTabHeader(index) {
if (index === null || typeof index !== 'number' || index < 0) {
return null;
}
if (this.tabHeaders !== null && typeof this.tabHeaders !== 'undefined') {
if (index < this.tabHeaders.length) {
return this.tabHeaders[index];
}
}
return null;
}
/**
* @param {?} tab
* @return {?}
*/
getTabHeaderIndex(tab) {
if (tab !== null && typeof tab !== 'undefined') {
if (this.tabHeaders !== null && typeof this.tabHeaders !== 'undefined') {
return this.tabHeaders.indexOf(tab);
}
}
return -1;
}
/**
* @return {?}
*/
getMenuModelFactory() {
return this.menuFactory;
}
/**
* @param {?} menuFactory
* @return {?}
*/
setMenuModelFactory(menuFactory) {
this.menuFactory = menuFactory;
}
/**
* @return {?}
*/
getChangeEvent() {
return this.changeEvent;
}
/**
* @param {?} index
* @return {?}
*/
isTabDirty(index) {
if (index === null || typeof index === 'undefined') {
return false;
}
if (index < 0) {
return false;
}
if (index < this.tabHeaders.length) {
let /** @type {?} */ tabHeader = this.tabHeaders[index];
if (typeof tabHeader.isDataDirty === 'function') {
return tabHeader.isDataDirty();
}
}
return false;
}
/**
* @return {?}
*/
getMenuFactory() {
return this.menuFactory;
}
/**
* @return {?}
*/
isShowMoreMenu() {
return this.showMoreMenu;
}
/**
* @return {?}
*/
getTabComponentHandler() {
return this.tabComponentHandler;
}
/**
* @return {?}
*/
getTabGroupPaddingRight() {
// if (!this.showBtnGroup) {
// return "0";
// }
let /** @type {?} */ btnGroupWidth = $(this.elementRef.nativeElement).find(".button-group").css("width");
return btnGroupWidth;
}
/**
* @return {?}
*/
getTabGroupPaddingLeft() {
if (!this.showAddTabBtn) {
return "0";
}
let /** @type {?} */ btnGroupWidth = $(this.elementRef.nativeElement).find(".adding-group").css("width");
return btnGroupWidth;
}
/**
* @return {?}
*/
isShowAddTabBtn() {
return this.showAddTabBtn;
}
}
TabPane.TYPE_NAME = TYPE_NAME;
TabPane.TAB_CHANGE_EVENT = TAB_CHANGE_EVENT;
TabPane.TAB_ADDED_EVENT = TAB_ADD_EVENT;
TabPane.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<div class="phx-tab-pane">
<div class="header">
<div class="tab-group-wrapper" [style.padding-right]="getTabGroupPaddingRight()" [style.padding-left]="getTabGroupPaddingLeft()">
<div class="tab-group">
<div *ngFor="let item of getTabModels(); let j = index" class="tab-label no-select" [class.active]="isTabSelected(j)" (click)="showTabAtIndex(j)"
(mousedown)="onMouseDownTab($event, item)">
<phx-tab [model]="item" [tabPane]="this" [menuFactory]="getMenuFactory()" [showMoreMenu]="isShowMoreMenu()"></phx-tab>
</div>
</div>
</div>
<div class="adding-group" *ngIf="isShowAddTabBtn()">
<div class="tab-add-button" (click)="onNewTabClicked($event)"></div>
</div>
<!-- <div class="button-group" *ngIf="showBtnGroup"> BTN GROUP </div> -->
</div>
<div class="body">
<div *ngIf="getTabModels() === null || getTabModels().length <= 0" class="no-tab-page">
<div>There is no document.</div>
<div><div class="phlox-button" (click)="onNewTabClicked($event)">CREATE_TAB</div></div>
</div>
<phx-component-wrapper *ngFor="let item of getTabModels(); let i = index" [type]="item.bodyComponent" [model]="item.bodyComponentModel" [class.active]="isTabSelected(i)" [handler]="getTabComponentHandler()"
[data]="item.data" [options]="item.options" [i18n]="item.i18n"></phx-component-wrapper>
</div>
</div>
`
},] },
];
/** @nocollapse */
TabPane.ctorParameters = () => [
{ type: ElementRef, },
];
TabPane.propDecorators = {
"tabComponentType": [{ type: Input },],
"tabComponentModel": [{ type: Input },],
"menuFactory": [{ type: Input },],
"showMoreMenu": [{ type: Input },],
"showAddTabBtn": [{ type: Input },],
"newTabClickedEventHandler": [{ type: Output },],
"tabChangedEventHandler": [{ type: Output },],
"tabAddedEventHandler": [{ type: Output },],
"tabMovedEventHandler": [{ type: Output },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Type)
], TabPane.prototype, "tabComponentType", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], TabPane.prototype, "tabComponentModel", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], TabPane.prototype, "menuFactory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TabPane.prototype, "showMoreMenu", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], TabPane.prototype, "showAddTabBtn", void 0);
tslib_1.__decorate([
Option('models'),
I18N('models'),
tslib_1.__metadata("design:type", Array)
], TabPane.prototype, "tabModels", void 0);
tslib_1.__decorate([
Option('tabs'),
I18N('tabs'),
tslib_1.__metadata("design:type", Array)
], TabPane.prototype, "tabHeaders", void 0);
tslib_1.__decorate([
Option('tabInstances'),
I18N('tabInstances'),
tslib_1.__metadata("design:type", Array)
], TabPane.prototype, "tabBodies", void 0);
function TabPane_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TabPane.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TabPane.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TabPane.propDecorators;
/** @type {?} */
TabPane.TYPE_NAME;
/** @type {?} */
TabPane.TAB_CHANGE_EVENT;
/** @type {?} */
TabPane.TAB_ADDED_EVENT;
/** @type {?} */
TabPane.prototype.TAB_GROUP_SELECTOR;
/** @type {?} */
TabPane.prototype.TAB_LEFT_MOVING_CLASS;
/** @type {?} */
TabPane.prototype.TAB_RIGHT_MOVING_CLASS;
/** @type {?} */
TabPane.prototype.tabComponentType;
/** @type {?} */
TabPane.prototype.tabComponentModel;
/** @type {?} */
TabPane.prototype.menuFactory;
/** @type {?} */
TabPane.prototype.showMoreMenu;
/** @type {?} */
TabPane.prototype.showAddTabBtn;
/** @type {?} */
TabPane.prototype.newTabClickedEventHandler;
/** @type {?} */
TabPane.prototype.tabChangedEventHandler;
/** @type {?} */
TabPane.prototype.tabAddedEventHandler;
/** @type {?} */
TabPane.prototype.tabMovedEventHandler;
/** @type {?} */
TabPane.prototype.tabModels;
/** @type {?} */
TabPane.prototype.tabHeaders;
/** @type {?} */
TabPane.prototype.tabBodies;
/** @type {?} */
TabPane.prototype.currentIndex;
/** @type {?} */
TabPane.prototype.tabComponentHandler;
/** @type {?} */
TabPane.prototype.changeEvent;
/** @type {?} */
TabPane.prototype.elementRef;
/** @type {?} */
TabPane.prototype.tabDragging;
/** @type {?} */
TabPane.prototype.draggingTab;
/** @type {?} */
TabPane.prototype.tabMouseDifPositionY;
}
export { Tab } from './Tab.component';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFiUGFuZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvVGFiUGFuZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQWtCLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSXZELHVCQUFNLFNBQVMsR0FBVyxjQUFjLENBQUM7QUErQnpDLE1BQU0sY0FBZSxTQUFRLHNCQUFzQjs7OztJQXNEakQsWUFBWSxVQUFzQjtRQUNoQyxLQUFLLEVBQUUsQ0FBQztrQ0FoRDJCLFlBQVk7cUNBQ1QsYUFBYTtzQ0FDWixjQUFjO1FBK0NyRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxZ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Q1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixRQUFRLEVBQUUsU0FBUztnQkFDbkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3Qlg7YUFDQTs7OztZQWpEMkIsVUFBVTs7O2lDQThEbkMsS0FBSztrQ0FHTCxLQUFLOzRCQUdMLEtBQUs7NkJBR0wsS0FBSzs4QkFHTCxLQUFLOzBDQUtMLE1BQU07dUNBRU4sTUFBTTtxQ0FFTixNQUFNO3FDQUVOLE1BQU07OztJQXhCTixNQUFNLEVBQUU7c0NBRWlCLElBQUk7OztJQUM3QixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFjUixNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7SUFFZCxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7OztJQUVaLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZoQnZCLG9CQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBUeXBlLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFiTW9kZWwgfSBmcm9tICcuL21vZGVsL1RhYk1vZGVsJztcbmltcG9ydCB7IE1lbnVJdGVtTW9kZWwgfSBmcm9tICcuL21vZGVsL01lbnVJdGVtTW9kZWwnO1xuaW1wb3J0IHsgTWVudU1vZGVsIH0gZnJvbSAnLi9tb2RlbC9NZW51TW9kZWwnO1xuaW1wb3J0IHsgRGVmYXVsdE1lbnVJdGVtIH0gZnJvbSAnLi9EZWZhdWx0TWVudUl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAnLi9Db250ZXh0TWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmYXVsdE1lbnUgfSBmcm9tICcuL0RlZmF1bHRNZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJTWVudU1vZGVsRmFjdG9yeSB9IGZyb20gJy4vSU1lbnVNb2RlbEZhY3RvcnknO1xuaW1wb3J0IHsgVGFiIH0gZnJvbSAnLi9UYWIuY29tcG9uZW50JztcbmltcG9ydCB7IElDaGFuZ2VhYmxlIH0gZnJvbSAnLi9JQ2hhbmdlYWJsZSc7XG5pbXBvcnQgeyBUQUJfQ0hBTkdFX0VWRU5ULCBUQUJfQUREX0VWRU5ULCBUQUJfTU9WRV9FVkVOVCwgVEFCX05FV19UQUJfQlROX0NMSUNLIH0gZnJvbSAnLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcbmltcG9ydCB7IEFycmF5VXRpbHMgfSBmcm9tICcuLi9zaGFyZS91dGlscy9BcnJheVV0aWxzJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuLi9kZWNvcmF0b3IvSTE4Ti5kZWNvcmF0b3InO1xuaW1wb3J0IHsgQWJzdHJhY3RJMThOQXBwbGljYWJsZSB9IGZyb20gXCIuLi9zaGFyZS9BYnN0cmFjdEkxOE5BcHBsaWNhYmxlXCI7XG5pbXBvcnQgeyBFdmVudFV0aWxzIH0gZnJvbSAnLi4vc2hhcmUvdXRpbHMvRXZlbnRVdGlscyc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC10YWItcGFuZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LXRhYi1wYW5lXCI+XG5cdDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cblx0XHQ8ZGl2IGNsYXNzPVwidGFiLWdyb3VwLXdyYXBwZXJcIiBbc3R5bGUucGFkZGluZy1yaWdodF09XCJnZXRUYWJHcm91cFBhZGRpbmdSaWdodCgpXCIgW3N0eWxlLnBhZGRpbmctbGVmdF09XCJnZXRUYWJHcm91cFBhZGRpbmdMZWZ0KClcIj5cblx0XHRcdCA8ZGl2IGNsYXNzPVwidGFiLWdyb3VwXCI+XG5cdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0VGFiTW9kZWxzKCk7IGxldCBqID0gaW5kZXhcIiBjbGFzcz1cInRhYi1sYWJlbCBuby1zZWxlY3RcIiBbY2xhc3MuYWN0aXZlXT1cImlzVGFiU2VsZWN0ZWQoailcIiAoY2xpY2spPVwic2hvd1RhYkF0SW5kZXgoailcIlxuXHRcdFx0XHRcdFx0XHQobW91c2Vkb3duKT1cIm9uTW91c2VEb3duVGFiKCRldmVudCwgaXRlbSlcIj5cblx0XHRcdFx0XHQ8cGh4LXRhYiBbbW9kZWxdPVwiaXRlbVwiIFt0YWJQYW5lXT1cInRoaXNcIiBbbWVudUZhY3RvcnldPVwiZ2V0TWVudUZhY3RvcnkoKVwiIFtzaG93TW9yZU1lbnVdPVwiaXNTaG93TW9yZU1lbnUoKVwiPjwvcGh4LXRhYj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiYWRkaW5nLWdyb3VwXCIgKm5nSWY9XCJpc1Nob3dBZGRUYWJCdG4oKVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cInRhYi1hZGQtYnV0dG9uXCIgKGNsaWNrKT1cIm9uTmV3VGFiQ2xpY2tlZCgkZXZlbnQpXCI+PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PCEtLSA8ZGl2IGNsYXNzPVwiYnV0dG9uLWdyb3VwXCIgKm5nSWY9XCJzaG93QnRuR3JvdXBcIj4gQlROIEdST1VQIDwvZGl2PiAtLT5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJib2R5XCI+XG5cdFx0PGRpdiAqbmdJZj1cImdldFRhYk1vZGVscygpID09PSBudWxsIHx8IGdldFRhYk1vZGVscygpLmxlbmd0aCA8PSAwXCIgY2xhc3M9XCJuby10YWItcGFnZVwiPlxuXHRcdFx0PGRpdj5UaGVyZSBpcyBubyBkb2N1bWVudC48L2Rpdj5cblx0XHRcdDxkaXY+PGRpdiBjbGFzcz1cInBobG94LWJ1dHRvblwiIChjbGljayk9XCJvbk5ld1RhYkNsaWNrZWQoJGV2ZW50KVwiPkNSRUFURV9UQUI8L2Rpdj48L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldFRhYk1vZGVscygpOyBsZXQgaSA9IGluZGV4XCIgW3R5cGVdPVwiaXRlbS5ib2R5Q29tcG9uZW50XCIgW21vZGVsXT1cIml0ZW0uYm9keUNvbXBvbmVudE1vZGVsXCIgW2NsYXNzLmFjdGl2ZV09XCJpc1RhYlNlbGVjdGVkKGkpXCIgW2hhbmRsZXJdPVwiZ2V0VGFiQ29tcG9uZW50SGFuZGxlcigpXCJcblx0XHRbZGF0YV09XCJpdGVtLmRhdGFcIiBbb3B0aW9uc109XCJpdGVtLm9wdGlvbnNcIiBbaTE4bl09XCJpdGVtLmkxOG5cIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cblx0PC9kaXY+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQg