UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

576 lines (575 loc) 40.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, Output, ElementRef, EventEmitter, ViewChild } from '@angular/core'; import { CheckBox } from '../../../../../component/dataview/input/CheckBox.component'; import { I18N } from '../../../../../decorator/I18N.decorator'; import { Option } from '../../../../../decorator/Option.decorator'; import { NeedFocusService } from '../../../../../service/NeedFocusService.service'; import { EventUtils } from '../../../../../share/utils/EventUtils'; import { INDETERMINATE_CHANGE_EVENT, BEFORE_INDETERMINATE_CHANGE_EVENT } from '../../../../../share/CustomEventType'; import { MatCheckbox } from '@angular/material'; var /** @type {?} */ TYPE_NAME = "material-checkbox"; var /** @type {?} */ DEFAULT_FIELD = "label"; var MaterialCheckBox = /** @class */ (function (_super) { tslib_1.__extends(MaterialCheckBox, _super); function MaterialCheckBox(elementRef, needFocusService) { var _this = _super.call(this, elementRef, needFocusService) || this; _this.beforeIndeterminateChangeEvent = new EventEmitter(); _this.indeterminateChangeEvent = new EventEmitter(); return _this; } /** * @return {?} */ MaterialCheckBox.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; _super.prototype.ngOnInit.call(this); $(this.elementRef.nativeElement).find('input.mat-checkbox-input').focus(function ($event) { _this.onFocusing($event); }); $(this.elementRef.nativeElement).find('input.mat-checkbox-input').blur(function ($event) { _this.onLostFocusing($event); }); }; /** * @return {?} */ MaterialCheckBox.prototype._displayHelp = /** * @return {?} */ function () { var /** @type {?} */ hasHelp = this.hasHelp(); return hasHelp && this.isShowHelp(); }; /** * @return {?} */ MaterialCheckBox.prototype.getLastPosition = /** * @return {?} */ function () { return this.labelPosition; }; /** * @param {?} labelPosition * @return {?} */ MaterialCheckBox.prototype.setLastPosition = /** * @param {?} labelPosition * @return {?} */ function (labelPosition) { this.labelPosition = labelPosition; }; /** * @return {?} */ MaterialCheckBox.prototype.isDisableRipple = /** * @return {?} */ function () { return this.disableRipple; }; /** * @param {?} disableRipple * @return {?} */ MaterialCheckBox.prototype.setDisableRipple = /** * @param {?} disableRipple * @return {?} */ function (disableRipple) { this.disableRipple = disableRipple; }; /** * @return {?} */ MaterialCheckBox.prototype.getLabel = /** * @return {?} */ function () { return this.label; }; /** * @param {?} label * @return {?} */ MaterialCheckBox.prototype.setLabel = /** * @param {?} label * @return {?} */ function (label) { this.label = label; }; /** * @return {?} */ MaterialCheckBox.prototype.isIndeterminate = /** * @return {?} */ function () { return this.indeterminate; }; /** * @param {?} indeterminate * @return {?} */ MaterialCheckBox.prototype.setIndeterminate = /** * @param {?} indeterminate * @return {?} */ function (indeterminate) { this.indeterminate = indeterminate; }; /** * @param {?} $event * @return {?} */ MaterialCheckBox.prototype.onClick = /** * @param {?} $event * @return {?} */ function ($event) { if (this.isReadOnly() || (this.isDisabled())) { $event.preventDefault(); } }; /** * @param {?} $event * @return {?} */ MaterialCheckBox.prototype.onChange = /** * @param {?} $event * @return {?} */ function ($event) { this.mcomp.toggle(); // $event is MatCheckboxChange {source: MatCheckbox, checked: boolean} if ($event.checked !== null && $event.checked !== undefined) { this.setInputValue($event.checked); } }; /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ MaterialCheckBox.prototype.onIndeterminateChange = /** * @param {?} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; // $event is boolean if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } if (fireEvent) { this.emitBeforeIndeterminateChangeEvent(!$event, $event); } EventUtils.handleBrowserEvent(this, 'beforeIndeterminateChangeEvent', $event, fireEvent, function ($event) { // doEvent }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforeIndeterminateChangeEvent(!$event, $event); }, function ($event, result) { // emitAfterEvent // emitAfterEvent _this.emitIndeterminateChangeEvent(!$event, $event); }, function ($event) { // doPrevented }); }; /** * @param {?} oldValue * @param {?} newValue * @param {?=} $event * @return {?} */ MaterialCheckBox.prototype.emitBeforeIndeterminateChangeEvent = /** * @param {?} oldValue * @param {?} newValue * @param {?=} $event * @return {?} */ function (oldValue, newValue, $event) { var /** @type {?} */ eventData = { data: this.data, oldValue: oldValue, newValue: newValue }; // emit event var /** @type {?} */ data = eventData; var /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_INDETERMINATE_CHANGE_EVENT, this, data, $event); if (this.beforeIndeterminateChangeEvent !== null && this.beforeIndeterminateChangeEvent !== undefined) { this.beforeIndeterminateChangeEvent.emit(ev); } }; /** * @param {?} oldValue * @param {?} newValue * @param {?=} $event * @return {?} */ MaterialCheckBox.prototype.emitIndeterminateChangeEvent = /** * @param {?} oldValue * @param {?} newValue * @param {?=} $event * @return {?} */ function (oldValue, newValue, $event) { var /** @type {?} */ eventData = { data: this.data, oldValue: oldValue, newValue: newValue }; // emit event var /** @type {?} */ data = eventData; var /** @type {?} */ ev = EventUtils.newCustomEvent(INDETERMINATE_CHANGE_EVENT, this, data, $event); if (this.indeterminateChangeEvent !== null && this.indeterminateChangeEvent !== undefined) { this.indeterminateChangeEvent.emit(ev); } }; /** * @param {?} $event * @return {?} */ MaterialCheckBox.prototype.onFocusing = /** * @param {?} $event * @return {?} */ function ($event) { this.needFocusService.setFocusingComponent(this, $event); }; /** * @param {?} $event * @return {?} */ MaterialCheckBox.prototype.onLostFocusing = /** * @param {?} $event * @return {?} */ function ($event) { this.needFocusService.resetFocusingComponent($event); }; /** * @param {?} $event * @return {?} */ MaterialCheckBox.prototype.doFocus = /** * @param {?} $event * @return {?} */ function ($event) { if ($(this.elementRef.nativeElement).find('input.mat-checkbox-input:focus').length <= 0) { $(this.elementRef.nativeElement).find('input.mat-checkbox-input').focus(); } }; /** * @param {?} $event * @return {?} */ MaterialCheckBox.prototype.doLostFocus = /** * @param {?} $event * @return {?} */ function ($event) { if ($(this.elementRef.nativeElement).find('input.mat-checkbox-input:focus').length > 0) { $(this.elementRef.nativeElement).find('input.mat-checkbox-input').blur(); } }; /** * @return {?} */ MaterialCheckBox.prototype.getBeforeIndeterminateChangeEvent = /** * @return {?} */ function () { return this.beforeIndeterminateChangeEvent; }; /** * @param {?} event * @return {?} */ MaterialCheckBox.prototype.setBeforeIndeterminateChangeEvent = /** * @param {?} event * @return {?} */ function (event) { this.beforeIndeterminateChangeEvent = event; }; /** * @return {?} */ MaterialCheckBox.prototype.getIndeterminateChangeEvent = /** * @return {?} */ function () { return this.indeterminateChangeEvent; }; /** * @param {?} event * @return {?} */ MaterialCheckBox.prototype.setIndeterminateChangeEvent = /** * @param {?} event * @return {?} */ function (event) { this.indeterminateChangeEvent = event; }; MaterialCheckBox.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"material-input material-checkbox\">\n <mat-checkbox #mcomp [disabled]=\"isDisabled()\" [checked]=\"isToggle()\" [indeterminate]=\"isIndeterminate()\" [disableRipple]=\"isDisableRipple()\" [labelPosition]=\"getLastPosition()\" (click)=\"onClick($event)\" (change)=\"onChange($event)\" (indeterminateChange)=\"onIndeterminateChange($event)\">{{getLabel()}}</mat-checkbox>\n\t<div class=\"help\">\n\t\t{{getHelp() | phx_text}}\n\t</div>\n</div>\n" },] }, ]; /** @nocollapse */ MaterialCheckBox.ctorParameters = function () { return [ { type: ElementRef, }, { type: NeedFocusService, }, ]; }; MaterialCheckBox.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 },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "labelPosition": [{ type: Input },], "label": [{ type: Input },], "disableRipple": [{ type: Input },], "indeterminate": [{ type: Input },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeIndeterminateChangeEvent": [{ type: Output, args: ['phxBeforeIndeterminateChange',] },], "indeterminateChangeEvent": [{ type: Output, args: ['phxIndeterminateChange',] },], "mcomp": [{ type: ViewChild, args: ['mcomp',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialCheckBox.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialCheckBox.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialCheckBox.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialCheckBox.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialCheckBox.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialCheckBox.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialCheckBox.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialCheckBox.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], MaterialCheckBox.prototype, "help", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialCheckBox.prototype, "labelPosition", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialCheckBox.prototype, "label", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "disableRipple", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialCheckBox.prototype, "indeterminate", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeIndeterminateChange'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "beforeIndeterminateChangeEvent", void 0); tslib_1.__decorate([ Option('indeterminateChange'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialCheckBox.prototype, "indeterminateChangeEvent", void 0); return MaterialCheckBox; }(CheckBox)); export { MaterialCheckBox }; function MaterialCheckBox_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ MaterialCheckBox.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ MaterialCheckBox.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ MaterialCheckBox.propDecorators; /** @type {?} */ MaterialCheckBox.prototype.dataParent; /** @type {?} */ MaterialCheckBox.prototype.ignoreParentData; /** @type {?} */ MaterialCheckBox.prototype.data; /** @type {?} */ MaterialCheckBox.prototype.ignoreParentDisabled; /** @type {?} */ MaterialCheckBox.prototype.delegateHistory; /** @type {?} */ MaterialCheckBox.prototype.onDisabled; /** @type {?} */ MaterialCheckBox.prototype.onEnabled; /** @type {?} */ MaterialCheckBox.prototype.loadingEnabled; /** @type {?} */ MaterialCheckBox.prototype.i18nKey; /** @type {?} */ MaterialCheckBox.prototype.bypass; /** @type {?} */ MaterialCheckBox.prototype.options; /** @type {?} */ MaterialCheckBox.prototype.disabled; /** @type {?} */ MaterialCheckBox.prototype.field; /** @type {?} */ MaterialCheckBox.prototype.name; /** @type {?} */ MaterialCheckBox.prototype.typeOfData; /** @type {?} */ MaterialCheckBox.prototype.readOnly; /** @type {?} */ MaterialCheckBox.prototype.help; /** @type {?} */ MaterialCheckBox.prototype.labelPosition; /** @type {?} */ MaterialCheckBox.prototype.label; /** @type {?} */ MaterialCheckBox.prototype.disableRipple; /** @type {?} */ MaterialCheckBox.prototype.indeterminate; /** @type {?} */ MaterialCheckBox.prototype.startValidateEvent; /** @type {?} */ MaterialCheckBox.prototype.endValidateEvent; /** @type {?} */ MaterialCheckBox.prototype.beforeFocusEvent; /** @type {?} */ MaterialCheckBox.prototype.focusEvent; /** @type {?} */ MaterialCheckBox.prototype.beforeLostFocusEvent; /** @type {?} */ MaterialCheckBox.prototype.lostFocusEvent; /** @type {?} */ MaterialCheckBox.prototype.beforeChangeEvent; /** @type {?} */ MaterialCheckBox.prototype.changeEvent; /** @type {?} */ MaterialCheckBox.prototype.beforeIndeterminateChangeEvent; /** @type {?} */ MaterialCheckBox.prototype.indeterminateChangeEvent; /** @type {?} */ MaterialCheckBox.prototype.mcomp; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxDaGVja0JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi90aGVtZS9tYXRlcmlhbC9jb21wb25lbnQvZGF0YXZpZXcvaW5wdXQvTWF0ZXJpYWxDaGVja0JveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBRXRGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRCxxQkFBTSxTQUFTLEdBQVcsbUJBQW1CLENBQUM7QUFFOUMscUJBQU0sYUFBYSxHQUFXLE9BQU8sQ0FBQzs7SUFhQSw0Q0FBUTtJQThHNUMsMEJBQVksVUFBc0IsRUFBRSxnQkFBa0M7UUFBdEUsWUFDRSxrQkFBTSxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsU0FJcEM7UUFGQyxLQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM5RCxLQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQzs7S0FDekQ7Ozs7SUFFTSxtQ0FBUTs7Ozs7UUFDYixpQkFBTSxRQUFRLFdBQUUsQ0FBQztRQUVqQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBQyxNQUFNO1lBQzdFLEtBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekIsQ0FBQyxDQUFDO1FBRUgsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsTUFBTTtZQUM1RSxLQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdCLENBQUMsQ0FBQzs7Ozs7SUFHRSx1Q0FBWTs7OztRQUNqQixxQkFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE1BQU0sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDOzs7OztJQUcvQiwwQ0FBZTs7OztRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7O0lBR3JCLDBDQUFlOzs7O2NBQUMsYUFBcUI7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Ozs7O0lBRzlCLDBDQUFlOzs7O1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDOzs7Ozs7SUFHckIsMkNBQWdCOzs7O2NBQUMsYUFBc0I7UUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Ozs7O0lBRzlCLG1DQUFROzs7O1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Ozs7OztJQUdiLG1DQUFROzs7O2NBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7Ozs7SUFHZCwwQ0FBZTs7OztRQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7Ozs7O0lBR3JCLDJDQUFnQjs7OztjQUFDLGFBQXNCO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7Ozs7SUFHOUIsa0NBQU87Ozs7Y0FBQyxNQUFhO1FBQzFCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekI7Ozs7OztJQUdJLG1DQUFROzs7O2NBQUMsTUFBTTtRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDOztRQUdwQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEM7Ozs7Ozs7SUFHSSxnREFBcUI7Ozs7O2NBQUMsTUFBVyxFQUFFLFNBQW1COzs7UUFFM0QsRUFBRSxDQUFDLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNsRCxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ2xCO1FBRUQsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMxRDtRQUVELFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFDLE1BQWE7O1NBRXRHLEVBQUUsVUFBQyxNQUFhOztZQUVmLEFBREEsa0JBQWtCO1lBQ2xCLEtBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMxRCxFQUFFLFVBQUMsTUFBYSxFQUFFLE1BQVc7O1lBRTVCLEFBREEsaUJBQWlCO1lBQ2pCLEtBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNwRCxFQUFFLFVBQUMsTUFBYTs7U0FFaEIsQ0FBQyxDQUFDOzs7Ozs7OztJQUdLLDZEQUFrQzs7Ozs7O0lBQTVDLFVBQTZDLFFBQWEsRUFBRSxRQUFhLEVBQUUsTUFBWTtRQUNyRixxQkFBSSxTQUFTLEdBQVE7WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLFFBQVE7WUFDbEIsUUFBUSxFQUFFLFFBQVE7U0FDbkIsQ0FBQzs7UUFHRixxQkFBSSxJQUFJLEdBQVEsU0FBUyxDQUFDO1FBQzFCLHFCQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLGlDQUFpQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUYsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLDhCQUE4QixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsOEJBQThCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO0tBQ0Y7Ozs7Ozs7SUFFUyx1REFBNEI7Ozs7OztJQUF0QyxVQUF1QyxRQUFhLEVBQUUsUUFBYSxFQUFFLE1BQVk7UUFDL0UscUJBQUksU0FBUyxHQUFRO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUM7O1FBR0YscUJBQUksSUFBSSxHQUFRLFNBQVMsQ0FBQztRQUMxQixxQkFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRW5GLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN4QztLQUNGOzs7OztJQUVNLHFDQUFVOzs7O2NBQUMsTUFBYTtRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDOzs7Ozs7SUFHcEQseUNBQWM7Ozs7Y0FBQyxNQUFhO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Ozs7O0lBRzdDLGtDQUFPOzs7O0lBQWpCLFVBQWtCLE1BQWE7UUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDM0U7S0FDRjs7Ozs7SUFFUyxzQ0FBVzs7OztJQUFyQixVQUFzQixNQUFhO1FBQ2pDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFFO0tBQ0Y7Ozs7SUFFTSw0REFBaUM7Ozs7UUFDdEMsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQzs7Ozs7O0lBR3RDLDREQUFpQzs7OztjQUFDLEtBQXdCO1FBQy9ELElBQUksQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUM7Ozs7O0lBR3ZDLHNEQUEyQjs7OztRQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDOzs7Ozs7SUFHaEMsc0RBQTJCOzs7O2NBQUMsS0FBd0I7UUFDekQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQzs7O2dCQXpSekMsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFFBQVEsRUFBRSwyY0FNWDtpQkFDQTs7OztnQkF6QjBDLFVBQVU7Z0JBSzVDLGdCQUFnQjs7OytCQXlCdEIsS0FBSztxQ0FHTCxLQUFLO3lCQUdMLEtBQUs7eUNBR0wsS0FBSztvQ0FHTCxLQUFLOytCQUdMLEtBQUs7OEJBR0wsS0FBSzttQ0FHTCxLQUFLOzRCQUdMLEtBQUs7MkJBR0wsS0FBSyxTQUFDLFlBQVk7NEJBR2xCLEtBQUs7NkJBRUwsS0FBSzswQkFJTCxLQUFLO3lCQUlMLEtBQUs7K0JBR0wsS0FBSzs2QkFHTCxLQUFLO3lCQUdMLEtBQUs7a0NBS0wsS0FBSzswQkFHTCxLQUFLO2tDQUlMLEtBQUs7a0NBR0wsS0FBSzt1Q0FNTCxNQUFNLFNBQUMsa0JBQWtCO3FDQUd6QixNQUFNLFNBQUMsZ0JBQWdCO3FDQUd2QixNQUFNLFNBQUMsZ0JBQWdCOytCQUd2QixNQUFNLFNBQUMsVUFBVTt5Q0FHakIsTUFBTSxTQUFDLG9CQUFvQjttQ0FHM0IsTUFBTSxTQUFDLGNBQWM7c0NBR3JCLE1BQU0sU0FBQyxpQkFBaUI7Z0NBR3hCLE1BQU0sU0FBQyxXQUFXO21EQUtsQixNQUFNLFNBQUMsOEJBQThCOzZDQUdyQyxNQUFNLFNBQUMsd0JBQXdCOzBCQUkvQixTQUFTLFNBQUMsT0FBTzs7O1FBdEdqQixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7MENBQ2EsUUFBUTs7O1FBRTdCLE1BQU0sRUFBRTswQ0FDWSxRQUFROzs7UUFFNUIsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxFQUFFOzs7O1FBR1IsTUFBTSxDQUFDLFlBQVksQ0FBQzs7OztRQUtwQixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFHUixJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFNUixNQUFNLENBQUMsZUFBZSxDQUFDOzBDQUNNLFlBQVk7OztRQUV6QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDOzBDQUNNLFlBQVk7OztRQUVqQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7MENBQ00sWUFBWTs7O1FBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUM7MENBQ00sWUFBWTs7O1FBRXJDLE1BQU0sQ0FBQyxjQUFjLENBQUM7MENBQ00sWUFBWTs7O1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7MENBQ00sWUFBWTs7O1FBSWxDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFckQsTUFBTSxDQUFDLHFCQUFxQixDQUFDOzBDQUNNLFlBQVk7OzJCQW5JbEQ7RUEwQnNDLFFBQVE7U0FBakMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoZWNrQm94IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L0NoZWNrQm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L0lIYXNEYXRhJztcclxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRVdGlscyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlL3V0aWxzL0V2ZW50VXRpbHMnO1xyXG5pbXBvcnQgeyBJTkRFVEVSTUlOQVRFX0NIQU5HRV9FVkVOVCwgQkVGT1JFX0lOREVURVJNSU5BVEVfQ0hBTkdFX0VWRU5UIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmUvQ3VzdG9tRXZlbnRUeXBlJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3ggfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XHJcblxyXG5cclxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcIm1hdGVyaWFsLWNoZWNrYm94XCI7XHJcblxyXG5jb25zdCBERUZBVUxUX0ZJRUxEOiBzdHJpbmcgPSBcImxhYmVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxyXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXHJcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwibWF0ZXJpYWwtaW5wdXQgbWF0ZXJpYWwtY2hlY2tib3hcIj5cclxuICA8bWF0LWNoZWNrYm94ICNtY29tcCBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCgpXCIgW2NoZWNrZWRdPVwiaXNUb2dnbGUoKVwiIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZSgpXCIgW2Rpc2FibGVSaXBwbGVdPVwiaXNEaXNhYmxlUmlwcGxlKClcIiBbbGFiZWxQb3NpdGlvbl09XCJnZXRMYXN0UG9zaXRpb24oKVwiIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiAoaW5kZXRlcm1pbmF0ZUNoYW5nZSk9XCJvbkluZGV0ZXJtaW5hdGVDaGFuZ2UoJGV2ZW50KVwiPnt7Z2V0TGFiZWwoKX19PC9tYXQtY2hlY2tib3g+XHJcblx0PGRpdiBjbGFzcz1cImhlbHBcIj5cclxuXHRcdHt7Z2V0SGVscCgpIHwgcGh4X3RleHR9fVxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxDaGVja0JveCBleHRlbmRzIENoZWNrQm94IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xyXG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXHJcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXHJcbiAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhVmlld1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGZpZWxkOiBzdHJpbmc7XHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIHR5cGVPZkRhdGE6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCByZWFkT25seTogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBJMThOKClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xyXG4gIC8vIC0tLSBTZWxmXHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgbGFiZWxQb3NpdGlvbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQEkxOE4oKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBsYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGRpc2FibGVSaXBwbGU6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcclxuXHJcbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RJbnB1dERhdGFWaWV3XHJcbiAgQE91dHB1dCgncGh4U3RhcnRWYWxpZGF0ZScpXHJcbiAgQE9wdGlvbignc3RhcnRWYWxpZGF0ZScpXHJcbiAgcHJvdGVjdGVkIHN0YXJ0VmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4RW5kVmFsaWRhdGUnKVxyXG4gIEBPcHRpb24oJ2VuZFZhbGlkYXRlJylcclxuICBwcm90ZWN0ZWQgZW5kVmFsaWRhdGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlRm9jdXMnKVxyXG4gIEBPcHRpb24oJ2JlZm9yZUZvY3VzJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlRm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4Rm9jdXMnKVxyXG4gIEBPcHRpb24oJ2ZvY3VzJylcclxuICBwcm90ZWN0ZWQgZm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlTG9zdEZvY3VzJylcclxuICBAT3B0aW9uKCdiZWZvcmVMb3N0Rm9jdXMnKVxyXG4gIHByb3RlY3RlZCBiZWZvcmVMb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4TG9zdEZvY3VzJylcclxuICBAT3B0aW9uKCdsb3N0Rm9jdXMnKVxyXG4gIHByb3RlY3RlZCBsb3N0Rm9jdXNFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlQ2hhbmdlJylcclxuICBAT3B0aW9uKCdiZWZvcmVDaGFuZ2UnKVxyXG4gIHByb3RlY3RlZCBiZWZvcmVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4Q2hhbmdlJylcclxuICBAT3B0aW9uKCdjaGFuZ2UnKVxyXG4gIHByb3RlY3RlZCBjaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIC8vIC0tLSBTZWxmXHJcbiAgQE91dHB1dCgncGh4QmVmb3JlSW5kZXRlcm1pbmF0ZUNoYW5nZScpXHJcbiAgQE9wdGlvbignYmVmb3JlSW5kZXRlcm1pbmF0ZUNoYW5nZScpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4SW5kZXRlcm1pbmF0ZUNoYW5nZScpXHJcbiAgQE9wdGlvbignaW5kZXRlcm1pbmF0ZUNoYW5nZScpXHJcbiAgcHJvdGVjdGVkIGluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21jb21wJylcclxuICBwcml2YXRlIG1jb21wOiBNYXRDaGVja2JveDtcclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSkge1xyXG4gICAgc3VwZXIoZWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy5iZWZvcmVJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0Lm1hdC1jaGVja2JveC1pbnB1dCcpLmZvY3VzKCgkZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5vbkZvY3VzaW5nKCRldmVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCdpbnB1dC5tYXQtY2hlY2tib3gtaW5wdXQnKS5ibHVyKCgkZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5vbkxvc3RGb2N1c2luZygkZXZlbnQpO1xyXG4gICAgfSk7XHJcbiAgfSBcclxuXHJcbiAgcHVibGljIF9kaXNwbGF5SGVscCgpOiBib29sZWFuIHtcclxuICAgIGxldCBoYXNIZWxwID0gdGhpcy5oYXNIZWxwKCk7XHJcblxyXG4gICAgcmV0dXJuIGhhc0hlbHAgJiYgdGhpcy5pc1Nob3dIZWxwKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGFzdFBvc2l0aW9uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sYWJlbFBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldExhc3RQb3NpdGlvbihsYWJlbFBvc2l0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubGFiZWxQb3NpdGlvbiA9IGxhYmVsUG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNEaXNhYmxlUmlwcGxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREaXNhYmxlUmlwcGxlKGRpc2FibGVSaXBwbGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzYWJsZVJpcHBsZSA9IGRpc2FibGVSaXBwbGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxhYmVsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEluZGV0ZXJtaW5hdGUoaW5kZXRlcm1pbmF0ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNsaWNrKCRldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmlzUmVhZE9ubHkoKSB8fCAodGhpcy5pc0Rpc2FibGVkKCkpKSB7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlKCRldmVudCkge1xyXG4gICAgdGhpcy5tY29tcC50b2dnbGUoKTtcclxuXHJcbiAgICAvLyAkZXZlbnQgaXMgTWF0Q2hlY2tib3hDaGFuZ2XCoHtzb3VyY2U6IE1hdENoZWNrYm94LCBjaGVja2VkOiBib29sZWFufVxyXG4gICAgaWYgKCRldmVudC5jaGVja2VkICE9PSBudWxsICYmICRldmVudC5jaGVja2VkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKCRldmVudC5jaGVja2VkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkluZGV0ZXJtaW5hdGVDaGFuZ2UoJGV2ZW50OiBhbnksIGZpcmVFdmVudD86IGJvb2xlYW4pIHtcclxuICAgIC8vICRldmVudCBpcyBib29sZWFuXHJcbiAgICBpZiAoZmlyZUV2ZW50ID09PSBudWxsIHx8IGZpcmVFdmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZpcmVFdmVudCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpcmVFdmVudCkge1xyXG4gICAgICB0aGlzLmVtaXRCZWZvcmVJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQoISRldmVudCwgJGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBFdmVudFV0aWxzLmhhbmRsZUJyb3dzZXJFdmVudCh0aGlzLCAnYmVmb3JlSW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50JywgJGV2ZW50LCBmaXJlRXZlbnQsICgkZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIC8vIGRvRXZlbnRcclxuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIC8vIGVtaXRCZWZvcmVFdmVudFxyXG4gICAgICB0aGlzLmVtaXRCZWZvcmVJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQoISRldmVudCwgJGV2ZW50KTtcclxuICAgIH0sICgkZXZlbnQ6IEV2ZW50LCByZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAvLyBlbWl0QWZ0ZXJFdmVudFxyXG4gICAgICB0aGlzLmVtaXRJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQoISRldmVudCwgJGV2ZW50KTtcclxuICAgIH0sICgkZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIC8vIGRvUHJldmVudGVkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBlbWl0QmVmb3JlSW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50KG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnksICRldmVudD86IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IGV2ZW50RGF0YTogYW55ID0ge1xyXG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcclxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGVtaXQgZXZlbnRcclxuICAgIGxldCBkYXRhOiBhbnkgPSBldmVudERhdGE7XHJcbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KEJFRk9SRV9JTkRFVEVSTUlOQVRFX0NIQU5HRV9FVkVOVCwgdGhpcywgZGF0YSwgJGV2ZW50KTtcclxuXHJcbiAgICBpZiAodGhpcy5iZWZvcmVJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmJlZm9yZUluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudC5lbWl0KGV2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBlbWl0SW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50KG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnksICRldmVudD86IGFueSk6IHZvaWQge1xyXG4gICAgbGV0IGV2ZW50RGF0YTogYW55ID0ge1xyXG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZSxcclxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGVtaXQgZXZlbnRcclxuICAgIGxldCBkYXRhOiBhbnkgPSBldmVudERhdGE7XHJcbiAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KElOREVURVJNSU5BVEVfQ0hBTkdFX0VWRU5ULCB0aGlzLCBkYXRhLCAkZXZlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50LmVtaXQoZXYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRm9jdXNpbmcoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnNldEZvY3VzaW5nQ29tcG9uZW50KHRoaXMsICRldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Mb3N0Rm9jdXNpbmcoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlLnJlc2V0Rm9jdXNpbmdDb21wb25lbnQoJGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICgkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCdpbnB1dC5tYXQtY2hlY2tib3gtaW5wdXQ6Zm9jdXMnKS5sZW5ndGggPD0gMCkge1xyXG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCdpbnB1dC5tYXQtY2hlY2tib3gtaW5wdXQnKS5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRvTG9zdEZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICgkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKCdpbnB1dC5tYXQtY2hlY2tib3gtaW5wdXQ6Zm9jdXMnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0Lm1hdC1jaGVja2JveC1pbnB1dCcpLmJsdXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCZWZvcmVJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQoKTogRXZlbnRFbWl0dGVyPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmVmb3JlSW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEJlZm9yZUluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuYmVmb3JlSW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50ID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5kZXRlcm1pbmF0ZUNoYW5nZUV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRJbmRldGVybWluYXRlQ2hhbmdlRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2VFdmVudCA9IGV2ZW50O1xyXG4gIH1cclxufVxyXG4iXX0=