com.phloxui
Version:
PhloxUI Ng2+ Framework
534 lines (533 loc) • 40.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, HostListener, EventEmitter, Output } from '@angular/core';
import { AbstractHasData } from '../../AbstractHasData';
import { CalendarEntryPopoverModel } from '../../model/CalendarEntryPopoverModel';
import { NeedFocusService } from '../../../service/NeedFocusService.service';
import { AbstractDataEditor } from '../AbstractDataEditor';
import { Option } from '../../../decorator/Option.decorator';
import { EventUtils } from '../../../share/utils/EventUtils';
var /** @type {?} */ TYPE_NAME = "phx-calendar-entry-popover";
var /** @type {?} */ LEFT = 'left';
var /** @type {?} */ RIGHT = 'right';
var /** @type {?} */ BELOW = 'below';
var /** @type {?} */ ABOVE = 'above';
var /** @type {?} */ POPOVER_SHOW_EVENT = 'calendarpopovershow';
var /** @type {?} */ POPOVER_HIDE_EVENT = 'calendarpopoverhide';
var CalendarEntryPopover = /** @class */ (function (_super) {
tslib_1.__extends(CalendarEntryPopover, _super);
function CalendarEntryPopover(elementRef, needFocusService) {
var _this = _super.call(this, elementRef) || this;
_this.needFocusService = needFocusService;
_this._show = false;
_this.defaultArrowTop = 10;
_this.showEvent = new EventEmitter();
_this.hideEvent = new EventEmitter();
return _this;
}
/**
* @return {?}
*/
CalendarEntryPopover.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
_super.prototype.ngOnInit.call(this);
this.showMenu(this._show);
this.compoWrapInstance = null;
// when wrapper finished render
this.componentHandler = function (result) {
var /** @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 (typeof comInstance.setCalendarEntryMapper === 'function') {
comInstance.setCalendarEntryMapper(_this.entryMapper);
}
if (typeof comInstance.setEditor === 'function') {
comInstance.setEditor(_this.editor);
}
_this.compoWrapInstance = comInstance;
};
};
/**
* @param {?} isShow
* @return {?}
*/
CalendarEntryPopover.prototype.showMenu = /**
* @param {?} isShow
* @return {?}
*/
function (isShow) {
this._show = isShow;
if (isShow) {
if (this.needFocusService != null) {
this.needFocusService.setFocusingComponent(this);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype._getComponentHandler = /**
* @return {?}
*/
function () {
return this.componentHandler;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isModelEmpty = /**
* @return {?}
*/
function () {
if (this.model === null || typeof this.model === 'undefined') {
return true;
}
return false;
};
/**
* @param {?} top
* @return {?}
*/
CalendarEntryPopover.prototype.setArrowTop = /**
* @param {?} top
* @return {?}
*/
function (top) {
if (top === null || typeof top === 'undefined') {
return;
}
var /** @type {?} */ contWrapElement = $(this.elementRef.nativeElement).find('.container-wrapper');
if (typeof contWrapElement !== 'undefined') {
if (typeof $(contWrapElement).find('.container-after') !== 'undefined') {
$(contWrapElement).find('.container-after').css("top", top);
}
if (typeof $(contWrapElement).find('.container-before') !== 'undefined') {
$(contWrapElement).find('.container-before').css("top", top - 1);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.show = /**
* @return {?}
*/
function () {
this.showMenu(true);
var /** @type {?} */ data = null;
var /** @type {?} */ ev = EventUtils.newCustomEvent(POPOVER_SHOW_EVENT, this, data, null);
this.showEvent.emit(ev);
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.hide = /**
* @return {?}
*/
function () {
this.showMenu(false);
var /** @type {?} */ data = null;
var /** @type {?} */ ev = EventUtils.newCustomEvent(POPOVER_HIDE_EVENT, this, data, null);
this.hideEvent.emit(ev);
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isShow = /**
* @return {?}
*/
function () {
return this._show;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getModel = /**
* @return {?}
*/
function () {
return this.model;
};
/**
* @param {?} model
* @return {?}
*/
CalendarEntryPopover.prototype.setModel = /**
* @param {?} model
* @return {?}
*/
function (model) {
this.model = model;
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.setModel === 'function' && this.model !== null) {
this.compoWrapInstance.setModel(this.model.model);
}
}
};
/**
* @param {?} data
* @return {?}
*/
CalendarEntryPopover.prototype.setData = /**
* @param {?} data
* @return {?}
*/
function (data) {
_super.prototype.setData.call(this, data);
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
this.compoWrapInstance.setData(this.data);
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getPosition = /**
* @return {?}
*/
function () {
if (this.model !== null && typeof this.model !== 'undefined') {
if (this.model.position !== null && typeof this.model.position !== 'undefined') {
if (LEFT === this.model.position) {
return LEFT;
}
else if (RIGHT === this.model.position) {
return RIGHT;
}
else if (BELOW === this.model.position) {
return BELOW;
}
else if (ABOVE === this.model.position) {
return ABOVE;
}
}
}
// default is left
return LEFT;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getShowEvent = /**
* @return {?}
*/
function () {
return this.showEvent;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getHideEvent = /**
* @return {?}
*/
function () {
return this.hideEvent;
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.setShowEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.showEvent = event;
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.setHideEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.hideEvent = event;
};
/**
* @param {?} $event
* @return {?}
*/
CalendarEntryPopover.prototype.onClick = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
$event.stopPropagation();
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.onFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
};
/**
* @param {?} event
* @return {?}
*/
CalendarEntryPopover.prototype.onLostFocus = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.hide();
this.setDataParent(null);
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
return false;
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.selfSaveData = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.selfResetData = /**
* @return {?}
*/
function () {
};
/**
* @param {?} entryMapper
* @return {?}
*/
CalendarEntryPopover.prototype.setCalendarEntryMapper = /**
* @param {?} entryMapper
* @return {?}
*/
function (entryMapper) {
this.entryMapper = entryMapper;
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.setCalendarEntryMapper === 'function') {
this.compoWrapInstance.setCalendarEntryMapper(this.entryMapper);
}
}
};
/**
* @param {?} editor
* @return {?}
*/
CalendarEntryPopover.prototype.setEditor = /**
* @param {?} editor
* @return {?}
*/
function (editor) {
this.editor = editor;
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.setEditor === 'function') {
this.compoWrapInstance.setEditor(this.editor);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.doPreload = /**
* @return {?}
*/
function () { return new Promise(function (resolve, reject) { resolve(null); }); };
/**
* @return {?}
*/
CalendarEntryPopover.prototype.doLoaded = /**
* @return {?}
*/
function () {
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.getEntryMapper = /**
* @return {?}
*/
function () {
return this.entryMapper;
};
/**
* @param {?} $event
* @return {?}
*/
CalendarEntryPopover.prototype.onPopoverClosed = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.onPopoverClosed === 'function') {
this.compoWrapInstance.onPopoverClosed($event);
}
}
};
/**
* @param {?} $event
* @return {?}
*/
CalendarEntryPopover.prototype.onAutoSaved = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.onAutoSaved === 'function') {
this.compoWrapInstance.onAutoSaved($event);
}
}
};
/**
* @return {?}
*/
CalendarEntryPopover.prototype.isAutoSave = /**
* @return {?}
*/
function () {
if (this.compoWrapInstance !== null && typeof this.compoWrapInstance !== 'undefined') {
if (typeof this.compoWrapInstance.isAutoSave === 'function') {
return this.compoWrapInstance.isAutoSave();
}
}
return false;
};
CalendarEntryPopover.TYPE_NAME = TYPE_NAME;
CalendarEntryPopover.LEFT = LEFT;
CalendarEntryPopover.RIGHT = RIGHT;
CalendarEntryPopover.BELOW = BELOW;
CalendarEntryPopover.ABOVE = ABOVE;
CalendarEntryPopover.POPOVER_SHOW_EVENT = POPOVER_SHOW_EVENT;
CalendarEntryPopover.POPOVER_HIDE_EVENT = POPOVER_HIDE_EVENT;
CalendarEntryPopover.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-calendar-entry-popover\" [class.show]=\"isShow()\" [class.left]=\"getPosition() === 'left'\" [class.right]=\"getPosition() === 'right'\"\n\t[class.above]=\"getPosition() === 'above'\" [class.below]=\"getPosition() === 'below'\">\n\t<div class=\"container-wrapper\">\n\t\t<div class=\"container\">\n\t\t\t<div class=\"wrapper\">\n\t\t\t\t<div class=\"top-bg\"></div>\n\t\t\t\t\t<div class=\"content-wrapper\">\n\t\t\t\t\t\t<div class=\"content\">\n\t\t\t\t\t\t\t<phx-component-wrapper *ngIf=\"!isModelEmpty()\" [type]=\"getModel().type\" [data]=\"getData()\" [handler]=\"_getComponentHandler()\" [dataParent]=\"this\" [model]=\"getModel().model\"></phx-component-wrapper>\n\t\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"container-before\"></div>\n\t\t<div class=\"container-after\"></div>\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
CalendarEntryPopover.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: NeedFocusService, },
]; };
CalendarEntryPopover.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ 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 },],
"model": [{ type: Input },],
"data": [{ type: Input },],
"entryMapper": [{ type: Input },],
"editor": [{ type: Input },],
"showEvent": [{ type: Output, args: ['phxShow',] },],
"hideEvent": [{ type: Output, args: ['phxHide',] },],
"onClick": [{ type: HostListener, args: ['click', ['$event'],] },],
};
tslib_1.__decorate([
Option('show'),
tslib_1.__metadata("design:type", EventEmitter)
], CalendarEntryPopover.prototype, "showEvent", void 0);
tslib_1.__decorate([
Option('hide'),
tslib_1.__metadata("design:type", EventEmitter)
], CalendarEntryPopover.prototype, "hideEvent", void 0);
return CalendarEntryPopover;
}(AbstractHasData));
export { CalendarEntryPopover };
function CalendarEntryPopover_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
CalendarEntryPopover.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
CalendarEntryPopover.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
CalendarEntryPopover.propDecorators;
/** @type {?} */
CalendarEntryPopover.TYPE_NAME;
/** @type {?} */
CalendarEntryPopover.LEFT;
/** @type {?} */
CalendarEntryPopover.RIGHT;
/** @type {?} */
CalendarEntryPopover.BELOW;
/** @type {?} */
CalendarEntryPopover.ABOVE;
/** @type {?} */
CalendarEntryPopover.POPOVER_SHOW_EVENT;
/** @type {?} */
CalendarEntryPopover.POPOVER_HIDE_EVENT;
/** @type {?} */
CalendarEntryPopover.prototype.dataParent;
/** @type {?} */
CalendarEntryPopover.prototype.ignoreParentData;
/** @type {?} */
CalendarEntryPopover.prototype.ignoreParentDisabled;
/** @type {?} */
CalendarEntryPopover.prototype.delegateHistory;
/** @type {?} */
CalendarEntryPopover.prototype.onDisabled;
/** @type {?} */
CalendarEntryPopover.prototype.onEnabled;
/** @type {?} */
CalendarEntryPopover.prototype.loadingEnabled;
/** @type {?} */
CalendarEntryPopover.prototype.i18nKey;
/** @type {?} */
CalendarEntryPopover.prototype.bypass;
/** @type {?} */
CalendarEntryPopover.prototype.options;
/** @type {?} */
CalendarEntryPopover.prototype.model;
/** @type {?} */
CalendarEntryPopover.prototype.data;
/** @type {?} */
CalendarEntryPopover.prototype.entryMapper;
/** @type {?} */
CalendarEntryPopover.prototype.editor;
/** @type {?} */
CalendarEntryPopover.prototype._show;
/** @type {?} */
CalendarEntryPopover.prototype.componentHandler;
/** @type {?} */
CalendarEntryPopover.prototype.compoWrapInstance;
/** @type {?} */
CalendarEntryPopover.prototype.defaultArrowTop;
/** @type {?} */
CalendarEntryPopover.prototype.needFocusService;
/** @type {?} */
CalendarEntryPopover.prototype.showEvent;
/** @type {?} */
CalendarEntryPopover.prototype.hideEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsZW5kYXJFbnRyeVBvcG92ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2VkaXRvci9jYWxlbmRhci5pbnRlcm5hbC9DYWxlbmRhckVudHJ5UG9wb3Zlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFtQixZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUdsRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSzdELHFCQUFNLFNBQVMsR0FBVyw0QkFBNEIsQ0FBQztBQUV2RCxxQkFBTSxJQUFJLEdBQVcsTUFBTSxDQUFDO0FBQzVCLHFCQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFDOUIscUJBQU0sS0FBSyxHQUFXLE9BQU8sQ0FBQztBQUM5QixxQkFBTSxLQUFLLEdBQVcsT0FBTyxDQUFDO0FBQzlCLHFCQUFNLGtCQUFrQixHQUFXLHFCQUFxQixDQUFDO0FBQ3pELHFCQUFNLGtCQUFrQixHQUFXLHFCQUFxQixDQUFDOztJQXlCZixnREFBZTtJQW1EdkQsOEJBQVksVUFBc0IsRUFBRSxnQkFBa0M7UUFBdEUsWUFDRSxrQkFBTSxVQUFVLENBQUMsU0FNbEI7UUFMQyxLQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JB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QUs7OENBQ1Esa0JBQWtCOzhDQUNsQixrQkFBa0I7O2dCQS9CdkUsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFFBQVEsRUFBRSwwMUJBaUJYO2lCQUNBOzs7O2dCQTlDMkIsVUFBVTtnQkFNN0IsZ0JBQWdCOzs7K0JBb0R0QixLQUFLO3FDQUVMLEtBQUs7eUNBRUwsS0FBSztvQ0FFTCxLQUFLOytCQUVMLEtBQUs7OEJBRUwsS0FBSzttQ0FFTCxLQUFLOzRCQUVMLEtBQUs7MkJBRUwsS0FBSyxTQUFDLFlBQVk7NEJBRWxCLEtBQUs7MEJBRUwsS0FBSzt5QkFFTCxLQUFLO2dDQUVMLEtBQUs7MkJBRUwsS0FBSzs4QkFRTCxNQUFNLFNBQUMsU0FBUzs4QkFHaEIsTUFBTSxTQUFDLFNBQVM7NEJBd0poQixZQUFZLFNBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDOzs7UUE1SmhDLE1BQU0sQ0FBQyxNQUFNLENBQUM7MENBRUksWUFBWTs7O1FBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUM7MENBRUksWUFBWTs7K0JBaEdqQztFQStDMEMsZUFBZTtTQUE1QyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIEhvc3RMaXN0ZW5lciwgVHlwZSwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYXNEYXRhIH0gZnJvbSAnLi4vLi4vQWJzdHJhY3RIYXNEYXRhJztcbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4uLy4uL0lIYXNNb2RlbCc7XG5pbXBvcnQgeyBDYWxlbmRhckVudHJ5UG9wb3Zlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwvQ2FsZW5kYXJFbnRyeVBvcG92ZXJNb2RlbCc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJFbnRyeU1hcHBlciB9IGZyb20gJy4uL0lDYWxlbmRhckVudHJ5TWFwcGVyJztcbmltcG9ydCB7IElOZWVkRm9jdXMgfSBmcm9tICcuLi8uLi9JTmVlZEZvY3VzJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJFbnRyeVBvcG92ZXJDb250ZW50IH0gZnJvbSAnLi4vSUNhbGVuZGFyRW50cnlQb3BvdmVyQ29udGVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFFZGl0b3IgfSBmcm9tICcuLi9BYnN0cmFjdERhdGFFZGl0b3InO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9yL09wdGlvbi5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi9JSGFzRGF0YSc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jYWxlbmRhci1lbnRyeS1wb3BvdmVyXCI7XG5cbmNvbnN0IExFRlQ6IHN0cmluZyA9ICdsZWZ0JztcbmNvbnN0IFJJR0hUOiBzdHJpbmcgPSAncmlnaHQnO1xuY29uc3QgQkVMT1c6IHN0cmluZyA9ICdiZWxvdyc7XG5jb25zdCBBQk9WRTogc3RyaW5nID0gJ2Fib3ZlJztcbmNvbnN0IFBPUE9WRVJfU0hPV19FVkVOVDogc3RyaW5nID0gJ2NhbGVuZGFycG9wb3ZlcnNob3cnO1xuY29uc3QgUE9QT1ZFUl9ISURFX0VWRU5UOiBzdHJpbmcgPSAnY2FsZW5kYXJwb3BvdmVyaGlkZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jYWxlbmRhci1lbnRyeS1wb3BvdmVyXCIgW2NsYXNzLnNob3ddPVwiaXNTaG93KClcIiBbY2xhc3MubGVmdF09XCJnZXRQb3NpdGlvbigpID09PSAnbGVmdCdcIiBbY2xhc3MucmlnaHRdPVwiZ2V0UG9zaXRpb24oKSA9PT0gJ3JpZ2h0J1wiXG5cdFtjbGFzcy5hYm92ZV09XCJnZXRQb3NpdGlvbigpID09PSAnYWJvdmUnXCIgW2NsYXNzLmJlbG93XT1cImdldFBvc2l0aW9uKCkgPT09ICdiZWxvdydcIj5cblx0PGRpdiBjbGFzcz1cImNvbnRhaW5lci13cmFwcGVyXCI+XG5cdFx0PGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInRvcC1iZ1wiPjwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG5cdFx0XHRcdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgKm5nSWY9XCIhaXNNb2RlbEVtcHR5KClcIiBbdHlwZV09XCJnZXRNb2RlbCgpLnR5cGVcIiBbZGF0YV09XCJnZXREYXRhKClcIiBbaGFuZGxlcl09XCJfZ2V0Q29tcG9uZW50SGFuZGxlcigpXCIgW2RhdGFQYXJlbnRdPVwidGhpc1wiIFttb2RlbF09XCJnZXRNb2RlbCgpLm1vZGVsXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWJlZm9yZVwiPjwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJjb250YWluZXItYWZ0ZXJcIj48L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJFbnRyeVBvcG92ZXIgZXh0ZW5kcyBBYnN0cmFjdEhhc0RhdGEgaW1wbGVtZW50cyBPbkluaXQsIElIYXNNb2RlbCwgSU5lZWRGb2N1cywgSUNhbGVuZGFyRW50cnlQb3BvdmVyQ29udGVudCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExFRlQ6IHN0cmluZyA9IExFRlQ7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUklHSFQ6IHN0cmluZyA9IFJJR0hUO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJFTE9XOiBzdHJpbmcgPSBCRUxPVztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBQk9WRTogc3RyaW5nID0gQUJPVkU7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUE9QT1ZFUl9TSE9XX0VWRU5UOiBzdHJpbmcgPSBQT1BPVkVSX1NIT1dfRVZFTlQ7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUE9QT1ZFUl9ISURFX0VWRU5UOiBzdHJpbmcgPSBQT1BPVkVSX0hJREVfRVZFTlQ7XG5cbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbW9kZWw6IENhbGVuZGFyRW50cnlQb3BvdmVyTW9kZWw7XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgZW50cnlNYXBwZXI6IElDYWxlbmRhckVudHJ5TWFwcGVyO1xuICBASW5wdXQoKVxuICBwcml2YXRlIGVkaXRvcjogQWJzdHJhY3REYXRhRWRpdG9yO1xuICBwcml2YXRlIF9zaG93OiBib29sZWFuO1xuICBwcml2YXRlIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuICBwcml2YXRlIGNvbXBvV3JhcEluc3RhbmNlOiBhbnk7XG4gIHByaXZhdGUgZGVmYXVsdEFycm93VG9wOiBudW1iZXI7XG4gIHByaXZhdGUgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZTtcbiAgQE9wdGlvbignc2hvdycpXG4gIEBPdXRwdXQoJ3BoeFNob3cnKVxuICBwcml2YXRlIHNob3dFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2hpZGUnKVxuICBAT3V0cHV0KCdwaHhIaWRlJylcbiAgcHJpdmF0ZSBoaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmKTtcbiAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2UgPSBuZWVkRm9jdXNTZXJ2aWNlO1xuICAgIHRoaXMuX3Nob3cgPSBmYWxzZTtcbiAgICB0aGlzLmRlZmF1bHRBcnJvd1RvcCA9IDEwO1xuICAgIHRoaXMuc2hvd0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuaGlkZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5zaG93TWVudSh0aGlzLl9zaG93KTtcbiAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlID0gbnVsbDtcblxuICAgIC8vIHdoZW4gd3JhcHBlciBmaW5pc2hlZCByZW5kZXJcbiAgICB0aGlzLmNvbXBvbmVudEhhbmRsZXIgPSAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGxldCBjb21JbnN0YW5jZSA9IG51bGw7XG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbUluc3RhbmNlID0gcmVzdWx0Lmluc3RhbmNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kYXRhICE9PSAndW5kZWZpbmVkJyAmJiBjb21JbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbUluc3RhbmNlLnNldERhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb21JbnN0YW5jZS5zZXREYXRhKHRoaXMuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29tSW5zdGFuY2Uuc2V0Q2FsZW5kYXJFbnRyeU1hcHBlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21JbnN0YW5jZS5zZXRDYWxlbmRhckVudHJ5TWFwcGVyKHRoaXMuZW50cnlNYXBwZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb21JbnN0YW5jZS5zZXRFZGl0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tSW5zdGFuY2Uuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgPSBjb21JbnN0YW5jZTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93TWVudShpc1Nob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9zaG93ID0gaXNTaG93O1xuXG4gICAgaWYgKGlzU2hvdykge1xuICAgICAgaWYgKHRoaXMubmVlZEZvY3VzU2VydmljZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMubmVlZEZvY3VzU2VydmljZS5zZXRGb2N1c2luZ0NvbXBvbmVudCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgX2dldENvbXBvbmVudEhhbmRsZXIoKTogRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgaXNNb2RlbEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1vZGVsID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLm1vZGVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNldEFycm93VG9wKHRvcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRvcCA9PT0gbnVsbCB8fCB0eXBlb2YgdG9wID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjb250V3JhcEVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCcuY29udGFpbmVyLXdyYXBwZXInKTtcbiAgICBpZiAodHlwZW9mIGNvbnRXcmFwRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgJChjb250V3JhcEVsZW1lbnQpLmZpbmQoJy5jb250YWluZXItYWZ0ZXInKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgJChjb250V3JhcEVsZW1lbnQpLmZpbmQoJy5jb250YWluZXItYWZ0ZXInKS5jc3MoXCJ0b3BcIiwgdG9wKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgJChjb250V3JhcEVsZW1lbnQpLmZpbmQoJy5jb250YWluZXItYmVmb3JlJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICQoY29udFdyYXBFbGVtZW50KS5maW5kKCcuY29udGFpbmVyLWJlZm9yZScpLmNzcyhcInRvcFwiLCB0b3AgLSAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNZW51KHRydWUpO1xuXG4gICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChQT1BPVkVSX1NIT1dfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xuXG4gICAgdGhpcy5zaG93RXZlbnQuZW1pdChldik7XG4gIH1cblxuICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNZW51KGZhbHNlKTtcblxuICAgIGxldCBkYXRhOiBhbnkgPSBudWxsO1xuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoUE9QT1ZFUl9ISURFX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgIHRoaXMuaGlkZUV2ZW50LmVtaXQoZXYpO1xuICB9XG5cbiAgcHVibGljIGlzU2hvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvdztcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RlbCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICB9XG5cbiAgcHVibGljIHNldE1vZGVsKG1vZGVsOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uuc2V0TW9kZWwgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5tb2RlbCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldE1vZGVsKHRoaXMubW9kZWwubW9kZWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnNldERhdGEoZGF0YSk7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0UG9zaXRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5tb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsLnBvc2l0aW9uICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLm1vZGVsLnBvc2l0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoTEVGVCA9PT0gdGhpcy5tb2RlbC5wb3NpdGlvbikge1xuICAgICAgICAgIHJldHVybiBMRUZUO1xuICAgICAgICB9IGVsc2UgaWYgKFJJR0hUID09PSB0aGlzLm1vZGVsLnBvc2l0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIFJJR0hUO1xuICAgICAgICB9IGVsc2UgaWYgKEJFTE9XID09PSB0aGlzLm1vZGVsLnBvc2l0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIEJFTE9XO1xuICAgICAgICB9IGVsc2UgaWYgKEFCT1ZFID09PSB0aGlzLm1vZGVsLnBvc2l0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIEFCT1ZFO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGRlZmF1bHQgaXMgbGVmdFxuICAgIHJldHVybiBMRUZUO1xuICB9XG5cbiAgcHVibGljIGdldFNob3dFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0V2ZW50O1xuICB9XG5cbiAgcHVibGljIGdldEhpZGVFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZUV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldFNob3dFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldEhpZGVFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVFdmVudCA9IGV2ZW50O1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25DbGljaygkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cyhldmVudDogYW55KTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvbkxvc3RGb2N1cyhldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5oaWRlKCk7XG4gICAgdGhpcy5zZXREYXRhUGFyZW50KG51bGwpO1xuICB9XG5cbiAgcHVibGljIGlzU2VsZkRhdGFEaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VsZlNhdmVEYXRhKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIHNldENhbGVuZGFyRW50cnlNYXBwZXIoZW50cnlNYXBwZXI6IElDYWxlbmRhckVudHJ5TWFwcGVyKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyeU1hcHBlciA9IGVudHJ5TWFwcGVyO1xuXG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uuc2V0Q2FsZW5kYXJFbnRyeU1hcHBlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLnNldENhbGVuZGFyRW50cnlNYXBwZXIodGhpcy5lbnRyeU1hcHBlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEFic3RyYWN0RGF0YUVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuXG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uuc2V0RWRpdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uuc2V0RWRpdG9yKHRoaXMuZWRpdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG9QcmVsb2FkKCk6IFByb21pc2U8YW55PiB7ICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4geyAgICAgICByZXNvbHZlKG51bGwpOyAgICAgfSk7ICAgfSAgcHVibGljIGRvTG9hZGVkKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0RW50cnlNYXBwZXIoKTogSUNhbGVuZGFyRW50cnlNYXBwZXIge1xuICAgIHJldHVybiB0aGlzLmVudHJ5TWFwcGVyO1xuICB9XG5cbiAgcHVibGljIG9uUG9wb3ZlckNsb3NlZCgkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uub25Qb3BvdmVyQ2xvc2VkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29tcG9XcmFwSW5zdGFuY2Uub25Qb3BvdmVyQ2xvc2VkKCRldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQXV0b1NhdmVkKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb1dyYXBJbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5jb21wb1dyYXBJbnN0YW5jZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5vbkF1dG9TYXZlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLmNvbXBvV3JhcEluc3RhbmNlLm9uQXV0b1NhdmVkKCRldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQXV0b1NhdmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29tcG9XcmFwSW5zdGFuY2UuaXNBdXRvU2F2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wb1dyYXBJbnN0YW5jZS5pc0F1dG9TYXZlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gIFx0cmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=