UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

751 lines (750 loc) 68 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { AbstractHasData } from '../AbstractHasData'; import { NeedFocusService } from '../../service/NeedFocusService.service'; import { Option } from '../../decorator/Option.decorator'; import { ComponentSlidePaneModel } from '../model/models'; import { EventUtils } from '../../share/utils/EventUtils'; import { BEFORE_SHOW_EVENT, SHOW_EVENT, HIDE_EVENT, BEFORE_HIDE_EVENT } from '../../share/CustomEventType'; import { ValidationStatus } from '../validate/ValidationStatus'; const /** @type {?} */ HIDE_ON_CLICK_DELAY = 100; const /** @type {?} */ TYPE_NAME = "phx-component-slidepane"; const /** @type {?} */ LEFT = 'left'; const /** @type {?} */ RIGHT = 'right'; const /** @type {?} */ TOP = 'top'; const /** @type {?} */ BOTTOM = 'bottom'; export class ComponentSlidePane extends AbstractHasData { /** * @param {?} elementRef * @param {?} needFocusService */ constructor(elementRef, needFocusService) { super(elementRef); this.needFocusService = needFocusService; this.elementRef = elementRef; this._show = false; this.showEvent = new EventEmitter(); this.beforeShowEvent = new EventEmitter(); this.hideEvent = new EventEmitter(); this.beforeHideEvent = new EventEmitter(); this.focusEvent = new EventEmitter(); this.beforeFocusEvent = new EventEmitter(); this.lostFocusEvent = new EventEmitter(); this.beforeLostFocusEvent = new EventEmitter(); this._compClicked = false; // when wrapper finished render this._componentHandler = (result) => { let /** @type {?} */ comInstance = null; if (result !== null && typeof result !== 'undefined') { comInstance = result.instance; } if (this.data !== null && typeof this.data !== 'undefined' && comInstance !== null) { if (typeof comInstance.setData === 'function') { comInstance.setData(this.data); } } if (this.componentHandler !== null && this.componentHandler !== undefined) { this.componentHandler.call(this, result); } this.compoWrapInstance = comInstance; }; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); this.comSlidepane = $(this.elementRef.nativeElement).find(".component-slidepane"); if (this.position === null || typeof this.position === 'undefined') { this.position = LEFT; } if (this.autoFocus === null || this.autoFocus === undefined || typeof this.autoFocus !== 'boolean') { this.autoFocus = true; } if (this.width === null || this.width === undefined || typeof this.width !== 'string') { this.width = undefined; } if (this.height === null || this.height === undefined || typeof this.height !== 'string') { this.height = undefined; } if (this.model.slidePaneWidth !== null && this.model.slidePaneWidth !== undefined && typeof this.model.slidePaneWidth === 'string') { this.width = this.model.slidePaneWidth; } if (this.model.slidePaneHeight !== null && this.model.slidePaneHeight !== undefined && typeof this.model.slidePaneHeight === 'string') { this.height = this.model.slidePaneHeight; } if (this.model.styleClass !== null && this.model.styleClass !== undefined && typeof this.model.styleClass === "object") { if (this.model.styleClass.length > 0) { for (let /** @type {?} */ c of this.model.styleClass) { this.comSlidepane.addClass(c); } } } } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (this._show && changes['position'] !== undefined && changes['position'] !== null) { if (changes['position'].currentValue !== changes['position'].previousValue) { this.resetPosition(); if (this.width !== undefined) { $(this.comSlidepane[0]).css('width', this.width); } if (this.height !== undefined) { $(this.comSlidepane[0]).css('height', this.height); } this.setPosition(); } } if (changes['model'] !== null && changes['model'] !== undefined) { if (changes['model'].currentValue.slidePaneWidth !== null && changes['model'].currentValue.slidePaneWidth !== undefined && typeof changes['model'].currentValue.slidePaneWidth !== undefined) { this.width = changes['model'].currentValue.slidePaneWidth; } } if (changes['model'] !== null && changes['model'] !== undefined) { if (changes['model'].currentValue.slidePaneHeight !== null && changes['model'].currentValue.slidePaneHeight !== undefined && typeof changes['model'].currentValue.slidePaneHeight !== undefined) { this.height = changes['model'].currentValue.slidePaneHeight; } } } /** * @return {?} */ getModel() { return this.model; } /** * @param {?} model * @return {?} */ setModel(model) { this.model = model; } /** * @param {?} event * @return {?} */ onFocus(event) { if (!this.autoFocus) { return; } this.show(); } /** * @param {?} event * @return {?} */ onLostFocus(event) { if (!this.autoFocus) { return; } let /** @type {?} */ doHide = true; if (this.autoValidate && this.compoWrapInstance && typeof this.compoWrapInstance.validateData === 'function') { let /** @type {?} */ results = this.compoWrapInstance.validateData(); if (results && results.length > 0) { for (let /** @type {?} */ result of results) { if (!result) { continue; } if (result.getStatus() === ValidationStatus.ERROR) { doHide = false; break; } } } } if (doHide) { setTimeout(() => { if (!this.isChildFocused()) { this.hide(); } }, HIDE_ON_CLICK_DELAY); } } /** * @return {?} */ isModelEmpty() { if (this.model === null || typeof this.model === 'undefined') { return true; } return false; } /** * @return {?} */ doPreload() { return new Promise((resolve, reject) => { resolve(null); }); } /** * @return {?} */ doLoaded() { } /** * @return {?} */ isSelfDataDirty() { return false; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } /** * @return {?} */ isShow() { return this._show; } /** * @return {?} */ getWidth() { return this.width; } /** * @return {?} */ getHeight() { return this.height; } /** * @return {?} */ getShowEvent() { return this.showEvent; } /** * @param {?} event * @return {?} */ setShowEvent(event) { this.showEvent = event; } /** * @return {?} */ getHideEvent() { return this.hideEvent; } /** * @param {?} event * @return {?} */ setHideEvent(event) { this.hideEvent = event; } /** * @param {?} autoFocus * @return {?} */ setAutoFocus(autoFocus) { this.autoFocus = autoFocus; } /** * @return {?} */ isAutoFocus() { return this.autoFocus; } /** * @return {?} */ getPosition() { if (this.position !== null && typeof this.position !== 'undefined') { if (LEFT === this.position) { return LEFT; } else if (RIGHT === this.position) { return RIGHT; } else if (BOTTOM === this.position) { return BOTTOM; } else if (TOP === this.position) { return TOP; } } // default is left return LEFT; } /** * @param {?=} data * @param {?=} $event * @param {?=} fireEvent * @return {?} */ show(data, $event, fireEvent) { let /** @type {?} */ byPassModel = false; if (data !== undefined && data !== null) { this.data = data; } if (this.anchor !== null && typeof this.anchor !== 'undefined') { let /** @type {?} */ anchorElement = $(this.anchor); if (anchorElement !== null && typeof anchorElement !== 'undefined') { byPassModel = true; } this.showSlidePane(true, $event, fireEvent); } } /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ hide($event, fireEvent) { this.showSlidePane(false, $event, fireEvent); } /** * @return {?} */ resetPosition() { this.comSlidepane[0].removeAttribute('style'); } /** * @return {?} */ setPosition() { if (this.position === LEFT) { // Slide Pane left $(this.comSlidepane[0]).css('left', '0'); } else if (this.position === RIGHT) { // Slide Pane right $(this.comSlidepane[0]).css('right', '0'); } else if (this.position === TOP) { // Slide Pane top $(this.comSlidepane[0]).css('top', '0'); } else if (this.position === BOTTOM) { // Slide Pane bottom $(this.comSlidepane[0]).css('bottom', '0'); } } /** * @return {?} */ isChildFocused() { let /** @type {?} */ focused = this.needFocusService.getFocusingComponent(); let /** @type {?} */ isChild = false; while (focused && !isChild) { if (focused === this.compoWrapInstance) { isChild = true; } else { if (typeof focused.getDataParent === 'function') { focused = focused.getDataParent(); } else { focused = null; } } } return isChild; } /** * @return {?} */ doHide() { this.resetPosition(); this._show = false; } /** * @return {?} */ doShow() { this._show = true; if (this.width !== undefined) { $(this.comSlidepane[0]).css('width', this.width); } if (this.height !== undefined) { $(this.comSlidepane[0]).css('height', this.height); } this.setPosition(); if (this.compoWrapInstance !== null && this.compoWrapInstance !== undefined && this.autoFocus) { if (!this.isChildFocused()) { this.needFocusService.setFocusingComponent(this.compoWrapInstance); } } } /** * @param {?} isShow * @param {?=} $event * @param {?=} fireEvent * @return {?} */ showSlidePane(isShow, $event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } if (isShow) { EventUtils.handleBrowserEvent(this, 'beforeShowEvent', $event, fireEvent, ($event) => { // doEvent this.doShow(); }, ($event) => { // emitBeforeEvent this.emitBeforeShowEvent($event); }, ($event) => { // emitAfterEvent this.emitShowEvent($event); }, ($event) => { // doPrevented }); } else { EventUtils.handleBrowserEvent(this, 'beforeHideEvent', $event, fireEvent, ($event) => { // doEvent this.doHide(); if (this.needFocusService !== null) { if (this.autoFocus && this.needFocusService.getFocusingComponent() === this) { this.needFocusService.resetFocusingComponent(); } } }, ($event) => { // emitBeforeEvent this.emitBeforeHideEvent($event); }, ($event) => { // emitAfterEvent this.emitHideEvent($event); }, ($event) => { // doPrevented }); } } /** * @param {?=} $event * @return {?} */ emitBeforeShowEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_SHOW_EVENT, this, data, $event); if (this.beforeShowEvent !== null && this.beforeShowEvent !== undefined) { this.beforeShowEvent.emit(ev); } } /** * @param {?=} $event * @return {?} */ emitShowEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(SHOW_EVENT, this, data, $event); if (this.showEvent !== null && this.showEvent !== undefined) { this.showEvent.emit(ev); } } /** * @param {?=} $event * @return {?} */ emitBeforeHideEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_HIDE_EVENT, this, data, $event); if (this.beforeHideEvent !== null && this.beforeHideEvent !== undefined) { this.beforeHideEvent.emit(ev); } } /** * @param {?=} $event * @return {?} */ emitHideEvent($event) { let /** @type {?} */ eventData = null; // emit event let /** @type {?} */ data = eventData; let /** @type {?} */ ev = EventUtils.newCustomEvent(HIDE_EVENT, this, data, $event); if (this.hideEvent !== null && this.hideEvent !== undefined) { this.hideEvent.emit(ev); } } } ComponentSlidePane.TYPE_NAME = TYPE_NAME; ComponentSlidePane.LEFT = LEFT; ComponentSlidePane.RIGHT = RIGHT; ComponentSlidePane.TOP = TOP; ComponentSlidePane.BOTTOM = BOTTOM; ComponentSlidePane.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-component-slidepane"> <div class="background-fake" *ngIf="isShow()"></div> <div class="component-slidepane" [style.width]="getWidth()" [style.height]="getHeight()" [class.show]="isShow()" [class.left]="getPosition() === 'left'" [class.right]="getPosition() === 'right'" [class.top]="getPosition() === 'top'" [class.bottom]="getPosition() === 'bottom'"> <div class="container-wrapper"> <phx-component-wrapper *ngIf="!isModelEmpty()" [type]="getModel().type" [data]="getData()" [handler]="_componentHandler" [dataParent]="this" [model]="getModel().model"></phx-component-wrapper> </div> </div> <!-- <button type="button" class="fake" (focusin)="_doFocus($event)" (blur)="_doLostFocus($event)"></button> --> </div>` },] }, ]; /** @nocollapse */ ComponentSlidePane.ctorParameters = () => [ { type: ElementRef, }, { type: NeedFocusService, }, ]; ComponentSlidePane.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "model": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "position": [{ type: Input },], "autoFocus": [{ type: Input },], "anchor": [{ type: Input },], "instance": [{ type: Input },], "autoValidate": [{ type: Input },], "componentHandler": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },], "showEvent": [{ type: Output, args: ['phxShow',] },], "beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },], "hideEvent": [{ type: Output, args: ['phxHide',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentSlidePane.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentSlidePane.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentSlidePane.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentSlidePane.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentSlidePane.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentSlidePane.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentSlidePane.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentSlidePane.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentSlidePane.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], ComponentSlidePane.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentSlidePane.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", ComponentSlidePaneModel) ], ComponentSlidePane.prototype, "model", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentSlidePane.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentSlidePane.prototype, "height", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentSlidePane.prototype, "position", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentSlidePane.prototype, "autoFocus", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentSlidePane.prototype, "anchor", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentSlidePane.prototype, "instance", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentSlidePane.prototype, "autoValidate", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentSlidePane.prototype, "componentHandler", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('beforeShow'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "beforeShowEvent", void 0); tslib_1.__decorate([ Option('show'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "showEvent", void 0); tslib_1.__decorate([ Option('beforeHide'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "beforeHideEvent", void 0); tslib_1.__decorate([ Option('hide'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "hideEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentSlidePane.prototype, "lostFocusEvent", void 0); function ComponentSlidePane_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ComponentSlidePane.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ComponentSlidePane.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ComponentSlidePane.propDecorators; /** @type {?} */ ComponentSlidePane.TYPE_NAME; /** @type {?} */ ComponentSlidePane.LEFT; /** @type {?} */ ComponentSlidePane.RIGHT; /** @type {?} */ ComponentSlidePane.TOP; /** @type {?} */ ComponentSlidePane.BOTTOM; /** @type {?} */ ComponentSlidePane.prototype.dataParent; /** @type {?} */ ComponentSlidePane.prototype.ignoreParentData; /** @type {?} */ ComponentSlidePane.prototype.data; /** @type {?} */ ComponentSlidePane.prototype.ignoreParentDisabled; /** @type {?} */ ComponentSlidePane.prototype.delegateHistory; /** @type {?} */ ComponentSlidePane.prototype.onDisabled; /** @type {?} */ ComponentSlidePane.prototype.onEnabled; /** @type {?} */ ComponentSlidePane.prototype.loadingEnabled; /** @type {?} */ ComponentSlidePane.prototype.i18nKey; /** @type {?} */ ComponentSlidePane.prototype.bypass; /** @type {?} */ ComponentSlidePane.prototype.options; /** @type {?} */ ComponentSlidePane.prototype.disabled; /** @type {?} */ ComponentSlidePane.prototype.model; /** @type {?} */ ComponentSlidePane.prototype.width; /** @type {?} */ ComponentSlidePane.prototype.height; /** @type {?} */ ComponentSlidePane.prototype.position; /** @type {?} */ ComponentSlidePane.prototype.autoFocus; /** @type {?} */ ComponentSlidePane.prototype.anchor; /** @type {?} */ ComponentSlidePane.prototype.instance; /** @type {?} */ ComponentSlidePane.prototype.autoValidate; /** @type {?} */ ComponentSlidePane.prototype.componentHandler; /** @type {?} */ ComponentSlidePane.prototype.loadEvent; /** @type {?} */ ComponentSlidePane.prototype.beforeShowEvent; /** @type {?} */ ComponentSlidePane.prototype.showEvent; /** @type {?} */ ComponentSlidePane.prototype.beforeHideEvent; /** @type {?} */ ComponentSlidePane.prototype.hideEvent; /** @type {?} */ ComponentSlidePane.prototype.beforeFocusEvent; /** @type {?} */ ComponentSlidePane.prototype.focusEvent; /** @type {?} */ ComponentSlidePane.prototype.beforeLostFocusEvent; /** @type {?} */ ComponentSlidePane.prototype.lostFocusEvent; /** @type {?} */ ComponentSlidePane.prototype.elementRef; /** @type {?} */ ComponentSlidePane.prototype._show; /** @type {?} */ ComponentSlidePane.prototype.compoWrapInstance; /** @type {?} */ ComponentSlidePane.prototype.needFocusService; /** @type {?} */ ComponentSlidePane.prototype._compClicked; /** @type {?} */ ComponentSlidePane.prototype.comSlidepane; /** @type {?} */ ComponentSlidePane.prototype._componentHandler; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50U2xpZGVQYW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9Db21wb25lbnRTbGlkZVBhbmUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBc0IsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFvQixNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR2hFLHVCQUFNLG1CQUFtQixHQUFXLEdBQUcsQ0FBQztBQUN4Qyx1QkFBTSxTQUFTLEdBQVcseUJBQXlCLENBQUM7QUFFcEQsdUJBQU0sSUFBSSxHQUFXLE1BQU0sQ0FBQztBQUM1Qix1QkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDO0FBQzlCLHVCQUFNLEdBQUcsR0FBVyxLQUFLLENBQUM7QUFDMUIsdUJBQU0sTUFBTSxHQUFXLFFBQVEsQ0FBQztBQWlCaEMsTUFBTSx5QkFBMEIsU0FBUSxlQUFlOzs7OztJQXVIbkQsWUFBWSxVQUFzQixFQUFFLGdCQUFrQztRQUNsRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFD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c0NBQ1EsdUJBQXVCOzs7SUFFdkMsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFOzs7O0lBR1IsTUFBTSxFQUFFO3NDQUNtQixRQUFROzs7SUFLbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHaEMsTUFBTSxDQUFDLFlBQVksQ0FBQztzQ0FDTSxZQUFZOzs7SUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHaEMsTUFBTSxDQUFDLFlBQVksQ0FBQztzQ0FDTSxZQUFZOzs7SUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQztzQ0FDTSxZQUFZOzs7SUFFdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQztzQ0FDTSxZQUFZOzs7SUFHakMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3NDQUNNLFlBQVk7OztJQUUzQyxNQUFNLENBQUMsV0FBVyxDQUFDO3NDQUNNLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgSG9zdExpc3RlbmVyLCBUeXBlLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SGFzRGF0YSB9IGZyb20gJy4uL0Fic3RyYWN0SGFzRGF0YSc7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSUhhc01vZGVsIH0gZnJvbSAnLi4vSUhhc01vZGVsJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IElOZWVkRm9jdXMgfSBmcm9tICcuLi9JTmVlZEZvY3VzJztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vSUhhc0RhdGEnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2xpZGVQYW5lTW9kZWwsIFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi9tb2RlbC9tb2RlbHMnOyBcbmltcG9ydCB7IEV2ZW50VXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZS91dGlscy9FdmVudFV0aWxzJztcbmltcG9ydCB7IEJFRk9SRV9TSE9XX0VWRU5ULCBTSE9XX0VWRU5ULCBISURFX0VWRU5ULCBCRUZPUkVfSElERV9FVkVOVCB9IGZyb20gJy4uLy4uL3NoYXJlL0N1c3RvbUV2ZW50VHlwZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU3RhdHVzIH0gZnJvbSAnLi4vdmFsaWRhdGUvVmFsaWRhdGlvblN0YXR1cyc7XG5cblxuY29uc3QgSElERV9PTl9DTElDS19ERUxBWTogbnVtYmVyID0gMTAwO1xuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jb21wb25lbnQtc2xpZGVwYW5lXCI7XG5cbmNvbnN0IExFRlQ6IHN0cmluZyA9ICdsZWZ0JztcbmNvbnN0IFJJR0hUOiBzdHJpbmcgPSAncmlnaHQnO1xuY29uc3QgVE9QOiBzdHJpbmcgPSAndG9wJztcbmNvbnN0IEJPVFRPTTogc3RyaW5nID0gJ2JvdHRvbSc7XG5cbkBDb21wb25lbnQoe1xuICAgIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gICAgc2VsZWN0b3I6IFRZUEVfTkFNRSxcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJwaHgtY29tcG9uZW50LXNsaWRlcGFuZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJiYWNrZ3JvdW5kLWZha2VcIiAqbmdJZj1cImlzU2hvdygpXCI+PC9kaXY+IFxuICAgIDxkaXYgY2xhc3M9XCJjb21wb25lbnQtc2xpZGVwYW5lXCIgW3N0eWxlLndpZHRoXT1cImdldFdpZHRoKClcIiBbc3R5bGUuaGVpZ2h0XT1cImdldEhlaWdodCgpXCIgW2NsYXNzLnNob3ddPVwiaXNTaG93KClcIiBbY2xhc3MubGVmdF09XCJnZXRQb3NpdGlvbigpID09PSAnbGVmdCdcIiBbY2xhc3MucmlnaHRdPVwiZ2V0UG9zaXRpb24oKSA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgIFtjbGFzcy50b3BdPVwiZ2V0UG9zaXRpb24oKSA9PT0gJ3RvcCdcIiBbY2xhc3MuYm90dG9tXT1cImdldFBvc2l0aW9uKCkgPT09ICdib3R0b20nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItd3JhcHBlclwiPlxuICAgICAgICAgICAgPHBoeC1jb21wb25lbnQtd3JhcHBlciAqbmdJZj1cIiFpc01vZGVsRW1wdHkoKVwiIFt0eXBlXT1cImdldE1vZGVsKCkudHlwZVwiIFtkYXRhXT1cImdldERhdGEoKVwiIFtoYW5kbGVyXT1cIl9jb21wb25lbnRIYW5kbGVyXCJcbiAgICAgICAgICAgICAgICBbZGF0YVBhcmVudF09XCJ0aGlzXCIgW21vZGVsXT1cImdldE1vZGVsKCkubW9kZWxcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImZha2VcIiAoZm9jdXNpbik9XCJfZG9Gb2N1cygkZXZlbnQpXCIgKGJsdXIpPVwiX2RvTG9zdEZvY3VzKCRldmVudClcIj48L2J1dHRvbj4gLS0+XG48L2Rpdj5gXG59KSBcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTbGlkZVBhbmUgZXh0ZW5kcyBBYnN0cmFjdEhhc0RhdGEgaW1wbGVtZW50cyBPbkluaXQsIElIYXNNb2RlbCwgSU5lZWRGb2N1cyB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBMRUZUOiBzdHJpbmcgPSBMRUZUO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklHSFQ6IHN0cmluZyA9IFJJR0hUO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVE9QOiBzdHJpbmcgPSBUT1A7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBCT1RUT006IHN0cmluZyA9IEJPVFRPTTtcblxuICAgIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkYXRhOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xuICAgIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gICAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gICAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvLyAtLS0gU2VsZiBcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBtb2RlbDogQ29tcG9uZW50U2xpZGVQYW5lTW9kZWw7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBwb3NpdGlvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGF1dG9Gb2N1czogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBhbmNob3I6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpbnN0YW5jZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGF1dG9WYWxpZGF0ZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuXG4gICAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gICAgQE91dHB1dCgncGh4TG9hZCcpXG4gICAgQE9wdGlvbignbG9hZCcpXG4gICAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgLy8gLS0tIFNlbGZcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVTaG93JylcbiAgICBAT3B0aW9uKCdiZWZvcmVTaG93JylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlU2hvd0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhTaG93JylcbiAgICBAT3B0aW9uKCdzaG93JylcbiAgICBwcm90ZWN0ZWQgc2hvd0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUhpZGUnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUhpZGUnKVxuICAgIHByb3RlY3RlZCBiZWZvcmVIaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEhpZGUnKVxuICAgIEBPcHRpb24oJ2hpZGUnKVxuICAgIHByb3RlY3RlZCBoaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gICAgQE91dHB1dCgncGh4QmVmb3JlRm9jdXMnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUZvY3VzJylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgQE91dHB1dCgncGh4Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2ZvY3VzJylcbiAgICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVMb3N0Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2JlZm