UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

414 lines (413 loc) 33.7 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 { I18N, Option } from '../../decorator/decorators'; import { DefaultTableBody } from './DefaultTableBody.component'; import { BEFORE_EXPAND_EVENT, EXPAND_EVENT, BEFORE_CONTRACT_EVENT, CONTRACT_EVENT } from '../../share/CustomEventType'; import { EventUtils } from '../../share/utils/EventUtils'; const /** @type {?} */ TYPE_NAME = "phx-table-expand-body"; export class DefaultExpandTableBody extends DefaultTableBody { /** * @param {?} elementRef */ constructor(elementRef) { super(elementRef); this.expandAllEvent = new EventEmitter(); this.contractAllEvent = new EventEmitter(); this.beforeExpandAllEvent = new EventEmitter(); this.beforeContractAllEvent = new EventEmitter(); } /** * @return {?} */ expandAll() { let /** @type {?} */ bData = { isExpand: true }; let /** @type {?} */ bEV = EventUtils.newCustomEvent(BEFORE_EXPAND_EVENT, this, bData, null); if (this.beforeExpandAllEvent !== null && this.beforeExpandAllEvent !== undefined) { this.beforeExpandAllEvent.emit(bEV); } for (let /** @type {?} */ controller of this.table.getRowControllers()) { let /** @type {?} */ tableController = /** @type {?} */ (controller); tableController.expand(); } let /** @type {?} */ data = { isExpand: true }; let /** @type {?} */ ev = EventUtils.newCustomEvent(EXPAND_EVENT, this, data, null); if (this.expandAllEvent !== null && this.expandAllEvent !== undefined) { this.expandAllEvent.emit(ev); } } /** * @return {?} */ contractAll() { let /** @type {?} */ bData = { isExpand: false }; let /** @type {?} */ bEV = EventUtils.newCustomEvent(BEFORE_CONTRACT_EVENT, this, bData, null); if (this.beforeContractAllEvent !== null && this.beforeContractAllEvent !== undefined) { this.beforeContractAllEvent.emit(bEV); } for (let /** @type {?} */ controller of this.table.getRowControllers()) { let /** @type {?} */ tableController = /** @type {?} */ (controller); tableController.contract(); } let /** @type {?} */ data = { isExpand: false }; let /** @type {?} */ ev = EventUtils.newCustomEvent(CONTRACT_EVENT, this, data, null); if (this.contractAllEvent !== null && this.contractAllEvent !== undefined) { this.contractAllEvent.emit(ev); } } /** * @param {?} event * @return {?} */ setExpandAllEvent(event) { this.expandAllEvent = event; } /** * @return {?} */ getExpandAllEvent() { return this.expandAllEvent; } /** * @param {?} event * @return {?} */ setBeforeExpandAllEvent(event) { this.beforeExpandAllEvent = event; } /** * @return {?} */ getBeforeExpandAllEvent() { return this.beforeExpandAllEvent; } /** * @param {?} event * @return {?} */ setContractAllEvent(event) { this.contractAllEvent = event; } /** * @return {?} */ getContractAllEvent() { return this.contractAllEvent; } /** * @param {?} event * @return {?} */ setBeforeContractAllEvent(event) { this.beforeContractAllEvent = event; } /** * @return {?} */ getBeforeContractAllEvent() { return this.beforeContractAllEvent; } } DefaultExpandTableBody.TYPE_NAME = TYPE_NAME; DefaultExpandTableBody.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<phx-component-wrapper [type]="getTable().getModel().getRowModel().getComponentType()" [options]="getTable().getModel().getRowModel().getComponentOptions()" [dataParent]="this" [ignoreParentData]="true" [handler]="row.wrapperHandler" [data]="row.data" [class]="'phx-table-row' + (getTable().getModel().getRowModel().getCSSClass() ? ' ' + getTable().getModel().getRowModel().getCSSClass() : '')" *ngFor="let row of getRowControllers(); let idx = index"> </phx-component-wrapper> ` },] }, ]; /** @nocollapse */ DefaultExpandTableBody.ctorParameters = () => [ { type: ElementRef, }, ]; DefaultExpandTableBody.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 },], "help": [{ type: Input },], "beforeCellClickEvent": [{ type: Output, args: ['phxBeforeCellClick',] },], "beforeCellDblClickEvent": [{ type: Output, args: ['phxBeforeCellDblClick',] },], "beforeCellLostFocusEvent": [{ type: Output, args: ['phxBeforeCellLostFocus',] },], "beforeCellFocusEvent": [{ type: Output, args: ['phxBeforeCellFocus',] },], "cellClickEvent": [{ type: Output, args: ['phxCellClick',] },], "cellDblClickEvent": [{ type: Output, args: ['phxCellDblClick',] },], "cellLostFocusEvent": [{ type: Output, args: ['phxCellLostFocus',] },], "cellFocusEvent": [{ type: Output, args: ['phxCellFocus',] },], "rowDragEvent": [{ type: Output, args: ['phxRowDrag',] },], "rowDragStartEvent": [{ type: Output, args: ['phxRowDragStart',] },], "rowDragEndEvent": [{ type: Output, args: ['phxRowDragEnd',] },], "rowDragEnterEvent": [{ type: Output, args: ['phxRowDragEnter',] },], "rowDragOverEvent": [{ type: Output, args: ['phxRowDragOver',] },], "rowDragLeaveEvent": [{ type: Output, args: ['phxRowDragLeave',] },], "rowDropEvent": [{ type: Output, args: ['phxRowDrop',] },], "rowDropAcceptedEvent": [{ type: Output, args: ['phxRowDropAccepted',] },], "rowDropRejectedEvent": [{ type: Output, args: ['phxRowDropRejected',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "expandAllEvent": [{ type: Output, args: ['phxExpandAll',] },], "contractAllEvent": [{ type: Output, args: ['phxContractAll',] },], "beforeExpandAllEvent": [{ type: Output, args: ['phxBeforeExpandAll',] },], "beforeContractAllEvent": [{ type: Output, args: ['phxBeforeContractAll',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultExpandTableBody.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultExpandTableBody.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], DefaultExpandTableBody.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultExpandTableBody.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultExpandTableBody.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], DefaultExpandTableBody.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], DefaultExpandTableBody.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultExpandTableBody.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], DefaultExpandTableBody.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], DefaultExpandTableBody.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], DefaultExpandTableBody.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), I18N(), tslib_1.__metadata("design:type", Object) ], DefaultExpandTableBody.prototype, "help", void 0); tslib_1.__decorate([ I18N(), tslib_1.__metadata("design:type", Array) ], DefaultExpandTableBody.prototype, "rows", void 0); tslib_1.__decorate([ Option('beforeCellClick'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "beforeCellClickEvent", void 0); tslib_1.__decorate([ Option('beforeCellDblClick'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "beforeCellDblClickEvent", void 0); tslib_1.__decorate([ Option('beforeCellLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "beforeCellLostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeCellFocus'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "beforeCellFocusEvent", void 0); tslib_1.__decorate([ Option('cellClick'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "cellClickEvent", void 0); tslib_1.__decorate([ Option('cellDblClick'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "cellDblClickEvent", void 0); tslib_1.__decorate([ Option('cellLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "cellLostFocusEvent", void 0); tslib_1.__decorate([ Option('cellFocus'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "cellFocusEvent", void 0); tslib_1.__decorate([ Option('rowDrag'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDragEvent", void 0); tslib_1.__decorate([ Option('rowDragStart'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDragStartEvent", void 0); tslib_1.__decorate([ Option('rowDragEnd'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDragEndEvent", void 0); tslib_1.__decorate([ Option('rowDragEnter'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDragEnterEvent", void 0); tslib_1.__decorate([ Option('rowDragOver'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDragOverEvent", void 0); tslib_1.__decorate([ Option('rowDragLeave'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDragLeaveEvent", void 0); tslib_1.__decorate([ Option('rowDrop'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDropEvent", void 0); tslib_1.__decorate([ Option('rowDropAccepted'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDropAcceptedEvent", void 0); tslib_1.__decorate([ Option('rowDropRejected'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "rowDropRejectedEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('expandAll'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "expandAllEvent", void 0); tslib_1.__decorate([ Option('contractAll'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "contractAllEvent", void 0); tslib_1.__decorate([ Option('beforeExpandAll'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "beforeExpandAllEvent", void 0); tslib_1.__decorate([ Option('beforeContractAll'), tslib_1.__metadata("design:type", EventEmitter) ], DefaultExpandTableBody.prototype, "beforeContractAllEvent", void 0); function DefaultExpandTableBody_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DefaultExpandTableBody.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DefaultExpandTableBody.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DefaultExpandTableBody.propDecorators; /** @type {?} */ DefaultExpandTableBody.TYPE_NAME; /** @type {?} */ DefaultExpandTableBody.prototype.dataParent; /** @type {?} */ DefaultExpandTableBody.prototype.ignoreParentData; /** @type {?} */ DefaultExpandTableBody.prototype.data; /** @type {?} */ DefaultExpandTableBody.prototype.ignoreParentDisabled; /** @type {?} */ DefaultExpandTableBody.prototype.delegateHistory; /** @type {?} */ DefaultExpandTableBody.prototype.onDisabled; /** @type {?} */ DefaultExpandTableBody.prototype.onEnabled; /** @type {?} */ DefaultExpandTableBody.prototype.loadingEnabled; /** @type {?} */ DefaultExpandTableBody.prototype.i18nKey; /** @type {?} */ DefaultExpandTableBody.prototype.bypass; /** @type {?} */ DefaultExpandTableBody.prototype.options; /** @type {?} */ DefaultExpandTableBody.prototype.disabled; /** @type {?} */ DefaultExpandTableBody.prototype.help; /** @type {?} */ DefaultExpandTableBody.prototype.rows; /** @type {?} */ DefaultExpandTableBody.prototype.beforeCellClickEvent; /** @type {?} */ DefaultExpandTableBody.prototype.beforeCellDblClickEvent; /** @type {?} */ DefaultExpandTableBody.prototype.beforeCellLostFocusEvent; /** @type {?} */ DefaultExpandTableBody.prototype.beforeCellFocusEvent; /** @type {?} */ DefaultExpandTableBody.prototype.cellClickEvent; /** @type {?} */ DefaultExpandTableBody.prototype.cellDblClickEvent; /** @type {?} */ DefaultExpandTableBody.prototype.cellLostFocusEvent; /** @type {?} */ DefaultExpandTableBody.prototype.cellFocusEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDragEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDragStartEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDragEndEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDragEnterEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDragOverEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDragLeaveEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDropEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDropAcceptedEvent; /** @type {?} */ DefaultExpandTableBody.prototype.rowDropRejectedEvent; /** @type {?} */ DefaultExpandTableBody.prototype.changeEvent; /** @type {?} */ DefaultExpandTableBody.prototype.beforeChangeEvent; /** @type {?} */ DefaultExpandTableBody.prototype.expandAllEvent; /** @type {?} */ DefaultExpandTableBody.prototype.contractAllEvent; /** @type {?} */ DefaultExpandTableBody.prototype.beforeExpandAllEvent; /** @type {?} */ DefaultExpandTableBody.prototype.beforeContractAllEvent; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdEV4cGFuZFRhYmxlQm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvdGFibGUvRGVmYXVsdEV4cGFuZFRhYmxlQm9keS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzFELHVCQUFNLFNBQVMsR0FBVyx1QkFBdUIsQ0FBQztBQWdCbEQsTUFBTSw2QkFBOEIsU0FBUSxnQkFBZ0I7Ozs7Z0JBMkh2QyxVQUFzQjtRQUN2QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOzs7OztJQUc1QyxTQUFTO1FBQ2QscUJBQUksS0FBSyxHQUFRO1lBQ2YsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YscUJBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsbUJB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LE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztzQ0FFTSxZQUFZOzs7SUFDM0MsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3NDQUVNLFlBQVk7OztJQUMzQyxNQUFNLENBQUMsUUFBUSxDQUFDO3NDQUVNLFlBQVk7OztJQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDO3NDQUVNLFlBQVk7OztJQUV4QyxNQUFNLENBQUMsV0FBVyxDQUFDO3NDQUVNLFlBQVk7OztJQUNyQyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUVNLFlBQVk7OztJQUN2QyxNQUFNLENBQUMsaUJBQWlCLENBQUM7c0NBRU0sWUFBWTs7O0lBQzNDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztzQ0FFTSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSTE4TiwgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL2RlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBJVGFibGVSb3dDb250cm9sbGVyIH0gZnJvbSAnLi9JVGFibGVSb3dDb250cm9sbGVyJztcclxuaW1wb3J0IHsgSUV4cGFuZGFibGVUYWJsZUJvZHkgfSBmcm9tICcuL0lFeHBhbmRhYmxlVGFibGVCb2R5JztcclxuaW1wb3J0IHsgRGVmYXVsdFRhYmxlQm9keSB9IGZyb20gJy4vRGVmYXVsdFRhYmxlQm9keS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlciB9IGZyb20gJy4vSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXInO1xyXG5pbXBvcnQgeyBCRUZPUkVfRVhQQU5EX0VWRU5ULCBFWFBBTkRfRVZFTlQsIEJFRk9SRV9DT05UUkFDVF9FVkVOVCwgQ09OVFJBQ1RfRVZFTlQgfSBmcm9tICcuLi8uLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xyXG5pbXBvcnQgeyBFdmVudFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmUvdXRpbHMvRXZlbnRVdGlscyc7XHJcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vSUhhc0RhdGEnO1xyXG5cclxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC10YWJsZS1leHBhbmQtYm9keVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcclxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxyXG4gIHRlbXBsYXRlOiBgPHBoeC1jb21wb25lbnQtd3JhcHBlciBbdHlwZV09XCJnZXRUYWJsZSgpLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDb21wb25lbnRUeXBlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ2V0VGFibGUoKS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q29tcG9uZW50T3B0aW9ucygpXCJcclxuICAgICAgICAgICAgICAgICAgIFtkYXRhUGFyZW50XT1cInRoaXNcIlxyXG4gICAgICAgICAgICAgICAgICAgW2lnbm9yZVBhcmVudERhdGFdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbaGFuZGxlcl09XCJyb3cud3JhcHBlckhhbmRsZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgW2RhdGFdPVwicm93LmRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidwaHgtdGFibGUtcm93JyArIChnZXRUYWJsZSgpLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDU1NDbGFzcygpID8gJyAnICsgZ2V0VGFibGUoKS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q1NTQ2xhc3MoKSA6ICcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIGdldFJvd0NvbnRyb2xsZXJzKCk7IGxldCBpZHggPSBpbmRleFwiPlxyXG48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cclxuYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVmYXVsdEV4cGFuZFRhYmxlQm9keSBleHRlbmRzIERlZmF1bHRUYWJsZUJvZHkgaW1wbGVtZW50cyBJRXhwYW5kYWJsZVRhYmxlQm9keSB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XHJcblxyXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xyXG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXHJcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXHJcbiAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgLy8gLS0tIEFic3RyYWN0SGFzRGF0YUhlbHBcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIEBJMThOKClcclxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xyXG4gIC8vIC0tLSBEZWZhdWx0VGFibGVCb2R5XHJcbiAgQEkxOE4oKVxyXG4gIHByb3RlY3RlZCByb3dzOiBJVGFibGVSb3dDb250cm9sbGVyW107XHJcblxyXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxyXG4gIC8vIC0tLSBmcm9tIERlZmF1bHRUYWJsZUJvZHlcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNlbGxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNlbGxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsRGJsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNlbGxEYmxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNlbGxEYmxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsTG9zdEZvY3VzJylcclxuICBAT3V0cHV0KCdwaHhCZWZvcmVDZWxsTG9zdEZvY3VzJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlQ2VsbExvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsRm9jdXMnKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNlbGxGb2N1cycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNlbGxGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeENlbGxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGNlbGxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsRGJsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeENlbGxEYmxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGNlbGxEYmxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsTG9zdEZvY3VzJylcclxuICBAT3V0cHV0KCdwaHhDZWxsTG9zdEZvY3VzJylcclxuICBwcm90ZWN0ZWQgY2VsbExvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsRm9jdXMnKVxyXG4gIEBPdXRwdXQoJ3BoeENlbGxGb2N1cycpXHJcbiAgcHJvdGVjdGVkIGNlbGxGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnJylcclxuICBAT3V0cHV0KCdwaHhSb3dEcmFnJylcclxuICBwcm90ZWN0ZWQgcm93RHJhZ0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnU3RhcnQnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWdTdGFydCcpXHJcbiAgcHJvdGVjdGVkIHJvd0RyYWdTdGFydEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnRW5kJylcclxuICBAT3V0cHV0KCdwaHhSb3dEcmFnRW5kJylcclxuICBwcm90ZWN0ZWQgcm93RHJhZ0VuZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnRW50ZXInKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWdFbnRlcicpXHJcbiAgcHJvdGVjdGVkIHJvd0RyYWdFbnRlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnT3ZlcicpXHJcbiAgQE91dHB1dCgncGh4Um93RHJhZ092ZXInKVxyXG4gIHByb3RlY3RlZCByb3dEcmFnT3ZlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnTGVhdmUnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWdMZWF2ZScpXHJcbiAgcHJvdGVjdGVkIHJvd0RyYWdMZWF2ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcm9wJylcclxuICBAT3V0cHV0KCdwaHhSb3dEcm9wJylcclxuICBwcm90ZWN0ZWQgcm93RHJvcEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcm9wQWNjZXB0ZWQnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0Ryb3BBY2NlcHRlZCcpXHJcbiAgcHJvdGVjdGVkIHJvd0Ryb3BBY2NlcHRlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcm9wUmVqZWN0ZWQnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0Ryb3BSZWplY3RlZCcpXHJcbiAgcHJvdGVjdGVkIHJvd0Ryb3BSZWplY3RlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjaGFuZ2UnKVxyXG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXHJcbiAgcHJvdGVjdGVkIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDaGFuZ2UnKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICAvLyAtLS0gc2VsZlxyXG4gIEBPcHRpb24oJ2V4cGFuZEFsbCcpXHJcbiAgQE91dHB1dCgncGh4RXhwYW5kQWxsJylcclxuICBwcm90ZWN0ZWQgZXhwYW5kQWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPcHRpb24oJ2NvbnRyYWN0QWxsJylcclxuICBAT3V0cHV0KCdwaHhDb250cmFjdEFsbCcpXHJcbiAgcHJvdGVjdGVkIGNvbnRyYWN0QWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPcHRpb24oJ2JlZm9yZUV4cGFuZEFsbCcpXHJcbiAgQE91dHB1dCgncGh4QmVmb3JlRXhwYW5kQWxsJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlRXhwYW5kQWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPcHRpb24oJ2JlZm9yZUNvbnRyYWN0QWxsJylcclxuICBAT3V0cHV0KCdwaHhCZWZvcmVDb250cmFjdEFsbCcpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNvbnRyYWN0QWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoZWxlbWVudFJlZik7XHJcblxyXG4gICAgdGhpcy5leHBhbmRBbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIHRoaXMuY29udHJhY3RBbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIHRoaXMuYmVmb3JlRXhwYW5kQWxsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQWxsKCk6IHZvaWQge1xyXG4gICAgbGV0IGJEYXRhOiBhbnkgPSB7XHJcbiAgICAgIGlzRXhwYW5kOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgbGV0IGJFViA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQkVGT1JFX0VYUEFORF9FVkVOVCwgdGhpcywgYkRhdGEsIG51bGwpO1xyXG5cclxuICAgIGlmKHRoaXMuYmVmb3JlRXhwYW5kQWxsRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVFeHBhbmRBbGxFdmVudCAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgdGhpcy5iZWZvcmVFeHBhbmRBbGxFdmVudC5lbWl0KGJFVik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgY29udHJvbGxlciBvZiB0aGlzLnRhYmxlLmdldFJvd0NvbnRyb2xsZXJzKCkpIHtcclxuICAgICAgbGV0IHRhYmxlQ29udHJvbGxlcjogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyO1xyXG5cclxuICAgICAgdGFibGVDb250cm9sbGVyLmV4cGFuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhOiBhbnkgPSB7XHJcbiAgICAgIGlzRXhwYW5kOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChFWFBBTkRfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xyXG5cclxuICAgIGlmKHRoaXMuZXhwYW5kQWxsRXZlbnQgIT09IG51bGwgJiYgdGhpcy5leHBhbmRBbGxFdmVudCAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgdGhpcy5leHBhbmRBbGxFdmVudC5lbWl0KGV2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb250cmFjdEFsbCgpOiB2b2lkIHtcclxuICAgIGxldCBiRGF0YTogYW55ID0ge1xyXG4gICAgICBpc0V4cGFuZDogZmFsc2VcclxuICAgIH07XHJcbiAgICBsZXQgYkVWID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChCRUZPUkVfQ09OVFJBQ1RfRVZFTlQsIHRoaXMsIGJEYXRhLCBudWxsKTtcclxuXHJcbiAgICBpZih0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVDb250cmFjdEFsbEV2ZW50ICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQuZW1pdChiRVYpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGNvbnRyb2xsZXIgb2YgdGhpcy50YWJsZS5nZXRSb3dDb250cm9sbGVycygpKSB7XHJcbiAgICAgIGxldCB0YWJsZUNvbnRyb2xsZXI6IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyID0gY29udHJvbGxlciBhcyBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcjtcclxuXHJcbiAgICAgIHRhYmxlQ29udHJvbGxlci5jb250cmFjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhOiBhbnkgPSB7XHJcbiAgICAgIGlzRXhwYW5kOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQ09OVFJBQ1RfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xyXG5cclxuICAgIGlmKHRoaXMuY29udHJhY3RBbGxFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmNvbnRyYWN0QWxsRXZlbnQgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgIHRoaXMuY29udHJhY3RBbGxFdmVudC5lbWl0KGV2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFeHBhbmRBbGxFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kQWxsRXZlbnQgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRFeHBhbmRBbGxFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5leHBhbmRBbGxFdmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCZWZvcmVFeHBhbmRBbGxFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuYmVmb3JlRXhwYW5kQWxsRXZlbnQgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCZWZvcmVFeHBhbmRBbGxFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVFeHBhbmRBbGxFdmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb250cmFjdEFsbEV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5jb250cmFjdEFsbEV2ZW50ID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29udHJhY3RBbGxFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cmFjdEFsbEV2ZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEJlZm9yZUNvbnRyYWN0QWxsRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCZWZvcmVDb250cmFjdEFsbEV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==